avogadro-1.1.1/0000755000175000001440000000000012250371220012517 5ustar marcususersavogadro-1.1.1/ChangeLog0000644000175000001440000433551512250371126014316 0ustar marcususers2013-12-02 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I05659554de4b5c7d74bfeba1dbc3e80f2db021ca 2013-11-25 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ia653309d4e4a71dd956d6855d389f59158dc1a1a 2013-11-18 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: If360428adfdb6da7a448f3782ba2f9c58d0bff1a 2013-11-11 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I4be2a310c7cc070699ea94c9be87de25d98c542d 2013-11-04 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: If3080e7ae3cd28b1d3f5638b80393ddbd2b8415c 2013-10-29 Geoff Hutchison * libavogadro/src/extensions/gl2ps/gl2ps.c, libavogadro/src/extensions/gl2ps/gl2ps.h, libavogadro/src/extensions/gl2ps/gl2ps.pdf, libavogadro/src/extensions/gl2ps/gl2psTest.c, libavogadro/src/extensions/gl2ps/gl2psTestSimple.c: Import gl2ps 1.3.8 for upcoming Avogadro bugfix release. Change-Id: I5fd18a6dc1599cf868336dd1733d0fc684e9dcb2 2013-10-28 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I3d2076c510d9cb1728ea9fc0617d875536f98c54 2013-10-21 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2b57d2dbef208d93aacae8586098fd7dff4b1797 2013-10-14 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I8c2f421dd7c47847f54da276cf360372b7614109 2013-10-07 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I20a5041d0427424e53e0eb13f33fa85f71d7d525 2013-09-30 Geoff Hutchison * CMakeLists.txt, INSTALL, cmake/modules/FindEigen2.cmake, cmake/modules/FindEigen3.cmake, libavogadro/src/config.h.in: Use Eigen3 in preference to Eigen2 if found, but in support mode. Eigen3 allows a staged migration to the new API. This patch enables building with either Eigen2 or Eigen3 with complete compatibility. Future versions of Avogadro can use Eigen3 directly. In the meantime, both version 2.x and 3.x are now supported. Change-Id: Ibae3a7ca719124af73f52a19244beb9a2cbf180e * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Idba55093eec7517844553d8e39cd16d1cdadbde8 2013-09-23 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Iec7ff4cd3c3254af406730ff49ce60e7b9c36e03 2013-09-21 Marcus D. Hanwell * libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/qtaim/qtaimlsodaintegrator.h, libavogadro/src/extensions/qtaim/qtaimodeintegrator.h, libavogadro/src/glwidget.h: Removed unguarded GCC pragma calls These were introduced as part of a larger cleanup, and should not be used unguarded. Reverting these, but leaving the rest of the changes in place. Change-Id: Iea444b14e5f82663f7f3a54cebc9e643def7f322 2013-09-20 Geoff Hutchison * libavogadro/src/extensions/propmodel.cpp, libavogadro/src/tools/skeletontree.cpp: Fix crash when setting torsion angles PR#666. Crash from incorrect memory access with SkeletonTree class. Make sure root node is initialized to NULL to avoid deleting. Also make sure to invalidate property table cache. Now setting a torsion rotates the angle and properly updates data. Change-Id: I667cd3ac21d6cb59486483e6752210d5d393722d 2013-09-20 Marcus D. Hanwell * libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/qtaim/qtaimmathutilities.cpp, .../src/extensions/qtaim/qtaimmathutilities.h: Make QTAIM compile and work on Windows Rewrote the math utilities for QTAIM to be simple functions in a namespace, pass their arguments by reference and adjusted style to be a little more consistent. Change-Id: I11737cb521359c1e038930f054630419d2309a30 2013-08-11 Andreas Schwab * libavogadro/src/extensions/crystallography/spglib/CMakeLists.txt, libavogadro/src/extensions/swcntbuilder/tubegen/CMakeLists.txt: Properly set PIC flag for libspglib and libtubegen Change-Id: Ibe8f103fe3a6bfe0ad7c72c6cdfe37d0c2535899 2013-09-19 Geoff Hutchison * testfiles/methane.nwo, testfiles/methanol.nwo: Applied updated NWChem test files using v6.0 Contributed by Michael Banck to clarify distribution. Files remove strongly-worded statement from non-open NWChem. Change-Id: I6ab01e496f05a8116e73e95e0a849c89b301db83 2013-08-14 Julien Nabet * avogadro/src/mainwindow.cpp, avogadro/src/pluginitemmodel.cpp, libavogadro/src/colors/smartscolor.cpp, .../extensions/qtaim/qtaimcriticalpointlocator.cpp, libavogadro/src/extensions/qtaim/qtaimcubature.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.h, .../src/extensions/qtaim/qtaimodeintegrator.h, .../src/extensions/quantuminput/gamessinputdata.cpp, .../extensions/quantuminput/molproinputdialog.cpp, .../src/extensions/surfaces/orbitalextension.cpp, libavogadro/src/tools/skeletontree.cpp: Fix warnings (final part) Avogadro builds ok with -Werror with gcc 4.7.3 Change-Id: I524764748b4acd83a48cdb6a3a611e0d51ccb389 2013-08-13 Julien Nabet * libavogadro/src/extensions/cartesianextension.cpp, .../src/extensions/crystallography/crystallographyextension.cpp, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/glwidget.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/selectrotatetool.cpp: Fix some warnings part2 Change-Id: Ic70ec3d18e999d05292a84e5df614aaec5d97cd6 2013-08-07 Julien Nabet * .../extensions/surfaces/openqube/gamessukout.cpp, .../src/extensions/surfaces/openqube/gamessus.cpp, .../src/extensions/surfaces/openqube/molden.cpp, .../src/extensions/surfaces/openqube/mopacaux.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/molecule.cpp, libavogadro/src/plotwidget.cpp: Fix some warnings Change-Id: I37005da0d650744b0811c6d98d62e99d0dc738f6 2013-08-03 Julien Nabet * libavogadro/src/extensions/qtaim/qtaimcubature.cpp, .../extensions/quantuminput/gamessinputdialog.cpp: Cppcheck: fix duplicate branches for if and else Change-Id: Idcadcca42053b05e5986c8bbc4f1d3fa671fb025 * avogadro/src/pluginsettings.cpp, avogadro/src/projecttreeeditor.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/quantuminput/gamessinputdata.cpp, libavogadro/src/extensions/surfaces/openqube/slaterset.cpp, libavogadro/src/glwidget.cpp: Cppcheck: fix some reassignments TODO: src/extensions/surfaces/openqube/gaussianset.cpp needs to be changed. Indeed, from line 356 there's a wrong use of switch Moreover indexMO is assigned but not used Change-Id: Ie69082b43a72f8b138af2feba406a2b935e5bcc6 2013-08-02 Julien Nabet * .../src/extensions/quantuminput/gamessextension.cpp, .../src/extensions/quantuminput/gamessinputdata.cpp, libavogadro/src/primitivelist.h: Cppcheck: fix Prefer prefix ++/-- operators for non-primitive type Change-Id: I9345e04ca9538028a340fba5bfcf2e58a9825bf9 2013-04-08 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I8bde8aadd032497f211acfcc07b2f64d37e7a59b 2013-04-01 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ic1198f50861ab4701335108ccc632cd4d4487ad0 2013-03-25 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ie932a8f5a74d4a183e41ac904ab5af25648fb54f 2013-03-18 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I6163f50df70c0c5b19a617d22f8442a529b3967b 2013-03-11 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I4b9bedebe85c92c33fc52e5c31e198cc258424db 2013-03-04 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ib50256b8c3f8e9991b4c31c6fee678b476893476 2013-02-25 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2520f8078592426318785ff421adb6c10b1dfdc0 2013-02-18 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ifa1679c95c715e611260873f951a3a8d227bbe51 2013-02-11 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I7361983a5ffd57cce38bd9eaf535aa38f331aa0b 2013-02-04 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Iedd6b7f68b4f3e2c2958dfaee76ca4db8f918312 2013-01-28 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I147b3cac87ea3904bd76f9b0547f7f0654037e81 2013-01-21 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I393f81dd671a4e238b9905134a24642ecaee6440 2013-01-14 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I7878764b0386a68ccd42344e4884adef15392d78 2013-01-07 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I4588704dfe775353db7440324da624085298b52d 2012-12-31 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I762a4cc98e82404c5815962090db40fcae8c2374 2012-12-24 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I84f7822e51324952a35bda86b0e291c9ada87818 2012-05-31 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Add a new "Copy As" SMILES or InChI command. The SMILES, in particular, is useful for the new SMILES-based polymer builder. Change-Id: I532923b78ca7e3c7334a7ea3bc7424d1cfd977dd 2012-12-17 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Icf387412235fd9ed7b29b5ecfa3db669034cfc9c 2012-12-12 Matthew Kennedy * .../src/extensions/quantuminput/CMakeLists.txt, .../extensions/quantuminput/inputfileextension.cpp, .../extensions/quantuminput/psi4inputdialog.cpp, .../src/extensions/quantuminput/psi4inputdialog.h, .../src/extensions/quantuminput/psi4inputdialog.ui: PSI4 Interface added. Change-Id: I215c0d9f5f9b2e4c95790d2c278ff4f9ddb7aa75 2012-12-10 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I311675a1b101a3eeb779ed85f1f83531a2c7bc24 2012-12-03 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: If65fc6ab1c6b2251396d9110115d0c38a7224da5 2012-11-26 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I4248d48233a9afb8e960848d49ca26a70680da9f 2012-11-19 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I823eb6c0c45253d127ac80ce0a7c2d65b0992ea6 2012-11-12 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: If2dbf0997c9adbb158ca937ee6c2a9a781d174c8 2012-11-05 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I7ab3bf618b12624b13c21be54a2e4365c83d0a6d 2012-10-29 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I4f2bf5b08cceb085273610cafe6e80651f2ee4f9 2012-10-22 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I5611339f755c84cf8a78299b61bd652eedaae738 2012-10-15 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I1b69d3122b0f2c63c3fb94c2e19e249cc26e14ab 2012-10-08 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2476b9504742fc8311ce12909d1a7c2d0f5fa4ad 2012-10-01 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I9beee811d9723dfae5def9e6f1199306722d0418 2012-09-24 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I1d58396d32862747bd76b8d99eaefaff9145610d 2012-09-17 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/et.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hi.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/ms.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/ta.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/et.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/ms.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Idc8f8ad61c1f600e9502a28952f4c0098248eec4 2012-09-11 Geoff Hutchison * i18n/avogadro/et.po, i18n/avogadro/hi.po, i18n/avogadro/ms.po, i18n/avogadro/sl.po, i18n/avogadro/sq.po, i18n/avogadro/ta.po, i18n/libavogadro/et.po, i18n/libavogadro/ms.po, i18n/libavogadro/sl.po, i18n/libavogadro/sq.po: New translation PO files from Launchpad. Change-Id: I60e26bffa4f95968a2f47e4138bd5e8753495276 2012-09-10 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ie39643ae96e28879b4505e0e972f05da89ca5b7c 2012-09-03 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I67b31c4793b67436ccb8ea141158bf3dccd0c7c9 2012-08-27 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ic256d97c18526d54b295d0ec27889bac396c83f7 2012-08-20 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I1ba3162563569eaffb04c1d3ddbc8d49aa79fcb3 2012-08-13 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I0822a17e96ac792a5620b9355c603b7d4b68bdf5 2012-08-06 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2fe9a3c7bd7df4c5750086027f756132f5cb43ef 2012-07-30 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I770f655b710920abbb5fb871726ba2fb78937db4 2012-07-23 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I5803a9c71e672b93f49e8ce48ff5f4525bf9e214 2012-07-16 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I3241b90a48b5ed3d554d05bc1369180900dd1d19 2012-07-09 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ieaa0b07d0eb1f1d1772867a5a67388c9727890ee 2012-06-13 Geoff Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/molecule.cpp: Fix crash with dipole moment after optimization. Fixes PR#3521044. Request new instance of force field object for calculating dipole moment. Otherwise, multi-threaded usage causes crashing. Change-Id: Iaebf31c13677d29e7acec95b91a17f9e06a17aa4 2012-07-02 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: If7e7bded33c09da90fcf9ec974dbe51a747e95e7 2012-06-25 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I78e782a10e39b7d3488d5e5cc5a984682fbf3a1d 2012-06-15 Geoff Hutchison * testfiles/b2h6.wfn, testfiles/c4h4.wfn, testfiles/hco2.wfn: Add three example WFN files. Gives test files for QTAIM analysis, including diborane (B2H6), C4H4, and HCO2. These files will be used for a tutorial. Change-Id: I0489ea1b23ea4683596069bd219ef8cb3c9874d1 2011-12-22 Albert DeFusco * .../src/extensions/quantuminput/CMakeLists.txt, .../extensions/quantuminput/inputfileextension.cpp, .../extensions/quantuminput/lammpsinputdialog.cpp, .../extensions/quantuminput/lammpsinputdialog.h, .../extensions/quantuminput/lammpsinputdialog.ui: simple lammps input generator for water This input generator along with the OpenBabel lmpdat format can be used to create input files for MD simulations. The SPC and SPC/E water models are programmed. J. Phys. Chem. A, 2001, 105 (43), pp 9954–9960 DOI: 10.1021/jp003020w Change-Id: Icf27536174cfa7a720ec3e625849310e71ff1bfd 2012-06-18 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ie559cf8bcd4b9cb57c342d52832a103780778de9 2012-06-15 Geoff Hutchison * libavogadro/src/atom.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/moleculefile.cpp: Fix residue and atom code assignment. Any time the selection was updated, residue codes would be killed. (No need to call Primitive::update()) Also, be conservative about changing elements when copying atoms for the same reason. Finally, avoid calling OBChainsParser unless *absolutely* necessary, because of bugs like PR#3102300. Fully fixes this bug. Change-Id: If990ce1903d668f596fe67208e34094edb70cfc7 2012-06-12 Geoff Hutchison * .../src/extensions/insertfragmentextension.cpp, .../src/extensions/insertfragmentextension.h: Prevent a quick double-insert. With the "grow by fragment" feature, accidentally double-clicking "insert" could give you much more than you intended. Adds a 2-second delay to ensure you actually want to grow the selected insert. Change-Id: Ib9fb77b067a6470dd7d2672d8ba9e3b7e3738ca4 2012-06-11 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Idee86c73583a211ba091fa954ac4b0a1e5658bb4 2012-06-06 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/overlayengine.h: Removing the overlay engine It has issues leaking GL state, and is not in a finished state. This can be brought back if there is further motivation in the future. Change-Id: Ie1a05b900ac0277ebefc72a43a9631d3713cb5a8 2012-06-04 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ic0a6b0727c85fc317a07e6ee57e628556f2824c0 2012-05-22 Geoff Hutchison * .../arsenides/Co.87Fe.11Ni.13As3-Skutterudite.cif, crystals/arsenides/CoAs3-Skutterudite.cif, crystals/clays/Al2Si2O9H4-Dickite.cif, crystals/clays/Al2Si2O9H4-Kaolinite.cif, crystals/clays/Al2Si2O9H4-Nacrite.cif, crystals/clays/Al2Si4O12Ca0.5-Montmorillonite.cif, crystals/clays/Al4KSi2O12-Illite.cif, crystals/clays/AlSi2O6H-Pyrophyllite.cif, crystals/clays/Fe2.25Cl0.5H2.75-Fougerite.cif, crystals/clays/FeSi2O6H-Nontronite.cif, crystals/clays/Lepidolite.cif, crystals/clays/Mg2Al2SiO9H4-Amesite.cif, crystals/clays/Mg3(O12Si4)H2-Vermiculite.cif, crystals/clays/Mg4Si6O22.82H13.64-Sepiolite.cif, ...n1.854Fe1.656Mg0.537Si0.953O9H4-Guidottiite.cif, crystals/clays/Zn2SiO5H2-Hemimorphite.cif, crystals/ice/H2O-Ice-II.cif, crystals/ice/H2O-Ice-III.cif, crystals/ice/H2O-Ice-IV.cif, crystals/ice/H2O-Ice-Ih.cif, crystals/ice/H2O-Ice-VI.cif, crystals/ice/H2O-Ice-VII.cif, crystals/ice/H2O-Ice.cif, crystals/nitrides/AlN.cif, crystals/nitrides/GaN.cif, crystals/nitrides/InN.cif, crystals/other/As3Co-Skutterudite.cif, crystals/other/H3N-Ammonia.cif, crystals/other/InSb.cif, crystals/other/LaAlO3.cif, crystals/other/LiH.cif, crystals/oxides/BaTiO3-BariumTitanate.cif, crystals/oxides/MgTiO3-MagnesiumTitanate.cif, crystals/selenides/Sb2Se3-Antimonselite.cif, crystals/sulfides/Bi2S3-Bismuthinite.cif, crystals/sulfides/Sb2S3-Stibnite.cif, crystals/titanates/SrTiO3-Tausonite.cif: Added a few more minor crystal structures. Includes all remaining III-V semiconductors, common clays, and ice polymorphs. Change-Id: If674b3af73c16e7754f0f0a1e922468f25c95859 2012-05-28 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I15ec3b28e39a19e9a06f713dfeae5a5b947dc2b2 2012-05-23 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/insertdnadialog.ui, libavogadro/src/extensions/insertdnaextension.cpp, libavogadro/src/extensions/insertdnaextension.h, .../src/extensions/insertpeptideextension.h: Add a DNA/RNA builder. Uses Open Babel's FASTA format support. In OB 2.3.1, this enables single/double strand DNA and modifying the # of bp per turn. Change-Id: I82e13b1ac9bd66eea18adadbd94dc7fc9c0793ff 2012-05-21 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I30dffaf9ac5e7f592e611ecead27d42e4f030af6 2012-05-17 Geoff Hutchison * .../src/extensions/insertfragmentdialog.cpp, libavogadro/src/extensions/insertfragmentdialog.h, libavogadro/src/molecule.cpp: Modify the setOBMol method to fill crystal cells. The existing code will import only the asymmetric unit cell, which is surprising for most inorganic crystals. (It works fine for molecular crystals.) This patch adds a heuristic to fill the unit cell when presented with a crystal < 4 carbon atoms. This also removes similar code from the insert crystal extension. Change-Id: I07f613cebaa72bb6b51c7c6714f1e2d8533ab792 2011-08-23 Geoff Hutchison * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/manipulatesettingswidget.ui, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/moveatomcommand.cpp: Allow manual translation or rotation. Adds a settings widget to the manipulate tool. This allows manual translation or rotation around the origin or the center of geometry. Also supports undo of manipulations. Change-Id: I45a9e02dc6251dfc6f2f0f55d79ed6039ce88697 2012-05-14 Geoff Hutchison * .../crystallography/crystallographyextension.cpp, .../extensions/crystallography/ui/ceslabbuilder.cpp: Fix "rogue" slab atoms bug. Adds a small amount of floating-point slop to comparisons when comparing atoms at unit cell boundaries. Fixes the "rogue atom" bug where edges of the slab weren't always uniform. Change-Id: I195601f786ef9a9e8cb2546a50edc0971d72bbbf * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2f9420cbbbd42f37e17827196279a3582b4407c7 2012-05-07 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2308e7dbd38d410884af6d4568eac77185706d3d 2011-03-27 David C. Lonie * .../src/extensions/crystallography/CMakeLists.txt, .../crystallography/crystallographyextension.cpp, .../crystallography/crystallographyextension.h, .../crystallography/ui/ceslabbuilder.cpp, .../extensions/crystallography/ui/ceslabbuilder.h, .../extensions/crystallography/ui/ceslabbuilder.ui, libavogadro/src/molecule.h: Add a slab builder extension. Generates a slab/surface with arbitrary Miller plane, including producing a supercell beforehand. Generates lattice vectors for the surface. Change-Id: If23e65a1e2cad7334bec37c1dab3b4eb54823954 2012-04-30 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I6be465a480863ba1d0820cd2396735f32a4a2655 2012-04-23 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ie48417f8f0593fdd7a3cf80c92cb8adbb3a4c343 2012-02-10 David C. Lonie * libavogadro/src/camera.cpp, .../crystallography/crystallographyextension.cpp, libavogadro/src/global.h, libavogadro/src/glwidget.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/tools/navigatetool.cpp: Tweaks to camera initialization and navigation. This patch improves camera initialization and navigation for both crystal structures and orthographic projections. Change-Id: Ie838975a470740ea90647c22e1db55b3330af781 2012-04-17 Marcus D. Hanwell * libavogadro/src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/forcefieldextension.cpp: Fixed up a few minor style issues Fixed some whitesapce issues, and use static_cast instead of C casts. Change-Id: I2cd949f7f186e1da14545c04e4965cbe7254838f 2012-04-16 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I044a7ba16eb64771a14c6244b7e6612a8ec2b093 2012-04-12 Marcus D. Hanwell * cmake/modules/FindSIP.cmake, cmake/modules/PythonDeps.cmake: Integrate FindSIP into the Python logic Call find_package(SIP), modified FindSIP to look in the Python path first, as that was the only place we looked before and is likely to be the best candidate when available - it is installed alongside the Python headers we are compiling against. Change-Id: I00aff319ba151e3d9b1995165d1a0b75d339f50c 2012-04-09 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I6a6371c9061cf3105d35e771055cb027608559a8 2012-04-02 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ie89a18143adda1da922ec5ad1099e994aa82ecf4 2012-02-21 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/extensions/unitcellparamdialog.cpp, libavogadro/src/extensions/unitcellparamdialog.h, libavogadro/src/extensions/unitcellparamdialog.ui: Remove old, deprecated unit cell extension. New crystallography extension provides all the same features (and more) in a more user- friendly manner. Change-Id: I05747b2aa8c2f2b648a9ee46ea81f8ff48c258ba 2012-04-01 David C. Lonie * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Starting removing unit cell rendering code from mainwindow. The renderUnitCellAxes functionality is now available through the crystallography extension, and eventually should be isolated to an engine. Change-Id: I99822d87a3212199d435e738a4f82e5cfb98b94e * .../crystallography/crystallographyextension.cpp, .../crystallography/crystallographyextension.h, .../crystallography/ui/ceviewoptionswidget.cpp, .../crystallography/ui/ceviewoptionswidget.h, .../crystallography/ui/ceviewoptionswidget.ui: Add option to change cell color to crystallography extension. Also fix custom cell color persistence. Eventually all of this functionality needs to be moved into an engine so that other painters (e.g. POV-ray) can correctly handle unit cells. For now, I've moved it into the crystallography extensions because it was the last missing bit needed to replace the old unitcellextension, which can now be removed. Change-Id: If413d9aa19a48c827aa4f826f6e6ad96ed309a41 * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Add missing GLWidget API and use alpha value of cell color. Change-Id: I338a5f4b2799e5609747689f2e8017c8c8deb1dd * libavogadro/src/color.cpp, libavogadro/src/color.h: Add QColor and copy constructors to Color. Also fix QColor include. Change-Id: If694f285db0a243c9d9f6b23480eb189a3a38564 2012-03-26 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2813aede48a9cf8850a334c47266d8638ec07208 2012-03-16 Tim Vandermeersch * .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/conformersearchdialog.h, .../src/extensions/conformersearchdialog.ui, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h: Add new conformer search options from openbabel (genetic algortihm) Change-Id: I0fe483240257cc487524a49afe71389103ddd69b 2012-03-19 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I28248068381ecf60af46de8c68e27140ed9ddfd4 2012-03-12 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I8c9893e97f5ad8b5d4ac94b154e8b63eae55efa3 2012-03-05 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ie3b50aaf2a521006617ca9ae4300ec159f37e835 2012-02-27 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ibb013a35ecef88d025ce5302456e53dc50207c87 2012-02-22 David C. Lonie * .../crystallography/ui/cetranslatewidget.cpp, .../crystallography/ui/cetranslatewidget.h, .../crystallography/ui/cetranslatewidget.ui: Added option to translate a crystal so that a specified atom is centered in the unit cell. Change-Id: I2cc645b47b65b8ac39db38a2c00452b3eed874c6 2012-02-18 David C. Lonie * .../crystallography/ui/ceviewoptionswidget.cpp, .../crystallography/ui/ceviewoptionswidget.h, .../crystallography/ui/ceviewoptionswidget.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Add option to only render one set of unit cell boundaries. When an A, B, or C repeat is set, optionally only render the unit cell box for the unit cell at offset (0, 0, 0). This is a popular style for publication images. Change-Id: I38f6206e550a010a3cd5bc9b8e9dd5dd89539aad 2011-08-18 Geoff Hutchison * .../src/extensions/crystallography/CMakeLists.txt, .../crystallography/crystallographyextension.cpp, .../crystallography/crystallographyextension.h, .../crystallography/ui/ceviewoptionswidget.cpp, .../crystallography/ui/ceviewoptionswidget.h, .../crystallography/ui/ceviewoptionswidget.ui: Add support for crystal view options. Includes # of repeat cells and Miller plane. Supplants older UnitCellParam dialog. Change-Id: I86b5f58659c6057aeeb6dc18d086f707004018f0 2012-02-20 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Id85c8e55fe03a51eae30b3054f82565ede79463a 2012-02-05 Marcus D. Hanwell * libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/fragment.cpp, libavogadro/src/fragment.h, libavogadro/src/python/fragment.cpp: Compilation fixes for Python wrapping. See Qt bug https://bugreports.qt-project.org/browse/QTBUG-22829 for issues introduced in Boost 1.48 that cause compilation errors in MOC. QString is implicitly shared in fragment, and the overload was causing compilation errors in the wrapping. I also took a look at the fragment API, and made it more consistent with that of the molecule. The QList is implicitly shared, and so simply adding the missing const is enough. This then allows the Python wrapping to compile again. Change-Id: I678d700e81226259bed55e51800baa5601ff64e1 2012-02-13 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I7f6c1d2527755b39d7622c95ee7879654c4aaa8e 2012-02-10 David C. Lonie * libavogadro/src/CMakeLists.txt, .../src/extensions/crystallography/avospglib.cpp, .../crystallography/crystallographyextension.cpp, .../crystallography/crystalpastedialog.cpp, .../src/extensions/crystallography/obeigenconv.h, libavogadro/src/obeigenconv.h: Move obeigenconv.h to libavogadro public headers. Change-Id: I2a3fe135a504e29b7dcc3719562e26ffd6df9a17 2011-12-02 David C. Lonie * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Add the modelview matrix to the debug overlay Change-Id: I3e2b26160c0dab3cc9aab9611f574141c3878d9c * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Make GLWidget::[abc]Cells() const Change-Id: I990e917e8f01df2998503b12deef9fd8f3b2070f 2012-02-10 David C. Lonie * .../crystallography/crystalpastedialog.cpp, testfiles/VASP-5.2-POSCAR.vasp: Allow import of VASP 5.x+ POSCARs from the clipboard. VASP versions since 5.2 allow an extra line to be inserted at line six that specifies the atomic symbols corresponding to the composition/coordinate data. Testfile added. Change-Id: I31058e29275a1ae9affa800ac8705e64b8742495 2012-02-06 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I5cc222e61862f31b6f508d0789a9a079dbdbc757 2012-01-05 David C. Lonie * avogadro/src/mainwindow.cpp, libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/tests/moleculefiletest.cpp: Add an options argument to MoleculeFile::writeMolecule. Change-Id: I31862372bda12ef3265dc1c1359c6441f4f138d6 2012-01-28 Marcus D. Hanwell * libavogadro/src/camera.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/glpainter_p.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/tools/selectrotatetool.cpp: Fixed GL includes to work on Mac and other OSes. On the Mac the OpenGL headers are typically installed in OpenGL rather than the more conventional GL directory on every other operating system. I also removed the povpainter GL include as it was not needed there. Change-Id: Ie0bf5a9e97b792f9c4ca6890c4b1226df5d3ab60 2012-01-27 Albert DeFusco * .../src/extensions/quantuminput/CMakeLists.txt, .../extensions/quantuminput/inputfileextension.cpp, .../quantuminput/teracheminputdialog.cpp, .../extensions/quantuminput/teracheminputdialog.h, .../extensions/quantuminput/teracheminputdialog.ui: TeraChem input generator This generator is a copy of the Q-Chem generator. Just like Gaussian and Q-Chem, it is easier to support only single-point, gradient and optimization runs. Important features include 1. If multiplicity > 1 : force unrestricted calculations Since I do not know which basis sets have been included in version 1.45 I have provdided a few basis sets that contain up to d functions. From reading the mailing list I find that version 1.45 does not have gradients for d functions, but I have not implemented a warning. http://petachem.com/doc/userguide.pdf --- Patch 2: added dispersion combo --- Patch 3: fixed whitespace Change-Id: I5d5577836d537c76f177821bc024f343eaf3664c 2011-05-22 Raimondas Galvelis * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/navigate.cpp: Orthographic projection Ability to swith between perspective and orthographic projections of the molecule Projection can be changed by "View > Projection" Change-Id: I15c20715aed707c6d1efa13e5022698caadd92ca 2012-01-30 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I62a61dd268822b51e03f142180801582819fd84d 2012-01-23 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Iff81f32a10e2147205dd4550e841bc9989dfc1c3 2012-01-19 David C. Lonie * .../src/extensions/swcntbuilder/tubegen/ANSR.cpp, libavogadro/src/extensions/swcntbuilder/tubegen/ANSR.h, .../src/extensions/swcntbuilder/tubegen/Bitmap.h, .../src/extensions/swcntbuilder/tubegen/Cell.cpp, .../extensions/swcntbuilder/tubegen/CrystalCell.cpp, .../src/extensions/swcntbuilder/tubegen/TubeGen.cpp, .../extensions/swcntbuilder/tubegen/TubuleBasis.cpp: Triage compilation of TubeGen on MSVC2008. Change-Id: Ia22c91c6f4de3816bdefb45fda822df43cac3591 2012-01-16 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Id4cdd25aacf50d3896fca99f170f6976567ef746 2012-01-09 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I1a0ef42e42a5ebc27537b474e812d7efa35f2e83 2012-01-04 Marcus D. Hanwell * CMakeLists.txt, cmake/modules/AvogadroConfig.cmake.in, cmake/modules/AvogadroUse.cmake: Removed deprecated build settings methods. They have been deprecated by the CMake community, and were causing issues with linking to avogadro. In my tests, linking to avogadro works again after these changes. I will complete the update to use exported library targets soon to make this more reliable. * libavogadro/src/extensions/surfaces/CMakeLists.txt, .../extensions/surfaces/openqube/CMakeLists.txt, .../src/extensions/surfaces/openqube/atom.cpp, .../src/extensions/surfaces/openqube/atom.h, .../src/extensions/surfaces/openqube/basisset.cpp, .../src/extensions/surfaces/openqube/basisset.h, .../surfaces/openqube/basissetloader.cpp, .../extensions/surfaces/openqube/basissetloader.h, .../src/extensions/surfaces/openqube/cube.cpp, .../src/extensions/surfaces/openqube/cube.h, .../extensions/surfaces/openqube/gamessukout.cpp, .../src/extensions/surfaces/openqube/gamessus.cpp, .../src/extensions/surfaces/openqube/gamessus.h, .../extensions/surfaces/openqube/gaussianfchk.cpp, .../extensions/surfaces/openqube/gaussianset.cpp, .../src/extensions/surfaces/openqube/gaussianset.h, .../src/extensions/surfaces/openqube/molecule.cpp, .../src/extensions/surfaces/openqube/molecule.h, .../src/extensions/surfaces/openqube/mopacaux.cpp, .../src/extensions/surfaces/openqube/mopacaux.h, .../src/extensions/surfaces/openqube/openqubeabi.h, .../src/extensions/surfaces/openqube/slaterset.cpp, .../src/extensions/surfaces/openqube/slaterset.h: Updated to latest version of OpenQube. This brings in several updates from David Lonie, Geoff Hutchison and myself. OpenQube is now on Gerrit, and will use the same review process as other libraries with automated testing coming very soon. 2012-01-02 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I817d56c558486e4ba50419345296d3344b16e7e9 2011-12-26 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I4821723fca5c4c830e00450853f001af338bcc56 2011-12-19 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2dbb0c1f585138c338e1f7e6ed93fe1a54abf50d 2011-12-17 David C. Lonie * .../crystallography/ui/cecoordinateeditor.ui, .../crystallography/ui/cematrixeditor.ui, .../crystallography/ui/ceparametereditor.ui: Make crystallographyextension DockWidgets look nicer. Text was not fitting the edit boxes correctly on linux, clipping portions of the cell matrix etc off. Change-Id: I8bb23d14546481662dd02519c2ef706ec9b59a42 2011-12-15 David C. Lonie * .../crystallography/crystallographyextension.cpp, .../crystallography/crystallographyextension.h, .../crystallography/ui/ceabstractdockwidget.cpp, .../crystallography/ui/ceabstractdockwidget.h, .../crystallography/ui/ceabstracteditor.cpp, .../crystallography/ui/ceabstracteditor.h, .../crystallography/ui/cecoordinateeditor.cpp, .../crystallography/ui/cecoordinateeditor.h, .../crystallography/ui/cematrixeditor.cpp, .../extensions/crystallography/ui/cematrixeditor.h, .../crystallography/ui/ceparametereditor.cpp, .../crystallography/ui/ceparametereditor.h, .../crystallography/ui/cetranslatewidget.cpp, .../crystallography/ui/cetranslatewidget.h: Port the Crystallography extension to use the new DockWidget system. I was able to remove a lot of the dependance on the hacky MainWindow grabbing code, although I left the hacky bit in (m_mainwindow is a good parent for dialog window placement). Change-Id: If0720970e9656fa4dc3bfcc80d114bd303fab9af 2011-12-12 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I5aea5418e187ec25c6b7b57a22874ae59458eca9 2011-08-17 Geoff Hutchison * CMakeLists.txt, crystals/antimonides/AlSb.cif, crystals/antimonides/GaSb.cif, crystals/antimonides/InSb.cif, crystals/arsenides/AlAs.cif, crystals/arsenides/BAs.cif, crystals/arsenides/GaAs.cif, crystals/arsenides/InAs.cif, crystals/arsenides/NiAs-Nickeline.cif, crystals/carbides/SiC-2H-Moissanite.cif, crystals/carbides/SiC-3C-beta.cif, crystals/carbides/SiC-6H-alpha.cif, crystals/carbides/SiC-Moissanite.cif, crystals/carbides/SiC.cif, crystals/carbides/W2C.cif, crystals/carbides/WC.cif, crystals/carbonates/CaCO3-Calcite.cif, crystals/carbonates/CaMgC2O6-Dolomite.cif, crystals/carbonates/Li2CO3-Zabuyelite.cif, crystals/carbonates/MgCO3-Magnesite.cif, crystals/carbonates/Na2CO3-Natrite.cif, crystals/elements/Ac-Actinium.cif, crystals/elements/Ag-Silver.cif, crystals/elements/Al-Aluminum.cif, crystals/elements/Am-Americium.cif, crystals/elements/Ar-Argon.cif, crystals/elements/As-Arsenic.cif, crystals/elements/As-Arsenolamprite.cif, crystals/elements/Au-Gold.cif, crystals/elements/B-Boron.cif, crystals/elements/Ba-Barium.cif, crystals/elements/Be-Beryllium.cif, crystals/elements/Bi-Bismuth.cif, crystals/elements/Br-Bromine.cif, crystals/elements/C-Diamond.cif, crystals/elements/C-Graphite.cif, crystals/elements/C-Lonsdaleite.cif, crystals/elements/Ca-Calcium-alpha.cif, crystals/elements/Ca-Calcium-beta.cif, crystals/elements/Ca-Calcium-gamma.cif, crystals/elements/Cd-Cadmium.cif, crystals/elements/Ce-Cerium.cif, crystals/elements/Cl-Chlorine.cif, crystals/elements/Co-Cobalt.cif, crystals/elements/Cr-Chromium.cif, crystals/elements/Cs-Cesium.cif, crystals/elements/Cu-Copper.cif, crystals/elements/Dy-Dysprosium.cif, crystals/elements/Er-Erbium.cif, crystals/elements/Eu-Europium.cif, crystals/elements/Fe-Iron-alpha.cif, crystals/elements/Fe-Iron-beta.cif, crystals/elements/Fe-Iron-delta.cif, crystals/elements/Fe-Iron-gamma.cif, crystals/elements/Ga-Gallium.cif, crystals/elements/Gd-Gadolinium.cif, crystals/elements/Ge-Germanium.cif, crystals/elements/He-Helium.cif, crystals/elements/Hf-Hafnium.cif, crystals/elements/Ho-Holmium.cif, crystals/elements/I-Iodine.cif, crystals/elements/In-Indium.cif, crystals/elements/Ir-Iridium.cif, crystals/elements/K-Potassium.cif, crystals/elements/Kr-Krypton.cif, crystals/elements/La-Lanthanum.cif, crystals/elements/Li-Lithium.cif, crystals/elements/Lu-Lutetium.cif, crystals/elements/Mg-Magnesium.cif, crystals/elements/Mn-Manganese-alpha.cif, crystals/elements/Mn-Manganese-delta.cif, crystals/elements/Mn-Manganese-gamma.cif, crystals/elements/Mo-Molybdenum.cif, crystals/elements/N-Nitrogen.cif, crystals/elements/Na-Sodium.cif, crystals/elements/Nb-Niobium.cif, crystals/elements/Nd-Neodymium.cif, crystals/elements/Ne-Neon.cif, crystals/elements/Ni-Nickel.cif, crystals/elements/Np-Neptunium-alpha.cif, crystals/elements/Np-Neptunium-beta.cif, crystals/elements/Np-Neptunium-gamma.cif, crystals/elements/Os-Osmium.cif, crystals/elements/P-Phosphorus-black.cif, crystals/elements/P-Phosphorus.cif, crystals/elements/Pb-Lead.cif, crystals/elements/Pd-Palladium.cif, crystals/elements/Pr-Praseodymium.cif, crystals/elements/Pt-Platinum.cif, crystals/elements/Pu-Plutonium-alpha.cif, crystals/elements/Pu-Plutonium-epsilon.cif, crystals/elements/Pu-Plutonium-gamma.cif, crystals/elements/Rb-Rubidium.cif, crystals/elements/Re-Rhenium.cif, crystals/elements/Rh-Rhodium.cif, crystals/elements/Ru-Ruthenium.cif, crystals/elements/S6-Sulfur.cif, crystals/elements/S8-Sulfur-alpha.cif, crystals/elements/S8-Sulfur-beta.cif, crystals/elements/S8-Sulfur-gamma.cif, crystals/elements/Sb-Antimony.cif, crystals/elements/Sc-Scandium.cif, crystals/elements/Se-Selenium.cif, crystals/elements/Si-Silicon.cif, crystals/elements/Sm-Samarium.cif, crystals/elements/Sn-Tin-alpha.cif, crystals/elements/Sn-Tin-beta.cif, crystals/elements/Sr-Strontium.cif, crystals/elements/Ta-Tantalum.cif, crystals/elements/Tb-Terbium.cif, crystals/elements/Te-Tellurium.cif, crystals/elements/Th-Thorium.cif, crystals/elements/Ti-Titanium-alpha.cif, crystals/elements/Ti-Titanium-beta.cif, crystals/elements/Tl-Thallium.cif, crystals/elements/Tm-Thulium.cif, crystals/elements/U-Uranium-alpha.cif, crystals/elements/U-Uranium-gamma.cif, crystals/elements/V-Vanadium.cif, crystals/elements/W-Tungsten.cif, crystals/elements/Xe-Xenon.cif, crystals/elements/Y-Yttrium.cif, crystals/elements/Yb-Ytterbium.cif, crystals/elements/Zn-Zinc.cif, crystals/elements/Zr-Zirconium.cif, crystals/halides/AgBr-Bromargyrite.cif, crystals/halides/AgCl-Chlorargyrite.cif, crystals/halides/AlCl3.cif, crystals/halides/AlNa3F6-Cryolite.cif, crystals/halides/CaF2-Fluorite.cif, crystals/halides/CdCl2.cif, crystals/halides/CdI2.cif, crystals/halides/CrCl2.cif, crystals/halides/CrCl3.cif, crystals/halides/CsCl.cif, crystals/halides/FeCl3-Molysite.cif, crystals/halides/HgCl-Calomel.cif, crystals/halides/KBr.cif, crystals/halides/KCl-Sylvite.cif, crystals/halides/NaCl-Halite.cif, crystals/halides/PbFCl-Matlockite.cif, crystals/hydrides/KH.cif, crystals/hydrides/LiH.cif, crystals/hydrides/NaH.cif, crystals/hydrides/PdH.cif, crystals/hydroxides/Ca(OH)2-Portlandite.cif, crystals/hydroxides/KOH.cif, crystals/hydroxides/LiOH.cif, crystals/hydroxides/Mg(OH)2-Brucite.cif, crystals/hydroxides/Ni(OH)2-Theophrastite.cif, .../intermetallics/(Cu0.5Fe0.5)Pt-Tulameenite.cif, .../(Ni0.5Fe0.5)Pt-Ferronickelplatinum.cif, crystals/intermetallics/Au3Cu-Bogdanovite.cif, crystals/intermetallics/AuCu-Tetraauricupride.cif, crystals/intermetallics/BiPd-Sobolevskite.cif, crystals/intermetallics/CoFe-Wairauite.cif, crystals/intermetallics/Cu2MnAl-Heusler.cif, .../intermetallics/FePt-Tetraferroplatinum.cif, crystals/intermetallics/PtBi.cif, crystals/nitrides/BN.cif, crystals/nitrides/Si3N4-beta.cif, crystals/other/(NH4)MgPO4-6(H2O)-Struvite.cif, crystals/other/As3Co-Skutterudite.cif, crystals/other/C10H10Fe-Ferrocene.cif, .../other/Ca2C4O10H2.57-Oxalate-Whewellite.cif, crystals/other/CaC2O6.375H6-Oxalate-Weddellite.cif, crystals/other/FeMnO3-Bixbyite.cif, crystals/other/InSb.cif, crystals/other/LiH.cif, crystals/other/LiNbO3-LithiumNiobate.cif, crystals/other/Pb1Ti0.35Zr0.65O3-PZT-cub.cif, crystals/other/Pb1Ti0.35Zr0.65O3-PZT-rhomb.cif, crystals/other/YBa2Cu3O6.9-YBCO.cif, crystals/oxides/(MgAl2)O4-Spinel.cif, crystals/oxides/Ag2O.cif, crystals/oxides/AgO.cif, crystals/oxides/Al2O3-Corundum.cif, crystals/oxides/BaO.cif, crystals/oxides/BaTiO3-BariumTitanate.cif, crystals/oxides/CaO-Lime.cif, crystals/oxides/CdO-Monteponite.cif, crystals/oxides/CeO2-Cerianite.cif, crystals/oxides/CoFe2O4.cif, crystals/oxides/CoO.cif, crystals/oxides/Cr2O3-Eskolaite.cif, crystals/oxides/Cu2O-Cuprite.cif, crystals/oxides/CuO-Tenorite.cif, crystals/oxides/Fe2O3-Hematite.cif, crystals/oxides/Fe3O4-Magnetite.cif, crystals/oxides/FeO-Wustite.cif, crystals/oxides/GeO2-Argutite-tetrag.cif, crystals/oxides/GeO2-Argutite.cif, crystals/oxides/GeO2.cif, crystals/oxides/HfO2.cif, crystals/oxides/In2O3-IndiumOxide.cif, crystals/oxides/In2O3.cif, crystals/oxides/IrO2.cif, crystals/oxides/K2O.cif, crystals/oxides/La2O3-LanthanumOxide-A.cif, crystals/oxides/Li2O.cif, crystals/oxides/MgO-Periclase.cif, crystals/oxides/MgTiO3-MagnesiumTitanate.cif, crystals/oxides/MnO-Manganosite.cif, crystals/oxides/MnO2-Pyrolusite.cif, crystals/oxides/MoO2-Tugarinovite.cif, crystals/oxides/MoO3-Molybdite.cif, crystals/oxides/Na2O.cif, crystals/oxides/NbO.cif, crystals/oxides/NbO2.cif, crystals/oxides/NiFe2O4.cif, crystals/oxides/NiO-Bunsenite.cif, crystals/oxides/PbO.cif, crystals/oxides/PbO2-Scrutinyite.cif, crystals/oxides/PdO.cif, crystals/oxides/PtO2-beta.cif, crystals/oxides/Rb2O.cif, crystals/oxides/Rh2O3.cif, crystals/oxides/RuO2.cif, crystals/oxides/Sc2O3.cif, crystals/oxides/SiO2-Coesite.cif, crystals/oxides/SiO2-Cristobalite.cif, crystals/oxides/SiO2-Quartz-alpha.cif, crystals/oxides/SiO2-Quartz-beta.cif, crystals/oxides/SiO2-Stishovite.cif, crystals/oxides/SmO.cif, crystals/oxides/SnO.cif, crystals/oxides/SnO2-Cassiterite.cif, crystals/oxides/SrO.cif, crystals/oxides/TaO.cif, crystals/oxides/TiO2-Anatase.cif, crystals/oxides/TiO2-Brookite.cif, crystals/oxides/TiO2-Rutile.cif, crystals/oxides/UO.cif, crystals/oxides/UO2-Uraninite.cif, crystals/oxides/V2O3-Karelianite.cif, crystals/oxides/V2O5-Shcherbinaite.cif, crystals/oxides/VO.cif, crystals/oxides/VO2.cif, crystals/oxides/WO2.cif, crystals/oxides/Y2O3.cif, crystals/oxides/YbO.cif, crystals/oxides/ZnO-Zincite.cif, crystals/oxides/ZrO.cif, crystals/oxides/ZrO2-Cubic.cif, crystals/phosphides/AlP.cif, crystals/phosphides/BP.cif, crystals/phosphides/GaP.cif, crystals/phosphides/InP.cif, crystals/selenides/Bi2Se3.cif, crystals/selenides/BiSe.cif, crystals/selenides/CdSe-Cadmoselite.cif, crystals/selenides/HgSe-Tiemannite.cif, crystals/selenides/PbSe-Clausthalite.cif, crystals/selenides/ZnSe.cif, crystals/silicates/Be3Al2(SiO3)6-Beryl.cif, crystals/sulfates/BaSO4-Barite.cif, crystals/sulfates/CaSO4-2(H2O)-Gypsum.cif, crystals/sulfates/CaSO4-Anhydrite.cif, crystals/sulfates/CoSO4.cif, crystals/sulfates/CuSO4.cif, crystals/sulfates/MgSO4.cif, crystals/sulfates/PbSO4-Anglesite.cif, crystals/sulfates/SrSO4-Celestine.cif, crystals/sulfides/CdS-Greenockite.cif, crystals/sulfides/CdS-Hawleyite.cif, crystals/sulfides/FeS.cif, crystals/sulfides/FeS2-Pyrite.cif, crystals/sulfides/HgS-Metacinnabar.cif, crystals/sulfides/PbS-Galena.cif, crystals/sulfides/SnS-Herzenbergite.cif, crystals/sulfides/ZnS-Sphalerite.cif, crystals/sulfides/ZnS-Wurtzite-2H.cif, crystals/sulfides/ZnS-Zincblende.cif, crystals/telurides/Bi2Te3.cif, crystals/telurides/BiTe.cif, crystals/telurides/CdTe.cif, crystals/telurides/PbTe-Altaite.cif, crystals/telurides/ZnTe.cif, crystals/titanates/BaTiO3.cif, crystals/titanates/CaTiO3-Perovskite.cif, crystals/titanates/Mg2TiO4-Qandilite-cubic.cif, crystals/titanates/Mg2TiO4-Qandilite-tetrag.cif, crystals/titanates/MgTiO3.cif, crystals/zeolites/ABW.cif, crystals/zeolites/ACO.cif, crystals/zeolites/AEI.cif, crystals/zeolites/AEL.cif, crystals/zeolites/AEN.cif, crystals/zeolites/AET.cif, crystals/zeolites/AFG.cif, crystals/zeolites/AFI.cif, crystals/zeolites/AFN.cif, crystals/zeolites/AFO.cif, crystals/zeolites/AFR.cif, crystals/zeolites/AFS.cif, crystals/zeolites/AFT.cif, crystals/zeolites/AFX.cif, crystals/zeolites/AFY.cif, crystals/zeolites/AHT.cif, crystals/zeolites/ANA.cif, crystals/zeolites/APC.cif, crystals/zeolites/APD.cif, crystals/zeolites/AST.cif, crystals/zeolites/ASV.cif, crystals/zeolites/ATN.cif, crystals/zeolites/ATO.cif, crystals/zeolites/ATS.cif, crystals/zeolites/ATT.cif, crystals/zeolites/ATV.cif, crystals/zeolites/AWO.cif, crystals/zeolites/AWW.cif, crystals/zeolites/BCT.cif, crystals/zeolites/BEA.cif, crystals/zeolites/BEC.cif, crystals/zeolites/BIK.cif, crystals/zeolites/BOF.cif, crystals/zeolites/BOG.cif, crystals/zeolites/BPH.cif, crystals/zeolites/BRE.cif, crystals/zeolites/BSV.cif, crystals/zeolites/CAN.cif, crystals/zeolites/CAS.cif, crystals/zeolites/CDO.cif, crystals/zeolites/CFI.cif, crystals/zeolites/CGF.cif, crystals/zeolites/CGS.cif, crystals/zeolites/CHA.cif, crystals/zeolites/CHI.cif, crystals/zeolites/CLO.cif, crystals/zeolites/CON.cif, crystals/zeolites/CZP.cif, crystals/zeolites/DAC.cif, crystals/zeolites/DDR.cif, crystals/zeolites/DFO.cif, crystals/zeolites/DFT.cif, crystals/zeolites/DOH.cif, crystals/zeolites/DON.cif, crystals/zeolites/EAB.cif, crystals/zeolites/EDI.cif, crystals/zeolites/EMT.cif, crystals/zeolites/EON.cif, crystals/zeolites/EPI.cif, crystals/zeolites/ERI.cif, crystals/zeolites/ESV.cif, crystals/zeolites/ETR.cif, crystals/zeolites/EUO.cif, crystals/zeolites/EZT.cif, crystals/zeolites/FAR.cif, crystals/zeolites/FAU.cif, crystals/zeolites/FER.cif, crystals/zeolites/FRA.cif, crystals/zeolites/GIS.cif, crystals/zeolites/GIU.cif, crystals/zeolites/GME.cif, crystals/zeolites/GON.cif, crystals/zeolites/GOO.cif, crystals/zeolites/HEU.cif, crystals/zeolites/IFR.cif, crystals/zeolites/IHW.cif, crystals/zeolites/IMF.cif, crystals/zeolites/IRR.cif, crystals/zeolites/ISV.cif, crystals/zeolites/ITE.cif, crystals/zeolites/ITH.cif, crystals/zeolites/ITR.cif, crystals/zeolites/ITV.cif, crystals/zeolites/ITW.cif, crystals/zeolites/IWR.cif, crystals/zeolites/IWS.cif, crystals/zeolites/IWV.cif, crystals/zeolites/IWW.cif, crystals/zeolites/JBW.cif, crystals/zeolites/JRY.cif, crystals/zeolites/KFI.cif, crystals/zeolites/LAU.cif, crystals/zeolites/LEV.cif, crystals/zeolites/LIO.cif, crystals/zeolites/LIT.cif, crystals/zeolites/LOS.cif, crystals/zeolites/LOV.cif, crystals/zeolites/LTA.cif, crystals/zeolites/LTF.cif, crystals/zeolites/LTL.cif, crystals/zeolites/LTN.cif, crystals/zeolites/MAR.cif, crystals/zeolites/MAZ.cif, crystals/zeolites/MEI.cif, crystals/zeolites/MEL.cif, crystals/zeolites/MEP.cif, crystals/zeolites/MER.cif, crystals/zeolites/MFI.cif, crystals/zeolites/MFS.cif, crystals/zeolites/MON.cif, crystals/zeolites/MOR.cif, crystals/zeolites/MOZ.cif, crystals/zeolites/MRE.cif, crystals/zeolites/MSE.cif, crystals/zeolites/MSO.cif, crystals/zeolites/MTF.cif, crystals/zeolites/MTN.cif, crystals/zeolites/MTT.cif, crystals/zeolites/MTW.cif, crystals/zeolites/MVY.cif, crystals/zeolites/MWW.cif, crystals/zeolites/NAB.cif, crystals/zeolites/NAT.cif, crystals/zeolites/NES.cif, crystals/zeolites/NON.cif, crystals/zeolites/NPO.cif, crystals/zeolites/NSI.cif, crystals/zeolites/OBW.cif, crystals/zeolites/OFF.cif, crystals/zeolites/OSI.cif, crystals/zeolites/OSO.cif, crystals/zeolites/OWE.cif, crystals/zeolites/PAR.cif, crystals/zeolites/PAU.cif, crystals/zeolites/PHI.cif, crystals/zeolites/PON.cif, crystals/zeolites/PUN.cif, crystals/zeolites/RHO.cif, crystals/zeolites/RON.cif, crystals/zeolites/RRO.cif, crystals/zeolites/RSN.cif, crystals/zeolites/RTE.cif, crystals/zeolites/RTH.cif, crystals/zeolites/RUT.cif, crystals/zeolites/RWR.cif, crystals/zeolites/RWY.cif, crystals/zeolites/SAF.cif, crystals/zeolites/SAO.cif, crystals/zeolites/SAS.cif, crystals/zeolites/SAT.cif, crystals/zeolites/SAV.cif, crystals/zeolites/SBE.cif, crystals/zeolites/SBN.cif, crystals/zeolites/SBS.cif, crystals/zeolites/SBT.cif, crystals/zeolites/SFE.cif, crystals/zeolites/SFF.cif, crystals/zeolites/SFG.cif, crystals/zeolites/SFH.cif, crystals/zeolites/SFN.cif, crystals/zeolites/SFO.cif, crystals/zeolites/SFS.cif, crystals/zeolites/SGT.cif, crystals/zeolites/SIV.cif, crystals/zeolites/SOD.cif, crystals/zeolites/SOF.cif, crystals/zeolites/SOS.cif, crystals/zeolites/SSF.cif, crystals/zeolites/SSY.cif, crystals/zeolites/STF.cif, crystals/zeolites/STI.cif, crystals/zeolites/STO.cif, crystals/zeolites/STT.cif, crystals/zeolites/STW.cif, crystals/zeolites/SVR.cif, crystals/zeolites/SZR.cif, crystals/zeolites/TER.cif, crystals/zeolites/THO.cif, crystals/zeolites/TOL.cif, crystals/zeolites/TON.cif, crystals/zeolites/TSC.cif, crystals/zeolites/TUN.cif, crystals/zeolites/UEI.cif, crystals/zeolites/UFI.cif, crystals/zeolites/UOS.cif, crystals/zeolites/UOZ.cif, crystals/zeolites/USI.cif, crystals/zeolites/UTL.cif, crystals/zeolites/UWY.cif, crystals/zeolites/VET.cif, crystals/zeolites/VFI.cif, crystals/zeolites/VNI.cif, crystals/zeolites/VSV.cif, crystals/zeolites/WEI.cif, crystals/zeolites/WEN.cif, crystals/zeolites/YUG.cif, crystals/zeolites/ZON.cif, crystals/zeolites/ZSM-5.cif, libavogadro/src/extensions/insertcommand.cpp, .../src/extensions/insertfragmentdialog.cpp, libavogadro/src/extensions/insertfragmentdialog.h, libavogadro/src/extensions/insertfragmentdialog.ui, .../src/extensions/insertfragmentextension.cpp, .../src/extensions/insertfragmentextension.h, libavogadro/src/molecule.cpp: Add new action to insert crystals. Generalized insert fragment dialog and extension to handle multiple directory roots. Additional cleanup of insert code. (Rebased on current master) Change-Id: Ifa898fbd937bbc0a6cca58701a5f19f89fc47f92 2011-12-05 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I5b950de54f5a8b77e8816d3fd49b223530d15df5 2011-11-28 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I542916eaa947f5e0dffee5890d98c29aa542957b 2011-11-25 David C. Lonie * libavogadro/tests/CMakeLists.txt, libavogadro/tests/moleculebench.cpp: Fix and expand moleculebench.cpp. Fix issues with repeated benchmarking and added benchmarks for new Molecule API. The benchmark times are small and unstable, but it appears that the atomicNum and position addAtom overload is comparable to not using the convenience function, and the copy overload takes approximately twice as long due to the call to the assignment operator. The copyAtomsAndBonds functions return variable benchmark times, but are of the same order of magnitude as just adding the atoms and bonds alone. The mapping implementation doesn't add excessive overhead, even for 25,000 atom + 25,000 bond copies. Change-Id: I59f0dd58cf4d59fdc77820b5d8a4399509333580 * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Add convenience methods for adding Atoms and Bonds to Molecule. Atom * addAtom(int atomicNum, const Vector3d &pos) Atom * addAtom(const Atom &otherAtom) Bond * addBond(unsigned long beginAtomId, unsigned long endAtomId, short order = 1) Bond * addBond(Atom *beginAtom, Atom* endAtom, short order = 1) PrimitiveList copyAtomsAndBonds(const QList&,const QList&) PrimitiveList copyAtomsAndBonds(const PrimitiveList &) Change-Id: Ib8d19156dac782e735356db43537e69a978994de 2011-09-06 Geoff Hutchison * fragments/alcohols/2-aminoethanol.cml, fragments/alcohols/but-2-yne-1_4-diol.cml, fragments/alcohols/cyclohexanol.cml, fragments/alcohols/cyclopentanol.cml, fragments/alcohols/ethane-1_2-diol.cml, fragments/alcohols/propane-1_2_3-triol.cml, fragments/alkanes/butane.cml, fragments/alkanes/decane.cml, fragments/alkanes/dodecane.cml, fragments/alkanes/eicosane.cml, fragments/alkanes/heptane.cml, fragments/alkanes/hexadecane.cml, fragments/alkanes/hexane.cml, fragments/alkanes/nonane.cml, fragments/alkanes/octane.cml, fragments/alkanes/pentadecane.cml, fragments/alkanes/pentane.cml, fragments/alkanes/tetracosane.cml, fragments/alkanes/tetradecane.cml, fragments/alkanes/tridecane.cml, fragments/alkanes/undecane.cml, fragments/alkenes/2-methylbut-2-ene.cml, fragments/alkenes/2-methylbuta-1_3-diene.cml, fragments/alkenes/3E-penta-1_3-diene.cml, fragments/alkenes/3Z-penta-1_3-diene.cml, fragments/alkenes/3Z_3-ethylhepta-1_3-diene.cml, fragments/alkenes/E-but-2-ene.cml, fragments/alkenes/E-hept-2-ene.cml, fragments/alkenes/E-hept-3-ene.cml, fragments/alkenes/E-hex-2-ene.cml, fragments/alkenes/E-hex-3-ene.cml, fragments/alkenes/E-oct-2-ene.cml, fragments/alkenes/E-oct-3-ene.cml, fragments/alkenes/E-oct-4-ene.cml, fragments/alkenes/E-pent-2-ene.cml, fragments/alkenes/Z-but-2-ene.cml, fragments/alkenes/Z-hept-2-ene.cml, fragments/alkenes/Z-hept-3-ene.cml, fragments/alkenes/Z-hex-2-ene.cml, fragments/alkenes/Z-hex-3-ene.cml, fragments/alkenes/Z-oct-2-ene.cml, fragments/alkenes/Z-oct-3-ene.cml, fragments/alkenes/Z-oct-4-ene.cml, fragments/alkenes/Z-pent-2-ene.cml, fragments/alkenes/hept-1-ene.cml, fragments/alkenes/hex-1-ene.cml, fragments/alkenes/oct-1-ene.cml, fragments/alkenes/pent-1-ene.cml, fragments/alkenes/propene.cml, fragments/amines/1H-azepine.cml, fragments/amines/2-aminopropane.cml, fragments/amines/S-sec-butylamine.cml, fragments/amines/diethylamine.cml, fragments/amines/dimethylamine.cml, fragments/amines/piperazine.cml, fragments/amines/piperidine.cml, fragments/amines/pyrrolidine.cml, fragments/amines/tert-butylamine.cml, fragments/amines/triethylamine.cml, fragments/amines/triethylenediamine.cml, fragments/amines/trimethylamine.cml, fragments/aromatics/1H-indole.cml, fragments/aromatics/1_10-phenanthroline.cml, fragments/aromatics/1_8-naphthyridine.cml, fragments/aromatics/2H-chromene.cml, fragments/aromatics/4H-chromene.cml, fragments/aromatics/7H-purine.cml, fragments/aromatics/9H-carbazole.cml, fragments/aromatics/9H-fluorene.cml, fragments/aromatics/9H-xanthene.cml, fragments/aromatics/acenaphthene.cml, fragments/aromatics/acenaphthenequinone.cml, fragments/aromatics/acenaphthylene.cml, fragments/aromatics/acridine.cml, fragments/aromatics/benzofuran.cml, fragments/aromatics/benzothiophene.cml, fragments/aromatics/chromone.cml, fragments/aromatics/cinnoline.cml, fragments/aromatics/coumarin.cml, fragments/aromatics/isoquinoline.cml, fragments/aromatics/phenanthrene.cml, fragments/aromatics/phthalimide.cml, fragments/aromatics/quinazoline.cml, fragments/aromatics/quinoline.cml, fragments/aromatics/tetralin.cml, fragments/aromatics/uric_acid.cml, fragments/buckminsterfullerene.cml, fragments/carboxylic_acids/E-butanoic_acid.cml, fragments/carboxylic_acids/E-butenedioic_acid.cml, fragments/cyclic alkanes/adamantane.cml, fragments/cyclic alkanes/cubane.cml, fragments/cyclic alkanes/cyclobutane.cml, fragments/cyclic alkanes/cycloheptane.cml, fragments/cyclic alkanes/cyclohexane-chair.cml, .../cyclic alkanes/cyclohexane-twist-boat.cml, fragments/cyclic alkanes/cyclohexane.cml, fragments/cyclic alkanes/cyclopentane.cml, fragments/cyclic alkanes/cyclopropane.cml, fragments/cyclic alkanes/norbornane.cml, fragments/cyclic sugars/alpha-D-allopyranose.cml, .../cyclic sugars/alpha-D-arabinopyranose.cml, fragments/cyclic sugars/alpha-D-fucopyranose.cml, .../cyclic sugars/alpha-D-galactopyranose.cml, .../cyclic sugars/alpha-D-galacturonopyranose.cml, fragments/cyclic sugars/alpha-D-glucopyranose.cml, .../cyclic sugars/alpha-D-glucuronopyranose.cml, fragments/cyclic sugars/alpha-D-gulopyranose.cml, fragments/cyclic sugars/alpha-D-idopyranose.cml, fragments/cyclic sugars/alpha-D-lyxopyranose.cml, fragments/cyclic sugars/alpha-D-mannopyranose.cml, fragments/cyclic sugars/alpha-D-psicopyranose.cml, fragments/cyclic sugars/alpha-D-rhamnopyranose.cml, fragments/cyclic sugars/alpha-D-ribopyranose.cml, fragments/cyclic sugars/alpha-D-tagatopyranose.cml, fragments/cyclic sugars/alpha-D-talopyranose.cml, fragments/cyclic sugars/alpha-D-xylopyranose.cml, .../cyclic sugars/alpha-L-arabinopyranose.cml, fragments/cyclic sugars/alpha-L-fucopyranose.cml, .../cyclic sugars/alpha-L-galactopyranose.cml, fragments/cyclic sugars/alpha-L-lyxopyranose.cml, fragments/cyclic sugars/alpha-L-rhamnopyranose.cml, fragments/cyclic sugars/alpha-L-ribopyranose.cml, fragments/cyclic sugars/alpha-L-sorbopyranose.cml, fragments/cyclic sugars/alpha-L-xylopyranose.cml, fragments/cyclic sugars/beta-D-allopyranose.cml, fragments/cyclic sugars/beta-D-arabinopyranose.cml, fragments/cyclic sugars/beta-D-fructopyranose.cml, fragments/cyclic sugars/beta-D-fucopyranose.cml, fragments/cyclic sugars/beta-D-galactopyranose.cml, fragments/cyclic sugars/beta-D-glucopyranose.cml, fragments/cyclic sugars/beta-D-gulopyranose.cml, fragments/cyclic sugars/beta-D-idopyranose.cml, fragments/cyclic sugars/beta-D-lyxopyranose.cml, fragments/cyclic sugars/beta-D-mannopyranose.cml, fragments/cyclic sugars/beta-D-rhamnopyranose.cml, fragments/cyclic sugars/beta-D-ribopyranose.cml, fragments/cyclic sugars/beta-D-tagatopyranose.cml, fragments/cyclic sugars/beta-D-talopyranose.cml, fragments/cyclic sugars/beta-D-xylopyranose.cml, fragments/cyclic sugars/beta-L-arabinopyranose.cml, fragments/cyclic sugars/beta-L-lyxopyranose.cml, fragments/cyclic sugars/beta-L-ribopyranose.cml, fragments/cyclic sugars/beta-L-xylopyranose.cml, fragments/cyclic_alkanes/1R-camphene.cml, fragments/cyclic_alkanes/1R-camphor.cml, fragments/cyclic_alkanes/abietic_acid.cml, fragments/cyclic_alkanes/adamantane.cml, .../cyclic_alkanes/cis-decahydronaphthalene.cml, fragments/cyclic_alkanes/cubane.cml, fragments/cyclic_alkanes/cyclobutane.cml, fragments/cyclic_alkanes/cyclodecane.cml, fragments/cyclic_alkanes/cycloheptane.cml, fragments/cyclic_alkanes/cyclohexane-chair.cml, .../cyclic_alkanes/cyclohexane-twist-boat.cml, fragments/cyclic_alkanes/cyclohexane.cml, fragments/cyclic_alkanes/cyclononane.cml, fragments/cyclic_alkanes/cyclooctane.cml, fragments/cyclic_alkanes/cyclopentane.cml, fragments/cyclic_alkanes/cyclopropane.cml, fragments/cyclic_alkanes/norbornane.cml, .../cyclic_alkanes/trans-decahydronaphthalene.cml, fragments/cyclic_alkenes/Z-cycloheptene.cml, fragments/cyclic_alkenes/Z-cyclooctene.cml, fragments/cyclic_alkenes/cyclohepta-1_3-diene.cml, .../cyclic_alkenes/cyclohepta-1_3_5-triene.cml, fragments/cyclic_alkenes/cyclohepta-1_4-diene.cml, fragments/cyclic_alkenes/cyclohexa-1_3-diene.cml, fragments/cyclic_alkenes/cyclohexa-1_4-diene.cml, fragments/cyclic_alkenes/cyclohexene.cml, fragments/cyclic_alkenes/cycloocta-1_3-diene.cml, .../cyclic_alkenes/cycloocta-1_3_5-triene.cml, .../cyclic_alkenes/cycloocta-1_3_5_7-tetraene.cml, fragments/cyclic_alkenes/cyclopenta-1_3-diene.cml, fragments/cyclic_alkenes/cyclopentene.cml, fragments/cyclic_sugars/alpha-D-allopyranose.cml, .../cyclic_sugars/alpha-D-arabinopyranose.cml, fragments/cyclic_sugars/alpha-D-fucopyranose.cml, .../cyclic_sugars/alpha-D-galactopyranose.cml, .../cyclic_sugars/alpha-D-galacturonopyranose.cml, fragments/cyclic_sugars/alpha-D-glucopyranose.cml, .../cyclic_sugars/alpha-D-glucuronopyranose.cml, fragments/cyclic_sugars/alpha-D-gulopyranose.cml, fragments/cyclic_sugars/alpha-D-idopyranose.cml, fragments/cyclic_sugars/alpha-D-lyxopyranose.cml, fragments/cyclic_sugars/alpha-D-mannopyranose.cml, fragments/cyclic_sugars/alpha-D-psicopyranose.cml, fragments/cyclic_sugars/alpha-D-rhamnopyranose.cml, fragments/cyclic_sugars/alpha-D-ribopyranose.cml, fragments/cyclic_sugars/alpha-D-tagatopyranose.cml, fragments/cyclic_sugars/alpha-D-talopyranose.cml, fragments/cyclic_sugars/alpha-D-xylopyranose.cml, .../cyclic_sugars/alpha-L-arabinopyranose.cml, fragments/cyclic_sugars/alpha-L-fucopyranose.cml, .../cyclic_sugars/alpha-L-galactopyranose.cml, fragments/cyclic_sugars/alpha-L-lyxopyranose.cml, fragments/cyclic_sugars/alpha-L-rhamnopyranose.cml, fragments/cyclic_sugars/alpha-L-ribopyranose.cml, fragments/cyclic_sugars/alpha-L-sorbopyranose.cml, fragments/cyclic_sugars/alpha-L-xylopyranose.cml, fragments/cyclic_sugars/beta-D-allopyranose.cml, fragments/cyclic_sugars/beta-D-arabinopyranose.cml, fragments/cyclic_sugars/beta-D-fructopyranose.cml, fragments/cyclic_sugars/beta-D-fucopyranose.cml, fragments/cyclic_sugars/beta-D-galactopyranose.cml, fragments/cyclic_sugars/beta-D-glucopyranose.cml, fragments/cyclic_sugars/beta-D-gulopyranose.cml, fragments/cyclic_sugars/beta-D-idopyranose.cml, fragments/cyclic_sugars/beta-D-lyxopyranose.cml, fragments/cyclic_sugars/beta-D-mannopyranose.cml, fragments/cyclic_sugars/beta-D-rhamnopyranose.cml, fragments/cyclic_sugars/beta-D-ribopyranose.cml, fragments/cyclic_sugars/beta-D-tagatopyranose.cml, fragments/cyclic_sugars/beta-D-talopyranose.cml, fragments/cyclic_sugars/beta-D-xylopyranose.cml, fragments/cyclic_sugars/beta-L-arabinopyranose.cml, fragments/cyclic_sugars/beta-L-lyxopyranose.cml, fragments/cyclic_sugars/beta-L-ribopyranose.cml, fragments/cyclic_sugars/beta-L-xylopyranose.cml, fragments/ethers/1_4-dioxane.cml, fragments/ethers/tetrahydropyran.cml, fragments/fatty acids/decanoic_acid.cml, fragments/fatty acids/hexanoic_acid.cml, fragments/fatty acids/lauric_acid.cml, fragments/fatty acids/linoleic_acid.cml, fragments/fatty acids/octanoic_acid.cml, fragments/fatty acids/oleic_acid.cml, fragments/fatty acids/palmitic_acid.cml, fragments/fatty acids/stearic_acid.cml, fragments/fatty_acids/arachidonic_acid.cml, fragments/fatty_acids/cervonic_acid.cml, fragments/fatty_acids/decanoic_acid.cml, fragments/fatty_acids/hexanoic_acid.cml, fragments/fatty_acids/lauric_acid.cml, fragments/fatty_acids/linoleic_acid.cml, fragments/fatty_acids/linolenic_acid.cml, fragments/fatty_acids/myristic_acid.cml, fragments/fatty_acids/octanoic_acid.cml, fragments/fatty_acids/oleic_acid.cml, fragments/fatty_acids/palmitic_acid.cml, fragments/fatty_acids/pentanoic_acid.cml, fragments/fatty_acids/stearic_acid.cml, fragments/fullerenes/C180.cml, fragments/fullerenes/C20.cml, fragments/fullerenes/C24.cml, fragments/fullerenes/C240.cml, fragments/fullerenes/C26.cml, fragments/fullerenes/C28.cml, fragments/fullerenes/C30.cml, fragments/fullerenes/C32.cml, fragments/fullerenes/C36.cml, fragments/fullerenes/C50.cml, fragments/fullerenes/C60-buckminsterfullerene.cml, fragments/fullerenes/C70.cml, fragments/fullerenes/C76.cml, fragments/fullerenes/C78.cml, fragments/fullerenes/C80.cml, fragments/fullerenes/PC70BM.cml, fragments/fullerenes/PCBM.cml, fragments/heteroaromatics/isonicotinamide.cml, fragments/heteroaromatics/isonicotinic_acid.cml, fragments/heteroaromatics/nicotinamide.cml, fragments/heteroaromatics/nicotinic_acid.cml, fragments/heteroaromatics/picolinamide.cml, fragments/heteroaromatics/picolinic_acid.cml, fragments/ketones/cyclohexanone.cml, fragments/ketones/methyl_vinyl_ketone.cml, fragments/ketones/p-benzoquinone.cml, fragments/ligands/Cp-cyclopentadienyl.cml, fragments/macrocycles/phthalocyanine.cml, fragments/nitriles/1_1_1-trichloroacetonitrile.cml, fragments/nitriles/acetonitrile.cml, fragments/nitriles/butyronitrile.cml, fragments/nitriles/isobutyronitrile.cml, fragments/nitriles/propionitrile.cml, fragments/thiols/2-methylproprane-2-thiol.cml, fragments/thiols/R_butane-2-thiol.cml, fragments/thiols/butane-1-thiol.cml, fragments/thiols/ethane-1_2-dithiol.cml, fragments/thiols/heptane-1-thiol.cml, fragments/thiols/hexane-1-thiol.cml, fragments/thiols/octane-1-thiol.cml, fragments/thiols/proprane-1-thiol.cml, fragments/thiols/proprane-2-thiol.cml: Update molecular fragments from chemical-structures project. Added several new fragments, plus extensive list of fullerenes. Change-Id: Id1e87013853f43701d9a33fe348b00f99cb1e841 2011-11-21 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: If9e37f39b96e320be2bd3d699196c7454527b525 2011-11-14 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I957c8e16ab9d9222eb548629532e6fd0c512a2ad 2011-10-17 David C. Lonie * libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/swcntbuilder/CMakeLists.txt, .../src/extensions/swcntbuilder/avotubegen.cpp, .../src/extensions/swcntbuilder/avotubegen.h, .../swcntbuilder/swcntbuilderextension.cpp, .../swcntbuilder/swcntbuilderextension.h, .../extensions/swcntbuilder/swcntbuilderwidget.cpp, .../extensions/swcntbuilder/swcntbuilderwidget.h, .../extensions/swcntbuilder/swcntbuilderwidget.ui, .../src/extensions/swcntbuilder/tubegen/ANSR.cpp, .../src/extensions/swcntbuilder/tubegen/ANSR.h, .../src/extensions/swcntbuilder/tubegen/AUTHORS, .../src/extensions/swcntbuilder/tubegen/Bitmap.c, .../src/extensions/swcntbuilder/tubegen/Bitmap.h, .../extensions/swcntbuilder/tubegen/CMakeLists.txt, .../src/extensions/swcntbuilder/tubegen/Cell.cpp, .../src/extensions/swcntbuilder/tubegen/Cell.h, .../extensions/swcntbuilder/tubegen/Constants.h, .../extensions/swcntbuilder/tubegen/Core3DMath.c, .../extensions/swcntbuilder/tubegen/Core3DMath.h, .../extensions/swcntbuilder/tubegen/CoreConst.h, .../swcntbuilder/tubegen/CrystalCell.cpp, .../extensions/swcntbuilder/tubegen/CrystalCell.h, .../extensions/swcntbuilder/tubegen/LICENSE.html, .../extensions/swcntbuilder/tubegen/TubeGen.cpp, .../swcntbuilder/tubegen/TubuleBasis.cpp, .../extensions/swcntbuilder/tubegen/TubuleBasis.h, .../extensions/swcntbuilder/tubegen/diamond.cpp, .../src/extensions/swcntbuilder/tubegen/eprintf.c, .../src/extensions/swcntbuilder/tubegen/eprintf.h, .../src/extensions/swcntbuilder/tubegen/fcc.cpp, .../extensions/swcntbuilder/tubegen/graphite.cpp: Add a nanotube builder that uses the TubeGen code[1] (BSD license). [1] http://turin.nss.udel.edu/research/tubegenonline.html Change-Id: I2b2c97498b4a973cc20c3ea69fe8926137d3cbcf * avogadro/src/mainwindow.cpp, libavogadro/src/CMakeLists.txt, libavogadro/src/dockwidget.cpp, libavogadro/src/dockwidget.h, libavogadro/src/extension.cpp, libavogadro/src/extension.h: Add the DockWidget class to wrap QDockWidget. This will eventually simplify the extension hierarchy by removing the DockExtension class (Extension already had a dockWidget() method) and adding the "preferredDockWidgetArea" property to the widget itself. This allows extensions to have as many dockwidgets as needed and individually specify their locations. Change-Id: I8148e9def8416cd5c1c611b4f1aec61d049d4cc1 2011-11-07 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I2545b68c5e2aab8cb91de2d1ddc4c447391ea5be 2011-08-22 Geoff Hutchison * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/plugin.h, libavogadro/src/pythontool_p.cpp, libavogadro/src/pythontool_p.h, libavogadro/src/tool.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/moveatomcommand.cpp, libavogadro/src/tools/moveatomcommand.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h, libavogadro/src/tools/zmatrixtool.h: Add a double-click event to tools. Navigate tool will re-center the view. Select tool will select the entire fragment. Other tools currently defer. Fixes feature request #2899910. Bumps plugin version ABI. Change-Id: I87158e3fb74da07db0a81db9d0cee017822dbe9f 2011-11-01 Geoff Hutchison * .../extensions/surfaces/openqube/gaussianfchk.cpp, .../extensions/surfaces/openqube/gaussianset.cpp, .../src/extensions/surfaces/openqube/gaussianset.h, testfiles/CO-cc-6Z.fchk.gz: Fix crash with Gaussian FCHK and f-orbitals. Also adds support for skipping higher-order shells, including g, h, and i. Now supports reading calcs with up to cc-pV6Z, although high shells (f and above) are still ignored. Change-Id: I41067e6cbdddd1b66470dc446c506fdec9ef48b7 2011-05-27 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/insertfragmentdialog.cpp, libavogadro/src/extensions/insertfragmentdialog.h, libavogadro/src/extensions/insertfragmentdialog.ui, .../src/extensions/insertfragmentextension.cpp, .../src/extensions/sortfiltertreeproxymodel.cpp, .../src/extensions/sortfiltertreeproxymodel.h: Add a search filter for file and dir names. Includes a new filter proxy which fetches and checks subdirectories recursively. Filter works in a case-insensitive and UNIX wildcard manner, allowing clean, intuitive filtering. Change-Id: I0f252ed315284f2ae45803c7f81a8439a0259136 2011-10-31 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I0d4ccdbfc56049b8ac8bdc1565691da322844026 2011-10-24 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I54f0a60c8f61fa8aba434d1760b8bd55b83d8a0b 2011-10-17 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I90c96ac40173c0c118503ae1d26d6de997832ba9 2011-10-13 Geoff Hutchison * libavogadro/src/camera.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/glpainter_p.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/tools/selectrotatetool.cpp: Add #include for compatibility with Qt 4.8 (at least on Mac) Change-Id: Icd3c586fbfa9cc3c74564ee799fa96a6612ed420 2011-10-10 David C. Lonie * libavogadro/src/fragment.cpp, libavogadro/src/fragment.h: Add const-correct overloads to Fragment. Change-Id: I5cf787f7484881d8488536dfb2424c7115f1e1c7 2011-10-10 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I030ac1f298933805aed2c7c8001f885798cdbb37 2011-10-03 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ic8e72a9a7bc9206bfe8fee913856a0179836c166 2011-09-26 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I179942e3bb71b2e8e029f8997bd2f163ed964b33 2011-09-19 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I13fa3c6375a9ef9836a34106e77eaf9c528679be 2011-09-12 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I9baff97c97dcd1c1060bdc54fe8adfe540a216a5 2011-09-09 Geoff Hutchison * libavogadro/src/periodictablescene_p.cpp, libavogadro/src/periodictablescene_p.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h, libavogadro/src/tools/drawtool.cpp: Add keyboard access to the periodic table. Type an atomic number or element symbol to change the active, selected element. The draw tool now provides keyboard focus when the periodic table is open. Change-Id: Id23391b53ac5dff64e7ad09e741e6b460d1a3476 2011-09-03 David C. Lonie * .../crystallography/crystallographyextension.cpp, .../crystallography/crystallographyextension.h: Replace the unit cell orientation code with a safer implementation. Change-Id: I0438c407bce57696b7dff117193a5c854940d524 2011-07-07 David C. Lonie * libavogadro/src/CMakeLists.txt, .../crystallography/ui/cematrixeditor.cpp, .../extensions/crystallography/ui/cematrixeditor.h, .../crystallography/ui/cematrixeditor.ui, libavogadro/src/textmatrixeditor.cpp, libavogadro/src/textmatrixeditor.h: Add TextMatrixEditor, a widget to edit 3x3 matrices as plain text. This is the matrix editor widget from the Crystallography extension's CEMatrixEditor unit cell matrix editor, split out into a reusable class. Change-Id: I54343a18e29af96544615dd865be3df1ad132a75 2011-09-03 David C. Lonie * .../src/extensions/surfaces/orbitalextension.cpp, .../extensions/surfaces/orbitalsettingsdialog.cpp, .../extensions/surfaces/orbitalsettingsdialog.h, .../extensions/surfaces/orbitalsettingsdialog.ui, .../src/extensions/surfaces/orbitalwidget.cpp, .../src/extensions/surfaces/orbitalwidget.h: Limit orbital precalculations to a specified number of orbitals. Change-Id: I46e1c53bc7e32b54ba382e296054f9c72ed100e7 2011-08-29 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ieecdcf0117fda8b8c70938fb6c4d434ae0736f1f 2011-08-22 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: I4dc9f49dd6a613389a458b9b0fdf4a8c0456dcb7 2011-08-16 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Automated update of translation templates (POT) using latest strings. Change-Id: Ia5835bdb84a216b01080d477230838a904bee718 2011-01-26 Jens Thomas * libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/propmodel.h: Extend the properties widget to handle conformers. As we are dealing with multiple conformers, we no longer cache an OBMol in the PropertiesModel. Instead we cache the data we need as class variables and these are accessed by the call to data. This means that nothing is actually calculated in the data call. The variable m_displayConformers now controls whether we display the data for just the current or all conformers. Change-Id: Ie00de041b53a2bb2a56a1b42dc41a0a03b0b0918 2011-05-19 Geoff Hutchison * libavogadro/src/extensions/cartesianextension.cpp, .../crystallography/crystallographyextension.h, .../crystallography/ui/cecoordinateeditor.cpp, .../extensions/crystallography/ui/cecoordinateeditor.ui, .../extensions/crystallography/ui/cematrixeditor.cpp, .../src/extensions/crystallography/ui/cematrixeditor.ui: Adjust the font and font size on Mac and Windows. Previous font wasn't monospaced and very unreadable. Now uses Courier on Mac/Win and Monospace (which is an alias) on Linux. Change-Id: I198e5afc5ed22a0d74b1d8a5cdc41d74e9fcd304 2011-05-26 David C. Lonie * .../crystallography/crystallographyextension.cpp, .../crystallography/crystallographyextension.h: Fix failing dashboards for crystallography extension. Two issues addressed in this patch: 1) Control reached end of non-void currentLatticeType() 2) Incorrect signature of read/writeSettings(QSetting&) Several other functions were made const to fix (2) as well (they should have been const anyway). Change-Id: I85cb3d1b77e5f88c59cc24d450da6ad152fc3ae6 * libavogadro/src/extensions/crystallography/ui/cecoordinateeditor.cpp, libavogadro/src/extensions/crystallography/ui/cecoordinateeditor.ui, libavogadro/src/extensions/crystallography/ui/cematrixeditor.cpp, libavogadro/src/extensions/crystallography/ui/cematrixeditor.ui, libavogadro/src/extensions/crystallography/ui/ceparametereditor.ui: Remove shortcut keys from dockwidget titles. They aren't interpreted correctly on Windows and don't seem to work on other platforms, either. Change-Id: I53ad9b676d3983108e2e78576fc8e758c7a651b9 2011-05-03 David C. Lonie * .../src/extensions/crystallography/CMakeLists.txt, .../crystallography/crystallographyextension.cpp, .../crystallography/crystallographyextension.h, .../crystallography/ui/cetranslatewidget.cpp, .../crystallography/ui/cetranslatewidget.h, .../crystallography/ui/cetranslatewidget.ui: Added an atomic translation tool to the crystallography extension. Change-Id: If20ace6b16b0010431490033b95f8a5f58986b23 2011-04-12 David C. Lonie * libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h: Added drawLineLoop, and drawBoxEdges to Painter and GLPainter. Change-Id: Id43612457015e45d32b23435d1239645f843a7f8 * libavogadro/src/painter.cpp, libavogadro/src/painter.h: Added a default implementation of Painter::drawQuadrilateral, cleaned some whitespace. Change-Id: I0b0d9a6fd7989aaa8b9318e829b818dec1bf4cf3 * libavogadro/src/camera.cpp, libavogadro/src/camera.h: Added Camera::nearClippingPlane. This function can be used to obtain a normal vector and point defining the near-plane of the viewing volume. Change-Id: I7bee08d6cbbcdf03796a6129ffbadf9f62bca698 2011-04-18 Marcus D. Hanwell * CMakeLists.txt, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/animation.qrc, libavogadro/src/extensions/animationextension.qrc, libavogadro/src/extensions/cartesianextension.qrc, libavogadro/src/extensions/edit.qrc, libavogadro/src/pluginmanager.cpp: Changes necessary to initialize resources. Some extra work is required to initialize the resource files from a static plugin. Accumulate the plugins that have resource files, and then construct a function in the static plugin header that is called once from the PluginManager code. A few resource files needed to be renamed to match the name of their plugin. This now allows for an Avogadro that has all of its plugins built in statically. These are defined at compile time using the CMake cache variable. Change-Id: I7176c06fd8adcb60c2ad234bfb48a0fba230f738 2011-04-15 Marcus D. Hanwell * libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/extensions/surfaces/CMakeLists.txt, libavogadro/src/pluginmanager.cpp: Added a simple way to create static plugins. There is a default list, which can be manipulated at configure time. In addition, the variable can be set to ALL in order to build and link all plugins statically. Change-Id: I0532b3d5cfb56414b01c4f16c205c6d35694e852 2011-05-12 Geoff Hutchison * libavogadro/src/extensions/surfaces/CMakeLists.txt, .../src/extensions/surfaces/htmldelegate.cpp, libavogadro/src/extensions/surfaces/htmldelegate.h, .../src/extensions/surfaces/orbitalextension.cpp, .../src/extensions/surfaces/orbitaltablemodel.cpp, .../src/extensions/surfaces/orbitaltablemodel.h, .../src/extensions/surfaces/orbitalwidget.cpp, libavogadro/src/molecule.cpp, testfiles/benzene.fchk, testfiles/benzene.g03: Use OBOrbitalData when available (e.g., Gaussian) to display orbital energies. Uses QObject dynamic properties, storing alpha energies and symmetries. Converts energies from Hartree to eV. Needs better support in OB for data. Also adds HTML display of symmetry symbols, where available. Change-Id: I9388c43ca2ee60d010cb7d44939f5172d93a55e0 2011-05-06 Geoff Hutchison * doc/mainpage.dox, .../thirdPartyExtensions/02-DynamicDisplay.dox, libavogadro/examples/thirdPartyExtensions/toc.dox: Update main doxygen page with improved links, including to the third-party extension tutorial documentation. Change-Id: I0aaa6456631d90273bd882756f9213c44106a52f 2011-05-03 Marcus D. Hanwell * Doxyfile, avogadro/Doxyfile, doc/CMakeLists.txt, doc/Doxyfile.in: Create a custom doxygen target, use Qt tag file. Find and use doxygen, make doxygen will build the documentation. Use the installed qt.tags file, and removed an old Doxyfile that was not used. If the Doxygen docs are built, download the Open Babel tag file and use that to link to their docs too. Change-Id: I818d2b5de9886c8b040625b48102b59258594436 2011-04-15 Marcus D. Hanwell * cmake/modules/FindOpenBabel2.cmake, libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/spectra/cd.cpp, libavogadro/src/extensions/spectra/dos.cpp, libavogadro/src/extensions/spectra/raman.cpp, .../src/extensions/spectra/spectradialog.cpp, libavogadro/src/extensions/spectra/spectradialog.h, libavogadro/src/extensions/spectra/uv.cpp, .../src/extensions/spectra/vibrationwidget.cpp, libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/molecule.cpp: Bump our dependency to Open Babel 2.3.0. This simplifies our code base, and allows us to easily test whether Avogadro compiles as compilation against earlier versions of Open Babel is no longer well tested. 2011-04-07 Konstantin Tokarev * libavogadro/src/glwidget.cpp, libavogadro/src/pythonextension_p.h, libavogadro/src/pythonthread_p.h: Fixed deadlock when threaded GL and Python are enabled simultaneously Direct call of PythonExtension::paint from rendering thread lead to deadlock when GIL was acquired by GLWidget. This patch replaces it with queued metacall Change-Id: I164a34b5b7f41d40c55b1a6cefab27ccd3921c79 2011-05-02 David Lonie * .../thirdPartyExtensions/02-DynamicDisplay/dynamicdisplayextension.cpp, .../examples/thirdPartyExtensions/03-ViewPlane/viewplaneextension.h: Clean up some trivial issues in the 3rd party tutorials. DynamicDisplay had an uninitialized pointer, and ViewPlane had an unused member. Change-Id: Ia6f1557bb4de23b0966604175df287a272dda4d2 2011-04-29 David C. Lonie * .../src/extensions/crystallography/CMakeLists.txt, .../crystallography/ui/ceabstractdockwidget.cpp, .../crystallography/ui/ceabstractdockwidget.h, .../crystallography/ui/ceabstracteditor.cpp, .../crystallography/ui/ceabstracteditor.h: Split an abstract dockwidget class out of CEAbstractEditor. Change-Id: I0592dde7f8ef501dd0abd96920d5b6f27c572cad 2011-04-08 Marcus D. Hanwell * libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/extensions/trajvideomaker.h: Bug #3043641, fix auto-bonding in saved animation. Have makeVideo also use the Animation class, and respect the autobonding option exposed in the animation dialog. Change-Id: I483de30b7c79d8aed7e8e33a1bce3a9816426bfc 2011-02-07 Geoff Hutchison * .../src/extensions/quantuminput/CMakeLists.txt, .../extensions/quantuminput/abinitinputdialog.cpp, .../extensions/quantuminput/abinitinputdialog.h, .../extensions/quantuminput/abinitinputdialog.ui, .../extensions/quantuminput/inputfileextension.cpp: ENH: Added abinit input generator. Contributed by Matthieu Verstraete. Change-Id: I35220825f5e1758c9f35ef1623514f087196eddf 2011-04-13 Geoff Hutchison * scripts/extract-application-messages.sh, scripts/extract-library-messages.sh: Update to exclude example tools and use new xgettext plural forms. 2011-03-17 Konstantin Tokarev * libavogadro/src/extensions/animationextension.cpp, .../src/extensions/insertfragmentdialog.cpp, .../src/extensions/insertpeptideextension.cpp, .../extensions/quantuminput/inputfileextension.cpp, libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/moleculefile.cpp: Finally fixed OB file operations with non-Latin characters in file paths QFile::encodeName() and QString::toLocal8Bit() do not allow correct opening of fstream objects on localized Windows if Avogadro is compiled with MSVC. This patch should fix all related issues. Change-Id: Ifeab228e8d97c7c5eb64e3c4b74a78518da98f2a 2011-02-14 Konstantin Tokarev * libavogadro/src/engines/python/wireframe.py, libavogadro/src/pythonengine_p.cpp: Fixed readSettings and writeSettings in PythonEngine To illustrate bugfix, saving of width was added to Python wireframe engine Change-Id: I07d374154a228ad0eb96bf288c7e64c7c879c705 2011-04-11 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sr.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/ug.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sr.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/ug.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Updated translations from Launchpad. 2010-11-07 David Lonie * libavogadro/src/color.h, libavogadro/src/engine.h, libavogadro/src/extension.h, libavogadro/src/tool.h: Fix 3104853: allow plugin macros to be used outside of the Avogadro namespace. Change-Id: Ib832a3f9ef4fe56a45b06e2e2d8f7d5a026cb902 2011-04-09 Geoff Hutchison * i18n/avogadro/avogadro.pot, i18n/libavogadro/libavogadro.pot: Updated translation templates. (Merge with Launchpad for trunk shortly.) 2011-04-08 Geoff Hutchison * libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Create dummy atoms at center of geom and center of mass. 2011-02-06 David C. Lonie * avogadro/src/editcommands.cpp, avogadro/src/mainwindow.cpp, libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/crystallography/CMakeLists.txt, libavogadro/src/extensions/crystallography/COPYING, .../src/extensions/crystallography/avospglib.cpp, .../src/extensions/crystallography/avospglib.h, .../src/extensions/crystallography/ceundo.cpp, .../src/extensions/crystallography/ceundo.h, .../crystallography/crystallographyextension.cpp, .../crystallography/crystallographyextension.h, .../crystallography/crystalpastedialog.cpp, .../crystallography/crystalpastedialog.h, .../crystallography/crystalpastedialog.ui, .../src/extensions/crystallography/obeigenconv.h, .../crystallography/spglib/CMakeLists.txt, .../src/extensions/crystallography/spglib/COPYING, .../src/extensions/crystallography/spglib/cell.c, .../src/extensions/crystallography/spglib/cell.h, .../src/extensions/crystallography/spglib/debug.c, .../src/extensions/crystallography/spglib/debug.h, .../crystallography/spglib/hall_symbol.c, .../crystallography/spglib/hall_symbol.h, .../extensions/crystallography/spglib/lattice.c, .../extensions/crystallography/spglib/lattice.h, .../extensions/crystallography/spglib/mathfunc.c, .../extensions/crystallography/spglib/mathfunc.h, .../extensions/crystallography/spglib/pointgroup.c, .../extensions/crystallography/spglib/pointgroup.h, .../extensions/crystallography/spglib/primitive.c, .../extensions/crystallography/spglib/primitive.h, .../extensions/crystallography/spglib/refinement.c, .../extensions/crystallography/spglib/refinement.h, .../extensions/crystallography/spglib/spacegroup.c, .../extensions/crystallography/spglib/spacegroup.h, .../crystallography/spglib/spg_database.c, .../crystallography/spglib/spg_database.h, .../src/extensions/crystallography/spglib/spglib.c, .../src/extensions/crystallography/spglib/spglib.h, .../extensions/crystallography/spglib/symmetry.c, .../extensions/crystallography/spglib/symmetry.h, .../crystallography/spglib/symmetry_kpoint.c, .../crystallography/spglib/symmetry_kpoint.h, .../extensions/crystallography/stablecomparison.h, .../crystallography/ui/ceabstracteditor.cpp, .../crystallography/ui/ceabstracteditor.h, .../crystallography/ui/cecoordinateeditor.cpp, .../crystallography/ui/cecoordinateeditor.h, .../crystallography/ui/cecoordinateeditor.ui, .../crystallography/ui/cematrixeditor.cpp, .../extensions/crystallography/ui/cematrixeditor.h, .../crystallography/ui/cematrixeditor.ui, .../crystallography/ui/ceparametereditor.cpp, .../crystallography/ui/ceparametereditor.h, .../crystallography/ui/ceparametereditor.ui: Added Crystallography extension Change-Id: Ib1ccd4d732f0f5832929010000v200000badc0de 2011-03-17 David C. Lonie * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Add access to GLWidget's text overlay. Extend the GLWidget text overlay from debug info to any specified collection of strings. This deprecates renderDebugOverlay, as renderTextOverlay will now render the debug info in the appropriate location. Change-Id: Ib33cefa8ee3bf49c078a5fe28c4eece56c911da1 2011-03-17 Konstantin Tokarev * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Load engines with missing settings. Currently if Avogadro has non-empty settings, it loads only those engines that are present in settings. This issue requires complete erasing of user settings as the only workaround in the next cases: a) Loading 3rd party engine(s) b) Editing python engine (because ID changes) c) Developing new C++ engine or switching branch from 1.0 to master Also some code duplication was removed. Change-Id: I69062fbb2292d122058030ea1c577864a24c2d23 2011-03-04 Konstantin Tokarev * libavogadro/src/atom.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/molecule.cpp: Lazy evaluation of group indices Recalculates group indices if Atoms of Molecule were changed on first call of Atom::groupIndex Change-Id: I4d3e9dbb2ce93af9359cf9402b5d0703ad5c1cc4 2011-02-18 Konstantin Tokarev * libavogadro/src/atom.h, libavogadro/src/colors/atomindexcolor.cpp, libavogadro/src/colors/distancecolor.cpp, libavogadro/src/colors/smartscolor.cpp, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/extensions/invertchiralextension.cpp, libavogadro/src/neighborlist.cpp, libavogadro/src/tools/selectrotatetool.cpp: Removed some unnecessary qobject_casts Change-Id: I9c56d510f70f44699868da08d94ec1d05a612b08 2011-02-03 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/ca@valencia.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/gl.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sv.po, i18n/avogadro/th.po, i18n/avogadro/tr.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/bs.po, i18n/libavogadro/ca.po, i18n/libavogadro/ca@valencia.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/gl.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: ENH: Updated trunk with latest Launchpad translations and templates. 2011-01-30 Marcus D. Hanwell * libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h: Address bug #3019539 - add wireframe pick method. The pick method actually renders balls and sticks so that the bonds do not clobber the atoms. This could probably be streamlined, but provides one possible solution to this issue. Change-Id: I187d71bbe6092683645aa7c3d97c2ef9e50d07e3 2011-01-25 Konstantin Tokarev * avogadro/src/config.h.in, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: Moved plugin path initialization from libavogadro to avogadro-app. For compatibility PluginManager uses Avogadro plugin path settings or AVOGADRO_PLUGINS variable if client application does not specify plugin path. Change-Id: I58722e393ea02471812c92ea55a9a15fc0f72f67 * .../src/extensions/qtaim/qtaimextension.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.h, .../src/extensions/qtaim/qtaimodeintegrator.h, .../src/extensions/qtaim/qtaimwavefunction.h, .../qtaim/qtaimwavefunctionevaluator.cpp, .../extensions/qtaim/qtaimwavefunctionevaluator.h: Fixed some compilation warnings in QTAIM extension const qualifiers on primitive return types are ignored by GCC and produce too many warnings on each file Also some unused variables were removed Change-Id: I4410b3ab34ea0f8911845c601fc167f807fb28cf 2011-01-21 Marcus D. Hanwell * cmake/modules/PythonDeps.cmake, libavogadro/src/python/sip.cpp: Clean up the SIP support, import suggested fixes. This will also apply cleanly to the 1.0 branch. I have tested with both master and 1.0 using SIP 4.12. Get rid of the symbol definitions - use the ones provided by SIP instead. This means we no longer need to run the sip binary to get the SIP version. Thanks to all the distro guys for putting patches up pointing me in the right direction. Change-Id: I96f8277dd63a3ad726869b1123e2238aad114c97 2011-01-15 Marcus D. Hanwell * libavogadro/src/atom.cpp, libavogadro/src/atom.h: Moved variables to d pointer, initialized them. Some of the variables were not being initialized, such as m_groupIndex, added them to the initializer list. Moved to the d pointer so that they could actually move to be molecule properties in vectors in the future (initialized lazily upon first use). The d pointer was not being deleted, took care of that too. Change-Id: I86b973208489be197abe73d0519d924b4ae29ed8 2010-12-28 Marcus D. Hanwell * libavogadro/src/extensions/surfaces/CMakeLists.txt, libavogadro/src/extensions/surfaces/basisset.cpp, libavogadro/src/extensions/surfaces/basisset.h, .../src/extensions/surfaces/gamessukout.cpp, libavogadro/src/extensions/surfaces/gamessukout.h, libavogadro/src/extensions/surfaces/gamessus.cpp, libavogadro/src/extensions/surfaces/gamessus.h, .../src/extensions/surfaces/gaussianfchk.cpp, libavogadro/src/extensions/surfaces/gaussianfchk.h, .../src/extensions/surfaces/gaussianset.cpp, libavogadro/src/extensions/surfaces/gaussianset.h, libavogadro/src/extensions/surfaces/molden.cpp, libavogadro/src/extensions/surfaces/molden.h, libavogadro/src/extensions/surfaces/mopacaux.cpp, libavogadro/src/extensions/surfaces/mopacaux.h, .../extensions/surfaces/openqube/CMakeLists.txt, .../src/extensions/surfaces/openqube/basisset.h, .../surfaces/openqube/basissetloader.cpp, .../extensions/surfaces/openqube/basissetloader.h, .../src/extensions/surfaces/openqube/cube.cpp, .../src/extensions/surfaces/openqube/cube.h, .../extensions/surfaces/openqube/gamessukout.cpp, .../src/extensions/surfaces/openqube/gamessukout.h, .../src/extensions/surfaces/openqube/gamessus.cpp, .../src/extensions/surfaces/openqube/gamessus.h, .../extensions/surfaces/openqube/gaussianfchk.cpp, .../extensions/surfaces/openqube/gaussianfchk.h, .../extensions/surfaces/openqube/gaussianset.cpp, .../src/extensions/surfaces/openqube/gaussianset.h, .../src/extensions/surfaces/openqube/molden.cpp, .../src/extensions/surfaces/openqube/molden.h, .../src/extensions/surfaces/openqube/mopacaux.cpp, .../src/extensions/surfaces/openqube/mopacaux.h, .../src/extensions/surfaces/openqube/openqubeabi.h, .../src/extensions/surfaces/openqube/slaterset.cpp, .../src/extensions/surfaces/openqube/slaterset.h, .../src/extensions/surfaces/orbitalextension.cpp, .../src/extensions/surfaces/orbitalextension.h, libavogadro/src/extensions/surfaces/slaterset.cpp, libavogadro/src/extensions/surfaces/slaterset.h, .../src/extensions/surfaces/surfaceextension.cpp, .../src/extensions/surfaces/surfaceextension.h: Import OpenQube snapshot - port to use it. Imported the first snapshot of OpenQube, and ported the two extensions to use the new split out library. Build the library as a shared object and link to it from the two plugins. Removed quite a bit of code duplication between the two extensions and within each extension. Change-Id: I3d98f1eaf93fb5d8cede7ea56e5fc3182ff2c03e 2011-01-04 Marcus D. Hanwell * avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Handle some command line arguments - config reset. Allow a --erase-config option to ignore any configuration options saved for the current user. Useful for testing, and for users wishing to reset their settings. Change-Id: I34c4e2586301f18e6020d89e3d7141b2f7e63752 * libavogadro/src/engines/labelengine.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Stop recalculating group indices all of the time. The group index is only used by the label engine, avoid calculating it every time an atom is added/removed or the geometry is changed for something many people never use. I am not convinced that feature has any use outside of the label engine, and would rather see it moved there. Change-Id: I8ce9d03798765d550bf7b74ff4fd19542fb8461b * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Optionally build against Qt Testing. This allows Avogadro to optionally build against Qt Testing from the ParaView project. It adds two new entries to the settings menu to record and play back an XML test. The Qt Testing code can be obtained by, git clone git://paraview.org/QtTesting.git It should be built in its own out of source tree, and you can point to the build tree from Avogadro's build tree to use the library. Change-Id: I7395960b912a6c1467e24fbb68db6de58dc87962 * .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/spectra/dos.cpp, .../src/extensions/spectra/spectradialog.ui, .../src/extensions/spectra/vibrationextension.cpp, .../src/extensions/spectra/vibrationwidget.cpp: Fixes for compiler warnings, indentation in spectra. * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: AutoOptTool compiler warnings and indentation. * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui: Fixed compiler warnings, fixed up indentation, style. 2010-12-31 Marcus D. Hanwell * libavogadro/src/pythonengine_p.cpp, libavogadro/src/pythonerror.cpp, libavogadro/src/pythonextension_p.cpp, libavogadro/src/pythontool_p.cpp: Caught a few Python only moc includes. 2010-12-30 Marcus D. Hanwell * libavogadro/src/CMakeLists.txt, libavogadro/src/animation.cpp, libavogadro/src/atom.cpp, libavogadro/src/bond.cpp, libavogadro/src/color.cpp, libavogadro/src/colorbutton.cpp, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/cube.cpp, libavogadro/src/dockextension.cpp, libavogadro/src/elementdetail_p.cpp, libavogadro/src/elementtranslator.cpp, libavogadro/src/engine.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/extension.cpp, libavogadro/src/fragment.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/mesh.cpp, libavogadro/src/meshgenerator.cpp, libavogadro/src/molecule.cpp, libavogadro/src/moleculefile.cpp, libavogadro/src/periodictablescene_p.cpp, libavogadro/src/periodictableview.cpp, libavogadro/src/plotwidget.cpp, libavogadro/src/plugin.cpp, libavogadro/src/pluginmanager.cpp, libavogadro/src/primitive.cpp, libavogadro/src/protein.cpp, libavogadro/src/readfilethread_p.cpp, libavogadro/src/residue.cpp, libavogadro/src/tool.cpp, libavogadro/src/toolgroup.cpp, libavogadro/src/zmatrix.cpp: Use qt4_wrap_cpp to run Qt's moc. * libavogadro/src/CMakeLists.txt, libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/src/readfilethread_p.cpp, libavogadro/src/readfilethread_p.h: Split ReadFileThread out into a private class. This was causing lots of warnings due to being a QObject derived class with Q_OBJECT macro. Splitting it out into a private class allows us to add back in the Q_OBJECT macro that should be there and fix the warnings. The functionality remains the same. 2010-12-04 Marcus D. Hanwell * libavogadro/src/molecule.cpp, libavogadro/src/tools/drawcommand.cpp: Update molecule when hydrogens are added. Multiple returns were causing the molecule to not be marked as updated in some circumstances, such as when hydrogens are added to two new atoms. This is easily observed with quick render on and the "appearing disappearing hydrogens" can be seen (or not) when you rotate the scene. Change-Id: I173a675ec12efd5e9f490cc36357c669b0c3451b * scripts/cc, scripts/cxx: Removed cc and cxx files. These do not belong in Avogadro's source tree. * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: Fixed a few minor line length issues. 2010-11-22 Marcus D. Hanwell * cmake/modules/AvogadroUse.cmake, libavogadro/src/CMakeLists.txt: Removed GLEW_LIBRARY_DIR link directory calls. * libavogadro/src/molecule.cpp, libavogadro/src/moleculefile.cpp: Fixes for compiler warnings. 2010-11-18 Konstantin Tokarev * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: Added possibility to load fixed lists of plugins Currelntly libavogadro supports only loading of plugin directories. This patch allows client applications to load fixed subset of plugins Change-Id: I408fada3fb1350681006221a4253427b0dcf0109 2010-11-17 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sv.po, i18n/avogadro/tr.po, i18n/avogadro/uk.po, i18n/avogadro/vi.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/ca.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/uk.po, i18n/libavogadro/vi.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Updated translations and merged from Launchpad. 2010-11-17 Marcus D. Hanwell * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: Added const values for atom and bond scaling. Added two new, constant values for atom and bond scaling, fixing a bug introduced during all of the changes to atom and bond radii. Also fixed declaration order/initialization. 2010-11-15 Eric Brown * libavogadro/src/CMakeLists.txt, libavogadro/src/engines/qtaimengine.cpp, libavogadro/src/engines/qtaimengine.h, libavogadro/src/extensions/qtaim/qtaimcubature.cpp, libavogadro/src/extensions/qtaim/qtaimcubature.h, .../src/extensions/qtaim/qtaimextension.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/primitive.h, libavogadro/src/qtaimbondcriticalpoint.cpp, libavogadro/src/qtaimbondcriticalpoint.h, libavogadro/src/qtaimnuclearcriticalpoint.cpp, libavogadro/src/qtaimnuclearcriticalpoint.h: QTAIM: Remove additions to molecule class. All data now through Properties. * .../src/extensions/qtaim/qtaimextension.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp, .../src/extensions/qtaim/qtaimwavefunction.cpp, .../src/extensions/qtaim/qtaimwavefunction.h, libavogadro/src/extensions/surfaces/basisset.h, .../src/extensions/surfaces/gaussianset.cpp, libavogadro/src/extensions/surfaces/gaussianset.h, .../src/extensions/surfaces/orbitalextension.cpp, libavogadro/src/extensions/surfaces/slaterset.h, libavogadro/src/molecule.h: QTAIM: Utilize orbitals from Surface/Orbital Extension. Make sure to use 6D 10F (Cartesian Orbitals) in Electronic Structure program. 2010-10-27 Jens Thomas * libavogadro/src/extensions/quantuminput/gamessukinputdialog.cpp, libavogadro/src/extensions/quantuminput/gamessukinputdialog.h: Small fix to initialisation. Changed the order of declaration of m_coodType and m_output to stop compiler complaining. Also initialised m_title in the constructor as it can't be initialised in the initialisation list as it resides in the base class. Change-Id: I2cd006fb7cc7e4f85acc16041d7891b28dac1ffc 2010-11-14 David Lonie * .../05-ConformerPlot/CMakeLists.txt, .../05-ConformerPlot/conformerplotdialog.cpp, .../05-ConformerPlot/conformerplotdialog.h, .../05-ConformerPlot/conformerplotdialog.ui, .../05-ConformerPlot/conformerplotextension.cpp, .../05-ConformerPlot/conformerplotextension.h, .../thirdPartyExtensions/images/05-promote.png: Added initial version of the ConformerPlot third party extension example. Change-Id: I7cfa1bb9f9439609339fb8b77f0e65a2d3f54f40 * .../04-RotateSelection/CMakeLists.txt, .../04-RotateSelection/rotateselectiondialog.cpp, .../04-RotateSelection/rotateselectiondialog.h, .../04-RotateSelection/rotateselectiondialog.ui, .../rotateselectionextension.cpp, .../04-RotateSelection/rotateselectionextension.h: Added initial version of the RotateSelection third party extension example. Change-Id: Iac5104eb322a2068d2ce27f015b2130fcea9e266 * .../03-ViewPlane/CMakeLists.txt, .../03-ViewPlane/viewplaneextension.cpp, .../03-ViewPlane/viewplaneextension.h: Added initial version of the ViewPlane third party extension example. Change-Id: I1565100c22e6afad102ae894ee32d0d550fe5ba0 2010-11-08 David C. Lonie * .../thirdPartyExtensions/02-DynamicDisplay.dox, .../02-DynamicDisplay/CMakeLists.txt, .../02-DynamicDisplay/dynamicdisplaydialog.cpp, .../02-DynamicDisplay/dynamicdisplaydialog.h, .../02-DynamicDisplay/dynamicdisplaydialog.ui, .../02-DynamicDisplay/dynamicdisplayextension.cpp, .../02-DynamicDisplay/dynamicdisplayextension.h, libavogadro/examples/thirdPartyExtensions/toc.dox: Added initial version of the DynamicDisplay third party extension example. * .../thirdPartyExtensions/01-HelloWorld.dox, .../01-HelloWorld/CMakeLists.txt, .../01-HelloWorld/helloworlddialog.cpp, .../01-HelloWorld/helloworlddialog.h, .../01-HelloWorld/helloworlddialog.ui, .../01-HelloWorld/helloworldextension.cpp, .../01-HelloWorld/helloworldextension.h, libavogadro/examples/thirdPartyExtensions/toc.dox: Added initial version of the HelloWorld third party extension example. 2010-11-09 David C. Lonie * Doxyfile, libavogadro/examples/thirdPartyExtensions/toc.dox: First draft of the tutorial TOC. 2010-11-05 Eric Brown * .../extensions/qtaim/qtaimcriticalpointlocator.cpp, .../extensions/qtaim/qtaimcriticalpointlocator.h, libavogadro/src/extensions/qtaim/qtaimcubature.cpp, libavogadro/src/extensions/qtaim/qtaimcubature.h, .../src/extensions/qtaim/qtaimextension.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.h, .../src/extensions/qtaim/qtaimmathutilities.cpp, .../src/extensions/qtaim/qtaimodeintegrator.cpp, .../src/extensions/qtaim/qtaimodeintegrator.h, .../src/extensions/qtaim/qtaimwavefunction.h, .../qtaim/qtaimwavefunctionevaluator.cpp, .../extensions/qtaim/qtaimwavefunctionevaluator.h: QTAIM: Lone Pairs from Topology of Laplacian 2010-11-04 Eric Brown * libavogadro/src/extensions/qtaim/qtaimcubature.cpp, libavogadro/src/extensions/qtaim/qtaimextension.cpp: MINOR: add 1 to the basin index print out to qDebug to avoid confusion 2010-11-03 Eric Brown * libavogadro/src/extensions/qtaim/qtaimcubature.cpp, .../src/extensions/qtaim/qtaimextension.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.h: QTAIM: Adaptive Integration with explicit determination of basin.\n\nThis integration strategy allows the integrals to be calculated to higher accuracy. 2010-10-19 Konstantin Tokarev * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/gl2ps/COPYING.GL2PS, libavogadro/gl2ps/COPYING.LGPL, libavogadro/gl2ps/README.txt, libavogadro/gl2ps/TODO.txt, libavogadro/gl2ps/gl2ps.c, libavogadro/gl2ps/gl2ps.h, libavogadro/gl2ps/gl2ps.pdf, libavogadro/gl2ps/gl2psTest.c, libavogadro/gl2ps/gl2psTestSimple.c, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gl2ps/COPYING.GL2PS, libavogadro/src/extensions/gl2ps/COPYING.LGPL, libavogadro/src/extensions/gl2ps/README.txt, libavogadro/src/extensions/gl2ps/TODO.txt, libavogadro/src/extensions/gl2ps/gl2ps.c, libavogadro/src/extensions/gl2ps/gl2ps.h, libavogadro/src/extensions/gl2ps/gl2ps.pdf, libavogadro/src/extensions/gl2ps/gl2psTest.c, libavogadro/src/extensions/gl2ps/gl2psTestSimple.c, libavogadro/src/extensions/gl2psextension.cpp, libavogadro/src/extensions/gl2psextension.h: Moved gl2ps export into extension gl2ps code was directly linked with avogadro-app, but Avogadro client should not make assumptions about renderer nature to allow more flexibility in renderer architecture in future. Also it should fix linking error on Windows Change-Id: I8d2de2c7a8d6c645f0695e92a90e9489ea05f53f 2010-11-01 Eric Brown * .../src/extensions/qtaim/qtaimextension.cpp, .../src/extensions/qtaim/qtaimmathutilities.h, .../src/extensions/qtaim/qtaimodeintegrator.cpp, .../qtaim/qtaimwavefunctionevaluator.cpp, .../extensions/qtaim/qtaimwavefunctionevaluator.h: Fix errors found by Dave's MSVC compilation 2010-10-31 Eric Brown * libavogadro/src/extensions/qtaim/qtaimcubature.cpp, libavogadro/src/extensions/qtaim/qtaimcubature.h, .../src/extensions/qtaim/qtaimextension.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp: QTAIM: Adaptive Integration over Atomic Basins (parallel version) 2010-10-26 Konstantin Tokarev * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Added Del as alternative shortcut for actionClear Change-Id: I378b532aa18bca21892790da0740b3203d244328 2010-10-26 Eric Brown * CMakeLists.txt, libavogadro/src/extensions/qtaim/CMakeLists.txt, .../extensions/qtaim/qtaimcriticalpointlocator.cpp, libavogadro/src/extensions/qtaim/qtaimcubature.cpp, libavogadro/src/extensions/qtaim/qtaimcubature.h, .../src/extensions/qtaim/qtaimextension.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.h, .../src/extensions/qtaim/qtaimodeintegrator.cpp, libavogadro/src/extensions/qtaim/test/c4h4.wfn, libavogadro/src/extensions/qtaim/test/hco2.wfn: Adaptive Integration over Atomic Basins (serial version). Output via qDebug(). Memory Leak in LSODA quashed. 2010-10-25 Konstantin Tokarev * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: drawtool: Converted m_addHydrogens and adjustHydrogens from int to bool 2010-10-20 Konstantin Tokarev * libavogadro/src/extensions/qtaim/qtaimcriticalpointlocator.cpp, libavogadro/src/extensions/qtaim/qtaimextension.cpp, libavogadro/src/extensions/qtaim/qtaimlsodaintegrator.h, libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp, libavogadro/src/extensions/qtaim/qtaimmathutilities.h, libavogadro/src/extensions/qtaim/qtaimodeintegrator.h, libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.h: Fixed compilation with older Eigen versions There was a problem in Eigen2 make install that prevented some headers (including Eigen/Eigen) from being installed, that's why these headers are usually missing in Linux packages 2010-10-17 Geoff Hutchison * fragments/cyclic alkanes/cyclohexane-chair.cml, .../cyclic alkanes/cyclohexane-twist-boat.cml, fragments/cyclic alkanes/cyclohexane.cml: Fixed cyclohexane template, thanks to Visvaldas K. for the pointer. Change-Id: Ia86c4894b068c565d17d34d842bdbbb2f69fbb81 2010-10-07 David C. Lonie * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Add option to align the view to the coordinate axes. Change-Id: Iaecd4f1ac8fe52144cdb57888213470633faaacf 2010-10-14 Eric Brown * libavogadro/src/extensions/qtaim/qtaimlsodaintegrator.cpp, libavogadro/src/extensions/qtaim/qtaimlsodaintegrator.h, libavogadro/src/extensions/qtaim/qtaimodeintegrator.cpp, libavogadro/src/extensions/qtaim/qtaimodeintegrator.h, libavogadro/src/extensions/qtaim/qtaimwavefunction.cpp, libavogadro/src/extensions/qtaim/qtaimwavefunction.h: removed QObject inheritance * libavogadro/src/extensions/qtaim/qtaimcriticalpointlocator.cpp, libavogadro/src/extensions/qtaim/qtaimcriticalpointlocator.h: Added m_ prefixes to private members, removed QObject inheritance * .../qtaim/qtaimwavefunctionevaluator.cpp, .../extensions/qtaim/qtaimwavefunctionevaluator.h: Added m_ prefixes to private members, removed QObject inheritance 2010-10-09 Marcus D. Hanwell * libavogadro/src/extensions/qtaim/CMakeLists.txt, libavogadro/src/molecule.cpp, libavogadro/src/qtaimnuclearcriticalpoint.cpp: Removed some whitespace from a few files. Also removed the duplicate removeAtom I introduced during previous rebase of this topic branch. It had moved, not been removed. 2010-09-28 Eric Brown * .../extensions/qtaim/qtaimcriticalpointlocator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.h, .../src/extensions/qtaim/qtaimmathutilities.cpp, .../src/extensions/qtaim/qtaimmathutilities.h, .../src/extensions/qtaim/qtaimodeintegrator.cpp, .../src/extensions/qtaim/qtaimodeintegrator.h, .../src/extensions/qtaim/qtaimwavefunction.cpp, .../src/extensions/qtaim/qtaimwavefunction.h, .../qtaim/qtaimwavefunctionevaluator.cpp, libavogadro/src/qtaimbondcriticalpoint.h, libavogadro/src/qtaimnuclearcriticalpoint.cpp, libavogadro/src/qtaimnuclearcriticalpoint.h: Capitalization problem in include statements Convert malloc to qMalloc, and whitespace. Change-Id: I46b0da2468f97548a7cf86b5049bafcf33e575cf 2010-09-21 Eric Brown * libavogadro/src/extensions/qtaim/CMakeLists.txt, .../extensions/qtaim/qtaimcriticalpointlocator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.cpp, .../src/extensions/qtaim/qtaimlsodaintegrator.h, .../src/extensions/qtaim/qtaimodeintegrator.cpp: QTAIM LSODA Integrator. Improves speed by almost an order of magnitude. Change-Id: I81229883f8f89c2ff35d3bc92a66eb90e55ab3d7 2010-09-17 Eric Brown * libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/qtaimengine.cpp, libavogadro/src/engines/qtaimengine.h, libavogadro/src/engines/qtaimsettingswidget.ui, libavogadro/src/extensions/qtaim/CMakeLists.txt, .../extensions/qtaim/qtaimcriticalpointlocator.cpp, .../src/extensions/qtaim/qtaimextension.cpp, libavogadro/src/extensions/qtaim/qtaimextension.h, .../src/extensions/qtaim/qtaimodeintegrator.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/primitive.h, libavogadro/src/qtaimbondcriticalpoint.cpp, libavogadro/src/qtaimbondcriticalpoint.h, libavogadro/src/qtaimnuclearcriticalpoint.cpp, libavogadro/src/qtaimnuclearcriticalpoint.h: QTAIM Extension, Engine, Minor Change to ODE. Please make sure to add Display Type QTAIM, and reduce opacity on BSDY etc. Change-Id: I8a4812352e09733f7f62b7dcf7803bee893aca74 * libavogadro/src/extensions/qtaim/CMakeLists.txt, .../extensions/qtaim/qtaimcriticalpointlocator.cpp, .../extensions/qtaim/qtaimcriticalpointlocator.h: QTAIM Nuclear and Bond Critical Point Locator, Bond Path Tracer * libavogadro/src/extensions/qtaim/CMakeLists.txt, .../src/extensions/qtaim/qtaimodeintegrator.cpp, .../src/extensions/qtaim/qtaimodeintegrator.h: QTAIM ODE Integrator * .../src/extensions/qtaim/qtaimmathutilities.cpp, .../src/extensions/qtaim/qtaimmathutilities.h, .../qtaim/qtaimwavefunctionevaluator.cpp, .../extensions/qtaim/qtaimwavefunctionevaluator.h: QTAIM Wavefunction and Evaluator (All Derivatives) * .../src/extensions/qtaim/qtaimwavefunction.cpp, .../src/extensions/qtaim/qtaimwavefunction.h, .../qtaim/qtaimwavefunctionevaluator.cpp, .../extensions/qtaim/qtaimwavefunctionevaluator.h: Wavefunction and Evaluator 2010-09-15 Eric Brown * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/qtaim/CMakeLists.txt, .../src/extensions/qtaim/qtaimmathutilities.cpp, .../src/extensions/qtaim/qtaimmathutilities.h: QTAIM Math Utilities 2010-09-17 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/invertchiralextension.cpp, libavogadro/src/extensions/invertchiralextension.h: Generate enantiomer or flip stereo on selected atoms. Change-Id: Iee678ddeab3a5ff2ae8f4c7c60f160c03c573fba 2010-09-28 Jens Thomas * .../src/extensions/quantuminput/CMakeLists.txt, .../quantuminput/gamessukinputdialog.cpp, .../extensions/quantuminput/gamessukinputdialog.h, .../extensions/quantuminput/gamessukinputdialog.ui, .../extensions/quantuminput/inputfileextension.cpp: A basic input dialogue for GAMESS-UK Currently supports single-point energies, optimisations and frequency calculations for closed-shell Hartree-Fock, DFT and MP2 theories in conventional and direct mode. Change-Id: I85d999265585b3c92cc98f726f70096cba0aa672 2010-09-26 Geoff Hutchison * libavogadro/src/extensions/surfaces/gamessus.cpp, .../src/extensions/surfaces/gaussianset.cpp: Fix bug with atom coordinate parsing. Now reads simple GAMESS files. Change-Id: Ib030ac885af12dca499cc3633597b319ad06853f 2010-09-09 Geoff Hutchison * libavogadro/src/extensions/surfaces/gaussianfchk.cpp, libavogadro/src/extensions/surfaces/gaussianset.cpp: Fixed the MO matrix resize calls. Also added some debugging to help with GAMESS-US support. Change-Id: Iea7fb063303d03e936773a55361fd2bd516cbd4c 2010-09-16 Jens Thomas * libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/extensions/trajvideomaker.h: Changed runPovRay to return a bool that can be checked to see if it has worked. Also moved the call to the dialogue to inform the user that it hasn't worked into the calling routine. This was because, if povray isn't present, the dialogue is popped up and needs to be clicked on for every single frame, which can be a little overwhelming if you have several hundred frames... Change-Id: Id2c746973083a1de6a7a408c0b076a611f032267 2010-09-17 Geoff Hutchison * libavogadro/src/extensions/insertcommand.cpp, libavogadro/src/extensions/insertfragmentextension.cpp: Support for inserting a fragment that connects to the selected atom. Change-Id: I525eb056e91f74f21d1d0e36da4407ff7bc7354f * libavogadro/src/extensions/insertcommand.cpp, libavogadro/src/extensions/insertcommand.h, .../src/extensions/insertfragmentextension.cpp: Initial support for "growing fragments." Select an atom, insert smiles. Change-Id: I729310c21f57c43a516549a93da1daef31ad0dc5 2010-09-16 Jens Thomas * libavogadro/src/animation.cpp, libavogadro/src/extensions/animationdialog.cpp, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/animationextension.h: Added support for DL-POLY HISTORY files. I've changed the readTrajFromXYZ to readTrajFromFile, which just selects the correct format based on the filename, as the code is identical in both cases otherwise. Prevent crash with empty molecule, translate file filters correctly. Change-Id: I06e65634ff845dd4ada431b6ef912ecbcc7db95b 2010-09-16 Geoff Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/moleculefile.cpp: Fix reading of conformer files. MainWindow will check for conformers and add them correctly. MoleculeFile will properly reserve vectors of conformers. Change-Id: Ia38f231e1bc9dc19becb2a6155ecb6a3d85b81fe 2010-09-09 Geoff Hutchison * .../src/extensions/molecularpropextension.cpp, .../src/extensions/molecularpropextension.h: Name improvements. Generate InChI and cache to throttle requests. Change-Id: I57271aa4a7d9eea50bcbf37c287a2f3ec3c237c2 2010-09-05 David Lonie * .../src/extensions/molecularpropextension.cpp, .../src/extensions/molecularpropextension.h: Limit network calls for IUPAC name to every three seconds. Change-Id: Idaab1bac048f5c8cb19c809ab370c4fa119d8352 2010-09-04 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sv.po, i18n/avogadro/tr.po, i18n/avogadro/uk.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/ca.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/uk.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Updated translation templates. Change-Id: I85ab19cf6f24e4e07351263cee443b375761a2af 2010-09-02 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/molecularpropdialog.ui, .../src/extensions/molecularpropextension.cpp, .../src/extensions/molecularpropextension.h: First pass at naming molecules through the NIH resolver. 2010-08-29 Konstantin Tokarev * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Load icons from active desktop theme If compiled with Qt >= 4.6.0, try to load icons from current desktop theme unstead of bundled ones from Oxygen. If some icon is missing, or environment is not compatible to Freedesktop standards, bundled icons will be loaded * .../extensions/quantuminput/nwcheminputdialog.cpp, .../extensions/quantuminput/nwcheminputdialog.ui: Fixed format of generated NWChem z-matrix and made it look better Change-Id: I100f17dae2c539f4adb46c10ec8404256c021049 2010-08-20 Tim Vandermeersch * .../src/extensions/surfaces/surfacedialog.cpp, .../src/extensions/surfaces/surfacedialog.h, .../src/extensions/surfaces/surfacedialog.ui: SurfaceDialog: Add Very low resolution (0.5A) and custom resolution (0.01-2.0A) with QDoubleSpinBox. 2010-08-18 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_AU.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/eu.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sv.po, i18n/avogadro/tr.po, i18n/avogadro/uk.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/ca.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_AU.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/eu.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/uk.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Launchpad sync (for real) Change-Id: Ide95e3a6a213763000ce86d9a3095ccddb0223d3 * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sv.po, i18n/avogadro/tr.po, i18n/avogadro/uk.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/ca.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/uk.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po: Translation updates, including Launchpad sync. Change-Id: I35a1f690275a24ed5de27495eb1c7089536238a8 2010-08-18 Tim Vandermeersch * avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp: * libavogadro/src/glwidget.cpp: Use Tool::identifier() to find Navigate tool (was Tool::name()). * avogadro/src/mainwindow.cpp: Call GLWidget::setToolGroup() when (re)loading tools to ensure the glwidget always has a pointer to the Navigate tool. 2010-08-15 Marcus D. Hanwell * libavogadro/src/extensions/surfaces/gaussianset.cpp, libavogadro/src/extensions/surfaces/molden.cpp, libavogadro/src/extensions/surfaces/molden.h: Minor changes - removed debug output, removed includes. 2010-08-10 Geoff Hutchison * libavogadro/src/elementitem_p.cpp, libavogadro/src/glwidget.cpp: Warning fixes. 2010-08-13 Geoff Hutchison * libavogadro/src/extensions/surfaces/CMakeLists.txt, libavogadro/src/extensions/surfaces/gamessus.cpp, libavogadro/src/extensions/surfaces/gamessus.h, .../src/extensions/surfaces/gaussianset.cpp, .../src/extensions/surfaces/orbitalextension.cpp: Initial modifications for GAMESS-US support. Reads MOs from standard DFT / 6-31G* basis. Change-Id: I40cc65d19dfb9acd6d393b2e422cc29dafb7738f 2010-08-11 Geoff Hutchison * libavogadro/src/extensions/surfaces/CMakeLists.txt, .../src/extensions/surfaces/gaussianset.cpp, libavogadro/src/extensions/surfaces/molden.cpp, libavogadro/src/extensions/surfaces/molden.h, .../src/extensions/surfaces/orbitalextension.cpp, .../src/extensions/surfaces/surfaceextension.cpp, testfiles/benzene.mold: Initial support for reading MOs and GTOs from Molden files (.mold, .molf, .molden). Change-Id: I081912c118592cdb8670a7eb1f655832dd64560d 2010-08-10 Geoff Hutchison * libavogadro/src/atom.cpp, libavogadro/src/molecule.cpp: Store and retain atomic partial charges. Change-Id: I181adbe6b41be6fc3cd2256030c0c12977fea3fe * libavogadro/src/elementitem_p.cpp, libavogadro/src/glwidget.cpp: Warning fixes. 2010-07-16 Konstantin Tokarev * libavogadro/src/bond.cpp, libavogadro/src/molecule.cpp: Added possibility to read and save bond labels to CML files Before this patch custom label were not saved and read 2010-07-15 Jens Thomas * libavogadro/src/extensions/surfaces/gamessukout.cpp, libavogadro/src/extensions/surfaces/gamessukout.h, .../src/extensions/surfaces/surfaceextension.cpp: Small changes necessitated by changes on the master branch while I was working. 2010-07-14 Geoff Hutchison * libavogadro/src/extensions/surfaces/approxmath.h, .../src/extensions/surfaces/gaussianset.cpp, .../src/extensions/surfaces/orbitalextension.cpp, .../src/extensions/surfaces/orbitalextension.h: Added timer (for performance) in orbital extension. Use approx exp() for speed boost. Added better comments in header, including origins of methods. Change-Id: Ia5168f9a6ed46cf7526e91f17f3aecdd64a1e280 2010-07-14 Jens Thomas * .../src/extensions/surfaces/gamessukout.cpp, libavogadro/src/extensions/surfaces/gamessukout.h: First cut of the code to parse the coordinates, basis set and MO vectors from a GAMESS-UK output file. This has been written with the idea that it might end up in OpenBabel, so no use has been made of Qt. This is currently pretty rudimentary, only tested with s and p functions, and only works with rhf. 2010-07-13 Geoff Hutchison * i18n/avogadro/avogadro.pot, i18n/libavogadro/libavogadro.pot: Updated PO templates with latest code. Start of monthly sync with Launchpad. 2010-07-07 David Lonie * .../src/extensions/surfaces/orbitaltablemodel.cpp, .../src/extensions/surfaces/orbitaltablemodel.h, .../src/extensions/surfaces/orbitalwidget.cpp: Use progress bars to show the status of the orbital calculations. Change-Id: I96b2bc63a1ba67f6bdb83694fb3cc83da78f78b1 2010-07-07 David C. Lonie * .../src/extensions/surfaces/orbitalextension.cpp, .../src/extensions/surfaces/orbitalextension.h, .../src/extensions/surfaces/orbitaltablemodel.cpp, .../src/extensions/surfaces/orbitaltablemodel.h, .../src/extensions/surfaces/orbitalwidget.cpp, .../src/extensions/surfaces/orbitalwidget.h: Show progress of orbital calculations. * libavogadro/src/meshgenerator.cpp, libavogadro/src/meshgenerator.h: Add options to update the progress of the mesh calculation. 2010-07-07 Konstantin Tokarev * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdysettingswidget.ui: Better range for bond radii Old settings of slider don't allow fine tuning of bond radii Change-Id: I434feca70ab82d82f30afb999368d9ecfa7c7965 2010-06-13 David Lonie * libavogadro/src/extensions/surfaces/CMakeLists.txt, .../src/extensions/surfaces/orbitalextension.cpp, .../src/extensions/surfaces/orbitalextension.h, .../extensions/surfaces/orbitalsettingsdialog.cpp, .../extensions/surfaces/orbitalsettingsdialog.h, .../extensions/surfaces/orbitalsettingsdialog.ui, .../src/extensions/surfaces/orbitaltablemodel.cpp, .../src/extensions/surfaces/orbitaltablemodel.h, .../src/extensions/surfaces/orbitalwidget.cpp, .../src/extensions/surfaces/orbitalwidget.h, .../src/extensions/surfaces/orbitalwidget.ui, .../src/extensions/surfaces/surfaceextension.cpp: Added orbital extension Change-Id: I0cbfb3ebeee716954b5e22ae345fcfb5430d7cd9 2010-07-03 Konstantin Tokarev * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: Removed excessive branching from BSDYEngine::radius() Now radius() function doesn't check if VdW or Covalent is used, but calls appropriate function by pointer stored in BSDYEngine, which is changed when user switches radius type in UI Change-Id: I967431710154bd3ef717510ac09580d4ecf70a57 2010-07-01 annulen * libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/spectra/cd.cpp, libavogadro/src/extensions/spectra/dos.cpp, libavogadro/src/extensions/spectra/raman.cpp, .../src/extensions/spectra/spectradialog.cpp, libavogadro/src/extensions/spectra/spectradialog.h, libavogadro/src/extensions/spectra/uv.cpp, .../src/extensions/spectra/vibrationwidget.cpp, libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/molecule.cpp: Use new OB_VERSION_CHECK macro instead of OPENBABEL_IS_NEWER_THAN_2_2_99 New macro OB_VERSION_CHECK allows comparison of current OpenBabel version to any given version, not only 2.2.99 (hope the next versions will also add functionality) 2010-06-13 David Lonie * libavogadro/src/extensions/surfaces/CMakeLists.txt, libavogadro/src/extensions/surfaces/basisset.cpp, libavogadro/src/extensions/surfaces/basisset.h, .../src/extensions/surfaces/gaussianfchk.cpp, libavogadro/src/extensions/surfaces/gaussianfchk.h, .../src/extensions/surfaces/gaussianset.cpp, libavogadro/src/extensions/surfaces/gaussianset.h, libavogadro/src/extensions/surfaces/molpro.cpp, libavogadro/src/extensions/surfaces/molpro.h, libavogadro/src/extensions/surfaces/slaterset.cpp, libavogadro/src/extensions/surfaces/slaterset.h, .../src/extensions/surfaces/surfaceextension.cpp, .../src/extensions/surfaces/surfaceextension.h: Created an abstract basis set class, and changed old basisset.* to gaussianset.* Change-Id: I77ef8e5ed62cc298ee4f1ae4534b1479d1c7cf79 2010-06-13 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro.pot, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sv.po, i18n/avogadro/tr.po, i18n/avogadro/uk.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/ca.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro.pot, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/uk.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po, i18n/libqperiodictable/ar.po, i18n/libqperiodictable/bg.po, i18n/libqperiodictable/ca.po, i18n/libqperiodictable/cs.po, i18n/libqperiodictable/da.po, i18n/libqperiodictable/de.po, i18n/libqperiodictable/el.po, i18n/libqperiodictable/en_CA.po, i18n/libqperiodictable/en_GB.po, i18n/libqperiodictable/es.po, i18n/libqperiodictable/fi.po, i18n/libqperiodictable/fr.po, i18n/libqperiodictable/he.po, i18n/libqperiodictable/hi.po, i18n/libqperiodictable/hu.po, i18n/libqperiodictable/id.po, i18n/libqperiodictable/it.po, i18n/libqperiodictable/ja.po, i18n/libqperiodictable/kn.po, i18n/libqperiodictable/ko.po, i18n/libqperiodictable/libqperiodictable.pot, i18n/libqperiodictable/nb.po, i18n/libqperiodictable/nl.po, i18n/libqperiodictable/pl.po, i18n/libqperiodictable/pt.po, i18n/libqperiodictable/pt_BR.po, i18n/libqperiodictable/ru.po, i18n/libqperiodictable/sk.po, i18n/libqperiodictable/sv.po, i18n/libqperiodictable/tr.po, i18n/libqperiodictable/uk.po, i18n/libqperiodictable/zh_CN.po, i18n/libqperiodictable/zh_TW.po, scripts/extract-periodictable-messages.sh: Update with Launchpad translations. Merge periodic table messages back into libavogadro translations template. 2010-06-07 Geoff Hutchison * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/quantuminput/CMakeLists.txt, libavogadro/src/extensions/spectra/CMakeLists.txt, libavogadro/src/extensions/surfaces/CMakeLists.txt: Re-merged from Cryos repo, now compiles. 2010-06-01 Konstantin Tokarev * libavogadro/src/bond.cpp, libavogadro/src/bond.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Changeable bond labels Added possibility to set custom bond labels in right-click menu of selectrotatetool. Some unneeded comments and whitespaces were also removed Change-Id:Ib61613ac 2010-05-31 annulen * libavogadro/src/elementitem_p.cpp, libavogadro/src/elementitem_p.h: Made periodic table proof to missing elements in OB (cell is skipped) Skip element cell if (for some reason) it's symbol is missing in OB table. Change-Id:I56a85bbf * avogadro.pc.in, avogadro.prf.in: Synchronized pkg-config and qmake integration files with recent changes 2010-05-30 Marcus D. Hanwell * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: Fixed the location of the inline hint. Please see http://www.parashift.com/c++-faq-lite/inline-functions.html for more details on the correct use of the inline keyword. 2010-05-27 Marcus D. Hanwell * AvogadroCore.pc.in, AvogadroWidget.pc.in, CMakeLists.txt, QPeriodicTable.pc.in, QPlotWidget.pc.in, avogadro/CMakeLists.txt, avogadro/src/CMakeLists.txt, libavogadro/CMakeLists.txt, libavogadro/examples/c++/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/quantuminput/CMakeLists.txt, libavogadro/src/extensions/spectra/CMakeLists.txt, libavogadro/src/extensions/surfaces/CMakeLists.txt, libavogadro/src/python/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt, libavogadro/tests/CMakeLists.txt: Removed unused files, updated CMake syntax/style. Removed a few files that are not needed anymore. Took a pass at the CMake files to update their style, remove superfluous calls, fixed indentation and a few other things. Builds successfully on Linux, but it is possible that some of the platform dependent code needs more testing. I am not sure what some of the new compiler logic aims to do, and it looks like most of that logic should be refactored into a support file. Please let me know if you hit any problems. * CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/elementdetail_p.cpp, libavogadro/src/elementdetail_p.h, libavogadro/src/elementitem_p.cpp, libavogadro/src/elementitem_p.h, libavogadro/src/elementtranslator.cpp, libavogadro/src/elementtranslator.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/labelengine.cpp, libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/quantuminput/CMakeLists.txt, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/spectra/CMakeLists.txt, libavogadro/src/extensions/spectra/spectradialog.h, .../src/extensions/spectra/spectradialog.ui, libavogadro/src/extensions/spectra/spectratype.h, libavogadro/src/periodictablescene_p.cpp, libavogadro/src/periodictablescene_p.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h, libavogadro/src/plotaxis.cpp, libavogadro/src/plotaxis.h, libavogadro/src/plotobject.cpp, libavogadro/src/plotobject.h, libavogadro/src/plotpoint.cpp, libavogadro/src/plotpoint.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h, libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/elementtranslator.cpp, libavogadro/src/python/periodictableview.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/drawtool.cpp, periodictable/CMakeLists.txt, periodictable/examples/qperiodictable.cpp, periodictable/examples/qperiodictable.h, periodictable/examples/qperiodictable.pro, periodictable/src/CMakeLists.txt, periodictable/src/config.h.in, periodictable/src/elementdetail_p.cpp, periodictable/src/elementdetail_p.h, periodictable/src/elementitem_p.cpp, periodictable/src/elementitem_p.h, periodictable/src/elementtranslator.cpp, periodictable/src/elementtranslator.h, periodictable/src/global.cpp, periodictable/src/global.h, periodictable/src/periodictablescene_p.cpp, periodictable/src/periodictablescene_p.h, periodictable/src/periodictableview.cpp, periodictable/src/periodictableview.h, periodictable/src/qperiodictable.cpp, periodictable/src/qperiodictable.h, plotwidget/CMakeLists.txt, plotwidget/src/CMakeLists.txt, plotwidget/src/global.h, plotwidget/src/plotaxis.cpp, plotwidget/src/plotaxis.h, plotwidget/src/plotobject.cpp, plotwidget/src/plotobject.h, plotwidget/src/plotpoint.cpp, plotwidget/src/plotpoint.h, plotwidget/src/plotwidget.cpp, plotwidget/src/plotwidget.h: Restored the old source/library structure. Restored the old source/library structure in Avogadro. Note that any headers in libavogadro_HDRS are installed and part of our public API. They cannot be removed, nor can any API incompatible changes be made. Ideally no ABI incompatible changes can be made either, but for the 1.1/1.2 cycle this restriction is being waved. Please be especially wary about modifying any of the headers in that list. Look to the list in the 1.0 release for the released headers that are part of our public API. I also took the opportunity to clean up our CMakeLists.txt files a little, and will continue to do so in order to make things a little clearer. 2010-05-23 annulen * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdysettingswidget.ui: Better range for bond radii * avogadro/src/CMakeLists.txt, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/quantuminput/CMakeLists.txt, libavogadro/src/extensions/spectra/CMakeLists.txt, libavogadro/src/extensions/surfaces/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Link avogadro-app and plugins to modular libraries 2010-05-22 annulen * periodictable/src/elementitem_p.cpp, periodictable/src/elementitem_p.h: Made periodic table proof to missing elements in OB (cell is skipped) 2010-05-22 annulen * CMakeLists.txt, qperiodictable.prf.in, qplotwidget.prf.in: QMake integration for periodic table and plot widgets 2010-05-18 annulen * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/tools/selectrotatetool.cpp: Changing of radii 2010-05-16 annulen * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/tools/selectrotatetool.cpp: Support for reading new properties from OBAtom * libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Added menu items to reset color and label * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h, libavogadro/src/painter.h, libavogadro/src/tools/selectrotatetool.cpp: Replaced customColor with customColorName in Atom Reasons: 1) there were some crutchy pointers to QColor; 2) AvogadroCore shouldn't link with QtGui * libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h, libavogadro/src/painter.h: Added new overloaded setColor(QString) to Painter class (sets color by name) 2010-05-15 annulen * CMakeLists.txt, libavogadro/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Moved condition for RTTI enabling out of plugin function definition * AvogadroCore.pc.cmake, AvogadroCore.pc.in, AvogadroWidget.pc.cmake, AvogadroWidget.pc.in, CMakeLists.txt, QPeriodicTable.pc.in, QPlotWidget.pc.in, avogadro.pc.cmake, avogadro.pc.in: Added pkg-config files for QPlotWidget and QPeriodicTable 2010-05-13 annulen * .../extensions/quantuminput/daltoninputdialog.cpp, .../extensions/quantuminput/gamessinputdialog.cpp, .../extensions/quantuminput/molproinputdialog.cpp, .../extensions/quantuminput/mopacinputdialog.cpp, .../extensions/quantuminput/nwcheminputdialog.cpp, .../extensions/quantuminput/qcheminputdialog.cpp: quantuminput: removed dead code * CMakeLists.txt, avogadro/src/CMakeLists.txt, libavogadro/CMakeLists.txt: Disable RTTI in plugins, avogadro-app, qperiodictable * .../quantuminput/gaussianinputdialog.cpp, .../extensions/quantuminput/mopacinputdialog.cpp: Store properties of Gaussian and MOPAC in subcategories * .../src/extensions/quantuminput/CMakeLists.txt, .../extensions/quantuminput/daltoninputdialog.cpp, .../extensions/quantuminput/daltoninputdialog.h, .../extensions/quantuminput/gamessinputdialog.cpp, .../extensions/quantuminput/gamessinputdialog.h, .../quantuminput/gaussianinputdialog.cpp, .../extensions/quantuminput/gaussianinputdialog.h, .../src/extensions/quantuminput/inputdialog.cpp, .../src/extensions/quantuminput/inputdialog.h, .../extensions/quantuminput/inputfileextension.cpp, .../extensions/quantuminput/inputfileextension.h, .../extensions/quantuminput/molproinputdialog.cpp, .../extensions/quantuminput/molproinputdialog.h, .../extensions/quantuminput/mopacinputdialog.cpp, .../src/extensions/quantuminput/mopacinputdialog.h, .../extensions/quantuminput/nwcheminputdialog.cpp, .../extensions/quantuminput/nwcheminputdialog.h, .../extensions/quantuminput/qcheminputdialog.cpp, .../src/extensions/quantuminput/qcheminputdialog.h: Derived all input dialogs from common base, use shared file save function (with exception of Gaussian), store dialogs in hash 2010-05-07 annulen * libavogadro/src/extensions/quantuminput/daltoninputdialog.h, libavogadro/src/extensions/quantuminput/gaussianinputdialog.h, libavogadro/src/extensions/quantuminput/molproinputdialog.h, libavogadro/src/extensions/quantuminput/mopacinputdialog.h, libavogadro/src/extensions/quantuminput/nwcheminputdialog.h, libavogadro/src/extensions/quantuminput/qcheminputdialog.h: Removed redundant headers from input dialogs * .../extensions/quantuminput/molproinputdialog.cpp, .../extensions/quantuminput/molproinputdialog.h, .../extensions/quantuminput/molproinputdialog.ui: Fixed compatibility of Molpro dialog with Molpro 2009.1 2010-05-06 annulen * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/tools/selectrotatetool.cpp: Can change colors of atoms 2010-05-05 annulen * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Can change labels 2010-05-03 annulen * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: Fixed inline declaration 2010-04-28 annulen * .../extensions/quantuminput/gamessinputdialog.cpp, .../extensions/quantuminput/gamessinputdialog.h: Save path of job export directory for Gamess (PR#2883170) 2010-04-27 Geoff Hutchison * i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/oc.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sv.po, i18n/avogadro/tr.po, i18n/avogadro/uk.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/ca.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/oc.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/uk.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po, i18n/libqperiodictable/ar.po, i18n/libqperiodictable/bg.po, i18n/libqperiodictable/ca.po, i18n/libqperiodictable/cs.po, i18n/libqperiodictable/da.po, i18n/libqperiodictable/de.po, i18n/libqperiodictable/el.po, i18n/libqperiodictable/en_CA.po, i18n/libqperiodictable/en_GB.po, i18n/libqperiodictable/es.po, i18n/libqperiodictable/fi.po, i18n/libqperiodictable/fr.po, i18n/libqperiodictable/he.po, i18n/libqperiodictable/hi.po, i18n/libqperiodictable/hu.po, i18n/libqperiodictable/id.po, i18n/libqperiodictable/it.po, i18n/libqperiodictable/ja.po, i18n/libqperiodictable/kn.po, i18n/libqperiodictable/ko.po, i18n/libqperiodictable/nb.po, i18n/libqperiodictable/nl.po, i18n/libqperiodictable/pl.po, i18n/libqperiodictable/pt.po, i18n/libqperiodictable/pt_BR.po, i18n/libqperiodictable/ru.po, i18n/libqperiodictable/sk.po, i18n/libqperiodictable/sv.po, i18n/libqperiodictable/tr.po, i18n/libqperiodictable/uk.po, i18n/libqperiodictable/zh_CN.po, i18n/libqperiodictable/zh_TW.po: Launchpad update. 2010-04-26 Geoff Hutchison * avogadro/src/CMakeLists.txt, cmake/modules/FindLinguist.cmake, i18n/avogadro/af.po, i18n/avogadro/ar.po, i18n/avogadro/avogadro-af.po, i18n/avogadro/avogadro-ar.po, i18n/avogadro/avogadro-bg.po, i18n/avogadro/avogadro-ca.po, i18n/avogadro/avogadro-cs.po, i18n/avogadro/avogadro-da.po, i18n/avogadro/avogadro-de.po, i18n/avogadro/avogadro-el.po, i18n/avogadro/avogadro-en_CA.po, i18n/avogadro/avogadro-en_GB.po, i18n/avogadro/avogadro-es.po, i18n/avogadro/avogadro-fi.po, i18n/avogadro/avogadro-fr.po, i18n/avogadro/avogadro-he.po, i18n/avogadro/avogadro-hr.po, i18n/avogadro/avogadro-hu.po, i18n/avogadro/avogadro-id.po, i18n/avogadro/avogadro-it.po, i18n/avogadro/avogadro-ja.po, i18n/avogadro/avogadro-kn.po, i18n/avogadro/avogadro-ko.po, i18n/avogadro/avogadro-nb.po, i18n/avogadro/avogadro-nl.po, i18n/avogadro/avogadro-pl.po, i18n/avogadro/avogadro-pt.po, i18n/avogadro/avogadro-pt_BR.po, i18n/avogadro/avogadro-ru.po, i18n/avogadro/avogadro-sk.po, i18n/avogadro/avogadro-sv.po, i18n/avogadro/avogadro-tr.po, i18n/avogadro/avogadro-uk.po, i18n/avogadro/avogadro-zh_CN.po, i18n/avogadro/avogadro-zh_TW.po, i18n/avogadro/bg.po, i18n/avogadro/ca.po, i18n/avogadro/cs.po, i18n/avogadro/da.po, i18n/avogadro/de.po, i18n/avogadro/el.po, i18n/avogadro/en_CA.po, i18n/avogadro/en_GB.po, i18n/avogadro/es.po, i18n/avogadro/fi.po, i18n/avogadro/fr.po, i18n/avogadro/he.po, i18n/avogadro/hr.po, i18n/avogadro/hu.po, i18n/avogadro/id.po, i18n/avogadro/it.po, i18n/avogadro/ja.po, i18n/avogadro/kn.po, i18n/avogadro/ko.po, i18n/avogadro/nb.po, i18n/avogadro/nl.po, i18n/avogadro/pl.po, i18n/avogadro/pt.po, i18n/avogadro/pt_BR.po, i18n/avogadro/ru.po, i18n/avogadro/sk.po, i18n/avogadro/sv.po, i18n/avogadro/tr.po, i18n/avogadro/uk.po, i18n/avogadro/zh_CN.po, i18n/avogadro/zh_TW.po, i18n/libavogadro/ar.po, i18n/libavogadro/bg.po, i18n/libavogadro/ca.po, i18n/libavogadro/cs.po, i18n/libavogadro/da.po, i18n/libavogadro/de.po, i18n/libavogadro/el.po, i18n/libavogadro/en_CA.po, i18n/libavogadro/en_GB.po, i18n/libavogadro/es.po, i18n/libavogadro/fi.po, i18n/libavogadro/fr.po, i18n/libavogadro/he.po, i18n/libavogadro/hi.po, i18n/libavogadro/hu.po, i18n/libavogadro/id.po, i18n/libavogadro/it.po, i18n/libavogadro/ja.po, i18n/libavogadro/kn.po, i18n/libavogadro/ko.po, i18n/libavogadro/libavogadro-ar.po, i18n/libavogadro/libavogadro-bg.po, i18n/libavogadro/libavogadro-ca.po, i18n/libavogadro/libavogadro-cs.po, i18n/libavogadro/libavogadro-da.po, i18n/libavogadro/libavogadro-de.po, i18n/libavogadro/libavogadro-el.po, i18n/libavogadro/libavogadro-en_CA.po, i18n/libavogadro/libavogadro-en_GB.po, i18n/libavogadro/libavogadro-es.po, i18n/libavogadro/libavogadro-fi.po, i18n/libavogadro/libavogadro-fr.po, i18n/libavogadro/libavogadro-he.po, i18n/libavogadro/libavogadro-hi.po, i18n/libavogadro/libavogadro-hu.po, i18n/libavogadro/libavogadro-id.po, i18n/libavogadro/libavogadro-it.po, i18n/libavogadro/libavogadro-ja.po, i18n/libavogadro/libavogadro-kn.po, i18n/libavogadro/libavogadro-ko.po, i18n/libavogadro/libavogadro-nb.po, i18n/libavogadro/libavogadro-nl.po, i18n/libavogadro/libavogadro-pl.po, i18n/libavogadro/libavogadro-pt.po, i18n/libavogadro/libavogadro-pt_BR.po, i18n/libavogadro/libavogadro-ru.po, i18n/libavogadro/libavogadro-sk.po, i18n/libavogadro/libavogadro-sv.po, i18n/libavogadro/libavogadro-tr.po, i18n/libavogadro/libavogadro-uk.po, i18n/libavogadro/libavogadro-zh_CN.po, i18n/libavogadro/libavogadro-zh_TW.po, i18n/libavogadro/nb.po, i18n/libavogadro/nl.po, i18n/libavogadro/pl.po, i18n/libavogadro/pt.po, i18n/libavogadro/pt_BR.po, i18n/libavogadro/ru.po, i18n/libavogadro/sk.po, i18n/libavogadro/sv.po, i18n/libavogadro/tr.po, i18n/libavogadro/uk.po, i18n/libavogadro/zh_CN.po, i18n/libavogadro/zh_TW.po, i18n/libqperiodictable/ar.po, i18n/libqperiodictable/bg.po, i18n/libqperiodictable/ca.po, i18n/libqperiodictable/cs.po, i18n/libqperiodictable/da.po, i18n/libqperiodictable/de.po, i18n/libqperiodictable/el.po, i18n/libqperiodictable/en_CA.po, i18n/libqperiodictable/en_GB.po, i18n/libqperiodictable/es.po, i18n/libqperiodictable/fi.po, i18n/libqperiodictable/fr.po, i18n/libqperiodictable/he.po, i18n/libqperiodictable/hi.po, i18n/libqperiodictable/hu.po, i18n/libqperiodictable/id.po, i18n/libqperiodictable/it.po, i18n/libqperiodictable/ja.po, i18n/libqperiodictable/kn.po, i18n/libqperiodictable/ko.po, i18n/libqperiodictable/libqperiodictable-ar.po, i18n/libqperiodictable/libqperiodictable-bg.po, i18n/libqperiodictable/libqperiodictable-ca.po, i18n/libqperiodictable/libqperiodictable-cs.po, i18n/libqperiodictable/libqperiodictable-da.po, i18n/libqperiodictable/libqperiodictable-de.po, i18n/libqperiodictable/libqperiodictable-el.po, i18n/libqperiodictable/libqperiodictable-en_CA.po, i18n/libqperiodictable/libqperiodictable-en_GB.po, i18n/libqperiodictable/libqperiodictable-es.po, i18n/libqperiodictable/libqperiodictable-fi.po, i18n/libqperiodictable/libqperiodictable-fr.po, i18n/libqperiodictable/libqperiodictable-he.po, i18n/libqperiodictable/libqperiodictable-hi.po, i18n/libqperiodictable/libqperiodictable-hu.po, i18n/libqperiodictable/libqperiodictable-id.po, i18n/libqperiodictable/libqperiodictable-it.po, i18n/libqperiodictable/libqperiodictable-ja.po, i18n/libqperiodictable/libqperiodictable-kn.po, i18n/libqperiodictable/libqperiodictable-ko.po, i18n/libqperiodictable/libqperiodictable-nb.po, i18n/libqperiodictable/libqperiodictable-nl.po, i18n/libqperiodictable/libqperiodictable-pl.po, i18n/libqperiodictable/libqperiodictable-pt.po, i18n/libqperiodictable/libqperiodictable-pt_BR.po, i18n/libqperiodictable/libqperiodictable-ru.po, i18n/libqperiodictable/libqperiodictable-sk.po, i18n/libqperiodictable/libqperiodictable-sv.po, i18n/libqperiodictable/libqperiodictable-tr.po, i18n/libqperiodictable/libqperiodictable-uk.po, i18n/libqperiodictable/libqperiodictable-zh_CN.po, i18n/libqperiodictable/libqperiodictable-zh_TW.po, i18n/libqperiodictable/nb.po, i18n/libqperiodictable/nl.po, i18n/libqperiodictable/pl.po, i18n/libqperiodictable/pt.po, i18n/libqperiodictable/pt_BR.po, i18n/libqperiodictable/ru.po, i18n/libqperiodictable/sk.po, i18n/libqperiodictable/sv.po, i18n/libqperiodictable/tr.po, i18n/libqperiodictable/uk.po, i18n/libqperiodictable/zh_CN.po, i18n/libqperiodictable/zh_TW.po, libavogadro/src/CMakeLists.txt, periodictable/src/CMakeLists.txt: Moved translations to handle Launchpad sync. * libavogadro/src/camera.cpp, libavogadro/src/color.cpp, libavogadro/src/glpainter_p.cpp: Not sure why GL/gl.h is needed here, it should be found through QtOpenGL. * i18n/avogadro/avogadro-af.po, i18n/avogadro/avogadro-ar.po, i18n/avogadro/avogadro-bg.po, i18n/avogadro/avogadro-ca.po, i18n/avogadro/avogadro-cs.po, i18n/avogadro/avogadro-da.po, i18n/avogadro/avogadro-de.po, i18n/avogadro/avogadro-el.po, i18n/avogadro/avogadro-en_CA.po, i18n/avogadro/avogadro-en_GB.po, i18n/avogadro/avogadro-es.po, i18n/avogadro/avogadro-fi.po, i18n/avogadro/avogadro-fr.po, i18n/avogadro/avogadro-he.po, i18n/avogadro/avogadro-hr.po, i18n/avogadro/avogadro-hu.po, i18n/avogadro/avogadro-id.po, i18n/avogadro/avogadro-it.po, i18n/avogadro/avogadro-ja.po, i18n/avogadro/avogadro-kn.po, i18n/avogadro/avogadro-ko.po, i18n/avogadro/avogadro-nb.po, i18n/avogadro/avogadro-nl.po, i18n/avogadro/avogadro-pl.po, i18n/avogadro/avogadro-pt.po, i18n/avogadro/avogadro-pt_BR.po, i18n/avogadro/avogadro-ru.po, i18n/avogadro/avogadro-sk.po, i18n/avogadro/avogadro-sv.po, i18n/avogadro/avogadro-tr.po, i18n/avogadro/avogadro-uk.po, i18n/avogadro/avogadro-zh_CN.po, i18n/avogadro/avogadro-zh_TW.po, i18n/avogadro/avogadro.pot, i18n/libavogadro/libavogadro-ar.po, i18n/libavogadro/libavogadro-bg.po, i18n/libavogadro/libavogadro-ca.po, i18n/libavogadro/libavogadro-cs.po, i18n/libavogadro/libavogadro-da.po, i18n/libavogadro/libavogadro-de.po, i18n/libavogadro/libavogadro-el.po, i18n/libavogadro/libavogadro-en_CA.po, i18n/libavogadro/libavogadro-en_GB.po, i18n/libavogadro/libavogadro-es.po, i18n/libavogadro/libavogadro-fi.po, i18n/libavogadro/libavogadro-fr.po, i18n/libavogadro/libavogadro-he.po, i18n/libavogadro/libavogadro-hi.po, i18n/libavogadro/libavogadro-hu.po, i18n/libavogadro/libavogadro-id.po, i18n/libavogadro/libavogadro-it.po, i18n/libavogadro/libavogadro-ja.po, i18n/libavogadro/libavogadro-kn.po, i18n/libavogadro/libavogadro-ko.po, i18n/libavogadro/libavogadro-nb.po, i18n/libavogadro/libavogadro-nl.po, i18n/libavogadro/libavogadro-pl.po, i18n/libavogadro/libavogadro-pt.po, i18n/libavogadro/libavogadro-pt_BR.po, i18n/libavogadro/libavogadro-ru.po, i18n/libavogadro/libavogadro-sk.po, i18n/libavogadro/libavogadro-sv.po, i18n/libavogadro/libavogadro-tr.po, i18n/libavogadro/libavogadro-uk.po, i18n/libavogadro/libavogadro-zh_CN.po, i18n/libavogadro/libavogadro-zh_TW.po, i18n/libavogadro/libavogadro.pot, i18n/libqperiodictable/libqperiodictable-ar.po, i18n/libqperiodictable/libqperiodictable-bg.po, i18n/libqperiodictable/libqperiodictable-ca.po, i18n/libqperiodictable/libqperiodictable-cs.po, i18n/libqperiodictable/libqperiodictable-da.po, i18n/libqperiodictable/libqperiodictable-de.po, i18n/libqperiodictable/libqperiodictable-el.po, i18n/libqperiodictable/libqperiodictable-en_CA.po, i18n/libqperiodictable/libqperiodictable-en_GB.po, i18n/libqperiodictable/libqperiodictable-es.po, i18n/libqperiodictable/libqperiodictable-fi.po, i18n/libqperiodictable/libqperiodictable-fr.po, i18n/libqperiodictable/libqperiodictable-he.po, i18n/libqperiodictable/libqperiodictable-hi.po, i18n/libqperiodictable/libqperiodictable-hu.po, i18n/libqperiodictable/libqperiodictable-id.po, i18n/libqperiodictable/libqperiodictable-it.po, i18n/libqperiodictable/libqperiodictable-ja.po, i18n/libqperiodictable/libqperiodictable-kn.po, i18n/libqperiodictable/libqperiodictable-ko.po, i18n/libqperiodictable/libqperiodictable-nb.po, i18n/libqperiodictable/libqperiodictable-nl.po, i18n/libqperiodictable/libqperiodictable-pl.po, i18n/libqperiodictable/libqperiodictable-pt.po, i18n/libqperiodictable/libqperiodictable-pt_BR.po, i18n/libqperiodictable/libqperiodictable-ru.po, i18n/libqperiodictable/libqperiodictable-sk.po, i18n/libqperiodictable/libqperiodictable-sv.po, i18n/libqperiodictable/libqperiodictable-tr.po, i18n/libqperiodictable/libqperiodictable-uk.po, i18n/libqperiodictable/libqperiodictable-zh_CN.po, i18n/libqperiodictable/libqperiodictable-zh_TW.po, i18n/libqperiodictable/libqperiodictable.pot: Updated translations for Launchpad. (Will these be auto-imported?) * scripts/extract-application-messages.sh, scripts/extract-library-messages.sh, scripts/extract-periodictable-messages.sh: Updated scripts to mark obsolete messages. 2010-04-23 annulen * libavogadro/src/engines/labelengine.cpp, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/tools/drawtool.cpp, periodictable/src/global.cpp, periodictable/src/global.h, periodictable/src/qperiodictable.cpp: Load translation of periodic table when used * libavogadro/src/CMakeLists.txt, periodictable/src/CMakeLists.txt: Process and install periodictable i18n * i18n/libqperiodictable/libqperiodictable-ar.po, i18n/libqperiodictable/libqperiodictable-bg.po, i18n/libqperiodictable/libqperiodictable-ca.po, i18n/libqperiodictable/libqperiodictable-cs.po, i18n/libqperiodictable/libqperiodictable-da.po, i18n/libqperiodictable/libqperiodictable-de.po, i18n/libqperiodictable/libqperiodictable-el.po, i18n/libqperiodictable/libqperiodictable-en_CA.po, i18n/libqperiodictable/libqperiodictable-en_GB.po, i18n/libqperiodictable/libqperiodictable-es.po, i18n/libqperiodictable/libqperiodictable-fi.po, i18n/libqperiodictable/libqperiodictable-fr.po, i18n/libqperiodictable/libqperiodictable-he.po, i18n/libqperiodictable/libqperiodictable-hi.po, i18n/libqperiodictable/libqperiodictable-hu.po, i18n/libqperiodictable/libqperiodictable-id.po, i18n/libqperiodictable/libqperiodictable-it.po, i18n/libqperiodictable/libqperiodictable-ja.po, i18n/libqperiodictable/libqperiodictable-kn.po, i18n/libqperiodictable/libqperiodictable-ko.po, i18n/libqperiodictable/libqperiodictable-nb.po, i18n/libqperiodictable/libqperiodictable-nl.po, i18n/libqperiodictable/libqperiodictable-pl.po, i18n/libqperiodictable/libqperiodictable-pt.po, i18n/libqperiodictable/libqperiodictable-pt_BR.po, i18n/libqperiodictable/libqperiodictable-ru.po, i18n/libqperiodictable/libqperiodictable-sk.po, i18n/libqperiodictable/libqperiodictable-sv.po, i18n/libqperiodictable/libqperiodictable-tr.po, i18n/libqperiodictable/libqperiodictable-uk.po, i18n/libqperiodictable/libqperiodictable-zh_CN.po, i18n/libqperiodictable/libqperiodictable-zh_TW.po, scripts/clean-po.sh: tripped unnecessary strings from periodictable po's * i18n/libqperiodictable/libqperiodictable-ar.po, i18n/libqperiodictable/libqperiodictable-bg.po, i18n/libqperiodictable/libqperiodictable-ca.po, i18n/libqperiodictable/libqperiodictable-cs.po, i18n/libqperiodictable/libqperiodictable-da.po, i18n/libqperiodictable/libqperiodictable-de.po, i18n/libqperiodictable/libqperiodictable-el.po, i18n/libqperiodictable/libqperiodictable-en_CA.po, i18n/libqperiodictable/libqperiodictable-en_GB.po, i18n/libqperiodictable/libqperiodictable-es.po, i18n/libqperiodictable/libqperiodictable-fi.po, i18n/libqperiodictable/libqperiodictable-fr.po, i18n/libqperiodictable/libqperiodictable-he.po, i18n/libqperiodictable/libqperiodictable-hi.po, i18n/libqperiodictable/libqperiodictable-hu.po, i18n/libqperiodictable/libqperiodictable-id.po, i18n/libqperiodictable/libqperiodictable-it.po, i18n/libqperiodictable/libqperiodictable-ja.po, i18n/libqperiodictable/libqperiodictable-kn.po, i18n/libqperiodictable/libqperiodictable-ko.po, i18n/libqperiodictable/libqperiodictable-nb.po, i18n/libqperiodictable/libqperiodictable-nl.po, i18n/libqperiodictable/libqperiodictable-pl.po, i18n/libqperiodictable/libqperiodictable-pt.po, i18n/libqperiodictable/libqperiodictable-pt_BR.po, i18n/libqperiodictable/libqperiodictable-ru.po, i18n/libqperiodictable/libqperiodictable-sk.po, i18n/libqperiodictable/libqperiodictable-sv.po, i18n/libqperiodictable/libqperiodictable-tr.po, i18n/libqperiodictable/libqperiodictable-uk.po, i18n/libqperiodictable/libqperiodictable-zh_CN.po, i18n/libqperiodictable/libqperiodictable-zh_TW.po, i18n/libqperiodictable/libqperiodictable.pot: i18n for periodictable - taken from libavogadro, updated with script 2010-04-22 Konstantin Annulen Tokarev * avogadro/src/CMakeLists.txt, cmake/modules/PythonDeps.cmake, libavogadro/src/camera.cpp, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/glpainter_p.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/color.cpp, libavogadro/src/python/elementtranslator.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/periodictableview.cpp, libavogadro/src/python/qlist.cpp: Fixed compilation with Python and GLEW (gl.h must always go after glew.h) 2010-04-22 annulen * libavogadro/src/glwidget.h, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Removed unnecessary from glwidget.h * AvogadroCore.pc.cmake, AvogadroWidget.pc.cmake, CMakeLists.txt, avogadro.pc.cmake: Pkg-config files * CMakeLists.txt, avogadro.prf.in, avopkg.in: Use @prefix@ instead of $prefix$, use it in .prf too (for superpackage) 2010-04-22 annulen * i18n/libqperiodictable/libqperiodictable.pot, scripts/extract-periodictable-messages.sh: Added i18n files for periodictable * cmake/modules/AvogadroUse.cmake, cmake/modules/FindAvogadro.cmake: Use new modules for linking of 3rd party extensions * cmake/modules/PythonDeps.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt: Fixed build with Python 2010-04-21 annulen * libavogadro/src/engines/labelengine.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h, libavogadro/src/painter.h: Draw text only through painter * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: Fix headers * libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h: Inlines * libavogadro/src/CMakeLists.txt, periodictable/src/CMakeLists.txt: Separated libAvogadroCore; new header directories * CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectra/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Moved dependencies to correct places 2010-04-20 Konstantin Annulen Tokarev * CMakeLists.txt, avopkg.in: Set "$prefix$" as AVOPKG_PREFIX in bundle installation * CMakeLists.txt, libavogadro/src/engines/labelengine.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/spectra/abstract_ir.h, libavogadro/src/extensions/spectra/cd.h, libavogadro/src/extensions/spectra/dos.h, libavogadro/src/extensions/spectra/nmr.h, .../src/extensions/spectra/spectradialog.cpp, libavogadro/src/extensions/spectra/spectradialog.h, .../src/extensions/spectra/spectradialog.ui, libavogadro/src/extensions/spectra/spectratype.cpp, libavogadro/src/extensions/spectra/spectratype.h, libavogadro/src/extensions/spectra/uv.h, libavogadro/src/tools/drawtool.cpp, periodictable/src/CMakeLists.txt, periodictable/src/elementtranslator.h, periodictable/src/global.h, periodictable/src/periodictableexport.h, periodictable/src/periodictableview.h, periodictable/src/qperiodictable.cpp, periodictable/src/qperiodictable.h, plotwidget/src/CMakeLists.txt, plotwidget/src/global.h, plotwidget/src/plotaxis.h, plotwidget/src/plotexport.h, plotwidget/src/plotobject.h, plotwidget/src/plotpoint.h, plotwidget/src/plotwidget.h: Moved headers of plotwidget and periodictable to separate directories; preserved copies in /avogadro for compatibility 2010-04-20 annulen * periodictable/src/elementtranslator.h, periodictable/src/periodictableexport.h, periodictable/src/periodictableview.h, periodictable/src/qperiodictable.cpp: Replaced global.h in periodictable * plotwidget/src/plotaxis.h, plotwidget/src/plotexport.h, plotwidget/src/plotobject.h, plotwidget/src/plotwidget.h: Unbinded plotwidget from avogadro's global.h * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp: propextension: Fixed highlight in localized versions Made atom/bond/angle/... numbers the last fields in table headers 2010-04-20 annulen * libavogadro/src/extensions/spectra/abstract_ir.cpp, libavogadro/src/extensions/spectra/abstract_ir.h, libavogadro/src/extensions/spectra/ir.cpp, libavogadro/src/extensions/spectra/raman.cpp, libavogadro/src/extensions/spectra/spectratype.cpp, libavogadro/src/extensions/spectra/spectratype.h, libavogadro/src/extensions/spectra/tab_ir_raman.ui: Threshold for peal labels * libavogadro/src/extensions/spectra/spectradialog.cpp, libavogadro/src/extensions/spectra/spectradialog.h, libavogadro/src/extensions/spectra/spectradialog.ui: s/push_customize/push_advanced * libavogadro/src/extensions/spectra/abstract_ir.cpp, libavogadro/src/extensions/spectra/abstract_ir.h, libavogadro/src/extensions/spectra/ir.cpp, libavogadro/src/extensions/spectra/raman.cpp, libavogadro/src/extensions/spectra/spectratype.cpp: Refactored IR and Raman: merged line/gaussian generation, gaussian labeling 2010-04-19 annulen * plotwidget/CMakeLists.txt, plotwidget/src/CMakeLists.txt: CMake files for plotwidget 2010-04-18 annulen * CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/spectra/CMakeLists.txt, libavogadro/src/plotaxis.cpp, libavogadro/src/plotaxis.h, libavogadro/src/plotobject.cpp, libavogadro/src/plotobject.h, libavogadro/src/plotpoint.cpp, libavogadro/src/plotpoint.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h, plotwidget/src/plotaxis.cpp, plotwidget/src/plotaxis.h, plotwidget/src/plotobject.cpp, plotwidget/src/plotobject.h, plotwidget/src/plotpoint.cpp, plotwidget/src/plotpoint.h, plotwidget/src/plotwidget.cpp, plotwidget/src/plotwidget.h: Separated libQPlotWidget * libavogadro/src/extensions/spectra/ir.cpp, .../src/extensions/spectra/spectradialog.cpp, libavogadro/src/extensions/spectra/spectradialog.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: PlotWidget: somewhat improved placement of labels 2010-04-17 annulen * avopkg.in, doc/avopkg.1: Avopkg: query mode * avopkg.in, doc/avopkg.1: Avopkg: manpage, exit code * CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Used -fvisibility=hidden for Intel compiler with exception of forcefield-related files 2010-04-13 Marcus D. Hanwell * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt: Added link libraries necessary to link. The Avogadro library needs to link to the OpenGL library as it uses OpenGL symbols, also the shader extension must link to the GLEW library as functions from that library are used in it. These issues caused link failures on my Linux system at least. 2010-04-12 Geoff Hutchison * libavogadro/src/CMakeLists.txt, periodictable/src/elementdetail_p.cpp, periodictable/src/elementitem_p.cpp, periodictable/src/periodictablescene_p.cpp, periodictable/src/qperiodictable.cpp, periodictable/src/qperiodictable.h: Fixed compile errors on Mac. * libavogadro/src/extensions/insertpeptidedialog.ui, libavogadro/src/extensions/insertpeptideextension.cpp: Added 3-10 and pi helices 2010-04-06 annulen * scripts/cc, scripts/cxx: Added "compilers" for use gcc with ccache * CMakeLists.txt, cmake/modules/FindLinguist.cmake: Make possible choice of one language for i18n to be build and installed 2010-04-05 Konstantin Annulen Tokarev * CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, periodictable/src/CMakeLists.txt: Fixed superpackage build 2010-04-05 annulen * CMakeLists.txt, avogadro/src/CMakeLists.txt, cmake/modules/FindLinguist.cmake, libavogadro/src/CMakeLists.txt: FindLinguist: don't fail if not required 2010-04-04 annulen * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/extensions/surfaces/surfacedialog.cpp: Fixed broken connects on stratup * periodictable/src/CMakeLists.txt, periodictable/src/config.h.in, periodictable/src/qperiodictable.cpp, periodictable/src/qperiodictable.h: Added qperiodictable executable to the main build system 2010-04-03 annulen * libavogadro/src/extensions/spectra/ir.cpp, libavogadro/src/extensions/spectra/nmr.cpp, libavogadro/src/extensions/spectra/raman.cpp, libavogadro/src/extensions/spectra/spectratype.cpp, libavogadro/src/extensions/spectra/spectratype.h: Moved Gaussian widening algorithm to spectratype base class 2010-04-03 Konstantin Tokarev * libavogadro/qtiocompressor/qtiocompressor.cpp, libavogadro/qtiocompressor/qtiocompressor.h, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/gaussianfchk.h, libavogadro/src/extensions/molpro.cpp, libavogadro/src/extensions/molpro.h, libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/mopacaux.h, libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/slaterset.h, libavogadro/src/extensions/surfacedialog.cpp, libavogadro/src/extensions/surfacedialog.h, libavogadro/src/extensions/surfacedialog.ui, libavogadro/src/extensions/surfaceextension.cpp, libavogadro/src/extensions/surfaceextension.h, libavogadro/src/extensions/surfaces/CMakeLists.txt, libavogadro/src/extensions/surfaces/basisset.cpp, libavogadro/src/extensions/surfaces/basisset.h, .../src/extensions/surfaces/gaussianfchk.cpp, libavogadro/src/extensions/surfaces/gaussianfchk.h, libavogadro/src/extensions/surfaces/molpro.cpp, libavogadro/src/extensions/surfaces/molpro.h, libavogadro/src/extensions/surfaces/mopacaux.cpp, libavogadro/src/extensions/surfaces/mopacaux.h, .../surfaces/qtiocompressor/qtiocompressor.cpp, .../surfaces/qtiocompressor/qtiocompressor.h, libavogadro/src/extensions/surfaces/slaterset.cpp, libavogadro/src/extensions/surfaces/slaterset.h, .../src/extensions/surfaces/surfacedialog.cpp, .../src/extensions/surfaces/surfacedialog.h, .../src/extensions/surfaces/surfacedialog.ui, .../src/extensions/surfaces/surfaceextension.cpp, .../src/extensions/surfaces/surfaceextension.h, libavogadro/src/extensions/surfaces/vdwsurface.cpp, libavogadro/src/extensions/surfaces/vdwsurface.h, libavogadro/src/extensions/vdwsurface.cpp, libavogadro/src/extensions/vdwsurface.h: Separated surfaces, moved qtiocompressor there * libavogadro/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt, periodictable/src/CMakeLists.txt: Excessive linking * avogadro/gl2ps/COPYING.GL2PS, avogadro/gl2ps/COPYING.LGPL, avogadro/gl2ps/README.txt, avogadro/gl2ps/TODO.txt, avogadro/gl2ps/gl2ps.c, avogadro/gl2ps/gl2ps.h, avogadro/gl2ps/gl2ps.pdf, avogadro/gl2ps/gl2psTest.c, avogadro/gl2ps/gl2psTestSimple.c, avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, libavogadro/gl2ps/COPYING.GL2PS, libavogadro/gl2ps/COPYING.LGPL, libavogadro/gl2ps/README.txt, libavogadro/gl2ps/TODO.txt, libavogadro/gl2ps/gl2ps.c, libavogadro/gl2ps/gl2ps.h, libavogadro/gl2ps/gl2ps.pdf, libavogadro/gl2ps/gl2psTest.c, libavogadro/gl2ps/gl2psTestSimple.c, libavogadro/src/CMakeLists.txt: Moved gl2ps into libavogadro; some excessive linking fixes 2010-04-02 Konstantin Tokarev * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/quantuminput/CMakeLists.txt, libavogadro/src/extensions/spectra/CMakeLists.txt: Removed some excessive linking * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui: labelengine: restored font button, polished ui 2010-04-01 Konstantin Tokarev * .../extensions/quantuminput/gaussianinputdialog.ui, .../extensions/quantuminput/molproinputdialog.ui, .../extensions/quantuminput/mopacinputdialog.ui, .../extensions/quantuminput/nwcheminputdialog.ui, .../extensions/quantuminput/qcheminputdialog.ui: Killed translation of some basis set combos 2010-04-01 Konstantin Tokarev * libavogadro/src/colorbutton.cpp, libavogadro/src/colorbutton.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui: Improved labels settings * periodictable/examples/Makefile, periodictable/examples/main.cpp, periodictable/examples/qperiodictable.cpp, periodictable/examples/qperiodictable.h, periodictable/examples/qperiodictable.pro: Improved periodic table (standalone) 2010-03-31 Konstantin Tokarev * avogadro.prf.in, cmake/modules/AvogadroUse.cmake: Integrated avopkg into build system of 3rd party plugin (targets manifest, package, install) * periodictable/examples/Makefile, periodictable/examples/main.cpp, periodictable/examples/periodictable: Standalone periodic table (prototype) * examples/c++/CMakeLists.txt, examples/c++/templateextension.cpp, examples/c++/templateextension.h, examples/c++/templateextension.pro, examples/python/extensiontemplate.py, examples/python/proteinextension.py, examples/python/standalone.py, examples/python/tooltemplate.py, libavogadro/examples/c++/CMakeLists.txt, libavogadro/examples/c++/templateextension.cpp, libavogadro/examples/c++/templateextension.h, libavogadro/examples/c++/templateextension.pro, libavogadro/examples/python/extensiontemplate.py, libavogadro/examples/python/proteinextension.py, libavogadro/examples/python/standalone.py, libavogadro/examples/python/tooltemplate.py: C++ and Python examples belong to libavogadro => moved to its directory * CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/elementdetail_p.cpp, libavogadro/src/elementdetail_p.h, libavogadro/src/elementitem_p.cpp, libavogadro/src/elementitem_p.h, libavogadro/src/elementtranslator.cpp, libavogadro/src/elementtranslator.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/periodictablescene_p.cpp, libavogadro/src/periodictablescene_p.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h, libavogadro/src/tools/CMakeLists.txt, periodictable/CMakeLists.txt, periodictable/src/CMakeLists.txt, periodictable/src/elementdetail_p.cpp, periodictable/src/elementdetail_p.h, periodictable/src/elementitem_p.cpp, periodictable/src/elementitem_p.h, periodictable/src/elementtranslator.cpp, periodictable/src/elementtranslator.h, periodictable/src/periodictablescene_p.cpp, periodictable/src/periodictablescene_p.h, periodictable/src/periodictableview.cpp, periodictable/src/periodictableview.h: Separated periodic table into library (libperiodictable) 2010-03-29 Geoff Hutchison * i18n/avogadro/avogadro-af.po, i18n/avogadro/avogadro-ar.po, i18n/avogadro/avogadro-bg.po, i18n/avogadro/avogadro-ca.po, i18n/avogadro/avogadro-cs.po, i18n/avogadro/avogadro-da.po, i18n/avogadro/avogadro-de.po, i18n/avogadro/avogadro-el.po, i18n/avogadro/avogadro-en_CA.po, i18n/avogadro/avogadro-en_GB.po, i18n/avogadro/avogadro-es.po, i18n/avogadro/avogadro-fi.po, i18n/avogadro/avogadro-fr.po, i18n/avogadro/avogadro-he.po, i18n/avogadro/avogadro-hr.po, i18n/avogadro/avogadro-hu.po, i18n/avogadro/avogadro-id.po, i18n/avogadro/avogadro-it.po, i18n/avogadro/avogadro-ja.po, i18n/avogadro/avogadro-kn.po, i18n/avogadro/avogadro-ko.po, i18n/avogadro/avogadro-nb.po, i18n/avogadro/avogadro-nl.po, i18n/avogadro/avogadro-pl.po, i18n/avogadro/avogadro-pt.po, i18n/avogadro/avogadro-pt_BR.po, i18n/avogadro/avogadro-ru.po, i18n/avogadro/avogadro-sk.po, i18n/avogadro/avogadro-sv.po, i18n/avogadro/avogadro-tr.po, i18n/avogadro/avogadro-uk.po, i18n/avogadro/avogadro-zh_CN.po, i18n/avogadro/avogadro-zh_TW.po, i18n/avogadro/avogadro.pot, i18n/libavogadro/libavogadro-ar.po, i18n/libavogadro/libavogadro-bg.po, i18n/libavogadro/libavogadro-ca.po, i18n/libavogadro/libavogadro-cs.po, i18n/libavogadro/libavogadro-da.po, i18n/libavogadro/libavogadro-de.po, i18n/libavogadro/libavogadro-el.po, i18n/libavogadro/libavogadro-en_CA.po, i18n/libavogadro/libavogadro-en_GB.po, i18n/libavogadro/libavogadro-es.po, i18n/libavogadro/libavogadro-fi.po, i18n/libavogadro/libavogadro-fr.po, i18n/libavogadro/libavogadro-he.po, i18n/libavogadro/libavogadro-hi.po, i18n/libavogadro/libavogadro-hu.po, i18n/libavogadro/libavogadro-id.po, i18n/libavogadro/libavogadro-it.po, i18n/libavogadro/libavogadro-ja.po, i18n/libavogadro/libavogadro-kn.po, i18n/libavogadro/libavogadro-ko.po, i18n/libavogadro/libavogadro-nb.po, i18n/libavogadro/libavogadro-nl.po, i18n/libavogadro/libavogadro-pl.po, i18n/libavogadro/libavogadro-pt.po, i18n/libavogadro/libavogadro-pt_BR.po, i18n/libavogadro/libavogadro-ru.po, i18n/libavogadro/libavogadro-sk.po, i18n/libavogadro/libavogadro-sv.po, i18n/libavogadro/libavogadro-tr.po, i18n/libavogadro/libavogadro-uk.po, i18n/libavogadro/libavogadro-zh_CN.po, i18n/libavogadro/libavogadro-zh_TW.po, i18n/libavogadro/libavogadro.pot: Updated translation templates for trunk/Launchpad. * libavogadro/src/colors/smartscolor.cpp, libavogadro/src/colors/smartscolor.h: Implemented arbitrary match coloring and custom color settings. * libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/smartscolor.cpp, libavogadro/src/colors/smartscolor.h: Color by SMARTS -- currently uses [#7] as static example string. Just needs an options widget. 2010-03-28 Konstantin Tokarev * CMakeLists.txt, avogadro/src/CMakeLists.txt, libavogadro/src/CMakeLists.txt: Made linguis dependency optional (only show warning) * scripts/installer/installer_languages/russian.nsh, scripts/installer/setup.nsi: Russian for NSIS * examples/c++/CMakeLists.txt, examples/c++/templateextension.pro: Added CMake template project * examples/c++/templateextension.cpp, examples/c++/templateextension.h, examples/c++/templateextension.pro: Fixed c++ template for extension, added QMake project * examples/c++/templateextension.cpp, examples/c++/templateextension.h, examples/python/extensiontemplate.py, examples/python/proteinextension.py, examples/python/standalone.py, examples/python/tooltemplate.py, libavogadro/src/extensions/templateextension.cpp, libavogadro/src/extensions/templateextension.h, python/extensiontemplate.py, python/proteinextension.py, python/standalone.py, python/tooltemplate.py: Reorganized examples for python and c++ 2010-03-27 Konstantin Tokarev * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/daltoninputdialog.cpp, libavogadro/src/extensions/daltoninputdialog.h, libavogadro/src/extensions/daltoninputdialog.ui, .../src/extensions/gamessefpmatchdialog.cpp, libavogadro/src/extensions/gamessefpmatchdialog.h, libavogadro/src/extensions/gamessefpmatchdialog.ui, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gamesshighlighter.cpp, libavogadro/src/extensions/gamesshighlighter.h, libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdata.h, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gamessinputdialog.h, libavogadro/src/extensions/gamessinputdialog.ui, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui, libavogadro/src/extensions/inputfileextension.cpp, libavogadro/src/extensions/inputfileextension.h, libavogadro/src/extensions/molproinputdialog.cpp, libavogadro/src/extensions/molproinputdialog.h, libavogadro/src/extensions/molproinputdialog.ui, libavogadro/src/extensions/mopacinputdialog.cpp, libavogadro/src/extensions/mopacinputdialog.h, libavogadro/src/extensions/mopacinputdialog.ui, libavogadro/src/extensions/nwcheminputdialog.cpp, libavogadro/src/extensions/nwcheminputdialog.h, libavogadro/src/extensions/nwcheminputdialog.ui, libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/qcheminputdialog.h, libavogadro/src/extensions/qcheminputdialog.ui, .../src/extensions/quantuminput/CMakeLists.txt, .../extensions/quantuminput/daltoninputdialog.cpp, .../extensions/quantuminput/daltoninputdialog.h, .../extensions/quantuminput/daltoninputdialog.ui, .../quantuminput/gamessefpmatchdialog.cpp, .../extensions/quantuminput/gamessefpmatchdialog.h, .../quantuminput/gamessefpmatchdialog.ui, .../extensions/quantuminput/gamessextension.cpp, .../src/extensions/quantuminput/gamessextension.h, .../extensions/quantuminput/gamesshighlighter.cpp, .../extensions/quantuminput/gamesshighlighter.h, .../extensions/quantuminput/gamessinputdata.cpp, .../src/extensions/quantuminput/gamessinputdata.h, .../extensions/quantuminput/gamessinputdialog.cpp, .../extensions/quantuminput/gamessinputdialog.h, .../extensions/quantuminput/gamessinputdialog.ui, .../quantuminput/gaussianinputdialog.cpp, .../extensions/quantuminput/gaussianinputdialog.h, .../extensions/quantuminput/gaussianinputdialog.ui, .../extensions/quantuminput/inputfileextension.cpp, .../extensions/quantuminput/inputfileextension.h, .../extensions/quantuminput/molproinputdialog.cpp, .../extensions/quantuminput/molproinputdialog.h, .../extensions/quantuminput/molproinputdialog.ui, .../extensions/quantuminput/mopacinputdialog.cpp, .../src/extensions/quantuminput/mopacinputdialog.h, .../extensions/quantuminput/mopacinputdialog.ui, .../extensions/quantuminput/nwcheminputdialog.cpp, .../extensions/quantuminput/nwcheminputdialog.h, .../extensions/quantuminput/nwcheminputdialog.ui, .../extensions/quantuminput/qcheminputdialog.cpp, .../src/extensions/quantuminput/qcheminputdialog.h, .../extensions/quantuminput/qcheminputdialog.ui: Moved quantum input extensions to subdirectory 2010-03-27 Konstantin Tokarev * libavogadro/src/extensions/spectra/CMakeLists.txt, libavogadro/src/extensions/spectra/abstract_ir.cpp, libavogadro/src/extensions/spectra/abstract_ir.h, libavogadro/src/extensions/spectra/cd.cpp, libavogadro/src/extensions/spectra/cd.h, libavogadro/src/extensions/spectra/dos.cpp, libavogadro/src/extensions/spectra/dos.h, libavogadro/src/extensions/spectra/ir.cpp, libavogadro/src/extensions/spectra/ir.h, libavogadro/src/extensions/spectra/nmr.cpp, libavogadro/src/extensions/spectra/nmr.h, libavogadro/src/extensions/spectra/raman.cpp, libavogadro/src/extensions/spectra/raman.h, .../extensions/spectra/spectratype_abstract_ir.cpp, .../extensions/spectra/spectratype_abstract_ir.h, .../src/extensions/spectra/spectratype_cd.cpp, .../src/extensions/spectra/spectratype_cd.h, .../src/extensions/spectra/spectratype_dos.cpp, .../src/extensions/spectra/spectratype_dos.h, .../src/extensions/spectra/spectratype_ir.cpp, .../src/extensions/spectra/spectratype_ir.h, .../src/extensions/spectra/spectratype_nmr.cpp, .../src/extensions/spectra/spectratype_nmr.h, .../src/extensions/spectra/spectratype_raman.cpp, .../src/extensions/spectra/spectratype_raman.h, .../src/extensions/spectra/spectratype_uv.cpp, .../src/extensions/spectra/spectratype_uv.h, libavogadro/src/extensions/spectra/uv.cpp, libavogadro/src/extensions/spectra/uv.h: Refactor spectra: more file renames (keep it simple) * libavogadro/src/extensions/spectra/CMakeLists.txt, .../src/extensions/spectra/spectratab_ir_raman.ui, libavogadro/src/extensions/spectra/spectratabcd.ui, .../src/extensions/spectra/spectratabdos.ui, .../src/extensions/spectra/spectratabnmr.ui, libavogadro/src/extensions/spectra/spectratabuv.ui, .../extensions/spectra/spectratype_abstract_ir.h, .../src/extensions/spectra/spectratype_cd.h, .../src/extensions/spectra/spectratype_dos.h, .../src/extensions/spectra/spectratype_nmr.h, .../src/extensions/spectra/spectratype_uv.h, libavogadro/src/extensions/spectra/tab_cd.ui, libavogadro/src/extensions/spectra/tab_dos.ui, libavogadro/src/extensions/spectra/tab_ir_raman.ui, libavogadro/src/extensions/spectra/tab_nmr.ui, libavogadro/src/extensions/spectra/tab_uv.ui: Refactor spectra: renamed uis to match class names and make them shorter * libavogadro/src/extensions/spectra/CMakeLists.txt, libavogadro/src/extensions/spectra/spectratype.cpp, libavogadro/src/extensions/spectra/spectratype.h, .../extensions/spectra/spectratype_abstract_ir.cpp, .../extensions/spectra/spectratype_abstract_ir.h, .../src/extensions/spectra/spectratype_ir.cpp, .../src/extensions/spectra/spectratype_ir.h, .../src/extensions/spectra/spectratype_raman.h: Refactorization of spectraextension 2010-03-26 Konstantin Tokarev * avopkg.in, doc/avopkg.1: Avopkg: check arch and OS, add this information to manifest automatically 2010-03-26 Konstantin Tokarev * .../src/extensions/spectra/spectradialog.cpp, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Jailed spectra plot in default limits (containig all data points) 2010-03-23 Konstantin Tokarev * libavogadro/src/extensions/spectra/spectratype_ir.cpp, libavogadro/src/extensions/spectra/spectratype_raman.cpp: IR&Raman limits, 0.97 * libavogadro/src/extensions/spectra/spectratype_ir.cpp, libavogadro/src/extensions/spectra/spectratype_raman.cpp: Get rid of 0.97 multiplier, changed default limits for IR and Raman (plot will enlarge if they are too small) * .../src/extensions/spectra/spectradialog.cpp, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Fit default limits of spectra plot to data 2010-03-20 Konstantin Tokarev * libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Right click outside molecule clears selection 2010-03-20 Konstantin Tokarev * .../src/extensions/spectra/spectradialog.cpp, libavogadro/src/extensions/spectra/spectradialog.h, .../src/extensions/spectra/spectradialog.ui: Show coordinates of PlotWidget in spectra dialog * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui: Enhanced label settings dialog 2010-03-19 Konstantin Annulen Tokarev * libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/extensions/spectra/spectratype_ir.cpp: Fixed building with Intel Compiler 2010-03-19 Konstantin Tokarev * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added new text renderer 2010-03-18 Geoff Hutchison * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdysettingswidget.ui: Change default of "atom radius" to be consistent with prev. releases. Users can change to covalent, but it should be their choice. 2010-03-16 Konstantin Tokarev * Doxyfile, README, doc/CMakeLists.txt, doc/avogadro.1, doc/avopkg.1, doc/mainpage.dox: Updated docs, added man pages 2010-03-10 Geoff Hutchison * i18n/avogadro/avogadro-af.po, i18n/avogadro/avogadro-ar.po, i18n/avogadro/avogadro-bg.po, i18n/avogadro/avogadro-ca.po, i18n/avogadro/avogadro-cs.po, i18n/avogadro/avogadro-da.po, i18n/avogadro/avogadro-de.po, i18n/avogadro/avogadro-el.po, i18n/avogadro/avogadro-en_CA.po, i18n/avogadro/avogadro-en_GB.po, i18n/avogadro/avogadro-es.po, i18n/avogadro/avogadro-fi.po, i18n/avogadro/avogadro-fr.po, i18n/avogadro/avogadro-he.po, i18n/avogadro/avogadro-hr.po, i18n/avogadro/avogadro-hu.po, i18n/avogadro/avogadro-id.po, i18n/avogadro/avogadro-it.po, i18n/avogadro/avogadro-ja.po, i18n/avogadro/avogadro-kn.po, i18n/avogadro/avogadro-ko.po, i18n/avogadro/avogadro-nb.po, i18n/avogadro/avogadro-nl.po, i18n/avogadro/avogadro-pl.po, i18n/avogadro/avogadro-pt.po, i18n/avogadro/avogadro-pt_BR.po, i18n/avogadro/avogadro-ru.po, i18n/avogadro/avogadro-sk.po, i18n/avogadro/avogadro-sv.po, i18n/avogadro/avogadro-tr.po, i18n/avogadro/avogadro-uk.po, i18n/avogadro/avogadro-zh_CN.po, i18n/avogadro/avogadro-zh_TW.po, i18n/avogadro/avogadro.pot, i18n/libavogadro/libavogadro-ar.po, i18n/libavogadro/libavogadro-bg.po, i18n/libavogadro/libavogadro-ca.po, i18n/libavogadro/libavogadro-cs.po, i18n/libavogadro/libavogadro-da.po, i18n/libavogadro/libavogadro-de.po, i18n/libavogadro/libavogadro-el.po, i18n/libavogadro/libavogadro-en_CA.po, i18n/libavogadro/libavogadro-en_GB.po, i18n/libavogadro/libavogadro-es.po, i18n/libavogadro/libavogadro-fi.po, i18n/libavogadro/libavogadro-fr.po, i18n/libavogadro/libavogadro-he.po, i18n/libavogadro/libavogadro-hi.po, i18n/libavogadro/libavogadro-hu.po, i18n/libavogadro/libavogadro-id.po, i18n/libavogadro/libavogadro-it.po, i18n/libavogadro/libavogadro-ja.po, i18n/libavogadro/libavogadro-kn.po, i18n/libavogadro/libavogadro-ko.po, i18n/libavogadro/libavogadro-nb.po, i18n/libavogadro/libavogadro-nl.po, i18n/libavogadro/libavogadro-pl.po, i18n/libavogadro/libavogadro-pt.po, i18n/libavogadro/libavogadro-pt_BR.po, i18n/libavogadro/libavogadro-ru.po, i18n/libavogadro/libavogadro-sk.po, i18n/libavogadro/libavogadro-sv.po, i18n/libavogadro/libavogadro-tr.po, i18n/libavogadro/libavogadro-uk.po, i18n/libavogadro/libavogadro-zh_CN.po, i18n/libavogadro/libavogadro-zh_TW.po, i18n/libavogadro/libavogadro.pot: Bumped translations to force Launchpad re-import. 2010-03-10 Tim Vandermeersch * cmake/modules/FindNumpy.cmake, cmake/modules/PythonDeps.cmake: Another update to cmake files for numpy (wasn't working before) * cmake/modules/FindNumpy.cmake, cmake/modules/PythonDeps.cmake: Fix bug where cmake incorrectly detects numpy when it is not there. (Fixes: #2886558) 2010-03-09 Geoff Hutchison * avogadro/src/CMakeLists.txt, i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-da.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-he.po, i18n/avogadro-hu.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/avogadro/avogadro-af.po, i18n/avogadro/avogadro-ar.po, i18n/avogadro/avogadro-bg.po, i18n/avogadro/avogadro-ca.po, i18n/avogadro/avogadro-cs.po, i18n/avogadro/avogadro-da.po, i18n/avogadro/avogadro-de.po, i18n/avogadro/avogadro-el.po, i18n/avogadro/avogadro-en_CA.po, i18n/avogadro/avogadro-en_GB.po, i18n/avogadro/avogadro-es.po, i18n/avogadro/avogadro-fi.po, i18n/avogadro/avogadro-fr.po, i18n/avogadro/avogadro-he.po, i18n/avogadro/avogadro-hr.po, i18n/avogadro/avogadro-hu.po, i18n/avogadro/avogadro-id.po, i18n/avogadro/avogadro-it.po, i18n/avogadro/avogadro-ja.po, i18n/avogadro/avogadro-kn.po, i18n/avogadro/avogadro-ko.po, i18n/avogadro/avogadro-nb.po, i18n/avogadro/avogadro-nl.po, i18n/avogadro/avogadro-pl.po, i18n/avogadro/avogadro-pt.po, i18n/avogadro/avogadro-pt_BR.po, i18n/avogadro/avogadro-ru.po, i18n/avogadro/avogadro-sk.po, i18n/avogadro/avogadro-sv.po, i18n/avogadro/avogadro-tr.po, i18n/avogadro/avogadro-uk.po, i18n/avogadro/avogadro-zh_CN.po, i18n/avogadro/avogadro-zh_TW.po, i18n/avogadro/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-da.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-he.po, i18n/libavogadro-hi.po, i18n/libavogadro-hu.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot, i18n/libavogadro/libavogadro-ar.po, i18n/libavogadro/libavogadro-bg.po, i18n/libavogadro/libavogadro-ca.po, i18n/libavogadro/libavogadro-cs.po, i18n/libavogadro/libavogadro-da.po, i18n/libavogadro/libavogadro-de.po, i18n/libavogadro/libavogadro-el.po, i18n/libavogadro/libavogadro-en_CA.po, i18n/libavogadro/libavogadro-en_GB.po, i18n/libavogadro/libavogadro-es.po, i18n/libavogadro/libavogadro-fi.po, i18n/libavogadro/libavogadro-fr.po, i18n/libavogadro/libavogadro-he.po, i18n/libavogadro/libavogadro-hi.po, i18n/libavogadro/libavogadro-hu.po, i18n/libavogadro/libavogadro-id.po, i18n/libavogadro/libavogadro-it.po, i18n/libavogadro/libavogadro-ja.po, i18n/libavogadro/libavogadro-kn.po, i18n/libavogadro/libavogadro-ko.po, i18n/libavogadro/libavogadro-nb.po, i18n/libavogadro/libavogadro-nl.po, i18n/libavogadro/libavogadro-pl.po, i18n/libavogadro/libavogadro-pt.po, i18n/libavogadro/libavogadro-pt_BR.po, i18n/libavogadro/libavogadro-ru.po, i18n/libavogadro/libavogadro-sk.po, i18n/libavogadro/libavogadro-sv.po, i18n/libavogadro/libavogadro-tr.po, i18n/libavogadro/libavogadro-uk.po, i18n/libavogadro/libavogadro-zh_CN.po, i18n/libavogadro/libavogadro-zh_TW.po, i18n/libavogadro/libavogadro.pot, libavogadro/src/CMakeLists.txt, scripts/extract-application-messages.sh, scripts/extract-library-messages.sh: Moved translations to allow automatic import of templates and translations from Git into Launchpad. * avogadro/gl2ps/README.txt, avogadro/gl2ps/TODO, avogadro/gl2ps/TODO.txt, avogadro/gl2ps/gl2ps.c, avogadro/gl2ps/gl2ps.h, avogadro/gl2ps/gl2ps.pdf, avogadro/gl2ps/gl2psTest.c, avogadro/gl2ps/gl2psTestSimple.c: Import of gl2ps 1.3.5 2010-03-07 Konstantin Tokarev * CMakeLists.txt, avogadro.prf.in: Added avogadro.prf generation and installation 2010-03-06 Konstantin Tokarev * CMakeLists.txt, avopkg.in: Added avopkg tool 2010-03-03 David C. Lonie * libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/extensions/unitcellextension.cpp: Fixes to accomodate new OBUnitCell behavior 2010-03-03 Konstantin Tokarev * .../src/extensions/spectra/vibrationextension.cpp, .../src/extensions/spectra/vibrationextension.h, .../src/extensions/spectra/vibrationwidget.cpp, .../src/extensions/spectra/vibrationwidget.h, .../src/extensions/spectra/vibrationwidget.ui: Added normalization of vibrational displacements 2010-03-02 Konstantin Tokarev * .../src/extensions/spectra/vibrationextension.cpp, .../src/extensions/spectra/vibrationwidget.cpp, .../src/extensions/spectra/vibrationwidget.h, .../src/extensions/spectra/vibrationwidget.ui: Added filter to vibration widget; stop animation if dock closed 2010-02-28 Konstantin Tokarev * libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/extensions/unitcellparamdialog.cpp, libavogadro/src/extensions/unitcellparamdialog.h, libavogadro/src/extensions/unitcellparamdialog.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Change color of unit cell (feature request #...) * libavogadro/src/extensions/spectra/vibrationwidget.cpp, libavogadro/src/extensions/spectra/vibrationwidget.ui: Added icons to vibrationwidget, fixed pause/continue button state on stop 2010-02-26 Konstantin Tokarev * .../src/extensions/spectra/vibrationextension.cpp, libavogadro/src/extensions/spectra/vibrationextension.h: Try to save position of dock, seems not to work, but doesn't break anything 2010-02-26 Konstantin Tokarev * libavogadro/src/extensions/cartesianeditor.ui, libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h: Added sorting to Cartesian Editor * libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h: Read&write settings of CartesianEnditor 2010-02-25 Konstantin Tokarev * i18n/avogadro-ru.po, i18n/libavogadro-ru.po: Russian * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsdysettingswidget.ui: Added choice of Covalen/VdW radii 2010-02-24 Konstantin Tokarev * i18n/avogadro-ru.po, i18n/libavogadro-ru.po: Russian * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp: Fixed angles and torsions highlight 2010-02-23 Konstantin Tokarev * avogadro/src/mainwindow.cpp, libavogadro/src/dockextension.cpp, libavogadro/src/dockextension.h, libavogadro/src/extensions/spectra/vibrationextension.cpp: Respect preferredDockArea in dock placement 2010-02-22 Tim Vandermeersch * avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/pythonextension_p.cpp, libavogadro/src/pythonextension_p.h: * avogadro/src/mainwindow.cpp: Call GLWidget::setExtensions(...) at the appropriate points. * libavogadro/src/glwidget.[h/cpp]: Add GLWidget::setExtensions(...). Call PythonExtension::paint(...) for all python extensions. * libavogadro/src/pythonextension_p.[h/cpp]: Add PythonExtension::paint(...). In future versions (when we break ABI) we can add the virtual Extension::paint function. 2010-02-22 Konstantin Tokarev * .../src/extensions/spectra/vibrationdialog.ui, .../src/extensions/spectra/vibrationwidget.ui: Small change in vibration UI * libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/pythonterminal.h: Ported PythonTerminal to DockExtension * libavogadro/src/CMakeLists.txt, libavogadro/src/dockextension.cpp, libavogadro/src/dockextension.h, libavogadro/src/extensions/spectra/CMakeLists.txt, .../src/extensions/spectra/vibrationextension.cpp, .../src/extensions/spectra/vibrationextension.h: Added DockExtension class and ported VibrationExtension to it (build in fresh directory!) 2010-02-21 Konstantin Tokarev * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectra/CMakeLists.txt, .../src/extensions/spectra/spectradialog.cpp, libavogadro/src/extensions/spectra/spectradialog.h, .../src/extensions/spectra/spectradialog.ui, .../src/extensions/spectra/spectraextension.cpp, .../src/extensions/spectra/spectraextension.h, .../src/extensions/spectra/spectratab_ir_raman.ui, libavogadro/src/extensions/spectra/spectratabcd.ui, .../src/extensions/spectra/spectratabdos.ui, .../src/extensions/spectra/spectratabnmr.ui, libavogadro/src/extensions/spectra/spectratabuv.ui, libavogadro/src/extensions/spectra/spectratype.cpp, libavogadro/src/extensions/spectra/spectratype.h, .../src/extensions/spectra/spectratype_cd.cpp, .../src/extensions/spectra/spectratype_cd.h, .../src/extensions/spectra/spectratype_dos.cpp, .../src/extensions/spectra/spectratype_dos.h, .../src/extensions/spectra/spectratype_ir.cpp, .../src/extensions/spectra/spectratype_ir.h, .../src/extensions/spectra/spectratype_nmr.cpp, .../src/extensions/spectra/spectratype_nmr.h, .../src/extensions/spectra/spectratype_raman.cpp, .../src/extensions/spectra/spectratype_raman.h, .../src/extensions/spectra/spectratype_uv.cpp, .../src/extensions/spectra/spectratype_uv.h, .../src/extensions/spectra/vibrationdialog.ui, .../src/extensions/spectra/vibrationextension.cpp, .../src/extensions/spectra/vibrationextension.h, .../src/extensions/spectra/vibrationwidget.cpp, .../src/extensions/spectra/vibrationwidget.h, .../src/extensions/spectra/vibrationwidget.ui, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui, libavogadro/src/extensions/spectraextension.cpp, libavogadro/src/extensions/spectraextension.h, libavogadro/src/extensions/spectratab_ir_raman.ui, libavogadro/src/extensions/spectratabcd.ui, libavogadro/src/extensions/spectratabdos.ui, libavogadro/src/extensions/spectratabnmr.ui, libavogadro/src/extensions/spectratabuv.ui, libavogadro/src/extensions/spectratype.cpp, libavogadro/src/extensions/spectratype.h, libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_cd.h, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h, libavogadro/src/extensions/spectratype_nmr.cpp, libavogadro/src/extensions/spectratype_nmr.h, libavogadro/src/extensions/spectratype_raman.cpp, libavogadro/src/extensions/spectratype_raman.h, libavogadro/src/extensions/spectratype_uv.cpp, libavogadro/src/extensions/spectratype_uv.h, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/vibrationwidget.cpp, libavogadro/src/extensions/vibrationwidget.h, libavogadro/src/extensions/vibrationwidget.ui: Moved spectraextension and vibrationextension to subdirectory 2010-02-20 Konstantin Tokarev * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/vibrationwidget.cpp, libavogadro/src/extensions/vibrationwidget.h: changed filenames vibrationdialog.* to vibrationwidget.* * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp: Blocked old CartesianType code in propextension * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h: Fixed impossibility to run one vibration animation twice; Pause button fix 2010-02-19 Konstantin Tokarev * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h: Show spectra connections 2010-02-17 Konstantin Tokarev * libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h: Removed Vibrations from menu since now it's dock * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectratype_cd.h, libavogadro/src/extensions/spectratype_dos.h, libavogadro/src/extensions/spectratype_raman.h, libavogadro/src/extensions/spectratype_uv.h: Fixed build on Debian 5 2010-02-17 Konstantin Tokarev * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/vibrationwidget.ui: Fixed segfault on Forces; added Pause button 2010-02-15 Marcus D. Hanwell * CMakeLists.txt, CTestConfig.cmake, avogadro/src/CMakeLists.txt, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt, libavogadro/tests/CMakeLists.txt: Changes to the build system to support subprojects. These changes add labels to the source, targets and tests. They also add some custom targets named after the subprojects for the engines, tools, extensions and colors. You can now type 'make engines' in order to build all engines. The add plugin function takes a couple of extra (optional) variables to accomplish this. 2010-02-15 Konstantin Tokarev * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/vibrationwidget.ui: Made vibrationDock displaying correctly (may crash!) 2010-02-14 Konstantin Tokarev * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp: Fixed couple of segfaults in propextension * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp: Improved look&feel of Properties Extension 2010-02-13 Konstantin Tokarev * libavogadro/src/extensions/spectratabir.ui, libavogadro/src/extensions/spectratabraman.ui, libavogadro/src/extensions/spectratype_raman.cpp: Removed unnecessary uis * libavogadro/src/extensions/spectratab_ir_raman.ui, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h, libavogadro/src/extensions/spectratype_raman.cpp: Small improvements in IR and Raman 2010-02-12 Konstantin Tokarev * libavogadro/src/extensions/spectratab_ir_raman.ui, libavogadro/src/extensions/spectratype_raman.cpp, libavogadro/src/extensions/spectratype_raman.h: Calculation of Raman intensities (not tested) 2010-02-11 Konstantin Tokarev * libavogadro/src/extensions/spectratype_ir.h, libavogadro/src/extensions/spectratype_raman.cpp, libavogadro/src/extensions/spectratype_raman.h: Some code cleanups * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectratab_ir_raman.ui, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h, libavogadro/src/extensions/spectratype_raman.cpp, libavogadro/src/extensions/spectratype_raman.h: Derived IR and Raman from AbstractIRSpectra * libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectratype_uv.cpp: Some code cleanups * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/vibrationwidget.ui: Transformed VibrationalDialog into dock 2010-02-09 David Lonie * libavogadro/src/extensions/cartesianeditor.ui, libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h: Added a coordinate only output, e.g. for VASP. * libavogadro/src/extensions/cartesianeditor.ui, libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h: Add fractional editor to coordinate editor, clean up indention. 2010-01-31 Konstantin Tokarev * libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h: Eleminated possibility of segfault in CartesianExtension 2010-02-10 Konstantin Tokarev * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h: Automatic change of current spectrum if current tab has changed * libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h: Replaced 'noscale' with 'orig' 2010-02-09 Konstantin Tokarev * libavogadro/src/extensions/spectratabraman.ui, libavogadro/src/extensions/spectratype_raman.cpp, libavogadro/src/extensions/spectratype_raman.h: Added new UI elements to Raman tab * libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h: dataTable displays scaled fequencies 2010-02-07 Konstantin Tokarev * libavogadro/src/extensions/spectratype.h, libavogadro/src/extensions/spectratype_dos.h: Disabled updateDataTable for DOS spectra * libavogadro/src/extensions/spectratabir.ui, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h: Interactive sliders for scale and Gaussian width for IR; relative scaling 2010-02-05 Konstantin Tokarev * libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h: Added scale(double) function * libavogadro/src/extensions/spectratype.cpp, libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_cd.h, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h, libavogadro/src/extensions/spectratype_raman.cpp, libavogadro/src/extensions/spectratype_uv.cpp, libavogadro/src/extensions/spectratype_uv.h: Some code cleanups * i18n/avogadro-ru.po, i18n/libavogadro-ru.po: Russian translation * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot: Updated po files 2010-02-04 Константин Токарев * libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_raman.cpp: Fix for scaling of gaussians in IR and Raman * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectratype_raman.h: Fixed build with OB 2.2.3 2010-02-04 Konstantin Tokarev * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.ui: Improved look of vibrationdialog * libavogadro/src/extensions/spectratype.cpp, libavogadro/src/extensions/spectratype.h, libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_cd.h, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h, libavogadro/src/extensions/spectratype_nmr.cpp, libavogadro/src/extensions/spectratype_nmr.h, libavogadro/src/extensions/spectratype_raman.cpp, libavogadro/src/extensions/spectratype_raman.h, libavogadro/src/extensions/spectratype_uv.cpp, libavogadro/src/extensions/spectratype_uv.h: Refactorization of SpectraType and subclasses * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui, libavogadro/src/extensions/spectratabraman.ui: Raman support and data table in spectradialog 2010-02-02 David C. Lonie * testfiles/VASP-DOS/CONTCAR, testfiles/VASP-DOS/DOSCAR, testfiles/VASP-DOS/POTCAR: Added VASP test directory with DOS info to testfiles/ -- Open CONTCAR in avogadro to load * testfiles/cdspectrum, testfiles/spectrum: Added Turbomol CD and UV output to testfiles (must be loaded manually in the Spectra extension. 2010-01-31 Konstantin Tokarev * libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h: Eleminated possibility of segfault in CartesianExtension * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectratabraman.ui, libavogadro/src/extensions/spectratype_raman.cpp, libavogadro/src/extensions/spectratype_raman.h: Initial support for Raman spectra * libavogadro/src/engines/labelengine.cpp, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectratype.cpp, libavogadro/src/extensions/spectratype.h, libavogadro/src/extensions/spectratype_dos.h, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h, libavogadro/src/extensions/spectratype_nmr.cpp, libavogadro/src/extensions/spectratype_nmr.h, libavogadro/src/extensions/spectratype_uv.h, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h: Added pathes to some Qt includes (following KDE coding style) 2010-01-29 Konstantin Tokarev * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.ui: Display Raman activities in VibrationDialog 2010-01-26 David C. Lonie * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/cartesianextension.cpp: Added the new cartesian editor back in to dlonie/master 2010-01-19 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-da.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-he.po, i18n/avogadro-hu.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-da.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-he.po, i18n/libavogadro-hi.po, i18n/libavogadro-hu.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot: Update with latest Launchpad translations. 2009-10-30 Konstantin Tokarev * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h: Blocked old cartesian editor in propextension 2009-11-29 Konstantin Tokarev * libavogadro/src/engines/labelengine.cpp, libavogadro/src/molecule.cpp: Improved label style "Symbol & Number in Group" - now "1" isn't displayed if there is only one atom of certain element * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui: Re-ordered types of atom labels in labelsettinswidget * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui, libavogadro/src/molecule.cpp: Moved new numbering scheme from OB to Avogadro - eliminated dependence on non-accepted patch to OB * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui: Eleminated segfault by removing label preview 2009-11-24 Konstantin Tokarev * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp: Size of properties dialog now depends on rows and columns number; made it resizable under Fluxbox 2009-11-23 Konstantin Tokarev * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui, libavogadro/src/molecule.cpp: Added support for changing of labels font color, but still can't change font 2009-11-22 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_cd.h, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h, libavogadro/src/extensions/spectratype_uv.cpp, libavogadro/src/extensions/spectratype_uv.h, libavogadro/src/molecule.cpp: Add ifdefs to select available spectra based on OB version. 2009-11-22 Konstantin Tokarev * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui: Improved UI of labelsettingswidget; now will compile with unmodified OB (without new label type) 2009-11-19 Konstantin Tokarev * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: New Label type: Symbol & Number in group (requires patch for OB which wasn't accepted yet) 2009-11-17 Konstantin Tokarev * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui: Labels can be moved from atoms on arbitrary vector 2009-11-16 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Added annulen's default heuristics for pasting coordinates. 2009-11-16 Konstantin Tokarev * libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/dipolesettingswidget.ui: Improved dipole engine: vector points outside molecule; origin can be changed 2009-11-15 Konstantin Tokarev * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h: Added settings widget for Axes engine 2009-11-13 Geoff Hutchison * libavogadro/src/extensions/daltoninputdialog.cpp, .../src/extensions/daltoninputdialog.cpp.disabled, libavogadro/src/extensions/daltoninputdialog.h, .../src/extensions/daltoninputdialog.h.disabled, libavogadro/src/extensions/daltoninputdialog.ui, .../src/extensions/daltoninputdialog.ui.disabled: Re-enabled Cyanat's dalton code. 2009-11-13 Konstantin Tokarev * avogadro/src/pluginlistview.cpp, avogadro/src/pluginlistview.h: Added copyright information * avogadro/src/pluginlistview.cpp, avogadro/src/pluginlistview.h, avogadro/src/pluginsettings.cpp: Fixed improper behavior of PluginListView (plugin info didn't change on keyboard movements) 2009-11-10 Geoff Hutchison * libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/tools/autoopttool.cpp: Ignore dummy atoms for force field calcs. (Includes some debugging info.) 2009-11-07 David Lonie * libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_nmr.cpp: Move connections to constructors for spectra tabs. * libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_nmr.cpp: Move connections to constructors for spectra tabs. * libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_nmr.cpp: Move connections to constructors for spectra tabs. * libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_uv.cpp: DOS only: move connections to ctors 2009-11-06 Geoff Hutchison * i18n/avogadro.pot, scripts/extract-application-messages.sh: Updated template -- main.cpp messages were not properly processed by extract-application-messages.sh. 2009-11-05 Konstantin Tokarev * libavogadro/src/extensions/cartesianeditor.ui, libavogadro/src/extensions/cartesianextension.cpp: Changed font size in editor from 10 to value, relative to default * libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h: Code style: fixed braces placement, replaced tabs with spaces, changed Qt headers 2009-11-05 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/cartesianeditor.ui, libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h, .../src/extensions/icons/document-revert.png, libavogadro/src/extensions/icons/edit-clear.png, libavogadro/src/extensions/icons/edit-copy.png, libavogadro/src/extensions/icons/edit-cut.png, libavogadro/src/extensions/icons/edit-paste.png: Backout new Cartesian editor extension from 1.0 branch. 2009-11-03 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/cartesianeditor.ui, libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h, libavogadro/src/extensions/edit.qrc, libavogadro/src/extensions/icons/amarok_back.png, libavogadro/src/extensions/icons/amarok_next.png, libavogadro/src/extensions/icons/amarok_pause.png, libavogadro/src/extensions/icons/amarok_play.png, libavogadro/src/extensions/icons/amarok_stop.png, .../src/extensions/icons/document-revert.png, libavogadro/src/extensions/icons/edit-clear.png, libavogadro/src/extensions/icons/edit-copy.png, libavogadro/src/extensions/icons/edit-cut.png, libavogadro/src/extensions/icons/edit-paste.png: Re-merge annulen's cartesian editor. 2009-11-03 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot: Updated POT and PO files (with fewer messages) * avogadro/src/macchempasteboard.cpp.disabled, avogadro/src/macchempasteboard.h.disabled, libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/daltoninputdialog.cpp.disabled, .../src/extensions/daltoninputdialog.h.disabled, .../src/extensions/daltoninputdialog.ui.disabled, libavogadro/src/extensions/liganddialog.cpp, libavogadro/src/extensions/liganddialog.h, libavogadro/src/extensions/liganddialog.ui, libavogadro/src/extensions/linmorph.qrc, libavogadro/src/extensions/linmorphdialog.cpp, libavogadro/src/extensions/linmorphdialog.h, libavogadro/src/extensions/linmorphdialog.ui, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/linmorphextension.h, libavogadro/src/extensions/pocketdialog.cpp, libavogadro/src/extensions/pocketdialog.h, libavogadro/src/extensions/pocketdialog.ui, libavogadro/src/extensions/wiitrackextension.cpp, libavogadro/src/extensions/wiitrackextension.h: Remove unused source files -- these are still used for translations! 2009-10-29 Tim Vandermeersch * libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/pythonterminal.h: PythonTerminal extension: Allow selections in the python terminal widget without allowing to edit (i.e. delete) already processed commands 2009-10-30 Konstantin Tokarev * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h: Blocked old cartesian editor in propextension * libavogadro/src/extensions/icons/document-revert.png, libavogadro/src/extensions/icons/edit-clear.png, libavogadro/src/extensions/icons/edit-copy.png, libavogadro/src/extensions/icons/edit-cut.png, libavogadro/src/extensions/icons/edit-paste.png: Added icons for Cartesian Editor - copied form avogadro/src/icons * libavogadro/src/extensions/cartesianeditor.ui, libavogadro/src/extensions/cartesianextension.cpp, libavogadro/src/extensions/cartesianextension.h: Added extension "Cartesian Editor" 2009-10-29 Tim Vandermeersch * libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/pythonterminal.h: PythonTerminal extension: Allow selections in the python terminal widget without allowing to edit (i.e. delete) already processed commands 2009-10-28 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot: Updated POTs and translations. * scripts/find-po-email.py, scripts/find-translators.sh: Update scripts -- used to grab contributors for Avo 1.0. * i18n/avogadro-ar.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, scripts/clean-po.sh: Stripped PO files -- fixes bugs noted by Benoit and Annulen about untranslated messages (i.e., lupdate gets confused by obsolete translations). 2009-10-26 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/linmorphextension.h, scripts/extract-application-messages.sh: Updated with translation suggestions from annulen 2009-10-25 Marcus D. Hanwell * avogadro/src/updatecheck.cpp, libavogadro/src/extensions/networkfetchextension.cpp: Changed all deletes on the network reply to deleteLater() calls. * avogadro/src/updatecheck.cpp, libavogadro/src/extensions/networkfetchextension.cpp: Changed all deletes on the network reply to deleteLater() calls. 2009-10-24 Marcus D. Hanwell * CMakeLists.txt, Doxyfile: Bumped build files in master to 1.1.0 - development versions. 2009-10-23 Marcus D. Hanwell * CMakeLists.txt, Doxyfile: Bumped the version number in preparation for the 1.0.0 release. 2009-10-23 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po: Final import of translations before 1.0. 2009-10-22 Marcus D. Hanwell * CMakeLists.txt, avogadro/src/enginecolorswidget.cpp, avogadro/src/enginecolorswidget.h, libavogadro/src/config.h.in, libavogadro/src/glwidget.cpp, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: Added versioned plugin directories - fixes bug 2882816. I added versioned plugin directories on all architectures. This can be disabled, but it should not do any harm being left on. This necessitated soem changes to the plugin manager class. I removed the static and const methods and ported affected classes to get an instance of the singleton. 2009-10-22 Jogvan Magnus Olsen * libavogadro/src/extensions/daltoninputdialog.cpp, libavogadro/src/extensions/daltoninputdialog.h, libavogadro/src/extensions/daltoninputdialog.ui: Added option for multiply augmented cc basis sets. 2009-10-20 Geoff Hutchison * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/molecule.cpp, libavogadro/src/residue.cpp, libavogadro/src/residue.h: When element changes with Atom::setAtomicNumber, issue an updated() signal from the atom. Residues will now listen for this signal and invalidate atom IDs accordingly. When saving residue information with molecules, check for invalid atom ids. Addresses PR#2855789. * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po: Latest Launchpad Translations. 2009-10-19 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot: Updated POTs. Will merge Launchpad shortly. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/daltoninputdialog.cpp, .../src/extensions/daltoninputdialog.cpp.disabled, libavogadro/src/extensions/daltoninputdialog.h, .../src/extensions/daltoninputdialog.h.disabled, libavogadro/src/extensions/daltoninputdialog.ui, .../src/extensions/daltoninputdialog.ui.disabled, libavogadro/src/extensions/inputfileextension.cpp, libavogadro/src/extensions/inputfileextension.h: Disable Dalton generation -- not enough time for translations. * libavogadro/src/extensions/animationdialog.ui, libavogadro/src/extensions/gamessinputdialog.ui: Update disambiguation of "loop" translations suggested by Konstantin Tokarev. * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdysettingswidget.ui: Modified patch from Patch PR#2799140. 2009-10-19 Jogvan Magnus Olsen * libavogadro/src/extensions/daltoninputdialog.cpp, libavogadro/src/extensions/daltoninputdialog.h: Added keyword "nosymm" when asking for excitation energies. 2009-10-18 Tim Vandermeersch * avogadro/src/CMakeLists.txt, libavogadro/src/CMakeLists.txt: WIN32: Don't attempt to create QM files on windows -- these should be copied from a linux build to avoid unicode problems with the translations [just place the QM files in avogadro/src and libavogadro/src] We could add the QM files to git but since there are only a handful of people building on windows, the downsides seem to outweigh the benefits. If not copied, Avogadro still build but will be untranslated. 2009-10-18 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, libavogadro/src/plugin.h: Bumped the plugin version number and config file versions - make clean required. 2009-10-17 Marcus D. Hanwell * CMakeLists.txt, Doxyfile: Bumped the version number to 0.9.9 in preparation for tagging. 2009-10-17 Kristof Bal * avogadro/src/engineitemdelegate.h, libavogadro/qtiocompressor/qtiocompressor.cpp, libavogadro/src/python/swig.cpp: Fix spelling errors (Krazy). Spelling errors in comments and strings should be fixed as they may show up later in API documentation, handbooks, etc. 2009-10-16 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po: Latest Launchpad Translations. 2009-10-16 Jogvan Magnus Olsen * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/daltonextension.cpp, libavogadro/src/extensions/daltonextension.h, libavogadro/src/extensions/daltoninputdialog.cpp, libavogadro/src/extensions/daltoninputdialog.h, libavogadro/src/extensions/daltoninputdialog.ui, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/inputfileextension.cpp, libavogadro/src/extensions/inputfileextension.h: Extended the Dalton input file plugin and renamed the gaussian extension to inputfile extension to make it more general. All the input file generators, except GAMESS, were added to the Gaussian extension and therefore it makes sense to rename the extension to make it more general. Maybe also merge it with the GAMESS extension if possible. 2009-10-13 Geoff Hutchison * libavogadro/src/animation.cpp, libavogadro/src/extensions/vibrationdialog.cpp: Fix more vibration bugs. Now arrow keys work correctly, and old vibrations don't reappear.x * libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/tools/autoopttool.cpp: Convert all energies to kJ/mol for consistency. * libavogadro/src/animation.cpp, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Fix vibration crash in recent versions -- don't always free conformer memory. We save it for vibrations. * .../src/extensions/molecularpropextension.cpp, .../src/extensions/molecularpropextension.h: Disable updating the properties window if it's not visible. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Fix bug with "extra" window when opening files. Now checks for default filename. 2009-10-11 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/updatecheck.cpp, avogadro/src/updatecheck.h: Made UpdateCheck a singleton, fixed segfault with Qt 4.5.3. Fixed the segfault with Qt 4.5.3 - use reply->deleteLater() instead of deleting the object directly in the slot once finished. Also made this class into a singleton - there is no point in checking for an update more than once in any given instance of Avogadro! 2009-10-10 Geoff Hutchison * libavogadro/src/animation.cpp, libavogadro/src/extensions/vibrationextension.cpp: More debugging looking for vibration crash. * libavogadro/src/animation.cpp, libavogadro/src/extensions/vibrationextension.cpp: First step for debugging vibration & animation. Attempt to lock Molecule more. 2009-10-09 Geoff Hutchison * i18n/avogadro.pot, i18n/libavogadro.pot: Updated with recent translatable strings, including formal charges. * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui, libavogadro/src/extensions/propmodel.cpp: Add support for formal charges. You can set them using the Atom Properties, show them using atom labels, or draw appropriate bonding patterns to have them interpreted. 2009-10-09 Geoff Hutchison * .../src/extensions/molecularpropextension.cpp, libavogadro/src/molecule.cpp: Use MMFF94 to estimate dipole moment when available. On set of ~1000 molecules, correlation is R^2 = 0.769! 2009-10-06 Casper Steinmann * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/daltonextension.cpp: Placed the Dalton extension in the appropriate menu by renaming the .so file generated 2009-10-01 Jogvan Magnus Olsen * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/daltonextension.cpp, libavogadro/src/extensions/daltonextension.h, libavogadro/src/extensions/daltoninputdialog.cpp, libavogadro/src/extensions/daltoninputdialog.h, libavogadro/src/extensions/daltoninputdialog.ui: First basic implementation of Dalton Input File generator extension 2009-09-30 Casper Steinmann * libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gamessinputdialog.h, libavogadro/src/extensions/gamessinputdialog.ui: Fixed bug "Error in GAMESS advanced setup menu - ID: 2836316" Also: * Updated the input to use MWORDS instead of the old MEMORY keywork. * There are still minor issues with the input preview not updating when one selects a different unit of time, but no apparent fix was found. 2009-09-22 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po: Updated with Launchpad translations. 2009-09-09 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, libavogadro/src/molecule.cpp: Fixed some issues with file modification and saving. Issue 2854213 should now be fixed, modification of the molecule is more accurately reflected now. Specifically when closing a molecule the empty window will not be marked as modified, when saving a molecule the window will be reset to reflect it was not modified since save and unsaved new files will prompt for a file name. * CMakeLists.txt, Doxyfile: Bumped version number to 0.9.8 in preparation for new release. * libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/engines/cartoonmeshgenerator.cpp, libavogadro/src/engines/cartoonmeshgenerator.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/surfaceextension.cpp, libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h, libavogadro/src/mesh.cpp, libavogadro/src/mesh.h, libavogadro/src/python/mesh.cpp: Use Color3f to store colors in Mesh, port other classes. The Mesh class now uses Color3f to store color information for colored meshes. Other classes were ported to work with this new class. * libavogadro/src/CMakeLists.txt, libavogadro/src/color3f.h: Added simple color class that uses 3 floats to store color. This is a very simple color class that uses 3 floats to store the red, green and blue components of color. It is designed to be used with OpenGL calls (OpenGL stores colors as floats normally), but can also be used with other display types. It allows vectors of color objects to be passed directly to OpenGL functions as GLfloat pointers. * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Added some locking back into the draw tool. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Removed the function level locks in the Molecule class. The locks have been causing performance issues due to multiple locks/unlocks in tight loops, along with some deadlocks. Migrating code to use tryLock* gets rid of deadlocks and has improved performance in some of the tight loops. The Python bindings could do with some extra logic to take care of locking, or the documentation should make it clear that scripts need to take care of this. 2009-09-08 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot: Updated translations from Launchpad. 2009-09-06 Tim Vandermeersch * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/tests/moleculefiletest.cpp, libavogadro/tests/moleculetest.cpp, testfiles/fail1.drawlog, testfiles/fail1.drawlog.ignore, testfiles/fail2.drawlog, testfiles/fail2.drawlog.ignore: Fix setAllConformers to just replace all conformers (and make sure there is always at least one conformer). See doxygen comments for more info. There is also a unit test for this in moleculetest.cpp. 2009-09-03 Marcus D. Hanwell * libavogadro/src/color.cpp, libavogadro/src/color.h: Just use float, rather than GLFloat for colors. 2009-09-01 David C. Lonie * libavogadro/src/extensions/spectratabdos.ui, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h: Added integration scaling as an option, and the option to plot density per valence electron. 2009-08-31 David C. Lonie * libavogadro/src/extensions/spectratabdos.ui, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h, libavogadro/src/extensions/spectratype_ir.cpp: Add integrated DOS plotting. 2009-08-22 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: More clean ups for the recent file list. Cleaned up the recent file list code to ensure it is called on first load. Also removed a duplicate function and replaced with a default parameter. * libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Fixed bug 2823931 - memory corruption on molecule close. This bug was caused by a dangling pointer, updateGeomInfo was deleting the dipole moment pointer every time, but not setting the pointer to zero. I have cleaned up the dipole moment code, but it is still not doing anything useful as far as I can tell right now. 2009-08-21 Marcus D. Hanwell * .../src/extensions/molecularpropextension.cpp, .../src/extensions/molecularpropextension.h: Hide the dipole moment for now, some clean ups and GLWidget signal fix. 2009-08-21 David Lonie * libavogadro/src/extensions/spectratype_nmr.cpp, libavogadro/src/extensions/spectratype_nmr.h: Update NMR plots to reflect changes to spectratype.* * libavogadro/src/extensions/spectratype.cpp, libavogadro/src/extensions/spectratype.h, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h: Added a function to generate a list of sampling points so that long flat stretches aren't sampled at high resolution. * libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_cd.h, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h, libavogadro/src/extensions/spectratype_uv.cpp, libavogadro/src/extensions/spectratype_uv.h: Modify DOS, CD, and UV plots to reflect the changes to spectratype.* * libavogadro/src/extensions/spectratype.cpp, libavogadro/src/extensions/spectratype.h, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h: Added a function to generate a list of sampling points so that long flat stretches aren't sampled at high resolution. 2009-08-21 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/glwidget.cpp: Added an option to reset display types to default for a view. This was a long standing bug that caused issues for many users. I had to add a new string to the view menu, but I think it is worth it to improve the user experience. In addition to previous improvements to saving/loading display type settings, the user can now reset the display types. We should probably add a more global option to reset Avogadro to defaults without requiring users to manually delete the configuration file. 2009-08-20 Marcus D. Hanwell * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Changed the energy function to take a signed int, works as expected now. 2009-08-18 Marcus D. Hanwell * libavogadro/src/cube.cpp, libavogadro/src/cube.h, libavogadro/src/mesh.cpp, libavogadro/src/mesh.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h: Removed the lock from the base Primitive class, added to classes that need it. 2009-08-15 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_uv.cpp, libavogadro/src/molecule.cpp: Update to reflect name change in OB trunk. 2009-08-13 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectratype_uv.cpp: Added turbomole CD as a loadable spectra type. 2009-08-12 David C. Lonie * libavogadro/src/extensions/spectratabcd.ui, libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_cd.h, libavogadro/src/extensions/spectratype_uv.cpp: Changes to CD/UV plotting. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectratabcd.ui, libavogadro/src/extensions/spectratype_cd.cpp, libavogadro/src/extensions/spectratype_cd.h: Added CD spectra * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectratabuv.ui, libavogadro/src/extensions/spectratype_uv.cpp, libavogadro/src/extensions/spectratype_uv.h, libavogadro/src/molecule.cpp: Added in UV spectra 2009-08-11 David C. Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectratabdos.ui, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h: Added some options for visualizing DOS plots. 2009-08-11 David Lonie * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/molecule.cpp: Remove leaked DOS code from master branch... 2009-08-11 root * libavogadro/src/extensions/spectratabdos.ui, libavogadro/src/extensions/spectratype_dos.cpp, libavogadro/src/extensions/spectratype_dos.h: Forgot to include the DOS files earlier.... 2009-08-08 Tim Vandermeersch * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/tests/CMakeLists.txt, libavogadro/tests/drawcommandtest.cpp, testfiles/basic1.drawlog, testfiles/basic2.drawlog, testfiles/basic3.drawlog, testfiles/basic4.drawlog, testfiles/basic5.drawlog, testfiles/basic6.drawlog, testfiles/fail1.drawlog, testfiles/fail2.drawlog: * Fix various draw tool bugs * Update draw command unit tests: If you uncomment the DEBUG_COMMANDS define in drawcommand.cpp, all information needed to replay the commands are output using qDebug(). Capturing this output and placing moving it to testfiles/*.drawlog will make the drawcommandtest replay the commands. Each command is undone/redone before executing the next command. At the end, all commands in the stack are undone/redone 10 times. Various values are veryfied while doing all this. There are still some cases for which the replay fails but these don't cause a segfault. In short, the draw commands are in better shape than ever before. 2009-08-06 David Lonie * avogadro/src/mainwindow.cpp, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/molecule.cpp: DOS plotting 2009-08-05 Geoff Hutchison * avogadro/src/main.cpp, i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-el.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-el.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot: Updated POT and Launchpad translations. 2009-07-22 Marcus D. Hanwell * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Update geometry also needs to be called in order to render the whole molecule. 2009-07-19 David Lonie * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Added a function to change an arbitrary conformer's energy. 2009-07-18 Marcus D. Hanwell * CMakeLists.txt, Doxyfile, INSTALL: Bumping to version 0.9.7 in preparation for the release. 2009-07-17 Marcus D. Hanwell * libavogadro/src/extensions/surfacedialog.cpp, libavogadro/src/extensions/surfacedialog.h: Improved handling of loaded cube files, default for loaded cubes. 2009-07-17 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po: Translations updates before 0.9.7 2009-07-17 Sergey Smirnov * avogadro/src/application.cpp, libavogadro/src/CMakeLists.txt, libavogadro/src/pythonwhenidle.cpp, libavogadro/src/pythonwhenidle.h: Release the python's GIL when Avogadro is idle (waiting for new events). 2009-07-11 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po: Launchpad export of current translations. 2009-07-06 Marcus D. Hanwell * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: The non const slot is the one that is generally used. 2009-07-06 David Lonie * libavogadro/src/plotobject.cpp, libavogadro/src/plotobject.h: Change PlotObject::addPoint() to return a reference to the added PlotPoint. * libavogadro/src/plotpoint.cpp, libavogadro/src/plotpoint.h: Added a customData property to PlotPoint -- this can be used to store extra information to help identify the point. 2009-07-05 Marcus D. Hanwell * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/surfaceextension.cpp: Removed the old orbital extension, now replaced by the surface extension. * libavogadro/src/extensions/surfacedialog.cpp, libavogadro/src/extensions/surfacedialog.h, libavogadro/src/extensions/surfaceextension.cpp, libavogadro/src/molecule.cpp: Added ability to use loaded cube files in the surface extension too. 2009-07-04 Marcus D. Hanwell * libavogadro/src/extensions/surfacedialog.cpp, libavogadro/src/extensions/surfacedialog.h, libavogadro/src/extensions/surfaceextension.cpp, libavogadro/src/extensions/surfaceextension.h: Ported to use the enum in the Cube class to denote cube types. 2009-07-02 Marcus D. Hanwell * libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/surfaceextension.cpp: Some fixes for slater type basis sets. 2009-07-01 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/surfacesettingswidget.ui, libavogadro/src/extensions/surfacedialog.cpp: Moved the orbital engine to the surface engine, made necessary changes for move. 2009-06-30 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/surfacesettingswidget.ui: Removed the surface engine - the orbital engine will take its place. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: A few minor cleanups to the orbitals engine - it is a general surface engine now. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Renamed function for drawing boxes, made it private and inline. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Cleaned up the mesh combo update code, made the color combo work correctly again. 2009-06-29 Marcus D. Hanwell * libavogadro/src/cube.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/extensions/surfaceextension.cpp, libavogadro/src/mesh.h, libavogadro/src/primitive.h: Updates to the orbital engine, soon to be the surface engine... Added a cubeType property to cubes, allows for easy enumeration of cubes/meshes. Made the surface mesh selection work again in the orbital engine. Still needs some more fix ups but it is looking a lot better. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/surfacedialog.cpp, libavogadro/src/extensions/surfacedialog.h, libavogadro/src/extensions/surfacedialog.ui, libavogadro/src/extensions/surfaceextension.cpp, libavogadro/src/extensions/surfaceextension.h: The new, improved surface extension/dialog - simpler and more intuitive. This is the first working version of the new, improved surface dialog. Not everything is finished yet, and it is basically a rewrite of the orbital extension/dialog. I think that most of the logic is in there now, need to add a little more for color mapping cubes onto each other, showing progress dialogs for mesh calculations and fixing a few remaining crashers. It is much simpler and allows users to accomplish calculations using a single form. * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h: Added a new signal, improved debug output. These classes need an overhaul - common base. 2009-06-25 Geoff Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Display unit cell axes by default if present. Add a signal/slot for updating the unit cell axes menu item when changed in glwidget. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Make sure to remove deleted primitives from the selected list. 2009-06-23 Geoff Hutchison * libavogadro/src/extension.cpp, libavogadro/src/extension.h: Add virtual to indicate if certain actions use the network. Currently unused. 2009-06-23 Geoff Hutchison * avogadro/src/icons/AvoDocument.png, avogadro/src/icons/avogadro.png, avogadro/src/icons/avogadro.svg, avogadro/src/mac/AvogadroDocument.icns, avogadro/src/mac/avogadro.icns: Fix Avogadro icon slightly -- layering of one "orbit" was off. (Sorry, I'm obsessive compulsive about these things.) 2009-06-20 Tim Vandermeersch * libavogadro/src/bond.h, libavogadro/src/camera.h, libavogadro/src/color.h, libavogadro/src/glwidget.h, libavogadro/src/molecule.h, libavogadro/src/moleculefile.h, libavogadro/src/painter.h, libavogadro/src/plugin.h, libavogadro/src/pluginmanager.h, libavogadro/src/primitive.h, libavogadro/src/primitivelist.h, libavogadro/src/surfacemeshgenerator.h, libavogadro/src/tool.h, libavogadro/src/toolgroup.h: Some header documentation changes resulting from updating python bindings. * libavogadro/src/animation.cpp, libavogadro/src/bond.cpp, libavogadro/src/molecule.cpp, libavogadro/src/python/Avogadro.py, libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/TODO, libavogadro/src/python/animation.cpp, libavogadro/src/python/atom.cpp, libavogadro/src/python/bond.cpp, libavogadro/src/python/camera.cpp, libavogadro/src/python/color.cpp, libavogadro/src/python/cube.cpp, libavogadro/src/python/eigen.cpp, libavogadro/src/python/elementtranslator.cpp, libavogadro/src/python/engine.cpp, libavogadro/src/python/extension.cpp, libavogadro/src/python/fragment.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/mesh.cpp, libavogadro/src/python/meshgenerator.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/molecule.h, libavogadro/src/python/moleculefile.cpp, libavogadro/src/python/moleculelist.cpp, libavogadro/src/python/navigate.cpp, libavogadro/src/python/neighborlist.cpp, libavogadro/src/python/painter.cpp, libavogadro/src/python/painterdevice.cpp, libavogadro/src/python/plugin.cpp, libavogadro/src/python/pluginmanager.cpp, libavogadro/src/python/primitive.cpp, libavogadro/src/python/primitivelist.cpp, libavogadro/src/python/qlist.cpp, libavogadro/src/python/residue.cpp, libavogadro/src/python/sip.cpp, libavogadro/src/python/std_vector.cpp, libavogadro/src/python/tool.cpp, libavogadro/src/python/toolgroup.cpp, libavogadro/src/python/unittest/atom.py, libavogadro/src/python/unittest/bond.py, libavogadro/src/python/unittest/camera.py, libavogadro/src/python/unittest/color.py, libavogadro/src/python/unittest/cube.py, libavogadro/src/python/unittest/engine.py, libavogadro/src/python/unittest/extension.py, libavogadro/src/python/unittest/glwidget.py, libavogadro/src/python/unittest/mesh.py, libavogadro/src/python/unittest/molecule.py, libavogadro/src/python/unittest/tool.py, libavogadro/src/python/unittest/toolgroup.py, libavogadro/src/python/unittest/util.py: Update python, cleanup & added docstrings (copied from doxygen docs). Also checked function overloading & default arguments. Minor code changes in cpp files: Animation: implement dynamicBonds() Bond: initialize m_aromaticity to false in ctor. Molecule::calculateAromaticity(): prevent crash (use OBMol::NumBonds() instead of numBonds() when accessing bonds from an OBMol.) 2009-06-17 Geoff Hutchison * i18n/avogadro-af.po, i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po: Updated launchpad translations. 2009-06-17 Tim Vandermeersch * avogadro/src/mainwindow.cpp, libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h: Handle VASP files as a special case in MoleculeFile 2009-06-17 David Lonie * testfiles/VASP-8LiH/INCAR, testfiles/VASP-8LiH/KPOINTS, testfiles/VASP-8LiH/POSCAR, testfiles/VASP-8LiH/POTCAR, testfiles/VASP-8LiH/readme: Added VASP input set to testfiles. 2009-06-16 Tim Vandermeersch * cmake/modules/PythonDeps.cmake, libavogadro/src/python/sip.cpp: Add support for sip 4.8.0 2009-06-15 Tim Vandermeersch * libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/moleculefile.cpp, libavogadro/tests/moleculefiletest.cpp: CartoonEngine: remove debug output MoleculeFile: bug fix, make sure streampos contains the correct number of positions (was causing an endless loop in replaceMolecule) 2009-06-14 Geoff Hutchison * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/directorytreemodel.cpp, libavogadro/src/extensions/directorytreemodel.h, .../src/extensions/insertfragmentdialog.cpp, libavogadro/src/extensions/insertfragmentdialog.ui, libavogadro/src/filetreeitem.cpp, libavogadro/src/filetreeitem.h: Fix PR#2663883 -- switch fragment window to QFileSystemModel. The downside is that we only can have the default set of fragments, not a list of directories, but this should be fine for 1.0. Evidently the best way to handle multiple root directories is with a proxy model. 2009-06-12 Geoff Hutchison * i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot, libavogadro/src/extensions/gamessinputdialog.ui: Updated typo in GAMESS input builder. * libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/molecule.cpp: Add back feature to add hydrogens by pH. Fixes PR#2799259. 2009-06-12 Geoff Hutchison * i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot, libavogadro/src/extensions/surfacedialog.ui: One more -- disambiguation of "In Display Type:" * avogadro/src/mainwindow.cpp, libavogadro/src/extensions/linmorphdialog.ui, libavogadro/src/extensions/spectratabnmr.ui: Translation corrections from Louis Ricard. * i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot, libavogadro/src/elementtranslator.cpp, libavogadro/src/engines/cartoonengine.h, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/gamessinputdialog.ui, libavogadro/src/extensions/linmorphdialog.ui, libavogadro/src/extensions/propextension.h, libavogadro/src/tools/aligntool.h: Spelling corrections on translatable strings. 2009-06-11 Geoff Hutchison * i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot, scripts/create-translations.sh: Latest translations from Launchpad plus updated POT files. * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp: Fix prop model to handle numeric sorting. Solves PR#2803874 * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/numbertableitem.cpp, libavogadro/src/numbertableitem.h: Qt doesn't have a numeric QTableWidgetItem because it you can't subclass it correctly. * CMakeLists.txt, avogadro/src/CMakeLists.txt, cmake/modules/FindLinguist.cmake, libavogadro/src/CMakeLists.txt: Switch PO translations to a new QT_WRAP_PO macro in FindLinguist. Works much, much better -- only updates when needed. * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/numbertableitem.h, libavogadro/src/undosequence.h: Update documentation for NumberTableItem * libavogadro/src/numbertableitem.cpp, libavogadro/src/numbertableitem.h: Small class to handle numeric sorting -- surprused Qt doesn't have one. * avogadro/src/mainwindow.cpp, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/zmatrixtool.cpp: Added some work and debugging messages to find parentless widgets. There's a bug on Mac where the program won't quit correctly. 2009-06-10 Tim Vandermeersch * CMakeLists.txt, avogadro/src/CMakeLists.txt, libavogadro/src/CMakeLists.txt, scripts/create-translations.sh: Improve translation creation & updating. The replacing of "-" with "_" caused some problems here since my build directory contains a "-" character. 2009-06-10 Geoff Hutchison * libavogadro/src/animation.cpp, libavogadro/src/extensions/vibrationextension.cpp: Fix bugs with "animate speed based on frequency" now works smoothly. Thanks to Jan Jensen for the suggestion. * libavogadro/src/python/moleculefile.cpp, libavogadro/src/python/openbabelwrapper.cpp, libavogadro/src/python/sip.cpp: Finish merge of OpenbabelWrapper -- didn't get Python code. 2009-06-09 Geoff Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/src/openbabelwrapper.cpp, libavogadro/src/openbabelwrapper.h: Merge OBwrapper & MOleculeFile. Now one class. * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/overlaysettingswidget.ui: Remove overlay settings widget -- confusing carbon copy of label engine. * i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/avogadro.pot, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot, libavogadro/src/extensions/surfacedialog.ui: Added some translation context, particularly for surfacedialog.ui * i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po, i18n/libavogadro.pot: Updated POT and PO files. * avogadro/src/avogadro.qrc, avogadro/src/icons/configure.png, avogadro/src/icons/document-open-recent.png, avogadro/src/icons/document-open-remote.png, libavogadro/src/tools/autoopttool.png, libavogadro/src/tools/measure.png: More icon updates. Now with an auto-opt icon (E with arrow) 2009-06-08 Geoff Hutchison * CMakeLists.txt, avogadro/src/CMakeLists.txt, libavogadro/src/CMakeLists.txt, scripts/create-translations.sh: Probably the last PO translation update. Seems to work smoothly now. I *HATE* add_custom_target -- it re-runs all the time. If someone knows Cmake magic, let's fix this. * i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po: Launchpad PO files -- something modifies them in CMake scripts? I'll check. * i18n/avogadro-ar.po, i18n/avogadro-bg.po, i18n/avogadro-ca.po, i18n/avogadro-cs.po, i18n/avogadro-de.po, i18n/avogadro-en_CA.po, i18n/avogadro-en_GB.po, i18n/avogadro-es.po, i18n/avogadro-fi.po, i18n/avogadro-fr.po, i18n/avogadro-id.po, i18n/avogadro-it.po, i18n/avogadro-ja.po, i18n/avogadro-ko.po, i18n/avogadro-nb.po, i18n/avogadro-nl.po, i18n/avogadro-pl.po, i18n/avogadro-pt.po, i18n/avogadro-pt_BR.po, i18n/avogadro-ru.po, i18n/avogadro-sk.po, i18n/avogadro-sv.po, i18n/avogadro-tr.po, i18n/avogadro-uk.po, i18n/avogadro-zh_CN.po, i18n/avogadro-zh_TW.po, i18n/libavogadro-ar.po, i18n/libavogadro-bg.po, i18n/libavogadro-ca.po, i18n/libavogadro-cs.po, i18n/libavogadro-de.po, i18n/libavogadro-en_CA.po, i18n/libavogadro-en_GB.po, i18n/libavogadro-es.po, i18n/libavogadro-fi.po, i18n/libavogadro-fr.po, i18n/libavogadro-id.po, i18n/libavogadro-it.po, i18n/libavogadro-ja.po, i18n/libavogadro-ko.po, i18n/libavogadro-nb.po, i18n/libavogadro-nl.po, i18n/libavogadro-pl.po, i18n/libavogadro-pt.po, i18n/libavogadro-pt_BR.po, i18n/libavogadro-ru.po, i18n/libavogadro-sk.po, i18n/libavogadro-sv.po, i18n/libavogadro-tr.po, i18n/libavogadro-uk.po, i18n/libavogadro-zh_CN.po, i18n/libavogadro-zh_TW.po: Add PO files from Launchpad. * CMakeLists.txt, avogadro/src/CMakeLists.txt, i18n/avogadro_ar.ts, i18n/avogadro_bg.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_CA.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_id.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sk.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts, i18n/libavogadro_ar.ts, i18n/libavogadro_bg.ts, i18n/libavogadro_ca.ts, i18n/libavogadro_cs.ts, i18n/libavogadro_de.ts, i18n/libavogadro_en_CA.ts, i18n/libavogadro_en_GB.ts, i18n/libavogadro_es.ts, i18n/libavogadro_fi.ts, i18n/libavogadro_fr.ts, i18n/libavogadro_id.ts, i18n/libavogadro_it.ts, i18n/libavogadro_ja.ts, i18n/libavogadro_ko.ts, i18n/libavogadro_nb.ts, i18n/libavogadro_nl.ts, i18n/libavogadro_pl.ts, i18n/libavogadro_pt.ts, i18n/libavogadro_pt_BR.ts, i18n/libavogadro_ru.ts, i18n/libavogadro_sk.ts, i18n/libavogadro_sv.ts, i18n/libavogadro_tr.ts, i18n/libavogadro_uk.ts, i18n/libavogadro_zh_CN.ts, i18n/libavogadro_zh_TW.ts, libavogadro/src/CMakeLists.txt, scripts/create-translations.sh: Switch to use PO files and lconvert for building translations. (Ideally, avogadro/src/CMakeLists.txt and libavogadro/src/CMakeLists.txt won't wrap TS files until translations are built.) CMake help here would be appreciated. Right now, it's a race condition. 2009-06-08 Tim Vandermeersch * libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/main.cpp: Ommit python module wrapper for now (wasn't working) 2009-06-08 Geoff Hutchison * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h: Added feature for faster vibration animations for high-frequency modes. Currently crashes for unknown reason. * libavogadro/src/extensions/gamessinputdialog.ui, libavogadro/src/extensions/qcheminputdialog.ui: Add "Compute..." buttons for local calculations. * avogadro/src/avogadro.qrc, avogadro/src/engineitemmodel.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/autoopttool.png, libavogadro/src/tools/measure.png, libavogadro/src/tools/zmatrixtool.cpp, libavogadro/src/tools/zmatrixtool.qrc: Updated icons. * avogadro/src/avogadro.qrc, avogadro/src/engineitemdelegate.cpp, avogadro/src/engineitemmodel.cpp, avogadro/src/engineprimitiveswidget.ui, avogadro/src/icons/application-exit.png, avogadro/src/icons/arrow-down.png, avogadro/src/icons/arrow-left.png, avogadro/src/icons/arrow-right.png, avogadro/src/icons/arrow-up.png, avogadro/src/icons/avogadro-icon.png, avogadro/src/icons/avogadro_icon.png, avogadro/src/icons/back.png, avogadro/src/icons/colorize.png, avogadro/src/icons/configure.png, avogadro/src/icons/copy.png, avogadro/src/icons/cut.png, avogadro/src/icons/document-close.png, avogadro/src/icons/document-export.png, avogadro/src/icons/document-import.png, avogadro/src/icons/document-new.png, avogadro/src/icons/document-open.png, avogadro/src/icons/document-print.png, avogadro/src/icons/document-revert.png, avogadro/src/icons/document-save-as.png, avogadro/src/icons/document-save.png, avogadro/src/icons/down.png, avogadro/src/icons/edit-add-child.png, avogadro/src/icons/edit-add.png, avogadro/src/icons/edit-clear.png, avogadro/src/icons/edit-copy.png, avogadro/src/icons/edit-cut.png, avogadro/src/icons/edit-paste.png, avogadro/src/icons/edit-redo.png, avogadro/src/icons/edit-remove.png, avogadro/src/icons/edit-select-all.png, avogadro/src/icons/edit-undo.png, avogadro/src/icons/edit_add.png, avogadro/src/icons/edit_remove.png, avogadro/src/icons/exit.png, avogadro/src/icons/fileclose.png, avogadro/src/icons/fileexport.png, avogadro/src/icons/filenew.png, avogadro/src/icons/fileopen.png, avogadro/src/icons/filesave.png, avogadro/src/icons/filesaveas.png, avogadro/src/icons/fill-color.png, avogadro/src/icons/forward.png, avogadro/src/icons/minus.png, avogadro/src/icons/paste.png, avogadro/src/icons/plus.png, avogadro/src/icons/preferences-plugin.png, avogadro/src/icons/rebuild.png, avogadro/src/icons/redo.png, avogadro/src/icons/revert.png, avogadro/src/icons/tab-close.png, avogadro/src/icons/tab-detach.png, avogadro/src/icons/tab-duplicate.png, avogadro/src/icons/tab-new.png, avogadro/src/icons/tab_new.png, avogadro/src/icons/tab_remove.png, avogadro/src/icons/tools-report-bug.png, avogadro/src/icons/undo.png, avogadro/src/icons/up.png, avogadro/src/icons/view-fullscreen.png, avogadro/src/icons/view-list-tree.png, avogadro/src/icons/view-restore.png, avogadro/src/icons/window_fullscreen.png, avogadro/src/icons/window_nofullscreen.png, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui, avogadro/src/projecttreeeditor.qrc, avogadro/src/projecttreeeditor.ui, avogadro/src/settingsdialog.ui, libavogadro/src/tools/autoopttool.png, libavogadro/src/tools/autorotate.png, libavogadro/src/tools/manipulate.png, libavogadro/src/tools/measure.png, libavogadro/src/tools/zmatrix.png: Icon update, including new icons from KDE Oxygen theme. 2009-06-07 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, libavogadro/src/openbabelwrapper.cpp: Ported the bug fixes to file saving from MainWindow. I ported the changes I made in MainWindow to fix the file saving bugs. I also added back in some error checking for normal saves of single molecules. Actual file saving seems to be working OK, but Avogadro does not register the changes have been saved and so prompts the user when closing - this needs fixing. We also need to do a lot of testing on these functions on all three platforms to ensure we have not had any regressions, such as the zero length file bug. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added in some extra logic to figure out which widget is active. * avogadro/src/detachedview.cpp, avogadro/src/detachedview.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Bring back the detached view functionality I have been missing so much! This is me bringing back a detached GLWidget view. This is now mostly working, with the main remaining issue being how to set the active display to change the settings of the GLWidget. I have a few ideas, please take a look and see if you can see any more issues with it. 2009-06-07 Tim Vandermeersch * avogadro/src/mainwindow.h, libavogadro/src/python/glgraphicsview.cpp, libavogadro/src/python/main.cpp: Merge + remove GLGraphicsView python binding 2009-06-07 Marcus D. Hanwell * avogadro/src/glgraphicsview.cpp, avogadro/src/glgraphicsview.h, libavogadro/src/CMakeLists.txt, libavogadro/src/glgraphicsview.cpp, libavogadro/src/glgraphicsview.h: Moved the GLGraphicsView classes into avogadro and out of our API. * avogadro/src/engineitemdelegate.cpp, avogadro/src/engineitemmodel.cpp: Improvements to the model and delegate - background comes out right now too. * libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/cartoonengine.h, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.h: Implemented hasSettings virtual to speed up engine tree view display. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Removed settings button, added new engine view. Need icon for settings! I removed the settings button, the grey boxes can now be used to get the settings dialog. I need a picture, but it works very nicely here. I would appreciate feedback and testing. I will look for an image to put in there too, but am open to suggestions. * avogadro/src/engineitemdelegate.cpp, avogadro/src/engineitemdelegate.h, avogadro/src/engineviewwidget.cpp, avogadro/src/engineviewwidget.h: New engine tree view with inline settings buttons. First pass at a mew engine tree view with inline settings buttons. We could extend this to have inline duplicate and remove buttons in the future. I really need some images for settings (tools?). Remove and duplicate images would be useful too. They can be drawn by the item delegate if I can find/draw some icons. * avogadro/src/engineitemmodel.cpp, avogadro/src/engineitemmodel.h: Additions and improvements to the engine item model, facilitates inline settings now. * libavogadro/src/engine.cpp, libavogadro/src/engine.h: Added a new signal for engines to indicate whether they have a settings dialog. 2009-06-07 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/savedialog.cpp: Allow "always build" 3D coordinates for multi-molecule file. Prevent saving to gzip files. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Switch to table widget for selecting molecules. Looks great. 2009-06-06 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui: Keep the spectra plot widget the same size on toggleCustomize(). Fixes PR#2801471 2009-06-06 Marcus D. Hanwell * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Finally got rid of the two argument moleculeChanged signal. * libavogadro/src/engine.cpp, libavogadro/src/engine.h: Some changes and improvements to the Engine base class. The default implementation only pays attention to Atom and Bond objects. If your engine handles other types the virtual functions can be reimplemented. 2009-06-06 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Added "view all molecules" -- need to debug, but heading out for errands. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Use MoleculeFile. Ready to use a QListWidget for selecting slices. * libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/src/openbabelwrapper.cpp: Update to use titlesRef and streamposRef() * libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h: Add filename parameters (currently unused) for replaceMolecule methods. 2009-06-02 Marcus D. Hanwell * avogadro/src/engineprimitiveswidget.cpp, avogadro/src/engineprimitiveswidget.h, avogadro/src/mainwindow.cpp, avogadro/src/primitiveitemmodel.cpp, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/molecule.cpp, libavogadro/src/python/engine.cpp, libavogadro/src/python/glwidget.cpp: Getting rid of all the primitive caching in GLWidget. This is the first part of my attempt to get rid of all the primitive caching in GLWidget. This works and compiles, but the PrimitiveItemModel is totally broken. Should be able to fix that up with a little work. 2009-06-06 Tim Vandermeersch * libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/src/openbabelwrapper.cpp: Add QStringList& MoleculeFile::titles() again as titles_p() 2009-06-06 Marcus D. Hanwell * libavogadro/src/plugin.cpp, libavogadro/src/plugin.h: Added a license virtual function to plugin, so that plugins can declare their license. * CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt: Find and link to zlib, qiocompressor implicitly links to zlib anyway. 2009-06-06 Geoff Hutchison * avogadro/src/importdialog.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/src/openbabelwrapper.cpp, libavogadro/src/python/openbabelwrapper.cpp: First pass at migrating MainWindow to OpenbabelWrapper & MoleculeFile. NOT ready for "prime-time" 2009-06-05 Geoff Hutchison * libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/molecule.cpp, libavogadro/src/tools/autoopttool.cpp: Add energy of the molecule when doing forcefield or autoopt interactions. Fixes PR#1976211. * scripts/find-po-email.py, scripts/find-translators.sh: Add scripts to pull e-mail addresses (or names) from Launchpad PO files. 2009-06-05 Marcus D. Hanwell * CMakeLists.txt, Doxyfile, cmake/modules/AvoCPack.cmake: Bumped version number to 0.9.6 in preparation for release. 2009-06-05 David Lonie * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h: Fix bug in vibration dialog sorting. Closes PR#2801711 2009-06-05 Geoff Hutchison * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Track the current conformer (e.g., for setting current energy). Track whether we're using an estimated dipole moment -- if so, delete the cache when the geometry changes. * libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h, libavogadro/src/painter.h: Add ellipsoid placeholder for ORTEP diagrams. * libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h: Minor warning fix. 2009-06-04 Geoff Hutchison * builder/amino/l-ala.zmat, libavogadro/src/extensions/insertpeptideextension.cpp: Fix some peptide builder bugs. Now ensures all amino acids will have bonds. 2009-06-03 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/gaussianfchk.h, libavogadro/src/extensions/orbitalextension.cpp: Added support for reading .fchk.gz Gaussian output. 2009-06-03 Geoff Hutchison * libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h: Finish addition of local Gaussian runs. Now works cleanly and will try to run formchk. * libavogadro/qtiocompressor/qtiocompressor.cpp, libavogadro/qtiocompressor/qtiocompressor.h: Added LGPL QtIOCompressor for reading compressed streams. * fragments/cyclic sugars/alpha-D-allopyranose.cml, .../cyclic sugars/alpha-D-arabinopyranose.cml, fragments/cyclic sugars/alpha-D-fucopyranose.cml, .../cyclic sugars/alpha-D-galactopyranose.cml, .../cyclic sugars/alpha-D-galacturonopyranose.cml, fragments/cyclic sugars/alpha-D-glucopyranose.cml, .../cyclic sugars/alpha-D-glucuronopyranose.cml, fragments/cyclic sugars/alpha-D-gulopyranose.cml, fragments/cyclic sugars/alpha-D-idopyranose.cml, fragments/cyclic sugars/alpha-D-lyxopyranose.cml, fragments/cyclic sugars/alpha-D-mannopyranose.cml, fragments/cyclic sugars/alpha-D-psicopyranose.cml, fragments/cyclic sugars/alpha-D-rhamnopyranose.cml, fragments/cyclic sugars/alpha-D-ribopyranose.cml, fragments/cyclic sugars/alpha-D-tagatopyranose.cml, fragments/cyclic sugars/alpha-D-talopyranose.cml, fragments/cyclic sugars/alpha-D-xylopyranose.cml, .../cyclic sugars/alpha-L-arabinopyranose.cml, fragments/cyclic sugars/alpha-L-fucopyranose.cml, .../cyclic sugars/alpha-L-galactopyranose.cml, fragments/cyclic sugars/alpha-L-lyxopyranose.cml, fragments/cyclic sugars/alpha-L-rhamnopyranose.cml, fragments/cyclic sugars/alpha-L-ribopyranose.cml, fragments/cyclic sugars/alpha-L-sorbopyranose.cml, fragments/cyclic sugars/alpha-L-xylopyranose.cml, fragments/cyclic sugars/beta-D-allopyranose.cml, fragments/cyclic sugars/beta-D-arabinopyranose.cml, fragments/cyclic sugars/beta-D-fructopyranose.cml, fragments/cyclic sugars/beta-D-fucopyranose.cml, fragments/cyclic sugars/beta-D-galactopyranose.cml, fragments/cyclic sugars/beta-D-glucopyranose.cml, fragments/cyclic sugars/beta-D-gulopyranose.cml, fragments/cyclic sugars/beta-D-idopyranose.cml, fragments/cyclic sugars/beta-D-lyxopyranose.cml, fragments/cyclic sugars/beta-D-mannopyranose.cml, fragments/cyclic sugars/beta-D-rhamnopyranose.cml, fragments/cyclic sugars/beta-D-ribopyranose.cml, fragments/cyclic sugars/beta-D-tagatopyranose.cml, fragments/cyclic sugars/beta-D-talopyranose.cml, fragments/cyclic sugars/beta-D-xylopyranose.cml, fragments/cyclic sugars/beta-L-arabinopyranose.cml, fragments/cyclic sugars/beta-L-lyxopyranose.cml, fragments/cyclic sugars/beta-L-ribopyranose.cml, fragments/cyclic sugars/beta-L-xylopyranose.cml, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h: Added cyclic sugars from Klotho repository, suggested by Magnus Lundborg 2009-06-02 Marcus D. Hanwell * Doxyfile, INSTALL, cmake/modules/AvoCPack.cmake, libavogadro/src/glwidget.h: Bumped version number in Doxyfile, few small updates to build files and docs. 2009-06-02 Geoff Hutchison * i18n/avogadro.pot, i18n/libavogadro.pot: POT files for 0.9.5. * i18n/avogadro_ar.ts, i18n/avogadro_bg.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_CA.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_id.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sk.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts, i18n/libavogadro_ar.ts, i18n/libavogadro_bg.ts, i18n/libavogadro_ca.ts, i18n/libavogadro_cs.ts, i18n/libavogadro_de.ts, i18n/libavogadro_en_CA.ts, i18n/libavogadro_en_GB.ts, i18n/libavogadro_es.ts, i18n/libavogadro_fi.ts, i18n/libavogadro_fr.ts, i18n/libavogadro_id.ts, i18n/libavogadro_it.ts, i18n/libavogadro_ja.ts, i18n/libavogadro_ko.ts, i18n/libavogadro_nb.ts, i18n/libavogadro_nl.ts, i18n/libavogadro_pl.ts, i18n/libavogadro_pt.ts, i18n/libavogadro_pt_BR.ts, i18n/libavogadro_ru.ts, i18n/libavogadro_sk.ts, i18n/libavogadro_sv.ts, i18n/libavogadro_tr.ts, i18n/libavogadro_uk.ts, i18n/libavogadro_zh_CN.ts, i18n/libavogadro_zh_TW.ts: Last pile of up-to-date translations. 2009-06-02 Marcus D. Hanwell * avogadro/src/engineprimitiveswidget.cpp, avogadro/src/mainwindow.cpp, avogadro/src/primitivetreeview.cpp: Fixed primitiveitemmodel.h includes for new location. * avogadro/src/primitiveitemmodel.cpp, avogadro/src/primitiveitemmodel.h, libavogadro/src/CMakeLists.txt, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/primitiveitemmodel.h: Moved primitiveitemmodel - only used by the engine widget. 2009-06-01 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/molecularpropdialog.ui, .../src/extensions/molecularpropextension.cpp, .../src/extensions/molecularpropextension.h, libavogadro/src/extensions/propextension.cpp: New molecular property window with formula, number of atoms, etc. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Add parameter to test if dipole moments are estimated or known accurately. 2009-06-01 Marcus D. Hanwell * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Added a default file name for new molecules. Added a default file name for new molecules, this should make handling of molecules without a name easier for plugins. Fixes part of bug 2786154 for example. 2009-06-01 Geoff Hutchison * libavogadro/src/periodictablescene_p.cpp, libavogadro/src/primitiveitemmodel.cpp: Add more krazy ignore comments 2009-06-01 Geoff Hutchison * avogadro/src/settingsdialog.ui, i18n/avogadro.pot, i18n/libavogadro.pot, scripts/extract-application-messages.sh, scripts/extract-library-messages.sh: Update POT to give contexts to messages. * i18n/avogadro.pot, i18n/avogadro_ar.ts, i18n/avogadro_bg.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_CA.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_id.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sk.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts, i18n/libavogadro.pot, i18n/libavogadro_ar.ts, i18n/libavogadro_bg.ts, i18n/libavogadro_ca.ts, i18n/libavogadro_cs.ts, i18n/libavogadro_de.ts, i18n/libavogadro_en_CA.ts, i18n/libavogadro_en_GB.ts, i18n/libavogadro_es.ts, i18n/libavogadro_fi.ts, i18n/libavogadro_fr.ts, i18n/libavogadro_id.ts, i18n/libavogadro_it.ts, i18n/libavogadro_ja.ts, i18n/libavogadro_ko.ts, i18n/libavogadro_nb.ts, i18n/libavogadro_nl.ts, i18n/libavogadro_pl.ts, i18n/libavogadro_pt.ts, i18n/libavogadro_pt_BR.ts, i18n/libavogadro_ru.ts, i18n/libavogadro_sk.ts, i18n/libavogadro_sv.ts, i18n/libavogadro_tr.ts, i18n/libavogadro_uk.ts, i18n/libavogadro_zh_CN.ts, i18n/libavogadro_zh_TW.ts, scripts/extract-application-messages.sh, scripts/extract-library-messages.sh: Updated translations for 0.9.5 from Launchpad. 2009-06-01 Tim Vandermeersch * libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/src/openbabelwrapper.cpp, libavogadro/tests/CMakeLists.txt, libavogadro/tests/moleculefiletest.cpp: Update OpenbabelWrapper & MoleculeFile + unit tests 2009-05-31 Geoff Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/colors/customcolor.cpp, libavogadro/src/colors/customcolor.h, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/elementcolor.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/simplewireengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/glpainter_p.cpp, libavogadro/src/python/color.cpp, libavogadro/src/tools/eyecandy.cpp: Revised syntax for Color class. No shadowed methods anymore. * avogadro/src/aboutdialog.cpp, avogadro/src/application.cpp, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/updatecheck.cpp, libavogadro/src/extensions/insertfragmentdialog.cpp, libavogadro/src/extensions/insertpeptideextension.cpp, libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/global.cpp, libavogadro/src/global.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/primitiveitemmodel.cpp: Krazy fixes (and comments for krazy ignore). 2009-05-30 Marcus D. Hanwell * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/updatedialog.cpp: Few small clean ups, added the option to disable the update checker at compile time. * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/updatecheck.cpp, avogadro/src/updatecheck.h, avogadro/src/updatedialog.cpp, avogadro/src/updatedialog.h: Added a class to check for an updated Avogadro version. This is the first pass at a tool to check for an updated version of Avogadro. Feedback would be appreciated. It checks a file on the web server, parses it and displays the release notes if the version is greater than that installed. It will only prompt once for any given version update, and should provide a link to our updates page. 2009-05-30 Tim Vandermeersch * libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/src/openbabelwrapper.cpp, libavogadro/src/openbabelwrapper.h, libavogadro/src/python/fileio.cpp, libavogadro/src/python/openbabelwrapper.cpp: Add support for error messages to OpenbabelWrapper and MoleculeFile * libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/tools/autoopttool.cpp: Extract forces from OBMol to set Atom::forceVector() (AutoOptTool & ForceFieldExtension) 2009-05-29 Tim Vandermeersch * libavogadro/src/tools/python/template.py, python/extensiontemplate.py, python/proteinextension.py, python/standalone.py, python/tooltemplate.py: Move the python tool template to an example folder. (Fixes #2795303, bug about "('paint(', , ')')") * libavogadro/src/protein.cpp, libavogadro/src/protein.h: Update documentation & remove some obsolete methods (were used by old cartoon engine) * libavogadro/src/python/Avogadro.py, libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/main.cpp: Rename Avogadro.[so/pyd] to _Avogadro.[so/pyd] and create Avogadro.py to ensure standalone scripts can load OB formats. * libavogadro/src/engines/hbondengine.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/neighborlist.cpp, libavogadro/src/neighborlist.h, libavogadro/src/protein.cpp, libavogadro/src/protein.h, libavogadro/src/python/neighborlist.cpp, libavogadro/tests/neighborlisttest.cpp: NeighborList: Add constructor taking QList HBondEngine: respect engine's primitives (draw H-bonds only to atoms in the engine's primitive list) Protein: Add some documentation OrbitalExtension: update for NeighborList changes * libavogadro/src/CMakeLists.txt, libavogadro/src/boxcontrol.cpp, libavogadro/src/boxcontrol.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/line.cpp, libavogadro/src/line.h, libavogadro/src/point.cpp, libavogadro/src/point.h, libavogadro/src/python/glwidget.cpp: Remove BoxControl, Point & Line classes 2009-05-28 Geoff Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/colors/customcolor.cpp: Save and read settings for colors. * libavogadro/src/extension.cpp, libavogadro/src/extension.h, libavogadro/src/pluginmanager.cpp: Add usefulness for extensions. Sort tools, extensions and colors before returning. 2009-05-27 Marcus D. Hanwell * libavogadro/src/elementdetail_p.cpp, libavogadro/src/elementitem_p.cpp: Fixed include, got rid of etab instantiations. 2009-05-27 Geoff Hutchison * libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/chargecolor.h, libavogadro/src/colors/customcolor.cpp, libavogadro/src/colors/customcolor.h, libavogadro/src/colors/distancecolor.h, libavogadro/src/colors/elementcolor.h, libavogadro/src/colors/indexcolor.h, libavogadro/src/colors/residuecolor.h: Added custom color plugin. This should be statically linked. 2009-05-27 David Lonie * libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added scaleLimits(PlotObject*) slot to plot widget. Automatically sets the limits of the plot based on the extremes of the passed PlotObject reference. The PlotObject can be omitted to look at all PlotObjects added to the widget. 2009-05-27 Tim Vandermeersch * libavogadro/src/extensions/highlighter.cpp, libavogadro/src/extensions/highlighter.h, libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/pythonterminal.h, libavogadro/src/extensions/pythonterminalwidget.ui: Improve python terminal, now a single widget like a real terminal... 2009-05-27 Marcus D. Hanwell * libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/trajvideomaker.h: Few minor clean ups, looking for the source of Windows linking issues. 2009-05-27 Tim Vandermeersch * libavogadro/src/CMakeLists.txt, libavogadro/src/cartoonmeshgenerator.cpp, libavogadro/src/cartoonmeshgenerator.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/engines/cartoonmeshgenerator.cpp, libavogadro/src/engines/cartoonmeshgenerator.h: Move CartoonMeshGenerator ouside libavogadro's API 2009-05-27 Geoff Hutchison * libavogadro/src/extensions/insertpeptidedialog.ui, .../src/extensions/insertpeptideextension.cpp, .../src/extensions/insertpeptideextension.h: Add chain numbering, plus terminal modifications. * builder/amino/l-arg.zmat, builder/amino/l-ser.zmat: Fix bonding in ARG and SER residues. 2009-05-27 Tim Vandermeersch * libavogadro/tests/CMakeLists.txt, libavogadro/tests/cartoonmeshbench.cpp: Remove CartoonMeshBench (obsolete) 2009-05-27 Geoff Hutchison * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui: Added element symbol + atom number for PR#2781947. 2009-05-27 Marcus D. Hanwell * libavogadro/src/elementdetail_p.cpp, libavogadro/src/elementdetail_p.h, libavogadro/src/elementitem_p.cpp, libavogadro/src/elementitem_p.h, libavogadro/src/periodictablescene_p.cpp, libavogadro/src/periodictablescene_p.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h: Separated private PeriodicTableView classes out into their own files. Only the periodic table view class is exported, and so the rest did not belong in a public header. There are some issues with the global etab that should be looked at, but they are in private classes. 2009-05-26 Marcus D. Hanwell * libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/python/painter.cpp: First pass at cleaning up the Painter API ready for 1.0. I think most of the changes made are quite conservative. Made the API a little more consistent, removed the QObject as I do not see any need for this to be a QObject. Added a couple of placeholder functions. 2009-05-26 Geoff Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/moleculefile.cpp, libavogadro/src/openbabelwrapper.cpp: Track down all remainin filenames needing QFile::encodeName. * avogadro/src/mainwindow.cpp, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_nmr.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/periodictableview.cpp, libavogadro/src/tools/clickmeasuretool.cpp: More localized numbers. This should be all of them. 2009-05-25 Geoff Hutchison * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/tools/bondcentrictool.cpp: Better localizations of numbers. 2009-05-25 David Lonie * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectratabir.ui, libavogadro/src/extensions/spectratabnmr.ui, libavogadro/src/extensions/spectratype.cpp, libavogadro/src/extensions/spectratype.h, libavogadro/src/extensions/spectratype_ir.cpp, libavogadro/src/extensions/spectratype_ir.h, libavogadro/src/extensions/spectratype_nmr.cpp, libavogadro/src/extensions/spectratype_nmr.h: Separated out the different spectra types to make it easier to add more and reduce clutter. 2009-05-25 Geoff Hutchison * libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationextension.cpp: Fix PR#2728372. Sync force engine and display force vector in dialog. * CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/insertpeptidedialog.ui, .../src/extensions/insertpeptideextension.cpp, .../src/extensions/insertpeptideextension.h: Peptide builder, including fragments. Still needs end-group modification. 2009-05-24 David Lonie * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Moved spectra tabs to separate ui files. * libavogadro/src/plotobject.cpp, libavogadro/src/plotobject.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added PlotWidget::setPointFollowMouse(bool), which places a small blue dot on the point nearest the cursor. * libavogadro/src/plotobject.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added some slots for selecting points The following slots will draw or clear (or both!) yellow circles at indicated points: selectPoint(PlotPoint*) Draw circle at indicated PlotPoint selectPoints(QList) Draw a circle at each PlotPoint in the list clearAndSelectPoints(PlotPoint*) Same as selectPoint(PlotPoint*), but clears the selection first. clearAndSelectPoint(QList) Same as selectPoints(QList), but clears the selection first. clearSelection() Clears all selected points. 2009-05-23 David Lonie * libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added a mouseover signal with the x, y coords in data units. 2009-05-23 Tim Vandermeersch * libavogadro/src/CMakeLists.txt, libavogadro/src/cartoonmeshgenerator.cpp, libavogadro/src/cartoonmeshgenerator.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/engines/cartoonengine.h, libavogadro/src/engines/cartoonsettingswidget.ui, libavogadro/src/mesh.h, libavogadro/tests/CMakeLists.txt, libavogadro/tests/cartoonmeshbench.cpp: CartoonMeshGenerator: put the mesh generating code in a thread, clean it up and fix a some performance problems. For some reason I was calling Mesh::setVertices (and setNormals/setColors) after generating mesh parts for each residue inside one of the inner loop functions. The mesh is now generated in a few msec. CartoonEngine: Add settings dialog with shape & color settings. Mesh: Add numVertices() & numNormals(), calling mesh->vertices.size() always copies the whole list right? CartoonMeshBench: Add benchmark for generating protein meshes. (not really needed anymore though) 2009-05-23 David Lonie * libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added three new signals to PlotWidget to retrieve points from a left click. pointClicked(double x, double y) x and y coordinates of click in data units. pointClicked(QList pl) List of PlotPoints within 4 pixels of click. pointClicked(PlotPoint*) PlotPoint nearest click. NULL if no points nearby. 2009-05-23 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/directorytreemodel.cpp, libavogadro/src/extensions/directorytreemodel.h, libavogadro/src/extensions/insertcommand.cpp, libavogadro/src/extensions/insertcommand.h, .../src/extensions/insertfragmentdialog.cpp, libavogadro/src/extensions/insertfragmentdialog.h, libavogadro/src/extensions/insertfragmentdialog.ui, .../src/extensions/insertfragmentextension.cpp, .../src/extensions/insertfragmentextension.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/directorytreemodel.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/tools/insertfragmentdialog.h, libavogadro/src/tools/insertfragmentdialog.ui: Move insert fragment into an extension (out of the draw tool). 2009-05-22 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/extension.h: Add new signal for extensions with "delayed" undo commands (e.g., show a window) Should work well for property extension and others. 2009-05-22 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Small clean up of old classes no longer used/included. 2009-05-22 Geoff Hutchison * avogadro/src/back.png, avogadro/src/down.png, avogadro/src/forward.png, avogadro/src/icons/back.png, avogadro/src/icons/down.png, avogadro/src/icons/forward.png, avogadro/src/icons/minus.png, avogadro/src/icons/plus.png, avogadro/src/icons/up.png, avogadro/src/minus.png, avogadro/src/plus.png, avogadro/src/up.png: Moved icons for project tree editor to be internally consistent. * avogadro/src/flowlayout.cpp, avogadro/src/flowlayout.h, avogadro/src/icontabwidget.cpp, avogadro/src/icontabwidget.h, avogadro/src/mainwindow.cpp: Removed flow layout in icon widget. * CMakeLists.txt, avogadro/src/mac/CompleteBundle.cmake.in, avogadro/src/mac/CreateBundle.sh.in: Attemping to get Qt plugins working for the Mac relocatable package. * i18n/avogadro.pot, i18n/libavogadro.pot: Current PO templates for Launchpad. 2009-05-20 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/extension.h, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/gaussianextension.cpp, .../src/extensions/networkfetchextension.cpp: Added a new parameter to the Extension moleculeChanged signal. This is still experimental, especially the naming of the enums. This allows the extension to specify how the new and old Molecule objects should be treated. So you can request a new window if the old molecule has been modified, prevent the old molecule from being deleted etc. * libavogadro/src/CMakeLists.txt, libavogadro/src/glhit.cpp, libavogadro/src/glhit.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Moved GLHit to its own header/implementation. 2009-05-20 Geoff Hutchison * builder/amino/d-ala.zmat, builder/amino/d-arg.zmat, builder/amino/d-asn.zmat, builder/amino/d-asp.zmat, builder/amino/d-cys.zmat, builder/amino/d-gln.zmat, builder/amino/d-glu.zmat, builder/amino/d-his.zmat, builder/amino/d-ile.zmat, builder/amino/d-leu.zmat, builder/amino/d-lys.zmat, builder/amino/d-met.zmat, builder/amino/d-phe.zmat, builder/amino/d-pro.zmat, builder/amino/d-ser.zmat, builder/amino/d-thr.zmat, builder/amino/d-trp.zmat, builder/amino/d-tyr.zmat, builder/amino/d-val.zmat, builder/amino/gly.zmat, builder/amino/l-ala.zmat, builder/amino/l-arg.zmat, builder/amino/l-asn.zmat, builder/amino/l-asp.zmat, builder/amino/l-cys.zmat, builder/amino/l-gln.zmat, builder/amino/l-glu.zmat, builder/amino/l-his.zmat, builder/amino/l-ile.zmat, builder/amino/l-leu.zmat, builder/amino/l-lys.zmat, builder/amino/l-met.zmat, builder/amino/l-phe.zmat, builder/amino/l-pro.zmat, builder/amino/l-pyl.zmat, builder/amino/l-sec.zmat, builder/amino/l-ser.zmat, builder/amino/l-thr.zmat, builder/amino/l-trp.zmat, builder/amino/l-tyr.zmat, builder/amino/l-val.zmat: Rename builder files to lowercase. * builder/amino/D-Ala.zmat, builder/amino/D-Arg.zmat, builder/amino/D-Asn.zmat, builder/amino/D-Asp.zmat, builder/amino/D-Cys.zmat, builder/amino/D-Gln.zmat, builder/amino/D-Glu.zmat, builder/amino/D-His.zmat, builder/amino/D-Ile.zmat, builder/amino/D-Leu.zmat, builder/amino/D-Lys.zmat, builder/amino/D-Met.zmat, builder/amino/D-Phe.zmat, builder/amino/D-Pro.zmat, builder/amino/D-Ser.zmat, builder/amino/D-Thr.zmat, builder/amino/D-Trp.zmat, builder/amino/D-Tyr.zmat, builder/amino/D-Val.zmat, builder/amino/Gly.zmat, builder/amino/L-Ala.zmat, builder/amino/L-Arg.zmat, builder/amino/L-Asn.zmat, builder/amino/L-Asp.zmat, builder/amino/L-Cys.zmat, builder/amino/L-Gln.zmat, builder/amino/L-Glu.zmat, builder/amino/L-His.zmat, builder/amino/L-Ile.zmat, builder/amino/L-Leu.zmat, builder/amino/L-Lys.zmat, builder/amino/L-Met.zmat, builder/amino/L-Phe.zmat, builder/amino/L-Pro.zmat, builder/amino/L-Pyl.zmat, builder/amino/L-Sec.zmat, builder/amino/L-Ser.zmat, builder/amino/L-Thr.zmat, builder/amino/L-Trp.zmat, builder/amino/L-Tyr.zmat, builder/amino/L-Val.zmat: Renaming builder files to lowercase. 2009-05-20 Marcus D. Hanwell * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/navigatesettingswidget.ui, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: New navigate settings widget - first phase - make Noel happier ;-) Added a new settings widget to allow control of whether the eye candy (visual cues) are displayed. This is a long requested feature from a few users and closes feature request 2349900. 2009-05-20 Geoff Hutchison * builder/amino/D-Ala.zmat, builder/amino/D-Arg.zmat, builder/amino/D-Asn.zmat, builder/amino/D-Asp.zmat, builder/amino/D-Cys.zmat, builder/amino/D-Gln.zmat, builder/amino/D-Glu.zmat, builder/amino/D-His.zmat, builder/amino/D-Ile.zmat, builder/amino/D-Leu.zmat, builder/amino/D-Lys.zmat, builder/amino/D-Met.zmat, builder/amino/D-Phe.zmat, builder/amino/D-Pro.zmat, builder/amino/D-Ser.zmat, builder/amino/D-Thr.zmat, builder/amino/D-Trp.zmat, builder/amino/D-Tyr.zmat, builder/amino/D-Val.zmat, builder/amino/Gly.zmat, builder/amino/L-Ala.zmat, builder/amino/L-Arg.zmat, builder/amino/L-Asn.zmat, builder/amino/L-Asp.zmat, builder/amino/L-Cys.zmat, builder/amino/L-Gln.zmat, builder/amino/L-Glu.zmat, builder/amino/L-His.zmat, builder/amino/L-Ile.zmat, builder/amino/L-Leu.zmat, builder/amino/L-Lys.zmat, builder/amino/L-Met.zmat, builder/amino/L-Phe.zmat, builder/amino/L-Pro.zmat, builder/amino/L-Pyl.zmat, builder/amino/L-Sec.zmat, builder/amino/L-Ser.zmat, builder/amino/L-Thr.zmat, builder/amino/L-Trp.zmat, builder/amino/L-Tyr.zmat, builder/amino/L-Val.zmat: Amino acid builder files. 2009-05-19 Geoff Hutchison * libavogadro/src/extensions/povpainter.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/zmatrixtool.h: Fix some compile warnings. * libavogadro/tests/CMakeLists.txt, libavogadro/tests/modeltest.cpp, libavogadro/tests/modeltest.h, libavogadro/tests/primitivemodeltest.cpp: Add test for QAbstractItemModels. Currently doesn't link. 2009-05-19 Tim Vandermeersch * libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/engines/cartoonengine.h, libavogadro/src/protein.cpp, libavogadro/src/protein.h: Improve protein rendering (ported cartoon-like mesh generation from Zodiac www.zeden.org). 2009-05-19 Geoff Hutchison * avogadro/src/CMakeLists.txt, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, i18n/avogadro.pot, i18n/libavogadro.pot, libavogadro/src/CMakeLists.txt, libavogadro/src/boxcontrol.cpp, libavogadro/src/global.cpp, libavogadro/src/openbabelwrapper.cpp, scripts/create-translations.sh, scripts/extract-application-messages.sh, scripts/extract-library-messages.sh: More translation fixes. * libavogadro/src/extensions/animationdialog.cpp, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/linmorphdialog.cpp, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/propmodel.cpp: Krazy fixes. * i18n/avogadro_ar.ts, i18n/avogadro_bg.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_CA.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sk.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts, i18n/libavogadro.pot, i18n/libavogadro_ar.ts, i18n/libavogadro_bg.ts, i18n/libavogadro_ca.ts, i18n/libavogadro_cs.ts, i18n/libavogadro_de.ts, i18n/libavogadro_en_CA.ts, i18n/libavogadro_en_GB.ts, i18n/libavogadro_es.ts, i18n/libavogadro_fi.ts, i18n/libavogadro_fr.ts, i18n/libavogadro_it.ts, i18n/libavogadro_ja.ts, i18n/libavogadro_ko.ts, i18n/libavogadro_nb.ts, i18n/libavogadro_nl.ts, i18n/libavogadro_pl.ts, i18n/libavogadro_pt.ts, i18n/libavogadro_pt_BR.ts, i18n/libavogadro_ru.ts, i18n/libavogadro_sk.ts, i18n/libavogadro_sv.ts, i18n/libavogadro_tr.ts, i18n/libavogadro_uk.ts, i18n/libavogadro_zh_CN.ts, i18n/libavogadro_zh_TW.ts, scripts/extract-application-messages.sh, scripts/extract-library-messages.sh, scripts/extract-messages.sh: Split translations into libavogadro and avogadro templates. * libavogadro/src/animation.h, libavogadro/src/atom.h, libavogadro/src/bond.h, libavogadro/src/boxcontrol.h, libavogadro/src/camera.h, libavogadro/src/color.h, libavogadro/src/colorbutton.h, libavogadro/src/cube.h, libavogadro/src/global.h: Update some copyright lines based on automated copyright.py script from Carsten. * avogadro/src/mainwindow.cpp, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/networkfetchextension.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/pythontool_p.cpp, libavogadro/src/pythontool_p.h, libavogadro/src/tool.h, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.h, libavogadro/src/tools/zmatrixtool.h: Translation fixes. Use QString::arg() more often, and add new Tool::settingsTitle() to improve context. * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/molpro.cpp, libavogadro/src/extensions/molproinputdialog.cpp, libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/mopacinputdialog.cpp, libavogadro/src/extensions/nwcheminputdialog.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/wiitrackextension.cpp: Fix additional QString/QChar krazy warnings. * libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui: Add support for running local g03 jobs. 2009-05-19 Geoff Hutchison * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/molproinputdialog.cpp, libavogadro/src/extensions/mopacinputdialog.cpp, libavogadro/src/extensions/nwcheminputdialog.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/plotobject.cpp, libavogadro/src/plotwidget.cpp, libavogadro/src/tools/zmatrixtool.cpp: More krazy & compile warnings fixes. 2009-05-18 Geoff Hutchison * avogadro/gl2ps/TODO, avogadro/gl2ps/gl2ps.c, avogadro/gl2ps/gl2ps.h, avogadro/gl2ps/gl2ps.pdf, avogadro/gl2ps/gl2psTest.c, avogadro/gl2ps/gl2psTestSimple.c: Import of GL2PS 1.3.3 -- latest stable release. * avogadro/src/aboutdialog.cpp, avogadro/src/addenginedialog.cpp, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/pluginsettings.h, avogadro/src/projectdelegates/labeldelegate.h, avogadro/src/projectdelegates/selectiondelegate.h, avogadro/src/projecttreeitem.h, avogadro/src/savedialog.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/gamesshighlighter.cpp, libavogadro/src/extensions/highlighter.cpp, libavogadro/src/extensions/linmorphextension.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/moleculefile.cpp, libavogadro/src/openbabelwrapper.cpp, libavogadro/src/plotwidget.cpp, libavogadro/src/protein.cpp, libavogadro/src/pythonengine_p.h, libavogadro/src/pythonerror.h, libavogadro/src/pythonextension_p.h, libavogadro/src/pythontool_p.h, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/zmatrixdialog.h: A whole pile of Krazy fixes. Still a bunch of GCC warnings to clean up too. 2009-05-18 Marcus D. Hanwell * libavogadro/src/tools/skeletontree.cpp, libavogadro/src/tools/skeletontree.h: Use const reference function arguments, rather than passing by value. 2009-05-17 Tim Vandermeersch * avogadro/src/engineitemmodel.cpp, avogadro/src/engineitemmodel.h, avogadro/src/enginelistview.cpp, avogadro/src/enginelistview.h, avogadro/src/mainwindow.cpp: Avogadro: connect the PluginManager::reloadPlugins() signal to the new GLWidget::reloadEngines() method and properly repopulate the EngineListView (EngineItemModel) 2009-05-17 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Check visibility of toolbars before fullscreen/normal mode. Added shortcut of escape key to Full Screen / normal mode. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Make sure tool settings and engine settings buttons are synced with visibility of the docks. * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/propmodel.h: Move most "properties" to the "View" menu -- hopefully it will be more intuitive to find them there. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: More GUI changes. New toolbar adds QPushButtons to hide/show tool and display settings. 2009-05-16 Tim Vandermeersch * libavogadro/src/glwidget.cpp, libavogadro/src/pythonengine_p.cpp, libavogadro/src/pythonerror.cpp, libavogadro/src/pythonerror.h, libavogadro/src/pythonextension_p.cpp, libavogadro/src/pythonthread_p.h, libavogadro/src/pythontool_p.cpp: Fix python Global Interpreter Lock (GIL) usage. (note: when running standalone python scripts, the Qt event loop seems to run in another thread which means we have to obtain the GIL. The pythonthread_p.h header contains a simple class which calls PyGILState_Ensure() in the constructor and PyStateGIL_Release in the destructor. * libavogadro/src/pythonengine_p.cpp, libavogadro/src/pythonengine_p.h, libavogadro/src/pythonextension_p.cpp, libavogadro/src/pythonextension_p.h, libavogadro/src/pythontool_p.cpp, libavogadro/src/pythontool_p.h: Remove d pointer from private classes (PythonTool, PythonExtension, PythonEngine). * avogadro/src/mainwindow.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/sip.cpp, libavogadro/src/python/std_vector.cpp, libavogadro/src/pythonengine_p.cpp, libavogadro/src/pythonerror.cpp, libavogadro/src/pythonerror.h, libavogadro/src/pythonextension_p.cpp, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/pythontool_p.cpp: Some changes to the way python is initialized. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Add Molecule::conformers() & fix for Molecule::clearConformers (set m_atomPos to m_atomConformers[0] after deleting all other conformers) 2009-05-16 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.ui, libavogadro/src/toolgroup.cpp: Move tools into a standard QToolBar with extra shortcuts (Ctrl+1, Ctrl+2, etc.) Still need to add buttons for toggling the toolSettings and displaySettings to the toolbar. 2009-05-16 Tim Vandermeersch * libavogadro/src/CMakeLists.txt, libavogadro/src/moleculefile.cpp, libavogadro/src/moleculefile.h, libavogadro/src/openbabelwrapper.cpp, libavogadro/src/openbabelwrapper.h: Add support for reading multiple molecules to OpenbabelWrapper. A file is read in a separate thread. By default, OpenbabelWrapper::readFile(...) waits for the thread to finish. It is also possible to connect to the returned object and a signal will be emitted when the file is read. (For reading large files +10000 molecules). Conformers are automatically detected which allows us to use any OBFormat with support for multiple molecules as conformer files. * libavogadro/src/animation.cpp, libavogadro/src/animation.h, libavogadro/src/extensions/animationdialog.cpp, libavogadro/src/extensions/animationdialog.h, libavogadro/src/extensions/animationdialog.ui, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/animationextension.h, libavogadro/src/python/animation.cpp: Some improvements to the Animation class. Remove duplicated code from the animation extension and use Animation class. Also added optional "dynamic bonds" for animating QM reactions. TODO: add a plot widget to display the energy 2009-05-15 Geoff Hutchison * libavogadro/src/extensions/gaussianinputdialog.ui, libavogadro/src/extensions/orbitaldialog.ui: Fix warnings from duplicate horizontal spacer names. Addresses PR#2786502. * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/tools/bondcentrictool.cpp: Fix bugs with editing angle and torsion values. Now you can set them as you wish. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/quaternion.cpp, libavogadro/src/tools/quaternion.h, libavogadro/src/tools/skeletontree.cpp, libavogadro/src/tools/skeletontree.h: Remove home-grown Quaternions from BondCentric tool and port to Eigen/Geometry classes. Much cleaner and appears to give a nice speed boost too. * libavogadro/src/animation.cpp, libavogadro/src/animation.h: Start on animation class documentation. * libavogadro/src/colorbutton.cpp, libavogadro/src/engines/orbitalsettingswidget.ui, libavogadro/src/engines/surfacesettingswidget.ui: Switch ColorButton to the Avogadro namespace. 2009-05-15 Marcus D. Hanwell * libavogadro/src/colorbutton.cpp, libavogadro/src/colorbutton.h, libavogadro/src/engines/orbitalsettingswidget.ui, libavogadro/src/engines/surfacesettingswidget.ui: Fixed to bring all the way into Avogadro namespace. Ported UI files. 2009-05-14 Geoff Hutchison * libavogadro/src/colorbutton.h, libavogadro/src/glwidget.h, libavogadro/src/line.h, libavogadro/src/neighborlist.h, libavogadro/src/plotaxis.h, libavogadro/src/plotobject.h, libavogadro/src/plotpoint.h, libavogadro/src/plotwidget.h, libavogadro/src/point.h, libavogadro/src/protein.h, libavogadro/src/pythoninterpreter.h, libavogadro/src/zmatrix.h: Documentation fixes. * CMakeLists.txt, avogadro/src/mac/CompleteBundle.cmake.in, avogadro/src/mac/CreateBundle.sh.in, libavogadro/src/CMakeLists.txt: Fixes for Cmake builds with Mac .app package. 2009-05-14 Marcus D. Hanwell * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/openbabelwrapper.cpp, libavogadro/src/openbabelwrapper.h: Openbabel wrapper class to open and save files. This class takes care of opening and saving files using Openbabel. It could use some finer grained error control possibly, it does take care of preserving UTF8 file names and allows for simple calls that can read and write molecule data files. 2009-05-14 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.ui: Remove "smooth animations option." Always use smooth animations, unless the system is large (> 1000 atoms). We can debate the "large" threshold, but why wouldn't we want some eyecandy? 2009-05-14 Marcus D. Hanwell * libavogadro/CMakeLists.txt, libavogadro/src/colors/chargecolor.cpp, libavogadro/src/colors/distancecolor.cpp, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/indexcolor.cpp, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/simplewireengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/extensions/animationdialog.cpp, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/basisset.cpp, .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/constraintsdialog.cpp, libavogadro/src/extensions/constraintsmodel.cpp, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/forcefielddialog.cpp, libavogadro/src/extensions/forcefieldextension.cpp, .../src/extensions/gamessefpmatchdialog.cpp, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamesshighlighter.cpp, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/highlighter.cpp, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/liganddialog.cpp, libavogadro/src/extensions/linmorphdialog.cpp, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/molproinputdialog.cpp, libavogadro/src/extensions/mopacinputdialog.cpp, .../src/extensions/networkfetchextension.cpp, libavogadro/src/extensions/nwcheminputdialog.cpp, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/pocketdialog.cpp, libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectraextension.cpp, libavogadro/src/extensions/supercelldialog.cpp, libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/extensions/templateextension.cpp, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellparamdialog.cpp, libavogadro/src/extensions/vdwsurface.cpp, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/wiitrackextension.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/skeletontree.cpp, libavogadro/src/tools/zmatrixdialog.cpp, libavogadro/src/tools/zmatrixmodel.cpp, libavogadro/src/tools/zmatrixtool.cpp: Migrated plugins to use qt4_wrap_cpp to generate MOC files. All plugins, apart from the few static ones, now use qt4_wrap_cpp macro to generate moc files, these are then built and linked to the plugin rather than directly included. Some extra logic has been introduced into the avogadro_plugin function to deal with grc and ui files more gracefully too. 2009-05-14 Geoff Hutchison * libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h: Add a "slop" to make it easier to pick atoms. 2009-05-13 Geoff Hutchison * libavogadro/src/extensions/molpro.cpp, libavogadro/src/extensions/molpro.h: Patch from Michael Banck (PR#2786157) Update for the molpro molecular orbital code. Now can parse and display cc-pVDZ basis set based MOs. Cartesian basis sets still not implemented (but they are not default in MOLPRO anyway). 2009-05-13 Marcus D. Hanwell * CMakeLists.txt, cmake/modules/AvogadroConfigVersion.cmake.in: Added versioning to the AvogadroConfig logic. Now added versioning to the AvogadroConfig logic, see the documentation to find_package for more details. In CMakeLists.txt files simply add a line such as find_package(Avogadro 0.9.4 REQUIRED) to only accept Avogadro versions greater than or equal to 0.9.4. As a side effect this will also stop Mac installed AvogadroConfig.cmake files from being used, if the config file has no accompanying version file is will be rejected when a version is requested. 2009-05-13 Marcus Hanwell * CMakeLists.txt, libavogadro/src/pluginmanager.cpp: Mac changes, default to installing in /Applications/Avogadro.app, load plugins relative to location only. * CMakeLists.txt, avogadro/src/CMakeLists.txt: Added a new option to make packages, initially just affects the make install for Mac. 2009-05-13 Marcus D. Hanwell * avogadro/src/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/python/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt, libavogadro/tests/CMakeLists.txt: Improved the handling of library dependencies for Avogadro. Renamed the avogadro-lib target to avogadro, this allows CMake to automatically assemble the library dependencies for the Avogadro library. This fixes link issues seen on the Mac. 2009-05-13 Marcus Hanwell * CMakeLists.txt, avogadro/src/CMakeLists.txt, avogadro/src/mac/CompleteBundle.cmake.in, avogadro/src/mac/CreateBundle.sh.in, avogadro/src/main.cpp, cmake/modules/AvoCPack.cmake, cmake/modules/AvoCPackOptions.cmake.in, libavogadro/src/CMakeLists.txt, libavogadro/src/pluginmanager.cpp: Relocatable Apple Mac package as part of a super project. This is the first merge of work I have been doing to make a relocatable Mac application bundle with all libraries included. Currently this works if you run make install, I have been using Avogadro0.9.app as that can be installed in parallel to the default Avogadro.app directory. Initial testing looks pretty good, but some more work is needed to automate the actual building of a package. 2009-05-13 Geoff Hutchison * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp: General appearance and code cleanup of properties tables. 2009-05-12 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/propmodel.h: First pass at editing bond, angle, and dihedral properties. Changing bond length now works. 2009-05-12 Tim Vandermeersch * libavogadro/src/python/animation.cpp, libavogadro/src/python/atom.cpp, libavogadro/src/python/bond.cpp, libavogadro/src/python/camera.cpp, libavogadro/src/python/color.cpp, libavogadro/src/python/cube.cpp, libavogadro/src/python/elementtranslator.cpp, libavogadro/src/python/engine.cpp, libavogadro/src/python/extension.cpp, libavogadro/src/python/fragment.cpp, libavogadro/src/python/glgraphicsview.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/mesh.cpp, libavogadro/src/python/meshgenerator.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/navigate.cpp, libavogadro/src/python/neighborlist.cpp, libavogadro/src/python/periodictableview.cpp, libavogadro/src/python/plugin.cpp, libavogadro/src/python/pluginmanager.cpp, libavogadro/src/python/primitive.cpp, libavogadro/src/python/primitivelist.cpp, libavogadro/src/python/residue.cpp, libavogadro/src/python/std_vector.cpp, libavogadro/src/python/tool.cpp, libavogadro/src/python/toolgroup.cpp, libavogadro/src/python/unittest/mesh.py: Update python bindings for recent changes 2009-05-12 Geoff Hutchison * libavogadro/src/cube.cpp, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/hbondengine.h, libavogadro/src/meshgenerator.cpp, libavogadro/src/navigate.cpp, libavogadro/src/neighborlist.cpp, libavogadro/src/neighborlist.h: Fix a variety of minor compiler errors. 2009-05-12 Marcus D. Hanwell * libavogadro/src/atom.cpp, libavogadro/src/primitive.h, libavogadro/src/residue.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/drawcommand.cpp: Use templated C++ function to find max unsigned long value. 2009-05-12 Geoff Hutchison * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Added a timer-based key handler. Now accepts multi-character element symbols. * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Handle one-character elements. You can now type "c" or "o" to switch to carbon and oxygen. 2009-05-11 Geoff Hutchison * libavogadro/src/colorbutton.cpp, libavogadro/src/colorbutton.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h: Add simple QWidget::event handlers for future expansion, as suggested by Qt coding conventions: http://qt.gitorious.org/qt/pages/CodingConventions * avogadro/src/engineitemmodel.cpp, avogadro/src/mainwindow.cpp, avogadro/src/pluginsettings.cpp, avogadro/src/settingsdialog.cpp, libavogadro/src/colors/distancecolor.cpp, libavogadro/src/colors/indexcolor.cpp, libavogadro/src/toolgroup.cpp: Don't use dynamic casts unless necessary. Even on Mac, qobject_cast works great. * libavogadro/src/atom.cpp, libavogadro/src/primitive.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/drawcommand.cpp: Fix use of -1 with unsigned int/long. Instead use UINT_MAX or ULONG_MAX. 2009-05-10 marcus * libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/cylinder_p.cpp, libavogadro/src/cylinder_p.h, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/glpainter_p.cpp, libavogadro/src/glpainter_p.h, libavogadro/src/glwidget.cpp, libavogadro/src/pluginmanager.cpp, libavogadro/src/pythonengine.cpp, libavogadro/src/pythonengine.h, libavogadro/src/pythonengine_p.cpp, libavogadro/src/pythonengine_p.h, libavogadro/src/pythonextension.cpp, libavogadro/src/pythonextension.h, libavogadro/src/pythonextension_p.cpp, libavogadro/src/pythonextension_p.h, libavogadro/src/pythontool.cpp, libavogadro/src/pythontool.h, libavogadro/src/pythontool_p.cpp, libavogadro/src/pythontool_p.h, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h, libavogadro/src/sphere_p.cpp, libavogadro/src/sphere_p.h, libavogadro/src/textrenderer.cpp, libavogadro/src/textrenderer.h, libavogadro/src/textrenderer_p.cpp, libavogadro/src/textrenderer_p.h: Moved private headers to classname_p.h header flies. All private headers should be placed in a classname_p.h style file name in order to make it clear that these are private classes not exposed in our API. Private classes do not need d-pointers etc as their symbols are not exported and no external programs should be referencing them. 2009-05-08 Tim Vandermeersch * avogadro/src/pluginsettings.cpp, libavogadro/src/pythonengine.cpp, libavogadro/src/pythonextension.cpp, libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h, libavogadro/src/pythontool.cpp: libavogadro/src/pythonscript.*: Add identifier method. Use the Sha1 of script's content as identifier. (Fixes: libavogadro/src/python[tool,engine,extension].cpp: Use the new PythonScript::identifier() method. 2009-05-07 Marcus D. Hanwell * libavogadro/src/extensions/gamesshighlighter.cpp, libavogadro/src/extensions/gamesshighlighter.h: Added some more logic to the syntax highlighting, experimenting with the rules. * .../src/extensions/networkfetchextension.cpp, libavogadro/src/extensions/networkfetchextension.h: Added function to fetch a file from any URL. 2009-05-06 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Added support for loading calculated spectra that may not be included in molecule, e.g. PWSCF output. PWSCF output does not contain geometries, and a user requested the ability to load the IR data that it outputs. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui: Peak labeling for NMR 2009-05-05 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Added gaussian widths to NMR spectra. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Cleaned up signals and added a reference offset to NMR plots. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/vibrationdialog.cpp: Allow inspection of vibrational frequencies when there are no intensities. Spectra extension uses an arbitrary intensity and warns the user, vibration extension uses "-" in place of the intensity on the table. 2009-05-04 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Added inital support for visualizing NMR data stored as "NMR Isotropic Shift" per OBAtom. 2009-05-04 Geoff Hutchison * i18n/avogadro.pot, i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts, libavogadro/src/elementtranslator.h: Update translations. 2009-05-04 Marcus D. Hanwell * libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/glwidget.cpp: Fixed the engine list view when plugins are removed. This fixes the case where an engine plugin is removed and the names got messed up. It still does not handle the case where new engine plugins are added but not added automatically. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gamesshighlighter.cpp, libavogadro/src/extensions/gamesshighlighter.h, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gamessinputdialog.h: Initial support for syntax highlighting in GAMESS input generator. This is still quite early stage, and needs many more rules. It already demonstrates the basic concepts after talking to Albert DeFusco about GAMESS syntax highlighting and some of the work he has done with vim. 2009-05-02 Tim Vandermeersch * libavogadro/src/extensions/pythonterminal.h, scripts/cmake-msvc2008.bat: libavogadro/src/extensions/pythonterminal.h: fix header issue. 2009-05-02 Marcus D. Hanwell * CMakeLists.txt, Doxyfile, avogadro/CMakeLists.txt, avogadro/src/config.h.in, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/config.h.in: Bumped the version number to 0.9.4 in preparation for tagging. Centralised the version numbering - only needs changing in TWO places now! * CMakeLists.txt, avogadro/src/CMakeLists.txt: Added an option to use RPath at install tiem. Can cause issues on some distros if installed in /usr. 2009-05-01 David Lonie * libavogadro/src/plotaxis.cpp, libavogadro/src/plotaxis.h, libavogadro/src/plotobject.cpp, libavogadro/src/plotobject.h, libavogadro/src/plotpoint.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Cleaned up whitespace with QtCreator. 2009-05-01 Geoff Hutchison * i18n/avogadro.pot, i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: Updated translations for 0.9.4. 2009-05-01 Tim Vandermeersch * libavogadro/src/CMakeLists.txt, libavogadro/src/pythonengine.cpp, libavogadro/src/pythonengine.h, libavogadro/src/pythonextension.cpp, libavogadro/src/pythonextension.h, libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h, libavogadro/src/pythontool.cpp, libavogadro/src/pythontool.h: Some changes to python includes to compile with cryos' recent changes * libavogadro/src/python/engine.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/pluginmanager.cpp, libavogadro/src/python/tool.cpp, libavogadro/src/python/toolgroup.cpp, libavogadro/src/python/unittest/engine.py, libavogadro/src/python/unittest/glwidget.py, libavogadro/src/python/unittest/toolgroup.py: Some updates to the python bindings and python unit tests. All tests should pass again. * scripts/cmake-msvc2008.bat, scripts/cmake-vs2005.bat: Rename scripts/cmake-vs2005.bat to scripts/cmake-msvc2008.bat * cmake/modules/AvoCPack.cmake, cmake/modules/FindNumpy.cmake, libavogadro/src/python/CMakeLists.txt, scripts/cmake-vs2005.bat: cmake/modules/AvoCPack.cmake: Changes to correctly include all python stuff cmake/modules/FindNumpy.cmake: Small bug fix, wasen't working here libavogadro/src/python/CMakeLists.txt: Set library SUFFIX property to ".pyd" on WIN32 scripts/cmake-vs2005.bat: update for python & GLSL support 2009-04-30 Michael Banck * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/molproinputdialog.cpp, libavogadro/src/extensions/molproinputdialog.h, libavogadro/src/extensions/molproinputdialog.ui: New Molpro input file generator. 2009-04-29 Marcus D. Hanwell * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/networkfetchextension.cpp, libavogadro/src/extensions/networkfetchextension.h: First network aware extension - direct PDB downloads. This is the first network aware extension. I added QtNetwork to the Avogadro library as I think we will want to use the network more and more in the future. This extension is a very simple proof of concept - it attempts to download the named PDB from the PDB site. * avogadro/src/CMakeLists.txt, libavogadro/include/avogadro/animation.h, libavogadro/include/avogadro/atom.h, libavogadro/include/avogadro/bond.h, libavogadro/include/avogadro/boost.h, libavogadro/include/avogadro/boxcontrol.h, libavogadro/include/avogadro/camera.h, libavogadro/include/avogadro/color.h, libavogadro/include/avogadro/colorbutton.h, libavogadro/include/avogadro/cube.h, libavogadro/include/avogadro/cylinder.h, libavogadro/include/avogadro/elementtranslator.h, libavogadro/include/avogadro/engine.h, libavogadro/include/avogadro/extension.h, libavogadro/include/avogadro/filetreeitem.h, libavogadro/include/avogadro/fragment.h, libavogadro/include/avogadro/glgraphicsview.h, libavogadro/include/avogadro/global.h, libavogadro/include/avogadro/glpainter.h, libavogadro/include/avogadro/glwidget.h, libavogadro/include/avogadro/idlist.h, libavogadro/include/avogadro/line.h, libavogadro/include/avogadro/mesh.h, libavogadro/include/avogadro/meshgenerator.h, libavogadro/include/avogadro/molecule.h, libavogadro/include/avogadro/moleculetreeview.h, libavogadro/include/avogadro/navigate.h, libavogadro/include/avogadro/neighborlist.h, libavogadro/include/avogadro/painter.h, libavogadro/include/avogadro/painterdevice.h, libavogadro/include/avogadro/periodictableview.h, libavogadro/include/avogadro/plotaxis.h, libavogadro/include/avogadro/plotobject.h, libavogadro/include/avogadro/plotpoint.h, libavogadro/include/avogadro/plotwidget.h, libavogadro/include/avogadro/plugin.h, libavogadro/include/avogadro/pluginmanager.h, libavogadro/include/avogadro/point.h, libavogadro/include/avogadro/povpainter.h, libavogadro/include/avogadro/primitive.h, libavogadro/include/avogadro/primitiveitemmodel.h, libavogadro/include/avogadro/primitivelist.h, libavogadro/include/avogadro/protein.h, libavogadro/include/avogadro/pythonerror.h, libavogadro/include/avogadro/pythoninterpreter.h, libavogadro/include/avogadro/pythonscript.h, libavogadro/include/avogadro/residue.h, libavogadro/include/avogadro/sphere.h, libavogadro/include/avogadro/textrenderer.h, libavogadro/include/avogadro/tool.h, libavogadro/include/avogadro/toolgroup.h, libavogadro/include/avogadro/undosequence.h, libavogadro/include/avogadro/zmatrix.h, libavogadro/src/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/protein.cpp: Use CMake to generate the include directory at build time. This is all part of my evil plan to have CMake do all the mundane tasks so that you have no excuse but to implement cool new features. The Avogadro headers are now copied at CMake time into the build directory, this is used to build against and those same headers are installed. 2009-04-28 Marcus D. Hanwell * libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/plotwidget.cpp: Added an extra include that is needed for Open Babel 2.2.1. * avogadro/src/engineitemmodel.cpp, libavogadro/src/boxcontrol.cpp, libavogadro/src/boxcontrol.h, libavogadro/src/color.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/mopacinputdialog.cpp, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/vdwsurface.cpp, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/molecule.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/pythontool.cpp, libavogadro/src/pythontool.h, libavogadro/src/textrenderer.cpp, libavogadro/src/tool.cpp, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/zmatrixdialog.cpp, libavogadro/src/tools/zmatrixdialog.h, libavogadro/src/tools/zmatrixdialog.ui, libavogadro/src/tools/zmatrixtool.cpp, libavogadro/src/tools/zmatrixtool.h: Removed several includes from glwidget.h, less global includes. * CMakeLists.txt, cmake/modules/CTestCustom.cmake.in: GCC flags tweaked and CTestCustom.cmake added for CDash submission I removed -Wundef from the GCC flags for now, too many warnings from the Boost headers are generated to be useful. I also added a CTestCustomConfig.cmake.in to ignore some warnings on Windows and for eigen.cpp which has a massive number of warnings (this should be looked at separately). * libavogadro/tests/CMakeLists.txt, libavogadro/tests/moleculebench.cpp: Added some initial Molecule benchmarking code. 2009-04-24 Marcus D. Hanwell * CMakeLists.txt, cmake/modules/AvogadroConfig.cmake.in, libavogadro/src/CMakeLists.txt, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Modifications to build system to allow including in a super project. 2009-04-23 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Major code changes to spectradialog.* * Added many more comments * Organized functions a bit more logically * Separated out and identified all spectra-specific var, functions, etc * Rewrote import function to be much smaller. 2009-04-23 Geoff Hutchison * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: Update to prevent Python breakage. Use an overloaded parameter for loadFactories(). 2009-04-23 Marcus D. Hanwell * CMakeLists.txt, cmake/modules/AvogadroConfig.cmake.in, cmake/modules/AvogadroUse.cmake: Install an AvogadroConfig.cmake file and supporting files. Changes to install an AvogadroConfig.cmake file, along with several supporting files. This negates the need for a FindAvogadro.cmake file and also introduces an AvogadroUse.cmake file which makes building against the installed Avogadro library much simpler. Supporting example project will be added to GitHub shortly. * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: Tweaks to the plugin loading code Addded the contrib directory to the list of default searched paths. Also added a new void PluginManager::loadFactories(const QString& dir) to load plugins from a supplied directory path. * avogadro/src/aboutdialog.cpp, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/savedialog.cpp, libavogadro/src/boxcontrol.cpp, libavogadro/src/camera.cpp, libavogadro/src/color.cpp, libavogadro/src/colors/chargecolor.cpp, libavogadro/src/colors/distancecolor.cpp, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/indexcolor.cpp, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/simplewireengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/idlist.cpp, libavogadro/src/plugin.cpp, libavogadro/src/primitive.cpp, libavogadro/src/primitivelist.cpp, libavogadro/src/pythonengine.cpp, libavogadro/src/pythonextension.cpp, libavogadro/src/pythontool.cpp, libavogadro/src/tool.cpp, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/undosequence.cpp: Fixing up config.h includes - many places where it was not needed. 2009-04-22 Marcus D. Hanwell * CMakeLists.txt, CTestConfig.cmake, cmake/modules/AvoCTestConfig.cmake: The CTestConfig.cmake was moved, some small changes to the build system. 2009-04-21 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h: Renamed member var and fixed segfault in Qt 4.4 work around. schemes --> m_schemes QHashIterator in writeSettings() never advanced to allow data to be accessed, resulting in non-persistent schemes and assertion problems. 2009-04-20 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h: Cleanup and put in frame work to begin thinking about other sorts of spectra. 2009-04-17 Michael Banck * testfiles/methane.g03, testfiles/methane.inp, testfiles/methane.mp, testfiles/methane.mpo, testfiles/methane.nwo: Added some new test files for quantum output processing. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/molpro.cpp, libavogadro/src/extensions/molpro.h, libavogadro/src/extensions/orbitalextension.cpp: Added support for reading Molpro output files in. 2009-04-16 Marcus D. Hanwell * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/propmodel.h, libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Added a new signal to the Molecule, used in the properties extensions. Still needs work. 2009-04-15 Marcus D. Hanwell * libavogadro/include/avogadro/elementtranslator.h, libavogadro/src/CMakeLists.txt, libavogadro/src/elementtranslator.cpp, libavogadro/src/elementtranslator.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/simplewireengine.h, libavogadro/src/periodictableview.cpp, libavogadro/src/python/TODO, libavogadro/src/tools/drawtool.cpp: Moved the ElementTranslator class to be consistent with the class name. 2009-04-14 David Lonie * libavogadro/src/extensions/nwcheminputdialog.cpp, libavogadro/src/extensions/nwcheminputdialog.ui: Add multiplicity options back in to nwchem generator (only for DFT) 2009-04-12 David Lonie * libavogadro/src/extensions/nwcheminputdialog.cpp, libavogadro/src/extensions/nwcheminputdialog.ui: Cleaned up nwchem input generator. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/nwcheminputdialog.cpp, libavogadro/src/extensions/nwcheminputdialog.h, libavogadro/src/extensions/nwcheminputdialog.ui: Initial addition of NWChem input generator. 2009-04-09 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectraextension.cpp: Cleaned up whitespace with qt creator 2009-04-08 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/simplewireengine.cpp, libavogadro/src/engines/simplewireengine.h: Added a new engine - super simple wire frame engine. Mainly for testing purposes and as an example of a very simple engine. 2009-04-07 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added an option to optimize the font size of exported images to spectradialog.*, and the necessary code to plotwidget.*. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui, libavogadro/src/plotwidget.cpp: Fixed some font and spacing issues in image export. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui, libavogadro/src/plotobject.cpp, libavogadro/src/plotobject.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: * Fixed up image export with some new options. * Added file output to the plot widget 2009-04-06 Marcus D. Hanwell * libavogadro/CMakeLists.txt, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Added a new CMake function - avogadro_plugin. Migrated plugins to it. The avogadro_plugin function allows developers to easily add new plugins, makes our build files more concise. Allows for global changes in the way plugins are built in the future. 2009-04-06 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Moved spectra image export to a tab. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Added a spectra tsv export feature. 2009-04-06 Marcus D. Hanwell * CMakeLists.txt, avogadro/src/aboutdialog.cpp, avogadro/src/config.h.in, avogadro/src/main.cpp, libavogadro/src/config.h.in, libavogadro/src/global.cpp, libavogadro/src/global.h: Updates to the handling of builds from Git clones - now report the hash the build was made against. 2009-04-06 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui: Restructure GUI to use tabs in the spectra extension 2009-04-05 David Lonie * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui: Spectra now use persistent, customizable color schemes. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectraextension.cpp, libavogadro/src/extensions/spectraextension.h: * Added persistant settings to spectra extension * Cleaned up debugging output * Started framework for color schemes 2009-04-03 David Lonie * testfiles/methanol.jdx, testfiles/methanol.nwo: Added two testfiles: an NWChem out with IR data, and a .jdx for JCAMP-DX spectrum tests. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui: Better handling in spectra extension for files without valid data. * libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.ui: Fixed some bugs in the spectra extension * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/spectradialog.cpp, libavogadro/src/extensions/spectradialog.h, libavogadro/src/extensions/spectradialog.ui, libavogadro/src/extensions/spectraextension.cpp, libavogadro/src/extensions/spectraextension.h, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Moved spectra plotting to its own extension. 2009-04-01 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Added a gaussian superposition of peaks to vibrationplot.*. 2009-04-01 Geoff Hutchison * CMakeLists.txt, scripts/create-translations.sh: Added custom command for "create-translations" -- use lconvert from PO -> TS * i18n/avogadro.pot, i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: Update translations from Launchpad. * libavogadro/src/tools/zmatrixmodel.cpp, libavogadro/src/tools/zmatrixmodel.h: Added Q_OBJECT macro and moc output. 2009-04-01 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: Improvements to orbital engine handling of colored meshes. * CMakeLists.txt, avogadro/CMakeLists.txt, cmake/modules/AvoCPack.cmake, libavogadro/CMakeLists.txt: Version bump in preparation for tagging the 0.9.3 release. 2009-04-01 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Enable configuration of plot font in vibrationplot.*.. * libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Options to get font are nice too :) * libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added code to change font in plot widget. 2009-04-01 Marcus D. Hanwell * libavogadro/src/molecule.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/zmatrixdialog.cpp, libavogadro/src/tools/zmatrixdialog.h, libavogadro/src/tools/zmatrixdialog.ui, libavogadro/src/tools/zmatrixmodel.cpp, libavogadro/src/tools/zmatrixmodel.h, libavogadro/src/tools/zmatrixtool.cpp, libavogadro/src/zmatrix.cpp, libavogadro/src/zmatrix.h: Lots of changes to the z matrix tool. It actually does stuff now, disabling by default. It is far from ready to be used yet. 2009-04-01 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Added support for absorbances in vibrationplot.* * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Replaced vibrationplot.* scaling slider/text edit with spin box 2009-03-31 David Lonie * libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: plotwidgets can zoom with scroll wheel now. * libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Allow a default limit to be set and reapplied by a doubleclick. Also change the click-and-drag to use the right mouse button for consistancy with the gl canvas. 2009-03-31 Marcus D. Hanwell * libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h: Initial fixes for bug 2723686, create dialogs for the views. I am not sure that the logic is correct for the views created here. 2009-03-31 David Lonie * libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added simple click-and-drag plot movement. 2009-03-30 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Added option to toggle off the calculated spectra, just for completeness sake. 2009-03-29 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.ui: Fixed some git-merging conflicts... * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Added options to vibrationplot.* for color, font size, etc... * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Added options to vibrationplot.* for color, font size, etc... 2009-03-29 Marcus D. Hanwell * libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/molecule.cpp: Do not do ring perception on load - terrible performance for big systems. Also blocked signals for performance reasons and updated the super cell extension a little. 2009-03-28 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Grouped customization options together. 2009-03-27 Marcus D. Hanwell * libavogadro/include/avogadro/zmatrix.h, libavogadro/src/CMakeLists.txt, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/zmatrixdialog.cpp, libavogadro/src/tools/zmatrixdialog.h, libavogadro/src/tools/zmatrixdialog.ui, libavogadro/src/tools/zmatrixmodel.cpp, libavogadro/src/tools/zmatrixmodel.h, libavogadro/src/tools/zmatrixtool.cpp, libavogadro/src/tools/zmatrixtool.h, libavogadro/src/zmatrix.cpp, libavogadro/src/zmatrix.h: Initial work on a new z matrix editor. Far from complete just yet. Questionable whether it belongs with the other tools, but does need mouse interaction. * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Some improvements to the drawing tool, lazy initialization, clean ups. 2009-03-27 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Added simple image output to vibrationplot.*. 2009-03-27 Marcus D. Hanwell * libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/aligntool.h: Reduced the number of includes massively. 2009-03-26 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Added in an import function to vibrationplot.* that can overlay experimental spectra. General retooling of plotobject handling. GUI changes. 2009-03-26 Marcus D. Hanwell * libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/tools/insertfragmentdialog.h: Small changes to indentation and variable names. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/python/molecule.cpp: Inlined a few functions that are called a lot. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Moved the atom and bond storage into the class, should allow some inlining. 2009-03-25 David Lonie * libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationplot.ui: GUI changes for vibrationplot.* 2009-03-25 Marcus D. Hanwell * CMakeLists.txt, avogadro/src/CMakeLists.txt: Second thoughts - relative RPATH is only needed for executables. 2009-03-24 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/glpainter.cpp: A few small adjustments to use the correct colour transparency when rendering using colorMesh. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: Fixed up the orbital selection, previously had bugs when several meshes were present. 2009-03-23 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Added labels to the peaks and changed the font so that it would actually be legible. Removed debug output and unnecessary credits. * libavogadro/src/plotaxis.cpp, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Removed debug output and added the ability to change font size through PlotWidget::setFontSize(int pointSize). 2009-03-23 Marcus D. Hanwell * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h: Removed #warning - it is a GCC extension. Removed unimplemented slot - caused link issues on Windows. * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h: Added the D5 type orbitals for electron density calculations. * libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/tools/navigatetool.cpp: Only do space group transformations when there is a space group. Otherwise duplicate the unit cell to make a supercell. 2009-03-23 David Lonie * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Cleaned up vibration plot a bit.. 2009-03-22 David Lonie * libavogadro/include/avogadro/plotaxis.h, libavogadro/include/avogadro/plotobject.h, libavogadro/include/avogadro/plotpoint.h, libavogadro/include/avogadro/plotwidget.h, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui, libavogadro/src/plotaxis.cpp, libavogadro/src/plotaxis.h, libavogadro/src/plotobject.cpp, libavogadro/src/plotobject.h, libavogadro/src/plotpoint.cpp, libavogadro/src/plotpoint.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Added plotting widget based off of KPlotWidget as and added a dialog to plot mock IR spectra to the vibrations extension.. 2009-03-22 David Lonie * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui: Initial working vibration plotting (Has hack to get around bug in qchem files). * libavogadro/include/avogadro/plotaxis.h, libavogadro/include/avogadro/plotobject.h, libavogadro/include/avogadro/plotpoint.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Fixed some issues in the plotwidget. * libavogadro/include/avogadro/plotwidget.h, libavogadro/src/CMakeLists.txt, libavogadro/src/kplotaxis.cpp, libavogadro/src/kplotaxis.h, libavogadro/src/kplotobject.cpp, libavogadro/src/kplotobject.h, libavogadro/src/kplotpoint.cpp, libavogadro/src/kplotpoint.h, libavogadro/src/kplotwidget.cpp, libavogadro/src/kplotwidget.h, libavogadro/src/plotaxis.cpp, libavogadro/src/plotaxis.h, libavogadro/src/plotobject.cpp, libavogadro/src/plotobject.h, libavogadro/src/plotpoint.cpp, libavogadro/src/plotpoint.h, libavogadro/src/plotwidget.cpp, libavogadro/src/plotwidget.h: Completed integrating kde's KPlotWidget to Avogadro::PlotWidget. * libavogadro/src/extensions/vibrationplot.cpp, libavogadro/src/extensions/vibrationplot.h, libavogadro/src/extensions/vibrationplot.ui, libavogadro/src/kplotaxis.cpp, libavogadro/src/kplotaxis.h, libavogadro/src/kplotobject.h, libavogadro/src/kplotpoint.cpp, libavogadro/src/kplotpoint.h, libavogadro/src/kplotwidget.cpp, libavogadro/src/kplotwidget.h: Initial attempt to create a plot of the vibrations. 2009-03-05 Marcus D. Hanwell * libavogadro/src/extensions/shaders/vmd.frag, libavogadro/src/extensions/shaders/vmd.vert, testfiles/icsd_83086.cif, testfiles/icsd_83086.res: Removed files, Daniel Leidert pointed out possible copyright issues. 2009-03-05 David Lonie * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.ui: Fixed segfault when starting vibration animation with no mode selected. * avogadro/src/mainwindow.ui, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/templateextension.cpp, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/wiitrackextension.cpp: Fixed shortcut collision in menubar. 2009-03-04 David Lonie * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.ui: Fixed segfault when starting vibration animation with no mode selected. * avogadro/src/mainwindow.ui, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/templateextension.cpp, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/wiitrackextension.cpp: Fixed shortcut collision in menubar. 2009-03-04 Geoff Hutchison * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationextension.cpp: Changed from David Lonie for an "export" feature. 2009-03-03 Geoff Hutchison * libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/qcheminputdialog.h, libavogadro/src/extensions/qcheminputdialog.ui: Updates to Q-Chem input builder. Now offers new DFT functionals and basis sets. * libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/qcheminputdialog.h, libavogadro/src/extensions/qcheminputdialog.ui: Update Q-Chem -- no AM1 or PM3, and we should always output a FCHK file. * i18n/avogadro.pot, i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: Updated translations and POT template. 2009-03-03 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp: Added support for colored MOs and electron density in the orbital engine. 2009-03-03 Geoff Hutchison * libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h, testfiles/methane.FChk, testfiles/methane.out: Added example files (methane.out for vibrations) and minor cleanups. 2009-03-02 Geoff Hutchison * libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h: More fixes. Still has a double free, and a slight hitch in the frames. * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationextension.cpp: Better vibrational implementation. Now smoother animation and you can use the arrow keys in the dialog. * libavogadro/src/animation.cpp, libavogadro/src/animation.h, libavogadro/src/extensions/vibrationextension.cpp: Set up continual loopback for vibration animations. Still needs testing. * libavogadro/include/avogadro/animation.h, libavogadro/src/animation.cpp, libavogadro/src/animation.h, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Initial effort at an animation framework, including animation for vibrations. * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h: First pass at signals/slots for animations and other options. 2009-03-01 David Lonie * i18n/avogadro.pot, i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts, libavogadro/src/extensions/animationdialog.cpp: Fixed typo in the animation file dialog. 2009-03-01 Marcus D. Hanwell * libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/neighborlist.h: Do a little of that optimization I mentioned on the supercell builder... * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/supercelldialog.cpp, libavogadro/src/extensions/supercelldialog.h, libavogadro/src/extensions/supercelldialog.ui, libavogadro/src/extensions/supercellextension.cpp, libavogadro/src/extensions/supercellextension.h: Added a new super cell builder extension. Still a little rough but can already build large zeolite super cells. * libavogadro/src/atom.cpp, libavogadro/src/extensions/qcheminputdialog.cpp: Emit a signal when atom positions are modified, and also improve the update logic a little in the Q-Chem input dialog. 2009-02-28 Marcus D. Hanwell * avogadro/src/avogadro.desktop, avogadro/src/icons/avogadro_icon.png: Added a .desktop file and icon for Linux, improves the end user experience. * CMakeLists.txt, avogadro/CMakeLists.txt, avogadro/src/CMakeLists.txt, cmake/modules/AvoCPack.cmake, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/config.h.in, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Build system improvements, handle installation locations more logically, some rpath logic and bumped our version number in preparation for release. * libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/vibrationdialog.cpp: Fixed some compiler warnings. 2009-02-28 Simon Ochsenreither * i18n/avogadro_de_AT.ts, i18n/avogadro_de_CH.ts, i18n/avogadro_de_DE.ts: Symlinks aren't needed. Qt falls back to de if it doesn't find de_DE. * i18n/avogadro_de_AT.ts, i18n/avogadro_de_CH.ts, i18n/avogadro_de_DE.ts: Symlinked de_DE, de_AT and de_CH to de because we use a single translation file for all german-speaking countries at the moment. 2009-02-28 Geoff Hutchison * libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/qcheminputdialog.cpp: Use QDir::homePath() as the default location if we have an untitled file. 2009-02-28 Tim Vandermeersch * libavogadro/src/python/molecule.cpp, libavogadro/src/python/qlist.cpp: Fix compile error in the python bindings (include glwidget.h sicne extension.h no longer includes it) + add some missing functions for Molecule * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/tests/drawcommandtest.cpp: DrawCommands: You can now drag (with C selected for example) from a hydrogen to an empty space (or another atom) which will result in a ChangeElement, AddBond and/or AddAtom command. This used to "steal" the hydrogen from the atom it was attached to. The new behaviour is much more intuitive and probably what most people would expect to happen. 2009-02-27 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Add suport for showing/hiding unit cell axes. By default, this will be disabled on PDB files -- matching most users' expectations. 2009-02-27 Tim Vandermeersch * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/tests/drawcommandtest.cpp: DrawCommands: Replace the int adjustHydrogens with QFlags for more control 2009-02-27 Marcus D. Hanwell * libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h: Removed the triangle windings hack as it is not needed anymore. Fixed a bug in transparency in coloured meshes in POV-Ray output too. * avogadro/src/mainwindow.cpp, libavogadro/src/extensions/gaussianinputdialog.cpp: Reduced the verbosity of the debug output. 2009-02-27 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Use "Window" menu on all platforms, not just Mac. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Merge from Cryos. 2009-02-27 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Add configuration file versioning, reject unversioned configuration with the option to bump in the future. Should address issues with stale configuration files. 2009-02-26 Marcus D. Hanwell * libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/mopacinputdialog.cpp: Sorted out some of the parenting issues and updates on destruction - quantum codes only care about atoms! * libavogadro/src/extensions/mopacinputdialog.cpp, libavogadro/src/extensions/mopacinputdialog.h: Updates to the MOPAC dialog, respect cancel for job submission, plugged a small memory leak in the z-matrix code and save whether preview is shown or not. * libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/shaderextension.h: Fixed parenting issues in these extensions. * libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/orbitalextension.cpp: Small fixes to destruction of extensions and parenting of dialogs. * libavogadro/src/plugin.cpp, libavogadro/src/plugin.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h: Few small improvements to the plugin and tool classes. * libavogadro/src/extension.cpp, libavogadro/src/extension.h, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/unitcellextension.cpp: Removed the GLWidget include and replaced with some forward declarations. Added includes to extensions missing them. 2009-02-25 Geoff Hutchison * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Updated surface engine -- uses single color mesh for renderQuick. Solves PR# 2619826. 2009-02-25 Marcus D. Hanwell * cmake/modules/AvoCPack.cmake, cmake/modules/AvoCPackOptions.cmake.in: Updates to the CPack build, more improvements on the way. 2009-02-25 Geoff Hutchison * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Don't update for renderPick() 2009-02-24 Geoff Hutchison * libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/chargecolor.h, libavogadro/src/colors/distancecolor.cpp, libavogadro/src/colors/distancecolor.h: Add color by distance from atom 0 (i.e., ignore atom index, just look at distances) * libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/chargecolor.cpp, libavogadro/src/colors/chargecolor.h: Add color by charge: negative = red, positive = blue 2009-02-24 Geoff Hutchison * libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gamessinputdialog.h, libavogadro/src/extensions/gamessinputdialog.ui: Remove time limit and memory limit from GAMESS input generator. Not necessary. * i18n/avogadro.pot, i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: More translation updates from Launchpad. * libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessinputdialog.ui: String updates. * libavogadro/src/extensions/gaussianinputdialog.ui, libavogadro/src/extensions/qcheminputdialog.ui: UI consistency -- use "..." for showing a new dialog box. * avogadro/src/engineitemmodel.cpp, avogadro/src/engineitemmodel.h: Make sure to update when an engine is updated (e.g., enabled by an extension). * libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h: Enable the force engine when displaying vibrations. * libavogadro/src/extensions/mopacinputdialog.cpp, libavogadro/src/extensions/mopacinputdialog.h: Update MOPAC dialog to show a progress dialog and allow cancelling jobs. 2009-02-24 Geoff Hutchison * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: Use identifiers to check plugins -- won't change with translations. * libavogadro/src/engine.cpp, libavogadro/src/engine.h: Fix settings -- don't automatically save aliases and descriptions. Empty strings are handled correctly. 2009-02-23 Geoff Hutchison * i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: Update translations after recent string cleanup. * libavogadro/src/extension.h, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/fileimportextension.h, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/linmorphextension.h, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/povrayextension.h, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/shaderextension.h, libavogadro/src/extensions/templateextension.h, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/extensions/wiitrackextension.h: String cleanup for extensions. * libavogadro/src/engine.h, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/cartoonengine.h, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/forceengine.h, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.h: Further cleanups of strings/names/descriptions with engines, being consistent with other plugins. * libavogadro/src/color.h, libavogadro/src/colors/elementcolor.h, libavogadro/src/colors/indexcolor.h, libavogadro/src/colors/residuecolor.h, libavogadro/src/colors/residuecolorsettings.ui: String update for color plugins. * libavogadro/src/engine.h, libavogadro/src/tool.h, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.h: String cleanup for tools -- similar to engines. * libavogadro/src/engine.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/engines/cartoonengine.h, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/forceengine.h, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h: Cleanup of engine translatable strings. Macros only define names, identifiers, and descriptions once. 2009-02-23 Tim Vandermeersch * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/cartoonengine.cpp, libavogadro/src/engines/cartoonengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h: Split RibbonEngine into its original ribbon only and the experimental new CartoonEngine. * libavogadro/src/residue.cpp, libavogadro/src/residue.h: Add Residue::chainID / Residue::setChainID (note: this is not always the same as the chainNumber. Chains often get ids like 'A', 'B', ... but also ' ') * libavogadro/src/protein.cpp, libavogadro/src/protein.h: Protein: Use HELIX records from pdb file when available 2009-02-23 Marcus D. Hanwell * avogadro/src/CMakeLists.txt, libavogadro/src/extensions/basisset.h, libavogadro/src/painter.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h, libavogadro/src/primitive.h: Some more fixes and small changes. * cmake/modules/AvoCPack.cmake, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/surfacesettingswidget.ui, libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/meshgenerator.cpp, libavogadro/src/meshgenerator.h: Several small fixes to classes. Made Python packaging on Windows optional. * libavogadro/tests/CMakeLists.txt, libavogadro/tests/drawcommandtest.cpp, libavogadro/tests/hydrogenscommandtest.cpp, libavogadro/tests/moleculetest.cpp, libavogadro/tests/neighborlisttest.cpp: Small updates to some tests. Disabled hydrogens test for now - moc issues. 2009-02-22 Tim Vandermeersch * libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h: Improve helix rendering... * libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h: RibbonEngine: Improve helix rendering... * libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h: improve 4-turn helix rendering, currently the points are rendered as spheres. These points can be used to generator a nurbs or mesh... 2009-02-21 Tim Vandermeersch * libavogadro/tests/drawcommandtest.cpp, libavogadro/tests/hydrogenscommandtest.cpp: update unit tests * libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/tests/hydrogenscommandtest.cpp: Fix HydrogensCommand (bug #2624046) * libavogadro/tests/CMakeLists.txt, libavogadro/tests/hydrogenscommandtest.cpp: Add unit test for HydrogensCommand * libavogadro/src/tools/drawcommand.cpp, libavogadro/tests/drawcommandtest.cpp: continue working on drawing commands * libavogadro/src/tools/drawcommand.cpp, libavogadro/tests/drawcommandtest.cpp: Continue working on DrawCommands... * libavogadro/src/tools/drawcommand.cpp, libavogadro/tests/drawcommandtest.cpp: AddBondDrawCommand & ChangeBondOrderDrawCommand: Use AdjustHydrogens[Pre/Post]Command + unit tests * libavogadro/src/tools/drawcommand.cpp, libavogadro/tests/drawcommandtest.cpp: More unit testing and improvements for DrawCommands 2009-02-20 Tim Vandermeersch * libavogadro/src/tools/drawcommand.cpp, libavogadro/tests/drawcommandtest.cpp: Unit tests for AddAtomDrawCommand, ChangeElementDrawCommand and DeleteAtomDrawCommand. All three pass, but DeleteAtom only because it copies the molecules. AddAtom and ChangeElement already use the Pre/Post Commands. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Molecule: Also (optionally) reuse bond ids when adding hydrogens. * libavogadro/tests/CMakeLists.txt, libavogadro/tests/drawcommandtest.cpp: Add DrawCommandTest: unit testing for the Draw tool's QUndoCommands * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h: Add AdjustHydrogensPreCommand class, use this QUndoCommand before performing one of the real commands (ChangeElementDrawCommand, ...). Add AdjustHydrogensPostCommand class, use this QUndoCommand after performing one of the real commands (ChangeElementDrawCommand, ...). * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Molecule: (changes from DrawCommandTest) * bugfix in Molecule::operator=(...): call Atom::addBond * change addHydrogens(...) to optionally specify the hydrogen ids. This will be used by the AdjustHydrogens[Pre/Post]Command in the future. * libavogadro/src/python/atom.cpp, libavogadro/src/python/bond.cpp, libavogadro/src/python/main.cpp: Add some missing python functions/properties: * Atom::residue * Atom::residueId * Bond::beginAtom * Bond::endAtom Actualy export MoleculeList in main.cpp * libavogadro/src/bond.cpp, libavogadro/src/bond.h: Implement Bond::midPos(). 2009-02-20 Simon Ochsenreither * libavogadro/src/python/unittest/atom.py, libavogadro/src/python/unittest/engine.py, libavogadro/src/python/unittest/molecule.py, libavogadro/src/tools/python/template.py: Python 3 fixes (automated) 2009-02-19 Tim Vandermeersch * cmake/modules/AvoCPack.cmake, libavogadro/src/python/swig.cpp: Changes from win32 build... 2009-02-18 Marcus D. Hanwell * CMakeLists.txt, libavogadro/src/pluginmanager.cpp: First pass at using the avogadro binary location to locate plugins. Allows for multiple build directories and no environment variables, relocatable installs and all that good stuff. Feedback appreciated, does mean our wiki pages need updating. Also need to do this for scripts etc. 2009-02-18 Geoff Hutchison * libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/mopacinputdialog.cpp, libavogadro/src/extensions/mopacinputdialog.h: Use the new Extension::moleculeChanged() signal to handle reading new files. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/extension.h: Add new signal for extensions opening a molecule underneath a MainWindow. 2009-02-17 Marcus D. Hanwell * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/gaussianfchk.cpp: Changes to the GaussianFchk class, now with much more error checking. This should make the formatted checkpoint parsing much more resilient. Need to spend some more time with our parsing classes to improve resilience and fault detection. 2009-02-17 Geoff Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/mopacinputdialog.cpp, libavogadro/src/extensions/mopacinputdialog.h, libavogadro/src/extensions/mopacinputdialog.ui: Initial pass at a MOPAC generator, including local calculations. * libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/gaussianfchk.h: Update density matrix import to handle columns (e.g, Q-Chem fchk files) 2009-02-17 Marcus D. Hanwell * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/gaussianfchk.cpp: Finally solved the GTO electron density bug! It was a single stray readline statement. The underlying mathematics was all correct. Spotted an issue with the S normalization which is now fixed too. 2009-02-17 Geoff Hutchison * avogadro/src/CMakeLists.txt, i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fi.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: Update with latest Launchpad translations. * libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/qcheminputdialog.cpp: Set default filenames from molecule name and typical extension. 2009-02-17 Geoff Hutchison * libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/engines/orbitalengine.cpp: Fix bug with colors always appearing black. New gradient method was preferred over normal "set" function. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Added a real "Window" menu on Mac OS X. 2009-02-16 Geoff Hutchison * authors.txt, authors.xml, avogadro/AUTHORS, avogadro/COPYING, avogadro/NEWS, avogadro/README, gpltemplate: Remove unused files. * CMakeLists.txt, cmake/modules/AvoCTestConfig.cmake, cmake/modules/CTestConfig.cmake: Look for cmake files as "modules" * AvoCPack.cmake, CTestConfig.cmake, PythonDeps.cmake, cmake/modules/AvoCPack.cmake, cmake/modules/CTestConfig.cmake, cmake/modules/PythonDeps.cmake: Move cmake files into cmake directory (to clean up top-level directory). Adjust PythonDeps to handle Boost 1.38. 2009-02-16 Geoff Hutchison * libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/molecule.cpp, libavogadro/src/python/moleculelist.cpp, libavogadro/src/python/moleculelist.h: Fix python module linking. Split MoleculeList into new compile unit. Ensure correct moc file is included (previously used any "molecule.moc"!) 2009-02-16 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h: Removed the retired iso code, superseded by new MeshGenerator class. * AvoCPack.cmake, CMakeLists.txt, avogadro/CMakeLists.txt, avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/primitive.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/tests/CMakeLists.txt: Clean ups to the build system, bumped the version number to 0.9.1 and a few small fixes. 2009-02-15 Marcus D. Hanwell * libavogadro/src/mesh.cpp, libavogadro/src/primitive.cpp: Small improvements to initialisation. * libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Finally tracked down that bug, I had not propagated through my improvements in the underlying engine code to this engine. Working much better now. 2009-02-16 Geoff Hutchison * avogadro/src/projectdelegates/atomdelegate.cpp, avogadro/src/projectdelegates/bonddelegate.cpp, avogadro/src/projectdelegates/residuedelegate.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/qlist.cpp: Rename "long int" to simply "long" * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt: Obey -DENABLE_PYTHON=FALSE for building python-free even when dependencies are present. 2009-02-15 Geoff Hutchison * avogadro/src/projectdelegates/atomdelegate.cpp, avogadro/src/projectdelegates/bonddelegate.cpp, avogadro/src/projectdelegates/residuedelegate.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/qlist.cpp: Rename "long int" to simply "long" 2009-02-15 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/bond.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/fragment.cpp, libavogadro/src/fragment.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/neighborlist.cpp, libavogadro/src/protein.cpp, libavogadro/src/protein.h, libavogadro/src/residue.cpp, libavogadro/src/residue.h, libavogadro/src/tools/selectrotatetool.cpp: Several fixes to type names and a few clean ups. 2009-02-15 Geoff Hutchison * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt: Obey -DENABLE_PYTHON=FALSE for building python-free even when dependencies are present. 2009-02-15 Marcus D. Hanwell * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsdysettingswidget.ui: Applied an adapted patch from Magnus Lundborg. Corrected some issues with render order and indentation. Adds transparency support to the ball and stick engine. * libavogadro/src/cube.cpp, libavogadro/src/cube.h: The position function should take unsigned ints. * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/gaussianfchk.cpp: Now reading the SCF density matrix, added the code to calculate the electron density. There is a problem and so I need to go back and take another look at the equations. Made quite a few optimisations to the MO calculations and improved the data layout significantly. * libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/slaterset.h: Corrected incorrect calculation of the electron density for slaters. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Use guarded pointers to store the current mesh objects, fixes potential crashes if the mesh objects are removed. 2009-02-15 Tim Vandermeersch * libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/neighborlist.cpp, libavogadro/src/neighborlist.h: OrbitalExtension: use NeighborList class for ESP approximation... 2009-02-15 Marcus D. Hanwell * libavogadro/src/neighborlist.h, libavogadro/src/pluginmanager.cpp: A few small fixes for issues pointed out by krazy2. 2009-02-15 Tim Vandermeersch * libavogadro/src/extensions/python/example.py, libavogadro/src/pythonextension.cpp: Add message(const QString &) signal to PythonExtension * libavogadro/src/pythonengine.cpp, libavogadro/src/pythonengine.h, libavogadro/src/pythontool.cpp, libavogadro/src/pythontool.h: Add read/write Settings to PythonTool & PythonEngine * libavogadro/src/extensions/python/example.py, libavogadro/src/pythonextension.cpp, libavogadro/src/pythonextension.h: Add dockWidget to PythonExtension * libavogadro/src/python/engine.cpp, libavogadro/src/python/main.cpp: minor python improvements 2009-02-14 Geoff Hutchison * libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/colors/residuecolor.h, libavogadro/src/colors/residuecolorsettings.ui, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/extension.h, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/line.cpp, libavogadro/src/line.h, libavogadro/src/plugin.cpp, libavogadro/src/plugin.h, libavogadro/src/point.cpp, libavogadro/src/point.h, libavogadro/src/python/plugin.cpp, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/manipulatetool.cpp: Update to add color settings (e.g., residue coloring). Required change of Plugin to inherit QObject, plus a variety of changes to assigning Color objects. 2009-02-15 Tim Vandermeersch * libavogadro/src/python/sip.cpp, libavogadro/src/pythonextension.cpp, libavogadro/src/pythonextension.h: Add readSettings/writeSettings to pythonextension (TODO: Tool & Engine) * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/python/example.py: Python Extension example * libavogadro/src/engines/python/cubepoints.py, libavogadro/src/python/main.cpp, libavogadro/src/python/molecule.h, libavogadro/src/python/sip.cpp: more python... 2009-02-14 Tim Vandermeersch * libavogadro/src/python/molecule.cpp, libavogadro/src/pythonengine.cpp, libavogadro/src/pythonextension.cpp, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/pythontool.cpp: More python stuff * libavogadro/src/python/molecule.cpp, libavogadro/src/python/molecule.h: Remove unneeded function * libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/molecule.cpp, libavogadro/src/python/molecule.h, libavogadro/src/python/sip.cpp, libavogadro/src/python/swig.cpp, libavogadro/src/python/unittest/atom.py, libavogadro/src/python/unittest/bond.py, libavogadro/src/python/unittest/camera.py, libavogadro/src/python/unittest/color.py, libavogadro/src/python/unittest/cube.py, libavogadro/src/python/unittest/engine.py, libavogadro/src/python/unittest/extension.py, libavogadro/src/python/unittest/fragment.py, libavogadro/src/python/unittest/glwidget.py, libavogadro/src/python/unittest/molecule.py, libavogadro/src/python/unittest/primitivelist.py, libavogadro/src/python/unittest/residue.py, libavogadro/src/python/unittest/tool.py, libavogadro/src/python/unittest/toolgroup.py, libavogadro/src/pythonengine.cpp, libavogadro/src/pythonextension.cpp, libavogadro/src/pythontool.cpp: Various python updates. All ownership issues should be solved now... 2009-02-14 Geoff Hutchison * libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/colors/elementcolor.h, libavogadro/src/colors/indexcolor.h, libavogadro/src/colors/residuecolor.h, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/forceengine.h, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.h, libavogadro/src/extension.h, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/fileimportextension.h, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/povrayextension.h, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/pythonterminal.h, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/vibrationextension.h, libavogadro/src/plugin.h, libavogadro/src/python/plugin.cpp, libavogadro/src/pythonengine.cpp, libavogadro/src/pythonengine.h, libavogadro/src/pythonextension.cpp, libavogadro/src/pythonextension.h, libavogadro/src/pythontool.cpp, libavogadro/src/pythontool.h, libavogadro/src/tool.h, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.h: Add unique, untranslated identifiers for plugins and factories. These will be used to ensure config files do not crash when changing languages. 2009-02-11 Geoff Hutchison * libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h: Display a warning if no displacements exist (e.g. Gaussian output with OB-2.2.0) 2009-02-11 Marcus D. Hanwell * libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/orbitalextension.cpp: Adapted orbital extension to use the slimmed down BasisSet class. * libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/gaussianfchk.h: Added in a function to read in the SCF density matrix. * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h: Big changes to the Gaussian type basis sets. Flattened out the data structure in order to be more efficient and flexible. Got rid of most structs and also removed old experimental code that is no longer used. Some of the variable names possibly need improvements and I still need to add the electron density calculation in. 2009-02-10 Geoff Hutchison * libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/gaussianfchk.h: Handle Q-Chem checkpoints with 16-character fields. (Grrr.) 2009-02-09 Marcus D. Hanwell * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Removed a few more functions that are not used anymore. 2009-02-09 Tim Vandermeersch * libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/pythonextension.cpp, libavogadro/src/pythonextension.h: Move PythonExtension to libavogadro 2009-02-09 Marcus D. Hanwell * libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Added some extra hooks to colour by ESP estimated from partial charges. More mappings onto surfaces to come, tested on several test VdW surfaces. * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Removed most of the old code, this has been migrated to the orbital extension. This engine is now much simpler and should probably remain this way. 2009-02-07 Marcus D. Hanwell * AvoCPack.cmake, CMakeLists.txt, avogadro/src/CMakeLists.txt, avogadro/src/pluginsettings.cpp, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/pluginmanager.cpp, libavogadro/src/tools/insertfragmentdialog.cpp: Move our Windows packaging to CPack. Various improvements and changes to the Windows build process, bringing it more into line with other architectures. 2009-02-06 Marcus D. Hanwell * libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h: Some cleanups on the unit cell code, cannot use trunc as Windows does not have this function. Static cast to induce rounding seems to be an acceptable subsititute. 2009-02-04 Geoff Hutchison * libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationextension.cpp: A variety of cleanups in the vibration extension, including UI layout fixes, calls for molecule/widget update, etc. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/vibrationdialog.cpp, libavogadro/src/extensions/vibrationdialog.h, libavogadro/src/extensions/vibrationdialog.ui, libavogadro/src/extensions/vibrationextension.cpp, libavogadro/src/extensions/vibrationextension.h: New extension to begin animating vibrations. Right now, will add force vectors for viewing by the force engine. Data is read in through Q-Chem files currently and latest 2.2.x branch of Open Babel. More formats (and animations) to come. * libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/forceengine.h: Clean up code a bit to more modular calls, less casting pointers. * avogadro/src/aboutdialog.cpp, avogadro/src/aboutdialog.h, avogadro/src/addenginedialog.cpp, avogadro/src/addenginedialog.h, avogadro/src/application.cpp, avogadro/src/application.h, avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/enginecolorswidget.cpp, avogadro/src/enginecolorswidget.h, avogadro/src/engineitemmodel.cpp, avogadro/src/engineitemmodel.h, avogadro/src/enginelistview.cpp, avogadro/src/enginelistview.h, avogadro/src/engineprimitiveswidget.cpp, avogadro/src/engineprimitiveswidget.h, avogadro/src/flattabwidget.cpp, avogadro/src/flattabwidget.h, avogadro/src/icontabwidget.cpp, avogadro/src/icontabwidget.h, avogadro/src/importdialog.cpp, avogadro/src/importdialog.h, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/pluginitemmodel.cpp, avogadro/src/pluginitemmodel.h, avogadro/src/pluginlistview.cpp, avogadro/src/pluginlistview.h, avogadro/src/pluginsettings.cpp, avogadro/src/pluginsettings.h, avogadro/src/primitivetreeview.cpp, avogadro/src/primitivetreeview.h, avogadro/src/projectdelegates/atomdelegate.cpp, avogadro/src/projectdelegates/atomdelegate.h, avogadro/src/projectdelegates/bonddelegate.cpp, avogadro/src/projectdelegates/bonddelegate.h, avogadro/src/projectdelegates/labeldelegate.cpp, avogadro/src/projectdelegates/labeldelegate.h, avogadro/src/projectdelegates/moleculedelegate.cpp, avogadro/src/projectdelegates/moleculedelegate.h, avogadro/src/projectdelegates/residuedelegate.cpp, avogadro/src/projectdelegates/residuedelegate.h, avogadro/src/projectdelegates/selectiondelegate.cpp, avogadro/src/projectdelegates/selectiondelegate.h, avogadro/src/projecttreeeditor.cpp, avogadro/src/projecttreeitem.cpp, avogadro/src/projecttreeitem.h, avogadro/src/projecttreemodel.cpp, avogadro/src/projecttreemodel.h, avogadro/src/projecttreemodeldelegate.cpp, avogadro/src/projecttreemodeldelegate.h, avogadro/src/savedialog.cpp, avogadro/src/savedialog.h, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.h, libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/bond.cpp, libavogadro/src/bond.h, libavogadro/src/boxcontrol.cpp, libavogadro/src/boxcontrol.h, libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/colorbutton.cpp, libavogadro/src/colorbutton.h, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/elementcolor.h, libavogadro/src/colors/indexcolor.cpp, libavogadro/src/colors/indexcolor.h, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/colors/residuecolor.h, libavogadro/src/cube.cpp, libavogadro/src/cube.h, libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/elementtranslate.cpp, libavogadro/src/elementtranslate.h, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/forceengine.h, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/extension.cpp, libavogadro/src/extension.h, libavogadro/src/extensions/animationdialog.cpp, libavogadro/src/extensions/animationdialog.h, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/conformersearchdialog.h, libavogadro/src/extensions/constraintsdialog.cpp, libavogadro/src/extensions/constraintsdialog.h, libavogadro/src/extensions/constraintsmodel.cpp, libavogadro/src/extensions/constraintsmodel.h, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/fileimportextension.h, libavogadro/src/extensions/forcefielddialog.cpp, libavogadro/src/extensions/forcefielddialog.h, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessefpmatchdialog.cpp, libavogadro/src/extensions/gamessefpmatchdialog.h, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gamessinputdata.h, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gamessinputdialog.h, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/gaussianfchk.h, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/highlighter.cpp, libavogadro/src/extensions/highlighter.h, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/liganddialog.cpp, libavogadro/src/extensions/liganddialog.h, libavogadro/src/extensions/linmorphdialog.cpp, libavogadro/src/extensions/linmorphdialog.h, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/linmorphextension.h, libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/mopacaux.h, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/pocketdialog.cpp, libavogadro/src/extensions/pocketdialog.h, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povraydialog.h, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/povrayextension.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/propmodel.h, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/pythonterminal.h, libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/qcheminputdialog.h, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/shaderextension.h, libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/slaterset.h, libavogadro/src/extensions/templateextension.cpp, libavogadro/src/extensions/templateextension.h, libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/extensions/trajvideomaker.h, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/extensions/unitcellparamdialog.cpp, libavogadro/src/extensions/unitcellparamdialog.h, libavogadro/src/extensions/vdwsurface.cpp, libavogadro/src/extensions/vdwsurface.h, libavogadro/src/extensions/wiitrackextension.cpp, libavogadro/src/extensions/wiitrackextension.h, libavogadro/src/filetreeitem.cpp, libavogadro/src/filetreeitem.h, libavogadro/src/fragment.cpp, libavogadro/src/fragment.h, libavogadro/src/global.cpp, libavogadro/src/global.h, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/idlist.cpp, libavogadro/src/idlist.h, libavogadro/src/line.cpp, libavogadro/src/line.h, libavogadro/src/mesh.cpp, libavogadro/src/mesh.h, libavogadro/src/meshgenerator.cpp, libavogadro/src/meshgenerator.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/navigate.cpp, libavogadro/src/navigate.h, libavogadro/src/neighborlist.cpp, libavogadro/src/neighborlist.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/painterdevice.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h, libavogadro/src/plugin.cpp, libavogadro/src/plugin.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/point.cpp, libavogadro/src/point.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/primitiveitemmodel.h, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h, libavogadro/src/protein.cpp, libavogadro/src/protein.h, libavogadro/src/pythonengine.cpp, libavogadro/src/pythonengine.h, libavogadro/src/pythonerror.cpp, libavogadro/src/pythonerror.h, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/pythoninterpreter.h, libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h, libavogadro/src/pythontool.cpp, libavogadro/src/pythontool.h, libavogadro/src/residue.cpp, libavogadro/src/residue.h, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h, libavogadro/src/textrenderer.cpp, libavogadro/src/textrenderer.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/directorytreemodel.h, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/tools/insertfragmentdialog.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/quaternion.cpp, libavogadro/src/tools/quaternion.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h, libavogadro/src/tools/skeletontree.cpp, libavogadro/src/tools/skeletontree.h, libavogadro/src/undosequence.cpp, libavogadro/src/undosequence.h, libavogadro/tests/moleculetest.cpp, libavogadro/tests/neighborlisttest.cpp: Fix homepage URL in headers and other URL strings. 2009-02-04 Tim Vandermeersch * avogadro/src/pluginitemmodel.cpp, avogadro/src/pluginitemmodel.h, avogadro/src/pluginsettings.cpp: PluginSettings: detect if plugins need to be reloaded 2009-02-03 Tim Vandermeersch * avogadro/src/pluginitemmodel.cpp, avogadro/src/pluginitemmodel.h, avogadro/src/pluginsettings.cpp: PluginSettings: detect if plugins need to be reloaded 2009-02-03 Geoff Hutchison * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/forceengine.cpp, libavogadro/src/molecule.cpp: Brought back the force engine, including support for Atom::forceVector() which will be used as well by vibrations. 2009-02-04 Tim Vandermeersch * libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/protein.cpp, libavogadro/src/protein.h: Various updates to Protein class + basic rendering of 3 and 4 turn helixes in ribbon engine 2009-02-03 Tim Vandermeersch * libavogadro/include/avogadro/protein.h, libavogadro/src/molecule.cpp, libavogadro/src/protein.cpp, libavogadro/src/protein.h: * Add Protein class to handle proteins specific molecule properties (2nd Structure) * Molecule: Fix chainNumbers * libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/protein.cpp, libavogadro/src/protein.h: Various updates to Protein class + basic rendering of 3 and 4 turn helixes in ribbon engine 2009-02-03 Geoff Hutchison * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui: Add "custom data" atom label, which will show custom data, when present. (Eventually should also add names of custom data to combo box.) Works perfectly with code requested by Q-Chem for NMR shifts. * avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, libavogadro/src/atom.h, libavogadro/src/extensions/constraintsmodel.h, libavogadro/src/primitive.h, libavogadro/src/primitiveitemmodel.h: Remove un-necessary #include in primitive.h We should make a pass to remove un-needed #includes. 2009-02-03 Tim Vandermeersch * libavogadro/include/avogadro/protein.h, libavogadro/src/molecule.cpp, libavogadro/src/protein.cpp, libavogadro/src/protein.h: * Add Protein class to handle proteins specific molecule properties (2nd Structure) * Molecule: Fix chainNumbers 2009-02-02 Marcus D. Hanwell * CMakeLists.txt, PythonDeps.cmake, cmake/modules/FindAllPython.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/pluginmanager.cpp: Tidied up our build files a little more, ensured that Avogadro will build without Python. 2009-02-02 Tim Vandermeersch * libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/hbondengine.h: HBondEngine: use new NeighborList class 2009-02-01 Tim Vandermeersch * libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/propextension.cpp, libavogadro/src/molecule.cpp: Fix some compiler warnings... * avogadro/src/mainwindow.cpp, avogadro/src/pluginitemmodel.cpp, avogadro/src/pluginitemmodel.h, avogadro/src/pluginlistview.cpp, avogadro/src/pluginlistview.h, avogadro/src/pluginsettings.cpp, avogadro/src/pluginsettings.h, avogadro/src/pluginsettings.ui, avogadro/src/settingsdialog.cpp, libavogadro/include/avogadro/pluginlistview.h, libavogadro/include/avogadro/pluginsettings.h, libavogadro/src/CMakeLists.txt, libavogadro/src/neighborlist.cpp, libavogadro/src/neighborlist.h, libavogadro/src/pluginitemmodel.cpp, libavogadro/src/pluginitemmodel.h, libavogadro/src/pluginlistview.cpp, libavogadro/src/pluginlistview.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/pluginsettings.cpp, libavogadro/src/pluginsettings.h, libavogadro/src/pluginsettings.ui, libavogadro/src/pythonerror.cpp, libavogadro/src/pythonerror.h, libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h: Move Plugin settings widget to avogadro. * libavogadro/src/pythonengine.cpp, libavogadro/src/pythonengine.h: Forgot pythonengine.* * libavogadro/include/avogadro/neighborlist.h, libavogadro/src/CMakeLists.txt, libavogadro/src/neighborlist.cpp, libavogadro/src/neighborlist.h, libavogadro/tests/CMakeLists.txt, libavogadro/tests/neighborlisttest.cpp: Add NeighborList class + unit tests (for this class). To Marcus: Feel free to change the libavogadro/tests/CMakeLists.txt file * libavogadro/src/engine.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/forceengine.h, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/pythonengine.h, libavogadro/src/engines/pythonsettingswidget.ui, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/pythontool.h, libavogadro/src/tools/CMakeLists.txt: Move PythonEngine to libavogadro * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui, avogadro/src/projecttreeeditor.cpp, avogadro/src/projecttreeeditor.h, avogadro/src/projecttreeeditor.ui, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.h, libavogadro/include/avogadro/pluginsettings.h, libavogadro/src/CMakeLists.txt, libavogadro/src/plugindialog.cpp, libavogadro/src/plugindialog.h, libavogadro/src/plugindialog.ui, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/pluginsettings.cpp, libavogadro/src/pluginsettings.h, libavogadro/src/pluginsettings.ui: New configuration dialog 2009-01-31 Tim Vandermeersch * libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h, libavogadro/src/pythontool.cpp: Add toolTip support to the PythonTool & remove some debug msgs * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/pythontool.cpp, libavogadro/src/pythontool.h: Continue moving PythonTool to libavogadro. Re-added the PythonToolFactory which allow us to use python tools just like any other C++ tools. In other words, we create a PythonToolFactory for each script and the ..Factory gets the name and description from running the script. You can now enable/disable python tools. still TODO: * set the activate action's tooltip * icons?? 2009-01-30 Tim Vandermeersch * avogadro/src/importdialog.cpp, avogadro/src/projectdelegates/bonddelegate.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/constraintsdialog.cpp, libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/plugin.cpp, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/python/glwidget.cpp, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/manipulatetool.cpp: Fix compiler warnings 2009-01-28 Tim Vandermeersch * libavogadro/src/engines/pythonengine.cpp, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/pluginmanager.cpp, libavogadro/src/python.png, libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h, libavogadro/src/pythontool.cpp, libavogadro/src/pythontool.h, libavogadro/src/pythontool.qrc, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/python.png, libavogadro/src/tools/pythontool.cpp, libavogadro/src/tools/pythontool.h, libavogadro/src/tools/pythontool.qrc: Move PythonTool (1) 2009-01-28 Albert DeFusco * libavogadro/src/engines/hbondengine.cpp, libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdialog.ui: I like more precision in my input files. I also like yellow hydrogen bonds 2009-01-28 Marcus D. Hanwell * CMakeLists.txt, CTestConfig.cmake: Added some initial CDash support, see http://www.cdash.org/CDashPublic/index.php?project=Avogadro for our new CDash. 2009-01-27 Geoff Hutchison * libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/glpainter.cpp: Fixes for Eigen cast warnings with Eigen-2.0rc1 2009-01-27 Tim Vandermeersch * CMakeLists.txt, cmake/modules/FindAllPython.cmake, cmake/modules/FindNumpy.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/sip.cpp, libavogadro/src/tools/CMakeLists.txt: Change the python dependency detection: All python dependencies are now in the cmake/modules/FindAllPython.cmake. Python support is only enabled when all dependencies (python interp+libs, boost python, sip, numpy) are found. Also, in the message saying X can't be found, I added the package names for debian/ubuntu. Perhaps we should do something similar for other distros/dependencies. 2009-01-23 Tim Vandermeersch * avogadro/src/mainwindow.cpp, libavogadro/src/camera.cpp, libavogadro/src/python/eigen.cpp: replace WithAlignedOperatorNew with EIGEN_MAKE_ALIGNED_OPERATOR_NEW. This macro is available from version Eigen2-beta5 and up. 2009-01-23 Geoff Hutchison * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp: Draw tool refinements. Do not add/delete hydrogens when manually drawing bonds with a new H atom. Do not bond to hydrogen atoms when dragging unless H atoms are manually selected as the new element. 2009-01-22 Geoff Hutchison * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp: Draw tool refinements. Do not add/delete hydrogens when manually drawing bonds with a new H atom. Do not bond to hydrogen atoms when dragging unless H atoms are manually selected as the new element. * avogadro/src/enginecolorswidget.cpp, avogadro/src/enginecolorswidget.ui: Add support for color settings widgets when present. 2009-01-21 Geoff Hutchison * avogadro/src/enginecolorswidget.cpp, avogadro/src/enginecolorswidget.ui: Add support for color settings widgets when present. 2009-01-22 Tim Vandermeersch * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: Listen for the Molecule::destroyed() signal to stop the AutoOpt Tool. (prevents crashes when closing avogadro while AutoOpt is running) 2009-01-21 Tim Vandermeersch * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: Listen for the Molecule::destroyed() signal to stop the AutoOpt Tool. (prevents crashes when closing avogadro while AutoOpt is running) 2009-01-18 Geoff Hutchison * libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/dipolesettingswidget.ui: Updated dipole engine which updates on-the-fly and handles recent changes. 2009-01-17 Geoff Hutchison * libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/dipolesettingswidget.ui: Updated dipole engine which updates on-the-fly and handles recent changes. 2009-01-12 Tim Vandermeersch * libavogadro/src/python/eigen.cpp, libavogadro/src/python/unittest/atom.py, libavogadro/src/python/unittest/camera.py, libavogadro/src/python/unittest/eigen.py, libavogadro/src/python/unittest/engine.py, libavogadro/src/python/unittest/glwidget.py: update python unit tests 2009-01-12 Marcus D. Hanwell * libavogadro/src/engines/orbitalsettingswidget.ui, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfacesettingswidget.ui, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.ui: Disabled parts of the dialog that need to be (re)implemented, removed obsolete parts. Fixed a bug with VdW surface generation. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp: Improved the metadata put into the meshes - orbital engines can infer the pairs and also draw cube extents again. 2009-01-12 Geoff Hutchison * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Implement translation of molecules. Solves PR#2497081. 2009-01-10 Marcus D. Hanwell * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added extra slots for atom and bond changes. Fixes bug 2497037. 2009-01-10 Tim Vandermeersch * avogadro/src/main.cpp, libavogadro/src/global.cpp: Add correct paths for translation files on windows. 2009-01-09 Geoff Hutchison * libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/tools/insertfragmentdialog.ui: Add short tooltip about clicking to insert a fragment. Should address PR#1971923. 2009-01-09 Marcus D. Hanwell * libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h: Various updates to the Gaussian dialog. * libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/qcheminputdialog.h, libavogadro/src/extensions/qcheminputdialog.ui: Various improvements to the Q-Chem dialog. * libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/molecule.cpp, libavogadro/src/primitive.cpp: Removed Eigen Regression include where not needed, changed it to the new Eigen/LeastSquares in molecule.cpp. * libavogadro/src/engines/labelengine.cpp, libavogadro/src/periodictableview.cpp, libavogadro/src/tools/drawtool.cpp: Ported to use the static ElementTranslator function rather than the global instance. * libavogadro/src/elementtranslate.cpp, libavogadro/src/elementtranslate.h: Changed to use a static member function rather than instantiating a global instance. * libavogadro/src/global.cpp, libavogadro/src/global.h: Some documentation updates and a little tidying up. 2009-01-08 Marcus D. Hanwell * avogadro/src/main.cpp, libavogadro/src/global.cpp: Added some extra debug output when translation files cannot be found. 2009-01-08 Tim Vandermeersch * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/namedselectionmodel.cpp, libavogadro/src/extensions/namedselectionmodel.h, libavogadro/src/extensions/selectextension.cpp: Remove obsolete code (named selections moved to project tree) * .../src/projectdelegates/selectiondelegate.cpp, avogadro/src/projectdelegates/selectiondelegate.h, avogadro/src/projecttreeeditor.cpp, avogadro/src/projecttreemodel.cpp: Add a ProjectDelegate for named selections. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Add a signal to the GLWidget to notify the project tree the named selections have changed (added, removed, renamed) 2009-01-08 Marcus D. Hanwell * Doxyfile, libavogadro/src/atom.h, libavogadro/src/bond.h, libavogadro/src/colorbutton.h, libavogadro/src/fragment.h, libavogadro/src/mesh.h, libavogadro/src/molecule.h, libavogadro/src/pythoninterpreter.h, libavogadro/src/residue.h, libavogadro/src/textrenderer.h: Various updates to improve the API documentation. 2009-01-08 Tim Vandermeersch * libavogadro/src/global.h, libavogadro/src/python/eigen.cpp: define EIGEN_WORK_AROUND_QT_BUG_CALLING_WRONG_OPERATOR_NEW_FIXED_IN_QT_4_5 in global.h and include it where needed (only python/eigen.cpp) 2009-01-08 Marcus D. Hanwell * libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Removed the duplicate button from the dialog, changed the menu entry name to surfaces and cleaned up a few compiler warnings. * libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h: Updated the API docs and removed an unused function. 2009-01-08 Geoff Hutchison * Doxyfile, Doxyfileext, doc/mainpage.dox, libavogadro/src/global.cpp: Doxygen changes. Move mainpage documentation out of global.cpp and into doc/mainpage.dox. Updated to output to doc/api and be a bit more consistent with Eigen and other projects. 2009-01-08 Marcus D. Hanwell * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Few small fixes and updates. I think some of the new functions may need a little work but do seem to be working quite well. 2009-01-08 Geoff Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/projectdelegates/atomdelegate.h, avogadro/src/projectdelegates/bonddelegate.h, avogadro/src/projectdelegates/moleculedelegate.h, avogadro/src/projecttreeeditor.h, avogadro/src/projecttreemodel.h, avogadro/src/projecttreemodeldelegate.h, avogadro/src/savedialog.cpp: A variety of small krazy fixes. 2009-01-08 Tim Vandermeersch * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/dockingextension.cpp, libavogadro/src/extensions/dockingextension.h: remove obsolete files (Docking extension) * libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/propmodel.h: * Add the properties extension again (including conformers) * update force field extension to make use of the added conformers code. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Small bug fixes for conformers + Add energies/setEnergies 2009-01-07 Marcus D. Hanwell * Doxyfile, Doxyfileext, avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Version changed to 0.9.0. * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/runkrazy.rb, scripts/runkrazy.rb: Removed the krazy subdirectory, will be autogenerated from now on. Also moved the script into our scripts directory. 2009-01-07 Geoff Hutchison * libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/hydrogensextension.cpp: Update extensions to add some menu separators 2009-01-07 Marcus D. Hanwell * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/trajvideomaker.cpp: Initial porting of the animation tool to the new API. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Made the conformer support actually work now! * avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Set the version to 0.9_beta1 in preparation for the release. 2009-01-07 Geoff Hutchison * avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/projecttreeeditor.cpp, avogadro/src/projecttreemodel.cpp: Find a few more un-translated strings. * avogadro/src/CMakeLists.txt, avogadro/src/mac/lang.sh: Cleanup of Mac .lproj (language directories) creation. Should improve translations. 2009-01-06 Marcus D. Hanwell * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: First attempt at adding conformer support, needs some testing. 2009-01-06 Geoff Hutchison * i18n/avogadro.pot, scripts/extract-messages.sh, scripts/extractrc.sh: Modified scripts and POT file to keep similar format for UI files as CPP and H 2009-01-05 Geoff Hutchison * i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_fr.ts: Updated en_GB de and fr TS files from Launchpad. All translations should now be using Launchpad. 2009-01-05 Geoff Hutchison * avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Bump version number for 0.9.0 beta. * i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: Updated translation strings. * avogadro/src/aboutdialog.cpp, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/fileimportextension.h, libavogadro/src/extensions/povrayextension.cpp: Fix some un-translated (or confused) strings. 2009-01-05 Marcus D. Hanwell * libavogadro/src/bond.cpp, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/glgraphicsview.h, libavogadro/src/glpainter.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/periodictableview.cpp, libavogadro/src/plugindialog.cpp, libavogadro/src/pythoninterpreter.h, libavogadro/src/textrenderer.cpp: Made a start on fixing issues pointed out by krazy2. * libavogadro/src/painterengine.cpp, libavogadro/src/painterengine.h: Removed orphaned source files. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Added some functions to set and get the dipole moment of the molecule. Copying the dipole moment seems to cause segfaults here, so it is commented out for now. 2009-01-04 Geoff Hutchison * i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: Updated translations. Still need to work out a clean po -> ts solution. 2009-01-04 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Pretty big update as I didn't run those tests for ages and Krazy2 improved a lot 2009-01-04 Geoff Hutchison * i18n/avogadro_ar.ts, i18n/avogadro_ca.ts, i18n/avogadro_cs.ts, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fr.ts, i18n/avogadro_it.ts, i18n/avogadro_ja.ts, i18n/avogadro_ko.ts, i18n/avogadro_nb.ts, i18n/avogadro_nl.ts, i18n/avogadro_pl.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts, i18n/avogadro_ru.ts, i18n/avogadro_sv.ts, i18n/avogadro_tr.ts, i18n/avogadro_uk.ts, i18n/avogadro_zh_CN.ts, i18n/avogadro_zh_TW.ts: Add new translations from Launchpad plus "update-translations" for new strings. 2009-01-01 Geoff Hutchison * avogadro/src/CMakeLists.txt, avogadro/src/macchempasteboard.cpp, avogadro/src/macchempasteboard.cpp.disabled, avogadro/src/macchempasteboard.h, avogadro/src/macchempasteboard.h.disabled: Disable Mac ChemPasteboard until we can fix it completely. 2008-12-31 Marcus D. Hanwell * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdialog.cpp: Finished the porting of the GAMESS input deck generator. Only performed cursory testing so far for quite a number of changes. Basic input deck generation seems to work at least. 2008-12-30 Tim Vandermeersch * libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/eigen.cpp, scripts/cmake-vs2005.bat: Some win32 specific changes 2008-12-30 Marcus D. Hanwell * libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Reduction of includes that are not needed. * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/skeletontree.cpp, libavogadro/src/tools/skeletontree.h: Initial work to port the bondcentrictool to the new framework. This seems to mostly work, has some issues with atom updates that should not be too hard to sort out. * libavogadro/src/atom.cpp, libavogadro/src/atom.h: Added a new function to return the bond between the atom and any other. Returns 0 if no bond between them exists. 2008-12-29 Marcus D. Hanwell * libavogadro/src/atom.h, libavogadro/src/bond.cpp, libavogadro/src/bond.h, libavogadro/src/cube.h, libavogadro/src/fragment.h, libavogadro/src/global.h, libavogadro/src/mesh.cpp, libavogadro/src/mesh.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h: Added a little access control and friend classes. Id and index should only be set by the containing Molecule and are not part of our public API. They reflect internal state of the molecule. * CMakeLists.txt, avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Updated the build system, now require CMake 2.6.0. Clean ups in several places. * libavogadro/src/python/atom.cpp, libavogadro/src/python/molecule.cpp: Ported to use the new API, new -> add and delete -> remove. 2008-12-29 Geoff Hutchison * libavogadro/src/atom.h, libavogadro/src/molecule.h: Documentation updates with previous syntax change. * avogadro/src/editcommands.cpp, avogadro/src/mainwindow.cpp, libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/python/atom.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/unittest/atom.py, libavogadro/src/python/unittest/bond.py, libavogadro/src/python/unittest/color.py, libavogadro/src/python/unittest/cube.py, libavogadro/src/python/unittest/engine.py, libavogadro/src/python/unittest/extension.py, libavogadro/src/python/unittest/fragment.py, libavogadro/src/python/unittest/glwidget.py, libavogadro/src/python/unittest/molecule.py, libavogadro/src/python/unittest/primitivelist.py, libavogadro/src/python/unittest/residue.py, libavogadro/src/pythonerror.cpp, libavogadro/src/pythonerror.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/tests/moleculetest.cpp: Change syntax of atoms and molecules. All references to "new" are now "add" and all references to "delete" are now "remove." So it's "addAtom" or "removeAtom" for consistency with Qt and the rest of our API. 2008-12-28 Marcus D. Hanwell * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/python/molecule.cpp: Lots of documentation updates, reorganised the functions and grouped in Doxygen tags. Some minor changes too, more are needed for const correctness. * libavogadro/src/bond.cpp, libavogadro/src/bond.h: Added functions to retrieve bond positions, still need to implement the mid-point function. * libavogadro/src/atom.cpp, libavogadro/src/atom.h: Documentation updates, added member function groupings and a destructor. * libavogadro/src/atom.cpp, libavogadro/src/bond.cpp, libavogadro/src/bond.h: Added some atom accessor functions to the Bond class. This should make using bonds easier. Fixed assignment order in Atom constructor. * libavogadro/src/atom.cpp, libavogadro/src/fragment.cpp, libavogadro/src/fragment.h, libavogadro/src/residue.cpp, libavogadro/src/residue.h: Made the classes aware of their parent. Added in calls in Residue to set and unset the Residue of its child atoms. 2008-12-27 Marcus D. Hanwell * libavogadro/src/atom.cpp, libavogadro/src/atom.h: Added methods to set and get at the residue an atom belongs to. 2008-12-27 Geoffrey Hutchison * libavogadro/src/engines/wireengine.cpp, libavogadro/src/glpainter.cpp: Fix glpainter and wireframe to bring back stipple for h-bond engine. (oops!) 2008-12-26 Marcus D. Hanwell * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: Environment variable redux - move from four environment variables to one. AVOGADRO_PLUGINS can be set to point to Avogadro plugins. 2008-12-24 Marcus D. Hanwell * libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp: Fixed triangle windings for negative electron isosurfaces, changed default tab in the dialog. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/vdwsurface.cpp: Added the ability to generate VdW surfaces, and variants thereof. Still needs some work to tidy up the UI. * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Start of the simplification in the surface engine. Need to add back in coloured surfaces, currently draws surface meshes in the specified colour. * libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui: Added Van der Waals surface tab and associated functions. * libavogadro/src/meshgenerator.cpp, libavogadro/src/meshgenerator.h: Added the option to reverse the winding of the generated mesh. This depends upon what you consider to be inside and outside of your isosurface. * libavogadro/src/extensions/vdwsurface.cpp, libavogadro/src/extensions/vdwsurface.h: Added a VdWSurdface class that uses QtConcurrent to calculate a VdW cube. It may need further optimisation with binning etc. * libavogadro/src/engine.cpp, libavogadro/src/meshgenerator.cpp: Got rid of a few unused variables in function calls. 2008-12-24 Tim Vandermeersch * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/highlighter.cpp, libavogadro/src/extensions/highlighter.h, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/extensions/pythonterminal.cpp, libavogadro/src/extensions/pythonterminal.h: Split python extension into 2 extensions. One handles python extension scripts and the other one provied the terminal. Also add syntax highlighting to the terminal widget :P * libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h: PythonTerminalWidget: Allow python code indentation 2008-12-23 Geoffrey Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/supercellbuilder.cpp, libavogadro/src/extensions/supercellbuilder.h, libavogadro/src/extensions/supercelldialog.cpp, libavogadro/src/extensions/supercelldialog.h, libavogadro/src/extensions/supercelldialog.ui: Remove supercell for now, until it can be finished for public use. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/molecule.cpp: Add back unit cell extension. * libavogadro/src/glwidget.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, testfiles/ZnO.fract: Added back basic support for unit cells. (e.g., open testfiles/ZnO.fract) * avogadro/src/mainwindow.cpp, libavogadro/src/CMakeLists.txt: Fix build error when ENABLE_PYTHON = false 2008-12-23 Marcus D. Hanwell * AUTHORS, INSTALL, authors.txt, authors.xml: Updated the author files, added a new authors.txt that can be used by Git to map SVN users to Git authors. * libavogadro/src/engines/ringengine.cpp, libavogadro/src/glpainter.cpp: Noticed that the drawTriangle function was recalculating normals when it was given one. 2008-12-22 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glpainter.cpp: Some tidying up. Remove unnecessary GL calls. Still an issue with transparency in the ring engine. * libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/extensions/selectextension.cpp: Ported the engines, and extension to use the new API introduced. Please let me know if you notice any new issues arising from all the changes. Hopefully the API changes can be kept to a minimum now. * libavogadro/src/engine.cpp, libavogadro/src/engine.h: Removed includes that should not be in the Engine header. Added a molecule member pointer that can be used to more efficiently take care of the lazy copying of lists. Separated atoms and bonds from general primitives. This allows for engines to specialise further, i.e. engines with no atoms/bonds can ignore these signals and avoid copying these pointer lists when custom primitives are to be rendered. Added new Engine slots for the new molecule signals. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Changed the transparent rendering. Enable GL_BLEND for the rendering cycle as everything in there currently enables/disables this. Also removed the depth mask stuff as this did not look good with any of the engines. Removed more calls to the PrimitiveList, there is no point in keeping two copies of this list and it will be phased out. Actually emit the moleculeChanged signal when the molecule is changed. Adding a new toggleSelected function which toggles the selection with no list. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Added greater granularity to the Molecule. Separate atom and bond signals are emitted. All other primitives go in the old signals. Atoms and bonds are the most susceptible to change and in general the most numerous. * libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Some improvements to the behaviour of the selection tool. * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Only draw eye candy when the view is moving. 2008-12-22 Tim Vandermeersch * libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/pythonengine.h, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/pythonerror.cpp, libavogadro/src/pythonerror.h, libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h: Improve python error reporting, all errors are now printed to the messages log... 2008-12-22 Marcus D. Hanwell * libavogadro/src/extensions/basisset.cpp, libavogadro/src/glpainter.cpp: norm2() -> squaredNorm() due to deprecation in Eigen2. 2008-12-22 Tim Vandermeersch * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: MainWindow: Use the new Extension::actionsChanged() slot to reload an extension's actions when needed. * libavogadro/src/extensions/python/deleteAll.py, libavogadro/src/extensions/python/example.py, libavogadro/src/extensions/python/test.py, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h: PythonExtension: Make python extensions more like real extensions. Still needs some work but actions(), menuPath() & peroformAction are working... TODO: dockWidgets, work out example with QUndoCommand, ... * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: MainWindow: * Add slot to handle plugin reloading * replace strcasestr with equivalent QString functions * TODO: make smooth transitions work on win32 2008-12-21 Tim Vandermeersch * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: GLWidget: initialize m_navigateTool to 0 and check if it exists before trying to let it handle unaccepted events from other Tools. Add a toolsDestoryed() slot to set d->tool and d->activeTool to 0, connect the toolGroup::toolsDestroyed() signal to this slot in GLWidget::setToolGroup(...). * libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h: ToolGroup: Add ToolGroup::removeAllTools() to clear the current list of tools + emit toolsDestroyed() when 1 or more tools are destroyed. * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: PluginManager: Add a reload slot and reloadPlugins signal. The reload slot is called from the PluginDialog when accepted, PluginManager::reload() writes the settings, deletes the instances and emits reloadPlugins. Classes such as MainWindow and GLWidget connect to this signal to invalidate their current plugins and reload them. Nore: MainWindow & GLWidget follow later, reloading plugins without restarting is only working for Tools & Extensions at the moment 2008-12-21 Geoffrey Hutchison * libavogadro/src/engines/wireengine.cpp, libavogadro/src/glpainter.cpp: Further refinements to wireframe, including optimization and aromatic dashed bonds. 2008-12-21 Tim Vandermeersch * libavogadro/src/plugindialog.cpp, libavogadro/src/plugindialog.h: PluginDialog: Add a signal to inform the PluginManager when the plugins have changed. * libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h: PythonScript: improve error handling * libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/pythonengine.h: pythonengine.*: Add win32 search paths + improve error handling 2008-12-21 Marcus D. Hanwell * libavogadro/src/atom.h, libavogadro/src/bond.cpp, libavogadro/src/bond.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/python/molecule.cpp: Added some code so that bond aromaticity can be exposed. 2008-12-20 Geoffrey Hutchison * avogadro/src/importdialog.cpp, avogadro/src/importdialog.h, avogadro/src/importdialog.ui, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: New "import file" dialog to set specific Open Babel format and conversion options. In particular, turning off bond orders should be helpful with nanotubes / graphite or really large files. * libavogadro/src/engines/wireengine.cpp, libavogadro/src/glpainter.cpp: More wireframe refinements. Getting there. * libavogadro/src/engines/wireengine.cpp, libavogadro/src/glpainter.cpp: Somewhat more refined multiple bonds for wireframe. Also made multi-bond wireframe the default to address bug report. Still need "aromatic" stipple. 2008-12-19 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Finally got the new way of generating meshes working. It still has a few rough edges but on the whole is much improved. Adding color by another cube is now relatively simple. 2008-12-18 Marcus D. Hanwell * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Added new Mesh functions so that the Molecule can manage meshes properly too. * libavogadro/src/cube.h, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Working on adding the mesh generation to the extension and simplifying the orbital/surface engines. This will also ensure the molecule is cleared properly as engines should not be storing their own primitives to render. 2008-12-18 Tim Vandermeersch * libavogadro/src/python/engine.cpp, libavogadro/src/python/qlist.cpp, libavogadro/src/python/std_vector.cpp: some small syntax changes in the python module to make it compile with MSVC (not -> !) * avogadro/src/projecttreeeditor.h, avogadro/src/projecttreemodel.h, avogadro/src/projecttreemodeldelegate.h: avogadro/src/*.h: Remove some more A_EXPORT * avogadro/src/projectdelegates/atomdelegate.h, avogadro/src/projectdelegates/bonddelegate.h, avogadro/src/projectdelegates/labeldelegate.h, avogadro/src/projectdelegates/moleculedelegate.h, avogadro/src/projectdelegates/residuedelegate.h: avogadro/src/projectdelegates/*.h: These classes are not in libavogadro anymore, remove A_EXPORT from their declaration. 2008-12-18 Geoffrey Hutchison * libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/pythonengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/python/engine.cpp: Engine flag overhaul. New flags: Layers (opaque, transparent, overlay) Primitives (atoms, bonds, etc.) Colors (none, indexed, plugins, etc.) This should simplify the display settings windows, as well as new users. I've probably missed some engines, but I'll make another pass tomorrow. 2008-12-17 Marcus D. Hanwell * libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Tidied up the extension a little, fixed an initialisation issue. * libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/mopacaux.h, libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/slaterset.h: PQNs are actually integers, cache the effective PQNs in the loop - simplified slaterPoint. * libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/slaterset.h: Spotted that the exponential factor could be cached outside of the loop in electron density calculations - nearly three times faster. I still want it to go faster though! 2008-12-17 Geoffrey Hutchison * libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h: Fix PR#2396701 -- when clicking again on an atom, remove it from the list. This prevents NaN measurements and makes it efficient to check out multiple measurements in a large molecule. 2008-12-17 Marcus D. Hanwell * libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/slaterset.cpp: Increased the default step size to a more relaxed 0.18, reduced the default padding to 2.5 and added some logic to skip calculations where the factor is very small. * libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/mopacaux.h, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/slaterset.h: Added calculation of electron density to the MOPAC code, this should be quite simple to translate to the Gaussian type orbitals too. Fixed normalization of the MOs too. ESP calculation might be next... * libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Added the option to calculate all MOs. 2008-12-15 Geoffrey Hutchison * CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/avogadroformat.cpp, libavogadro/src/xml.cpp: Remove useless Avogadro format and XML code -- we can't get this to work with the current Open Babel 2.2 architecture. 2008-12-14 Marcus D. Hanwell * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: Added a renderPick to the ball and stick engine. Should be much quicker when picking in large scenes. * libavogadro/src/navigate.cpp, libavogadro/src/tools/navigatetool.cpp: Fixed up the translation of the view by keyboard - much better now. * libavogadro/src/navigate.cpp, libavogadro/src/navigate.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Added key press events for the navigate tool - now you can use the keyboard to modify the view. * libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/orbitalengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/painterdevice.h, libavogadro/src/python/engine.cpp, libavogadro/src/python/glwidget.cpp: Pass the primitives list by reference in the primitives() return type. All engines just render the primitive list unless otherwise instructed by the user - only one copy of the list normally. Introduced a renderPick() function to the engines, this allows a specialised function for picking that can omit extraneous details. 2008-12-13 Marcus D. Hanwell * libavogadro/src/tool.cpp, libavogadro/src/tool.h: Added key press and release events to the tools - keyboard interaction! 2008-12-12 Marcus D. Hanwell * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/mopacaux.cpp, libavogadro/src/extensions/mopacaux.h, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/slaterset.cpp, libavogadro/src/extensions/slaterset.h: Added support for MOPAC AUX file parsing, and more generally Slater Type Orbitals. Features are still very new. I need to add in support for d-type orbitals and do further testing. 2008-12-11 Tim Vandermeersch * libavogadro/src/engines/pythonengine.cpp, libavogadro/src/python/sip.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/python.png, libavogadro/src/tools/python/template.py, libavogadro/src/tools/pythonsettingswidget.ui, libavogadro/src/tools/pythontool.cpp, libavogadro/src/tools/pythontool.h, libavogadro/src/tools/pythontool.qrc: Add Python Tool 2008-12-09 Tim Vandermeersch * libavogadro/src/engines/python/cubepoints.py, libavogadro/src/engines/python/pythonTestEngine.py, libavogadro/src/engines/python/wireframe.py, libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/pythonengine.h, libavogadro/src/engines/pythonsettingswidget.ui, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/pythoninterpreter.h, libavogadro/src/pythonscript.cpp: * libavogadro/src/pythoninterpreter.*: Make sure we don't call Py_Finalize() before all instances are destroyed. * libavogadro/src/engines/pythonengine.*: Allow python engines to have a settingsWidget, flags, transparencyDepth and changed() signal. * libavogadro/src/engines/python/wireframe.py: work out an example engine with a python settings widget. 2008-12-09 Marcus D. Hanwell * libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui: Added the ability to save the dialog settings that make sense, added LANL2DZ and improved the routines to check if the new molecule coordinates should be used. * libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/tools/eyecandy.cpp: Give the user more control over the cube size to be calculated. Also reduced the size of the eye candy a little. * libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tool.h, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Make the navigate tool a super tool - one tool to rule them all (when they do not accept the mouse event). * CMakeLists.txt, avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Adjusted the build files a little. Qt 4.4.0 is required now as we are using QtConcurrent. Bumped the version in preparation for 0.9 release. 2008-12-08 Marcus D. Hanwell * avogadro/src/editcommands.cpp, avogadro/src/mainwindow.cpp, libavogadro/src/atom.cpp, libavogadro/src/molecule.cpp: Fixed copy and pasting. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/molecule.cpp: Fixes to the modality of the calculation, small fix to molecule and its setOBMol function. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/meshgenerator.cpp, libavogadro/src/meshgenerator.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h: Improved locking of the cube - too slow to make the class thread safe. Best solution is for users of it to lock/unlock. Orbitals now sees new cubes and updates the combo again. * libavogadro/src/cube.h, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/python/cube.cpp: Added a map form calculation - uses a lot less memory for large molecules. In my tests it is a little slower than whole cube but uses a lot less memory. On balance this is probably the best implementation for most people to use. * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/savedialog.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added the coveted export to vector graphics option, provided by the GL2PS C library which is not built into Avogadro. Seems to work quite well and everyone loves vector graphics. * avogadro/gl2ps/COPYING.GL2PS, avogadro/gl2ps/COPYING.LGPL, avogadro/gl2ps/TODO, avogadro/gl2ps/gl2ps.c, avogadro/gl2ps/gl2ps.h, avogadro/gl2ps/gl2ps.pdf, avogadro/gl2ps/gl2psTest.c, avogadro/gl2ps/gl2psTestSimple.c: Added a snapshot of GL2PS to build against. 2008-12-08 Tim Vandermeersch * libavogadro/src/python/TODO, libavogadro/src/python/camera.cpp, libavogadro/src/python/sip.cpp, libavogadro/src/python/unittest/suite.py: Add unit test for Camera * libavogadro/src/python/TODO, libavogadro/src/python/bond.cpp, libavogadro/src/python/cube.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/qlist.cpp, libavogadro/src/python/sip.cpp, libavogadro/src/python/std_vector.cpp, libavogadro/src/python/unittest/glwidget.py, libavogadro/src/python/unittest/suite.py: update python bindings, including cube, fix bond & atom errors in unit tests, add std::vector* to converter, unit test for GLWidget, simplify & document sip.cpp implementation a bit. Wrap GLHit and add QList to python converter. 2008-12-07 Marcus D. Hanwell * testfiles/benzene.fchk, testfiles/co.fchk: Added a couple of formatted checkpoint examples. * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Quite a few optimisations. I got the mapped reduce feature working. I am still a little concerned about memory usage on really big molecules with lots of cores. It looks good on some of the molecules I have tested it on though. Scales quite linearly now with two cores. * libavogadro/src/cube.cpp, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h: Quite a few optimisations to the calculation. Memory grows out of control when calculating large molecules, this needs map reduce but have not been able to get that working... * libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/orbitalextension.cpp: Rewritten many of the calculation routines in an attempt to improve speed. Using QtConcurrent to actually calculate the cube on a shell by shell basis. Seems to be working quite well here. Still more tidying up/optimisation to do. * libavogadro/src/cube.cpp, libavogadro/src/cube.h, libavogadro/src/python/cube.cpp: Several modifications to the Cube class in order to make it more efficient and add flexibility. 2008-12-07 Tim Vandermeersch * libavogadro/src/python/TODO, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/sip.cpp: We now have signals/slots in python :-) 2008-12-06 Tim Vandermeersch * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/sip.cpp, libavogadro/src/python/unittest/atom.py: Fix Atom::valence and update unit test * libavogadro/src/CMakeLists.txt, libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/TODO, libavogadro/src/python/extension.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/plugin.cpp, libavogadro/src/python/qtlib.cpp, libavogadro/src/python/sip.cpp, libavogadro/src/python/unittest/cube.py, libavogadro/src/python/unittest/engine.py, libavogadro/src/python/unittest/extension.py, libavogadro/src/python/unittest/suite.py: More python classes & unit tests. Also add converters to allow us to return PyQt (SIP) wrapped objects and accept them as parameters. 2008-12-06 Marcus D. Hanwell * libavogadro/src/meshgenerator.cpp, libavogadro/src/meshgenerator.h: Added a clear() function. 2008-12-06 Tim Vandermeersch * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/meshgenerator.cpp: * libavogadro/src/engines/orbitalengine.cpp: Add extra check for m_settingsWidget in OrbitalEngine::updateOrbitalCombo * libavogadro/src/meshgenerator.cpp: Add extra check in ::initialize to make sure the Cube and Mesh pointer are valid 2008-12-06 Marcus D. Hanwell * libavogadro/src/engine.h, libavogadro/src/engines/orbitalengine.cpp: Fixed up the update engine a little and added a new entry into the Egine enum for surfaces. * libavogadro/src/cube.cpp, libavogadro/src/cube.h: Added minimum and maximum value functions to the Cube class, corrected some off by one errors in the Cube initialization functions. 2008-12-06 Tim Vandermeersch * libavogadro/src/python/TODO, libavogadro/src/python/engine.cpp, libavogadro/src/python/plugin.cpp, libavogadro/src/python/pluginmanager.cpp, libavogadro/src/python/primitivelist.cpp, libavogadro/src/python/unittest/engine.py, libavogadro/src/python/unittest/pluginfactory.py, libavogadro/src/python/unittest/pluginmanager.py, libavogadro/src/python/unittest/suite.py: Added python unit tests for engine and updated the pluginmanager bindings 2008-12-05 Tim Vandermeersch * libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: libavogadro/src/pluginmanager.*: Some additional functions to make plugin loading easier from python (or for 3rd party viewers which use libavogadro) 2008-12-05 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Updated the orbital engine to use the new MeshGenerator class. It should be fixed to only render meshes, leaving generation to an exntension or tool. * libavogadro/src/cube.cpp, libavogadro/src/cube.h: Fixes for the Cube class to work with the new MeshGenerator class. * libavogadro/include/avogadro/meshgenerator.h, libavogadro/src/meshgenerator.cpp, libavogadro/src/meshgenerator.h: Added a new MeshGenerator class. The basic code is derived from that found at http://local.wasp.uwa.edu.au/~pbourke/geometry/polygonise/ Specifically the marchingsource.cpp file authored by Cory Bloyd and placed in the public domain (thanks Cory). I then made it play nice with the new Avogadro classes and put it in its own thread. I have not actually added the duplicate vertex detection yet. This new class is able to generate meshes significantly faster that the previous code. 2008-12-05 Tim Vandermeersch * libavogadro/src/python/TODO, libavogadro/src/python/color.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/plugin.cpp, libavogadro/src/python/qtlib.cpp, libavogadro/src/python/tool.cpp, libavogadro/src/python/unittest/color.py, libavogadro/src/python/unittest/suite.py, libavogadro/src/python/unittest/tool.py: Add python unit tests for Tool and Color * libavogadro/src/python/TODO, libavogadro/src/python/unittest/pluginfactory.py, libavogadro/src/python/unittest/suite.py: Add python unit test for PluginFactory * libavogadro/src/python/TODO, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/plugin.cpp, libavogadro/src/python/pluginmanager.cpp, libavogadro/src/python/qlist.cpp, libavogadro/src/python/toolgroup.cpp, libavogadro/src/python/unittest/pluginmanager.py, libavogadro/src/python/unittest/suite.py, libavogadro/src/python/unittest/toolgroup.py: Wrap PluginManager & ToolGroup classes and added unit tests for them * libavogadro/src/plugin.h, libavogadro/src/toolgroup.cpp: * libavogadro/src/plugin.h: Remove ProjectPlugin from the Type enum. * libavogadro/src/toolgroup.cpp: Add index checking in ToolGroup::setActiveTool(int index). * libavogadro/src/python/TODO, libavogadro/src/python/main.cpp, libavogadro/src/python/primitivelist.cpp, libavogadro/src/python/qlist.cpp, libavogadro/src/python/unittest/primitivelist.py, libavogadro/src/python/unittest/suite.py: Add python unit test for PrimitiveList * libavogadro/src/python/TODO, libavogadro/src/python/eigen.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/mesh.cpp, libavogadro/src/python/std_vector.cpp, libavogadro/src/python/unittest/mesh.py, libavogadro/src/python/unittest/suite.py: * libavogadro/src/python/std_vector.cpp: Add std::vector, needed for mesh * libavogadro/src/python/eigen.cpp: Add more typechecking, there was some pointer arithmatic going on with the wrong types Python seems to use long and double here as default, but we also accept int and float. An array from python with doubles can now correctly be converted to a Vector3f. * libavogadro/src/python/TODO, libavogadro/src/python/residue.cpp, libavogadro/src/python/unittest/residue.py, libavogadro/src/python/unittest/suite.py: Add python unit test for Residue * libavogadro/src/cube.cpp, libavogadro/src/python/TODO, libavogadro/src/python/cube.cpp, libavogadro/src/python/eigen.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/std_vector.cpp, libavogadro/src/python/unittest/cube.py, libavogadro/src/python/unittest/fragment.py, libavogadro/src/python/unittest/molecule.py, libavogadro/src/python/unittest/suite.py, libavogadro/src/python/unittest/template.py: * libavogadro/src/python/unittest/*: Add template & cube tests * libavogadro/src/python/*: Add std::vector wrapper, bug fix for eigen.cpp & cube.cpp * libavogadro/src/cube.cpp: Bugfix in setLimits(Molecule*, double, double), don't assume any atom will have coordinates < (0,0,0) 2008-12-04 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/extensions/shaderdialog.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/python/glwidget.cpp: Added a view option to turn quick rendering on and off, for those times when you want eye candy all of the time. 2008-12-04 Tim Vandermeersch * libavogadro/src/colors/elementcolor.cpp, libavogadro/src/engines/bsdyengine.cpp: elementcolor.cpp: give atoms with atomicNumber 0 a drak grey color bsdyengine.cpp: give them a radius Helps with interactive python scripting: molecule.newAtom() will show the atom when the bsdy engine using element coloring is enabled (=default) * libavogadro/src/python/TODO, libavogadro/src/python/bond.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/primitive.cpp, libavogadro/src/python/unittest/atom.py, libavogadro/src/python/unittest/bond.py, libavogadro/src/python/unittest/suite.py: Python bindings unit tests for Atom, Bond & Molecule complete * libavogadro/src/engines/python/cubepoints.py, libavogadro/src/engines/python/pythonTestEngine.py, libavogadro/src/python/atomTest.py: Replace import Numeric with import numpy 2008-12-04 Marcus D. Hanwell * CMakeLists.txt, libavogadro/src/CMakeLists.txt: Removed the AVO_LINK_LIBS status message. Fixed up the Find LibXml2 call for those of us with case sensitive file systems. * libavogadro/src/extensions/shaderdialog.ui, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/shaderextension.h: Fixed the rest of the shader calls that had not been ARBified. Added the ability to load shader programs. 2008-12-04 Geoffrey Hutchison * CMakeLists.txt, avogadro/src/CMakeLists.txt, cmake/modules/FindGLEW.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt: Updates to GLEW includes for those of us with non-standard paths. * libavogadro/src/avogadroformat.cpp, libavogadro/src/xml.cpp: Draft attempts at an avogadro format. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui, libavogadro/src/extensions/fileimportextension.cpp: Reorganize menus -- add an "Import" submenu on the File menu. (There should be a default to open files with strange extensions by specifying the Open Babel format.) 2008-12-04 Marcus D. Hanwell * libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/glwidget.cpp: Ported to use the ARB syntax, should work on older graphics cards. Still works the same here. * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/mesh.cpp, libavogadro/src/mesh.h: The quest for greater stability continues, I think this is a reasonable solution for things like meshes. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Only use OpenGL 2.0 functions when GLEW finds OpenGL 2.0 capabilities. * libavogadro/src/bond.cpp, libavogadro/src/bond.h: Implemented the bond length member function. I hope LaserJock is happy now. 2008-12-04 Tim Vandermeersch * libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h: Always call Molecule::update() when a user enters a command in the python terminal widget, makes the scripting terminal much more interactive... 2008-12-04 Marcus D. Hanwell * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/shaders/phong.params, .../src/extensions/shaders/x-ray-cryos.frag, .../src/extensions/shaders/x-ray-cryos.params, .../src/extensions/shaders/x-ray-cryos.vert, libavogadro/src/extensions/shaders/x-ray.frag, libavogadro/src/extensions/shaders/x-ray.params, libavogadro/src/extensions/shaders/x-ray.vert, libavogadro/src/glwidget.cpp: Added a few new shaders along with their parameter files. Added the ability to load parameter files into shaders and got the x-ray shader working. 2008-12-04 Tim Vandermeersch * sip/README, sip/avogadro.sip, sip/camera.sip, sip/color.sip, sip/configure.py, sip/eigen.sip, sip/engine.sip, sip/glwidget.sip, sip/openbabel.sip, sip/painter.sip, sip/painterdevice.sip, sip/plugin.sip, sip/pluginmanager.sip, sip/primitive.sip, sip/primitivelist.sip, sip/test.py, sip/test.sdf, sip/test_Transform3d.py, sip/test_Vector3d.py, sip/tool.sip, sip/toolgroup.sip: Delete obsolete sip python bindings 2008-12-03 Tim Vandermeersch * libavogadro/src/python/TODO, libavogadro/src/python/eigen.cpp, libavogadro/src/python/unittest/atom.py, libavogadro/src/python/unittest/bond.py, libavogadro/src/python/unittest/eigen.py, libavogadro/src/python/unittest/suite.py: * libavogadro/src/python/eigen.cpp: add converters for all to/from Tranform3d objects. Add a class with get/set functions for all combinations of Vector3x/Tranform3d, used for unit testing. * libavogadro/src/python/unittest/*: Unit tests for python bindings. Currently atom, bond and the Eigen converters are covered. To run test suite: $python libavogadro/src/python/unittest/suite.py * avogadro/src/mainwindow.cpp, libavogadro/src/pluginitemmodel.cpp, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: pluginmanager.*: Add static method PluginManager::instance(), replaces the global instance pluginManager pluginitemmodel.cpp, mainwindow.cpp: update to use PluginManager::instance() 2008-12-03 Marcus D. Hanwell * libavogadro/src/extensions/shaderdialog.ui, libavogadro/src/extensions/shaderextension.cpp: Made the shaders more flexible hopefully more robust. * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/glpainter.cpp: Port to use squaredNorm() as norm2() is deprecated now. * libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/shaderdialog.ui, libavogadro/src/extensions/shaderextension.cpp, libavogadro/src/extensions/shaderextension.h, libavogadro/src/extensions/shaders/clip.frag, libavogadro/src/extensions/shaders/clip.vert, libavogadro/src/extensions/shaders/gooch.frag, libavogadro/src/extensions/shaders/gooch.vert, libavogadro/src/extensions/shaders/light.frag, libavogadro/src/extensions/shaders/light.vert, libavogadro/src/extensions/shaders/marble.frag, libavogadro/src/extensions/shaders/marble.vert, .../src/extensions/shaders/per-pixel-lighting.frag, .../src/extensions/shaders/per-pixel-lighting.vert, libavogadro/src/extensions/shaders/per_pixel2.frag, libavogadro/src/extensions/shaders/per_pixel2.vert, .../src/extensions/shaders/phong-use-diffuse.frag, .../src/extensions/shaders/phong-use-diffuse.vert, libavogadro/src/extensions/shaders/phong.frag, libavogadro/src/extensions/shaders/phong.vert, libavogadro/src/extensions/shaders/plasma.frag, libavogadro/src/extensions/shaders/plasma.vert, libavogadro/src/extensions/shaders/vmd.frag, libavogadro/src/extensions/shaders/vmd.vert, libavogadro/src/glwidget.cpp: Added the ShaderExtension which allows you to assign a shader to an engine. Still not implemented shader loading from arbitrary files - will do it soon. It currently loads all shader pairs in share/libavogadro/shaders, probably not optimal but it allows people to check out shaders now while I finish up a few bits. * avogadro/src/mainwindow.cpp, libavogadro/include/avogadro/glgraphicsview.h, libavogadro/src/glgraphicsview.cpp, libavogadro/src/glgraphicsview.h: Added experimental GLGraphicsView detachment, more a proof of concept right now, performance is quite poor, antialiasing is disabled and text does not render correctly. It does however draw widgets etc on top of the GLWidget. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added a new member function for the GLGraphicsView, added GLEW initialisation in order to check for shader support and hopefully did not break anything in the process. 2008-12-03 Geoffrey Hutchison * CMakeLists.txt, cmake/modules/FindGLEW.cmake, cmake/modules/FindNumpy.cmake, libavogadro/src/python/CMakeLists.txt: Minor Cmake magic to get everything compiling on Mac. (Silly Apple, stick to traditional paths more often!) 2008-12-03 Tim Vandermeersch * libavogadro/src/boost.h, libavogadro/src/engines/python/cubepoints.py, libavogadro/src/engines/python/pythonTestEngine.py, libavogadro/tests/CMakeLists.txt: * libavogadro/tests/CMakeLists.txt: remove ${EXECUTABLE_OUTPUT_PATH}, "make test" now works here... * libavogadro/src/engines/python/cubepoints.py: Another example engine, renders cubes as 10x10x10 points colored red/blue for -/+ * libavogadro/src/python/TODO, libavogadro/src/python/camera.cpp, libavogadro/src/python/color.cpp, libavogadro/src/python/engine.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/mesh.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/painter.cpp, libavogadro/src/python/tool.cpp: Various updates to python bindings 2008-12-02 Tim Vandermeersch * libavogadro/src/engines/python/wireframe.py, libavogadro/src/python/color.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/plugin.cpp: * libavogadro/src/python/*: Wrap Plugin and Color classes. * libavogadro/src/engines/python/wireframe.py: Use Color class 2008-12-02 Marcus D. Hanwell * avogadro/src/main.cpp, libavogadro/src/color.h, libavogadro/src/cylinder.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h: Changes needed in order to compile libavogadro with GLEW, needs to be included before gl.h/QGLWidget. * CMakeLists.txt, cmake/modules/FindGLEW.cmake, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt: Build system updates. Some clean ups and also added an option for GLSL using the GLEW library. 2008-12-02 Tim Vandermeersch * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/python/engine.py, libavogadro/src/engines/python/pythonTestEngine.py, libavogadro/src/engines/python/wireframe.py, libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/pythonengine.h, libavogadro/src/engines/pythonsettingswidget.ui: Improve python engine and add a more realistic example: a wireframe engine * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/python/engine.py, libavogadro/src/engines/pythonengine.cpp, libavogadro/src/engines/pythonengine.h: * libavigadro/engines/pythonengine.*: Initial attempt to create a python engine, still needs some work but it works \o/ * libavogadro/engines/python/engine.py: example engine (note: for now, the python engine uses the first script it finds...) * libavogadro/include/avogadro/pythonscript.h, libavogadro/src/extensions/python/deleteAll.py, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/pythonscript.cpp, libavogadro/src/pythonscript.h: * libavogadro/src/pythonscript.*: Moved here from pythonextension.* * src/extensions/pythonextension.*: remove PythonScript, now in libavogadro. * src/extensions/python/deleteAll.py: update this script to work with new API * libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/TODO, libavogadro/src/python/atom.cpp, libavogadro/src/python/atomTest.py, libavogadro/src/python/bond.cpp, libavogadro/src/python/cube.cpp, libavogadro/src/python/fragment.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/painter.cpp, libavogadro/src/python/painterdevice.cpp, libavogadro/src/python/primitive.cpp, libavogadro/src/python/qlist.cpp, libavogadro/src/python/qstring.cpp, libavogadro/src/python/residue.cpp: * libavogadro/src/python/*: update boost python bindings (QString, QList, QList, Painter, PainterDevice, ...) 2008-12-01 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Fix minor bug with Mac and project tree editor. * libavogadro/src/plugin.cpp, libavogadro/src/plugin.h: Add support for *all* plugins to have settings widgets (e.g., colors too) 2008-11-30 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Added some very initial support for detached views. Still needs more work, cannot set engines etc right now. It does work in the basic sense though and can be amazingly useful for some work. I will hopefully smooth this out a little more very soon. * libavogadro/src/molecule.cpp, libavogadro/tests/moleculetest.cpp: Updated with some new tests, noticed an initialisation bug in setAtomPos. There might be something in this unit testing thing... 2008-11-30 Tim Vandermeersch * libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/atom.cpp, libavogadro/src/python/bond.cpp, libavogadro/src/python/camera.cpp, libavogadro/src/python/cube.cpp, libavogadro/src/python/eigen.cpp, libavogadro/src/python/fragment.cpp, libavogadro/src/python/glwidget.cpp, libavogadro/src/python/main.cpp, libavogadro/src/python/molecule.cpp, libavogadro/src/python/primitive.cpp, libavogadro/src/python/residue.cpp: split boost python bindings into multiple files 2008-11-30 Marcus D. Hanwell * CMakeLists.txt, libavogadro/CMakeLists.txt, libavogadro/tests/CMakeLists.txt, libavogadro/tests/moleculetest.cpp: Added some initial unit testing using QTestLib and CTest. Use make test for basic reporting, or run ctest -V in the build directory for more detailed output. Test coverage is currently terrible, but it gives a template and I will flesh it out. We need unit testing for core functionality. 2008-11-29 Tim Vandermeersch * avogadro/src/mainwindow.cpp, avogadro/src/projectdelegates/atomdelegate.cpp, avogadro/src/projectdelegates/bonddelegate.cpp, avogadro/src/projectdelegates/residuedelegate.cpp, avogadro/src/projecttreemodel.cpp, avogadro/src/projecttreemodel.h, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/glwidget.h, libavogadro/src/molecule.cpp, libavogadro/src/python/CMakeLists.txt, libavogadro/src/python/wrapper.cpp, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/pythoninterpreter.h: * libavogadro/src/python: Compile the boost python bindings seperatly so they can also be used from outside avogadro. * libavogadro/src/pythoninterpreter.*: remove the boost.h include... * libavogadro/src/molecule.cpp: Don't segfault when you call atomPos before setPos. * libavogadro/src/glwidget.h: remove undefined function toolManger (we have a toolGroup/setToolGroup. * libavogadro/src/extensions/pythonextension.*: remove boost.h include... * avogadro/src/projecttreemodel.*, avogadro/src/projectdelegates/*: some small improvements * avogadro/src/mainwindow.cpp: Use QPixmap::grapWidget to export png images. (Should work on more platforms. If it causes problems on other platforms we can still use QGLFramebufferObject::hasOpenGLFramebufferObjects() to detect which method to use.) 2008-11-28 Geoffrey Hutchison * libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/elementcolor.h, libavogadro/src/colors/indexcolor.cpp, libavogadro/src/colors/indexcolor.h, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/colors/residuecolor.h: Updated color plugins, including new "color by index" -- rainbow based on atom index. 2008-11-27 Marcus D. Hanwell * libavogadro/src/atom.cpp, libavogadro/src/bond.cpp, libavogadro/src/molecule.cpp, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp: Chased down the bonding bugs and hopefully optimized some of this code a little. Please test and report any issues I might have missed. * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/bond.cpp, libavogadro/src/bond.h, libavogadro/src/molecule.cpp: Some optimizations and tweaks to the atom, bond and molecule classes. Still some drawing bugs I am tracking down... 2008-11-26 Marcus D. Hanwell * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/fileimportdialog.ui, libavogadro/src/extensions/fileimportextension.cpp, libavogadro/src/extensions/fileimportextension.h: Added a new file import dialog, initially concentrating purely on xyz files and amber parameter files. Still pretty rough around the edges. * libavogadro/src/atom.cpp, libavogadro/src/bond.cpp, libavogadro/src/bond.h, libavogadro/src/molecule.cpp: Some updates to the bond, atom and molecule classes. Hopefully improving speed a little. 2008-11-25 Marcus D. Hanwell * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.h, avogadro/src/settingsdialog.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added a fog setting to the GLWidget. The numbers still need tweaking but it demonstrates the effect. * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Added partial charge calculation and caching. Also made a start on adding locking to the molecule class. I did not find any deadlocks but please report if you do. Still more locking needed, finer granularity may be necessary. 2008-11-24 Tim Vandermeersch * avogadro/src/editcommands.cpp, avogadro/src/projectdelegates/residuedelegate.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/tools/autoopttool.cpp: * libavogadro/src/molecule.*: Add Molecule::residue(index) and Molecule::residueById(id). * avogadro/src/editcommands.cpp: Handle Bond and Residue primitives in ClearCommand and CutCommand. * avogadro/src/projectdelegates/residuedelegate.cpp: Also add the residue itself to the primitives (for selection). * libavogadro/src/tools/autoopttool.cpp: optimize the way we retreive coordinates from the OBMol object. * libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/constraintsdialog.cpp, libavogadro/src/extensions/constraintsmodel.cpp, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h: Add the force field extension again, conformers not handled at the moment and marked with FIXME. 2008-11-24 Marcus D. Hanwell * libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povraydialog.ui: Few tweaks to tab order, added the fileName widget to the signals connected to the updateCommandLine slot. * libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povraydialog.h, libavogadro/src/extensions/povrayextension.cpp: Several improvements to the POV-Ray extension, update the command line more frequently, use the supplied path and work from the directory specified. 2008-11-23 Marcus D. Hanwell * libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povrayextension.cpp: Set the working directory of the process, only use relative paths as POV-Ray can be paranoid. Should improve rendering success on systems configured in quite restrictive ways. * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/cube.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/glwidget.cpp, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/painter.h, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Main change is having the molecule manage the atom's coordinates. This should open up the possibility of quickly changing the coordinate set and redrawing. The main practical difference is Vector3d being a pointer rather than a reference. Everything else is pretty much porting to the new API. Small fix to the molecule constructor to assign a default file name. 2008-11-23 Tim Vandermeersch * avogadro/src/mainwindow.cpp, avogadro/src/projectdelegates/residuedelegate.cpp: * small bug fix for ResidueDelegate * remove obsolete connect() call from mainwindow.cpp * avogadro/src/projectdelegates/moleculedelegate.cpp, avogadro/src/projectdelegates/moleculedelegate.h, avogadro/src/projectdelegates/residuedelegate.cpp, avogadro/src/projectdelegates/residuedelegate.h, avogadro/src/projecttreeeditor.cpp, avogadro/src/projecttreemodel.cpp: * Add ResidueDelegate * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/projectdelegates/atomdelegate.cpp, avogadro/src/projectdelegates/atomdelegate.h, avogadro/src/projectdelegates/bonddelegate.cpp, avogadro/src/projectdelegates/bonddelegate.h, avogadro/src/projectdelegates/labeldelegate.cpp, avogadro/src/projectdelegates/labeldelegate.h, avogadro/src/projectdelegates/moleculedelegate.cpp, avogadro/src/projectdelegates/moleculedelegate.h, avogadro/src/projectplugin.cpp, avogadro/src/projectplugin.h, avogadro/src/projectplugins/atomitems.cpp, avogadro/src/projectplugins/atomitems.h, avogadro/src/projectplugins/bonditems.cpp, avogadro/src/projectplugins/bonditems.h, avogadro/src/projectplugins/labelitems.cpp, avogadro/src/projectplugins/labelitems.h, avogadro/src/projectplugins/moleculeitems.cpp, avogadro/src/projectplugins/moleculeitems.h, avogadro/src/projecttreeeditor.cpp, avogadro/src/projecttreeeditor.h, avogadro/src/projecttreeitem.cpp, avogadro/src/projecttreeitem.h, avogadro/src/projecttreemodel.cpp, avogadro/src/projecttreemodel.h, avogadro/src/projecttreemodeldelegate.cpp, avogadro/src/projecttreemodeldelegate.h: * Some renaming in the Project Tree area: There is now the ProjectTreeModel which delegates its work to various ProjectTreeModelDelegate objects. * Dynamic initialization of the model: \o/ Using QAbstractItemModel::hasChildren(), canFecthMore() and fetchMore() it is possible to delay the initialization (and connecting of singals) until the user actually expands the item. * Still need to update some documentation and add a ResidueDelegate, ... 2008-11-22 Tim Vandermeersch * avogadro/src/CMakeLists.txt, avogadro/src/back.png, avogadro/src/down.png, avogadro/src/forward.png, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/minus.png, avogadro/src/plus.png, avogadro/src/projectplugin.cpp, avogadro/src/projectplugin.h, avogadro/src/projectplugins/atomitems.cpp, avogadro/src/projectplugins/atomitems.h, avogadro/src/projectplugins/bonditems.cpp, avogadro/src/projectplugins/bonditems.h, avogadro/src/projectplugins/labelitems.cpp, avogadro/src/projectplugins/labelitems.h, avogadro/src/projectplugins/moleculeitems.cpp, avogadro/src/projectplugins/moleculeitems.h, avogadro/src/projecttreeeditor.cpp, avogadro/src/projecttreeeditor.h, avogadro/src/projecttreeeditor.qrc, avogadro/src/projecttreeeditor.ui, avogadro/src/projecttreeitem.cpp, avogadro/src/projecttreeitem.h, avogadro/src/projecttreemodel.cpp, avogadro/src/projecttreemodel.h, avogadro/src/up.png, libavogadro/include/avogadro/projectplugin.h, libavogadro/include/avogadro/projecttreeeditor.h, libavogadro/src/CMakeLists.txt, libavogadro/src/boxcontrol.cpp, libavogadro/src/cube.cpp, libavogadro/src/projectplugin.cpp, libavogadro/src/projectplugin.h, libavogadro/src/projectplugins/CMakeLists.txt, libavogadro/src/projectplugins/selectionitem.cpp, libavogadro/src/projectplugins/selectionitem.h, libavogadro/src/projectplugins/smartsitems.cpp, libavogadro/src/projectplugins/smartsitems.h, libavogadro/src/projectplugins/smartsitems.ui, libavogadro/src/projecttreeeditor.cpp, libavogadro/src/projecttreeeditor.h, libavogadro/src/projecttreeeditor.ui: * move Project Tree stuff from libavogadro to avogadro * implement a QAbstractItemModel for the tree * lots of bug fixes 2008-11-21 Marcus D. Hanwell * libavogadro/src/atom.cpp, libavogadro/src/extensions/povpainter.cpp: Fixed up the POV-Ray drawColorMesh function - looks very nice. * libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/mesh.cpp, libavogadro/src/mesh.h, libavogadro/src/molecule.cpp, libavogadro/src/painter.h: Ported the surface engine to the new API, added multiple color support to the GLPainter. added partial charge importing to Atom and a few minor cleanups. * avogadro/src/mainwindow.cpp, libavogadro/src/CMakeLists.txt, libavogadro/src/glwidget.cpp: Commented out the new ProjectTree stuff for now - it was causing build failures. Also Avogadro should be able to build independently of LibAvogadro. Depending on the ui header generation in libavogadro from avogadro should not be done as it will not necessarily exist. 2008-11-21 Geoffrey Hutchison * libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h: Port patch from Carsten with const iterators. 2008-11-21 Tim Vandermeersch * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/projecttreeeditor.cpp, libavogadro/src/projecttreeeditor.h: update the project tree widget without needing a restart * ChangeLog, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/include/avogadro/projectplugin.h, libavogadro/include/avogadro/projecttreeeditor.h, libavogadro/src/CMakeLists.txt, libavogadro/src/molecule.cpp, libavogadro/src/plugin.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/projectplugin.cpp, libavogadro/src/projectplugin.h, libavogadro/src/projectplugins/CMakeLists.txt, libavogadro/src/projectplugins/selectionitem.cpp, libavogadro/src/projectplugins/selectionitem.h, libavogadro/src/projectplugins/smartsitems.cpp, libavogadro/src/projectplugins/smartsitems.h, libavogadro/src/projectplugins/smartsitems.ui, libavogadro/src/projecttreeeditor.cpp, libavogadro/src/projecttreeeditor.h, libavogadro/src/projecttreeeditor.ui: * libavogadro/src/projectplugin.*: A new plugin type to create a user configurable tree view with various items (User Selections, Chains/Residues, smarts, ...) * libavogadro/src/pluginmanager.*: load the new ProjectPlugins. * libavogadro/src/molecule.cpp: Add a check in ::OBMol() to make sure the both bond atoms exist before adding the bond. This was causing a problem when functions, invoked by the Molecule::primitive*() signals, called it. * libavogadro/src/projectplugins/smartsitems.*: A ProjectPlugin for smarts patterns. This is the only plugin working at the moment, still some performance issues too. * libavogadro/src/projectplugins/selectionitem.*: still need to update this, not build right now... * libavogadro/src/projecttreeeditor.*: The tree editor. Still need to add the arrow images... * libavogadro/src/plugin.h: Add the new type to the Type enum. * avogadro/src/mainwindow.*: Use the Project Tree View system. The old Project dock is replaced, the editor is available through Settings > Project Tree Editor. The code still has some rough edges, but it works well enough to illustrate what it could become.... 2008-11-20 Marcus D. Hanwell * libavogadro/src/atom.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h: Added the polygon engine back in. I think valency needs implementing properly but this works for now... Next is adding multiple colour support into the Mesh class. * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/molecule.cpp, libavogadro/src/residue.cpp, libavogadro/src/residue.h: Improved residue support, added back in the GLWidget and ported the ribbon engine. * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/namedselectionmodel.cpp, libavogadro/src/extensions/selectextension.cpp: Ported the select extension. Seems to work quite well but had to comment out some bits in the namedselectionmodel class. Tim - I think that might need a little TLC. 2008-11-19 Marcus D. Hanwell * libavogadro/src/fragment.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/residue.cpp, libavogadro/src/residue.h: First attempt at fleshing out the Residue class. It probably still needs to bring more data across from the OBMol. Also fleshed out the setOBMol function a little, needs adding to OBMol in Molecule to save the Residues too. 2008-11-18 Marcus D. Hanwell * libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Made the orbital extension much cleverer. It now uses the molecules file name, determines if it can process it and then imports it. Also unhidden the fields where the cube size can be set. * avogadro/src/mainwindow.cpp, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/povrayextension.h: Added the setFileName call to the MainWindow class. Ported POVRayExtension to take advantage of the fileName parameter. * libavogadro/src/molecule.cpp, libavogadro/src/molecule.h: Added fileName as a property of the molecule. Gives extensions etc access to this information if set. Also added various objects to the destructor and removed some debugging. Added more documentation for the new API. * libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povraydialog.h, libavogadro/src/extensions/povraydialog.ui, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/povrayextension.h: Added lots more options to the POV-Ray dialog, it now saves its settings (as can all extensions now). Should be more robust. 2008-11-17 Marcus D. Hanwell * libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h: OK, I spotted the silly mistake. A bool is not a double! I think this update also makes it simpler for users to change the aspect ratio themselves. * libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povraydialog.h, libavogadro/src/extensions/povrayextension.cpp: Some updates to respect the requested image dimensions. The aspect ratio is still not getting through and so many images come out distorted. Any ideas? * avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/savedialog.cpp, libavogadro/include/avogadro/atom.h, libavogadro/include/avogadro/bond.h, libavogadro/include/avogadro/boxcontrol.h, libavogadro/include/avogadro/cube.h, libavogadro/include/avogadro/fragment.h, libavogadro/include/avogadro/line.h, libavogadro/include/avogadro/mesh.h, libavogadro/include/avogadro/molecule.h, libavogadro/include/avogadro/point.h, libavogadro/include/avogadro/residue.h, libavogadro/src/CMakeLists.txt, libavogadro/src/atom.cpp, libavogadro/src/atom.h, libavogadro/src/bond.cpp, libavogadro/src/bond.h, libavogadro/src/boost.h, libavogadro/src/boxcontrol.cpp, libavogadro/src/boxcontrol.h, libavogadro/src/camera.cpp, libavogadro/src/color.h, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/cube.cpp, libavogadro/src/cube.h, libavogadro/src/engine.cpp, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/surfacesettingswidget.ui, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessinputdata.h, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/povpainter.cpp, libavogadro/src/extensions/povpainter.h, libavogadro/src/extensions/povraydialog.cpp, libavogadro/src/extensions/povraydialog.h, libavogadro/src/extensions/povraydialog.ui, libavogadro/src/extensions/povrayextension.cpp, libavogadro/src/extensions/povrayextension.h, libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/fragment.cpp, libavogadro/src/fragment.h, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/line.cpp, libavogadro/src/line.h, libavogadro/src/mesh.cpp, libavogadro/src/mesh.h, libavogadro/src/molecule.cpp, libavogadro/src/molecule.h, libavogadro/src/painter.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h, libavogadro/src/point.cpp, libavogadro/src/point.h, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/residue.cpp, libavogadro/src/residue.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: MERGE the primitive branch with trunk. There are still quite a few extensions not ported, some engines and tools too. I would appreciate testing, comments and help with porting. There are some big changes to the API, some disabled functions and likely some new bugs introduced. 2008-09-18 Tim Vandermeersch * ChangeLog, libavogadro/src/colors/CMakeLists.txt, sip/README, sip/avogadro.sip, sip/color.sip, sip/configure.py, sip/eigen.sip, sip/engine.sip, sip/glwidget.sip, sip/openbabel.sip, sip/plugin.sip, sip/pluginmanager.sip, sip/primitive.sip, sip/test.py, sip/test.sdf, sip/test_Transform3d.py, sip/test_Vector3d.py, sip/toolgroup.sip: * libavogadro/src/colors/CMakeLists.txt: remove elementcolor, this is statically linked into libavogadro. * sip/*: Update SIP python bindings. 2008-09-17 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/surfaceengine.cpp: * libavogadro/src/engines/surfaceengine.cpp: Don't try to compute and render a surface when there are no atoms. This was also causing a crash when starting avogadro with the surface engine enabled on one of my computers here. 2008-08-25 Benoit Jacob * libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/cylinder.cpp, libavogadro/src/glpainter.cpp: - make color store its channels as an array. Otherwise, there's no guarantee that they're adjacent in memory so usage of glColor4fv is dangerous. - make use of the 'v' GL functions like glVertex3dv instead of glVertex3d everywhere in GLPainter. - some cosmetic fixes in Cylinder. * CMakeLists.txt, INSTALL, avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, cmake/modules/FindEigen.cmake, cmake/modules/FindEigen2.cmake, cmake/modules/FindPackageHandleStandardArgs.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/iso.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/supercellbuilder.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/painterengine.h, libavogadro/src/povpainter.cpp, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/sphere.h, libavogadro/src/textrenderer.h, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/quaternion.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h, scripts/cmake-vs2005.bat, sip/camera.sip, sip/eigen.sip: * Port to Eigen2 * Some misc simplifications and optimizations * CMakeLists: use CMAKE_BUILD_TYPE is the same way as KDE does 2008-08-15 Marcus D. Hanwell * ChangeLog, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Fixed compilation errors introduced with the new setQuickRenderEnabled and isQuickRenderEnabled. Is the Enabled part needed? 2008-08-14 Naomi Fox * libavogadro/src/extensions/animationdialog.cpp, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/linmorphdialog.cpp, libavogadro/src/extensions/linmorphdialog.h, libavogadro/src/extensions/linmorphdialog.ui, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/linmorphextension.h: * animationextension.* : added functionality to read xyz trajectory file as defined here: http://www.ks.uiuc.edu/Research/vmd/plugins/molfile/xyzplugin.html * linmorphextension.* : added functionality to write xyz trajectory file. * linmorphdialog.ui: removed save-pov-snapshots button and replaced with save-xyz-trajectory button. * animationdialog.ui : added *.xyz extension for open file option. 2008-08-14 Donald Ephraim Curtis * ChangeLog, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Removed "stable" attribute from the glwidget. There was a reason we had this but I can't remember anymore. Updated the ChangeLog 2008-08-14 Marcus D. Hanwell * ChangeLog, avogadro/src/mainwindow.cpp: Revert the settingsWindow from being instantiated as a child of MainWindow - caused issues here. 2008-08-13 Donald Ephraim Curtis * avogadro/src/enginecolorswidget.cpp, avogadro/src/enginecolorswidget.h, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.h, avogadro/src/settingsdialog.ui, libavogadro/src/glwidget.cpp, libavogadro/src/plugin.cpp, libavogadro/src/plugin.h, libavogadro/src/plugindialog.cpp, libavogadro/src/pluginitemmodel.cpp, libavogadro/src/pluginitemmodel.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h: Rehauled the PluginManager to be much easier to use. By default all Factories are loaded and retrieved through the PluginManager. In addition, instances of Colors, Tools, and Extensions can be retrieved from the manager by creating an instance and using the appropriate function. This fixed a bug where every MainWindow was sharing the same set of Plugins. Added an option in the settings to select which direction the tabs on the tabbed widget should go {top, bottom, left, right}. Fixed up a few other things to utilize the new pluginmanager architecture. There was some refactoring done. 2008-08-12 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, libavogadro/src/boost.h, libavogadro/src/pluginmanager.cpp: Fixed a bug in the animated "center" command. Added some extra functions to the Python module. Added a *.so filter to the plugin manager for when loading plugins on linux. 2008-08-11 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.ui: Added settings to disabled smooth transitions on the GLwidget. This is really the animation of certain movements. Right now only "center view" is animated. These additions animate the camera movement and don't work so well with the surface engine. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: "Center" command is now more fluid. This is the first step into having more fluid movement. While this is "eyecandy" some people might find it more intuitive and nice when using the program. Soon to have an option this is just my testing code. 2008-08-09 Naomi Fox * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/animationdialog.cpp, libavogadro/src/extensions/animationdialog.h, libavogadro/src/extensions/animationdialog.ui, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/extensions/trajvideomaker.h: * Fixed a bug in libavogadro/src/extensions/CMakeLists.txt where a needed source (linmorphdialog) was absent from the linmorph sources. * Added a progress dialog to trajectory video maker. * Added trajectory video making capability to the animation extension. 2008-08-08 Naomi Fox * ChangeLog, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/linmorphdialog.cpp, libavogadro/src/extensions/linmorphdialog.h, libavogadro/src/extensions/linmorphdialog.ui, libavogadro/src/extensions/linmorphextension.cpp, libavogadro/src/extensions/linmorphextension.h, libavogadro/src/extensions/trajvideomaker.cpp, libavogadro/src/extensions/trajvideomaker.h, testfiles/tyr-33-conf1.pdb, testfiles/tyr-33-conf2.pdb: * Took functionality of making a video of a trajectory from linmorph and placed into a separate class, TrajVideoMaker, with static functions. This way it can be reused with other trajectories. * Fixed a bug in linmorph so now the number of frames and the number of conformations match. 2008-08-06 Naomi Fox * ChangeLog, libavogadro/src/extensions/CMakeLists.txt: Merged revisions 1520-1542,1544-1549 via svnmerge from https://avogadro.svn.sourceforge.net/svnroot/avogadro/branches/animate ........ r1523 | naomifox | 2008-06-17 12:28:56 -0400 (Tue, 17 Jun 2008) | 11 lines LinMorph - first take. To run, open up testfiles/tyr-33-conf1.pdb, then under extensions --> animate mol, load file testfiles/tyr-33-conf2.pdb and press play. These two conformations were taken from: http://molmovdb.org/cgi-bin/morph-classic.cgi?ID=035639-9827 I took out all extensions from CMakeLists.txt other than the linmorph extension. ........ r1526 | naomifox | 2008-06-24 13:35:55 -0400 (Tue, 24 Jun 2008) | 3 lines linmorphextension now inherits from extension. not animatemolextension. ........ r1527 | naomifox | 2008-06-24 13:37:37 -0400 (Tue, 24 Jun 2008) | 6 lines linmorph now has its own dialog window and does not use animatemolextension's dialog (which will be removed). added a button for saving a trajectory as a file. ........ r1528 | naomifox | 2008-06-24 13:42:18 -0400 (Tue, 24 Jun 2008) | 3 lines Initialized merge tracking via "svnmerge" with revisions "1-1518" from https://avogadro.svn.sourceforge.net/svnroot/avogadro/trunk ........ r1529 | naomifox | 2008-06-25 10:32:21 -0400 (Wed, 25 Jun 2008) | 3 lines Ran svn-merge with branch. ........ r1531 | naomifox | 2008-07-01 10:09:05 -0400 (Tue, 01 Jul 2008) | 7 lines linmorph has feature to save a series of .pov snapshots that can later be compiled into a movie. also fixed the "player" so that numframes is adjusted correctly. ........ r1532 | naomifox | 2008-07-01 10:25:56 -0400 (Tue, 01 Jul 2008) | 3 lines Neatened up. Added headers for files. ........ r1533 | naomifox | 2008-07-01 10:40:18 -0400 (Tue, 01 Jul 2008) | 5 lines Fixed the order of initialization of member variables in the constructor to be the same ordering as that in the class declaration so we don't get compiler warnings. ........ r1534 | naomifox | 2008-07-01 11:02:40 -0400 (Tue, 01 Jul 2008) | 9 lines (1) removed any reference to animatemol (was going to be an abstract class for animations, but decided it was oo-overkill). (2) copied animation.qrc to linmorph.qrc. this is the file for those buttons (originally from Tim V). (3) updated linmorphdialog.ui to use linmorph.qrc, not animatemol.qrc ........ r1544 | naomifox | 2008-07-23 11:06:02 -0400 (Wed, 23 Jul 2008) | 5 lines 1. did svnmerge.py merge with the trunk 2. fixed linmorphextension and applyforceextension factories so that they now inhert from plugin factory and use the correct macros. ........ r1545 | naomifox | 2008-07-28 16:24:22 -0400 (Mon, 28 Jul 2008) | 3 lines Added ability to make a video of linmorph using povray and mencoder. ........ 2008-07-13 Donald Ephraim Curtis * avogadro/src/addenginedialog.cpp, avogadro/src/enginecolorswidget.cpp, avogadro/src/engineitemmodel.cpp, avogadro/src/mainwindow.cpp, libavogadro/include/avogadro/plugin.h, libavogadro/include/avogadro/pluginlistview.h, libavogadro/include/avogadro/pluginmanager.h, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/colorplugin.cpp, libavogadro/src/colorplugin.h, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/elementcolor.h, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/colors/residuecolor.h, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdysettingswidget.ui, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/extension.cpp, libavogadro/src/extension.h, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/pythonextension.h, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/supercellbuilder.h, libavogadro/src/extensions/templateextension.h, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/glwidget.cpp, libavogadro/src/plugin.cpp, libavogadro/src/plugin.h, libavogadro/src/plugindialog.ui, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h: Remove ColorPlugin cause it really doesn't need to be there. Also eliminated some un-needed functions in the engine class. Everything should rock now. I wish i could tell you more. 2008-07-12 Tim Vandermeersch * ChangeLog, avogadro/src/addenginedialog.cpp, avogadro/src/addenginedialog.h, avogadro/src/enginecolorswidget.cpp, avogadro/src/enginecolorswidget.ui, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, libavogadro/src/CMakeLists.txt, libavogadro/src/color.h, libavogadro/src/colorplugin.cpp, libavogadro/src/colorplugin.h, libavogadro/src/colors/CMakeLists.txt, libavogadro/src/colors/elementcolor.cpp, libavogadro/src/colors/elementcolor.h, libavogadro/src/colors/residuecolor.cpp, libavogadro/src/colors/residuecolor.h, libavogadro/src/elementcolor.cpp, libavogadro/src/elementcolor.h, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/forceengine.h, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/overlayengine.cpp, libavogadro/src/engines/overlayengine.h, libavogadro/src/engines/overlaysettingswidget.ui, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.h, libavogadro/src/extension.cpp, libavogadro/src/extension.h, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/namedselectionmodel.cpp, libavogadro/src/extensions/namedselectionmodel.h, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/pythonextension.h, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/supercellbuilder.h, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/plugin.cpp, libavogadro/src/plugin.h, libavogadro/src/plugindialog.cpp, libavogadro/src/plugindialog.ui, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/residuecolor.cpp, libavogadro/src/residuecolor.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.h: * avogadro/src/addenginedialog.*: Use new PluginFactory class. * avogadro/src/enginecolorswidget.*: Use new ColorPlugin class. * avogadro/src/main.cpp: Load the plugins here... * avogadro/src/mainwindow.cpp: Remove call to PluginManager::loadExtensions(). * libavogadro/src/CMakeLists.txt: Statically link ElementColor in libavogadro. * libavogadro/src/color.h: Move settingsWidget() to ColorPlugin. * libavogadro/src/elementcolor.*: Moved to colors/. * libavogadro/src/engine.*: Use new Plugin base class. * libavogadro/src/engines/CMakeLists.txt: Add overlay engine. * libavogadro/src/engines/*engine.h: Use new PluginFactory class. * libavogadro/src/extension.*: Use new Plugin base class. * libavogadro/src/extensions/*extension.h: Use new PluginFactory class. * libavogadro/src/glwidget.*: Use new PluginFactory class. * libavogadro/src/plugindialog.*: Use the PluginFactory's descriptions. Added Colors to the combo box. * libavogadro/src/pluginmanager.*: Load all plugins in the same generic function, PluginFactory::type() is used to determine the plugin type. * libavogadro/src/residuecolor.*: Moved to colors/. * libavogadro/src/tool.*: Use new Plugin base class. * libavogadro/src/toolgroup.cpp: Remove call to PluginManager::loadTools(). * libavogadro/src/tools/*tool.h: Use new PluginFactory class. * libavogadro/src/colorplugin.*: Add new ColorPlugin class for Color plugins. * libavogadro/src/colors/: New directory for color plugins. ElementColor and ResidueColor can now be found here. * libavogadro/src/engines/overlayengine.*, libavogadro/src/engines/overlaysettingswidget.ui: Replaces overlay extension. There is an initial delay when creating the QPainter on the QGLWidget... :( * libavogadro/src/plugin.*: New Plugin base class. 2008-07-10 Tim Vandermeersch * ChangeLog, avogadro/src/mainwindow.cpp, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h: * libavogadro/src/pluginmanager.*: Added support for extensions. * avogadro/src/mainwindow.cpp: Use PluginManager for extensions. * ChangeLog, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/overlayextension.cpp, libavogadro/src/extensions/overlayextension.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/plugindialog.cpp, libavogadro/src/plugindialog.h, libavogadro/src/plugindialog.ui, libavogadro/src/pluginitemmodel.cpp, libavogadro/src/pluginitemmodel.h, libavogadro/src/pluginlistview.cpp, libavogadro/src/pluginlistview.h, libavogadro/src/pluginmanager.cpp, libavogadro/src/pluginmanager.h, libavogadro/src/toolgroup.cpp: Plugin Manager: -------------- * libavogadro/src/pluginmanager.*: The PluginManager class. This class is now a central class to handle the loading of plugins. * libavogadro/src/pluginitemmodel.*: The PluginItemModel class. * libavogadro/src/pluginlistview.*: The PluginListView class. * libavogadro/src/plugindialog.*: The PluginManager dialog. * libavogadro/src/glwidget.*: Use PluginManager. * libavogadro/src/toolgroup.cpp: Use PluginManager. * avogadro/src/mainwindow.ui, avogadro/src/mainwindow.cpp: Use the PluginManager. Added the menu entry "Settings > Plugin Manager". TODO: - Avogadro needs to be restarted at the moment in order for the changes to take effect. - Not yet used for extensions. - Better descriptions, download updates, ... Compiling problems? - run cmake again to include the new *.h, *.cpp and *.ui files... - if mainwindow.cpp can't find , copy the file to /usr/(local/)include/avogadro 2008-07-07 Tim Vandermeersch * ChangeLog, libavogadro/src/painter.h, libavogadro/src/painterdevice.h, sip/README, sip/avogadro.sip, sip/camera.sip, sip/color.sip, sip/configure.py, sip/eigen.sip, sip/engine.sip, sip/glwidget.sip, sip/openbabel.sip, sip/painter.sip, sip/painterdevice.sip, sip/primitive.sip, sip/primitivelist.sip, sip/test.py, sip/tool.sip, sip/toolgroup.sip: * sip/*: Initial attempt to make SIP python bindings. * libavogadro/src/painter(device).h: export Painter and PainterDevice. See sip/README for more info (revert if this is wrong) 2008-07-04 Tim Vandermeersch * ChangeLog, avogadro/src/enginecolorswidget.cpp, avogadro/src/enginecolorswidget.h, avogadro/src/enginecolorswidget.ui, avogadro/src/mainwindow.cpp, libavogadro/src/engine.cpp: * avogadro/src/enginecolorswidget.*: Widget for setting an engine's color map. * avogadro/src/mainwindow.cpp: Add the color widget to engine settings window. * libavogadro/src/engine.cpp: emit changed() when Engine::setColorMap() is called. 2008-07-03 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/orbitalengine.cpp: Use some of the newer OBGridData API - requires OpenBabel trunk/OpenBabel 2.2.0 release. 2008-06-19 Benoit Jacob * libavogadro/src/color.cpp, libavogadro/src/povpainter.cpp, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/primitiveitemmodel.h: port a fix by Laurent Montel fixing 2 memleaks, in PrimitiveItemModel and in POVPainter. See: http://websvn.kde.org/?view=rev&revision=822121 By the way, this made me re-read the Color class. Why do we have all these virtual methods? Is there any reason why we might want to subclass Color? Or is it not-performance-critical? Also there now are many members to this class. That might be fine but one just needs to keep that in mind, don't allocate a whole array of objects of Color class, and don't create a new Color object too frequently (i.e. every few drawn triangles! i hope e.g. the Surface engine is not doing that). 2008-06-17 Geoffrey Hutchison * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h, libavogadro/src/engines/dipolesettingswidget.ui: Added some initial dipole engine settings. Klunky. 2008-06-16 Tim Vandermeersch * ChangeLog, libavogadro/src/boost.h: * libavogadro/src/boost.h: Add extract_swig_wrapped_ptr to convert SWIG object (from openbabel) to be converted to boost::python/C++ objects. Still very limited, but you can now do: >>> atom = obcore.OBAtom() >>> atom.SetAtomicNum(6) >>> Avogadro.molecule.AddAtom(atom) 2008-06-13 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/qcheminputdialog.cpp, libavogadro/src/extensions/qcheminputdialog.h, libavogadro/src/extensions/qcheminputdialog.ui: Added a new QChem input deck generator. The input file generated is still not correct but VLANs and the fact that it compiles mean it is better to add it now. 2008-06-12 Geoffrey Hutchison * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui: Added bond length label. * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp: Remove Mac pasteboard converter -- currently prevents drag-and-drop. * libavogadro/src/extensions/supercellbuilder.cpp, libavogadro/src/extensions/unitcellextension.cpp: Update to unit cell support -- update molecule to reflect changes in unit cell and translate properly to show super cell planes. 2008-06-12 Tim Vandermeersch * ChangeLog, avogadro/src/mainwindow.cpp: * avogadro/src/mainwindow.cpp: When opening a 2D file, ask to do a quick conversion to 3D. (scale bonds, wedge -> Z+1, hash -> Z-1, UFF 100 steps, should we add hydrogens?) 2008-06-11 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/clickmeasuretool.cpp: Fixed initialisation of the QVarLengthArray. 2008-06-11 Geoffrey Hutchison * libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/supercellbuilder.cpp, libavogadro/src/extensions/supercellbuilder.h, libavogadro/src/extensions/supercelldialog.cpp, libavogadro/src/extensions/supercelldialog.h, libavogadro/src/extensions/supercelldialog.ui: Initial "super cell builder." For now, simply rotate the camera to expose a partiacular Miller plane of the crystal. 2008-06-09 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui: Added a compact form of the z-matrix as an option. 2008-06-09 Tim Vandermeersch * libavogadro/src/extensions/namedselectionmodel.cpp, libavogadro/src/extensions/namedselectionmodel.h: forgot files :( * ChangeLog, libavogadro/src/boost.h: * libavogadro/src/glwidget.*: Functions for named selections. * libavogadro/src/extensions/selectextension.*, libavogadro/src/extension/namedselectionmodel.*: Use them. At the moment the model is a simple list. I needed this functionality for specifying interaction groups in the force field setup dialog. This would be expanded in the future (tree view). * libavogadro/src/boost.h: adjust OBMol::AddHydrogens() for added pH paramter. * ChangeLog, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: * libavogadro/src/glwidget.*: Functions for named selections. * libavogadro/src/extensions/selectextension.*, libavogadro/src/extension/namedselectionmodel.*: Use them. At the moment the model is a simple list. I needed this functionality for specifying interaction groups in the force field setup dialog. This would be expanded in the future (tree view). 2008-06-08 Tim Vandermeersch * ChangeLog, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/overlayextension.cpp, libavogadro/src/extensions/overlayextension.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: * libavogadro/src/glwidget.*: Add resized() signal. * libavogadro/src/extensions/overlayextension.*: 2D overlay extension for displaying ESP gradient, 2D representations, ??? 2008-06-07 Tim Vandermeersch * scripts/avogadro.nsi, scripts/cmake-vs2005.bat, scripts/installer/Changelog.txt, scripts/installer/avogadro.ico, scripts/installer/dist/gpl.txt, scripts/installer/installer_languages/english.nsh, scripts/installer/installer_languages/german.nsh, scripts/installer/setup.nsi: New win32 installer. 2008-06-07 Marcus D. Hanwell * ChangeLog, avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Bumped version number of trunk to 0.8.2 now that trunk is open again. 2008-06-06 Geoffrey Hutchison * i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fr.ts, i18n/avogadro_pt.ts, i18n/avogadro_pt_BR.ts: Translation updates from Launchpad. 2008-06-06 Tim Vandermeersch * ChangeLog, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/tools/selectrotatetool.cpp: * libavogadro/src/tools/selectrotatetool.cpp: When selecting residues, also select the bonds. * libavogadro/src/extensions/hydrogenextension.*: Added "Add Hydrogens for pH...". 2008-06-06 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/orbitalextension.cpp: Added calls to tr for i18n, thanks to Louis Ricard in bug 1986689. * ChangeLog, libavogadro/src/primitive.cpp: Tweaked the calling order for the signals. 2008-06-05 Marcus D. Hanwell * libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h: Fixed copyright lines to give credit to Michael Banck for his contribution. * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui: Finally added the z-matrix support from Michael Banck in bug 1954332. * ChangeLog, libavogadro/src/extensions/gamessinputdialog.ui: Reduced the vertical size of the GAMESS dialog, fixes bug 1982113. * ChangeLog, libavogadro/src/glwidget.cpp: Added more verbosity to engine loading in order to diagnose engine loading issues. * ChangeLog, libavogadro/src/engines/ribbonengine.cpp: Fixed issue with the atom IDs not getting trimmed and so the ribbon not being displayed. 2008-06-04 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Actually draw the extents of the cube if requested to. 2008-06-04 Geoffrey Hutchison * libavogadro/src/extensions/gamessinputdialog.ui, libavogadro/src/extensions/gaussianinputdialog.ui: Remove "Deck Generator" from dialog title. Let's stick to "Gaussian Input" or something like this. "Input Deck" sounds like we're using punch cards... * avogadro/src/CMakeLists.txt, scripts/extract-messages.sh: Minor Mac localization improvements. 2008-06-04 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/surfaceengine.cpp: * libavogadro/src/engines/surfaceengine.cpp: Scale numBoxes with quality. 2008-06-04 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Added a quick render and render transparent function. * ChangeLog, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h: Added a quick render function to fix rendering when quick draw is used. 2008-06-04 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/surfaceengine.cpp: * libavogadro/src/engines/surfaceengine.cpp: Instead of iterating over all atoms for each grid point, iterate over all atoms once and only update grid points around the atom. This is 100-200x times faster... 2008-06-04 Marcus D. Hanwell * ChangeLog, avogadro/src/addenginedialog.cpp: Fixes bug 1984080 - the added engine was somewhat random before. 2008-06-04 Geoffrey Hutchison * i18n/avogadro-pt.ts, i18n/avogadro_pt.ts: Fix name of Portuguese translation. * ChangeLog, avogadro/src/CMakeLists.txt, i18n/avogadro-pt.ts, i18n/avogadro.pot, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_es.ts, i18n/avogadro_fr.ts, libavogadro/src/extensions/animationdialog.ui, scripts/extract-messages.sh: * i18n/*, scripts/extract-messages.sh: Added additional resources for .pot and .po file generation to integrate with Rosetta/Launchpad. Includes pt and es initial translations. * avogadro/src/CMakeLists.txt: Use a file glob for ts files to build into qm files. 2008-06-03 Geoffrey Hutchison * cmake/modules/FindLinguist.cmake, i18n/avogadro.pot, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_fr.ts, libavogadro/src/extensions/selectextension.cpp, scripts/extract-messages.sh, scripts/extractrc.sh: Minor i18n improvements and scripts for generating po/pot files. 2008-06-03 Marcus D. Hanwell * ChangeLog, libavogadro/src/engine.h, libavogadro/src/extension.h, libavogadro/src/tool.h: Bumped our plugin version to 1.1 - should help with bugs 1973909 and 1982102 - warning a make clean is needed. 2008-06-02 Geoffrey Hutchison * ChangeLog, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/dipoleengine.cpp, libavogadro/src/engines/dipoleengine.h: * libavogadro/src/engines/dipoleengine.*: New dipole moment engine -- needs more work, but displays dipole moments from Gaussian, GAMESS and Q-Chem output with recent OB-trunk. 2008-06-02 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/orbitalengine.cpp: Fixed bug 1968565 - orbitals are now cleared correctly along with everything else. 2008-05-30 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui: Implemented showing and hiding of the preview text - defaults to shown. * ChangeLog, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/templateextension.cpp, libavogadro/src/extensions/templateextension.h: Fixed up the template extension so that it would actually compile, added an example minimal entry in the CMake file too (commented out). 2008-05-30 Tim Vandermeersch * ChangeLog, avogadro/src/mainwindow.cpp: * avogadro/src/mainwindow.cpp: emit enableEngineSettingsButton(false) when you delete an engine. Otherwise when you pressed "Settings...", it would segfault. * ChangeLog, avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/toolgroup.cpp: * libavogadro/src/glwidget.cpp, libavogadro/src/toolgroup.cpp, avogadro/src/mainwindow.cpp: In windows, use QCoreApplication::applicationDirPath() to find the plugins. (fixes #1977338) * ChangeLog, libavogadro/src/extensions/constraintsdialog.cpp, libavogadro/src/extensions/constraintsdialog.ui, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: * libavogadro/src/extensions/constraintsdialog.ui: Disable unimplemented Save/Load buttons. * libavogadro/src/extensions/forcefieldextension.*: Only create new dialogs when needed. (in performAction, not in constructor) * libavogadro/src/extensions/constraintsdialog.cpp: Small GUI changes (min/max values, singleStep, ...) * libavogadro/src/extensions/propmodel.cpp: Angle and Torsion properties are not editable, don't set writable flag. * libavogadro/src/extensions/propextension.*: Only create dialogs (views) and models when needed. Call QObject::deleteLater() on both the model and the view in PropertiesView::hideEvent(). * libavogadro/src/tools/autoopttool.*: Exit, wait, and delete the thread in the destructor. Display the energy while running. Added conjugate gradients again. 2008-05-29 Tim Vandermeersch * ChangeLog, libavogadro/src/tools/insertfragmentdialog.cpp: * libavogadro/src/tools/insertfragmentdialog.cpp: workaround for bug #1977172. Create a new OBConversion object each time you insert a fragment from the library. 2008-05-28 Tim Vandermeersch * ChangeLog, libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/directorytreemodel.h: * libavogadro/src/tools/directorytreemodel.*: Invalidate persistent indexes. See this blogpost for details: last code block at the bottom http://der-dakon.net/blog/KDE/persistent-crash.html (This fixes the crashes I was having with the "Reset List" button.) 2008-05-28 Geoffrey Hutchison * ChangeLog, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/extensions/unitcellparamdialog.cpp, libavogadro/src/extensions/unitcellparamdialog.h, libavogadro/src/extensions/unitcellparamdialog.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: * libavogadro/src/glwidget.*: Add method to clear unit cell data. * libavogadro/src/extensions/unitcell*: Improved unit cell dialog. Added "Apply" button to change parameters. Automatically changes number of cells to display via signals/slots. Button to delete unit cells. New button to "fill" unit cells with symmetry-defined atoms via the space group. * libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp: Workaround for Qt/Mac cursor problems. 2008-05-28 Tim Vandermeersch * ChangeLog, libavogadro/src/extensions/propmodel.cpp: * libavogadro/src/extensions/propmodel.cpp: Get energy for all conformers and only use OBMol::GetEnergy() if no ConformerData is available. (fixes #1976199) 2008-05-27 Marcus D. Hanwell * ChangeLog, avogadro/src/mainwindow.cpp: Fixed PR 1973714 - removed the file ending from the file name passed to the save dialog. Also placed the macchempasteboard.h in a Mac ifdef to fix compilation on other OSes. 2008-05-27 Tim Vandermeersch * ChangeLog, libavogadro/src/tools/drawtool.cpp: * libavogadro/src/tools/drawtool.cpp: Do not try to change the bond order for X-H bonds when adjust hydrogens is on. Not sure if we should ever have double bonds to hydrogens... 2008-05-27 Geoffrey Hutchison * ChangeLog, avogadro/src/macchempasteboard.cpp, avogadro/src/macchempasteboard.h, avogadro/src/mainwindow.cpp: * avogadro/src/macchempasteboard.*: Add mime converter to supply MIME types for Mac chemical clipboard/pasteboard types (i.e. ChemDraw). * avogadro/src/mainwindow.cpp: Add support for ChemDraw. Doesn't parse -- need more debugging. 2008-05-26 Geoffrey Hutchison * ChangeLog, Doxyfile, avogadro/src/mainwindow.h, libavogadro/src/color.h, libavogadro/src/cylinder.cpp, libavogadro/src/elementcolor.cpp, libavogadro/src/elementcolor.h, libavogadro/src/elementtranslate.h, libavogadro/src/engine.h, libavogadro/src/extension.h, libavogadro/src/global.cpp, libavogadro/src/global.h, libavogadro/src/glwidget.h, libavogadro/src/idlist.h, libavogadro/src/navigate.h, libavogadro/src/painter.h, libavogadro/src/primitive.h, libavogadro/src/residuecolor.h, libavogadro/src/textrenderer.h, libavogadro/src/toolgroup.h: * Doxyfile, avogadro/src/mainwindow.h, libavogadro/src/*: Update doxygen documentation. * ChangeLog, avogadro/src/CMakeLists.txt, avogadro/src/mac/locversion.plist.in: * avogadro/src/CMakeLists.txt, avogaro/src/mac/locversion.plist.in: Add additional Mac i18n support, solving PR#1972467. 2008-05-25 Benoit Jacob * CMakeLists.txt, cmake/modules/TestIfWeNeedFPermissive.cmake: patch from Simon: improve and make use of TestIfWeNeedFPermissive.cmake This solves issues with gcc >= 4.3.1 being stricter than current boost code. In fact the present test is slightly stricter in that 4.3.0 also needs -fpermissive. GCC 4.2 doesn't require it. 2008-05-25 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Update for Krazy 2008-05-23 Marcus D. Hanwell * CMakeLists.txt, ChangeLog: Bump our dependencies on CMake and Qt. 2008-05-22 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/python/deleteAll.py: Fixed the deleteAll script to use the new DeleteAtom function signature. * ChangeLog, libavogadro/src/extensions/pythonextension.cpp: Search the system path for Python plugins too. 2008-05-22 Tim Vandermeersch * ChangeLog, libavogadro/src/tools/insertfragmentdialog.cpp: * libavogadro/src/tools/insertfragmentdialog.cpp: Fix insert smiles. Also disable the driectoryTreeView and smilesLineEdit while in insert mode. This makes it impossible to change the smiles and forget to press Stop/Start. 2008-05-21 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Add help URLs to the website. * libavogadro/src/elementtranslate.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/periodictableview.cpp, libavogadro/src/tools/drawtool.cpp: Change extern elementTranslate to ensure there's only one copy. 2008-05-20 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/hydrogensextension.cpp: Fixed PR 1947734, now the number of hydrogrens most people would expect are added.... 2008-05-20 Tim Vandermeersch * CMakeLists.txt, ChangeLog, avogadro/src/main.cpp, libavogadro/src/cylinder.cpp, libavogadro/src/elementtranslate.cpp, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/periodictableview.cpp, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/drawtool.cpp: * CMakeLists.txt: Change "C:\Program Files\avogadro" into "C:\\Program Files\\avogadro". * avogadro/src/main.cpp: Windows build had problems with printVersion/printHelp. Quick fix with cout & #ifdef WIN32. * libavogadro/src/cylinder.cpp: Make sure M_PI isdefined. * libavogadro/src/elementtranslate.cpp: Global instance should be extern. * libavogadro/src/engines/iso.cpp: MSVC doesn't have __attribute__ ((aligned(16)). Quick fix with #ifdef WIN32 and without the data alignment. * libavogadro/src/engines/labelengine.cpp: Local instance should not be extern. * libavogadro/src/engines/polygonengine.cpp: Change static_cast into static_cast. * libavogadro/src/periodictableview.cpp: Local instance should not be extern. * libavogadro/src/tools/aligntool.cpp: Change static_cast into static_cast. * libavogadro/src/tools/bondcentrictool.cpp: This file defined its own isnan() function which resulted in a conflict with OpenBabel::IsNan(). Now uses OpenBabel::IsNan(). * libavogadro/src/tools/drawtool.cpp: Local instance should not be extern. * scripts/avogadro.nsi: update installer generating script. 2008-05-19 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/navigatetool.cpp: Fixed the bug where zoom would corrupt the camera matrix in the draw tool. Made the molecule check in the navigate tool a little safer. * ChangeLog, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h: Made the manipulate tool a lot faster by only saving undo points on mouse up and mouse down. * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Added back in target_link_libraries as they are needed on the Mac at least. * CMakeLists.txt, ChangeLog, avogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Various changes to the build system. Added -DQT_NO_DEBUG to our release mode. Changed all plugins to be built as modules. 2008-05-18 Marcus D. Hanwell * ChangeLog, avogadro/src/CMakeLists.txt, libavogadro/src/CMakeLists.txt: Add the OpenBabel library directory to the linker path. * CMakeLists.txt, ChangeLog: Respect the users CXXFLAGS. 2008-05-17 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h: Add some caching in the tool so measurements are only echoed once. * ChangeLog, avogadro/src/mainwindow.ui: Tweaks to the UI. 2008-05-16 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: Propagate new grids through to the combo and some UI cleanup. 2008-05-16 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/iso.cpp: * libavogadro/src/iengines/iso.cpp: Surfaces are now centered around atom again. The - 0.5 * m_stepSize correction is only needed for vMarchCube1(float,float,float). This is a bug in OBFloatGrid? * ChangeLog, libavogadro/src/extensions/animationdialog.ui, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: * libavogadro/src/tools/drawtool.*: Use new OBForceField::SetIgnoreAtom() to make sure the new atom doesn't push away other fragment you want to connect with. Also fix the atom when you hit an atom that already exists. This makes drawing rings with AutoOpt enabled really easy. * libavogadro/src/autoopttool.*: Use new OBForceField::SetFixAtom() * libavogadro/src/extensions/animationdialog.ui: Make the dialog more compact. Removed the group boxes. 2008-05-16 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.ui: Hide more advanced options for now, cleanups. 2008-05-16 Geoffrey Hutchison * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/drawtool.cpp: Minor interface cleanups. 2008-05-16 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Krazy 2008-05-16 Marcus D. Hanwell * libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/aligntool.h: Added options to align everything or just the current molecule. 2008-05-16 Geoffrey Hutchison * avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Bump version for 0.8 release. * ChangeLog, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/propextension.cpp, libavogadro/src/tools/autorotatetool.cpp: * libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/propextension.cpp, avogadro/src/mainwindow.ui, avogadro/src/mainwindow.cpp: More interface cleanup -- any menu item or button which brings up a dialog should have "..." at the end. (KDE, Windows, and Mac UI guidelines.) 2008-05-16 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/selectrotatetool.cpp: More layout improvements. * ChangeLog, libavogadro/src/tools/drawtool.cpp: Layout improvements in the tool set up dialog. * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui: Added the ability to edit the input deck, revert etc. * ChangeLog, libavogadro/src/tools/drawtool.cpp: Added some extra signals on mouse release to ensure molecule is updated. * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.ui: Fixed the tab ordering of the dialog. * ChangeLog, libavogadro/src/periodictableview.cpp: Some changes to improve layout in Linux (and hopefully Windows). * ChangeLog, cmake/modules/FindOpenBabel2.cmake: Hopefully a new and improved FindOpenBabel2 using the new PkgConfig functions. * CMakeLists.txt, ChangeLog: Set the CMake policy for CMake 2.6. 2008-05-16 Geoffrey Hutchison * ChangeLog, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: * avogadro/mainwindow.h, avogadro/mainwindow.cpp: Changed engine configuration to a new button which brings up an extra "settings" window with tabs. Add signal/slot for enabling the Engine Settings window -- only enables button for engines with settings. * avogadro/src/enginelistview.cpp, avogadro/src/primitivetreeview.cpp: * src/enginelistview.cpp, primitivetreeview.cpp: Add setUniformItemSizes(true) -- supposedly improves performance. * avogadro/src/enginesetupwidget.cpp, avogadro/src/enginesetupwidget.h, avogadro/src/enginesetupwidget.ui: Removed deprecated code. 2008-05-15 Geoffrey Hutchison * avogadro/src/elementcombobox.cpp.disabled, avogadro/src/elementcombobox.h: Remove deprecated code. 2008-05-15 Donald Ephraim Curtis * avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, libavogadro/include/avogadro/idlist.h, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/idlist.cpp, libavogadro/src/idlist.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h: Added the IDList class which holds an organized list of IDs like PrimitiveList except that you cannot iterate through them all since IDs are specific to the type they belong. Moved id to be a property of all primitives. Fixed the Hydrogens commands and the editcommands to use IDs instead of pointers which should alleviate much of the crashing. See PR#1964661 2008-05-15 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/primitive.cpp: Made some changes to the surface engine and the GLWidget to improve locking. Seems to have prevented crashes in the surface engine here. More locking is needed. * ChangeLog, libavogadro/src/tools/selectrotatetool.cpp: Added Control modifier to the tool to fix PR 1962903 - toggle selected primitives. * ChangeLog, libavogadro/src/color.h: Cast GLFloats to ints to suppress warning. * ChangeLog, libavogadro/src/CMakeLists.txt: Only add the Boost_INCLUDE_DIR if boost is found - fixes a CMake error with CMake 2.6. 2008-05-15 Donald Ephraim Curtis * libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp: Added unique identifiers for each atom that is created and this helps us with adding and deleting atoms with our drawing tool. 2008-05-14 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/pythonextension.cpp: Fixed typo. 2008-05-13 Tim Vandermeersch * ChangeLog, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/animation.qrc, libavogadro/src/extensions/animationdialog.cpp, libavogadro/src/extensions/animationdialog.h, libavogadro/src/extensions/animationdialog.ui, libavogadro/src/extensions/animationextension.cpp, libavogadro/src/extensions/animationextension.h, libavogadro/src/extensions/icons/amarok_back.png, libavogadro/src/extensions/icons/amarok_next.png, libavogadro/src/extensions/icons/amarok_pause.png, libavogadro/src/extensions/icons/amarok_play.png, libavogadro/src/extensions/icons/amarok_stop.png, testfiles/spc216.pdb, testfiles/spc216.xtc: * libavogadro/src/extensions/animation*.*: Basic animation extension. * testfiles/spc216.*: Added pdb topology and xtc trajectory to test animation. 2008-05-13 Marcus D. Hanwell * CMakeLists.txt, ChangeLog: Allow ENABLE_PYTHON variable to allow disabling of Python. 2008-05-13 Geoffrey Hutchison * libavogadro/src/engines/wireengine.cpp, libavogadro/src/glpainter.cpp: Fix PR#1839866 with graphical bugs and multiple bond wireframe view. * libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/insertfragmentdialog.cpp: Fixed PR#1959763. 2008-05-13 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Krazy 2008-05-13 Geoffrey Hutchison * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/insertfragmentdialog.cpp: Some Linux fixes for the insert fragment paths. 2008-05-13 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/drawtool.cpp: Fixed uninitialised variables. 2008-05-13 Geoffrey Hutchison * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/primitiveitemmodel.cpp: A few minor "const" fixes for foreach() keyword. * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfacesettingswidget.ui: Disable the "Custom Color" widget when using ESP coloring. 2008-05-12 Geoffrey Hutchison * i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_fr.ts, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/insertfragmentdialog.ui: Update some translation strings. * ChangeLog, avogadro/src/mainwindow.cpp: Fix a potential file corruption problem if save file fails. Instead, save to a new name, then rename the file. * avogadro/src/mainwindow.cpp: Implement save to a new file, then a rename. (If others have ways to improve this, please let me know.) 2008-05-12 Marcus D. Hanwell * ChangeLog, avogadro/src/mainwindow.cpp: Fixed the code to fail properly when the file to be opened does not exist. 2008-05-12 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Geoff fixed many many more issues. <10 left! 2008-05-12 Geoffrey Hutchison * ChangeLog, avogadro/src/mainwindow.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/propmodel.cpp: * libavogadro/src/extensions/propmodel.cpp libavogadro/src/extensions/propextension.h libavogadro/src/extensions/propextension.cpp: Updates to fix some translations and to allow resizing the window without showing large amounts of empty space. * Doxyfile, Doxyfileext: Update for 0.8 version number. * avogadro/src/addenginedialog.h, avogadro/src/application.h, avogadro/src/editcommands.h, avogadro/src/elementcombobox.h, avogadro/src/engineitemmodel.h, avogadro/src/enginelistview.h, avogadro/src/enginesetupwidget.h, avogadro/src/flattabwidget.h, avogadro/src/mainwindow.h, avogadro/src/primitivetreeview.h, avogadro/src/savedialog.h, avogadro/src/settingsdialog.h, libavogadro/src/boost.h, libavogadro/src/camera.h, libavogadro/src/color.h, libavogadro/src/colorbutton.h, libavogadro/src/cylinder.h, libavogadro/src/elementcolor.h, libavogadro/src/elementtranslate.h, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/forceengine.h, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/extension.h, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/conformersearchdialog.h, libavogadro/src/extensions/constraintsdialog.h, libavogadro/src/extensions/constraintsmodel.cpp, libavogadro/src/extensions/constraintsmodel.h, libavogadro/src/extensions/dockingextension.cpp, libavogadro/src/extensions/forcefielddialog.h, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gamessinputdata.h, libavogadro/src/extensions/gaussianfchk.h, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/liganddialog.h, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitalextension.h, libavogadro/src/extensions/pocketdialog.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/propmodel.h, libavogadro/src/extensions/pythonextension.h, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/templateextension.cpp, libavogadro/src/extensions/templateextension.h, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/extensions/unitcellparamdialog.h, libavogadro/src/extensions/wiitrackextension.cpp, libavogadro/src/extensions/wiitrackextension.h, libavogadro/src/filetreeitem.h, libavogadro/src/global.h, libavogadro/src/glpainter.h, libavogadro/src/glwidget.h, libavogadro/src/navigate.h, libavogadro/src/painter.h, libavogadro/src/painterdevice.h, libavogadro/src/painterengine.h, libavogadro/src/periodictableview.h, libavogadro/src/povpainter.h, libavogadro/src/primitive.h, libavogadro/src/primitiveitemmodel.h, libavogadro/src/primitivelist.h, libavogadro/src/pythoninterpreter.h, libavogadro/src/residuecolor.h, libavogadro/src/sphere.h, libavogadro/src/textrenderer.h, libavogadro/src/tool.h, libavogadro/src/toolgroup.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/directorytreemodel.h, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/insertfragmentdialog.h, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/quaternion.h, libavogadro/src/tools/selectrotatetool.h, libavogadro/src/tools/skeletontree.h, libavogadro/src/undosequence.h: More Krazy fixes. 2008-05-12 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Update Krazy after Geoffs many fixes 2008-05-12 Geoffrey Hutchison * ChangeLog, avogadro/src/flowlayout.cpp, avogadro/src/mainwindow.cpp, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdialog.h, libavogadro/src/glwidget.cpp, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/painterengine.cpp, libavogadro/src/painterengine.h, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/directorytreemodel.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/skeletontree.cpp, libavogadro/src/tools/skeletontree.h: * Many files: Fix a pile of Krazy warnings. 2008-05-11 Marcus D. Hanwell * ChangeLog, libavogadro/src/glwidget.cpp: Fixed uninitialised undoStack pointer. 2008-05-10 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/aligntool.cpp: Fixed for case where the molecule was already alined to the chosen axis. 2008-05-09 Geoffrey Hutchison * CMakeLists.txt, ChangeLog, libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/insertfragmentdialog.cpp: * CMakeLists.txt: Install our fragments. Destination may need tuning on Linux and Windows. * libavogadro/src/tools/insertfragmentdialog.cpp: Update to include default fragment paths as much as possible. This will need tuning on Linux and Windows. Does Cmake set a -D define for an installation path, e.g. /usr vs /usr/local? * libavogadro/src/tools/directorytreemodel.cpp: Ignore hidden files. * fragments/coordination/3-trigonal-planar.cml, fragments/coordination/3-trigonal-pyramidal.cml, fragments/coordination/4-planar.cml, fragments/coordination/4-tetrahedral.cml, fragments/coordination/5-square-pyramidal.cml, fragments/coordination/5-trigonal-bipyramidal.cml, fragments/coordination/6-octahedral.cml: Add coordination fragments for metal centers 2008-05-08 Tim Vandermeersch * ChangeLog, libavogadro/src/extensions/forcefieldextension.cpp: * libavogadro/src/extensions/forcefieldextension.cpp: Added a QMessageBox::information() box to display the energy when the user clicks "Calculate Energy". (#1947745) * ChangeLog, libavogadro/src/extensions/forcefieldextension.cpp: * libavogadro/src/extensions/forcefieldextension.cpp: Move call to SetLogFile (fixes #1960307) 2008-05-08 Geoffrey Hutchison * fragments/cyclic alkanes/adamantane.cml, fragments/cyclic alkanes/cyclobutane.cml, fragments/cyclic alkanes/cycloheptane.cml, fragments/cyclic alkanes/cyclohexane.cml, fragments/cyclic alkanes/cyclopentane.cml, fragments/cyclic alkanes/cyclopropane.cml: New alkane rings. 2008-05-07 Geoffrey Hutchison * fragments/alcohols/ethanol.cml, fragments/alcohols/methanol.cml, fragments/alcohols/propan-1-ol.cml, fragments/alcohols/propan-2-ol.cml, fragments/aldehydes/acetaldehyde.cml, fragments/aldehydes/formaldehyde.cml, fragments/alkanes/2-methylpropane.cml, fragments/alkanes/ethane.cml, fragments/alkanes/methane.cml, fragments/alkanes/propane.cml, fragments/alkenes/but-1-ene.cml, fragments/alkenes/ethene.cml, fragments/alkynes/acetylene.cml, fragments/alkynes/propyne.cml, fragments/amides/N_N-dimethylacetamide.cml, fragments/amides/N_N-dimethylformamide.cml, fragments/amides/acetamide.cml, fragments/amides/ethyl_carbamate.cml, fragments/amides/oxamide.cml, fragments/amines/ammonia.cml, fragments/amines/azepane.cml, fragments/amines/ethylamine.cml, fragments/amines/methylamine.cml, fragments/amino_acids/D-alanine.cml, fragments/amino_acids/D-allo-threonine.cml, fragments/amino_acids/D-arginine.cml, fragments/amino_acids/D-asparagine.cml, fragments/amino_acids/D-aspartic_acid.cml, fragments/amino_acids/D-cysteine.cml, fragments/amino_acids/D-glutamic_acid.cml, fragments/amino_acids/D-glutamine.cml, fragments/amino_acids/D-histidine.cml, fragments/amino_acids/D-isoleucine.cml, fragments/amino_acids/D-leucine.cml, fragments/amino_acids/D-lysine.cml, fragments/amino_acids/D-methionine.cml, fragments/amino_acids/D-phenylalanine.cml, fragments/amino_acids/D-proline.cml, fragments/amino_acids/D-serine.cml, fragments/amino_acids/D-threonine.cml, fragments/amino_acids/D-tryptophan.cml, fragments/amino_acids/D-tyrosine.cml, fragments/amino_acids/D-valine.cml, fragments/amino_acids/L-4-nitrophenylalanine.cml, fragments/amino_acids/L-alanine.cml, fragments/amino_acids/L-allo-isoleucine.cml, fragments/amino_acids/L-arginine.cml, fragments/amino_acids/L-asparagine.cml, fragments/amino_acids/L-aspartic_acid.cml, fragments/amino_acids/L-cysteine.cml, fragments/amino_acids/L-glutamic_acid.cml, fragments/amino_acids/L-glutamine.cml, fragments/amino_acids/L-histidine.cml, fragments/amino_acids/L-isoleucine.cml, fragments/amino_acids/L-leucine.cml, fragments/amino_acids/L-lysine.cml, fragments/amino_acids/L-methionine.cml, fragments/amino_acids/L-phenylalanine.cml, fragments/amino_acids/L-proline.cml, fragments/amino_acids/L-serine.cml, fragments/amino_acids/L-threonine.cml, fragments/amino_acids/L-tryptophan.cml, fragments/amino_acids/L-tyrosine.cml, fragments/amino_acids/L-valine.cml, fragments/amino_acids/glycine.cml, fragments/aromatics/1H-indene.cml, fragments/aromatics/aniline.cml, fragments/aromatics/anisole.cml, fragments/aromatics/anthracene.cml, fragments/aromatics/benzaldehyde.cml, fragments/aromatics/benzene.cml, fragments/aromatics/benzoic_acid.cml, fragments/aromatics/benzoyl_chloride.cml, fragments/aromatics/caffeine.cml, fragments/aromatics/naphthalene.cml, fragments/aromatics/nitrobenzene.cml, fragments/aromatics/phenol.cml, fragments/aromatics/toluene.cml, fragments/buckminsterfullerene.cml, fragments/carbamides/urea.cml, fragments/carbohydrates/d-allose.cml, fragments/carbohydrates/d-altrose.cml, fragments/carbohydrates/d-arabinose.cml, fragments/carbohydrates/d-erythrose.cml, fragments/carbohydrates/d-erythrulose.cml, fragments/carbohydrates/d-fructose.cml, fragments/carbohydrates/d-galactose.cml, fragments/carbohydrates/d-glucose.cml, fragments/carbohydrates/d-glyceraldehyde.cml, fragments/carbohydrates/d-gulose.cml, fragments/carbohydrates/d-idose.cml, fragments/carbohydrates/d-lyxose.cml, fragments/carbohydrates/d-mannose.cml, fragments/carbohydrates/d-psicose.cml, fragments/carbohydrates/d-ribose.cml, fragments/carbohydrates/d-ribulose.cml, fragments/carbohydrates/d-sorbose.cml, fragments/carbohydrates/d-tagatose.cml, fragments/carbohydrates/d-talose.cml, fragments/carbohydrates/d-threose.cml, fragments/carbohydrates/d-xylose.cml, fragments/carbohydrates/d-xylulose.cml, fragments/carbohydrates/dihydroxyacetone.cml, .../carboxylic_acids/2_2-dichloroacetic_acid.cml, .../2_2_2-trichloroacetic_acid.cml, .../2_2_2-trifluoroacetic_acid.cml, fragments/carboxylic_acids/D-lactic_acid.cml, fragments/carboxylic_acids/D-malic_acid.cml, fragments/carboxylic_acids/D-tartaric_acid.cml, fragments/carboxylic_acids/L-ascorbic_acid.cml, fragments/carboxylic_acids/L-lactic_acid.cml, fragments/carboxylic_acids/L-malic_acid.cml, fragments/carboxylic_acids/L-tartaric_acid.cml, fragments/carboxylic_acids/acetic_acid.cml, fragments/carboxylic_acids/butanoic_acid.cml, fragments/carboxylic_acids/citric_acid.cml, fragments/carboxylic_acids/formic_acid.cml, fragments/carboxylic_acids/isobutyric_acid.cml, fragments/carboxylic_acids/oxalic_acid.cml, fragments/carboxylic_acids/propanoic_acid.cml, fragments/cyclic alkanes/cubane.cml, fragments/cyclic alkanes/norbornane.cml, fragments/ethers/di-tert-butylether.cml, fragments/ethers/dibutylether.cml, fragments/ethers/diethylether.cml, fragments/ethers/diisopropylether.cml, fragments/ethers/dimethylether.cml, fragments/ethers/dipropylether.cml, fragments/ethers/ethylmethylether.cml, fragments/ethers/tetrahydrofuran.cml, fragments/fatty acids/decanoic_acid.cml, fragments/fatty acids/hexanoic_acid.cml, fragments/fatty acids/lauric_acid.cml, fragments/fatty acids/linoleic_acid.cml, fragments/fatty acids/octanoic_acid.cml, fragments/fatty acids/oleic_acid.cml, fragments/fatty acids/palmitic_acid.cml, fragments/fatty acids/stearic_acid.cml, fragments/heteroaromatics/1H-indole.cml, fragments/heteroaromatics/1H-pyrazole.cml, fragments/heteroaromatics/1H-pyrrole.cml, fragments/heteroaromatics/1_2-oxazole.cml, fragments/heteroaromatics/1_2-thiazole.cml, fragments/heteroaromatics/1_3-oxazole.cml, fragments/heteroaromatics/1_3-thiazole.cml, fragments/heteroaromatics/benzofuran.cml, fragments/heteroaromatics/benzothiophene.cml, fragments/heteroaromatics/furan.cml, fragments/heteroaromatics/pyridine.cml, fragments/heteroaromatics/thiophene.cml, fragments/ketones/acetone.cml, fragments/ketones/butanone.cml, fragments/macrocycles/porphin.cml, fragments/nucleobases/adenine.cml, fragments/nucleobases/cytosine.cml, fragments/nucleobases/guanine.cml, fragments/nucleobases/thymine.cml, fragments/nucleobases/uracil.cml, fragments/steroids/cholesterol.cml, fragments/steroids/estradiol.cml, fragments/steroids/testosterone.cml, fragments/sulfoxides/dimethyl_sulfoxide.cml, fragments/thiols/ethanethiol.cml, fragments/thiols/methanethiol.cml, fragments/thiols/pentane-1-thiol.cml, fragments/water.cml: Added new fragment library based on chem-file Blue Obelisk repository. These are selected files, and I haven't added the CMakeLists.txt to install them. Suggestions welcome. 2008-05-07 Marcus D. Hanwell * CMakeLists.txt, ChangeLog, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt: Optionally use CMake 2.6 and the much improved FindBoost to check for and use Boost Python on more than just Linux - works great on the Mac. 2008-05-07 Tim Vandermeersch * ChangeLog, .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/conformersearchdialog.h, libavogadro/src/extensions/constraintsdialog.cpp, libavogadro/src/extensions/constraintsdialog.h, libavogadro/src/extensions/forcefielddialog.cpp, libavogadro/src/extensions/forcefielddialog.h, libavogadro/src/extensions/forcefielddialog.ui, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: * libavogadro/src/extensions/forcefielddialog.*: Removed gradients option. Now handled OBForceField::HasAnalyticalGradients() * libavogadro/src/extensions/conformersearchdialog.*: Same. * libavogadro/src/extensions/forcefieldextension.*: Same. * libavogadro/src/extensions/constraintsdialog.*: Update for static constraints. We now only need to set it once. * libavogadro/src/tools/autoopttool.*: Replaced convergence spin box by steps per update spin box. 2008-05-05 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Set the navigate tool as the active tool after loading a file. 2008-05-04 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/drawtool.cpp: Added saving of the current element to the draw tool. * ChangeLog, libavogadro/src/tools/autoopttool.cpp: Add checks in for whether the force field was initialised correctly. * ChangeLog, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: More updates to the orbital engine to improve rendering consistency. * ChangeLog, libavogadro/src/extensions/orbitalextension.cpp: Fixed another crasher - when no basis set has been loaded. * ChangeLog, libavogadro/src/extensions/orbitalextension.cpp: Corrected the MO title in the cube title. * ChangeLog, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Added some settings persistence, improved the quickRender a little too. 2008-05-03 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h: More guarded pointers to prevent crashing caused by dangling pointers. * ChangeLog, libavogadro/src/glwidget.cpp: Only switch to quickRender on mouse move, not press. * ChangeLog, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/aligntool.h: Used guarded pointers (QPointer) to make the align tool much harder to crash. 2008-05-02 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp: Adding some extra detail on the cube parameters along with the ability to modify this. Also added a little extra debug output while support if improved. 2008-05-01 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui: Added several new options and modifications based upon discussion in bug 1954113. Editing of the text edit box still needs to be added. 2008-04-30 Marcus D. Hanwell * ChangeLog, libavogadro/src/glwidget.cpp: Update the display after axes or debug rendering is turned on or off. * ChangeLog, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Updated with new view menu actions for axes and debug information. 2008-04-29 Geoffrey Hutchison * ChangeLog, avogadro/src/mainwindow.cpp, avogadro/src/savedialog.cpp: * avogadro/src/mainwindow.cpp: Fix up Mac/Windows save dialogs. Also disable save/revert menu actions until the document is modified. * avogadro/src/savedialog.cpp: Remove incorrect #ifdef for setting filters on Mac. Now done in mainwindow.cpp. Use static QFileDialog on Windows (and Mac). * libavogadro/src/tools/align.png, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/aligntool.qrc: New icon for the align tool. 2008-04-29 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp: Several fixes suggested by Michael Banck in bugs 1954108, 1954101 and 1954099. * ChangeLog, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: Only recalculate the isosurface when editing is finished, minimum spinner value of zero. * ChangeLog, avogadro/src/mainwindow.cpp: Tracked the bug of the disappearing molecule - it was never set for extensions after the first window. * ChangeLog, libavogadro/src/extensions/orbitalextension.cpp: Return if the file name is empty. 2008-04-28 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp: Also connected molecule signals to the dialog. * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp: Made the reset button work. * ChangeLog, libavogadro/src/extensions/gaussianinputdialog.cpp: Update the preview when setMolecule is called. Also added some logic to disable basis sets with certain theories. * ChangeLog, libavogadro/src/extensions/basisset.cpp: Actually call the doD and doD5 functions - this really helps when trying to use d-type orbitals to generate cubes... * ChangeLog, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/gaussianextension.cpp, libavogadro/src/extensions/gaussianextension.h, libavogadro/src/extensions/gaussianinputdialog.cpp, libavogadro/src/extensions/gaussianinputdialog.h, libavogadro/src/extensions/gaussianinputdialog.ui: Added a new Gaussian input deck generator. Still quite basic with a few bugs but is already generating valid input decks. 2008-04-28 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/savedialog.cpp, avogadro/src/savedialog.h: Cleaned up Mac-specific save dialog (we can use the Qt static methods). Make sure to save the selected filter on all platforms -- we should remember what the user picked and make it the default next time. 2008-04-27 Marcus D. Hanwell * ChangeLog, avogadro/src/mainwindow.cpp, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/selectrotatetool.cpp: Found a few more cases where foreach loops needing fixing. * ChangeLog, libavogadro/src/glwidget.cpp, libavogadro/src/toolgroup.cpp: Made changes to foreach loops as suggested by Albert Astals Cid, prevent unnecessary creation of temporary objects. 2008-04-25 Geoffrey Hutchison * ChangeLog, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: * avogadro/src/mainwindow.*: Add drag-and-drop support. Files dragged onto a window will be loaded. * libavogadro/src/moleculetreeview.cpp.disabled, libavogadro/src/moleculetreeview.h.disabled, libavogadro/src/primitiveitemmodel.cpp: * libavogadro/src/primitiveitemmodel.cpp: Added in layout change signals. Will hopefully prevent crashing. 2008-04-25 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/gaussianfchk.h, libavogadro/src/extensions/orbitalextension.cpp: Ported to use std::vector to store everything. Changed the way normalisation is handled. Added d-type orbitals - this has not been verified yet. 2008-04-24 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/basisset.cpp: Added destructor bits. 2008-04-23 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/orbitalextension.cpp: Sorted out the units in the cube calculation initialisation... 2008-04-22 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/orbitalextension.cpp: Also added a call to processEvents() to maintain interactivity. * ChangeLog, libavogadro/src/extensions/orbitalextension.cpp: Work out the dimensions of the cube from the molecule, also clear the molecule. * ChangeLog, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/basisset.cpp, libavogadro/src/extensions/basisset.h, libavogadro/src/extensions/gaussianfchk.cpp, libavogadro/src/extensions/gaussianfchk.h, libavogadro/src/extensions/orbitaldialog.cpp, libavogadro/src/extensions/orbitaldialog.h, libavogadro/src/extensions/orbitaldialog.ui, libavogadro/src/extensions/orbitalextension.cpp, libavogadro/src/extensions/orbitalextension.h: Added a new orbital extension. This extension uses the new BasisSet class along with GaussianFchk to load a formatted checkpoint file and calculate MOs. Support for more programs and more features soon. 2008-04-21 Benoit Jacob * avogadro/src/savedialog.cpp, avogadro/src/savedialog.h, libavogadro/src/tools/navigatetool.cpp: * fix bug: when using navigatetool on empty molecule, the camera got corrupted. * fix file comment in savedialog.* * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/savedialog.cpp, avogadro/src/savedialog.h, libavogadro/src/povpainter.cpp: * make the SaveDialog generic enough to be useful for more than just saving molecules. * move it to separate savedialog.* files * use it in "export graphics" and "export POV-Ray". * fix crash when doing "export POV-Ray" on empty molecule 2008-04-21 Donald Ephraim Curtis * libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h: Fixed reloading of python script issue. 2008-04-20 Benoit Jacob * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Add SaveDialog class inheriting QFileDialog, currently in mainwindow.* but feel free to move to separate files. This class sets a default filename suffix based on the currently selected filter. Having our own class allows us to act on the filterSelected signal, which is necessary for a consistent behavior. Closes avogadro-Bugs-1945955 2008-04-18 Geoffrey Hutchison * libavogadro/include/avogadro/filetreeitem.h, libavogadro/include/avogadro/treeitem.h, libavogadro/src/filetreeitem.cpp, libavogadro/src/filetreeitem.h, libavogadro/src/treeitem.cpp, libavogadro/src/treeitem.h: Step two: FileTreeItem not TreeItem * libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/directorytreemodel.h, libavogadro/src/treeitem.cpp, libavogadro/src/treeitem.h: Step one of renaming TreeItem to FileTreeItem * libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/tools/insertfragmentdialog.h, libavogadro/src/tools/insertfragmentdialog.ui: Fixed crashes with fragment window -- need to emit layoutChanged signals. Now also checks for duplicate directories and allows the directory list to be cleared. 2008-04-18 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Updating Krazy2 checks 2008-04-17 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp: Add support for always giving a transparent background. We can make this a configuration option (e.g., amount of transparency), but it's currently great for exporting graphics. * ChangeLog, libavogadro/include/avogadro/treeitem.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/directorytreemodel.cpp, libavogadro/src/tools/directorytreemodel.h, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/insertfragmentdialog.cpp, libavogadro/src/tools/insertfragmentdialog.h, libavogadro/src/tools/insertfragmentdialog.ui, libavogadro/src/treeitem.cpp, libavogadro/src/treeitem.h: * libavogadro/src/treeitem.*: New class for handling filenames in model/view context, particularly a tree browser. * libavogadro/src/tools/directorytreemodel.*: New class for handling directory trees with multiple paths. (Basic Qt class QDirModel gives too much file info and doesn't handle multiple top-level directories.) * libavogadro/src/tools/insertfragmentdialog.*: New class to combine the SMILES generation and reading in fragment files. Still needs a bit of polish. * libavogadro/src/tools/drawtool.*: Use above. * libavogadro/src/tools/drawcommand.*: Change InsertSMILES class to InsertFragment (now that we have a general fragment browser). * ChangeLog, libavogadro/src/navigate.cpp, libavogadro/src/navigate.h: * libavogadro/src/navigate.*: Add general rotate(x, y, z) method (for scripting). 2008-04-16 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp: Use the shift key rather than alt key as the second modifier. 2008-04-15 Marcus D. Hanwell * ChangeLog, avogadro/src/config.h.in, avogadro/src/mainwindow.cpp, libavogadro/src/config.h.in, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/toolgroup.cpp: Added INSTALL_LIBDIR define in order to more reliably load plugins. Adapted the loading scheme for tools, engines and extensions to use INSTALL_LIBDIR. 2008-04-13 Marcus D. Hanwell * ChangeLog, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.h, avogadro/src/settingsdialog.ui: Removed the axes and debug display options from the global config - to be relocated to the view menu. Also (hopefully) improved the display quality feedback. * ChangeLog, libavogadro/include/avogadro/navigate.h, libavogadro/src/navigate.cpp, libavogadro/src/navigate.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigate.cpp, libavogadro/src/tools/navigate.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Moved the navigate functions from the tools directory into the library. They should be exposed as part of our API and would be useful in scripting. * ChangeLog, libavogadro/src/tools/CMakeLists.txt: Removed the duplicate definition of bondcentrictool. * CMakeLists.txt, libavogadro/src/global.h: Disabled the visibility flags again (for now) while I work on getting it working in OpenBabel - still having issues with the formats and visibility. 2008-04-12 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfacesettingswidget.ui: * libavogadro/src/engines/surfaceengine.*, libavogadro/src/engines/surfacesettingswidget.ui: Clipping now works for any specified plane. 2008-04-12 Marcus D. Hanwell * CMakeLists.txt, libavogadro/src/global.h: Only do the GCC visibility stuff when we have a supported compiler. 2008-04-12 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Updating the Krazy files 2008-04-12 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/surfacesettingswidget.ui: * libavogadro/src/engines/surfaceengine.*, libavogadro/src/engines/surfacesettingswidget.ui: Added clipping plane. This feature could later be moved to glwidget to clip any engine... This would probably require engines to have a clipped and solid property (like they currently have radius) 2008-04-10 Marcus D. Hanwell * ChangeLog, libavogadro/src/glpainter.cpp, libavogadro/src/glwidget.cpp: Parts of the patch from Benoit Jacob - fix handling of quality change. * ChangeLog, libavogadro/src/glwidget.cpp: Fixed bug where display lists were not being invalidated when the display quality was adjusted. * ChangeLog, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/surfaceengine.cpp: Fixed some compiler warnings. 2008-04-09 Marcus D. Hanwell * ChangeLog, libavogadro/src/camera.h, libavogadro/src/textrenderer.h, libavogadro/src/tools/drawtool.cpp: Fixed a few compiler warnings. 2008-04-09 Geoffrey Hutchison * libavogadro/src/boost.h, libavogadro/src/extensions/pythonextension.cpp: Add some preliminary auto-complete features for the Python terminal and several new Open Babel features in the scripting support. 2008-04-08 Marcus D. Hanwell * ChangeLog, libavogadro/src/CMakeLists.txt: Removed duplicate call to automoc. 2008-04-07 Marcus D. Hanwell * CMakeLists.txt, ChangeLog: Only set the linker flag on Linux systems. * CMakeLists.txt, ChangeLog, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h: Disabled the visibility flags for now as the seem to break forcefield support. * ChangeLog, avogadro/src/mainwindow.cpp: Added a warning dialog when no engines and/or tools were loaded. * ChangeLog, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/glwidget.cpp: Statically linked the ball and stick engine to libavogadro. This guarantees the minimal ability to display a molecule. * CMakeLists.txt, ChangeLog: Added the pedantic compiler flag to spot many issues with C++ code such as those picked up by KDE developers. Also introduce symbol hiding if a recent GCC is installed. We need to explicitly export all symbols on Linux/Apple systems. * ChangeLog, cmake/modules/FindBoostPython.cmake, cmake/modules/MacroEnsureVersion.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/extensions/CMakeLists.txt: Added extra cmake modules from KDE 4.1 (trunk) to improve Boost Python detection and check versions. Improved the Boost Python detection and linked to the dynamic Python library. * ChangeLog, avogadro/src/application.h, avogadro/src/enginelistview.h, avogadro/src/engineprimitiveswidget.h, avogadro/src/enginesetupwidget.h, avogadro/src/mainwindow.h, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/surfaceengine.h, libavogadro/src/extension.h, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessefpmatchdialog.h, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdata.h, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/tools/autoopttool.h: Fixed errors pointed out by the pedantic compiler flag - mainly extra ;s and ,s. * ChangeLog, libavogadro/src/pythoninterpreter.h: Ensure the Python interpreter exports its symbols. 2008-04-06 Marcus D. Hanwell * libavogadro/src/primitive.h, libavogadro/src/primitiveitemmodel.h, libavogadro/src/tool.h: Changes made by Pino Toscano in KDE upstream. * ChangeLog, libavogadro/src/periodictableview.h: Only export the PeriodicTableView class. * ChangeLog, libavogadro/src/tools/navigatetool.cpp: Remember to account for the situation where no molecule is loaded. * ChangeLog, libavogadro/src/global.h: Added visibility attributes to the A_EXPORT definitions so that our symbols are correctly exported when the default visibility is changed to hidden (as in KDE 4.1 trunk). 2008-04-04 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/aligntool.cpp, libavogadro/src/tools/aligntool.h, libavogadro/src/tools/aligntool.qrc: Added new align tool. Currently it just aligns the selected atom to the origin, if there are two selected atoms they will be aligned along the chosen axis. 2008-04-03 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h: Added new axes engine to display the x, y, z axes in the scene. More options soon. 2008-04-01 Marcus D. Hanwell * ChangeLog, libavogadro/src/extensions/gamessinputdialog.cpp: Correct bug where nd was also being used to set np in the basic tab. 2008-03-31 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, libavogadro/src/CMakeLists.txt: Updated CMake files to properly link with Python and Boost. Thanks to Jens Thomas for reporting and helping me debug. 2008-03-24 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Updating to latest Krazy 2008-03-23 Donald Ephraim Curtis * ChangeLog, avogadro/src/mainwindow.cpp, libavogadro/src/boost.h, libavogadro/src/extension.cpp, libavogadro/src/extension.h, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/python/deleteAll.py, libavogadro/src/extensions/python/test.py, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/pythoninterpreter.h: Python scripts are now available. This means you can write a python script (including PyQt) and it will function along with the data loaded already. We have not yet exposed all parts of the API but this should give us the basis of where to go. To utilize this new stuff. Place scripts in $HOME/.avogadro/scripts Avogadro should automatically detect them on loadup. Also, if you modify a script while the application is running it will reload that script before executing it again. See the example scripts provided. They are installed to $PREFIX/libavogadro/scripts but they are not automatically enabled. Until we get a "script manager" then we will keep it like this. -- Donald * libavogadro/src/boost.h, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/extensions/pythonterminalwidget.ui: Python Extension input line now remembers your command history. * CMakeLists.txt, avogadro/src/mainwindow.cpp, libavogadro/include/avogadro/boost.h, libavogadro/include/avogadro/pythoninterpreter.h, libavogadro/src/CMakeLists.txt, libavogadro/src/boost.h, libavogadro/src/extensions/CMakeLists.txt, libavogadro/src/extensions/pythonextension.cpp, libavogadro/src/extensions/pythonextension.h, libavogadro/src/extensions/pythonterminalwidget.ui, libavogadro/src/pythoninterpreter.cpp, libavogadro/src/pythoninterpreter.h: Added initial python support. Python Extension includes an interactive interpreter. * libavogadro/src/extensions/templateextension.cpp, libavogadro/src/extensions/templateextension.h: Added a set of extension template files. * libavogadro/src/extension.cpp, libavogadro/src/extension.h, .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/conformersearchdialog.h, libavogadro/src/extensions/dockingextension.cpp, libavogadro/src/extensions/dockingextension.h, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdata.h, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h: Finalize moving extensions to the library and make a few patches. See the updated ChangeLog for more details. There is now an Extension::setMolecule function (which is a signal) that Extensions can reimplement and keep better tabs on the underlying data model. * libavogadro/src/extension.cpp, libavogadro/src/extension.h, .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/conformersearchdialog.h, libavogadro/src/extensions/dockingextension.cpp, libavogadro/src/extensions/dockingextension.h, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdata.h, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h: Move extensions to libavogadro 2008-03-22 Carsten Niehaus * krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-extensions.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/runkrazy.rb: Reran Krazy. * krazy/avogadro-src-extensions.html, krazy/libavogadro-src-extensions.html: new directory (src/extensions moved) * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Updating the Krazy files 2008-03-22 Donald Ephraim Curtis * ChangeLog, avogadro/src/CMakeLists.txt, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/conformersearchdialog.cpp, avogadro/src/extensions/conformersearchdialog.h, avogadro/src/extensions/conformersearchdialog.ui, avogadro/src/extensions/constraintsdialog.cpp, avogadro/src/extensions/constraintsdialog.h, avogadro/src/extensions/constraintsdialog.ui, avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/constraintsmodel.h, avogadro/src/extensions/dockingextension.cpp, avogadro/src/extensions/dockingextension.h, avogadro/src/extensions/forcefielddialog.cpp, avogadro/src/extensions/forcefielddialog.h, avogadro/src/extensions/forcefielddialog.ui, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h, avogadro/src/extensions/gamessefpmatchdialog.cpp, avogadro/src/extensions/gamessefpmatchdialog.h, avogadro/src/extensions/gamessefpmatchdialog.ui, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/gamessinputdata.cpp, avogadro/src/extensions/gamessinputdata.h, avogadro/src/extensions/gamessinputdialog.cpp, avogadro/src/extensions/gamessinputdialog.h, avogadro/src/extensions/gamessinputdialog.ui, avogadro/src/extensions/h2methylextension.cpp, avogadro/src/extensions/h2methylextension.h, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h, avogadro/src/extensions/liganddialog.cpp, avogadro/src/extensions/liganddialog.h, avogadro/src/extensions/liganddialog.ui, avogadro/src/extensions/pocketdialog.cpp, avogadro/src/extensions/pocketdialog.h, avogadro/src/extensions/pocketdialog.ui, avogadro/src/extensions/propextension.cpp, avogadro/src/extensions/propextension.h, avogadro/src/extensions/propmodel.cpp, avogadro/src/extensions/propmodel.h, avogadro/src/extensions/selectextension.cpp, avogadro/src/extensions/selectextension.h, avogadro/src/extensions/unitcellextension.cpp, avogadro/src/extensions/unitcellextension.h, avogadro/src/extensions/unitcellparamdialog.cpp, avogadro/src/extensions/unitcellparamdialog.h, avogadro/src/extensions/unitcellparamdialog.ui, avogadro/src/extensions/wiitrackextension.cpp, avogadro/src/extensions/wiitrackextension.h, avogadro/src/mainwindow.cpp, libavogadro/include/avogadro/extension.h, libavogadro/src/CMakeLists.txt, libavogadro/src/extension.cpp, libavogadro/src/extension.h, libavogadro/src/extensions/CMakeLists.txt, .../src/extensions/conformersearchdialog.cpp, libavogadro/src/extensions/conformersearchdialog.h, .../src/extensions/conformersearchdialog.ui, libavogadro/src/extensions/constraintsdialog.cpp, libavogadro/src/extensions/constraintsdialog.h, libavogadro/src/extensions/constraintsdialog.ui, libavogadro/src/extensions/constraintsmodel.cpp, libavogadro/src/extensions/constraintsmodel.h, libavogadro/src/extensions/dockingextension.cpp, libavogadro/src/extensions/dockingextension.h, libavogadro/src/extensions/forcefielddialog.cpp, libavogadro/src/extensions/forcefielddialog.h, libavogadro/src/extensions/forcefielddialog.ui, libavogadro/src/extensions/forcefieldextension.cpp, libavogadro/src/extensions/forcefieldextension.h, .../src/extensions/gamessefpmatchdialog.cpp, libavogadro/src/extensions/gamessefpmatchdialog.h, libavogadro/src/extensions/gamessefpmatchdialog.ui, libavogadro/src/extensions/gamessextension.cpp, libavogadro/src/extensions/gamessextension.h, libavogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/extensions/gamessinputdata.h, libavogadro/src/extensions/gamessinputdialog.cpp, libavogadro/src/extensions/gamessinputdialog.h, libavogadro/src/extensions/gamessinputdialog.ui, libavogadro/src/extensions/h2methylextension.cpp, libavogadro/src/extensions/h2methylextension.h, libavogadro/src/extensions/hydrogensextension.cpp, libavogadro/src/extensions/hydrogensextension.h, libavogadro/src/extensions/liganddialog.cpp, libavogadro/src/extensions/liganddialog.h, libavogadro/src/extensions/liganddialog.ui, libavogadro/src/extensions/pocketdialog.cpp, libavogadro/src/extensions/pocketdialog.h, libavogadro/src/extensions/pocketdialog.ui, libavogadro/src/extensions/propextension.cpp, libavogadro/src/extensions/propextension.h, libavogadro/src/extensions/propmodel.cpp, libavogadro/src/extensions/propmodel.h, libavogadro/src/extensions/selectextension.cpp, libavogadro/src/extensions/selectextension.h, libavogadro/src/extensions/unitcellextension.cpp, libavogadro/src/extensions/unitcellextension.h, libavogadro/src/extensions/unitcellparamdialog.cpp, libavogadro/src/extensions/unitcellparamdialog.h, libavogadro/src/extensions/unitcellparamdialog.ui, libavogadro/src/extensions/wiitrackextension.cpp, libavogadro/src/extensions/wiitrackextension.h, libavogadro/src/tool.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Moved extensions to libavogadro. Added Extension::setMolecule as a signal. Updated previous engines to take advantage of this new ::setMolecule function. Gives more view on when the underlying data model changes. 2008-03-21 Tim Vandermeersch * ChangeLog, testfiles/ch3cl.cube.gz, testfiles/multicubes.cube.gz: * testfiles/ch3cl.cube.gz: Deleted incorrect test file. * testfiles/multicube.cubes.gz: Added new multi-cube test file supplied by Louis Ricard. 2008-03-19 Benoit Jacob * avogadro/src/mainwindow.cpp, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h: POV-Ray export: the aspect-ratio input dialog belongs to avogadro not libavogadro. In lib, just make the POVPainterDevice constructor take an aspectRatio argument. 2008-03-18 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/selectrotatetool.cpp: Modified the selection behaviour to be more consistent with other applications. Just the selected primitives are selected when clicking primitives or drawing selection boxes. Pressing shift causes them to be added to the existing selection. 2008-03-15 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Updating Krazy. I fixed many issues and updated to the latest release of Krazy2 * avogadro/src/extensions/gamessinputdata.cpp, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/periodictableview.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/clickmeasuretool.cpp: Many Krazy fixes 2008-03-14 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: new run of Krazy * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Update Krazy 2008-03-12 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/wiitrackextension.cpp, avogadro/src/extensions/wiitrackextension.h: * avogadro/src/extensions/wiitrackextension.*: Wiimote head tracking extension. * avogadro/src/extensions/CMakeLists.txt: Do not compile Wiimote head tracking extension as default 2008-03-12 Benoit Jacob * libavogadro/src/CMakeLists.txt, libavogadro/src/global.h, libavogadro/src/glwidget.cpp, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h: - pov-ray: fix lighting (add 2nd light, emulate lights at infinity even though pov-ray is too stupid to understand that notion, fix light position when cam moves, fix material properties) - #include "config.h" as suggested by Donald 2008-03-11 Benoit Jacob * libavogadro/src/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/povpainter.cpp: - fix bug #1911509 : missing bg color in povray export - #include gave me headaches because another config.h file was getting included! I fixed that in glwidget.cpp which was enough for me, but potentially all the other #include could give that problem. Not sure what the standard practice is. We have many include paths defined including OB's so it's not surprising that #include can fail! 2008-03-11 Tim Vandermeersch * ChangeLog, libavogadro/src/colorbutton.h, libavogadro/src/periodictableview.h: * libavogadro/src/colorbutton.h: Added A_EXPORT. * libavogadro/src/periodictableview.h: Added A_EXPORT. 2008-03-11 Jordan Mantha * ChangeLog, doc/CMakeLists.txt: * fixed up doc CMakeLists.txt so that it detects docbook.{pdf,html} * added some install rule bits, but left them commented out for now as it's still a bit buggy 2008-03-10 Tim Vandermeersch * ChangeLog, libavogadro/src/povpainter.cpp: * libavogadro/src/povpainter.cpp: Add } to camera {. Fixes #1911507 2008-03-10 Carsten Niehaus * avogadro/src/aboutdialog.cpp, avogadro/src/engineprimitiveswidget.h, avogadro/src/extensions/constraintsdialog.h, avogadro/src/extensions/dockingextension.h, avogadro/src/extensions/gamessinputdialog.h, avogadro/src/extensions/propmodel.h: Krazy fixes * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Updating KRAZY files. 2008-03-10 Donald Ephraim Curtis * avogadro/src/main.cpp, libavogadro/CMakeLists.txt, libavogadro/src/config.h.in, libavogadro/src/global.cpp, libavogadro/src/global.h, libavogadro/src/glwidget.cpp: With Marcus advising we updated the threading makeCurrent/doneCurrents in the GLWidget once again. It's getting better all the time. 2008-03-10 Benoit Jacob * CMakeLists.txt, avogadro/src/CMakeLists.txt, i18n/avogadro_de.ts, i18n/avogadro_en_GB.ts, i18n/avogadro_fr.ts, libavogadro/src/CMakeLists.txt, libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/painterengine.cpp, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h, libavogadro/src/textrenderer.cpp: -update french translation -CMakeLists: now do cmake -DRELEASE_MODE=ON to enable "release mode": defines NDEBUG, and adds -O3 flag if using gcc. -textrenderer: change gamma factor from 0.5 to 0.75 for more moderate effect -painters: pass vectors by const reference, not by value. Even if the implementation needs to make a copy, this should not influence the API. Hope I didn't introduce bugs. -painterengine.cpp: minor readibility improvement. Hope I got it right. -camera: fix warning with gcc 4.3. 2008-03-09 Geoffrey Hutchison * avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Bump version numbers. I'm not sure what the next release will be, but for now trunk is 0.6.9. * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/sticksettingswidget.ui: Add settings for sticks, fixes PR#1909099. 2008-03-09 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: * libavogadro/src/engines/orbital*.*: Add support for multiple orbitals/cubes. * testfiles/ch3cl.cube.gz: Example file for multiple cubes. 2008-03-09 Jordan Mantha * ChangeLog, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ribbonsettingswidget.ui: Added support for nitrogens in backbone for ribbon engine rendering 2008-03-09 Marcus D. Hanwell * ChangeLog, libavogadro/src/glpainter.cpp: Patch from Jordan Mantha fixes ribbon rendering - go right to the end of the protein backbone. Thanks for the patch Jordan. 2008-03-08 Marcus D. Hanwell * ChangeLog, libavogadro/src/glwidget.cpp: Reverted - locks up a lot... * ChangeLog, libavogadro/src/glwidget.cpp: Added some read and write locks in the GLWidget. It should help but it may need to be finer grained... Should help to reduce race conditions in threads. * ChangeLog, avogadro/src/main.cpp: Looks like some drivers have bad XInitThreads() functions, only enable for threaded GL builds. * ChangeLog, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Just return form the render function if the VdW thread is running, should fix the crashes observed. * ChangeLog, libavogadro/src/glwidget.cpp: Removed the doneCurrent() calls in the non-threaded GL code paths. These calls were breaking hits calls among other things. 2008-03-07 Donald Ephraim Curtis * avogadro/src/main.cpp, libavogadro/src/glwidget.cpp: Stepped through the rendering pipeline and makeCurrent / doneCurrent should now be in the correct spots. 2008-03-07 Marcus D. Hanwell * ChangeLog, avogadro/src/main.cpp: Added extra GL initialisation debug output. 2008-03-06 Geoffrey Hutchison * ChangeLog, avogadro/src/mainwindow.cpp: * avogadro/src/mainwindow.cpp: Check that a window isn't moved off-screen on Mac or Windows (since we remember window positions on those platforms). PR#1903437. (saveFile) Add .cml extension to a filename if none is provided. PR#1817621. 2008-03-06 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/eyecandy.cpp: Make the eye candy opaque. Still looks great in my opinion. This does get rid of potentially expensive blending operations in the quick render pipeline. * ChangeLog, libavogadro/src/engine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: The engines now emit changed when their status is changed. Updated the GLWidget logic for invalidating its display lists and also added a new slot to do this. 2008-03-06 Geoffrey Hutchison * avogadro/src/extensions/forcefielddialog.cpp, avogadro/src/extensions/forcefieldextension.cpp: Change default force field to MMFF94, 500 iterations, steepest descent. (Good options, since typical structure is far from the minima.) 2008-03-06 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/forceengine.cpp, libavogadro/src/engines/forceengine.h: * libavogadro/src/engines/forceengine.*: Render forces on atoms. Uses OBConformerData, needs latest OB SVN to work. 2008-03-05 Marcus D. Hanwell * ChangeLog, libavogadro/src/glwidget.cpp: Stop invalidating the cache on mouse release. I think we have all of the events that should invalidate the display cache covered now. 2008-03-05 Carsten Niehaus * avogadro/src/extensions/gamessefpmatchdialog.h, avogadro/src/extensions/propextension.h, krazy/runkrazy.rb, libavogadro/src/colorbutton.cpp, libavogadro/src/colorbutton.h, libavogadro/src/elementcolor.cpp, libavogadro/src/periodictableview.h, libavogadro/src/residuecolor.cpp, libavogadro/src/tool.cpp: Adding many fixes for Krazy issues 2008-03-05 Geoffrey Hutchison * Doxyfile, Doxyfileext: Update documentation version numbers. 2008-03-05 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/orbitalengine.cpp: Just draw GL_LINES. * ChangeLog, libavogadro/src/tools/selectrotatetool.cpp: Change cursor types depending upon the action being performed - better visual cues. 2008-03-04 Marcus D. Hanwell * ChangeLog, libavogadro/src/glwidget.cpp: Added a second light source to the GLWidget - improved surfaces. 2008-03-04 Carsten Niehaus * doc/figures/screenshot1.png, doc/index.docbook, doc/pdf/index.pdf: A much improved handbook. This version shows how to do links and picutures * doc/generate_handbook.sh, doc/handbook.html, doc/pdf/index.pdf: Now ./generate_handbook.sh is generating PDF in the 'pdf' subdir and HTML in the 'html' subdir. As the html is generated in multiple files I will only add the PDF in SVN. 2008-03-04 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/bsdyengine.cpp: Draw multiple bonds in the quick render function - no more flicking bonds. * ChangeLog, libavogadro/src/glwidget.cpp: Add back in some makeCurrent calls that really were necessary outside of the threaded GL #ifdefs. This fixes PR#1906403. 2008-03-02 Carsten Niehaus * CMakeLists.txt, doc/CMakeLists.txt, doc/index.docbook: First version of the new handbook 2008-03-01 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: Added a renderQuick function to this engine. Selected atoms/bonds rendered as opaque objects using the selection colour. Multiple bonds are not displayed. No transparency used. * ChangeLog, libavogadro/src/engine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/wireengine.h, libavogadro/src/glwidget.cpp: API cleanup - remove the second unused argument from the quickRender function. Ported everything to use the new quickRender function. 2008-02-29 Marcus D. Hanwell * ChangeLog, avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/tools/selectrotatetool.cpp: Correct a bug in the setSelected function which was causing it to toggle the selection rather than set it as the calling functions were expecting. Reverted the fix in mainwindow.cpp as setSelected now works as expected. The select molecule function in the select rotate tool also works as expected now. 2008-02-29 Geoffrey Hutchison * avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Bump version numbers to 0.6 * avogadro/src/mainwindow.cpp, libavogadro/src/tools/selectrotatetool.cpp: Fix selection bugs: select all doesn't toggle (weird bug). Selecting molecule will now also select all connected bonds. 2008-02-29 Tim Vandermeersch * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: Run as a single thread 2008-02-29 Marcus D. Hanwell * ChangeLog, avogadro/src/extensions/forcefieldextension.cpp: Disable the constraints menu item for now. * ChangeLog, libavogadro/src/engines/iso.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: Fixed the integer based eval function to actually use the m_iso value set. Defaulted the orbital engine to not use interpolation but added a check box that will force interpolation if desired. * ChangeLog, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/surfaceengine.cpp: Added a new marching cubes function that does not use interpolation. This should significantly reduce the resources needed to calculated many surfaces. Ported surface engine to use the non-interpolated functions - should never interpolate values we calculate at the resolution we choose. The orbital engine should optionally use interpolation but I need to hunt down a bug in the non-interpolated functions that is affecting the orbital cubes. 2008-02-29 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: Updating the krazy files 2008-02-29 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/surfaceengine.cpp: Update the surface engine to use the new features of the GridData class - requires fresh OpenBabel SVN... 2008-02-28 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp: Provide more visual cues by changing the mouse cursor. * ChangeLog, libavogadro/src/glwidget.cpp: Fixed up some of the makeCurrent and doneCurrent calls - this seems to improve things a little here. My ATI driver still hates Avogadro though... 2008-02-26 Tim Vandermeersch * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Make VDWSurface a thread 2008-02-22 Marcus D. Hanwell * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/surfacesettingswidget.ui: Removed the set step size and associated functions. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: Removed the set step size spinner and functions. * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h: Adapted the IsoGen class to use the global quality level to set the step size. * libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.h: Added new virtual function - quality() so that IsoGen can use it. 2008-02-21 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/iso.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/painterdevice.h: Tweaked include files a little so that IsoGen doesn't include the whole of GLWidget. Fixed others. 2008-02-20 Tim Vandermeersch * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp: Small bug fixes 2008-02-19 Tim Vandermeersch * libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h: readSettings and writeSettings for SphereEngine * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: readSettings and writeSettings for BSDYEngine * libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h: readSettings and writeSettings for RingEngine * libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/hbondengine.h: readSettings and writeSettings for HBondEngine * libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h: readSettings and writeSettings for WireEngine * libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: readSettings and writeSettings for BondCentric tool. * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: readSettings and writeSettings for AutoOpt tool. * ChangeLog, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Various bug fixes for draw tool (undo/redo) while adjust hydrogens is on. AutoOpt: drawText with some information when running 2008-02-19 Donald Ephraim Curtis * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h: Label Engine now saves settings. * avogadro/src/mainwindow.cpp, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Updated Tools to read/write settings. The tools will need to be updated to take advantage of this but the mechanism is there. Please see drawtool.cpp/h for an example of how to implement this functionality. 2008-02-19 Carsten Niehaus * testfiles/2-aminoethanol.cml, testfiles/2-thioethanol.cml, testfiles/2_2_2-trifluoroethanol.cml, testfiles/but-2-yne-1_4-diol.cml, testfiles/butane.cml, testfiles/ethane-1_2-diol.cml, testfiles/ethane.cml, testfiles/ethanol.cml, testfiles/methane.cml, testfiles/methanol.cml, testfiles/propan-1-ol.cml, testfiles/propan-2-ol.cml, testfiles/propane.cml, testfiles/thiophene.cml: sync 2008-02-19 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, libavogadro/src/engine.cpp, libavogadro/src/engine.h: Fixed auto-change of tools. Tools are loaded during main window initialization. Still delays showing the widget until later. Removed some debugging code from the engine class and removed a function for setting primitives from a QList which we don't need since PrimitiveList has a default constructor for QList 2008-02-18 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Added renderTransparent and renderQuick functions to ensure proper rendering of the surfaces. Also modified tbe criteria for surface invalidation and cleaned up other parts of the code. * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h: Several changes made to make the IsoGen class more general. It now gets the minimum and maximum points of the cube directly from the grid and then uses the step size more intelligently. 2008-02-18 Tim Vandermeersch * ChangeLog, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Insert Smiles is now undo-able 2008-02-18 Marcus D. Hanwell * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Tweaked the surface engine to use the standard functions to invalidate the surface. Still needs more tweaking I think. * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: Used Geoff's new colour widget in the configuration dialog. Added support for drawing both the positive and negative iso surfaces as well as ensuring the surfaces are only recalculated if the molecule was modified. 2008-02-18 Geoffrey Hutchison * ChangeLog, avogadro/src/addenginedialog.cpp, avogadro/src/addenginedialog.h: * avogadro/src/addenginedialog.*: Set the default "name" when adding an engine to the engine type. (This saves some typing.) * ChangeLog, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp: Auto-addition of hydrogens. Should work cleanly. Try it out and report bugs. (There are probably still some corner cases.) 2008-02-17 Geoffrey Hutchison * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp: More progress to auto-add hydrogens. (Currently defaults to off -- still some weird bugs with interactive drawing.) 2008-02-17 Marcus D. Hanwell * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalsettingswidget.ui: Modified the default value for the iso surface - still needs a little more work to show the orbitals correctly but the big stuff is now working. 2008-02-17 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Fix PR#1849616 with "flash of reorganizing tools". * ChangeLog, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: * libavogadro/src/tools/drawtool.*, libavogadro/src/tools/drawcommand.*: Indentation and comment cleanup in draw tool. Added initial support for adjusting hydrogens while drawing. Still needs interactive drawing changes for hydrogens, but changing elements, delete, etc. work. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Mac fixes -- unified toolbar and saving window position. 2008-02-17 Tim Vandermeersch * ChangeLog, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Add "Change Bond Order" to drawtool. Make this feature and "Change Element" undo-able. 2008-02-16 Donald Ephraim Curtis * avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/mainwindow.cpp: DockWidget and Toolbar state are now saved in the settings. * avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Cleaned up the openFile and loadFile functions. loadFile is now private. MainWindow now handles all opening of files. Please check the updated main.cpp to see how this works. This solves a problem where if you specified a file more than once on the command line you would get multiple windows with the same file. Also, this makes opening files look nicer, one window pops up at a time. Unfortunatly this means we have to push events through. MainWindow::show() simply does a ::setVisible and draws the preliminary outline of the window but doesn't do a "Polish" which means that the window looks like it's stuck loading. I made loadFile private because I believe that openFile will eventually call loadFile but it also handles checking that the file is not already loaded in another window. The other change I made is that I stopped read/write of settings for the window position. In linux the window positioning should really be handled by the window manager. The other reason is that because of our settings being saved we weren't getting any benefit. If this needs to be implemented in mac (which I think mac can do it's own smart window placement) then we can add it back in for mac only. Dimensions are still saved. 2008-02-15 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Moved VDWSurface to IsoGen thread to make surface engine more interactive 2008-02-13 Geoffrey Hutchison * ChangeLog, libavogadro/src/tools/skeletontree.cpp: * libavogadro/src/tools/skeletontree.cpp: Fix bug with bond-centric manipulate tool. Translations and rotations were not telling atoms that they were updated. Fixes PR#1854343. * ChangeLog, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/colorbutton.cpp, libavogadro/src/colorbutton.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/surfacesettingswidget.ui: * libavogadro/src/colorbutton.*: New widget to show the current color and bring up a color picker when clicked. * libavogadro/src/engines/surfacesettingswidget.ui: Use it. * libavogadro/src/engines/surfaceengine.*: Ditto. 2008-02-12 Donald Ephraim Curtis * avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/engineprimitiveswidget.cpp, avogadro/src/enginesetupwidget.cpp, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/h2methylextension.cpp, avogadro/src/extensions/h2methylextension.h, avogadro/src/extensions/hydrogensextension.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/engine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/manipulatetool.cpp: PrimitiveList now acts exactly as a QList and with benefits. This means you should always pass around a PrimitiveList and not a QList. I have updated all the function calls etc. * avogadro/src/engineprimitiveswidget.cpp, avogadro/src/engineprimitiveswidget.h, avogadro/src/engineprimitiveswidget.ui, avogadro/src/extensions/selectextension.cpp, libavogadro/include/avogadro/periodictableview.h, libavogadro/src/glwidget.h, libavogadro/src/periodictableview.h: Added a button to set the engine primitives to the current selection. * avogadro/src/avogadro.qrc, avogadro/src/engineprimitiveswidget.ui, avogadro/src/icons/copy.png, avogadro/src/icons/cut.png, avogadro/src/icons/paste.png, avogadro/src/icons/rebuild.png, avogadro/src/icons/selecttable.png, avogadro/src/icons/tab_new.png, avogadro/src/icons/tab_remove.png, avogadro/src/mainwindow.ui: Added some new icons, updated the mainwindow and added a new button for setting engine primitives to the selection. 2008-02-11 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h, libavogadro/src/engines/orbitalsettingswidget.ui: Fixed the orbitals engine to the point that it now compiles. Still not showing any actual molecular orbitals yet though... 2008-02-11 Geoffrey Hutchison * libavogadro/src/engines/orbitalengine.cpp, libavogadro/src/engines/orbitalengine.h: Added initial (broken compile) orbital engine for Marcus. 2008-02-11 Tim Vandermeersch * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Added m_surfaceValid boolean to hold the state (valid or not) of the surface. For large molecules, the VDWSurface() function should also be in a thread. Do we create a seperate thread for this? * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Make IsoGen run as a real thread 2008-02-09 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/iso.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/surfaceengine2.cpp, libavogadro/src/engines/surfaceengine2.h, libavogadro/src/engines/surfacesettingswidget.ui: Added settings widget for the surface engine * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Make sure the surface center is the same as the molecule center. Added espColor function to handle ESP surface coloring. The cut-off energy is still too rough, it should be more smouth... 2008-02-09 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: I couldn't resist playing and so now we have a semi-transparent surface engine rendering in red right now using triangles... It is looking pretty good already. It still needs more work in order to get the colours right and make it more useful. The algorithm seems to be working quite well with small molecules at the very least. 2008-02-08 Marcus D. Hanwell * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/surfaceengine.cpp: Removed lots of qDebug statements. Thanks lots to Tim for spotting the bug! * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: It compiles, but completely fails to find any triangles! Obviously more work is required and I can't spot where it is failing. Comparing it to the work done in surfaceengine2.* may help but I think it is close... * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h: It compiles! Still need to verify it is doing useful things though... 2008-02-08 Tim Vandermeersch * libavogadro/src/engines/surfaceengine2.cpp, libavogadro/src/engines/surfaceengine2.h: Surface engine, able to draw the dots of the surface. Still needs some work... 2008-02-07 Marcus D. Hanwell * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h: Tweaked formatting to fit with ours, removed some application specific elements and tried to get it working in the Avogadro framework. More work still required as there are several application specific elements remaining before this class is self contained and able to generate isofurfaces. 2008-02-05 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp: The "duplicate" button on the engine list now works properly. It required adding a Engine::clone function that is purely virutal (there is no way around this). Did some minor testing but seemed to work fine. 2008-02-05 Tim Vandermeersch * libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h: Engine *clone const; instead of XXXEngine *clone const; * libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h: Added ::clone() functions 2008-02-04 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h: Added support for measuring the dihedral angle. Also made the tool update dynamically as the molecule is changed, optimised the label placement and ported it to use the OpenBabel functions to find the angles concerned. 2008-02-03 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/clickmeasuretool.cpp: Fix a bug where the angle between bonds was miscalculated. Thanks to Albert DeFusco for reporting the bug and providing a test case. 2008-01-28 Geoffrey Hutchison * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/polygonizer.cpp, libavogadro/src/engines/polygonizer.h: Remove old polygonizer code (since we'll use the iso.cpp code instead.) 2008-01-15 Donald Ephraim Curtis * avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessinputdata.cpp: Fixed bug with GAMESS dialog remaining present even after the main application window had closed. Also fixed a problem with the generated GAMESS input file being incorrect. 2008-01-12 Marcus D. Hanwell * libavogadro/src/engines/iso.cpp, libavogadro/src/engines/iso.h: Importing iso.h and iso.cpp from the Zhu3D project (3.4.0). These can be adapted and used to provide surface support in Avogadro. These files are not yet modified for use in Avogadro and so are not currently compiled/linked to. They are thread safe and I think this algorithm is the best choice. I will make modifications to these files in the near future. 2008-01-09 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/conformersearchdialog.cpp, avogadro/src/extensions/constraintsdialog.cpp, avogadro/src/extensions/constraintsdialog.ui, avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/constraintsmodel.h: Use OpenBabel::OBRotorKeys 2007-12-20 Geoffrey Hutchison * ChangeLog, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: * libavogadro/src/tools/autoopt.[h,cpp]: Use new HasAnalyticalGradients() method from Open Babel SVN trunk. 2007-12-20 Marcus D. Hanwell * ChangeLog, libavogadro/src/camera.cpp, libavogadro/src/camera.h: Added a copy constructor. * ChangeLog, libavogadro/src/glwidget.cpp: Fixed the race condition in the render quick code. 2007-12-19 Geoffrey Hutchison * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: New function to render unit cell axes for crystal cells. Needs a config option to turn on and off display. 2007-12-18 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/constraintsmodel.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: AutoOpt: removed conjugated gradients, added molecular dynamics 2007-12-18 Geoffrey Hutchison * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdysettingswidget.ui: Add in more bond granularity -- more steps, and a thin bond at the smallest size. Suggested by Andrew Dalke. * ChangeLog, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: * libavogadro/src/tools/*.cpp: Add Navigate::zoom() to wheel operations for all tools. 2007-12-17 Geoffrey Hutchison * ChangeLog, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp: * libavogadro/src/color.[h, cpp]: New method setToSelectionColor to allow overloading and customization of the selection color in render engines. * libavogadro/src/engines/*.cpp: Use it. 2007-12-16 Benoit Jacob * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: fix mousewheel action which hadn't got updated in the last round; and by the way make it much faster by always assuming that no atom is clicked (instead of performing an expensive gl selection) and instead using the m_referencePoint which is already quite precisely what the user sees. Also, fine-tune a constant in the m_referencePoint computation. 2007-12-15 Marcus D. Hanwell * libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h: Draw cylinders between backbone points when using quickRender. * ChangeLog, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h: Added support for colouring rings based upon the number of ring members. 2007-12-15 Geoffrey Hutchison * ChangeLog, avogadro/src/extensions/forcefielddialog.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: * libavogadro/src/tools/autoopttool.[h,cpp] Add support for OBPluginList to dynamically get list of force field types. * avogadro/src/extensions/forcefieldextension*: As above. * avogadro/src/extensions/forcefielddialog.cpp, avogadro/src/extensions/forcefielddialog.ui, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h: Added OBPluginList support to add force fields to the menu. Now auto-discovers any force fields added to Open Babel. * libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glpainter.cpp: Fix incomplete implementation of line stipple to be used for hydrogen-bonding. Now shows nice dashed lines for the hbond engine. 2007-12-14 Tim Vandermeersch * ChangeLog, libavogadro/src/engines/hbondengine.cpp, libavogadro/src/engines/hbondengine.h, libavogadro/src/engines/hbondsettingswidget.ui: Added HBond engine 2007-12-14 Benoit Jacob * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: the updating of the quicklist now occurs on mouseRelease, not on mousePress. The rational is that we want a very low latency on mousePress. With this change, on mousePress, we already have a quick-list ready for use. This further reduces latency when handling very large molecules. This prompted some deeped changes in GLWidget/GLWidgetPrivate, I hope they are OK, for instance pd is now in GLWidgetPrivate, I hope I got it right, as I didn't see any reason not to have it here (though it has to be constructed in GLWidget::constructor(), not in GLWidgetPrivate, because we need the this pointer of the GLWidget). * libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp: fix this bug: [ avogadro-Bugs-1849990 ] movement shoud be relative to visible part of the molecule When no atom is clicked, the navigatetool is now moving relatively to a weighted barycenter of the atoms, where atoms have a higher weight when they are central in the view and a lower weight when they are outside the frustum. A decreasing exponential formula is used to compute the weights. This may sound intensive, but is only done once on mousePress, and turns out (according to some qDebugs) to be almost negligible and not the cause for the short lag occuring on mousePress with big molecules (tested with a mol with 7000 atoms). The complexity is linear. * libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/tools/navigatetool.h: fix the issue that I reported on the mailing list, about computeClickedAtom(). Will write an explanation on the list about that. 2007-12-13 Geoffrey Hutchison * avogadro/src/extensions/dockingextension.cpp, avogadro/src/extensions/selectextension.cpp: Spelling fixes with action names. 2007-12-13 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/propextension.cpp, avogadro/src/extensions/propextension.h, avogadro/src/extensions/propmodel.cpp, avogadro/src/extensions/propmodel.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: Added angles and torsions to PropertiesModel, added Numerical/Analytical gradients option to AutoOpt 2007-12-13 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h: Disabled drawing of labels when moving the view, i.e. in quickRender(). 2007-12-13 Geoffrey Hutchison * ChangeLog, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: * libavogadro/src/glwidget.cpp (renderCrystal): Clean up main render() function with additional function to handle translations of crystal cells via display lists. Much cleaner code and should be faster on larger crystals. 2007-12-13 Benoit Jacob * i18n/avogadro_fr.ts, libavogadro/src/textrenderer.cpp: - improve text rendering: -- apply a gamma (0.5) correction to the rawbitmap to get rid of dim legs in "n" and "m" letters; this also makes all the text look a bit bolder, I hope you like it and agree it's more suitable for outlining -- fine-tune the 7x7 outlining brush - improve french translation * avogadro/src/extensions/dockingextension.cpp, i18n/avogadro_fr.ts: - update french translation, make it more complete (I used google/online chemistry dictionaries/wikipedia for some chemistry terms) - fix typos in dockingextension.cpp 2007-12-13 Geoffrey Hutchison * avogadro/src/CMakeLists.txt, avogadro/src/icons/Aspirin.png, avogadro/src/icons/AvoDocument.png, avogadro/src/mac/AvogadroDocument.icns, avogadro/src/mac/MacOSXBundleInfo.plist.in: Updated Mac OS document icons. 2007-12-13 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h: Removed the debug engine - moved to the GLWidget now. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added debug information to the GLWidget along with config options etc. 2007-12-12 Geoffrey Hutchison * ChangeLog, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h: * libavogadro/src/glwidget.cpp: Add in display lists for renderQuick. Wraps all engines into one list for maximum speed. * libavogadro/src/engines/wireengine.[h,cpp]: Skip display lists, as glWidget now handles this for us. 2007-12-12 Marcus D. Hanwell * ChangeLog, libavogadro/src/engine.h, libavogadro/src/glpainter.cpp, libavogadro/src/glwidget.cpp: Added more logic to implement renderQuick in the engines, GLPainter and the GLWidget. The renderQuick function. * ChangeLog, libavogadro/src/glwidget.cpp: Don't use dynamic scaling to render the axes - cylinders were reduced to lines before. * ChangeLog, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h: Added a dynamic scaling variable to the clas and a setter. This turns dynamic scaling on (default) and off. * avogadro/src/CMakeLists.txt, i18n/avogadro_en_GB.ts, libavogadro/src/CMakeLists.txt: Added a British English translation (you know - the original one that uses all the extra letters). 2007-12-11 Geoffrey Hutchison * ChangeLog, avogadro/src/extensions/propextension.cpp, avogadro/src/extensions/propmodel.cpp: * avogadro/src/extensions/propmodel.cpp, avogadro/src/extensions/propextension.cpp: Minor fixes to get compilation working again. 2007-12-11 Tim Vandermeersch * avogadro/src/extensions/constraintsdialog.cpp, avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/dockingextension.cpp, avogadro/src/extensions/liganddialog.cpp, avogadro/src/extensions/liganddialog.ui, avogadro/src/extensions/pocketdialog.cpp, avogadro/src/extensions/pocketdialog.ui, libavogadro/src/tools/autoopttool.cpp: * libavogadro/src/tools/autoopttool.[h,cpp]: Added "Ignored atoms are movable" and "Fixed atoms are movable". Small changes to ::redo() and ::undo(), undo still seems to work. I had to change it to makje sure the passed molecule pointer would not point to a molecule that would be deleted. This caused the constraints in the model to be lossed. (note: OB does not support angle and torsion constraints yet, ignoring atoms only works for MMFF94 at the moment.) * avogadro/src/extentions/constraintsmodel.[h,cpp]: now connects to primitiveRemoved signal from a Molecule to delete invalid constraints as you remove atoms. * avogadro/src/extentions/constraintsdialog.[h,cpp]: You can now only add valid constraints. * avogadro/src/extentions/forcefieldextension.cpp: Added "Ignore selected atoms" and "Fix selected atoms" + changes to make sure constraints are consistent for both the forcefield extension and the AutoOpt tool. Undo doesn't work for conformersearch yet, I'll probably fix this by moving the ConformerSearchDialog to the ForceFieldCommand itself. * avogadro/src/extentions/liganddialog.[ui,h,cpp]: Dialog to create a ligand. (dockingextension) * avogadro/src/extentions/pocketdialog.[ui,h,cpp]: Dialog to create a pocket. (dockingextension) * avogadro/src/extentions/dockingextension.[h,cpp]: Avogadro class to handle docking. * avogadro/src/extensions/propmodel.cpp: Small change to the way rows are added and deleted. * ChangeLog, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/constraintsdialog.h, avogadro/src/extensions/constraintsmodel.h, avogadro/src/extensions/dockingextension.h, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/liganddialog.h, avogadro/src/extensions/pocketdialog.h, avogadro/src/extensions/propmodel.cpp, libavogadro/src/tools/autoopttool.h: see ChangeLog... 2007-12-11 Geoffrey Hutchison * libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h: Initial wireframe optimization. 2007-12-10 Marcus D. Hanwell * ChangeLog, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Ported the renderAxesOverlay function to use the new renderCone function. * ChangeLog, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/povpainter.h: Added a drawCone function to draw 3D cones that can be used for arrows etc. * libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.h: Added new drawCone function to the painters. 2007-12-10 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/selectextension.cpp, avogadro/src/extensions/selectextension.h: Added select by element, residue and solvent 2007-12-09 Marcus D. Hanwell * libavogadro/include/avogadro/periodictableview.h, libavogadro/src/periodictableview.cpp, libavogadro/src/periodictableview.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/periodictablegv.cpp, libavogadro/src/tools/periodictablegv.h: Moved the PeriodicTableGV from the tools directory to the library directory. Also renamed it to PeriodicTableView and added an include file in the includes directory. Some small enhancements to the layout too. 2007-12-09 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, cmake/modules/FindOpenBabel2.cmake: Updated the CMake script to use OPENBABEL2_VERSION_MET keyword and fixed a bug I was having with a slow GLWidget when first starting up. PR#1847479 2007-12-07 Tim Vandermeersch * avogadro/src/extensions/conformersearchdialog.cpp, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h: setting the number of conformers to be generated is now connected * ChangeLog, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/conformersearchdialog.cpp, avogadro/src/extensions/conformersearchdialog.h, avogadro/src/extensions/conformersearchdialog.ui, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h, avogadro/src/extensions/propextension.h, avogadro/src/extensions/propmodel.cpp: Added Conformer Search dialog 2007-12-07 Benoit Jacob * libavogadro/include/avogadro/cylinder.h, libavogadro/include/avogadro/glpainter.h, libavogadro/include/avogadro/sphere.h, libavogadro/include/avogadro/textrenderer.h: re-add four mini-headers that somehow were missing, making the compilation fail. 2007-12-07 Geoffrey Hutchison * ChangeLog, libavogadro/src/engines/labelengine.cpp: Use new element translation feature. * ChangeLog, libavogadro/include/avogadro/elementtranslate.h, libavogadro/src/elementtranslate.cpp, libavogadro/src/elementtranslate.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/periodictablegv.cpp: * libavogadro/src/elementtranslate.[h,cpp]: New class to handle translation/i18n of element names. * libavogadro/src/tools/drawtool.cpp: Use the new translation feature. Also add in custom elements (from Periodic Table widget) into an ordered list. * libavogadro/src/tools/periodictablegv.cpp: Use the new translation feature. 2007-12-07 Marcus D. Hanwell * libavogadro/src/tools/periodictablegv.cpp, libavogadro/src/tools/periodictablegv.h: Added a double click event to the periodic table - choose the element and close. 2007-12-07 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/propextension.cpp, avogadro/src/extensions/propextension.h, avogadro/src/extensions/propmodel.cpp, avogadro/src/extensions/propmodel.h: Added PropertiesModel and PropertiesView to handle the represenwtation of properties in QTableViews 2007-12-06 Geoffrey Hutchison * ChangeLog, avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt, scripts/distclean.sh: * scripts/distclean.sh: An enhanced "distclean" script for preparing source releases. * avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Bumped version number to 0.3.0b2. * ChangeLog, libavogadro/src/tools/drawtool.cpp: * libavogadro/src/tools/drawtool.cpp: Enhanced custom element support. Picking elements from the table will add a new entry and select it. Picking elements form the table *already* in the list will simply select that element again. 2007-12-06 Tim Vandermeersch * avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/propextension.cpp, avogadro/src/extensions/propextension.h, avogadro/src/extensions/propmodel.cpp, avogadro/src/extensions/propmodel.h: Improved atom, bond cartesian editor + added conformer table, selecting an item in the table will also select the item in the 3D widget, or change the conformer. 2007-12-06 Marcus D. Hanwell * libavogadro/src/tools/periodictablegv.cpp, libavogadro/src/tools/periodictablegv.h: More tweaking of the ElementDetail painting. * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/periodictabledialog.cpp, libavogadro/src/tools/periodictabledialog.h, libavogadro/src/tools/periodictabledialog.ui, libavogadro/src/tools/periodictablegv.cpp: Removed the old perdiodic table dialog as it has now been replaced. Few tweaks to build files and stuff. * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/periodictablegv.cpp, libavogadro/src/tools/periodictablegv.h: After much work I think my super QGraphicsView based periodic table is ready for the world to see. It still has some rough edges that will need taking care of but it is already very functional and I think in many ways surpasses what we already have in place. Feel free to make suggestions or buy me beer ;-) 2007-12-06 Tim Vandermeersch * avogadro/src/extensions/propextension.cpp, avogadro/src/extensions/propextension.h, avogadro/src/extensions/propmodel.cpp, avogadro/src/extensions/propmodel.h: Added Conformer dialog, still needs selection handling * ChangeLog, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/constraintsdialog.cpp, avogadro/src/extensions/constraintsdialog.h, avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/constraintsmodel.h, avogadro/src/extensions/propextension.cpp, avogadro/src/extensions/propextension.h, avogadro/src/extensions/propmodel.cpp, avogadro/src/extensions/propmodel.h, libavogadro/src/tools/autoopttool.cpp: Added editable atom and bond properties tables + cartesian coordinates editor 2007-12-05 Tim Vandermeersch * avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/constraintsmodel.h: Added emitData() * ChangeLog, avogadro/src/extensions/constraintsdialog.cpp, avogadro/src/extensions/constraintsdialog.h, avogadro/src/extensions/constraintsdialog.ui, avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/constraintsmodel.h, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: You can now fix the position for an atom :D more constraints comming soon... 2007-12-04 Marcus D. Hanwell * CMakeLists.txt, ChangeLog, Doxyfile, Doxyfileext, INSTALL, avogadro/Doxyfile, avogadro/README, avogadro/src/CMakeLists.txt, avogadro/src/addenginedialog.cpp, avogadro/src/addenginedialog.h, avogadro/src/application.cpp, avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/elementcombobox.h, avogadro/src/engineitemmodel.h, avogadro/src/enginelistview.cpp, avogadro/src/enginelistview.h, avogadro/src/extensions/constraintsdialog.cpp, avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/constraintsmodel.h, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h, avogadro/src/extensions/selectextension.h, avogadro/src/extensions/unitcellparamdialog.cpp, avogadro/src/extensions/unitcellparamdialog.h, avogadro/src/flattabwidget.cpp, avogadro/src/flattabwidget.h, avogadro/src/flowlayout.cpp, avogadro/src/icontabwidget.cpp, avogadro/src/icontabwidget.h, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/primitivetreeview.cpp, avogadro/src/primitivetreeview.h, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.h, cmake/modules/COPYING-CMAKE-SCRIPTS, cmake/modules/FindAvogadro.cmake, cmake/modules/FindLinguist.cmake, gpltemplate, libavogadro/src/CMakeLists.txt, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/elementcolor.cpp, libavogadro/src/elementcolor.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/polygonizer.cpp, libavogadro/src/engines/polygonizer.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/global.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/glpicker.cpp.disabled, libavogadro/src/glpicker.h.disabled, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp.disabled, libavogadro/src/moleculetreeview.h.disabled, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/painterengine.cpp, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/residuecolor.cpp, libavogadro/src/residuecolor.h, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h, libavogadro/src/textrenderer.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigate.h, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/periodictabledialog.h, libavogadro/src/tools/quaternion.cpp, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/skeletontree.cpp, libavogadro/src/undosequence.cpp, libavogadro/src/undosequence.h: Removed trailing white space as discussed on the mailing list. 2007-12-04 Geoffrey Hutchison * ChangeLog, avogadro/src/application.h, avogadro/src/editcommands.h, avogadro/src/elementcombobox.h, avogadro/src/engineitemmodel.cpp, avogadro/src/engineitemmodel.h, avogadro/src/enginelistview.h, avogadro/src/engineprimitiveswidget.h, avogadro/src/extension.h, avogadro/src/extensions/forcefieldextension.h, avogadro/src/mainwindow.cpp, libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/elementcolor.cpp, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/global.cpp, libavogadro/src/global.h, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/painter.h, libavogadro/src/painterengine.cpp, libavogadro/src/painterengine.h, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/primitiveitemmodel.h, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h, libavogadro/src/residuecolor.cpp, libavogadro/src/sphere.h, libavogadro/src/textrenderer.cpp, libavogadro/src/textrenderer.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/undosequence.cpp: * libavogadro/*, avogadro/*: Update headers using script based on fixkdeincludes. Removes a *huge* pile of un-needed #include statments in both *.h and *.cpp files. Should improve compilation time. 2007-12-04 Marcus D. Hanwell * avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/forcefieldextension.cpp: Small fix to fix compilation - include the .moc file. 2007-12-04 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/constraintsdialog.cpp, avogadro/src/extensions/constraintsdialog.h, avogadro/src/extensions/constraintsdialog.ui, avogadro/src/extensions/constraintsmodel.cpp, avogadro/src/extensions/constraintsmodel.h, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h: Added constraints dialog 2007-12-04 Carsten Niehaus * libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/tools/bondcentrictool.h: use const& QString and explicit ctors if possible 2007-12-03 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: updated the Krazy files. 2007-12-03 Geoffrey Hutchison * libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.cpp.disabled, libavogadro/src/moleculetreeview.h, libavogadro/src/moleculetreeview.h.disabled: Disabled moleculetreeview -- unused, deprecated. Use primitiveitemmodel.cpp and others. 2007-12-03 Tim Vandermeersch * ChangeLog, libavogadro/src/tools/autoopttool.cpp: Added IsSetupNeeded to AutoOpt to increase performance 2007-12-02 Marcus D. Hanwell * ChangeLog, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h: More documentation improvements. Also moved some empty function implementations in POVPainter to the header to make it clearer that they do not do anything. * ChangeLog, libavogadro/src/glpainter.h: Improvements to the GLPainter documentation. * ChangeLog, libavogadro/src/glwidget.h: Updated the documentation of the GLWidget and GLHits classes. 2007-12-02 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h: Added progress bar to Systematic Rotor Search 2007-12-01 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/debugengine.cpp: Small fix to use the painter. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.ui, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Moved the axes engine into the GLWidget where it belongs. Added a global configuration option for it. 2007-11-30 Marcus D. Hanwell * ChangeLog, libavogadro/src/engine.h: Fixed up the documentation a little. * ChangeLog, libavogadro/src/color.h: Fixed up the documentation a little. * ChangeLog, libavogadro/src/camera.h: Fixed up the documentation a little. * ChangeLog, avogadro/src/mainwindow.h: Fix the API documentation title. 2007-11-30 Geoffrey Hutchison * ChangeLog, libavogadro/src/tools/autoopttool.cpp: * libavogadro/src/tools/autoopttool.cpp: Remove "OBPatched" ifdefs. These are now all supported in OB-2.2. 2007-11-30 Marcus D. Hanwell * libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringsettingswidget.ui: Made the ring engine default to being opaque... 2007-11-30 Geoffrey Hutchison * ChangeLog, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/elementcolor.cpp, libavogadro/src/elementcolor.h, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/painterdevice.h, libavogadro/src/povpainter.h: Initial color map support, including default base class (i.e., color by element) 2007-11-29 Tim Vandermeersch * ChangeLog, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: smiles to 3D added to DrawTool * ChangeLog, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Added widgets for OBBuilder class, see Changelog for details * ChangeLog, avogadro/src/extensions/forcefieldextension.cpp: Corrected important typo: MMF94 -> MMFF94 (ffID) 2007-11-28 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ribbonsettingswidget.ui: Removed the opacity slider for now. Also added in a new display type - lines. Renders cylinders between points and spheres at each point. * ChangeLog, libavogadro/src/engines/wireengine.cpp: Optimised the bond drawing, only use multiLines when the bond order is greater than one. * libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h: Added my name to the copyright headers. 2007-11-27 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Changed unified toolbar (on Mac) to use Designer flag. * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/clickmeasuretool.h: Fix a few names to be more readable. (Should also improve translation?) * Doxyfile, Doxyfileext: Update for 0.3.0b2 version number. 2007-11-27 Donald Ephraim Curtis * avogadro/src/addenginedialog.cpp, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/glwidget.cpp: engine.h: New macros AVOGADRO_ENGINE and AVOGADRO_ENGINE_FACTORY can help people with their engine headers so they don't have to include redundant functions. These are things we can generate automatically at the moment. Updated all the engines. Properly fixed the addenginedialog.cpp hack. 2007-11-26 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/ringengine.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.h: Added new drawTriangle function that takes a normal as the fourth argument. Calculate a normal and use it for the whole ring - improved lighting with no artifacts in each ring, still issues around turning points. * ChangeLog, libavogadro/src/engines/ringengine.cpp: Add back in optimisations for the ring engine. 2007-11-26 Geoffrey Hutchison * avogadro/src/addenginedialog.cpp, avogadro/src/addenginedialog.ui, avogadro/src/settingsdialog.ui: User Interface fixes. 2007-11-26 Marcus D. Hanwell * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/ringengine.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/povpainter.cpp, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigate.cpp: Fixed the case of the back transformed axis functions and ported the existing code. 2007-11-26 Donald Ephraim Curtis * avogadro/src/engineprimitiveswidget.cpp, avogadro/src/engineprimitiveswidget.h, avogadro/src/engineprimitiveswidget.ui, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Separated the Engine Configuration dialog into two separate dialogs. The titles need some changing and/or they need to become icons. This is what we should actually do. Unfortunatly I believe this is deeply embeded in the MainWindow widget and far be it for me to want to dig into it. 2007-11-25 Carsten Niehaus * avogadro/src/extensions/gamessinputdata.cpp, krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/runkrazy.rb, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h: * Updated the krazy results and fix two of the issues 2007-11-20 Geoffrey Hutchison * ChangeLog, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/selectextension.cpp, avogadro/src/extensions/selectextension.h, avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/smartsextension.h, avogadro/src/mainwindow.cpp: * avogadro/src/extensions/selectextension.cpp: Renamed extension for SMARTS selection. Added support for new options, such as invert selection. (More to come later, e.g., atom selection by name, residue by name, etc.) * libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: Some test code for surfaces. 2007-11-20 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/polygonengine.cpp, libavogadro/src/engines/polygonengine.h, libavogadro/src/glpainter.cpp: More tweaks to the drawTriangle function. Added a new polygon engine. Render certain structures as polygons. 2007-11-19 Geoffrey Hutchison * ChangeLog, libavogadro/src/glpainter.cpp: * libavogadro/src/glpainter.cpp: Refinement of multiple bonds in wireframe view. * ChangeLog, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/engines/wiresettingswidget.ui, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.h: * libavogadro/src/painter.h, libavogadro/src/glpainter.h, libavogadro/src/povpainter.h, libavogadro/src/glpainter.cpp: Add drawMultiLine method for wireframe multiple bonds. * libavogadro/src/engines/wireengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wiresettingswidget.ui: Add multiple bond indications for wireframe render engine. (Still needs some refinement, particularly triple bonds.) 2007-11-17 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/labelsettingswidget.ui, libavogadro/src/engines/ribbonsettingswidget.ui, libavogadro/src/engines/ringsettingswidget.ui, libavogadro/src/engines/spheresettingswidget.ui: Added spacers to the engine configuration dialogs. 2007-11-17 Geoffrey Hutchison * avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/h2methylextension.cpp, avogadro/src/extensions/h2methylextension.h, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h, avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/smartsextension.h, avogadro/src/extensions/unitcellextension.cpp, avogadro/src/extensions/unitcellextension.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Revised menu structure, adding "Build" and "Select" menus. Changed extensions to build menu paths by catenation of strings. This facilitates translation. 2007-11-17 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsdysettingswidget.ui: Added check box to show higher order bonds or not. * ChangeLog, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/glpainter.cpp: Added a new OpenGL material that should work better with the ring engine. 2007-11-16 Geoffrey Hutchison * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/engines/wiresettingswidget.ui: Added new settings for the wireframe engine -- turn off the dots for atoms. Provides a really nice view for proteins. * testfiles/Fe.sdf, testfiles/icsd_83086.cif, testfiles/icsd_83086.res, testfiles/tpy-Ru.sdf: Added a few test files for a polygon engine. 2007-11-14 Geoffrey Hutchison * avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Bump version number for 2007-11-14 snapshot. 2007-11-14 Marcus D. Hanwell * libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.h: Fixed a small bug in the drawTriangle function. 2007-11-14 Geoffrey Hutchison * avogadro/untitled01.gpr, testfiles/benzene-homo.cube.gz, testfiles/ch3cl-density.cub.gz, testfiles/ch3cl-esp.cub.gz, testfiles/untitled01.gpr: Added some test files, including cube/surface tests. * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/polygonizer.cpp, libavogadro/src/engines/polygonizer.h, libavogadro/src/engines/surfaceengine.cpp, libavogadro/src/engines/surfaceengine.h: First pass at a surface engine, using OB-2.2 SVN trunk. Definitely needs some work, but it does compile and show some surfaces. 2007-11-14 Marcus D. Hanwell * libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h: Correct file headers. * ChangeLog, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h, libavogadro/src/engines/ringsettingswidget.ui: Added opactiy slider, transparency now working. * ChangeLog, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/ringengine.cpp, libavogadro/src/engines/ringengine.h: Added new ring engine, renders ring structures. Transparency is not working yet. 2007-11-13 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h: Updated the ribbon engine so that we now have multiple chain colours! 2007-11-12 Marcus D. Hanwell * ChangeLog, libavogadro/src/glpainter.cpp: And the glpainter... * libavogadro/src/glpainter.h, libavogadro/src/glwidget.cpp, libavogadro/src/painter.h, libavogadro/src/painterdevice.h: Exposed the loaded Molecule to the PainterDevice. Added the drawTriangle function. 2007-11-11 Donald Ephraim Curtis * i18n/avogadro_de.ts, i18n/avogadro_fr.ts, libavogadro/src/glwidget.cpp: Missing tr() in glwidget to set the default engine. This will be obsolete soon as we can save settings. Fixed some translations. * i18n/avogadro_de.ts, i18n/avogadro_fr.ts: reverted some of Benoits original french translations that somehow got lost in the transfer * avogadro/src/aboutdialog.cpp, avogadro/src/engineitemmodel.cpp, avogadro/src/extensions/forcefielddialog.cpp, avogadro/src/extensions/gamessinputdialog.cpp, avogadro/src/extensions/h2methylextension.cpp, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/unitcellextension.cpp, avogadro/src/extensions/unitcellparamdialog.cpp, avogadro/src/flattabwidget.cpp, i18n/avogadro_de.ts, i18n/avogadro_fr.ts, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/sphere.cpp, libavogadro/src/textrenderer.cpp, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigate.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/periodictabledialog.cpp, libavogadro/src/tools/quaternion.cpp, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/skeletontree.cpp: Big i18n fix. Class implementations (.cpp) need to be surrounded by namespace Avogadro {} if the class is defined in that namespace. Causes inconsistencies between linguist and lupdate * avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, libavogadro/src/tool.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h: tool.h: the Tool class now has a signal for emitting messages. main.cpp: fixed some translation loading issues. (MORE TO COME). mainwindow.cpp: tools that emit messages now get sent to the message box. clickmeasuretool.*: now emit distances and angles. fixes PR #1807092 * i18n/avogadro_de.ts, i18n/avogadro_fr.ts, libavogadro/src/glpainter.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Updated translation files. libavogadro/src/tools/eyecandy.*: Added some functions to allow specifying your own parameters for eyecandy. Can still pass a pointer to an atom and have the parameters specified for you. Added eyecandy for zooming. libavogadro/src/tools/manipulatetool.*: Added eyecandy to manipulate tool. This resolves PR #1823559. libavogadro/src/tools/navigatetool.cpp: Optimized some code that was repeated in all if/else statements. libavogadro/src/glpainter.cpp: Removed unused variable. 2007-11-10 Geoffrey Hutchison * ChangeLog, avogadro/src/mainwindow.cpp: * avogadro/src/mainwindow.cpp (copy, exportGraphics): Embed MDL molfile and SMILES data in exported graphics. Should allow PNG files to be read back in via Open Babel 2.2. 2007-11-06 Marcus D. Hanwell * ChangeLog, libavogadro/src/glpainter.cpp: More tuning has really improved the render speed - thanks to Thomas Margraf for providing an example which inspired what I did here. * ChangeLog, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ribbonsettingswidget.ui, libavogadro/src/glpainter.cpp: Added ability to set the ribbon radius, also tried to add transparency but that is not working for me here. Added some extra calculations to the drawSpline function so the tube should not be flattened and has a defined radius. 2007-11-05 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/glpainter.cpp: Now filled with NURBS goodness. Still needs quite a bit of tuning and testing but visually improved. 2007-11-05 Geoffrey Hutchison * avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/forcefielddialog.cpp, avogadro/src/extensions/forcefielddialog.h, avogadro/src/extensions/forcefielddialog.ui, avogadro/src/extensions/forcefieldextension.cpp, avogadro/src/extensions/forcefieldextension.h, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h: General force field extension, allowing UFF and MMFF94. We still need to use OBPlugin to get a list of the active forcefields, rather than a hard-coded list. 2007-11-04 Benoit Jacob * libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/navigatetool.cpp: Improvements in the eye-candy: - move the zoom-eyecandy from navigatetool.cpp to eyecandy.cpp, and let it honor the MINIMUM_APPARENT_SIZE constant - don't draw anything for the zoom-to-molecule-center as I can't think of any useful visual cue in that case. zoom-to-atom remains a sphere, but with minimum size scaled by a factor of 0.3 - reduce the value of the MINIMUM_APPARENT_SIZE constant. - introduce m_color member in Eyecandy to centralize the color. This should close Bug #1825419 2007-11-02 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h: Reimplemented the setPrimitives function due to changes in molecule loading. * ChangeLog, libavogadro/src/glwidget.cpp: Updated the setMolecule function to call setPrimitives for each engine at the end of molecule loading, should make our molecule loading more efficient. * ChangeLog, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui: Also added partial charge labelling for atoms, feature request 1824337. * ChangeLog, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelsettingswidget.ui: Updated the label engineto label atoms by residue name and number and bonds by their order. Feature request 1820686 and 1824338. 2007-10-31 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h: Improvements to the ribbon code so that it caches the chain and updates it if the molecule is changed. 2007-10-31 Geoffrey Hutchison * libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h: ToolGroup now supports changing tool by name. When changing groups, the buttons should now enable/disable properly. 2007-10-29 Donald Ephraim Curtis * avogadro.nsi, scripts/avogadro.nsi: Moved avogadro.nsi script to the scripts directory. * avogadro.nsi, scripts/cmake-vs2005.bat: Added cmake bat file for easier generation in Windows Updated Windows installer Script 2007-10-27 Donald Ephraim Curtis * i18n/avogadro_de.ts, i18n/avogadro_fr.ts: updated translations 2007-10-25 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/ribbonengine.cpp: Improve the ribbon engine to render multiple chains correctly and not crash when there is no chain. 2007-10-25 Donald Ephraim Curtis * avogadro/1CRN.pdb, testfiles/1CRN.pdb: moved test file to the 'testfiles' directory 2007-10-25 Geoffrey Hutchison * avogadro/CMakeLists.txt, avogadro/src/CMakeLists.txt, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/h2methylextension.cpp, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/unitcellextension.cpp, avogadro/src/mainwindow.cpp, libavogadro/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/moleculetreeview.cpp, libavogadro/src/tools/selectrotatetool.cpp: Updates to translate more strings. Also fix version numbers of libavo and avo. 2007-10-25 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.h: Added what I have for the ribbon drawing so far. I have added a function to draw a cubic spline through a set of control points. The ribbon engine uses this with the CA atoms to draw secondary structure. This is still far from perfect and I am working on it. Feedback is welcome. 2007-10-20 Geoffrey Hutchison * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Added stretch to layout, improves look. * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Added labels for tool options, and translation support. * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autoopttool.ui, libavogadro/src/tools/drawtool.cpp: Updated auto-optimization tool. Removed Designer interface (using code makes it look better on Mac) and eliminated less-used options. 2007-10-18 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/ribbonengine.cpp: Updated to use renderOpaque() and to draw cylinders between the CA atoms. The next step is to draw a smoothed curve between the points but the current code picks out the CA atoms of a molecule and connects the dots... Still disabled. 2007-10-13 Carsten Niehaus * i18n/avogadro_de.ts, i18n/avogadro_fr.ts: regenerate after my fixuifiles script * avogadro/src/enginesetupwidget.ui, libavogadro/src/engines/bsdysettingswidget.ui, libavogadro/src/engines/labelsettingswidget.ui, libavogadro/src/engines/ribbonsettingswidget.ui, libavogadro/src/engines/spheresettingswidget.ui: Using KDEs "fixuifiles" so that the "Form" string no longer appears in the .ts-files! find . -name *.ui | xargs ~/svn/kdesdk/scripts/fixuifiles * i18n/avogadro_de.ts, i18n/avogadro_fr.ts: * Updating the .ts-files after my string-changes. Also adding some * translation for testing * avogadro/src/extensions/smartsextension.cpp, avogadro/src/mainwindow.cpp: * Fixing a couple of i18n issues * libavogadro/src/engines/sphereengine.cpp, libavogadro/src/tools/clickmeasuretool.cpp: adding a couple of comments for translators 2007-10-08 Donald Ephraim Curtis * CMakeLists.txt, i18n/avogadro_de.ts, i18n/avogadro_fr.ts, scripts/release_translations.sh, scripts/update_ts_files.sh: No longer need the translation scripts. To update translations do 'make update-translations' * cmake/modules/FindLinguist.cmake, i18n/avogadro_de.ts, i18n/avogadro_fr.ts, libavogadro/include/avogadro/library.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/tools/bondcentrictool.cpp: Update French Translations and cleaned some bad uses of tr() * avogadro/src/aboutdialog.cpp, avogadro/src/main.cpp, libavogadro/CMakeLists.txt, libavogadro/src/global.cpp, libavogadro/src/global.h: Added translation information and put the library functions (for version / svnrevision) in a file and put a function for the Library that does a ::createTranslator() 2007-10-07 Donald Ephraim Curtis * CMakeLists.txt, avogadro/CMakeLists.txt, avogadro/i18n/CMakeLists.txt, avogadro/i18n/avogadro_de.ts, avogadro/i18n/avogadro_fr.ts, avogadro/src/CMakeLists.txt, avogadro/src/extensions/forcefielddialog.cpp, avogadro/src/extensions/gamessextension.cpp, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, i18n/avogadro_de.ts, i18n/avogadro_fr.ts, libavogadro/CMakeLists.txt, libavogadro/i18n/CMakeLists.txt, libavogadro/i18n/libavogadro_de.ts, libavogadro/i18n/libavogadro_fr.ts, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/drawtool.cpp: Updated Translation Stuff (common directory) and fixed up the CMakeLists to auto-generate the translation files (.qm) * avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h: Attempt to fix the non-hiding geometric optimization dialog. It works much better. It's something to do with the way signals are getting passed to the thread and dialog. * avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/glwidget.cpp: made a branch for the splash screen and disabled it. for normal loading there is hardly any load time so the splash screen doesn't really do anything. in the future this may be worth loading up depending on how costly plugin loading is (or startup time for that matter). * avogadro/src/application.cpp, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Added delayed initialization so that the mainwindow constructor creates all the objects but doesn't do any loading of plugins until the GUI is already up and running. Once I did this, I realized it might be cool to have a splash screen because we do load a relatively large ammount of plugins and stuff. Anyways, this is the result. We can revert it if it's too gaudy (too much). * avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp: Fix for PR #1805401 We weren't properly setting background color. Needed a call to qglClearColor before calling the renderGL function. * avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Only ever copy to the clipboard. In Linux we don't currently copy to the selection buffer. However, this should change in the future. Fixed a bug where trying to undo the copy / cut commands was trying to restore the clipboard contents but this ends up causing crashes because the data gets deleted. 2007-10-05 Ross Braithwaite * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/bondcentrictool.cpp: Fixed a bug that caused avo to crash when you switched to our tool, did nothing then switched to another tool. Also threaded the Geometry Optimisation in the AutoOpt tool 2007-10-05 James Bunt * libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Added some documentation and fixed a few cases during dihedral manipulation where mishapen or small rectangles were drawn. 2007-10-04 James Bunt * libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Added the ability to draw obtuse angle-sectors (defaults to acute) * libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Improved the math for calculating the rotation of bond angles and dihedral angles. Interaction should be a lot smoother in the case where the bond being modified is almost perpindicular to the screen. * libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Initial implementation of dihedral angle manipulation. Still a little buggy and a few special cases that it doesn't work on but the basic concept is there. 2007-10-04 Ross Braithwaite * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: The current status of AutoOpt tool, has #define that can be uncommented if you have a patched version of OpenBabel 2007-10-03 Geoffrey Hutchison * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.ui, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp: Cleanups for Mac mouse buttons. Fixes PR#1720875. 2007-10-03 James Bunt * libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Fixed a bug with undo in the bond centric tool. Added the ability to view the dihedral/torsional angles of a given atom in relation to the selected bond by clicking on it. This is in preparation for dihedral angle editing. 2007-10-02 James Bunt * libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Some documentation and improved undo functionality. * libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Added a new procedure that checks if two atoms are bonded together in preparation for Dihedral angle manipulation. 2007-10-02 Ross Braithwaite * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h: Removed toolgroup signal hack 2007-10-02 Donald Ephraim Curtis * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/selectrotatetool.cpp: Re-added selectrotatetool to the CMakeLists.txt and fixed a selection bug. 2007-10-02 Ross Braithwaite * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: Changed it back as the thread was not working properly in linux 2007-10-01 Ross Braithwaite * libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h: Added a thread class to the autoopt tool for running the optimizer in * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/autoopttool.cpp, libavogadro/src/tools/autoopttool.h, libavogadro/src/tools/autoopttool.png, libavogadro/src/tools/autoopttool.qrc, libavogadro/src/tools/autoopttool.ui: My research project for my Honors, an interactive Automatic Optimisation tool 2007-09-24 Donald Ephraim Curtis * avogadro.nsi, libavogadro/src/global.h, libavogadro/src/povpainter.h, libavogadro/src/primitiveitemmodel.h, libavogadro/src/tools/bondcentrictool.cpp: Windows compile fixes. Needed exports to library functions. 2007-09-23 Geoffrey Hutchison * avogadro/src/extensions/gamessextension.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/periodictabledialog.cpp: Mac interface fixes, including for PR#1723768 -- quit now prompts for save and closes each window. 2007-09-19 Carsten Niehaus * avogadro/CMakeLists.txt, avogadro/i18n/CMakeLists.txt, libavogadro/i18n/CMakeLists.txt: Hey, now the .qm files even install in the correct directory ($PREFIX/i18n/) 2007-09-18 Carsten Niehaus * avogadro/i18n/avogadro_de.ts, avogadro/i18n/avogadro_fr.ts, libavogadro/i18n/libavogadro_de.ts, libavogadro/i18n/libavogadro_fr.ts: I hope this was correct. I ran lupdate on the files and started a basic translation. 2007-09-17 Donald Ephraim Curtis * avogadro/avogadro.pro, avogadro/i18n/avogadro_de.ts, avogadro/i18n/avogadro_fr.ts, avogadro/src/elementcombobox.cpp.disabled, avogadro/src/main.cpp, libavogadro/i18n/libavogadro_de.ts, libavogadro/i18n/libavogadro_fr.ts, testfiles/acid_chlorides.smi, testfiles/amines.smi: Added french and german (de?) translations to avogadro. To add a new translation, find out the code (fr) and then do touch libavogadro/i18n/libavogadro_(code).ts touch avogadro/i18n/avogadro_(code).ts I know i know. It's somewhat a pain to think of libavogadro and avogadro as separate but I reallly prefer them this way so we save having to split up translations later. Please start doing some translations and i'll figure out how the hell to incorporate them. 2007-09-17 Benoit Jacob * avogadro/src/CMakeLists.txt, avogadro/src/elementcombobox.cpp, avogadro/src/elementcombobox.cpp.disabled, libavogadro/src/CMakeLists.txt, libavogadro/src/glpicker.cpp, libavogadro/src/glpicker.cpp.disabled, libavogadro/src/glpicker.h, libavogadro/src/glpicker.h.disabled: Make use of GLOB in CMakeLists whenever applicable, e.g.: FILE(GLOB libavogadro_SRCS "*.cpp") I browsed our CMakeLists to see which files should be excluded, and found glpicker.* and elementcombobox.cpp. So I appended ".disabled" to their filenames, so that they don't get globbed. * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/eyecandy.cpp, libavogadro/src/tools/eyecandy.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: make the translation-eyecandy share the same infrastructure as the rotation-eyecandy, which uniformizes looks, and move all that in a separate eyecandy.{h,cpp} file. * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: tweaking and cleanup in the rotation eyecandy * libavogadro/src/cylinder.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Big improvements in the eyecandy in navigatetool: -- move rotation-eyecandy code to a separate class (now we should go on and do the same for translation-eyecandy) -- now also do eyecandy for mol-based movement (not only atom-based movement) -- improve how sizes are computed, so that the eyecandy is visible from far away in big molecules -- take away redundant code between front-face and back-face drawing, using glCullFace() -- fix bugs in comments where front-face and back-face were mixed up -- fix rendering bug caused by that mixing up 2007-09-17 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, libavogadro/src/glpainter.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/textrenderer.cpp, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Fixed PR#1796030 Also some other minor bug fixes introduced when allowing GL Names of 0. 2007-09-16 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Fix for PR#1788659 Open file and save file dialogs now remember last directory. * libavogadro/CMakeLists.txt, libavogadro/src/glpainter.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp: Updated GLPainter and GLWidget so that when doing pushName / popName / setName, 0 is an acceptable value for a name. ie. no longer offset bonds. drawtool.cpp: as per PR#1717871 the draw tool now deletes bonds glwidget.cpp: added define to enable threaded OpenGL widget. Disabled by default so we can get a release out. It's some bug caused by XCB on my system. If you want to compile with a thread-enabled GLWidget do 'cmake -DENABLE_THREADED_GL ..' that should do it. patch for PR#1760151 2007-09-06 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html, krazy/runkrazy.rb: I am now using Krazy2. Updated the html files 2007-09-06 Benoit Jacob * CMakeLists.txt, avogadro/src/main.cpp, cmake/svn.h.cmake: fix the svn revision thingy -- don't install svn.h, instead store it in the CMake builddir, and add that dir to the list include dirs. make avogadro output it (example of usage. feel free to remove) * CMakeLists.txt, cmake/svn.h.cmake: Let CMake produce a special header file definining a string SVN_REVISION_STRING. The header is installed at $CMAKE_INSTALL_PREFIX/include/avogadro/svn.h This allows applications using libavogadro to be aware of which revision they are using. 2007-08-28 Benoit Jacob * libavogadro/src/camera.h, libavogadro/src/tools/navigate.cpp: remove two useless includes, add a copyright line for myself 2007-08-21 Donald Ephraim Curtis * avogadro/src/extensions/gamessefpmatchdialog.cpp, avogadro/src/extensions/gamessefpmatchdialog.h, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/gamessinputdata.cpp, avogadro/src/extensions/gamessinputdata.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Updated GLWidget to include the ::current() function which returns the current GLWidget. This isn't the best solution but it's required for extensions to get the current GLWidget. Also fixed up all the GAMESS EFP stuff so that it works correctly. 2007-08-20 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/ribbonengine.cpp, libavogadro/src/engines/ribbonengine.h, libavogadro/src/engines/ribbonsettingswidget.ui, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/painter.h, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h: Some small updates to the POVPainter. Added drawLine and drawSpline to the Painters, but spline is commented out as it still requires more work. Started some very early work on the ribbon view but it is far from working right now. Depends on implementing a spline function to draw B-splines. * ChangeLog, libavogadro/src/glwidget.cpp: Fixed regression with bond picking. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Added the computeClickedPrimitive/Atom/Bond functions to the GLWidget class as these functions have been used in several tools and are quite generic. Ported the tools to use the new computeClicked* functions and removed the local ones. 2007-08-19 Marcus D. Hanwell * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/navigate.cpp, libavogadro/src/tools/navigate.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Added a new navigation class with static member functions to perform the navigation functions common to three tools right now. Ported the tools to use the new Navigate class and removed all duplicated code. 2007-08-18 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/clickmeasuretool.cpp: Added the display of the angle sector under consideration with the current selection of atoms. * ChangeLog, libavogadro/src/tools/clickmeasuretool.cpp: Added units to the output. 2007-08-16 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/action.cpp, avogadro/src/action.h, avogadro/src/extension.h, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h, avogadro/src/extensions/h2methylextension.cpp, avogadro/src/extensions/h2methylextension.h, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h, avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/smartsextension.h, avogadro/src/extensions/unitcellextension.cpp, avogadro/src/extensions/unitcellextension.h, avogadro/src/mainwindow.cpp: Removed action.cpp/h all together and replaced with ::menuPath(QAction *action) in the Extension class 2007-08-14 Donald Ephraim Curtis * avogadro/src/extensions/gamessefpmatchdialog.cpp, avogadro/src/extensions/gamessefpmatchdialog.h, avogadro/src/extensions/gamessefpmatchdialog.ui, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/main.cpp: Progress on the EFP dialog. Saves the previous selection and interactivley displays the current group in the dialog. Still modal but I believe that works the best. It's a complicated process and might get more complicated with multiple dialogs being open. Plus if the molecule is modified the EFP group information becomes invalid. * avogadro/src/extensions/gamessefpmatchdialog.cpp, avogadro/src/extensions/gamessefpmatchdialog.h, avogadro/src/extensions/gamessefpmatchdialog.ui, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h: More EFP Additions. Still more needed. * ChangeLog, avogadro/src/editcommands.cpp, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/gamessefpmatchdialog.cpp, avogadro/src/extensions/gamessefpmatchdialog.h, avogadro/src/extensions/gamessefpmatchdialog.ui, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/smartsextension.cpp, avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Refactored clearSelection -> clearSelected (needs to be clearSelectedPrimitives eventually but it seems wordy. I prefer wordy and clear over short and unclear. Added some more EFP mechanisms to the GAMESS plugin but it needs some more work. 2007-08-13 Shahzad Ali * libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/skeletontree.h: Comments added - Documentation 2007-08-11 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html: I updated Krazy to the latest generation of checks. Several issues have now been found 2007-08-10 Donald Ephraim Curtis * libavogadro/src/primitivelist.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/autorotate.png, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/autorotatetool.qrc, libavogadro/src/tools/clickmeasuretool.qrc, libavogadro/src/tools/draw.qrc, libavogadro/src/tools/drawtool.qrc, libavogadro/src/tools/manipulate.qrc, libavogadro/src/tools/manipulatetool.qrc, libavogadro/src/tools/measure.qrc, libavogadro/src/tools/navigate.qrc, libavogadro/src/tools/navigatetool.qrc, libavogadro/src/tools/select.qrc, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.qrc: Minor file renaming to match correctly, might still need some work. Also changed the auto-rotate icon which could also use some work. 2007-08-10 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/navigatetool.cpp: Added visual representation of atom centred translation. Needs extra features adding to the painter and porting. Also need to add something for zoom/tilt. 2007-08-08 Marcus D. Hanwell * libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h: Added multiCylinder support thanks to help from Benoit with the maths. Also tweaked the default material parameters in order to improve the look of default renders. Still need to improve the translation from OpenGL to POV-Ray coords. * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Add visual representation of atom centred molecule rotation. Open up modifiers to all - we always planned to add this for all architectures. Alt seems to be taken in KDE for Window movement though - possibly need an alternate. 2007-08-07 Ross Braithwaite * libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/quaternion.h, libavogadro/src/tools/skeletontree.h: Added comments to various functions that I wrote. 2007-08-07 James Bunt * libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/painter.h, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/bondcentric.png, libavogadro/src/tools/bondcentrictool.cpp, libavogadro/src/tools/bondcentrictool.h, libavogadro/src/tools/bondcentrictool.qrc, libavogadro/src/tools/quaternion.cpp, libavogadro/src/tools/quaternion.h, libavogadro/src/tools/skeletontree.cpp, libavogadro/src/tools/skeletontree.h: Added the bondcentric tool. Added a few procedures needed by this tool to the painters, and a new signal to the widget that signals when the molecule is changed. 2007-08-06 Donald Ephraim Curtis * ChangeLog, libavogadro/src/glwidget.cpp, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/primitiveitemmodel.h: * libavogadro/src/glwidget.cpp: GLWidget is not initialized until it is actually called to render. This hopefully fixes a race condition that existed somewhere with makeCurrent(). Not sure why this was happening but I believe it had something to do with the fact that we were calling ->run() within the constructor and we don't know what magic TT is doing behind the scenes. * libavogadro/src/primitiveitemmodel.h, libavogadro/src/primitiveitemmodel.cpp: there was an issue with the engine views when deleting certain atoms which has been fixed. Basically the model needs to notify the view that it's just taking from the end of the list but has reordered the contents (just the way we happen to change things in the engines). 2007-08-05 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html: Reran Krazy. Still no issues. Great 2007-07-26 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/action.cpp, avogadro/src/action.h, avogadro/src/extension.h, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h, avogadro/src/extensions/h2methylextension.cpp, avogadro/src/extensions/h2methylextension.h, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h, avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/smartsextension.h, avogadro/src/extensions/unitcellextension.cpp, avogadro/src/extensions/unitcellextension.h, avogadro/src/mainwindow.cpp, libavogadro/src/primitivelist.h: Made Avogadro::Action so that each action also has a menuPath where it should go. It will also help later, i think we can emit signals easier. 2007-07-25 Donald Ephraim Curtis * libavogadro/src/camera.h, libavogadro/src/glpainter.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/textrenderer.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/navigatetool.cpp: resolved PR 1759321 and 1742953 see bug reports for more information and future updates. * libavogadro/src/camera.cpp, libavogadro/src/engines/bsdyengine.cpp: camera.cpp: Fixed PR #1759321 bsdyengine.cpp: removed extraneous sorting calls (previously inserted to help with transparency) 2007-07-21 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html, krazy/runkrazy.rb: Now Krazy is run with --exclude qclasses,license,copyright. This means those three scripts are not used which leads to a --tara-- error-free Avogadro! * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html: Updating the HTML files after I fixed most issues found by Krazy * avogadro/src/flowlayout.cpp, avogadro/src/mainwindow.cpp: Krazy-fixes: Fix include order and "" → <> * avogadro/src/engineitemmodel.h, avogadro/src/enginelistview.h, avogadro/src/enginesetupwidget.h, avogadro/src/extensions/forcefielddialog.h, avogadro/src/extensions/gamessinputdialog.h, avogadro/src/extensions/unitcellparamdialog.h, avogadro/src/flattabwidget.cpp, avogadro/src/flattabwidget.h, avogadro/src/flowlayout.h, avogadro/src/primitivetreeview.h: Krazy fixes: - Many explicit ctors - One more const QString& instead of QString in the API * avogadro/src/extensions/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Do not use TRUE in CMake, use true. The TRUE/FALSE macros are obsolete since CMake 2.4.2 or something like that. * libavogadro/src/CMakeLists.txt, libavogadro/src/moleculetreeview.cpp, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h, libavogadro/src/primitive.cpp, libavogadro/src/primitiveitemmodel.h, libavogadro/src/primitivelist.cpp, libavogadro/src/toolgroup.cpp: Krazy fixes for libavogadro/src/*: - Make two ctors explicit - Use #include and not "config.h" - Marcus forgot a const QString& (was just a QString) Question: ../libavogadro/src/painterengine.h: line#38 (1) ../libavogadro/src/painter.h: line#39 (1) Those two clases are derived from QObject but are missing the Q_OBJECT macro... Is there a reason for that? If not I will add the macro. * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html: Updating the Krazy files after installing the latest Krazy-version. Also, this is against the latest svn trunk 2007-07-21 Donald Ephraim Curtis * ChangeLog, avogadro/src/elementcombobox.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/include/avogadro/povpainter.h, libavogadro/src/CMakeLists.txt, libavogadro/src/color.h, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/glpainter.cpp, libavogadro/src/glpainter.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/painterdevice.h, libavogadro/src/painterengine.cpp, libavogadro/src/painterengine.h, libavogadro/src/povpainter.cpp, libavogadro/src/povpainter.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/tool.h, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/autorotatetool.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: MERGE OF MULTITHREADED_OPENGL BRANCH INTO TRUNK. svn merge -r 535:572 *** do not work on multithreaded_opengl any longer *** 2007-06-24 Geoffrey Hutchison * ChangeLog, libavogadro/src/tools/drawtool.cpp: * libavogadro/src/tools/drawtool.cpp (DrawTool::mousePress): Fix bugs with "alchemy" mode -- clicking on an atom to change the element. PR#1741653 and PR#1720879. * ChangeLog, avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/mainwindow.cpp: * avogadro/src/editcommands.[h,cpp]: Support for selecting new atoms when pasting. Fixes PR#1739837. * avogadro/src/mainwidnow.cpp: Pass along the widget when creating a paste command. Fix minor crashes when copy/cut with selected bonds. (Now we can select more than just atoms). 2007-06-22 Geoffrey Hutchison * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/navigatetool.cpp: Add initial one-button Mac support for draw tool and navigate tool. 2007-06-21 Geoffrey Hutchison * ChangeLog, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/h2methylextension.cpp, avogadro/src/extensions/h2methylextension.h: * avogadro/src/extensions/h2methylextension.cpp: New extension for "sculpting" hydrogen atoms to methyl groups. Works also on selected hydrogens. * ChangeLog, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h: * avogadro/src/extensions/hydrogens*: Fix PR#1739841. Only add or remove hydrogens for selected atoms if some atoms are selected. 2007-06-21 Benoit Jacob * avogadro/src/extensions/unitcellextension.cpp, libavogadro/src/glwidget.cpp: let GLWidget::setUnitCells auto-update the geometry, reinitialize the camera for the new geometry, and update the view. 2007-06-20 Donald Ephraim Curtis * avogadro/src/extension.h, libavogadro/src/painter.h: removed some function definitions that were never implemented. 2007-06-20 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/glwidget.cpp: Initialise the painter at the start of the GLWidget render function, removed all calls to painter begin and end from the engines. 2007-06-20 Donald Ephraim Curtis * ChangeLog, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/glwidget.cpp: * avogadro/src/extensions/ghemicalextension.cpp: Added threading so that a progress dialog is displayed. Also removed some debuggin code that was left over. * avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h: ghemical optimization is now threaded 2007-06-19 Donald Ephraim Curtis * ChangeLog, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp: * libavogadro/src/glwidget.*: Added ::radius function to the GLWidget that way tools and engines only need to ask the GLWidget the radius rather than actually going through all engines on their own. Also, engines more accurately give radius. * libavogadro/src/engine.*: updated ::radius function to take the GLWidget as a parameter. * libavogadro/src/engines/*: updated engines to not maintain an internal pointer to the GLWidget that was last called. 2007-06-19 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/navigatetool.cpp: Updated tooltip to reflect current behaviour of this tool. * ChangeLog, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/autorotatetool.h: Added the ability to initiate rotation using mouse movements. Left for x/y, middle for z. 2007-06-19 Geoffrey Hutchison * ChangeLog, libavogadro/src/glwidget.cpp: * libavogadro/src/glwidget.cpp (updateGeometry): Initial attempt at updating geometry based on unit cell parameters. This *seems* like the correct approach, but I have not checked with Benoit or fully tested. This tracks PR#1739844. 2007-06-19 Donald Ephraim Curtis * libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/autorotatetool.h: move buttonStartStop to member pointer so that name can change. 2007-06-19 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/spheresettingswidget.ui: Removed the skeleton rendering functions - use the other engines thanks to changes in engine rendering order made by Donald. Much simpler implementation that can use any engine for the backbone now. 2007-06-19 Donald Ephraim Curtis * ChangeLog, libavogadro/src/glwidget.cpp: cleaned up debug code. 2007-06-18 Donald Ephraim Curtis * ChangeLog, avogadro/src/extensions/gamessextension.h, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/primitive.h: * libavogadro/src/engine.*: added some engine flags for transparency atoms, bonds, molecules so that the glwidget has a better idea of the capabilities of the engines. also added the transparencyDepth relative to others. this needs a conceptual update just because i don't think it's intuitive. if people define theirs higher than other engines they get priority. i still believe this should be dependent on the ::radius response for the specific primitive type we're trying to compare. * libavogadro/src/glwidget.*: engines are now sorted on load based on their flags and their transparencyDepth. * libavogadro/src/engines/*: updated engines. * ChangeLog, avogadro/src/extensions/gamessinputdata.cpp, avogadro/src/extensions/gamessinputdialog.cpp, avogadro/src/extensions/gamessinputdialog.ui, avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/tools/selectrotatetool.cpp: * libavogadro/src/glwidget.*: Fixed a bug in mass selection where the pointer was going past the end of the buffer. Had to make sure our pointer stays sane. * libavogadro/src/primitive.*: Removed old selection code. * libavogadro/src/selectrotate.cpp: Updated so that if there are multiple engines, the toggling of selection only happens once per primitive. * avogadro/src/extensions/gamessinputdialog.cpp: Fixed bug 1720467. 2007-06-17 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: * avogadro/src/mainwindow.*: Remove quit() event -- Mac clients should receive a closeEvent for every window (advice from Trolltech). * ChangeLog, avogadro/src/extensions/unitcellextension.cpp, avogadro/src/extensions/unitcellextension.h, avogadro/src/extensions/unitcellparamdialog.cpp, avogadro/src/extensions/unitcellparamdialog.h, avogadro/src/extensions/unitcellparamdialog.ui: * avogadro/src/extensions/unitcell*: Add support for controlling unit cell dimensions and angles. Add a warning if the molecule does not yet have a unit cell record -- extension will suggest a possible box dimenison. 2007-06-16 Marcus D. Hanwell * ChangeLog, libavogadro/src/engines/axesengine.cpp: Improvements to the axes engine rendering - all axes should be of equal length now. * ChangeLog, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/spheresettingswidget.ui: Some improvements to the rendering code and the setup widget, as suggested by Benoit. * ChangeLog, avogadro/src/settingsdialog.ui, libavogadro/src/painter.cpp: Added some higher detail levels, probably only useful on accelerated systems. Kept the default level at 2. 2007-06-15 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/autorotatetool.h: Added a start/stop button and a reset button to the config widget. * ChangeLog, cmake/modules/FindOpenBabel2.cmake: Added more verbosity to the cmake messages about the required version. * ChangeLog, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h: Added undo/redo support to the manipulation tool. 2007-06-14 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html: update the krazy status * libavogadro/src/engines/axesengine.h, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.h: remove 23 includes from the engine headers... We really need a script to do this! * CMakeLists.txt, ChangeLog, INSTALL: Require Qt 4.3.0 now. Marcus told me with 4.2.x Avo doesn't even compile right now because of some .ui-files. Ok, I have *no* clue whatsoever what these lines are all about... Shall I simple s/4.2.3/4.3.0/? File C:\Qt\4.2.3\lib\QtGui4.dll File C:\Qt\4.2.3\lib\QtCore4.dll File C:\Qt\4.2.3\lib\QtOpenGL4.dll 2007-06-13 Geoffrey Hutchison * avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/unitcellextension.cpp, avogadro/src/extensions/unitcellextension.h, avogadro/src/extensions/unitcellparamdialog.cpp, avogadro/src/extensions/unitcellparamdialog.h, avogadro/src/extensions/unitcellparamdialog.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added full unit cell display support -- new extension can allow you to specify how many unit cells in each direction to display. (Still need to fix selection.) * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Add a small random vector offset to pasted molecules, so they do not fall on top of each other. (Best solution would be to mirror drawing programs, a small increasing offset with every paste.) 2007-06-13 Marcus D. Hanwell * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/autorotatetool.cpp, libavogadro/src/tools/autorotatetool.h: Added new auto rotation tool. The rotation speed about the x, y and z axes can be set using sliders. It needs an icon. 2007-06-12 Marcus D. Hanwell * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/axesengine.cpp, libavogadro/src/engines/axesengine.h: Added an axes engine - draws the x, y and z axes in the bottom left of the GLWidget. Added new transformedAxis() functions for x, y and z to the camera class. Thanks to Benoit for his help in figuring this one out - still need to add drawing of axis labels. 2007-06-11 Marcus D. Hanwell * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui, libavogadro/src/engines/stickengine.cpp: Added support for bond labels too. They are not drawn for engines that do not draw bonds or the wireframe engine - they both return a zero bond radius. Also updated the engines that needed it to return the radius of their bonds. * libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/spheresettingswidget.ui: A few small optimisations of the OpenGL code and the settings widget. * libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/spheresettingswidget.ui: Extend the VdW sphere engine for transparent rendering of the VdW spheres and draw a ball and stick structure inside if the VdW spheres are transparent. Added setAlpha function to the Color class to accomplish this. 2007-06-05 Donald Ephraim Curtis * avogadro/src/engineconfigurationwidget.ui, avogadro/src/enginetabwidget.cpp, avogadro/src/enginetabwidget.h, avogadro/src/mainwindow.cpp: Minor class refactoring / cleanup 2007-06-01 Geoffrey Hutchison * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/periodictabledialog.cpp: Update draw tool to update periodic table when visible. (e.g., if element is picked from menu, table will update correctly). * libavogadro/src/tools/periodictabledialog.cpp, libavogadro/src/tools/periodictabledialog.h, libavogadro/src/tools/periodictabledialog.ui: Make the periodic table more like a palette -- no "ok" or "cancel" buttons -- can leave it open on the screen while changing elements. * libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/periodictabledialog.cpp, libavogadro/src/tools/periodictabledialog.h: Add periodic table which actually sets elements! (What a concept.) * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/periodictabledialog.ui: Minor periodic table fixes 2007-05-31 Geoffrey Hutchison * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/periodicTable.ui, libavogadro/src/tools/periodictabledialog.cpp, libavogadro/src/tools/periodictabledialog.h, libavogadro/src/tools/periodictabledialog.ui: Added slim periodic table widget to draw tool, but does not yet set custom elements. 2007-05-26 Marcus D. Hanwell * AUTHORS, ChangeLog, authors.xml, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h: Updated my details in the author files. Added bond selection support to the stick engine, small clean ups in bsdyengine and sphereengine. * ChangeLog, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/tools/selectrotatetool.cpp: Fix a bug where the 0 indexed bond is not selectable. * ChangeLog, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp: Use left mouse button for rotation and right mouse button for translation. 2007-05-25 Geoffrey Hutchison * ChangeLog, avogadro/src/extension.h, avogadro/src/extensions/ghemicalextension.h, avogadro/src/mainwindow.cpp: * avogadro/src/extension.h, avogadro/src/mainwindow.cpp: Add Extension::menuPath() which defines menus and submenus for extensions. Default is to use "&Tools" -- existing Tools menu. * avogadro/src/extensions/ghemicalextension.h: Use above for a "Molecular Mechanics" submenu for all actions. 2007-05-25 Marcus D. Hanwell * ChangeLog, libavogadro/src/tools/selectrotatetool.cpp: Extended code to support bond selection for selection boxes too. * ChangeLog, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/global.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Added some initial bond selection support in bsdyengine, refactored the engine a little. Added some support to selectrotatetool to pick bonds and some extra checks in manipulatetool as it previously assumed all selected items were atoms. Also added SEL_BOND_EXTRA_RADIUS for rendering selected bonds. 2007-05-25 Geoffrey Hutchison * ChangeLog, avogadro/src/application.cpp, avogadro/src/mainwindow.cpp: * avogadro/src/application.cpp: Fix bug 1717423 -- Mac interface fix for opening files from Finder. * avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/smartsextension.h: Remove undo/redo support for selection extensions. Selections are handled by views, which are volatile. There's no way to reliably undo a selection and people probably don't care. 2007-05-24 Geoffrey Hutchison * ChangeLog, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: * avogadro/src/mainwindow.*: Mac interface fixes. Duplicate menu and toolbar actions for new, open, save, close, quit. Remove icons from menu items. Fix bug 1720872: don't close the last MainWindow, hide it and disable menu items. Restore upon open or new. 2007-05-23 Donald Ephraim Curtis * ChangeLog, avogadro/src/editcommands.cpp, avogadro/src/engineconfigurationwidget.ui, avogadro/src/engineitemmodel.cpp, avogadro/src/enginetabwidget.cpp, avogadro/src/enginetabwidget.h, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessinputdialog.cpp, avogadro/src/extensions/smartsextension.cpp, avogadro/src/flattabwidget.cpp, avogadro/src/mainwindow.cpp, avogadro/src/settingsdialog.cpp, libavogadro/src/color.cpp, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: * libavogadro/src/glwidget.*: Did a bunch of API cleanup. I know i know. How you guys loath my long function names. Moved from ::selection to ::selectedPrimitives. Now have ::setSelected and ::isSelect. Thanks KDevelop for nice refactoring. This naming method follows more of the Qt style "view" naming conventions (ie ::selectedItems). * .: Fixed a few compiler warnings. 2007-05-23 Geoffrey Hutchison * avogadro/src/CMakeLists.txt, avogadro/src/extension.h, avogadro/src/extensions/gamessinputdata.cpp, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/smartsextension.cpp, avogadro/src/mainwindow.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/selectrotatetool.cpp: Fix selection to use new PrimitiveList. The selectrotate tool still needs some updating to properly handle non-atom selections and hits. Eliminate duplicate GLWidget::selection() and selectedItems() calls. 2007-05-23 Benoit Jacob * libavogadro/src/color.cpp, libavogadro/src/glwidget.cpp: Fine-tune materials and light: The black background suggests that we're in deep space, so there's no wall around to reflect the light, so the "ambient" component of the light is lowered (0.4 -> 0.2). To sharpen this effect, the "ambient" component of materials is also lowered (1/2 -> 1/3). Another change is that the "diffuse" light is increased to 1.0 (from 0.8) so that the effective color is as saturated as the color given by openbabel for the atom. There was no good reason not to set it to 1.0 and it's also visually more beautiful. 2007-05-22 Donald Ephraim Curtis * ChangeLog, avogadro/ChangeLog, avogadro/src/CMakeLists.txt, avogadro/src/avogadro.qrc, avogadro/src/engineconfigurationwidget.ui, avogadro/src/enginetabwidget.cpp, avogadro/src/enginetabwidget.h, avogadro/src/extensions/smartsextension.cpp, avogadro/src/icons/edit_add.png, avogadro/src/icons/edit_remove.png, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui, avogadro/src/primitivetreeview.cpp, avogadro/src/primitivetreeview.h, libavogadro/include/avogadro/primitiveitemmodel.h, libavogadro/src/CMakeLists.txt, libavogadro/src/engine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitiveitemmodel.cpp, libavogadro/src/primitiveitemmodel.h, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: * avogadro/src/enginetabwidget.*: Now uses a .ui file to design the widget. this is much easier. * avogadro/src/primitivetreeview.*: Added the PrimitiveTreeView class as a helper class for displaying PrimitiveItemModels. Just looks a bit prettier. * libavogadro/src/primitivelist.*: Added the ::contains(Primitive *) operator for checking if a primitive is already in the list. * .: Lots of other stuff for doing selective rendering. 2007-05-22 Geoffrey Hutchison * ChangeLog, avogadro/src/mainwindow.cpp: * avogadro/src/mainwindow.cpp: Fix bug 1722691. Show preferences in the correct spot on Mac. 2007-05-22 Benoit Jacob * libavogadro/src/camera.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: improvement in drawtool: when creating an atom by dragging from an existing atom, the newly created atom is placed and moved within the plane passing through the existing atom, and parallel to the window. This feels more intuitive than the former behavior, where the new atom was placed and moved within the plane passing through the molecule center. Also fix a comment in camera.cpp. 2007-05-22 Marcus D. Hanwell * libavogadro/src/tools/manipulatetool.h, libavogadro/src/tools/navigatetool.h: Small clean up in variable initialisation order. 2007-05-21 Marcus D. Hanwell * libavogadro/src/engines/stickengine.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Some more code clean ups. Deleted old code and fixed some compiler warnings. * libavogadro/src/engine.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/painter.cpp, libavogadro/src/tool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp: Various small clean ups for compiler warnings - unused variables etc. 2007-05-21 Donald Ephraim Curtis * ChangeLog, libavogadro/include/avogadro/primitivelist.h, libavogadro/src/CMakeLists.txt, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/primitivelist.cpp, libavogadro/src/primitivelist.h: Refactored PrimitiveQueue -> PrimitiveList. Within the class renamed ::primitiveQueue to ::subList which returns a subList based on type. Fixed changes due to refactoring in various files. * ChangeLog, avogadro/src/enginelistview.cpp, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/primitive.h: * libavogadro/src/primitive.h: Fixed compiler warnings. * libavogadro/src/glwidget.cpp: Fixed compiler warnings. * libavogadro/src/color.cpp: Added virtual deconstructor and reformatted. * libavogadro/src/engines/bsdyengine.cpp: Fixed compiler warnings. * avogadro/src/enginelistview.cpp: Cleaned commented code and fixed bug caused by previous approach. 2007-05-21 Marcus D. Hanwell * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/labelsettingswidget.ui: Added confguration for label settings. Can now display atom number as before, element symbol or element name. 2007-05-21 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html: Update the krazy issues 2007-05-21 Benoit Jacob * libavogadro/src/textrenderer.cpp, libavogadro/src/textrenderer.h: Merge TextRenderer improvements made in the Kalzium branch: -- simplifications -- 3D-text is now centered around the specified position. This makes the atom labels look better, especially the longer ones (like full element names). 2D text (as in debugengine) is left unchanged. 2007-05-20 Carsten Niehaus * libavogadro/src/camera.cpp, libavogadro/src/color.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/painter.cpp: Silence Krazy: We can #include because of the way CMake works. 2007-05-20 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/elementcombobox.cpp, avogadro/src/elementcombobox.h, avogadro/src/engineitemmodel.cpp, avogadro/src/engineitemmodel.h, avogadro/src/enginelistview.cpp, avogadro/src/enginelistview.h, avogadro/src/enginetabwidget.cpp, avogadro/src/enginetabwidget.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/tools/manipulatetool.cpp: Added a item model for managing engines for a GLWidget. This will make it easier whenw e need to add / remove / edit engines. Updated the engine interface for name and description. Added new configuration widget layout. Now there is a dock widget for for configuring an engines, this includes engine settings plus *eventually* the primitives that are rendered by an engine. Created the EngineTabWidget that will display the configuration for a GLWidget (one engine at a time). It is possible that it should be called a GLWidgetStackedWidget but it does some weird stuff to save GUI memory. The tab for settings is a stack, but when we add a tab for editing primitive, this will be a single widget for all engines. 2007-05-18 Tim Vandermeersch * ChangeLog, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/forcefielddialog.cpp, avogadro/src/extensions/forcefielddialog.h, avogadro/src/extensions/forcefielddialog.ui, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h: Added Setup Force Field dialog, Calculate Energy and Rotor Search 2007-05-18 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/settingsdialog.cpp, avogadro/src/settingsdialog.h, avogadro/src/settingsdialog.ui, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/global.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/textrenderer.cpp, libavogadro/src/textrenderer.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/navigatetool.cpp: Added a settings dialog. Updated the painter class to use ::begin ::end all the time. This is good but needs to be better. It needs to check to make sure it's in the correct context, if a painter is used in more than one context it should probably at least give a warning. Can lead to data corruption. (check email to list) Updated engines to use the new painter class. 2007-05-18 Carsten Niehaus * krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html, krazy/libavogadro.html: Updates of the html files * krazy/libavo-src.html, krazy/libavogadro-src-engines.html, krazy/libavogadro-src-tools.html, krazy/libavogadro-src.html: some new files * avogadro/src/extensions/issues.html, avogadro/src/issues.html, krazy/avogadro-src-extensions.html, krazy/avogadro-src.html, krazy/libavo-src.html: They files should go in one directory * libavogadro/src/moleculetreeview.cpp, testfiles/2-aminoethanol.cml, testfiles/2-thioethanol.cml, testfiles/2_2_2-trifluoroethanol.cml, testfiles/COPYING, testfiles/but-2-yne-1_4-diol.cml, testfiles/butane.cml, testfiles/ethane-1_2-diol.cml, testfiles/ethane.cml, testfiles/ethanol.cml, testfiles/methane.cml, testfiles/methanol.cml, testfiles/porphyrin.cml, testfiles/propan-1-ol.cml, testfiles/propan-2-ol.cml, testfiles/propane.cml, testfiles/thiophene.cml: Adding a couple of deme/test molecules 2007-05-18 Benoit Jacob * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: this slot is needed in Kalzium, and it's needed anyway. 2007-05-18 Carsten Niehaus * libavogadro/src/engine.h, libavogadro/src/primitive.h, libavogadro/src/tool.h, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.h: Ok, doing funny ";" fixes. GCC 4.3 is issuing a million warning it seems and Stephan Binner is fixing them in Kalziums copy of avogadro. I am forward porting all fixes now so that they are not lost! Example: -Q_DECLARE_INTERFACE(Avogadro::ToolFactory, "net.sourceforge.avogadro.toolfactory/1.0"); +Q_DECLARE_INTERFACE(Avogadro::ToolFactory, "net.sourceforge.avogadro.toolfactory/1.0") * libavogadro/src/camera.h, libavogadro/src/moleculetreeview.h, libavogadro/src/primitive.h, libavogadro/src/tool.cpp: Several EBN fixes: explit ctors newer compare a QString to == "" but use ".isEmpty" * libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h: Fixing a couple of EBN issues. Benoit ack'ed the explicit patch * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tool.h, libavogadro/src/tools/manipulatetool.cpp: Fix several typos found by ex.html 2007-05-17 Donald Ephraim Curtis * AUTHORS, CMakeLists.txt, COPYING, ChangeLog, INSTALL, authors.xml, avogadro/src/extensions/CMakeLists.txt, cmake/modules/cmake_uninstall.cmake.in, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/tools/CMakeLists.txt: Merged all changes from tag loschmidt/0.1.0. Final merge. (r407, r409, r410, r411, r412, r413) 2007-05-15 Donald Ephraim Curtis * libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp: Fix for issue 1719080 * avogadro.nsi, avogadro/src/CMakeLists.txt, avogadro/src/application.cpp, avogadro/src/extension.h, avogadro/src/extensions/gamessextension.h, avogadro/src/icons/avogadro.ico, avogadro/src/mainwindow.cpp, avogadro/src/windows/avogadro.rc, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/primitive.cpp, libavogadro/src/tool.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/undosequence.h: Merging changes from 0.1.0 tag; r400, r401, r402, r403, r404 2007-05-14 Benoit Jacob * libavogadro/src/glwidget.h, libavogadro/src/painter.h: Clarify/add documentation; remove my copyright from glwidget.h because really I only edited a few lines in it. * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: add documentation and internal comments for Painter class rename Camera::backTransformed* to Camera::backtransformed*, add documentation, make a bit more use of them in labelengine. clarify tooltip of manipulatetool 2007-05-13 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Few UI bugs and removed debugging line that was unneeded. 2007-05-12 Marcus D. Hanwell * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added function to easily determine if a Primitive is selected in the GLWidget. Modified the toggleSelected function to behave as expected with multiple views. Found and fixed a subtle crash in the engines when radius was called before render and ported all engines to render correctly with multiple views. 2007-05-12 Geoffrey Hutchison * avogadro/src/CMakeLists.txt, avogadro/src/extension.cpp, avogadro/src/extension.h, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h, avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/smartsextension.h: Extension cleanup. Base Extension class is not QObject, but extensions are. * avogadro/src/extension.h, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h, avogadro/src/extensions/smartsextension.cpp, avogadro/src/extensions/smartsextension.h, avogadro/src/mainwindow.cpp: Pass a GLWidget to extensions (so selection can be modified, auto-rotate, etc.) Add example SMARTS selection extension -- select atoms by SMARTS pattern. 2007-05-12 Donald Ephraim Curtis * CMakeLists.txt, Doxyfile, Doxyfileext, avogadro/src/extension.h, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/CMakeLists.txt, libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/global.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/internal/cylinder.cpp, libavogadro/src/internal/cylinder.h, libavogadro/src/internal/sphere.cpp, libavogadro/src/internal/sphere.h, libavogadro/src/internal/textrenderer.cpp, libavogadro/src/internal/textrenderer.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h, libavogadro/src/textrenderer.cpp, libavogadro/src/textrenderer.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h, libavogadro/src/undosequence.cpp, libavogadro/src/undosequence.h: Updated documentation. Removed dependancy on 4.3 (make sure you do editing of .ui files with designer of qt4.2) Added documentation. Updated copyright information on all files. There is now a Doxyfileext which generates external docs. 2007-05-12 Marcus D. Hanwell * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/tools/manipulatetool.cpp: Fix inconsistencies between what is drawn and what the manipulate tool does when using multiple views. The other engines still need their behaviour to be fixed. 2007-05-12 Benoit Jacob * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Minor API improvements; make use of these at various places; close bug 1717437 in clickmeasuretool. * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/internal/textrenderer.cpp: fix bug in dynamic-bs where the separation between the two colors of a bond was not made at the middle of the bond. Also don't draw the portion of the bond that's inside the sphere. 2007-05-12 Marcus D. Hanwell * libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Fix a bug with atoms selected using the selection box. Performed some clean up in the selectrotatetool code. 2007-05-12 Geoffrey Hutchison * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Add support for setting the number of unit cells to display. Not exposed in the user interface, but it's now in the library. Just need to build the window for the extension (after this beta release). * libavogadro/src/tools/manipulate.png, libavogadro/src/tools/manipulate.qrc, libavogadro/src/tools/manipulatetool.cpp: Add "hand" icon for manipulate tool. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Add "select all" and "select none" edit menu actions. 2007-05-11 Marcus D. Hanwell * libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Added some shortcut keys for the tools. These may not be optimal and probably need further discussion. Also added the drawing of the selection centroid sphere for the manipulate tool. 2007-05-11 Geoffrey Hutchison * avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Support for cut/copy of just selected atoms. 2007-05-11 Marcus D. Hanwell * libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h: Adapted the methods implemented by Geoff in the selectrotatetool source. Now translation (LMB) and rotation (RMB) of selected atoms works. Currently uses the selection list maintained by GLWidget. 2007-05-11 Geoffrey Hutchison * avogadro/src/application.cpp, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Improve behavior when opening files while launching on Mac. 2007-05-11 Marcus D. Hanwell * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/manipulate.qrc, libavogadro/src/tools/manipulatetool.cpp, libavogadro/src/tools/manipulatetool.h: Initial version of the manipulation tool. Currently only operates on single atoms. Currently the left mouse button translates the atom position in x and y. The middle mouse button moves the atom into and out of the screen (zoom). This tool needs its own icon. 2007-05-11 Geoffrey Hutchison * avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Add initial cut support, as well as undo/redo for clear. 2007-05-11 Donald Ephraim Curtis * Doxyfile, libavogadro/src/CMakeLists.txt, libavogadro/src/internal/sphere.h: Updated indenting in CMakeLists.txt, corrected some comments in sphere.h, updated Doxygen configuration. 2007-05-10 Benoit Jacob * libavogadro/src/global.h, libavogadro/src/glwidget.cpp: remove some useless OpenGL commands. Make sure GL_TEXTURE_RECTANGLE_ARB is defined. * libavogadro/src/internal/textrenderer.cpp, libavogadro/src/internal/textrenderer.h: some cleanup in TextRenderer 2007-05-10 Geoffrey Hutchison * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h: Remove old bsengine code 2007-05-10 Benoit Jacob * libavogadro/src/camera.cpp, libavogadro/src/camera.h: add method needed by cryos (and needed anyway): Camera::backTransformedZAxis() 2007-05-10 Geoffrey Hutchison * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Add some initial support for "selection modes" and tracking selected atoms (in the GLWidget). Probably needs some work. 2007-05-09 Benoit Jacob * libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.h: remove outdated #include that were breaking compilation. Sorry rbraith :) * avogadro/CMakeLists.txt, avogadro/src/CMakeLists.txt, libavogadro/CMakeLists.txt, libavogadro/include/avogadro/cylinder.h, libavogadro/include/avogadro/sphere.h, libavogadro/include/avogadro/textrenderer.h, libavogadro/src/CMakeLists.txt, libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/internal/cylinder.cpp, libavogadro/src/internal/cylinder.h, libavogadro/src/internal/sphere.cpp, libavogadro/src/internal/sphere.h, libavogadro/src/internal/textrenderer.cpp, libavogadro/src/internal/textrenderer.h, libavogadro/src/painter.cpp, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h, libavogadro/src/textrenderer.cpp, libavogadro/src/textrenderer.h: Move the Sphere, Cylinder and TextRenderer to a internal/ subdirectory, don't expose them publicly. These classes are only used by the Painter class. Also replace tabs with 2 spaces in the CMakeLists.txt files, to be consistent with the indenting style of the source code. * libavogadro/src/sphere.cpp, libavogadro/src/textrenderer.cpp, libavogadro/src/textrenderer.h: In TextRenderer: quality improvements, API changes, indentation fixing, and most importantly, documentation (both API and internal code comments). Also fix indentation in Sphere. 2007-05-08 Benoit Jacob * avogadro/src/mainwindow.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/painter.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: In GLWidget, make the Camera live as a pointer and let GLWidget::camera() return this pointer instead of a reference. Adapt the rest of the code to that change. 2007-05-08 Geoffrey Hutchison * libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Added improved "manipulate" rotate thanks to Benoit. Shift + left mouse. Much cleaner rotation. 2007-05-07 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/application.cpp, avogadro/src/application.h, avogadro/src/extension.cpp, avogadro/src/extension.h, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Update Extensions to separate instances per MainWindow. Added true SDI functionality. For more info see l This should fix our Mac errors. 2007-05-07 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/primitive.cpp: Copy/paste now prefers MDL molfile mimetype (ensures bond orders, etc. copied) Paste will now select atoms pasted for automatic manipulation. * libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Initial "manipulate mode" for select tool. Hold down the shift key: left button rotates (needs work) right translates 2007-05-07 Donald Ephraim Curtis * avogadro/src/enginelistview.cpp, avogadro/src/enginelistview.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsdysettingswidget.ui, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitive.cpp, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Added the settings dialogs to Engines. Modified the preexisting toolSettings interface to return a 0 if there is no settings available for the tool. This is done to mimic the engines settings interface and it is done in the engines settings so that we know if we should create a new window or not. It is better than testing against null QWidgets or whatever the alternative would be. Also added GLWidget::setStable(bool) and GLWidget::isStable() to see if the GLWidget is in an unstable state. This would occur as the result of some tool setting it. 2007-05-07 Benoit Jacob * libavogadro/src/global.h, libavogadro/src/tools/clickmeasuretool.cpp: Fix compile error (extra closing parenthesis -- sorry!) Tweak detail level of spheres. * libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/global.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: rework class Cylinder; make Painter able to draw Cylinders; make use of that in all engines; also change Tools so they no longer have their own Cylinders/Spheres and use Painter instead. 2007-05-07 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.ui: Minor fixes. Remove "select all" (not ready) and fudge "cut" with current copy() code. * avogadro/src/CMakeLists.txt, avogadro/src/editcommands.cpp, avogadro/src/editcommands.h, avogadro/src/enginelistview.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui: Add initial support for copy commands (includes copy to text, image, chemical/x-xyz). Still needs work tomorrow. 2007-05-06 Benoit Jacob * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/global.h, libavogadro/src/painter.cpp: make use of Painter to draw spheres in all engines. Introduce SEL_ATOM_EXTRA_RADIUS constant to control the radius of selection highlighting spheres (added to the atom's radius). * libavogadro/include/avogadro/painter.h, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/global.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/painter.cpp, libavogadro/src/painter.h: Introduce Painter class and global quality setting. Currently it can only paint spheres. Make bsdyengine use it. * libavogadro/src/sphere.cpp, libavogadro/src/sphere.h: implement level 0 as a octahedron, d-pointerify, and many simplifications * libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h: Fix typo in Ross's name. Sorry! 2007-05-06 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h: Added operator+= and copy constructor to the Molecule class. Added pasting operation. Currently only works with cartesian coordinates. It is setup to work with Mime data but i pick the default text case (assumed to be cartesian coordinates). 2007-05-05 Geoffrey Hutchison * libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/glwidget.cpp: Add hooks for options dialog for engines. 2007-05-05 Benoit Jacob * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/global.h, libavogadro/src/glwidget.cpp: Draw outlined text in labelengine, for readibility on all backgrounds. Had to change the depthFunc from GL_LESS to GL_LEQUAL. Hope that doesn't break anything. This is very slow so I propose that text should be hidden while moving the camera with the mouse, to get smoother movement. That suggests the following: in Engine, we could have renderOpaque, renderTransparent and renderText. What do you think? Tools would inform the GLWidget that they are moving the view using callbacks GLWidget::beginMoveCamera() and GLWidget::endMoveCamera(). 2007-05-04 Geoffrey Hutchison * libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h: Fix compile problems with radius() function * libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp: Add support for classes of color maps (subclasses of Color). This includes setting a color map for any engine. (e.g., color by element, color by atom type, color by reside...) 2007-05-04 Benoit Jacob * libavogadro/src/engines/labelengine.cpp, libavogadro/src/global.h: fix position of label in the labelengine (now the label is always placed on top of the atom, from the camera's point of view) however there remains an issue caused by the fact that we still don't make sure all opaque objects have been drawn *before* transparent objects are drawn. 2007-05-04 Marcus D. Hanwell * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Removed d-pointer stuff as it is not required for tools - see mailing list. * libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h: Improved the label engine to use the radius method an so labels can be seen using the sphere engine now. Still needs work on label placement. * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Updated visual effects in NaviateTool to cover all atom centred operations. After discussion with Benoit added d-pointer to NavigateTool too. 2007-05-04 Benoit Jacob * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: fix #including in tools and engines. In particular, don't include the meta-header when the much smaller is enough. Also fix comment in debugengine. * libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h: fix copyright lines in debug engine 2007-05-04 Carsten Niehaus * CMakeLists.txt, avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: -- I moved the FindFoo instructions in the toplevel CMakeLists.txt. I see no reason why we should check for it twice... -- We now officially require Qt 4.2.0 (set(QT_MIN_VERSION)). Benoit told me that 4.1 is totally broken wrt to something in QtGl and all developers are using 4.2 anyway. Before we we just looking for "Qt4" which would even have worked for 4.0-beta I think! * INSTALL, avogadro/INSTALL: Update the installation instructions 2007-05-04 Benoit Jacob * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: remove _setup : Sphere::setup is clever enough to notice that new_detail==old_detail and exit in that case. remove some unnecessary state changes. Donald: it is possible to draw spheres with GL_NORMALIZE, only it's not optimally fast. But if we're only drawing one sphere, it's not worth the four state changes enabling GL_RESCALE_NORMAL instead. * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/engines/stickengine.cpp, libavogadro/src/global.h: replace #defines with constants in global.h remove a qDebug and other negligible cleanup 2007-05-04 Donald Ephraim Curtis * libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Updated Tool interface. Now there is a ::paint function which gets called after the engines render allowing Tools a better way to render to the GLWidget (as opposed to using a displayList). I updated the NavigateTool and ClickMeasure tool (it now shows proper colors). Also added the ::radius function to the dynamic ball and stick engine. As a note if an atom is selected, radius(Primitive *) needs to reflect that. 2007-05-03 Ross Braithwaite * libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Made the changes that Benoit recommended, code in the glwidget was removed and new code was put into the debug engine. When the debug engine is turned on now it repeatedly calles gl->update() thereby makeing the glwidget constantly re-render. This gives FPS a reasonably accurate value. 2007-05-03 Marcus D. Hanwell * libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h: Added radius function to Engine, ported bsengine and sphereengine to use the new function. 2007-05-03 Donald Ephraim Curtis * avogadro/src/avogadro.qrc, avogadro/src/icons/navigate.png, avogadro/src/icons/navigateN.png, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, gpltemplate, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/navigate.png, libavogadro/src/tools/navigate.qrc, libavogadro/src/tools/navigatetool.cpp: Added template for licensing. Added navigate icon taken from the crystal clear office set. Added "Center View" action. There are times things are not updateing the glwidget's geometry info. we need to fix this so that things are required to call it. there is a callback from primitiveAdded / primitiveUpdate / primitiveRemoved that should be sufficient to set a flag that the geometry data needs to be updated. I'll look at this more tomorrow, tomorrow, i'll love ya, tomorrow, you're only a day away. * avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/gamess.cpp, avogadro/src/extensions/gamess.h, avogadro/src/extensions/gamessextension.cpp, avogadro/src/extensions/gamessextension.h, avogadro/src/extensions/ghemical.cpp, avogadro/src/extensions/ghemical.h, avogadro/src/extensions/ghemicalextension.cpp, avogadro/src/extensions/ghemicalextension.h, avogadro/src/extensions/hydrogens.cpp, avogadro/src/extensions/hydrogens.h, avogadro/src/extensions/hydrogensextension.cpp, avogadro/src/extensions/hydrogensextension.h: Refactored classes so that extensions are named *Extension (GamessExtension, etc etc) Renamed source files accordingly. * avogadro/src/application.cpp, avogadro/src/enginelistview.cpp, avogadro/src/extension.h, avogadro/src/extensions/gamess.cpp, avogadro/src/extensions/gamess.h, avogadro/src/extensions/ghemical.cpp, avogadro/src/extensions/ghemical.h, avogadro/src/extensions/hydrogens.cpp, avogadro/src/extensions/hydrogens.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/include/avogadro/undosequence.h, libavogadro/src/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/drawcommand.cpp, libavogadro/src/tools/drawcommand.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h, libavogadro/src/undosequence.cpp, libavogadro/src/undosequence.h: ****Big Huge Changes**** Undo/Redo is implemented and all of the extensions and tools have been updated. The interface to tools and extensions now requires that you return a QUndoCommand* or 0 (NULL). The only important things to remember when creating QUndoCommands is to make sure that the state after undo is exactly how it was before you performed your action. Worst case you need to duplicate all the Molecule data. This is somewhat intense but it runs quite quickly as there are no calls to NewAtom meaning no callbacks. There is a new class UndoSequence which is essentially a list of QUndoCommands which are all compiled into one. This is handy for our drawing tool. I apologize as i haven't had time to document any of this code. 2007-05-02 Donald Ephraim Curtis * avogadro/src/elementcombobox.h, avogadro/src/extension.h, avogadro/src/extensions/gamess.cpp, avogadro/src/extensions/gamessinputdata.h, avogadro/src/extensions/ghemical.cpp, avogadro/src/extensions/hydrogens.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/include/avogadro/primitive.h, libavogadro/include/avogadro/primitives.h, libavogadro/src/CMakeLists.txt, libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.h, libavogadro/src/primitive.cpp, libavogadro/src/primitive.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: primtives.h was defining the Primitive class. Minor refactoring that was buggin me. *sigh*. * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/debugengine.cpp, libavogadro/src/engines/debugengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added new Debug Engine which lists the number of atoms and molcules along with the FPS. Contributed by James, Ross and Shahzad. I modified to only perform one division. As a result there are some added hooks to GLWidget to keep track of time to render a scene. Hopefully we can say this is trivial. 2007-05-02 Geoffrey Hutchison * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/stickengine.cpp, libavogadro/src/engines/stickengine.h: Added stick engine 2007-05-01 Donald Ephraim Curtis * avogadro/CMakeLists.txt, avogadro/config.h.in, avogadro/src/CMakeLists.txt, avogadro/src/config.h.in, avogadro/src/extensions/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/CMakeLists.txt, libavogadro/config.h.in, libavogadro/src/CMakeLists.txt, libavogadro/src/config.h.in, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/CMakeLists.txt: tools, engines, extensions are now installed and loaded by default to their correct locations: ${CMAKE_INSTALL_PREFIX}/lib/avogadro/{tools|engines|extensions} added the define INSTALL_PREFIX to the CMAKE_INSTALL_PREFIX path. this does not get installed with the other header files. modified the environment variables: AVOGADRO_{ENGINES|TOOLS|EXTENSIONS} AVOAGDOR_EXTENSIONS was previously AVOGADRO_PLUGINS 2007-05-01 Geoffrey Hutchison * libavogadro/src/engines/ResidueSphereEngine.cpp, libavogadro/src/engines/ResidueSphereEngine.h, libavogadro/src/engines/StickEngine.cpp, libavogadro/src/engines/StickEngine.h, libavogadro/src/engines/WireframeEngine.cpp, libavogadro/src/engines/WireframeEngine.h: Remove old engines to allow updated stick engine. * libavogadro/src/engines/SphereEngine.cpp, libavogadro/src/engines/SphereEngine.h, libavogadro/src/engines/sphereengine.cpp, libavogadro/src/engines/sphereengine.h: Remove old SphereEngine code -- conflicts on capitalization-sensitive file systems. Clean up class names, etc. in new sphere engine. 2007-04-29 Benoit Jacob * libavogadro/src/cylinder.cpp, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h: Fix errors (not leaks) found by valgrind: "Conditional jump or move depends on uninitialised value(s)" 2007-04-27 Benoit Jacob * libavogadro/src/global.h, libavogadro/src/glwidget.cpp, libavogadro/src/tools/navigatetool.cpp: add another missing {} after a one-line if in my code :) simplification in navigatetool more clever handling of the selection buffer. Instead of resizing at molecule loading (as done before), resize in GLWidget::hits(). To prevent too frequent resizing, add some margin to the buffer size. The advantages are: -- new approach never fails, the user may add as many atoms as he likes (like when doing "add hydrogens"). -- old approach required a large margin in order to let user add atoms; this is no longer needed. Old margin was 256*8=2048 ints. New margin is 128 ints only. 2007-04-26 Donald Ephraim Curtis * libavogadro/src/glwidget.cpp, libavogadro/src/tools/clickmeasuretool.cpp: Added check for correct hit type (AtomType) 2007-04-26 Benoit Jacob * libavogadro/src/global.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: -- introduce defines in global.h for the size of the small selection boxes used in tools. The former size, 5x5, was too small in wireframe mode (selection-wise, the atoms were single pixels regardless of the "point size"). We now use 9x9 boxes. -- cleanup in drawtool * libavogadro/src/cylinder.cpp, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/sphere.cpp: minor cleanup in bsdyengine; only toggle client state inside Sphere and Cylinder, since it's not needed elsewhere. * libavogadro/src/camera.cpp, libavogadro/src/tools/navigatetool.cpp: simplification in Camera::normalize(), remove qDebug() * avogadro/ChangeLog, avogadro/src/enginelistview.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/tools/navigatetool.cpp: complete the updateGL() -> update() move * avogadro/src/enginelistview.cpp, libavogadro/src/engine.cpp: start with only dynbs engine enabled. That's pretty much a hack as I don't really understand how avogadro (the app) works. So I did it in enginelistview. Sorry if that's not the right place. CCMAIL:Donald Ephraim Curtis * libavogadro/src/global.h, libavogadro/src/glwidget.cpp: dynamically resize the selection buffer at molecule loading, to adapt to any number of atoms. At mol loading, a margin is added in case the user creates new atoms (current margin is for 256 new atoms). * libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/selectrotatetool.cpp: updateGL() -> update() * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/global.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Hey, the Navigate Tool now feels very solid, even when cruising through very large proteins!! -simplifications and improvements in Camera wrt clipping planes -reorganization in NavigateTool: -- move much code to helper functions -- fix at last the problem with zoom-in passing beyond the goal -- swap left and right buttons -- use a member glwidget pointer to reduce argument-passing. the pointer is obtained from the mouse callbacks. - move numeric constants to #defines in global.h 2007-04-25 Benoit Jacob * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: have the camera auto-normalize after each rotation. no need to explicitly normalize anymore. * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: Now mouse wheel is also sensitive to the atom below mouse pointer. * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/selectrotatetool.cpp: Solve a numerical instability issue : after a large number of rotations, the camera matrix got more and more corrupt, eventually resulting in a blank GLwidget. Solved by adding method Camera::normalizeRotation(), to be called after each frequent rotation (typically in user input handling). Already used in navigatetool and selectrotatetool. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tools/navigatetool.cpp: much improved right-button movement in navigatetool. Now the molecule precisely follows the mouse movement. This required further tweaking of the unProject API. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: change prototype of unProject(double, double) to unProject(const QPoint&). This simplifies some code since this method is always being called on QPoint coordinates. * libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h: Rework API and documentataion for project/unproject, const-correctify, make use of class Vector3d. Move to GLWidget the special unproject method from DrawTool taking only x and y coords and unprojecting to the plane of the mol center parallel to the screen. Will be useful in NavigateTool. * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: fixes and simplifications in mid-button zoom. No longer center on atom; instead keep atom center at fixed position on screen. Centering is no longer needed since right-button allows to center manually. Keeping atom at fixed position is also more consistent with left-button rotation. 2007-04-24 Benoit Jacob * libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h: simplifications 2007-04-24 Donald Ephraim Curtis * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/clickmeasure.cpp, libavogadro/src/tools/clickmeasure.h, libavogadro/src/tools/clickmeasuretool.cpp, libavogadro/src/tools/clickmeasuretool.h, libavogadro/src/tools/draw.cpp, libavogadro/src/tools/draw.h, libavogadro/src/tools/drawtool.cpp, libavogadro/src/tools/drawtool.h, libavogadro/src/tools/navigate.cpp, libavogadro/src/tools/navigate.h, libavogadro/src/tools/navigatetool.cpp, libavogadro/src/tools/navigatetool.h, libavogadro/src/tools/selectrotate.cpp, libavogadro/src/tools/selectrotate.h, libavogadro/src/tools/selectrotatetool.cpp, libavogadro/src/tools/selectrotatetool.h: Renamed tool filenames to match their class names. * libavogadro/src/engine.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h, libavogadro/src/tools/clickmeasure.cpp, libavogadro/src/tools/clickmeasure.h, libavogadro/src/tools/draw.cpp, libavogadro/src/tools/draw.h, libavogadro/src/tools/navigate.cpp, libavogadro/src/tools/navigate.h, libavogadro/src/tools/selectrotate.cpp, libavogadro/src/tools/selectrotate.h: Updated Engine interface to recieve the GLWidget as a pointer. This as opposed to using the ::parent() for two reasons: 1) we can duplicate GLWidgets (so that they share engines) 2) we may also want to allow programs using libavogadro to load their own engines and pass them to the GLWidget. Updated Tools so that they are named correctly. ie. DrawTool SelectRotateTool ... This to match the *Engine form with engines. renaming coming soon. 2007-04-23 Donald Ephraim Curtis * avogadro/src/enginelistview.cpp, avogadro/src/enginelistview.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: MainWindow now has functionality to create multiple views. View->New View / View->Close View. GLWidget optimized functionality so that unactive GLContexts to not get rendered. This will need to be updated if/when we allow two views to be shown at once. EngineListView now handles enabling and disabling engines for the current GLWidget. (opposed to MainWindow binding to the signals). 2007-04-23 Benoit Jacob * libavogadro/src/tools/navigate.cpp, libavogadro/src/tools/navigate.h: cleanup and bugfixing in the navigate tool. -- fix molecule-centered rotation when center is not at origin -- don't recompute GL hits at every mouse move * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/labelengine.cpp: Fix camera bug cause by miscalculation of distance to molecule. Fix comment explaining how this is computed. Introduce Camera::distance(Vector&) method performing this computation in the correct way. Make use of this new method in bsdynengine and labelengine, and do cleanup there. Remove method Camera::translationVector(). 2007-04-23 Donald Ephraim Curtis * libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/engine.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Added d-pointer to Cylinder class + formatting updated. Primitive and Molecule now share d-pointer. * avogadro/src/application.cpp, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: new / open now perform correctly; ie, check for modified status (handled by the QMainWindow) and ask to save if changes have been made. also, 'new' simply clears our the editor rather than creating a new window. 2007-04-22 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Updating to qt style d-ptrs. * libavogadro/src/tools/clickmeasure.cpp, libavogadro/src/tools/clickmeasure.h, libavogadro/src/tools/draw.cpp, libavogadro/src/tools/draw.h: more updates based off the new tool interface. * libavogadro/src/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/tool.cpp, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/clickmeasure.cpp, libavogadro/src/tools/clickmeasure.h, libavogadro/src/tools/draw.cpp, libavogadro/src/tools/draw.h, libavogadro/src/tools/navigate.cpp, libavogadro/src/tools/navigate.h, libavogadro/src/tools/selectrotate.cpp, libavogadro/src/tools/selectrotate.h: libavogadro/src/tool.h,libavogadro/src/tool.cpp; updated interface. removed ::initialize() and ::cleanup() functions. Unneeded. If plugins need to use these functions they can attach functions to the signals of the ::activateAction(). libavogadro/src/toolgroup.cpp; we can now use Tool::parent() to get the plugin which it belongs to, rather than relying on the Tool::data() to do the same. libavogadro/src/CMakeLists.txt; added the tool.cpp file so that the tool object gets compiled into libavogadro. libavogadro/src/glwidget.cpp; tool interface was updated. Updated interface to all tools. 2007-04-20 Geoffrey Hutchison * libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/select.png, libavogadro/src/tools/select.qrc, libavogadro/src/tools/selectrotate.cpp: Add pointer icon for selectrotate tool 2007-04-20 Donald Ephraim Curtis * libavogadro/src/tools/clickmeasure.cpp, libavogadro/src/tools/clickmeasure.h, libavogadro/src/tools/draw.cpp, libavogadro/src/tools/draw.h: libavogadro/src/tools/draw.h, libavogadro/src/tools/draw.cpp; updated tooltip to include how the tool works. added code to replace atoms and bonds if they are different. clicking on a lone atom will change it to the new type.. drawing bonds over preexisting bonds updates them. libavogadro/src/tools/clickmeasure.cpp,libavogadro/src/tools/clickmeasure.h; updated tooltip to include how the tool works. renamed the tag so that as you select you get atom 1,2,3 rather than 0,1,2. * libavogadro/src/engines/labelengine.cpp, libavogadro/src/tools/clickmeasure.cpp: libavogadro/src/engines/labelengine.cpp; push all GL attribute bits and use white text. libavogadro/src/tools/clickmeasure.cpp; push all GL attributes, give feedback on initial click (marked with *0) for now. * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tool.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/clickmeasure.cpp, libavogadro/src/tools/clickmeasure.h, libavogadro/src/tools/draw.cpp, libavogadro/src/tools/draw.h, libavogadro/src/tools/selectrotate.cpp: libavogadro/src/glwidget.h libavogadro/src/glwidget.cpp : added unProject and project functions, also fixed the ::hits function so it restore the previous projection and modelview matrices libavogadro/src/engines/bsdyengine.cpp : fixed compiler warning libavogadro/src/tools/selectrotate.cpp : free the display list libavogadro/src/tools/clickmeasure.cpp libavogadro/src/tools/clickmeasure.h : new click to measure tool. Displays results in the GL Widget. libavogadro/src/tools/CMakeLists.txt : added clickmeasure build instructions libavogadro/src/tools/draw.cpp libavogadro/src/tools/draw.h : make use of the new GLWidget::project and GLWidget::unProject functions libavogadro/src/tool.h : renamed ::init to ::initialize. can't be sure we actually need these functions. we have the option to let the tool decide what initialization it needs to do by connection to the action signals. 2007-04-19 Geoffrey Hutchison * libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/glwidget.cpp: Switch to use dynamic_cast instead of qobject_cast * libavogadro/src/color.cpp, libavogadro/src/cylinder.cpp, libavogadro/src/sphere.cpp: Namespace fixes. 2007-04-14 Geoffrey Hutchison * libavogadro/include/avogadro/camera.h, libavogadro/include/avogadro/color.h, libavogadro/include/avogadro/cylinder.h, libavogadro/include/avogadro/engine.h, libavogadro/include/avogadro/global.h, libavogadro/include/avogadro/glwidget.h, libavogadro/include/avogadro/moleculetreeview.h, libavogadro/include/avogadro/primitives.h, libavogadro/include/avogadro/sphere.h, libavogadro/include/avogadro/tool.h, libavogadro/include/avogadro/toolgroup.h: Fix "fake" includes. * libavogadro/include/avogadro/camera.h, libavogadro/include/avogadro/color.h, libavogadro/include/avogadro/cylinder.h, libavogadro/include/avogadro/engine.h, libavogadro/include/avogadro/global.h, libavogadro/include/avogadro/glwidget.h, libavogadro/include/avogadro/moleculetreeview.h, libavogadro/include/avogadro/primitives.h, libavogadro/include/avogadro/sphere.h, libavogadro/include/avogadro/tool.h, libavogadro/include/avogadro/toolgroup.h: Moving headers from src/ to include/avogadro -- two pass job. 2007-04-14 Donald Ephraim Curtis * libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h: added dynamics for bonds. libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h: when detail < 0 we generate a single line rather than a cylinder. Also added constructor with default parameter to 0. 2007-04-13 Donald Ephraim Curtis * libavogadro/src/engine.cpp, libavogadro/src/engine.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsdyengine.cpp, libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/moleculetreeview.cpp, libavogadro/src/primitives.cpp, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h, libavogadro/src/toolgroup.cpp, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/draw.cpp, libavogadro/src/tools/selectrotate.cpp: libavogadro/src/moleculetreeview.cpp: removed debug code libavogadro/src/sphere.cpp: added constructor and cleaned up code libavogadro/src/toolgroup.cpp: removed debug code libavogadro/src/primitives.cpp: removed debug code libavogadro/src/sphere.h: added constructor which takes as a parameter the detail libavogadro/src/engine.h, libavogadro/src/engine.cpp : added interface function to inform the engine to update the primitive. This is a cautionary function for optimization. libavogadro/src/glwidget.cpp: cleaned up the code, added use of new engine function. libavogadro/src/engines/labelengine.cpp: added clause to not label when far from camera libavogadro/src/engines/bsdyengine.h, libavogadro/src/engines/bsdyengine.cpp: proof of concept for optimization of the ball & stick engine. Added this as to not disturb the old code until the new code can be cleaned up. I will get around to this just haven't had the time to think about the best way to do it. libavogadro/src/engines/bsengine.cpp: removed debug code. libavogadro/src/engines/CMakeLists.txt: added bsdyengine libavogadro/src/tools/CMakeLists.txt: commented test tool code. libavogadro/src/tools/selectrotate.cpp: added atom::update call after selection libavogadro/src/tools/draw.cpp: removed debug code 2007-04-09 Geoffrey Hutchison * libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h: Minor reorganization of BS engine to improve performance. (Need to add "options" ability to set level of detail, etc.) * avogadro/src/CMakeLists.txt, avogadro/src/mac/MacOSXBundleInfo.plist.in, avogadro/src/mac/atom.icns, avogadro/src/mac/avogadro.icns: Renamed Mac icon to avogadro.icns 2007-04-03 Donald Ephraim Curtis * avogadro/src/aboutdialog.cpp, avogadro/src/avogadro.qrc, avogadro/src/avogadro.ui, avogadro/src/icons/atom2.png, avogadro/src/icons/avogadro.png, libavogadro/src/tools/CMakeLists.txt: Update logo name to avogadro.png. Lets not get too lazy with naming it's important! atom2.png does not describe what the png is really of. 2007-04-02 Donald Ephraim Curtis * libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/wireengine.cpp, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Updated PrimitiveQueue to allocate statically instead of dynamically. Changed PrimitiveQueue::primitiveList to return a const QList Updated the engines to use "foreach" loops. 2007-04-02 Geoffrey Hutchison * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/wireengine.cpp, libavogadro/src/engines/wireengine.h: Add wireframe engine (partly to help debug label issues) 2007-04-02 Donald Ephraim Curtis * libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/labelengine.cpp, libavogadro/src/engines/labelengine.h: Label rendering engine added. Needs work. Possibly using an overlay? * avogadro/src/CMakeLists.txt, avogadro/src/application.cpp, avogadro/src/application.h, avogadro/src/avogadroapp.cpp, avogadro/src/avogadroapp.h, avogadro/src/enginelistview.cpp, avogadro/src/enginelistview.h, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, libavogadro/src/CMakeLists.txt, libavogadro/src/engine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Refactored AvogadroApp -> Application to maintain naming scheme. Added EngineListView to list the engines and allow them to be enabled/disabled accordingly. Engines now maintain their own PrimitiveQueue. This will allow us (in the future) to allow advanced users to add/remove atoms/bond/residues accordingly from an engine. (in the case that i only want a certain atom or set of atoms rendered. 2007-03-28 Geoffrey Hutchison * avogadro/src/CMakeLists.txt, avogadro/src/avogadroapp.cpp, avogadro/src/avogadroapp.h, avogadro/src/main.cpp: Added open events for Mac (i.e., now can drag-and-drop files from the Finder) * avogadro/src/mac/MacOSXBundleInfo.plist.in, avogadro/src/mac/atom.icns: Added Mac OS X resources directory 2007-03-26 Donald Ephraim Curtis * libavogadro/src/primitives.cpp, libavogadro/src/primitives.h, libavogadro/src/tools/draw.cpp: Refactored SetVector3d and GetVector3d to setPos and pos after discussing with Benoit. We agreed that this sticks with our Avogadro API convention. * avogadro/include/avogadro/extension.h, avogadro/include/avogadro/plugin.h, avogadro/src/CMakeLists.txt, avogadro/src/extension.h, avogadro/src/extensions/CMakeLists.txt, avogadro/src/extensions/gamess.cpp, avogadro/src/extensions/gamess.h, avogadro/src/extensions/gamessinputdata.cpp, avogadro/src/extensions/gamessinputdata.h, avogadro/src/extensions/gamessinputdialog.cpp, avogadro/src/extensions/gamessinputdialog.h, avogadro/src/extensions/gamessinputdialog.ui, avogadro/src/extensions/ghemical.cpp, avogadro/src/extensions/ghemical.h, avogadro/src/extensions/hydrogens.cpp, avogadro/src/extensions/hydrogens.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/plugin.h, avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h, avogadro/src/plugins/draw.png, avogadro/src/plugins/draw.qrc, avogadro/src/plugins/gamess.cpp, avogadro/src/plugins/gamess.h, avogadro/src/plugins/gamessinputdata.cpp, avogadro/src/plugins/gamessinputdata.h, avogadro/src/plugins/gamessinputdialog.cpp, avogadro/src/plugins/gamessinputdialog.h, avogadro/src/plugins/gamessinputdialog.ui, avogadro/src/plugins/ghemical.cpp, avogadro/src/plugins/ghemical.h, avogadro/src/plugins/hydrogens.cpp, avogadro/src/plugins/hydrogens.h, avogadro/src/plugins/navigate.cpp, avogadro/src/plugins/navigate.h, avogadro/src/plugins/selectrotate.cpp, avogadro/src/plugins/selectrotate.h, avogadro/src/plugins/ui_gamessinputdialog.h, libavogadro/include/avogadro/molgeominfo.h, libavogadro/include/avogadro/tool.h, libavogadro/include/avogadro/toolgroup.h, libavogadro/include/avogadro/toolmanager.h, libavogadro/src/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/tool.h, libavogadro/src/toolgroup.cpp, libavogadro/src/toolgroup.h, libavogadro/src/tools/CMakeLists.txt, libavogadro/src/tools/draw.cpp, libavogadro/src/tools/draw.h, libavogadro/src/tools/draw.png, libavogadro/src/tools/draw.qrc, libavogadro/src/tools/navigate.cpp, libavogadro/src/tools/navigate.h, libavogadro/src/tools/selectrotate.cpp, libavogadro/src/tools/selectrotate.h: Moved tools to libavogadro: - Added ToolGroup which manages a group of tools. - Moved avogadro "plugins" to "extensions". (removed tools) 2007-03-24 Benoit Jacob * avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: In Draw: standardize on passing GLWidget *widget to the various methods, from which both the molecule and the center can be retrieved. Maybe evaluate letting the Tool know which GLWidget it's operating in, gettable with glwidget()? That would spare much argument-passing. Add API documentation and explanatory code comments to unProject(). * avogadro/src/plugins/draw.cpp, libavogadro/src/camera.cpp, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: In class Atom: Rename position() to GetVector3d() and setPosition() to SetVector3d(). This underlines the fact that they're just wrappers for GetVector() and SetVector() from OBAtom, doing casts with Eigen::Vector3d. Rewrite these functions to make sure they don't cause copies, and inline them. Add documentation. A "rationale for inlining" is provided in comment, to justify that inlining isn't dangerous here. 2007-03-23 Geoffrey Hutchison * avogadro/src/aboutdialog.cpp, avogadro/src/avogadro.qrc, avogadro/src/icons/atom2.png: Add contributed icon to about dialog * avogadro/src/plugins/draw.cpp, avogadro/src/plugins/ui_gamessinputdialog.h: Add full third-row elements (e.g., sulfur, phosphorus...) 2007-03-21 Donald Ephraim Curtis * avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/navigate.cpp, avogadro/src/plugins/navigate.h: Commiting cryo's patch for the navigate plugin. (ie. importing navigation functionality from Kalzium. 2007-03-21 Benoit Jacob * libavogadro/src/camera.cpp, libavogadro/src/camera.h, libavogadro/src/glwidget.cpp: Document class Camera 2007-03-20 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/plugin.h, avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h, avogadro/src/plugins/selectrotate.cpp, avogadro/src/plugins/selectrotate.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h: Added wheel function to plugins to allow handling of wheel events on the GLWidget. 2007-03-19 Benoit Jacob * avogadro/src/plugins/draw.h, libavogadro/src/CMakeLists.txt, libavogadro/src/engine.h, libavogadro/src/glwidget.h: Fix compilation (after removal of molgeominfo.*). 2007-03-19 Donald Ephraim Curtis * avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h, avogadro/src/plugins/selectrotate.cpp, libavogadro/src/camera.cpp, libavogadro/src/engine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/molgeominfo.cpp, libavogadro/src/molgeominfo.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Removed the MolGeomInfo class. It's really not needed as all this info can happily exist in the Molecule class and techincally should. The GLWidget makes it's own copies of this info when it wants to by GLWidget::updateGeometry(). I believe this class was most likely introduced as a way to get the info to the Engines, but really they should know their parent. 2007-03-19 Benoit Jacob * libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/engine.h, libavogadro/src/engines/StickEngine.cpp, libavogadro/src/engines/StickEngine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.cpp: fix the auto-multiple-bonds-oritentation feature from kalzium That is, now when you load a molecule the double bonds are automatically oriented to face the camera in the default viewpoint. So that they don't look like single bonds. This implied API changes in engines: now render must be passed the molGeomInfo structure, as it needs to know the normal vector of the molecule's fitting plane. * avogadro/src/plugins/draw.cpp, libavogadro/src/camera.cpp: adjust initial viewpoint on loaded molecule. remove unused define. * avogadro/src/plugins/draw.cpp, libavogadro/src/camera.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/molgeominfo.cpp: Fix bug where atoms created on an empty molecule were not shown. The problem was twofold: -molGeomInfo wasn't getting updated -with an empty molecule, applyPerspective set nearPlane==farPlane, thus nothing would be drawn until molGeomInfo would be updated. * avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h, avogadro/src/plugins/selectrotate.cpp, libavogadro/include/avogadro/molgeominfo.h, libavogadro/src/CMakeLists.txt, libavogadro/src/camera.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/molgeominfo.cpp, libavogadro/src/molgeominfo.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: - much improved Draw::moveAtom: now moves the atom within the iso-z-distance of the molecule's center - introduce MolGeomInfo class, stores the geometric info of a molecule - take geom info out of class Molecule - remove Molecule's d-pointer (nothing left there) - remove mutex stuff in Molecule - add d->molGeomInfo member to GLWidget, MUST BE UPDATED BY HAND - fix Atom::position() (interfacing coord vectors with Eigen) 2007-03-18 Benoit Jacob * avogadro/src/plugins/selectrotate.cpp, avogadro/src/plugins/selectrotate.h: Unscrew the selectrotate tool, after migration to the Camera class caused some damage. Donald: I hope I reproduced the original behavior, if not, just tell me. 2007-03-16 Benoit Jacob * libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Make Primitive's d-pointer private Move Molecule's data to a d-pointer Cache the molecule geometric info. Still need to evaluate potential thread-safeness issues. 2007-03-15 Donald Ephraim Curtis * libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Removed _vatom / _vbond from Molecule class (not needed) and fixed up the iterator stuff in primitives.cpp for Benoit. (specifically the computGeometricInfo function). * Doxyfile, avogadro/src/main.cpp, avogadro/src/mainwindow.h, libavogadro/src/engine.h, libavogadro/src/global.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Document Changes. Merged in Benoit's changes. 2007-03-14 Benoit Jacob * libavogadro/src/glwidget.cpp, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Implement computation and storage of geometric information in the Molecule class, replacing the former approach consisting in changing molecule coordinates. 2007-03-13 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/aboutdialog.cpp, avogadro/src/flattabwidget.cpp, avogadro/src/mainwindow.cpp, avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/draw.cpp, avogadro/src/plugins/gamess.cpp, avogadro/src/plugins/ghemical.cpp, avogadro/src/plugins/hydrogens.cpp, avogadro/src/plugins/selectrotate.cpp, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/moleculetreeview.cpp, libavogadro/src/primitives.cpp: Converted cmake files to use qt4_automoc format. More KDE like. * avogadro/src/CMakeLists.txt, avogadro/src/aboutdialog.cpp: about dialog compilation fixed. thanks carsten. 2007-03-12 Carsten Niehaus * avogadro/src/CMakeLists.txt, avogadro/src/aboutdialog.cpp, avogadro/src/aboutdialog.h, avogadro/src/mainwindow.cpp: New about dialog. Here it works but I think the moc-thing is wrong. Could somebody with more moc-foo check this, please? 2007-03-12 Benoit Jacob * libavogadro/src/cylinder.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h, libavogadro/src/sphere.cpp: Add Molecule::centerAndFitInXYPlane() method. Just to demonstrate it, call it from GLWidget::setMolecule(). Some sparse cleanup in Cylinder and Sphere. 2007-03-09 Donald Ephraim Curtis * avogadro/CMakeLists.txt, libavogadro/CMakeLists.txt: Misspelled USING_DYNAMIC_LIBS. What a mistake. Fixed the CMakeLists.txt files. 2007-03-08 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/plugins/gamessinputdialog.ui: Updated mainwindow.ui. TODO: Refactor so that variables are named descriptionType instead of typeDescription. All mainwindow actions need to be renamed. 2007-03-08 Carsten Niehaus * avogadro/src/plugins/gamessinputdialog.cpp, avogadro/src/plugins/gamessinputdialog.h: Remove a lot unused includes. Includes shouldn't be in .h-files, use forward declaration here 2007-03-08 Donald Ephraim Curtis * avogadro/src/plugins/gamessinputdialog.cpp, avogadro/src/plugins/gamessinputdialog.ui: Minor misspellings and added units to the recalculate hessian spin box. * avogadro/src/plugins/gamessinputdialog.cpp, avogadro/src/plugins/gamessinputdialog.h, avogadro/src/plugins/gamessinputdialog.ui: Done with ui and working. 2007-03-07 Donald Ephraim Curtis * avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/gamess.cpp, avogadro/src/plugins/gamess.h, avogadro/src/plugins/gamessinputbuilder.cpp, avogadro/src/plugins/gamessinputbuilder.h, avogadro/src/plugins/gamessinputbuilder.ui, avogadro/src/plugins/gamessinputdialog.cpp, avogadro/src/plugins/gamessinputdialog.h, avogadro/src/plugins/gamessinputdialog.ui: Refactoring GamessInputBuilder -> GamessInputDialog. More appropriately named. * avogadro/src/plugins/gamessinputbuilder.h, avogadro/src/plugins/gamessinputbuilder.ui: My version of the dialog. With tree and tabs etc etc. Widgets named accordingly. * libavogadro/src/cylinder.h, libavogadro/src/sphere.h: Needed Qt4OpenGL include so that GLuint named a type. * avogadro/src/CMakeLists.txt, avogadro/src/plugins/CMakeLists.txt, libavogadro/src/CMakeLists.txt: Updated include precedence. Should fix some compile errors. Just so that when you build you are getting the header files from your build directory and not the installed ones. 2007-03-07 Carsten Niehaus * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Commit my patch: No inludes in the .h-file if possible 2007-03-07 Benoit Jacob * libavogadro/src/cylinder.h, libavogadro/src/sphere.h: don't include QGLWidget when not needed; documentation fixes * libavogadro/src/cylinder.cpp, libavogadro/src/sphere.cpp: Remove all mentions of the USE_DISPLAY_LISTS define, always use display lists (instead of never) for the sphere and cylinder. This fixes an issue with the way avo reused the sphere/cylinder code from Kalzium: avo used a display list for the whole molecule, but not for the spheres and cylinders, which caused the geometric data and the opengl traffic of each sphere/cylinder to be replicated into the molecule display list. This caused the rendering to be unnecessarily slow and memory-consuming. 2007-03-07 Donald Ephraim Curtis * avogadro/src/flattabwidget.cpp, avogadro/src/plugins/CMakeLists.txt: flattabwidget.cpp: return proper integer CMakeLists.txt: remove garbage left over from initial testing of gamess plugin. 2007-03-06 Donald Ephraim Curtis * avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/gamess.cpp, avogadro/src/plugins/gamessinputbuilder.cpp, avogadro/src/plugins/gamessinputbuilder.h: GAMESS Input Deck Plugin Complete. Non-Modal Dialog. * avogadro/src/plugins/gamessinputbuilder.cpp, avogadro/src/plugins/gamessinputbuilder.h, avogadro/src/plugins/gamessinputdata.cpp, avogadro/src/plugins/gamessinputdata.h: Gamess Interface Updates. Still not incorporated into the plugin. This will happen tomorrow. 2007-03-02 Donald Ephraim Curtis * avogadro/src/plugins/gamessinputbuilder.cpp, avogadro/src/plugins/gamessinputbuilder.h, avogadro/src/plugins/gamessinputdata.cpp: More changes to the GAMESS Input Deck Generator. Almost finished. Need to add some more specific information. At some point a lot of the callbacks need to be refactored to another class. For now they are alright. This is very big and complex. Not fun. * avogadro/src/plugins/gamess.cpp, avogadro/src/plugins/gamess.h, avogadro/src/plugins/gamessinputbuilder.cpp, avogadro/src/plugins/gamessinputbuilder.h, avogadro/src/plugins/gamessinputdata.cpp, avogadro/src/plugins/gamessinputdata.h: Working good so far. Not yet a plugin. 2007-03-01 Donald Ephraim Curtis * avogadro/src/plugins/gamess.cpp, avogadro/src/plugins/gamess.h, avogadro/src/plugins/gamessinputbuilder.cpp, avogadro/src/plugins/gamessinputbuilder.h, avogadro/src/plugins/gamessinputdata.cpp, avogadro/src/plugins/gamessinputdata.h: Backing up before deleteing a bunch of unnecisary functions. Code taken from WxMacMolPlt GNU Licensed. 2007-02-26 Donald Ephraim Curtis * cmake/modules/FindAvogadro.cmake, cmake/modules/FindEigen.cmake: cmake files needed updating for finding paths correctly. 2007-02-25 Donald Ephraim Curtis * avogadro/src/mainwindow.h, avogadro/src/plugins/ghemical.cpp: Tim Vandermeersch's Patch for ghemical. Cleaned up mainwindow.h so it'd compile. * avogadro/src/CMakeLists.txt, avogadro/src/flattabwidget.cpp, avogadro/src/flattabwidget.h, avogadro/src/flowlayout.h, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h: Added new FlatTabWidget for Messages. Needs working on but will be really sweet. 2007-02-24 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, avogadro/src/plugin.h, avogadro/src/plugins/ghemical.cpp, avogadro/src/plugins/ghemical.h, avogadro/src/plugins/hydrogens.cpp, avogadro/src/plugins/hydrogens.h: Messages are now printed to the messages window. It's very hard to see but it's at the bottom of the GL area. You can see a small dotten line, which you can drag up and see the messages. I'm working on a better interface for this, unfortanly it's not built into the default QT widgets. More to come. 2007-02-22 Donald Ephraim Curtis * avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h: Some repeated code. Factored out into the newBond function. 2007-02-21 Geoffrey Hutchison * avogadro/CMakeLists.txt, avogadro/src/CMakeLists.txt: Update build environment * avogadro/src/plugins/draw.cpp, avogadro/src/plugins/hydrogens.cpp: Update to fix draw and hydrogen problems from Begin/EndModify in OBMol. * avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/ghemical.cpp, avogadro/src/plugins/ghemical.h: Add support for Ghemical minimization using Open Babel OBForceField 2007-02-19 Donald Ephraim Curtis * CMakeLists.txt, avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/plugin.h, avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/hydrogens.cpp, avogadro/src/plugins/hydrogens.h, libavogadro/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Fixed bug in glwidget.h with GLHit constructure being ill-defined. Updated cmake files to incorporated dependancy (multi-threaded make now works). Added plugin to Add/Removed Hydrogens. Having problems which i believe are in OpenBabel. 2007-02-09 Donald Ephraim Curtis * avogadro.nsi, avogadro/avogadro.nsi: moved nsis file 2007-02-08 Donald Ephraim Curtis * avogadro/src/plugins/draw.cpp, avogadro/src/plugins/selectrotate.cpp, libavogadro/src/engines/bsengine.cpp: corrected names. 2007-02-04 Geoffrey Hutchison * avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h: Add bond order to draw tool. 2007-02-03 Donald Ephraim Curtis * avogadro/avogadro.nsi, avogadro/src/CMakeLists.txt, avogadro/src/icons/avogadro.ico, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h, avogadro/src/plugins/selectrotate.h, libavogadro/src/glwidget.cpp, libavogadro/src/primitives.h: Updated WIN32 compiling parameters, added icons/avogadro.ico and nsis installer file. * libavogadro/CMakeLists.txt, libavogadro/src/global.h, libavogadro/src/glwidget.cpp: more WIN32 changes. Added some GL defines that were missing. added return value on GLHit = operator. * avogadro/config.h.in, libavogadro/config.h.in: Cleaned up config.h config.h should contain the install paths and version and package name. Needs updating. * avogadro/CMakeLists.txt, avogadro/config.h.in, libavogadro/CMakeLists.txt: Rather than using an include file for WIN32 we should just define it as a compile time definition. * libavogadro/CMakeLists.txt, libavogadro/config-libavogadro.h.in, libavogadro/config.h.in, libavogadro/global.h.in, libavogadro/src/CMakeLists.txt, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/engine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h: Done with changes. Defines are properly setup. 2007-02-02 Donald Ephraim Curtis * libavogadro/CMakeLists.txt, libavogadro/config-libavogadro.h.in, libavogadro/config.h.in, libavogadro/src/CMakeLists.txt, libavogadro/src/color.h, libavogadro/src/cylinder.h, libavogadro/src/engine.h, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.h, libavogadro/src/sphere.h: Broken for two min. * libavogadro/src/moleculetreeview.h, libavogadro/src/sphere.cpp: MoleculeTreeView no longer has ambiguous constructor. Sphere no longer has ambiguous call to sqrt. * libavogadro/CMakeLists.txt, libavogadro/config.h.in, libavogadro/src/CMakeLists.txt, libavogadro/src/color.h, libavogadro/src/cylinder.h, libavogadro/src/engine.h, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h, libavogadro/src/sphere.h: Update for WIN32 defines for compilation on windows. Exporting of DLL classes. 2007-02-02 Geoffrey Hutchison * avogadro/src/mainwindow.cpp, libavogadro/src/glwidget.cpp: Updated plugin paths: split by colon... PATH=/usr/bin:/bin:/usr/sbin (etc) 2007-01-28 Geoffrey Hutchison * avogadro/src/plugins/CMakeLists.txt, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/moleculetreeview.cpp: Updated link commands to work on Mac OS X. 2007-01-26 Donald Ephraim Curtis * libavogadro/src/engines/bsengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Changed names / added QT_PROPERTIES. Bulked up the lib. * avogadro/include/avogadro/tool.h, avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/plugin.h, avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/draw.cpp, avogadro/src/plugins/draw.h, avogadro/src/plugins/draw.png, avogadro/src/plugins/draw.qrc, avogadro/src/plugins/selectrotate.cpp, avogadro/src/plugins/selectrotate.h, avogadro/src/tool.h, avogadro/src/tools/CMakeLists.txt, avogadro/src/tools/draw.cpp, avogadro/src/tools/draw.h, avogadro/src/tools/draw.png, avogadro/src/tools/draw.qrc, avogadro/src/tools/selectrotate.cpp, avogadro/src/tools/selectrotate.h, libavogadro/src/glwidget.cpp: Merged Tools + Extensions = Plugins. 2007-01-25 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/plugin.h: Fixed plugin.h to compile. 2007-01-24 Donald Ephraim Curtis * avogadro/include/avogadro/plugin.h, avogadro/include/avogadro/tool.h, avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/plugin.h, avogadro/src/plugins/CMakeLists.txt, avogadro/src/plugins/ghemical.cpp, avogadro/src/plugins/ghemical.h, avogadro/src/tool.cpp, avogadro/src/tools/CMakeLists.txt, avogadro/src/tools/draw.h, avogadro/src/tools/selectrotate.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp: Added plugin interface (incomplete). Added tabs at bottom for messages and other information we wish to have. * avogadro/src/elementcombobox.cpp, avogadro/src/elementcombobox.h, libavogadro/src/elementcombobox.cpp, libavogadro/src/elementcombobox.h: Moved combobox to avogadro app. * libavogadro/src/elementcombobox.cpp, libavogadro/src/elementcombobox.h: Modifications... will be moved. * libavogadro/src/elementbox.cpp, libavogadro/src/elementbox.h, libavogadro/src/elementcombobox.cpp, libavogadro/src/elementcombobox.h: Rename * avogadro/src/CMakeLists.txt, avogadro/src/flowlayout.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/tool.h, avogadro/src/tools/draw.cpp, avogadro/src/tools/draw.h, avogadro/src/ui_mainwindow.h, libavogadro/src/CMakeLists.txt, libavogadro/src/elementbox.cpp, libavogadro/src/elementbox.h: Using generated ui. Added tool properties. adding ElementComboBox 2007-01-23 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/tools/CMakeLists.txt, avogadro/src/tools/draw.cpp, avogadro/src/tools/selectrotate.cpp, libavogadro/CMakeLists.txt, libavogadro/include/avogadro/color.h, libavogadro/include/avogadro/cylinder.h, libavogadro/include/avogadro/engine.h, libavogadro/include/avogadro/glwidget.h, libavogadro/include/avogadro/moleculetreeview.h, libavogadro/include/avogadro/primitives.h, libavogadro/include/avogadro/sphere.h, libavogadro/src/CMakeLists.txt, libavogadro/src/color.cpp, libavogadro/src/cylinder.cpp, libavogadro/src/engine.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp, libavogadro/src/sphere.cpp: Updated cmake files and added psuedo include dir. * avogadro/src/flowlayout.cpp, avogadro/src/flowlayout.h: Missing files! * avogadro/src/tool.h, avogadro/src/tools/draw.cpp: updated tooltip / text minor change. * avogadro/src/CMakeLists.txt, avogadro/src/tool.h, avogadro/src/tools/draw.cpp, avogadro/src/tools/draw.h, avogadro/src/tools/selectrotate.cpp, avogadro/src/tools/selectrotate.h: Updated name() and description() to const functions. Made it so that if a tool doesn't defined an Icon / Text / Tooltip it will be correctly populated using name() and description(). * avogadro/src/CMakeLists.txt, avogadro/src/avogadro.qrc, avogadro/src/icons/colorize.png, avogadro/src/icons/exit.png, avogadro/src/icons/fileclose.png, avogadro/src/icons/fileexport.png, avogadro/src/icons/filenew.png, avogadro/src/icons/fileopen.png, avogadro/src/icons/filesave.png, avogadro/src/icons/filesaveas.png, avogadro/src/icons/help.png, avogadro/src/icons/redo.png, avogadro/src/icons/revert.png, avogadro/src/icons/tool.png, avogadro/src/icons/undo.png, avogadro/src/icons/window_fullscreen.png, avogadro/src/icons/window_nofullscreen.png, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/mainwindow.ui, avogadro/src/tool.h, avogadro/src/tools/CMakeLists.txt, avogadro/src/tools/draw.cpp, avogadro/src/tools/draw.h, avogadro/src/tools/draw.png, avogadro/src/tools/draw.qrc, avogadro/src/tools/selectrotate.cpp, avogadro/src/tools/selectrotate.h, avogadro/src/ui_mainwindow.h, libavogadro/src/engine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: ui_mainwindow.h defines Ui::MainWindow which is a private member of Avogadro::MainWindow. QTDesigner does a crappy job with naming the layouts and embedding widgets within widgets that don't need to be that way. There is a bit of renaming done so that we can use our FlowLayout (ripped from the tutorials). Added icons to actions. Images are from CrystalClear collection. Made libavogadro const-correct as well as implementing the d-pointer technique in glWidget and Primitives classes. Figured out a memory leak in OpenBabel. Updated the TreeView to match pointers rather than indexes. This could become a bottleneck if we have to delete a lot of primitives from a big molecule. We'll tackle that when we cross that bridge. Would give us something like O(n^2) when we should really have O(n). Although that could be wrong i was never good with big O. Added resource files. Plugins now define an action which selects them. They can connect to the callback but it doesn't them little good. The MainWindow decides what tool gets called. This just gives the plugin the ability to define it's own tooltips / icon. tool.h defines a default action but this action doesn't get any information from the implemented plugin. 2007-01-22 Donald Ephraim Curtis * libavogadro/src/engine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitives.h: Added const correctness. 2007-01-07 Donald Ephraim Curtis * avogadro/src/tools/draw.cpp, avogadro/src/tools/draw.h, avogadro/src/tools/selectrotate.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp: Draw tools done. Fixed some bugs. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/tools/draw.cpp, avogadro/src/tools/draw.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Can now draw atoms into the model. No bonds yet but it also updates the treewidget through callbacks. However, primitiveAdded(Primitive *) should actually be admitted *after* the primitive has been added to the model. Otherwise we would need to overload everytime that the indexes change. Need to discuss further with Geoff and crew. * avogadro/src/avogadro.pro, avogadro/src/src.pro, avogadro/src/tools/SelectRotate.pro, avogadro/src/tools/tools.pro: Cleanup. Old Project files we don't need. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, libavogadro/src/CMakeLists.txt, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/moleculetreeview.cpp, libavogadro/src/moleculetreeview.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Rather than using a view on top of a model i created a custom view widget for our Primitive::Molecule. I haven't updated all the signals but this is now what we will use. It looks better and is easier to manage. Plus I got it looking sweeet. 2007-01-06 Donald Ephraim Curtis * avogadro/src/mainwindow.cpp, libavogadro/src/CMakeLists.txt, libavogadro/src/primitives.cpp: New Molecule is Working... signal to GLWidget needs to be updated. * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/projectmodel.cpp, avogadro/src/projectmodel.h: Updated to use new Molecule which has QAbstractItemModel. * libavogadro/src/moleculemodel.cpp, libavogadro/src/moleculemodel.h: Cleanup! * libavogadro/src/moleculemodel.cpp, libavogadro/src/moleculemodel.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h, libavogadro/src/projectmodel.cpp, libavogadro/src/projectmodel.h: Moved MoleculeModel *into* Molecule. Thus, a Molecule acts as a QAbstractItemModel. * libavogadro/src/CMakeLists.txt, libavogadro/src/projectmodel.cpp, libavogadro/src/projectmodel.h: Moved ProjectModel to library. * avogadro/src/mainwindow.cpp, avogadro/src/projectmodel.cpp, avogadro/src/projectmodel.h, avogadro/src/tools/selectrotate.cpp, libavogadro/src/engines/bsengine.cpp, libavogadro/src/glwidget.cpp, libavogadro/src/primitives.h: Updated the primitives enum. Also reworked ProjectModel so that it works directly with the molecule. Should be moved to the library. The view needs to be updated so that it subgroups. This should not be part of the model. (ie. the model should not contain "dummy" nodes just so that we have groupings of Atoms, Bonds, Residues.). Avogadro::GLWidget needs to be updated to use the MoleculeModel instead of working on the Molecule itself. * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/projectmodel.cpp, avogadro/src/projectmodel.h, avogadro/src/projecttree.cpp, avogadro/src/projecttree.h, libavogadro/src/glwidget.cpp, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Added Docks for Tools and for the Project Layout. The project layout is model/view. ProjectModel, given a molecule, sets up the model for the molecular view. I'm not sure if this is the correct place for this. I believe it could go into the libavogadro. It's a tossup because we may want to have our Model be the basis for interaction with the library but the way the GL engine is setup, it takes primitives directly to render them. This isn't a problem as we can setup our primitives to act as nodes of the model. Will think about this more. * avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/projecttree.cpp, avogadro/src/projecttree.h: Adding project model. 2007-01-05 Donald Ephraim Curtis * libavogadro/src/engines/bsengine.cpp, libavogadro/src/glwidget.cpp: Minor Changes * avogadro/src/tools/draw.cpp, avogadro/src/tools/selectrotate.cpp, avogadro/src/tools/selectrotate.h, libavogadro/src/glwidget.cpp, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Draw tool now draws. Need to refine these tools. Also need configuration system implemented for the tools. TODO: create a Tool Properties Dialog. * CMakeLists.txt, avogadro/CMakeLists.txt, avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/tools/CMakeLists.txt, avogadro/src/tools/draw.cpp, avogadro/src/tools/draw.h, avogadro/src/tools/selectrotate.cpp, avogadro/src/tools/selectrotate.h, libavogadro/CMakeLists.txt, libavogadro/src/CMakeLists.txt, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/vertexarray.cpp, libavogadro/src/engines/vertexarray.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h: Added the drawing tool but it doesn't work. There is no code. Had an issue where the header files were included from the wrong location. Should be easy to implement the drawing tool in the next day. Also need to build an extension for other plugins (gamess / libghemical). Should be interesting then. 2007-01-04 Donald Ephraim Curtis * avogadro/src/CMakeLists.txt, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/tool.h, avogadro/src/tools/selectrotate.cpp, avogadro/src/tools/selectrotate.h, libavogadro/src/engine.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitives.h: Should compile and run. bsengine is Ball and Stick and currently works. Need to bring the other stuff up to date. the select&rotate tool now works too. haven't finished cleaning up the functions and working on creating the drawing tool. * avogadro/CMakeLists.txt, avogadro/src/CMakeLists.txt, avogadro/src/tools/SelectRotate.cpp, avogadro/src/tools/SelectRotate.h, avogadro/src/tools/selectrotate.cpp, avogadro/src/tools/selectrotate.h, libavogadro/CMakeLists.txt, libavogadro/FindOpenBabel.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/color.h, libavogadro/src/cylinder.cpp, libavogadro/src/sphere.cpp: Should compile now. Must checkout the whole trunk to build the cmake files. 2007-01-03 Donald Ephraim Curtis * CMakeLists.txt, avogadro/FindAvogadro.cmake, cmake/modules/FindAvogadro.cmake, cmake/modules/FindEigen.cmake, cmake/modules/FindOpenBabel2.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/cylinder.cpp, libavogadro/src/cylinder.h, libavogadro/src/sphere.cpp, libavogadro/src/sphere.h: Added cmake/modules for CMAKE building. * AUTHORS, COPYING, ChangeLog, Doxyfile, INSTALL, NEWS, README, avogadro.pro, avogadro/AUTHORS, avogadro/CMakeLists.txt, avogadro/COPYING, avogadro/ChangeLog, avogadro/Doxyfile, avogadro/FindAvogadro.cmake, avogadro/FindOpenBabel.cmake, avogadro/INSTALL, avogadro/NEWS, avogadro/README, avogadro/avogadro.pro, avogadro/src/avogadro.pro, avogadro/src/avogadro.ui, avogadro/src/main.cpp, avogadro/src/mainwindow.cpp, avogadro/src/mainwindow.h, avogadro/src/src.pro, avogadro/src/tool.cpp, avogadro/src/tool.h, avogadro/src/tools/SelectRotate.cpp, avogadro/src/tools/SelectRotate.h, avogadro/src/tools/SelectRotate.pro, avogadro/src/tools/tools.pro, avogadro/untitled01.gpr, libavogadro/CMakeLists.txt, libavogadro/FindOpenBabel.cmake, libavogadro/src/CMakeLists.txt, libavogadro/src/color.cpp, libavogadro/src/color.h, libavogadro/src/engine.h, libavogadro/src/engines/CMakeLists.txt, libavogadro/src/engines/ResidueSphereEngine.cpp, libavogadro/src/engines/ResidueSphereEngine.h, libavogadro/src/engines/SphereEngine.cpp, libavogadro/src/engines/SphereEngine.h, libavogadro/src/engines/StickEngine.cpp, libavogadro/src/engines/StickEngine.h, libavogadro/src/engines/WireframeEngine.cpp, libavogadro/src/engines/WireframeEngine.h, libavogadro/src/engines/bsengine.cpp, libavogadro/src/engines/bsengine.h, libavogadro/src/engines/vertexarray.cpp, libavogadro/src/engines/vertexarray.h, libavogadro/src/glwidget.cpp, libavogadro/src/glwidget.h, libavogadro/src/primitives.cpp, libavogadro/src/primitives.h, src/Engine.h, src/GLWidget.cpp, src/GLWidget.h, src/MainWindow.cpp, src/MainWindow.h, src/Primitives.cpp, src/Primitives.h, src/Renderer.h, src/Tool.cpp, src/Tool.h, src/Views.cpp, src/Views.h, src/avogadro.pro, src/avogadro.ui, src/color.cpp, src/color.h, src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/BSEngine.pro, src/engines/ResidueSphereEngine.cpp, src/engines/ResidueSphereEngine.h, src/engines/ResidueSphereEngine.pro, src/engines/SphereEngine.cpp, src/engines/SphereEngine.h, src/engines/SphereEngine.pro, src/engines/StickEngine.cpp, src/engines/StickEngine.h, src/engines/StickEngine.pro, src/engines/WireframeEngine.cpp, src/engines/WireframeEngine.h, src/engines/WireframeEngine.pro, src/engines/engines.pro, src/engines/vertexarray.cpp, src/engines/vertexarray.h, src/main.cpp, src/src.pro, src/tools/SelectRotate.cpp, src/tools/SelectRotate.h, src/tools/SelectRotate.pro, src/tools/tools.pro: Moving things around. Conforming to a more KDE-like layout in SVN. I'm going nuts. SOrry 2007-01-02 Donald Ephraim Curtis * src/GLWidget.cpp, src/GLWidget.h, src/Tool.cpp, src/Tool.h, src/avogadro.pro, src/src.pro, src/tools/SelectRotate.cpp, src/tools/SelectRotate.h, src/tools/SelectRotate.pro, src/tools/tools.pro: Added Tool interface and SelectRotate tool. * src/engines/BSEngine.cpp, src/engines/StickEngine.cpp, src/engines/WireframeEngine.cpp: Changed GetBgn to GetBeginAtom 2006-09-26 Geoffrey Hutchison * src/MainWindow.cpp, src/MainWindow.h, src/main.cpp: Change QMessageWindowEx to QMessageWindow (for rc1 snapshot) 2006-09-26 Donald Ephraim Curtis * src/Engine.h, src/GLWidget.cpp, src/GLWidget.h, src/Primitives.h, src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/StickEngine.cpp, src/engines/StickEngine.h: Added PrimitiveQueue class to Engine.h which is now instanciated for each Engine. 2006-09-03 Donald Ephraim Curtis * ChangeLog, src/Engine.h, src/GLEngine.h, src/GLWidget.cpp, src/GLWidget.h, src/MainWindow.cpp, src/MainWindow.h, src/Primitives.cpp, src/Primitives.h, src/Views.cpp, src/Views.h, src/engines/BSEngine.h, src/engines/ResidueSphereEngine.h, src/engines/SphereEngine.h, src/engines/StickEngine.h, src/engines/WireframeEngine.h: Refactored GLEngine to Engine. 2006-09-01 Geoffrey Hutchison * ChangeLog, src/GLWidget.cpp, src/GLWidget.h, src/SphereRender.cpp, src/SphereRender.h, src/StickRender.cpp, src/StickRender.h, src/avogadro.pro, src/color.cpp, src/color.h, src/engines/BSEngine.cpp, src/engines/BSEngine.pro, src/engines/SphereEngine.cpp, src/engines/SphereEngine.pro, src/engines/StickEngine.cpp, src/engines/StickEngine.pro, src/engines/WireframeEngine.cpp, src/engines/WireframeEngine.pro, src/engines/vertexarray.cpp, src/engines/vertexarray.h: * src/color.h, src/color.cpp: Migrate Color class out of vertexarray files, to allow further colormaps (e.g., color by other atomic or residue properties). * src/*: Use Color() class. 2006-08-31 Donald Ephraim Curtis * ChangeLog, src/GLWidget.cpp, src/GLWidget.h: Added group selection. see GLWidget::selectRegion() * ChangeLog, src/GLEngine.h, src/GLWidget.cpp, src/GLWidget.h, src/Primitives.cpp, src/Primitives.h, src/Views.cpp, src/Views.h, src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/ResidueSphereEngine.cpp, src/engines/SphereEngine.cpp, src/engines/StickEngine.cpp, src/engines/WireframeEngine.cpp: * src/Primitives.h: moved the glnametypeing enum to here as enum primativeType * src/Primitives.cpp: Overwrote OBMol::CreateResidue (trunk version of OB) * src/GLWidget.cpp: _hits now containts both .type and .name corresponding to the type if hit and the name of the hit. 2006-08-30 Geoffrey Hutchison * ChangeLog, src/GLEngine.h, src/GLWidget.cpp, src/GLWidget.h, src/MainWindow.cpp, src/MainWindow.h, src/Primitives.h, src/Views.cpp, src/Views.h, src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/ResidueSphereEngine.cpp, src/engines/ResidueSphereEngine.h, src/engines/ResidueSphereEngine.pro, src/engines/SphereEngine.cpp, src/engines/SphereEngine.h, src/engines/StickEngine.cpp, src/engines/StickEngine.h, src/engines/WireframeEngine.cpp, src/engines/WireframeEngine.h, src/engines/engines.pro: * src/MainWindow.h, src/MainWindow.cpp, src/GLWidget.h, src/GLWidget.cpp: Move molecule storage (for now) to the GL widget to allow atom selection. * src/Primitives.h: Add marker to indicate that a particular object was selected by the user. * src/Views.h, src/Views.cpp: Add support for ResidueView, as well as whole-molecule rendering. * src/engines/ResidueSphereEngine.*: New render engine drawing spheres for residues in PDB files. Illustrates whole molecule render option. * src/GLEngine.h: Add glSelection enum for glPushName() entries to deliniate between molecule, atom, bond, residue, etc. picking. Render engines are responsible for using these as appropriate for a particular user view. * src/engines/*: Update for glPushName() for atoms and hilights when an atom is selected. 2006-08-29 Donald Ephraim Curtis * ChangeLog, src/GLWidget.cpp, src/GLWidget.h: * src/GLWidget.cpp: Initial group selection code. Needs work still. When you double-click to open a file it registers the mouse as having moved. This generates a selection box. * ChangeLog, src/GLWidget.cpp: Updated the perspective code and added "picking". Will work on drag to select also. 2006-08-28 Geoffrey Hutchison * src/GLEngine.h, src/GLWidget.cpp, src/GLWidget.h, src/Primitives.h, src/avogadro.pro, src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/BSEngine.pro, src/engines/SphereEngine.cpp, src/engines/SphereEngine.h, src/engines/StickEngine.cpp, src/engines/StickEngine.h, src/engines/StickEngine.pro, src/engines/WireframeEngine.cpp, src/engines/WireframeEngine.h, src/engines/WireframeEngine.pro, src/engines/vertexarray.h, src/main.cpp: Updates to use vertex array classes for rendering. Much, much faster. * ChangeLog, src/MainWindow.cpp, src/MainWindow.h: * src/MainWindow.h, src/MainWindow.cpp: Add full screen rendering and background color. (Needed for upcoming ACS presentations.) * src/engines/SphereEngine.cpp, src/engines/SphereEngine.h: Minor update to actually show atoms. Not sure why previous version shows nothing. * ChangeLog, src/GLWidget.cpp, src/engines/SphereEngine.cpp, src/engines/SphereEngine.h, src/engines/SphereEngine.pro, src/engines/WireframeEngine.cpp, src/engines/WireframeEngine.h, src/engines/WireframeEngine.pro, src/engines/engines.pro, src/engines/vertexarray.cpp, src/engines/vertexarray.h: * src/GLWidget.cpp: Make sure to enable vertex arrays (for Benoit's sphere/cylinder classes. * src/engines/vertextarray.cpp, src/engines/vertexarray.h: Moved Benoit's vertex array sphere and cylinder from Kalzium. * src/engines/WireframeEngine.*: New class for a wireframe view. (Should be made a static plugin and the default view, but don't have time right now.) * src/engines/SphereEngine.*: New class for van der Waals spheres using Benoit's classes. Very fast. 2006-08-25 Donald Ephraim Curtis * src/GLEngine.h, src/engines/BSEngine.h, src/engines/StickEngine.h: More documentation updates. * Doxyfile, src/GLEngine.h, src/engines/BSEngine.h, src/engines/StickEngine.h: Added Doxyfile for documentation generation through doxygen and added comments to the Engine files. 2006-08-24 Geoffrey Hutchison * ChangeLog, src/MainWindow.cpp: * src/MainWindow.cpp: Make sure to update recent file list when creating a new window, and make sure to call updateGL after reading a file. Fixes minor bugs. 2006-08-24 Donald Ephraim Curtis * src/GLWidget.cpp, src/GLWidget.h, src/engines/BSEngine.h, src/engines/StickEngine.h: Updated Description (should not include "Engine" Added slots for setting the GLWidget renderer. * src/MainWindow.cpp, src/MainWindow.h: Added engine selection ComboBox. 2006-08-24 Geoffrey Hutchison * src/GLEngine.h, src/GLWidget.cpp, src/GLWidget.h, src/Primatives.cpp, src/Primatives.h, src/Primitives.cpp, src/Primitives.h, src/Renderer.h, src/Views.cpp, src/Views.h, src/avogadro.pro, src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/BSEngine.pro, src/engines/StickEngine.cpp, src/engines/StickEngine.h, src/engines/StickEngine.pro: Rename Prim-a-tive to Primitive (correct spelling). Add a fallback for finding plugins to environment variable: AVOGADRO_PLUGINS This enables plugin support on Mac OS X. 2006-08-24 Donald Ephraim Curtis * src/GLEngine.h, src/Views.cpp, src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/StickEngine.cpp, src/engines/StickEngine.h: Updated GLEngine interface to only implement .render( *). * src/GLEngine.h, src/GLWidget.cpp, src/GLWidget.h, src/MainWindow.cpp, src/MainWindow.h, src/Primatives.cpp, src/Primatives.h, src/Views.cpp, src/Views.h, src/avogadro.pro, src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/SBSEngine.cpp, src/engines/SBSEngine.h, src/engines/SBSEngine.pro, src/engines/StickEngine.cpp, src/engines/StickEngine.h, src/engines/StickEngine.pro, src/engines/engines.pro: Refactored Renderer -> GLEngine StickEngine & BSEngine both run. (although they need some fixes). Major Modifications. See mailing list. * src/engines/BSEngine.cpp, src/engines/BSEngine.h, src/engines/BSEngine.pro, src/engines/BSRenderer.cpp, src/engines/BSRenderer.h, src/engines/BSRenderer.pro, src/engines/SBSEngine.cpp, src/engines/SBSEngine.h, src/engines/SBSEngine.pro, src/engines/SBSRenderer.cpp, src/engines/SBSRenderer.h, src/engines/SBSRenderer.pro, src/engines/engines.pro: Refactoring: Renderer -> Engine 2006-08-21 Donald Ephraim Curtis * autogen.sh, configure.ac: Cleaning up old GNU stuff from the main directory. * src/MainWindow.cpp, src/MainWindow.h: MainWindow now dynamically loads rendering engines. There is currently no way to select the default and there is not NULL check as of yet. Thats is to come. * src/avogadro.pro, src/src.pro: src is now a qmake that does recursive building. avogadro.pro builds the binary. * src/Primatives.cpp, src/Primatives.h: These are molecule primatives; ie. wrappers around the OBAtom / OBBond / OBMol classes. They are used to set graphical attributes of the primatives and allows us to call render on the individuals. * src/BSRender.cpp, src/BSRender.h: These have been moved to the pluggable engines directory. * src/engines/BSRenderer.cpp, src/engines/BSRenderer.h, src/engines/BSRenderer.pro, src/engines/SBSRenderer.cpp, src/engines/SBSRenderer.h, src/engines/SBSRenderer.pro, src/engines/engines.pro: Rendering Engines have been added. 2006-08-20 Geoffrey Hutchison * ChangeLog, src/MainWindow.cpp, src/MainWindow.h: * src/MainWindow.h, src/MainWindow.cpp: Fix saveFile -- make sure to call SetOutFormat() not SetInFormat()! Works great now. Added code to save settings for window position and size. 2006-08-20 Donald Ephraim Curtis * src/GLWidget.cpp, src/MainWindow.cpp, src/main.cpp: * MainWindow (see line 82 TODO) - Temporarily fixed the open bug. * GLWidget - Modified the rotate so that the molecule rotates more normal. Also did some reformatting. 2006-08-19 Geoffrey Hutchison * ChangeLog, src/MainWindow.cpp, src/MainWindow.h: * src/MainWindow.cpp: Check to see if a file is already in a window -- raise it if needed, rather than opening another copy. Implement exportGraphics with QGLWidget::grabFrameBuffer. Doesn't allow oversampling, but works. * src/GLWidget.cpp, src/GLWidget.h: * src/GLWidget.cpp: Improved scale/zoom feature and added calls for adding screen coordinates (e.g., for seelction rectangle). 2006-08-18 Geoffrey Hutchison * src/BSRender.cpp, src/BSRender.h, src/GLWidget.cpp, src/GLWidget.h, src/MainWindow.cpp, src/MainWindow.h, src/SphereRender.cpp, src/SphereRender.h, src/StickRender.cpp, src/StickRender.h, src/main.cpp: Merge of current development code. Sometimes buggy, as explained in message. 2006-08-18 Donald Ephraim Curtis * src/ABSRender.cpp, src/ABSRender.h, src/AGLWidget.cpp, src/AGLWidget.h, src/AMainWindow.cpp, src/AMainWindow.h, src/ASphereRender.cpp, src/ASphereRender.h, src/AStickRender.cpp, src/AStickRender.h, src/BSRender.cpp, src/BSRender.h, src/GLWidget.cpp, src/GLWidget.h, src/MainWindow.cpp, src/MainWindow.h, src/SphereRender.cpp, src/SphereRender.h, src/StickRender.cpp, src/StickRender.h, src/avogadro.pro: Renamed files. We user the 'Avogadro' namespace. Naming the files with A* is redundant. 2006-08-15 Geoffrey Hutchison * src/ABSRender.cpp, src/ABSRender.h, src/AGLWidget.cpp, src/AGLWidget.h, src/AMainWindow.cpp, src/AMainWindow.h, src/AStickRender.cpp, src/AStickRender.h, src/avogadro.pro, src/avogadro.ui, src/main.cpp: Added additional rendering options. Moving towards a more full-featured GUI. 2006-08-14 Geoffrey Hutchison * ChangeLog, src/AGLWidget.cpp, src/AGLWidget.h, src/AMainWindow.cpp, src/ASphereRender.cpp: Added initial support for rotation. * ChangeLog, src/AGLWidget.cpp, src/AMainWindow.cpp, src/AMainWindow.h, src/ASphereRender.cpp, src/ASphereRender.h, src/avogadro.pro: Sample renderer (still OpenGL glitches). When a molecule is opened, a set of VdW spheres is rendered with the appropriate colors. 2006-08-13 Geoffrey Hutchison * src/AGLWidget.cpp, src/ASphereRender.cpp, src/ASphereRender.h: More experiments. * src/AGLWidget.cpp, src/AMainWindow.cpp, src/AMainWindow.h, src/avogadro.pro: More experiments. * ChangeLog, src/AGLWidget.cpp, src/AGLWidget.h: * src/AGLWidget.h, src/AGLWidget.cpp: Add support for rendering GL display lists -- renderer classes should generate a display list and pass it off to the widget. * src/AMainWindow.cpp, src/AMainWindow.h, src/main.cpp: Switch back to custom main window -- easier to add slots for commands. (Not sure why menu doesn't show up on Mac OS X.) 2006-08-08 Geoffrey Hutchison * ChangeLog, src/AMainWindow.cpp, src/avogadro.pro, src/avogadro.ui, src/main.cpp: * src/avogadro.ui: Use QDesigner to layout some menu items and toolbar. * src/main.cpp, src/AMainWindow.cpp, src/avogadro.pro: Use it. 2006-05-12 Donald Ephraim Curtis * src/AGLWidget.cpp, src/AGLWidget.h, src/AMainWindow.cpp, src/AMainWindow.h, src/avogadro.pro, src/main.cpp: Demo includes a toolbar and GL widget. 2006-04-28 Donald Ephraim Curtis * AUTHORS, COPYING, ChangeLog, INSTALL, NEWS, src/main.cpp: Tutorial time. * src/AWindow.cpp, src/AWindow.h: Fixed * src/AWindow.cpp, src/AWindow.h, src/main.cpp, src/main.h: Bad Changes. * Makefile.am, autogen.sh, configure.ac, src/Makefile.am, src/defines.h, src/main.cpp, src/main.h: GNU Basics avogadro-1.1.1/fragments/0000755000175000001440000000000012250371054014512 5ustar marcususersavogadro-1.1.1/fragments/aldehydes/0000755000175000001440000000000012250371054016454 5ustar marcususersavogadro-1.1.1/fragments/aldehydes/formaldehyde.cml0000644000175000001440000000302212250371054021611 0ustar marcususers Formaldehyde 30.0260 30.0105647 -20 avogadro-1.1.1/fragments/aldehydes/acetaldehyde.cml0000644000175000001440000000405512250371054021571 0ustar marcususers Acetaldehyde 44.0526 44.0262147 -125 21 avogadro-1.1.1/fragments/amides/0000755000175000001440000000000012250371054015754 5ustar marcususersavogadro-1.1.1/fragments/amides/ethyl_carbamate.cml0000644000175000001440000000543512250371054021604 0ustar marcususers Ethyl carbamate 89.0932 89.0476785 49 183 avogadro-1.1.1/fragments/amides/oxamide.cml0000644000175000001440000000437212250371054020105 0ustar marcususers Oxamide 88.0654 88.0272774 > 300 avogadro-1.1.1/fragments/amides/N_N-dimethylformamide.cml0000644000175000001440000000524712250371054022634 0ustar marcususers N,N-Dimethylformamide 73.0938 73.0527638 -61 153 avogadro-1.1.1/fragments/amides/N_N-dimethylacetamide.cml0000644000175000001440000000601612250371054022600 0ustar marcususers N,N-Dimethylacetamide 87.1204 87.0684139 -20 165 avogadro-1.1.1/fragments/amides/acetamide.cml0000644000175000001440000000444412250371054020373 0ustar marcususers Acetamide 59.0672 59.0371138 80 221 avogadro-1.1.1/fragments/alkenes/0000755000175000001440000000000012250371054016134 5ustar marcususersavogadro-1.1.1/fragments/alkenes/E-hex-3-ene.cml0000644000175000001440000000630612250371054020511 0ustar marcususers (E)-Hex-3-ene 84.1595 84.0939004 67 avogadro-1.1.1/fragments/alkenes/3E-penta-1_3-diene.cml0000644000175000001440000000543412250371054021655 0ustar marcususers (3E)-Penta-1,3-diene 68.1170 68.0626003 -87 42 avogadro-1.1.1/fragments/alkenes/E-hept-2-ene.cml0000644000175000001440000000707212250371054020665 0ustar marcususers (E)-Hept-2-ene 98.1861 98.1095504 98 avogadro-1.1.1/fragments/alkenes/E-oct-4-ene.cml0000644000175000001440000000765112250371054020517 0ustar marcususers (E)-Oct-4-ene 112.2126 112.1252005 122 avogadro-1.1.1/fragments/alkenes/2-methylbuta-1_3-diene.cml0000644000175000001440000000543412250371054022616 0ustar marcususers 2-Methylbuta-1,3-diene 68.1170 68.0626003 -146 34 avogadro-1.1.1/fragments/alkenes/but-1-ene.cml0000644000175000001440000000520512250371054020330 0ustar marcususers But-1-ene 56.1063 56.0626003 -185 -6 avogadro-1.1.1/fragments/alkenes/3Z_3-ethylhepta-1_3-diene.cml0000644000175000001440000000763312250371054023167 0ustar marcususers (3Z)-3-Ethylhepta-1_3-diene 124.2233 124.1252005 avogadro-1.1.1/fragments/alkenes/Z-pent-2-ene.cml0000644000175000001440000000600612250371054020714 0ustar marcususers (Z)-Pent-2-ene 70.1329 70.0782503 -180 37 avogadro-1.1.1/fragments/alkenes/E-hex-2-ene.cml0000644000175000001440000000656512250371054020517 0ustar marcususers (E)-Hex-2-ene 84.1595 84.0939004 -98 68 avogadro-1.1.1/fragments/alkenes/Z-oct-2-ene.cml0000644000175000001440000000764712250371054020547 0ustar marcususers (Z)-Oct-2-ene 112.2126 112.1252005 126 avogadro-1.1.1/fragments/alkenes/Z-but-2-ene.cml0000644000175000001440000000522012250371054020535 0ustar marcususers (Z)-But-2-ene 56.1063 56.0626003 -139 4 avogadro-1.1.1/fragments/alkenes/Z-hept-3-ene.cml0000644000175000001440000000707612250371054020717 0ustar marcususers (Z)-Hept-3-ene 98.1861 98.1095504 96 avogadro-1.1.1/fragments/alkenes/pent-1-ene.cml0000644000175000001440000000551312250371054020506 0ustar marcususers Pent-1-ene 70.1329 70.0782503 30 avogadro-1.1.1/fragments/alkenes/E-but-2-ene.cml0000644000175000001440000000522012250371054020510 0ustar marcususers (E)-But-2-ene 56.1063 56.0626003 -105 1 avogadro-1.1.1/fragments/alkenes/3Z-penta-1_3-diene.cml0000644000175000001440000000516012250371054021676 0ustar marcususers (3Z)-Penta-1,3-diene 68.1170 68.0626003 43 avogadro-1.1.1/fragments/alkenes/Z-hex-3-ene.cml0000644000175000001440000000630712250371054020537 0ustar marcususers (Z)-Hex-3-ene 84.1595 84.0939004 67 avogadro-1.1.1/fragments/alkenes/hept-1-ene.cml0000644000175000001440000000733312250371054020502 0ustar marcususers Hept-1-ene 98.1861 98.1095504 -119 94 avogadro-1.1.1/fragments/alkenes/hex-1-ene.cml0000644000175000001440000000626712250371054020333 0ustar marcususers Hex-1-ene 84.1595 84.0939004 63 avogadro-1.1.1/fragments/alkenes/E-hept-3-ene.cml0000644000175000001440000000735512250371054020672 0ustar marcususers (E)-Hept-3-ene 98.1861 98.1095504 -137 95 avogadro-1.1.1/fragments/alkenes/oct-1-ene.cml0000644000175000001440000001010712250371054020320 0ustar marcususers Oct-1-ene 112.2126 112.1252005 -101 123 avogadro-1.1.1/fragments/alkenes/E-oct-2-ene.cml0000644000175000001440000000764712250371054020522 0ustar marcususers (E)-Oct-2-ene 112.2126 112.1252005 123 avogadro-1.1.1/fragments/alkenes/Z-hex-2-ene.cml0000644000175000001440000000631012250371054020530 0ustar marcususers (Z)-Hex-2-ene 84.1595 84.0939004 69 avogadro-1.1.1/fragments/alkenes/Z-oct-4-ene.cml0000644000175000001440000000766112250371054020545 0ustar marcususers (Z)-Oct-4-ene 112.2126 112.1252005 122 avogadro-1.1.1/fragments/alkenes/E-oct-3-ene.cml0000644000175000001440000000765112250371054020516 0ustar marcususers (E)-Oct-3-ene 112.2126 112.1252005 122 avogadro-1.1.1/fragments/alkenes/Z-hept-2-ene.cml0000644000175000001440000000707712250371054020717 0ustar marcususers (Z)-Hept-2-ene 98.1861 98.1095504 98 avogadro-1.1.1/fragments/alkenes/Z-oct-3-ene.cml0000644000175000001440000000766212250371054020545 0ustar marcususers (Z)-Oct-3-ene 112.2126 112.1252005 123 avogadro-1.1.1/fragments/alkenes/E-pent-2-ene.cml0000644000175000001440000000601112250371054020663 0ustar marcususers (E)-Pent-2-ene 70.1329 70.0782503 -140 36 avogadro-1.1.1/fragments/alkenes/2-methylbut-2-ene.cml0000644000175000001440000000600312250371054021710 0ustar marcususers 2-Methylbut-2-ene 70.1329 70.0782503 -134 36 avogadro-1.1.1/fragments/alkenes/propene.cml0000644000175000001440000000442612250371054020307 0ustar marcususers Propene 42.0797 42.0469502 -185 -48 avogadro-1.1.1/fragments/alkenes/ethene.cml0000644000175000001440000000364512250371054020111 0ustar marcususers Ethene 28.0532 28.0313001 -169 -104 avogadro-1.1.1/fragments/amino_acids/0000755000175000001440000000000012250371054016760 5ustar marcususersavogadro-1.1.1/fragments/amino_acids/L-methionine.cml0000644000175000001440000000654612250371054022020 0ustar marcususers (2S)-2-Amino-4-methylsulfanylbutanoic acid 149.2113 149.0510496 avogadro-1.1.1/fragments/amino_acids/L-threonine.cml0000644000175000001440000000627012250371054021646 0ustar marcususers (2S,3R)-2-Amino-3-hydroxybutanoic acid 119.1192 119.0582432 272 avogadro-1.1.1/fragments/amino_acids/L-tryptophan.cml0000644000175000001440000001100012250371054022046 0ustar marcususers (2S)-2-Amino-3-(1H-indol-3-yl)propanoic acid 204.2252 204.0898776 283 avogadro-1.1.1/fragments/amino_acids/D-histidine.cml0000644000175000001440000000664512250371054021631 0ustar marcususers (2R)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 155.1546 155.0694765 avogadro-1.1.1/fragments/amino_acids/D-phenylalanine.cml0000644000175000001440000000771012250371054022472 0ustar marcususers (2R)-2-Amino-3-phenylpropanoic acid 165.1891 165.0789786 266 avogadro-1.1.1/fragments/amino_acids/L-leucine.cml0000644000175000001440000000741212250371054021276 0ustar marcususers (2S)-2-Amino-4-methylpentanoic acid 131.1729 131.0946287 > 300 avogadro-1.1.1/fragments/amino_acids/L-4-nitrophenylalanine.cml0000644000175000001440000001000412250371054023705 0ustar marcususers (S)-2-Amino-3-(4-nitrophenyl)propanoic acid 210.1867 210.0640568 avogadro-1.1.1/fragments/amino_acids/D-isoleucine.cml0000644000175000001440000000744512250371054022007 0ustar marcususers (2R,3R)-2-Amino-3-methylpentanoic acid 131.1729 131.0946287 290 avogadro-1.1.1/fragments/amino_acids/L-arginine.cml0000644000175000001440000001016112250371054021441 0ustar marcususers (2S)-2-Amino-5-(diaminomethylideneamino)pentanoic acid 174.2010 174.1116757 avogadro-1.1.1/fragments/amino_acids/D-lysine.cml0000644000175000001440000001000312250371054021133 0ustar marcususers (2R)-2,6-Diaminohexanoic acid 146.1876 146.1055277 215 avogadro-1.1.1/fragments/amino_acids/D-arginine.cml0000644000175000001440000001015212250371054021431 0ustar marcususers (2R)-2-Amino-5-(diaminomethylideneamino)pentanoic acid 174.2010 174.1116757 avogadro-1.1.1/fragments/amino_acids/D-proline.cml0000644000175000001440000000633012250371054021310 0ustar marcususers (2R)-Pyrrolidine-2-carboxylic acid 115.1305 115.0633285 223 avogadro-1.1.1/fragments/amino_acids/D-allo-threonine.cml0000644000175000001440000000627012250371054022563 0ustar marcususers (2R,3R)-2-Amino-3-hydroxybutanoic acid 119.1192 119.0582432 276 avogadro-1.1.1/fragments/amino_acids/L-proline.cml0000644000175000001440000000632712250371054021326 0ustar marcususers (2S)-Pyrrolidine-2-carboxylic acid 115.1305 115.0633285 223 avogadro-1.1.1/fragments/amino_acids/D-glutamic_acid.cml0000644000175000001440000000664312250371054022434 0ustar marcususers (2R)-2-Aminopentanedioic acid 147.1293 147.0531578 205 avogadro-1.1.1/fragments/amino_acids/L-phenylalanine.cml0000644000175000001440000000770012250371054022501 0ustar marcususers (2S)-2-Amino-3-phenylpropanoic acid 165.1891 165.0789786 266 avogadro-1.1.1/fragments/amino_acids/D-glutamine.cml0000644000175000001440000000705712250371054021634 0ustar marcususers (2R)-2-Amino-4-carbamoylbutanoic acid 146.1445 146.0691422 185 avogadro-1.1.1/fragments/amino_acids/D-tyrosine.cml0000644000175000001440000001014212250371054021510 0ustar marcususers (2R)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 181.1885 181.0738932 > 300 avogadro-1.1.1/fragments/amino_acids/glycine.cml0000644000175000001440000000444112250371054021112 0ustar marcususers 2-Aminoacetic acid 75.0666 75.0320284 240 avogadro-1.1.1/fragments/amino_acids/D-alanine.cml0000644000175000001440000000525712250371054021256 0ustar marcususers (2R)-2-Aminopropanoic acid 89.0932 89.0476785 314 avogadro-1.1.1/fragments/amino_acids/L-glutamine.cml0000644000175000001440000000705612250371054021643 0ustar marcususers (2S)-2-Amino-4-carbamoylbutanoic acid 146.1445 146.0691422 185 avogadro-1.1.1/fragments/amino_acids/L-aspartic_acid.cml0000644000175000001440000000602512250371054022437 0ustar marcususers (2S)-2-Aminobutanedioic acid 133.1027 133.0375077 > 300 avogadro-1.1.1/fragments/amino_acids/L-alanine.cml0000644000175000001440000000526012250371054021260 0ustar marcususers (2S)-2-Aminopropanoic acid 89.0932 89.0476785 314 avogadro-1.1.1/fragments/amino_acids/D-valine.cml0000644000175000001440000000664712250371054021131 0ustar marcususers (2R)-2-Amino-3-methylbutanoic acid 117.1463 117.0789786 295 avogadro-1.1.1/fragments/amino_acids/L-valine.cml0000644000175000001440000000664312250371054021135 0ustar marcususers (2S)-2-Amino-3-methylbutanoic acid 117.1463 117.0789786 > 295 avogadro-1.1.1/fragments/amino_acids/D-leucine.cml0000644000175000001440000000740112250371054021264 0ustar marcususers (2R)-2-Amino-4-methylpentanoic acid 131.1729 131.0946287 > 300 avogadro-1.1.1/fragments/amino_acids/L-histidine.cml0000644000175000001440000000664412250371054021640 0ustar marcususers (2S)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 155.1546 155.0694765 avogadro-1.1.1/fragments/amino_acids/D-threonine.cml0000644000175000001440000000626512250371054021642 0ustar marcususers (2R,3S)-2-Amino-3-hydroxybutanoic acid 119.1192 119.0582432 272 avogadro-1.1.1/fragments/amino_acids/D-aspartic_acid.cml0000644000175000001440000000602312250371054022425 0ustar marcususers (2R)-2-Aminobutanedioic acid 133.1027 133.0375077 > 300 avogadro-1.1.1/fragments/amino_acids/L-serine.cml0000644000175000001440000000550112250371054021134 0ustar marcususers (2S)-2-Amino-3-hydroxypropanoic acid 105.0926 105.0425931 222 avogadro-1.1.1/fragments/amino_acids/D-methionine.cml0000644000175000001440000000655212250371054022005 0ustar marcususers (2R)-2-Amino-4-methylsulfanylbutanoic acid 149.2113 149.0510496 avogadro-1.1.1/fragments/amino_acids/L-allo-isoleucine.cml0000644000175000001440000000743712250371054022745 0ustar marcususers (2S,3R)-2-Amino-3-methylpentanoic acid 131.1729 131.0946287 290 avogadro-1.1.1/fragments/amino_acids/D-cysteine.cml0000644000175000001440000000545012250371054021465 0ustar marcususers (2S)-2-Amino-3-sulfanylpropanoic acid 121.1582 121.0197495 230 avogadro-1.1.1/fragments/amino_acids/L-lysine.cml0000644000175000001440000000777212250371054021166 0ustar marcususers (2S)-2,6-Diaminohexanoic acid 146.1876 146.1055277 215 avogadro-1.1.1/fragments/amino_acids/L-tyrosine.cml0000644000175000001440000001010612250371054021520 0ustar marcususers (2S)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 181.1885 181.0738932 > 300 avogadro-1.1.1/fragments/amino_acids/D-tryptophan.cml0000644000175000001440000001100712250371054022045 0ustar marcususers (2R)-2-Amino-3-(1H-indol-3-yl)propanoic acid 204.2252 204.0898776 283 avogadro-1.1.1/fragments/amino_acids/L-asparagine.cml0000644000175000001440000000627112250371054021766 0ustar marcususers (2S)-2-Amino-3-carbamoylpropanoic acid 132.1179 132.0534921 280 avogadro-1.1.1/fragments/amino_acids/L-glutamic_acid.cml0000644000175000001440000000664012250371054022441 0ustar marcususers (2S)-2-Aminopentanedioic acid 147.1293 147.0531578 205 avogadro-1.1.1/fragments/amino_acids/L-cysteine.cml0000644000175000001440000000545612250371054021503 0ustar marcususers (2R)-2-Amino-3-sulfanylpropanoic acid 121.1582 121.0197495 230 avogadro-1.1.1/fragments/amino_acids/D-asparagine.cml0000644000175000001440000000627512250371054021762 0ustar marcususers (2R)-2-Amino-3-carbamoylpropanoic acid 132.1179 132.0534921 280 avogadro-1.1.1/fragments/amino_acids/D-serine.cml0000644000175000001440000000547512250371054021136 0ustar marcususers (2R)-2-Amino-3-hydroxypropanoic acid 105.0926 105.0425931 222 avogadro-1.1.1/fragments/amino_acids/L-isoleucine.cml0000644000175000001440000000743412250371054022015 0ustar marcususers (2S,3S)-2-Amino-3-methylpentanoic acid 131.1729 131.0946287 291 avogadro-1.1.1/fragments/carboxylic_acids/0000755000175000001440000000000012250371054020014 5ustar marcususersavogadro-1.1.1/fragments/carboxylic_acids/citric_acid.cml0000644000175000001440000000723112250371054022751 0ustar marcususers 2-Hydroxypropane-1,2,3-tricarboxylic acid 192.1235 192.0270026 153 avogadro-1.1.1/fragments/carboxylic_acids/2_2_2-trichloroacetic_acid.cml0000644000175000001440000000432712250371054025456 0ustar marcususers 2,2,2-Trichloroacetic acid 163.3871 161.9042123 56 196 avogadro-1.1.1/fragments/carboxylic_acids/oxalic_acid.cml0000644000175000001440000000400412250371054022746 0ustar marcususers Oxalic acid 90.0349 89.9953085 189 avogadro-1.1.1/fragments/carboxylic_acids/L-ascorbic_acid.cml0000644000175000001440000000717312250371054023457 0ustar marcususers (2R)-2-[(1S)-1,2-Dihydroxyethyl]-4,5-dihydroxyfuran-3-one 176.1241 176.0320880 193 avogadro-1.1.1/fragments/carboxylic_acids/E-butenedioic_acid.cml0000644000175000001440000000500212250371054024142 0ustar marcususers (E)-Butenedioic acid 116.0722 116.0109586 300 avogadro-1.1.1/fragments/carboxylic_acids/L-malic_acid.cml0000644000175000001440000000610112250371054022745 0ustar marcususers (S)-2-Hydroxybutanedioic acid 134.0874 134.0215233 131 203 avogadro-1.1.1/fragments/carboxylic_acids/D-lactic_acid.cml0000644000175000001440000000454512250371054023121 0ustar marcususers (R)-2-Hydroxypropanoic acid 90.0779 90.0316941 avogadro-1.1.1/fragments/carboxylic_acids/isobutyric_acid.cml0000644000175000001440000000563012250371054023671 0ustar marcususers Isobutyric acid 88.1051 88.0524295 -47 154 avogadro-1.1.1/fragments/carboxylic_acids/propanoic_acid.cml0000644000175000001440000000504612250371054023470 0ustar marcususers Propanoic acid 74.0785 74.0367794 -23 141 avogadro-1.1.1/fragments/carboxylic_acids/acetic_acid.cml0000644000175000001440000000425512250371054022727 0ustar marcususers Acetic acid 60.0520 60.0211294 16 117 avogadro-1.1.1/fragments/carboxylic_acids/2_2-dichloroacetic_acid.cml0000644000175000001440000000432112250371054025025 0ustar marcususers 2,2-Dichloroacetic acid 128.9421 127.9431847 10 194 avogadro-1.1.1/fragments/carboxylic_acids/2_2_2-trifluoroacetic_acid.cml0000644000175000001440000000432312250371054025472 0ustar marcususers 2,2,2-Trifluoroacetic acid 114.0233 113.9928639 -15 72 avogadro-1.1.1/fragments/carboxylic_acids/L-lactic_acid.cml0000644000175000001440000000454612250371054023132 0ustar marcususers (S)-2-Hydroxypropanoic acid 90.0779 90.0316941 avogadro-1.1.1/fragments/carboxylic_acids/formic_acid.cml0000644000175000001440000000347712250371054022763 0ustar marcususers Formic acid 46.0254 46.0054793 8 100 avogadro-1.1.1/fragments/carboxylic_acids/butanoic_acid.cml0000644000175000001440000000562412250371054023304 0ustar marcususers Butanoic acid 88.1051 88.0524295 -6 163 avogadro-1.1.1/fragments/carboxylic_acids/D-tartaric_acid.cml0000644000175000001440000000604712250371054023472 0ustar marcususers (2S,3S)-2,3-Dihydroxybutanedioic acid 150.0868 150.0164379 173 avogadro-1.1.1/fragments/carboxylic_acids/E-butanoic_acid.cml0000644000175000001440000000562412250371054023466 0ustar marcususers Butanoic acid 88.1051 88.0524295 -6 163 avogadro-1.1.1/fragments/carboxylic_acids/L-tartaric_acid.cml0000644000175000001440000000604612250371054023501 0ustar marcususers (2R,3R)-2,3-Dihydroxybutanedioic acid 150.0868 150.0164379 173 avogadro-1.1.1/fragments/carboxylic_acids/D-malic_acid.cml0000644000175000001440000000610412250371054022740 0ustar marcususers (R)-2-Hydroxybutanedioic acid 134.0874 134.0215233 131 203 avogadro-1.1.1/fragments/aromatics/0000755000175000001440000000000012250371054016474 5ustar marcususersavogadro-1.1.1/fragments/aromatics/acenaphthene.cml0000644000175000001440000000775012250371054021625 0ustar marcususers Acenaphthene 154.2078 154.0782503 93 279 avogadro-1.1.1/fragments/aromatics/1_10-phenanthroline.cml0000644000175000001440000001000212250371054022636 0ustar marcususers 1,10-Phenanthroline 180.2053 180.0687483 117 > 300 avogadro-1.1.1/fragments/aromatics/4H-chromene.cml0000644000175000001440000000616112250371054021246 0ustar marcususers 4H-Chromene 132.1592 132.0575149 avogadro-1.1.1/fragments/aromatics/9H-fluorene.cml0000644000175000001440000001014312250371054021265 0ustar marcususers 9H-Fluorene 166.2185 166.0782503 116 294 avogadro-1.1.1/fragments/aromatics/benzothiophene.cml0000644000175000001440000000613412250371054022216 0ustar marcususers Benzothiophene 134.1982 134.0190212 32 221 avogadro-1.1.1/fragments/aromatics/tetralin.cml0000644000175000001440000000766612250371054021032 0ustar marcususers Tetralin 132.2023 132.0939004 -36 208 avogadro-1.1.1/fragments/aromatics/benzoyl_chloride.cml0000644000175000001440000000570312250371054022531 0ustar marcususers Benzoyl chloride 140.5670 140.0028925 -1 198 avogadro-1.1.1/fragments/aromatics/1_8-naphthyridine.cml0000644000175000001440000000560412250371054022431 0ustar marcususers 1,8-Naphthyridine 130.1466 130.0530982 avogadro-1.1.1/fragments/aromatics/2H-chromene.cml0000644000175000001440000000615512250371054021247 0ustar marcususers 2H-Chromene 132.1592 132.0575149 avogadro-1.1.1/fragments/aromatics/toluene.cml0000644000175000001440000000603312250371054020646 0ustar marcususers Toluene 92.1384 92.0626003 -93 110 avogadro-1.1.1/fragments/aromatics/cinnoline.cml0000644000175000001440000000556312250371054021160 0ustar marcususers Cinnoline 130.1466 130.0530982 avogadro-1.1.1/fragments/aromatics/quinazoline.cml0000644000175000001440000000632312250371054021533 0ustar marcususers Quinazoline 130.1466 130.0530982 48 243 avogadro-1.1.1/fragments/aromatics/phenol.cml0000644000175000001440000000545512250371054020467 0ustar marcususers Phenol 94.1112 94.0418648 41 182 avogadro-1.1.1/fragments/aromatics/1H-indole.cml0000644000175000001440000000631512250371054020716 0ustar marcususers 1H-Indole 117.1479 117.0578492 52 254 avogadro-1.1.1/fragments/aromatics/9H-carbazole.cml0000644000175000001440000000775312250371054021425 0ustar marcususers 9H-Carbazole 167.2066 167.0734993 247 355 avogadro-1.1.1/fragments/aromatics/anisole.cml0000644000175000001440000000624212250371054020627 0ustar marcususers Anisole 108.1378 108.0575149 -37 154 avogadro-1.1.1/fragments/aromatics/benzaldehyde.cml0000644000175000001440000000566112250371054021637 0ustar marcususers Benzaldehyde 106.1219 106.0418648 -26 179 avogadro-1.1.1/fragments/aromatics/phthalimide.cml0000644000175000001440000000611012250371054021457 0ustar marcususers Isoindole-1,3-dione 147.1308 147.0320284 238 avogadro-1.1.1/fragments/aromatics/9H-xanthene.cml0000644000175000001440000001035012250371054021260 0ustar marcususers 9H-Xanthene 182.2179 182.0731649 100 311 avogadro-1.1.1/fragments/aromatics/coumarin.cml0000644000175000001440000000652112250371054021012 0ustar marcususers Chromen-2-one 146.1427 146.0367794 71 302 avogadro-1.1.1/fragments/aromatics/quinoline.cml0000644000175000001440000000651212250371054021200 0ustar marcususers Quinoline 129.1586 129.0578492 -15 237 avogadro-1.1.1/fragments/aromatics/acridine.cml0000644000175000001440000001015312250371054020747 0ustar marcususers Acridine 179.2173 179.0734993 111 345 avogadro-1.1.1/fragments/aromatics/isoquinoline.cml0000644000175000001440000000623712250371054021717 0ustar marcususers Isoquinoline 129.1586 129.0578492 26 avogadro-1.1.1/fragments/aromatics/anthracene.cml0000644000175000001440000000760612250371054021312 0ustar marcususers Anthracene 178.2292 178.0782503 avogadro-1.1.1/fragments/aromatics/nitrobenzene.cml0000644000175000001440000000570212250371054021677 0ustar marcususers Nitrobenzene 123.1094 123.0320284 5 210 avogadro-1.1.1/fragments/aromatics/phenanthrene.cml0000644000175000001440000001034112250371054021647 0ustar marcususers Phenanthrene 178.2292 178.0782503 101 340 avogadro-1.1.1/fragments/aromatics/aniline.cml0000644000175000001440000000565312250371054020621 0ustar marcususers Aniline 93.1265 93.0578492 -6 184 avogadro-1.1.1/fragments/aromatics/uric_acid.cml0000644000175000001440000000616212250371054021120 0ustar marcususers 7,9-Dihydro-3H-purine-2,6,8-trione 168.1103 168.0283400 > 300 avogadro-1.1.1/fragments/aromatics/caffeine.cml0000644000175000001440000001007112250371054020730 0ustar marcususers 1,3,7-Trimethylpurine-2,6-dione 194.1906 194.0803756 235 avogadro-1.1.1/fragments/aromatics/acenaphthenequinone.cml0000644000175000001440000000713512250371054023221 0ustar marcususers Acenaphthene-1,2-dione 182.1748 182.0367794 259 avogadro-1.1.1/fragments/aromatics/acenaphthylene.cml0000644000175000001440000000735712250371054022175 0ustar marcususers Acenaphthylene 152.1919 152.0626003 90 280 avogadro-1.1.1/fragments/aromatics/naphthalene.cml0000644000175000001440000000667212250371054021473 0ustar marcususers Naphthalene 128.1705 128.0626003 80 218 avogadro-1.1.1/fragments/aromatics/benzene.cml0000644000175000001440000000525012250371054020621 0ustar marcususers Benzene 78.1118 78.0469502 5 80 avogadro-1.1.1/fragments/aromatics/1H-indene.cml0000644000175000001440000000650312250371054020705 0ustar marcususers 1H-Indene 116.1598 116.0626003 -2 183 avogadro-1.1.1/fragments/aromatics/benzofuran.cml0000644000175000001440000000564612250371054021355 0ustar marcususers Benzofuran 118.1326 118.0418648 174 avogadro-1.1.1/fragments/aromatics/benzoic_acid.cml0000644000175000001440000000610012250371054021577 0ustar marcususers Benzoic acid 122.1213 122.0367794 123 249 avogadro-1.1.1/fragments/aromatics/7H-purine.cml0000644000175000001440000000527212250371054020755 0ustar marcususers 7H-Purine 120.1121 120.0435961 216 avogadro-1.1.1/fragments/aromatics/chromone.cml0000644000175000001440000000623612250371054021012 0ustar marcususers Chromen-4-one 146.1427 146.0367794 47 avogadro-1.1.1/fragments/nucleobases/0000755000175000001440000000000012250371054017015 5ustar marcususersavogadro-1.1.1/fragments/nucleobases/adenine.cml0000644000175000001440000000570712250371054021126 0ustar marcususers 7H-Purin-6-amine 135.1267 135.0544952 > 300 avogadro-1.1.1/fragments/nucleobases/thymine.cml0000644000175000001440000000567712250371054021206 0ustar marcususers 5-Methyl-1H-pyrimidine-2,4-dione 126.1133 126.0429274 > 300 avogadro-1.1.1/fragments/nucleobases/guanine.cml0000644000175000001440000000615212250371054021144 0ustar marcususers 2-Amino-3,7-dihydropurin-6-one 151.1261 151.0494098 > 300 avogadro-1.1.1/fragments/nucleobases/uracil.cml0000644000175000001440000000507612250371054021001 0ustar marcususers 1H-Pyrimidine-2,4-dione 112.0868 112.0272774 > 300 avogadro-1.1.1/fragments/nucleobases/cytosine.cml0000644000175000001440000000527412250371054021357 0ustar marcususers 4-Amino-3H-pyrimidin-2-one 111.1020 111.0432618 > 300 avogadro-1.1.1/fragments/nitriles/0000755000175000001440000000000012250371054016343 5ustar marcususersavogadro-1.1.1/fragments/nitriles/propionitrile.cml0000644000175000001440000000444412250371054021745 0ustar marcususers Propanenitrile 55.0785 55.0421992 -93 97 avogadro-1.1.1/fragments/nitriles/1_1_1-trichloroacetonitrile.cml0000644000175000001440000000372712250371054024257 0ustar marcususers 1,1,1-Trichloroacetonitrile 144.3871 142.9096320 -42 83 avogadro-1.1.1/fragments/nitriles/acetonitrile.cml0000644000175000001440000000366212250371054021531 0ustar marcususers Acetonitrile 41.0519 41.0265491 -48 81 avogadro-1.1.1/fragments/nitriles/butyronitrile.cml0000644000175000001440000000522512250371054021757 0ustar marcususers Butanenitrile 69.1051 69.0578492 -112 116 avogadro-1.1.1/fragments/nitriles/isobutyronitrile.cml0000644000175000001440000000524312250371054022472 0ustar marcususers 2-Methylpropanenitrile 69.1051 69.0578492 -72 107 avogadro-1.1.1/fragments/alcohols/0000755000175000001440000000000012250371054016316 5ustar marcususersavogadro-1.1.1/fragments/alcohols/propan-2-ol.cml0000644000175000001440000000522112250371054021061 0ustar marcususers Propan-2-ol 60.0950 60.0575149 -89 82 avogadro-1.1.1/fragments/alcohols/propan-1-ol.cml0000644000175000001440000000522312250371054021062 0ustar marcususers Propan-1-ol 60.0950 60.0575149 -131 97 avogadro-1.1.1/fragments/alcohols/ethanol.cml0000644000175000001440000000443012250371054020446 0ustar marcususers Ethanol 46.0684 46.0418648 -114 78 avogadro-1.1.1/fragments/alcohols/cyclohexanol.cml0000644000175000001440000000703212250371054021505 0ustar marcususers Cyclohexanol 100.1589 100.0888150 23 160 avogadro-1.1.1/fragments/alcohols/cyclopentanol.cml0000644000175000001440000000624512250371054021674 0ustar marcususers Cyclopentanol 86.1323 86.0731649 -19 140 avogadro-1.1.1/fragments/alcohols/but-2-yne-1_4-diol.cml0000644000175000001440000000523712250371054022052 0ustar marcususers But-2-yne-1,4-diol 86.0892 86.0367794 56 238 avogadro-1.1.1/fragments/alcohols/ethane-1_2-diol.cml0000644000175000001440000000464612250371054021575 0ustar marcususers Ethane-1,2-diol 62.0678 62.0367794 -13 197 avogadro-1.1.1/fragments/alcohols/propane-1_2_3-triol.cml0000644000175000001440000000535712250371054022421 0ustar marcususers Propane-1,2,3-triol 92.0938 92.0473441 19 avogadro-1.1.1/fragments/alcohols/2-aminoethanol.cml0000644000175000001440000000455612250371054021642 0ustar marcususers 2-Aminoethanol 61.0831 61.0527638 10 avogadro-1.1.1/fragments/alcohols/methanol.cml0000644000175000001440000000365212250371054020630 0ustar marcususers Methanol 32.0419 32.0262147 -98 64 avogadro-1.1.1/fragments/coordination/0000755000175000001440000000000012250371054017202 5ustar marcususersavogadro-1.1.1/fragments/coordination/4-tetrahedral.cml0000644000175000001440000000116612250371054022343 0ustar marcususers avogadro-1.1.1/fragments/coordination/3-trigonal-planar.cml0000644000175000001440000000100012250371054023120 0ustar marcususers avogadro-1.1.1/fragments/coordination/5-trigonal-bipyramidal.cml0000644000175000001440000000153212250371054024154 0ustar marcususers 5-pcl5.out avogadro-1.1.1/fragments/coordination/4-planar.cml0000644000175000001440000000117212250371054021316 0ustar marcususers avogadro-1.1.1/fragments/coordination/5-square-pyramidal.cml0000644000175000001440000000135212250371054023322 0ustar marcususers avogadro-1.1.1/fragments/coordination/3-trigonal-pyramidal.cml0000644000175000001440000000077712250371054023651 0ustar marcususers avogadro-1.1.1/fragments/coordination/6-octahedral.cml0000644000175000001440000000155112250371054022152 0ustar marcususers avogadro-1.1.1/fragments/sulfoxides/0000755000175000001440000000000012250371054016677 5ustar marcususersavogadro-1.1.1/fragments/sulfoxides/dimethyl_sulfoxide.cml0000644000175000001440000000466012250371054023303 0ustar marcususers Methylsulfinylmethane 78.1334 78.0139358 18 189 avogadro-1.1.1/fragments/ethers/0000755000175000001440000000000012250371054016004 5ustar marcususersavogadro-1.1.1/fragments/ethers/dibutylether.cml0000644000175000001440000001071312250371054021207 0ustar marcususers 1-Butoxybutane 130.2279 130.1357652 -98 142 avogadro-1.1.1/fragments/ethers/ethylmethylether.cml0000644000175000001440000000446412250371054022111 0ustar marcususers Methoxyethane 60.0950 60.0575149 avogadro-1.1.1/fragments/ethers/dipropylether.cml0000644000175000001440000000736212250371054021403 0ustar marcususers 1-Propoxypropane 102.1748 102.1044651 -123 89 avogadro-1.1.1/fragments/ethers/tetrahydropyran.cml0000644000175000001440000000622412250371054021744 0ustar marcususers Oxane 86.1323 86.0731649 -48 88 avogadro-1.1.1/fragments/ethers/1_4-dioxane.cml0000644000175000001440000000565212250371054020521 0ustar marcususers 1,4-Dioxane 88.1051 88.0524295 11 101 avogadro-1.1.1/fragments/ethers/diisopropylether.cml0000644000175000001440000000740012250371054022107 0ustar marcususers 2-Propane-2-yloxypropane 102.1748 102.1044651 -85 69 avogadro-1.1.1/fragments/ethers/tetrahydrofuran.cml0000644000175000001440000000546412250371054021733 0ustar marcususers Oxacyclopentane 72.1057 72.0575149 -108 65 avogadro-1.1.1/fragments/ethers/di-tert-butylether.cml0000644000175000001440000001022112250371054022232 0ustar marcususers 2-Methyl-2-tert-butoxypropane 130.2279 130.1357652 avogadro-1.1.1/fragments/ethers/dimethylether.cml0000644000175000001440000000444112250371054021353 0ustar marcususers Methoxymethane 46.0684 46.0418648 -141 -25 avogadro-1.1.1/fragments/ethers/diethylether.cml0000644000175000001440000000600312250371054021172 0ustar marcususers Ethoxyethane 74.1216 74.0731649 -116 35 avogadro-1.1.1/fragments/water.cml0000644000175000001440000000306512250371054016335 0ustar marcususers Oxidane 18.0153 18.0105647 0 100 avogadro-1.1.1/fragments/carbamides/0000755000175000001440000000000012250371054016604 5ustar marcususersavogadro-1.1.1/fragments/carbamides/urea.cml0000644000175000001440000000376312250371054020246 0ustar marcususers Urea 60.0553 60.0323628 135 avogadro-1.1.1/fragments/alkynes/0000755000175000001440000000000012250371054016160 5ustar marcususersavogadro-1.1.1/fragments/alkynes/propyne.cml0000644000175000001440000000404112250371054020350 0ustar marcususers Propyne 40.0639 40.0313001 -102 -23 avogadro-1.1.1/fragments/alkynes/acetylene.cml0000644000175000001440000000327112250371054020631 0ustar marcususers Acetylene 26.0373 26.0156501 -84 -81 avogadro-1.1.1/fragments/alkanes/0000755000175000001440000000000012250371054016130 5ustar marcususersavogadro-1.1.1/fragments/alkanes/butane.cml0000644000175000001440000000557012250371054020112 0ustar marcususers Butane 58.1222 58.0782503 -138 -1 avogadro-1.1.1/fragments/alkanes/tetracosane.cml0000644000175000001440000002420712250371054021142 0ustar marcususers Tetracosane 338.6538 338.3912516 50 391 avogadro-1.1.1/fragments/alkanes/nonane.cml0000644000175000001440000001125712250371054020111 0ustar marcususers Nonane 128.2551 128.1565006 -53 150 avogadro-1.1.1/fragments/alkanes/hexane.cml0000644000175000001440000000713212250371054020100 0ustar marcususers Hexane 86.1754 86.1095504 -95 68 avogadro-1.1.1/fragments/alkanes/pentane.cml0000644000175000001440000000635112250371054020264 0ustar marcususers Pentane 72.1488 72.0939004 -130 36 avogadro-1.1.1/fragments/alkanes/tetradecane.cml0000644000175000001440000001474712250371054021121 0ustar marcususers Tetradecane 198.3880 198.2347510 6 253 avogadro-1.1.1/fragments/alkanes/2-methylpropane.cml0000644000175000001440000000561312250371054021660 0ustar marcususers 2-Methylpropane 58.1222 58.0782503 -160 -12 avogadro-1.1.1/fragments/alkanes/heptane.cml0000644000175000001440000000771712250371054020265 0ustar marcususers Heptane 100.2019 100.1252005 -91 98 avogadro-1.1.1/fragments/alkanes/undecane.cml0000644000175000001440000001263612250371054020417 0ustar marcususers Undecane 156.3083 156.1878008 -26 195 avogadro-1.1.1/fragments/alkanes/eicosane.cml0000644000175000001440000002125312250371054020416 0ustar marcususers Eicosane 282.5475 282.3286513 36 343 avogadro-1.1.1/fragments/alkanes/dodecane.cml0000644000175000001440000001342012250371054020367 0ustar marcususers Dodecane 170.3348 170.2034508 -10 216 avogadro-1.1.1/fragments/alkanes/propane.cml0000644000175000001440000000501012250371054020265 0ustar marcususers Propane 44.0956 44.0626003 -188 -42 avogadro-1.1.1/fragments/alkanes/methane.cml0000644000175000001440000000344512250371054020254 0ustar marcususers Methane 16.0425 16.0313001 -183 -161 avogadro-1.1.1/fragments/alkanes/tridecane.cml0000644000175000001440000001416012250371054020565 0ustar marcususers Tridecane 184.3614 184.2191009 -5 235 avogadro-1.1.1/fragments/alkanes/ethane.cml0000644000175000001440000000422312250371054020072 0ustar marcususers Ethane 30.0690 30.0469502 -172 -88 avogadro-1.1.1/fragments/alkanes/decane.cml0000644000175000001440000001204712250371054020050 0ustar marcususers Decane 142.2817 142.1721507 -30 174 avogadro-1.1.1/fragments/alkanes/pentadecane.cml0000644000175000001440000001553512250371054021105 0ustar marcususers Pentadecane 212.4146 212.2504010 10 270 avogadro-1.1.1/fragments/alkanes/octane.cml0000644000175000001440000001050012250371054020072 0ustar marcususers Octane 114.2285 114.1408506 -57 126 avogadro-1.1.1/fragments/alkanes/hexadecane.cml0000644000175000001440000001633512250371054020722 0ustar marcususers Hexadecane 226.4412 226.2660511 18 287 avogadro-1.1.1/fragments/heteroaromatics/0000755000175000001440000000000012250371054017703 5ustar marcususersavogadro-1.1.1/fragments/heteroaromatics/1_2-thiazole.cml0000644000175000001440000000357112250371054022604 0ustar marcususers 1,2-Thiazole 85.1276 84.9986201 avogadro-1.1.1/fragments/heteroaromatics/benzothiophene.cml0000644000175000001440000000613412250371054023425 0ustar marcususers Benzothiophene 134.1982 134.0190212 32 221 avogadro-1.1.1/fragments/heteroaromatics/1_3-thiazole.cml0000644000175000001440000000405012250371054022576 0ustar marcususers 1,3-Thiazole 85.1276 84.9986201 117 avogadro-1.1.1/fragments/heteroaromatics/furan.cml0000644000175000001440000000421212250371054021512 0ustar marcususers Furan 68.0740 68.0262147 31 avogadro-1.1.1/fragments/heteroaromatics/nicotinic_acid.cml0000644000175000001440000000545712250371054023352 0ustar marcususers Pyridine-3-carboxylic acid 123.1094 123.0320284 236 avogadro-1.1.1/fragments/heteroaromatics/1H-pyrazole.cml0000644000175000001440000000451712250371054022522 0ustar marcususers 1H-Pyrazole 68.0773 68.0374481 69 187 avogadro-1.1.1/fragments/heteroaromatics/isonicotinic_acid.cml0000644000175000001440000000545512250371054024063 0ustar marcususers Pyridine-4-carboxylic acid 123.1094 123.0320284 315 avogadro-1.1.1/fragments/heteroaromatics/1H-pyrrole.cml0000644000175000001440000000467612250371054022357 0ustar marcususers 1H-Pyrrole 67.0892 67.0421992 -23 130 avogadro-1.1.1/fragments/heteroaromatics/1_2-oxazole.cml0000644000175000001440000000404512250371054022443 0ustar marcususers 1,2-Oxazole 69.0620 69.0214637 95 avogadro-1.1.1/fragments/heteroaromatics/1H-indole.cml0000644000175000001440000000631512250371054022125 0ustar marcususers 1H-Indole 117.1479 117.0578492 52 254 avogadro-1.1.1/fragments/heteroaromatics/picolinamide.cml0000644000175000001440000000564012250371054023042 0ustar marcususers Pyridine-2-carboxamide 122.1246 122.0480128 109 avogadro-1.1.1/fragments/heteroaromatics/picolinic_acid.cml0000644000175000001440000000545612250371054023343 0ustar marcususers Pyridine-2-carboxylic acid 123.1094 123.0320284 139 avogadro-1.1.1/fragments/heteroaromatics/1_3-oxazole.cml0000644000175000001440000000404412250371054022443 0ustar marcususers 1,3-Oxazole 69.0620 69.0214637 69 avogadro-1.1.1/fragments/heteroaromatics/isonicotinamide.cml0000644000175000001440000000564012250371054023563 0ustar marcususers Pyridine-4-carboxamide 122.1246 122.0480128 156 avogadro-1.1.1/fragments/heteroaromatics/pyridine.cml0000644000175000001440000000506712250371054022233 0ustar marcususers Pyridine 79.0999 79.0421992 -42 115 avogadro-1.1.1/fragments/heteroaromatics/thiophene.cml0000644000175000001440000000447612250371054022376 0ustar marcususers Thiophene 84.1396 84.0033711 -38 84 avogadro-1.1.1/fragments/heteroaromatics/benzofuran.cml0000644000175000001440000000564612250371054022564 0ustar marcususers Benzofuran 118.1326 118.0418648 174 avogadro-1.1.1/fragments/heteroaromatics/nicotinamide.cml0000644000175000001440000000563612250371054023055 0ustar marcususers Pyridine-3-carboxamide 122.1246 122.0480128 129 avogadro-1.1.1/fragments/ketones/0000755000175000001440000000000012250371054016162 5ustar marcususersavogadro-1.1.1/fragments/ketones/cyclohexanone.cml0000644000175000001440000000643412250371054021525 0ustar marcususers Cyclohexanone 98.1430 98.0731649 -47 155 avogadro-1.1.1/fragments/ketones/p-benzoquinone.cml0000644000175000001440000000506212250371054021633 0ustar marcususers Cyclohexa-2,5-diene-1,4-dione 108.0948 108.0211294 113 avogadro-1.1.1/fragments/ketones/acetone.cml0000644000175000001440000000462412250371054020303 0ustar marcususers Propanone 58.0791 58.0418648 -94 56 avogadro-1.1.1/fragments/ketones/butanone.cml0000644000175000001440000000540212250371054020473 0ustar marcususers Butanone 72.1057 72.0575149 -87 79 avogadro-1.1.1/fragments/ketones/methyl_vinyl_ketone.cml0000644000175000001440000000503212250371054022747 0ustar marcususers But-3-en-2-one 70.0898 70.0418648 -7 80 avogadro-1.1.1/fragments/fatty_acids/0000755000175000001440000000000012250371054017004 5ustar marcususersavogadro-1.1.1/fragments/fatty_acids/decanoic_acid.cml0000644000175000001440000001210012250371054022220 0ustar marcususers Decanoic acid 172.2646 172.1463299 31 269 avogadro-1.1.1/fragments/fatty_acids/octanoic_acid.cml0000644000175000001440000001053012250371054022257 0ustar marcususers Octanoic acid 144.2114 144.1150298 16 237 avogadro-1.1.1/fragments/fatty_acids/hexanoic_acid.cml0000644000175000001440000000716412250371054022267 0ustar marcususers Hexanoic acid 116.1583 116.0837296 -4 202 avogadro-1.1.1/fragments/fatty_acids/oleic_acid.cml0000644000175000001440000001711312250371054021557 0ustar marcususers (Z)-Octadec-9-enoic acid 282.4614 282.2558803 13 avogadro-1.1.1/fragments/fatty_acids/arachidonic_acid.cml0000644000175000001440000001754712250371054022743 0ustar marcususers (5Z,8Z,11Z,14Z)-Icosa-5,8,11,14-tetraenoic acid 304.4669 304.2402303 -49 170 avogadro-1.1.1/fragments/fatty_acids/myristic_acid.cml0000644000175000001440000001454712250371054022337 0ustar marcususers Tetradecanoic acid 228.3709 228.2089301 53 avogadro-1.1.1/fragments/fatty_acids/cervonic_acid.cml0000644000175000001440000001745712250371054022307 0ustar marcususers (4Z,7Z,10Z,13Z,16Z,19Z)-Docosa-4,7,10,13,16,19-hexaenoic acid 328.4883 328.2402303 avogadro-1.1.1/fragments/fatty_acids/linoleic_acid.cml0000644000175000001440000001705012250371054022262 0ustar marcususers (9Z,12Z)-Octadeca-9,12-dienoic acid 280.4455 280.2402303 -5 229 avogadro-1.1.1/fragments/fatty_acids/linolenic_acid.cml0000644000175000001440000001576112250371054022447 0ustar marcususers (9Z,12Z,15Z)-Octadeca-9,12,15-trienoic acid 278.4296 278.2245802 avogadro-1.1.1/fragments/fatty_acids/stearic_acid.cml0000644000175000001440000001773312250371054022126 0ustar marcususers Octadecanoic acid 284.4772 284.2715304 68 361 avogadro-1.1.1/fragments/fatty_acids/pentanoic_acid.cml0000644000175000001440000000640612250371054022447 0ustar marcususers Pentanoic acid 102.1317 102.0680796 -19 185 avogadro-1.1.1/fragments/fatty_acids/palmitic_acid.cml0000644000175000001440000001637212250371054022274 0ustar marcususers Hexadecanoic acid 256.4241 256.2402303 62 271 avogadro-1.1.1/fragments/fatty_acids/lauric_acid.cml0000644000175000001440000001317412250371054021746 0ustar marcususers Dodecanoic acid 200.3178 200.1776300 45 avogadro-1.1.1/fragments/ligands/0000755000175000001440000000000012250371054016133 5ustar marcususersavogadro-1.1.1/fragments/ligands/Cp-cyclopentadienyl.cml0000644000175000001440000000244412250371054022542 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/0000755000175000001440000000000012250371054016656 5ustar marcususersavogadro-1.1.1/fragments/fullerenes/PC70BM.cml0000644000175000001440000003164712250371054020256 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C78.cml0000644000175000001440000002535312250371054017724 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C60-buckminsterfullerene.cml0000644000175000001440000002076412250371054024142 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C50.cml0000644000175000001440000001564512250371054017715 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C26.cml0000644000175000001440000000722312250371054017711 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C180.cml0000644000175000001440000006152112250371054017773 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C36.cml0000644000175000001440000001200612250371054017705 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C20.cml0000644000175000001440000000552412250371054017705 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C30.cml0000644000175000001440000001030312250371054017675 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C70.cml0000644000175000001440000002322712250371054017712 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/PCBM.cml0000644000175000001440000002720412250371054020101 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C80.cml0000644000175000001440000002601212250371054017706 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C24.cml0000644000175000001440000000660212250371054017707 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C240.cml0000644000175000001440000010255312250371054017771 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C32.cml0000644000175000001440000001073512250371054017710 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C28.cml0000644000175000001440000000766012250371054017720 0ustar marcususers avogadro-1.1.1/fragments/fullerenes/C76.cml0000644000175000001440000002473012250371054017720 0ustar marcususers avogadro-1.1.1/fragments/cyclic_alkenes/0000755000175000001440000000000012250371054017462 5ustar marcususersavogadro-1.1.1/fragments/cyclic_alkenes/cyclopentene.cml0000644000175000001440000000546412250371054022660 0ustar marcususers Cyclopentene 68.1170 68.0626003 -135 45 avogadro-1.1.1/fragments/cyclic_alkenes/cyclopenta-1_3-diene.cml0000644000175000001440000000511212250371054023761 0ustar marcususers Cyclopenta-1,3-diene 66.1011 66.0469502 -97 40 avogadro-1.1.1/fragments/cyclic_alkenes/Z-cycloheptene.cml0000644000175000001440000000656212250371054023061 0ustar marcususers (Z)-Cycloheptene 96.1702 96.0939004 113 avogadro-1.1.1/fragments/cyclic_alkenes/cyclohepta-1_3_5-triene.cml0000644000175000001440000000610312250371054024402 0ustar marcususers Cyclohepta-1,3,5-triene 92.1384 92.0626003 -80 116 avogadro-1.1.1/fragments/cyclic_alkenes/cyclohexa-1_4-diene.cml0000644000175000001440000000567512250371054023616 0ustar marcususers Cyclohexa-1,4-diene 80.1277 80.0626003 -49 87 avogadro-1.1.1/fragments/cyclic_alkenes/cyclohexa-1_3-diene.cml0000644000175000001440000000542012250371054023601 0ustar marcususers Cyclohexa-1,3-diene 80.1277 80.0626003 80 avogadro-1.1.1/fragments/cyclic_alkenes/cycloocta-1_3_5-triene.cml0000644000175000001440000000615012250371054024231 0ustar marcususers Cycloocta-1,3,5-triene 106.1650 106.0782503 avogadro-1.1.1/fragments/cyclic_alkenes/cycloocta-1_3_5_7-tetraene.cml0000644000175000001440000000635212250371054025004 0ustar marcususers Cycloocta-1,3,5,7-tetraene 104.1491 104.0626003 -27 142 avogadro-1.1.1/fragments/cyclic_alkenes/cycloocta-1_3-diene.cml0000644000175000001440000000725712250371054023614 0ustar marcususers Cycloocta-1,3-diene 108.1809 108.0939004 -55 143 avogadro-1.1.1/fragments/cyclic_alkenes/cyclohepta-1_4-diene.cml0000644000175000001440000000572212250371054023763 0ustar marcususers Cyclohepta-1,4-diene 94.1543 94.0782503 avogadro-1.1.1/fragments/cyclic_alkenes/cyclohexene.cml0000644000175000001440000000624612250371054022475 0ustar marcususers Cyclohexene 82.1436 82.0782503 -104 82 avogadro-1.1.1/fragments/cyclic_alkenes/Z-cyclooctene.cml0000644000175000001440000000762512250371054022707 0ustar marcususers (Z)-Cyclooctene 110.1968 110.1095504 -16 145 avogadro-1.1.1/fragments/cyclic_alkenes/cyclohepta-1_3-diene.cml0000644000175000001440000000620712250371054023761 0ustar marcususers Cyclohepta-1,3-diene 94.1543 94.0782503 120 avogadro-1.1.1/fragments/cyclic_sugars/0000755000175000001440000000000012250371054017344 5ustar marcususersavogadro-1.1.1/fragments/cyclic_sugars/beta-D-gulopyranose.cml0000644000175000001440000000564212250371054023671 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-galactopyranose.cml0000644000175000001440000000563612250371054024512 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-rhamnopyranose.cml0000644000175000001440000000545612250371054024212 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-mannopyranose.cml0000644000175000001440000000563512250371054024035 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-arabinopyranose.cml0000644000175000001440000000467712250371054024345 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-tagatopyranose.cml0000644000175000001440000000563512250371054024204 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-L-ribopyranose.cml0000644000175000001440000000467612250371054024046 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-idopyranose.cml0000644000175000001440000000563512250371054023652 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-L-xylopyranose.cml0000644000175000001440000000470612250371054024100 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-L-rhamnopyranose.cml0000644000175000001440000000545512250371054024373 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-L-lyxopyranose.cml0000644000175000001440000000470412250371054024076 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-idopyranose.cml0000644000175000001440000000563712250371054023502 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-L-fucopyranose.cml0000644000175000001440000000544712250371054024044 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-psicopyranose.cml0000644000175000001440000000562412250371054024212 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-fructopyranose.cml0000644000175000001440000000563612250371054024230 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-L-sorbopyranose.cml0000644000175000001440000000562512250371054024232 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-rhamnopyranose.cml0000644000175000001440000000544212250371054024357 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-gulopyranose.cml0000644000175000001440000000563212250371054024042 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-L-arabinopyranose.cml0000644000175000001440000000471212250371054024515 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-talopyranose.cml0000644000175000001440000000564312250371054023663 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-L-arabinopyranose.cml0000644000175000001440000000470612250371054024346 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-lyxopyranose.cml0000644000175000001440000000470312250371054023713 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-glucuronopyranose.cml0000644000175000001440000000534712250371054025114 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-glucopyranose.cml0000644000175000001440000000562112250371054024203 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-mannopyranose.cml0000644000175000001440000000564312250371054024206 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-L-xylopyranose.cml0000644000175000001440000000470512250371054023725 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-galacturonopyranose.cml0000644000175000001440000000534412250371054025412 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-lyxopyranose.cml0000644000175000001440000000470212250371054024064 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-ribopyranose.cml0000644000175000001440000000470212250371054023652 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-ribopyranose.cml0000644000175000001440000000470512250371054024027 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-xylopyranose.cml0000644000175000001440000000470212250371054024064 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-L-lyxopyranose.cml0000644000175000001440000000470312250371054023723 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-galactopyranose.cml0000644000175000001440000000564512250371054024340 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-tagatopyranose.cml0000644000175000001440000000563712250371054024360 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-allopyranose.cml0000644000175000001440000000563012250371054023647 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-talopyranose.cml0000644000175000001440000000563712250371054024040 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-glucopyranose.cml0000644000175000001440000000563112250371054024032 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-fucopyranose.cml0000644000175000001440000000543612250371054023660 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-fucopyranose.cml0000644000175000001440000000544612250371054024033 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-arabinopyranose.cml0000644000175000001440000000470712250371054024511 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-L-galactopyranose.cml0000644000175000001440000000563712250371054024523 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-D-xylopyranose.cml0000644000175000001440000000470312250371054023713 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/beta-L-ribopyranose.cml0000644000175000001440000000467612250371054023674 0ustar marcususers avogadro-1.1.1/fragments/cyclic_sugars/alpha-D-allopyranose.cml0000644000175000001440000000562512250371054024025 0ustar marcususers avogadro-1.1.1/fragments/cyclic_alkanes/0000755000175000001440000000000012250371054017456 5ustar marcususersavogadro-1.1.1/fragments/cyclic_alkanes/norbornane.cml0000644000175000001440000000663412250371054022327 0ustar marcususers Bicyclo[2.2.1]heptane 96.1702 96.0939004 86 avogadro-1.1.1/fragments/cyclic_alkanes/1R-camphor.cml0000644000175000001440000001066412250371054022073 0ustar marcususers (1R,4S)-1,7,7-Trimethylnorbornan-2-one 152.2334 152.1201151 180 avogadro-1.1.1/fragments/cyclic_alkanes/cyclohexane.cml0000644000175000001440000000662312250371054022464 0ustar marcususers Cyclohexane 84.1595 84.0939004 5 80 avogadro-1.1.1/fragments/cyclic_alkanes/abietic_acid.cml0000644000175000001440000001676012250371054022545 0ustar marcususers Abietic acid 302.4510 302.2245802 173 avogadro-1.1.1/fragments/cyclic_alkanes/cyclodecane.cml0000644000175000001440000001126212250371054022426 0ustar marcususers Cyclodecane 140.2658 140.1565006 201 avogadro-1.1.1/fragments/cyclic_alkanes/cyclooctane.cml0000644000175000001440000000771712250371054022472 0ustar marcususers Cyclooctane 112.2126 112.1252005 150 avogadro-1.1.1/fragments/cyclic_alkanes/cyclohexane-chair.cml0000644000175000001440000000421012250371054023536 0ustar marcususers avogadro-1.1.1/fragments/cyclic_alkanes/trans-decahydronaphthalene.cml0000644000175000001440000001126512250371054025457 0ustar marcususers trans-Decahydronaphthalene 138.2499 138.1408506 -31 186 avogadro-1.1.1/fragments/cyclic_alkanes/cycloheptane.cml0000644000175000001440000000741212250371054022635 0ustar marcususers Cycloheptane 98.1861 98.1095504 -12 118 avogadro-1.1.1/fragments/cyclic_alkanes/cyclobutane.cml0000644000175000001440000000306212250371054022464 0ustar marcususers avogadro-1.1.1/fragments/cyclic_alkanes/cyclopropane.cml0000644000175000001440000000230612250371054022652 0ustar marcususers avogadro-1.1.1/fragments/cyclic_alkanes/cyclohexane-twist-boat.cml0000644000175000001440000000441012250371054024547 0ustar marcususers avogadro-1.1.1/fragments/cyclic_alkanes/adamantane.cml0000644000175000001440000000604612250371054022252 0ustar marcususers avogadro-1.1.1/fragments/cyclic_alkanes/cis-decahydronaphthalene.cml0000644000175000001440000001126212250371054025103 0ustar marcususers cis-Decahydronaphthalene 138.2499 138.1408506 -43 194 avogadro-1.1.1/fragments/cyclic_alkanes/1R-camphene.cml0000644000175000001440000001075412250371054022222 0ustar marcususers (1R,4S)-2,2-Dimethyl-3-methylidenenorbornane 136.2340 136.1252005 37 159 avogadro-1.1.1/fragments/cyclic_alkanes/cubane.cml0000644000175000001440000000576612250371054021426 0ustar marcususers Cubane 104.1491 104.0626003 avogadro-1.1.1/fragments/cyclic_alkanes/cyclopentane.cml0000644000175000001440000000605012250371054022640 0ustar marcususers Cyclopentane 70.1329 70.0782503 -94 50 avogadro-1.1.1/fragments/cyclic_alkanes/cyclononane.cml0000644000175000001440000001021612250371054022463 0ustar marcususers Cyclononane 126.2392 126.1408506 avogadro-1.1.1/fragments/thiols/0000755000175000001440000000000012250371054016014 5ustar marcususersavogadro-1.1.1/fragments/thiols/proprane-1-thiol.cml0000644000175000001440000000523112250371054021613 0ustar marcususers Proprane-1-thiol 76.1606 76.0346713 -113 67 avogadro-1.1.1/fragments/thiols/ethane-1_2-dithiol.cml0000644000175000001440000000465212250371054021775 0ustar marcususers Ethane-1,2-dithiol 94.1990 93.9910922 -41 145 avogadro-1.1.1/fragments/thiols/pentane-1-thiol.cml0000644000175000001440000000657112250371054021427 0ustar marcususers Pentane-1-thiol 104.2138 104.0659714 -76 125 avogadro-1.1.1/fragments/thiols/octane-1-thiol.cml0000644000175000001440000001070312250371054021236 0ustar marcususers Octane-1-thiol 146.2935 146.1129216 -49 198 avogadro-1.1.1/fragments/thiols/methanethiol.cml0000644000175000001440000000366212250371054021201 0ustar marcususers Methanethiol 48.1075 48.0033711 -123 6 avogadro-1.1.1/fragments/thiols/2-methylproprane-2-thiol.cml0000644000175000001440000000602512250371054023200 0ustar marcususers 2-Methylproprane-2-thiol 90.1872 90.0503213 0 64 avogadro-1.1.1/fragments/thiols/heptane-1-thiol.cml0000644000175000001440000001012612250371054021410 0ustar marcususers Heptane-1-thiol 132.2669 132.0972715 -43 176 avogadro-1.1.1/fragments/thiols/butane-1-thiol.cml0000644000175000001440000000600512250371054021243 0ustar marcususers Butane-1-thiol 90.1872 90.0503213 -116 98 avogadro-1.1.1/fragments/thiols/hexane-1-thiol.cml0000644000175000001440000000734612250371054021246 0ustar marcususers Hexane-1-thiol 118.2404 118.0816214 -80 152 avogadro-1.1.1/fragments/thiols/ethanethiol.cml0000644000175000001440000000444012250371054021017 0ustar marcususers Ethanethiol 62.1340 62.0190212 -146 35 avogadro-1.1.1/fragments/thiols/R_butane-2-thiol.cml0000644000175000001440000000525412250371054021532 0ustar marcususers (R)-Butane-2-thiol 90.1872 85 avogadro-1.1.1/fragments/thiols/proprane-2-thiol.cml0000644000175000001440000000523012250371054021613 0ustar marcususers Proprane-2-thiol 76.1606 76.0346713 -131 57 avogadro-1.1.1/fragments/amines/0000755000175000001440000000000012250371054015766 5ustar marcususersavogadro-1.1.1/fragments/amines/azepane.cml0000644000175000001440000000644412250371054020116 0ustar marcususers Azepane 99.1741 99.1047994 avogadro-1.1.1/fragments/amines/pyrrolidine.cml0000644000175000001440000000537212250371054021032 0ustar marcususers Pyrrolidine 71.1210 71.0734993 87 avogadro-1.1.1/fragments/amines/methylamine.cml0000644000175000001440000000405212250371054021000 0ustar marcususers Methanamine 31.0571 31.0421992 -93 -6 avogadro-1.1.1/fragments/amines/1H-azepine.cml0000644000175000001440000000511212250371054020363 0ustar marcususers 1H-Azepine 93.1265 93.0578492 avogadro-1.1.1/fragments/amines/tert-butylamine.cml0000644000175000001440000000621312250371054021612 0ustar marcususers 2-Methylpropan-2-amine 73.1368 73.0891494 -67 45 avogadro-1.1.1/fragments/amines/2-aminopropane.cml0000644000175000001440000000541712250371054021321 0ustar marcususers Propan-2-amine 59.1103 59.0734993 -99 33 avogadro-1.1.1/fragments/amines/S-sec-butylamine.cml0000644000175000001440000000622112250371054021605 0ustar marcususers (2S)-Butan-2-amine 73.1368 73.0891494 -104 63 avogadro-1.1.1/fragments/amines/diethylamine.cml0000644000175000001440000000620512250371054021142 0ustar marcususers N-Ethylethanamine 73.1368 73.0891494 -49 55 avogadro-1.1.1/fragments/amines/triethylamine.cml0000644000175000001440000000755612250371054021356 0ustar marcususers N,N-Diethylethanamine 101.1900 101.1204495 -115 89 avogadro-1.1.1/fragments/amines/ethylamine.cml0000644000175000001440000000463012250371054020625 0ustar marcususers Ethanamine 45.0837 45.0578492 -81 16 avogadro-1.1.1/fragments/amines/ammonia.cml0000644000175000001440000000325212250371054020106 0ustar marcususers Azane 17.0305 17.0265491 -78 -33 avogadro-1.1.1/fragments/amines/piperidine.cml0000644000175000001440000000643112250371054020617 0ustar marcususers Piperidine 85.1475 85.0891494 -13 106 avogadro-1.1.1/fragments/amines/dimethylamine.cml0000644000175000001440000000464312250371054021323 0ustar marcususers N-Methylmethanamine 45.0837 45.0578492 -93 7 avogadro-1.1.1/fragments/amines/trimethylamine.cml0000644000175000001440000000543512250371054021525 0ustar marcususers N,N-Dimethylmethanamine 59.1103 59.0734993 -117 3 avogadro-1.1.1/fragments/amines/triethylenediamine.cml0000644000175000001440000000705012250371054022350 0ustar marcususers 1,4-Diazabicyclo[2.2.2]octane 112.1729 112.1000484 157 avogadro-1.1.1/fragments/amines/piperazine.cml0000644000175000001440000000624312250371054020636 0ustar marcususers Piperazine 86.1356 86.0843983 110 145 avogadro-1.1.1/fragments/steroids/0000755000175000001440000000000012250371054016346 5ustar marcususersavogadro-1.1.1/fragments/steroids/estradiol.cml0000644000175000001440000001305112250371054021031 0ustar marcususers avogadro-1.1.1/fragments/steroids/testosterone.cml0000644000175000001440000001344212250371054021605 0ustar marcususers avogadro-1.1.1/fragments/steroids/cholesterol.cml0000644000175000001440000002224512250371054021373 0ustar marcususers avogadro-1.1.1/fragments/macrocycles/0000755000175000001440000000000012250371054017016 5ustar marcususersavogadro-1.1.1/fragments/macrocycles/porphin.cml0000644000175000001440000001335512250371054021201 0ustar marcususers Porphyrin 310.3520 310.1218465 avogadro-1.1.1/fragments/macrocycles/phthalocyanine.cml0000644000175000001440000001607612250371054022533 0ustar marcususers avogadro-1.1.1/fragments/carbohydrates/0000755000175000001440000000000012250371054017344 5ustar marcususersavogadro-1.1.1/fragments/carbohydrates/d-arabinose.cml0000644000175000001440000000647112250371054022235 0ustar marcususers (2S,3R,4R)-2,3,4,5-Tetrahydroxypentanal 150.1299 150.0528234 avogadro-1.1.1/fragments/carbohydrates/d-sorbose.cml0000644000175000001440000000745712250371054021753 0ustar marcususers (3R,4S,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-erythrulose.cml0000644000175000001440000000547612250371054022663 0ustar marcususers (3R)-1,3,4-Trihydroxybutan-2-one 120.1039 120.0422587 avogadro-1.1.1/fragments/carbohydrates/d-allose.cml0000644000175000001440000000773212250371054021552 0ustar marcususers (2R,3R,4R,5R)-2,3,4,5,6-Pentahydroxyhexanal 180.1559 180.0633881 144 avogadro-1.1.1/fragments/carbohydrates/d-glyceraldehyde.cml0000644000175000001440000000451412250371054023253 0ustar marcususers (2R)-2,3-Dihydroxypropanal 90.0779 90.0316941 avogadro-1.1.1/fragments/carbohydrates/d-idose.cml0000644000175000001440000000746112250371054021375 0ustar marcususers (2S,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-ribulose.cml0000644000175000001440000000646512250371054022121 0ustar marcususers (3R,4R)-1,3,4,5-Tetrahydroxypentan-2-one 150.1299 150.0528234 avogadro-1.1.1/fragments/carbohydrates/d-xylulose.cml0000644000175000001440000000646512250371054022161 0ustar marcususers (3S,4R)-1,3,4,5-Tetrahydroxypentan-2-one 150.1299 150.0528234 avogadro-1.1.1/fragments/carbohydrates/d-fructose.cml0000644000175000001440000000747112250371054022125 0ustar marcususers (3S,4R,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-ribose.cml0000644000175000001440000000646412250371054021557 0ustar marcususers (2R,3R,4R)-2,3,4,5-Tetrahydroxypentanal 150.1299 150.0528234 avogadro-1.1.1/fragments/carbohydrates/d-altrose.cml0000644000175000001440000000745012250371054021741 0ustar marcususers (2S,3R,4R,5R)-2,3,4,5,6-Pentahydroxyhexanal 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-threose.cml0000644000175000001440000000547512250371054021746 0ustar marcususers (2S,3R)-2,3,4-Trihydroxybutanal 120.1039 120.0422587 avogadro-1.1.1/fragments/carbohydrates/d-glucose.cml0000644000175000001440000000745512250371054021736 0ustar marcususers (2R,3S,4R,5R)-2,3,4,5,6-Pentahydroxyhexanal 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-mannose.cml0000644000175000001440000000746012250371054021731 0ustar marcususers (2S,3S,4R,5R)-2,3,4,5,6-Pentahydroxyhexanal 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-tagatose.cml0000644000175000001440000000746612250371054022106 0ustar marcususers (3S,4S,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-erythrose.cml0000644000175000001440000000550012250371054022306 0ustar marcususers (2R,3R)-2,3,4-Trihydroxybutanal 120.1039 120.0422587 avogadro-1.1.1/fragments/carbohydrates/d-lyxose.cml0000644000175000001440000000647112250371054021615 0ustar marcususers (2S,3S,4R)-2,3,4,5-Tetrahydroxypentanal 150.1299 150.0528234 avogadro-1.1.1/fragments/carbohydrates/d-talose.cml0000644000175000001440000000745712250371054021566 0ustar marcususers (2S,3S,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-xylose.cml0000644000175000001440000000646412250371054021617 0ustar marcususers (2R,3S,4R)-2,3,4,5-Tetrahydroxypentanal 150.1299 150.0528234 avogadro-1.1.1/fragments/carbohydrates/d-gulose.cml0000644000175000001440000000745212250371054021570 0ustar marcususers (2R,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/dihydroxyacetone.cml0000644000175000001440000000475512250371054023436 0ustar marcususers 1,3-Dihydroxypropan-2-one 90.0779 90.0316941 78 avogadro-1.1.1/fragments/carbohydrates/d-galactose.cml0000644000175000001440000000745512250371054022237 0ustar marcususers (2R,3S,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal 180.1559 180.0633881 avogadro-1.1.1/fragments/carbohydrates/d-psicose.cml0000644000175000001440000000746412250371054021742 0ustar marcususers (3R,4R,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one 180.1559 180.0633881 avogadro-1.1.1/builder/0000755000175000001440000000000012250371054014152 5ustar marcususersavogadro-1.1.1/builder/amino/0000755000175000001440000000000012250371054015255 5ustar marcususersavogadro-1.1.1/builder/amino/d-trp.zmat0000644000175000001440000000316212250371054017202 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244957 N C 1.485937 0.000000 0.000000 1 0 0 0.091665 CA C 1.537258 108.068082 0.000000 2 1 0 0.218042 C O 1.205881 125.382128 156.174550 3 2 1 -0.287197 O C 1.542561 114.895551 122.947312 2 1 3 -0.001660 CB H 1.117305 109.088186 187.164563 5 2 1 0.033366 HB1 H 1.109777 110.530804 301.386796 5 2 1 0.033366 HB2 C 1.482336 111.237326 65.655663 5 2 1 -0.020419 CG C 1.444655 125.743915 68.063797 8 5 2 0.002882 CD1 C 1.435425 106.997686 181.232356 9 8 5 0.046731 NE1 C 1.410996 122.038206 179.215877 10 9 8 -0.037791 HE1 H 1.084530 120.972857 180.507012 11 10 9 0.063821 CE2 C 1.382173 117.098808 0.734064 11 10 9 -0.059784 CD2 H 1.090348 119.916566 180.079608 13 11 10 0.061822 CE3 C 1.421268 121.637648 0.266002 13 11 10 -0.061066 HE3 H 1.088652 118.442053 179.003608 15 13 11 0.061778 CZ3 C 1.383002 121.422504 359.350101 15 13 11 -0.052326 HZ3 H 1.088116 121.369228 179.369861 17 15 13 0.062417 CH2 N 1.403447 107.662961 359.448807 10 9 8 -0.360366 HH2 C 1.388180 126.741668 248.597665 8 5 2 0.005969 CZ2 H 1.075398 129.198074 358.071150 20 8 5 0.080975 HZ2 H 1.000406 125.982118 182.192496 19 10 9 0.165343 HD1 H 1.019404 110.191755 157.186525 1 2 3 0.141371 H H 1.127608 108.385585 244.931869 2 1 3 0.056018 HA avogadro-1.1.1/builder/amino/d-asn.zmat0000644000175000001440000000170212250371054017154 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244805 N C 1.476252 0.000000 0.000000 1 0 0 0.095852 CA C 1.531124 106.398102 0.000000 2 1 0 0.218195 C O 1.202703 129.378511 245.001720 3 2 1 -0.287195 O H 1.131410 108.381581 244.256912 2 1 3 0.056166 CB C 1.543091 115.989371 121.040146 2 1 3 0.047667 HB1 C 1.513673 110.203773 61.953758 6 2 1 0.212446 HB2 H 1.114399 109.695060 180.819790 6 2 1 0.037836 CG H 1.016560 111.351023 167.095054 1 2 3 0.141373 OD1 O 1.217035 124.041678 66.209052 7 6 2 -0.275964 ND2 N 1.396638 116.096967 248.576162 7 6 2 -0.329268 HD21 H 1.108700 110.389241 296.067517 6 2 1 0.037836 HD22 H 1.003298 123.465766 350.700508 11 7 6 0.144930 HA H 1.010714 119.282598 183.833579 11 7 6 0.144930 H avogadro-1.1.1/builder/amino/l-his.zmat0000644000175000001440000000221712250371054017170 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244907 N C 1.461455 0.000000 0.000000 1 0 0 0.092996 CA C 1.535204 108.466997 0.000000 2 1 0 0.218092 C O 1.229175 123.133950 350.254325 3 2 1 -0.287196 O C 1.542266 112.197089 237.427248 2 1 3 0.012996 CB H 1.097200 111.240486 117.657254 5 2 1 0.034791 HB1 H 1.097892 111.009491 0.154276 5 2 1 0.034791 HB2 C 1.491386 111.604353 239.348719 5 2 1 0.037268 CG N 1.375852 122.417829 65.866861 8 5 2 -0.348137 ND1 C 1.364595 107.360508 181.650142 9 8 5 0.093505 CE1 H 1.081709 122.418458 178.926851 10 9 8 0.102652 HE1 N 1.314038 111.561109 359.059524 10 9 8 -0.243987 NE2 C 1.369728 105.455119 359.808060 12 10 9 0.048456 CD2 H 1.082724 121.063231 180.675014 13 12 10 0.084756 HD2 H 1.018137 125.852835 359.167404 9 8 5 0.166484 HD1 H 1.017309 117.087064 8.527894 1 2 3 0.141372 H H 1.098071 106.360809 114.621208 2 1 3 0.056066 HA avogadro-1.1.1/builder/amino/d-asp.zmat0000644000175000001440000000157312250371054017164 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244738 N C 1.482782 0.000000 0.000000 1 0 0 0.097664 CA C 1.534872 114.471371 0.000000 2 1 0 0.218261 C O 1.202765 129.380586 186.756319 3 2 1 -0.287194 O H 1.131139 108.411765 241.160219 2 1 3 0.056230 CB C 1.533825 109.967240 121.727080 2 1 3 0.068649 CG C 1.518562 113.900654 70.431580 6 2 1 0.306677 OD2 H 1.118855 110.000563 191.470407 6 2 1 0.039770 OD1 H 1.020932 111.324555 308.229166 1 2 3 0.141374 HA O 1.362722 118.151332 315.461892 7 6 2 -0.480566 HB1 O 1.205269 124.140862 137.302421 7 6 2 -0.250949 HB2 H 1.112050 111.463426 307.367162 6 2 1 0.039770 HD1 H 1.009281 115.387473 2.952164 10 7 6 0.295052 H avogadro-1.1.1/builder/amino/d-ala.zmat0000644000175000001440000000125512250371054017133 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245562 N C 1.476870 0.000000 0.000000 1 0 0 0.084861 CA C 1.538499 111.699687 0.000000 2 1 0 0.217436 C O 1.207703 129.348104 21.172179 3 2 1 -0.287218 O H 1.127469 108.301021 241.128641 2 1 3 0.055413 H H 1.017794 111.654185 294.669100 1 2 3 0.141350 HA C 1.528100 110.672677 121.026523 2 1 3 -0.041085 CB H 1.097874 111.357391 175.165484 7 2 1 0.024935 HB1 H 1.101438 110.112786 55.964180 7 2 1 0.024935 HB2 H 1.096834 112.687507 296.676601 7 2 1 0.024935 HB3 avogadro-1.1.1/builder/amino/d-arg.zmat0000644000175000001440000000303612250371054017146 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245284 N C 1.481667 0.000000 0.000000 1 0 0 0.087761 CA C 1.529928 105.545788 0.000000 2 1 0 0.217715 C O 1.205646 130.286658 57.614229 3 2 1 -0.287208 O C 1.542707 115.874819 120.040615 2 1 3 -0.026113 C C 1.531084 111.478210 73.171062 5 2 1 -0.020371 H C 1.537074 110.603980 179.765799 6 5 2 0.064706 H N 1.498889 108.685588 179.194061 7 6 5 -0.276142 C C 1.450128 114.105014 181.146931 8 7 6 0.376231 H N 1.431841 113.882234 63.954343 9 8 7 -0.289263 H N 1.298166 119.074381 244.360156 9 8 7 -0.129780 C H 1.015136 111.023959 173.889632 1 2 3 0.141360 H H 1.127731 108.119180 243.933087 2 1 3 0.055691 H H 1.109154 110.119211 310.040602 5 2 1 0.028593 N H 1.110256 109.607752 194.730396 5 2 1 0.028593 H H 1.109448 109.990568 57.845188 6 5 2 0.029620 C H 1.108283 110.834159 301.404336 6 5 2 0.029620 N H 1.112879 110.268363 59.950746 7 6 5 0.065470 H H 1.112989 110.538405 302.387050 7 6 5 0.065470 N H 1.035320 110.553001 56.439623 8 7 6 0.257858 H H 1.011937 115.589032 154.143651 10 9 8 0.254646 H H 1.013845 116.289587 20.925783 10 9 8 0.254646 H H 1.012953 120.630702 187.027441 11 9 8 0.306182 HA avogadro-1.1.1/builder/amino/l-glu.zmat0000644000175000001440000000211112250371054017165 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245273 N C 1.460580 0.000000 0.000000 1 0 0 0.088159 CA C 1.545082 106.332371 0.000000 2 1 0 0.217726 C O 1.231378 122.613212 9.901510 3 2 1 -0.287208 O C 1.535259 111.362485 236.841253 2 1 3 -0.018906 CB H 1.097798 111.199819 343.021876 5 2 1 0.029010 HB1 H 1.097368 110.551974 99.634689 5 2 1 0.029010 HB2 C 1.528416 111.432938 222.853026 5 2 1 0.046636 CG H 1.095108 112.153527 310.061746 8 5 2 0.037803 HG1 H 1.096026 110.179975 68.976780 8 5 2 0.037803 HG2 C 1.500238 110.297716 190.478081 8 5 2 0.304756 CD O 1.220300 125.431325 62.296244 11 8 5 -0.251021 OE2 O 1.342659 113.305811 242.159235 11 8 5 -0.480610 OE1 H 0.979809 104.915204 179.004722 13 11 8 0.295051 HE1 H 1.017621 116.854610 1.551259 1 2 3 0.141360 H H 1.096999 106.969691 114.853957 2 1 3 0.055702 HA avogadro-1.1.1/builder/amino/d-lys.zmat0000644000175000001440000000264012250371054017204 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245286 N C 1.476333 0.000000 0.000000 1 0 0 0.087661 CA C 1.537882 111.664329 0.000000 2 1 0 0.217713 C O 1.207509 129.435495 23.826217 3 2 1 -0.287208 O C 1.542326 111.381360 120.992358 2 1 3 -0.028924 CB C 1.534040 111.277439 68.605732 5 2 1 -0.050050 CG H 1.127214 108.192925 241.344195 2 1 3 0.055690 CD H 1.108258 110.288940 306.354782 5 2 1 0.028494 CE H 1.109628 109.169603 189.971110 5 2 1 0.028494 NZ H 1.110613 109.635201 302.843197 6 5 2 0.026628 HA C 1.532508 111.156445 180.630589 6 5 2 -0.040588 HB1 H 1.017383 111.845728 295.339764 1 2 3 0.141360 HB2 H 1.107666 109.966839 58.451575 6 5 2 0.026628 HG1 H 1.106910 109.884332 59.180823 11 6 5 0.027743 HG2 H 1.106755 109.996155 302.942017 11 6 5 0.027743 HD1 C 1.540394 111.118725 180.990613 11 6 5 -0.006904 HD2 N 1.485356 114.270338 180.420862 16 11 6 -0.329979 HE1 H 1.112963 110.224094 58.749972 16 11 6 0.042179 HE2 H 1.113021 110.188498 302.105620 16 11 6 0.042179 HZ1 H 1.015440 110.906794 59.513388 17 16 11 0.118213 HZ2 H 1.015134 110.926511 300.762453 17 16 11 0.118213 H avogadro-1.1.1/builder/amino/l-pro.zmat0000644000175000001440000000167712250371054017216 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.229034 N C 1.455687 0.000000 0.000000 1 0 0 0.090941 CA C 1.541633 112.289800 0.000000 2 1 0 0.217989 C O 1.226513 124.759827 355.316297 3 2 1 -0.287199 O H 1.096060 109.465011 119.859604 2 1 3 0.055965 HA C 1.447100 112.493640 108.461442 1 2 3 0.014812 CD H 1.095501 108.127757 107.625863 6 1 2 0.044093 HD1 H 1.094018 110.656109 226.870198 6 1 2 0.044093 HD2 C 1.521203 104.227867 348.819966 6 1 2 -0.036968 CG H 1.096685 110.072039 272.506853 9 6 1 0.027862 HG1 H 1.093430 112.604797 151.700321 9 6 1 0.027862 HG2 C 1.529016 103.197849 29.561801 9 6 1 -0.027502 CB H 1.093652 112.022261 199.723275 12 9 6 0.028543 HB1 H 1.097118 109.193355 79.901305 12 9 6 0.028543 HB2 avogadro-1.1.1/builder/amino/d-val.zmat0000644000175000001440000000212112250371054017151 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245026 N C 1.482917 0.000000 0.000000 1 0 0 0.089955 CA C 1.526578 105.880998 0.000000 2 1 0 0.217973 C O 1.205383 129.232375 242.836109 3 2 1 -0.287198 O H 1.126351 108.107859 245.468510 2 1 3 0.055950 CB H 1.018711 110.943956 289.827928 1 2 3 0.141370 CG2 C 1.557080 115.533191 122.195735 2 1 3 -0.022712 CG1 H 1.120368 108.054900 301.105019 7 2 1 0.031517 HA C 1.530035 110.273465 182.599274 7 2 1 -0.060794 H H 1.096352 112.235005 300.139265 9 7 2 0.023293 HB H 1.097074 111.103343 180.248418 9 7 2 0.023293 HG21 H 1.096883 112.083396 61.007768 9 7 2 0.023293 HG22 C 1.530292 110.197606 59.956600 7 2 1 -0.060794 HG23 H 1.096269 111.998079 55.775763 13 7 2 0.023293 HG11 H 1.095195 112.255211 294.191637 13 7 2 0.023293 HG12 H 1.097399 110.870031 174.943719 13 7 2 0.023293 HG13 avogadro-1.1.1/builder/amino/d-met.zmat0000644000175000001440000000221512250371054017160 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245259 N C 1.476314 0.000000 0.000000 1 0 0 0.088400 CA C 1.536321 111.959055 0.000000 2 1 0 0.217740 C O 1.207290 129.335522 22.566012 3 2 1 -0.287208 O C 1.545410 111.051018 120.858787 2 1 3 -0.019936 CB H 1.112875 109.081161 188.744066 5 2 1 0.029282 CG H 1.109523 110.074064 304.526581 5 2 1 0.029282 SD C 1.520821 110.746909 67.140763 5 2 1 -0.004715 CE H 1.108268 111.339421 301.579960 8 5 2 0.037679 HA H 1.109169 111.604395 59.933337 8 5 2 0.037679 HB1 S 1.815430 110.087744 177.702427 8 5 2 -0.164064 HB2 C 1.805813 103.348291 79.652286 11 8 5 -0.018102 HG1 H 1.094426 111.887024 293.595783 12 11 8 0.034049 HG2 H 1.095178 112.021430 56.237455 12 11 8 0.034049 HE1 H 1.098832 107.705692 174.813609 12 11 8 0.034049 HE2 H 1.127018 108.281722 240.973376 2 1 3 0.055716 HE3 H 1.017339 111.724155 297.931003 1 2 3 0.141360 H avogadro-1.1.1/builder/amino/d-glu.zmat0000644000175000001440000000211112250371054017155 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245273 N C 1.477024 0.000000 0.000000 1 0 0 0.088159 CA C 1.536826 111.695597 0.000000 2 1 0 0.217726 C O 1.206904 128.790757 12.750369 3 2 1 -0.287208 O C 1.541612 110.772447 121.587474 2 1 3 -0.018906 CB H 1.112210 109.412033 184.885564 5 2 1 0.029010 HB1 H 1.111283 110.941475 301.026949 5 2 1 0.029010 HB2 C 1.529427 110.686942 63.086947 5 2 1 0.046636 CG H 1.119120 110.319087 304.866524 8 5 2 0.037803 HG1 H 1.112777 111.378042 59.842726 8 5 2 0.037803 HG2 C 1.496554 111.351359 183.070195 8 5 2 0.304756 CD O 1.207671 130.993422 4.365832 11 8 5 -0.251021 OE2 O 1.379438 109.400185 184.094211 11 8 5 -0.480610 OE1 H 0.993887 112.868881 180.581161 13 11 8 0.295051 HE1 H 1.127587 108.402885 241.645385 2 1 3 0.055702 H H 1.018516 111.484062 299.931481 1 2 3 0.141360 HA avogadro-1.1.1/builder/amino/l-met.zmat0000644000175000001440000000221512250371054017170 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245259 N C 1.458667 0.000000 0.000000 1 0 0 0.088400 CA C 1.537285 106.456466 0.000000 2 1 0 0.217740 C O 1.229291 123.240722 331.160976 3 2 1 -0.287208 O C 1.534858 110.556794 238.740009 2 1 3 -0.019936 CB C 1.527386 112.470034 194.845315 5 2 1 -0.004715 CG S 1.821874 110.020147 177.393266 6 5 2 -0.164064 SD C 1.808517 98.714649 183.977616 7 6 5 -0.018102 CE H 1.096512 108.155767 117.316041 2 1 3 0.055716 HA H 1.098626 109.550569 72.152354 5 2 1 0.029282 HB1 H 1.098198 108.957455 315.824362 5 2 1 0.029282 HB2 H 1.094970 110.087862 57.408726 6 5 2 0.037679 HG1 H 1.092832 111.018828 296.837739 6 5 2 0.037679 HG2 H 1.093058 110.411489 300.091797 8 7 6 0.034049 HE1 H 1.093196 109.248884 180.771866 8 7 6 0.034049 HE2 H 1.093101 110.340073 61.538008 8 7 6 0.034049 HE3 H 1.016213 117.484311 29.501931 1 2 3 0.141360 H avogadro-1.1.1/builder/amino/d-pro.zmat0000644000175000001440000000167712250371054017206 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.229034 N C 1.494797 0.000000 0.000000 1 0 0 0.090941 CA C 1.527809 105.550429 0.000000 2 1 0 0.217989 C O 1.207319 127.831292 264.854954 3 2 1 -0.287199 O H 1.119708 111.126227 244.754163 2 1 3 0.055965 HA C 1.497645 106.511727 256.960226 1 2 3 0.014812 CD H 1.113450 107.121032 93.975355 6 1 2 0.044093 HD1 H 1.104278 111.245361 211.055142 6 1 2 0.044093 HD2 C 1.543045 107.518454 335.187732 6 1 2 -0.036968 CG H 1.102488 111.433649 260.424990 9 6 1 0.027862 HG1 H 1.102840 111.028639 141.942923 9 6 1 0.027862 HG2 C 1.540104 105.648687 21.155259 9 6 1 -0.027502 CB H 1.101715 111.422528 229.882964 12 9 6 0.028543 HB1 H 1.106552 110.684738 111.424582 12 9 6 0.028543 HB2 avogadro-1.1.1/builder/amino/l-leu.zmat0000644000175000001440000000243712250371054017176 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245277 N C 1.463223 0.000000 0.000000 1 0 0 0.087893 CA C 1.533994 105.069435 0.000000 2 1 0 0.217722 C O 1.229683 123.171604 316.881425 3 2 1 -0.287208 O H 1.094618 107.524866 117.345376 2 1 3 0.055699 HA H 1.015723 117.379025 31.320512 1 2 3 0.141360 H C 1.536897 109.777708 238.598327 2 1 3 -0.026622 CB H 1.099407 107.701406 311.920537 7 2 1 0.028744 HB1 H 1.098605 109.572821 65.745140 7 2 1 0.028744 HB2 C 1.542911 118.238441 191.352185 7 2 1 -0.044859 CG H 1.099133 105.846496 164.004983 10 7 2 0.029608 HG C 1.527260 113.340440 47.202608 10 7 2 -0.062604 CD1 H 1.095473 110.455676 169.765751 12 10 7 0.023234 HD11 H 1.094953 110.888241 50.456250 12 10 7 0.023234 HD12 H 1.094211 111.889593 289.337003 12 10 7 0.023234 HD13 C 1.527721 113.270466 279.700122 10 7 2 -0.062604 CD2 H 1.095843 110.200508 191.440690 16 10 7 0.023234 HD21 H 1.091303 112.419890 72.039879 16 10 7 0.023234 HD22 H 1.094863 111.028531 310.429783 16 10 7 0.023234 HD23 avogadro-1.1.1/builder/amino/l-gln.zmat0000644000175000001440000000222012250371054017157 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245274 N C 1.457670 0.000000 0.000000 1 0 0 0.088098 CA C 1.537462 106.520523 0.000000 2 1 0 0.217725 C O 1.229094 123.385492 329.429064 3 2 1 -0.287208 O C 1.532586 110.370317 238.618889 2 1 3 -0.020719 CB C 1.528236 113.322049 191.149786 5 2 1 0.025606 CG C 1.513998 111.806988 175.855036 6 5 2 0.210543 CD O 1.223767 124.912998 4.059618 7 6 5 -0.276033 OE1 N 1.364012 114.170062 183.178010 7 6 5 -0.329321 NE2 H 1.096058 108.322216 117.425715 2 1 3 0.055702 HA H 1.016140 117.458055 31.980577 1 2 3 0.141360 H H 1.097737 109.970643 68.242022 5 2 1 0.028949 HB1 H 1.098705 109.210378 312.408537 5 2 1 0.028949 HB2 H 1.095605 110.047342 55.385464 6 5 2 0.035882 HG1 H 1.095264 110.551172 295.523693 6 5 2 0.035882 HG2 H 1.012118 117.469292 179.574619 9 7 6 0.144929 HE21 H 1.009465 123.611549 2.350899 9 7 6 0.144929 HE22 avogadro-1.1.1/builder/amino/d-his.zmat0000644000175000001440000000221712250371054017160 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244907 N C 1.481316 0.000000 0.000000 1 0 0 0.092996 CA C 1.534812 111.105001 0.000000 2 1 0 0.218092 C O 1.208006 128.088474 6.292779 3 2 1 -0.287196 O C 1.544050 110.692836 121.880920 2 1 3 0.012996 CB H 1.113167 110.656398 311.649145 5 2 1 0.034791 HB1 H 1.116180 109.313396 195.513463 5 2 1 0.034791 HB2 C 1.482604 112.198329 74.502662 5 2 1 0.037268 CG N 1.404313 123.489117 309.944871 8 5 2 -0.348137 ND1 H 1.009637 124.734611 4.548647 9 8 5 0.166484 CE1 C 1.405896 106.877293 181.194679 9 8 5 0.093505 HE1 H 1.078521 123.622041 180.217202 11 9 8 0.102652 NE2 N 1.353837 110.490504 0.512121 11 9 8 -0.243987 CD2 C 1.393574 106.543535 359.531599 13 11 9 0.048456 HD2 H 1.075081 121.310279 180.339540 14 13 11 0.084756 HD1 H 1.128782 108.587870 241.379916 2 1 3 0.056066 H H 1.020149 111.187504 303.108365 1 2 3 0.141372 HA avogadro-1.1.1/builder/amino/l-tyr.zmat0000644000175000001440000000264112250371054017224 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244958 N C 1.461658 0.000000 0.000000 1 0 0 0.091600 CA C 1.538177 106.652478 0.000000 2 1 0 0.218041 C O 1.230602 122.922668 340.894490 3 2 1 -0.287197 O C 1.537798 111.274710 238.724246 2 1 3 -0.003640 CB H 1.098209 110.553874 322.220086 5 2 1 0.033301 HB1 H 1.098161 110.310355 78.164913 5 2 1 0.033301 HB2 C 1.511562 113.221693 201.659353 5 2 1 -0.045196 CG C 1.401382 120.857160 256.417067 8 5 2 -0.055064 CD2 H 1.088176 120.640967 358.854167 9 8 5 0.062142 HD2 C 1.395277 120.282152 178.629986 9 8 5 -0.019921 CE2 H 1.086373 120.298075 180.174071 11 9 8 0.065402 HE2 C 1.389775 119.758033 0.601785 11 9 8 0.116879 CZ C 1.390413 120.850227 359.896421 13 11 9 -0.019921 CE1 H 1.085600 121.365394 179.608623 14 13 11 0.065402 HE1 C 1.396108 119.421973 359.702362 14 13 11 -0.055064 CD1 H 1.089967 119.329656 179.834170 16 14 13 0.062142 HD1 O 1.363211 117.734196 179.845122 13 11 9 -0.506769 OH H 0.971482 108.546007 183.568957 18 13 11 0.292132 HH H 1.096925 107.375427 116.219904 2 1 3 0.056017 HA H 1.016774 117.336714 17.397281 1 2 3 0.141371 H avogadro-1.1.1/builder/amino/l-val.zmat0000644000175000001440000000212112250371054017161 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245026 N C 1.460722 0.000000 0.000000 1 0 0 0.089955 CA C 1.541367 106.653362 0.000000 2 1 0 0.217973 C O 1.230236 123.071614 337.584176 3 2 1 -0.287198 O C 1.546399 111.320741 235.037717 2 1 3 -0.022712 CB C 1.531942 113.049118 67.396085 5 2 1 -0.060794 CG2 C 1.530111 112.515742 192.832227 5 2 1 -0.060794 CG1 H 1.097569 107.061831 115.326829 2 1 3 0.055950 HA H 1.016300 117.111696 23.835546 1 2 3 0.141370 H H 1.099012 107.583552 309.700750 5 2 1 0.031517 HB H 1.094454 111.277164 304.370534 6 5 2 0.023293 HG21 H 1.095491 110.457606 185.074773 6 5 2 0.023293 HG22 H 1.095173 111.696361 65.429242 6 5 2 0.023293 HG23 H 1.095582 110.351524 170.238422 7 5 2 0.023293 HG11 H 1.094685 111.009196 51.046132 7 5 2 0.023293 HG12 H 1.094345 111.978283 289.653871 7 5 2 0.023293 HG13 avogadro-1.1.1/builder/amino/l-phe.zmat0000644000175000001440000000253512250371054017164 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244958 N C 1.461709 0.000000 0.000000 1 0 0 0.091600 CA C 1.537853 106.638500 0.000000 2 1 0 0.218041 C O 1.230661 122.976863 340.487290 3 2 1 -0.287197 O C 1.537607 111.283301 238.785057 2 1 3 -0.003643 CB C 1.511324 113.232887 201.308643 5 2 1 -0.045419 CG C 1.401126 120.927051 256.287062 6 5 2 -0.058511 CD2 C 1.395615 120.346144 178.830399 7 6 5 -0.061501 CE2 C 1.393841 120.096714 0.450729 8 7 6 -0.061742 CZ C 1.393512 119.981312 359.997249 9 8 7 -0.061501 CE1 C 1.394960 120.040389 359.688782 10 9 8 -0.058511 CD1 H 1.016627 117.346698 18.039087 1 2 3 0.141371 H H 1.096951 107.420485 116.250431 2 1 3 0.056017 HA H 1.098185 110.299900 77.823589 5 2 1 0.033301 HB1 H 1.098229 110.518262 321.897172 5 2 1 0.033301 HB2 H 1.088190 120.513449 358.949434 7 6 5 0.062030 HD2 H 1.087119 119.992780 179.998527 8 7 6 0.061766 HE2 H 1.086988 120.061077 179.458719 9 8 7 0.061758 HZ H 1.087166 120.075511 179.313896 10 9 8 0.061766 HE1 H 1.089850 119.303202 179.689743 11 10 9 0.062030 HD1 avogadro-1.1.1/builder/amino/d-ile.zmat0000644000175000001440000000244212250371054017146 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245017 N C 1.483492 0.000000 0.000000 1 0 0 0.090195 CA C 1.525817 106.300152 0.000000 2 1 0 0.217982 C O 1.205566 129.171350 238.032971 3 2 1 -0.287198 O H 1.126957 107.802225 245.514511 2 1 3 0.055959 CB H 1.016570 110.775522 174.389878 1 2 3 0.141370 CG1 C 1.557759 115.713684 122.393522 2 1 3 -0.020126 CD1 H 1.119343 108.113661 305.678053 7 2 1 0.031775 HA C 1.530192 109.989321 187.229867 7 2 1 -0.060551 CG2 H 1.097783 111.096531 186.496097 9 7 2 0.023301 HG11 H 1.096405 112.033231 67.121059 9 7 2 0.023301 HG12 H 1.096691 112.168903 306.142482 9 7 2 0.023301 HD11 C 1.542111 109.965475 64.509342 7 2 1 -0.051443 HD12 H 1.107706 110.374740 314.791664 13 7 2 0.026581 HD13 H 1.108565 109.947373 70.814602 13 7 2 0.026581 H C 1.526217 111.971397 193.242316 13 7 2 -0.064974 HB H 1.096166 111.212373 183.822143 16 13 7 0.022987 HG21 H 1.096351 111.745577 63.706641 16 13 7 0.022987 HG22 H 1.097458 111.666837 303.523871 16 13 7 0.022987 HG23 avogadro-1.1.1/builder/amino/l-pyl.zmat0000644000175000001440000000441512250371054017213 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245286 N C 1.463765 0.000000 0.000000 1 0 0 0.087661 CA C 1.542578 106.300047 0.000000 2 1 0 0.217713 C O 1.233129 122.712481 354.921440 3 2 1 -0.287208 O C 1.536890 110.769386 237.913698 2 1 3 -0.028915 C 1.532763 112.298313 218.169904 5 2 1 -0.049780 C 1.530821 111.265862 170.162796 6 5 2 -0.037328 C 1.528803 112.482071 181.263586 7 6 5 0.011637 N 1.434924 112.399650 262.932924 8 7 6 -0.313970 H 1.096288 107.171747 115.751101 2 1 3 0.055690 H 1.097442 110.668602 95.630779 5 2 1 0.028494 H 1.097342 109.994173 338.607139 5 2 1 0.028494 H 1.096998 109.457023 49.773115 6 5 2 0.026637 H 1.092219 109.920204 292.151099 6 5 2 0.026637 H 1.096964 110.169907 57.040285 7 6 5 0.028028 H 1.097081 107.933974 300.510709 7 6 5 0.028028 H 1.095192 109.167670 145.733337 8 7 6 0.046187 H 1.095338 111.809759 26.425596 8 7 6 0.046187 C 1.370964 126.258065 89.170460 9 8 7 0.231886 H 1.026754 122.009781 251.919110 9 8 7 0.148724 O 1.230290 123.758762 351.272664 19 9 8 -0.274034 C 1.543455 112.478317 173.785870 19 9 8 0.104223 C 2.390761 111.053222 58.792302 22 19 9 -0.029963 C 1.517110 38.705869 103.110230 23 22 19 -0.016921 H 1.100822 108.009262 113.818678 24 23 22 0.031886 C 1.519919 113.121899 232.747850 24 23 22 -0.060439 C 1.492842 67.877801 251.673122 23 22 19 0.043401 H 1.095528 106.685201 357.131337 23 22 19 0.028445 H 1.094128 141.659540 154.373201 23 22 19 0.028445 N 1.350984 113.745155 3.216317 27 23 22 -0.222620 H 1.097723 106.168594 221.852897 22 19 9 0.057506 H 1.084161 120.519284 177.351931 27 23 22 0.049285 H 1.094700 110.659934 177.445474 26 24 23 0.023303 H 1.095160 110.301302 296.710881 26 24 23 0.023303 H 1.094822 112.029910 56.323223 26 24 23 0.023303 H 1.015951 116.659895 13.870656 1 2 3 0.141360 avogadro-1.1.1/builder/amino/l-trp.zmat0000644000175000001440000000316212250371054017212 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244957 N C 1.463574 0.000000 0.000000 1 0 0 0.091665 CA C 1.538223 106.297567 0.000000 2 1 0 0.218042 C O 1.231011 122.950058 341.183045 3 2 1 -0.287197 O C 1.536170 111.512692 239.071904 2 1 3 -0.001660 CB H 1.098262 110.019574 76.428400 5 2 1 0.033366 HB1 H 1.097969 110.059093 320.404545 5 2 1 0.033366 HB2 C 1.500531 113.672003 199.504042 5 2 1 -0.020419 CG C 1.381678 126.813557 256.212497 8 5 2 0.005969 CD1 N 1.369342 108.342205 180.856649 9 8 5 -0.360366 NE1 H 1.010605 125.362536 178.974025 10 9 8 0.165343 HE1 C 1.374935 110.229501 0.020172 10 9 8 0.046731 CE2 C 1.394771 107.120018 0.208146 12 10 9 0.002882 CD2 C 1.409962 118.515240 179.323076 13 12 10 -0.052326 CE3 H 1.087801 120.668920 180.357073 14 13 12 0.062417 HE3 C 1.399486 119.477062 359.909072 14 13 12 -0.061066 CZ3 H 1.087406 119.377001 180.418328 16 14 13 0.061778 HZ3 C 1.392544 120.655241 0.142252 16 14 13 -0.059784 CH2 H 1.087656 119.499244 180.274088 18 16 14 0.061822 HH2 C 1.398066 120.993445 359.965393 18 16 14 -0.037791 CZ2 H 1.084956 120.734043 180.393514 20 18 16 0.063821 HZ2 H 1.082497 131.171863 0.025556 9 8 5 0.080975 HD1 H 1.016682 117.156810 17.587355 1 2 3 0.141371 H H 1.096740 107.591084 116.302469 2 1 3 0.056018 HA avogadro-1.1.1/builder/amino/d-phe.zmat0000644000175000001440000000253512250371054017154 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244958 N C 1.490544 0.000000 0.000000 1 0 0 0.091600 CA C 1.538140 105.737751 0.000000 2 1 0 0.218041 C O 1.203591 124.440628 304.179213 3 2 1 -0.287197 O C 1.541243 108.829879 123.066529 2 1 3 -0.003643 CB H 1.112012 110.259339 204.221762 5 2 1 0.033301 CG H 1.115255 109.288896 319.897068 5 2 1 0.033301 CD2 C 1.504651 111.034777 81.927805 5 2 1 -0.045419 CE2 C 1.402313 119.984775 259.040589 8 5 2 -0.058511 CZ H 1.089738 120.080524 359.123153 9 8 5 0.062030 CE1 C 1.397547 120.002448 179.371774 9 8 5 -0.061501 CD1 H 1.089402 119.800757 179.803200 11 9 8 0.061766 H C 1.398093 120.194558 359.874011 11 9 8 -0.061742 HA H 1.088577 120.081639 180.180112 13 11 9 0.061758 HB1 C 1.398790 119.850802 0.315368 13 11 9 -0.061501 HB2 H 1.089349 119.850861 179.782858 15 13 11 0.061766 HD2 C 1.396989 120.216447 359.814054 15 13 11 -0.058511 HE2 H 1.088449 119.791914 179.672250 17 15 13 0.062030 HZ H 1.127655 113.347091 244.578617 2 1 3 0.056017 HE1 H 1.020506 110.724546 57.496302 1 2 3 0.141371 HD1 avogadro-1.1.1/builder/amino/l-ser.zmat0000644000175000001440000000136112250371054017175 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.242989 N C 1.461241 0.000000 0.000000 1 0 0 0.110570 CA C 1.538860 107.132158 0.000000 2 1 0 0.220016 C O 1.230365 123.132914 358.745512 3 2 1 -0.287123 O H 1.097270 108.262001 115.987612 2 1 3 0.057995 HA C 1.534550 112.587886 238.350872 2 1 3 0.068103 CB H 1.093821 110.956057 308.840453 6 2 1 0.057743 1HB H 1.096502 111.146269 69.137346 6 2 1 0.057743 2HB O 1.432672 110.965390 189.337350 6 2 1 -0.392982 OG H 0.975351 106.214433 165.155840 9 6 2 0.209479 HG H 1.017157 116.682867 2.654999 1 2 3 0.141446 H avogadro-1.1.1/builder/amino/l-thr.zmat0000644000175000001440000000170412250371054017202 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.242718 N C 1.465626 0.000000 0.000000 1 0 0 0.113126 CA C 1.536574 105.991501 0.000000 2 1 0 0.220298 C O 1.230023 122.996034 333.730560 3 2 1 -0.287112 O C 2.562283 144.461782 226.751209 2 1 3 -0.037002 CG2 C 1.525379 33.835750 19.971688 5 2 1 0.076258 CB O 1.435346 106.146797 236.310829 6 5 2 -0.390029 OG1 H 1.095886 143.942191 10.368047 5 2 1 0.025505 HG21 H 1.095697 90.324881 250.957428 5 2 1 0.025505 HG22 H 1.092438 95.799577 142.002886 5 2 1 0.025505 HG23 H 1.096269 108.811300 122.211852 6 5 2 0.061081 HB H 1.096724 107.138871 116.966001 2 1 3 0.058278 HA H 0.980479 108.541932 99.771737 7 6 5 0.209848 HG1 H 1.016673 117.297288 24.509154 1 2 3 0.141456 H avogadro-1.1.1/builder/amino/l-lys.zmat0000644000175000001440000000264012250371054017214 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245286 N C 1.459393 0.000000 0.000000 1 0 0 0.087661 CA C 1.537672 106.336501 0.000000 2 1 0 0.217713 C O 1.229837 123.227953 331.496556 3 2 1 -0.287208 O C 1.535060 110.372261 238.164665 2 1 3 -0.028924 CB C 1.531314 113.836266 185.561189 5 2 1 -0.050050 CG C 1.531595 111.227291 172.438450 6 5 2 -0.040588 CD C 1.528038 111.240051 176.230006 7 6 5 -0.006904 CE N 1.457086 110.332149 178.516026 8 7 6 -0.329979 NZ H 1.096504 108.181007 117.239114 2 1 3 0.055690 HA H 1.098059 109.714858 63.032582 5 2 1 0.028494 HB1 H 1.097766 108.930102 307.109066 5 2 1 0.028494 HB2 H 1.096488 109.865841 51.099389 6 5 2 0.026628 HG1 H 1.095478 109.820539 293.059055 6 5 2 0.026628 HG2 H 1.097377 109.512162 54.771009 7 6 5 0.027743 HD1 H 1.097445 109.318754 297.704958 7 6 5 0.027743 HD2 H 1.095155 110.197444 58.012815 8 7 6 0.042179 HE1 H 1.095641 110.131205 299.292074 8 7 6 0.042179 HE2 H 1.019091 109.537734 175.981666 9 8 7 0.118213 HZ1 H 1.019298 109.886289 59.525834 9 8 7 0.118213 HZ2 H 1.016043 117.249529 26.480655 1 2 3 0.141360 H avogadro-1.1.1/builder/amino/l-sec.zmat0000644000175000001440000000135712250371054017163 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 0.000000 N C 1.465578 0.000000 0.000000 1 0 0 0.000000 CA C 1.540418 105.891536 0.000000 2 1 0 0.000000 C O 1.230946 122.856752 349.177701 3 2 1 0.000000 O H 1.097477 107.137842 116.232112 2 1 3 0.000000 HA C 1.534386 111.391877 238.241360 2 1 3 0.000000 C H 1.094231 110.767291 314.226133 6 2 1 0.000000 H Se 1.827297 113.514658 194.319804 6 2 1 0.000000 SE H 1.096542 110.667145 72.771773 6 2 1 0.000000 H H 1.342296 96.303940 171.147318 8 6 2 0.000000 H H 1.017627 116.966593 8.434510 1 2 3 0.000000 H avogadro-1.1.1/builder/amino/l-asn.zmat0000644000175000001440000000170212250371054017164 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244805 N C 1.465155 0.000000 0.000000 1 0 0 0.095852 CA C 1.540861 105.832768 0.000000 2 1 0 0.218195 C O 1.231681 122.799421 341.112543 3 2 1 -0.287195 O C 1.528383 111.051162 239.705032 2 1 3 0.047667 CB H 1.096800 110.373707 311.147531 5 2 1 0.037836 HB1 H 1.096938 110.573507 70.106502 5 2 1 0.037836 HB2 C 1.510264 112.295335 191.669499 5 2 1 0.212446 CG O 1.226134 124.696866 2.845358 8 5 2 -0.275964 OD1 N 1.363521 114.400623 184.433394 8 5 2 -0.329268 ND2 H 1.011076 123.052441 353.504036 10 8 5 0.144930 HD21 H 1.012312 118.079471 181.567412 10 8 5 0.144930 HD22 H 1.096515 107.876626 116.790805 2 1 3 0.056166 HA H 1.017471 116.947991 12.951755 1 2 3 0.141373 H avogadro-1.1.1/builder/amino/d-tyr.zmat0000644000175000001440000000264112250371054017214 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244958 N C 1.480833 0.000000 0.000000 1 0 0 0.091600 CA C 1.528790 106.214453 0.000000 2 1 0 0.218041 C O 1.205711 130.378984 55.542040 3 2 1 -0.287197 O C 1.546546 115.506141 120.238516 2 1 3 -0.003640 CB H 1.111072 109.874924 187.435781 5 2 1 0.033301 HB1 H 1.110411 110.062040 302.232678 5 2 1 0.033301 HB2 C 1.501288 111.057666 65.667887 5 2 1 -0.045196 CG C 1.406912 120.233635 255.084816 8 5 2 -0.055064 CD2 H 1.090664 120.006566 359.768808 9 8 5 0.062142 HD2 C 1.391500 120.722244 180.146715 9 8 5 -0.019921 CE2 H 1.088152 121.962416 179.702625 11 9 8 0.065402 HE2 C 1.405748 118.379457 359.936433 11 9 8 0.116879 CZ C 1.401779 122.162812 0.044131 13 11 9 -0.019921 CE1 H 1.085244 121.108719 179.923895 14 13 11 0.065402 HE1 C 1.396118 118.300278 0.064659 14 13 11 -0.055064 CD1 H 1.090332 119.227292 179.816935 16 14 13 0.062142 HD1 O 1.373933 115.150104 180.035788 13 11 9 -0.506769 OH H 0.988327 112.215925 180.022664 18 13 11 0.292132 HH H 1.127794 107.867120 243.306007 2 1 3 0.056017 HA H 1.017797 110.484171 176.007696 1 2 3 0.141371 H avogadro-1.1.1/builder/amino/l-asp.zmat0000644000175000001440000000157312250371054017174 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244738 N C 1.464243 0.000000 0.000000 1 0 0 0.097664 CA C 1.541394 105.985586 0.000000 2 1 0 0.218261 C O 1.230332 122.919563 346.159967 3 2 1 -0.287194 O C 1.528099 111.190482 239.384736 2 1 3 0.068649 CB C 1.501192 111.338126 198.329447 5 2 1 0.306677 CG O 1.220745 127.170586 352.124212 6 5 2 -0.250949 OD2 O 1.346659 112.071294 174.518541 6 5 2 -0.480566 OD1 H 1.096681 107.628841 116.349617 2 1 3 0.056230 HA H 1.095938 110.929313 77.286619 5 2 1 0.039770 HB1 H 1.096171 110.286662 317.130367 5 2 1 0.039770 HB2 H 0.980127 105.316883 179.847914 8 6 5 0.295052 HD1 H 1.017651 117.155973 12.691431 1 2 3 0.141374 H avogadro-1.1.1/builder/amino/gly.zmat0000644000175000001440000000073212250371054016747 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.248615 N C 1.446753 0.000000 0.000000 1 0 0 0.076579 CA C 1.525408 109.991008 0.000000 2 1 0 0.214368 C O 1.228553 123.570933 0.143827 3 2 1 -0.287527 O H 1.095290 108.752861 120.242869 2 1 3 0.052081 HA1 H 1.093697 108.828575 239.617228 2 1 3 0.052081 HA2 H 1.016065 117.695182 359.839395 1 2 3 0.141033 H avogadro-1.1.1/builder/amino/d-leu.zmat0000644000175000001440000000243712250371054017166 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245277 N C 1.486992 0.000000 0.000000 1 0 0 0.087893 CA C 1.539162 107.764424 0.000000 2 1 0 0.217722 C O 1.205895 125.278508 158.918115 3 2 1 -0.287208 O C 1.536111 114.940208 122.689502 2 1 3 -0.026622 HA H 1.113977 109.147732 197.924489 5 2 1 0.028744 H H 1.106875 110.274518 312.068484 5 2 1 0.028744 CB C 1.542464 112.801929 75.861792 5 2 1 -0.044859 HB1 C 1.533459 109.777371 191.375398 8 5 2 -0.062604 HB2 H 1.096299 111.859345 300.121590 9 8 5 0.023234 CG H 1.096034 111.173945 180.599806 9 8 5 0.023234 HG H 1.095075 111.849803 60.734059 9 8 5 0.023234 CD1 C 1.533079 111.048548 68.782148 8 5 2 -0.062604 HD11 H 1.128161 108.655622 245.395864 2 1 3 0.055699 HD12 H 1.017211 110.690265 156.416595 1 2 3 0.141360 HD13 H 1.118386 108.980633 309.517345 8 5 2 0.029608 CD2 H 1.095349 111.341696 179.800543 13 8 5 0.023234 HD21 H 1.096829 111.722399 60.231702 13 8 5 0.023234 HD22 H 1.095092 111.835033 300.051037 13 8 5 0.023234 HD23 avogadro-1.1.1/builder/amino/l-arg.zmat0000644000175000001440000000320012250371054017147 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245287 N C 1.460033 0.000000 0.000000 1 0 0 0.087598 CA C 1.539554 106.312610 0.000000 2 1 0 0.217712 C O 1.230154 122.878841 338.203794 3 2 1 -0.287208 O C 1.535936 110.553877 238.223887 2 1 3 -0.030554 CB H 1.097867 110.007613 72.158757 5 2 1 0.028431 1HB H 1.097312 109.398137 315.825045 5 2 1 0.028431 2HB C 1.528672 113.258329 194.910836 5 2 1 -0.063684 CG H 1.096999 110.097377 50.045580 8 5 2 0.024875 1HG H 1.095110 110.235680 292.387836 8 5 2 0.024875 2HG C 1.525231 111.480325 171.320725 8 5 2 -0.067992 CD H 1.094751 111.003662 59.552416 11 8 5 0.008551 1HD H 1.093892 110.417900 298.964474 11 8 5 0.008551 2HD N 1.462863 108.210798 178.109030 11 8 5 0.408051 NE H 1.016892 117.401948 315.255651 14 11 8 -0.051997 HE C 1.356669 125.348935 136.455894 14 11 8 0.055476 CZ N 1.305481 129.699692 179.371234 16 14 11 -0.355338 NH1 H 1.028814 157.338515 178.875795 17 15 14 0.102032 HH1 H 1.028814 120.050000 0.500000 17 16 14 0.102032 1HH1 N 1.268681 129.658960 0.439459 16 14 11 -0.325793 NH2 H 1.003605 121.825737 0.411366 20 16 14 0.118110 1HH2 H 1.008513 117.473869 180.154058 20 16 14 0.118110 2HH2 H 1.017157 117.178252 17.311168 1 2 3 0.141360 H H 1.096476 107.659390 116.924543 2 1 3 0.055689 HA avogadro-1.1.1/builder/amino/d-thr.zmat0000644000175000001440000000170412250371054017172 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.242718 N C 1.475189 0.000000 0.000000 1 0 0 0.113126 CA C 1.527524 115.391522 0.000000 2 1 0 0.220298 C O 1.206152 129.362142 165.993159 3 2 1 -0.287112 O O 2.464145 77.827537 125.083660 2 1 3 -0.390029 CG2 C 1.421585 36.636855 182.563376 5 2 1 0.076258 CB C 1.521791 110.943414 236.522592 6 5 2 -0.037002 OG1 H 0.986121 91.106714 56.687267 5 2 1 0.209848 HG21 H 1.118121 101.784228 117.865671 6 5 2 0.061081 HG22 H 1.095524 112.580962 65.925301 7 6 5 0.025505 HG23 H 1.099792 110.317304 306.659685 7 6 5 0.025505 HB H 1.098326 111.591456 187.792403 7 6 5 0.025505 HA H 1.130129 106.902531 242.730935 2 1 3 0.058278 HG1 H 1.020990 110.739340 287.621003 1 2 3 0.141456 H avogadro-1.1.1/builder/amino/l-ile.zmat0000644000175000001440000000244212250371054017156 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245017 N C 1.460254 0.000000 0.000000 1 0 0 0.090195 CA C 1.540797 106.651570 0.000000 2 1 0 0.217982 C O 1.229883 123.127388 332.591761 3 2 1 -0.287198 O C 1.551121 111.774242 234.931769 2 1 3 -0.020126 CB C 1.542726 111.721594 186.890554 5 2 1 -0.051443 CG1 C 1.523498 113.438523 165.207627 6 5 2 -0.064974 CD1 H 1.097720 107.025731 115.386374 2 1 3 0.055959 HA C 1.535313 112.200886 61.008994 5 2 1 -0.060551 CG2 H 1.096677 109.415446 44.734571 6 5 2 0.026581 HG11 H 1.096030 110.383670 287.081365 6 5 2 0.026581 HG12 H 1.093497 111.761455 64.243664 7 6 5 0.022987 HD11 H 1.094463 110.998656 302.919238 7 6 5 0.022987 HD12 H 1.094934 109.939233 183.554576 7 6 5 0.022987 HD13 H 1.016184 117.091843 25.544165 1 2 3 0.141370 H H 1.098874 107.048370 304.183493 5 2 1 0.031775 HB H 1.094341 111.117090 187.813493 9 5 2 0.023301 HG21 H 1.094626 111.571604 67.468596 9 5 2 0.023301 HG22 H 1.094793 111.333899 306.589155 9 5 2 0.023301 HG23 avogadro-1.1.1/builder/amino/d-gln.zmat0000644000175000001440000000222012250371054017147 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245274 N C 1.477642 0.000000 0.000000 1 0 0 0.088098 CA C 1.539379 111.148919 0.000000 2 1 0 0.217725 C O 1.206287 128.077011 277.173472 3 2 1 -0.287208 O C 1.539195 111.168244 123.793826 2 1 3 -0.020719 CB H 1.112280 109.560237 191.743459 5 2 1 0.028949 CG H 1.109603 110.183616 307.101345 5 2 1 0.028949 CD C 1.529476 110.992071 70.144847 5 2 1 0.025606 OE1 H 1.110597 110.418333 302.351956 8 5 2 0.035882 NE2 H 1.112706 110.492315 58.289067 8 5 2 0.035882 HA C 1.515188 110.457287 177.758012 8 5 2 0.210543 H O 1.218405 124.156058 264.844138 11 8 5 -0.276033 HB1 N 1.395707 116.234833 84.911119 11 8 5 -0.329321 HB2 H 1.008148 119.777853 180.377236 13 11 8 0.144929 HG1 H 1.002020 123.556467 359.805749 13 11 8 0.144929 HG2 H 1.129433 107.831512 243.844307 2 1 3 0.055702 HE21 H 1.015335 112.133752 297.034003 1 2 3 0.141360 HE22 avogadro-1.1.1/builder/amino/l-cys.zmat0000644000175000001440000000136112250371054017202 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244472 N C 1.465578 0.000000 0.000000 1 0 0 0.096333 CA C 1.540418 105.891536 0.000000 2 1 0 0.218528 C O 1.230946 122.856752 349.177701 3 2 1 -0.287179 O H 1.097477 107.137842 116.232112 2 1 3 0.056504 HA C 1.534386 111.391877 238.241360 2 1 3 0.014675 CB H 1.094231 110.767291 314.226133 6 2 1 0.039379 HB1 S 1.827297 113.514658 194.319804 6 2 1 -0.176229 SG H 1.096542 110.667145 72.771773 6 2 1 0.039379 HB2 H 1.342296 96.303940 171.147318 8 6 2 0.101693 HG H 1.017627 116.966593 8.434510 1 2 3 0.141390 H avogadro-1.1.1/builder/amino/d-ser.zmat0000644000175000001440000000136112250371054017165 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.242989 N C 1.484374 0.000000 0.000000 1 0 0 0.110570 CA C 1.535451 108.531258 0.000000 2 1 0 0.220016 CB O 1.205718 124.730095 155.137540 3 2 1 -0.287123 OG H 1.126613 108.309211 244.636596 2 1 3 0.057995 HA H 1.020871 110.603658 279.024394 1 2 3 0.141446 C C 1.544573 114.135193 123.143441 2 1 3 0.068103 H 1 O 1.428181 108.859336 61.377421 7 2 1 -0.392982 H 2 H 1.107758 112.476804 307.336097 7 2 1 0.057743 O H 1.106074 111.690650 184.686753 7 2 1 0.057743 H H 0.979674 110.836134 77.881044 8 7 2 0.209479 H avogadro-1.1.1/builder/amino/d-cys.zmat0000644000175000001440000000136112250371054017172 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.244472 N C 1.478143 0.000000 0.000000 1 0 0 0.096333 CA C 1.538028 111.567327 0.000000 2 1 0 0.218528 C O 1.207082 128.901033 16.295499 3 2 1 -0.287179 O C 1.528540 109.771016 121.124767 2 1 3 0.014675 HA S 1.816614 108.899648 65.563556 5 2 1 -0.176229 CB H 1.130324 108.998082 241.160784 2 1 3 0.056504 HB1 H 1.106801 112.244149 303.425876 5 2 1 0.039379 SG H 1.110461 111.112665 183.695478 5 2 1 0.039379 HB2 H 1.354868 99.318624 312.988701 6 5 2 0.101693 HG H 1.020348 111.577655 307.781947 1 2 3 0.141390 H avogadro-1.1.1/builder/amino/l-ala.zmat0000644000175000001440000000125612250371054017144 0ustar marcususersN 0.000000 0.000000 0.000000 0 0 0 -0.245562 N C 1.455745 0.000000 0.000000 1 0 0 0.084861 CA C 1.537725 107.969264 0.000000 2 1 0 0.217436 C O 1.229748 123.258070 350.442981 3 2 1 -0.287218 O H 1.016440 119.145476 5.903920 1 2 3 0.141350 HN H 1.096144 108.251210 117.229845 2 1 3 0.055413 HA C 1.524187 111.304862 238.310204 2 1 3 -0.041085 CB H 1.094860 111.235435 301.463986 7 2 1 0.024935 1HB H 1.095760 111.034005 61.334934 7 2 1 0.024935 2HB H 1.095143 111.286059 181.153334 7 2 1 0.024935 3HB avogadro-1.1.1/scripts/0000755000175000001440000000000012250371054014213 5ustar marcususersavogadro-1.1.1/scripts/setup-for-development.sh0000755000175000001440000000571012250371054021021 0ustar marcususers#!/usr/bin/env bash # Run this script to set up your clone of Avogadro for development. # Set up user name and email address setup_git_user() { read -ep "Please enter your full name, e.g. 'John E. Doe': " name echo "Name: '$name'" git config user.name "$name" read -ep "Please enter your email address, e.g. 'john@doe.com': " email echo "Email address: '$email'" git config user.email "$email" } # Infinite loop until confirmation information is correct for (( ; ; )) do # Display the final user information. gitName=$(git config user.name) gitEmail=$(git config user.email) echo "Your commits will have the following author information: $gitName <$gitEmail> " read -ep "Is the name and email address above correct? [Y/n] " correct if [ "$correct" == "n" ] || [ "$correct" == "N" ]; then setup_git_user else break fi done # Set up gerrit remote gerrit_user() { read -ep "Enter your gerrit user (Gerrit Settings/Profile) [$USER]: " gu if [ "$gu" == "" ]; then gu=$USER fi echo -e "\nConfiguring 'gerrit' remote with user '$gu'..." if git config remote.gerrit.url >/dev/null; then # Correct the remote url git remote set-url gerrit ssh://$gu@review.source.kitware.com/avogadro || \ die "Could not set gerrit remote." else # Add a new one git remote add gerrit ssh://$gu@review.source.kitware.com/avogadro || \ die "Could not add gerrit remote." fi cat << EOF For more information on working with Gerrit, http://avogadro.openmolecules.net/wiki/Working_with_Gerrit EOF } # Make sure we are inside the repository. cd "$(echo "$0"|sed 's/[^/]*$//')" for (( ; ; )) do echo "The configured Gerrit remote URL is:" echo git config remote.gerrit.url gu=`git config remote.gerrit.url | sed -e 's/^ssh:\/\///' | sed -e 's/@review.source.kitware.com\/avogadro//'` echo read -ep "Is the username and URL correct? [Y/n]: " correct if [ "$correct" == "n" ] || [ "$correct" == "N" ]; then gerrit_user else echo "If you have not done so, you should fetch the gerrit hook." echo echo "scp -p $gu@review.source.kitware.com:hooks/commit-msg .git/hooks/" echo break fi done cat << EOF Setting up some useful git aliases for you. This can be used by typing git and the alias name. You can inspect all aliases in this script, or by reading .git/config in your clone. prepush - view a short form of the commits about to be pushed, relative to origin/master gerrit-push - push the current topic branch to Gerrit for code review. gerrit-push-1-0 - push the current topic branch for review if intended for 1.0 branch EOF git config alias.prepush 'log --graph --stat origin/master..' git_branch="\$(git symbolic-ref HEAD | sed -e 's|^refs/heads/||')" git config alias.gerrit-push "!sh -c \"git push gerrit HEAD:refs/for/master/${git_branch}\"" git config alias.gerrit-push-1-0 "!sh -c \"git push gerrit HEAD:refs/for/1.0/${git_branch}\"" avogadro-1.1.1/scripts/extract-application-messages.sh0000755000175000001440000000606412250371054022340 0ustar marcususers#!/bin/sh BASEDIR="../avogadro/avogadro" # root of translatable sources PROJECT="avogadro" # project name PACKAGE="Avogadro" # user-readable package name # user-readable version MAJORVERSION=`grep 'set(Avogadro_VERSION_MAJOR' CMakeLists.txt | cut -f 2 -d ' ' | cut -f 1 -d ')'` MINORVERSION=`grep 'set(Avogadro_VERSION_MINOR' CMakeLists.txt | cut -f 2 -d ' ' | cut -f 1 -d ')'` PATCHVERSION=`grep 'set(Avogadro_VERSION_PATCH' CMakeLists.txt | cut -f 2 -d ' ' | cut -f 1 -d ')'` VERSION="${MAJORVERSION}.${MINORVERSION}.${PATCHVERSION}" BUGADDR="avogadro-devel@lists.sourceforge.net" # MSGID-Bugs WDIR=`pwd` # working dir I18NDIR="i18n/avogadro" # i18n dir echo "Preparing rc files" cd ${BASEDIR} # we use simple sorting to make sure the lines do not jump around too much from system to system find . -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' | sort > ${WDIR}/rcfiles.list cat ${WDIR}/rcfiles.list | xargs ${WDIR}/scripts/extractrc.sh > ${WDIR}/rc.cpp # additional string for KAboutData echo 'i18nc("NAME OF TRANSLATORS","Your names");' >> ${WDIR}/rc.cpp echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp cd ${WDIR} echo "Done preparing rc files" echo "Extracting messages" cd ${BASEDIR} # see above on sorting find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | sort > ${WDIR}/infiles.list echo "rc.cpp" >> ${WDIR}/infiles.list cd ${WDIR} xgettext --from-code=UTF-8 -C -T --qt -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ -ktrUtf8:1,2c -ktr:1,1t -ktr:1,2c,2t -ktr:1,1,2c,3t -ktrUtf8:1 \ --package-name=${PACKAGE} --package-version=${VERSION} \ --msgid-bugs-address="${BUGADDR}" --foreign-user --copyright-holder="The Avogadro Project" \ --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } echo "Done extracting messages" # Replace some boilerplate strings sed -e "s/SOME DESCRIPTIVE TITLE/Translations for the Avogadro molecular editor/" <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e 's/Copyright (C) YEAR/Copyright (C) 2006-2010/' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e 's/as the PACKAGE package/as the Avogadro package/' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e 's/^#. i18n: .\//#: /' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e '/^#: rc.cpp/ d' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e 's/rc\.cpp//' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot mv ${PROJECT}.pot ${I18NDIR} cd ${I18NDIR} echo "Merging translations" catalogs=`find . -name "*.po"` for cat in $catalogs; do echo $cat # remove any \r escapes sed -e 's/\\r//' <$cat >$cat.new mv $cat.new $cat msgmerge -o $cat.new $cat ${PROJECT}.pot mv $cat.new $cat msgmerge -U $cat ${PROJECT}.pot done echo "Done merging translations" echo "Cleaning up" cd ${WDIR} rm rcfiles.list rm infiles.list rm rc.cpp echo "Done" avogadro-1.1.1/scripts/gitlog2changelog.py0000755000175000001440000001017212250371054020010 0ustar marcususers#!/usr/bin/python # Copyright 2008 Marcus D. Hanwell # Distributed under the terms of the GNU General Public License v2 or later import string, re, os # Execute git log with the desired command line options. fin = os.popen('git log --summary --stat --no-merges --date=short', 'r') # Create a ChangeLog file in the current directory. fout = open('ChangeLog', 'w') # Set up the loop variables in order to locate the blocks we want authorFound = False dateFound = False messageFound = False filesFound = False message = "" messageNL = False files = "" prevAuthorLine = "" # The main part of the loop for line in fin: # The commit line marks the start of a new commit object. if string.find(line, 'commit') >= 0: # Start all over again... authorFound = False dateFound = False messageFound = False messageNL = False message = "" filesFound = False files = "" continue # Match the author line and extract the part we want elif re.match('Author:', line) >=0: authorList = re.split(': ', line, 1) author = authorList[1] author = author[0:len(author)-1] authorFound = True # Match the date line elif re.match('Date:', line) >= 0: dateList = re.split(': ', line, 1) date = dateList[1] date = date[0:len(date)-1] dateFound = True # The svn-id lines are ignored elif re.match(' git-svn-id:', line) >= 0: continue # The sign off line is ignored too elif re.search('Signed-off-by', line) >= 0: continue # Extract the actual commit message for this commit elif authorFound & dateFound & messageFound == False: # Find the commit message if we can if len(line) == 1: if messageNL: messageFound = True else: messageNL = True elif len(line) == 4: messageFound = True else: if len(message) == 0: message = message + line.strip() else: message = message + " " + line.strip() # If this line is hit all of the files have been stored for this commit elif re.search('files changed', line) >= 0: filesFound = True continue # Collect the files for this commit. FIXME: Still need to add +/- to files elif authorFound & dateFound & messageFound: fileList = re.split(' \| ', line, 2) if len(fileList) > 1: if len(files) > 0: files = files + ", " + fileList[0].strip() else: files = fileList[0].strip() # All of the parts of the commit have been found - write out the entry if authorFound & dateFound & messageFound & filesFound: # First the author line, only outputted if it is the first for that # author on this day authorLine = date + " " + author if len(prevAuthorLine) == 0: fout.write(authorLine + "\n") elif authorLine == prevAuthorLine: pass else: fout.write("\n" + authorLine + "\n") # Assemble the actual commit message line(s) and limit the line length # to 80 characters. commitLine = "* " + files + ": " + message i = 0 commit = "" while i < len(commitLine): if len(commitLine) < i + 78: commit = commit + "\n " + commitLine[i:len(commitLine)] break index = commitLine.rfind(' ', i, i+78) if index > i: commit = commit + "\n " + commitLine[i:index] i = index+1 else: commit = commit + "\n " + commitLine[i:78] i = i+79 # Write out the commit line fout.write(commit + "\n") #Now reset all the variables ready for a new commit block. authorFound = False dateFound = False messageFound = False messageNL = False message = "" filesFound = False files = "" prevAuthorLine = authorLine # Close the input and output lines now that we are finished. fin.close() fout.close() avogadro-1.1.1/scripts/extract-doc-messages.sh0000755000175000001440000000015312250371054020573 0ustar marcususers#!/bin/sh echo "Generating documentation .pot" xml2po -e -o ../i18n/avogadro-doc.pot ../doc/index.docbook avogadro-1.1.1/scripts/find-translators.sh0000755000175000001440000000062212250371054020044 0ustar marcususers#!/bin/sh # This can probably all be done in python, but this works for x in i18n/*.po; do # Finding e-mail addresses # msggrep --no-wrap -w 20480 --msgctxt -e 'EMAIL OF TRANSLATORS' $x | grep msgstr | grep "@" # Finding names msggrep --no-wrap -w 20480 --msgctxt -e 'NAME OF TRANSLATORS' $x | grep msgstr done | python ./scripts/find-po-email.py | sort -b -f -u | grep -v "Launchpad Contributions" avogadro-1.1.1/scripts/runkrazy.rb0000644000175000001440000000156112250371054016430 0ustar marcususers#!/usr/bin/env ruby # Small Ruby-script to run Krazy over all directories # # (c) 2007, 2008 Carsten Niehaus # # License: GPL V2 # in OpenSUSE 10.x # export PATH=$PATH:/usr/local/Krazy2/bin # in Mandriva 2008.1 # export PATH=$PATH:/usr/local/Krazy2/local/bin def dir2filename( dir ) dir = dir.gsub( "/", "-" ) dir end directories = [ "libavogadro/src" , "libavogadro/src/tools", "libavogadro/src/engines" , "libavogadro/src/extensions", "libavogadro/src/colors", "avogadro/src", "avogadro/src/projectdelegates"] for dir in directories dir.chomp! filename = dir2filename( dir ) command = "krazy2 --export text --explain --exclude qclasses,license,copyright ../#{dir}/*.{cpp,h} > #{filename}.txt" puts command puts "Running Krazy on #{dir}".center(70, "-") puts "Results are written in #{filename}.txt".center(70, "-") `#{command}` end avogadro-1.1.1/scripts/find-po-email.py0000755000175000001440000000052012250371054017206 0ustar marcususers#!/usr/bin/env python import sys, string emails = [] for line in sys.stdin.readlines(): cleanedLine = string.strip(string.strip(string.lstrip(line, "msgstr")), '"') for address in string.split(cleanedLine, ','): if (len(address)): emails.append(address) emails.sort() for email in emails: print email avogadro-1.1.1/scripts/clean-po.sh0000755000175000001440000000021712250371054016250 0ustar marcususers#!/bin/sh echo "Stripping obsolete PO translations" for x in *.po; do msgattrib --no-obsolete -o ${x}.new ${x} mv ${x}.new ${x} done avogadro-1.1.1/scripts/extract-library-messages.sh0000755000175000001440000000622412250371054021477 0ustar marcususers#!/bin/sh BASEDIR="../avogadro/libavogadro" # root of translatable sources PROJECT="libavogadro" # project name PACKAGE="Avogadro" # user-readable package name # user-readable version MAJORVERSION=`grep 'set(Avogadro_VERSION_MAJOR' CMakeLists.txt | cut -f 2 -d ' ' | cut -f 1 -d ')'` MINORVERSION=`grep 'set(Avogadro_VERSION_MINOR' CMakeLists.txt | cut -f 2 -d ' ' | cut -f 1 -d ')'` PATCHVERSION=`grep 'set(Avogadro_VERSION_PATCH' CMakeLists.txt | cut -f 2 -d ' ' | cut -f 1 -d ')'` VERSION="${MAJORVERSION}.${MINORVERSION}.${PATCHVERSION}" BUGADDR="avogadro-devel@lists.sourceforge.net" # MSGID-Bugs WDIR=`pwd` # working dir I18NDIR="i18n/libavogadro" # i18n dir echo "Preparing rc files" cd ${BASEDIR} # we use simple sorting to make sure the lines do not jump around too much from system to system find . -name '*.rc' -o -name '*.ui' -o -name '*.kcfg' | grep -v 'test' | grep -v 'example' | sort > ${WDIR}/rcfiles.list cat ${WDIR}/rcfiles.list | xargs ${WDIR}/scripts/extractrc.sh > ${WDIR}/rc.cpp # additional string for KAboutData echo 'i18nc("NAME OF TRANSLATORS","Your names");' >> ${WDIR}/rc.cpp echo 'i18nc("EMAIL OF TRANSLATORS","Your emails");' >> ${WDIR}/rc.cpp cd ${WDIR} echo "Done preparing rc files" echo "Extracting messages" cd ${BASEDIR} # see above on sorting find . -name '*.cpp' -o -name '*.h' -o -name '*.c' | grep -v 'test' | grep -v "example" | sort > ${WDIR}/infiles.list echo "rc.cpp" >> ${WDIR}/infiles.list cd ${WDIR} xgettext --from-code=UTF-8 -C -T --qt -kde -ci18n -ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 -ktr2i18n:1 \ -kI18N_NOOP:1 -kI18N_NOOP2:1c,2 -kaliasLocale -kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \ -ktrUtf8:1,2c -ktr:1,1t -ktr:1,2c,2t -ktr:1,1,2c,3t -ktrUtf8:1 \ --package-name=${PACKAGE} --package-version=${VERSION} \ --msgid-bugs-address="${BUGADDR}" --foreign-user --copyright-holder="The Avogadro Project" \ --files-from=infiles.list -D ${BASEDIR} -D ${WDIR} -o ${PROJECT}.pot || { echo "error while calling xgettext. aborting."; exit 1; } echo "Done extracting messages" # Replace some boilerplate strings sed -e "s/SOME DESCRIPTIVE TITLE/Translations for the Avogadro molecular library libavogadro/" <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e 's/Copyright (C) YEAR/Copyright (C) 2006-2010/' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e 's/as the PACKAGE package/as the Avogadro package/' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e 's/^#. i18n: .\//#: /' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e '/^#: rc.cpp/ d' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot sed -e 's/rc\.cpp//' <${PROJECT}.pot >${PROJECT}.new mv ${PROJECT}.new ${PROJECT}.pot mv ${PROJECT}.pot ${I18NDIR} cd ${I18NDIR} echo "Merging translations" catalogs=`find . -name '*.po'` for cat in $catalogs; do # remove any \r escapes sed -e 's/\\r//' <$cat >$cat.new mv $cat.new $cat echo $cat msgmerge -o $cat.new $cat ${PROJECT}.pot mv $cat.new $cat msgmerge -U $cat ${PROJECT}.pot done echo "Done merging translations" echo "Cleaning up" cd ${WDIR} rm rcfiles.list rm infiles.list rm rc.cpp echo "Done" avogadro-1.1.1/scripts/cmake-msvc2008.bat0000644000175000001440000000316712250371054017252 0ustar marcususers@echo off SET build_system="NMake Makefiles" SET build_type="Release" REM requires NSIS (http://nsis.sourceforge.net)! SET cpack_options=-DCPACK_BINARY_NSIS:=ON -DCPACK_BINARY_ZIP:=OFF REM General SET PATH=%PATH%;C:\src\qt-4.5.1\bin SET openbabel_dir=C:\src\openbabel-2.2.1 SET openbabel_lib=%openbabel_dir%\output\Release\openbabel-2.lib SET eigen2_dir=C:\src\eigen-2.0.1 REM GLSL Support SET glew_dir=C:\src\glew\include SET glew_lib=C:\src\glew\lib\glew32.lib REM Python Support SET python_dir=C:\src\Python-2.6.2 SET python_include=%python_dir%\Include SET python_lib=%python_dir%\libs\python26.lib SET python_exe=%python_dir%\libs\python.exe SET boost_dir=C:\src\boost_1_38_0 REM Run cmake with GLSL & Python support cmake.exe .. -DOPENBABEL2_INCLUDE_DIR=%openbabel_dir%\include -DOPENBABEL2_LIBRARIES=%openbabel_lib% -DEIGEN2_INCLUDE_DIR=%eigen2_dir% -DGLEW_INCLUDE_DIR=%glew_dir% -DGLEW_LIBRARY=%glew_lib% -DENABLE_GLSL:=ON -DPYTHON_INCLUDE_PATH=%python_include% -DPYTHON_LIBRARY=%python_lib% -DPYTHON_EXECUTABLE=%python_exe% -DBOOST_ROOT=%boost_dir% -DCMAKE_BUILD_TYPE=%build_type% -G %build_system% REM Run cmake with GLSL (no python) REM cmake.exe .. -DOPENBABEL2_INCLUDE_DIR=%openbabel_dir%\include -DOPENBABEL2_LIBRARIES=%openbabel_lib% -DEIGEN2_INCLUDE_DIR=%eigen2_dir% -DGLEW_INCLUDE_DIR=%glew_dir% -DGLEW_LIBRARY=%glew_lib% -DENABLE_GLSL:=ON -DCMAKE_BUILD_TYPE=%build_type% -G %build_system% REM Run cmake without GLSL & python support REM cmake.exe .. -DOPENBABEL2_INCLUDE_DIR=%openbabel_dir%\include -DOPENBABEL2_LIBRARIES=%openbabel_lib% -DEIGEN2_INCLUDE_DIR=%eigen2_dir% -DCMAKE_BUILD_TYPE=%build_type% -G %build_system% avogadro-1.1.1/scripts/extractrc.sh0000755000175000001440000003141212250371054016552 0ustar marcususers#! /usr/bin/env perl ### TODO: other copyrights, license? # Copyright (c) 2004 Richard Evans sub usage { warn <<"EOF"; extractrc [flags] filenames This script extracts messages from designer (.ui) and XMLGUI (.rc) files and writes on standard output (usually redirected to rc.cpp) the equivalent i18n() calls so that xgettext can parse them. --tag=name : Also extract the tag name(s). Repeat the flag to specify multiple names: --tag=tag_one --tag=tag_two --tag-group=group : Use a group of tags - uses 'default' if omitted. Valid groups are: @{[TAG_GROUPS()]} --context=name : Give i18n calls a context name: i18nc("name", ...) --lines : Include source line numbers in comments (deprecated, it is switched on by default now) --cstart=chars : Start of to-EOL style comments in output, defaults to // --language=lang : Create i18n calls appropriate for KDE bindings in the given language. Currently known languages: C++ (default), Python --ignore-no-input : Do not warn if there were no filenames specified --help|? : Display this summary EOF exit; } ########################################################################################### use strict; use warnings; use Getopt::Long; use Data::Dumper; use constant TAG_GROUP => { default => "[tT][eE][xX][tT]|title|string|whatsthis|tooltip|label", koffice => "Example|GroupName|Text|Comment|Syntax|TypeName", none => "", }; use constant TAG_GROUPS => join ", ", map "'$_'", sort keys %{&TAG_GROUP}; # Specification to extract nice element-context for strings. use constant ECTX_SPEC => { # Data structure: extension => {tag => [ctxlevel, [attribute, ...]], ...} # Order of attributes determines their order in the extracted comment. "ui" => { "widget" => [10, ["class", "name"]], "item" => [15, []], "property" => [20, ["name"]], "attribute" => [20, ["name"]], }, "rc" => { "Menu" => [10, ["name"]], "ToolBar" => [10, ["name"]], }, "kcfg" => { "group" => [10, ["name"]], "entry" => [20, ["name"]], "whatsthis" => [30, []], "tooltip" => [30, []], "label" => [30, []], }, }; # Specification to exclude strings by trailing section of element-context. use constant ECTX_EXCLUDE => [ # Data structure: [[tag, attribute, attrvalue], [...]] # Empty ("") attribute means all elements with given tag, # empty attrvalue means element with given tag and attribute of any value. [["widget", "class", "KFontComboBox"], ["item", "", ""], ["property", "", ""]], [["widget", "class", "KPushButton"], ["attribute", "name", "buttonGroup"]], [["widget", "class", "QRadioButton"], ["attribute", "name", "buttonGroup"]], ]; # The parts between the tags of the extensions will be copied # verbatim my %EXTENSION_VERBATIM_TAGS = ( "kcfg" => [ "code" ], ); # Add attribute lists as hashes, for membership checks. for my $ext ( keys %{&ECTX_SPEC} ) { for my $tag ( keys %{ECTX_SPEC->{$ext}} ) { my $arr = ECTX_SPEC->{$ext}{$tag}[1]; ECTX_SPEC->{$ext}{$tag}[2] = {map {$_ => 1} @{$arr}}; } } ########################################################################################### # Add options here as necessary - perldoc Getopt::Long for details on GetOptions GetOptions ( "tag=s" => \my @opt_extra_tags, "tag-group=s" => \my $opt_tag_group, "context=s" => \my $opt_context, # I18N context "lines" => \my $opt_lines, "cstart=s" => \my $opt_cstart, "language=s" => \my $opt_language, "ignore-no-input" => \my $opt_ignore_no_input, "help|?" => \&usage ); unless( @ARGV ) { warn "No filename specified" unless $opt_ignore_no_input; exit; } $opt_tag_group ||= "default"; die "Unknown tag group: '$opt_tag_group', should be one of " . TAG_GROUPS unless exists TAG_GROUP->{$opt_tag_group}; my $tags = TAG_GROUP->{$opt_tag_group}; my $extra_tags = join "", map "|" . quotemeta, @opt_extra_tags; my $text_string = qr/($tags$extra_tags)( [^>]*)?>/; # Precompile regexp my $cstart = $opt_cstart; # no default, selected by language if not given my $language = $opt_language || "C++"; my $ectx_known_exts = join "|", keys %{&ECTX_SPEC}; ########################################################################################### # Escape characters in string exactly like uic does. sub escape_like_uic ($) { my $text = shift; $text =~ s/<//g; $text =~ s/&/&/g; $text =~ s/"/"/g; $text =~ s/\\/\\\\/g; # escape \ $text =~ s/\"/\\\"/g; # escape " $text =~ s/\r//g; # remove CR (Carriage Return) $text =~ s/\n/\\n\"\n\"/g; # escape LF (Line Feed). uic also change the code line at a LF, we do not do that. return $text; } ########################################################################################### sub dummy_call_infix { my ($cstart, $stend, $ctxt, $text, @cmnts) = @_; for my $cmnt (@cmnts) { print qq|$cstart $cmnt\n|; } if (defined $text) { $text = escape_like_uic($text); if (defined $ctxt) { $ctxt = escape_like_uic($ctxt); print qq|i18nc("$ctxt", "$text")$stend\n|; } else { print qq|i18n("$text")$stend\n|; } } } my %dummy_calls = ( "C++" => sub { dummy_call_infix($cstart || "//", ";", @_); }, "Python" => sub { dummy_call_infix($cstart || "#", "", @_); }, ); die "unknown language '$language'" if not defined $dummy_calls{$language}; my $dummy_call = $dummy_calls{$language}; # Program start proper - NB $. is the current line number for my $file_name ( @ARGV ) { my $fh; unless ( open $fh, "<", $file_name ) { # warn "Failed to open: '$file_name': $!"; next; } # Ready element-context extraction. my $ectx_ext; my $ectx_string; if ( $file_name =~ /\.($ectx_known_exts)(\.(in|cmake))?$/ ) { $ectx_ext = $1; my $ectx_tag_gr = join "|", keys %{ECTX_SPEC->{$ectx_ext}}; $ectx_string = qr/($ectx_tag_gr)( [^>]*)?>/; # precompile regexp } my $string = ""; my $in_text = 0; my $start_line_no = 0; my $in_skipped_prop = 0; my $tag = ""; my $attr = ""; my $context = ""; my $notr = ""; # Element-context data: [[level, tag, [[attribute, value], ...]], ...] # such that subarrays are ordered increasing by level. my @ectx = (); # All comments to pending dummy call. my @comments = (); while ( <$fh> ) { last if $. == 1 and $_ !~ /^(?:{$ectx_ext}{$tag} ) { my @atts; for my $ectx_att ( @{ECTX_SPEC->{$ectx_ext}{$tag}[1]} ) { if ( $attr and $attr =~ /\b$ectx_att\s*=\s*(["'])([^"']*?)\1/ ) { my $aval = $2; push @atts, [$ectx_att, $aval]; } } # Kill all tags in element-context with level higer or equal to this, # and add it to the end. my $clevel = ECTX_SPEC->{$ectx_ext}{$tag}[0]; for ( my $i = 0; $i < @ectx; ++$i ) { if ( $clevel <= $ectx[$i][0] ) { @ectx = @ectx[0 .. ($i - 1)]; last; } } push @ectx, [$clevel, $tag, [@atts]]; } if ( ($tag, $attr) = $string =~ /<$text_string/o ) { my ($attr_comment) = $attr =~ /\w*comment=\"([^\"]*)\"/ if $attr; $context = $attr_comment if $attr_comment; my ($attr_context) = $attr =~ /\w*context=\"([^\"]*)\"/ if $attr; $context = $attr_context if $attr_context; # It is unlikely that both attributes 'context' and 'comment' # will be present, but if so happens, 'context' has priority. my ($attr_notr) = $attr =~ /\bnotr=\"([^\"]*)\"/ if $attr; $notr = $attr_notr if $attr_notr; $string =~ s/^.*<$text_string//so; if ( not $attr or $attr !~ /\/ *$/ ) { $in_text = 1; $start_line_no = $.; } } else { $string = ""; } } next unless $in_text; next unless $string =~ /<\/$text_string/o; my $text = $string; $text =~ s/<\/$text_string.*$//o; if ( $text cmp "" ) { # See if the string should be excluded by trailing element-context. my $exclude_by_ectx = 0; my @rev_ectx = reverse @ectx; for my $ectx_tail (@{&ECTX_EXCLUDE}) { my @rev_ectx_tail = reverse @{$ectx_tail}; my $i = 0; $exclude_by_ectx = (@rev_ectx > 0 and @rev_ectx_tail > 0); while ($i < @rev_ectx and $i < @rev_ectx_tail) { my ($tag, $attr, $aval) = @{$rev_ectx_tail[$i]}; $exclude_by_ectx = (not $tag or ($tag eq $rev_ectx[$i][1])); if ($exclude_by_ectx and $attr) { $exclude_by_ectx = 0; for my $ectx_attr_aval (@{$rev_ectx[$i][2]}) { if ($attr eq $ectx_attr_aval->[0]) { $exclude_by_ectx = $aval ? $aval eq $ectx_attr_aval->[1] : 1; last; } } } last if not $exclude_by_ectx; ++$i; } last if $exclude_by_ectx; } if (($context and $context eq "KDE::DoNotExtract") or ($notr eq "true")) { push @comments, "Manually excluded message at $file_name line $."; } elsif ( $exclude_by_ectx ) { push @comments, "Automatically excluded message at $file_name line $."; } else { (my $norm_fname = $file_name) =~ s/^\.\///; push @comments, "i18n: file: $norm_fname:$."; if ( @ectx ) { # Format element-context. my @tag_gr; for my $tgr (reverse @ectx) { my @attr_gr; for my $agr ( @{$tgr->[2]} ) { #push @attr_gr, "$agr->[0]=$agr->[1]"; push @attr_gr, "$agr->[1]"; # no real nead for attribute name } my $attr = join(", ", @attr_gr); push @tag_gr, "$tgr->[1] ($attr)" if $attr; push @tag_gr, "$tgr->[1]" if not $attr; } my $ectx_str = join ", ", @tag_gr; push @comments, "i18n: ectx: $ectx_str"; } push @comments, "xgettext: no-c-format" if $text =~ /%/o; $dummy_call->($context, $text, @comments); @comments = (); } } else { push @comments, "Skipped empty message at $file_name line $."; } $string =~ s/^.*<\/$text_string//o; $in_text = 0; # Text can be multiline in .ui files (possibly), but we warn about it in XMLGUI .rc files. warn "there is floating in: '$file_name'" if $. != $start_line_no and $file_name =~ /\.rc$/i; } close $fh or warn "Failed to close: '$file_name': $!"; die "parsing error in $file_name" if $in_text; if ($ectx_ext && exists $EXTENSION_VERBATIM_TAGS{$ectx_ext}) { unless ( open $fh, "<", $file_name ) { # warn "Failed to open: '$file_name': $!"; next; } while ( <$fh> ) { chomp; $string .= "\n" . $_; foreach $tag (@{ $EXTENSION_VERBATIM_TAGS{$ectx_ext} }) { if ($string =~ /<$tag>(.*)<\/$tag>/s) { # Add comment before any line that has an i18n substring in it. my @matched = split /\n/, $1; my $mlno = $.; (my $norm_fname = $file_name) =~ s/^\.\///; for my $mline (@matched) { # Assume verbatim code is in language given by --language. # Therefore format only comment, and write code line as-is. if ($mline =~ /i18n/) { $dummy_call->(undef, undef, ("i18n: file: $norm_fname:$mlno")); } print "$mline\n"; ++$mlno; } $string = ""; } } } close $fh or warn "Failed to close: '$file_name': $!"; } } avogadro-1.1.1/scripts/installer/0000755000175000001440000000000012250371054016210 5ustar marcususersavogadro-1.1.1/scripts/installer/Changelog.txt0000644000175000001440000000122112250371054020634 0ustar marcususersVersion 1.0 - The file extension ".cml" is registered to be opened with Avogadro when double-clicking on cml-files (can be deselected in the installer menu) - Desktop icon is provided (can be deselected in the installer menu) - Avogadro is installed for all users, when the the user is admin - Installer is translatable - English and German translation is delivered, (the installer detects the used language by checking the default language of Windows) - Installer can also be used under Windows Vista - Avogardo is correctly uninstalled - Avogadro can be directly started after the installation (checkbox in the last installer window)avogadro-1.1.1/scripts/installer/installer_languages/0000755000175000001440000000000012250371054022233 5ustar marcususersavogadro-1.1.1/scripts/installer/installer_languages/german.nsh0000644000175000001440000000272212250371054024221 0ustar marcususers!ifndef _Avogadro_LANGUAGES_GERMAN_NSH_ !define _Avogadro_LANGUAGES_GERMAN_NSH_ !ifdef Avogadro_LANG !undef Avogadro_LANG !endif !define Avogadro_LANG ${LANG_GERMAN} LicenseLangString AvogadroLicenseData ${Avogadro_LANG} "${PRODUCT_LICENSE_FILE}" LangString WelcomePageText "${Avogadro_LANG}" "Dieser Assistent wird Sie durch die Installation von Avogadro begleiten.\r\n\ \r\n\ $_CLICK" LangString SecAssociateCmlTitle "${Avogadro_LANG}" "Dateizuordnung fr Avogadro-Dateien" LangString SecDesktopTitle "${Avogadro_LANG}" "Desktopsymbol" LangString SecAssociateCmlDescription "${Avogadro_LANG}" "Dateien mit der Endung .cml werden automatisch mit Avogadro geffnet." LangString SecDesktopDescription "${Avogadro_LANG}" "Erstellt Verknpfung zu Avogadro auf dem Desktop." LangString StillInstalled "${Avogadro_LANG}" "Avogadro ${Version} ist bereits installiert!" LangString FinishPageMessage "${Avogadro_LANG}" "Glckwunsch! Avogadro wurde erfolgreich installiert." LangString FinishPageRun "${Avogadro_LANG}" "Avogadro starten" LangString UnNotAdminLabel "${Avogadro_LANG}" "Sie bentigen Administratorrechte um Avogadro zu deinstallieren!" LangString UnReallyRemoveLabel "${Avogadro_LANG}" "Sind Sie sicher, dass sie Avogadro deinstallieren mchten?" LangString UnRemoveSuccessLabel "${Avogadro_LANG}" "Avogadro wurde erfolgreich von ihrem Computer entfernt." !undef Avogadro_LANG !endif ; _Avogadro_LANGUAGES_GERMAN_NSH_ avogadro-1.1.1/scripts/installer/installer_languages/english.nsh0000644000175000001440000000265612250371054024407 0ustar marcususers!ifndef _Avogadro_LANGUAGES_ENGLISH_NSH_ !define _Avogadro_LANGUAGES_ENGLISH_NSH_ !ifdef Avogadro_LANG !undef Avogadro_LANG !endif !define Avogadro_LANG ${LANG_ENGLISH} LicenseLangString AvogadroLicenseData ${Avogadro_LANG} "${PRODUCT_LICENSE_FILE}" LangString WelcomePageText "${Avogadro_LANG}" "This wizard will guide you through the installation of Avogadro.\r\n\ \r\n\ $_CLICK" LangString SecAssociateCmlTitle "${Avogadro_LANG}" "Associate Avogadro-files" LangString SecDesktopTitle "${Avogadro_LANG}" "Desktop icon" LangString SecAssociateCmlDescription "${Avogadro_LANG}" "Files with the extension .cml will automatically be opened with Avogadro." LangString SecDesktopDescription "${Avogadro_LANG}" "Puts Avogadro icon on the desktop." LangString StillInstalled "${Avogadro_LANG}" "Avogadro ${Version} is already installed!" LangString FinishPageMessage "${Avogadro_LANG}" "Congratulations! Avogadro has been installed successfully." LangString FinishPageRun "${Avogadro_LANG}" "Launch Avogadro" LangString UnNotAdminLabel "${Avogadro_LANG}" "You must have administrator privileges to uninstall Avogadro!" LangString UnReallyRemoveLabel "${Avogadro_LANG}" "Are you sure you want to completely remove Avogadro?" LangString UnRemoveSuccessLabel "${Avogadro_LANG}" "Avogadro was successfully removed from your computer." !undef Avogadro_LANG !endif ; _Avogadro_LANGUAGES_ENGLISH_NSH_ avogadro-1.1.1/scripts/installer/installer_languages/russian.nsh0000644000175000001440000000334212250371054024433 0ustar marcususers!ifndef _Avogadro_LANGUAGES_RUSSIAN_NSH_ !define _Avogadro_LANGUAGES_RUSSIAN_NSH_ !ifdef Avogadro_LANG !undef Avogadro_LANG !endif !define Avogadro_LANG ${LANG_RUSSIAN} LicenseLangString AvogadroLicenseData ${Avogadro_LANG} "${PRODUCT_LICENSE_FILE}" LangString WelcomePageText "${Avogadro_LANG}" "Этот мастер поможет вам установить Avogadro.\r\n\ \r\n\ $_CLICK" LangString SecAssociateCmlTitle "${Avogadro_LANG}" "Создать ассоциацию для файлов Avogadro" LangString SecDesktopTitle "${Avogadro_LANG}" "Ярлык на рабочем столе" LangString SecAssociateCmlDescription "${Avogadro_LANG}" "Файлы с расширением .cml будут автоматически открываться в Avogadro." LangString SecDesktopDescription "${Avogadro_LANG}" "Размещает ярлык Avogadro на рабочем столе." LangString StillInstalled "${Avogadro_LANG}" "Avogadro ${Version} уже установлен!" LangString FinishPageMessage "${Avogadro_LANG}" "Поздравляем! Avogadro был успешно установлен." LangString FinishPageRun "${Avogadro_LANG}" "Запустить Avogadro" LangString UnNotAdminLabel "${Avogadro_LANG}" "Чтобы удалить Avogadro, вы должны иметь привилегии администратора!" LangString UnReallyRemoveLabel "${Avogadro_LANG}" "Вы уверены, что хотите полностью удалить Avogadro?" LangString UnRemoveSuccessLabel "${Avogadro_LANG}" "Avogadro был успешно удален с вашего компьютера." !undef Avogadro_LANG !endif ; _Avogadro_LANGUAGES_RUSSIAN_NSH_ avogadro-1.1.1/scripts/installer/avogadro.ico0000644000175000001440000112336612250371054020522 0ustar marcususers hf  V00 %@@ (BD ( Ά(   (0662,% ?@ ??RV_B'-f/b''t-i"KB5yruu6= "&m _Nbg ^  Tm)$ c M5yV G-p Di,#. UbC 2 Z Y-37Fm7f:* .i9g R?UtFjGE Rh N+ @L"pKQy=j Yb WeF \q' Lyn c ^ Omk Yx  Rj?}*0:gt7 Yv01pnA, `y= $6&EF Xq82 VHI"!|q< I 6/tvPGD<4"DI f~ \"""( kOkkov|OIN [I"!}*[*'D@FM ZR9U$6= dJ' -(,W,F$J<F ~ <<CC( @  !#%&&$#!   &-39>CHJIFC@<73.*%   S~~~{|~~~D~xX2G ,u/1 ?W/0,"6r!!t!!0ILA._+G| )FG"?@|-! @* @r*Zw./R; V-9,$?N*$$,4OA*$. 4g-f,R W? B'\3q-,V TA 6-+? ;! ;%>-7k..HIO_ ML.y.T= 7o 6< \.u.,<j * o TI.S&0w2 4.N%u7,Q,E*6(3} XP V_Df=iGqe1 ,)<g%--7*H**'q>P(zB ""-~-3E V.dxPe/. T d+;k""" .)2GM-J\&' ^K~3 A@, R""".*CO-J,h-.z% k:~IiI-jKQ,E$4e+p9|H @~ Q%@O$+5,V-.JC$1wp..""" F Qw@ c7-x*+-p.G4I"""""m }<o aC01{!<E"!N"""""pXY.N/Px!!"40Z.FK3"""!EP# -Z-9IJ2*$,)B  W,]'.---9Q12??81#C?0x?(0` H   $(,048<?BEGGGFDB@>;8520-)&#   !%)-147:=?@AA@?><:752/-*'$!   %6H[ :',=lzwA +;,F)E#,(-?+G,@)%)J./41`#/40..{ )E6s!!%<!"!D-U- Z !y-`e$' B` >z!!x3- _  U65 k..$-U. C'55="}3.GO(9"%lj`Njg; *2 c-~.20r!q1 l+k S>**,F5E,/ *<7 L-,@9,i*01m _.!$0 S@+^Y8*+3in4***1N7#>0f r5*0$-M9s    Q3 dn/*B&0NG/Yy R$%LD| >p'?`4u c3*=$.<K#%1 Q4+S"$''/; ! 6Q1*$.y6y ]. >- T#"DC-*.N6 cz:  U+exB,z$.j0OK$-4 ]3-+G-p,s*O .j9|7}j7g7S <+RJB;;GH?0(-*,G Pt% [ R#v 3>wm6 > ] Q""e1&!.Q?,;xt4-,+p+ ZK&,}+d9!"""P.M)1 ]9+dMN&QQ5.Y+51@~p*} 2,]B """"!j.,40fq5-U8m c1?o}I @,WA""""!i-$/mo3(3| 3%== eN1V R7""""M,o-1 dz2(3**7.C*6.!t4Pl>L;! 2 -N f=5)>$, T4-a.6O WP8-w =/ ^pC/Il?W!{".> X \E:u/*0*a<?+d,J@+0 ap=%MTg6 Xv=,-w! ,#,R,\-33x d-* *+1!f-)PF"""""=vz=%P'0 bzG8.*=. *CHC,4,zNK,h2v!""""""xB@T  90 [lN6-,y,R*B-P0!j/- b f28"""""""* :$%5Dnw Y;00K"5. U"" :"""""""0-e.0 X!!!""!q1,R4 ^;|!""""""/> *=.y.@ Tizm@*B ( -687/ T""""" B,m -"-J.36870->$- a !  S.(n),-D bk aC/*9"$)2.t.-q*1  yf1 L\[\\[W'?????00<0~pp(@    "%'*,.023567889988765421/-,*(&$"    $'+.259<@DGJMPSVWVVTRPNLIGEB?=:8530.+(&#!  "%(*-02468:;<====<<;:975420.-*(&$"    [Nh,|'QE" ~^7e),-q... Dm.z-.-|,W -./270%Kv ./55//--> -1t!"!- Ak!""!H/-"-I.t""""""`!""""""7--/"" u Z S Q,i+5 D 'h U Ui""" R.-/"" c/..-KK/..$.S...-./2 ""H-.S/i""e.T A}5vvvvvvvvvvvvxn"yD,z1 "/,t..4"/,c . U"" d/,,. ]"" S.*R-0"0-.t/"6.*,W.m" D. .3"/-,:. R!" X/*7(/>"w/.h*+/.E "i/-g-(.D"k/- ,..@"t/--3.E!k/.i*<.@"t/.,4.C"s/$&X/F"n/-)2.="0% 9P~VVwvtTvv @|VV7l.O ! a/--(.4"4* 6 3R"B/.$.Y./i! / [! Q/-~,-/"C.X V/--?*-/*$/v"G.,W./ `!! U/{.{+; B D-6"8/-9..K"v0' 1/M!y/.-"-D.6"=/e-p(%/h" S/.* ./;j! X/#f.:"@/.+G-P.-.,W+/.0/I"4.\ "$/ Y !q/BI//161/.*1*N.@"f+0|! T/##Sl.6"K.+ Y6:"""<.*+,z.N!n/ .N"5. <%/ Z !{0+ E./6""""";-./ `! T.- Q,2{! [/.,E -/="L.+Y/v"""""""z/-3-/u"G/-[ .L"C/.,-g.1j!!s/+Ks,n/"""""""/.j .0">.+;PK+/k!"t3.// T"D. ./!""""""" /-v .1"7.*+ .?N/B" [/' :.T/"""""""/,]-1"6.& 1&//7z"!s1.vS / \""""""" a/-O.0"7.$,* %!.4o!!@/;/'V./z!"""!}/3/*+-x/y"<.*-(..////-k+.3k "K/2"G/(_-/ S~ U/ S?.".8. `"!L.(&-g/4gz~vL/. 8 D!/4m" T/./.:x!"J/+u C9,n./////"2--C "n.,L+_. V"""""6//<v " Y/+iU7 0!.>{!" U0..*6*++M*+$.< "y/.T-l/"3-$/P!"""""""1M!" V/,sc 9#/<w "g5/.-|&**/k"!K.,#- U""p.$.0"""""""""k/O/+q ;".7m"!}L0..-*+.7!"/+S-[/"" ^.-. Z""""""""""//)f 4.1 _""tH0//-...{./"!</./""D0/n"""""""""""5Pi../Jy""fF6//7j""" S.-|/"""" /q"""""""""""6'̥ .i-.1 Z """"!!""""!B-->.B""""8 b"""""""""" 1/}*0-./1 Wv!"""""!m/-O$*0.1 Teh c8: """""""""z/*1[*B.../3M _gg `=..,-......o"""""""";-.._..-...-,E-/x!"""""K.,.`*-/P s:.,K/,i.////.-*+-D.n-v-`( p5 s% ????p00 ????1?@00`@x(       !!!!!!"""""""""""""""""""""""""!!!!!    !!""###$$%%%&&&'''((((()))*******++++++++++++++++++++++++*******))))((((('''&&&&%%$$$$###""!!!    !!###$%%&''(())**++,,---..///000111222233333344444444455555544444444433333322222111000///...--,,,+++**)))('''&&%%$$###""!!    !!"#$$%&''())*++,--.//0012233455666778899::::;;;;<=<========>>>>>>>>>>========<<<<;;;::::99988777666544433221110///..--,,++**))('''&&%$$##""!    !"#$$%&''))*+,,-.//0122345667789::;<<=>>??@@AABBCCDDDEEFFFFGGGGGGGGGGGGGGGGGGFFFFFEEDDDDCCBBAAA@@??>>>=<<<;;::9988776555443221100//.--,,+**))(''&%%$$#""!    !"#$%&''()*+,--//01234456789::;<==>?@AABBCDEFFGHHIJJKKLMMNNOOOPPPPQQQQQQQQPPPPOOONNNNMLLKKJJIIIHHGGFFEEDDCBBBA@@??>==<<;::9987765544322100//.--,,+**)(('&&%%$##"!!    !!"$$%&'()*+,--./01234557789:;<=>?@@ABCDEFGGHIJKLMMNOPQRRSTUUVWWXYYYZZZZZZYYYXXXWWVVUUTSSRRQPPOONMMLKKJIIHGGFFEDDCBBAA@??>==<;;:9988766544332100/..--,++*))(''&%%$##"!!    !"#$%&'())*+,-./01133456789:;<<=>?@ABCDDFGHIIKKLMNOPQQRSTUVWXXZZ[\]]]^^]]]]\[[ZZYXXWVVUTTSSRQQPPONNMLLKKJIIHGGFEDDCCBAA@@?>>=<<;::988766544322100/..--,++*))('&&%%$##"!!    !""#$%&'()**,,-./01233456789::;<=>?@@BBCDEEFGHIIJKLLMNOOPPQQRRSSTTTTUUUUUUTTTTTSSRRRQQQPPOONNMMLLKKJIIHHGGFEEDCBBAA@@?>>=<<;;:9988765543322100/..--,++*))(''&%%$##"!!    !!"#$%&&'()*++,-.//112344567899::;<=>>?@AABBCCDDEFFGGHHIIIJJJKKKKKLLLLLLLKKKKKKJJJJIIIHHHGGGFFEEDDDCBBBAA@@??>==<<;::99987665443322110//..--,++*))(('&&%%$##"!!    !!"#$$%&''()**+,,-.//0122344556778899::;;<===>>>??@@@AAAAABBBBBBCCCCCBBBBBBBAAAAAA@@@????>>===<<<;;:::99987776654443221100//..-,,++**))(''&&%%$##"!!    !!""#$$%&&'(()**++,,-..///0111223344555666777888888999999999999999999998888887776666555544433322211100//...--,,,+**)))('''&&%$$##""!!    !!""##$$%%&&''((())***+++,,----...../////00000000000000000000/////......----,,,,++****))))(('''&&&%%$$$##""!!!    !!!!""""###$$$$$%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%$$$$$$###"""""!!!!       k  '1Z5= "Xf9<"!Afv m!0(u?_/? (7=M[#JZ8N Wi$1)dzMn$6s2(,#'4,E-U-f-e*<A()8,\-k-Z)J)8-( -U.././////////../-1Cj-.././///////////..-w-O/.//////////////////z+//////////////////////-,i//////////////////////( 4////////////////////////..-///////////////////////.=P"//////////////////////////.,K*<//////////////////////////.////////////////////////////-+^/////////////:CM U ^f aO</////-r/////////B Yg ` XOF=/////////////-)2/////////6w""""""""""""""""!4wI])/Dn""""""""""""""""C/////////.*//////// T""""""""""""""""""""""!"""""""""""""""""""""""u0///////*6.//////5 """"""""""""""""""""""!#m""""""""""""""""""""""""""J///////"//////<"""""""""""""""""""""""""gTm""""""""""""""""""""""""""" `//////--/////5"""""""""""""""""""""""""" >w"""""""""""""""""""""""""""""O////////////""""""""""""""""""""""""""".[/""""""""""""""""""""""""""""""4/////.C*6/////<""""""""""""""""""""""""""""b """"""""""""""""""""""""""""""z/////--/////"""""""""""""""""""""""""""" _""""""""""""""""""""""""""""""""1///// .////1"""""""""""""""""""""""!!!!"""S(̠';""""""!!!"""""""""""""""""""""""4/////*$/////4""""""""""""""""" P8/////;N b`/.*<) D#G dM;/////5Es !""""""""""""""""K/////.2/////4""""""""""""""" Y/////////////..//.,y* *,@-.////////////////B!"""""""""""""" U/////,4/////5"""""""""""""!g////////////////(/////.,' -w.//$.//////////////////B """"""""""""" V//////6/////3"""""""""""""n/////////////////-{///////.-?*&./////\a////////////////////A!""""""""""""@/////-3.////1""""""""""""///////////////////Q.////////.,b '4-//////-&/////////////////////""""""""""""4/////.!-/////"""""""""""/////////..//./////$&///////////-"$-J.////////  ////////////./////////h""""""""""""1/////".j///// b"""""""""""/////..,b"$+A.t...o1////////////.,* -f.////////// C/.....,\(3 -J-./////J"""""""""""/////-/////6"""""""""""/////,s  _6////////////.'!*,////////////.&Å(?///// Z"""""""""""A/////,b//////""""""""""/////..!!|;././././././-*+3*-././././././5dn-p/////l"""""""""""2/////.///// W""""""""""/////.J./////""""""""""/////./////2!""""""""""L/////.^ )////// """"""""""9/////,////// W""""""""""//////3.///// P""""""""""//////,h/////1 """""""""0//////1*$./////""""""""""7/////-./////N""""""""""n/////. ?-/////9!"""""""""//////-U/////0"""""""""1/////-c,]//////""""""""""6/////.//////?""""""""""v//////,W{$./////>!"""""""""s//////$.B//////w""""""""" 3//////' &.//////"""""""""1/////-./////2"""""""""//////.D.c////// V""""""""""<////// ''//////?"""""""""" S//////-qT)//////4 """""""""o//////..//////s"""""""""4//////+5 .//////"""""""""1//////3./////2"""""""""//////.().////// Z"""""""""!;//////))%//////7 """"""""" Y//////-7.//////7 """"""""" V//////--//////G""""""""" >//////-Z,L./////1"""""""""y//////.*.//////f"""""""""4//////-}m--.//////"""""""""1//////#*.//////"""""""""//////..^,.////// b"""""""""5//////,y,Q//////3"""""""""s///////-D<*.//////F!""""""""!?//////--//////9 """"""""! S///////,.J .//////8""""""""" V//////.*.//////? """""""" F//////.*t.//////3"""""""""e//////.. .//////H!"""""""">//////.) ///////1"""""""""t///////*6( .////// S"""""""""9//////.).-///////"""""""""///////.u+M/////// `"""""""""5//////.)Q.///////z"""""""""1//////..j///////o"""""""""1///////)a .///////l"""""""""3//////..///////|"""""""""0///////)./////// _!""""""""5//////.$-///////|"""""""""0///////)3-/////// _!""""""""6///////. -///////{"""""""""0//////..!A$-/////// _!""""""""6///////*.///////{"""""""""0///////--i' ./////// _!""""""""6//////.. .///////{"""""""""0//////.*<z&./////// _!""""""""7//////.*+' .///////z"""""""""0//////.+M#*./////// _!""""""""7//////.-3' ////////z"""""""""2//////.-`H,)./////// a!""""""""7//////.(3' .///////u"""""""""4//////.-vV*6.///////k"""""""""6//////.)2' .///////j"""""""""8///////*۝-O.///////v"""""""""4//////.)2' ./////// ^!""""""""=///////! (,s.//////0"""""""""1//////.)2' ./////// T!""""""""B///////'.///////3"""""""""y0//////.*1' -///////L """"""""I///////* . o.///////6"""""""""o///////.*0 -///////D"""""""" Q///////-I 4 4 4 4F)O)O)O)O)O)O)O)O)O)O)O; 4 4 4 4 4 4 4 4 4 4 4 2 4 4 4 4 4 4 4 4 4 4 6)O)O)O)O)O)O)O)O)O)O)O&L 4 1,///////<""""""""" c///////.)%*////////>""""""""! a///////.j//1l!"""""""""!k0/////////..=).////////// [""""""""""; 3+///////G""""""""! Y///////.'.///////9"""""""""t////////(N""""""""""://///////.,m.M./////////2{""""""""""`S-/////// T """""""" L///////.*-///////3"""""""""4///////$ ;!""""""""" Z//////////-$+{./////////G"""""""  ////////f!""""""""@///////.' ,m///////0s""""""""";///////* 3 """"""""{3//////////(&"-/////////0h """"""///////0x"""""""""8///////. +X./////// `!""""""""E///////.\""""""I/////////.+X+5./////////9"""" C+)///////5"""""""""2///////--D////////N """""""" R////////0b""""!i1/////////..u.///////// T"Q-///////="""""""""o////////-,).///////B""""""""!g////////$"";/////////.)2$./////////3t////////L""""""""! \///////..d#.///////9"""""""""3///////) 1s Y/////////.-r-O.////////.(!//////// c!""""""""L///////.,@ -///////3}""""""""">///////.d,3//////////#$-///////+ 1)///////2|"""""""""?////////)%.////////d!""""""""O//////// )///////..N*+./////f.///////;"""""""""4///////.(-f.///////M""""""""!f////////'*//////.$,h///.  ////////K""""""""!k////////. *C.///////="""""""""2///////-\.///..,*./',(//////// a!"""""""" R////////.-(////////3"""""""""=//////// '//,h-DX_-///////2{"""""""""@////////.^*-////////f!"""""""" T////////'$Z-& ////////?"""""""""5///////.,4.////////O""""""""!s0///////-YE)'//////// W"""""""""l0///////.,-Z.///////>""""""""";//////// Ni-///////1v""""""""" R////////- *0.///////2v""""""""" Q////////) 5!////////="""""""""=///////.-g$.//////// W """"""""!p0///////.zj C+//////// T"""""""""u2////////-9*.////////@"""""""""9////////$r////////0t!"""""""" V////////.&._/////////u"""""""""O////////,T#$&////////="""""""""?////////- +/.//////// Z """"""""!u1//////// &e-//////// Z"""""""""x3////////.c -////////B"""""""""?////////) 7 !////////4""""""""" Y////////.--.z////////4|""""""""" `////////. :S+////////H"""""""""B////////-"+A.////////// W """""""""5////////'.< /////////l!"""""""""s3//////////-,,L.z-..-.,-P .////////68///="""""""""K////////.I*////////:""""""""" P/////////////.(-I/.///////////..+;.////////Hj////1i!""""""""!r0////////&%] ///////// W"""""""""9///////////////.*N../////////////////..T+/.////////e!"//////H"""""""""?////////.x^ =*////////4"""""""""! a////////0d2/////////////////////////////.,]-Z////////3""""M//////6~""""""""" h/////////%/////////O"""""""""C////////="@//////////////////////////////- ..///////B"""""}//////// X """"""""";////////-w >)////////2|!"""""""""u3//////// ]""" [//////////////////////////////.*0$-//////// ] """""" 0////////>""""""""" b/////////&' /////////I"""""""""P////////3""""""!G//////////1Ke~}e:///////////-`''.///////0|!"""""""" G{////////1e!"""""""""8////////.-Q+////////1w!"""""""""9/////////""""""! T///////// T """"""""";////////.+M,Q.///////<"""""""""4 @+////////B""""""""" [/////////( 5+"/////////D""""""""" W////////.//4""""" V//////// Z""""""""""""""!@///////.,:-.///////M"""""""""w2.&!////////2k!"""""""""6/////////d,////////0r!""""""""";////////*#////d"""v///////=!"""""""""""""""""!k///////.)% .//////// d!""""""""! ]///b.////////E""""""""" [/////////*HP%/////////D""""""""" [/////////-/////L2//////J"""""""""""""""""""""6//////.$$.///////0~"""""""""H////-'(////////3q!"""""""""8/////////! Iy-////////1y!"""""""""=////////-R I///////<=////// R """""""""""""""""""""""5//////-p-(.///////8"""""""""://////H }/////////H""""""""" f/////////,l 1(/////////K"""""""""! `0////////$Rs//////////////O """""""""""""""""""""""""3/////.$-D.///////G"""""""""{3/////// 1*////////4w""""""""""</////////' 0} /////////3!"""""""""?////////._#-///////////6"""""""""""""""""""""""""""//////..j//////// ] """"""""! `////////-  /////////K"""""""""!p0////////..*b,///////// T"""""""""!d1////////&$.//////////"""""""""""""""""""""""""""""M//////*.////////v!""""""""I////////-q 7+////////4r!"""""""""B//////////,\2&/////////5"""""""""">////////.j"-Z./////// W""""""""""""""""""""""""""""""4/////-r$.///////2""""""""";////////+A,/////////D"""""""""!{1/////////.$..///////// _""""""""" Z0////////($--.//////"""""""""""""""""""""""""""""""e/////."////////8"""""""""3///////.) ?,////////2g!""""""""" R/////////..-P./////////<"""""""""":////////.wf./////O"""""""""""""""""""""""""""""""" 1/////*..///////@"""""""""d////////.$p /////////?""""""""""6/////////.-J//////////1z!""""""""" Q/////////))./////"""""""""""""""""""""""""""""""""B/////.)////////N """"""""! S////////. E,////////0 ]!""""""""" n0/////////...////////// R""""""""""~7/////////} $./////"""""""""""""""""""""""""""""""""{/////.*+./////// _!"""""""" H////////,L/////////;""""""""""F//////////--g./////////5""""""""""H/////////(&<.M/////B"""""""""""""""""""""""""""""""""" //////,:////////u!""""""""?///////.)%F 5+///////// R """""""""!2//////////,n,)///////////p """""""""!r4////////.i-e///// b"""""""""""""""""""""""""""""""""""4/////* ,K///////0"""""""""9///////.  /////////6z"""""""""" b//////////.,.-./////////F""""""""""@/////////%-r/////m""""""""""""""""""""""""""""""""""";/////,-`.//////1"""""""""5///////.3')/////////B""""""""""=/////////.--./////////2!"""""""""! X0////////.U./////t"""""""""""""""""""""""""""""""""""A/////.-k.//////4"""""""""2///////.oq.////////1 ]!"""""""""!1/////////..//////////p """"""""""7/////////#-/////z"""""""""""""""""""""""""""""""""""?/////),m///////7"""""""""z0//////..T'/////////9"""""""""" l//////////////////P""""""""""C/////////- BX./////u"""""""""""""""""""""""""""""""""""</////$.o.//////;"""""""""k///////.+;a\./////////F """"""""""L//////////////7""""""""""! a1/////////,m///// a"""""""""""""""""""""""""""""""""""://///--q///////?""""""""! [///////.-("/////////2h!""""""""""1//////////0!""""""""""9/////////+*.H/////M"""""""""""""""""""""""""""""""""""2/////' -r///////D """"""""!M////////* /,/////////;""""""""g4////////// c """""""""" I/////////.g+,#/////7""""""""""""""""""""""""""""""""""//////,u///////D """""""" F////////"5s./////////I """"{8//////////C""""""""""!g3/////////#./////""""""""""""""""""""""""""""""""" S/////.-w///////C """"""""!E///////. %/////////2d!<//////////3"""""""""""8/////////, 3u.///// _"""""""""""""""""""""""""""""""""://///*+,\///////D """"""""!E///////-} ;-/////////5///////////!""""""""""?//////////{ -`/////3 """""""""""""""""""""""""""""""//////-*B.//////C!""""""""!D///////. //////////////////u """"""""""! S0/////////' ./////t"""""""""""""""""""""""""""""""?/////.*+///////C!""""""""!C///////.y)////////////// ` """""""""""t4/////////- AI./////2"""""""""""""""""""""""""""""///////.&.//////D!""""""""!C///////,yQ+///////////I"""""""""""9//////////.I-D////// W"""""""""""""""""""""""""""" 4////////,i-///////=!""""""""!G///////.y$.//////////9""""""""""" C//////////////) 0.//////x"""""""""""""""""""""""""""C//////////-J. .//////9 """"""""" R///////.y#.//////////4!""""""""""! X1////////////////.) 0,./////0""""""""""""""""""""""""" U///////////.*1-//////5""""""""" a///////.y# $.//////////0!"""""""""""o3////////////////////.* :,//////0"""""""""""""""""""""""L//////////////$.//////2"""""""""q///////.z-I--.///..-*1&.///////////!"""""""""""5////////// S :///////////* Df.//////0 a""""""""""""""""""""!C///////>/////// ,]//////0"""""""""///////.+Y././///////////.-+/n'.///////////!"""""""""""7//////////8"""!5///////////+N-.///////>"""""""""""""""""n2/////// X!!9//////.%".//////"""""""""///////.)%//////////////////////-"(.///////////{!"""""""""""!@//////////0!""""""!2///////////,X$////////0A"""""""""""""~9////////D!"" 5//////,* ///////p"""""""""0//////.-3-.///////////////////////.- 8*.///////////s!""""""""""""P0////////// e!""""""""""!1///////////,o7),//////////5 U""""""!D2/////////O!""""1//////+;-//////L""""""""" 5//////.#../////////////////////////////?Z,////////////x!""""""""""""h1/////////////C!"""""""""""!3///////////-$.///////////123431//////////// ]!""""""//////. -//////:!""""""""!J//////.,m////////////////////////////////-.-////////////}!""""""""""""r2////////////////0K""""""""""""!5///////////.$-///////////////////////////x!"""""""" \////////&//////3!"""""""""n//////..////////////=l  \3////////////*T!.////////////!""""""""""""{3////////////////////0 R""""""""""""!8///////////.)( *O./////////////////////////;!"""""""""@//////-*.//////"""""""""///////$#$.//////////c!"""""""""""!F//////////-'.////////////!""""""""""""3///////////,@ -//////////0 [""""""""""""!;////////////+G,i///////////////////////// Y"""""""""!6//////( .//////o"""""""""0//////.c..////////5!""""""""""""""""" O/////////.R,////////////2!""""""""""""4///////////-p$#.//////////0e""""""""""""!@////////////..,R.///////////////-.//////"""""""""1/////.*+//////A""""""""""J//////-).////////!"""""""""""""""""""""! S////////-.////////////<!""""""""""""5///////////. F///////////0n""""""""""""" Q////////////.-*$,)/////////.--",:.//////"""""""""x//////-*./////2!"""""""""//////. .///////F!"""""""""""""""""""""""""///////////////////M"""""""""""""6///////////"ud///////////1x"""""""""""""!e//////////////,b,//////M"""""""""">//////*$-//////"""""""""//////..///////e"""""""""""""""""""""""""""" =/////////////// _!"""""""""""""5///////////&Aw///////////0r"""""""""""""!{/////////////.. .//////""""""""""2////// //////A""""""""""E//////*I.T///////|""""""""""""""""""""""""""""""" T////////////u""""""""""""""4///////////)////////////l""""""""""""""4//////////////,]///////"""""""""|//////,b-/////2""""""""""//////-,#///////z""""""""""""""""""""""""""""""""" U////////7""""""""""""""3///////////+////////////g!"""""""""""""F//////////////.'!-O//////e"""""""""">//////' //////"""""""""!</////..////// c"""""""""""""""""""""""""""""""""""G//////o"""""""""""""!2///////////,v"./////////// a!"""""""""""""!h0/////////////..-//////""""""""""1/////,s./////7""""""""""//////,@*C//////F""""""""""""""""""""""""""""""""""""!9//////""""""""""!2///////////-(,%./////////// [!""""""""""""""8//////////////.-[.///// \"""""""""" \//////(//////"""""""""!7/////../////3 """""""""""""""""""""""""""""""""""""////// `""""""""!v0///////////-. %.///////////P """""""""""""" Q0//////////////.+M,t//////""""""""""2/////.-/////9""""""""""/////.$#-9//////""""""""""""""""""""""""""""""""""""""" Y//////"""""! a////////////+'".///////////@!""""""""""""""{5///////////////.-?./////n""""""""""f//////3//////""""""""""j/////--/////B"""""""""""""""""""""""""""""""""""""""" 1/////s""" M////////////+"e!.///////////7!"""""""""""""" V2///////////////.,c .d/////0!""""""""""3/////)8+p/////:""""""""""!//////),.//////}""""""""""""""""""""""""""""""""""""""""" b/////1!>///////////.)'.///////////2|!"""""""""""""""=0///////////////.-&./////""""""""""l/////-./////""""""""""/////.-/////>""""""""""""""""""""""""""""""""""""""""""0/////1///////////.(.////////////i """""""""""""""!g4/////////////////./h**./////u"""""""""""0//////////3"""""""""""/////-//////s"""""""""""""""""""""""""""""""""""""""""""P///////////////.&-////////////N!""""""""""""""" ]4//////////////////..{' )///// a"""""""""""6/////*+(3/////H"""""""""""/////-"*-"/////1!"""""""""""""""""""""""""""""""""""""""""""y/////////////.  j,////////////8!"""""""""""""""" W4////////////////////.,*6" $*$*O///// Q"""""""""""l/////.//////"""""""""""////////.../////H"""""""""""""""""""""""""""""""""""""""""""" 0//////////- D+/////////////j """"""""""""""""" S50///////////////////////......////////N""""""""""""//////*-////0""""""""""""//////////////// `"""""""""""""""""""""""""""""""""""""""""""""C////////,c%(.////////////H!""""""""""""""""" k:1//////////////////////////////////""""""""""""3/////*/////2"""""""""""""E///////////////""""""""""""""""""""""""""""""""""""""""""""" U/////.* >/.////////////6 """""""""""""""""""E5//////////////////////////////1""""""""""""6/////**/////4""""""""""""" ://////////////"""""""""""""""""""""""""""""""""""""""""""""l/////v -./////////////N!"""""""""""""""""""tB60////////////////////////0""""""""""""" R/////.7/////4""""""""""""""! `4///////////1""""""""""""""""""""""""""""""""""""""""""""""|///// -Z..////////////1p!"""""""""""""""""""" |G94//////////////////1I"""""""""""""" V/////+5/////4""""""""""""""""!uC72///////8""""""""""""""""""""""""""""""""""""""""""""""/////-)../////////////@ """""""""""""""""""""""  ^?9641//////17@j """""""""""""""" S/////-3.////2"""""""""""""""""""""!/////8""""""""""""""""""""""""""""""""""""""""""""""/////-S-.////////////// [!""""""""""""""""""""""""""""  !"""""""""""""""""""""8/////*0./////!"""""""""""""""""""""/////7""""""""""""""""""""""""""""""""""""""""""""""/////.U*B///////////////0 b!""""""""""""""""""""""""""""""""""""""""""""""""""""3/////*-a///// ]""""""""""""""""""""" /////2""""""""""""""""""""""""""""""""""""""""""""""~/////---.//////////////1i!""""""""""""""""""""""""""""""""""""""""""""""""/////. /////3!"""""""""""""""""""""4/////"""""""""""""""""""""""""""""""""""""""""""""m/////.!->..//////////////3o!"""""""""""""""""""""""""""""""""""""""""""""D/////-.///// S"""""""""""""""""""""G/////""""""""""""""""""""""""""""""""""""""""""""" Y/////-Z#*././////////////// ["""""""""""""""""""""""""""""""""""""""""//////-U//////""""""""""""""""""""g/////f"""""""""""""""""""""""""""""""""""""""""""""F/////,:u(&..////////////////E!""""""""""""""""""""""""""""""""""""2/////////////t!""""""""""""""""""/////L""""""""""""""""""""""""""""""""""""""""""""!4/////&v+M..////////////////4 _!"""""""""""""""""""""""""""""""1//////$#-?///////>"""""""""""""""""/////5!"""""""""""""""""""""""""""""""""""""""""""/////.-Z.//////////////////0 W """"""""""""""""""""""""" [///////--////////C!"""""""""""""!2/////""""""""""""""""""""""""""""""""""""""""""" T/////.?-g..///////////////////Be!""""""""""""""""  X////////..//////////3 ayg=/////I""""""""""""""""""""""""""""""""""""""""""0/////*=@+k..//////////////////////I asoI//////////.).///////////////////////////////""""""""""""""""""""""""""""""""""""""""" [/////.* ,@-/.///////////////////////////////////////////...///////////////////////////// Q""""""""""""""""""""""""""""""""""""""""2/////-}&-..////////////////////////////////////////$&///////////////////////////////""""""""""""""""""""""""""""""""""""""" a//////)*B.../////////////////////////////////.-l-e..//////////////////////////B!"""""""""""""""""""""""""""""""""""""//////.a-3-...///////////////////////////-,#...////////////////////////d""""""""""""""""""""""""""""""""""""9/////.'!a* ,K-/../////////////////...-I+/.-..////......t.T**. ///////""""""""""""""""""""""""""""""""""!N//////-!-I+j,-...../.....,K ,E//////2""""""""""""""""""""""""""""""""!f//////.$-.//////2""""""""""""""""""""""""""""""!i///////)2,$.//////0x!"""""""""""""""""""""""""""! ^///////-q( ./////// Q"""""""""""""""""""""""""G///////-(9.///////8!""""""""""""""""""""" {1///////.-*=.////////A!""""""""""""""""" ;////////-(M)8//////////;""""""""""""!s6/////////.-K(.///////////Cl _8///////////-.////////////////////////////////.-g*7.////////////////////////////..'-e./////////////////////////..Cq.S//////////////////////-,En-3-../////////////..-|*(-U...../../.--?*85 \V&"hCq 0i ??????????????????x?<?>? |xp?????????>???@`p??????????` >?|????088?<?<?<~~??????avogadro-1.1.1/scripts/installer/setup.nsi0000644000175000001440000002765612250371054020103 0ustar marcususers# owner Avogadro Team # license GPL version 2 # author Uwe Stöhr # file version 1.0 date 28-05-2008 # To compile this script NSIS 2.30 or newer are required # http://nsis.sourceforge.net/ # Do a Cyclic Redundancy Check to make sure the installer # was not corrupted by the download. CRCCheck force # Make the installer as small as possible. SetCompressor lzma # set execution level for Windows Vista RequestExecutionLevel user # general definitions # you only need to change this section for new releases VIProductVersion "1.1.0.0" # file version for the installer in the scheme "x.x.x.x" !define VERSION "1.1.0" Name "Avogadro" !define REGKEY "SOFTWARE\Avogadro" !define COMPANY "Avogadro Team" !define URL "http://avogadro.openmolecules.net/wiki/Main_Page" !define PRODUCT_NAME "Avogadro" !define PRODUCT_EXE "$INSTDIR\Avogadro.exe" !define PRODUCT_EXE2 "Avogadro.exe" !define PRODUCT_REGNAME "Avogadro.Document" !define PRODUCT_EXT ".cml" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" !define PRODUCT_LICENSE_FILE "dist\gpl.txt" # registry preparations !define SHCNE_ASSOCCHANGED 0x08000000 !define SHCNF_IDLIST 0 # Variables Var StartmenuFolder Var CreateFileAssociations Var CreateDesktopIcon Var Answer Var UserName # Included files !include "MUI.nsh" !include "LogicLib.nsh" # This macro is used to check if we are administrator or user !macro IsUserAdmin Result UName # clear previous set errors ClearErrors # see if we can get user name UserInfo::GetName # if an error occured, goto Win9x IfErrors Win9x # pop the name from the stack into $0 Pop $0 # copy the name to ${UName} StrCpy ${UName} $0 # get the account type UserInfo::GetAccountType # pop the account type from the stack Pop $1 # check the account type and set ${Result} ${if} $1 == "Admin" StrCpy ${Result} "yes" ${else} StrCpy ${Result} "no" ${endif} Goto done Win9x: # Win9x doesn't have administrator, we can write wherever we want (not sure if we support Win9x though) StrCpy ${Result} "yes" done: !macroend ; ################################################################ ; appends \ to the path if missing ; example: !insertmacro GetCleanDir "c:\blabla" ; Pop $0 => "c:\blabla\" !macro GetCleanDir INPUTDIR !define Index_GetCleanDir 'GetCleanDir_Line${__LINE__}' Push $R0 Push $R1 StrCpy $R0 "${INPUTDIR}" StrCmp $R0 "" ${Index_GetCleanDir}-finish StrCpy $R1 "$R0" "" -1 StrCmp "$R1" "\" ${Index_GetCleanDir}-finish StrCpy $R0 "$R0\" ${Index_GetCleanDir}-finish: Pop $R1 Exch $R0 !undef Index_GetCleanDir !macroend ; ################################################################ ; similar to "RMDIR /r DIRECTORY", but does not remove DIRECTORY itself ; example: !insertmacro RemoveFilesAndSubDirs "$INSTDIR" !macro RemoveFilesAndSubDirs DIRECTORY !define Index_RemoveFilesAndSubDirs 'RemoveFilesAndSubDirs_${__LINE__}' Push $R0 Push $R1 Push $R2 !insertmacro GetCleanDir "${DIRECTORY}" Pop $R2 FindFirst $R0 $R1 "$R2*.*" ${Index_RemoveFilesAndSubDirs}-loop: StrCmp $R1 "" ${Index_RemoveFilesAndSubDirs}-done StrCmp $R1 "." ${Index_RemoveFilesAndSubDirs}-next StrCmp $R1 ".." ${Index_RemoveFilesAndSubDirs}-next IfFileExists "$R2$R1\*.*" ${Index_RemoveFilesAndSubDirs}-directory ; file Delete "$R2$R1" goto ${Index_RemoveFilesAndSubDirs}-next ${Index_RemoveFilesAndSubDirs}-directory: ; directory RMDir /r "$R2$R1" ${Index_RemoveFilesAndSubDirs}-next: FindNext $R0 $R1 Goto ${Index_RemoveFilesAndSubDirs}-loop ${Index_RemoveFilesAndSubDirs}-done: FindClose $R0 Pop $R2 Pop $R1 Pop $R0 !undef Index_RemoveFilesAndSubDirs !macroend # Installer pages # Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" # let warning appear when installation is canceled !define MUI_ABORTWARNING # Icons for the installer program !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-full.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico" # Welcome page !define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)" !insertmacro MUI_PAGE_WELCOME # Show the license. !insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}" # Specify the installation directory. !insertmacro MUI_PAGE_DIRECTORY # choose the components to install. !insertmacro MUI_PAGE_COMPONENTS # Specify where to install program shortcuts. !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM" !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !define MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)" !insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $StartmenuFolder # Watch the components being installed. !insertmacro MUI_PAGE_INSTFILES # Finish page !define MUI_FINISHPAGE_RUN "${PRODUCT_EXE}" !define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)" !define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)" !insertmacro MUI_PAGE_FINISH # The uninstaller !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES # Installer languages !insertmacro MUI_LANGUAGE "English" # first language is the default language !insertmacro MUI_LANGUAGE "German" !insertmacro MUI_LANGUAGE "Russian" !include "installer_languages\english.nsh" !include "installer_languages\german.nsh" !include "installer_languages\russian.nsh" # Installer attributes OutFile "avogadro-win32-${VERSION}.exe" InstallDir "$PROGRAMFILES\Avogadro" BrandingText "$(^Name) Installer" # appear at the bottom of the installer windows XPStyle on # use XP style for installer windows LicenseData "$(AvogadroLicenseData)" # creates file informations for the AvogadroSetup.exe VIAddVersionKey ProductName "Avogadro" VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyWebsite "${URL}" VIAddVersionKey FileDescription "Avogadro installation program" VIAddVersionKey LegalCopyright "under the GPL version 2" VIAddVersionKey FileVersion "" # Installer sections Section "!Avogadro" SecCore SectionIn RO SectionEnd Section "$(SecAssociateCmlTitle)" SecAssociateCml StrCpy $CreateFileAssociations "true" SectionEnd Section "$(SecDesktopTitle)" SecDesktop StrCpy $CreateDesktopIcon "true" SectionEnd # section descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecAssociateCml} "$(SecAssociateCmlDescription)" !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)" !insertmacro MUI_FUNCTION_DESCRIPTION_END Section "-Installation actions" SecInstallation # remove old files... !insertmacro RemoveFilesAndSubDirs "$INSTDIR" # set the output path SetOutPath "$INSTDIR" # if there are older files, overwrite them SetOverwrite on # extract all files from dist/ directory (recursively) File /r dist\*.* WriteRegStr SHCTX "${REGKEY}\Components" Main 1 # register Avogadro WriteRegStr SHCTX "${REGKEY}" Path $INSTDIR WriteUninstaller $INSTDIR\uninstall.exe # create shortcuts to startmenu SetOutPath "$INSTDIR" CreateDirectory "$SMPROGRAMS\$StartmenuFolder" CreateShortCut "$SMPROGRAMS\$StartmenuFolder\$(^Name).lnk" "${PRODUCT_EXE}" "" "$INSTDIR\Avogadro.exe" CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Release Notes.lnk" "http://avogadro.openmolecules.net/wiki/Avogadro_${VERSION}" "" CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall.lnk" "$INSTDIR\uninstall.exe" # create desktop icon ${if} $CreateDesktopIcon == "true" SetOutPath "$INSTDIR" CreateShortCut "$DESKTOP\$(^Name).lnk" "${PRODUCT_EXE}" "" "${PRODUCT_EXE}" #$(^Name).lnk ${endif} WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder" ${if} $Answer == "yes" # if user is admin # register information that appear in Windows' software listing WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${VERSION}" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "Publisher" "${COMPANY}" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${URL}" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "${PRODUCT_EXE}" WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninstall.exe" WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001 WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001 ${endif} # register the extension .cml ${if} $CreateFileAssociations == "true" # write informations about file type WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}" "" "${PRODUCT_NAME} Document" WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}\DefaultIcon" "" "${PRODUCT_EXE},0" WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}\Shell\open\command" "" '"${PRODUCT_EXE}" "%1"' # write informations about file extensions WriteRegStr SHCTX "Software\Classes\${PRODUCT_EXT}" "" "${PRODUCT_REGNAME}" # refresh shell System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)' ${endif} # reset settings DeleteRegKey SHCTX "Software\SourceForge\Avogadro" DeleteRegKey HKCU "Software\SourceForge\Avogadro" SectionEnd # Uninstaller sections Section "un.Avogadro" un.SecUnProgramFiles SectionIn RO # delete installation folder RMDir /r $INSTDIR # delete start menu entry ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" RMDir /r "$0" # delete desktop icon Delete "$DESKTOP\$(^Name).lnk" # remove file extension .lyx ReadRegStr $R0 SHCTX "Software\Classes\${PRODUCT_EXT}" "" ${if} $R0 == "${PRODUCT_REGNAME}" DeleteRegKey SHCTX "Software\Classes\${PRODUCT_EXT}" DeleteRegKey SHCTX "Software\Classes\${PRODUCT_REGNAME}" ${endif} # delete remaining registry entries DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}" DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}" DeleteRegKey HKCR "Applications\${PRODUCT_EXE2}" DeleteRegKey HKCU "${REGKEY}" DeleteRegKey SHCTX "${REGKEY}" # close uninstaller automatically SetAutoClose true SectionEnd # Installer functions Function .onInit # check if the same Avogadro version is already installed ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "Publisher" ${if} $0 != "" MessageBox MB_OK|MB_ICONSTOP "$(StillInstalled)" Abort ${endif} InitPluginsDir # If the user does *not* have administrator privileges, abort StrCpy $Answer "" StrCpy $UserName "" !insertmacro IsUserAdmin $Answer $UserName # macro from LyXUtils.nsh ${if} $Answer == "yes" # set shell variables for all user # set that e.g. shortcuts will be created for all users SetShellVarContext all ${else} # set shell variables for current user only SetShellVarContext current # and install to a writable directory StrCpy $INSTDIR "$APPDATA\$(^Name)" ${endif} FunctionEnd # Uninstaller functions Function un.onInit # If the user does *not* have administrator privileges, abort StrCpy $Answer "" !insertmacro IsUserAdmin $Answer $UserName ${if} $Answer == "yes" SetShellVarContext all ${else} # check if the Avogadro has been installed with admin permisions ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher" ${if} $0 != "" MessageBox MB_OK|MB_ICONSTOP "$(UnNotAdminLabel)" Abort ${endif} SetShellVarContext current ${endif} # ask if it should really be removed MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(UnReallyRemoveLabel)" IDYES +2 Abort FunctionEnd Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(UnRemoveSuccessLabel)" FunctionEnd avogadro-1.1.1/scripts/installer/dist/0000755000175000001440000000000012250371054017153 5ustar marcususersavogadro-1.1.1/scripts/installer/dist/gpl.txt0000644000175000001440000004365512250371054020513 0ustar marcususers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. avogadro-1.1.1/scripts/distclean.sh0000644000175000001440000000337312250371054016523 0ustar marcususers#!/bin/sh RM="rm -f" $RM CMakeCache.txt CMakeOutput.log config.log warning.log cmake.check_cache $RM install_manifest.txt $RM doc/config-doxygen warning.log cmake_uninstall.cmake gpltemplate $RM -r krazy for i in `find . -type d -name "CMakeFiles" -print | sort`; do $RM -r $i; echo "$RM -r $i" done for i in `find . -type d -name "CMakeTmp" -print | sort`; do $RM -r $i; echo "$RM -r $i" done for i in `find . -type d -name "*.dir" -print | sort`; do $RM -r $i; echo "$RM -r $i" done for i in `find . -type d -name ".svn" -print | sort`; do $RM -r $i; echo "$RM -r $i" done for i in `find . -type d -name ".git" -print | sort`; do $RM -r $i; echo "$RM -r $i" done for i in `find . -type f -name "*~" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "cmake_install.cmake" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "Makefile" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "*.obj" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "*.o" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "*.dylib*" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "*.so" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "*.moc" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "ui*.h" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "qrc*.cxx" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "*.qm" -print | sort`; do $RM $i; echo "$RM $i" done for i in `find . -type f -name "*.disabled" -print | sort`; do $RM $i; echo "$RM $i" done avogadro-1.1.1/scripts/update-po.sh0000755000175000001440000000014512250371054016450 0ustar marcususers#!/bin/sh echo "Updating PO translations from POT" for x in *.po; do msgmerge -U $x *.pot done avogadro-1.1.1/.gitignore0000644000175000001440000000017712250371054014521 0ustar marcususersCMakeFiles build *.[ao] *.so* *.qm *.ts *.moc *.log ui_*.h moc_*.cxx qrc_*.cxx doc/api cmake_install* cmake_uninstall* doc/api avogadro-1.1.1/avogadro.pc.in0000644000175000001440000000043612250371054015262 0ustar marcususersprefix=@USER_PREFIX@ exec_prefix=${prefix} libdir=${exec_prefix}/@LIB_INSTALL_DIR@ includedir=${prefix}/include pkgincludedir=${includedir}/avogadro Name: Avogadro Description: Avogadro libraries Version: @Avogadro_VERSION_FULL@ Libs: -L${libdir} -lavogadro Cflags: -I${pkgincludedir} avogadro-1.1.1/testfiles/0000755000175000001440000000000012250371054014526 5ustar marcususersavogadro-1.1.1/testfiles/basic4.drawlog0000644000175000001440000001500712250371054017257 0ustar marcususers"Avogadro version: 0.9.7 Git: 1e37271 LibAvogadro version: 0.9.7 Git: 1e37271" Locale: "en_US" Libavogadro translations not found. "System has OpenGL support." "About to test OpenGL capabilities." "OpenGL capabilities found: " "Double Buffering." "Direct Rendering." "Antialiasing." Searching for plugins in "/usr/local/bin/../lib/avogadro/colors" Searching for plugins in "/usr/local/bin/../lib/avogadro/engines" Searching for plugins in "/usr/local/bin/../lib/avogadro/extensions" Searching for plugins in "/usr/local/bin/../lib/avogadro/tools" Searching for plugins in "/usr/local/bin/../lib/avogadro/contrib" QStackedLayout::setCurrentWidget: Widget 0x1cf5d50 not contained in stack GLWidget initialisation... GLWidget initialised... createObjects() setOBMol called. Molecule::addAtom( 0 ) Molecule::addAtom( 1 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 0 , end = 1 , order = 1 , adjBegin = 6 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 0 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 0 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 2 ) Molecule::addAtom( 3 ) Molecule::addAtom( 4 ) AdjustHydrogensPreCommand(atomId = 1 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 5 ) Molecule::addAtom( 6 ) Molecule::addAtom( 7 ) Molecule::addAtom( 8 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 1 , end = 8 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 1 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 9 ) Molecule::addAtom( 10 ) AdjustHydrogensPreCommand(atomId = 8 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 11 ) Molecule::addAtom( 12 ) Molecule::addAtom( 13 ) Molecule::addAtom( 14 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 8 , end = 14 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 8 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 15 ) Molecule::addAtom( 16 ) AdjustHydrogensPreCommand(atomId = 14 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 17 ) Molecule::addAtom( 18 ) Molecule::addAtom( 19 ) Molecule::addAtom( 20 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 14 , end = 20 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 14 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 21 ) Molecule::addAtom( 22 ) AdjustHydrogensPreCommand(atomId = 20 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 23 ) Molecule::addAtom( 24 ) Molecule::addAtom( 25 ) ChangeElementDrawCommand(id = 15 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 26 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 15 , end = 26 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 26 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 27 ) Molecule::addAtom( 28 ) AdjustHydrogensPreCommand(atomId = 26 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 29 ) Molecule::addAtom( 30 ) Molecule::addAtom( 31 ) ChangeElementDrawCommand(id = 16 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 32 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 16 , end = 32 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 32 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 16 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 33 ) Molecule::addAtom( 34 ) AdjustHydrogensPreCommand(atomId = 32 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 35 ) Molecule::addAtom( 36 ) Molecule::addAtom( 37 ) ChangeElementDrawCommand(id = 22 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 38 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 22 , end = 38 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 38 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 22 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 39 ) Molecule::addAtom( 40 ) AdjustHydrogensPreCommand(atomId = 38 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 41 ) Molecule::addAtom( 42 ) Molecule::addAtom( 43 ) ChangeElementDrawCommand(id = 24 , old = 1 , new = 6 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 24 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 44 ) Molecule::addAtom( 45 ) Molecule::addAtom( 46 ) ChangeElementDrawCommand(id = 2 , old = 1 , new = 6 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 2 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 47 ) Molecule::addAtom( 48 ) Molecule::addAtom( 49 ) avogadro-1.1.1/testfiles/propan-2-ol.cml0000644000175000001440000000522112250371054017271 0ustar marcususers Propan-2-ol 60.0950 60.0575149 -89 82 avogadro-1.1.1/testfiles/ferrocene.cml0000644000175000001440000000735312250371054017203 0ustar marcususers avogadro-1.1.1/testfiles/propan-1-ol.cml0000644000175000001440000000522312250371054017272 0ustar marcususers Propan-1-ol 60.0950 60.0575149 -131 97 avogadro-1.1.1/testfiles/c4h4.wfn0000644000175000001440000010236512250371054016013 0ustar marcususersTetrahedrane 6-31G* at 6-31G* geometry 1/11/91 JRC GAUSSIAN 14 MOL ORBITALS 128 PRIMITIVES 8 NUCLEI C 1 (CENTRE 1) 0.97775600 0.97775600 0.97775600 CHARGE = 6.0 C 2 (CENTRE 2) -0.97775600 -0.97775600 0.97775600 CHARGE = 6.0 C 3 (CENTRE 3) 0.97775600 -0.97775600 -0.97775600 CHARGE = 6.0 C 4 (CENTRE 4) -0.97775600 0.97775600 -0.97775600 CHARGE = 6.0 H 5 (CENTRE 5) 2.13806500 2.13806500 2.13806500 CHARGE = 1.0 H 6 (CENTRE 6) -2.13806500 -2.13806500 2.13806500 CHARGE = 1.0 H 7 (CENTRE 7) 2.13806500 -2.13806500 -2.13806500 CHARGE = 1.0 H 8 (CENTRE 8) -2.13806500 2.13806500 -2.13806500 CHARGE = 1.0 CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 CENTRE ASSIGNMENTS 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 CENTRE ASSIGNMENTS 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 CENTRE ASSIGNMENTS 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 CENTRE ASSIGNMENTS 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 6 6 6 6 CENTRE ASSIGNMENTS 7 7 7 7 8 8 8 8 TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 TYPE ASSIGNMENTS 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 1 2 2 2 TYPE ASSIGNMENTS 3 3 3 4 4 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 TYPE ASSIGNMENTS 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 3 4 5 6 TYPE ASSIGNMENTS 7 8 9 10 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 TYPE ASSIGNMENTS 4 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 EXPONENTS 0.3047525E+04 0.4573695E+03 0.1039487E+03 0.2921016E+02 0.9286663E+01 EXPONENTS 0.3163927E+01 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 EXPONENTS 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.1687145E+00 0.1687145E+00 EXPONENTS 0.1687145E+00 0.1687145E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.3047525E+04 0.4573695E+03 EXPONENTS 0.1039487E+03 0.2921016E+02 0.9286663E+01 0.3163927E+01 0.7868272E+01 EXPONENTS 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 EXPONENTS 0.5442493E+00 0.1687145E+00 0.1687145E+00 0.1687145E+00 0.1687145E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.3047525E+04 0.4573695E+03 0.1039487E+03 0.2921016E+02 EXPONENTS 0.9286663E+01 0.3163927E+01 0.7868272E+01 0.1881289E+01 0.5442493E+00 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 EXPONENTS 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.1687145E+00 EXPONENTS 0.1687145E+00 0.1687145E+00 0.1687145E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.3047525E+04 EXPONENTS 0.4573695E+03 0.1039487E+03 0.2921016E+02 0.9286663E+01 0.3163927E+01 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 EXPONENTS 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 EXPONENTS 0.1881289E+01 0.5442493E+00 0.1687145E+00 0.1687145E+00 0.1687145E+00 EXPONENTS 0.1687145E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.1873114E+02 0.2825394E+01 0.6401217E+00 EXPONENTS 0.1612778E+00 0.1873114E+02 0.2825394E+01 0.6401217E+00 0.1612778E+00 EXPONENTS 0.1873114E+02 0.2825394E+01 0.6401217E+00 0.1612778E+00 0.1873114E+02 EXPONENTS 0.2825394E+01 0.6401217E+00 0.1612778E+00 MO 1 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.2380343 0.26693201E+00 0.49243743E+00 0.79494670E+00 0.10347844E+01 0.88298341E+00 0.30487295E+00 -0.58011440E-02 -0.26737419E-02 0.74974515E-02 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 -0.24675943E-03 0.17853802E-03 0.17853802E-03 0.17853802E-03 -0.13142320E-02 -0.13142320E-02 -0.13142320E-02 0.30335721E-05 0.30335722E-05 0.30335721E-05 0.26693201E+00 0.49243743E+00 0.79494670E+00 0.10347844E+01 0.88298341E+00 0.30487295E+00 -0.58011440E-02 -0.26737419E-02 0.74974515E-02 0.61745883E-03 0.47342827E-03 0.23627389E-03 0.61745883E-03 0.47342827E-03 0.23627389E-03 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 -0.24675943E-03 -0.17853802E-03 -0.17853802E-03 0.17853802E-03 -0.13142320E-02 -0.13142320E-02 -0.13142320E-02 0.30335721E-05 -0.30335721E-05 -0.30335722E-05 0.26693201E+00 0.49243743E+00 0.79494670E+00 0.10347844E+01 0.88298341E+00 0.30487295E+00 -0.58011440E-02 -0.26737419E-02 0.74974515E-02 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 0.61745883E-03 0.47342827E-03 0.23627389E-03 0.61745883E-03 0.47342827E-03 0.23627389E-03 -0.24675943E-03 0.17853802E-03 -0.17853802E-03 -0.17853802E-03 -0.13142320E-02 -0.13142320E-02 -0.13142320E-02 -0.30335722E-05 -0.30335722E-05 0.30335722E-05 0.26693201E+00 0.49243743E+00 0.79494670E+00 0.10347844E+01 0.88298341E+00 0.30487295E+00 -0.58011440E-02 -0.26737419E-02 0.74974515E-02 0.61745883E-03 0.47342827E-03 0.23627389E-03 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 0.61745883E-03 0.47342827E-03 0.23627389E-03 -0.24675943E-03 -0.17853802E-03 0.17853802E-03 -0.17853802E-03 -0.13142320E-02 -0.13142320E-02 -0.13142320E-02 -0.30335721E-05 0.30335721E-05 -0.30335721E-05 -0.89875950E-04 -0.15244662E-03 -0.17355509E-03 -0.12370279E-03 -0.89875950E-04 -0.15244662E-03 -0.17355509E-03 -0.12370279E-03 -0.89875950E-04 -0.15244662E-03 -0.17355509E-03 -0.12370279E-03 -0.89875950E-04 -0.15244662E-03 -0.17355509E-03 -0.12370279E-03 MO 2 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.2364689 -0.13360531E+00 -0.24647571E+00 -0.39788822E+00 -0.51793224E+00 -0.44195252E+00 -0.15259558E+00 0.27798091E-02 0.12812115E-02 -0.35926507E-02 0.40226024E-03 0.30842764E-03 0.15392701E-03 0.39414475E-03 0.30220519E-03 0.15082157E-03 0.39124026E-03 0.29997822E-03 0.14971015E-03 0.87725150E-03 0.46622737E-04 -0.19861053E-03 -0.28637795E-03 0.65105547E-03 0.24361944E-03 0.97800673E-04 -0.47048277E-04 -0.23342264E-03 -0.75417612E-03 -0.24930352E+00 -0.45991631E+00 -0.74244752E+00 -0.96644607E+00 -0.82467018E+00 -0.28473880E+00 0.51870406E-02 0.23907023E-02 -0.67037788E-02 -0.73635732E-03 -0.56459209E-03 -0.28177102E-03 -0.74447281E-03 -0.57081453E-03 -0.28487646E-03 0.73528041E-03 0.56376638E-03 0.28135893E-03 0.16369251E-02 0.34355622E-03 0.98322959E-04 -0.37609819E-03 0.49951990E-03 0.90695593E-03 0.44545394E-03 -0.42388701E-03 0.10137435E-02 0.49298997E-03 0.44833820E+00 0.82709643E+00 0.13351901E+01 0.17380208E+01 0.14830563E+01 0.51206369E+00 -0.93281815E-02 -0.42993503E-02 0.12055827E-01 -0.13282068E-02 -0.10183847E-02 -0.50824535E-03 0.13300344E-02 0.10197860E-02 0.50894468E-03 0.13271299E-02 0.10175590E-02 0.50783326E-03 -0.29437854E-02 0.49790122E-03 -0.44267576E-03 -0.53044319E-03 -0.10975850E-02 -0.11893378E-02 -0.10435190E-02 -0.10721596E-02 -0.12585340E-02 0.11412626E-02 -0.65429372E-01 -0.12070441E+00 -0.19485435E+00 -0.25364247E+00 -0.21643358E+00 -0.74729313E-01 0.13613318E-02 0.62743659E-03 -0.17593977E-02 -0.18958922E-03 -0.14536499E-03 -0.72547319E-04 0.19141680E-03 0.14676626E-03 0.73246649E-04 -0.20060920E-03 -0.15381441E-03 -0.76764171E-04 0.42960878E-03 0.20096773E-03 -0.14574228E-03 -0.13203295E-03 -0.52990380E-04 0.38762430E-04 0.50026442E-03 0.60122434E-03 -0.11367898E-04 -0.10590350E-03 0.33934163E-04 0.57558764E-04 0.65528618E-04 -0.16786044E-04 0.63320134E-04 0.10740293E-03 0.12227444E-03 -0.31322256E-04 -0.11387258E-03 -0.19314945E-03 -0.21989382E-03 0.56328784E-04 0.16618284E-04 0.28187755E-04 0.32090762E-04 -0.82204838E-05 MO 3 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.2364689 0.41906123E+00 0.77308614E+00 0.12480007E+01 0.16245261E+01 0.13862111E+01 0.47862538E+00 -0.87190411E-02 -0.40185981E-02 0.11268569E-01 -0.12393200E-02 -0.95023195E-03 -0.47423234E-03 -0.12443521E-02 -0.95409025E-03 -0.47615790E-03 -0.12414499E-02 -0.95186503E-03 -0.47504736E-03 -0.27515530E-02 0.53046067E-03 0.37840097E-03 0.46609931E-03 -0.91779785E-03 -0.11704332E-02 -0.10247293E-02 0.10652259E-02 0.12514535E-02 0.92855433E-03 -0.12338996E+00 -0.22763039E+00 -0.36746603E+00 -0.47833158E+00 -0.40816121E+00 -0.14092826E+00 0.25672673E-02 0.11832511E-02 -0.33179597E-02 -0.36011201E-03 -0.27611105E-03 -0.13779877E-03 -0.36514412E-03 -0.27996935E-03 -0.13972433E-03 0.37158279E-03 0.28490611E-03 0.14218812E-03 0.81017761E-03 0.30117711E-03 0.14911741E-03 0.45445851E-04 0.29356401E-04 0.28199180E-03 0.60524356E-03 -0.70158307E-03 0.28842746E-03 -0.34471718E-04 0.11448112E-01 0.21119531E-01 0.34093471E-01 0.44379569E-01 0.37869167E-01 0.13075313E-01 -0.23819087E-03 -0.10978195E-03 0.30784006E-03 -0.27241759E-04 -0.20887253E-04 -0.10424203E-04 0.35810339E-04 0.27457097E-04 0.13703016E-04 0.38712536E-04 0.29682317E-04 0.14813557E-04 -0.75168219E-04 0.21436981E-03 0.44554818E-04 0.13225316E-03 0.30700967E-03 -0.12317350E-03 -0.26887749E-03 -0.33697909E-03 -0.15075143E-03 -0.39907570E-03 -0.30711937E+00 -0.56657528E+00 -0.91462817E+00 -0.11905741E+01 -0.10159191E+01 -0.35077243E+00 0.63899647E-02 0.29451289E-02 -0.82584489E-02 -0.90644972E-03 -0.69500816E-03 -0.34685778E-03 0.91501831E-03 0.70157800E-03 0.35013659E-03 -0.90857963E-03 -0.69664123E-03 -0.34767280E-03 0.20165436E-02 0.44365337E-03 -0.18472874E-03 0.37929200E-03 0.58143178E-03 0.10116150E-02 0.68836319E-03 0.70062187E-03 -0.11137775E-02 0.56395035E-03 -0.10643658E-03 -0.18053658E-03 -0.20553452E-03 0.52650453E-04 0.31339586E-04 0.53157870E-04 0.60518356E-04 -0.15502597E-04 -0.29076845E-05 -0.49319833E-05 -0.56148887E-05 0.14383298E-05 0.78004676E-04 0.13231069E-03 0.15063105E-03 -0.38586185E-04 MO 4 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.2364689 -0.14319701E+00 -0.26417052E+00 -0.42645312E+00 -0.55511525E+00 -0.47368085E+00 -0.16355061E+00 0.29793751E-02 0.13731913E-02 -0.38505716E-02 0.42533783E-03 0.32612207E-03 0.16275777E-03 0.41818344E-03 0.32063654E-03 0.16002010E-03 0.42938655E-03 0.32922637E-03 0.16430703E-03 0.94023051E-03 -0.12532999E-03 -0.34152068E-03 -0.29858984E-05 0.40654850E-03 0.47364448E-04 0.60981372E-03 -0.69586773E-03 0.23011784E-04 -0.43606972E-03 0.36958185E+00 0.68180636E+00 0.11006469E+01 0.14327152E+01 0.12225385E+01 0.42211315E+00 -0.76895670E-02 -0.35441144E-02 0.99380668E-02 0.10985157E-02 0.84227219E-03 0.42035285E-03 0.10913613E-02 0.83678666E-03 0.41761519E-03 -0.10954125E-02 -0.83989282E-03 -0.41916538E-03 -0.24266718E-02 -0.30088417E-03 -0.51707486E-03 0.39465762E-03 -0.10867962E-02 -0.72761210E-03 -0.93099883E-03 0.97429593E-03 -0.71434261E-03 -0.11734241E-02 0.11326904E+00 0.20895925E+00 0.33732502E+00 0.43909695E+00 0.37468223E+00 0.12936877E+00 -0.23566899E-02 -0.10861962E-02 0.30458076E-02 -0.33728951E-03 -0.25861220E-03 -0.12906561E-03 0.32918963E-03 0.25240173E-03 0.12596615E-03 0.34039275E-03 0.26099157E-03 0.13025308E-03 -0.74372367E-03 0.73551176E-04 -0.31831250E-03 0.20222281E-04 -0.36408798E-03 0.42563974E-04 -0.51988530E-03 -0.59838982E-03 0.12048969E-03 0.39926164E-03 -0.33965388E+00 -0.62659509E+00 -0.10115188E+01 -0.13166969E+01 -0.11235398E+01 -0.38793130E+00 0.70668818E-02 0.32571194E-02 -0.91333027E-02 -0.10104674E-02 -0.77476232E-03 -0.38666070E-03 0.10023675E-02 0.76855185E-03 0.38356124E-03 -0.10064187E-02 -0.77165802E-03 -0.38511143E-03 0.22301649E-02 0.24910535E-03 -0.49386668E-03 0.37144944E-03 0.10443356E-02 0.63768368E-03 0.84107041E-03 0.87681802E-03 -0.61686470E-03 0.11366160E-02 0.36370340E-04 0.61690981E-04 0.70233001E-04 -0.17991135E-04 -0.93869405E-04 -0.15922028E-03 -0.18126666E-03 0.46433912E-04 -0.28768991E-04 -0.48797653E-04 -0.55554403E-04 0.14231014E-04 0.86268055E-04 0.14632695E-03 0.16658806E-03 -0.42673790E-04 MO 5 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -1.2965995 -0.57728863E-01 -0.10649848E+00 -0.17192157E+00 -0.22379080E+00 -0.19096109E+00 -0.65934276E-01 -0.82048544E-01 -0.37816099E-01 0.10604029E+00 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 0.19143947E-01 -0.39103300E-03 -0.39103300E-03 -0.39103300E-03 0.25806563E-02 0.25806563E-02 0.25806563E-02 0.20153688E-01 0.20153688E-01 0.20153688E-01 -0.57728863E-01 -0.10649848E+00 -0.17192157E+00 -0.22379080E+00 -0.19096109E+00 -0.65934276E-01 -0.82048544E-01 -0.37816099E-01 0.10604029E+00 0.10615075E+00 0.81389661E-01 0.40619145E-01 0.10615075E+00 0.81389661E-01 0.40619145E-01 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 0.19143947E-01 0.39103300E-03 0.39103300E-03 -0.39103300E-03 0.25806563E-02 0.25806563E-02 0.25806563E-02 0.20153688E-01 -0.20153688E-01 -0.20153688E-01 -0.57728863E-01 -0.10649848E+00 -0.17192157E+00 -0.22379080E+00 -0.19096109E+00 -0.65934276E-01 -0.82048544E-01 -0.37816099E-01 0.10604029E+00 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 0.10615075E+00 0.81389661E-01 0.40619145E-01 0.10615075E+00 0.81389661E-01 0.40619145E-01 0.19143947E-01 -0.39103300E-03 0.39103300E-03 0.39103300E-03 0.25806563E-02 0.25806563E-02 0.25806563E-02 -0.20153688E-01 -0.20153688E-01 0.20153688E-01 -0.57728863E-01 -0.10649848E+00 -0.17192157E+00 -0.22379080E+00 -0.19096109E+00 -0.65934276E-01 -0.82048544E-01 -0.37816099E-01 0.10604029E+00 0.10615075E+00 0.81389661E-01 0.40619145E-01 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 0.10615075E+00 0.81389661E-01 0.40619145E-01 0.19143947E-01 0.39103300E-03 -0.39103300E-03 0.39103300E-03 0.25806563E-02 0.25806563E-02 0.25806563E-02 -0.20153688E-01 0.20153688E-01 -0.20153688E-01 0.44775954E-02 0.75948493E-02 0.86464675E-02 -0.11533665E-02 0.44775954E-02 0.75948493E-02 0.86464675E-02 -0.11533665E-02 0.44775954E-02 0.75948493E-02 0.86464675E-02 -0.11533665E-02 0.44775954E-02 0.75948493E-02 0.86464675E-02 -0.11533665E-02 MO 6 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.8053912 -0.96389409E-02 -0.17781964E-01 -0.28705603E-01 -0.37366166E-01 -0.31884617E-01 -0.11008992E-01 -0.13914564E-01 -0.64132098E-02 0.17983310E-01 -0.11652462E+00 -0.89343685E-01 -0.44588761E-01 -0.18258901E-01 -0.13999767E-01 -0.69868648E-02 0.16412115E+00 0.12583769E+00 0.62801825E-01 0.76330712E-02 -0.37176846E-02 -0.66911543E-03 0.49889942E-02 0.12085810E-01 0.31759623E-02 -0.13360614E-01 0.24911443E-01 -0.13498814E-02 -0.15499389E-01 -0.69432276E-01 -0.12808899E+00 -0.20677535E+00 -0.26916006E+00 -0.22967477E+00 -0.79301179E-01 -0.10023091E+00 -0.46196336E-01 0.12953935E+00 -0.84750158E-01 -0.64981046E-01 -0.32430096E-01 0.13515558E-01 0.10362872E-01 0.51717996E-02 0.14009343E+00 0.10741476E+00 0.53607492E-01 0.54983376E-01 -0.18898018E-02 0.11587674E-02 0.36067566E-02 0.32676048E-02 0.12177453E-01 -0.17504234E-02 0.29387282E-01 -0.72687689E-02 -0.21418276E-01 0.62661333E-01 0.11559792E+00 0.18661089E+00 0.24291193E+00 0.20727719E+00 0.71567833E-01 0.90456527E-01 0.41691331E-01 -0.11690684E+00 -0.87471035E-01 -0.67067242E-01 -0.33471254E-01 -0.39565741E-01 -0.30336500E-01 -0.15140040E-01 0.14281431E+00 0.10950095E+00 0.54648650E-01 -0.49621470E-01 -0.20463252E-02 -0.18948297E-02 0.37632800E-02 -0.19528773E-02 -0.13471425E-01 0.30651509E-02 0.28880442E-01 0.26191175E-02 -0.20911436E-01 0.16409884E-01 0.30273032E-01 0.48870060E-01 0.63614298E-01 0.54282196E-01 0.18742338E-01 0.23688949E-01 0.10918215E-01 -0.30615815E-01 -0.11924549E+00 -0.91429881E-01 -0.45629919E-01 -0.77912824E-02 -0.59738611E-02 -0.29813754E-02 0.16140027E+00 0.12375149E+00 0.61760667E-01 -0.12994977E-01 -0.38742080E-02 -0.66946879E-04 0.48324709E-02 -0.13400538E-01 -0.18819898E-02 0.12045886E-01 0.25418283E-01 -0.32997700E-02 -0.14992549E-01 0.48009308E-02 0.81432872E-02 0.92708447E-02 0.18997559E-02 0.34582591E-01 0.58658619E-01 0.66780765E-01 0.13684530E-01 -0.31210142E-01 -0.52938309E-01 -0.60268393E-01 -0.12350033E-01 -0.81733791E-02 -0.13863598E-01 -0.15783216E-01 -0.32342531E-02 MO 7 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.8053912 -0.74474309E-01 -0.13739056E+00 -0.22179096E+00 -0.28870593E+00 -0.24635329E+00 -0.85059872E-01 -0.10750948E+00 -0.49551022E-01 0.13894624E+00 0.13361497E+00 0.10244749E+00 0.51128476E-01 0.99095615E-02 0.75980232E-02 0.37919461E-02 0.83149717E-01 0.63753929E-01 0.31817679E-01 0.58976159E-01 0.33520723E-02 -0.48573120E-03 0.17864517E-02 -0.36770411E-03 0.10848786E-01 0.42080297E-02 0.21856993E-01 0.11310974E-01 0.29123602E-01 0.21251560E-01 0.39204978E-01 0.63288991E-01 0.82383461E-01 0.70297957E-01 0.24272195E-01 0.30678286E-01 0.14139594E-01 -0.39648898E-01 0.15500233E+00 0.11884595E+00 0.59312459E-01 0.31296915E-01 0.23996489E-01 0.11975930E-01 0.12161678E+00 0.93248035E-01 0.46537305E-01 -0.16829097E-01 0.45824182E-02 0.74461472E-03 0.39993388E-02 0.10702071E-01 -0.51441884E-03 -0.14379252E-01 0.14691419E-01 0.73269772E-02 0.25139605E-01 -0.25012937E-02 -0.46143984E-02 -0.74490698E-02 -0.96964755E-02 -0.82740201E-02 -0.28568203E-02 -0.36108127E-02 -0.16642203E-02 0.46666474E-02 0.16253705E+00 0.12462310E+00 0.62195660E-01 0.40841906E-01 0.31314983E-01 0.15628371E-01 0.11408206E+00 0.87470888E-01 0.43654104E-01 0.19807729E-02 0.50158666E-02 0.12937075E-02 0.35658904E-02 -0.14342847E-01 0.40977199E-02 0.10738476E-01 0.16094973E-01 0.55489539E-02 0.23736051E-01 0.55724043E-01 0.10279998E+00 0.16595104E+00 0.21601895E+00 0.18432936E+00 0.63644498E-01 0.80442008E-01 0.37075648E-01 -0.10396399E+00 0.14114969E+00 0.10822463E+00 0.54011676E-01 0.62229259E-01 0.47713449E-01 0.23812355E-01 0.90684438E-01 0.69531075E-01 0.34700880E-01 -0.44127835E-01 0.37855206E-02 0.25240534E-02 0.22199001E-02 0.40084805E-02 -0.14432087E-01 -0.56725327E-03 0.20453439E-01 0.15649572E-02 0.27720048E-01 0.37093910E-01 0.62918292E-01 0.71630251E-01 0.14678273E-01 -0.10584904E-01 -0.17954001E-01 -0.20439996E-01 -0.41885076E-02 0.12458358E-02 0.21131733E-02 0.24057731E-02 0.49298440E-03 -0.27754841E-01 -0.47077464E-01 -0.53596028E-01 -0.10982750E-01 MO 8 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.8053912 -0.34536587E-01 -0.63713259E-01 -0.10285295E+00 -0.13388399E+00 -0.11424345E+00 -0.39445517E-01 -0.49856260E-01 -0.22978705E-01 0.64434686E-01 -0.54903460E-01 -0.42096491E-01 -0.21009099E-01 0.18442817E+00 0.14140782E+00 0.70572415E-01 -0.24407188E-01 -0.18713884E-01 -0.93395396E-02 0.27349501E-01 -0.20711301E-02 0.53538302E-02 -0.11250220E-02 0.10425820E-01 -0.11274611E-01 0.76606938E-02 0.10691756E-02 0.31139861E-01 -0.33220531E-02 0.39492253E-01 0.72855495E-01 0.11761136E+00 0.15309504E+00 0.13063628E+00 0.45105567E-01 0.57010151E-01 0.26275926E-01 -0.73680441E-01 -0.56894875E-01 -0.43623381E-01 -0.21771125E-01 0.18243676E+00 0.13988093E+00 0.69810389E-01 0.53410106E-02 0.40951482E-02 0.20437659E-02 -0.31273890E-01 -0.21856899E-02 0.52392704E-02 0.58629661E-03 -0.11388072E-01 0.10312360E-01 -0.67136329E-02 -0.44722640E-02 0.31510818E-01 -0.29510959E-02 0.53846158E-01 0.99335647E-01 0.16035853E+00 0.20873916E+00 0.17811751E+00 0.61499695E-01 0.77731134E-01 0.35826208E-01 -0.10046043E+00 -0.19387201E-01 -0.14864876E-01 -0.74186149E-02 0.17666870E+00 0.13545835E+00 0.67603210E-01 -0.32166663E-01 -0.24663357E-01 -0.12308744E-01 -0.42640739E-01 -0.27993513E-04 0.49074524E-02 -0.15713997E-02 -0.67356325E-02 0.75252335E-02 -0.11410071E-01 0.25145963E-02 0.32585282E-01 -0.99379563E-02 -0.58801824E-01 -0.10847788E+00 -0.17511694E+00 -0.22795022E+00 -0.19451034E+00 -0.67159745E-01 -0.84885025E-01 -0.39123430E-01 0.10970618E+00 -0.17395786E-01 -0.13337985E-01 -0.66565894E-02 0.17467728E+00 0.13393146E+00 0.66841185E-01 0.13100486E-01 0.10044622E-01 0.50129702E-02 0.46565127E-01 0.86566212E-04 0.47928927E-02 0.10326744E-02 0.76978840E-02 -0.65629820E-02 0.10463011E-01 -0.59176848E-02 0.32956239E-01 -0.10308913E-01 0.17201865E-01 0.29177619E-01 0.33217688E-01 0.68068770E-02 -0.19670166E-01 -0.33364325E-01 -0.37984105E-01 -0.77835980E-02 -0.26819510E-01 -0.45490966E-01 -0.51789856E-01 -0.10612635E-01 0.29287812E-01 0.49677672E-01 0.56556273E-01 0.11589356E-01 MO 9 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.7096543 -0.16783389E-01 -0.30962076E-01 -0.49982391E-01 -0.65062221E-01 -0.55517711E-01 -0.19168932E-01 -0.23164280E-01 -0.10676395E-01 0.29937727E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 0.19011742E-01 0.65481182E-02 0.65481182E-02 0.65481182E-02 0.30838012E-02 0.30838012E-02 0.30838012E-02 -0.23251198E-02 -0.23251198E-02 -0.23251198E-02 -0.16783389E-01 -0.30962076E-01 -0.49982391E-01 -0.65062221E-01 -0.55517711E-01 -0.19168932E-01 -0.23164280E-01 -0.10676395E-01 0.29937727E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 0.19011742E-01 -0.65481182E-02 -0.65481182E-02 0.65481182E-02 0.30838012E-02 0.30838012E-02 0.30838012E-02 -0.23251198E-02 0.23251198E-02 0.23251198E-02 -0.16783389E-01 -0.30962076E-01 -0.49982391E-01 -0.65062221E-01 -0.55517711E-01 -0.19168932E-01 -0.23164280E-01 -0.10676395E-01 0.29937727E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 0.19011742E-01 0.65481182E-02 -0.65481182E-02 -0.65481182E-02 0.30838012E-02 0.30838012E-02 0.30838012E-02 0.23251198E-02 0.23251198E-02 -0.23251198E-02 -0.16783389E-01 -0.30962076E-01 -0.49982391E-01 -0.65062221E-01 -0.55517711E-01 -0.19168932E-01 -0.23164280E-01 -0.10676395E-01 0.29937727E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 0.19011742E-01 -0.65481182E-02 0.65481182E-02 -0.65481182E-02 0.30838012E-02 0.30838012E-02 0.30838012E-02 0.23251198E-02 -0.23251198E-02 0.23251198E-02 0.31940020E-01 0.54176319E-01 0.61677824E-01 0.14962780E-01 0.31940020E-01 0.54176319E-01 0.61677824E-01 0.14962780E-01 0.31940020E-01 0.54176319E-01 0.61677824E-01 0.14962780E-01 0.31940020E-01 0.54176319E-01 0.61677824E-01 0.14962780E-01 MO 10 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.5340742 0.20525814E-02 0.37866118E-02 0.61127655E-02 0.79570044E-02 0.67897263E-02 0.23443293E-02 0.31345534E-02 0.14447128E-02 -0.40511255E-02 0.25602753E+00 0.19630567E+00 0.97970288E-01 0.24662185E+00 0.18909399E+00 0.94371155E-01 -0.93560206E-01 -0.71736032E-01 -0.35801308E-01 -0.11031654E-01 0.15958983E-01 0.15481969E-01 -0.17705431E-02 -0.12066960E-01 -0.11144779E-01 0.22208400E-01 -0.39594607E-02 0.22729481E-01 0.23467402E-01 0.20410881E-02 0.37654090E-02 0.60785376E-02 0.79124499E-02 0.67517078E-02 0.23312025E-02 0.31170018E-02 0.14366233E-02 -0.40284416E-02 -0.24618151E+00 -0.18875637E+00 -0.94202657E-01 -0.25558719E+00 -0.19596805E+00 -0.97801791E-01 -0.94970192E-01 -0.72817119E-01 -0.36340846E-01 -0.10969883E-01 -0.15442982E-01 -0.15919996E-01 -0.18587063E-02 -0.11174596E-01 -0.12096777E-01 0.22273652E-01 -0.40890114E-02 -0.23413925E-01 -0.22676004E-01 -0.21025775E-02 -0.38788450E-02 -0.62616585E-02 -0.81508188E-02 -0.69551085E-02 -0.24014318E-02 -0.32109040E-02 -0.14799027E-02 0.41498016E-02 -0.25372500E+00 -0.19454024E+00 -0.97089213E-01 0.25275535E+00 0.19379677E+00 0.96718172E-01 -0.87426704E-01 -0.67033251E-01 -0.33454290E-01 0.11300360E-01 -0.15914659E-01 0.15865483E-01 -0.13870295E-02 0.11523699E-01 0.11428629E-01 -0.21924550E-01 -0.33959091E-02 0.23293032E-01 -0.23369106E-01 -0.19910919E-02 -0.36731758E-02 -0.59296447E-02 -0.77186355E-02 -0.65863257E-02 -0.22741000E-02 -0.30406512E-02 -0.14014334E-02 0.39297655E-02 0.24848404E+00 0.19052180E+00 0.95083733E-01 -0.24945369E+00 -0.19126527E+00 -0.95454774E-01 -0.10110369E+00 -0.77519900E-01 -0.38687863E-01 0.10701177E-01 0.15487306E-01 -0.15536482E-01 -0.22422199E-02 0.11717858E-01 0.11812927E-01 -0.22557503E-01 -0.46525630E-02 -0.22850374E-01 0.22774300E-01 0.25401252E-01 0.43085330E-01 0.49051126E-01 0.15391510E-01 0.25259019E-01 0.42844078E-01 0.48776468E-01 0.15305326E-01 -0.26019968E-01 -0.44134790E-01 -0.50245899E-01 -0.15766412E-01 -0.24640303E-01 -0.41794618E-01 -0.47581695E-01 -0.14930424E-01 MO 11 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.5340742 0.28913561E-02 0.53339874E-02 0.86107096E-02 0.11208585E-01 0.95643062E-02 0.33023251E-02 0.44154694E-02 0.20350858E-02 -0.57065930E-02 0.10575234E+00 0.81084189E-01 0.40466693E-01 0.11524226E+00 0.88360457E-01 0.44098061E-01 0.35526634E+00 0.27239570E+00 0.13594454E+00 -0.15539672E-01 0.95531729E-02 0.10034459E-01 0.22207407E-01 0.79935715E-02 0.70631316E-02 -0.16470051E-01 0.32634712E-01 0.13803652E-01 0.13059122E-01 -0.28979513E-02 -0.53461544E-02 -0.86303508E-02 -0.11234152E-01 -0.95861226E-02 -0.33098578E-02 -0.44255412E-02 -0.20397279E-02 0.57196099E-02 0.10656145E+00 0.81704558E-01 0.40776301E-01 0.11605136E+00 0.88980825E-01 0.44407668E-01 -0.35496261E+00 -0.27216281E+00 -0.13582832E+00 0.15575118E-01 0.96037642E-02 0.10085050E-01 -0.22201560E-01 -0.79561273E-02 -0.70256874E-02 0.16398386E-01 -0.32621745E-01 0.13877993E-01 0.13133463E-01 0.59539660E-04 0.10983905E-03 0.17731428E-03 0.23081051E-03 0.19695102E-03 0.68002455E-04 0.90924652E-04 0.41907089E-04 -0.11751185E-03 -0.24165329E+00 -0.18528441E+00 -0.92469909E-01 -0.24677195E+00 -0.18920908E+00 -0.94428593E-01 -0.67478710E-02 -0.51738395E-02 -0.25821085E-02 -0.31999751E-03 -0.12169294E-01 -0.12601449E-01 -0.42850123E-03 0.24071035E-01 -0.23816661E-01 -0.28347844E-03 -0.62747080E-03 -0.19458531E-01 -0.18860812E-01 -0.52944403E-04 -0.97672085E-04 -0.15767303E-03 -0.20524344E-03 -0.17513460E-03 -0.60469767E-04 -0.80852853E-04 -0.37265006E-04 0.10449497E-03 -0.24246239E+00 -0.18590478E+00 -0.92779516E-01 -0.24596285E+00 -0.18858871E+00 -0.94118985E-01 0.70516099E-02 0.54067272E-02 0.26983358E-02 0.28455113E-03 -0.12219886E-01 -0.12550858E-01 0.43434826E-03 -0.24108479E-01 0.23779216E-01 0.35514290E-03 0.64043758E-03 -0.19384190E-01 -0.18935153E-01 0.35781317E-01 0.60691885E-01 0.69095566E-01 0.21681156E-01 -0.35862935E-01 -0.60830325E-01 -0.69253175E-01 -0.21730611E-01 0.73681946E-03 0.12497853E-02 0.14228363E-02 0.44646477E-03 -0.65520136E-03 -0.11113455E-02 -0.12652276E-02 -0.39700950E-03 MO 12 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.5340742 0.16654145E-04 0.30723645E-04 0.49597490E-04 0.64561195E-04 0.55090184E-04 0.19021317E-04 0.25433003E-04 0.11722048E-04 -0.32869845E-04 0.24147428E+00 0.18514716E+00 0.92401409E-01 -0.24686103E+00 -0.18927738E+00 -0.94462677E-01 0.87059979E-02 0.66752070E-02 0.33313961E-02 -0.89508152E-04 0.12270629E-01 -0.12495553E-01 0.46566292E-03 -0.23569602E-01 0.24309276E-01 -0.74781523E-03 0.71045894E-03 -0.19340021E-01 0.18972266E-01 -0.95629266E-04 -0.17641732E-03 -0.28479226E-03 -0.37071490E-03 -0.31633170E-03 -0.10922173E-03 -0.14603808E-03 -0.67308819E-04 0.18874095E-03 0.25116290E+00 0.19257578E+00 0.96108812E-01 -0.23717240E+00 -0.18184876E+00 -0.90755274E-01 -0.50688672E-02 -0.38864859E-02 -0.19396288E-02 0.51396208E-03 0.12876436E-01 -0.11889746E-01 -0.39564740E-03 0.24017978E-01 -0.23860900E-01 -0.11033307E-03 -0.55518772E-03 -0.18449821E-01 0.19862465E-01 -0.28546331E-02 -0.52662407E-02 -0.85013454E-02 -0.11066226E-01 -0.94428305E-02 -0.32603824E-02 -0.43593888E-02 -0.20092383E-02 0.56341139E-02 -0.11077362E+00 -0.84934183E-01 -0.42388110E-01 0.10130063E+00 0.77670895E-01 0.38763220E-01 0.35686765E+00 0.27362348E+00 0.13655729E+00 0.15342303E-01 -0.97546139E-02 0.92741862E-02 0.22235402E-01 -0.72680448E-02 -0.81968249E-02 0.16860266E-01 0.32699856E-01 0.12649376E-01 -0.13392579E-01 0.29336083E-02 0.54119344E-02 0.87365402E-02 0.11372379E-01 0.97040720E-02 0.33505829E-02 0.44799939E-02 0.20648251E-02 -0.57899850E-02 -0.12046224E+00 -0.92362804E-01 -0.46095513E-01 0.11098925E+00 0.85099516E-01 0.42470623E-01 -0.35323052E+00 -0.27083476E+00 -0.13516553E+00 -0.15766757E-01 -0.10360421E-01 0.98799933E-02 -0.22165387E-01 0.68196684E-02 0.77484485E-02 -0.16002118E-01 -0.32544585E-01 0.13539576E-01 -0.14282778E-01 0.20609956E-03 0.34958387E-03 0.39798888E-03 0.12488296E-03 -0.11834381E-02 -0.20073351E-02 -0.22852800E-02 -0.71708670E-03 -0.35326860E-01 -0.59921041E-01 -0.68217988E-01 -0.21405784E-01 0.36304199E-01 0.61578793E-01 0.70105279E-01 0.21997988E-01 MO 13 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.3317291 -0.36495206E-14 -0.67326530E-14 -0.10868589E-13 -0.14147674E-13 -0.12072236E-13 -0.41682530E-14 -0.18851650E-14 -0.86887083E-15 0.24364045E-14 -0.63288358E-01 -0.48525499E-01 -0.24217625E-01 -0.24830844E+00 -0.19038716E+00 -0.95016539E-01 0.31159680E+00 0.23891266E+00 0.11923416E+00 0.65142744E-13 -0.59376216E-02 -0.23295936E-01 0.29233558E-01 -0.74388283E-03 -0.29185840E-02 0.36624668E-02 0.38365817E-01 -0.30573344E-01 -0.77924727E-02 -0.20221178E-14 -0.37304124E-14 -0.60220424E-14 -0.78389098E-14 -0.66889560E-14 -0.23095357E-14 -0.88316400E-14 -0.40704948E-14 0.11414092E-13 0.63288358E-01 0.48525499E-01 0.24217625E-01 0.24830844E+00 0.19038716E+00 0.95016539E-01 0.31159680E+00 0.23891266E+00 0.11923416E+00 0.34430177E-13 0.59376216E-02 0.23295936E-01 0.29233558E-01 -0.74388283E-03 -0.29185840E-02 0.36624668E-02 0.38365817E-01 0.30573344E-01 0.77924727E-02 0.57685046E-16 0.10641765E-15 0.17179108E-15 0.22362094E-15 0.19081615E-15 0.65884232E-16 -0.14807045E-13 -0.68245535E-14 0.19136760E-13 -0.63288358E-01 -0.48525499E-01 -0.24217625E-01 0.24830844E+00 0.19038716E+00 0.95016539E-01 -0.31159680E+00 -0.23891266E+00 -0.11923416E+00 0.55760697E-14 -0.59376216E-02 0.23295936E-01 -0.29233558E-01 -0.74388283E-03 -0.29185840E-02 0.36624668E-02 -0.38365817E-01 0.30573344E-01 -0.77924727E-02 -0.15149400E-14 -0.27947685E-14 -0.45116230E-14 -0.58727926E-14 -0.50112645E-14 -0.17302692E-14 -0.70233960E-14 -0.32370768E-14 0.90771012E-14 0.63288358E-01 0.48525499E-01 0.24217625E-01 -0.24830844E+00 -0.19038716E+00 -0.95016539E-01 -0.31159680E+00 -0.23891266E+00 -0.11923416E+00 0.36183546E-13 0.59376216E-02 -0.23295936E-01 -0.29233558E-01 -0.74388283E-03 -0.29185840E-02 0.36624668E-02 -0.38365817E-01 -0.30573344E-01 0.77924727E-02 -0.55690635E-15 -0.94461857E-15 -0.10754149E-14 -0.25677310E-13 -0.97427039E-15 -0.16525470E-14 -0.18813663E-14 -0.37625618E-13 -0.24248538E-14 -0.41130109E-14 -0.46825176E-14 -0.46528245E-13 -0.12681288E-14 -0.21509864E-14 -0.24488220E-14 -0.35763604E-13 MO 14 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.3317291 0.39348459E-14 0.72590224E-14 0.11718313E-13 0.15253762E-13 0.13016062E-13 0.44941335E-14 0.47891249E-13 0.22073033E-13 -0.61895088E-13 0.32326144E+00 0.24785637E+00 0.12369770E+00 -0.21644005E+00 -0.16595250E+00 -0.82821928E-01 -0.10682140E+00 -0.81903871E-01 -0.40875772E-01 -0.34844584E-13 0.30327918E-01 -0.20306090E-01 -0.10021828E-01 0.37995714E-02 -0.25440071E-02 -0.12555643E-02 -0.13152542E-01 -0.26649501E-01 0.39802043E-01 0.38265503E-14 0.70592381E-14 0.11395799E-13 0.14833944E-13 0.12657832E-13 0.43704451E-14 0.48856706E-13 0.22518011E-13 -0.63142854E-13 -0.32326144E+00 -0.24785637E+00 -0.12369770E+00 0.21644005E+00 0.16595250E+00 0.82821928E-01 -0.10682140E+00 -0.81903871E-01 -0.40875772E-01 -0.33404032E-13 -0.30327918E-01 0.20306090E-01 -0.10021828E-01 0.37995714E-02 -0.25440071E-02 -0.12555643E-02 -0.13152542E-01 0.26649501E-01 -0.39802043E-01 0.31654048E-14 0.58395537E-14 0.94268504E-14 0.12270958E-13 0.10470831E-13 0.36153263E-14 0.47551396E-13 0.21916395E-13 -0.61455859E-13 0.32326144E+00 0.24785637E+00 0.12369770E+00 0.21644005E+00 0.16595250E+00 0.82821928E-01 0.10682140E+00 0.81903871E-01 0.40875772E-01 -0.33164406E-13 0.30327918E-01 0.20306090E-01 0.10021828E-01 0.37995714E-02 -0.25440071E-02 -0.12555643E-02 0.13152542E-01 0.26649501E-01 0.39802043E-01 0.37820742E-14 0.69771885E-14 0.11263346E-13 0.14661529E-13 0.12510709E-13 0.43196473E-14 0.44902243E-13 0.20695403E-13 -0.58032070E-13 -0.32326144E+00 -0.24785637E+00 -0.12369770E+00 -0.21644005E+00 -0.16595250E+00 -0.82821928E-01 0.10682140E+00 0.81903871E-01 0.40875772E-01 -0.44495561E-13 -0.30327918E-01 -0.20306090E-01 0.10021828E-01 0.37995714E-02 -0.25440071E-02 -0.12555643E-02 0.13152542E-01 -0.26649501E-01 -0.39802043E-01 -0.19063144E-14 -0.32334701E-14 -0.36811914E-14 0.42081563E-13 -0.12518890E-14 -0.21234406E-14 -0.24174621E-14 0.41194256E-13 -0.79033825E-15 -0.13405633E-14 -0.15261839E-14 0.42572468E-13 -0.11195100E-14 -0.18989009E-14 -0.21618315E-14 0.38501656E-13 END DATA THE RHF ENERGY = -153.597882732801 THE VIRIAL(-V/T)= 2.00054039 avogadro-1.1.1/testfiles/butane.cml0000644000175000001440000000557012250371054016510 0ustar marcususers Butane 58.1222 58.0782503 -138 -1 avogadro-1.1.1/testfiles/VASP-DOS/0000755000175000001440000000000012250371054015722 5ustar marcususersavogadro-1.1.1/testfiles/VASP-DOS/CONTCAR0000644000175000001440000000221412250371054016735 0ustar marcususersK8-40GPA-reopt 1.00000000000000 5.8679532736861075 0.0000000000000000 0.0000000000000000 0.0000000000000000 3.5192614938291165 0.0000000000000000 0.0000000000000000 0.0000000000000000 6.7256589970126157 8 Direct 0.1422025111343430 0.7500000000000000 0.4331511578653959 0.5339967827798091 0.7500000000000000 0.6575325302929400 0.3577974888656570 0.2500000000000000 0.9331511578653959 0.9660032172201909 0.2500000000000000 0.1575325302929400 0.8577974888656570 0.2500000000000000 0.5668488421346041 0.4660032172201909 0.2500000000000000 0.3424674697070600 0.6422025111343430 0.7500000000000000 0.0668488421346041 0.0339967827798091 0.7500000000000000 0.8424674697070600 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 avogadro-1.1.1/testfiles/VASP-DOS/POTCAR0000755000175000001440000050732112250371054016650 0ustar marcususers PAW_PBE K_sv 06Sep2000 9.00000000000000000 parameters from PSCTR are: VRHFIN =K: 3s3p4s LEXCH = PE EATOM = 774.7423 eV, 56.9420 Ry TITEL = PAW_PBE K_sv 06Sep2000 LULTRA = F use ultrasoft PP ? IUNSCR = 1 unscreen: 0-lin 1-nonlin 2-no RPACOR = 2.200 partial core radius POMASS = 39.098; ZVAL = 9.000 mass and valenz RCORE = 2.300 outmost cutoff radius RWIGS = 3.000; RWIGS = 1.588 wigner-seitz radius (au A) ENMAX = 259.216; ENMIN = 194.412 eV RCLOC = 2.005 cutoff for local pot LCOR = T correct aug charges LPAW = T paw PP EAUG = 427.853 DEXC = .000 RMAX = 2.864 core radius for proj-oper RAUG = 1.300 factor for augmentation sphere RDEP = 2.372 radius for radial grids QCUT = -4.365; QGAM = 8.730 optimization parameters Description l E TYP RCUT TYP RCUT 0 .000 23 2.300 0 .000 23 2.300 1 .000 23 2.300 1 -1.500 23 2.300 2 .000 23 2.300 Error from kinetic energy argument (eV) NDATA = 100 STEP = 20.000 1.050 145. 140. 138. 133. 131. 126. 121. 118. 113. 108. 105. 100. 95.0 89.8 84.7 79.7 74.8 70.1 65.4 58.8 54.5 50.5 44.7 41.1 37.7 32.9 28.6 25.9 22.3 19.0 16.1 13.6 11.3 9.41 7.74 6.32 4.76 3.81 2.78 2.18 1.54 1.07 .729 .488 .321 .209 .137 .846E-01 .614E-01 .461E-01 .386E-01 .349E-01 .312E-01 .274E-01 .224E-01 .181E-01 .141E-01 .999E-02 .697E-02 .499E-02 .384E-02 .326E-02 .297E-02 .274E-02 .250E-02 .213E-02 .171E-02 .131E-02 .941E-03 .729E-03 .599E-03 .541E-03 .506E-03 .460E-03 .386E-03 .310E-03 .234E-03 .182E-03 .154E-03 .143E-03 .132E-03 .114E-03 .908E-04 .685E-04 .555E-04 .504E-04 .471E-04 .409E-04 .324E-04 .253E-04 .216E-04 .203E-04 .182E-04 .149E-04 .116E-04 .101E-04 .943E-05 .835E-05 .655E-05 .543E-05 END of PSCTR-controll parameters local part 81.2582175088937078 .13787667E+03 .13784478E+03 .13774913E+03 .13758989E+03 .13736732E+03 .13708176E+03 .13673367E+03 .13632360E+03 .13585219E+03 .13532017E+03 .13472836E+03 .13407766E+03 .13336905E+03 .13260361E+03 .13178248E+03 .13090687E+03 .12997808E+03 .12899749E+03 .12796652E+03 .12688668E+03 .12575953E+03 .12458671E+03 .12336990E+03 .12211083E+03 .12081128E+03 .11947309E+03 .11809813E+03 .11668829E+03 .11524550E+03 .11377173E+03 .11226896E+03 .11073917E+03 .10918438E+03 .10760660E+03 .10600787E+03 .10439019E+03 .10275561E+03 .10110612E+03 .99443733E+02 .97770435E+02 .96088192E+02 .94398951E+02 .92704627E+02 .91007109E+02 .89308248E+02 .87609859E+02 .85913719E+02 .84221559E+02 .82535063E+02 .80855870E+02 .79185567E+02 .77525685E+02 .75877705E+02 .74243046E+02 .72623071E+02 .71019081E+02 .69432316E+02 .67863952E+02 .66315100E+02 .64786807E+02 .63280053E+02 .61795752E+02 .60334752E+02 .58897835E+02 .57485714E+02 .56099038E+02 .54738391E+02 .53404290E+02 .52097189E+02 .50817479E+02 .49565488E+02 .48341482E+02 .47145668E+02 .45978196E+02 .44839155E+02 .43728584E+02 .42646463E+02 .41592725E+02 .40567251E+02 .39569875E+02 .38600387E+02 .37658533E+02 .36744018E+02 .35856509E+02 .34995636E+02 .34160996E+02 .33352154E+02 .32568646E+02 .31809980E+02 .31075642E+02 .30365093E+02 .29677777E+02 .29013118E+02 .28370526E+02 .27749400E+02 .27149125E+02 .26569081E+02 .26008639E+02 .25467167E+02 .24944031E+02 .24438596E+02 .23950228E+02 .23478297E+02 .23022176E+02 .22581246E+02 .22154896E+02 .21742521E+02 .21343530E+02 .20957342E+02 .20583390E+02 .20221119E+02 .19869990E+02 .19529480E+02 .19199081E+02 .18878303E+02 .18566673E+02 .18263735E+02 .17969054E+02 .17682210E+02 .17402804E+02 .17130455E+02 .16864802E+02 .16605502E+02 .16352230E+02 .16104681E+02 .15862567E+02 .15625620E+02 .15393588E+02 .15166237E+02 .14943350E+02 .14724726E+02 .14510180E+02 .14299541E+02 .14092654E+02 .13889378E+02 .13689583E+02 .13493154E+02 .13299988E+02 .13109990E+02 .12923080E+02 .12739184E+02 .12558238E+02 .12380188E+02 .12204986E+02 .12032590E+02 .11862966E+02 .11696085E+02 .11531921E+02 .11370455E+02 .11211668E+02 .11055549E+02 .10902083E+02 .10751262E+02 .10603077E+02 .10457520E+02 .10314584E+02 .10174262E+02 .10036544E+02 .99014240E+01 .97688906E+01 .96389330E+01 .95115382E+01 .93866916E+01 .92643760E+01 .91445724E+01 .90272592E+01 .89124124E+01 .88000055E+01 .86900094E+01 .85823925E+01 .84771207E+01 .83741573E+01 .82734632E+01 .81749969E+01 .80787147E+01 .79845706E+01 .78925167E+01 .78025031E+01 .77144782E+01 .76283890E+01 .75441809E+01 .74617984E+01 .73811849E+01 .73022831E+01 .72250353E+01 .71493832E+01 .70752687E+01 .70026336E+01 .69314200E+01 .68615703E+01 .67930279E+01 .67257367E+01 .66596418E+01 .65946895E+01 .65308271E+01 .64680040E+01 .64061706E+01 .63452796E+01 .62852853E+01 .62261441E+01 .61678144E+01 .61102568E+01 .60534342E+01 .59973115E+01 .59418562E+01 .58870378E+01 .58328282E+01 .57792018E+01 .57261350E+01 .56736066E+01 .56215977E+01 .55700916E+01 .55190737E+01 .54685313E+01 .54184541E+01 .53688333E+01 .53196622E+01 .52709358E+01 .52226504E+01 .51748042E+01 .51273964E+01 .50804278E+01 .50339000E+01 .49878158E+01 .49421789E+01 .48969937E+01 .48522654E+01 .48079995E+01 .47642022E+01 .47208799E+01 .46780389E+01 .46356861E+01 .45938279E+01 .45524707E+01 .45116208E+01 .44712840E+01 .44314656E+01 .43921706E+01 .43534033E+01 .43151674E+01 .42774660E+01 .42403014E+01 .42036752E+01 .41675881E+01 .41320400E+01 .40970300E+01 .40625564E+01 .40286164E+01 .39952065E+01 .39623222E+01 .39299583E+01 .38981086E+01 .38667662E+01 .38359233E+01 .38055715E+01 .37757017E+01 .37463040E+01 .37173680E+01 .36888828E+01 .36608369E+01 .36332185E+01 .36060153E+01 .35792147E+01 .35528039E+01 .35267697E+01 .35010990E+01 .34757786E+01 .34507949E+01 .34261350E+01 .34017855E+01 .33777336E+01 .33539666E+01 .33304719E+01 .33072374E+01 .32842516E+01 .32615029E+01 .32389806E+01 .32166744E+01 .31945742E+01 .31726709E+01 .31509558E+01 .31294205E+01 .31080578E+01 .30868605E+01 .30658226E+01 .30449384E+01 .30242029E+01 .30036118E+01 .29831614E+01 .29628486E+01 .29426711E+01 .29226267E+01 .29027143E+01 .28829330E+01 .28632824E+01 .28437627E+01 .28243746E+01 .28051189E+01 .27859971E+01 .27670108E+01 .27481622E+01 .27294535E+01 .27108872E+01 .26924661E+01 .26741929E+01 .26560707E+01 .26381025E+01 .26202912E+01 .26026399E+01 .25851516E+01 .25678290E+01 .25506751E+01 .25336923E+01 .25168832E+01 .25002499E+01 .24837944E+01 .24675186E+01 .24514240E+01 .24355117E+01 .24197827E+01 .24042376E+01 .23888767E+01 .23736998E+01 .23587066E+01 .23438964E+01 .23292680E+01 .23148200E+01 .23005508E+01 .22864582E+01 .22725400E+01 .22587934E+01 .22452157E+01 .22318035E+01 .22185536E+01 .22054622E+01 .21925256E+01 .21797397E+01 .21671003E+01 .21546031E+01 .21422437E+01 .21300174E+01 .21179198E+01 .21059462E+01 .20940920E+01 .20823525E+01 .20707231E+01 .20591993E+01 .20477768E+01 .20364511E+01 .20252181E+01 .20140736E+01 .20030138E+01 .19920350E+01 .19811335E+01 .19703060E+01 .19595494E+01 .19488608E+01 .19382375E+01 .19276771E+01 .19171775E+01 .19067368E+01 .18963533E+01 .18860257E+01 .18757528E+01 .18655337E+01 .18553677E+01 .18452546E+01 .18351940E+01 .18251859E+01 .18152307E+01 .18053287E+01 .17954806E+01 .17856870E+01 .17759490E+01 .17662675E+01 .17566438E+01 .17470792E+01 .17375750E+01 .17281327E+01 .17187538E+01 .17094398E+01 .17001923E+01 .16910127E+01 .16819025E+01 .16728634E+01 .16638966E+01 .16550035E+01 .16461855E+01 .16374437E+01 .16287793E+01 .16201933E+01 .16116865E+01 .16032596E+01 .15949134E+01 .15866481E+01 .15784642E+01 .15703616E+01 .15623405E+01 .15544007E+01 .15465416E+01 .15387629E+01 .15310639E+01 .15234437E+01 .15159014E+01 .15084358E+01 .15010458E+01 .14937299E+01 .14864867E+01 .14793145E+01 .14722116E+01 .14651762E+01 .14582064E+01 .14513002E+01 .14444557E+01 .14376707E+01 .14309432E+01 .14242710E+01 .14176520E+01 .14110841E+01 .14045653E+01 .13980934E+01 .13916665E+01 .13852826E+01 .13789398E+01 .13726362E+01 .13663701E+01 .13601398E+01 .13539437E+01 .13477803E+01 .13416483E+01 .13355464E+01 .13294735E+01 .13234286E+01 .13174108E+01 .13114194E+01 .13054537E+01 .12995133E+01 .12935979E+01 .12877071E+01 .12818409E+01 .12759992E+01 .12701822E+01 .12643901E+01 .12586231E+01 .12528818E+01 .12471667E+01 .12414782E+01 .12358172E+01 .12301842E+01 .12245802E+01 .12190060E+01 .12134623E+01 .12079502E+01 .12024706E+01 .11970243E+01 .11916122E+01 .11862353E+01 .11808944E+01 .11755904E+01 .11703241E+01 .11650963E+01 .11599076E+01 .11547589E+01 .11496505E+01 .11445832E+01 .11395574E+01 .11345734E+01 .11296315E+01 .11247320E+01 .11198750E+01 .11150604E+01 .11102882E+01 .11055583E+01 .11008703E+01 .10962240E+01 .10916190E+01 .10870546E+01 .10825304E+01 .10780457E+01 .10735997E+01 .10691917E+01 .10648207E+01 .10604859E+01 .10561861E+01 .10519205E+01 .10476879E+01 .10434871E+01 .10393172E+01 .10351768E+01 .10310649E+01 .10269803E+01 .10229219E+01 .10188884E+01 .10148788E+01 .10108920E+01 .10069269E+01 .10029825E+01 .99905782E+00 .99515189E+00 .99126382E+00 .98739280E+00 .98353806E+00 .97969889E+00 .97587468E+00 .97206485E+00 .96826894E+00 .96448654E+00 .96071732E+00 .95696104E+00 .95321752E+00 .94948664E+00 .94576838E+00 .94206277E+00 .93836990E+00 .93468993E+00 .93102309E+00 .92736966E+00 .92372997E+00 .92010440E+00 .91649340E+00 .91289744E+00 .90931703E+00 .90575270E+00 .90220504E+00 .89867461E+00 .89516202E+00 .89166784E+00 .88819269E+00 .88473714E+00 .88130177E+00 .87788713E+00 .87449377E+00 .87112218E+00 .86777287E+00 .86444626E+00 .86114277E+00 .85786277E+00 .85460657E+00 .85137445E+00 .84816662E+00 .84498324E+00 .84182441E+00 .83869017E+00 .83558050E+00 .83249533E+00 .82943453E+00 .82639790E+00 .82338522E+00 .82039618E+00 .81743045E+00 .81448764E+00 .81156731E+00 .80866900E+00 .80579219E+00 .80293632E+00 .80010080E+00 .79728501E+00 .79448832E+00 .79171005E+00 .78894953E+00 .78620605E+00 .78347893E+00 .78076746E+00 .77807095E+00 .77538872E+00 .77272009E+00 .77006442E+00 .76742105E+00 .76478938E+00 .76216883E+00 .75955882E+00 .75695883E+00 .75436837E+00 .75178699E+00 .74921428E+00 .74664987E+00 .74409344E+00 .74154473E+00 .73900351E+00 .73646962E+00 .73394293E+00 .73142337E+00 .72891091E+00 .72640557E+00 .72390740E+00 .72141652E+00 .71893306E+00 .71645720E+00 .71398914E+00 .71152914E+00 .70907748E+00 .70663445E+00 .70420038E+00 .70177564E+00 .69936058E+00 .69695560E+00 .69456108E+00 .69217742E+00 .68980501E+00 .68744426E+00 .68509553E+00 .68275920E+00 .68043565E+00 .67812520E+00 .67582820E+00 .67354494E+00 .67127571E+00 .66902078E+00 .66678037E+00 .66455470E+00 .66234391E+00 .66014817E+00 .65796755E+00 .65580213E+00 .65365192E+00 .65151691E+00 .64939705E+00 .64729223E+00 .64520233E+00 .64312718E+00 .64106659E+00 .63902033E+00 .63698813E+00 .63496972E+00 .63296477E+00 .63097294E+00 .62899388E+00 .62702720E+00 .62507250E+00 .62312935E+00 .62119733E+00 .61927599E+00 .61736489E+00 .61546359E+00 .61357164E+00 .61168860E+00 .60981405E+00 .60794756E+00 .60608873E+00 .60423718E+00 .60239252E+00 .60055442E+00 .59872252E+00 .59689653E+00 .59507616E+00 .59326113E+00 .59145123E+00 .58964624E+00 .58784599E+00 .58605033E+00 .58425915E+00 .58247238E+00 .58068997E+00 .57891190E+00 .57713819E+00 .57536888E+00 .57360403E+00 .57184376E+00 .57008816E+00 .56833740E+00 .56659164E+00 .56485105E+00 .56311585E+00 .56138625E+00 .55966250E+00 .55794484E+00 .55623354E+00 .55452885E+00 .55283106E+00 .55114044E+00 .54945725E+00 .54778177E+00 .54611424E+00 .54445493E+00 .54280406E+00 .54116187E+00 .53952854E+00 .53790429E+00 .53628928E+00 .53468366E+00 .53308759E+00 .53150116E+00 .52992449E+00 .52835764E+00 .52680065E+00 .52525355E+00 .52371633E+00 .52218896E+00 .52067140E+00 .51916354E+00 .51766531E+00 .51617655E+00 .51469714E+00 .51322690E+00 .51176565E+00 .51031319E+00 .50886929E+00 .50743373E+00 .50600626E+00 .50458663E+00 .50317456E+00 .50176977E+00 .50037198E+00 .49898090E+00 .49759623E+00 .49621769E+00 .49484497E+00 .49347780E+00 .49211589E+00 .49075898E+00 .48940682E+00 .48805915E+00 .48671574E+00 .48537639E+00 .48404088E+00 .48270903E+00 .48138067E+00 .48005566E+00 .47873385E+00 .47741514E+00 .47609943E+00 .47478666E+00 .47347677E+00 .47216973E+00 .47086556E+00 .46956424E+00 .46826584E+00 .46697039E+00 .46567797E+00 .46438867E+00 .46310259E+00 .46181983E+00 .46054054E+00 .45926484E+00 .45799289E+00 .45672484E+00 .45546085E+00 .45420110E+00 .45294577E+00 .45169503E+00 .45044907E+00 .44920806E+00 .44797220E+00 .44674165E+00 .44551658E+00 .44429715E+00 .44308352E+00 .44187582E+00 .44067418E+00 .43947873E+00 .43828956E+00 .43710677E+00 .43593044E+00 .43476064E+00 .43359741E+00 .43244080E+00 .43129081E+00 .43014746E+00 .42901073E+00 .42788058E+00 .42675697E+00 .42563982E+00 .42452904E+00 .42342455E+00 .42232622E+00 .42123393E+00 .42014754E+00 .41906691E+00 .41799187E+00 .41692228E+00 .41585795E+00 .41479870E+00 .41374437E+00 .41269475E+00 .41164967E+00 .41060893E+00 .40957235E+00 .40853973E+00 .40751088E+00 .40648564E+00 .40546382E+00 .40444525E+00 .40342979E+00 .40241728E+00 .40140758E+00 .40040057E+00 .39939613E+00 .39839416E+00 .39739454E+00 .39639721E+00 .39540208E+00 .39440910E+00 .39341821E+00 .39242939E+00 .39144261E+00 .39045786E+00 .38947516E+00 .38849453E+00 .38751600E+00 .38653963E+00 .38556547E+00 .38459359E+00 .38362408E+00 .38265702E+00 .38169252E+00 .38073067E+00 .37977157E+00 .37881535E+00 .37786211E+00 .37691198E+00 .37596508E+00 .37502152E+00 .37408144E+00 .37314494E+00 .37221215E+00 .37128317E+00 .37035812E+00 .36943708E+00 .36852014E+00 .36760740E+00 .36669892E+00 .36579476E+00 .36489499E+00 .36399963E+00 .36310875E+00 .36222235E+00 .36134046E+00 .36046310E+00 .35959025E+00 .35872192E+00 .35785809E+00 .35699871E+00 .35614376E+00 .35529318E+00 .35444690E+00 .35360485E+00 .35276696E+00 .35193312E+00 .35110325E+00 .35027724E+00 .34945498E+00 .34863635E+00 .34782125E+00 .34700955E+00 .34620112E+00 .34539585E+00 .34459360E+00 .34379424E+00 .34299766E+00 .34220371E+00 .34141229E+00 .34062328E+00 .33983656E+00 .33905202E+00 .33826958E+00 .33748914E+00 .33671061E+00 .33593394E+00 .33515905E+00 .33438589E+00 .33361441E+00 .33284457E+00 .33207634E+00 .33130969E+00 .33054460E+00 .32978107E+00 .32901909E+00 .32825867E+00 .32749983E+00 .32674258E+00 .32598696E+00 .32523301E+00 .32448078E+00 .32373031E+00 .32298167E+00 .32223491E+00 .32149010E+00 .32074731E+00 .32000661E+00 .31926808E+00 .31853179E+00 .31779782E+00 .31706625E+00 .31633716E+00 .31561064E+00 .31488676E+00 .31416560E+00 .31344723E+00 .31273172E+00 .31201915E+00 .31130956E+00 .31060300E+00 .30989953E+00 .30919918E+00 .30850197E+00 .30780793E+00 .30711707E+00 .30642939E+00 .30574491E+00 .30506362E+00 .30438549E+00 .30371052E+00 .30303868E+00 .30236994E+00 .30170426E+00 .30104160E+00 .30038190E+00 .29972511E+00 .29907117E+00 .29842002E+00 .29777159E+00 .29712580E+00 .29648258E+00 .29584187E+00 .29520357E+00 .29456762E+00 .29393394E+00 .29330244E+00 .29267305E+00 .29204568E+00 .29142026E+00 .29079670E+00 .29017493E+00 .28955487E+00 .28893643E+00 .28831957E+00 .28770420E+00 .28709027E+00 .28647773E+00 .28586653E+00 .28525663E+00 .28464800E+00 .28404060E+00 .28343443E+00 .28282946E+00 .28222568E+00 .28162310E+00 .28102170E+00 .28042150E+00 .27982252E+00 .27922476E+00 .27862826E+00 .27803304E+00 .27743914E+00 .27684659E+00 .27625544E+00 .27566572E+00 .27507749E+00 .27449079E+00 .27390566E+00 .27332216E+00 .27274033E+00 .27216022E+00 .27158187E+00 .27100534E+00 .27043068E+00 .26985792E+00 .26928712E+00 .26871832E+00 .26815158E+00 .26758693E+00 .26702440E+00 .26646405E+00 .26590590E+00 .26534998E+00 .26479631E+00 .26424490E+00 .26369578E+00 .26314895E+00 .26260440E+00 .26206215E+00 .26152218E+00 .26098447E+00 .26044902E+00 .25991581E+00 .25938481E+00 .25885598E+00 .25832931E+00 .25780473E+00 .25728223E+00 .25676173E+00 .25624321E+00 .25572661E+00 .25521187E+00 .25469894E+00 .25418777E+00 .25367830E+00 .25317049E+00 .25266427E+00 .25215961E+00 .25165644E+00 .25115473E+00 .25065441E+00 .25015544E+00 .24965778E+00 .24916137E+00 .24866617E+00 .24817215E+00 .24767925E+00 .24718746E+00 gradient corrections used for XC 5 core charge-density (partial) .42489237E-03 .42471916E-03 .42419990E-03 .42333571E-03 .42212846E-03 .42058076E-03 .41869594E-03 .41647806E-03 .41393188E-03 .41106286E-03 .40787711E-03 .40438143E-03 .40058322E-03 .39649050E-03 .39211188E-03 .38745651E-03 .38253408E-03 .37735478E-03 .37192924E-03 .36626855E-03 .36038418E-03 .35428797E-03 .34799208E-03 .34150897E-03 .33485134E-03 .32803210E-03 .32106435E-03 .31396133E-03 .30673637E-03 .29940286E-03 .29197421E-03 .28446383E-03 .27688507E-03 .26925120E-03 .26157537E-03 .25387055E-03 .24614955E-03 .23842495E-03 .23070906E-03 .22301393E-03 .21535129E-03 .20773253E-03 .20016869E-03 .19267040E-03 .18524792E-03 .17791104E-03 .17066915E-03 .16353113E-03 .15650544E-03 .14960000E-03 .14282227E-03 .13617919E-03 .12967718E-03 .12332215E-03 .11711949E-03 .11107406E-03 .10519021E-03 .99471767E-04 .93922038E-04 .88543825E-04 .83339431E-04 .78310662E-04 .73458845E-04 .68784834E-04 .64289027E-04 .59971376E-04 .55831407E-04 .51868233E-04 .48080571E-04 .44466761E-04 .41024786E-04 .37752289E-04 .34646594E-04 .31704726E-04 .28923433E-04 .26299204E-04 .23828294E-04 .21506743E-04 .19330397E-04 .17294928E-04 .15395860E-04 .13628584E-04 .11988381E-04 .10470442E-04 .90698866E-05 .77817827E-05 .66011649E-05 .55230520E-05 .45424641E-05 .36544390E-05 .28540480E-05 .21364100E-05 .14967062E-05 .93019280E-06 .43221320E-06 -.17906591E-08 -.37626789E-06 -.69554921E-06 -.96383835E-06 -.11852044E-05 -.13635752E-05 -.15027312E-05 -.16063007E-05 -.16777559E-05 -.17204092E-05 -.17374111E-05 -.17317484E-05 -.17062436E-05 -.16635540E-05 -.16061733E-05 -.15364319E-05 -.14564990E-05 -.13683853E-05 -.12739454E-05 -.11748817E-05 -.10727483E-05 -.96895480E-06 -.86477179E-06 -.76133528E-06 -.65965233E-06 -.56060657E-06 -.46496404E-06 -.37337913E-06 -.28640074E-06 -.20447848E-06 -.12796896E-06 -.57142078E-07 .78126489E-08 .66779839E-07 .11971204E-06 .16662360E-06 .20758473E-06 .24271560E-06 .27218068E-06 .29618328E-06 .31496018E-06 .32877663E-06 .33792145E-06 .34270247E-06 .34344215E-06 .34047351E-06 .33413630E-06 .32477346E-06 .31272783E-06 .29833916E-06 .28194136E-06 .26386009E-06 .24441049E-06 .22389531E-06 .20260321E-06 .18080734E-06 .15876414E-06 .13671239E-06 .11487246E-06 .93445774E-07 .72614501E-07 .52541376E-07 .33369733E-07 .15223688E-07 -.17915381E-08 -.17589154E-07 -.32100220E-07 -.45272955E-07 -.57071958E-07 -.67477340E-07 -.76483793E-07 -.84099597E-07 -.90345587E-07 -.95254084E-07 -.98867798E-07 -.10123873E-06 -.10242705E-06 -.10250003E-06 -.10153089E-06 -.99597819E-07 -.96782856E-07 -.93170947E-07 -.88848958E-07 -.83904774E-07 -.78426432E-07 -.72501319E-07 -.66215420E-07 -.59652633E-07 -.52894139E-07 -.46017846E-07 -.39097882E-07 -.32204168E-07 -.25402043E-07 -.18751957E-07 -.12309228E-07 -.61238524E-08 -.24037698E-09 .53021722E-08 .10470311E-07 .15236070E-07 .19576914E-07 .23475628E-07 .26920155E-07 .29903406E-07 .32423029E-07 .34481156E-07 .36084124E-07 .37242178E-07 .37969146E-07 .38282114E-07 .38201088E-07 .37748639E-07 .36949559E-07 .35830513E-07 .34419685E-07 .32746442E-07 .30841003E-07 .28734113E-07 .26456736E-07 .24039762E-07 .21513729E-07 .18908562E-07 .16253338E-07 .13576063E-07 .10903472E-07 .82608570E-08 .56719104E-08 .31585926E-08 .74102264E-09 -.15626096E-08 -.37361094E-08 -.57653220E-08 -.76381576E-08 -.93445956E-08 -.10876672E-07 -.12228446E-07 -.13395954E-07 -.14377148E-07 -.15171816E-07 -.15781492E-07 -.16209360E-07 -.16460141E-07 -.16539973E-07 -.16456289E-07 -.16217685E-07 -.15833785E-07 -.15315105E-07 -.14672911E-07 -.13919086E-07 -.13065988E-07 -.12126314E-07 -.11112974E-07 -.10038956E-07 -.89172098E-08 -.77605288E-08 -.65814395E-08 -.53921013E-08 -.42042118E-08 -.30289220E-08 -.18767594E-08 -.75756027E-09 .31958790E-09 .13463959E-08 .23154122E-08 .32200529E-08 .40546235E-08 .48143306E-08 .54952859E-08 .60945014E-08 .66098770E-08 .70401808E-08 .73850221E-08 .76448187E-08 .78207574E-08 .79147505E-08 .79293868E-08 .78678793E-08 .77340087E-08 .75320653E-08 .72667882E-08 .69433027E-08 .65670581E-08 .61437639E-08 .56793270E-08 .51797900E-08 .46512703E-08 .40999014E-08 .35317762E-08 .29528938E-08 .23691079E-08 .17860804E-08 .12092367E-08 .64372691E-09 .94389402E-10 -.43428033E-09 -.93815686E-09 -.14135075E-08 -.18570107E-08 -.22657699E-08 -.26373227E-08 -.29696466E-08 -.32611599E-08 -.35107186E-08 -.37176099E-08 -.38815417E-08 -.40026290E-08 -.40813774E-08 -.41186625E-08 -.41157089E-08 -.40740648E-08 -.39955757E-08 -.38823567E-08 -.37367625E-08 -.35613575E-08 -.33588838E-08 -.31322304E-08 -.28844009E-08 -.26184820E-08 -.23376127E-08 -.20449533E-08 -.17436563E-08 -.14368377E-08 -.11275506E-08 -.81875897E-09 -.51331476E-09 -.21393557E-09 .76814939E-10 .35654480E-09 .62304924E-09 .87432396E-09 .11085762E-08 .13242332E-08 .15199490E-08 .16946083E-08 .18473285E-08 .19774593E-08 .20845808E-08 .21684988E-08 .22292388E-08 .22670382E-08 .22823363E-08 .22757640E-08 .22481308E-08 .22004116E-08 .21337320E-08 .20493530E-08 .19486549E-08 .18331206E-08 .17043187E-08 .15638864E-08 .14135124E-08 .12549195E-08 .10898481E-08 .92004002E-09 .74722203E-09 .57309126E-09 .39930055E-09 .22744496E-09 .59049255E-10 -.10444363E-09 -.26168298E-09 -.41141947E-09 -.55251323E-09 -.68394055E-09 -.80479941E-09 -.91431367E-09 -.10118360E-08 -.10968497E-08 -.11689690E-08 -.12279384E-08 -.12736309E-08 -.13060450E-08 -.13253005E-08 -.13316340E-08 -.13253924E-08 -.13070269E-08 -.12770853E-08 -.12362041E-08 -.11850996E-08 -.11245595E-08 -.10554331E-08 -.97862187E-09 -.89506945E-09 -.80575208E-09 -.71166855E-09 -.61383054E-09 -.51325302E-09 -.41094496E-09 -.30790042E-09 -.20508995E-09 -.10345252E-09 -.38880169E-11 .92749746E-10 .18565937E-09 .27409754E-09 .35738400E-09 .43490583E-09 .50612098E-09 .57056104E-09 .62783331E-09 .67762210E-09 .71968928E-09 .75387418E-09 .78009273E-09 .79833598E-09 .80866796E-09 .81122300E-09 .80620239E-09 .79387070E-09 .77455145E-09 .74862256E-09 .71651129E-09 .67868897E-09 .63566549E-09 .58798355E-09 .53621281E-09 .48094399E-09 .42278290E-09 .36234454E-09 .30024728E-09 .23710718E-09 .17353243E-09 .11011816E-09 .47441340E-10 -.13943879E-10 -.73510551E-10 -.13076295E-09 -.18524015E-09 -.23651928E-09 -.28421825E-09 -.32799808E-09 -.36756479E-09 -.40267081E-09 -.43311595E-09 -.45874790E-09 -.47946229E-09 -.49520236E-09 -.50595814E-09 -.51176527E-09 -.51270346E-09 -.50889458E-09 -.50050040E-09 -.48772005E-09 -.47078725E-09 -.44996723E-09 -.42555352E-09 -.39786453E-09 -.36724000E-09 -.33403738E-09 -.29862812E-09 -.26139395E-09 -.22272314E-09 -.18300686E-09 -.14263552E-09 -.10199530E-09 -.61464755E-10 -.21411593E-10 .17810354E-10 .55863976E-10 .92431490E-10 .12721681E-09 .15994767E-09 .19037746E-09 .21828679E-09 .24348478E-09 .26581006E-09 .28513146E-09 .30134842E-09 .31439114E-09 .32422042E-09 .33082723E-09 .33423202E-09 .33448382E-09 .33165907E-09 .32586021E-09 .31721414E-09 .30587045E-09 .29199948E-09 .27579031E-09 .25744853E-09 .23719405E-09 .21525866E-09 .19188374E-09 .16731779E-09 .14181401E-09 .11562794E-09 .89015033E-10 .62228421E-10 .35516634E-10 .91214907E-11 -.16723922E-10 -.41797144E-10 -.65888091E-10 -.88800651E-10 -.11035412E-09 -.13038445E-09 -.14874535E-09 -.16530916E-09 -.17996757E-09 -.19263213E-09 -.20323457E-09 -.21172694E-09 -.21808157E-09 -.22229082E-09 -.22436668E-09 -.22434022E-09 -.22226082E-09 -.21819534E-09 -.21222705E-09 -.20445457E-09 -.19499054E-09 -.18396033E-09 -.17150060E-09 -.15775780E-09 -.14288662E-09 -.12704840E-09 -.11040955E-09 -.93139884E-10 -.75411060E-10 -.57394949E-10 -.39262103E-10 -.21180238E-10 -.33127888E-11 .14182467E-10 .31154706E-10 .47461256E-10 .62968704E-10 .77553884E-10 .91104761E-10 .10352119E-09 .11471554E-09 .12461322E-09 .13315305E-09 .14028752E-09 .14598290E-09 .15021924E-09 .15299025E-09 .15430305E-09 .15417781E-09 .15264728E-09 .14975620E-09 .14556067E-09 .14012735E-09 .13353264E-09 .12586181E-09 .11720800E-09 .10767122E-09 .97357283E-10 .86376767E-10 .74843869E-10 .62875325E-10 .50589288E-10 .38104240E-10 .25537916E-10 .13006256E-10 .62240058E-12 -.11504269E-10 -.23269034E-10 -.34572689E-10 -.45322308E-10 -.55431958E-10 -.64823318E-10 -.73426226E-10 -.81179138E-10 -.88029497E-10 -.93934025E-10 -.98858906E-10 -.10277990E-09 -.10568236E-09 -.10756115E-09 -.10842051E-09 -.10827382E-09 -.10714327E-09 -.10505949E-09 -.10206110E-09 -.98194204E-10 -.93511785E-10 -.88073128E-10 -.81943129E-10 -.75191602E-10 -.67892551E-10 -.60123414E-10 -.51964294E-10 -.43497186E-10 -.34805198E-10 -.25971780E-10 -.17079962E-10 -.82116216E-11 .55323733E-12 .91371634E-11 .17465905E-10 .25469013E-10 .33080402E-10 .40238853E-10 .46888472E-10 .52979082E-10 .58466563E-10 .63313127E-10 .67487534E-10 .70965240E-10 .73728485E-10 .75766320E-10 .77074571E-10 .77655737E-10 .77518842E-10 .76679221E-10 .75158260E-10 .72983080E-10 .70186185E-10 .66805060E-10 .62881740E-10 .58462336E-10 .53596546E-10 .48337137E-10 .42739405E-10 .36860633E-10 .30759537E-10 .24495704E-10 .18129045E-10 .11719245E-10 .53252327E-11 -.99533865E-12 -.71865830E-11 -.13194852E-10 -.18969175E-10 -.24461668E-10 -.29627904E-10 -.34427246E-10 -.38823146E-10 -.42783390E-10 -.46280310E-10 -.49290946E-10 -.51797163E-10 -.53785724E-10 -.55248315E-10 -.56181529E-10 -.56586804E-10 -.56470320E-10 -.55842854E-10 -.54719593E-10 -.53119922E-10 -.51067166E-10 -.48588309E-10 -.45713682E-10 -.42476628E-10 -.38913147E-10 -.35061521E-10 -.30961928E-10 -.26656046E-10 -.22186650E-10 -.17597207E-10 -.12931469E-10 -.82330795E-11 -.35451779E-11 .10899772E-11 .56313731E-11 .10039589E-10 .14277123E-10 .18308693E-10 .22101515E-10 .25625552E-10 .28853737E-10 .31762160E-10 .34330228E-10 .36540791E-10 .38380232E-10 .39838529E-10 .40909280E-10 .41589692E-10 .41880549E-10 .41786134E-10 .41314133E-10 .40475502E-10 .39284313E-10 .37757568E-10 .35915000E-10 .33778841E-10 .31373583E-10 .28725715E-10 .25863447E-10 .22816432E-10 .19615470E-10 .16292210E-10 .12878851E-10 .94078459E-11 .59116002E-11 .24221841E-11 -.10289511E-11 -.44112450E-11 -.76952877E-11 -.10853064E-10 -.13858183E-10 -.16686085E-10 -.19314233E-10 -.21722279E-10 -.23892211E-10 -.25808473E-10 -.27458065E-10 -.28830613E-10 -.29918423E-10 -.30716497E-10 -.31222538E-10 -.31436921E-10 -.31362648E-10 -.31005271E-10 -.30372803E-10 -.29475603E-10 -.28326242E-10 -.26939355E-10 -.25331472E-10 -.23520839E-10 -.21527222E-10 -.19371710E-10 -.17076495E-10 -.14664661E-10 -.12159956E-10 -.95865715E-11 -.69689137E-11 -.43313835E-11 -.16981553E-11 .90703611E-12 .34611018E-11 .59417959E-11 .83279014E-11 .10599404E-10 .12737654E-10 .14725508E-10 .16547461E-10 .18189760E-10 .19640494E-10 .20889677E-10 .21929303E-10 .22753386E-10 .23357979E-10 .23741181E-10 .23903118E-10 .23845906E-10 .23573606E-10 .23092151E-10 .22409264E-10 .21534359E-10 .20478430E-10 .19253926E-10 .17874615E-10 .16355441E-10 .14712367E-10 .12962221E-10 .11122523E-10 .92113234E-11 .72470283E-11 .52482292E-11 .32335332E-11 .12213949E-11 -.77004682E-12 -.27231270E-11 -.46208062E-11 -.64468134E-11 -.81857804E-11 -.98233661E-11 -.11346369E-10 -.12742827E-10 -.14002107E-10 -.15114980E-10 -.16073680E-10 -.16871952E-10 -.17505085E-10 -.17969930E-10 -.18264904E-10 -.18389978E-10 -.18346658E-10 -.18137941E-10 -.17768269E-10 -.17243468E-10 -.16570668E-10 -.15758228E-10 -.14815631E-10 -.13753390E-10 -.12582935E-10 -.11316495E-10 -.99669742E-11 -.85478312E-11 -.70729440E-11 -.55564815E-11 -.40127708E-11 -.24561662E-11 -.90091969E-12 .63894572E-12 .21497586E-11 .36183166E-11 .50319981E-11 .63788669E-11 .76477694E-11 .88284224E-11 .99114932E-11 .10888669E-10 .11752715E-10 .12497526E-10 .13118162E-10 .13610874E-10 .13973126E-10 .14203590E-10 .14302149E-10 .14269875E-10 .14109002E-10 .13822891E-10 .13415980E-10 .12893730E-10 .12262561E-10 .11529776E-10 .10703491E-10 .97925392E-11 .88063899E-11 .77550487E-11 .66489620E-11 .54989157E-11 .43159336E-11 .31111747E-11 .18958307E-11 .68102529E-12 -.52228518E-12 -.17034076E-11 -.28520046E-11 -.39581820E-11 -.50125714E-11 -.60064071E-11 -.69315957E-11 -.77807792E-11 -.85473908E-11 -.92257022E-11 -.98108632E-11 -.10298932E-10 -.10686899E-10 -.10972698E-10 -.11155215E-10 -.11234280E-10 -.11210657E-10 -.11086026E-10 -.10862953E-10 -.10544850E-10 -.10135941E-10 -.96412051E-11 -.90663241E-11 -.84176210E-11 -.77019941E-11 -.69268464E-11 -.61000125E-11 -.52296813E-11 -.43243183E-11 -.33925847E-11 -.24432575E-11 -.14851483E-11 -.52702424E-12 .42247059E-12 .13548910E-11 .22620638E-11 .31361576E-11 .39697483E-11 .47558800E-11 .54881212E-11 .61606155E-11 .67681256E-11 .73060724E-11 .77705666E-11 .81584344E-11 .84672357E-11 .86952763E-11 .88416125E-11 .89060495E-11 .88891326E-11 .87921319E-11 .86170214E-11 .83664513E-11 .80437148E-11 .76527097E-11 .71978954E-11 .66842447E-11 .61171922E-11 .55025793E-11 .48465960E-11 .41557206E-11 .34366573E-11 .26962734E-11 .19415346E-11 .11794418E-11 .41696712E-12 -.33900793E-12 -.10817534E-11 -.18047492E-11 -.25017409E-11 -.31667924E-11 -.37943349E-11 -.43792120E-11 -.49167209E-11 -.54026478E-11 -.58333001E-11 -.62055319E-11 -.65167654E-11 -.67650063E-11 -.69488540E-11 -.70675062E-11 -.71207582E-11 -.71089968E-11 -.70331889E-11 -.68948652E-11 -.66960990E-11 -.64394802E-11 -.61280852E-11 -.57654430E-11 -.53554976E-11 -.49025667E-11 -.44112981E-11 -.38866239E-11 -.33337120E-11 -.27579169E-11 -.21647288E-11 -.15597229E-11 -.94850764E-12 -.33667445E-12 .27025273E-12 .86686603E-12 .14479208E-11 .20083804E-11 .25434593E-11 .30486621E-11 .35198209E-11 .39531278E-11 .43451652E-11 .46929308E-11 .49938596E-11 .52458412E-11 .54472331E-11 .55968690E-11 .56940637E-11 .57386125E-11 .57307873E-11 .56713281E-11 .55614299E-11 .54027266E-11 .51972703E-11 .49475080E-11 .46562542E-11 .43266609E-11 .39621854E-11 .35665548E-11 .31437295E-11 .26978644E-11 .22332692E-11 .17543677E-11 .12656567E-11 .77166436E-12 .27690949E-12 -.21413920E-12 -.69710253E-12 -.11677291E-11 -.16219319E-11 -.20558230E-11 -.24657457E-11 -.28483052E-11 -.32003950E-11 -.35192216E-11 -.38023261E-11 -.40476011E-11 -.42533064E-11 -.44180793E-11 -.45409422E-11 -.46213072E-11 -.46589759E-11 -.46541364E-11 -.46073575E-11 -.45195779E-11 -.43920939E-11 -.42265431E-11 -.40248855E-11 -.37893819E-11 -.35225698E-11 -.32272374E-11 -.29063952E-11 -.25632465E-11 -.22011560E-11 -.18236178E-11 -.14342222E-11 -.10366226E-11 -.63450127E-12 -.23153672E-12 .16862991E-12 .56242689E-12 .94638317E-12 .13171584E-11 .16715712E-11 .20066262E-11 .23195381E-11 .26077548E-11 .28689771E-11 .31011763E-11 .33026095E-11 .34718315E-11 .36077043E-11 .37094038E-11 .37764230E-11 .38085732E-11 .38059817E-11 .37690868E-11 .36986303E-11 .35956471E-11 .34614523E-11 atomic pseudo charge-density .90000000E+01 .89855275E+01 .89426130E+01 .88727187E+01 .87781308E+01 .86617585E+01 .85268943E+01 .83769685E+01 .82153263E+01 .80450469E+01 .78688179E+01 .76888661E+01 .75069388E+01 .73243263E+01 .71419135E+01 .69602472E+01 .67796105E+01 .66000944E+01 .64216635E+01 .62442099E+01 .60675973E+01 .58916928E+01 .57163901E+01 .55416224E+01 .53673703E+01 .51936636E+01 .50205794E+01 .48482379E+01 .46767967E+01 .45064440E+01 .43373918E+01 .41698687E+01 .40041143E+01 .38403723E+01 .36788859E+01 .35198933E+01 .33636235E+01 .32102936E+01 .30601058E+01 .29132459E+01 .27698821E+01 .26301636E+01 .24942205E+01 .23621640E+01 .22340860E+01 .21100599E+01 .19901414E+01 .18743692E+01 .17627657E+01 .16553381E+01 .15520799E+01 .14529712E+01 .13579802E+01 .12670644E+01 .11801712E+01 .10972392E+01 .10181989E+01 .94297391E+00 .87148156E+00 .80363379E+00 .73933787E+00 .67849717E+00 .62101175E+00 .56677900E+00 .51569422E+00 .46765112E+00 .42254233E+00 .38025982E+00 .34069537E+00 .30374087E+00 .26928872E+00 .23723214E+00 .20746543E+00 .17988428E+00 .15438593E+00 .13086946E+00 .10923591E+00 .89388490E-01 .71232689E-01 .54676429E-01 .39630152E-01 .26006916E-01 .13722468E-01 .26953003E-02 -.71533047E-02 -.15899243E-01 -.23615570E-01 -.30372494E-01 -.36237373E-01 -.41274733E-01 -.45546285E-01 -.49110949E-01 -.52024894E-01 -.54341576E-01 -.56111785E-01 -.57383698E-01 -.58202931E-01 -.58612604E-01 -.58653400E-01 -.58363632E-01 -.57779316E-01 -.56934234E-01 -.55860013E-01 -.54586195E-01 -.53140313E-01 -.51547966E-01 -.49832896E-01 -.48017058E-01 -.46120706E-01 -.44162457E-01 -.42159373E-01 -.40127034E-01 -.38079608E-01 -.36029925E-01 -.33989546E-01 -.31968834E-01 -.29977021E-01 -.28022273E-01 -.26111756E-01 -.24251696E-01 -.22447440E-01 -.20703519E-01 -.19023698E-01 -.17411035E-01 -.15867932E-01 -.14396186E-01 -.12997039E-01 -.11671220E-01 -.10418994E-01 -.92402037E-02 -.81343064E-02 -.71004161E-02 -.61373378E-02 -.52436031E-02 -.44175018E-02 -.36571134E-02 -.29603353E-02 -.23249107E-02 -.17484536E-02 -.12284726E-02 -.76239328E-03 -.34757893E-03 .18650564E-04 .33900082E-03 .61618671E-03 .85291734E-03 .10518824E-02 .12157399E-02 .13471043E-02 .14485374E-02 .15225382E-02 .15715357E-02 .15978817E-02 .16038445E-02 .15916039E-02 .15632471E-02 .15207647E-02 .14660482E-02 .14008880E-02 .13269720E-02 .12458845E-02 .11591066E-02 .10680158E-02 .97388769E-03 .87789655E-03 .78111746E-03 .68452829E-03 .58901217E-03 .49536025E-03 .40427473E-03 .31637213E-03 .23218680E-03 .15217453E-03 .76716415E-04 .61227037E-05 -.59363139E-04 -.11956038E-03 -.17434692E-03 -.22365514E-03 -.26746779E-03 -.30581394E-03 -.33876487E-03 -.36643013E-03 -.38895362E-03 -.40650982E-03 -.41930003E-03 -.42754885E-03 -.43150068E-03 -.43141647E-03 -.42757050E-03 -.42024741E-03 -.40973934E-03 -.39634324E-03 -.38035835E-03 -.36208388E-03 -.34181681E-03 -.31984986E-03 -.29646972E-03 -.27195531E-03 -.24657634E-03 -.22059193E-03 -.19424946E-03 -.16778354E-03 -.14141514E-03 -.11535089E-03 -.89782467E-04 -.64886192E-04 -.40822686E-04 -.17736697E-04 .42429816E-05 .25003468E-04 .44447656E-04 .62493977E-04 .79076078E-04 .94142414E-04 .10765577E-03 .11959271E-03 .12994297E-03 .13870880E-03 .14590427E-03 .15155449E-03 .15569488E-03 .15837030E-03 .15963430E-03 .15954823E-03 .15818042E-03 .15560530E-03 .15190261E-03 .14715651E-03 .14145476E-03 .13488795E-03 .12754868E-03 .11953082E-03 .11092875E-03 .10183671E-03 .92348074E-04 .82554763E-04 .72546653E-04 .62411019E-04 .52232037E-04 .42090330E-04 .32062545E-04 .22220997E-04 .12633342E-04 .33623036E-05 -.55345537E-05 -.14005008E-04 -.22002317E-04 -.29485315E-04 -.36418460E-04 -.42771849E-04 -.48521188E-04 -.53647724E-04 -.58138145E-04 -.61984447E-04 -.65183765E-04 -.67738180E-04 -.69654499E-04 -.70944008E-04 -.71622210E-04 -.71708538E-04 -.71226057E-04 -.70201148E-04 -.68663190E-04 -.66644221E-04 -.64178608E-04 -.61302701E-04 -.58054495E-04 -.54473293E-04 -.50599365E-04 -.46473625E-04 -.42137305E-04 -.37631649E-04 -.32997608E-04 -.28275559E-04 -.23505027E-04 -.18724438E-04 -.13970872E-04 -.92798479E-05 -.46851201E-05 -.21849788E-06 .40903168E-05 .82138699E-05 .12127075E-04 .15807314E-04 .19234511E-04 .22391194E-04 .25262533E-04 .27836351E-04 .30103126E-04 .32055969E-04 .33690586E-04 .35005220E-04 .36000579E-04 .36679746E-04 .37048085E-04 .37113116E-04 .36884397E-04 .36373383E-04 .35593281E-04 .34558895E-04 .33286469E-04 .31793517E-04 .30098655E-04 .28221432E-04 .26182149E-04 .24001693E-04 .21701359E-04 .19302681E-04 .16827269E-04 .14296640E-04 .11732066E-04 .91544222E-05 .65840441E-05 .40405922E-05 .15429267E-05 -.89100954E-06 -.32442969E-05 -.55011350E-05 -.76469280E-05 -.96683574E-05 -.11553445E-04 -.13291604E-04 -.14873675E-04 -.16291959E-04 -.17540228E-04 -.18613731E-04 -.19509191E-04 -.20224783E-04 -.20760110E-04 -.21116165E-04 -.21295286E-04 -.21301099E-04 -.21138455E-04 -.20813364E-04 -.20332910E-04 -.19705176E-04 -.18939152E-04 -.18044641E-04 -.17032167E-04 -.15912873E-04 -.14698420E-04 -.13400888E-04 -.12032667E-04 -.10606363E-04 -.91346902E-05 -.76303732E-05 -.61060515E-05 -.45741847E-05 -.30469618E-05 -.15362164E-05 -.53344930E-07 .13907684E-05 .27858220E-05 .41221601E-05 .53908307E-05 .65836354E-05 .76931738E-05 .87128795E-05 .96370495E-05 .10460867E-04 .11180414E-04 .11792683E-04 .12295575E-04 .12687891E-04 .12969323E-04 .13140436E-04 .13202634E-04 .13158139E-04 .13009948E-04 .12761791E-04 .12418088E-04 .11983896E-04 .11464857E-04 .10867135E-04 .10197363E-04 .94625778E-05 .86701538E-05 .78277412E-05 .69431991E-05 .60245298E-05 .50798136E-05 .41171442E-05 .31445661E-05 .21700127E-05 .12012478E-05 .24580923E-06 -.68904502E-06 -.15963863E-05 -.24696619E-05 -.33027375E-05 -.40899355E-05 -.48260687E-05 -.55064699E-05 -.61270165E-05 -.66841508E-05 -.71748944E-05 -.75968596E-05 -.79482541E-05 -.82278821E-05 -.84351407E-05 -.85700114E-05 -.86330473E-05 -.86253565E-05 -.85485812E-05 -.84048731E-05 -.81968658E-05 -.79276432E-05 -.76007061E-05 -.72199355E-05 -.67895537E-05 -.63140843E-05 -.57983100E-05 -.52472293E-05 -.46660128E-05 -.40599589E-05 -.34344490E-05 -.27949040E-05 -.21467403E-05 -.14953272E-05 -.84594585E-06 -.20374925E-06 .42627575E-06 .10393443E-05 .16309070E-05 .21966814E-05 .27326798E-05 .32352348E-05 .37010221E-05 .41270794E-05 .45108223E-05 .48500574E-05 .51429914E-05 .53882376E-05 .55848178E-05 .57321627E-05 .58301075E-05 .58788851E-05 .58791167E-05 .58317986E-05 .57382866E-05 .56002787E-05 .54197941E-05 .51991509E-05 .49409420E-05 .46480086E-05 .43234128E-05 .39704090E-05 .35924140E-05 .31929765E-05 .27757464E-05 .23444436E-05 .19028272E-05 .14546643E-05 .10037000E-05 .55362821E-06 .10806272E-06 -.32948986E-06 -.75565611E-06 -.11672202E-05 -.15611463E-05 -.19345999E-05 -.22849662E-05 -.26098667E-05 -.29071741E-05 -.31750242E-05 -.34118259E-05 -.36162689E-05 -.37873284E-05 -.39242683E-05 -.40266413E-05 -.40942873E-05 -.41273288E-05 -.41261653E-05 -.40914639E-05 -.40241496E-05 -.39253929E-05 -.37965956E-05 -.36393751E-05 -.34555477E-05 -.32471101E-05 -.30162200E-05 -.27651755E-05 -.24963945E-05 -.22123925E-05 -.19157611E-05 -.16091450E-05 -.12952206E-05 -.97667301E-06 -.65617488E-06 -.33636482E-06 -.19826830E-07 .29092951E-06 .59348792E-06 .88554319E-06 .11649177E-05 .14295768E-05 .16776424E-05 .19074054E-05 .21173363E-05 .23060945E-05 .24725355E-05 .26157166E-05 .27349009E-05 .28295595E-05 .28993720E-05 .29442256E-05 .29642116E-05 .29596216E-05 .29309414E-05 .28788433E-05 .28041776E-05 .27079625E-05 .25913725E-05 .24557268E-05 .23024751E-05 .21331843E-05 .19495235E-05 .17532483E-05 .15461858E-05 .13302175E-05 .11072642E-05 .87926874E-06 .64818057E-06 .41593948E-06 .18446014E-06 -.44382994E-07 -.26877018E-06 -.48695019E-06 -.69725329E-06 -.89810340E-06 -.10880292E-05 -.12656743E-05 -.14298061E-05 -.15793238E-05 -.17132650E-05 -.18308109E-05 -.19312909E-05 -.20141848E-05 -.20791251E-05 -.21258968E-05 -.21544367E-05 -.21648315E-05 -.21573139E-05 -.21322589E-05 -.20901776E-05 -.20317113E-05 -.19576233E-05 -.18687915E-05 -.17661985E-05 -.16509220E-05 -.15241248E-05 -.13870432E-05 -.12409761E-05 -.10872734E-05 -.92732386E-06 -.76254330E-06 -.59436256E-06 -.42421560E-06 -.25352777E-06 -.83704367E-07 .83880514E-07 .24789460E-06 .40705758E-06 .56015068E-06 .70602552E-06 .84361228E-06 .97192709E-06 .10900786E-05 .11972735E-05 .12928218E-05 .13761400E-05 .14467547E-05 .15043041E-05 .15485395E-05 .15793250E-05 .15966369E-05 .16005620E-05 .15912952E-05 .15691355E-05 .15344825E-05 .14878309E-05 .14297655E-05 .13609540E-05 .12821410E-05 .11941402E-05 .10978267E-05 .99412884E-06 .88401972E-06 .76850851E-06 .64863158E-06 .52544365E-06 .40000882E-06 .27339175E-06 .14664897E-06 .20820352E-07 -.10307905E-06 -.22406693E-06 -.34120115E-06 -.45358680E-06 -.56038271E-06 -.66080743E-06 -.75414462E-06 -.83974778E-06 -.91704444E-06 -.98553955E-06 -.10448182E-05 -.10945479E-05 -.11344796E-05 -.11644485E-05 -.11843740E-05 -.11942591E-05 -.11941887E-05 -.11843278E-05 -.11649185E-05 -.11362774E-05 -.10987909E-05 -.10529116E-05 -.99915315E-06 -.93808529E-06 -.87032800E-06 -.79654582E-06 -.71744158E-06 -.63375009E-06 -.54623160E-06 -.45566516E-06 -.36284196E-06 -.26855869E-06 -.17361090E-06 -.78786568E-07 .15140244E-07 .10741546E-06 .19731083E-06 .28412947E-06 .36721099E-06 .44593638E-06 .51973229E-06 .58807504E-06 .65049405E-06 .70657482E-06 .75596143E-06 .79835843E-06 .83353233E-06 .86131246E-06 .88159133E-06 .89432451E-06 .89952993E-06 .89728676E-06 .88773369E-06 .87106692E-06 .84753755E-06 .81744867E-06 .78115204E-06 .73904441E-06 .69156356E-06 .63918408E-06 .58241288E-06 .52178453E-06 .45785646E-06 .39120405E-06 .32241562E-06 .25208747E-06 .18081884E-06 .10920700E-06 .37842413E-07 -.32695979E-07 -.10184528E-06 -.16906297E-06 -.23383101E-06 -.29565966E-06 -.35409103E-06 -.40870226E-06 -.45910845E-06 -.50496518E-06 -.54597061E-06 -.58186733E-06 -.61244368E-06 -.63753480E-06 -.65702313E-06 -.67083871E-06 -.67895891E-06 -.68140788E-06 -.67825558E-06 -.66961653E-06 -.65564808E-06 -.63654851E-06 -.61255472E-06 -.58393971E-06 -.55100974E-06 -.51410135E-06 -.47357811E-06 -.42982724E-06 -.38325608E-06 -.33428844E-06 -.28336092E-06 -.23091915E-06 -.17741398E-06 -.12329779E-06 -.69020772E-07 -.15027267E-07 .38247705E-07 .90381858E-07 .14096886E-06 .18962139E-06 .23597395E-06 .27968556E-06 .32044203E-06 .35795820E-06 .39197969E-06 .42228455E-06 .44868450E-06 .47102596E-06 .48919071E-06 .50309629E-06 .51269612E-06 .51797930E-06 .51897010E-06 .51572726E-06 .50834293E-06 .49694139E-06 .48167755E-06 .46273521E-06 .44032511E-06 .41468278E-06 .38606628E-06 .35475372E-06 .32104073E-06 .28523773E-06 .24766727E-06 .20866116E-06 .16855766E-06 .12769867E-06 .86426862E-07 .45082939E-07 .40028782E-08 -.36484696E-07 -.76061056E-07 -.11441980E-06 -.15126912E-06 -.18633394E-06 -.21935791E-06 -.25010511E-06 -.27836169E-06 -.30393727E-06 -.32666602E-06 -.34640773E-06 -.36304844E-06 -.37650101E-06 -.38670537E-06 -.39362859E-06 -.39726473E-06 -.39763443E-06 -.39478440E-06 -.38878654E-06 -.37973704E-06 -.36775521E-06 -.35298215E-06 -.33557926E-06 -.31572668E-06 -.29362148E-06 -.26947589E-06 -.24351528E-06 -.21597622E-06 -.18710435E-06 -.15715231E-06 -.12637755E-06 -.95040253E-07 -.63401151E-07 -.31719449E-07 -.25075544E-09 .30754907E-07 .61055029E-07 .90416442E-07 .11861705E-06 .14544744E-06 .17071237E-06 .19423211E-06 .21584365E-06 .23540176E-06 .25277988E-06 .26787081E-06 .28058733E-06 .29086256E-06 .29865019E-06 .30392452E-06 .30668039E-06 .30693285E-06 .30471679E-06 .30008633E-06 .29311407E-06 .28389030E-06 .27252195E-06 .25913148E-06 .24385573E-06 .22684454E-06 .20825943E-06 .18827208E-06 .16706281E-06 .14481908E-06 .12173380E-06 .98003771E-07 .73828052E-07 .49406319E-07 .24937279E-07 .61710617E-09 -.23362093E-07 -.46813741E-07 -.69558198E-07 -.91424083E-07 -.11224952E-06 -.13188328E-06 -.15018583E-06 -.16703026E-06 -.18230312E-06 -.19590510E-06 -.20775165E-06 -.21777338E-06 -.22591640E-06 -.23214256E-06 -.23642947E-06 -.23877047E-06 -.23917444E-06 -.23766551E-06 -.23428265E-06 -.22907914E-06 -.22212191E-06 -.21349088E-06 -.20327808E-06 -.19158677E-06 -.17853047E-06 -.16423189E-06 -.14882186E-06 -.13243817E-06 -.11522438E-06 -.97328581E-07 -.78902219E-07 -.60098799E-07 -.41072663E-07 -.21977766E-07 -.29664576E-08 .15811695E-07 .34211046E-07 .52090970E-07 .69316898E-07 .85761290E-07 .10130455E-06 .11583584E-06 .12925385E-06 .14146746E-06 .15239630E-06 .16197123E-06 .17013476E-06 .17684130E-06 .18205736E-06 .18576167E-06 .18794514E-06 .18861080E-06 .18777356E-06 .18545999E-06 .18170790E-06 .17656592E-06 .17009293E-06 .16235754E-06 .15343732E-06 .14341816E-06 .13239342E-06 .12046315E-06 .10773318E-06 .94314228E-07 .80320977E-07 .65871118E-07 .51084389E-07 .36081612E-07 .20983734E-07 .59108740E-08 -.90185970E-08 -.23688965E-07 -.37988039E-07 -.51807988E-07 -.65046122E-07 -.77605633E-07 -.89396275E-07 -.10033498E-06 -.11034641E-06 -.11936346E-06 -.12732767E-06 -.13418954E-06 -.13990885E-06 -.14445484E-06 -.14780629E-06 -.14995163E-06 -.15088885E-06 -.15062541E-06 -.14917808E-06 -.14657268E-06 -.14284377E-06 -.13803426E-06 -.13219500E-06 -.12538424E-06 -.11766713E-06 -.10911511E-06 -.99805277E-07 -.89819714E-07 -.79244804E-07 -.68170492E-07 -.56689547E-07 -.44896806E-07 -.32888409E-07 -.20761044E-07 -.86111792E-08 .34656768E-08 .15375713E-07 .27027524E-07 .38332792E-07 .49206935E-07 .59569720E-07 .69345836E-07 .78465415E-07 .86864522E-07 .94485575E-07 .10127772E-06 .10719715E-06 .11220737E-06 .11627936E-06 .11939177E-06 .12153094E-06 .12269099E-06 .12287371E-06 .12208849E-06 .12035217E-06 .11768882E-06 .11412947E-06 .10971179E-06 .10447972E-06 .98483091E-07 .91777154E-07 .84422086E-07 .76482480E-07 .68026790E-07 .59126757E-07 .49856823E-07 .40293517E-07 .30514846E-07 .20599666E-07 .10627062E-07 .67573024E-09 -.91766337E-08 -.18853922E-07 -.28282192E-07 -.37390211E-07 -.46109986E-07 -.54377256E-07 -.62131955E-07 -.69318630E-07 -.75886830E-07 -.81791438E-07 -.86992968E-07 -.91457813E-07 -.95158444E-07 -.98073564E-07 -.10018822E-06 -.10149383E-06 -.10198824E-06 -.10167562E-06 -.10056639E-06 -.98677087E-07 -.96030174E-07 -.92653807E-07 -.88581566E-07 -.83852145E-07 -.78508999E-07 -.72599959E-07 -.66176823E-07 -.59294909E-07 -.52012596E-07 -.44390841E-07 -.36492681E-07 -.28382723E-07 -.20126623E-07 -.11790560E-07 -.34407197E-08 .48572290E-08 .13038634E-07 .21040355E-07 .28801242E-07 .36262591E-07 .43368584E-07 .50066694E-07 .56308072E-07 .62047886E-07 .67245638E-07 .71865433E-07 .75876220E-07 .79251991E-07 .81971938E-07 .84020575E-07 .85387810E-07 .86068980E-07 .86064836E-07 .85381490E-07 16.2516435017787408 T Non local Part 0 2 1.51545245730437994 -16.0713411579721424 1.36679540676611033 1.36679540676611033 -3.08890998631222979 Reciprocal Space Part .63355321E+01 .63235542E+01 .62877319E+01 .62283977E+01 .61461011E+01 .60416014E+01 .59158574E+01 .57700154E+01 .56053945E+01 .54234689E+01 .52258500E+01 .50142653E+01 .47905373E+01 .45565605E+01 .43142786E+01 .40656609E+01 .38126791E+01 .35572844E+01 .33013856E+01 .30468280E+01 .27953740E+01 .25486850E+01 .23083053E+01 .20756484E+01 .18519847E+01 .16384327E+01 .14359512E+01 .12453353E+01 .10672141E+01 .90205053E+00 .75014456E+00 .61163735E+00 .48651827E+00 .37463347E+00 .27569610E+00 .18929802E+00 .11492262E+00 .51958594E-01 -.28567781E-03 -.42567283E-01 -.75693857E-01 -.10050876E+00 -.11787660E+00 -.12866936E+00 -.13375327E+00 -.13397671E+00 -.13015909E+00 -.12308113E+00 -.11347635E+00 -.10202406E+00 -.89343697E-01 -.75990675E-01 -.62453672E-01 -.49153270E-01 -.36441936E-01 -.24605230E-01 -.13864130E-01 -.43783604E-02 .37494296E-02 .10468765E-01 .15775887E-01 .19707880E-01 .22336546E-01 .23762160E-01 .24107262E-01 .23510594E-01 .22121325E-01 .20093646E-01 .17581828E-01 .14735823E-01 .11697449E-01 .85972012E-02 .55517136E-02 .26618607E-02 .11499398E-04 -.23331830E-02 -.43237531E-02 -.59290973E-02 -.71345308E-02 -.79405142E-02 -.83610499E-02 -.84218324E-02 -.81582256E-02 -.76131411E-02 -.68348872E-02 -.58750537E-02 -.47864907E-02 -.36214345E-02 -.24298226E-02 -.12578327E-02 -.14667245E-03 .86836614E-03 .17585782E-02 .25022462E-02 .30847780E-02 .34985989E-02 .37428209E-02 .38227175E-02 .37490346E-02 .35371735E-02 Real Space Part .47181925E+01 .47156063E+01 .47078657E+01 .46950246E+01 .46771721E+01 .46544310E+01 .46269562E+01 .45949323E+01 .45585711E+01 .45181083E+01 .44737997E+01 .44259175E+01 .43747457E+01 .43205759E+01 .42637019E+01 .42044152E+01 .41430002E+01 .40797287E+01 .40148557E+01 .39486150E+01 .38812148E+01 .38128348E+01 .37436232E+01 .36736946E+01 .36031287E+01 .35319702E+01 .34602295E+01 .33878839E+01 .33148805E+01 .32411397E+01 .31665592E+01 .30910195E+01 .30143896E+01 .29365329E+01 .28573145E+01 .27766074E+01 .26942994E+01 .26102998E+01 .25245456E+01 .24370066E+01 .23476904E+01 .22566462E+01 .21639675E+01 .20697936E+01 .19743098E+01 .18777469E+01 .17803784E+01 .16825175E+01 .15845124E+01 .14867407E+01 .13896031E+01 .12935161E+01 .11989044E+01 .11061931E+01 .10157998E+01 .92812617E+00 .84355104E+00 .76242313E+00 .68505485E+00 .61171694E+00 .54263406E+00 .47798159E+00 .41788346E+00 .36241127E+00 .31158452E+00 .26537202E+00 .22369431E+00 .18642710E+00 .15340544E+00 .12442869E+00 .99265935E-01 .77661752E-01 .59342229E-01 .44020951E-01 .31404876E-01 .21199925E-01 .13116171E-01 .68725119E-02 .22007487E-02 -.11509984E-02 -.34155687E-02 -.48047506E-02 -.55079710E-02 -.56916571E-02 -.54992210E-02 -.50516052E-02 -.44483144E-02 -.37688500E-02 -.30744603E-02 -.24101180E-02 -.18066361E-02 -.12828421E-02 -.84773481E-03 -.50255690E-03 -.24273009E-03 -.59608000E-04 .57984226E-04 .12244339E-03 .14632325E-03 .14150930E-03 Reciprocal Space Part .13438504E+02 .13371873E+02 .13172871E+02 .12844165E+02 .12390148E+02 .11816872E+02 .11131945E+02 .10344411E+02 .94645984E+01 .85039610E+01 .74748883E+01 .63905117E+01 .52644966E+01 .41108301E+01 .29436052E+01 .17768072E+01 .62410511E+00 -.50134818E+00 -.15871033E+01 -.26215866E+01 -.35942538E+01 -.44957239E+01 -.53178895E+01 -.60540044E+01 -.66987450E+01 -.72482470E+01 -.77001163E+01 -.80534150E+01 -.83086229E+01 -.84675767E+01 -.85333883E+01 -.85103436E+01 -.84037857E+01 -.82199840E+01 -.79659924E+01 -.76495000E+01 -.72786766E+01 -.68620167E+01 -.64081845E+01 -.59258634E+01 -.54236117E+01 -.49097277E+01 -.43921265E+01 -.38782290E+01 -.33748667E+01 -.28882019E+01 -.24236640E+01 -.19859041E+01 -.15787652E+01 -.12052707E+01 -.86762777E+00 -.56724697E+00 -.30477527E+00 -.80141920E-01 .10738479E+00 .25913165E+00 .37694728E+00 .46312370E+00 .52031442E+00 .55145109E+00 .55966070E+00 .54818474E+00 .52030222E+00 .47925784E+00 .42819654E+00 .37010536E+00 .30776361E+00 .24370161E+00 .18016854E+00 .11910935E+00 .62150678E-01 .10595355E-01 -.34574925E-01 -.72689524E-01 -.10337214E+00 -.12651835E+00 -.14226850E+00 -.15097684E+00 -.15317807E+00 -.14955237E+00 -.14088982E+00 -.12805525E+00 -.11195446E+00 -.93502406E-01 -.73594245E-01 -.53079641E-01 -.32740824E-01 -.13274667E-01 .47210303E-02 .20757041E-01 .34458053E-01 .45564057E-01 .53928067E-01 .59510539E-01 .62370922E-01 .62656839E-01 .60591395E-01 .56459179E-01 .50591455E-01 .43351091E-01 Real Space Part -.38272978E+02 -.38218711E+02 -.38056431E+02 -.37787682E+02 -.37414992E+02 -.36941810E+02 -.36372416E+02 -.35711814E+02 -.34965609E+02 -.34139872E+02 -.33241006E+02 -.32275599E+02 -.31250289E+02 -.30171640E+02 -.29046027E+02 -.27879535E+02 -.26677889E+02 -.25446393E+02 -.24189903E+02 -.22912821E+02 -.21619107E+02 -.20312319E+02 -.18995671E+02 -.17672099E+02 -.16344352E+02 -.15015075E+02 -.13686910E+02 -.12362582E+02 -.11044985E+02 -.97372569E+01 -.84428384E+01 -.71655138E+01 -.59094325E+01 -.46791078E+01 -.34793938E+01 -.23154400E+01 -.11926240E+01 -.11646644E+00 .90747133E+00 .18737019E+01 .27769351E+01 .36122062E+01 .43750031E+01 .50613894E+01 .56681182E+01 .61927321E+01 .66336468E+01 .69902141E+01 .72627631E+01 .74526173E+01 .75620863E+01 .75944343E+01 .75538235E+01 .74452368E+01 .72743801E+01 .70475681E+01 .67715979E+01 .64536121E+01 .61009575E+01 .57210427E+01 .53211978E+01 .49085420E+01 .44898601E+01 .40714928E+01 .36592428E+01 .32582976E+01 .28731721E+01 .25076696E+01 .21648633E+01 .18470951E+01 .15559936E+01 .12925069E+01 .10569500E+01 .84906327E+00 .66808077E+00 .51280407E+00 .38168045E+00 .27288210E+00 .18438407E+00 .11403891E+00 .59645958E-01 .19013933E-01 -.99845378E-02 -.29367114E-01 -.41005157E-01 -.46596438E-01 -.47646869E-01 -.45460763E-01 -.41138818E-01 -.35582906E-01 -.29506563E-01 -.23450022E-01 -.17798620E-01 -.12803394E-01 -.86027936E-02 -.52445116E-02 -.27065648E-02 -.91692407E-03 .22886546E-03 .85245878E-03 Non local Part 1 2 1.51545245730437994 -7.50735105493803356 -0.682360598525401429 -0.682360598525401429 0.213991862283654855 Reciprocal Space Part .00000000E+00 .34532301E+00 .68748227E+00 .10233556E+01 .13499032E+01 .16642074E+01 .19635099E+01 .22452474E+01 .25070828E+01 .27469343E+01 .29629992E+01 .31537739E+01 .33180695E+01 .34550219E+01 .35640975E+01 .36450934E+01 .36981335E+01 .37236587E+01 .37224138E+01 .36954292E+01 .36439993E+01 .35696573E+01 .34741470E+01 .33593926E+01 .32274661E+01 .30805539E+01 .29209224E+01 .27508840E+01 .25727627E+01 .23888621E+01 .22014336E+01 .20126471E+01 .18245650E+01 .16391172E+01 .14580813E+01 .12830644E+01 .11154896E+01 .95658516E+00 .80737847E+00 .66869242E+00 .54114602E+00 .42515813E+00 .32095424E+00 .22857620E+00 .14789438E+00 .78622041E-01 .20331525E-01 -.27528188E-01 -.65612883E-01 -.94663914E-01 -.11548879E+00 -.12894193E+00 -.13590592E+00 -.13727360E+00 -.13393136E+00 -.12674371E+00 -.11653954E+00 -.10410010E+00 -.90148885E-01 -.75343501E-01 -.60269468E-01 -.45436053E-01 -.31273999E-01 -.18135097E-01 -.62934424E-02 .40517410E-02 .12771927E-01 .19803934E-01 .25143618E-01 .28838825E-01 .30981823E-01 .31701432E-01 .31155060E-01 .29520844E-01 .26990066E-01 .23760020E-01 .20027452E-01 .15982698E-01 .11804596E-01 .76562510E-02 .36816690E-02 .32856943E-05 -.32796294E-02 -.60917274E-02 -.83815459E-02 -.10120759E-01 -.11302794E-01 -.11940914E-01 -.12065859E-01 -.11723172E-01 -.10970291E-01 -.98735349E-02 -.85050756E-02 -.69399838E-02 -.52534425E-02 -.35181939E-02 -.18022826E-02 -.16714077E-03 .13339507E-02 .26570073E-02 Real Space Part .00000000E+00 .26995305E+00 .53763449E+00 .80082347E+00 .10573992E+01 .13053870E+01 .15430004E+01 .17686767E+01 .19811068E+01 .21792569E+01 .23623820E+01 .25300312E+01 .26820447E+01 .28185419E+01 .29399026E+01 .30467406E+01 .31398713E+01 .32202752E+01 .32890570E+01 .33474024E+01 .33965354E+01 .34376744E+01 .34719923E+01 .35005780E+01 .35244041E+01 .35442986E+01 .35609238E+01 .35747611E+01 .35861034E+01 .35950543E+01 .36015345E+01 .36052938E+01 .36059301E+01 .36029127E+01 .35956099E+01 .35833201E+01 .35653038E+01 .35408179E+01 .35091479E+01 .34696405E+01 .34217317E+01 .33649734E+01 .32990547E+01 .32238186E+01 .31392739E+01 .30456014E+01 .29431545E+01 .28324553E+01 .27141841E+01 .25891661E+01 .24583529E+01 .23228012E+01 .21836487E+01 .20420886E+01 .18993430E+01 .17566362E+01 .16151692E+01 .14760950E+01 .13404963E+01 .12093665E+01 .10835923E+01 .96394166E+00 .85105357E+00 .74543271E+00 .64744721E+00 .55732995E+00 .47518310E+00 .40098555E+00 .33460276E+00 .27579859E+00 .22424870E+00 .17955500E+00 .14126053E+00 .10886457E+00 .81837246E-01 .59633521E-01 .41706052E-01 .27516750E-01 .16546819E-01 .83051451E-02 .23349653E-02 -.17811733E-02 -.44181224E-02 -.59064051E-02 -.65319107E-02 -.65368405E-02 -.61217127E-02 -.54482191E-02 -.46427259E-02 -.38002138E-02 -.29884640E-02 -.22523146E-02 -.16178330E-02 -.10962748E-02 -.68772746E-03 -.38436102E-03 -.17323917E-03 -.38664464E-04 .35943318E-04 .66618769E-04 Reciprocal Space Part .00000000E+00 .13155100E+01 .26197164E+01 .39011132E+01 .51478033E+01 .63473377E+01 .74865935E+01 .85517019E+01 .95280362E+01 .10400264E+02 .11152469E+02 .11768344E+02 .12231449E+02 .12525534E+02 .12634922E+02 .12544927E+02 .12242315E+02 .11715779E+02 .10956412E+02 .99581789E+01 .87183410E+01 .72378450E+01 .55216416E+01 .35789271E+01 .14232929E+01 -.92722618E+00 -.34502146E+01 -.61190515E+01 -.89032026E+01 -.11768624E+02 -.14678277E+02 -.17592731E+02 -.20470871E+02 -.23270652E+02 -.25949928E+02 -.28467301E+02 -.30782987E+02 -.32859669E+02 -.34663327E+02 -.36163996E+02 -.37336472E+02 -.38160902E+02 -.38623279E+02 -.38715804E+02 -.38437111E+02 -.37792355E+02 -.36793145E+02 -.35457337E+02 -.33808676E+02 -.31876307E+02 -.29694167E+02 -.27300259E+02 -.24735840E+02 -.22044539E+02 -.19271423E+02 -.16462040E+02 -.13661459E+02 -.10913331E+02 -.82589989E+01 -.57366663E+01 -.33806627E+01 -.12208045E+01 .71812151E+00 .24167475E+01 .38613765E+01 .50440933E+01 .59627362E+01 .66207303E+01 .70267925E+01 .71945171E+01 .71418559E+01 .68905091E+01 .64652455E+01 .58931707E+01 .52029646E+01 .44241089E+01 .35861248E+01 .27178421E+01 .18467156E+01 .99820769E+00 .19525042E+00 -.54220186E+00 -.11975196E+01 -.17576401E+01 -.22132012E+01 -.25585683E+01 -.27917569E+01 -.29142591E+01 -.29307809E+01 -.28489034E+01 -.26786791E+01 -.24321802E+01 -.21230108E+01 -.17658024E+01 -.13757052E+01 -.96789213E+00 -.55708919E+00 -.15714494E+00 .21934994E+00 .56138367E+00 Real Space Part .00000000E+00 .56377263E+01 .10982287E+02 .15750043E+02 .19676102E+02 .22522929E+02 .24088081E+02 .24210806E+02 .22777310E+02 .19724513E+02 .15042196E+02 .87734705E+01 .10135610E+01 -.80930359E+01 -.18356923E+02 -.29549546E+02 -.41410120E+02 -.53653495E+02 -.65978714E+02 -.78077976E+02 -.89645720E+02 -.10038754E+03 -.11002864E+03 -.11832163E+03 -.12505335E+03 -.13005055E+03 -.13318434E+03 -.13437321E+03 -.13358460E+03 -.13083503E+03 -.12618870E+03 -.11975487E+03 -.11168390E+03 -.10216223E+03 -.91406471E+02 -.79656843E+02 -.67170084E+02 -.54212177E+02 -.41051054E+02 -.27949528E+02 -.15158643E+02 -.29116406E+01 .85813121E+01 .19137501E+02 .28605059E+02 .36865324E+02 .43834128E+02 .49462057E+02 .53733697E+02 .56665972E+02 .58305661E+02 .58726214E+02 .58024026E+02 .56314289E+02 .53726601E+02 .50400462E+02 .46480817E+02 .42113775E+02 .37442622E+02 .32604234E+02 .27725966E+02 .22923080E+02 .18296758E+02 .13932692E+02 .99002775E+01 .62523609E+01 .30255080E+01 .24074256E+00 -.20953188E+01 -.39890056E+01 -.54578879E+01 -.65289041E+01 -.72364030E+01 -.76201730E+01 -.77235266E+01 -.75914989E+01 -.72692098E+01 -.68004266E+01 -.62263558E+01 -.55846781E+01 -.49088335E+01 -.42275492E+01 -.35646002E+01 -.29387788E+01 -.23640498E+01 -.18498587E+01 -.14015627E+01 -.10209489E+01 -.70680943E+00 -.45554062E+00 -.26173998E+00 -.11877623E+00 -.19312859E-01 .44229704E-01 .79283759E-01 .92821477E-01 .91121051E-01 .79609540E-01 .62776959E-01 .44153649E-01 Non local Part 2 1 1.51545245730437994 -0.639077996798658288 Reciprocal Space Part .00000000E+00 .12230946E-01 .48744155E-01 .10900360E+00 .19212536E+00 .29689163E+00 .42177005E+00 .56493787E+00 .72431076E+00 .89757554E+00 .10822265E+01 .12756043E+01 .14749376E+01 .16773855E+01 .18800813E+01 .20801758E+01 .22748805E+01 .24615090E+01 .26375160E+01 .28005345E+01 .29484089E+01 .30792243E+01 .31913321E+01 .32833703E+01 .33542794E+01 .34033126E+01 .34300411E+01 .34343542E+01 .34164541E+01 .33768458E+01 .33163222E+01 .32359448E+01 .31370205E+01 .30210750E+01 .28898234E+01 .27451377E+01 .25890134E+01 .24235350E+01 .22508402E+01 .20730848E+01 .18924089E+01 .17109036E+01 .15305799E+01 .13533403E+01 .11809532E+01 .10150304E+01 .85700829E+00 .70813259E+00 .56944757E+00 .44178875E+00 .32577988E+00 .22183377E+00 .13015683E+00 .50757242E-01 -.16543815E-01 -.72097901E-01 -.11641268E+00 -.15013322E+00 -.17402164E+00 -.18893579E+00 -.19580712E+00 -.19561855E+00 -.18938250E+00 -.17811976E+00 -.16283944E+00 -.14452038E+00 -.12409444E+00 -.10243176E+00 -.80328324E-01 -.58495940E-01 -.37554657E-01 -.18027721E-01 -.33899500E-03 .15187238E-01 .28324231E-01 .38938667E-01 .46984715E-01 .52496506E-01 .55579299E-01 .56399644E-01 .55174831E-01 .52161937E-01 .47646764E-01 .41932956E-01 .35331546E-01 .28151183E-01 .20689229E-01 .13223916E-01 .60076736E-02 -.73825792E-03 -.68278846E-02 -.12113166E-01 -.16485396E-01 -.19875303E-01 -.22251975E-01 -.23620703E-01 -.24019894E-01 -.23517203E-01 -.22205057E-01 -.20195734E-01 Real Space Part .00000000E+00 .66931514E-02 .26709839E-01 .59863667E-01 .10585024E+00 .16425622E+00 .23457145E+00 .31620346E+00 .40849374E+00 .51073502E+00 .62218859E+00 .74210109E+00 .86971965E+00 .10043049E+01 .11451411E+01 .12915432E+01 .14428596E+01 .15984722E+01 .17577917E+01 .19202500E+01 .20852895E+01 .22523499E+01 .24208530E+01 .25901873E+01 .27596918E+01 .29286416E+01 .30962345E+01 .32615815E+01 .34236995E+01 .35815099E+01 .37338401E+01 .38794318E+01 .40169530E+01 .41450157E+01 .42621983E+01 .43670719E+01 .44582302E+01 .45343216E+01 .45940832E+01 .46363748E+01 .46602123E+01 .46647991E+01 .46495543E+01 .46141370E+01 .45584648E+01 .44827278E+01 .43873943E+01 .42732113E+01 .41411975E+01 .39926288E+01 .38290181E+01 .36520889E+01 .34637432E+01 .32660250E+01 .30610813E+01 .28511197E+01 .26383655E+01 .24250191E+01 .22132144E+01 .20049800E+01 .18022035E+01 .16066006E+01 .14196891E+01 .12427682E+01 .10769047E+01 .92292437E+00 .78141015E+00 .65270588E+00 .53692574E+00 .43396850E+00 .34353617E+00 .26515608E+00 .19820566E+00 .14193907E+00 .95514655E-01 .58022566E-01 .28511630E-01 .60147798E-02 -.10427550E-01 -.21746596E-01 -.28827382E-01 -.32494024E-01 -.33498377E-01 -.32512015E-01 -.30121455E-01 -.26826408E-01 -.23040794E-01 -.19096150E-01 -.15247039E-01 -.11678046E-01 -.85119027E-02 -.58183324E-02 -.36231986E-02 -.19175943E-02 -.66654749E-03 .18292207E-03 .69460393E-03 .93690137E-03 .97772608E-03 .88051274E-03 PAW radial sets 325 1.10454679998658678 (5E20.12) augmentation charges (non sperical) -.341845976585E-01 .185451376951E+00 .163942927905E+00 -.190910586645E-01 .138594443717E+00 .185451376951E+00 .177900673861E-01 .141067958659E+00 -.126340019226E-01 .834702577208E-01 .163942927905E+00 .141067958659E+00 .263150090729E+00 -.286197316693E-01 .181136344484E+00 -.190910586645E-01 -.126340019226E-01 -.286197316693E-01 .223686868403E-02 -.202429798106E-01 .138594443717E+00 .834702577208E-01 .181136344484E+00 -.202429798106E-01 .158328337283E+00 uccopancies in atom .215301583939E+01 -.420040023725E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 -.420040023725E+00 .115304159556E+01 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .200000001769E+01 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 grid .394465137901E-04 .407292160115E-04 .420536285092E-04 .434211075974E-04 .448330536940E-04 .462909127554E-04 .477961777565E-04 .493503902202E-04 .509551417960E-04 .526120758897E-04 .543228893466E-04 .560893341891E-04 .579132194111E-04 .597964128306E-04 .617408430020E-04 .637485011919E-04 .658214434176E-04 .679617925531E-04 .701717405030E-04 .724535504471E-04 .748095591581E-04 .772421793949E-04 .797539023732E-04 .823473003167E-04 .850250290916E-04 .877898309261E-04 .906445372190E-04 .935920714389E-04 .966354521184E-04 .997777959454E-04 .103022320954E-03 .106372349823E-03 .109831313272E-03 .113402753584E-03 .117090328225E-03 .120897813595E-03 .124829108890E-03 .128888240100E-03 .133079364131E-03 .137406773061E-03 .141874898533E-03 .146488316298E-03 .151251750901E-03 .156170080513E-03 .161248341935E-03 .166491735749E-03 .171905631649E-03 .177495573938E-03 .183267287206E-03 .189226682190E-03 .195379861832E-03 .201733127525E-03 .208292985570E-03 .215066153833E-03 .222059568631E-03 .229280391832E-03 .236736018190E-03 .244434082917E-03 .252382469505E-03 .260589317796E-03 .269063032320E-03 .277812290901E-03 .286846053544E-03 .296173571612E-03 .305804397298E-03 .315748393410E-03 .326015743468E-03 .336616962136E-03 .347562905988E-03 .358864784627E-03 .370534172165E-03 .382583019074E-03 .395023664426E-03 .407868848530E-03 .421131725976E-03 .434825879109E-03 .448965331940E-03 .463564564503E-03 .478638527689E-03 .494202658552E-03 .510272896123E-03 .526865697730E-03 .543998055851E-03 .561687515518E-03 .579952192284E-03 .598810790773E-03 .618282623839E-03 .638387632340E-03 .659146405561E-03 .680580202301E-03 .702710972640E-03 .725561380420E-03 .749154826457E-03 .773515472501E-03 .798668265982E-03 .824638965558E-03 .851454167495E-03 .879141332904E-03 .907728815860E-03 .937245892446E-03 .967722790726E-03 .999190721707E-03 .103168191130E-02 .106522963332E-02 .109986824358E-02 .113563321502E-02 .117256117412E-02 .121068993832E-02 .125005855481E-02 .129070734050E-02 .133267792329E-02 .137601328473E-02 .142075780402E-02 .146695730344E-02 .151465909534E-02 .156391203051E-02 .161476654826E-02 .166727472806E-02 .172149034287E-02 .177746891423E-02 .183526776908E-02 .189494609850E-02 .195656501831E-02 .202018763167E-02 .208587909370E-02 .215370667819E-02 .222373984653E-02 .229605031879E-02 .237071214721E-02 .244780179203E-02 .252739819979E-02 .260958288416E-02 .269444000944E-02 .278205647674E-02 .287252201298E-02 .296592926278E-02 .306237388331E-02 .316195464231E-02 .326477351917E-02 .337093580940E-02 .348055023246E-02 .359372904311E-02 .371058814634E-02 .383124721607E-02 .395582981774E-02 .408446353483E-02 .421728009949E-02 .435441552750E-02 .449601025751E-02 .464220929491E-02 .479316236029E-02 .494902404277E-02 .510995395833E-02 .527611691328E-02 .544768307300E-02 .562482813623E-02 .580773351499E-02 .599658652037E-02 .619158055436E-02 .639291530789E-02 .660079696533E-02 .681543841566E-02 .703705947050E-02 .726588708917E-02 .750215561113E-02 .774610699602E-02 .799799107136E-02 .825806578845E-02 .852659748653E-02 .880386116554E-02 .909014076769E-02 .938572946833E-02 .969092997611E-02 .100060548430E-01 .103314267845E-01 .106673790097E-01 .110142555633E-01 .113724116770E-01 .117422141340E-01 .121240416444E-01 .125182852329E-01 .129253486394E-01 .133456487323E-01 .137796159358E-01 .142276946701E-01 .146903438070E-01 .151680371397E-01 .156612638678E-01 .161705290987E-01 .166963543645E-01 .172392781561E-01 .177998564750E-01 .183786634024E-01 .189762916871E-01 .195933533527E-01 .202304803243E-01 .208883250755E-01 .215675612970E-01 .222688845859E-01 .229930131585E-01 .237406885859E-01 .245126765529E-01 .253097676428E-01 .261327781464E-01 .269825508984E-01 .278599561404E-01 .287658924120E-01 .297012874711E-01 .306670992440E-01 .316643168064E-01 .326939613961E-01 .337570874592E-01 .348547837298E-01 .359881743446E-01 .371584199948E-01 .383667191141E-01 .396143091064E-01 .409024676130E-01 .422325138206E-01 .436058098128E-01 .450237619647E-01 .464878223832E-01 .479994903942E-01 .495603140778E-01 .511718918537E-01 .528358741185E-01 .545539649355E-01 .563279237797E-01 .581595673400E-01 .600507713795E-01 .620034726564E-01 .640196709075E-01 .661014308959E-01 .682508845257E-01 .704702330253E-01 .727617492016E-01 .751277797673E-01 .775707477444E-01 .800931549457E-01 .826975845366E-01 .853867036804E-01 .881632662704E-01 .910301157490E-01 .939901880208E-01 .970465144584E-01 .100202225007E+00 .103460551390E+00 .106824830419E+00 .110298507409E+00 .113885139709E+00 .117588400343E+00 .121412081775E+00 .125360099789E+00 .129436497499E+00 .133645449493E+00 .137991266106E+00 .142478397833E+00 .147111439891E+00 .151895136918E+00 .156834387838E+00 .161934250877E+00 .167199948739E+00 .172636873959E+00 .178250594424E+00 .184046859074E+00 .190031603790E+00 .196210957474E+00 .202591248325E+00 .209179010317E+00 .215980989895E+00 .223004152879E+00 .230255691604E+00 .237743032277E+00 .245473842590E+00 .253456039569E+00 .261697797680E+00 .270207557205E+00 .278994032880E+00 .288066222824E+00 .297433417753E+00 .307105210492E+00 .317091505804E+00 .327402530526E+00 .338048844049E+00 .349041349129E+00 .360391303051E+00 .372110329160E+00 .384210428763E+00 .396703993418E+00 .409603817629E+00 .422923111941E+00 .436675516478E+00 .450875114901E+00 .465536448842E+00 .480674532787E+00 .496304869457E+00 .512443465682E+00 .529106848796E+00 .546312083559E+00 .564076789634E+00 .582419159634E+00 .601357977747E+00 .620912638979E+00 .641103169011E+00 .661950244710E+00 .683475215304E+00 .705700124244E+00 .728647731778E+00 .752341538261E+00 .776805808223E+00 .802065595213E+00 .828146767460E+00 .855076034365E+00 .882880973849E+00 .911590060599E+00 .941232695231E+00 .971839234392E+00 .100344102185E+01 .103607042060E+01 .106976084600E+01 .110454679999E+01 .114046390641E+01 .117754894754E+01 .121583990169E+01 .125537598214E+01 aepotential .192819245004E+05 .192883734460E+05 .192598202196E+05 .191963582270E+05 .190984360310E+05 .189667838495E+05 .188022966316E+05 .186061950776E+05 .183798685087E+05 .181249139178E+05 .178430998200E+05 .175363466865E+05 .172067324425E+05 .168563736155E+05 .164875046245E+05 .161023858072E+05 .157032928641E+05 .152924970629E+05 .148722157108E+05 .144446772626E+05 .140119096821E+05 .135759924573E+05 .131387944446E+05 .127021012245E+05 .122675780252E+05 .118367355466E+05 .114109561973E+05 .109914772901E+05 .105793949677E+05 .101756664139E+05 .978111434183E+04 .939642980565E+04 .902218227799E+04 .865882350817E+04 .830669815243E+04 .796605078413E+04 .763703523215E+04 .731972322811E+04 .701411317431E+04 .672013865179E+04 .643767662029E+04 .616655522653E+04 .590656110520E+04 .565744622143E+04 .541893413341E+04 .519072570309E+04 .497250429375E+04 .476394030058E+04 .456469543987E+04 .437442612274E+04 .419278661699E+04 .401943210138E+04 .385402018460E+04 .369621379419E+04 .354568176022E+04 .340210127068E+04 .326515695515E+04 .313454468266E+04 .300996939269E+04 .289114573328E+04 .277780143158E+04 .266967265473E+04 .256650780340E+04 .246806636659E+04 .237411720190E+04 .228444120370E+04 .219882822686E+04 .211707937304E+04 .203900397835E+04 .196442186559E+04 .189316118391E+04 .182505897848E+04 .175996025039E+04 .169771816585E+04 .163819308677E+04 .158125304476E+04 .152677224858E+04 .147463192620E+04 .142471907160E+04 .137692687508E+04 .133115366631E+04 .128730345554E+04 .124528489691E+04 .120501148750E+04 .116640117924E+04 .112937611164E+04 .109386250470E+04 .105979017071E+04 .102709265097E+04 .995706810665E+03 .965572721853E+03 .936633411166E+03 .908834853451E+03 .882125538376E+03 .856456843585E+03 .831782216011E+03 .808057428408E+03 .785240730352E+03 .763292002464E+03 .742173292058E+03 .721848418200E+03 .702282877371E+03 .683443956421E+03 .665300233759E+03 .647821997804E+03 .630980870675E+03 .614749657289E+03 .599102569468E+03 .584014908424E+03 .569463140262E+03 .555424744853E+03 .541878265566E+03 .528803166838E+03 .516179824236E+03 .503989460161E+03 .492214132015E+03 .480836662120E+03 .469840605748E+03 .459210211519E+03 .448930398973E+03 .438986702293E+03 .429365273309E+03 .420052809655E+03 .411036555523E+03 .402304271875E+03 .393844203939E+03 .385645048983E+03 .377695963611E+03 .369986501977E+03 .362506629598E+03 .355246690390E+03 .348197364666E+03 .341349709930E+03 .334695091665E+03 .328225161441E+03 .321931915434E+03 .315807579628E+03 .309844678385E+03 .304035979955E+03 .298374479027E+03 .292853423736E+03 .287466262685E+03 .282206656503E+03 .277068465892E+03 .272045732185E+03 .267132679685E+03 .262323702820E+03 .257613351047E+03 .252996335949E+03 .248467505323E+03 .244021853739E+03 .239654502003E+03 .235360698619E+03 .231135810983E+03 .226975319907E+03 .222874814513E+03 .218829986254E+03 .214836625747E+03 .210890616030E+03 .206987930372E+03 .203124627398E+03 .199296847054E+03 .195500808273E+03 .191732804862E+03 .187989203846E+03 .184266442291E+03 .180561024496E+03 .176869522013E+03 .173188570278E+03 .169514868254E+03 .165845177158E+03 .162176320494E+03 .158505183233E+03 .154828711880E+03 .151143916221E+03 .147447867283E+03 .143737704045E+03 .140010629539E+03 .136263915068E+03 .132494905723E+03 .128701019012E+03 .124879753264E+03 .121028686713E+03 .117145488713E+03 .113227920043E+03 .109273842205E+03 .105281223968E+03 .101248148633E+03 .971728242496E+02 .930535916155E+02 .888889371440E+02 .846775032524E+02 .804181022494E+02 .761097316273E+02 .717515883189E+02 .673430886360E+02 .628838858303E+02 .583738925841E+02 .538133036740E+02 .492026218180E+02 .445426855246E+02 .398346985029E+02 .350802627071E+02 .302814121946E+02 .254406495956E+02 .205609834397E+02 .156459663993E+02 .106997319959E+02 .572702931171E+01 .733252530619E+00 -.427553792034E+01 -.929260680276E+01 -.143105526356E+02 -.193213407154E+02 -.243163667655E+02 -.292865592374E+02 -.342225282135E+02 -.391147661274E+02 -.439539037520E+02 -.487310171306E+02 -.534379715242E+02 -.580677712196E+02 -.626148625377E+02 -.670753060806E+02 -.714467017988E+02 -.757277172456E+02 -.799170556119E+02 -.840117276221E+02 -.880046030057E+02 -.918814035797E+02 -.956176810138E+02 -.991766262419E+02 -.102508871174E+03 -.105555338040E+03 -.108253604049E+03 -.110547201368E+03 -.112396144204E+03 -.113786269307E+03 -.114734987418E+03 -.115291672709E+03 -.115531953761E+03 -.115546658215E+03 -.115427989382E+03 -.115256942100E+03 -.115095597885E+03 -.114985663578E+03 -.114951846152E+03 -.115007235485E+03 -.115158243295E+03 -.115407926333E+03 -.115757687402E+03 -.116207880347E+03 -.116757926672E+03 -.117406328556E+03 -.118150752055E+03 -.118988208629E+03 -.119915281692E+03 -.120928350550E+03 -.122023763926E+03 -.123197953205E+03 -.124447473362E+03 -.125768983085E+03 -.127159166698E+03 -.128614609210E+03 -.130131619187E+03 -.131706010656E+03 -.133332832075E+03 -.135006052039E+03 -.136718203389E+03 -.138460007297E+03 -.140220021468E+03 -.141984384183E+03 -.143736775055E+03 -.145458753868E+03 -.147130676930E+03 -.148733394168E+03 -.150250881261E+03 -.151673821885E+03 -.153003858302E+03 -.154257537786E+03 -.155467488722E+03 -.156675535791E+03 -.157909415663E+03 -.159137752184E+03 -.160218542500E+03 -.160893676236E+03 -.160890747106E+03 -.160113090437E+03 -.158760510501E+03 -.157208837284E+03 -.155741179352E+03 -.154427064017E+03 -.153205608548E+03 -.151996492762E+03 -.150746094637E+03 -.149429393310E+03 -.148039770031E+03 -.146579446235E+03 -.145053070033E+03 -.143464332409E+03 -.141814890102E+03 -.140104671417E+03 -.138332742981E+03 -.136498191258E+03 -.134600774575E+03 -.132641296411E+03 -.130621742937E+03 -.128545260361E+03 -.126414251987E+03 -.124235049564E+03 -.122013940651E+03 -.119757081423E+03 -.117470728941E+03 -.115161158595E+03 -.112834286987E+03 -.110495578424E+03 -.108149811389E+03 -.105800959602E+03 -.103452148104E+03 -.101105712630E+03 -.987633810577E+02 -.964265665919E+02 -.940967332254E+02 -.917757725226E+02 -.894663080175E+02 core charge-density .190297153248E-03 .202729640079E-03 .215973712697E-03 .230082284478E-03 .245111712076E-03 .261122018841E-03 .278177132689E-03 .296345139309E-03 .315698551737E-03 .336314597305E-03 .358275523108E-03 .381668921150E-03 .406588074440E-03 .433132325387E-03 .461407467878E-03 .491526164595E-03 .523608391154E-03 .557781908774E-03 .594182767300E-03 .632955840484E-03 .674255395637E-03 .718245699706E-03 .765101664250E-03 .815009531615E-03 .868167605015E-03 .924787025264E-03 .985092597066E-03 .104932366804E-02 .111773506376E-02 .119059808228E-02 .126820155204E-02 .135085295691E-02 .143887963266E-02 .153263003941E-02 .163247511463E-02 .173880971179E-02 .185205412998E-02 .197265574008E-02 .210109071355E-02 .223786586007E-02 .238352058081E-02 .253862894442E-02 .270380189322E-02 .287968958764E-02 .306698389728E-02 .326642104762E-02 .347878443162E-02 .370490759651E-02 .394567741606E-02 .420203745968E-02 .447499157014E-02 .476560766230E-02 .507502175621E-02 .540444225832E-02 .575515450566E-02 .612852558845E-02 .652600946747E-02 .694915240350E-02 .739959871705E-02 .787909689748E-02 .838950608179E-02 .893280292419E-02 .951108887899E-02 .101265979203E-01 .107817047229E-01 .114789333310E-01 .122209663416E-01 .130106546303E-01 .138510276522E-01 .147453043452E-01 .156969046731E-01 .167094618392E-01 .177868352084E-01 .189331239749E-01 .201526816148E-01 .214501311636E-01 .228303813626E-01 .242986437177E-01 .258604505158E-01 .275216738485E-01 .292885456900E-01 .311676790831E-01 .331660904833E-01 .352912233179E-01 .375509728145E-01 .399537121579E-01 .425083200323E-01 .452242096120E-01 .481113590595E-01 .511803435953E-01 .544423692014E-01 .579093080241E-01 .615937355386E-01 .655089695410E-01 .696691110318E-01 .740890870523E-01 .787846955391E-01 .837726522544E-01 .890706398514E-01 .946973591304E-01 .100672582536E+00 .107017209944E+00 .113753326778E+00 .120904264490E+00 .128494663443E+00 .136550538191E+00 .145099345198E+00 .154170052960E+00 .163793214541E+00 .174001042476E+00 .184827485997E+00 .196308310515E+00 .208481179273E+00 .221385737047E+00 .235063695770E+00 .249558921893E+00 .264917525292E+00 .281187949484E+00 .298421062858E+00 .316670250618E+00 .335991507051E+00 .356443527708E+00 .378087801006E+00 .400988698718E+00 .425213564738E+00 .450832801426E+00 .477919952788E+00 .506551783635E+00 .536808353774E+00 .568773086212E+00 .602532828227E+00 .638177904045E+00 .675802157781E+00 .715502985131E+00 .757381352205E+00 .801541799757E+00 .848092430889E+00 .897144880211E+00 .948814262252E+00 .100321909676E+01 .106048120839E+01 .112072559813E+01 .118408028358E+01 .125067610514E+01 .132064649493E+01 .139412720518E+01 .147125599259E+01 .155217225510E+01 .163701661747E+01 .172593046172E+01 .181905539868E+01 .191653267672E+01 .201850252372E+01 .212510341837E+01 .223647128696E+01 .235273862203E+01 .247403351927E+01 .260047862945E+01 .273219002248E+01 .286927596094E+01 .301183558136E+01 .315995748154E+01 .331371821357E+01 .347318068259E+01 .363839245265E+01 .380938396201E+01 .398616665158E+01 .416873101181E+01 .435704455468E+01 .455104971973E+01 .475066172456E+01 .495576637300E+01 .516621783607E+01 .538183642376E+01 .560240636824E+01 .582767364206E+01 .605734383811E+01 .629108014096E+01 .652850142293E+01 .676918050106E+01 .701264259490E+01 .725836402795E+01 .750577121892E+01 .775424001192E+01 .800309539704E+01 .825161167547E+01 .849901312467E+01 .874447522042E+01 .898712647293E+01 .922605093362E+01 .946029142784E+01 .968885356566E+01 .991071057941E+01 .101248090306E+02 .103300754220E+02 .105254237416E+02 .107097639542E+02 .108820114448E+02 .110410974013E+02 .111859801079E+02 .113156571037E+02 .114291781362E+02 .115256588204E+02 .116042948878E+02 .116643768842E+02 .117053051493E+02 .117266048829E+02 .117279410754E+02 .117091330545E+02 .116701683738E+02 .116112157467E+02 .115326367091E+02 .114349956781E+02 .113190680652E+02 .111858460953E+02 .110365419892E+02 .108725881763E+02 .106956342257E+02 .105075402139E+02 .103103662899E+02 .101063582481E+02 .989792898458E+01 .968763578454E+01 .947815347093E+01 .927224353653E+01 .907271947716E+01 .888240864479E+01 .870411103858E+01 .854055554362E+01 .839435425069E+01 .826795549462E+01 .816359640851E+01 .808325581239E+01 .802860831878E+01 .800098061091E+01 .800131091264E+01 .803011272962E+01 .808744398598E+01 .817288269133E+01 .828551023726E+01 .842390332131E+01 .858613530949E+01 .876978758082E+01 .897197106119E+01 .918935783475E+01 .941822246592E+01 .965449250227E+01 .989380751206E+01 .101315858791E+02 .103630984003E+02 .105835475079E+02 .107881507146E+02 .109722266607E+02 .111312819866E+02 .112610971453E+02 .113578092163E+02 .114179897944E+02 .114387160774E+02 .114176333874E+02 .113530074991E+02 .112437653497E+02 .110895229219E+02 .108905993636E+02 .106480166923E+02 .103634847648E+02 .100393715148E+02 .967865883371E+01 .928488481591E+01 .886207346223E+01 .841465329178E+01 .794736665855E+01 .746517190939E+01 .697314082508E+01 .647635407417E+01 .597979764397E+01 .548826338368E+01 .500625684856E+01 .453791557942E+01 .408694057406E+01 .365654316890E+01 .324940863255E+01 .286767641599E+01 .251293505939E+01 .218622742527E+01 .188806136512E+01 .161842314444E+01 .137679916271E+01 .116221978179E+01 .973336551934E+00 .808525602912E+00 .665990142584E+00 .543838221020E+00 .440135092155E+00 .352943290150E+00 .280359313027E+00 .220547985714E+00 .171772483514E+00 .132418223637E+00 .101009843392E+00 .762213197815E-01 .568798143684E-01 .419641139757E-01 .305986636181E-01 .220442156811E-01 .156860871150E-01 .110209434627E-01 .764292480605E-02 .522980220560E-02 .352971270279E-02 .234887668921E-02 .154056716970E-02 .995468671550E-03 .633463992073E-03 .396805853898E-03 .244570334370E-03 .148251800621E-03 .883406512161E-04 .517216587975E-04 .297382286003E-04 .167826577315E-04 .929124599389E-05 .504326064933E-05 .268238652148E-05 .139714992553E-05 .712206271263E-06 pspotential -.182288901534E+03 -.182289634493E+03 -.182290344369E+03 -.182291031888E+03 -.182291697752E+03 -.182292342645E+03 -.182292967225E+03 -.182293572134E+03 -.182294157989E+03 -.182294725393E+03 -.182295274924E+03 -.182295807146E+03 -.182296322604E+03 -.182296821826E+03 -.182297305323E+03 -.182297773589E+03 -.182298227105E+03 -.182298666335E+03 -.182299091728E+03 -.182299503719E+03 -.182299902731E+03 -.182300289172E+03 -.182300663439E+03 -.182301025913E+03 -.182301376966E+03 -.182301716956E+03 -.182302046233E+03 -.182302365134E+03 -.182302673984E+03 -.182302973099E+03 -.182303262786E+03 -.182303543341E+03 -.182303815051E+03 -.182304078193E+03 -.182304333038E+03 -.182304579846E+03 -.182304818868E+03 -.182305050350E+03 -.182305274529E+03 -.182305491632E+03 -.182305701882E+03 -.182305905495E+03 -.182306102677E+03 -.182306293630E+03 -.182306478549E+03 -.182306657623E+03 -.182306831035E+03 -.182306998961E+03 -.182307161571E+03 -.182307319033E+03 -.182307471507E+03 -.182307619147E+03 -.182307762103E+03 -.182307900521E+03 -.182308034542E+03 -.182308164301E+03 -.182308289930E+03 -.182308411557E+03 -.182308529303E+03 -.182308643289E+03 -.182308753628E+03 -.182308860433E+03 -.182308963810E+03 -.182309063863E+03 -.182309160693E+03 -.182309254395E+03 -.182309345065E+03 -.182309432790E+03 -.182309517659E+03 -.182309599756E+03 -.182309679160E+03 -.182309755950E+03 -.182309830200E+03 -.182309901983E+03 -.182309971368E+03 -.182310038420E+03 -.182310103204E+03 -.182310165782E+03 -.182310226210E+03 -.182310284546E+03 -.182310340842E+03 -.182310395150E+03 -.182310447518E+03 -.182310497992E+03 -.182310546615E+03 -.182310593428E+03 -.182310638471E+03 -.182310681778E+03 -.182310723384E+03 -.182310763320E+03 -.182310801615E+03 -.182310838295E+03 -.182310873385E+03 -.182310906904E+03 -.182310938873E+03 -.182310969307E+03 -.182310998220E+03 -.182311025622E+03 -.182311051522E+03 -.182311075923E+03 -.182311098830E+03 -.182311120239E+03 -.182311140148E+03 -.182311158549E+03 -.182311175432E+03 -.182311190781E+03 -.182311204580E+03 -.182311216806E+03 -.182311227434E+03 -.182311236433E+03 -.182311243771E+03 -.182311249407E+03 -.182311253299E+03 -.182311255397E+03 -.182311255648E+03 -.182311253993E+03 -.182311250365E+03 -.182311244693E+03 -.182311236899E+03 -.182311226897E+03 -.182311214596E+03 -.182311199894E+03 -.182311182683E+03 -.182311162846E+03 -.182311140255E+03 -.182311114775E+03 -.182311086258E+03 -.182311054546E+03 -.182311019469E+03 -.182310980845E+03 -.182310938479E+03 -.182310892159E+03 -.182310841662E+03 -.182310786746E+03 -.182310727154E+03 -.182310662609E+03 -.182310592816E+03 -.182310517458E+03 -.182310436199E+03 -.182310348677E+03 -.182310254506E+03 -.182310153274E+03 -.182310044542E+03 -.182309927837E+03 -.182309802659E+03 -.182309668472E+03 -.182309524703E+03 -.182309370741E+03 -.182309205934E+03 -.182309029587E+03 -.182308840958E+03 -.182308639254E+03 -.182308423631E+03 -.182308193187E+03 -.182307946961E+03 -.182307683927E+03 -.182307402991E+03 -.182307102987E+03 -.182306782669E+03 -.182306440711E+03 -.182306075698E+03 -.182305686120E+03 -.182305270367E+03 -.182304826724E+03 -.182304353360E+03 -.182303848324E+03 -.182303309535E+03 -.182302734774E+03 -.182302121676E+03 -.182301467718E+03 -.182300770211E+03 -.182300026288E+03 -.182299232891E+03 -.182298386762E+03 -.182297484424E+03 -.182296522174E+03 -.182295496061E+03 -.182294401873E+03 -.182293235122E+03 -.182291991021E+03 -.182290664467E+03 -.182289250019E+03 -.182287741878E+03 -.182286133861E+03 -.182284419377E+03 -.182282591397E+03 -.182280642431E+03 -.182278564493E+03 -.182276349068E+03 -.182273987081E+03 -.182271468856E+03 -.182268784079E+03 -.182265921755E+03 -.182262870161E+03 -.182259616804E+03 -.182256148363E+03 -.182252450640E+03 -.182248508499E+03 -.182244305805E+03 -.182239825360E+03 -.182235048830E+03 -.182229956674E+03 -.182224528060E+03 -.182218740784E+03 -.182212571177E+03 -.182205994013E+03 -.182198982400E+03 -.182191507677E+03 -.182183539295E+03 -.182175044692E+03 -.182165989163E+03 -.182156335721E+03 -.182146044942E+03 -.182135074811E+03 -.182123380550E+03 -.182110914439E+03 -.182097625619E+03 -.182083459893E+03 -.182068359507E+03 -.182052262914E+03 -.182035104533E+03 -.182016814481E+03 -.181997318297E+03 -.181976536645E+03 -.181954384996E+03 -.181930773292E+03 -.181905605591E+03 -.181878779683E+03 -.181850186692E+03 -.181819710639E+03 -.181787227996E+03 -.181752607191E+03 -.181715708103E+03 -.181676381511E+03 -.181634468518E+03 -.181589799933E+03 -.181542195621E+03 -.181491463815E+03 -.181437400380E+03 -.181379788038E+03 -.181318395550E+03 -.181252976845E+03 -.181183270099E+03 -.181108996771E+03 -.181029860567E+03 -.180945546368E+03 -.180855719078E+03 -.180760022426E+03 -.180658077697E+03 -.180549482397E+03 -.180433808854E+03 -.180310602742E+03 -.180179381547E+03 -.180039632945E+03 -.179890813119E+03 -.179732344998E+03 -.179563616421E+03 -.179383978235E+03 -.179192742320E+03 -.178989179544E+03 -.178772517660E+03 -.178541939144E+03 -.178296578984E+03 -.178035522424E+03 -.177757802689E+03 -.177462398682E+03 -.177148232698E+03 -.176814168152E+03 -.176459007363E+03 -.176081489413E+03 -.175680288132E+03 -.175254010238E+03 -.174801193682E+03 -.174320306283E+03 -.173809744684E+03 -.173267833749E+03 -.172692826477E+03 -.172082904546E+03 -.171436179627E+03 -.170750695620E+03 -.170024431969E+03 -.169255308292E+03 -.168441190520E+03 -.167579898850E+03 -.166669217785E+03 -.165706908619E+03 -.164690724755E+03 -.163618430273E+03 -.162487822229E+03 -.161296757191E+03 -.160043182539E+03 -.158725173094E+03 -.157340973608E+03 -.155889047610E+03 -.154368133011E+03 -.152777304718E+03 -.151116044241E+03 -.149384315948E+03 -.147582649104E+03 -.145712224184E+03 -.143774961065E+03 -.141773605568E+03 -.139711809346E+03 -.137594196132E+03 -.135426404676E+03 -.133215094894E+03 -.130967898244E+03 -.128692610584E+03 -.126397742424E+03 -.124093788962E+03 -.121789522959E+03 -.119492305811E+03 -.117206894811E+03 -.114934150198E+03 -.112670053181E+03 -.110405690825E+03 -.108128835573E+03 -.105827156946E+03 -.103492176237E+03 -.101123364758E+03 -.987403493032E+02 -.964232139575E+02 -.940989054419E+02 -.917757982920E+02 -.894663058918E+02 core charge-density (pseudized) .261083871830E-11 .278339531119E-11 .296735658312E-11 .316347629668E-11 .337255803240E-11 .359545848142E-11 .383309095563E-11 .408642912988E-11 .435651103153E-11 .464444329366E-11 .495140568938E-11 .527865596583E-11 .562753499766E-11 .599947228114E-11 .639599179138E-11 .681871822665E-11 .726938366541E-11 .774983466332E-11 .826203981935E-11 .880809784186E-11 .939024614788E-11 .100108700307E-10 .106725124332E-10 .113778843677E-10 .121298760236E-10 .129315686098E-10 .137862469798E-10 .146974130909E-10 .156688003529E-10 .167043889259E-10 .178084220279E-10 .189854233215E-10 .202402154491E-10 .215779397927E-10 .230040775406E-10 .245244721460E-10 .261453532697E-10 .278733623055E-10 .297155795928E-10 .316795534276E-10 .337733309905E-10 .360054913193E-10 .383851804607E-10 .409221489456E-10 .436267917402E-10 .465101908387E-10 .495841606705E-10 .528612965084E-10 .563550260764E-10 .600796645685E-10 .640504733034E-10 .682837222563E-10 .727967567228E-10 .776080683901E-10 .827373711038E-10 .882056816437E-10 .940354058373E-10 .100250430365E-09 .106876220635E-09 .113939925119E-09 .121470486599E-09 .129498760748E-09 .138057642563E-09 .147182201146E-09 .156909823395E-09 .167280367194E-09 .178336324724E-09 .190122996571E-09 .202688677337E-09 .216084853521E-09 .230366414481E-09 .245591877334E-09 .261823626719E-09 .279128170414E-09 .297576411840E-09 .317243940577E-09 .338211342082E-09 .360564527875E-09 .384395087549E-09 .409800664043E-09 .436885353721E-09 .465760132883E-09 .496543312481E-09 .529361022869E-09 .564347730605E-09 .601646789399E-09 .641411027483E-09 .683803373788E-09 .728997525519E-09 .777178659839E-09 .828544192594E-09 .883304587181E-09 .941684216874E-09 .100392228414E-08 .107027380070E-08 .114101063239E-08 .121642261307E-08 .129681873210E-08 .138252840036E-08 .147390279990E-08 .157131632282E-08 .167516810518E-08 .178588366236E-08 .190391663243E-08 .202975063477E-08 .216390125151E-08 .230691813991E-08 .245938728433E-08 .262193339706E-08 .279522247775E-08 .297996454200E-08 .317691653030E-08 .338688540914E-08 .361073147709E-08 .384937188931E-08 .410378441504E-08 .437501144325E-08 .466416425311E-08 .497242756661E-08 .530106440189E-08 .565142124746E-08 .602493357813E-08 .642313173546E-08 .684764719678E-08 .730021925837E-08 .778270216017E-08 .829707268129E-08 .884543823721E-08 .943004551205E-08 .100532896610E-07 .107177241208E-07 .114260710680E-07 .121812325685E-07 .129863024634E-07 .138445790394E-07 .147595785369E-07 .157350495501E-07 .167749883773E-07 .178836553859E-07 .190655924579E-07 .203256415869E-07 .216689647034E-07 .231010648093E-07 .246278085067E-07 .262554500156E-07 .279906567753E-07 .298405367365E-07 .318126674548E-07 .339151271038E-07 .361565275345E-07 .385460495162E-07 .410934803024E-07 .438092536745E-07 .467044926264E-07 .497910548643E-07 .530815813067E-07 .565895477811E-07 .603293201292E-07 .643162129431E-07 .685665521720E-07 .730977418525E-07 .779283352356E-07 .830781105952E-07 .885681520289E-07 .944209355756E-07 .100660421000E-06 .107312149613E-06 .114403348526E-06 .121963041760E-06 .130022168647E-06 .138613710019E-06 .147772822677E-06 .157536982685E-06 .167946138063E-06 .179042871492E-06 .190872573682E-06 .203483628095E-06 .216927607749E-06 .231259484911E-06 .246537854478E-06 .262825171962E-06 .280188007002E-06 .298697313398E-06 .318428716754E-06 .339462820825E-06 .361885533794E-06 .385788415729E-06 .411269048589E-06 .438431430192E-06 .467386393677E-06 .498252054061E-06 .531154283607E-06 .566227217795E-06 .603613793829E-06 .643466323682E-06 .685947103844E-06 .731229064022E-06 .779496457187E-06 .830945593492E-06 .885785620738E-06 .944239354174E-06 .100654415860E-05 .107295288590E-05 .114373487122E-05 .121917699132E-05 .129958478860E-05 .138528366462E-05 .147662014706E-05 .157396323419E-05 .167770582123E-05 .178826621290E-05 .190608972696E-05 .203165039333E-05 .216545275396E-05 .230803376822E-05 .245996482929E-05 .262185389667E-05 .279434775020E-05 .297813437111E-05 .317394545537E-05 .338255906488E-05 .360480242167E-05 .384155485041E-05 .409375087389E-05 .436238346632E-05 .464850746843E-05 .495324316804E-05 .527778004890E-05 .562338071004E-05 .599138495636E-05 .638321406033E-05 .680037519293E-05 .724446602002E-05 .771717945861E-05 .822030858426E-05 .875575167860E-05 .932551740185E-05 .993173007164E-05 .105766350244E-04 .112626040302E-04 .119921407267E-04 .127678860278E-04 .135926234593E-04 .144692843590E-04 .154009528725E-04 .163908706613E-04 .174424412276E-04 .185592337430E-04 .197449862537E-04 .210036081117E-04 .223391814635E-04 .237559615994E-04 .252583759418E-04 .268510214205E-04 .285386599470E-04 .303262116664E-04 .322187456208E-04 .342214674178E-04 .363397034449E-04 .385788811213E-04 .409445046220E-04 .434421254458E-04 .460773071399E-04 .488555834235E-04 .517824088842E-04 .548631013538E-04 .581027749959E-04 .615062630733E-04 .650780292975E-04 .688220666079E-04 .727417821847E-04 .768398674683E-04 .811181519572E-04 .855774395750E-04 .902173264645E-04 .950359991730E-04 .100030012370E-03 .105194045482E-03 .110520637974E-03 .115999903461E-03 .121619223409E-03 .127362921956E-03 .133211924280E-03 .139143402128E-03 .145130411482E-03 .151141529022E-03 .157140496032E-03 .163085880689E-03 .168930772369E-03 .174622524613E-03 .180102566815E-03 .185306308421E-03 .190163163433E-03 .194596727210E-03 .198525141781E-03 .201861689883E-03 .204515661503E-03 .206393539253E-03 .207400550079E-03 .207442629794E-03 .206428842874E-03 .204274291886E-03 .200903537527E-03 .196254530112E-03 .190283024968E-03 .182967415746E-03 .174313869670E-03 .164361585556E-03 .153187918192E-03 .140913020963E-03 .127703553574E-03 .113774886211E-03 .993911109895E-04 .848620551711E-04 .705363920140E-04 .567898833882E-04 .440077892963E-04 .325605760688E-04 .227722874355E-04 .148813571888E-04 .899428843763E-05 .503355044071E-05 .268238652148E-05 .139714992553E-05 .712206271263E-06 pseudo wavefunction .144426085336E-03 .149122461308E-03 .153971551708E-03 .158978322428E-03 .164147900839E-03 .169485581039E-03 .174996829281E-03 .180687289562E-03 .186562789412E-03 .192629345854E-03 .198893171572E-03 .205360681270E-03 .212038498243E-03 .218933461158E-03 .226052631058E-03 .233403298595E-03 .240992991493E-03 .248829482260E-03 .256920796145E-03 .265275219360E-03 .273901307563E-03 .282807894619E-03 .292004101651E-03 .301499346375E-03 .311303352750E-03 .321426160932E-03 .331878137558E-03 .342669986362E-03 .353812759138E-03 .365317867053E-03 .377197092341E-03 .389462600360E-03 .402126952058E-03 .415203116832E-03 .428704485810E-03 .442644885567E-03 .457038592284E-03 .471900346365E-03 .487245367535E-03 .503089370428E-03 .519448580675E-03 .536339751525E-03 .553780180999E-03 .571787729605E-03 .590380838631E-03 .609578549027E-03 .629400520906E-03 .649867053677E-03 .670999106834E-03 .692818321418E-03 .715347042184E-03 .738608340477E-03 .762626037863E-03 .787424730526E-03 .813029814448E-03 .839467511427E-03 .866764895922E-03 .894949922782E-03 .924051455875E-03 .954099297643E-03 .985124219625E-03 .101715799397E-02 .105023342596E-02 .108438438764E-02 .111964585245E-02 .115605393110E-02 .119364590851E-02 .123246028198E-02 .127253680067E-02 .131391650625E-02 .135664177496E-02 .140075636098E-02 .144630544125E-02 .149333566176E-02 .154189518526E-02 .159203374062E-02 .164380267375E-02 .169725500017E-02 .175244545929E-02 .180943057049E-02 .186826869098E-02 .192902007557E-02 .199174693834E-02 .205651351637E-02 .212338613555E-02 .219243327842E-02 .226372565436E-02 .233733627197E-02 .241334051382E-02 .249181621365E-02 .257284373607E-02 .265650605883E-02 .274288885780E-02 .283208059469E-02 .292417260763E-02 .301925920466E-02 .311743776034E-02 .321880881540E-02 .332347617971E-02 .343154703856E-02 .354313206235E-02 .365834551999E-02 .377730539576E-02 .390013351023E-02 .402695564485E-02 .415790167079E-02 .429310568187E-02 .443270613180E-02 .457684597594E-02 .472567281758E-02 .487933905909E-02 .503800205783E-02 .520182428727E-02 .537097350323E-02 .554562291556E-02 .572595136543E-02 .591214350831E-02 .610439000294E-02 .630288770639E-02 .650783987549E-02 .671945637477E-02 .693795389117E-02 .716355615567E-02 .739649417217E-02 .763700645373E-02 .788533926652E-02 .814174688165E-02 .840649183513E-02 .867984519635E-02 .896208684516E-02 .925350575795E-02 .955440030301E-02 .986507854544E-02 .101858585619E-01 .105170687657E-01 .108590482420E-01 .112121470943E-01 .115767268020E-01 .119531605891E-01 .123418338057E-01 .127431443205E-01 .131575029276E-01 .135853337646E-01 .140270747459E-01 .144831780084E-01 .149541103728E-01 .154403538191E-01 .159424059771E-01 .164607806334E-01 .169960082543E-01 .175486365249E-01 .181192309065E-01 .187083752111E-01 .193166721942E-01 .199447441672E-01 .205932336283E-01 .212628039142E-01 .219541398726E-01 .226679485552E-01 .234049599333E-01 .241659276361E-01 .249516297118E-01 .257628694128E-01 .266004760057E-01 .274653056067E-01 .283582420428E-01 .292801977402E-01 .302321146398E-01 .312149651417E-01 .322297530782E-01 .332775147171E-01 .343593197956E-01 .354762725856E-01 .366295129918E-01 .378202176823E-01 .390496012535E-01 .403189174303E-01 .416294603006E-01 .429825655880E-01 .443796119602E-01 .458220223762E-01 .473112654725E-01 .488488569882E-01 .504363612315E-01 .520753925858E-01 .537676170591E-01 .555147538743E-01 .573185771036E-01 .591809173454E-01 .611036634459E-01 .630887642640E-01 .651382304811E-01 .672541364559E-01 .694386221233E-01 .716938949378E-01 .740222318614E-01 .764259813951E-01 .789075656536E-01 .814694824823E-01 .841143076145E-01 .868446968698E-01 .896633883883E-01 .925732049024E-01 .955770560403E-01 .986779406602E-01 .101878949211E+00 .105183266117E+00 .108594172175E+00 .112115046975E+00 .115749371313E+00 .119500729615E+00 .123372812349E+00 .127369418414E+00 .131494457512E+00 .135751952469E+00 .140146041517E+00 .144680980501E+00 .149361145005E+00 .154191032384E+00 .159175263671E+00 .164318585343E+00 .169625870920E+00 .175102122377E+00 .180752471319E+00 .186582179906E+00 .192596641487E+00 .198801380883E+00 .205202054301E+00 .211804448808E+00 .218614481317E+00 .225638197025E+00 .232881767230E+00 .240351486457E+00 .248053768812E+00 .255995143464E+00 .264182249175E+00 .272621827747E+00 .281320716284E+00 .290285838135E+00 .299524192370E+00 .309042841636E+00 .318848898228E+00 .328949508185E+00 .339351833207E+00 .350063030175E+00 .361090228046E+00 .372440501836E+00 .384120843445E+00 .396138128992E+00 .408499082345E+00 .421210234489E+00 .434277878348E+00 .447708018658E+00 .461506316441E+00 .475678027627E+00 .490227935307E+00 .505160275107E+00 .520478653094E+00 .536185955663E+00 .552284250741E+00 .568774679699E+00 .585657339283E+00 .602931152883E+00 .620593730441E+00 .638641216289E+00 .657068124218E+00 .675867159093E+00 .695029024366E+00 .714542214875E+00 .734392794406E+00 .754564157582E+00 .775036775775E+00 .795787926915E+00 .816791409262E+00 .838017239490E+00 .859431335749E+00 .880995186755E+00 .902665508453E+00 .924393890328E+00 .946126434144E+00 .967803388630E+00 .989358784588E+00 .101072007590E+01 .103180779314E+01 .105253521790E+01 .107280808738E+01 .109252434067E+01 .111157391997E+01 .112983864200E+01 .114719215741E+01 .116350001811E+01 .117861987503E+01 .119240183155E+01 .120468898020E+01 .121531815266E+01 .122412091529E+01 .123092484389E+01 .123555511264E+01 .123783643150E+01 .123759536567E+01 .123466306669E+01 .122887843966E+01 .122009176232E+01 .120816875969E+01 .119299512136E+01 .117448142712E+01 .115256841873E+01 .112723252149E+01 .109849147731E+01 .106640990144E+01 .103110451704E+01 .992748756670E+00 .951576347955E+00 .907883424913E+00 .862028630120E+00 .814430601759E+00 .765562181162E+00 .715940641178E+00 .666113237039E+00 .616637435989E+00 .568055309866E+00 .520861799045E+00 .475466901619E+00 .432152333551E+00 .391039091211E+00 ae wavefunction .174777546426E-02 .180396454344E-02 .186195715151E-02 .192181098899E-02 .198358559058E-02 .204734238266E-02 .211314474263E-02 .218105805992E-02 .225114979896E-02 .232348956404E-02 .239814916601E-02 .247520269113E-02 .255472657191E-02 .263679966008E-02 .272150330172E-02 .280892141464E-02 .289914056808E-02 .299225006474E-02 .308834202522E-02 .318751147488E-02 .328985643356E-02 .339547800731E-02 .350448048353E-02 .361697142827E-02 .373306178666E-02 .385286598612E-02 .397650204261E-02 .410409166977E-02 .423576039137E-02 .437163765672E-02 .451185695951E-02 .465655595990E-02 .480587660999E-02 .495996528283E-02 .511897290497E-02 .528305509258E-02 .545237229140E-02 .562708992030E-02 .580737851887E-02 .599341389885E-02 .618537729952E-02 .638345554729E-02 .658784121933E-02 .679873281148E-02 .701633491039E-02 .724085837006E-02 .747252049276E-02 .771154521442E-02 .795816329460E-02 .821261251095E-02 .847513785837E-02 .874599175283E-02 .902543423987E-02 .931373320790E-02 .961116460621E-02 .991801266779E-02 .102345701369E-01 .105611385018E-01 .108980282314E-01 .112455590179E-01 .116040600229E-01 .119738701295E-01 .123553381978E-01 .127488233260E-01 .131546951155E-01 .135733339403E-01 .140051312209E-01 .144504897024E-01 .149098237362E-01 .153835595660E-01 .158721356168E-01 .163760027875E-01 .168956247467E-01 .174314782310E-01 .179840533456E-01 .185538538673E-01 .191413975491E-01 .197472164254E-01 .203718571183E-01 .210158811445E-01 .216798652203E-01 .223644015671E-01 .230700982138E-01 .237975792971E-01 .245474853582E-01 .253204736350E-01 .261172183489E-01 .269384109851E-01 .277847605654E-01 .286569939113E-01 .295558558981E-01 .304821096957E-01 .314365369971E-01 .324199382316E-01 .334331327605E-01 .344769590546E-01 .355522748503E-01 .366599572830E-01 .378009029935E-01 .389760282080E-01 .401862687853E-01 .414325802309E-01 .427159376738E-01 .440373358026E-01 .453977887572E-01 .467983299732E-01 .482400119734E-01 .497239061033E-01 .512511022052E-01 .528227082271E-01 .544398497590E-01 .561036694942E-01 .578153266063E-01 .595759960388E-01 .613868676984E-01 .632491455462E-01 .651640465795E-01 .671327996958E-01 .691566444312E-01 .712368295646E-01 .733746115781E-01 .755712529653E-01 .778280203757E-01 .801461825854E-01 .825270082840E-01 .849717636640E-01 .874817098022E-01 .900580998196E-01 .927021758065E-01 .954151654995E-01 .981982786941E-01 .101052703381E+00 .103979601586E+00 .106980104903E+00 .110055309696E+00 .113206271960E+00 .116434001818E+00 .119739457637E+00 .123123539742E+00 .126587083715E+00 .130130853248E+00 .133755532545E+00 .137461718230E+00 .141249910766E+00 .145120505346E+00 .149073782235E+00 .153109896556E+00 .157228867479E+00 .161430566811E+00 .165714706951E+00 .170080828200E+00 .174528285406E+00 .179056233912E+00 .183663614819E+00 .188349139514E+00 .193111273474E+00 .197948219325E+00 .202857899145E+00 .207837936011E+00 .212885634779E+00 .217997962103E+00 .223171525695E+00 .228402552831E+00 .233686868132E+00 .239019870619E+00 .244396510086E+00 .249811262816E+00 .255258106685E+00 .260730495700E+00 .266221334045E+00 .271722949682E+00 .277227067613E+00 .282724782884E+00 .288206533434E+00 .293662072933E+00 .299080443723E+00 .304449950024E+00 .309758131591E+00 .314991737989E+00 .320136703720E+00 .325178124422E+00 .330100234399E+00 .334886385758E+00 .339519029473E+00 .343979698678E+00 .348248994574E+00 .352306575312E+00 .356131148289E+00 .359700466270E+00 .362991327835E+00 .365979582637E+00 .368640142006E+00 .370946995455E+00 .372873233687E+00 .374391078708E+00 .375471921689E+00 .376086369249E+00 .376204298837E+00 .375794923913E+00 .374826869660E+00 .373268259927E+00 .371086816151E+00 .368249968967E+00 .364724983222E+00 .360479097073E+00 .355479675838E+00 .349694381209E+00 .343091356376E+00 .335639427580E+00 .327308322472E+00 .318068905608E+00 .307893431262E+00 .296755813625E+00 .284631914276E+00 .271499846688E+00 .257340297279E+00 .242136862358E+00 .225876400055E+00 .208549396067E+00 .190150341785E+00 .170678123049E+00 .150136417434E+00 .128534097616E+00 .105885637932E+00 .822115208265E-01 .575386393559E-01 .319006914938E-01 .533856147154E-02 -.220993169062E-01 -.503566201663E-01 -.793688232651E-01 -.109062920230E+00 -.139357180718E+00 -.170160944795E+00 -.201374457553E+00 -.232888745529E+00 -.264585538670E+00 -.296337244946E+00 -.328006988998E+00 -.359448730418E+00 -.390507479883E+00 -.421019630995E+00 -.450813421749E+00 -.479709532319E+00 -.507521818544E+00 -.534058175330E+00 -.559121523260E+00 -.582510913567E+00 -.604022749042E+00 -.623452119498E+00 -.640594249348E+00 -.655246052872E+00 -.667207789717E+00 -.676284810997E+00 -.682289384385E+00 -.685042585039E+00 -.684376238301E+00 -.680134898835E+00 -.672177850086E+00 -.660381106462E+00 -.644639399676E+00 -.624868128841E+00 -.601005252556E+00 -.573013099062E+00 -.540880068864E+00 -.504622201706E+00 -.464284578029E+00 -.419942522685E+00 -.371702577393E+00 -.319703207562E+00 -.264115209717E+00 -.205141788414E+00 -.143018276299E+00 -.780114785080E-01 -.104186318054E-01 .594340221004E-01 .131193044807E+00 .204479992068E+00 .278894011134E+00 .354014915127E+00 .429406872887E+00 .504622911524E+00 .579210380301E+00 .652717167444E+00 .724697585408E+00 .794715679449E+00 .862343566974E+00 .927155120439E+00 .988720443952E+00 .104660896064E+01 .110040294376E+01 .114971403617E+01 .119419463519E+01 .123354296476E+01 .126750495553E+01 .129587551917E+01 .131850012385E+01 .133527663529E+01 .134615706654E+01 .135114882773E+01 .135031513888E+01 .134377440569E+01 .133169849962E+01 .131430999809E+01 .129187850742E+01 .126471622360E+01 .123317289419E+01 .119763033822E+01 .115849663574E+01 .111619997669E+01 .107118280248E+01 .102389597172E+01 .974793104282E+00 .924324852816E+00 .872933853890E+00 .821049613502E+00 .769083922733E+00 .717426607091E+00 .666441678369E+00 .616463929108E+00 .567796024530E+00 .520706160024E+00 .475426363069E+00 .432151507392E+00 .391039091211E+00 pseudo wavefunction -.458145010185E-04 -.473042742741E-04 -.488424912370E-04 -.504307271754E-04 -.520706085815E-04 -.537638148365E-04 -.555120799314E-04 -.573171942418E-04 -.591810063620E-04 -.611054249979E-04 -.630924209217E-04 -.651440289902E-04 -.672623502285E-04 -.694495539820E-04 -.717078801373E-04 -.740396414168E-04 -.764472257466E-04 -.789330987024E-04 -.814998060338E-04 -.841499762719E-04 -.868863234210E-04 -.897116497378E-04 -.926288486015E-04 -.956409074762E-04 -.987509109711E-04 -.101962043999E-03 -.105277595037E-03 -.108700959497E-03 -.112235643200E-03 -.115885265965E-03 -.119653565322E-03 -.123544400334E-03 -.127561755550E-03 -.131709745088E-03 -.135992616844E-03 -.140414756848E-03 -.144980693748E-03 -.149695103455E-03 -.154562813927E-03 -.159588810115E-03 -.164778239066E-03 -.170136415198E-03 -.175668825735E-03 -.181381136337E-03 -.187279196890E-03 -.193369047507E-03 -.199656924706E-03 -.206149267801E-03 -.212852725494E-03 -.219774162685E-03 -.226920667500E-03 -.234299558553E-03 -.241918392438E-03 -.249784971465E-03 -.257907351657E-03 -.266293850993E-03 -.274953057928E-03 -.283893840190E-03 -.293125353856E-03 -.302657052733E-03 -.312498698037E-03 -.322660368388E-03 -.333152470131E-03 -.343985747991E-03 -.355171296079E-03 -.366720569249E-03 -.378645394828E-03 -.390957984729E-03 -.403670947954E-03 -.416797303505E-03 -.430350493715E-03 -.444344398014E-03 -.458793347139E-03 -.473712137807E-03 -.489116047869E-03 -.505020851947E-03 -.521442837594E-03 -.538398821964E-03 -.555906169030E-03 -.573982807370E-03 -.592647248513E-03 -.611918605901E-03 -.631816614448E-03 -.652361650753E-03 -.673574753956E-03 -.695477647278E-03 -.718092760260E-03 -.741443251723E-03 -.765553033478E-03 -.790446794798E-03 -.816150027698E-03 -.842689053021E-03 -.870091047382E-03 -.898384070987E-03 -.927597096346E-03 -.957760037929E-03 -.988903782780E-03 -.102106022213E-02 -.105426228401E-02 -.108854396697E-02 -.112394037488E-02 -.116048775279E-02 -.119822352406E-02 -.123718632864E-02 -.127741606257E-02 -.131895391881E-02 -.136184242938E-02 -.140612550883E-02 -.145184849917E-02 -.149905821622E-02 -.154780299749E-02 -.159813275156E-02 -.165009900917E-02 -.170375497578E-02 -.175915558605E-02 -.181635755988E-02 -.187541946043E-02 -.193640175389E-02 -.199936687126E-02 -.206437927208E-02 -.213150551024E-02 -.220081430196E-02 -.227237659581E-02 -.234626564520E-02 -.242255708303E-02 -.250132899885E-02 -.258266201843E-02 -.266663938597E-02 -.275334704886E-02 -.284287374525E-02 -.293531109439E-02 -.303075368981E-02 -.312929919562E-02 -.323104844576E-02 -.333610554651E-02 -.344457798221E-02 -.355657672438E-02 -.367221634436E-02 -.379161512942E-02 -.391489520269E-02 -.404218264678E-02 -.417360763138E-02 -.430930454487E-02 -.444941213008E-02 -.459407362430E-02 -.474343690376E-02 -.489765463252E-02 -.505688441610E-02 -.522128895988E-02 -.539103623238E-02 -.556629963365E-02 -.574725816880E-02 -.593409662691E-02 -.612700576538E-02 -.632618249997E-02 -.653183010047E-02 -.674415839248E-02 -.696338396502E-02 -.718973038459E-02 -.742342841534E-02 -.766471624597E-02 -.791383972306E-02 -.817105259137E-02 -.843661674090E-02 -.871080246119E-02 -.899388870262E-02 -.928616334518E-02 -.958792347462E-02 -.989947566613E-02 -.102211362757E-01 -.105532317392E-01 -.108960988794E-01 -.112500852204E-01 -.116155493109E-01 -.119928610545E-01 -.123824020483E-01 -.127845659295E-01 -.131997587302E-01 -.136283992389E-01 -.140709193711E-01 -.145277645463E-01 -.149993940730E-01 -.154862815400E-01 -.159889152155E-01 -.165077984514E-01 -.170434500945E-01 -.175964049019E-01 -.181672139623E-01 -.187564451207E-01 -.193646834057E-01 -.199925314604E-01 -.206406099727E-01 -.213095581070E-01 -.220000339327E-01 -.227127148512E-01 -.234482980160E-01 -.242075007474E-01 -.249910609365E-01 -.257997374383E-01 -.266343104488E-01 -.274955818650E-01 -.283843756225E-01 -.293015380077E-01 -.302479379397E-01 -.312244672167E-01 -.322320407225E-01 -.332715965846E-01 -.343440962804E-01 -.354505246805E-01 -.365918900236E-01 -.377692238114E-01 -.389835806156E-01 -.402360377834E-01 -.415276950308E-01 -.428596739087E-01 -.442331171281E-01 -.456491877256E-01 -.471090680531E-01 -.486139585698E-01 -.501650764148E-01 -.517636537363E-01 -.534109357501E-01 -.551081784979E-01 -.568566462733E-01 -.586576086806E-01 -.605123372865E-01 -.624221018244E-01 -.643881659023E-01 -.664117821665E-01 -.684941868642E-01 -.706365937458E-01 -.728401872406E-01 -.751061148362E-01 -.774354785827E-01 -.798293256391E-01 -.822886377703E-01 -.848143196963E-01 -.874071861885E-01 -.900679477964E-01 -.927971950843E-01 -.955953812426E-01 -.984628029342E-01 -.101399579223E+00 -.104405628421E+00 -.107480642692E+00 -.110624060210E+00 -.113835034702E+00 -.117112402168E+00 -.120454644548E+00 -.123859850156E+00 -.127325670621E+00 -.130849274121E+00 -.134427294685E+00 -.138055777309E+00 -.141730118689E+00 -.145445003322E+00 -.149194334797E+00 -.152971162075E+00 -.156767600622E+00 -.160574748264E+00 -.164382595722E+00 -.168179931824E+00 -.171954243478E+00 -.175691610597E+00 -.179376596302E+00 -.182992132841E+00 -.186519403884E+00 -.189937724040E+00 -.193224416702E+00 -.196354691607E+00 -.199301523851E+00 -.202035536491E+00 -.204524889284E+00 -.206735176665E+00 -.208629338603E+00 -.210167588621E+00 -.211307363985E+00 -.212003303814E+00 -.212207261718E+00 -.211868360438E+00 -.210933096896E+00 -.209345507006E+00 -.207047400508E+00 -.203978676993E+00 -.200077735043E+00 -.195281987022E+00 -.189528492407E+00 -.182754722538E+00 -.174899469169E+00 -.165903908071E+00 -.155712826964E+00 -.144276024115E+00 -.131549879650E+00 -.117499095935E+00 -.102098595831E+00 -.853355581034E-01 -.672115574475E-01 -.477447622741E-01 -.269721265898E-01 -.495149289209E-02 .182364986332E-01 .424868227057E-01 .676689555717E-01 .936264113463E-01 .120177124410E+00 .147114889116E+00 .174212073432E+00 .201223814133E+00 .227893871806E+00 .253962267409E+00 .279174730681E+00 .303293856421E+00 .326111680031E+00 .347463143038E+00 .367239620333E+00 .385401327203E+00 .401987028588E+00 .417119060496E+00 .431001286201E+00 .443907310530E+00 .456156151165E+00 .468072729108E+00 .479931127308E+00 .491879728441E+00 .503863482633E+00 ae wavefunction .267659161489E-03 .276264112846E-03 .285145261695E-03 .294311444463E-03 .303771778465E-03 .313535670717E-03 .323612827017E-03 .334013261293E-03 .344747305248E-03 .355825618281E-03 .367259197721E-03 .379059389357E-03 .391237898285E-03 .403806800095E-03 .416778552365E-03 .430166006521E-03 .443982420035E-03 .458241468988E-03 .472957261005E-03 .488144348558E-03 .503817742700E-03 .519992927122E-03 .536685872710E-03 .553913052461E-03 .571691456850E-03 .590038609650E-03 .608972584185E-03 .628512020067E-03 .648676140393E-03 .669484769440E-03 .690958350854E-03 .713117966346E-03 .735985354916E-03 .759582932603E-03 .783933812786E-03 .809061827032E-03 .834991546524E-03 .861748304054E-03 .889358216623E-03 .917848208622E-03 .947246035649E-03 .977580308933E-03 .100888052040E-02 .104117706839E-02 .107450128401E-02 .110888545818E-02 .114436286934E-02 .118096781184E-02 .121873562504E-02 .125770272308E-02 .129790662537E-02 .133938598784E-02 .138218063485E-02 .142633159186E-02 .147188111881E-02 .151887274426E-02 .156735130024E-02 .161736295785E-02 .166895526361E-02 .172217717649E-02 .177707910571E-02 .183371294927E-02 .189213213316E-02 .195239165128E-02 .201454810604E-02 .207865974969E-02 .214478652622E-02 .221299011396E-02 .228333396874E-02 .235588336765E-02 .243070545336E-02 .250786927892E-02 .258744585305E-02 .266950818584E-02 .275413133480E-02 .284139245127E-02 .293137082705E-02 .302414794119E-02 .311980750691E-02 .321843551855E-02 .332012029840E-02 .342495254339E-02 .353302537149E-02 .364443436769E-02 .375927762946E-02 .387765581152E-02 .399967216980E-02 .412543260437E-02 .425504570124E-02 .438862277276E-02 .452627789642E-02 .466812795191E-02 .481429265610E-02 .496489459567E-02 .512005925723E-02 .527991505452E-02 .544459335234E-02 .561422848705E-02 .578895778302E-02 .596892156479E-02 .615426316452E-02 .634512892421E-02 .654166819219E-02 .674403331349E-02 .695237961336E-02 .716686537355E-02 .738765180051E-02 .761490298509E-02 .784878585274E-02 .808947010378E-02 .833712814265E-02 .859193499554E-02 .885406821532E-02 .912370777288E-02 .940103593395E-02 .968623712019E-02 .997949775362E-02 .102810060829E-01 .105909519908E-01 .109095267804E-01 .112369229402E-01 .115733338853E-01 .119189536741E-01 .122739766978E-01 .126385973420E-01 .130130096188E-01 .133974067663E-01 .137919808141E-01 .141969221140E-01 .146124188317E-01 .150386563987E-01 .154758169216E-01 .159240785464E-01 .163836147760E-01 .168545937368E-01 .173371773932E-01 .178315207070E-01 .183377707379E-01 .188560656836E-01 .193865338551E-01 .199292925857E-01 .204844470689E-01 .210520891236E-01 .216322958822E-01 .222251283992E-01 .228306301767E-01 .234488256031E-01 .240797183031E-01 .247232893944E-01 .253794956487E-01 .260482675537E-01 .267295072738E-01 .274230865053E-01 .281288442258E-01 .288465843328E-01 .295760731716E-01 .303170369495E-01 .310691590353E-01 .318320771434E-01 .326053804009E-01 .333886062998E-01 .341812375330E-01 .349826987162E-01 .357923529992E-01 .366094985668E-01 .374333650374E-01 .382631097605E-01 .390978140222E-01 .399364791658E-01 .407780226363E-01 .416212739597E-01 .424649706703E-01 .433077541998E-01 .441481657450E-01 .449846421321E-01 .458155117005E-01 .466389902270E-01 .474531769192E-01 .482560505055E-01 .490454654553E-01 .498191483636E-01 .505746945403E-01 .513095648452E-01 .520210828163E-01 .527064321405E-01 .533626545219E-01 .539866480051E-01 .545751658161E-01 .551248157897E-01 .556320604517E-01 .560932178345E-01 .565044631045E-01 .568618310872E-01 .571612197777E-01 .573983949296E-01 .575689958191E-01 .576685422846E-01 .576924431423E-01 .576360060867E-01 .574944491798E-01 .572629140386E-01 .569364808282E-01 .565101851689E-01 .559790370603E-01 .553380419253E-01 .545822238696E-01 .537066512466E-01 .527064646076E-01 .515769071084E-01 .503133574281E-01 .489113652422E-01 .473666892730E-01 .456753379200E-01 .438336124497E-01 .418381526968E-01 .396859852007E-01 .373745736678E-01 .349018716150E-01 .322663770099E-01 .294671886836E-01 .265040642401E-01 .233774791433E-01 .200886865980E-01 .166397777872E-01 .130337419571E-01 .927452577101E-02 .536709128138E-02 .131747180314E-02 -.286717507726E-02 -.717851813748E-02 -.116070075431E-01 -.161418349044E-01 -.207708988559E-01 -.254807764783E-01 -.302567007691E-01 -.350825444067E-01 -.399408103136E-01 -.448126300206E-01 -.496777714760E-01 -.545146585741E-01 -.593004050738E-01 -.640108655160E-01 -.686207051435E-01 -.731034897237E-01 -.774317950395E-01 -.815773350157E-01 -.855111072813E-01 -.892035552368E-01 -.926247460490E-01 -.957445641460E-01 -.985329196143E-01 -.100959970594E+00 -.102996358297E+00 -.104613452935E+00 -.105783608555E+00 -.106480424532E+00 -.106679011346E+00 -.106356258096E+00 -.105491099110E+00 -.104064776804E+00 -.102061097853E+00 -.994666795063E-01 -.962711827268E-01 -.924675285939E-01 -.880520942348E-01 -.830248842587E-01 -.773896735157E-01 -.711541167414E-01 -.643298205718E-01 -.569323733791E-01 -.489813285751E-01 -.405001375146E-01 -.315160289425E-01 -.220598331656E-01 -.121657506636E-01 -.187106643364E-02 .878418756460E-02 .197576198142E-01 .310049172988E-01 .424803415036E-01 .541372997967E-01 .659290196575E-01 .778093496085E-01 .897336638483E-01 .101659722772E+00 .113548163118E+00 .125362241200E+00 .137066815814E+00 .148627320579E+00 .160009901876E+00 .171183094364E+00 .182120002449E+00 .192799755190E+00 .203207994829E+00 .213336836230E+00 .223184691222E+00 .232756112743E+00 .242061670695E+00 .251117818347E+00 .259946694685E+00 .268575814050E+00 .277037612108E+00 .285368837874E+00 .293609799845E+00 .301803486091E+00 .309994584961E+00 .318228436038E+00 .326549941391E+00 .335002457197E+00 .343626650824E+00 .352459492893E+00 .361533318231E+00 .370874996387E+00 .380505121857E+00 .390437478309E+00 .400678499497E+00 .411226928093E+00 .422073576328E+00 .433201177429E+00 .444584297033E+00 .456189272427E+00 .467974156130E+00 .479888656045E+00 .491874103062E+00 .503863482633E+00 pseudo wavefunction .785926620874E-08 .837870396345E-08 .893247260516E-08 .952284114452E-08 .101522285565E-07 .108232136921E-07 .115385458444E-07 .123011560141E-07 .131141689189E-07 .139809157962E-07 .149049480532E-07 .158900518179E-07 .169402634527E-07 .180598860929E-07 .192535072780E-07 .205260177493E-07 .218826314889E-07 .233289070834E-07 .248707704995E-07 .265145393654E-07 .282669488567E-07 .301351792924E-07 .321268855564E-07 .342502284619E-07 .365139081899E-07 .389271999372E-07 .414999919204E-07 .442428258922E-07 .471669403348E-07 .502843165085E-07 .536077275437E-07 .571507907778E-07 .609280235502E-07 .649549026862E-07 .692479279112E-07 .738246894569E-07 .787039401354E-07 .839056721770E-07 .894511991458E-07 .953632432706E-07 .101666028546E-06 .108385379988E-06 .115548829450E-06 .123185728431E-06 .131327368339E-06 .140007108707E-06 .149260513877E-06 .159125498726E-06 .169642484012E-06 .180854561996E-06 .192807673013E-06 .205550793698E-06 .219136137670E-06 .233619369470E-06 .249059832639E-06 .265520792872E-06 .283069697241E-06 .301778450556E-06 .321723709984E-06 .342987199143E-06 .365656042954E-06 .389823124631E-06 .415587466253E-06 .443054634500E-06 .472337173197E-06 .503555064452E-06 .536836220267E-06 .572317006643E-06 .610142802321E-06 .650468594460E-06 .693459613669E-06 .739292011027E-06 .788153579835E-06 .840244525077E-06 .895778283736E-06 .954982399320E-06 .101809945420E-05 .108538806354E-05 .115712393496E-05 .123360099820E-05 .131513260946E-05 .140205283531E-05 .149471782152E-05 .159350725228E-05 .169882590591E-05 .181110531337E-05 .193080552640E-05 .205841700251E-05 .219446261453E-05 .233949979301E-05 .249412281018E-05 .265896521488E-05 .283470242841E-05 .302205451193E-05 .322178911679E-05 .343472462980E-05 .366173352641E-05 .390374594549E-05 .416175350037E-05 .443681334171E-05 .473005248899E-05 .504267244810E-05 .537595413426E-05 .573126312020E-05 .611005523123E-05 .651388251001E-05 .694439957561E-05 .740337040275E-05 .789267554912E-05 .841431986030E-05 .897044068384E-05 .956331662629E-05 .101953768888E-04 .108692112198E-04 .115875805252E-04 .123534281802E-04 .131698920881E-04 .140403175361E-04 .149682709011E-04 .159575542608E-04 .170122209704E-04 .181365922682E-04 .193352749799E-04 .206131803907E-04 .219755443666E-04 .234279488032E-04 .249763444938E-04 .266270755068E-04 .283869051745E-04 .302630437998E-04 .322631781919E-04 .343955031551E-04 .366687550566E-04 .390922476135E-04 .416759100428E-04 .444303277321E-04 .473667855980E-04 .504973143072E-04 .538347395524E-04 .573927345820E-04 .611858762001E-04 .652297044655E-04 .695407863332E-04 .741367834997E-04 .790365247282E-04 .842600829509E-04 .898288574621E-04 .957656615390E-04 .102094815847E-03 .108842248015E-03 .116035598779E-03 .123704335136E-03 .131879870970E-03 .140595695633E-03 .149887511017E-03 .159793377669E-03 .170353870548E-03 .181612245058E-03 .193614614035E-03 .206410136406E-03 .220051218294E-03 .234593727381E-03 .250097221404E-03 .266625191718E-03 .284245322912E-03 .303029769525E-03 .323055451007E-03 .344404366097E-03 .367163927918E-03 .391427321122E-03 .417293882556E-03 .444869506968E-03 .474267079416E-03 .505606936104E-03 .539017355529E-03 .574635081894E-03 .612605882924E-03 .653085144305E-03 .696238503152E-03 .742242523043E-03 .791285413317E-03 .843567795536E-03 .899303520151E-03 .958720536647E-03 .102206182062E-02 .108958636150E-02 .116157021477E-02 .123830762294E-02 .132011220964E-02 .140731825153E-02 .150028203309E-02 .159938328948E-02 .170502674328E-02 .181764374087E-02 .193769399500E-02 .206566744021E-02 .220208620811E-02 .234750673039E-02 .250252197722E-02 .266776383984E-02 .284390566616E-02 .303166495891E-02 .323180624649E-02 .344514413700E-02 .367254656688E-02 .391493825581E-02 .417330438055E-02 .444869448076E-02 .474222661078E-02 .505509175189E-02 .538855850042E-02 .574397804777E-02 .612278946924E-02 .652652533925E-02 .695681769152E-02 .741540434328E-02 .790413560369E-02 .842498138720E-02 .898003875343E-02 .957153989589E-02 .102018606025E-01 .108735292116E-01 .115892360873E-01 .123518436392E-01 .131643969111E-01 .140301347638E-01 .149525016772E-01 .159351601961E-01 .169820040454E-01 .180971719356E-01 .192850620843E-01 .205503474718E-01 .218979918502E-01 .233332665233E-01 .248617679074E-01 .264894358838E-01 .282225729443E-01 .300678641289E-01 .320323977433E-01 .341236868395E-01 .363496914289E-01 .387188413873E-01 .412400599961E-01 .439227880484E-01 .467770084292E-01 .498132710563E-01 .530427180446E-01 .564771089263E-01 .601288457263E-01 .640109976560E-01 .681373251416E-01 .725223028589E-01 .771811413879E-01 .821298070384E-01 .873850393292E-01 .929643655223E-01 .988861115276E-01 .105169408393E+00 .111834193484E+00 .118901205350E+00 .126391971106E+00 .134328785058E+00 .142734677107E+00 .151633369299E+00 .161049218702E+00 .171007144592E+00 .181532537712E+00 .192651149125E+00 .204388955964E+00 .216772001122E+00 .229826203672E+00 .243577136574E+00 .258049767951E+00 .273268162027E+00 .289255135588E+00 .306031865697E+00 .323617444272E+00 .342028375121E+00 .361278009123E+00 .381375913435E+00 .402327171012E+00 .424131607303E+00 .446782941864E+00 .470267863758E+00 .494565031197E+00 .519643997838E+00 .545464070664E+00 .571973107495E+00 .599106265971E+00 .626784720411E+00 .654914368381E+00 .683384555135E+00 .712066851421E+00 .740813928423E+00 .769458582889E+00 .797812975619E+00 .825668157314E+00 .852793967002E+00 .878939399432E+00 .903833548304E+00 .927187241164E+00 .948695488069E+00 .968040868257E+00 .984897975278E+00 .998939029119E+00 .100984074119E+01 .101729248166E+01 .102100574537E+01 .102072483890E+01 .101623861390E+01 .100739294833E+01 .994103524916E+00 .976368276058E+00 .954278658633E+00 .928028697421E+00 .897920504762E+00 .864364765299E+00 .827874496603E+00 .789050297507E+00 .748555326104E+00 .707078470444E+00 .665284658903E+00 .623752082469E+00 .582897344533E+00 .542912626541E+00 ae wavefunction -.105596819059E-05 -.111961732491E-05 -.118680807864E-05 -.125775527231E-05 -.133268604712E-05 -.141184063082E-05 -.149547314765E-05 -.158385248089E-05 -.167726318507E-05 -.177600645448E-05 -.188040115171E-05 -.199078489890E-05 -.210751523673E-05 -.223097085328E-05 -.236155289144E-05 -.249968633573E-05 -.264582148627E-05 -.280043552335E-05 -.296403417116E-05 -.313715346747E-05 -.332036163312E-05 -.351426107977E-05 -.371949051983E-05 -.393672722682E-05 -.416668942972E-05 -.441013885982E-05 -.466788345945E-05 -.494078026080E-05 -.522973844720E-05 -.553572260805E-05 -.585975620105E-05 -.620292523250E-05 -.656638217315E-05 -.695135012182E-05 -.735912723465E-05 -.779109143629E-05 -.824870543149E-05 -.873352203653E-05 -.924718985098E-05 -.979145929198E-05 -.103681890143E-04 -.109793527412E-04 -.116270465326E-04 -.123134965184E-04 -.130410671282E-04 -.138122698476E-04 -.146297725368E-04 -.154964093462E-04 -.164151912693E-04 -.173893173719E-04 -.184221867429E-04 -.195174112116E-04 -.206788288828E-04 -.219105185394E-04 -.232168149715E-04 -.246023252882E-04 -.260719462811E-04 -.276308828911E-04 -.292846678789E-04 -.310391827416E-04 -.329006799757E-04 -.348758067789E-04 -.369716302529E-04 -.391956642409E-04 -.415558978715E-04 -.440608259363E-04 -.467194812169E-04 -.495414688695E-04 -.525370030230E-04 -.557169457029E-04 -.590928482552E-04 -.626769954051E-04 -.664824521303E-04 -.705231135300E-04 -.748137578585E-04 -.793701029426E-04 -.842088661931E-04 -.893478284158E-04 -.948059016922E-04 -.100603201549E-03 -.106761123714E-03 -.113302425726E-03 -.120251313704E-03 -.127633534603E-03 -.135476474282E-03 -.143809261761E-03 -.152662880024E-03 -.162070283809E-03 -.172066524765E-03 -.182688884464E-03 -.193977015740E-03 -.205973092845E-03 -.218721970982E-03 -.232271355761E-03 -.246671983189E-03 -.261977810831E-03 -.278246220805E-03 -.295538235301E-03 -.313918745424E-03 -.333456754090E-03 -.354225633841E-03 -.376303400447E-03 -.399773003227E-03 -.424722633072E-03 -.451246049160E-03 -.479442925490E-03 -.509419218387E-03 -.541287556084E-03 -.575167651781E-03 -.611186741378E-03 -.649480047359E-03 -.690191270248E-03 -.733473109186E-03 -.779487813222E-03 -.828407765031E-03 -.880416098770E-03 -.935707353975E-03 -.994488167380E-03 -.105697800468E-02 -.112340993438E-02 -.119403144580E-02 -.126910531366E-02 -.134891051152E-02 -.143374317653E-02 -.152391762808E-02 -.161976744293E-02 -.172164658964E-02 -.182993062504E-02 -.194501795560E-02 -.206733116687E-02 -.219731842379E-02 -.233545494528E-02 -.248224455610E-02 -.263822131933E-02 -.280395125280E-02 -.298003413283E-02 -.316710538856E-02 -.336583809041E-02 -.357694503594E-02 -.380118093659E-02 -.403934470844E-02 -.429228187048E-02 -.456088705336E-02 -.484610662171E-02 -.514894141289E-02 -.547044959487E-02 -.581174964550E-02 -.617402345549E-02 -.655851955673E-02 -.696655647728E-02 -.739952622402E-02 -.785889789319E-02 -.834622140859E-02 -.886313138633E-02 -.941135112440E-02 -.999269671431E-02 -.106090812709E-01 -.112625192758E-01 -.119551310277E-01 -.126891471921E-01 -.134669134421E-01 -.142908951782E-01 -.151636823138E-01 -.160879941140E-01 -.170666840672E-01 -.181027447720E-01 -.191993128153E-01 -.203596736173E-01 -.215872662134E-01 -.228856879414E-01 -.242586989972E-01 -.257102268193E-01 -.272443702566E-01 -.288654034706E-01 -.305777795168E-01 -.323861335466E-01 -.342952855620E-01 -.363102426528E-01 -.384362006378E-01 -.406785450239E-01 -.430428511923E-01 -.455348837112E-01 -.481605946670E-01 -.509261209009E-01 -.538377800235E-01 -.569020650780E-01 -.601256377098E-01 -.635153196919E-01 -.670780826485E-01 -.708210358081E-01 -.747514116107E-01 -.788765489831E-01 -.832038740903E-01 -.877408783621E-01 -.924950935860E-01 -.974740638561E-01 -.102685314155E+00 -.108136315350E+00 -.113834445375E+00 -.119786946381E+00 -.126000877617E+00 -.132483063842E+00 -.139240039036E+00 -.146277985218E+00 -.153602666188E+00 -.161219356000E+00 -.169132762040E+00 -.177346942564E+00 -.185865218615E+00 -.194690080262E+00 -.203823087127E+00 -.213264763260E+00 -.223014486428E+00 -.233070371977E+00 -.243429151483E+00 -.254086046494E+00 -.265034637745E+00 -.276266730334E+00 -.287772215468E+00 -.299538929501E+00 -.311552511132E+00 -.323796257825E+00 -.336250982642E+00 -.348894872897E+00 -.361703352219E+00 -.374648947734E+00 -.387701164149E+00 -.400826366458E+00 -.413987672687E+00 -.427144857558E+00 -.440254267162E+00 -.453268743748E+00 -.466137558984E+00 -.478806353783E+00 -.491217083686E+00 -.503307971062E+00 -.515013468854E+00 -.526264244840E+00 -.536987198958E+00 -.547105528383E+00 -.556538854430E+00 -.565203421427E+00 -.573012371194E+00 -.579876088826E+00 -.585702610035E+00 -.590398078901E+00 -.593867247928E+00 -.596014017182E+00 -.596742013167E+00 -.595955209642E+00 -.593558591738E+00 -.589458863285E+00 -.583565195039E+00 -.575790010537E+00 -.566049805423E+00 -.554265995729E+00 -.540365790618E+00 -.524283084714E+00 -.505959365100E+00 -.485344627268E+00 -.462398293973E+00 -.437090129741E+00 -.409401142942E+00 -.379324465857E+00 -.346866201943E+00 -.312046227614E+00 -.274898934508E+00 -.235473896331E+00 -.193836443242E+00 -.150068125848E+00 -.104267051001E+00 -.565480730091E-01 -.704282664229E-02 .441004073158E-01 .967170082579E-01 .150626494075E+00 .205633172410E+00 .261526975034E+00 .318084509473E+00 .375070404697E+00 .432239085395E+00 .489337154003E+00 .546106505452E+00 .602287976592E+00 .657624575144E+00 .711862372317E+00 .764747105605E+00 .816016943090E+00 .865396232586E+00 .912596908632E+00 .957328939441E+00 .999313289969E+00 .103829050024E+01 .107402401811E+01 .110630105902E+01 .113493324323E+01 .115975779849E+01 .118063930655E+01 .119747169558E+01 .121018012978E+01 .121872249820E+01 .122309031049E+01 .122330891873E+01 .121943707605E+01 .121156589541E+01 .119981729795E+01 .118434204616E+01 .116531745179E+01 .114294480628E+01 .111744646220E+01 .108906312954E+01 .105805108117E+01 .102467933806E+01 .989226740693E+00 .951979087549E+00 .913226274125E+00 .873259429424E+00 .832368058688E+00 .790837171441E+00 .748944417044E+00 .706957262463E+00 .665130286933E+00 .623702666894E+00 .582896012892E+00 .542912626541E+00 pseudo wavefunction -.134747383219E-08 -.143653160954E-08 -.153147542896E-08 -.163269431308E-08 -.174060299597E-08 -.185564362246E-08 -.197828755980E-08 -.210903732902E-08 -.224842866399E-08 -.239703270650E-08 -.255545834645E-08 -.272435471676E-08 -.290441385310E-08 -.309637352940E-08 -.330102028087E-08 -.351919262669E-08 -.375178450580E-08 -.399974893967E-08 -.426410193728E-08 -.454592665804E-08 -.484637784997E-08 -.516668658113E-08 -.550816528382E-08 -.587221313213E-08 -.626032177489E-08 -.667408144759E-08 -.711518748813E-08 -.758544728339E-08 -.808678767472E-08 -.862126285301E-08 -.919106277554E-08 -.979852213907E-08 -.104461299460E-07 -.111365397029E-07 -.118725802927E-07 -.126572675663E-07 -.134938166989E-07 -.143856553645E-07 -.153364377802E-07 -.163500596790E-07 -.174306742719E-07 -.185827092657E-07 -.198108850047E-07 -.211202338118E-07 -.225161206081E-07 -.240042648950E-07 -.255907641891E-07 -.272821190062E-07 -.290852594966E-07 -.310075738402E-07 -.330569385192E-07 -.352417505909E-07 -.375709620935E-07 -.400541167264E-07 -.427013889542E-07 -.455236256954E-07 -.485323907665E-07 -.517400122631E-07 -.551596330731E-07 -.588052647281E-07 -.626918448136E-07 -.668352981742E-07 -.712526021638E-07 -.759618562079E-07 -.809823559635E-07 -.863346723814E-07 -.920407359919E-07 -.981239267631E-07 -.104609169897E-06 -.111523037956E-06 -.118893859742E-06 -.126751836368E-06 -.135129165006E-06 -.144060170805E-06 -.153581447537E-06 -.163732007533E-06 -.174553441531E-06 -.186090089086E-06 -.198389220245E-06 -.211501229226E-06 -.225479840903E-06 -.240382330932E-06 -.256269760426E-06 -.273207226147E-06 -.291264127219E-06 -.310514449485E-06 -.331037068645E-06 -.352916073429E-06 -.376241110140E-06 -.401107749953E-06 -.427617880497E-06 -.455880123313E-06 -.486010278907E-06 -.518131801207E-06 -.552376303385E-06 -.588884097102E-06 -.627804767391E-06 -.669297785540E-06 -.713533162468E-06 -.760692145290E-06 -.810967959909E-06 -.864566602689E-06 -.921707684444E-06 -.982625330198E-06 -.104756913842E-05 -.111680520362E-05 -.119061720658E-05 -.126930757654E-05 -.135319873031E-05 -.144263439312E-05 -.153798100688E-05 -.163962923143E-05 -.174799554502E-05 -.186352395054E-05 -.198668779447E-05 -.211799170609E-05 -.225797366478E-05 -.240720720390E-05 -.256630376033E-05 -.273591517924E-05 -.291673638437E-05 -.310950822470E-05 -.331502050924E-05 -.353411524229E-05 -.376769007247E-05 -.401670196961E-05 -.428217114452E-05 -.456518522773E-05 -.486690372426E-05 -.518856276266E-05 -.553148015777E-05 -.589706080784E-05 -.628680244817E-05 -.670230178475E-05 -.714526103294E-05 -.761749488806E-05 -.812093795621E-05 -.865765267581E-05 -.922983776218E-05 -.983983720970E-05 -.104901498883E-04 -.111834397734E-04 -.119225468512E-04 -.127104987439E-04 -.135505231018E-04 -.144460608138E-04 -.154007800889E-04 -.164185914675E-04 -.175036638225E-04 -.186604414163E-04 -.198936620824E-04 -.212083766068E-04 -.226099693859E-04 -.241041804484E-04 -.256971289268E-04 -.273953380771E-04 -.292057619466E-04 -.311358137985E-04 -.331933964090E-04 -.353869343593E-04 -.377254084534E-04 -.402183924014E-04 -.428760919163E-04 -.457093863828E-04 -.487298732661E-04 -.519499154394E-04 -.553826916229E-04 -.590422501341E-04 -.629435661687E-04 -.671026028408E-04 -.715363762269E-04 -.762630246749E-04 -.813018826558E-04 -.866735594516E-04 -.924000229941E-04 -.985046891883E-04 -.105012517075E-03 -.111950110207E-03 -.119345824649E-03 -.127229884010E-03 -.135634501981E-03 -.144594012842E-03 -.154145010460E-03 -.164326496314E-03 -.175180037121E-03 -.186749932682E-03 -.199083394583E-03 -.212230736446E-03 -.226245576456E-03 -.241185052930E-03 -.257110053751E-03 -.274085460522E-03 -.292180408360E-03 -.311468562294E-03 -.332028411283E-03 -.353943580939E-03 -.377303166081E-03 -.402202084330E-03 -.428741451992E-03 -.457028983575E-03 -.487179416312E-03 -.519314961181E-03 -.553565781936E-03 -.590070503775E-03 -.628976753310E-03 -.670441731619E-03 -.714632822183E-03 -.761728235629E-03 -.811917693252E-03 -.865403151344E-03 -.922399568452E-03 -.983135717732E-03 -.104785504660E-02 -.111681658596E-02 -.119029591133E-02 -.126858615808E-02 -.135199909330E-02 -.144086624633E-02 -.153554010051E-02 -.163639534813E-02 -.174383021078E-02 -.185826782699E-02 -.198015770910E-02 -.210997727062E-02 -.224823342557E-02 -.239546426056E-02 -.255224077994E-02 -.271916872401E-02 -.289689045935E-02 -.308608693973E-02 -.328747973502E-02 -.350183312440E-02 -.372995624897E-02 -.397270531713E-02 -.423098585466E-02 -.450575498892E-02 -.479802375463E-02 -.510885940566E-02 -.543938771424E-02 -.579079523523E-02 -.616433150903E-02 -.656131117203E-02 -.698311593773E-02 -.743119640594E-02 -.790707365008E-02 -.841234052495E-02 -.894866262804E-02 -.951777883768E-02 -.101215013397E-01 -.107617150412E-01 -.114403762568E-01 -.121595105349E-01 -.129212094750E-01 -.137276263671E-01 -.145809704615E-01 -.154834996534E-01 -.164375113400E-01 -.174453311776E-01 -.185092994359E-01 -.196317546088E-01 -.208150139064E-01 -.220613502095E-01 -.233729650270E-01 -.247519569481E-01 -.262002850351E-01 -.277197265513E-01 -.293118283681E-01 -.309778513425E-01 -.327187069079E-01 -.345348850708E-01 -.364263729627E-01 -.383925630604E-01 -.404321501580E-01 -.425430161623E-01 -.447221017837E-01 -.469652642223E-01 -.492671200019E-01 -.516208721956E-01 -.540181214191E-01 -.564486601546E-01 -.589002502162E-01 -.613583834905E-01 -.638060264934E-01 -.662233497878E-01 -.685874439215E-01 -.708720242761E-01 -.730471280793E-01 -.750788078274E-01 -.769288264927E-01 -.785543611429E-01 -.799077229589E-01 -.809361030693E-01 -.815813550695E-01 -.817798264871E-01 -.814622526784E-01 -.805537275528E-01 -.789737659262E-01 -.766364719624E-01 -.734508267696E-01 -.693211054152E-01 -.641474289926E-01 -.578264504337E-01 -.502521630188E-01 -.413168074670E-01 -.309118366646E-01 -.189288761639E-01 -.526059351395E-02 .101986393926E-01 .275524384772E-01 .469026343029E-01 .683502441982E-01 .919974237985E-01 .117950641792E+00 .146325308074E+00 .177252036316E+00 .210884621576E+00 .247409643327E+00 .287057342905E+00 .330113049547E+00 .376927919999E+00 .427927098114E+00 .483612589997E+00 .544557205357E+00 .611384888261E+00 .684756682714E+00 ae wavefunction .136621721246E-06 .144856704014E-06 .153549904212E-06 .162729115561E-06 .172423725842E-06 .182664815999E-06 .193485264911E-06 .204919861002E-06 .217005420263E-06 .229780911558E-06 .243287589696E-06 .257569136623E-06 .272671811369E-06 .288644609045E-06 .305539429995E-06 .323411259226E-06 .342318357108E-06 .362322461812E-06 .383489004550E-06 .405887338556E-06 .429590980951E-06 .454677872514E-06 .481230650670E-06 .509336941937E-06 .539089671710E-06 .570587393780E-06 .603934640790E-06 .639242296705E-06 .676627992886E-06 .716216529215E-06 .758140322047E-06 .802539880375E-06 .849564312466E-06 .899371864558E-06 .952130493926E-06 .100801847842E-05 .106722506489E-05 .112995115895E-05 .119641005880E-05 .126682823599E-05 .134144616602E-05 .142051921214E-05 .150431856571E-05 .159313224678E-05 .168726616885E-05 .178704527172E-05 .189281472725E-05 .200494122219E-05 .212381432352E-05 .224984793135E-05 .238348182510E-05 .252518330891E-05 .267544896281E-05 .283480650615E-05 .300381678092E-05 .318307586219E-05 .337321730464E-05 .357491453175E-05 .378888338092E-05 .401588480958E-05 .425672777567E-05 .451227230417E-05 .478343274791E-05 .507118125979E-05 .537655148592E-05 .570064249577E-05 .604462296478E-05 .640973562306E-05 .679730199044E-05 .720872741255E-05 .764550642020E-05 .810922842982E-05 .860158380789E-05 .912437032306E-05 .967950000766E-05 .102690064570E-04 .108950525937E-04 .115599389237E-04 .122661123183E-04 .130161753518E-04 .138128962323E-04 .146592193598E-04 .155582765532E-04 .165133989855E-04 .175281298722E-04 .186062379599E-04 .197517318622E-04 .209688752990E-04 .222622032886E-04 .236365393580E-04 .250970138275E-04 .266490832390E-04 .282985509949E-04 .300515892828E-04 .319147623619E-04 .338950512943E-04 .359998802089E-04 .382371441832E-04 .406152388516E-04 .431430918290E-04 .458301960665E-04 .486866452481E-04 .517231713516E-04 .549511844981E-04 .583828152203E-04 .620309592955E-04 .659093252895E-04 .700324849587E-04 .744159266871E-04 .790761121166E-04 .840305361594E-04 .892977905775E-04 .948976313281E-04 .100851049884E-03 .107180348744E-03 .113909221368E-03 .121062836759E-03 .128667928969E-03 .136752891753E-03 .145347878677E-03 .154484908937E-03 .164197979195E-03 .174523181743E-03 .185498829289E-03 .197165586729E-03 .209566610214E-03 .222747693882E-03 .236757424615E-03 .251647345196E-03 .267472126248E-03 .284289747356E-03 .302161687772E-03 .321153127121E-03 .341333156524E-03 .362775000574E-03 .385556250580E-03 .409759109544E-03 .435470649273E-03 .462783080092E-03 .491794033575E-03 .522606858723E-03 .555330932016E-03 .590081981728E-03 .626982426910E-03 .666161731388E-03 .707756773134E-03 .751912229301E-03 .798780977198E-03 .848524511421E-03 .901313377307E-03 .957327620827E-03 .101675725493E-02 .107980274230E-02 .114667549439E-02 .121759838647E-02 .129280628832E-02 .137254661005E-02 .145707986245E-02 .154668023097E-02 .164163616234E-02 .174225096268E-02 .184884340553E-02 .196174834820E-02 .208131735448E-02 .220791932124E-02 .234194110664E-02 .248378815657E-02 .263388512634E-02 .279267649348E-02 .296062715762E-02 .313822302260E-02 .332597155540E-02 .352440231616E-02 .373406745266E-02 .395554215213E-02 .418942504235E-02 .443633853364E-02 .469692909190E-02 .497186743276E-02 .526184862531E-02 .556759209336E-02 .588984150111E-02 .622936450893E-02 .658695238403E-02 .696341944966E-02 .735960235529E-02 .777635914904E-02 .821456813257E-02 .867512647734E-02 .915894857990E-02 .966696413291E-02 .102001158871E-01 .107593570788E-01 .113456484957E-01 .119599551538E-01 .126032425565E-01 .132764725070E-01 .139805984431E-01 .147165602654E-01 .154852786283E-01 .162876486626E-01 .171245331010E-01 .179967547769E-01 .189050884690E-01 .198502520658E-01 .208328970247E-01 .218535981063E-01 .229128423648E-01 .240110173799E-01 .251483987223E-01 .263251366479E-01 .275412420228E-01 .287965714890E-01 .300908118884E-01 .314234639713E-01 .327938254270E-01 .342009732850E-01 .356437457489E-01 .371207235407E-01 .386302108486E-01 .401702159939E-01 .417384319500E-01 .433322168745E-01 .449485748375E-01 .465841369537E-01 .482351431464E-01 .498974247810E-01 .515663883946E-01 .532370007201E-01 .549037751275E-01 .565607595114E-01 .582015255307E-01 .598191590110E-01 .614062512973E-01 .629548914625E-01 .644566595750E-01 .659026216872E-01 .672833277452E-01 .685888140910E-01 .698086124980E-01 .709317676001E-01 .719468640724E-01 .728420640867E-01 .736051545543E-01 .742236029909E-01 .746846206661E-01 .749752321096E-01 .750823506768E-01 .749928603796E-01 .746937043850E-01 .741719804847E-01 .734150436530E-01 .724106155391E-01 .711469006156E-01 .696127086017E-01 .677975827345E-01 .656919334608E-01 .632871770740E-01 .605758787973E-01 .575518997113E-01 .542105468504E-01 .505487256281E-01 .465650936060E-01 .422602144060E-01 .376367103648E-01 .326994122532E-01 .274555041669E-01 .219146614152E-01 .160891790583E-01 .999408860751E-02 .364726040768E-02 -.293051059740E-02 -.971543764479E-02 -.166806948545E-01 -.237963906316E-01 -.310295621713E-01 -.383441917768E-01 -.457012473226E-01 -.530587528409E-01 -.603719012825E-01 -.675932291427E-01 -.746728773988E-01 -.815589525467E-01 -.881979522659E-01 -.945351131748E-01 -.100514413752E+00 -.106077985819E+00 -.111165047435E+00 -.115711061035E+00 -.119648004416E+00 -.122905851825E+00 -.125414314113E+00 -.127103925830E+00 -.127906418352E+00 -.127754776359E+00 -.126583271698E+00 -.124327561700E+00 -.120924831355E+00 -.116313925433E+00 -.110435413748E+00 -.103231542826E+00 -.946460426158E-01 -.846237709970E-01 -.731101884003E-01 -.600506584970E-01 -.453895702352E-01 -.290692728212E-01 -.110288095455E-01 .879757045650E-02 .304821478745E-01 .541057508639E-01 .797601174963E-01 .107550657366E+00 .137599690026E+00 .170050247375E+00 .205070542481E+00 .242859225142E+00 .283651558786E+00 .327726670239E+00 .375416048140E+00 .427113498521E+00 .483286805664E+00 .544491498986E+00 .611387133772E+00 .684756682714E+00 pseudo wavefunction .308215180970E-12 .339270654052E-12 .373455247522E-12 .411084248622E-12 .452504712636E-12 .498098663817E-12 .548286618823E-12 .603531465176E-12 .664342730509E-12 .731281281985E-12 .804964499215E-12 .886071968399E-12 .975351750209E-12 .107362727920E-11 .118180495844E-11 .130088251930E-11 .143195822363E-11 .157624099313E-11 .173506155929E-11 .190988473688E-11 .210232293402E-11 .231415102356E-11 .254732271286E-11 .280398856302E-11 .308651582364E-11 .339751026617E-11 .373984021714E-11 .411666301296E-11 .453145412030E-11 .498803919056E-11 .549062934420E-11 .604386001018E-11 .665283367894E-11 .732316696305E-11 .806104239963E-11 .887326547245E-11 .976732737939E-11 .107514741243E-10 .118347825707E-10 .130272441582E-10 .143398570545E-10 .157847275921E-10 .173751819262E-10 .191258889428E-10 .210529955509E-10 .231742756066E-10 .255092938431E-10 .280795863171E-10 .309088590383E-10 .340232066109E-10 .374513529068E-10 .412249159876E-10 .453786997204E-10 .499510147769E-10 .549840319750E-10 .605241712235E-10 .666225296568E-10 .733353529069E-10 .807245538613E-10 .888582836899E-10 .978115604085E-10 .107666960775E-09 .118515381899E-09 .130456879597E-09 .143601591208E-09 .158070751404E-09 .173997810338E-09 .191529664472E-09 .210828011407E-09 .232070841232E-09 .255454078140E-09 .281193387447E-09 .309526164687E-09 .340713725126E-09 .375043713887E-09 .412832758921E-09 .454429391281E-09 .500217259646E-09 .550618668730E-09 .606098474224E-09 .667168370182E-09 .734391608400E-09 .808388193312E-09 .889840600320E-09 .979500070293E-09 .107819353829E-08 .118683126041E-08 .130641520911E-08 .143804831446E-08 .158294463644E-08 .174244056229E-08 .191800713202E-08 .211126360583E-08 .232399239857E-08 .255815551897E-08 .281591266526E-08 .309964114401E-08 .341195779608E-08 .375574313166E-08 .413416789716E-08 .455072231893E-08 .500924829350E-08 .551397482120E-08 .606955701008E-08 .668111900963E-08 .735430127050E-08 .809531256595E-08 .891098725480E-08 .980884831404E-08 .107971767224E-07 .118850878349E-07 .130826154524E-07 .144008043619E-07 .158518122005E-07 .174490215837E-07 .192071635300E-07 .211424533220E-07 .232727400561E-07 .256176712604E-07 .281988740978E-07 .310401548269E-07 .341677183595E-07 .376104099388E-07 .413999811679E-07 .455713828417E-07 .501630872825E-07 .552174431508E-07 .607810660057E-07 .669052682132E-07 .736465321696E-07 .810670312014E-07 .892352029465E-07 .982263805033E-07 .108123487167E-06 .119017801159E-06 .131009797401E-06 .144210074098E-06 .158740372664E-06 .174734700405E-06 .192340566308E-06 .211720341319E-06 .233052755666E-06 .256534547017E-06 .282382274681E-06 .310834316562E-06 .342153067278E-06 .376627357719E-06 .414575118326E-06 .456346310654E-06 .502326154232E-06 .552938678456E-06 .608650632264E-06 .669975787595E-06 .737479676312E-06 .811784804229E-06 .893576390271E-06 .983608683656E-06 .108271191729E-05 .119179996143E-05 .131187874809E-05 .144405554382E-05 .158954915623E-05 .174970116822E-05 .192598830340E-05 .212003603652E-05 .233363357413E-05 .256875034354E-05 .282755414156E-05 .311243111022E-05 .342600772317E-05 .377117498499E-05 .415111506596E-05 .456933061725E-05 .502967703597E-05 .553639797664E-05 .609416443544E-05 .670811776626E-05 .738391702359E-05 .812779106709E-05 .894659590589E-05 .984787780903E-05 .108399427608E-04 .119319328981E-04 .131339106300E-04 .144569512107E-04 .159132446140E-04 .175162076404E-04 .192806072847E-04 .212226964901E-04 .233603635317E-04 .257132963917E-04 .283031636286E-04 .311538133888E-04 .342914923758E-04 .377450867705E-04 .415463872955E-04 .457303808332E-04 .503355712469E-04 .554043323157E-04 .609832959824E-04 .671237794304E-04 .738822548493E-04 .813208661347E-04 .895079971778E-04 .985188968659E-04 .108436366408E-03 .119351515157E-03 .131364591699E-03 .144585897632E-03 .159136792198E-03 .175150796702E-03 .192774808522E-03 .212170435469E-03 .233515462281E-03 .257005462152E-03 .282855567459E-03 .311302415163E-03 .342606283845E-03 .377053440931E-03 .414958720398E-03 .456668353137E-03 .502563074234E-03 .553061533620E-03 .608624039015E-03 .669756662662E-03 .737015746245E-03 .811012841399E-03 .892420126583E-03 .981976344626E-03 .108049330910E-02 .118886303177E-02 .130806552792E-02 .143917736069E-02 .158338099118E-02 .174197500576E-02 .191638529801E-02 .210817728874E-02 .231906927337E-02 .255094699275E-02 .280587953015E-02 .308613664393E-02 .339420765259E-02 .373282199577E-02 .410497160208E-02 .451393520114E-02 .496330472404E-02 .545701394213E-02 .599936949952E-02 .659508449864E-02 .724931480099E-02 .796769820639E-02 .875639667221E-02 .962214173044E-02 .105722832520E-01 .116148416959E-01 .127585639636E-01 .140129829536E-01 .153884808818E-01 .168963563909E-01 .185488954199E-01 .203594457431E-01 .223424950068E-01 .245137519947E-01 .268902307398E-01 .294903369592E-01 .323339561224E-01 .354425422698E-01 .388392064698E-01 .425488035347E-01 .465980153095E-01 .510154284940E-01 .558316045536E-01 .610791388197E-01 .667927053639E-01 .730090836619E-01 .797671624276E-01 .871079153117E-01 .950743424149E-01 .103711370777E+00 .113065706183E+00 .123185627786E+00 .134120716237E+00 .145921505215E+00 .158639045592E+00 .172324370929E+00 .187027852736E+00 .202798433942E+00 .219682729552E+00 .237723984558E+00 .256960881007E+00 .277426188993E+00 .299145260323E+00 .322134369075E+00 .346398910402E+00 .371931478107E+00 .398709852852E+00 .426694946774E+00 .455828766779E+00 .486032478024E+00 .517204670910E+00 .549219958940E+00 .581928060308E+00 .615153541858E+00 .648696428322E+00 .682333899850E+00 .715823313336E+00 .748906783328E+00 .781317540492E+00 .812788242822E+00 .843061338574E+00 .871901461305E+00 .899109666732E+00 .924539089362E+00 .948111296979E+00 .969832249925E+00 .989806333540E+00 .100824644031E+01 .102547756241E+01 .104193086434E+01 .105812481405E+01 .107462976221E+01 .109201251081E+01 .111075806949E+01 .113116715257E+01 .115327159131E+01 ae wavefunction .262996587103E-10 .288266754838E-10 .315671211892E-10 .345413809705E-10 .377716094877E-10 .412819006448E-10 .450984724066E-10 .492498685192E-10 .537671783807E-10 .586842770234E-10 .640380871596E-10 .698688653347E-10 .762205145709E-10 .831409258888E-10 .906823517623E-10 .989018142873E-10 .107861551569E-09 .117629505822E-09 .128279857419E-09 .139893609324E-09 .152559225609E-09 .166373332088E-09 .181441481000E-09 .197878989674E-09 .215811857885E-09 .235377772405E-09 .256727207097E-09 .280024627545E-09 .305449810447E-09 .333199288773E-09 .363487934996E-09 .396550695425E-09 .432644490662E-09 .472050297938E-09 .515075433159E-09 .562056051953E-09 .613359891001E-09 .669389273005E-09 .730584400929E-09 .797426969665E-09 .870444126046E-09 .950212811141E-09 .103736452216E-08 .113259053488E-08 .123664763160E-08 .135036438396E-08 .147464804512E-08 .161049211053E-08 .175898461316E-08 .192131722485E-08 .209879524301E-08 .229284854918E-08 .250504363538E-08 .273709680225E-08 .299088864483E-08 .326847995204E-08 .357212915971E-08 .390431150622E-08 .426774006635E-08 .466538883805E-08 .510051809036E-08 .557670219727E-08 .609786019279E-08 .666828932765E-08 .729270191280E-08 .797626577943E-08 .872464871278E-08 .954406724505E-08 .104413402465E-07 .114239477786E-07 .125000957371E-07 .136787868488E-07 .149698986520E-07 .163842691542E-07 .179337909136E-07 .196315143850E-07 .214917614451E-07 .235302500897E-07 .257642314230E-07 .282126401330E-07 .308962597997E-07 .338379044889E-07 .370626182422E-07 .405978942286E-07 .444739154940E-07 .487238194411E-07 .533839883752E-07 .584943686934E-07 .640988215240E-07 .702455079302E-07 .769873120763E-07 .843823060867E-07 .924942607152E-07 .101393206320E-06 .111156049091E-06 .121867247979E-06 .133619558279E-06 .146514848382E-06 .160664996975E-06 .176192878468E-06 .193233445379E-06 .211934917151E-06 .232460085845E-06 .254987750152E-06 .279714290235E-06 .306855397250E-06 .336647972632E-06 .369352213656E-06 .405253903589E-06 .444666926236E-06 .487936026846E-06 .535439843306E-06 .587594233932E-06 .644855930661E-06 .707726549255E-06 .776756991106E-06 .852552274599E-06 .935776837608E-06 .102716035664E-05 .112750413252E-05 .123768809727E-05 .135867850195E-05 .149153635103E-05 .163742665495E-05 .179762857931E-05 .197354657666E-05 .216672259479E-05 .237884946426E-05 .261178557769E-05 .286757098356E-05 .314844502908E-05 .345686569882E-05 .379553080965E-05 .416740123735E-05 .457572636633E-05 .502407197145E-05 .551635076042E-05 .605685582556E-05 .665029727697E-05 .730184235341E-05 .801715933386E-05 .880246560262E-05 .966458025118E-05 .106109816356E-04 .116498703442E-04 .127902380721E-04 .140419429408E-04 .154157918500E-04 .169236305006E-04 .185784417794E-04 .203944532612E-04 .223872546442E-04 .245739260072E-04 .269731778496E-04 .296055039600E-04 .324933482418E-04 .356612867231E-04 .391362260743E-04 .429476200690E-04 .471277055381E-04 .517117594923E-04 .567383792206E-04 .622497873164E-04 .682921637354E-04 .749160071494E-04 .821765280360E-04 .901340761273E-04 .988546050359E-04 .108410177084E-03 .118879511581E-03 .130348580027E-03 .142911251961E-03 .156669995439E-03 .171736636381E-03 .188233181326E-03 .206292708420E-03 .226060331759E-03 .247694244563E-03 .271366846935E-03 .297265964349E-03 .325596163321E-03 .356580171095E-03 .390460406536E-03 .427500629763E-03 .467987718445E-03 .512233579042E-03 .560577201599E-03 .613386867089E-03 .671062516589E-03 .734038291915E-03 .802785257591E-03 .877814314305E-03 .959679314186E-03 .104898038841E-02 .114636749770E-02 .125254421645E-02 .136827176082E-02 .149437327152E-02 .163173836112E-02 .178132793603E-02 .194417930206E-02 .212141156247E-02 .231423131616E-02 .252393866277E-02 .275193352026E-02 .299972225907E-02 .326892465528E-02 .356128116314E-02 .387866050537E-02 .422306757667E-02 .459665165346E-02 .500171489936E-02 .544072115250E-02 .591630497670E-02 .643128095460E-02 .698865319574E-02 .759162502807E-02 .824360883603E-02 .894823600306E-02 .970936691125E-02 .105311009456E-01 .114177864459E-01 .123740305456E-01 .134047088329E-01 .145149747668E-01 .157102687792E-01 .169963269844E-01 .183791894094E-01 .198652076338E-01 .214610516847E-01 .231737159715E-01 .250105239513E-01 .269791311099E-01 .290875257448E-01 .313440269766E-01 .337572794466E-01 .363362443047E-01 .390901863493E-01 .420286575192E-01 .451614772740E-01 .484987106313E-01 .520506446376E-01 .558277637735E-01 .598407242331E-01 .641003264522E-01 .686174848967E-01 .734031941629E-01 .784684907703E-01 .838244104333E-01 .894819408788E-01 .954519703473E-01 .101745231897E+00 .108372243463E+00 .115343243582E+00 .122668122618E+00 .130356349368E+00 .138416893023E+00 .146858140566E+00 .155687809887E+00 .164912859052E+00 .174539392437E+00 .184572564659E+00 .195016483540E+00 .205874113617E+00 .217147182072E+00 .228836089116E+00 .240939825177E+00 .253455897168E+00 .266380266026E+00 .279707297181E+00 .293429724785E+00 .307538629395E+00 .322023427323E+00 .336871868809E+00 .352070041931E+00 .367602381393E+00 .383451687529E+00 .399599173342E+00 .416024577976E+00 .432706413744E+00 .449622444027E+00 .466750497101E+00 .484069644753E+00 .501561511001E+00 .519210961518E+00 .537004898783E+00 .554928131952E+00 .572957117875E+00 .591055096515E+00 .609172737884E+00 .627254455699E+00 .645245666498E+00 .663096729665E+00 .680763471738E+00 .698206324773E+00 .715389550091E+00 .732281017535E+00 .748852509283E+00 .765080367278E+00 .780946284840E+00 .796438075966E+00 .811550314399E+00 .826284793940E+00 .840650808875E+00 .854665279671E+00 .868352761161E+00 .881745372789E+00 .894882687093E+00 .907811588348E+00 .920585985474E+00 .933266828666E+00 .945922202102E+00 .958627443541E+00 .971465295248E+00 .984526169043E+00 .997908459593E+00 .101171887399E+01 .102607274182E+01 .104109422414E+01 .105691636043E+01 .107368088977E+01 .109153781647E+01 .111064471920E+01 .113116592185E+01 .115327159131E+01 End of Dataset avogadro-1.1.1/testfiles/VASP-DOS/DOSCAR0000644000175000001440000054001512250371054016625 0ustar marcususers 8 8 0 0 0.1736133E+02 0.5867953E-09 0.3519262E-09 0.6725659E-09 0.5000000E-15 1.000000000000000E-004 CAR unknown system 11.07606121 -30.08801404 5000 6.27349634 1.00000000 -30.088 0.0000E+00 0.0000E+00 -30.080 0.0000E+00 0.0000E+00 -30.072 0.0000E+00 0.0000E+00 -30.063 0.0000E+00 0.0000E+00 -30.055 0.0000E+00 0.0000E+00 -30.047 0.0000E+00 0.0000E+00 -30.039 0.0000E+00 0.0000E+00 -30.030 0.0000E+00 0.0000E+00 -30.022 0.0000E+00 0.0000E+00 -30.014 0.0000E+00 0.0000E+00 -30.006 0.0000E+00 0.0000E+00 -29.997 0.0000E+00 0.0000E+00 -29.989 0.0000E+00 0.0000E+00 -29.981 0.0000E+00 0.0000E+00 -29.973 0.0000E+00 0.0000E+00 -29.964 0.0000E+00 0.0000E+00 -29.956 0.0000E+00 0.0000E+00 -29.948 0.0000E+00 0.0000E+00 -29.940 0.0000E+00 0.0000E+00 -29.932 0.0000E+00 0.0000E+00 -29.923 0.0000E+00 0.0000E+00 -29.915 0.0000E+00 0.0000E+00 -29.907 0.0000E+00 0.0000E+00 -29.899 0.0000E+00 0.0000E+00 -29.890 0.0000E+00 0.0000E+00 -29.882 0.0000E+00 0.0000E+00 -29.874 0.0000E+00 0.0000E+00 -29.866 0.0000E+00 0.0000E+00 -29.857 0.0000E+00 0.0000E+00 -29.849 0.0000E+00 0.0000E+00 -29.841 0.0000E+00 0.0000E+00 -29.833 0.0000E+00 0.0000E+00 -29.825 0.0000E+00 0.0000E+00 -29.816 0.0000E+00 0.0000E+00 -29.808 0.0000E+00 0.0000E+00 -29.800 0.0000E+00 0.0000E+00 -29.792 0.0000E+00 0.0000E+00 -29.783 0.0000E+00 0.0000E+00 -29.775 0.0000E+00 0.0000E+00 -29.767 0.0000E+00 0.0000E+00 -29.759 0.0000E+00 0.0000E+00 -29.750 0.0000E+00 0.0000E+00 -29.742 0.0000E+00 0.0000E+00 -29.734 0.0000E+00 0.0000E+00 -29.726 0.0000E+00 0.0000E+00 -29.717 0.0000E+00 0.0000E+00 -29.709 0.0000E+00 0.0000E+00 -29.701 0.0000E+00 0.0000E+00 -29.693 0.0000E+00 0.0000E+00 -29.685 0.0000E+00 0.0000E+00 -29.676 0.0000E+00 0.0000E+00 -29.668 0.0000E+00 0.0000E+00 -29.660 0.0000E+00 0.0000E+00 -29.652 0.0000E+00 0.0000E+00 -29.643 0.0000E+00 0.0000E+00 -29.635 0.0000E+00 0.0000E+00 -29.627 0.0000E+00 0.0000E+00 -29.619 0.0000E+00 0.0000E+00 -29.610 0.0000E+00 0.0000E+00 -29.602 0.0000E+00 0.0000E+00 -29.594 0.0000E+00 0.0000E+00 -29.586 0.0000E+00 0.0000E+00 -29.577 0.0000E+00 0.0000E+00 -29.569 0.0000E+00 0.0000E+00 -29.561 0.0000E+00 0.0000E+00 -29.553 0.0000E+00 0.0000E+00 -29.545 0.0000E+00 0.0000E+00 -29.536 0.0000E+00 0.0000E+00 -29.528 0.0000E+00 0.0000E+00 -29.520 0.0000E+00 0.0000E+00 -29.512 0.0000E+00 0.0000E+00 -29.503 0.0000E+00 0.0000E+00 -29.495 0.0000E+00 0.0000E+00 -29.487 0.0000E+00 0.0000E+00 -29.479 0.0000E+00 0.0000E+00 -29.470 0.0000E+00 0.0000E+00 -29.462 0.0000E+00 0.0000E+00 -29.454 0.0000E+00 0.0000E+00 -29.446 0.0000E+00 0.0000E+00 -29.437 0.0000E+00 0.0000E+00 -29.429 0.0000E+00 0.0000E+00 -29.421 0.0000E+00 0.0000E+00 -29.413 0.0000E+00 0.0000E+00 -29.405 0.0000E+00 0.0000E+00 -29.396 0.0000E+00 0.0000E+00 -29.388 0.0000E+00 0.0000E+00 -29.380 0.0000E+00 0.0000E+00 -29.372 0.0000E+00 0.0000E+00 -29.363 0.0000E+00 0.0000E+00 -29.355 0.0000E+00 0.0000E+00 -29.347 0.0000E+00 0.0000E+00 -29.339 0.0000E+00 0.0000E+00 -29.330 0.0000E+00 0.0000E+00 -29.322 0.0000E+00 0.0000E+00 -29.314 0.0000E+00 0.0000E+00 -29.306 0.0000E+00 0.0000E+00 -29.298 0.0000E+00 0.0000E+00 -29.289 0.0000E+00 0.0000E+00 -29.281 0.0000E+00 0.0000E+00 -29.273 0.0000E+00 0.0000E+00 -29.265 0.0000E+00 0.0000E+00 -29.256 0.0000E+00 0.0000E+00 -29.248 0.0000E+00 0.0000E+00 -29.240 0.0000E+00 0.0000E+00 -29.232 0.0000E+00 0.0000E+00 -29.223 0.0000E+00 0.0000E+00 -29.215 0.0000E+00 0.0000E+00 -29.207 0.0000E+00 0.0000E+00 -29.199 0.0000E+00 0.0000E+00 -29.190 0.0000E+00 0.0000E+00 -29.182 0.0000E+00 0.0000E+00 -29.174 0.0000E+00 0.0000E+00 -29.166 0.0000E+00 0.0000E+00 -29.158 0.0000E+00 0.0000E+00 -29.149 0.0000E+00 0.0000E+00 -29.141 0.0000E+00 0.0000E+00 -29.133 0.0000E+00 0.0000E+00 -29.125 0.0000E+00 0.0000E+00 -29.116 0.0000E+00 0.0000E+00 -29.108 0.0000E+00 0.0000E+00 -29.100 0.0000E+00 0.0000E+00 -29.092 0.0000E+00 0.0000E+00 -29.083 0.0000E+00 0.0000E+00 -29.075 0.0000E+00 0.0000E+00 -29.067 0.0000E+00 0.0000E+00 -29.059 0.0000E+00 0.0000E+00 -29.050 0.0000E+00 0.0000E+00 -29.042 0.0000E+00 0.0000E+00 -29.034 0.0000E+00 0.0000E+00 -29.026 0.0000E+00 0.0000E+00 -29.018 0.0000E+00 0.0000E+00 -29.009 0.0000E+00 0.0000E+00 -29.001 0.0000E+00 0.0000E+00 -28.993 0.0000E+00 0.0000E+00 -28.985 0.0000E+00 0.0000E+00 -28.976 0.0000E+00 0.0000E+00 -28.968 0.0000E+00 0.0000E+00 -28.960 0.0000E+00 0.0000E+00 -28.952 0.0000E+00 0.0000E+00 -28.943 0.0000E+00 0.0000E+00 -28.935 0.0000E+00 0.0000E+00 -28.927 0.0000E+00 0.0000E+00 -28.919 0.0000E+00 0.0000E+00 -28.910 0.0000E+00 0.0000E+00 -28.902 0.0000E+00 0.0000E+00 -28.894 0.0000E+00 0.0000E+00 -28.886 0.0000E+00 0.0000E+00 -28.878 0.0000E+00 0.0000E+00 -28.869 0.0000E+00 0.0000E+00 -28.861 0.0000E+00 0.0000E+00 -28.853 0.0000E+00 0.0000E+00 -28.845 0.0000E+00 0.0000E+00 -28.836 0.0000E+00 0.0000E+00 -28.828 0.0000E+00 0.0000E+00 -28.820 0.0000E+00 0.0000E+00 -28.812 0.0000E+00 0.0000E+00 -28.803 0.0000E+00 0.0000E+00 -28.795 0.0000E+00 0.0000E+00 -28.787 0.0000E+00 0.0000E+00 -28.779 0.0000E+00 0.0000E+00 -28.771 0.0000E+00 0.0000E+00 -28.762 0.0000E+00 0.0000E+00 -28.754 0.0000E+00 0.0000E+00 -28.746 0.0000E+00 0.0000E+00 -28.738 0.0000E+00 0.0000E+00 -28.729 0.0000E+00 0.0000E+00 -28.721 0.0000E+00 0.0000E+00 -28.713 0.0000E+00 0.0000E+00 -28.705 0.0000E+00 0.0000E+00 -28.696 0.0000E+00 0.0000E+00 -28.688 0.0000E+00 0.0000E+00 -28.680 0.0000E+00 0.0000E+00 -28.672 0.0000E+00 0.0000E+00 -28.663 0.0000E+00 0.0000E+00 -28.655 0.0000E+00 0.0000E+00 -28.647 0.0000E+00 0.0000E+00 -28.639 0.0000E+00 0.0000E+00 -28.631 0.0000E+00 0.0000E+00 -28.622 0.0000E+00 0.0000E+00 -28.614 0.0000E+00 0.0000E+00 -28.606 0.0000E+00 0.0000E+00 -28.598 0.0000E+00 0.0000E+00 -28.589 0.0000E+00 0.0000E+00 -28.581 0.0000E+00 0.0000E+00 -28.573 0.0000E+00 0.0000E+00 -28.565 0.0000E+00 0.0000E+00 -28.556 0.0000E+00 0.0000E+00 -28.548 0.0000E+00 0.0000E+00 -28.540 0.0000E+00 0.0000E+00 -28.532 0.0000E+00 0.0000E+00 -28.523 0.0000E+00 0.0000E+00 -28.515 0.0000E+00 0.0000E+00 -28.507 0.0000E+00 0.0000E+00 -28.499 0.0000E+00 0.0000E+00 -28.491 0.0000E+00 0.0000E+00 -28.482 0.0000E+00 0.0000E+00 -28.474 0.0000E+00 0.0000E+00 -28.466 0.0000E+00 0.0000E+00 -28.458 0.0000E+00 0.0000E+00 -28.449 0.0000E+00 0.0000E+00 -28.441 0.0000E+00 0.0000E+00 -28.433 0.0000E+00 0.0000E+00 -28.425 0.0000E+00 0.0000E+00 -28.416 0.0000E+00 0.0000E+00 -28.408 0.0000E+00 0.0000E+00 -28.400 0.0000E+00 0.0000E+00 -28.392 0.0000E+00 0.0000E+00 -28.383 0.0000E+00 0.0000E+00 -28.375 0.0000E+00 0.0000E+00 -28.367 0.0000E+00 0.0000E+00 -28.359 0.0000E+00 0.0000E+00 -28.351 0.0000E+00 0.0000E+00 -28.342 0.0000E+00 0.0000E+00 -28.334 0.0000E+00 0.0000E+00 -28.326 0.0000E+00 0.0000E+00 -28.318 0.0000E+00 0.0000E+00 -28.309 0.0000E+00 0.0000E+00 -28.301 0.0000E+00 0.0000E+00 -28.293 0.0000E+00 0.0000E+00 -28.285 0.0000E+00 0.0000E+00 -28.276 0.0000E+00 0.0000E+00 -28.268 0.0000E+00 0.0000E+00 -28.260 0.0000E+00 0.0000E+00 -28.252 0.0000E+00 0.0000E+00 -28.243 0.0000E+00 0.0000E+00 -28.235 0.0000E+00 0.0000E+00 -28.227 0.0000E+00 0.0000E+00 -28.219 0.0000E+00 0.0000E+00 -28.211 0.0000E+00 0.0000E+00 -28.202 0.0000E+00 0.0000E+00 -28.194 0.0000E+00 0.0000E+00 -28.186 0.0000E+00 0.0000E+00 -28.178 0.0000E+00 0.0000E+00 -28.169 0.0000E+00 0.0000E+00 -28.161 0.0000E+00 0.0000E+00 -28.153 0.0000E+00 0.0000E+00 -28.145 0.0000E+00 0.0000E+00 -28.136 0.0000E+00 0.0000E+00 -28.128 0.0000E+00 0.0000E+00 -28.120 0.0000E+00 0.0000E+00 -28.112 0.0000E+00 0.0000E+00 -28.104 0.0000E+00 0.0000E+00 -28.095 0.0000E+00 0.0000E+00 -28.087 0.1010E-02 0.3279E-06 -28.079 0.9020E-01 0.2769E-03 -28.071 0.3236E+00 0.1882E-02 -28.062 0.6441E+00 0.5893E-02 -28.054 0.8457E+00 0.1213E-01 -28.046 0.9064E+00 0.1943E-01 -28.038 0.9436E+00 0.2701E-01 -28.029 0.1032E+01 0.3511E-01 -28.021 0.1159E+01 0.4411E-01 -28.013 0.1294E+01 0.5421E-01 -28.005 0.1423E+01 0.6541E-01 -27.996 0.1523E+01 0.7757E-01 -27.988 0.1574E+01 0.9035E-01 -27.980 0.1607E+01 0.1034E+00 -27.972 0.1660E+01 0.1169E+00 -27.964 0.1731E+01 0.1308E+00 -27.955 0.1806E+01 0.1454E+00 -27.947 0.1880E+01 0.1606E+00 -27.939 0.1953E+01 0.1764E+00 -27.931 0.2026E+01 0.1927E+00 -27.922 0.2102E+01 0.2097E+00 -27.914 0.2179E+01 0.2273E+00 -27.906 0.2256E+01 0.2456E+00 -27.898 0.2393E+01 0.2646E+00 -27.889 0.2661E+01 0.2854E+00 -27.881 0.2861E+01 0.3083E+00 -27.873 0.2786E+01 0.3315E+00 -27.865 0.2719E+01 0.3542E+00 -27.856 0.2748E+01 0.3767E+00 -27.848 0.2784E+01 0.3994E+00 -27.840 0.2817E+01 0.4225E+00 -27.832 0.2850E+01 0.4458E+00 -27.824 0.2852E+01 0.4693E+00 -27.815 0.2833E+01 0.4927E+00 -27.807 0.2841E+01 0.5161E+00 -27.799 0.3035E+01 0.5401E+00 -27.791 0.3240E+01 0.5660E+00 -27.782 0.3265E+01 0.5931E+00 -27.774 0.3165E+01 0.6195E+00 -27.766 0.3114E+01 0.6453E+00 -27.758 0.3393E+01 0.6720E+00 -27.749 0.3679E+01 0.7012E+00 -27.741 0.3649E+01 0.7314E+00 -27.733 0.3582E+01 0.7612E+00 -27.725 0.3583E+01 0.7908E+00 -27.716 0.3588E+01 0.8203E+00 -27.708 0.3637E+01 0.8500E+00 -27.700 0.3684E+01 0.8802E+00 -27.692 0.3688E+01 0.9106E+00 -27.684 0.3681E+01 0.9409E+00 -27.675 0.3709E+01 0.9713E+00 -27.667 0.3744E+01 0.1002E+01 -27.659 0.3891E+01 0.1033E+01 -27.651 0.4210E+01 0.1066E+01 -27.642 0.4429E+01 0.1102E+01 -27.634 0.4642E+01 0.1140E+01 -27.626 0.4593E+01 0.1178E+01 -27.618 0.4491E+01 0.1215E+01 -27.609 0.4603E+01 0.1253E+01 -27.601 0.4726E+01 0.1291E+01 -27.593 0.4844E+01 0.1330E+01 -27.585 0.4939E+01 0.1371E+01 -27.577 0.4996E+01 0.1412E+01 -27.568 0.5097E+01 0.1453E+01 -27.560 0.5199E+01 0.1496E+01 -27.552 0.5302E+01 0.1539E+01 -27.544 0.5406E+01 0.1583E+01 -27.535 0.5511E+01 0.1628E+01 -27.527 0.5901E+01 0.1674E+01 -27.519 0.5874E+01 0.1722E+01 -27.511 0.5650E+01 0.1770E+01 -27.502 0.6058E+01 0.1818E+01 -27.494 0.6192E+01 0.1869E+01 -27.486 0.6067E+01 0.1919E+01 -27.478 0.6076E+01 0.1969E+01 -27.469 0.6099E+01 0.2019E+01 -27.461 0.6131E+01 0.2069E+01 -27.453 0.6198E+01 0.2120E+01 -27.445 0.6234E+01 0.2171E+01 -27.437 0.6338E+01 0.2222E+01 -27.428 0.6466E+01 0.2275E+01 -27.420 0.6625E+01 0.2329E+01 -27.412 0.6799E+01 0.2384E+01 -27.404 0.6988E+01 0.2441E+01 -27.395 0.7640E+01 0.2503E+01 -27.387 0.7660E+01 0.2566E+01 -27.379 0.7816E+01 0.2630E+01 -27.371 0.7988E+01 0.2695E+01 -27.362 0.8133E+01 0.2761E+01 -27.354 0.8180E+01 0.2828E+01 -27.346 0.8099E+01 0.2895E+01 -27.338 0.8225E+01 0.2962E+01 -27.329 0.8531E+01 0.3031E+01 -27.321 0.8837E+01 0.3103E+01 -27.313 0.9047E+01 0.3176E+01 -27.305 0.9220E+01 0.3252E+01 -27.297 0.9389E+01 0.3328E+01 -27.288 0.9495E+01 0.3406E+01 -27.280 0.9598E+01 0.3485E+01 -27.272 0.9755E+01 0.3564E+01 -27.264 0.9916E+01 0.3645E+01 -27.255 0.1027E+02 0.3728E+01 -27.247 0.1065E+02 0.3814E+01 -27.239 0.1107E+02 0.3904E+01 -27.231 0.1163E+02 0.3997E+01 -27.222 0.1159E+02 0.4093E+01 -27.214 0.1142E+02 0.4188E+01 -27.206 0.1134E+02 0.4282E+01 -27.198 0.1143E+02 0.4375E+01 -27.189 0.1178E+02 0.4471E+01 -27.181 0.1220E+02 0.4569E+01 -27.173 0.1272E+02 0.4672E+01 -27.165 0.1313E+02 0.4779E+01 -27.157 0.1298E+02 0.4886E+01 -27.148 0.1279E+02 0.4993E+01 -27.140 0.1239E+02 0.5097E+01 -27.132 0.1198E+02 0.5197E+01 -27.124 0.1058E+02 0.5290E+01 -27.115 0.1025E+02 0.5375E+01 -27.107 0.1014E+02 0.5458E+01 -27.099 0.1043E+02 0.5543E+01 -27.091 0.1089E+02 0.5631E+01 -27.082 0.1096E+02 0.5721E+01 -27.074 0.1248E+02 0.5830E+01 -27.066 0.1293E+02 0.5934E+01 -27.058 0.1333E+02 0.6043E+01 -27.049 0.1367E+02 0.6154E+01 -27.041 0.1396E+02 0.6268E+01 -27.033 0.1398E+02 0.6383E+01 -27.025 0.1333E+02 0.6496E+01 -27.017 0.1284E+02 0.6603E+01 -27.008 0.1277E+02 0.6708E+01 -27.000 0.1309E+02 0.6815E+01 -26.992 0.1288E+02 0.6923E+01 -26.984 0.1254E+02 0.7027E+01 -26.975 0.1255E+02 0.7131E+01 -26.967 0.1251E+02 0.7234E+01 -26.959 0.1258E+02 0.7337E+01 -26.951 0.1262E+02 0.7441E+01 -26.942 0.1220E+02 0.7544E+01 -26.934 0.1014E+02 0.7637E+01 -26.926 0.8319E+01 0.7711E+01 -26.918 0.7875E+01 0.7778E+01 -26.910 0.7000E+01 0.7839E+01 -26.901 0.6303E+01 0.7894E+01 -26.893 0.4397E+01 0.7936E+01 -26.885 0.3013E+01 0.7967E+01 -26.877 0.2093E+01 0.7988E+01 -26.868 0.4824E+01 0.8008E+01 -26.860 0.6226E+01 0.8058E+01 -26.852 0.6369E+01 0.8110E+01 -26.844 0.6991E+01 0.8165E+01 -26.835 0.8112E+01 0.8226E+01 -26.827 0.1023E+02 0.8301E+01 -26.819 0.1250E+02 0.8395E+01 -26.811 0.1497E+02 0.8506E+01 -26.802 0.1566E+02 0.8630E+01 -26.794 0.1660E+02 0.8763E+01 -26.786 0.1903E+02 0.8908E+01 -26.778 0.2244E+02 0.9078E+01 -26.770 0.2578E+02 0.9275E+01 -26.761 0.2454E+02 0.9484E+01 -26.753 0.2186E+02 0.9676E+01 -26.745 0.1903E+02 0.9844E+01 -26.737 0.1738E+02 0.9993E+01 -26.728 0.1730E+02 0.1014E+02 -26.720 0.1525E+02 0.1027E+02 -26.712 0.1404E+02 0.1039E+02 -26.704 0.1474E+02 0.1051E+02 -26.695 0.1694E+02 0.1063E+02 -26.687 0.2029E+02 0.1079E+02 -26.679 0.2391E+02 0.1097E+02 -26.671 0.2728E+02 0.1117E+02 -26.662 0.2503E+02 0.1139E+02 -26.654 0.2359E+02 0.1159E+02 -26.646 0.2106E+02 0.1177E+02 -26.638 0.2012E+02 0.1194E+02 -26.630 0.1918E+02 0.1210E+02 -26.621 0.1839E+02 0.1226E+02 -26.613 0.1820E+02 0.1241E+02 -26.605 0.1857E+02 0.1256E+02 -26.597 0.1783E+02 0.1271E+02 -26.588 0.1616E+02 0.1285E+02 -26.580 0.1308E+02 0.1298E+02 -26.572 0.9293E+01 0.1306E+02 -26.564 0.8662E+01 0.1314E+02 -26.555 0.8226E+01 0.1321E+02 -26.547 0.7543E+01 0.1327E+02 -26.539 0.7063E+01 0.1333E+02 -26.531 0.6680E+01 0.1339E+02 -26.522 0.6386E+01 0.1344E+02 -26.514 0.6229E+01 0.1349E+02 -26.506 0.6231E+01 0.1355E+02 -26.498 0.6251E+01 0.1360E+02 -26.490 0.6307E+01 0.1365E+02 -26.481 0.6391E+01 0.1370E+02 -26.473 0.6509E+01 0.1375E+02 -26.465 0.6676E+01 0.1381E+02 -26.457 0.6898E+01 0.1386E+02 -26.448 0.7104E+01 0.1392E+02 -26.440 0.7279E+01 0.1398E+02 -26.432 0.7456E+01 0.1404E+02 -26.424 0.7620E+01 0.1410E+02 -26.415 0.7745E+01 0.1417E+02 -26.407 0.7731E+01 0.1423E+02 -26.399 0.7781E+01 0.1430E+02 -26.391 0.7841E+01 0.1436E+02 -26.383 0.7883E+01 0.1442E+02 -26.374 0.7911E+01 0.1449E+02 -26.366 0.7982E+01 0.1455E+02 -26.358 0.8039E+01 0.1462E+02 -26.350 0.8147E+01 0.1469E+02 -26.341 0.8201E+01 0.1475E+02 -26.333 0.8341E+01 0.1482E+02 -26.325 0.8477E+01 0.1489E+02 -26.317 0.8855E+01 0.1496E+02 -26.308 0.8870E+01 0.1504E+02 -26.300 0.8307E+01 0.1511E+02 -26.292 0.8373E+01 0.1518E+02 -26.284 0.8693E+01 0.1525E+02 -26.275 0.8980E+01 0.1532E+02 -26.267 0.9210E+01 0.1539E+02 -26.259 0.9446E+01 0.1547E+02 -26.251 0.9242E+01 0.1555E+02 -26.243 0.8539E+01 0.1562E+02 -26.234 0.7983E+01 0.1569E+02 -26.226 0.8491E+01 0.1576E+02 -26.218 0.7042E+01 0.1583E+02 -26.210 0.5083E+01 0.1588E+02 -26.201 0.4273E+01 0.1591E+02 -26.193 0.3881E+01 0.1595E+02 -26.185 0.3232E+01 0.1598E+02 -26.177 0.1341E+01 0.1600E+02 -26.168 0.0000E+00 0.1600E+02 -26.160 0.0000E+00 0.1600E+02 -26.152 0.0000E+00 0.1600E+02 -26.144 0.0000E+00 0.1600E+02 -26.135 0.0000E+00 0.1600E+02 -26.127 0.0000E+00 0.1600E+02 -26.119 0.0000E+00 0.1600E+02 -26.111 0.0000E+00 0.1600E+02 -26.103 0.0000E+00 0.1600E+02 -26.094 0.0000E+00 0.1600E+02 -26.086 0.0000E+00 0.1600E+02 -26.078 0.0000E+00 0.1600E+02 -26.070 0.0000E+00 0.1600E+02 -26.061 0.0000E+00 0.1600E+02 -26.053 0.0000E+00 0.1600E+02 -26.045 0.0000E+00 0.1600E+02 -26.037 0.0000E+00 0.1600E+02 -26.028 0.0000E+00 0.1600E+02 -26.020 0.0000E+00 0.1600E+02 -26.012 0.0000E+00 0.1600E+02 -26.004 0.0000E+00 0.1600E+02 -25.995 0.0000E+00 0.1600E+02 -25.987 0.0000E+00 0.1600E+02 -25.979 0.0000E+00 0.1600E+02 -25.971 0.0000E+00 0.1600E+02 -25.963 0.0000E+00 0.1600E+02 -25.954 0.0000E+00 0.1600E+02 -25.946 0.0000E+00 0.1600E+02 -25.938 0.0000E+00 0.1600E+02 -25.930 0.0000E+00 0.1600E+02 -25.921 0.0000E+00 0.1600E+02 -25.913 0.0000E+00 0.1600E+02 -25.905 0.0000E+00 0.1600E+02 -25.897 0.0000E+00 0.1600E+02 -25.888 0.0000E+00 0.1600E+02 -25.880 0.0000E+00 0.1600E+02 -25.872 0.0000E+00 0.1600E+02 -25.864 0.0000E+00 0.1600E+02 -25.856 0.0000E+00 0.1600E+02 -25.847 0.0000E+00 0.1600E+02 -25.839 0.0000E+00 0.1600E+02 -25.831 0.0000E+00 0.1600E+02 -25.823 0.0000E+00 0.1600E+02 -25.814 0.0000E+00 0.1600E+02 -25.806 0.0000E+00 0.1600E+02 -25.798 0.0000E+00 0.1600E+02 -25.790 0.0000E+00 0.1600E+02 -25.781 0.0000E+00 0.1600E+02 -25.773 0.0000E+00 0.1600E+02 -25.765 0.0000E+00 0.1600E+02 -25.757 0.0000E+00 0.1600E+02 -25.748 0.0000E+00 0.1600E+02 -25.740 0.0000E+00 0.1600E+02 -25.732 0.0000E+00 0.1600E+02 -25.724 0.0000E+00 0.1600E+02 -25.716 0.0000E+00 0.1600E+02 -25.707 0.0000E+00 0.1600E+02 -25.699 0.0000E+00 0.1600E+02 -25.691 0.0000E+00 0.1600E+02 -25.683 0.0000E+00 0.1600E+02 -25.674 0.0000E+00 0.1600E+02 -25.666 0.0000E+00 0.1600E+02 -25.658 0.0000E+00 0.1600E+02 -25.650 0.0000E+00 0.1600E+02 -25.641 0.0000E+00 0.1600E+02 -25.633 0.0000E+00 0.1600E+02 -25.625 0.0000E+00 0.1600E+02 -25.617 0.0000E+00 0.1600E+02 -25.608 0.0000E+00 0.1600E+02 -25.600 0.0000E+00 0.1600E+02 -25.592 0.0000E+00 0.1600E+02 -25.584 0.0000E+00 0.1600E+02 -25.576 0.0000E+00 0.1600E+02 -25.567 0.0000E+00 0.1600E+02 -25.559 0.0000E+00 0.1600E+02 -25.551 0.0000E+00 0.1600E+02 -25.543 0.0000E+00 0.1600E+02 -25.534 0.0000E+00 0.1600E+02 -25.526 0.0000E+00 0.1600E+02 -25.518 0.0000E+00 0.1600E+02 -25.510 0.0000E+00 0.1600E+02 -25.501 0.0000E+00 0.1600E+02 -25.493 0.0000E+00 0.1600E+02 -25.485 0.0000E+00 0.1600E+02 -25.477 0.0000E+00 0.1600E+02 -25.468 0.0000E+00 0.1600E+02 -25.460 0.0000E+00 0.1600E+02 -25.452 0.0000E+00 0.1600E+02 -25.444 0.0000E+00 0.1600E+02 -25.436 0.0000E+00 0.1600E+02 -25.427 0.0000E+00 0.1600E+02 -25.419 0.0000E+00 0.1600E+02 -25.411 0.0000E+00 0.1600E+02 -25.403 0.0000E+00 0.1600E+02 -25.394 0.0000E+00 0.1600E+02 -25.386 0.0000E+00 0.1600E+02 -25.378 0.0000E+00 0.1600E+02 -25.370 0.0000E+00 0.1600E+02 -25.361 0.0000E+00 0.1600E+02 -25.353 0.0000E+00 0.1600E+02 -25.345 0.0000E+00 0.1600E+02 -25.337 0.0000E+00 0.1600E+02 -25.328 0.0000E+00 0.1600E+02 -25.320 0.0000E+00 0.1600E+02 -25.312 0.0000E+00 0.1600E+02 -25.304 0.0000E+00 0.1600E+02 -25.296 0.0000E+00 0.1600E+02 -25.287 0.0000E+00 0.1600E+02 -25.279 0.0000E+00 0.1600E+02 -25.271 0.0000E+00 0.1600E+02 -25.263 0.0000E+00 0.1600E+02 -25.254 0.0000E+00 0.1600E+02 -25.246 0.0000E+00 0.1600E+02 -25.238 0.0000E+00 0.1600E+02 -25.230 0.0000E+00 0.1600E+02 -25.221 0.0000E+00 0.1600E+02 -25.213 0.0000E+00 0.1600E+02 -25.205 0.0000E+00 0.1600E+02 -25.197 0.0000E+00 0.1600E+02 -25.189 0.0000E+00 0.1600E+02 -25.180 0.0000E+00 0.1600E+02 -25.172 0.0000E+00 0.1600E+02 -25.164 0.0000E+00 0.1600E+02 -25.156 0.0000E+00 0.1600E+02 -25.147 0.0000E+00 0.1600E+02 -25.139 0.0000E+00 0.1600E+02 -25.131 0.0000E+00 0.1600E+02 -25.123 0.0000E+00 0.1600E+02 -25.114 0.0000E+00 0.1600E+02 -25.106 0.0000E+00 0.1600E+02 -25.098 0.0000E+00 0.1600E+02 -25.090 0.0000E+00 0.1600E+02 -25.081 0.0000E+00 0.1600E+02 -25.073 0.0000E+00 0.1600E+02 -25.065 0.0000E+00 0.1600E+02 -25.057 0.0000E+00 0.1600E+02 -25.049 0.0000E+00 0.1600E+02 -25.040 0.0000E+00 0.1600E+02 -25.032 0.0000E+00 0.1600E+02 -25.024 0.0000E+00 0.1600E+02 -25.016 0.0000E+00 0.1600E+02 -25.007 0.0000E+00 0.1600E+02 -24.999 0.0000E+00 0.1600E+02 -24.991 0.0000E+00 0.1600E+02 -24.983 0.0000E+00 0.1600E+02 -24.974 0.0000E+00 0.1600E+02 -24.966 0.0000E+00 0.1600E+02 -24.958 0.0000E+00 0.1600E+02 -24.950 0.0000E+00 0.1600E+02 -24.941 0.0000E+00 0.1600E+02 -24.933 0.0000E+00 0.1600E+02 -24.925 0.0000E+00 0.1600E+02 -24.917 0.0000E+00 0.1600E+02 -24.909 0.0000E+00 0.1600E+02 -24.900 0.0000E+00 0.1600E+02 -24.892 0.0000E+00 0.1600E+02 -24.884 0.0000E+00 0.1600E+02 -24.876 0.0000E+00 0.1600E+02 -24.867 0.0000E+00 0.1600E+02 -24.859 0.0000E+00 0.1600E+02 -24.851 0.0000E+00 0.1600E+02 -24.843 0.0000E+00 0.1600E+02 -24.834 0.0000E+00 0.1600E+02 -24.826 0.0000E+00 0.1600E+02 -24.818 0.0000E+00 0.1600E+02 -24.810 0.0000E+00 0.1600E+02 -24.801 0.0000E+00 0.1600E+02 -24.793 0.0000E+00 0.1600E+02 -24.785 0.0000E+00 0.1600E+02 -24.777 0.0000E+00 0.1600E+02 -24.769 0.0000E+00 0.1600E+02 -24.760 0.0000E+00 0.1600E+02 -24.752 0.0000E+00 0.1600E+02 -24.744 0.0000E+00 0.1600E+02 -24.736 0.0000E+00 0.1600E+02 -24.727 0.0000E+00 0.1600E+02 -24.719 0.0000E+00 0.1600E+02 -24.711 0.0000E+00 0.1600E+02 -24.703 0.0000E+00 0.1600E+02 -24.694 0.0000E+00 0.1600E+02 -24.686 0.0000E+00 0.1600E+02 -24.678 0.0000E+00 0.1600E+02 -24.670 0.0000E+00 0.1600E+02 -24.662 0.0000E+00 0.1600E+02 -24.653 0.0000E+00 0.1600E+02 -24.645 0.0000E+00 0.1600E+02 -24.637 0.0000E+00 0.1600E+02 -24.629 0.0000E+00 0.1600E+02 -24.620 0.0000E+00 0.1600E+02 -24.612 0.0000E+00 0.1600E+02 -24.604 0.0000E+00 0.1600E+02 -24.596 0.0000E+00 0.1600E+02 -24.587 0.0000E+00 0.1600E+02 -24.579 0.0000E+00 0.1600E+02 -24.571 0.0000E+00 0.1600E+02 -24.563 0.0000E+00 0.1600E+02 -24.554 0.0000E+00 0.1600E+02 -24.546 0.0000E+00 0.1600E+02 -24.538 0.0000E+00 0.1600E+02 -24.530 0.0000E+00 0.1600E+02 -24.522 0.0000E+00 0.1600E+02 -24.513 0.0000E+00 0.1600E+02 -24.505 0.0000E+00 0.1600E+02 -24.497 0.0000E+00 0.1600E+02 -24.489 0.0000E+00 0.1600E+02 -24.480 0.0000E+00 0.1600E+02 -24.472 0.0000E+00 0.1600E+02 -24.464 0.0000E+00 0.1600E+02 -24.456 0.0000E+00 0.1600E+02 -24.447 0.0000E+00 0.1600E+02 -24.439 0.0000E+00 0.1600E+02 -24.431 0.0000E+00 0.1600E+02 -24.423 0.0000E+00 0.1600E+02 -24.414 0.0000E+00 0.1600E+02 -24.406 0.0000E+00 0.1600E+02 -24.398 0.0000E+00 0.1600E+02 -24.390 0.0000E+00 0.1600E+02 -24.382 0.0000E+00 0.1600E+02 -24.373 0.0000E+00 0.1600E+02 -24.365 0.0000E+00 0.1600E+02 -24.357 0.0000E+00 0.1600E+02 -24.349 0.0000E+00 0.1600E+02 -24.340 0.0000E+00 0.1600E+02 -24.332 0.0000E+00 0.1600E+02 -24.324 0.0000E+00 0.1600E+02 -24.316 0.0000E+00 0.1600E+02 -24.307 0.0000E+00 0.1600E+02 -24.299 0.0000E+00 0.1600E+02 -24.291 0.0000E+00 0.1600E+02 -24.283 0.0000E+00 0.1600E+02 -24.274 0.0000E+00 0.1600E+02 -24.266 0.0000E+00 0.1600E+02 -24.258 0.0000E+00 0.1600E+02 -24.250 0.0000E+00 0.1600E+02 -24.242 0.0000E+00 0.1600E+02 -24.233 0.0000E+00 0.1600E+02 -24.225 0.0000E+00 0.1600E+02 -24.217 0.0000E+00 0.1600E+02 -24.209 0.0000E+00 0.1600E+02 -24.200 0.0000E+00 0.1600E+02 -24.192 0.0000E+00 0.1600E+02 -24.184 0.0000E+00 0.1600E+02 -24.176 0.0000E+00 0.1600E+02 -24.167 0.0000E+00 0.1600E+02 -24.159 0.0000E+00 0.1600E+02 -24.151 0.0000E+00 0.1600E+02 -24.143 0.0000E+00 0.1600E+02 -24.134 0.0000E+00 0.1600E+02 -24.126 0.0000E+00 0.1600E+02 -24.118 0.0000E+00 0.1600E+02 -24.110 0.0000E+00 0.1600E+02 -24.102 0.0000E+00 0.1600E+02 -24.093 0.0000E+00 0.1600E+02 -24.085 0.0000E+00 0.1600E+02 -24.077 0.0000E+00 0.1600E+02 -24.069 0.0000E+00 0.1600E+02 -24.060 0.0000E+00 0.1600E+02 -24.052 0.0000E+00 0.1600E+02 -24.044 0.0000E+00 0.1600E+02 -24.036 0.0000E+00 0.1600E+02 -24.027 0.0000E+00 0.1600E+02 -24.019 0.0000E+00 0.1600E+02 -24.011 0.0000E+00 0.1600E+02 -24.003 0.0000E+00 0.1600E+02 -23.995 0.0000E+00 0.1600E+02 -23.986 0.0000E+00 0.1600E+02 -23.978 0.0000E+00 0.1600E+02 -23.970 0.0000E+00 0.1600E+02 -23.962 0.0000E+00 0.1600E+02 -23.953 0.0000E+00 0.1600E+02 -23.945 0.0000E+00 0.1600E+02 -23.937 0.0000E+00 0.1600E+02 -23.929 0.0000E+00 0.1600E+02 -23.920 0.0000E+00 0.1600E+02 -23.912 0.0000E+00 0.1600E+02 -23.904 0.0000E+00 0.1600E+02 -23.896 0.0000E+00 0.1600E+02 -23.887 0.0000E+00 0.1600E+02 -23.879 0.0000E+00 0.1600E+02 -23.871 0.0000E+00 0.1600E+02 -23.863 0.0000E+00 0.1600E+02 -23.855 0.0000E+00 0.1600E+02 -23.846 0.0000E+00 0.1600E+02 -23.838 0.0000E+00 0.1600E+02 -23.830 0.0000E+00 0.1600E+02 -23.822 0.0000E+00 0.1600E+02 -23.813 0.0000E+00 0.1600E+02 -23.805 0.0000E+00 0.1600E+02 -23.797 0.0000E+00 0.1600E+02 -23.789 0.0000E+00 0.1600E+02 -23.780 0.0000E+00 0.1600E+02 -23.772 0.0000E+00 0.1600E+02 -23.764 0.0000E+00 0.1600E+02 -23.756 0.0000E+00 0.1600E+02 -23.747 0.0000E+00 0.1600E+02 -23.739 0.0000E+00 0.1600E+02 -23.731 0.0000E+00 0.1600E+02 -23.723 0.0000E+00 0.1600E+02 -23.715 0.0000E+00 0.1600E+02 -23.706 0.0000E+00 0.1600E+02 -23.698 0.0000E+00 0.1600E+02 -23.690 0.0000E+00 0.1600E+02 -23.682 0.0000E+00 0.1600E+02 -23.673 0.0000E+00 0.1600E+02 -23.665 0.0000E+00 0.1600E+02 -23.657 0.0000E+00 0.1600E+02 -23.649 0.0000E+00 0.1600E+02 -23.640 0.0000E+00 0.1600E+02 -23.632 0.0000E+00 0.1600E+02 -23.624 0.0000E+00 0.1600E+02 -23.616 0.0000E+00 0.1600E+02 -23.607 0.0000E+00 0.1600E+02 -23.599 0.0000E+00 0.1600E+02 -23.591 0.0000E+00 0.1600E+02 -23.583 0.0000E+00 0.1600E+02 -23.575 0.0000E+00 0.1600E+02 -23.566 0.0000E+00 0.1600E+02 -23.558 0.0000E+00 0.1600E+02 -23.550 0.0000E+00 0.1600E+02 -23.542 0.0000E+00 0.1600E+02 -23.533 0.0000E+00 0.1600E+02 -23.525 0.0000E+00 0.1600E+02 -23.517 0.0000E+00 0.1600E+02 -23.509 0.0000E+00 0.1600E+02 -23.500 0.0000E+00 0.1600E+02 -23.492 0.0000E+00 0.1600E+02 -23.484 0.0000E+00 0.1600E+02 -23.476 0.0000E+00 0.1600E+02 -23.468 0.0000E+00 0.1600E+02 -23.459 0.0000E+00 0.1600E+02 -23.451 0.0000E+00 0.1600E+02 -23.443 0.0000E+00 0.1600E+02 -23.435 0.0000E+00 0.1600E+02 -23.426 0.0000E+00 0.1600E+02 -23.418 0.0000E+00 0.1600E+02 -23.410 0.0000E+00 0.1600E+02 -23.402 0.0000E+00 0.1600E+02 -23.393 0.0000E+00 0.1600E+02 -23.385 0.0000E+00 0.1600E+02 -23.377 0.0000E+00 0.1600E+02 -23.369 0.0000E+00 0.1600E+02 -23.360 0.0000E+00 0.1600E+02 -23.352 0.0000E+00 0.1600E+02 -23.344 0.0000E+00 0.1600E+02 -23.336 0.0000E+00 0.1600E+02 -23.328 0.0000E+00 0.1600E+02 -23.319 0.0000E+00 0.1600E+02 -23.311 0.0000E+00 0.1600E+02 -23.303 0.0000E+00 0.1600E+02 -23.295 0.0000E+00 0.1600E+02 -23.286 0.0000E+00 0.1600E+02 -23.278 0.0000E+00 0.1600E+02 -23.270 0.0000E+00 0.1600E+02 -23.262 0.0000E+00 0.1600E+02 -23.253 0.0000E+00 0.1600E+02 -23.245 0.0000E+00 0.1600E+02 -23.237 0.0000E+00 0.1600E+02 -23.229 0.0000E+00 0.1600E+02 -23.220 0.0000E+00 0.1600E+02 -23.212 0.0000E+00 0.1600E+02 -23.204 0.0000E+00 0.1600E+02 -23.196 0.0000E+00 0.1600E+02 -23.188 0.0000E+00 0.1600E+02 -23.179 0.0000E+00 0.1600E+02 -23.171 0.0000E+00 0.1600E+02 -23.163 0.0000E+00 0.1600E+02 -23.155 0.0000E+00 0.1600E+02 -23.146 0.0000E+00 0.1600E+02 -23.138 0.0000E+00 0.1600E+02 -23.130 0.0000E+00 0.1600E+02 -23.122 0.0000E+00 0.1600E+02 -23.113 0.0000E+00 0.1600E+02 -23.105 0.0000E+00 0.1600E+02 -23.097 0.0000E+00 0.1600E+02 -23.089 0.0000E+00 0.1600E+02 -23.080 0.0000E+00 0.1600E+02 -23.072 0.0000E+00 0.1600E+02 -23.064 0.0000E+00 0.1600E+02 -23.056 0.0000E+00 0.1600E+02 -23.048 0.0000E+00 0.1600E+02 -23.039 0.0000E+00 0.1600E+02 -23.031 0.0000E+00 0.1600E+02 -23.023 0.0000E+00 0.1600E+02 -23.015 0.0000E+00 0.1600E+02 -23.006 0.0000E+00 0.1600E+02 -22.998 0.0000E+00 0.1600E+02 -22.990 0.0000E+00 0.1600E+02 -22.982 0.0000E+00 0.1600E+02 -22.973 0.0000E+00 0.1600E+02 -22.965 0.0000E+00 0.1600E+02 -22.957 0.0000E+00 0.1600E+02 -22.949 0.0000E+00 0.1600E+02 -22.941 0.0000E+00 0.1600E+02 -22.932 0.0000E+00 0.1600E+02 -22.924 0.0000E+00 0.1600E+02 -22.916 0.0000E+00 0.1600E+02 -22.908 0.0000E+00 0.1600E+02 -22.899 0.0000E+00 0.1600E+02 -22.891 0.0000E+00 0.1600E+02 -22.883 0.0000E+00 0.1600E+02 -22.875 0.0000E+00 0.1600E+02 -22.866 0.0000E+00 0.1600E+02 -22.858 0.0000E+00 0.1600E+02 -22.850 0.0000E+00 0.1600E+02 -22.842 0.0000E+00 0.1600E+02 -22.833 0.0000E+00 0.1600E+02 -22.825 0.0000E+00 0.1600E+02 -22.817 0.0000E+00 0.1600E+02 -22.809 0.0000E+00 0.1600E+02 -22.801 0.0000E+00 0.1600E+02 -22.792 0.0000E+00 0.1600E+02 -22.784 0.0000E+00 0.1600E+02 -22.776 0.0000E+00 0.1600E+02 -22.768 0.0000E+00 0.1600E+02 -22.759 0.0000E+00 0.1600E+02 -22.751 0.0000E+00 0.1600E+02 -22.743 0.0000E+00 0.1600E+02 -22.735 0.0000E+00 0.1600E+02 -22.726 0.0000E+00 0.1600E+02 -22.718 0.0000E+00 0.1600E+02 -22.710 0.0000E+00 0.1600E+02 -22.702 0.0000E+00 0.1600E+02 -22.693 0.0000E+00 0.1600E+02 -22.685 0.0000E+00 0.1600E+02 -22.677 0.0000E+00 0.1600E+02 -22.669 0.0000E+00 0.1600E+02 -22.661 0.0000E+00 0.1600E+02 -22.652 0.0000E+00 0.1600E+02 -22.644 0.0000E+00 0.1600E+02 -22.636 0.0000E+00 0.1600E+02 -22.628 0.0000E+00 0.1600E+02 -22.619 0.0000E+00 0.1600E+02 -22.611 0.0000E+00 0.1600E+02 -22.603 0.0000E+00 0.1600E+02 -22.595 0.0000E+00 0.1600E+02 -22.586 0.0000E+00 0.1600E+02 -22.578 0.0000E+00 0.1600E+02 -22.570 0.0000E+00 0.1600E+02 -22.562 0.0000E+00 0.1600E+02 -22.553 0.0000E+00 0.1600E+02 -22.545 0.0000E+00 0.1600E+02 -22.537 0.0000E+00 0.1600E+02 -22.529 0.0000E+00 0.1600E+02 -22.521 0.0000E+00 0.1600E+02 -22.512 0.0000E+00 0.1600E+02 -22.504 0.0000E+00 0.1600E+02 -22.496 0.0000E+00 0.1600E+02 -22.488 0.0000E+00 0.1600E+02 -22.479 0.0000E+00 0.1600E+02 -22.471 0.0000E+00 0.1600E+02 -22.463 0.0000E+00 0.1600E+02 -22.455 0.0000E+00 0.1600E+02 -22.446 0.0000E+00 0.1600E+02 -22.438 0.0000E+00 0.1600E+02 -22.430 0.0000E+00 0.1600E+02 -22.422 0.0000E+00 0.1600E+02 -22.413 0.0000E+00 0.1600E+02 -22.405 0.0000E+00 0.1600E+02 -22.397 0.0000E+00 0.1600E+02 -22.389 0.0000E+00 0.1600E+02 -22.381 0.0000E+00 0.1600E+02 -22.372 0.0000E+00 0.1600E+02 -22.364 0.0000E+00 0.1600E+02 -22.356 0.0000E+00 0.1600E+02 -22.348 0.0000E+00 0.1600E+02 -22.339 0.0000E+00 0.1600E+02 -22.331 0.0000E+00 0.1600E+02 -22.323 0.0000E+00 0.1600E+02 -22.315 0.0000E+00 0.1600E+02 -22.306 0.0000E+00 0.1600E+02 -22.298 0.0000E+00 0.1600E+02 -22.290 0.0000E+00 0.1600E+02 -22.282 0.0000E+00 0.1600E+02 -22.274 0.0000E+00 0.1600E+02 -22.265 0.0000E+00 0.1600E+02 -22.257 0.0000E+00 0.1600E+02 -22.249 0.0000E+00 0.1600E+02 -22.241 0.0000E+00 0.1600E+02 -22.232 0.0000E+00 0.1600E+02 -22.224 0.0000E+00 0.1600E+02 -22.216 0.0000E+00 0.1600E+02 -22.208 0.0000E+00 0.1600E+02 -22.199 0.0000E+00 0.1600E+02 -22.191 0.0000E+00 0.1600E+02 -22.183 0.0000E+00 0.1600E+02 -22.175 0.0000E+00 0.1600E+02 -22.166 0.0000E+00 0.1600E+02 -22.158 0.0000E+00 0.1600E+02 -22.150 0.0000E+00 0.1600E+02 -22.142 0.0000E+00 0.1600E+02 -22.134 0.0000E+00 0.1600E+02 -22.125 0.0000E+00 0.1600E+02 -22.117 0.0000E+00 0.1600E+02 -22.109 0.0000E+00 0.1600E+02 -22.101 0.0000E+00 0.1600E+02 -22.092 0.0000E+00 0.1600E+02 -22.084 0.0000E+00 0.1600E+02 -22.076 0.0000E+00 0.1600E+02 -22.068 0.0000E+00 0.1600E+02 -22.059 0.0000E+00 0.1600E+02 -22.051 0.0000E+00 0.1600E+02 -22.043 0.0000E+00 0.1600E+02 -22.035 0.0000E+00 0.1600E+02 -22.026 0.0000E+00 0.1600E+02 -22.018 0.0000E+00 0.1600E+02 -22.010 0.0000E+00 0.1600E+02 -22.002 0.0000E+00 0.1600E+02 -21.994 0.0000E+00 0.1600E+02 -21.985 0.0000E+00 0.1600E+02 -21.977 0.0000E+00 0.1600E+02 -21.969 0.0000E+00 0.1600E+02 -21.961 0.0000E+00 0.1600E+02 -21.952 0.0000E+00 0.1600E+02 -21.944 0.0000E+00 0.1600E+02 -21.936 0.0000E+00 0.1600E+02 -21.928 0.0000E+00 0.1600E+02 -21.919 0.0000E+00 0.1600E+02 -21.911 0.0000E+00 0.1600E+02 -21.903 0.0000E+00 0.1600E+02 -21.895 0.0000E+00 0.1600E+02 -21.886 0.0000E+00 0.1600E+02 -21.878 0.0000E+00 0.1600E+02 -21.870 0.0000E+00 0.1600E+02 -21.862 0.0000E+00 0.1600E+02 -21.854 0.0000E+00 0.1600E+02 -21.845 0.0000E+00 0.1600E+02 -21.837 0.0000E+00 0.1600E+02 -21.829 0.0000E+00 0.1600E+02 -21.821 0.0000E+00 0.1600E+02 -21.812 0.0000E+00 0.1600E+02 -21.804 0.0000E+00 0.1600E+02 -21.796 0.0000E+00 0.1600E+02 -21.788 0.0000E+00 0.1600E+02 -21.779 0.0000E+00 0.1600E+02 -21.771 0.0000E+00 0.1600E+02 -21.763 0.0000E+00 0.1600E+02 -21.755 0.0000E+00 0.1600E+02 -21.747 0.0000E+00 0.1600E+02 -21.738 0.0000E+00 0.1600E+02 -21.730 0.0000E+00 0.1600E+02 -21.722 0.0000E+00 0.1600E+02 -21.714 0.0000E+00 0.1600E+02 -21.705 0.0000E+00 0.1600E+02 -21.697 0.0000E+00 0.1600E+02 -21.689 0.0000E+00 0.1600E+02 -21.681 0.0000E+00 0.1600E+02 -21.672 0.0000E+00 0.1600E+02 -21.664 0.0000E+00 0.1600E+02 -21.656 0.0000E+00 0.1600E+02 -21.648 0.0000E+00 0.1600E+02 -21.639 0.0000E+00 0.1600E+02 -21.631 0.0000E+00 0.1600E+02 -21.623 0.0000E+00 0.1600E+02 -21.615 0.0000E+00 0.1600E+02 -21.607 0.0000E+00 0.1600E+02 -21.598 0.0000E+00 0.1600E+02 -21.590 0.0000E+00 0.1600E+02 -21.582 0.0000E+00 0.1600E+02 -21.574 0.0000E+00 0.1600E+02 -21.565 0.0000E+00 0.1600E+02 -21.557 0.0000E+00 0.1600E+02 -21.549 0.0000E+00 0.1600E+02 -21.541 0.0000E+00 0.1600E+02 -21.532 0.0000E+00 0.1600E+02 -21.524 0.0000E+00 0.1600E+02 -21.516 0.0000E+00 0.1600E+02 -21.508 0.0000E+00 0.1600E+02 -21.499 0.0000E+00 0.1600E+02 -21.491 0.0000E+00 0.1600E+02 -21.483 0.0000E+00 0.1600E+02 -21.475 0.0000E+00 0.1600E+02 -21.467 0.0000E+00 0.1600E+02 -21.458 0.0000E+00 0.1600E+02 -21.450 0.0000E+00 0.1600E+02 -21.442 0.0000E+00 0.1600E+02 -21.434 0.0000E+00 0.1600E+02 -21.425 0.0000E+00 0.1600E+02 -21.417 0.0000E+00 0.1600E+02 -21.409 0.0000E+00 0.1600E+02 -21.401 0.0000E+00 0.1600E+02 -21.392 0.0000E+00 0.1600E+02 -21.384 0.0000E+00 0.1600E+02 -21.376 0.0000E+00 0.1600E+02 -21.368 0.0000E+00 0.1600E+02 -21.359 0.0000E+00 0.1600E+02 -21.351 0.0000E+00 0.1600E+02 -21.343 0.0000E+00 0.1600E+02 -21.335 0.0000E+00 0.1600E+02 -21.327 0.0000E+00 0.1600E+02 -21.318 0.0000E+00 0.1600E+02 -21.310 0.0000E+00 0.1600E+02 -21.302 0.0000E+00 0.1600E+02 -21.294 0.0000E+00 0.1600E+02 -21.285 0.0000E+00 0.1600E+02 -21.277 0.0000E+00 0.1600E+02 -21.269 0.0000E+00 0.1600E+02 -21.261 0.0000E+00 0.1600E+02 -21.252 0.0000E+00 0.1600E+02 -21.244 0.0000E+00 0.1600E+02 -21.236 0.0000E+00 0.1600E+02 -21.228 0.0000E+00 0.1600E+02 -21.219 0.0000E+00 0.1600E+02 -21.211 0.0000E+00 0.1600E+02 -21.203 0.0000E+00 0.1600E+02 -21.195 0.0000E+00 0.1600E+02 -21.187 0.0000E+00 0.1600E+02 -21.178 0.0000E+00 0.1600E+02 -21.170 0.0000E+00 0.1600E+02 -21.162 0.0000E+00 0.1600E+02 -21.154 0.0000E+00 0.1600E+02 -21.145 0.0000E+00 0.1600E+02 -21.137 0.0000E+00 0.1600E+02 -21.129 0.0000E+00 0.1600E+02 -21.121 0.0000E+00 0.1600E+02 -21.112 0.0000E+00 0.1600E+02 -21.104 0.0000E+00 0.1600E+02 -21.096 0.0000E+00 0.1600E+02 -21.088 0.0000E+00 0.1600E+02 -21.080 0.0000E+00 0.1600E+02 -21.071 0.0000E+00 0.1600E+02 -21.063 0.0000E+00 0.1600E+02 -21.055 0.0000E+00 0.1600E+02 -21.047 0.0000E+00 0.1600E+02 -21.038 0.0000E+00 0.1600E+02 -21.030 0.0000E+00 0.1600E+02 -21.022 0.0000E+00 0.1600E+02 -21.014 0.0000E+00 0.1600E+02 -21.005 0.0000E+00 0.1600E+02 -20.997 0.0000E+00 0.1600E+02 -20.989 0.0000E+00 0.1600E+02 -20.981 0.0000E+00 0.1600E+02 -20.972 0.0000E+00 0.1600E+02 -20.964 0.0000E+00 0.1600E+02 -20.956 0.0000E+00 0.1600E+02 -20.948 0.0000E+00 0.1600E+02 -20.940 0.0000E+00 0.1600E+02 -20.931 0.0000E+00 0.1600E+02 -20.923 0.0000E+00 0.1600E+02 -20.915 0.0000E+00 0.1600E+02 -20.907 0.0000E+00 0.1600E+02 -20.898 0.0000E+00 0.1600E+02 -20.890 0.0000E+00 0.1600E+02 -20.882 0.0000E+00 0.1600E+02 -20.874 0.0000E+00 0.1600E+02 -20.865 0.0000E+00 0.1600E+02 -20.857 0.0000E+00 0.1600E+02 -20.849 0.0000E+00 0.1600E+02 -20.841 0.0000E+00 0.1600E+02 -20.832 0.0000E+00 0.1600E+02 -20.824 0.0000E+00 0.1600E+02 -20.816 0.0000E+00 0.1600E+02 -20.808 0.0000E+00 0.1600E+02 -20.800 0.0000E+00 0.1600E+02 -20.791 0.0000E+00 0.1600E+02 -20.783 0.0000E+00 0.1600E+02 -20.775 0.0000E+00 0.1600E+02 -20.767 0.0000E+00 0.1600E+02 -20.758 0.0000E+00 0.1600E+02 -20.750 0.0000E+00 0.1600E+02 -20.742 0.0000E+00 0.1600E+02 -20.734 0.0000E+00 0.1600E+02 -20.725 0.0000E+00 0.1600E+02 -20.717 0.0000E+00 0.1600E+02 -20.709 0.0000E+00 0.1600E+02 -20.701 0.0000E+00 0.1600E+02 -20.692 0.0000E+00 0.1600E+02 -20.684 0.0000E+00 0.1600E+02 -20.676 0.0000E+00 0.1600E+02 -20.668 0.0000E+00 0.1600E+02 -20.660 0.0000E+00 0.1600E+02 -20.651 0.0000E+00 0.1600E+02 -20.643 0.0000E+00 0.1600E+02 -20.635 0.0000E+00 0.1600E+02 -20.627 0.0000E+00 0.1600E+02 -20.618 0.0000E+00 0.1600E+02 -20.610 0.0000E+00 0.1600E+02 -20.602 0.0000E+00 0.1600E+02 -20.594 0.0000E+00 0.1600E+02 -20.585 0.0000E+00 0.1600E+02 -20.577 0.0000E+00 0.1600E+02 -20.569 0.0000E+00 0.1600E+02 -20.561 0.0000E+00 0.1600E+02 -20.553 0.0000E+00 0.1600E+02 -20.544 0.0000E+00 0.1600E+02 -20.536 0.0000E+00 0.1600E+02 -20.528 0.0000E+00 0.1600E+02 -20.520 0.0000E+00 0.1600E+02 -20.511 0.0000E+00 0.1600E+02 -20.503 0.0000E+00 0.1600E+02 -20.495 0.0000E+00 0.1600E+02 -20.487 0.0000E+00 0.1600E+02 -20.478 0.0000E+00 0.1600E+02 -20.470 0.0000E+00 0.1600E+02 -20.462 0.0000E+00 0.1600E+02 -20.454 0.0000E+00 0.1600E+02 -20.445 0.0000E+00 0.1600E+02 -20.437 0.0000E+00 0.1600E+02 -20.429 0.0000E+00 0.1600E+02 -20.421 0.0000E+00 0.1600E+02 -20.413 0.0000E+00 0.1600E+02 -20.404 0.0000E+00 0.1600E+02 -20.396 0.0000E+00 0.1600E+02 -20.388 0.0000E+00 0.1600E+02 -20.380 0.0000E+00 0.1600E+02 -20.371 0.0000E+00 0.1600E+02 -20.363 0.0000E+00 0.1600E+02 -20.355 0.0000E+00 0.1600E+02 -20.347 0.0000E+00 0.1600E+02 -20.338 0.0000E+00 0.1600E+02 -20.330 0.0000E+00 0.1600E+02 -20.322 0.0000E+00 0.1600E+02 -20.314 0.0000E+00 0.1600E+02 -20.305 0.0000E+00 0.1600E+02 -20.297 0.0000E+00 0.1600E+02 -20.289 0.0000E+00 0.1600E+02 -20.281 0.0000E+00 0.1600E+02 -20.273 0.0000E+00 0.1600E+02 -20.264 0.0000E+00 0.1600E+02 -20.256 0.0000E+00 0.1600E+02 -20.248 0.0000E+00 0.1600E+02 -20.240 0.0000E+00 0.1600E+02 -20.231 0.0000E+00 0.1600E+02 -20.223 0.0000E+00 0.1600E+02 -20.215 0.0000E+00 0.1600E+02 -20.207 0.0000E+00 0.1600E+02 -20.198 0.0000E+00 0.1600E+02 -20.190 0.0000E+00 0.1600E+02 -20.182 0.0000E+00 0.1600E+02 -20.174 0.0000E+00 0.1600E+02 -20.165 0.0000E+00 0.1600E+02 -20.157 0.0000E+00 0.1600E+02 -20.149 0.0000E+00 0.1600E+02 -20.141 0.0000E+00 0.1600E+02 -20.133 0.0000E+00 0.1600E+02 -20.124 0.0000E+00 0.1600E+02 -20.116 0.0000E+00 0.1600E+02 -20.108 0.0000E+00 0.1600E+02 -20.100 0.0000E+00 0.1600E+02 -20.091 0.0000E+00 0.1600E+02 -20.083 0.0000E+00 0.1600E+02 -20.075 0.0000E+00 0.1600E+02 -20.067 0.0000E+00 0.1600E+02 -20.058 0.0000E+00 0.1600E+02 -20.050 0.0000E+00 0.1600E+02 -20.042 0.0000E+00 0.1600E+02 -20.034 0.0000E+00 0.1600E+02 -20.026 0.0000E+00 0.1600E+02 -20.017 0.0000E+00 0.1600E+02 -20.009 0.0000E+00 0.1600E+02 -20.001 0.0000E+00 0.1600E+02 -19.993 0.0000E+00 0.1600E+02 -19.984 0.0000E+00 0.1600E+02 -19.976 0.0000E+00 0.1600E+02 -19.968 0.0000E+00 0.1600E+02 -19.960 0.0000E+00 0.1600E+02 -19.951 0.0000E+00 0.1600E+02 -19.943 0.0000E+00 0.1600E+02 -19.935 0.0000E+00 0.1600E+02 -19.927 0.0000E+00 0.1600E+02 -19.918 0.0000E+00 0.1600E+02 -19.910 0.0000E+00 0.1600E+02 -19.902 0.0000E+00 0.1600E+02 -19.894 0.0000E+00 0.1600E+02 -19.886 0.0000E+00 0.1600E+02 -19.877 0.0000E+00 0.1600E+02 -19.869 0.0000E+00 0.1600E+02 -19.861 0.0000E+00 0.1600E+02 -19.853 0.0000E+00 0.1600E+02 -19.844 0.0000E+00 0.1600E+02 -19.836 0.0000E+00 0.1600E+02 -19.828 0.0000E+00 0.1600E+02 -19.820 0.0000E+00 0.1600E+02 -19.811 0.0000E+00 0.1600E+02 -19.803 0.0000E+00 0.1600E+02 -19.795 0.0000E+00 0.1600E+02 -19.787 0.0000E+00 0.1600E+02 -19.778 0.0000E+00 0.1600E+02 -19.770 0.0000E+00 0.1600E+02 -19.762 0.0000E+00 0.1600E+02 -19.754 0.0000E+00 0.1600E+02 -19.746 0.0000E+00 0.1600E+02 -19.737 0.0000E+00 0.1600E+02 -19.729 0.0000E+00 0.1600E+02 -19.721 0.0000E+00 0.1600E+02 -19.713 0.0000E+00 0.1600E+02 -19.704 0.0000E+00 0.1600E+02 -19.696 0.0000E+00 0.1600E+02 -19.688 0.0000E+00 0.1600E+02 -19.680 0.0000E+00 0.1600E+02 -19.671 0.0000E+00 0.1600E+02 -19.663 0.0000E+00 0.1600E+02 -19.655 0.0000E+00 0.1600E+02 -19.647 0.0000E+00 0.1600E+02 -19.638 0.0000E+00 0.1600E+02 -19.630 0.0000E+00 0.1600E+02 -19.622 0.0000E+00 0.1600E+02 -19.614 0.0000E+00 0.1600E+02 -19.606 0.0000E+00 0.1600E+02 -19.597 0.0000E+00 0.1600E+02 -19.589 0.0000E+00 0.1600E+02 -19.581 0.0000E+00 0.1600E+02 -19.573 0.0000E+00 0.1600E+02 -19.564 0.0000E+00 0.1600E+02 -19.556 0.0000E+00 0.1600E+02 -19.548 0.0000E+00 0.1600E+02 -19.540 0.0000E+00 0.1600E+02 -19.531 0.0000E+00 0.1600E+02 -19.523 0.0000E+00 0.1600E+02 -19.515 0.0000E+00 0.1600E+02 -19.507 0.0000E+00 0.1600E+02 -19.498 0.0000E+00 0.1600E+02 -19.490 0.0000E+00 0.1600E+02 -19.482 0.0000E+00 0.1600E+02 -19.474 0.0000E+00 0.1600E+02 -19.466 0.0000E+00 0.1600E+02 -19.457 0.0000E+00 0.1600E+02 -19.449 0.0000E+00 0.1600E+02 -19.441 0.0000E+00 0.1600E+02 -19.433 0.0000E+00 0.1600E+02 -19.424 0.0000E+00 0.1600E+02 -19.416 0.0000E+00 0.1600E+02 -19.408 0.0000E+00 0.1600E+02 -19.400 0.0000E+00 0.1600E+02 -19.391 0.0000E+00 0.1600E+02 -19.383 0.0000E+00 0.1600E+02 -19.375 0.0000E+00 0.1600E+02 -19.367 0.0000E+00 0.1600E+02 -19.359 0.0000E+00 0.1600E+02 -19.350 0.0000E+00 0.1600E+02 -19.342 0.0000E+00 0.1600E+02 -19.334 0.0000E+00 0.1600E+02 -19.326 0.0000E+00 0.1600E+02 -19.317 0.0000E+00 0.1600E+02 -19.309 0.0000E+00 0.1600E+02 -19.301 0.0000E+00 0.1600E+02 -19.293 0.0000E+00 0.1600E+02 -19.284 0.0000E+00 0.1600E+02 -19.276 0.0000E+00 0.1600E+02 -19.268 0.0000E+00 0.1600E+02 -19.260 0.0000E+00 0.1600E+02 -19.251 0.0000E+00 0.1600E+02 -19.243 0.0000E+00 0.1600E+02 -19.235 0.0000E+00 0.1600E+02 -19.227 0.0000E+00 0.1600E+02 -19.219 0.0000E+00 0.1600E+02 -19.210 0.0000E+00 0.1600E+02 -19.202 0.0000E+00 0.1600E+02 -19.194 0.0000E+00 0.1600E+02 -19.186 0.0000E+00 0.1600E+02 -19.177 0.0000E+00 0.1600E+02 -19.169 0.0000E+00 0.1600E+02 -19.161 0.0000E+00 0.1600E+02 -19.153 0.0000E+00 0.1600E+02 -19.144 0.0000E+00 0.1600E+02 -19.136 0.0000E+00 0.1600E+02 -19.128 0.0000E+00 0.1600E+02 -19.120 0.0000E+00 0.1600E+02 -19.111 0.0000E+00 0.1600E+02 -19.103 0.0000E+00 0.1600E+02 -19.095 0.0000E+00 0.1600E+02 -19.087 0.0000E+00 0.1600E+02 -19.079 0.0000E+00 0.1600E+02 -19.070 0.0000E+00 0.1600E+02 -19.062 0.0000E+00 0.1600E+02 -19.054 0.0000E+00 0.1600E+02 -19.046 0.0000E+00 0.1600E+02 -19.037 0.0000E+00 0.1600E+02 -19.029 0.0000E+00 0.1600E+02 -19.021 0.0000E+00 0.1600E+02 -19.013 0.0000E+00 0.1600E+02 -19.004 0.0000E+00 0.1600E+02 -18.996 0.0000E+00 0.1600E+02 -18.988 0.0000E+00 0.1600E+02 -18.980 0.0000E+00 0.1600E+02 -18.971 0.0000E+00 0.1600E+02 -18.963 0.0000E+00 0.1600E+02 -18.955 0.0000E+00 0.1600E+02 -18.947 0.0000E+00 0.1600E+02 -18.939 0.0000E+00 0.1600E+02 -18.930 0.0000E+00 0.1600E+02 -18.922 0.0000E+00 0.1600E+02 -18.914 0.0000E+00 0.1600E+02 -18.906 0.0000E+00 0.1600E+02 -18.897 0.0000E+00 0.1600E+02 -18.889 0.0000E+00 0.1600E+02 -18.881 0.0000E+00 0.1600E+02 -18.873 0.0000E+00 0.1600E+02 -18.864 0.0000E+00 0.1600E+02 -18.856 0.0000E+00 0.1600E+02 -18.848 0.0000E+00 0.1600E+02 -18.840 0.0000E+00 0.1600E+02 -18.832 0.0000E+00 0.1600E+02 -18.823 0.0000E+00 0.1600E+02 -18.815 0.0000E+00 0.1600E+02 -18.807 0.0000E+00 0.1600E+02 -18.799 0.0000E+00 0.1600E+02 -18.790 0.0000E+00 0.1600E+02 -18.782 0.0000E+00 0.1600E+02 -18.774 0.0000E+00 0.1600E+02 -18.766 0.0000E+00 0.1600E+02 -18.757 0.0000E+00 0.1600E+02 -18.749 0.0000E+00 0.1600E+02 -18.741 0.0000E+00 0.1600E+02 -18.733 0.0000E+00 0.1600E+02 -18.724 0.0000E+00 0.1600E+02 -18.716 0.0000E+00 0.1600E+02 -18.708 0.0000E+00 0.1600E+02 -18.700 0.0000E+00 0.1600E+02 -18.692 0.0000E+00 0.1600E+02 -18.683 0.0000E+00 0.1600E+02 -18.675 0.0000E+00 0.1600E+02 -18.667 0.0000E+00 0.1600E+02 -18.659 0.0000E+00 0.1600E+02 -18.650 0.0000E+00 0.1600E+02 -18.642 0.0000E+00 0.1600E+02 -18.634 0.0000E+00 0.1600E+02 -18.626 0.0000E+00 0.1600E+02 -18.617 0.0000E+00 0.1600E+02 -18.609 0.0000E+00 0.1600E+02 -18.601 0.0000E+00 0.1600E+02 -18.593 0.0000E+00 0.1600E+02 -18.584 0.0000E+00 0.1600E+02 -18.576 0.0000E+00 0.1600E+02 -18.568 0.0000E+00 0.1600E+02 -18.560 0.0000E+00 0.1600E+02 -18.552 0.0000E+00 0.1600E+02 -18.543 0.0000E+00 0.1600E+02 -18.535 0.0000E+00 0.1600E+02 -18.527 0.0000E+00 0.1600E+02 -18.519 0.0000E+00 0.1600E+02 -18.510 0.0000E+00 0.1600E+02 -18.502 0.0000E+00 0.1600E+02 -18.494 0.0000E+00 0.1600E+02 -18.486 0.0000E+00 0.1600E+02 -18.477 0.0000E+00 0.1600E+02 -18.469 0.0000E+00 0.1600E+02 -18.461 0.0000E+00 0.1600E+02 -18.453 0.0000E+00 0.1600E+02 -18.444 0.0000E+00 0.1600E+02 -18.436 0.0000E+00 0.1600E+02 -18.428 0.0000E+00 0.1600E+02 -18.420 0.0000E+00 0.1600E+02 -18.412 0.0000E+00 0.1600E+02 -18.403 0.0000E+00 0.1600E+02 -18.395 0.0000E+00 0.1600E+02 -18.387 0.0000E+00 0.1600E+02 -18.379 0.0000E+00 0.1600E+02 -18.370 0.0000E+00 0.1600E+02 -18.362 0.0000E+00 0.1600E+02 -18.354 0.0000E+00 0.1600E+02 -18.346 0.0000E+00 0.1600E+02 -18.337 0.0000E+00 0.1600E+02 -18.329 0.0000E+00 0.1600E+02 -18.321 0.0000E+00 0.1600E+02 -18.313 0.0000E+00 0.1600E+02 -18.304 0.0000E+00 0.1600E+02 -18.296 0.0000E+00 0.1600E+02 -18.288 0.0000E+00 0.1600E+02 -18.280 0.0000E+00 0.1600E+02 -18.272 0.0000E+00 0.1600E+02 -18.263 0.0000E+00 0.1600E+02 -18.255 0.0000E+00 0.1600E+02 -18.247 0.0000E+00 0.1600E+02 -18.239 0.0000E+00 0.1600E+02 -18.230 0.0000E+00 0.1600E+02 -18.222 0.0000E+00 0.1600E+02 -18.214 0.0000E+00 0.1600E+02 -18.206 0.0000E+00 0.1600E+02 -18.197 0.0000E+00 0.1600E+02 -18.189 0.0000E+00 0.1600E+02 -18.181 0.0000E+00 0.1600E+02 -18.173 0.0000E+00 0.1600E+02 -18.165 0.0000E+00 0.1600E+02 -18.156 0.0000E+00 0.1600E+02 -18.148 0.0000E+00 0.1600E+02 -18.140 0.0000E+00 0.1600E+02 -18.132 0.0000E+00 0.1600E+02 -18.123 0.0000E+00 0.1600E+02 -18.115 0.0000E+00 0.1600E+02 -18.107 0.0000E+00 0.1600E+02 -18.099 0.0000E+00 0.1600E+02 -18.090 0.0000E+00 0.1600E+02 -18.082 0.0000E+00 0.1600E+02 -18.074 0.0000E+00 0.1600E+02 -18.066 0.0000E+00 0.1600E+02 -18.057 0.0000E+00 0.1600E+02 -18.049 0.0000E+00 0.1600E+02 -18.041 0.0000E+00 0.1600E+02 -18.033 0.0000E+00 0.1600E+02 -18.025 0.0000E+00 0.1600E+02 -18.016 0.0000E+00 0.1600E+02 -18.008 0.0000E+00 0.1600E+02 -18.000 0.0000E+00 0.1600E+02 -17.992 0.0000E+00 0.1600E+02 -17.983 0.0000E+00 0.1600E+02 -17.975 0.0000E+00 0.1600E+02 -17.967 0.0000E+00 0.1600E+02 -17.959 0.0000E+00 0.1600E+02 -17.950 0.0000E+00 0.1600E+02 -17.942 0.0000E+00 0.1600E+02 -17.934 0.0000E+00 0.1600E+02 -17.926 0.0000E+00 0.1600E+02 -17.917 0.0000E+00 0.1600E+02 -17.909 0.0000E+00 0.1600E+02 -17.901 0.0000E+00 0.1600E+02 -17.893 0.0000E+00 0.1600E+02 -17.885 0.0000E+00 0.1600E+02 -17.876 0.0000E+00 0.1600E+02 -17.868 0.0000E+00 0.1600E+02 -17.860 0.0000E+00 0.1600E+02 -17.852 0.0000E+00 0.1600E+02 -17.843 0.0000E+00 0.1600E+02 -17.835 0.0000E+00 0.1600E+02 -17.827 0.0000E+00 0.1600E+02 -17.819 0.0000E+00 0.1600E+02 -17.810 0.0000E+00 0.1600E+02 -17.802 0.0000E+00 0.1600E+02 -17.794 0.0000E+00 0.1600E+02 -17.786 0.0000E+00 0.1600E+02 -17.777 0.0000E+00 0.1600E+02 -17.769 0.0000E+00 0.1600E+02 -17.761 0.0000E+00 0.1600E+02 -17.753 0.0000E+00 0.1600E+02 -17.745 0.0000E+00 0.1600E+02 -17.736 0.0000E+00 0.1600E+02 -17.728 0.0000E+00 0.1600E+02 -17.720 0.0000E+00 0.1600E+02 -17.712 0.0000E+00 0.1600E+02 -17.703 0.0000E+00 0.1600E+02 -17.695 0.0000E+00 0.1600E+02 -17.687 0.0000E+00 0.1600E+02 -17.679 0.0000E+00 0.1600E+02 -17.670 0.0000E+00 0.1600E+02 -17.662 0.0000E+00 0.1600E+02 -17.654 0.0000E+00 0.1600E+02 -17.646 0.0000E+00 0.1600E+02 -17.638 0.0000E+00 0.1600E+02 -17.629 0.0000E+00 0.1600E+02 -17.621 0.0000E+00 0.1600E+02 -17.613 0.0000E+00 0.1600E+02 -17.605 0.0000E+00 0.1600E+02 -17.596 0.0000E+00 0.1600E+02 -17.588 0.0000E+00 0.1600E+02 -17.580 0.0000E+00 0.1600E+02 -17.572 0.0000E+00 0.1600E+02 -17.563 0.0000E+00 0.1600E+02 -17.555 0.0000E+00 0.1600E+02 -17.547 0.0000E+00 0.1600E+02 -17.539 0.0000E+00 0.1600E+02 -17.530 0.0000E+00 0.1600E+02 -17.522 0.0000E+00 0.1600E+02 -17.514 0.0000E+00 0.1600E+02 -17.506 0.0000E+00 0.1600E+02 -17.498 0.0000E+00 0.1600E+02 -17.489 0.0000E+00 0.1600E+02 -17.481 0.0000E+00 0.1600E+02 -17.473 0.0000E+00 0.1600E+02 -17.465 0.0000E+00 0.1600E+02 -17.456 0.0000E+00 0.1600E+02 -17.448 0.0000E+00 0.1600E+02 -17.440 0.0000E+00 0.1600E+02 -17.432 0.0000E+00 0.1600E+02 -17.423 0.0000E+00 0.1600E+02 -17.415 0.0000E+00 0.1600E+02 -17.407 0.0000E+00 0.1600E+02 -17.399 0.0000E+00 0.1600E+02 -17.390 0.0000E+00 0.1600E+02 -17.382 0.0000E+00 0.1600E+02 -17.374 0.0000E+00 0.1600E+02 -17.366 0.0000E+00 0.1600E+02 -17.358 0.0000E+00 0.1600E+02 -17.349 0.0000E+00 0.1600E+02 -17.341 0.0000E+00 0.1600E+02 -17.333 0.0000E+00 0.1600E+02 -17.325 0.0000E+00 0.1600E+02 -17.316 0.0000E+00 0.1600E+02 -17.308 0.0000E+00 0.1600E+02 -17.300 0.0000E+00 0.1600E+02 -17.292 0.0000E+00 0.1600E+02 -17.283 0.0000E+00 0.1600E+02 -17.275 0.0000E+00 0.1600E+02 -17.267 0.0000E+00 0.1600E+02 -17.259 0.0000E+00 0.1600E+02 -17.250 0.0000E+00 0.1600E+02 -17.242 0.0000E+00 0.1600E+02 -17.234 0.0000E+00 0.1600E+02 -17.226 0.0000E+00 0.1600E+02 -17.218 0.0000E+00 0.1600E+02 -17.209 0.0000E+00 0.1600E+02 -17.201 0.0000E+00 0.1600E+02 -17.193 0.0000E+00 0.1600E+02 -17.185 0.0000E+00 0.1600E+02 -17.176 0.0000E+00 0.1600E+02 -17.168 0.0000E+00 0.1600E+02 -17.160 0.0000E+00 0.1600E+02 -17.152 0.0000E+00 0.1600E+02 -17.143 0.0000E+00 0.1600E+02 -17.135 0.0000E+00 0.1600E+02 -17.127 0.0000E+00 0.1600E+02 -17.119 0.0000E+00 0.1600E+02 -17.111 0.0000E+00 0.1600E+02 -17.102 0.0000E+00 0.1600E+02 -17.094 0.0000E+00 0.1600E+02 -17.086 0.0000E+00 0.1600E+02 -17.078 0.0000E+00 0.1600E+02 -17.069 0.0000E+00 0.1600E+02 -17.061 0.0000E+00 0.1600E+02 -17.053 0.0000E+00 0.1600E+02 -17.045 0.0000E+00 0.1600E+02 -17.036 0.0000E+00 0.1600E+02 -17.028 0.0000E+00 0.1600E+02 -17.020 0.0000E+00 0.1600E+02 -17.012 0.0000E+00 0.1600E+02 -17.003 0.0000E+00 0.1600E+02 -16.995 0.0000E+00 0.1600E+02 -16.987 0.0000E+00 0.1600E+02 -16.979 0.0000E+00 0.1600E+02 -16.971 0.0000E+00 0.1600E+02 -16.962 0.0000E+00 0.1600E+02 -16.954 0.0000E+00 0.1600E+02 -16.946 0.0000E+00 0.1600E+02 -16.938 0.0000E+00 0.1600E+02 -16.929 0.0000E+00 0.1600E+02 -16.921 0.0000E+00 0.1600E+02 -16.913 0.0000E+00 0.1600E+02 -16.905 0.0000E+00 0.1600E+02 -16.896 0.0000E+00 0.1600E+02 -16.888 0.0000E+00 0.1600E+02 -16.880 0.0000E+00 0.1600E+02 -16.872 0.0000E+00 0.1600E+02 -16.863 0.0000E+00 0.1600E+02 -16.855 0.0000E+00 0.1600E+02 -16.847 0.0000E+00 0.1600E+02 -16.839 0.0000E+00 0.1600E+02 -16.831 0.0000E+00 0.1600E+02 -16.822 0.0000E+00 0.1600E+02 -16.814 0.0000E+00 0.1600E+02 -16.806 0.0000E+00 0.1600E+02 -16.798 0.0000E+00 0.1600E+02 -16.789 0.0000E+00 0.1600E+02 -16.781 0.0000E+00 0.1600E+02 -16.773 0.0000E+00 0.1600E+02 -16.765 0.0000E+00 0.1600E+02 -16.756 0.0000E+00 0.1600E+02 -16.748 0.0000E+00 0.1600E+02 -16.740 0.0000E+00 0.1600E+02 -16.732 0.0000E+00 0.1600E+02 -16.723 0.0000E+00 0.1600E+02 -16.715 0.0000E+00 0.1600E+02 -16.707 0.0000E+00 0.1600E+02 -16.699 0.0000E+00 0.1600E+02 -16.691 0.0000E+00 0.1600E+02 -16.682 0.0000E+00 0.1600E+02 -16.674 0.0000E+00 0.1600E+02 -16.666 0.0000E+00 0.1600E+02 -16.658 0.0000E+00 0.1600E+02 -16.649 0.0000E+00 0.1600E+02 -16.641 0.0000E+00 0.1600E+02 -16.633 0.0000E+00 0.1600E+02 -16.625 0.0000E+00 0.1600E+02 -16.616 0.0000E+00 0.1600E+02 -16.608 0.0000E+00 0.1600E+02 -16.600 0.0000E+00 0.1600E+02 -16.592 0.0000E+00 0.1600E+02 -16.583 0.0000E+00 0.1600E+02 -16.575 0.0000E+00 0.1600E+02 -16.567 0.0000E+00 0.1600E+02 -16.559 0.0000E+00 0.1600E+02 -16.551 0.0000E+00 0.1600E+02 -16.542 0.0000E+00 0.1600E+02 -16.534 0.0000E+00 0.1600E+02 -16.526 0.0000E+00 0.1600E+02 -16.518 0.0000E+00 0.1600E+02 -16.509 0.0000E+00 0.1600E+02 -16.501 0.0000E+00 0.1600E+02 -16.493 0.0000E+00 0.1600E+02 -16.485 0.0000E+00 0.1600E+02 -16.476 0.0000E+00 0.1600E+02 -16.468 0.0000E+00 0.1600E+02 -16.460 0.0000E+00 0.1600E+02 -16.452 0.0000E+00 0.1600E+02 -16.444 0.0000E+00 0.1600E+02 -16.435 0.0000E+00 0.1600E+02 -16.427 0.0000E+00 0.1600E+02 -16.419 0.0000E+00 0.1600E+02 -16.411 0.0000E+00 0.1600E+02 -16.402 0.0000E+00 0.1600E+02 -16.394 0.0000E+00 0.1600E+02 -16.386 0.0000E+00 0.1600E+02 -16.378 0.0000E+00 0.1600E+02 -16.369 0.0000E+00 0.1600E+02 -16.361 0.0000E+00 0.1600E+02 -16.353 0.0000E+00 0.1600E+02 -16.345 0.0000E+00 0.1600E+02 -16.336 0.0000E+00 0.1600E+02 -16.328 0.0000E+00 0.1600E+02 -16.320 0.0000E+00 0.1600E+02 -16.312 0.0000E+00 0.1600E+02 -16.304 0.0000E+00 0.1600E+02 -16.295 0.0000E+00 0.1600E+02 -16.287 0.0000E+00 0.1600E+02 -16.279 0.0000E+00 0.1600E+02 -16.271 0.0000E+00 0.1600E+02 -16.262 0.0000E+00 0.1600E+02 -16.254 0.0000E+00 0.1600E+02 -16.246 0.0000E+00 0.1600E+02 -16.238 0.0000E+00 0.1600E+02 -16.229 0.0000E+00 0.1600E+02 -16.221 0.0000E+00 0.1600E+02 -16.213 0.0000E+00 0.1600E+02 -16.205 0.0000E+00 0.1600E+02 -16.196 0.0000E+00 0.1600E+02 -16.188 0.0000E+00 0.1600E+02 -16.180 0.0000E+00 0.1600E+02 -16.172 0.0000E+00 0.1600E+02 -16.164 0.0000E+00 0.1600E+02 -16.155 0.0000E+00 0.1600E+02 -16.147 0.0000E+00 0.1600E+02 -16.139 0.0000E+00 0.1600E+02 -16.131 0.0000E+00 0.1600E+02 -16.122 0.0000E+00 0.1600E+02 -16.114 0.0000E+00 0.1600E+02 -16.106 0.0000E+00 0.1600E+02 -16.098 0.0000E+00 0.1600E+02 -16.089 0.0000E+00 0.1600E+02 -16.081 0.0000E+00 0.1600E+02 -16.073 0.0000E+00 0.1600E+02 -16.065 0.0000E+00 0.1600E+02 -16.056 0.0000E+00 0.1600E+02 -16.048 0.0000E+00 0.1600E+02 -16.040 0.0000E+00 0.1600E+02 -16.032 0.0000E+00 0.1600E+02 -16.024 0.0000E+00 0.1600E+02 -16.015 0.0000E+00 0.1600E+02 -16.007 0.0000E+00 0.1600E+02 -15.999 0.0000E+00 0.1600E+02 -15.991 0.0000E+00 0.1600E+02 -15.982 0.0000E+00 0.1600E+02 -15.974 0.0000E+00 0.1600E+02 -15.966 0.0000E+00 0.1600E+02 -15.958 0.0000E+00 0.1600E+02 -15.949 0.0000E+00 0.1600E+02 -15.941 0.0000E+00 0.1600E+02 -15.933 0.0000E+00 0.1600E+02 -15.925 0.0000E+00 0.1600E+02 -15.917 0.0000E+00 0.1600E+02 -15.908 0.0000E+00 0.1600E+02 -15.900 0.0000E+00 0.1600E+02 -15.892 0.0000E+00 0.1600E+02 -15.884 0.0000E+00 0.1600E+02 -15.875 0.0000E+00 0.1600E+02 -15.867 0.0000E+00 0.1600E+02 -15.859 0.0000E+00 0.1600E+02 -15.851 0.0000E+00 0.1600E+02 -15.842 0.0000E+00 0.1600E+02 -15.834 0.0000E+00 0.1600E+02 -15.826 0.0000E+00 0.1600E+02 -15.818 0.0000E+00 0.1600E+02 -15.809 0.0000E+00 0.1600E+02 -15.801 0.0000E+00 0.1600E+02 -15.793 0.0000E+00 0.1600E+02 -15.785 0.0000E+00 0.1600E+02 -15.777 0.0000E+00 0.1600E+02 -15.768 0.0000E+00 0.1600E+02 -15.760 0.0000E+00 0.1600E+02 -15.752 0.0000E+00 0.1600E+02 -15.744 0.0000E+00 0.1600E+02 -15.735 0.0000E+00 0.1600E+02 -15.727 0.0000E+00 0.1600E+02 -15.719 0.0000E+00 0.1600E+02 -15.711 0.0000E+00 0.1600E+02 -15.702 0.0000E+00 0.1600E+02 -15.694 0.0000E+00 0.1600E+02 -15.686 0.0000E+00 0.1600E+02 -15.678 0.0000E+00 0.1600E+02 -15.669 0.0000E+00 0.1600E+02 -15.661 0.0000E+00 0.1600E+02 -15.653 0.0000E+00 0.1600E+02 -15.645 0.0000E+00 0.1600E+02 -15.637 0.0000E+00 0.1600E+02 -15.628 0.0000E+00 0.1600E+02 -15.620 0.0000E+00 0.1600E+02 -15.612 0.0000E+00 0.1600E+02 -15.604 0.0000E+00 0.1600E+02 -15.595 0.0000E+00 0.1600E+02 -15.587 0.0000E+00 0.1600E+02 -15.579 0.0000E+00 0.1600E+02 -15.571 0.0000E+00 0.1600E+02 -15.562 0.0000E+00 0.1600E+02 -15.554 0.0000E+00 0.1600E+02 -15.546 0.0000E+00 0.1600E+02 -15.538 0.0000E+00 0.1600E+02 -15.529 0.0000E+00 0.1600E+02 -15.521 0.0000E+00 0.1600E+02 -15.513 0.0000E+00 0.1600E+02 -15.505 0.0000E+00 0.1600E+02 -15.497 0.0000E+00 0.1600E+02 -15.488 0.0000E+00 0.1600E+02 -15.480 0.0000E+00 0.1600E+02 -15.472 0.0000E+00 0.1600E+02 -15.464 0.0000E+00 0.1600E+02 -15.455 0.0000E+00 0.1600E+02 -15.447 0.0000E+00 0.1600E+02 -15.439 0.0000E+00 0.1600E+02 -15.431 0.0000E+00 0.1600E+02 -15.422 0.0000E+00 0.1600E+02 -15.414 0.0000E+00 0.1600E+02 -15.406 0.0000E+00 0.1600E+02 -15.398 0.0000E+00 0.1600E+02 -15.389 0.0000E+00 0.1600E+02 -15.381 0.0000E+00 0.1600E+02 -15.373 0.0000E+00 0.1600E+02 -15.365 0.0000E+00 0.1600E+02 -15.357 0.0000E+00 0.1600E+02 -15.348 0.0000E+00 0.1600E+02 -15.340 0.0000E+00 0.1600E+02 -15.332 0.0000E+00 0.1600E+02 -15.324 0.0000E+00 0.1600E+02 -15.315 0.0000E+00 0.1600E+02 -15.307 0.0000E+00 0.1600E+02 -15.299 0.0000E+00 0.1600E+02 -15.291 0.0000E+00 0.1600E+02 -15.282 0.0000E+00 0.1600E+02 -15.274 0.0000E+00 0.1600E+02 -15.266 0.0000E+00 0.1600E+02 -15.258 0.0000E+00 0.1600E+02 -15.250 0.0000E+00 0.1600E+02 -15.241 0.0000E+00 0.1600E+02 -15.233 0.0000E+00 0.1600E+02 -15.225 0.0000E+00 0.1600E+02 -15.217 0.0000E+00 0.1600E+02 -15.208 0.0000E+00 0.1600E+02 -15.200 0.0000E+00 0.1600E+02 -15.192 0.0000E+00 0.1600E+02 -15.184 0.0000E+00 0.1600E+02 -15.175 0.0000E+00 0.1600E+02 -15.167 0.0000E+00 0.1600E+02 -15.159 0.0000E+00 0.1600E+02 -15.151 0.0000E+00 0.1600E+02 -15.142 0.0000E+00 0.1600E+02 -15.134 0.0000E+00 0.1600E+02 -15.126 0.0000E+00 0.1600E+02 -15.118 0.0000E+00 0.1600E+02 -15.110 0.0000E+00 0.1600E+02 -15.101 0.0000E+00 0.1600E+02 -15.093 0.0000E+00 0.1600E+02 -15.085 0.0000E+00 0.1600E+02 -15.077 0.0000E+00 0.1600E+02 -15.068 0.0000E+00 0.1600E+02 -15.060 0.0000E+00 0.1600E+02 -15.052 0.0000E+00 0.1600E+02 -15.044 0.0000E+00 0.1600E+02 -15.035 0.0000E+00 0.1600E+02 -15.027 0.0000E+00 0.1600E+02 -15.019 0.0000E+00 0.1600E+02 -15.011 0.0000E+00 0.1600E+02 -15.002 0.0000E+00 0.1600E+02 -14.994 0.0000E+00 0.1600E+02 -14.986 0.0000E+00 0.1600E+02 -14.978 0.0000E+00 0.1600E+02 -14.970 0.0000E+00 0.1600E+02 -14.961 0.0000E+00 0.1600E+02 -14.953 0.0000E+00 0.1600E+02 -14.945 0.0000E+00 0.1600E+02 -14.937 0.0000E+00 0.1600E+02 -14.928 0.0000E+00 0.1600E+02 -14.920 0.0000E+00 0.1600E+02 -14.912 0.0000E+00 0.1600E+02 -14.904 0.0000E+00 0.1600E+02 -14.895 0.0000E+00 0.1600E+02 -14.887 0.0000E+00 0.1600E+02 -14.879 0.0000E+00 0.1600E+02 -14.871 0.0000E+00 0.1600E+02 -14.862 0.0000E+00 0.1600E+02 -14.854 0.0000E+00 0.1600E+02 -14.846 0.0000E+00 0.1600E+02 -14.838 0.0000E+00 0.1600E+02 -14.830 0.0000E+00 0.1600E+02 -14.821 0.0000E+00 0.1600E+02 -14.813 0.0000E+00 0.1600E+02 -14.805 0.0000E+00 0.1600E+02 -14.797 0.0000E+00 0.1600E+02 -14.788 0.0000E+00 0.1600E+02 -14.780 0.0000E+00 0.1600E+02 -14.772 0.0000E+00 0.1600E+02 -14.764 0.0000E+00 0.1600E+02 -14.755 0.0000E+00 0.1600E+02 -14.747 0.0000E+00 0.1600E+02 -14.739 0.0000E+00 0.1600E+02 -14.731 0.0000E+00 0.1600E+02 -14.723 0.0000E+00 0.1600E+02 -14.714 0.0000E+00 0.1600E+02 -14.706 0.0000E+00 0.1600E+02 -14.698 0.0000E+00 0.1600E+02 -14.690 0.0000E+00 0.1600E+02 -14.681 0.0000E+00 0.1600E+02 -14.673 0.0000E+00 0.1600E+02 -14.665 0.0000E+00 0.1600E+02 -14.657 0.0000E+00 0.1600E+02 -14.648 0.0000E+00 0.1600E+02 -14.640 0.0000E+00 0.1600E+02 -14.632 0.0000E+00 0.1600E+02 -14.624 0.0000E+00 0.1600E+02 -14.615 0.0000E+00 0.1600E+02 -14.607 0.0000E+00 0.1600E+02 -14.599 0.0000E+00 0.1600E+02 -14.591 0.0000E+00 0.1600E+02 -14.583 0.0000E+00 0.1600E+02 -14.574 0.0000E+00 0.1600E+02 -14.566 0.0000E+00 0.1600E+02 -14.558 0.0000E+00 0.1600E+02 -14.550 0.0000E+00 0.1600E+02 -14.541 0.0000E+00 0.1600E+02 -14.533 0.0000E+00 0.1600E+02 -14.525 0.0000E+00 0.1600E+02 -14.517 0.0000E+00 0.1600E+02 -14.508 0.0000E+00 0.1600E+02 -14.500 0.0000E+00 0.1600E+02 -14.492 0.0000E+00 0.1600E+02 -14.484 0.0000E+00 0.1600E+02 -14.475 0.0000E+00 0.1600E+02 -14.467 0.0000E+00 0.1600E+02 -14.459 0.0000E+00 0.1600E+02 -14.451 0.0000E+00 0.1600E+02 -14.443 0.0000E+00 0.1600E+02 -14.434 0.0000E+00 0.1600E+02 -14.426 0.0000E+00 0.1600E+02 -14.418 0.0000E+00 0.1600E+02 -14.410 0.0000E+00 0.1600E+02 -14.401 0.0000E+00 0.1600E+02 -14.393 0.0000E+00 0.1600E+02 -14.385 0.0000E+00 0.1600E+02 -14.377 0.0000E+00 0.1600E+02 -14.368 0.0000E+00 0.1600E+02 -14.360 0.0000E+00 0.1600E+02 -14.352 0.0000E+00 0.1600E+02 -14.344 0.0000E+00 0.1600E+02 -14.335 0.0000E+00 0.1600E+02 -14.327 0.0000E+00 0.1600E+02 -14.319 0.0000E+00 0.1600E+02 -14.311 0.0000E+00 0.1600E+02 -14.303 0.0000E+00 0.1600E+02 -14.294 0.0000E+00 0.1600E+02 -14.286 0.0000E+00 0.1600E+02 -14.278 0.0000E+00 0.1600E+02 -14.270 0.0000E+00 0.1600E+02 -14.261 0.0000E+00 0.1600E+02 -14.253 0.0000E+00 0.1600E+02 -14.245 0.0000E+00 0.1600E+02 -14.237 0.0000E+00 0.1600E+02 -14.228 0.0000E+00 0.1600E+02 -14.220 0.0000E+00 0.1600E+02 -14.212 0.0000E+00 0.1600E+02 -14.204 0.0000E+00 0.1600E+02 -14.196 0.0000E+00 0.1600E+02 -14.187 0.0000E+00 0.1600E+02 -14.179 0.0000E+00 0.1600E+02 -14.171 0.0000E+00 0.1600E+02 -14.163 0.0000E+00 0.1600E+02 -14.154 0.0000E+00 0.1600E+02 -14.146 0.0000E+00 0.1600E+02 -14.138 0.0000E+00 0.1600E+02 -14.130 0.0000E+00 0.1600E+02 -14.121 0.0000E+00 0.1600E+02 -14.113 0.0000E+00 0.1600E+02 -14.105 0.0000E+00 0.1600E+02 -14.097 0.0000E+00 0.1600E+02 -14.088 0.0000E+00 0.1600E+02 -14.080 0.0000E+00 0.1600E+02 -14.072 0.0000E+00 0.1600E+02 -14.064 0.0000E+00 0.1600E+02 -14.056 0.0000E+00 0.1600E+02 -14.047 0.0000E+00 0.1600E+02 -14.039 0.0000E+00 0.1600E+02 -14.031 0.0000E+00 0.1600E+02 -14.023 0.0000E+00 0.1600E+02 -14.014 0.0000E+00 0.1600E+02 -14.006 0.0000E+00 0.1600E+02 -13.998 0.0000E+00 0.1600E+02 -13.990 0.0000E+00 0.1600E+02 -13.981 0.0000E+00 0.1600E+02 -13.973 0.0000E+00 0.1600E+02 -13.965 0.0000E+00 0.1600E+02 -13.957 0.0000E+00 0.1600E+02 -13.948 0.0000E+00 0.1600E+02 -13.940 0.0000E+00 0.1600E+02 -13.932 0.0000E+00 0.1600E+02 -13.924 0.0000E+00 0.1600E+02 -13.916 0.0000E+00 0.1600E+02 -13.907 0.0000E+00 0.1600E+02 -13.899 0.0000E+00 0.1600E+02 -13.891 0.0000E+00 0.1600E+02 -13.883 0.0000E+00 0.1600E+02 -13.874 0.0000E+00 0.1600E+02 -13.866 0.0000E+00 0.1600E+02 -13.858 0.0000E+00 0.1600E+02 -13.850 0.0000E+00 0.1600E+02 -13.841 0.0000E+00 0.1600E+02 -13.833 0.0000E+00 0.1600E+02 -13.825 0.0000E+00 0.1600E+02 -13.817 0.0000E+00 0.1600E+02 -13.808 0.0000E+00 0.1600E+02 -13.800 0.0000E+00 0.1600E+02 -13.792 0.0000E+00 0.1600E+02 -13.784 0.0000E+00 0.1600E+02 -13.776 0.0000E+00 0.1600E+02 -13.767 0.0000E+00 0.1600E+02 -13.759 0.0000E+00 0.1600E+02 -13.751 0.0000E+00 0.1600E+02 -13.743 0.0000E+00 0.1600E+02 -13.734 0.0000E+00 0.1600E+02 -13.726 0.0000E+00 0.1600E+02 -13.718 0.0000E+00 0.1600E+02 -13.710 0.0000E+00 0.1600E+02 -13.701 0.0000E+00 0.1600E+02 -13.693 0.0000E+00 0.1600E+02 -13.685 0.0000E+00 0.1600E+02 -13.677 0.0000E+00 0.1600E+02 -13.668 0.0000E+00 0.1600E+02 -13.660 0.0000E+00 0.1600E+02 -13.652 0.0000E+00 0.1600E+02 -13.644 0.0000E+00 0.1600E+02 -13.636 0.0000E+00 0.1600E+02 -13.627 0.0000E+00 0.1600E+02 -13.619 0.0000E+00 0.1600E+02 -13.611 0.0000E+00 0.1600E+02 -13.603 0.0000E+00 0.1600E+02 -13.594 0.0000E+00 0.1600E+02 -13.586 0.0000E+00 0.1600E+02 -13.578 0.0000E+00 0.1600E+02 -13.570 0.0000E+00 0.1600E+02 -13.561 0.0000E+00 0.1600E+02 -13.553 0.0000E+00 0.1600E+02 -13.545 0.0000E+00 0.1600E+02 -13.537 0.0000E+00 0.1600E+02 -13.529 0.0000E+00 0.1600E+02 -13.520 0.0000E+00 0.1600E+02 -13.512 0.0000E+00 0.1600E+02 -13.504 0.0000E+00 0.1600E+02 -13.496 0.0000E+00 0.1600E+02 -13.487 0.0000E+00 0.1600E+02 -13.479 0.0000E+00 0.1600E+02 -13.471 0.0000E+00 0.1600E+02 -13.463 0.0000E+00 0.1600E+02 -13.454 0.0000E+00 0.1600E+02 -13.446 0.0000E+00 0.1600E+02 -13.438 0.0000E+00 0.1600E+02 -13.430 0.0000E+00 0.1600E+02 -13.421 0.0000E+00 0.1600E+02 -13.413 0.0000E+00 0.1600E+02 -13.405 0.0000E+00 0.1600E+02 -13.397 0.0000E+00 0.1600E+02 -13.389 0.0000E+00 0.1600E+02 -13.380 0.0000E+00 0.1600E+02 -13.372 0.0000E+00 0.1600E+02 -13.364 0.0000E+00 0.1600E+02 -13.356 0.0000E+00 0.1600E+02 -13.347 0.0000E+00 0.1600E+02 -13.339 0.0000E+00 0.1600E+02 -13.331 0.0000E+00 0.1600E+02 -13.323 0.0000E+00 0.1600E+02 -13.314 0.0000E+00 0.1600E+02 -13.306 0.0000E+00 0.1600E+02 -13.298 0.0000E+00 0.1600E+02 -13.290 0.0000E+00 0.1600E+02 -13.281 0.0000E+00 0.1600E+02 -13.273 0.0000E+00 0.1600E+02 -13.265 0.0000E+00 0.1600E+02 -13.257 0.0000E+00 0.1600E+02 -13.249 0.0000E+00 0.1600E+02 -13.240 0.0000E+00 0.1600E+02 -13.232 0.0000E+00 0.1600E+02 -13.224 0.0000E+00 0.1600E+02 -13.216 0.0000E+00 0.1600E+02 -13.207 0.0000E+00 0.1600E+02 -13.199 0.0000E+00 0.1600E+02 -13.191 0.0000E+00 0.1600E+02 -13.183 0.0000E+00 0.1600E+02 -13.174 0.0000E+00 0.1600E+02 -13.166 0.0000E+00 0.1600E+02 -13.158 0.0000E+00 0.1600E+02 -13.150 0.0000E+00 0.1600E+02 -13.141 0.0000E+00 0.1600E+02 -13.133 0.0000E+00 0.1600E+02 -13.125 0.0000E+00 0.1600E+02 -13.117 0.0000E+00 0.1600E+02 -13.109 0.0000E+00 0.1600E+02 -13.100 0.0000E+00 0.1600E+02 -13.092 0.0000E+00 0.1600E+02 -13.084 0.0000E+00 0.1600E+02 -13.076 0.0000E+00 0.1600E+02 -13.067 0.0000E+00 0.1600E+02 -13.059 0.0000E+00 0.1600E+02 -13.051 0.0000E+00 0.1600E+02 -13.043 0.0000E+00 0.1600E+02 -13.034 0.0000E+00 0.1600E+02 -13.026 0.0000E+00 0.1600E+02 -13.018 0.0000E+00 0.1600E+02 -13.010 0.0000E+00 0.1600E+02 -13.002 0.0000E+00 0.1600E+02 -12.993 0.0000E+00 0.1600E+02 -12.985 0.0000E+00 0.1600E+02 -12.977 0.0000E+00 0.1600E+02 -12.969 0.0000E+00 0.1600E+02 -12.960 0.0000E+00 0.1600E+02 -12.952 0.0000E+00 0.1600E+02 -12.944 0.0000E+00 0.1600E+02 -12.936 0.0000E+00 0.1600E+02 -12.927 0.0000E+00 0.1600E+02 -12.919 0.0000E+00 0.1600E+02 -12.911 0.0000E+00 0.1600E+02 -12.903 0.0000E+00 0.1600E+02 -12.894 0.5527E-02 0.1600E+02 -12.886 0.2132E+00 0.1600E+02 -12.878 0.5363E+00 0.1600E+02 -12.870 0.9393E+00 0.1601E+02 -12.862 0.1410E+01 0.1602E+02 -12.853 0.1714E+01 0.1603E+02 -12.845 0.1908E+01 0.1605E+02 -12.837 0.2030E+01 0.1606E+02 -12.829 0.2156E+01 0.1608E+02 -12.820 0.2544E+01 0.1610E+02 -12.812 0.3589E+01 0.1612E+02 -12.804 0.4576E+01 0.1616E+02 -12.796 0.5445E+01 0.1620E+02 -12.787 0.6640E+01 0.1625E+02 -12.779 0.7088E+01 0.1631E+02 -12.771 0.7468E+01 0.1637E+02 -12.763 0.7907E+01 0.1643E+02 -12.754 0.8372E+01 0.1650E+02 -12.746 0.8778E+01 0.1657E+02 -12.738 0.9676E+01 0.1664E+02 -12.730 0.1017E+02 0.1673E+02 -12.722 0.9813E+01 0.1681E+02 -12.713 0.9752E+01 0.1689E+02 -12.705 0.9968E+01 0.1697E+02 -12.697 0.1049E+02 0.1705E+02 -12.689 0.1197E+02 0.1714E+02 -12.680 0.1363E+02 0.1725E+02 -12.672 0.1510E+02 0.1737E+02 -12.664 0.1611E+02 0.1750E+02 -12.656 0.1584E+02 0.1763E+02 -12.647 0.1682E+02 0.1776E+02 -12.639 0.1651E+02 0.1790E+02 -12.631 0.1517E+02 0.1803E+02 -12.623 0.1323E+02 0.1815E+02 -12.614 0.1233E+02 0.1825E+02 -12.606 0.1118E+02 0.1835E+02 -12.598 0.1062E+02 0.1844E+02 -12.590 0.1036E+02 0.1853E+02 -12.582 0.1018E+02 0.1861E+02 -12.573 0.1009E+02 0.1870E+02 -12.565 0.1003E+02 0.1878E+02 -12.557 0.9940E+01 0.1886E+02 -12.549 0.9845E+01 0.1894E+02 -12.540 0.9757E+01 0.1902E+02 -12.532 0.9672E+01 0.1910E+02 -12.524 0.9599E+01 0.1918E+02 -12.516 0.9498E+01 0.1926E+02 -12.507 0.9517E+01 0.1934E+02 -12.499 0.9492E+01 0.1942E+02 -12.491 0.9455E+01 0.1950E+02 -12.483 0.9433E+01 0.1957E+02 -12.474 0.9660E+01 0.1965E+02 -12.466 0.1000E+02 0.1973E+02 -12.458 0.1037E+02 0.1982E+02 -12.450 0.1211E+02 0.1991E+02 -12.442 0.1848E+02 0.2003E+02 -12.433 0.1316E+02 0.2015E+02 -12.425 0.1317E+02 0.2026E+02 -12.417 0.1297E+02 0.2036E+02 -12.409 0.1354E+02 0.2047E+02 -12.400 0.1332E+02 0.2058E+02 -12.392 0.1396E+02 0.2070E+02 -12.384 0.1387E+02 0.2082E+02 -12.376 0.1288E+02 0.2092E+02 -12.367 0.1181E+02 0.2102E+02 -12.359 0.1129E+02 0.2112E+02 -12.351 0.1094E+02 0.2121E+02 -12.343 0.1068E+02 0.2130E+02 -12.335 0.1046E+02 0.2139E+02 -12.326 0.1065E+02 0.2147E+02 -12.318 0.1072E+02 0.2156E+02 -12.310 0.1073E+02 0.2165E+02 -12.302 0.1089E+02 0.2174E+02 -12.293 0.1126E+02 0.2183E+02 -12.285 0.1071E+02 0.2192E+02 -12.277 0.1075E+02 0.2201E+02 -12.269 0.1320E+02 0.2211E+02 -12.260 0.1265E+02 0.2221E+02 -12.252 0.1112E+02 0.2231E+02 -12.244 0.1083E+02 0.2240E+02 -12.236 0.1045E+02 0.2249E+02 -12.227 0.1003E+02 0.2257E+02 -12.219 0.9664E+01 0.2265E+02 -12.211 0.1120E+02 0.2274E+02 -12.203 0.9857E+01 0.2282E+02 -12.195 0.9432E+01 0.2290E+02 -12.186 0.9346E+01 0.2298E+02 -12.178 0.9238E+01 0.2305E+02 -12.170 0.9139E+01 0.2313E+02 -12.162 0.9129E+01 0.2321E+02 -12.153 0.9202E+01 0.2328E+02 -12.145 0.9199E+01 0.2336E+02 -12.137 0.9244E+01 0.2344E+02 -12.129 0.9351E+01 0.2351E+02 -12.120 0.9392E+01 0.2359E+02 -12.112 0.9450E+01 0.2367E+02 -12.104 0.9603E+01 0.2375E+02 -12.096 0.9643E+01 0.2383E+02 -12.087 0.9868E+01 0.2390E+02 -12.079 0.1010E+02 0.2399E+02 -12.071 0.9714E+01 0.2407E+02 -12.063 0.9457E+01 0.2415E+02 -12.055 0.9476E+01 0.2423E+02 -12.046 0.9427E+01 0.2430E+02 -12.038 0.9430E+01 0.2438E+02 -12.030 0.9609E+01 0.2446E+02 -12.022 0.9760E+01 0.2454E+02 -12.013 0.1000E+02 0.2462E+02 -12.005 0.1013E+02 0.2470E+02 -11.997 0.1026E+02 0.2479E+02 -11.989 0.1024E+02 0.2487E+02 -11.980 0.1038E+02 0.2496E+02 -11.972 0.1043E+02 0.2504E+02 -11.964 0.9341E+01 0.2512E+02 -11.956 0.9016E+01 0.2520E+02 -11.947 0.8988E+01 0.2527E+02 -11.939 0.9516E+01 0.2535E+02 -11.931 0.1031E+02 0.2543E+02 -11.923 0.1031E+02 0.2551E+02 -11.915 0.1011E+02 0.2560E+02 -11.906 0.1070E+02 0.2568E+02 -11.898 0.1120E+02 0.2577E+02 -11.890 0.1162E+02 0.2587E+02 -11.882 0.1222E+02 0.2596E+02 -11.873 0.1213E+02 0.2607E+02 -11.865 0.1187E+02 0.2616E+02 -11.857 0.1139E+02 0.2626E+02 -11.849 0.1072E+02 0.2635E+02 -11.840 0.1014E+02 0.2644E+02 -11.832 0.9589E+01 0.2652E+02 -11.824 0.9185E+01 0.2660E+02 -11.816 0.9930E+01 0.2667E+02 -11.808 0.8797E+01 0.2675E+02 -11.799 0.8236E+01 0.2682E+02 -11.791 0.8307E+01 0.2689E+02 -11.783 0.8439E+01 0.2696E+02 -11.775 0.8640E+01 0.2703E+02 -11.766 0.8933E+01 0.2710E+02 -11.758 0.9181E+01 0.2718E+02 -11.750 0.9226E+01 0.2725E+02 -11.742 0.8988E+01 0.2733E+02 -11.733 0.8787E+01 0.2740E+02 -11.725 0.8728E+01 0.2747E+02 -11.717 0.8836E+01 0.2754E+02 -11.709 0.9063E+01 0.2762E+02 -11.700 0.9318E+01 0.2769E+02 -11.692 0.9579E+01 0.2777E+02 -11.684 0.9841E+01 0.2785E+02 -11.676 0.9714E+01 0.2793E+02 -11.668 0.9531E+01 0.2801E+02 -11.659 0.9336E+01 0.2809E+02 -11.651 0.9191E+01 0.2816E+02 -11.643 0.9690E+01 0.2824E+02 -11.635 0.9644E+01 0.2832E+02 -11.626 0.9807E+01 0.2840E+02 -11.618 0.9407E+01 0.2848E+02 -11.610 0.9027E+01 0.2856E+02 -11.602 0.8669E+01 0.2863E+02 -11.593 0.8529E+01 0.2870E+02 -11.585 0.8339E+01 0.2877E+02 -11.577 0.8320E+01 0.2884E+02 -11.569 0.8353E+01 0.2891E+02 -11.560 0.8368E+01 0.2898E+02 -11.552 0.8406E+01 0.2905E+02 -11.544 0.8504E+01 0.2911E+02 -11.536 0.8873E+01 0.2919E+02 -11.528 0.8669E+01 0.2926E+02 -11.519 0.8835E+01 0.2933E+02 -11.511 0.9004E+01 0.2941E+02 -11.503 0.9165E+01 0.2948E+02 -11.495 0.9352E+01 0.2956E+02 -11.486 0.9347E+01 0.2963E+02 -11.478 0.9138E+01 0.2971E+02 -11.470 0.9245E+01 0.2979E+02 -11.462 0.9293E+01 0.2986E+02 -11.453 0.9760E+01 0.2994E+02 -11.445 0.1001E+02 0.3002E+02 -11.437 0.1006E+02 0.3011E+02 -11.429 0.9937E+01 0.3019E+02 -11.420 0.9672E+01 0.3027E+02 -11.412 0.9570E+01 0.3035E+02 -11.404 0.9503E+01 0.3043E+02 -11.396 0.9842E+01 0.3050E+02 -11.388 0.9645E+01 0.3059E+02 -11.379 0.9607E+01 0.3066E+02 -11.371 0.9698E+01 0.3074E+02 -11.363 0.1007E+02 0.3082E+02 -11.355 0.1097E+02 0.3091E+02 -11.346 0.1076E+02 0.3100E+02 -11.338 0.1101E+02 0.3109E+02 -11.330 0.1104E+02 0.3118E+02 -11.322 0.1118E+02 0.3127E+02 -11.313 0.1136E+02 0.3137E+02 -11.305 0.1120E+02 0.3146E+02 -11.297 0.1096E+02 0.3155E+02 -11.289 0.1058E+02 0.3164E+02 -11.281 0.1041E+02 0.3173E+02 -11.272 0.1024E+02 0.3181E+02 -11.264 0.1004E+02 0.3189E+02 -11.256 0.9925E+01 0.3198E+02 -11.248 0.1002E+02 0.3206E+02 -11.239 0.1018E+02 0.3214E+02 -11.231 0.1045E+02 0.3223E+02 -11.223 0.1074E+02 0.3231E+02 -11.215 0.1098E+02 0.3240E+02 -11.206 0.1111E+02 0.3249E+02 -11.198 0.1154E+02 0.3259E+02 -11.190 0.1124E+02 0.3268E+02 -11.182 0.1143E+02 0.3278E+02 -11.173 0.1158E+02 0.3287E+02 -11.165 0.1186E+02 0.3297E+02 -11.157 0.1132E+02 0.3306E+02 -11.149 0.1098E+02 0.3315E+02 -11.141 0.1042E+02 0.3324E+02 -11.132 0.9851E+01 0.3333E+02 -11.124 0.9389E+01 0.3340E+02 -11.116 0.9347E+01 0.3348E+02 -11.108 0.9405E+01 0.3356E+02 -11.099 0.9583E+01 0.3364E+02 -11.091 0.9756E+01 0.3372E+02 -11.083 0.1019E+02 0.3380E+02 -11.075 0.1047E+02 0.3388E+02 -11.066 0.1060E+02 0.3397E+02 -11.058 0.1070E+02 0.3406E+02 -11.050 0.1084E+02 0.3415E+02 -11.042 0.1113E+02 0.3424E+02 -11.033 0.1126E+02 0.3433E+02 -11.025 0.1108E+02 0.3442E+02 -11.017 0.1106E+02 0.3451E+02 -11.009 0.1093E+02 0.3460E+02 -11.001 0.1111E+02 0.3469E+02 -10.992 0.1177E+02 0.3479E+02 -10.984 0.1182E+02 0.3489E+02 -10.976 0.1216E+02 0.3499E+02 -10.968 0.1245E+02 0.3509E+02 -10.959 0.1275E+02 0.3519E+02 -10.951 0.1252E+02 0.3530E+02 -10.943 0.1241E+02 0.3540E+02 -10.935 0.1216E+02 0.3550E+02 -10.926 0.1120E+02 0.3560E+02 -10.918 0.9011E+01 0.3568E+02 -10.910 0.8646E+01 0.3575E+02 -10.902 0.8222E+01 0.3582E+02 -10.893 0.7801E+01 0.3589E+02 -10.885 0.7526E+01 0.3595E+02 -10.877 0.7595E+01 0.3601E+02 -10.869 0.7791E+01 0.3607E+02 -10.861 0.8464E+01 0.3614E+02 -10.852 0.8144E+01 0.3621E+02 -10.844 0.8282E+01 0.3628E+02 -10.836 0.8605E+01 0.3635E+02 -10.828 0.8835E+01 0.3642E+02 -10.819 0.8931E+01 0.3649E+02 -10.811 0.9435E+01 0.3657E+02 -10.803 0.9851E+01 0.3665E+02 -10.795 0.1024E+02 0.3673E+02 -10.786 0.1056E+02 0.3682E+02 -10.778 0.1092E+02 0.3690E+02 -10.770 0.1123E+02 0.3699E+02 -10.762 0.1131E+02 0.3709E+02 -10.753 0.1132E+02 0.3718E+02 -10.745 0.1140E+02 0.3727E+02 -10.737 0.1165E+02 0.3737E+02 -10.729 0.1137E+02 0.3746E+02 -10.721 0.1109E+02 0.3756E+02 -10.712 0.1087E+02 0.3765E+02 -10.704 0.1076E+02 0.3774E+02 -10.696 0.1073E+02 0.3782E+02 -10.688 0.1060E+02 0.3791E+02 -10.679 0.1041E+02 0.3800E+02 -10.671 0.1028E+02 0.3808E+02 -10.663 0.1012E+02 0.3817E+02 -10.655 0.1042E+02 0.3825E+02 -10.646 0.1106E+02 0.3834E+02 -10.638 0.1189E+02 0.3843E+02 -10.630 0.1247E+02 0.3854E+02 -10.622 0.1265E+02 0.3864E+02 -10.614 0.1249E+02 0.3874E+02 -10.605 0.1226E+02 0.3884E+02 -10.597 0.1179E+02 0.3894E+02 -10.589 0.1115E+02 0.3904E+02 -10.581 0.1063E+02 0.3913E+02 -10.572 0.1012E+02 0.3921E+02 -10.564 0.9900E+01 0.3930E+02 -10.556 0.9346E+01 0.3938E+02 -10.548 0.8927E+01 0.3945E+02 -10.539 0.8483E+01 0.3953E+02 -10.531 0.8105E+01 0.3959E+02 -10.523 0.8026E+01 0.3966E+02 -10.515 0.7728E+01 0.3973E+02 -10.506 0.7339E+01 0.3979E+02 -10.498 0.6990E+01 0.3985E+02 -10.490 0.6631E+01 0.3990E+02 -10.482 0.6237E+01 0.3996E+02 -10.474 0.5543E+01 0.4000E+02 -10.465 0.5224E+01 0.4005E+02 -10.457 0.5333E+01 0.4009E+02 -10.449 0.5178E+01 0.4013E+02 -10.441 0.5489E+01 0.4018E+02 -10.432 0.5470E+01 0.4022E+02 -10.424 0.5528E+01 0.4027E+02 -10.416 0.5846E+01 0.4032E+02 -10.408 0.6427E+01 0.4037E+02 -10.399 0.7140E+01 0.4042E+02 -10.391 0.8112E+01 0.4048E+02 -10.383 0.9274E+01 0.4056E+02 -10.375 0.1057E+02 0.4064E+02 -10.366 0.1163E+02 0.4073E+02 -10.358 0.1294E+02 0.4083E+02 -10.350 0.1469E+02 0.4094E+02 -10.342 0.1464E+02 0.4107E+02 -10.334 0.1464E+02 0.4119E+02 -10.325 0.1487E+02 0.4131E+02 -10.317 0.1479E+02 0.4143E+02 -10.309 0.1557E+02 0.4156E+02 -10.301 0.1514E+02 0.4168E+02 -10.292 0.1379E+02 0.4180E+02 -10.284 0.1306E+02 0.4191E+02 -10.276 0.1289E+02 0.4202E+02 -10.268 0.1262E+02 0.4213E+02 -10.259 0.1253E+02 0.4223E+02 -10.251 0.1244E+02 0.4233E+02 -10.243 0.1256E+02 0.4243E+02 -10.235 0.1389E+02 0.4254E+02 -10.226 0.1461E+02 0.4266E+02 -10.218 0.1340E+02 0.4277E+02 -10.210 0.1349E+02 0.4289E+02 -10.202 0.1334E+02 0.4300E+02 -10.194 0.1195E+02 0.4310E+02 -10.185 0.1140E+02 0.4320E+02 -10.177 0.1167E+02 0.4329E+02 -10.169 0.1198E+02 0.4339E+02 -10.161 0.1292E+02 0.4349E+02 -10.152 0.1382E+02 0.4360E+02 -10.144 0.1384E+02 0.4372E+02 -10.136 0.1374E+02 0.4383E+02 -10.128 0.1273E+02 0.4394E+02 -10.119 0.1213E+02 0.4405E+02 -10.111 0.1136E+02 0.4415E+02 -10.103 0.1006E+02 0.4423E+02 -10.095 0.8896E+01 0.4431E+02 -10.087 0.8459E+01 0.4438E+02 -10.078 0.8688E+01 0.4445E+02 -10.070 0.9589E+01 0.4453E+02 -10.062 0.1083E+02 0.4461E+02 -10.054 0.1193E+02 0.4471E+02 -10.045 0.1340E+02 0.4481E+02 -10.037 0.1488E+02 0.4493E+02 -10.029 0.1593E+02 0.4505E+02 -10.021 0.1627E+02 0.4519E+02 -10.012 0.1667E+02 0.4532E+02 -10.004 0.1817E+02 0.4546E+02 -9.996 0.1599E+02 0.4560E+02 -9.988 0.1561E+02 0.4573E+02 -9.979 0.1463E+02 0.4586E+02 -9.971 0.1373E+02 0.4597E+02 -9.963 0.1348E+02 0.4608E+02 -9.955 0.1315E+02 0.4619E+02 -9.947 0.1274E+02 0.4630E+02 -9.938 0.1259E+02 0.4640E+02 -9.930 0.1261E+02 0.4651E+02 -9.922 0.1313E+02 0.4662E+02 -9.914 0.1211E+02 0.4672E+02 -9.905 0.1257E+02 0.4682E+02 -9.897 0.1300E+02 0.4692E+02 -9.889 0.1276E+02 0.4703E+02 -9.881 0.1296E+02 0.4713E+02 -9.872 0.1272E+02 0.4724E+02 -9.864 0.1215E+02 0.4734E+02 -9.856 0.1125E+02 0.4744E+02 -9.848 0.1057E+02 0.4753E+02 -9.839 0.1051E+02 0.4761E+02 -9.831 0.1010E+02 0.4770E+02 -9.823 0.9458E+01 0.4778E+02 -9.815 0.8812E+01 0.4786E+02 -9.807 0.8475E+01 0.4793E+02 -9.798 0.8315E+01 0.4800E+02 -9.790 0.8698E+01 0.4807E+02 -9.782 0.7807E+01 0.4814E+02 -9.774 0.7954E+01 0.4820E+02 -9.765 0.8725E+01 0.4827E+02 -9.757 0.9542E+01 0.4834E+02 -9.749 0.1030E+02 0.4842E+02 -9.741 0.1175E+02 0.4852E+02 -9.732 0.1238E+02 0.4862E+02 -9.724 0.1320E+02 0.4872E+02 -9.716 0.1431E+02 0.4883E+02 -9.708 0.1507E+02 0.4896E+02 -9.699 0.1579E+02 0.4908E+02 -9.691 0.1565E+02 0.4921E+02 -9.683 0.1512E+02 0.4934E+02 -9.675 0.1478E+02 0.4946E+02 -9.667 0.1405E+02 0.4958E+02 -9.658 0.1349E+02 0.4970E+02 -9.650 0.1337E+02 0.4981E+02 -9.642 0.1384E+02 0.4992E+02 -9.634 0.1362E+02 0.5003E+02 -9.625 0.1458E+02 0.5015E+02 -9.617 0.1536E+02 0.5027E+02 -9.609 0.1668E+02 0.5040E+02 -9.601 0.1653E+02 0.5054E+02 -9.592 0.1706E+02 0.5068E+02 -9.584 0.1810E+02 0.5082E+02 -9.576 0.1946E+02 0.5098E+02 -9.568 0.2031E+02 0.5114E+02 -9.560 0.2015E+02 0.5131E+02 -9.551 0.1745E+02 0.5146E+02 -9.543 0.1514E+02 0.5160E+02 -9.535 0.1228E+02 0.5171E+02 -9.527 0.1086E+02 0.5180E+02 -9.518 0.1029E+02 0.5189E+02 -9.510 0.9914E+01 0.5197E+02 -9.502 0.9454E+01 0.5205E+02 -9.494 0.9270E+01 0.5213E+02 -9.485 0.9307E+01 0.5221E+02 -9.477 0.9930E+01 0.5229E+02 -9.469 0.1091E+02 0.5237E+02 -9.461 0.1262E+02 0.5247E+02 -9.452 0.1299E+02 0.5258E+02 -9.444 0.1330E+02 0.5268E+02 -9.436 0.1411E+02 0.5280E+02 -9.428 0.1437E+02 0.5291E+02 -9.420 0.1486E+02 0.5304E+02 -9.411 0.1684E+02 0.5317E+02 -9.403 0.1698E+02 0.5331E+02 -9.395 0.1773E+02 0.5345E+02 -9.387 0.1780E+02 0.5360E+02 -9.378 0.1836E+02 0.5374E+02 -9.370 0.1956E+02 0.5390E+02 -9.362 0.1906E+02 0.5406E+02 -9.354 0.1808E+02 0.5421E+02 -9.345 0.1812E+02 0.5436E+02 -9.337 0.1856E+02 0.5451E+02 -9.329 0.1899E+02 0.5467E+02 -9.321 0.1844E+02 0.5482E+02 -9.312 0.1821E+02 0.5498E+02 -9.304 0.1760E+02 0.5512E+02 -9.296 0.1607E+02 0.5526E+02 -9.288 0.1395E+02 0.5539E+02 -9.280 0.1305E+02 0.5550E+02 -9.271 0.1192E+02 0.5560E+02 -9.263 0.1095E+02 0.5569E+02 -9.255 0.1067E+02 0.5578E+02 -9.247 0.1112E+02 0.5587E+02 -9.238 0.1197E+02 0.5597E+02 -9.230 0.1085E+02 0.5606E+02 -9.222 0.9668E+01 0.5615E+02 -9.214 0.9078E+01 0.5622E+02 -9.205 0.9548E+01 0.5630E+02 -9.197 0.1014E+02 0.5638E+02 -9.189 0.1098E+02 0.5647E+02 -9.181 0.1239E+02 0.5656E+02 -9.172 0.1411E+02 0.5667E+02 -9.164 0.1334E+02 0.5678E+02 -9.156 0.1324E+02 0.5689E+02 -9.148 0.1420E+02 0.5701E+02 -9.140 0.1486E+02 0.5712E+02 -9.131 0.1563E+02 0.5725E+02 -9.123 0.1617E+02 0.5738E+02 -9.115 0.1800E+02 0.5752E+02 -9.107 0.1908E+02 0.5768E+02 -9.098 0.1941E+02 0.5783E+02 -9.090 0.1848E+02 0.5799E+02 -9.082 0.1606E+02 0.5813E+02 -9.074 0.1487E+02 0.5826E+02 -9.065 0.1416E+02 0.5838E+02 -9.057 0.1403E+02 0.5849E+02 -9.049 0.1468E+02 0.5861E+02 -9.041 0.1686E+02 0.5874E+02 -9.032 0.1840E+02 0.5889E+02 -9.024 0.1940E+02 0.5904E+02 -9.016 0.2027E+02 0.5921E+02 -9.008 0.2094E+02 0.5938E+02 -9.000 0.2224E+02 0.5956E+02 -8.991 0.1955E+02 0.5973E+02 -8.983 0.1974E+02 0.5989E+02 -8.975 0.2150E+02 0.6006E+02 -8.967 0.2726E+02 0.6025E+02 -8.958 0.2007E+02 0.6043E+02 -8.950 0.1880E+02 0.6058E+02 -8.942 0.1910E+02 0.6074E+02 -8.934 0.2144E+02 0.6090E+02 -8.925 0.2114E+02 0.6108E+02 -8.917 0.2247E+02 0.6125E+02 -8.909 0.2204E+02 0.6144E+02 -8.901 0.2300E+02 0.6162E+02 -8.893 0.2266E+02 0.6181E+02 -8.884 0.2324E+02 0.6200E+02 -8.876 0.1798E+02 0.6217E+02 -8.868 0.1682E+02 0.6231E+02 -8.860 0.1455E+02 0.6243E+02 -8.851 0.1545E+02 0.6256E+02 -8.843 0.1666E+02 0.6270E+02 -8.835 0.1847E+02 0.6284E+02 -8.827 0.2051E+02 0.6300E+02 -8.818 0.2137E+02 0.6317E+02 -8.810 0.2322E+02 0.6336E+02 -8.802 0.1897E+02 0.6353E+02 -8.794 0.1714E+02 0.6368E+02 -8.785 0.1510E+02 0.6381E+02 -8.777 0.9163E+01 0.6391E+02 -8.769 0.4742E+01 0.6397E+02 -8.761 0.1199E+01 0.6400E+02 -8.753 0.0000E+00 0.6400E+02 -8.744 0.0000E+00 0.6400E+02 -8.736 0.0000E+00 0.6400E+02 -8.728 0.0000E+00 0.6400E+02 -8.720 0.0000E+00 0.6400E+02 -8.711 0.0000E+00 0.6400E+02 -8.703 0.0000E+00 0.6400E+02 -8.695 0.0000E+00 0.6400E+02 -8.687 0.0000E+00 0.6400E+02 -8.678 0.0000E+00 0.6400E+02 -8.670 0.0000E+00 0.6400E+02 -8.662 0.0000E+00 0.6400E+02 -8.654 0.0000E+00 0.6400E+02 -8.645 0.0000E+00 0.6400E+02 -8.637 0.0000E+00 0.6400E+02 -8.629 0.0000E+00 0.6400E+02 -8.621 0.0000E+00 0.6400E+02 -8.613 0.0000E+00 0.6400E+02 -8.604 0.0000E+00 0.6400E+02 -8.596 0.0000E+00 0.6400E+02 -8.588 0.0000E+00 0.6400E+02 -8.580 0.0000E+00 0.6400E+02 -8.571 0.0000E+00 0.6400E+02 -8.563 0.0000E+00 0.6400E+02 -8.555 0.0000E+00 0.6400E+02 -8.547 0.0000E+00 0.6400E+02 -8.538 0.0000E+00 0.6400E+02 -8.530 0.0000E+00 0.6400E+02 -8.522 0.0000E+00 0.6400E+02 -8.514 0.0000E+00 0.6400E+02 -8.505 0.0000E+00 0.6400E+02 -8.497 0.0000E+00 0.6400E+02 -8.489 0.0000E+00 0.6400E+02 -8.481 0.0000E+00 0.6400E+02 -8.473 0.0000E+00 0.6400E+02 -8.464 0.0000E+00 0.6400E+02 -8.456 0.0000E+00 0.6400E+02 -8.448 0.0000E+00 0.6400E+02 -8.440 0.0000E+00 0.6400E+02 -8.431 0.0000E+00 0.6400E+02 -8.423 0.0000E+00 0.6400E+02 -8.415 0.0000E+00 0.6400E+02 -8.407 0.0000E+00 0.6400E+02 -8.398 0.0000E+00 0.6400E+02 -8.390 0.0000E+00 0.6400E+02 -8.382 0.0000E+00 0.6400E+02 -8.374 0.0000E+00 0.6400E+02 -8.366 0.0000E+00 0.6400E+02 -8.357 0.0000E+00 0.6400E+02 -8.349 0.0000E+00 0.6400E+02 -8.341 0.0000E+00 0.6400E+02 -8.333 0.0000E+00 0.6400E+02 -8.324 0.0000E+00 0.6400E+02 -8.316 0.0000E+00 0.6400E+02 -8.308 0.0000E+00 0.6400E+02 -8.300 0.0000E+00 0.6400E+02 -8.291 0.0000E+00 0.6400E+02 -8.283 0.0000E+00 0.6400E+02 -8.275 0.0000E+00 0.6400E+02 -8.267 0.0000E+00 0.6400E+02 -8.258 0.0000E+00 0.6400E+02 -8.250 0.0000E+00 0.6400E+02 -8.242 0.0000E+00 0.6400E+02 -8.234 0.0000E+00 0.6400E+02 -8.226 0.0000E+00 0.6400E+02 -8.217 0.0000E+00 0.6400E+02 -8.209 0.0000E+00 0.6400E+02 -8.201 0.0000E+00 0.6400E+02 -8.193 0.0000E+00 0.6400E+02 -8.184 0.0000E+00 0.6400E+02 -8.176 0.0000E+00 0.6400E+02 -8.168 0.0000E+00 0.6400E+02 -8.160 0.0000E+00 0.6400E+02 -8.151 0.0000E+00 0.6400E+02 -8.143 0.0000E+00 0.6400E+02 -8.135 0.0000E+00 0.6400E+02 -8.127 0.0000E+00 0.6400E+02 -8.118 0.0000E+00 0.6400E+02 -8.110 0.0000E+00 0.6400E+02 -8.102 0.0000E+00 0.6400E+02 -8.094 0.0000E+00 0.6400E+02 -8.086 0.0000E+00 0.6400E+02 -8.077 0.0000E+00 0.6400E+02 -8.069 0.0000E+00 0.6400E+02 -8.061 0.0000E+00 0.6400E+02 -8.053 0.0000E+00 0.6400E+02 -8.044 0.0000E+00 0.6400E+02 -8.036 0.0000E+00 0.6400E+02 -8.028 0.0000E+00 0.6400E+02 -8.020 0.0000E+00 0.6400E+02 -8.011 0.0000E+00 0.6400E+02 -8.003 0.0000E+00 0.6400E+02 -7.995 0.0000E+00 0.6400E+02 -7.987 0.0000E+00 0.6400E+02 -7.978 0.0000E+00 0.6400E+02 -7.970 0.0000E+00 0.6400E+02 -7.962 0.0000E+00 0.6400E+02 -7.954 0.0000E+00 0.6400E+02 -7.946 0.0000E+00 0.6400E+02 -7.937 0.0000E+00 0.6400E+02 -7.929 0.0000E+00 0.6400E+02 -7.921 0.0000E+00 0.6400E+02 -7.913 0.0000E+00 0.6400E+02 -7.904 0.0000E+00 0.6400E+02 -7.896 0.0000E+00 0.6400E+02 -7.888 0.0000E+00 0.6400E+02 -7.880 0.0000E+00 0.6400E+02 -7.871 0.0000E+00 0.6400E+02 -7.863 0.0000E+00 0.6400E+02 -7.855 0.0000E+00 0.6400E+02 -7.847 0.0000E+00 0.6400E+02 -7.838 0.0000E+00 0.6400E+02 -7.830 0.0000E+00 0.6400E+02 -7.822 0.0000E+00 0.6400E+02 -7.814 0.0000E+00 0.6400E+02 -7.806 0.0000E+00 0.6400E+02 -7.797 0.0000E+00 0.6400E+02 -7.789 0.0000E+00 0.6400E+02 -7.781 0.0000E+00 0.6400E+02 -7.773 0.0000E+00 0.6400E+02 -7.764 0.0000E+00 0.6400E+02 -7.756 0.0000E+00 0.6400E+02 -7.748 0.0000E+00 0.6400E+02 -7.740 0.0000E+00 0.6400E+02 -7.731 0.0000E+00 0.6400E+02 -7.723 0.0000E+00 0.6400E+02 -7.715 0.0000E+00 0.6400E+02 -7.707 0.0000E+00 0.6400E+02 -7.699 0.0000E+00 0.6400E+02 -7.690 0.0000E+00 0.6400E+02 -7.682 0.0000E+00 0.6400E+02 -7.674 0.0000E+00 0.6400E+02 -7.666 0.0000E+00 0.6400E+02 -7.657 0.0000E+00 0.6400E+02 -7.649 0.0000E+00 0.6400E+02 -7.641 0.0000E+00 0.6400E+02 -7.633 0.0000E+00 0.6400E+02 -7.624 0.0000E+00 0.6400E+02 -7.616 0.0000E+00 0.6400E+02 -7.608 0.0000E+00 0.6400E+02 -7.600 0.0000E+00 0.6400E+02 -7.591 0.0000E+00 0.6400E+02 -7.583 0.0000E+00 0.6400E+02 -7.575 0.0000E+00 0.6400E+02 -7.567 0.0000E+00 0.6400E+02 -7.559 0.0000E+00 0.6400E+02 -7.550 0.0000E+00 0.6400E+02 -7.542 0.0000E+00 0.6400E+02 -7.534 0.0000E+00 0.6400E+02 -7.526 0.0000E+00 0.6400E+02 -7.517 0.0000E+00 0.6400E+02 -7.509 0.0000E+00 0.6400E+02 -7.501 0.0000E+00 0.6400E+02 -7.493 0.0000E+00 0.6400E+02 -7.484 0.0000E+00 0.6400E+02 -7.476 0.0000E+00 0.6400E+02 -7.468 0.0000E+00 0.6400E+02 -7.460 0.0000E+00 0.6400E+02 -7.451 0.0000E+00 0.6400E+02 -7.443 0.0000E+00 0.6400E+02 -7.435 0.0000E+00 0.6400E+02 -7.427 0.0000E+00 0.6400E+02 -7.419 0.0000E+00 0.6400E+02 -7.410 0.0000E+00 0.6400E+02 -7.402 0.0000E+00 0.6400E+02 -7.394 0.0000E+00 0.6400E+02 -7.386 0.0000E+00 0.6400E+02 -7.377 0.0000E+00 0.6400E+02 -7.369 0.0000E+00 0.6400E+02 -7.361 0.0000E+00 0.6400E+02 -7.353 0.0000E+00 0.6400E+02 -7.344 0.0000E+00 0.6400E+02 -7.336 0.0000E+00 0.6400E+02 -7.328 0.0000E+00 0.6400E+02 -7.320 0.0000E+00 0.6400E+02 -7.311 0.0000E+00 0.6400E+02 -7.303 0.0000E+00 0.6400E+02 -7.295 0.0000E+00 0.6400E+02 -7.287 0.0000E+00 0.6400E+02 -7.279 0.0000E+00 0.6400E+02 -7.270 0.0000E+00 0.6400E+02 -7.262 0.0000E+00 0.6400E+02 -7.254 0.0000E+00 0.6400E+02 -7.246 0.0000E+00 0.6400E+02 -7.237 0.0000E+00 0.6400E+02 -7.229 0.0000E+00 0.6400E+02 -7.221 0.0000E+00 0.6400E+02 -7.213 0.0000E+00 0.6400E+02 -7.204 0.0000E+00 0.6400E+02 -7.196 0.0000E+00 0.6400E+02 -7.188 0.0000E+00 0.6400E+02 -7.180 0.0000E+00 0.6400E+02 -7.172 0.0000E+00 0.6400E+02 -7.163 0.0000E+00 0.6400E+02 -7.155 0.0000E+00 0.6400E+02 -7.147 0.0000E+00 0.6400E+02 -7.139 0.0000E+00 0.6400E+02 -7.130 0.0000E+00 0.6400E+02 -7.122 0.0000E+00 0.6400E+02 -7.114 0.0000E+00 0.6400E+02 -7.106 0.0000E+00 0.6400E+02 -7.097 0.0000E+00 0.6400E+02 -7.089 0.0000E+00 0.6400E+02 -7.081 0.0000E+00 0.6400E+02 -7.073 0.0000E+00 0.6400E+02 -7.064 0.0000E+00 0.6400E+02 -7.056 0.0000E+00 0.6400E+02 -7.048 0.0000E+00 0.6400E+02 -7.040 0.0000E+00 0.6400E+02 -7.032 0.0000E+00 0.6400E+02 -7.023 0.0000E+00 0.6400E+02 -7.015 0.0000E+00 0.6400E+02 -7.007 0.0000E+00 0.6400E+02 -6.999 0.0000E+00 0.6400E+02 -6.990 0.0000E+00 0.6400E+02 -6.982 0.0000E+00 0.6400E+02 -6.974 0.0000E+00 0.6400E+02 -6.966 0.0000E+00 0.6400E+02 -6.957 0.0000E+00 0.6400E+02 -6.949 0.0000E+00 0.6400E+02 -6.941 0.0000E+00 0.6400E+02 -6.933 0.0000E+00 0.6400E+02 -6.924 0.0000E+00 0.6400E+02 -6.916 0.0000E+00 0.6400E+02 -6.908 0.0000E+00 0.6400E+02 -6.900 0.0000E+00 0.6400E+02 -6.892 0.0000E+00 0.6400E+02 -6.883 0.0000E+00 0.6400E+02 -6.875 0.0000E+00 0.6400E+02 -6.867 0.0000E+00 0.6400E+02 -6.859 0.0000E+00 0.6400E+02 -6.850 0.0000E+00 0.6400E+02 -6.842 0.0000E+00 0.6400E+02 -6.834 0.0000E+00 0.6400E+02 -6.826 0.0000E+00 0.6400E+02 -6.817 0.0000E+00 0.6400E+02 -6.809 0.0000E+00 0.6400E+02 -6.801 0.0000E+00 0.6400E+02 -6.793 0.0000E+00 0.6400E+02 -6.784 0.0000E+00 0.6400E+02 -6.776 0.0000E+00 0.6400E+02 -6.768 0.0000E+00 0.6400E+02 -6.760 0.0000E+00 0.6400E+02 -6.752 0.0000E+00 0.6400E+02 -6.743 0.0000E+00 0.6400E+02 -6.735 0.0000E+00 0.6400E+02 -6.727 0.0000E+00 0.6400E+02 -6.719 0.0000E+00 0.6400E+02 -6.710 0.0000E+00 0.6400E+02 -6.702 0.0000E+00 0.6400E+02 -6.694 0.0000E+00 0.6400E+02 -6.686 0.0000E+00 0.6400E+02 -6.677 0.0000E+00 0.6400E+02 -6.669 0.0000E+00 0.6400E+02 -6.661 0.0000E+00 0.6400E+02 -6.653 0.0000E+00 0.6400E+02 -6.645 0.0000E+00 0.6400E+02 -6.636 0.0000E+00 0.6400E+02 -6.628 0.0000E+00 0.6400E+02 -6.620 0.0000E+00 0.6400E+02 -6.612 0.0000E+00 0.6400E+02 -6.603 0.0000E+00 0.6400E+02 -6.595 0.0000E+00 0.6400E+02 -6.587 0.0000E+00 0.6400E+02 -6.579 0.0000E+00 0.6400E+02 -6.570 0.0000E+00 0.6400E+02 -6.562 0.0000E+00 0.6400E+02 -6.554 0.0000E+00 0.6400E+02 -6.546 0.0000E+00 0.6400E+02 -6.537 0.0000E+00 0.6400E+02 -6.529 0.0000E+00 0.6400E+02 -6.521 0.0000E+00 0.6400E+02 -6.513 0.0000E+00 0.6400E+02 -6.505 0.0000E+00 0.6400E+02 -6.496 0.0000E+00 0.6400E+02 -6.488 0.0000E+00 0.6400E+02 -6.480 0.0000E+00 0.6400E+02 -6.472 0.0000E+00 0.6400E+02 -6.463 0.0000E+00 0.6400E+02 -6.455 0.0000E+00 0.6400E+02 -6.447 0.0000E+00 0.6400E+02 -6.439 0.0000E+00 0.6400E+02 -6.430 0.0000E+00 0.6400E+02 -6.422 0.0000E+00 0.6400E+02 -6.414 0.0000E+00 0.6400E+02 -6.406 0.0000E+00 0.6400E+02 -6.397 0.0000E+00 0.6400E+02 -6.389 0.0000E+00 0.6400E+02 -6.381 0.0000E+00 0.6400E+02 -6.373 0.0000E+00 0.6400E+02 -6.365 0.0000E+00 0.6400E+02 -6.356 0.0000E+00 0.6400E+02 -6.348 0.0000E+00 0.6400E+02 -6.340 0.0000E+00 0.6400E+02 -6.332 0.0000E+00 0.6400E+02 -6.323 0.0000E+00 0.6400E+02 -6.315 0.0000E+00 0.6400E+02 -6.307 0.0000E+00 0.6400E+02 -6.299 0.0000E+00 0.6400E+02 -6.290 0.0000E+00 0.6400E+02 -6.282 0.0000E+00 0.6400E+02 -6.274 0.0000E+00 0.6400E+02 -6.266 0.0000E+00 0.6400E+02 -6.257 0.0000E+00 0.6400E+02 -6.249 0.0000E+00 0.6400E+02 -6.241 0.0000E+00 0.6400E+02 -6.233 0.0000E+00 0.6400E+02 -6.225 0.0000E+00 0.6400E+02 -6.216 0.0000E+00 0.6400E+02 -6.208 0.0000E+00 0.6400E+02 -6.200 0.0000E+00 0.6400E+02 -6.192 0.0000E+00 0.6400E+02 -6.183 0.0000E+00 0.6400E+02 -6.175 0.0000E+00 0.6400E+02 -6.167 0.0000E+00 0.6400E+02 -6.159 0.0000E+00 0.6400E+02 -6.150 0.0000E+00 0.6400E+02 -6.142 0.0000E+00 0.6400E+02 -6.134 0.0000E+00 0.6400E+02 -6.126 0.0000E+00 0.6400E+02 -6.117 0.0000E+00 0.6400E+02 -6.109 0.0000E+00 0.6400E+02 -6.101 0.0000E+00 0.6400E+02 -6.093 0.0000E+00 0.6400E+02 -6.085 0.0000E+00 0.6400E+02 -6.076 0.0000E+00 0.6400E+02 -6.068 0.0000E+00 0.6400E+02 -6.060 0.0000E+00 0.6400E+02 -6.052 0.0000E+00 0.6400E+02 -6.043 0.0000E+00 0.6400E+02 -6.035 0.0000E+00 0.6400E+02 -6.027 0.0000E+00 0.6400E+02 -6.019 0.0000E+00 0.6400E+02 -6.010 0.0000E+00 0.6400E+02 -6.002 0.0000E+00 0.6400E+02 -5.994 0.0000E+00 0.6400E+02 -5.986 0.0000E+00 0.6400E+02 -5.978 0.0000E+00 0.6400E+02 -5.969 0.0000E+00 0.6400E+02 -5.961 0.0000E+00 0.6400E+02 -5.953 0.0000E+00 0.6400E+02 -5.945 0.0000E+00 0.6400E+02 -5.936 0.0000E+00 0.6400E+02 -5.928 0.0000E+00 0.6400E+02 -5.920 0.0000E+00 0.6400E+02 -5.912 0.0000E+00 0.6400E+02 -5.903 0.0000E+00 0.6400E+02 -5.895 0.0000E+00 0.6400E+02 -5.887 0.0000E+00 0.6400E+02 -5.879 0.0000E+00 0.6400E+02 -5.870 0.0000E+00 0.6400E+02 -5.862 0.0000E+00 0.6400E+02 -5.854 0.0000E+00 0.6400E+02 -5.846 0.0000E+00 0.6400E+02 -5.838 0.0000E+00 0.6400E+02 -5.829 0.0000E+00 0.6400E+02 -5.821 0.0000E+00 0.6400E+02 -5.813 0.0000E+00 0.6400E+02 -5.805 0.0000E+00 0.6400E+02 -5.796 0.0000E+00 0.6400E+02 -5.788 0.0000E+00 0.6400E+02 -5.780 0.0000E+00 0.6400E+02 -5.772 0.0000E+00 0.6400E+02 -5.763 0.0000E+00 0.6400E+02 -5.755 0.0000E+00 0.6400E+02 -5.747 0.0000E+00 0.6400E+02 -5.739 0.0000E+00 0.6400E+02 -5.730 0.0000E+00 0.6400E+02 -5.722 0.0000E+00 0.6400E+02 -5.714 0.0000E+00 0.6400E+02 -5.706 0.0000E+00 0.6400E+02 -5.698 0.0000E+00 0.6400E+02 -5.689 0.0000E+00 0.6400E+02 -5.681 0.0000E+00 0.6400E+02 -5.673 0.0000E+00 0.6400E+02 -5.665 0.0000E+00 0.6400E+02 -5.656 0.0000E+00 0.6400E+02 -5.648 0.0000E+00 0.6400E+02 -5.640 0.0000E+00 0.6400E+02 -5.632 0.0000E+00 0.6400E+02 -5.623 0.0000E+00 0.6400E+02 -5.615 0.0000E+00 0.6400E+02 -5.607 0.0000E+00 0.6400E+02 -5.599 0.0000E+00 0.6400E+02 -5.590 0.0000E+00 0.6400E+02 -5.582 0.0000E+00 0.6400E+02 -5.574 0.0000E+00 0.6400E+02 -5.566 0.0000E+00 0.6400E+02 -5.558 0.0000E+00 0.6400E+02 -5.549 0.0000E+00 0.6400E+02 -5.541 0.0000E+00 0.6400E+02 -5.533 0.0000E+00 0.6400E+02 -5.525 0.0000E+00 0.6400E+02 -5.516 0.0000E+00 0.6400E+02 -5.508 0.0000E+00 0.6400E+02 -5.500 0.0000E+00 0.6400E+02 -5.492 0.0000E+00 0.6400E+02 -5.483 0.0000E+00 0.6400E+02 -5.475 0.0000E+00 0.6400E+02 -5.467 0.0000E+00 0.6400E+02 -5.459 0.0000E+00 0.6400E+02 -5.451 0.0000E+00 0.6400E+02 -5.442 0.0000E+00 0.6400E+02 -5.434 0.0000E+00 0.6400E+02 -5.426 0.0000E+00 0.6400E+02 -5.418 0.0000E+00 0.6400E+02 -5.409 0.0000E+00 0.6400E+02 -5.401 0.0000E+00 0.6400E+02 -5.393 0.0000E+00 0.6400E+02 -5.385 0.0000E+00 0.6400E+02 -5.376 0.0000E+00 0.6400E+02 -5.368 0.0000E+00 0.6400E+02 -5.360 0.0000E+00 0.6400E+02 -5.352 0.0000E+00 0.6400E+02 -5.343 0.0000E+00 0.6400E+02 -5.335 0.0000E+00 0.6400E+02 -5.327 0.0000E+00 0.6400E+02 -5.319 0.0000E+00 0.6400E+02 -5.311 0.0000E+00 0.6400E+02 -5.302 0.0000E+00 0.6400E+02 -5.294 0.0000E+00 0.6400E+02 -5.286 0.0000E+00 0.6400E+02 -5.278 0.0000E+00 0.6400E+02 -5.269 0.0000E+00 0.6400E+02 -5.261 0.0000E+00 0.6400E+02 -5.253 0.0000E+00 0.6400E+02 -5.245 0.0000E+00 0.6400E+02 -5.236 0.0000E+00 0.6400E+02 -5.228 0.0000E+00 0.6400E+02 -5.220 0.0000E+00 0.6400E+02 -5.212 0.0000E+00 0.6400E+02 -5.203 0.0000E+00 0.6400E+02 -5.195 0.0000E+00 0.6400E+02 -5.187 0.0000E+00 0.6400E+02 -5.179 0.0000E+00 0.6400E+02 -5.171 0.0000E+00 0.6400E+02 -5.162 0.0000E+00 0.6400E+02 -5.154 0.0000E+00 0.6400E+02 -5.146 0.0000E+00 0.6400E+02 -5.138 0.0000E+00 0.6400E+02 -5.129 0.0000E+00 0.6400E+02 -5.121 0.0000E+00 0.6400E+02 -5.113 0.0000E+00 0.6400E+02 -5.105 0.0000E+00 0.6400E+02 -5.096 0.0000E+00 0.6400E+02 -5.088 0.0000E+00 0.6400E+02 -5.080 0.0000E+00 0.6400E+02 -5.072 0.0000E+00 0.6400E+02 -5.063 0.0000E+00 0.6400E+02 -5.055 0.0000E+00 0.6400E+02 -5.047 0.0000E+00 0.6400E+02 -5.039 0.0000E+00 0.6400E+02 -5.031 0.0000E+00 0.6400E+02 -5.022 0.0000E+00 0.6400E+02 -5.014 0.0000E+00 0.6400E+02 -5.006 0.0000E+00 0.6400E+02 -4.998 0.0000E+00 0.6400E+02 -4.989 0.0000E+00 0.6400E+02 -4.981 0.0000E+00 0.6400E+02 -4.973 0.0000E+00 0.6400E+02 -4.965 0.0000E+00 0.6400E+02 -4.956 0.0000E+00 0.6400E+02 -4.948 0.0000E+00 0.6400E+02 -4.940 0.0000E+00 0.6400E+02 -4.932 0.0000E+00 0.6400E+02 -4.923 0.0000E+00 0.6400E+02 -4.915 0.0000E+00 0.6400E+02 -4.907 0.0000E+00 0.6400E+02 -4.899 0.0000E+00 0.6400E+02 -4.891 0.0000E+00 0.6400E+02 -4.882 0.0000E+00 0.6400E+02 -4.874 0.0000E+00 0.6400E+02 -4.866 0.0000E+00 0.6400E+02 -4.858 0.0000E+00 0.6400E+02 -4.849 0.0000E+00 0.6400E+02 -4.841 0.0000E+00 0.6400E+02 -4.833 0.0000E+00 0.6400E+02 -4.825 0.0000E+00 0.6400E+02 -4.816 0.0000E+00 0.6400E+02 -4.808 0.0000E+00 0.6400E+02 -4.800 0.0000E+00 0.6400E+02 -4.792 0.0000E+00 0.6400E+02 -4.784 0.0000E+00 0.6400E+02 -4.775 0.0000E+00 0.6400E+02 -4.767 0.0000E+00 0.6400E+02 -4.759 0.0000E+00 0.6400E+02 -4.751 0.0000E+00 0.6400E+02 -4.742 0.0000E+00 0.6400E+02 -4.734 0.0000E+00 0.6400E+02 -4.726 0.0000E+00 0.6400E+02 -4.718 0.0000E+00 0.6400E+02 -4.709 0.0000E+00 0.6400E+02 -4.701 0.0000E+00 0.6400E+02 -4.693 0.0000E+00 0.6400E+02 -4.685 0.0000E+00 0.6400E+02 -4.676 0.0000E+00 0.6400E+02 -4.668 0.0000E+00 0.6400E+02 -4.660 0.0000E+00 0.6400E+02 -4.652 0.0000E+00 0.6400E+02 -4.644 0.0000E+00 0.6400E+02 -4.635 0.0000E+00 0.6400E+02 -4.627 0.0000E+00 0.6400E+02 -4.619 0.0000E+00 0.6400E+02 -4.611 0.0000E+00 0.6400E+02 -4.602 0.0000E+00 0.6400E+02 -4.594 0.0000E+00 0.6400E+02 -4.586 0.0000E+00 0.6400E+02 -4.578 0.0000E+00 0.6400E+02 -4.569 0.0000E+00 0.6400E+02 -4.561 0.0000E+00 0.6400E+02 -4.553 0.0000E+00 0.6400E+02 -4.545 0.0000E+00 0.6400E+02 -4.536 0.0000E+00 0.6400E+02 -4.528 0.0000E+00 0.6400E+02 -4.520 0.0000E+00 0.6400E+02 -4.512 0.0000E+00 0.6400E+02 -4.504 0.0000E+00 0.6400E+02 -4.495 0.0000E+00 0.6400E+02 -4.487 0.0000E+00 0.6400E+02 -4.479 0.0000E+00 0.6400E+02 -4.471 0.0000E+00 0.6400E+02 -4.462 0.0000E+00 0.6400E+02 -4.454 0.0000E+00 0.6400E+02 -4.446 0.0000E+00 0.6400E+02 -4.438 0.0000E+00 0.6400E+02 -4.429 0.0000E+00 0.6400E+02 -4.421 0.0000E+00 0.6400E+02 -4.413 0.0000E+00 0.6400E+02 -4.405 0.0000E+00 0.6400E+02 -4.396 0.0000E+00 0.6400E+02 -4.388 0.0000E+00 0.6400E+02 -4.380 0.0000E+00 0.6400E+02 -4.372 0.0000E+00 0.6400E+02 -4.364 0.0000E+00 0.6400E+02 -4.355 0.0000E+00 0.6400E+02 -4.347 0.0000E+00 0.6400E+02 -4.339 0.0000E+00 0.6400E+02 -4.331 0.0000E+00 0.6400E+02 -4.322 0.0000E+00 0.6400E+02 -4.314 0.0000E+00 0.6400E+02 -4.306 0.0000E+00 0.6400E+02 -4.298 0.0000E+00 0.6400E+02 -4.289 0.0000E+00 0.6400E+02 -4.281 0.0000E+00 0.6400E+02 -4.273 0.0000E+00 0.6400E+02 -4.265 0.0000E+00 0.6400E+02 -4.257 0.0000E+00 0.6400E+02 -4.248 0.0000E+00 0.6400E+02 -4.240 0.0000E+00 0.6400E+02 -4.232 0.0000E+00 0.6400E+02 -4.224 0.0000E+00 0.6400E+02 -4.215 0.0000E+00 0.6400E+02 -4.207 0.0000E+00 0.6400E+02 -4.199 0.0000E+00 0.6400E+02 -4.191 0.0000E+00 0.6400E+02 -4.182 0.0000E+00 0.6400E+02 -4.174 0.0000E+00 0.6400E+02 -4.166 0.0000E+00 0.6400E+02 -4.158 0.0000E+00 0.6400E+02 -4.149 0.0000E+00 0.6400E+02 -4.141 0.0000E+00 0.6400E+02 -4.133 0.0000E+00 0.6400E+02 -4.125 0.0000E+00 0.6400E+02 -4.117 0.0000E+00 0.6400E+02 -4.108 0.0000E+00 0.6400E+02 -4.100 0.0000E+00 0.6400E+02 -4.092 0.0000E+00 0.6400E+02 -4.084 0.0000E+00 0.6400E+02 -4.075 0.0000E+00 0.6400E+02 -4.067 0.0000E+00 0.6400E+02 -4.059 0.0000E+00 0.6400E+02 -4.051 0.0000E+00 0.6400E+02 -4.042 0.0000E+00 0.6400E+02 -4.034 0.0000E+00 0.6400E+02 -4.026 0.0000E+00 0.6400E+02 -4.018 0.0000E+00 0.6400E+02 -4.009 0.0000E+00 0.6400E+02 -4.001 0.0000E+00 0.6400E+02 -3.993 0.0000E+00 0.6400E+02 -3.985 0.0000E+00 0.6400E+02 -3.977 0.0000E+00 0.6400E+02 -3.968 0.0000E+00 0.6400E+02 -3.960 0.0000E+00 0.6400E+02 -3.952 0.0000E+00 0.6400E+02 -3.944 0.0000E+00 0.6400E+02 -3.935 0.0000E+00 0.6400E+02 -3.927 0.0000E+00 0.6400E+02 -3.919 0.0000E+00 0.6400E+02 -3.911 0.0000E+00 0.6400E+02 -3.902 0.0000E+00 0.6400E+02 -3.894 0.0000E+00 0.6400E+02 -3.886 0.0000E+00 0.6400E+02 -3.878 0.0000E+00 0.6400E+02 -3.869 0.0000E+00 0.6400E+02 -3.861 0.0000E+00 0.6400E+02 -3.853 0.0000E+00 0.6400E+02 -3.845 0.0000E+00 0.6400E+02 -3.837 0.0000E+00 0.6400E+02 -3.828 0.0000E+00 0.6400E+02 -3.820 0.0000E+00 0.6400E+02 -3.812 0.0000E+00 0.6400E+02 -3.804 0.0000E+00 0.6400E+02 -3.795 0.0000E+00 0.6400E+02 -3.787 0.0000E+00 0.6400E+02 -3.779 0.0000E+00 0.6400E+02 -3.771 0.0000E+00 0.6400E+02 -3.762 0.0000E+00 0.6400E+02 -3.754 0.0000E+00 0.6400E+02 -3.746 0.0000E+00 0.6400E+02 -3.738 0.0000E+00 0.6400E+02 -3.730 0.0000E+00 0.6400E+02 -3.721 0.0000E+00 0.6400E+02 -3.713 0.0000E+00 0.6400E+02 -3.705 0.0000E+00 0.6400E+02 -3.697 0.0000E+00 0.6400E+02 -3.688 0.0000E+00 0.6400E+02 -3.680 0.0000E+00 0.6400E+02 -3.672 0.0000E+00 0.6400E+02 -3.664 0.0000E+00 0.6400E+02 -3.655 0.0000E+00 0.6400E+02 -3.647 0.0000E+00 0.6400E+02 -3.639 0.0000E+00 0.6400E+02 -3.631 0.0000E+00 0.6400E+02 -3.622 0.0000E+00 0.6400E+02 -3.614 0.0000E+00 0.6400E+02 -3.606 0.0000E+00 0.6400E+02 -3.598 0.0000E+00 0.6400E+02 -3.590 0.0000E+00 0.6400E+02 -3.581 0.0000E+00 0.6400E+02 -3.573 0.0000E+00 0.6400E+02 -3.565 0.0000E+00 0.6400E+02 -3.557 0.0000E+00 0.6400E+02 -3.548 0.0000E+00 0.6400E+02 -3.540 0.0000E+00 0.6400E+02 -3.532 0.0000E+00 0.6400E+02 -3.524 0.0000E+00 0.6400E+02 -3.515 0.0000E+00 0.6400E+02 -3.507 0.0000E+00 0.6400E+02 -3.499 0.0000E+00 0.6400E+02 -3.491 0.0000E+00 0.6400E+02 -3.482 0.0000E+00 0.6400E+02 -3.474 0.0000E+00 0.6400E+02 -3.466 0.0000E+00 0.6400E+02 -3.458 0.0000E+00 0.6400E+02 -3.450 0.0000E+00 0.6400E+02 -3.441 0.0000E+00 0.6400E+02 -3.433 0.0000E+00 0.6400E+02 -3.425 0.0000E+00 0.6400E+02 -3.417 0.0000E+00 0.6400E+02 -3.408 0.0000E+00 0.6400E+02 -3.400 0.0000E+00 0.6400E+02 -3.392 0.0000E+00 0.6400E+02 -3.384 0.0000E+00 0.6400E+02 -3.375 0.0000E+00 0.6400E+02 -3.367 0.0000E+00 0.6400E+02 -3.359 0.0000E+00 0.6400E+02 -3.351 0.0000E+00 0.6400E+02 -3.342 0.0000E+00 0.6400E+02 -3.334 0.0000E+00 0.6400E+02 -3.326 0.0000E+00 0.6400E+02 -3.318 0.0000E+00 0.6400E+02 -3.310 0.0000E+00 0.6400E+02 -3.301 0.0000E+00 0.6400E+02 -3.293 0.0000E+00 0.6400E+02 -3.285 0.0000E+00 0.6400E+02 -3.277 0.0000E+00 0.6400E+02 -3.268 0.0000E+00 0.6400E+02 -3.260 0.0000E+00 0.6400E+02 -3.252 0.0000E+00 0.6400E+02 -3.244 0.0000E+00 0.6400E+02 -3.235 0.0000E+00 0.6400E+02 -3.227 0.0000E+00 0.6400E+02 -3.219 0.0000E+00 0.6400E+02 -3.211 0.0000E+00 0.6400E+02 -3.202 0.0000E+00 0.6400E+02 -3.194 0.0000E+00 0.6400E+02 -3.186 0.0000E+00 0.6400E+02 -3.178 0.0000E+00 0.6400E+02 -3.170 0.0000E+00 0.6400E+02 -3.161 0.0000E+00 0.6400E+02 -3.153 0.0000E+00 0.6400E+02 -3.145 0.0000E+00 0.6400E+02 -3.137 0.0000E+00 0.6400E+02 -3.128 0.0000E+00 0.6400E+02 -3.120 0.0000E+00 0.6400E+02 -3.112 0.0000E+00 0.6400E+02 -3.104 0.0000E+00 0.6400E+02 -3.095 0.0000E+00 0.6400E+02 -3.087 0.0000E+00 0.6400E+02 -3.079 0.0000E+00 0.6400E+02 -3.071 0.0000E+00 0.6400E+02 -3.063 0.0000E+00 0.6400E+02 -3.054 0.0000E+00 0.6400E+02 -3.046 0.0000E+00 0.6400E+02 -3.038 0.0000E+00 0.6400E+02 -3.030 0.0000E+00 0.6400E+02 -3.021 0.0000E+00 0.6400E+02 -3.013 0.0000E+00 0.6400E+02 -3.005 0.0000E+00 0.6400E+02 -2.997 0.0000E+00 0.6400E+02 -2.988 0.0000E+00 0.6400E+02 -2.980 0.0000E+00 0.6400E+02 -2.972 0.0000E+00 0.6400E+02 -2.964 0.0000E+00 0.6400E+02 -2.955 0.0000E+00 0.6400E+02 -2.947 0.0000E+00 0.6400E+02 -2.939 0.0000E+00 0.6400E+02 -2.931 0.0000E+00 0.6400E+02 -2.923 0.0000E+00 0.6400E+02 -2.914 0.0000E+00 0.6400E+02 -2.906 0.0000E+00 0.6400E+02 -2.898 0.0000E+00 0.6400E+02 -2.890 0.0000E+00 0.6400E+02 -2.881 0.0000E+00 0.6400E+02 -2.873 0.0000E+00 0.6400E+02 -2.865 0.0000E+00 0.6400E+02 -2.857 0.0000E+00 0.6400E+02 -2.848 0.0000E+00 0.6400E+02 -2.840 0.0000E+00 0.6400E+02 -2.832 0.0000E+00 0.6400E+02 -2.824 0.0000E+00 0.6400E+02 -2.815 0.0000E+00 0.6400E+02 -2.807 0.0000E+00 0.6400E+02 -2.799 0.0000E+00 0.6400E+02 -2.791 0.0000E+00 0.6400E+02 -2.783 0.0000E+00 0.6400E+02 -2.774 0.0000E+00 0.6400E+02 -2.766 0.0000E+00 0.6400E+02 -2.758 0.0000E+00 0.6400E+02 -2.750 0.0000E+00 0.6400E+02 -2.741 0.0000E+00 0.6400E+02 -2.733 0.0000E+00 0.6400E+02 -2.725 0.0000E+00 0.6400E+02 -2.717 0.0000E+00 0.6400E+02 -2.708 0.0000E+00 0.6400E+02 -2.700 0.0000E+00 0.6400E+02 -2.692 0.0000E+00 0.6400E+02 -2.684 0.0000E+00 0.6400E+02 -2.675 0.0000E+00 0.6400E+02 -2.667 0.0000E+00 0.6400E+02 -2.659 0.0000E+00 0.6400E+02 -2.651 0.0000E+00 0.6400E+02 -2.643 0.0000E+00 0.6400E+02 -2.634 0.0000E+00 0.6400E+02 -2.626 0.0000E+00 0.6400E+02 -2.618 0.0000E+00 0.6400E+02 -2.610 0.0000E+00 0.6400E+02 -2.601 0.0000E+00 0.6400E+02 -2.593 0.0000E+00 0.6400E+02 -2.585 0.0000E+00 0.6400E+02 -2.577 0.0000E+00 0.6400E+02 -2.568 0.0000E+00 0.6400E+02 -2.560 0.0000E+00 0.6400E+02 -2.552 0.0000E+00 0.6400E+02 -2.544 0.0000E+00 0.6400E+02 -2.536 0.0000E+00 0.6400E+02 -2.527 0.0000E+00 0.6400E+02 -2.519 0.0000E+00 0.6400E+02 -2.511 0.0000E+00 0.6400E+02 -2.503 0.0000E+00 0.6400E+02 -2.494 0.0000E+00 0.6400E+02 -2.486 0.0000E+00 0.6400E+02 -2.478 0.0000E+00 0.6400E+02 -2.470 0.0000E+00 0.6400E+02 -2.461 0.0000E+00 0.6400E+02 -2.453 0.0000E+00 0.6400E+02 -2.445 0.0000E+00 0.6400E+02 -2.437 0.0000E+00 0.6400E+02 -2.428 0.0000E+00 0.6400E+02 -2.420 0.0000E+00 0.6400E+02 -2.412 0.0000E+00 0.6400E+02 -2.404 0.0000E+00 0.6400E+02 -2.396 0.0000E+00 0.6400E+02 -2.387 0.0000E+00 0.6400E+02 -2.379 0.0000E+00 0.6400E+02 -2.371 0.0000E+00 0.6400E+02 -2.363 0.0000E+00 0.6400E+02 -2.354 0.0000E+00 0.6400E+02 -2.346 0.0000E+00 0.6400E+02 -2.338 0.0000E+00 0.6400E+02 -2.330 0.0000E+00 0.6400E+02 -2.321 0.0000E+00 0.6400E+02 -2.313 0.0000E+00 0.6400E+02 -2.305 0.0000E+00 0.6400E+02 -2.297 0.0000E+00 0.6400E+02 -2.288 0.0000E+00 0.6400E+02 -2.280 0.0000E+00 0.6400E+02 -2.272 0.0000E+00 0.6400E+02 -2.264 0.0000E+00 0.6400E+02 -2.256 0.0000E+00 0.6400E+02 -2.247 0.0000E+00 0.6400E+02 -2.239 0.0000E+00 0.6400E+02 -2.231 0.0000E+00 0.6400E+02 -2.223 0.0000E+00 0.6400E+02 -2.214 0.0000E+00 0.6400E+02 -2.206 0.0000E+00 0.6400E+02 -2.198 0.0000E+00 0.6400E+02 -2.190 0.0000E+00 0.6400E+02 -2.181 0.0000E+00 0.6400E+02 -2.173 0.0000E+00 0.6400E+02 -2.165 0.0000E+00 0.6400E+02 -2.157 0.0000E+00 0.6400E+02 -2.148 0.0000E+00 0.6400E+02 -2.140 0.0000E+00 0.6400E+02 -2.132 0.0000E+00 0.6400E+02 -2.124 0.0000E+00 0.6400E+02 -2.116 0.0000E+00 0.6400E+02 -2.107 0.0000E+00 0.6400E+02 -2.099 0.0000E+00 0.6400E+02 -2.091 0.0000E+00 0.6400E+02 -2.083 0.0000E+00 0.6400E+02 -2.074 0.0000E+00 0.6400E+02 -2.066 0.0000E+00 0.6400E+02 -2.058 0.0000E+00 0.6400E+02 -2.050 0.0000E+00 0.6400E+02 -2.041 0.0000E+00 0.6400E+02 -2.033 0.0000E+00 0.6400E+02 -2.025 0.0000E+00 0.6400E+02 -2.017 0.0000E+00 0.6400E+02 -2.008 0.0000E+00 0.6400E+02 -2.000 0.0000E+00 0.6400E+02 -1.992 0.0000E+00 0.6400E+02 -1.984 0.0000E+00 0.6400E+02 -1.976 0.0000E+00 0.6400E+02 -1.967 0.0000E+00 0.6400E+02 -1.959 0.0000E+00 0.6400E+02 -1.951 0.0000E+00 0.6400E+02 -1.943 0.0000E+00 0.6400E+02 -1.934 0.0000E+00 0.6400E+02 -1.926 0.0000E+00 0.6400E+02 -1.918 0.0000E+00 0.6400E+02 -1.910 0.0000E+00 0.6400E+02 -1.901 0.0000E+00 0.6400E+02 -1.893 0.0000E+00 0.6400E+02 -1.885 0.0000E+00 0.6400E+02 -1.877 0.0000E+00 0.6400E+02 -1.869 0.0000E+00 0.6400E+02 -1.860 0.0000E+00 0.6400E+02 -1.852 0.0000E+00 0.6400E+02 -1.844 0.0000E+00 0.6400E+02 -1.836 0.0000E+00 0.6400E+02 -1.827 0.0000E+00 0.6400E+02 -1.819 0.0000E+00 0.6400E+02 -1.811 0.0000E+00 0.6400E+02 -1.803 0.0000E+00 0.6400E+02 -1.794 0.0000E+00 0.6400E+02 -1.786 0.0000E+00 0.6400E+02 -1.778 0.0000E+00 0.6400E+02 -1.770 0.0000E+00 0.6400E+02 -1.761 0.0000E+00 0.6400E+02 -1.753 0.0000E+00 0.6400E+02 -1.745 0.0000E+00 0.6400E+02 -1.737 0.0000E+00 0.6400E+02 -1.729 0.0000E+00 0.6400E+02 -1.720 0.0000E+00 0.6400E+02 -1.712 0.0000E+00 0.6400E+02 -1.704 0.0000E+00 0.6400E+02 -1.696 0.0000E+00 0.6400E+02 -1.687 0.0000E+00 0.6400E+02 -1.679 0.0000E+00 0.6400E+02 -1.671 0.0000E+00 0.6400E+02 -1.663 0.0000E+00 0.6400E+02 -1.654 0.0000E+00 0.6400E+02 -1.646 0.0000E+00 0.6400E+02 -1.638 0.0000E+00 0.6400E+02 -1.630 0.0000E+00 0.6400E+02 -1.621 0.0000E+00 0.6400E+02 -1.613 0.0000E+00 0.6400E+02 -1.605 0.0000E+00 0.6400E+02 -1.597 0.0000E+00 0.6400E+02 -1.589 0.0000E+00 0.6400E+02 -1.580 0.0000E+00 0.6400E+02 -1.572 0.0000E+00 0.6400E+02 -1.564 0.0000E+00 0.6400E+02 -1.556 0.0000E+00 0.6400E+02 -1.547 0.0000E+00 0.6400E+02 -1.539 0.0000E+00 0.6400E+02 -1.531 0.0000E+00 0.6400E+02 -1.523 0.0000E+00 0.6400E+02 -1.514 0.0000E+00 0.6400E+02 -1.506 0.0000E+00 0.6400E+02 -1.498 0.0000E+00 0.6400E+02 -1.490 0.0000E+00 0.6400E+02 -1.481 0.0000E+00 0.6400E+02 -1.473 0.0000E+00 0.6400E+02 -1.465 0.0000E+00 0.6400E+02 -1.457 0.0000E+00 0.6400E+02 -1.449 0.0000E+00 0.6400E+02 -1.440 0.0000E+00 0.6400E+02 -1.432 0.0000E+00 0.6400E+02 -1.424 0.0000E+00 0.6400E+02 -1.416 0.0000E+00 0.6400E+02 -1.407 0.0000E+00 0.6400E+02 -1.399 0.0000E+00 0.6400E+02 -1.391 0.0000E+00 0.6400E+02 -1.383 0.0000E+00 0.6400E+02 -1.374 0.0000E+00 0.6400E+02 -1.366 0.0000E+00 0.6400E+02 -1.358 0.0000E+00 0.6400E+02 -1.350 0.0000E+00 0.6400E+02 -1.342 0.0000E+00 0.6400E+02 -1.333 0.0000E+00 0.6400E+02 -1.325 0.0000E+00 0.6400E+02 -1.317 0.0000E+00 0.6400E+02 -1.309 0.0000E+00 0.6400E+02 -1.300 0.0000E+00 0.6400E+02 -1.292 0.0000E+00 0.6400E+02 -1.284 0.0000E+00 0.6400E+02 -1.276 0.0000E+00 0.6400E+02 -1.267 0.0000E+00 0.6400E+02 -1.259 0.0000E+00 0.6400E+02 -1.251 0.0000E+00 0.6400E+02 -1.243 0.0000E+00 0.6400E+02 -1.234 0.0000E+00 0.6400E+02 -1.226 0.0000E+00 0.6400E+02 -1.218 0.0000E+00 0.6400E+02 -1.210 0.0000E+00 0.6400E+02 -1.202 0.0000E+00 0.6400E+02 -1.193 0.0000E+00 0.6400E+02 -1.185 0.0000E+00 0.6400E+02 -1.177 0.0000E+00 0.6400E+02 -1.169 0.0000E+00 0.6400E+02 -1.160 0.0000E+00 0.6400E+02 -1.152 0.0000E+00 0.6400E+02 -1.144 0.0000E+00 0.6400E+02 -1.136 0.0000E+00 0.6400E+02 -1.127 0.0000E+00 0.6400E+02 -1.119 0.0000E+00 0.6400E+02 -1.111 0.0000E+00 0.6400E+02 -1.103 0.0000E+00 0.6400E+02 -1.094 0.0000E+00 0.6400E+02 -1.086 0.0000E+00 0.6400E+02 -1.078 0.0000E+00 0.6400E+02 -1.070 0.0000E+00 0.6400E+02 -1.062 0.0000E+00 0.6400E+02 -1.053 0.0000E+00 0.6400E+02 -1.045 0.0000E+00 0.6400E+02 -1.037 0.0000E+00 0.6400E+02 -1.029 0.0000E+00 0.6400E+02 -1.020 0.0000E+00 0.6400E+02 -1.012 0.0000E+00 0.6400E+02 -1.004 0.0000E+00 0.6400E+02 -0.996 0.0000E+00 0.6400E+02 -0.987 0.0000E+00 0.6400E+02 -0.979 0.0000E+00 0.6400E+02 -0.971 0.0000E+00 0.6400E+02 -0.963 0.0000E+00 0.6400E+02 -0.954 0.0000E+00 0.6400E+02 -0.946 0.0000E+00 0.6400E+02 -0.938 0.0000E+00 0.6400E+02 -0.930 0.0000E+00 0.6400E+02 -0.922 0.0000E+00 0.6400E+02 -0.913 0.0000E+00 0.6400E+02 -0.905 0.0000E+00 0.6400E+02 -0.897 0.0000E+00 0.6400E+02 -0.889 0.0000E+00 0.6400E+02 -0.880 0.0000E+00 0.6400E+02 -0.872 0.0000E+00 0.6400E+02 -0.864 0.0000E+00 0.6400E+02 -0.856 0.0000E+00 0.6400E+02 -0.847 0.0000E+00 0.6400E+02 -0.839 0.0000E+00 0.6400E+02 -0.831 0.0000E+00 0.6400E+02 -0.823 0.0000E+00 0.6400E+02 -0.815 0.0000E+00 0.6400E+02 -0.806 0.0000E+00 0.6400E+02 -0.798 0.0000E+00 0.6400E+02 -0.790 0.0000E+00 0.6400E+02 -0.782 0.0000E+00 0.6400E+02 -0.773 0.0000E+00 0.6400E+02 -0.765 0.0000E+00 0.6400E+02 -0.757 0.0000E+00 0.6400E+02 -0.749 0.0000E+00 0.6400E+02 -0.740 0.0000E+00 0.6400E+02 -0.732 0.0000E+00 0.6400E+02 -0.724 0.0000E+00 0.6400E+02 -0.716 0.0000E+00 0.6400E+02 -0.707 0.0000E+00 0.6400E+02 -0.699 0.0000E+00 0.6400E+02 -0.691 0.0000E+00 0.6400E+02 -0.683 0.0000E+00 0.6400E+02 -0.675 0.0000E+00 0.6400E+02 -0.666 0.0000E+00 0.6400E+02 -0.658 0.0000E+00 0.6400E+02 -0.650 0.0000E+00 0.6400E+02 -0.642 0.0000E+00 0.6400E+02 -0.633 0.0000E+00 0.6400E+02 -0.625 0.0000E+00 0.6400E+02 -0.617 0.0000E+00 0.6400E+02 -0.609 0.0000E+00 0.6400E+02 -0.600 0.0000E+00 0.6400E+02 -0.592 0.0000E+00 0.6400E+02 -0.584 0.0000E+00 0.6400E+02 -0.576 0.0000E+00 0.6400E+02 -0.567 0.0000E+00 0.6400E+02 -0.559 0.0000E+00 0.6400E+02 -0.551 0.0000E+00 0.6400E+02 -0.543 0.0000E+00 0.6400E+02 -0.535 0.0000E+00 0.6400E+02 -0.526 0.0000E+00 0.6400E+02 -0.518 0.0000E+00 0.6400E+02 -0.510 0.0000E+00 0.6400E+02 -0.502 0.0000E+00 0.6400E+02 -0.493 0.0000E+00 0.6400E+02 -0.485 0.0000E+00 0.6400E+02 -0.477 0.0000E+00 0.6400E+02 -0.469 0.0000E+00 0.6400E+02 -0.460 0.0000E+00 0.6400E+02 -0.452 0.0000E+00 0.6400E+02 -0.444 0.0000E+00 0.6400E+02 -0.436 0.0000E+00 0.6400E+02 -0.427 0.0000E+00 0.6400E+02 -0.419 0.0000E+00 0.6400E+02 -0.411 0.0000E+00 0.6400E+02 -0.403 0.0000E+00 0.6400E+02 -0.395 0.0000E+00 0.6400E+02 -0.386 0.0000E+00 0.6400E+02 -0.378 0.0000E+00 0.6400E+02 -0.370 0.0000E+00 0.6400E+02 -0.362 0.0000E+00 0.6400E+02 -0.353 0.0000E+00 0.6400E+02 -0.345 0.0000E+00 0.6400E+02 -0.337 0.0000E+00 0.6400E+02 -0.329 0.0000E+00 0.6400E+02 -0.320 0.0000E+00 0.6400E+02 -0.312 0.0000E+00 0.6400E+02 -0.304 0.0000E+00 0.6400E+02 -0.296 0.0000E+00 0.6400E+02 -0.287 0.0000E+00 0.6400E+02 -0.279 0.0000E+00 0.6400E+02 -0.271 0.0000E+00 0.6400E+02 -0.263 0.0000E+00 0.6400E+02 -0.255 0.0000E+00 0.6400E+02 -0.246 0.0000E+00 0.6400E+02 -0.238 0.0000E+00 0.6400E+02 -0.230 0.0000E+00 0.6400E+02 -0.222 0.0000E+00 0.6400E+02 -0.213 0.0000E+00 0.6400E+02 -0.205 0.0000E+00 0.6400E+02 -0.197 0.0000E+00 0.6400E+02 -0.189 0.0000E+00 0.6400E+02 -0.180 0.0000E+00 0.6400E+02 -0.172 0.0000E+00 0.6400E+02 -0.164 0.0000E+00 0.6400E+02 -0.156 0.0000E+00 0.6400E+02 -0.148 0.0000E+00 0.6400E+02 -0.139 0.0000E+00 0.6400E+02 -0.131 0.0000E+00 0.6400E+02 -0.123 0.0000E+00 0.6400E+02 -0.115 0.0000E+00 0.6400E+02 -0.106 0.0000E+00 0.6400E+02 -0.098 0.0000E+00 0.6400E+02 -0.090 0.0000E+00 0.6400E+02 -0.082 0.0000E+00 0.6400E+02 -0.073 0.0000E+00 0.6400E+02 -0.065 0.0000E+00 0.6400E+02 -0.057 0.0000E+00 0.6400E+02 -0.049 0.0000E+00 0.6400E+02 -0.040 0.0000E+00 0.6400E+02 -0.032 0.0000E+00 0.6400E+02 -0.024 0.0000E+00 0.6400E+02 -0.016 0.0000E+00 0.6400E+02 -0.008 0.0000E+00 0.6400E+02 0.001 0.0000E+00 0.6400E+02 0.009 0.0000E+00 0.6400E+02 0.017 0.0000E+00 0.6400E+02 0.025 0.0000E+00 0.6400E+02 0.034 0.0000E+00 0.6400E+02 0.042 0.0000E+00 0.6400E+02 0.050 0.0000E+00 0.6400E+02 0.058 0.0000E+00 0.6400E+02 0.067 0.0000E+00 0.6400E+02 0.075 0.0000E+00 0.6400E+02 0.083 0.0000E+00 0.6400E+02 0.091 0.0000E+00 0.6400E+02 0.100 0.0000E+00 0.6400E+02 0.108 0.0000E+00 0.6400E+02 0.116 0.0000E+00 0.6400E+02 0.124 0.0000E+00 0.6400E+02 0.132 0.0000E+00 0.6400E+02 0.141 0.0000E+00 0.6400E+02 0.149 0.0000E+00 0.6400E+02 0.157 0.0000E+00 0.6400E+02 0.165 0.0000E+00 0.6400E+02 0.174 0.0000E+00 0.6400E+02 0.182 0.0000E+00 0.6400E+02 0.190 0.0000E+00 0.6400E+02 0.198 0.0000E+00 0.6400E+02 0.207 0.0000E+00 0.6400E+02 0.215 0.0000E+00 0.6400E+02 0.223 0.0000E+00 0.6400E+02 0.231 0.0000E+00 0.6400E+02 0.240 0.0000E+00 0.6400E+02 0.248 0.0000E+00 0.6400E+02 0.256 0.0000E+00 0.6400E+02 0.264 0.0000E+00 0.6400E+02 0.272 0.0000E+00 0.6400E+02 0.281 0.0000E+00 0.6400E+02 0.289 0.0000E+00 0.6400E+02 0.297 0.0000E+00 0.6400E+02 0.305 0.0000E+00 0.6400E+02 0.314 0.0000E+00 0.6400E+02 0.322 0.0000E+00 0.6400E+02 0.330 0.0000E+00 0.6400E+02 0.338 0.0000E+00 0.6400E+02 0.347 0.0000E+00 0.6400E+02 0.355 0.0000E+00 0.6400E+02 0.363 0.0000E+00 0.6400E+02 0.371 0.0000E+00 0.6400E+02 0.379 0.0000E+00 0.6400E+02 0.388 0.0000E+00 0.6400E+02 0.396 0.0000E+00 0.6400E+02 0.404 0.0000E+00 0.6400E+02 0.412 0.0000E+00 0.6400E+02 0.421 0.0000E+00 0.6400E+02 0.429 0.0000E+00 0.6400E+02 0.437 0.0000E+00 0.6400E+02 0.445 0.0000E+00 0.6400E+02 0.454 0.0000E+00 0.6400E+02 0.462 0.0000E+00 0.6400E+02 0.470 0.0000E+00 0.6400E+02 0.478 0.0000E+00 0.6400E+02 0.487 0.0000E+00 0.6400E+02 0.495 0.0000E+00 0.6400E+02 0.503 0.0000E+00 0.6400E+02 0.511 0.0000E+00 0.6400E+02 0.519 0.0000E+00 0.6400E+02 0.528 0.0000E+00 0.6400E+02 0.536 0.0000E+00 0.6400E+02 0.544 0.0000E+00 0.6400E+02 0.552 0.0000E+00 0.6400E+02 0.561 0.0000E+00 0.6400E+02 0.569 0.0000E+00 0.6400E+02 0.577 0.0000E+00 0.6400E+02 0.585 0.0000E+00 0.6400E+02 0.594 0.0000E+00 0.6400E+02 0.602 0.0000E+00 0.6400E+02 0.610 0.0000E+00 0.6400E+02 0.618 0.0000E+00 0.6400E+02 0.627 0.0000E+00 0.6400E+02 0.635 0.0000E+00 0.6400E+02 0.643 0.0000E+00 0.6400E+02 0.651 0.0000E+00 0.6400E+02 0.659 0.0000E+00 0.6400E+02 0.668 0.0000E+00 0.6400E+02 0.676 0.0000E+00 0.6400E+02 0.684 0.0000E+00 0.6400E+02 0.692 0.0000E+00 0.6400E+02 0.701 0.0000E+00 0.6400E+02 0.709 0.0000E+00 0.6400E+02 0.717 0.0000E+00 0.6400E+02 0.725 0.0000E+00 0.6400E+02 0.734 0.0000E+00 0.6400E+02 0.742 0.0000E+00 0.6400E+02 0.750 0.0000E+00 0.6400E+02 0.758 0.0000E+00 0.6400E+02 0.767 0.0000E+00 0.6400E+02 0.775 0.0000E+00 0.6400E+02 0.783 0.0000E+00 0.6400E+02 0.791 0.0000E+00 0.6400E+02 0.799 0.0000E+00 0.6400E+02 0.808 0.0000E+00 0.6400E+02 0.816 0.0000E+00 0.6400E+02 0.824 0.0000E+00 0.6400E+02 0.832 0.0000E+00 0.6400E+02 0.841 0.0000E+00 0.6400E+02 0.849 0.0000E+00 0.6400E+02 0.857 0.0000E+00 0.6400E+02 0.865 0.0000E+00 0.6400E+02 0.874 0.0000E+00 0.6400E+02 0.882 0.0000E+00 0.6400E+02 0.890 0.0000E+00 0.6400E+02 0.898 0.0000E+00 0.6400E+02 0.907 0.0000E+00 0.6400E+02 0.915 0.0000E+00 0.6400E+02 0.923 0.0000E+00 0.6400E+02 0.931 0.0000E+00 0.6400E+02 0.939 0.0000E+00 0.6400E+02 0.948 0.0000E+00 0.6400E+02 0.956 0.0000E+00 0.6400E+02 0.964 0.0000E+00 0.6400E+02 0.972 0.0000E+00 0.6400E+02 0.981 0.0000E+00 0.6400E+02 0.989 0.0000E+00 0.6400E+02 0.997 0.0000E+00 0.6400E+02 1.005 0.0000E+00 0.6400E+02 1.014 0.0000E+00 0.6400E+02 1.022 0.0000E+00 0.6400E+02 1.030 0.0000E+00 0.6400E+02 1.038 0.0000E+00 0.6400E+02 1.046 0.0000E+00 0.6400E+02 1.055 0.0000E+00 0.6400E+02 1.063 0.0000E+00 0.6400E+02 1.071 0.0000E+00 0.6400E+02 1.079 0.0000E+00 0.6400E+02 1.088 0.0000E+00 0.6400E+02 1.096 0.0000E+00 0.6400E+02 1.104 0.0000E+00 0.6400E+02 1.112 0.0000E+00 0.6400E+02 1.121 0.0000E+00 0.6400E+02 1.129 0.0000E+00 0.6400E+02 1.137 0.0000E+00 0.6400E+02 1.145 0.0000E+00 0.6400E+02 1.154 0.0000E+00 0.6400E+02 1.162 0.0000E+00 0.6400E+02 1.170 0.0000E+00 0.6400E+02 1.178 0.0000E+00 0.6400E+02 1.186 0.0000E+00 0.6400E+02 1.195 0.0000E+00 0.6400E+02 1.203 0.0000E+00 0.6400E+02 1.211 0.0000E+00 0.6400E+02 1.219 0.0000E+00 0.6400E+02 1.228 0.0000E+00 0.6400E+02 1.236 0.0000E+00 0.6400E+02 1.244 0.0000E+00 0.6400E+02 1.252 0.0000E+00 0.6400E+02 1.261 0.0000E+00 0.6400E+02 1.269 0.0000E+00 0.6400E+02 1.277 0.0000E+00 0.6400E+02 1.285 0.0000E+00 0.6400E+02 1.294 0.0000E+00 0.6400E+02 1.302 0.0000E+00 0.6400E+02 1.310 0.0000E+00 0.6400E+02 1.318 0.0000E+00 0.6400E+02 1.326 0.0000E+00 0.6400E+02 1.335 0.0000E+00 0.6400E+02 1.343 0.0000E+00 0.6400E+02 1.351 0.0000E+00 0.6400E+02 1.359 0.0000E+00 0.6400E+02 1.368 0.0000E+00 0.6400E+02 1.376 0.0000E+00 0.6400E+02 1.384 0.0000E+00 0.6400E+02 1.392 0.0000E+00 0.6400E+02 1.401 0.0000E+00 0.6400E+02 1.409 0.0000E+00 0.6400E+02 1.417 0.0000E+00 0.6400E+02 1.425 0.0000E+00 0.6400E+02 1.434 0.0000E+00 0.6400E+02 1.442 0.0000E+00 0.6400E+02 1.450 0.0000E+00 0.6400E+02 1.458 0.0000E+00 0.6400E+02 1.466 0.0000E+00 0.6400E+02 1.475 0.0000E+00 0.6400E+02 1.483 0.0000E+00 0.6400E+02 1.491 0.0000E+00 0.6400E+02 1.499 0.0000E+00 0.6400E+02 1.508 0.0000E+00 0.6400E+02 1.516 0.0000E+00 0.6400E+02 1.524 0.0000E+00 0.6400E+02 1.532 0.0000E+00 0.6400E+02 1.541 0.0000E+00 0.6400E+02 1.549 0.0000E+00 0.6400E+02 1.557 0.0000E+00 0.6400E+02 1.565 0.0000E+00 0.6400E+02 1.573 0.0000E+00 0.6400E+02 1.582 0.0000E+00 0.6400E+02 1.590 0.0000E+00 0.6400E+02 1.598 0.0000E+00 0.6400E+02 1.606 0.0000E+00 0.6400E+02 1.615 0.0000E+00 0.6400E+02 1.623 0.0000E+00 0.6400E+02 1.631 0.0000E+00 0.6400E+02 1.639 0.0000E+00 0.6400E+02 1.648 0.0000E+00 0.6400E+02 1.656 0.0000E+00 0.6400E+02 1.664 0.0000E+00 0.6400E+02 1.672 0.0000E+00 0.6400E+02 1.681 0.0000E+00 0.6400E+02 1.689 0.0000E+00 0.6400E+02 1.697 0.0000E+00 0.6400E+02 1.705 0.0000E+00 0.6400E+02 1.713 0.0000E+00 0.6400E+02 1.722 0.0000E+00 0.6400E+02 1.730 0.0000E+00 0.6400E+02 1.738 0.0000E+00 0.6400E+02 1.746 0.0000E+00 0.6400E+02 1.755 0.0000E+00 0.6400E+02 1.763 0.0000E+00 0.6400E+02 1.771 0.0000E+00 0.6400E+02 1.779 0.0000E+00 0.6400E+02 1.788 0.0000E+00 0.6400E+02 1.796 0.0000E+00 0.6400E+02 1.804 0.0000E+00 0.6400E+02 1.812 0.0000E+00 0.6400E+02 1.821 0.0000E+00 0.6400E+02 1.829 0.0000E+00 0.6400E+02 1.837 0.0000E+00 0.6400E+02 1.845 0.0000E+00 0.6400E+02 1.853 0.0000E+00 0.6400E+02 1.862 0.0000E+00 0.6400E+02 1.870 0.0000E+00 0.6400E+02 1.878 0.0000E+00 0.6400E+02 1.886 0.0000E+00 0.6400E+02 1.895 0.0000E+00 0.6400E+02 1.903 0.0000E+00 0.6400E+02 1.911 0.0000E+00 0.6400E+02 1.919 0.0000E+00 0.6400E+02 1.928 0.0000E+00 0.6400E+02 1.936 0.0000E+00 0.6400E+02 1.944 0.0000E+00 0.6400E+02 1.952 0.0000E+00 0.6400E+02 1.961 0.0000E+00 0.6400E+02 1.969 0.0000E+00 0.6400E+02 1.977 0.0000E+00 0.6400E+02 1.985 0.0000E+00 0.6400E+02 1.993 0.0000E+00 0.6400E+02 2.002 0.0000E+00 0.6400E+02 2.010 0.0000E+00 0.6400E+02 2.018 0.0000E+00 0.6400E+02 2.026 0.0000E+00 0.6400E+02 2.035 0.0000E+00 0.6400E+02 2.043 0.0000E+00 0.6400E+02 2.051 0.0000E+00 0.6400E+02 2.059 0.0000E+00 0.6400E+02 2.068 0.0000E+00 0.6400E+02 2.076 0.0000E+00 0.6400E+02 2.084 0.0000E+00 0.6400E+02 2.092 0.0000E+00 0.6400E+02 2.100 0.0000E+00 0.6400E+02 2.109 0.0000E+00 0.6400E+02 2.117 0.0000E+00 0.6400E+02 2.125 0.0000E+00 0.6400E+02 2.133 0.0000E+00 0.6400E+02 2.142 0.0000E+00 0.6400E+02 2.150 0.0000E+00 0.6400E+02 2.158 0.0000E+00 0.6400E+02 2.166 0.0000E+00 0.6400E+02 2.175 0.0000E+00 0.6400E+02 2.183 0.0000E+00 0.6400E+02 2.191 0.0000E+00 0.6400E+02 2.199 0.0000E+00 0.6400E+02 2.208 0.0000E+00 0.6400E+02 2.216 0.0000E+00 0.6400E+02 2.224 0.0000E+00 0.6400E+02 2.232 0.0000E+00 0.6400E+02 2.240 0.0000E+00 0.6400E+02 2.249 0.0000E+00 0.6400E+02 2.257 0.0000E+00 0.6400E+02 2.265 0.0000E+00 0.6400E+02 2.273 0.0000E+00 0.6400E+02 2.282 0.0000E+00 0.6400E+02 2.290 0.0000E+00 0.6400E+02 2.298 0.0000E+00 0.6400E+02 2.306 0.0000E+00 0.6400E+02 2.315 0.0000E+00 0.6400E+02 2.323 0.0000E+00 0.6400E+02 2.331 0.0000E+00 0.6400E+02 2.339 0.0000E+00 0.6400E+02 2.348 0.0000E+00 0.6400E+02 2.356 0.0000E+00 0.6400E+02 2.364 0.0000E+00 0.6400E+02 2.372 0.0000E+00 0.6400E+02 2.380 0.0000E+00 0.6400E+02 2.389 0.0000E+00 0.6400E+02 2.397 0.0000E+00 0.6400E+02 2.405 0.0000E+00 0.6400E+02 2.413 0.0000E+00 0.6400E+02 2.422 0.0000E+00 0.6400E+02 2.430 0.0000E+00 0.6400E+02 2.438 0.0000E+00 0.6400E+02 2.446 0.0000E+00 0.6400E+02 2.455 0.0000E+00 0.6400E+02 2.463 0.0000E+00 0.6400E+02 2.471 0.0000E+00 0.6400E+02 2.479 0.0000E+00 0.6400E+02 2.488 0.0000E+00 0.6400E+02 2.496 0.0000E+00 0.6400E+02 2.504 0.0000E+00 0.6400E+02 2.512 0.0000E+00 0.6400E+02 2.520 0.0000E+00 0.6400E+02 2.529 0.0000E+00 0.6400E+02 2.537 0.0000E+00 0.6400E+02 2.545 0.0000E+00 0.6400E+02 2.553 0.0000E+00 0.6400E+02 2.562 0.0000E+00 0.6400E+02 2.570 0.0000E+00 0.6400E+02 2.578 0.0000E+00 0.6400E+02 2.586 0.0000E+00 0.6400E+02 2.595 0.0000E+00 0.6400E+02 2.603 0.0000E+00 0.6400E+02 2.611 0.0000E+00 0.6400E+02 2.619 0.0000E+00 0.6400E+02 2.628 0.0000E+00 0.6400E+02 2.636 0.0000E+00 0.6400E+02 2.644 0.0000E+00 0.6400E+02 2.652 0.0000E+00 0.6400E+02 2.660 0.0000E+00 0.6400E+02 2.669 0.0000E+00 0.6400E+02 2.677 0.0000E+00 0.6400E+02 2.685 0.0000E+00 0.6400E+02 2.693 0.0000E+00 0.6400E+02 2.702 0.0000E+00 0.6400E+02 2.710 0.0000E+00 0.6400E+02 2.718 0.0000E+00 0.6400E+02 2.726 0.0000E+00 0.6400E+02 2.735 0.0000E+00 0.6400E+02 2.743 0.0000E+00 0.6400E+02 2.751 0.0000E+00 0.6400E+02 2.759 0.0000E+00 0.6400E+02 2.767 0.0000E+00 0.6400E+02 2.776 0.0000E+00 0.6400E+02 2.784 0.0000E+00 0.6400E+02 2.792 0.0000E+00 0.6400E+02 2.800 0.0000E+00 0.6400E+02 2.809 0.0000E+00 0.6400E+02 2.817 0.0000E+00 0.6400E+02 2.825 0.0000E+00 0.6400E+02 2.833 0.0000E+00 0.6400E+02 2.842 0.0000E+00 0.6400E+02 2.850 0.0000E+00 0.6400E+02 2.858 0.0000E+00 0.6400E+02 2.866 0.0000E+00 0.6400E+02 2.875 0.0000E+00 0.6400E+02 2.883 0.0000E+00 0.6400E+02 2.891 0.0000E+00 0.6400E+02 2.899 0.0000E+00 0.6400E+02 2.907 0.0000E+00 0.6400E+02 2.916 0.0000E+00 0.6400E+02 2.924 0.0000E+00 0.6400E+02 2.932 0.0000E+00 0.6400E+02 2.940 0.0000E+00 0.6400E+02 2.949 0.0000E+00 0.6400E+02 2.957 0.0000E+00 0.6400E+02 2.965 0.0000E+00 0.6400E+02 2.973 0.0000E+00 0.6400E+02 2.982 0.0000E+00 0.6400E+02 2.990 0.0000E+00 0.6400E+02 2.998 0.0000E+00 0.6400E+02 3.006 0.0000E+00 0.6400E+02 3.015 0.0000E+00 0.6400E+02 3.023 0.0000E+00 0.6400E+02 3.031 0.0000E+00 0.6400E+02 3.039 0.0000E+00 0.6400E+02 3.047 0.0000E+00 0.6400E+02 3.056 0.0000E+00 0.6400E+02 3.064 0.0000E+00 0.6400E+02 3.072 0.0000E+00 0.6400E+02 3.080 0.0000E+00 0.6400E+02 3.089 0.0000E+00 0.6400E+02 3.097 0.0000E+00 0.6400E+02 3.105 0.0000E+00 0.6400E+02 3.113 0.0000E+00 0.6400E+02 3.122 0.0000E+00 0.6400E+02 3.130 0.0000E+00 0.6400E+02 3.138 0.0000E+00 0.6400E+02 3.146 0.0000E+00 0.6400E+02 3.155 0.0000E+00 0.6400E+02 3.163 0.0000E+00 0.6400E+02 3.171 0.0000E+00 0.6400E+02 3.179 0.0000E+00 0.6400E+02 3.187 0.0000E+00 0.6400E+02 3.196 0.0000E+00 0.6400E+02 3.204 0.0000E+00 0.6400E+02 3.212 0.0000E+00 0.6400E+02 3.220 0.0000E+00 0.6400E+02 3.229 0.0000E+00 0.6400E+02 3.237 0.0000E+00 0.6400E+02 3.245 0.0000E+00 0.6400E+02 3.253 0.0000E+00 0.6400E+02 3.262 0.0000E+00 0.6400E+02 3.270 0.0000E+00 0.6400E+02 3.278 0.0000E+00 0.6400E+02 3.286 0.0000E+00 0.6400E+02 3.294 0.0000E+00 0.6400E+02 3.303 0.0000E+00 0.6400E+02 3.311 0.0000E+00 0.6400E+02 3.319 0.0000E+00 0.6400E+02 3.327 0.0000E+00 0.6400E+02 3.336 0.0000E+00 0.6400E+02 3.344 0.0000E+00 0.6400E+02 3.352 0.0000E+00 0.6400E+02 3.360 0.0000E+00 0.6400E+02 3.369 0.0000E+00 0.6400E+02 3.377 0.0000E+00 0.6400E+02 3.385 0.0000E+00 0.6400E+02 3.393 0.0000E+00 0.6400E+02 3.402 0.0000E+00 0.6400E+02 3.410 0.0000E+00 0.6400E+02 3.418 0.0000E+00 0.6400E+02 3.426 0.0000E+00 0.6400E+02 3.434 0.0000E+00 0.6400E+02 3.443 0.0000E+00 0.6400E+02 3.451 0.0000E+00 0.6400E+02 3.459 0.0000E+00 0.6400E+02 3.467 0.0000E+00 0.6400E+02 3.476 0.0000E+00 0.6400E+02 3.484 0.0000E+00 0.6400E+02 3.492 0.0000E+00 0.6400E+02 3.500 0.0000E+00 0.6400E+02 3.509 0.0000E+00 0.6400E+02 3.517 0.0000E+00 0.6400E+02 3.525 0.0000E+00 0.6400E+02 3.533 0.0000E+00 0.6400E+02 3.542 0.0000E+00 0.6400E+02 3.550 0.0000E+00 0.6400E+02 3.558 0.0000E+00 0.6400E+02 3.566 0.0000E+00 0.6400E+02 3.574 0.0000E+00 0.6400E+02 3.583 0.0000E+00 0.6400E+02 3.591 0.0000E+00 0.6400E+02 3.599 0.0000E+00 0.6400E+02 3.607 0.0000E+00 0.6400E+02 3.616 0.0000E+00 0.6400E+02 3.624 0.0000E+00 0.6400E+02 3.632 0.0000E+00 0.6400E+02 3.640 0.0000E+00 0.6400E+02 3.649 0.0000E+00 0.6400E+02 3.657 0.0000E+00 0.6400E+02 3.665 0.0000E+00 0.6400E+02 3.673 0.0000E+00 0.6400E+02 3.682 0.0000E+00 0.6400E+02 3.690 0.0000E+00 0.6400E+02 3.698 0.0000E+00 0.6400E+02 3.706 0.0000E+00 0.6400E+02 3.714 0.0000E+00 0.6400E+02 3.723 0.0000E+00 0.6400E+02 3.731 0.0000E+00 0.6400E+02 3.739 0.0000E+00 0.6400E+02 3.747 0.0000E+00 0.6400E+02 3.756 0.0000E+00 0.6400E+02 3.764 0.0000E+00 0.6400E+02 3.772 0.0000E+00 0.6400E+02 3.780 0.0000E+00 0.6400E+02 3.789 0.0000E+00 0.6400E+02 3.797 0.0000E+00 0.6400E+02 3.805 0.0000E+00 0.6400E+02 3.813 0.0000E+00 0.6400E+02 3.822 0.0000E+00 0.6400E+02 3.830 0.0000E+00 0.6400E+02 3.838 0.0000E+00 0.6400E+02 3.846 0.0000E+00 0.6400E+02 3.854 0.0000E+00 0.6400E+02 3.863 0.0000E+00 0.6400E+02 3.871 0.0000E+00 0.6400E+02 3.879 0.3514E-03 0.6400E+02 3.887 0.3074E-02 0.6400E+02 3.896 0.8509E-02 0.6400E+02 3.904 0.1752E-01 0.6400E+02 3.912 0.3059E-01 0.6400E+02 3.920 0.4771E-01 0.6400E+02 3.929 0.6888E-01 0.6400E+02 3.937 0.9378E-01 0.6400E+02 3.945 0.1222E+00 0.6400E+02 3.953 0.1542E+00 0.6400E+02 3.961 0.1897E+00 0.6401E+02 3.970 0.2270E+00 0.6401E+02 3.978 0.2644E+00 0.6401E+02 3.986 0.3010E+00 0.6401E+02 3.994 0.3357E+00 0.6401E+02 4.003 0.3688E+00 0.6402E+02 4.011 0.4007E+00 0.6402E+02 4.019 0.4304E+00 0.6402E+02 4.027 0.4576E+00 0.6403E+02 4.036 0.4821E+00 0.6403E+02 4.044 0.5039E+00 0.6404E+02 4.052 0.5229E+00 0.6404E+02 4.060 0.5392E+00 0.6404E+02 4.069 0.5528E+00 0.6405E+02 4.077 0.5643E+00 0.6405E+02 4.085 0.5755E+00 0.6406E+02 4.093 0.5869E+00 0.6406E+02 4.101 0.5993E+00 0.6407E+02 4.110 0.6126E+00 0.6407E+02 4.118 0.6265E+00 0.6408E+02 4.126 0.6409E+00 0.6408E+02 4.134 0.6560E+00 0.6409E+02 4.143 0.6722E+00 0.6409E+02 4.151 0.6895E+00 0.6410E+02 4.159 0.7076E+00 0.6410E+02 4.167 0.7259E+00 0.6411E+02 4.176 0.7441E+00 0.6412E+02 4.184 0.7624E+00 0.6412E+02 4.192 0.7811E+00 0.6413E+02 4.200 0.7995E+00 0.6414E+02 4.209 0.8174E+00 0.6414E+02 4.217 0.8347E+00 0.6415E+02 4.225 0.8516E+00 0.6416E+02 4.233 0.8684E+00 0.6416E+02 4.241 0.8851E+00 0.6417E+02 4.250 0.9016E+00 0.6418E+02 4.258 0.9179E+00 0.6419E+02 4.266 0.9342E+00 0.6419E+02 4.274 0.9512E+00 0.6420E+02 4.283 0.9689E+00 0.6421E+02 4.291 0.9871E+00 0.6422E+02 4.299 0.1006E+01 0.6422E+02 4.307 0.1024E+01 0.6423E+02 4.316 0.1043E+01 0.6424E+02 4.324 0.1062E+01 0.6425E+02 4.332 0.1080E+01 0.6426E+02 4.340 0.1098E+01 0.6427E+02 4.349 0.1127E+01 0.6428E+02 4.357 0.1157E+01 0.6429E+02 4.365 0.1186E+01 0.6430E+02 4.373 0.1213E+01 0.6431E+02 4.381 0.1239E+01 0.6432E+02 4.390 0.1263E+01 0.6433E+02 4.398 0.1286E+01 0.6434E+02 4.406 0.1300E+01 0.6435E+02 4.414 0.1315E+01 0.6436E+02 4.423 0.1349E+01 0.6437E+02 4.431 0.1428E+01 0.6438E+02 4.439 0.1447E+01 0.6439E+02 4.447 0.1461E+01 0.6440E+02 4.456 0.1474E+01 0.6442E+02 4.464 0.1487E+01 0.6443E+02 4.472 0.1500E+01 0.6444E+02 4.480 0.1512E+01 0.6445E+02 4.488 0.1519E+01 0.6447E+02 4.497 0.1529E+01 0.6448E+02 4.505 0.1539E+01 0.6449E+02 4.513 0.1548E+01 0.6450E+02 4.521 0.1556E+01 0.6452E+02 4.530 0.1528E+01 0.6453E+02 4.538 0.1513E+01 0.6454E+02 4.546 0.1514E+01 0.6455E+02 4.554 0.1514E+01 0.6457E+02 4.563 0.1515E+01 0.6458E+02 4.571 0.1515E+01 0.6459E+02 4.579 0.1516E+01 0.6460E+02 4.587 0.1523E+01 0.6462E+02 4.596 0.1535E+01 0.6463E+02 4.604 0.1559E+01 0.6464E+02 4.612 0.1589E+01 0.6466E+02 4.620 0.1625E+01 0.6467E+02 4.628 0.1666E+01 0.6468E+02 4.637 0.1735E+01 0.6470E+02 4.645 0.1851E+01 0.6471E+02 4.653 0.1932E+01 0.6473E+02 4.661 0.1986E+01 0.6474E+02 4.670 0.2038E+01 0.6476E+02 4.678 0.2086E+01 0.6478E+02 4.686 0.2117E+01 0.6479E+02 4.694 0.2141E+01 0.6481E+02 4.703 0.2154E+01 0.6483E+02 4.711 0.2152E+01 0.6485E+02 4.719 0.2144E+01 0.6486E+02 4.727 0.2099E+01 0.6488E+02 4.736 0.2063E+01 0.6490E+02 4.744 0.2052E+01 0.6492E+02 4.752 0.2053E+01 0.6493E+02 4.760 0.2127E+01 0.6495E+02 4.768 0.2156E+01 0.6497E+02 4.777 0.2205E+01 0.6498E+02 4.785 0.2262E+01 0.6500E+02 4.793 0.2324E+01 0.6502E+02 4.801 0.2389E+01 0.6504E+02 4.810 0.2458E+01 0.6506E+02 4.818 0.2535E+01 0.6508E+02 4.826 0.2605E+01 0.6510E+02 4.834 0.2685E+01 0.6512E+02 4.843 0.2767E+01 0.6515E+02 4.851 0.2815E+01 0.6517E+02 4.859 0.2884E+01 0.6519E+02 4.867 0.2939E+01 0.6522E+02 4.876 0.2977E+01 0.6524E+02 4.884 0.3016E+01 0.6527E+02 4.892 0.3053E+01 0.6529E+02 4.900 0.3127E+01 0.6532E+02 4.908 0.3117E+01 0.6534E+02 4.917 0.3104E+01 0.6537E+02 4.925 0.3092E+01 0.6539E+02 4.933 0.3079E+01 0.6542E+02 4.941 0.3068E+01 0.6544E+02 4.950 0.3064E+01 0.6547E+02 4.958 0.3065E+01 0.6550E+02 4.966 0.3079E+01 0.6552E+02 4.974 0.3111E+01 0.6555E+02 4.983 0.3127E+01 0.6557E+02 4.991 0.3189E+01 0.6560E+02 4.999 0.3258E+01 0.6562E+02 5.007 0.3370E+01 0.6565E+02 5.015 0.3542E+01 0.6568E+02 5.024 0.3726E+01 0.6571E+02 5.032 0.3914E+01 0.6574E+02 5.040 0.4108E+01 0.6577E+02 5.048 0.4350E+01 0.6581E+02 5.057 0.4652E+01 0.6585E+02 5.065 0.4947E+01 0.6589E+02 5.073 0.5218E+01 0.6593E+02 5.081 0.5394E+01 0.6597E+02 5.090 0.5548E+01 0.6602E+02 5.098 0.5633E+01 0.6606E+02 5.106 0.5709E+01 0.6611E+02 5.114 0.5783E+01 0.6616E+02 5.123 0.5848E+01 0.6620E+02 5.131 0.5908E+01 0.6625E+02 5.139 0.5957E+01 0.6630E+02 5.147 0.5981E+01 0.6635E+02 5.155 0.5990E+01 0.6640E+02 5.164 0.6013E+01 0.6645E+02 5.172 0.6045E+01 0.6650E+02 5.180 0.6092E+01 0.6655E+02 5.188 0.6220E+01 0.6660E+02 5.197 0.6390E+01 0.6665E+02 5.205 0.6544E+01 0.6670E+02 5.213 0.6721E+01 0.6676E+02 5.221 0.6878E+01 0.6682E+02 5.230 0.6985E+01 0.6687E+02 5.238 0.7171E+01 0.6693E+02 5.246 0.7455E+01 0.6699E+02 5.254 0.7746E+01 0.6705E+02 5.263 0.8176E+01 0.6712E+02 5.271 0.8441E+01 0.6719E+02 5.279 0.8675E+01 0.6726E+02 5.287 0.8607E+01 0.6733E+02 5.295 0.8615E+01 0.6740E+02 5.304 0.8762E+01 0.6747E+02 5.312 0.9093E+01 0.6755E+02 5.320 0.9397E+01 0.6762E+02 5.328 0.9662E+01 0.6770E+02 5.337 0.9979E+01 0.6778E+02 5.345 0.1025E+02 0.6786E+02 5.353 0.1140E+02 0.6795E+02 5.361 0.1145E+02 0.6804E+02 5.370 0.1149E+02 0.6814E+02 5.378 0.1114E+02 0.6823E+02 5.386 0.1061E+02 0.6832E+02 5.394 0.1030E+02 0.6841E+02 5.403 0.1105E+02 0.6850E+02 5.411 0.1330E+02 0.6859E+02 5.419 0.1344E+02 0.6870E+02 5.427 0.9294E+01 0.6879E+02 5.435 0.9283E+01 0.6886E+02 5.444 0.9459E+01 0.6894E+02 5.452 0.6823E+01 0.6901E+02 5.460 0.6101E+01 0.6906E+02 5.468 0.5843E+01 0.6911E+02 5.477 0.5609E+01 0.6916E+02 5.485 0.5359E+01 0.6920E+02 5.493 0.5092E+01 0.6925E+02 5.501 0.4712E+01 0.6929E+02 5.510 0.4897E+01 0.6933E+02 5.518 0.5108E+01 0.6937E+02 5.526 0.5326E+01 0.6941E+02 5.534 0.5552E+01 0.6946E+02 5.543 0.5696E+01 0.6950E+02 5.551 0.5935E+01 0.6955E+02 5.559 0.6019E+01 0.6960E+02 5.567 0.7093E+01 0.6965E+02 5.575 0.6931E+01 0.6971E+02 5.584 0.6668E+01 0.6977E+02 5.592 0.6617E+01 0.6982E+02 5.600 0.6483E+01 0.6988E+02 5.608 0.6374E+01 0.6993E+02 5.617 0.6318E+01 0.6998E+02 5.625 0.6172E+01 0.7003E+02 5.633 0.5848E+01 0.7008E+02 5.641 0.5606E+01 0.7013E+02 5.650 0.5457E+01 0.7018E+02 5.658 0.5321E+01 0.7022E+02 5.666 0.5190E+01 0.7026E+02 5.674 0.5116E+01 0.7031E+02 5.682 0.5041E+01 0.7035E+02 5.691 0.5035E+01 0.7039E+02 5.699 0.4989E+01 0.7043E+02 5.707 0.4930E+01 0.7047E+02 5.715 0.4938E+01 0.7051E+02 5.724 0.4892E+01 0.7055E+02 5.732 0.4911E+01 0.7059E+02 5.740 0.4743E+01 0.7063E+02 5.748 0.4645E+01 0.7067E+02 5.757 0.4452E+01 0.7071E+02 5.765 0.4248E+01 0.7075E+02 5.773 0.4090E+01 0.7078E+02 5.781 0.3779E+01 0.7081E+02 5.790 0.3352E+01 0.7084E+02 5.798 0.3241E+01 0.7087E+02 5.806 0.3139E+01 0.7090E+02 5.814 0.3048E+01 0.7092E+02 5.822 0.2974E+01 0.7095E+02 5.831 0.2910E+01 0.7097E+02 5.839 0.2843E+01 0.7099E+02 5.847 0.2774E+01 0.7102E+02 5.855 0.2704E+01 0.7104E+02 5.864 0.2650E+01 0.7106E+02 5.872 0.2603E+01 0.7108E+02 5.880 0.2564E+01 0.7110E+02 5.888 0.2526E+01 0.7112E+02 5.897 0.2489E+01 0.7115E+02 5.905 0.2451E+01 0.7117E+02 5.913 0.2415E+01 0.7119E+02 5.921 0.2380E+01 0.7121E+02 5.930 0.2348E+01 0.7123E+02 5.938 0.2316E+01 0.7124E+02 5.946 0.2279E+01 0.7126E+02 5.954 0.2234E+01 0.7128E+02 5.962 0.2186E+01 0.7130E+02 5.971 0.2124E+01 0.7132E+02 5.979 0.2089E+01 0.7134E+02 5.987 0.2055E+01 0.7135E+02 5.995 0.2022E+01 0.7137E+02 6.004 0.1988E+01 0.7139E+02 6.012 0.1934E+01 0.7140E+02 6.020 0.1894E+01 0.7142E+02 6.028 0.1865E+01 0.7143E+02 6.037 0.1861E+01 0.7145E+02 6.045 0.1849E+01 0.7146E+02 6.053 0.1854E+01 0.7148E+02 6.061 0.1860E+01 0.7149E+02 6.070 0.1869E+01 0.7151E+02 6.078 0.1879E+01 0.7152E+02 6.086 0.1892E+01 0.7154E+02 6.094 0.1906E+01 0.7156E+02 6.102 0.1914E+01 0.7157E+02 6.111 0.1918E+01 0.7159E+02 6.119 0.1914E+01 0.7160E+02 6.127 0.1909E+01 0.7162E+02 6.135 0.1907E+01 0.7163E+02 6.144 0.1908E+01 0.7165E+02 6.152 0.1935E+01 0.7167E+02 6.160 0.1972E+01 0.7168E+02 6.168 0.2017E+01 0.7170E+02 6.177 0.2079E+01 0.7172E+02 6.185 0.2183E+01 0.7173E+02 6.193 0.2327E+01 0.7175E+02 6.201 0.2538E+01 0.7177E+02 6.209 0.2734E+01 0.7179E+02 6.218 0.2910E+01 0.7182E+02 6.226 0.3131E+01 0.7184E+02 6.234 0.3245E+01 0.7187E+02 6.242 0.3323E+01 0.7189E+02 6.251 0.3379E+01 0.7192E+02 6.259 0.3394E+01 0.7195E+02 6.267 0.3410E+01 0.7198E+02 6.275 0.3409E+01 0.7201E+02 6.284 0.3342E+01 0.7203E+02 6.292 0.3222E+01 0.7206E+02 6.300 0.3256E+01 0.7209E+02 6.308 0.3292E+01 0.7211E+02 6.317 0.3305E+01 0.7214E+02 6.325 0.3300E+01 0.7217E+02 6.333 0.3280E+01 0.7220E+02 6.341 0.3262E+01 0.7222E+02 6.349 0.3306E+01 0.7225E+02 6.358 0.3365E+01 0.7228E+02 6.366 0.3266E+01 0.7231E+02 6.374 0.3258E+01 0.7233E+02 6.382 0.3254E+01 0.7236E+02 6.391 0.3263E+01 0.7239E+02 6.399 0.3274E+01 0.7241E+02 6.407 0.3288E+01 0.7244E+02 6.415 0.3332E+01 0.7247E+02 6.424 0.3383E+01 0.7249E+02 6.432 0.3424E+01 0.7252E+02 6.440 0.3562E+01 0.7255E+02 6.448 0.3590E+01 0.7258E+02 6.457 0.3602E+01 0.7261E+02 6.465 0.3596E+01 0.7264E+02 6.473 0.3593E+01 0.7267E+02 6.481 0.3514E+01 0.7270E+02 6.489 0.3462E+01 0.7273E+02 6.498 0.3364E+01 0.7276E+02 6.506 0.3240E+01 0.7278E+02 6.514 0.3197E+01 0.7281E+02 6.522 0.3140E+01 0.7284E+02 6.531 0.3076E+01 0.7286E+02 6.539 0.3006E+01 0.7289E+02 6.547 0.2936E+01 0.7291E+02 6.555 0.2873E+01 0.7293E+02 6.564 0.2811E+01 0.7296E+02 6.572 0.2801E+01 0.7298E+02 6.580 0.2794E+01 0.7300E+02 6.588 0.2789E+01 0.7303E+02 6.597 0.2786E+01 0.7305E+02 6.605 0.2781E+01 0.7307E+02 6.613 0.2780E+01 0.7310E+02 6.621 0.2759E+01 0.7312E+02 6.629 0.2753E+01 0.7314E+02 6.638 0.2753E+01 0.7316E+02 6.646 0.2756E+01 0.7319E+02 6.654 0.2761E+01 0.7321E+02 6.662 0.2768E+01 0.7323E+02 6.671 0.2797E+01 0.7326E+02 6.679 0.2847E+01 0.7328E+02 6.687 0.2914E+01 0.7330E+02 6.695 0.2997E+01 0.7333E+02 6.704 0.3068E+01 0.7335E+02 6.712 0.3137E+01 0.7338E+02 6.720 0.3212E+01 0.7340E+02 6.728 0.3305E+01 0.7343E+02 6.736 0.3534E+01 0.7346E+02 6.745 0.3718E+01 0.7349E+02 6.753 0.3920E+01 0.7352E+02 6.761 0.4153E+01 0.7355E+02 6.769 0.4456E+01 0.7359E+02 6.778 0.4741E+01 0.7363E+02 6.786 0.5289E+01 0.7367E+02 6.794 0.5590E+01 0.7371E+02 6.802 0.5883E+01 0.7376E+02 6.811 0.5714E+01 0.7381E+02 6.819 0.5616E+01 0.7385E+02 6.827 0.5474E+01 0.7390E+02 6.835 0.5400E+01 0.7394E+02 6.844 0.5336E+01 0.7399E+02 6.852 0.5292E+01 0.7403E+02 6.860 0.5290E+01 0.7408E+02 6.868 0.5587E+01 0.7412E+02 6.876 0.5475E+01 0.7417E+02 6.885 0.5670E+01 0.7421E+02 6.893 0.5827E+01 0.7426E+02 6.901 0.5959E+01 0.7431E+02 6.909 0.6104E+01 0.7436E+02 6.918 0.6325E+01 0.7441E+02 6.926 0.6471E+01 0.7446E+02 6.934 0.6575E+01 0.7451E+02 6.942 0.6692E+01 0.7457E+02 6.951 0.6870E+01 0.7463E+02 6.959 0.7183E+01 0.7468E+02 6.967 0.7385E+01 0.7474E+02 6.975 0.7430E+01 0.7480E+02 6.984 0.7340E+01 0.7487E+02 6.992 0.7278E+01 0.7493E+02 7.000 0.7891E+01 0.7499E+02 7.008 0.8398E+01 0.7505E+02 7.016 0.8541E+01 0.7512E+02 7.025 0.8687E+01 0.7520E+02 7.033 0.8702E+01 0.7527E+02 7.041 0.8706E+01 0.7534E+02 7.049 0.8773E+01 0.7541E+02 7.058 0.9354E+01 0.7548E+02 7.066 0.1040E+02 0.7557E+02 7.074 0.1112E+02 0.7565E+02 7.082 0.1075E+02 0.7575E+02 7.091 0.9247E+01 0.7583E+02 7.099 0.8958E+01 0.7590E+02 7.107 0.8905E+01 0.7598E+02 7.115 0.9221E+01 0.7605E+02 7.124 0.9203E+01 0.7613E+02 7.132 0.9172E+01 0.7620E+02 7.140 0.8993E+01 0.7628E+02 7.148 0.8946E+01 0.7635E+02 7.156 0.8959E+01 0.7642E+02 7.165 0.9016E+01 0.7650E+02 7.173 0.9091E+01 0.7657E+02 7.181 0.9206E+01 0.7665E+02 7.189 0.9393E+01 0.7673E+02 7.198 0.9213E+01 0.7680E+02 7.206 0.9114E+01 0.7688E+02 7.214 0.9018E+01 0.7695E+02 7.222 0.9009E+01 0.7703E+02 7.231 0.9008E+01 0.7710E+02 7.239 0.9018E+01 0.7718E+02 7.247 0.8731E+01 0.7725E+02 7.255 0.8240E+01 0.7732E+02 7.264 0.7846E+01 0.7738E+02 7.272 0.7586E+01 0.7745E+02 7.280 0.7424E+01 0.7751E+02 7.288 0.7291E+01 0.7757E+02 7.296 0.7181E+01 0.7763E+02 7.305 0.7104E+01 0.7769E+02 7.313 0.7110E+01 0.7775E+02 7.321 0.7153E+01 0.7781E+02 7.329 0.7171E+01 0.7786E+02 7.338 0.7222E+01 0.7792E+02 7.346 0.7251E+01 0.7798E+02 7.354 0.7300E+01 0.7804E+02 7.362 0.7353E+01 0.7810E+02 7.371 0.7411E+01 0.7816E+02 7.379 0.7476E+01 0.7823E+02 7.387 0.7547E+01 0.7829E+02 7.395 0.8293E+01 0.7835E+02 7.403 0.8596E+01 0.7842E+02 7.412 0.8792E+01 0.7849E+02 7.420 0.8808E+01 0.7857E+02 7.428 0.8697E+01 0.7864E+02 7.436 0.8928E+01 0.7871E+02 7.445 0.8939E+01 0.7878E+02 7.453 0.8652E+01 0.7886E+02 7.461 0.8102E+01 0.7893E+02 7.469 0.7544E+01 0.7899E+02 7.478 0.7197E+01 0.7905E+02 7.486 0.6983E+01 0.7911E+02 7.494 0.6814E+01 0.7917E+02 7.502 0.6653E+01 0.7922E+02 7.511 0.6599E+01 0.7928E+02 7.519 0.6616E+01 0.7933E+02 7.527 0.6525E+01 0.7938E+02 7.535 0.6421E+01 0.7944E+02 7.543 0.6267E+01 0.7949E+02 7.552 0.6101E+01 0.7954E+02 7.560 0.5787E+01 0.7959E+02 7.568 0.5729E+01 0.7964E+02 7.576 0.5672E+01 0.7968E+02 7.585 0.5626E+01 0.7973E+02 7.593 0.5603E+01 0.7978E+02 7.601 0.5650E+01 0.7982E+02 7.609 0.5481E+01 0.7987E+02 7.618 0.5508E+01 0.7991E+02 7.626 0.5598E+01 0.7996E+02 7.634 0.5709E+01 0.8001E+02 7.642 0.6118E+01 0.8006E+02 7.651 0.6469E+01 0.8011E+02 7.659 0.7025E+01 0.8016E+02 7.667 0.7060E+01 0.8022E+02 7.675 0.7324E+01 0.8028E+02 7.683 0.7557E+01 0.8034E+02 7.692 0.7678E+01 0.8040E+02 7.700 0.7756E+01 0.8047E+02 7.708 0.7638E+01 0.8053E+02 7.716 0.7649E+01 0.8059E+02 7.725 0.7560E+01 0.8066E+02 7.733 0.7434E+01 0.8072E+02 7.741 0.7476E+01 0.8078E+02 7.749 0.7678E+01 0.8084E+02 7.758 0.7984E+01 0.8091E+02 7.766 0.8160E+01 0.8097E+02 7.774 0.8366E+01 0.8104E+02 7.782 0.8773E+01 0.8111E+02 7.791 0.9013E+01 0.8119E+02 7.799 0.9058E+01 0.8126E+02 7.807 0.9105E+01 0.8134E+02 7.815 0.9061E+01 0.8141E+02 7.823 0.8791E+01 0.8148E+02 7.832 0.8755E+01 0.8156E+02 7.840 0.9132E+01 0.8163E+02 7.848 0.9285E+01 0.8171E+02 7.856 0.9365E+01 0.8178E+02 7.865 0.9190E+01 0.8186E+02 7.873 0.8837E+01 0.8193E+02 7.881 0.8516E+01 0.8200E+02 7.889 0.8372E+01 0.8207E+02 7.898 0.8352E+01 0.8214E+02 7.906 0.8375E+01 0.8221E+02 7.914 0.8508E+01 0.8228E+02 7.922 0.8581E+01 0.8235E+02 7.930 0.8789E+01 0.8242E+02 7.939 0.8792E+01 0.8250E+02 7.947 0.8843E+01 0.8257E+02 7.955 0.8960E+01 0.8264E+02 7.963 0.9184E+01 0.8272E+02 7.972 0.9289E+01 0.8279E+02 7.980 0.9572E+01 0.8287E+02 7.988 0.1007E+02 0.8295E+02 7.996 0.9947E+01 0.8304E+02 8.005 0.9726E+01 0.8312E+02 8.013 0.9590E+01 0.8320E+02 8.021 0.9369E+01 0.8327E+02 8.029 0.8958E+01 0.8335E+02 8.038 0.8657E+01 0.8343E+02 8.046 0.8399E+01 0.8350E+02 8.054 0.8174E+01 0.8357E+02 8.062 0.8404E+01 0.8363E+02 8.070 0.7727E+01 0.8370E+02 8.079 0.7681E+01 0.8376E+02 8.087 0.7735E+01 0.8383E+02 8.095 0.7910E+01 0.8389E+02 8.103 0.8190E+01 0.8396E+02 8.112 0.8713E+01 0.8403E+02 8.120 0.9101E+01 0.8410E+02 8.128 0.9219E+01 0.8417E+02 8.136 0.8047E+01 0.8424E+02 8.145 0.7934E+01 0.8431E+02 8.153 0.7932E+01 0.8438E+02 8.161 0.7748E+01 0.8444E+02 8.169 0.7557E+01 0.8450E+02 8.178 0.7190E+01 0.8456E+02 8.186 0.7009E+01 0.8462E+02 8.194 0.6877E+01 0.8468E+02 8.202 0.6752E+01 0.8474E+02 8.210 0.6627E+01 0.8479E+02 8.219 0.6480E+01 0.8484E+02 8.227 0.6347E+01 0.8490E+02 8.235 0.6218E+01 0.8495E+02 8.243 0.6099E+01 0.8500E+02 8.252 0.6035E+01 0.8505E+02 8.260 0.5961E+01 0.8510E+02 8.268 0.5910E+01 0.8515E+02 8.276 0.5878E+01 0.8520E+02 8.285 0.5869E+01 0.8525E+02 8.293 0.5863E+01 0.8529E+02 8.301 0.5871E+01 0.8534E+02 8.309 0.5900E+01 0.8539E+02 8.318 0.5931E+01 0.8544E+02 8.326 0.6005E+01 0.8549E+02 8.334 0.6090E+01 0.8554E+02 8.342 0.6173E+01 0.8559E+02 8.350 0.6234E+01 0.8564E+02 8.359 0.6248E+01 0.8569E+02 8.367 0.6311E+01 0.8574E+02 8.375 0.6424E+01 0.8579E+02 8.383 0.6652E+01 0.8585E+02 8.392 0.6844E+01 0.8590E+02 8.400 0.7045E+01 0.8596E+02 8.408 0.7176E+01 0.8602E+02 8.416 0.7192E+01 0.8608E+02 8.425 0.7120E+01 0.8614E+02 8.433 0.6995E+01 0.8620E+02 8.441 0.6819E+01 0.8625E+02 8.449 0.6650E+01 0.8631E+02 8.458 0.6554E+01 0.8636E+02 8.466 0.6742E+01 0.8642E+02 8.474 0.6743E+01 0.8647E+02 8.482 0.7066E+01 0.8653E+02 8.490 0.6414E+01 0.8659E+02 8.499 0.6324E+01 0.8664E+02 8.507 0.6202E+01 0.8669E+02 8.515 0.5906E+01 0.8674E+02 8.523 0.5814E+01 0.8679E+02 8.532 0.5726E+01 0.8684E+02 8.540 0.5701E+01 0.8688E+02 8.548 0.5695E+01 0.8693E+02 8.556 0.5733E+01 0.8698E+02 8.565 0.5822E+01 0.8703E+02 8.573 0.5729E+01 0.8707E+02 8.581 0.5470E+01 0.8712E+02 8.589 0.5175E+01 0.8716E+02 8.597 0.4918E+01 0.8721E+02 8.606 0.4677E+01 0.8725E+02 8.614 0.4461E+01 0.8728E+02 8.622 0.4299E+01 0.8732E+02 8.630 0.4167E+01 0.8735E+02 8.639 0.3977E+01 0.8739E+02 8.647 0.3802E+01 0.8742E+02 8.655 0.3616E+01 0.8745E+02 8.663 0.3418E+01 0.8748E+02 8.672 0.3236E+01 0.8751E+02 8.680 0.3138E+01 0.8753E+02 8.688 0.3207E+01 0.8756E+02 8.696 0.3299E+01 0.8758E+02 8.705 0.3048E+01 0.8761E+02 8.713 0.2643E+01 0.8763E+02 8.721 0.2456E+01 0.8766E+02 8.729 0.2345E+01 0.8768E+02 8.737 0.2240E+01 0.8769E+02 8.746 0.2151E+01 0.8771E+02 8.754 0.2073E+01 0.8773E+02 8.762 0.1998E+01 0.8775E+02 8.770 0.1922E+01 0.8776E+02 8.779 0.1842E+01 0.8778E+02 8.787 0.1758E+01 0.8779E+02 8.795 0.1673E+01 0.8781E+02 8.803 0.1602E+01 0.8782E+02 8.812 0.1563E+01 0.8783E+02 8.820 0.1523E+01 0.8785E+02 8.828 0.1481E+01 0.8786E+02 8.836 0.1436E+01 0.8787E+02 8.845 0.1393E+01 0.8788E+02 8.853 0.1348E+01 0.8789E+02 8.861 0.1290E+01 0.8790E+02 8.869 0.1219E+01 0.8791E+02 8.877 0.1172E+01 0.8792E+02 8.886 0.1169E+01 0.8793E+02 8.894 0.1068E+01 0.8794E+02 8.902 0.9936E+00 0.8795E+02 8.910 0.8810E+00 0.8796E+02 8.919 0.7465E+00 0.8797E+02 8.927 0.6156E+00 0.8797E+02 8.935 0.4984E+00 0.8798E+02 8.943 0.4389E+00 0.8798E+02 8.952 0.3892E+00 0.8798E+02 8.960 0.3427E+00 0.8799E+02 8.968 0.2989E+00 0.8799E+02 8.976 0.2564E+00 0.8799E+02 8.985 0.2160E+00 0.8799E+02 8.993 0.1789E+00 0.8800E+02 9.001 0.1453E+00 0.8800E+02 9.009 0.1152E+00 0.8800E+02 9.017 0.8853E-01 0.8800E+02 9.026 0.6541E-01 0.8800E+02 9.034 0.4577E-01 0.8800E+02 9.042 0.2963E-01 0.8800E+02 9.050 0.1699E-01 0.8800E+02 9.059 0.7840E-02 0.8800E+02 9.067 0.2185E-02 0.8800E+02 9.075 0.2446E-04 0.8800E+02 9.083 0.0000E+00 0.8800E+02 9.092 0.0000E+00 0.8800E+02 9.100 0.0000E+00 0.8800E+02 9.108 0.0000E+00 0.8800E+02 9.116 0.0000E+00 0.8800E+02 9.124 0.0000E+00 0.8800E+02 9.133 0.0000E+00 0.8800E+02 9.141 0.0000E+00 0.8800E+02 9.149 0.0000E+00 0.8800E+02 9.157 0.0000E+00 0.8800E+02 9.166 0.0000E+00 0.8800E+02 9.174 0.0000E+00 0.8800E+02 9.182 0.0000E+00 0.8800E+02 9.190 0.0000E+00 0.8800E+02 9.199 0.0000E+00 0.8800E+02 9.207 0.0000E+00 0.8800E+02 9.215 0.0000E+00 0.8800E+02 9.223 0.0000E+00 0.8800E+02 9.232 0.0000E+00 0.8800E+02 9.240 0.0000E+00 0.8800E+02 9.248 0.0000E+00 0.8800E+02 9.256 0.0000E+00 0.8800E+02 9.264 0.0000E+00 0.8800E+02 9.273 0.0000E+00 0.8800E+02 9.281 0.0000E+00 0.8800E+02 9.289 0.0000E+00 0.8800E+02 9.297 0.0000E+00 0.8800E+02 9.306 0.0000E+00 0.8800E+02 9.314 0.0000E+00 0.8800E+02 9.322 0.0000E+00 0.8800E+02 9.330 0.0000E+00 0.8800E+02 9.339 0.0000E+00 0.8800E+02 9.347 0.0000E+00 0.8800E+02 9.355 0.0000E+00 0.8800E+02 9.363 0.0000E+00 0.8800E+02 9.372 0.0000E+00 0.8800E+02 9.380 0.0000E+00 0.8800E+02 9.388 0.0000E+00 0.8800E+02 9.396 0.0000E+00 0.8800E+02 9.404 0.0000E+00 0.8800E+02 9.413 0.0000E+00 0.8800E+02 9.421 0.0000E+00 0.8800E+02 9.429 0.0000E+00 0.8800E+02 9.437 0.0000E+00 0.8800E+02 9.446 0.0000E+00 0.8800E+02 9.454 0.0000E+00 0.8800E+02 9.462 0.0000E+00 0.8800E+02 9.470 0.0000E+00 0.8800E+02 9.479 0.0000E+00 0.8800E+02 9.487 0.0000E+00 0.8800E+02 9.495 0.0000E+00 0.8800E+02 9.503 0.0000E+00 0.8800E+02 9.512 0.0000E+00 0.8800E+02 9.520 0.0000E+00 0.8800E+02 9.528 0.0000E+00 0.8800E+02 9.536 0.0000E+00 0.8800E+02 9.544 0.0000E+00 0.8800E+02 9.553 0.0000E+00 0.8800E+02 9.561 0.0000E+00 0.8800E+02 9.569 0.0000E+00 0.8800E+02 9.577 0.0000E+00 0.8800E+02 9.586 0.0000E+00 0.8800E+02 9.594 0.0000E+00 0.8800E+02 9.602 0.0000E+00 0.8800E+02 9.610 0.0000E+00 0.8800E+02 9.619 0.0000E+00 0.8800E+02 9.627 0.0000E+00 0.8800E+02 9.635 0.0000E+00 0.8800E+02 9.643 0.0000E+00 0.8800E+02 9.651 0.0000E+00 0.8800E+02 9.660 0.0000E+00 0.8800E+02 9.668 0.0000E+00 0.8800E+02 9.676 0.0000E+00 0.8800E+02 9.684 0.0000E+00 0.8800E+02 9.693 0.0000E+00 0.8800E+02 9.701 0.0000E+00 0.8800E+02 9.709 0.0000E+00 0.8800E+02 9.717 0.0000E+00 0.8800E+02 9.726 0.0000E+00 0.8800E+02 9.734 0.0000E+00 0.8800E+02 9.742 0.0000E+00 0.8800E+02 9.750 0.0000E+00 0.8800E+02 9.759 0.0000E+00 0.8800E+02 9.767 0.0000E+00 0.8800E+02 9.775 0.0000E+00 0.8800E+02 9.783 0.0000E+00 0.8800E+02 9.791 0.0000E+00 0.8800E+02 9.800 0.0000E+00 0.8800E+02 9.808 0.0000E+00 0.8800E+02 9.816 0.0000E+00 0.8800E+02 9.824 0.0000E+00 0.8800E+02 9.833 0.0000E+00 0.8800E+02 9.841 0.0000E+00 0.8800E+02 9.849 0.0000E+00 0.8800E+02 9.857 0.0000E+00 0.8800E+02 9.866 0.0000E+00 0.8800E+02 9.874 0.0000E+00 0.8800E+02 9.882 0.0000E+00 0.8800E+02 9.890 0.0000E+00 0.8800E+02 9.899 0.0000E+00 0.8800E+02 9.907 0.0000E+00 0.8800E+02 9.915 0.0000E+00 0.8800E+02 9.923 0.0000E+00 0.8800E+02 9.931 0.0000E+00 0.8800E+02 9.940 0.0000E+00 0.8800E+02 9.948 0.0000E+00 0.8800E+02 9.956 0.0000E+00 0.8800E+02 9.964 0.0000E+00 0.8800E+02 9.973 0.0000E+00 0.8800E+02 9.981 0.0000E+00 0.8800E+02 9.989 0.0000E+00 0.8800E+02 9.997 0.0000E+00 0.8800E+02 10.006 0.0000E+00 0.8800E+02 10.014 0.0000E+00 0.8800E+02 10.022 0.0000E+00 0.8800E+02 10.030 0.0000E+00 0.8800E+02 10.039 0.0000E+00 0.8800E+02 10.047 0.0000E+00 0.8800E+02 10.055 0.0000E+00 0.8800E+02 10.063 0.0000E+00 0.8800E+02 10.071 0.0000E+00 0.8800E+02 10.080 0.0000E+00 0.8800E+02 10.088 0.0000E+00 0.8800E+02 10.096 0.0000E+00 0.8800E+02 10.104 0.0000E+00 0.8800E+02 10.113 0.0000E+00 0.8800E+02 10.121 0.0000E+00 0.8800E+02 10.129 0.0000E+00 0.8800E+02 10.137 0.0000E+00 0.8800E+02 10.146 0.0000E+00 0.8800E+02 10.154 0.0000E+00 0.8800E+02 10.162 0.0000E+00 0.8800E+02 10.170 0.0000E+00 0.8800E+02 10.179 0.0000E+00 0.8800E+02 10.187 0.0000E+00 0.8800E+02 10.195 0.0000E+00 0.8800E+02 10.203 0.0000E+00 0.8800E+02 10.211 0.0000E+00 0.8800E+02 10.220 0.0000E+00 0.8800E+02 10.228 0.0000E+00 0.8800E+02 10.236 0.0000E+00 0.8800E+02 10.244 0.0000E+00 0.8800E+02 10.253 0.0000E+00 0.8800E+02 10.261 0.0000E+00 0.8800E+02 10.269 0.0000E+00 0.8800E+02 10.277 0.0000E+00 0.8800E+02 10.286 0.0000E+00 0.8800E+02 10.294 0.0000E+00 0.8800E+02 10.302 0.0000E+00 0.8800E+02 10.310 0.0000E+00 0.8800E+02 10.318 0.0000E+00 0.8800E+02 10.327 0.0000E+00 0.8800E+02 10.335 0.0000E+00 0.8800E+02 10.343 0.0000E+00 0.8800E+02 10.351 0.0000E+00 0.8800E+02 10.360 0.0000E+00 0.8800E+02 10.368 0.0000E+00 0.8800E+02 10.376 0.0000E+00 0.8800E+02 10.384 0.0000E+00 0.8800E+02 10.393 0.0000E+00 0.8800E+02 10.401 0.0000E+00 0.8800E+02 10.409 0.0000E+00 0.8800E+02 10.417 0.0000E+00 0.8800E+02 10.426 0.0000E+00 0.8800E+02 10.434 0.0000E+00 0.8800E+02 10.442 0.0000E+00 0.8800E+02 10.450 0.0000E+00 0.8800E+02 10.458 0.0000E+00 0.8800E+02 10.467 0.0000E+00 0.8800E+02 10.475 0.0000E+00 0.8800E+02 10.483 0.0000E+00 0.8800E+02 10.491 0.0000E+00 0.8800E+02 10.500 0.0000E+00 0.8800E+02 10.508 0.0000E+00 0.8800E+02 10.516 0.0000E+00 0.8800E+02 10.524 0.0000E+00 0.8800E+02 10.533 0.0000E+00 0.8800E+02 10.541 0.0000E+00 0.8800E+02 10.549 0.0000E+00 0.8800E+02 10.557 0.0000E+00 0.8800E+02 10.566 0.0000E+00 0.8800E+02 10.574 0.0000E+00 0.8800E+02 10.582 0.0000E+00 0.8800E+02 10.590 0.0000E+00 0.8800E+02 10.598 0.0000E+00 0.8800E+02 10.607 0.0000E+00 0.8800E+02 10.615 0.0000E+00 0.8800E+02 10.623 0.0000E+00 0.8800E+02 10.631 0.0000E+00 0.8800E+02 10.640 0.0000E+00 0.8800E+02 10.648 0.0000E+00 0.8800E+02 10.656 0.0000E+00 0.8800E+02 10.664 0.0000E+00 0.8800E+02 10.673 0.0000E+00 0.8800E+02 10.681 0.0000E+00 0.8800E+02 10.689 0.0000E+00 0.8800E+02 10.697 0.0000E+00 0.8800E+02 10.706 0.0000E+00 0.8800E+02 10.714 0.0000E+00 0.8800E+02 10.722 0.0000E+00 0.8800E+02 10.730 0.0000E+00 0.8800E+02 10.738 0.0000E+00 0.8800E+02 10.747 0.0000E+00 0.8800E+02 10.755 0.0000E+00 0.8800E+02 10.763 0.0000E+00 0.8800E+02 10.771 0.0000E+00 0.8800E+02 10.780 0.0000E+00 0.8800E+02 10.788 0.0000E+00 0.8800E+02 10.796 0.0000E+00 0.8800E+02 10.804 0.0000E+00 0.8800E+02 10.813 0.0000E+00 0.8800E+02 10.821 0.0000E+00 0.8800E+02 10.829 0.0000E+00 0.8800E+02 10.837 0.0000E+00 0.8800E+02 10.845 0.0000E+00 0.8800E+02 10.854 0.0000E+00 0.8800E+02 10.862 0.0000E+00 0.8800E+02 10.870 0.0000E+00 0.8800E+02 10.878 0.0000E+00 0.8800E+02 10.887 0.0000E+00 0.8800E+02 10.895 0.0000E+00 0.8800E+02 10.903 0.0000E+00 0.8800E+02 10.911 0.0000E+00 0.8800E+02 10.920 0.0000E+00 0.8800E+02 10.928 0.0000E+00 0.8800E+02 10.936 0.0000E+00 0.8800E+02 10.944 0.0000E+00 0.8800E+02 10.953 0.0000E+00 0.8800E+02 10.961 0.0000E+00 0.8800E+02 10.969 0.0000E+00 0.8800E+02 10.977 0.0000E+00 0.8800E+02 10.985 0.0000E+00 0.8800E+02 10.994 0.0000E+00 0.8800E+02 11.002 0.0000E+00 0.8800E+02 11.010 0.0000E+00 0.8800E+02 11.018 0.0000E+00 0.8800E+02 11.027 0.0000E+00 0.8800E+02 11.035 0.0000E+00 0.8800E+02 11.043 0.0000E+00 0.8800E+02 11.051 0.0000E+00 0.8800E+02 11.060 0.0000E+00 0.8800E+02 11.068 0.0000E+00 0.8800E+02 11.076 0.0000E+00 0.8800E+02 avogadro-1.1.1/testfiles/spc216.pdb0000644000175000001440000012463412250371054016245 0ustar marcususersATOM 1 OW SOL 1 2.300 6.280 1.130 1.00 0.00 ATOM 2 HW1 SOL 1 1.370 6.260 1.500 1.00 0.00 ATOM 3 HW2 SOL 1 2.310 5.890 0.210 1.00 0.00 ATOM 4 OW SOL 2 2.250 2.750 -8.660 1.00 0.00 ATOM 5 HW1 SOL 2 2.600 2.580 -7.740 1.00 0.00 ATOM 6 HW2 SOL 2 1.370 2.300 -8.780 1.00 0.00 ATOM 7 OW SOL 3 0.190 3.680 6.470 1.00 0.00 ATOM 8 HW1 SOL 3 -0.630 4.110 6.860 1.00 0.00 ATOM 9 HW2 SOL 3 -0.090 2.950 5.840 1.00 0.00 ATOM 10 OW SOL 4 5.690 -5.870 -6.970 1.00 0.00 ATOM 11 HW1 SOL 4 4.760 -5.940 -7.340 1.00 0.00 ATOM 12 HW2 SOL 4 5.800 -4.980 -6.530 1.00 0.00 ATOM 13 OW SOL 5 -3.070 -3.510 7.030 1.00 0.00 ATOM 14 HW1 SOL 5 -3.640 -3.670 7.840 1.00 0.00 ATOM 15 HW2 SOL 5 -3.660 -3.410 6.230 1.00 0.00 ATOM 16 OW SOL 6 -1.190 6.180 8.560 1.00 0.00 ATOM 17 HW1 SOL 6 -0.860 7.120 8.560 1.00 0.00 ATOM 18 HW2 SOL 6 -0.680 5.640 9.220 1.00 0.00 ATOM 19 OW SOL 7 -7.270 7.030 7.170 1.00 0.00 ATOM 20 HW1 SOL 7 -6.700 7.810 6.920 1.00 0.00 ATOM 21 HW2 SOL 7 -7.870 7.290 7.930 1.00 0.00 ATOM 22 OW SOL 8 -1.070 6.070 2.310 1.00 0.00 ATOM 23 HW1 SOL 8 -1.190 5.940 1.320 1.00 0.00 ATOM 24 HW2 SOL 8 -1.370 5.260 2.800 1.00 0.00 ATOM 25 OW SOL 9 7.680 -7.180 -8.390 1.00 0.00 ATOM 26 HW1 SOL 9 6.900 -7.010 -7.790 1.00 0.00 ATOM 27 HW2 SOL 9 8.020 -6.310 -8.750 1.00 0.00 ATOM 28 OW SOL 10 8.500 7.980 -0.390 1.00 0.00 ATOM 29 HW1 SOL 10 8.460 8.740 0.260 1.00 0.00 ATOM 30 HW2 SOL 10 8.720 8.340 -1.300 1.00 0.00 ATOM 31 OW SOL 11 6.850 -8.500 6.650 1.00 0.00 ATOM 32 HW1 SOL 11 7.540 -8.660 7.350 1.00 0.00 ATOM 33 HW2 SOL 11 6.120 -7.930 7.030 1.00 0.00 ATOM 34 OW SOL 12 6.860 -7.010 -0.590 1.00 0.00 ATOM 35 HW1 SOL 12 7.460 -6.220 -0.450 1.00 0.00 ATOM 36 HW2 SOL 12 6.000 -6.700 -1.000 1.00 0.00 ATOM 37 OW SOL 13 3.350 -4.270 -8.010 1.00 0.00 ATOM 38 HW1 SOL 13 2.570 -4.580 -8.540 1.00 0.00 ATOM 39 HW2 SOL 13 3.930 -3.690 -8.580 1.00 0.00 ATOM 40 OW SOL 14 -4.020 -3.570 -5.230 1.00 0.00 ATOM 41 HW1 SOL 14 -3.780 -2.630 -4.970 1.00 0.00 ATOM 42 HW2 SOL 14 -4.180 -4.110 -4.410 1.00 0.00 ATOM 43 OW SOL 15 4.380 3.920 -3.630 1.00 0.00 ATOM 44 HW1 SOL 15 5.200 3.360 -3.540 1.00 0.00 ATOM 45 HW2 SOL 15 3.570 3.340 -3.590 1.00 0.00 ATOM 46 OW SOL 16 -2.590 4.470 7.370 1.00 0.00 ATOM 47 HW1 SOL 16 -3.330 4.930 6.870 1.00 0.00 ATOM 48 HW2 SOL 16 -2.080 5.150 7.900 1.00 0.00 ATOM 49 OW SOL 17 2.310 -1.490 4.830 1.00 0.00 ATOM 50 HW1 SOL 17 2.650 -0.720 5.370 1.00 0.00 ATOM 51 HW2 SOL 17 2.750 -1.490 3.930 1.00 0.00 ATOM 52 OW SOL 18 -7.350 -5.210 -1.720 1.00 0.00 ATOM 53 HW1 SOL 18 -6.880 -5.210 -0.840 1.00 0.00 ATOM 54 HW2 SOL 18 -7.830 -6.080 -1.830 1.00 0.00 ATOM 55 OW SOL 19 2.300 -4.280 5.380 1.00 0.00 ATOM 56 HW1 SOL 19 2.040 -3.320 5.380 1.00 0.00 ATOM 57 HW2 SOL 19 1.590 -4.820 5.830 1.00 0.00 ATOM 58 OW SOL 20 2.400 -7.710 8.860 1.00 0.00 ATOM 59 HW1 SOL 20 2.540 -8.550 9.380 1.00 0.00 ATOM 60 HW2 SOL 20 1.850 -7.070 9.410 1.00 0.00 ATOM 61 OW SOL 21 6.200 -0.760 -4.230 1.00 0.00 ATOM 62 HW1 SOL 21 5.280 -0.930 -3.880 1.00 0.00 ATOM 63 HW2 SOL 21 6.480 0.160 -3.970 1.00 0.00 ATOM 64 OW SOL 22 6.060 -8.980 1.230 1.00 0.00 ATOM 65 HW1 SOL 22 6.130 -8.140 0.690 1.00 0.00 ATOM 66 HW2 SOL 22 6.520 -8.850 2.110 1.00 0.00 ATOM 67 OW SOL 23 -2.680 1.140 -3.820 1.00 0.00 ATOM 68 HW1 SOL 23 -2.860 1.810 -4.540 1.00 0.00 ATOM 69 HW2 SOL 23 -2.710 1.600 -2.930 1.00 0.00 ATOM 70 OW SOL 24 1.220 6.430 5.630 1.00 0.00 ATOM 71 HW1 SOL 24 0.770 5.550 5.800 1.00 0.00 ATOM 72 HW2 SOL 24 1.210 6.970 6.470 1.00 0.00 ATOM 73 OW SOL 25 -0.200 -0.950 3.590 1.00 0.00 ATOM 74 HW1 SOL 25 0.340 -1.240 4.390 1.00 0.00 ATOM 75 HW2 SOL 25 0.100 -0.050 3.300 1.00 0.00 ATOM 76 OW SOL 26 0.270 -2.660 1.170 1.00 0.00 ATOM 77 HW1 SOL 26 0.080 -3.620 1.380 1.00 0.00 ATOM 78 HW2 SOL 26 -0.060 -2.080 1.920 1.00 0.00 ATOM 79 OW SOL 27 -1.730 9.220 6.120 1.00 0.00 ATOM 80 HW1 SOL 27 -0.780 8.930 6.200 1.00 0.00 ATOM 81 HW2 SOL 27 -1.810 9.870 5.370 1.00 0.00 ATOM 82 OW SOL 28 -2.210 -7.540 4.320 1.00 0.00 ATOM 83 HW1 SOL 28 -1.350 -7.520 3.800 1.00 0.00 ATOM 84 HW2 SOL 28 -2.070 -7.070 5.200 1.00 0.00 ATOM 85 OW SOL 29 1.130 7.370 -2.650 1.00 0.00 ATOM 86 HW1 SOL 29 2.010 7.240 -2.200 1.00 0.00 ATOM 87 HW2 SOL 29 1.000 8.340 -2.870 1.00 0.00 ATOM 88 OW SOL 30 6.130 -4.970 7.260 1.00 0.00 ATOM 89 HW1 SOL 30 5.640 -5.840 7.350 1.00 0.00 ATOM 90 HW2 SOL 30 5.900 -4.540 6.390 1.00 0.00 ATOM 91 OW SOL 31 -5.690 -6.340 -4.390 1.00 0.00 ATOM 92 HW1 SOL 31 -5.320 -7.070 -4.970 1.00 0.00 ATOM 93 HW2 SOL 31 -5.170 -6.290 -3.540 1.00 0.00 ATOM 94 OW SOL 32 8.090 0.040 5.020 1.00 0.00 ATOM 95 HW1 SOL 32 8.490 0.950 4.930 1.00 0.00 ATOM 96 HW2 SOL 32 7.090 0.120 5.080 1.00 0.00 ATOM 97 OW SOL 33 1.970 -8.860 -5.980 1.00 0.00 ATOM 98 HW1 SOL 33 2.860 -9.310 -6.120 1.00 0.00 ATOM 99 HW2 SOL 33 1.240 -9.510 -6.170 1.00 0.00 ATOM 100 OW SOL 34 -3.370 -8.630 1.900 1.00 0.00 ATOM 101 HW1 SOL 34 -4.000 -9.390 2.030 1.00 0.00 ATOM 102 HW2 SOL 34 -2.890 -8.450 2.760 1.00 0.00 ATOM 103 OW SOL 35 -6.750 -0.700 -2.460 1.00 0.00 ATOM 104 HW1 SOL 35 -6.510 -0.100 -3.220 1.00 0.00 ATOM 105 HW2 SOL 35 -6.680 -1.650 -2.760 1.00 0.00 ATOM 106 OW SOL 36 3.170 2.510 -0.610 1.00 0.00 ATOM 107 HW1 SOL 36 3.880 3.220 -0.550 1.00 0.00 ATOM 108 HW2 SOL 36 2.290 2.900 -0.330 1.00 0.00 ATOM 109 OW SOL 37 -3.960 -4.450 -9.090 1.00 0.00 ATOM 110 HW1 SOL 37 -4.550 -4.390 -8.290 1.00 0.00 ATOM 111 HW2 SOL 37 -4.110 -5.330 -9.550 1.00 0.00 ATOM 112 OW SOL 38 -1.950 -1.480 5.720 1.00 0.00 ATOM 113 HW1 SOL 38 -2.360 -1.710 4.840 1.00 0.00 ATOM 114 HW2 SOL 38 -2.130 -2.220 6.370 1.00 0.00 ATOM 115 OW SOL 39 5.980 7.290 2.700 1.00 0.00 ATOM 116 HW1 SOL 39 6.220 7.980 2.020 1.00 0.00 ATOM 117 HW2 SOL 39 5.200 7.620 3.240 1.00 0.00 ATOM 118 OW SOL 40 -5.810 3.450 -9.180 1.00 0.00 ATOM 119 HW1 SOL 40 -6.670 2.950 -9.310 1.00 0.00 ATOM 120 HW2 SOL 40 -5.190 2.910 -8.620 1.00 0.00 ATOM 121 OW SOL 41 -2.860 -2.000 3.070 1.00 0.00 ATOM 122 HW1 SOL 41 -1.970 -1.540 3.100 1.00 0.00 ATOM 123 HW2 SOL 41 -3.070 -2.240 2.120 1.00 0.00 ATOM 124 OW SOL 42 8.070 6.050 -3.970 1.00 0.00 ATOM 125 HW1 SOL 42 7.600 6.020 -3.080 1.00 0.00 ATOM 126 HW2 SOL 42 7.560 5.500 -4.630 1.00 0.00 ATOM 127 OW SOL 43 -4.680 4.690 -1.880 1.00 0.00 ATOM 128 HW1 SOL 43 -4.880 5.120 -1.000 1.00 0.00 ATOM 129 HW2 SOL 43 -3.900 4.070 -1.790 1.00 0.00 ATOM 130 OW SOL 44 -8.890 8.900 -2.900 1.00 0.00 ATOM 131 HW1 SOL 44 -8.430 8.060 -3.190 1.00 0.00 ATOM 132 HW2 SOL 44 -9.450 9.240 -3.650 1.00 0.00 ATOM 133 OW SOL 45 -8.710 4.100 -6.200 1.00 0.00 ATOM 134 HW1 SOL 45 -9.480 4.440 -5.660 1.00 0.00 ATOM 135 HW2 SOL 45 -9.050 3.590 -6.990 1.00 0.00 ATOM 136 OW SOL 46 -8.210 7.010 4.290 1.00 0.00 ATOM 137 HW1 SOL 46 -7.950 6.970 5.250 1.00 0.00 ATOM 138 HW2 SOL 46 -9.060 6.500 4.150 1.00 0.00 ATOM 139 OW SOL 47 0.760 8.110 7.890 1.00 0.00 ATOM 140 HW1 SOL 47 1.750 7.990 7.980 1.00 0.00 ATOM 141 HW2 SOL 47 0.520 9.060 8.100 1.00 0.00 ATOM 142 OW SOL 48 1.300 -0.410 -2.910 1.00 0.00 ATOM 143 HW1 SOL 48 1.200 -0.560 -1.920 1.00 0.00 ATOM 144 HW2 SOL 48 0.440 -0.050 -3.270 1.00 0.00 ATOM 145 OW SOL 49 8.650 3.480 1.950 1.00 0.00 ATOM 146 HW1 SOL 49 9.240 4.110 1.460 1.00 0.00 ATOM 147 HW2 SOL 49 8.840 2.540 1.660 1.00 0.00 ATOM 148 OW SOL 50 -1.430 5.850 -0.310 1.00 0.00 ATOM 149 HW1 SOL 50 -1.690 6.740 -0.670 1.00 0.00 ATOM 150 HW2 SOL 50 -1.450 5.170 -1.040 1.00 0.00 ATOM 151 OW SOL 51 -5.000 -7.180 5.450 1.00 0.00 ATOM 152 HW1 SOL 51 -4.170 -7.470 4.970 1.00 0.00 ATOM 153 HW2 SOL 51 -5.490 -6.510 4.890 1.00 0.00 ATOM 154 OW SOL 52 5.500 1.960 8.850 1.00 0.00 ATOM 155 HW1 SOL 52 5.450 1.910 9.850 1.00 0.00 ATOM 156 HW2 SOL 52 5.520 2.920 8.560 1.00 0.00 ATOM 157 OW SOL 53 -8.540 -4.060 4.770 1.00 0.00 ATOM 158 HW1 SOL 53 -9.000 -3.340 4.250 1.00 0.00 ATOM 159 HW2 SOL 53 -8.580 -3.860 5.750 1.00 0.00 ATOM 160 OW SOL 54 3.510 -0.610 8.530 1.00 0.00 ATOM 161 HW1 SOL 54 4.010 -1.470 8.590 1.00 0.00 ATOM 162 HW2 SOL 54 4.160 0.160 8.500 1.00 0.00 ATOM 163 OW SOL 55 -0.670 -7.960 8.730 1.00 0.00 ATOM 164 HW1 SOL 55 -1.290 -8.110 7.970 1.00 0.00 ATOM 165 HW2 SOL 55 -1.190 -7.850 9.580 1.00 0.00 ATOM 166 OW SOL 56 -6.350 -3.120 -3.560 1.00 0.00 ATOM 167 HW1 SOL 56 -6.290 -3.890 -2.920 1.00 0.00 ATOM 168 HW2 SOL 56 -6.870 -3.380 -4.360 1.00 0.00 ATOM 169 OW SOL 57 3.210 -9.190 2.420 1.00 0.00 ATOM 170 HW1 SOL 57 4.030 -8.800 2.000 1.00 0.00 ATOM 171 HW2 SOL 57 2.940 -10.010 1.930 1.00 0.00 ATOM 172 OW SOL 58 -4.040 7.350 7.280 1.00 0.00 ATOM 173 HW1 SOL 58 -4.090 6.700 8.030 1.00 0.00 ATOM 174 HW2 SOL 58 -3.240 7.940 7.410 1.00 0.00 ATOM 175 OW SOL 59 4.610 -5.960 -1.350 1.00 0.00 ATOM 176 HW1 SOL 59 4.110 -5.950 -2.210 1.00 0.00 ATOM 177 HW2 SOL 59 3.980 -6.140 -0.590 1.00 0.00 ATOM 178 OW SOL 60 -7.510 -0.860 2.370 1.00 0.00 ATOM 179 HW1 SOL 60 -8.110 -1.480 2.870 1.00 0.00 ATOM 180 HW2 SOL 60 -7.200 -1.300 1.520 1.00 0.00 ATOM 181 OW SOL 61 2.020 2.850 -3.640 1.00 0.00 ATOM 182 HW1 SOL 61 1.220 3.450 -3.770 1.00 0.00 ATOM 183 HW2 SOL 61 1.920 2.360 -2.780 1.00 0.00 ATOM 184 OW SOL 62 -2.300 -4.850 0.810 1.00 0.00 ATOM 185 HW1 SOL 62 -2.620 -3.910 0.710 1.00 0.00 ATOM 186 HW2 SOL 62 -3.060 -5.480 0.690 1.00 0.00 ATOM 187 OW SOL 63 4.640 -1.190 3.230 1.00 0.00 ATOM 188 HW1 SOL 63 4.970 -0.800 4.090 1.00 0.00 ATOM 189 HW2 SOL 63 5.400 -1.260 2.580 1.00 0.00 ATOM 190 OW SOL 64 -4.620 1.070 4.260 1.00 0.00 ATOM 191 HW1 SOL 64 -4.860 0.700 3.360 1.00 0.00 ATOM 192 HW2 SOL 64 -3.630 1.230 4.300 1.00 0.00 ATOM 193 OW SOL 65 2.490 -0.770 -6.210 1.00 0.00 ATOM 194 HW1 SOL 65 3.060 -1.420 -5.710 1.00 0.00 ATOM 195 HW2 SOL 65 2.330 -1.100 -7.140 1.00 0.00 ATOM 196 OW SOL 66 -9.220 -1.640 9.040 1.00 0.00 ATOM 197 HW1 SOL 66 -8.420 -2.210 9.250 1.00 0.00 ATOM 198 HW2 SOL 66 -9.710 -2.040 8.270 1.00 0.00 ATOM 199 OW SOL 67 3.820 7.000 4.800 1.00 0.00 ATOM 200 HW1 SOL 67 4.270 6.100 4.770 1.00 0.00 ATOM 201 HW2 SOL 67 2.880 6.890 5.130 1.00 0.00 ATOM 202 OW SOL 68 -3.150 2.220 -1.330 1.00 0.00 ATOM 203 HW1 SOL 68 -3.200 2.590 -0.410 1.00 0.00 ATOM 204 HW2 SOL 68 -3.870 1.530 -1.450 1.00 0.00 ATOM 205 OW SOL 69 6.140 1.220 1.170 1.00 0.00 ATOM 206 HW1 SOL 69 7.120 1.000 1.240 1.00 0.00 ATOM 207 HW2 SOL 69 5.830 1.050 0.240 1.00 0.00 ATOM 208 OW SOL 70 7.810 2.640 -1.130 1.00 0.00 ATOM 209 HW1 SOL 70 8.480 2.030 -0.700 1.00 0.00 ATOM 210 HW2 SOL 70 7.080 2.830 -0.480 1.00 0.00 ATOM 211 OW SOL 71 8.880 -3.480 -6.670 1.00 0.00 ATOM 212 HW1 SOL 71 8.650 -3.730 -7.610 1.00 0.00 ATOM 213 HW2 SOL 71 9.490 -4.170 -6.280 1.00 0.00 ATOM 214 OW SOL 72 -5.110 5.900 -4.290 1.00 0.00 ATOM 215 HW1 SOL 72 -4.830 5.470 -3.440 1.00 0.00 ATOM 216 HW2 SOL 72 -4.860 6.860 -4.280 1.00 0.00 ATOM 217 OW SOL 73 8.030 -4.600 9.240 1.00 0.00 ATOM 218 HW1 SOL 73 8.930 -4.460 8.820 1.00 0.00 ATOM 219 HW2 SOL 73 7.320 -4.580 8.530 1.00 0.00 ATOM 220 OW SOL 74 9.220 5.030 8.990 1.00 0.00 ATOM 221 HW1 SOL 74 8.970 4.940 8.030 1.00 0.00 ATOM 222 HW2 SOL 74 9.700 4.210 9.300 1.00 0.00 ATOM 223 OW SOL 75 5.390 0.640 5.120 1.00 0.00 ATOM 224 HW1 SOL 75 4.580 0.650 5.700 1.00 0.00 ATOM 225 HW2 SOL 75 5.420 1.470 4.570 1.00 0.00 ATOM 226 OW SOL 76 -4.280 -6.740 0.410 1.00 0.00 ATOM 227 HW1 SOL 76 -3.960 -7.500 0.980 1.00 0.00 ATOM 228 HW2 SOL 76 -5.200 -6.470 0.710 1.00 0.00 ATOM 229 OW SOL 77 2.970 0.350 1.710 1.00 0.00 ATOM 230 HW1 SOL 77 3.460 1.190 1.500 1.00 0.00 ATOM 231 HW2 SOL 77 3.590 -0.300 2.160 1.00 0.00 ATOM 232 OW SOL 78 -9.270 2.360 4.800 1.00 0.00 ATOM 233 HW1 SOL 78 -9.750 2.770 4.020 1.00 0.00 ATOM 234 HW2 SOL 78 -8.280 2.340 4.610 1.00 0.00 ATOM 235 OW SOL 79 -7.860 6.830 -3.980 1.00 0.00 ATOM 236 HW1 SOL 79 -8.660 6.220 -3.950 1.00 0.00 ATOM 237 HW2 SOL 79 -7.050 6.300 -4.220 1.00 0.00 ATOM 238 OW SOL 80 -6.350 -2.920 7.930 1.00 0.00 ATOM 239 HW1 SOL 80 -6.140 -2.180 7.280 1.00 0.00 ATOM 240 HW2 SOL 80 -5.670 -2.920 8.660 1.00 0.00 ATOM 241 OW SOL 81 4.590 -7.100 7.410 1.00 0.00 ATOM 242 HW1 SOL 81 3.880 -7.370 8.060 1.00 0.00 ATOM 243 HW2 SOL 81 4.330 -7.380 6.480 1.00 0.00 ATOM 244 OW SOL 82 -5.910 -0.650 5.910 1.00 0.00 ATOM 245 HW1 SOL 82 -5.470 -0.010 5.270 1.00 0.00 ATOM 246 HW2 SOL 82 -6.410 -0.130 6.610 1.00 0.00 ATOM 247 OW SOL 83 -8.300 5.490 0.160 1.00 0.00 ATOM 248 HW1 SOL 83 -8.710 6.310 -0.230 1.00 0.00 ATOM 249 HW2 SOL 83 -7.660 5.750 0.890 1.00 0.00 ATOM 250 OW SOL 84 0.780 5.560 -4.760 1.00 0.00 ATOM 251 HW1 SOL 84 1.700 5.550 -5.170 1.00 0.00 ATOM 252 HW2 SOL 84 0.720 6.300 -4.090 1.00 0.00 ATOM 253 OW SOL 85 5.610 2.220 -7.150 1.00 0.00 ATOM 254 HW1 SOL 85 5.990 1.380 -6.780 1.00 0.00 ATOM 255 HW2 SOL 85 4.730 2.410 -6.710 1.00 0.00 ATOM 256 OW SOL 86 8.660 4.540 6.420 1.00 0.00 ATOM 257 HW1 SOL 86 8.340 5.260 5.800 1.00 0.00 ATOM 258 HW2 SOL 86 8.900 3.730 5.890 1.00 0.00 ATOM 259 OW SOL 87 -8.450 0.390 7.530 1.00 0.00 ATOM 260 HW1 SOL 87 -9.170 0.440 6.840 1.00 0.00 ATOM 261 HW2 SOL 87 -8.690 -0.300 8.220 1.00 0.00 ATOM 262 OW SOL 88 -4.330 -6.890 8.670 1.00 0.00 ATOM 263 HW1 SOL 88 -4.880 -7.730 8.600 1.00 0.00 ATOM 264 HW2 SOL 88 -4.070 -6.600 7.750 1.00 0.00 ATOM 265 OW SOL 89 -3.960 5.900 -8.700 1.00 0.00 ATOM 266 HW1 SOL 89 -4.260 4.950 -8.630 1.00 0.00 ATOM 267 HW2 SOL 89 -3.230 6.060 -8.040 1.00 0.00 ATOM 268 OW SOL 90 -0.050 8.330 3.770 1.00 0.00 ATOM 269 HW1 SOL 90 0.370 7.690 4.410 1.00 0.00 ATOM 270 HW2 SOL 90 -0.430 7.820 2.990 1.00 0.00 ATOM 271 OW SOL 91 4.880 -4.770 1.740 1.00 0.00 ATOM 272 HW1 SOL 91 4.010 -4.920 2.210 1.00 0.00 ATOM 273 HW2 SOL 91 4.710 -4.510 0.790 1.00 0.00 ATOM 274 OW SOL 92 -1.980 -5.820 6.570 1.00 0.00 ATOM 275 HW1 SOL 92 -0.990 -5.740 6.710 1.00 0.00 ATOM 276 HW2 SOL 92 -2.430 -4.980 6.880 1.00 0.00 ATOM 277 OW SOL 93 -4.720 5.750 0.780 1.00 0.00 ATOM 278 HW1 SOL 93 -5.260 5.540 1.590 1.00 0.00 ATOM 279 HW2 SOL 93 -3.810 5.340 0.870 1.00 0.00 ATOM 280 OW SOL 94 5.270 2.560 3.280 1.00 0.00 ATOM 281 HW1 SOL 94 5.540 1.970 2.530 1.00 0.00 ATOM 282 HW2 SOL 94 5.270 3.510 2.970 1.00 0.00 ATOM 283 OW SOL 95 -1.080 -6.390 -2.740 1.00 0.00 ATOM 284 HW1 SOL 95 -0.170 -6.780 -2.870 1.00 0.00 ATOM 285 HW2 SOL 95 -1.000 -5.430 -2.500 1.00 0.00 ATOM 286 OW SOL 96 -7.980 -5.150 -5.220 1.00 0.00 ATOM 287 HW1 SOL 96 -8.780 -5.380 -4.670 1.00 0.00 ATOM 288 HW2 SOL 96 -7.150 -5.410 -4.730 1.00 0.00 ATOM 289 OW SOL 97 -2.700 -2.330 -2.370 1.00 0.00 ATOM 290 HW1 SOL 97 -2.430 -1.990 -3.270 1.00 0.00 ATOM 291 HW2 SOL 97 -1.910 -2.710 -1.910 1.00 0.00 ATOM 292 OW SOL 98 -7.510 -6.670 -7.620 1.00 0.00 ATOM 293 HW1 SOL 98 -7.910 -6.230 -6.810 1.00 0.00 ATOM 294 HW2 SOL 98 -7.920 -6.300 -8.450 1.00 0.00 ATOM 295 OW SOL 99 -2.240 -7.630 -7.830 1.00 0.00 ATOM 296 HW1 SOL 99 -2.190 -6.820 -7.240 1.00 0.00 ATOM 297 HW2 SOL 99 -3.100 -7.610 -8.340 1.00 0.00 ATOM 298 OW SOL 100 9.150 0.890 -4.600 1.00 0.00 ATOM 299 HW1 SOL 100 9.400 0.690 -5.550 1.00 0.00 ATOM 300 HW2 SOL 100 9.870 1.450 -4.180 1.00 0.00 ATOM 301 OW SOL 101 -8.820 -7.460 -1.430 1.00 0.00 ATOM 302 HW1 SOL 101 -9.810 -7.400 -1.330 1.00 0.00 ATOM 303 HW2 SOL 101 -8.590 -8.260 -1.990 1.00 0.00 ATOM 304 OW SOL 102 7.050 -8.120 3.680 1.00 0.00 ATOM 305 HW1 SOL 102 6.910 -8.050 4.670 1.00 0.00 ATOM 306 HW2 SOL 102 7.890 -8.630 3.500 1.00 0.00 ATOM 307 OW SOL 103 4.100 8.130 -6.110 1.00 0.00 ATOM 308 HW1 SOL 103 4.960 8.250 -5.610 1.00 0.00 ATOM 309 HW2 SOL 103 3.680 7.260 -5.840 1.00 0.00 ATOM 310 OW SOL 104 -5.880 3.860 -6.000 1.00 0.00 ATOM 311 HW1 SOL 104 -5.670 4.600 -5.360 1.00 0.00 ATOM 312 HW2 SOL 104 -6.770 4.030 -6.430 1.00 0.00 ATOM 313 OW SOL 105 0.640 -2.980 -5.310 1.00 0.00 ATOM 314 HW1 SOL 105 0.180 -2.160 -5.650 1.00 0.00 ATOM 315 HW2 SOL 105 1.620 -2.790 -5.220 1.00 0.00 ATOM 316 OW SOL 106 3.670 -7.620 5.010 1.00 0.00 ATOM 317 HW1 SOL 106 3.600 -6.790 4.450 1.00 0.00 ATOM 318 HW2 SOL 106 3.710 -8.420 4.410 1.00 0.00 ATOM 319 OW SOL 107 5.660 5.370 8.650 1.00 0.00 ATOM 320 HW1 SOL 107 5.780 6.030 7.910 1.00 0.00 ATOM 321 HW2 SOL 107 6.120 5.710 9.480 1.00 0.00 ATOM 322 OW SOL 108 -6.100 -5.140 3.880 1.00 0.00 ATOM 323 HW1 SOL 108 -5.600 -4.370 4.280 1.00 0.00 ATOM 324 HW2 SOL 108 -7.050 -5.120 4.200 1.00 0.00 ATOM 325 OW SOL 109 -5.900 -4.170 -7.200 1.00 0.00 ATOM 326 HW1 SOL 109 -5.430 -4.040 -6.330 1.00 0.00 ATOM 327 HW2 SOL 109 -6.560 -4.910 -7.110 1.00 0.00 ATOM 328 OW SOL 110 -2.800 6.390 4.720 1.00 0.00 ATOM 329 HW1 SOL 110 -3.110 7.000 5.450 1.00 0.00 ATOM 330 HW2 SOL 110 -2.300 6.910 4.030 1.00 0.00 ATOM 331 OW SOL 111 3.540 -3.520 -5.330 1.00 0.00 ATOM 332 HW1 SOL 111 3.330 -3.960 -6.200 1.00 0.00 ATOM 333 HW2 SOL 111 4.510 -3.260 -5.300 1.00 0.00 ATOM 334 OW SOL 112 4.020 7.510 -2.640 1.00 0.00 ATOM 335 HW1 SOL 112 4.700 8.060 -3.110 1.00 0.00 ATOM 336 HW2 SOL 112 4.420 6.630 -2.370 1.00 0.00 ATOM 337 OW SOL 113 -2.750 7.790 -1.920 1.00 0.00 ATOM 338 HW1 SOL 113 -3.670 8.170 -1.970 1.00 0.00 ATOM 339 HW2 SOL 113 -2.150 8.260 -2.570 1.00 0.00 ATOM 340 OW SOL 114 -8.490 1.050 -0.920 1.00 0.00 ATOM 341 HW1 SOL 114 -8.430 1.900 -1.440 1.00 0.00 ATOM 342 HW2 SOL 114 -8.170 0.290 -1.490 1.00 0.00 ATOM 343 OW SOL 115 5.040 0.500 -1.220 1.00 0.00 ATOM 344 HW1 SOL 115 4.620 -0.070 -1.920 1.00 0.00 ATOM 345 HW2 SOL 115 4.380 1.190 -0.900 1.00 0.00 ATOM 346 OW SOL 116 5.730 8.700 -8.330 1.00 0.00 ATOM 347 HW1 SOL 116 6.170 9.590 -8.420 1.00 0.00 ATOM 348 HW2 SOL 116 5.100 8.700 -7.560 1.00 0.00 ATOM 349 OW SOL 117 -5.020 8.620 -8.170 1.00 0.00 ATOM 350 HW1 SOL 117 -5.770 8.620 -8.830 1.00 0.00 ATOM 351 HW2 SOL 117 -4.650 7.700 -8.080 1.00 0.00 ATOM 352 OW SOL 118 -6.530 5.250 2.750 1.00 0.00 ATOM 353 HW1 SOL 118 -6.400 4.410 3.290 1.00 0.00 ATOM 354 HW2 SOL 118 -6.820 5.990 3.350 1.00 0.00 ATOM 355 OW SOL 119 3.070 2.130 -6.310 1.00 0.00 ATOM 356 HW1 SOL 119 2.840 2.500 -5.410 1.00 0.00 ATOM 357 HW2 SOL 119 2.770 1.180 -6.370 1.00 0.00 ATOM 358 OW SOL 120 0.370 -5.520 -5.800 1.00 0.00 ATOM 359 HW1 SOL 120 0.900 -6.010 -5.120 1.00 0.00 ATOM 360 HW2 SOL 120 0.590 -4.540 -5.750 1.00 0.00 ATOM 361 OW SOL 121 7.320 6.340 -7.980 1.00 0.00 ATOM 362 HW1 SOL 121 7.910 6.080 -8.740 1.00 0.00 ATOM 363 HW2 SOL 121 7.040 7.300 -8.090 1.00 0.00 ATOM 364 OW SOL 122 -1.340 -9.270 -0.080 1.00 0.00 ATOM 365 HW1 SOL 122 -1.800 -9.340 -0.970 1.00 0.00 ATOM 366 HW2 SOL 122 -1.960 -8.830 0.580 1.00 0.00 ATOM 367 OW SOL 123 3.070 0.630 6.180 1.00 0.00 ATOM 368 HW1 SOL 123 2.960 1.570 6.510 1.00 0.00 ATOM 369 HW2 SOL 123 3.020 -0.000 6.950 1.00 0.00 ATOM 370 OW SOL 124 -2.400 3.670 3.740 1.00 0.00 ATOM 371 HW1 SOL 124 -2.380 2.910 4.380 1.00 0.00 ATOM 372 HW2 SOL 124 -2.880 4.440 4.140 1.00 0.00 ATOM 373 OW SOL 125 -8.390 7.660 -8.960 1.00 0.00 ATOM 374 HW1 SOL 125 -8.240 7.870 -8.000 1.00 0.00 ATOM 375 HW2 SOL 125 -8.690 6.710 -9.050 1.00 0.00 ATOM 376 OW SOL 126 -8.820 -2.890 -1.620 1.00 0.00 ATOM 377 HW1 SOL 126 -9.020 -2.450 -2.500 1.00 0.00 ATOM 378 HW2 SOL 126 -8.430 -3.800 -1.780 1.00 0.00 ATOM 379 OW SOL 127 -0.030 -3.440 -2.570 1.00 0.00 ATOM 380 HW1 SOL 127 0.110 -3.170 -3.520 1.00 0.00 ATOM 381 HW2 SOL 127 0.800 -3.220 -2.040 1.00 0.00 ATOM 382 OW SOL 128 3.500 8.980 -0.580 1.00 0.00 ATOM 383 HW1 SOL 128 4.260 9.420 -0.100 1.00 0.00 ATOM 384 HW2 SOL 128 3.850 8.510 -1.400 1.00 0.00 ATOM 385 OW SOL 129 -3.220 2.740 1.250 1.00 0.00 ATOM 386 HW1 SOL 129 -3.830 1.990 1.480 1.00 0.00 ATOM 387 HW2 SOL 129 -3.000 3.260 2.080 1.00 0.00 ATOM 388 OW SOL 130 -5.590 8.380 0.420 1.00 0.00 ATOM 389 HW1 SOL 130 -5.250 7.450 0.570 1.00 0.00 ATOM 390 HW2 SOL 130 -5.410 8.650 -0.530 1.00 0.00 ATOM 391 OW SOL 131 -7.940 -5.290 8.490 1.00 0.00 ATOM 392 HW1 SOL 131 -7.870 -6.130 7.940 1.00 0.00 ATOM 393 HW2 SOL 131 -7.320 -4.600 8.130 1.00 0.00 ATOM 394 OW SOL 132 3.190 8.100 -9.130 1.00 0.00 ATOM 395 HW1 SOL 132 4.120 8.460 -9.080 1.00 0.00 ATOM 396 HW2 SOL 132 3.130 7.250 -8.610 1.00 0.00 ATOM 397 OW SOL 133 3.390 5.090 -8.560 1.00 0.00 ATOM 398 HW1 SOL 133 2.870 4.260 -8.730 1.00 0.00 ATOM 399 HW2 SOL 133 4.160 5.140 -9.200 1.00 0.00 ATOM 400 OW SOL 134 5.110 4.150 -0.540 1.00 0.00 ATOM 401 HW1 SOL 134 4.930 4.600 0.340 1.00 0.00 ATOM 402 HW2 SOL 134 5.530 4.800 -1.170 1.00 0.00 ATOM 403 OW SOL 135 -7.240 3.800 -1.840 1.00 0.00 ATOM 404 HW1 SOL 135 -7.690 4.430 -1.200 1.00 0.00 ATOM 405 HW2 SOL 135 -6.310 4.110 -2.010 1.00 0.00 ATOM 406 OW SOL 136 -7.020 2.070 -3.850 1.00 0.00 ATOM 407 HW1 SOL 136 -7.020 2.710 -3.080 1.00 0.00 ATOM 408 HW2 SOL 136 -6.740 2.550 -4.680 1.00 0.00 ATOM 409 OW SOL 137 0.080 -5.360 2.000 1.00 0.00 ATOM 410 HW1 SOL 137 -0.850 -5.150 1.690 1.00 0.00 ATOM 411 HW2 SOL 137 0.180 -6.350 2.130 1.00 0.00 ATOM 412 OW SOL 138 0.880 -0.610 9.270 1.00 0.00 ATOM 413 HW1 SOL 138 0.460 -1.470 9.000 1.00 0.00 ATOM 414 HW2 SOL 138 1.820 -0.580 8.930 1.00 0.00 ATOM 415 OW SOL 139 5.040 -2.940 9.100 1.00 0.00 ATOM 416 HW1 SOL 139 5.700 -2.200 9.190 1.00 0.00 ATOM 417 HW2 SOL 139 5.480 -3.730 8.680 1.00 0.00 ATOM 418 OW SOL 140 -8.600 7.960 -6.240 1.00 0.00 ATOM 419 HW1 SOL 140 -8.190 7.640 -5.380 1.00 0.00 ATOM 420 HW2 SOL 140 -9.560 7.690 -6.270 1.00 0.00 ATOM 421 OW SOL 141 0.400 5.440 -7.480 1.00 0.00 ATOM 422 HW1 SOL 141 1.250 5.110 -7.890 1.00 0.00 ATOM 423 HW2 SOL 141 0.530 5.590 -6.500 1.00 0.00 ATOM 424 OW SOL 142 1.890 5.200 -1.400 1.00 0.00 ATOM 425 HW1 SOL 142 2.480 4.800 -2.100 1.00 0.00 ATOM 426 HW2 SOL 142 1.310 5.910 -1.810 1.00 0.00 ATOM 427 OW SOL 143 -4.930 -9.120 -2.020 1.00 0.00 ATOM 428 HW1 SOL 143 -4.540 -8.230 -1.820 1.00 0.00 ATOM 429 HW2 SOL 143 -4.830 -9.320 -2.990 1.00 0.00 ATOM 430 OW SOL 144 8.150 5.720 3.250 1.00 0.00 ATOM 431 HW1 SOL 144 8.220 4.830 2.790 1.00 0.00 ATOM 432 HW2 SOL 144 7.210 6.060 3.170 1.00 0.00 ATOM 433 OW SOL 145 -2.050 6.040 -6.560 1.00 0.00 ATOM 434 HW1 SOL 145 -2.430 5.350 -5.940 1.00 0.00 ATOM 435 HW2 SOL 145 -1.230 5.680 -7.000 1.00 0.00 ATOM 436 OW SOL 146 2.520 -2.980 -1.180 1.00 0.00 ATOM 437 HW1 SOL 146 2.220 -2.410 -0.420 1.00 0.00 ATOM 438 HW2 SOL 146 2.450 -3.950 -0.920 1.00 0.00 ATOM 439 OW SOL 147 6.710 4.640 -5.930 1.00 0.00 ATOM 440 HW1 SOL 147 6.370 3.750 -6.230 1.00 0.00 ATOM 441 HW2 SOL 147 6.970 5.180 -6.730 1.00 0.00 ATOM 442 OW SOL 148 9.300 -1.840 -3.970 1.00 0.00 ATOM 443 HW1 SOL 148 9.060 -2.020 -4.920 1.00 0.00 ATOM 444 HW2 SOL 148 9.600 -0.900 -3.870 1.00 0.00 ATOM 445 OW SOL 149 4.730 5.000 1.910 1.00 0.00 ATOM 446 HW1 SOL 149 5.340 5.800 1.950 1.00 0.00 ATOM 447 HW2 SOL 149 3.780 5.310 1.980 1.00 0.00 ATOM 448 OW SOL 150 1.590 -7.250 -3.960 1.00 0.00 ATOM 449 HW1 SOL 150 1.810 -7.860 -3.200 1.00 0.00 ATOM 450 HW2 SOL 150 1.690 -7.740 -4.820 1.00 0.00 ATOM 451 OW SOL 151 -5.150 -8.030 -6.280 1.00 0.00 ATOM 452 HW1 SOL 151 -4.910 -8.660 -7.020 1.00 0.00 ATOM 453 HW2 SOL 151 -6.050 -7.630 -6.460 1.00 0.00 ATOM 454 OW SOL 152 -5.600 8.550 3.090 1.00 0.00 ATOM 455 HW1 SOL 152 -6.460 8.240 3.510 1.00 0.00 ATOM 456 HW2 SOL 152 -5.640 8.410 2.100 1.00 0.00 ATOM 457 OW SOL 153 -1.030 -1.150 -7.080 1.00 0.00 ATOM 458 HW1 SOL 153 -0.420 -0.850 -7.810 1.00 0.00 ATOM 459 HW2 SOL 153 -1.410 -2.040 -7.300 1.00 0.00 ATOM 460 OW SOL 154 -6.100 -1.310 -7.340 1.00 0.00 ATOM 461 HW1 SOL 154 -5.260 -1.260 -7.880 1.00 0.00 ATOM 462 HW2 SOL 154 -6.330 -2.270 -7.160 1.00 0.00 ATOM 463 OW SOL 155 0.830 -6.040 -8.400 1.00 0.00 ATOM 464 HW1 SOL 155 0.780 -6.050 -7.400 1.00 0.00 ATOM 465 HW2 SOL 155 0.000 -6.450 -8.780 1.00 0.00 ATOM 466 OW SOL 156 6.880 -2.000 -1.460 1.00 0.00 ATOM 467 HW1 SOL 156 6.320 -1.190 -1.370 1.00 0.00 ATOM 468 HW2 SOL 156 7.400 -1.960 -2.320 1.00 0.00 ATOM 469 OW SOL 157 9.030 0.860 1.330 1.00 0.00 ATOM 470 HW1 SOL 157 9.540 0.870 0.470 1.00 0.00 ATOM 471 HW2 SOL 157 9.590 0.440 2.040 1.00 0.00 ATOM 472 OW SOL 158 -1.360 1.350 5.230 1.00 0.00 ATOM 473 HW1 SOL 158 -0.630 1.180 4.560 1.00 0.00 ATOM 474 HW2 SOL 158 -1.670 0.480 5.610 1.00 0.00 ATOM 475 OW SOL 159 -4.740 -2.890 4.770 1.00 0.00 ATOM 476 HW1 SOL 159 -4.070 -2.770 4.030 1.00 0.00 ATOM 477 HW2 SOL 159 -5.140 -2.000 5.000 1.00 0.00 ATOM 478 OW SOL 160 1.300 -0.680 -0.110 1.00 0.00 ATOM 479 HW1 SOL 160 0.890 -1.420 0.420 1.00 0.00 ATOM 480 HW2 SOL 160 1.940 -0.170 0.470 1.00 0.00 ATOM 481 OW SOL 161 -5.820 9.270 6.720 1.00 0.00 ATOM 482 HW1 SOL 161 -5.220 8.460 6.740 1.00 0.00 ATOM 483 HW2 SOL 161 -5.420 9.960 6.120 1.00 0.00 ATOM 484 OW SOL 162 8.300 -5.890 -4.400 1.00 0.00 ATOM 485 HW1 SOL 162 8.250 -5.560 -3.450 1.00 0.00 ATOM 486 HW2 SOL 162 7.440 -5.700 -4.860 1.00 0.00 ATOM 487 OW SOL 163 6.720 -2.460 1.540 1.00 0.00 ATOM 488 HW1 SOL 163 6.810 -2.360 0.550 1.00 0.00 ATOM 489 HW2 SOL 163 6.320 -3.350 1.750 1.00 0.00 ATOM 490 OW SOL 164 -2.120 -1.420 -4.680 1.00 0.00 ATOM 491 HW1 SOL 164 -1.590 -1.320 -5.520 1.00 0.00 ATOM 492 HW2 SOL 164 -2.390 -0.520 -4.340 1.00 0.00 ATOM 493 OW SOL 165 -0.210 1.750 -8.990 1.00 0.00 ATOM 494 HW1 SOL 165 0.180 0.900 -9.350 1.00 0.00 ATOM 495 HW2 SOL 165 -1.190 1.770 -9.180 1.00 0.00 ATOM 496 OW SOL 166 2.630 3.260 7.200 1.00 0.00 ATOM 497 HW1 SOL 166 1.840 3.770 6.860 1.00 0.00 ATOM 498 HW2 SOL 166 2.540 3.110 8.180 1.00 0.00 ATOM 499 OW SOL 167 -6.680 -2.500 0.310 1.00 0.00 ATOM 500 HW1 SOL 167 -6.620 -3.430 0.680 1.00 0.00 ATOM 501 HW2 SOL 167 -7.270 -2.500 -0.490 1.00 0.00 ATOM 502 OW SOL 168 8.220 -8.600 -4.900 1.00 0.00 ATOM 503 HW1 SOL 168 8.620 -8.610 -5.820 1.00 0.00 ATOM 504 HW2 SOL 168 8.320 -7.680 -4.500 1.00 0.00 ATOM 505 OW SOL 169 9.160 9.100 2.910 1.00 0.00 ATOM 506 HW1 SOL 169 9.790 9.480 2.230 1.00 0.00 ATOM 507 HW2 SOL 169 9.560 8.270 3.300 1.00 0.00 ATOM 508 OW SOL 170 -3.580 -2.550 0.440 1.00 0.00 ATOM 509 HW1 SOL 170 -4.500 -2.180 0.510 1.00 0.00 ATOM 510 HW2 SOL 170 -3.200 -2.350 -0.460 1.00 0.00 ATOM 511 OW SOL 171 3.720 -5.740 -3.720 1.00 0.00 ATOM 512 HW1 SOL 171 3.590 -4.810 -4.060 1.00 0.00 ATOM 513 HW2 SOL 171 2.880 -6.260 -3.850 1.00 0.00 ATOM 514 OW SOL 172 -2.480 -5.700 -5.730 1.00 0.00 ATOM 515 HW1 SOL 172 -1.880 -5.670 -4.930 1.00 0.00 ATOM 516 HW2 SOL 172 -3.230 -5.060 -5.600 1.00 0.00 ATOM 517 OW SOL 173 -8.230 -7.640 6.960 1.00 0.00 ATOM 518 HW1 SOL 173 -8.930 -8.110 7.500 1.00 0.00 ATOM 519 HW2 SOL 173 -7.640 -8.320 6.530 1.00 0.00 ATOM 520 OW SOL 174 -8.480 2.360 -8.910 1.00 0.00 ATOM 521 HW1 SOL 174 -8.560 2.000 -9.840 1.00 0.00 ATOM 522 HW2 SOL 174 -8.500 1.600 -8.260 1.00 0.00 ATOM 523 OW SOL 175 5.900 -3.750 4.910 1.00 0.00 ATOM 524 HW1 SOL 175 6.320 -4.330 4.210 1.00 0.00 ATOM 525 HW2 SOL 175 5.460 -2.960 4.470 1.00 0.00 ATOM 526 OW SOL 176 -1.530 3.850 -4.810 1.00 0.00 ATOM 527 HW1 SOL 176 -0.800 4.540 -4.770 1.00 0.00 ATOM 528 HW2 SOL 176 -1.250 3.100 -5.400 1.00 0.00 ATOM 529 OW SOL 177 2.550 -5.140 2.900 1.00 0.00 ATOM 530 HW1 SOL 177 1.590 -5.130 2.630 1.00 0.00 ATOM 531 HW2 SOL 177 2.670 -4.610 3.740 1.00 0.00 ATOM 532 OW SOL 178 1.050 -8.490 -1.360 1.00 0.00 ATOM 533 HW1 SOL 178 0.280 -8.820 -0.820 1.00 0.00 ATOM 534 HW2 SOL 178 1.900 -8.790 -0.940 1.00 0.00 ATOM 535 OW SOL 179 6.720 2.030 -3.730 1.00 0.00 ATOM 536 HW1 SOL 179 7.620 1.870 -4.130 1.00 0.00 ATOM 537 HW2 SOL 179 6.800 2.080 -2.740 1.00 0.00 ATOM 538 OW SOL 180 0.750 3.450 0.330 1.00 0.00 ATOM 539 HW1 SOL 180 -0.170 3.170 0.040 1.00 0.00 ATOM 540 HW2 SOL 180 1.060 4.220 -0.230 1.00 0.00 ATOM 541 OW SOL 181 -4.220 8.560 -4.640 1.00 0.00 ATOM 542 HW1 SOL 181 -4.790 9.080 -5.270 1.00 0.00 ATOM 543 HW2 SOL 181 -3.260 8.680 -4.880 1.00 0.00 ATOM 544 OW SOL 182 0.720 1.660 3.180 1.00 0.00 ATOM 545 HW1 SOL 182 0.550 2.490 2.640 1.00 0.00 ATOM 546 HW2 SOL 182 1.620 1.290 2.960 1.00 0.00 ATOM 547 OW SOL 183 -6.790 -5.270 1.190 1.00 0.00 ATOM 548 HW1 SOL 183 -7.780 -5.380 1.210 1.00 0.00 ATOM 549 HW2 SOL 183 -6.450 -5.120 2.120 1.00 0.00 ATOM 550 OW SOL 184 6.130 8.420 -4.310 1.00 0.00 ATOM 551 HW1 SOL 184 6.690 9.230 -4.480 1.00 0.00 ATOM 552 HW2 SOL 184 6.720 7.620 -4.280 1.00 0.00 ATOM 553 OW SOL 185 -3.690 -0.950 -9.030 1.00 0.00 ATOM 554 HW1 SOL 185 -3.360 -0.310 -9.720 1.00 0.00 ATOM 555 HW2 SOL 185 -3.030 -1.010 -8.280 1.00 0.00 ATOM 556 OW SOL 186 7.160 5.650 -1.540 1.00 0.00 ATOM 557 HW1 SOL 186 7.350 6.300 -0.800 1.00 0.00 ATOM 558 HW2 SOL 186 7.760 4.850 -1.450 1.00 0.00 ATOM 559 OW SOL 187 -4.120 -6.420 -2.290 1.00 0.00 ATOM 560 HW1 SOL 187 -4.210 -6.520 -1.300 1.00 0.00 ATOM 561 HW2 SOL 187 -3.160 -6.490 -2.550 1.00 0.00 ATOM 562 OW SOL 188 3.900 -1.210 -3.020 1.00 0.00 ATOM 563 HW1 SOL 188 2.990 -0.800 -3.040 1.00 0.00 ATOM 564 HW2 SOL 188 3.830 -2.150 -2.700 1.00 0.00 ATOM 565 OW SOL 189 -1.880 8.830 -6.080 1.00 0.00 ATOM 566 HW1 SOL 189 -2.150 7.940 -6.450 1.00 0.00 ATOM 567 HW2 SOL 189 -1.870 9.510 -6.810 1.00 0.00 ATOM 568 OW SOL 190 -6.370 3.250 4.490 1.00 0.00 ATOM 569 HW1 SOL 190 -5.720 2.510 4.380 1.00 0.00 ATOM 570 HW2 SOL 190 -6.170 3.750 5.330 1.00 0.00 ATOM 571 OW SOL 191 5.940 7.450 6.520 1.00 0.00 ATOM 572 HW1 SOL 191 6.440 8.300 6.330 1.00 0.00 ATOM 573 HW2 SOL 191 5.060 7.470 6.040 1.00 0.00 ATOM 574 OW SOL 192 -0.850 3.420 -2.200 1.00 0.00 ATOM 575 HW1 SOL 192 -1.020 3.730 -3.140 1.00 0.00 ATOM 576 HW2 SOL 192 -1.690 3.050 -1.820 1.00 0.00 ATOM 577 OW SOL 193 -1.320 -9.280 -3.450 1.00 0.00 ATOM 578 HW1 SOL 193 -0.940 -8.370 -3.300 1.00 0.00 ATOM 579 HW2 SOL 193 -1.400 -9.450 -4.440 1.00 0.00 ATOM 580 OW SOL 194 8.590 -4.880 0.160 1.00 0.00 ATOM 581 HW1 SOL 194 8.130 -4.730 1.040 1.00 0.00 ATOM 582 HW2 SOL 194 9.030 -4.030 -0.140 1.00 0.00 ATOM 583 OW SOL 195 6.610 -0.720 -9.090 1.00 0.00 ATOM 584 HW1 SOL 195 6.150 0.160 -9.220 1.00 0.00 ATOM 585 HW2 SOL 195 7.600 -0.600 -9.160 1.00 0.00 ATOM 586 OW SOL 196 -4.540 -0.110 -1.420 1.00 0.00 ATOM 587 HW1 SOL 196 -5.500 -0.220 -1.690 1.00 0.00 ATOM 588 HW2 SOL 196 -3.980 -0.780 -1.900 1.00 0.00 ATOM 589 OW SOL 197 8.590 -9.060 8.610 1.00 0.00 ATOM 590 HW1 SOL 197 9.130 -9.750 9.090 1.00 0.00 ATOM 591 HW2 SOL 197 8.270 -8.370 9.270 1.00 0.00 ATOM 592 OW SOL 198 -7.790 -8.780 0.870 1.00 0.00 ATOM 593 HW1 SOL 198 -8.020 -8.250 0.050 1.00 0.00 ATOM 594 HW2 SOL 198 -6.980 -9.340 0.680 1.00 0.00 ATOM 595 OW SOL 199 -0.010 -2.930 8.510 1.00 0.00 ATOM 596 HW1 SOL 199 -0.720 -3.050 7.810 1.00 0.00 ATOM 597 HW2 SOL 199 0.000 -3.720 9.110 1.00 0.00 ATOM 598 OW SOL 200 2.210 -5.480 -0.180 1.00 0.00 ATOM 599 HW1 SOL 200 1.560 -6.210 -0.390 1.00 0.00 ATOM 600 HW2 SOL 200 2.250 -5.340 0.800 1.00 0.00 ATOM 601 OW SOL 201 0.790 -6.220 6.530 1.00 0.00 ATOM 602 HW1 SOL 201 0.780 -6.690 7.410 1.00 0.00 ATOM 603 HW2 SOL 201 1.610 -6.500 6.020 1.00 0.00 ATOM 604 OW SOL 202 6.720 -4.710 -2.380 1.00 0.00 ATOM 605 HW1 SOL 202 5.940 -5.210 -2.000 1.00 0.00 ATOM 606 HW2 SOL 202 6.690 -3.760 -2.070 1.00 0.00 ATOM 607 OW SOL 203 -0.380 1.920 -6.350 1.00 0.00 ATOM 608 HW1 SOL 203 -0.420 1.020 -5.910 1.00 0.00 ATOM 609 HW2 SOL 203 -0.350 1.810 -7.340 1.00 0.00 ATOM 610 OW SOL 204 4.280 4.240 5.200 1.00 0.00 ATOM 611 HW1 SOL 204 4.580 3.520 4.580 1.00 0.00 ATOM 612 HW2 SOL 204 3.890 3.840 6.030 1.00 0.00 ATOM 613 OW SOL 205 -1.570 -3.750 -7.580 1.00 0.00 ATOM 614 HW1 SOL 205 -2.500 -4.000 -7.850 1.00 0.00 ATOM 615 HW2 SOL 205 -1.310 -4.250 -6.760 1.00 0.00 ATOM 616 OW SOL 206 3.170 5.470 -5.820 1.00 0.00 ATOM 617 HW1 SOL 206 3.550 4.880 -5.100 1.00 0.00 ATOM 618 HW2 SOL 206 3.570 5.210 -6.700 1.00 0.00 ATOM 619 OW SOL 207 8.120 -2.760 6.870 1.00 0.00 ATOM 620 HW1 SOL 207 8.440 -2.660 5.930 1.00 0.00 ATOM 621 HW2 SOL 207 7.330 -3.380 6.890 1.00 0.00 ATOM 622 OW SOL 208 -4.380 2.140 -7.500 1.00 0.00 ATOM 623 HW1 SOL 208 -3.860 1.490 -6.950 1.00 0.00 ATOM 624 HW2 SOL 208 -4.870 2.770 -6.890 1.00 0.00 ATOM 625 OW SOL 209 -8.610 0.340 -7.080 1.00 0.00 ATOM 626 HW1 SOL 209 -9.240 -0.380 -7.390 1.00 0.00 ATOM 627 HW2 SOL 209 -7.680 -0.020 -7.080 1.00 0.00 ATOM 628 OW SOL 210 7.700 -5.320 3.010 1.00 0.00 ATOM 629 HW1 SOL 210 7.240 -6.190 3.180 1.00 0.00 ATOM 630 HW2 SOL 210 8.610 -5.350 3.420 1.00 0.00 ATOM 631 OW SOL 211 6.180 -2.950 -5.780 1.00 0.00 ATOM 632 HW1 SOL 211 6.130 -2.130 -5.210 1.00 0.00 ATOM 633 HW2 SOL 211 7.070 -2.980 -6.230 1.00 0.00 ATOM 634 OW SOL 212 -5.100 0.520 1.680 1.00 0.00 ATOM 635 HW1 SOL 212 -4.750 0.110 0.840 1.00 0.00 ATOM 636 HW2 SOL 212 -6.000 0.140 1.880 1.00 0.00 ATOM 637 OW SOL 213 -5.620 4.530 6.910 1.00 0.00 ATOM 638 HW1 SOL 213 -6.210 5.330 6.950 1.00 0.00 ATOM 639 HW2 SOL 213 -5.470 4.180 7.840 1.00 0.00 ATOM 640 OW SOL 214 -2.690 2.210 8.820 1.00 0.00 ATOM 641 HW1 SOL 214 -3.530 2.200 9.360 1.00 0.00 ATOM 642 HW2 SOL 214 -2.670 3.040 8.260 1.00 0.00 ATOM 643 OW SOL 215 0.390 -7.850 3.000 1.00 0.00 ATOM 644 HW1 SOL 215 1.380 -7.960 2.910 1.00 0.00 ATOM 645 HW2 SOL 215 -0.010 -8.710 3.320 1.00 0.00 ATOM 646 OW SOL 216 8.750 -2.160 3.370 1.00 0.00 ATOM 647 HW1 SOL 216 7.980 -2.510 2.830 1.00 0.00 ATOM 648 HW2 SOL 216 8.430 -1.450 3.990 1.00 0.00 END avogadro-1.1.1/testfiles/ethanol.cml0000644000175000001440000000443012250371054016656 0ustar marcususers Ethanol 46.0684 46.0418648 -114 78 avogadro-1.1.1/testfiles/methane.g030000644000175000001440000017455312250371054016501 0ustar marcususers Entering Gaussian System, Link 0=/usr/local/lib/g03/g03 Initial command: /usr/local/lib/g03/l1.exe /scratch/banck/banck.g03.14551/Gau-14553.inp -scrdir=/scratch/banck/banck.g03.14551/ Entering Link 1 = /usr/local/lib/g03/l1.exe PID= 14554. Copyright (c) 1988,1990,1992,1993,1995,1998,2003,2004, Gaussian, Inc. All Rights Reserved. This is the Gaussian(R) 03 program. It is based on the the Gaussian(R) 98 system (copyright 1998, Gaussian, Inc.), the Gaussian(R) 94 system (copyright 1995, Gaussian, Inc.), the Gaussian 92(TM) system (copyright 1992, Gaussian, Inc.), the Gaussian 90(TM) system (copyright 1990, Gaussian, Inc.), the Gaussian 88(TM) system (copyright 1988, Gaussian, Inc.), the Gaussian 86(TM) system (copyright 1986, Carnegie Mellon University), and the Gaussian 82(TM) system (copyright 1983, Carnegie Mellon University). Gaussian is a federally registered trademark of Gaussian, Inc. This software contains proprietary and confidential information, including trade secrets, belonging to Gaussian, Inc. This software is provided under written license and may be used, copied, transmitted, or stored only in accord with that written license. The following legend is applicable only to US Government contracts under FAR: RESTRICTED RIGHTS LEGEND Use, reproduction and disclosure by the US Government is subject to restrictions as set forth in subparagraphs (a) and (c) of the Commercial Computer Software - Restricted Rights clause in FAR 52.227-19. Gaussian, Inc. 340 Quinnipiac St., Bldg. 40, Wallingford CT 06492 --------------------------------------------------------------- Warning -- This program may not be used in any manner that competes with the business of Gaussian, Inc. or will provide assistance to any competitor of Gaussian, Inc. The licensee of this program is prohibited from giving any competitor of Gaussian, Inc. access to this program. By using this program, the user acknowledges that Gaussian, Inc. is engaged in the business of creating and licensing software in the field of computational chemistry and represents and warrants to the licensee that it is not a competitor of Gaussian, Inc. and that it will not use this program in any manner prohibited above. --------------------------------------------------------------- Cite this work as: Gaussian 03, Revision D.01, M. J. Frisch, G. W. Trucks, H. B. Schlegel, G. E. Scuseria, M. A. Robb, J. R. Cheeseman, J. A. Montgomery, Jr., T. Vreven, K. N. Kudin, J. C. Burant, J. M. Millam, S. S. Iyengar, J. Tomasi, V. Barone, B. Mennucci, M. Cossi, G. Scalmani, N. Rega, G. A. Petersson, H. Nakatsuji, M. Hada, M. Ehara, K. Toyota, R. Fukuda, J. Hasegawa, M. Ishida, T. Nakajima, Y. Honda, O. Kitao, H. Nakai, M. Klene, X. Li, J. E. Knox, H. P. Hratchian, J. B. Cross, V. Bakken, C. Adamo, J. Jaramillo, R. Gomperts, R. E. Stratmann, O. Yazyev, A. J. Austin, R. Cammi, C. Pomelli, J. W. Ochterski, P. Y. Ayala, K. Morokuma, G. A. Voth, P. Salvador, J. J. Dannenberg, V. G. Zakrzewski, S. Dapprich, A. D. Daniels, M. C. Strain, O. Farkas, D. K. Malick, A. D. Rabuck, K. Raghavachari, J. B. Foresman, J. V. Ortiz, Q. Cui, A. G. Baboul, S. Clifford, J. Cioslowski, B. B. Stefanov, G. Liu, A. Liashenko, P. Piskorz, I. Komaromi, R. L. Martin, D. J. Fox, T. Keith, M. A. Al-Laham, C. Y. Peng, A. Nanayakkara, M. Challacombe, P. M. W. Gill, B. Johnson, W. Chen, M. W. Wong, C. Gonzalez, and J. A. Pople, Gaussian, Inc., Wallingford CT, 2004. ****************************************** Gaussian 03: AM64L-G03RevD.01 13-Oct-2005 11-Apr-2009 ****************************************** ----------------------------------- #P Gfinput IOP(6/7=3) HF/6-31G freq ----------------------------------- 1/10=4,30=1,38=1/1,3; 2/17=6,18=5,40=1/2; 3/5=1,6=6,11=9,16=1,24=10,25=1,30=1/1,2,3; 4//1; 5/5=2,38=5/2; 8/6=4,10=90,11=11/1; 10/13=10/2; 11/6=2,8=1,9=11,15=111,16=1/1,2,10; 10/6=1/2; 6/7=3,8=2,9=2,10=2,18=1,28=1/1; 7/8=1,10=1,25=1/1,2,3,16; 1/10=4,30=1/3; 99//99; Leave Link 1 at Sat Apr 11 01:28:51 2009, MaxMem= 0 cpu: 0.3 (Enter /usr/local/lib/g03/l101.exe) Symbolic Z-matrix: Charge = 0 Multiplicity = 1 0 1 C -0.00092 0. -0.00289 H -0.62971 -0.93095 -0.19667 H -0.62951 0.93099 -0.19709 H 0.92146 -0.00025 -0.67283 H 0.34326 0.00021 1.08392 Isotopes and Nuclear Properties: (Nuclear quadrupole moments (NQMom) in fm**2, nuclear magnetic moments (NMagM) in nuclear magnetons) Atom 1 2 3 4 5 6 IAtWgt= 0 12 1 1 1 1 AtmWgt= 0.0000000 12.0000000 1.0078250 1.0078250 1.0078250 1.0078250 NucSpn= 0 0 1 1 1 1 AtZEff= 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 NQMom= 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 NMagM= 0.0000000 0.0000000 2.7928460 2.7928460 2.7928460 2.7928460 Leave Link 101 at Sat Apr 11 01:28:51 2009, MaxMem= 6291456 cpu: 0.2 (Enter /usr/local/lib/g03/l103.exe) GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Initialization pass. Trust Radius=3.00D-01 FncErr=1.00D-07 GrdErr=1.00D-07 Number of steps in this run= 2 maximum allowed number of steps= 2. GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Leave Link 103 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.0 (Enter /usr/local/lib/g03/l202.exe) Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 0 0 0.000000 0.000000 0.000000 2 6 0 -0.000920 0.000000 -0.002890 3 1 0 -0.629710 -0.930950 -0.196670 4 1 0 -0.629510 0.930990 -0.197090 5 1 0 0.921460 -0.000250 -0.672830 6 1 0 0.343260 0.000210 1.083920 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 Bq 0.000000 2 C 0.003033 0.000000 3 H 1.141000 1.139998 0.000000 4 H 1.140995 1.139992 1.861940 0.000000 5 H 1.140960 1.140002 1.870577 1.870573 0.000000 6 H 1.136974 1.140007 1.858397 1.858392 1.849456 6 6 H 0.000000 Symmetry turned off: Cannot cope with ghost atoms or with translation vectors. Stoichiometry CH4 Framework group C1[X(CH4)] NUMDOF-- NAT= 5 NAtoms= 6 Deg. of freedom 0 Full point group C1 Rotational constants (GHZ): 145.8312741 144.7230469 143.5537555 Leave Link 202 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l301.exe) Standard basis: 6-31G (6D, 7F) Warning: center 1 has no basis functions! AO basis set in the form of general basis input: 2 0 S 6 1.00 0.000000000000 0.3047524880D+04 0.1834737132D-02 0.4573695180D+03 0.1403732281D-01 0.1039486850D+03 0.6884262226D-01 0.2921015530D+02 0.2321844432D+00 0.9286662960D+01 0.4679413484D+00 0.3163926960D+01 0.3623119853D+00 SP 3 1.00 0.000000000000 0.7868272350D+01 -0.1193324198D+00 0.6899906659D-01 0.1881288540D+01 -0.1608541517D+00 0.3164239610D+00 0.5442492580D+00 0.1143456438D+01 0.7443082909D+00 SP 1 1.00 0.000000000000 0.1687144782D+00 0.1000000000D+01 0.1000000000D+01 **** 3 0 S 3 1.00 0.000000000000 0.1873113696D+02 0.3349460434D-01 0.2825394365D+01 0.2347269535D+00 0.6401216923D+00 0.8137573261D+00 S 1 1.00 0.000000000000 0.1612777588D+00 0.1000000000D+01 **** 4 0 S 3 1.00 0.000000000000 0.1873113696D+02 0.3349460434D-01 0.2825394365D+01 0.2347269535D+00 0.6401216923D+00 0.8137573261D+00 S 1 1.00 0.000000000000 0.1612777588D+00 0.1000000000D+01 **** 5 0 S 3 1.00 0.000000000000 0.1873113696D+02 0.3349460434D-01 0.2825394365D+01 0.2347269535D+00 0.6401216923D+00 0.8137573261D+00 S 1 1.00 0.000000000000 0.1612777588D+00 0.1000000000D+01 **** 6 0 S 3 1.00 0.000000000000 0.1873113696D+02 0.3349460434D-01 0.2825394365D+01 0.2347269535D+00 0.6401216923D+00 0.8137573261D+00 S 1 1.00 0.000000000000 0.1612777588D+00 0.1000000000D+01 **** Integral buffers will be 131072 words long. Raffenetti 1 integral format. Two-electron integral symmetry is turned off. 17 basis functions, 38 primitive gaussians, 17 cartesian basis functions 5 alpha electrons 5 beta electrons nuclear repulsion energy 12.8461993023 Hartrees. IExCor= 0 DFT=F Ex=HF Corr=None ExCW=0 ScaHFX= 1.000000 ScaDFX= 1.000000 1.000000 1.000000 1.000000 IRadAn= 0 IRanWt= -1 IRanGd= 0 ICorTp=0 NAtoms= 6 NActive= 6 NUniq= 6 SFac= 7.50D-01 NAtFMM= 80 NAOKFM=F Big=F Leave Link 301 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.0 (Enter /usr/local/lib/g03/l302.exe) NPDir=0 NMtPBC= 1 NCelOv= 1 NCel= 1 NClECP= 1 NCelD= 1 NCelK= 1 NCelE2= 1 NClLst= 1 CellRange= 0.0. One-electron integrals computed using PRISM. NBasis= 17 RedAO= T NBF= 17 NBsUse= 17 1.00D-06 NBFU= 17 Leave Link 302 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l303.exe) DipDrv: MaxL=1. Leave Link 303 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.0 (Enter /usr/local/lib/g03/l401.exe) Harris functional with IExCor= 205 diagonalized for initial guess. ExpMin= 1.61D-01 ExpMax= 3.05D+03 ExpMxC= 4.57D+02 IAcc=1 IRadAn= 1 AccDes= 1.00D-06 HarFok: IExCor= 205 AccDes= 1.00D-06 IRadAn= 1 IDoV=1 ScaDFX= 1.000000 1.000000 1.000000 1.000000 Harris En= -40.3500180524467 Leave Link 401 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l502.exe) Closed shell SCF: Requested convergence on RMS density matrix=1.00D-08 within 128 cycles. Requested convergence on MAX density matrix=1.00D-06. Requested convergence on energy=1.00D-06. No special actions if energy rises. Using DIIS extrapolation, IDIIS= 1040. Two-electron integral symmetry not used. Keep R1 integrals in memory in canonical form, NReq= 833586. IEnd= 18884 IEndB= 18884 NGot= 6291456 MDV= 6277880 LenX= 6277880 Symmetry not used in FoFDir. MinBra= 0 MaxBra= 1 Meth= 1. IRaf= 0 NMat= 1 IRICut= 1 DoRegI=T DoRafI=F ISym2E= 0 JSym2E=0. Cycle 1 Pass 1 IDiag 1: E= -40.0536599122179 DIIS: error= 7.89D-02 at cycle 1 NSaved= 1. NSaved= 1 IEnMin= 1 EnMin= -40.0536599122179 IErMin= 1 ErrMin= 7.89D-02 ErrMax= 7.89D-02 EMaxC= 1.00D-01 BMatC= 1.12D-01 BMatP= 1.12D-01 IDIUse=3 WtCom= 2.11D-01 WtEn= 7.89D-01 Coeff-Com: 0.100D+01 Coeff-En: 0.100D+01 Coeff: 0.100D+01 Gap= 0.702 Goal= None Shift= 0.000 GapD= 0.702 DampG=2.000 DampE=0.500 DampFc=1.0000 IDamp=-1. RMSDP=2.03D-02 MaxDP=1.30D-01 OVMax= 1.45D-01 Cycle 2 Pass 1 IDiag 1: E= -40.1511919540104 Delta-E= -0.097532041792 Rises=F Damp=F DIIS: error= 3.07D-02 at cycle 2 NSaved= 2. NSaved= 2 IEnMin= 2 EnMin= -40.1511919540104 IErMin= 2 ErrMin= 3.07D-02 ErrMax= 3.07D-02 EMaxC= 1.00D-01 BMatC= 2.03D-02 BMatP= 1.12D-01 IDIUse=3 WtCom= 6.93D-01 WtEn= 3.07D-01 Coeff-Com: 0.287D+00 0.713D+00 Coeff-En: 0.000D+00 0.100D+01 Coeff: 0.199D+00 0.801D+00 Gap= 0.780 Goal= None Shift= 0.000 RMSDP=6.60D-03 MaxDP=3.98D-02 DE=-9.75D-02 OVMax= 4.13D-02 Cycle 3 Pass 1 IDiag 1: E= -40.1717303507593 Delta-E= -0.020538396749 Rises=F Damp=F DIIS: error= 4.86D-03 at cycle 3 NSaved= 3. NSaved= 3 IEnMin= 3 EnMin= -40.1717303507593 IErMin= 3 ErrMin= 4.86D-03 ErrMax= 4.86D-03 EMaxC= 1.00D-01 BMatC= 3.67D-04 BMatP= 2.03D-02 IDIUse=3 WtCom= 9.51D-01 WtEn= 4.86D-02 Coeff-Com: -0.240D-01 0.737D-01 0.950D+00 Coeff-En: 0.000D+00 0.000D+00 0.100D+01 Coeff: -0.229D-01 0.701D-01 0.953D+00 Gap= 0.771 Goal= None Shift= 0.000 RMSDP=9.25D-04 MaxDP=5.53D-03 DE=-2.05D-02 OVMax= 6.44D-03 Cycle 4 Pass 1 IDiag 1: E= -40.1721572986936 Delta-E= -0.000426947934 Rises=F Damp=F DIIS: error= 3.66D-04 at cycle 4 NSaved= 4. NSaved= 4 IEnMin= 4 EnMin= -40.1721572986936 IErMin= 4 ErrMin= 3.66D-04 ErrMax= 3.66D-04 EMaxC= 1.00D-01 BMatC= 1.31D-06 BMatP= 3.67D-04 IDIUse=3 WtCom= 9.96D-01 WtEn= 3.66D-03 Coeff-Com: 0.880D-02-0.375D-01-0.370D+00 0.140D+01 Coeff-En: 0.000D+00 0.000D+00 0.000D+00 0.100D+01 Coeff: 0.877D-02-0.374D-01-0.369D+00 0.140D+01 Gap= 0.771 Goal= None Shift= 0.000 RMSDP=1.35D-04 MaxDP=7.02D-04 DE=-4.27D-04 OVMax= 5.94D-04 Cycle 5 Pass 1 IDiag 1: E= -40.1721595277580 Delta-E= -0.000002229064 Rises=F Damp=F DIIS: error= 1.11D-05 at cycle 5 NSaved= 5. NSaved= 5 IEnMin= 5 EnMin= -40.1721595277580 IErMin= 5 ErrMin= 1.11D-05 ErrMax= 1.11D-05 EMaxC= 1.00D-01 BMatC= 2.50D-09 BMatP= 1.31D-06 IDIUse=1 WtCom= 1.00D+00 WtEn= 0.00D+00 Coeff-Com: -0.127D-02 0.549D-02 0.544D-01-0.238D+00 0.118D+01 Coeff: -0.127D-02 0.549D-02 0.544D-01-0.238D+00 0.118D+01 Gap= 0.771 Goal= None Shift= 0.000 RMSDP=8.97D-06 MaxDP=2.90D-05 DE=-2.23D-06 OVMax= 2.69D-05 Cycle 6 Pass 1 IDiag 1: E= -40.1721595326206 Delta-E= -0.000000004863 Rises=F Damp=F DIIS: error= 6.65D-07 at cycle 6 NSaved= 6. NSaved= 6 IEnMin= 6 EnMin= -40.1721595326206 IErMin= 6 ErrMin= 6.65D-07 ErrMax= 6.65D-07 EMaxC= 1.00D-01 BMatC= 5.47D-12 BMatP= 2.50D-09 IDIUse=1 WtCom= 1.00D+00 WtEn= 0.00D+00 Coeff-Com: 0.656D-04-0.259D-03-0.268D-02 0.134D-01-0.953D-01 0.108D+01 Coeff: 0.656D-04-0.259D-03-0.268D-02 0.134D-01-0.953D-01 0.108D+01 Gap= 0.771 Goal= None Shift= 0.000 RMSDP=2.95D-07 MaxDP=1.05D-06 DE=-4.86D-09 OVMax= 1.08D-06 Cycle 7 Pass 1 IDiag 1: E= -40.1721595326309 Delta-E= -0.000000000010 Rises=F Damp=F DIIS: error= 1.36D-07 at cycle 7 NSaved= 7. NSaved= 7 IEnMin= 7 EnMin= -40.1721595326309 IErMin= 7 ErrMin= 1.36D-07 ErrMax= 1.36D-07 EMaxC= 1.00D-01 BMatC= 2.09D-13 BMatP= 5.47D-12 IDIUse=1 WtCom= 1.00D+00 WtEn= 0.00D+00 Coeff-Com: -0.552D-05 0.155D-04 0.202D-03-0.154D-02 0.181D-01-0.381D+00 Coeff-Com: 0.136D+01 Coeff: -0.552D-05 0.155D-04 0.202D-03-0.154D-02 0.181D-01-0.381D+00 Coeff: 0.136D+01 Gap= 0.771 Goal= None Shift= 0.000 RMSDP=7.53D-08 MaxDP=4.76D-07 DE=-1.04D-11 OVMax= 3.54D-07 Cycle 8 Pass 1 IDiag 1: E= -40.1721595326315 Delta-E= -0.000000000001 Rises=F Damp=F DIIS: error= 1.19D-08 at cycle 8 NSaved= 8. NSaved= 8 IEnMin= 8 EnMin= -40.1721595326315 IErMin= 8 ErrMin= 1.19D-08 ErrMax= 1.19D-08 EMaxC= 1.00D-01 BMatC= 2.68D-15 BMatP= 2.09D-13 IDIUse=1 WtCom= 1.00D+00 WtEn= 0.00D+00 Coeff-Com: 0.463D-06 0.689D-06-0.968D-05 0.262D-03-0.465D-02 0.123D+00 Coeff-Com: -0.477D+00 0.136D+01 Coeff: 0.463D-06 0.689D-06-0.968D-05 0.262D-03-0.465D-02 0.123D+00 Coeff: -0.477D+00 0.136D+01 Gap= 0.771 Goal= None Shift= 0.000 RMSDP=6.90D-09 MaxDP=3.17D-08 DE=-5.90D-13 OVMax= 4.95D-08 SCF Done: E(RHF) = -40.1721595326 A.U. after 8 cycles Convg = 0.6904D-08 -V/T = 2.0057 S**2 = 0.0000 KE= 3.994303687666D+01 PE=-1.184820703695D+02 EE= 2.552067465792D+01 Leave Link 502 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l801.exe) Range of M.O.s used for correlation: 1 17 NBasis= 17 NAE= 5 NBE= 5 NFC= 0 NFV= 0 NROrb= 17 NOA= 5 NOB= 5 NVA= 12 NVB= 12 Leave Link 801 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.0 (Enter /usr/local/lib/g03/l1002.exe) Minotr: Closed-shell wavefunction. Direct CPHF calculation. Solving linear equations simultaneously. Differentiating once with respect to electric field. with respect to dipole field. Electric field/nuclear overlap derivatives assumed to be zero. Requested convergence is 1.0D-08 RMS, and 1.0D-07 maximum. Secondary convergence is 1.0D-12 RMS, and 1.0D-12 maximum. NewPWx=F KeepS1=T KeepF1=T KeepIn=T MapXYZ=F. MDV= 6291406 using IRadAn= 2. Store integrals in memory, NReq= 812016. Symmetry not used in FoFDir. MinBra= 0 MaxBra= 1 Meth= 1. IRaf= 0 NMat= 1 IRICut= 1 DoRegI=T DoRafI=F ISym2E= 0 JSym2E=0. There are 3 degrees of freedom in the 1st order CPHF. 3 vectors were produced by pass 0. AX will form 3 AO Fock derivatives at one time. 3 vectors were produced by pass 1. 3 vectors were produced by pass 2. 3 vectors were produced by pass 3. 3 vectors were produced by pass 4. 3 vectors were produced by pass 5. 3 vectors were produced by pass 6. 1 vectors were produced by pass 7. Inv2: IOpt= 1 Iter= 1 AM= 5.08D-16 Conv= 1.00D-12. Inverted reduced A of dimension 22 with in-core refinement. End of Minotr Frequency-dependent properties file 721 does not exist. Leave Link 1002 at Sat Apr 11 01:28:52 2009, MaxMem= 6291456 cpu: 0.0 (Enter /usr/local/lib/g03/l1101.exe) Using compressed storage, NAtomX= 6. Will process 7 centers per pass. Leave Link 1101 at Sat Apr 11 01:28:53 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l1102.exe) Use density number 0. Symmetrizing basis deriv contribution to polar: IMax=3 JMax=2 DiffMx= 0.00D+00 Leave Link 1102 at Sat Apr 11 01:28:53 2009, MaxMem= 6291456 cpu: 0.0 (Enter /usr/local/lib/g03/l1110.exe) Forming Gx(P) for the SCF density, NAtomX= 6. Integral derivatives from FoFDir, PRISM(SPDF). Do as many integral derivatives as possible in FoFDir. G2DrvN: MDV= 6291406. G2DrvN: will do 7 centers at a time, making 1 passes doing MaxLOS=1. Symmetry not used in FoFDir. MinBra= 0 MaxBra= 1 Meth= 1. IRaf= 0 NMat= 1 IRICut= 1 DoRegI=T DoRafI=F ISym2E= 0 JSym2E=0. FoFDir/FoFCou used for L=0 through L=1. Leave Link 1110 at Sat Apr 11 01:28:53 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l1002.exe) Minotr: Closed-shell wavefunction. DoAtom=TTTTTT Direct CPHF calculation. Solving linear equations simultaneously. Differentiating once with respect to electric field. with respect to dipole field. Differentiating once with respect to nuclear coordinates. Requested convergence is 1.0D-08 RMS, and 1.0D-07 maximum. Secondary convergence is 1.0D-12 RMS, and 1.0D-12 maximum. NewPWx=T KeepS1=F KeepF1=F KeepIn=T MapXYZ=F. MDV= 6291400 using IRadAn= 2. Store integrals in memory, NReq= 812145. Symmetry not used in FoFDir. MinBra= 0 MaxBra= 1 Meth= 1. IRaf= 0 NMat= 1 IRICut= 1 DoRegI=T DoRafI=F ISym2E= 0 JSym2E=0. There are 21 degrees of freedom in the 1st order CPHF. 15 vectors were produced by pass 0. AX will form 15 AO Fock derivatives at one time. 15 vectors were produced by pass 1. 15 vectors were produced by pass 2. 12 vectors were produced by pass 3. 3 vectors were produced by pass 4. Inv2: IOpt= 1 Iter= 1 AM= 1.47D-15 Conv= 1.00D-12. Inverted reduced A of dimension 60 with in-core refinement. Isotropic polarizability for W= 0.000000 13.47 Bohr**3. End of Minotr Frequency-dependent properties file 721 does not exist. Leave Link 1002 at Sat Apr 11 01:28:53 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l601.exe) Copying SCF densities to generalized density rwf, ISCF=0 IROHF=0. ********************************************************************** Population analysis using the SCF density. ********************************************************************** Alpha occ. eigenvalues -- -11.23118 -0.92617 -0.53278 -0.53059 -0.52812 Alpha virt. eigenvalues -- 0.24305 0.30793 0.30857 0.30960 0.76277 Alpha virt. eigenvalues -- 0.76432 0.76600 1.16162 1.17788 1.17996 Alpha virt. eigenvalues -- 1.18225 1.31381 Molecular Orbital Coefficients 1 2 3 4 5 O O O O O EIGENVALUES -- -11.23118 -0.92617 -0.53278 -0.53059 -0.52812 1 1 C 1S 0.99624 -0.19514 0.00031 0.00000 0.00098 2 2S 0.02471 0.36902 -0.00072 0.00000 -0.00228 3 2PX 0.00001 0.00064 0.42723 0.00019 0.00245 4 2PY 0.00000 0.00000 -0.00019 0.42727 0.00011 5 2PZ 0.00002 0.00198 -0.00247 -0.00012 0.42726 6 3S -0.01497 0.40477 -0.00055 0.00000 -0.00169 7 3PX -0.00002 0.00042 0.22978 0.00010 0.00116 8 3PY 0.00000 0.00000 -0.00010 0.23066 0.00006 9 3PZ -0.00007 0.00130 -0.00149 -0.00006 0.23107 10 2 H 1S -0.00007 0.12929 -0.16144 -0.24065 -0.05334 11 2S 0.00277 0.03609 -0.13963 -0.20922 -0.04730 12 3 H 1S -0.00007 0.12929 -0.16161 0.24055 -0.05332 13 2S 0.00277 0.03609 -0.13977 0.20913 -0.04728 14 4 H 1S -0.00007 0.12930 0.23701 0.00009 -0.17505 15 2S 0.00277 0.03609 0.20456 0.00008 -0.15391 16 5 H 1S -0.00006 0.12984 0.08605 0.00002 0.28176 17 2S 0.00280 0.03583 0.07446 0.00001 0.24719 6 7 8 9 10 V V V V V EIGENVALUES -- 0.24305 0.30793 0.30857 0.30960 0.76277 1 1 C 1S -0.15681 0.00039 0.00000 -0.00012 -0.00013 2 2S 0.11645 0.00117 0.00000 -0.00051 0.00866 3 2PX 0.00000 0.02374 0.00022 0.31475 0.00653 4 2PY 0.00000 -0.00012 0.31467 -0.00021 0.00003 5 2PZ -0.00025 -0.31356 -0.00010 0.02411 -0.82611 6 3S 2.49764 -0.01753 0.00003 0.00637 -0.00387 7 3PX 0.00234 0.10762 0.00099 1.40846 -0.01140 8 3PY -0.00001 -0.00052 1.40134 -0.00096 -0.00007 9 3PZ 0.00650 -1.38427 -0.00044 0.10512 1.43381 10 2 H 1S -0.00986 -0.01428 0.07551 0.05088 0.09607 11 2S -0.96657 -0.23931 1.50179 1.03330 0.02350 12 3 H 1S -0.00986 -0.01426 -0.07546 0.05097 0.09631 13 2S -0.96655 -0.23890 -1.50066 1.03508 0.02358 14 4 H 1S -0.00990 -0.06344 -0.00005 -0.06695 0.32650 15 2S -0.96698 -1.19590 -0.00099 -1.39621 0.09311 16 5 H 1S -0.00779 0.08727 -0.00001 -0.03303 -0.50542 17 2S -0.96052 1.70551 -0.00018 -0.68370 -0.15685 11 12 13 14 15 V V V V V EIGENVALUES -- 0.76432 0.76600 1.16162 1.17788 1.17996 1 1 C 1S 0.00000 -0.00003 0.09976 -0.01129 0.00001 2 2S 0.00000 0.00283 -0.86241 0.13649 -0.00012 3 2PX 0.00041 -0.82780 0.02519 -0.02283 -0.00064 4 2PY -0.82717 -0.00042 0.00011 0.00021 -0.82229 5 2PZ -0.00003 -0.00628 0.10039 0.81521 0.00021 6 3S 0.00001 -0.00132 1.19963 -0.21390 0.00016 7 3PX -0.00074 1.47764 -0.03369 0.02704 0.00075 8 3PY 1.45602 0.00073 -0.00014 -0.00025 0.97014 9 3PZ 0.00005 0.01116 -0.13126 -0.96463 -0.00025 10 2 H 1S 0.43569 0.29526 0.65713 0.09400 -0.84008 11 2S 0.15019 0.11270 -0.61274 -0.16730 1.24469 12 3 H 1S -0.43600 0.29473 0.65693 0.09396 0.83949 13 2S -0.15033 0.11252 -0.61245 -0.16723 -1.24373 14 4 H 1S 0.00034 -0.42374 0.66744 0.56142 0.00066 15 2S 0.00012 -0.16644 -0.62843 -0.86298 -0.00092 16 5 H 1S -0.00004 -0.16173 0.49189 -1.03576 0.00027 17 2S -0.00001 -0.06425 -0.34649 1.51464 -0.00034 16 17 V V EIGENVALUES -- 1.18225 1.31381 1 1 C 1S -0.00305 -0.06354 2 2S 0.04101 -2.19079 3 2PX 0.82225 0.00169 4 2PY -0.00064 0.00000 5 2PZ 0.01963 0.00418 6 3S -0.06605 4.77244 7 3PX -0.96671 0.00823 8 3PY 0.00076 0.00001 9 3PZ -0.02314 0.02678 10 2 H 1S 0.54962 -0.30533 11 2S -0.81567 -0.85908 12 3 H 1S 0.55076 -0.30532 13 2S -0.81737 -0.85911 14 4 H 1S -0.82911 -0.30623 15 2S 1.21651 -0.85817 16 5 H 1S -0.34912 -0.33617 17 2S 0.50928 -0.84992 Condensed to atoms (all electrons): 1 2 3 4 5 6 1 Bq 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2 C 0.000000 5.123667 0.372631 0.372631 0.372613 0.372193 3 H 0.000000 0.372631 0.551587 -0.026246 -0.025211 -0.026468 4 H 0.000000 0.372631 -0.026246 0.551586 -0.025211 -0.026468 5 H 0.000000 0.372613 -0.025211 -0.025211 0.551650 -0.027554 6 H 0.000000 0.372193 -0.026468 -0.026468 -0.027554 0.555689 Mulliken atomic charges: 1 1 Bq 0.000000 2 C -0.613735 3 H 0.153707 4 H 0.153708 5 H 0.153713 6 H 0.152608 Sum of Mulliken charges= 0.00000 Atomic charges with hydrogens summed into heavy atoms: 1 1 Bq 0.152608 2 C -0.152608 3 H 0.000000 4 H 0.000000 5 H 0.000000 6 H 0.000000 Sum of Mulliken charges= 0.00000 APT atomic charges: 1 1 Bq 0.000000 2 C 0.071904 3 H -0.017206 4 H -0.017205 5 H -0.017198 6 H -0.020294 Sum of APT charges= 0.00000 APT Atomic charges with hydrogens summed into heavy atoms: 1 1 Bq -0.020294 2 C 0.020294 3 H 0.000000 4 H 0.000000 5 H 0.000000 6 H 0.000000 Sum of APT charges= 0.00000 Electronic spatial extent (au): = 37.7616 Charge= 0.0000 electrons Dipole moment (field-independent basis, Debye): X= 0.0032 Y= 0.0000 Z= 0.0099 Tot= 0.0105 Quadrupole moment (field-independent basis, Debye-Ang): XX= -8.5659 YY= -8.6026 ZZ= -8.6536 XY= 0.0000 XZ= -0.0031 YZ= 0.0000 Traceless Quadrupole moment (field-independent basis, Debye-Ang): XX= 0.0415 YY= 0.0047 ZZ= -0.0462 XY= 0.0000 XZ= -0.0031 YZ= 0.0000 Octapole moment (field-independent basis, Debye-Ang**2): XXX= 0.2335 YYY= 0.0001 ZZZ= 0.6453 XYY= -0.7500 XXY= -0.0003 XXZ= -0.4066 XZZ= 0.5211 YZZ= 0.0002 YYZ= -0.2237 XYZ= 0.0003 Hexadecapole moment (field-independent basis, Debye-Ang**3): XXXX= -17.1159 YYYY= -16.5782 ZZZZ= -16.4476 XXXY= 0.0000 XXXZ= -0.3967 YYYX= 0.0001 YYYZ= -0.0004 ZZZX= 0.1644 ZZZY= 0.0003 XXYY= -5.3491 XXZZ= -5.4786 YYZZ= -5.9585 XXYZ= 0.0001 YYXZ= 0.2157 ZZXY= -0.0001 N-N= 1.284619930229D+01 E-N=-1.184820703241D+02 KE= 3.994303687666D+01 Orbital energies and kinetic energies (alpha): 1 2 1 O -11.23118 16.02263 2 O -0.92617 1.21695 3 O -0.53278 0.91035 4 O -0.53059 0.91070 5 O -0.52812 0.91088 6 V 0.24305 0.89004 7 V 0.30793 0.75170 8 V 0.30857 0.75072 9 V 0.30960 0.75066 10 V 0.76277 1.68300 11 V 0.76432 1.68390 12 V 0.76600 1.68441 13 V 1.16162 2.74425 14 V 1.17788 2.69902 15 V 1.17996 2.70320 16 V 1.18225 2.70960 17 V 1.31381 2.06672 Total kinetic energy from orbitals= 3.994303687666D+01 Exact polarizability: 13.593 0.000 13.442 0.024 0.000 13.364 Approx polarizability: 10.292 0.000 10.159 0.017 0.000 10.077 No NMR shielding tensors so no spin-rotation constants. Leave Link 601 at Sat Apr 11 01:28:53 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l701.exe) Compute integral second derivatives. ... and contract with generalized density number 0. Leave Link 701 at Sat Apr 11 01:28:53 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l702.exe) L702 exits ... SP integral derivatives will be done elsewhere. Leave Link 702 at Sat Apr 11 01:28:53 2009, MaxMem= 6291456 cpu: 0.0 (Enter /usr/local/lib/g03/l703.exe) Compute integral second derivatives, UseDBF=F. Integral derivatives from FoFDir, PRISM(SPD) Scalar Rys(F). Symmetry not used in FoFDir. MinBra= 0 MaxBra= 2 Meth= 1. IRaf= 0 NMat= 1 IRICut= 1 DoRegI=T DoRafI=F ISym2E= 0 JSym2E=0. Leave Link 703 at Sat Apr 11 01:28:54 2009, MaxMem= 6291456 cpu: 0.3 (Enter /usr/local/lib/g03/l716.exe) Dipole = 1.26855274D-03 2.52495188D-06 3.91167841D-03 Polarizability= 1.35929807D+01 4.04408791D-05 1.34415638D+01 2.41439726D-02 4.70239147D-06 1.33638774D+01 HyperPolar = 1.03224275D+01-1.29877533D-02-3.50866316D+01 3.47100240D-03-1.93015708D+01 1.44258957D-02 -1.10673393D+01 2.49876444D+01 9.46772637D-03 3.10516280D+01 Mass of ghost atom number 1 set to 0.001. Full mass-weighted force constant matrix: Low frequencies --- -0.0015 -0.0014 -0.0012 0.0000 0.0000 0.0000 Low frequencies --- 656.1052 663.4437 670.6808 ****** 1 imaginary frequencies (negative Signs) ****** Diagonal vibrational polarizability: 0.3035360 0.3034213 0.3303397 Diagonal vibrational hyperpolarizability: -1.9180960 -0.0004637 -6.3688022 Harmonic frequencies (cm**-1), IR intensities (KM/Mole), Raman scattering activities (A**4/AMU), depolarization ratios for plane and unpolarized incident light, reduced masses (AMU), force constants (mDyne/A), and normal coordinates: 1 2 3 ?A ?A ?A Frequencies -- 0.0000 0.0126 0.0127 Red. masses -- 0.0010 0.0010 0.0010 Frc consts -- 0.0000 0.0000 0.0000 IR Inten -- 0.0000 0.0000 0.0000 Raman Activ -- 0.0000 0.0000 0.0000 Depolar (P) -- 0.0000 0.0000 0.7500 Depolar (U) -- 0.0000 0.0000 0.8571 Atom AN X Y Z X Y Z X Y Z 1 0 0.30 0.00 0.95 0.00 1.00 0.00 0.95 0.00 -0.30 2 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 4 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 5 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 6 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 4 5 6 ?A ?A ?A Frequencies -- 1575.7247 1581.4013 1584.1918 Red. masses -- 1.1864 1.1846 1.1842 Frc consts -- 1.7356 1.7455 1.7511 IR Inten -- 13.7596 12.3060 12.4057 Raman Activ -- 3.4382 3.9867 4.0189 Depolar (P) -- 0.7480 0.7500 0.7499 Depolar (U) -- 0.8559 0.8571 0.8571 Atom AN X Y Z X Y Z X Y Z 1 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2 6 0.01 0.00 0.13 0.00 0.13 0.00 0.13 0.00 -0.01 3 1 0.03 0.12 -0.57 0.31 -0.15 0.09 -0.41 0.30 0.12 4 1 0.03 -0.12 -0.57 -0.31 -0.15 -0.09 -0.41 -0.30 0.12 5 1 -0.34 0.00 -0.39 0.00 -0.62 0.00 -0.13 0.00 -0.29 6 1 0.14 0.00 0.03 0.00 -0.59 0.00 -0.55 0.00 0.19 7 8 9 ?A ?A ?A Frequencies -- 1718.8498 1723.3635 2710.6044 Red. masses -- 1.0079 1.0079 1.0079 Frc consts -- 1.7544 1.7636 4.3630 IR Inten -- 0.0046 0.0046 0.0084 Raman Activ -- 47.4008 47.6854 177.7841 Depolar (P) -- 0.7500 0.7499 0.0003 Depolar (U) -- 0.8571 0.8571 0.0005 Atom AN X Y Z X Y Z X Y Z 1 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3 1 -0.15 0.00 0.48 0.38 -0.28 0.13 -0.28 -0.42 -0.09 4 1 0.15 0.00 -0.48 0.38 0.28 0.13 -0.28 0.42 -0.09 5 1 0.00 0.49 0.00 -0.30 0.00 -0.40 0.41 0.00 -0.30 6 1 0.00 -0.51 0.00 -0.49 0.00 0.15 0.14 0.00 0.45 10 11 12 ?A ?A ?A Frequencies -- 2770.5840 2775.4371 2778.9718 Red. masses -- 1.0952 1.0967 1.0970 Frc consts -- 4.9534 4.9775 4.9914 IR Inten -- 51.9130 48.9196 48.6338 Raman Activ -- 86.3627 83.5771 82.2135 Depolar (P) -- 0.7476 0.7500 0.7498 Depolar (U) -- 0.8556 0.8571 0.8570 Atom AN X Y Z X Y Z X Y Z 1 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2 6 0.00 0.00 0.09 0.00 0.09 0.00 0.09 0.00 0.00 3 1 -0.09 -0.13 0.00 -0.40 -0.57 -0.13 -0.23 -0.39 -0.08 4 1 -0.08 0.13 0.00 0.40 -0.56 0.13 -0.24 0.40 -0.08 5 1 0.40 0.00 -0.26 0.00 0.03 0.00 -0.56 0.00 0.43 6 1 -0.26 0.00 -0.80 0.00 0.03 0.00 -0.04 0.00 -0.24 ------------------- - Thermochemistry - ------------------- Temperature 298.150 Kelvin. Pressure 1.00000 Atm. Atom 1 has atomic number 0 and mass 0.00100 Atom 2 has atomic number 6 and mass 12.00000 Atom 3 has atomic number 1 and mass 1.00783 Atom 4 has atomic number 1 and mass 1.00783 Atom 5 has atomic number 1 and mass 1.00783 Atom 6 has atomic number 1 and mass 1.00783 Molecular mass: 16.03230 amu. Principal axes and moments of inertia in atomic units: 1 2 3 EIGENVALUES -- 12.37554 12.47031 12.57188 X 1.00000 -0.00010 -0.00039 Y 0.00010 1.00000 0.00011 Z 0.00039 -0.00011 1.00000 This molecule is an asymmetric top. Rotational symmetry number 1. Rotational temperatures (Kelvin) 6.99879 6.94560 6.88949 Rotational constants (GHZ): 145.83127 144.72305 143.55376 1 imaginary frequencies ignored. Zero-point vibrational energy 114956.1 (Joules/Mol) 27.47516 (Kcal/Mol) Warning -- explicit consideration of 2 degrees of freedom as vibrations may cause significant error Vibrational temperatures: 0.02 0.02 2267.11 2275.28 2279.30 (Kelvin) 2473.04 2479.53 3899.95 3986.25 3993.23 3998.32 Zero-point correction= 0.043784 (Hartree/Particle) Thermal correction to Energy= 0.048520 Thermal correction to Enthalpy= 0.049464 Thermal correction to Gibbs Free Energy= 0.005670 Sum of electronic and zero-point Energies= -40.128375 Sum of electronic and thermal Energies= -40.123640 Sum of electronic and thermal Enthalpies= -40.122696 Sum of electronic and thermal Free Energies= -40.166490 E (Thermal) CV S KCal/Mol Cal/Mol-Kelvin Cal/Mol-Kelvin Total 30.447 10.175 92.173 Electronic 0.000 0.000 0.000 Translational 0.889 2.981 34.261 Rotational 0.889 2.981 15.325 Vibrational 28.669 4.214 42.586 Vibration 1 0.592 1.987 21.282 Vibration 2 0.592 1.987 21.270 Q Log10(Q) Ln(Q) Total Bot 0.246650D-02 -2.607919 -6.004955 Total V=0 0.340008D+18 17.531490 40.367747 Vib (Bot) 0.196049D-11 -11.707635 -26.957826 Vib (Bot) 1 0.164709D+05 4.216717 9.709349 Vib (Bot) 2 0.163749D+05 4.214178 9.703503 Vib (V=0) 0.270255D+09 8.431773 19.414876 Vib (V=0) 1 0.164714D+05 4.216730 9.709379 Vib (V=0) 2 0.163754D+05 4.214191 9.703533 Electronic 0.100000D+01 0.000000 0.000000 Translational 0.252318D+07 6.401949 14.741032 Rotational 0.498617D+03 2.697767 6.211839 IR Spectrum 222 2 11 111 777 7 77 555 777 1 21 887 951 1 39 416 XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX X Raman Spectrum 222 2 11 111 777 7 77 555 777 1 21 887 951 1 39 416 XXX X XX XXX XXX X XX XXX X XX XXX X XX XXX X XX XXX X XXX X XXX X XXX X X X X X X X X X X X X X ------------------------------------------------------------------- Center Atomic Forces (Hartrees/Bohr) Number Number X Y Z ------------------------------------------------------------------- 1 0 0.000000000 0.000000000 0.000000000 2 6 0.001128391 -0.000001656 0.003571781 3 1 0.020613823 0.029543185 0.005218196 4 1 0.020605854 -0.029542692 0.005230853 5 1 -0.030715190 0.000007711 0.019601009 6 1 -0.011632878 -0.000006547 -0.033621839 ------------------------------------------------------------------- Cartesian Forces: Max 0.033621839 RMS 0.017089792 ------------------------------------------------------------------------ Internal Coordinate Forces (Hartree/Bohr or radian) Cent Atom N1 Length/X N2 Alpha/Y N3 Beta/Z J ------------------------------------------------------------------------ 1 Bq 2 C 0.001128( 1) -0.000002( 6) 0.003572( 11) 3 H 0.020614( 2) 0.029543( 7) 0.005218( 12) 4 H 0.020606( 3) -0.029543( 8) 0.005231( 13) 5 H -0.030715( 4) 0.000008( 9) 0.019601( 14) 6 H -0.011633( 5) -0.000007( 10) -0.033622( 15) ------------------------------------------------------------------------ Internal Forces: Max 0.033621839 RMS 0.018720930 Force constants in Cartesian coordinates: 1 2 3 4 5 1 0.000000D+00 2 0.000000D+00 0.000000D+00 3 0.000000D+00 0.000000D+00 0.000000D+00 4 0.000000D+00 0.000000D+00 0.000000D+00 0.496656D+00 5 0.000000D+00 0.000000D+00 0.000000D+00 -0.582835D-05 0.494644D+00 6 0.000000D+00 0.000000D+00 0.000000D+00 -0.900788D-03 -0.268146D-05 7 0.000000D+00 0.000000D+00 0.000000D+00 -0.118448D+00 -0.782514D-01 8 0.000000D+00 0.000000D+00 0.000000D+00 -0.782264D-01 -0.181636D+00 9 0.000000D+00 0.000000D+00 0.000000D+00 -0.161703D-01 -0.243380D-01 10 0.000000D+00 0.000000D+00 0.000000D+00 -0.118418D+00 0.782356D-01 11 0.000000D+00 0.000000D+00 0.000000D+00 0.782110D-01 -0.181654D+00 12 0.000000D+00 0.000000D+00 0.000000D+00 -0.162015D-01 0.243933D-01 13 0.000000D+00 0.000000D+00 0.000000D+00 -0.178880D+00 0.310607D-04 14 0.000000D+00 0.000000D+00 0.000000D+00 0.308391D-04 -0.658940D-01 15 0.000000D+00 0.000000D+00 0.000000D+00 0.829150D-01 -0.223853D-04 16 0.000000D+00 0.000000D+00 0.000000D+00 -0.809099D-01 -0.950493D-05 17 0.000000D+00 0.000000D+00 0.000000D+00 -0.955285D-05 -0.654597D-01 18 0.000000D+00 0.000000D+00 0.000000D+00 -0.496423D-01 -0.302368D-04 6 7 8 9 10 6 0.489168D+00 7 -0.162771D-01 0.126974D+00 8 -0.244866D-01 0.927226D-01 0.202337D+00 9 -0.703925D-01 0.197648D-01 0.292684D-01 0.704002D-01 10 -0.163083D-01 0.114897D-01 -0.160613D-01 0.381991D-02 0.126938D+00 11 0.245420D-01 0.160557D-01 -0.222357D-01 0.522742D-02 -0.927026D-01 12 -0.704142D-01 0.381152D-02 -0.521783D-02 0.837174D-03 0.198017D-01 13 0.831936D-01 -0.142622D-01 0.934563D-03 0.109228D-01 -0.142577D-01 14 -0.222999D-04 -0.224348D-01 0.935582D-03 0.178750D-01 0.224354D-01 15 -0.125662D+00 -0.594493D-02 0.318698D-03 0.407637D-02 -0.595520D-02 16 -0.497074D-01 -0.575375D-02 0.630579D-03 -0.183373D-01 -0.575216D-02 17 -0.304327D-04 -0.809211D-02 0.598999D-03 -0.280327D-01 0.809287D-02 18 -0.222700D+00 -0.135434D-02 0.117326D-03 -0.492127D-02 -0.135805D-02 11 12 13 14 15 11 0.202356D+00 12 -0.293338D-01 0.704264D-01 13 -0.926502D-03 0.109196D-01 0.198219D+00 14 0.922894D-03 -0.178760D-01 -0.366774D-04 0.642603D-01 15 -0.316004D-03 0.408464D-02 -0.986290D-01 0.270480D-04 0.137216D+00 16 -0.637558D-03 -0.183313D-01 0.918171D-02 0.524696D-05 0.276141D-01 17 0.610135D-03 0.280343D-01 -0.244389D-05 -0.224848D-03 -0.735608D-05 18 -0.119588D-03 -0.493405D-02 -0.640714D-02 -0.372293D-05 -0.197151D-01 16 17 18 16 0.832341D-01 17 0.112365D-04 0.644754D-01 18 0.587619D-01 0.362214D-04 0.252270D+00 Force constants in internal coordinates: 1 2 3 4 5 1 0.496656D+00 2 -0.118448D+00 0.126974D+00 3 -0.118418D+00 0.114897D-01 0.126938D+00 4 -0.178880D+00 -0.142622D-01 -0.142577D-01 0.198219D+00 5 -0.809099D-01 -0.575375D-02 -0.575216D-02 0.918171D-02 0.832341D-01 6 -0.582835D-05 -0.782514D-01 0.782356D-01 0.310607D-04 -0.950493D-05 7 -0.782264D-01 0.927226D-01 -0.160613D-01 0.934563D-03 0.630579D-03 8 0.782110D-01 0.160557D-01 -0.927026D-01 -0.926502D-03 -0.637558D-03 9 0.308391D-04 -0.224348D-01 0.224354D-01 -0.366774D-04 0.524696D-05 10 -0.955285D-05 -0.809211D-02 0.809287D-02 -0.244389D-05 0.112365D-04 11 -0.900788D-03 -0.162771D-01 -0.163083D-01 0.831936D-01 -0.497074D-01 12 -0.161703D-01 0.197648D-01 0.381991D-02 0.109228D-01 -0.183373D-01 13 -0.162015D-01 0.381152D-02 0.198017D-01 0.109196D-01 -0.183313D-01 14 0.829150D-01 -0.594493D-02 -0.595520D-02 -0.986290D-01 0.276141D-01 15 -0.496423D-01 -0.135434D-02 -0.135805D-02 -0.640714D-02 0.587619D-01 6 7 8 9 10 6 0.494644D+00 7 -0.181636D+00 0.202337D+00 8 -0.181654D+00 -0.222357D-01 0.202356D+00 9 -0.658940D-01 0.935582D-03 0.922894D-03 0.642603D-01 10 -0.654597D-01 0.598999D-03 0.610135D-03 -0.224848D-03 0.644754D-01 11 -0.268146D-05 -0.244866D-01 0.245420D-01 -0.222999D-04 -0.304327D-04 12 -0.243380D-01 0.292684D-01 0.522742D-02 0.178750D-01 -0.280327D-01 13 0.243933D-01 -0.521783D-02 -0.293338D-01 -0.178760D-01 0.280343D-01 14 -0.223853D-04 0.318698D-03 -0.316004D-03 0.270480D-04 -0.735608D-05 15 -0.302368D-04 0.117326D-03 -0.119588D-03 -0.372293D-05 0.362214D-04 11 12 13 14 15 11 0.489168D+00 12 -0.703925D-01 0.704002D-01 13 -0.704142D-01 0.837174D-03 0.704264D-01 14 -0.125662D+00 0.407637D-02 0.408464D-02 0.137216D+00 15 -0.222700D+00 -0.492127D-02 -0.493405D-02 -0.197151D-01 0.252270D+00 Leave Link 716 at Sat Apr 11 01:28:54 2009, MaxMem= 6291456 cpu: 0.0 (Enter /usr/local/lib/g03/l103.exe) GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Search for a local minimum. Step number 1 out of a maximum of 2 All quantities printed in internal units (Hartrees-Bohrs-Radians) Second derivative matrix not updated -- analytic derivatives used. The second derivative matrix: X1 Y1 Z1 X2 Y2 X1 0.00000 Y1 0.00000 0.00000 Z1 0.00000 0.00000 0.00000 X2 0.00000 0.00000 0.00000 0.49666 Y2 0.00000 0.00000 0.00000 -0.00001 0.49464 Z2 0.00000 0.00000 0.00000 -0.00090 0.00000 X3 0.00000 0.00000 0.00000 -0.11845 -0.07825 Y3 0.00000 0.00000 0.00000 -0.07823 -0.18164 Z3 0.00000 0.00000 0.00000 -0.01617 -0.02434 X4 0.00000 0.00000 0.00000 -0.11842 0.07824 Y4 0.00000 0.00000 0.00000 0.07821 -0.18165 Z4 0.00000 0.00000 0.00000 -0.01620 0.02439 X5 0.00000 0.00000 0.00000 -0.17888 0.00003 Y5 0.00000 0.00000 0.00000 0.00003 -0.06589 Z5 0.00000 0.00000 0.00000 0.08291 -0.00002 X6 0.00000 0.00000 0.00000 -0.08091 -0.00001 Y6 0.00000 0.00000 0.00000 -0.00001 -0.06546 Z6 0.00000 0.00000 0.00000 -0.04964 -0.00003 Z2 X3 Y3 Z3 X4 Z2 0.48917 X3 -0.01628 0.12697 Y3 -0.02449 0.09272 0.20234 Z3 -0.07039 0.01976 0.02927 0.07040 X4 -0.01631 0.01149 -0.01606 0.00382 0.12694 Y4 0.02454 0.01606 -0.02224 0.00523 -0.09270 Z4 -0.07041 0.00381 -0.00522 0.00084 0.01980 X5 0.08319 -0.01426 0.00093 0.01092 -0.01426 Y5 -0.00002 -0.02243 0.00094 0.01787 0.02244 Z5 -0.12566 -0.00594 0.00032 0.00408 -0.00596 X6 -0.04971 -0.00575 0.00063 -0.01834 -0.00575 Y6 -0.00003 -0.00809 0.00060 -0.02803 0.00809 Z6 -0.22270 -0.00135 0.00012 -0.00492 -0.00136 Y4 Z4 X5 Y5 Z5 Y4 0.20236 Z4 -0.02933 0.07043 X5 -0.00093 0.01092 0.19822 Y5 0.00092 -0.01788 -0.00004 0.06426 Z5 -0.00032 0.00408 -0.09863 0.00003 0.13722 X6 -0.00064 -0.01833 0.00918 0.00001 0.02761 Y6 0.00061 0.02803 0.00000 -0.00022 -0.00001 Z6 -0.00012 -0.00493 -0.00641 0.00000 -0.01972 X6 Y6 Z6 X6 0.08323 Y6 0.00001 0.06448 Z6 0.05876 0.00004 0.25227 Eigenvalues --- 0.00000 0.00000 0.00000 0.11267 0.11326 Eigenvalues --- 0.14750 0.14774 0.14808 0.28023 0.58519 Eigenvalues --- 0.59061 0.59285 Angle between quadratic step and forces= 3.85 degrees. Linear search not attempted -- first point. TrRot= 0.000604 0.000000 0.001914 0.000000 0.000000 0.000000 Variable Old X -DE/DX Delta X Delta X Delta X New X (Linear) (Quad) (Total) X1 0.00000 0.00000 0.00000 0.00000 0.00060 0.00060 Y1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 Z1 0.00000 0.00000 0.00000 0.00000 0.00191 0.00191 X2 -0.00174 0.00113 0.00000 0.00250 0.00310 0.00136 Y2 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 Z2 -0.00546 0.00357 0.00000 0.00792 0.00984 0.00438 X3 -1.18998 0.02061 0.00000 0.07851 0.07912 -1.11086 Y3 -1.75924 0.02954 0.00000 0.10544 0.10544 -1.65380 Z3 -0.37165 0.00522 0.00000 0.01524 0.01715 -0.35450 X4 -1.18960 0.02061 0.00000 0.07848 0.07909 -1.11051 Y4 1.75932 -0.02954 0.00000 -0.10544 -0.10544 1.65388 Z4 -0.37245 0.00523 0.00000 0.01528 0.01719 -0.35525 X5 1.74131 -0.03072 0.00000 -0.11801 -0.11740 1.62390 Y5 -0.00047 0.00001 0.00000 0.00003 0.00003 -0.00045 Z5 -1.27146 0.01960 0.00000 0.06216 0.06407 -1.20739 X6 0.64867 -0.01163 0.00000 -0.04511 -0.04451 0.60416 Y6 0.00040 -0.00001 0.00000 -0.00002 -0.00002 0.00037 Z6 2.04831 -0.03362 0.00000 -0.11208 -0.11017 1.93814 Item Value Threshold Converged? Maximum Force 0.033622 0.000450 NO RMS Force 0.017090 0.000300 NO Maximum Displacement 0.117404 0.001800 NO RMS Displacement 0.061218 0.001200 NO Predicted change in Energy=-9.396216D-03 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Leave Link 103 at Sat Apr 11 01:28:54 2009, MaxMem= 6291456 cpu: 0.1 (Enter /usr/local/lib/g03/l9999.exe) Test job not archived. 1\1\GINC-TICK20\Freq\RHF\6-31G\C1H4\BANCK\11-Apr-2009\0\\#P Gfinput IO P(6/7=3) HF/6-31G freq\\\0,1\Bq,0.,0.,0.\C,-0.00092,0.,-0.00289\H,-0.6 2971,-0.93095,-0.19667\H,-0.62951,0.93099,-0.19709\H,0.92146,-0.00025, -0.67283\H,0.34326,0.00021,1.08392\\Version=AM64L-G03RevD.01\HF=-40.17 21595\RMSD=6.904e-09\RMSF=1.709e-02\ZeroPoint=0.0437845\Thermal=0.0485 198\Dipole=0.0012686,0.0000025,0.0039117\DipoleDeriv=0.,0.,0.,0.,0.,0. ,0.,0.,0.,0.072472,0.0000031,-0.0014272,0.0000031,0.0736679,0.0000002, -0.0014505,0.0000003,0.0695714,-0.0098922,-0.1182275,-0.0249206,-0.117 8542,-0.1061174,-0.0391058,-0.0235437,-0.0371712,0.0643907,-0.0098408, 0.1181935,-0.0249655,0.1178213,-0.1061312,0.0391879,-0.0235888,0.03725 26,0.0643567,-0.0993176,0.0000465,0.1294203,0.0000454,0.068552,-0.0000 337,0.1254999,-0.0000336,-0.0208285,0.0465787,-0.0000157,-0.078107,-0. 0000156,0.0700287,-0.0000485,-0.076917,-0.0000482,-0.1774903\Polar=13. 5929807,0.0000404,13.4415638,0.024144,0.0000047,13.3638774\PolarDeriv= 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,-1.5468733,0.001 8442,4.9374847,2.596177,-0.002019,-3.482482,0.0018516,4.9619407,-0.000 4916,-0.0020502,1.440902,-0.0013513,2.7752346,-0.0020618,1.5707174,-3. 607515,-0.0013383,-4.6400175,-4.1066286,-3.2691796,-1.9971666,-1.12102 39,-0.1859184,0.2180777,-1.0839084,-3.5003649,-7.1332469,-0.1716823,-1 .0904271,-0.5160063,-0.6761592,-0.1751278,-0.6134266,-1.2722127,-2.750 6102,-0.5222104,-4.1049728,3.2683309,-1.9968848,-1.1224219,0.1869207,0 .2180194,1.0829852,-3.4995975,7.1338223,0.1726895,-1.0922447,0.5167208 ,-0.6765798,0.1761447,-0.6142438,-1.2717597,2.7513865,-0.524913,7.2834 594,-0.0013558,-0.3118188,-3.3029524,0.0005621,1.6686637,-0.0007683,1. 8403668,-0.001497,0.0005816,-2.1924034,-0.0000807,-1.7001955,0.0005772 ,-0.6165569,3.9068893,-0.0006734,-3.9698115,2.4750152,0.0003603,-0.631 6145,2.9502212,0.0004547,1.3777212,-0.0001601,0.1976549,0.0014133,0.00 04614,2.9341733,0.0007175,0.2776999,0.0004677,0.2735099,2.2445981,0.00 12354,9.6569524\HyperPolar=10.3224275,-0.0129878,-35.0866316,0.003471, -19.3015708,0.0144259,-11.0673393,24.9876444,0.0094677,31.051628\PG=C0 1 [X(C1H4)]\NImag=1\\0.,0.,0.,0.,0.,0.,0.,0.,0.,0.49665588,0.,0.,0.,-0 .00000583,0.49464372,0.,0.,0.,-0.00090079,-0.00000268,0.48916823,0.,0. ,0.,-0.11844813,-0.07825137,-0.01627710,0.12697441,0.,0.,0.,-0.0782264 2,-0.18163631,-0.02448659,0.09272259,0.20233747,0.,0.,0.,-0.01617029,- 0.02433804,-0.07039253,0.01976485,0.02926839,0.07040025,0.,0.,0.,-0.11 841762,0.07823565,-0.01630835,0.01148970,-0.01606132,0.00381991,0.1269 3781,0.,0.,0.,0.07821096,-0.18165371,0.02454200,0.01605573,-0.02223574 ,0.00522742,-0.09270263,0.20235642,0.,0.,0.,-0.01620155,0.02439335,-0. 07041416,0.00381152,-0.00521783,0.00083717,0.01980169,-0.02933383,0.07 042639,0.,0.,0.,-0.17888025,0.00003106,0.08319364,-0.01426223,0.000934 56,0.01092285,-0.01425773,-0.00092650,0.01091962,0.19821850,0.,0.,0.,0 .00003084,-0.06589397,-0.00002230,-0.02243484,0.00093558,0.01787496,0. 02243543,0.00092289,-0.01787598,-0.00003668,0.06426034,0.,0.,0.,0.0829 1498,-0.00002239,-0.12566202,-0.00594493,0.00031870,0.00407637,-0.0059 5520,-0.00031600,0.00408464,-0.09862897,0.00002705,0.13721606,0.,0.,0. ,-0.08090987,-0.00000950,-0.04970740,-0.00575375,0.00063058,-0.0183373 1,-0.00575216,-0.00063756,-0.01833128,0.00918171,0.00000525,0.02761412 ,0.08323407,0.,0.,0.,-0.00000955,-0.06545973,-0.00003043,-0.00809211,0 .00059900,-0.02803272,0.00809287,0.00061013,0.02803429,-0.00000244,-0. 00022485,-0.00000736,0.00001124,0.06447544,0.,0.,0.,-0.04964235,-0.000 03024,-0.22269953,-0.00135434,0.00011733,-0.00492127,-0.00135805,-0.00 011959,-0.00493405,-0.00640714,-0.00000372,-0.01971506,0.05876187,0.00 003622,0.25226991\\0.,0.,0.,-0.00112839,0.00000166,-0.00357178,-0.0206 1382,-0.02954318,-0.00521820,-0.02060585,0.02954269,-0.00523085,0.0307 1519,-0.00000771,-0.01960101,0.01163288,0.00000655,0.03362184\\\@ ACCORDING TO HEN3RY, LIFE IS MUCH LIKE A SEWER........ YOU GET OUT OF IT JUST WHAT YOU PUT INTO IT........... TOM LEHRER - (THE 3 IS SILENT) Job cpu time: 0 days 0 hours 0 minutes 3.3 seconds. File lengths (MBytes): RWF= 13 Int= 0 D2E= 0 Chk= 4 Scr= 1 Normal termination of Gaussian 03 at Sat Apr 11 01:28:54 2009. avogadro-1.1.1/testfiles/fail1.drawlog.ignore0000644000175000001440000000726212250371054020374 0ustar marcususers"Avogadro version: 0.9.7 Git: 1e37271 LibAvogadro version: 0.9.7 Git: 1e37271" Locale: "en_US" Libavogadro translations not found. "System has OpenGL support." "About to test OpenGL capabilities." "OpenGL capabilities found: " "Double Buffering." "Direct Rendering." "Antialiasing." Searching for plugins in "/usr/local/bin/../lib/avogadro/colors" Searching for plugins in "/usr/local/bin/../lib/avogadro/engines" Searching for plugins in "/usr/local/bin/../lib/avogadro/extensions" Searching for plugins in "/usr/local/bin/../lib/avogadro/tools" Searching for plugins in "/usr/local/bin/../lib/avogadro/contrib" QStackedLayout::setCurrentWidget: Widget 0x1895e40 not contained in stack GLWidget initialisation... GLWidget initialised... createObjects() setOBMol called. Molecule::addAtom( 0 ) Molecule::addAtom( 1 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 0 , end = 1 , order = 1 , adjBegin = 6 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 0 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 0 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 2 ) Molecule::addAtom( 3 ) Molecule::addAtom( 4 ) AdjustHydrogensPreCommand(atomId = 1 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 5 ) Molecule::addAtom( 6 ) Molecule::addAtom( 7 ) Molecule::addAtom( 8 ) Molecule::addAtom( 9 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 8 , end = 1 , order = 1 , adjBegin = 6 , adjEnd = 15 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 8 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 10 ) Molecule::addAtom( 11 ) Molecule::addAtom( 12 ) AdjustHydrogensPreCommand(atomId = 1 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 13 ) Molecule::addAtom( 14 ) Molecule::addAtom( 15 ) Molecule::addAtom( 16 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 15 , end = 8 , order = 1 , adjBegin = 6 , adjEnd = 15 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 15 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 17 ) Molecule::addAtom( 18 ) Molecule::addAtom( 19 ) AdjustHydrogensPreCommand(atomId = 8 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 20 ) Molecule::addAtom( 21 ) Molecule::addAtom( 22 ) Molecule::addAtom( 23 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 22 , end = 15 , order = 1 , adjBegin = 6 , adjEnd = 15 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 22 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 22 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 24 ) Molecule::addAtom( 25 ) Molecule::addAtom( 26 ) AdjustHydrogensPreCommand(atomId = 15 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 27 ) Molecule::addAtom( 28 ) avogadro-1.1.1/testfiles/cdspectrum0000644000175000001440000000203612250371054016623 0ustar marcususers# Electronic CD-spectrum of TmoleXProject, IRREP a # excitation energy / nm rotatory strength (length rep.) / 10^(-40)erg*cm^3 0.51771458833972E+04 0.24551680696311E+02 0.38217791169285E+04 -.59641571239319E+01 0.36352611539307E+04 -.28163674999368E+01 0.27601363420300E+04 0.23367854176676E+01 0.25749411835411E+04 -.36117011351285E-01 0.18742341501653E+04 0.93506721845688E-01 0.17288777464454E+04 -.49751937363249E+01 0.10004939028461E+04 0.68955547911471E-01 0.97982560979027E+03 0.18270121581766E+00 0.82601931456821E+03 -.15612470270879E+00 0.75466351334867E+03 -.84150733104407E+01 0.73522041777523E+03 0.32429244449821E+01 0.72928111958920E+03 0.19845680807045E+01 0.69168023154282E+03 -.15786388313583E+02 0.63785521958334E+03 -.12275945563630E+01 0.63388710812928E+03 -.28544029029107E-02 0.63017899670516E+03 -.12941557747152E+02 0.62211244765369E+03 -.52894697494757E-02 0.61573574562386E+03 -.41700461047601E-03 0.60851880441555E+03 -.44953785538491E-03 avogadro-1.1.1/testfiles/VASP-5.2-POSCAR.vasp0000644000175000001440000001563712250371054017475 0ustar marcususersExample of a VASP 5.2 style POSCAR file. 1.000 9.789999999999999 0.000000000000000 0.000000000000000 0.000000000000000 3.609000000000000 0.000000000000000 -0.550666716486505 0.000000000000001 21.575974025924157 H C O 32 28 24 Cartesian 8.2876719792251254404 3.1470516090000004716 8.9971811688103731086 1.2269946625316199285 1.3425516090000002567 1.7908058441517051840 0.9516613042883674822 0.4619483910000007909 12.5787928571137825884 8.0123386209818736603 2.2664483910000012834 19.7851681817724518453 8.7106006442975587589 0.5124816090000005042 9.6876123376399476683 0.8040659974591882753 2.3169816089999999420 1.1003746753221319565 0.5287326392159358290 3.0965183910000009249 11.8883616882842115814 8.4352672860543052025 1.2920183910000013761 20.4755993506020246286 3.2927107772672070674 1.0754820000000007152 9.8451169480291920166 6.2219558644895389676 2.8799820000000000420 0.9428700649328857208 5.9466225062462871875 2.5335180000000008249 11.7308570778949636804 3.0173774190239548432 0.7290180000000013871 20.6331039609912743060 9.3494566507243170861 2.3422410000000004615 6.9043116882957304981 0.1652099910324290877 0.5377410000000002466 3.8836753246663482386 -0.1101233672108234973 1.2667590000000008565 14.6716623376284278635 9.0741232924810635296 3.0712590000000012935 17.6922987012578083466 0.9816413087721529429 0.9383400000000007291 10.6369551947806098013 8.5330253329845948684 2.7428400000000001668 0.1510318181814691019 8.2576919747413413120 2.6706600000000007000 10.9390188311435476720 0.7063079505289003857 0.8661600000000012622 21.4249422077426885380 2.0250659892389144545 2.6273520000000005759 4.6604103895996180640 7.4896006525178320246 0.8228520000000003609 6.1275766233624597845 7.2142672942745793563 0.9816480000000011863 16.9155636363245385212 1.7497326309956622303 2.7861480000000007351 15.4483974025616959125 3.9494753195332372719 1.9777320000000004896 5.9765448051809917374 5.5651913222235087630 0.1732320000000003024 4.8114422077810869993 5.2898579639802560948 1.6312680000000008285 15.5994292207431648478 3.6741419612899846037 3.4357680000000008214 16.7645318181430695859 6.5177626451943151409 0.6496200000000005303 9.2992448051733109793 2.9969039965624308941 2.4541200000000000792 1.4887422077887670913 2.7215706383191786699 2.9593800000000007877 12.2767292207508447177 6.2424292869510624726 1.1548800000000014609 20.0872318181353932687 3.8319635151017625851 1.4760810000000004205 7.8957276947869452499 5.6827031266549834498 3.2805810000000001914 2.8922593181751334868 5.4073697684117307816 2.1329190000000006755 13.6802463311372122234 3.5566301568585099169 0.3284190000000011822 18.6837147077490257630 2.9653886326072838031 1.3183713090000006574 8.9760367142649677419 6.5492780091494626760 3.1228713089999997621 1.8119502986971107727 6.2739446509062100077 2.2906286910000011048 12.5999373116591915078 2.6900552743640311348 0.4861286910000012784 19.7640237272270447022 1.1455211025595690710 1.9517508090000004195 7.5531012272552695563 8.3691455391971771860 0.1472508090000001768 3.2348857857068091803 8.0938121809539254059 1.6572491910000008986 14.0228727986688870288 0.8701877443163166248 3.4617491910000013355 18.3410882402173491812 1.6200778597019032112 1.5612497910000004975 8.7906990973822800584 7.8945887820548437119 3.3657497909999998242 1.9972879155797993445 7.6192554238115910437 2.0477502090000010426 12.7852749285418791914 1.3447445014586505430 0.2432502090000012163 19.5786861103443570187 2.0110564117152347485 2.0867201910000003906 6.4751655649200987597 7.5036102300415112865 0.2822201910000002867 4.3128214480419799770 7.2282768717982586182 1.5222798090000007054 15.1008084610040587137 1.7357230534719820803 3.3267798090000009203 17.2631525778821774963 3.3566645446475185111 1.8517815090000004918 6.6488521558287878577 6.1580020971092288562 0.0472815090000002561 4.1391348571332908790 5.8826687388659761879 1.7572184910000010483 14.9271218700953696157 3.0813311864042662869 3.5617184910000005971 17.4368391687908683707 5.2974954580788846670 1.2252518910000003149 8.0499959090723027799 4.2171711836778618121 3.0297518910000000858 2.7379911038897759568 3.9418378254346091438 2.3837481090000007811 13.5259781168518546934 5.0221620998356319987 0.5792481090000012323 18.8379829220343815166 1.4266522277996198653 2.4205599090000005091 5.2837402792085672587 8.0880144139571257256 0.6160599090000002942 5.5042467337535114780 7.8126810557138739455 1.1884400910000010310 16.2922337467155884383 1.1513188695563671970 2.9929400910000008018 16.0717272921706459954 5.6181686453811394699 0.7387586910000005780 9.2183349025760961126 3.8964979963756065651 2.5432586909999996827 1.5696521103859824020 3.6211646381323543409 2.8702413090000011842 12.3576391233480613607 5.3428352871378876898 1.0657413090000011913 20.0063219155381766257 6.1032495434518416744 1.4472090000000004117 7.1666755324509683334 3.4114170983049043606 3.2517090000000004046 3.6213114805111104033 3.1360837400616521364 2.1617910000000009063 14.4092984934731891400 5.8279161852085898943 0.3572910000000011355 17.9546625454130470700 8.1362431381908670858 3.5667710910000005597 9.4450983895885585184 1.3784235035658800594 1.7622710909999999007 1.3428886233735195521 1.1030901453226276132 0.0422289090000007583 12.1308756363355971786 7.8609097799476144175 1.8467289090000011953 20.2330854025506390315 0.7080528440135860357 1.4461299090000006018 9.8105953895877142656 8.8066137977431591111 3.2506299089999997065 0.9773916233743643600 8.5312804394999073310 2.1628700910000011604 11.7653786363364432077 0.4327194857703334785 0.3583700910000012785 20.5985824025497912260 9.5934973828420471165 2.2061817000000001343 7.4307654545282790792 -0.0788307410853001655 0.4016817000000001969 3.3572215584337987693 -0.3541640993285526395 1.4028183000000007397 14.1452085713958766178 9.3181640245987953364 3.2073183000000016207 18.2187524674903578159 avogadro-1.1.1/testfiles/sampleIRSpectra.tsv0000755000175000001440000022046512250371054020336 0ustar marcususers3998.27344 0.99535 3997.30908 0.99406 3996.34471 0.99045 3995.38034 0.98727 3994.41597 0.98851 3993.45160 0.99174 3992.48723 0.99167 3991.52286 0.98862 3990.55849 0.98772 3989.59412 0.99100 3988.62976 0.99505 3987.66539 0.99703 3986.70102 0.99687 3985.73665 0.99605 3984.77228 0.99616 3983.80791 0.99617 3982.84354 0.99530 3981.87917 0.99546 3980.91480 0.99717 3979.95044 0.99899 3978.98607 1.00000 3978.02170 0.99871 3977.05733 0.99426 3976.09296 0.98985 3975.12859 0.98876 3974.16422 0.98886 3973.19985 0.98834 3972.23548 0.99054 3971.27112 0.99481 3970.30675 0.99526 3969.34238 0.99392 3968.37801 0.99706 3967.41364 1.00197 3966.44927 1.00352 3965.48490 1.00242 3964.52053 1.00027 3963.55616 0.99428 3962.59180 0.98567 3961.62743 0.98494 3960.66306 0.99278 3959.69869 0.99817 3958.73432 0.99758 3957.76995 0.99511 3956.80558 0.99555 3955.84121 0.99906 3954.87684 1.00000 3953.91248 0.99622 3952.94811 0.99374 3951.98374 0.98852 3951.01937 0.97179 3950.05500 0.95640 3949.09063 0.95240 3948.12626 0.95415 3947.16189 0.96651 3946.19752 0.98447 3945.23316 0.98523 3944.26879 0.95904 3943.30442 0.92935 3942.34005 0.93555 3941.37568 0.97047 3940.41131 0.99264 3939.44694 0.99516 3938.48257 0.99510 3937.51820 0.99864 3936.55384 1.00000 3935.58947 0.99351 3934.62510 0.97449 3933.66073 0.93848 3932.69636 0.90943 3931.73199 0.91709 3930.76762 0.94159 3929.80325 0.95715 3928.83888 0.97249 3927.87452 0.98642 3926.91015 0.97664 3925.94578 0.94122 3924.98141 0.91783 3924.01704 0.93374 3923.05267 0.96541 3922.08830 0.97215 3921.12393 0.94437 3920.15956 0.92404 3919.19520 0.92599 3918.23083 0.90677 3917.26646 0.88492 3916.30209 0.91374 3915.33772 0.96599 3914.37335 0.99419 3913.40898 1.00057 3912.44461 1.00118 3911.48024 1.00102 3910.51588 1.00071 3909.55151 1.00000 3908.58714 0.99486 3907.62277 0.97067 3906.65840 0.91875 3905.69403 0.84465 3904.72966 0.78552 3903.76529 0.77405 3902.80092 0.77840 3901.83656 0.78873 3900.87219 0.80595 3899.90782 0.80183 3898.94345 0.82713 3897.97908 0.90852 3897.01471 0.97444 3896.05034 0.99288 3895.08597 0.98422 3894.12160 0.96415 3893.15724 0.91349 3892.19287 0.83572 3891.22850 0.82066 3890.26413 0.89879 3889.29976 0.97496 3888.33539 0.97938 3887.37102 0.89946 3886.40665 0.79314 3885.44228 0.78663 3884.47792 0.87183 3883.51355 0.93278 3882.54918 0.92495 3881.58481 0.85606 3880.62044 0.80478 3879.65607 0.85603 3878.69170 0.95164 3877.72733 1.00000 3876.76296 0.99291 3875.79859 0.93321 3874.83423 0.85692 3873.86986 0.85237 3872.90549 0.90128 3871.94112 0.87963 3870.97675 0.76581 3870.01238 0.70001 3869.04801 0.77787 3868.08364 0.90248 3867.11927 0.93090 3866.15491 0.85170 3865.19054 0.78861 3864.22617 0.82258 3863.26180 0.87003 3862.29743 0.87425 3861.33306 0.90127 3860.36869 0.95885 3859.40432 0.98070 3858.43995 0.94934 3857.47559 0.90799 3856.51122 0.85390 3855.54685 0.70746 3854.58248 0.53286 3853.61811 0.49582 3852.65374 0.58483 3851.68937 0.72036 3850.72500 0.85696 3849.76063 0.94007 3848.79627 0.97673 3847.83190 0.99639 3846.86753 1.00000 3845.90316 0.97621 3844.93879 0.91730 3843.97442 0.87189 3843.01005 0.87465 3842.04568 0.86244 3841.08131 0.81843 3840.11695 0.78758 3839.15258 0.73466 3838.18821 0.68624 3837.22384 0.73459 3836.25947 0.80359 3835.29510 0.82302 3834.33073 0.86150 3833.36636 0.89106 3832.40199 0.85998 3831.43763 0.85879 3830.47326 0.92416 3829.50889 0.97104 3828.54452 0.95388 3827.58015 0.90829 3826.61578 0.89667 3825.65141 0.92914 3824.68704 0.95120 3823.72267 0.91135 3822.75831 0.79300 3821.79394 0.67146 3820.82957 0.67513 3819.86520 0.79440 3818.90083 0.89225 3817.93646 0.86724 3816.97209 0.75116 3816.00772 0.71193 3815.04335 0.81978 3814.07899 0.94201 3813.11462 0.99066 3812.15025 0.99987 3811.18588 1.00000 3810.22151 0.99339 3809.25714 0.95196 3808.29277 0.84527 3807.32840 0.75627 3806.36403 0.79858 3805.39967 0.90247 3804.43530 0.92812 3803.47093 0.84818 3802.50656 0.71744 3801.54219 0.66173 3800.57782 0.75467 3799.61345 0.88429 3798.64908 0.92319 3797.68471 0.88095 3796.72035 0.85053 3795.75598 0.89224 3794.79161 0.96080 3793.82724 0.99518 3792.86287 1.00264 3791.89850 1.00439 3790.93413 1.00390 3789.96976 1.00203 3789.00539 1.00026 3788.04103 0.99692 3787.07666 0.98496 3786.11229 0.96048 3785.14792 0.94138 3784.18355 0.95167 3783.21918 0.97697 3782.25481 0.98293 3781.29044 0.94661 3780.32607 0.88304 3779.36171 0.86572 3778.39734 0.91779 3777.43297 0.97271 3776.46860 0.99506 3775.50423 1.00000 3774.53986 1.00000 3773.57549 0.99708 3772.61112 0.98056 3771.64675 0.92325 3770.68239 0.84069 3769.71802 0.82534 3768.75365 0.89513 3767.78928 0.93947 3766.82491 0.90576 3765.86054 0.87627 3764.89617 0.91293 3763.93180 0.96581 3762.96743 0.98539 3762.00307 0.96620 3761.03870 0.89976 3760.07433 0.83650 3759.10996 0.84943 3758.14559 0.88936 3757.18122 0.89256 3756.21685 0.90271 3755.25248 0.92591 3754.28811 0.87630 3753.32375 0.73423 3752.35938 0.63404 3751.39501 0.63952 3750.43064 0.63284 3749.46627 0.62731 3748.50190 0.72415 3747.53753 0.82692 3746.57316 0.78298 3745.60879 0.60548 3744.64443 0.50895 3743.68006 0.63489 3742.71569 0.81237 3741.75132 0.87931 3740.78695 0.89210 3739.82258 0.89516 3738.85821 0.85688 3737.89384 0.77675 3736.92947 0.68895 3735.96510 0.63554 3735.00074 0.65588 3734.03637 0.71447 3733.07200 0.72658 3732.10763 0.73490 3731.14326 0.81698 3730.17889 0.90758 3729.21452 0.93534 3728.25015 0.90307 3727.28578 0.84672 3726.32142 0.82542 3725.35705 0.85281 3724.39268 0.87858 3723.42831 0.86168 3722.46394 0.84533 3721.49957 0.88412 3720.53520 0.92734 3719.57083 0.93207 3718.60646 0.94494 3717.64210 0.98130 3716.67773 0.99936 3715.71336 0.98781 3714.74899 0.95546 3713.78462 0.86926 3712.82025 0.75149 3711.85588 0.72045 3710.89151 0.76755 3709.92714 0.79706 3708.96278 0.84398 3707.99841 0.92649 3707.03404 0.97627 3706.06967 0.98597 3705.10530 0.98790 3704.14093 0.97469 3703.17656 0.91842 3702.21219 0.86172 3701.24782 0.88197 3700.28346 0.95125 3699.31909 0.99329 3698.35472 1.00000 3697.39035 0.99393 3696.42598 0.98991 3695.46161 0.99144 3694.49724 0.98909 3693.53287 0.96228 3692.56850 0.88674 3691.60414 0.80623 3690.63977 0.77674 3689.67540 0.73807 3688.71103 0.69987 3687.74666 0.77515 3686.78229 0.91128 3685.81792 0.98298 3684.85355 0.99739 3683.88918 1.00358 3682.92482 1.00884 3681.96045 1.00026 3680.99608 0.96295 3680.03171 0.91689 3679.06734 0.90029 3678.10297 0.87068 3677.13860 0.74975 3676.17423 0.60483 3675.20986 0.59903 3674.24550 0.74537 3673.28113 0.87619 3672.31676 0.85335 3671.35239 0.73746 3670.38802 0.68625 3669.42365 0.73350 3668.45928 0.82573 3667.49491 0.92321 3666.53054 0.98209 3665.56618 0.99795 3664.60181 1.00043 3663.63744 1.00000 3662.67307 0.99972 3661.70870 0.99661 3660.74433 0.99106 3659.77996 0.98727 3658.81559 0.97118 3657.85122 0.90234 3656.88686 0.81311 3655.92249 0.81631 3654.95812 0.90342 3653.99375 0.95587 3653.02938 0.91482 3652.06501 0.79816 3651.10064 0.67690 3650.13627 0.61953 3649.17190 0.62726 3648.20754 0.65953 3647.24317 0.71524 3646.27880 0.81659 3645.31443 0.91649 3644.35006 0.95847 3643.38569 0.95677 3642.42132 0.95054 3641.45695 0.95758 3640.49258 0.96581 3639.52822 0.96017 3638.56385 0.94873 3637.59948 0.94865 3636.63511 0.95429 3635.67074 0.93640 3634.70637 0.89399 3633.74200 0.87487 3632.77763 0.89350 3631.81326 0.87841 3630.84890 0.76858 3629.88453 0.62385 3628.92016 0.58381 3627.95579 0.68402 3626.99142 0.81036 3626.02705 0.88108 3625.06268 0.91162 3624.09831 0.92336 3623.13394 0.91779 3622.16958 0.88923 3621.20521 0.82669 3620.24084 0.75737 3619.27647 0.73521 3618.31210 0.76503 3617.34773 0.81895 3616.38336 0.85856 3615.41899 0.85485 3614.45462 0.82592 3613.49026 0.79623 3612.52589 0.80028 3611.56152 0.83881 3610.59715 0.82949 3609.63278 0.77664 3608.66841 0.76745 3607.70404 0.79653 3606.73967 0.83519 3605.77530 0.88217 3604.81094 0.90967 3603.84657 0.90762 3602.88220 0.89135 3601.91783 0.86904 3600.95346 0.85501 3599.98909 0.85743 3599.02472 0.86375 3598.06035 0.86634 3597.09598 0.85581 3596.13161 0.83094 3595.16725 0.82127 3594.20288 0.83208 3593.23851 0.84922 3592.27414 0.87413 3591.30977 0.88699 3590.34540 0.85250 3589.38103 0.78186 3588.41666 0.73048 3587.45229 0.72292 3586.48793 0.75898 3585.52356 0.82561 3584.55919 0.87374 3583.59482 0.88827 3582.63045 0.89476 3581.66608 0.89639 3580.70171 0.88959 3579.73734 0.88667 3578.77297 0.89033 3577.80861 0.89001 3576.84424 0.88853 3575.87987 0.88927 3574.91550 0.88854 3573.95113 0.88986 3572.98676 0.89373 3572.02239 0.89263 3571.05802 0.88237 3570.09365 0.85101 3569.12929 0.78687 3568.16492 0.72422 3567.20055 0.70625 3566.23618 0.73631 3565.27181 0.79204 3564.30744 0.83541 3563.34307 0.85435 3562.37870 0.86386 3561.41433 0.86488 3560.44997 0.86274 3559.48560 0.87023 3558.52123 0.88057 3557.55686 0.88350 3556.59249 0.88436 3555.62812 0.88303 3554.66375 0.87223 3553.69938 0.85258 3552.73501 0.83662 3551.77065 0.84182 3550.80628 0.86139 3549.84191 0.87051 3548.87754 0.85748 3547.91317 0.83108 3546.94880 0.81198 3545.98443 0.80917 3545.02006 0.81880 3544.05569 0.83693 3543.09133 0.85605 3542.12696 0.86920 3541.16259 0.87520 3540.19822 0.87602 3539.23385 0.87450 3538.26948 0.86833 3537.30511 0.85657 3536.34074 0.85187 3535.37637 0.86086 3534.41201 0.87085 3533.44764 0.87239 3532.48327 0.86715 3531.51890 0.85869 3530.55453 0.84854 3529.59016 0.83698 3528.62579 0.82807 3527.66142 0.82616 3526.69705 0.83002 3525.73269 0.83406 3524.76832 0.83158 3523.80395 0.82553 3522.83958 0.82948 3521.87521 0.84521 3520.91084 0.85733 3519.94647 0.85836 3518.98210 0.85611 3518.01773 0.85687 3517.05337 0.85945 3516.08900 0.86123 3515.12463 0.86140 3514.16026 0.86011 3513.19589 0.85730 3512.23152 0.85267 3511.26715 0.84352 3510.30278 0.83097 3509.33841 0.82837 3508.37405 0.84073 3507.40968 0.85222 3506.44531 0.85167 3505.48094 0.84132 3504.51657 0.82602 3503.55220 0.81578 3502.58783 0.82030 3501.62346 0.83449 3500.65909 0.84587 3499.69473 0.85092 3498.73036 0.85118 3497.76599 0.84686 3496.80162 0.84197 3495.83725 0.84224 3494.87288 0.84711 3493.90851 0.85170 3492.94414 0.85301 3491.97977 0.85177 3491.01541 0.85080 3490.05104 0.84890 3489.08667 0.84320 3488.12230 0.83906 3487.15793 0.84172 3486.19356 0.84627 3485.22919 0.84815 3484.26482 0.84551 3483.30045 0.83663 3482.33609 0.82872 3481.37172 0.83009 3480.40735 0.83805 3479.44298 0.84603 3478.47861 0.85056 3477.51424 0.85133 3476.54987 0.84886 3475.58550 0.84518 3474.62113 0.84481 3473.65677 0.84794 3472.69240 0.85033 3471.72803 0.85063 3470.76366 0.85056 3469.79929 0.85113 3468.83492 0.85050 3467.87055 0.84757 3466.90618 0.84627 3465.94181 0.84871 3464.97745 0.85052 3464.01308 0.84783 3463.04871 0.84334 3462.08434 0.84253 3461.11997 0.84597 3460.15560 0.84976 3459.19123 0.85163 3458.22686 0.85228 3457.26249 0.85245 3456.29813 0.85257 3455.33376 0.85343 3454.36939 0.85471 3453.40502 0.85549 3452.44065 0.85559 3451.47628 0.85531 3450.51191 0.85464 3449.54754 0.85077 3448.58317 0.83902 3447.61880 0.82685 3446.65444 0.82951 3445.69007 0.84279 3444.72570 0.85081 3443.76133 0.84978 3442.79696 0.84698 3441.83259 0.84949 3440.86822 0.85498 3439.90385 0.85814 3438.93948 0.85920 3437.97512 0.86016 3437.01075 0.86164 3436.04638 0.86303 3435.08201 0.86374 3434.11764 0.86363 3433.15327 0.86296 3432.18890 0.86224 3431.22453 0.86255 3430.26016 0.86443 3429.29580 0.86630 3428.33143 0.86687 3427.36706 0.86694 3426.40269 0.86756 3425.43832 0.86796 3424.47395 0.86694 3423.50958 0.86450 3422.54521 0.86104 3421.58084 0.85728 3420.61648 0.85681 3419.65211 0.86244 3418.68774 0.86986 3417.72337 0.87440 3416.75900 0.87640 3415.79463 0.87705 3414.83026 0.87720 3413.86589 0.87754 3412.90152 0.87828 3411.93716 0.87911 3410.97279 0.88005 3410.00842 0.88139 3409.04405 0.88275 3408.07968 0.88390 3407.11531 0.88530 3406.15094 0.88662 3405.18657 0.88648 3404.22220 0.88568 3403.25784 0.88631 3402.29347 0.88819 3401.32910 0.89023 3400.36473 0.89207 3399.40036 0.89294 3398.43599 0.89157 3397.47162 0.89026 3396.50725 0.89258 3395.54288 0.89637 3394.57852 0.89659 3393.61415 0.89336 3392.64978 0.89335 3391.68541 0.89903 3390.72104 0.90454 3389.75667 0.90681 3388.79230 0.90803 3387.82793 0.90884 3386.86356 0.90850 3385.89920 0.90775 3384.93483 0.90815 3383.97046 0.91011 3383.00609 0.91290 3382.04172 0.91567 3381.07735 0.91812 3380.11298 0.92035 3379.14861 0.92213 3378.18424 0.92358 3377.21988 0.92516 3376.25551 0.92638 3375.29114 0.92715 3374.32677 0.92833 3373.36240 0.92995 3372.39803 0.93177 3371.43366 0.93374 3370.46929 0.93516 3369.50492 0.93536 3368.54056 0.93514 3367.57619 0.93519 3366.61182 0.93488 3365.64745 0.93527 3364.68308 0.93827 3363.71871 0.94198 3362.75434 0.94362 3361.78997 0.94470 3360.82560 0.94706 3359.86124 0.94960 3358.89687 0.95127 3357.93250 0.95178 3356.96813 0.95185 3356.00376 0.95323 3355.03939 0.95600 3354.07502 0.95876 3353.11065 0.96129 3352.14628 0.96401 3351.18192 0.96630 3350.21755 0.96759 3349.25318 0.96841 3348.28881 0.96957 3347.32444 0.97142 3346.36007 0.97357 3345.39570 0.97553 3344.43133 0.97742 3343.46696 0.97899 3342.50260 0.97973 3341.53823 0.98037 3340.57386 0.98204 3339.60949 0.98427 3338.64512 0.98490 3337.68075 0.98325 3336.71638 0.98261 3335.75201 0.98479 3334.78764 0.98788 3333.82328 0.99108 3332.85891 0.99403 3331.89454 0.99561 3330.93017 0.99635 3329.96580 0.99760 3329.00143 0.99910 3328.03706 1.00000 3327.07269 0.99966 3326.10832 1.00017 3325.14396 1.00023 3324.17959 1.00001 3323.21522 1.00069 3322.25085 1.00146 3321.28648 1.00121 3320.32211 1.00052 3319.35774 1.00012 3318.39337 1.00007 3317.42900 1.00061 3316.46464 1.00164 3315.50027 1.00192 3314.53590 1.00038 3313.57153 0.99837 3312.60716 0.99795 3311.64279 0.99822 3310.67842 0.99728 3309.71405 0.99579 3308.74968 0.99624 3307.78531 0.99916 3306.82095 1.00192 3305.85658 1.00294 3304.89221 1.00263 3303.92784 1.00161 3302.96347 1.00092 3301.99910 1.00082 3301.03473 1.00052 3300.07036 1.00000 3299.10599 0.99940 3298.14163 0.99854 3297.17726 0.99885 3296.21289 1.00021 3295.24852 1.00088 3294.28415 1.00001 3293.31978 0.99811 3292.35541 0.99688 3291.39104 0.99771 3290.42667 0.99949 3289.46231 1.00013 3288.49794 1.00010 3287.53357 1.00083 3286.56920 1.00168 3285.60483 1.00170 3284.64046 1.00069 3283.67609 0.99953 3282.71172 0.99970 3281.74735 1.00056 3280.78299 1.00037 3279.81862 0.99972 3278.85425 0.99962 3277.88988 0.99861 3276.92551 0.99689 3275.96114 0.99662 3274.99677 0.99621 3274.03240 0.99516 3273.06803 0.99683 3272.10367 1.00000 3271.13930 1.00119 3270.17493 1.00102 3269.21056 1.00109 3268.24619 1.00136 3267.28182 1.00111 3266.31745 1.00009 3265.35308 0.99936 3264.38871 0.99954 3263.42435 0.99991 3262.45998 0.99994 3261.49561 0.99947 3260.53124 0.99885 3259.56687 0.99879 3258.60250 0.99833 3257.63813 0.99718 3256.67376 0.99691 3255.70939 0.99634 3254.74503 0.99477 3253.78066 0.99541 3252.81629 0.99827 3251.85192 0.99989 3250.88755 0.99988 3249.92318 0.99968 3248.95881 0.99977 3247.99444 1.00000 3247.03007 0.99860 3246.06571 0.99452 3245.10134 0.99180 3244.13697 0.99392 3243.17260 0.99779 3242.20823 0.99963 3241.24386 0.99934 3240.27949 0.99854 3239.31512 0.99853 3238.35075 0.99861 3237.38639 0.99786 3236.42202 0.99739 3235.45765 0.99812 3234.49328 0.99895 3233.52891 0.99917 3232.56454 0.99926 3231.60017 0.99865 3230.63580 0.99725 3229.67143 0.99678 3228.70707 0.99717 3227.74270 0.99724 3226.77833 0.99779 3225.81396 0.99915 3224.84959 1.00024 3223.88522 1.00016 3222.92085 0.99876 3221.95648 0.99705 3220.99211 0.99544 3220.02775 0.99449 3219.06338 0.99605 3218.09901 0.99893 3217.13464 1.00039 3216.17027 1.00000 3215.20590 0.99763 3214.24153 0.99562 3213.27716 0.99666 3212.31279 0.99858 3211.34843 0.99789 3210.38406 0.99573 3209.41969 0.99585 3208.45532 0.99834 3207.49095 1.00036 3206.52658 1.00131 3205.56221 1.00171 3204.59784 1.00132 3203.63347 1.00059 3202.66911 1.00033 3201.70474 1.00040 3200.74037 1.00007 3199.77600 0.99849 3198.81163 0.99573 3197.84726 0.99434 3196.88289 0.99568 3195.91852 0.99760 3194.95415 0.99865 3193.98979 0.99918 3193.02542 0.99948 3192.06105 0.99969 3191.09668 0.99982 3190.13231 0.99985 3189.16794 0.99993 3188.20357 1.00000 3187.23920 0.99934 3186.27483 0.99756 3185.31047 0.99643 3184.34610 0.99748 3183.38173 0.99918 3182.41736 0.99973 3181.45299 0.99981 3180.48862 0.99952 3179.52425 0.99706 3178.55988 0.99409 3177.59551 0.99491 3176.63115 0.99838 3175.66678 1.00054 3174.70241 1.00111 3173.73804 1.00136 3172.77367 1.00105 3171.80930 0.99976 3170.84493 0.99847 3169.88056 0.99826 3168.91619 0.99877 3167.95182 0.99922 3166.98746 0.99954 3166.02309 0.99975 3165.05872 0.99971 3164.09435 0.99955 3163.12998 0.99948 3162.16561 0.99963 3161.20124 0.99991 3160.23687 1.00000 3159.27250 0.99987 3158.30814 0.99971 3157.34377 0.99971 3156.37940 0.99988 3155.41503 1.00016 3154.45066 1.00026 3153.48629 0.99983 3152.52192 0.99926 3151.55755 0.99934 3150.59318 0.99994 3149.62882 1.00035 3148.66445 1.00027 3147.70008 0.99982 3146.73571 0.99933 3145.77134 0.99906 3144.80697 0.99892 3143.84260 0.99861 3142.87823 0.99826 3141.91386 0.99836 3140.94950 0.99883 3139.98513 0.99942 3139.02076 0.99980 3138.05639 0.99996 3137.09202 1.00014 3136.12765 1.00000 3135.16328 0.99874 3134.19891 0.99559 3133.23454 0.99326 3132.27018 0.99481 3131.30581 0.99815 3130.34144 1.00001 3129.37707 1.00036 3128.41270 0.99935 3127.44833 0.99722 3126.48396 0.99613 3125.51959 0.99722 3124.55522 0.99766 3123.59086 0.99530 3122.62649 0.99413 3121.66212 0.99722 3120.69775 0.99985 3119.73338 0.99848 3118.76901 0.99681 3117.80464 0.99720 3116.84027 0.99723 3115.87590 0.99685 3114.91154 0.99784 3113.94717 0.99896 3112.98280 0.99925 3112.01843 0.99969 3111.05406 1.00031 3110.08969 1.00076 3109.12532 1.00100 3108.16095 1.00069 3107.19658 1.00030 3106.23222 1.00056 3105.26785 1.00071 3104.30348 1.00000 3103.33911 0.99858 3102.37474 0.99677 3101.41037 0.99537 3100.44600 0.99580 3099.48163 0.99804 3098.51726 0.99992 3097.55290 0.99897 3096.58853 0.99603 3095.62416 0.99517 3094.65979 0.99749 3093.69542 1.00028 3092.73105 1.00216 3091.76668 1.00333 3090.80231 1.00378 3089.83794 1.00355 3088.87358 1.00301 3087.90921 1.00215 3086.94484 1.00118 3085.98047 1.00110 3085.01610 1.00202 3084.05173 1.00233 3083.08736 1.00104 3082.12299 0.99952 3081.15862 0.99860 3080.19426 0.99793 3079.22989 0.99794 3078.26552 0.99861 3077.30115 0.99932 3076.33678 1.00000 3075.37241 1.00087 3074.40804 1.00169 3073.44367 1.00187 3072.47930 1.00132 3071.51494 1.00082 3070.55057 1.00083 3069.58620 1.00083 3068.62183 0.99923 3067.65746 0.99635 3066.69309 0.99490 3065.72872 0.99439 3064.76435 0.99379 3063.79998 0.99510 3062.83562 0.99763 3061.87125 0.99870 3060.90688 0.99838 3059.94251 0.99813 3058.97814 0.99822 3058.01377 0.99703 3057.04940 0.99457 3056.08503 0.99409 3055.12066 0.99647 3054.15630 0.99874 3053.19193 0.99959 3052.22756 1.00004 3051.26319 1.00000 3050.29882 0.99865 3049.33445 0.99660 3048.37008 0.99630 3047.40571 0.99796 3046.44134 0.99963 3045.47698 1.00037 3044.51261 1.00055 3043.54824 1.00066 3042.58387 1.00082 3041.61950 1.00113 3040.65513 1.00161 3039.69076 1.00170 3038.72639 1.00119 3037.76202 1.00046 3036.79766 0.99963 3035.83329 0.99847 3034.86892 0.99737 3033.90455 0.99661 3032.94018 0.99495 3031.97581 0.99292 3031.01144 0.99378 3030.04707 0.99740 3029.08270 0.99999 3028.11833 1.00003 3027.15397 0.99870 3026.18960 0.99783 3025.22523 0.99835 3024.26086 0.99914 3023.29649 0.99921 3022.33212 0.99930 3021.36775 0.99989 3020.40338 1.00000 3019.43901 0.99870 3018.47465 0.99659 3017.51028 0.99520 3016.54591 0.99479 3015.58154 0.99548 3014.61717 0.99669 3013.65280 0.99637 3012.68843 0.99535 3011.72406 0.99580 3010.75969 0.99703 3009.79533 0.99828 3008.83096 0.99951 3007.86659 1.00011 3006.90222 0.99998 3005.93785 0.99908 3004.97348 0.99794 3004.00911 0.99807 3003.04474 0.99949 3002.08037 1.00066 3001.11601 1.00103 3000.15164 1.00078 2999.18727 1.00030 2998.22290 1.00030 2997.25853 1.00068 2996.29416 1.00078 2995.32979 1.00028 2994.36542 0.99975 2993.40105 0.99976 2992.43669 1.00000 2991.47232 1.00032 2990.50795 0.99997 2989.54358 0.99917 2988.57921 0.99887 2987.61484 0.99963 2986.65047 1.00082 2985.68610 1.00139 2984.72173 1.00124 2983.75737 1.00091 2982.79300 1.00068 2981.82863 1.00053 2980.86426 1.00000 2979.89989 0.99915 2978.93552 0.99834 2977.97115 0.99801 2977.00678 0.99789 2976.04241 0.99745 2975.07805 0.99653 2974.11368 0.99533 2973.14931 0.99413 2972.18494 0.99305 2971.22057 0.99162 2970.25620 0.98945 2969.29183 0.98688 2968.32746 0.98490 2967.36309 0.98366 2966.39873 0.98239 2965.43436 0.98131 2964.46999 0.98086 2963.50562 0.98046 2962.54125 0.98001 2961.57688 0.98015 2960.61251 0.98084 2959.64814 0.98157 2958.68377 0.98239 2957.71941 0.98371 2956.75504 0.98554 2955.79067 0.98754 2954.82630 0.98940 2953.86193 0.99118 2952.89756 0.99290 2951.93319 0.99432 2950.96882 0.99563 2950.00445 0.99665 2949.04009 0.99731 2948.07572 0.99831 2947.11135 0.99954 2946.14698 1.00018 2945.18261 1.00009 2944.21824 0.99993 2943.25387 1.00008 2942.28950 1.00000 2941.32513 0.99857 2940.36077 0.99676 2939.39640 0.99473 2938.43203 0.99245 2937.46766 0.99045 2936.50329 0.98898 2935.53892 0.98758 2934.57455 0.98589 2933.61018 0.98417 2932.64581 0.98272 2931.68145 0.98144 2930.71708 0.98029 2929.75271 0.97923 2928.78834 0.97796 2927.82397 0.97657 2926.85960 0.97559 2925.89523 0.97541 2924.93086 0.97590 2923.96649 0.97662 2923.00213 0.97764 2922.03776 0.97904 2921.07339 0.98033 2920.10902 0.98160 2919.14465 0.98338 2918.18028 0.98525 2917.21591 0.98696 2916.25154 0.98898 2915.28717 0.99129 2914.32281 0.99347 2913.35844 0.99501 2912.39407 0.99585 2911.42970 0.99677 2910.46533 0.99815 2909.50096 0.99932 2908.53659 1.00000 2907.57222 1.00025 2906.60785 1.00055 2905.64349 1.00091 2904.67912 1.00152 2903.71475 1.00224 2902.75038 1.00258 2901.78601 1.00257 2900.82164 1.00272 2899.85727 1.00294 2898.89290 1.00300 2897.92853 1.00317 2896.96417 1.00367 2895.99980 1.00428 2895.03543 1.00454 2894.07106 1.00441 2893.10669 1.00424 2892.14232 1.00418 2891.17795 1.00425 2890.21358 1.00447 2889.24921 1.00470 2888.28484 1.00463 2887.32048 1.00423 2886.35611 1.00381 2885.39174 1.00355 2884.42737 1.00336 2883.46300 1.00296 2882.49863 1.00214 2881.53426 1.00105 2880.56989 1.00000 2879.60552 0.99988 2878.64116 0.99991 2877.67679 1.00016 2876.71242 1.00045 2875.74805 1.00057 2874.78368 1.00053 2873.81931 1.00048 2872.85494 1.00055 2871.89057 1.00071 2870.92620 1.00089 2869.96184 1.00106 2868.99747 1.00115 2868.03310 1.00123 2867.06873 1.00143 2866.10436 1.00160 2865.13999 1.00156 2864.17562 1.00137 2863.21125 1.00116 2862.24688 1.00091 2861.28252 1.00056 2860.31815 0.99999 2859.35378 0.99924 2858.38941 0.99867 2857.42504 0.99835 2856.46067 0.99809 2855.49630 0.99791 2854.53193 0.99808 2853.56756 0.99885 2852.60320 1.00000 2851.63883 1.00009 2850.67446 1.00038 2849.71009 1.00098 2848.74572 1.00191 2847.78135 1.00298 2846.81698 1.00379 2845.85261 1.00455 2844.88824 1.00550 2843.92388 1.00616 2842.95951 1.00638 2841.99514 1.00661 2841.03077 1.00688 2840.06640 1.00703 2839.10203 1.00718 2838.13766 1.00720 2837.17329 1.00690 2836.20892 1.00646 2835.24456 1.00618 2834.28019 1.00608 2833.31582 1.00592 2832.35145 1.00531 2831.38708 1.00427 2830.42271 1.00330 2829.45834 1.00255 2828.49397 1.00186 2827.52960 1.00142 2826.56524 1.00118 2825.60087 1.00079 2824.63650 1.00000 2823.67213 0.99971 2822.70776 0.99944 2821.74339 0.99949 2820.77902 0.99960 2819.81465 0.99952 2818.85028 0.99958 2817.88592 0.99988 2816.92155 1.00018 2815.95718 1.00026 2814.99281 1.00011 2814.02844 0.99994 2813.06407 0.99993 2812.09970 1.00014 2811.13533 1.00037 2810.17096 1.00038 2809.20660 1.00010 2808.24223 0.99958 2807.27786 0.99921 2806.31349 0.99930 2805.34912 0.99961 2804.38475 0.99989 2803.42038 1.00008 2802.45601 1.00009 2801.49164 0.99986 2800.52728 0.99961 2799.56291 0.99940 2798.59854 0.99928 2797.63417 0.99950 2796.66980 1.00000 2795.70543 1.00033 2794.74106 1.00021 2793.77669 0.99988 2792.81232 0.99958 2791.84796 0.99943 2790.88359 0.99955 2789.91922 0.99993 2788.95485 1.00025 2787.99048 1.00021 2787.02611 1.00003 2786.06174 1.00007 2785.09737 1.00024 2784.13300 1.00041 2783.16864 1.00055 2782.20427 1.00055 2781.23990 1.00050 2780.27553 1.00038 2779.31116 1.00007 2778.34679 0.99992 2777.38242 1.00012 2776.41805 1.00027 2775.45368 1.00021 2774.48932 1.00015 2773.52495 1.00011 2772.56058 0.99994 2771.59621 0.99981 2770.63184 0.99989 2769.66747 1.00005 2768.70310 1.00000 2767.73873 0.99988 2766.77436 0.99999 2765.81000 1.00022 2764.84563 1.00050 2763.88126 1.00093 2762.91689 1.00110 2761.95252 1.00084 2760.98815 1.00058 2760.02378 1.00057 2759.05941 1.00051 2758.09504 1.00030 2757.13068 1.00028 2756.16631 1.00052 2755.20194 1.00054 2754.23757 1.00019 2753.27320 0.99989 2752.30883 1.00000 2751.34446 1.00045 2750.38009 1.00085 2749.41572 1.00088 2748.45135 1.00067 2747.48699 1.00047 2746.52262 1.00015 2745.55825 0.99979 2744.59388 0.99979 2743.62951 1.00015 2742.66514 1.00041 2741.70077 1.00030 2740.73640 1.00000 2739.77203 0.99984 2738.80767 0.99980 2737.84330 0.99978 2736.87893 0.99974 2735.91456 0.99974 2734.95019 0.99970 2733.98582 0.99965 2733.02145 0.99965 2732.05708 0.99971 2731.09271 0.99992 2730.12835 1.00012 2729.16398 0.99998 2728.19961 0.99980 2727.23524 1.00004 2726.27087 1.00050 2725.30650 1.00056 2724.34213 1.00014 2723.37776 0.99995 2722.41339 1.00037 2721.44903 1.00095 2720.48466 1.00096 2719.52029 1.00055 2718.55592 1.00043 2717.59155 1.00053 2716.62718 1.00047 2715.66281 1.00021 2714.69844 0.99984 2713.73407 0.99977 2712.76971 1.00000 2711.80534 1.00018 2710.84097 1.00018 2709.87660 1.00004 2708.91223 0.99990 2707.94786 1.00010 2706.98349 1.00052 2706.01912 1.00060 2705.05475 1.00042 2704.09039 1.00046 2703.12602 1.00064 2702.16165 1.00067 2701.19728 1.00053 2700.23291 1.00047 2699.26854 1.00061 2698.30417 1.00063 2697.33980 1.00030 2696.37543 1.00006 2695.41107 1.00035 2694.44670 1.00085 2693.48233 1.00101 2692.51796 1.00074 2691.55359 1.00044 2690.58922 1.00014 2689.62485 0.99979 2688.66048 0.99972 2687.69611 0.99994 2686.73175 1.00008 2685.76738 1.00008 2684.80301 1.00000 2683.83864 1.00000 2682.87427 1.00038 2681.90990 1.00076 2680.94553 1.00057 2679.98116 1.00022 2679.01679 1.00024 2678.05243 1.00037 2677.08806 1.00039 2676.12369 1.00046 2675.15932 1.00049 2674.19495 1.00038 2673.23058 1.00023 2672.26621 1.00025 2671.30184 1.00039 2670.33747 1.00038 2669.37311 1.00020 2668.40874 0.99998 2667.44437 0.99969 2666.48000 0.99944 2665.51563 0.99948 2664.55126 0.99987 2663.58689 1.00022 2662.62252 1.00019 2661.65815 1.00008 2660.69379 1.00023 2659.72942 1.00038 2658.76505 1.00037 2657.80068 1.00025 2656.83631 1.00000 2655.87194 0.99982 2654.90757 0.99978 2653.94320 0.99972 2652.97883 0.99983 2652.01447 1.00020 2651.05010 1.00038 2650.08573 1.00018 2649.12136 0.99997 2648.15699 0.99986 2647.19262 0.99993 2646.22825 1.00017 2645.26388 1.00013 2644.29951 0.99988 2643.33515 0.99981 2642.37078 0.99971 2641.40641 0.99952 2640.44204 0.99958 2639.47767 0.99976 2638.51330 0.99973 2637.54893 0.99969 2636.58456 0.99984 2635.62019 1.00006 2634.65583 1.00016 2633.69146 1.00001 2632.72709 0.99981 2631.76272 0.99986 2630.79835 1.00005 2629.83398 1.00009 2628.86961 1.00000 2627.90524 1.00010 2626.94087 1.00017 2625.97651 0.99994 2625.01214 0.99973 2624.04777 0.99967 2623.08340 0.99946 2622.11903 0.99933 2621.15466 0.99940 2620.19029 0.99947 2619.22592 0.99954 2618.26155 0.99958 2617.29719 0.99961 2616.33282 0.99971 2615.36845 0.99991 2614.40408 1.00016 2613.43971 1.00034 2612.47534 1.00026 2611.51097 1.00008 2610.54660 1.00005 2609.58223 1.00003 2608.61786 0.99981 2607.65350 0.99960 2606.68913 0.99977 2605.72476 1.00016 2604.76039 1.00032 2603.79602 1.00021 2602.83165 1.00005 2601.86728 0.99994 2600.90291 1.00000 2599.93854 1.00009 2598.97418 1.00002 2598.00981 0.99996 2597.04544 0.99999 2596.08107 0.99995 2595.11670 0.99985 2594.15233 0.99981 2593.18796 1.00001 2592.22359 1.00036 2591.25922 1.00045 2590.29486 1.00024 2589.33049 1.00010 2588.36612 1.00006 2587.40175 0.99986 2586.43738 0.99965 2585.47301 0.99963 2584.50864 0.99961 2583.54427 0.99957 2582.57990 0.99973 2581.61554 0.99986 2580.65117 0.99986 2579.68680 0.99993 2578.72243 0.99996 2577.75806 0.99985 2576.79369 0.99983 2575.82932 0.99990 2574.86495 0.99990 2573.90058 0.99992 2572.93622 1.00000 2571.97185 0.99993 2571.00748 0.99972 2570.04311 0.99974 2569.07874 0.99990 2568.11437 0.99993 2567.15000 0.99995 2566.18563 0.99994 2565.22126 0.99988 2564.25690 0.99995 2563.29253 0.99995 2562.32816 0.99987 2561.36379 0.99994 2560.39942 1.00014 2559.43505 1.00044 2558.47068 1.00065 2557.50631 1.00049 2556.54194 1.00016 2555.57758 1.00004 2554.61321 1.00000 2553.64884 0.99990 2552.68447 0.99987 2551.72010 0.99984 2550.75573 0.99965 2549.79136 0.99949 2548.82699 0.99955 2547.86262 0.99970 2546.89826 0.99976 2545.93389 0.99984 2544.96952 1.00000 2544.00515 0.99996 2543.04078 0.99965 2542.07641 0.99949 2541.11204 0.99950 2540.14767 0.99958 2539.18330 0.99980 2538.21894 0.99993 2537.25457 0.99984 2536.29020 0.99987 2535.32583 0.99995 2534.36146 0.99990 2533.39709 0.99986 2532.43272 0.99994 2531.46835 1.00010 2530.50398 1.00029 2529.53962 1.00039 2528.57525 1.00038 2527.61088 1.00029 2526.64651 1.00001 2525.68214 0.99969 2524.71777 0.99956 2523.75340 0.99961 2522.78903 0.99975 2521.82466 0.99980 2520.86030 0.99983 2519.89593 0.99997 2518.93156 1.00008 2517.96719 1.00002 2517.00282 1.00000 2516.03845 1.00020 2515.07408 1.00019 2514.10971 0.99953 2513.14534 0.99882 2512.18098 0.99874 2511.21661 0.99918 2510.25224 0.99965 2509.28787 0.99991 2508.32350 1.00007 2507.35913 1.00010 2506.39476 1.00005 2505.43039 1.00006 2504.46602 1.00001 2503.50166 0.99986 2502.53729 0.99982 2501.57292 0.99983 2500.60855 0.99982 2499.64418 0.99978 2498.67981 0.99963 2497.71544 0.99958 2496.75107 0.99968 2495.78670 0.99971 2494.82234 0.99967 2493.85797 0.99963 2492.89360 0.99970 2491.92923 0.99974 2490.96486 0.99966 2490.00049 0.99974 2489.03612 1.00000 2488.07175 1.00009 2487.10738 0.99997 2486.14302 0.99989 2485.17865 0.99980 2484.21428 0.99972 2483.24991 0.99981 2482.28554 0.99989 2481.32117 0.99982 2480.35680 0.99983 2479.39243 1.00000 2478.42806 1.00011 2477.46370 0.99998 2476.49933 0.99981 2475.53496 0.99975 2474.57059 0.99992 2473.60622 1.00021 2472.64185 1.00021 2471.67748 1.00005 2470.71311 1.00004 2469.74874 1.00003 2468.78438 0.99991 2467.82001 0.99979 2466.85564 0.99978 2465.89127 1.00001 2464.92690 1.00029 2463.96253 1.00042 2462.99816 1.00043 2462.03379 1.00028 2461.06942 1.00000 2460.10505 0.99990 2459.14069 1.00019 2458.17632 1.00058 2457.21195 1.00054 2456.24758 1.00004 2455.28321 0.99963 2454.31884 0.99966 2453.35447 0.99985 2452.39010 0.99982 2451.42573 0.99955 2450.46137 0.99938 2449.49700 0.99956 2448.53263 0.99987 2447.56826 1.00003 2446.60389 1.00013 2445.63952 1.00027 2444.67515 1.00038 2443.71078 1.00029 2442.74641 1.00009 2441.78205 0.99990 2440.81768 0.99963 2439.85331 0.99947 2438.88894 0.99960 2437.92457 0.99966 2436.96020 0.99953 2435.99583 0.99965 2435.03146 1.00010 2434.06709 1.00035 2433.10273 1.00000 2432.13836 0.99946 2431.17399 0.99924 2430.20962 0.99942 2429.24525 0.99961 2428.28088 0.99966 2427.31651 0.99973 2426.35214 0.99973 2425.38777 0.99959 2424.42341 0.99957 2423.45904 0.99982 2422.49467 1.00016 2421.53030 1.00039 2420.56593 1.00038 2419.60156 1.00026 2418.63719 1.00025 2417.67282 1.00022 2416.70845 1.00015 2415.74409 1.00032 2414.77972 1.00060 2413.81535 1.00062 2412.85098 1.00048 2411.88661 1.00050 2410.92224 1.00064 2409.95787 1.00059 2408.99350 1.00048 2408.02913 1.00049 2407.06477 1.00045 2406.10040 1.00026 2405.13603 1.00000 2404.17166 0.99988 2403.20729 1.00002 2402.24292 1.00014 2401.27855 0.99987 2400.31418 0.99960 2399.34981 0.99973 2398.38545 0.99985 2397.42108 0.99973 2396.45671 0.99967 2395.49234 0.99991 2394.52797 1.00025 2393.56360 1.00030 2392.59923 1.00000 2391.63486 0.99956 2390.67049 0.99863 2389.70613 0.99696 2388.74176 0.99413 2387.77739 0.98919 2386.81302 0.98134 2385.84865 0.96985 2384.88428 0.95341 2383.91991 0.93074 2382.95554 0.90157 2381.99117 0.86627 2381.02681 0.82564 2380.06244 0.78109 2379.09807 0.73446 2378.13370 0.68757 2377.16933 0.64148 2376.20496 0.59684 2375.24059 0.55438 2374.27622 0.51438 2373.31185 0.47684 2372.34749 0.44184 2371.38312 0.40970 2370.41875 0.38079 2369.45438 0.35516 2368.49001 0.33253 2367.52564 0.31269 2366.56127 0.29533 2365.59690 0.28019 2364.63253 0.26780 2363.66817 0.25867 2362.70380 0.25271 2361.73943 0.24940 2360.77506 0.24795 2359.81069 0.24829 2358.84632 0.25172 2357.88195 0.26004 2356.91758 0.27283 2355.95321 0.28841 2354.98885 0.30895 2354.02448 0.33784 2353.06011 0.37362 2352.09574 0.41613 2351.13137 0.47254 2350.16700 0.54089 2349.20263 0.58494 2348.23826 0.56473 2347.27389 0.49878 2346.30953 0.43617 2345.34516 0.39625 2344.38079 0.37586 2343.41642 0.36709 2342.45205 0.36292 2341.48768 0.36017 2340.52331 0.35894 2339.55894 0.36202 2338.59457 0.36789 2337.63021 0.37091 2336.66584 0.37302 2335.70147 0.38021 2334.73710 0.38703 2333.77273 0.38775 2332.80836 0.38635 2331.84399 0.38652 2330.87962 0.39039 2329.91525 0.39897 2328.95089 0.41174 2327.98652 0.42660 2327.02215 0.44110 2326.05778 0.45289 2325.09341 0.45995 2324.12904 0.46515 2323.16467 0.47378 2322.20030 0.48772 2321.23593 0.50509 2320.27156 0.52548 2319.30720 0.54902 2318.34283 0.57491 2317.37846 0.60041 2316.41409 0.62154 2315.44972 0.63855 2314.48535 0.65129 2313.52098 0.66283 2312.55661 0.67743 2311.59224 0.69416 2310.62788 0.71259 2309.66351 0.73130 2308.69914 0.75004 2307.73477 0.76858 2306.77040 0.78689 2305.80603 0.80577 2304.84166 0.82327 2303.87729 0.83832 2302.91292 0.85067 2301.94856 0.86149 2300.98419 0.87152 2300.01982 0.88180 2299.05545 0.89220 2298.09108 0.90101 2297.12671 0.90940 2296.16234 0.91740 2295.19797 0.92538 2294.23360 0.93275 2293.26924 0.93943 2292.30487 0.94678 2291.34050 0.95384 2290.37613 0.96079 2289.41176 0.96700 2288.44739 0.97313 2287.48302 0.97961 2286.51865 0.98564 2285.55428 0.99164 2284.58992 0.99644 2283.62555 0.99961 2282.66118 1.00000 2281.69681 0.99782 2280.73244 0.99539 2279.76807 0.99293 2278.80370 0.99092 2277.83933 0.98901 2276.87496 0.98740 2275.91060 0.98613 2274.94623 0.98524 2273.98186 0.98466 2273.01749 0.98389 2272.05312 0.98328 2271.08875 0.98297 2270.12438 0.98290 2269.16001 0.98261 2268.19564 0.98257 2267.23128 0.98321 2266.26691 0.98394 2265.30254 0.98442 2264.33817 0.98482 2263.37380 0.98566 2262.40943 0.98654 2261.44506 0.98733 2260.48069 0.98818 2259.51632 0.98911 2258.55196 0.98994 2257.58759 0.99052 2256.62322 0.99123 2255.65885 0.99194 2254.69448 0.99281 2253.73011 0.99380 2252.76574 0.99468 2251.80137 0.99547 2250.83700 0.99602 2249.87264 0.99635 2248.90827 0.99661 2247.94390 0.99714 2246.97953 0.99775 2246.01516 0.99819 2245.05079 0.99865 2244.08642 0.99920 2243.12205 0.99969 2242.15768 0.99999 2241.19332 1.00012 2240.22895 0.99994 2239.26458 0.99978 2238.30021 0.99983 2237.33584 1.00000 2236.37147 1.00033 2235.40710 1.00028 2234.44273 1.00000 2233.47836 0.99996 2232.51400 1.00028 2231.54963 1.00058 2230.58526 1.00084 2229.62089 1.00116 2228.65652 1.00132 2227.69215 1.00138 2226.72778 1.00149 2225.76341 1.00179 2224.79904 1.00192 2223.83468 1.00167 2222.87031 1.00141 2221.90594 1.00135 2220.94157 1.00142 2219.97720 1.00140 2219.01283 1.00136 2218.04846 1.00133 2217.08409 1.00121 2216.11972 1.00102 2215.15536 1.00087 2214.19099 1.00071 2213.22662 1.00052 2212.26225 1.00048 2211.29788 1.00037 2210.33351 1.00011 2209.36914 1.00000 2208.40477 1.00025 2207.44040 1.00048 2206.47604 1.00058 2205.51167 1.00076 2204.54730 1.00083 2203.58293 1.00063 2202.61856 1.00047 2201.65419 1.00043 2200.68982 1.00027 2199.72545 1.00015 2198.76108 1.00019 2197.79672 1.00008 2196.83235 0.99993 2195.86798 1.00009 2194.90361 1.00036 2193.93924 1.00032 2192.97487 1.00019 2192.01050 1.00009 2191.04613 0.99962 2190.08176 0.99926 2189.11740 0.99950 2188.15303 0.99952 2187.18866 0.99913 2186.22429 0.99930 2185.25992 0.99987 2184.29555 0.99982 2183.33118 0.99964 2182.36681 0.99998 2181.40244 1.00000 2180.43807 0.99947 2179.47371 0.99954 2178.50934 1.00023 2177.54497 1.00031 2176.58060 0.99975 2175.61623 0.99970 2174.65186 1.00011 2173.68749 1.00013 2172.72312 1.00002 2171.75875 1.00024 2170.79439 1.00016 2169.83002 0.99967 2168.86565 0.99953 2167.90128 0.99980 2166.93691 0.99989 2165.97254 0.99974 2165.00817 0.99972 2164.04380 0.99977 2163.07943 0.99938 2162.11507 0.99900 2161.15070 0.99939 2160.18633 0.99992 2159.22196 0.99987 2158.25759 0.99975 2157.29322 0.99997 2156.32885 1.00004 2155.36448 0.99982 2154.40011 0.99984 2153.43575 1.00000 2152.47138 0.99981 2151.50701 0.99952 2150.54264 0.99964 2149.57827 1.00010 2148.61390 1.00036 2147.64953 1.00021 2146.68516 0.99988 2145.72079 0.99952 2144.75643 0.99931 2143.79206 0.99945 2142.82769 0.99996 2141.86332 1.00049 2140.89895 1.00051 2139.93458 1.00008 2138.97021 0.99975 2138.00584 0.99956 2137.04147 0.99918 2136.07711 0.99911 2135.11274 0.99973 2134.14837 1.00016 2133.18400 0.99986 2132.21963 0.99947 2131.25526 0.99965 2130.29089 1.00022 2129.32652 1.00039 2128.36215 0.99995 2127.39779 0.99961 2126.43342 0.99984 2125.46905 1.00000 2124.50468 0.99943 2123.54031 0.99903 2122.57594 0.99935 2121.61157 0.99960 2120.64720 0.99943 2119.68283 0.99947 2118.71847 0.99990 2117.75410 0.99998 2116.78973 0.99913 2115.82536 0.99800 2114.86099 0.99803 2113.89662 0.99918 2112.93225 0.99981 2111.96788 0.99960 2111.00351 0.99940 2110.03915 0.99949 2109.07478 0.99960 2108.11041 0.99959 2107.14604 0.99973 2106.18167 1.00012 2105.21730 1.00038 2104.25293 1.00021 2103.28856 1.00016 2102.32419 1.00065 2101.35983 1.00092 2100.39546 1.00032 2099.43109 0.99953 2098.46672 0.99946 2097.50235 1.00000 2096.53798 1.00029 2095.57361 1.00014 2094.60924 1.00013 2093.64487 1.00053 2092.68051 1.00078 2091.71614 0.99955 2090.75177 0.99710 2089.78740 0.99664 2088.82303 0.99852 2087.85866 0.99964 2086.89429 0.99971 2085.92992 1.00007 2084.96555 1.00056 2084.00119 1.00079 2083.03682 1.00082 2082.07245 1.00081 2081.10808 1.00082 2080.14371 1.00068 2079.17934 1.00012 2078.21497 0.99942 2077.25060 0.99926 2076.28623 0.99971 2075.32187 0.99983 2074.35750 0.99960 2073.39313 0.99985 2072.42876 1.00030 2071.46439 1.00034 2070.50002 1.00009 2069.53565 1.00000 2068.57128 1.00023 2067.60691 0.99963 2066.64255 0.99616 2065.67818 0.99110 2064.71381 0.99048 2063.74944 0.99529 2062.78507 0.99943 2061.82070 1.00003 2060.85633 0.99927 2059.89196 0.99924 2058.92759 0.99988 2057.96323 1.00031 2056.99886 1.00050 2056.03449 1.00072 2055.07012 1.00098 2054.10575 1.00108 2053.14138 1.00094 2052.17701 1.00088 2051.21264 1.00099 2050.24827 1.00120 2049.28391 1.00129 2048.31954 1.00103 2047.35517 1.00059 2046.39080 1.00033 2045.42643 1.00000 2044.46206 0.99935 2043.49769 0.99840 2042.53332 0.99552 2041.56895 0.99255 2040.60458 0.99431 2039.64022 0.99847 2038.67585 1.00021 2037.71148 1.00018 2036.74711 1.00040 2035.78274 1.00084 2034.81837 1.00072 2033.85400 1.00027 2032.88963 1.00012 2031.92526 1.00023 2030.96090 1.00022 2029.99653 1.00020 2029.03216 1.00029 2028.06779 0.99998 2027.10342 0.99951 2026.13905 0.99975 2025.17468 1.00032 2024.21031 1.00011 2023.24594 0.99951 2022.28158 0.99951 2021.31721 0.99955 2020.35284 0.99782 2019.38847 0.99341 2018.42410 0.98620 2017.45973 0.97924 2016.49536 0.98102 2015.53099 0.99112 2014.56662 0.99844 2013.60226 1.00000 2012.63789 1.00001 2011.67352 1.00004 2010.70915 0.99986 2009.74478 0.99921 2008.78041 0.99837 2007.81604 0.99800 2006.85167 0.99867 2005.88730 0.99965 2004.92294 0.99998 2003.95857 0.99981 2002.99420 0.99992 2002.02983 1.00027 2001.06546 0.99991 2000.10109 0.99868 1999.13672 0.99786 1998.17235 0.99850 1997.20798 0.99948 1996.24362 0.99975 1995.27925 0.99924 1994.31488 0.99383 1993.35051 0.97617 1992.38614 0.95768 1991.42177 0.96322 1990.45740 0.98347 1989.49303 0.99067 1988.52866 0.98846 1987.56430 0.99178 1986.59993 0.99768 1985.63556 1.00000 1984.67119 1.00031 1983.70682 1.00048 1982.74245 1.00060 1981.77808 1.00063 1980.81371 1.00070 1979.84934 1.00104 1978.88498 1.00124 1977.92061 1.00112 1976.95624 1.00072 1975.99187 1.00046 1975.02750 1.00060 1974.06313 1.00096 1973.09876 1.00130 1972.13439 1.00147 1971.17002 1.00146 1970.20566 1.00040 1969.24129 0.99328 1968.27692 0.97741 1967.31255 0.96723 1966.34818 0.97543 1965.38381 0.99050 1964.41944 0.99897 1963.45507 1.00095 1962.49070 0.99995 1961.52634 0.99838 1960.56197 0.99858 1959.59760 0.99995 1958.63323 1.00036 1957.66886 1.00000 1956.70449 0.99859 1955.74012 0.99626 1954.77575 0.99565 1953.81138 0.99788 1952.84702 0.99998 1951.88265 1.00055 1950.91828 1.00075 1949.95391 1.00061 1948.98954 1.00010 1948.02517 0.99764 1947.06080 0.99162 1946.09643 0.98634 1945.13206 0.98446 1944.16770 0.96851 1943.20333 0.93643 1942.23896 0.93153 1941.27459 0.96419 1940.31022 0.99193 1939.34585 0.99922 1938.38148 1.00010 1937.41711 1.00056 1936.45274 1.00063 1935.48838 1.00022 1934.52401 0.99888 1933.55964 0.99736 1932.59527 0.99727 1931.63090 0.99853 1930.66653 0.99955 1929.70216 1.00000 1928.73779 1.00023 1927.77342 1.00006 1926.80906 0.99978 1925.84469 0.99817 1924.88032 0.98631 1923.91595 0.95969 1922.95158 0.94390 1921.98721 0.95983 1921.02284 0.98381 1920.05847 0.97854 1919.09410 0.93427 1918.12974 0.90164 1917.16537 0.92977 1916.20100 0.97770 1915.23663 0.99729 1914.27226 0.99952 1913.30789 0.99973 1912.34352 0.99742 1911.37915 0.98681 1910.41478 0.97260 1909.45042 0.96925 1908.48605 0.97592 1907.52168 0.98505 1906.55731 0.99416 1905.59294 0.99838 1904.62857 0.99804 1903.66420 0.99842 1902.69983 0.99951 1901.73546 1.00000 1900.77109 1.00049 1899.80673 1.00101 1898.84236 1.00106 1897.87799 0.99952 1896.91362 0.99085 1895.94925 0.97507 1894.98488 0.97036 1894.02051 0.98348 1893.05614 0.99603 1892.09177 0.99488 1891.12741 0.96967 1890.16304 0.93101 1889.19867 0.92796 1888.23430 0.96507 1887.26993 0.99294 1886.30556 0.99656 1885.34119 0.99272 1884.37682 0.99242 1883.41245 0.99694 1882.44809 1.00063 1881.48372 1.00114 1880.51935 0.99986 1879.55498 0.99862 1878.59061 0.99890 1877.62624 0.99975 1876.66187 1.00000 1875.69750 1.00002 1874.73313 1.00030 1873.76877 1.00000 1872.80440 0.99747 1871.84003 0.98413 1870.87566 0.93919 1869.91129 0.87165 1868.94692 0.84180 1867.98255 0.87204 1867.01818 0.92015 1866.05381 0.95875 1865.08945 0.98448 1864.12508 0.99595 1863.16071 0.99733 1862.19634 0.99488 1861.23197 0.99385 1860.26760 0.99435 1859.30323 0.99365 1858.33886 0.99348 1857.37449 0.99631 1856.41013 0.99894 1855.44576 0.99994 1854.48139 1.00052 1853.51702 1.00034 1852.55265 1.00010 1851.58828 1.00000 1850.62391 0.99870 1849.65954 0.98882 1848.69517 0.96838 1847.73081 0.95685 1846.76644 0.95235 1845.80207 0.89642 1844.83770 0.80081 1843.87333 0.79283 1842.90896 0.88539 1841.94459 0.96219 1840.98022 0.98922 1840.01585 0.99687 1839.05149 0.99311 1838.08712 0.98016 1837.12275 0.97371 1836.15838 0.98317 1835.19401 0.99355 1834.22964 0.99382 1833.26527 0.99050 1832.30090 0.97451 1831.33653 0.91347 1830.37217 0.83854 1829.40780 0.84066 1828.44343 0.91457 1827.47906 0.96139 1826.51469 0.93027 1825.55032 0.88068 1824.58595 0.89705 1823.62158 0.95388 1822.65721 0.98495 1821.69285 0.99424 1820.72848 0.99958 1819.76411 1.00000 1818.79974 0.99269 1817.83537 0.98346 1816.87100 0.98554 1815.90663 0.99521 1814.94226 1.00000 1813.97789 0.99594 1813.01353 0.98147 1812.04916 0.95362 1811.08479 0.92916 1810.12042 0.93868 1809.15605 0.96690 1808.19168 0.97942 1807.22731 0.98412 1806.26294 0.99257 1805.29857 0.99617 1804.33421 0.98718 1803.36984 0.95767 1802.40547 0.92389 1801.44110 0.90692 1800.47673 0.89494 1799.51236 0.90160 1798.54799 0.94183 1797.58362 0.96833 1796.61925 0.95848 1795.65489 0.95141 1794.69052 0.93444 1793.72615 0.85574 1792.76178 0.77592 1791.79741 0.78848 1790.83304 0.86554 1789.86867 0.94104 1788.90430 0.98634 1787.93993 1.00054 1786.97557 0.99126 1786.01120 0.95578 1785.04683 0.92809 1784.08246 0.94838 1783.11809 0.97869 1782.15372 0.96486 1781.18935 0.92730 1780.22498 0.92438 1779.26061 0.95862 1778.29625 0.98593 1777.33188 0.98199 1776.36751 0.95459 1775.40314 0.93378 1774.43877 0.89197 1773.47440 0.78442 1772.51003 0.70179 1771.54566 0.74406 1770.58129 0.85161 1769.61693 0.89552 1768.65256 0.86620 1767.68819 0.87812 1766.72382 0.94933 1765.75945 0.99536 1764.79508 1.00000 1763.83071 0.96882 1762.86634 0.88838 1761.90197 0.83412 1760.93760 0.88226 1759.97324 0.95886 1759.00887 0.97253 1758.04450 0.92623 1757.08013 0.88310 1756.11576 0.90877 1755.15139 0.96882 1754.18702 0.98993 1753.22265 0.94478 1752.25828 0.83758 1751.29392 0.76396 1750.32955 0.78513 1749.36518 0.81603 1748.40081 0.82563 1747.43644 0.85855 1746.47207 0.90471 1745.50770 0.92835 1744.54333 0.91176 1743.57896 0.88928 1742.61460 0.90748 1741.65023 0.90935 1740.68586 0.83788 1739.72149 0.79784 1738.75712 0.86368 1737.79275 0.93916 1736.82838 0.93283 1735.86401 0.81026 1734.89964 0.63007 1733.93528 0.57396 1732.97091 0.70137 1732.00654 0.85072 1731.04217 0.89154 1730.07780 0.88539 1729.11343 0.92300 1728.14906 0.97387 1727.18469 0.99323 1726.22032 0.99439 1725.25596 0.98489 1724.29159 0.96385 1723.32722 0.95363 1722.36285 0.96560 1721.39848 0.97167 1720.43411 0.92378 1719.46974 0.79022 1718.50537 0.63920 1717.54100 0.60733 1716.57664 0.68361 1715.61227 0.73881 1714.64790 0.77372 1713.68353 0.85177 1712.71916 0.93029 1711.75479 0.95431 1710.79042 0.94166 1709.82605 0.93891 1708.86168 0.94481 1707.89732 0.90398 1706.93295 0.82690 1705.96858 0.78412 1705.00421 0.79084 1704.03984 0.83204 1703.07547 0.86197 1702.11110 0.76153 1701.14673 0.54451 1700.18236 0.46141 1699.21800 0.61165 1698.25363 0.76176 1697.28926 0.71946 1696.32489 0.59735 1695.36052 0.62527 1694.39615 0.79784 1693.43178 0.92646 1692.46741 0.95673 1691.50304 0.93813 1690.53868 0.90277 1689.57431 0.87974 1688.60994 0.87944 1687.64557 0.88826 1686.68120 0.83416 1685.71683 0.66135 1684.75246 0.49891 1683.78809 0.51903 1682.82372 0.68509 1681.85936 0.82330 1680.89499 0.85890 1679.93062 0.86831 1678.96625 0.90667 1678.00188 0.92756 1677.03751 0.86279 1676.07314 0.73060 1675.10877 0.68710 1674.14440 0.78777 1673.18004 0.86257 1672.21567 0.83092 1671.25130 0.77078 1670.28693 0.70735 1669.32256 0.67627 1668.35819 0.74917 1667.39382 0.86467 1666.42945 0.92277 1665.46508 0.92531 1664.50072 0.87598 1663.53635 0.78875 1662.57198 0.75881 1661.60761 0.82186 1660.64324 0.88942 1659.67887 0.91168 1658.71450 0.91056 1657.75013 0.89952 1656.78576 0.86855 1655.82140 0.77243 1654.85703 0.58944 1653.89266 0.39804 1652.92829 0.35235 1651.96392 0.51361 1650.99955 0.72735 1650.03518 0.81153 1649.07081 0.75474 1648.10644 0.65443 1647.14208 0.58454 1646.17771 0.58994 1645.21334 0.69211 1644.24897 0.81261 1643.28460 0.86463 1642.32023 0.86948 1641.35586 0.86660 1640.39149 0.86092 1639.42712 0.83861 1638.46276 0.78231 1637.49839 0.69333 1636.53402 0.57764 1635.56965 0.51388 1634.60528 0.60161 1633.64091 0.75323 1632.67654 0.83089 1631.71217 0.84442 1630.74780 0.84048 1629.78344 0.81682 1628.81907 0.76486 1627.85470 0.73171 1626.89033 0.75797 1625.92596 0.78561 1624.96159 0.74214 1623.99722 0.66637 1623.03285 0.66720 1622.06848 0.74492 1621.10411 0.80690 1620.13975 0.82597 1619.17538 0.80857 1618.21101 0.71934 1617.24664 0.60099 1616.28227 0.60547 1615.31790 0.73303 1614.35353 0.83302 1613.38916 0.86451 1612.42479 0.87298 1611.46043 0.87307 1610.49606 0.86112 1609.53169 0.85210 1608.56732 0.85860 1607.60295 0.86866 1606.63858 0.87959 1605.67421 0.89233 1604.70984 0.89456 1603.74547 0.88617 1602.78111 0.88249 1601.81674 0.88645 1600.85237 0.89249 1599.88800 0.89879 1598.92363 0.90185 1597.95926 0.90025 1596.99489 0.89505 1596.03052 0.88889 1595.06615 0.88603 1594.10179 0.89409 1593.13742 0.90954 1592.17305 0.91926 1591.20868 0.92318 1590.24431 0.92659 1589.27994 0.93276 1588.31557 0.93985 1587.35120 0.94462 1586.38683 0.94708 1585.42247 0.94848 1584.45810 0.94955 1583.49373 0.94947 1582.52936 0.94993 1581.56499 0.95073 1580.60062 0.95026 1579.63625 0.94311 1578.67188 0.90641 1577.70751 0.79341 1576.74315 0.65237 1575.77878 0.65206 1574.81441 0.79455 1573.85004 0.90785 1572.88567 0.93747 1571.92130 0.91272 1570.95693 0.81827 1569.99256 0.71628 1569.02819 0.73605 1568.06383 0.84768 1567.09946 0.91336 1566.13509 0.89329 1565.17072 0.85593 1564.20635 0.86934 1563.24198 0.90595 1562.27761 0.87049 1561.31324 0.70495 1560.34887 0.48854 1559.38451 0.36507 1558.42014 0.38529 1557.45577 0.53883 1556.49140 0.72013 1555.52703 0.76286 1554.56266 0.72381 1553.59829 0.77577 1552.63392 0.87714 1551.66955 0.89345 1550.70519 0.83758 1549.74082 0.82161 1548.77645 0.87585 1547.81208 0.91842 1546.84771 0.87873 1545.88334 0.77952 1544.91897 0.71766 1543.95460 0.69842 1542.99023 0.63707 1542.02587 0.56018 1541.06150 0.50506 1540.09713 0.45164 1539.13276 0.48559 1538.16839 0.65944 1537.20402 0.83763 1536.23965 0.89864 1535.27528 0.83927 1534.31091 0.73053 1533.34655 0.70243 1532.38218 0.78804 1531.41781 0.88568 1530.45344 0.92772 1529.48907 0.90515 1528.52470 0.85077 1527.56033 0.81420 1526.59596 0.78053 1525.63159 0.75613 1524.66723 0.77774 1523.70286 0.77039 1522.73849 0.67121 1521.77412 0.57129 1520.80975 0.58940 1519.84538 0.71620 1518.88101 0.79152 1517.91664 0.73754 1516.95227 0.69741 1515.98791 0.75869 1515.02354 0.84544 1514.05917 0.88449 1513.09480 0.86142 1512.13043 0.83686 1511.16606 0.83999 1510.20169 0.80749 1509.23732 0.71887 1508.27295 0.59382 1507.30859 0.47307 1506.34422 0.45656 1505.37985 0.59797 1504.41548 0.80295 1503.45111 0.92884 1502.48674 0.95499 1501.52237 0.95049 1500.55800 0.92121 1499.59363 0.85120 1498.62927 0.80687 1497.66490 0.78908 1496.70053 0.75313 1495.73616 0.78764 1494.77179 0.90407 1493.80742 0.97869 1492.84305 0.96996 1491.87868 0.88823 1490.91431 0.77884 1489.94995 0.74437 1488.98558 0.78975 1488.02121 0.82447 1487.05684 0.85330 1486.09247 0.91900 1485.12810 0.97880 1484.16373 1.00000 1483.19936 0.99500 1482.23499 0.97341 1481.27063 0.96033 1480.30626 0.97425 1479.34189 0.99155 1478.37752 0.97328 1477.41315 0.90012 1476.44878 0.83275 1475.48441 0.82570 1474.52004 0.79428 1473.55567 0.69926 1472.59130 0.65230 1471.62694 0.72692 1470.66257 0.86012 1469.69820 0.94530 1468.73383 0.96463 1467.76946 0.95904 1466.80509 0.91876 1465.84072 0.83036 1464.87635 0.78300 1463.91198 0.84698 1462.94762 0.93343 1461.98325 0.96252 1461.01888 0.94120 1460.05451 0.86421 1459.09014 0.74028 1458.12577 0.60521 1457.16140 0.53110 1456.19703 0.59883 1455.23266 0.75855 1454.26830 0.88047 1453.30393 0.92160 1452.33956 0.92222 1451.37519 0.92850 1450.41082 0.93692 1449.44645 0.90356 1448.48208 0.84462 1447.51771 0.83871 1446.55334 0.88892 1445.58898 0.92663 1444.62461 0.93541 1443.66024 0.93775 1442.69587 0.93940 1441.73150 0.94202 1440.76713 0.94508 1439.80276 0.94387 1438.83839 0.90268 1437.87402 0.78009 1436.90966 0.67817 1435.94529 0.73739 1434.98092 0.87192 1434.01655 0.93495 1433.05218 0.94321 1432.08781 0.93953 1431.12344 0.90959 1430.15907 0.87787 1429.19470 0.89593 1428.23034 0.94198 1427.26597 0.96694 1426.30160 0.96609 1425.33723 0.93527 1424.37286 0.89472 1423.40849 0.89764 1422.44412 0.93423 1421.47975 0.91936 1420.51538 0.80467 1419.55102 0.69640 1418.58665 0.72231 1417.62228 0.82112 1416.65791 0.89178 1415.69354 0.93582 1414.72917 0.96253 1413.76480 0.96968 1412.80043 0.96427 1411.83606 0.95743 1410.87170 0.95760 1409.90733 0.96216 1408.94296 0.96694 1407.97859 0.96826 1407.01422 0.95403 1406.04985 0.91262 1405.08548 0.88153 1404.12111 0.90356 1403.15674 0.94370 1402.19238 0.95842 1401.22801 0.93901 1400.26364 0.87979 1399.29927 0.82659 1398.33490 0.83854 1397.37053 0.87460 1396.40616 0.86088 1395.44179 0.80900 1394.47742 0.80152 1393.51306 0.86785 1392.54869 0.93470 1391.58432 0.95541 1390.61995 0.95532 1389.65558 0.94059 1388.69121 0.88775 1387.72684 0.83247 1386.76247 0.84541 1385.79810 0.90179 1384.83374 0.93544 1383.86937 0.94450 1382.90500 0.95004 1381.94063 0.95614 1380.97626 0.95908 1380.01189 0.95723 1379.04752 0.95296 1378.08315 0.95296 1377.11878 0.95355 1376.15442 0.93349 1375.19005 0.89119 1374.22568 0.86767 1373.26131 0.89525 1372.29694 0.94464 1371.33257 0.97170 1370.36820 0.97029 1369.40383 0.95591 1368.43946 0.95183 1367.47510 0.96625 1366.51073 0.98021 1365.54636 0.97674 1364.58199 0.94090 1363.61762 0.88835 1362.65325 0.87227 1361.68888 0.89635 1360.72451 0.93042 1359.76014 0.96263 1358.79578 0.97920 1357.83141 0.98196 1356.86704 0.98258 1355.90267 0.97920 1354.93830 0.97614 1353.97393 0.98142 1353.00956 0.98961 1352.04519 0.99330 1351.08082 0.99244 1350.11646 0.98890 1349.15209 0.98820 1348.18772 0.99261 1347.22335 0.99663 1346.25898 0.99767 1345.29461 0.99738 1344.33024 0.99656 1343.36587 0.99484 1342.40150 0.98495 1341.43714 0.95546 1340.47277 0.91934 1339.50840 0.90729 1338.54403 0.92323 1337.57966 0.94511 1336.61529 0.96292 1335.65092 0.98140 1334.68655 0.99533 1333.72218 0.99927 1332.75781 0.99954 1331.79345 1.00000 1330.82908 0.99992 1329.86471 0.99946 1328.90034 0.99952 1327.93597 0.99971 1326.97160 0.99958 1326.00723 0.99960 1325.04286 0.99909 1324.07849 0.99794 1323.11413 0.99689 1322.14976 0.99477 1321.18539 0.98777 1320.22102 0.97517 1319.25665 0.96576 1318.29228 0.96662 1317.32791 0.97261 1316.36354 0.97777 1315.39917 0.97924 1314.43481 0.97473 1313.47044 0.96895 1312.50607 0.96956 1311.54170 0.97639 1310.57733 0.98172 1309.61296 0.98103 1308.64859 0.97773 1307.68422 0.97593 1306.71985 0.97523 1305.75549 0.97359 1304.79112 0.97150 1303.82675 0.96954 1302.86238 0.96731 1301.89801 0.96506 1300.93364 0.96298 1299.96927 0.96124 1299.00490 0.95952 1298.04053 0.95726 1297.07617 0.95511 1296.11180 0.95468 1295.14743 0.95587 1294.18306 0.95746 1293.21869 0.95982 1292.25432 0.96280 1291.28995 0.96560 1290.32558 0.96824 1289.36121 0.97006 1288.39685 0.97109 1287.43248 0.97427 1286.46811 0.98001 1285.50374 0.98449 1284.53937 0.98633 1283.57500 0.98709 1282.61063 0.98786 1281.64626 0.98834 1280.68189 0.98825 1279.71753 0.98866 1278.75316 0.98965 1277.78879 0.99003 1276.82442 0.98980 1275.86005 0.98949 1274.89568 0.98893 1273.93131 0.98695 1272.96694 0.98223 1272.00257 0.97710 1271.03821 0.97501 1270.07384 0.97427 1269.10947 0.97238 1268.14510 0.96946 1267.18073 0.96534 1266.21636 0.96001 1265.25199 0.95455 1264.28762 0.94940 1263.32325 0.94457 1262.35889 0.94007 1261.39452 0.93559 1260.43015 0.93398 1259.46578 0.93827 1258.50141 0.94511 1257.53704 0.95054 1256.57267 0.95483 1255.60830 0.95872 1254.64393 0.96199 1253.67957 0.96443 1252.71520 0.96641 1251.75083 0.96803 1250.78646 0.96902 1249.82209 0.96934 1248.85772 0.96912 1247.89335 0.96866 1246.92898 0.96807 1245.96461 0.96712 1245.00025 0.96576 1244.03588 0.96480 1243.07151 0.96465 1242.10714 0.96449 1241.14277 0.96371 1240.17840 0.96260 1239.21403 0.96161 1238.24966 0.96077 1237.28529 0.95991 1236.32093 0.95898 1235.35656 0.95804 1234.39219 0.95712 1233.42782 0.95627 1232.46345 0.95532 1231.49908 0.95410 1230.53471 0.95288 1229.57034 0.95181 1228.60597 0.95063 1227.64161 0.94927 1226.67724 0.94775 1225.71287 0.94625 1224.74850 0.94560 1223.78413 0.94583 1222.81976 0.94589 1221.85539 0.94557 1220.89102 0.94502 1219.92665 0.94395 1218.96229 0.94268 1217.99792 0.94190 1217.03355 0.94154 1216.06918 0.94100 1215.10481 0.94023 1214.14044 0.93921 1213.17607 0.93777 1212.21170 0.93684 1211.24733 0.93700 1210.28297 0.93699 1209.31860 0.93626 1208.35423 0.93572 1207.38986 0.93538 1206.42549 0.93450 1205.46112 0.93318 1204.49675 0.93179 1203.53238 0.93030 1202.56801 0.92874 1201.60365 0.92749 1200.63928 0.92664 1199.67491 0.92559 1198.71054 0.92416 1197.74617 0.92326 1196.78180 0.92305 1195.81743 0.92265 1194.85306 0.92204 1193.88869 0.92152 1192.92432 0.92074 1191.95996 0.91964 1190.99559 0.91872 1190.03122 0.91786 1189.06685 0.91646 1188.10248 0.91446 1187.13811 0.91266 1186.17374 0.91177 1185.20937 0.91112 1184.24500 0.90985 1183.28064 0.90783 1182.31627 0.90523 1181.35190 0.90268 1180.38753 0.90095 1179.42316 0.90031 1178.45879 0.90016 1177.49442 0.89982 1176.53005 0.89890 1175.56568 0.89695 1174.60132 0.89461 1173.63695 0.89322 1172.67258 0.89248 1171.70821 0.89150 1170.74384 0.89038 1169.77947 0.88935 1168.81510 0.88834 1167.85073 0.88698 1166.88636 0.88488 1165.92200 0.88249 1164.95763 0.88066 1163.99326 0.87906 1163.02889 0.87708 1162.06452 0.87541 1161.10015 0.87428 1160.13578 0.87283 1159.17141 0.87083 1158.20704 0.86867 1157.24268 0.86636 1156.27831 0.86355 1155.31394 0.86029 1154.34957 0.85716 1153.38520 0.85437 1152.42083 0.85181 1151.45646 0.84956 1150.49209 0.84757 1149.52772 0.84573 1148.56336 0.84420 1147.59899 0.84299 1146.63462 0.84190 1145.67025 0.84099 1144.70588 0.84054 1143.74151 0.84063 1142.77714 0.84078 1141.81277 0.84046 1140.84840 0.83978 1139.88404 0.83887 1138.91967 0.83748 1137.95530 0.83550 1136.99093 0.83303 1136.02656 0.83049 1135.06219 0.82850 1134.09782 0.82684 1133.13345 0.82451 1132.16908 0.82125 1131.20472 0.81785 1130.24035 0.81471 1129.27598 0.81182 1128.31161 0.80924 1127.34724 0.80670 1126.38287 0.80398 1125.41850 0.80149 1124.45413 0.79949 1123.48976 0.79804 1122.52540 0.79707 1121.56103 0.79612 1120.59666 0.79497 1119.63229 0.79374 1118.66792 0.79221 1117.70355 0.79023 1116.73918 0.78787 1115.77481 0.78524 1114.81044 0.78276 1113.84608 0.78050 1112.88171 0.77793 1111.91734 0.77517 1110.95297 0.77271 1109.98860 0.77040 1109.02423 0.76808 1108.05986 0.76603 1107.09549 0.76412 1106.13112 0.76198 1105.16676 0.75972 1104.20239 0.75778 1103.23802 0.75611 1102.27365 0.75434 1101.30928 0.75253 1100.34491 0.75084 1099.38054 0.74925 1098.41617 0.74763 1097.45180 0.74589 1096.48744 0.74434 1095.52307 0.74310 1094.55870 0.74179 1093.59433 0.74037 1092.62996 0.73908 1091.66559 0.73795 1090.70122 0.73672 1089.73685 0.73525 1088.77248 0.73386 1087.80812 0.73290 1086.84375 0.73217 1085.87938 0.73131 1084.91501 0.73047 1083.95064 0.72989 1082.98627 0.72913 1082.02190 0.72804 1081.05753 0.72710 1080.09316 0.72653 1079.12880 0.72613 1078.16443 0.72589 1077.20006 0.72557 1076.23569 0.72495 1075.27132 0.72427 1074.30695 0.72391 1073.34258 0.72382 1072.37821 0.72362 1071.41384 0.72318 1070.44948 0.72274 1069.48511 0.72243 1068.52074 0.72218 1067.55637 0.72185 1066.59200 0.72144 1065.62763 0.72123 1064.66326 0.72142 1063.69889 0.72190 1062.73452 0.72222 1061.77016 0.72220 1060.80579 0.72226 1059.84142 0.72277 1058.87705 0.72344 1057.91268 0.72382 1056.94831 0.72413 1055.98394 0.72488 1055.01957 0.72585 1054.05520 0.72638 1053.09083 0.72653 1052.12647 0.72685 1051.16210 0.72758 1050.19773 0.72858 1049.23336 0.72958 1048.26899 0.73017 1047.30462 0.73046 1046.34025 0.73098 1045.37588 0.73198 1044.41151 0.73319 1043.44715 0.73423 1042.48278 0.73491 1041.51841 0.73518 1040.55404 0.73515 1039.58967 0.73490 1038.62530 0.73475 1037.66093 0.73515 1036.69656 0.73586 1035.73219 0.73646 1034.76783 0.73705 1033.80346 0.73767 1032.83909 0.73826 1031.87472 0.73922 1030.91035 0.74067 1029.94598 0.74196 1028.98161 0.74299 1028.01724 0.74415 1027.05287 0.74546 1026.08851 0.74685 1025.12414 0.74840 1024.15977 0.75019 1023.19540 0.75220 1022.23103 0.75408 1021.26666 0.75562 1020.30229 0.75721 1019.33792 0.75916 1018.37355 0.76118 1017.40919 0.76306 1016.44482 0.76509 1015.48045 0.76739 1014.51608 0.76996 1013.55171 0.77267 1012.58734 0.77526 1011.62297 0.77778 1010.65860 0.78026 1009.69423 0.78246 1008.72987 0.78454 1007.76550 0.78680 1006.80113 0.78916 1005.83676 0.79119 1004.87239 0.79282 1003.90802 0.79442 1002.94365 0.79615 1001.97928 0.79792 1001.01491 0.79957 1000.05055 0.80100 999.08618 0.80212 998.12181 0.80280 997.15744 0.80313 996.19307 0.80326 995.22870 0.80351 994.26433 0.80430 993.29996 0.80523 992.33559 0.80568 991.37123 0.80575 990.40686 0.80568 989.44249 0.80545 988.47812 0.80519 987.51375 0.80516 986.54938 0.80520 985.58501 0.80479 984.62064 0.80410 983.65627 0.80372 982.69191 0.80354 981.72754 0.80313 980.76317 0.80263 979.79880 0.80238 978.83443 0.80205 977.87006 0.80125 976.90569 0.80015 975.94132 0.79914 974.97695 0.79835 974.01259 0.79764 973.04822 0.79685 972.08385 0.79589 971.11948 0.79484 970.15511 0.79387 969.19074 0.79305 968.22637 0.79227 967.26200 0.79114 966.29763 0.78970 965.33327 0.78830 964.36890 0.78713 963.40453 0.78624 962.44016 0.78540 961.47579 0.78436 960.51142 0.78314 959.54705 0.78168 958.58268 0.77990 957.61831 0.77822 956.65395 0.77680 955.68958 0.77511 954.72521 0.77316 953.76084 0.77137 952.79647 0.76966 951.83210 0.76774 950.86773 0.76561 949.90336 0.76316 948.93899 0.76024 947.97463 0.75724 947.01026 0.75458 946.04589 0.75231 945.08152 0.75017 944.11715 0.74776 943.15278 0.74498 942.18841 0.74189 941.22404 0.73874 940.25967 0.73582 939.29531 0.73306 938.33094 0.73035 937.36657 0.72787 936.40220 0.72578 935.43783 0.72370 934.47346 0.72110 933.50909 0.71815 932.54472 0.71508 931.58035 0.71182 930.61599 0.70864 929.65162 0.70565 928.68725 0.70256 927.72288 0.69945 926.75851 0.69656 925.79414 0.69349 924.82977 0.68992 923.86540 0.68622 922.90103 0.68272 921.93667 0.67913 920.97230 0.67525 920.00793 0.67138 919.04356 0.66758 918.07919 0.66394 917.11482 0.66047 916.15045 0.65681 915.18608 0.65269 914.22171 0.64835 913.25734 0.64431 912.29298 0.64055 911.32861 0.63664 910.36424 0.63262 909.39987 0.62868 908.43550 0.62472 907.47113 0.62072 906.50676 0.61674 905.54239 0.61245 904.57802 0.60738 903.61366 0.60183 902.64929 0.59665 901.68492 0.59218 900.72055 0.58829 899.75618 0.58499 898.79181 0.58223 897.82744 0.57956 896.86307 0.57672 895.89870 0.57388 894.93434 0.57119 893.96997 0.56853 893.00560 0.56577 892.04123 0.56269 891.07686 0.55910 890.11249 0.55552 889.14812 0.55269 888.18375 0.55040 887.21938 0.54779 886.25502 0.54478 885.29065 0.54191 884.32628 0.53928 883.36191 0.53676 882.39754 0.53393 881.43317 0.53079 880.46880 0.52785 879.50443 0.52502 878.54006 0.52214 877.57570 0.51943 876.61133 0.51686 875.64696 0.51432 874.68259 0.51194 873.71822 0.50986 872.75385 0.50801 871.78948 0.50622 870.82511 0.50448 869.86074 0.50267 868.89638 0.50062 867.93201 0.49857 866.96764 0.49664 866.00327 0.49462 865.03890 0.49260 864.07453 0.49070 863.11016 0.48881 862.14579 0.48688 861.18142 0.48496 860.21706 0.48320 859.25269 0.48163 858.28832 0.48013 857.32395 0.47842 856.35958 0.47650 855.39521 0.47485 854.43084 0.47377 853.46647 0.47265 852.50210 0.47099 851.53774 0.46927 850.57337 0.46803 849.60900 0.46696 848.64463 0.46543 847.68026 0.46349 846.71589 0.46200 845.75152 0.46096 844.78715 0.45957 843.82278 0.45813 842.85842 0.45736 841.89405 0.45676 840.92968 0.45554 839.96531 0.45392 839.00094 0.45242 838.03657 0.45094 837.07220 0.44913 836.10783 0.44727 835.14346 0.44609 834.17910 0.44553 833.21473 0.44487 832.25036 0.44389 831.28599 0.44257 830.32162 0.44104 829.35725 0.43957 828.39288 0.43835 827.42851 0.43737 826.46414 0.43622 825.49978 0.43453 824.53541 0.43267 823.57104 0.43123 822.60667 0.43028 821.64230 0.42946 820.67793 0.42834 819.71356 0.42700 818.74919 0.42607 817.78482 0.42545 816.82046 0.42473 815.85609 0.42406 814.89172 0.42335 813.92735 0.42244 812.96298 0.42138 811.99861 0.41999 811.03424 0.41827 810.06987 0.41666 809.10550 0.41548 808.14114 0.41456 807.17677 0.41362 806.21240 0.41256 805.24803 0.41161 804.28366 0.41112 803.31929 0.41141 802.35492 0.41214 801.39055 0.41233 800.42618 0.41193 799.46182 0.41199 798.49745 0.41334 797.53308 0.41545 796.56871 0.41721 795.60434 0.41877 794.63997 0.42088 793.67560 0.42334 792.71123 0.42533 791.74686 0.42671 790.78250 0.42826 789.81813 0.43038 788.85376 0.43247 787.88939 0.43372 786.92502 0.43435 785.96065 0.43534 784.99628 0.43686 784.03191 0.43794 783.06754 0.43835 782.10318 0.43874 781.13881 0.43921 780.17444 0.43953 779.21007 0.43971 778.24570 0.43996 777.28133 0.44049 776.31696 0.44095 775.35259 0.44104 774.38822 0.44088 773.42385 0.44053 772.45949 0.44001 771.49512 0.43931 770.53075 0.43852 769.56638 0.43805 768.60201 0.43791 767.63764 0.43757 766.67327 0.43693 765.70890 0.43613 764.74453 0.43499 763.78017 0.43408 762.81580 0.43396 761.85143 0.43396 760.88706 0.43371 759.92269 0.43348 758.95832 0.43308 757.99395 0.43249 757.02958 0.43206 756.06521 0.43161 755.10085 0.43144 754.13648 0.43202 753.17211 0.43263 752.20774 0.43273 751.24337 0.43279 750.27900 0.43323 749.31463 0.43393 748.35026 0.43453 747.38589 0.43483 746.42153 0.43450 745.45716 0.43353 744.49279 0.43245 743.52842 0.43133 742.56405 0.43011 741.59968 0.42938 740.63531 0.42930 739.67094 0.42908 738.70657 0.42872 737.74221 0.42870 736.77784 0.42841 735.81347 0.42796 734.84910 0.42842 733.88473 0.42932 732.92036 0.42939 731.95599 0.42873 730.99162 0.42814 730.02725 0.42804 729.06289 0.42814 728.09852 0.42801 727.13415 0.42770 726.16978 0.42741 725.20541 0.42752 724.24104 0.42785 723.27667 0.42737 722.31230 0.42362 721.34793 0.41541 720.38357 0.40974 719.41920 0.41308 718.45483 0.41974 717.49046 0.42299 716.52609 0.42343 715.56172 0.42266 714.59735 0.42132 713.63298 0.42006 712.66861 0.41902 711.70425 0.41795 710.73988 0.41679 709.77551 0.41560 708.81114 0.41435 707.84677 0.41301 706.88240 0.41101 705.91803 0.40829 704.95366 0.40615 703.98929 0.40511 703.02493 0.40416 702.06056 0.40225 701.09619 0.39951 700.13182 0.39657 699.16745 0.39325 698.20308 0.38948 697.23871 0.38609 696.27434 0.38325 695.30997 0.38035 694.34561 0.37738 693.38124 0.37429 692.41687 0.37082 691.45250 0.36693 690.48813 0.36243 689.52376 0.35757 688.55939 0.35356 687.59502 0.35098 686.63065 0.34887 685.66629 0.34633 684.70192 0.34332 683.73755 0.34051 682.77318 0.33821 681.80881 0.33623 680.84444 0.33450 679.88007 0.33279 678.91570 0.33147 677.95133 0.33110 676.98697 0.33140 676.02260 0.33165 675.05823 0.33150 674.09386 0.33142 673.12949 0.33198 672.16512 0.33152 671.20075 0.32179 670.23638 0.28271 669.27201 0.20501 668.30765 0.14776 667.34328 0.18568 666.37891 0.27728 665.41454 0.33054 664.45017 0.33720 663.48580 0.33091 662.52143 0.32536 661.55706 0.32189 660.59269 0.31834 659.62833 0.31430 658.66396 0.31095 657.69959 0.30863 656.73522 0.30693 655.77085 0.30503 654.80648 0.30274 653.84211 0.30065 652.87774 0.29887 651.91337 0.29728 650.94901 0.29534 649.98464 0.29164 649.02027 0.28824 648.05590 0.28880 647.09153 0.29196 646.12716 0.29434 645.16279 0.29537 644.19842 0.29593 643.23405 0.29626 642.26969 0.29641 641.30532 0.29646 640.34095 0.29618 639.37658 0.29558 638.41221 0.29510 637.44784 0.29451 636.48347 0.29289 635.51910 0.29097 634.55473 0.28999 633.59036 0.28929 632.62600 0.28849 631.66163 0.28842 630.69726 0.28867 629.73289 0.28818 628.76852 0.28687 627.80415 0.28491 626.83978 0.28189 625.87541 0.27828 624.91104 0.27624 623.94668 0.27572 622.98231 0.27467 622.01794 0.27297 621.05357 0.27141 620.08920 0.26957 619.12483 0.26490 618.16046 0.25796 617.19609 0.25470 616.23172 0.25635 615.26736 0.25848 614.30299 0.25935 613.33862 0.25947 612.37425 0.25892 611.40988 0.25824 610.44551 0.25771 609.48114 0.25693 608.51677 0.25593 607.55240 0.25496 606.58804 0.25376 605.62367 0.25211 604.65930 0.25066 603.69493 0.25009 602.73056 0.24962 601.76619 0.24747 600.80182 0.24383 599.83745 0.24121 598.87308 0.24033 597.90872 0.23996 596.94435 0.23951 595.97998 0.23843 595.01561 0.23662 594.05124 0.23459 593.08687 0.23136 592.12250 0.22761 591.15813 0.22641 590.19376 0.22718 589.22940 0.22697 588.26503 0.22567 587.30066 0.22434 586.33629 0.22255 585.37192 0.21997 584.40755 0.21821 583.44318 0.21786 582.47881 0.21651 581.51444 0.21323 580.55008 0.21079 579.58571 0.21058 578.62134 0.21006 577.65697 0.20687 576.69260 0.20280 575.72823 0.20211 574.76386 0.20427 573.79949 0.20488 572.83512 0.20343 571.87076 0.20172 570.90639 0.19991 569.94202 0.19774 568.97765 0.19589 568.01328 0.19515 567.04891 0.19538 566.08454 0.19583 565.12017 0.19583 564.15580 0.19558 563.19144 0.19527 562.22707 0.19450 561.26270 0.19344 560.29833 0.19281 559.33396 0.19272 558.36959 0.19270 557.40522 0.19302 556.44085 0.19354 555.47648 0.19327 554.51212 0.19252 553.54775 0.19226 552.58338 0.19237 551.61901 0.19188 550.65464 0.19074 549.69027 0.19029 548.72590 0.19042 547.76153 0.18968 546.79716 0.18833 545.83280 0.18815 544.86843 0.18953 543.90406 0.19072 542.93969 0.19070 541.97532 0.19061 541.01095 0.19113 540.04658 0.19172 539.08221 0.19214 538.11784 0.19233 537.15348 0.19220 536.18911 0.19221 535.22474 0.19295 534.26037 0.19363 533.29600 0.19355 532.33163 0.19332 531.36726 0.19330 530.40289 0.19320 529.43852 0.19282 528.47416 0.19207 527.50979 0.18891 526.54542 0.18381 525.58105 0.18338 524.61668 0.18829 523.65231 0.19175 522.68794 0.19258 521.72357 0.19252 520.75920 0.19005 519.79484 0.18621 518.83047 0.18357 517.86610 0.18148 516.90173 0.18112 515.93736 0.18399 514.97299 0.18691 514.00862 0.18821 513.04425 0.18894 512.07988 0.18865 511.11552 0.18729 510.15115 0.18629 509.18678 0.18532 508.22241 0.18207 507.25804 0.17825 506.29367 0.17820 505.32930 0.18075 504.36493 0.18089 503.40056 0.17634 502.43620 0.17185 501.47183 0.17355 500.50746 0.17795 499.54309 0.17942 498.57872 0.17900 497.61435 0.17823 496.64998 0.17715 495.68561 0.17597 494.72124 0.17453 493.75688 0.17227 492.79251 0.16918 491.82814 0.16753 490.86377 0.16851 489.89940 0.16919 488.93503 0.16792 487.97066 0.16636 487.00629 0.16522 486.04192 0.16353 485.07755 0.16025 484.11319 0.15739 483.14882 0.15771 482.18445 0.15902 481.22008 0.15881 480.25571 0.15819 479.29134 0.15793 478.32697 0.15700 477.36260 0.15490 476.39823 0.15299 475.43387 0.15203 474.46950 0.14877 473.50513 0.14050 472.54076 0.13445 471.57639 0.13760 470.61202 0.14339 469.64765 0.14424 468.68328 0.14189 467.71891 0.14064 466.75455 0.14166 465.79018 0.14278 464.82581 0.14230 463.86144 0.14060 462.89707 0.13776 461.93270 0.13441 460.96833 0.13264 460.00396 0.13002 459.03959 0.12067 458.07523 0.11044 457.11086 0.11171 456.14649 0.12042 455.18212 0.12465 454.21775 0.12302 453.25338 0.11968 452.28901 0.11822 451.32464 0.11898 450.36027 0.11941 449.39591 0.11881 448.43154 0.11696 447.46717 0.11399 446.50280 0.11205 445.53843 0.11082 444.57406 0.10742 443.60969 0.10336 442.64532 0.10184 441.68095 0.10242 440.71659 0.10346 439.75222 0.10381 438.78785 0.10322 437.82348 0.10099 436.85911 0.09730 435.89474 0.09506 434.93037 0.09480 433.96600 0.09445 433.00163 0.09313 432.03727 0.09155 431.07290 0.09062 430.10853 0.08999 429.14416 0.08893 428.17979 0.08782 427.21542 0.08650 426.25105 0.08383 425.28668 0.08041 424.32231 0.07703 423.35795 0.07425 422.39358 0.07357 421.42921 0.07125 420.46484 0.06204 419.50047 0.05175 418.53610 0.05099 417.57173 0.05964 416.60736 0.06833 415.64299 0.07173 414.67863 0.07175 413.71426 0.07091 412.74989 0.06998 411.78552 0.06924 410.82115 0.06864 409.85678 0.06775 408.89241 0.06651 407.92804 0.06571 406.96367 0.06509 405.99931 0.06372 405.03494 0.06219 404.07057 0.06112 403.10620 0.05998 402.14183 0.05788 401.17746 0.05457 400.21309 0.05036 399.24872 0.04530 avogadro-1.1.1/testfiles/ch3cl-esp.cub.gz0000644000175000001440000220605612250371054017434 0ustar marcususers@@Cch3cl-esp.cub[,K$U΅E,`h4@=lݏ&Y@WW}__ǟϿۿ?/__?G?O94~?=w2WߺOW>gOj/W5_NomֲGYϙ?WumԵw.ESe/^Ztat4\K6.bfS|h{RKe:.[?v{73_{)sۿBu/?7h-&[6nn#X?j|B~umv?;ܮ1ޅϻǶ3}v I}wq8vY8mv67x5y׌aVjأP\?*Ǫ~1L/f#sbLb?A=*f-]s𥹭޳"qs%oуUW|J߫=|n`{ +zձW?@}c ݖw;}pd>?Wо9GtbSm5El[{qۖb qs9!ZW8x+/sLb.F},9VW/("zwAR ]Btz=q=`~?Sҏo瑣 }჏E=#p\?֑^js/^͟{6jGkjCcw;?k:^=@7Pڽ-}ϽB{?vfZ<5A>D|O  ?}^.toZ僵mttI4V:MҰGo{ߦ_XX ?I.l N3/yc^S^$|`B|BƁJ:9oI@hm~z{t Tk7bBBO,#u]3?~;}JCq=9긘7XqĿ&qj|OZ)U>k bAW|zx=GJw.*/ZMw(\6tT}rSrtFS P8l4x%MiN{W@uԧ@=/_q`]P~(g;oP|A?-1ԨvgpƑLj>J/%LJ8_z}ԞITƱI@2vz{{P{Ţ>Ts ۳?V +tvs$zu=*9g[=^b n~mN8rZzKƏ*OEjY8Gyq$x9y7*=FVX?0U)<mOs6$v?St;McѺ$TG!H籂cc!\헧#lR#=1||ž?7Y5qˬή?A ^Q9PEqx7̵Hp^\#{F*g=*{:y?Ě?.E? aFlє.XX߶^2ޮaBJ6/; UcÈ.?U+Vb֥NF2cY/sMQtx&RRe_%ԫ".R+y2.)'0dU=6VH%gs'P2AgPTKqz8+]'ˡo7H?w"f72$䔃v?VZ\z䖍wV$w⢛p<9Rn|y. =p'Oai]x~6@j zPQfItF%Yb81vu!"͌6RW=n“*c d/˼^UXYB\b孫\g.q9˿gU[Qל/V`1+/OrC E?Yhjsz;D@Z4@}l1#"B*P?- \-6_Őv+7vٮ_ӊ@]œwBxk8ӱF:1ٍ*Z ňY.&{ņ-P;IDN~+:n@?f V.WRZL=VTƦX[,w),Z85m,{}C1F]9_z8[D^L?b;klsx~Rw+㿱Uܫ<D.-zzF3o6Xǃegr,)f>oihkPɣdJ9dP!d,,~Ettvqfԝ#l(`3C{9{ Љ,&<ƽ[#iyS@6u`C/Tο±#S%P&qް!a۳}4P ]H:{L^%Mc9Jc5ԇGD/mފQzI,?h7>ۥ`A N!{wzاW9tQ䇀A?T#78])P{b׈_ƙg|}{-[7ƈAKwXzF 1dDՏ= !&G).,y|FP8"D=0^Ӕ\zHow7ٶ@=\yD8E]L bE-zw$m̯8zM۝-׆f0dVPb)CՏe؀Z8ymgL}"Yj=؜d5 qF.Kz`ؘwO\dl)2ĩ=WRSY<>U3:H@}rGq;#ŔqŜBpz5ĜQz 2`)|=#ug^_Scz} 5/m(8cJr}#Pw,L3QtDt=r2T>l%ĩY0`ĺ]GC~7uTZCO41j*Mٕ(&W91|ۑ>Ac#y57iu=ssYht@/1T7% Rzl%ƬѬ({^鳤H퉫b}=E=/s0=5LnCO,V؝Q䟗6Hݛ&=&˱*PsKfv+я3\wK }$Zt"ǻGNB$AT qRd-C{Ǽ#Qh4Ɉ`2{eO}&O14<-8H/zZO=` Y ~;1gBrp)B8'[WWp6vA |V, ԧLm0/P*.R_{ Pt(N$SAx=G *Ϊĩ[jS GeZzN5:f}Ei}`y%bsjΥq(4iIᩖ뷂ruL_ЪaH})pӼVM u`H;зRRAE; rd\qC[{ ۭG~?̕aN" 65Z(Ӥ BA=TKN.umiLmR/ZI >xD`DmJMSgJsTvL}[&ƱMː$PRiz%/X %E`pҙuƟ*Pi&"XBe퍞t`ԽYCq@i@ݷnUD5jcIȉ2IP%|<&㍿5p|X# yҜ_ꥢNgu4ai 3WV@?T6qIf` gwW_VYQ9ѽވVKjحTiڸ Y.Xc%ObkIR):K)_z,/G#m㴚RT=sld!9؆D]-U5X0~s3fx^ji7|/q`Q8R,]/pDewEju~ գٓݒd\њ9mu ǫкȑ|^t`OR}IIX7[tpkӦ]9큺UAm_>rZڲZ憣prMO#ƎNC|#dEvM߫-@VGcg^ĩ+oz*8vKS!})R^ ^yFFj947GHgKXs[E&gBX)OR==0֤4jju]НJB8u6_p=Ө\:I)Ore|ĵ+xa=Rخ]_p(FSzmi1{Vk8sSpM\sD%jNh".uN(I(e^~ C"LJ\GO3.F?,V\+4Cذ'^*,;W~âJp4ßrCf' nKkO-k|=*̫gj[~ m$km{e4a[̚,eb.;sW \SS[E/'RLXs$BJMܿiV#+=}ve͚/, o0z8uoK1 u4,+i?UyEw]3u,==ZUn):bU:Hd`]T3@Q$F?ջXJ lяcP6Ez0.CњzDCCpegnR,[珡c}޾}L"o ̴k8^ LJӡ_N"XLܱGliO^~jz5}gx%=_V$!C;#m 58j->bGOE\Aוx5ǐO4'G?|յ,qOZvi~`Yhap2>AL` |8ӈrڞilk w)8lMm; HzyN^j,8X:я]J!h&֚lZJGE 2*P7 ?cS]0Bpt)U\SpH@Ko cEU?|1 |b걅{=TG1CTڿ1 ?C'rϒ: ^%햀s*vK$cmHp=&;tt='V@o&<(:#\[սKrlhI)Y'`@^VWc=FfI3\YS1&"=³U8!0f/SC>8^F q$PxS4`gHfnЧ~i4ʨ襚8SY%rF u?VO[e%Sn'CܣPzO ⵋbTUЭ!ڰz{)-x)oꖜA*;RAԎ] 14 cZCQ0iF#.jOHiKV1ے #ъ#:j`ǞE]ggtScdF<>4>uDqz()mK2ݙ$zP'F:?Vz4M:vGy;D7Ǫ ^=~v)Aى[S-S(vڛ#CU\9XimVNL (iPsTVc3.vezv$5\rrE(Jã4M)ҕDj%)]jZRmpA7nKŝ;%-=ѿ/);n v!b kCdVjĿ16 ?KMefI/*WQլZm1FpA ԓ?1tiS_#EcjHO#Y%{m^&Hk`5EIKe'/u#xĩ5:Н,)Wcpn{ٚFs ^m$_fUx)='htm&jSfUQHvaCKVkf5yB֜phNʫ5<UhnOiJn4 "aHgoM" 0_<* sDy/PkgϜ~ kP*H)0Zrq`[L ^?J5я2 B$H^I" u٘ > x-2 \`A;:"mIA̙MQ^aZiCH/}0O_)}SDfe&C Ku8J"$G]U q%wt4Op*{cFjKe٤ZOK6Y,BL*fSܓ|sRVK3jSخ+99t;6 xL{J1jhZ JTm)j.R=)#mY{UXWmS; KrI 7Ic=:N9|%Ner)/2 jX(}a{Df\\@SdR+ 4eϮH]fN59#Y*5e"i,xb/?⟣(CG7Lj)t!futѦ\B~oQO-Ͼ;["oTK2ϻё2(q2kŘ${kԿ]C}xSdּM˱R2i޿r$Ʋr'j~?]WH)JzU]PCDT԰nPSףVCS^ޒF4^B"SEliVVJ6bqia:EFI\RJ(tV!-#ΏAkH$v5.h߼\sO@ BPn?qxrM0YoAĀٶp¾ ☛Ū-$3oM/ffjPVf gg:SY}K:~_r)t`ZM?d _,jLSIoa*ʊgEѠJ󜡩(#RmM%ghWL[ON`5cWiuJIͧsKug:iA8ՕT#]mDRϗΏ38_)O42R;Z5E#a UHX Fc=d# WI}F< k_b&E<ϪU;!хX44 AC,P6P. gHQVɬA@\̑W82 NH'+J\DqvYM"[K-@<0+͊]!D~[5<8ނZ,oq>e8Q S:,BpöAbSzZWʮ`$i/YouV"(@R>mw^RZ1Ruǭ\)bS_ft=EN܍Cg͙H& kdsRpyһkrFbhH6:Eu5XZgQtep׆aHx fjd#w=>Pg¹dQGR;S:=~i{Nu%cא \mw>I9<'!?H.*=A<ɶbrktxbaU5쑼Fd5T$Ahкߘå PHK1=nT=%B$^\XNp\s.&2Ɗy8.Sz:$=O) NIڔ8rA<B(J, 뵵܀yY#ĸ&@Mz3+32T_Q;mC+L27{{`%ta笓_G#Yf`FģI M.%IS ĽQٻ,U`۫rKV 9Տ"v"GK^3=W;boBH+{?w'*muJKHVٗ5E"j=)S~A0r̘)s MǀW)&풸wفSe{+a| xapjα0ܵgSD]DQ&Uު߲3$Rن^P[X:So֗݋^[4JߋAfT+[p?RT=I٦ُl{Ov)h/!\g_5$.8 ,…M 7p.]GEG\ю5 t*g Pqu-HT>1 j+RqXocA޸׺JqFp))T|uLrM=ɲp'dVV;׹05ȜDa2~\d2}-vķNL#=#:Ӝmyo&`%KZT nزZ1`iդKN:`~(NFDϑJL&FK'.RbکSh n|7&f+{3)ê*{b#E$>ZT\5HRӨH]ޑ@?|BS#ָ%jX Q =ۑU)f(i!39D|5o]SZ1QzF`\%ݡ7͕ol Z5ZVobD$ppyC_-N;Qo;Foh-&W* r<:uF[s,@CK(z=32.&N\a[k`Q׃j~rj*$ƌL3L)9 h)<ﻤ&bTǿ'n&8bǢ&.B"ƼYίصTƢ;3dEWEztA8F9v5t>̲`?}5J?6'~G $=\o=@5bc;ⲋ}(릃w xxJ? tUZb6UO.T_xz[yX@hLSݒ5M--bcGZEHY4.KO]EлB붔9'$~bAKncFQ ).@!MK_Lִ+"/fy]fS]^A )Rn0 l|hzVBL`oBe>NLf^%vV/vcשDO Li2Aj ~r#ҪFgk3RW {S~9c5K$i1{^ktd 6"wÛS`mZB Ԙd<. q쏈aq}>ECAÁ(@^6ڋm%f5HM~qӡեK0-wI:kK|3MxE<|۩ ˚Nx'jX3pZqŒN{Z Q[ސī|벰zdJSEҘ1YR -v !=e-#d?Q o ptc uۏ{n 9Jp+ QI@t*]3JҝNxb= g4)a]Ty't~>Ƈ;qҔ(cM\?Unךc ᇐpI6ΐǵv&"# 5ӏyHMX!NӢ$MVB!3)b%bZ4 %P'k%}}Kcc}ӻ`\K[ަQP݂Ut˘ǎEE5lnw[,AwQt1|8m='WaOw7xޒEb= ۮ>\ZH;HKphXXsi f>'p)[ cԍmrd(2KTF[K2 bZ^Xk h=ɍ4J p6ByuϛNF=L!S^3xO3J߫+JBuQpI~Ʊ7Oy@mxkɆ={aL2 hp=#(l1$!^\S1I}W ("-iCS8ntP1"a&oօBvc1YE2U_pwӝ+\RxG⻫Mft{N70R!Pgk,l4/Gne7,v-bۧi|lK_e)<<]gK&c8{f*.kp,!'rS>Ck,ZON^J~ i~ɝ˺3~y7*#e;QaIDK߬%P;M=7 IZ1 =yϖ瞂.)d>4Y-~ 4Uk^&IxH~@%8F,$›<=F*U?0<v05d+םf@OCKtRs׬$+XMty2~^a"l%dh]ƸK4(Q\ܢGz q~{(@R(R#VHYy.6M ] ⢝)6~A,0e壈 @&hס$?ɞ@b\;sZY:[6K{haϟ.< +a{jPܹ6Mϣ1s|b:?YR!c'vcE?jyEcyllƌmr|1ۭ=$efmoH\ɖ{E#ݝERc'BAm6l6B5([+J$6Z|Ay&NAi|^M<* #z;Uu6oOw՜iU}x^%)S!,lb?Pטo0MC>XN*.+9# (.C#:/09{*,A, s&\b&ְs,lj:80?guY!P9/1ګk'NH@0 \Kɻ%*a6'_%f([7HԆ}O"zCm2_4EA 92cڶ=Ҳ˱]/v ˹ GH4,:JˌԯxA=&\iȸ ?=׷Opm<`n??˜tgOݯQxFOr/3%S]*c^cxA?Z{|$ʗ ! "5TEXSņiA쏷mu S]w F !є^QYN !feܕ#:t]-2q3QV1QD:w g\*FŪ% -?IYT/C=?vX=(nKGuT.lK$iDœ0y9&}}0lqtqÛ8u-Ek΍민i߽(7PpAul;n''JQnuDZ)=eHEa $Og=Tp<<JvIBu_As1Ye<5Fx}ԅC+HۚTZ*;i\7KŴUݮ*¦HFCkTMG-Z8q+8W 9BI,JIҬ‘D'lz s:AopaC٠}v7s|#a@ΎiP-MϩH;7UvhG5bCob3[|?V0yD1,]~sG?QjZ##M7A=z[ڵzo-.S}6DR^؜=Zf]95?k%IUH.xQMPVi؊8Sgϙ(͈q8Ky C,1(v¸j'7򻒢&&#d.}!I_\!}^7NҼ58xF8tF+-6(=ZIiQ]BIMEi£i>1d:60OyAFpj]1Mh'6QQEʤAd6Y |i4G5ZhL#FC0mIS@ycf)f)_͍UG_!!X=#"]>"p&VQ ;T+?F٭+:ޘ1p̵X:iYd?m2lUOJ]3(2,%AzXLؿzbOω&f/˓7ZK6=jJF4Ԭο]l~;-/j.9&S64JPrK\ڐkj4 O t SGr:8Q'{=]6by73I4Z]IR+~&.8D+/{M$lMƷ$$]&(qz˜ }-#\ ztU?>aON({9ޒ*/*ZE4eiaj9DSAn粷*R]+(Q,5ۖ1n4;j*Wx lK`<ji3*GrV*kɀYT* JfAU?ϣVYyw$Y3= ðVO>K )b%XԳ-Yu1Q]Ta,+\~jO'd^1CDCN-xeAMl?R^z]&[*~ <:K +1/*ǖu{r?J#QxwUD-#Kӂ3Zɪ N~圯%K_DnIY%TհAq*86YD#Q>K]wEvEj]*7p1[;FP?݁ OqDѫ*Of.v̾} ٬~@6α5\ӜQq۳7- BP\Scoa`=dQY)LGqSΣ6!N㺛κJ5I*a(7$# d-Cou]i"&VPz,QWb*)V O&&:|Kcv$Z@^Az,[hoxB$eR /3!Q/_*HlJ-E5 lk-KO=R=I^n}bu'3($x(& .%~&+.,j(o839APq+4+uK)] ,ΌMepAѝ3]b%xu c{5q:됈U} VުQty4uR:.%=ٽXI(j)m?*rUIOLC-/E^OCᙩx~YR(~j;Vq}v(w;5ъ*es=8n2pfxٕ|}~я/tbu;ubb;x'C9W_PsQ6E-rW @8)k+՜=iʓ"9 -]$П]\ħg][[> Y<;aj8ןLeūvQjy~z2h=*ZӵX?ª/_2"NP=(2Drn & (Nfw j)lsEk ["9z<1U2r_U|$M39GtZ1{T}_7R7."!=J/kK#W%z%u֜)=!r_~9⹀bCk?QD@%biU!76!{ )p ~H|A8Bx1Ra7qiFI?[&G??PXl_,ԺsmuA=#?м0kl6H=y*x O2?R41 *cksFBOM"vlNUa {dѵ084֙E2"]UO !ǂۋxaJTRa47;J!e\ kԳq&Bz`Kƣ"bo~6#/瑩,o#6RG~sCel-|AA~-Zpe#dua4u9,/QF{]pNZ`jD"{<2JzZ?(R5ĩ)!S nnԈ^]#Q$K^;|q52[&ڡEԩlt-F\idC5ZRƗ(+0sFGUV8'_p.Vh Ȍz볤{IƠ @T;#CmB `&Sظb}ϳl#Olt8 A=? ũw~xΫԴ:m(Qw%[ۨExҕkt51ʯ13*u2)NC@M97䏕HFr4gQU>:('p\ )Q80Rig%' "ͺ0N߅tK/x=Ҭ6ĩ4mGX?%,JwG W^MQE::[pFV7^i`(2֘֞һGn ┤$ohsMOs3R%W\-yϩ:*GV+8N5CxM~Lr'k符\NKR@!amV( 9H1xh:YU`qd2'Y[mv0hPxSUt}}g" Px$SϹ$stcM,_.bomHrnwT8 q`)i .):'ni U[nKy ,K->6{Zm$&$3R tu XE/*D–(,ZmkVkZBlUרId-_ծTXdJ,y'޴wn)J(ԄU{ gMp,ۋd}NU2o?RRL)n 7Ҽ*[`px} ۳! -w14wЛc;O&\+ibo!".CsmS)d>WǒwGN$U@k+ "7Zz"@=>m$(}֗.I)4?gJOol]w(~@0P# "0AZUe~j6&H@(44&so2%lvd\l~ڙ>p16-dpePSs%YGHX%~uO>%DNN GٞA`fBR?zh7[QeKCu7cѼݲHs7$nL:T*bi$.c8L,eLnҴ`3h\BZ 5سJh!0yB2+|;}+1ܗLşA ཝfYF=0VMh&ٱZtS޹S')eyVrH- x.l4*_t {cb%*,]}3ZIldx&Intj V?f`An}zm56y#H_rƬʐCf,lG`$3bŪC}va֫C/WC:녳$Cݪ1e$ȣ7"|,2"WR CɉSl;:J> Mj |hm(u^bhJ/F8)^.ɰ:RjPC}()R#QT#s73{4~jpb#_Y%3_oaGC kZiF;*K9 Su1GJLRPϋP2M FozGZyO_(('Y"i;yVG #/qcZey E"l&H<9L0(33Ed vs@?S^J뙕۽<3I3ID˙:aI~kKb FÜIZe+ 1RAlV9/sm72eSմJ6//Pn8'Gnrr +b ݋1e+ tGPQHpB3],03Uy\!V;kG?} #vQ2w?߻#K{"8\oMHB'or()kOP'bF#xz+5?1&Vz=% %UUoe6"SK+sayD2Zp3{ibjgfR,/6Jۍlo2"N˩3ayyt"rL̸hSR=:+#$E?窬W")E坱F-Nm\ -V 58`q=Ll>)Dgj(!,Q*Eә/|X OYa v^{)Rc/wD`DN1|qxS`GM¹R1JN3 !J޶ P+kY|Z ˘w? <(Lbc*uBz|CEgInyNb۴": ƒW1Z8UԸr.6[H;ǰҚSHCQ&ͼVBuSW^v#vprL28c]}.yYGk ^M4N+5$9;JꖠxTlSiEWpA (R"o]HU>(<1_pl=#3Yh+u$Zhdp5;֩Ih&uX@+?u0EF 3cb@N&ճs>a IXs|70thG_ŐD`2z~ !) rg kRSGG"B@z6=s%Q4,Ԓ~xj9֓4PěkS''͍j<]MONeLYuvܦ"8٤[7>;#t= YE 6^7AtM 6Vq0ޔ(bnM=|8 Խs#4\CJ"Lz&UG걄^7* rpn! ή ҃է[M4šÃQS -Nݵ[J%ۭg dKRhIEy#I轧(lX8=0/x8|iv40 ){] 4~ˤ.vѓP#w$Pp&EGn(҃@/ek&.RꇧG R\{ ei--H _Zu'P\!3" Ѡܼ]U(u1%~4njp}'ub0lI&l>lMcm3 t/Z5{̩wqM+#c )KGiuV4. L=g) J5ރ&ՖՂ*+. ?#JwKsH ;ޗh=q.kH>J}mHzKnN5T)ϕoG /EYiIV>0<[Aj/#QP6ގ:[®zm?ɩ\}VںkICаRvObXZ&·`GEhS;(ᘔDʦE\? ~ AS*6Ū s0MnYIWPcEh"ɜC8Rz\[؇Ck oN,f'W|(cŔV5vK5jxL^ms(ԟyc9U&AOPI閔5mg۴1Ѥ9]_ZY#*=lyJ*sj ML|)TsF |zS- !B1H#9@vLI8 ^1IJzeh=GיVN?vvO Z n[z4ʈR1 ;-x<,(vM7X jZ0%*R!aj~BQ [fKӎ:aI&qXz82e.y]!PW:? 쫵2&YNhE;eo H]ucyeяVOuTis])#mQNӓ6FU$PoIaM`*ҘGB M)][]'-,\E(&{zWz]X 'p/%zh'C!+nr)oR'qzA FsjͿ&[Џ(-YB4CyQAaN|8T&΂󊷳WM5Du`j'G/oHNڐPDѰtLsh/r4l5BhiA Ё31͗b@[ 9 *=NM5N7S'f|`b-8NQUvgnaDeWSJԭu Щ[J.2m"xtYT׈eUAο!"53f8= uh2&0 M4XGi$cF8w7#R[҄ه-T߃tupJ q2׹@&<KM?֞*׽荠@-j9Wk.`UJ M DlMӡ(N9Wh≰z4X b}kc*R<45M"dƁaI\|c@NEvޛ]v<Գ2xѱ~'/",|Tҫ], 4>Y{ZiA$RJ= pT,2w aDɟ(**&PCKbX뀨iuFfQ*'҂ӝhUCeёƱ0ߋ^;*%c9VUjSF巑^F)[=jg ìގn͗#3V%aͲ7o{r}HU5-V,<=߮^mvM !5kY qz&I^/yF#[dE]5V^VV)U* l]rJ,GޝGQ&KgSE5ҚgIu/8>J=#̾4Hz/ŵݶ:{16SpQ`|Ks;xVxohqɔMZzk&lS6aS[[-6&rޚVhZqUFƒ&uI}MS*bwdVin 2HRG=͊TiƇgK^ziXc%ۻ և$Jqei~asjxQŢaJ+IIaRϷ`=%Ɛr*ozǑQ;(SvYw".GĤ>SUmnJr/@9:.GҸU Ev.OM;sF,W_.*#g C]]d0&NCl])pI \ˉcL ǽI{^t[\ lOI&չHș Ǧ<QLH}яYu.B;%brO'n78{JkK$ʤ4Ri!5hD!`Dxki-I(IqZeiۑR =vn^xsngNjK6%WG5f-f㡅޴05P-liYqW 8VV 钁n_joj;;}}5>~&v7tY LE`ç>g$G }ϰ}5 )rYrϏ0sx%6q IF"gP)l[϶DGF1$G=*< o %^dEq8siLa>պM8vd{XXK\c 3H9*2Iy=7JQI`2QU`q=P:uI.@G@K Md0\UZ1ɪ PKuzfTh3 ZuBp`TTxI4uX)mMvZ%G%[pl>+y̳O.!)gdXp~+k͑1Du8Os U> ~'.Z UI5ь25Gz~RQO4zhbM9诐͹R_㳽s(b>>Q X'~Xp"Fܮ'sq mYz9=Լ Nɶh YdQu~@)c֐G\UӦLfr+ a!N Sc L${: :uqeM֘ , 9)Ov*rO0@DBhU%&(l$8xAS'cNznŲ@P7'lr6we~J!? ! ~IsO0wRp=pY%#bӤp/@Uv$"X7. xܹDŽcc?.?V&I )xJkAOJ J>dک^WvF*dQGL]Gx+}na^B|s<;#4+:3_scNi$+=#5ƳVuHyWĖP+/۽#x(磈v*60y9{Գ<(no44bxc?S&βKr,</!PMv.DchKJSjDMQש~Тr|e$;=\:aC$QWUγsp;KNhG¡U*w0vmD?d YMN$]90x|5Ol U'EO+f>'-[ '> b 0ԘNm!7w|aR-6|J2خ,a 6PyiMpu ]4ϏwYc{:,۵rߑ(h>U@Dl9ǹtQ5vmRtćl#SF>ZDFh}ǧgܞU(UP ;-%m?FOl |S{ݸ[@m]ȃܹg;W^U{فM8ݎ~ӘD d3-T9Vq%53Zy=;"Q" ;$곗fW#gXҨ'=HRYol-X{BԈzrF}#u*3eC3VQN~ آ-mB/6,Q)S%V)R!{t>Z}ՏDЃUil$0J*}t\ops/ F"A D`ZU/lzM5zPH÷;w-*:Gлۣ&֔< [n6Qgя%S ?״ mN-%哭u!jpﭢ ' <'"&εSZQ )fN?Ui+) zg&ԋm_9 iĠ %(6ʱk֨t aB|1D<)3/ C~@8*N?tHSF}f?7t qWQ&.03wwA]3I82ǩ,Uu*M*@^Gg33z,}#534dRx1sf [EATKM+4NҦ;9g/92$syR,E3{$ZHEU:wrqoNa:1,H <KR<&wӔnOtK@@XJFW/?z[NOns>U̺ [U!M4=(1(<;Xc1N JHAHgDtF$ߏ(zTnH "~'RO^z#*?͆qGR[bvA=ЧPp0B"[1Z+ZB7J}ֈUPz4#ו+ ! y!/\"6>FK!ٿR1Re*~8j$Uq#1 JH$Qɖu᳘M*55X.nG@^* fpLšb fxUϮKO}]s. p+fXU['u?(4a ")+KQj+,8Sa{$PÐ^Fe4s;g3Ew;6"Rq@ cvmAVBO}SO}b?(_Y.wQrH/B-MRؖbgT6i[v"rۨ&~`թC~| mz!EyOY<gy7܏VΥƺAڞpptR5!Bϸ&.qys5Gʝsr=)8Ӕ쳿ԝV+!< ދbiC; *xoڴy јSO+xg< VgIV{).YR QXT%cR65צּqyQzפ 5Za7}=P7||g?8.|*hs>?F#E0T{ßg͓v&Ni|ߔGV6J/ˊ ;S|~k$jJ NKL)wKT Yh·܏c`MgYY:l>@vXYikjz +yQe ip WnKE^s\rU\Ħx5ou:dGa&-՟`ir*W9Rp|1Y0^jL6($yT f6 |ՒS3d9u5hWp)\B:`a m-y3y5 īYlUcDV/YQ6FNz"B%1 J<8)цv ;X۰=;UJLjk8rCyt0 % |ߦlQ' KR&)Q_H$0RO_PHkXC#Afu2F tn~>r50IǸU?{h!DPQUD$Ӆ>ok0U b[ꊕ!ܾvѧT JT_فS(lh$P7NZFL~.e[bpW+KE뭛6Ǫ-ak;So'ߝ9r,ʡD IL"& Gb6cR1B<k*. [HFzF_P)S-Mq(=O^`FFn<%G\̕v?P#~p'=sMck)*' ;*[;- zr"v ))Ulw%m8HK7H6Z[2DjNSk,شUc;FȟN +T>8+q0y)M=3HzǺ:$3ĻBʷw>#S/2lٽ2SBݝNMt "Ǯ{TU24xϟ=7z}v{Bw|X)$PSjhj3y-La o"iJ6u6/KSŧڥY[ M[{nTʏrA38D+fGnѷZ{5p1:X[='{og= 3p2lVS.ЪǢpާJ E ^U=)RidA!v>a˨ Ε7e1 D~tv6/J*ŷ$;jSFm5krhc 0%}=s$(lMU2y(E IܟNMփ%S<C~^ %urU[ Di昆FS7+ܡפO(ϴU:{-w9;;d[ڜJ(R/nazLxrlVfo7NOU2ުU{|L(:"ʅJ]}FI b=km(sk&p(lFI舦KҎ@թv69.vkߡnQ!(%\OfůӲp X529p9=ޖ1Q1ʪ ZUi[cgeNM,8b86,  %ZWT ^^}~3 >R?HsP|:,2&<Գ!N ]|nav@7;Q"a*{X|UktNE*d3|M"UΓ*B{2boQt$eUgf3!w>$]wgt~1MTwJfbz"-y =Z2Ȅ̂,bKo:18j|LPk%{:jF*`/.ʫ8u L6cpb] -e\ÊkCYPBmlThxvn"G29bb>|K[\ɰm뭉SꅏC%=Gۙ[!.ZB$)Y馑+֭YQzPEWKG?RQSb94Q㶸^\C颌e~)8&ḟJGg 6\L)d2i7pgTS*8gLc'-5ezFn0ԋ?L,E2ko3j}@=k̒Ѩ\bFVU۵I ZA .zr3L f5яUEaW]T\J$&a^P.o Γ|@,^G ԶԠHTrB:!wb9,5,:z%3hTBAnDF"3D(JӇڛ8;idƨ.,WOMFbɜSt x teũQkՠTɲb8^bG#0Q2g08u"pc,l\= =Ix13Wp?~m@L?4Uh<9H/CzXjOcT`'tO,ߐKƞPH=1E3~UB.t~Co'M`J=łh?=6FZE aLjp~^U 7ndO@60RA:ˬ+/zT8\΋NM%g.L,Zbĩ{B+)8KĄBPcNNBxC[n:2^@>6ӏjJT&d.ƣaTޫ4sf(ǁyZBL C.!hX~F{㹱F9iEݎAhz]}n ΝU;Cd u'PiK|hmr䌣&IՏvב`u2Iq~"~ ᇆMo-!?&lo8W{s+\zF~5nWMvgxGg@&q m5K ni%iV$aĩkS ^:i4~nvM!?ѷ(xVS yz9D?P aQm0TUӴusPN^ĩ=7'ã:*6׸Bk 4Ը3'=ߒkrĩi0v44JySk-icßZ-OB$hRJG b&ɽGg` Es-$Y9C8䞓+0hdsӦ&=}?\(~ƯT38TʆK?BVְF!N7)0NViaQ#Ls6T]x-KjUܡ@=l%P_i-uy1{vɜ. 3aZvsГŒ?6I˯[%{.1g qvR_d?@8lS`Bs] y]±Ťwg#Yםy/"bZĦ9h9bO@AK,[Qs5gH4.4EGzϙA]i8NHqD֋Z'c SFQ(LJH=J+"-tPh% m|qE"ǮvQ=jsVV±8K+ZNoc=##25 3rs o)4VREb;Xm"ȭy7EE8'rg<MFe͗YgJvjOp@U{V  Q]j$cbJڝ9SnܒYl,xߤWvRڒ1I, A ) $0M|q$Tdn(< ӓi ZFYi38^϶)ɞ`(Q>G+8z޻a\i_ZN{c &׎vbbxo,{C-(.;B]:=+wBZYcMjCǃ.@APʋTz5 JJLYBS<t:l-B$PV(ʧ9k-q8H?e5V^:/Nd̬W1$;M(݋Di-]\n sω*Pdkgn::o Tj,[?U?PZ'9%^Δ-D5Bq!X:&Y.#P}BPZ2-:!9UE޲Q?pt#Ns?8ޥq8+lҵ$/ 1* 1T^`(Gྍn[қF`&9=ӄܖ>=~FO1egJdP:p'.I=MB5 gDnKѹ=bFcLLݧ]p\OWxKi,9ŮSYI eYQA-@YJʾ|g_,Y e'9|6q "4jfϩ<޻M /?˹0J:P~ -nM]r Sd>K$^G[ߜ5Bl%3,Хm=]LPԅ5= m]OreN tW?;l.M`VCs7$EȈq ̾PT6VK?&1Nɉѿ YI;˱J]ԝ:r_;Kӻ3ÒR@Xl +)"?d m y:RKK4$O@ d $_ NDO$L"#OT:7ꇟY(@ S@=WB^H祗!Z(uhͦH4ZNd6lDFft'ZF,+ρqw&غԘ VrIJ`JpaG" Z c\:=s&ᩅ&%W{&FSՈTOq ta3ýUs.`8ZHcs/sucly80Y"j\4|)w[lĒCQ)ęaziGbcX̵_8V ܤp.BaGsM a!Ri 5Ea$%tNNב7S)k-u;()RW-bcyc q?WsEFK^hǽk"T jx[݊Vغ! F1"MS`O3ht{D p C#mZ,9#Fə\d }!ӭ1lxa ^:{$5vݯm!m&+ ?Y[(,kɇiJP֓/j)z{$Ӈl= 3E{KvZpXoU5]`'&S@QIJ c2; IgAdAuct"lm[a8.9?R_ V5$cmv.k48@'KW_<@_0#POmj|.Ku䓪c=j1ъ{pk~8ד Y0¹?}ѕ^ӯӕ.KUyZ7@{G%2τ/VV0` 3Nraq%1(rM*cszIj@ N1Fnjp>X-TFZRqVj~`xtF`ԭۧ} 㩸uT^ odL vɩlqCʘ",).` 8v\ a:Oc'ir5Ql라׿MА"t=Bp&TY"DL:)`F`aL)> ?u=Pm =.| 31ymBGe%8;7|gF/}~z_Z;@8ZRTըcp9UgM^f2K/KuwnLlRݓ  ZLŸ[N%%¶"Oget(일'g̩M3<d3Ux2]pZIy*c)F1,ߎnaҏ>OxB$7CtF]b75 &1g xvCsC:B밧Ed>bԳJ_/F9gs ]CQM;ѕoRL LtѮкޫ OUT#j;k%1!%}[ME/0rrƪfԧn)ye'f.͜wĊ1ĩwSW u4<:wVTKfAy͇#1 j0rws$_9HiZhIbCS(O+AD(B#[fN(p:,:fjteEnR 'hS)CujQvck9Nլ B MmIq)=db2ǴyEjߌHpj{͗я",G/`Μ .mǨ w2 -s(kgRf(f]-qU5wɏw%[1^ѢeLΣIS68cu7=z9Έjs(830i~ 1}x}ﱎSz r18IV [ u֚Ka{Ȑ+FD!='*j'YjQ+v|?Af//rޗR9Ԟ@3MCG-tЊ3J8nO3𞋧fx{Z.)k-6U4<;Fu\gj82o⭎kC͒rUk1Vڿ }4z j W6.ZqLW]̤O{_sv݋ VD @@{QLyo)iW)i6V:@ xNӤ~kjoy*T#<Ӽ1Y-_u#͆Б WAi}3Z[J[,iĿ7SzSKkhA#wҌXo״M'=]zcUr1X₌YՃ;W_o:6# aAlGk1!l[޷8o T"S]Ӆ;*5s2Da hn2ӹ,5jUXZ_+#1~= gAQ(%C\̴-3-P^Zi` N4E3kr; o†<9sam/_S:#.,w-opW@½1J.П<ʋek#;^z*?TN wJ^f`0棺棒:qM {jҧ!臒nb~GonXxudݒ5˵Gxfq|@}  ?ݵ˪+yjc.3ioki,Sb!2hO?6פ @"a S} LB!CA!ǘ^ONVxV*Y X$1њÎb_Uj> ĬMKjl@dbsڳeSࡲgkO 6~4ņ@~1Hd(½lJN}IM>8|{.lGBX[ 0"6ZI˿x|wfCpo}&aVX }v¦T)=.!ےޓZz}*82qM?ͺ7V*8r0NYGLaU (X{Uݟ>Y'nvܢ X]Gw,d2R4ȊFOjf!k:t$58orEb3;f"ʘ\RJߐr+J fJE%KD=% ͋s$Y9a_]8OKL@= .eKI \=i|}~o N!TU}f*fQ L,A`dT2 $QdE-Ra6 w.ɱ; lp%ن|L /ph9 vя 0-j 6T#~,V{|9d]79K1_."ԾH sJ\l- Δ7*L'n9%{7ۧa-E/;mPRsO{v~4ƭ2WBPT7SKU M~dAۯ();- 9l!w(ɶF/Spp-XE_lp 1 ΑZVEޝ#fKV>EԫTho"+mm){$+ϛ_tmPVSv>!'WzA_LBh&?);ʷY}%ǝ>Rr4!;㽤Պ56B0&XVH eQ\YZ2A0Ј7P/&X!a"=|qjg*UQvz>^P!$FcIU(pPa@ n.9qH;H9O8 cIYJ"o7MM9gݬh^6lˠګQ'i5_FL`Ђ?Zذ2E( D%$SXxYg{cϮgx w NBI?6xǚpY ŒbmjO]brGLS 7(Ib8t魑~Ĝ{71T 9g jX}pakde4]18{vZz-]_Q?׹E0 .g\ұ:DTzM3Fo6vѸ~\(M3VASSlFe%1LT<:'5-@Nӹ4(2Z CXKuHĽ\bB$^ Vz[ᒴT #٦I~NMF`)74Ukg 逗V.q4 rCtzddRo|+ErZMF:5~BVÞka|YnSPon1ۂ{3ڇ&vSS/lV!,}?|cJ*RtDPc'sRP*Z1U=sۉ ,K7w;.M6UM dx͵a+q*KgO9w#8 -!%$lk/ ;^PI0s]^+ eHa x/Y~6O"PN$"C(ݣC餖*Y;+~`P-,Q;9Scl:Ȱ"OxrZw,u{6 MpܰƟwøBao-rϬ~gPۧ`. .x]Q5 6n yk4C&9BӁ3;&gȍ/IWN+]q_ASc^6w~ _s[WP%cߛzsdX!K=܀?fK 'ɃC|FksqKI%DJ:O:7G+cYÅ) dzzOUXxtT]b?B=vu(Uvӎ8&'%?BAcI~'kR9T*( i] V۳ɮ v)jL >j!SףL rxEpTƆU6/KnU}d\WU(֠{PwJ/~\5PA}"0iZjR#4hK`VNyoF}iI<ʣ2o|r_ozV#/1Dii/Z&K:m$cReg0hr_{AkNUW52 w+CQxFZk̆3gKh^ee HO×Фx#*J[cjB:bZiδh* =qG)RZ >XB4UQWD4u%$ "p4/Q9*aD[ 6crnWnpyA!gCDh2i?=jq6ش8Dg1RghȡD2놥z~ j+[c>‹.2vBl1-.*׺=_$4ߘ4ռNE'i|a9[jM 0/a4~VRLt4>Fjk̔u.<4ye^U 'bmGY;WWk wAA];|GQ\<<&#nݏ!4|>n/e0 LST@ZU14Zu"ߢ bxϞE͵ Z*9Rv+n6xq u<ԅá(lP d)* 6Uf"M+ptJnړsQPHdzq[8ĥ-8dўĉˣG'O1=IK,r[Qh(5Z9LP0&;>o4s8 KrXu\@5X˷IrBC{_z&5%E-Ga𨧣S%TcYHJal]ܵR-a"m3j~3rop#~Zs\Fp%^bZGw5eJ(sԍ޴*Bؿt^i&"tkɰtٵ=h4 G]JQ6O{X.Uă~$1N3ɣ>vtTD;s>iaHSd㕸x+;58 |+Ͼv]"*9s;T/d)# u`n%~7qf j+q~\͡'Y'm'4œcB_aYꃤVGn(SCFWA7 J1d:zFن3jgGKw+UcWMUJL\JSE^AAG”*cA'$Z 6W@BJ$fYzjzdz\`Gp)lf7}RK57 W.X Y~_Kkgd- Z4 -qřIovV Zt$NJmߤ_猻d;WF-1gf-!\$fdG:&}H%ؓFiZ]uΕ\/(Z<+TU#&3Z|6!7ɟ+tsr>4r UTcL;hf^dYI" 9{"=#@Q.4 n<$>S_ Ɩ hLcV?1#kXV0Qn+GϦIk8nEsC͠>3[9}=kMBSm_Ιy^AՑ֨9Y9vP^8$&ypC=#Mk' cnO =}B'O m-n6 mCǡC !ot\O9N9yc1 a<{,p!! 6AORB(s;ʖL e(%%J{~o _rzw5_ıUlk~I{P֗U3&Z\ 2-㢼$.Vo/$ܐ\&JI7FzizeCRDܗ1]B;Śb; 7Z:-*IӒ.U=Ԏ?`j\v#3-Z;y3ľƀJiֶo Ԋf9e6ɘIX&UˋU  ݳZr3[daO)<{փy:ߚ}j+Þ`/aCâ\Q o~$GÆ{F rLV[ ~cc)qn+-P4m4:)kl"Xݪ*ǥ0c{Q}j̹"aVuP@xk3>4ݩ[v83w6pkxӒWLd&ưx|CB膙誹Ɇ. 8adj3t/&i{&{*1ܻyɴggtcIَTUZ֚ lZ/CNy' VB嫃]!O1=$)_PZkCMh,E1hǣL]蛾"|dAi!0$V[BJ,*M^/j!E%m$NDxT_!qqyGYD i۝qEkm =lVdLV+/NEXT_ddE\וτb\XWҽ%ZDYq)ScI `xYxHvt̢ LΣA]<3_B?;IJ 6zx:2%Im_}K}Ahf%dӭ0K-+B#2kUشrWJ#5Dff7) c;;nOq#MK.}p,zݞVU1)FO="|Bu~|q۹]D|&efvtILD;ɢB2bVvO6m {J10viRѭS0I $oȕq)/Ď9PCnpF;[-z{,DLb6Ftu'5*>;]>]]?TvCݤ$c;!eR|$n^g6+Og{!³.AoA#DP[)`rGnX5BXLRt)EdI 5dɂ "nd(8ZSmM!'I Vl?MJg I,;+E9CΚ n̞`6d:e1P&8 55Qt|3OcӶ(2ڒBo&ZvaN\6-sP;AePT671;=^6j9=O#Ga36_ԣ02:rIA 5h\U ĦKɾ0ZoZ@s=%[vkT:a(r!$o-@e[z&D~U%JFvV:@O4Wj)ܮ| x%C1=8/Wmd[8wٟ2uSc[VAwdrk'-XKG\ȬޔKiE;j@$ghLKk/A0j /3a+f)֬0u97pf1w/B) -100UP[ WA]h 2UAb)kbJoThBiq( Y49KCM3grܕ'r]9.1ɇ<™#zeS2šQh Cn\_L5if7kxaKnti(ZJIe`q;"U1k=T;))[c&XN+rVۻyAcW6wD K^,*ƾ\XxxK99WRj9ZRj .C$K m7 ]xaF/oCPE cMK&-/AJ_<#(mzN&гe7ZLb*̴M/۽Ӷ/,1Ԍ:8Mou>=͏ ~^"V/5TqTu`F+V*6u=؇Z,ސ E`,t =z u}L?Wb;Mҵ7UveIs&=LvEa6f킢 zkggP3(.? K%վzOOyyF^Qu`+Ig %"^F-BZ+רΖ]^v<sv#uxPC_.ўQWךl9)QV Emwb /gv#vu0Ss65>GmЗEZ\QoRZku ϐ|Ҥ&=Xk0۵ڢ×Uk^$rg/ <+u\Zï9yv3sfߺbYz\ʵuRd@S܏r?}sɦuT9 @7NbZ!v O {kv1Tq1SPyVH\3R;~VV%;ψZN_2A뼆Rj|4MYPZqhCIxU|ǎC)KQiѰ rRNu'>br0- bP3W[wBLA!†lK5&\5=OZm3f&VKe8(BNST *@JŹŏ~n,cKtjODqʭ*WF:J3)2(L">uU]KkKU*d" xpj#GθH0C@|VCލi!TebSb}$xHݏ ;g@u+C;Iuk{v}VwOV$bli E1ւa-1y-e;Pi!ФΞn.z&3~Az.*}{a2+_ˁpΓ 5ܝy28srOyFW< y4 :ԔgP^oɾ5I4'kGQl5j˴Z:׋$ktk CoD<}1ڀ1kI!*'dMWu2w1,o?%W]K=m4K/oC@\A ?Ss{08{׵MbP{=*NOHb b$)iѪ*ޥ¯-M;b˓_;A_^LsQeGm>D_,ԸV Tvje~] yI5ZJ&;^c,~tPœWcoQ:xb258ZS-),ݻݍR!셬Rk"ֺ)cybu2:_0߅+߾V}'7\]8tᘊsFK1~SCsL_* (iT`3J1q9ɩ3uwgҖ)A-O:a*\L5eS]ݣ9Pˁp '3IC &y>d\/ߐ)4ȅEbZc$M+ȭ;{S?s\m.2&%?9 [D-xN2iB9 Plb)Vc6=X SjZ"+WAm9ϓκaDS[Wa!RqoԆ՗vsy:[mUUu-/u5IR^ Yi~,_U9I" $X$FϷpeFQΖ>Fi딴۵D> hrq ;@˲v3 t0A+giO_-.d;XR;/;HɀPZDb)3ΩXKOt6P1gq;\Xri]m-ಷN(iq3ŤBw$%}Ur-I"a.As "-ڿl/*sE:byF)8B'u8s FOCyjsi-=tJ6j %^gJ"E/ޮ+3%KǒPoNj?#5I=ci ~WҊVz r=l@z 3/pZIGVU ֝(-fkş3ؔUIXe+ߒ ϮWAmJv)פepW _p%8p+Efʠ^)9C9K3y")( !XyU"*j`{+GcE*&,#D&B,78Z#kxCZǭð8Bۻ^T B+-.#1OrK7G潴ZearHV^-S>K`ymKy ` -ۖ]h'I;ɺz3GKigϓl&zZbCBQԺ%##[cB0[Zz 5`vmGAΝ|ğNұT27iսӖ1bη+j-Ѳl9qQ  &V*4s u(j2ONuW,'HVk].Bdo8I2 孺w,=e3`ۻ?:Gňx% yN[»(%WlUcGnW.gVgjZ^ kc$5SX)c=rǰ!{ʠW@| y:I𢞄Kp]UZ/,dyTYʔ_3ٽITrX$l#ZLaPċKs0t`PTV\)f;juz2$)&ٗTIKD!v*&;E|≹ѨX }c#0:8)t]L}n _8G2bEF,G@"@`gz E'y2SBjܮB$RPm+IA.b̦ e VrW~==']wR׽waE6Ԩz m@m+R (÷P1Mt^E s`B}fgPILY`e;DsM/oDL˥1$z勳yNM)gڶp-7=Qng1ZoGhE=2R ގ{ ݏ PZphD:v* [Se=!MKxr$|0S)8C|.-8n'qPq<}J8pﻄRΨ:6ױ"R$ܚAD# O +~x1-p&MO_EjE{`F.\h*>}ʤ{ˠhZTQݸ+_)N[ƹ^VvN ܏X#Tn+;yw`SQp+mӹ{= / ɊƖށ+⿱2ؘVʎZ(g풬 1?VjmZű3oOlG/D[hfN8Wᠽ0k%5 8"nEaWaaǕ#_gMoSڮ1)Sϳ[U]u[I:I=-n=dta&Ir԰y돣eKa;!Jch3$oY;*_F.hIUiDy&A"?]mFn7][}tV̒5[ҕٙCxjUc #:GzrA](DPOn眈|q=. %2ޘ?cu ?'ob*5']4Ly@ @kt*g7|I,=,v|:O:RgG%H\mPo X۠leCRd=.K; \iخ@+wKx1VHN).iY\P/* |}@]K,PcUVSط\Bh1u܌n\QGYcYriSh@Rԭs사9aA= ,Z8;tGPL}J_ }A}5yl\#|:^ǴmGTXPG{ZFkmon+ĸZz5c2'87֝4{}CK h Z:~ @L}f:C6ܪqpT/wqx(ZC|EJnis[Uچ|2o A<i7umɷwVGRD+;%c\!ʴ3ȏuh×^)U({V\AD F=>S+3Dv?S2KXoy˔QM%–NxB×l>r֞?J-˴omS0j ~XĠu~ϏKYBf[ԥT(F ŕZzS(BoR!Z[ScC?HEᯠ tZo&cf;c]ܤ>f(8ܦP[3svM h u+ "Y4:O>ZjץՄ[hWz%mSftdd y/1yԧmaiUݧYj|Z ޔjxTJ$o{3_ơz`vzF&Bm 2G!q&H0 x񬄵 x(j߮P,[)9[e.^~`P9>~VE_gr'Щkͥ =V^5ӱ1JK* JQPϝ& wzjMB`t|Bt:g医Dt3I$z%a>s^4MőzW ;sl 3 x*b6>Ug.b>E8ad}bP)W{K8 V`/PKϾduNIKdeP׺SP%z̐XGb돫@PPHWʳuL't$ŧާbnUxK)_шt [K6K|NF'7Hzr4fj,i->,2&Ӵg3I, ɬ'VaSԼߵ9d*][-vJ۞G#ic`5m-L*~Nw n;k&8o1-a5.ZZCkh3|bM0~HɥC7П j~٦Iьar%}ydW8W0~EրڏR29`4I Lɹ-[u'x'- c@+' 2$@oa=lH` 9JIhi@YR̋UZUZ"f1z4T+-sk;)|勈$a~%ZqIa?oյ9F{ ƷZEy8!঳ΑPS1C=U06MW =WA^u]T'('! b*|iI`djc~@ώ4ntY+A$ ,ok%iZ]W*JXfؑޙ IWY"eվB&}$6]+ j C!sht? ђ%C=ъql_ ?XK/[j.]%zpMD耇ZՆӾ%OTJ['ZKxa,ѳV=` w[Wօ,ZXqzWc< j+SР2"iL^Ջ/9oZdDH5:uIigH T%x,ISg%&kWVB&CxiԃBW(9h9dj,>w(ٺr"ڝK_>Իΐ贩aoA~+d/+Zۛ0œuh{ !D)sYwfB.xz?8u[7H2]6|ik^s'S[mS1)К,Iu:?979o(|>FT?EXNUܥlO͵%)#].HBa?oKɚ4;à|sy$т"n0Jy Gm5v'!56 ǥuiBBV6$RWUJpʺ4 >Yofw*`g׮`gX45_K+JGT%.5Mđr[̐HtۀO-BhLI=͛!F8s'AE;O/,H&Űi$qE(T6"c:/:G/A鍠^"МSP6%G!wU׾ qf6?, f׺6e1@ב0 oÔh{X+!g,{m*)im?)@Krv.L6 EGVބ[O*#j29O"n0k ,-5ӻAuǡn;@]'_x5G ]&2JCA"##ƅUif qX(hTnLCx]{"=؇E=v, uc^w(zW iGj4/C S ].ђ@ZHzxS+SwR>]D: -_š& ۊټD>>3ˬ੸:q2-{/ 92Gwd>ɪQ-}n O :2_l+'|_S^oq?^]>זtl{2 fDjOϒ"ilJj*yn߬|ƱW B/6ľ㉙Iq$&U+˲ ׃Ebqŕ:j@>JA]dJagPg1.#I %U^ 殴rJxmtJơVKnS(t|rdzHo^\m#-VhF.~Άx?L/!ej̞1Н8Ohk(SelewVP}HgФ1gM +ZK* W MS/!#$KQk)=rG(HXP+kd7`^I\Ia3${L|:̘h])12`{kGkȹ]E- -z&5071(h Oޗv %g(pn#" R7;oNG٥g. _z]UiMMK< RֺFC4D5L-MG6*I =W1{JکTk2)5?r))a1Xjk!Fhf/@? i֭zjePϵe|OچQTe-x$Qeuv|*k') EK&x?k|Ia[22ۥNhL%=-{*>rTWpz|JNwȂp~:G锳=CG]ݵeuC^}TEK͔20 삧%/_Y.4"Ov符 j IFs==/PNyE"?-;^Y3" Px~:""by?E}]fLΰ#0E*ْMq8p2! a71=Ne^Q/3fOim;.=cwYɩ' /֬4ăܤp8rUWw_DpzMa1 )7oEZ :g&GunjPx@E6DHjՕ!7öwunmta4bA?Pz͗(iã-@Q Ӕɫ-De0 ?r k\gHbMnlQ|S/͠jr**^LUڡ^;-' 6K̚S[7cS^뱀EA/b` nڣq\&h"QW vluț|4j,NwAmlPDPc}5oAJȩ >}uw)-\VWH8Nd_$Krk$Xz %.F201EG;Hks=<-]se`Swt %.wMraW,hGǖ-\˵=\,ejkZLPw;r n(X"yjU>:8jJΆ_V"xFq,lp-ڎ%L] j cɎA/.;;x 񕐒 G.ai;sʒoZ* -[`vH7Vd՛7G@/~|&̳Rj Y28gG}وlhbQSKᤐ^ jtn/#?W нɍb>Qc%8qMev+Ihq{FrnU8>2!?f"7tBmX?8[ړC[zzyj|TV`m_˴}ctջ!ɖɭG0ԽmR[ D+Qڮ_SWhoЌ"q]fmTƶ+ˊHz - }[~{LJ!e*o䡕\] ӷ3bU&_ g v)]c_V؇']zhxvL"qVF[fA[Rw.ݢb,PHʎg}ަ +TNk_HtyINШTwhsxlkOS^8B6u}T(v菆?u+`} [aV<0XJ6-n*xc9םz֣tӰ%6e|ZQ{I`6?6 L{P^0mҿu.W3,`c?=I%gqZ^FU\;35܁LtBT(RfS ,c+|M-E&_yR=?f.ADՆ}_RWpޘ1UAӷ"kŽr֛ZӃ&R[[1$87(*0+^RK-_[4FRPψM_E7?tʯ6(6qN Ixsy 8$} Ȑgy(mPz3vP>==`vRDyۡsGOu'@&+TP1HUֽc q$Mi ܖ(k>\Ps5e$/wt J?.H&K:Dرnlr4,Nݐ[_i},^POc| rhg訝숣0Wp#8hw|&]`yBBL6 (XAmRE3cYGҲ FoC9;j=: v+P[>Gs%V"5JJ @E) EksVn2޾v+T "$5ņnjX1dһ[QzBP1QQP[e>%pV yEEƣj [, Ѿ!#'@򼰚QwO J̅c5M/lF3K.>aNnOʚ .h iEY O4!"ջj{ a,߄J&@~8Cٷ"w2zMH? ~kꁙeZ`7\M\' YChfdRwe}FPOgQAw>$QGpJ 7͒ky1`)vH猦o+)S2N{CimZ#&BPպbtqDc{=c"u@ϏA=ފMADg!vSA;]wԵ7i-o4Tl'?*V(tDh:g |sB3hV^X d]_ЮfjѫE RjW8Ag)K6zfܒ:hE& 5 Uj⥓-!{jg1})ֻk-#rg ljͦV?W&EsYZw B|ĞV3Zllj,tLh3΋htTY) ͌T- M+!F`}om=ű{I,_\navO>&kSK H,oK"܍6Ӝr05zt@a26Kǧ^~21SPۃXwe' 03m~!U6oIUkihv6MmD;.[E pWzFfVBXbY9긱4Kٱ_jd{kL 4GE(gG2}5m5;8fHs9Z.Jl{~ip-BpzzQ ?ѲK Z+Y͗Vuޗg۾i-W Ӧԩ[ٷ =$6gOxj'! 2D_s+sR3.lG8\A+ k|ߢx3Z/]݃GPRrQV_CE CX:?Ze̯]3.;Dm]%d;ugZMK9w߈^6?~ῧU]UWJGLk]$ RC2-]$3, fLivnExTf NV?SGc z{(RBKxgu?H9sSfCW@ƒeq\5FoI_͚L~`IF}'oBI7}PY;.K 﨓xB-4o8L`+!Xpl.@k] .[0^辛]Btq]2pęu9׆GF*ɫVT/\hfoy9V TGXP {? ߦ/fD`ƒj PjYeyǘwa//&pшv7MJ ?]@" {^R땋.ќȾZ M`7NQX*7-yPƧb1^U"yUFA J]=au^!VBW8ȝ v垤_fǯ 19o-AGlH¾/IgX ;n ^к;b{ /awf!Wz5S"0dD4O:ynfp:tpAP>E#1IcˌMG S %KϞvK=B҃?vcPrMOb!Xr[!AJ膎j@nr J4?a6i9ं׸\2U²ɴΠ{(W^NC8<_:W]zJowno88*3';m$8lA>%xu%}qdˎio…V"u;} _ 8U㶥nG$Aqfa._+帒. ,5owQQϝK9pھ"T-q嚳vLH]J&cp M,(݉+@Jr{;ٖ kwvBvgWpvibqEtu^*(v!ؽI=m_7Yڣi<$72Dx`LE=͚ #7aIڒ;׹MkO 6ח$_T6mܝKĚ8Bz-hKn.d{o9b`>ȓұW +ln63xt1=݅Od %;Lm܁u'",>=Fi3 E;wNdYS]:< T~*I Ra ~eTaa28M{ؓ\;.ƴh zIR4`榈1 (E_%bkSݏKs miSZ:_bVd;.y鲨LA )t^$^^ ~e|"jr2KoEaHnEV~,UeFpjXvoV\rf_b,GOךַb/,}朙 ɹh WۍԊ >.M zJZIxުJ+]z!B nYgTYW IMfm d qi&YBc0lUC!qGZսBO.,^)ZK/c{uJGx[ъ词S5j4lBN'[zXi!Ta2\kH~qVuc1R6mDžj~gKeCVH"k$#]-^CMy`S,-MEG4ί;C:}5Νr5mތox rP}2KJjU4 "@ J `;29-cAL:5g^P_P^]Dx_ [ sg6՝myb*PIYy3-EJv&-9G 5^ld>"5\t^w g[1EA+Dx8)y QUxR;]BoRUg%r`'Yb 2<%A3 \{fj0ng:ɏȦb,AM7l(&u1gRGLjX~3߷6UĴgVq\pcri?ЎcEv3&_i֎l\b#T.=XЋX_PCF/2%_ * B>+Ta:ٛrTn[̤$h*Vh&EGt*{ӾL=T2Fmq9}r! ոAntx-_'L}􍫘-B=JZz{wvcg>u)@zDDi[jea*#Ym q.an9kJNY]|/wRuI&*Uѽ*VdM)i۞ 5[/ " cȪ^ G$L}E ˲dXRQ BF4aԃm}  ]L':*EA=0ŏ10?廫1I{ 5"y/#l?Ņ0KZm^u?А#*(j,mXI!YANjӾn('Ίgyg:h_P C|j_77Wx+mrkX=#Vzq>YjBF 2"_Qa-4>JE ;naFSg\ wt[h(K^ }~F@JȔ蕫RA-˛IQ_Av;kCCCґ )w/#4m-Z-n",KScUm9 G> FT侁pd^j+SxA=va[_$?DžH4֐TRBT5zhDX v;o~]]Jp(V7F .ZC_-56+}L/+ro1e Pԛ)\;tK\5,E v@!^ǾZ.ê&lMC0-ø3ԴEUh)~NԓU8 L=SD6/kjXŶyaߞfXfrB),kQН#ExU^Ʉ`CނngT׽c Ԫ4-Sx2V :2_XF!M1_UIlSC-+*Wن{?nOKRu^2؇^I.x ,W=W 7~ouOjkOEGQ=?VΣ SKoeQ{4cUS8LJWžI#C} B15BHΣ8v:@#v WUz|2:0hd{Al64ϝʟyXV TxNLNEFz<*r yhC6 0j61 !nͩMZF0*iK2,]nAP}bA]6#LQdԧ˷6-B۪ S42ޫ) l,Q2ʞ0o$n#t?R>x݄i2H֥޵un8NN v(k߻sTu;(\jcPrq^z h5r:HѤѡ{1§T(Mނ].c2^/@w2;ZfXԘ&>oCTѮ1!SھDIr3ǾFk721s"ؿ{>ZMCUv+4݁4KL-ܽ8bJʷzDZe[n,[ij4\+S&gU7iv< ꤽ vfrd6jauslF/Q37iOZM^UE8C ,R4(( \O"4QV@J-xX9J775KMcrp;^hLԤ/W02ijA xF $&Iϸ)7,Բ,E8j3";KCNY9ia*W! ^En6t*ߐ#s%vږ:  ]&>߻|LJ&T״3/)e-LiduOy20Oď'N\+R\CRSV) FWzc %D  R]Tʑ j4EoGAܶnL'd5P%&{]QtQr}UiEaZ:BX|pæ!DTuwZ |qlaj0|¢A;%ȣdJ\dWBIW%LDڵԛRl=2:S]!)#wmn809T2GWٝU-,r%9& C9~拯RP3қR^/hrhYZ WZ**6&4,*^Bc4:)7q:e#ݕXeYJ*agJWa.m"b7(%#9|nh[纔))\h\"i&[,m$OJqTaa!=-HdJx-6~s#ZޤjGJ`GZwKV j >KDc 㤅negkI晰Crj#'] =LyJ=*XՅƶϤ SC.$pW"+SqOS|mYWg2m[Ô^6/+w")E\AF7Ժ}Ap#Y4l>Aj]VצgaՕxW] hII/YBaP$v5pVP&<JFqnWnme}204tt6>ý3Db{D?,A8u ;R8^R fiCCt ^hv%l ~Tq?л`PGP{[xeg"YҦ 3C5ona(9$³ۭ%='MLwRksj쏼SEW&Iv+9UsZq锫;MkT^m0Nv*1PSRe[]N#ٹx8v \jzq!e^eo'=# aP%Aݿ! ..ގM1%Ěf  K%W Fp NJ&[;`~`ƨһmqv/Y2(7m}E'qMJ5!)_6K.VR*Sqb&KϛP,ک|ZжA[-5&b[zm\sa8/0lJ˝ W+N /7daea"{5m5a:}vy|Dg`__cnu|0HFWL{IlދL`(ci*ZK X:SHҧ셬*z0G!,]6z0no5gn}syp1˕^?\w`ݏg1ڒn, cբPt#V_7vV)c$=9ef3y7noHlu6epm $Z) L3m@wq>筋gwQ~[If{M>=l<y2/􅮛g/b18=7u-PÖM x:J8#,dfHNޭL_4S<&£\\jrӼ'I VY" I4?|z(+[Xp/:]OEieS+02F(JEbzgaJ['u |>x"M#7ﭠ5 rQ*%q#X G¾.\x6`SXZ)Th{^kH?&"\33xh'= VuF!TX&OFM3nB&4pZP-0OOu!p4ᆥ@r`G]}M `-mwu B [bᢥsHu]|U|=_яđU䢫/lrD-^&vqc]-u/"!K-1.}5ߙ6jX+_ґ 6CuVE,/q#pzQ=e 3DEGJ+)S@r%%Q9-AV&pǕ n%<1.x;<ߦ3"C \{'O^ruZzVX5^s,ekt XS5ʆFc`(3R4U#VlϣyqiŸ/s~0 tMEu]~a1M>ة=;D߼%p]03€}}v ݮSSFoᓒboC:-Umo~_ehZ QAGbW此aPIhq݁}R:)LV+{casцMc',UrKhƀneo ,c9%|d}G?e$VN0Imo'gF 8۾I %9. 0ZF~{>ĩ11P)oi޼{+I<ƓhCh\ŹSz[h#11+3,›C?حCͲ9ڲ{7v#Ә)m\C 8oyۃ0SK[;+vr Xp؁n!kWݏY#ygSճ#Ts=j 1tYD-ˁI]a`5S 'gEbLk-)@QXF?/Yi a>bBTS{~Q%my);q1fB=W,~wS yj,+f艋bk|>/zWPWh~od>@kO *o¿W+磆@z)E58ܵ}m\ MgkUP\?1y9=B\CqQP%;ӲgH^^CEp{5q`WF\ ABr8@ZG͙&67[1/m܅micGC[]^HM=&5 * `,mn|ԧ d38^eKhCiW`_-W@wms8uG[V<'uV#]Me|WGԢq6 (ۊ$6+ m|H^xWŕ}{MGeo6ёpxą!yJM@ ]+ESz?dԴ_fӨ޾&M+)_.2Vl';8:#)E)٫!ް}٧ANJXRkU!F-̳!w))C4Nh{~=bHq2d`X[ (N2u;ih}\mUIy+j"lUBšWY[)$b_X҃\o)WhP )hAvAE{=X boBRktpnW_^_n<2&m.Jt^,z?YL#giCd9ܞz{ݝI5%d[7u0;GHE'1 uM+x/!Oj5|kA=?2ԝkk&i=UhFu<6(-*,o-.41;;áFh$z##W9t&b%`ϤdL cP(}HS1z ]zZ\:iq1n{J*'R(9[(6Wg{}&qRZWCKLG +ANa!e5$ֲ%.0h;'ZMYspFlz͒< DB BODq35j^=cQ: MIHϪ,;Z<@)xTٸɑ@]N2DR=ɔBvF%FzFd}KMH͹t¬]ΦiԮ?a{ kG[`U(Am0pEJ<yVܘLrXbL*?ybg.tMHLa.t{}|jEE'+ĕ2hI J^.*++Hpj#J>͔CTSǚqM>5+\vlH4l~1qZ> ;}瀯 S~lϡ>D*UHjgRsrrv FsqMX0OtUZ x~y^k  K'm&xBh2BD#VI9n KZ\͔%@ܐO\n18C=I?%HUv;<9 8: Qd!ڕ46@T5,-BO8"ް2O5;yŃ{ 6-ɎuJ|gdT;i`=z/8'6io/OPp}^]lɎYRs^hI.gsI%iL-iZJr^@ܛY75`Ay+8NQf91J?} n^kN8rƵ_y!<Ŭ#{ nzPCcKwzzg2}XRw$С|K1}afoBXϭj9c͇G]$KLwp/]6UB½i}>œO-Dw ]t7t߉|iɏoJ#o6Y &xi5f>]f~"]:փuUwa(V?u{(NYzRKR% tHqa1C4t%giLp" X%{Q8{ɥls| T]`dJ/Kvm\K/8#\ ݵݴo8˛<,2L-Xu?{nWN kS`q ;y>I 3W> 䈾۔ǀ}W.;2+P?g$|U w$_iLj8֢ -sw f6i ћt@$&5*WYy28rb]dž<ҧ]]6KσƢσ)0Eſ5&8耆sԯS0= cL I,$=6Ekޮ e#ar$ veHB⚟^Gq\4܎&Yu.or P7d)srIE6Zti惹/1K[ ijToܿr/˯).uwcVR漑 Kg1!CD!T}Ե?} )8E]]~z׽ӥiϒ՘/r̎&O=s}6ps1U 5n'akgaF9~\|;L`M}HLޅAq<yN&"<2 Ng@T̰צbm1gk}M/Ɨ泧.^"t]|J)=y4zb w8ay,ҭU $ݘ>L=ѽo/m&Uҧޭ"cRb͐p2mߪysS 곫[X|}Z^#|T9LV򨬐ĀDhIv#%qd{4 bܹ7? LE45s8dDžo;eMkɹ/bڞ#ՆuwQ8$'ު.! L}ﵪAkM?"bzֱeQ a=~MIw_fD~q^PǺuTzto0tHq)ުEvSE V?,2-p5Fn扌BqeUZ$W/7gk߇Z}A=f} =]vg{w)0nXi|sKU=9Cm)UE[S)삨+%3SP7lIQ FD[Jb (ߖ?f &?Z@ 0J)8 xFC~(vV{5ZBR, 0 RYaF>P>Vw,9|^WG ܾ;T.NOܹG$;v_u+MlT?{r]ץ~{%I? -#}1ALb" ~~~jaAui|D7#K BorPAyI|qGFU%##Hqނ_pԾ0;BbyC?73ْ\j,˃9{/9gXT>o{ %9m 'w0נ Ey;w r{р1]ݾ6մ^҃pPh[]h%&z߲bwcrnu=KҘAvӐb{`O{\jխG^I= o798Ex9I듘x)|~Y%~0[J>VaPִN>.4Y@ƒ seQVj-2^].>y/{C5sg,{(˫󿠞TFPOMe1dxNn!z% qhut[Y-`R_PɃhB#1B`Rge]_d쩿2$cN%1ZԢǢGΑҸHO}*.śZ;|:j"Jۇ?xPڽ/zIMzkmL}RP'e=?EPgU GPy~\/導JVYU,xWBr6T /~P:*mXyԵH}Aw w^lDG*2_nVLΉ5}AF&-ԃ"<^lKQj`oX{wVc/L0kXT}O0^+VgK֗PQP = Rhԟ-|C:[ j 靖'0Zj j |}\0u79x%[h(SۃrI`4ux- cԃN}BO]/~X$VYY#X{>_Qv"EM?cX]CϟAXa)u=^ZeFr;:u|zߒbx*<0 paTQ}[ ǁkTvI^wjnÉ%V`/XJ]tgá/ej(Gb{/j]jxiH&hI r e\B,Zke[PM COZ[xҧz-8YC[ cT&_i{rFvJݏGqcv4bY R3)! .f5ⷯB~"T:y[~CK0Ŀ&AG#'ڠ\=AXz+I&g9$&(ycrዖPe-ŵ==QH̆&*^D.tŨWkcxm}c-w.F' A]F6:OrԗPwê=ɫD -NJܷcBdLm*qw՘|4$"9O➢X83/-%؃[z6A`W }L~g`p" nZ纕㮪OLXui6m8*(*NJy.\o'~WNTûd|L%cƠ.2n|Ck__Pow 4P㎠޵ԴBE$1'c(_=^+[Iȹc,mڏ49vrޖz2_KZz8 cG=zW ,U7Cvj9RO.JV^#in8X0b*W0A;ZKŴʸo+2wN60bڶ#l /Gupwo)K{5ŀЦWlpw'u>rPIO[jP47]Py@Lb>OOPb6zw$#+NiuLvp`Dsji!P|4R=~(G尢  ĂϿ*83KOl n}Jܖ J3H9=~bjKi]- S<#y5RdžnO65S6Kj{HJ΅ ^ DuGj?f5HQ'_٤ZHtBB N=w^en?޽!,rNyc1lbQTb>XR1[3B}8x{v%;^ی29\PNh{>{noXEPC|]jp#'sPvR]ǸT^1ftV.Zp7X`0tnMskhޡнcI5Ң"|F\Q coqJV`j|OZ);'I~%s 1*}Sraו/.'jSP %G .=.cezap9Z5}t$1}+XCl&35D5^@yiWeZ{C#&[vNi/#>Vw*q,X1t`9*p[[;$vmF!S)jNXhoKfK$TDrӿtuЅeTj|(i ɱgFH=-M:o M!bXfP \-#$9ӭG]USHSG$Es;\HjlӯSs[Jg"X_х^fjG n_q?jI7k.(IDf:GVny!nNX+)>ޤR=F.WwًloTޭ-x r!P> ?/I0ҟ WhG-)+-4n;rGmdCګC}0Hҭᛂz jD.wm{ [ϝ|%C^fRh³~.)qri^U,9VȾ+ݾE-5 ${-1&fQ>IlSMY 8rFn+ar]vl%ɶYQh .*Y;LXXVBM?wvaw=Jl.(L#r8}hbBw5ͺLhEcЖ)w+{sZu$]Ў!q~+WiB9.k… CB!3c쒨]k_tmpAh($"=WӼ9 xT-ҩ=Bqgax]\l8.I1W:<[ XR=!EN4T+1gs]D)R)rNVH.itٝbsmK"Zڲ`NsLmoLļ|- /IVbp1mי (6p)=NE\,vNmAk4:T:z0EvE8:;o|[PyLn~xMEF/(L.񕖞EMȬ(0'7I2Z wZعEzrEYfHL;M,):)>,6+?Vt5敉B=F'2B3\C >VPς ߚ[GNF`&5.B(1» e"/ 5mqT!R.H0nKXJ^_b.\b0͙ꌪ%O LvKŽؙE')C%CNO/mN]%YN2=MZJ?ZSHb%?ު˭wWddެIt 6= ej_s=kۈ:_JyC}A]Ɖ7ӧU"(KY'gvp*nw`SLkP`P#+bMxmۣ88ow*.-EQ䮖ϩ_4Cbr9E#_rq9zD0.;n%F_.\xnī~TDsԯE뭲Ӎg./r D8VMf騞 h]G &Kt(tVkMB[)p}KuDuG0=Ɇ0m󤴽蕇6Cf\&"XĦ_jTv*#٤~ṗqUoNGOXUD w+(xvhR܎B5a{z6G׽G-8"y]\?K]r4j !PV]!?ԭ);As᤹& Pݟ L 0:zb?ޒG q* ɽhNA]. ^x|[&116BEW{].QȠn-G"S6S n7G$T^A[TA%]oj͔gvw ˯o%xYl`Mܝ.Lw=*} uW7Ʀ ,w q=tC4ڟhKXbq^nWnCJ/:^'j+@_u%xHhT"mW*#o_YG>21,#K{Lԣ4i654CE֬>>'b핢]?lXM>wgi\=^rݓV/o22O΅]qjN?U} $>P'M ʮv,yX"\O9>Aٰcʍh'@מ6fj{V.L}JcPJq YAhg)L5dG.2_4HMnudQ،9缅 .4C/(n >evc'[aH&_8,ʠC-z;Sþ F ^ (\h5wH3Ee;mX["|\n-彶B֞|CDm؝CPFIC=4|q8\ӳ3'A=ePo8BkX΁X6frUЄ}t)Ť I4sc,n;el}t "Nྲྀgd&uፚ&rge~cTR R=559CRQj]3R&;]c 3P &1)/<0Ml>hއo]P"wՓշ ?601 Ahzk8ZYWƾ|{5ZzI4_Po-{_'rEH>-,bamLIjAZ; `h*.:[o\wcSiޝ Oz20 ӎp.Wp]fWOjXؗ 8ͨ>FCm +_I@ϑ:o4|A*,[~̔7QajBVnLb>cB0S3llY_Җ;My:7ܰZ_5x!*mFϩCoo9]UX9GȄ8AWa)“3EšpLv"w}ůTpjԞP-inΩ;΄^mg$^J*!6Jd!ĩV}e }^/lدP_S8sJ.TeFBmkn| ?0=皺ϐW ,N-CfECh ,2!r 6m6<*5|HwX!i'~`^9:6"vWֽ %X8ҼX05zWAm)5GN UBoYL> ,P+!u}jT"ُ6>`5HDX]*a8P-!l:h [)%C)~ N"}+GL^kzI!AڸGII43',rEVDτƸ԰\ێ9yzAtT#Sچfɋn{G;I#caVq ¸6V)Ebly ۵,UE| hsFݣ.㗜!̰Wt2b? вf>wv:wxaqwjn =#DwؕƇ:`9X#QQuH@9iK|ˏ VR!^uː Et/_C ͂ʥ +NMolX@V즛@ :Z%ICtԖ S_cKQ"$g9-ӒԟxJj'f%ı刿+o=A?%uڶfϥ U4 wZGg[;H̤_}ݝ-U2 U \#F'zF1XԓTNԣ jMPߛLi}R#Vn @La"YtRE4tp!x ֭ւ] F_t0 #gexQs: Ҙt[(ˆ\Փc 1Q#{-I5ovYp4t"gN4 ֲiQ15*-Wp?Kq֢ $jbB]R!̂uZ++' u,`KK{ˮ㖴hC%me.D3ޘOG6-:ƿYM) ~;)oջ=m+U*0"L -J3c0nW4k8F=t8Ismli f5 IF]R &yy+8`t;lkN=#v2+:Qz2 ,.bT^@Ӓ@~?>.ҕ@U}MhmdWR% C&gHss۹!O 3Yv.G @mK@xsjH {]cQ':gPxi2ז!6E+;W_:BD@: { ipB\ufߐ-#PޘBd?9K)S v.]wPFZ ^ˎ ( F.EC&EQYP62%fecA"gW&Z|i ]i$մnQ(7CdW@+別BFI`.m*L VG àOUBZ% 0}н}2 Z2c=7֩Lm"o;edpZ\4pّ^ټKa{$m=$_wfhאdϊ2Yn}>7jzA\8fWѢ ݇)a=!EKͅI1BžHZ wI@v\*K0 ^$X1}+@Q;6'ښJTώMJc<R6E[0K.iPR΅XB  XZ|t$Ƨ=~ [[驒8; uJB3U+jӨ06.9@v[j9Je&A߽Zb*k3Xĸ݌3ۭ.eܤ18`J)my >2KjzP==“m;WfM߁xk;$a-)w2@w*ZBk_qKl`p7fL:xWfzF2p4RԘt_K#wKb̾HS7~_k*ֻi#wRO zXY Շw(;w_)rJCdvUeF'OWڻK`C[O6` ֖/_,HːƢD8B'pLPAz!Ud2!F'e(*=gZL}3@˾ɡVjn". SKyUbۓ%$#T#.ہSZ.oN=6WڞS=]Ae?TWŢU&qU$dq--IXy;hY U齦Ǣhud 0N~ '=rwtj Jۃ+6#m$QiTї<| rRJR7\z0iZNGI/]ο0{('B$݁e] JJ0vMf{D‹-3;hU]^{cAIj{ЭʮhTlWGeUo6O#MYrʳcF]?C5g 9޾sme%0L]QghҾ;4=P;\68$zYɤ ֭Rf$15BƹOҒ\G q|܎)sP&g3xJgQAKeD m;i.+HHWܱq'7$x Q']u` ?N.ϕTbg;#Zaq;'73F?Q>à6n(,|sdz~}/H—`gߚ^9~߽k{5 TTVIdGBUL;qs8[I61 {FpZvgij>GS2W)]%[B@3cgBi?9Lܯs]uī&4JAE&?$7YnѱTזn1y+8_=rnL#+ RʆD .&g{1n%Z(])>^PR(9&[ {~lo/u}-lYZt٨.Eg 5]ƽM|1+~9m6YL/>m/O8COV]7C~F9<m&ߝKYi jXmg[RԐ5gIM`63Y~`8M3HYA[P䋫v"CFVV/tQg盰|AmY7{~]+L {]u;p-]+433NK{;Njsfv57Ve޾+1xzhڻ8}/!j =y `F W}yGf]CnؒLmoɎmwaPa "i_<4 o9,+h8O8Bu+#{<^7ϼ /o;s}D_?" ziԟ ^E*bo,^2w઺l4҃YOJ2yZkss0^ЍSG2>a4/ hA_?n~RB%ن>ug'{E\r?#) l"kD.&?* 38POҴu?V^JpFcvNq]vPԃonu(xu,W{*9>Vm[wMH ~5ǣ>lI=1)?i%Z]\3roG"lޒo+/`ǹ( !pU*G蔮\7xו-V\dWSCLE-;̮ye9ćQy ڥЄڐ|78h!CRAvUd_P?m%TP?s/S?)/ 4zGii)ZX==0%F`@' m:X : tPqT@,,4b /jvG- W̨&^YV.^RJg5v"wsWقQ~5$>I+LgA,2Zd 7asM-dVֲSPgz;e "rY Q&Ӷ$syqqUMY+WIm~A=K֣o @KC3x^UrncGT!^.kID9e.TO0KR$BdiNt?0:Swpnq(t!m`X:Ž\ej{f假u vXN ꙝq%t6fD5K·^?4 5YԢQ|9]zQKȐmLZT*\UEװzA][ 6RAR7JXK8<DijfF̭֕ |#g8]d UW~?LwŹ6X3=9> *L,U?/oSϧS-=}- [2P]Lz'P}AAOL(x FjnMc. ҬGH-ܩ\Jre+r}җ|-&cDqҲO%#15VVC DJA2O^tT"N:/ALV{TZ^\ٓGd7[ө$m@, k(&n0h[/WՐit2$8=Z/tưIBr5KXY٬OIyOyZ=.y ]qn#U VPv2ִ~)}ݏS,)SתִT5֭YNWތ:r=O lv)B ޓ0+"ՑJW+du5L IA oLD`._6Iw+I;؊ؖznA}Ԉj}ņk|ˤp8*~E/p )9'_!crjLγñÞcr?Cش`gRB>;+YV7OU*+)}V4zJȹ/f4ʈ"n_ wGsN|6혤J:r}3zbM;*Բ)];Njp6 Wev).?n>)rD_рATp<{vx;Ԩx=_:K?W|A]Zn MkbD3bء@S~WF"P[dڵ$qɺʇc 6jZօM&V%/;㸗x@tiGj$b/,-g.!"TpnPnmXD (͂jHܫņFeBfqT> .m\~g8Y4L}Nc$P KJWSuxVS|{/ ۼJWI]}@e/{'HuZk%8zə q>0d@]Ƹe~f'"U᠖r^>2[.M3(5bX2vQ6I@dE-BO WG\M`aXxӸsFZX,j {"J7w*Qc]΀8"ڙvD>N8H4|kn ZPIf־}L<5trL8vkaxH-g$enOHczwTPw6ء)E/:o'C@o=6(F/◶ޝ}I-ݦMu24KJ1mpKϠC!.4h˲J\%N[]k3`J2WIiܞ,=#pdWl$}/֥:úpwp.'ȝqԫn)BL7N&e6_I4lSsI4DSUzÎJ!81B G5\_\wX{Qչ;Ehِ5 pL -?^78fp}/1N5y;s-z|I5`V 3#‹n&U"5Cؒ0͜aЀQgYz*Y4;mсN"Z0ց矧yyek#[t8(ɌnT7)ԫ܁ +6Ŵv45lѳp私R~-ҷ[tAmT2X ' 2,wyS[jԞ*lMÉ[,իd3&7 M . %צּ`*ZجFpS~}XY_0.;6GW;.}ja !KԥnZOmozb.DNJ4r7QG&HRiuż%(y):!deb̄n%ZraFe~,^yZz/*1~1P$o7"ꛇŝ BɔrI*eI>sXJET >Wh+;*`=Yc'Q&p R1!Sj`\pUTzCb/Q"zj,\ֵ r_3<< R+Do)?bi4*^,ο8|JXٸEP{{σ i{I}.mm=<5h;O3Pc3Z%݄Zgc:%tji)3T)mY͞6mQ}Ic Tk+ ;$7ܸf_Rڃ:}S-`b X 9O=]JO J?D;p7dmg +s/NCגkbXH1ܰ-=şWBz{8-Ev꩝A I񣰁Nb-Ҧ4Α 5_EUٲAYjzqbHí69pރB2/;SItZ(tKA]cJq<1|ف/r=_hY]Nu" ]Je3$M:C*`#pc]ntgOB@ l`NO`?6vrE_is咙[uLWé@pT4!LaðGC3p`pů֢x2o)ǕG?/4rf[M3&BEe T)5eÚ ogBdE8ݮbǟtJbbpPFD.Z5.D&[I|ù /X$l{ir[IJ^ɱq7f w'%+²3 v L@z ^ ?\#05`S/]ʹg& `0[RPCnJ\p٦܁v,iwM9/=s+TT] ྪ.DtQ~ԡWKpq=SwJ%H(Z!AF'q~CFJ8ɀŠb#nk9WƫˢWi]筛R#V  -HwHkQEpљ/&||jg4fj(j;AF2 s=!f?Hה'A]=pOY%%.+"b))ZAKZgC"F BI X?9۪aCEtxw0CEZg;h(*0,9MV-"Iܡn4W:94. C Է8ɣd]_P2~0yW5V*Ug6~l0m(*_+4wS`fm8ZA=ֺ:Rզ9n`f^dM<ކ@ ;;nکh,<'E99c', t$_ clÕta\y5UX2ӵgiDmvňv+ІKK,Y73VFED83mP0*,G䗬F8Lp??l~AڊLBŞhMWRz8Gnpj͉SQbn7^NaUFJkI2ʲlb #Fx;J=Pw1`A𣮦 CWz" yhGAKkx~Um7V =.suycJT *E|G2 ɣd7!ϢS8^7څXUGFWїþxwώ̜ Ïmj6v-Y &M;\w~td;i 345\3+selZp*jb}@{O5  W+ /R[Y>#%^yxauu֑|0ՓE7V40b1 ^_}ˊSȱE5>IZzuc  5 G]zwZ2k1t.vZ˫ٞ$p:ıidWDko8Yp|OW?VO"r@'>㤠FFmjcFi>ePW9&u{|+9-v`tWTxS*w6^J@t%]&xBau ȣLmQFkAiKQ']E4s(4H Kڒ[rju&e +؎qB g72 /&.| 17ֵU5Z-'c] Y 1E 9/.WPc[\'Xiz#cɹpp/$)yuRp*}f?nS- \ư_I5 I@-I C-=Ws?jVxN޻t^}L7\^7Jn.LS5oF%#>I8 &|FsԑP;ۀ\]u$ɮr߉}1`w @ݿ)uTdF۱v\N4z&Ek|X8Q=Qj*ZOpWM$#TF $h_[S}љM()ؑNN:1驌O5zo7&If p PGRwKowdΠb xOuGhUplRbZ)-*Dݫ;4ifm8dR0;*'~Q^#KIxCwA-c1[n 5n 'DX*ln(n/Q|Zu>B>S"(K18fzt&_[iE(RMNc=>g/j,:\*0ћ,L =Nз4Ce<}XB C;1BG0_D;ԐljەK8~hi<Ϋ}*tRg]HVsP.ްw2‹Rn!-NY4ӍGݚfVPėণ0R;Ĥ*Gސ1RWai,%c5}'nw۠vc[bAx8}di(\O0j )nڭjݺ{k4E`V窵+Pߛg^ulvKB8h QZG-Ctw1O'\FsUJGhtf} ψ6LUوb>hG= ĜRH_9}~B_C?2y>atG.U/I㼄w;jPK' ][-Ԫ-w5dYx8َx Zu7QXg42(M)MH~/\K^ Ojg}e9 ӯ{fhH=Roh2lD=!.0c92R[&=gkzDmFKHE7Arq|W&WZwkq&IiЅ'X0.5nM'>%!]<`zhiJ ϴ$oO[FDѱHeQXH][.LA`hm2iПYX C lG ^'8տ}ɛxIzz0Xh4jȈnQ)wr6;Qqo9Qm7`|{^(&kZC]VCFghjFR-1$o/a+W[>eRW.sd-b|З 3*5R Ə/t*:;Rj)t| Ue&>GBƟ[cJn.C3ōڟvR]ј&@K_?M" /őXoUҲKtѫt>$>)rPXnBA3fФ*$)BUti9eneF#w ѶEk0T<>nrD==iVH>AoCu;J*8՛x(+0 D<ϩY\ʖXIƸCUhUaEbu;ڗx1Kf*uj7 ǒO­OGR?$6SfU*=8.>$0S7#Q0QEspslrgV1^ Jp{<{Iw5*yjLe%ZF2`1.,a&UE *.rp_zeZpu(>!|&H榝`wτ#C?w}W䁡{ؠ<)+Whƚ!v7-)3D~A ŝ Kl)Ȣ}%=Kvdcc 6%-3"gI%e֔S .a&S7 ezXH,Κuǯ2tnl_-O_D9AVrG0JnW)v3W/V!#N{(U4)(ptB8 g~.hRlQln^g+p ؞lD`PJ9V=.1!גj\;\NQǥ-Uh{\ʾrU%_ Cka7ݮl(;~ 9T >`Բ^"&0~{G2i[Nw!CB{Q%dt^f+F~8%}v933^0Lr&^k=P-KZSbIzG"K*>˰F42j>S:jC$a⫤p yo"kMHCz ,jaL6P7Q)_̹YbޅE(r}'L‹DT!OƍOīNUe>ɺnTDoEJ#.Sjm7 ,%0Vˉt:)-єi_[CڒŒJG9P:Q_͇.a+~l+׬7nLZ^3c$y &v%2.ֹ A ̶$Vnex/uGh)ij#rߥ 2-ɎbROZrcgcu3ZGЊE#0DӔ}t)>VobJ3q9>?deic,-] }HOOyMޖ"Qiҵ}%|kgגX1#tT[}D|>zi0^{<'\k[8G&E  1n>P]q'b\2O/HҤbfyuJuQ(%SÙ=B-=-c9I i*/v1zq+[y8>qBk+m ?3qbHDJ 9#08 0>%1I.aŐb.߾Uf^"k^̋u5W.t«|Na 9AA@l Q?w&3;xx}As76,[ҭgֱ\tf}\ZPBBxpEՃsQ9Zv"~. [qI=@]x}Zτ99 M+Ejx;zIs/cD$t}&/$h}90j(죯=W/,Օ!h;b$HVӰ ]/I`jMO{؝;`ݫLH I4.q~ƋRů Ť\RscFڈҭ.buB\o o)0=s8bk}h=C`Н{{@@j{&r^Uj31<)RK}u>,5ݵ}0 Y k|Tw)![#Jo977 ~;˪dD exJse6rBI971"5ܦXl;2KN-gѕғ(%\v+ pg);ʪ%>ԷUev3v(^ b^  ` 1S"8TX zސ&h xԯ54j B.XA9g_Ba .NJ'~.>'x &G)im;6s"ދ#eJ]/s *{"H!J 3P_ʬH=bVGKƾUp.nUI5|(<)VXp!b2k8I\=Ntvc=&Q9Pn:憓 fr~eh K> ZqüOy47XyOL~~sIjckNjN"C-\?gAS_tL zAIQPМ"-GK'::靂Rݔ%)<}D{&$ۛ_xN찌%D`)0Rc|D꒫${Jozꎢ9~0fD,W[ߞ L|e-&Q"w<ǖuV壈lxl$ +Ԅ-E/o1 jILO$v<+}1R#gՏCɅ)4Cnȩ~u'GRa U?pFrRnXS27Hpg5f++q:K_[}zv֞hΗH< .x 'S`ܽa$~gOeL5yw )PO'ķbfW"DO{(o~ʍ(hޘ W|'wGO«D;ˌ B[U)!/5ybJPlyo"M{gzׁc_&;j(5UƧzJԫ:2!d@][J+x,ERn_+0uF&:nU&K>dE 7- ecƄ#Y;#) omw<%y? Ç;eܟNK!w*W5Qd>Pe&~:PRouf\X*ZϺ*Zjc#B"pjj`ULnPk%!7@ :¦We,6t-l+Ux_h]-єsԤ%oMy缙M2h/{N7v״s x?w4_}'0]:gd)ƗLH\M?Fu Gbe9j;̄~-)m>PA,Ze5?G {ò_{$PS AJ#:o >PWi(nnq{C3 kV6t1gUl<`- 5_jujb}9%g[u_MA7'Y'^$Cf/TMo q&>&E!J!;Ru}7bn[.ǒHLZݗ5&Q^nC$f5dGJ5R_I4#ҿ韯A[>]4B+PEIo5qki<Ĉޒ]mTެ5ޕ!aQL"H"Ʃ hjWrhEBS!eZ 4xհG&;[b﮵u`R̕\#5Qu|ɬ9hקH>7 >Ax;!*8H]z K+x_4{H^WehVIWuiviNIK// }-eH9Zܚ6=a lPCaX#ʵ{CY#ckKC&M؏8j λHrd,9,Ay=j{,T[fI8'`9 %o.Q6d7ugƃ{ruikCcU}ў-wl59*fyYm_[o+OE_\7U 5ql` oiߴs窸&{Q"x,|_h&P+^QʉiVy\9eƩ~nRfAPCIJ+o8shU}Ġ>RwW%e`4FUSVvG:%T{fnKJ띂ZvyԭL1Bm\O:r9|uqXGi:DmW Jyj Ug$\2r;x|]ܴulz^'y4n+W/f{lR?鏇wE >RzuPFcEpbnዷZ7K+dAӉV0m')#){XUJy ";c&j ﳋS, ?ײ)WB$gdoƲ/KClN`l4RjtjPrCV, bV|$ j ^n٢ckd@eG󦽕KJ-&0^4T6+lGl7=!pUh$09-)LS @CHr'1qGT_{b|AB{3kTno K":^*Oyb^Ƈ8'IL"Hr܈Kr#r7Yt4]`coHo6X}%_/y@؁pL{m-\JvjOju(%e D*)4FxY!?G-:M/2 Αu5Vg8i7) R"wg͔V:-{sjh6FOzz@m1iKOH!P[ S PMa@ ^dFi1nKG7<G0/Lѫ\ {'//Z 34=?Bݒ4sr-P[hVeD,KBv`jR`Dۄ6SkG!M:T˺E|IB 4|}SAi]f$ M=#w$P"zK[J$k&q3ʐOdh}ELJv5Pw2R6/Ed|8SrM%?kP OqdBQʊ+SP)wVCPcB$|3&BIxn yQV?qu'EbJɜL&X|w(1-T|nY,$fqQSsBٸ+@}tklVd.ct}D89u9^:p7s';PWfgUi1RƵNE3~~+Y~$؈]uC#.Hu*lξ\I~4,D<B Ki)>]=FW[6XN. P+5jYQ>):h^t"CBaKE}":w$$7AG׺-D롔{9Frp 8Mwϧ5MWhX j[cKJ\OO-}r^1DJ8 ^k># n]FSԀFf6ְH6ttJLFF:-jE\`t´AX-z`ik ޵Xu-hcgtv5<ggisD.ѱ-ܦ磟Ciek.jƵ&Ki' ~ tbaY#twٖc/K)9- ` iΩ7ö=.,]i+CA!'#+^z*J x906sCa\%vɷjh)Y>mF^ʜ>=*&v=H1OW[=M0 dwZ%7?x;4[.W: ̌yy00^y;FU׻:osNwn%.c6">ۙmqo<{|{;עu6 PRdKб6R0ԣ#|{W 6,!Bݝ6(]Jc)R{DvG2JUbܻvm>d n>YSBy޺`7:?P~6TwjHlƎS).SDО+מ)7" ;ZS<Wfе3}&o3V ",tkIT}Ȅ"VQ5t{f~Mg~'evoaSx ~ëG9$KJн >w4s( l3Fk k^>%'BIҝ=qwM5~g*WcޛD@`FuL̿rEI#`ӮE ] xMX۱./Z_%y? kBbݮ~28:Jy;W>Z5f`@|9R :MFjX[3RǴɉ//--1\}Y@8]Gb| >wHđ⅝ȗ_n98{_,0Dش2@mt9#a\d,{{|6,uc m:^?!jbVLuשׁt WCf _oj :i_*W0n_Ej족}Jj&ԥk&bI`zka.ū RHZ۴΅!^ E1I;&ts$ VWL)G 6û1N ľED?[ .41ʇ ӱtz#n}tc;p˩~bs ;5ˑbolzp U.^8(Z(76ߕ-'X`^8x _@14 8x/ѲMI,U6no5_Η2k-оhW339{##;b{X Z]GA S{(McgܥhT(J=>)1h%L, L^G΁|!`*Mu=Ua*JbфT_c/E ?]^_cEX7hؼH6L k!K" mq0]Cx|7_:~7 T/Q0xVv, nES #hVtШrɾ9i7cN 8%U*=sfm MRYNPéiX6;ɝ{:PoT`9hd:`ހБIL7(PXSXYE焑C֥%Fw|}3bx)\l>S# Agh=ƒQxh~AC߰5@臅p+}ۤ";X߳4Swkt$!}6a|'4,B)KbR^K`3~Y/#m-A t(IY^#]E#bNՏ)>]9)51Zho:HPIoQ 7<6oW*):8gGq>fb'Zn|{Am,jQGDbA F0%+۱Z+JY[h<;pO>qy23!ݛT½G'XzN"^9gu9xV[DH͜R`/-uW6>!bJ2^yYñ+ n,ߪJFp;+4U7?;-Uc~XYYuPۯ 6ξpf /iQR,<TO׌ٗ}ejR 8K&TU_P_z-y H *?áG)Rݶ`kb`]6D*@tnIzFI̧vz$t8M /EaV 4q~ZZTp qɻ%)告t$@]?Խ+8dvA W_ 1,.CsI0\qqO]h,*kEy ʿ21ͣ{:-fwgOY*_z溸ԍIfN(J1_hGsFy cs]-@Y&?Wl^`ba']QM z(Lp*{N X{i ~L5Kh:9Sl0bN]1pA}*+x[,l_ONCn ^kH}ו]+;|qHP`!$-WBwI &] (^işC Wpu;vI~w䏍VK48ç[hh4whs, 1)kԖMW}y߅ڋX$G]р7NZi'%o?Aڶ]VIX- xF|ԪIథ\[47+3!Zv( 5-`c@HnFrħ?e"YR93MgOK*yj4]WdYQJ8J/<-kzFf 3{15mr^@UOw?XЊ[E5X AU?%_nd&^ LU4 7]HL:j;AQm-/qvӑѤ{NH[T+ԧx0buLU(`O;`f#op܂./v{Ѵ)j\N<ʅB8' ӷv,Dl>Bm^'\*1cfdKda%ؓ)BLJı&{d%bG5q,׎s@R^1NJUމ Vle7<ԫ%'ܩ@k(hE75KVmu$o҈ [-ƙ1ZL&JL ,Agt?Aaӱu"8Q@c#f[PU{}:.&5܉F֨/7C$uâdrP|-N"|b҆/ӴM^Gi [a礼?=Y^͟C[k6҈KXtȋ{ vc bBC6y~(ܥg|G2L'14T>Y:Bqͷz;UsUuռkInh|\dYԘ5e=YxȤ?!>9=A~nKwHluāmIVTjw)%2 rAct3ؗlo 'SgR*훸>%I ƒoSJc wݓ2$Ojʓu6,}~hr#TY.EI"E*?pXHj;&_hh^\Uܕ1s*&Ca@ sJR'I G]ү@~F,_iC$ ۥ#ov#!X%~aa#{Je`Tt`=,ZOlhR&PZkIy?LTsJ|h2?e"ZmIʖ;"4|E]ͥ|1dWTRB=(Lg~*r{OR~gˢ.*yztAYcMATjUdbx *{ZS2 EgF . ꀺ甂ؕ !{CvQToH98Gv.okþ. H HUVzQ eZr5Ju?x|.VȠPK"I7[ )ÊN~gҝ^]FF֘uSD󜿊@O۝Qug PEON/7ET{gGJ,8qNN9[5}G4v^[9g|fOKeHcU/%"2w}FΔx\qINq%I :!fv;Kj#i$2Wm?} b yrp܋pGeۑőK^3-JKm&?{XGM&!BgX'3+)O fەbG_Sc,wE"ºL 2WkFZmS Qp}y\˱SI^P Xkj<)ԓrbNoj_|g?C|}l^AVUt't{ l\y0ZYqVڞAP_[Y9(bnT!"hxՎƋ7=򡰞'ω {BxJp@Ū2lEd2V11TV xkc e՘گ 0t!rAX8r.2Hh%[#2Bf2n6ZMf~jI~s]#!/?c1$RKY䈱 t]dL#}If"iDDxlܹPta-_,9pRܵZOW4$L<`x:I .I$G aWlPA;AVL0KhFO'>uJ!桵`;Z<6rHV|FZY+%י|c3u6qKʙ\wRkAsGrL%͚twNŔ#/HaxFD5dq9Ceh-PY o~F -؟8.8nL~Wr5Z%"7vk$KtzV^T; (ƍAx5߈b۹li1O8S?纕!!b6%]c_&% t]W5p3yRʝURk󪲹Bv҅BLcyQdhQ9ɩp}kw-ܝ]nOK/r> (oS% Ζ2ǻ.ޝy]#T4Syc"=za<"K\*.P 1&"5xE x}d,n0Ҙ&eLy85 yVkb3S3z7$xabN.Ka[=Kz7L~B夎dkhRr@}BAmOB,Ml\Ha__hi&G@RJ%xZ{xޥZWߢےXx:{C[ۻv7=Wr!-XYܼDyo`:Y뽊cO%F%E;YT[%]<_„H?%!8כ's]Ͻ!%;Dž%yLU$n`Muʑe~>fE4r!.apbZC?2 e.a}dl`<.79EŔT~SzFVSHsPah0'PYQ˝AwѴcN27U_(]Bc$9*]x+0CY >;7(eq{Tt))b:M~G"k·zD-b Wa|*g@}A߸ԽE['R=0+Z2XuY-32S6W)Qo,&[;]\r!NߜMߡN}ct9].UnKSh|"ۗVUrlexfa,_ Սh甫8SRUo?8n_"EK-q ^/0lJ=McKV4m@Ou{4P C^ꛮQNE+^?f|4:%s-Gm=̷mu;tH=UZSKT>V#O{S/GTNS%1ҡy&A놔n*u9hVa7 jj?]'P<~'fR3䏸xM̫5 -|ڛW{k)^6d14D]gLA1`R> >77spS#IN}V^1zgA&b>ԡnɸ5QНRL1yԾG$wEj{;}|Ewyٵؘ}kivQR7cv%.!i X V WXR%{]ˊPkݮo$(wT~n/-0Ү2oWr~Xh oL>vqS4WwRφ_mSJUԝƜpX=Qkd>PXX|gOU?fj:ؑ ˳7~8^o.#0KiEq,>c8cRiq$!6j6.(X4JU,sk< vckv{U\1[)]ψ=JxMa,3qmuӕPZN#ƳD7}YbYcZU1l:I4_un p_$G|֙#P[>6@m ԣhVM_s'11(V D!(_!fB-#'TղrȞb!Z"#=S1>`[mcת)$ԉpj3wg88ӏqs aHIHC 5BғPdmP8 >P'P !#֮u~'`MQnzi^yM˚뀱i+KR#hK;,:H)EK^ңioVKVn-0QS\eWZ};e5{%4Җ=Vs>Cpo uoGj.Z:(i4zzczntN1oAˎEkKCK%Epm8^|8hD *û-<RfU^UME U"XG mi㜕$IԭfqI@ABvQJ9yu7R,\UuԀ-̊ hOp !zWeY~ xw%5&ij -XY c0mcct1Qz.磧W]|)b>z@m ԋIN̢%^wW;:K|TOүX?Re U!Kt& ~@lL2\-B$#K%IR(*K&T0jwuXr#5Kվ)W=|HIԭ(8ǩTZ\7$Ɯ/l@4Y評Tұ$5O]TW% @IJʾ䯷h#ȓ8tЏhWm{)~tb2CCHŔQ9{1SK)Ah$  ilatqK\b~ 7 jG=(fK!2x{I\{1S|aSGa35E@jӷs.df 3Ĝw( ^KR;qҮ&* \t|]#X:md:dZ-;D8?_7b)K8wu~t?L]~؟HlE65CxΖ耺l$lgvӑ$9i)pg. EE7O6[α ~ⱋIu |P GQ4El>[S6X\adv; kԢk$4j]CX_TBahbp*o߈Vr*])$!P!׍'A{!1( @ݨD- ˂!h6pP|V]_<ۦٟSW\` _81olL!?7W_I>ӊSSHC[ Zjlxլ} ,]BJ_k'I]"$a%f3W*1zi)l_İ="G.}%цoܷq8U v{IOvȚ<xF`΍Ā[8E\%=B&?Uz(~z2q/bHo 00 7̧k#1#vŒk8J kI( gi" &ZvqbH:7}Oev}\Gf!knΠKDSIfޔ;՗*fA.6+H hj}ҝ>WR;},!fjѣw{"mvz"u>8iOilv"@9k[#>~D3qpnr݊Ѓp_y1/0vsVϝ#_[cޢ'Ht]Ϝ(RvīR])ûoCPF0*;Mm؆>qjH|t~ ϣqd ;6ضjAF2@roK̅4M|7L{.Wn_OI2Eg!HqYE1+ti>(޳jX(1 i $k,{;h"w;֪WI,jV*΅b zՅs=/J浓Ip},ݮsJiިɹm:vdanIZkz3,r7⵿b4Hˮ_Y!?F9׺ `$/Uhr HGLo>+N=?S%ܾt"7j疴spUzgpkI--U}ccn}FӃ>x[+x7艛6j&{T (SUJ@+^]QI:}l7/SXaD% Ʊ Asb+|uY>ū8W*9lC?P۟ {RBՎ /n){c`mn-%?>tǔeDL|*}!LS7^i}b>W4AGv}[~4=PZQJ75!DD(KU$JO,ߤPw?"blCGtLCT|Njx1ַ_Ɖ}U?[_'G#5Z*W7|i?qg]/V?MVNWY`O@9Dփ5W31K|5h\]i3޾CoXZ1ET- >qx ਨkuj %PqAQ7ٌ.6dzq0oY<Є;sT0\q%e#*d,(~?R{sb8*x]3rPC.XHF)&7tUGxEA2iH&13m8BK ^K{M~t;*wK3֪tOL>=`J,kp(K]\ [1gy1!%43;o׭H6ܗ؈u&_Y HW6/o ?q+- Uǚ|b v Ux0 !-paKg*R]$Uʘvy^.~|_ #"+&[i?zsEO=} ۖ~@P ʅ Z.iox5 " *|<,uO(5*Xꁱ/ܑBQIR$m%zL~v Ixc [DN,s+Sjuv&ԓJPwy„9 QaD462~W]¿\uY-T}vguYl?A UUڵ&S.쯐|17R2(E.챾*cU?o;!Tx1/g ]XAi<9Q49x^nH4_q툚' |$J5N7pxEuj|Em2m8ݓrY#Ԑc'R jEtr[Oc-yZR،%RPӣ٦jn =3m&6cɳFjD!$N5f , iғ?ošcwNG$Ej}rpGt;T/txGu?UNON{,7tt/',ԩ}Yf(^ل G,Fmv&gLxЎ-2JbAؒ;Y[A%(AfRΑ_cG $ 35(}=x"{t-[ӹ?}]gEL}!%&pq荌`C61}G(:JBl֠7y1$}*$AE_O抢C-ՙl;9` kzf|ƆP~l&#m-]u.PYf?SI`;aƀpH 3Gml,;$fcq?*BN,_]d FPj=ݝz<<`A|'[꫽JӺ”~8>wږLÈU_v93HF%جKovѦƋYPU!яsEK[E<&4`q[OM|-9H/ImhSb&r{(\3CR8`){ Q*.2W&GmFjL6a5z_49Ű\[ɧ(;[]YKE8[& DdKL&i0jG<C u. vEw9o#IC^;>o-tCY'Ql!wLn'n%f`j3%E:ݕ! gY";¿>e$ay5'V!q P{,4 `ߟ6;:rAB32cWm[ |Ou#$+ e̋pl V_ [?wXlRE~|wKk4l봈UGmDzeQzmh{)cE ƗoX;j!֫Z ϖX%O`O8IvwdfP܋ܐkfg6 Ӌ/K!"58߇(SJ-Z)}EwgAh3~}/O4K$3lJT@^6M(j}˄Rtn#po\9d+c!(%˘TćpՖZg*\#.Mpx<^)yeLI<#y.7i7vEɬuybUOO,~'~6LҔ]biH,) xU!\5Ӄr2D%8I%|MIn*; nXn$+N^8Nt*yg pCZVx^yg[l 5;Hk 0֥Luzbl 27@ GXx^(J^ )c&>Ɇhdd"y6+A=YW蒌b:˳H6`~}42"r{єR׃zU1rWW H-I_"ąaݫn*hTذ6¦R82$!;KϡCmdw5/;uqZ_ޞ 9Mx&>;өS1y^wIq.yյ*!k\!|atx;+xs![zM0|3RW(Ny )lÓ?$W(XUJܯ"uƥEHo>"PÍCKx~ sF$@=jhS1NiMW9 X A\G`: cZOh-cӲl?_bLF~lwҩ5w+UIW,\r^'r\5 nHo#ZQW&.v=~Ȇt)63ߊ#0IxΕ%K.ߝ} *2A}e '"9h ޘ3ԸN/\I|rw3;MsތS;K22W](ĨS/T_0)pqt"|;;n)uv؇l.S7Ԑ;5멸 ^"D-[k P/K'&wr zQYDhX$,@Fb`"Um E1' ^r*j{&B:IU ͯ3:6zq1W]_Uc"OgP2[Ֆy 飷$/WSE36oogjXXye*Zan |2 |w>hA|*'7&]#\7ujsֹ YPu.#&C]vd%)i[c3E27!#ekǛ,և¨L6">2`AȟύnIY m4&>6H&4vSWz Vl R>ib&Xf^]P4-XcQ0R##܍u`Ӕ۽ԣi eA6 =ݸMBR- Csy DՅ Y/Q[~>C}ju-|^KqvR29VS1*R]Ew{%NZϷ)RCNC!bߞi> Bq,T,jy"Rɟ*hjyEP%1۝uBяr3 kAzwX?T5=X3b׌p/X +kV1+?Y e!qxW`> )W&8TԃS#/Ã~ظ(*CYSu}&yz4cV-cMuCU6urc5~Q^eGn r(s.br0uc\MUxnA?TrO18uCCUD%lv'N]{~Է6o=#E..zˁm1g)W`bA-y9OV9G (Nl#zWOS1x}'Z85tȅ;"~Jzq'6ӻ7Dϛ #w+-4~_lm$N-_S  lG{kw.:'DmmV>g&P.Xy$PߖAGZ,CGվV.8| <:"uEb 3/QW->"L%{?1~8u:o"&Pn)DXAJQ]Rbm%\ucsDpRn8. wywܩ1ojb*كb>xpt^hiqHĈ;h]>r: b)ԕ`̓gDҼE+7c'|֕+m$XԢnE;b~JzEWO`Η]RU+Fd),d%Y.T=U71Sd4ȿVM1ԑ.Рۭ6ZfmhU῱Sn䁦(D9XiKPC<]cKӏڼs)MKk=<>P>[@meض2lAqF"?4\ꙗs:W=;ijgxN'=CK3vsHFq@˵D,c\K ԻJGqՎ! L[iڴ% y?7 woΙTK>|p.y3ӣ+kh2BSkڎmLC(P#mz"2YE3Lp%-iƸrk:.^ZKɶa6^4eEQL%Hw%4h[ ,UO] ^x<8-XG {#rr#DP Pm@',2x:x !TUkt[ wb"WSh{"% ;V?iz'FVJGO8X)jM%Œ@*8vL64h4J=l]q!% G(kK,dcSՏj8O461F#4~x<"jLhtULjH닭^Ρ',PUEOUs*+j E3zc/pTScJx\+|Nwx;膯rn#թKlp)cM4^,Lk i;ޚXJ 5'PûCҕ浹ʛ-̦G] '8(V}1#ֹz|i434Qv^A&o|i_^~$5Yl.׵6H(ݙ)VslPKb)X]}V_R44E`afpK3?vPQ6L8N#j@EPjkXC#Dkַ8a,=HaDtg­'x㳞t1c_nu6>fIIa|ovy ߌǓ!_F+싷\ZӉc q$0S'[|/qFt}:Lk:k5ms)$`j'/A3.Yu]7$ /Z1W\!8o٭nS62u mF?7:_ @k&]A"-FjQ׹gQ9>w}??WJ-VN{яX1ȳƮ:x=o#']{-پhN#K ɰCS6B>SQ$fqfRr%T 7إ["\u{&% o "d*"ANe\r*.Ghh魫?3 QGe"qDy`cJթ?Ow9Aa{ߞve"'Z `W]C b_@WAGDP xAjpvV{8UEJI8Z,6>cn173lGB+rW+x ԨFv-u0zVq.ҧ:9 $k#%߯s3r$[i=l{49T5.}\(Rc -{g&!,x.4 kAuXU${ 6X:NC6!b\k-T Yt:kB171J6\svUt2֢U;K^kO$OV"&UU@IFCiTI eBK-mTIFo4߲d>kO"QaevlIvj$ڷ~Y1A_[5E\7vL2Gխ lCႡ=@m_f8F4lOi2:8j7eJqK&lOsq4toH " &u@窶pnK㌞"jpoIA ܤ2䗴Ewђ;m_A2ʕzsD;uri(xN{GnR߯:$r$B7*:J wQ8Fe ]g/oO0cMGwX58t.b "܊DC~|栘'TUӢ{=uΟ;c rE~Z-k";MZ9$?fIQ&ɷ_Yý-a{ۚl\jinqdFetK-#\?;4SE3d8@|]G eB;oٍ=EVXbݱ E%}#Uh:Y/Nq4j0;Gxlt`gL1RCM=_o|{v_r%Ė;j|(D:Pxc u k2fv^WDLM3WX EGIA%-̽jMPH>ŵzyOqESe:e;WKH '(j:2bp벵[l>wuLg_XQ »;E~wN[:!3HG3ȧis 1i8Uy[g|A;_ԥ?F5E.`o" J,GY%|ˉiobH ģSh((&P8bsz+[G!ѽen+a85L|}ŷEYu K}"2߳qu"I{DɆ)gfXJ(ȌsstQtUlr"Eord>1:HVMz3bx3\og@F; Y07 k PS>2+9V"XKa{>b9YL唰_~σ[&>.-t: 4LBFEX/{4\ P_pK{ `{@)cOW(4ߎI79 }{\rW.LZ J6jh9ǽ;CkkD(/,E>,Z/-ZרKmGdKszP Px2|vd1bY+贱=d$vYmqxhǷ>>oֳFm a=6?sW+?_ >‘j;y'X|a)LDArt *_hݛWkD?=mC*֘wDV,.yqk=֣q1+4V/%j1_ BTjM[}!6Dj U cN7ﷰq[Mu6 c[5k-%MkB޷4O>.rb柫4lBC<`5Sg`Oc% ɁK%]R7\rj|c7"xr1_|El5ĩg\˱ܗ8umQl[E!ًU9]Gש~2Uye#uXNj)Fk$RUxr"jzw{Z`&1tpe$N= :BC8TWWW5yQ*XZ[!3sԫsdf3V#wsԍLR66ɩQ S#pp\Ǘo~o/CDy^iBRi9` tL/*gT bF9XvBRU5jQF #G#9CH5ƺ^8-ct>XcT|~c}]gOWǒ\q 5KDo"7Z]!MW/ݕupF5ATXOFPa%5z&FX4 s*cz~j<` JSj{:;hMW]sW3koExиG6c2A*W|XjEBVUN]$ P(WA|)rT.ǖP+8Zںhk$t%=߇F-j$v=虵6Ngh=*yudߍ,Gэ5J]ا= 5 uߕ:5nuNس _=rvVZh* b3(֯M!Qк҄~F"uMFP6Eɡn h޿1{UOpd/ Sio;3RScH4+ZO>5OŪf68oxE3͂ZZvd$L>zQt-sYpW}T\^E*^#/A1"26;p03z\W;#ppu{@\²7Ȫ9!MGܻ?zڐ,.xEGDO5GK$ sDtAnQ\MQPXi~lv4ȑզ6Vi/]&MN׃oa&6iuЎJnc '~ Cʮ|rpR{]ރz`!䒪R>~U,ԧ?5CX-@_b+Up5oa^6_`<:JozNhXOEJ/*G[᝛g9rnnP_tI{~2_a 28Ķ} wH' 69'\da,h([6Gӑ`(bȱȇji_9 #@WV ~X*yjWiJIc -amNR3X*%尰H x)YO!'5YbWpZD ٥oV2>!2E\}}d| nMޭiZ|bcݮs{ygb,׌o>lo]z NYK{boupH7S7.bHA̦0lGŋ6K@G0=re,*fB蔽u7ZjĮķ:Min)B1|(6">oQJ\XX+v%LQ&oХizFX.m9J5 N" AIyi%P^#\>?m3lcCo noRyaԭvپ)](D]dDHC W1=8 ][%9ޖ3e2")\ch. ْ(E]@ӧi| 5|K%O4Q`\R1#Ƀ~ͭ !]?t+CehS>UW^[KBq Vה2Rܲ (z' +/KŰ=s{}pq\;VOj]H00)Q j\v\v.x >R{$BjG5t?N^oO7+pzRY.Z𻲗КucE]1˃8O:f! xsJ=FhR$_FMJcYJ0NC]9E" vtTmA>42Y&uGrt,4x4!a'?8F~0oqjhc;xP;fM'Q9;^x;wXvֿ)=mXp!}OS Bjz670fejxѧkeQX!x݄9uV=QY]'6(, ,Iz`s/d`3ED#%!/+)@EDLVcx&﬒싳jmZ퉑^d)x;v {(߿5DaNκ17]$lqҒ-#ʀM0oq4.aO8YמZ-(ɖ˨ SI+}q|aogXGZp"#t R}~eP1ف< \-r(#7 &![, N/ܕP@$ʳt#n?W"޵HW{hsR8>R12 g'S5aK԰c5ΞC|bvvG{!_[/LqHr%P%7;}cri=+vk멒5n*:Jp{H{r4zܖDnqj~ɏaZQ|07!1 <~>7]Prn::Gı"/`.P׆tdLM ˹,v2>)@ BkzytVӽp6/ѿ1.:D?MW-Κ{c\$ҝl秥 -/Hut e_h%=yXu^kD;97OHt.vO[OnM~~/ِO;5ndsvd$n{s+Ԡ+(¶qJ$cp$cT]ə8['cKDVYEɢh!FߪrnS<ϛޫ,\Hv`$E#ը*˝E`'.P%RźrG%_(3{:U@n%oM` &9lF-S&?i\ǵԤ!fl<ȨIdN{B1]+x*?-U(zqne[oJRn*lh/a&1q+4\q]k ڲvu1uY^}IG7(&*1-C:8{%wM.кdŋԃ"QKLK*ԻdZ⬝Q.ȗw% :2vD:+=4JdYT ۳T^W|#Zʉ DW'YWKQw%C->"|@:B0 VBw v|Oi)c m ֹS(:zwKt@;e wvB8jIh>uQĈ~ϷcJpEurvvp!{-ɶm w>5lZLP w8jۡ8:+V(m~qDzei<#|"gK޳s4=wSnUpz_-M{ mNm<`!]O~͗skT\J7ȪP;mγ [rTx R,l46མ cYňoմ>I{rj{% S1lQSepp; 4ܷvm'fˌԃ"u1Ud_׽w:F\i s(&F-яd?P(r0ϕy; J̨~,*OUnY/1.7ΥA 29RܑBcWo=ϽjB)XJb&oK,|UE=`OAHT;9Reסscʕ~ҝ*0%RFaMh|ܝ lN4)8,' e|EZ*R =KF*|,EꝪ#2 :eRZS}x`M]kD2f|e@[/4pH}.SM4Z{T+m#}o{,tPYbAtF- &Z Am28cOy땩H !1p1TeVb A}Gʩ.ғ/RrouG`kYYG3Ɛqp-s;˶ޝ=MsTI bNa$^&~;y@$5[ m έtі ːݦns `"*38u~Q@]Rpuv`7ψdll+O:"^2Hя&N]W}=N1Ss"zRԐ^%8%TCJQމ,F۝Z~7xg=pO}aM;1I*.`v,6+w2Í\HWV>G:+BbF^S7TIf\[ ܧh=7X|[DwubVXk[:_CFiW$j35ɽDŊ|-(E R4~"7O4]Rb%n nmK \!s鴟nh]̑]wXmjG+,8Y t\fM(F/~=6_ }vdY f61u-26#3'U?ZWx*;1Xp'bNaDHyI/2f(bV*8q,FaY2RIe>?;cM¶Ra9`GGuM=BB\\dQȹ`!xa V1/RЈnK`gMeEXk ݡ̮N1Ry ˏaAZOcOs>Gtݝ(y1%Ij($HGO:O k[y-Whֳ6o|-󔝿r8u)ÑYy4g#篬\xH#=U)Svcjc׽łBgxoC/(B(P+ 5R)B"UU]]a`ڔ5B@14Mq~nE1Bxݺ]-6Kn(;mT.)#mn1f:O<ّcbF'ºkmdEc{˾>(:㻩hje|H]:ls)8SA[@)hwnQUOOyS\{Sm;{.vZ&izxC4_u0{nbYp=شi>;ʚVfjwLS3W9R`߽ [坱a86:Kinl3Te@8^7@m6qE)RͥA P-e>eu٫GX_=[vb=&kޔB[NϓV30Ɯ %D@S}MCZοӽNm.uEֹKv oJ\5FC@-x76ϼpN0sTDo+/CMkZ'gޝv~kŮfat/O݀w gG[|vvjF4 EJu@mY`Emr8䤾a? kj09?︩]кLy" q3l!. H$e2htoqj6@E#̃z6_bb#&IkÃ*aLM+g;(>˲W fy*uyCƮ-^- pp4'BdW+Pg ڋ3]*DwuJ@*]>.FM(Rٿ65mZ9gi <Q֣|9GKi9V$Y(mǒ@ b%69!&d3D^AX*5U :][UzO h yYA)։ ql9yWPjHY  ҏ u0T LKo,L+Ww$V6 &xW+c9H"z*c%^T(&.v9v=uz'*^;އf v}ڷεݛ3(9 ĖҸj=ޡp{˩ؚn*+EǛ*eXQf `IȤ(]4gz4+xhG*C#ra1.}CO+ ٛ*إ(q s1"DaQW'e?V5r,xJm FjA(۠BgR71=ɲx;C& U\7Pj69LM; zXeF 1zc 8$-fnb &jQ7S\7 <Iάx 5|q{qFp^Jnu2Ev Ԑq] .;g+Y\ljXS7|x+rO nuKDRHm)inFT8]\Ș@]z5[Wrb"p)@nRZeyIϞ &m=$@/6z=6}!)Nig H4sln;&3)%Mֵ8tD&>׍ 'WkZqttЉN5є3>VŹ"0~[rzm( "LW$K{KNdUf`x;CiVUNޝ"u}-U6F-\- Ff ^%"_\MZ1 +olƔ:q@þ@ݭktbmr̅m&R؞IST9B'GmHP /BHK;LtGӅ]EPs[2-PXO;mkL54A(+uUjB g*!.WxoRmEs5M%)ss[:نEW ^?6 ɳCk/=_6/ɔbHc.v _WJ y9Z$bcѥ02 &^ vmcT2^ 2 y(6SKuq3Mwѡ4ѓ^Bk'\[`^5dz(^ұjaťW2 \.q?,'n|2"uuQFI39YD O_;2Eh.Ļ)!eR`6vlݮ#½ϕYE' 2gԵz5 18:S{ [QA#e(},Յ G=ۧ !@Gf">pώlH}ݭ*"8hezUXI2;JB}C9.R`ő%q |֞UĜ|(鬷ܘ0cxD%/x9]%phgѰtcqƑ5 &!Ee x94"=qTo0#x`˙Ƣ2eJko(OPN C'^#}#SA~NW0 [Y<-U?Rz$WѮf1Iu bĭg{r zm",(aSi`ژXx6S|Y %¶ۆp{i λËr0'85&IC("{K |v9b FA;͈haֻ7wtw!W%ul͂|*Zݪy粰28-&Fd\VXt'`1 >^Y!f~Z 7 aJJq"̿GwW둍-EHodvHvR))h~[_pqU{\Ó'[ڷeV˘Mdʪ˾˘3\MOQ;<=tpcZ 7`3[rZ)PJjOWM9ZvC{ |US/TaYƏa0`vPa v(DwŜL ># "(AVcYX^q;噅v;ôLwZ~}c{@\F[4uǎO/œ&m|~vP|_V8NB,Pa>ŗÝ$tTi<^7ɅI=L*LߕNX7:jlm1rJn)ß{|쩒E+Ǖ:X'w( ɧ\pyS?r-O=9vdc͋6,nP1")'Qtڶ 5z!#<5'f 2n IͩꦊbaK7Wy7Ke?—tvxaU~dq: =.pKo-&Sܷ/#@߳ gA Yb U$"?=lDe ;;xkt:;a68_ PAD&\-Pj9Y'1{bt @wBg.\o΁¸k㳻z @9oXJe b H'Ի&P Av"e./t͐vfc?|,yNy\r*@7 D'6\aH=J;M$՜Aq<=ԧx#|"spŠPخ!,ɅwIK_y7g[}CoJ)~q+"7#IW?ַ眺ŋ)yp#9G]nÒW8^u ==tlH]GQ4m頳8 -Psa kO^)|CΉ="k= ;gat%ً3{. d hjbS8f͎".D .XY.R P>:<9#Ι@SKBXxa*^W b|r~ooPo C :1lm pD2[xlW:3E@jqM{ю(#a;ů@ \>f %63zo}ڨ8E2E? bm" Rq9rnWӋւD9*+ɵܺ\wa{i |CgIiU*74%.r8{U}QY#31P3QWL^VWؤ^FSQBe)Hm,$⤼gv̾P`KTFn%7[*d`#WK\fB78dwwf*ʯJiITE1Hm^2G(\9]*'ML]z ʔ15ۍ{xGɝF= Dxw+%ȍNVB4v Odc~bhCGIf7b›lrOwkT9 \[9pNs5pQL7?4CV8qlo'=A ξԪi {^BS%o~p%T]D?V,hIWFZi˪·z|,ngDe\Ѵ]:)Kk=d3`^ק"ͺCt8yq 1WSvyߴmD w8cdoDҗ6ڌ)!\қa'FD SSȲ,\g*őVT>}x:u^wc@#XwkV4SjR় nž3T]ak{h4ðH"PvlPxsErd館Nӄ6c&09PtGVjKNU7(͟%m1LpXN^•,ܪU֩$Ыl{ڡir@IUJ6An P,vD?N.vFs}޸h(moؕzSg*gJϤߊ7'銮uU`W0Ɲ}S48t"CPpvrD!3XXJ~5<XcҘ3WݡhAP4k-־sQwfԶ#pvC3/jk\|92^QH1V]Ƿ,6n\j0WfkdǞ4o)yXd ?Fh>*k-v [5iB%D )T=za_qKg:YXkzC5\ŢIZzwLnK7%m-7]$ F(k%d{Wv%f&]% ⸗"O6kKVc7ԦzZaH6Qr ԡ:">rV!E+r۞XW_~jn&Gqe { E[Jr8A/<б(y->#h׽~4*x@_9 u;';QT6Dafp7qFnsuI_ԍX2GyTs~]a>0ğu3wwQ %_Mn*--uYE"~o,@Iz5`PmfsOj=M}"K}>z?ڌD37J,8t ]l q p#]'%?QeL0WxC ++\ﶧ.QO(/(}]c݄S\Yk/?QWk? V]އ{Kȟаba{uGCZLbd"U] {|FB6"&޺n]d)1`?5"A+;Z^,j.-/;)- YĤ4p{v"5,IU43.^Qj0f5׺Z)!xer.QSxw1L|y0O}SMDŸ_flk6{nR_Ἅy?j?4a3<-A7/QP $37Z[r ɋ dk'Ԯt&F@=g:k$CW,Rt7ԥ"&fHcG1Iܪ@{S gExG2-Y AZ8 &r6 %˹מD`'.HEE#ƋF5_7^{Ni hس:M,v%R+V>P>GDq$ѢWI[S$c<@u~=׺RITѾX(7~HvIݒdQWvcb]baT4K'Rҏ}:KvNe .W!uop)} 7yQN;{grn~R~1UÚHub ]Zͅ2y;c zu98 o 4_@^Me.Ao3~+;Qɗ dA.Kx1W2aƔXw|^Yh88]N9ۭT^L/+j!NGJ% )P^^%aF1 RwAW[k{ k>PSUz`n VM0\?gEKA֡@R N݃ψl]_ʊvF 7Cظ ՈIGI%3{djp C[ `reՅ^cd? ;o8K*Aޑn[RY9k,QIͫr{63!p:jգ]H= . q8jJ8BYe>SB!A۴_11TXO-GѵN3>2qB\qg1v~V\ط1b 5Fqi10R g$ s6EYG Swߘz։0 -ՑyQBΧv%QUw{x;RYqlud^In&EJo7KEK p\U=%@}Z1nv|.[Y_jm  XSp6k~vUIĂ (Q4Sft;]6[YPz}hXuUﭩBhL;9ӭ&\AK$U*<-)nt)mQL2^dTj0+R)"GzFVKF؈O/{O%VյrX\S[Ԛ:ozbI/FQ_i$M?45cbzc`=I0f6 EX W m>HU3EG?P1oǖݤ֚Av@uS {ىm?V_@}E0ҦY;+wR6P J@Yi8ie>Sǻ=۴;]7Nt͔ ;Y-!JaĩK_1Pɤ]EcÂAꕽSps8t*:4b@uSz@w׆Ӧsy9/(W5vl>2rؾ"-U-1=W+v3W{H1mY~̄nP=_~Z9KUjЉ=pEJ[jnavU=yg9g$XAzǖX5&7`ynmYZ;P+GT5kG8dTEQ`@L+<S_(lSS ~d_QTx^NiջXg;g/7.MЯ욥T(4@]P+ajYP ŕ "Ղ#<γ`F*-\F׺>]G1iăyfarL%=S}z0gm1p+izwn!*+th#V[GgEYx#:bG :a%ۃ?<+oii\"AYw ?5&_e(؇ް^װ7]f*kQJg l b"`L]^>ҋ -hތa, j7!E⌠'ʏD=ܱ3aFGh_G: 5ztUpOJ\ёnPTy(:UHқt5ϺޘrÎ><m}9bR V4[5yaF,Y5LM!=sm%Նk;z __×-j_˓sU(>zԽhfBG _B4 u3_VɼєQ.k \]rBSUP4׶HlӒ,*܎kcI%| / gmaG[?5_"@JE~n k,]AjqcŠ P-Ț{'6ϼ]xI ,qkU1%or[+-*tw-ztb7䩭MqZZ>5i Wi1ŝcJҶ{U. `L)MY_hͥع[J[&sp˥(|dXz}%*(95FoJ0ORk*@zvvͩQhm0R׹yVo.ἥyaԵiDmWkZvJwƬkzنo-u5JEgp%1e ŧa& E}i`qv1x;1Дdv>'5A@{}4 VǦX!24Yd*S[A6_^+(oZGX8UBM qP mXܫL cx[A]2i+bGz՝"'~e~h {U󷷝&1gM56E#DSDvYMg3XiG/gaw/!fA!<9 jűV,PRL=eބ8z.t(xmرr^77+vrɆxmph%=oĢo=3UB^JrXq;p tSUvVjTǤ>ؠ$.ClHgѧ]MB.;z/Sw%MI`tajکub \3^U5_o ol>.jQT?ԭreu, p2v*9|j³0!6Ʌt*L|B UЍ뒠w[CD2"|VQ[yKfoJA#68*p)v"r=v]A 'FOKѷKLǒ%m'x'+fsGVuҔ=Il΢&{pݦ\o ZJ  Lb dVr k{.@ |n5ZZl,줐<("oZz:mPޫ"q,ˋ?vJlR30N5xcw9kZ I_Ӥ a( 3)Nw~֑~29|t V_Gr=aYn] "g(S3|] qzKL;]ׯ_*5*"Ub6VNt ~'V iQuˤz4ykWo9nN׏b!Vi!IՃN*-zx~{틵/ D,5^9'$\~D@y*Dxxkv[2̴@ޓሤPg)3(2ztQYZh=b~e1mުoHg׻Qu}t./l)|Hޓm,OF PNwNYV >](=^xG8~){uA yy}pJz2p8z g%5uoRP(%'MM"4;Ghxwv, ϪmֆF{n8fүG ~!,@FK`N-oWcr6L&ɚ=!Pǒ-9KσdϛP7*ɼP4,.WdX;Ε T5º(_βH!?CMݗrbǝ^u- z`Axq!#(_<? TBUv&Հ;)h Ne&WiXu1Ay| a@ U1-xA~"j`nT;Bh߷&t8ό?0hyy HrcUs9}39]e/6]P:H?bQ-Mm> 2Dt}2̳5WL:&4..b ӞB oн Ʈ؏KF;>cFoU5`9RVoA7x?0Wu4$]\ԃ"t&+XEmؓh<0Nc:nX>3j:?yDʆap4JCrܥgUiGoCrNbױht8.qL+<{+JEnV5vI>h d\7k'=V+Sb,.Ig ؈vEsx%}lb}Iuq+kbA+ӓ]%/8UE\4<wّ9 b- q_9_KT#ƒIxk:˲zf21Lt 5} hx(ޝCf/G2gi| H"UNZ%?,Mmk:5IZPhթ|$)d7.aFEB6nwŇVXB-Ρ >!a hB æ|9+>ߙ8= {aZ9fAY/G\ziߍ5;T-C+O]o9o6Å5$1jh5c̑(Ƨ37PAi=n'^!f&e_)r_*{kD&_bcNp5to `v-ҎƗ,N% 5ә ߥ*x 5:8i@ac<>p)aÜDrҧ9N[?D<ɦԮO5Nu9,OA3M]eq*f<8^)圽PrO=yh7{;]Ck;}`jEVGFO"\ #rwM0U[ z d{?/gnUD궩(+m_\XbCjSByW6L(gW&YHyVg &V¿ ̆n G{wǛ}G;]Kmʿs?hP 宦ngw#;`,t/Ox߄fR^stTxFA?0eIzjSz䪲z8RzFFí1v_cvr%ʢjs/M,mZ{g &¢\/2uf"l;KHp"e!c/&DFyDah'2H"'P;ekkw]ajAN &@a>>sK=F8R0 %[g7|C~+8Noی1q-KђU38K /wF;mkM3gtFɇ1}0)/}^ٯ}Ps˴ >2z{@z wgdf|_:cmCzdBc*j^nتާl|˝J0Jѭp$˒b{ GJj(L:Pwff_k((1h6Z:|G_EOYLjF篟h*V* bnX w="h,k2*s]#Rpl:0G_xG7~ʸhoj1Es{j$?=\?}~E҇BD9qP'aPGUNQP#G$06YU@Xj j3yϿ>5k I]}5>lu۟օZ $=K0f`] YH%wXKr4` ƟSi uq7aa0aG94?lA,z q \ ,j^&1L>ˋ0t}%L"_yT+IOg]gd {YC3n_]7nœWkA̓~/oEҳK)|F U-Jg|Ο|gq\'!?֙I}BĖ8+!\ܧqvEsnR95v#,lj۝iѻ;nVGa򠶫cGǰ?6ܺtj;IA9lK)[CkoK$ߠ>Q+4֊2aogة73zS^l>z%^h WI0Y%21@Bgɖ(63p* qXǣ< {%~r:4ӳAQ-u[{P dQ;98*"†,D"X4~!`Lh#BX3Ը0\N?-Iz!s9%mlVO 2pYea7=mU2kkl^+u?l_ LǢ<ηSTL*fyA) WIcx[jHkݞNجHr<`01\ﰋ>|iKG t7re"0vHG،NGPD ,?aQ>7|iEVv?U:3p\s/1%ooO̦D-5ޙtEMxi?Vb,[M1V%R+rA8K c|?Ƚ+ "r^lL4b,{yx2 , y<&̘dx(B}!!!VGH]]Zql`2AwjZH0F]q^U vU{m88?}c/cEB]2!G,\)Uv!0pft} ojnۿS{=,_ø`T0F|ߌZ&(oxP:{^BnS :}E޾pM_t17D|n:ZhՓvk7)ha~vU[fz[zm}lT $XW>pM ol8="W!AB R?:z_Fګ Sk ѧf' ;:l* ۞at=Ҁ ѷ:ifhީn|C]'a3J0',\Y)t: u'FF4eBQc13eӕ;؛2=QI֕AEz fY<=QԹ38n,anzvN`۩_Bq=/^"Q2Vv;co)%_kӃojdaKc5>y9~_m~6\NmkahO%8?SAA#>37CX7WZ+K#>{kqSSW׾z >Rh%aoC}dk@bp[3;;"⡒$18EXј|ԉ\P W[AI#I޳^x+cWZ j2N3]6rq$g7,v`jDgx@:HL6ͻdк V4H=0LEC/VzbcD݂|i}WA2k; .C Z[_9?o A}V9 C=? aӳk6DmJ$|6@\u %*ҫFC.VuG,{࡭q;?,-֥$kdݾE\%MܷOipIkۡw'e^:/#QsCm}]K"`1֬v~P_J9%4ݐQj>n VCZiXK!,ѻ\i1v-0"Tå Ӛ[ 9#C(Sl)OrCz)%xFF>5ZXviQ ˌN)0,֢?oMBW=:3r؉IoH7-%%,_u+9Da^ T|2G{yǝB-U\[')P$8* ?L,OZQe]D)k\W8Re!mȔڿb)0´s`51 B+=nV;pW$0kJmV4n,B/;HqwDC_7.mfŰqЩhz('s /yI%^ z~'Y`*ɠ'yKX 4E^7u)[ >'Ecm+U~}^yH=*;P#З 3/4)5Lnf}!黇tpad&^V/"c(h-xd>:wFZ Z;丼cKڻpRL."*-FI9[ȣdK+W9sˣ)k:nMF>UxH6ɒDM3_-f8(IɠTHV˧Ȥk~UVF=MZN>9#­)[+oնj"uIRs&0]o)Z5}mb#S_UJʒMB+f$t)Xא>u+pɎe%'w}Ɛ@ Oiޔ.}J)+0gaKy!5ىmN+n\&xmiqe5>{bPu &,gV½%pm X#':bXJB@e5S}"o^(Bݼ/!<-$ զbm(Z9,dzM*P4X]vM6Z6d<3ֵB|YZ5Y 7B#7wV!pa=65~/~R Z(ψaAXkw); \H?4\+ Ӂi-))ؗ$G ̈́J""n0XS^Jf03ZjXu6tA#dbP|I\D7 rD% + K ;O]^)O}cf$UfԘEkW 6ܫ#7]IH&Rz.VG NabPnYiIctzUgf{z9,!)Hf=>}~٥%Yy>do_IΎI}jܧ,=o%+Y%y\r@+6d $†\e{ SzGrx.ʏXU?\pF|-D-q%ݱeq4g?@B RBZs >`Bq2d{Im }ǽEVG=W8ɳse U'gYJΣ$EUIoҪ 9x S02;.$Ṝ~ 24EΔfC-ټJwy%~ ]kmZʕ@Iɜ7^=L5jCݐmu !|T?{kz'/V?<.!@'zpPjg&֭|}8#\ jKIꋠ-Vذ٧ \jOָG.ܔj{-ӭW#X8ŜM[N$d )OM>w1srN X3y=2v=O?7D&0g#BwG? +څ nb6b.E_?rI?EJds\#Ey ӫ~MgUACe~Xc~D;-,E*Rl-=r?.7OVP&T<Ġ)tTvh @g9w$4&_ކ1&_댡rJq]vR)fRey2bm[krqDžV L}6;=)+BwL:%~ ƏV|7~o^vI@٫qà] ɛTNT]XP?jh K=f걆|([Fe矃 Wߓk>4Kݎ2m7۔-O\]K>&Xm{ V>dbBe8492΀f9qa r 7 4l]VkIp`SP_"[X BTux_,`ZN i.~6)`a:XbhK'㹯n{a* wxw[ƫcKo71GP7z1MԳ-/ ox-2lVO 0l)Ic0;9ks=]/{|mږ |T5ʍBPgUM"aIWr ApLLJ"{k^egoq_ H{_<\6]R;J0+g9}/oU]t$LUNEcƹA4Gt'zIiHL48wXZ{60GQzPܘG֏< Dh=%[Q)ӬR(ZR"چm\4·yԸk9k&.XAa\zwj=RXrCtNǭ90!F<3uz2an>@^,HJD@N07Њ\)- X)ǝj҉T~6/oT 7u*5rh8)ΟX=kɐh2^ؾwt;: Ot!5BR6р]AF=Y\} [5Z?,rAKxa, |ޣ31UqYHh)(:m}W(& sleL]ii݅n V(lBq ~KgP)tY:P(w%2Zb*V[#=1OxsL Aw'OXdR3P \Bd$}Wt>q;"O*S _YjTPPGUvcԫO=OE+U^Βs_PD=9kFD?(m̑2u.B-#VdF&jLq EVO1pk0Nm9n?ďگ29iITׇgX`csRZxxM&}1$ٱ^}V,lN3Snaᾞ@k{h|!S&NINXvbΧEz45{;iQ/1ǘpUŇ/1eisֆKV>Qrc]$\VĪkqtW嚖 !w=2RHyujyx&ZrzŽ2l$ ]j8ܚXy JmD3џ.G.S+ڍ \APw}QhVaow$hLΘf+Gu'zjM]y*No"}_z/CW=5<Ɖk cNUɋl-5FxAmE1&Iz>HQ/}jߔ rS-(ϝdO=¶+OD&BeUg5rV?$ݴfADUxO*V]?-B<<7j dCq}[.q-ſY}1R>2S'/,ڰnཆjժx#rдKoɅbݼ@ 4?&酘lM3&1Yѵ.]r4ev45KX`xa:Q觉=v,L̹EhԽ=Fuaxe]fj`IwARb(']+>z- r-)< JۍeOujUv?']-Č.U f9$Pq[G]ZV<`i+ ŋh\-F*hxAwL3! VJSND ʫ<{w10M mG%vJmZifIڠo&pTsTx il$-%QuG5J[sIxdo%$}su @&5d>~^0i!FeT]֭.^#)ۜ5SBHzzЖ۾X5^P?/9bv&{zXyHKTaj؜Qu`W]γA.)gvA$Rr8r{ 917NRڒ8m#KzjTҹ5݋>DdS@=X'n&%18H]q8rڏ0Rφzom*vgnC^!c^XyR \V ,c1m>u.@ma϶SmJJ?Cn]4*/HHx։j%xV6ҊUZ{(S?xNĉ/56>bF&>oNjBn8}i{ [<ƐGivI'K *(V$,xSRxnp[^k wVA_t.Sр=!L }C\۟R|p4C[E=9弽Ε.#W)!,c6`y|6;Mv%I])X gDf<ԐÂO}#t^*Ln%n1V;ЎFc6+BO[GΏ_!^WIARTrW=CEONLv^[qGuM>)ZDޖmK0LmHp$W#֢y!;Ȉ.[o G,g^wT}&&_\2#U0OEIrTSPFq9Wo_Yr!43:/<@P^[ͣ+k[ohݡA߸]6/VY~ɓtdյw2?=W鷨2\z08lyKqՎBzO%9+Osf\j?W@u2t@`0nYߎ`[kcNs?ԟx?GqΘ(:h2f=iI-܂I$[cD w^im|QȪs'LF[]IYþGNTHB8}4RPZq\E+oDCLWSP vh9}a|D6GJ/WW+J1 5M7ߝ7tINuɺ h*tL[UrN4AfK'5Hu[GkCWh\]GJZLrU!N +{zS{rfNl{MHkRui3is0r[%'&&9Xc_ M!cdXUB1y&&[_ϣӠ*l+@GfZto7Ъ|L Gr_KZ! 5)LI<ҶЗDRMc}cr'>qXw!`r_VԧhO~csW6x_ϧ$yYꪱd[< C*cW?{7 ${$ZuJ=ʺϼi؂8.7yz|hkUa̩n흁 ziz8JUe&v`+3>c?{hEV琭/-=s닙 bXٹ"ȀQ!(+0Xi=*c}=#Wf"ZzZeb7E%DxWc I#ݶ.x^K!ٛ M$3^UvvN^ZxQnz&Z8N ~)1@WP[JkF*0=A !A,q D}倁k! r/53hJvEi!PB%<"Q\zl>=WZztg<ǧ=ZjUW"au4S6aQ}0F_: =Pn5KuUQ^Nse YD,9HRAǻl-* ZUts\"ӟS6kW|+աf;f&+&$Ԏ,sjm&劎dͱxS⸆C]rڭ~FAze۝ɚk\BsXgT\g3SCZ[-^|yh|Η>L- o'' ىZMwun>ȅUej\a@`(t^ʦV"wA=M&R~"-fBۇ~ӷ C|Q v,qhnA(GapAlp:hǨ8 ~mWUڑQ_lu?zB2jdm NwP-1gT @5u?A=qJk6e:qtr=SL 8' ߃7Z+$vOb7u]2nՆyʮ=XbLE69I;Rw;3#ҝz-*m.Q{6raE!u1Wھy^8QƝxɻO_wRN5>"ǾaP[rp?x?5 ϼCX/Lm kr5zcU̫2G_9K_CtG5gIϞcէu!I[9@%Lvq`ٓƋE EoZSلдQB_ȫFk:{u<\!P+>v+WEdWNh=Ny{߻GMHU麩019Voj{6gYB}A]N7٭i >C.iWCۊSEpQkd+^ ]Qt/S6L9&]yʆ[*֙SO|-t׸bddh8?F ?#Cj+Ҵ5Z[;]3h xe0^/ ǵᷩ*6vyŏ(M ͇ M3g9s9/ttYOe`e2bxgk"ZF 3Gˋ?]}T9n:%[7?u18h}[SE4'V>W Mn8 $8,2w_z?ɨU =|c{wyٓzqp~mGoƱw. ^.|7оhyUB' rFy03$U^KIt}5S7]8E졓]a"ww&*Hh1w s0rVΎU2IZ5,36f$ZD[뎠Ӭ@ڬ{I$Ƕ4 2:]/ȹ{G%Pkc%EǛMH.h)+3Tv69ȐG drcC?i#u'𗶹5Z WK ା峪K$Jn:}J=f`nBd|QͺbX}jn/‡wC9TwC&G6uUA _ z.Y[(Bn"ʠ!$ۉEƧD3NX) ^ 5.BZ04-$2&S>ua,i'}I{ߪJ9 ɏm^el_̏˹Z$t#.T Bď~GdR LRmK8IQ(:nhLPfCcnx Y^jo_ǒw=Z&7@Po@W? ÅTVC%zX& 紐MAmRP[Tb^m,V;i dT=\tj=lLVh9pU{밹=]$\o҄1}Vu?Ȗ]YޒR}/|YmD ~)A(*;Έlmmױ rPbbBzD ǴJȾe2֍(߂ ,2PH$vg3W"SSwĹ5u.xy{ܲ=_%Ai)bK)ZYV1N ,h[Mkl=)䇦'"FI_0=G&eIfJٕp9CQEaW6KXX!U5ex^=: TvVB>M`cτc>;BVSɊ;|~2IŊeIVa@}6v{m-u/]@Vw`M%tKE#UtUWOd}LGsP`%78Pc8;z3PnDuJ[DW5~lm)T^X:Q)_Ufu[ʰ7e+(ux^W}<޷O+ÁA}L1&Io6Y2aFG(o" FC3]oS  ( qr%`|ܸrr "^ kM^?rl駫wO YZ҇ϩ@UT;كÚ8;0%`0^t+P,eA(QQ.ظC7āmFx)c0܉AήԺܗgy L5iPuF^n q,",_^<_m/T겞Q%N>8r`,8ɪJ#몉Fʝ G6iMcڒVݔjW[v2u[}`0NA]V1t@PwN<.}m}!,jCD1w]GB|A]?Ɲ=i>~eP@@m.`-\}8>ݚ[A (FnkA}$/wѝ8S܄fFƣm(C/RSޅ֥^-]Ħd\Sk #SZ"4_qUzÿ''II09ڙZƵrծ)~`ajLc:;Wn\0l{_P[JB'ZӾx,nz/U8DGSVY3`nW ~og<<";[vcy*KXE} vl:?Y#h2Iv=nUүӔ8L ΢mdm O&'Th* UJ={n}rJ ~̥b>i '&U/mi] Jh^4r:zPأB?v٦%|1N}@ "WQ G J:WAE ~9zPڝGPL=9_+e, m q`?ujxO42 pȁwiJȧ>ԣLMJ Ė?zO}>L+5j, #Uj Q޷HB3oF3rVSK2F{ƴdSJ\{{]?{}=;;.x RUL|wq6 o^Ot #V%3uoIz =U֦ĿOm]80gz/z[bP'ŲN+HA}mx"S# %1ueCK,=8 ~lAXjCȘ %s^et, DQognˤWw9o>9[ 1U؍^7܇S#YDC/1Y#fWzh"#62(nm'ub;x][S_~ @ i^. ?̩:&1:qE&3V}AJ vqY(@KA=7rϥ7FEkuqqi֧Zud ܉ԏe./{d)P7>gz-3ќ3HWgUrlfb 6q|z%8OLjAtgEa[Pi;<3(-,ROEy˭&ZdRe S ?m)I6$>k_B^xk!Yz"&ԢGɑM3ƣr]L!e.݂*K;0=y ՒvO&x_P?LpX1/&mie SOeUFMOhȹvA#c28|q#Xv#>JM=얈 &^xXvBf|^GD=ĴS4Hiy<Sxx6uM]tPNtT-J~F`m ](b^.@O{eL]XU6xCc#X T?Re]QӺ-bԠ Yn*ωdcĠ;y?ql堈 esz 㜒<6VG2)d\K KXԳ `//7&CR ӀȫضI`d2v׭^%<- 7WHγ to-7\}KA)d Eי%EaQU]Z:OVMG!x 8cc1>g:#('齵Cm8u k8AKhego5r8[b2'4LZxZ*=l}PiVϓzSMb֪+ /m'eIѼtN:rm-M&lmTfJnpz#hRH뙬+_-Z3H܏^`֝l }A̲*G Ɋ0AU""\-`wj>5|U75M&p(=;^Ja腌p 5m ,͚D’|vO5QMEUcֹ@F 8]uio8ݘMh`@Lb &5[)9O qj%,[D;G]BNyEp$!8Q# ͛|#<7Ux!tn^?Qa5(gAl*:KN#T?qOpD,⪄-XC} @j%ϯq3"fCqb+0ZX^xZ6,Q-TǻH[w##g2Y5D-UgU] =4{MRtz8Pq:BBڵǻ7ˬ B4,y@+2{,KL'l^zQw&vξFMXY C0'vaՌa3_b^>^h"h̳Rk"Ezf(zX1%+SWbuxRQ¹5mV S>>$.;N3JG|duAnp.3Жbc̠OҘU~dz%_Yvm=riD=vx R|O v WpV=)#h˓y D0~9ɎtgyEj>"{ aH/}0P+#0'*7NNQUOuUDPRI$ғpz> WEbW\B@$n, ,t1l!@?Lx"+[rÇ1lLx7b;TDU= RD׋JEk )z~u&Bdk-^!=Ѯ4%,UűՇAm~|K Yy.h=V(Tĵӄ,c+QZYG(Bȱ}{d)$pf#`ERO'W1]$[^O=J_ uا<H&-™@ H[ 7)ΈAAǁKe?G;!=阶iXUU%KЎaPcFP۟{ ?;'<}#r-`Maj9חWiu {Aܻjʒf8jgjM Sm&R\'ꨛTeZa.)[i[v%o&y'=waֳ|LEǕ9,vx{xNS&_)l s Hס a)_yHSt]ͳd8g h}װv\ə BFc}gԋΤƧPϝqG>3g3FƖ u,.[OBOFw٨c dy?"Amzqr*lAWX%*5Ơcp;Ҟ[0g]9ig9Ќ\Alj6Xը(%UVp{`1\Uwcw4G*hnKO9ř x. MTaL^&*KT;ɡs 0C^\邗 hf5ʦot?rpD3¼E 8S(]:(hh.?|tm)|/`QU{FۛF}drkaﵷѿQ6 se SA;VUdmU`}e4N}\ü5 Nk&ƻK?rp襄eNΞ:XJy摛n'Æ+ E_JShu"_ak 5 ';R=p!1+sxtm꘠_"gdKW;n _x< Ճ;G= "h'`S-|lmA݊Amfi ?5{@ۜ% M+"\l101q-n@/}ܪdEx??a;~ITwPL^R+nQREJ.yʩv8vcZP+t-z(%1l|9+[ҏWe:*?i,y $*aw&h?X+o cfGiWBca}1c{}|Hc~}12"#SH)w>XΔj\ QϥR4R*c-;L}U:CļEsv Xi-q`InZ*OMa\ͱ&Z#nF8RY7֎+`4]],6[MߴK5Wݧ$kg?_M#TWew7GCѕԘu8>}yз׺pFO1W6pVr1DJת(N8eO a}t3qJEM, K•7t05d$sg?l)St؍ *\cn- 3l콶(\v?WTe7nc+O>69P=6;PiCnZ+Z$/oܭ((`TԍnڇXPNc-F/0"Z]pT(b P>2rn!w4x(j'orEzR7Z=12 g7ٮp̸+W"bJ_j[Wj w/LJb Bo+?{r}KhnzJGEhqRgI dD(&"1=|vYmMf^!|WLS2%>ba.ti9  .><>ݵrAMzZv `a\ڐ1v_4> !)a/%kr$\3kG02u+Lrb@ٱRt}#-E.Jΐ]`&Ɖnӧ4"+0}p5k!Y'(-{KnrK&c7*T\@&;]Gje/˗L c}^P[7A'+:jn[?);CnfOFCݺ,zr_ofƌe:F8Ș j#2S%X԰8ePW ټ# W!SW9sܦ5j'\ B4Ghט򿲯??2-*}Itcݵ2Z%;tաc3->6$A_ݵ5HD\+ (0YI@P,.>'8LׂTvs흇FV?6$ER+v',2ByLEQ߅-C\_ѽԥà03ZY{ֻgh8>x~^u+t4՜U1#=ꎈ:p7oڦyo ҭ\G7F:0cS4h;{L ]'5ӗX+f,SXHp`]STQE ( `Zs۫9Υi5(;zrOh:߈3@wp`ުܬ-ai=߮_\ƌykv* Ho`3fSWzb.vג=ͨ?J7iFHE$Wx*k+ASPH+w ,XM]%p2YS.Uu^xbkѵ#}܊H~uqn}YHa\7NzbjirLj]%{5Ԁb։8@->K D^-~篛|ha35sIFw2gB)N܏ AxpEi0~KIWS[^#Q [zH5]w7ٿ*ϟی';+ǖRT"kG߯4Dxa%ݳD,}p qs>YmZ f׿wRYW*5MO EUUh໸)i|ߞkZPaF[y4 _U]jٝ%7}e۵: :,@\H8$$3n2ZNMy֢=" g!ㅗ/=i4~ DvzsrUeGvmI7cwǽWu xkWB%>uy)tLKM\2~Z%<_|{pmRO%i"*/|C" tFJXA|[dp5 $0fWC_WPW:dz]a7vFC7<&-~krM?ivRy>$`P%rc+tiCa຀ຯE'zDԽkS]pjiwDc>K ltiL&'h+VZJH½InI 8uExϸFw޺\9خƓnT<@$yyWMGj%݋Qw<)j:J(5i̬do{*VvgQ{n_3]RZa.(tcxƐ,(F݉}2n!([ھЄ,kܛ\/ Գ=Iiޤۈ=`__Ex{fR?Iq!y|5mwM~X L 5tNwY!okVZiw I-pE{Iwiq,rRl)d.ub39͑dǖY$nWOOV>b[nHԱy srny.Aiȃ)Q1B|1X)](I_w6̩WƜQڿ!SVH0 ߃ 1|R>IK?c\Wނ)D*'>W*+G~Bw$t:FO &MvG%)_h AsI&hdhmJ(mJ}.|<{n(W#Kᡇ lc.ߪ JQM@| ziW|vhx}cr p+Z{yta?V嬝TOKR-&k |9o$j E 6 ڜ)S%\w^)V謴-D")SB)#\ua GVɥyg-54̂mI=O305N)'AFWZ""!ełe,w|! ^!Xd^52Lb{o&q=08u51jRI/DT<œݫd9WrrXB!JB)3 piVC⨘b݈YL9 Bmn m"fk:e * ?2b튪Z_:|h2aFؘCH]jóꍔYMeh5Pj|/opIpyL(p |9vZ>?S[I t`]%Sz=t}=Lh6Mj!.tv,ز{?B=w(\CVSi  紭xK]$Eܔ ꖑjG>:N,Qjn ?77y&4_PSb@⽋\U #`=rRcy)s@p-F8lR;+VEk{UQ TN]kZгaۇ/:C>5?Ic?/69U{2>p.a1 _YM^ndr"dwn }E-=J(UPжLyUq-T!XPR!\cɣO, 0”MR̕kamTk_uDPCݽ(V' mx(P\kn<ZK6Kn`fީ[T 0idb9|"nCۛbRmWiԐn.B,כv-$asA8}BdpDrf 0U>ֲsI4^|&/;WǧGA4i-նy*' O`nA%ϗyC]Q(voQ)ÚkCz"mϥݛziFcB-5e}$ϒsu ]|`g[,@s e#PpѰMR68[.Dx2L_POv 촒a9UxVwF}ѓ C p33}A7ϏT?W~_PNXyGbjND@/|IN0/noꗲd3NߦWx9VI*u9w۲e"D3BqOm/&)^Pg3`R杵΄EFMz,D) orn =Ē]w%ѠHK[=u?@)U_UӒ!~]Y}^*XYN7@L7(~zv#(֯ѭB?C_w~{s VP^of4Pp7Wڤ=M !ћ+׍y$=k؇?̌p+u3~#Y,bzIVA݆!Fꑺ}c-v=w8KL:k=Pg~:gdž+.#閭~kZH[VüwJt\Sx:u|`էWP7z__P&RƠncW9SC#ۅr%EIKsdMr,(6Ķbo <,aj_sA= _zɲ/H×9ޕq7&# zA}iUcrHS〲@2>,1Y- QY:\u4uhj(43~/r#a'1ugPWoʖqR=]\7@fUi}(t7~\ZG+:+_q'Wž ɫM5/}#n)tt L`_ ^J7g-+eꚼ킗Z3nE/Zn4Mu'6E ׮#L}\% 2)Q'2:xG% ͠N *S+wn8JV'Bh0mc1rFCd~DjdLBg}9_~3XӺI!K􂺥nxC%0wC^3g¬&rQVCAmO~,0AP׽qN#D1N v`"N՝⌠sC( &ij Q(b?pքI54oJZ}jiM,8U53jU )clvs=K80T>`8 V(Ζ{gq4yk~)O-5f>;-頹. f֔eoԀ=4Q%m, R2uIoLSE "!G{oԩ*!Ԍc H.u%I<6ӲYăS~)oR6D_nDZ{ssKЇ/AEn%i>Dn YA&.>XIdq|Ƚlb-w(}BNT{j.l/v1邿l7t0JԍՏ6c"է.Sm߹*Tdi)_\nxyǘ=r~BqU1ԃ;wה ~?KbՒ1uEEhx.@PS اB)EB?y*~-4Qd9MS'u#.XDށIK+.цﭑfaUKA~$"|%K2=6~MV86a O}VۿסLηϦ8~Vd_zq}B7Γ9UEu0gY\ħL"s=,!oK{;:>@:nVBOpGӝý%X=@W(S't~uD@uWxVdjgXz[N ws5Qiaq=YԽiHR64T(UG݂`W)a즫 _DJ]7DDw\ qGhȶk8;}QKQGd#g\_*/wf?ꎳ_(Sf9PķcʮvQ VZG* &p9- p}q KjݡI֗wMY8+B ] aVEkdv~"0ES[ .evqhOyJ/6χ|zn5n՜}Ve bSra`$޻>a6ExlTvuTg`Bc㦥;?RHG8ZECDA+NǽWHBV[d@k ڎ2FʼnwZI0z%#4f۹^ d/zGBMږ#5LZ>ob7="9vV(R uKR U)8,0L]fbNH}~J-Qfg3#\Cƣj\]fܧ"^x]pbIFz9'> Itcx0\2ԧ`k3{9,8F" S`@=eǠ]b}DJ$LۥMB" :H&]O{oMLI`y3y~ڊgSrjŲz0;Vzw kL]cLUF &HAӲKtom%bo[ Kt rOGW^N0QjѨbD­ݾUào6:ا>hLfjK=Z-W/\Xnb9L{ _5p!Nֿ )D&Z @D?c;_nR2L:]J|-"А[! `γ;7z@w(+ڂ48Oz]o@Le4 P?<K `eۃ,ok&?=< kwzh,R6ApzZMPrXү'ɠPGX]RPyT[i꾗/TjQ8CN +a$ 0ZJDasJ) [_ʦK p>xNiT>ߙ;햠'QM{_?9zpbs&D̳'$_P{'c}t~  ~oK`K`WqO<%#XXAw;FqQvϋm,73xS4A׉}Ι~A>Kª+%.ZIJ]:[A֘!;KѝD,ƹceciŀ֧FQŸǰv4,9aآD[d;Jf?]fXzǣ!ôPԴnWIKYǼ42B&Qpplʪ-$|ؚ ]loؖn~&O>g'?*!'{TY r!cRLe?ZY058 iNWW)nE@H΅7rJ&gNkzåvb V9@ va Gq(QԔrpHw|W5AeAԐ[/ WUڟWR ?$'xe 9C{~va}66bVX)j 9Sc `bQL"%ǐ;š[̥R T⿓Ȝ|D`m[3RZ[bn1.8_n%tnr޳HЧt?}ZzFwlIV$m =ȲjZ&YVm,?˂ /)_\MZ"JaumPgCna~8^];X(%p@wD+>[hJ_-6#wI9|z4gR\36f 'A26ji쩶Fy{bXa=WP"-ݼkNgklq{A)2FPM^r3fn xe6d}Л0D\[?!.M 90}/Q9A4 8M}=_Ƚը>si-[]\޾QC!lK`[$w<ZdA c%Fo'2QeJ_dr ġ6 b-$4ZZz'=Rj:rz$53F ςwGwko>7+@7ʨ|Jdj@ 'ࡦ\U86S,'ȅ4 NKgDn;?k]kB VW3UqN#@4U}{%{W7/]zz Eu~FٔR+W `h*E6㛱_]0ᶇ> V$z7o1[X"5fnB2wbPmFP']u?'}oh, Ak q4WڮFwӊ4F_ϙ5=vi@§:ǠWJaegU0WM rwx>®v6egIGmᾉ8]PJ wroh:fp@2Np!Ōݒ6>^<" 7167yF_z94/l?W`wBeۭ^qf<ξY{2$|r~eUδ= =隉I$\KsL^qN' P^< -ǗgHt{&/j&ғ&Ḿ>f ʗ QjkʳmAE7@3nC;ajpZn)ܣ7\x7JWß mUݰ'0k1'"O,ʼsbIJ ~B_iy#iohEn6;/x*tXr,V׿FE%#UV[eNt”T::h%RK~W nh]+XnRڄbLv_5CQQ8Yxhp rkP?=L*/45t<엏_H |%ho -J#E܆;Uv: 5 ;6C]<\n j؏RR;5V׈a|b ׹5uk[$[&Pr@;5re1yhBOX:ȶgmk`gUu?_l~r3b>m-anf27? ʅIǑ5fx'V=p#^8%KcZ? )x<{Y@Du8vᣈp tNUN__2QO!t{꽠1RzimpxFed)w׳#lOœaB4P]Ξ~.ިaU.C66c8{|W,7Wv-^;@Ӄ}qxA{Qhr)Zc6bҌgBQܲ^a0tRE^؄@ uջÇպlZY3a 2"˨B1jX24zG8A]OVq9) ͗t[xW[8|^2l7qY wn9@Qo k/RӮ$ jĉO{8Eߌܺxw1l:* 0Gd;f$qx.]ay#,Mi}cla(gKwIAaO$~1?яUUvi2Ǎ ¡zt[<$<*mo-ȗZYu+T.uXJ Ijן(?ܘPŸM 52p7ys&]ܧt{_A4zU\i-t_~=e35D]6f:Jɹ58 G:K_+=$k<5֐a+P>" ɓr4Tݩoc/0 Mv*G)|9/Zip=D8*_9wWW*\e3OUÝBܷU[/,ņScm †**otdVY_$ޔtwz9Rpcٱ$4_67#VU( q{t* O Y-yTr:hS; OlS9 L}SyC .кt# BFa6){K/kuAtaTI" |wS(Ց`V'p<#P}a&ϫ&a|Cz3h#jxV=8ڋ+[]7MXJo)`[$Ԓ@ w, ;zpVE^[8u[Ѷ <ULbbS >v9NZz~NB0$Fe<ϗ8=XKnxn aYoj/Ƿ=>R,=M uTۏ)Pd=}ˊp$6fFXV׆Ev!hԮ A\QV%.t,jk:Xmx?p_Vg_)sh9d\ ]wC [ ޺vdknMϳ{cYk 3x+*IkѼw{!f?A+;t,(n+gݡT QLpcWNW'u^xZ lQe~[me6 /Xi1K|c 4#Š.QMlgƸ4uZ*' h{W ~hf~O0f9[$yn#}9v[vHV@ Ԡ (Dhf c9#̓zɿ{)ӁA F5tWFeEe$ ׸UA ){p ʏ#4]iBWl"Kbuk87(AG\ EFVIwέ61F10S2qi` S草Rw|ziR1M[kct T7::lQz6[+"`U슘áNc*@Wo96r=VBG e p:0)ѺE_ㆇ#TԺĀ+X~kcŇ}g 睎 'ڊ #Ic>|LݤM1] U.^YkQv >!]Uki8*FmL0kCw ^Uѱzl R5fqI buM>4Km嶈,H ckҳ=-t7L.]2}`p_>,{ݯg< /ug)Ɉ:[oCğ־I%j:]@(6/F3% l!!^R,SrJ?K-5\LejҎb?M]]RfeS`1x]hѻӨ ]&2ZR*O"ӯ= Ơ߻Imo\w]GDox,n+ݐl`KO`Hz iRg)LJ!aDܷȦY%1(+vߎbK$Z| <1I Mֈ3A6dzL\ ⽺n; VkR)[@O(u,+'茽޷ᴚ~LB}QBj}HGE cdXG:m6iWyGI$;㴺{KvcRS[ 7tES418%a8$Y,qB$eexapᕴڣ|- X"t]ϊIЎbZ@轥2WCu%~lH̤0RJ([56o^KȟW҃yM?r#_3%ƛ p&0Jet+Jsjmnd'!~5DFf^*{->m?Ddc*SgZoȦgݖiYu(ĠL/H^ndǞ`x'PkRT#@VxSQz;kBԗ$c+q$&~^o%A rMt>a9BGL[P _wğ` ( S٠;Tr`j8@`~3  * 俠6NLnRHK6V1a ˂ (Ԍ%V1<"nkR%Elr+lz2U4!ޡ :h//YZ*-ƔH=Ɉ`_Rl}^aЀxୱ7r'ӤXp8UUh9b3(KJc%gZ=bD)EzÍ.)Cm5ޅ_`]7i>k)<X5*^"Q 0t tB h*84tҝ dgCpWL?te.#^tNaa1>oWMU;j0. vpfe_zn?e/ |O$h3$?*GEv#R <]畳i3‡ϛ5&R<#u%}>lẅɉWt3~]qh]^NL6 kl}Z>sP qr},v_-ukS[!H[>[P;GQCxXECmHz:V g}oALHOId jPԻuV ;;,n8c_聇UHrߖSOJ5*i}Am7>5txЧ>2..Q+Cv~vMtr'Ïiű)?riQ _@2<oMA8lig -W*Ou?^Ss -7aߢq;zʻ5.>.bjAS#P <ǫ ?Hj N4+}'1\ېQe! Y~:rxVW4Be P 5yf.ֿABIC_nܒ{p&,Rjeɭ{VJO_P/5T! q䶨OnD⽺'gƪx ){UC[Bc}A=85)We&1ƒjot뫽\#gq)դp9nrE;TO}ϵ·x؃sH×uLvŃۄ,2V'`t^X5aE yWKMJK^`!B< k5ew&ַEKI s82Nf_aZ8A]_JtZzPW `ALƊȹnXa O][ZSa.^Ъ-9wMݏI}Y_=/wOGOF P[lCOwWWྖ^$y|ܾq;uXa}®}R2^En9G}x2i׫[ΩUŠegNWFk;׈B YmVp2RcrԂ:9ӍvϾHοr۸?ޘOPT(֔um}m;o1rOaj%jVZ! chxXO *Ƒ%t~4oTف6Kquk) B[z2"o}ayq|z^l[0l t)]@?di[6'j)=RS4FASUljCYwvιqa-  Acw_jx֑T(6[zӿ1^~KavȺӴ>S]a(B [gk[4aYz ӟmYggtV(ScXD ؇z˭)] wooNq7B UC[565_t iJKLz +{2 2a$~eB־}Q:yJՄnʳuӗUrm.^UƎ1";ۡ4[X:gciL}.ڧ/jUl^OY[;kv!׆WSCLk"bN$AגLUVi^'L&%y[LNՆuJ_6\hl+O7mrh*༧L /urY*rbC뭴0D#n#ZQ cy'Q7#%YTn/g u+gYn2jߑo{E}niaqRS eGSr5 RH5 wuB$ܓGƹM_}ɇ8Vs>GA]kbN)BeUk!{ӇNEg 6iAǜg!ņ)OM vҔy&sfXZ A|[ sMETЄ' 1#|+=@aRk4z¢ÊN2pFawe_)z:;#&;Zm(_놅[_{uIR5(9%b^4jI2I^OJUB Hqbr%<%rWZEK0/4, fJ; PTX5Kq_m=2+cG|ꥉ@kVLA#7e]enH{_|t_{\_%i:jb<{ZwZ[kVIxPBU xOk&օGfuUԀH(S (=n(nH'gPժmrhWtI ރ=PEIJMHP]b\Fic]sd0j")9!P2pK{ عӑkT@T MCbx?l:ނ:u\vl{E, v%nc40sܤKWkLR>ɊFL&~dB^jrXLSW5jbh2ו*}.qar.Sޓ nnݍ˳С*=Yޣ>Ew*n{?. m FZxp 4lb~jܕVKґW#%#-SFMY>][xjL iU.ߪ#r¶o~7´?ԇ N#etPYI}Vrj]Q1~%0s _Em;*]45J) qwy'J/r #ZwGL-<P6\5fB'LII~Ź,Y#Ƭ&a Z0 0 w ]6Xl`jo3O=C{9j}<ͥ?r{eH##dPHl 2wEz7 ?V%l}GWY;7֛?6)[bg%UB|5 } j+n<)v(pw Çtw8 iS61t/&4>*?.F@ _kR՝p:Wg+3,K'i7QI׮܊2:2y64]OıpJ'xP"Y}M tYuϞ:&2qab A6|\;hϢ1v 2r.3Vev ] 2fX@Mw=b Y4ʾ'I}; v,ii]|K RX>:c% :SAuEzT532?gB KR`3+%xHݒ_{s%Vh ~x=U܌T&Iv}*Ij(jCd8*%gƧ㌻?@;ܔ[,M^AgonN"ݓ('iSyEǤF"aEL`u<"'-^6ИWIJcQP,UvPی0tKq2΄b ~==Y[Š#S*AFתP sWW&yt<]U'sgC*V၍,q.+>2m`ѹjnXĪ'[!e'ZdkӖGW[KYp]ĵ[CDPG:v+,@L1+Pv%5+'0W>K&\QĸS8֕nLPh.tVfj;eQ,j\d.߮gW`0(>a>n.r3LW- `)Kh6 u|uS*|QxJ+-sK}^,EcIƇ+F!V(:`w&0 js*E)OP ۞AKFG|ڊLppJMTW]~DF, |-<`ʰ[,?iE7+KVzAx"gWni\qҷx7Bs'ק;Y+9C9'!W?"A /A/- Zl,׾;a(Uq G'p¢ 0*ŧ7 a_k;UuykpRg5 4WX4ܭS^ ~m,Π7k)2$!KFW0+lt$o,T|@5r`!߶t›!0evp<h0¡Y vAV0=pt,]a<aYMۙ-Vsv3T @bg%ϗ֨g,>#o;ft&K'h5.czo%К_$LE>oEw{#ESw joMw+wNS+E̝*g (nKm5_aۏf"ւ`D'AK-/ C2&bFEu(M鏎ҳ4&M챪|>]+Ӏa㧳;[tz]vEUuOA]Ghp|ΐNpgN>8G(ڳcѼ7åsNެn(d"fQVG4%fO#9o_xB򢰏%XѴu ܕ.!qշ^mM}4,+}mļeʕ^1P4ږ;'T2|xP 9fKKH8bj+lq޺LfB#5ԗw!FioəPn 292JjS^ai2{kW2˗1+2ٴE$e∑oMHq(3=eGw WԚ>S `?4sEZ~UQl*l93s)w@g6lJJUd~Vܜ{hB!>vdj߳z' +䜸a3PDe-gm,툺 ]Wh[tid,էfPvFĿV{V+4HNEF>W%d$xARW|>&gkK1)ByNާ\6bPYZ )$*JTl(' ӡ0(fJa}„g4^Gelӡұ@s#aL_zgjԀt UYm&4HV}| e7^SM.r $]dUz6 cjqcNb=bCϮ%B3u(_>VYXz tvFCM7Kq>6e@XBB{(f4猩c-1d>5C JAtKTN ?#AqSVaj-e9u{h2[05dV҈֮j^9A`w=R&Yn.CB$Y4Ԫңgow-X"?V&:9&sTTŲDpC;d}ȧp4.:Ag$r9q*yQX.㡻*Fg ȹڳh[uZgP'fúz;!ϝA"n/!yX:KB3"'oY%ԫUa L"C#4sCZc-qnI"{ nIW-ΔB}%߯GȋfU&i0{z,bAɐE;,-I1pbIϹ UOjܫB?QR`<4DnQB"qBW̎,~dߢW Kus:: Ȼ>eKau9h[ ΑMr3tmv=4lk xl$Q \iɷĪ xȷW- x(M{O-ײ6Z)}vvNZuO>ee1̋v2ŠS#fY#}CsEu\*Xj` ,<[Y:-$ cH ܏dƚ=JirzR$vBFЗ{vKҾuJܯ+2vBq e՞l]0@b iiVXdM u_߸1yviBĭܔ ;GŒ|5_f\ªvhˡFH-6~0Tr3g]w/w}̀+E Y"P<ć{݉aeuP)kY*ԖJ[1px}n{/ݠ"1љ2--֔ZQoy %ɚr?)؜A `oj4WjZNO=#vl>heoFPדFiS{,9Sw_ /DbHp7+yqd)QU%lw~F֒ui;YܡӢaGaAvsUޢ=v5]UjOIEx8g_`IO3^c"\+I77ekHrlUPhS%{L?VAYAcd츒=[N$dɝq'ݨ;Avm׮E7mW-ЕnofI-^JNѪPN>3%*X)TvIJWFikJqJv[E("}hoUFƱpVkh Z-ub);o4Ԟ ua .1ŃW[dt.} l֕R+6yF';CI*լ t6mVz?vMn I$ح9dPir,y+*@*i,$38;gEү_]-P}72#0yWý8zK O.?#Zhars>O̬mܥAv8.3.$PJx B4B J6sc\Ɓ|e}O'lImb]6%{rj脹jMΤ0z={+]FY._R@t6k. Bҕ"8=!1{KH=7/J>&S}S`K{$c3%&MtfY=d s:Ӷ៣L 'aJ/,5 ZAmer9Ѯ.bt旕޲#S#svZ݂zl1ӧENm'[ѩX U#[F(ŕt.nN4_;O;V;GgXhsa{ $>RiL@U&J %],̭̻7%{Gە}$uk d):GHਇ;$BX9H~Wn-ڇ{ga8mI'֔[TO۝X:ܿB{nS!9,ֳR1Te¦:Z)AE`@}5J؛[*pv)2ւ+i.ӑdoOLXagp<>"LY ~MTK$PXCm'{ '^ZL.oB ߧmÎK0ыvQy1N7pI۴-޶$fjWOKxWc!B5%94qqNgIOC2NhӹVBUPc #3ar#-n$'C Bx N(6nE6u 6Uwz8<]K$ھRr2`)\MvkH(}| 3pO`p6('᧠۞H95䂇)~GݏUv!ɾs7u zXgg\`yHd.~"w0@PM!XpuTUVo,$Q~d< ?(Db Gr SjD;fm=Ivw~ y>Lݛ:+N~ܦzL}VYrfj|$؛:ݵ91>E؂g0CsPTU$-soze# s{q>1g JyGGvݾU;/*4igTQ.3s7^_k *PtOK>= N6VY!{;A{6T!7(G6/5Dtx )/&~l \?s*Hob҅8 o_}HzU I&,bNXd^>ZLFg?]2 Ԑ[#wJQN!r\`r]m6p6q|!AuԪx o}hf>5ֹ p"p{ :հLD//8T]P|XU! 5מ:>&3B>`W oM"Wi۾M58RCΥLv{2JUHSQr.a6![}wr:Sq 3xew";8)h8n,vJSR_P*sa5u l,19 0a \XQԊ߉8nVA}P?~+azK_~Q_~A|A]!/A|^^ :nAkc-:jr_:_4ꌩہ^[m%jCxA]Ҁ Nz&L=vb]KmSK"~ɂǕ $yvpRP J_PzzqBJ)y 87B7LkEh҇rUՆA%xC厈ph~X}w  K!a{X^Hl^~#;nXkXr=Z./Ufk!AvǝOsewX{$<3a%}_wH+o>E%:Y_P3[P/ `ΥeLӏ ^p;lu30Z3Sd?1,S'Z@}`F+dQ{+̘pm}nXBD} UcNV4V?nޭ L 9//|{؂ ZȍRq<8Bڧ.0JvD9ǮB ξ?ZWGB `\3~}L%x5jM3:<R8A+O٫FއGʛ֙[OaK9:6->bX2l4j&i\A Z^@V& ~V7quI@^7ĨxM` /ld-|LIAL)/&%>ZrB-4p,ru۲]=)j>e16)Swű dL}-c:M5(9zv|q>[ۊc+Tz[ diG::Zhɒ y_P5 gY-u]2$blY-OtW~9(t#XHQ%ik2^KrEXd5>C0<'l/Cq΄Іgx$b]v[04QH~@v_u"B)u& RuQL]{v?Pe NJ JcG7쥫-e|PK4Գ?Pw:I&Sf⻏qx4:GXa9ns1 j6FiMpbG+ FFɿOBn>пcrZb ,x0*%>_OCRM&IgEH=ێV5Ե%Ŷz*ODq ţLݹA+5KD2=T>,Q}<=M66<7~`i2T>[ΪL5h!67L g*>whf uVӡ&6 нc.y8_rf9vPNe#l<|A+F Vʪm*gK$6P%j_K{/wQ2j̠^=>ʼzdh"A J MwOku-3pz{<Β ŒS*=W6+yJ۱PJ`XߩٷZ <`ۻ߅LRe"p`}M57aDEU4'ov+՚-s4Ϡ ,͇JOgnRAR>I=ԧA4e[rQt: |'w :nmq,F|9w z冚SfEs6"[XQ~/[݇q?ykZHqCm.tSGcdM7ߒxJGb}BN/ː-y.(oŗfz0Czʸ"B#>73 P}$)4ӯ{fI\D~'Ŵ\ASߪ1l#8,O35I*:-)0řGq\KSJ/I0 ? ̆=aw%9ZbD殻)5FމB6p;Abjݼh<؜zRPS(QwB1mϋNtK"K؁ӣy]ro_8vS£Q|H1`*46Խ+?|Ȧ.^D1Z.&+UwZ|';=lM.he uTdWbUMGK?$Kfj)/N460Ҫ9 wմeow1Wc3묡+M=Bϒ`n;$#à63ڧԴ-GTE=4J*(a'qzMMgؿ1z8Pd+ӚV{jʵn4`ϼ y;?g.EN{TVS~=ǹ|!#<7PU؅nnkKg 㚌3!g+*IkZX^+$KчR`P'`2z!.8Kl ؋ٱ U)MKP! m뢧$<no˃ K Qd%-M||+LZ1b6!h}`ǰ#hB#QO-ԴUfܔ8RTq\߀RUu{hn.!# m0C>%hi$q7b;Zve%j+svjKr7 #o%FpbTwZ;Li/ )kQ!w1ujo DoGf,@! {830ZG7~*L]. i'2r!:ӕ$ࢧn"[k!e}20/9ג6 WWE+d57SA=IX<,_xf!RǩUhXǔAm`/ 7]f崋ٔj]uZhJ%T<LjglIilj2(TmfJİ~=#~H*UaCgz+RPl3ʔ9]=G]\$Zgi&%Rcy"8нW)8^KkQ[Ĵ蒈cV:AuxR" LBEe#S vCT$}_\BïF"ruG&--zpG:7)HX GٻX,) OیpYhT߇ذ2pOCI-u<:K;`u~e_MKPҷ %vPʞJȐ{pƆÔM';6fBTKz4v- P= L -t0^l{'1ĪQ\ΐu#%05ʷqySd«ؘ>t4QOBO@3P;2g>CqVETS8oUg& Dbi"ŭNoȋI#2ݤOk ş|ڮoʖbHd|…AZhGPCd>#KviDFK\z?x(jq騆h9SJ_F1o1-ٓ'Q=I4d1 ([R8ZMNdPd᱗ÔhӶy",wр!9QD3/*KV>.uˋi'vVäGnM+h^|Sf{@h'ϷBlmˌJW@O6.tCx QpChi齗7<LOͪ, 2mo[;^u=Ky5n%l +7Gý [Qzڜ ?Z2!dZOd\:~Țt}^?3\a.K"8i8G寷)ЎgE,ßUjgw(mr_Y57&FύZU(c]nnէudmTv= &-#Z?+2!΋NUPW_'ElfBhd[+b8A`؇{[^V`0i*Cp $s|XSuȼOʠ&? cf{,:1'I2{_juVHۍsXT؍r ^"8n_;pX 1S^$OK4 CiR8-8 v/u> ^HW~0c[Nn_*68+{tƪ* _{& ]:G=dztЍS иjcpN#FvVS qƷzz,+ez,S% 5i p -oy:cxc}{L[Co*짝]<;M<rGy훓7%PUٽ;M8˖lmbc #tLo#@?w{Xwkǐ3-5XLXaCto jbxzAH18c{VJW5ւf}I+D*bgq=uX18-L/,#z}rMyt6l&M5wU5"Wa6?XՈ랪.,랊^5}Shf2x{ ڔOQ23;Z̙V*[Ɏ"'ޡ3YٖZ'MgC %ɰ)3ǎ=b ƫ+}/OxXɐ\X-z]7H_vGC 8usHPʉ]DwYIz#.,:Q[}A*QLs1NhJە];66ԦRmQnnrjK\Cr(*B+W4$vP+w}#]R=(B-ql` N?>wնu"6bOnrog0lԚ_SjÁYF VVPBD1kW&GO™~wz{Gux hiTu酅pX@0k;0&o>s(yNK 9tImLF>NJBщlOsUb"ie=Jn>Yvc/;(!GwYa|V%X\#h7|w~XfKs|DMft|_;4H)TU !/~*-e MEq1vדP:XzA1'V8'?&kov';aƧJ]ƛhC}=;BPƲ Me0@h^bwqS_Q)rKu3R64ѰjW(|ok;」qbr (}R#K"O*_^K0@vK>L]+rgBkkXlEpLqo1t.Qe*ᇁC_1;ӧ6[ m$%Q١.=fce;Vη3p+2` fSС>=sq"45a[Mh>ߑ:Io|Ki~1g5HY@.^̹mz% o0 yb]CxǟG0;1 !9ݏدS): jB!68 lsba\mUønP|9tO _+MvN*H|5zXRK"aߗ\q*=HP=[>d-}^X{Eɡl@q(> f,b(<W pG M#UڇEtT_MDt: Uq 0$gK>"N+68"J8vVʉ?RD $}d5h/=(>3/OcO͌v r>a}TbG PPͻ^DqӱV sW=nkTi"7\TPFIlA-DcFA C_ cQZ:I})랮N= 2"귤xk;֘W(KH(;Qߓm/AJXxHŃNVp~nd5B][~&ņ32܅{=BR ϑASk+~>i<`)Oߡ_?[gZ3 &fSs|^ǒ1 w5N, ~|jrJ\eW%]NDPCq.4tW nCnoM]=[V%)Gs46HNVrvr,ruhy=Wݵ S#XBoQXFuz]Ż|JX9ܰQ$3eQ}w՗{U~O4y9Q"f$YϜٴ歯qt_hVw b\G)-OfLM/XeXy!7~ȜPb#j\0 n71*B(Hv,qEsеu,Ū޵$`V[9iEf??-ϒ r#h# ] dG]t@Ӣ )QF8(oa*oeOԅK6 +&PעcQIIw$*a[vhn/AG]c 6jǷ{ҹTyѐ++?#]ʖQ3zZ7ď6_yo2 MpodIi;J ?b5_Jvpm"˴}QvG_K;20AY¢}$'fKAJK-yj0BQ<[G 1^{(XFZ3nıxbqCr/gpF 9i\NS>(h[ p~fCgd P&#ݓ#qP+/\J$Uvf1]Y׾[5[6PStC;wT޹Pz:L;|#5>N%0YD4L.=C"G `C ߚ zMH*׭w/HZ 6{K=m1ItR;Ծ|`gk2xJYXZuSPG9ld!^VAzTf,n@>}øwq4Kkif$n&?fIfHc H-aFOw8*ļehlթD KtgD"@ NR̻CZ}o Q^i{Lʤ;o%AVB3pWA}Ÿ;nhH,b:} {u~-jޒ6shu%\1]gOxae \h_Zb ЀeRCx;l Z t}gJxԸB*mI;rDJ'[̧k{< ?ܒW04I`Ju+.(xa;8nC}>Cr}#!B.zI `J2-\+.kuk:fMA?Ѐ~UvdOK^e${T*79Ԇ!w)q yZ/Lޅ5o(D / Hh݁%Im5p; K'4t9kJ׀Pmk ̵_qΧ7b!#Y_PWu*(qhΡ)cPg:4s"%]s dXvQE)/?Cʯ]xU] Z&7X|2V3(^1'6"06@Fj9WMPk̺W~-mkivkoOɻC@}"dභ_4v4a>w "V~v? "xt1-A"%J\@q?VkH9=.ej0 e Vb}\l9W#]VrjMH?Gc 366VITy2u? ޤbd$k*VmX]rd$ m?7ˑssSeիL}?dEmKR:3x"L][`(54X/M L,C\zeN̍{/b>+uOKz6=VA}\On?*r-ƋS9=r' <t7٩һzJ~۠ڳoO`c@R?1*Tn+%A 8 __$ɫF#wy~Q-eԼӪޯUz9f(];Bퟓ u&Ж}hq%{9F+C'avTYz ? P]yg?IxOC IP܏`[b;`=XqgH۾@~kDAhŊ[#9;Lߦ9Q`'SGM7s[NO}jU~cY8ME&^i@YR>}Il]~# U,hX[V 5~ɔBo*GB#r0NA!>.{g"ǝ`MMu3rC^݈Bt>EG$Nh*IOo5z}dnTZlo۴(}f#ȷd ?SW&Vh 6O9w/>5{,E8(8ZDPBKT[O*JkJt*v p7 cjM&^V й0.ey[A}srfmk*n Xe؃{Pj'=wo0 9=A)%E,手ޓ&7ۗ\C8g+?G,/>#qzxӛ禅)Ŧ%5=N{)c]| ͨwiBV6XHM/OcPByi!mDXЈ"b7A}$%IJi8UzBeZ$W*NtJtfj&RVPCzEƳ9&YU]Losk!j[x^â~-'}YrI|:|C)~c}$aq`*Wh#̯}{+AE6 ŷ?^T -i4F~Rc<|iѣ>uד`G5e!`RNIg~Aݸ{]LV3=R;Z7ZF uvZ-&Wn9EEm5uVe ˯<+A$]%{7U7Ҏѵ>݁]SĻ:0.խ0 ;[ox^`=G}M9NQzNͪӶr](Pfrr"4fMF1$)_$~2 ::Ag@JXB3=,Z.ѿTd?KXۯJhGJ̢ՉcӘ˜]ñJ,rیxw@3Í Z닀O0KMv) 0oȽ(0f/G<蓈09ͼu}K_P=ʋ3\u%Z!nFF'l&f_S:E."\ xD=_w^T0(ߖZW_Paꥥ^jZH=}PM0#Nk/SVKϾ}5 XBa92Ggy{ī;(ŰCt! N~Řa2(Ĥ-}{,2k{i5 z׃OBovl Vy$umeOw[E=0G,-22V9ύ:NkTq%V('D|!$S%"O)Gc.`uGtaLr2([z"AAcZn4h=js޾Ԗa̢q##lQ s_ ]!gzwCďO<["7} ~j+W&3-UO*5cvG(֣krNЅ_/+L.ܠ!ZO}U>: >ϗdw?ԅm'NGa{g";"|mhldIzQ/xb#XW LWs$-<:Ɗʱ |ͥ;h9;u GȩWbHV /(2ځ.3H;Gsv81&m_DgGOΠNW/JGݏF؄^j 0&WNpX~Q4)wb}ʝ_P ^EX|zpk%Aw ^OޘѼ6 (yf{/7i n7:_N0s:$ ?8bl^ 6|L`;A$Ob(sF %3qߊ 5K">Yn5q !VK=CT :#-W_N_%,pƽ WJ^dזJ ghfgNki݊ƭlvю",Dl( n]];)}RqS@Υe65ȩh=#7_.PZP/j#S-W4%i1͢ V!F|& :}mubp"Vj[9§0hb߭C35FZOz! YGm>j{CAm2t/E(20u-9Sk{[AݖjORZŗ4-X4ߪ F<Aс@ѓ(:{Ԁ,cCvu2ϱs3vG eǴY(Z:Ϸf'(UGKļpxi;,l?2wYG=i"6+O*OjSe3ڰ.k%v\N]VS.m҅mM3M^@iM8e*@1AOSXc+} ,>L ,j;g_J}5p<2H|1u|xelC|C`!ƣ[ME^:L1u;9ET{\b=Lkt6eitWzzR" VÎaBqXbՈF7uK>gi}VCkɐV>`G>5|ZU.ݴ]?Yc?Խ0Op{N &(mYciLǸLw4A7l:X _ Խm5Z'ݼ AI߹OP"?4!]䍩Yd˅- V.J"]ogՈV[7vE6% tg9i'vXWOK;%eEh '{.1!58 ~ O\^S ewŴ-$71O{V5SL'DgU{ɶ5s!M{ZTsc..`3iWpEiu`OA~*6u e\GZϏ}F>?x)h ~l_Z]蠶ݳVrfK1h'幡ImǚG6^h, ⚷tnȱ ~4|AmuwѾZRsM\Lu2δx JhIfϢA%"`Ԧ,tǜCuJ vjro F0=; $lk@P}jJ7z, G~%jfޏ2*o{ڊ52mxلfeL)w_ :z5M gcɵ?"hᵞTluw,#6ֆ6䷺nh-oGz;<ιnpNN+8 aEE;({qIzz pa v bʴ݃E,P oޙڊM ;w\O ,V#tGRoM"H6Z:S+: VbiR {xtWz5-K* |t%y3W1$Jc-9rr>iXb/յZ 0)q3`J|4MPіzF#-!DT}'KYu\`T"v O=ph+fYKSwqgުiwdI}EԥN[gpa^vo6G⧨ 9s{|aK,uҐm"^E#F\ZӲ\՞@5G';IcfRye|&UϪW>zuAPr.=g#T~UDIe/!=9da2dE(CawXň%i= c]#wS*f/kwτ[G^#mAdO ~UѾp>'}vho쫟ߠNB<1C+WeV~sLbgb| u4 ݮs[N;CC7ͻĤu40niz:zFbA:؝}}R:A;zF=zu~^ɹˠk.^Ktn q%ӶᏘ_OpT/ÜWҕ!;sT[86z*c{EܲnǡrA6!ݰqFd~^?oрUU" %Ҵ_J^YޭCV-p L W kjBt:c<hbr!I-ҞDYS?½.E8$XtQ{[=ru2 Xг7}gA? r$GPY W+dnOVǨbSPfQ=8Ʃ 7;3uͽAK+Ա4 :33"Z/b 3PGfa<Xn2Ih0oh46|.nO^-Am _&VS2"d[B+:\5S:=ܗ *? e|-{=Zjz2X,: 8X ._aFb f0V`ЩMeYk?z.x+X lZžW&JyƘA%jzf Y(};쨖d<({V*lGn镼?F1+ᛟ\g EېڸEq!l2'8x!/?'9qK0=s>hA U\wk<-IE};X>"_Ό8g2-Wybwjj8]L]]FPKdniߖ*x 09-eq $Tyos]#~ѡqOgT|H@|X0$wC>+73{)S[ _oct35f:X{ du?q`}l2ϏUGI ?̾ З?锣;D2_X!5}Cp0z"fydg>%0ixT^w`_E/ kW[Eh 0ZzA:Iz_eWnBtǃqԖdqSO}V;ڌz0ԍO7I n_aSs9dhxT^kr8Wr/ɋ΁EŬ5}2<GŲ;gP%@ي伣1GOpgK 9(BdXHB(.oTQU˖ؿ/%qDʞ?fa#zGF jycjЕsV_Gn=r iWmJ. 8owsPP^3C0Xg0ٹ<,XJ^uVV;& 66ߙZGȠ'77('pٞ~rá?c5u9tʪmA+.uÊm)< aL63#LvO$ŷwt$g|{y,z ]"BnfO ǂWMyr*ΐV#qW.C{f6o 3[eDbQz ؞̓t˴flLTR_/jz,ЭPHfٚRlA=N"%{C;D"tbօ*gC3A=?Ou˫S{;`lG@,q\[4zb v> V}|÷6FݑF~?=HXoC? ݱA|!ZzPe?mc<Ij8#ԆȢRhE*w+Zc^]iـͳ69LnӾm53]L#ބ "tվwDqs*;+r?I!tYUZ Tu=ei%9{6yr#0OWP{aSt-xc,B'/p4?0  ?a媝c`Y][rhh/G}ө kC;"t˷st cdCM`cgUTK~_ <`ˣ߲: S'xq zwKi+=#`(g /ZzwQ6%*w-˿Py xP+xkm!gTZp.ʌ=zQ#\P[,zEKh8Vm[~ePߨ\唓 r)mm+S.D3vc?QrɋyU.+nMRr5,B):h1NY:^1sYbLFWpߞ:5w9817+Q]ZuJ-%~ؿ€H/[zLKҶaMpهHd_Vt=cE?wKj%Eot`x$̞mG9vFC՛; kAds>[1ͮ+I,v,,6T=+IŀKt+(>EcPZ>zΝSWUvXF3_ΦSH#*dWӔBN +(bni 4m })Υ86FzV8Z7ML[]3N~/ck(!{Pc$,B|qkaxS[J! 0,E!z$kŅ}W E左L -.HE~|,΃ ꢟc CpL٧#yh2s50ͫ.(U ]P1 {bvJP}a*'ݠ&,.1VTe؇1]#+-f,:H}3 N}%UQ{++;8.+ 11'[zeXТemqi9s*w.&1{'QE{!4Ezu7 ڞr>>{S{cVݹ-Kiz TjoќwcVU1ԵJV[\~kp-?8ĿE >r _LNA2O xa {aOY ͏^ڏ4+s04 5ԫh;F'I.jd;gQ=,;+wg֔w3IA*%:jZ5'i\h!,gZh!<8Z"{SqlǨ#:dmUgjQa dk+oޒ-, $^@ךo7|ob$(}Ī̭_vE[0*E\ JzI2s pE0 d ڵ]ewYC|P>l_k'^`p{*ɭu֕^?+hK%^[Mjzrkt492c]F'۟*aqvV}3>Y@`mTxfx+.'No73bUA=>o J0CnEx | oVMK%hI2v^-9sh]j$r&5$ԀQ2wƯIz3HcOꏛ WZ{Z /I I]0baV[Glo'<+IB1mzhoZ&#30 6C v.O=<9Oy^MkL[#O$z9U*F&q8)K:hlI$ yOӲ\!Ņ:5u[B)=Bwv_3ӷ'8zuy SrEI# /& (/ܲz1ԑfIcB=%~U ]Dt[3nWPxgi|NRo튜uF١K#@֯ס8.cHpƾ){Ŏn!c&"0wªkm.z=έVX~|^h!LF&M+ɮhۗͰfaw`;}j^>7ݗPsiM#"HiX%vP)NQBL `cg5%jdƱ<)\g/Rn]EeSxawA~ t ~ꟼLv DOrM^c7&Է%e (Ǧ,f>̦h|hCla50%UHO6mwJjK%q}s&2J,q `z<8/Φ*YnvQlpPzŞr>gBh 5%g+T(Z'VKs:=o~g˚W)ē(3g^x;n@ е|͏jE,C?j lj`?e.xR+ ]v%=ھvz}'>=wnU5@HSP$]moa}uC1;q-7#[ 5ͼ6ԳJR$8щ2GxdJu> آfϢ˦-;ӱv0WziҀBFгbX7|; K@4~3xU9$u'|bfƍ^/3kOg} CHĄ>u 8aYNXY(JxwPGM/ mkK&V"jzV>;/&D74 ./5Α'&حȖvif9B962#ƕ'ȧ)$i;Sc,t[xDd|ދ1=;hl}{A鋠%~P͆hLAI~Lk)C[-ծi}׻SփWK(vT6ewj& ߻*j,rEk5RPçъA$w|~5ۅhD3>hmiQq1f=iH+j\"yK1Mnߖ|5GB4}aR Z)QA?<"hd"b阶QhHvZGU&gާnrgD MGUS.՝ơJ uo\vD^N]3SS])x\O[`[Gd` M3=Ig?q\ԪʼnGpx]@!p\mT=k0<^;Gɦ߳}ԧg0SarRvGfzȵwU+mK^]^D#! H^ Qܵ>׮dqXv-xV̥ϦUaeRC@9,apB]U#?M>5$vz]ʹH7MWrȧ Gqv]^Ifͻ..sޫ~ QTVFA׉ ~0k{Pd~_`C桞MQ8_sE|SԖS7%,Q9+_#9Oj^a-K }*wpKԓAS9n"D2Je_+וxOVྺ-bHiS śh&;` A=|6ibA*褐~0u6^Pߚn,[YzSPϒjÙf"v-lr1,8ůOF/Ľv⟢Ճv4}:~}V_罾?#?u\}1{R4ջ<4]JW r'4d Jˌ9aqLZŽ2u9s3Fp ۡcyMڜbB?/-y"Ĕ Ԙ֎# PF'G6sk,_f\|^kE;#~Gx# Dc1|{Cryuq,%g{F:ʎ0+%Q}|f+jdxj+D_ [HhM^f@[.pG+)M=!y4 7z/Em0bPD 굓p8 ͿoxL.3"hbZ!kuQXgbT蟴G:H)m.F!"S)NU'J!ndKc)BI׀D9>] jP#RO8π3AhoqIHc+hh\xeAMƞ&SEHt@J쳠>P\Wugi5:/Y(ZP˨1u=u*;Ԇl ej;+F 9S"rncT9*)ަG4Sp6yZ 6l=۟ԥ*9cS7A)ee+/ZEysǵ 9b20}ORo+O_~/ nްDhk{E-Y; ~?Vq# fZnxR vf $~c$L=GKi}bXA=;0bT(^]ߩ EK}VNpa'-`ש#=0y+Ǐqe*WmS[&!cꖰr)9TXXC&?zo;ԛ=HE:=;z)uV k*cj/1&ǝ7ϓMdj7L]D=]'id(#9Ӎ"Ȃ뢄 Œf拻({jvZ;̳g(ڟz'!Hzj.D).тW'6#Zp )&wmoNAD' HZQѷVSӏ%WwZ z) ծä́^?[K-l"+oo?ꚃ2ҳnw43YcZz-ọ2X_KoS=-ʠn#++,EJ`қM:W+j ֫9&L]1t?jbz^19T(&#9CO,>:Xk mSzЯ|1苔$ ¼eS[0xh 6&}#[s|v71u=ηAYǪҼA7-b.)oXԃÂE"Pԧi]|,zړ_vc\KTM1 !551| ~}Aݫds_=B۳${d?Ǽ:N1ޗVx˛ ;.<;n`jaZnƠ}Λ~mn$oLp;3f:`s:4eYxn5|Y]o= 6K$? S!G6FtǺJ#"bnmko65(Ēxbq8ᓘ.^G^\+%gjq^r;)G8 -}ӜzciX}٥/Ĭ.I?fW;55ϼXǦl;K0F3e6]櫉M5 8?low:X]OAX G1p`d!{ P郏{Z^Z4TS6_dYy#6XC4yo1SξnBV j)G2 ݷb#VH2"(SCZEǖFnW M a&:\]grRT.E-X!8Vݛ Ey%,2Dz}dU߿sɃqO`Bߋ'h8B1&Wn /,g""q(D^ھUu;ŷ`,Űg } LRp߃5S+fԁ,a վ.%g,1QjvWD\l 0nZ2r!s #'=m4xEWc%Yi~6#+s١E:g/?t 0 vȖ׭e4 @U[|y#bX:N]QKn:qרy?˺oLٜI$Vԅ?{ɩ|zb%gKh!x=s%~R$whѰ4+lS@ JMT_lL4 G#u>xj:E9Cu]Z_ŮVXޗ?y'TH/sXS-8 j Sc'Lѕrmaj=B϶%e`1*{SNJW~CO ӊ4L-aMʏt(]LV;1@*[oZW3>_/GL Prg2rҲ )ןYܔu>U44j:|0BUnV: ^Ȋהn$odévJ~NYJU)$gO`wAmQbCo7H?ϥ\)S';qJNs4p$ x0<|>PIýWWÐDx89ێj0 #|E/L )mȴBTpL p3O mH>]KJ ~'H}xFR%gݼ^po}K 6[!(Q}saXъyRҘIu'=j7 WA K[4,%|/uá.i1NЪLrE0M[-Ƅf}cҮoy56tgo[ t[B) ]9<ˎ$jbaXKJS~ ˚\B3MX IǺ$:ʜQ:^] {~v\oOy2&ђt|Nhw(]OOxmϫ^o#ə-c ڮg̭%@ʵiC.bP|Ҿ!2 02sѮڙ<('Ss3ҙnGt@AgI) ͬ< Do!q\02Njw%#hiy*3vʇK!?wS[um1B[rt!z8$Vp(۴|3 #85Mum2)x1 rT;Z)Sjq<* , JvZc) jK]!=30InQWXFŔ9Zw{B2=5BC c_MQ*==? jOn.c J9(7d B#'s+#t7jBa:r_bJqICa*/7U "%&];جH`z<iɪ$];xKlq\m6ag* jQ"d5Y^-ᠤv//Wu?AB&R3Q;Bk5M)#IOEhۛ탏,YU@XD"G ( Bѥ#난z WOS>5S-MҜ]ړ1ψD3b[ ~)v!3}]kkyI[' x(CpH yڴo_:NWx%{kً7,ϗU@].h*4G|d#zgPڷ?)=!;daLuxb,d]%"]4QZ&+>k?Z}#n1z'Խڀli$̓rWH72Ϡą[Sh][7*"Jq&ow0-QfX|D8ӎ%8o'"׳;a>¯]i}%KO)\eݺr𣆎~P[ejʳs\5|f4 )C;@?]G<|թsL}NME'B@sS`3_"[e=tpxSck{r[wZB3-ЁQmm+΋ޕZ&w136_ [鸦ciڈ+vJvUqo i<p!|Q43Y08I 4{apWeJIh5|q; 1|,,tܖNjm5Em^c78~_Vd j2s m?6ؘȨCQwSh#=#wo vtJjLQ7ݘKڻx2^ 4Ч.o1;ZOu٬ٿGi3|Tk0WmΩE Yc v(9)7dBHB&@,c{Zjև!eDoћ#cьFegHi ďx"R p!?#bzu5/ZWްOb6EDU1,9U{,hcȮmw=#)N7O ,5D0z/T6tFE-`Pe|BzGO, ޗ:Gy"t,1a$og);~X?6_/4"s"(g]bzUDtP2 >Ȝ%]Gmpu),@lMw3Pҭ%E+k{XE/OS&뇈eȳ?W5,-rpN_|3= #%0ˋB$NDhݫ7K闵5~W+ |N=znz,G] TnDt_gP#]J&f3kJYC1Dشwjd=" xFwsƚk38^JzeP$Cd; <$Dx YRμqTN=!Vr&yOv 2JE=8N;A;Lɀ"{U-zFόb3ýo=½G^{Zv5V*RhE2oK(VEKaW..gw/[i4}%m)[Gw mv{O$>Ը-f"V.ǂZ:_$mfުtl!C$u*X}*AtxL]s\ذ#P-CMk[8-da>J+,wKϒqg͜|,x7ѕj@rR}\{zE4KKwyc3. Y1 xDd{[=f߽G`>F7GocfZbXVZc7u?]+?lM[ڏ ~[7Z`j\}5V왏)? xFngPE{* .bxӝfU(!1;̒V걃-û+Q2SÍOOٯ;ڑO4!o!pJRQ2>wo`N%GpaRvZ<nKN#;6efUzk(#||2L/ߕ׿/}K ܫ"*ܛl F 5pWֶp)vAI@h$ djW\F^l^Zo"-[\؊t=Nn씢Rst ,qK`j<5,@ϩ7FPh<ȥtp iVEmVE%1$T+U,QH-V/^-.1y/ L_]ۀE~a0E{Za`77W&8ڰ˺m.GAd=2!5/ّ0 RuH~/RZ.{z`6+ROxw&q;ÙF8dHO[ pryPCZ݀dNa\H^Vb\N24jiSk*4a\pM6 N='D }+{]M/uRLt)CE+޼s͵ ȝsJLhCkr?G&"\޹$w5m&l&*\z ӦT<>p/3G< E6D~c`sӍi6KlU\Uv ތA);E)}5 *ҏm];&>dC_=#eT?ܖ%!^P;V؟ۋpL58|9Ef.$<=1>|;}} /*"8CB4E)t۩Lj6qj!ƴC۸[I(mp JAmj~Wߧ[ac?F!Po~aB,{\ ޘF'Xi};Jժ:Kܰ+2K4v]һ{ l&QgQ6#gK{ug=2Uf ZPCXRah`523)"ہ,"AQ%9ӭʀX`6a4/z/,)y]kc(Z:|wN?&c]saa蕴>{44ܕu@xu:ζVvKP[ o]ɚw=ϟV^TY] sFcZ+OJV( Iܞ356H=0sH  1$ѿScu7b'^h!ڒt?-sRW6V!F_8a6QCsdlUGzM&b(,/XÓ%ܒ0-@E~SR;EU})ɨǟ]X*cKv6~7Y.c9P; 8h+pPwV y[@֜KXF jKp0MgSf(,9ĦF 99}iқU-6̱o+"(3!Ĺ-;&eӺ?A_SR|mrCQIrnY`DG ."<Ñ V;kZ n`qD#Ga9 w.>5N祔 <#|=PwNh;)Sw ؙkol6"| I^o+cnnI0XTݙ2B,vj̚W_RclKWjXR[C˙ojW\W}ZPN7}a hi(SɑZIy&+$ (I$?$!Œhm'Զ*MݡɥCwh7}uFh!ٌ&eiT_ t؉JfP+;'^ '}|#R a^ ֻkJD>KdھX|?XߒXK%iGJ&9ח 1@qvSy4/2fj9 )Ov*1w&u7Z ZH?c![b jLϮī ~pCsĐ$žX&d Up郏^C}ժzԏBN9ɵR%vP2v- ӥ+#4T{7[y ~ˢha4JItNPSÍFPۙ"i;lԧ#TJ&2xCc!-acCy9[Mg UB'@G6Qe[-WKd׸8@GہS"Svn \>i-Kh# =cL[jȝݏ0+"hI;/ d^F8z(u}C]DF8HB|fj5P 疉j K}XjS[V%Vڢ>hߟ1`1xDŽP`mH[٪w1sWxntEK2)L0݌N;;GRk-Q>#8h*$͠޾-ȗ[{uZv| 90YQa3Kno=0}"}o!L * n3 Գ m[PO9PKK/B|_\rC }p%WGXdn{$gh'+9[Rr>gB+yġu4zCq$nsB%1GvE'LK֡ΟEYK+yY΍VEUr1Y̧g.:SN7VH=s%sJMkpo v!pk9 mq1cQov*B i"̪]QTjiْfp:L,'$`GPG lZcȠBx34}A=-VG fF8eWTj(Y,s1]BΗG86l<{xl6荠K3gPo= I4bo8Fޔu">rmz0\Pljڠ1vbgȉc}[LbvŠ ~Q[5y쟚:3ubl }.1Y1 ;}&b,$伖#|_P_Ƨ W'CV%(mo=yCŠi !p.`O3?׸{wٌysxKX,l_7('wq3YT?XfȦ>A}#9rkrE4  2!4 ^i8ojktȽ]f{zeaq':+kIӺ;n H1o09 ]}4ZzvJ]WcsxGhO_7M-/r6Ě'2!l-oݘyar};nf+ wdtpe^w ;%m.;ezyZ6>JvgQ$/N&ǶS\}t}ls* 4 po"^dwo}۵$GL-m6WDӬG9hqz$%j .Z_%OJ)԰4 BiSSVRFEfߓ>? Uc,Y'Jڝ4}#y)V"h>z=[ 0cطD.7,Iߝ9-@_h}sC~GS|>i'/QPϜ!O*>tgEp[ui8-XHc'1] ;ݔt dM>%wѓvlA˞.KAL _+ƿnqSP9 QЛI,EҩL;RPP\챮-NBC>: ЗJUP.5LݞqhaBD=vp`,lkmz/y$ >{Xj '#?v}}/-PV >Q>p_NN/eh F(A0̆,8,cEjE3:QX:;{A~fq S "^smA{r_<Կ堁zc3.oHW_Jl/L> -ĸW zNM[9{ʼFrtS(F׃:q[:|v٪k;c~\?kߨ0g2u]-uaqpn>M0{'3ubv ֒hsvF }9DD^vut+6 5$=b|/gAj7W`l1O0K9tVzA ~ Vٍt+ ߠ#̱D.RrY<?@WP_1Zg[PA-qA-aH9 ~̢BE-=1U7zFfS_`]dZ:U+#7O{[<#u:j<c!FF?,!Z>OPl;Xanf@~(Sv:X!mW|]ɦn6~4M?aj1A=?OV:eo" W>8bQ v?@fbřAv G()'~{vE3WhU#)$L:Ie~v+zݏC;|˗Ue#U-Gpؗ?2AI2pJDVy^*!k'{T/s86?VWeK}s~1Pպ. .YFE'rc ?0u2g&"H/vHcޅCH$4a^Q}{aq'rS>UP^*̆.7kejN",rG$khB;j$/fÊf 樂wOP5JaP䚏=@U HΘ6%]&kt?<>Ks}fYFKo^(Lͪhт遗1(ۭJ?7մߺ$|X1&ϔs!?L=M7A ޒ佟J9@ `XKt/W.T&#܂Kļ#nR׬s+ͨWjA=vQ&;_1VsIB](rt3:>u@{mO_98.?mx؟>V0\gXM~lDc`;9㸆E/Ԯ)`ڮ Ej@yE.Pב)]z~E!(ƲPR;W93_u 3DPp%f$`4?U_/uMq0i/N +g?P>ou%AlCD qN"OEKe՞~4ͫآ {]h, BU*9A\sM bi98 ҲWTg\;ze!@7WԮKvVbkZYǩ Sg͝ޘ|Vu5 >/,ˋdQ[@XUcIv0Mٽ#-V+MāƋLЃynÄhG“(yAt>QP$KnkO_e,8 ,Qbiݬv}T}'WY1>iЈfِSI+j市'"a#IEnY8Lv$=JbOnes))QPΗ խ`ԎN@!"6[+_2e2؂gӢ=UMnp|D\m°q"Acٷ1 )Covޒz+[|[wbM)> S~ Pab-O1//OZ'QagMkMLhqzZ%1bBXk0HƠPE PJS2ϝ"RuaUv`r.Po<".=OyG㱊G# hEuBZ4mԯX#{4oއ`9Eer-sj-ђMe@q|"Z oa+!LM6Qs!- 4`4Fg⡎gu S4Uyjx+tt?PR=FA_Hf8nΥF~DvJڳ/xry||TQji!ɚ}Ӗ#Dg>p@fXiGtj< .Ml̍3hSB#Atllef>֢$>( 6#;CSTI@.2cjUŞY[Xo1vSzq|cw~-G:}$suO)~`tF} ޻|])/G^ܿgeFM+<'D03Cy1{Ր3NՊKT/1+ j1?0L9;, ?|/Kk;j%ۚ=L_ IVpk{L*ƕҀ%l'_՞6 \ ɹUV-,V,0IB_L}sroWg/q:vq[ӊԳ~Jj1ܼ}1(J\U%)k~A .޾(m"QKO30!֑IKIڒ"|tXYO;Qy:w끁*SX6oi5$~v B^B+4,wJQ9z;,٠(W$;.#9כz#>s?M%dPdǴ:ŮLrIۨ_hքWCEW*OASvx10K6BC]e{ 5+^-'p Š=@1P ?zJEi{CW|-+ΥԺT+~ 01JKK:?~Av$y`^1熆$+UJE+t•y4䖅1KxpJs\dkCӀS" :LYЄ{QSb/ZEJO; S GxUV5oR-h] jֈ5L|c{}<\#>EA/_DX\E֎gdIlRC<>Ei`t|2t)!i&]Xk]ZaC5~jk4cl_5jV +@-s 8Wr_0r8K<̝ n-8sz0lMSOњ%\?o:D[%?͙*IKꡯ)G0(L.A/Hq)['joٔoFd?Kh%>?kTy!bhNXzFJFP9V+ 7-K!ĪTI~ÈNGVve )xO?^gI ^_vCR( "0PQ ٠O]+!˞*..\UɣfDpRtpUwS>K_EҶ]94*CYڈùŢ .4) bދgT>!+cNk^_n^A+]Î+ym@/+{<\th\W$X.sJ)|O ̳ɐ $ D(q!8ԫpu1MpH6q|XuI(|ݢ/KpW,!MLK?7{`vdh"p[z?gOt50Q )!gI3e\jwLtޘwIaBEc˅v}&TޯJMxHr訾` 5)W&k8۷K~nૻXT%Si7/b(819[ /Tej,r~6T}5S,\1ŁzFj%kY)+-3) 0,5ARY>V*rQ'<pt+,i|EA]˒2]ɝ k^.d_PWp/NsZZ{, E'/;̞7qVxaN6Jr0}]i˾UÓc }OS&z=ptgq|y$wRt~*t GON=g^14#05@H7ifm UQȆw^fV~/fS$~ #?PCrAt g ' *leڙ9ԥ2Ndfa&gz‡ ~L7#6n= αѾB/t]W)e˘wP]a WD%Bxq>g([6D02#wGpG>Q{3@1$fӵrW~3㵼MAVܛi{31mWD a):t9J^kRR!x,1xIo@0 ԊLoQPW+tZEDVF'b֝ `qĄKV(oM'WQe=ܫV:9S}zF vd"^ )ŏOwf_[y/ 9mF\u19×k K=O·pw^ލ¯W',`l? |, tik*Y )9ɫ>Mޒ[G[$}og岀Dvi~-z^a'JA]]G[1àk0Jk潳Jcn j;+:/,m|F.1'qxJK,!DW #~ޛk{Y 2wyyQê-X Cpfdl53g8>J 7~wϨ|aڶbp$¦f: ]O`n_dDȕu'zM鯶jA1+V :`*Nz(@s'\yaO0`1Lws ]z9;5^gcϹ o:*$wFϢxzo屩$^' ng*mN5|*ÿ9xr=QJJ+cԫӉj`}4AӆeVm#-TǺsCn`t1~lLfvƟ~z*}³HcW61dXc-"N݇#y!9w72꧓s_U{k&0T?>A*%.V E~_nQ1/S{@Ɲ؞O#7o=⸶UzT|FB 5Pt۽=sLx}) ב;6O!X{vNǵL+ ͨ!VF Xչ;#h8{AȐNcU03KɉI;eDtM>]\eO^htŜpퟦ XL|$".е}n׏f2o! *=#b O!#"-cS!䌍SvʮX:ݘqJept^ m0GjZ^Xl I]3ZO|85ЍQL--j*mVSiTT(BBтl4h}NOػdP]Lc}w9Sj]Ɓ[8Y3\vhUfoDr'!xү[g=#J.9k w[=Ĵ%BOyk8¸kLm([^BηYf!/p /xwX#PͶ5^lix%}.s5պԍp%=ӗ!vpS ԫW^X:,oT8DD1; U|/!|-_a\VƚGq2$YJShg,Ml©]`RViO}~+ۉڻbN?J*XžBjjxeN?ϞbzcRi*{-Fݩ$;7[=gdt7Vc 2E&w*dn@bYbe>r>=e0Z)ܣo~`_VbuV~?,VA7(lz=C'8.Bn߶Db.̓|E܋qz;X[MLneURvcnӼ@#DŽi}Ǹ;K9wp6KHU}H9u_cEȑs4M]/_my@{k`#F!F9\Lhn`ePpТw齡W섢d:&Uѝ"M%q|;Ћg="Ⱌ^1r@i!nFLd1m%xܝjjL~xFOk,y5;B<X&xtƦ&uZ] hssđu `YFkw3S8d\V?I o]0yrf_gS>6dmH0Zz7).!10ÈS~($"JJu -/v 6cPժʙI>x%wn]zIGq~5j,[z"lO @9CLE=Ku\eTKYiޏz8vZT lR/;^B[IjϣQ+*9h=`̒Lds)Z9U*xݗ Ihk\#N=+:^K,E{S&$ y22;T(GG%j@ f趾33<ʩdj?_W]뎽,0@YRCEn-d7J%`OasF>CsR^tz7L8rh"6vNJҡ s%oHWAs i.s&^+@*Cc+ۘIfk>AS|NZ<~ЀشO}>`ux3 (,׿rG5n!;"Zk֝,RRT1J%jXY6ji&o;liYwo}NxGܷ2 :]F&h`xeP3e8'LsDkU/yI$ Sk5pغrL'L?Ɂh X|kˠ{$f>o(b3#$st={4]Yh@obeƠ^ABݱ3! 3[#/ ,hmo:ZK78I v IeR% ٝ]5hƉ1%:D|}%'q)f9!H;+d_AFV &rg*VO2)nG5#܀`;p|9H͔wgI`Ʊf D6՘ ʒ^)D@f#ܕP;HQ45YW-kwfE2[J?jv^YUb5dk={zpS A&]( D.t72Y^c4w\樂WNRۍ-&{ʔϼIMƾK2vޚt?T! |wL2{uQx}0yz 杍2&ٱl /tHIuYj$_#%J3@_B'mxV7aG#́Ѹu>uX8" FE~Ag#7i?.cjC{OGAE²KS7jҟ? af+ )(*M8MzdWdV'Ϋ`oqdbM;6{SPN397xd[ZzKai$$T]-A2{ ly୸eidJ8QS_&J${f,9Yf0xiN8Op@iju AIב"w8dcJ&!IXX%57?ݶӔAZKLmƩkɛ~M^t}ɺHUHz2ou._ {IPP!_3}%U@ҎIJ殯${ٷs Џu%񹯴GHVHg΋{:XConpc$4{|@vLm0m>'G?`s6\sNe.6!*\zftNYۭ8"ӻUf>C_euu Z[Rs ϳnpH(D׭io%h a=i| 9QyL[,J*ss)&p;K]#+Zn0MRhhtېtڃU쥵h$W^b3ݹaǮ {H>µ+?R$7dDH?M ^CʹB4: K~|[Aݦ#5P־I n뒔]N`i.ꛖ¥WPPqlUzJH x-'Ӈ\sa`'t-)J_5A #~QƢ'T[\ s-E`⿥я;`G(|$yůl>'#ږnq6%8<2ndOyv<昪 0aIh|cOr ={5C> t@oЇU8FFj)\:%~&<ضvU{* \ы<_G$a^ ""wP[,S_e<p(zzD#|Aѯs xoZ.;W x;$c{1g wQ{YKӒX)Rw:#->.eJ.=FݹScKVZt^O೜]]Xa2S5A>`IaP[\@i ?׹.8z{BV{r r I/d伒qڽ`eNE*-޸rGlN1IuxTI.;/x_2+e sXcY!֯GU,@L Uۻ$d"a]3Rw )^ *}t,zq-j+?НcATŧ;+! CHoէ4Vw<Cl3ޅf0Q we^+Λ ^Q/]9QdF<8&C+ 4?)L;A`2{]!k8&ıYkOmcZA"18Eϝ6 ! vhϊgh&"|0ojX|_:$Xna1!vtSӎy᷻zS+gA`sWyͷ[d/8u 70ozG0>ffU7x7j(n>J}]Դ5YODoaQPcaoܠClL5,i/6l`rSO s3t#Fq_h7Dm+ՄS.)VVoaw 6HֺyZ{rfm;1I0`” No\9.jJ )Mϴf uzV7L2&M]r-*={DV^iQd?+ؔݩggT4,fLI> ju&71gfC}DʄkIڙ 925 sr3xN+_εi/aQ+{C1BgmO=n/1pqҢKYE)@H.u&@MZfLhO 1fU;+;_Đ=#r&[b9hNE[n#){Cs?9#\n~X1W;}>iVCkc3eWIߠӖ#}{&,p]TL%3W~ GQb1IAS"+rXbPʗN.0>y5ãѻ]ݏ* TM @`O"˯~’F$/n"nfFWe} Ӛ]uXys9L ^tZ/lwm>#2b< W= Wlu~Xhq짅7r*5lYyɚ{pGтP.^iGoB1oFP ~5|1(6F5w mҫ`2Ӛ{A=`= 9!-zTs.πDT!_ҺZ X=zkON%iDG|Tr0# tQO=Xk]wzudԮXDeC<ψ BN,,1hOݾ]<[[Z+_h =A6/pf-= ?@V| d 9[FICPuO xƧ$^l&BʠzR*zg"G'K+m\wf&/<vc㹾B2-s}}} +FC#wCf(TP80ܲR[Z#U@ڌ,KK$'sЯQ^>OPOaAy 7x.͔C 'eF2ucA5nyLmgb>;92/o6`w} {afPE߅}MFW{ ;D)?Շga|*sAȅ<4?EY5:5p!՜hƗCV^73frb39 5D\<[beY|0Y'y9>Gɶ+r7>-U-}? EfjfYVqC*'ҦZzЄI,}JipW 9os$/-ᇥ ̡i'rin]UPB&OH#XLІ# `a8(O=8hx﷒{:a|j_Abv)-LJt+h6|BXi]k ŜQ-0pD+,bdAsmh`߫zpAE=k(S i9kCѰR S2MųdMPNn7r֒ᩂa+ ݾ !|}mjHD Sރ&+ѪXSIY ; 46*'<9k!>T{d ʦM[JK&u°zc{JąP-_%ֹZ*#Z$0!?=䗦0{V /o)h]X̡jκWA= 'Sɾ] Sζ6,-YϒWE[d ^{왈%UӾzȰZ!呉nMEgx\^_T*(٘?! n]X!s 1;y'Ns猘z4vؔ4ܕ'J7 ܡ^Y}b!K'>,vF$Fp?F?w+mpaz"Zdg}F$liB3&%%w̅!~Ն뙜! kr4M7A=={e*}[m+ CnpH-v&g쁊^㮸8 p4l#N{;ŚG8G <1剗;Oc(\w5ŷj`ZN:/Z0FךcQ&觜(I;FYmdw0jOG"yz93b_ΌEJԯ&PFlR$vSYD[,VZFƠ.__PDŧQKaיWBρuy8C͐"0F4zhj7g1 1!^۩6_MP VŠ77[]ZZN/oxnZ , ,X6e3{T hj<6 !̖koeR^P<"^o}i3$}%(㭫e%~"7x[' 7mu״?uV/ 걫N+٤`%>Cģbi|#Е@;C MY"8U;[K~豨5M;OzsL-<7 yrZK}曜 Ivr_rB6B(1Y8VkDw4QJL9K+ѾޅKk;O-w&s][&Ǝa%ZhnU~!;A( N8x_YIͩyrewVKu'Lh$5sVGr'3Bd{Rir4),o+M]+y()Qtwt:.6%1݉ {šIR Ɲ BӍT%Qw1ILRsIr={ˣ@ # d!S%|~\~n.'Ô잏uĠ9?/]M?qo Ebe.,i@Y)lm$v.Ku|'+=0e'p45Im4f[a2s<Rb8x @u^ 5B" K&I=>(/|@Y$eZTuhT4,S|dE1n!9s8>WfLQ:C6.^ u x|2AG8N9Ve*b&3vm{{p <S@7O}ϝ>5SNK=pzR;Pz?] Du(aEkHȉ=ZbN(; #GGES1e&y3w*G 5a/:E3e٭wKgdYҘ/C2!)-|wvl/yt1eհvTUe] S5uǑy.]ƿVhLʉ*%w]JN_cbK:;?H?T.o{]b@7< Uh=sӢP_ %ÇFqq[VIԈcGN$]ZF9DFd2\5@ja+, A@AU)NkQmkaG FMZns - J1Q >ՠ7?i]iHD.̕ܩq"uSdAp{6x.?0pFڧ^m;>fw {N4K;W c{K_/Y9 XCe$c3ޘ?,ZLqk%(dz[u=\H;`TJژ%"m1-B*ez901ozp!EJp?6`yaIe7U>ƀecb~Tec\J'x2A46)XVËUL|3 ,Ǵ>Vc. j0l6v:9S _ o| ]LyB7x$aey"AI`voU,WoTy:sg5  0E1޵-XՠŹK&j},LhYX*Fl'g:yaȻW݆/ʖ@@{^K~VG~mܸnf-Xite[ng {,ŰXT bp-ȫ-#p'_n8}6J,0\a;6ìEi>WMn=e@ԌɴmW AJcP[U-rQ=VVFيơshEyv%CQhN$*ړV)[Npߢ|%"u?Ese3 A*pxF@!lIDKr~LkVq;ZN FaYR*L3 ;tYCP@|vDO'2vV PpP)OY+ߠ~EN;oHs!Q.oF : oZd#n3f,^|d䮯}?l\vf9$p[kY=_&BwR;<tFB,l,#M^mڠ`0hJ3:$JOLOªUg+`E!tӢGxMcI܁V9ũ$𢗣YnAJC5W2* Xg4sʠw 8S&8sTR; I'Sȥub=lojmMx=ڧc1ww!GE{!Xk?|pYA_z9Ի(BruRJ@Qu c@ ${ilWX|6\\G&ep` =WZȌ ݉$ܽӒvn<*AF}[HrқUCM{h/J v[!wmg-L^`08~aӇN{"Jʦ:VVH6z};nLݛgJ}u)Qr:) -p Voz;yO>%A#V'2~v*r'RkLEM}<{Ѫ.c-?[z9*oV| y7?%]%0\B -hx`O$t|Q!0r>UN]ݿ[.sqsWZ!4M0Q]xE݉VXPmH)7gj* sJࠓǢ4av]%'%Z1(YV0OO ˑwpxf9UUPne> eCt`bj1Ebt1RGu)_I8v N 5jHL8,U,'vx԰9/*;,P·}:3B5xg4[x ;S<u>F+qiE".lcp|td?6S6 j,e)2[q}t(TQdVU\V _M-=8(ϞZsDmep}͟9K!P ž25z[sF'r)zeVa(6,JH~N F8H+o; _2 &Prp}=ڦ܈9H#5媋J_]w/Glݪ(QT#``X?@5Z"k@/W ЏAm;9:|FrelT?CQGꘌF/vH4u?NWe)cؾj6z';tb{uBAoT0U6βd~}bL}蚌C֡=o.C@J xT׹SZmA͛m:>+Br|GᎡJg]帹𻋮E#igra.SXzDXE H%I~YdųVUі!)TGdpъ6~+gjc.ԽMyʨjC TP:V 9^*1Rui`|t=Yr+.zzP|3 '/);D A`|#|ͦrc;6.Wwˀ]X<t8TBd * nչ3F g&7I Qe7LHZ+<`]FP6B;~! ;>-ۅ\ ҴrɃ#|ɗgax#|-rEE֘J@Q%-XcWup|!q5)?# ujoB*7&y2]kH)D?ByƇՄE_+(-3jeN-ҴRu[dV:a ;gwXfʠ2HoLOz\۫΃JF> 3[Mn%ɯk-_횴Oz$Utn(@Ќ!=r}-Ćzw:s~AT+(9*2nq)"~>H8VXa@6Z̺ڲ_?hK[{E6{x7ĥݮ%c]N?{0,@|5g,WKFRoıP_W?]7t ,sڎLkӿwi ~hh2p =.%S2{dR $KW/j@vLmœf*TX0W:#2")UB(]z i!Fa?]+D=R(Haw?u[7ݷ+Gs|xMJS nEn2(CjﰤU؅EK8Z'Ǥ[櫛Wo>*@U"=' }|3'V"wNJB_Z7+]7uD_Z0צO`,%m[yI7Ow\OiB}bl^vr">#JWZ&]8qO67SP*yZt"I℈I8Ckh %Tv F2l7١}cRAm$'5l]*%/P|o|+^`6OP?tpgE)!*f=k[G+25&uosDeBՐ¿ 1|KF8vxaS:ӡ/^e7s|’T+q{GA_U|KԼ_.1uAy,coPX:B4YgU +'W#,N[`(xߪ ߤ;S|Bˮ"*JHQMP>nqCA}jNHF]j~/Zم9绳^?4ճ'3_yr:3'p#Oߠ4P!DoNĪHWc֒uՆU&WGYQ%5̝)_ɨIҷ\#jTej+cj_:|@ OuG_M.g{z8YrM瓶i{4D]Nj!t20GScnDznO3?l<jwo > bԓ9$QDmfs3j/@ϑtP&L]b7"-:4 u\snk C}7{{~7=?CiŋEZHԘ>")a\m߻ܶ:^uGM)OV؄ܠ8|5d˗VGwlșYBy.RWǙ|aV]/kC1>I}Fu!ǎxI [r5{ %3?XGQ0We4\*WPŬ vv٪.[v$ OQ-u ;N륵δ s^^$KX$ȊwbV p)SPܩ jе'[^輳b!}œJDy|ః-O(VsUn#زZ>5;"5=#ݗ+V=v{Nr0*E-{svz u4̼׈jy7qd9N1>ǙOе#Swc(S?#aPk}AM`>`";/ִrKs_ѕ4n`I~ߠ^%ދPs h\){z˾R:w*%Ԩp jIH#['hTxqB `ǒJ80!g FmHm7d[~`ɔ2jS4ۧ2uΥ'y'73[# aeRx ?W:ɫiey(ܻuƆcn}d|$O"<4_wep ϵG{-T6Tf!SrW_lߩGE3[nHa- 6 en׎5ޡ ΊwQRnILMM6`Q]; }A jx~|!s|J \)(5*{D3{u=Ksyw٩Ӷi8|DV96_:3"b3l]X5 ͳVďH`5'1q_'IY/eŏ=*3Bo>>@xh,uAȒ_#47|t@Bw7ك eIC ?uL8 B2*b Bо{knHCZL΃܁_:T Mo<+9gv8Dv&>;z3^(rF"&Ň!{ط<{^@aP+W޿),R|L/7-m{w#=o-|5]FzB!mCĿ[|P9ɜEdZ,2"ȅ%T= -)EI><ԀT/֍r>kliB|w^~AγzT,bXͱRP|Qdߠ' 86Uޝ*F6"|,Cfr[w g-U,r}*~lgPWE+O oho(Jmn*˜tϒ$疯o"yִʛ߹6 ։˷ZH4*ܨP\ٵ _gʍ^#٤3P2F ]N $M8ٞ~cR駠^miI mgP#"z4>}]xqkP1dp"w>#78DP{!;ڎNۍ"S0]3uoh`sg}2b^P3ʻ#Z$cL̛LmgJf q:xbj/ǂZG HcAXbJL}fkRc|A]z=Mh ~+] ~q'L=K6ukS-֓÷=->P;kzZۭ ϝc:k-fv0|ye^|BU(JcM0W»OݹVރ#ư{?P}{ؘe\?:/wI^Zw.8:[)a+*:0,D8FGe,A c5=کSo MZb[h,3GR*4B.{97MC-.ԣ!7e 51Y[ʤM8vIH^0|NB*#8N{P\:"ߍ^0eqh$r͈ylޮV,Xiw4QN,=!1<tlեݏjv Ex\dڶ#}^]'2l"WD!y}dW[_UG >Xߩ<:jѧF/rG&`Wua.sEKa8x{3)SamC ܖSO Vsry--T("3\SWzfyKi! R%)b67=1|=rqK [(~/#%~~S%nZzrosy.cݖUҡD P1DCvaoWlLj3r FBJfw_[uapRj -ФWd3qe1[o I IHeZ7N̒0Ci[T(-G)n7O'cOc?YJZcBwGc>b2oB4gC5aX1S:i|%^C@@xuntH@XifS"3rQ[1y<7w~>:_$~zVBDu ] ,vBr5+}ua9<,pPl|d~L- 1bL^ԯs_`L.nU}j,%)gQd BTuKd_*cr(*sBVaOuʁȅHsJ($`^T)jGR!t(~yK "jZ0Yӈl!H_=6`={b^}jr?⿠.0rUu2_-"ypR:kQ^ovXz',BCSB`1\m-ӎkOEihFm{C 0 %ՃqF89^_!xM<6D9`4,,-๷MRjeц8ȅN}(C=dħ^iI/uבP[|ӱP t" ?f4I.0d#BS}n7gOtTU=٨&/{= `=T5rX3|Icf X5Kh{=*7zX@fjS% >70i\;gh%KI׋ql3!c<вd.ĂLve ?V[=9vV5D2׈^ ^fC/ִ;- <ѭO+U3oӒ.RijeϺKX ߠKik9³%9;72ɖxدnXdЃ;VAv578i S}G)WJΉ8&_>@~RkK{o#TyjNk܅-{ProWhK h ?a-qaQ5iC U\!=L #[z`hGvK\ dj4A>|hfMyKC0Gj`KU|jcE~l{@$a=h/~T@]B ^,O4AԺ|wݐڻvPMPĴM>8@r (B+k)䅝a>`iCC%~;S4:9qL~[(dɞǔB]i5_{(z3rJc,2?;DV1x3L۵"A18)-{o ؿ6_᭿ ݴӞEۥE0<ˆdA~H[5- *}3ǵxZzX:[mh5|9;z8GóH?Wc꛲\'d#p1㋈3;Cq+tow%d_j.^?j0J' Y؞N5- 'HsN 叢cH^BW^i}[_D*(yaEC]QV'ɚLjo='a%P{,4*߷6ss*ql_f+m9io ,#,<9bqh@O}֠[sԣ4{P.aBׇŕ_%]k`uȑELR%F};@+EWaj+nߢ9$7Uv)&0'nZGhP`)GY-=})3ShӪ1+ʳ޻P jT=8,e\^+2U4;P5Z(SѨrO휇CHC9݂̿fC-!4֥F WA6Z8TRҭA?*ඥu䒮B3Y)C) " /l{Cz'D-j/8խ ^L M~~P.Bl(fƚ /ڒtdj7~ȬSCO]fZK|R7 =!)SׯirXe Q5aHSP3۹mcc!u$p: DdW:]._ȅCLR'rΖZΰ;;tSOZ]kh{T睍L$VڪO;5ٝZ :f,oshޒ-5p*|Ǘ~ HDI3겔-!H #o'1 եM8+=>!h[3}#l q|Bz%<(`3aQNgf=fFGv~|v3c_ ҫiNxPoZe~ߋ=R^KJ}N|I g6$'<1ܬ}H葳DT#2":mpkpb8Ê`ߒߔy/\:x1?&/?FBp3=m,{o;eSRkiu6VG]\ ґq>٨Ywb|ķ q]#< 3Ϯ W$axot(| w+܍\Yy@hUZڻ̍\}21\qٍ uͻBtO٘-{rNG@`ǑkS^?Eaν a=ŀccȎDHEfoo>tOgNhREt²̻٘Fbח,x7dS _qd 5&!`Jt¾XSVp&Ůtrwyڗ)1>joi3-7o^+wB^GC>2-< #8.,y"~h!=]d`ErnF|iN#w响g*4T9A>-%o;ZJQ*}GT`4oأ@i+eWuO/7jU>newB]b/?Il=CT&%HXp SZqd ih^^/7 A'Ńq\^%ܯ?󜼀8aZ# W'|9_)YnrՎlCW8gd/ًŋn&.6>kKXӚ/R|Cր|1SCzGPCi/f>WIDk1:c4bJ>1UP9, 5ᅯc1_ND54Ӿ6SBc6y:c|\2]u^i69pEUc?~id%5crvF}BZ>왱VBFɶ&->&;^Gg5 ߝes__B +,QmH힩u{_x78W a2EحOMG. weWƪnU^ Qx܃UpZe3'h*jA"̛R[2=|5 Ol-?߉/f_-6_fbE ̸Շ;E+{P/)tg!"'IXr48"KɹD)AJ/@yxzgzcEFn>#̭/ o̸Ebԏ.W@C^մzt0@O%8|ZqUR-U?; a<46S`->pWh'u0Gf)%^p)Q-fB#MJIxD[OB`M;'UȪK/Wi?K0A{ `2 \,e; K-ڶ*ћAr.W7c;~3.xF WVژkAm w"7+;0O?5UV* < M3>Q/g'VrX?v]| n!OЍQӡO^}ga<N|c* pj <$;8]U:*n泽"}uN\L…+Ș1];D;U탆ICdzoO}吩{$Ԇu܀p’ `3 AX j KlUAm k$ƠE. {fFk^1?@17j2#u4nG_I5+X}85ߒU Yf֧ Zծrߥ|)!\>T]kXl4Gξ du%koXGn@_BўŢọv8 ^ 1bbW~*{T=-W:Qw41} ۧA8qb1!Pe ,4K|SHm7ޘA"5)eoޟ`W0GIba|`G9@vWS=w=c7siq#h``h2ٰZӰLbos}]V"@m[LP+hI | ~l끁=}թ&CBn>ۉ.OvZy3NBܴsݪN^Ԡ29/Mq 9Zs5y[x3$7Ͽgښ ޴i9c@5}j R=p~e"bxFtmP7Ct _Ʒ gc .v8[ S4|i6] TKE ֝V[nBN[dzêNFk|uKv{u6*;DkE5>aN.ܢgWZ;s -%ʋ0dIdt. М#ohG{iae~7GXa6VB3㨋@> ͠,6s1x6%>Ƭk`Zc@,6gb-.Xa%pQ/:z^ׅM7T".nmj;CwW^'uu;QrA_r|«ˎ"!&S#qIhu#lsii~袅N NA}*3aǀO&*ڔqx ьA}ZJJY'$xl̾čnj(AioLJ Ng $3Ds~t_ab' 4[i;+;no5\5b`e.IkrJvSY0 6S>e1֠djǜO Jh}oj.R> {ɀu?c4Jr u.!R,,QI 3FPƂ 7d`͗,mB{/ц0@r E>G&S#@6 X{Sj)2j=\st1T'aϩ,j9]̯|2 p -'TF~a-f` O`JmiaqN5aIx&TenK ZVJJKٴMپg+g7tӶnͺcI=N;:O<҉EḾM#6tzQp%mZ'M.c2 !ԶNUId`~U*i{BR{(Gː2%CN煸w.Uw a$?4#2ihŽK2)n19W !mL \aPtGK=_YVSЭ 8-?=)T_ueݡ-޴;+(=s.}VS FrM'ccִTJ ET(؜MT"iW憾rIѲn#@ZV6M:%ւPBL,/p,W N{P_䫃̔|Ԏ+pE=iz⸧Ӿ&Cդj{$ٱ^{ ]I0%<Ρd^OLbg_j9=>3\=.Xk&jFiӢERb)!ߤ).{m 7b';{lFӟGNu+%t+RN14b.|;ē -.cJBn#huDRa|Ҹ r p %P+ox>{R:1=.^6=|#_@EדYSL'px?USjyrϮzLwZ͙q>ok1,h{:}2Vc#0v'|kkW;!4 p ^7dOHf/Sk -O&+ T̎+~kIϔ'E ,+۔k57tC^*C7gI%,8RbK΁r${-zv#$Y\f?4(Dth(5WU*Qu~Tp? OO’fi]%IׇA}r ҃z 3$ tgs8Mo'ah<WP~$3q- -Ac͙V"l(У8h(h# }V){yJ%֨IKo)T:R} X!wNoW)v]z<]!?C(uhoŽ5KMRi!~Ru{]=ż3[zv05";+83Zd@ ]q,$l:<g8캰\/倫$4gK-6TʑKl#<,dw;#839 A+aYh 贐ܬ"l/`Ի$C2d}k/瘝OʷeC8<:qO0-aKxBVw.Q.K^4rTk~(C EPwk|C]8[&:j:,Ip틚~^ލ kW"#}'X$$!:ZČϳz3'Io}iLhXUFm+XvR.DA[z 7G֥ ;[&'cLsIzu|/W[ ޑKc+ڊ=DZyed#WGpA]C ê }lJO0uA6uV%SrGiw񥡊}K(ܩk]V]n`8ޒ`,PD5Q+4 Sk'XtvhD]ag|Yx/vrxۊfqjvW"~k~|DžבƞG֭gZ3t-n>`ҒyaY)4=+u zsoPcJ $^HJf-v`%VF8jgz?z`5jLֲ4@Ƨrp~+++!S@kINE@+#_.CyaWnZg|gQ3<MA vӉ As׍GISkr{[@D_2(ףSኇ#fe6`k9Bhv5B;ɬ@]NE}@H(S$_iLja^tA=3rheٷߌƹW)SC'XA oP&}xGG 8m+mEڊl.Ndp܋ )M̳0wtԻuyyu@ "8rw~Etu =#0#{1 =Y9]BgM/ΥԾ1|#n/ByÏpi6 j9vӬ=Ǟ`U×)tV s55S0!u}SUcQv0QW5 ɱ0ꢺ;8dgEP4g\伀4gz]0lj]-E||0au2-ܹ@GQo^n G۪YZٿݍzq7]rn/RP5jϕ<=vl/Ui6 8Z7)ݧl&ǷR9=>bx-:V>r܋%hjgc/u?}1Kjb})mo#ˍz(1ηkDZ|@eF!a\Cjix=*)-Ӎw%N&6<wM_j/aȍuw>[ qD;/p`)S[VKD+wCҒXz YE,m#l- `!&˹6Ne7 +i(5y/ڗ izuNƱ LAX /@|gmW^[OeUs&=1a3P#/Fr?FND/63IdsKv`=XY8TFanA /ÎD 3b B],$NAFp5Dk5 7ڞ7 pe&8[ jaeꯎx/{v6otغ\nQa㋍1vlz_2֢gCwcPW'Ckr {$alC.go`}/}۽ 㶞c 2`b뉩[GQ9&hz_nPQ!I;/ڧzi0Be)|Éz5,r"8TJ;h[& y E xXً &F̍BUxw7=ByHB}wvʸ2-_io|.L,rPlQ )O;"d6ĂenxAxX)SD0Q o%SyxP*84TLcҜ+#GŚr3@jl:]pڑ3amp_k]qKY+_na?raoo|%s#XxΚl a(FPv)QƲif;du8 4\#؅.?1_Χҿc:xPJuem)ShCxPOlcP[O=` ꙸ01 o8Ж~}7)C4hsNў G0lE)L` 8lׅ=2. /lpbc/0ؔA;bDR3 峄BVWk 礚}!>CzaEfɩ3ngB돑xA; oPǪ&8#M^@mڞL@R~<n@O-={RֳA=vb:,66Mkq=!.9&.ڗRF"'N|'1^wlg:-5DywhwNp)xu]gpNJqG5怾!pWyA{7^5ј}Dbި8+cQ.a׭-\Kֵ( ~ʖ/HpLb#߭zڭ!$ppvHt^M6γoiLVSτd]3K˜^0954cVGmOS:lJ`.0wqTDzDQ=m:cW%ԟxl8;ȗ;سvCXzI.oW-Ȧe9oNC^ v2]]@Ni|!k! nB;v60 \20$ln4/YceDVzM VW^"H% Nak3GmGֹFWjaH\vP| :ejIX D=]{}`V@M]VU;bnP]GC8. [•Dv? !cC6-{31ov ׇw4QU;KӢrєZPJ1];Dȅz3'!gdtz5>C6NUB0OMq| -iezz ԺZ  $,̏A={1HGpDG+qhXmg7CGZKS)ܲ$̘ \Iݒ_M(-72Ԛ`>v1=SAhίԵkO<&YnmhFRY 2i%\gThoA '^Պ$._ZlU*f ׼,p[UlWRIgiM;㳯 W5<YAՎlj%&Gh*Sy's~~IjA˚D~(kCp}I8avy"bEAX.)mKJ6v?]?LIK#Ɉ̟|[UML3:4kufSo+oT=0h{&!{K>M0M c~|lq\T7Ch.VY:)[Zm }$fSԈ2xYD;jcr+_ڮ]͗uTGaZ󡕖:Z$`f^RrEF ل5ךi\I+dԧo-mfM뾫Wm;O0v)㭡"`oaVRI_v[t̛elg.]e~"&(O`0C! d%Ѱ~ ,N <2묌ы~M4Mv%G6j5sM A֠vFZ(_Ao:{sw_S*{Kw[ݫ ,HkV{m U%\TRBI_vu:Tr{}|ًsZ(?ݞ$~9N /xy;#p ^GdpJ۰RHAO xu { ɾj*N:=ё֛5wW4zXN;;es8c[dӦt`]r㳓kn?wGiҠz3l>܇ڸw_j ԃIEH7.WY)5}\c)[<¾Ou'fTô\ϒ4a$LA|_@YK>{;W6Bu*Ⱦ3N3\^0)A(p!LƠܵ Ц~7r Γhuw^( |k&/}]H[t*dE*kIpf*"yʼCuUq|a9@ɹ ז0J-%:|6{HKMO 8W>Wd-- g\:#$;ސSñä qp" j( ^gYp}Ku{=8dQ=GnA,sq+ܠn&|k}ɌG;m9ao#fL%KǏlGkUЅ'=O@j y3B$%'Ǝxm90vP"e *#Ǔ{fKFɆR$"gg?N˓*3\[CM ƖxpmĆgPUSMbn~SqJ^ oY=*g#aJ2W(R9jS֞s޳`uދqjbL @_Kn:L6K/0p5(µz r"g'xAѠ.MPʏ;2sn1ߦ٠f4͔A(gz QXj.+.6N{y$ON ˹N*ZQP / j{Ѻ6rrX"ʑ#xRگ˵ }ي(lEélWxw,7s^a0Gn5^X< +g;s_ΎBb|簲MmSggrun0oz5#Vb >0u 2Mu*. 4t&NA(;|w3)krX4#tJr3 tuq@Y穌2{ZE/z BJ1\)#0yI,%[@{$nfQr.}5&&{x|B 0)ѽt-`tfjx'Vq'\u!5`L8ց [0q82Nc>b0M4^5snm(._ ei7Vv«7m!iEF v̉V0Kͺ/x}&;O_.[5^rWvsI{hH`-12c= 5ah /cF8wf.ħ(&ψCp{Џ86 .,9.z(c6UN=uL}Fhh*P9WVb|qW38}7J1p{t\w21PrжAr{Z,n*a)Bq6pwAs )Y;:l)w7a~0uQ& Gv.w'Mj= yXrČ;ԧ&ާa|uI3n)=ԇbb 4Ef($Uёxc @0W:||u^+$՝_](69"n",{+t'b@%gk#Iw@CMt߰ 6d 'ٷ˻l$MTQ  I̍W Ո{sͻÞ4D\MzD蕟ȿYKU=clǰ٫/Yllcﯰ>TLQI~ ׄew 9B_>TB̪Vix>RE @փھvEUk%MQ /\UQTgMk{U 833)#]+3䈛4^f|V3jϷk@OiUeBX U = g|:onaF!~^ `gg1!2#lPcqnLb]1bp^6^qVJgS$4M~ns{L7e7#kt8@Xf񎒦0ϯnNnpIx%1s_:FӟwU  z_I :ɝl-{2zjN3JU0,4$@sC'c8wJ9)[-Xv2$!łnZm=qKީMxwn ;ܢzXjBb|n_dܞѣǼeg9H䲙a0ۉGADTp[]r2L@(َm R/T^[QT!Am}MvZup`XYX`fPm FL?YLRcBFTOEԝ_:1'@SKwj0>xg~|='\M/#Tk0tWt̴$ZfQ=ЌښAGml}s]X+aDϣ+a}1jڑ }IbhЭ (O{`b.WuQCW9 Mx{7'<)# {;Roc yE)/Rc9yQY% xp`rÎbN s__ p\Oc'A7e;n| Puh-1~B<.F} UbZY6(G#T]g;1i"^kEtҖ/NJ_>^XNy*fvPEs%#bL 'SNZUҒ1u=B!!;:Ơk/|컶UgnqVwWx_ZK4!zj|t%ݯogÜIz&\Y#{zh%Xռ٪ƥe?T A.C:k=MD_{85}ٴk0!TbMd·KRP.ʺŽlֶ߻ƩX@\Zbh Ju=u1%7F@+1򸇶s |HO F>S^Eŧ~\ q9vSNt2v<ߒĚ}$-YI*qdn'k*OɈHyS'_?CfhԴjү'$&tH)05w ;ƱsNf곣r9Z1=}JR+E@̍eCػK@n ~s>є kSlSF8pOЬiX)jsϱ?vv\ŗ7ϗܙUA R{3I$p$ u}y,G~ʳ%i5Gy3± ˟^C N 9oRr5C^JdǞWS\Iڐs:<`5a5ZH@LPL0i[@br'?mDhZgMZImԮ7V2!(>ϒ]H.˂xO̦wqJ 7iݏZ$sVW7:6<])lzhcvIn<0l9 [)SN%?6LG!xȟ DQsN;Xޗ0Cy'!Z&0!k#mL _`)WDZWXX:G܇z[gtC'e`xҼAe|r]C=d5,i_[1 Kxq*4vёpp}_C:䖍\SI`` |؃y3$'EU{k'#.Ԫ!.e{kӶu,LYr1B+O_Y6h|`~*/9$֪/!ydϗ|A AzWq,Zȕ3,L^|asϿHP:Q0>7pP1 3'sդ!\WxV]t|D^G/ `F_Qדh=|]>Bt@HCPa𓼋+? .pz5km`:\o~-ɔV*{R02ZRE^[V]vnf"ZLuNokaNΊņErQ^uʭG{G!E3^ ϙbZ#xokq_޻)9RݝcNM ,4i1dRS]ˊrok5ޡ>UIwr=⥑XqHK0¡lS> j"b9oFv<|-qS 52$E;ee d l2:C֋A}Z; gO[Zn~s+ߛW_>?dGi踹f:[KlEf3Ne{)ܻQ۳I}j羽'ѾA]S {e0An<שI)u`굒9hkE^r[7L5YM5{[OKm|c]UBs.`ǐQ^eW_E= v ^<#X#NDUI6 ȳx_81)wz5thq^8DV%CѱM׃*@3ץF<; ]3jv% w+I-sdA~oJTs%F9v&\E@"9wN q 3mߎg@aCTs]$~vn>z,ZFnELbƠMK8q,C3*NwPCԚSs_D'iY ~<,@gpU݆Z҇[7%nR4=:n"&r-"B)Z/u?f_9:tn劋Z/657 5Ĺ6ˍ!6\^w,zp#p)!^zТ&zo*A.p[Y?}2jn!\"9C` \ŢBYut1U(ׯ_GTԡff}h8B^{| VE®L=>8@8Gޢ 9Ǘ*xo1EРl40&.<ԇ2X6gPa]$v `fG.8j^9.Eh!@ku~M@Oսc\kuºq( +Xll06]qAm'Np@2Q]C8#Ii 1!yDQnVOq!#Lqނ[|7={| S#u2ipש_ aoF[z7eDxvN.]&A=Z`l_[ Aq[$ӟEP֖@TAݾ[׻0 uk xLGkY=>!FA{7>3/noPۓ;,&hfxA#xX~Խ=Պ3ԴީP<~:ȹ%EP'ܝgsrNd>RSI+e/ȹ1dOwFUp)9Juh؃`#ȀZHUuY97#h󫅗Rlz(PqD#ۉz-+h[o;EE B kZ>զh`|½fPV3uo{|7r.dNGR{f726ec':DRߏF!]v䵧wnPg3ֹVj~@FK.Q:8mk+!="VA=V2><Ɂ j8hȅU3T ܆ħ=z {YcPԆ.:#lsKͯUէCX_[Xcu,tEN7CBo~0KKjB\͞] ol+Uvc n_vG6439ݡ}{XddRRr#ԍmե|g e|5eE]BI6ͺէڽ<X#syvK ~lLeEOS=4N֔ފgCcD B"YB3RހB OKvS5O}Kig-&ýsPߟK8-f# : Stt;kKW+_OXqXk 5m=%-ŜV<4&궴쮊#aMX\#6fbW ]Z`CfYO"xHRbG #Ӌ>8w_ڑ;0|wrz^wǸ8v_x܊Rj_R0AܡF/@LDk]AmwH QxԳ1Zf \ytK=]Fb]Ut;ҳ?Xz0TKKO,we8n웟:xTCֵmpH2e:Nc5GNh"z -9kj{B͊ZI5x!œ3252P}}jVS]Ć.S|݁ NI7:?E2 vL~qE%oZ=mrh qLݠ>#IW%XyI%lv Ա {[iU-zˣ{4$`X×R)}$mE=B|%E^;6d ʪ"Aݞ j㱘N/nػ(wK9|OQz,EwIlߓ/P[ѼǓ肚iYN,yPj]ZH $%{WI<\[y5>"~yL=KoQ!tSX3DyQ=dAk&yU~9$)"(~G>H3fLJV&2ߚO=ܫ!һȓs}+'~x:RaQyjPlQ ztڞd&Ik({Rt,a\ , 2+:ݞk3rG|ۺݻZS/gOH]A!?Y#CﴳZ= j4,} 9$EҫuF'q=Z8s6^ߐW߻{wj_C@ĈP?-}ϖ$~F{+] VH5Lh:?^V]PȳËYhL-20 aO-`xFkUv]˝>Am'Vl^nj]bC^A=3J2onQϪo*Wn$у.KyKIf$6핃"G&`  js s"|Dê&6}ggp@]zi`&~;  ]`w#}Բy߭,nPBl޻z6/] 娵5ThmeFC$V1#~d4N޿f?cgjarEb $1v]]^QZ$x> dfiIM<;|M_qʏ!wڙ*/Q^2N-S[[CQ;9L4^*.Xz+*;iŷ `*ɭ'}qNct^8<GUá(|"ˌid"aKVAY~L]׻xTY5 ̺W;{-Qv;G.0uQ}F4ΗkbUZq+ksNڬ*U06^qZVwE}Iy fwS a1Î]/W 'ipNAG(A5k75fF q.3Y86`zCCXM^F]I6niaOQIp#5`x풙jQ|~5)Uތ Lp w򐻆xG&E&G{v,F2;-)%B*u {:>Nq.p>˨IV\cymw|%޻+Cse51$ Gcu Ml%yj2&I?yy^cPճ#%Df7*Q4QR3 >>8N$/0+qaw|']۷sJzbdP" 9ZRauwCޙO(}e<,1:-%o)Gs`X$+=REQfڷgʺ%[옝1}W1Bd[Z>>Msm0K?OBL4R a8LF2;sMf]#5_8aC/h0KO͔?ɱWn{a̦ЅMg4I4&bU)wii-q:`DŽJWg쯥RnzP[%hG\'A#b'j$ d7ryclQR$EGKC3DžVN: y5%͒d8^c}$εʃ:ToPlaܓ3t@g5t VP0<G}(dy(2uIy.!DF)*x9>~alGrL 4lg` ,t ܋!jH(Zi"g2!0)Rp͒ xq)J8o Ke^-h &]k\]Zv^4yӱ]m$,oC}wO(o෸LOiېi |p3= z|7؈U`O藺"mBaw1j6"o?:!ZhѻW +c ЧUqcN%umSFH~f^u%}b5Aq -b:>dڵŃqO86_|'2 ]5n&g+ek{0tӜ2XG S 2*xp=qB[% {tXD7n0רi9/Aj.LF3YQ_ t5kok0apw* 35Ff%9(&˜ mEFPXpg 3) Q2f3R=$9*ie~~GbwTvBmY1^'Y V x.D<˧+n8,7}!Y:6{zQ: 72:h<-L $zxX;-g1׷>l4=#]t+TJ{7j(DJy{:7Nq}Q9?fg#Swa匌5؁v "Ǡ-na7־1Te@=O7zUAKC;V<{9;^+ݼ'<}* noFkt-eP={nVU= jX츀e`@T~3LOB=osw14*/Xz9eG j{XKo|߽2J#v|._|PF1;z;SmL}Q/`O؝٣oߠovC\8WpxB^OvfxY2'*ON%do8GS}݇@EЭx3_sˉqYd=6ʗnaJ%ݜ^M'8Lrq:1}="G M"kԢ>ܕO+NDZ#SC&HGyQ[?j.Or^VM9p1|pH)SÕ@D-_BQؔԭ/aS\Z;:lnj=;KAW >QkvBFD^IW#:aXMP}qFrV&/@뾜&}q[Mwo]<6I黌4<+QPUei9%|v!P9<,r? Cs'r9Hh{:qe`ucN?㥇[hKQ`*MNw?IbՈ:K݅еؙLgR)SLƱ}{j7};fk=0: w%!gn>R4< ~bjo>5$G:O\8Px9A=& !)Q6W}ao>#;ZeA9s* AD QΑ7m$LvGy a0Ư4CܠXA]z{S AGqJ x,2VQE?D[ aoI^* 岮t\s{yEK50u=T~DcޅC~ȘRF=h(O~ZK6mӱU `XCtzb٦.}kԮY(FvZli<J/pnv3!&X+T. \x'v. 2?# coxu7I[5CxC+Ge+JmA5pD\,.ϦA^j¾<ՓCEͅGzOxHZK_)P@dPCGkS^i@0xm+O-s]m@dph[zZخL.8!okoy7Xwn*q&2OӸY!`Ē0. PpG,7x6$TALb(~lqO8S8 Lf?qFU_eEz~߃0.ުo^õm]Z&;4 ϩTb,V S6gD|'FЬڟK\aWf9_Oi-3+϶ 9&0 X%3Nu 5#qM3gpH )Eau+>LIn_fC-ohS_>qEUqc ׈&Zz 8r1%GO{k>jIm&Aqt&.?hr=_K/{ ʹC r$(mD0-h4?A=KQZe^wc3<osɝA拕Zn6 |a&Yint¾=&/ cǠBuj0$r;C9k;x曉2tHuۦci{-(dd=vH|bMIZ6 6}4r,r[~u^Khy0^TܰHې #Sx/nf8YcF:$N>T\%ouw- U?YĪvNF[_㭭j ) 6k+iK}._ "Hl$׾]'sdPї$HŞyװذ{JOwiGZ%/fTY;IA[Am.m|C&4z^W㽅M[F_5xh̐uhzN<("!;ƒG(ۗ5 %a;5٘ɬ ۬{QR:iM`${/HINk$d0K\!Oq$=KV8Jv w}[=zz$g—lʡ_G޻uwdj趷8qxF67{1gjA+Z[g\۔$eXf_NpȂ餍CU\XLV`uXD.\[5!fMݮ횗lWT^VRh*ǣuе?V{ߡcq։0{7y_L_zoj>-YӵXJIڦzIf5M|<(ϾH3 0+; ;P%uXJݚMֻ?>x2ؐ^z b#`ֵ;FR%i~7ucU8UG&K%0:QhazB˅RZ rT3.:rǧ6AO݊QhJQp AL}0.lX][`%c!,";iׯ\ٕ@^VtXrmO-j΅a]mDT%%QAt, qǢc dM=>J6]x1*䏰@n5P81v^|lPw+d: @Zn3 k['/5}KQ#RL5ŦGDSBdcx 6w߂r-Ƀ%ewf2-(jOѲZ `)mOd$} hd,0GP׸ޒؓ~"y:\?z'Њ >+ZݕI̳r Jz/|b` o6Eg%lpqO7$ a{ГN|)$ͭ35 1L="CG ~n5ܱR5'0S BoUs89]`WU}kd7YIA v{LmKrCYS(Q]rXDg:)3&k~I_\=ta2Rѱ=;g.LFCvKw&>;3E+]QLzʭf^;o.=2nwVg읂zmZVjaz/rLiv 2# vV 8oGuRާJ~jVYΈM[e#L)k߿3!$=gmmqܕg!wYjT.F#h0vg/l|Q(+(@|tت3O9f ]/i@ut~$H6:hc%S99Ǣ3ś_!nLժ< O b&:gH?% D%5GI뭥>`jK: dPdһ!xI#T̠$%}-;k/S > F{,n8.עN!(8ocMŃ]M|Ǝ('CI-- `d1aېvEo5: RDu%E!ORƲR*[m'+$DG5`+x_Ǔ/> apzd#/IA/z9XBG"vFFIK^W7u;)ܾk2hJE ]`yTbUsָ/+ќ 5Hg?Ep4!1hP>Cã#~do޽ts:a,~4|ϥ~rtpbtҰNZ?q+:`;켰(, 1t7/i/n3(ZkBjLnzp˱7'p!7\o9ST굞DFs""g&^DVU k FKy@ G [WL|b,Ҧ E{(B̋LaKOzDP>n3BsN1浮{}s{~]udZxCC^rDt3R⏾Zm^]kdzI [1EmX&_G>z)Z=LZ\all߮Z>0±Nz΁~S4[o{1˧|L+)nv"a:KHK[ovsԐYCugđ ~ cLԣU;# #e1x.c\._p|Kg@=hs[߹?ǯk F_{_Es} rG[0|oht?la?Gp $t43r[y&"U4I!a/'i^Ib;[,_Pk,dPV>Su5, SGuޠG<8H3lFAՕRnEG[!Ysk0A` D8ii}w%%>2?c|᱓.K^cgq.ѓn ٰ| ԃ#_PwȩDPCxotȅ݅_hGx F8vb"K^&5 O)z/{4AUsE\!+b:#9L.eކq94׏7W~=kLj`')%T|Tؿԍ"lzSPhDǗ25w0A|j{|IP~{K]-=t`}ZRL%ω253;^Pw2)S[kf;^7+#\7URϾ.3 x‰%wÝ14(А25~~ۑt]ijI4ךn?K+lS jਞ,|gk vDFw0r㠅ib2uIg ꓂z&b7 #V4Ż`0޿ehfc\C3u4k#Hp~<1ti9&81w*zwKU*Q;a/^̦蔾Y*~@7<ƵQ4QWA4y`J 7a=o@ohcM>pa;h- Ey#s G.tnKj@4F9vZC+At v=;%2E?J9z-Pl ~/9L? \R.]=V9D(\aP񰘩Ou?EL% TNʮh/ZqVD0$/ y/6!L?/}yǏ*{Jx-rP'!KqlwE ݇>lojq?lvbBn^kyX6$N>႓-d'SB)n%نv*vUqWV*k6jS5ǟ^22:-%CC*K (fj{ots7osc({/mNK rϯxg@狴fUG Ȱ_w[ЀrzKl '=GK-gAFKHiם.%u?(H-"Vԥ Vh,>`ok9v-m ǧ' >oߜ<T{KeQ瀠މoIDn{wo@wsůٔDI"ܿ1~qTZt2}aUGe¾(!#0#hpĂ~hdhaՀAO_hb+o'MD8WT|ᛖzc+}5isMfElF\u,ㆌ#@Hx6_(ϐ7&zm+ё@$.޴}y-씵bk%'L *4J^l@TF}j);[Ӎjxb9zOd;O׈@0u툚5:ץ̾7^KpDB I%3~}Ov0=SFGCVE lvMYs֒mkO^/`=ӎ!0fZNJ_~K6Kd=% A M_XbCCu_A=kz$/L4>5QFDN\*bj#f<]hnQ jr;x.v:2[`Ԙ3iL9kgX{;y*'_]auog}Crl~$@\tvfߚA^1 }?4Im{~Zݵ\4uȒ?[;v4[+ā9F!'GnJnPnCLkEkdB7H.떖'7WC`} SsЅvo~K_KBd_OѵêuU13\gSÂuxXmtU+1 h{)l/^_`C EΦG'X5jo ? y.zFuכi ŸH@_dG-9”>{oaLJ}H&kW `L#8.3iKemWKˋI#TÒ@) <r2Eፑ%/S NT'X f>:3a"!ubO.ej8q-8G;?|H$q7 q'ű}I_ق ^믫'yk7cꍨ$K*(cLL#35Xxm؃jw <j^O]"(=&sg.y/:&!6^~JKˎ 2>ܕu-Gj-,FOq Q>%Db3I$XS$w5DNj: WlS47`HoM. ꩫZgUf'HV/vg$3׌K"a|eCVՓ%Z>ވ?x?iv6a`PJk ˼ҵk}T#lz,$YyHBȢ`ds\x8C3햜um-m"39Cq^&Ҟr j;՞T/ȉ#$ҀAi&mV_l84u5Z3et"_`Z]TʎhL ?7wm5?3l̐؜hFw&Ե&-=p50УXÚ2#lkK"5WŌю+ZR;[K]9?14&%ɚ}Դjk%jΥJ>';VVC6nr]-rLn2^%T;¸>z-ZPITwUSgy/NV+ VDÙ3՝Z{>9Z rԥo][yRei_DiIrd{˕IWcnj5 *ƑXJ|*:;+ԍ_=e1$G+Io 慃}9vhu -(O!X1AA밲:JB9ҔZ[uf[JnInC$lY)Tc%x5.Є<=[ѳ3 =TgXi%=k5HlVn*àzmTAt'NO}&.6v,mr>[j4`43Pn~%ێ&B[BP_جu)VT.עvLYXejZRcyVÈy>v,iRT: 8 K:n;sd!c9.I)$ H85cA4ֿR!h>uo3-̀A^ J$sӑQgg?j0j12¡ݕЭJjGu uP|]Ԑ_b0eϮGlcz! 9v`< ^ r5TQO"Oia+#`&0Aߺ|[yFgHޘs@< Ot_Glڡ˭'h;}y; !pCxi/S?7 eaXʤ&Zp.\s0MyjM~Ug548 `/qӅ=5; I>K _q[臏OM[r]S&ӶJa܌OrL$#qa|*c( LFuW4BDϭH^?/$|qo<7VViΊ?M=LB_ Ǜ}TRhɂcc`5&[ﻶ|0Y6c B_^}EKh]yv {2"놱⪚&ƽ,$cf')|G??Az@8+^pn$/ߙq\ Bj)vHH)oǤ[,RiLS+HX`MR^{[mhC`MIF oq'%r-xԆ$6>'T|Vz5蓠$ v]97òUuNgkQu:"&2o$]'Ka\J4Lx_ M3,<'7^C>񉦙 }h+x×dPHUQ3@(TA7S1R&0cu3l1b;v[, ^N0OYNPBCv箋,>4 2M)CW#%!w!x0$@Q﯍e7j{״Vq"L=[x.<=>YHJ؈X.@ wft3 nhԕt) sɞr #PoxK`42&i-zFN7af"x~ri8~ ,WbnWeVs,2rN08#]3_(L}2(X5tl] {0fWoW%kz*6wzVcҝkP""h>`ЕqֻS6Z ~Ӊ'|Z=OOJg)foiVV!MKRDE> թ p+_[;hA98g/jLfm-wjӽ.\ƚʝ /U7&g|ߗ-pػ)ᡦ*GaC$jEGH2vЃno titqҢA7BT|G\z?3*>H9"VP8qa Li?CwGL]|kݟǮ8U?9Pq -k-|K$9kx&k -ߙ6.yڃpǦ5xҴt'&3qІpU̽fj1njXEg1:+%_Lr;XQhP%O^-K$e`?>.HB.л% T wih+ |Amo|1Z)- /)ǜDĭtSv'˼;㗩aLۇ@e\z3Ox|&_ jGq}Tf0z;w ]Dw^A~@xRa.m[TLbDKfr Bβ7j[vzP5ǚOyn^L vmC|^U(ۋ^('x_٢KMU}ݶ1VRavjrψXݨ`V.j2h[GOЃz"Fc^ݭ|×w߯*Q)[z5>bgҧ)qZ2ҲSĦbK!Cb5a^xq],ѭKzvcd3bDM=dOc52ʫP2 mƏ F84 'fϦy( "o552 BYٮe~Elyy-H%D*w)nGšb*U= b;<^xywQM8ߟL%0R:˅kgaAJ-g;o}%Wwb]<¯-!!wm%]i۔":&T)g{_X`(6;Qʙ{~*_*dSkb51y 3ӆ~]. ;I%A424gLJ9CR_{ 9 񟷍u?Ύ$]Ŏ E T_PgE-uhԨm Jh3tMݝa':/n ' VDl%g;C0` os@2lø;6vt^Jt+701oi`R8r}M }>lYWPe Ou3g; X~Am_KgP'bISP\ra_is5;Ft) Z=[ $hoa8u1d>˟~XA.+ja_!vE[ZۃCt(T yFr}BG䗖pZvPRP(3.єw* xG3?KJA'=3D?c ^aiHkϪHg:fe֫K5Z0ݾE݌肹W4cxCY"s{'fWPObHNڽ!"w;cqq|wӺW-Y! wgJXZ-`qo~'+"F7@ C;+[GJI 0>g{XX޿,1`aˍhjkK+W]P.XiU}fshRIl// ~?yջ'ь!XcFOw 2aYM p"iQ-{=CڔqlFo7_1jcy%;2ԩZvj٥)>+,$͆l~+R Ípb7hN:1a+D`c_{v|ֲ`Nꔢztё6m>U4pQd\P VF'jTB"(m"ölqN2v:7nLh50ːs:iJ5tKOSj l;69AiE6O!3]q|ǕH^h.x1>^)M7/hNYn{FwI8#,C@;[I},6],t,IRɂC jÒQ0 y=,q~gs%f3kZh7?8rڂJē;WfG.PyWN~yESLEyHqܓ5Eqw#EQ8Я`x,p'l%$0a֞s-s%!+ݯ?ڒ+TQ33r @`Z9}S -=-25}শM3VNVT2O|Bp)d&ˆp@Ru˙A n#/9 ػarc~ z^]'p#hgW)ּmXBA&l;ʾI|D @eЫTi!|lXD %Q}EX-}}͠dXE(ȡJsZ/K6liZF >W}5ohRGi@G(q(rz/.uwŐGr]Aът+@prlhG͊.bK-+a_]R[+; (O560nQ3xJV>m]!5&~0X{uYT]Z੺,m윩V;'i9{&>{R”.r ]n"t5ocRe#ѭJf [I 4~KChWl_S-K56^XTjWmHX )tA20M?KQy+B(Cr/,osy\;Ngl%dӫ[k7 xPidPWR^l2)Z2 @ FF!4/L+aV>qoV׻BT@7_*D5Y1B&o.EhfvJl7%dKA}"_;aNV¾V]wdbe+A)w-/uL6Es>]nybn#ąl8|h.l^)t!ƾ]H࠵W]i#9m{OvhNQc O]N b_Ms3J1@@ֶnj% iI ~ugj7ǝ4xd(q- D"8h_P$l`T9|#;mXbnXbA#LTNkʡlÐ|qSaR[n'`q_|,Nʟ=$$,{XS87MnՈKG wq8t%Gz֭yV!;aD3 w$j3ܖdzbu?ZӔr~:g$viՅ $:mG/7kqLVFiI˅"  )SU}*5CWW|f.?O#md2<77q{\` .0&rӈ{xa 9v]D`}ޟ_4p}A^2s3_mCgG~Иqt:2G*N F34@9NħV!icP\+0NA:e 7U/SnX'oֻf v8 ,>L有q7 uK u / j]nNkⲂ&&_Pw"bÜs&|9E_\"Ȓ謴Ȓ<\8/SoKΏg2~jnB< :'pq܀/rN ZPLga6_#xUeO )ZũZ*qZ ٽȨYz2izKGOO(j}&1v^ Dmn;sYA4Jn}a#svAM5-6<{T^KoݾH7űU|GAƿ/Z/)w,}0ex =e Ǥ_PC01N_ jKݼJ\mn󛺿>mCԣYϞ(Ұ}4ͻ϶>&ތROAfꝃ:&_PWa'1H)F{RAW\riۺPfT(Zchrz$3;8q 꺳a\ j'D|e R|G5Rf[LV{>C)/l wkV1D.4XD=&hhDG>%G16?y׿P?JҪGֈ^^U{Nqk2N7ySd~?A_P[NnK|Գwa5&Zӵ1c#5?XqK-]ᅡ[ =25rL~UXW߬oBdef=J$"^3s0^[/ag] S߰#xhxN/>cՆ_ (AGηz [&P.HU;m$:!<>M|h]wfUb-Ҵ%!0"R{寃}WwK^S;\pB澂XJ: I}`Q{)7Q}Y{5~R;zq |g[/bRQ b.6ċGq[Ixx Uf#/Ff|F /dnQ=:@bΞ22_Dbo s0!Dػh8h%XN)B@=kOum@&PA^2¡/BӞgN3`~wsUBUi{罀$jc?w'l|UB y+ll*S}swhh%s^"msujw2ȫ`cV#Z'pE%I|wGV-f"47#kz"Jy"c;@KB=nBioZ>'mϱk95s !bE6 oU)5dWحp`+rJ]|lE"2ɻ{|NR]|,gG*vXB^dOjS M5.Ůp)l:GҖEFJiKlu$ګȒ]KN0- _ȤXf]%Tv] ~&gR{ /a:ӂ|I\P^U_PϷ- 8 { Ԇ'  ( ]ְ'\ʘZkM,=zW?=\= jwwFKiP.>e8ˁW0D8uL kJ+#zb>>ٮi=ٵwИ =Vv;H'ԘZA^XuibJ ;~R]zͼh{ߒ VӜvH;hNK{'u&^aM$%P֒|3?d Ipm&v|b29f' E{j#ah, 6_Qo n k$~W(Լ0a3G)| ѡ8+-rƶ q#Yb^9f(M;լS"xq`][Meϻ.#2)>S#zQ(ħ7,:+y .{e3CE]lZ> )Mi\ `S?~ϧBd9!~K۵*ى G&w=iG!\8.!o%J?j5{szXbSk''@R)30^ᨘpM^R{T Ȟ@~} +S, qqMﳲsm՝ϩu]RjpgrƲXHFMRd}IJg "|U: ꒒W;(y'O]ӆ];m}K|W=o<# ֶregpt>='z2wu%~}`}nAhJ1S/[rc/˦&G @>TTtۻiu>/<^{Kc*HUXz%wLZ52Bn.4iArdE a|M4u7{I{ի6D9*S[/;4-҄\eJUQl՝FtLn{cQkgdonc\ 6h?'ߵZ٢Lkݡ6ReM5V-:ET=520JY%JJj؃҈Y f w7.A5nBRv \l{Gݼ805iHN~Dx"BI VP>+ܻ}8|ӳNL]ƚŻr]S?]A z.*/Y j u!} x5t$ S#r~v1E>ã_Pm`WxlD]NJztjWP'`8G=UqKBXy>ӬW&KVFﱂoV] ԭruG1(J΅ pP^ҳOxKD+k?SY"|EÔҳBiSoQP3žxo%b B╱'5&kѺZ{6D[|F6B~w8]bt#Xa)xp95eӪyպ=] -Vu5 ]jm'`(=("`@m;%;:t= j οrډ }LXԕ@)4^J kZPjܴ[gRh‚uVJ<! Sb? C&1G[z;nL9-їU@@N*~,[JRmN U`<ɾc]p_w)Y.4 3xW2m!:T\TP8t6 DAqaR6l_&MX3{g6p"G 3Ʊ/6^l^'j$a1v:GʺѲ?\dn}GrFw8д4bnyxSإN4R Sdu"<ޘ[ZqiBM R1z>ֽkL) c O=Szw5_:!!8,jX-7pxt9Lm Y"<`y?9} P88d3՝uD9COaô"mc/%G m-L }%%+sX2o>9״7 /qQW kh=--Cu2Sߏ 4~w9o6dnWTG,%_{PicWO/A;S o4wWkӫ! KO19o'fܫkkt0b4e0/}b`L=#1P[ٗizE@ɐn'|1֤ lO1-zDq Aaۣ;p-{v#O$~n4`q}LztezA^p(EϛN`e~):atS0 Szј%WyN>@{2<+Tut b0ƿg٢U] '0vgp\ALC</dRO)qaz~G2uܔQr*60fJ*K0B5caO;-9 \N|uQ37 98.1sW0T:?j6;x*"-QCbƹmꞝE&/+\)^AS,;즼.cƋ4yZVj]I"̺ܺ wy+}SXX*)Y3AMXlRXpq!p0L"O,_:IY&]5 E`f%fL8Wbˍllz`dK(1yᛥ*9+>i]>^`YԈs?5T ûC9&.K﬎UҹKA<ܛl?s/`&y:ק c_?ZʊžBExLoqޅ԰ J400^}sbPxBÝVV DW-xYυcUyޗ:?_{[l=hgiy5F %I*7An~fNZvcjRJ,P.cI:{*Ѕ*=FOvQ@ #80#g1ßy$~6/Σ~GFx9wf)`)|3rDPƿ$IQ =O"rFӈey33 " ﭬ orbflp8:LΓ)R`f̦4wclJ yR߭Th{2 z$OXo֝n^ G{ L[ 2|-0 bd|'dY6xO(g0ch4BO(|Fl,3>E)||zPԷUv 1uC;CLyH=,XL˾*ZZb:`+-Aϋm|M~2X_36:_jh_ %[^eT`YLk95Urzf +ɪm3Z;g>j`{v^Cwv /@D;v|5̕Z )G{ P_;_sz_rnocԬp׉khݜ{GWs ,΋%p|]RajUW2Ꮻ4c Gӵ!=H"S+vAM9Fɹz4ytS(M?]b.$"<^㗩NL S[# -{%h|S_d|gjE1ZWY܉]DGwAk_)jDŽDoVNK:^~]W4EAD+ xpe }gvbu5Ә.v7-Ύw{j%Q" Exxew)N dE3g j詰G1d?ʢ 'a^<_&5ܿkD(i,sg,re,yXU{ӱeq :iށ ;!h57ý8Ic yz_(8H V/]XC) A{A O1*?$0N)::.o_/ ;Xt!mta6t_v~G؋Amw+mjD!$ k5͵й r$J8JivK3Q%[9ĝc_ޝ? 45 )ooj SSZelԫ YUl썕O.(kax'`8^,!.1y8}w(M x7>#UC (Py /0tj xo =oL~I.>ąs=D GzHҬVw[tr'"^R)%t]/ۧG%p-Eic#Rف(ԭ*3,G4*D!8BO_6Ⱦ{†c5fI#T C[[U538^+#]juq;j{Bk3%@CG0ǧ9OroTһ|]Bs Pzt2@ 9Z'xM3 0$툊R"|iIVO yQµڴxF6ٯNڤkrҠݞtݝfu/Q-ǎorԓiEPY^+n fR$hO$6ZJIWJjOp~z=ږ)YjHk+Q ʹ]}&Wt}",[!NBAޜߛzM5۽K̦p3odLn(M-GOjUi;l6%|,J]_TgL)Mo:#':ذ6QkԖ*ߙ0> *VtxSetat2۵MUl3vJ=N >} Zgk)MK# 6Q C jYdjQ o l8Ľ h o1=2,%)0 =8.Ɍfeb ϬN=z^@WKXZ.#]s-n+/ GP} 5Py 9 |lo|7D90TPo%72įнvUrnD! ;}Z߳%饱hZ+Xʝ Y"^֭ j^gN[+_3 MJꢃj-\f˓Y /mY|+3y=^v̍ (KY}a{4~ѳoCgޞ>|x-_ ťd US8ۃ[Ct7AGP+7TKә>:^72]awG`q_ۧT(C $8SK̆qs&-񬺞+74o(-^%|9Ҽd~cL}5۟ ݄`$)Ϯw)S#VYh5lH M /X4 4xftovkMinxr!>+wx,aG"۝LY! /[L~9sB2hr"gD,.Whm'd ~$5١:a I٩6$QnR]I9E!0Ѻb-hTz@[lݍ$PQr֦|$f@u!sl N[]ئD*4]aѷ.5P-TdWo4G?z/C}fd3CN\i;'.0`?RR\%ÈS6ØT]p@It^}НQ3| l|f;f=m$vU-!u[8d~^eR"?͉ڐ $ >K}@\lLt}$ө}YMHVJ^i3!y#`2WMBDŠy^cȺ=y&4e;f{qY[?cĽFLN_$ sh8B%HފF Hx7m;u@s/7|^Wyv\yeD8*tFX` 4 ^՝''9$uVBS Y u͠+ѵ$n}xB61 Wz'y12튕IJ ;5 IݏfVxڲu^{:.ofD jdIrC|nʞ=Fm?qa5c@!/ E$9c/}: kk^<ʨK Pۧ{ɤdj j;.#ſ+I>1W5EZ5I'C2jՕL霼K,J[/`o*L}Rϱb7a: .`/9)i^U(*[6; 㳹 aŸ:anqc𴿻]a(`}I|32y? p JmI'Y9O+2h= Qy$CaGe,tY.uXɠvf)D;\.l5J}jPs87{r"MbyA}w Wrxaȶ~J;Vʰz%7Je{o$ոjR]%e~6ت T9ߞ P$>1V5q]-zn8~q2v-jo }-cs=5fw\&~0X`?<*D"wz6v`MVVG Ea%+[0 Ǿ{(pOKjBsљehYHcrJԴɵ1i> `nej!bLS$h3_9&sO]^'(O[;uH{ XO5!\N  I+of|L}A=+8*}mDXk0$ ٽ!{ͱf7`8 qv 5ٝKX˒\k,o@`m;CFbϋ: "gIJɛcLaT&TI|!'=ovRPoMgOCI }A]A=e\o-$+yab6Z=YjZdna/0ZypÜo}˅-yotR lC2\h2mۧk}Y]ωVkzV jp-ZGmC<3^oA-2g.b9I>9{FJ: Ph:NU iQ#\a hB>Ōjx.v >eX9 d)6N$XE4S G_gu(p)+Dv?z"'`+tm[ӧn%-ҠMɠޣ1S7ER.1w˘"4^#|Q=KD\:1w/Tı@gkS?]:ݚ7f-,2!.42Ez6F+,Iiґ+mB+Wc:Ps6 /gp`r}ãў"&'N5p3*2 4|Zka}kGs|GB}mN5-HחYvr~c/ קCc^[͔0VH\CKOwG"G7"e$sP;47kȎ҃Vb7a >u?uv? I Au gZsXu{Y W@KMMOz?ZBb)eDnK<[3Ld#eN#p-2saU앦u8Fy}0zɝʵ|C>S#*v;)_]uI/K_Vvԃ[ygB"T`] ~fdiGK '&6{rHve E0`n_ԙ׾1HrixZNo`[Lɏ3]vQK_؈g5ܿaM˜Ij$.;v^G905aG[H]&GCGLQ>/tC 4T VmT~{4~s5 q= cw[D(#4)6E%"*Z ižፓXz}%ҧk+M@t?Ri[LlMqIƱe8zo5]z*]wK3dLXdjVeXd)S[Ԩ's6,*msħ^H$cܸR8'AJRtڇVdF:oĦ{"WX¿In!];uh#}R ۩CJ:O,EP3v E<UPTˌ&qJ({e&qx2#ibǽA&JArL8;(_SפofhRK} :u+Cتn)!N]z~VdØa\NCXo nhtݖG[UvRWSSϼ>U.F8tj@ήN/Ah"j7t}ufnMyxq8gt}_,D q?[+(Rj]`)3]8| 1ԓ?;|Ije `Wu=|>фEX+e}8->I iOaNHpO 3MLx*0l]dd҂c`Hק&,қ&bKӾ=ۉ>i@OVe8u=}u8`U$~0QoTm]<@R--{,-Ζ :LI‹}W_pW4WGqo_@m^mRչj0K"xYDžOhy= fFk?EmQΊ D2 }*j([K9]|}ZeS dbj{dhnaca:c(g\$`f! U4*i2gHfw絈mXVLV&nj]!?{/n} 7T rjMݛvoiHʛ]XGQҘ_cy6y,,$roPO\KoRNJ5n=GՕT.1feS^Gq{sYW:vR*a% <)$]!8w_QbZQHdPifiJV/4XDjHآxת;;\JI0ɹSYYIh@%-oM>YBeCtR5If]λ;h*g$%sX'XθIr*K>@ד3$(YCY#\M1{!7(|t@MaGxVF_i!PZZj,$4yY(bTd ,8NsCyWgMH&}W'WH uAh $O'a?UMEx\L=>ILjE'% PX-M[{9fۚVb%aL\}߾R|5Z$sY:[}Khϻw249BM1_σT?p[ᰠWC;Ӿ'N~y*݋`֝WM ,[НI1*kS^XprSAz0{NV4*,D 5٨&7, 2k#FZumd沃fz wl9VXy@65NßT][!($*!<)BBGSnOӒRWtAq< j|jޣ|5:ڎgɴ=ɇ_=;;/B*R@(ISZK'A /{smW+>\%L* ؑ#lȰ+WY+ _f'Ft"o\Y趁ݵF_--;b)]Tq4SPo՝x+.k XSאLiA?Ca8e)aխq7ڽ<< j7(EU׉g#`i{%9-嵶#}R:E!l{ɼ_={sݡ$OphQt| lJ%yo.`a(:&l JZcJ}w͠n*=VLVdB!IU=<(fvk~e܊N]tß?jڠ8ݼcȄK\;l<ÎqlA1pr3E:gefU@{bAG=Lh)$byz|IkA{(:jcR rL]hfV[Q!| )+;9d|L jF2O-K)E?,Nf%!,fa9u:#m{vrx"ZZmN6{.b~L 0hY=tUF2'P.OEM%|"8GnWYPa~-0f=IpԶR~˲Pnѕra)d'x5o/o%,pDcR~1hۄ-UCZ{/lJK!:Cvr7"Ryq}x!ޡpНUF.Ҷx] tCvݑڂZ\dzݯ+R nυ.MV̉Fn\STQ>#XJ뼝F4ΧVuqpuwFC"a_e{F>Wc .?ne}S]\|c$,٪lN_Q92pf8I':PP׾^pc{Q[ytAPnMs C{ O0ϧ{u})38{5!f/ngI/!<!ܿ.88;*K*uYP>vZ.?K{X/R/<C86vf8c'\::cr^CQ>G.m] C+bLl h0 ,]"bxkvuxe{C{[~gnp6ԇ7!2j_y=zTI sa)An+pְKa[@]~do(HQET]MV lKYF(j9t\Gٞ}BC'[\Gx~]N!,V{{~Qgz% Jb,K.5$C6ǫCGHuu /fsC0Gzu ޳)N"Ap쟀1 x'dǛS'F!t|9< >NǏ+U]ǏazCjF"# # 6:eX#]8?(YQxwaݕM1JM},"C>e {hTn/ _Pk¥Ê 2W%y{>_՘gȰ[lpq-t= a4ԅg+'`Cj0d'10uc.J0{.%ou^"Zmf_ۜqlÅ ,FkZl/"RN@5-)ۍAenU0h]?9Jc^vk@E=ZZ"J#|n'A=I9| ?: ѝf^0K?Ceów';)OpXD! ~,pC&Fa}2SUED~hMcC }$_=5<&inU0$k,/&< 譥fDR6N϶/gه *, |Un0NfyRI`!_ mf S ԢJ{X:{hvDʉ^`Z ɭZbJq2z TQ#]bŭA0V"ftX#ǤTT=-pW|q{A (F.l>2$]j_Ug6G5|kf4+`,gTCme-|۷ыmol[w5./ +f j=5\gh"aXCқ;Rzr.a >.zճ g([ ]O-N Xm 59dw8Od͍/ƧK]Y@=ql>fV ֫dDrepݝ3M4hpE1V7zظCQ̚m[:.^&ǧ%+c5oA^b֤nk4Boޢ\ҭ5u;,Nh3_0ܟ6+[v8*5)ߒC;"KUq*2OMK|_[uH,@JwX'T-#~syI·/E̔RWjngDU-lo<%Mo5"iG ԾGx)[IjlW@77ud};2 $_ `ITZQ$OWi=#%~$P2ű bG,A3aѨ᠍3ئ{bS toMaXa#$`gq|D`hO6E#pe@ )Wg5?CBL%LIMkxXY}/ogV!b4 cTqZe@X1O#f.3Ks㛋}SiNBI\'Kq+ncm 6Po wx^dpZ^LVM;,ǎq) 4mY.SO!K!0T( lqɰ;H+`W wz ~e̱݉f5> ]-Egҥ J u/;\wz7!~T§xAVTFM,! oUs@DўŠg3( )=/l,=\F+vK+Q8ѮK߫I`%ZNZҀ%W~foO( mWxO.)T[WWCܭ9!s`W]v8F~sHwV%Eڜ~`I* JS7.$}VyQTKs%I _1; =QAuh6jWXf5a\X(JCOA[:}Ibi!tK2wt@0WSj.dյ WPjt8t|< Jaf~C2(v UTjŚOBgiix0mcΪqL8.*cK#@ ۂtLf/^ɺ dMGM~+OT U! Ε̆v*AKjKutitI%Ӯz/Pwkռ,(jm~b="u/ʟ6Al,ـ Y|\6 eִ2"A ;^5&!r1whorj_B60]oɟg B +"7$)򟫧uR_+;}mU{̪Ull<~_.zS*}בPG ,Fm'ei|=ṗM(1Vc!)k) &9vԆodzsø;%G%8 $D 5*] 61\2[ 'hY2l8Jlug~'6@F*_{&E6 &[wM bL+SQ$ a񶓑(zF Y9>XD&{3t&(m%fZ~Zr(;Pn*ڔa/f:>UV~BcuYYuB]"y; &/<Aݽ^y%iZ^a#t|R乔0ށ!;]}CmUʎexb ]tNE0)Gils&LoK'}"!K\߳2C[顭Ov 2BKhQJ8-K y$;fBۣ;gv2v0bLGJڠ_[lԏ|``uw1ǒUCA6D(H{d@+ԟ|&M2F9SP2x0[NaPsvE2rEO&CIrVQKCxqj覺Hg:P$uTꛥ~^INx&3S{'I6Dz[ ~Mp4;yPëRPgM`Rz:[GZNݖnߤ׮Q8GO>k+wր!SnPčud Fm?vm߯m',HC ~o9ͷݻu9 Rhh8:ԼmRZ]LLZCAO-9vVrPVXVP fz aL ?pAut׀^7|{MLhi"R/ޥbB7u(`586XJⰝdB04]ܮn P f`n"vvR{23_ms=eكPG㩸P唦hI$f&_1G4ٟJɇS&[bL;1VMԦN}B_rQ| CV]L讍a2&gS<;CffO#ꧏo.;v*yr^v»A2&^G}31Z*T>Qu嵽|f0|Dq :lx%/NJq@pBs%X~a/iF3wDٍb6fH&Ob ($WꋠU L}Zp%kKW>Hp4)A gTL?xԥ8ni!yl~c*nlRe}ԛ?W f7<$] ٕwm+5iS}nQ#|.7Ն&qIMgl)S|G΢wַzu@u؋pOo6lU׶+W{D0\1o׿D5lYL/Ծr?oҴUgּCcNU'@h ?<_N~l{ >R^g3S[I <ui' }ԯ&h7"ejmGr2uCP55Jϐ[?[)UTRIg9̴,Y>>C{2$k!pG.WC<4Qx|B~ (\oga92ض?|u.~W{[G{[ o﯁f+W#ѯbb7ர"rp$4b%S=;l-AP}}p F?Y)S4>WrЖeM "k6eWc^'OMa:S vpn8#s/bN={x_:Z]_aǗA5S"=/v{2"7>P񕻽?/Lm~'h(=f9^s[Ơncmvq ʙ{[tq,nO^t S?swuQ^DPz2I ԉWV(1HpŒҕ[}2ܧئaէ6hc,q9#J HQyxgEaRl '~Fؔڣǁ2#I~14k_mG)j Z:O!wt,Jj{:W: { &ο!|^ySn-d\݃~ʼد}ҳ$arDI0TޜwU{_R{w9b_erLjM3!+Nw [~Jo"&pZܔZQbi"~ԧ×~D Ec8v,c7yWw%X2UVVȳ}h;21t>;FSIn`rgƒ벩[7YX==n {'&ۿUCa᯵v߳5ZJ+Y?|=ruY$ڌcֈt;2\oDr}q|JVwV 9s2xv_P).^;W=O OI×xG"aT6FɅMlK/N3W \7{AIbihVY$0DѐI DKuh)L=tThpLmh:㑃"H #GNq4how }n|v2+Bi]{{vr4&D6م˫ 8aH#ba7V5޷٣cEP΁ZZ%MNFv~ۗiYw.,RK>׭U5ܠ* j7$BSiZ}A;(u([ OD*ݑS\Afj$K}^Jbai"̳,1wykr{W3٨:ă*3kN 45 48ƧE@Dۍ\F郅a>A< [o;*oIz#Vhx3 zxQDm8+3p!*؀1^M:۠M4}K0l;mfYHlSceV8>O OY&F-"ŐaiMs (bZB<g9${s}v`,mrWMbbfr5 wʟGBXYZ0/Gw)Wͱs>yD=m+ >NB(rgHK܏&gU GӹJ"4FK-u2;UVKπZ';}J+E8i5Z.37 s6 g(>7) gu$gڦA{_- Q_%@w@I=zJ5gR Gw%U?y+_PO sܼbBBNg${~ @GrZxVAo \o^R{Ygn@ҘjnE.kH3^!Ӷ-mf[75x\I>ھAljPeЇg/.>HNd7&ǥ[1q5$~4z=-ЊBZ^艺 bQ0ӵMuU)0][crx饶^(.~hѻiR\ϤҐ0(#!Ӯ}Z#7_j+a9uh|x݇I$MvW>7жs%zlM3Jڀ2"ܯL5[߬,s&23]=XҎ"6_!bӻQ}Kxv(z}#<6Tenʒ}mejH ,Ә.`( \Nxi=EgxRG/jK/uIE>`/.~ǭeIuWeC@z sJ."ja^C(+m>$i%&OZO}rL*ҳ&1e ScHoyZnl}Soq;=^{Z ?k7QN؁GZ."۠.6Ve -Ea6VHok Zo)==#5cғ{J ^iu+9a]ÎjpbAH#FI U!H"!L?BiGڊ+0IExk![w(t IFAuU4bW71Y2)O_!o^ՅI(g֩wnuY<#)Kw}㳅+)g֒ڧIl*5_SSocWwzoW=INM۵P$Ы3lJZx9XYn6fp֥ ?Zݒ5 -~wos x(Y-VK_.Fx[5$H5aXIAO?O|p}6gl$'C7ZF^p?LO*ٮ4ҽӺ!Xjd| TѷTEt/] EJ6ȺpRq"u{S'9MҚzzPH3-GG RdXWM;YD:Ҷn}(8!hi|OWVfAV ZXٷ"`XX` 6>q!~WMK#_dsoKVH;vJ>@|FΛ}A=a<9.p,޸jgzf0IEZ^B4,ii<*x<=)[ސմ2)Kz O _J*B87-8K+mq!.$vX;͌n'w0HVej{Fc>i-!VvZ="VkǛR4gc=F;Dz$Ag3x*4M_(AmWc 'ݒ=4Q+ZirOs ck] 64#{ATt``p&SiuO#볌I3_17O܊Oڃ,UE0MZ^Sg84Ѹ]Js q&nlgMcٌs1#5[?d86ǭ&'&՟m<.j[ zM^[ȒRFZfl| I2k7}dM]h4Y6gΦХiќ$;l(qX-Ze-0Gx\x_o6h?]"rGٙ aNCsim2Hx̳kT p=] pV)+϶R?kC0/S`jo3|HLciv2*1? ԰8>ӕ-[\X/3Է{eToSN`q$9/c1ې?)vo7|1mCm Iaބ Ef--iF]q[ha|6_<-3Ȏ댠FF40 )PE\2 32_c_?)oCQb(cIwzGݝ5POkg-&2ASZCS`nO8R\a+%Sx;giF3ǒٽE!g'ĿfcC6rܾe={{-=v.>ekhN|J\_PWbTf&fvqt@ ^l|vE>E`Zb=D!]KVrAw"~peM BjAG~.Z{9S}ݭhyGFɰ{Sah\Hۺ[(S.*5^gMz tWVNmo/0}PBԢ 2 .NOF}O}Ƨb+{e7RnH[kԆ"Fju(єhι0ǧՕ0+nk1~>՝ #ǤY9Si)hk޶Wݭ{^#"${K̂djm^3+/\z)c\wQ{/NT*;K]Rъ?/ط+JC oV Ü wqa~¾ݿOv=wF?(kz<11ybSuM EzVe>.SA8nOqHRߞRƿ"Ѻ"&9GcOf1We}wL7i9\u{2!(.GN̦]ɠQeB߀A];.$aD 7_M<߹CW0e=εK RVurx&ԊDŽޞcKkS2:N}|=^C_U0b3xt'zrS)Q9[:z8@a:_ jd\_q w5bsҌۺU+ SpijN=\f77ՆxKS|ʼ i7Eh/=7ݮ|wɮK~,6S\zES?X{bBɟ]0DA; 4v?Щ}ꏰ;YR:n)8o-}1ωRpa܅~r›e-b,Ҡ-3D5䧱!eƱ%jTQBuG`!YE'` Z_PBv5v,5n[MQF>Ts{.Pe[I:0Fgd;91 oAt) >Ig$欄v;ǗZǀIWBx ?zq)_bgډ)g-J}~$eHBP |HD[KSokFc^(c Ўh+ }Rm&d0kGo$+RsO|r30W:T*UfB3mc]> wi8'!p O: D[ݚF]F13N,(˳qXbg-{k8@>K/0 g]ُXj!wLYlcy{/bjLmϘXkx6q5đZKV넮 ˗Ad&E.%<܌:)y"9;(wR]9I<;G2,#kоe035,W!iFFXg.& L} șMQu0>!ְ̯dw.x ]M׻Wbe?莠b*v!9x DuIm5h;]& v/S?wf$/lw kW641׉L}"kaٺhoYH{5VK}h-UЮa93R6wK.PxT=X^Az/:ȏ!xO(lrLT!n/1sP \ ݑr EW"wu{RW"֑=HT h8Jq@B?ZowcǢt`]ژs_LUcQ{{*DL@ZWu.ijdfpZ]IKZ&Sf.KĖ`?'uX|K#\Qyt'tдf/(Ex@]Z]>8X].&q#{s&@{DחZGl8S7p!gnX b_IH(+1-j ᜨ}vnCAr:@DB- Ӷ}{q>Z09'wevo9QZKf O\?~\i!Vv;>k -9FEX #.;6>Hn0ʑMnT[V'm1ٽ0.I"vN*9uPNӞ98]0'k &="~HISb4ѝk|*_K 8W\~?{-X<vg쑕eYI }ϓpvK1obýH Y(ЌjK0d^9Jq՝k)E ;EUԋ>"5SJt'CWX|&*C/ljhRiFvSH>wO"aP\qN{Br.~ҵ ͵n)sJΨE-o9~'B3yM?IGWa G8_HB.K\jޚ2p`R$pΕKnyChf^\ҏ@vɔbDž7w\L#Y7:n7Q:jۤ)r^LR9MO!.R#T{P#OJ2Y&H#F3zO KT%Pv?TuTy#a/PInY2/$h!:@KN |À$ݿp`޳ua㿧[{4etHǐdmr2uhZcf j VzyAgJk8ڼTw\Q(;ܔ=JNƄʗZz_PӬv*(ۘI9d/M)+뽠Rr:Pcye IOmPPyA᎑ZcjDœqQƠk1pLX%e(ƑLۉ/eJuao {D3%^Gt+qQþ-TǶE$`ULI:Y*Zz#5-8S(Ar`܈,ҤkETe(CLIgI c ~G t$`R,AS,(Ri:[MU|!Bz^2|u$dez}zCәKV]Wͽ$>ҧ> ³s 5*ogCǷ;gSP;Ph UIC۪pIWZ:2DCe Bqmc JpH؝}z%.ࢡgd?܇fz@;[Ŏ`9bɝVmXDɹݫ8ޭHt\ol5 l)z%M|X.(:cر P6_r^*1,fy7 Ͷ36qy3t- ~Xq9%DɆQ(M6zu@婘=d[^a,j ;|.@O;Αߛ-Sh "Hk2\ ݒtQzM!5Lܡ^(?jݏ2>wyg ppuRof5yeԖܹj ՞ 6 h֟$AQecq|:YzY,ԐSɬMzwwuZrV6˜o<#d))L|'64v?'r$'#EPbCSA8 |mohpbZ 6DsU[6?WSXLXK×9~I SHF壥LndS% ؒ:7<opS~-7ܿ򡖆תM5'OP,0W[L.sG8Init/o^pgiHl߂mqkOK_cy|~#G6Q37B)VDpg BQL:= ֑47z8[Y [ !gK{ݲ~%go7/nUI|Ԫ_b'P:{YB2gtAvhFC^JQ릩{%|WҸydQ~rAY)bZSPP>ٖ[ecE8Is[-PɥW}eǽFp/xY~hۮ1?ѰnD3.]pE:l NǍ&g1fiCf8N2 |zoC2ӦyM}~&~[U@Z@vcJ 3\JRF{f -Qo+%9?hsb!G &u1M|G5F_pXAm.VnM3~n-uV *d bVE*\Y/S'GP}gh%#+D-^*,6_w5s*MVrй{5EdFXs%1ՒhE7caEc~ܩeD{rA}+n`APL3I .a@wG{&.* ~VkuOh4K `'aDe+b1zf#o;Skeo|z>&k4tfܡ ڞ$Y&P}VUYڧ!JY$ec6q8>;;z]pA{&͗D®#d0k}^)C!w5>EPf9m 3&15 y/ϩ)ϨP|dSNA]%?oK>0PPtCVbֈ,YBaEDG|߫To㭟K򱥾~'XYw.ݫ:&u(DM+p`AX{}3ݙ 5'94#S`@ٱ`mϮe_6MqkvvC|Aݿ{usLn7>ʯ]3hFK2^elwx2/MUPѻt"1% M,L}_FԽk NbjAfVPs$ӑ˄Ռ=eQ(j~@U-*`=m:zۻ5Yy$_+cfR˰Yk|m'}?ӑ0܇f0|/'s􌌷u7q{~`YEv]1猐5u'Ԡ dx4J) q$H1$&M?NO9 SOcH`2+9όE`MV-?ݏJݏ.aQ(AXuaam2uBKL:qT,~b|X4J*5<ӹ`,82{9 ej{zR>\f ޿^aPSA%tL  ?%&7KڙR/rVrGЭw1f3W~R8ز5Z&|OWck0zɋ +4KaSFN D#" aנX9hS}MNgM6հ] 6ͩE(b|2jۇVŬ^MiLNvb\j bOYbLv1|붨 qkwn!{sG{[=9tZ=S({w5=EāCX}Y{ىE,#C3XzUhtNK  B7]Yw{q">P m*-R2޹$47bLHVR"agG` 1[#NjG[_9Uz>?hFo^!򠎧aMBKJz"sب}jέG`PqudW ֭$ WWڿj<ԐfٕUj6/ 1uQ)`"pqk IW'#Y+ώl0h +)a @Ga/p>U񙴬IПRۿ}s<\9.Qq䡯ݮ>(&n`sB/#hS]XwsDbcYQ.#eRY#i }8h߅ƒsLmX(PeE8xxppQ*3Ÿ $^Zs|x?j0Ո;Xڮ!GG2%-'2x-ZQ{fѾ#3.,iӥ ꞈ USVۇ]rیc4@t pt+*)li5e/ Xu/%a蟼X>l`9RQ;մCڿBӬ)2K?>xL^ Ei 5uzTj-zgD v̧lS8 @ުsk_WI^du J|X\aPgg[NJrOZ:oBMFXԳ, _J[H쬴xj:sWJ;YƜsfnnF8UKwssl}/p%N-7LUw9BةT[B\gq-Q)mOv>K\]ʷ@hZU7 i_wLۉڰS! u-ITYUTڊʌn!Qq֤n(QfarS\ " uG ~&/,] t2݀vql]lLwSoJ70~b{RG U,gwȥ,i|+ѫĦ*TpC(% 미 ~/,3736(RVޤByXP=L05Oo3)A|RA5 8 Q€/zI:ڷHGv2jZrJP#^ZzSmST:/&70oQ0*EgAWhZ W`8S'%M:uO̦EFS%wܡFP#Ͻ zOAiuw.kd4 0Zru{nEw#{&pdkjG=pm.0_blJ,!<ί(A{ޞBUPf54 -b^MWk drFC- #P;4(T-+ ;^;|i#. uQwLὐs9"|G^S붖G+9yms 0_ݹwJiPjYy ߥKA=r6 ^BP3l:>RMZ5݅˜RV餭2ԭ2P{b҅>G>!Qʹ3d&-ba/JS?ht9y[ "dIR@ (PqUqIm[>X I[`ZP#޹f 3UcS=]=;(͜R?fʧ٩òjFc؊瞪K{{Wk+>SZg.M"WR4 H .NÀ`!rǽ]Y٣щ[TtRҹb]ۻ6ut$6Zظ㤵;^N{c[u.E0l(Rjs, aDGH̾2Аf<{2;NEpNV< D) U3n ^ϩè1ZXgRޕKKOBiUf,b9WwVD?>AזUKu_Yٻ/̞1졏v%y+8q58WNgϗmL GCo:#`)z_[AC} E׾އA]n`W|}oI(シ&C8"wt0h1 ^s+%[T 0ȈƇHvvz[oį `z,tl;\ܝDZ]0y];حS'x'N:}vV{cJxƦ7G_ѥW޼rԐK#Ⰲ&!߮9T(e9 0'#VxoxBWcU`rwz }\*Q8]Ipħef aʟT,zZD`,w2nꢕGO9|ov*9c??>-#zIuczc3WN 7?Knw51<hd q^wPG@ :uorx&]{ݩgoo0tѲXq>ۨˌKX70W;ھ@]Q9!vkXfSx);]m 䠵֩e&ďVt02 ]tWeZ&VWBGp 8!RZc;~tޠ#p Y0llPoƧ4nOaI؋ϫgeXY."D'eypZƦYX 3DPcCDggg3VHR!2}0 ⨪Zx|g <q|jM 'ƞN߱33tM$—D/M: ^2/S6|fOKVb@3Pz*ܷ/t^aW@Bu7%Su;RcLC$;,P ZG|&btLSM359KhsMWJ,  AAl\b `7zޞ3ċs1ѻ^X+ž8~#3s_#bPR(w\ ~sYs#͒׬ en*WZ$#KV8nYoo2S.ބ!W t-uƐ.+]gD2%ƃz䠦2q@igͤ12+Nt^:} < lj֓Љ\*uTyv5'5l ȕd=ȳ9>OwC=TƉ/>.MHzguQq*Zfk>MŋSkvSċ+ ﹚xL89~eAo{HpK'TL|B@q [g .agJ`@M4IV?gvV"w^m)a'̖a[]ӟon|P ajqKe's꼏6bG`rJ=4ዑaR|/hƹ2R( ,BM5C=)5qq3`^O2|&"rk|F ŚTƢLV],Qw[ bMUUpP귵V #:z!3:ޮؓ # )_ t5`81]r6^{7%Li#F}h5&:fPu#THN5UOZt]UŽGq SpQҍ9U(b?|/_*ؘȹ_@ެNBsn~1wH_ FU̘ҧCNӴߪA VX×rKd|!݈Fsc 5}+S{ (m $n-eF^aBYЌ¬'7dw5̪͒oUQ.M!|@8w0YP=Jd7UP٣!3*H Y (s&i34$[rٮdF)f3ќ!yТY#33=geۯ}Gk۞Ƌ;J9SA}B׃*Bz]&CF IB-Q:{؇wO,(Nb\O?C5H&]=r:`";KLq#TB+WG~~L6TE^7;T#Ԏ/>m{wM%!ξg:ac& Ʊ${G{[>8@wgg )"=is._fbXM{7[K]Pn: t5M mGo: !2df'Yڷ_wFz83:A;^1`voIY) %0}~T2xg=zUYR%(lh@ ک( 9vp%'̣ 6% Ve+M,"JtN2 V6#!~AmI3cո(QGS$q!\BXӾK**һRE:f qvp^Q3%^':R-G)E}i :?*?xXQ5{׽Oq;L窝֬BĢsDVc,3ɱOA}z43fJaS<{[kL'6 JN>-Bift1K5I5Xk'bP}7 _]Q銰 Ym '=Uݦeg(i`%7ު,>W+s!x$@ݢT 0B#t#br3)C A?Dj7CCk0h٥dU|iEQeڴewn>' A3 4 rumّ-F x?E@§z/d3 Bvh'MT sʾemKNFn1"Y%޴ThpRIL 5: /OO0s~-)k0ˀa?>%YPy"*B|^/o9$Ep犐eR`OdC#l|GQ1某fV]]dT >я^d {sN,읆w'Úᴓ%6> _c)\Vٗp͇[:Ly3҇jG9b0>I; !1|y%HF[ O|hfx/'A<_ִ cNGWPk3iG>UTH{9&o_{f> (H@3r'#_nn@\.Ki)\2"_5l"Z;#܂:\"s3P*DB>R2HU䟲Mv)oL?!/x ?sJP7Tvwd/ѐ`i#/u%ɉ>$7fݡT{6LQTSǝ`.Zߊcm!y'yDzl 7%&M5#ݙ!i_"wwbIa :$u ؏O'#s wd^儶Oin{GG#3HF|Q׋W؍\C/ wf%_+#8w,ֺ{JnajX>Ņ$^>gr]*%Q?؎A5KRR:O 2eSqgf2XiN2p 㪠@sl^TڒC2vk2 iOQykЧɻꉳ!TjB}¤*CBvGOmd Ǚ h}~; xcgґa'u4hǓ>5x k`ԟVMHIFd7]ާ${bVsՃdZWB3vr>~ [SbTVRuA8&X1[]7/i0$NcHٴ4iŒ;bvRI\#EC6tjCƣ^q|h ͬ;tk?!';m OX({]))_KAS?د)z>I{x,hjx5Xɷ:ԠԨPEF[_.TpPԭ_ vUTToLGt 7O%C"(U^j!/Lf@juvѦBpwÁ 3bGyhSI7n\e>y'܁l[G>ɺXŇQ?!)xA -"P&0XU^K~a /@l(Aؼp')c=E<#Bl0!Ni=IKoXXn9 u\oi1uLjg %OH8D jh2ܫIJU9-qU4UvPOPxS{+[;?RԷF\ՏtL_xZl3H3nH'4wP'^;;25.g_Vj<%!~R%8>~61LەtŇhհ2tF 5mc(Nǐ^ ^VKwSdQFК3I@masxG`mchBSPz8CEa`ȩ]ђIt,fC_+Tvǎ+-b wFP̕;g9AKX"sA7?jC i{Hi#TO1o(mş̺u VtwR=CMe%L=ORʱ;ÇښT1ъsuԠʸ\R`*'Q7,r"&05ߒf"FVjrco+y4urZI-Lԅq7dR YϚ`;Z%#5j X.sPP&eKN㒻R[zMK (#^cd+SK㑫r1OJ/gwo_[j6/`O_ [7M~2vM.qa qTc f֍p ǒGrjL4'uWjE85=[NR[%k>jIaaUhˣMi ~ -&Uoփzh9JF{|A߀ ƕcuJ{ o $sn?y=_P odυIu?f jgGzv+!_;*~Oʏ{1R:Ϥ;g~{mp?n1^P#lcq32m\C]qX\)Frk+U6B,zӲ EѾ]6 G${;Sɹej(&qM-O+45R>cx܈s*8w)LNHdJG *KN0 mj8GOrq`޴d/hͿq &t~ƜMM>ʩEӒ:+_P׏#4}AvƎ͎tgP׻P?USP4!>'&Gύ گ^MUAC)^+MQ(ר}@Ly]ɄfUa L]x%^Iu`A<4yfHe!0vOe>R~8zWx[ Z0gI-'3NoYډvY!S\7eڊ {WeaG~2=j;],% E;.RPu4RS/Q%K×;LꗣhO~9#Vk dc$)ґM쒶Cwy5(㭉|AݷhuOv먐ف|7\C-_p%]wqHV˓b]_]"O BRp8~\_r~vZ` +$uAs7ZIt??~?xsJ߀|T}+]4#j:>!vB&O1 F[TKo9 " >IbiF~Ƃz jejyPw1:)CS ޭ֣a650ucu?u?Ty˽B9\d"&\fS̒]En8|4ݑ!Ή xuXZ` oA`(n93ɇQ"<שtea+F,~WS-=[5+_- &ѫ ЉL×KC^Șz$q4)Bu~D~pQ#l>~.~*CBUM#)m߭! ?%64`zv5[)^CHCZͶf|GYx]z0gB׮Z%@3GɊ } wKx}ahMMW|CHP;MU4bMЄo{'(nM;6hե>u:ZK8`ͅ=BQAh/{EmY}SwMFinh%q_W }* k{?h1 ~U5\)/,\05i–/#9U}s]MŎ)}L j+wk:M̮HMq_q-4/kUN]i;xމд{ =ؾywcv`(˓VUlY| ;{A gOIryɚȧSb{TqCfҰݣp716,5vñ24 -|T ϥG Ѧxa|3|×(th\}ֺa.`NbU:.eV—Ƌ#,P$3,5^ږGW=i,ĵqv|?A #Sh~tfmOGXHaj#7GBŦtDa& (p\9*JD6lS9){^ѷ^GN cR> ꙶoFKcH}E+1D˖q[Mi+uɖiSv6&Yٷ} mMf nVt{Z6g <-.3e2Kc26$:CClS( F"t=+ M! w^ Wcr/Gx.^gfXzr{D*- hX4,^Wl&>O3Z"%ă˒&65iq>Kh(l;e?a~xYyQG;ap t}[I#/f +z(RpĂPLӝB}DTgqw)[!u&!k^ u1Fdz6uռ$P5[S 20u1#jaYoIIR2֞L':27ah{ f%>RЎMl˩',%w$_u+ Uk }=џCWΒWw>}8o,R{[y t(gҥ59pX^ư?]AHɹVmՔEsFawwF'ĩ]a9WK&Iu,N0z4pU:תbMo…G*m':K4O/)nZX]VJlejlEiuqlNha.5wj{Q^b0- /CҮd_r8K=룟4;5w6#X>&kJ^XyGd=ETit\Yz dD-:gjb'5<@[o-ޮĂjYn"*`xzA3\207lsimǠ|S[ *6t"cujFv0@ӅM]Wj9\5c-L=+0Sml!ğbɗR M  KII![r'`dVAٕ!w /oژNgHHu)j,׭vjoP^K3Rշ70P^985u/409ٹxӪ A4#7jݺtK!5j4\fxb_^wR3>Uԥ F7YE)-'߄_5Oz.ϩCyvo/.Xm4`#ґ,߅ؙ#r^+\iMY5܇MW@XX Mg5`sVRbDu Zνf*$e47,',OqMgܣc('gR?՜~`_{/43SAGBदa=?ɨlM!-L2dxyZ5XISRG RJɹT!"ۍkds2?+%{UՅZh5i7wWx l'Ifx)!ItqRl%O=oRλv 9;S̍ii18xK`~m_Z`;)-G[HCJԊ*ZOX6P-8W"[-eIjxt?< wfc#BS 9v4R_/R?2w)iq^iMDw(Ckjɰ6W q%~ƪ'y51f4@"cCPZAmXj4~]NvpΠn'Xqo`R,N]2tbĩ56%,HRZB)4of_PC>GiʓF PVt3.@P .Y`R.-T>ɗ؝<ձꉠ.~So>pr*X-LVrw+@~#Ll(Ǯ`Qꭝ)bGg!$v#!8L)E*k0A|l/MY)?V']6rX)X){xw3֢+4}9^"۞?h[hMCSs3DG6P$ +G>ب|R j:-w%E}πH#P80Xt y=O52 Αk4͠VV3TȷB/0xT+1X2QomdZ+#!UdOYhG靳8Q3 $$R8ʾ:*rF]}r;Kl{_{"ce/Z0u簿{-g}^CFF_m}}C tNH9.x\-tf奲|ykϞ8o;r!-]1* [Lƀc%gjYeH5~j:dflJnFةPi<̷K/x4``%BI3k4lCğnZLcX#r7UݲYivhKSSvxhgj h­saM20]oy}[^IbdI}:oOs})]OS#vY\@=ghH6nؒU׺EmѶ*3HOGk#&w.`EC@1N-]:M^Yp}]Z Fk9aWh wg4lZȀlàt8Ȋ8ދųT%ZX`3l>ϪRD^0?q[0J_.ugQ:YX+d׭zG vԡ-<ZI5ah]?*㸇 Mrܝtºsy+I=\ p?g^aϕ6`<-v/4C&F `>V.tBSXEG0Pfxgd_]}Cv -&:Fg``09cb:IVx -Տg`4xőlwO*[cyet"Ʒ9ÕLVT;Փ⽳2XK?&~AYZ$N+'}SࡖlM/I ,'K_T/Ҿ[z UB"ݪ לY R1jk.y~Ǹu7B]%)bg 1r 6ز_sӰHp5Gzp1 2@L?Ml>ݮf4{}o ꊏ2zkZHv2"ڦWہ+f5S 6]1ܺT5`):85 8=|3A\PT][oKHf 尯גWRi<>x8_#_6rhu,+>h }d[A֭#R06 C {jzG&%_:߄ŷ 1_ˇ#>}z6:]^%bA{9PbN_]dM}tJKh~VINUy+1|Q;O80zkQ OU3R{ԍA]?B)d< }]j#x+S/bWh#QnW-gdꘃc6z]\gb ,o+,v:wp'ǧӷSP5ƷGkXdz-/*z# E Fj% ;ҾL\k},T~~,H8G .spa%`GUe &\y .JQw142T=9宧+0g/=-ׂ&9z8xqv*cΒn Ѣ/Rք{16Kd$(}eFx}5T|0% ۜZ"ri+4yb.*L*XCv_T5qVjS 6 =z?/G`e1~d)8 WQ967%TBMX6l8[v,BqW.ޢJ-r0{+tGjx$]Εʆ1:&P&՝{3s)s<Z-GIbyu?,h^*P^#+f8f-D0bP6T a[Ph0\%Ϟ[Xp٨HkE[A'=}=+Nܘgf ĸzڬG謦poMql(h U#V pÐX55lM۫ŁO^:KKΒW2:+0 lr$$ٞҶ7uߢ=uj2^U~H#L^@o4lEYa.&#o҆F-a?7^"{[pauwN<9WB>t'h IOPN\5<7Qli^漋0 ',ipWD`u#m_f:XTQ*c_)76ЯUKVĥ}2{ (Ps54ِF^}ZVSu~ڿukGo,|pN&PfNՎ%H`}3ɚWcٕXL6-žkѐ`gFc~j8_dH j *5B^RirFp#H@"/wB[jgc_Mjt#_|W&h(iuM^r3ʥrra Ͽ(7u.Nt?Q6,7 Nе5 w}gIJP @YnȳRSh_Ѫйdι]fzߚkQ%ˠ .tAto'Ea]"C\E ZOBM%ie4!7_{}߅(V "B1a>k`Per . GٿKؾf@RXZ=B4<X3#Femp]LZD3Іh{3ZhxhY?.;-%rdNҲǾ}:GB(r-3G[`CJc$ZwzjO$$oR;]vnm ߓjT1tb+DW&q~w²;VWy/9OZmeT8b]UgJ0mԶ=$FZ#:O⟡~eP=0ա?NQ=0 UŰ$g^&^΂OAmTjamCԊ}t.c;(}MB['N7VIz coAqdhg/7+Hll`Z`Үtg'mvNX!H3(6N^HS8:LC"WCcob3bBS&U\wlX`07 5?UGMzE-?>N7m1 A%7n'帜3yq7ڦ$+歲]tVJ^LF?呪vW.]ΒyIYą 1uٱ7V@S?;!)PJ)eg&aFb{R3-#0k򿂵.ς_SX`ՏU}Ϊ#VҎXԒL#-ݩu&Lb iI}њϔzC] j[+HH&Iޓ|^8|XOꋮUce[:m%]XW]C/[/7ZMn5Ɏ%u NU.ɹ.¡O &}-=;;J+L烜J\z#zJ\KwhŜmNI|M/Gx>|2>ureՅB:}Am{Pʌa55jj8 aC=K+\1OZsx5|!>XGLm;[SLah,5+SPUM@^IoK?z1A`мwy"#M[CF7goE.iE2 >"].U,SQ^PlY5~rI&-P\[OG&G=BfPG,fZNk5f!-KhϨ=7;7jvۯCI*iC2t/Ѝ,)IWiIkAq!߳ XbҝFsH ޣ$ `n<_sw!b}//M}c2Iv# ۀRJ΅ƸLǐ& f]0O->JڒR1H[zq#&"$m)w)S iڅv@Ypˍ ŠF2T:EP,`W~i;Y$wzW7uDzEGҧ[e'=UCRIZav8m'8m&+/\O*AHk~Fr?ZWBاMIJ:m t+x: 4¯{#+$1S9uLm(\E${ <ػ|xG!md&cJixD#tN Gok{w.ILJ|9QM'NҶیB,;1>z9;TXF+h[8^ߕ!לGFFeEzͼ.iY\﹤θ=(NSa*v * L.`~qQΧ78>`dhZWGv=v#ndgAJGZ, *9xrS?Jcuyp=nQt{?_P,Z^( w ͭ:#ugO[`Zi$ᖞ. u$i֖yjaZ8tvhX6Lf{km!gIvhgzp=͵Ѕ k.hl}b|kIX>3#SQwznl꾁Fv }L-~⼋P Aw4_GPx8N'd2p{t)ߋ9Pe.+\Ҍgq). qꋬڊlQ!pogvvjIagZ#oyԴ>I񷟌CT ԫUMݾK*N25l8@?[=[7kCJL} j50C~_~lϨ:O|ci<{>=/?'/mû+]wlUjLڡ <0@k]JgϙGX ":p frG z;}S ԧKwE/[Q{Iua N/܎NjvXGz|/g׮!Ѯ~^hN!C<,'QhYǁقqIƹzp~ad=Af^w+L]ko<Э4&HIwތgM&HIVNt+߃2%)x+}}_Ps gA}Ŕ0n6,LtC\#-#?PS^2zk@=aF4\&vJ@985HF[ ?hdke=y悍b+ls -U>`G0F¼'Nj ڻֱԽU':b%HTMqaQ؅ݏo.xR6lv٧i,žSޖ* Y92,=2n:ft ySn.@wK浕0w;_-O=HzjNTB~[N9:}:_ OǺ~(kxGŽA=203^{wcƇٱUX306#UZ9Ѹ 5ZL,RL}UuFkYTw/kG>/{v}R-/oA 6O#^XCڷhmgcV'&衝ܫp0L.=<P:#Ϣ%|/BsFvj/HGņ,Gp_k՗}A=G>'5ŒiB,GE9l2޹]?# L:Ԁ$n5 jJ¦5\JVE ^}jz~w_{KMaAԩP-/?PÂzPD᪘[g87ar5q*ӈE2;.]uFUs $L=T}([u3-/TpWsP\q%슗κCAq/ P(O6 Јld7a߫w?Y}S.Vʬ,!S{ɭ% r ~?KC T(dBIAoW#]"kCWgoӊ/)nO8(Ko$F!1SVÌfw7nV SWV}u08h - = c\QQ>)[=PY<-eWpm1ؔ4X ڕbY4BF'v$@0Xw\O,Pz;3m}qT(Α03P51TN/gq++=i!>s1 Eչ Tͭڰ%Fgl<|\=" jQeO(6_@ R `,oE10H/V-ejC6ګ|qV~˭tVNر:@DZ'LFOF%B}s{L5Vzl٩bAl%e)^MA] RWGKo Zzp8(ӵ:LL} ch)u洪]"œ>3HٔoЦŃO5Tx vlh/TAr`P[٣;Rr9د->XV.xtt?GNeJW=Y*V؀hA{dVlZZ΍;Bέ窑s?ng_wҀdG9Sh%`z([]EN))5fǩ憚#DT|CiEu=m"[zd8X;RObZT*s}tj93}\Ux%7|8?V __74\$L,<6GЖ`|3G~VEZrXn]6nA9j6`)mGoHmoLҐhՠVs (C(̏.l0JWTuk~WJQ!lhH{c}cԳ C=9+WiP?O Z."8>w*?;'g*C[ܩj9C MqXWRo.uv(S2dnw{ވh\Cc%ϥFFוrm,jJdܮVV{GֿwJZ%5I䛙IDxl=Vj23%kh}x[:V澑뷣7]kjn}0v;BB%^|Q8KdZbs?b ˬiecrGwN5 ^PP+zZ~GՄ뷽WIh)q{EʨU-^a)GUA3SG 'g_F!yD*єǩ4-A7+.%<=iKK!6_v[Jd &W<;B3uY3 ,ECD{?Z*\a|XƋnhXb/ 07 o(A]t uP7ș5yAQI7zްaԊvg5ejLlDK4;/HNdT_NixE1T'TK-Pv~Y3eYu JIXkΰ۰49t^=>^\DUãO Tk?/lxO щ[jY-TwYҢyKvV? F"k%T_P1݅*J@֥PB}8>',{}6AoR{٫2J"->]4,LJHJK/kDf{T;`O|\˭^PԪXj)H~ԛӗ_q8BMQԨ:!:|W"u˕Աx~*Vj8uZ} wĽM ~vPMJmYԸR:|1<cp7ЦpXh{_'c.}"^qg¶=.X)ݏ!#Zwy-NkURjձӂněGk՝vf0fK,&ь|6q%$!BSaFr>uȺԢ=E kȊ6~;ˏ⳻;%5Ƽ)vOJc{ %ůk̛517F >"#CgQUGLJ.(r$H̍/z'1(O1f= VL]ޢPhwV

3"K˔= ^ :HuMk+Ru?#rZ?>ԥ]9v?`1zZ! U.ЭD/$N~k"hD ^ ^SB7|m4ovhծW,R4ViBs +/Kw&CVu~79NOâÃҗL]扖Dc|_LM+uaptdȾ Ud6zSF/ۅu 3v].K* ~J ЩH[kK/ѐ;MB 3$^!2@v`@a Y|vt g0)O 9E~Ϸ%wf do) (RqYK{uJ9e>݇vx#lݏJ8N{4tG.IU <@<Z $WAy㻅 .<|ɹO {㼥Ǖl t:^/ 1" mz۾ĿW@~w@r0) H' s3bhFY?0Z_@D76Ӣ$ker,P(Խ6ÿOzFc2W߃ LbS:'/nEɠ?k*R] kM`%HM3Ku&{Q}υ^F[>k0Sc5Őxʅëg̦dⷼ|*:|m5Q:#ἀOqzpC,jʬuj: 0F7Wb~rMR‏+z‚G@IT*6VXl&֮,]B3D?y/X{ʳ~*gOUwQ!0+߉l6ldzQ6܌pR5Eż>|LI+bﳩ; |à7y!|4/Caw|k0a^i2f6ʒ,6דj|\mҳnDJƕ_ߔ{0,c>G9T^C:M no/;[Z-9x9R:_axo |!6AnJ ZJ|y$TM,]JhwH~Kdl‹5Ӌx9_X%9J%sǹ:˕hQ;1RعLruN2<`C$oy! Ik @ sD-b+Y/|uӹcծW8}Š=Ԇ Π~"񉠶/)2U /;&a%Ρh3AnӨd/NEa;*z[+]t:KHql{9QnXE(mio`؍_eÕX 81l:@S8\U\}j_|$lYE+/j| JȻ7sLέ0)xoN_7K]ԓ<~Q wr2 +wq95K8 RO½OCUOF\m}‡21uG̀:eA]K[ػ1$sd?IkGjud3;ݎKZs6CrpL=&+ҏ[")TS2^Owѵ'5yy5g`_l6۞/ajZI1-oke1" I{ثfֻ#[jC=Oj{%M{q ѱ$VNNn1Oiޢt) ptx~hD QI }Wn#肿\ݩݟT\Uz3⾭wCVƾ3K6lL9|Ϥ dQe?)(wo1)=99Ƈע]091?A#\ւuJ|w%v*}ү%[{[ jnhe80"`WJgPcFP'u΅0vchYs닁˻Rx]^Ū^<`Ыi޼줫}KL0h*z(WŸѓzY? Y/;}l kIgeiM]ʆI<iR_ƕ/rS"spn+ 5r) :?:{kN~o7j%EO:b}\aոwi&vɳzux%8Lߎ{u~OXɤ4 F֑CgvM\Щ#-Ɍyov3OcW132f9AKR UHDFGTJ~/Dq?%/l,km!:g>͟\ y:G oAkuѡW'Vk: [C|Gp[i>͂*q3q 5[JP'*L fqWegތ64!h$ 5Ye;2Q?tNM/OZ{`)"H|^c5TyW>ˇOj҅vqھ>MVZeHh'd#ڑ 3o$HcW`ɇ|dB>1ݝ\G̾CK..v/XP;PD9خM+-m2h"3>`|Hggs:CtޠIg`mM7s4ԆtGSrۦo `z\ٍ#(`b`o|ƤJ:׸"53SLI|O\nuɆާHԒ\Ki!"-h˪Nq㵧.xMK]Dk۫ ƙ f:G Q !~K@EQi!).+Tpx$4!.O{$Jf,pV6>-I,bPv7OkylHdtPM]ȅnǪg &$0P_dxS5/۫nlyx?uECev_Jf}k9!υ0cԴ<_`=#oL_zd&"W!R\ &"|4|j158 G0я  ;sQ}ai+͇׌E_4!sj繰qPX5*}n-l[.ʐdT+Y?LiX ;8XMSCZ܏GE옖_IAb> [bUғɍIa,wvx3Dvmw եP됀)"Gb'1xg69=AmȐm2m0J Ò^*颺Ӱߎ!vPz#`Pt\ jK}0>lJNO2EVÄgWk&RɗCVMֵVp5.1~b3*>Y=WˣJ`?d:9F- E3ܡ]bՑΈf!6{^w/@gֲjN{?ITJZpC)p[NҼD:b,|-cmTgQ|ғLπ(DSi7ٴIs%9RE}ݕGPK=^tء-mwM|gUw(j%[ca. tWQI׷\uC7=%E3OI=hOt.yS)9(f&S}5F2o}qڴ~xާJrkiM:erk?/E٩' X%ۭ{Þq.ֶ:#끌O2d4D?wH!& ;Am5CX|EAm%d3ީZ\h7v]Iv &}׊~(ўAĠ|FWKqL<'I*AybTSa4_6-r82#ْź j7` Rwʗ%-J0"KK| `kF}_P"mNݝ[A Z+C׎ig[%j@ϴŃkud׻@ eg&SH  ǝKNoSϕ'J^8 ;t:Od29*oʐkR7Ǽi9~jіȠޖ7:"ޔ8-2UCK>"]jх͞ |>X\Det 74Z_ F_u)~t ORE>\jtFBQGÏA=~X( ia_Yv#KiLp]9R!S6`|I/srnQ=\ZMJIOJ.eJ*qhTpyYλ }`\u)ݻ!2DF{).+S[ᚴwgQ>vq] ;zgýq2Z{["J_PO9 |q&j'_!;VfNIS1+3pjlq\Su},&]+<9v &0O \eAk֧3RUj,1uи_10Thꡬ uEn 'M{7]DA}ʭLtXL⪋`q2:nP3lzp6U̕)sP 邕-=|5 1YF';%= l6Bsvrxqܬ0_Z^r6g"I7ڎH}KF+_@9,`qz>a52WgGܝicѕlH۲X35TK|UWyOVgV_@T4/WĜ:UƮh^o׿Tñ ?NM։7" 4Y1ugɥͼKRPy)Q֭%\.q$1X3% u{l\S6DPJW&@S¼# ֣j&7 1?뇈wTtm60pcC!WЀ# Ӗ2ЛQґU%OK)84 jV:gű5:K=*}F*WA݆P4b^ +,%_ mal \)Q S#LzuՍn@x*@LA}8jk)HԖrD0#ט]ߢ#k l_~gi`rn6Sڡ5ʊgfD"~LEZk > U_P_un4I޵r `X~! g1DNo1S4QxrCh1VO8 s cM]f_T`KA\ِtt2kFF-#.YcvGcH71S۱ }u&@ 4"\'dAiy/X'QC5j8,(w%sSAmxO20x-/SdS{k`,9UXc|`Y2Jgd-w.(a)V 1Hs),UfжXf_?d&~Y>^~}j'{4GNR 葜B-SKZ'}e+MXֳ($ZTBcMbo gxtW50ԡ}x/ ZHs5E([|LaoT43'L =³MC~!¦/>9c97I ɬB~},=zh?vq>|ޛf9cҍ5o` eQOמ'Ŧ VnqڰL]LIAr5Rz{ ;SޡAm2A;,"EjUc7u?n N]C<ÏUvbڋqл.2'kF vžݘ#~K 83+R]Ix]۪hyR}gB38ۘڑqFn ]𸴠0So :܊UFxQFםXR'si}2Wi{žI,;gdxjԻBe&|F"g;1Y{O$yz jRԔAPF$}5KWhGýV(W+Q ~ իg@Ezq^vɑJ\BYͻ#z+J?u@yesM,ǫTuW:^&&̙z&AJH7ao"GK^;MVMKR'G)S-XXeNq׺=WeV\WG#O܏!s-G[&—lJ[Ȕ ΐb)p[duVaU žJ_|ݏ}U5/ e`GJ8}(#3 1l+ސGM-YewkQbH$~6F.ɔm,t{ƗYRe7Vj+}9]g۰Hbt9B,7AFɞ OlQ ~qˉBwͩ8-/whӈS㙂=L]JgFXPyad()QJ,v)TǠk bRd575Ut2$f}"/2VWݞfJ5V1 A>}CxSxkK^wUbN_GҶLOӥ J,Va0s8a({uĦ"ާnʷ4uߥkeYu?Y zSKov7j@C5&Z~B_ TK.^-v31 e2_l( g u!A]7jn}=%V7晢Dv <9!.JԝE`S }J]Cۀ&7]*km97u ,KsS#y:q=GXioVDxIIkmGSz6whԚ>jV1i iwD~_lLFjnԢ:za qbPuJҟ+Ѕ |j055Kàzgѵ] ]fe$~vKr.BEAm5b ׃;Zbu)?ܙ^Ƃů_l h dy`ɐֹ*?̡5;1J͗[?jLC^-\u'ҏ=5ߞi?D'Wۗ[cco~T] w쫴Pٻ649:e}wFΈEGIcnM ֋cg堦.rWW[tc Yz4Js`Ϊ2q@JVɹrlV $߄,}XA_*qAl wӤǼ΅ lV^jކY\T]}_xivbW-xCxS'g꾒Ř!A= ;-PNIgFG ټiE,bMa3b O)D&*!g4\mf缆\<VrSM-QgGiRWK,;Y:j+ӃuA>UlCi='ר6vQ7g B}ҟPJ ւkW>vRh*'^Ԙ+-7fJ-;&Ҿeߒ6.ub(aHX7pV-ԯYPis#,*U-YK!{r>"s(N [zX3In ]oUM 7M)W51H]qW*-UW{2嚖u (=25(hqBshܮK{"J!mh,Dor3:bY*cvEQ݉yk&yǹ4+ϼ}S/.]}2V-iGP'jEs E e(y5%e|읤̇%|@jiE /5-mr^uzTTK+(sCɠOqjA VǧpO C:1>82̔';.on͸wvi[-GXD\Aʁt$u}5bN+m-}ayT/ݏD4NKJp=Uxe ~6GR-y+p<2$B#应 j3tXrzJo?Szps}ϕ.z-HWb\ V8LL穤C|l 7SyhܶkU0J,ca4Kډ /w0.ᳫko#`~U豽6SPz%_k@ eDb.4Ak|S\0I0rdWX hfú z]][7L l2=wӢ؍N񽜡)kMjFPK B֐<>c}1(_!dv 喈+B{obWy\2eٳ$J=.r4` H~7Wv5[+Xc'kEaxxT`n?1{=aQpSqVc6J1U{xoހɤ.kUdXo8 HNu],w;=H4De.u} {Oos5:|zMn;6vhqݣJsQZ;)SUYCUz2,tks)YsZi-v7Kh^1$_rP]s/9+ೣ:|P>x`l~vvVDs282S fo{r߶0 ~:0)1ܭd(E/7oJAл(CxS7=^\LgP2IbeE\u\t/VHa}2ZO0>Է٧rx3HAMLf(uy;Pi#6[ Am?Ƌk$s:zm㳏ڡ}ϥgT~'wW=P.D߇MH궏:<m-M_{^H;ro= ]m@~R;Աj-d7muCi1Pw~ mP~/'%]9 Wdt`Ef`\2> k׏8V0)a=F8D&,+Dà%`EcPwK~3Tv揓Gg 꾿Yz}k}֗. mvL&q+I"|17Ѝ kh78m1tk{RQX\@Uqzؿ[ʳ~Aع>*)[, I%0OrX>ص{Pcdhcp(G!'=/a?:G F3\}ݽc(+!Yw$cu"v,w4?VPP}{u}gMl#mD,"&U>xSaˠb>ubD”r!OLZT˝B@w?]kPڛwעmszP;:cm 쥆 Ρ5nu>}L+M?"?7 A~wQFᮭ2oZ%@ďݒ|]ȹyAg=bX[ R><4/:A4~X:8 ;Wk_VnsC\xsU@mUvH hWH%pI|ޮ_>EyWEkg\:R6>$ps*bѺ^髱<6( ܪջ #;Mtz X]1逌dX,|G ݃JxG8zW~c$ת._DԭY-yr^]ڡPg;A}{B{~Vt([͟.s)P8n +Ŗn z#.-ŧ z?HHi?ո?FW>k/9+xJ8{u}vwFFxV{N6DWOnhb'ޥF{Y!3^BU Ef 9b`| aHp󃾏21&upBq:Z} #6>T&xu0Zk,ZJ6+:IFwFTwj/ZzseUuyrIm2P! `sm(\+>Vgc_uk^ڈ5ޑ7{lY xC:vx^<00cǍu{Wj(Ba@80knDa899zb5E+LP:zZ#{4&g[5^/$\ڰ|{zTi=~DFIRS00 21ΖS!rVsDmILm,c{ըTCJz3KT\ٝM6`4Dh 芶Dݚ7f_hy=R+\M iCe<0:݅WBhG^ /WU"h&Y̩}6/c?GUcv+iLWB\q\Ԋà$$oP5&A;m\bX+چŤUH vqҮic5G$gUtf 2$%'HZXD_oV k 4becO r +Mi6o4%͝l )݅3;PimM>h׻svBb|hE+R(5KV F2¡v5 "O8Ԁ9L=Jؤd6Q(68Zo ֹhVU7= 26t=\U@2)|~ <"`q_EEd֦{t%n6_k:U j50@9M~Q8bތ-_81Lj$k`Qc*R& [#DI=n"zw-B$z' ,;$-\LMmsaqXXewLcWgV?,MOɱFl`뤳!-=׃Y+W3 `X'>)]UCBxOg,p}F*K,'4$->.1ᡭ`{{wQ"8 c -h=A-Հk1L\ ]DHJXN*^C?*Cjg9έz3ɉ"HlO05i*jj4݋ugdg%}rϪ l bCҲZ g| -&҅>:&ɍ+;0!< R3tu?i =- @۔A3z%3 >iu`+rGk";z+)'yFXö0ѢݒM`u࢑[_i] Riҋf;ߝ!h@i Z' MXat҈k{T6_hK[{zL.R)q2wZ-I*ݥ_SV/#o">H{mSh ~RJr.Tu7{|A}/G,Ȭ=i\,gNW٩ p־PC P Q0f y:hZKĻmWᮭd&o])GZeu&eR ִkK9-fmXyṼ= }аޒB܊4D<52`I=yѡwph1$?ZnnhzkS+ 5+?Azpk ʦ%_=>"sd_Oi|t(~f#zAA&+q7"ȌǥPlO]]*YJґ& s-q!6ydž~rRjj^J| qU7V~>9^6FV1AG254gkJFCOBј%ETFvU#RͩI $)pf,{zԫtէMNi [[_+Q-m5||-C]c6;Ć H~ME!NugLi-וM{H˧) CQ~ 8!K] YkXEOKАDo+tq\2* AL-cI~*paRQ<#pfR1C? E}xlN7_P+!IKq0"n)#8X[^* K*`PC6 ]}1GWYEAL(&9 6UlJu$6M;KE<-9Y9MKpy:5UǶ1Tui.Љ0XdH=֤#G3)?.a[-{MXKGn%#2k.OUuߪFMb-Vӄt0na^]X}W3$>CW\R*` %)rj58$"KJ&%ԏ/JʛE1P0CjoGH]qVX_( Ί*tZ-eb,Mǘ] 4ʕd٥zYfQ23*A񤟖y#~%풤wgC Րӑxu#1ȳ=pM=NШ,Ǯd"o_,VM3 W| 8+Dlo{Qس#IR$HMtw֩ꉡ{ǟ̵d>N]-% `ʱ,t}HB19uE27_ãJw:M1Bn(Sq%k~ߘ}|ͽ:vE֛li @)a`Zg2&*OP(Iy˕2&%62:\͂[ =]]e"w A,˝ծ+K9WȅK³dX\Bf,}3>Pa>^5l&}s·yO Xt=w}Limo%2XTFoBsnaCO̝aA:ЈՃ ͩL/>>Xҕ`49 '0J":%–vSO׃ڠ>~25|F`bYCRV'PghFkܡ^#=9/5P"6Byn[:a(or|qL'yh9u?d&a#P ^]G8L5Sz 'o)bmWF~I'Q]ff]Vr(r ȴnZI`ҧմCrfɠhm'k+&vp m >I(dP14IXpfUCb*Y.nm&s2%nBp{`!rcFI2O|n>EtE*h|jgxF;;KR,('龇7lhn:Ζ69G1'fq̟ j3떭@l'?ח ._^!ұ]IxTw@mB۬~]T)uI MuRi`?& i;!lh=|pt ǛLɟS6C+~[m{8\R"S,wJڍHtk: O^2N50LLs[`ηWj_"0#,9ej(WU7c;0͸N_&eN"%,:ý0u,2>Vs[=~h59 ="cKZr*m&;t8W~#VA<Inug0ʛvq"'rjk;-ڌBr ]G+rE\Ѧ {kឞ8&ou 1\E\;6r.t;.C_@a$NK=O54Ӑ"|A`IA}nH2&,NΟV i@cx%-T>LjyO ~}#9UWN7V=S`qB n; 괈QÞ7dv2-!dQx! ;MXpK[ic 1S,]?T(9,W[DK+ŀV\琧sb{Xw$mINՓ)%I[ )RiQ~)ݓ)i&yS?W-/Pڒ(V/E`Ȭ6E,p-9ꃔ%-2K3E&B < S뽗֗Em[A]y"K/DN4[T>?^񌀲vS+|[bWU{ice z (,g3'T5:kVL2]b27P Di).</aZ%d;w]4ī.&q6$f4?7$RX< P(inkHAp?nt,A/~@Ы'잸ڛ<~uh=5UlH7YS'on~워K-A  w æ@in8},Vvu'o!n}n-$gK[=`sern=T_scO1>.zz֜|XOJԻ1[-)m1iˈζ$ T(&_zYzP'wxEPbj êFS@B3KEw/Vr.[_`)zUY'ڀV%eqYO>C;+s[vbzxK2nW`hW0>UhfmEu`#7j>;Nޒ*~m@/#4LmUf趓Z&}1Ҿ_ʮz{,iH ΑHte3g9>!lWl/LG3ZżqLM8 f>r%y&vˣRӢU:FKo ؗ[zSz7pꍖ^Pu oQ 7.CCa#v?2uKfVfw{cjGgDLn紦_ZoAPLc"^{OVSwB-ZWb!xcgF ю*V 'JzV.SeA}?vK{i,poZ%VfXNX΋zri|ȭbZhIc-U-ii/)kj;q@]q\ZN z$[GvRf!(GMАXǛYf~ǧ k=nK, k@EV5F[ticCiw8 $ɠE" e Tc*Ϟa@סAt#lNŁ9ߡ#zmJȘj |ac%~tOkP_7Kzh%`%sU1B3yȹ($N|t~XrѬy֡p/_9/Ƣ u5G߂6ΧponIDեC~@Mqyw/#5ֱhT1ũwpbW&_n*``RПGzbr=4B=#>$>7on1rhdsŠ/<>Bo.L|܇W@<ܬ4%/"{UE!?i/`ZES98r])9h{߬ g^-ړoWUoeXR0d;Ƌsl/ CW^Zi\}S6'RR(k`Z!0B2N,?D2y՚ Jo8}eEl2Wv{DNƙ5m4TnII^zTFpXBkgj24a'Ƀ<-i]smTa\y;\GS]4RK( w^Dm/><0u]os+rZӒqH5 <4km5{V=vkFÃzOPo[؇x1ޱ0m9BbKYZVH 4˹R?\h;jYuR[XqGA5L*hVЃald"mCYq8ƝB3>82H2v V55IʮLcWTmX{n1%uz\WXԹws% XZF[cK}$u*-Y#T~11_a0yhPtr`M?Upd,a#L9+?/m(*^C0w~quuט}Ͳɽj5GZd|gr/ژJ@$˼LjWΩ(}2&QwsmUM2SúLx-]t|}'AkKl"'@m_v>r rO8#0v)tZ\{Y1~34]GR⡖⟁sY㫳H /hҥNe]*0bOKԆBN=X wLK5f5>(3sHxm$%.};ϠRnK"R"V] ֙Lugi.IȃçzFʕb =2|H-nsg܅NqwUܧ+i ߅{}.B=4t (T5 ]YX9d{q5՝3=BP2?.ğܷ=yE/W2v%|Kr0(MHafE`suټ|+G@iVx'0KjzDt Z=@pG)W5~Q8eG#~z]HN.4ЍӒ9Z\cqlq4b.)Ԉ+mSù1qUeyG~?;|d:{#,>!-ea)*nd_#0=ndw O>b.wcYXБ_+?_'M%穓E(p*vK5_xMY7A$yL^}f'DٽopZW7ivԱ:JM W%)x Amʨ`{pu{K pl`7M8S^bvc5dW{h;ެ ԣr0w0YkIseVjtL.o^ N.p:Ԋ2s0ea(ܞP ;|W7A_|j[_7t[ҖOw.\1Guԧd[`\А WQ:]h$ϭ.s廜w\KONG(Fs]/6)xFv)EF7TrY8+yu6= ')sa7N0.NzInfIYD㺷4jB0 dn•4;&>?[:g2y `MԐ SZm$m{ʅXT~ WT+< ?̝d Ye۠Zg',,2_YQW:a &֞}܆L FpёxȎ}z npy,NϻNK  ā\tGg٧n!Nw}fFe`#W*$Y,^H.qNxazoʺc&L7!$cغλ}!s}110@o3;ǧFwAiCt "'029CL7SHb@ a3]GPu(zH.4Ec)xp.v""iW:+û+SJ.'hewIXkh}0%B>~aUVAArcԻX/qZ`\W=9{tSZz4 U90m9V Y(Z\i=/y!-Og~|ԇ)'ZtՠtыDGe~fӺt&id W6*j(  ?O]]{>g{_ +I&a' aXfYXksA4`tWٌB V}eU)Ѡp4|)϶ Yy M~7H ;RKSr&d{ XuEz~$1f2A9tCEV`/{w=/ ZtV7#-رpTEL-K{Sd[ӤЮr+l/͐@C^}*=ҥڮ#W5Z;iwqٴ3twJQ>Mm+0"j K6R2m֯FS/1S/oW`/5E^c_ #n@l=(#/w}h:US,o~m8CY]Wz/|:X`EČT뾙ARןn1Ci?r{V;sNtZ> T`g ?UƐVc(Hngr8Q:so Ŗ'ŊF+Ea\l`dGFa$7v&rȌ]'JN]aƾDžb)e,7kmϮ`LD1dy)rnWqƀ1Q<%.f8>@ץPn)$P+Z]6QOڱirax(J;ʟrNXjŃ5`bUEAi*HC8=LDW# ^1TkZ YbypE}0ˆËBq0C=^-KlsUm lVᜩߥisz5^9A U}G(waKvH j4iIvQUE;{dSj ?R@)IIYcKW:֤P/|[좖*Ϧ}"Үֿ1?cٛ!ya-Ldf2_Sp;'@_uj w@QmaPY;y ̩sD!KUUwqA VZhErc-#ɷ);ȫhX{4h=/m?Uk{PVڠ"9}@gWvC+jd~z{dw<@_?KieH,#8 L}AxB-2s+no~w`:S7J,CpQPʈ,Kt;-? NjیJ]Jߞ ?P~2<9C aw!P-&KRK[V~t g-!͛WX25UqKq@D5GU!2xgNM/ǃO5F4K:mB0`N7Ԯ?DLFOq(tʟHגi͐LjeZ/S@JvRUyu+tG)‚6xB+L XjsPjZkd Eȅ\txyF.vQX[t ?dun,D~Ro=oIDCđ+lLhjg1oI2l?Xގb9[Sm&<(ED.O ZÍ|1Z{MW')4fО'#Rl]VO!}J>B]{Tvf .3>RѢE*ezZ3^J-a ~s F6;Sp?w.chF)lRAS4r`Iroli_J_# I"l 1~Rta_}WmUzvlP_7Z}8ɲ$Y:lDy>IT< {j >oR1 ۙ.Dx y'Q4E9]w|m+3Vͪ^^X+[ѭ8h#T>+K/>\ClLIf=O}%y~0=M[ܳX=猯0ϖJ$>Iwz,_9nGnJC: @NȚ({B5K$,=N;9|J}AV+:YvRصYps/I>.ä +_4#,XΈsHq7V|ń3&5S.<7Fju MzKH|JJߠdj[i~ɴV wYu6j~ܝ'^p2NfQK]4NRzԁD351zl9Qap[qTA*=@ uXsNfSvUuUWaPߤlcj   X"7иvq]tؔy[Nvw,@,*XǮIJm Q;2H5a 2m"m˖5VHY&\_[-+HpaBKA)A2KB3Pji|w `>M;\Wf5%0\ŲXdؘxTv%H> )~LRS.*LeG82~s 5Dqg*h7?~KwjeHZ,݈kx}_&~~Pűw0϶&'xѵU21F?5qT*Mti, ^*ϗveH>#7SG{Io=w+)S}Tz/7w)AZ7KYirn-ݝz"ɶ805L0V# lu.wo'}UgdC͓<@[° ]KQQЅӈuO&/u'xG˭n)b_h;O?:%HE^gObjX$c1br_*߼Ff)ۭ 7C-8=)S?fP;_䋄MA :א1brLLOI6e NW+=% (-7W".3 Jaox ޺ ~ʑr)ɛ9υF߮"8?]gˁE?S7 uZ4epIGRb `2;]4C|lVX3$h|ܟ"ϳU~|!$gqHc2S=.̧Ԟ:0%5L`2mAOgH')Z2)_N2PנoTE8j_u5jWH_P҃ -FZ;ikqwW%raar.Y"&z9" [LjyB3vثA{zސf'jďK2ROQϸɽjvDZO6ltrK\+y?"*K t{*Gk2\'OvıκjRYǣ9*=5v?  a Ꙫ5[g|YA}\?N e2Rt~r1OBP 8 U4&Giތa-)i ¬êVg*gZԳP-DOLL>zh 4*-bԉt.jcw޹fq Lxdi˖sbh>X+OK۽FP(W# \r#\q!q{|LۺeHXQP䚼nUPۑ#jon"HذnÙV->W+rnwT;1@UuJ h }YεGzA}2?*AݮhБ ='HsuO EhO ' řHpVX rMVO8L9ճ4}!NUdֈt5gcA(6@ՔmD&Zjow'kɧ[" 6! \=7V64qE n>TyScſGe[HA}LBA| ja-HވZIqD,f0dWA]Aւ-Ak%[bҕQ%y:CL) aO.޴.CYx9~|/"ONX|NYb׼֣s~͔N?7߽6v{-6s STB,DMS[AJ *Z+Dң?rL]SC þK-ヘ7(i* matMmjFʺht*]ƋvpBzdz z19fGQ{S-">\dim7!$;_[4z)lભqo:1@Ȳa'=:_P&1ViXMA@ɺjet>c՚ L W()SPP7|Ykeҟ'G<"B-~ؽI~~Yι+'Ъ|\K[ql_Ej,5ClK=_sqYU(v[ 0!`&BB&F|Kuo{|Oa% ~n"!A@sg:O\ObY޻&;=0<09?1q-D*QTۑQyGv1js{-#Lf {itIEV*!N}%[zIRDBNq,A,3wѫiw#rQ^a'-QO{ѿzCWL7X}F0Z'yWW܎.aTֵXXn|47^ӯE jjۅvwvBiXnJ$Nw`QLJ/ =0BfvW?*rEG$P#6,4K%kJYub0#f畁ɣvL+2q`7M CZ=mZ wbҭkEoV >,UIw=)TsJ˵ |hzw1_ch9MlYi!ltM[p1yF;5&P 죭rߘ|cShi>tq6Jb:(zZj ْ+mu%ǵ$n/+y0w"@j΀b~i&: gk}Cgh)h1uK"tnG؝>}ol}xTQ"=V&i\ϴ",PXL֍}=P]F`z57O")GOf5Z粼%iww=n )#/5|Svdfc?GU@]-5?goSi]*Ĉ1 Fuޜl8M{qXͤ窄@-S5cO5HY58*۩vQ iw%7*QfjݙuT# ƎTFi)1*.(GFWz|otlɍ8}r75mrViA!Md 7o&brBiEþm1\1uɷ}H:eZם& h1< w:#Xyꋢ`A`B(^kʇUםBW댣(0uE=b=9r&MBWS4ZarسsAѦx}_i bS_(峪{y81j:AN$e{FClIxpUۓ~YʃДrj%nQ~`M11UK?cMEĈô[2٠n̩%qovNyud bg6[a4&䭚Hݶ)r(ki˽pr1l=fV>Jjֿcvk4B4dpUO8΋v`= Y2|D2Ĉm~RI '*MN /K5Zs@xWXK W!S 2o}pW4]4(-X+7"+Ph ?Ez%N{ "xǒ "R#.9KR V)k٨I8VY+cSok̳ }xjiX*yb1 ϒf e=lnb,'@2N^ݓi((B&sΣDH'8hg R1eOͭ.W|RkpP޸=k:$hO-葳T cNxrؾ a0QU̶]VƎ X`V2O91cÃђ;Jz0W77^ cE PPhx7q6{lKdc&ǒGAy98K$ ȓsf{ꒁlKQ-RjX,Ay!%:bNр(Zs{Jڔ# ۂS k  ˞_E?ZSWWy"w8Ԅ *b<#] 6TlfR/=x| yؾ0UdPK-b?ܟ+E|%䰈͘@ӲsI*a{nYaQ]K'--`m/N?هދh0ab"Fۼ)GL,gtL`\WWhCJzĈ2{9F1Eه{>aqMCSq܃6[ `(,Gc ۂ;\KKHlհ"SV"~MiBO|vEa ^%5Mqi +<5t$~NTo2Xٛu+7FQ#?0\,E fY$>ȝˢ}c(aLل}vM$|߉lK[NeX;[6x SIăŀN`䩘 \޹<:nVML?rm,a&+ǡDqR#aGG˶sFJpƁ_I> |'%0ia@c{8af0rQ1 !:Sil*©Mp9f3,v1e%BAQ<#nux{mC78["s?U2Q8S,QF瑯`PGi%{(VdLL>#7w2bٰ"~zA$W|| 8F%v"c.#`DpƓɻL`@qO!EL0{9zQhvF2xʵ/)io{NĪ&nkCspWf/޽ȝ9ILs/6a_\QݽL捫.֩tUűY'8bk-9'9(jnJ6&$œ]B.ꑟԣwE]=N=uMNPCl3b.3I~ O5x۵-3 J<-c e>:vy-C;;0QZ={^mˢv˸L~.g;7'}qms.B iADacJS=Rܩӻe*A],ԙ~_WI+g u ]#"{f#*CՂ֫6#ﺰ 48:&|Y%r};S5n61^P w.8j4F"`ۡx蠮+Pp:j3n|7e_JKݒoʾ"'zOf27uUdվw&lQa:#ev[~!9½,oWGK"5%lƑ7Nرa|tvg .6kp]y#-Br'C8-Vv2>4vڅ}Ңf6 {#-(MF꺫e6S38-{y|VV1iL 1ZrZ@cT> iK3% `_ , QEQ˭ޒd'fMs+[_ؽFt.kEU2i5m$vFu]L:p TԍDؓ͡?pX:]SlNh< *Fl ?N>ػEΈ|F:'IF!cCb፤bROC9b׸uo6$,Y`$=o!q#՚=j f6@t aaͼ߻'fD|UiӾMcDg>|nH ="ر!+C|Qmr@aX= t;.ݡʜ2\a;?c*AŴj%gU#_Ֆ1vĊImFjPG_k~D{|hcQ}'Ej)la{+R~}>{kXW/8;k+wѡ/xU7+8o>{չ_'Y*PyO˼_=WsSE+g\ŀ8*Aa}G\ rtpr}_"t^Ծ%a;"{ x<䃀[Sz_f7תS-@pN{ @mr֊vapCyFzpՋ]~Z>f+Üq"xmv`m H1圅+6FjtB n :|K'N?J8b^=,0e%ߞuaDbfwqhFK wpxtQzrV[ kJrE%pqV*X6JF0Л]{Q62+R9eL"⋨8̀H wz2|ECkGz 0'$#VG;%\P{ff =#}*ާ>!*^꺃nJN}v>5gH8VUOndԐ j5[ZCD+5_j۩6fMy{o9Ai0H<^ X߳WES'_E7oCY9{bCCw (x!jc=²0J*ݺlsSmЎΎDVUbAU &oЯ]d+&cpdl ۻ $E3X? 6og ),3O yFRmBkj/h]Ec%rۆkcBmrGp> Fd>J^xw8W>R_5?awCL[2Ar0d{juC1iT|oKtd[WCplxp8-<؇5|-&QaA _c\  @zx;qi DhFx'ܴ2F͓J=$Ԛ>I?ex}R,$pDc.m[[  _8а!D gF0DM<}| g,wbםlv.McƱ]uѠ$ɀ'kTx5i}{W٧J յcR8Fy\cj|~`\_ :h/͊FrdI+ϛ{Ϯň>vOkԎ_½Mwr 55Q>yw,k5 8/קVt8Ɨ;b;)ҁ (ǯω(lDñX,hCŬZca`P+#9\ܩm̢Vұe|Ӵ)7_0x^קzޯ<-9aWD?69o 4!mQ+orT!J)w gh%P[g P#2@mS3&bOZqoQpbrpj\q 5vZC3+?TfZHSY5AU{q"MR`IM6HTJc^DHZ!4< ?5.:*'.q'wVqNYCac2$؃sS'l*B a84^!LzN jΔ"~)J gq1Rcp1ϖHaJn׾GR {i~=#l!jJsBL+q盃g'-Ui;&OuP“iI8־\K/ _[`,gTvcGVޞVS#zyEnKl#<幖}ꮄgQxZ/Rk$V\F߈)pҼAE=nw*iW#R))O\`WouyɕQKբb2ɚԨsٱ{ ǽ/QgxY ='% F2/6Z$9XLMkf)YzM=]j£p6JRs Vd˧}pﯗ0õ=t سz3<&i5@m`"yMԽyOi,B{h!yʍXPS7)طC9w`zpTCI-a&L]l.p7GGI(% 1|)GH=G)R:^aE,3Uh$%OTR鞪b]H9r%ɰO+(tpdUi 7LKd>.ɔO]B WJ"NAග<)/PQ/,o`6{ ;4/ncb!PϏ֞8MbYd>Aww27^gd5J3oI>1:nѥоB$( :S̻D67וj;d{RPg) cp6HhdVXk'AwetɶYd߲֑12D?noD? 3B4$yΣC^1WxN5F95ba[#Ŏ`HV%1c.0NUʶ>'V=HOG5iCSi\qJ90F}xTWΗ(:ye\VOvEc*n(4@XR+s%`l2m-Sd|Q9v& 'U߳ c*#C &;Q>[)@=@Q;A]y'^"i[%@w;S*+vIJ{ ͦ `V/b+V+]ZP~=$y-x&=Ê{F] QF W'd(ͫCNPtu5גXO[\.T%=Y Zz`p& IX "9 _;L)gqg`N^5<_|F0_8w7"9;,ĵEoX!^}U:KI%%' !6)xF϶vSpNik!'d]jjĞdPdIm5*UsMJVO'?A 0kwP%s7lV>Z!؋;6 Oq1nP &ᠶOL#{r-)s3%{WH/~FgؑX?3Joo_s h{u[mah>^*Qh':]qQH?ٱ`QY.vTNFFp;P%-p)P @㮮ә_Z*_1 ˩ܓEoc+Q$*mcȻ2㌒kk#/P#!?zB ; gƸiBfr\z-R(%pdPxk(7!~s]7uS h %܂ocr,-} SxF-7qaѧH=7yTVGϵ0.|bg#l|sz$ҾH}Bc/'Z=PV4|.nDTyO'5Qov< TTy)1CDA҂b GBi 6QT?{-ն%NmOL.dh_yj՗T#{ˎ7}$Q+W–'o69GPuHSA];EX@=$ {1?N=i&ni_7p'R"P栾}H?:(l*8ޭdGq$< Ωb\lXW| C9qFz84qa1|+7 ^o ) i|}IXԣ 5!NC&Иڜ@4fzv;>Ps8FCJ7AoݢU@5ّϒ{~@ @O5m>S@,ԾDv6$fc>S_bTl{Uڂ{!9=s@:HTUO&`WE6Pƃ26,P+m}( h5ҪF89Dn'/9T{VzO>Pdˈ!+g[9=Pn.:v(ԭ.VGK0ԫpnfưҜg4k5Zߪ`0. G(Tx Sp(i85b4=2} tUq"{_\<5_,10߫OR/j^P.X$8 "P4g'<ǡ) ЅEIx0oNq{ ES*uCtS?PMUR@}DxA뽛e3\v=-5dJS:+|PJ|Ju@=Nj%Y{DjNVU^K ah)lgf'=SSz^Zǧ͞vv'#E4a_XIpLM*eۧj`Ďe-K?9Y)'D x;>Xa>#^j5񿫭n+QT ǥlsp62k7Fz* ֐wbRoWi iT:giuZ:*99Qg cp/ڈ+Sr59N+$'S?Ql; Uv">T4{/8AOPү%P2D8CilMnJs _ u$xWL=N?TlYV6p"uN/IR2Pg663//[!lrh_Sn1 H`͗-E!oV?5S96ݹto/шsY|#5wKŽ!X#۠yUe~3u˫o GI(TH#8۫-S7ulz6&(82s+SE(Qk1'&KASGD AR!=7,օ%85&E%VQU?AU3G&?ɶ,R=1~%}&dűs܍HIMs_Nr6N𜦄r-Jg)GLb%jݘ'w~Qj㊢O{#1N >TUG};pCN֬RVV7Q5KV!7OʽsB=W}&b@Tf,7?*3܆>f?`̑/[JJG@S@nrE)1=@7_Rr}#%NX-D?L{GsDwܶ7S@bU-^^]ӉU3 حuwy#| KYۡ]_ՏNgwNڿ177,8׫M\Z'_.1R@EN~q G{wkq9.#&9X"$g7qT>[Ksa>+1翓TV{2b㪊WoKUf˔e&PֹBnȫb()͕^]Y/dўYAPG9Z8Ϳ[Kc{j夝c 6VL{T1>IqRy48h1R< J=r-"PZ5Vq%Ò@q^1hh/ uI/a+'[WfN&5܇Q$iԧjǝ"&|Wl'rELh#bm!mﴛpS75x\j)e P8[Ob&cǦ{GqTdѡNL8+V0nQn{vMsE(ťsMD(p|9REWWWQ/3O,eTV{b[KӦHjv27Ģ,-iXyj$)+xv@:ܓ@3ѺTyo-" ?5LeXY==vp i&1i$ #zHO!vjn79˸k u>@i;BZ"Z F_튒-D%1cGe@y)xvy? #Z`+Ƈ.T}i5VgFoviJ;H=N_x'b8{{,zwr~RP^Ux%Z^85:qKsfMKR }0*xN'C09Q۵CݩD ~įԨ~_BHt`v{]_̀C*/i(itJfWFEEk0&մ7vx1/ Wv>'HF>朆:iMxG6e&/іy Pt>ZٹBS k0yL`o|>rl\*Np/'KM5 *((Eܲڅ=WLI;*pIzɵ$jP|iS{QAId k~RkQ tp6LqzTAkwA,"ui~jAU2*g?Y6.rjs L#uK:WŜ+O?TZE,_9%g(a%l[NYRM^3 ~@d30s?ķ'%(K ϑկFx[oYoiEc5s3@P•j׎+eM^ϰ|߆dyDO+q$/BK\i!BYQpmʖ+jS^@-ˎ^^º܃н8Wb'WFR2)RCEP8xq o)OY CZz`$hp'SF[O߸ 6q>1gb >ZJBK{_kg®< ̾Zd@(Ϟ5eͥ9}ܪ~AIoY/=KqLw1Z2b kׂ5Z -z锋*_h,~ ũ"{O=B.7\7LU Hl輩J>oB96`ز&>i &cZq dzGqbF1zDjXڅq"㓌dcb}+(_Yir5j*@KbӼ1I-JxOUޛ ׯGPAz۞zolZzs2;@W6߈`h#}6/5QUKrN,5L#}A)\aEsB]Ψ6n!EvہBkhZMe7  ː硛is Pݒ"KR?z(09Bi[;@'euAxF V@y&s2z!rg1f3C}p4 a.~1HnW7,,d0rSYoF?&b#A6C]9_zkdOdx粇2RVcr?ZkCҽ"ێBUu聁j錳l鄡w&ζ2ܷk#L1%wMds rmI~&/s$6Fp<>]%/t†9n84<33 <{<*V1"_h,2,| {Ӻ5 |uf D 3h8xn׍`{54?~%VFF5YvʏԿ-,'F.W$gKij +v#6`_-hz"4o}"cVIX*0`){nLGSl>֙f76eȵʐ]ђr V޴ӂhz2ehn` '!q]0=_N9E@IZ?M^NǖP%b%^a{mUUnE"\N |y|){$O],:pm=eȝk*xfɜK, #WQwܦ7.2IY5%;ēhĮWs Z;!0%91, i' [>c=Ź g* +^ùWLe!Þ0qSH'7ݛ8sSyȳ(_qF;kTqx7.c;G $"NcaK\ ( qx =/4a=9.ݖ<)M2v "GhzK{Vs͛R\.@*=-ђL(agpd!Ĕ.O_]Ͽzj"TuP )atNoIk4;;ߐ/QF9! şvŻYkD"zF,=M?֫WOYܑ=y,AӼsEO`ܡg^|nuFaԷmVd5D,%oP\|m:L9ڹ uTlM{J`)D\yaܣG]h}Er+4Ѐ^ <CcG.ELnHgy>.tIYgl(d@w"%z]b S3/…yPaWRaa>P" n`?_ JMfv].[W]QU kkݣbY֘)1&p-Ba](vZmH'O = uC{|BX]?svE:XtUGSطE<9/2 @gIᲨ=n10ǀ>%Dj6v%tc_w/"^p<{3)xaj~VDR[zYc ,E:i&u8\Aa{X[߃_\Ծ`&L1~tþ`>٥ si1iz}1~?awQC@MP ?nuoLBR5+;ZKyj;&~Љj)E>AP.I]*NniF?U(M oXqj`sEx-`$ 9q289=HFy9dKZ3]B"ؖ y*D!D MUeET@QTo)kl]ԮzWsd|M{3,֟gEO' ]>m Ge $ '.Nc*kD3vXQsb|Ի6eZTV\Fw37_n&IWf?OQۙa0:Hމ#,T.YGz([!"p:/Ḣ,6LU .v.RH_lo'2E, +^B?)'B?kaΑF. я@ " :Baݛn1Qݪ~7(|)6/uQ+%FUM K'p'?f{j`Dr'@= BbV_/<󍑾qh>6蝨e3l'NjkVyuNb\֥݁x PСWwD蜏rdn0Y:1d'%D!!bO|yTqU*c* ^і)y /A}V5u{`^ca?/xZ@Sgi숧'(-*Qb?#8qoc|" 4c>7э| #rYq\ A5D{fY@ڿQd~qo1PtucQOkk+ۢO,JOEf|݂hWvh_3V=rƯﬕcbJ*0zCH\ AHeR4Pq&/O0y4\71T Ƒ% Y#UGdGhC=E1ܒ%nLA@e,z*w jeyx_w0R/ƛ KDPIM %{EQ2ǧн^+Ek"cLV''(KU4YqR5(!!ll[MXг"vSO.WrﱙD4n6npt ~P 5u7Br,lmլHH+63maI;I}4xh7O2wcm\L((#H Q"6eVFjfp%+dcux!jQNHYZ6+;'6z/r%dt4S患Kv>>{s* &jU =5_܅a'6ÜkQ"5|˨n:Ko3"-X.үYRtkichsaxbGN8KAcm|5hh-6IңYE7qj6@?ibiSke rpBKӖ_ҏSm N\[w :dbTAgio_m^DFONw=sZW}mW:F kt]i'01[ oi"a^6sf Ю03}\ )U`(sˡ?km˵ s6+Yfv=UϰAuER?c])rլ'K87<|vFjD%ޗSvv*0rMA"@B]]JMDU9_H2:|@+Sk.*`XBr&:&pT(2p!Q侔x}c-O 􎋱q|^;tG%A;&w64q+i=ۯP;puԤ)~;]Cd@+F<@u_f0͗ F 0V@ j`c'B NW . @e#RT(sSC[زAY?G&q-z].Z[JBl#-Jw{.#/3G)$RZ!s򑵈B2=@m!P*"0G|:ᖯAu'8]@m^wh;L^czyGVyᖥqj]^r7kIV#fVK4 8}5I>~ qaߞӱHS֖ԡy]kOf: Mfc!sqwQr ; MGFZS1u O<0Mgd}[=͓{4>~~9_rGB+X[Ej8%uVBQBa-t=􌜑|=tqL:ǢO=+K[9(D u׀.d ۙ: Scqp'n9l_Jjah*l/IUf9>xc <]6Q  :tḝI.}/Dݼ,`=gGE2C끩BۍQcsbF-lGfmKp|5O%{õ%FjU}NHE nQJ.!HPFQ)/Z{O{ɮ{la[e@PIԫWkF(l!%lje*ž \KU.X|+8+##q1RΗ.|o;-[bB8;`:my7c7.F=r-7b͗U`rsN>O.xQ0lH[*,jrcspl .(Y9$Udc/ ?{5$U \R'y5&rN%M5)1nESZiҦ: %BOdɮhUsI6zo ̋F'ZĽ {tC?qDS+DX!Ty$Xwi|=y?Uyol )$ϫ;\拓۳>M-EAnb1WkYB.ؐ2۰ ːňxzQR #,vƠdo0O.(BkK,zuOE!NU bQoYh}fuMao<5*h|L㈍B&_Տޏ~od\ΕGoCu*lCsvЭ3!X~vvmD`^P%!][(]kMaEtω;ahַO]M[u^Mu%ʨ2֋*Q'0ɆX%>yܗ+$ñu7<F5T܎u.R/q|#@L~yIE2-[d9׿=0<∅S/m9(Z 3x?K!ܡG,a{G۪H'~fBs ԖL|r!ϧsr*=I[ǸٞMPG'{kF ENm5J!]ɱo\֙ 6&W龪X0s/`jȤ0RDT&@QL-O$qPwZE T=U?J TWNiɀ|>9pN\7%\S6P CU?Z#]*?3)Th[GSZCgW/uʜq{>Ti?C(E7$^#=Mφ7M!&8,DQnUψ媉|cQ?Q>{yf_MSL *,#9wu*Qru!gU^ +qf(]pޑFD "Qبe_aJG]Vz|?Jj@1]Hyk/makAR"noŢ)g/~}eC$"h}g7_g{ZR)55 J[}m ]T ԧSۃV )Q)W]#h`̩JΫgWkgdV, T^['@lEqd*lO&ǒ"5&+Vm~9ԕ!MW&:j'r"5gVkڋfNL?zz04.Fmf,X%ޛxt-7ly|]u;L%\"aUy{K[ԛmrDꨶ;tFj*R.PLr"u>Ia[ۋӑ Vy3z,uG/ l+o GY3YX{%=zj|JL#m_}}T`Yl}i^92T0Hjy5S}8'#W.JwTy@y1h|hLD9o^ǕX')EZ~ Bd+|Yc)ߌuMJk$P'鮢$PwScݮԆ.>--tRjKũǥ'~Ƴ5{~ xM>j-d]w = j/Ω:5Cta)2 $#eMKЫ5yf T@ynzАȆPin(PS2T^5K|\$8*TChG߃!@=ĭ[EI\{yamjK[ڋ591OVԧԊf*Gx^DiߝU(N׶*GEr|҈Og#F4??G4hǚ@yt *E=ryE3A޵vj *Ahc}Fo+"5D3ŴQ|#uO ϑ+A]8Lk_ߣNصMcKO%UG:G-c62 _/y*95_/C|˩?/KMfzˠ.r1XlEDJz$ZQ2:T饉<@2͋u̵>_~c3CӧTZ@ hί|Np9Kzpj59ȤzN#F3˫-s)<ֱ!&b[#q{F BW2JQ'kmhjV~vԽ/:!~6yL)K8^pvN6Ke Fj{Ji> ǘ㣧2lc#B-KUSlyH93RrKH O=)S{l FS Y:b77")֛Tj]ۡ 1jbTxƬшҟ3ecZ ($&5d gۅ Ms~FY0{Aeu)@@Ib?Uw 4&1fKfqrz9n5iPD;ww1ǯᬞ ũ-6/QU=)T/g4O^@ <֖H~OJL,xV|7ݥ^ҩS䋷7vנ.&u8?N_Y==+S(KHT7 4"E|I=#q;)8Ͼ˴v9i!z8*m8QXF81ВC;EW2mKE;te}vi+e豁^wr t|+`jN{*I-Ń#.ӯ3Eoi' m.eŠoM# {qHyu;x.GY0eKT)4Ag\u|uy*B2i?vT<AL Se&u{i [6kk[6$j/vU="my BH^7$VR1gqvږJ"&*F^[먼>J@̒"*WsiՋt (8+vULFK~Oޭa P\QA|/|iSp32ǧ\#%;)zZz>0p[RǷ6A]eڡt ipr[CZChxg a/Z G崪R"LtjbV-k[H2*HDTTg581&pY9cpnI &dxrEj q+B EҨfn}+g؞Q+Ͼr;Us){$`K˒N][#BKt7a-F{KlF{6y!qK*j'AJ;O]p2G@.wzc v4!!(s+PteqJCFFv#s#YsZ#Q5w~)ȗc,lQE8Il {/BmN o/öc ܡDŠ{Nk$y͊-c ˤD[4V#J?#Ը=Ţ".:#V@`n-Zq * 0f.K9#= {W&}v\o#Nf_mWu$KyZ#7n[{__ >/lf/ɜow6 i2]=q-{(x~YkAeE ۧ/N?k:YfkKU.n,4q+.Nz@R]u/u{QqMA 'Qd1ILbёyҼ݇H4މey?Gab ˱tDÎWm c$bUޢ$rSY=#5NdԿ%S0K @yzWXNhncJ1nQ5.g ^*M[8P{n7#0㵨ۣeE\eC䦦-'[H/^*l,`k4e*b7{ZnXsg/R{M.ұyH26Y35̋ &wOyk Jq>.Pۓ a@-w;"X.5Ͻ%+xaeh4ptaZ\4\Pd.\}~ꛝ{bzCuRt475aea緉~jr-*˂n<͟TN-t| \uK[Ԓ[K~*PcϩQ#A_ټYr=;q.xEbyQ`Qt? OlzҲz!-_ŗĕg۱PƘE7݆}gSo|* 3L{anB"uGAq˺t3i8(* Pv]Pa myZ2-Ύ"1ϋ[0{,(]/k[%{_Bٖ >^[p/̦@&` cρC)d[I,Zvv],Wb[*W.3j ,X=RHo*{'NN A[Rt?>g.6#h4n Zs}{lod=/G9n&>hf,,utP\1?)~BMX#Cm?TWg/APj 3>ЊyE6Am__g G2_3<B.s$qPu".+N! zyͱ@E&~r\Otط9#aXW<RUShZy:H N',OV>or5S"klgxֺꂀQ3dJA2:|D8>ȵ dCE <= ɇH$ҫz^' 8,tM I$v]ed9W,Jԍa6XPxgޜPxYz ?17|^|$xN=rvco rM̐W8.%*!'ڟ񫌍ǀ-3{\bfCa;z%˱H O `j6t"+N%=l .f2{5˫X:2 hS~G]`ue.)ݷΏ4fŘK-;"?IfGqV\DxЪYDT=(lWt6[)gc&,ƚ [>P[r}Ccy*^;W\gO{FSq#`w+R>2 ?J7U~0Qy؝J`oˎ`s\SlL nkyicttPL)鑻yC{ٶ>X 0@=Q l0GpXsy`E|Jb ǘkx~cow7޼ȃ=1a ?y1 !dLJ#O0/׹Ms$da ^Gy6[VEZ#t-P3YmT"2 5"ҡ('Y:!pNDGI_ћU☿tHjXãiB\M Wi%ZaA:gzu xXZ5%Xm{D+EFiSˆ-]*Ж+2'Za3 G8j 0dܡǾ_6 & V+ röclgb-Ǯ~5WOo~( k!=q뾂<`%ͩ.K8obFS.CKPZ8 ]َ"=Ғ)HF XC]foN _EkqG z[[P(BkJ sx<]YêZ;L5H&_(:>~8FSD>Au9b\ i%*Sꇽuq&W^@hgS jl[+|asR0HUf7oޚCp߭ {~sH0U^_%;WKmvDC6XW,A R@&N};G1./w{wv-1تqt35;AyYwHޓ#(6VK귌n>A.rL ;iXJ69f+G{w1hŃI&aI^], X@պJ NFSL|?rXK.EmϥJNJݬ}Q~4vx97b8CHψ1wdaEĸE##"q B*z%{ޅINFհV/g x3UޮΣB|2>K'g)PۡSBm28ߺ./:vo7(߼xxWn|ڈ+P<u4#RsXХlh ͘pD-M֑UGs|.O>GpIs$xv"RuU!{1YT1|MM&I*ݢЦӄsS}tZOnPY,Sn`}&ZNh+(䃌)֦6yCE*Z9pzT? /FIk[.9S{}I d蜓Nfhl^f9in~#^h.Ys]~Ґ٩xʦK2֯:#؋izn=K)W˽?".2{UoOs3-_h5֊Gg &8pW&H@JR/,Z/2%#ò!^cYmު,aYtA;v5+$$r.x͸Gl2U*A$zc,+p1TVSsp)&7ۆ&:5P_1i E f?,n$Yb@ٲ,`J N}lJf!at3Tb,ztk D #`hCp!} A$,xF~r裎+hOď֧ 5nt英p‡[=5@;|P :A*NhB~7xv^nXi܌̘*lI^Z]' ;.7J=>.wO6Kz5ͫުQIֲqخ48L&_C%RWZޟwXRp/U^㻷H KM aa R"5ƀ fpwec2dѢb]X%tj~Uc1|UzLnI)2\Xޖok["L3i<=Qolb^u8ޡWb4cg?Q5$UBJZ}%;V\tmv8[BvEocH7]TPf& Ey#5>.MEo:vS}i[VrFAps1/&">OSW[0< %vma{h$ߧӼ+;]Z>DZ(p\=QNz6+E>+ iKC盅< C}UK;‡F 9eJ~};qXn2ZB7$P3%xa)lND*w8{CP{=EwS"'u.^oy}x-F3Ѻ$yf܇u?d_"f!Ǯ\IR:IK4 8G\6͓M^7jY.vHvVk &e7v)l#ChWBWimh s90)=uwI{MZ+;J N=wZE# "0DW [@+"ZkiMܲ.Ўtog]gBSK1 wp "9LEKw#Y}*fWѼVd%)^LEۦD1@2 m:`E'KjcV % I &Vru%HVH]M"O ?ݏ^HGWR;P1G)JӒvU뾳{G; '.s~D|J:ƪ7ISEK`/[$b$P[l;lV?Z)ewkVb>}J6Tڦ%F _$oY-GL -m[T ƈތ8P¾S'Tg /Pm,=ŖW>Ol&p+ydRWǢP虳N}ʤc {=ydnۧH 66 6SRY2(W\Q? Mf%;fu2C΁D^AgnP ،GLDYv2MT=+G ^얝LJw wv&sac d3vm@Zo/]>'f-5 4}sOlʡ+BkUh*ܻ MR`ޫ(|ZzeG 1ttQ ._i&1@8A"_cBx92(ڭ\b!z\L$s$2oWa<'"g(ݒba_8,C= X㊙'# W 硤m 1"|֖.@c10'j"6HBo/diQoߕ5|^[v ]!þ8#i<`~^tSlB:FwEE$˂ړ^vFβOG"+?mǡXn:ovpM^(&6] %w6H>\t߼{CUENo 2W{KBHFFdӹjYZU^ߌwQt>OF$nWd^RۅF%1b4aM5zJWReeCRM!ۈֶϼh2)KˤK22{(,S|M:%MY-\REɚSB+um3:@J1v XOMSvH#8z7.Zb5cc@1] :6RW"|h/Gh0~1<,a ߠ7Q,qXy*c+o;7쮈%觧~_h7zڽPI>cچwKԞ<6Sw(z7L?Xu9'&KP麼DjS~Ef}mj=n+ gܨ(TW@}LoqD*\%g(c:~Ï‹V*_X}/ B#j##D9[ %k| ٗH"# k")P8\UL*Fd6 Uc>{o 1Ǻ m w%MkCM] Qjb,amڕ^dG˔X 6A d,h#^"P!|vdUž99b~Px(@g5L8Ȍu-Wx:H\{m]GW9+@?Iwg\1rc۽k ICZ rNCΓ5?ud!SPk PAeҋ&SԳ9knn[O, ~P i9?RQ# ǘ4C+}5d0[w>%8nGM˟yVZAƀEH]; I.Sy!bVcƀpsZglcj4,>el'W3J 晈Ӓ%"g~͟.d1*ӾeBv3KRYk %N=\74wԾp@ ]!ٓ6qI-?a(^cl B=\ 8py>;Eݙ3rA~m[xE|5deԖ\'UI?twzΫg)"NL>&Mb>vʿ_|p"w '.2רTp-ճʭSX[sI-s[uU+wʎA#9[ոV|Y9ڐݴWWGXSG9,zay ][va_RBJsBPO}x#EByDP U),lNMA#1oo1r%;B{HHKN[Tp0Cdn\hMFFL]#z/9&Q+xaDDPNSD {r(g7֟ݥ'O1H 98 ޫ4ueD0Me ZFl{BJ/S=Uۿ))kԪӫSb<T}2ϩ?{p̫jP$1E[P6%8ʑႅXoaL*8 #N"g+l&׭{sI~:ND?MG7Py3{u`o5BuB+U3P jթj37 ~9`A]+gqZURS[svmNT.\ghd}{_G-=#u U0-T /E6|e9gGMB&ҥ^} ~(;jp\1*O+`яۅ5-Syd9Zuݿ'snhCOcEuciSNPh]{=ѷ +m~,nN-5ԩT DgրTjb45^UDFM~vB(9!(ȧ Ԗ~ ǭ=eP~rqÎV)F ?гqq5" tvFܕ-q.= -lճWj- 41RئIZ>/QŃ. x3.ZݾmHi}U?<#?kk&\ͧrqdb%ێ5\s2ՕҘ*%>Z"Yڑ1,rO-I9Z,>64k+R58 M*MQLњ jNՏ5MowěuB(ss5}&Aݪ#{۩9]=K)5-ѝKMї)PK%=*{I/J>Tct*A3Lܕv'||Ի^yp—BڝMMmqS~CpfJR+-;p|O8Dy8ƁTֹM}(I41 G 7e}TDa ekY15wV*gUfԯ|M_F82R.s{y|ي}8^'/ tM GaB5hūS6 ]k6Y|YJr|Q͗bhZK#eAc'%zuX X DUESV"Åַ26;F"uKIYjkɩN=Vj.Qڎpc#jKq%b'7@my*1m&LhM>Qd;ltQ.V.{*SzvzRضcME_rC=#X@ѧE|*瓼FN^U5G4i=EAI?PM3BB M]Ǵ"MP%RL1d\(rXz!RWiӫ*^;}GIֹPbpFE y3԰'@涧OI}PN52އ4,ā)G+jXW ClۢPKW%5%PO%x4zl`*Fl$:H[ pjdbd2|`^^G(!F b>TP|zKx-Db|pgX>EǏlXj'# kϏkkjPKR y畘+5.pw4-0ϙ ȩ @ӫ_יM{Q+~ઊ3(7JT-Bx$ei*M9bwe`רF(Gӫ9w1`Pv a󍞶굇6 ؉ o8[RHspu4)8OZeV/!-?2+"8sn:+Y%%34u9l COs+ĉ1׫ <;0FO??0 ,n{_hԩ4g4zAL:wЏ9XAlߝQ ٨l Xg%󹼛o6u.+罦@]NL mj I"&[bXi]luK .ZxWZK)@m^|1{0:ZԎ`r}q`>|mo& ɜTj,蠴|$. ؏:QVCh6 `."u,X;FfUރ8,L#gQP<欢$.#"z|w_:Ws1TM\oPֹZj @-Ҭ-2bRb1b.V3Euo#-X+$BReȑ2uWx62-c@}[o6t5T ѱb#^t]Q(L [ ,~s%9s5-"; 1GxF%ekZixu<=ɽmaR\wf;qP=NAۚFJwIGk_m@Ô 7٢JIQ"#b >)|s9,Vg]C(iOu+.ħ B|A SϠyf}_ݦp&c}G>3QpI)4$GfivQwL-[RgwS? 1 Pc0+FOiQgcʼᑋ-$}avъƿDBss>79B"hvMxC'Sl B}ʅ<ʷ秉#},0MQe!E,vգn&? *VkIz$6ު {Ϯ_1A+k .}&o9odhF_K2'K}4:\.Ђ8Hp$'hb wbJ;'-H2zMڨbwN*C%+j"@xܒpH:?`|-+i j0|t׏lI84=vᫀ.GDFFFmi VNn>ŀI(*tQF7~}m \s6a" kP_ Wʄ^ 7vc 8:|`dT|ފ d%.RO-組)Ո@(D5!K_%aʔ1JY Kai4=^,p\(5tj5Qo Q>h^;h:T zN69֙#[ ex@F#6zEziJC gRGѯ;w ? z"E*$/rDp]Hb]~Qh@?[,IR&݋̶Z{Н+VӒ wrf[K[unk%S$Pzwo|vjpIB̒(8&eh+? wU h}qlw%K% x^N]ҚR\*.}v.L밆a]cj5;'|2y>=yCUc(,uwC}FN{L.NwfID102$|J,+uЃ Q{|o]&{ ط'>ϠH0@gc\k9hE75 0oOS<^- ,V=NrW=0X Dw[8]Fj죷hXrYJJ ]jop/$v>8]bW/h#[īMgmqG1Aa\(qIxFt|5]4MCnW>MȶgbQx+=[*)>zBei*ՄO`ya 52W>>cw&uqUeHf6HSxܰ)sZB~ <"pu.~HjureS߉c4lϹZM)ov.O,ɓ(<Ih`eAo&h\~E3-EBSz1.w RZaSNיmu*)b3{7 {KJ锐]UQWCQ\WfU97Z;)# `f'&mUXqs h黰R& {xb^ǥkP t3C#$o3_vCl`Pm&A?|6s}V_Q5=+X+\gcO<^ G,]vbҔy^vgjot=Fd\c +@=4N7W28twBW-#gu\ٱ4rʘ^>k(E>v/pu.\'ؔ󗽻rq%}t{2.Y6x .T=Ť'9`&>ZdzFF5|U% B)OʲqMzoAJ-e< UK]B1FFIDז;Wx#-"sOec',>.o{g9h 0p{(,M)$I[5z,!X"<QvK:s8op'Mt' jC1k3ϫ$,e:hoT5lFCTb Eiȝz|ɸMmk4z]>(S5 E8̺0t@u ܭa{Q?1!?"?N!g,nmY }OGwUF嫮1f?d dhN18ɖ|z-S$2vEZiXU] 7K.%4,u mPd';hd6܃?w^cԙ+rB\*aL++3ZZW9Iåe3&:79fdjεnԧ`68kRÃՓ<~K\]x]&G ;pdv"VǗ|9 B?]dTGgaȄƎ" +a26.N).ֹ.;۳6_Ua6gIeQ†V8ݿ9t䣟'~.):-܉&ΥΏj2]׫Q _'?*;x:uە$ؽd E7_7{ wKPRPȭ;|v ,L{mhD{(adz$1ُ@p]|mwĂjɉl.ggt, 8Twd]FU/͎g+ģtx뚟}'reSy(8t}>Q̤BCt*+^zudc^ASgԡ&< ]H-9~0v9K1ٻ[KP"tn*/Z ؽ_5UB䉌ƴi/2hGޒ{(pI{|.Ry1ejSA?7LD˿*;=.!';+TwfռJT$l:(86J)wo.yAiԡ"QZm5q\@-3r#M$"-|Xn&a<@b+p`ɳuJ?GΨKTm:9#n]n&G.sj:A{mF` n5j>l$tVag+wr<=}vog=Лc%7v"t ~'6u޼3/Ad^V;nt{6UB`MIh F*͈<8_D{]vĩA@<m KZ;շ2ٿQi3ٛ4n-ޓIpS"iRFh9U>1}G\d+^ VsHƛmĻ8m#я=B}/h_kǩAGW 2ƘɾqE?LZRΡC .{lR3N5bR-om!lqz4I>ĩ.+R_B;hzJpoif z0M(l]uP\اBX*]E9џ~]c1yʩչc}-YSngx0 ˶ĩ 1!i"E6ñ0;[G]rKVWT8yzTI$S%UVI"XiM8r $F*U=;u(,f^yaΩg ZJBRkp1;*^Z8‰NᜓΞCfݟgn,:@*q "FQT 9P?e kvF$~fJ~|we2 (DGiѰi`F=;.EG385j'@m~ Ţ}qVWg8=7Zo>Ʀi  >w8k}vL-1P+>1od(Dy/S JJ.R  ]KrjNUJΑcJ0^$VS#mkzq(ӥ"HfYkdigq蚈9ax)sg-NJ !jkFc?vݚ*MoA! ìU7qqj~6y]- r'q:x$!UfEoMpҜ-dzVn}U*?Ƙf=f.}Қ|͊%{Bw62N`8K֝>d>ܿG@?Í[hSQ WYB}]}ُU@?IչuUpE9:={Ogٯ>s˪mQD3XU>nch?_}jJ#%1R)PDCçt#X#U QÏ?W3er[_ ԻXx΍ɮ !i9PoյUswT!҂ ĩ.8oP"`q 礡fP#9:槓3^ g]5/|.ejxSo?9qM |ZDžs_.T4Rz ^uS0뻆ZJh79n%yQh v8Rp>>D:!\574me̴.s%y"Ca~ru/- C:a'smU(nFZ|/S3'}b35q@*LӤ 9ULjTi" PCڞ& XMe5 iX_lcEsҜJ-vL-U[iBA}1(žR\{z 'ntw۔TJς$g΍JUO~K#g&񐕴6,XQD]1FzֳZovE7U hcb{tG|4FHb1D;ʍZtuq歺 x8v^W ?W &9X'U`^ZmSO,eysv;]##+0sy$gep0Ca >K"7C!H0"BMѳ$QD^̪JD8{v8>?3bd+6d?0+C3Uc/D%PxG `d%KxƚO=nwMY=˔6`bpBIvZhCR$9$T$ػ rTIÓB#ekA?mGSE]6XLZRՒopMCFdQ[/N{> o(32rWN' Y< HwgO^^{_ s18cnhZoFGMǨܡX8X +o~cOvm$ G #Iv 2# HDDϻ2UNҦfT)$V*R1er4=;.aB[NdWKcIbކǖ"== V.Pґg-ɮhg\:!xQ˫ϋ$#ݲ;Wىn]p}p~LPr^$)liBexRCʾ1-?㩋3(z219n|eawNY h|7 +Nj=SnMO?UZ4WKj2͚ g>oV{1bգOB YVۣ+#ɶU?3A 8 `aܞ"u/82H$1֯oBLOC$E#a ԣʒh\JޟN^E}h-HFd.-fhijԥA66\ XK>XNte!(\lCEK%={ɬDŋ6F2R$s6+A !^ҫH=+&1mFǕf `fuHcc-8$J O낌&H4riU _86"R_5Oo׀E[9품N]nE ZMjvbծ(јcԗ^+/ꛐJ)?Yw6k)-b38w"SRu;:,zF0IG ͦ 6_@{eEU9DאWzK&C;pbdr qٓym9>Pe (%oNoV nHJfe\6X}CzH’[%Y6|֦Lozl H;LC+FWtWE]ɖJ fH%4E_コDyмC]nLXzb8zǪWR%GJwqԠ|2v؊Jcgǣbg!_^)%9j_8Uƣ8u[u\Ӽt@ߩP$w;D϶'Z%f'j8ܨO!p8Tl IlFh"{5{k([h>=F{)tQz97%^u=9>-CmM 5R6IdTipWE{4 2V<"gcaa ~+VvUhZ2PXx?9tBݢ _ ǫx܈Ǯ>XaF03U5 i殑@]G0[ •.>*[ߜ߻]-tcKcD?cSB꭬.55.Ӡ ZHR @1Pk5Rz 9Ɗ=#}cIN9UIj;4qzj_  ]{U/UEl~@Z}قF=ȶT\.ZL@Ӟgh%ֹ\RI7AV% Ap kOE1|nuXv[ &İ!/꾪t7;+&P*ܕL 0l}>tBzNsr+GEޕ5G?ĩC;v#EU͏=PQU]UVR;I}SyI኉ {Yob=Ɓ!KsK鼫c3c E|bԟF(n ^iSo$K8Fg^iU;t;SitbZK)Q$[ƸC%Ub_WP{}@{dkb_*յxf؈ҕ5bSwOu)4f:l9zV?}Mv0qH}C-ִuoM2NJ8ԲZ7q51 (XiJϲ⣼s;G?z]|B\_'棊Gݼ@u'菂GCAݳJs^- }W[uzoĸ&e,4klWT%N64)]Hf"0Ǣ.e Rn"G9r]-Kr{4$Ʊ Rɲt]nҾe*R_{%3zs8 r[Mnc&mvr"ߤW8`8^Xx̠0 >PԺOƮ'oAX^ax/w72k#lڝ)UqS5Rq߾o`UfD#!؃rZLBPG[ Kp52 =[ONЫJE)읪M^hi H!/u"u-z˹͉>Cx4t5mf}sܗn<μWO-E >G-sK C n!nv|ړyzq3LCN/oVE} $"Ҩ(Ce1H j^Å/v=1U]~˱sP * 5:KF4VKXbh0j"ޢmrZ<?:4I*q@mOfvJ)_koԄ㞺T  egݡ ; ??Z6.DtRX.iܐBLn=}QbF*CSRCC*Z-%l2j)RqES3lCuy(h~a`1C#v^f7+9v 1ty.YJdDL b }x5I:ѧyY!D%K Qw;U.< 1!9H pxE+ؾKG\(z!U ivkiձKtP)77.0]#/3]jP*Tv:HFGе4VN0L+v3S2oJcHFPc;fإYuJ 3D?:(ٚvv*I4 R:Wf_Xh4BEԨd@x\8єȾ0Ύ}@QhǷ~ű0Kx: J; 90cM`a?,vBE$upE`߳TBlяQ8W?ЈjcCR]}Fd$|6_`P&wQC?c%ꍣSVBṶ^ݭi}\>{$*]a% 1tL_jwyaI.ƴ5{˥=)2t~)8]Q#ß`XJ{$[K_?kMߢu7L*8d[d$/>}|ƉxˡTߋ;O% 5pL0Jp*JX6^|)Z"is4;.b_e0 2ukk~bJlfUxWdh{^\#?qU8o)L%sINkQ:LH'l|o@2GD]zpg׺ŃuT/.z;YٚJY1ȕqƽiApʽs8-jd%w =O3Wka,n8-MN Qg!FtYZNr%%!~evfNB$_Ԏ QY@g}dCN:,{5u>Kckhlȫ U⯘N ;!LP۳dUzwMR@~֎ #>APCLmRf&$YOPCam ]cO> ߳\ +l6~^>ywCbrAR﮽R:QBhҥã-vIvW[!곤s3E?J4ttEA9/!GgOY:?Qn)pH2NtT5-20aNQnVk M )( y*!ѮdDITģAI S!Kl]sh] Oz¾ ΝbЄ8΀;s?KX'GNDotc1rN {xrd{9ZÊ -gצl]z,[z`GU[eK6{NE_zn kPˎN. ԥq"/q7jYz(Rvl.6#5vzJ_v&2GИizsI*Kr@IxSh* 楚K{|KF'7l˸ԃTI2OwCYiQ8. kGϿ4xbbEL r ԆZ>}zQ&}~㆐, j[*fNDؒno!ZWݮ;P4}"ZuM8QEpީp7VdĘ(SdI@j02B٭\mG4}iE+ω.7W^JZM)V(y*`оHݧ~t}oٚ.o~C \;o7}SXCJ D$u8Sʤ ,iv),,ób%n sd}.W]bDå#=rA4=hU #򓠞v톃5M+WyZˁʊXv)5XX4x:=> N$=(w<@nff"&KKv&y9F_f^Y.hA{%kE -ױ%8couYp]o;NhZЅ .ߑǖ Mɺm_J# f> io]4ڞAaPErL2:#a«}ɔ9>c`Ct\<6u"0,q GN!Z0Iz?ٱġ 4j G];Pc8b\7^etآxpɯwXL+)[.!bL"=0ߺ}M$xKnήZ%Xۧ_fg]^x g0}KnImn"pO j S`HE {k!6i{)^1bW =FY؄̵gqNPW*㥵DTD탍oVFvCmIQL CGҊv$T<wHP2;Ygj(1Yb24CnIn&My3 YS_79$^9K}/)4n07?\Pkc+8E>kEn7&FRMGv\ bvVPad%n 2^Ցj}NvlVP~T.bdh8VPS,^# :TjEJTx;8~}Tz_qG{u)zҜӪPW4jx|?8zaͻ u鲽:udsA|Eޛr%e㶡+Eju`q4i/&O!NkDڑ9aV'=q~ ci4_-Szԥ[dyJ;?Ll{`_[㔪h1W8Z Ï #Q-G8+,c8^i ѻrrlM7UHۗԫ3qj|þCPcJph}FZ$kMZEc<<ruop‚~(,tكYQ@17zS27C8643 c46u-irC6>gq&GA1Y? uX ~ϛ P ku]=;c"ICiXA#!0~V>r'|;轫pe{CKV9#ߓP 3#29 B/ H;О@ıMPC?XOͶ=j 2bX['<LMZg7nG G{Ǎ̫: >X-@cfBC>awl5d6[~: *5Ȑ3K!uP`3BUht-qj0mXt0R` z*ZD*BX̡ K_pqTFNbBD'n㬰=o3r9L)SaK}#Z-+?+<|_!VB 9)Ql;eRaytZڿR8qZpK^:-dmC͈&,$Q8$u.rEz 7GT?Pz[r<~`at{VFj;#w@l^MbSw="X`)8=Uo.J|E=+T nw&1Y9o4ޤE4TZ冝|5s-U?JbѴ*bܓRD\ bW}or T!v,P1A/.x0N,7'\5!=Wg73R{R.T b6 Ӡ+] ͕XF>/sdiGbJȊ.lL˞M@Qh|/ Q{u*jD8ԭ7wZo*LCGebz(Q{o6rRk)LmGXtl'\][v$ *>'ޏtHMN* cUp7myc:L?o;Md^8"v Ug:*ە. cLҊ2^Xd1Jl0m۩EPM>[X/QnꚙOIgA fLE)j4gɢ z"1+ qȉIbM#}@B?#)-L{xUGIiX[lGCݚ¦t1+cֱSHN.+cI.KM(3,GAwVa6qa<ώndHS; 9i|QFlz3\sGaPC8852 x5Qe*SةsC=y %5')XK@738h $X =4Mt7Nji8d(Glp"~~RARuCG w1`̃)t)dEk{x+"AD'l|I%`\4bxTbXAVIx'c$Ʃh!{t!1XePڅ Ïn# s.3v+-Лqjsi U1$G oW:g]o["nfS(M2! ꂫʖ-jO:~&MJel|zX0SVACSoZdc\X#7e߆]W[ %OQB ;6K턼o?E hS -5mKY*TRx_.O jjAmc o'㸎|Om QdC3Vxbkݛ.Z;ꎰ ]w ƾW5E=0}v}Jĸqޤ&S ki"Q_o.O r,q ŠF98NF єtZ/yΫT#0/)XtWm7SHvDHJq$lr%kO$-`vEMrނT8dX|}g\jYJex/ڕnW^ڣ@= <:u)sHsO.%Uj1JDq1úH@Ae'MVhJԴq7٧l T.^@PծizҗՆG##da>E y{~r.BCTIfOinpߓܿ B+(rVN)G볽xsmu ͠}Ç*{줒} eY RzP[( *iҍJ1,q!,Uytt'OIoMK*{NJ/BeZ)ɸjFKBf L&SR+ԗ 2ץ*bR͍+#b%ئ*ઉcg)I3e 6"ӿINY? 2y WrWƈ; N0̆K^4 {AbG^wc# T:0HC^PTU{ ɏ0Ue pr_iR:Eؘ(>[M'tcW$v*"/]qaٝ M+Kght \FU}،CiConp SËs6oZRuÇ}{ 4:x6uځN'e ʰb;pN2+'wۄ)ұ<:mq^+X!תvLjE<[c:`-f%%/츑-WyrJra^3Z!y=X{/OF.>G8etg=d]FjY ױf6*_6?OYOۖ90-ƊG Rmhs I5--^ky9ȠI_$Exݱ&.5R} ys"m3R%2:M=Exk'xg 㣐`]RePydh,O-W @K~v2&(}>4rat(\B$rE(o/D#-I>aF$T^_K|1P\ EA ż" m'OUV'7O;J)2R- pL1\UҲ&;ɶ+ЋWʐ 6EN0Bw˿[튾ҖǮqHye\ǎlXWI)(</|Y{(>? ȨCEO}TJ$X~:|N6|kkz5$YXLoM/qh d_Co7XP+5_!')}R!|nM#puQðPK;z1XԖylxdA 0mϕڡ((OjWLY`ui( +vX*LC6Gz&$aaVZ܏z ~.jm[A>!/Nğ CK}JݙK p \?ZnpsC$c`Y|].Иb+ާ  8ÆVڞgEk]K1Uwh"ĭNiTj]D@?gz1F8*%vIL.VJb6)ȶ(-HqlXNJZ-xh"mתU>)9݈[I㕼 U(<.PUtǖGA ΄}g SLz3 KthFh5ԥtA_=vIfvxs&{%Iݾ ?{/]Z`#O:)uyy;@)^nj$%wB$Bj{6g][sHKUPG'J*lebzy(l@aPocýs3{A(zLiے|!+|3Ү};TgnSZ{ؗ}8"L 2;nrm=m-lXl*܋+C@7}qUfyKV]rcxo 5xDP[AbVD;F:(m> j!}jhT8k4ߕC|{D' %##Exޮ)9o/UVPg*Sp0Oz(;AX鑳UFЭm =Oc@mU4y΄SN+TZuwː$ ԅM׾ 9hG>uEAg"R;!^Y8)mz $aGV.bP]M,7OcEQ~6W#~?14qCFt>T\2*v(>Vfe`*S?BEYy?ÉEU#N{-A ;nqoqʺHEՄ}볼SjBJ%hgPel\Dt"Og8Sڙ'%e.KiW|TJ#ӐqD|YgxA}>QR n%睁 5 XAACemxQ13wM WB=Hlu%F{R~]}~?sZL_;e.׎2#zaU [Fes<&@r͎Ο;]]KIZraW;jJ215f[j'A`?-֞'uUrOϗG Ք!m=uk;eݪ/ky/ݡ0ϐzvif/՝gݮ.t"xo:;k{<ؼr*N*;e_FNu >$6?3$y̔:֠dvUr ^e9Nl] A-HMQPl&ާaf-u _K)Yi)K弥#v6C=A,qԾ K䴘}+–Ĵ7+g-o'\}q Y"O jX鱨;&ruԣ$;o &.&^P_s]: a$ sC"ه\9 T~vKlMų%ԝBΈЫҍ9rC^H4 PǟG㗶q<ƾ'eUV(?Q##M)e>:K{>~_%iH1Y^R5:B-0 ~۔ZA^UX-7DP;>#l R o5$< 1QSK!I>,`A-T/ jMBLgsj$P@[ ;PXPPR#/ :J(tPA:#9JuY42+ rc` nDV6ۜ}ئ9buB[32M`yƝU @uXQQ&x 95AP%d ki[B_A=LX30hkRn jM?Ek23YD1˒XzP$PKʙM~OhKj:tt.p/4|)78R YM⽠nk-&w$Du_.杋*d@ܖ2FRPDm RWR d|&INq.8I8yz4cꏺasx(Oͦgklkn4S>M!?Q(Ap%t*qcܒ 5߳'3YwWcdeɪBq'ѧJȚ4YP\Ԛ߀ vua[)n"M}?Ԣ=k'AL >e"i,;T%rfS 8O`)9̓q ! qՔ_uhjۦS=8p򩰱7trMm~{oAMh!]z3b)zkmVME; {jFF`O@jGl3yOeۻi)SW-`#:E]Y3 F+c y!G+'4%ŒṃM%3/l\BNY&њCBEsBȺ.9zFʪBp&=[{28YMA%1J ×lZM~& ia@j!ay,ES}􏆞[4D, U XGH,#9ΠlF r[#ҍ!w/m/zA=wgĩ]ޠ%۬賄\דq;iuT5øHːWe\h&="آxw 8M*K̀r3P["DU-7yAQfBiu:EiyQO?6T8f̷&:@K(}}4!Ki/.ؖ8> q13KKG,ɫ@]LB[NmBN߳=1hT(DTUe0wk!;n/b"I$VTW4zMQArHELT'{b6M(#N*X(̾ˏjD{ekV k"PqTtEjՕ4𰜩^]g:y$f~ ,[D@ LVp-<:ꚹZNï!#ֹE:-$@2i蕱VV "֚Z-q Aݶq@$[g x|vrҥ_1Z_Eq|:0VăA 15Ԛeu&^z-ƲOU A  ւLiJRE˨[nz2{ 7y5zNq̥]f› i?,ZS|i 6d !|v?M#=Oma0tED}fx8=18cu;YPxnFa|xS0?C$:QrioP?]v:TZ4͞tdg\"'>v;{5 uM>mWP6'WXk0MR' a 'auAD_.CQ(F]vH "XIwoWk{ӒE[Ki; kb7?c\\Fg:,aՋvyK*yݞjI~;!o)ܡl#:JQUw'L;2PyOHIw|U四eH+j`j,硇.Eؒg8r8 h/Pi~Gӯ o4`%EDt'O)K/< BWB'K'mA .ѢrA<C=ds8D~/zVM MUZˎ$ɂˎ%2oa 6$xXf]>FVt5):"G@R@o\7y]  & ibٓ cm[ y)!An z,O tM$4PtbvHj\TŝUV u?KBw~nMau/I r֔<;!04%hR`{h%)A9F f{Od\Эd4xpUC[N_RvsaP^+;TBRt$kk*, Xc]b j0beYn4DBp}AF'\oTZ_ڧ[ u!$yaܑ%&Cb*GG(9 Iv jt5|?'6J/JP?aB iÏ+MS&o˪JT{30a:%jTD%pgQm-JNh0SURڼp/ (zZ~G;lgcdbT'ݮ4εqqЎG.>Kj5䥄D@Sd*{4bQq|F 6e_3*yf+A8:Zn(۴V,j^3zMڑCں}U`C%}C}PzR#=b˳#)dJ1rυQ{t,~{Z<%I=q.,d,o{=҅rWL%G pT^SCp+av맥ops#ÑNirQ!v8>;ټtX ig/M; WWwb-,ʘ,gʡh&G[d̆&TxCo5,Mb}H2ݐ4 +B%!2sweԲ\46wgA6ɹ&;C)"X1e2ϕUyK:N L&PL+.NQmT$ed"*ݥ # KmL72UoevQE='M\k#W0FMspƱapx;[ L0  ^ >5o*#|ՙ<_fIưeP4ڂ#'`1l۬Mz#7+ "XDќW xL[Bv'U[]]19Y_ΒjB.yл]epa0wKC ;O@%\aƧen_&gɱ&OKMm6.Y9huaBǍy8oGq{;{xPJsC8ꭦugllP`W[bcQ%QNT}Y/O"җ^9IMo՝:oWF C5=[!soW~*ϗ6~v6k=qejr+и~8I烀ER$~>4-ܕ"=J舷(țVZ&ޣQ5bZDΧǎw&[a𠶒}Gvrg5ComLgcgS4fj&i݆?*KM愆)U2x,8T/ܲɂ`'ljB~VzIx"un+GtYDl9tzM#HtR4vt~#0s7Ll'_DFngZ*ʒ8H(::>>X}hh^ʤsm]Am\ꬻbPu5zo C G|s_+WED%T).nK2ifi|Ɠj=HSQ8`+L]WCAa53 ݛf12W5#ꔮpY$M'72vM\ ͜??DpO=~ڔ ։/L]>D ۍΝq\Dz>ѓ`9oޖ ""eIӶJ2nXMw^^ɠtv]cyG0S%'x(D#㢆PN3%[2{2ׯ.3 [4nNe=qf_;C2؋'دdza?>ƣ{i[bY8=ع-8_Lx`d>vzlkYVKdFhZ2huà;O 3ZK@#7%飒LF!*&l_I2%l]vF;nS<$6O?Hшn"dCk|`â[NUDtS7&^RNaTݧ0Tx+tM(;;q5H!F=bFׄfNق?KuN H d>'MTw֥6֮詄ޟ5QbZ֤ i"<U_ F>!- ,P4C@UVe<_wK 8Ҟ$EMA~ZUR-s|tZm *9¦n ov%'||wN|;1"'Q@KM(&*HuZ)2ANՓp3F;㵶k-/԰'oz<;>A[O U^ջ6Uv݀uŭl}#EJZ~3[Dt#q\. |SM|j;bUGc<]mPcKWd5y @Z%j<{A=V{{›us]D3@,TU (}+#+^w)[f/Op)]beDWаE_nD{fiQ|1)W|]g2SAm J#aʥ;5F B&\=>&Vp!q@@=;tNI*}5s\x%aL"S[+t4[Zv3*̧R9Vcb_ElzCxb"-4=1SVq9Vg f_vݥ,E!BMkZ;/FI}&>s,YbuzIw mI=|ܮc+!ߞ@}oHR*o>Q霒ΰq6v:[p=fGt| c`ta9x̛Lo%z99n>`'-q{Q'.:)6h|NbnP:^] ߳?fImGˇUK5~;UQxZ ˒]MmgbmZ̓D¬xF2y-c +JQ^5Hj2ٰB -]#mnI O!]tѾKOi^IFa{j[`¬ra-%-pHݞ9`Ӧ]ۦ ۊ; GG0|o}JmS<+藡VZdCpE\mir߱cu;8`bO/8 㬼-B3V Zl#8e`M3W`y!kM sH=NMYq1KM>g{FBhI\.vyt7$0n:o6:3.Ϣsڂ/cw5Zi E8}w)SgW%(DC `UUb,[4uL&x4NdEiW.툋n_\$7:%O]XVJ2 W,޷e$GA \?wh*ҖjNYG`Q+U)MȪ 1w /s {#8fD9Ⴈ#E#IG^#\;rKZ M+.7I+:EEUBv8objl-q7qDPȻ/G2,jǎ"=|I䊺'qrPJUZ!XB|HG|F͠oY |)%iMkr7Eǝ4IKo8.IX;.(XcE{a1tE;2uW`\1R{m> S$ T/;G?\SZe5`("jg[RsNuT`ZP]$pFRwYP ɔa89QvmEG'3~% ]IŬ2}谳P#m=U:[ ;zEqk, m_n[<x#l8n1ɁJ~}!13w?iTA)n#|pCZA .$\ʘpv{Hݍ hz%NMmXıTեǼGK5F&HNd;8 xh*tgdkLLVh6pׇ/yBqnn`7D-(|v,5Ljp9U:cy >M2z,&,7t]2t;gX5BU뻐qsDm$IK||?ϻi˰HM3ٕۭ.$ 0UbQ\SenzSܢqXC9޳ []i$8f躠[͸N8\>biֻw8v"9]@$yY[ڱI( }BD&&=^9dUH*:/ $0tr6A,|5 #OD,wɛTPϵ{TN|0c}%GDF'!:BCvZ+R`癑9D4[PjcGuԐOQ8>s{$Ӻ>YIŧO=w]ξȪ˞_|ZHJw|cїnU C lZLh9ñT*1)D./jB@ 5)O(^-ni*9јZ q~~/,xȄ)X[QDcKh0tgzÝMt\ܷw79Au/bߋ-)v7Ʒ%J:V5IB &F5>֪8MN? j(tyz_Ox_޸.$ީ3*_[xɨ2]v- Czߥ!g-w?sOC/r㺦(-ԮXKlᒗܞQX[yvUFǕzի+%+g:}OMVHk n, S Ex9X̛WH=C&oX9]f?ٌ[ /z2,@ʩ2U,_ ۙpǁwkr )%}<%=Iؾy& Mc0> Xp.StŸq\fv)Mbe,{g(2pcetެʒ#z[GMx3n+a< kxw.O0$k9lfɡ4**UY]˲ܹ\{$zϝ&7:[zHi{L_P⡎Lo wn%]nHWxO&>ޥLuISP遲ͲNS 4Ir'c^. F)3 سxuKJN}̢V|/y/o.j5RgoFP;@TAZI aEB4a> <5< bb8RX;!r%Xʆ.1NVYC)S@) ݣ/TAU]Kp>* [Y8ꠛLhg怒^R ~a9sx֠.fWA/?N9W&mn +9^F! H/SÚ^/HҵV1khdB#PӬ}G٫ ^6yV[2> j=v|#ΞFL oEכHOBYG@|dXר%䜎`A&<;zP̪VϴO'VCʫBxn ? t:Y܉pnG)37,WM9/o)$k(l̗NԻA]#ALYV Ui]1ˠEx]mjoTIvD5?/X@ѱi?rn($L套XL '}JRn[ƣ oAuI T w;szsHX;iX70~'1w䣸M"(gԦ3,4?&,ԙG۪ L(Z0h7T(֔Z N4z~|^_mY9 p\Gq I]_)]~Ag:NpxL{'%PIA=VUXjb[~-/C~eJ\A{9SO}\J[eaf-ǐXNV@$NȽghB&A(QsTM12wZA%3ފ\ɬyWÛ4J]7r Pa{K Fإ~\Rׁ,&X?]xzri{hq1ዋAmD0R *x3~po^ ReEv{J;ّ﷖Hq13~Qu ^s*SSSPKDuL\U"MyP/hK5qyP/e6,A191EPithk0X;$x {D[VE卪Sԝ|- 1 `{ g4ZGvw䔰xbKX={WϷQč,w)-j*c=Bzȕ;MQx`Ůgk[fX3xoxv_Ia* UĴ6ܗj!*{;* 2_'{:U)1!+F)Sڲ3՚۬o$xqL<^ Ωi]RL=;XNu]ŹWwX-Bꉦ5Ϣ=Ef'+d NS(fq5w5 91-#3,x=S?r/,]E>+=1>18t]{zЌ΅Ϛ bwtD~ԥ%+? ErJ}.*&1~ܭE 2\!(sar.\T}d+CX^/\B~y\#Ն+9&cRmEK/ h%DĒ4*UTPr驥wU8)m^QD5^K$ɧuk)ߝ/C&77|Ywlfk'q,05k08}rAR/7mV_bl.WQW m&Lmǚ*ZR?H}kN\㩵^ơ%n7D0#備::@ffPo%#Hss{9oÐd1Wg'knhH;-`Ζ&C>NԱu149s_QC: -]̺ XF=@at Zw񺈱]>ݴU;VoL>)ƀ=ɣݲCXAMA9/u? \-䶴$`!5]OnA΀jyKh .Q0> Fwfj7|Zѫ]xV`tyDbɈ}h`ɐSZ]I6i;s3"BkX`UwFгxY.!2[zjpIS%"ᅓ8c KCO=iB'iłPP>o ۷q6`,L ŧ.:7)W7I:/rxcu?7/{ a/|  e}-#Y.}6Z,5JrmK5>XFq ϺZ j0ԖE5 `~KhP?ئ]`t1 wKV>|z--wPY"qrL_Ck]OՆ}oݛ-j[ .ƕ= "6^ԬqAP@2T{7օ(K6=M撰CxcuWbIUES9謓o=F`jt3y@)ڃ+kZ;lr9#6A]zݏ .$ EHHfcucy8 ,u'$sk@S<,(9QBloB_l<{oӲn" cv1Sc,=[p܃z觶#L&}bC[rz !\;Pv"lx|i}YwMٛVbS ґVF\6n\i$8G\]4]\TS&c|k{4mbjBj:Qh(R$u\C$mOa5`zw15XRtTID$ #ZT@x{Oj#RErHy/mNTQ';(o5$1TjKs_@}{]@XŪDI,6nh73=Ï`+xI: bZ 2 EsB汏][&P@XXptR 닔x{DsY;pMg65,:IT΃Q#ԆJ3Yڡ$}՟ p3}P>Π@ީl; z)勜yTg o$.>9H '᷐&75 pb9ElɃz-_#%u3]^H 4 ?^^oLއIaO($~`5 ) kffCC4PP1ǍyV/o4"V4| 'a^)[6JUe0aHMDU%DKX+dA~JxyJՙ'i1F lIx6Tx4]!&sfy[k "QKR6q j<PŜ؏t{KR]To6kw_Tm ٻz[=0aڧ%ٱRV޿*4GCc7t s1DAy:ԺAX,O*Pdb/c>ߦ'?ڦ aFf9_ [~YzzK+IڡDÕtֹ.Z3N L j(k~%_AmR&-iD%t GI}Q3A#`BoGW¢.I*u+;M}le]{}=)rty 6v9]:.[$nV|[ԥGA<[ɱe%{HϞh a"y~Ż8Wdcw@z 95i8h0;П'LɚL } lEP`؍ȕκJ&~6܄éJ3W8 "Mr4)asc偷9VăW{U#}xhաX0$V]Qd+LK&"A[͢sM=Ɣ $7d=OB*գ Z/P KfâGWCi]QQօ:AƸхu#~NUWcyMjSjg 6Գ l.Za \Vl؋"g W'Ƽdn3nIk/O=qSج0,T*pzvMwAa;tYz c,J!MI*Y:Xu-8aBWdl2CRݏr[*ERh36YwEGT7?J' u ZQ^Gwqu5r81 K-&g,m1H j>;gcgy+> !0VPw`DNjJzfYڊv`|BZ!B _M,hi9FF * jb ͪ+YedE`f(Ǹ*f0$!3ˀZGA#[R_ETG]haSd.rs\S!'PI,uњn4li1xP.yzÃkԬn8P#[MkMuBȒyM`KBN }s]I8Y_85]*Pʖِ)/#Tq =7)x*m~hx?^ʊ7]`"ZҐ)WN?4o&7QbQ\+ j.bxE/oI8uݡ.V㑬4I 7";3C]UyP~#DP]>/V]$y29PVUE,6Uw3O7XBP]vvɵ9Z#^'y;2Н8)x=y{ۡQ馰nq(WLBE1@puK\PUP~*||[&$ܛ*vI輠n;8Gɞ*غ>,:=̗EmlM,Hse!$9+*35()>ybAy!}<(.t[s;<ۅ!̷`QiL}'5X _`<(*#vl6(h=cog8ꥐ{x'%s |Ū省2M})pT;'[Wq7 u q,6DD,p?< QtG|-oYP>x~Z!z79}2N N{h}Cah0!b= lK:NDc eD[zyCא :dZZM 9*βs WF[{ x"< (7 )Z5 G1Wt1[sϸ=o@JD.}*20tX:W9 xPOG #_;_j<)5fYqWo=)Sq4CxK1n.{Y 80-oӌ'ΰ҄,=$vU# IKQDCڊ@tѻ\GGiGF^;CС n77 xHCAK'i!(v@*n4G\)Qj w QpWr 7ež_3~|ېZRb̷6DW wl Y }`rDTR<`G8D Ԣ]ᅾZ?YURnUjұ6)1ay"X4GGW *)▥Э#Gz(Nc]&OvcuӃZ 3MR}݄8:8Z}EsIӛT/ʆ}j|}j~Ӊy |iEw`4,*{!͹Ӷ=}0eSIRv+-5gN`Jo^sd5\zCC`o kuȵZ`!^TM5"`Lm%eHoտٳL &yqۭ0<5;i>z*=r;/.8fgB =%g"SAi_'5䕐[M> ?a]+ڵ#qpctyXT4eޘ,0L/ >wIq"-X|={p^ j(6y6tD.#}s#!nb @3b;+ޫjYJi^ck GՒXUli=bKrWF;tWЉL?3t,޻ȁ'jLY4ɿ(,LYxm)""۝%.sS| ScJ_߈=;% JqA{gX{vBeYø%ruv&ۣ Fzyq| bARPp8y^]" eZ}lp9!. ݘl|8xż##CMGUy4\ Ľh#R.:­Z(yvOcw,J?Gh0N'r\KO%v0*P93Q*&Urn]C-\^@@JzFk<xtԇ dҙc0Gv&ka2aUmx_z 5v]EQ]ÉvR fv, M2 pNG"vW2j"4sT*{`-Nhz,LCy N*R_]jC9PQxzU2ԗgDs %ƅ}XQg6)ZKv7U n')g{:pTZհM'TI+QC]`꜕{%y}croʏBq񮱢CߘRE*v +Ĭ4)Ǭ. . U"̚g"W߉;g3kN_ώS9s.~&#Z;R*9G:-7ܼ**{g僴mi4<3+i߬yh!Z<(9NV͡$.:}|+X4}.:h CDJct,Y HlҴx;ʑoV]5%1<1naLfpB,jݴNmD]S鵺ˉ>B-lBnH2jH( rV:h8GؾM1R[͡3:Qk1M +vL lSAt!\C@-CNNʮ <FiG꿈^B฽7mx ew΄ ޵`)e1V1cG>GyIZ}8aOiZcHf`; iԆD>EU*ac@NkY̞IK):ZC(ҎP ժgTG?Ѣ܄{Mzt)4ycgbU\q {23͸HYL;JzDIײUGjsy@Vn?hwge>>$Aw52!iyܪyԴjq9^ڀ^CZ^[8X.4 RjL$l26c;%URPhf9Ge&~Qg7C&aLV+93 e6c0TLE9Mm+)u9 XK6K$Ikz-VB[Sr8H{إZp,CR/!ia)7&iRoE jWO NIKhzz꺲ץNL*DBCYS(%3nD_l))G, ?=&hQUc"_@睓L{v\7Y#S@MZe؃o"<8:&$Ucm'&Оd["9Os$XdW[Kg: ^ ޷p  w+nz=g΋5$*ˮyqbŕ0TiMËp8/cd\i@ƪ`iuw^upkwrZ`4&gK3]< y* 'gRm_c'u_wgb~tXAFȲBIA LKh#:"B55b:z┞iKq;ra B\zMŝ0#Iջ4a$37jCdR,2X,ݸ"yIIK4#|$EN7 W)Uy:X@,PcHiܢ`؛k{FrYH}/) ;|*V4G㳾t/B)B3.!*KJ Tź_#՗/Uzk$.fcH$NWw)gոR.D B w*vE˵ 1gy W_k+˚zkcJxKl#U#;b i7Qfч?J=XRyG-X 'p,lFTGm2׺_P-?W]bo#l=UvEi4}GϘX FKq{bzVdsqget>hZL^ qltF"k'ǽ9rxCHoU!VnQcw>9 2ays΅)o'cw]prЉ:DĝJߎ1&]U ё+OD~$Cq|s/S o߃E~kU{v>2 xboEndzk.t*B״>;>4׾'DʹBM;#xu2`UA4%Y'|qZ{A 'R5|cR\7r)+nHn" Љ ~(ʹ<_Nr5icR =J^rUC@ -%qu(AU@hŐj/|/>URL\|ca||$/ZiZdƧ^+SuNQo}#7^3=򟛋 A)o2g5Y 굓q|՟gosKn0pE(&r6 2ɶ[:' cR2}j3 v*W̕h*G9X՝-ߟmBd v2K!-8vK_rmyy~+(_Pv量dGL]=zFά5>H{ 'Ϯ%沆EK^6;GL`@39^ʴ="͆WVŖX%u6wתjU||=gFFidMU x2w[0c{@wY@ [z{PT?=>-4whOŴcd~THA ?{gDPCD['"6OWd P+ jUS,.sPor/澲q q45G)5uHF1.8+7`Dž2ǥTV2>6=9߻׺z/U$cXKKMU+uN亨xQcGt}$hX-Ex&g5YX |tk=MF!Wu(BnY<Ņ;dp$/hdIu378aUeNe^GR3 S},J=0k~\&ԝt5K JXz.okh)S/"[OA}%IqJjg-+\:.6WKqlHCUz4/Ki#$M cK3%/{XQ*{++ ?I:' @={{$VڔMkw&?1*>nxPoB4)S~:Eh5_?Ե*ml_PԭPDY" ؔSÂz~r3R;ЌsTu)GOr.[|m^MEO:X jKkjͣ0BN vV^,.niL<BYR}sM(ZA)b&7خqMY;7yC#4N*(w.<n`Y]tq^(%2LP4z4#JYK(;Y9^BȳCyMCiT~#w,$yrZ@17 Rs'v~g'ZK8C!VP>eVq!' ZuߜkܭǏ%",RZmJ0[ዥ+="?S:)K&[5=d ޕX%Y3Ƅݘ8t3G2K US)!ao >~3g Z]m'[:q 00ưʎ)GWm,CicJP㿐Dnh'-tֹ@h!gkDB1ท (/+],x`x?qqIOqЭ._kL oQ`Ҙ|Wl=eI ++wKUIzl }kkSs9KD^(=L3=Ehd1@փѪHv7sưe ōLg3`O.^|hRs*ޟUҠ# PjQ 6QUB;+ Ӷ`چr8[=>:)(;?\1{uFٞWV= ihp2Z-tpE]8Y݈n>nfQP[0%lm@{92^M`᩠qM\t1G4*/g4$TB+7W64I v&.n.C3}.Z9_:f65 ĸ**I PP׻-GB=K*=#CA=KK#mZ:,,̪.7ԥgQ;i;62Yn. #u ezL7:*k)r }pxN׆!t| L娑9pD24*1 d6<|A __SLY&yKcLb5ś6i"ޛ[;4^"lS瘩"M]kq)6nV%t8Hj;cu7_rX}+;5D@Uъbu6]G?(Jsm՝o) WW8++ "(S*=6qRBIShjek)=-=Y]_C XS {bE0Jkd v?SXL+Z:XWKoրdܙBM;[%#~ԆMۢq&) 1J+-Ol&Ok&oVH jvFIC~P'*wXs6Gdz͒#~ z@Ӓ{$<W1jr.+.~t0 *QW(t[K\6gMm%;y& ^Y @0QINQjmfvB/!&pٹ3 x *+ 9Q)VwOzaYFIv2(vD% $wV>º0k/xWj[%q[ؙ7 4bA#ע;qUײp09Ÿ!T̰eEKtpEC 98Jݝ~.1hJ20КVUV;Xe8CjG!428@+qB:܁f\V{Rj%)ϡ-ڠ_V_aJp@Y72n%=JụÞӤ^iǀR ИAYwZ6[sh8o).L Ln܏fB3)]~1bA5iӤvDv ǴoM*H5IMyVA/Rr.-ώ㴷2L! ..x3fPȨ}CAmոR dJ<^@?BYVd:+ u5pL&0B:`!aTֳ /96-zӒJKPU2EEڒښIK+y~ 2yuIL=N5SN*Ő&"B54rʳ>;i %iu+y>SF'suw(Bʗο '.MHhkvƸS=_^hoN{K/ I * Poc"}ӣݒҡp U Fb7hJDⰇShM%Ϟ9ޮSÎu>u;-Fܤ5Q;TöБyNIV]eu[F }w$紲SVEg;=X'n@׈P[kW;FܵIab`)Hpr)Έs#H&y `j` _V*]?ެuӆ-,ٺaJQkZn{lw哙٥>  N,|SToU-"Zv208pڒ=詺7Ho%}J"nߖ$ܩ ޜR.b YIRgTɑ~zFJʳ L BVh-#)YV&%!=P+3b gvC[w#( d2 Ϟ|~Zvspgu;ѺEh9=ɜ:N'婆1!Ehbwm}Dž ?>vDL€==QjvMП/ڨG-˕P[Xk ЌpXW]oeYIO9C׾K-*ScW!ā҉б,5PǹCbK!lƑA5N>bV+#JFN21yQY'wǂAO KnZc4lVb{hMK.so8aGyA]>񺵯SD=2ё 8V!oK0eoaؔSe}BjqT&k]B BoG&[K1u u%+2?v8Og/z-y<3͚ PC3*ᷛK6Tf|@$qX HXO©MY2.-ckֿJ~t_Pu|~./7`r ĤH{EdPb^]vFh7A|q%,2FaFy΃=]{zI.!\xQ$O=K(gj}[VS^A^}=߲PB-&6؄ ][Iym\ru ~˽PUN=%ԌF&]QZY(E[jIL+0ȃK1&pAo p|.Xѵɧ#aQh@L!^G ^'u%%=O [tFMOj"ls/¤ ÿP|iK[& atGgvaޝ3ѕԫ h/1 ktNevgα5wL> ub8ukɢ%8aqL7# Z$ CM90[ݙ Qͥ7Oi\ y2l;w߉U>*JqO}=d5ʙ"֞x'[@);lKPiΒW5>#7] +lC|]vV#Jzk ,n4YӅ!Izڽy;]pFmsOUB/xgڶ C );Bm;W*jl_f/>|!LDǷ3b}iV\|ᓽCoJr*$ƧkzF,o dkN!e|{[n#NC>ksjaߞ˥c}5sUjop h IHn(M-0u92jZPkuʎ<0:_'x75%5ߦ'X= e3﹥FPO5RRl R.}D.ww$XWR/;!cҟWC"]]H5z^(#./*G2÷+)/Y"ְ`ڶg* {tGPVўwخwRW5IL\%qEEIS%"ՓzF=]%PQ2Tٶi!ctZܭYN!᷻5αVHgLڪ%=KwѰM? CVd>/1.@o2zjũQH8 )Fr^Dr$ %(e$,r"{pJ5VzAf=qS/hoޫ 8E0ֳPtA:*tmqՉ KD%|_jEhaz[k En%wNӠVRKO"Z?cEb AT^Lk'bxUjuuQhzt$MbAYWSt7IM½^* iK%$9sXdh,c.W=Ԩ3v5JaL}6ѝ#MDӶn[#Mwӈ>9" 74B߳zПԭ uDGmChn!~ -wG-'žWB26_CBV *Ԗxw-b/-5-闏d>־Im "$Wi&Zнk6G-9%Źh٬ȫrN(vGS[ת mb/n)wm<^OR1u w-7GCĠ.ՉW*!r5 Ǚc3m/#/"ƗފpЦ/E=Y痚 #>ɴltd߃{ 5)LI]歵=4hS=\ C1=U8Dj.8uÖtNZhܿa̗ ivt=k{o=#8g3% 6-oٙŌA[bjEVMRW!Q4/CJ9%8!!Y퓟 IJ PnYG2<55-C {ٕ%%A}JUŕ$G܊S âAbuZ2.%;|D,T.K\@%=ŏBZ]'\)ǨU1;F:Aߝ!9Z[t@'A}ϔ`z!%shȀb7Enn_9NNZ+,sWZ ǂ**g[!{ɃV)Ƿ5>_ё&6 A*fE½U vmF!bR?OzHs۔4$s3ny;V xH|%w9︫49bT)۠wpLOhs$w+!)8^[N׉i) w`ZmJ-`ϳH⯅_:%*o umC3ni^)+y[E(+6=àj9NT pc4=nli`g0lR<aVu=r(Æ[j}jI6gջ B=!zS^8n^+-=յjKZNKUD[ n< oWcú0 g2KP噾}YE!RJ쵺4騔*5#cẂ<B_"~4)aC(~-6H/C.Eu\qYR?Jq E b2gCB[}M} cu;G*xȝpab)sxMhv{>og'[TZ@WԛtE;wMWR==L֪vX[AZ,gϗR{dt1fQhLi)(J:Q92jӠNhtsx39ϵTqS<@lEa/S*k#H$=Q6q>?=K򈛜U=iʟe']%a)nr+f|P"e)o+Uiޝ`}xXNq=GUugU"I+. Y:t=0%Y!˼SQ s)k恫/@rg%j6NlSkR<'oW9%ʐtLBR xYBKYڳOa:x&(Ԫ10llzyjW_T tJEFBo"K` EׄO N9}eu_fPLDϕ.z\ _@A6?#Jδ}:o<ښj^6b5Y=-CпV 9 5o.ȤT (\V2 <[l Y)ˌ'>NܑpYP%-L8 /7\7d#vp`Qj56Yi:+t݈*ngA*m>L>VcKxȣ[R?Lžf9Y1p-VwL Dv(nu0#|FH0~A}RPϦ/~^$ynr! EX+kM~kJQ P\2(Zz|XbحCհě J}sZ³{25h%d]*ۡj{m̱Q}eWm;S VaȻ)ϖ1[{ )gKso`52'DP'XaA}0~gUwP`)[~yc%+w &KH.s'6>HRpMA-kO _nhȭ bR m |\IJ!On֭)dHɔxax9R tGz`n9r4<.w;+f ,b nχEFTSt? u_7LM2uUtS.VܮOjiR Sc~t}xqZ8fIW{:Li9le(9u]땽V^7[Sچ? T_"Ga"GrZJ3M>E%Y\ɤWEPEu\[xi֘KWvrxë7S~TE?5{Vyc2W4'躆RW:Ueպ"Mn,{QI^PKBg1- e\GM)GcADꀜ\N߾᫪һn%g̊sPl)6#ݏ &lӐ j{Ga!:'x~ǛL0iR9'˹Rہ[}]|&*5|ͧd״w[ia.l˧[4-{bB iMA=3YcXKWM^\.?D?t j'3YqiٝccAGM"! 9pњP-4h7tfluqR.$LW̔_;!`s `6~6Nd;5TCcLc+-hHPǦciᔽ1Mk4MƱ_F>5q"c~ӪZ{εN V֊/uIcfϟј@Gi=!~r.{ԅs{C%dpKGRPDJvlƱAt XGFbX`^3#LBqL},&̴~݃M T8}CW5$zkB$Sš3kbUo7dhV>VQ]L}1A ZzGzOlb:Wu=}mo+Aኝhmck; opqE߇ ԯ `1 QX!kM+`*SO<¦:a+n?.l.:'=L ( NE~6^I#EianxIZKInD+3mz?W+n3Br}^BJhsGd0F> _ڐ3a0=q?` =޽t48K?iGрnJ^K`gKؔD8e֥>xvj@Y,$f!ũrYeuA[>x!?^J}f{6yamwU4^,OZ"MB-}\gz:Wa7cXh얦] r2lN2DžEʼ[4`E2¸[Oڒ-- ̦ Kޚ@]+#f4{U%/Iih|\#6ɵӐҽEcjE/~S(E-/VCnrK O3 ;nx#ئ>lQPÌ/qJϬC FPe+LGcP6qb5ȡ"ĄE9h3Ja^6`%P[d>NKg]MH%[R3eV{`Ue bǛiLVoW{[bY`d+OtbqJ>-#ӳ6UM6XO\'7SB"siuKn%K/դ\Ў|"DgLod$ևs{IXQES3͋VvjuEð䣰N}D /'ϟf!iЯװ_#%kk"evmc*i 6tPXQR:RՁMiV>s5;?ΦTʁբ-ֽpi7'_4bt XzN)|u=+WsK R5J ӝg+ U-іW|~l)uKFbt >yIzFM>oR2vU1;SQ}= <8D&²z!/'A>?.f3IRr)6>qzCaap)swϹnE򶁞{ȧJ 8/vyf> n%h.`@r FًBVMsCVY4;B04~9Aا%ItkU2FjYkJ)Meُ`eʬ]K oqK.>r].y#nWIZz < _sZ(6'm䮷-eM!]yU޷vQr. xY*2yv0 s6"eAXW@ڟ[xKw'Rv J24=#ej|5o󂺯DLwI ӄgo(µn /!LfgOgv$zk{DHJgf3} b)D||i|I+IE_OW.vXUArdnev6([h Zną4g2{SW9guo9}1S{r纅jz\p8 0SSDVĞ5>҃7ڕ}% hp'EfkCĥU1T*Ǹ >hrhuwu( O 8Eo֧>mwޝ9O6=2~p0L 3ic`}߃|jDkA]%mcF/&:O Jp`oBN8W/%mJ,]2Ԡrъ[-g5X8py\eq02"]uyWtkHRcz[pDO!׳d . 7E΄I zxvN| pUBXaH-J?גI< 6ӏNw^o,#oqwi&I%1wgc(}L݆Z.seXg g ~zA /Sc$ f굒Em-M!^e2o{h|3o狝jQbʒRA;!sIYX4YA&*![!M=rvJ2XR*>;C< нɗRSYjv1jTaGccbxZ 36!۵>/%z{miU)::1Z *[ ,=dg1A 7i.8JURBY#_PpBW5VlqTB6Wb~d{?vT!Uja_ը]:gm2GnNvAyf Gpx [&p ,x;5Ɏ Op#ybc"NfSbd3Rꖩ7#$+䶥IJғOq3[Ee3oŔ7yGr2B7YU\#F@qb7x[ #yc"_"7x*mcm9nx֞'+0u"oUF!Ai̐FMfЀ3bϳ1tӺUj*JjtRHud-)QсD RښG@r&f|KK7nn6{(!F ƾ=0cJBNažkQy+F#J18j=Di1o5P3ÏVȧŒ\7oBi'3S/֙4)qMA,NO$p~ɫ$q_ި;Uy=Ն^xp.R9RA}3 q{~'Ͻx |b}=ks•xx"|/v|S^!Y.>U0$2ӵ_B7&J\Pb88y2~X(ZqAm)nn7o#«Fҍ8P\E&-bMa}m) vІU9̃Mb~K4~aj*ŀxexIUyW̥0^nc+O20lc⢄?k,*(=tҘAKX:Y0:일6[BX[yA&Πn+QCNm 1jՅOlÞk̝Of+~fV23'j) gQm8Kv촐o(ZdJл{/Y;3X45 ./ . [z\.HWKhՕn7SpxɖP>q߂(<{l{>VOc1Ҷ잝mzX5&zB*;25|EA}[UH{B"rH!P @XㅰF˿nԠZ: /`%I9s]硭GO[ \hn_C̾[5U -w?΍7d#a֥䌝 U7 EZULOkzT>ˮR0A5H/5 -e@QJOc9ܔE2 '!4QT&B:GuR3 F[.S#z$mt>uGt?crlG] HRZt&@[K+ kS6 &rpX%7$`>]ܤyl0gR05ҕW/"ӊkUY6ܽJ۵('cG!ג.2ܖ)ZP%u+SN~12b+_UP4< ^d8Ow u@XNt.6-]^L]X>wgEh ]/p/zJfڿ9HYU7&NM$k>ok˱o~OaJ}+=!2zJPԘ2]'ٱ[__0^pH7o}K*XCr4IJHR3t]'d<]ali=ւ祥޳2dY[Shb-X` EKt/~Oyu<)#Oe#\43wuqAWkiC:Ui&Bu ֞;x@hK\ Sv,ukߑ1wҥ#%~Hv"^DkSNqM]so I}`-F++;0F@RZLj|Z]ڰxJ+.-()׎r=᭩b_U}j Vȫ$`b?&6HB/tk4_v P`KbuF_ٱ4 ʑlWe{P5&;1nL+XS@(Gx)C2~\ Ї|] ~^7{-찘g#l?L( E*65͖?OHOGn,՗X,( jtyB7`+>-S$oz6Q>|,bА]ey*m̞ PcSV^컓\*v?I''7hUb.iJ.48sɹ>(̡%QiY;Wk>Nj4s)So"e.BVJq#] /`/$!`0n%q[TR]J7lu:Vnpxͳ L*a倨^HUsmP-TUR"xgԈ=ȅ;](pt1e[ѿYTnbK}=$Fz/ jɥv!I|TUJ0ԼkST\0ܔ$)ړI |~6_R RWYcY1%>'tqNi~ #;{m)Bic*zJGZ,@g,_ǫM,RU,2AS"Soa wcr\5jx{Tv7,i0xo(06@VVb}XSޤya=bާNޡIOR= 㡕.Q*;pn0g[:ߋ$rA0Ɋ-ӏL9rU[\R$ o_2bG,=8DD' ~)ՠ܈sx->.w>CԞo n2WAw79Aq 쒿ɗogo7O9=ޯNĐG܎f]Qt$Ӣ>ՓUWVՃ^Q[+*v@P$A=WY7& VM.ryyqvS^NlU:zB)[iA]%CToR?e`M7_WcmhϯDLS|\;A!=z||ZM.[_x)䶌`seaY_28 ֕AkKgO6]2䲤}xWvw_9 G,W`6U i\+VY(Otr[ "iu FxR1ӟ j{-¾y _nSA<#N:L> m7&zzNԖ%9&J$ n1PA7  N)4Y~XL_fitrZo\QfS>#C!"@3 =g2TKA}KD)佗j^;Y/Ō^\m^fqcxVd5j)k,%%Bo mϞN9T PXޗR\:-Tў"_bxxk%P,ci=s"*xvMp )ԛ{ L˱oPبԵլ{c)as&)HQ'TO HnaUx{Jqo ]#eڮFl=#*Y ˽mZL7.蚄ζS=YN;KstX9r-yT-{~{Ӗy:l Hx- DuIL!/.Es'0U `<ӒNՊx9w!kM7a#C MA6AU2ò_ȾtXN-9Ӊ+Hq4zPO|) 릺2Zs\ "SU٧ʖށv%30N%)xX.P +` $ }IBo/kO#u >e"Jָ* Z!t$%N^_G;nwEY [U= SɊDraA'KA7z.Vvj`RC}+vJ^@40>xo, JXj SS&6r̅bU$]:j?eM, ~EkM 3\U;ݹ2Ca3+6(}_ ETH$Ak>~}_H mg+g MB=[.Ics] 9Sx'SY UdSwKE5Q4ޝZ [:T/PBrLWtPzہ'R!:q֭.%e%+"{6F[UsegBOCѤwgVO_x,''!q4+ :~hǛn42,?Ы3bUTQ؁9)MbU1+W1-ɈݾY/땩7}%:&ݏ4_n cX&ߍHۑm+u=[:x-JR .5Flk`EE6P]Kp}E|!-AN^WF5d<>~|ڦuU^5<݉WnWwYC޳][ j;}[J :Muy\-z,n;zCxjIRao%aH:ZbM84 Ɛv[ǐ czCx@]dW L A硂u)U8߈nU8+8Z`'ּ,8-mY 3g)Xl֕d&^ jIMشܚISœxMCg;F6 Wz+-$c j f׮TK/i󥇎`IjݓQo j+!C?m_̜'Vg7UYΗ]'Wjja[*Z;,64{ֿjYzM60$RS&{$K}]MB'!"l\ik]o9#Su S珹Me!~L4=Z\= UJ2"W!>n> Bs&k4'7fzvfSn$kD2zvwFsMpCM9|)ȩ9|ueږ&19:K?ڗCn]ھS,==@Њ?TëLm&;Õjh- 3SKC܉7ʾkv@f#|)}Z xYHhfzzf(k,y}==yS|KiKY]ȦK8+}cv$!/%:aW#'e3mXob65lLlZZÄU>3y57,A1J8`2>ċZXIq$ڝd.N0iとxzLW]}8f[=%mf}zhoP?;sZCJ cLS<ζ7Vˋ֚B%U?6UeD8ʢ6&uޟ*tRh2HnUyBslkeHzn Ўs`A&9~ UX 8LjÞk~[?0O:ɷ܂sKLygdDXFnpԖTj ]TUF"wiN'A M놣-!r\cG!pg#RRSeLeUY?& ߫aOlHɏ(oe2bI<~DUQ{Rl!Pf -zHR^tL d^xV]G$|7cGұ͉$b, j7LA]sƪqH31d!F^tmFW "˙)pP:ik\TuBbηu$keVC,1[nՄ#$'h=va,cZaT9Ĕ5iֲH^=52RBLΎLjCSu)bNuZ+) !ԫ5YXt怰ڕi Md⇡g+:5EF3o*l(z벩_:yQ²$<4R7`?+:'Wl"j ʫjk@Ta^:6':a͒-$!Cn袜t6e8_<IZ]YL`Y%jAT Qr;i%E7Q&_[8UfC`3!fu2z@b~ϵL{,[CQwXm) 3DFK3Y4<`GHI1ov=vOSju.1{"&Q)I ޯM!8:q*1J'b(o5#vz0nvCXL+c$`W8n;;iT赠<JH( ^Śe|>/OMk҃)M^%|0=Ƭ[4Pt#Ie$y6NYG&=}2+xѓ4]ÒW(g.b!'KUJb?أokH3mc6L] RD<&3m% )G}6kKLf>H{j h+CPFֵ{ (xFHp1r|`7AK92ʼ!Q),Зc92Uu)8ލܖtQQei693us Z*.,2Ԣra+4 Y \Uն#Q5SNAfEI7ܫ$4<ͶѡޅY9 G3*ޅUw{U#9K=(_#dGK!OtcT,-O 8-`s15H0Z=OUPCM1l(9_̅]a 6A6I. E3SeJ2.^8e|z<ǥHTȥ5~YT-EJmanWZqat]0>LSV{oPc/ MR4!z ;%$ nnU84%۾w bRP(A/<_o0;ⱄ˿E u+R1{۾z h=/.yiaE-RL]CZe>f9sq 9|կhh|lOeaV!ff=['+iN!y*0 5Q!lS]ԑ`*zR rr05Sw\:􌴑hM H zؓ.lWEsT% %Z8pkðZXOr$l9kա |-6ߘ^]CZzU=(^ 7y VH$T.Cm+Ywɖ̝}q%3x?K)lP(^0~ű: z޶@ yСR{*K}:zrFHă+Ԃɇ5޳ 7eyA@Tٍ5K05X~ld6·ژHΫ5 Ӵų0+/i$4Ոu^M+!F,bhf-O!/;s< mm1&Wk lO(J1g{U,dL,Xw̷EKUzdb0w/xkOMh}ͧf&z?';c$g#y_s+AǴG4:[ Rm8bed7(ޱTVHm/S.W. 2Q6|^"k<&8(?;Gs FClS<2>~&oSX;\X쒞}:=!l !\H:YcbqBXy\e@K=VxJ:TN2J PcsB¶gK#zmE1ZH9ԘA_Z0{!QJʘ9*.}?_a>V*S])pk bB*nP;d:vo8ڕ& Tkt| @Ҍ!im`TEKFeޞR+Zͭ1V:x[K $t=#M%@vҋ?bbi*tvjypcJOn,Ѷ)(TًiETDuty~k Gk†g ~@ʗ5lM.yFb\ O/]W 2F4? T[#eiK[cHpq=V%~b)zFCk*md `S/ْ+{/)scyЌ'ԃIa֡2o>XDYY3KHy> jEn@}$T5>c+c5K×W^]$^"3'rϊ]5;|}ҼHibd'&]cH 0m/ q<ϡV-bmVAы.z֮n$.:+i,]TPGPkOu?_J?(U(4o(yar:0lI  (/ ѓZML(y]KW/d$qƝ(%_iU9$?¶hψ&|_Ɂ w,@G˲9>rd0%|UWSJ |f:&:?jZmbTCٹذ/$W}IVVD^Ծ눱A6y&1# b1oy +4"mE]⚇-mհƺdۻ.`Z8Bդ[\[Zn(MNk"EȘX$m= oѬ$ڒi.Wiz {z>gn4)}'h".&k3Oz䞱{*c2ATY\:x1I3g[ŎIe)UXY:CG]= ų{~}B_N|-OIb hH|F1N+6paFp31.[f~vKϴ/Fv9]OuuVy}}0xQ" @kGqT*:"$D%[bURLܣhImp4`ΤzmcJXQ?gȝ+Z۫r!T*g|Ar8Zli޶xuws*Qs__ d)0{VRPNL)B7rag\!Hl?E}\uKw(\d~Jx$U2H@،rFSRHrK#YAunE +Cۋ{oIoC Hm#t:n"g[] Hryd2na`@ ؽjPi&YlX~3_c:ߖʥ$g:u B,K~y/@pQO*łLs# 8x%^=i= )P+O7?zhLeBUƍxa/3lʚPb,SA +?-/{N"U:ݸA\p] ^})sx-hiZ ?-UTO=PҢW"b5rhp jd;i MA,o ˖ X BMRv,ZZښo/huHSxl"-ޖcv0¢VzFB@R4B3=3+|,Z9zFly|gD?U&7_B`0b`Lj@/I}LIׅV_QO+I` s5lg#ץL}V$>Pc*^PÀbW =HW ԃyf{!(Riz4P6ihi^+;d2eB0ڞMH5&nEw1 CJ}m5Z+Uryx,4tX*9 m}HKFwEna OPCAZK/c=hsce(/ypIJQrm)KU$^{hjn?)tWJ |w@ -܋Y>=Ԫ7-;ڕwMmt-8űgG 4F{O߳Qʹt#d9Y25w _iޮKG&4`ʶ)Ru52GIu~Ly@Ma3,c 7 tKxZv@.TO 7jDtt >X2QKO  =ۃ7&@<{߰hg8ev>ⷍ1$_/$kʑԇm]$]Io_#tzrS H=+۔#=c$v^lI5a!7ySƱ2CXf{j7M% J!햼忷_2Ya9%>G,εM#^nm +t1wQ4$"N,ML*OV 8Ob ^2'dv}, ($!_6MBCIoɥS,pdzBGbRO9fZ_3Iۆ}yYR]6n5! L yD 9i%|%۵Ap-Ҽ  K`PXEfy"hS"Km~N6I״Zkc4$,W^cX#Rh8mU]xO¥wS[r4V\qrϱT/,Oh ~ݒJN6D:)żL0ٺRp+[r]u R瓙O?>6$%*v%nl{[0*E14[0Jk#2?+^ҊE}vqx-Lê,qVg%ďu}4PaaM*{ӦnY|8|tW]Ħ伛kgs kt2 dVų͠R 7(6boR/BZU8 %]5Xy1u_]*ݒZldԺLgk#"00P%.z P?[e#r$ ܉yU~+N;הq Ξȍ`c$2kz"YrHx\e79ۖ "MS-o߅OW* DC?i݀ $ƆncM>b[F^I?b!>xPTP[XUrS*Ƌ+u?\K`Ü-V"6n jߙI<6t(8yME[ko+Kjy"M'a-Hh8Ӑ@HLjSvR1&DT_# [rKtT?G -*̭N`Gf׾pmH$9uGq碆9S3&M #DC0ut+3|O22>%Uo2+"m/6S`pIBI255Nv L˿ bS[隙w?[YlK *@FD";sDž63=X5hԤ@.t?ZyE;Pj"@^ be ]==3OJMKΠ$, ðOʣZ]ʉ0ګ4g ["hgP>/JŎQr hܥ3[ (4]LAMizF9-GxMT(R3TPef j#>C^;^x4&gz%~TD`<Kxc&&+I2'saw;UCdR͉Nz tz3ΟSț밄/+Ԉx֎=Z𵘁bg-x WZh#=TӎYRzZQħ|&ٵh~`ԯݮ jҸb]+ee5Q>ONvJ1`fmS: `}, StЦuRBC#ޓ_QwKpԿ=+B^ݏ/8>&}H3( ׸AAa8o#1H&TPȠ.%7DړBq-P^s+ACTx*,2d#biLS,js^SޛxTsNoi5 fj?z3=Xziw֚6ƒhמּGr[ֹ.:/m1<Q̆ ?4gTc!"<[´BiB rKW֝zy޶tK/h/n*x0-薖ZŁ== V±ZMA 7yA͆^M3YDL6KРGdVqN=ƕ *ytOEr›ߡvV4Dto> wԐ$ԽpSju q)K5Y5q|H=Yڣd4Sk^NQǚ' z׌e9h}F:=,xLQIMX桠gټ`砫6vKpfV\XY2W3x$Ʊ({(h0D֕Px?DJ' k{:Lyub5S\G>RW}~t$bho2䂯; $9Ou?:@`׿Hel:&ST-=OMO*UnSlXLneܚ&xx@Am rھ^X>|J iW'1&u %5"Х\Eлi /%쇜ړXe,~@hSUP*cO1vf /58R58GM bM9I*׷EdN .Qcϑ ݴ;s C j!(呉5Bgv"Zkq'e 媂coK iZҢ\O6JYʳE:*ýTOWh xF1ާ&+ K-ږ!=إܴk qֹڞG]%#5𝵔!ZLQ#ЭAX4R ᖲ-Q\RKwjgu3Ot x{+ԣ]09/ M^aG[=ۦ{0V>Z/NYTM}V !3pnl@|2H<{|XuQ|EzhWw\K)ScEؔ vDxYݫJh`tZLBiXJݲ?!5[^xni{*Q4YoԼxD(t4~O@rՀ"Q-+2]=\$)pMj~25X`l'͍ъE=g'fh߰DQE[vȠ V̾5#jjD?P cnʈ}pNWxyi?6mVv JI}i,{vEG!`:g_jmUV~)9c^ef b?=>GeM|ڿ:n,w;[֝[Amm{<~J7wnDױLP&O9yGxvSNNpC2Qtɒm6S1x UcF*h#YeJ0G+? oJޡN?Tf=OsѠ`}(Ӱ*,*J".FY,'lk߇KOɘZ=-0ej#-TRAt) j1lJƝ]IqWVKq >g7{uV5cՈEػhzIg`k/E-n!a(Gcmop;X̆,t,P'  6A W'&^ݮ$t 1J l5޷ٹt/FWIyʯ#}5SqhLiaTAI܅xA[2kyvoP: ~t5/GǺ }#0 El81S5.V"-  BtZ@؉l}h+{Uάm+sԀY%Uvm1H#Åۭddd&3sRO~\+cdw#k߂fB +Y{ "@P:ALYߨ8 x6UP$W ^Z΄@M lM;|M~ :kx0x$K(þO_؂M5.w)6w Sd|5)mLR! mgdX4fJI6K0{/GP!W n[fFGz1Q>_U!I1VL=Ky7ګ%vvqKկnH"7۠ GՅ窂pcã 2,ծ73w6ho;S[yV]Oߣg!Kψh{O <>~( I$/RD̰?CMLB.Qzۧh4RkWeiy4۷ֹzJ% ./NkVW3#.I d[R9i(o0NkX2+NܠkJqSxQ8=GFԥBRPnxҿ.^l<##,oDk]#BF$Xmx_ ^!Ǘʋ$XɋsV;xM{s,ܺ9$wx3g)VZupIPWDZgns&{VZJTdE}Rq1+:@=d WMRkA u! /#j3SA]'`VcQ%]^lV1| C558B~6θթc}iIoOʠKq\OVaw]KuusUOY~]{Iڊ h )Mvd[.;4D=l大G2"=LԿ[h05^[{Ɵf *X?\zlهO{+?+)$ ,,jZdBvy#QmE$HHdWvjxɸ߬PS۝x- Q 5s%>Ѱδ}fg䩗yWb-j{pT "gi)ܷЌ?/ޯ /&]$*(I LTEVnhƑL\zS f2ajh&<8K6kdI9> j# ӠݡfpBRju(AFqCw+ k9JۛRa:RSpm#!_eVӥxC_r?y*OnlDԃ3XzLYUʀO9.(wHieGBbHGO+<ƕEsذ(4CkY?OJA>uH/ƈ95:WٞqF-ʨ<EhĐ nEEYO?&16pgK\+|,:Hf m.=WGliA@ HLѮwQu3 ظG9MMvۘl`g]^P[` }GdD5큜Pd۶{VA5KVSX/ Z7щ6i QH꽴3{kZx>#'q o7V+F-ÖS}D?6e}'ur<-NyqF8y_5?`ƌ>gC4Myu#]U)RSlGQŐ'A2SϽ zk1rF5بV%2SC6UQ{*Jz:G5uI֓ 03iAҡo"_ ]OG~VIft Ӓ੤ݒviݵeK"WA_lI/i4DR[!=A͗ 4^LE!{i?ih. g2%4/[ҹ[1N%GmD0m9h'qP [z25 1xgW_IuM- ѭEFwŢ쟿BoNL2ENȐ$8i3L-*yڭkE+PÍl3]ɈA! GoW>]Pу0'+AKoΩgc)` ,Sܠ뒄0z'mj~U; CEIDlM]3Mm;)RxH9H~~FwJ+Wg'hsZu#Wv%i ~–{_kR#&菿wH{ǻ͠}Ii@یϥl߂?-rFs]f*|CeW ] [XcݴF+l~$_YGUVCD# e,MKIĵ5$g1SC[)O8'%#Ƌ51 KWkK#?y>W̦@E;=!^Pݠ~79zYKR&uIZ!~ϟړL)fһ;Uxaม |{CeKRR-"O9,uɰ.>=F.``;8.#Ӷg %Ӛɼ[zw6o~pGqC!MA=:-BMjl~R"wNIR4fI[;AvKnU (طLl՚;_+;4Uv1'Ӈ$nC'l_g+ )b@l 8^ɀbH+񻐤6F+?]4fMl^Pޝd!7G`7fj *? P-yXNj nUXƢ8^&%2z^ߘW`W')ņ#FrN}!wsK.c(OIG#Dz#V,= ؂{WB37!g >a$ZyD3teTOV?$7V$5gkAx?#L0$21's\Ns+䶊@#;rl|h@y^j|9-g켮~zc1 Y&s )]mmi(:r홄!|Űs!%b.F}RM2"8\U6ݎYGU6w2(VYȨRz]J'Lz5{m /xJ,''[2 [4 8.Q;Ycb7+giJXc 9s[N Gi96_w*" Cn/8؅YR)-E&05W{Vg\BVGQVt]ow4ut{6hJ.ywO)E}$ݚ)UW~C^.P\P|RP{ǔG;UqНc ?Kt2_zp7߲XUBF[$Iv/]<"{x;iwm$tNZN&OXBAItFoH8w: ]+^f|`r1e6g{QOׂ\tI9ad*;rY$4Fz'|!~(UoyӲLz~c&C+L^G(yX3 jKp3$-l!Ś}$bX@& zy%7%0CHipfF|jhx<3&orBd;u2KԁVZDܐTlˋD?ߪ Wj,.?6[J\ĵ ˫xW&-kEǚ3++y,ztWSk&g UTP!^Z=EGUIzgvܤܗ^ A~y>ióbek#.)O-LHo"MRzhRq PT E?!k5ݒrACޒbSb9?er$A aٛ,vC(mkZ<$S!i4jT&s4kVξMkAf^;Rq.V؀q0Cl[N)k)xN(WU.1 ? :z#ѡC l,#t8 œ J:^AˇA#~5-vlLr` ȏaPJE;X]t$ej,06QB>o$f~R8&/.,_5:)Nj / ZʰGc-&~< GCϮ.S;\&Qȡ@xoAPK5E"W]&xTƦ5|ALcKl̝a&R@to?jc8~l,@e8tߡ X5S K zIVv,`]T@GMajьB*2un'~S6?r?"{crL1"_nL/}8:=jBX!p05L< e/ P.ڻA^FFuQnKy4}hcKFɑTh[ .T9ד&Wz2gɖьd bg3ѻ p+>4=ؘ% y7(Gl"~Y)zdTZsVDo7bQm8֐MgyCԧ*|(>kco-o.[BH:?K1HMՆF^1g^2aēLX24}j P.^aOi=v"J1ԽOEx-M q 㖑(VgV/R%zie)^>p33WRP[rkI $\~)!;-45a/"4FP &FCy'iCd{1V\!ȢЫ6Zm*A %xȝ^%=ٴ)/ќo{GHkë_ GOڝr=Eԗ\beA6UAH%Ȩh.Ԧno=Y$wWa|6.܉-}=9rY{k%RMcqNk"bW26ֆC<[1LIz͆/SCVv_PϺ?jK[J Sh8Ĉ aG6|R.A ͗9%^f]|b%`_IH#9X"BUYPOKrKQ~&[<# jN9-A$ C?T9ʦ[ VR~օ ogu*܁ W{I l2!ZE=u )~g^{l^\ Ja.}D( ]`jȀőȝ0>t0aa{ڗ1xL%NLjc P*\5d%=[s}mGԘ Efq rަg[P1g!jI= Ĩ+(\ ϒzkNǾ*+ j|1v@(u.3e%٥7 #"tOR1V^M4(OR",7v_OWv$_bulό>/vO$.&p쒅yO'ܝ@j!`SG6P jze?L;3]ޯ̻S@;(+%w+LA.ȫb8()̔S-uVz[5k; bz²g]N2V %(9-HD>ajOǂ_(MELMᅄ9l੧2>gfpbWz]d 9Uϕ?Hܿ 5Yu@ϲ.GM\kKa&ZӒܠנgpտ- YN̻Z!"%mÃFJc=i;OZsrMlʖ oB&Q8WȨ*Em*Kj%;Od [%Toi3|J>+TC1p(l( ]ڻ)1BL^8_|0qD==8 \J͘A:* Īa^^jq%tqO>hZꉩlſ%CILעIPCqy{ !1m/8 j;җ&z^ҤC7LVvp*mEۂxLN5䰢!Վgk m q\uQ|v[ڟQXf#-/o{gM땄Dq_jImCLVuG(.k6Ϊm- Y-NX͚ g$2U53*GPY 6dksviJ!ep* i+;l̹5⥩<9Ga2LS:TP>nSrqbVu!NJeH!ʮ5%v)!4t!!̋ʼaL_/]dVx;:_uYo 0uyQޟt-un1'n0A&gA )<>m#,bo!d;E…Yq<IN{^3yfc3NiaeՋ1Ri Џ]u!пoPk-S3 b很eړ7$F+ǎMU+;8I8r l1;Û!k0z;? s/l775F"|vfc3*C %KRZe&'vغ׭(9c#lXG:RRϱe)dOKa~lK+_A{ )/Ǿ){:ܩPlBxE{K¡8$ ]opogO'fzF3$On]A8^N*G~ze\vwOA]igADoL^4bq% ()4ِȁܘlh̗{3!ﹴ$WԄ N>s% ; ӣ2(Q#+)t( @uWnb&: Q5FL 9L󬫹l3 )h=*-𘏍!2[*雔p; ~(kQe[z6ej9hoU*E`Bޓ?̦L~;LnOAyuh&.%-#Mg4ej/N5)\z]ZNQ6kޙd@/4ʄ֪T@XQ Y͏")wXz=bQZjW(!gP3USipA~F`s5gT961u' 86'ajnjDnTI 2Ѕ/If0ۊbD~]X~egLQqZ=DxXX.:%㐚qm)Mvt1m /׻PMêcm8y^)»4=)) ]Iw!%y8 ~!ܽFM֘n6Vy8ǧMbB u<[ϹMyJ\Ko֕5Ʊg?G@cTMρ Lb.$TwPSjoL2'&(oP &HIIɠ{?hWpJvʃ j_ch@F?Ρ+ҫBS5H6Zz,\U6w"OE.ĄEN*VI˱"s?dDxhP/W l9^Fb/ڗrk/#oPKhC?A3R!{W-uIh{tbd &MY xZWAۖ1B3Q\)ptVML=!9~vt(?hҴ]rx_QIQ!c<㨧*ǖf])!+hxtyP:i;7DF/Ȯ1 uC<ďCQU}tu?+:)rj}5!? VrW!VtO}Rc{xmLΧ( `3p~uj,ge~P3.TفI.\Sϳ1 mW'צ*U;]V㗱·7ŽW١tV"Rkԝ/ݹD5Y'cA~Tn"~{0;t${O_))ƁƋ$Eo4ƽ&2d!߹AU"Ӻ\cWA䌝%8>-DS%i1(khZ$J)_M33e{ I,nՀFC2f $#Wf3-- &"AVueiBPtO"LYcX%*!~(SQDC@q)V;vէ1u1sZ8%R Y\_VrB2ADe>-;|Ob7!](6q`Z@@tԝkEma,(MV3LJhjӭwMAݹ.y S=0SVaakvj+5&dFQ{=O$f6yPvҠ eT# 7Iɦ|kzq5zG?ͩ{3[Pħ.[ށ5? -(m#ƕ@SR .g|UA rXRZOHki3Xp!NᣜY]܋LpZeb|<*jj@[yxwBQNa*IUu3$a`x8n+pvDn e{Ѕ1uw=+)Q_P.f^{Bz?Mׇum*o{A FagD\R1`1i;#bZ,B05=ë%0gwfF٭Y4y\+q,b,P+V3bJpD+y>$Ǟ͗Y.HD~տ^h؞(Գku%^ծMx|FzQ4Ikצmrs4wIU#|~pL/Ҟ~'7=piKv.®6zDb^8•<8mB;K;>cTغu)$c`pĤ۫tJ/G=Fs".^=j)nY2b&zZX^) ;iQO׶%Dc3)Lb: ]ѭh:9LJ,KmR)G\_1hLۣU yQ-[^5"NNw77xdl ]Gc:!/'2ݔx\uCZlӺy')--}})mK+e]jIvZBőn'v|RF.bVgrWU&okp|Œ1+QutA()N =4zs,ֻ5zv19^ z= Rl G1cOcicMޡS#b%? %FG/ M@Sݒd3r;.k^0JƋX],F`KaOq!yA-MJ/ + aE#`dwQ6]G>EOߠ*?U{0ͦL >1F} ;-GbL_xf1lx'}eX*\hk8%)%Dž#]:GSA+{W-C}Ď1ԻR.{.zH}tᡝ6|=%IY=y ~bV= -)DۃP{?WLÃW*p+3;B?iRq*G~)O- ?f3< 4(" um6]JXL#bk{iLWR[xe"Q;e7B୥ i_rx6b'EG!"%Ѱ_Yϯ&?c9}ׇw6幄|=^oihF5Ɛ"Sk7 s|lgHԋ*eѷ<:?r`!pSV>d#3?!s˛ :\:vZvIE$Z~Ao ,߆qƃ8 `|TxZ-;#Iga2ta[;tdCq1<4 E  ]- jf T.^>.Ȁ%y{@]dՌ篨<UekCOp 9o,>!'mv~ ;R/S*g)0xzɻ.D-TsZ~I#Rxs]c:s4s,Hv)`- zԤS&[ 25'n"=WCv!# lauϮ0ZBa6AGʳgR+\wO>Ŝ\F3tu'3=u "Tj^5SCCoX5ظ^V=#K%qؽ*/66oW&]!Z䴥^jFGLXX6FaM0FWPArR|1ezY[wam; Rq}Mjւa5$o"I\>uVvOO6e"VRshmiw͓ReF+|Ԕ)SѶZӲBig}*$/Gg5YHHНNP_fxg#yi _2Iw^?҃@2ITbYP.蟨cbO_&KrarĘL:ücf<0.;by&F6bt^xPg}ə qyH;mHcea`)4/mp'?ƗZhZ[WZ U1_qNi8唏[@d+)kWj"M]v{j͠0 zR-&IBklQݬRۻ]?Yik(.R6Cn`7xu8&z2_Em0lzCU#mΖ"eڇQmgP0A^Eʈ\2)؟cm`i.4bzS붘 9;V>Rd-{:yau?>CJ z'u%{ojvyLK@3ϵ%`ۄC>4hɆX5aj{[ܪ˃#0S|V. cV?5wڕO b( )Lhܮ7TٙMɌN$q1@ ݏ&qTa&>K:L]ߵ>>LLXhkiV9I S){Rw sl&oW [ɋӔ!/W٬PIzOY-RmdGO}쬤:|E>j >űkV2˒>?"+ïOK6#SϽu2j`7kk".PM|A=SCl^_КOHiaXG`P,һ&L+a,YLXg8`SB|h`Sxуd:U퐶g*5k)mE:ST: D z.5k3YKS* ~LkK;I88 ?8u_*Zp]z/[ S^V]zSKϱLhǴ$ N׆/={N#vg(EIp I3٠8PO} %1IĖ~οytѓ(A=0lC̆:s?6ΣidP!U<^*)S3cU_' `zk;.zp&fEasL-=9IGo )s,]P\5kO -Btw$jZ=>>mhp?NA]>̷M>Xx ӆaoZB)m|O>{c1+2CgN  Yx؉I9| n :c,20[M֥6IAj&H% jܢИgPgF̾T5>gj,v5-V݄ ѷK9G7z/z\NEl$GoԅaoN06)a ;_"d{FлӾ_RD@c4W%j5/&3XL(ػ 8<Œxo$E%S/|73M~ 9HBQuD 8l9M~f w?,D=:T(:Pkq)x?g# A;JΫɑfKe/Z=|Fz(dIQ/ǴWzMO"%S; \ݠNtnGE ~P.Zuk>r w#k}@E0*Ѧil&oo݅Xk$( "0 u5&𥍝wy%E?֝Um7̓RCj}37ojG>Űj~ZUY_ s _VgVD3._5ۜ*x\7!` .Z' 'u<*Lk F=d]*,[ d_:*MR(ݡ|2v~_:I4sAZ0;eV+gN?O5bzyy!o%Qoq&P!+ຩQIY5=E*U 10@)=Y dxV1,IՂ~U<cw>}xd:aVHphڌi-my^DQPh9+oLxkԅ# &Zew5I &>FXJpG]ZejP+ J"B:ډ{A{"#?}vXTCM4ِ6 @nZ#3Bt޺恎ZseSV'IMm&SM#T̕Ʋx%U)Zh3.L2$R'7CJ4xb"k, o2vDmZܳ 篻]{p9NGK`M狰768&Ko%Xn- LJF ~L%Z]q. # D%㣂u֓"U豶9FH;1KDΎԿcW{PaM3}_rr{>5&(lZ5$bd^,Y?쫂ȃ+)RE?6R1H^% O2Mdth9߿3RL -IL׏w` g9h* x>ҫp>ukLDiY#!ku1[)BH'C҅<;F}H[sk 8> {cKBtg qt[SPזrᐨ.j ^k")㽟 u?^"$B'UYmZm5W/dc݉l!OjÖ[~uwjZ/N4KC{K/U^T5,5kÆ+855%uӚ4@vW۪vqkt)=F<{+{-9K[;wΞ=zrX}1/~cR#5 ҩhJڄcf"f#mrRy]*3(y GοL)YuA$eJ0vפ0s4EK[t 4%om}&1p)йt5à-Yo&QZӗ+S&RƠsPQkQ<#i:eOmAIiС 5gsEIפE@(qLlLYg.WI rtWz,Jz$1+NIAd|R;r R  TPY§r\MB(nPvxCѩ}jO}sHcj׭nm-Y.̛_Ŵ)㡺Q6dEAK)a=WƁo~TE(MD.U(d{J 'l?yD";Ҷ]<`&W|s xpR( 2)_`"536"@729Bʯ,ZP[_Ԩ՚n&Wuvᅱ$_Pv My\X7,r4uHt(tx49 [[}'xOx}Y_pThV2^ڛ"zR†B iUNn)$N{k!EvMXvQ̦u2ăXn)ךE͔gOO#-9_r`sXw f´aѬ!FR  =~Z`MaȖP8; k$)gL 'f~6aj͵ħhzA=ږsܞzs%)}e悹*(I~N5a(SPJ~;Sۛzp?ZoR=4rtM08oAQ&Qh?YK>w[Nk*hWz:ߔKuL4cCjz1pV]B79S"5,4jXJAUKK6Kpf6=*ÕJgKHmfvLԲܐ4{6A ~Ǟ 5nZ%ޤz`f2ϙ)Hp{S UJB{[K8^. #$߶\0HH{ Ž4+d NvEg7lN9ԱC7iM.@(n޳r| 7(3xk56V1'jxyZEFRsYG;pIZIJ9PDa-RH/S {(L"?Z[]gv4YR 5D'{q<_ІPB^9$&Es|;"մ蟉 ŢE&/mR.Gͣ5/_ T4gO0W _% ko=5ޠva 6&̚dP{'wKj+j3_gPgr^gr5-{BL9 Q`9Rϥd;G ss1\^{ӃeddD&#cRG~G0\%zhߨ^g](>wxpwA$*R(S+a >N7ō5472»[ՠע&F vf׮.7o^Wn ҧPk009CU#vn{Z|Q-<:m^Z?BKUؔz{d¨P&`9I٘꧙pp1#wɷ{$X]0t ZI&^ ͔GQޘb}lXA 0Z>sH)bP-f(pLZdVhKNe0Wwd;Fͭ_O`~YS^w}_sOc 3upn+<3 `,}FmD9&rAכ>uwX^dX?CE5mu*k`YѠPK}.c ItցΨ D$نkMߞy'$X;bZaXJ~%s=K{S.阾㽫@0x8:WUnkPR$Um_PZ(u^sn:ej,ԷZ}r1EN0M|}{ז%$`6Tw-lC|Յt{M#\(Ai$ƚrk ؚ,( ()?)4D$8GG,xyQ&kQ+D7ӲRdAdrUzSj*Zg9 IH+j72jQb=DZfk,2SRk*QEFol盷OJ4ƥ>t?~k&lXu ‰"<9B:i Y.o-IQw'"2KWGApeHɣ xpHhVŻgibĿgzk|ۭk X5xrT_P7ӯuj j%んL)Iv/ܝ5XP43ylLKM —,6)Sweq3kbj%=gcLY-[/29vJێRKoK?1Wv5h__1"fj|/D1~ ~vE./g)CkNB-Քi@&IUcƳ]LzWu9snɑfFp.wBpI'fg"=sn=#` p$=M 3߽-=#1>Q~^y1-!EB]ȷKH%ӖqMNwn9+ŠeXq59/\@Zb-̨-fOoL>m1{=0ȮɧW)p$V QQ 36ayPkeĂ9ө|("Ҙm]zPX;}%Xe闰8y+B I=9i+CBAEULTq45t@"K,_{zlFPeꢑs7s#L;QoL Gi?GK7 SѴ$хfgbE*$D1HC\JM b_3s4SvzufD FMb[c\×#3Ø5-$L$h|'хZL2j=ocM5۰d2=Ozs4vD3ݡJ)"b*I4R÷Qtf!0Ymo)Eap)+$Œ3*ڋDF2zS4jR)IKqb:}:l#HJD)iiRuJr3Y s ĮYyԼJ+amCZROzwqiSq„q?p=0u/icx3^Joؖk@5h'kmܮXI XZ%eR&V\?ݮYҪX,mE!_ou=^;ރb:($h4j !-R8kuc)ƘZmx |CZȹ/EةW߂, wXԣ r.1;骂VHԘ/[ 熇I0)/>AT2aBa~Rj{!0dQ{Mt"XCj`sﶗ!-5%nGGKk؟EmJ.=c:OmKު-K^6ݒrq]>hP*/:IFL,[CZeC!ĈBrA}O)m$⹝C|L?O\:G p{A=r7%\㼠 jZcP/顆YQPۖMY*IjXQ篫V8"TϑȘ!]Ԏ7&g,rݳ%baF7+agսSC|Z"VIk\qhl6hێi,S5?L 2sy M;d(ь0\#l5M<9ۧ.l6T/r*'&[0SR)?ZUqKSP[^9SWIcL`,P' > du1$͇lCIs9;=JJB3Pz%$I2Zb_]JM0'(쐏[y{8նM#aB_"3:0zy;|.SzaP8#=;)G2 OQw5i6PtZ4#i(jխrGY g@njU?u>|5LֹZ"QR ng gPT,@G ,|0zL#֟1sꕯ)NeX֖r#%Doq%m9ގGa|8/FQ۬"|uS[d{GxwV!)~T{_UB9S5D3f@HV  ?0J[bκm5YA꧍܏|?`}2±&y;?:t,̵sבU-I}42U\z\X5>IlUSoU[K*wsFB3m]dNMVHRwdNmиcXej\%`7Q׾%.La?A6g-0SnRO*9J^=kJ;zr𔙬K0smʹYHBaj/ߓLjg;VJ.ZvSPc7(g" #1:x)Dt46䢠]E85 |3 䅰^\l cr26 IpDGjJ2{2Scg-`|4,ؕ`v–0ǒKfɞ4[)mӋl4N]p|AILݝ6 La^NpV ır\~gqx^S$ 6gd>[<_Zj1Z)mOV$E،iAQpՒGD9g?3Ǧ{*6٩JEO(f)Rs֦П9RYNrHSĠ^q<;Ycrj,Նpѿ w ~A"\ÉL]o^ :]ʈ^f4sOevFZaTF Fj#Ϧ' 4oTߎ,o%g5B'G2*ʗD13u QXd*ۑ혋# sWS< 3Pʩg_[_sIi;=TpwfB5 'a+} lߠ^!S'F'T.C?VJǞ_i0b@Y$SE$.N*z<41BJk.jZS312C#ꕤ"[Fl<~  G4}T%њn\"/M<ؓHScmc'rez^:п6_ܫVLevQGAm,Pm6e@K}$yOO%XDP"=hLiIScfud^;Ru,:u;s4t1W~̞.ЄeIܐ.5%>|-mD@8I M WKm#6<;1D*\y̝xmo0BEcZ\E(d&FLҖ# OYkHRڿVZ+jaoS/?s>BS; 7DI~,5ԃaP}ɹS ओnߘ|1XKEZyǶug@7*q0lhLX3V&5MKbhm]ie2' )dI:' U#p%!DvP>BܳQ2< S{aƍؖ| 3x0lyH4Y x)yD|'2+܋bB=#;hg j,20UCn ~^]7 :{"t9H% T@vm8(I4sHH-Wi =ɇ'[2 i8vmQAxPSϭGOBIAyXS]#. ޶ ÷+>'07.5x3wD"4ElgBJr]EV2'%"HV߸Ku1`d D4{WEJ⇜bl]xa3M8fI+}:G?6;g +Z'ԲӾhܓJ1)==.T eGL2ִRa;;pLЍRˑ2}uSN^V҃.Wļ'x~ d<8 Zki]hOpXTs195Ԑߢgit]Tv>rKSzLmdI> 魞ߍ8oZԀU Oɹ ~QBw񶿽Nטn6 {O&գGM04<'3;wD^uSڮ[~Rk~Q:x 'i\"-k:Ủ}pr o15UvȐZoOĉ(!K/SR$vipՅmaj􌘩2y18airI'ˑ q<:jܒ#*88q5+_ne'|"~x8̘4>osgA鞼/Z=[I&P^LimohLj9My]BzpT2pdVcyȵǛE_jZ{꧍+&1R!zZ>k ,{^Iޱ?ː"r'QI;ҠpJEkpB%x>WAUTK.nbSrCoOgxcZ>Ĭp/=>|Cwy5v$!xqz}Vx$J9rm!=&̵7#+4ZSeI''yGf_!9PPz|o1A5" /m''veރ)8oN/Wzҏ$7(H^oIux&X:P^<8ͰL WZ1%_Evv91>1Sb4]`)[ $G=;Q/,RަL k;[n,/jo kND=Qh89Mrܖ^zC^gj262GbSлUm\kVg ZBO⧈ c'!:M,}yiz֔6"f2'ɑ[XG>$Te`42CʙJ|%}M8uQ{r3/)%wQ>JA=µ4t`׏e5͜;WK-Pe~컛[>q11("Oa:E;g}cȞ-gl (B10Ӏѭ*[3e*XQ.*ݢDSN'ԭn>S{$ђlPXշ?PPw& om>jCbMA ~TL.sv4o1v@LNWHΣsMI%,;.u-S{9& ڍڑgX$PfrUfƶid3eTB޺¦.K.WQoFO CXHn`vSk\%q]}PfQkk{d$Wį+VVim${6]*H4v”Ez5wZM0Z=P7{uTN PN!z,z~>ɉPFyy|L |%a fXxp*ҟ%mvG6pdJc8s4DWWf)?J}$++ab6uHsBTʳf\5-rY׼$P:G<-K6]LkOtl`_w`Š`PfJ9&皜BK_rTКNjK`" rfaP{wa>}$+z|t^#B։3i_È}QCv&NlDLtLup[-W_qrc IZH ϕ2bC-t ݡT[V Xd{tL,+'|!P6;Ϟ;g-o?R#B3q _3Hc2m8N˚AS-u SL:y/ܻuڟ7ty#繖a;rˌd( %gqrQ!'K\[|}httd߰CK(ԛAUۑnʩB{l*yqNr{>٩:^l+)1$ȿHxaIV LMѬ 'ƆGU ѐ{7  n jp~ ->v)1V$LiGq~L5ج@JMe^DxpHlu*orx!.\>#Mε[p OC=.N-u@,%NAH(zVAuDݭccICC3%y ԞL[핮^*X։q`*,[hC,RrnK /-f 'tȿƂg&s{5S ~tcP&Q6-nP.w&CZ!#SKQ@CJYwc)0c1J #7p%{uHk'Av5lwvg3TUC+E+cH(liIAGP,eӒ - [BpyߺM/YV2GZS ^hOď?I`}`nTcu7£ Scr_PA&k '%jDTyA>Xnx][Rq_E* \N@JFCpVzg02Ia4pjPK͝q 9ˉBS͢z~qOS9WǍ#Z 9QDx) 9]I*@KQL;Ғ7>So)5)~ K SبAI`%LE"||/>z!D\fϾV,|.xx:o8+#D-(I9|ꌯl,V K6|9Z˜)Ϧ!!vXk)xMrEu5/aTU\a@{/ajOB+2G;+`<#߳ VDuџ@E`Oe3+ڬOI}+Z #aN〲AIb{+^u0f :&>`%"kځTP;Tz/a"ZԎtęޟ['c7Oi3S}a2 ٟ\haSu9SeJ*l<ǥ> ܂gW)'5Sc)>x͸A8@c4u?-rL4|u^̍fJFr(N6|pDo4su8$z$[.GzR#meVx/|sg_sھ'tJ##p~7@?tACx6C,qDf*ʼn#SP.@gjnOV4I6`UW3ZU\ZVtQP%5/JўrRCLP5K^%5l¶9{lhKv׼ݪf` dċ:e&囌cę-ej+wj_#+i-oc靪>q̾(Kp7^ߠ r^o:'[,m,|qPr- - 7.FKDL":E/yi*f]0^T3y\[zE5DQSaJ/hI*!,4Vrh"a"S.h4r9-Y!XhЏ(TTbqUM4TcWv4-9!4%JF"\ RIաx~ "xm/,2x~TOHH/H҃I^3coDCwYrΤ \k5tۉ7TP{=L=j&,ORӷy{ ?P/$K$$԰{P~u-S\1(1PM&,Vmc>0ӀyCǸ"1fʙjG$HdH*~ ;b Ͷ0J+ (?PG+ ֓.C5B~ iDzfȻš·zZ#OA ̆zDo]RqӀזbj?G95?xXfJmsՍ#Fhqp% EҠ%:v*v@p;KMYGW6chia1dRjzD{cMUc`]#- xnC%1zwj;|̦Ӌfj йIkJ".̧VqarHi_LVW';5q@ե@]AM{u h*'5S0^L:CUPA; j?[qunu=Οos eju"'!ejy96F!Zbp-fih]!.P)!cUC3A\RS:Ѹ5K32 j6 y"c7IL: `>{|&&[M]ghuBQ" kE+I!fӒ?j8H]%F8sŝi@T3e죦{ZXBĜ ma${-ZX#M/3'YiZ\SnbC|YgWK /4Xh2>Z7\]"(;/Jfߋ#U;OR\p/10DXzai| -Vʖ*} h5PuDml2½|3a=-zoo~s?qnF$8[GMBNgV-¢3)2zK}q%l'=?ޒf; B!y]XbzGZ f$h;.3P MQ"y#ޅl=#c$'z`}׭_4mg+GNR!D*޴_f4z ٚ{|'Edm{•1є7ߺ6~mNMfWSө!PU.fZy UZ:MʒXvY799c`) Bjb$/ʉͳ7A Ɨ֚OO좒>n4m\a^~'u%}V€hyBw d+ ASl?1hWDTϤ2N_DCO-JpbƞCVFm# l{~ʵ8Qr9לU }~bpG댟Ջ@s0T$e+ rކTd?0aIt]ȱ ]AIVf2M,j7v"zR8Dr'#n|4!ʏ^f F7JQ-$ V~Pb[E2 jmCg_|bKC?clk ? 2wXj׿~`ۢ@gms2m &;EeT.KE^q] Y}/Eœ2 ji3%ѥ\?IMatgF4 jC/2NV>(gv""<ݦJ*@S1>Ɉȑ/two<nWޡ;c>2Y,>XC/UHr S?r$3Qq*nsV "o%w1sw\&%3ӺJ,V?"!$wRk2į@m6ն]֍HM$A@ltɔ) Pl9:HR Xp}ŝ1 A#bg|V6sCc:ۈNq/͔dSu;kcD )U%>rovmz;R"_Dԧ3$.]7gdO}F>a'5Q 55zAb|$B8ÿ2%+osіtBMv'בcG?=hB jh;TE?"z5wҸd(Y; f~Zop;%_}L?~Et0O46keb V/ Q3l|`֥=F`vћH#d&ĥh`q{JapVj=.+W|8WWs7Ys̅ /|n,EzqY2A+6, 6ńW~+Ld7obcd'.a9(W/ *U0nO> #gE?l_!*swʝ b$g-tXz7a?qi CLE6OnψcN9L' ۽ d"]!F`"J] v\@C0=4*ǜfm2_I>>03YdO ӏttss)N9l޳} Eyj-SoW)߼8TՒI35 *WrŰEl쵄^FW~}oVD`r#}oy,Ly^½,G aB^B0SVyCZ} 0tK=ZQh":{PXMg>i'7+$lFbFrdNCvݯ4_P^#+R)pY |=7 uq$lhԽ&zF 6~6G!]XPq涼tW/@qvu:7&Ȯ-x';ICƁqUj6GQ'JUW-N ˇӘ(ա&.s_/fj0-l."GX<s+6(]to3zyiZ9Gs\75~I9_G )d8ijFqpmxe Y|"k )ѽ}FaW3Mz?kLoY/3jJyD=VK%+eM^I/< 6oœA`t՘qD)t@d6pKX=#$%$hn?Enj8~+-=,wqꝔ=-?bs!Whq]|?PG:8Wk]9q\v,`_p).Cc|MaX8J9Y QIIؾœ@6ǖDq7wuh"#u?ld۶$+ `ilPM貓yYDq8l Zёnmz\{k^3xUn9[n̗8_]s9* nrT8^̣S|*eKjUoJ-ENh7氬85ve˻Di$7Q#>SŴܭ@ @ml48T8vMwK[ڜaJOlKw[&R! 6Qވ,9opϜȅF+XaL)Ҳz:a|s,5n'KJQ><]^M1k_Hۙrv<uP!Hw$+thw9T,Ս-+ $9 {5 +ϥF;%ZzE Kt*_MIJ6Ўg9rUJz)܋S#$ W:!kq4Mk@1.20 0we86VY"J{%`= 3co b&ՏsŴ.B0BFJ$xG ;MacK88'AzO-_h|FΒe8w{И Gr;lm> 6e[!=';iIfib?8865_uO0Zg58:X*t_z. +;21JV59(q'YR[NI&֏ {6_Q+VqryX:3v-&Yq\Y_W~m*D>Dx;Z%(dZ^۴Ʋ., l]^X q)lP<U=Fo*&q*yA~2A(Tɩk7&uG%=9 ֜Ve얔VAb4޺~x Wo@|В_|>q͡[īSR0]Hu~9[b:%,K|I8D=#8c Ɂk $Q)p?t0>G'Rg}PNAMǶ7Z+P_1O1RW(5/ c]r2RƇWd}܍YzvAi=Fd6iT(:kc γI%>eMt;Wn9H#lmt'?\|颗0HoOCkh0KԈUz1,q!DԸt޶*8&-[RU<$|_qa'}*omcώ~Ej4uiۋ]\#r|yT. =dTJ?Id&#"_ g9 *vEp'GMH,F=7sN~5J1P٬Bxgn |Q9$`.Mh1P[pW"v)}p Ix(@EܰRw߼'|U+Ng^Ҏ#D&ݻp$p#{uKNC9\ >g1<1˄/l\ڥNL}~tKLoYu|ePIJDXܤjk#liLϩtJ.uQ*=&yEסoԸh]g[ĵ{l7Y|Zfq黌Ƥ|n7` zpfy e78 ֔^Q&bgQoIR9ӝ(6,2/۔V?8㸉1D1S qp<"M&xVxטkԥ8Fԧ Rt}S&Boc$|uJG?J%(+M#TE=aq$CJJd!߳ ~ϻ|2]f; ,9Z-:B㐯">)7SBqRL(gm1adƂQqt> _2G] ng VG+A\?%lrGtκ+8q궦of=M8g5B}(W3+ FxPb6i1xEmA)ߵߜXƞnq`[m:3;< C%-"I+-I=>[R5aOZm&6{~v{4? }%{YPCZB] 4jQܛy跙U%3X4sNM̯1?Pcb~~V[Q 6E6}Ib \tMRH3E~cuگׅ[yyi ݒu(/s4cӚ˶DjvG5IPC팱 3dھW63;n7I1;F_Β#6` CJ γ6tF&VkZmNŒ^">s8E}~+ j}q@{L#W0,j.9iւ ?iӆfYPCJCNY!!mm❂$F.P;եKey` Q{eE onG<5HI .}Ӕqԩ\,yKl3` ;v2_ܘ`_ՏV&;p'}mx%r..<еޘ(Fptp7<:Bdn͕\~Bt}s{ ǘ0ag=N}pO4ٖirT' ]`"CgJ lɧ@a(ŝ+Rv>| [x;F0w,S=5瞬FOtΔ*`!qIϳPdH8tt H0ni k"p cS ."mLH?0.Sۢ.dxDB eE`j5/d >:چXTT`Dž!rx e#_87#1Qf]}i8mѓ/;Zt4Ery sFsyh47ZzfEP*pWuo%ǒyͪdq&1pY 3 [,~n~oy;MHXRK[ĤVjcG8uDU8ѕd5:;.y #uD蛛?ՔO(KUh]s:\O).8b*T PӞ$w׀yƫS^Fxs1EF9գjۥ2cHF<=s~~o5RȖzD }O{i:n0c 谍No}F\/0:c l9RWоosAusOsJOa2=cmLbQRnJCRLz)1b*4j *9a4b! )O!AGC[݈q({O~ 44"`X;$a<؜p"sa(uSX𰁼 )`gy8ôhH#9 E :!?pg(>L*xpG40z82K1D4QBPGrh1Ch6Fڈ{Y)r8(x ٽ{XIusd _21%t'pJr.W,.tC"vI:HaY5;&߫c%M&A#Tz]P.-R%p@;pѼGQIa܊& ( 4z5b7Gc zioP0 Dyʘz;dM :DXS/b6,2WAODP(ؐtAht\OU=WUC VT\CD|4T_9l*9F`V&,\%?IELaHjѢx̽&!ǜ1U%SN0K/CSz̲N H=_}n:C:Cg  K>C:C:@V=aZ(w߿eV}9"Yt~w<}ҕň`;CkF\=:bir31*" YnWw熱8?-$8iGQ3t_#WmOhquwŖGl_,峩ӫk;(~1!좗Ȝ 7/]f${0.c=|^z'wqmJj>N^nȭ^v;\[69p>/l ~틫2_or/3gol;bR(g+iҠ4#d؆.z;_b.UKіpW9A$sw/; aAe`nܩgT9pߏX*1%>YAe|HhT @ Fω$]#M:,"C:PFÐ1=33fiMA688?ZtC:=M,C 9"JGbZle̕A솬.ԣs:²d2>((CR{QӉ׺5:Q0A*W9Zqy aTf)RtR!4D*9u0;/Ӫnh2DH.NP7A,)a2) >GHeke-X6iyl>0CHZ3{Ge8|Pf P_nE?$ L{Be:2?(4StW0;IO/h Ҍ5$bGGPbeq!se8|P萡`~z3;BڶF JMi9:Hg#,U.^c 1)x.evHL6!͐Q|X+bV!ɐA*u}^h H+U2~`t $.%_TS3ǒAɢiWB~@ޜ+[Vr=[MegQ5CC ]©9჎!i8A}Bj*ხH%g4PH|0FnN/рnA i_@ SasuVzX{0:,a;vd8x4'Dt GC>0Jw6g)D=Ή'@d, $6kZJaAgi2jcR ˃ػyHgì);€5c>բG0 Y@e, Ubhm"ၧA;fpk2̰)xuYY!FhCFMCn\_x@&NtƒP Maһ4äiИ+Bp;1GGd;UfiL0:zmbfSΊ`ӡ/̆j&omf+>-1,ڰ#wLH8 LMRB[j,*DGCQCj.s*C<v3w>D}6'G6NW] .d]4| d#ξiLj9M2Ͱly}*' ekF'6gqb9E00!:M^9SiQl'y!?6DsM96`N2JSb>0d;d@sG !X .AE1 Ef3cLK}$SRSS`N_m{cVL[&ִw, t2\X4i F"[Ѣyajʐ-^ <dXPfѤ)y$SIfԵ 6j4C 6&;fʂd6\ɆCr9~/idD<--)p7#&!&rιϮl%, 1QC% d!L@~7P0Ҧ`-]" Ҷ(+TV 3AlDjxi6O})v6rϢg2 I,6y.{;ZTZ&qnK u|hdhfR[$X [H5y"iXiX`~L)5'Ym1>K6hd2Ȏf/6%Xfԅ!Q1Cxvքv*&Gr2JlFb)2Ĵh \I8U6h{LE1A1q8jS=6|~hbY֣@)oŇv:YLKyvr%&MK. "MO1o)5F^\ Z..ZJDĥX&c'eן-Gѡzp\NǸ]%DPnK+&)n#<@}o1b]^Tevmsfwcx4U<# Fixcɬi.n[kDvgFAJ͍sF0rQ${s Lݤ Z*b}X[U>m(:`@SV(v \mŤ) djJa3Bm̟p42EbhvSͼ,nc1XfƮeRc9C,䥫^@O`sNo(Tϒݜ'6J -ރ?# ]ȴXiY"G[58ּPjL"lS82̍rh^i29I\"l#f^)b(uv5 eSsR>q/8;+ Ucab咴 JzMF[.0oC`Ը(F́pUVpBې-16 pXw߬]%%:Gب96'h&\ (Z4:Vaga*ܱoMrY'+PĹ Via,7@0|4C E k8Ex¸Mھ|c@ҊS\* ?_ r#QK8ym7)`0#e]"v+`9朔U'0'%'F) vjLeT_9%_sX *}F9(I& P>F^"6{*mc!4m"+p.44 6F[w7$) X$AzdDI{1rQ7 [nU i;pk8`Y Z;$m6fÏڰ]٩*h6lS2Oe!CDCCUv*cf_nY\E_O?4!BbGVWDdd5sz~̦fwgeFH8N"kd# I;#a}D%Y @O%DόSYtmKfՍO,e^a0_.+y86˱&Sjv<>-Q%;gi4>)y'L!Q/6^P[qSMa>;U堝0kSC$ymmZ-W3v/q@G^s^H,X!+& c7ĭa~ =)yqDy{%{sbb@qUXbb .ǽ E"3=&$c9A}BGf41Ɵv1ұnV0瀎0M&$ᇿS8mX_%+9]bkۄʈ^YbhmylEJ!0%6L\n^JN@Drwi`6fYb5{Jlz^9K~'OԂ=K3#EL>Ňid/S۠LQ ]N'Bp얛wrR)dSX߰Cd^}4-8iett-u4cޱwJY[qHGb(DlJ i' xjydVlO0:iD'eayaXG6[#0IkpwV,1'q:KaEL!}>bC]ӷ/w0s$371t vVҕ70KY!4z:Io"5}y$iiDt/?V-S]9m`oEty8ZE$M3'Sk!y@&ȕ `7~-&f x]ꐞvJ|'Pj0]3ts1u;L V>ǯ W6BY1~0H؆QYD !f($oZm%mac"|>x!y'*q)9%Aɜb|N奠!=nOeԊ"EY^Q41PIMAAhLLwgbbHj͏-q7#8<81e({+kA]OpX^26x#K8bfHbu'rvsmO(:FP'f[o]>O\l\Ø9$4x] y6Yp G[FhCNF1Yl`1y^qj)/x~[x\Yyl+S&Ǒ7i'UV\qq>~"rV`qR? s"<-W|M6_è秉[Oa㌒2`KIbs8`GEZɅavLX{}/8ܣz2W"OMƋ=)?W>Ft`݄TB"H3G0^lޓ=)#6=k-|{3[Qp<hGXaմf`Cڭ/i/=) {:wq~eԏg;c8^mry4IfhH& %6fIuvBBiۆ/M;aluYA9tz^ر{Id{xfc̢rнը3fQyCu {sXo7ؽƶҲ#\vXA:ؽic=k4 >s_G&+9$" $VR'u)[n&㜓:UćP).fkC4S" #BR`%Br=* $zU3,bH1~l/ qg ;Tro"0> ۄ`"`;>;=Ok]6(+(芴%b'rт䐼6x.TKށG9'oY9C:,1%?ּ 9 6y,oJR?qǏW2TVplH,|"Vޓ~yEʼn ,mkV^@iԍ d띉 b !Oܓzfy܎w"]'8uI)Wx$䴪.8y <;~'r*T< Ŀ8n+ xܚ.8|9zȑ,+m_q7x9|(+<m9RyI. y߉wyn'u8ܚ89s\nG*ٓ"XegS D6澐07@Omn&85Ju^M!''`! ;(Ez.84i<[J')ktZ^2;S`$m>ճ0eاW4UO^UڥX䘁hطlOEYVvܑF_ilcRN/BQӬJNl {ufcUtOOft4 "COf0ژU%zj `qESKk#}CqݣׅM-pZ^ f=B"Z$N jX.bZUzi۬ֆQ:,K4Y67`;IQw,%N|z?Ԭ+[5#a][U,QyVc+]Wk6pdūNg;Vol9U6太ޢgLE|:"Yl'?hw>xC]+Xp-Oކ]O˓ fn˰Y K'z'mn񃞛T$Y $'Ɍwf~Z7^U wlQ{:E`sv b ]̽J{毝= ,Mc` YPHDwܔigjqvHy& !UPUqݙLNu;M!/Z4Fo-"KeOfp[QmF; ?W1Hd_mo-:+Me㟗.|'.ͼg jE}NclֳX 9æ9^2usw !I[m[~zV"Mˊ_ 9XDK%Z;L6I΅iPI?m@+/LgiK!sf񡎾6k3dYO(69+^@Gk% SF3ZDRjJW6BKk:/b*~h=\vR{f]icVD)PS몊P(ϳ 0JZS1c)hA3qvsnsgԺqRC1i=r[| d,~Ry'9wLy ҪGu{DfGGKpr[ v+x!4/Hxc^>MHݳ'mrI`4kG^exm*KoY0<.-:QB#IyOg޲Fi~ͻJU 1M(V5[OLBCVyOJIUf#8!v!<1q<ڒSD1|pR`h'TWԲ̺>waDvbi=) '6)㩬|BsSu=` |[Ff9~?SzV: pTRR?w}#W ysAUN/WN^I6jj^ބm:X/HF~א~AS?og -{RhUu*G-TP{gIGܫn=lj ac3ckȌ1.ܞki4)~xI+iR OsbmiDJTf;p&3uK*7+l5Wh bЪ{RPMg%逦 ۺGfk[i gAy[H؆`!䮄RէWfZ^(5mOJ!M{R宧I}]`M^ ZMcXv~X6ciT5=ؐm8\B˶d]Co%I:{1yҐrx^n:x.6 Q2h+얈ݼC忉=~V-c'))Gr!Rh1z~kPrJk}L;Ɽ^%ǘsIJe)@^'S[o{mO!Ţjl7a 0mMR QhA4yqv7 }GqlUЧɹ3Ѩ0¤R5Nmv1ckYqb0d[nKm^4{o4)~xI}+ OxT<%C^e7iYі]~Ⴇɥi i&VWĊl&;1&OZD}4Ȋmfh,} ir[GǠ=xNplx+/!{R2Ӥ4444z ߽;R*1YyJe<3H(j9E,yX Թr>-k&gh/qg- J,aF54K^5^Y4="*OꂹJKC oE3F8 U2o} $E&~`8賍jpxZ]q\K.%[^{>p8?o 086p5L8^?K=US Εf;눈\w (6s k,Z;BwwͰߥcAEWjh*lkEɖD*; wؾ!ڠ&ε¦g2)<`r*"jHXݣ{LmoUL{M2遡ZFVcyxw$X+46}ܠeF/CL{Md}\pih`f?t 'á.1Ut~i.PG=wB"'xnFzcg~T~||a ,OhrE]Ƽ Dvv_',Z 7`rQ^y E?m,=9x_8z&BmcDM2< xπl::yCr|O_\SesasåcX'{lC*-_{;l^Iw9AFVQP YN/5 yCnw4 (ܰk1.XZ~zm0+3&yZ\Z?[Ba Z8V+f=孵2xj-MH"al}<_Ei?6,ݕO(DBqLq7Q{ 'uαy6cS {fpWnbPNr j/1Aϰ)%빛cg  g26hu83)ҏI,rW88XjqCORO~`?`3:W:&IIXg)j{RUJbpzpr'E=hi'\( -fVt`Т%.lo1EěLeG/4+r:mj-xͤ[mEZp/G{xͫ9sL(DՋ$r c$xG2h $5&X+;Hb~Q+38c3p2/@L؞<6qIk_9mGɆ:6z&v1q6?‰cLʮB"GDw0 Ԛܹ<^+p$:J٠2!tp Jr:%1яhAZOi NL`WW&,h:>f Xh5V_t̡D׋^ 09H\6pwTذk4I@zʰKۀ݋!Jkzj &I^i Nd>/##6=;{mO;_t7F2ł(|yyp6 2D/WV{M:dV1݌ٳV}^BhsZDŃ-*+xjoL9] G2ŋ͜J(~ܜCShqz%ٟ`+lYc(j~W&d-6nKHV ,JREimcg\(7pm&=63IotDZĀ4v6%4dX& I};MiW9bd ;Q89v]5&^ԔOZ w`L-5*{[21[XKyiY˰t|?D1nIǜB)td S6^6]e"h`ǣh_\x$irxßOS"Ӟ<OoWirxSI]irjx\rI+j';po5(;+)Ѡ{ݦ:L]UVI!.aQTTnxO QɆ/OJHQ~i<&i/[LJ~"G<:W %[F!l) Glb%A= ŝ/˛1UΫ: "O5s/Wqzؘ"jT.ڦ0o\wY $hqԆ'[ڪz"uYqL)=)\H䞉 t*GMr $-+_hH9=z }N^_8M͖)0)nVbLAd'UlLJʫӅW[#.U1hz-#GA\ ܻ #lD7IuL-"7Zo=)u7 ,٣6~wDn;LMGMOY 8hNUs,eS/{,#`4t-n -{ u%oؓ\ѫѨ[`6 5?Ri7mƎ{Nģ %Tf )5v2b$I]?wUs#GVL3([Q3=ƞkX &w/444=+xhOSy4-k<͟m^4po4+<4ǻiR OsFH<g4:KgsF0^~z.x-&>B!v}-_ĚTR6hoe36Prp , y[W&F{+T lPY;V{39Iv[y=u  '\ dۙ2kJYz;%Ƭ^NIQjra/]Gs*hùY8&zqO ^ójٱ~I9*_upc㒔o%梏ؓZr'EE,\?e9TCz!Oym3KsZ{.O#I͇U%P55e.z,HzY=MU$IyYfKJ[Ej+\ߓOexe2Ec衖$> &v7yڛ,YrPZ6(Ԫ4-c&Yp &kvz<-=`gNAͩ-u{ -8%i7}C,G;ӼfX.L^ U5╒t/|L[9DJL;{ SYy$׮[*e~cȉg:!j́؁ V]3/g+V=bP!ߔFA*[!o6;:+`wQx"i%b]yMv'B?!k)ð tݳǷ| ζ݄Ÿ~N7}`x C\jMctItn ΁ok웰x@iqڹF6T)oLGZ^ə<ސS֣{?'W A-į6`$ZU1&aAcPSA3) xwL6^ZY`vѳ[a=F LC0C{oFs816v%7?A70z~SAE0[D_G"\Qff@^BTSK^Cu-UR:ֳGx&f?bgcA,\7"iZp84MEOlJP匉d.@;rN%2RhOhb~td6s?Pf"!rFuPyKOXTM4"fm7J.a9nshC9(1ȼi&8^n9M=CqL<omvSdžcVDrZkGo*e?Kʣh-J; )Ah @ =|ˎOc;ڈ:湅KPNUh$&uA@^A ?2E?!dKJLЈ c*q4If#5 ͵}qgIt?OJ֛?iLeTMzLsaiK~#jI %L'nD%6SgN-)nMVfm4?{|sHh[J<|"]P3EHzp,碶t8֡,Ź )Xtrp2ul#ZOaA dy$?C6jnRNRn _VĈn6ぽ[m ZkME0{T2e^P\4_ًUTxXY.^j,Vټ +i~h '7<+&iRp4mԺf_-`b%#ɝ)ۏJr# 05- vs v(]nrof1߄SAQo!6 bB4pmbd~%c*6=Y6I9ZaRR )ت=_(c Ig׏#7"*&{LJoՎ%R#;>Mxl_ Zj[DJQYZhJek\3XSMNMq< 0G-SUScε۰1oͫ?|<4Tf-cMm<;:#R40emYZӌL' ,1=O2XbNjt|pk~{(K|[64h~OHYb{`xQH±4?}"ͷ.XbcZ FЖ)䴝Ǒd $rdeW_8*`8|OK?_<]JRWxT8ZMgˀDd͓Ǒ"{9$.8?xQ6yqڟ'u1UJNHЀ9[yNLd(ˎLMo:tm+۰P)zʶ%̚m8oBx4&9i]!iJSUxY7x=X4MOirInJ<-yby{Ӕr+& &O2Y= PE%~Ӥ瓧ܾޯ4MMI>xc 6O#7Qv4[6nS4'1iEӄ8}l4RTiS1k'O+}^z&{њ{ cGzBP} kdK9؉~X\'"v ^93m ž=7ѸH2b6KZN$/==uG.#zx W/K<Kޭ`>k$8ZSl*2< %~z,3$y"Y?gJo7x`oɉq}Qьm^fLX4T Pp[KK> ܹtJ %9YE\uʔ?DD{s%^͵7j(j~pAm$E G#G -9+o̦OK'=$$$a^4_>: Mg6=oyB|^n ClHq%Ա:IaiePkr<+걬[%_{1sFL8ez(M:=~Q\82Q -ߐy ۞;fz[R2Kl${zkQ$}M%d]-u?gg4NFm<|"~ʷO!I'hCԽX7sPU~ )0{t\#I1bQU T)'DMb [hW}-ߐdM`+~Yc8DTGqKI`M2!A L![^lággz]mQlFZG6sQ_m VT6PںKweIMU9Z:lvI0 kK&lڎ\6W(Ρ$bzs1} `<9B0?c'u~ƊI_Mwv#'`b9skN bA72X_jyޫv X0N0^ܸӓeqJix4:>!"m֬:t2Re;,[ :wZ@2܏p%غ|b/VCX<0x+`u“e\:67?'&Dg oEo5mՌo,)|B#4j0ޒߚh1\:1j*F;e$ڪncl19x^0TsYqדM0윻׮~E$`\2&{H7nIlEHlaP(xG,V(ʾ9Q*;G~n䇷pjTQJbu0MWeܓ scx< Ƨ KnE1,7GK 5Ė6>+I8QhI'>26F5`=N2QZ\ dh3h 9IO^~Ė:A_ej,%kX 3%n32^uHPiOv/n3ҕZ8b9#ct)d,o-'W+%3ɷI jw [S3+>58ݴ'"{b&HEAnړBc#ǂ4&0v>9Z=Vm1*_>6K'=VnB?x]Ff7e8J,߳'NVf܃08`KqX2s'}2ɫy {R)4iL6\ae2 u~ӞxO,byѼmOJ9osJ{M9 ׇG/VЮ썚hriRwHڹM %)cp|8Rm*x I ~bpoacqL ;Tbld"26̛5J:@iX$`#۽d$' [u瀓?4S"lsQuAj {7+]9y.*k 9,MVTpԭ^Z|)zkC3ņ /6x_Mm䲍QT.q_~'6=iY515Tʽ{LQ'{c ))~ 8Vlgp4(Jjry\3AlsHcadžOB(?h{*nzJb?ho Yfsfu,iWM }e՞~8^aJA2 R M`i Oj^@cPJ˹)6u1֛J8#FpjB #HeCi9ȥQLe1UV`=MU[z >jCV-roMPIՌ"rͽpm.W&"%' %G8k!(qΘ)̃(,kphU >DL{)yS|N|$4[ɹ/8M+j(CÛ-?nlkpcv@Hb9yEߩ# JyZ".3OكbvbӣZyƲuXq>`1{d=d'~͠ޒc}\|>j Mݬ9{,:Th˓i 3p,yDtt!~@'b]RpC;`[=%nN7HQO/oаI*f)Ӕ\98$s\gʏ6`=JTV[Ck^F)P$@dέZYrXW褢gGYhl%P%ӱwYKUp-Q.&}#P$[9ڴʊ@{ԲFiА |Q\aov"2 1ay:f}~ sJߥ[̴/WSF?NK:9P|,ȋa}nrRCY~JV $?<|(!^9o(™}:L+t5~z ͧx@ӱkvFa '!\0hwٱX ,ynHbj B SJiΤA1 şm5lvQ!:.ViPS nq*r,1J3h$O*z{I|1윴K-`q-$ $16CR z= (hd>MYO־P9 /hz(lP6@~"g# ~bpwu}9+M_r 0r5he64T]<ʹr5f~gyie*/FLj.–=)vJ+'N܆LLÛC(dmL14M+IMGV=)`>X՜~M߶'ٺcW'(̉ūoOU) ΤqVjU(:yeNF^oY=RLYvjåR)A!pψDNyUB}c|74bqeO}֧0?5& (Ibgh}C#Hjm9hU˚@+B=tsJM믜wڲث^~:!ߒ{D{GYYb,%!UZ[' cO4[XT?Ȇ㽵N_ٙ%4ʵfzzNY/K,CZ];sYa^hNjUkPPB ":ɷ 9j^~o6 DIk@\|)hDَy-= 1tw)f <2K&=(dqZTZpm^p:ʥs|YLdŢ!$B >cYW^ޗŲ@LQes+:pķg/eam(M.$UM%{L'֪OڻfkMLF&OBt9ٓRnl?BtTʋūIH;iHS?6H~KV]1lfSX?q -̓?VFe5lnudXUVfUl/T.$Mi4t餣E60hRYJj t+?l1~K *voYЙr9, '&_z)P8i? d&"m2yZel# u5CK mxEl9G+UD#';[Vcm7 p Oݓ-! =͕ `VN2q -/ X-{Q25 0uAl[H*xf$.Pj9BZB{#9zA[vGuO P!NXa>i#cj,1LkI9={Rx^n!d7M!>B~k[uxMAz3{e.>W>+'nˁ(OUd귪ωdI 㯐ȭI=+%s4/?dO*4񒴬0n O5ϩC'J2G/8XAhq\pk="ky58'fFҗLpO7B /4.)ۘ6G.>ni6/i]yxX,b(>;7rÈy肙ީmC']Bw=V3sd4N`Z'qEMAP2?YR?]@[V8h_ Ksne% w^*\6"sRlM:n{Rxnmx=c}/ۣޥL\hsgo z V^r4=x^&#nH.Ip5xhIjhgXrxRKLGf#{`#[ ;ȯjüfougjlYxGreXP(id=eчeo|8PѧL=SedpZؤX &ھ$hk:>l~obu ,Am]tݘw& ܊XIl}m#ܞ!yڷ籗?SN (ҙkd J(~= OӞd,.)oLVROPye hŸma [.fX$SZUG;yKu4\c^{iBF˪iPGB͊2`:E9w`yJjJ~8=q$>lj}8^q)+B)nmf14֏k=ux4RH*B5%c]bD`C(g)ծ^AOH1@E #('ƴ5x!ka,o8b)Ӛ;2(?LRp_S0t |fAY 鹠؇ѿTE:o@M ,` g}o )l繶3a& {ZN'/NjhOy.{[Rtי//ؓLew\r <\̻9N=2ucȞ1A-GHeH.^50}W?ql_QG3U0NXӞ Gfq %d|iT 'ݽ ˩^£F `><0\ A)u볖S,HgZ)T|d݊\A2Suï"1D67Y6KZUAmén;c TlmhNpuoV%{~1̼uRE%(,up?uF}Wo~.qs>?3<?e9cc8R<s&Yg !XgQ|3T>}QG!L54 )61YȪ{^Ӥuc"Ð`HKy&Pgn|fkǚ8Uۣq~ 2lR|?tMy| +FrM ?Xs[%: Fh3T8wSa/-¨D,>M`, a2V|:yj;>/8=,iFR^HB&p+-F͍'~L%VN̖{9~2Y DgekUm3dP̘S뵬4h-YéߜU@eyI~W -WlvȦEiagzLZ8Ta'=`&eڬS搽pSP:gGk**4)t I^9" /NVPZUJ6>:7ZYgc).!:Vs("ڦaEjJNm&i?8 gzqp"o f<xE#GY7}`8Po7=L0"^[?$1L/$F/$Z(GIYP20K wnEerCNu'Yh:Flް6xP7ӰCӓ_/'r;=-Ġr,o`1=KE489 , j ԦIMZl(E#e 7 cI+K'z EQȀKL{ THZ$@kaq Fp6z4 gݣ#,P//lhٳu 漩3gou"M%]2|؋MU_'rF1p WMїGRZem<[Ggn&S@oz!F?ӑK ,aKic׎nZ0/[RγV~J53yyzӁ6nST4Q%8.1cy.\MAc6Ǭ|-%3m~ w>-UO.L 0! sqrw;.Zָ.89v3ž$<)xc7x:ݓIzl򟈜wynmȩ?8:>xz$:y}c9x^qJAO(GD\c!??g={S`- i/ _A43D_A F}]18~I -/d=1Ik tî0QfD# @v2'gblO>{`2h݁%k|,N.0ircȊ#k1lpzo) ~DIuRl qW#9bO6=5GE1RMҖBzyT4'B5ϼ,ƵNl:n!@,qd6+k jž αG5 UtY"w.qiye5vc|gE0xr3p^»}Qܷ8^1eڤb{Roaߓ=G>xn:D {J2t/@/HZ9ojSEFs/e2rZ4ORኝ]m~QҚC"яòI:\9Zm-3 k%x\ўgOťs(BJW NvJ`iiyU]hÄUޠL5 펉YܓY"ȑ:_MCX,1ΥK2 (KNh:-lxI@kAGG±IsWxEQI ]$\=TWRq`xXzkVyq+&m<ޤos9_C,Ǚwk&΄Sf7,^BՖ5 <ƒZR4=;Mug="6J,]IWR37vn1!;C3 {(5BG!-5lHs*Z@8hd=?el[orHHl6qd˫Zi=- φ@!Ph&Wg-Nam>ɿȪ\nɍBgQ<{ϐʖf}m=1&%5# ;࣭XcM ߵ3f+i~fCa*mN`ivVmR2 ʩ%Aedd5셲2M8J ـZVS{0eœڪ#ݠ񻭓E 8ahIE'Wc R5<{!lK g&!RBꊆ:٭}hl|hkl輶'"˱dzˑB)`g9LƗ.G#ڐKCXxSډ]xadSЛ6%8[-RZؽu4`@Ėc,q =`wMdr۞I,d$r,9t_V?&1 9dt IY5퇜pWTF6I9\gOʙ ~ +qk [S_R@;ް9nРY5.COd-dNa &,*/8«Ǔ'92}qBLцK9H rY{)GGKJG^ o"GىifYfnV75%( X4"BFݿ)'El%$զ~R9 ճ8+K݇eLL5'~:?uP`ZIgۆ֠ߊ5&!OZ¬WLg`+.Jr!ZC7:E5:z^9>{Ĩ1{1~v?˕#1rCUd5r6-PR4D^!GođFLy˘]c ۈ>jZ@q >T D2K\iInt&)hwc+ou".u 9j74\,A;Ѹ˵vߛ6h }p J36lh"9wfXyD^49ns9=op<Ei(ad hcE )Q>H3Iэ)Ӕ ٨z~`>W?QkppVzg# k={y[l3}yyZmkhPu$1hB pr<4]\-^=6_Y xb#Sp# kyXa:1t6$_FY6=*^)xW66=XlĚJFIn|sJM = ɔؕNG7[:r{ޱyR\׸g0:ԓ({9M` JO5žzTIaNYݥuUvU[ePVrX WcsKY7(R\76)+,Ή?s]7 yr?eAnoi/CZ(J&[_[&Uݯ>CYc,E_"lήʶGpS'xl@U@=Y!Z9W&`/4{'/&u_4v&7<5~ɑx&հӜ <x,4'Nuw&7uI+< "4ǻ< W^4O WxBwxϟi3|ӤL4x4O)x?aOꋧɎ\~4ɡ_yJNAIWR/xT K>^i+OSc_4 <5i(m/ksa3O'JaӮ X|G+fFVRoyӆyY@UeM( 3Rc 77Uï qo_*uxRH7Curӂa@SKNT1KjY>GQ3>TTb),d6RiDc͎ð@&}9hh`ǿim뮖FX[+LͷLt uؠ)?tg2u mFnr/lFVUh qelY`K/e<W859m֓SuFQYeh H=GFf\ h!d?\cRU!j4aKM.IiJc'Uۤ>b oGui;rv 沅=s ^#Om4]#)Ѧ=[Q!*sDOKPD[^ K? )˟Й'6Ydc~u8q^5P o)[+{: <)XФXvh2JHxI18=oyy7M?9*3Y֍3R= &6АfJhU@^je- )݀mB*`B4a%/3g"Zvm Ry1O,ƎGCpb_2W>ga3| hpv 02禝b'Is,NAKSP-mFL{؎$!X0{89&B8􇮦j KT?y0F?|n'#;j .Fk eׂsʡl&xGrS?lʃmUr?xcɏm}R"'i~IжJJ;>O>oP3-9$$4$:mo*z{giX24= fW#ca; a.aXgql5"I]{~&ˀf(Cbq_#w@哫k#gᓓx$ucZuԵ"oe0 r2q 4K\&Z~1!p e`뭢'=Wl3iԃÝ = :u?6?S9Msyֵ86Y FkC{2#΁Yɀ@9ybhJ3 I1 v`5rw7s1l7{fĊ" l&,giNY~Q'Z'16i.Z/VyeɡP4⼺n7KN܏5v.+\M-M2_$srU{ֈ߃4YxYӬe6i<`a(WWW, ^b^Aean|(2N4V - \V$ W5lXcnϡ.#ȴi{xh=/4y <ͱ<4ǻy!ؿxiY7xw]&GI4O6&w.4 m^4ǚio4q~i>iRNWxiy4&VWT?y_GA5 hc‡}eA\y<) p1BjRַq,tX/ mFUA_rq쥹5[),6*<:}૿A}_3 6vBAmޔI<#/ғ$63‡c 1l@E]c1̜66'<SWCͤ '`j DtxyP]H#dpO'ƮBCӐT'pciǞ  mK2O^n& xoxբ PpJa-|xy)l2B3,i3ilO[Xf; 9׷1&շ>{1J'o+7Mj^ٺcVGe6-LUIE}eB 8DCo]!ƣU]!pc=e2j5jEv7 BG8%S%n{:oV?)E;9;gXV}Kvۆ5 Vb薁F^>lM݊w5$Z]Fn䲇 ]g#1U6غhNa0K51%w- r>o"rXͱ NR@x{6v] [ZY~/<iy OS:6O;_g'=62u YlH~X/kO^՜'`th[OA{,<׎Gag@l D{c'O/гjp^^jz ޷ NFU ?sC<$!=-L{i6R$%7h&lkx=×jYG_*B+vm80~nI-/C֓z[dy,ɲ"z T섭%-j:)-]ux%uAcN6G`ͺB@cuySIfU=_ )k&DؠQD%%Cfhgp琷˂*7v/*ˉsYb{8tNUSuh6̤ԥ:U!9mPnq`Q_Ѕ/a^ NdZgڔTj;,_|(d:ڒWj-sfj/v(nse͠_^4Z"BuV4t_^hmb{d/)`<҈bY)B쥴 ZkiP(8jsaمh ՓƑ!Ō&F&<1YWn.^,[.^p^`޶'9Wf} 2FoO )oXUrfDA +Oxmئ| l,.Y~D{fNLcOj< AӔ޲n8JSͣ_$qϊ"hfgTi}d)|;fT荒o ?OZlq<&z`@kӤh+<4ǻ|I<ɾhwyTNm&in@4E-s6I+^('"W/U~Ruuxf>0x9UNtN~zΝz3kO~QZ,y)`r8\!v\`j-89!C.k;kY /_%"V/o{;xǙgLh ؙ>O 'cy*bS"I-Z0})hU Xrx9V@a"=~P oxe*\poimhU&S+##xOX6- )qkLOW~Xm+ޱ=JI sZS(NxkdP{O@=OŒΒU!^qoQ CA'nLGXݵM7fNG5=) жN?"5㐾1x`炶Ӻlj&< Ax鵪<Ǐ)7D^nr%ؠi tS!6MzB:: 5Ս'VE~PJkμ a[ӂ%Tt>>7K~S#֘ߵn}L)AyY4%54t)dӂadF[R8TtG{>fEL0ei(lI?Qh\P̝hk>a˓MUb]#|%n}#=`~.?=ٙdEqԨCZvc~flVTvj :wl+=U0Ԋghp8D!(p)N}|4yȡ.1Ġ{9Jj4v:oPa)݇=)@LJcT[V)|qZ"=KE%> 6֨1Zȁv@ /5S%"aff{c{2wCSҶZ2 W#z*Ojhlouao'"D L/WAqςvu7؆?;DٻIyz.Xs-;|sA={A#4 uSt΄!w\} <ڲ"mPO? h5yGQNܱe,cؘ^H6]uG)XŠV.OQi9$Y=XD^-ꪽe?%vLCl3X1Sf\pzDkOݏQ7m0^˶0(LW6Xdtf<ѲyRұgK{vCP"VL?$J )<,iO4%]cI~Db!ؽ:ȥ-FWxg-֖)Z* /&M];fOx +nsV[IԭϾv\]ѓz7(i7 CIñ䢗`(>Xx\n!4w$)T fVeC7i!O#kn#r@|,w N!(\/Ϛ ЗK9(<PTA+ʳkQJPĐ\6X2bU 1n6^nYi.+{Dg 6Il32'Cn;No~MsܣK n\@7 ԡ7&pdd̛>fym^T}|+ig;2[2녌VB *lvcΣ7pfѢ9jQ.رt=Q`{ `͓~o61i}/I{TLCP_;Q_TCz2 *4BZeaUM>TQVT !Gc1gii}yw]&'yI+T)'}Ri؛#Ww`P`sGhuF*#moʞTïhX(=2_g ͉C @GF9IE.-GؽW_ȂzH>}~$_Cgphxl3 NI LcPAۏjcUf_`jyr#[fkWihd=I}i_Ԓ~-^hD]2RyY㦬> r+7-8JOb}~P.rcz}R<ó:WD_cJ/0#,0ѲW!yI`<DŽE =W[YӚ MZQ0MS9Fm؛o:yYM,f~/i]68v oItT୔ȆeCdA'Kblo %)l#QpZC,_ <@?ư?tG kcҰc t^nVuN⤏W):Pl Z.|a-Z؟DL[YabNmWh{m;=)_in[nIJB/W $ۂd.?O\@&r(C|- ƙ$+僃yk@1y![\!Лf,zV< ;[צ0b/xѨyT߃xLj.ǁ,]{קb Dbq&aqPCFU|% Zʾ3V^"ˬsr &522.qiB<$jWLL'AxF75Aئ5Ë<͏_y 0Nt7O3iO_4ǻ<-PkiRP OK'7xPIxX OW xdm&<ؓ ֱgd5?M/]zc[='[KCXZ%\sdm >H&5uosbҹ.kԋX&+{e6rMв1BtT LI,a_y5T}ct$S)AI "hʐ@cث/PJЊ9\>NY)] k T maP1"#[F% ^O1qo˚8,I*zU5hoL{!z2h^CxjOCFֳ~W#]5=rܫ(X3XU-&yxakiyvS7pY=xz9p赤݄m KDR}  *bO{HIlh3nORn5BY=U퍉q6ZO {{d.z5iS]7`%^rQ&p <ƨoz`g,ks[ȴ*1~aJyTo4bduGT/hp/ .hgqq w4fۀiYifir <4ǻOz)Wx{xvK }CblOnjςJ t ke_l3@I^YJILD#`{x@t錍A-u@=e~ S`pp _2l'jES> >zHI~A I-4 50VÖ߇_(#P$jk| t+@=kُKQ}[jq$/ Ft >^r +"=򉼹IVލt!4xnިŹ$$o#gYx:d=O~p`N ]cyTܢTQ۷)%70Z[LI`Z5mEuide.7Y$MwpαNU|Ϛr%N i!߻`CffV2"mqxle5epخ^Kl`y h !ޮe 7!i[˹"$Gq[(o3^/KчtN5eB Il#pEl(Yt5nV ܓ>ǧa;ET]Ƚ{;kKa{N̋޲D!cq9eJx4; U# ~n&J g<P_$Fy!N ۼ>`4+dpz4[Էgx'ndk 4itH}8~Uv8>ցڙgE3\< 7mgʳ %VtޣrVq=ըNRㇼ !ߌ=Sa8|Jk3uwYo~qˋljSu< e̢CVǑJ=⥎!9q",-f8lxQ6DIXFhE9u,ax[6KAfjP(䔫/ZUfnh!lyY6F߂m63ƨ=CLE욼aycȱj0rʜ>h{4oPFsa.}@sIU DaGRmuF0yvol'yw_o`4! !5;:/7'AjX}\Q\!@=uG'7XDе e !Oۀ k ny`w!(e?I6Rc̅i=)MVF^ ujqrL {Ұ}[=ؠTT8oӚΚ?ExyDZtqFZ}9I7x<\I8z/8W2+U'g`sRqJ 8|8IlE'NJ,KQDuڡG]֖|kMi_R3DmaTyɠ5 GӜ[xm$]_'gTFɷ'bpwOp䖤"pʊ34y ZHγyt]%? ؠ<A[XFDx zj8"Y5bi(<$ UEy۞"kujf Kb\Q!BJqr=+okDk-unͻVmw|BLU 6[Ee{j;x>oCGi(ԚF530v V$o 5rc ׮B>ƶus65E@ kOR(Cѓz8gEy8=SB_ȋxj}%xJj8+x8^|49_q7>qJ3'5 ?8Wxսɺ8 s+q<<[lx8zB,#Bp;{ g(&> d.{Zoy_@CSg9Y68)㕤4^Ar&s| yFD@ <.)z߾ ><'c6!UW36`],gG܌ zTW\v*ވ,b+q(ųB%MaF?"Gښ9>|<(K>?)[^b6#@O{ٝmSMW`Ȓ^ b#JaO}q.O9$*٦ir1u{kb(LsH"$[f./PnEH8ybx@MԨN/Dc+OQ0߹3ܱ m+ޛ )#H'}B5{=&苼}eYϐg۸K" %]1C;uXS<=;1!E@%hhbx91F؃ r#/=IuPۘ/w83#Hvj#;rӼ̈́+ޭqN Z,mc&'!|hJo2!Xmd]' Z58g=3s<*z]rnTEv!TzY`+kHB-!r p>#%Ȉch+Llt wy4T"I>'/֪ ksuk2" &nY,@sTdFVR -EJsLZz!K$':#yv8"6QZuJ"h]K(bʠ).D{IEr>GM< 50Pd9 U |^.=3/xE&y!y]h$/orU,mfm( #r"a8 M7Rw9kҚSdAcE~\I2yf[{+IsBmgզ{E'  =p~[r2 "ҪrT3l'G.nzOC"`rѭid%p]vFd5 $l,hp{#X<ޱ2xwlC27pwܛ3 .r޽IvvKs (wܳ+ 0[a5j!yN0ޮ7&ꂐ;"tӈ01 7> G^K@2̑6%XLf<䖓gVEg^l1 J-umQҤK l3eZ *^*A L]EiɆ=;DxfFk֖ ziD֝ÿݼ֋oUqjsh$ JIspYWoFmFgr.s^;dD]0ŰNz װ2pAf-NKlAY$B.,[#%V& ?q<( "$-4}UG>U\4ثE71ޡhRN`m:7}a%'"$ֹzޠQTʵ?ûJ-XM%9A-eGZ ů,boe "G;U|7%;L,Cb~K,JO1Qjn.1?me 9E"hۉ7D *dO%kʺGÙyg5Ρb}( `htMThLs;|MzFM_J2Y½f}PRTa(~+Z{עGOQ3 9w4-K}#`G#&-' a85\@8m&G02K(n ٟTG-$DDkUSH:j'З3;=~2u;t >lȡMj/e@^[J Y%Xs^ 0TK.Ff4Xt݀T !*!9'{X2EI-#6~O@ys?xqxiR7$-&kDE"gld=`@=k톑*YK G@aQҧ?Љ6N)|-;Tһq㝌֒Qz\D50F}_ pıys>۩D?Άcaj>snB'cUZ Kˮ98Xk1@n"qOfT][GvfɆ eo9)),mj؆ e׏ċ2i`$y9a}YM@) {s7\]Ymb4#XdVHHZz7/JOY(uȂ;[eׂLkUm1E:M]mυxG֍ipt$6i%dOm`*ftBB91܍)4OWڌ8ђAO̷ w]X5:aGG2,=5hwq}[eWgx4^Xw yT9R09P7|+ 7r 1YLPʀEprfq+s>w]=!~N*<+ (B'aa,^1TiDdM.dx'!Xe֥Uq0aNja/)[G:v:BhDBk,SݨVY,6 Loe xPRNҶre0r(Ow$*R5r(C/vwFNsvvlE4f*/;=T*]FZ%o'TVa M˨ G(ֆa& /L3~bܹڎ#/ȻKL5㉵vikEU Q J F7x qrY<{q9rhY&"I!T Pm{ꑻEիutwIn"Gհ B+k;6ވp"U@rѷ6Leۤ Ixk$% c]S ?|aF>+a1e21lgl-ZԊf3o?#m6'p ~-LSc|'^q5;{3L{(Oϊ^EWa$ΰgHcb_)5y cd&[DJQT_^ ӅP(MDYiD5#,akgg5n/{(qeln!wP{K斻jQFeW`V_$15ۭ/JSUU7YL}j.<}{iQJ{c"Scv'P~J0'Iݥdh¼s6Q&wH@jMTjZ71K 03J/*w+c0YQ$:b2\}vg1/_ϵ.|wŘ(/_6[#\wbCB5}(صJ8QiGMRHZk6Xۼ\S_qR+<۟DWyT Z}Is8 {Iyf6\[ɩ {)DZDNiv8y-I}8qqOoxKY81I|ɵ_qR'; ۽}} l89a8bȩ ,uA?^+Sf<ε@mf'5q蘟+<΍MyII}q}8UwJǘJ7S)OG&tx=>^Ftwxt13Y2Z !WYe<L ymLXs`l6hf|c}x w;6ei*ĵ6.9XyqפA@񭒔)w faπnF)hZ|)Gv'ݭp@2vkթHHl-KBP$+i2 Bć@JE}(C>iÈ-Ncа$YF-&Oi nC;QMᏛJ^z;mWx/qeЪkaRc2Ǽ66f`ݓRЫ1Xz1E̊P0 qիwoC{R+O :{yǀdZ1)5lc32| ZVuz@y")G#<%tD؋\SZmA}p\}vo%ୡHߤ݇2)Yc0R9WܥQ]_ 't٤WNp4jW,F18CdoSoÔ@=O+?]LP*G7i-(dOz:v1:8.tق'< On\@⬦vHy9Ǟa㦛<[ iO~S;tK\ͷHd~Q(wR%{Yln4t`7 '6;*2kZT]"Uݧ>+[},M̷u˹\"r ߮d04S՟9xb(`AW7iɹVw+iV(Q'l:;3$9vxsbqeD8APi#9=颈}Or=1 r#kӸ|җ|"$aPIQp xSm#W&x]冺_Wo@8v,uΜ}::@xL<ݣlo~BS܇R[qslطUeOaV}T5rĩPW)NDZ 1ټvʖOE y&}z1J<\ǸFr3Olۻ*<_[kq"6nSaɶkZ &WBꕉ~r|A 挀J+/S`2&NE }c*ϾeΏ\Xmbmk[ ǫ%ծq!G{.K3F`,c9-C{6=ވ/Ck<=A紵j40Kv=qyzyK86tZ̽'u;\+qd 5,zlL+kOY rQ9%Z*8@)=x\ҦGQi>z*墖>Pɜ9\}19hcq'l|#O6Z'&D6-R!^b[Dԙ4BYAp=mEl#n79m^$.MT6:psK .t VhεѪi~ɜY,F5_rYp˺ B3Y(g],jQ.7 A"u#fe;mvul{ 9ě9mK=jRRx,@Gx&D`W5d5jjM:$vŽ!3sxij*蛧*N6OCū5f)BӤ^ʓg Os= Oh9OSNx>m^iRnMy?xC;>??xq ۼ\δ>i$iri֯4K<lIݿiJȓ+f[f:P%Ո]>[-jئ$oX}hjHca%B? 8M)jUA6!CPq 8cOm ! 4Sٸwʖz}>'i;K7hmuH1nlN-}]d4LԺ!lcT9O~,k"_yU3;r~ p+nMRSeDD `jI[>?9 Kqu"6N [EVDNPGn6OFT5 _Yk1:ǔ]EDg䀶t+od"֗Q7-URq g$ 0<Ԭ,aJElCFoxk/8 'U'5H k Wxܴ y)7[<[|?q.N_q$r㤐+qrnǙil+S6Og68%lSxK/8w<Ψ EpcI>P50b\>~tk) rh,E5 x̹ &H fs7E@t H2vG NhFl)ZS慮*mx"EIk>25i;y(c,{%xQ.bSx>K`4T 5I-uhڠ0w _#X$2۸cgu%!;˸Qzk1)di(ݖt)crDH R&ɗu 6K^ړr#E\zr %,r_p|}8A ;RF@e@@(Z"}h1cT^!-oa+ {'YmH֖U`Jϴ}^V=X,w$3(")Ө&J~C Ψ`2?ݷjdbĹITU'.{A.\n kKTAd Xj`֘,Y!j&zDw2IJOR#=QBfI}yzi P4哙T[ĸFcc\A;0!lblKq r2[:'1!JMN28 AA̪b-d1~&\|dKGGIpF@#QѓIج|0#^-Eσ?ZVB)*Ǹ,1r l벱dU9ժ1ж+%O5i_ԥ҄ӀlqĨ?|5sK^i՗"$ևh:Y⟟4z¯ijV4h O6OmӬ_h&' 3WdlueFZ< #5c Efo#X?. k}C]yG5 >B99yNļ攠"޳"b{SfK(3 I/E|u BsiSM岿 lҷ|x ]~7"ꊨ= 1$X X||R(^}+'yPwZa rYRpNb:bK$3m@bey?k綍14GlX᫂\55 l]q;3`ݝ{ˋ\}-F|M]X.=8գ'djղb}2o#ٜGU*iՊ>ctfV$j@5ffWPɷ,bZE6h}t_Ur/mP6w?p8-2]բ*!ұIQE~;|>73p6|3*9v9V:L\2F,@6@=j1M38/n!m UѵD L=ZaAJO/Ou/ȿko /v|ةo6jEY6Q5M~.CxseRAY8!zs9,6٭l Sm8i`pQ{q.p@t=vk6"3Uݰty.Psт[ujLol иpl{X[$Gim` HRE{P QMl9Qt֣aQTv]ޙDEf v&5=)j ѲG{Y(;sc46Qqmt%)~F:;؞#GcuL-q0YWZ\+agY {9\^}kvhMG5 -q>1XmNKokEKNi.8+nD|>c=mZrMl5;W٦wFuYf>0^ߐv lުLz ;:Hq8rnUyNi(e X]Zv,7()U({[ܭO%G/O!ꚧ_>5UV$ Ǩ6wy|iDEsVgE"/7Lq1iGaDkZի5I|2bեJ+d tURTӺeS;i<Q6,{i1? O[^>it&N kLdFt&N*19 nJ\m~!u2rCZ|A/gc?9eY t0fC xy-MNROAx8aI0ͤT~;AM DMfs<qoH(/H2{$*X<42JƮțe]ۆnx=3HiwϽr 50身f})mBxPʪ7ޟj)#pZueU7Z;Y)f};'VPk4?cY#1xtc펕6G]}C8|/P L/ׇ%"Ǵ:<ǬW#x$X6wP򣞴;@#iubͦNSyyDӌWڪsXeexY|AB&Ŝ2QJzl.KHx=/Gbr(JUF@+L""8IۀkdV|GjzKX ۴y[n,PE* Dexb6%o%R{ qryy8|ۼ\6<,T}968J<--5gIv nM6\_hsFi Y/VRl9Kkխ!م%!EMz;niedOu͔)v08vI`o_ܳS˰< tx< ʰY姦Ml6fC\4@RZ{:D碁^ΉQ~9GqjK= vm"GcCrB0QrHJqrBe-yQnBYӠnC}RroBj5Fl"Z/"Y'^'nimzKNB\;߈AœgG9`۸MR† v7\/' i#`nAᜃ]ָe s`h:S" 7Bmɵ@6%51.ONޤF* *mV0041l\HnRHW}QߗJFQ6"|Sj;Kd(z'6k+7ש$ך yjO !<%F+r6qƐ peI9%?h+JO* Sx Ko3?鋤1ncN>˒Ĕ@$-î,@U ayVPpB"z'rsZeڋ݊X>ιMP]z*s6.v[fU tQ^0X&69xք`kk{,:%t܏HYf|X - G2'u{c=Kr,كcE0,N-cGOoo6Q⏆~ѥ!Kmj28 GtD At[)\IxzQV~8hS;n9xտ ۠tfLi=TsPýe M]f孧O\Q8j~|Ht_uuI1JgM@'G;bѬDŭL ˝Ħ5l VMvh3&P=1oGUƻ@S# m}Z".!_C$7).};kF=^;j,k/RXv ruRMfqoH:KkB0z6*j9 }ӊ xIҢ'Gizgk;aUC0!i+dZ.(0Z\sz݇nϭLK)NEȳ`_#-;ELb>ZvM y-(S$e~{yHCPkCA a6ZR4 1ohv(FR~jBO3c>0JZ9B&.L`o1R}4^c i.ձ֋K"@^6(-("7C6 {V]' 5G"6[)$?m|M]֋z.kwDe {zoVCYipY0XAJ̽ǟ%+wLվ2}$6OKCOӫ4{e/&5O24tYOӊ Wou4,c~~4t~4Lm^i7_i~Ӕ x/44I?{&O6M5VrifY3~Ӥ+lJBqW p(5CL>[Hemh|O 7'đu9x~]R@ؠ@R)ިb 2MVX%Z2xG%39VW'e=nAan3S"y1b g YPhe?z:j@KhUD8e,b4)@<`an}v_^e)8H6Zye[1r WP߾oY^p1yS'z9g:`Kl2MGl }}˺wJNJ䴺PHշc~Rڢ0660A:ƴ5aS曫rfD}{ĨmYώGSaQ6k$-&j)2,7$mk݊x#:JZ~Fc` YW}|.ظ+Fѱ#62EFS6!Ciی1' KY2iÉ4q@uHl.I"Z,uRlbi.Y4Ix?i4հxO~IU4iJ`3&yIq4׽/44o_ii=O/`J5c#!{eq[ ёl$i;.&) 9tkaiode̒=c.Nbܛ=քhӭB$v>EmYQ6 yn%a3CD6yiiS,e (>4(*4n7ECw7NC&%HdW0N{{saz4mϫ蘁ocZ:, ߯ǩXjBsimtDLd%tA3t,?l`fpk]{&iQ7{Q%($fu+0 ;ntşJ;j5Y݉8SV# deK0'M6J𑝐)+_G,@O}m蕹'7lOr TkG0^kZJERUwB`*G #2UbvRci&ASpp8+\bYE)R^{|el1ʪZb)5mj to%մ;zv"0wn V},@ N6Q#n'Ӷq .Es`zJRaoaivJ!<[͝љ<`X*M*G?M Åvx3b/)sѨuJzݣR(6hP.Hc0|-vOoZF@z,7N:`{]5;>q843'2 I`Ͼ\ h|W<+`)00T5=ÿHQټ@lf|ĠJ]y `>Y18w/awAxֿ `S55^;&) =VrѢHK+9 RDE۝)*a<7l6 ^z%w}Q6l#k,{ $,·af%)x3pdJ5:f| t'֞cqWt3M{ztMCn-zP\EK~)0kok̀qf*q'O4==fng 0aX+BMZiJs(ս N vM27OC)9gviLʼS2iì"Zθ)-+֖{)i" ~//KN4Q60BTkY~4oڢ:As `{3mӴ'vyQȽ$}LjN7D GIX$i b/6mZN7 ]o{3W8ST̳ڽ@K;A2KE֊q[fM˽֒w4Fݪ+82`(fszl"e?yD9P (gꗣnO{TYapxW>Qh)fҏg8c]Q;p# @%RCP%z| \0 c PjpGm\Ă]0gʴdrSG%7v=d/Й١#ڊ[H~kӤQ~D 4Ωis=6yzZL.t `I5=na蠕󐙻9y & HRQ$U.61%b(3j'*24KZTLli\o*G1'i"4FmO(5ezL\x%4{g(^ ,u'M2)FIM5Ƙ_ؓRi՚SGoj39/%'5).%AH2c8c̈%1mBw(=SiD6Xl0! ,khksކEHh@l6_tp݊:K )"t6Z-c3 f,"K"0MAbH Julk?%*)KeU{rts8!G>Z[fg 0ŹvZ-k 1ت=~DaKE2,B,|R XL8cwl}e|Ȩ R8`ȊxK?s!{q_ ɲpk\0% YLƌ_1_E 0l릊M.p^q]u!]t} 4/ >s,&m5=9ܭdxI]z2lY5?H-1LiէIe|h꜃>StO~ؘ Jlh7oҌ\CĠDwHʫaԨ$-bZ^S]>+\$*Dzum~͕!ym&=4[J_7<%'_q$r6h^qr/8aWx+LOlWl& SfQ?,1Ck^"zc{f`֣.jҊݑ0rNL_!^ߺ5 o0xI48!i;=ݞx`Xd)E]Bz 1 5i=2`n'ޓ"^b'fhha۳l.x3` 'J @$'3{k9s F-'ܛX:'lSu=en΀2Gn9aME>M`.Iqֆ}hdLFe7Ikf"]6)I2VlW%֥FTޓ"ї͞y@ŷ2[AI`̶ yQ#6^w䰜5ҳH/޳_41_I[1\JwnO5dn~TWf6j)9 M7{R5d1oբk0q%7 9z[>PNXw kY#aM~'落kA2?9 ֖]|O*BdNV`bR"Qt &I%K`^\'2y-[JUanaT5"fRvx4ڲs2&.Hd7B\z8-TJ1z>Tܣ_dZd\eOç#W W6ŮIA;6>){RXkK/E4L$" EHrK#ͱ"rl9IwȡIu" R_n☂76EmYfή `h+zT .}S8+K(oq <)O$$s$Rl7#*LRC{R?H4|Gh٦vdu@5RA 'b-/,ƳLeCأw4ފ@95k k<3p }a1*a]?&Slua Iؤu(%+#J} x̋;~^p#f,r_g;\zfm0K9s}S^ <۟DWyT+ɳkU'8. cN#DŽGXnzS^SC|3dJpL86*<.nvS:6_VPrYSZu kscS ;>L^GH=Äyz4@O8^;pU4}*Y.|((PI&N/@%^03p9Da7yo/Gdi)@&?㛮utklhtLj%>}m]Z 32hƖ2HpMgzDf>%lF&lcj6+Ѹ o-fQ6ٕ՟a\MVUl馪(27 913AӖ[o/d.OjZCXnMu9} R C.)`uJ ZYt+zWì5'OcnbID4?Y,Km.@-G])VO3:~R9}1C G(sAӘJ[ڦTb 8+:Drշ$"vfZ.|m&*"` :-ҒF㛦q !#~'Gz$D@lՁ8&yqTf13~4nCP׊ՒO\E`b4 FfMCx^5ylˎ!3/hO/mm"ifGazfr.Qjbfq{Nd~B6^:E\]4M)82ϸHe5"EӐt"r}~Kvѹ\Sccpv}+kj;6FdT#iK_9egXf:1HtOE/pgV!ƚ`C(ЂӐ~ɠZQ|"[y?5[/=f6ͅey $ P:g 鴺"̔QO JZS>Y&zշ t$@jkËgS[=B|FRlYJXd4m0] s!|ljJ{RM:z^ڡo6E?YS!6vAszqShl\<`ह?{GQ WvNMUauKfպ8bl-HH"<Fi\ѣ=x|4-y?x4)Ӥ/4H4< C <S<gG7OÇ>3?Nl"Ocxi<i^i_ii]+Os9fE>i')~fal4;MOef%XٶbO6O&?xyzh05 lw1lΓo;R2J1Gr,5EhJvXh%P{+3D$ luzeG<8L1?*.!B>lw>9IY5~4roZ9 %`{ޮm)9 h1QCٲ n^z(L}'Fړ=*cֽl߱jn%b.i&=[g+6yѷbK:7*cߵ֤񴑀 ;pMYcf"nz%(A1 b''bc- y٤R=d "7/mx2ӖFdf݈T[J+2ݹ}6 j|*0t3ssc'$!}JjevB S5)e4ky̋>"KA+ɽы4 ݨqg*9@mET.wEu6XgQG- ,̀4&>fݬ7!ٯaˁhWϱP&bx`41shCG}+edڏEbDy_NvlH[&Y:~ۈT3<ՑQ?Y+g"8$ ߥjTb^.ȷFE~OATlAC:Y\!>{W/"ba!mg)Uhh kHvQQQ8[@Il Y{l:!ԜZ{T;?Mr]WC!lË6P'zڣrq3#QRL>Y,E[F=E0~x`%Eu LffE 7 `GQJ@l2[C/GW1e)9Qڲh0m*3o7a$"EZ +5mg="e{E^mlKM=1.nk] 4-$6[󾿑$:>pTih+(t& EHŶKEk (& s0&ʥ]5m׬@L}fPZp:hK7sj9gWoHE7]EP8As>V|~fɰ[ď^U*zР3 ]. ⠳bQ)YMn{ tT od gFԆ,J\7vF0 e`Z^e4,.Yl28 l嗲6ۚu|0I xiQT|$)2U:-]WAwoPVNO*A!QKZKͅPEx S#tKDҳsķ bjeQ'G/GˍΕ5-vݔH缨D'MƜk}Cx@ձXZ?NzqqjQHvPfY!J0r\Zp0_ZN 7ek{饌5#N_QT጗ vX{.w>p✊(gY ¢Ġ xMX!,aLo]5LJ ߞx%EM]eKY' ېd//R+O. ;kѓܲqu8UZ=sfCLD N܊wGыh6sm:XB'het 8{#z]fsa~`GMG+>Cy`/7y6MD7)X qpr,kbuX4cФyE*K#?xy ҷ\#l2:18UsڊR3:$~PI@m{S& \DPjJE| ٣9I,D~ۚ虜Vb{&oǹJ8o9_qR'u^qRp''Zxyy˩tyka8fԣqRYo8t }\m ȓi)x0xA\V}8RqJ칰yC@8̯89RO"pΧ 3*-cZ<2mI哨 @qw=H^65wL.oJކLd<*!7j2o{Y"a i 2Lnu_FV[/`i*)JM$Z+4F i. iRp4bExpM)߾ly-ԜOS5|Qi|Ry<+< ؓt irW/4=&iCIk=y]ٿ`4d4e坧 %Os9xiN|i}|4|̌x4{ݸ֣y*og<͵#\*QNӤ Ь%lh4G&u7O3L~Ӕ sR&uͳA7ZQa&\[c%w9U}FDKİb[/&,' ?_s} G޽T3[԰H 0A*Nb6 UX Ne؇ɔ!Elp|pC{kzg_Kg(4/}y˲{]>&*F.+LztJ1D p?譪책u MSSUxQf9$di,i ;aRV$Ld"X2O* x;"6gM<I DD8cFīSU ,*]i4_]-UA+B.%JF?c Zsٷك hCQk@?'ɶvGEph)1rŝ Yi&l~nj ^ZI(lڛY`ၺM?mfAM6JߡKKqdSj#葤YCy}+Fm|A/F ‰R6=ƾMCPi"\5r)':mMlu-gj b-O^97hՆ8mChO$+e ͬHe͑Fh;a:7Je=,wicRR j2o>P"MP:;h̅% q ?pN v(cVN fC)/ e Fm^s\6]JXZ}lE!E8#aݪ^H@Mݰ"+y4 ylv̋jHfawU.Kj LB&}u,fz'#5w//ď'<)!=i:0#Wϡi .ۃ>y9 NἉ ?y'1Ϭ^gEO12֜D^"݊xe"iEyޖ6m"L^O|RZ!= ǺJ-Dk]K~Bkl(O%[ ǻ6%1>NW ;Q;-XВ&n-+[|,b{nDev ⲋb)70NzޭEq0ypU1ue==009 sϕkxVePɔysy# #Eq,ׇۣ MR4#ܒqr&҉)Tyv+Gz#@ D Zx:H&s `)nvt`i:3KΓcZUjr9FEh6Xލ4gyra CQ+"O>(;;ab(e#t #58f]e'.jY_x 2q7d x;dmb-; &8FNQ@LH]<riBŭ5O?/yH26"„n[ԓ < ,:)R̚F},ʠh":]Nfz.Cbb=aH /.Mab1S JQqHɃ̪{]GJ,/ntO{mC"||>ߢo x=+&<0LkvnTTc1/0h˄p)b+>p#3s]Mb { pG\̈זEi&mpm`Yf松ز:6\]>> P0r:x˵ x*U6 {k*F3`f05l0\sǰMm9BvXNk9C&a/sř训WC9)kQ EC^414{K}ǹ8)Wx?89]xTNyIWx |I\;Q.GZǩadM<{9_qrB%bj#T S gP@Ej^FT |RXϭ,>qD)6nRB^70tP@/WkJZ[+~`',(Ca)?9ʮa'`G":ikY 9`.>m#嵸MOc%X0UeH`Cd׬p'E$Zm.Um"m +B,udp E8ҏ~R%'MR`0dt5Zd;)|SuGU/Z2Sw{:.aܚ(fșs{ٰoFA-]{iX,/d=CZYjYT2{rho/ȝ ~L%Cq +(8v`NaR6#j 6=Md%}ne?SM0-5+As -+tf`c2F<_y6l/,G4y8KZE 8EXֳǙu}qw<β7#x8Dty>ս}8܋Ugar+-Q>yϱ<ΐ"uq*c^z8]Q'63z@%'|y# <3?wla1lÔ& +$ 0ai]b9Ē|)O-+L`kIlL<=!*}Lc6S/\l7i40& qntۍe64ݯ,뭷;5t*'CJz5=֧aT߆[bYlң!hS\wMkV6@e!2J;j94K#Kub? L %J5Į\) D[W{ =DeA}FqyaaFPM *Z#+{1D@criGq\=-7lj0oş< W&rPHQ8~1>٢Љ2\xe."XZ{+7ye\pYYVGZ i?۬Iv,^eMSǍ?q`qt߅m3Y=ZUPu|DNy.'>5J53f8#D8"'եoϺˡy֫Os]f=C8xl{ WZmk:0k)v|@ocNѳgd1Dàf Ia\ssXAOJ,#%%c 'Rp46=`35Jbezc #)y.eį,;{ q:՜t5eLl4~Q\|BX\bnb{)xvnX]jT(LJ͕Ϻ&R+|(p9=Ҫͤt(BatuĵV5г3 fL9{E^.ۮ\aD5f@Ry^v=ee°f} p}zo78:Wт D6d> #}-p ۞v)Bͯ81IhbPzQƲa,Skri'5'[ME2O`}elU#Zkd[[GST.ߓQXb>L^! Iv{,TS/ 7Quڽ\%l]5w1H6}[HWpR@IrlvGY1Gdl)9nTq ?a7ui/cfơ{Kt`iEjhQ2xZNa7dX _6`f#%lC PKv/ 3GZ39]|z.^ʌ*bmojfx>x+T!}yKxxowD~jxRè;f!?PDwXdxj]x$'x liB_ 0{]Wz#P1쑥c۰>1P^ВL\ fs^%&z[ծj.۳/AcZ?6GDR\;Ġ SOlRB=fqR#ŘjS Ie^U샼B utԹQLp ⚆;=%#o[q2F Yb'kn}'~ͥQR|4˵sdB/mPNג+Ͷb|Rj9F .᭖rޢD]잔x&Y("݊>g[3-lEpQ@ޖQN&N4"q)MF\ncl8:f`''] ǧs c#aeciFs〛s7J_rXĂ Yilk,ۘ>[VE~|#ﯰUl3h-'t?8!wzӰ̽\; }n*OFuQgRmBc4)Um@ӠuX^{7HEzj{շ__mD)QgzOƥc}b&O#ݥMr,K2^698KO# E?fs'dOlC;=̓!زBQ9v3+U-CܗDkn(eH1:G7ئCw\ŢYHnxeIQ^|N%/4b 5n椬 }&iz91x)t9QC[Y{9])'m`kwW7eFySoCDZCqPQESǹ.NJ?=8{"<Α}'CSbqNG 'W=hdM0u[(iq_X=U/Cghvn9]~k XXDRW? t? Jr2Ha:@Ą fi-7[yin{H;&P)}&ޛas+y`BۮVKG#sK9$dY.ljʹyx'ixuEHi(U6-Qơ=JΛ$2td}+OcMBvcPhK2/ID(&&~ 1C9џKŚB4L_ C>:7GiG;H0DV=|NOC"rqZbE*DR7PJs*VV/[lQ\/6."w%Efi.MlRyVBIveM^J\"jBFJ1(lp'Gxk0 \H -Fzrm"ҞKQZ.|i"; #a2νqg[6E-cޥQRwsyUW9%AiTjfԠY2V&I$ j?8 ~Jq)^߾ȤZi1Vܠ3mw%J_nM"LE- KE?xk!shDK;$-֘ݚkA6Aʭ\BC0{`)r,iqgEU4V(͢j(sO,~\_bxrիU /׃l8Đ޲[D@iYa$ȫm]C5_-IV/kZ7#ѪXUPI./]oZ6Xfw[ [e2cNrWΠ)Z>ؑJ/BݖnۀF=epxCǹ$~Y#> ^|)cm~kFc,Ey\ΨnUPm=h3ZLjK{)5}s؋m>q2fyy*^8'z)8xrxǹS<ά8q_q[\DfO?qR`O"ykUٿqJkONjb8o"x>"scoGDWyT<|8VWV٥x8T&~ sI=yDWyqǑ Sv^<pn爠5u/3PӖo<a ]4w[{҄GЧj2 amrǺG2J Z)s4aG2A<|+xnbo$49|Qp)$&u/i?‘ec`<5_63O.۽S}h eBw9I6iE?ʹqTtt p,m܎c)4?e%& hxM=Q_zFiHK-#>3D1ٰ㻔B̰HSVLbͤZa9O5(&36gquf.k6Z(_{*bq(JūxiJtƷ"Ez՞qߤ ˂Gs#ǢQf61?"VH^SyYQG9cMlGx9KLK3;}*o2 ܔ#,vw{RQл!M%0u p;Q4Т7#`lh)e7mtYО tZLuLϭFVh>@ͼկAH)]p;ןTLa*K٬fmmgL89dX[-X"̽}MO* Zٟo^iѓ"mݾpcUJJDcQ$E5zWݤi6 %:dԔD;$Fz%ont{R4ٲڋSUyt8[TCFZocG+YõHOCF(aenK #-^7 `YE:l<[qllD\ (ˤ!V7BsHi[kVZX Eo/i=cE]vd~(Bl$a81e:&f'#\ђ)V?9~A@%MTRTK )[{SX{A( h,[j+`Z5=tZ/,{E@AMMV$^kHcmri*%D6'Arc&ΞlA$3jU@|ZY%]} Í Drr03H3̍F<7uPFtkdIy(355mqr0^A#OU2;GLR{%~bΖ@w[K>soϹˈ:?c+w.,=E9iv 1JR|^6JCWзǖ61Z1ڣ9^-,qˀ#Y_ޚA }ڳ홃-mNlՆ.h!]8`oǹL_qRO"pfw ښgrgr Y1e7)!a\u4XɒefUG(T^] Ep |@SZzT^u'"ڰAoEJd j}'6.>rOg8!"n^2'G*.n Y8`8Ӓn:m~iY~.̵MiNUlHb@CoU Bx'ZUZ˼‘$M'uyߠ^>v# iU]b9S#-F(S$mX""װ͒L--oY}c3l ΊnMSoF{{\'Ctstd_z.D><-_t{2U6b9u/쭭ݲ6Y[YΣ6BEm=_k/_=L`};Gôij*f7:ܺ%enuUU3aDj\"x\ߣM5gOJP/[Z56{D.c3)#+ܛ60LP|SF(ޓJmM鉪()B9߽@'guEG6( cC=Pl/WȓY f7Ӣy` zh51눯ˠ&W14 \sj5b듣MvOEF eކ#P%2(z.MQr m65%9͕. DPeAm:I82f{?i{hSj)SLD^ͩImR"EbV[E $[=)t7;Z"Z|4' x"*FHZyh\Kjo> jsM%b"_C|E>yʹ! Z;8jzoIC =:XӲk$Ik(1 :P;F!!lUse}eڱIm741xdiw^6QZ8=/.̲P'c+P¨xZժBwM0Y%Z$~ՉcZ<7;m7C=Ι8`o@yXZuׂvdK=kGD;k>hXe#9lcpOZ mը[nai}^HޭqYS>ay `{nb؄nTg:\W]nBkNU]8>K{Ac:[_=B˨\piR<+r }Z*p3->pQ^hӡ:L3KQ)VZ#->CA /P :W@p|AL?Jv/MV> /Aů/h+O&leaHfy5=;[$2=߱ Ňrۭ`3iUpD߅߄`NRꐖ\5%'g`j(R"F2r"(sfH҃s JGIlkAZp-Q%*NvJY$pQO7ט VzX=ʹwˇ_ٖ;T݄auˣ위wnhv+T5ӕT &0j *Ei>X `,>"6a3?厍C͙u\lPkkK€2gOV"nb"9Z3ED~.J1oB¸q6ltv;W'ˊp$n+}8 k,Tzm+kM8iI hk[QusTEe`yLHlQ2OǗO9e,g bq/?:,!4m^o=!`[<8gKy;tma60ܢ-c(GZn/3&)yd); A7"^BksGmbuWpeQ3ؐip(64,Pܳft^Ţ[\iMݨaZ6 ?I_%]$y5{Y]b# _e" īKFWs-0(hgs@ g:]| "4>9ߐk3xcCK절m l3} +ׁpUk؆ˆJ^\ L;KWF}i(!KJ,'b&5CzѬ4_m,KjY7lU]brF* A$ܣIA<3{j8yYϱRXJ6`ylNU^=Ìf(D)4zF&.J8oړHQ^O<4g)%֛SW/OaJ,|Ss&|!).9tMP#W7Km-;U,Ne;Y~B\~}Fh3^So'G`ݓݓ{Fٺg9\.#{S_%jg&1OCS-:^sŴ:mL#sis k~9K׌f`h&Q`╃'YOyf2cNcYݓZYLnЬRIR>ԉ<9AMQ\~!,X-0vʌs5c{R`9⟱=վk"/̵[ (8$6Y,H*)2M`9y7$ZB 1K89S3&s 6U_8)"+5Tlgxgx7 s\|oo8o9_qrMqRcs:u8h,NHes'u7C\|<ά8ox܊q T]oC0`:֬e?I('&N;U0xAZFX"Js4ء&M2@쁚Iy< ' HGKPͶdd:upsɵUos4]s_UA2wSP{8EZ`94W`>yji83}<4Ud:%F!ya3m^ EMk59*:!X (_h,>C6=(?L BkSe͜|Z'՘o#/)aD_@/[ H -EA@rĤ2V#^6QF*'yī9sW-7 ̦PK}ƪ6QF"OcEmAP8ed"46ICAm$O}iHIj)` 6݂x%K, R˙ㇹYbtHAg; n̼ $ĭհk!xV*y᷌u_{&8,6r4]u-۠C>AKFCUiD5#4oI9}Ro=(7+Ê#*Sr'}W_qr7x߉8)$x ^ -7qR+ۋSwTG;>q!x'U-3{y)axxQ6_q s'8:oz.`]9e._A=􁴦meG~2IlOp\Y= .pŦًBwت )ϹI=4EJŷ<TՉ13kI`U<ϵ])H2ZBw_ʫ)&e \7-dXD\*iX޿˙wy(QjB+I`QSAE<Ğղ2Y\Alqw |8b퐰K< Vn.L}E@mGQRĸ͹=%ӽe+pRIrmi6]^~RohM3ġ&Bp^z@,$]\g=WAxq@ ߐt\~`ŧ&1"]?-,z׎7N0jRI7-=3qa%{Kel[&aQF5䩩*[bϾc!f%n̳QgI8ql`޳H"N2АT]/!av#ɐx|C΂ bo`)YM#akfzGgK v FY`ѷ bm -mZz/𭍟Ufk\xIi/V׋ %K)"E89B_4?呸VSMӺ+VD#OّE)VN֖p8UդuJ*kӝn @` SxxU:,yrgb6XZ;4 jaeQw&[ Rc >Խ KQ팟yy>_^z hwtЕHak_onE#QQխOB {A eŢ:ËD K`O0lMlF!RgK*? ӚMM? P{kkOmp,Mf>h߄m qlnm؆l}6.b"#y8n֜/ʢ5t[mgE[/&ಖ3{6PfbT :,`K^$Ly'1}tXt}aVDaX4k.̐<$2yo2A2U?_@:f|<zabrx_7I9sv.RD8ٿlx(7(Փ9} !Q&hz1궢 \li/~ cyou4]Vgvt[E ))T;"ߓ<ͰNu9GEiqx S@@fmם:`VC_?0'*\O1K.DEBD]1IeiMՋ( \5N̂O;՞"Zqۘ*bq,$1]\G]艻d;*:#vdC/P.ƹ# Sh}%Yհ H N}DVK*KG.Bn+icEPc3IEʂBhXo,^=غ<2GO3ru}R:o1-;CM8*9==8aJ mNLuynuNʪ#t(#c2jyC?GdlbHNC{k ڹUYHcm6jDD YQW-jG}a4>մpnm<ԖZQ8QlE}2ʁe]VTe*ș7>pm82:z X܏o nCuS߬wJH:e/H=[LS4l!o%Jx>:en"\XK@"y]G&)z#]pг=&xҤ1]>1]Нʎ`눚e=[W/7)f["eE!n>e]bSp?戯^%4fYZ4tPh%uCCSUQ8 c0;ŷ,eWe AQe0BrB9O*Vo]H"tÚsYʠͣQ|P9+{%SopSlstOW&i0ʟ4MNc&4WOs!:Ti69,&gSUTi.ѪxpY]hHOsq}49P|4O)iR?XM{Iipj15˰4m! ˞%ym6690.FWۚgt;Gfm/I?tlԦC8U#>9k[`jLe}gwM/߀xYGT̨-[2G|\ɽڲUxF]NJT¯>ޖb9-}D}OQzcN2aSʠ?S4/`%{oDtU.ckBq&ӊ±ifjTy@Y9& ?~$IDJL̪K Tov7wo9 ;C,lvTbBՈI 9'}aш@Oy*\ȡeğVڏ=-= 6Η2*y [NbD6"CG3)tl/2(ЊkK)Jbzt1/bPbngFyve6 lg!4 >Y#6-ynP$rLCF%1zBND\lAcq7;qٹ/8)yy**o8ux?6xV+,beDT!A_?)c6*Ljcy>D9g1x0]~RPTO ݽC{nJcmFz@nR yOIA ,`@ߺJ5?)wyL9̋v#ӷ cNzH ,O c3%? Qз$9+8¢wGtuk{ȧ0eL>pEްhSWYyGXM/~f# uiQFm qrȢ@bO)'~"Gq4g]/I?(hLL͠ɇ2a`x:i 5? 4ix6((_DOӌ!1#^ xl4: ݍ9{ؼ}i RqNIυwFfExxo9)_QY02NꇳyYRn-Yn4!6Ӕ iw &ψmOB6Jy.,[Y7e"\Ei朣3Gۗ6>́7sB!A/txs!2l(}D(:.#{YDl &@7؆VCo }yc.l3</$ٵ ' " {&\KOx|d:Zs^,]ЅWj#7hOY< cSHld \pOojZBaP a7*HkR O%ifԯ]H9?H4,fZ  t?$d&M[cQ9+s:nYU̮cG.2Ԯ*zU SN݋jEl3^*܎~RXO^;l"&ly~2xͤ:ֺ#[xŏr?K<^rVpKaes$=\OX f=(zhhcɴ&pSGELDWj3}xoE6_ކ;OBf0~^} m`9s6C(X|'G,d^\WdŨc8i3kzl ͙\QDD~Rnj4Qmsu$coс)5Gjͽ v 7al?yW*sç}?1|КB 2R4H4d,^VQq*w_ܞTCث*)NDyRtRM|4YKa4<$syI4i4hყY$4!ǫ?y䃧)*i~|4?iNij49M ;1HF$.Xu=•G*D;l'"Jf 4= 1K? dXh W[Q<ńaqM(&?;Aې%d4"o+M"y .àyK kq ,~"~X-9sV>儛(*Ey*QEKk_iZxf=S'hBh. FX 9] ((NP(M|ϠHld?;C=g0h,86Ig 4t }T p`dI]w,fI-MF6]{R~Ix@}lqXI[-rMAH ˩v5%P#dN;G+V6Q^c I"m +5ؒm\4/%_# zN^[rVkjcOKC  Vڋڪk"i"7 *f,TfK1 OӖt4܃DFJʕ`4=ꆅHRR#uDHy"qS`+o(m[+@CX> p459‡ͪ9BHrZ x=񑝐QR5iC!p&hhl4D;J>*F2XK=ab~Ω69h 9lޅ}[r3ĖHIA* n?_>לhbvNEZ?`嬎zf\N` vpcnwp<݋[!l3APkc<虱XvQc1Y+bwLcix&/{Տ *ƞ0?qNoWxTpN|y˭yvGqr{7x\+30N;)-~支8[C'"qra7x߉kq0{\")%|s>qRIo!}yȑ,+<F&(+Ot !bo]cQ9@'@[gzR,ZuSÆOġҊ?FzS֍HG~ަG41gb^ƪ-{O*ArFb-)Zn(MtR*N0e3s,ZJ6SU;P[SMU*k-s'1$T٦D^ , یfw|tb1!Vkhb\G<6E᥸CXڼJlvn3v.7M宙C$NeYacjA''Os`#Kthq^:>wx߉8G]q羾㤞w"^EHs8cE$ Eۈn 6Dzw&M F}$zd"&$l2c E] "#jlP:$1LXxW4څ.QAHh ?h#!m]BR{=WIν8m"̍v[.J=a]-3\r֐ӛB!". ubq&\6~VHz-sMAxoi FoBrq8?OsCK'9~wYߊ)`=RDE؝&lYctY!zR(y.@Ut~'J 癑d  Gg~rT :D#&2 dIJJq҆lB4ޘ:ځ:b`dcEmpg5H|^fYۣ_YsjVL'(XZY#IZ5q(L;Gt@Ń-(̸DQTw+^vZ2quіZ7 8 nzI!f;CMn<El< 9_Ӈ>0cjCp OY'Hf&lcI䛰 0gh渚>I/ɀ]13 R-9 MACG*k$2gr|3MiX-,숇q5l@fFU(Gߌլg}K&5igFʶosZԷQ2D 9u,IЮ QO/'J2{y<`{'r(F%Ga燣ݸlQ,7ZjMMW$OB)o%D<{|>3iq@E霧@.aǨ6OccZU,9zqy,%/xIPr&ƚH6KRQٌp"6>^;4#3?8#Ӂm0Y .ҩJj4|([fm<͒?Ggu}b/Hi9&7ET)k=n6ˈ$exA` tOGfjUMݸnjR$iF F EhQI'-hEvУMiFݖQ.CO0xIӈME r){CFv1Kx9J۩>ճ$O(8um`m~r|aj94hh`"0i/2KzdY<[zLS<>XIH}gc1__hXE"<4#Bs}Ld ڶw0;:^H}8-B.gLG[uq%7r9(ec&[C qx(hZv`Yz0aMV ANE.e@rߐ-B8ei5K$IA>C > Ds=4kHUae%pIg0T|g]DO'.R{=R!ioތڅKas eT>×aeh5rsJ{;/%Y`61^qB&VD#̺5ErUSLcs:ϙyǘx{1L '! yD{F#X'j}ݵ5-#F⋪0Rs@@6KHSpxѠj}B|zfļwyv\빝ɴ55tC)1ȷ6/2e BH8]FKaAy{Η[H:["R)|5" N!T=2Ip:FRw psU7&ܗjmJJ@,y.)q1 Y{8,z)qKl`;"jfD= IG,ge@mBLj!HSmXMIDrnkڹ1 Ȳ0 x:=Su@Wg%EP~0 e1@®6QflaL SC0CPհ[wR'/$@EzZȴE:U؍i#2!1K3zOH=SFo<Zɼ:k+crl&Lh '[*͡XG_ rC/Erf+.,ǙCq;b.,0"5wG. iöD\&mP/*A-"B!^A갸\]~`iHZ4z\52V!& GR1, Dw)vGd<u ќOm:1v~JAM[64SUf:Tz7@z`7.̞hFN8ͷ~3k mŽ*?䥞1ǚ:dώ|V&/^DNkn&AxIw6(d.7 Z4q(I>2r>^"3:PfA3:.Ys]P ,-ɪcF\t-Ӵg>;<= D*~ t) Vsk\xBDkJA =EFcokie{6]cm -+޻jPDdcI2v$l9PܕKY#.}CVnzZm!M@/\TKnYF>lnͥ qNMF1~v]G-;JǦ+ *_=)~R'=䬛5vAkL dY3b_gڃfiWm{(6񓊢&A!G:9? 'xɗ3 䪖)㌙LϸGΓkY/g2tE!^6U9HAً7eD!>GZ}@mSrxP7d3URk˶{!@FMH=5N%)1؛xDj=pxJ1V#֌ۜtvY7W!IO&倅z"e^sd)grO$ƓWdNӐ'Ow4<(&C>g>=`i)i4p4ns;M)OeO"iiAOg߾Ӥ44惧])O5σA$Yi'iż|IEӜ?OO4MK @rBtióP"!hOܹQ]38z xObf^1@|@3d=U@{9Rξ x-EF^7v!]:4@4ڡ'c_(uK6:ީ{ ўsU"B-jelH\>>j>.>6r1nwqpΆ4;CTɌ.86HE Kwh)܌2/ři42 @ Al^5 ~4"nUʹx܍x{\{.4HCD}=Ц8U'է{ 2bGst?eH}JILH󝷉Oy]jzmܞ'ˈ2Tv_cV+l.\8}!~Zٗs͕]<8b=VJ5}bW);AXj= מ6}$7o \nܔ_MBFkt?Zo)B>^asӘ1qTjR _͊@&1(_7d+Z^ūLdj撪/Q,WWr4ީ{2+ )k;G ih[HIpU3utJbXd*T/yAUqym`6fG#k|ꟽ,"n.Du"(/ rKv8`.Ʒ`1F ZueN@8R܃D9Knm`ʾ+<xxi}'D]3PgրEɂ%z@grStm\|ް`1nRw78EFehX%Fm}lI-O9e1ڶ+ PנE)v0Mj[Sw \m@ʊ "(UhCRZc;d)Hqҥ)H $48ms9*νhPK+9|]DnBX0"Woy+OF5umEWI$"]bLMrϒ-$GtɽQb:;gH0a>9u-RV?40g?<-\!0+Ǥ=F}8zFc,[k0iTͬ6Д,-nd)8:3{ώ\F-R4/;w\SR$.K:Ru„rz3.4/.rm.Dk{Qf-L鏼NhyuKfZvZusm6I1]<m". YfR}h??1 bӋq<ٺD4p kEcӫ;祥N_ S&Ż|(N{2ѷNAT=P1za=V}ʄXu+sW.?B@5_TSۤ2iQw^J'UrN-[d(F^,F6)kkMgȢSVPV0uLT='a=ZzhnlUzR^ηlFi\%7Y9-L߉895xLT"qV㔰qz5qR 3c8 )b?ds'7#TR S8!gHm!3bO,k \C{!$?nx1 5B1TzkXT)쏩OTQQ$z`i[֨S& EW4&XCAs0FIkpbXrcM|awn*)(J 9obˑO熵Z (P %.^L%A6Ppȋk,r g /%yEL^F 2%Mpɽr߇m C͐E Q^Q]v=N)x/%-JԷ웬6\`/_0 0iQ/[.#k~hwCx@^ [_=l#yuiN ]k`gnZ K7g TOmi6[(QIj}I4=Cpf$I#!gfUN4_YR#[X,OCMDT쓲/a4Nh[ݔ@oH;c5ri"s5D-~b}1#|yCFNi<\a5ص[^< ^-Y֋ gIjmzk.)-3䀯 foxCfy[Duzؤ5}E3TsٞцW WqmzN)? ah4S& sP9b2z@Io9'Yq6P3=q' U%΅'_ tX6PQ# AS,RWœ<8(yK@*C%ɟxpj0t#\sDzD/o.4g2]<ʹ\G>8@qf'1_*AAncFkZ$*ĸ{e{P^ҠlplXGۖR,yoI9:y}eg`zKз]c|SF EO5cئ۔.bO(ŃNn*&_>LJ_qV~9#+9_&b'C 8V^jx]6ɹei:4(?;-vJQpn;YD WMtt4mizAb/-5xnݯ7[W6]]ſ \*_< ȣWK=z09}!ؘ.:8-n"q3ou4}V;ԩ,={OC:k$/\ 97<665ٗ4FevLCӷѩ#(Z\{͗A^%uEOc&u#M-1`KieFy+έtIK7ҴzlOYh5Ȩ|䟡aR 5U콈j›gdڲV5bȲM'8Ϛ?5t (Įg[6ڡ̗[G_cA6 ᶐDF[P}(P03E,mFA zM0dFb$aHGܖ"lW:"N4i4|H0߄Pl['B=4I!cYe=j[H†73!U<_DN-iqQ# E 7m@F6i&GsvȢi4h)qtٓ6Ѹ if4sV8(;*FqbEc &2TрV\4ͬ )\=0R3%]}5rx4tJGy;Qm+ʔ ´Mu\j60+ 5}5K)c'9NnHD?֘PX-v) 5i ̓qK|/~Dv(t8#0r"ϔ ܦ" j)C8Ҭ$%шz1,'@26$Ϲmx)27b/3f(|Ys;0X*=x+%0%)35B=iIMiBHiM Q9e5uOXZ!=K@_,>$jNrt}mUUdiaNXhdeLlwb$KV6.$;E)i)RNdD>e 5ilh<^pŎdj4OW@[~~k̾Q+ 8C^Rhfzl)ft+vKi5MrfijfX DsAkVg ѪQ-.9VbFQj$M/Dm^չl)=A2?/Kļ$$p/+E^B'8y.&)kUh㤹xmVMRy #DмrLhY؁pӒxF0*o!ұwG}A0E5L=:SkvYAMڭ~ Ɋ#w[m #3>TڌSRb~Rۚ,9;0`G1,XxKSRO(a(~4=È:H$W AӻV"+,#{΅z XuX6uXlKd+w.smFsԶ2AM[7I79p*~brp((,mcŭEO @4w5eiie!$zJ|!O""} wk4?&m5&D-;V#D]a@e1h ˟+Y,+/fix5lc-a]d[-GIR-@ZZozm9([s[`v/؟JOǡc9z=&dqÜlEqjQe 4FKtP2ewhCW8dW5-;U\ y[=d莈Uq9o{آnO ,sKB>mX&!(/vlۂyFMωGy-ͽyP>lwaZ@-% mE'ʵ7j􌹒ur,ot-MSM2^"%C,)}"UVrQaQkGO[mZ~^6棦!+jQs9Fnxp¦%@!If$07h*I ~5 i(紇:Dq>k$p'+Vaq!-_ R6(أ<y:ι;n1uK3bTssb6bл/ ޱκa`S-rT-c2OUsOf9$$ T!v-Zul~@W >ay`ibkƲ)ry>`8<u!zR`8]G-?3CDQ@^N)'t\ˏŤvYB#DZa01>*g_JB&n":6a*ŗz4SSS9 'e/FF5R7T 9 6P_ |=|lO*77D \m"oEYXy =THghAqxSF *VzNbAZ_c '"lS@ m[ x [.(@+կveg< }Os\%y4;U')qr9S8Y!<&ejvl0eM} MZYb2{$ǪN{M.xs-5L9r$$طKiAY?Ly2"Z5O:m!dL5 htuF#0D"Nv'%xԽ2pQKqP].3IEJكxzk;ޣΡQljz{7*v˭η<؆cco6zU8bTح/*OfC}/`fd,3eFqdžv|hdVrnKu .a9C>%#*1)#2<Ň@3+`hխe ?)Yѡer7Y6c7%-nxj*a0hgaLF1ȶ4Uwlvmrھ졏F&jNi]_!>s'nqN-zXGUMIQdĦErI Elxwꚝ㔵+`7b/ÐJfkٵ&&p*%S(ލ@Ô جb%u"50rQ|B,.G,cv<]fK1sxWra]>C5ډ޿aB J$9Do#C{6o$jZc6þggF\3Z<܆uꥭ)]hls J !Ln\ 29Dl5=؆`)hcQEl(29,DS7V{ r~FNV1h Z|)&/GYA~ղb86 Vl1WlϢ/U"GlĽU>"d~>f3Nǐ(16X0Kv;loSlN*BCT!ӳ/toYEG=vPF9&%sI4K5 %[_t|8Y"#4rxZ)\zDwlC&_$jئlCJ tרgLFtґ>_>j}jS'K *g+=AMcYs ^wcMy;0ٷ#BȲju;UKŽUra{$bUt7 a+޳#B 6Vj;ʹXhH+]\GL@I֩l-̸j,(#\987s Fwm1|ˏ}9N[=I lxj>4'Toy$Q8A DL g N=mK$/<\)@9XUߎJ {`9 +2r k6ۃr8OٓY. F.kb9XkKQ$d8u6ݕPo Zvp\5w#huS&T$F=MbRxelfɛ5hJrf pَ2{iB'*>&/Jw[%F5tJWRQbj^ufR$E8.Z$KaWk]z٭i׽r)̍`Jڊ6Ql95uZ+V 4 Mf']m-=!/s/kpTYcM%,on#{rPy2826:O|d )T-n<"ѐ~y1\HdE e]h0?d'Տ-Szx@b{'HK`Seֳsͪ`$) IßsXgcRR FU ؘ^1‚ {`t|+~q9RQ@ \%U~` ݬ|RQChSEtAHTI`~$(ni?)YO #NJy?MfU="0fDŽ=ad>"2toE.o7h?:2$0=ǚl 18mjdnyeb'Aԓ_6Л`d@R+5[/'6ɑ'MMb,igh({{F 2R6n|80"oκWfG}jq|:Z&yXxE^ ܢ.*/EKzarcZSnm趒#D"C۵>qν6Ydz?>xY"Q g7 8㔢gV街bUk0zFdsmiOU)[;Uo)^ozRI\,}NQpϢvLr4أ<+ќ,QNgn2[y)#"4I0^Mm=lmK 5c)]XpW! . T i*_6X D7!l5wzU!m*sy3rbQЯoQ 4E/Cs ! 6 z>H(r<稾eࡸFP.pP 6vLCžmJ}yѼ&t\TNQy ,7]JDO-"ADRvHy`P85$$' ڽj25OX HqX 2ѢZ\=ȇyK(\.m]dX)\?9.4s 5r9RƤїZW'ZvZ H=)5>*S)|ѴdpgllKd(& -1i5 #`8j9Ӵ)][`6X`)d୫`/hDΉ4[~OSIei7.'?p4) |\1>s<͘Cjsxq֭i4ي*!@Ma[2Q6BK!Z4zy`&OO{sk^)牽Gɜr?K0 <6K\9ls4Ct_}K._pX:$}OÆxS61#&- Z 6<%dsX2Ii"*d0e{@"I4?ݰ(/¶\NҬci-_E1@ݓ;[MX^sn-g/{y؍J<+Kr}n6F4DhR)jM|e-~ogo9Z\a/cXyiђs5[X}m9AV=^Jk˚,WBli7p~˰V%^qc=];gئΐnf-׈V EsЏ{%k6$kfsM!]/x,[ PpҐerO0SBngڞ xkGюxiυ%BG)ߣBdRpjO9 '(w_3xTOI=xNv:Ʋs @'h͎*JCtp@0ˈՋCd[;RG v>ꌽF+XXlEL1NvCb1>yf|`.J+‡ަFcHni`h3ѼV~ Wּ:ˉAKriqAJS2`M`e]b[{\E6MKG4WE_z݉1GS[ <sy`PU) ŬUCSw(|_ZQK-OU ,4t,1f v֙EjQeMmVuT[%oӠxJ;Sb#tsjĆ1$y;8~2C49Rp`&9%s$6gmŔ"XC,)B9"tp#QHAsًZxT M8}ڡ![mo!lˏOGyC^x~B J0yY&d[o7h(+4F9#m1 .VEL yבkmMr^g`sʢCxQV S)2qNSWxvy*wxO n8Iqr})9<'xCuDf[F8yIݟhO<W4p8!=\ 1\y?tlP&.s#F=TμX͒Xp`(PkUkq0< 7* n;MZD3Nq(n=g ^dV_ vqY' Ɍ`u)XZ32IC<(xQ>PJE+a{Ii['mT!T?a^#;KzR9Z͌x#%){ 8ҡi8)6oy[0m'^~dE"zFP)˔>̖NfHssxR9_qrqrzǑxxs@FY#:QFL %͇͇x9l>z%\LA ]!8"F1Z>Y' 4lޒx32In]Ĥ ELKM5d~ԷW !;hR(Vư>2^+KJ1C9.u=.QCX|uoTք$Grcn¤!1k+GiL?;Ϣ.[6]ZϹBhedKOp>'#Љ<\Ax EcvaA_NheA\שvVj1U ;pTa V7"ƱnZ3$/n!Ex{R}pJ0 dc@8s_^F6=qWt[ǬCU>zQLckckt$S;D?]pTJ{Oy6V.=^Où#*!IMNYc(yE,Z Jzg6u#ň%żQpsLz9NEZLG9ҀiԆOв-+a u^dE<O;>#IX=d"ùl|q=2.$Mfϑi3BZ֐T[vPzˑZ(TJj!8rGug3&=rO=C[Q շaEZPxPH算57 :y )=lNUmPңJ ڔ)죌`|D~OhiڹGҷb̫HaX9 A-fyRFɡ/ VŇ IjĆKjUA[νsȘ{Yhp: DZ 6,Ssj.hH"a4$MUVlja#2;plԃ?%Z.R}`-&G _&~a$C?҉zYq"*|Q{Bd h64\JRfQ=06T59?lE]FcÔ+Yxd(Tf |b `n59e=݇G4:z^MT^$!:b!3f)V>QRdZ{hJ{tYDCzOKXZ3嬇qe%9olfiN)OxB"f)wi{0[sD}:]QJIAo~(zGя=)~k$XrBb gv6'!1:M4hW3 `;Y>"d3ѱoǞT% 6pljan%y, !34>9mjLSI%'8Lݓrh-I "٫&iD7`ڑ^ )* M˴UȜm.յ85=NP֛El3PBL*y.5*++TPuy!%mjVwދfKjw'v8!'LauA F’U]!:,Kd~%odn3|ږxBK9>mP?pɤKg8E~ul*g!T,]8P x er_2t4HתVI$qOgeSئQ4ʬHb@BtgXE \y:T6 ,ʄkFr#&~r ֍yO9X2̑=0sK7xgoiaȞ-+ڀ,z&> f@`o6>ob6!OɵKEהFZW濠o={R *!qU~kЖjQQߦc?cK u hSّ7g9.1=%ǀT^DC-, ")ͭamPr8Y_ˑVel.$A)xGqD7ebJf$AeE]״ntɢ~X֝e)fC%8=dS ۉ91AS^杳Y8@cˣ,-z[t԰Z2cwq<%3vlL,Iillv6xi84CDZ>q|qd51n88+xԌt?qNQ&r2Wqx "gkqq'Sx/cx[a=OÏ/;E\> GUSQsl/#gen9= Ѽn:Mq¡o#QCs qT}>DdOh ib )Yw2aO-$ًoY_fotpY"Tz)|Lq;AJ&c[VۢI3ϚIؿRӊ,܈x1O9uoTKݱ4>3LRj x?,d:`WD$O"1>ivI1]~m.&^}CC5K=I./SYE\Lq5{Ct< F-3d$OϬk8Gܲ!*٩a 2?U5-NtdG0;3itZ -SjEC4xŦi,i Z5I[Q``[sF8fÖjYCZ}qٗ]`XK,+@K.{$m`6f-V6/':BxfiDNYz6~b<'\ပs暞4$.fIsueIvRi\'KPsv-'])9n{R1r/ F3R4.0RS&8Q]M7$Ғv4.G.עA dMQ,cjLUO5m&Yy|Bm&Ii|TLE(ڕ]-:j=˖q$M6O3 Xo][p`%ih2,d/e3K4O3a[NskFi@U#Mv^4랆`qc]Tp9mO#[Z~QfK|e+}=YNnFv5 >4ZӳeԞ&-GhF8J *t4eOQԝZ䋠̩x@6Q+dL")r!l#RD8èzh2g"`*H+;^1rM9e!;H7^JJ]8e%Sn8R{_qRw;U'i3qRwx 'ՠYn8ǡ Sz(K%Ɍh3gr%*qaͰz+43Qs1 [i%JVrm]/6%_JDR`kRWFinNY.4q+'$cLY`GwR~bՄfs29_itHz{JhInSXM,Qsӹþ1?Vt"tLBp8R ?!9ϵR$KNccWRӊ/f5^l]e;nIl<$%K*8c}ٯ#bwE\i_(vrJG$X_/m~ NrRO/l^4#?,b4rdZJdY-0cZ,H}H=%)5SܪnB7IMhge3S͙|5C$Q'^U@ފ/%09 /uJm7*c@ Q0<|(Ň h]^꽴LK5 gTbP|MCqCV6ɱEШ/ŞTY2H-YwrMRu;~;%(aQM@Z2@qtCxYR·6F @ 18OC|jsz˼XdېLd+/(hrR*ɓV{f~Q{ze+-ʚHom65d+֊G.9{ݭITO5[!`Eʣ5zEuo4y1{G/*xtC}xqԓgMW+SBǩn /wxT|9 &$"';sN'ݍ<9q)%x 9s.Tr+JI"''TqNwIFlgw+8N*>пcyY")5}i_[ (cIlwl G #+=gG:ӱAmz[MoI7^ZP02X}~ t3SZ lQ`rC!ln/3.k%#ԫ6 [_|zTڔiF[2sy TVڄۿ ؁4ln#Xa`"n }鬔,oF!G2J9Sn='HaY.4J2奞2W,4\dcYoxt ;gse[QT)^?q41)F+lD ;i,x^Q:%Y Z-!{TnƖSlZ}ylf"UM($۴vx?IU3n\+=y9#I@g|OJvKK]PHm;]sQ$J5\~ C嘚g_B0̪]|í }KNqxxfK7n1Iⱻ.c)ִ|uzr>`\}_9V IQ;_ )bgf6f6V1uW\sR]l>5oU=1cjXč6ԸS_L:>Q(:wOo6DU8Y$1nEh.5%lE^;`"ψfv^h U8Rx{1;Ϩi4HC|@i{f"v]Ȗo[߷#DZtiHBRCS";k28,ֶj9r#Od= >W+WP$^!K&sj\|`|o# p9nz$rUr2a< z!j͉<6qϭ:uoiI3L`m[˪Ǡ zZs^3|cF 6 \O#5n"I$o$,(45fڊT6f{0/NUZ F3jGfFT^f= Ƌ~r"FjX(B)2M*ZhUv+$0}ЎO(ԭ#AR*g^F_16[uniO(*z:xԞ٣[+6kЧ!|,m.4c_Ecp}/vO znxOn5l^>uk}y(}1xA3PNS"l%g֞[ְQ60vI,Й6Yz:beՄK20K{ae)gqO(v+ITAٙyW_)R<]zkV- !qE@9ZVFB]]zb夜榦kݸm04ʽl#viKVg⋕Hβ3D0ssӤ;<4Wy&qI iR/Oj҃'Q)cg8e&}W߮-QZ*`~jfs(5)b/="-re9@C[&s?VվK<=UB?p)Fag.)W^6KI6kT 4Jyzo8FKkamjn^Vt>L=8#E9׋9el@C<^N7'Jp?m"B'GnԲW$2yM+lȨOd++84)8xxl[iEyZ{tli3tߏY6wxPo-ɥ/X뢝+&siU|`-(9I\2X'C[`p6?U_? M<3泓H"n:Z(m s_7p.qvL1[uū(#Il.mpҺRْ{Qlf&O}>dyyjy@Cg9/H(eooY}<BC]C<Ɍ9Na&BF5%}T%=Gk*Jk48A-(p3I[HVC'Vu〉,B (aeR-'JM]pwv,7wJ¹Ep/(śOR 0GuV_R< YؚN\aECA=nsدYIFzT#L@P 1,eoHW)f%aїeLT.}Y Ԧ~RHe9dZ$ j~R{W3!V 7UxSyìJOX`Yӆ=052#+u9'{COùԽ9on$q(;=5&(vyoKǗ !,xuxn]۵8!qHI)&S 4#-2Xd[v21>]R۠E6̐U+Ji-=٩Rf"Ljfzm]LܙvY4ocVm&~@#NAY1T kNx XNv|~_8oSu'5$y*:6wx[SIMqR/wxu `o㔘Hro<)i#K||7,#rJY#H?g>3rqMIn8o9_qr7x̔' 8oxIwxT|9=_qJKC8TWxU'׆Q}ϑ]"KN)/C9"b;Tr4KE]9UEϭK6G7l!% gٳQP7^\wZ*njSKHʱTψ= p px$zǒ#Z<аnooV1;,-8K'eVd 8Z:ڣT F/xm,q}hƒ);UXInzᶑ~fu_| Ay?2PWH/~2rqsʝGH@BV$: n 5\Ha4{-lZ%W5{|7!Oo*YE /$Ɠ5c@RS"@5fb1*^ˢnٚ9EyX!bFUj% -hƒ%)W,lKuyĵF~Cr/äI{-N w mʒ5c#DSdp^((l#@r1{sn$!ԦٴAv:|+awW*F/joi33)cp޹a bn[7et6ХS)xQ` ddKه{NU^m];ZY"O?:ۡ5]9[G(ߍvK~R1*LuiJQx5\]c0Br6WjqFUOPCRV7Kig[j%lg"LBt4=>=m (/kx vSY֕9mTN<-+j%ѐF- 6CsxD `i.>p8X M]84v}71֟#{hv5=,%^< ~vq6bN)8x^;ߡKxN/RU{$,11_"[ 8gBE| HzS[cM!}Lwn8MAVeE "rBUvBCs vq&ƂKC7!wڸ"KlȹLUEb6$W(D0$hUr k}(UeиFڤbWۻSt#^2KjsK)wغJjb8쏧c>IbG3-=%G(=R<̏Ya6z ,OLGX"qUћ ˅質@%ͲMWM7KVRF9n63q3HZ^.1&;r,A!e< ֎Z"QmT'(^ ~%eξ2KMĿ/7y2ZgieH4z6T ɳu,ӊ0x.<9XqRw"ggWd{+*3"LGUk_,lbV>N5nLd*]}-]xSz(G.B_q'8mj9Eqjīi;}-У,Ǒo%~9M_W8om|Sǩ6/qj8%Jv_+}}>NgY|m }.9^{zǩYhe)s#giC} >a'}[}Ӌk}fDZ͉FW8oUQx+W8[Σ8yF;G$7򄌊ޣ:*qb"di?Mkώ8rL5{͞{;G + ⎎ߟY[<ok1VE!a>#8 (^S}G}~ 8mxq>Y(EJ/zQ [7@n{TnܔĪ&4uZr;9b"tOMKnEcx">ͷR+FhojMz%H|0'>:WY,9QH΋!.W5;FJ{$UI-ZCܒ͌6Hr.pR"Z8llC@tEuxˬ&`vi}-TXȒy bV3J#:\嘑fz!vXNj>R#]M YbW?_/&gō,&}=f? r)Ơ"" 2\~[~7lӓM MC(0l2 ˷-eBp dYn蹼{:m 7W%2[4kRr< z\@Z1e -UJUeIJ Smlz.qԩ2k=RhboOL.UvSۤ5{s>TL2>̳GkنV*z?6pQEj`aoH*=6i1tVDpZê.qowE޶(j&Ҍ_4߱5\|Ӿ$2$&N6; }it!(ыzw-@4=4m0tθn7sQWt)nYfDˢ;'QwҤw9@bU \_a#=_eTw6 Bl[ ULu 4Q)rHI' #F H=':& ? 8s/64;gPf_S糀(ݎnM`qDզlL&Oz{pѦ @r^e!e?y9a:.HQr I. BJYdzQԈ,ĭڷ^-󑝖YZ ߜuds,"%&8XIzd.qxRLЀ$?n)ֲ4mkMqȬG?,׏|gR022  T]>Hx{'OM%=խIF?&(vNYܣy .q֭ZkLd0JVz3ʊZ0풆 Pg}ҳUelRy1ɏ7MMY[elc8fڵϡfvFyjIe` E04(sV!ms&i=ءQV)rSFDb-ZcIi3/G"l% _f#)&7?x]nb;*!,Y#i%Rfgc:1&Jlq {6F{Qk<7tIE-Hh?4t!$f4t ۠fQ լJ-WML*:fCt*7$g ʨcZImƌUa$B^m V-|4Uwz (HfsSYƃg{00!.`j?D_Lz:Lo"i؇`RpWUM+qzm`.CA]䴥^INj[}/8&N^s<,oΤa@=teԕQL {|Fwxӈ7SWVv-vɆ4ҜfX-'h0ٔNH˪HO[>aax'낼BH>_AƱNshbo6602s[kv)fřf-W]χQ cyԋ6y|AU 48ǸwzV6i72SDAF-8nI&6VVATۀoܡnWχ  $YI;e!;^nQ;>a\PbZ.y?zT`a7󽧒C㐤 Nn.A rM^>`?nz1"!8rnW)Ls ZuO' 92jߣDYbqTKFm/CGstZͺ3ik+tS Jo`.[_ċ̡NpHHXH2埛Qſoz,#͙sJU㨷:2C v/[@3+ar?uR񯜢X )6ROc~A8*6Z Eb_[r XNiLX4z(/vBS-p)=\6 ڔF\ݣݢWQI=̍戠n&܏ďQE$yqru]aG_3ϏvwV*u&}.?U؂ԵsPkvIzB'j]U8j/Y&L$Jz~OϽMpOk{כ,YPgq>tq9<8{^QW6 VyĥjӸB#EH]m=Hqk Z.zH?½XG=?e/}o,~|~o_}磉/<y!-E>=l=07Hц!^J| `f,Aw$$VrU϶j}8>ngIZkgLHeOm԰5 '?ՠRc=@E-%U6١"g) `O9d"Q=gJ35OWƾK*vO͋w=-)djI2{)s/أZ'~SC|{)W۫O ?=1PJva$I/w>)H:˳O\8ELd%Q])yM3k1#9\)lD +-tE/Co&12=(1QjKC* :ۖ Lm#ͳ߱0F F ,#E9< |p@ytQ,-od#;"[\5T},TMI^׫sTur>%`Ե{7JZA0P񲹦 'eZkˆ9ֳer!RG\LRF*\/,kQiIZ-#4BSMY5&zC*W]˯go۫Ekע _x-Jϯ3:(r`MY&6amVs`#fvs߆jBlqMv`pw)<7 vZs;H &j3Sȉ58WqFE|X ,h>a6 +y@0KYa5tKRbPJG0N}'LN@FpE!7x/U>bsߠ3Ԭ:?1 jsnSʹx¶i*jJgrV[s{@Ѝ*IuSƫ=uZCWmcXoPx ,$&-ḁ'4<i@&g?{^}JW޳fogO{VB_g-V{e0( p9!r`bX!="vN۹Rޘk;&dK?43QU~, f(Q RҩdH)c%]ާ|o*u+]8 SQ`tNI'sB d0[@~!@C9 hq:sw1 $r):u#RLA@ L}ᘻW;KV*XTX4Z[Α ܿ-$,}>tF + }Nw+S9hb 4XԨڃwHh)7fx`iW!֥eJ*I胉[UFAsգDzYV?LxIY}~YYa V%5xEhYs_u{[ ?{o^}qK)‹[S^yqk}/.lKIYl.UwHQ;=,r1f@nP,>RUSFRK7<K$hT)x31PnXa WCY:{tpo3jixE#!Bw _hV x}FQ95{NE}=H >61wz*o\G$ <9{'GsfGs\tgGTG3jEmAm]vkҩVW܏4ƚ++bA8K8غi=WUUܱ4+"QKZnæuΨIlI#beJ)`$?RIY1wY? -9MSLS^DO-s>=Cq)c'{31WR)hdfkg]L﫪K dG%` )˱L` T0Cugs/kݏUbΥ)IPh<\$++⧵p86`,>˿Q|,PXW*`6 Gkš%c:ţ "6ib~'8Yڡ.@#>bUS֋R̆KV]h;xUnް:r>=ozUzC1tmI?/ |yb]$ߪەz)֧`byo`j% p缅F~yZKo *,(N D OmU'YyÿkZ#J6:GLwݚaCw'܊J4/1ņN,qr`c (6Z]n윝{Fb*Ƒ`@Yέʹ9$141sW`+ UW,<)? 1.!x FH?ރA/` T?cAm7"X{.A{)`S\^vl~w)nJN^5Jk9}dzK<u6`aV%&4vDS0tYVn!Q&ktKb1-p`XAV v=hN]s]tڜj ]0U Bk`!ǰqI;ת,%)t{mjE3V2Q1=f6BxYx5x,z<ɞ Y؛> o;MgcoI۝{;}>Vi]=bZ.{ѧD=cGj{+rD/G$~"Izk?Fp~ \6 tSAb9FS4:o4^tc'3i5Tx9^HqAV`{h5C v;Mi9&G z@v~G73yXx iw7Om^Q{ KrhBVzEC`<[j t-D#kN WY{]4Nj;l)6Ѐޤϟy v0ȗqwy!'@;%\)I_{6~bC]4yҟ"ُK|eXB3!Wk=ЈsoL͠r Sƒ}&2Ѡls O=: {Z*1R}X^N\Ǽi9ד[FHޣ^ m6b9WT:SZx;/swRTN~wUM _wE˘wW]==3wW]=E|wE!YqƾxwpmW=ܵsx8qw 鷑c1\Wލ#t4mhK:tFNNh8.̽j}.YYH봛=< K}a°V~ަ@ ^s=ȼ[E9?ՐG/Ѡ:g׼1oqjS>ฉt8Z™NG;mx5Ү1{ LjUG,5a$C(dXI.EYvHiK)gm-Ri>UÚϱ'6M).sDMh(o2عip; ^oB7Cr--Cxc]sʮ h %M]^rmNZ7 [Z/Ћr`ָCX3^} [iC5鶬-=/DFx[] LX-!?_ {J||kj|,}WcmIXx!>֜y_=WcoH~7>n ыE_9$׾X G|b  Țw'ݍuB޺m)qqgfioL0~oaڒ ֘μ=om?,.V}?(S[ OZNfhY/"csD,ܯ`>."K±?YQeptG$NBeOmS*6'2a2TQ=;iooG|nS\/\V0ғhB'`,ll1x1X*\x5xT]hZqu` v`E:~%,EKv,׾{X`|f˳ymHv*.[_ӊԍR̞Р~Q&x{7OG,\naXem6~*^&#{D'gq >){.G5b>:;=hRX'eUˊ@D!GZ#앳4;}(Ʒz: < ZDPryJoFk|a'G.hCb9gMqj&===6$G##-I%" lm\l} #Zk.K2#^wA1Zdc;Lt+CSנ7H>o8)0sOV1_X} zE1J·4` 9M?`,9q@!O%W#z"yU u XrHe1sGJ[Nձ/%b\ r3VQGpq =JPyCiRLK kϦ-šUXKC0Ɲ%w@|[׾2b(E)>!,c"e^ihO͝v )RiG!CQpQ0'׮`%) |xZgTx ̽J0"`v#v%ZU}lV!LcU 3궮 -x8g!=EI&&۶S!dw͖.Z iIhm]h)\W'Oѵ!=;%6ZP%t(!eG7斦][x]%a)hfmQ5c.q@ڞJRטeAY~ww#Gl{nx{"SĆDYۼj+pwI%rN'O7=' c*5}֌#(u8S QL.ODXE^Tp-nٟtFV]H,86)C^vAiHb$&U~z?WKhͫڥtj0rkCd^Oo~<$ *p&`nM>1xъ*DfsR`pA=`ç[4[t4d\D#ĻsMˉRӂ B }GtSDN.] (Ba}jQq].b~B1ڲvBW |ڪAl?2/G14.=eP8{שCk Ǭgr?rѣ0 n. ܥH,rPZ1TI6`ǦLOQJP@uCj+-Di"EÄs=In(㞓J%Vn/ڞkJ*vp_K̷@m]bTZsSq8I$f*Y#HA3t~@ Wm1faB E{j EC7 ?*LSsPk Z'J5V!UqTҕ+)r03WN5}F+(yOgmȌnS-8@J%Iⵙm@ުO,L%&G)z*D9!u"%G=7WZ\5DRxTi.WMHB_5H5 }A}?/Uzd% <Ejg-=h4#v͸P0y'&>+rɉ5-ߍ_ L] Kh\DH^.pLFkA=-]bvj7桔FFIW"ы{Tpz^Dyѫ˝n7*P\BC@)~}}Hi(a<ޝ6G֖q= L]N`1杦o[6,DxAk? ~#[q2+$/.Siݓ"Yc޺F4-h($,6?SAE k'xo t nzmwR+Z0ƍy IV`oN!P?}w r$йPxb19Aը#U;(Қ+c+ɏ;V}0Θ5Oc27:[֊5[FșvhM(+f}`r9,+v0w,Sָq>[Оcoؐjq!j5NXTyi嘢[S7#g22> Xs(in\]ļSVW}eA>"x@Ũ[9g8iwٺ)6&lmC]L0B'?}@HG(Rp:clCD7?{2VNFk" mv4"SWs2WrHq3CB޾C.~!>kr%9 ~!["riJu•Bs?!55!쉽e9Wrȹ!{낧[_!iS)$Y4u?n'5ri&7 wuY%"Ґd>Qw-FkVGVcX3o'[u.R?q KݼSZڞ3I'y%Q'u5Pe^Yu^^IgٕƲJ\329Z{xxaCU֑MsM8c^P*+D"iqtxmwYtix6nDx{e c%[+Fh[ NQfS%`:˲EdO[q*%@ *!r=c4379{#+:^}~ϗlzsvF􁼄Zv'Sf \b9#j)R}obr}֛l|ʎI4s,{#^<|jYj2a2/bn )$QBٲQU9gYކlٴZ3M;(?Qnz{%kh6RxѠiR(\_HRNb8}{rzq1|vZ+qhqTkc+L\Y,d6]r,@z/Mo=~fc4f.2Wu,W#{X(ͤH')lRtg3>]p= im = ~|NB}WZGZN< $_HBE(I]tגPJ*WPIu9m^ؙ=m{klu9L^S71pAFiZrRBk[IVz9kT<h@!^y7$R89Gd:W\lVՏz<5`{w#KxM8`JEQ}ta+2UqԦ*&>qq Ep'M6\j!PzHlj oye$4GlR<$WF}j9aLjR~ՊR*F+>Ojm#xOY-gY}!çݔAٍzHtۥT)~0 k<@Lmژ4"O-kY9ϣVÃr{Yiz$޹ XI+QOx9]UZg`|/|@kijCy c"64Q2;-Dr*i= C3ܤx+zݒӯ nb/ek1AѩVL)UݶSѠ絯"vD>ӺtRx8x#g H"XB,-tz`g|CCqSޭ+g;)xg[;fN;eޚxNɢ >^Z&HBw~/N.Vǰ (sDsU_oIl] ֒PCbx2CXGm*߱p[xGK Ptȼmδ?V)CJ:*|rSm(\쎂ynYʺ%j̋NEyZ2"*C*ri@G;+d9 ye5{+UFI=&JC$k:܊YB/ 쨰= {/ | Pz)mpFFJ,$nro[^i]Βj.q)^#QX$a(vOfMWYxi% bVHK[OEkf {[ Hh$=r`3;oKWRh|OOygCZ ?f='YqG,+n}gYqk,+n}gYqO=IVٝ,?K/d\S(-ߞE|̊{V++za紸Ű>ҢЋc]&1+vϲ>XcʊFs:$azΤUinꪝ0Ma Kk #Ó_P Ӳ9H۝"kRzuޚH+{:ZweA(V*IF۴"4O@Qy?.1H,yA7QfHQm_`kn\;aOwnjC-`ۊ&>Z?"Oi2}R%Fu[e UsiR)Bn$..q:5X=O/3{v=<`6s^}yQ<Ė54pM(OL6^eSVC-#fr/9zDxM>:< 6yL} ;ͫ4^>gӽ#2>>C%F^_s5ms[eStrF_3yOYD_MVўK'>loԇz/<{!_Hoͫ_ME{zZ _H ixi6(|!/շ~ZiUsEDWVk +"rWwGZ紺5R_iUfŴZs|!Us-/շtsCPLoQJ$;d`BĤ#SoңP=SCZi5ԬWJ&+ʶX*b^8c1gقze5˘6JQ:`;DNx6T}AznI M1qT<{o,+[`bſ8k;VKgͅG99uSdm*At#^>=Z ܆pOGM.`Ă-Z肈Fo ْr@vjvlR-A~fj9fp? kdŊ~`x2}K9Hȥ_X۪Of6_õBwS<|C/a|×I>K?KiJ_i;! }5Ñ[CIeWi+y8)<*=ixx<0_D\OpmBk^ 8=sRcfb( avd >`Z_8~_YJU0f[j~ĂF?s^'y2[mU(j)XLSޖi!kz YUaFZ9\ݖU-Ts=Kk=u^Eɪcƫ,%9ux 2uyon{mTԝC|+ x j״'>H,\!(di.&%e'5f>"E0F.|yC{* zЃujˈ]Z>jHIGi9tHaa:%e47IC4ž"47h?"~UafL nN Gd K sJJ;7:t,bwFڌ4*%sWzvoH)~ dprTv6X}Ѥ\B 4 g!ʡweA)jȶsymD^cýȋD^sz!.Z"S^H?㵉χD'n׏y|yq!y9y 9x^Ht %Dy䒈,W"k~ȟV=鴯'rq9v8WbvxTk:m_pkCnl}<tp)Ep";p<ދ=6NFqnvR0",լn4rp,x` t3(Đ.9_1{+AL'?fRSk" ?ЮNڷ]ο2dpmy-L~pH^ $ѧF-+cxpPMCf6.4f"%nhI͈4Qeefd\-:74UV3pṣ˙[`8SdV!BQ8tNK!) T!mBx1ď=ׁ O>1W̤G4KІϩ5Vte*,*KJȝMQy\;NJ;T/~|LkHFe\Аqj!ifXk{dnAKx5;>%ЧvFK.E}jG4uŶH`?jpڟA?XV̨>c ;uK \5ڼ Og) ;U.sT4i9R|Uxh}eزΩmۆL`[(aWϐ@`Oq ͗?\WZSma.Y15(>S)x:  l0 &RFQTžMWs@pf ƹXt"7lž \Y#fn{ɚڥH{n\ {+:[ߔid%t\f~nTh3ޒh uE<{}:zH}0Ňb2wC =Ei]"fgI;♻5ޓl^k\o2Ay`6;~LO`I .Gc{5GJB.Z7kCiQ`o|S@ 30vlBQuw0EQ,7ipa0ڦ.!1C2U& /$OY/{ [J"F(oDl>71& |)By[T ʃuSz'. fxfms F3f ɡcYqak@5O)f"Z~[P`6.@[@KOs{ݤFo ?9vw#?ޑ}r!?ȡ/~#E:2 m9ːh0"E{i [~(阋=R>!01kN+[Ep6>! $ FJ; G*vxl ?U=WҸ ܸ,wHWwk~U%S4X!a}*q.pIhDƐq?=zKVь9#ZK:[l/ "t̜x~BL_#O.|EbrG<6$[jγ& Wu0Of"hp!38lFMe4g%@kdt kxdmjvBb)1eϓp[/5"YCnњAŷ%#uE]ҪT.'b+SrEG{ nuxh!٦G!!h٨foz|@+$1T)zahrRDTDR26$oO i$ES:{wfw K, Z0[[Z=]X">7uS+_[[ŝbVv ПSߓr4͋z'P9z_'R %J(Bo#f'^$((v &VV1B +5E`wT*þM;V۠VQ=jj]]rA -S(BCSlVUPśg.ءv0f>-nYEʈA.}@}m]A K 8C5֑"\LE?`ƻ+3zPlJl.٨[6#6Ovfξv ]1@/PKgLe7O/R]HBՇRDk\ [MoX&mp 7GH1vaPQ&ʛq|] -(HF},<0]#~E ]j3Ϡ۫إ _. v)`ZR(|+ |.obvtzt)`CY[yGrIl ݉^a;R.Ա{l>.obź]6B?CW>3RʟK)ImxþhPD(>/b5^s%YmDDU;و61 :~rʣ5>&!t9 'kͶ;{{Z&l%D8cT:YT̥F.8NiQNXhhTV>"@-Qm Bi3nvWڈ%ǰbfQ՘V'4րf{}!.! 7Vzd¼'G .ޣv =AM.stE%ɝO|[`qz+ޢ*H{W俹"7αy&# \l\t3T.ٷ ؠS>>Wl =&V5 *35c7,C%M ߡ5t,_An]m[c4a>Q64Rh k޼a)b=,ckZػnwΥE1ۦH1|sRj֍6Nݳ2FB= 2NbӗX4r^$7t.0gRKJnlipG'iYlm,7ЁS{/85m3N ˖f3 s{įĜh2` 6rTiz@#wdψ& ޯ~i$lF<)qt@T3!P7ѱZWO`أ͞OLEMƃ{{HQdLM9%tK*z3y{%m |hifa5R uSZo5+K/BO֝`~%{?{a=S@*hZc4Wy(U])OtװV]0[;G/RT3m 7 , Q0 twZ:^AqdΛ&@;NhI (SqoG2Wg`q2:36 䑤fd2ZqL fކCyawQNGž z_7*omN!R&(#4 0y{t6 vޖysra⠑׽lNg64Z~%j$p歘L͜n/]$lb8 i3T{ @_AJ*F_i32iR{%6юgCVިuR3F/3*8-ƞKa#IR3+G10$~yB%P{!5=>ah_ y. mVVJGdAbcI|// Ţ,X=<QO״&p`/嚪m;f3nPxۜ=帧yK([dNf=6(߱ ,W58fV}k}`-D!=Ա~8~b?p?W [2OQ4hYZt"y(ckaTCij Om=]\C]j9LmRtU4Ŏb#Gv# 4[H=Ң ޻,#@HKU`YX[p+wceC9--W')A%^=,֎9# \z.`Cr5_[͌Å L ] 8b:ptS0n_[6#׷{giB;k(^lN9]jG40sxSH[i[F+!yxAقo\k 'Ċ6.tۣ{]O>G `bLo,?-8J*(d:`\ 8dVe@ޣDcR9=BIf E:Pd0jV{Vtu5q(AuW;Bn?}ʒgC`(-S$vfhHNHrua6, 'fhѯ[r4d6cJк͹^Ouz`#G@Cq~4АHN#ߩ%,G!׬LcFɑy7/@$v>ؕƟ| zQ -5Byj <׽Z^KxY\)R⣼D3PJ)(5^#]>X hA,ՅڠM / WguM/۽Y>&FRϽWrCWWF/: T4㱙McI}Ȓ\K/Sd,'wWlF̹VN[rZu}[S:Kp/&qFofwm,A"<mVlT$-),EɱT Ņn`47'?ݐ {[u`%O[>$µ pңFk HbnEѹmG{ |vsya>BOoMR|mM`ʳ ZADŽ]S3Ig }l'cF#g,@kk*N%*m36GDafZlyO`eU[nw>UG9읪{׷cm4_7)7BW{:Sjƞ{ pO1p*gVf}]P\!rUcyS0ݢ1 E>r)Rئ@Db0\e^fB1\6ZcV.}lGs|K6SoR퀌)+w>Jjw>vS(Hhb9VbeF9X17-4;A"G"2y ǿ 2ymDOi}D@Ջ{%2/RB+.(9|vJQ:z\tAE>@zaTNse˩rk^RwD)e59:+јԪNQF&59љ!5O plWҍ6ֲw%:Yd!v63΅=iDۓoňh{` =\i& &>(F[z3z*:ڪ_W3ں.gu?-ZӁrz**mT>r-.^C[j_@[;_A[\X`kl(~[{>%#r=C[%W_FB[wK/i}[o_E[m`+W ׍E&4u4d3,Mef~PW3mtmte>xu]&T<)v0+`g4k Zx."R^_AwS6/.xd;f! :ktmr:Tpv9jbuu,,/dQW2om%(HIk1ښvҋ(*lyX6WAr ,7ݓ(R(I`+#T N^&uWPn㵭*N-5vF0mP*dWNH-ZVؒ U64GxlovRjlOvoH7KvV8>jk@2^AM(bڌެ܍60g .-ӡQ9z:pNCkk/ޱM$b3. Q]Smt)Cg.j""%g#vk_U/:"CoYk]M]M ،_e~-XS$YJHym!SmOk@=6 xFy9a]S򸥝w)9]>6[U'zˆe8aHInZlEqQ Nʹhj yix%^buX׭i+v߼uA9 WefՌAmͽJ61?s܁]xsMpw8׿粅+_~܏pJj']ޡH|2 zDwlM!Y VaܦѦkqj ڪdbr3F3^$ۡ:wb>TvDq<92$wK8zp+bke&k@xQU>lisȻ$9zVunP{ \VOh.D8Ӫ ޘ}:2< 1m٪C!՘|{j[-5650N*n]}[SDlfN6N-ݧOX@V;_1J3;",a?|ʹ`]"-J2Lk5aQ͂NsE腓q[$U|(lumkw؝X-(+wE˻V‡qE9Q xն"ksM?ltw>z};y\N^cwrWv9"f2`fݝ3 xF%97R;#F;@J'#8_k+gUW} JWz_ zWA^)9۪WG}J*~J=oKxῥ{3Wg{g^/SE}^% =yUmW~ 9{{ >?E8.d%(Qce,`E`VhH{wS-~΍ۈ{يYL֪pju:@q*uֺh_ʢ5qqoG\ߕ Dsj|@D2ˢlPt9'bIPtG@5<%nVR؞? n)猿EϽOFte'Qct8#KbUv06DPNUV3F<ъɘvL𩐝CktT܀u=O76/G)KITJ A:hw}Dmo-]B4rL(O *G>6%p#xRoP5' k5mԦ\b&]|rQ{\U6Clt?vҜ&{yNidU]#:?e>>*%{!OD;cm?װ]ZVnqF-qnMrA|0U'x7Eg?Gc^NR_ƛcC7qa3jvږtptJ4 Bӝ8%e2}D4w raMڪL+'iG0ve(flÉŔmH0zOx3tӓ?_zQ CҞ(F"l/Z2jkU+#Qp[R hQ\A5 3ڗ^`Jp^i̓EFCґ;|Dhn}̀C \ ԪW?Nj~_oŷƯ'|/p/ŷu/T/֚/Z<|//O/X%~ / /^/ֵY>ƝGxAx^l~ٺ3Xe+xWUX#^-^l/J>~/$ŷTz.7rc 5>f6Ff$t_ƃoc=eu8'HA#|i`!^/ǩ!_n\R[eˑ%i  *_yF5;,VPQ\:rxqu`MJ^t[/KʃT/qma6StnΗ5d[Z\v]2G* B40q+B@N<Righf(+hs??/<Y^h pf&Yxɤui\*>7<%|y(Gm}mZu8*"zb=T6@";Dڞ/7,ͬѦAdm'<{:AݡG)(Qx;tTOv}K-\ wS&3/xr5ifY.ތ<_HΗ\<K>m"E} OH+mm&4DZu5+a /shZ|{_VTU!]6WRo2NJ(k$uFP vkUyaQۙZp`9#^5}ld.=xubvެ) ;l٪lC9DH'N=Su|ӵ(6M╡4<l".zGOn݆;qԶ`@V}Y-2@86dfQ@S䤽?D+Ia D]%ߏmPm.[ }gkrdTwd"Y!mvh_}(W9U +|*`^b`^3 0/}l}|U/,?˷"3rg|5=f/ {t\j/"gr|sk-0/t8?-b3yG|Uop/߾ 0_W|SAiY3Hq n v˽Iv&˝D *@ǽYLvz.I$6봦d='5%eṚJ#0.#+ W?O1V{``B8BG7&CF㽊Ƈy+c ($p9N=?N2AǼ`P=^DdGyE #$}zxnv_d9g='m{ "W @+ kH\j2![UA{ݧ ey\tDjιFq>yε8xH3{ы:A|[u)]CiQ^VsՐl+ͷ .=IyΞww6G|en@c{<ܙk;ZSn1Gt{ }C=eZVܳ?DY9'Pߝpl Ӎ@ګdBZze:!N;z;TFeաAXz7 +GDrr1l lCO^)׫m `eHe#!5"j8۳H% BF/ssa|:!}s*Ef$j,{&r Sq~~=;tXӗ/Ϲt]R+6!7cZ3=JvvmI@ʒ?p8@_!sy)NIqVx"17);Զ@ѩv8U@d-ۋ6d4Fh(EuBqϙ &)|QV [Yp`SH6 #H_ DegQ Y"o."EoݴM#X[unE|;qzܵY.W =92:U0 KYjE<&g6%;00|ZJ(EQKX6vD1]uAF] UI:@L{ieg[c.D= #ٜ/|)&TN, =E>m IJmJ1۳` #{AKc.r@ml>HѶKCRa% *ܸ0= E"⋝ڥn ɡ }S JcM'jb |+O"9l/'TGz(Չ,Z+#XJ<ݹފs0lzhR؈|=*J1=w^i}Pe,- V^Y$}DWq|{8,CREoQQ4Rtug1o@DT;4]X0-5 w t7KY$"(̝(n=I;=NII~u\ɛ3SQ*e( mi9D#вt]!-rC/r|f{*z_zxFT{OncK j΀JYxRqO6fbKp.^95IM?Xz;\sz n(C6yRx.(70hʓTOI̕M.Cd0DUw8Y?3hu-e^6i*i孂.aWRT-e=2Tۖ#y[y9yP(؎+6pk9ʴ8$Wץ3V5tx72'E7ҥ]Bg:]Gkrwrl"[e*[B%{K `'o$_icl4)?ı贷`COp^DɊ[ Q&ɹx.rڰ7*< P>Xz7{GOAego!VGBC Q8KkQ5ZiH}oѝkDo?T0X4565%0e^E_Iڈpƻ9|u,Z5% 8j;LPtbSS9˟s[ك"{԰:лnEjاCKBrx iejL*Є@{끥R3|Ʒ9(۹Ȇtp=t\XE!WNV;cG^l.=R[&؆ן+OS%*FKWڊ@ ?J؆SD6.n:khm~o;/pAEV$z%2(ITF mL pR~Mk#gDk yA=a&O LtI֦IɃiF(])A ?M\3Ch$@uRa% bX|Ma #s[IL\}b}& 崖Ͱ^8a!}bkvң΋‰7:hZdsUdž7襣'}^[Nдd"of_cy/% =ENGZnku998xW,px p͖9[Q8FbL`akU,z*lS[uIMq}RW3>䱣{fi֫ā#=W G/=H(39Ȗ& Tb,:HF4y ݤ&yGB˶'u춵G~p⭂&y bmYq˶]2+…{X1E,E {yk-`7xC hNǛk m5 T&ո.(_ELl=Wyk'qaaZ6E[-{<*y-I$nK8f=rI`1B #("{5+;܊>«/.Lkޚ -q[HT|' ;&`k;6S= q͵\l:E5ֳ)W]0/qQ({@Y2AqeEȗYK)t,p@ͽYd(YpZ|Qj;C&ܹexIf?,2eeݲe49gKWDl%nC6pv6 ~\p]a3b.e&kȨԼ&=A`Պڹ0W) 2Kbۦhz[{Xh']Dl3gԞ#=zmc<kHB5 NElM"AgfHUlfTė"6FhEP-6 %ٯA5`AW1t; ~{C^W0ti ]sD}C+&Q_O*"z@gSݧu1tm`ah}>bkE9 j<\;9(B+׋MݹUS >-:I+TV(:Q21'v ';+ox(&(k qW=\2׋bSjRa߹ 륝~Cmߒ!([M .Qoؠ`.nCyrwj< Gl'z4趰 Y,= > :dʐ"H)rO&1.ZZN+fzFPnvh.W/n.Jr>!6u-Ԧ;"({cOD#EHu]BCgj_+_ 9bt ~jhz{ 'Lg*!!l;-Skwk@rխ _N",}QHP~ BRdMF!(X@^MF/n9R (tx4?9E2RBִco e-BC4^̶wĬ'}iU'2 qwYn \dlQ9o#w lN#dM`ۈĪ'ww4)˼Kz{؋rE2 ¿w#8)8Y T E 9-?*o}'si;^\=`L\qx D ]c rj".]Bn/oHU :S\~FJX kpv_)EMf !>[FZN)RÿOR%M{Eo{vҼ4X-'EG=0:] iM/(BS;mb1UΓPvn S67#/c'av)R9P-b|䈆կ1eZSq##RI<B_e _BQt ѷ)=޽6"mo}ޫH)u%KiuG@$/[Ű[Iamb-+(eZi-b1#^?RuTs٦(Fn#/a Ӈ\FQ7@yQ3&Z\B%@ym`@yY&/&(8AYcrqRivr(?'jɷz0۫ (&{O?奯 (sP3L*(I^ (/6P^be~y$I-`@c;ENWiUmV5}ﺠ(v7Y[^/a; 2kX{D^8s5;%%']Ǜ_ T yfshGUobe6_E=㙊ھǖqخ-#i3U[~6߬,\8 _9[UݧvC}hRjn%o7c@f&>9*&k49t,o 1oO[GO:himyݹꁔhVmQ0sm *DU3>ZLrG79Zjb#$ﱶl[ڀ`E*T%Q%#*9l2 M i(޻>E",v(ߋ/_n(=yvWFs3*ʯѿ^EO /q_Aq (^A5P~*?=@۫(k o_(|KKU/%[*b(.">G kk/S  {v^A?oE'(hzXG3*/WP@۫(Ġy61^A k~/R1l5,MPo:tX ^>>SZf ЂG5?zm26RFIxevjE dNV4K#/FUZ*i?' ,jqYc g:+L Z"7AC}$@ܿ"%f+LiIWI{c;MjԘ4~8Pnx$V)h}@*Oo;{|Duߙixi/씒#X]6fgi0yMf4Ua-a48@e=]$7,^,Mir߷ɠ~:"8`jY{]׈OhTdu!mt8(S1} A?3tI3פTј]E'>b9.0! /Rr~- <ȹ'LyH1H6F L1#Q Z92]lO^>/2 XOE7Qz~{yqCYFMa殺eu-pey`_Z(Dʠn,V:՜\SR|ݒȂ C(K8!1ӣuoD|%M|tݍ6ӣ\>{ |bō7sO n߃b?hLCXU3bH EnH lS j7/%Tm'URA}8-7Bm+m =om@& 3ﭠ驚NWhQ* ԃM@ZRsz 3mxG]H(* BaҜ6!SjXڬS$rZĂZV%eѝ&/^2/zmAFs: =xm8ЖVi \tk 5aRPJ ȀdΜ4h ݰB`9蟗 ?^-j}/ ?^-jfzBP~l-'P6/ !۫e^s ^~޶Fj"rx^6)GP,ŞW % l3P6쩠A*l(MoJpj j‡ϪWˆ| eϪWˆh^6^ib+`eϪWˆR^~lYjPڝ{l(6 5qʆ eCɌ4T6@7P;js!Uy4[p(fIe>g}3CS UHtH!^ H7eJ$*x+br|%:U݀פG"G@=h\ 6 kO}!ME,x/ugF쁍L '{ LqL j=Ѯk>&Y¦ssgiCsE,y\`IN5bKyqÿcp8˚[4O،F=it:Pi)?KW>Q{@vMs-$eD%]ΟQ RxP^sW(~;0m̂L[;K [a K f{pdg *?e4'ضPr}:Siҹ^h 6E|ea4K(6W+m,z a`ܺ|+RlFCc\ݚl&,f{ײyv& d7! +,%\K?[[ ztz't(uF7OG)W\pdJF-| #i{&%xȁnlbQmڌØ1:A16a4U(=֮OٺTz3_ϛ{Z6'ԇcYٱ. 8ʎyˎ~{:Oʎ녲c'u eժo?;JCٱʎS;,#d c?);ót^);NǺt>[,geGI (;Jxm>;^-;WOʎ_SpcQjeGN8UXeGUwsQ ʎzm[ʎ- ge^}RvlgeGOΪlmP2%S3Xx'<$%5_BXwN@eD7QoMcf!u rDwQM˚ ,f΋OJ(~A=uyOwHMņk%4&%p˜wٝ^ ȶU51~$o\ Hb@,iTt砌E ;*XCxS" 斀*zY>) {Odw}"x:UliA~8jӑ.Z.yNXTl]"'t,.?z 9Lp>J)SRW!0m;4yձiSȋ2}$]dA)D6P ]ba<4.+%W:Vwֲ:Ŭ\o|ٽ~֍/ s˞r]5Iv՞+xH;Ȋz ,:C,KįN6PĢӚh%&rܻ#;,~dQ9uɷa@^ qo"@S%kT<ڌaUy"'$05헄/lh_yn =6xa09FUq"-&մ<2z 0kYmhG{j Mf5'Pt 'M]"mCsذt6mrC a^2 enCM7KR11snO&yjYq{ 2 Ͽ)I>>H[M>̞+m&ziZwx~sg YY+Ӈ$XmQ(,EMݟ* U7Rm%9٧Ĉ$0:CTb 4)~إ#%F\lߖb&7S80k^oHs,)<@/b~|1X$e*(ExΨ! Sl7F-bѧ%AEc::92]UM>:BsڶBM{#2й9\\pyx =j=+twPY$ ֓>ЏqWF2]ML(RD,:!.U_NÑBxF8t`Τ b~,wc]zgmN)SxfzOCO5*Ev.J'O" 9V)_xzA0%[7P:SZD.V8Jp GАnM-Q{{ wDy+l*׋b d>1 kžXЉXpoʷFËt|8>'HwE63.sO{^/dBbS^\8|Ӵj'm础ߧ3P0?bVV7CnlmUy-=Ԧ'<ʴsŦ3O`OJ/Fbgy!mYiى$c.F 8c!IIWeڄ ζL#^`0cEyj$nTBY+z&5l&D`O+s='akuXSk%R<O'S("76f,)^􀤈`mU$pQJ 2q vnEm*؅?"1BxY%@jQH! 66 bcWT;18}Ǔ*NXN^FNMjO\FQd#ɻME*>Z˹^QWd &l*NLe>~ n^ojUh`pţX !|\tAvW8iPĺP~E"kRHCla譶iQ/~VZ2z0ښ<>+F[pYa0b<+TF *ʜ( ^)-VWedcan ^"\m^HfǕQiM! #%)v <0 40* R2*U 0.0®@J:lJm. pMg]L"G@ޡwxJ݇]Ac겔X>9Z+iqEY"7;T\{6jؠF\f_},8nD({ɬ2AQmS$uAۀ. s]sg^eNsid<:^I?,&qVv DfPQm4,t˪wiuG9؞v'9GHRDρ$HZoj@2ĵ@m4_Pnu?V^7f. &s$&#f*_r F;2.%6qSaM{i-M})͙8S99z ')bRp-@3\ې 햢DxHk5nACeF }n+gzk.}}S3(4DM:A# )_n=I٦oi;/%jw\]>9::[+ulԫ$Ui)޷6u)^g; M(aAf­4_d,&e⤷9j˓t@]U3z=g*\eG > TClaxCQ*8g_ٶV(%m(^mz@LЧcm<4Kmp^YU_\Y՚i/TVɓ:JYD* U{*q_j/TVoEqreU40ҫ+gթQY&{i^%gUMJ%+YsKVVVUZծQ|RYU_jz_ͣ.0^ZkWe)beunjJejqTV1Ze+`)~㽲"yZ/*f=JQY5zeUs|*]ʪ`_j/TV}*?>WV[V*ӕUYmKsCf .IK;҄%/"hQkATgߥ$zd7B)x3GM%22V-ؽ*ZGc璩FT \rSEB5}GQ{ɮCͲAMz)ʶVN/8w|\lbƞ}e$/:!vTA3Jl8j=U<6U1ERp`wht-^]{g oG1خQEPޗ-7C V#GYYC%ުA0,L(.rϷQO0_+5ڔG+zT 4ⵜ`_\G@ԟ] _b/V{PhLR`x-+VeHťP]TG6)NuhȱyENPœG1).lZa7Hy2Ҫ#B~2eA$QF?\(M {M^XHi(sP$ ıF+OG()v{'ή_b ~mF#Gw]RTZϴOS E&JVG!$-^6xQih+X#=/ ,E9ZV466.IR5$q=e`]*D1=@mo{᫣IF %MT7ˊE望6OR:J)GUbjg(W}ۦ7\~ /ն5#zͦMɳ|uAvDjUS.qElW(ԨjӨ`We3Q R=ML1aiaFqjrABPY bjy/`OL'.6fBB)]zhcs%sX]SAR&>/bVb9{Je'i+JؿCc%R\ X~k%R%*KKTЏROdcc)zbTv~/xU{j)V/RJ,x2=@#qcBң}D~Ȯ+vuڱgZ:y y:er 䭵<LvK\2B]25bC0S(U0_1#MB,%ݹl6kT.FPo7]0}I}pRRhDHC)ԱB:,nHDT`Sy [IZd^eM-|}kf(3K3>%nOgM]Y5Gcn@d=ZրFƤXItz#Je=h%V\= T,FHĶ,^Ng%Zþŵ4(;KO; ENOdג@OZMZV=h" el8zfvl;\h̜m{ȼ([Zܿ~nܗԄoVSɮ/w{HRv"6ojr O?!ܘ"#$o6q4=NZsr*)D^9RQki1dɢN{B DN ^^AGCy.ew||;ИʖR(Q AmOI"ʞ$8^a}yk󧭭R'|)ln>1~ˀ&lJZnZ:Fʹɬ-N^wNF{N„?o 39_9 m D߯%zTENC;1?+njUeNjETcz8SjƏ]?z|B*E>/@v[S^"7p5Cd2ѡmet(60xqYI)/9k/ɓv[rX&54(EmOnM,&zw]}[P72{vcm]`#ngԞᏬgA{Xj)|yC!41Seey$O4!TG/K)@dž(č2-R',f#ĵֽ?5ä ^kAפͯ?Z$wEb&qIՋ.yI")fՠM䩸lmG5Gy-ޤ޷kʙbRs"LMlyehCoc zJW\^ZT\^ʵ5zbrzkK|r.^Er<ҖQi4^m?ۣk^ʍQsﵜlkR%mr\ƓϵܞͪJ(ZϹP"{-'s轗r|i 8j9Bz;^\5k9f\ۮ_~lszvc)W"Q\U^˵4{)WerI}d,Yg-l㽖.Z-W G-w{x[C)WY^-IȁFH^ŚZF2 j4\FFefd!PMx>K7Dc]^b}|mh`ƀٲP0G 3S !~֘@Dy!Sz )[kԙ骚\8dO٠X1|,(ZNոLSm79{6kئv^lgJ& 'j6| Ax+f$Y>Ss%S/IjҎFbDi֖[]Gqj HloNGZMJ x 7L1I|_k 5>mp#(Y#oR߷T;ia`fLޙTϩ10ZeL X#APoi- NGBL RYR+\;ѓGlR1doiCN=.!@FPvI&hLtUVfy( >tq,ac]< jw#(|G:w,rJtT[lWIcDH 6ɑPLrH=ȍK/i:D"c e%o|+|˰[^ T=ތI1?"F|FiI%,z[\'[ɈWѤ5 [4ˠ,u[FYr1>mZȧ&]A;!T1%sT}bذHZ752%-l/ 9vPMjF*c_^10V9an@aH_-g q6j^F.83hCkDo̘bO)hW>cKVbCJ'3|jViަ.dxG점; -+y `.`lԸ^>  eF|00l Y`}{gۻU(%{أ{ 9lCpE)fɹMv{&md ~Ϲް;_K/tp8/x~A~!a6^fKPF?M}b9 B~_s:rx7_lTmp_~/N ~%ɤD?~/Gߏ6}5>^~I~{ M>B}_p#/Fl?qT 3?\WoqGyy0(N% n $.&ޏx*fCWsfP jQ*۲ `jen_է<8TA0tnWC ~X jhhLm!zɳz{LyQ%M-FdAZ{}lg#j@Ŷ方Fd+7{1@[( J;5L #]VMo^NiC?0ĻW Fٶ^H_=o܎$-픏/5KldCd<7.o Mz c3c2{yj )Ctu]2_VbN~ז: PVDjro}F^07 vۦhn%BVץܑ{kb)G!\ *I6x-TY}خ |Ć4uFxH{V3cc{F߼un9ixs5!vIWlX+ ΑNzC;/4cˌaW˗+<,dǮS.B֠ P`Q`+Af ]Cx(Pv=-L)@UQ\k\Eg_h,g>}ޤ$XPCl5٣/Z^+AV7!k_kPۯ+VPB@ m.P/[$-Wٹ[uHQ<OkS9Y?l~}ljzyq ='evCfԮ;1x2;+pӬKv57 :ӳ\=dantС ZK3+ #}Ͱ Qü.J0ժ[>zQyN*[N겧\@,Yt>Yd8˨%y΍cPF9 y|}'<78Ey\ryc;<ʩp#9F{¹y%AÁyKgpc>Dręy,ge֎ (;/T ѱα; j.鞳8}4zg]_=Ueb@*=&%p-xwӈu-s~SpA^C0ϫ 0yż`AahvxE, ORE-VB%j, FU-!J:EhDArE A:ݦQhq=huwH' Dԝڶ qU9bX.xb$B&ִműM(`1sf){#mEp˲)N9/㮝}6,1%S@s) w[˼[X;V<[^03xexVlM]%0wx`JG.m5ynʡ4ʓ3&hП}* `8C.4zS5|V~"'!Pމ & ?tAb CiCg<;tp 187ǐk?LP<#\xpy2٫2ri48m]%? DM*,Ԡ?Π:As t6i%%5҅ 4,FHIF,.2mkSNk>UF}Z%9"v+w|+F[2Y {|mLi_y"XǶ\֡wvj98TYE, :‡1/ۉXİ͒}9h,YKwU`KAol`{hڟbmBw rZ%{DCVz8ǾFP(b몲yG0 XOGh4 1qp(Nu$,}0;-:uyW.U$':3!墨Т{.TJMQFj c`&^K@ :!]P&Sm'x A۹j0Kω&jJl[B= U V{< ݐP$[,~ EnJ ot߁ ó9;tA&@[ c7DOSYS%(f4v56'XJy? 2gjpԠ[F6)Wi`"+B?fO6d'ѷao76a?}{g} lѷ}ͱןl'FmgѷQ96vc9lF9lFFq>< ]/ZT݁1 kw^CFX? ?w;qM/#8oRg\e򌏂`C!C+5O?k0& D?EtU-oiYY3JP8_1dV\Sla}03 N9OBӈԴV^|UO{TVrH҆ G|'̝<KP?SVOT:p7gsd Syz]32%8 v`*fPե!Vk@Ό7wEn؊c"qE|\sbcN:Q\yuWp|VP6ޕ OY h>9ζj!Mo Ύy7:[cMtz~xg5 lNl1_,%wt6:˙7Wr:˩;[C#+M/tVsq; tV[Fg[2l omnl͍RJg5|٠\~hFg+mgۍҡ 9ls/+le׍fntǰ͍Ͷ\Fg%xNg_YH6o7:|cAT Zu7I/^/hq1i8H[^zK9.HeńK#!QK ׇ}:3 #]W*^Eјj*E{Noi=Ki}{Եj%R{e7 WВ(R,5sƙ>񰇦}?.{}e ]f-|8oG)ەsfoj6UuVPdo6OD%,A9#1{iԃmPꃩcRvfmn]w  ۾V¬ /ݧQé "C6FJ0FF?ޏϠb d8E䁟'J6A14BݶAoļlnIlRWu..Q ?ï!(ba-!Fi;Y8Pdsږ4a [ (Y߰MaQ?+X]ñ Ar^(I`KZ i4Zh0.jkư N|}J4jx-S1l1K_0pp,#niH#Sq: -{}?48BdsSE ˜c/a1Ds,m{?Jb+_&g|R{Kzb?ZMQJ6Fȇ=#zv\݊rŤD#%Fi`Qz1(Fe[m]G+ŘFr|ͻa1I˿̣-:ua>%M-?s=3 !:u^<t:/b>N7l.ͪ(P ëC8m]"Oig"ct8yMQ6/&zb71^Q /"a3Q4@upd!w<5ЌG[-]"U9&Ljʝ o$|.Xrw>[ԩ_ M-C-#E6`UVw*펃EuilaZ^GNH0r ;x:KT{S-j+58afP)tSl ++wFK}e>(Vޤbx"'_/ySL&˝J{$eT&毇'lF֒zs@˓wnF!>|+Zjk)?i)ĸ㤴,w z<`Q}pGؐws{>,EUkn*Fn'΢R)h1m ƀ俐Tar(c=h v%%ʀrajx+m0'(F =EPݦH1M|JsnB+hJ3}2mZ-]Gw{D "R][(B`bw({}$}cO:%`YyuTC@H0c@D-هb[ tt'뾇jۤH8fߠ\ 5F:ơhFzYv=g4v7Tj2Ս$PY4bcA>So!`Pfm4.c2#H|Р)L >{U ĮRf~]X.jy{ߗ%Q/r8Lt+s=tA 5.8a9 ̤"jC p)%}ͼוR\+פ\E5 M,:ѥa=87%Fo@GjXW L7nӓ[O.0D87]P)@FgWƒI[? ƾj>yVii2ox!O6E…aM|cBvb{um+qp>mE\UAyQ"#7gt,FF*-cr9e0x6];ņG v&j3݋T[3?Z؏ :뤾Z_%^5L {1"]`LZ^d7=,?x/m~xy|/?>ȏD|G:u?y8j}xz|/ˏC~cGz*;/~"azqEkaz!4$ a`bn] /wzuݺvGE&|i){;[cIk#ͧ =ڡ TRXݡ<$ࠊvF ~Ԑ҉yq D4ZpS?l{{. 8C|Ԩd*i=?3W&Ʋќ$ BQ% IsiRN-A39 G-4''"s N6wW*EW  #5ɏb)fݙu-65=p\jR *T>mD\g)QyB.lu 3z'{fř3bmt_I-8.S/^w,$`2mg9 wRGVF;a74zfkXC\ʞ()` Ć5 AJ]/Qlc -cm;sjlrl!6!V&[`Џz Biڲ="u3NK f9{Ewį,ƚJJ{QK#vQ2yCz rTHKnzc ;#m;N-ЍJ2{Zj!H ޳|]& m> !)apW&H*yY?PC}m%O=D[hT^<"n!, #-F[:PL mC.E| :(:7)CKDiR iDU,IݽFC=KԪ]+͝=|ޠ,ʙ*1)b~w#{3 nuyJ )fGSCb[C 7(TmRR>*OUvF>Etζ\hOAᏩJ6볰ME iRg)SԵoIe5&RӂƠRq/K\`c1}:ۼKgH؜y4 .9ls`Vl~٘"}` ; 5x?p (BqLbw:j#bw289hך@nˠQyb4P*\pV`!К((+סK/b9/m80ffАLL85k4eQcJxe)x'{ϙ tǬio]?$ϗNվSiM`9 &'UZ1Vt$8`2&>=SzyT-96=>]+Q293Z(Xkv2r6I"G7 ?FJM%:uƐٰxZKT~ATWAbޘtF! Lhm#Fvhv*" .7=tA@6!GHw }EmQMf=cZe96Xl"VTs2ZwɤP5˹%Qh0ȅpުDžlQbT>$5g6&؉N<\x` W]R~+v*_S*9ދR~B1ȯC,#}BC{:(~v#ANO}BcNp>F qS1z`: ء4E;g6 %:E>4 X;b#H"융"rۼ~NC{+it'jŐE)K&C"_eCҌCP/ Sw^W`~ GKh pJ`O$+Laޖlw?8 R,~:ƌZ -e{4_%Qr)HK`@ugrO6d#t ,_L0 Z9]-p;3g7hbj$\?3B}{,U5.(v;u-rfUJXխ]7bAK+Vmk[IrNr)GyA{$)=d^˲RsܑɄ:-[jzݑc!4%y%v';,ab[y$gP9 EYoXGnLU V`#s%8rg0Ȁ 򞇛H;^ik[TZE/^1[/n4 ,ӠQl3m (iHp_@0]v30찌KL aB`izpeC[Zv/Eh ?T}݂; [ۖ|, O[ڧ{|k¸tJVS; FLGᴼ_̆~,i!4!TǗh3 ]eJFHؿnɝuzqYshĥ`pPw..#ۥ4 YB1lCګ| }#‘S УTh$?JL%]^ ݵyu엮EW렟]ց6@gxh}> Mz xgSgYv.{,,Qp`o4hݣW]{ lyah .jS)1!x:x3bpWЂ>RP@:,=k\98fJHz 5ֆ@[U5:go,!aZ:1[ȷ]ѥ Ut0;^f?)z">m{S{AM#'T2 Re8uzkWQY(aRv[ȸx]D-B1bl?NM.7×Z0m~,F %M2^q.S%5&ޏzsۺn2Cޙ۳rk㉝d0†Bk(`s\rSh$!Ns;NY`iܗblܣ2*vnF D~䤕K%›}>\E*MI0/C7O8Alb۰Z P'=LA&<1bap^jp -0dmʋ6eɫ6X6X3D c 9}@wBHCmp8>#md5Go9o3ytP*x~Y 6.i hF41ϩXHfY/ESG!dU@JSʒZaV&]ZԈI% ~##d=gϗ,:* +P IbCEвʝCf.Ǘ ,)I_Y־R[PqE@]YoZֳP)`u,גuF[?1Aj0dQ:tAxV[*s&.VBhw>tA+Z^O y[XVK7TVK˔(5֔(,Ҡ#}ex:z'7L (ꇏi8XV2GzEg梘f>MGj5ྦྷ`8ljh+;RshA-lK(=؋RzQAjޒ`%m%z<=Y43ZcԍE]6G(8X!( &7Cg5!s0Xvևw j G b%ܽ8>9-tN`g5j 5)նMq0º2#NophG2@i #mFgxlrgZϛqSI响22,[Q+;?ؿE_e;|a1{I=C<ط$Gis_v4aM`g?0TO32gR16W.~b~Gž:YnL>R1e0l{ IC0;y~ƍ՗1ЉwDaA]dp .ngoyF #e 9X5!8SaiE`BJVj뺻 eIn!sOjP5Gro#ҽ_s=<k8] bd15!iDȥcI-FFj$zh&+'cr`AKꊵ͢$CQ.~53+<ߎeAN`gK+ lv>m~jABdvelU_ > \p']ƳfrBcK(\,3|l/Ea% XuJ6"kBj+Ƥa!"m_1 E5|bH6jLya ^5J`j_.;r41TO1l#kdZH1o֙}tYQʚgq|Mԃ9'(ӉWGwkvCդ\;Xv'/76В=J+lX6?Jj a30[k DΥv],rFZt.ϐR0a6',z92qLӈeC=e9tA?s #:٢!(r-8bmJRy3Qz^A7rJifr ح7Q z'4(ׂ0,kX cWo1j9 6WVQW&)9?VUV*|lVАxUjl/?N'D51|`/j/SW/.9OyS3Y Q+>_>%߾f/Zg[*]{$STg?_ЕϘ?1Mj=_?Nc_kƟRVsS_3#_?*k]PsʿmZה?p0'?l>c+?m^?gI?F?cÅ+Q$a/ߢ!D}o'[?R\ʟK)`ׯj/S_32U(!FUniՖp|YHq-b>kΨ'z`5v-,e3#8t#"M¦6*4V ۵g[ʫPBYhe5<<%U5+.`k?$Q(@ō;ýhbH f%6}n"s?D]G P'cj6V:g #JrHln5=l ZKѣ稡?pjeZ0tjm_Ul+[J%u h}HtQ4|!_faTVKJ#3F||26Ec96|Ү-ԍ$XʡUF VMIuYn1ډxqݘgGۿiT;{d&{缘kܡmRԺ%~4t4Kc @SHZ٢MvH-Ͻ^W(mlܐ~|%|_";^D^Ԩ9 z4CEf4/T{'e|*qDr94w X- rgUܕ_CO娪[Xrb~_)1l⃲'T1jDAFhaMja[֨L]߾csN6х+5X5&dԃ1>~wjm}FX%^aB./B˥b V_uV-kh9k[ ~tvOqs]td ɰ׬z䂶W|j,k\a#zGRBSJg &>V>U\g{`uni(T(!i|#"H B6"dT6#3>le)qq;b:z?8g,lSuʨ#p{ʼ^u֍ RܤƝjyRy!~ҤJƜmt, *ʴ2ABPZ\ y !}'a0'zã!جqZI'nO(< TMsyšpge^ֵ >6!!=Q {YK)RgԮۺL6*j WWW5bZ*".Cmj1qxr` %ۧ (&C胝F*5HOnYpp֏I,'ߡ9Ʊ .B밗64pV  ZHwlC_3IZu7{rߵX,>Cp|q>-fMV.;$2kgpKay*4/ :'Ig`-;4=0N%:йy% ?_h`VodDud\%T][+Yx(x[5m9I\&GH`>5t;!FcAұ|sv 4j0#*ik>*6C; ɬIgᶭ59͚48D@_ƫTy'ɞfOb`$r)zKñI-#-m–#lSqAIIl؋MR 61ܭdw+KA/%.b\k c_J[2C J*C FI%Kk (8kv+$ۭf5F `W`" D]280n|+W~ L :|-P<-d Iݹ[ x/%KגAK[`>X2I[`$(o%ck`> ͭd"Ƶf dS\%y|)ȡ J×A;tJ1[J۪ȵd VRK#VR2k;Ky%/5iA;7-p+JגAO[ɠ6'{ mn5^=2[$OaVT}" ;uc)EdYVp-Iӝw |#x`. *\x4:[Rv GnT]_zGc P0;0N;$ħ )s:s"+pA([i}>]}gf§*yc{=ɖf }3zj ,& 9T*s̶v!/ z)b_7m~A҂;k_ƿC`H\m8cT7X6op2t1>fpr[u9SPMz~,UY|cc?R{>~53B,;NIQA9ꐈuuz`\oαQݩ|_6!MR߱ p2'K[4|b,a&D1XA\W`nڢSBÒڌa H1 ~Cٸ&FۼP0ėG{g,c,Ҩ-R}6 -U[b[d_ + /XbS|}AMsn>g)XRȳBPX[X@*`mS2aU8;3hI@y,AR<Ը(FQ8r#R@ !6F)Pz~(-Q\y%)QBRUUE1:{֫̕VL *^BreNٖO; mཱྀGao\{,燨 QM0ob!gofQ  1Юirꂶ5h]ʑ;n|O\pBћtTH @ Ej9Jf-f-hVZ#8joE^,MT5^QbWT`ְL) ŸfųfI~geᑦ澲#5Nd->F4VЏ*쓓dBDU]Dmu*!L\Q "#ƩuuAq7C`i/Kkͯm:fQnW-iA,Tᕶ(\ [ؐڂ%$ G4N̂G2nOȵJwWcv®G^Nħ-r-'EY%̈́-U0)=I0L|t^ 5 a#rMb{SQ@#Pf9Bx Z$B2٩N3.W0zNlC8솸z꤬†O[_^ư*C/K /[c8Q1kPc8rk .uጹ҇Chj8I}O Vu?1V_R5k!^yưMRbWczР@VPbH^k <[QcHmj qj ,1>R\1x*1䛓?~ }_^ư Sc-j ,1|oȨÁ ~]c8pk Gs>,k hs1 OϬC4}^cwk !ekAպ% Sem)13l\e9 l?ou vLtM]'h^Ыe8DɽJpIs aڧ?cg"fٶkzxd7ƃU9g'ܝmg }x &P۶6Ej 7u1rYx7<ie_YCEJ'T^p^Fx U4gLHGxҢ+Y2`YDiFtHn+Y0R2K}螅DIm=c R3#2*gNF7u>El徲XLBwzh|-Ѐ!AnNtT1FC{b;kEC5xeڥ(YWwh}#b/\R-CIIRݽuUjn2 /lypW嚴žPmf0BٖQ`ez>*T1$6?,sR&5!gir]*\/^,y{F /0vW]e[cNޒ`u-X"L[q 6-ka;VaRm0eI̐V^1KAjhl85b滱Ĭ.OԘ=4bc16:O)RR ޵Rf5*Ͳ15\πo55mǒvCh laZ;P-QyC6F`;viyArAQ6 mϏݛQprO_!ch9ޡ3}e)xJ:1;&; eNC#i;0 O}:)0tC[DΉtFT {PP~z նRWk,luM%54U4՟e:.-mgoOɷi -eG"]\PH6#ZGl#}6;mo@q~Ywcىgxx;Lp3c??2|Kt sX"k*v0Gt{̬4yH}G;Kʠ  O0 lj{;=JvA8՜wPڣ@G)fK /ʼnZLzdqKEqsUhH*j-  *'C O]Kz.] gI=ԣ8fmY &ьl1|~H9V:,9 uyVg3 ]I2E1 h҆/[AZ4pR.IW`#t=lxEpϱ$v;Zc8Cr;m }P ܲR# 05 1/-{萉ۛυ\ǷWK/!]9M~8^ =5U"P mjFWGtTC_Te5tnh So?n`@uEFu$ԉPYm\-1&eJU};u˕Pnrmi6p8WW~' b8fg y7[ɮJ'#:&%!*Mrw#^߾(B)c"V|HYt"E)REEVE>EBEOjAׯ9Ib;F^[5 Ay"w-RXF@}]H5N\.wY"dz-R^"ŷjOjY"D)REI}(RA?+R"ŏm>/Rl?(BB%H»>Ql#gEЉ#EEй#EEP)NNJߪQ L?)rg)IC%#rQ` H6"E?Q\,'tVZ1jUx[7$b[q JTۻ b[ ^`NsVƃ 8j0DWƵxgFΛ7wcNi  R7ICw u,4.X^~dcq=I/ZԨg0^yybeg#&\!̖$`^n;΀4%]˥w.XحIC$ i^;R ftW 꽤Ar[3|WK9.a> bXaQaIl-[Td\bX}}R5'߻4jx>;FtKOȈrg^{Ui^B8rbݐm-ʇq}}#QV w? 4G%h&2 '` ɶ%BʀVkpJdA(,ϙT&Д kֆz=sA$sd- 6ˣrj אV&? }5ˡ '%]j.5OZ8$!NLF-YhRE G -<$lsN±TTTQ%hC%%,\:mzp*gCy~1!JhC?%BRq-TH&"evs[yy`-GeIa ǰMEݟ c ۼʥꓰ Y@d÷`:4@)AɥQL}8< ~HǸ5UYPEZa,2SPVq13!4nrTW:#C V ʷN=VfhcX,5]cHGp>JF(2̼[\m'@c)ƿz肄:*qSbl$ ?9GY;pPThȑ "GVV ܪu#5r-rp)ZhGU9(;{{-rdgooES"l:y/r,EDV98Z9fܪE[#G|>)r͵.y#ukC]"G*~V{pb *rtc"GK6^xʑ=\U9Fo9A|+rl"Gj/_r܊3E6_=|9z"G;x9pmjD# 6:`w f{gvGC5&qꦱR0\xU8viCSv?8{ [܌[% R; I_@6ZޢC%K-EziiUn#WXj' ^"0:?w'd*Q8E ݡpǶMHxbZ6 [6V,.۬w4f[}[>XYzZ;ڰ2}'icBv> b7%~IXT 15o=uuV b۫]qh4=e{6~:D!A(,ROww(N xC~`fJC%s D+ƪNf͌fbsy&͏=R#uyRJmɭg'TGA3}G!,KV:'El0e,\L`CV:G(bpuw(sE F ݅HŜ$T+sJ˛;^Xqԭ@`BX=fbLA6Wz ۀjwnA)f{a9P :ca)#@:5x˲`}eL6{,m7V+ O7EKj9[GY]5tqbwtܶbu.@'Q4eu!.>cKQGؒRJ$j5be>F-Alhjs[oШ" Wf*.H`55DG,fiﰕЖe46\.* 6 >%'BKFxk#(yka 6rA[klT^YGZݺ#ucWC=m|N-k[ H}SOMn>I]VAdeձ,FjaCR(+{d`:-ϪϪϪȯQy{vUV)Oݪ"9UH4I}oUV*vRy"oo****o*ۭ*O=*vs"oA"oUWy=WTEUEZ*Bm $;ݧe<7jZD 暠!>{0o5"ս C9zqؑ,;C yyƚV}^S1KrBB%E0x ®@i $sKCnw/؛zz\] V] *ܢwX1H0Ǭ{BW8C$ o-r BjpC$X-`f4}J3o2E#F|kk2SN3RG~aAmrb/Ԡ]Rcn3m]=vh+i RW첽82f)5dzOcMnv}bab5vGeQTyL畞o#:sg3-e ޡm9%S'DV1*klphpS˶ ?@ʷ F7g+"AۛނoP,ݪ+x^ II(Jo(Й:BIlɀXڂyst7 QQ5orf"[ÕP^ w:rh.Է0>}!|zgfAA푷^2}n  {)S.~95.+=QrYoj6ziFlV >FޝY%u@Qˣx< PE#n`6xs-8 չ\+ctV2cnVpZƛZ6@SIVcceVf($=e4ucp, OiҠ] 6T:O{.6:&I~.PKNIv=r{`HGtt*Hz>܌Sˉ"FT?tA(;)aF SQ1Iu: @5NL? I54r_bvG$Wg̈W5@W gYN!/b dܞgPfҜK5TQFO1pu!iB~r@=D!lQa!!QqA+I!d<xu^ٗ3RB53(Uf,*PIRt%2_ZK.-g Y9,Q%i=wOl=;A\j}j` !S;9FHq0#3qm!5NFz7\Zﶌptz6_K33n쪯}խBhMu; 3A,hС bV`E/MI0[Ds P }4oC9l$*AMqZMK)Cˌ.k}25k9^7ɶrM = $PLN=mB"e!E~u-_s^? `l-0 .yr1% Y&zJ4Yӝj4?\mBq}EB=x4okB4Ԟ/(/U`:#Ǥ>=MJUKN LÉͅՖm;tA İBw r dÁu.!.e61buGXW%m smRYmXuDμ] i iNC< KWo߂&tʐن[16=#e n6ƣ6"PcM[f3j6N݈\ɨc@/Ȯ¡TS-֐vh,ѿ}^VٟIyYe/ Xe [$TUF,|}^V xY%f,uU{*;UcSVَ '{U [U%o|-3uo&>/\!eo_WU^RVVXz{/rRUneq}]e3ۭ+b**p"Y}[Y6 ୬*㘑2akY%`QVF)!ײJB둲7Jɀ|)P*#e;`)_VPUg뭪=~/KW9Z񡬒:p^*6_WU^=_U(mnUY(C@Ӷ`L 5 \uYVSr`٦d\CӶ^PĞ`Ri3v`<Ő^0ՃPd^n-1W~ ]O3|]{E]I*FrxXڠ@C6-_`Kj" 2KHa8aإn? vM U%LYZ cP< 44 EP]kh@-k12[1Ւeqg]r3!>;؆/[9rge.NéB=z}!V,y0k+$`<(A:4Xa0y_6ًڸmjmG؊*#mV8hmE=-uIj JK,'~ex:Gn荆2:Z!9l*}9B.C~ SfE)c"9(đ9[42ko-;6T̊zwľ3QV`oS׻IY|%bҨIζlf̢ T{.udsyAZgד=1 :m<%ycZd.Hǹ t:zʈ"xH3 BGF28 Bϙ(w@^t9HKXW斤Z,QSXv qGb#܎DtX'}_T.z :?%@h$ ,3VɀJq=؟| |( ֮ej/ uz 1rrCz!se@w 0 c6ޟ-Iy9BxVOp@Cz^TW-m9 7Pu׈^ PIpFαRGl 5=C[UD| 'Ym6cF!=bCiv̓U5 'ٵ:=tF ʡGfۥU; ({)6h`dVj=ٌ/F ( (]sML^#R[voe`s26O`~ ɶiT=1> ɏ:TXpN*"a=-!--|hH5LcM~ gX>1Z=RgR,YԌa<̲\=pt ۈe9*~QtPL7\\ˏ~z Sq?am;q=C3F/ F C‡)]#Gۦf2"Q/4ڿRa9= דV{xܼρR QzX$stN_!f94c` 2 Taƾr`L}QIe7a!l;L&0vCsdi^1>hfX~cDဩȽCHˉ}Ky zی <vTBeuo*?F][e2̈geO2Y[]&Greb)L肏ee#?V VYfǍˤlwu eoLTLhZiQYY&D+uv&.:(\u k]f˴yH決^JeI~) .ӝ{.ˣuguXu|^,#Alu]&S|(Dͭ.Ӓ:6eBI&Ʋh;Ǎ-v)^:>.> Cjƛ(tbHzYh!)RE~5' G 54Ee@;# (V 0"ms Q;.O>aүn5h'(e-8x¸b/mXRu5mа>8b}Thچr4&op Cr!h_^vcP`"{DAv*^U^SP"caἤVĭPjZ0!aԊ' E%`Xgt T7׳p;un4 Y6.X:u5r{Xu{y{%ueT~ŒwY*XPbH{ SbPj! ڏn(S %@FYhmU] F.2n PAG(ZЦ!{h\9={dm(/6<aY'r kP_zC#+j^}b ;t@m(kpp'ѰESP3gW2JR@$}&KC/'S4U3v?R͌ Yr6%b/,%g:q‘z(s\C-化@} TF! >HI@V]-(x\g``Gh)LԬ8N,$l@M Os#97{< uwVOK[u \|,'169绒J7__?O/ӿu?o_- BX`JJ|UHB60Da/wjY?߿ý߽lR.M_/?"S.t}G[dǿ{ ?ß`_@]??֕?w??F~|Gn?Oݯ7eӿlbut_/?ۆ ?>B ǹc9׿?kWn_QOkPg@Ei<)?z}mavogadro-1.1.1/testfiles/tyr-33-conf1.pdb0000755000175000001440000001757712250371054017306 0ustar marcususersREMARK FILENAME="if0.pdb" REMARK TOPH19.pep -MACRO for protein sequence REMARK DATE:24-Jul-03 04:34:00 created by user: ATOM 1 CB THR 1 -0.454 0.265 6.608 1.00 58.74 ATOM 2 OG1 THR 1 -0.253 1.390 5.729 1.00 59.44 ATOM 3 CG2 THR 1 0.720 0.289 7.510 1.00 56.36 ATOM 4 C THR 1 -0.351 -2.243 6.652 1.00 60.15 ATOM 5 O THR 1 0.728 -2.825 6.679 1.00 60.24 ATOM 6 N THR 1 -1.854 -1.161 5.164 1.00 57.04 ATOM 7 CA THR 1 -0.544 -1.038 5.796 1.00 58.80 ATOM 8 N GLU 2 -1.402 -2.658 7.359 1.00 61.42 ATOM 9 CA GLU 2 -1.307 -3.875 8.194 1.00 62.58 ATOM 10 CB GLU 2 -2.646 -4.214 8.782 1.00 62.78 ATOM 11 CG GLU 2 -3.162 -3.211 9.763 1.00 64.15 ATOM 12 CD GLU 2 -4.542 -3.564 10.277 1.00 66.32 ATOM 13 OE1 GLU 2 -4.713 -4.618 10.864 1.00 63.49 ATOM 14 OE2 GLU 2 -5.503 -2.828 10.088 1.00 68.48 ATOM 15 C GLU 2 -0.845 -5.106 7.389 1.00 63.06 ATOM 16 O GLU 2 0.049 -5.831 7.862 1.00 64.05 ATOM 17 N GLN 3 -1.443 -5.339 6.199 1.00 62.51 ATOM 18 CA GLN 3 -1.098 -6.501 5.401 1.00 62.38 ATOM 19 CB GLN 3 -2.151 -6.769 4.314 1.00 62.52 ATOM 20 CG GLN 3 -2.955 -7.973 4.547 1.00 63.68 ATOM 21 CD GLN 3 -4.349 -7.750 4.135 1.00 64.60 ATOM 22 OE1 GLN 3 -4.951 -6.790 4.583 1.00 65.05 ATOM 23 NE2 GLN 3 -4.883 -8.624 3.235 1.00 62.66 ATOM 24 C GLN 3 0.237 -6.418 4.683 1.00 62.30 ATOM 25 O GLN 3 0.900 -7.457 4.532 1.00 61.92 ATOM 26 N GLU 4 0.580 -5.238 4.146 1.00 63.02 ATOM 27 CA GLU 4 1.819 -5.044 3.331 1.00 63.11 ATOM 28 CB GLU 4 1.694 -5.614 1.902 1.00 62.88 ATOM 29 CG GLU 4 2.950 -5.582 1.004 1.00 65.36 ATOM 30 CD GLU 4 2.640 -6.241 -0.376 1.00 68.25 ATOM 31 OE1 GLU 4 1.476 -6.691 -0.543 1.00 68.16 ATOM 32 OE2 GLU 4 3.497 -6.336 -1.315 1.00 68.31 ATOM 33 C GLU 4 2.106 -3.581 3.218 1.00 62.69 ATOM 34 O GLU 4 1.239 -2.849 2.786 1.00 63.03 ATOM 35 N ARG 5 3.311 -3.158 3.601 1.00 62.28 ATOM 36 CA ARG 5 3.706 -1.751 3.487 1.00 62.48 ATOM 37 CB ARG 5 5.078 -1.545 4.105 1.00 63.42 ATOM 38 CG ARG 5 5.100 -1.628 5.651 1.00 64.90 ATOM 39 CD ARG 5 6.478 -1.241 6.275 1.00 70.46 ATOM 40 NE ARG 5 6.532 -1.633 7.675 1.00 77.09 ATOM 41 CZ ARG 5 7.500 -1.298 8.522 1.00 81.60 ATOM 42 NH1 ARG 5 8.518 -0.557 8.092 1.00 80.19 ATOM 43 NH2 ARG 5 7.456 -1.683 9.816 1.00 83.51 ATOM 44 C ARG 5 3.732 -1.276 2.024 1.00 60.67 ATOM 45 O ARG 5 4.618 -1.637 1.304 1.00 60.49 ATOM 46 N LEU 6 2.780 -0.418 1.623 1.00 58.52 ATOM 47 CA LEU 6 2.647 0.035 0.244 1.00 57.01 ATOM 48 CB LEU 6 1.322 -0.474 -0.384 1.00 56.14 ATOM 49 CG LEU 6 1.022 -1.995 -0.338 1.00 58.23 ATOM 50 CD1 LEU 6 -0.148 -2.358 -1.177 1.00 58.59 ATOM 51 CD2 LEU 6 2.231 -2.848 -0.702 1.00 60.72 ATOM 52 C LEU 6 2.832 1.548 0.030 1.00 55.58 ATOM 53 O LEU 6 3.053 2.311 1.014 1.00 56.07 ATOM 54 N TYR 7 2.761 1.950 -1.261 1.00 53.70 ATOM 55 CA TYR 7 2.896 3.307 -1.756 1.00 53.28 ATOM 56 CB TYR 7 4.206 3.469 -2.581 1.00 52.42 ATOM 57 CG TYR 7 4.300 2.656 -3.888 1.00 52.43 ATOM 58 CD1 TYR 7 3.627 3.071 -5.040 1.00 49.55 ATOM 59 CE1 TYR 7 3.683 2.373 -6.212 1.00 49.76 ATOM 60 CD2 TYR 7 5.034 1.494 -3.962 1.00 49.39 ATOM 61 CE2 TYR 7 5.103 0.784 -5.128 1.00 49.79 ATOM 62 CZ TYR 7 4.404 1.212 -6.257 1.00 52.85 ATOM 63 OH TYR 7 4.524 0.493 -7.427 1.00 54.35 ATOM 64 C TYR 7 1.662 3.692 -2.605 1.00 52.98 ATOM 65 O TYR 7 0.970 2.820 -3.349 1.00 52.35 ATOM 66 N GLY 8 1.413 5.000 -2.522 1.00 51.92 ATOM 67 CA GLY 8 0.311 5.672 -3.184 1.00 52.68 ATOM 68 C GLY 8 -0.346 4.918 -4.312 1.00 52.51 ATOM 69 O GLY 8 -1.510 4.600 -4.256 1.00 52.71 ATOM 70 N LEU 9 0.407 4.635 -5.359 1.00 53.00 ATOM 71 CA LEU 9 -0.236 4.388 -6.642 1.00 51.50 ATOM 72 CB LEU 9 0.714 4.740 -7.788 1.00 50.63 ATOM 73 CG LEU 9 0.709 6.140 -8.399 1.00 48.91 ATOM 74 CD1 LEU 9 0.930 6.078 -9.853 1.00 42.08 ATOM 75 CD2 LEU 9 -0.536 6.869 -8.160 1.00 49.24 ATOM 76 C LEU 9 -0.621 2.923 -6.694 1.00 52.31 ATOM 77 O LEU 9 -1.456 2.521 -7.489 1.00 53.23 ATOM 78 N LYS 10 -0.010 2.120 -5.847 1.00 53.95 ATOM 79 CA LYS 10 -0.341 0.724 -5.846 1.00 54.93 ATOM 80 CB LYS 10 0.822 -0.150 -5.369 1.00 54.17 ATOM 81 CG LYS 10 0.498 -1.628 -5.294 1.00 52.45 ATOM 82 CD LYS 10 1.729 -2.495 -5.475 1.00 55.91 ATOM 83 CE LYS 10 1.441 -4.012 -5.792 1.00 56.29 ATOM 84 NZ LYS 10 2.746 -4.763 -6.196 1.00 53.95 ATOM 85 C LYS 10 -1.599 0.544 -5.004 1.00 56.37 ATOM 86 O LYS 10 -2.519 -0.174 -5.371 1.00 57.41 ATOM 87 N LEU 11 -1.678 1.259 -3.911 1.00 57.58 ATOM 88 CA LEU 11 -2.878 1.309 -3.113 1.00 58.56 ATOM 89 CB LEU 11 -2.694 2.397 -2.040 1.00 58.95 ATOM 90 CG LEU 11 -2.280 1.994 -0.639 1.00 60.41 ATOM 91 CD1 LEU 11 -1.763 0.569 -0.572 1.00 59.40 ATOM 92 CD2 LEU 11 -1.309 3.055 0.224 1.00 59.22 ATOM 93 C LEU 11 -4.092 1.627 -4.002 1.00 58.46 ATOM 94 O LEU 11 -5.207 1.205 -3.727 1.00 58.54 ATOM 95 N LEU 12 -3.885 2.410 -5.040 1.00 58.59 ATOM 96 CA LEU 12 -4.975 2.774 -5.910 1.00 58.33 ATOM 97 CB LEU 12 -4.633 4.070 -6.659 1.00 58.23 ATOM 98 CG LEU 12 -5.544 4.664 -7.740 1.00 59.98 ATOM 99 CD1 LEU 12 -6.925 5.049 -7.234 1.00 59.24 ATOM 100 CD2 LEU 12 -4.868 5.820 -8.472 1.00 58.58 ATOM 101 C LEU 12 -5.208 1.577 -6.878 1.00 58.38 ATOM 102 O LEU 12 -6.319 1.108 -7.053 1.00 57.72 ATOM 103 OXT LEU 12 -5.806 2.146 -5.933 1.00 0.00 END avogadro-1.1.1/testfiles/hco2.wfn0000644000175000001440000005714012250371054016104 0ustar marcususersFormate anion 6-31++G** GAUSSIAN 12 MOL ORBITALS 104 PRIMITIVES 4 NUCLEI C 1 (CENTRE 1) 0.00000000 0.00000000 0.57942804 CHARGE = 6.0 O 2 (CENTRE 2) 0.00000000 2.11695431 -0.38686460 CHARGE = 8.0 O 3 (CENTRE 3) 0.00000000 -2.11695431 -0.38686460 CHARGE = 8.0 H 4 (CENTRE 4) 0.00000000 0.00000000 2.71326541 CHARGE = 1.0 CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 CENTRE ASSIGNMENTS 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 CENTRE ASSIGNMENTS 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 CENTRE ASSIGNMENTS 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 CENTRE ASSIGNMENTS 4 4 4 4 TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 TYPE ASSIGNMENTS 3 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 TYPE ASSIGNMENTS 1 2 2 2 3 3 3 4 4 4 1 2 3 4 1 2 3 4 5 6 TYPE ASSIGNMENTS 7 8 9 10 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 TYPE ASSIGNMENTS 4 4 1 2 3 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 TYPE ASSIGNMENTS 1 2 3 4 EXPONENTS 0.3047525E+04 0.4573695E+03 0.1039487E+03 0.2921016E+02 0.9286663E+01 EXPONENTS 0.3163927E+01 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 EXPONENTS 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.1687145E+00 0.1687145E+00 EXPONENTS 0.1687145E+00 0.1687145E+00 0.4380000E-01 0.4380000E-01 0.4380000E-01 EXPONENTS 0.4380000E-01 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.5484672E+04 0.8252349E+03 0.1880470E+03 EXPONENTS 0.5296450E+02 0.1689757E+02 0.5799635E+01 0.1553962E+02 0.3599934E+01 EXPONENTS 0.1013762E+01 0.1553962E+02 0.3599934E+01 0.1013762E+01 0.1553962E+02 EXPONENTS 0.3599934E+01 0.1013762E+01 0.1553962E+02 0.3599934E+01 0.1013762E+01 EXPONENTS 0.2700058E+00 0.2700058E+00 0.2700058E+00 0.2700058E+00 0.8450000E-01 EXPONENTS 0.8450000E-01 0.8450000E-01 0.8450000E-01 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.5484672E+04 EXPONENTS 0.8252349E+03 0.1880470E+03 0.5296450E+02 0.1689757E+02 0.5799635E+01 EXPONENTS 0.1553962E+02 0.3599934E+01 0.1013762E+01 0.1553962E+02 0.3599934E+01 EXPONENTS 0.1013762E+01 0.1553962E+02 0.3599934E+01 0.1013762E+01 0.1553962E+02 EXPONENTS 0.3599934E+01 0.1013762E+01 0.2700058E+00 0.2700058E+00 0.2700058E+00 EXPONENTS 0.2700058E+00 0.8450000E-01 0.8450000E-01 0.8450000E-01 0.8450000E-01 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.1873114E+02 0.2825394E+01 0.6401217E+00 0.1612778E+00 EXPONENTS 0.3600000E-01 0.1100000E+01 0.1100000E+01 0.1100000E+01 MO 1 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -20.2999736 -0.12188442E-13 -0.22485295E-13 -0.36298238E-13 -0.47249521E-13 -0.40318102E-13 -0.13920872E-13 -0.41960794E-12 -0.19339692E-12 0.54230514E-12 -0.39273770E-15 -0.30112636E-15 -0.15028316E-15 0.29917662E-03 0.22938966E-03 0.11448152E-03 -0.63478413E-13 -0.48671221E-13 -0.24290350E-13 0.22529127E-12 0.13071387E-15 0.10185809E-03 -0.62728986E-13 0.10023463E-12 -0.29802626E-16 0.15830967E-04 -0.98332270E-14 -0.24693743E-12 -0.14752123E-11 -0.25765489E-12 0.18297189E-14 -0.66615675E-15 0.54705851E-03 0.58494882E+00 0.10766181E+01 0.17421713E+01 0.22901329E+01 0.19642337E+01 0.67160487E+00 -0.91594649E-02 -0.40869354E-02 0.12068775E-01 0.13518265E-14 0.10415094E-14 0.45727874E-15 -0.28829800E-02 -0.22211807E-02 -0.97521795E-03 0.12404677E-02 0.95571350E-03 0.41960970E-03 0.87774840E-03 -0.32212280E-15 0.15512643E-03 -0.10153969E-03 -0.16545660E-03 0.61506469E-16 -0.37903054E-05 -0.37038128E-05 -0.33187344E-02 -0.31410279E-02 -0.33038069E-02 0.74824127E-15 -0.24267011E-15 0.10744751E-03 -0.58494882E+00 -0.10766181E+01 -0.17421713E+01 -0.22901329E+01 -0.19642337E+01 -0.67160487E+00 0.91594649E-02 0.40869354E-02 -0.12068775E-01 0.12737899E-14 0.98138644E-15 0.43088151E-15 -0.28829800E-02 -0.22211807E-02 -0.97521795E-03 -0.12404677E-02 -0.95571350E-03 -0.41960970E-03 -0.87774839E-03 -0.13253444E-15 0.15512643E-03 0.10153969E-03 0.16545660E-03 0.23148336E-16 -0.37903054E-05 0.37038128E-05 0.33187344E-02 0.31410279E-02 0.33038069E-02 -0.14848270E-16 -0.68315079E-15 0.10744751E-03 -0.34702469E-13 -0.58861956E-13 -0.67012256E-13 0.22566017E-13 -0.31113147E-14 0.92067613E-15 -0.20220193E-03 0.19169822E-12 MO 2 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -20.2999400 -0.76032131E-05 -0.14026444E-04 -0.22643029E-04 -0.29474496E-04 -0.25150641E-04 -0.86839118E-05 -0.25352583E-03 -0.11684982E-03 0.32765910E-03 -0.46458861E-15 -0.35621708E-15 -0.17777729E-15 -0.49717214E-12 -0.38120007E-12 -0.19024555E-12 -0.36505553E-04 -0.27990143E-04 -0.13969043E-04 0.13379545E-03 0.15410457E-15 -0.16985819E-12 -0.37260932E-04 0.59582199E-04 -0.33013166E-17 -0.26264395E-13 -0.59799736E-05 -0.14837160E-03 -0.88805571E-03 -0.15585303E-03 0.91654207E-15 -0.56688934E-15 -0.90845593E-12 0.58494329E+00 0.10766079E+01 0.17421548E+01 0.22901113E+01 0.19642151E+01 0.67159852E+00 -0.91359783E-02 -0.40764557E-02 0.12037828E-01 -0.69384055E-15 -0.53456674E-15 -0.23470359E-15 -0.28671447E-02 -0.22089804E-02 -0.96986139E-03 0.13496592E-02 0.10398397E-02 0.45654563E-03 0.97103205E-03 0.32365768E-16 0.12453228E-03 -0.14888987E-04 -0.14163251E-03 -0.51015398E-17 -0.58826214E-06 0.49234601E-06 -0.34141266E-02 -0.32557299E-02 -0.31636818E-02 0.85810319E-15 -0.21994607E-15 -0.26326172E-03 0.58494329E+00 0.10766079E+01 0.17421548E+01 0.22901113E+01 0.19642151E+01 0.67159852E+00 -0.91359783E-02 -0.40764557E-02 0.12037828E-01 -0.93713542E-16 -0.72201232E-16 -0.31700230E-16 0.28671447E-02 0.22089804E-02 0.96986139E-03 0.13496592E-02 0.10398397E-02 0.45654563E-03 0.97103205E-03 -0.11050101E-15 -0.12453228E-03 -0.14888987E-04 -0.14163251E-03 -0.29425795E-17 0.58826216E-06 0.49234600E-06 -0.34141266E-02 -0.32557299E-02 -0.31636818E-02 -0.53710110E-15 0.19194431E-15 0.26326172E-03 -0.20738602E-04 -0.35176594E-04 -0.40047309E-04 0.13445219E-04 -0.14915103E-05 -0.62765065E-15 0.33685368E-12 0.11682620E-03 MO 3 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.1259858 0.53422217E+00 0.98553558E+00 0.15909600E+01 0.20709572E+01 0.17671515E+01 0.61015496E+00 -0.10842516E-01 -0.49973057E-02 0.14012967E-01 -0.26399094E-15 -0.20241151E-15 -0.10101753E-15 -0.67153739E-15 -0.51489227E-15 -0.25696733E-15 -0.51904345E-03 -0.39796960E-03 -0.19861472E-03 -0.24364266E-02 -0.44618693E-16 -0.11138516E-14 -0.14900667E-04 -0.34405146E-03 0.49907391E-17 -0.72656510E-16 -0.36041018E-04 -0.22405914E-02 -0.17736819E-03 -0.13078581E-02 0.25464249E-16 0.80735526E-16 -0.22785222E-14 -0.21118904E-03 -0.38870057E-03 -0.62899089E-03 -0.82682613E-03 -0.70916397E-03 -0.24247521E-03 -0.32654787E-03 -0.14570502E-03 0.43026889E-03 0.44005858E-15 0.33904142E-15 0.14885744E-15 -0.59465254E-03 -0.45814773E-03 -0.20115153E-03 0.28425497E-03 0.21900313E-03 0.96154171E-04 -0.39057537E-03 0.90780662E-16 0.19698398E-03 -0.14874850E-03 0.51083855E-03 -0.15573357E-16 -0.11842933E-03 0.10543451E-03 0.41231631E-03 0.62289754E-04 0.92118237E-04 -0.21381963E-15 0.15794712E-15 0.36723638E-03 -0.21118904E-03 -0.38870057E-03 -0.62899089E-03 -0.82682613E-03 -0.70916397E-03 -0.24247521E-03 -0.32654787E-03 -0.14570502E-03 0.43026889E-03 -0.56970734E-15 -0.43892879E-15 -0.19271338E-15 0.59465254E-03 0.45814773E-03 0.20115153E-03 0.28425497E-03 0.21900313E-03 0.96154171E-04 -0.39057537E-03 0.88802174E-16 -0.19698398E-03 -0.14874850E-03 0.51083855E-03 -0.16841347E-16 0.11842933E-03 0.10543451E-03 0.41231631E-03 0.62289754E-04 0.92118237E-04 0.85807874E-15 0.14026940E-16 -0.36723638E-03 -0.11890413E-04 -0.20168390E-04 -0.22960999E-04 0.23697920E-03 0.11546874E-03 0.43195428E-15 0.21925556E-14 0.50274602E-03 MO 4 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -1.1740934 -0.73231042E-01 -0.13509697E+00 -0.21808840E+00 -0.28388630E+00 -0.24224069E+00 -0.83639890E-01 -0.10522870E+00 -0.48499814E-01 0.13599854E+00 -0.28727776E-16 -0.22026636E-16 -0.10992835E-16 0.12100552E-13 0.92779359E-14 0.46303402E-14 -0.11901634E+00 -0.91254183E-01 -0.45542233E-01 0.10549147E-01 0.31762539E-16 -0.27780100E-14 0.49219789E-02 0.20754759E-02 0.25998815E-17 -0.53719651E-15 0.17045827E-03 -0.24548666E-01 0.31766034E-01 -0.17348874E-01 0.21249983E-15 0.68948723E-16 0.22101938E-15 -0.11052937E+00 -0.20343305E+00 -0.32919307E+00 -0.43273351E+00 -0.37115301E+00 -0.12690352E+00 -0.18013184E+00 -0.80374477E-01 0.23734691E+00 0.14708424E-14 0.11332048E-14 0.49753794E-15 -0.29446967E+00 -0.22687301E+00 -0.99609470E-01 0.11368823E+00 0.87590655E-01 0.38457016E-01 0.72481314E-01 0.23669280E-15 -0.12000654E-01 0.36696488E-02 -0.63902347E-03 -0.48889586E-16 0.13084694E-03 -0.35384531E-03 -0.10010288E-02 0.15647882E-01 -0.15052629E-02 -0.87594485E-16 -0.29313373E-17 -0.12142530E-01 -0.11052937E+00 -0.20343305E+00 -0.32919307E+00 -0.43273351E+00 -0.37115301E+00 -0.12690352E+00 -0.18013184E+00 -0.80374477E-01 0.23734691E+00 -0.15949994E-14 -0.12288610E-14 -0.53953618E-15 0.29446967E+00 0.22687301E+00 0.99609470E-01 0.11368823E+00 0.87590655E-01 0.38457016E-01 0.72481314E-01 -0.23399000E-15 0.12000654E-01 0.36696488E-02 -0.63902347E-03 0.27944600E-16 -0.13084694E-03 -0.35384531E-03 -0.10010288E-02 0.15647882E-01 -0.15052629E-02 -0.32611019E-16 -0.13048552E-16 0.12142530E-01 0.80895605E-02 0.13721426E-01 0.15621358E-01 -0.20758061E-02 -0.74912400E-03 -0.40079127E-16 0.88502528E-16 -0.12462681E-01 MO 5 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -1.0744921 0.18692576E-14 0.34484153E-14 0.55668115E-14 0.72463345E-14 0.61833103E-14 0.21349485E-14 0.31631417E-14 0.14578891E-14 -0.40880733E-14 0.85863809E-15 0.65834923E-15 0.32856241E-15 0.34495054E+00 0.26448620E+00 0.13199715E+00 0.24759331E-14 0.18983885E-14 0.94742889E-15 0.21014382E-14 0.12892468E-15 -0.41275671E-02 -0.69889242E-15 0.22560192E-15 0.30391526E-16 0.26353774E-03 -0.17884285E-15 0.21133158E-14 0.17535656E-14 0.21051693E-14 -0.33941281E-15 -0.21678398E-15 -0.64772949E-01 -0.12539442E+00 -0.23079267E+00 -0.37346611E+00 -0.49093165E+00 -0.42106922E+00 -0.14397072E+00 -0.20379474E+00 -0.90932815E-01 0.26852582E+00 0.25676757E-14 0.19782557E-14 0.86856081E-15 -0.21694570E+00 -0.16714497E+00 -0.73385643E-01 0.14375607E+00 0.11075630E+00 0.48627981E-01 0.86738391E-01 0.63864588E-16 -0.70857096E-02 0.61101790E-02 0.22488619E-02 -0.43160215E-16 -0.66559843E-03 0.24865111E-03 -0.19514481E-02 0.67320129E-02 0.27753057E-02 -0.88513393E-16 0.19930271E-15 -0.14003368E-01 0.12539442E+00 0.23079267E+00 0.37346611E+00 0.49093165E+00 0.42106922E+00 0.14397072E+00 0.20379474E+00 0.90932815E-01 -0.26852582E+00 -0.28628612E-15 -0.22056802E-15 -0.96841242E-16 -0.21694570E+00 -0.16714497E+00 -0.73385643E-01 -0.14375607E+00 -0.11075630E+00 -0.48627981E-01 -0.86738391E-01 -0.13876243E-15 -0.70857096E-02 -0.61101790E-02 -0.22488619E-02 -0.41652027E-16 -0.66559843E-03 -0.24865111E-03 0.19514481E-02 -0.67320129E-02 -0.27753057E-02 -0.46396439E-15 -0.20076890E-15 -0.14003368E-01 -0.39863194E-15 -0.67615522E-15 -0.76977882E-15 0.31285519E-15 0.25992725E-15 -0.74759164E-16 0.33628781E-02 0.96439545E-15 MO 6 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.5530167 -0.70117172E-01 -0.12935249E+00 -0.20881503E+00 -0.27181512E+00 -0.23194034E+00 -0.80083424E-01 -0.11157011E+00 -0.51422559E-01 0.14419422E+00 0.17896166E-16 0.13721645E-16 0.68480624E-17 -0.21223634E-14 -0.16272936E-14 -0.81213356E-15 0.28800605E+00 0.22082477E+00 0.11020704E+00 0.52815085E-01 -0.21353772E-16 0.14236388E-14 0.10449305E-01 0.81723774E-03 0.55233791E-17 0.16612234E-15 0.41658645E-03 -0.14158017E-01 -0.21644039E-02 0.85164950E-02 0.91567838E-15 0.81779774E-15 0.13475524E-14 0.58244667E-01 0.10720128E+00 0.17347191E+00 0.22803367E+00 0.19558316E+00 0.66873203E-01 0.98204491E-01 0.43818653E-01 -0.12939707E+00 0.44951010E-14 0.34632330E-14 0.15205458E-14 -0.33527287E+00 -0.25830967E+00 -0.11341186E+00 0.48675301E+00 0.37501695E+00 0.16465264E+00 -0.63886549E-01 0.43431938E-15 -0.12722688E-01 0.21301169E-01 -0.47251497E-02 -0.68698575E-16 0.57636688E-04 -0.33885860E-03 -0.31899863E-02 0.19678919E-02 0.35950450E-02 -0.42946813E-15 -0.35150773E-16 -0.20700089E-01 0.58244667E-01 0.10720128E+00 0.17347191E+00 0.22803367E+00 0.19558316E+00 0.66873203E-01 0.98204491E-01 0.43818653E-01 -0.12939707E+00 -0.36200009E-14 -0.27890155E-14 -0.12245280E-14 0.33527287E+00 0.25830967E+00 0.11341186E+00 0.48675301E+00 0.37501695E+00 0.16465264E+00 -0.63886549E-01 -0.22043429E-15 0.12722688E-01 0.21301169E-01 -0.47251497E-02 0.65414131E-16 -0.57636688E-04 -0.33885860E-03 -0.31899863E-02 0.19678919E-02 0.35950450E-02 0.10055396E-14 0.20933174E-15 0.20700089E-01 0.48260411E-01 0.81858791E-01 0.93193340E-01 0.27286475E-01 -0.18822032E-03 -0.24601791E-15 0.94535590E-15 -0.24668746E-01 MO 7 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.4350704 0.29516069E-01 0.54451384E-01 0.87901417E-01 0.11442153E+00 0.97636096E-01 0.33711398E-01 0.54618306E-01 0.25173527E-01 -0.70589198E-01 0.55987897E-15 0.42927968E-15 0.21424065E-15 0.17236844E-13 0.13216118E-13 0.65957693E-14 0.41469345E+00 0.31796063E+00 0.15868464E+00 -0.13947528E-01 0.28029789E-16 -0.83951432E-15 0.11799832E-01 0.25914292E-03 -0.72652828E-17 -0.18414718E-15 0.11905279E-03 0.96763138E-02 -0.26911937E-02 0.62491930E-02 -0.13411045E-14 -0.42749602E-16 0.23406753E-15 -0.42022439E-01 -0.77343721E-01 -0.12515674E+00 -0.16452204E+00 -0.14110960E+00 -0.48247767E-01 -0.70337187E-01 -0.31384316E-01 0.92678305E-01 0.93458021E-14 0.72004367E-14 0.31613795E-14 0.10123545E+01 0.77996454E+00 0.34244644E+00 0.25096101E+00 0.19335193E+00 0.84891910E-01 0.51948210E-01 0.49498841E-15 0.49336295E-01 0.16426237E-01 0.46901968E-02 0.49969754E-16 0.13228224E-02 0.36500115E-03 0.48533355E-02 -0.23809057E-01 0.13331413E-01 -0.82678011E-15 0.75855186E-15 0.14884136E-02 -0.42022439E-01 -0.77343721E-01 -0.12515674E+00 -0.16452204E+00 -0.14110960E+00 -0.48247767E-01 -0.70337187E-01 -0.31384316E-01 0.92678305E-01 -0.60862544E-14 -0.46891309E-14 -0.20587810E-14 -0.10123545E+01 -0.77996454E+00 -0.34244644E+00 0.25096101E+00 0.19335193E+00 0.84891910E-01 0.51948210E-01 -0.30099943E-15 -0.49336295E-01 0.16426237E-01 0.46901968E-02 -0.28745755E-16 -0.13228224E-02 0.36500115E-03 0.48533355E-02 -0.23809057E-01 0.13331413E-01 -0.72580272E-15 -0.98662623E-15 -0.14884136E-02 0.25631277E-01 0.43475498E-01 0.49495318E-01 0.20088197E-01 0.32421027E-03 0.32117158E-15 -0.36079578E-15 -0.77174499E-02 MO 8 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.3925008 -0.10990965E-14 -0.20276184E-14 -0.32732048E-14 -0.42607401E-14 -0.36356972E-14 -0.12553189E-14 -0.12597383E-14 -0.58061223E-15 0.16280973E-14 0.30391715E-15 0.23302440E-15 0.11629551E-15 0.47521351E+00 0.36436358E+00 0.18184296E+00 -0.15674025E-13 -0.12017848E-13 -0.59977485E-14 0.23959725E-14 0.10003107E-15 0.13052360E-01 -0.10191030E-14 0.13275707E-14 -0.84108065E-16 -0.20431390E-03 0.11305413E-15 -0.11047004E-14 -0.41105133E-15 -0.64244187E-15 0.80951759E-15 -0.85955184E-15 -0.34592804E-01 0.45179757E-01 0.83154871E-01 0.13456028E+00 0.17688325E+00 0.15171174E+00 0.51872819E-01 0.76245321E-01 0.34020514E-01 -0.10046303E+00 0.10940547E-13 0.84291014E-14 0.37008295E-14 -0.91268535E+00 -0.70317486E+00 -0.30873164E+00 0.73641683E+00 0.56736947E+00 0.24910576E+00 -0.63894105E-01 0.43466765E-15 -0.40970939E-01 0.36101567E-01 -0.50146391E-02 0.18405106E-15 -0.16027372E-02 0.12749166E-02 -0.75700601E-02 0.10995193E-01 0.26772376E-02 0.71963657E-15 -0.13181106E-15 -0.31118299E-01 -0.45179757E-01 -0.83154871E-01 -0.13456028E+00 -0.17688325E+00 -0.15171174E+00 -0.51872819E-01 -0.76245321E-01 -0.34020514E-01 0.10046303E+00 -0.92429181E-14 -0.71211701E-14 -0.31265772E-14 -0.91268535E+00 -0.70317486E+00 -0.30873164E+00 -0.73641683E+00 -0.56736947E+00 -0.24910576E+00 0.63894105E-01 -0.78890469E-15 -0.40970939E-01 -0.36101567E-01 0.50146391E-02 0.84189932E-16 -0.16027372E-02 -0.12749166E-02 0.75700601E-02 -0.10995193E-01 -0.26772376E-02 -0.10409164E-14 -0.13401409E-14 -0.31118299E-01 -0.93365222E-15 -0.15836509E-14 -0.18029305E-14 -0.46280510E-15 -0.65902358E-15 0.55049012E-15 0.43684877E-02 0.42292198E-15 MO 9 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.3515679 0.42992532E-16 0.79312826E-16 0.12803549E-15 0.16666417E-15 0.14221484E-15 0.49103366E-16 -0.33638851E-15 -0.15504116E-15 0.43475159E-15 0.42325022E+00 0.32452142E+00 0.16195893E+00 -0.21186711E-14 -0.16244626E-14 -0.81072068E-15 0.31852096E-15 0.24422167E-15 0.12188373E-15 -0.44831012E-15 0.22943621E-01 -0.28520655E-14 -0.17311944E-15 -0.25890548E-15 0.10780039E-02 -0.45327461E-16 -0.37838258E-16 -0.16648437E-15 -0.35671005E-15 0.35656373E-15 0.28405848E-14 -0.32004969E-01 0.46027347E-15 -0.46083976E-15 -0.84819117E-15 -0.13725334E-14 -0.18042336E-14 -0.15474807E-14 -0.52910992E-15 0.13739851E-14 0.61306947E-15 -0.18104024E-14 0.10693282E+01 0.82385976E+00 0.36171881E+00 -0.14596552E-13 -0.11245856E-13 -0.49375367E-14 -0.19854389E-13 -0.15296737E-13 -0.67160913E-14 0.45588133E-14 0.63719638E-01 -0.25630748E-14 -0.57762674E-16 -0.34971873E-15 0.11768325E-02 0.32156253E-15 0.39635969E-16 -0.12216953E-14 0.12505853E-15 -0.22736117E-14 -0.47807263E-01 0.23803807E-01 -0.11705483E-14 0.56351519E-15 0.10371688E-14 0.16783348E-14 0.22062181E-14 0.18922605E-14 0.64699599E-15 -0.17334309E-14 -0.77345349E-15 0.22840185E-14 0.10693282E+01 0.82385976E+00 0.36171881E+00 -0.11070953E-13 -0.85295724E-14 -0.37449417E-14 0.14112768E-13 0.10873127E-13 0.47738883E-14 -0.51586321E-14 0.63719638E-01 -0.24936818E-14 -0.11371921E-15 0.55393074E-15 0.11768325E-02 0.40932747E-15 0.18333847E-16 0.14023041E-14 0.11391859E-14 0.25528990E-14 0.47807263E-01 0.23803807E-01 -0.17811519E-14 0.14250971E-15 0.24172344E-15 0.27519359E-15 0.75032357E-16 0.22625231E-15 0.86480103E-02 0.11570854E-14 0.10925372E-15 MO 10 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.2088715 0.16186460E-15 0.29860858E-15 0.48204684E-15 0.62748176E-15 0.53543132E-15 0.18487157E-15 0.94603044E-15 0.43602457E-15 -0.12226584E-14 0.33879951E-14 0.25976997E-14 0.12964342E-14 -0.72908341E-01 -0.55901492E-01 -0.27898762E-01 -0.11993699E-13 -0.91960074E-14 -0.45894522E-14 0.33915210E-15 0.36801763E-16 0.95685588E-02 -0.38307992E-15 0.10074515E-14 0.22947369E-16 0.12130812E-02 0.23928569E-15 -0.35157680E-15 0.36640424E-14 -0.30475341E-14 -0.17735846E-13 0.12387032E-14 0.93730918E-01 0.32475817E-02 0.59772839E-02 0.96723736E-02 0.12714606E-01 0.10905244E-01 0.37286880E-02 0.21740825E-02 0.97007138E-03 -0.28646338E-02 -0.20180964E-12 -0.15548345E-12 -0.68265610E-13 0.89726886E+00 0.69129729E+00 0.30351674E+00 0.11078994E+01 0.85357673E+00 0.37476616E+00 -0.11070026E-01 -0.13948942E-13 0.58903491E-01 0.71329483E-01 -0.36231867E-02 -0.10058512E-14 0.27838881E-02 0.40027887E-02 0.27068274E-02 -0.14876593E-01 0.18711862E-01 0.71278538E-14 -0.34660657E-14 -0.17097552E-01 -0.32475817E-02 -0.59772839E-02 -0.96723736E-02 -0.12714606E-01 -0.10905244E-01 -0.37286880E-02 -0.21740825E-02 -0.97007138E-03 0.28646338E-02 0.23460372E-12 0.18074952E-12 0.79358773E-13 0.89726886E+00 0.69129729E+00 0.30351674E+00 -0.11078994E+01 -0.85357673E+00 -0.37476616E+00 0.11070026E-01 0.16128442E-13 0.58903491E-01 -0.71329483E-01 0.36231867E-02 0.10491727E-14 0.27838881E-02 -0.40027887E-02 -0.27068274E-02 0.14876593E-01 -0.18711862E-01 0.58494747E-14 0.21608028E-14 -0.17097552E-01 -0.26074836E-14 -0.44227857E-14 -0.50351852E-14 -0.35055129E-14 -0.89434247E-15 -0.25195570E-14 0.16181864E-02 0.20874339E-15 MO 11 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.1883276 -0.91916341E-15 -0.16956770E-14 -0.27373485E-14 -0.35632144E-14 -0.30404973E-14 -0.10498106E-14 0.33614825E-14 0.15493042E-14 -0.43444107E-14 -0.33020665E-14 -0.25318152E-14 -0.12635532E-14 -0.14816542E-13 -0.11360385E-13 -0.56696282E-14 -0.57293829E-13 -0.43929274E-13 -0.21923787E-13 0.24193504E-13 -0.34477690E-15 0.24743909E-14 -0.87598959E-14 0.24511915E-13 0.96136067E-18 0.22701680E-15 0.15171890E-14 -0.45754063E-14 0.20657721E-13 -0.17738499E-13 0.10830363E+00 -0.16024470E-15 0.13125499E-13 -0.17260972E-14 -0.31769403E-14 -0.51408891E-14 -0.67578426E-14 -0.57961624E-14 -0.19818064E-14 0.56234982E-15 0.25091939E-15 -0.74096833E-15 0.13558285E+01 0.10445928E+01 0.45863249E+00 0.14837758E-12 0.11431692E-12 0.50191287E-13 0.47994820E-12 0.36977421E-12 0.16235080E-12 0.25551546E-14 0.92788274E-01 0.16808313E-13 0.30752203E-13 -0.19442261E-13 0.64962109E-02 0.30282181E-14 -0.46354044E-16 -0.30222011E-14 -0.10210477E-13 0.22273685E-15 -0.40099335E-01 0.22392489E-01 -0.48999307E-14 -0.21761755E-14 -0.40053247E-14 -0.64813714E-14 -0.85199441E-14 -0.73075065E-14 -0.24985606E-14 -0.13635060E-16 -0.60839372E-17 0.17965948E-16 -0.13558285E+01 -0.10445928E+01 -0.45863249E+00 0.13658309E-12 0.10522991E-12 0.46201597E-13 0.14559424E-12 0.11217251E-12 0.49249775E-13 0.56860577E-14 -0.92788274E-01 0.23147249E-14 0.10382293E-13 -0.16654836E-13 -0.64962109E-02 -0.18573361E-14 -0.11933823E-14 -0.37001322E-14 -0.59396267E-14 -0.34550931E-14 -0.40099335E-01 -0.22392489E-01 0.81285579E-15 -0.12454088E-13 -0.21124490E-13 -0.24049485E-13 -0.14903127E-13 -0.11784076E-13 -0.69210390E-15 -0.35169975E-17 0.29960746E-14 MO 12 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.1853055 0.16440141E-02 0.30328851E-02 0.48960169E-02 0.63731592E-02 0.54382283E-02 0.18776895E-02 -0.32414818E-02 -0.14939960E-02 0.41893207E-02 0.10617617E-14 0.81409155E-15 0.40628874E-15 0.43777004E-15 0.33565430E-15 0.16751502E-15 -0.20485919E+00 -0.15707304E+00 -0.78390454E-01 -0.19383023E-01 0.15402398E-15 -0.22614904E-14 -0.36658076E-02 -0.18987697E-02 -0.46312070E-18 -0.13457127E-15 0.61367607E-03 -0.59317254E-02 0.63841864E-01 -0.64032243E-01 -0.27945291E-13 0.71540579E-15 0.50370806E-15 -0.52521498E-02 -0.96667594E-02 -0.15642641E-01 -0.20562690E-01 -0.17636500E-01 -0.60302188E-02 -0.56501612E-02 -0.25210909E-02 0.74448153E-02 -0.34627860E-12 -0.26678900E-12 -0.11713474E-12 0.23389523E-01 0.18020366E-01 0.79119114E-02 0.12252558E+01 0.94399358E+00 0.41446403E+00 0.12234358E-01 -0.24022089E-13 0.10768208E-02 0.82285813E-01 0.39539767E-02 -0.16303915E-14 0.38969476E-03 0.48002253E-02 -0.48315857E-02 -0.56669261E-02 0.34009425E-02 0.11162655E-13 -0.70095075E-14 -0.22149149E-01 -0.52521498E-02 -0.96667594E-02 -0.15642641E-01 -0.20562690E-01 -0.17636500E-01 -0.60302188E-02 -0.56501612E-02 -0.25210909E-02 0.74448153E-02 0.35070484E-12 0.27019917E-12 0.11863199E-12 -0.23389523E-01 -0.18020366E-01 -0.79119114E-02 0.12252558E+01 0.94399358E+00 0.41446403E+00 0.12234358E-01 0.23920700E-13 -0.10768208E-02 0.82285813E-01 0.39539767E-02 0.16340155E-14 -0.38969476E-03 0.48002253E-02 -0.48315857E-02 -0.56669261E-02 0.34009425E-02 0.93558014E-14 0.54268186E-14 0.22149149E-01 -0.46606863E-01 -0.79054060E-01 -0.90000254E-01 -0.61419635E-01 -0.48996275E-02 -0.19529193E-14 0.44206302E-16 0.94257513E-02 END DATA THE RHF ENERGY = -188.209663369086 THE VIRIAL(-V/T)= 2.00251408 avogadro-1.1.1/testfiles/Fe.sdf0000644000175000001440000000333612250371054015563 0ustar marcususers OpenBabel11130710183D 25 24 0 0 0 0 0 0 0 0999 V2000 -0.0963 0.2027 -0.0111 Fe 0 0 0 0 0 2.0176 0.2959 -0.0382 C 0 0 0 0 0 -2.2027 0.4077 -0.0304 C 0 0 0 0 0 0.0791 2.3108 -0.0719 C 0 0 0 0 0 0.0267 -1.9083 0.0790 C 0 0 0 0 0 -0.2416 0.1409 2.0955 C 0 0 0 0 0 -0.2507 -0.0248 -2.1058 C 0 0 0 0 0 2.5026 -0.7016 -0.0376 H 0 0 0 0 0 2.3910 0.8201 -0.9420 H 0 0 0 0 0 2.4101 0.8328 0.8499 H 0 0 0 0 0 -2.6941 -0.5863 -0.0341 H 0 0 0 0 0 -2.5878 0.9640 0.8491 H 0 0 0 0 0 -2.5704 0.9626 -0.9182 H 0 0 0 0 0 -0.8978 2.8353 -0.0442 H 0 0 0 0 0 0.6601 2.6979 0.7905 H 0 0 0 0 0 0.5874 2.6463 -0.9993 H 0 0 0 0 0 -0.9856 -2.3593 0.1141 H 0 0 0 0 0 0.5532 -2.3445 -0.7949 H 0 0 0 0 0 0.5812 -2.2680 0.9703 H 0 0 0 0 0 -1.0080 -0.5858 2.4363 H 0 0 0 0 0 0.7251 -0.1533 2.5531 H 0 0 0 0 0 -0.5188 1.1324 2.5085 H 0 0 0 0 0 -1.0208 -0.7727 -2.3874 H 0 0 0 0 0 -0.5233 0.9346 -2.5913 H 0 0 0 0 0 0.7114 -0.3592 -2.5451 H 0 0 0 0 0 7 1 1 0 0 0 4 1 1 0 0 0 2 1 1 0 0 0 3 1 1 0 0 0 1 5 1 0 0 0 1 6 1 0 0 0 9 2 1 0 0 0 2 8 1 0 0 0 2 10 1 0 0 0 13 3 1 0 0 0 11 3 1 0 0 0 3 12 1 0 0 0 16 4 1 0 0 0 4 14 1 0 0 0 4 15 1 0 0 0 18 5 1 0 0 0 5 17 1 0 0 0 5 19 1 0 0 0 6 20 1 0 0 0 6 22 1 0 0 0 6 21 1 0 0 0 24 7 1 0 0 0 25 7 1 0 0 0 23 7 1 0 0 0 M END $$$$ avogadro-1.1.1/testfiles/2-thioethanol.cml0000644000175000001440000000464612250371054017712 0ustar marcususers 2-Thioethanol 78.1334 78.0139358 -100 157 avogadro-1.1.1/testfiles/tpy-Ru.sdf0000644000175000001440000001030212250371054016420 0ustar marcususers OpenBabel11130710493D 59 68 0 0 0 0 0 0 0 0999 V2000 0.0000 0.0000 0.0000 Ru 0 0 0 0 0 1.2675 -3.3593 -3.3569 C 0 0 0 0 0 -0.1042 -3.1376 -3.1351 C 0 0 0 0 0 -0.4925 -2.1845 -2.1824 C 0 0 0 0 0 0.4085 -1.4646 -1.4632 N 0 0 0 0 0 1.7629 -1.6757 -1.6743 C 0 0 0 0 0 2.2049 -2.6190 -2.6172 C 0 0 0 0 0 1.5994 -4.0901 -4.0874 H 0 0 0 0 0 -0.8600 -3.6880 -3.6850 H 0 0 0 0 0 -1.5398 -1.9872 -1.9851 H 0 0 0 0 0 3.2659 -2.7775 -2.7758 H 0 0 0 0 0 4.7780 -0.0000 -0.0000 C 0 0 0 0 0 4.0774 -0.8643 -0.8636 C 0 0 0 0 0 2.6710 -0.8492 -0.8484 C 0 0 0 0 0 2.0116 -0.0000 0.0000 N 0 0 0 0 0 2.6710 0.8491 0.8484 C 0 0 0 0 0 4.0774 0.8643 0.8636 C 0 0 0 0 0 5.8632 -0.0000 -0.0000 H 0 0 0 0 0 4.6225 -1.5272 -1.5259 H 0 0 0 0 0 4.6225 1.5271 1.5259 H 0 0 0 0 0 1.2675 3.3592 3.3569 C 0 0 0 0 0 -0.1041 3.1376 3.1351 C 0 0 0 0 0 -0.4925 2.1845 2.1825 C 0 0 0 0 0 0.4085 1.4646 1.4633 N 0 0 0 0 0 1.7629 1.6756 1.6743 C 0 0 0 0 0 2.2049 2.6190 2.6172 C 0 0 0 0 0 1.5994 4.0901 4.0874 H 0 0 0 0 0 -0.8600 3.6879 3.6850 H 0 0 0 0 0 -1.5398 1.9872 1.9851 H 0 0 0 0 0 3.2659 2.7775 2.7758 H 0 0 0 0 0 -2.0116 0.0000 -0.0000 N 0 0 0 0 0 -2.6710 0.8485 -0.8492 C 0 0 0 0 0 -4.0774 0.8636 -0.8643 C 0 0 0 0 0 -4.7780 0.0000 -0.0000 C 0 0 0 0 0 -4.0774 -0.8636 0.8643 C 0 0 0 0 0 -2.6710 -0.8484 0.8492 C 0 0 0 0 0 -4.6225 1.5259 -1.5272 H 0 0 0 0 0 -5.8632 0.0000 -0.0000 H 0 0 0 0 0 -4.6225 -1.5259 1.5271 H 0 0 0 0 0 -1.2675 -3.3569 3.3592 C 0 0 0 0 0 -2.2049 -2.6172 2.6190 C 0 0 0 0 0 -1.7629 -1.6743 1.6756 C 0 0 0 0 0 -0.4085 -1.4633 1.4646 N 0 0 0 0 0 0.4925 -2.1825 2.1845 C 0 0 0 0 0 0.1041 -3.1351 3.1376 C 0 0 0 0 0 -1.5994 -4.0874 4.0901 H 0 0 0 0 0 -3.2659 -2.7758 2.7775 H 0 0 0 0 0 1.5398 -1.9851 1.9872 H 0 0 0 0 0 0.8600 -3.6850 3.6879 H 0 0 0 0 0 -1.2675 3.3569 -3.3592 C 0 0 0 0 0 -2.2049 2.6172 -2.6190 C 0 0 0 0 0 -1.7629 1.6743 -1.6756 C 0 0 0 0 0 -0.4085 1.4633 -1.4646 N 0 0 0 0 0 0.4925 2.1825 -2.1845 C 0 0 0 0 0 0.1042 3.1351 -3.1376 C 0 0 0 0 0 -1.5993 4.0874 -4.0901 H 0 0 0 0 0 -3.2659 2.7758 -2.7775 H 0 0 0 0 0 1.5398 1.9851 -1.9872 H 0 0 0 0 0 0.8600 3.6850 -3.6879 H 0 0 0 0 0 53 1 1 0 0 0 5 1 1 0 0 0 31 1 1 0 0 0 1 15 1 0 0 0 1 24 1 0 0 0 1 43 1 0 0 0 8 2 1 0 0 0 2 3 2 0 0 0 2 7 1 0 0 0 9 3 1 0 0 0 3 4 1 0 0 0 4 10 1 0 0 0 4 5 2 0 0 0 6 5 1 0 0 0 7 6 2 0 0 0 6 14 1 0 0 0 11 7 1 0 0 0 13 12 2 0 0 0 18 12 1 0 0 0 12 17 1 0 0 0 19 13 1 0 0 0 13 14 1 0 0 0 14 15 2 0 0 0 15 16 1 0 0 0 16 17 2 0 0 0 16 25 1 0 0 0 17 20 1 0 0 0 26 21 2 0 0 0 22 21 1 0 0 0 21 27 1 0 0 0 23 22 2 0 0 0 22 28 1 0 0 0 24 23 1 0 0 0 29 23 1 0 0 0 24 25 2 0 0 0 25 26 1 0 0 0 26 30 1 0 0 0 32 31 2 0 0 0 31 36 1 0 0 0 52 32 1 0 0 0 33 32 1 0 0 0 37 33 1 0 0 0 33 34 2 0 0 0 38 34 1 0 0 0 34 35 1 0 0 0 36 35 2 0 0 0 35 39 1 0 0 0 36 42 1 0 0 0 41 40 2 0 0 0 45 40 1 0 0 0 40 46 1 0 0 0 42 41 1 0 0 0 41 47 1 0 0 0 43 42 2 0 0 0 43 44 1 0 0 0 48 44 1 0 0 0 44 45 2 0 0 0 45 49 1 0 0 0 56 50 1 0 0 0 50 55 2 0 0 0 50 51 1 0 0 0 57 51 1 0 0 0 51 52 2 0 0 0 52 53 1 0 0 0 54 53 2 0 0 0 55 54 1 0 0 0 54 58 1 0 0 0 59 55 1 0 0 0 M END > Mulliken $$$$ avogadro-1.1.1/testfiles/benzene-homo.cube.gz0000644000175000001440000206112112250371054020376 0ustar marcususersLr:Gbenzene-homo.cubeKlA8{ @ ^CPHOZ#^qS Tތk4_??Ͽ/??ǿ??l_}z?si_h_ׯOkm~ι|!_b_ڬO/״_&&[}L{|or&{o|%?ߛl7y2M5?~?[ߩ}>ߤ_8_ӿu+ѿ&E7ǯ7yj׾79ڼoߤN~֟ocݩw}n-r.;;"I31e?^O5tݟͿG*+k-Ճux[YWm0|sܟ?|oɿp7qߟ}uYX;W;+_'p~zXԿ[C2z=bM3vzW7:}epw}$#;Wښ>uco=͹姸;6ǰ:|ogj/ou1Gwirae摎}/g)gC5ބ7Va0Gm{ ovz\e/zkκe1nmoґV))XïY ,'-ζĻ7:K^dqp-|_3<K_1k=uo> x}#@Imuۣ:7tJkYr}hkuK`|ǖV6?,1u^""-Vov=*{ >[Hm#v=jOΛ@-m }_ڬz"oty7,ރI?oDm-=3жW=lm73MsӬ O 7<`K~oQ =FK9&>tU+/BXV?y^ aV_Y|sλKx-!wgVX=S4n8^OCae뺎#JOs뢑;.z\#4HyŹwsTq1CkC/E]|>wg`ko,+x<P3ܯ/E2*oLVj^մ %{S\XPe*{^΋U;VH㟙R?g:"w?+^;kpi=?/VZdz[7o̻;!{$7$g +C{.#-s`&B{<׆KI.+op{aJN!x=^ qu)uVQ {ÞF}¿=g~l?F=DsoxL^oot9z=;D<[xs#Ir)q\C駺:_ރ}e'U9B4JFG'FiH=_u뿶ωfZ~sF{)Qc}^d:HKV=LO;^I+y+z*ui=)c*zƬvx52V֣faSьߛXLs#4_/YՄy ex) }|}[/zQ]9edgkfh97|kuCu<ͳtnvvU䍋'7;>]Ŀ~M+$o=V#ZyuE)V횾Ole {P]t; nfh .^SixzIxT&Վ=5 GY|x>"99KW൭=ndrS캔g6gѷۈܖ¾1C4WEb[G9X{~ZGڤ|wt9F?Vz͆he]mV+<8K8_w[r7t/WĎQ6&!1꟝4!ae^|&<˛Q㰽df.܎?cO='*39fXi~ɿ5D! y[B+sSt ޕ3NVc'U9MxƚfOvxYNus"Lc,ɏ&GSn;i@'mk[}2Ƴi=gX,N㿓&*$n~+?7p{_׿lG<<*5} GԄݱx3[V86*/&>/V݇64=ˢ舮??dl;]tutc_nKf]Txh*}~E+-|m Aj6Qggesޮm5ih4y7H 6Va6L=Μ([ZVIЄG/lo=2o=v+n{!FWf&i:_.󀯗fT"[}ĜԑuhR5v[=x~k[[Kirݎ*T5ʎu|C= f+G=$Ef=Y¨g%V?s:qWu&:AUpEM'zp |bdnp*G9VoUEB)wZVW>.˜0ɱ ^*ι{"*!dgv՟+0޺U'ҹ2?VlCC\ t1!xV.㱊X*}p%R +^<&bz`Y{ Z%|ZED$'-l){E? =0I&XQ4Jj ]hQ 5}Ū/!cqXG VkzDiB6C a"Co{LCby&gቀoX,ghܯ 41U}x3Xq=+⍳WZrlgzO;ZW.Ƃ$Qm4FI0DzGzkZ/C,]{QY/֘3/KZZWc*qR Ϯ|vvٓxyű$-l/{$ 62#?ZU3+#ldKK^!Zhyr]DY2#^yfǮ$#%WѶPo{U=e\$G o>^mFZz0% @Gl ljA3546LFRW6@wxJwO 1Eǘ{1h Ke E|X{![*5H3 f5։4(8c & COSoo J%3\J2ZY D7[Z`xrKƪ_1'gЫ_ӓܳqxmvOEmIC (D_$j؜lAE#nGih!O(':JSl^H6_ZDv ׇ6UTDo/mO@3 M~=4U!XL?6k=Q~۸ז4a?8Bٯ7@иYLFeg2*m;"eƙd3w&wZt4ݷfUeҷzKo)]6cCs_3}*Ԙٮl)pF0f`wA9[g׸'qϷ:ޫ"\ $_PoKćL׾@IKğШ7:ѷIlNJjg/|`ܧEH">W.UDyjTWvkwF5usũ\q< Aw s)C(gnByd3nc@Xw[ N@[lxq2'aF@l̶fRcS DN4. [.^{7,M/,! oH=ߊv:f؞m>_{LhsԸs\ҿ1SeƗHTaI+a1@UF.KEyVK.4Z+;#;UcNRF\Oz]higҘ[WqVy^@ ^͚}8E7n `ΘG{i0{P3D%;_W6~кJH[d>9i~4Q)/ei9^KӞb^Q,^"kzE.tZY+| DfsrՅhO .۵Ga^sVqv{O5Qbvc7yf8vOY ڜqnaigG905``ǫ,灷N^b?%P(={ta ѽ+,saݛ l@BhkwtUbϦ>~ڈ1ވn  'T:ث= ?Eϓv.>ho֏{kL,ߖyZjO//T 4yHLAԹKXecj}e+rxn}l *fd/* WB~8EA8Y! ; 9:GF``#_b+hK`SAX0򊱀ЋbύRDؙg^{o:;by0N!f޼JhG wʎV^ kWX1ي߻P&"~4 [_N*&RH/S۪͘t%M̃\3"s53A#7wv)f$m;yO*/.:\8&v+G^ed$ËoZ6OChOlhڏUxF4P[mX? bL{Hz '1B&:8qrOW6HF9 Ozւ  p&8 Qw%~Btב-s*gMo1p2©rmhAyN,[7wjivn+At΃g!3T% z,5kh0(l$qC-@ϑǴpxXd6A$(џlS. ui3Gz"\v&WbފaR5U 6d^t~ÉԌ1Qb3F+|[qηz ໝn6qܑ>ם xM8ufؾ25cyNItnghc^ms_œDSe%(F.xUnU@|p$ 8 o e!Dȓv61=`aN>b|MPLg+نX6S lY٪#1j3P0y}sX?wC S6C&2_> ̵)mZ~!ҘO 2T]c> L7})QUp=a | hˌMA?tMm33{!>⌮u\䎣=3g/7`ϼt]bw[_"»5cb:ᥲl a{3{dZ6{FDsڸhN<_ WjsbB, Y0ep-jL$~/d^]Zs*dΊ6.w/7qwB-ae' D] z,UnId!$*ARVqS<.Ϙ = ,.0V22L9D4H!뻑";G*N=$8DNBXϓWl\¦))@IJ.K4'>aki8џݎ-BuQ_ATw6wn)\2! TP2QMprz׵H?m$ĿwSU2|trƘTՠ#zW`%kn%+qKQJdD mٍαx5^@ \\+mɶ #NO.'Z` FOv?@i3~}*S,lsmi}@`=f,0]N({?\nJޡ9z6UJbúJD+G7Z8󃒎E+ )ƝU~kB/S.]Jm8$Yd@Syޫ`:݅,[ֿa# Zs? Rֳ_?Wͬ["X&V̘nRpIeT?蠓~=5^R% j[<ru7.tH##.u| I+-E$Q\= Tx/: *nA5EL* >i;5 Ʊ= B|r˪3͊ūj"6JNp$UKqid+ m@?=*u0ftu¶Rɯ~=ҏ{oJemx*%p@teL:D#hI5hgG<`?C1_ÒW?Z= +! RM$rSF"R]O]Kn)3nߎwb@ gC q4 [esP/jPSiwNFn?JhƟQyT%ף.!W.2k)tqK LuySEG)E,I5AqTΡM5pYB;_ x4{umQt>ndU*s3)"KSu|d&L(G}o|{9 ou9A<ۓ!ΏS0nȕM駿'Wn}iLi4]xs^T{+4 ev8ʒ߂hL޽>e|p\b Sp|}/l&ZUz{؟qwi"H5qrF\Jh'5We#t鬚&YX࢕1EMtCP EcB(\Y\\u1m+m}/7C2Scʄ!]f#*) _útM6\@S PB6ܯ. 8ñ ÃBlGPժߩVeץgGȸ4Pܞ'QsŤS?8nԊ {mߣ>[='|ϸ-D݊6W'!H"m8>bV*Ԅ̘H@ڥJ .nRաn,T/车:``Sg}0 ͒E# J`̈5ʼbo=ScT1ظ"uly5{W(=بY0>7$SsIĔV7.^`ox(NR6TS'ٍ"P[ud<)@,B`Vhz1'cϛEB9WMB8@M1Z] *NҞ XŹlTUzP8JRƋ $>U|,bTKIEKGxh&Iy }4 v\ڸMB.uBΈHXayFl5E*,HZsEb@U")zK9̖+jw#8RֳtQf}əH-~2X!y2ìɜ,)cR"d 3lO2a]ݭs&9*B=s(]bZ FhxB:OG%ܶo1A%LԺpOL.h7z&5NڸނvQHv&UkC_CХ`t})>*>Яdon,a܂*xrׄHaβQItr=lüEx\vRlmrC矵;RY^ ԍae5][cۥݦoh k. %1'_S:j72 YHN@;9}JcQ9 ƾIÌ5hGy ߬b1@."C|{,}$}HTuхkڊa+uwإ: '/ -Y*jJ:iV=>;3DMp{ Q BMQH~\Pїi,~z[ۜ=w5 Q #rNC bf__Uh$j1@n^/ɭ%h6XIBou(O`c)xxfw'3$dĈG|j;veᱲ;)5u&9Ѻ̈́yEfXKكRCB$s,ۃ8iHA] ԴXk32l_΁Y}A2d?b$GJ81; me FiL+47+_ $ 6*&,3sGVWz%A gld,V+7lMnDE1Aܥ K[6t0Tp6\ =F+R\*+F$4Q=?s<V|ŮΎTS6 !jtX)P5Yq13[oZ&OԣF\ԊQnp}z2kbBțpL5ޕy ~xbrC(gmy}{F`ǠBJtCt P>^^|IZs蚼l,\Œ S2ђUM>{]y0ʧ/Eڛhԇ)V=*N$6R.Dhh*~4;c-A0t@fީ=% B& \Us S[:7w~g)E[}vvRG+tr* m l(LIs~2Xy{evR1жw2CSpIF8m]'/7ܰvS@(Jڞrp%i,%$W/ĭ.B3;GB1gKnPk)~&,)jI8Mmica()ƸPY2*`_ׇϧN1 &[3I9)L@<S7Ng I}b=\c< CƯ5 HD "DH$f OjO&Xg{]9"mR ZB_IhUt$o&X+\]= EU0!HXMPWw'®S\Ӎ{j!hsD+ ͮG~7];yp=`60[T'" nшqa[]zCj-Y1]4]?cЦʑ/6HiO t\A/]ɼb.aﯙD8iߎy~E>3aP0? z7"O}Vq4RheዹKm/r,Dy"E#` ĖTڭJrܩM;Lq ^^m懖[2^02Clp3҅lj/Vl^fbu(64541k)5Fnà%Ac˅$?" q^u6& nI!\Q&a@66)J;lR`^QB1:{[ .Oi/~(r߀H_8Hgl _}ˍ}iOSH퇂4>9\ǂ74\_wk镎s|mlxAx V(ʎl3MزHtN[Y-٠,s?rz=UXIVq3qr =:&d-$(@ 0k9u{0޷2ox Va2#7?<9BX\#I]*OeA.@ V =Lny'Xdpx9 *d鉅 (5 9gۺ=V&k)pIOOci-IIN5Ä_P~n dP0*9죟NFxl)TVmuZn;);Xt7>ڢQWAgfĵ<*lSblj㓮z˫z!tr#+VA,LyQ;b~r Ni\y0~VƱ^BL=Bߘ͋μ9j4A<_z^ /JnY}H-g<#Y>2(?C*L2?jovMGޟ @@wݒwc]b,2[^nGwWk SñE}#i_I=wA;- 4޾(Ֆ((z щNĪQFcza5q \F!rC3%&mJ3*->ٰdϧ0)P9:n-)~"r1c`lm.qB@3&v{I(ʷ ,ltD(+?/$"Q8Dv,t­'K(/)-IA'ĕ#mk?CsRT![-}ޫ`]:NeDQp Sh҅-׼l rdžƵ + ha F@0e?8Ա(W$s&adü*bIؿJm<G\׬nĞ6~l#w |(e]ez_қ>6XkCKпdHLbob!CC2|^Ѐx"ȰAbɅۮ`tQbPUxTczg8CT8 4 S{ZDb VTL?R,<b]b&oAg:8qZdڡ[)c~r Cm- '[]O HJbgf(8Γ5^Sx nQ!:1L$5Ȱ=}3Q{R< P^?/Pib-b l-aclbvn[=V@rgrhv{RM[Ze̎|ƝV]#(i[zmnEG\\p!xo%Oݙm6i5  f;V k)&YA$ :-U?ـuqc_A͉L '&TyÈr`BS:< d,?m#oX@ 2KKk [DY'FT.s–'!\a;k@Q7VdlOAXoL%G+I+Kڌz#r 3=NcA""DHnldZ`.Wem0/KONy VPQ[W'ݍ-/'eᢆ賙0P~=a,hTNc(q/dąhV c7`PQl8Zm $s=hKh큍 M0MnȎxb#il2!VE!D-Kle:H y~%j4Z0`?ʓaqg Px(-9v ZR$` 3+=~Q90,NC~'H+9a^xBvb%ǰFZ*/?K(w>*ZOAl/"F7m 2yt >P.&PD-Ug;X;VܮJ'BDfV* j z8OAֳq_;߳uJDy> 5/(=WgO;:/tsbpd5O(Fc >7VH6:R _+{,Yy aPpڃ2|=rWDA:=<`< y'jsU5D2Qu8ZjWK ؟1U;fʭA6+8ŋ1()^W`SDy“bP6^vT](7`NJE4u6V6%2/±DN#ЁM[In'N h>ENmNn)sL:>ecPIUN@}kO 3wm΂4n8{  !ܮ {M`_O!2M}^#}x6uA{(rpR3!]\"ngQndfC.}i Kpi$'·ғV *3Ó_ڦMuP'=JoLLTX K3r_ A:Cq㝛Arvֱe=uݘ D'Ju;9/7ؿs X]rYB;;,"aMgq'. VARWpﳦv\ KX{EĖr70JI+!/f+Eeς+_&@Bf&>4 Rz2j7s*}xNݿ~E9U4( [tcRjȄ*kC8OQS~qVTF)EM`/+l)_1K9E~ mu_ul?Ix3pG2F6+SW,7HFYlmnO+=.*fC)jܷ z7 SUSӇܭT5q} D}I_p(ʯtcm؍6Rz_MT.w:T6E|ՠ׈AEJNSG'ScMn+JBg& SK\̓Tg:efs7jKFEtg/.I]G%'(1}D8Shp=Khj#.#KUH[)KTHM2; bWSDOY@ UU l=&9჆(y C7xF|K dQrqbpR+;l*FAًfVdzlx>^WGܧ^.CO{ê"V-r'WK@ xu3;# ;YiRt@79vzOA)N/2gG GdmL;0`77 6x)Kůk<}p#3&Tf]=&4u!z4{}+`CTȥ*B~IqI?^,^ZKz+.F`޻*-KΫJ7z-|y;s5Ei4 v4Bwa0J(;ϑ{Yybna⯝Pu %ob 1˳3B%oX[ioZV%wkՌ&0N69e=[b&g=zCU7+Ə+ Cosq 9FzIhTph<ָa!bBp7 ]1Z?d-bɡ X$$ږ@$9ֳ~zcTA&wVr髷CrMG.lNF?m~-PFēh-2~AsV6m!y$Եq_! 9 ߜ+\{>ZV'yl ,&q[XMhum /=((cb Rٳ/{ jhf4 QG' /-l{;#SJ7QM$@1H{F @kܲڏ,T/"^Ql\lq .zS \W%_a# V*ݹ:O0)R'^Q;нyhAwPP%ƣIw3 $. |(Vç6{FJ6 #.'Q;ž C;(JVYPHF|d 1];.`z{ @{#uPcB2UJWž=X4]JF%}wv|p­ogd[ n4gbUze-2Hyf¤dۧ@6*l[&ǜ) =6t&Cݱ~lʁ9Šsvtao/ aCX6H7tvuE:("Tvń-dntA0Oįi"m>SLn&tN2XlnMeg'G ;%|#R.rZf^\lNĀRr%6Ǐ=ԕk SP>3TqpR^ \@j;Wh.j"ݷg_7އqqa”&OHd Xrc7`b}JM/3 S QaݝcHPҍ SC:;вo2Hu;'9w#hw]dHA-'L-ir%>׬b#$ZtF~UCnB{bߨP>}XwCnP5#9׸*H2Ћ7RHKK(W5&wg&ҩH6'SJ2#'"u -|ntaGw/l\mu/ܭtsƮ׷WziZ,̺Y-x%[5hlARAyka4w;{NeP$I U~*цlN΀B`[p~Ųݟ-|ߘKi/z2֘wCvx,YgS[V8[`#mT!'|V"F=Ŗ'ݷrz"ͯoa=Tw=pRZe7CHd)G&RnEq@'^!4V{I⌱pAIAz}D\nܷw hgށwg,ؗ*" {SIDZ^h`e,q!yz)IUB#mS?\2x`'?׈芇M|!\?UDm9t%+q-5:z~dĪ?['pi<}{\[Vr~FMps"PAWg>,Ջc=uB XZ{+dP@Pc+oY%~OAn;hMx/L;8zx"fkLy%f)"s = _Wjb.wz2K<2SzŪQY]H >4OfV7.ru( PVL.jp[OhQA LǮNANznv k-x ͚ՠC s]u!kFwaueUւ V孑3:]^%L\V1 4crV^jιwfUawy g~3VNx0g+v֣!홣Kb;-;:qsn?䐖?86i_'Ⱦ8ЙH3`[׆v$)E=EM&ThOY!\р^|Vv*Bu,K+Wm%fTOfjÉA7=Wk8^,|ALȊȞ)N{3l^0*>_XI|kգ85jDǍD=zY+xz=5 _k  ׉:t5'Aݠy)hc7Axj^3o|П=zgd r2 MKT5ȂG(i3 hGSHw r14VKUt!##\ϰ'sa#}&S&p c.)]q6^DT:}Fr;602;]+K?tEt P=~}<%3TUO ݻa\_6f#6B_GrCNno~b73qKPb5,E{*fQĊ L tfP KnH!W YloDIpMyj|"U9Ȟy^tX$e,md e|XUݠa]4w Aʨ?U31m@vT,3C~;Ρ\Z˺2 IV(߾X3`3NUJ$7z'D'tA>2Oa-N7Eӕ2S-bN^NRV(0) ]y;P^"k.. ");ih=0L+Pk:$eO=ǘHgr%FE htW57t{鋟)"ҫ_HEIt*A  1K_ %{\- Fa{سB/XQTDZ6^]R lms[sߑ}}sz#@A]iㆬуkT\ ǽ6e+ʲ1꣺"1<2(D&`:%Mn~3!J%i6 ?zї]`Ly@TM88O]yvw`jQb"Ft?8)s;Sn`z5T5Hmj~5[kclM;:WlD<[Fg4Г7.rg"Uj @g@5HH!ĉ h3^L'*EH'?kh>HRb'OM$Qa8C=72?ZoF{%B-CoY\k-E4>M`Cl>}ZGZv`p%bYgb-ʳڌHZٶD9fa*IK>} 9 2vy/wyqEG[㈁;F|x{ v&R+;R@{Pw=0[kbr|4X3Y_F ŋ0cmpT5$(8}* }#n|8}OYdX$=[>eP(`S`W| *3 l"bq(ˈ\yY%oyVSH}fτ&F)7`nc-q -Rxz;9) AnSXoH 0kld=PH+$EK F8Q]C Faۣ:/je( +9R 7`^[PM\9#tli9L4n9(h:WD6BpzV5WͰ3g:W sJwGv@-~WVd e(=C $<(w#Мμbo!4/':I@5OP 6pkɧ*A(pvJyE^)`{:UE pwjImm9mA/֦!GԒ)Σ0wHG%&F)O60燰- +X#`xtrt|5Kۈ#lyǓ/ x $kt'^'ZK DZZSQlu;JAJeWԴCTpqJ޶V X_ B4ݬɚF?hj Nmklg-Bx1cSeöƐF_o/iY%հrl.Y&|ү[I:[Zܴ K`0dO+l@:\kQAl}'2E@7+7[W20 6bHss72'.EZi3^YF.^4J? WmW0SҒ (Z.+0;N=ӏOlC쪌Fm-5(KXBIz˓ߒEf1K<$lO|2JcBɼ;,u@wIЏaSҿB|ώhe<9f"tj K0ۡk M;gG; aX7ںr^}(\c>>4JhޝneUwLR+vA&6 ;Y\:fѢ͖[/=[2~%p i AةΜ|޾01-A@ Zjxm2چ~ϧ/P #dL^XxzT @DהNkn(*UMP>pRE]_ȑNo.@ܡWJ١ЎF&:).l񭊩 $aO=I7A=Ōꅝ2O&I?LVU'4 {>/z[:72s#1Ri;4efoPi, n 1v7Ƿ)k~vc;vNYE;a"~{IJ2xrPxȴV ^"1"Y\Uv֓-nZS+b^/uva 򻼒9ݨ5~y;.gXZTQ#iһ>{~j$EydX=y&@ñF[g~ ظ52hb!"y1:(GI0[sUqORnÚF  C`zӥO܆aHe\:f;5ܴDt:\;5rQUD ;2vHk"42!bQbn΄ԓ:&ccm{8TQ^AHxk贸#:R#z*YQܕq|&rUt:ʉF8"/僪F?OP?C5}:g;I[,_5Zdm@{ 흂\5BHjX4n {z% rtGӒ9Ҟ4kmt!~j {Q"g xCMsE =?Q#2`]EpDȏZiZ]34'6^QKk/jbOR(:nF#dN5&qD4%ؠa)\|O\sHutT֍P?(|JvQ* !/Pd C\&Iow%wOG}݋(). hPsbl~K0Z{BԳ= 쵲0TeO=;!QzvcBBtr .`Pڣy +&)Kp_ C̆UoxAs` G;"48cad1-ATkqOc QJ/D%~`Xx |JS"7#ȱzQS 8!> :`.ܢ:yt-̟oи+|Zn}k0y<o`'%DKUF=!<~1$EQN ڭҏ C;cwvJhg՘#,A^ȂYuf"h0Or?>s{Aƌg+@-աYICq6GX H%:i? XaxH80ݔ%,07nor?<,TT^$3ׄZ'Yl"Ku;dj{0N+xfeQ$jc <vA^}I >eTAX8j =4.79 ߵl,d6/jQF s'l@2(O}b?9J %=FL()1%r/Zܧ[RMmPА!5lըe]өkʯ9pkC}١&I59!=*$G=eSP$XI糟ϨdL2!'_ n!N*$UMOqv9tRוs*XS^kkz4 n$*4$@C 9nr/[r8(=85*&[%5D-||{X_0v6qXǒ\jԠ wj>8_<tsnZV녯y:vxc'-A7*>ިsgl>XOR'j G5^?{^XL?Xa8^t71_wO{p"ULD?٦s: Q3hÑdps+%Y [2mavi䓾2+F!LO_.nbc4 ;(:Vxm,OI{"gۍbN%a : =ejIlQ.ldم§SHIҫ`td"NxFC*]aoX;7 !8۱okVH0sI .R)P;*Ձ?ޞK7>~Z ZYg&Ʃ%¸?eك=(܇d#I MG>pɳuڸ 2+MvߋdB5:O:T,d/r?U!+woTbm&f$eSC%=L7(/mjGOSա~@"~cyKOșeE 4nӟYd1I%PzOk$͐xFG8LdLό^ײ7XzH9,)X@H?!w1plߟKp?\XIS9d[U|=aor _o Mn{Gd".妞,=m(@ kyp+ڔi>W~,uԚ6>7"iDi!a2T=; ;S%maXD/Կ 5';tC VdZ)՜C'W{F{:tpD$ki{)5\€AP#Z"k.Eռj/Ȉ1n0i>mD{o5i i-So*1YG=D! /)tJ3) zXB-ba"!^k B"A5eFTS?Yܠ1Aפ,tJ@߲~ZhNzO$JFLuY 2TOzuY ZQ6su[_JO˩p_=i\m%Nffs)04x8cwBVGmAdp 䥱oy<#w=F{ s)*TE6G(aƖ^ c5s>pH eP cG>=਴LJҤ{JFlitd-8nH 1}^g^|Mxv0EW15ƨb-Y! &rf }b:u;%~kP4^p-= Ԣ{{zzbyidhZC[xK @`Q[zvO"q͚asPJΓ({ QS ZI8quulzᬭKzg71UڏzSwD`u|fDR!) z_XEoD<")},vI!nţ7R8j'P'H5cy&͑)Ƹ{OL|1+T"H bTij]IA3yD悛FNlGn6K~Ui>b%p,^_jR G2f-!TzCNca8蟮3I)5`ʩʒC_O8d q {Ji $YXP(IԯS0KkWL槥l6&e)%=?~M_ejނ Q>wԙJAZp/Զ 9Jkg6"/yXҫB t0uAČHΤfy0KN!ᑧP |KyLQ>ʟxʲ,cnFIezUwG1l)T]3Kp],yJnUu#iϬ d`Jv2y?q=jeA@ϫkvDH(+ٜQY633& ROxyA~%s#u&cX5y<T^}nrҞK? tۨ+ab7k^7S.oV'[Ә'vSTE_ly@<8J^k'A4AɻI?ڽ@`k/"'> \G< TȏiiܜBOvpb.| MDD2+w(q}#H?bҟ$㬆DI`7>!E=[z(?10T_o`b i5 J}8H׸o C*15GyVFJA;kbVs}R6~:Diyw^[o/},5V73Wr9Ԡm3棦Cvc'!Ӵ;Bu_cp4ǖU % w:\Niʁ,5M*FjਧOjD~T!AJ#[<Q?mKx.%G?"Wmxw+e.I d̕%Lǣ8K{dPݝBc~6IS0Tg6 ŀ~H{*\OKɫn Rh)gQwHAĪZ{CY~CzsΡwk]*B%a`"A@25j mYײُJ`p^Zsn;Sߝ:9#"k ѡ#L%fr~ ZEL~'+~0S/y?݇婪v#IGjK8CjTn@wfftw;Ȕ5@Sͨ="_okvp 2w"~R$>zހ V y^tvٵs 0^3{K)bD;u/¶=CpQbNI`U i:eűL7m*>>t&l&2z!D<ɡU_)ogs˘ F[ݑ*D;p 냺Pc\K+Y@q#%Z3*f?0KRUhԾK ; <~aߘ-F p3@/;PϛCl}qX{*3-p_:+Mk{lOXss^^i ͦNAcݲVŎu W j=X` ߡ;90X,66WtVCqjw}VTcz"_I'A ̰6Il糳d ~. mSA8zy'}׵kChyŶs AbX[crJ bN4EjbTE-%}A"}BZVr.DY4|i^dv43 (m#icA@e"E#r' O<AbS9\ڕljnkv \ҽp _h8Ć'?͌#:!d~2gQ0Ũv(" Q5kV!oW]Ŵ+*OAcjo*Vϫcg+0um6׬:"Y~K_O yD&H(lۅ¶^c2h<y=f]QrޚZY;_6܉Ɠmɕ>j̷ŠȗDiB4^/<,c6O}6;#=]=*8AZWDlLA/JV_t"n6L,O*ۼ9:iѪ%iJ b]OliaǢm,؝c1(bwn>nE2ͽ\d,V-W9x*bñI)۸ZM!cL9X[\7 "R oh슐+hE&-ڌFp!QAٵJ vqhtN-ưiMG.qsكyIa>^6 MD}BksA ufku1R6ATmާP>ٯ^J0`@9U}- ѺV={@؛"Z[M2x>DI%-`^4FVY ߢfcCrE8mj] kH*nIA0srnEqFG48=8bGՠdbcGt5˴FE3$poa=s@6s<#'Eǰ8>pSA?V'Af'.y V{P#'dqq)@6mkFvG%L@ѻƷN_ld|BKmyh7*Rrܜ`ݠ/SF!kG >7cM64=gIPPj718H>n8/Hlҹ`ᒭ0@M Ɩm9Nqz2c]1O0p;g7Rv%U#)m4=;zSX9v O$#SƸDuUG`h\$=Zy(꓇%|'ն0w6cPj*b ɨ ڙBAq)h8?߭ܽ a+Dt}U܆IQ:߷UoC Q<" &sRnJ Ԕ?G%GbEcl"X)fjGo(cmo'_zKTZO%Z|J4ac6+VNp^o/ xBgh4{Zl1c:?RvC=5DDZSit?{\ŭ1"b]> *?NA;kT,i#)^d?(N/nYk`Y+B)R_IҲd:_Քukq\ZĈA`,YK~G z+mHylH'\jʍݽF/wmeo vc7X+SUD ͚~]wgsPl=^@g&m>ln_>rRq1Spo+ÀI/HG%$ݽo&l#uLF: epq䨩5cV9*J$~D_46oa]k;6h |Nֆb('0'Vɚ*+yqS<5H{CǯM)X^ (@/DyH)ϧ]J2&c Qd')JEGǬ'Me7>a1S8EƤɦLjk"kIj HcKƱo҈טKDrɕ_q#v&2ǓWrSc"CBj(aX^GnDzs]J{H1tvj'] D7EvO,Kst<OҳtWm~t4t#/D_BM;illKWܺ1(R].(v‡HQey)I{ӧ ܘ~<=zsRЀxa_=OߓrzDvՔzwoLU^E ɐ;GYWTPERj3eYSt=z7mN=ӽ)xL+~[re-LX3?z$ďNZL~LS:="YɢzȫgBK^=ӓ+>GQ_Y XQ&\sk|&H}-i zC"#!SMxO|R~ol&bL[::%PPsUZwQ @DtBj2soGt2iC58-x=bABW?sL%o5 AoK)9=0peg*_ZI}5w= ʥ|gie7M mԾc{ M0S&v鸯N ,wͷZh^/L#{ؙ6uKGo|k)/2P0-G%%e@z^pŃ;S+G`ۏSdSD8!:gQ(! (yJ[#B}5خFaL&4 G,B6٩whqz ~ I#kw5BiS>ih@\UoU|3.udkY}|; 5[(1crSN#; _f)D1VcP.597rْ}ͶCU9(%u(3UN]!NYoj(Go`{ĂFK?(\ Bd6IE쯣7.@nL.pz˹W43-[-tԇ}~_- F![ʣa:ݲ}NFGvS|XJ)tr칍wc-"ð%H&݀(a~źa,rDQJq҈m0~TۖqȆ]HmAC.hHԶӶsP:+[TވnEP+ﰧZ =}<[U{԰sPُ.}T1*(iNử/j νYFiӍwKv!Jfg,W4o3S?CǾͼ7oAkT5kʌd*3mCPXSm v(h럎鸴w+QYע=Rf?s0\`WgBf%/h q`0)2e)kep?LA}N|k[:fo8tv0}:uxûΈ41΋m4ͺ&0n4vE/axǢlFk2Pzh"gI.;]۵]jB(Ra 3Y:ێC.ӥ27z.vvfmEF1Iߞ+i?Gv?PkIuv++MO}υ ٯ"vҋ\€Цo#o蟽F3w1Ns[7%=\ ^8lK.֣-D!:uQWn|,0pH#,G{YX~8 7mf W'+]P{F)XEM0.ȞQMwoi)6riP؞moWv|nvE<#k]yQ)6bifE~ MgD;厉 KSgv(ŭ*…o lvV6eSވƴ9 uo/46Z"LjB~l,y|M &ⷞ3'Iu;{Kuv5"FNԶHCzvm8#Q oxdZC=POI.\9/eT hBc %w"Oy@ݧ%{)6289&c Er3g/F]sQKfQ*sE~0YLXqϷzsR2{"dk/BI1pއhQ^t15~h#Ե}ɢqDaw\ H%*ٚɆ0S-Ÿ/H2hb?[3Bg~ְ>ڿT#nu rAA&~F~ČQbdMĕKOF^,k:.1hzv@;Ѱg܏O"ֈpy+g~Vc:#ZzcFᎦQJZi2~(#MwIrnqذA@Fn۷•!TZJu,Il0 ~+ڭ!hxZSFW*4+2i"zT6bl2TQmN l$~n;x CIE<>vUwk<ଢ#x{ n./Y9E&pQ,.lM^Ny-<ŝu~)lbyYjX_f=ɍsl0X56C|+]!?|}C'xI(ױ]UӜo%l(Xϧvnh?rJ RU 53| >H f;+yn~s1(zL#w"ѩT (F7ձDW44x a>}K;--"tj1VX{X 0ƌMީՄDڳλa5%`'Z=6[E˦߉Ipx!cvcaٹGQFuJKNz茤Q&`DNRgWxBW55:A'%,JƎjtFǝ8=|@M0USa<ä=tGJ tn 59-5*7)ҧD0vZk'j&"l ChMlkx;4 xwxL}AC610l :n&%y!D J@`z(SGJM|80c@SWIܧЋ'&'a,W 0ŝ̅BP?";Kee6N-Dte,8g=*/;q\Z9 C|FDc=^*"g[`ΏQI˯ /ǟL$^%3xhb'p\o]ʢ'"eM˰ЄfHȸ#X^%I=IeaўZB--ۡ+eiO8wп(*RbuauhbŅCJ9 !}i}*\Lx~Tl}?J]@2>ޮ= IZ P\25IAPM*a[eXnxI|8glʡGaj |@*LM,O|AWSt ZClRjT'z 0Ue~7􄽜F}h ! oLH΁G瑆:;%[B8Td_PQߜ~G)>ob/N"YymlȠno{i ) u6]xyz;*G#)Nk/6uחkgd"qk,Tʣ=늗]*7.$e; EWy;ň>u|lx:uIlH], ޫN1@8`m(:ޏd~kp)g TG%W-# PtD ӶVgRT◄޴yA;\T.b9CAcYDv:vP:/۹<:ժBbUTWm6ڨgm^rI~\-++m1QɫCz_ F6=W(f +ζX Ѻa2Hy$M Yܲ<2Y}>OG>&ا#cyd8CrͶ_^Ȗbcf"8_`9d V~=0ԫa afx$71INy]eۆ> a>bλgNf{Tm(g'J{ZE{mg~vRt,!.enHLSS{IbwTqɷjmkKJ2d! ͌\z -Bm:J9kW#BNV:WThB1(HRd1MUGHd1*SveMd )B&ss?ZO?:QiE\E5ȉykQXѵ_09zk$.*(}E*:d#Ҷ^|4=}ӕz_u|yDR+wV!TA8;"gʚaAir6ܭ_ԋކ._>_T+zWV RHxQ+Ӫ*D<Vt)X;:u^)C,oֳ/xͯ5mڮdC|i^$-X+xoh~(A!RXcyɄzBl/xQiq㰃:˺aB `v'yn&sL_BpXS6q<{:> Xhʭ!3B\U-݋"Yi=y@aazMFl<ӡHF*(BY:q;>e-{ϧ-䨞}EQF.' C@ֳc(gjT51KAErʧuکraEtg>TYN&MۡxUT& GHP WcXB9L΁Ir9د<ð,}ӰK4bs Yws9w:v^yJWJUL~ӱE.QjudgnNΠGIvMnŽmb n%j2qNx"CyI8^6xVVV߮!, mygR2*wo78Cwf~&pv?yȍĜN}dfm,L[ٯ#e@6_1c~n4q8OJ[59DXI {*hD#͂^&>AvGfd;:'c : |_2-9v|Pd_8%ҩM݃2~'iu~z'R/(ҏNKpˡH-60toZٙI@oMyRg(ٹ&)G7Bp\@ P.j{i{sۣJa Oי[ /4j/„&v8*!cbۀ\KK;k[ ƏܒRcp̼'5;,Xa8GQ4-!K^[mOG9zK :cW,8z+YyJ|޻(>Cf7!5%&k{x\By 1<)Fz*[tc0ieCzkd]qqJfJYo]2ΤE1xͪIiāFۛR&?ӾQLۢ[CTĴ' B34[ SZ@hڧQ@CS(=۩wxќ[݆UDdbo36`핦VzhQ|V7\&^zpsr mXe!^ץFYbZn4@'*cο1gօ6Σg8IIqӖ3. L~jԜ3Y^+"Z%!r 8ld¦ָe/b/imsgY/Z2Q]n3NDS`{y0*lbBvWn&[ IMqe'B 00É'=[`M>ɠAhlV!yJa^ PŖE^πR8Nq7XEp%*N Ϸ3b5o xγES4MU쓉l?J!Up?~rFD%!Vp7@Da ,;C7=r AkGKA[좡E%{[@Ћ/Ҭ 5KTGLJr!x~΃5@tC uKyL%A$}y+>'7܄2yŲ=&`bC!Us0u2d\gq#IJ/cnϐxF6Jv*|{m%Ut:۳bݩ[>iგ %hJSrRՈB ^ 5#@kO/}g&ViB-#I} AL) fIjjX=Ncf[Q] =m$6c& Տ>\)Q^~ o.8v=Plk}rg^d]3ٞo ʐШ  mhz~n/f5J+fo3w泿 !]]#\m5V=X;ҿ~d[$If<,t8 /iP|"Kq\'2Uk/H<?u2w*u[3J螔 E J΁{$txܱ˝cWr2Q&qp )lW%IҞn(`H6 ]پ`0U*WZᖊJo ?q6ĵ; RV" KI!]knvQwq}M`'K\O HmSrәmF `0SGT/?Or$rߓpD~$O K"Nj*HtL; XVB.6AOE< QU@bXF\>(=(&,fo";!{-y[~^ugEN$EOB]* #\͡pz'aɮY?:hwym?v?R~H['9N> 8|+*q.bأrGHElxNg,9z:XopiA s'uS\ SFszhuڐ0wQtS%^lTڤ$|~cf}8=rwMӵ`+l8hfB>gq~䙞D|uD[3oNr5Y!Myޗ+%C{IZٻqD|m׉7FvBiii}Ibr(7wt6R9[8pj-=:c}k y|[ EY#1KdžwvfsM& :I|-[DmMMl]v=nFyPag)|5 L fn2B5ry1|;_\9-,!:QFq}h+|P$Pd;OXxPH8[a2|I>à~XweuԮmr*˭mH9<5c{E U7j\ķaS(ll5%PAkm$j̿252 [2'-g3xvɓћ!qXaJ>Qoos]rD>MBbRDwШah^6}J$vA43V{(BXW0 . }Fspdxy'Uz$w\& :ޭ\)BFF3s3(WSY:/dޚ5!Μ!Fx=dZ@â*$ѡϸ9%4:vAKQ|}S Ύnpz7HZ'l[ % `AxIrӚ\k>jl}"8(&S}R95>;"-l'Z~1;Xź3"t'Q{K\p#J] 4J}@7xG顋&=b0M Eu55$ymr 3JE;``hCL{|,-!p׾T*Ƽ!KDu2P~1Q8B noU_M{+ӟhxn5g%hල1ʅױXVc}QwxT k9-+gVu_#lms{0 4˴Ʈ堟 ܯP^@ $sL 򼬠*mYրOS0 gf,mZfo5͗6 ^1}Sg2\}UTJ= }ߚ#YǵpFy 8ecu v|JDZ4ǖcLb{!Jchkb"xBMk}1$vo.8"+"#;I UeGXU\85|?v 3⫐xgSi2e :vۼI{_?L,c-V6q SV06?>.vߖG{L'S^?}h 7ԛ;M̥]Ѓ'} wC9זp(C;)Hb)O O%E”krmLp2r]UH<hqKu'amӫP"4OqUEh3,a$,?[h{٪1FrYЮXKp== |E,z{`}.lˎ+ꝩ˹8Ϩ.Y=[@䘎u :J+s׆\u| ^N~Aa?5F S7m!Q++ .h*XQ(|0xf3EgT`Y#7XXGNb=-3cu˳/-aJ[ Jşw2Dɲr\X+/+*eC-s9!c6>+7at;S|9<hQC<PyXQWd.B=Iǀj樟BgKHldjP~@Qݼ:sΰj*&ts?G<:쾬hXBl mM7^clɼ%̘TwtNVi~d'} ѰioaNʩ[L^i1ƭa`,&L羘 tS\3Cp[w)jMk@}M}p݀]YIҺPH; Ɏޡ[C >PDl|םȍe#kd%M?o$l;7iuT+p_D c' =ςEb4 Z$h?0OgK3;8r{z*,W%tq RigkK?%솾^U*9K&Qp/zVVr,,;CEȧ}.p;^ '[u[p9~1Ѐ,[g;Cyl_zVνgt~:,X&iej?mԻ~5u{`7V $Wz5gݧAbo&EW8/,jNe^ ,FOO+XBRiUri+7YA\`P%fD ZAzFōLfnw4{}L dwcz;'nk^w2mU똀|Ӊ#rS*ЇH=%wlBكJW%ڏ2Lb؁zh'nncuޓb7״\x{d ^Uy罇.uHZ_ (t5#ʹI+-Bc'^?"UG{W #tys~-byCJ#ݑQ܃ -IJNceieeViڮyOn1qcNNL5" 4~ 8[x+{ecuz=^ >@;{eX+$_}}?kx~ŋIӞ[.#=yGo+GGߨg8 OK c^4)cef] `xIK6ﷲBwqLo +?Ч#^}ō4}z HQToLq*c8.QП`k𯅬gɷYܭB歑: tėqP|cs/V޿o2т{-nG'w%+ /{fmGz\|aӁ7}|+SC QdzB؋}eZyukbGR̀3}8*c}*Ƃ~|@[Z!#̡a>g]x {^O_Sq#ށ#ZziJw)]8T8`=N =4rn8'zK[}#ۖOfY;?鱐 e^h8 ޑ7Nň*I}A69ؘz.mc$o_J'3T8T+, >ੰ'.?Ϭ(48D:tmM8PY=zy*5ީw*ސj\''xߩᄧsz.AT; :3~`r9VMܱk%`sV;ZOg{dx- eaDVbŞ%V {NGA*IWgSAoyp]l+\~RP3h/' ~±I,HҎ{m'lS0|;A 3P5\W2pF{m }m)>ݠgcf u"MPuO~%4wi`#%==|+zsK>NuO_1?QGᚨ!yZY%{F|nldb藱56gh sۄF|y*ܸK,]@2yZ2bg!˽Ulh6H;Rm+darT&auiZp?)s,ٴ"(:(}+*qTZ7wȳdN\ʠ13+>%$jxFZt{yH۽fav82۷Z$*oIwc]r0;04tis#*=\>wխ.I'jea*ۤwяXề:BG Jcl*)&(L J,~n >S k4ly_tw/R/b``ѽww!eρXb.o+[/vfZ'I~%x+ZOl̲_fAV54y3tþ/>烳>-X_ m`R1Ӎ+7jeJjOF1>p`7o(eAs⩸%Z%5970\ls*nM龕9G){n`.k+ԭkrwQ^s7?>;:vcs&wz1Zْree9x*g$lVg5@mڭ?{W;VƊY;81oֽ:\?_ {ut_ߎc݆l-#'U0^^)O3a\zh&*TK y3w0@]6/]X.=vkƊ%D!)[b$4GiwS0lj2 'g-je3ytj]< !&)=P1%Vi%N#T2螈"~Ի9ũp:ۅbsxD-rQjUΈMeI3=FV+% Rw6Da_{!9)"MdvNG=Wtt6/rXlHULNN \3̨__,n=+@mLޢ0Ȇ+a@T|GCv!#dVQ~ ơR؜@~p>Y!:U۩s@;qznN 7]5%#CQ~wOQjxP d̙EiAum5ѹ([[Zߝ~Ef[ ] G\ k]~;l6DdЛRʾK+y??A\'vo0%?ܧv0, ,5o|*p١+}T:S|)2j N䭱Õb * =adsGeC-CmlaA~^v<-:%3$)WA t>KLzbݟX^Pyw+>$U(;RbCu-wR 3i ,-y).Ƞl);"+cL / V7ܷ^䵆i<{‰aܰЂۖ.)^-a{R&]Cgoh d' ηMmZ']zU lK5bNpzCք=>p- 4d5sDNeFЈ5.-7?1n?xTվ=yn2&вu7\N)6>"*m\,kʭ:ѷ]iB뜓!@o ڥFmN.id&A|@ 3EL7xDxgK3wÀvz4)SK8g#8fVۛOβ3]>9z"F>@rk76HWdI4 "(wIɆUA]ΚT(j J2 9u5:0X:|DV{}?-ArwP84J Lo:{Vogyl^`r&L*m {p.Kpr,-@cRh/gxƴ*{xi]GP~b5<BHHg5YPo/Բ+34Mص\/}Z0bq6j0[rkpE=^SN<k6r[';ԭq7~Ϸ՘M~^6DT(*> TL"y$8`W*޲BN:H=ݬoo#N'Bp(QnnJ6?F:йiD`4ȑ]gA܊0t_|'__涢ƍ=!A+GsgFr&DhZvS\(,QVքs0ó޷ vNٷ~y)#G+ {EA鿛*ƦXYr*wߤ Lu3e4w +7܍G>+=nX[ 7_LrJ!A iq/]puz8ڡ{m `[ߢk1}%7ފ$L\ G1i;JPakcpwGd{@Rgt﯃SuAS66W+}&kT=v¶l!a{TiRukW[i>=Zߗ !S<,5wBaܻ5EGF( ^4#tU%w8+ pD#xojH 䙮ދ6msA'AK F|-Ki>gz⇮:}& dH 6Ow#T7 591% -yEۇnmﱹ$[+nn8/ {ȝaWT F3=ihfv~X5Pu\ MO<vq'zYHf,ϟ08CAgh%D[iWQVeŘ\IQ-tBCaV <ΘmA;A|ni،qrϼq<-V<4z!{m"4~W+2̣o ׯ(4ڤ F𵳕2ϡW$=Ags]u%Xa6+ڕǭ'ׁn8:1Aa(veหow,=O@u&\20N> {ۭtzt>>h'm:w -uvB[cO%7L X|6hoGoQ;Hޭ3r3^[ oPeJ{`` n!Agi]HZ ٱ"H%<ܗG%uE MŠyf5W"=dduGA=(ؒu+~?{ s1{_G%R(Bswu}}2 #|ўDh#εuz%Xz3vTH}§ngOm 0T}#;adz:8 7zjMC$#.!I ?1R.`OL;(\M`nưXB";n: PV՟-5.KwVvxGxG0~`5(D(l'vPga{m8eDt܅F&CѷPtUO}QxOb^I∘3((ԯ:IF}qbQ">"!`XDUS9{>MnA$M̥GtFޯࡂ?q5 %h&xo~YjcH+4L(%d>c/w24=^F#&@f\xՠŮ\_y*>Fsj=)g78ޘ-C'"dl>W:ɐݮGBuu[J>tϧɎzK :o{{nx֧2"DظwXlՒ+&kVY*l7y.7k@@eN{;[-sxRG*v (nH;kc)t;;A`vEbW1 q.Ey:f.LCƷʀPI՗N}\`x~ KwI3>>ŷɀ"z+J?IJd=x^v\Ph8/ڭ9?O^ӧ-1OxUzF!ԳN%ve8"}II[]$7L,(*b)RaGNlnU{+[wx+Ӊ'ܙVb~ͬ}lfSA#{Ip"ij|B"f᫫wVǩB1aoO ~/@9jB;>Mei4  3;v笈8 tڡjj8ۂ>cH^l)݄e/={MO74\8LSk6`- -K=ݢKtswurhاь)IW N-"erD;$3#[Y(<s_$- {;Fwط$_I6T^*#œ84ԁ: {ԩu@: (:0&Z}P#:K^(%{c}qZiLo㰻ovFm5-ϰ?9a[0s4%{W5ۋ` a)tK`Y -UVFyI[%wpi4uF®85@/#˓~Ap7zwl Ŕ; M6.=@,}" ,t.Z֊$'?ܔ<߭31^M[a5ޒZIؼzQ8OTNGԧ'" 6Q<<,j^#J!;p5^_oHͽӄDCWRP}vAƨJɧ1‚3E$3y|ztgԲNPnw~|=d(fcᗫ߲/OvL>" cwqu|E1=سsoUԨ pG##AM7:ogpas7mzH&MC4w$= H K­9uM{]v{q|!8"{q 2lY~%gK!1E{]ve>hsHo#D,7eijRoO*M+c>>>pu,ho]aMKJ?w+>o6 vatz%P`ƍ$id]Uaɱ: > >&bƜS3hޔjh_5bD=@AѵDdFrH;A=Ha+ oscQ޿,nO5u-eA)aQo*熞<1nPmph_nUM'׎?*n<&yU  [g^<Δ6p/vfTFPf((ڧt}2)F7SqÅcYHckǧ\:t")!"f oX @dЉF9܈Ty;>b 烛o=ZRx=0D& 猥gZ}Ns}-0Qҭ4/ ~ݛޭD{NSLξfULX'eI`[O`nBl  8ݲбv1>pz/g] oi~;Ib+ޒұ~m6B[Ivš|6}=sС½aɑqYrd±*o Fa,&ZF1_L~ė!"ƨ mG.e. ƈB, ο'HbO\Myܶ04 zu|7kqdئ]ï7Xem3x˯ݽk<φU׸'k'8rI 7"A~f{a[يڡ^~n:;V|K ]I͑5Es`LÒ=eur$CM8᮫me5]:ޣGwH[tN kdGԤN"Ǥ!|ܱ-:~sVQrTZT`ʤt|i11Q癰b"o؞ c7u*,KuoZ4mL큅v'XB>J[lPA/tЕp3498C'dv#8+Z{0s7>&ᣑ6!OŽ$ LDLkprfL,|oi a 5f[˞3<7t߹y Nۭxtiao `<+TXCUXMI(YhF&s,m8mH<QAN]{N];wцQ vm ,ISӪdqz%+@1Pȵ;̲nJitlo\v&Jki}y^/C^ft42is Kp*|,Ew|o7{fz*HLw)lGBQ!bE>'> bcEFk85޸xӺSqRv_:#r̋"mكLg%LGQ )߂u2}0W77C]:|!XS _*EpN't_y}+>-M-E7{8xLYۆ~C;$/Dol0 J#,#Ai+Baj6_mN.w[^c  xΔIA} ȈgLVo߳V\>OȗFtڄbH"9;T* Aq#r`KqcbTlh*eďܚ%p| ŪOVPꗔGk_l\cal5:ek<_@ C S1s)* ^y1@saCArO;ZX8)0dB8 rs (sٛ27'CDl();]2ۜCky (glbW͟6uf3fpeHe+ /ٙzwʨBKvmeVMm01u<<5ۜgɭEmιp*Vwl߿omPtB͋1LAt}|a:U:Y@ߨLs[fфVvW4l0 ;"1~g±zx!=]a9 ~|i @@u~+G/xy݋U b,}uK`T Ǖ.ٰu<L{KE?4n J LJRC&F׍d9J1wjlʎ& ֦WKhg u_pU;7}OiH" Q`}*tl|/9 3'xĄx%ӳ8eoXsl 8@o)Ny*;g\Wb(]T706Uuyp)!n =!:LM6yVO2Z&:r-&;gEMHo$? vzϟe60ɞ!7uy/a6sۆ聛cDTwUzWG=+7\>t>- g~ g3gUy{i$O~I;83]m4*eRwڔ~~>V߬4&뻙2]kznQtQc8\0^]H/QN= NSy}{A -X ^1-,/oX*c<]Um=*\bSh.RҜ#ALM9A켁;Emz=PJ`9DNm_kz#QhsK _W'vnU!Ä=]`pxB[,c?2 3…_{blko!Zl" st!?kv0xe|BnK걲c Af w/lgC:p}03nsL9jێ%,6oX^gۋwM߸Rp/0oB QkpʢC "|ŚC7NեܬĶ `pb-tnn͛9Xt+}>qRܺSkest߬tBSqTImqS&,&_^@9U( > pV>;܂8`;}cjOj%= @v'uKvH j%g6oSYӧ;VYv}7 QV;b71~5noT%Ckm4nL{qzWʬk$Z * ]z#)Ge x흲Vtи371žwn?ݨKn](B\Zuܵb& e6!v0'g.ũ!,1|>7uS>3ߩo">߸FoS8=;snR;"d~:fRũpas(w <ũ6ٸE<]qեJMlw=*4A(5៻{[g4אCDۇJJ;<Ƕ87e}4LDtv$L;_n(pf,ǥҤik: ,0ټU;{~SqCs|vHÖNYE䩘]qxL @o]>'z*M{<8ɦ7eGB­ĥ &-lEXrȭ1s*[CKNzy{(jSfN[';|C>[q|Ay"8_cdBb gRMP|.Kk01EI Q樂~- I^TnރQ$;7w+P>0lti-߲>;uQ$re*m4z+Q1dMPKrݍ8ןw/8>aη:iQGS~EK;(j`zwpƞSۊ>vPȦ`߯V*{uFOѨ_؀ẟHOB”*Itz ?uܨ k#GwYMUd‰jT= 6G㵴8:8"Sj[/PUsPzh6(s .i]>/jji?vyܳu$>i TO?p9f |{~@ZLD%B-)#<znxIu7 n0׸R ^F9夃|z@xPC37Tڳ a7Pw}N/ "YWaO;n 1Ī3%;{æһݬL?sAڴGG7\!].'K톝tp-1:})oڨתyUכs'ͺ6k}Eºca[xLMφET~qدVq6V __tt۩Fp55|/kXn 6r3!c(~@P\.*J؈ ӁFo}pwg$5Z{8\dokatk+f|.?;uk}][g]ŵt]ցc3RVZ:ڼNqt]B+^b|Nx:N ˡiZ|w^-soL3 oM::<@ `}!賑Ay,KuñK( E[ }5gR([( >{*NjaTh뗣DFcrH%?ߖi>K[l?QHȽ2Ã` ̍Zd6A{3G@HFv"?mΥiMvY>ꇔ Se#m6)t^*8]冻#- eIB0"ۇ?d OL BCnC|78yTrl\齃gKtnmvkQ˗[e[7,ȷ(x V =fllHZ\j7 5|e)7y޷7'tƦsOtl:ykZl\kByƂNvn|*l4-9:[Z}w4Xkv(c,!o੬$w,7<(<@gzM C45xv=a pk׮gx7]~Hȏ§Y9p ΋kiKv^bz84ʞL+Bⱦ0}Eȍa{{噶<_^1]RÝtbLԃ@/H~_3o0y-k=:MgeVGߛ,o~G xK(@fSM۳Cv&|LTKv,:0`?w+I FrNZك`9zKBQ_(>{Z_*>3o >Cx/ eŠ.aEG?mf]po%{4exTg>'{1pЬE6rc]܋Z -wk^!]6ת~lFjrg y|}>.-[:79R`{w'e6w +:߼q"wuT!J-ٯKWl85&gM$M&)$%oفMGo‡zRUF_GXgjE5 mIJj|[<^H t$7ݱz2 -8(&'tbZ~I*a*`Sy;6 =&!F6U}7:bM(Z6XaȆ6 G0pI<|vtI?#W~Dl{Tˏ2R,ͧ XBw"03k<6(ܳt{ݔ|=ֶo;½"M6{A+"7MV;Jԥ/V'~U )n`SBjzкEMrL23 `2fpՎ>&&*=>Q/{϶ !!DXX9teS꠼eH<Է(\2~A2 5X^ QdCb$Xw>po4L ޳SΥ0ǸAB"A7?gϷk-Uvvg"$ۯOzu[a`W9C *G>aǏdzlxffNU;Ms-DRBP=sƼo__YCk;{ t^!r&o{h|^>0o-hm})%͢9jb>{lhK+Mc SLAk2;NƙbGZO85vwg,C9\lPKGiܭdzQӝ #=9Jt6 tGR)pܸ[DI߀Ʈwt=A~ȝe} k'׼gMaWuB\%> 䶽 0E7B}C7Tk<:6ph唞K`5}uS|wgWԬ N{ _fRV\jBԅDFLCZF6< ^d}^γl͎ (# QkO=봣92:r z02:~esh/LǝN*]R۴]Jai2y7zzzwQ??S~r CRim2pǾcU9yԊoY;'S~-b㪖wS0.QS8`B-O+$7jK^qźҴ)rC p*v`xda={/]t'oKvp8w1Yӵ5al[ s.wwd9i?h[wnkJbȧEJ{ s3AR@iu]:u U]ȓ)J~ϓ7%y@\5墛+,6-&?Ãt7X8Gśsqkj[%ރkřx7ܔ>zte3xCr}pUts,J\pfວop,jhc E7K@N`ag_CI -`};N:}ڽt57h6]qI0m=;/m5&L]xx,Yi"#&.=v؎nLxЀ;|>.o*OcfVL.C} KwfP*BmȚl):vAc2⾦uɜb=+J԰M>Ta+-|_1Zw%+QT]y*|fB',&iy|7ZC,nT~tրϖѓ{bz2l q={%mh t^eVa;BW6ݤv_S:Zh1V/GEs˛Wp r5nF%>b-R}rܮ/M77ƴMĸesAZƒLxvbo(2O"9 6sT&4,\{כ[NgfN-^PձG8ŋ~qha\W p^'O44޹[I>m]hn=WZ9l66j:M:<u*o";a >jPWqD聹Fq.TSa 7N,*&-A۾ Oz_ԽDuJAkEGle*pSpOU-?d5VCG+]I=6x0f[3;c"0>?^R1يgtdk`ӛЯtni_jL&SqO0O}ӅpzXO<+ 'Y$N9]NŊ864S -eّdҽ@ug'5[AF~3 ֑]>'N jE4gVn> m,v%gZvЄI_-ы*4N]UF:ѹ 6]Ȯ7~UX_kK,4q*YdXZD9xsX 7ŋ Ip<4iwx*D xA߲ͺɈ!^tӾ9Nō7 ¶alHT,3H 8S;k^7lS w*6T AOT BtcoДOqMSaAc~=֭2 B$?.ڴ5=VO>Ń~SqXWI$i'-m֩k_ADXf^ښ]Q[>)Fm[z*f1pV'Ard+o{JGPNFCE"يs{n8X}B74ӡۏ‡A~ Ơ!a;BxAN`aRccNbї`tpySX80J_zU6Fp_aSc4$ zC--O?kZ:{Z1{`+iT&Z[z~yZ$?&<oKּ'q6[U.0Sf8iv\䵄QWTG'F37Qj5Ƚά1T.>I[:"p%db'WjAޯhe1*o'+_ۏ&ZRadPőY'v^ 'Ğ+$?) ^3ni=RׯW,xR,$A~ׯ8yӒOoh,[tjw g~ϺJlRC}) .Lop횥ӌeI/5Kj}w"8"6=fU=Yt_;!~vHFS{rTAw^swۜK"/[ySB3Y}UJ}6'7P 1u_GЄ;K%Cۣq|LS?; <;}ت з:|yJ\91ƗG>'IUfb6?`aJ?~ڸήV;g+֊_q^'ɤCeH'D d7᳞Nʘ΃pÐ*PZ;tħF\ƞ B)j6/0 ҆@4 ރdձyS[O [nrvȜY Vdd}-ڞ/72];YDOd09h/NV .QɺϰY 6c0W损@^%++so?́ys?݌fA0`V|Jڙ_v:,Лdl@ή<|Vzpv朦 )Tˑ<͝c,(]icSZS5wŹ-~2nD{W=@Mbʻ)weu pg%9 CfC{&St۟l0zO~ ~ߧlGʫۭe=2 |Cd>b  fp愳*1 xw q*c4;6`I8V/v~Bx/Of9"5wJRh,e&yS 4O/As̥ K-.@ʬ͋AZiW^eds/@kQ؋Ĉ^__ܙAfqsW<ߜY= -E]T]ۓ+(*[Q+;BTvcRtë('`}j->&^ =^N?b_)bJ37x+pE!-g.⩨PiUvMNfpta\SBn_ZcDkø_l(fD`s'덒"i aru "[{( f0so;$d _H4 D#w4ŨJ{yѹ[j"H VK*ȯ+c\z '2ԗH2b#S;p;G4x%i`nzOQ]bV[vȰ0(.y-./O$=6쓋sFv=涤6{u}Mc+nKuNrAM ]E3D2nF5/Dp-ĥ/v}&| ,&g, mq-5,I&G?|6,Fn:UKKvXfCT/[W hTAe\5֋K4fދIFߋ!Y{?~I o02EQ;B@tT*>E<ROs p/E7+{j%`<*A*eN^kOTI>k^ٱ~v!V-go 0SvD`I^c.IF; gR%PgO9²]CGQ_Ƨ.{S_gB)䡈ν@0A5͎0p}gDlKv ța׹I]7)1RJ/4g_ANw9 p)~Y о"e}Bs+o]@">m.䶝72.=ZZͰgqP2Q9*T䮍M-OXm(3ƭo L؋ btg%b6&,@6Qqe=쓄0R6ƆfmR0Hq@M!X??F^ht7)K8a׼3lOOLAtn2y7k7rBRGG.[8c%~ ޸-;I:!cGz^hbCmv'"Ywۿr9f;/<z#rM$ivK@OFN7-7 W8BL{N y^ ;X" gHbh\4kR}[[M(ԗ$ 0<V72鿧l4N2޹Pu%,Շ5@A_/ZiK?sq=F'?4::D$iϸ|Ӳ0a\A{Ա d䂰A]!k.%Y >W{(;Nbq: `|㭏fעGW}fNngp;H N ,jTg뫠[U`A_cZ~MiC5R*wEX(JBlSlZpMNgk'[* wϚ^Vs_^1 3vAvMtEЉҜ)SKDOCc\z@aޗDnւ*k= ndbaqJZp#7} a/#P8a-6xߜuDډݓMʈCw8ۍm:r v醞 7ߒ"sG.O0c7 5+~GuTT/Q07߂Jw"uPza+"$'hV$ǰ &MQ}C`D'&Jݢf/!M:Np|gy TRPG{Ӽ]cOt/Rۘ&|H&i_ wU 7weٶZ˙ŢZ 2u297Mh^\̖~T͖%W÷>tci?CNo#>"g rAPLgp%\R釯Zti4aQ2= :\?RhƩ]JP0*G>-(Iݯ#2)>qcýFHuk} OYHM0*罯q9Ȱimi y!E}LX6feEa1Ch+_|sAG<ݓ,SE]T#kfd*+8" OKz(=<㑊|„ϣyMCIQY%&ٸC75ؽGL&GҴNhߚ- = t*L>7!nځj3FAZTOZf%В$~ ]zz%N Cc{'y]xy/[czKbDMpnos'ttBldIX8Kmu[q3$<ͧ(;F!S Q'ͽhk5ꂜ|^i% n <,>> cLv5tĉ9 . B<Vj31qD yRdOa= 2Ay|Pԇ=~eC! 7xqvHeb +V!a.]$=ߺoĸW=}>|7G\c`7LƎ{jJt0)]7<5uK}jԧyAy*#Vȕ%Z(5AEH'-eX7TF17_|TdZٽg5~ѭKG% ;גY#b#P^ ~i%G=I[J />s$ȍAHpc|Xx"sbP_ybnbgYX^ߌ8#!mO̼`)pۥv8ixnޕQxײ>xX8K/\ XԾ`Fe ݫRaU&<7se'kru $Q0 oF!c'>HF>wnDәfzay\4[TFh8Bު:޷牖[&T<?v¹Eo { nftiF1JzkS0:^oZ]=нUU<@xG8bǽw]R@N\̻/d7}v&** X2={ۆ'BuDwk,mm0ʂ4 Io見غM`tQ%'O'}{u:RkDJ @7h,]v73ӵI}u1D6#t'+shiЅNE|1i0 Y֩ WzS `ݦP:pw3?ւ%ڥ!7öt-njD0-9Z-vOW)s.-/⋑۶7.o ; :]41jLͳB? kgWkEXB29؞LJ:CwΥ&h_#kOz(.7lW&]YMlh6'q۸E=_Y`_ԗ3؊r ]D1vԥph k}]ǭ{M::gOV'D떍lSaa{=c[3o$XLжr12~*}HuSLq&̈; b&Ù!ҝ镗Fi$L½1YvO?4KZ }OR#2N@W!8f #:F9W MA{'=~tǙ)d\ Gܘ4v!v}cnFMM2<|#<J[VyytA7.]Ne{O"(n$V9dލBCmQ]9jTsr" 7.*GRXXC?$,]kܥgaTOZ~J۾ V1 XV{KF&{o"8".c6,oy*jBPKyōw= "))q;ց>EbuZMdya NYֿI7;l.QłGQ ݯ[_n3h|Bz,f14[Z@@wtp_J+X}[\nT|[D=2h5'~kL^e#T5T?L0 > ͼfϱtR9`ۚyĬӲS:ɤ72({=>(ni<'VgG8ez^+kA'JneσP(9-D3g-'ۭ '˥QSv>#2s. 865ini :4:ߗEhk >F?CB%٣7֗?kS"Azr fGUP%>e% <ŴanxkvxԪӹA _ `6Pw~ )/3nGȒ3(% <|pH(ޒVg> :1f .unT1wOE[:3aO+ Go,}E8'0/|* 8%N" ed(N[#/{&6&7{1_&QwIWc-ˬc0͝s5G;05bֽzrE݃sF^ OW]xT6! oRtg d|Ɛs{[o;~264aԫ h5.uJ#vMZ* 7'/>W xw2AFo6j$y'4ͫc^V,TIjVqnSvH:w>y?Xt.0 nV91);MGTI{X@D)w#J*gU_zq}.ᑎy6l/)t]q!8ʡbA٭E!N KX0S(Y֬=sT/nuTh#;vex]8tbpep}ؕ;V};2~]-c 7p4@\4)>^t HvFX*~^e\3(ޔ5æ#6xtv:*P!ŋ'`pKЃh: Hc7lkrc2nv)gnڥF9LN{-?Sz.og4Z{pOJrG97g2haO(ndz[P)`ƞ{% L6g{=nfnvBj╸M'.B6q@l[-RIG轺9/[2uOSIN0B >X_Z`ְ WBv~D. WɈ/_ 9+( ԷYR>_60inA f=iQ5͘[҅$ܱ{E64'[tf t$^Xt{qfhN3diC."Lq5`Xn!yd5܀Io1x5qȓ(^ķ!p.SڥljeAy?Sc^qfDpz`'o}3Ɉ;gMw K@!}3ʩ)6JcOC;.)+iGAU=xɸirr;z[?# OhGSόxwe7qg~[#},^K}t!Bo͇PHߏ:Fٚ>V߄i>K s# dE93p7Nc7X{n}} -H2)4c{}I ϭqMmvHpC>ec /# PnNxl]ht06]t=l: x1j|i$^Դ:<_~H>fuZ b,Z9zjyr|tӚZ< BRsa}U^)nnYZDo8f762gCh;m?|M$yv_swmh>OLN ֭_tlyzZCyŜ%}L >\(Sm]m!`}>3bmzQ8w˜sv1Qړ$ÿ2ђdVOzzvPy|f#6 [Apf]lh}Re.Z{N.~h22nA<^ BBL?1߷i%{M.&oEDeY'V􏾱+ƒ;i} z^[7P6cLXbM窗$#& ӱEVb/{oRne0X-iyOTʽdsݭz^i+J[H1ɺY2m]t(^>N:UOP=;FN>PCO|x eh܎Ս JۭSNŊaޛXNG<'߷t;RTMkGdb 9wS%_fN=&)ȜCRYS|GBW!%.>P'ݱÁS?v9Ż1)F#~;f~g_4$Qz΋ft`aB号([&<̺ XqVϹ%?SFnޘ }Uڤ2p!HԕTGr&nNM``~Oәx^Я |A_6ycve֦p)EwDZaDXs/ztPƢBϨQݥBEgkQ4Opr,\L@i'@ mU=vx1q wOg;,owϥ\ebP-1zސB' *;OMJ1!FIJyi|AV +bc 5cүNU ʼ} -/4|ؾl=8s.͞6qn@ .|wM}1Tӥ>ǜm29\:\jt1[1m&8߽,r $~@:'Gmk$o Dž+Ɏ N.XL'k[Uj_(}lea (^ڀ$*Ӭp͹ZJ΂HSzxϞ'G=e|\g=*7u{rP0遭{$-J>&qBD]uaz֬QM.Ge dTK|1/K}~1TtdXթ6#q)}5J&,?ۼZ? ܹf<2OpyQzHn5~wjzH3 eA}G EWOC7 ah¯v8~qj'"|>=iN] z>Xs IcS U Dӝx4 l709?лzA=I~ʩb'SVI[ #2҅3K1ˌnAr$p$SPOt{>Y7k,} J<"7Ont$ 7YFi?GWfZQuک울7!_靴ӑ܊?865:?v {ߖ {ӹУY˾{pnc 2=, cI\ 4^. Via8b/N:SޟX8/6AyZ/LPXe0.6X?A~:t}MB 'r ӣP/ =r6`.B)7svk!>Nŭ8ƾzx.3 rRңɕSH >EOŜ׈I92=P}77o OGyj|q*~D 4{^2T+lfGv/5/>&BdI͝CNs˩h iW _ ਛ4wdeXQ݇1 S>\g(=o7.5dއExw=`~dZ+;Hb6"GMv sF5 d)>ݩ/[xykٓqkL;b7W{4='FoBiQ^Ny}@JmEi;`눈0yhGjW ۻSVgr<yйlfѳ*f]d#p̓.8ګ*iѴl+&cȝmHM7'z[3BZjb갥6*S2=XoҢLMYb'{XWkp*tjLKKeL;ղ-ԅ+֓Q wu3^+Ry`c}tAX,̍Tu25XFeڗ !ϲ "CG4{`꩓cA} P"e؇[odquH7| cjx#u{Q˺.|K\ )#鞶qRfxr˃/rZY7E=}=M [CECi==Ak*#O̧K\R!+*jO<1Ͽu zi'̔KM(,:$M@Ҽ#ʴȁI 5\B6lSfRY7v&uR1Pބk#y=q3QYx2$}Ĺ3XFhre,{:s )WƒJrZY8g6(n!kF/cSq&18lg7bs[+C=Hs/aPA@ʙEop|*Dvck| 71d07# %5NS&0;aUnyۛQkbb~I]uyvW9ӕNePd7gւF?4{ PAX{PhQDGvv+T>uU}XkZaeGTړ> wtsN󍢸=#39* q~R}jG w{tޅ'6ᚔ6-f b=};e};DN2yX1@0;xm&^w%/bcG㼋-e\ʲRмxpkˬ^q 1?_+Gr̿'5L&HF|>(|YBڍ-4c;:sDGma/O7gÑ۶i#g pNo bጂ›thNo,狐 inar?^6Jޅrۀ#iyvF؝UspDlܐwK6mn\sNU,ލ(ԲCv{#td/"?-e,-ϲ37×( ɝHZMLK~f]h]8irG82mvRO`!eX8%oL&P)Dq{GvUɨ#>ɐJh]>{ف}){ |pPS7{4|#_փ~:CF =6{؏PsTnNDQ?]JJCqËgSPo\[ҏQHOn6&Gec)FzqH%N^2}ʸdC ? w}w:>P]\qs]JY߳qld3gO=O? S I@2^PrWb =ȺK@{:gi5 g+F7V.;tJ5kt'<Uz}~,x>iom>ng vCn9)4>W[o=AHZJ| uWYVv r"-O rچMB/>}] Ez/-n5 oV}f<Ѳ'LfqiJ=&=D;WPlGx~ 49C _+=ުO#Xi%)8ekN*Vz$j5Of>uCѩѯ` $B}.@S^[8xYNM%3ϳ~ix2p 3_{̭[R~3=JF:`n"Lpt#/!Cq 9 C/˩ z49 ["\9'=F33I(YU'i~޲~4^8 bI|ǥZnVy\}~ZBɣ'ȋ1!Hms z;yVߨ1` @{ aC!aB!LzSV iĢ ib6ޡ&̽_u -O_A-z 7aJi D8vL^+XB=*|Wx$SNMH”4M^m2b%f Я0ϩ L*#oЧκQf#!P'7a$ᆗw+6\VYog8z*ה“J0 Z,ڪ5hyIڳ%JI{:P0 AtQ<6{No+(c𢏈(_4* {0EgȧND#'~(; {GejyY:$ݞKk?> d%d[k9 V]3 [O{~Yobgd涗-_/yӛzFi;tmL  Q(a/b+ ZG^C02`JU=v{^s|›@ߔwW|O\* ǒ~BeW/=U{g0G' H(FN'Z^b^bKiO;hli g~PIW=õ!IDf^ӝ~i ]U޳OHGL${?cɡaS9]lpNש-6σR2oQ޵ǀ{'zޑqP8QCZ`ʫ޿B{dj2%J6xil*qJdq]Xe|Bʹ W,;ʜܻfhav9=Qm^e,rƮ5I+㉇ i)9Fn9 =Ǭ]7j>uVnjME'C[$tE7{0Q-G$ p>ެvsގwq! 3&8%zaE5}P+~oݔ :&)g/:QP|؀'WuO)%hi<..yWɀ2IBoA ޖƇ^D[^:uF爲ͻ_.X%/+!o Jo]Rs8 ʙ7x=xp'Ӟu}}W7,9=_huZtZ 0UÃ܈0*ZOt{e9h]')7ϋK)RTvR \jsM}Isf G:+J/m}0'5m͆{ \Ɔ4ĊOl4o67q752(R|6g5n!|5=EF$Q+mCi\`)M}}4Z6TBpq}KZK$*ՎVn SzDz]Ec@Ә~|qjz!L;ۂύ EsGkжlөt]H@`y%Ԛb%Vm+/N!8ei2KO-|0ldO=JK'h:[ԁʗ0l2/3u~ۇ}6 NpE9e3[y[&Ci(j}ЦL>}M98Hd3_:k1{Ppt`ZI}ơM0ij]R6>6!od6nuOGe䖁/(Q6}_ؿ/H{}кYYHqpy)Q}ݵ=B2ӏ酉| 6'c򸑜u{wsy|d*mQ|6Mzڸ`Nțs6N$ bk?ff7Y]5Av[C!AO=nqBoh4΋B{X;+` t5J2(CS\]m֭+*zwg~r*2o?k_Su> htգ=U[Fҩ'o報6r ?d-e_.yO2NYk} wV.Q4:KsF4Q5)auX|5^*Ae;0yR`?J|vlYd }Jnfî}4Wm ^uP3ns6CtРȾq Xώ/GXBaߍXiHwB.6 .|"ȏQvxe=ɴOgi3+^r6[7wW[| DH$_lExJMoّa})rVY|؋f.&O35C?MCo\?Xȟ`yeSX}^2'? |lr܊͜:db?|iepKvw>-aGO#Mt`u똰E׆|p,I _ F޳YŹ=$@ש\??k,.v oؗrxKu qx3*MDd#58t%dXzi~adY+9ΡwFwԓ;>4Y^Uc7Q,8r7R0b6(oEӉ?ܺ"l{ W#lOpJGvweVƥcKGoo`ȕ#s*]akl DU7]?;߸wsqŐFZ6h^$6AHk@O|`^;y`:a}đ5ވo aplƇO(nS7.]Bs#\'y*)km%wifR<O<:Ny9 mu[%:X.l^B8p3W0OU9Fj#}: An۷5Z4ҝ{~]6SoaIbr4nYKt:60i~ ZIukEoߚN@NCo )n:K!IR&Nŭ4h=wj/=!|ykgU-zDy.C#)~}fjWC2W|y*-/@(I`[V+F{! sN7,}L%LTh~~3ziV4-TՋ͠7]DalooP▸73]I ;H;c'88y>:A5Ę1t%ōQ"v3 &|  2[#6zM3M2@}K[Hni<%[$ۚ;H*'Fx*b[ YBY穘[~ fBj c/oCX1~AyTW-~ܗx*,DZӈ,iL5'N| <AXq_=2VTWaͧx#@9YcJ#zT圚:hǛ^LTV`Arc̯Tx*Z/nP>s|[悋E̍d ƼLrG8_9 ;HZ/yBi_/2"Qby^J_YO|->A95\ACՍƓMƊ)&a ߯Oϸ\$0o$_G!/c TyK}kAq*͹F3s&1#%RX8Pv߉ٸjohh)+7N4-enN DDlIfdo>ž oAx#mFgBagVj9;aVc&~h0ݖΙ7ģҾ>A ڣ[=Hc4f<&}$~y.z [3?Sw"d|4$c$ch4J{*Pg} ͤqgŒÁP)^=J$.ٽ1` ͝Y)_#rFFԎO}v yXf !DkfD1T74:7A(>gk4SP k UXt,4~OK{Xҋd~[bBƵRcN|zBkN?P ܻȕ7r&4ӆ='7;m`ow:n8y,&_ǬMm/Y|{pi"R9 Isxvm_g `<*V8!Óq'l/WE؜oҩ B et) r} Oܶ"Ncd>-O۠\2xƱs0l(3[WZ` CõB3gL60oH齉:h//q s]wz3{YԣNhĺӀnl~؏ÉWלK>f:wh'{&>?·j;pv4]Bǻ|-`|ky0sKm:WJ҉?Rr?={uMƪ^i]6WM 7c4i۸A>4@h3657_B8ui ӷ1C\&bJ)3. I"Y&2™ nXbp;l왡 SLnD8SLiz_I' AYF\eBh>x k`b4xb.{Vޕ#|HGԫsqW"IwO4} y<_7.t@\#Eh.ma~|o]8B6R7ϯ:K:oixPeuFml.{;Sq;Ezy6!3 ~M-Qo :>87l"ob=oFQy*ZFoe3Qd{¬ Fa([ݻu2%^)b<;UTO1-PY<s͘9S0y$Ųo3V̕Oub1nL9/ s#e%PIGwj2w;P43reJ<%wDcFx~.>K86Eq_@ kKܞ}9t^k1,I(aU-^}e'j'zbyicm^駶J[Pf.B8 Sr|>o/yE8rSrc 8򈸑؝s[*QU7iBo>94J "$3݀&dXI_͖lƹv WϟRk0@-u!؍ fBeaezjEeP޲4njʵ0&~S]ؓVT PĹ,'՟pq?PqUTA.gZz=*Nc]1{2u @V:',#],NpwENO-?W@4odnqo}l4OgŤ{},>]N&O Qʫ#NC"4 +9X{pEWIA TUNX٘dOdcY}l}{p EX;I(Q~sCp6L%vgN>:Q$jM=bt:tIp.ś,EyX:^ 7>GM<4"; "!*LMmX{o ]9_f&-?m*ˉp-#g1qi<20IZ֠5:gDCcO2g%\_yrI>&&'F[t[ $B nN1­M'wjΤWVp *|cV<}M'ጳQEݜ@75oLKu:a6"q3eM,]8{/03Fdu̲mF獃w%̅wZ"?[:eZUifMf-bm}\8~Q}.x[J=%25N ckrv>ot `W&EGr־(2 ȑR3|ՂsSBݯm0όYXs5d!Ҥ܎NCxI|-ww-(MNrwr эUO"3awFxXѼxF56D>n~pVLnm|udqn2)H%}X/Cx$[d 3ďr ٰ| Yyc~]~>Yw5 b MZ^ _{ߴ,a0!&bMPQ.<[nd|`*[4ԃs;gs]I,ABC7^Z|X܊xn t#Ҵ$7M%E^ NMF >B-#.ds;_?@XsU(%0SO*%3cJa 2ً 340CJ$VX2ǩ .<ʫ&DH"_Ѓmԧ yմJYu2 }0f] 地F;qݥtٴt˄yXȿ|CK 7:Gvg^q}F0xN)T-_t >{OAhֹKmA Es&.i:l@wkGGD&򶑗\w#eѓa0u})}ǀ]=cOq,J@6'#K|?E>woVu뜆KM`JqR{V8$.*>\.Q62eɤeei<<4P $O`^sgڢyx-`(?xND{ @z r.|ql|r<6ZߣG-j=gtDn#qX; T@ aF՞^ fgRs2#cƙLkӗٷOiNP<$r#8WlޔCL2PB#IȚO ->B*HQQKk>z8|xV&p9u{b8p]Vn$Zm{p n7۞txDeK'q3Ƌd1v}A> `y (įQ;}"!Q}.>^!3z~XGhg! 셒s ʭ`5Z"_8ɚmD8߶5|ĥ5;ƒ(f#4>؟{0 o?G2%&פqe[Q&p+e9j6A  so)mFTI_joded\(׈\v3]#oPcOc)VRE7;6pAp{8 jPJS3v=7PLypD+e7f>[2>!o~} 5F(pS$&>uwȰ@ Gxۻc7  } 45aDo2G;Z|ЧlζY NYC[_<6|7zUB>~勾?xaFu [C9!;ȜLrFڙJ*Cl!Ҟᡇ7KIJl˾d%fp$,O97981m8zٶnDjKxELx1P }b Vx[V :YM+]E.h<{_ac7Pc"cfKzR-=΄~D{>K/*yUueL؅_:<^.w2ue쓒f꙲3 w_7| dGꅼ H9UV0swlGvb ?CwdgN; nrR8>z\v@;ud6%Z~EcJۖm/_Cwy`..P<ٟ]1Ж( 4LpZ{W_>M}W+y;V?^\2&_\W<{wD,VajA}7ey}35רHYlxBXS4޳J}Pl7{TAk/|i%ڣ+8Qx 9[j4T.i6Jov˒[) Ds!,*n}oqs]T:XނQH94}+BəQنU\O޽Ix.S&aI*&6) AtqDӷxAW|[-6;^H aj-{U_OeiP&n Oˑ9Szܳz˒ggQ##_ Ǒnns% Dmt_BIg4_haEʜaj_hz +BPIа{/=2N `۠v5B}kcaA\OFa֌UL#"Y@|9ÔLlFDPGr1sg A/-D_א2 33%%D#I+%܎{vZ56;ы `L'[TXS#k~랠h_/}ˎupzeP|e._3G ٣6FoK-ߑ{TSgq¨;ѡnO;BZy*nJ0>rCPHurx t:JZ\ O&^OQ"EhtUI ]Ba-BMGvCP&wY\dڦj/a+w׈aE2," sp \"[;N8S޻Q6 [ɬVXC@f/(\9pY~8"s4k/ÊE@YZ'Y#_k~0 ׉m*is uU髯cCM;Z/x=PJv/\vo/!z@~>o~t o;xI|7a4˼U*1㾊tfАۦ `:F)ɭ r8DB현^>{ FbY۟Fݫt(sX3V m+'4N5IjXd ]M !_+yp AnhYSNe^s7WA֌.{4u2R=Ezywho#mVH,W,ԟ{uz^4(-MJqOr]ummcӱ;ִESn 4'7?r/Ի͚F&>R.׻6cHD(U֋+- v{hR/c37r+jdg,s ;dž ~AF]c5퀮)4Y6aovaE,k°}^|ۆ˒.[U< *==l:Vr4)2ЦͷHH*=nb7AVhta8,1jj~dxO mRJʕF7O[DoPL(f PFnsc^%iކe7}k4 G=1y(yp|$3}q&h&E/fւ[Vvo.Aǧϸәrї 7zÂIO[+ KaQc }G%{m={@Kau d<*;ԙ4_q:Byn|2in w )Y ׆GZ힊'RosY ˏ:ȭ rxOX[Y&gi˺beag5aw^,Zd0@T>ܫzô׻4bܠ: m,'%p͎XR&U ~(ڏx|?-J-;"OeˆAɑXQyf dFo$Ebc8i8RG}j}Th5k\xҔimoׯ0)`G4N/|p/1X2a ՙn8+TcaX i`O= =1 Abc)3~HygT,ݘtQmn1Aԯat\dη*Lg4Za, !vdXźOpuU\?g9hMnB6BUoMO\~F@ h^ vj?+au 4bo=K"t̘xpl`a$r*ܼ _mj:TY<[@s<|KɊ;";=Z߉^n9zo,9MGӔSb'x}Z-t/]t&pS=[[3@s2ƭt %?bSνш u~A r*r6Lɼ5@K-_K`#>7E~6FN,Y-tQFm \p>2 yMKpx*<{ofu;EcHYˊ3|X2G:ͯftЮg|xmT'ƹ=H2n1j3}iG. GiT"TPke뮑lPm+bGb]1V E1yhF?b.csc ! )Xa mpSwRKUL2n -JEмêw& ٩/nX+2bE2V4J3L:>͞dOhi擦.?%'7V+,T^^!b(Aawu4zd^lH瞾3~jVOokm5)*#6iT4v:&GI #y =\R 3>f?"L74UnASqMTLgQwݩaэ٦V)'8YbhD~P>ʟ㼸zyqk;2=/ u4{rOLfJm.$`65}W&+/(*0*Z_Ҽh&!Kb0uaR!>/-)7^A+t6-F [8VtTJ[.l*T} g`>IGf'b8"QNf/!KyMLߥ86{xXѵj䬣ꨎ 2 [{{6ENZ}(3%=ͷ;H&g'QAa[՘S,iKGNEo{IwhZ4( wtnb1_~&Pߌw"E|&g̴uµƧNF5_MNIp@/w*zNwπQ&Ԋu HV9k4]9[C9lfI K#q _<|ty*9ۋ/v MȡʪC"dq*/W{zNr_c.Hg~[gH.d_@j~lA>ocv}@{+i[g>PN̡O hp˨z|kثnn1+Ƅ&,=ȁ}ưǝyYBmT~oejrh&Gη?yIJ!bZJ->y9vmu21Oa h(s,✵ _Sft7nP̍P5ˆL~:~,p[* Ϭu7 8\'8z<hȜ{n3[9sQK3}*'c- ØgFf! 5rǍV å O{;it8'S^4OG8[oJJ.~(/ ճ/|c{sMQGaX'i,/La{M=5ΚF`dy_f687GuiȚ5dzUCܙB4ؒO^$)['ntӷ51pMb]5* I68*1WS1tƊ%4O1I jg20&'F/V/,2ћM2B)~X]鞐P6}8S#:{#}{Z5n:;4D?OǤaYZൕrkQ3"hH&S|E!]KwRm^&kW1p*Z 4OKS9(H%1pCpyR?_};Ha  ~ĥaB2Oe4l\2DY$a[ZmS:ޡ>Nce:%f>Y7^T@y w[ bX~lY V[a)ӧhżR)o!p~\ύ9)nm~:A^|?={(ۢ-+C pS/v 2A)~WN7G Zosb}* O ^;7.Dt_$?ֽKQ9]Q$:fjՉ KWLDL߅LlZ4$c_rRDhSƸ͸qe;)1/lРDKsrzL}@Uukd/Vs"rN MHN:QKv8܆%)UpHRnrNܜu{ݵA-}@uri @~yJ᭖S{3W߻J fQ^k!~7R+/Lڃ1:#zFzBp;m{>HMDvV:kAp*|s._tR̲ѹ\ .7h"D_@r∸f&J9o?'~Y^T O% 7pIN}i k &/ ͆ F-GmsU]9Yx;py/w=bӱ%y-PY$K5_p(`NKD(CbKӴZ}hܘT+6\0>#6yqW^.; pK?m+o[̫0MUXrXML#eW16(mci(%'rR ֮[DPr^l؛NEQ7sړ]ůLɖSLDŽeѫ|;hy|BTVan%Q%vv nM7GAZTί+8w =xf<\8Z›js='j|3:a4tnX)fGU1{>ZGU}ruc,wP|3'׬rNӗl;-‚~΅Zs5 ZtbfNx~T)ʮTEb#½vz2~5&թ?)|a|YYJѽ.wQzӉ?*%tQN9O-!d#ge +o/;ܛ~,Dm:7 IAWt'fKN0~_ex\W|q(|/ U+K_SaM ř$+S,PKgC^az,6l䶽.(w#`nMr2.M%=K(JŽ$6 7(ӣA t arpU ;n+Zh;o'@ʝ ]ӅWܥ75OFM(fb?1!ZېyA c'>;ϴg]nx%Ԍ|,p~\1t"_'L?ߐIs K~. W͙#ĹoYnuO9RgQ/ۚ~wI{/M">p6$Gή Լn]FG4B=QQp ^ fg#?oHiEH x;vd)cOomcnJ%&kuzko}F:PC/Ncӭ{DŽ"tYs,A5W<^ +^U+p+۶o ^h{3_'evsZMJ'Q]%QIS6FQ"<S~#QtxڠP3_g&;EzQoc|bmo8<<[[ޗF0 cpYV>|lSa{o|"Aذh[i|aDlwi60w76eh37E؏lb . J]צ1lF'6B8q~3XߛCAS C>M_ lwb=̈]Zm𘋆ɘ㇖Ġp:&k9S Zx}U/޷2 Da⹞4pDn*t&þ[+',oknJ,l@\O)zDI!"{5MS5R[uq (k | ֭?c3`[B"ٻDfμ]|?53K.ۘRBwE. k}5BȄp.pؾ uE5N_a ɼ*+CEΞTJl(~jX=1" :4 HeVOTd垿Wpbgՠr#5Ҩ71z?8"* kzR 5 O/NHdAXe(*IG6t|S [cWh:ը)Z"dK Uܷmd΍Ѹ k(qL?Zlm܃"y3づ[:*lָ[ٹuUBa}M¼?WT$ʩ/<jh~Z/vFoW2uGg?XZTV[`%?3o20P{*n$?lX3џom$]cmfp[4@/Ծ&l4 PܢmJj`)zB%vnmٮxhLӳIѣ68vnT)Zo4VK'6p?JI\\._{,b{^Iϻ-[ ׯ1=a*}=G~ɑ$_x13/. H[F|웿Sna*JPna/^Oev蠆Ngh·%,to.p+B;g'xr~|]vJ;QHk*ЍzR "FדhtG .pNlh$Fw4Nݠ} <)el$^梨\?yPcRaFXI]?4C}ѽ*46h+=Ԁ;oXVShG?fנ?H^[1N_1-W{~ng{v86%T2&=OŪ2ל4yrk}+pZkuZWY`gnd;_ZtF_tSB_ Kx%s5ZG5L÷aU~Pgc. &F9e7?`j-wݝ[tV74\ &4zd/p9͆H( B^ꈼa9c F ӎ շ~I+a☪8 ?Jc?2nnѯ=tv2%gS9XGh;1",luʬvmX/$gѰd(& 躥yL"8hatM=V; 6znOuijטunԻ${nb |@F^]3y*4F3#Mb G`2~ E88eٿ;8kOfwi.Kl!&4[^Փ~ޥL?OWP od@UѿtVv0?u@|Il %x+;p&mT'X@8sא#P v,a=g: ?>cIN􍁢 |Mј!E[!d9B K$7.i2wV5P֘=JAO,s|b/9UAvN祻'x[VdQe8֢uW=۝Ί~ /i >e0|اq荃A)<2*4cԔEcM`aZ}`Vw:|=G- Y!Ѓ}:V<}ͱ470Ȅ?KD9 mx듾7Z8XD",WLC"3;IiCM%G:_z1؋8o wTʒ E8'\IݾW}cS&Sd5,7&}vU2i`|ѽ/"/7ҙ:dvwB%-|9,gکI^I \94nmk:['c ZbP)TJztt?1jZ,1mAYi(ƜVvB wZ({F V)~Im1V;Ck`\ɑ~K+4Q$2#n:!>@nQZjЫ>C ],kF7urxl}_3es$'%WLdP),}L{6nRDff,e;Q #Dɥٹh~R)s 5g1;$ٟ*s _b[8Qj{Xy#vS"Lͻfrᇧ)2JGiRs!s\9Til0\ ijQs>1+| : _.Hb }ŗɯ#r߸?߿ ` .ÃS|X1XhXqZR1VL `&0N| 2tc.愧,}&ܧof\j^q qw)' l:(QrT!I½M&ai7U$c]s)긪}8͹WL:v#ȒSq#rnP9o3~%Ɵ99u+_^F(Hd~8J(Wuf܂]=Lov]0Byg֍=`Z 2w⽳r*|H|Ja z_ ApÔf r5mpȌq7*99͟Q~*'fi>y~(?mU4 .vl*h7,66er},w88"dq5bꫪ=]0YSq+gKvIHSOPJͽͣ(ck5uJ^т< "v,\By<lc G!6ǚy(o4X\ --{؝[Q>m9ToL CGߜ_Wnfm +Jⶵp5Tώ#oCs.vnz8}\Q\F+ѸYU6lAMv[trk]+{[dUj iI"PݚrY-],y#gBe8RťҒ0 .հnX#Jǡ:щkK}zfوsVZy?<:[@\ &>=m[K+AVK>(ikݎt!j&\9cX գ}g8|#6]i|{G7eȇEuOҲY~آۗ)7Ya2N/P 9TQ|(T`y#2tWis(-Vƅ{}?*V?p,;2PnoUr0LVt^5z͆~xpM@>>w&Rޞ<ָy+GA"#AOs ČUsMFqnYnz o 6ZC ]K S_XW,T67i`%F*mn|#'ڍ ~!sMnYM ^G\j`?ݺJx?Qn秳35h֗C+_5-J퓘W\e'Q+$In%<[z:>(JʭJAI޴-d֋/ _t g"y"ET-,j]TK#Y8rFOI5ko&?&KEmM3NqTCn{lk@UAP6-/m,9l.w»ا9]V@pVg륞3ctO97 7P}R`pH& -vC8'HycݛHb݌ M=ÿhQT-[rE(DD.<{'[S-F>:})DD+͆(ʵB2po?\Vh Gɶv{tJVϷJsW^XWWIª˗(n_7 Ƚrit ήahTtAMѹ^'Jܗ]eϾn6sfX[kIG[s0&eirv܍\qv^wx 7n,ppUiްXq2K/dXF٬@ۆNՒJ GEaX=ՄF a⃮B91sס~s&y [<7^Y={Mj'|p- O8>gky||]L@; Iįr>J JCJ\y^[ҏ[j37(wY] >5t/f )fخZNgpdҥd}|oW@;}3Ȳ(rK{T|[G*&?kِ8D~А,zyF9-OO<EZͼF%V&< m(t3XJU=4?#rRNƇJ^s\w\DWPc5^}Z7Zݫ#LrsXŹ6cW֑4ߩoX:Qp jqW9֐řfvh %&^=ipx8Q,wX"ި'N& }ړZ[r[C<">J֣īIaǤx[?e#%V_$|Rp {7=b*kW8@{,kEnR=p a5MOsU_lV.Jqk`)OV4=d ZZ++\zH<EV#&N,9WY8`G䆨Ro3bE6p]m)Heoj #AzwXg>C wzK.z7`Ng4Y9q w^Zݧ<F:It|Q.gWjZAcIoG`ƞ̧0XQ$f-ϣ;"A6 h~gv6J/8M9#N~b#񎕜xY= F,j%~?&Pr%hn=?'M؅wfǾŎlm")}J͵1H49 ?F{sI$n)9{yt RxEJa>r'XAp`b΀(ڇ|@G"u/~N|ٔsvk8W;+~fl~:iͬ2IM͎lsws+Sp^_FI>7@ۃӛo4`:lIf _;Pc_3z d~k<9O ="@$v );o`Aڛ .AԀ;h~/'K9Jb{`da‘4+x76sJohL?Dc`=d׶EU{o큇xsd(`fp6OX? X~o?ZFc tnQf|\/{8' s|新ʹGNBfK[HM>y7[\'ݪ9x1o>`kH}2Eޚ(t6XLk$X-τxUV6Bqy Dސ4n`|wnINEo?U `/ nrR6N;`!aC3zNq֧UXoKdK5)`/K-Jv wU !}>ߣO6vޙ^`+Pw?86rp$a LbS&Wa0%O$Dn:`7Z{ԟov澿 `ǣ>yc7v?@/~kSVL-mAwg;2Ѿ϶<I{H =~}D9)^Z;/[.y N =-Χ&G@]BIZ>>SeҽgiOVQzseOr50)yqr>,΄z9P9HSʩ<›&=[E3)XS/~?rYb>Vhc&|DJVxr +@-?bgУw _pRvCW :)$k g݆V|ӆ2vFw^7[24imұ{ &E]W껚:Ԥ}M"[eApO~>Wab1]Hj(?"r=\[gRJaPU=wsƳglZRyi>>qT|<Ŗ-H^90[ljQ^x~]B%1si"컯nTΔM G϶/]+5%+EL+*~Gd rZD%W31(#"4l>X#u(щ(\i]Oiy*7pը7XPJ"5auV+ =SO;Wd3?m5NGﰞ~C˳nގmfBKi]%05y> "9%pL?rboD s(-eiZ\s{g[bսso}K906N.N}~o,+\pr{b~np%Eͬ_a3{H]Ԉ/J P)>=YIJ&8!9:Ъρ'ײB*j{+лSYc"l3n:n=&Tt49KO z\30<5i:Lד,?ϩ 5rJNkS8 @-m|{{Yfk Hgb\5T#-J""[:%rXKuMLïtmpIݜ .EIC|ʎ):7" n[ :e[K9JW-,+@R6mѣ%Bl:}XshԸ'ކ"8'xcFqKZ4j3m]vCrEKqVZ\48<7M`uԦp<"7~֔ ',"h}[=Y9"B%B޶Np/`ʺ>!j=ޏ%aVTCuSW#(g#wx,kޫHD.̍/[7 *2 Jw@) JzU=Fg]2 Wl&wNjInYN(-#җ.h,ƕ?f)=GI),sT")͌zr-eBA5yc\~“kZl{0 c킱@_0kѸ7Ӑ㶺覆rnW%*0P7VTô}If gOWU=w=HMܑJ:B™f/iEx&4^ui/ۭAAS( Fa-]"jQx?$A w.ScT:uy74^ӰB'jY/{]b(Ï)ø627h<ȷ+H֛/)0~ n~9Ղ_1,.}vMDǻovJqzm?W(nɣw!5t4 ?uN %;4͗ٴ)S\cHXu?Bd7GǦai"Fy{q@]'C :ϜsS(vMvoaIƵTICoq ֧禈b"n!HU;mfzjqw/d΋WŵK-3=[b7M`KwhvD~#/1nu31kف|zyڠ-nZc,[`~^EG{c魶 Wݓ3i$a.{WGdw'af*UV4nktZŚ e6otB qMވ;S!d.JMoZ,Rn(-ot[t6WZ_#[x5ѯȠZ>OvY4i .H6`$p-RP2lzzOp͐x:ڧ z G3D>A60rc|HnIQz¹{y4tb-xk:}(RrʢrHTc(5nb%;{\7F}XK;-nFȩ&)rʲqZDNu?^!ɠVboD7MMkVow1 ۂNA!|mapo-CIb2:Kg9.a)}Wnkԟ%&ҧO'f [pˠySb*t.#%+2/^rQ?O}L3ν /tI"((̼7=D /v']e0>*,!W57RjI|Cvw>S fKHwcVc7="TJ">Q}2Oޜ"f"U1txc.G':SpRpwF>=܊b̲mjsS1GݽLȣeRaTtj< S|Yw\et!t m[Giks-Cܬ3@mR9gwP/=*Mx4ϾSP08tL)Ȇ݈x 6sѳ7U=ڙ_M7}nuQo%։qs͚3>boEӮ8Ku"5ٮܕ' b=4zI^N@^PT(3v-Ui; Wj\|KZ 0Y4693}h?;=&#rX:s9;K8q.z*'8`^B4|пb>i~#q:Uknw߀Y`xɴT߂uaKqډS14e]s<C~ 瘜;筢wVkHTwlūE=w/;ͺ[k.9"nzNq*it?}Ʃ@%ԍĩw*b= E rJb\WNmTi4? WY)lS}3SS]/]iYPrsiJrrX3^C׉@AZ!aN24\6J}rXlĩgOpgi"YCfw)7GJ?PAXaoe ;ذB%?.=F MByq :>218VOkWfW p+NE9c#D1\mt=TrjA/¾=l[üBc r+{E[ƂxWu ^[A[jshn`rM~.[t/ ghsZ@rJ;4EbxA@Ȣ+h.aIN9m!^ ݳmӬdp|+ px?X:j\n ot#ck4_AV:ߺS,|>e{`ƯY6:gKש=_?@ ҸЂϸ/ﺳ\l$B,p@s:{3H_UԲ]=)AQy_CYksRhw՜|RV!ZIVOE:2Gl*ʷا@zܾ-}e@~uRjryA]<-=-7jg3m?!\ac8NԌwms}^H>ne'`J2q [Q,j}'N{)؅ iBj OW4n%⯥$WSvp$_o}w߻<{oer]vN=~VL:/c74Lrh';=4߇.;؁&Ce $]Uk v>px&H AFncO/ rkvR ӓCmq(ԣR"tdq32{F>z>E?Jl^O gSO_/$5#|QBPqi$,߷7{q# IQ GLx *oq\OA̩SLh_RZn=3gZ#|ߒGd1H"4mVΝ[HX{;mYn͂[㷁/ɓp#gv97{͈Tg5#[@["e3:Ƚm,Yyd&qA" W7Rg ^dEPoAБ9Gcg[(/+?Ðd o#rokq'Xz\֊Qؿʁ;/1=N <,e >pODcExkkQ7QW|&QkF1+jfhGC@ˮUk eF$o8oL?n:sgSb\tpd\2]h`&h:]} '--MfǴ-fN=@n+(ס<6@}9e'U`m*ʉ{!7)V¶W0 ~J//{UvٜE*z8k˖ Y~~ s$]aU|UMtƄ2ЗIrғ>[a(RS L{}<k#@BfHL'7dC85w Y$og;ŷґ}邼{;S'@ZzKؓJwG dR@$ͼ9WӘBJDYpx]p{3> WOox uuac%>S' 쵸:kn$h}fV1 5/r7K&sk |3c^%v Ayc)Tx1Bpˇ1}D1rHF,Ya|YZ1PG\/_с?6 1Z :J3x{~d^!߲da^ڵ'os7E*%pd>OH My&I6ACq6%{m$" X]9z$I2}^#{NSU$8;㰌Y7ӵ8W.O0.jܩ tgIP~57jidN -}$cS)b 7T8EN=z"8lpde""QgcO )n\9RXF7o{ g"չ M$^=3NoxӔ*F( -c5-[s콪vNC h:~ӷv6)]QO_`sXUڜ4GC{N_Y3])4ѧ|HkY}skƻflV G76=ڶBngMHdrFJ4*{_Co]K Cx^C-mo6..Q .ﮟ>+ f u:monM?QNYuev,æ~e)KVig.wӝ{lv?X6E;hs76c:(i@8";y/G7$eha5taĤ}ugc&.)g>8z+ڀd+9Y4ɨ5ShoÃ|X#e=6w_A[$dEEjTgQ9Dz\Ip zcca;" ṕ8Q@yӈ ,cO bƤn% l@lڤpY2EeB>d9)MfRI{w*^Ztlе!I߶-X*f-Ƴlqnd]i$EA装bfW!K .}: E[$@-bŶ~1g(< GQŞLiB3挓F& @4ƞPrDH~},.u} u05oqFV#fZ{ҡOr~H0%x ,mz?rٞ.ȓ}7/=d9hΞ뀟 0ʜ~jsiz :2=O޹/%{ԫ._ס gX:Q^"ǡVNE}r%Am H<s҈y$!#6|ڇ&sC:H7蠼|DX.;ʬh7Hz*un:`/K uuxޏhU?н&7P{jw{ ]הmpcsԮӽwH>;uBQ 1д\}M t"L0tqoa yZ9GY JÀan9)N[ɐg{ɻ8_,ᤠ:QT.!P{OOFٙWy١#r։!?[`}P+u:}F) /{Cj~fj+O}FcFrm{tt '_,xcu. l-@ȟsmZo%aJIq:Z7 o hNa ro=@z?Ye[V.- s=]~1S 5F1]OƬ_b1&h/Pr dil㯥1q"#Xh1{"f nI_kAl UBXla %AyO1h.skhFXͻp\x֏з ԊsI*䕐AúJoʍڐSwSHτSR!?~&Q?g7:Jpl<"ncnnT#2+ ;WF;؟l.b1Tw+k)RtN jms0-,:-Oφ;l-ܱ{h<"5؟8ؖFW"y'#';R!xqr4H5<wzފi5ĭh{Z=|-T4oEH2;hOI,!}a]&4Sqx~l}F1.6j(IE熝ߦYҹB4㕽C:PnK_viLé9mܚq:Ք uwS![C8ChAtl!)ɕ_pÞ=Ewiܢ&$-0Tbw ֮#MAT˩AXgϊ$j7_\CݻI.ړT\zԆc6)pl+} ǘW>+'wZ43j̜#hfVך30sA2 lxuÖsBBǭ3t\( PԆ'I2 eFg;g>޸9$Fd :h֩Q'I{wK{*&4Z4*qsr*$<͟sxڷt88SN`g?~Tk]Mt}Ux&E#̣!ck7])MnUciեlu"y.VۭV\TȴlLm Qe1L)BK(*T 4WG9 kGQ$v2ttb-*X{3v7ڄIdylV9ӧ+T7u>խ]4.]1ӬPAk/301~lFG?}zJﶕxG-1l O}H]?Vq\a\GY2CXf|U;EMNjs]SI+L\C&#&nZm-t\is'mŊ^&Ȇ@Lhɴ sYxғO72OgVɕSS(ynMq|Ip:+nT'z=@j(5Tax]ZL4h=TAǧ5r̲8j2doQp4jxy}eۋQy\c~yi ͋)TI t:}J-\hcᒮ5,)هLݧeKAtV+OcMc?Q|~۬T-y >ho$#R Rb,'s|5j`R&7_(DNc&ˉr B Ij> sfDYVm? % Ng`&ޤld /ڕGsF 򓠘Ә {&r,BḓY0 l2]b$o^ӄ d̈g^n8D˂Gb˙:.bBs8UA;4%@{iC3l%]lIK.շa }"!{/ldqOS`%e}'֥sPnRT#h89fS۟ rQd +#B?9}H_w+8x]OU;,=Y8ܕV {S6& nr ]OŴX™5jDOd5K>1`}ƅW,e&f]Kztg>X/΋fb=L9Wpw/XBA0#p1E2Y(r??AW>ilڵkQK*Qo0qHsF|H=7s Xr*n20/)ԘN76VsT`7m2!ĩS$c8<NP%W{ܫ4{&٫K6zaΉ! Y{_@}_A䚇 < +i_dB`tc,I5FG,cPr{IR=+nQ=0(_w}On9^p#{Kyc sFwKh#7;> ˺M)}K.ym#W԰* y#fOd͵G7W1j3?k >9c=uG䍎c 1}j:(F=A p4$ݥbZVз_ 2S4L+IeÚpץR.q_\mC9[<H@ Oa!94 1@B?zyJkl-Pg77 Ԇd \T1sv1T.p!Cᜥ_ h\yX;ٯ0ni_?`~{NzskAүryr} Ϋf=!9xn%K&LggjˎcX:z{.3>?pDTFs<ӭ2KWr*ǧqWG^(ͮ`ju}{F0it]H O:$hL~Lj۸`5[-5)vhao#&S8ru6,jB g:k => 8"QdKJۼ!Yj\vn3ץ}.cxIZٽ{8Z0Rn44>QOyտOP%1ۭ#`^_΋պ* -Xͺ &}JٷX3;HcRlEHEn@J.Gg ^ƴj%Pwtg|kW =(#@SμuN!jCLHNJN^V:4'>6>[w/pSO`zcoyti<.H?f :hkn !^hP XsM4DX&0lvs,p۾n1,8=ɞs X'󿙕ҽ^ ~>8PZ:6 ؞,5kI>@S){Rws,kwYYN◿}4:""Ҡ L1t-9^Pu=*5W4Hu$HoGC Onv|=UGux";|?~|g i;?) 窣`l9PzU 7Ie?MR Ez'O/:R?J6kxFAŚ?n{u*+V܀1FynK |کO>IbR`/xZi pY̽TfrhS ܨ)ifjd3|k!,:8 {_/Én=N>B_;C~[lL:vѽ[ ⇒873:so.'3vS2znRe%-Ce0UXb=䘩NGe<";AsAkfuwK: (CMeva6] H5~Ӽ7*dŘGgSZج멟vPiu,},:aJi 5}gɧ>J&Z޵~c9UALoeV7Jxxy-2 ?>Mp׋~NSD oɣpo1ʛ9s{6йd/iV]ft^kEY;x=p՚؃@J}zk0 $Bٖ%_{݇W覗XC1Re'{[:ܥMTB~k VۍO ېB48TIφIK=OJj)~OC]6 v!3ꏟy9լI|2rds5Eֹ]7=M  cvz\":ӦGK ;ܞ@bͥ, )lbꙘk<{3d9Z)w¾b{6cP4 IMH j>S~~1/G CngnRe@[Ml#у>|^i Ls*!lf{2 otsK p}ANv7\ؒL>o C xX'5.Ǵ;́7d }nsJ*{ 3voI<ZI/l!uQp^ej7ٯ2]{͙&ʿ$T{H7);`ևKZ)^w3z"D=6̹2`ܨDEe:e#KY;IfIx'w}7 42-i("x>G*-xܯ2}dK !zAО2 <f;k_UZj?y(t?ٓTf:kzg>!mu9҉q-GJ&*{Of 0)oXX(p #TPJbr HNl&YzBRp.0B:n/07"AZ}K R~Ewخ^nPF>q&^ˊy:a8dF:F{!+GGqb"tdy LhFh_etÂQ[gZ+h pb):Emܔ87Z,u1t|Ae][W`zW+Hh¨gkWvaHv3?E}]rͅ7"̈ʧuIgzm[# :m6U<?i G~r4ڟrAk(0{Nr~oF79'[Zƹ0l߇-&o"[)%v Pp'ۄ7rʜKf/mBbh3`2UF>gPa Z.AS\֧`"tfe?XO,FFa|IP?TzFqFtOXFrE8Ώ @.p;]z{4Y*8'T-YMd7 .޶Bl82x#3w6 Sǃlx1t!^WÙhbeF:iGKߍRz_ VJ(f@'*~7aY?K調I;V_-P/G{o z}˕R".$@0q>/e;0 Xdyƕ?ЂXmQi>/'i>5Ͻߚo' AHyZ(/:^ZiCgٽ MיW쥿$L*f:Fߑ(|1Ş qdU} U\N{q=;N.Bƥ+;&Oo2O+T'gR;ob҈3[$#NdgBsC*>76f-;l UU&$[4;b_{hߞpRbnQ? F9J(__x\D5`skUQۚ+pO3iVYSn4r܂8 ` /;VNل ~+UA[v6; |SB ͧ>U#rSaE)>-؏6[i xN8ڨ$2lt*(Bqʾ@zD|ݧ-/ Ǔtۗ긻c}ALlit7 c{Z pl]K“̛goQOY0Mw\Ts=sjFq,-fռ#61Fݫg04$<W Ǡ$9/[$D!AXmЌ|٧:(qnh6S/N 5ĵ$Bgw Bb~064$tl.4d VZc-C!郛{JCY0:S]4sϾZzm?V4Qxz? &&1s=D37R1NZ79&NYWؓ+ 32ri|rRwn\+>u|ɽ|Սt XgpE{3şSZ0¯dr;_3"1U"'y#ԕFv[ճlpY|?.2U?"^eY%Xstb47 {-[)V#&t0`)ǃ3bJ\xʍowQͷ??It Hs)JK`g[2gEǝOwhӟ8ICN R=*=+zfdߨU.蠻<\k>zYf?ad_olvn{n$A<wa+ҾsRv \ ^ayDF؆=}gs5| nYPM}yNd a_(P<ԽgI :Jw`+3i0>X4Js^HG{9;zE$ew0gcGٰ>Ew1*wI8xOpEՊOG[?0v- #q{ҒX(9gH47Aآ1l3So7tU\xNĭ=(F%A9'q=}X?Pr P䶦͓4&{RՂdGݙxy إDϏvV3NIKK*mq}R*(iOgNa{8{3x+;!_Y7Vn)]a[lRݒK緇M2d I:[2G:^?zf+m,[. cT'Χp&6[l14`n5Hyxi oy߃){¥bĴ4im#nF&o$7C {f}7dKP2aj7Ƶ0}("MioaY^}]Vbp!JEcc1۷ Щά W|Md6D1tn_b,tezmb2=@w} Z I3F'qQ*\]nţΥJpǘFUi mJ`yXq~WZ("oܦ{)C#ОO$᧟gmJν1m[6UUnNXN/$Mi%=x3`b{ߒX>ЦmKMڅXk8w'ɴ0 .Bhx38 o 'ɸHnyU;*PziOL!$m4[qr.|>Z-OŘbptӲ3. qgN[>ux.Kyiи=Еp{KνdXo1+T`&2l|q)M}dݗ >Tܻ^ o2b~:&^TS:='Omd/Vʩpo^LaB ݌[ۭW&;@ڽNrV+W=f-(M:gOsӎ'0#W`y!^d75a%$ڪYR~1Npņlr: =Nvu]8lq}s46X+LB}m6'~CB[2SLn~i¬ʦ}5 snI/t  Crq:M#1uZ ~~Ƶ<śd4fs7g`-S;"d}oA9=^̼f/Ů'%݋xw֋'m?Q^g9F~iIme[SPc`dhUߘ~BqhrB2Lm%l4֙zv+<;ܠSMyU9Bb[\_1*,Ƶ-<^kD5`zS6zN(z[)<Ux|9eqFbŲÓMy]ܟjNLGn`؝#[COEtj K{xDJD2؁g@>݊4^Ұ=+۴%aBҙ;mLR| wݛdrv7*H݇ Ysio&?qfzNZckr'{y*>չ _3>B?c[Q:٧> sKZD|;&X&7LGϐwǭM1uޑ1hdC + "lMa' ߄!zszshr^:m):U}&^訤Jv7<]0qUfx޽xߤu/ '_ǻ(ZP8>5~4T9Jxn .ƕ-sV <lq~>wީ|@٨0k,3\8^F7[4q̟4S<CM_ZM"p =}LNc%2$pw 'D0{,D羗.a% A^e /ֱF?"P߾gc4O#nN碱0 EL}wIJ%2:ȥZp q)^5. 2)廡 BysNgrmؒ÷so=z {gc9!Iqjn>Vt=7Vu17{{"?{N4t?K8CFrJc+W6Φ\E:r{-KLO r|շskxyν C%3ʩ9~-4$[_ʑgrEɹ&p>u) H9e!j }!H EwXkxũp *I6hzpCi2-2GݟT;cMcӴ`òVftD5۪|rȗ,dޥK#J Z+nOz(˿OS'>fN|sm=ce-?DnmP /'&yc06WT XSQ# } V-Qr~(N_e+dI(ciH%)ԣ1cɲKʷ׷E'$O9^ڳ/Oo~sxTYbOnwy/8)5^܃{Ol%Vѓ$|˱YmBe"< :y*o_F3ӆ +a}}T;Xp^ۇ3sUo؁)8zӧQ7kU nSU|9{ƩOw*n *7_LMg+97K +nEe}S:-[&2uůny<+՞9՞_io wk\7r>֧nQn5SqNMVy_{NL2Sn٥<[H[Kg^ [/gf{C9ƦF}VOE{{ R@"!MR۫rܗrq ƊY:|?Rj.ec!P IMZmPus(|ӝol%maĿ4G=DJ7t燝 [VJ۶G( "qcO䓎`ʊd!gS>~Z?nn*txhٜ8y>K!6;c*Fo-h߻H1íuءv.|.%a0aXy#!g]49X9/P..nH\hf6Î%6.])C\بd3;sDc71[6W&U\ UϤ(W;:(TX y6P>>n. *~%:*]6+s gju:-]ÿ8zsW^t`~cJS!;Waꄄ@vd h@~Ɓ$%g<Ws&4컫 ~^Yn~+ -ME b9c[0;а V@v7Բ0R s"',kcki>8'VEe S@z/TnK%EٴXUbrwP,pot o5Qwv[8}>N0'QkUn!B0zJoXubɡ-XkK/̹,8Ͽ];!>>Zt62TAA繍CbJxS+}>'}C0Ѓ3W Gqҁ}8(AsR~bbf蓏&Ҁ7_.]]IUn SAucO6>93=smؓej6.W,wL?Tތue-q8׬ Hg!fk]9;H~hƞOb F^"WGSQNj~Wpc"֎6,pڹ_(`&A7IAa-=!W* c>34zw݈[i\AtTZBx:n "Tΐq}jkšS ΉF-zUcM80]Q2Υ1C޾)ܦ$g3o&m} lvskX(֑0ɊJMׁ{F\9$WRc~Nv8t{aORBJܳ ;Wc(C9jegd,j67bNEg~غ-w^z>[ :I?ѰL\$ڍ=xF|ʮa[NM+'ڰ*`Z*?lHS~`ڶ2|}wA;HXqLoܓlPn?}փPtn=?7J42-uTVԂ'K z2lmwZ=]{]k9srs qLe̹i\^I4 =qpl\uU(*n  3GĶ/n@\AH]pO7Gz~RoLqr*ui<:w.VO-n1㚺hd"3j5FB~Xdjb4|Ī@.b,oj'/V|nQ`¦:D  ,lzf%^쯉xM=Ok@^i08"=qIQг cFn#S'om&rqKg X4HY-4ǧ6hA:Mwis^6= ϖ䓿E tieG`_!VsgkU]z9qL҂O~zE{8"bh,^ҷ4%:S7x^k70>p3 @A;+ay:Лsu!Mc꽋v:5ɸc@ɃCv1'5(wTYg0;tz\y[U=Ӿixrg )<[ \S98pd{w,+ɷioL\=" J<[$E϶̄I׏pfp3L> { k,N94XчJx>m8?6J%\?摲NGd CQ,6痮 $j9cM׿SM:PECU (Hp8'O U"'Ji~/fPH yv: )JM>ܑ|o;[)"Q{/T7۵kwhc-݅嚏|[):"@@^K r5:S}*ܸ`Cɤ;HMZ^.B@v~5S|a0=EYo͞F07t>1d1})xX8> H2~׋M@'#u,Ke-b7{m?a)Hs[]*wl*tqDeķsj_WP< Tv毰_!Νz/n}[~A0m[bx7VM?i(.BPDxKEЅc$.}I0 sOretFV1oti KvN|e9X201,|<'o⫾WZ9C4i <@k (K6-u&I/Xܑ=ß7tƖ"r=1՗xk(ҜH S'tGlcN"Z;=+{aG}fO~=X Gl1O#ֻ>wNM端Jw^%5I`~U(4s'07Am Tγ[ַva}H#Hg(N%ԝ@h)Ob{=G:0{\㇍C Ct-φ~/ۻ4{?އIj8:J *ǃ9kXC:w=HEҦȖN k"xK~6H1ʿv٬Ԗ7df'Xh 9nI*uq;*aK G1SvwGs<8>n MeG+_CNch͒z> #0 },%m,ughO="]F? 7eұGyKˉb{vz% Em9g7}32ooEPRh7bOG­/3~o#AjRs}vw4\vɕVeXVH /<"3yHtL=VB{yύ<ʈ/2>zK#hmI-f>i$j}^AzgJ<ﱊ;j{=(dLW[T}}wh@gVj]Y8\/\489>faJ1m$ljp=n!}EO͏;IKP1-ynS/_DP'4^6#etd0+q[@#EdTR4d3 Ȩ]3qU`غ׈ TEא.хW}5mPЊ0~Ĺs:lek狹gnsBkF϶iC8v; F3z~+Ej}5*&"ISg:R˂@컳ل0x}AXwI z9k{S;~Vy ~bruiTrR0}l iM+gl(un{0NѩG:aHE#_*kx*S[qB]Rd`xiLZe,Voo^X*\5ݐJFcw4|a6K쯆kL=kMNIfjPYn/neBQR@#{KGzRKJ'Q{B2bۜQz ЩmBOSl} Sat#bQfgCPr3(l'JT =&yD6e=bpǦ{?*I& G*0,!e6J X*(ؚ&d$!c ?{Rx#TmɜItsjB *2iq/GɴQ[yMئ7[Că-=yw=6{!&{BQ5 XhpQ'UU&̎{f>D3R-NaZqvuf3=z>+ >]/enDij{A[h}Y%Oq:4KRo7P(*76bB߭=U'M#qzBg[|HdG8b?g z$V{$ |f ni/to=|ב!z- V} 8=n9:O5ȆaĭonզLNj ,ڤ=^[kl:kN…gMz9gc{֯Zvq2 [fYΑ^<o+HpO}Ȓψa7Y%vkq9O 8 K^%9yGK mo!g`^D]hSz#-Y-g1%<ә0M^:Iۈ.*]f\U!Lfwb/\Citr}- 4qvW6-;rp`F#[|B݈G܋$hG3 ]Ge+Ix_-?Pl}aEhSvbXh2o(( bRl{wMN_+܋ڭ_Ą9*ɋ/N$# M2H"vpH#T庛7Ͳ렔{z6oĬu ! Pᠥ0inΊ8sM*P)_9UA s~ f0: <ȿBއ+OPk<7nǡ|YGhǿt.5q*_뚌V,BI6A#‹o Ogeo@:z;ZwPWk#V dG'JxMI# Y+y ɢe[`R!ﵗ9wS=fo47A8eNeuBfSX:.˽7=XXeF^fvTM0wSaS~1Ta;3O6cȓi=c QYjKx01bJO Lr5+ɒR#?uwLZ`܃tkͽtQv qۡadeZgAin`bO^20 6TcTZc1Y'A< 9 '`/MXO<{_HXWm܋nWpFĿK} Q> E Ox*LRb?W5& ?F;c`qEdaTބ -B,/ly֗ũ}7 |SZ8X{RlּbLYt[ $gvCvHZv{?{`ewxl;8}N^CL. '^ VѾoqQn 9 {e} l{̉3t}E^SH<ն} hp]x:{:AL[-{`vgmU]w pD< ?lE2yd^5Ӗũ/q*ZywBd1FPD?>HŲ0ɣ.`KhYτEcF0OuOci(3QOH[v%Fs%ǣ%gݨFzhqJo hr؅o#2=|M^YMgpuAr% :ez¹ɚf4)W$!Rgp bgۖN{' 04)&ǽ,{@ۧѴ=Z}w5TwE'tLSYdv">r:o9\~c  qEB='/72~:еPpi}~o=+fRõKиrV%e`S-|sΉ^UMBs2g]O~{A=Hck{=#tl($mL|LǤNz+ӱ ~76nt5nֽF.n!%y $lT}:p=Uq=-@==;o3WyCaZp'iݑ<A>;ioQ_T<| &^66M\QMي+iOgSo$&T8Qmti\Yc)e1ms7,35AY[LuBXx\5:QTgtr꺈Q5O!jnw+=X/f?&1R@ Z,oks :oڡ'cnva: /0OXݜtt$E~^fדH4Bt2 #ˍv*{.&yi4цШ+u ^]*2迻hhl-JY_weJl<}悦4FtX~DrO:dih`P~VCܪ[d.`B2]'Sϸ"ĸж"0<٤β((s% x=< Q:u>~>Zj T(۩iP79N ȧBe#XEe I6"qX|p 2yK35/zˢzD|jlqwb> ]WhMW5da}MF] \P/52ުkkF*wAwP"(fE|^b?\X oݩ9 Ò[g$Rwp*lStNtXTI %1c;ϋqDݨ1~f{}n"f=p|Oj _Vå.+,y;{/ ijM&5h^-75g$ C“I+dG3C*kiV>4{*J%Wm{۴PE#PKqcEy*,`&q*l E*e;=LFyJSS]y|} ;gKb^:v9X S'4O YKٸ ՜<7thMf4`DjD_Y$$ʴhAG,)5.x#&IR-T#Ҿ4lO߄FgG{9p?oI)3ݡVnDy_.Ea.@2&sA/'B7~^2VXB>YBxFɍsYFDZ&#`Jב%I^1#v=D_݋$2g9"H-Pˈ[l%*繨>BgNK{!Ouɧk"J;O QԛRFzY>l 'fڹ)5%'\YG=;E<Ӳx0Ĝ콱HRuysDz{/Vƽ0!eLo&Mޓ^vkbS<[]?&-Fz5L_}(Vl/WDW;{"(}]*9 ;m񋾛ܶ?n8!ۍeSw2PTezvR\Ty3ՙMրէ{J-ȩ;ina*u;s,-:?P;~ kL%8R5|}[hoz?rܤAqa=pBVbnO\DgfsJWSqNz.ęx"tm6CEvvP_gb֑0le}z>`-VݶIb\_YpaR:""}8VI'|ʎu%h @Ӵ}m -u\pQ;k)kWXHI8՜>"W#"X@bMpDn" N> /3YlA}YN`mzZ;wtWaZ~ߌe;YRKWYQgۜmO\vƠ9V#z|u,D8:;ptBt; @,8.ދ=A<o/$n"#hyDnտAi9qfFYӸiVtOޫ>ٷgأz]s ·'qns1fu0]IKɕkX 5[Lj'/l~?it>#NzzI㵦PEV2.ɇJ >3{<wM2RE۩IHn\D,ZQ88'4󝗙Vv/ᾊK3O~0ݘbSkm=B ZZHg[ o%;@޷/4X=ߋ>7wo0{E7}zE>voZ<h WZ;>\'OҾ1Lh[LRde;M;%N-0kS'΋&+Mu|Fc6좔I^1G ϧ=o̷I0|^2T>{9J;\zY(9.RrFjPD7ʅRWCOz$!`nO-|vK05/ן\y &q2 . ҎgǧI`W!XN&Æ.Jm/(pk$4- >1ăɬħvVVғ萯C+p))9I@ۺ|ډS&[2.ˈ79$χ@< I.뭍 )?x0 3 :Rr 8akk|y'`i}@ͽG3Cn~5kW,R |ڎETqJp܋]A6k/n8g~ Aj,kρ+~']?>o/*ȃz˃ `;p l!o=Q iK!iD@3mR\&C xc~6]{L'h^h̴ Ϩ":k{.ǟ+p紺- \Ծj~A,f>mxMs\{^IsEC:*s ŷslЇ)ʶVÂnì5{})ݐ 5QfӘXjXzwil4%3PKW 56O692)}߄IZ2R Enو[$͕n_fb )^~epHZ&v o|pP6dO.x6Y?SShÔZH)x1}uxLo^B%D,0[\nWܗcƝ91Kq`Y/Y` \\4%QV}S,ǽ'}y9F{괙 / wu|6A{a{[óK_h񩿶B%=넵,|M=U.^[Yc?Ue `aߟ5cCM 2ܣ9sH"ڸ*O2' cal=nIJ lQrC[gw-Hϖr1)J5s/3{#VvM'\5$> Yb6(z;pQ#kÙFq}o Izmol[#~iA;5b{_fcDu_$ϑN{DVBr3qj~>ùGGᏞF9!rOl%$xT:k9 ss!d#'G_)WIdh|_ͰڅkQ}g{ɷ}=Jݹͩ=M'>sەB awBLUF3cRRAɫwNpwcRqUmw%O J?Z_z6%rVS֎62B6r#t?tμ̦F?'V!&.[(M'27.›]OU>gB֣x )*Fܜ怴T/= =:w#A ߩu1wf%Voe+꧀YnԞS&q~`KR\W4# uh:I83 )kD&ٸ 跒;a}(.{L-J3/Hc2X~AD*׋㺙Ÿ'f{iqܹmt,ٞɃpzc|gqckPY'4oz"A,tk@]Gy_S*uPM~z/R靻'.rTe^TYUFygo<ࢥ˾;vrz]mN2CN3w8{CG@ȆW"w0- ިq}e.?u: Sخ(}5oeT7|\NJ2m FK95s:7;Ifb3ǰF+_cB-Ex?hB#pgK7qCBʅ~ǒDƺXZzmTgQ7Ӏ>x"}F؈-$y}k#yށ.dӓ @}pρ&~S ۫璔bBd?K k]keEnE NKLZ[4HeU-#fRMҩH7oV:{ż3=ɽ%U”̘}^:2vUV”pډAndF퍆 )5gX]٬AXt0}N#8 %6͜$ BԸeO` ~Kz}{iJGk&K&icWOvYOg^XB= o 5fO~:ȵ)zcŷ"g^Zcs!zF "W;uo?~-p+iB51䃴o#яkK}H\Ϯ !`0oqMC# rI[f$K$8oZ7 t?pW' fÔ{ChA:]Mj=`/c42y :=T~SySU bI_Zb)og shZ1e>||&YAiIT,F٥޷q*nuID ` ?Bf'a07K*;4Gh=T8 ~>yvJ[CPZ3(H3_6[UTB4g}7a(BEpz8o֮'m'nV~N[.$©Pr\{盶엘HK\ߟM!`_(?8Quv5%][zBc.LBD9՛s`ttRvLT 7^gI:vcf rТuC@QmT76-Q7|Jl>9H $1sd#"X˧3?+n6B $zLɑ4Npt>_a>'A2(;OM%er6+柺Hx$;IycxjdQYX\؆V(N⒣E,!;t w@R8;ظ v{WI2a 2Q(="ԢrN#b'^~9E~ssf:&vMBv+L܋APS`*sdZ(7px9)H/tGtFxuJ)uyix6g \ve32O”gX}y~qaPw;o(\gE]G&4lL$c(+qSbhI${+IE "."o$o]{K6@:<^ww2!d/UCZSfIKi?saSQޔAܱܝ*|JQhqSc] #X/%3rp-8?B#{wr' NSE:kT-ݜ?4 H%+5A;aJ?ıӿ<]4 fJ\yo&^?!+w> 5֞RGi=@] n#]H~س&H8ӓ'f{m>U931#YÈڧۅ67_#]hTڱAтGRjEkN_^ł?\gs`񱚴埓Sh?)Fs憂昫fQU{4!GSiVE;FDoŎw nQJtay8ʊ69fvsߧ1t $}, jL@AwLetFPk~Y VTƜi来Mj~o#ӒxktSu7GGm|oV6'{ݑp ]N”96^hO"Ǽ蛦Np".Z@q&FQ]҇pg~@[`aR`Kn< t:n>GꚛÌ 7v2fCon re*S^f;aQ~D{"'ay)~ zF{v}GQ#~2D]>wy'~IICFwwɣRsY',5|1J 9p|r!Z\¬sI]X T| 1qA'}I΋ 8Ev"p!9xRhpD4TTPQH(Ҿ ![-lȨF5s-^'@yh~AikoC;*i SE}J~L+XqC_BQs~WSa(q=%P (OEo:yD&CʭBŊigXKT쭿(K}Tŝcҷ0IEdu= ߩ+MEQk6f7;-BR@H=6vO9Yk] O6QWC5<[JCvoW;vu7Zs KA$ϝK c3<4 休ߙW!}&e'/qK;eT܄Aqbnߙd{B խ,ajo{w_>5'T8yQ%v$ozxÁ HunH|rlR^FGi ] kڪDe3z^MEPk>xjw9Z/ )J^ٟl50^]k AhZӐ+d`a-NopIo{eg٧xe4˳Vʘ;/ceoHͭ r8P+r5V4[:,5%ߟp@JD 2f-i z_jW̻f9uA\=OqEdFqWwᙞ}v0EyF1#|@´z,?[[>jܴb+\7au|}QwzA_1.nGOa:\EтRhtkq.Y[TaπR߰\D,eԘTqLLpqKIXtLY(F҃E *;l~ilpug7rn+[F/k$"tfBC ;ڢ.ވb f-? xCx}67]T?m="/9w,{7W4:ݻ˄&ꖕnRb}kvn YS~@7wvaG'P$9:PrF\)}En֛w|J bO |=zK:[+V2A!jH33w;NEyt#o{h<4In8։nV|,{qIX?(w{V D!lWAUiwnd/l}<[NQٹSw˄MuoW},zD룠g[~\3G,<ӡ}mմ--]UxmI1צMXTҼqFx).K\GK mtF2Iߴ ?C8EJ:bO[ ]2v7\_T7N yP?R.>Sj㷸BZTKFQC˲O.ϛܪ&r#x>LW^\kWXӱiZ^(ԇ0E$F-[gVUqN AYFotmg^rn{:G%?Ҿ:":ou3LeĿAoe]-]fCF"'_L{ns?WGglD!W"i$GdD9o~dX\ 0wuF'˘#BnOi')$'k/jۚT7=l{#D6()* |oJϕ]pF!Ћ.O@b3<*<j7V:7M+Nl珎F`2b:LX}d;=ָosHj9 &* k4i?1.;3HI>p"Xa?dL]FqD&Cb.|H-wZ/ =/9>ŝ~7] |f9[8˶zosd!ɍ۝!UlkRNVцT즍 &r7~ *ofΔ@J,{-sr{|67#OH|Yrջ= xF+"k#rOOpRl)Ѵb2[iyܫoM}eMّwr W|ԕ,2-Ѩ; Uv Pn5_:%~6ة)$OP o=^m18{Dz oĝ<2a?)xn8D8ʯL؁{`g.)>Ƈmd;i -~F>j 97=`(Ȑo3JUwie)qJȐ~awʁr0ˈ"* B},GnRŴeY/n7t¶NLXo!ㄝ/vpΧ)Z_I[;gviǿmܱm8J 8Mb# 0\y8},iҷjHKNު jlb՛Ⱥ+ֺ4\e#[mTmvVh $b" L]WZ~.c_ KRb߇{>i$t[_TK6wbutu2}"Ees^918K#>xAݿ1ѾcTgoW`,Ui,Dvdoa"+1ޒMGU+lM`/a̡JTOq4bo@cory81;/.dho~+= . W?foM8<--Mn( ߔ0mjI^\*קR o*s_Byvc&exnZh1>:KCG~ͼl)Kq;olTr4&FxW%]%aOhM>XnYӈAkydN-ȾnF PhGmR3l\j+>w*:x5O);X 3,nm \̢ś@KMS6^h1O޴CeLBzZB3^ A@ ,`Dܞ^(ԣ*iP{MIeX㘭Ozι_c突B2Cko:&B֞Ț7޶]\Q-N&@E{fߜ+?;O?%Q.Eq/cXR&ܭF,Ƚ@TWV A$ҏ ׏G|:ݥ' 3 ѵsVY1I,52߲*ӝD[RBCS&pxK\BD3QDRkַ8-OM:!PY[Ao!'鬱 wFes̚qL($;7ȉ={M~qmāPA}o gpB yAMpoOOJQŽZ^2>q;Ӳ7tF> Xgk ] ]Z3$B>qvHaD=,=i1Jzr]\G>ٍHla)&!dqsO 7S<~M{VAd=.Aۙ 0*]Ǒ:aKEE 7)uAX}'z:fI?KJWe.,0<֞4C& Ux3O;3uib'9EH};qۇO.ՄHT=DKVqvq$1jC/ReڗS滭q[};ƒ8oH3 '빑a&J4PAaVz4}jnUx1HF+slP4 ܒdS&ngD"ϧ} szgAhum%OJZp/wQr.8TE67pς2D;Fqؑf=MBN9pmeuL6vINYٓrS(m'TKpEG%^MZ[+ԆӘ7u?DkgiVxvd,d*4:VpbQe2H%( XA&7tVRH`=:FQ;d?_: ra-F4W=EZT7G痤gKg8,Oxg i[輪v_mJSBa,"@Vj)W,VT>i\}h|h}J@}&rOj f#(Y>͠bP͖lեhlD G{Eze{:E'H2@ /CFQ0 e4Z€UĵJuwzQYYұh4qux 7FC?XET0-AZՕԧ/Pnʁm Rg`࿻s$aY',o.0xu(nF$76W_"w]dѬDzT2 `N~/pN) yf$d_/FDǔO61#, ֦f\\Mk<%PC=V+fmbcoMֽ(ʼnhv3-D(_ 7>z&|KgO;WlSKĐ5*E0v^H5XTa,}¹oӳ/F bGp]i buҳ&C#d{SN&]I_){/.b =pQ8l$/8.*7Ʃڸ< [hur߷3e"Ϣ"̈́h՚pPO͚ƁQ^o5 sɷ/B\9>W}򒣅QxD*VTNz#[|jU{;d'G,l7|X bJj,;e&DQtxnx7[?P Bw(*:X@_}otТ0;?q%ݯۮʥKn˝=*;ר;.,@6Nh ,>?BekddHT8eocYy+`s6-b||k-;OaB>SS4).eE S6T4 VY= ۭ nGTGY;ֈk4 3xD䜎Ó.I\,+=糧5~lܱqFF:Ys"aQdmtJyғ\QGD2G*.U͆%`JI4p][eP9r^ݷVC,P@ACF0dS$?kDHbP5[AGki ,<ѭ]җtE#vh/nNMڭ` .4YF`Ww(|xTJc~>~+ݾɁ*idXŽ:wAM Jȕ}li(P}1ܠ3Wmt:+gң&ô/*7B)Bk<~RJNiw=vE7+q{10x2}M YR1qߩ8 `4$6h}]^pJeWGwf9qb$fdb2r!7܍x*D/iеSZĹKh@>V*Ʀ VSBBz)떜0ZO{_G7ol0A7t^SVS}M0 j%tu6Q 䙮!$^R\f 2ݲxSq+TSz W9џb#Yz25x߸O&/<pF O?3/Mc5aʯpn.Icxյ'95:~}g#"/ɺ,AT|oO2yy׎yTOn-98 / bNUMo{Lr3+P7H|,%ƼE-mt?XHXD8]aZ7X-RķhCfU|@3mYH$E$eEu:1gfa7?WO[ӷ{qq *w $Om FX V8٦Ja6[ڸ-qMn3{㓾M[?0tn4b1algղsOV=,n]P= :f1͒*ăgO`KG`QqŪ*^h ?$`'knJ|Uq4/J65ZPNP@gȮ2̹xh6Zt%yS+mBFߋ+49~d{(|vuS5鶿A\B;*!$ ]ir`QBf/(+9G耙r{](C[d}ʭVŗfbY/^}\(`7[uhu>`"z1ʚN yS{hls:i3օxl "8sE_K|OIl" x*$ztl<&3r4cBK[W6G^oܛ-% ڣ/;xRWھ*g$qQ}k@q>5h2rEIC䥁Lg"ofa1&Pxޝک^,,6n[x Ί a G9IŒù8/e^m 7tD蒣f؊_01"4P+ jp {lHW utja/4o>q|y'kB.egȇ-eom6Y-ڡvrKK-85pbI'Ϛ}r)0͌A`!U0 sB-1vP|l΁]_}HOW/BI̧-;cZ:[r/F AOe 7B7=>MXYùwa+e]'jY>E_lufpiDd&9cz{f'SQN39/z DȈ#nnBF>q*l iu wt9g4c^l) ?.X4ceeE%MBR }%"쵬 %sǀ :JD4:POLoيu.oDmt~Ӣ~p{tsVޯ6{sbdU n6̃ુB7Y]x8M'X/Nǩ0$r(Tu1Q#9)!Gk=ͳQ{+KBvOE/Kg1zy*t$[ ?]a &E  }@HPȌbu*4vq*2<{* /VsL" 쒅ޒK4s6gԳT̰bŊyĊm *uDSѿr mAW[$VhSF u9(CJN<U냽kgZڪB>"|x]/Lc-h D ''PB> 'ax #MsnlB{Mߌ0&a #qXo:'gtJ9ȩkS}) 1< X1'gXQ"^7'ʆظR6]ȼ"=?%dIDȗ 3DІ~D6}+MҐ5A;~1sr*5ދcMs6b*qR"XY Kbn/N.+R5Ǹqؠڞb/rńf|jn?w#;\C hX`+D|ɜ5;eI1C]ۧRsGϴϷ4m,8P0^ˈUQx|ܮ:bŽ姪:<&g ƮOHky+Wt zVܪaY-[[719Xga(+*v_]Gz +5:9Pn33b6@/5"Qnu B;%yL5Sh\ս7 Cu"k{vr!ʐg{lA̎$6c-$nLY nxN֌AG gltDFN1w\8d #?{\fBx^ztn2qܺf _kgB;,[zʴR'y_:yЕ}fYy/,HgA<A3\ g(iax>%=.kY{FfJoFkn)eVJ2(Psw!A΁tMƖ cx7̐q4@e<$;sȾW:As)0n_ :rem,n&prS! ,g_vxFRZ}{e}x[QȕZ~7 @/xxtcNi ˜o-3<ܸhOq|keor͹o=` +'^u 8U 7A} \+S[{2ʽqa:Z]Rut#(eXB7^e Zf dK'n{UkkrENĖ OMRﭸ w&'0BtCT|˻< :49 z[P.pʸ:IlwkFߖEܠldIsew$Zۢ;\W$o!,<>ڽ!8+cmO3ҳˎWnw#!V*(@кɕiΡDɰ pn`*OͱzoLiꘓ٤@[+U;K78OMmYtŦGe[iy2Rk}K^pH* DŒ&}VM}UN8)!= ҞaRZr}<$w?3Ԓ?6ڭnJsΙ} MC;J;[#{LV!Nv;PYDoFApF[U4$(кx-OrjxvC/B]OFgOƎ{wayi*ܦ-%O?ƴBy >u/~vók *7NZ]/NSDVcQE%=#"7N}ǐr}C4Va#E7$ Hu{LE޺E[ujtMǗ]q6 I;O2&In'b5kgɦo$B߿t'Gt0Gm'ӎY6nVę^}n!(/8n|j]&pʔ^RZZ,}CvӮ82n+ʗdzyZZ}& +70, -k:.:ALx{m Sі !ZUlR8vj-i~qG_ ?unrT{6ZIF)k<>eҤ&-{Cr|IݾO-Km; 0&GxjF?@P0h&=iLܾd&tիK{ [/'a>6dpdᙶX|{>sg%vhzt<Ƅu9u&r4§nw~^AA/ 4Ā#7K8byLfo`ؐ]כa$mv U5X2 5[n@i;[`•# =Kja>kka,S6W7 W :ԟ(rs$ MwoHp;Wu[mP%aF ~Bo$Xj).~y];ൟ,+WUڷ_,cdεb`9G1DAI8svG䵘4Lzt{W A 'x?! X !k|PLv0NA?xc7El~;>CxW?O0V$(3}3t|SY>=L<lk]@-_Hcmwb~1: SP>7ѭ, j$|m 15]fdO!e rϯo%y5v{V(93 ^mPE'#4y8sg/ ByyW6-=,0;TͫyT0v9yU_UT|T2no%7ǟ;a}H8s ;/z!v$Cp{6M.[(Ϋ-wȴo;;"{8arRK%V">9e [\b'ŭ{=y)n$g?MJLu#y޻䕮 CVs|w5to%$}nɇ4RH|΅ `}[5woJHǁWc(tGAMB;"{υ$m"F!P'>&[7Z>O͈>@(=w#|dLes ;_~S|cǭ'9OyĜ27Pl绠s@S`Cž,)=. ot'pkV&[`9ʍP~ˆswwo;}NTl~oۍoP ;T=홢|>K0waZ* g//[mFb>jy]"~ Xtsk <{LoS,{8k>?Ia,E;57e}aiWӮ.UK_1ZpSaqfYdORv9EvxH\yLFON`Q㻋b<|+pi*HɎsoppS5Nߺzʲ:B!-˥HHo:]NFapwzCe0}.6N̜ZJǾ.Vg&.4[%[|\`N}T4vnw:i=`{>vmھADR?l82~~l /o~`z_$ px,VSA=fV\h:k(n[`~w/Y7Gyxq3^}pW[bEM.-e+ߜhx}DmDkVBBvb73ש3!+>ϟlQ0y@Pܷo(Rm y@A~律3RC KNI"X_vf֩ť|Ч",o`ԹyDtlfc n6}Vzi}LDi,'\fo}VIj"l>B=2ԽT ؗ!bؘTx1"ys-[pܶn oO3X DF80K_ P{?fM<%t`ϧKTӽ(3EsE=9Ch麴r/.ܘD)4+*ˤ,DUu[@LwtIx}674Eq|Zh-Ҧ±#|tx/?k-WqR_$kf(%ew 9ozaMs7'ױ2k0ٟGdWѓ (ubHH-T|h,Eᨚ.oDvnEQG{]d@٠wMg!>&Ln>idй}q˥2qn9Ӛˤ7W{=nDa؟[t8MEOq܎mNOwKFIr~#5xHJ|pE 9W!L$|QY@]:!v S.\Qx ܛQ$g '>؅|Q!p­-#JQ3>E@umޣ3!D{9KMs̐yE!G0](S&{ Z=l y.Ai~*{޽o(}.Ք)wσw{M0 73 XP|\f ŋȎ.BYdž{piYq{4TF >M9ɒ[L} k,M^^۵'ui?yӃHO}}qZxupQao75ϻ3w ޱ5#~瓪lh=wXں}!Vc pBT0ml=nܒNG3R FC!׈?f6ұZ2 }I@ޞm4 $b[8 Q uyQ7k֞ĔvȼN{ֳ =4usYG4cW&1;4cL@i.XzI;}@4&ꤡOґ9;}\3>W6n/Ypӛl'?rsJWpuEl/ܬ#ۧluA&㲃S2Z7钲99őev@1!d}H@`;vBE|kN=.C@nUx{K7ްq"t;IɯGUE"3u*/˼ƴINUn}hyYly$_)ȥ$A8͆{(r7ۅX´9pj9k6s7WuzP4};~V$iv/x.@gAmݐK8  e҂Þҋg6Zߢ$4:myDN:4y0,5mXwUm8&Т+6 kOtof2IsT&[ =f`hV/4\=9)c?ef[|-(ܱVXo`ɧ^|^C[z~({iBqxNH}@eE3< dZ9"͍A vvKs5Iu ~$Eudƞv-XL'^uݾǔ]פMaX@tӳEI%A?F} p`nn~ aʱf'itG|DoIIz[Qҽ w$E3tһɵ]phG$Sa4gVD~ل*7fbRokr$d_,!}rn0or17dzuf;d!H8\No*6s!3bo'v٤ ًs7x8]uNw&JꠊX2묧 N 7RTLif[n=F*{Gn:{;=98x7I#5BH:J?S |f =ޅNz8^\eUr%,O!PU>G$-w.Fc--~Iڳu050)]x0 ؂LԽKxjwZkܧ:+7Q荵q#%T܉H<v5r5ZyuRZ?E{'\ S$Sy@ Ta h}8yQ {[:,;&0.s`m}H4N qwbn8RPeI0pR/ \,LG~sv{,ũ/Rng_{`H:7ڒ~O#_m-)yM6{1W@f%t-e6IpT}NAMXXmH=ht7V(,@wț>cȻtN3nc>sqTBd$;S,~ /Ԣf93I?a<#@5ѡ06EJվViDK (ҷkZb&nO2J?-bfyEOJk 93\X5/3麋nɭsJ <zT8/Hy*|Xq/?{Sge(C }Mً͋OLXOe=VvSuVn =+Fj|$2.Tx|ͤ+o8тǞޙdڎ@١uzN '~] )=~#.7 _tMAH~>m G~,opHg΍'3͕n-&/ 0 }${fO)1 ĴVg.ً Tu:ٷhCV[kH2qHJU]hvW]u桻f8"Ck/86|`ݸAW%@A>T6đ FTC"KTx\ &L0lQܨ}woqɺS%6fNbzZIS\W7TY6f=5]vH7"t\MF~A}|8HFu[OaUX9Pb3  jegeU]̢l،"b˲}gLon I쐻i?\]nNB~Ivƞ}W@4pgXODDxIK@NW [e6mܛ,~ms_Y1GVjoF0 Z ypc|b% *M}/Y'c@E>kx(M5vf8{.֍&-n jOٓe %#{m8.=E$Yu ϗM -p'HUKЌʠŪ:NPWhd- ˟7niوS)Kw!btIg<NyNFG0Izl":}>ov/^ES1}U%!1C3 wӻ:H!v~~i?B xTIiMĠqS4rfzHBLO T+:R/oy]8-*zRn`OZQi(ΰ.ZOZ@ 9pZ^e%o,uZ{Uoyjec|uŌ)NŽ 3fTdڨ;v:ˍ[3#c̜EFabŲLe }Vdn6S*W5/ ˔o[<0ɉ+#I `zZ&NT᤺/z@'WO5"F9;}:9\n`䠸p; |~#ŽjkTaezpiY21h7#}Xq5KqĄaXm3XkPf O+~JmTm- ^LUOjɎcG_䅾NNMTҋ<{~,$={\\{v_X alm Μ2}"ɉ5\<N``^yb9)&zK{a%7{^ȕ2TtXkec9,g1+z`}Be;el8CE Mړb+N*PiJH R lnd-:a-+E6*=GME[v:]YmBSO t&8>pPOcgw*`:Kkz&#TwQW\BHz.xIyBO '\]+Uy5u{[nSoek#OAV5DgAD{q*Ӯ WghBsOlLwn]eM%#9Ӵܟ<5Աe Ws^i8"})5[ [ $^Ɠ`:wgICoG NvxDZI;b`bfy2ǫ5t ;Eez۰vpL3]Lgϙ!bY_Ƒ;AX8eLSq?f2D}L {+jf#j6,kUJykDH;CǏFඵ d[+B3D1zSxbtf/m>"|fι^ƎS_K{]h-ӕ) oc$/wt[ܗepݮT>Fr+ e0{m& (YV_Ѓtva+tڏf|J=i`:m^hg#tzOK/﹩0=Ovefǻ掻0z1΁?lFK{ I w4*t36pj6ҏ3BE &==I::048~adT59_!kL!~ b'\}Zgw"|I=ؑu?N dr.=c9~@Q.PIݗcBޅ!pH/1J OP%*`s"66I|E3z Sk|?8ٛ]0 Y5w]P 1GWscvoPu1w}+8a*mkiB>ykeì~U\fnb*! c}Kʋ"[7 tdj♉yS[f8 6g*|n9܍Oqd ?8Ⴐ(y[޹$'3 e tȍJp!" rwi` `u:1M`;ĜAީ-‡g} w%HL7:l/ް_؂g X/`7u7 PF;5{}LfFa\(g,3R튿-ұBs o@<UI?RyWAuxCXU|`}=-FrrXpmp:ؽH3<界NI~<Nn!Ҿ\Wseʿ<:*~ '\bɧ~Mjllg,7m A<1 }عAق5hA@#\g{|-iboP&a4gtEkŨR;0Vs$w6? [#qTWc` 0 Hmx8|әvE>dMNJz)Y)CiucgasN)ܰݰ +|^W7v,gٍk!V)m@|rJa+$?x(uvմ2g?lҁ0t;o7Մ+Wӟ\S8B2W<~:tU' i/MKr^ 5_ ;/:cKXD>(\lߊ={ - zkFF\ܟUo>%;W::sԶi`7-#a<=&VʲTѷ?̏fPpƜ<Y?RP ׂ@ǏԘ_gD8wO(W;bOWjE)pIL|u㐲čBH>K. &rU%-45Tgp._~~G?s+7 (١aG„j\@-zM={-PV-qNV ?FKԘ0wϯ;f[On'sH.} Ʃ{vFt>,|w2_dM-c҂ξŖtFFS]4JʹI# g۷3%aNlno2[nXc ڽN2|Zԅk $;;GX"+7` H ZMLEώ+{(R ˿TZx|XC _m )9G  ,!*9i,囊 {E/_?pruvuv.&sνM{opk{VCt! }O%aomE$Fz 8O s>]?9ǿ vs-׭w=JXZK${NGgK [u2=R*!L8 [9}ɛ) c$R^;ZvIܮ=K0^ `,G49k_TS⬛;»}sH) ]3omCJ8w/oIRܟ+.^9s8i/{ ULceO}ہu>޲Sq3qd:Rm}X5HDce_= ϛfdtSMڋe*IJUn$hk.MeO3$3QB (O7~Xq7QxoݾO`ߋiL\cR믽e_A/k_q|w1>"yu_Ru>Vo3 'QYr/0n0 3[‡,6i+{woKxOmM]u'Vs$YW .~Ϩ2;;28rʗ}&t%Vw '}c]:ADjFye;  6q.d%,&N ce"wN8= ,P {/;~¤jbnij_FIr/ZI(yd ^̥\,rdt } ϖo zm@m3htHڬߕg->+(=V5oѼO`Z49:_[qt0RUMͅ-*jusUOBi!2S|<'OQ ۴oY̏FP-DfKYɴC? [2;hWN?ڨd9n~\ׇ`vOT/lneF#IYe- EDm+>L)nhC4#|Χlt'7Ǫ"ϖ]Klv Hn43nt߽VkIi`x^ō<*P^bH]XNSp_׮itÿ@L\Z';+ <f pOSq۳ ǭ&Malڷ# paiX+nu+"p]M&x1uLwф[3xS_:e :Q^w7Ս}؂CoBkE,;zqI>betds"B WjhGzbYYڅۇ&Peՙ>S.iyQݪt4Bc紫~XӢ478Ck8".<՟$OZ p<#鮽C^kqO8}p; ±3博bץMp)DUɤϛ [b_eapwB+޿m+v:Mi5QL7R0m}ۼ?Z|-TA3'z1ihs'&Jk)SyYQLЫ1Jzܝ ,t䭾g/<[Plҭ>6JlokbyqI7C W|0 ;'yMiﻗN:3y[[d>XxcF! cizos[ˮ0 ͊~76- VGHqEs:,(9f"Q(y#ݼsX9̨wooN"0Q~9a\nԹ35 /"h_#ds0pLۦn4(3w ױ>~<%a-HLmQIQzqњGmP{aRby=xM-Y(<8-b9Xa(Nhzb9/@M4kvY \auʍ4 gѝ pX|<hb]ݻd-slele:MՍSqRGoi-&7Vݣ*}g%߶ҹ9X oj/$ ̤ Fz$d3No9i"s6iܟzi/(T"#VXMC×gy#WGx2ؤ@ ѨwTx>9aJ 3)g~jhF=.hՑ>0ʹ?vwH T FWAlGw^~I=Fqo>L4[j )MyΡlmtY$pI_Lf$$ঋ#\ \xr 5.O4 هn-[J; wLOg9~9t Ը{G,E` mSz$'B- iOrZ+ `[tw?,MI48L93aU”;B0MЍm=Xtⴔ*g=0}CG~D;}=4nƒOI= . Ѭ^F6_H, v0 9ź΀qÐqs#[ mzNľcF$lz86 4^ڶVMr8uRzSaȈ>y'ŦC} ۀοMlޤ/#A_16{_( ^ا2Pz@ttWI+ V<ǎGz 45QwjA(F6\BY;5xr̥e;oCxh9c7:?3-<.T{uktTFtEHF^r+qr=E,%8=Pߩ86x*BU}%%hlvZ.B.+u7}3ic8ӗ!!d9f S17cfuþ[ch%EƟY[ Sʩ83Ɏϳw'WSEj~b;ey f~ϛT܏چ)6XvQXvRòhk"VܻFn[ZF72yx)5`s::D(2wA^23ۃKMj7MQバ 4: fG; DF@4˩؟j 66(Ɔ= ;NTI7J@oȸw蜕3KVC1*#_^<}t| NE0V,0"UniU28@1OEqX0Y4UΞŕ6YVޗeNcX?e }Uȕ{GE}"VX-EۈlWtu{ bQͳ?9 Ld2x^1i k_;쯣Y4YX'sc($i6Pd!zx9g)d=Ymy ;N;6A}0r0zC<ST|żbmEa k>UA Vp4s?-mK^qk9}5H7ƊޅC(6L>bb9֡Q|Kϸ;tIYQ*RO_(G֡l >[kps[Οrk#'W@<4߸7vlo,a*"N?ij?'I&Ńg;W#>o<nW=ApzmsNg7ۊ-˕Z"+0oM6|b h [("<WLn9!#Uu 6A{T 7 y1^4~5aY˄[.أ-oMMnkl\pߚzo58xK{:}jLc=9nؘ6) }hvUV|ĎvV7.}lPyJ;H-~[s.O'(v Kj=S"5»Pv՚ͤyTJ{0ɽG3ogia=&1JxܭBNsk3-L{?7U_& g[%C$; D `FH,^7N};,NZ,|?14-7V aђxHvUy]ywql;E|0mofyL)'/̽U}N4zt;'#o|B2hTb±h }ܡyX|5Go~M-Рw*q)VQBZ%V\Xxj8}߂}w S\Mhp^io~z]$b=B84ݽWo}`770Ƥ( CM'ֶzZw'NfpPr~k[OŬꖤO9,1e+Tx(:i}Ffcv6Ti DNY91_*n8aB6 A3r38UyM}04qtB\{GӽY9LEbЍI `{p=j/rDZK_+^篸]60gI%/uVRg3؟$&;u_^f3o?HfS颷r9OH \xgkuu5؂ejϖVNO4Ѷ+ul(19gjQM i" p^N߽x\ 'P<ᗺ lgvaLa:z6Վ/ NӑD3b mՉ:̃n&K$ⵃ)}a.%KѲO0ИaE: r4_#w)T-sGx"G*)V1I^m$~b {G%^#w&~ilw=(c|Uހ\v8y\o90z킱[P,w`!pwEY)&YmX7mo$W^nDZJí`߱(F: 0^5׊ [n%#j? s.eq^M{F}@뭛 H?UPY}LUsr|&zeyUܳRgeH@Hё +8G$Bü s ik Biq+HqϢOcW^{|d*W,uH$Eyor;$ylfݫNu V8REuRf)TK: ك[DNXEsAa)ֽtwnk"'`?3eWQgy29Ю ϡy |bXLGNT9`F><;2ϙAukJ…3]eT7RRz sc{׳VnF{ 4wi.1枥gwv[Dyp::_Ѩ_xJ,FIʟ6N6ڈ~U+ȱ3J#y7= |p_u(#tFϴ}nЁgT@$ 8+zW`yffG568| 7='OH2n᩸Ԥk~c}r۔g}7jC/jSx-K9XJ7ᒙb_Pt+obe#;&6E`Lu4Cv e_L(Wn"Ao__ B*dL~;;( 9ysK[*Cx/e/d#0i8Z6vzbyG"S]F^ܷX}1>%EO ߩw"KKc_bMo7 o-Af|u)RӊPČ3:ih~pi]>zdi򮚞3q{?SFqh ޴#Cllrdz۽o-hދ~lg†;cdjh~|C0N. `EK+FmaU_(r{7UQcTvS/;$989Lҫ=4H&5)b_JI7iBvlYwl6c b5nI6IJV_UP)9+Q71;XLq#ܰ{owd̘d:t{N/=lfS(VNvv C@^)ܡo2=GJ'GrwOt5 p_XiʌU}lAp 1wDlrcOI(]v {]e}U^8WL϶P Ccn&s^ER3{1gq3 4RZ( 79#^dhZ~v]d7;yrmBQqȓ;s~jmCm8[`fʜ,y1Ztm$~PL 2.gŰvw;Q"ZOIә!K}'0[ /" aω=ٻJQk5TsR'^^OELW߳n0<4)M{xR~c֎Mkmlټg㞓ͼ W7?-nxw\-҅7d %Ojc[d{yϿotI3+\$f!)`s U*-ķKž3=ob?g89s}HG][5_Gj;7O}B}&w'XޟcG~7] \RoeKБ\y?Z!V3[9o3q}Xxbp|ӈ]SM}QlHWg4chY5X2!0dO$yg{ k *﹌&3ѳN#뱤x^t2OCm3KZbٔFI^%+iv@Jd/q}S >}'h?1獈D^/LkF>t )Qл|A8'fyNB-+(^{.@ "FxOt k 2B@6yNs_O"]GE3i8r.A<6WOJqg먡wѯ|)&}An=5_o܁5RU753=IgM>]4oÑ[ONQr) )V@Q;"KKEP>iBɭ3E!8HSbB RhVlվתrqƂ`+% h^F= /6Kdy5o2 Nᦥ f qý-JG2mx_sEBV3O|9i-#:Eک…jO2^m\B7YEd7q] MM@9OKT9B}2_a` pɕ7`o. W }}=S;]$Vy=p\V'_ PBͬT1HִЩݷ} qe(/Ѻ+YZ/$A:7׮аٙGݸ40!o-XS#ykY$aJ,-tNxۗZֳ+)D-A޻\Zۀ']݋N"/|Mb H^A(lg-o2 L&Nڜ7{&cA~`6Pykgj|[ طm}_B< m,?T{!|ea2{da蠡QO^VF_FvK_۾[v\yҵ ʱ[C8a,,`?Y޳m <{q}DǠ"*e-9fc@hGk=6snH{$ cw_FzKN#ל=}z.r6k-7iXdOA]HÎӤY ޘ4&I ߊK"}i7Moj?K|>[='Av4}y>=,;J $Uz{fQ,pU+i1K-s$߲AiͰ^ mMCD57' vfv"i41~eos"q3OFڲ":Hi}fA'i܀(r c.- ILBPCjY9o>/|ؚeq)ѿJm<{f8\S pԌ4GC}S?` (g7JsoCv?#sbTD8aC 峒:Au*yʉw\<*4:j\ +:%"yiy69;YU6ݚ@iު ٹk_o!!+>Pd/,Dx2ICgs~D[S4SVWly/jo')Brz77Cps.f1^ެ (屛;gBm6]Aee}#9z_[Lwa   3SIp=,%4n,G$ikI:p'U&'/w5 wS!- Q a:Ag~Ӊ͙̹[Vp1kM$9KߔVTp HyWr)65RRVތd9fEm7 +gGDī%<<7ht nCjtIvB=aOPDeG$vfmVYV\ԨfQy*wdUd)Zҫw@E iPLވ!$ƒͲJW@p&ԕЪ+]i:fv{)d1=Ւ7_N!0(RRxGX9""Q N c a T S(IHXоͪMfg[|t.?yiqHqm8iFLkpmvNŭ奰mzR PU9>h kaMAbui.ql T6|0?J "v f`=s :}o[ 1֧J;-. 3O 힂Q k/o70k3@, :uJ:|s߰p:@4 c,Y%~b&=WKۆ]H'V|]+8Qwǃ% t?GAz8d¹J<`Q\p򥎶Ğ ³zvL(w-3DˍQx ~m.p'%Wf{ulV2]N8kұg?@c3g8qGVst4A( HגSZpyMMKݐWּ&SĩE n*v sBisM̽)+X¸cU7V_5|o?rGϖH+it΅Wtl^ԽFҞձlcUFұ(̲߷ϖNyӊmcrVln<ꜻ#;Q8& 0 հy C\$d t{S`]$C@W.lbYCq Ÿ"~Yz|o$Bt,%.BoFuQc7@ [dF6 _¢"T~M"{HA{rbSj[ 7vܔ҈h`F vo@$siq .\QgtBhSE9io)ÕOF1sq;`k {ŵ\>`/m]iPJs߂%нW\1F`_}J =yDjZ.H ݽ|_`->oY+|wl0}7K#/i<4Rxvӈ1W˂w9JHįF>(4=m4{+׬̈Y&پkYMQit 'Xv=i8D.c1|L{l8 ).,MKuTitk%t#^< B➴5Fo'`Se /hHq~x|ٞVw/FQ}Vo. mqZ{Nb6&e]SPDޤ2 ޕF7Bp>hJ$4:gT2J)>Ԟݤ^=ЧԄCᏺN6CD/♖'Ymzw`ourքy泎d d,/2eJ|D{qUi8Dm/i왾F.8tk0aS.Bݼ"Q޺?VpF:=.9Kّ9eb}n |S΢O6 oH1>ǐ.az~Z<.$=_t1Khi>O ir pfO*"KH-j׉HH6ԉA]&7m -ʾ$^:GKB9#E&}X9`vH=We?< T8%flWl;i9v).K&BwnCިfE^O=!,aF>Cks1\bmD(;"J)x!MKXЊ77wOy*lOE k[O=Ɂ& B]S_'QT(r>F2iXN\y  AxįzOw*FlY} ΛCb=g T /Xb1 Xbz&JOZ>@ψxpV|Mn3Y+0ߩH%(@SQiftۈǞa26{g 0\*ܓrBNO6;70i>K^aZ ՒWجyŦ3kR67=n=G!MJ^cf3y|5Օp!,B $$m^(f"//6qj_^؞eHƆEJ^+t {L%XY,0syS\wEҬr*iݱ(Mtѓल{#sR&L t5m 6dTt>ӹ>F<SU'F%Rj?s"v{hg;)o7aE G yWћ"g?.$:{ qrt[ضFvz.r-T ADqPGUad4}=c;=I6wB+n֌gy/-]_f5W*Ɏ`ҾyQ7upШ giЎ2k4jmUDt:E[:ZGp#; `(,SD a !о}|mk ȦpEuj]61u@0ײPf})iْ\6 irNbB&.,]' y5ڦcM(/tS,(b |zI5p\Z;\嗊ptm5nݠ EADoWߧCݴ#mHO1u _a(zXi " M2vu'?{zi/ۏ_꾑MA e< J+c:/9FU<@zV%*1q2^#" Ƌߴ *wh53f &? y?z}(#c^ ]+O=Fa 7)sF!=5)9.T_9Q}:h.]_C6As@gQ..5yW-TTt(xjArSVj#F=OIyuBٻLg{3@7wAl)S~/hR~SasIL8Դ ՝wdEWqmx74_MHQ˩X S~gn?/z#5 bi&;%)K Ej(\Xѩ1f}>j/@R:v>;nSє=laUVfwrk D 1Ċ_v3E WFuW@\d3Evb#?WB怇qjpblthƖϰm/zշULz +p۵)o1S|8Zb%LZE&s/T $%%̰xe*P64^ZN^꣮C{wqYPn^./*k DpXLZbQNé_.A{y)g&8zʯ_1L$nH \\y=jY9U-շ>}76=CHIŵܝm9v "MD*h:`wVm݄SsmgaQC `vH:K!sP0s-6$6Fw/VϮ2*̴U3]mL2d/bP "65,M0}5W/rt$Jf4aWx>>}* ~ _u =sw;:«|;,j Y󆛃X[)6e 6r'ڴ>pfsf72N_x'3>?R>&1- 8=&^ot*>YV˒_PnE&j&!] \0@) eYӟzMgͳs49i\G\'ǻvm83.$οUxnd ثcm4%snZ SF}aNؚu3E3mnJ'x Sf<ʛ@׹I-+M῰v@aPF+X Z/κ#)؜fee(kRx1`rI6U)F=ﳌ\*QRh4N㼞ǚ#ds %;wK^^3g:Aj+0 s梦xRT[ōK))fϜlZgueGQ봲pث=+/?b[ X{O'`W4e3PᦩJ):#WT|_;ߏa2f{R݇#|cYULzgm.ŋ>L'׼Us48j4N[IP~1D(]5U"]tVqgR_sm殹u?"}pͺmw+:\kԋ~w8r`A~| ω]pr6T)ᙦo:=U,϶<^"p0xDd#ffh;g#|)~.J` }w;. W?a&=8=ADn<޹GDbhM5b6GU+ݢXn,px:d㮦`)4smA\@_xlohNc1Mv*m?J ΰ; [?P]L afp+ڏ1^6gò31z$'7;fҵ6|JhwtuB=lR޼eE훛\/ )A:5p e7!DG^̻J0:aG9{Iȗk~FKۋ_MEҝ#1/oB1޳Wڽypu,Q-2ߊ{KR.biU G"hs|S^1UλlnBJf((Nln:?z?l14]uYwkSz %zřT$_v4ڹx{k]1*~,- iVb5<*r} /T!|Ky8bfkI Ց }50 :b1"}J!.})r2Tv)T ]6jv!!}y9_QA4X'mH.%V-#34_H]68~;ݞF^n yp|IaD|؁p+tDQyU-0f2-m$kZ'-u4v*zJ;R;wF6:c.ڗhhnTk /b= YžMo;X_Cy=+ mp#m.8aj1!Z܃ڛh]#  ʱ@,:Tg<#^p#䮋#)E  g_q 1 cO QvWq+; VϪ.m'; gQM2d{FN>2S򏆸>4/%J[pΈY (>.Pq'#{:p/~+][-u[ک~]z%žër% 뽚﷚=jrm|1Fb&Cq,estB{˚YosйqԘ9a̮.{ RNX :~?=t]:2;Vr~XH/ f5ڭ5t4_a{9tT5}5yۥr4dG؛O?g=ؽ֊St!`f VٙJҬGȢv}poD[=I5<öu#p΍Ax.Go oI>{07L{"qn.Epg 't}1(_:g(QWXqM$jOg~2Bϲ3/D.=%iVD*UԙwR&;=Kyʎvӭu7芮wς?z86F=<8zޫ)&~שּׁ"| lwmm$;3)k| R(^ x IE0; (a'+472D޺Wk¯wwd/l{+|i%AT纓^el}nx+O3?U fg./qvh a;2z> ,I`OgK?eao}=E,f$WN1:jZ@#⏌lvT^,bIP[v2Wg%YBݻ!䣚PI4a.ф;\sG ŲFf#ml$_Dދ5iFl-<>5x08trRN{2>9|DY{CW {|2)10}Zm\)FQwj _&m݊c ˦+n(¾ *"-].$)οv:Q<Rmm)z[;I>|Oĥ7P@.XxuK|W'DerC-/M&lk E;FU[_R`IȤY|pOҥMߌԢ`q])ٸ[WY ߸o 6% 9Ob[A}*MX\xTLbm 'Aw̉6Dץ͆@ѡvh:ċCѮSСV*1r'Oa%~09W}%p8p[zaJ򰆻Qz꩘ޛ(}tKf1qU_=~mØtMz-Iܫ{q7 m .M‹^J%wMLӕb8H<OMۧ"0wy Gg{#u)> b](GPC#d'/ȀƁ\ {,ZJׅ.'YB'A74͢{2-h4Cqn50c\/w,+fHG"ɛN:.X8tRDki@8<'f )A ~H[Fu:dgy7J!hyl=ɲ_f ;݄Ii(洏!zBf/O3JF%{i5}z2Ӫ[ < UtP.2@hyW9KFkD2ndX3dƒ[ Q BOJZ,fS~ғ-%[qi8]6=\Tn͸zfhԽ{b7:|OW`cU _SKOpI+V,|&r@Ρ} !8[tx(_8/6Ryni1=[v a RHh/jmf>s2orMw0[%LT/at; a”,05Nt iCHJ;oA) /'wɼXh%tnH2`:~~ قR8/r),EJR SҾ[Sh]ɕN" )0 aҾhBG!*0m`6 ˶ٯ'!x柸~+CF? OyDKȑIh3{U#,P4 ̷1uw ytuƷ>Aknx^pB>i3Sˤî!"4E_,m5CܶB֠G^7~`T {C(lA=YBewmU 6uӅp z\Bj_GJ79Rgl: K!_3/0%{2R^C—mkñ_h }~O [g_}+fZow,špD_Is/8l.|*b~MNۃ9ˊHkĕs"y݋_Meb-zs()R} / aDz5 [WVM̿jp$9nP^;sDRAeW]??ccw0F035|5BR@{2NN Ya5ٕ=O0wXA* fhtIE:&֗~ԴȐbЅWW9Rw_b\a7|}&,;OYSJ]/퍆{Vq]JACDudr0|ꉫ10- :)~W V{[6gwm`~A^弔KhX3>M3-yYp+Yvz-;ZZ]L}Z "xJصpF-<3K[+x H/86u.5%kv=2#Vb(tqNz8*}#J;\Bc3&TKw5uؓD ol yIb-`*X ^2y^Efi#/qO=tuOaz)*hJS-&Mi⾐Y"p5!껏ҍTQ}Sli%ﺰNqa c c-qw=Ej"Ś)+/B3@mc'&ז"c7\dZ'-,J_t 胘&{~S1 %|2w IN-n6]b7jMGm+RE<ee[vHi2 ӌKFq}c whtB<~W>4tl:6eŞQ-clvewÜa4:Ε* :䮏kg4Y?8,lKSqt0cn6|^^D dBO=ݥҀ\M|gvE۵Gѕ~oJQBJ/v]nQ0ؽ &>Lވ"4++̴eZS<,R13/C0z aR)Cw/sU!{Ajg+P/:Td._J˝XpڊL] +dE/&haPTR&![ jGxTMb{&@oDJ_aEmq˥:zw]¾E-\R]} 88"kcy),:XDl _=L|@~Ѩq#th^hw6x-ߘaRf02q6q=.o4~9,~>{]>J;ߥkxV˦Ι?9d_SɕѭaYH9 -beQ8b52;BLCjW̓1-Oi M CDZ]jJ)fw8q3 V:F)T}T1#oCFaگ¤?-?r֟'nSoW{B]/,![ar(L00ߕ/_k>Nsf3duFJy]--xe{,!NTArϻA$9R(~2 5wQ|N->gB'xB}kA(NTf^3>ՑKW-D{!njw컞r g aFtCDQգ6AW;99džw[/QbZɳ$x@R@]{Eu}P+ Bm,Ǜ-_e8iV`,BI9n%dFZj$v2}zhom{i'p\JX&=}3ǹpKudpM,"l~c B% ڊ&Ρ,d3;xi{ʩ0(i/s$ gwhb=*V9chxAL氡88A(-L|F M%k 9u2hO$y/9X.0:_&"[i(HtOEڋXhg{{iAwg2V:cJp7Jv{;ƹn'RyĴu%X]1vUng4H>6b$W($bk +qjq: Tr9Ǽd3?';Mͬ_">4b7zb3m+ B9ѽ[yyEFX7*RnbnQ y[=7CՉk?FGo9}={{MNqP/yj#;9.P2!EPdk"Ͻ4yZzSd3^kl-} s'WԮvIדP>9R9L <闲Yx567Nd."T]@YFP=N{${2T:-T!ԛa@9M΋FeienKM;o/H\Jڈ8;$Kxs* }Oi4 3NӺV&O0ph╼&-_Aڛ wa鄛>[v0ΰ: JIihg~0U ޷ƤERN{.+,vЇn /Ӷ{?!)K&2v7["c1rR(;e|lkOhf;zT DKjF=pn/SPcg ɗN\mJ:[m*<m|)czky  lQ1AٌUleKmZv1ޛne2B`mR9aNEW9D[M*="s4=reCi.<]YDwZ/o]BUۣsuEE-ߝ/?3f/ٰ? =.1o5rC[/qWwm5: ke;l3l]v4[QO!o}Bz54{x+n#cg= oWCA Z117[B<0mZ=ܙM_n3gqˠ]Yx{1C(Ph{ !Az&)_&!)v2]MӢ/"*m~m]'10ܐ,`l}!t:{QCb 1m{]}N]o\C Bԟ^m$A# .n +ш=u6'_uBrEv8"pW6gZôXx[_m~:*E-FN}Ma~[#TauG3 V7k!:,cHO֙0,o})-˅E-#>zWCmmq\Z:|Fr0.G{5@ED=J;dL6eZӕ[ ?yOJ]G@:?H">'ͻ`cլVx”UMqvZ\\un܅W9jQk]O*]~Eр#n&g0= 7dPyP+;R H I&; Y.6#`le}."Ŗ6BUF\B_nusI*KRۨhg“Јv"#\`<%t&f%s#,E Gހ|fe6brƠ)JErA 'U{BzVXr)aC:tli7nI;iՅ%[H v^"FW8*QgI7f* H% ]:U/aQ:r~z[^&ou 0B{d{mNAݦR;|,@,"Z#/o1LAoM:u<6rH%'G 0-O4USOzoNs}g-#O䨄KҢw#W~ZgaZذ];P}Ni7S$l! rxNRU'9k1Fhl$9=G&vP,Edڴ&4޾oԣ{~bpݠrQ_ƖO(P_1J6yTϟ+oOܱ=3}HJfS3.1i-|/0&?h6w4u[F\𢗑-x$~ٵVgT {Ⳡw#2;s-^ }Ba IKgg0rfSLDci`!~3jC!.׾fsݘq'{+?3ʘMb=[3vI Bi NlC>(9_ej8}ͪH#oG |2_Q%# yGD^*HE r(nVx3Beۛ' mtggO *H1t MiBף?6LIGQYϋ 3<:7 B7 WNTK= bvӇ9a2;3\f,%{3:R/DbY}o V"j/i%q#q\:`e`n:vRy$*nT}9EkIy@-Zfzw3$u6pQ _|N߿Y~]\E]ߋ]ƪۅMcc{ B/H;˒wE֨?!.Sxg4Dk1ثoqOBZ*W׋4|7:PJLRU×kof'_ש-bnso|-=,<}N Y3^&IAmC46SE( ?v]ϿlEt}#;N~+HO(.\~,>eZԫ7>fD|n5=}ޏJ0os`֢ޗ3UxT$~V@KI*U{}4dw<@1ng%wfhƃatjn1$ENJ p*JWɧ|(.qk&Nx<Ŕ;¨х@\2']߅\&ûj? ٜF 3\ ܐݤP~\xXq  WeEAE&<Z5aɆ_>4ɴ܍_]'J2š>VVlMoqW ;l.ľѦA}u?x&3 tRYĪѰPw9Mوΐrh >@:mhvlIr ]DxpS4ߡhˇRfo4OեmAUoKԝ{@ʎw7_]Ĥ>~߻½ZڦK M=p/{SxvgXXsDTuY҉2R}%NZ(߫#fg^,.\' vLȘ\mV~ 5$zU\vԧ)>Q_.{`}J ja48q;.G{_ eݐkj 't][]K+[QC=r¯0;W8/شLly$wD!nkJM7+odɶTѤ)#sv :)O2=cq wbĔݿ+(Բą:mȦwG'Nز}wz}]tM-NE7jDr@ַM/{'] \!E^i3bY:r&ﭏwogɵDƙFM ijl²=ܬ7xaEʻ37~)ub@}s'8ׂn\YdD)*+_tG:]56NAukTÚ{ I#|SkKQ<;=}7LaM@R ٕS]4GnX5W;R E%~pӕF.ӱ=S\9Lb6Ӹᢖi/>VĎkh6nBt:_c#n`KM)+뷣F9{S,\vu`TxK{z#:F1I  ΃v( ]˼QAwyB_L|Qd=#aˇ-9Xb|ߟ"4Gl,) ػm7< ٵ}AJζbܲi0|\kUS |"\{}~MQ,#xO]oSY v~8HMx: ۯuTWYl,$41#$/O rG[22=vŤBRvf#+ !4ӣz4)wQgA]=OEmPBh*وKe7Y=]aVar|wZO"lTna9qf5W0qy'+`es 'ka!#54pђy&NߕA#"xUe[h ҍWJ62@(DF=U!TJ;|Lo(olFs&cOoٴ}X+R(,;_V(;R̘W-(^]Ԍ__ҭPnGH#-h?5iZoy aJ$KG3 L5"o0c9BvYSTc mS!%bcezjz!L} ][麢F_nљq)%iy~.kHyfu[q*Z r[ J͆tgBװ `1w7=t>D큜Z+t 9s̀)޷PIg2=i̳_+rbsq+YbTR5p+hPM8 X|5q*f>qhSR8+*MyZO_TZRyu]tԓF@Bpvʩp_u☗ҪzmsB'&LUF9zƩq ) $Lhٕ0_|v=֍0 6Olڟ.w9 {)+㻌Go|q#HJ{^V~֌/N8$WN/']K+ wyk# &Lre䙺<,cY.kp~$BeUF;4Ř2kםM}\rQT|RN>;sl wx68V:MۜfWQU٢$THsD ܍ "i売+xZ{6A.2 Q-SOp_(mTBYv" p;PrNz6m-QciVlwdXIڟb]0F UQ`px, nv& 1K;=gҫ6qq봌/:"oи$VT'^vw r;x(H@]P_o!.4 [xB:I48I~tzk4yZGɼa;u|zgtڍ¢ $(TK38LzG r}tCrT./Bv2B:1R,ݱ2 [tZYd3?!UShZ~K=J|!;)Ţ[D졷-`[ۑfSW#{[+ 'gcٷ9I_BRx`1Dj{t ]H;a[8Sūķk9&Ztk8keɁus8JGˀWrv5a܀ϦBg]NB?Z ;_vP$lraG0[ߛ9Kyg7&vFؽ3VsՒ-07SRǸ},ڹzm OW<$-wm15q,qcoy cy[ȕߩ%pボsVI&b4U6{<5vdG kN(ԿʶòROٞY4ÒFYDdKb㮁4ᶜh\i[dW\34ybj.9Q vƽz<6^㾇F7ul{̀lkB#jxv]w҅f9'%$b}6bK[P97_zp%8d^\l_[:ɕ8>0n<)+ )(  4kqF9meA|#"\zfq+wݡ9|Q$.jɟot^Pͽtze=${AJ@&~V쫇+қpI<|ZXpSxՑPz6N&։w uk7eE`<*tLl;{Ǒ׆$c&NhگH="WwŨ[mL[]xIœPy{OV$ j]W`z6rC XyA9f O j(4-oY]rRt3ZǛ\&*xܱ,$ɓ]/M aaBk4qweO4B;:nq1{]S:> [{PriwDk=0Rmx-H0ē _4 rY$N oR]ofKNI`B4g\L[VQfN66zIJت/0Vu"۱C~ς#u)*o#ljNr5,~2~}r'lwH/:VsFB61}&%2j҇i{Ө ZḾݠcVnkR,о2 37kD|g9* I~- +5g_ G_py:QTgi2j8_/+Mh I:Mp^bnfG"'g :Pֿ~w#1Bq%CNɆ{3"`B4eNwK) r}'n<{{;)T1Gp. ݾ4|`dH5G@;MP ޣmkNTi^1ʠ0:nj̋M= wWÝ뼷7eRub'OޙyL|Oa1f\r\?BU&Ֆ:SBMJR*n_'X- /5 .vicn)te7ԟF:fN-JEd΍|їODmх_cDMc o:2Q{%/9zpM'Ph6m'~ߞ->ӝw%r!<#ZQ4X.\LGxڹa~icVȕΏB iC*l}L$Rw=l3A;pְV} Wz Ǝǽ[|`õ&y[ 7—SpD Ս(^s&P_'_A2k=zn=mlrnj]n_,٫ʨq%ZtJsK{?wFBpS:z}( "4- ᘋ<-[x]#G6N2cFD$ 7'8욾3&Yi $)Zhlݴ`]Ѿ= $]n<"xY Jnm weH{nP2h7ջ ʯ^:~sl3J ׁE1 w22֋=?Y4M_wB"Aտ﯈@'G0VĮSaNͨџ[G3~x정O-bMxcE^z׻}_ ZW)pاMzpS)LKhT&n& kL'M[ޥC!P`ʗf(Cf-ߝȰ1!PWgNN?eMǃBKҩ+tۢ~g\ttR[nʴEyuX;f.{Nݱ6CSqqk%=Hpfkp3.(8W:x7gⓗKl)IXi 9pf:1sZx1'n/x,YƮ6 )vV ޔۑ˿A {M/NX?Ft{7"'{wîa6c3{{SU }vדVg9*&Nŵ14 *߳ғ*qmg=g(d"Pw^B>-{Zlq?Ȧũh*dZn5v{C |{f" .R E{.L/:tǿw;X'}m/QɕG#.@~#~'rn <һ 波_i֝ `a@,{LZt2x=/MMD1ʍ.X&6:5nq8x#cIm iy1{AL\IHVhoI=8< _hRwn,PsQms.  MrC JpzHz˻,ȕ|= =A_Y,<^/3dH{{كdx>/-Qw#;[b ÏeK_唭w{<ٯx,(v؅Ō)#DXIg7yzԍ|TWh6/{<Y'oz1Tdd gai #MMgE;d_M%ykғtR, ticNّ4g/؁5ҎDsel p VLe/=f_Kf}!K(] ?aqsZ+Xf6aWq]{G6.I4E3|TP&ЀZ?X&ue %z+$;ƝV܌-ݙ6v怖g]0͒襽/ e}o9Nz+3 ia˚R'%)wfJ:}oͽLƼ,[gyʱ>%jGDGj6cf`f} H~ED3%K Iq߀KvKUxnڧ!fk~e `,9Fف#&4{m {~p(A}=Ho~3/]Cd(6ewf2V}m5S%2v= ./} eGIK2-ipw!HSfJdUjRkcRg9eM1_ o qktR&`sq+FySXlC'ɁRy;hat\mI. {6(Ul3OvJa7w9w4l dz:z0Ck,gAJ0kq|4!Ds'@Ķpeۧ-&'a)T:EW4f~W2+gjZ/9,29-)ص\ Y5NOA("M[[/w{>WqjDQniĽF5e*N!ݬUȕ+3يG$wZ1z.]*%B{pJG/?DKQ=DG}pDaNbEZܙFԓO;[a*ר컻_r <7s(WQj|[3 *_YdSsZ*4YdliE~[3WJ ](Â{Kma{(T0q21&Sp@#<"ߍ)Z=|2=w/vZc%eK͐+ sģx /5 Ym ,ܩդ9?H+cA6{$` mrw \>Styƹw}X>xއ[rq;YXZYf^9#Է-fBw7R{}*`qlQ" ,H@c_LwzKЎ%ɡ"N/|i-6s;?Am;:UrFh %τ\*!b% $ma|lDu}nҹ ,h4zs/kXZ uT_=qisֱKo"K')FͽP@o9H]XIrw޿ή:|;L;\ͭwDVč NJ]wrqP2Ƥsze޳4{lr3\NnQHXfiոSEs#2\{jy)=Ļb NeƩJ!聙aWx*,Mtl ^# t K4C+'_.\@ŧ?zc.[{΀% kǷy-a (^?q8@`1ᗓtU3xx#0}qoA03W*w>뜫4 и}1v(F0)F{m-ܛA_v(57l^&Қ+H{d]^#읊y*BB#nqF_wLĩS 6ځvrX~9WQN17&iv @3i WH/`)}GaEm~?;!Gn*p 0u7xvV?\RI%^#+w*D` ~)KY,{%pF\g wa[OZ~iȫBtctNOƀ]瞤K~Qn8|mܬrۧqA^aQM$voæ CJ] o5}|Z3zB T]('J "owX3SN拓!vg{Fhk@~B!a^maE"YU[`v!U[r;$v.xV){nDDمg}0=׸E:=js(3No:Nc12 C Mm:X325_n!+HOƺ|K}[/xsb@{zʇ ےК5;%RJ}9 Wlˍ+mBNhpOu+X}Rd jbIG:Gq n]:\5_6 SE$+8/H;mGjjĥ aN)g6/bܢB(Jwz0z=| 61IycD?XK!TLZ*vR,jb( {L.ͅʙB--^cQok̉]+:*FkoїKacn++[Eõ&}wu|B,ƺ6 }kIA؀Qrcs sǍr"L*uW5]4E9nfkP`+Q~V<4`& {?FA[Ckg6]i~r‘%jH*3R͔˜\ VV WָtЄAOxzL^-]9XVl!ّ̤١&)vc| xwN D޽_؅93YQI±sn){^(bcocr^XS^s-wo6w\сo,ge^džç(}Ufkn!: W*5VL ]d6 _.1ӡ+%n:SᙃﶳHKt+ Xg;{7GYx'W+`H8Qh0: 0^͵7vW,%}Q>MZBV6(qmSiHɑ u7"s^ OڻqwtlvD%W6c+(J7ōݎvV̸+$enEo e&7Omו0Mt).-K;?+_&FgKk'd(ɕN^cQ?gC{ +̪6UwHMq,-~^ay$*#黠ɕVR /?5fc[&S^ccHMȧyxvzj|?OȜF^ǘ 훍\x/|vqk>P^+G&a"Ap]qttQ{~+ooD(zqǚ욜 ) dko<t^x±ȁ5CK6yRxR kMVc _1Cq(_ϱu'\P"Cg)p 'HUIkyrxR}ɈBn+-3StyacǢ %8bB71s~s K; /JB% nٯSAXӄC%+N+x76rqv8^E`][7:YBVI~f?.#s=RQi)KXU7j&(Zkv *4'?Nֳc8Pla#Lއ2D=c8F_p*ߠZ҅pM}ByNM%K@+2q{=<ȕ"8<Ʀ8ev}q*vXؼ^w׃D?-;;IFZeB[Hb`a[Q&a{ۚϳVI pYф{(Kf|VN:T[o#<8a“@Ըʩd8Lg nl|L^hO,$xi[z&A}cǩZٞ ur81mǴdy#K`nd7Ei~rk!A.YC^1 u}eK 6Ylkhw(:Kn-6X x? %VC1+ɳ3'كc]U'Ԗ̈́sYyW|AA2mx5xty+ H4=%>)3v@4tce&4>Ý i`O@Zo)T[4k?mh/<+E2FRay Q*ft*D x]. ~elk|o7W:i^PcJG^낆Z4( ƟK;X:ۏGB%T|W…|{ $Kn8@cs}pиr')ˆu-,u`+rR O*LZI*]5K梼i ]߃ژVR:Xݹ2fʺo#um\L[6н<=0~cM&/]g21۱If䭑>BXl]>nj+*yBp..I;,?"phĩ̳ʧ8{JVET[4rk3%-eݳ{GO"kvFRW_p㮥 +{_j,\{QE ߯BgrGg:[n3EwŽm_)0Xš$sIj0cpC"p $=͈(E_!۪VB` } Y$1>,Qț[]nYJ[5ekcAl32J,:ZwB*1F1NĈU9|*zYDʋJ57J:zgzb Bl1~vݐ0lŅ1W뱝rrg :Yj8tTtjBϡ%DQiui9G@13?Evn ]?ZŔdDc~So3ITbE ՃǗaI/#$uYKlEwg[[yKHm*-vp^D` %#K..h:MQ:] y;z/\ĀC ޸=ݱ9uߝ8 ttuu}/dr1Ht@j'aEV2NȽliPCoQ(TƗ^'ϛs]h 7 EAS XJtU\+W@Zl]DPJdVmax/Y);.?eWЅГmF&i;9j:$BbGK;O]*2_^ oIO>,0yJ~棠2XY!`}"ՒRX{a=L֘ҋKM'f0qn'MCjޫiAtN_"ncd}X$BJK5;x@-$lF|4ոfq[V3W_9L> a~d@wO ~wIy>.[UYIn ,;vϽtG}iMNK8֞G3_;UAq=OX>3!sqoI"4 Wbf1XrWY Ń+6n}vm^Z+aIEv]KΑL{m}yXJCE%I 5{.ˀ%; AX : $~+L]^9nu_0Ke[krM-?g x]%Znؗp0k~ ,ýjZ 2i(|+u脿h`>x,`,$~Q3ÎXR`n9@y+K2ɕW#!.oCB !wѩ={s~!UG1t:**]":pޞ1 ?҅A_~HO!\4Sf#jCU/nYbՙUNZc ]}xʼײ;gU/( $T=Ü~6˴~߸4LF=ÿgOP^nDpS1q9%N6?ɯ [p=iulmߡPXtg'p@@㯱:1أ_0Qh}AZ mu{!W:zc eW͚ wpfdIy9u,69P\M#%Gsd#\q_ch95=Te|q|]L "8MݽSKFԷ Z}W0 BE.$/c^QC;9 _B)g}"hڃgÝPwālI+B؄йpr {oVeWպU>#g$Wb5Np<4.,N-L|{)\-+{o5r8*`̲(9a*1sCJϬ9:&վGNQ5w BvSž)YM7Ea:M !VB)k7,9=#;54kE5tsd(6^B̎Ǡ - Ef(~s'*g?o1'xvm=p^8S?ы*h6}ڮ4Y?mSOUx Vܥ 8u'>p[LpFa.5k Z76zh}Ť뵠3ՙ7qVɕn;iq-Vw[||x2OZAvh2iL|qX8ڤ@ZW˗RpMay%;A^3fhK?|xziFn'S68ie9!ev JH6ê74t}$9f]|ѿHHz-ķP}+1 lH]S!Zfl0DJ$ f;<}[}8F}~ cWm#6X%B}U6؅~NZ_s4_a=fe U3됸|-◸sĪU?nC]10 toK0{P>‘hNݝw5*g< n dq{_4ȕ3 Gcs#nJ${]ѱY֏c49ʅh`t5)MEE;W7ˆoyVq#u Nƴ:=B}l3Sھi۱F~|pw485!靜e]r'u%o0[ݧ C>~ ۭm<QE;l/]]@WaQYvx/Jz{t)/#5qƲXl1 "2BYn1<07ݝv6j}n]Z|[ؙh?0ޫ/^Χb ݊%UsY\Zr~h؇=w֥ղE2B`5mu/=gR7Fm/RvǢnL)? ]QtɥQobr}k,|0 gvqss 6\4[]l@3,n&7dw|q*P&gC~ l@m p0R*g1An[@_R1 \%uj t|Xҿ;˼z|l=1r7>a,TSSnAJ6o$'7(Z<aT _jɃOt;ΛNK䃜!hTpѸٙ.$Jޭvrz,8 t)Qndnk0vЏe&r' cS]Ϝ^렴X&VqL/%֌6w_p*0=rdK{ƃ sllP ͼ$"lms/nmc:M@OA}GDٸ@y#2oiR z<[:8bϑFM51 .V(IBs?`e?7qZ:b|svXMyTiO>ٟlI+g{c7쥽AیQbŎ1xX'K kvG`c(k"dFm+G_ ݗ{Ƚ[ c`&U8ZVTλ6*9h C>`gBe~D3;ȕ18_ /*m8ߋnSI 3OL>|ގAO{iq*v^ܵAi-zI+r*Ble N2,dtc+[MQ.[tyxT -b/RJe wWj<Ƕ5IXWOZCTZpM 'Lb.x@þTX{wUnsKa.ǡ"-?Tt8Olݚf5pO6_)^_IR$th:kJ'I]eUqzLQ rFIނDTxR]v/T5N[/ɝґAo2]ﴜv '%;lc3s4G/wˑS*ڳ[fejG#@>'CbrA﯃9?tX_>;H}Ȟ:l~oKI;6iZ3L{Sr'գLwu0L2p|7u3Lg K'JYCiXz^?p ]z'= &x~pCd<ƫWP=&2"g.bY"G=& ʗt#qܷZ~6LO5yR+SQ:wNly_]wZƖRИ.\Xvu{W)1W#!NM` ,!pxGDDqCKoD@(tuJٓxU|*Su+—X_wՍ_,]M]{roߴchudGOq,굋h,o&R_DӢ1 ]v.cqI1w!l^vV{8 IKCQ8 W~amMqitk; M Ŀ9J!E&fbVӴ|J6NgdgtZU} ]uV/iEΙn5g4`6z\H.uX +{VGY=./:# i'k念|9,g4ݾoz X_ u^┎{Б (=-Z6A]kXI== :opV}5_>KKzVeFZW} 1U:h`;nv[U'&mbB֚ T_/ =wp1iهc`QgW~#]hK^:P|ws>Z!wڛ{F*MqlX8Q;QQDrIz_ .pifP޺xh?zzwy+JGLFnG"i&;UR^8)#ߟ;G(9fOM^ݭNZ2x&wk-(\6;"BH\&hJ+]N2FƞMz n>ҽ&w  5'y=,I,v[q*h82s'x3>V"S1Mͽ'-otTfpl-vemYԭv:}ܤ ވOwp};LR s 5L:*=5mv C#>;7e'.*U8SŊDwmFͱ:V0qF+v9SEU][ZFx1G5jDJUr6XE[E ['Xejm٤ݾV^tݺ-b58vvMv/ڡXJ-D䃨.'4%F:E t\6z͖⃉oU1Ecj+|o[nvnGx2k5 Ǿj)wwƵ]ΡKuĺ GYNeq["4*еdDwt!R46-0yb4ca k.ҍQ?[;adH/-#`_2V;x# }e)/wOp-iy׵ 0l!qyG$Jf$5FF&1LK3iYL+4\]}O ݊Hw.FEZ×}]6mz6fטS ҄ʭ{(4q%3C)޸`nciHϖa:|a?s-wGƿMɕd2dύ1+W\2([>hz쾁<{̮-"X 6xGloP~ė5GiAyG79A`EL}oT: P$ ȲPGo /<ux(bh `cWXNr;r$oҶSᾦ PNpb7)6౿L!3ҏ{N=6&gEݳ˘deN_cOT.+v^^Rd t} V:遘݋Lf^BbHD!uWéX{*Zo䤫+V9mKc\6i(W|s}^)ʼZEp뻁hNXDKFwԮLQ,DH| XNK۫J7 $  %IAPv9Mz^szəJ6\xut3^^';*Z_tD+E7աXvC!BD\}ޚbgrW̲}'S\uoiP 7NA[i$;ՄϹi/GS>Ku~${{SJd0sa 3:R~6ԕSva! mhe66 n/IK$8/ 'WTҊ_KkNHc:rn^þa^5>VsšH4~pHE]UF2|cTcŻ=~P`^Ʊw6h1mr/u%vC g v*ş=~w5'ũP'0/Xuݜ|Kuwh줽=HtNy%˶t?PcOdbVbm)v)e %p&ޡyO>Ca%N' wɑZ; 2 ߂ m*[#SW3`=?xE9lȜB> P[ٌFr֖rf*X=/;Sc|JρV;6nO8y;=ங\CU+zIŤ*M6U{rob_wBAS:ZCwG~e: ;TnHJMw›^b Wf8E0xKVAIأh=Xe|Y9 C8Xc[}6z;0-y(R5W>#9*II tcOMsA&wN2g/-Őo]S&P"z{[b GPJU仂6߻@9@x*6_ⳉ(mSȄjH&!3hOM.}(7be1u21כk q)ʁiL^zNΩE}SE^ M;-b#D.Zۻ-,[['fHb-[} Tk3خznPtJD¬eI|%Ep tgЙoMc!@$氶{>vНnn$7Vm*N@/l&xk8xد"LT= tL+ƕIɂPPoFt@9u]ӳt3]quma ZA}/yy jf,W?̙87.ᦻ+#BDA[{)]~Du@o/H+FM:11 #,GSXa@1 W~Ee͗% +X|j"j^I)c D &o='*mp!^#ֹHB'Wi?Ê϶<(eM?™>mE/2M+wMQTqS8wW'K=(]?NtLsl& ϋ~(mKx |?Bt!+j`ZXy^SckI}~9 3 9;֗t+w^(J/+_Yo-%>i,.!D#v =7A5+_]G`?$߄۵M|IPox|1o\'?f {eyr\Bn)7'v&+^0}_lam?5>n[<@[%W~%j{ʀZ% 4an|M![ sݠG 8i0nK !Br~=ˍq؂\bXf1oxUE ngs— VFX~`nQд'O1+ڗMI!qzq_%$!qZ -%/W~BPcZ:P1umuB?%oJo8䀋~}vTo*Vv_$'݂!7sgv,]؋V?Nsv `!@ED٭(X5qǧq?a];w%bQj^fy/ zޙpZf++€=IsK/iMDj5/ rI}TZJcX7#+JzFO`co+;| JrU'Q3 ,w6ne˥eϑ-E=NH-u aр݌t+&s"-Ju3:} <7| y1P,V.D3=s1@f3 8;wR|KHD`e z>5gRܺWY^ (t?\&ߕ*tᶦH]p`vg1F^.6c4_? KXaP2`UWZ{t\q>K(t(i''=T[ldl:>}9 U6ȦmA5z|X4LwJpv(ݶlq[aL]I1na 4r4T_YBg<봄]c`n}}i(IW$KhN[U"s||%cUP:*vkB16\^?e]we B~ pj[/Mc{!חg[en[0 Mi~q`ao18,L1{f=tBG#rǜShQ ']ۑ~`J+ uS+8 }O7<3I:!q /kϻɗ|FF?R;ˮAysƹo-: o|L¤?)]%yJO U8sB*A$w.辗@(`=*Kuoq~/ LV+gQ#BgvkUՉ7'aAZNg܇D$:[e'6Wu*ݲ%tbEߤx'Ccv Pܰt=E/A/d*ğ7nd_ݗyh5xB\cKqީ'{|y* g=Wo=A8 ީدSa֯?Ki5恁 C(T)xqz&U饞CSvfqŽ re>>*ɕ=S'-KߤzThLSNv$thtJg@ןѕPC:Ks஧Rly_AxEnj^dH5AؖYcǶ뻞.d4h@q{6$=_WHzZf|HR%sU~W:v; J/m+.LҨrgg;M5^J`Rj}.s nF^ri6q,lm] Vg5_ ۾Q[tS)6=<σr}]jK">2E3Sw?S r OBM$M/aˠ˻*`-F,C?K9Ih]6} VJOZF܁ [@vw!;?RoS'}7A=CC=Tre cc*;WB"Lgy9n+#4Lr/붢; k#>`W#vMQφ R $OShs9M JֿA:mi*[[/sb?ꆥdӤy\* s ~l*e+#k.`| w ti9XC /gq1g~'E&\뒎@1~"s+HRϽŠȆg(-N b潺$>^ r:{g'3|WmEv M3B0B;g1;#7( pD{7B PE+ 'f/AZ÷}RK9 8 >L'1# 4bm> wX;XUFGjN\ϣQbZo1sûxmLz-> T{&f΍ ,/xwRmgmEm^7-w*AK+zOKM9 Sb~7}szrz%STV:i&|կ1W9#Ensg5ٗ" [Qb ^-w. `SNv> ]+r'^fsM$WVz]QLn}Jx$}^wgTcóHoQK+>Y Fљʸ:k{՚yܣclp[T*N0pĮWg}ʊ2bt\'.a–^4^Zz.iX$.n-?ొӾl&tP7ZzpmR)ۅM_6aJ:uR3x=qSW9WY{O< \{fcv}U]iSaYӬ9- O1 K?睧MEvJ=O*7LʸTx{RvG'VTܒOxţl|@~0TQDl3 0FQm >?(bE m"V̯@Π2)kwjh<.k(Ȇj"n[Vny؎n/ű-i:~D+Wǰb{[ֹ7(g噎EQȕ>}XRsZlLtLL86ܫQCmS Sp$~r M۷uR*Yjg9&'}Q'+$\ aG~{1NAX(c^\@33@o5:X'XΚWp~}&r. ף1$} rBv"Q:NQ:IL*N1vm䶀R')k"]L)#lTdA^~q[1xY4?2iS5ri ֌ x}|I6,_)M,,~4TZ|34&&ag=C0%},-Z(:92u+wm7n+ TAW\wf3E$-,{r@q醴<@ױy:D";tIhr`92=$bSG'N[L7٨k5}]6)CA`ՙ\~bMyF5A}/+a-OhNd-K<_wPqb/}MK/t9d,Iwi)l= `pf7n|z#Rk9 U=cOء|Z'6[\L#sj~<6j:G!- {:'ܻ$8ԕ(a"r |'s͇3S^=..:gtL͔ uq6{oHh0.-aofÔ?^3l}ښ y%c404R^gZ:+FH(X™cE]GO%&{Dž@<7M\[AWξʳ!MͽVދEg9o1&]0 oxLKc`hQr>v,Qd 8&u.S\=|-0JMq1g㸄v4NZL xj0?q:Vao3g8alMBLg|zOqƤ/R͜B 9+* -レݏ%t,5=FVF ؞UiudSž}ܛqSɽhS#V$.ghϘjTϾ6õ 6dx&[ tF ޻MEKHm=QDH^Pn)~ ϫ#d"ʸIoHVLBjqI^WäU҉j9tTnr/K=^v.J7[FGeƤVAvcN+̛2Koq6|}tdc=85ވu^C3blDcyTdH!^7.=7J`J΋al8W֠)yǘ]D SNkJi*6 KmqJFߺ[ҤS`Nz:Rk[F3Lȷ \ZՑ_ 5 ŕ>SJTlNSlezdO::#r*x3iܱ\FZ ^+n*_;5gQkJR-<* ԅ$>]E5f ctlN9<>~lzZڊcH8ĪB&iw>IN[Q k}67y JeR #*>{] C^Auzvg˶AԐOΜ^7}sF.XKAG6km5 ,(%# F楟1p2t-F_Nڃ/N1{@cEhVm];Վf)h~_ X=olw T{F+h:qk-I`VS\dŐ K'덩VW-DݱeoY;KsPE+.\b߶q_*,f}{L=OR(8^[߬y宅gުl[aEREqٴIW<;A}z]~b]I@r@Ja(B3ZaLo!k[q=wXc;/OMbFǽxInx}#pi!酚U}y}]0a^Ygٕ!'@ 4-5 I §)>}K( ⋇OJ7~4_ZG Ť[_uuK)[[xs`iysg]'  7% PBȜ5SgXn¥x]яSv??buo.-%Cq ֋aU=37k>R~5c=x,ɕ*}{JB7<+Y$r$0&Cr"[[kv+GPIa?X{JUpX3ASYiK:U^q+6yj$W$a~Qɕ}4+5}i/s4+W0"ɕg+osxO5SJ-]ȕgF$Hgv뽛49,Ja=ҝN@lr݋8@@F&%%UYHg:')1+לݣSxAߥvxAK夼049Yo9x#M/M9RѭZ5¸՘UVI- 2+4|9ƫ%=~XűJM:z.ix x;mӢMe~~?M"唍"<Բ`0 seGޗwE9p?cGS0`vڜ3,=(t;v+:?m 74!XE8c|MHOon|ГJ߯jWI[FGycf l~^a|6(tͲݙ(u%w='2n^ Ƿ`0FC}5F\AT1}4Nc(-5пT] ׍m.Es_6L˼٪Xi$M{|#T}$hѢ w#SslĻ+$l"ˊl(~rڅ\i:p8 mVV.;U"/xx:N8v>wr,rJ'W]̙D m(=,촓rU#Bpk+Qw,nOWocaWM# sl ۹]|;򔞖eF鍧[VLuskF2]ZMQSJG٣{K=y~ٍUö4/ۦpaFRF:ZWEc2\HJk7-vW^#6`u-R:~챃o^ZʕtO47Vbrb-M=ne͝5Ǒ=C,p:[k٧4 -O5K_6lm R'3'LApKB2{j]͛͌S8_o@pOýhvջ+s]^CYV6tלJ'y;{્⿰OK8m0$_ ~0LXcr>pu-r׹vH_, ~i51^Gl#<]Oj=$ojgB']gd-;qg# BBQC{쿌YܤuWÕSEfc>5oQ$Mv.XB"2Yp,K7&7uBxˠxߞ1Ox! 24;LT1GĪ&o_ɞ)D-J@./ gz6n_ZR]GYߕg68^mm<5p,KTIiNN \yIo$-څ)b`MKvp*涁 IF o^<#NUoD6KhnU.Ho+_AB/4 d'ݗ$#+^^ȕoN,>r#r_Z\mW E+:6Sg齮|tL2G[f:2NSŌU}vTdGٗa0O,Bsx*. O|mh wzU8k7d1; A|*GZ*F%- $ rrԎ(mFOy^i\߽B|oQmn+'emFI{^0ȕO٦"Gu PNRЏcxlYA"v:6{i3|Z:=+u[PAn토\',^(*7\e\}ijM8~Ӷt 4ǙWh;ԍ >ʪ  ݰc,HA/X$Ҥ Ei f6>UU 1vk6T'v^x3hk 'gSr5w"\\\Y9c&wWP[8Hf z oLnH "S6\Q (mke'fg#ei =N2Pѯث~ eKwZǿ$ȕI\`]iz$ZXD~r%@N"T}BnvDJi=œu_="vX[7] z9p)~599yxEz H |nP!u˶ [k ]QoL *ʱj]4T+C Mgϭ]wj}ڽ1[C3/gne=;XHywjmNh ^;9/58gat?fAoAGQs90_>SzۤO{[$S]9#ѝhc(|,of+#ϣ텻%.zMB>WF4^៦[ 6'Q]V(Y.0q|B)(H4DdehϣP޴Ja%(mű]#m #R_!;.gclCsm^綒ܥ&Y}Һ;qj})`|]0Z|Q*ޭ䫉$FOO4 Q8_j!MrjbJ|mDm2v1VBFDh|2Q8̻Kx?[o.΍gl+{oY(!~CNTzJ('VlT8N) [o aVg0 f}w-|3ЫA?F[)ΜrH[ ǑH\ mg2tn&9]/&hW%m {+7 W97{](#?$ %ըIiLE痤; ؙ] S2pĉ}[t:qܹ~tq04hf AFɾ9{(JG?q$?Y#t˻W+C[!|$Ax{5vl{6P1r%mLjlSn$sB-#rԉFq~v75ʷ 6>ņX kxZwB)vZuGN̮F+KNh Q,dac!\9p)U݁n{ PPm=۰0fj73bF7QgtJq44/Ot [4&iSS7,ɘb=*$raPp# [}B4&c$Loe@̄vp="@gNYw| fH]_"PI"I@u5o(C+>\jHX&uznY,Z.8qSdli^'p<-K 8w?y,C DUG:k8I.,[=cXm/kd `5>D^oF݊[6txOoT-Fۦ9. (>[=0|&|Dlq 7X.D(גb;c98"GGtmj!GoZ:3ܑfCv?=Bu+>kbBqYl EٯQȕXlYv!oX&ccZ8W fץQ$0d0$sG<栆?DF1d [0rw#8JK1Iϭa[pȗ#{INGd) HS6AU;aNY\VvZ{2w+L:[?m]_0?䖋KSrD}8/QD]eB Z[!Wj8J?Ɍ@%vQ6Mx}7[>c dh:}PŰNb:j!PSMwZ{J}]>*_AxՍ| TLhlFI7rAs{K{aUU8A5E lDrnSz6Szѿ}!Z13o=}N-t|I7,= I@Y.Gk8 hϑ{z#^:fˆoJp*ƞ޴.9gH؊Z3o{ȏ!aj~\]&6mxDVwITK>5y>;kiEj(|Yq{oLu8]ٜ?RCWŽ١#-,s7LO8dt6,zG{FrOeֳXPh!&- C|8X9aQSl?%qy:uP7 njckM.)8eѩZɷE懟8BMNcMןme&@ӹA/wa9\~ZxH8hf$nVO`B7Wf޴Ldiu;ޥ,nut/ yQG_=G62;VSjFvsGfɚ3t(G Õe =q-!_:U$_;BK߳oWnM@ TvSN>| :Bj B˙@l1!( XGt}Q1R n7` ]\ģc46`|} SsLe=wyb_؛+Lʅsp\pJ2O<5A4I؀A=vV(ڇ:(գ}a4ʓGv{9t Fv6>U5fYFO{*z{ 76o̅8[wp~=TJO'O<i; b %S; |JӺí/bѢtw|(DwhJ=*l 4g!)n8 r:D^RE,>,~$Ƚ fApj>B6+ I"]FI&9S 쉀9E~"~r@Fve'3fb76£Nt}4{ځ2kƲ%D E,L9f;/}s3tOPDmz/8g|KÏQwizҘILoOXGnJ:5'q2i=^,`UX(O- .[c]p˽Aräxfkްnؐ+_dvv`NzH{uN prENK&Ӆ*GGH3pZ􁷄L->b@o(ȟn6!sNq04# k`PtP|jG} ]G\Ռ 1Nt^%6vnQ>x>LP6VYK1An@~u>* h^Cbx%a.5تtQe+A?7# pYL;"Y@n:4K[B>s)\ɢ/ ;.xyҼo6g;y/h5mץ3pߨv Zw@5[xNpy9FJ;'wfÞo%~VYLю{e,gs]hY`<`i~?3g#ȇN<=l{K?{"yM}n*c{P>3u#= r-+ofa($T>gN[t:VQ9Xݴd'o>Hg)e[޾#v+wN7>G0ݓ/U ެ)-m|!<%l7{ʆ0  5ht_*.$W W#Wr DB5)uMNǃ=\ٌo&)Db75`N~OY&8  87򢹅_L%Nޟ$T=* $Wd{ *^Ӏ@oAw)tlOb47vNrCAEFr3NSAU&s^a$|fcv Yo'87~f%ZlΜ K Z4WsٓkKm6nNкP$nzY}u\]%w p Ӽn H BRԇ):$Wj#b]'+W-V'CZ_{t/>79u7m-mYx<jq+֓Q|vRrzN<>-{o:d ZޘKр}vWgqc?}ܜzyS[Y+JxpܻDVus~j9 n*"ɕ!WX]n/Q樷@7E|ou'оgB"ivxL|kQ;Cx>hX /ҎUhL:qI^Ʒ*K+ vϺiݫFx%i]%I۫x.*(wƊoْٜ2*@z:w+ )G$A%3 D}XDžp3O x)HȞ6>;Kvv0E1/ta:~)%o%7}+jMƮ\RȕWZ^:0|ؤnzh#q3S{O($) !X8MasEխ-'Ձ\$WrxX$Rx^ə79CײƼOMUjp@zzC4$[LwZgf{1|ua{~g^<1OJ;=֤xeM%>yx02?ݺBr4[Q8~#0C/sЕu:ORy%:cF5b6ŋE#r)[1]75fI2NW&t46%E{i"$XMNd ><"^cse:n`}ߡ@Tb(` H>TC8?LH+91qW:^? T:yT90{!;^h<^ONk2{{3\B[=5~/Ds]5r2\9 ´[лf*ݕڈ0UEsh-*;-٘ j^kAB>oP9ck6ϚƯVC{-ӓ/7df}waPm IhCӢD|3"L1WEreH\)V/] /rMʛU_,gJZi $++Oě :ZRf"< LA@dː8K KD$v$ADГкʉP1tjN$5e8nNcĈuQhɕm%6:T "~ztI(Yl/|Y "dܷrѼ,C 2BHuGZoޠIn䋛ᔹ[B=7TCU 1,+hX-jm{J[Լl d,)7$N_@t -ݒXwEHm:,A^2uo!+iV⽶ˤ H48WEP ܤ"?_di|%H &r5n|B"J?Xl\\#_[5û"Ve fq]+GgXy 8uj{Z=C0nH>vPBtVԖ~Bb0tf/[8ҕWΎ]s R*<괥-PhAw #șVl-F>dž,+77Kua TmWcUK[7BDe+8]|(>@ݪ*C'i5QIո_RǷM rN.se0A\\^kaOwo{p>Z-ջ[ŘLۀ׈3x3;=cmӂVMK ݾz=G >_E/xM_' brw9e58Q4YE~]86FCWs$WNh,,{-gYXe=NWG`<|ܟ|Ӎ,ʎI/ȝ^ieѮi.vܽҩLoTf]i Yg ^k b+=E-9ȕ{a6c+)VwJCVȕB6-%uV]N%i>?<1|*{@5u[ͺUHWFV}K th yQ|RH\9^B`cb&JENR}n} ءzx/zޟd/!Gd:{XuC97ܰuW1l+6i ɕAJrꦿn jXv~r吁b5,T[e ^Szg^[Kk e卻Z:7?xC=$qSnSb΃;p透Պ{51W/.thEii,t2[CˍBki:!dޥ,w0 =*p]Vbn܌[ɕ{IY#sp->Vȕ9u tPF5#[TՊKI% H&h\e;Ÿt"<ht+ <{dP[H#(4\AB:`/Fy5AW=?}bz]ȕ`$wrOXۏ܊Rn[SS组VIY|t,}nP(wc Y l]7䩘 [i1VyS 53b rM(-( >'{J ˔QOUTm 8an]UzI2zr;+\@m=2+臶GD܃}S7یeꜽnYZ0@^ditptd #RΤI.u+ma-ሜ= AFS%~V83X^: :Ү,I¡)~oƻư[!Xm $rxQLmW.r앖v9 ^鸋ˇh 7%3]8F7Փz}60 g& |ż9ɴY ; _qcoi21{ч4rS:GY~/?x겎qJWSM7[a~H2mG­UZ5czrb9Q m^]>NiR.*:r]>Ì>t B#-*NyNCLJj[XBϤvtRd]?L)Y=hoI}#5/>JohI_OOGVfVrj 7Ru)9!髚݋^fk4m$z* >6dCP7\'sEa]%pdƎ N!vo7ݼ[vNr0_\5aHs[8: $WLhVC0lĪUZV\b}:N`{B EϹg+BG;\}iTT|R҃мw BE%7j>.tF ;)T/o!V?=Sp s&|4uU"A`-'x9{;p9W? J*zFeN}q QC7 ,u:mFY Ta7ϧZst1ʃМ.Jo԰5\3Pq_Aeޥ7jsӽnOՊÐ⒓c)|ѕ4?%dbj8Guˌ5M.=UNC=![1U4\Wڍ{I 6-xܡ KR>mHzjCM{=Ex5FVa/l7 [xXy!W %:o=cqH)4Ft%Aɘ4SE-{SfQ=3{yKE ;t;X?eGuS=S9 ٵ' T΃Q_Fț@ 垿>-Q3-:})p7 g APROwfB%{m Oj!yA k7Z.aqF_T-,j}ɕW88qʞ䚹aEyAЉ g"B}W}#mRs;+꟨e MKy ~ >d/z9Q$;tY ?;h2iGi_=d 1iثds8/y9Z(A1mp!T8590Zqߩ(rL72..*RSMҹou Ps+ϨJW`}lp}- k>of0 Ι:Pf8sB⯬vAݵSr_ b٘bBv|=mUrn9;Ggұ v&wfluJ)X9HUay3A}8Q\z}΃n(_u,L~.Mc9%a0.'*P-lk|ͻC}Ip<Mtv'Euݕ9PWzcDק\+s;\2` n*|6vOcObPVV_FߗzT/EMŽKT)j1t-cAiƒe4}kKɷ!P̫(y{asJIQԧk1k}zL:^oOd|1Els8@Xj3ޫ!2GKF6jf}T[D#mre.c B%> spr*Qa@ Bʛf'1x3ΰiT?[y ?F(~Kj`=O.3XGXxWGWp8'HUjST:l.t=ՙ}3}/SQu+vsp*t dfP@L{iS1@;Dy*tY9MY?G*Mpz@.!Y殑88zwT8%z :Msw"y*uީ؍<" K9g'tAS1bI]>7Ȥ-J88ʩT!oݼA`{]]4>!-& R h쾊9xX!, fĉ#w.A[^cMJf<"TN[bQO˜SE>WgڗpciE*ob9^v'.=:哷_r1:=#)8[0y^Iۀ]{M4rc{k}}B%$A%Ui˅"/ٖxeVL_g/t/FNt~'nj4?%VH2n;2sH(7Av~/y*b7`q-IJrM8*dt>֩~qDn9;1 jӠ.WSΏ31rl݄fc~c ][Q6dK7g V{(?+;A߄3؊%g#]q*<ØEo erCcưvu(ºNϾuM1"D!!Lwᙺcq8i_wa#S'o=_<2l$`&P@N/cXlm@cfhuSi o(Op{juf]OG]51\s2NYhkU} { '"_dn[>G_pT1tv. +}Mڈ<ɕӦ+k kgv˔% +#6QDWCSwtv*ܣs(v|H!a"~FJXW64&m+=|%e@9L*[ܓO{&,?H4/V, No$MqnCݸf`;A: (,>ޡ>| v"o]Tu tIՋӑ"LpZcv7D3+]ld¬ v?v>tIJG^ dMmj԰N[rdi - cͅqvGٍk "ޤwsavC%.7Zi륊X]EXK踓RgZjUGbhpzrvgGԗbqDTYo{UVb֨>Sc߿F!g<`QP(K&yoO}ƚᠷ6a|$eËX5,9^t3NF>陑+{]; J:GM~<w9brc fnK3J?dߋHQ&r(ta-NƮ7\iV}4T pG/hg}eQq(,[ [8AQj#Xn1G >Bϖ?RQzbX#n]>s@l WX NFs ƽzpp)bdfGXJWu [N,'㳻|Afk}O^w0)C7.ҡ mbr&[E(@CH-EXeE泥!=T\ W&PMx wK4a&سP ^Լ5z=;^S8"kgdmx˞h_Kkg޲B{4y^),mC>eVn֘" 17)mozb7VΥ ﶬq_9_?hCr e2vZ}C+k==?ݏ1h?̙а'z@|3w B tC9ųVfm1ctqqD9Lace(\4}iX4 [VUKP-+Bi?`|&YS61]7n's{{5\YS>-I%o*>{{&e`g\=-w{N< 3T[POVT}u6Puvt;/ns_47|%jaǝ7h3Tޮ~N(oaŜiFIJ i#258Jw-YF*y}˖j~~eAb!h ;sfz}`j:=,T{ 0T%KϲҸjCpN yVsSOޥs=iȡ胋n^էLAi _7g5{ e#x[}wH,OxCtIPݫL縱ݬ:]`{N1mIVlv `4y&8uF類 &bBYhX2cޏT|$Mka]וV[ma|5f#i/'C!t>rn-'^Y}gV`֟O-qD-wսK3ZuDvs#1'+cZ "p]ܶh K{'(a1+~gV ͼBx^•yb^6 +F3}yI\T}pm} -GZ=x"KB\kn_ҙ21CMz3%_7^>*ҿ%P[gW<:Irgdh.|>0ʍ$W k{āsW)}q#rc&b24}"D`n=]kq<4bx< < 0,GY{e3m g"Q]H뙶%ʷ$C rJ|~: @Ore?o?c3G+}?G  Mig7q)LV?&xfX{*+?%cu[{yzFᶎX9F?_G:mHFpT` ~ع-_]hID~ oa =ɘR#Wޘʾ8u.Zy="5jE3M茀*uKavXoGq늵rIxQArfgNޘSleŞ+u-tX@KrlZwQ$io}/j}zh}98 AG:y5f;[y> 2݃gՍѩbۮȂS萳L}+% ǧTWchpބ~.z `٤hvО(X:1m/#o"e#Az͕rKFѲuLgđ&jZA.B* a <MR5:@/G׍V:UaIiQrn ZeP+~O*$ߞaI$ţg>uN"F&\-N!'={7SD,` p#'%v)ZTA7-0?O9`s^ )M1>G`c#&%Bk/ e|dyY&b}ɃSFM[|ţ6Ѿ)Q6`9ćJ+;*8>g'n}ܤ{lw)xώkg*(G-º[ËLǦKt[֋}&ako*uʦ絺6%^34hYuX4ޭTp0}>vEL(l-xƘ'Ӎ3Q3:[3e ߦ};&WI3AisgԴv:5z~Nӭs3UAWL!rB*vA)8knҬXL7l٨k7#=NўA0i%v OŌCgǘ-][m2ѭF.feTMw/:VfgC?:7B"A5ہjm$[8yIӊ^z\ϼƪܪU//}ox%׫Ġ%I<'3}_3PC/at\i^"R1r%nYۛAF~bК97}_h$H/'RR m[Qm:TnYٰ[%wwɤӃS2:6 #?;F :u޷޵\t[Gl݂Kzμ6Դºmw@ )-7b87[P8N`Cy4;ʣQ=2[ O..gM0zaM32[UFl$WK2푿Fg[b];FRY<39M|phtzƯ’I7NFAHۛ~`CZ]n\5F'[&8(wK┝anxG{ ۮ-me LG)vٌ,k%W;3o&.[6ځhd}Q gKeFhI^z|rQJB <N$FYca4eۮ{x~)ջH'9n@V6m-ZI;O?KIRAC:> KfXm9՝S[\B't>y]4&3J[_Eߩ4 i^IJ.ϖQ=}R P{*`gӾ mEFaFݽhQ?s(4yIH|ݢo4Õ&3| rB7⦖`^fwcu5I}z?AC9LHu j~õb\ 4ϯAr-m'__ NM)ySLf2֦)6qߺ@iNҧ3j5è:Mv-;.!U!Bo8Wѵ[qv 9U<qI\ Sx@ ni,M ~b/@"qn[+[fm/=M~]τ'SrE`)53&){GJhOrg:M”6O&2N-hLXR$4/(t #NFpt!.YXBFN&BiL[U{]ry?p3 F\`O[,:!#%*|N_]sB=[O젯Bhw[3rbe;IZX?գ9;subZ>IQmn>Q&Ź &My*\faB0j,Ko4eFeߌ#;ۋyZB`Bߤ:F -Eh K-Aܛ޶.LmjoûŬRFoBZ(zdU,IFtmضܚramT6f3x;&Mo8I!.ƲS7OI7OD3(lyq+m`1{Ww*L7ITeyJx~_&O~ ũ׉ '}ac*Rhuiٌ67Kٙ{TmC00XI7ڔu;X!8L;T!g:(cE|7_n%Z(#<^>s0QB FFQϺ_ZM3{sAȚ WSP+XOCq>S=+iv7%yƵwQ2 +rN?f8 V2\Sɕ{',m_O*1H,.~Gg#<-}nQI4< mUiEDU:!v`@^<ﵘy>N._խ1-3ZgDmT;_~ȕ ֝:{_-d/^F)1tJ{ L(QoG cP8]q-{uswV^}0x˜EL> ~T{$,Jtp$WE.*U=_=a8\s7L\Y,gSZ;7bAM |nVPozcw1#9 SpzFkԥB?8ntM*ަցuЂ7zcv&A^,Ì4t< #ܲ ϋ+w8;럖=)ʄh*o1]Uml4)--q}N[ZY1;w&WL=HjRND8O8'-JTg0/ /@wpާm[_)Ɇpو{3kq;Ivtv=§}|zcAU<—|x0!+-"؞=rncjJ9^ :ۙX0]p՜wGλ]T4 4Ml PnpiXƥ χ.ml5|,M]zJ ϻG$Io~H&ܾA_D\1s_Q@@x͐)~t:G3#d34͡By*=qIh':9znwx؈DӧOw߉cz}x3}S )X^B2|}vk[v,Eq5=zޞTHg8 r1)[HJDF/햟A1cVZ |װb"=P`vsͧIO60|׋vMn鬅HD|'mسMiNڃ'-?Ч-T>vͷR{ W^U9$= ~2oZ@[x`?b4(o6or1!e[:I#Im%AfKd[wWnQIljJ76T_f!o_P$"[[k?{oP-i"Oj"}R{[/띎>O<)Ĩλٟc5 &.@Ue zOѿ!VȕP LZ÷pPL#1 7!C:Fio29\1I ǘ0.vg˛/{ }] {ŠdRՏJs?mٹa]cnM}^ȕ"|~}{9t?Cý &>C%9b]5:I1Rb>}*s0ў؊rF8 UPScKiFt%:z+Eޒ3Uf\ kI&hKWo&NMUh]X0n =T?5+ܱ1o}/fA<ݡ5Vrl`(VŮ]!+J;f2iѵL㴷41ʹ wl"4 Y6V#tC_nh1!$Wիhku€F|6pDz~Ic3i@#X; 8>K&>hΣ5Pw{ݝ6;ɕg:(=L:'=+0 0Oʌc4kӕ]Gy6T y&taT\ٲ VFW1J=gfb.X^ |nb%%x1wL%H4:Xr*_[SB'xlr|Oᙾ<7$bE @(1ixY7H!bɕsȕnDr|ړD߂ۮkX!t;UxaP ɱ_bE;|kXĩǵ+;VYϬ93֟VzI+nL bw-S@C9&V a@FZ/}RH\\wCwB+[ک|g)Yɕm񄺐+þ#N˜ rre&ǮM:]?\E Vu=vSh {EU Zx3%oT:P@*|_>|? YNqB<3U7VJ]Dz;yx| WN_'3*Rn~_\9z'yf C_;4Wp}#MdV '̚zeA"!"c'q7-e5qD})ؼw^n0wSv#E4`Ud5>_ ٱ\&Z ί'ZZnKQX*X i8mlAfswEd nb{7>E+=Do07#V VK=\e,۳nuiF')$7 b>jYGUX@tT,ҢFW{ w6XXa"m1}n]O7zڹ0Qooݟ]QdR2|u&72op]ԉoqqi0: AOF W=>o(udEMYH3E6b;70UVJcS!acsqcO84 zy)[8^"-J\s]pG؍yxo =ӰEj+MOD¶4 z%2,?^q;;n"n>lgb3XT.uB1l;t$#O f⩏~.o*r31sSgAK}\9Rnsi?LnB7Q06W) LZ *i%{!6gp/BG,zۙ?K&H-[Lۋ{b|cY+q.2J!TބDha,Qjuy'NnV&e+8MNXs(SI_\O(lW58>(Ρ}|]\R9 ^($ȍ'UC*H%Wr/mS'؄> E篑w=:ڭMm;Q(4!IyB[:*.K a=ZaeoXX^I;C]i]GL N$Lm/*ȕP8O& umdd+0ݍM]0]Kdmu]s(ܸLz6z<)q;M]4uJmQ֌a[3MfLz/Qv}vo*S&zo:m%Kt Zz[sa@vI6:4;e\y =r}iQkW)%kTϖ*Xz1B%H-]dR*b p[ 5C%ԉREtnȜHmJ<^6;\ m[7M Vĝ =Nȵt/i.;?tO۵X7'Ne ]+Oai"u t KM$W\f \M?m!<FqfXQ?iͱ9ah6BA,5pt A!_? [؟`V5.y)!9%o sktj a~FeQ>?4Nˍv w 7 /@A\&C,Dq0SnI"|,7 s2JoNr zYMb;x6Ml7ݘzQk[~Y@}5XT?6am|FDwxɧdO}-YT`찡tVf%it|9SGÀZΞA; *72NrgIo3&ȕ}c΅cQ` _}NxOpDf<j½yV>>INl*a{dc+Jwރ8J٦kp*)G%<]'5侄_Fn/<[yq͑/w|7kz,ϋj"*]&FWҵrrdt>Nfz0$ D"Wڄ8\١{mBy[6.r/!`XhBݬgW5C] Ad[!WƀC"̎iik*pv&n3Y>6r2{BGS\yq #0Sci]RPxm(01nGo1AC=u?ؽaFIh[_WG*ݡɵΆa(OhVu-rØ n+Aj—qr7c5yDdB(2i5NE-uljٽ X}+SB١V5 ~yPbiOoƍ{9a_ؿw IyE<COfi-Ox4Sdj2;øϥu7;[_"^v*M=#F9\kd}"6O X#pX ,у\x+ɕ~s<"+ۓ|lD!K!@2$$a+֞F$i+Qnw(Ͽ%A=W:{2|!z%;e; >o2^Y1n" T f&9I~j@-kI3;ZOɻܟr'&XRMl_us{,o$Ǖ%nM*ْ 2CXޡ%|WlglvMXGt$qIf8TKW`}f ^iuР{֨ YhC6u*[[U,0GD?Y 0ҏq=f|w+MrDDuۍOѷ˻8[xhĻiZBvG!lsS"`7 Vrl⇔]wy]P3u~(g2)r-?MFPvvFh?bz*{6n9nmi{ٜx&wK,cm_JnI3.:Skҽ |9d [θsQ!RV)_T.o eߏvNvEE^#6) Z.8I(9P<a[d>]"Vw:H7+}>'*{pX~ 7=­ wV k1=r4Dh=X6&vV8fVyODWruutD*RNZ$qz^Y5Np.Vzksk_׮/n4k^}_2]ܽxB()/z{_n69vpމ)ɕ)-'E{1 0A aEޓwSェ bV_xV7X-Dѯ@/T 7js S:hS{< ܿaܰ$ѦAFݫ[ HN:pwk% {^ ܭz1$әvchkIMbEyV.CQqFn̺Įd闰nFNV@Q9&+αf^WGpU3-;*Dr~3tiF{l"B>!_iwb&EF{l~߇nAʋDy}KiЊƮՕIШ 3m-!߾śTƈ̯A~y]T䕻'@KG;Tk HD 7[[ )]_`V#K|u <9Fc)8tfh Vgs_M"F#/:g J ?`ηb+!Q&λD60J ##ɲ͕c[o$Pث,}|Dc$V;+ó-u!r&9}o)Ňg}rS$iVxCȡc\{Ticn:Hmo׸jS{r?چVLwZ+ѾQD,ϥm:-VB{>j|ߚasfA^;]<>j1sV8mB%I`) CbpkniB3~":?{6s]I`y ʱ@RFUg-y˓B y#(4[qVL[trhY`%|_ W]ĝsLu\gLz[RPL>NO?}Yл0 !=SK%:cVڦkaAQ_ 4͸'sot1{Vp(Mp."[Z!J':a涨&e_@EvsEH%f,Dh9:8#7\%+kNZ4VκCڼNUߺ0YbJi}g ۃPr}DH~?_ICV`=OQP-"4 m3t~^J~Wxݡ.4J˥~*}؎9it.zoR5#$ԽQ4~NcMsru˶eC>j%rL!h9h~&څީ*b Z yAh8HOp{ ?1Z٪zb$Ml1nV[8el%Z,.׆H-??)U^81kq[Y?Brol(>vN5([}p*lzF[? v[)WCԼ%oO=L:±AxMSȕ*>}ѻqgꬨb`V=c<2X󝗉e0)Uto0XO_7ԭlU. ^z}=|O$4uǻE טEtX٩ 5\ [Wz߇/~"'j Ë6}yޫFӭU:*S1ԆIk\H"VY6[jy6q31ŽA 4nAx0\zf٫{Vqsq{i.nɥ]Q+D#vtk>rPc:genv^G}v2Ɍ ^X8Rr.$}^F?`CDOwypW+LZ΃.Z`N4 oѩV\g6ri03ܿ?;A|}혓ݽ{/`!)FNÒfX艁w*zYb[QCBZHimFVTJ{/2"؟NebԩnŃp7:@dfgiȥЭi>;Qjo ?e0=Nⱻ$%o'eW Y3E&$: y_:Cc))/b+=L +Ucm j9jƽ[jOpX%i(ׁ0";}&ܾgHfk+m:WEF?a}{۝:`q ݬ#ۼfV՘J9hJ][λ.rh[Y UhiS!7aGhߑղ丬 vt=Sk]H2n280on z7vk:;Ibv48< ?{kFح t>u _ICRpa7Wck v f4he@ߧmY̋f&jN)uw6*NOg~ޠ'"}C voPpZ|߰1 Mu0 ^L. k춳9j !yf)[51j1@Ν3O) ÿeD,?3J! &|(TBz| {د޽ \}*7jkAs2jVZ8΁‰;S eo`d;JMwK{ ^ɕLq81'VJiHre?<*N~%-Ͳ ;<祷;HQ9,pR+KMڜ`x?x;IbbX=%7ٯͩ=X֍MvJ4j]0k>̴xq#)5v[te~”ӱ1t9Zi\0}WI>ێT?9TNǚ,V&ef:bsJbg?ziV;텞I1YJS}.VGp %hwOb̢3,?,cm~!TTW8T^7sմMuPO> v=JF n3ZzȌ;|}om Yxfqrv]X)Kx|MAr3bvS}Wm4Gg8wmUP'a9gb_f{ܞމn%)EPiS,BnBIB; qбՐuwZ, Wϖb,Gh&aJL1yl3*ݺRu7)8,wEnq֋A@SJ }Ȧ0WV h%eJRR_]"ȕ3aW2gqKhYDǜ٪K[l9]I]TCK˺:-mnFoI\;?.M0,fl 8!G? &$W9Kser :[dʪt랝ڟɞAV0?p9.<0M_.:F}i/ x(5bhbr8߻XM4eR2Cr )U"A:^3P9XwP!WniKgF4Jvн*4!Hd4$Wv]/0Ir*|}+h~XF*X[R@+[xkTذYG'@c/5ވ0F̰ P8Z9yoA>Jh>{`y4F7H+1gt9ot) gd%7fs"mgoYC _uiD#<\Nxj"oc L˽y6|nXY mS?b|Ɇ}w=4GuV~{ݝ[Ya{>č*HQKhw9RGM&~ߘNC 4LKizRx.4agX.\V3_H3u}\T8Ʃ1&σ*8pJgV~OD d򶬒\\޼| f#& ; 7u) S%|)WDe@4lyDXZ0MF9/dNn(J+0moSq˝ !Ʊ3JtlY~Z"e5vS)5n:5}++a ӅǩX;_xH$BtʎXzBy(l3Od8N*6½6xk|p`1e}"=֓0,d6g@eWa~PAv}blވTl2ƟwNgGT(̥~XyABrK*~ RMnZp֋WI OrJL؈Ix@wr[Sa|VNKr=h @9RobR|`7pj (X#VrH/<Ơpd⍨ ':Qvl}%EĩfK%@sp*CHR@w>v.,k7=@ 4 /Bݒ͋Af |(&Ig4+G>X8A[{ t!܌0󰅧Ҫz7( _1*'} é1VF O(Zto1O[7pP E0^<.k W6_J)wD%ڒܱk\_ EՃxpCcZN gL7z~kMS*dV9l͍ˇESqSYdLNXǺǧSibv`&S/7!5W'Ri3D5G}A}H`ɕ'yߦ$>컱ܔ[ rBPd j 7 8E \ XOz9snlga|A "ZsTܿ_ѦLp|34+be}k1nNZ!W!v7+VQ1yr5\XO{C]~&GW~d:>/]tMre- #Խvݠ\Z19_m]QِT91yDki!ɕ vP;f,*/lJ9w%W)q?#{D8<5F*Ire,d~᪹0QBd/0IGH\ÛSm!>vt+c{t2u3%V;7U񾱚],0<-=\5w"tڛ䆽Pyܜ҈S|>[ |Ogynn u(QꚭSQ}^jr-7`?E)+Ϥ`ٕ؎iHoʼn5ɕk0PŊ1_Aa-a<%C_x*~{ . ';'Ag{ʾ{ol1S9H2n * ?ʋ γtUG;{2Z1d|pUrڛ{3Gn+7ZAg]Ou'SX”2CWl(J_[. /O&:AGjLH+ Kǽ>2{]%oCUM8mzn^N/((y+pIl{ʜ#Pm\ )/ U*cR*݋Y\ly*E.4'ɕ3ߴCCY? Iŭnp* 0?p#x;zofgm6"AroqwOz@TG>֣d?t3-6y2fq4@ PpھEAKf3VoPa{}ٍ&?(?$Q(9:k֣ytYyi _"j"<7KsayTRc 9~`9ܴap1w9j5agqϖшT +H'e-;r֘<"0l, Mu4~JZ%2, N30׿H/s+%^}:V.Q[Ci$Ie\J$#A~Cцכ[Š8_ҚSi7M6Ox& nD*rK~Dጓ[5fږF# n4SLy)Rk U;?YO8bM>Lllv0p!č1iQ2 xp_>@fQݤ+%A&k=(޽X~} +S?o+b?;L*йPfǼO l=2v|]ΞV𞢲k5)?ǑVo.s{vc l)$W.,~Pk$W~[7 i!rg+=EC?FGx Uߊ = M/GxutQ1jo;[7D~MlOʜ])Cۏ~4x*-ɛ̜J Hfe } vux)JcT6:kძSXc[.lvuCrpyb픯}TnI.^gnL߽+n&Op$9,MonXn8 rBv[^ȕ>5nm.u:SŃs XCx/4X{o쟯+z1\9c?vޖ+[ьK Z/~O1z7k YgoOZ՞.9l{L gUG?I} "IoJ6 a(E=%r ?G{oG#ʵ]{B@vbfbƧ_GDᦻm wtl+g[mٵTZ_zӝ| Z9I[~gc\&bKCfS>ߝA&W)߆鉶\9V%Z(zSj= 'Y\qog7"B3ȕB^= #ɕ$ اo~!Ex7dS'Rn3-co+_EH=/nk\h+a-\f$W5KvY$WvJj(krO׎r6v3wnb.\ٸeYzr7{sIr \9]aMqVrHW&< W<iiLdCʦ1 2&u'oĹRr#/-j+8(ȕ\9T Hɕ}r l֭qDNBPm\l W%?C;ˊGvzpzz?.g{]κroXZzqn{w^?=dK{!:;oj?- w GX¬50 ujZ.RZ Oy5ve{vlWٿ%JV3V`͖os,noj"ȕ^9,mszx ؑ@c=OҭxC= igx{prPg,LK"I{l/̡> slCĩ$(UF t r xCf(kX08on+Ϡ/ u- e^Slm™are q D2>p)#%Z#F$(chF ЏUNf5-i)pK/>XEZk'oHQ;7[a'2t?\j&dv+ <|}瓄郅%V \9Аqd敕7SrDa mوcp6?} #"g eQK7C\kӥdB+CJp1nv}_ŗֱo{sKj~z*aiueKf5PJIp=ie]whE`4c v[U_D ;9 3kKwVB2\emB/$WYKF5M0uu|A<_ f"P@Nf\8\VcEZ-Co +HB`}~Kђц'F #g_oDBm&qb$~ :G#2Uf.( ܀0דF6bo+AKb+,:N27TZ߶?~Bg=^ϠG['A;3ÃW <Z1},< N-j,cQd{HZ}}4֤$-79Bt7]8le j)k{?"ltn:uTY餿g:T$WgԨ4 P~aIqr03ܹl(vo?{6){ҩ8GHcG)|}emS$Xc)f Jѧ(mDv %yv/b}{\}v}]6g+Oeț!.i@4goiveFzGH&EdG=e=Xvi:QYp"Q:HC&jEc[ q@F M~ƭm:MRyfO{9\3{lEM #2hqp*A}=%UsQ%yjTQnNYS#l['Ɔݭt^u)IzJ3E@FbZ' ,DZW5*EQl7j9F"~Jp,T˲;׍QEDgLNnPCgl(x/gޗI8|sjdіN$Eߜ[y7*0@<`ش=#PJ.y˶$+r-srJk_FTi!8C.O:ؗ:\7GPqAf."o\yj݇?jn;k?W{̝ɧ}&$N=1'>90U!uL)h!:WP0۸ Bws4Z~q7ˁ؇[8ˍ`b:ل=XtKgRd-ns _U6k6\)HkJt^7妃1_g7r. o=4djc3v40>św[ws,"}\ V1=\sno"A(7 ^mW+rس=a{vȲؽu>=}+*;=>#{P=:,x6GvgzFawp>(ݔ@U̇:3;i;Snڊ5"]xj㼷Wzb%ER-Ak24NУl3JhZb5uusI Bv)gIf>˨e;ZzOp;M.:/ޑf1rDIXoF1uH [8w^ )}w2t9(+g(.O҂(ˁъ_h'/XBD(oRBRӥ!^ho ]DM=sIy:JӸ)r*xR' !]]6R7eRz|:G5(ݛɉy= ԨK#[I ++Gzn_ʞ=x`柎O*G/F!#YFV:]( \ʐA_h|nTuŴzN Ot:ޚ>Ȃ~4(fs-PgK͍&"]!I^d{T2k\y/h+̒s{{X=Ђ 'jC\+(R~䃬>-W:B\'s?L'^1#O/]>8'}[fSmdD B]12c YG1xOx'գ֡ѧZ}FCIc:M;ô2gKҞ&JE#\tifG0:Hj6zQLhKɦٮ6!Z8FͰd*a ӣoU쇝F4VdNJ63S7ݷN[4>Ő|۸4p*n0,С}Mt)-^ܸVL%w|Ͻ ȁO#v_œ Ǿd}aHȊHu#EotHg%?$_?4^4T}iL0đ_HW7Am#VKovU $JONH2"WG/]6Ϫe `' Bv 2X[FxKOq Mgg x?47 roVx=v'15\WF|lL,|ݥqiNH&]>E18a<K$k~I' 7 +M {o"V ]c֪ Ӳ 0Z[Q|"-b47[:8#yfs~M A+i6o͖B#++ [֡# Sɐ}<{>p_[ruw*r\&}ޥC88KFMR6BjuLODw*ef:we` bL͋GU"Qt3hԖ sU_8"+ &kn7I[\b8LA&I` [:~GdD2_B8LCO ;oA0ls6Z*l<5M:T=䤻F߯S54=Ƙ~XlyZ8" J7'7,KCxɠܫ/xܟO;Xٯ 4}:9Dt'ɕ YL?sƌCb X}t6%Nj= bNcZdd' :=V9q-PUJol%Cz 7R/Kåbn3Co)6#\S\jϨg"cr-z6cb $-%塜[ܗfQɕ6B WHz-`Ԧ#Wnֵi֭8&)#z&$e4ŝ5'tsn[&s>sWWwɰH9gpQȕL?L ,6LN߽.=*~^Fc7ZeD,Ouoq/l}u%BX0Բ?ǧ .!!8H8p[P"k࿚Ul GnvXb i:AaA~zX}R>7Ї.zK@܀:jڽhڬfʒaSEp:zEEV^`\)GMj0봅$_^)ɵ Ҳ:,e9Dނ=?uY`~ʋʒ~ l&GQ[m4V<,;ƮSW!~ۅmpb||.)˼ov ,9^KW[IHڥHbxeoTC4;2ѷ+˰ )#v7IrыBo[(OW/BlxN(ǞB45Y>?DFGT0ON{禳 =K+ȕ$mbrh5#&姐+}MfJq--lٻI77W"nwX,LnggFA) -X!B&).?nщeGϫ -F H| 'z7=W-ݺ3b@ӑXo NϦQ"g! X!N^vE΋,r9H_8ϺVz_Mmjr ~Hmm+;Eq=zO^X=>^7(W8y~@A$ZxNLﯸ!.F)9 ބU7͒h~I-Y!d{z6XӼ'({[Sb$Yr;6yC&YWzZ?Sqia}`gߛ[m uuO6iӲQ@C/!Pn¸At V7&$((T!2+N9ylD?̓p+Iѕ8܂XD &A(gmUREAmf g*s{iq$YFh;ht'TĠaߑ%T8 酓3a7N&'&8"n9E%a8g2Ayhpӛ"O`/܈rFv ԁSq_>C3Ʋ? , ?$6vAI/jq5+.Wٯsm`}MNux^X3v*g+BUjvrC7BDn_(v CoA\Bɳiufb|}X.e?u(ފ7PHX %Dpzf~s'KtY+I,zJ_&}q Vf2'7( o{O)77JNٿW}CFY̿dzBSb']EMĬяq:$WNL=-[m}rSOSɈO?zY8_"fzǢJ.a4yT( %?"u<8m5G>g"Qr\CŸFQC{$%0RL`V27o@T\4CnmM\fK;GMɕfh/Xq)6b2z, >B>|8nOu uA/;ժø@hXۿ;rѓlx\wzr<ݕuۢB-5]"{$5\+)+mlhlO ۇ7ʡvA:6EDtF+ݿt!T7nB8Susq.g#5^C ?~czm>0+6tbvb0J^U{ c\F3n5~ok.fw۴ mU2k7t@m y,  ++S [0Lp0 w#7eGǤD? | ylt}TB"P9^֑#]n+N!(}UOaj4t4wUG'mϺvX WLZ6~0v't?8w<4A'&ztBV:JXM'.۵Ɩ[q'w8:mۗudZ</2 }-đILЅ|'"ޜgML;W@hKP$y+[)۸K12v샾CR2 >%-m{ e;]u""Mt߽<뤯B^'a dsZn8Cw$L/@& ষL8"f-z GagktC 4NmPgH z/ϧ8m^cc Gi(F{3DvNoZ yo=sg 4q}0W [OHXq^ zI6C2{miBaZ,M>=q+PC)U?'2Jm7q6鞆C3j+g^O̿z98>~gҧx`CQyᖖJ9wgv~'(o||OmK 'ol-gae0KJ3WWhZl>$je,etі?ˮhemH: }% Fᓂ˙p JWY^ l֠Nj^&1)v?k7x E~( Rݗ\zs(,>_.t'jthQ&k󭿁ʓ:7F,X8]qW^; .q* },H7XQ#5v'dn~x~R%TRzH!@^:eo+/o c'pWNOŲ1;Bx/s~R -9/0.ds=|bQ*]P-%Y7>rt#%n`:XG#9po+Բ9 iɹ_K\בoJ򾞚+v[>BמvrʛT 8Mh_E ioT) @@"$`9{c͐:KuxU{>@A7%(Bnw q# 0ӽ$}-Zj쫬%9 Gpe_9Y:|}ǰ[,ɼ:c7 i,\y3d)$E:FSA }D1oђ QF[jdH ˓g'iߓݹ"{a=X}NnY[ȕp/]`Qd EOʘqdrIV1~O׬px>er_4ȕz%h__$6l'JTv ㄛ$îG-::Q9:2 KW: I'E$w[@MducγtQGǧi-3*/uBŭJlV97d81o} oy/m+| ɕf^ka_#Ǿ$}DZ}N-#|Suo5@::i޻oHի"Z//f3taAS--& |MdޗkMĞ#%"Q'p#`󗝂Oaxŵ;1xKtp n& `~92x L;yKZ@uBIJ_A]!`9U?Zco8Cl|cغ07T4ďٗg&/nЅq#%@#.Ƹ4uu}f|H'aGbiTvtaxawg.&oI 7,m{9ygn6Gݫ XÙCإ\bpD|fO%l\P!R_NF#˽c!x73≪o6+Y2ttzbD+p2uԎz Rm2Z,pqs{z iXf˧Z.RR>XQEg .&YQ55\c)EqƼݥf=-%iBIZAn|odڋ iĔZWuŷ34u_`ޛ+*iyAMaV(BG}7ܰ@l3oFKK4vL~G4cEW`/c{]=уO5<[FR\9 K?8qUD_utMr܄+M:;7RλCDKqۏ7K1$┹Wp+6)^BxæSka s9N.̎.[4^ZtѦF5>78{of 7p+H4TV287%#\w_P`a/XQ׊>Ow|*3s8XnAoY7EWl`nƚ=;An6HO YHM/W ~Ak|/Y4qv2nѾH[QJ>խѫKOp[m9ftk1u`}d/űhR-ׂ$^ |Qc0p8OSVbک7/1K&s|k R8cwO/b:Ke`=/)E%ٱяC|9zk Y/v/hַ\E7qN4kA´5e=Tux6/9Dv8ޢmtqf}X.UT{.9]Eزr@ HGK Zt|td#76ĪCè[mw 5D0!\c#kwoYCQ4)dh&CT[P. .]Hq?>cV: R\* _2̠n+87xnz֢࠾w7u%Nوmd|$x$wE3[`3?< ]o[.Q[~{Q`vˍ~ ({V*? C:*"B޽'/NY+G ǽ@;BowJ+5H2h{ܡŲܬq`eI' jY Sjiij  Le{7((.K&LM Icք5q8 /wCOdtOP@ȶaSMLq~tuCY^3@z.>Tg!yL̙WqZ!0֕&hgoTN5zz4\ =pԆvξK9 ;-ˊ-l.t.tj6ϋsq7w*tŅ(cYL%8/S۳FB{ol}bzgSY9=̜,yŤͿװ:0}sڠ+=3zVNnK)/ΈZվ̉e0K#;ΏPժɻh#iW&6Q y{bgar: I\ Jx)J5c5l1?9wËSW[M5.)oa:ZnrG>clSFf !w:{EFcaKh+UIKre%L6./aߝFZͤڷx{"2= ׉gl کA@U]B4NJٻ;#iju_#ZtYV̲페X%5"*uغMNuk*ײupouj!B}D($޲cTHQ~G$ߍu;ݸ V֋rO=3H ?lJ+, 9Ɛ0`!h:R˩nÐL/~B}}cp]H<zG68ho_ ;b쮤6+ d0Ԉ._tQ\2'wnyD Ijt9'Oǰ ݭgVK:g>LA( ћ|nY(4M§Kox7yG\MC? 6s&Ȏ,pvu @p 9C 38 𩺥q{H|y.,0;t[Ʒf=wܬ$MyQ WlN& )y8 fv%7HK 'YN>!i&TrD>Wۋ.5@^oy9 X9|HPq5m.l5j;NEʹ>Kћ#p8 xlo^c>ltO R^(9M P=4T@E`z\w4 *,tn%\ >n:y#F~o 2v NG[zZG% ;lؒJDi4Z?%;}j%Vʆiy=VN1~-lP4U鄅9yֹ[4&=r+%d˸[ ɥ(bM`wa\H $`)CG>9Lht/ afō^q\)"k7VRh6@C(2RVOiP>Q/b^Rl: ]B+4ΰ뜫Xfm8V"www*`/rQww %`!N_] 4Nf ?i`]=+tGzMIN VGN=(Rx@4ٖF[[hӅh-֊}J~SG۹vB,`j= <h' #We!.Nn+}hhp3 7k$V[-'$Jg˪V\SoϞ&WNm>@P1ԽHL!pZ˩H♫Pny@;$}|K4Yϙf>e1XQ.|)I5 2Wb 7f8vh d[ĊŨ]+hq ;(T4;ɃX|J6Z}T' Sz/{IտkIcgŊ]AI=~}e_B6{#4=!/LoJezSrta}pOɡu}+n6Nvjf 7!VG 7 yċ3$[G!dM8<5.ɺ7I-aȕL#Bu0rF/HPaS r@ezϬv5t%WW5\ t'-xٯhJ{G|%_b.Vfpraӡ;ίbgJ 8Pc>3i$&ykɺ{foJ܏S` tz c'Yؾ䦑^[qPlF5;ܒ-O6KTHgLoa;_v{+\N.շWi1]+Sg3$.YDUq{4>&A t[Zqnp͟;nlg򢇩ˇhc owAY/[e:q&~VsJ*NC2l\oWRHN q*)CF`ao+F.闆 }Cph5Mzu Xq $WLu0zWo]L ƋtuB<6EQ+\F‰sZA?Ȏ:6p¾c cO gm4;:1Coe.]ZG)6y2Gq1=ht~WRi?nN3ʆNڂeKCUPfjK?QFzzOU*]&h\ $8~{[1M -Xsa16ӉQʘk)} A7CudbiPkluɻ@OozfT [duZEw>q硷;W#lF jtg*rNX~;sЄ!:CW+֊u-ra(cV+Sj`a`7(~|f|<&ɮwL*kWY٘=|k SÅyly4l8g06]N%]l&5fQJW%5oQS;ϡm L3& =uv4Q_Z(﷚9Ԙ}S~tgsDy3NNǨǷ[Q09`UjԘAjs 5_k)1ߊ#1Ԙe&nHd,T5Sa>}cXu-yqSJav^)/+ߩpw3g^d m<','*gқE͎." CpY|*%$+{Y",PJZ]KOoXʾGfTb!⩸/Ugp?jX{Nz0nq8Ic/9NYr=o (JN5!2J˃M};\e N|[ҧZ ҈OENA,{cC@+dxrQx*#p %9Ȗ&~:7<󝊍7smͲ b0;q*J/}ջ |9lD>/y*NXƌs#}w?mx+GݤƮfL۾l3X-xp.F%]Ɗ{gpdip*5t)}k1Ro0mn<c`΍vז-iB]BB.mpn>wWB%K*Bc*q7'(\|ϯ}wcFaG}:H2 FᑁۓBw߅Q׈ݢQ8L: j̃XD}B\ 2'`%gZ$b;}Onr=G؎}pm]= D[˜^9Wnjf$ڸ#8|ԂޣU[u<r9qKa_=q=;4ݿWW/BדPWڴoo Rb]}}[8.Ʃ!E0=_q;w[L[6rXM.:UèzQ6qۯN: I_/Xw[pP_7Jl1WYΤV6| c@>)HEfbL}oh7cz{W~&TT1:N*w~OzhJe, <:lbXuEbڐ{ e/oʤiw!aeti$ޓ I89N_?l+lE5Zcsq-n9Օ7bNGCZZ74Raƪ~Ŗ}xi8\1q1 r\z A8FTҙڋ+=KCAkJɮӝOMC "ɽjd>yGznZk~\^'YhRr1;:ު[=#s 4D#}2j t8 +Ng#\a85+B4,{ez*:Țo:'o|ӱAm\^1͏ަsó]ڡ܉S*\Aa:￴;ϤE} ct5De3W{B8ںX6~6|dcUU6wj<@α"hT,u1 &˘ oTNJI';RNŽ$F)Ndha4ƎW8|1`YBrUQy7K:o&cmRp&ױnܦ_9XcfK@SvBL]3S~LL?[- ohC?Ztvb.X36@>DFmXØ"Dpzs<# z z ^2nRh&]Rn H coPk7RTF7~{оcM[GairwRӌ|l<"`rИ=_̭MlE_vs"7HZNOt42 c.a{v4 y-EҤD?7[v?b#q1cUcb3l )S \urfbPIvvoyb ̤˟mb4^2G螼[nX/3Z/'g#l=F)B~1sqߜFijڄaF2amĊ4e]ehaop@zM"n9{ڲ9mFw4jMgnBR-mV[gLH23vdIDN>,!Fo>3m-{K2CFy| 3eF-'!NO}^k_{΢;:S¾=|o2ͥ3!mplM܇SۻX}ΏD鿧OoP=|ڐz>,գ6|[?? .v:;gQ2!"Óq#ۓf,4uNHk-[pJ~וș$s#D.YZW=cu&i^!B.^g͝.Xp}^˺jfkOUh+&~Ã4%;w`,6LqNċ#^@vM10jqݞsxڦNs_!K[db!#* t9}Nnw!Mri2ΆOѓv;!\48 L ]8L@ւO-DL7 TWKx3^-ԧJۋNـibxSRV#ݹ'}B=r7*;]YD(WPdÖd|0;oK.rQƷ]ہ@l:0 0tbҹ&P7=nݜZ,{W[>BR qDw ~GEpD\)7 wDK>D|+{nq1eڈF h_պG]3'2[oeҍoxW|OΛ]$nɳ$qDmYuO_VCXA}Zᣦk&/ynQiVx3{tw\N"L[] _i%Hp<"R` ]>oBW%M$ح7=Xo7~ިp|nmr#}.PHלJz 췗}-zwؙʕ]GpWH6 Nf-=t{S*IYp$#N R:sM:(Ho߯_oS6 ,IXOmg9eǩxAF󘗕oMrnq%}Ak9AӶDaGw ,c'oėDgd:>y6b.LVVrJ-v"=&m {{CP㥚]|N(@BD.Lϩ|ʶn;*_uZ$7(OY>uZ\a_<,ryUXԷj[ɻ Z}}>/푍X}ؗDjB>}K Mcૠ|2Qʿ[L0o:i4}05^{ԥQ×VzSyc߷TtJYBsfj?ޢ[s6H"TƲ1tܜ{Yt)w~y" r=YʽN'_z3 ,iǻ,|D_je:l7?P w| Btc1tu]9iWqo>3bFٜ%QӬ_ʆPbʓ6wenzw/X`:#7>ffi֘A[KvkޟʃƫiAڜ∯N~ֆCiXIPBlFF $x$ 7k.l@g睧:I a@6P|79߿V6ԸA!5_-0N?Gs|M0-URnA,{_#mҽP&5Ncў(H#7hJWq d=BWh%{t8w,n/c˻ap3IwDBH(Y2XQz^A{aZy]|ӭjŦs![G",]}f +E¶oWO/D*֖V# 0l,NfۅWiP%5L%7D4?ypFӭNQ6X.D]0f |v~ҁ W̷QdYc,f6u=I/=bnre~ I:7'Y}&s# $y!JcNW"5pUÆW]6iNF5N,V9Tөr1s]"%~NЕs=.w};6e,lTRf{ tEr}t|#J PSpkU&]sׂJP*h>Jwߦ|F̓ԮյO^G> iqgsʫA!ˁ9?nH{6 XJ_QL&LV[n(yS\ަ8\QggMqlmPrxDf6-q% J KgO>`h|DdYtћ1⯆y5@~O-߂|(sf.~1sߝךNٷGFrʽfc{.KhbkE%Π(5%t~td*/v{ҷ]i쵴͆ev}|41ϿAh6<\q_MӸ}l|R 5lVpfnG$'P 8ݾ8>o)40 O~N = V6_ Yl1y-Do7}H]yG?XhYT-y^_O=#"%V%5FWfRngA؋ 4. 1Zyv^#e}Y6w{,s|xy8!zmKp5 $$oQ?ɕ'sWD\)]iW}'m`LSũqPS”ǨZo%`h㜘aǩ6Gw_L Sh-tOT0Ff8 DgJBh|,:4g- zF/ܴ ߮{ r˘U0߭!ϻA>v,@1 :`)<=* *BXz:/˯fyaN|Ny/!̲b@xbჽC1OA^Ċ tPLOR,'~{DlMw $[/b&\R^ru8]= igymbsڞf#cQ F$f[':Kr]߷NIw ȕ 5S+Hgg|947k 8P,U)Pk;%ڴ* o[(cøJDzUƻg›$tuLW!؅ȍR~]\4,gҶ>gRhgƥl&ot{)S*1帵6Wp)d;+~6'p>~-̾y>k9kI@΍hXŲ#U` >!Ɵp/́I5?3-0%0Vwی^7ZOYJ]mR;IJ|awDtq=kA?~,M 5׳ 1 /* *y3&>kV"ꡠp8cot{~& î4B ɕT&3slIzGQ8KJdICle7^)~R&[8O;s7bE%KQfJW}^re=6E. )Uk!"ywe#iVo| bϩ顷}v(@vC|ps1)/@Bؖ<-}Rek a6@v44C(zkT+zS/ b90b "Z[ߺŒi5Yovp;_XkB|HZԣP^Fh/VLj$yMYGu7G{>jԩv/DLjԵhk8ʆ:7N5 М s"Q~ѧlqr==2{l ըCa&6LS':]6\Ꞿ©two('fVC&Y|)gs8!*m.B5k9SFppzsAEF=7y6}NCޔ,Bj=?F._I-;av6$EE&Vwi Ո]-O18"fU̘.KBW>~8VƸ29I4p?/O.ۣ bS[nFNb ERvb|FZR—IzBRŚ?{Ih?.Ѥ5$}bKjU ߵltgnhx/씸+EB(npAbo&1:zT9 eFlpgI`=Fﶇ ^k$ȗneq|ezlATzĨ"[S˩䬽o=-'u?Zq>gTuSxҔ(?,-nFa I^<Ӻk3F2<$KeM TWin b, Po \dcvROs@=zbtѪ wSc %86jjb mr s|vзHuQdgz*pv |Gd7|sxԵ5X\v7꽭ZCD}X-ܱ{(b1,3z&c{toEEx1cvO1X6ۙ9gPehCQlVpBhZ|>Öή5j|9h tC~YrYeH5Wt2TxS}M|q8+ lDT(G3q*+ 7OEOq)SL7?Sa@yYhGsMt{<'uE Ms!8'\fTN, an=rT8g6py*s]$ T$ ۭbSѳN9bѫ() *`rѭ WTxZq/gaJ"T%ۨ|֑9:%1^jTɌh{aB&]CDu&躌I@s r_M 5Qhhe3= R *A%$Osg 쨱bll~CCX˖F0TwB9nbFB McRbqׅle3rP)"q.D lx_6,>|~!pVP-:ljd Lu)1:,zFSc mQvMțTE6`&|~qfѦ.$;}ii?tmAEt;ڃR@̃9c){SL bɺޖe@NS*bJMjMs4zJj7)פ Liۈ3r߯'5}Qg lǩ@D5ﯿDAV;7yd2(;iֽW=nzxpSe:;̈6$N_smG)25M'9ٸAXA0"¬'͟?,|1[$m Cpeъ- g1{ɕNђW8xmp6o#3pѹoAh2T/Ɣmک ײEǒBmL9Ea~e)Yme(c٘hC36^GoUcҘoNgv*bX*6ԣ0 \61)@QjRFo3f`_osp%pf[e.<u _~we&YK)f5ͅhKgHeHGy`]ST78JN-H@$&$U܃N,[k5ƒ:Qvvys&$(t<-@B'rk)\<܈YO OEOב?]o@93,gg{UP:yZ (AJy6d[B )j ̄`=$`T}0C@h`8@q(mPJؾ4O^b],lש;233ĴN{~" /6ڠGmoҙŴt;o/o~0\ƙB:gpGN\J @Y9Ete=t!)X:Wncx>%}!L!ңYQD\g{~7\u(35aeaUXa^NƊ'P6`r=1pd9wLn,[ձf'判E X;^FuF,m~SL-] 4eM`!V{Ozl=uz>r~$lyThod;Jѽe/}\7;\X_-Vk̴P}PP^h8_elqNZG*=9nnvXI6 lkN{F jp~w0hRiCs߃~͟>Nݤ7j۷bT$ٔ>C艉|miGd>yM܍O!7X>z6tg빍t\ QLYTޭ ,tD7[#A4GjI&}$)Ĝ ڤ: H> z$ N޲Ha1v;"=Kx*X?y^v3|[yAMz8Ħ|RyzuEǒ]Ϥ]hqO=t}"Ү RfsldHASEvM\›-:֬Y  d6xI0=-v} 2偀c]![uDdYi"9 70r$5m4 n H2Fޫ= qN=Lq(g)]\Lt<#l#ks6R+]},P՜8ctu<');V :KM}s Cp)} -@1ǧnm1C߳z)oh#rk ͡[K`L:T:Xeg`2d<SgդŇ /vJLJmszMBDcxp芺Z^/i 7c]K&=_e*wx_uKdn (o1i }#-!绷7+O oѾ#_b,|pWOy,c3%<3zgkrr+Q|M$pSla51io^ >HV3vn6</8]|6vr-D:gl~/ur蠖P^oOGąN87Bla_!y1 | Wsk`ޔagﻈ01JzNl.p(f+Ěhݻ0NkdvSc!1qN0Ͽ8bCAk1>P36wÞ~m{!=y=Hysҩmp~p-I| 7>oK3W{2% {ve}! +_*єĉ.o|? ľ`|֋ف 'Cs$azr*xw)_{GUsbegUlZ_+Z0wV~&8I7M+ʆ9OV"DW >oT>r7%ZOk[$FrC'j\قnk uH0?1d(VcCk?*'Zq} uNGs`69j%;ږwBzF/G+j]\Z駬 #r#j)<[Ͷ<\ӋlX.$%,A5MkcQKS" k#V/ޜmڧo;̉&8Ck\[YH z4U zk#XɎَA]J\yHVNL׷% I"w:oe١/ޟjZb`٦7T9l)9umY>W_Ǵ. tycs'#~Fse˛2֮Tu ׍S>ѭշ;ţnƽHCHύxEwЮ^IK/Ta@jn6Hf܈Y'rooQv'=,nU M}̤!8i L35yYYdNņ$}l)m|?b#a}0 sE4:籊D!ɇlF͜N=y`É"I! y/vi,pܘ-P oc ;ܽ+0 <:"`=#=2(5hq#[rqy|6p&>=B͋ |d^ >B,UK zt#b~zZ(ژG ]L\ &20oHᶆ%|4̟NҼSt0"_C5P?.IA3ޙF :'^o4*^0j|^ӡs+ vZа0}"y?O #wF Eh}=d݋>n*__Sɜ3eO)*5Ʊߔ MkƊF"Y7]BL=qK3*༦i *y_`ϓ1k7(S}%L7ZV`]r6H#ع=)LUF`FM*h<}#r|nI=6#jC*5=~cUGLmv`~JAt_ӱH삲&*#*^ 4U)-"ĂoxFdD7ZFZM8\i ӹZv4[јg42y*V|OI&s\_&~;wtyw}q)y~ՄʞF&ҏ6TGZfEZ}%Ea6\:`yE⎗4ݍ2vTƒ'#…^c硟 om/cBdME̤~˜F/L,)+%.^[%F{C /GU:h솑TZF5A ]{Hi=|~Mo vB,>8&=a\{E{۷L aꌹ-bn#;O-m@hv;Jm[C.\5tdN%mĠM8U3=$+u|%Wz<ӱ6\D*Car݌7sq9CI 9Q 8e<Ò]6(3-$Cc7H޳/DIIZ Z&]CE8K rūO4";"ve nnn^̣-%]Rܼ\kCi-E;?: ⾲JqKaʩcwx%-+[͍ԴqugV܂д$yNoNX+T,TL-N>qfvZX9>(!MiH>7Q(̾g -=F2h uxGOb7\$S+ y*Nj bmJJn+%89pzfZ vԸ˧W1r<ὒ܅݊;WKϏe.7&{}ѕ7MAh/Se3KX=^,EqӭD-~q*/tr g',Op"Nj&}Q7<[2DMpXѧSPܒ_Q޲N72mndNEȱ:Oȸ,AN)m nH =G ei 7Z b>lS#NdZ-+׿1r۾ˣ:?Ɯ[OؿمCBreltvE;QIrO}yvlp4??el,Q:7ܽ2ܔ+hra"YkԾ8;n)ʌ B$t2s4To:7'j&4}zڍCb)mO66\yb{h8|5f6jDx6q>D> -t7[»)bٜƺN¥oÍLĊ<4QYl]ԺmDF;7mz"p?s lӕ4Ᵽ o(s:A֬J;xdξ\]̷>{{& UsZ# }M.ְ.?ŀ]MBW<^F8WX&:GZPvߡlI\;dvoiL˽KYxP_C q&(ȕ+o(bH#Kp 'b2WO- \cN( `b='SR߳5לy='2 W:x6 1}LfX8U źL.[i3 ɷ3q︮~:Dtjg0 Al)6涕r夏󞛲l#jJ!_#&(LC+%tVѴwrCu "@exʹVnZ] C$LƴT{$Ew7*S5H_N@vlĵ{,M4߄2yĦ/@fJ'QΣ%[)C=;8SF$WJo >bǻ2r'm{&IK jɼg3wf8ޟ}*2bvx)ٺ|r n`MҬ&+;)sX{41' lLw-{˵cRJAQcr谑4'˽v%K7]0MgJg}o9"# ^> I5O:8FK?*$-k Kg!Wjr^ ]'74ie>}Dð&?m>C:ZM Z1A-qFX"|{:k*`| ǤɺlLߘ`к[dr5kTCA֛F׺vpoC46,2{ ?{KKbPK {ͽ^4 w)sֵ&t(oh+{/brBCBwdlDS"A¿;#mjBmSEGxO ^>"kNtNl"or@vSۥWx~•['}YH.G%" ` } -j!2KLnhN=7t7a#鑌 [hxj*[ugÛl8 U1^-= z!cA em21]*;!CDU/9u7W#筣pVEg*q՜,ԴKvk@46+7{7BvlLSIzU~QT62 {'okw6_oU=GLdw<r gw}jTc>qI"', |$d+/}2TUu&dp IM8q >%c^cmB"zzǛP$TjA67it7}6.7R>ۻuR|JԘJF"ʆݭź-.l{]'Mi - NND[8äuw tA8btNc !.BJ4YX\\n U&11]借ulݣqi<D5bzC1͍O焕bpݦn6:9˩h+ )8$['=¥GeLeћE"jBmoT6vA9ש{S@ dLV퀥;Rt:tUD>TFz۱SM1hT(>voxHg#>RZxx΅᪛9+Z6>1,lwcbYnV7 TN0|qVV0 =]g}"iقȓz|$IUDz#?GKBgSo&Z1>MqCk(kjθO6*Ԝ6dMJR'$o(u#SЫZ/}6#jdo;`BG;m[I2R)гV϶5xs-Z'M/U˾@ԘIʴ?\&zSRv -Dk\kWyb-G,ǵJn٥),pb oLqI/pX;_Qm &40/UlXEަō#N/͵k!֧%.71ۘhp>*GAvځw({;d-VԂȻĹ.8jfi{{sB]{p}OfC)g]8t46ΥRċڹۦ>z+Z"D>pimV:gUۢ@|@o)6&|M\'mnj𝽏GNy^cZ<;tC쵫(-)rBwńd%lU $7j*!Pw+܎~"&HsN@VM Jy 02G[nHĩ #Ρf {_}\nlg8,h| !Hfג k$fw#h皔TZ")ˡi״ eut)pߗ0=K@@  e7P HG_3IRi>H;ˠa=woӪlς1nrgRcRU.ʅC(wi/M8?*~[3RN33 jpFuKn:3}zTn3H<!%Nuhܻt֘-]]rV"}jW6 ߪ01}xmQusX_~VI1͂ۥi\H69+:Z P0.g:I ٮEb%%gPN2C݇=p麼b#Rl.|>UBGzLJI&wݧ%\c# :s4$j C57vTQk{z+gN>I b-1ܜeO La 1,;rᔓ Mx{fDgЈtИ|Qs6_9N)n[;F g;@Φqq};5X|*"jaư4Tnxݻ }hkv~61Ơ$S$Kd}@ Ox(ֆ,~߬p4YFnЌUƁ0} $W-#ˤrnr7ztuؚN )aSwRk4Aѯ0vv%q7A,&3`\i?0"EQ7KAa&HU.IܶS]{E94-.DNd׽h e۳ǖFݝ6hwQ]iRolynq6iyA3 L>W=>\08Ϫ=Ot_o[կ9i4߫ f{Mijw}' dOũ7ƉE;cٞÁK;<3})r{G'E!2>ӭe')9۴{}X0pϲՁ}o&/7iegAXŽK(pDn!ܒ_x_cO "xxkUw|xɹqHDGT< ](E| IYY{Hy9_9Jj6Ddxz$Z.g8zEkނX|Nꓻ/0B7{S^#MhT] C<Dc]YUƑH~WC cfjho'!2.wL\.M ~^ÈT=8ToqpSa? $CZ)nY0 σ7 wa9w ܫ*_;voO|Tԩ{7 [,hH&/ H׶+x(R$Lo߸o.}Î2) er߂ %o;p粒tB\Jߓg_%_~3% v'X.J@p~m׻Bw@V~J /T#;#}eg`.irw~GoRɜd ;l^&(E d|2I'5p[ CQ$`9?`[^ L4vY}M!\Y!v/oVyKLe̖|ψgKеȦ9;˱ pM'Y fΔ5N|rWp[xBj/IzV鮃gHhprrjlyvt午,;Kٓ0ֲ :_%WeƯCb'[lWz7{͞ɖ-IUĪ~*& @ ]^wڳWYod#_\aHZN(vY>4wFI#DAs-q ?zgwy:*)LŸu—=8t Ĵt;x ݫ3bZm}B?4a;Q.sC\%,NrږKWEӧo{?r7Ȁ{8E^i$O6imPOA?BXP#&:-u&<36FReF8= z|-Yx#gi!]ځi?>Ιd[isHo_(S5C1z"9gߗ>O# ^qPF1NFB&7 h{bAqobhRr1AN(xvHͽwݻP 2@81|`%9>ڳEw tp-}䵏B[(Lz߻N~Vy&L~ =R`.pٿZL4Ev,p:=3:B͵FecOٕR& \I9"BZ(C;y85=##Y7~<ce͘kCIJ4 ֵR0U њAղ e<$*T-Aih`/ɝܰsCnFg-JWn$ {wr6i瓌OSPu4FIӸw@v48l:gp Ͼ6btN2{}FRxCoFj9 ۦ*z{@NcvW^;aswY-u~ C g~-^qwH!]xh^Xhtl|sX9`}:AxWCZ=>2\|lo]p]%gՠo [.OXCY_`=1 7]ܱlƽ6#yx@jؽ tzAڼ-bkۂ*c$ 0zY)nըJUʏڄx2xABYv,f!L7)|0J™nup `s>*V}5kw {%8ppD2Ϫ85]AAөHl{G:6='tqehV#Iۣnm󅗆j mZyy׼]x>=$RTyi[>A垤Ev&W7{p ^+*obm)/"#:rn=FVNMvC[dCsj߮+TlmહEVg^+Q 35doO*sQhV'S84HT[ȋa?{ф'۵v& >^ovBǢ 7Òw'aD: C66m Nel{<*DvȠ[B\ A 073Vn QnH [s9k1AM*„ڗPsdfI{g- YwKXVA* r 7ҢtfZqD>>cIYXe)=L\rz]X)kK-?xw>+'9Β6yc癞3gnOKN7>I/lx޽iP[jl&) ̳k'Mdc2OYc |CYkmݴ6ȕ k/&]oŘu%>ףǷ+ [ްjp7sql!T;9T75?+9J7v9ܱ`}^bIo,H;Ͽ^Z_vv%g[9;Z\Vv_깱~N=ʩS1pή"ߩ8ŌY6:H Nm|L矘fj4}~EOTOR {neg*?HGY4:Djpv?)ۉ ]J~J5e ^NUNr*並z*T,J?BIF!bQr[aSq S[Qx͜ pNG`k_0ĥq+^9-_2F`'_1_橐lApb 10v~+s aMېmR`.AЦ"t=%,wd-M^6ds@i6頛 xDZM^r˼IуijWs<+߂zo~zx1cZ+q> ؏pB90>Fܛ2%V0_{(k6& pf,D}мNP.3!Bf2L=]{f3P[mj$9a dE/';tD:n>]$OGx{iNܦ5HSWMjъc+zkeF_sMǟJoӻmb&b~ɃzOW# 9v9<>R[!,XIN, !y@.)4W#`~,SL-N}2_23{hJ?ܤ{O$:Fe{deҲWș(pbR@8~F;vH1sOۄJ^<'DŤ_ `jA8I>>ck,wZ6:{eʂ= (4ungloftxbgE,ݴxĹ]򺲍P+]\b$TyL?|N.ey,ƌ%zZl}ѕgޢhRG;eJv(VƳEaaN;ݰf;Nuso" ’DI,w!ULSDi18J/-BC3 Y,UT-{|dQAy+]U4l{*Gd嶨,2V}3ؘ\9YoWىU&Jh bߍ=^FI*[[0dL =Uui ~24M0Z:Ҷ C)soGB}=wojFЂP>BqƤ@wW VĖlɤ#poBd0lՎ+=pۂb٭t7/v+nZ:FM(IAl2 f{Zl~[. K֙Mӿ 3Mtg~DzKF ݱy-4!F& k>CGWQd#z]:kɾ3:$M^b^#d;FsnMz+|wR@2a$Wɕtt1$X b qsP6y?n[thhbZ>EZhXwg(sA1夿j: uJnRosB7Y|W&|;eʈs6^2ͪ,a5!fgMv+nZ s[3# `4a,$έFɆǷd(2 |́3<e _3.6,v)M7W3DxΆ=Gf~O&PJ6Ubq-F/b5E;Mܛ&Fu9ʩX{TF{(1V%[Xr3CqľSJaV{y}u 59菁 ט$LyB(9Mᩧ<Žp*'ZnTLKc:}r|15i߮wNE_^`-}<-'16xnʽrχbRgwFgAM t6<!7#}S;%)#v 6OBEA㯩z]elKDŽ$40Z0m*0zk5/I(+9ڴ7Rny,*-?z+;/wEG~*}fijM8h{ObBa}~.1b؂Šb~湟E{ ɚTzS6m q,% p'/)O;pRliVZ6 A F8]Wy+mgV;IƵϪ$qx lOmN6u_8K]%mJH'{ʤocp243Pƾde3?e~+Wr9%͜d4]UE/j5xOa:o3ŴG_(\ ;pE)J"\!1ekF.hj}(xלԌU {UƑS N#LǤ>%g<r,;+B/ۊb^q4~d#$B ovŴ83.%# lfl|"]*A3U2d$v%W%kyl*&a-=yc-KxFn}<//هzF9H񈪊mk/B>L~j5iY<<7U̳'. 719`L73}¥ ^'1}8r.q#b5T|Njߋ0‚sE]tdžtK鄘q=m6Lǜ,ыr}mZ$г嘧2 sPirS ٶ2Nک-*}duťqVJ vR4똎Pӱf2%g_cuAjWl.‚BsfV@dfGES%VI+gK@o͍ivpB"4Z֍8e S}|ڡ,࠴hR)5pQ)n& N#stw=.`[ -iQFa 'B8\+ÝKMs`>EqiRh# My*Ȅ5e3~ ĄQON\C: ٓ;gKv!BP|[XdV o1c$Y\,3,㕁E6O[xdŶEƑz5%O|fNTy0?wPNgPfZ7=Fr_a+ $|c1nvGX߸܍d(E# gd/Gq/"-}*RHtEu<<&4ZB6Qī$`IQ8 z$Dga`YuKj;it p*|D7iIWUnn?0θq 'cZD6 9留?qm(ݰ5i+i(h6^A;ƤkLbZSyP.hZL 5?ڡ}اtTiiOL>M:=$_ŃX}dE).bPOM CrUڊƽ {9$t'wAHYkmC1;myljINuV.*'aܶo\HV؆zgD.៎Oߠm &{Q C?s-e -xuTݸ6t1auుxXG pq]s!g@jưd2D4jp2I+H/qF|H[?G-\z>R]/J%WO[hߠ .ЈNɕ+hW {0k%y~2ѓcEAhN7T/La}b?'V:gDZ'#Z;q"9!FAOڥS4(l; Q76$`#myD>+G Xvd/bf ݒ2M:/˧A>H?b' K!^A0ON|uMj]* \4+}ƿo@#,6ϵi!s|Gd& .})yoT[)Ӧ M:]S˹{s襁r u}ZYB>8yCAPRmfX$RHi t nGݐЭO PuAVYH C?ԭ0mwCzO?oq{6dר{{.F07J4ٸ;ߝ)Wd.Zt\I|LɒJZXƳ6Nٽ?|үuV"Vrӡ:e.%ݷCdXVK;՟Zvw+;/Pg:;Vrn}|o.жQ  Z!Rxp&2.%O0^.dpK8>}EV7UR Ȅ!i=fhЁzNń&x 9r[=xrgwZ?}!]{nk˖U[ZfLd%2\>|[s|0{ m<%˹8 C _K"QyrWZ|%z@ \v}PK4: 'YM[G}gpQ~IlA{HBS؛xzE!A*N˳,|/zP%>My_{#uhfBH+xI􇦋o|G ;]$Tg Gāz2ӽTnIs,PO<8 ˍtKdy9oօ8?!_D5?{Eu; $MQ4dJ.xB/RlokpNN Q?~lI)S`:vv1oikr[3Mssȕ='0i~ 77к1}`\g?Z^VM}NC;&m&K~#';>͚30OQ܌Nt$%fn_S!L'´ǀCJOw";ֈX=f&_/3ljL٘cm+/!|o%[d{&G0nVAO.P(3Fwo$ܱ!ty:gH|3ɽ$BĚp"xH(Y=WGn{"`ٞObA8;p9Wc3"^iAy0SV bnх.Z51g'x2j1&i;f ͚:݈ͧ,O[TȖ,B_MV[]@qCG@@b&~$?Ȉu{Zmxմk銚ם3x j5ցEeeڐc)0#|6hDA^fVy!;(HW}%$ڇ𾵑ŷPS8jԵ79a'kिb·:$B9,WK%W[<+BlnIFh{*Pn'h7з5>x?vAEA' Fo^?3u~ÊC0rag7ǦNUbr"3c'4J{o7N `#UbW_O>/߳?m")-< qtogP=/ 0_нFgeG2m H3 7;ɧ+[^ zu 'FY~'ISַNCE31t86 ՘?pds4(7{WmGQxDgmn mHoeJMfƲ70Κ>n@PW"Q&Ա2ifG1  r,zR펙l8NSݹW ;_t}M az 7ykNsߩ=JK[ ^cWaɤ_#O v6BN׻Ծ;]]]{Vm\?!J=OŰ{ i^^/&N͊ˇ[1[.#m}o7ԽzͳnF*`D+v! "o.}q^|\:sރVvcw(dgsaD{?P7Ff2c5MbD)g1@,hIZeKém)µ& ?!Kg Sni}~kB55郙VqOO_o{M9>]re%_GD Gn:!K+UpkW\ L9rcω0spŵ{DS:<,;>ҡ>6/p*}=/]^Ž=$!+Ak=`^"Ý0|PZP,َ2SGRĩ8%AGށU\br['ÙwϞ8ZyҲӊ/Gw9)*xJbĕ{ׯ(SrL[VC gTW>ŦtVjٿHp ӽ:Ln@p͂O&9Dή?7CVI|4LI{:_4 ŦWCj{ шWbaʞӍZȕ=LO?WX™HBS&pG)7] lpXvk7zލ r<5jg@i&Po>Hp-67N"wPWdV!M͐  . e*M ꧜ qb 6eJ(|`lrߝf͟3Rneڞ[ zK^<꼯 pNԩ/[{gW'}@h@~W>\: @;_$@ZXmez6(֑)goM/eicfCI3ڄg},nk%T`8\XEh|7eIS}]d3N N񭅶htM.,t;6}6%N'~`5;Y|z;24!U}꿇zh'l?+[\dNT8iсǽY+Shé0 V E2ڽW=v9'wVo妳Z#VR; 3OS`Ugubӽy$MkwqX>Wu]X: :ǩ#랼J}Fy*yF4HFL 9uwm7>({= P 'B-c_^E_7-`G!`.xy<}_t;ݥBGY es72Gd: dٓF XǢ`0 eEDeBv_\<})Mt/vbF5+T5T@g gxi^&M"}[lq[M ~>)M 7Yu]{RY.)ZI,Hh ns'<98"~u ~Lfr\3"dOu ӱ+\d;!Tb'4Tjef/2msPcSsR/^(=_os'ku);5 @=Žia97}tq1KfubEԵC!P8Q3WWğ9JQ8"ӾyN `6NluS;J5b-E_#IͱPDW27 WGT{R/О[<|m !ڟ tGdRKFs^K7ĠG a=VA\~?I₹ I^kJxo m1rǧS0*O$.l)L!,iPg>Et}6 ,b +c:E~ R[?+lD͖`qը˵=)t墾^\>N8~eLUMnWᣞy:8dq3Ytg%b1]:%+o8+-{bw5+*kCЇ$Nxo]"2¡ĹɟX] |H%[e%D4j_eV)//RJф!by'cszjZNmΈj> 8y8t/51n؍&B qsJfX+i<y0Kll:NX|bK}ū0t5mTŚs6&\ҫY@ZX{2dxa A:!9][{Brq#_CA& [%O6NK`z&dPka$S37{Z<]q*xDG `)5 v{SCU$p~~xn?o8\g K3߁,&f8%]엍SGU9k"#'G5vVwۅg$. Io@,`eS{9e>\'u;4j9!yzC>YNfЭ{RӌFAy niWrN^.Fn縷 z7ƚdH69yBu7qH{!Rno6ʜmPn{C*r5>j`:)zo xNP'LM7KX^ঃ{³m}TOr5rpiJ S[. ޅ^r{k )ţsQۭ9`o ir*|}T7YAFߍ[A|?!&jQz]Ji Hg30z7Gݢ97M{Ehܲrit!7x- wFG;ɛX+dS)CJ=;~_zJ[05n r6ǧO4*|s$gV(4-pbN޸d;25)Z;ڏ+; h#1 XmF彽Sn{wo b/6iodn1 k )Be]Ϥ-qLҍ1ߛ:lX6er&b:3a}]$@w!VhhlN,Bh\.M<= bԩg1)|אW-ٴTV{~97joQ+Ӳ}7t4FBL$Зo9!6o-VٔṼ=N^*;&Di@6n_APm!X-25&^Wv^'^TkeR9.Ql֍F ɽ$Fa(3'ef}gi ~ϾCp]ms ݹC9BIȚ9gɿ`p_Y6Lem<&pngo#8`A=r+8!`h.=(ƂʼnV,cJvbX##PlIO=l|O~oG9-H[+9kq=]!0Ɋ ׃Ye(`VٲMGٚiKe34/nYزq}Feތ3^j-[<qC} d.=zM[gY&Oo0&whssxȀZR+^^}_XslOJ-Br_,P&;ft7ntF6JQxmjDIomzki1p~%v10Fq+b XU8[ {m`}5/-xZ81V|<`Oݻ޲^ΟW׷OɉW#p,-*w3)]TQjo04$A [,|wA\=]O;>cܨby0?q' 0$+JQ,~|Ahò&z^{_nY{}KONJ4?Qbxm ~6n =} >ocdYp";exk1SLSo waڹדOʰ;1+ P̻\7ۅ?Jit]seIMoq˪}N2J׽n hgnWLn%B/{*=Ynj{.gtݺ@AV+3ŤbȑjR/5Fdv nD!)CnkGrjُp w858M5iV{쐿%ǾSA< ~18¿ ! Nyс 3IA0z5: RJ{.(dla ۭC(R]0j"a4Axz;JM:#iV$=b87[XLݻKM҉?: B/+߮2Ϯ῕oL*b Gˌ@FGJ?Hr+yHmT$Nb4lf4rNϔl -QIMdp9]tE}pTډwqP3񲉽jˣenxva=4:g>Td+ڃTݦ3a#VUkg`tQu/ }W" ΅:hd}/bS9R#(&#nGEA\{&7/^=cAJ:%i!L=XN ?]gP.4ɟ ʽ,-=<.#߽=aXnb>iiWe\nη3'9| Kl;XLƔ=\kzܘX93L~,Ż(6bmPn1Bz>SiJ(9ܰm1&.YP!P4M;0wKo 9Rw/fЙr/cS(W/Lf㱢LjIpq'-$yT| ?s=JN SHJ_\zVH裭DdlG߆iۍNraJhWUrw\Emxg&^@O^18ӊipN$xZ41o\#q#6`&cz`vN[2|x&z>`;g9q; KϾ9͑vhGhK^;6q[fe,0y1Kl[3q2~gT[$DRȵ4#wvp9a؞ [_o!5řs@@_9}A* '  $lODs{驮Vb;{Fg[Q ?::)>$=F@ p{.e}u#"AXB$&XJE [WIw;!1+4>3h^&?Y̓=Ss̚Q>P!fe2dXܿK۹] ~I|{,#Ġ!D/$AA-'Rֵ]Mt'a.~8 Wvis.k;n<" 7ޘ~kiM;9Z10nn#Fr1{LAfBӓ#u"F'<֠Paor+1ys99k_/X`IN_%MǵSspWJlç;{<;W>3r嗢'gȧ'O*wTxk. }9Jo= Ae$9]`$T%7W67i7JiߟyrE۔H2*vjO!@mLIBмRbK vrmgvXIneۖR`%z4*IA5١j'ܡ0y܆7oiTA*Hwl=ǘf g)N\^tM?6ANXNj2JPΩBkZr[M Y_>optp|'ü̧-oS?"^?$ =>qۯSoUGY.w{Dw]0cd"~Ts7 ˴Tye$vǐ "-19cfp tdD^ ĥ1)Z~v^S-3@~rr|S @_7yNbMip)8"v9xHMNn/[Q#N 酪N>wUtAyO?i"}=47XalꯥFrAK s7_~wl[@\M"oTXZ=ABg >Ҍ]9 }S>lxkOSf߆d pޞ]q|-n=? Y d;Nd[w.ٞl]vdXUfZ4)9N Ko((`P.7u7{ƵuƜo_cґ萹+-l3F Z郈s{FGuv+bO1дAr7^J:O)+S}Z)Α.wmOutź$f?2焣e>WlWmo{Gv)blM8\oyC_'h)< + j0, w2^ q%—vkBG3G6ˬ?d'Am u1NgQ궉vDlcYc{|r~:nm=XS$:H iG*ý#nL}4U+ef;9+#2ظ>~{\mz*B@5gEw 45vsgHNeZ ȆeBuz# 3m8|}:U(:*-d(/_RB' |q|$r{gO9ϭ:HeIYQL;x4Գ2vWg0/g͐ gc.WV9p+s!wMT{ j ZkY(4_$B\.wooʛT|\ܚ9jtwUhRw8B$s鈼 2 Hiv|lZb.Rؽvgjjp-td>Dɒx#q Hj);/d۵Ubz}S"Ţcn+T\/?k0 b:ѝTmMwO]t6KlJY<|\HqvHVnM@hХFh_ºN>3 Ҟܻܼ| qH;QIUh*W6_ZE) 0DDŽ1T\CvTr)AU{Q*Q-(4>rwٴlYe(t:Nf0'hxq&OL:җx[Q7Ws5*I8g$}'NNuC]]R-VA QdjJh#vElc$]5}-ZӱupILAaU8F~K]vYSt|9n1Ƀf]56fvaq ޷=K rh₅VqXniޱyzb;Q;6Fpj+YXы|k'%9=a:e#é}p#>@?M v%$7X%J\ʪnRiA޾<[8߻C j۾']!I*^BE?,Nb,ךx4kLq}n fl>O+ G;|3he=]XBcReXU_/=E, 5bpk%KA.raxB۸.R.yxrs,tAՍb{6-/u{M!=$=, p|ri&m7(QNJ[**=^e|ֻ Bh ŅR\c&=W~]>=OZ%yTj] Nw%'߂iQHV: k$zl,4ſ&Zw12z饑٤JLhVxF:ˆՕĴ8E4?T7bI7Yt=^alAVAX3`b /zUUƴ3VݢXwnرBC3 kp#6XtZÑj>}ʃMNpX W mho隃nSx}xIN k鋫䙞3BaA/5U+4N{n=Pe7ero" }/){ct&6_H?D2~cLv0?<{K8j΅_qn}.A \}Mi/JfLÄ꺹}:_dXuG*}6|5 jαU,ՑYBS@n f"cb5v٩v7-U+F~ш#F[ǧ6r.=Ɓ[ _\0؄DIeF;'Pmc?:@Pg+9y| #&Y;0wq|=9kfJwF!PgzwHsϑaiaes¢7@?jE CIcWW*Se&snsgO}JTY ]ۦA&ʰ)]]w}iyIe :yH a*6:JwN¶5:y=ROĩXfȜs01L$}}q*gqw&cWX!{_bex`<^NN+?&o׵cDQyit+I M鋻@zZ@[O(l[Uc ~wB4ưn0Pc܅ImYpՂŔ<%WG,; 7rcf ث`ӥyGQ^W4RN+vk lWk>&Oa=QK+obx|g T}?ɭ$ax#`/(+|+86.bwXC2ONEo}Q,+ɡm\x*u@yԻA=5d/rRmlsU6[M[د-}/loP!sa(F5[wz$0ko>[84 ]RZ1<%d-h- ;oc5Z[sq 4osdRPę`l%9}/q]N4ITqv39O˅ _7av$ƈ=,: IohbrHt\[&2ݡ~CVfnpNnN} ׮4^˯ٓ\_gp2ey%wы\z0hM(ץisv/BMJw:[Lgбtܝz 6/*paj̹5x`;e찺1}G A4}3]سG{Ѹ(څ.MRIJoݷXlyy9-2WO[e`^ka9@}2tZJG@{f#mHoo%n*|ƿ(3>»j/[.3C)k\jcT:ܧpXS6yOl4`Os SaZ<;WF@ ۡ8M o=~Cy*|d`$Iw}H:uVbr ajz;fA1jvEWGu7-hY&K;,:71Z(THSm/СtAF#3J0& ~]:z(`8% rz{铿W+cjƷ]{4mL[ENe1!4}R=,ev s{S` jKf<Vʰ[NTgT݊EOo5ƊZ+aInd/V`-Ɗ 7|o(҆'}ESm KLY ބFD[ twoc㔓+vx|pY. czc^TDlߠAu;n"SAN0ީ xH\2;Ig\+E3vKۿW!oݷRDr]tM]dҔKؔrJ+Z/626ht4K?4:JZꍈ{EV)}Q\K$6[lN]X˽$.FAOyS|ǚmlg!8.5L'-OeH[Q٦i|_=8Cl89m=DGpڕ.C} h;kS@EhV6 7ŲV3n=X un-Eز= BuZNJW2>86ռ < . 1^TG)6Ŀ) |9T+jd'khkĠs!VRtV:"d=X8bہ aDZۂ W(bwʣ}9AI4Vii"y3;S,=JlYÙ O?)yv$M >4f>4Z5P9"y#&86gYNGTȿ NzS8g㊅p{X^un5ڽ~Jw>|AwlYڜ-pR#nrSnO}_hHoŠCv&r2ͰN8mp2?g..,?ʼn2 鲠\yn7r닁q '4rs!9+Yw ̣}/APŞyTZsDD٢h񾍇tRx"]2mpfݵg~W lN36d)Jl}}vp1{lNcIvf߳9:Ju2 imwzz#HթFṶ"yrܚ`]}e7_u7}ΰm_xKgxRxccL aN{p-{Ѳ9 6}ʀb{wDs`3/9'Mq܌x3 q Em4>h@uWz򿎺Eu+ETrejL{/uFQ _514Jɷ@j+RGa:g(rR5qX7 Nip)JϽ8MS,wsaAdG (I߅D#pX( ;7EnW|o g/5UrwKJz 06v4 !4V#ߤ\O$8$t%^yiw1p8,\Z%LZX (ܘZ޵1Z8k'aU id,XRx#ΧLĪ9V{rV~+~ twWvc{mC)wD-&dx:z镆CӰzua|O? ?KwPe+s& P];~ۣu@FپmMRp-˿a`Z4=Q ZGn=easZ[JnW+ ɣ4¹΀ %W:L{m[)N%Jj4qn RPBbw\Y,-T+NB7c1$,.zSnùʁy.k}ᠨn71z8^boι:_(SGvwSajiẘnh'M>.spd)&"rz'ClI!9A?SE[}f+THJ'њl&eybd-4ZkьA2[b#BɗR/B<Lr@;z:0)BݖSEd UzJNgnCojw[}a;{wD,iykPdwh-&\~whvɲr6e jϙTK2Z{ťe ]}z Ǥk@Y0(d`rԼ;=y&5I؋{j[`[_4X7J/hn; tS\]9sۤM'ldM\?b=וlh?l $)$S{4y1a>fb1Fa.Jןb"7_Ƌ.N@G=Nj,JswN\@:@^3=VE1aJrԯN 78/xMt>_HUj;BѡjB+l<##눍d)-) LxԥǿxVb,}4:7 3O!m`gpܭqtRn/ga&.wU+ʯӻJn+g F6c Fޑ!fæc_0&5N9?T{K7iYV@youu2ds3Lz\,bBQG$L8fzKeb8qDE_t9&E#C[ԣ_RX.jQ˖t2 p 3oO[QQwPn 8jx;7=$mZ79fMH^#~j'(>G=f$gP +4#3$GX+,O-2y_^1Wo81֥' wQgqwA\Om!9GεI *+Ieq,!EkG/-a!^G]T .%,+rcv"j5pN^h$7\mWZmzv<ݓr;d\S'O"MEXcĒjKl&+~XZ htyo\ ^'X}Dp?i /*}~Cszp6Ut vƃT *wtڠ`w݅hWN9ebbw^tjێ$FKR_u/o3sG~KH& NGB]'#ϙ=<ی ?$4 Gv$MwTj~F'ٞbb nx"oU Pe<]}_!;>~PӲظE'$4lAA_¯ﮏTݳF(ϕJfGg]5*o"ܧV=ft`jcg#2,;_ |}^A4r ˦<ԁӅm3g9w{x~)5FՒiwԿ̙ #f.b0ř_-8>@B;/WmA\;yDtYUoBKEq_[y&K+9 c`>ArZ#0+H.хNLVjv:i [yP), K2(Fw_ hto/k-E}w}_(#oJXTG$ mҞl,!\5nI$iGSHv"OTmzrkA;C̲y ];#XvߕNs@!Oh46Ѩa2M(޳qf/QBވݢm)Ui$KV_xPGB޿Uv4ܚv⩬Z 55EɊrRc%_<"K:}U䙮C"?wp1Hxʽ[{͋tTi|VRvJQD ۍCBx7lɂG!DMNz3ku;Cbdr´eZäifНe+2u'`Ew^&lMArH Z@">N-|P(+m"FF)XjL^鞁/sK0<;ׁ/.Z=}&,$ޭ}qq*<+sYP~G v$9馓#61$<ѱ^ڍQoD(K84*n\E{CeD7ȊDm:鰢ON4%9Ԋ}l[ݡB;:Zw\Xx%$k`rL¸cc <-b #qShT27=ߞ3a>qg ڡ0BtT`i 8B'?ol+*ZVX#g>۽jk;߾}F>eN<,5ss,4L/$IEÿǿe4 ]kX v䱺V/b4yNXݍ{ôX$E -?{3wbE4W4t0Μs^9{(΀ ǧ}]Sr֟YvoУ!F bK.qEÐ].*?z"O}MZkEqi<1z4?iפF*mz/*Mєm} $vXK=ԙ\T;y*l;ܭ+⻀N+<ә%K@<DȌxן0:N8>%ԉ4zaM=y}#ǻNFzo/1h aD_(SƒJzm{NWI~A#:poyB\l澿ӔlI!R/XFvXkGܕ UjNj 6s`"S ӯ١zi w3"3i).x\0vƖ2D',UN߄ qдVBBGi0z Od7kZ1w;ŵ!R#}Ш2 r`,FR63~PK5ڰ}3Wh)V 5µMji}`x' d--a)4yzcB-u\bw/!n1u|gIIX}yWC F{r-2nVc-ntN <O@~g(>pTmK Fmil;w p`O:}9L[ 5ýբ0U}f*q*܌a7z )}U5[}ղԐF:335ܱamb[齃 ,RnW_ROb{z܊uZ|dr*|%"ëe/--ZǨv`Op <+8pl!¿&2'kc׶lt@ ۓQ L߾i2w/^jQ{; ~b@]]S[yĤ)Rk_Euӎԉ<b?у. 1y Mg3=%-Ų:#xқm6}17фaEߓy]Ί .~A+q$8p+69rWz&ݻ*3ACޒQxy~T&zgOve\X|3VdĒX32 ?tB* ƷN 4Ō[<LNo -f,/LzD}'zk#-M^8nD6 3U\:Vд}'&70baG=y{2E+NRtIߩut xL޿ƦRD÷@9!m0Sj/g?EB}q %8B V#/u܅(I^x677GSw'I|OA#vkgC\2UU[{_֗}U!ڹ0;V.6R,:,[TMOEK5; lVar][;'I>*9(q_م):_ #4kqbfg:@:8i~p]IۆBM~AW3}O| gOzetwul9c9rwcD` o]gb][6&Gi}<ļrXjkJ:ZR2xϾJY4JwDD${EF2]/TqP+5dnک~A~gmj̗֯*ܘ^ֹ0:~Ɨz*5KrPt+K/箬$=1TJN9qO 6T˯rF$zp@Ŋ8 wOWZ/k"|MT!}fZ^ B;NuX1TV;9_Ǚpyq9rt V+p\}:w{}l[FWEo.ԳW4)4:b҅ Eo]=m%ca,<5?ީCc؞M\aSZ w>H+IXg^qJ^A?{!+ک0*.:,ݜV{`v=劻veKYFF'_@:N7v7j[J]+i+@MyݕJbQ8uFrL˅9Zm'9*j8I9 9u_C4];o$9]=k9ʭ蠖 n`#%;j/{|jWo 㫩i0²b7tZو  Nt{S$ ~@{emY',zrQT˟mQaD*#:8G/HbcᜤQd:zߩp%wM) YFhrZZn 1poބ7^\=޼ {޼cu8j9-7oEnכW3nL&Bc<ߙs_3J0 g"Pxǥӯ"ʂk:17C !P6{|&[¬wRiwqutP1.$cECR5D# HOŤwnFH'Vz O_TFpyH)˹^|MӔ.u؍s)i)QؒA m+G8jH^wK?Jوy3DT?(Í;s~Cx٢:.Xz>AnpOt٫ /Z vVez,=O&_:Xhg2s&;v\!K V߆V(۽4>gsn: &Ll`NʅMj$ν:m9ʝ۵7Ŀ , aUF!kvMH]$SpU#;1 yXp~9EަW5wTxO S]ϗ(4 Id6U(}RF^*7'܇i58o|oXezFa)tmҤ8=p{2xWJ#߾Q|w09g\lOEC[V1㽳V[ ,sɖ=$M?`F5ࣾv3fjӁmi\2k<I|8t>i#'Dzr͓Bp }@19EKԅI; H~ͱoqRv Ke , rի٫qUUFT'#겒7Ѓ^7WҸ*$lzr4]|QSn'p xdNuclIW7\ vWO8{ykk,8uO/~Rqc4)szߕ&+6Ը rh%ߑ.U/> ømy*Ϡ2_^>fjn;[Q_zYJkWo}zikdBau8L蜗KG=fB [σAQ&CYbُ\yQz ?Urzk۹ Xރ9t,0]; ,Ҙg(nši/,oNmK,vM_M CRKͬCPGiEVmpѺ E.>A䁽 Ku%FnkQ(wFLm^*SD+s✚-Lۆtk7&H%B}q/T+hA#|[piN2Fb<(12=Ej kN'i.kwNrz#N\߾lp+xAOU\!Z#Lq3j##. B[:-DK;:w,(njMMkFSNbr+vq׺e!J5CNaHpqI8dׯЩwl)|5[5Q^ ns8»a\>{y_x%K{BaH$ SӋHi;Aɗ}} ASyՄvMifVN_H71>g.?5vtta8XkӦAoz`&P(U}_KP{OѯͧxB=Wz=2?M&fPE{/6ރQ.j0oL[,1:QH@hgZ86?ut{}GGp u8E2 ɿeDI$-'$tY T#WO>h:p5*\#խS5GCR( 痰?؞+F!Cjտʽ!\75k_+rRDzO;<rׇMŲ]2:$]#K8"[gꯘNP+gImױ,.Wݑ{R$pN'}ӽcY a>KUC> Kw1r>&|4/hLyZ~wS|9lM_w{]*Gi+:l{X[օfkD^j2jvnW ;=t_;"Oʝ#!7zs`״.DpcF\~BRWK7.¸bsg`/Dn?qw+X҂a<" 8 ^;x8$nC:np)o.ZO-G5:RNREݶX-mBG>AnL4:❪' Z K#з7< ŖP R^z;]]0Ƹ+N"cM v~e)??=+jgpi閥+N(W5 ێRuOh2w IľE]~;m+Qc ,Nf-~k'K>-+C4l:R v´?JO ID 63DWlQ+hUձqYYnNއm{2mcV!wBfޝfY Zj0s⪙r}m9c{mA^ȕӐ5~8ӽ@1@]:ea6׳^6wZ2}6vl(>B{P-9KӢﷱ NtچlކlKȎ?XܤHHn@A^w;af=T>)'|N%{uk2&_h$:P`Eɧ>qjdl?GOU# /"FFWO0"xkZpkQ) \P&{j]v6{+^=AjG6%"&HkBy~qmy㍤]H KW#jS~Jv~=f-T(_>4ӝp`:}hDTֻׯWȤeؚYѾ}jΧcp 2b1}V!ߋW󈟮/ 8zM<OkSh;>}}sB+\S<|)+m)+SXVu),Y/ZiM,U#t/aOeN= kS~3vnm!U#j;{:]vXDo{_dS *nnoUc66'o.Ύ"8Y t!O_Й.-{8ƙ؝FŢ%96.uv \59C-ds`㒞E1VM akKZ Ӹ`H$s s gE2{H]Mt,~=B3Jjm&+#=ba0 H]S{'Q6N)z5OR }I]9)Ǘr=٠Ve bP/TBwQ2!~vWN.AɌF͞WtYb;Dgڄ'_4E;mecvm ;ͅG* )?>1<K.Ŕ& jٽ'#H;+)}^6W-G[H%l6&Y7W' zaͰoK*\t5<*VS2BFVl8!4s(Z|SRO3c7s*</5~#IPCqZR/IX)vR;D/Xƭ :3$`+5vW>g|DKS׊s-SqmpJCbni⻏9~}Bcrg~ a Y&"*Nvkul,%w&$܄<2LdM:K2:NHn@4ME;=}Ty5U@ۙh ׆xvZ|;g0"HH rEܷpKAB o/ 9o4EoTpC' ۷}FgQDlONwr5j7x_}E *׹h)*'jmΝFCd0N{p5qHqYS]|9+Mu x: "-Yo6L֞LX]52`%ۣdoN~vn\h4)!"YBn8V' ")^Z?A@ȼrnBvmd)vߋ$b/zؤ}G t<_fLvU6|y%L<){֍-V%b>cj:JUAM zc ҥ3B/t!<H%8vҚrƾ@|R2/\> q2d>ٸKq;8 3ens8S[oFҩI$n %;xR^KEDz'r ͦ"h"Uḫ8!~\8{eu" Z$B&,2&ʎ(T7"ܓr!ƵH|UQdcLN֒Ɯw /E+czm) ~`p`?C$htw?E#Cpj]Pcp:yo{gJnP@Lce. U w>9i*#PAi64[{2פfM;3y?d U .%=73Rmg HS&MقjcPntM ok;14Rc;:|'&&m/]ݨ061ؽIS$yIV[M6g{z*XG@ݴ ?z]f~g] z*":;{ :8}=[ҙٺ(@)ԘC,CeS&5{<ܰkƥωpk:X؍I?Ãi(V֨%JJ]WJ \;S! helQ *q*}Hk6N,%=%V?ܱI,n ?]^yQXBVяR{8nC T~ۀVq0+vZ1COpBڊ*SGr{*3ʾK=vmuEL%},2saJV=oMoK ~[mob25dVg L]8c$;=NZK/:Y{R/MƩ=nu[ OŊ \?n8B.3(9;]N_/)ܹh+mtu7 Ha3ouL-dAto.$ӊ( F1FLH^Pov)\/P&˷yiKxp*Wo)Ʃ!BbEʫų'B~S8C;3X7Wl_>;f_5W8`ec{JiX[fK7OɃqۧKRhWBhΡ趑z*FGuf9n87t~z7`9OkW{!/H^ֲr|I/vh|}Ըm}ōS1fc:ZNǮaD9͆f ~a2EURvfܳҕvQavCKh;^Ama.ΰIJC ;7)oaNſDV-) ]0Bw-vClYS{L.[.D+&Zѯ.IΏ&T4[YW,Ͻ OX$"_,dqe Gq-^A d޴۟NNN_Oi>y6NIm2~5B5{=tAt)Cz7sgߥ!e}NAWYyK@׾;$d8v/SlqBYvsh|B^AeL=e$cүmo}#>N/{y-+ߞ.+z1;чnR?4,915ٜP3:]Br:'!ٯ͒s+M?0~D/Uڏ)SL%d + roz;-Gm\9yhPƴ=~׉^B?'ql<06:H}Za2Śxu1eVz 5@Ph\e-sM/^N="ω"K2X*><`nimnb(R4y<W ҋ٣5J>TK^1npuY4*L G{2nkt{B'3qTZu1*|M:Ea&3Ha5ܪ:A//-cCh&dzq(*u ~iuW^lΤ IZX Do8߳|F.`M${F/0ѹz:2Up^ >kGH1/qKl-k3(t;O6G)bZvMg~ˉZ&߳A`ʘi')x#`籭 l2d\/T(4_t{!8 ܹ.VMc'S$]9NFT}A&mQ|8!:,α~+ y_e?t kj]i޽n<(acR8%oܲjw-vMd`^A&(4tckk/@w,{_Gf*-:s,T>>; ůlx2]`{zuDn nA[1B^S<RϓٰKj%t=U0!kK8H}ˀa6^$_A'Iuzd, Hu&a NaH8 #8u?rnVr /#wnn-)N/ `| +ы 6mR'Yfrw ,kpm~@Ib,,N Bķ:h$V=|RE4wNO'~_kdRz'c/1L^_[}}ㄅ^87 EwoGTk~^lMT;WV΅ ҂ / BCn&̉8㬿FC K=yfi+軸:ܫB,fIkwaLJ!N'UXl;.ix- Nؗ.w蒶 #.ix>fw 4& ,JC,pZxa2*"q)sꚿ&O|XݯZ-x~"zP-}A6Qx²Zk .w_)yf`4#M@65$N#~!;AWY mt2L;vSӄx~8$o6bCt[G m6{nޫX$;ΉPZ|+* NQr/ε 7+W]PXac5obmA/X\:Fw3ܜ^SrzW=-ѳ>^P_)/'xn4z}}4uFBGE|^|JX$Xs1?bA!<׹i#4BɌt/wD 7TzvIÓd"/uo("eSmӶ|n}[yAlACAga.)į[UOn;2:vmmtos+<Le66E Y8 H2`w -/ wC,- R7Z/T{ض3e n nnB%9s+O\%vw_j 1e~ߗ2b2z-ric.xU}Ǿ9_* VT#S3Wo$ -6ӿ<޻)6esb; DZ m"'ozL;&Uy^6)2Z{DT*ܿݿVvS{՚Pi\}MD 9=Sc*N|![^Jw=r@6;EMʯe%;܌7"(enaw.R)l(W"Rns] rc7._ll_\8J5G frեttW 'f%[oY8k@QU-dוBSzAN+6vʯUy)E8"tQ $4ߵsih|n\+Ys WԠw4Qe$;=4-= [65|Ngۘ'Mr/>`}V9m)"jV k7c'bBjՊ/+Y+gU~g7wd-tlBooQIne/9Diڙ%V{tl{ӾYu] 2 eb5{ߓ|e3w 3bJ c) #;Hizs|Y]{Xܒl*;vSq}O"+S\O23 }F?x꿘Ěڕ0{ఝvOD2Vxzr| +qLG73Rm2RFilm܆=]'s ѷ^LBK`y]cór-u"<_¶Iﳰ!{B<.ܠv!N690kg@Tg̙XqnWM,; li-`KvM$r/r z=Mgċi cShW__,dnF"O\fҫꦃJ <Ӿ X2$M:6ޜw*|l}eIc;$a7]MOnm•t+bchл/ /)>kV, c]3^P.hfvC¾yE}M9dXzw9!n_p;B~O`wf!Am [ج`&Oڋɫk۸J$>(מJW.nL]?)]288Q.K؎^$㖩E|v$-/<Ct =ãpܝus 2M?鴽tF>6a&#x"xb(=6µ79I϶g֫1U*Dwg:%Ez$^\뼨":Gԫ B(׿&nG#9}YSq, c)ݫ]=/K8:Z3[:FkҀ& [ȸ1 P& ל4(,!>iw;zJM s-|%2[OXǶ*nѓubmV]*rۓgsr{׹l~#DZ\DnYb}'.3OU/Vzہj,DlO7sub#HĞ(ƫg'\wHmBgyt^5V |9^+EqgK N)>`@ksqΑf,\(o.%0]>ڸ]9R [rolawʐ ,LǾ8FqFGLp[FD||»lmZXoA`=RR<|nQ|l MO/^_]*i (.)R9x5bbƪ!3S)d^)$866GJpn?-KޫU_GGWWрq- )8uכ":?^;sѐIX'|LӧZK)*tM#;lH/p(՞z*~>BXk uzȚ*m8+)-u~{sp>hux\šهog;ec6YO!l)1eD90y9c D3\+c5:qs=EK_jAcINT-{Yrgp1O.m ܿF+w)ڳ^o&Մ˜fEC (bͱ\/z7.2yop] ǽ!iqǞ];'ֱtw_/Nj+GC%hYĊ!d;%aim΍J͓ٖ1 ]p^n_1J˽kYԠ{C4: Չ+ +r俸/掶'75 hMhXki2XN[CyYGFcz޳1TZ>ePmmME&=ev]?{?|IɶK pR0J7 F*1p}J@a+]Ki`x0VRFO'ݧtfz(Ft>8w0E ]–*)BI|TE3Q_7!z!p]guˤm͘d%ZG'SOn ;렊{BrAk(` #lZ]w;(a'@o<7jw/|'#ߟx!lsy}&Vv.Mv4e{3N|&xE gfn2dN"6L滍:ӕT(س>2DR?hnI cz{Ґ6Y+M(L?2r͛o{ȩ9y}Is_ϱIά.Pi!r©߬K؄س&`J!Pծz{ߛ_<]5OyG{\I'7͌҇R&v&=Z= r0 'Hϳ`O;W7%IFC^{F񔑻@1Sc"苍'7ܫԲ ' xFH¶] _ZNYNҳm^o N?rp_=DEmqs5Y]eEk=ėPnKE:\{tz@̶ s7$AXuvw fycxkLus@Us~[h6:%.7V>SW^`7@7whedMsFώwLx# #U;>TpIݵ,Bѱ,\=ArG"6ۅp<\P=9ފ ]pVʩx[]~ڜ` FבO3s:vQ(!7{>a!¥(tzapGC&?E$l |u憻J{_eA;}'mGO*'ٳPyx_TY7Ƿ8.(1tC`.;0 |77ĥG*@Y޸j)ˮN gFi  L":hJ0l)u gxݡ5\}l8 ٦^>QDilTI/ӳ UA.O.q|ܰb3Ss=\Arb9.o82ubb_IQ'܁>*qbv[K.0yht~޲3S; r-1&k7x@~F-Vb0_kFDD;{։nXO! ӿ*-$ީ&"̗;0w֡!_<MuJe;_v12gpR Y4Qp:ǑE{KIrҷ||ZQ^O:^C*ƞtc.A8 7[:;K`̹Q+pQhrM_(%{ΏS ٫_-=v#KyhCչWT tD#g܌QH`@>n(TmFg;8I}xUSg2XV~A`iο}S=CN#DK%V} Vɏ%I+DKl}8+M{8ZILX6tF|,ᛜ a;sG69#/Jj$5բRm2܈csLl8T p&kbM{WqNmypfg*uFB-s^j U- {TmB%*$a0W죃#Lq%!U(v#sC达G+I%$koT;"e3W+7Ս^_ڥ_& -fMlm xW;sѤ~ ~^727C"wୟᓗ^·7)P?۩@]?z~ 0_sǭD(F%+4Բx-_T4{y/t!{u|w N>E#|y/Luŋ;4=!W2p]swInӄ+dהkHt[:y`Q#?E=x 4Ğ-C,m}WYNf@t55ӝɲo3n`]ckJLe]4ĭnӃiû,лv%ΩuňeM8ѫ/ŗ у%wo0X؞ǃP-.y Q8Q8k_F$,X=EooJDf/V,:^WSkJܴ6E\=H]oc9xߝ'J˛z="JEPZok6޾!7/KJEN[Ӿ$H*"z?*&11rP4|=`d-CY[{Jo(zU}-\(4W}gY5*Ɋc+P@w^:hFtu_'Pb?ߢl ^='_]:rFާ'Xʮ8n/FEo]?~/sI%?US7=2)[KqR9~FѰs5v(<1 eVn/Fxz0OYb-ӟ@͞^c-54D#<\׫651ʍFv:S6|ک*lͶ x;/G)%N01^"up}7thHHlpn/q)saZ<)I62iq}~>qʾi8>޼F|uN/w,Z{[^;D#b%^yDܔ:uָewe[]E 3J{qKoTPoLfm6Ty}^ưS/3*yI l3m'B=^} [ I ^ָvUpܿ;-3oGt\ a\BȮ%y4\Bn>J_Z)9:WWÁU t]Ȍ3}K_5BQhf= r_.ņ_fp Pm'H"sqM)et8,sI~6 mQ4*@sמ++*;W+ҏﳫPyA͠4}wݑF餗 0~I*X}:5~Qa=.,5ܝҋHJӫ0遙x k^8c 1ʋ]*uVOqFI-\}ݯ!]ٱmpqp@2$dV~p93i$|$+'Sn+z"lj̓/>AI Q` {ǭ6{:hVBjɭgs0w)?/N0Q8aƽ&Cʫvg /,}`'JS+? aI%kbmY?<=>,6kvn[%M:` #/^ꤑ؍nmr)]$u-& ۘ; ia) P~5@9pzJqsi<]Sbrbk9wB,3TWQ2/g%'%VXŦ;T7~qAyFrh'zoD|qKJc$<庾qXnMeݘ/]'{PmSaO>%6(:;0ߧ3*EWOz`*;૜RufW H6ĥ"-^h13- '1C/Kح?2y[kcou3]51ݙt3P|%*Īڄ)=u5펻{qn -Nun8%59 -[@OO: ҩ;ka껝Zѓi䆽P^b.0#2ylFb~M+zDY DXrB;i~r9;̤TVQ ٤WqыXy= PH/;4tF *ک/b!hB\bˮOHpҳdCvJSn@h\Xx+buӭ [0"wI/zmnJbN+ZKs2bQƃv6 {Sba殤0kǭ\fzŷ ?֠IM`I|+ ~b3I)LRsVcSql vZ[5^))!{pUqT= l7ܗ,fbrù*s=6)D:y kНk^fNֻ_مgvs݉Ix>}vR}OOїQ}vM==ojKHٖm [۾3:&)/Ksafb$ Cw׌Rv律Wr;86f@]] {hNeu(f)nG/Z"ntRha^Jkrg_:~*L=@odz!R!8ШJl=`ɤ?ļIk%W%MoahoiɚK6~ꄿD]jJ؎1Z r׿"UaHS>cY(krsB:F_mF~-USl!Mѯȱs̟X3HW Fg=tgm*--+BH-}#\q-?gawbO;dLl r=`!m^w S;&.] Q{GXtfu6#^c;Oͽd$۝ݰ}4u4 ;{dtE?/$TJ NMw c,wPґjF|FWvMSWGݰ>2m  dB Cx Ѝ=n`X/gPEdZcC- 곲؍-Pfv }ކ]ũXbL0g3gBe{v䷞ŰK=&XnZoQx{r46$Q"Y~轐pIO*Z辙7J/jo3)|nZ)IE <Ɣr*Ef>t<O񹑵Sw_Ұ-|v䇻1Zw|U-]gŧO?l?„R6dCQ]#yH"ҧN]2-W۫P^L(-YM{9( vl >r*v@ᤇe))웆_ 3 KhK$_C~}ୗF9%%W0V|eR T86]}m|ۺ %l+N#Ic^ IR3-bds3Hk1䙶XQ?V'J+3Uh3:*-o˼RnBn G-waҶc^ Fؼp>[5E=m4ڎlsUn5G[ &'(u+:9)4 >*fNb_ (#xwGgy[0nR>E1>s+c/7tDCDB5Axb ~۶nP$n@!t,Nt#Pp-lF˳ܻS!zOŎXIph+?} =nYK+ٿI͑9sSי (K˓'a4ݲ&1PCc8GqʹMtգjf%A-8sg]cԴ8P }OeH?qqL}Afal]}1{= 82Ti mT F_ P'W4F3 wah6/ARaG.qw> ea 8Uρ<#КlJXwy#]Sq2vIrf+;LqI=˺{ mfdsGsZUx~VBJėCkvɷ~^ÜƽO{Bx # S̓5S1w>`1\xݱ( ;0FOMIfSwlfeNt{#3wQCKQ䎊oшDm !Y'{~D_&п,,j.7wny7OA/ˆ%T[!jż$/]e^K`fiXeǐ3pPd5tE,o"- m4BR>Jm$ B ;T|WZW]P_"g= |[:O-^Ϯ(H.\SIq #_&sx7cEӜquln}!9it9K [vsmXA3zգxVנ5[oޕTƑ/|#Br%Tk7+r8Ӹ֮.8d;ನIF̡JI 1֔Щbv^1;̸0'`bSe$s`ކ${Wxdn 'Яp&ux3>DƁieD}e/*N1Ctr,ғӄ;!<CuBy! aĴ HZwpN贮S[acm{mn|{tTa9wS+`o?vn:)V޿S&Z$K+3<$6R 7>zUFM_!.ݸe9ΏL@Nb6/cqzg8l 2J:&J+L۔#>.7(}E]rD3E9^q\zn\P7g],m,+?m| ^1;B"BTI .ӯz8"MNU0ûycue{QY5yڂ,)A𥆄YƥE ;)!0 MxwZVxǗ /"lϼ/Q&ob0fpV! SzF!joNW34M.ܱ%8Kp1lC@yeÌ- w':ָǹB[ʹA NNLܓKwRM8Z뮎@EH={U[SKIW L^)m\26<]\`^Tbf`-fT:ʛɤF5^A,\;[Pߧ l[/SV΀X@BBԟ_2lv|A>K93>GƒۯLE*r۠xhPDz۷@[V) 8tV \kµ{#mHk`#K;}{՗]X@$O7gE r& 62!>XP]Tå`jѴx w)t{lwUݶ"jQGhfوEyAawi(pMtΘu}/ܳw{n_hn]~)YtRPG:vW6IuߟYLJC3<_ 5ĥךo'GᙱeuQ%gq(|8"5-nU[:fgCPMXiW|l]ggYϫÍn]`aQ4Evb(!U87|FK\Q,JսNDPדnݿ MVp#7R)36y8hk#|b<&(_-z }|FDh-%>xMs (w,}ߒyjgmoµqǻXejV{uіt9wW >_u[r )]P @5A6n;׷%9sVP}I/atʱL0IBx "w&`oVEuP]gG%b0`e]QI_*8މ^l=j(36>BP% |cӍ5e_ C\߳W#7m[ˮy?f+L\G6KGj±}}&twcRʢg,6v48 gB~e?8G!3},\0?Ӏԣ+O{IMFz^>{-g΂}'{s<5'+;-MӸ),jc ҃Y%"| yy/qc^ P xL=Vh$}u0JDz݅Uaw>7AmaS1WaJ.mڐb+?]h ' OnE^萁g?z8/n/cqI9Hk--?qzK0?IeZʇ8Ft)ASfrŊ$Dd2rHe`6zݿ*P)i+"70&;X=Q@tsnT<+М\m*u[BR=|6jg-˒S Zz!'f?nI%[Nc ߇I@2AM1:Reeo;"$V¬8Qs X?;8"Xj>̄|0hD$zm6{iGGҰmsB-j nth$AwG8hWwq]z $7΍>-g8OSيQON%LhIЮWor(3]_\!Źh7ˆut+5\jc‡Qc2RA;{K7Avt4  A;daB~,b,AUs}s+Rȭ=p!v(!I7Qқ,$¹J{qqv(JB91v}PQӸN)naZW(Vj-S~ 7\ ^ZMdOyG){&^Mw^v)ݖq5r ݳ`Ym[.gC'LEI(t1w ])#۲PnN0#?>@JDnκ +CSLߦCn-QhЇlk"jy?>Euۛ!K'1x+ C$)~4VZ~@۽Yy0umd>ƞa,uʙD,rӍ0C̛tfic"]X{ѧԐЅu J=$r^c <~Ȅxvn= w6""n~8XcAjɥ{ Ů}Y=:U: TOG$7o(|_<Ә<P]o 2 ;{_N o~Ītn셬-79701zBϊSqdӋ磊p/$l75x(E3u=ݤY!9;lϊ%pfeï4#$gߣp̉RNF4dvСi`9}Zg{,oq+N`?l߮fn1E{7Vc I /޼$tszܔ?Z+[ Ҡ$\Rr+Z4_`0M ?klή*~jT3q0+:}޴-n$Kƌ7'?w"Grs~yXE-[qhEejtZaya-hrkէl=ݰG.Gøq#P\ݺ ($_ ni= @cУn;=ՄT}uR:,n|f $}] gOȍ͉)d7s\ɓ} ZZ4-Yݬ1YK;۰wylTq4ONM(kEk{;J"xi9mWz""D=lؤ7M`zFNڒ޴7 ;}0^?ex||Qn *  F`Z- Sr6H}WN=t#* .N^/oJݲɝ3 \3A6ݾ$qx&UV7iV1'NT-!V^i7\uT*R #u'h!lfD!bdw<[;)aѭC;mJ9ݲk He#NGG/s Z8SS(f1SDtM} gx ˫OOx ݫgGo:xf`thHJy.%iM\VK {SԮ =,f+FtN-vR~2>6g}EWlb6 (NFX@ׇF(4Fa5fq-'A'\9fhQN%🽑r,aD/A+=>rdQ=Dդxe@s h>Ϛ #t7NYOa?SЏH2 6d.SFOThkM굷ٓ.A TO*7hdC]Y$a%aڡآCLn "CBfoW.!7e6w/6| ӱm-9^A/RcHONP>c/wcݧ(|[MDTwbh3ymMxje߻XDZ7 nO$>T']!]%N sT]x#=K3F sX (Xa>@ٴM..x݉RuE)}PY/LZ$ω3zj FT[)A%2ĘݱRu Z)t &$/Ut} rIU[1?m'BsySw1`p(zJ{&l7WjP0ȖNDT` '$@WgcuDhspK p'U|o M ]Ih :,`2*:bʓC/=BxLf)nl n yo44JV3OT-"D"]s^3%)3DrYstֹ5'\q )>Q 0? R{?hM[%IĀX -|w:ҾϺ{4U1r4($Bw=7kb` k fP8JB# O "|4:0OڤY-m6pϤ]Ԅ2b _(;w l$t}7snD&m%n])/[Z~LG+ҿK).z[x[^Nf}sW)e8em=ܓQTA.1<"5Xvno\5kQ(2 +WMG s i|3.zrE~̽!kyTfFê/U[lbZqz#^)'b {?2A IZC|s0}bs=(Cvr| 2wd(]QhvQ|X0v ># [oZWj6t?iQnM Uץ ]BRnMtVJV{:0-1Ű,BSXB}jdLg=(@Z 3|=vߩ9OEo}Wa{Zgի4Wz[xOʤ06(X^bfƨP}웍3p ­_]ªE [@6}n >ýJS3qҦfJs+NIW')陸[|iS:O DjL Sr/]@x{1/:题#(Gn_\~NF.i3~<vSiT{zW3靍ĩع)M)KM\0Ila/n H=^f-dyJ@czw^aܱϬp l%8^/^>g9Hio 9)7-D4;՚p[=D[77(;n՚%uؗ}OU }wwp7OE䄵 tDBH!1~. {) 8'lr[^#iӤPcl P`L{G"DS4;Յr哦N+o=khm\ie3~yB+ghJ{Jul}. R;/FX#%/- ?=NDPi[s ~0R&uBH^e (+tCBڳQ{5a[.ǘ$k6uٱsU.ɲ},uJũBK*e}*Շ B5FkS &dA/*,Te!t 8֍4a|nFP@~v꿿A&XQ֩=U۵F=\.,#)Gw^+^*qwnky߂'WX!Xsc4wH6?#Ucp5,c'?іl/S<3ܙ=u+Vb{5ķtY4IdsttDjpjkyp8}ui(Y:sv/mͧb)F=p+Y*I {pDsO!gm6yAID`\-NMW-X'r( loڽ? שzrY݇0}ǽW[K"3Vu'E--3ås8ol4, .hX:YfèH[dຬ#AƇ|TPhl%'KB$ܟ:r9lg5ndz{5gkq"hMs(%!vc P[&$ơ*ߜfYVg2B՞3٤M{!{ w߸B0*I."^y!UK1{p;+8c}H0 ces 3W3q(Qz [23vBc곩u7 :׵k]vޏyn1|W,:$V#'Qz)UCM}wPr _ݕOps Q\ss1S*~l\RhJxx/|v} nL0i!p;w ETCvouP{6X?(1]"#M_תּM^0'p)302vNdeML0&f*QM{C٫O$тקM4S!~bg~FxX)U^kor>@:q[0I U$ GY&j]-?$QSH 5B|m2upyI܈.ކg 7zZ%UqIBA)ZNJ{Ev:B2)x٘<>nź,Q\ 5)G(\[iuiEwr7%8{[o-+B#߲52 $P Ɩ%eNp/T}k<7f%P?%!Mg)Cٷ$&OlHasvc2Zʢg' {!ӍfGijM%d1l#{=JuƔN!qls'{ks|}?-e{7OוXL5T 3SV?UWI>HՆdՇ F: t:L_htu#? t5g`.g2 Zn ڤ Qglfva'cL'7);kXXEzdkvqKcxɾŴpXSuti#m;ryest:R +2mكk[6+;h~x0ۮeV0vxXӊUx]ޝ3Hs101x(~é5ݽٞOնrN3g{ԦQ<`lMQq}wQC;Ͼt&إrdۙVfJ Aލ~K;# `w ĭݱbapMx뱉AĞԉ*4|ɜk&Q Ξ>|Ep l=M\AOQF0"zZ'Wxʛ_AVr} 'ys$KM{'8rY"8XhkåJTVwȡOSڏ?hd#}O;{5\Ч2z9f婘 [>nqI@÷f!YYܺb2)-UgwMSgZa:ߏ?Lu"﹅8oIl&y{=Կ8cX~ތ=:^1 } n{{~ұq1ܤ` ! j}yʌ)--h;Ze͌1@X1?GRjN!8'm|rj lH <7=E6b ϖbg7 d;ނIkY%ni'qڢ#vBԺS9y;[W\wĮa @AIyCqɌA?^ x.-yU3P PYEcC Ue޲Hy"sY( pzIJvM2BS$< ͷޛCx »xk`HBu.n{/9 #|#y{FyQNt;'(@;fv?l(yon0#?+~喋Y[G7ξ#9>N\4-.EA}nhԀFIbLwcŴ79=΋ovJNOOʷAQ,xGC)8` _7V7<t/0 =g'zm,o],SOԇ5I:5+t;EDzOI.ׄuJ66CνҥPso,\Ѹ)άf<7So~pbl=*,M7>o62mlB&#'j{*.y@gVŇJmmUMfr~087Nۓ4:WQ_|mH >5 = +0=Ī{~nИݴ~+Y%1n:C<\otS"#2,cؿɣ Q8 ꜖gr) Ȑ'In8}$"_KZuBFN\fUv9 ӼP Ǣmvp6]1OqcwvvRPɷ^x@<腯ep9{Du7b޳!1Tf#nMbOb_\{oȆ]،: 7:vٛ=ؽVgrٞ{O=nS/0_5GJ ۏ6ܦXb,F'N0 {d2kB>[8/IEq/&X.9HŻ})^qt4ƿjfm|"{/h$ͳ2_~7RNS#1|5ƽx?B?5 }@L;qѾS-Bpq먞>7UE8,0v'LG2a *5;:7:KLK"cvbOEw8mY3|eڕy.A?tD?=(&tm[ơqTI}|d_8*zHt 6dq2D^[$A@#jdAߌn#)?DJ}VZRZ*)C=1}PkLDVn#l$6U͆^{t9a%-_.yl~f &'IS^cDxB+Pi{Ϊ3q[ RN|A*뾡hNl:},qug 댫Š<ˏz*k@簣}0^x$(1Y^H|6Jm6|5gG`"gM蠯jvY"fRHms6(MC@ 񣟙䛣ߎC#{AC'h2m6X|;w-:u22YVWT~Σp]9zdء",L1Ŵrr7lr<`Szی!mm:yӊN&ŹpMNݥ (0k78^{'Atq'lfz vnFNohG4{g)"ڦ4DWo]f?t`!#`_W4>l,il.ۘ\|p9r7Fy*1O"4G4]@hA"D Wxbc [Z͡4CI7vnnK)"֭ċ+9{vHh!Xbvύ CP$57;7840}.e(M9 [x@;8d2hÇn}h|'lOnA.e?{sX'r,@ݘ3c6:>Y{*_mЊ-vƸX5?B[[b:2wbǨIuuZa"53۔nFFk96Al3n%;Y-H \TYGEvIOЫǚIȽs*!TZvx1bT!>xoQ+Fe֗ j ܰ*>ˍy5E^VAِ"ȚƍG5dPlx+ؠeĔeSlBA?iʭ{y:ǧo5 ySv<ف~̿[jÑ!zqmV|  *uH5#}#2ؕ@?xņ? I@%>#+&-*Owf_YaPs4}X kN"<ΤF>e9ъ^q?⣼tf` >V-15'Tª/-覦H[?D j'E<<ɰtm9³):,Z^\/XƜS@r[ttn:T8z`s US zpuSqER깵 efYgn_"P@&2+\4tWAջU/5 UZO_pUpkkzxxZZhO MJj2(vϴ vĘPN8neetr *m$9<gfQ@7B+۷6߫lk/u^~s3vl:^ȋ[t,zawqW[J Wm.$F?J0Yq{oŪӚl]gzAi1 ̾[ѲʥV:Ŷ0<1_q GeԘOZ/)vgfr*KH _ Fe $.xmZ6)~:9+H?~qīh>, <F` {qjTc02n𚥥 a -zA[Zg3s` ֛lF+-1I.M*d~"ឧgx[J/oǷCTr-F{؋m5ւg>hz+d?W gڙPܬUkgBQ\4*11HXXLWAR@{S_(;>nսpl,=P#'s$X5PGO> zߨT?t :390z2ȿuO%Y$WKƍkM5S-;|3Qrsz55Qd2VG@L0 ,Eͺmzj>Fw{hg9IG8{Zd "V6uâxCƂww0^,7F5~6SE;Tlix9u%S~1a*y3Vs^EҲC57-,T:eϹ?9wsF77t$F4#s|)enʩІ&8W-{-8;$}b,._v<nCiM<#.-*TAx"y]W0޻Ql/ǭo r+lAmK{rpta$MazO X b8r>.kk7w$%59J^DŽ lj5k?THڟgx*r}bSp*zhT4A*q/y*Nr*Y}+<-N$F>,b؝߅h.wRNj{x B]hw4 ]%d#TLv9|_hy3;S*LiT({_7-rx*3o1J1j?}#}MiёNqt v6M '` &oƅWr Z]9u>ۅ8q_V='Q|(RZZL :o3eS\1mIpD\WZw+t)Eu"!(jL:ַD{M͔?p=`lzoknoUh ;bQ5*S^j}fXv!јnU 68]$ʅF}'nk֘|ݝeKP(wR8X3"ЗpQI, &B˳qɽ@8urF9[v;mp!g ,ќy,){lQ4E }9nMxD^[V.v;IRءT_\"(Ƥoٜtܣ̇#muOpI@ܧĊfҰ |FBSL7uW7[miN;6;^1zxy3z{P ?Z8"cBy۟]{ˇQxm!L@&$+asFGW{d%uy{~+}4 KUgʴ ۋҗmw+ǫ3rf*y߮ _}sӓ[Nߛ9 ]#/I6i >ޝ>je \13:φGBy[$/:aj;Gn턥5wWM_[!@'H!X(@ o*B}͍jMJuD~0cLПs&Oj./c#rdnYw`&.kn>tߪ6CI4yc{ⵍG=hQO"߽}by+;nL3ř qH0̱RҰK|vQOЁs!=#յOua=Y:x'Xc/{SsjދD`GUmcyIPn\%O١N. 5pc2+xE&vSf JZE~Fƀ3T}~);n OVcZ`.R7J͍Iה)X%pnk[BTÒ`\1Kx,"Ltv7gϢرyTa.5FliÁj Z"2 @7:}6'7k kwLt>ӉvhĪj"Y(a,d՘X B7x{q|NyfZd9yd|??| C-m*gKX93-ޥڋc3X~@±5Қ({O37vt_q!.bzlI-9]܏x<ӽJq=b)"٘-5SȢ.aFZl<~w)QDjyl㋳.3rV}{ !\jwS6EPL:qinę'e¬TiŶ5˙ʍ$MnwYېڻ!p2jq~h=}3۵FIוֹ5uBMU\XB.Ddx؋?n˲?ƪ,>aZF_ [Nߊ(mੰ6Hgx^iQz#W;>DL+!}2^1%:0. ۽k܎caϹI2 ,,^h~Jl:te,!\ (K])Gjj!}ag?jp|&; 1/t;_8T4>-XoaE0te^7vTNr֞*:1/H :aLP+n9Gk$L5H!]:& {uIXF%i!q7RZ/:^xpcW]:5L{H oZJp:!⟁/XANFow̘|ՋnY?,\ ɞ6y y:)T TўiTH#0G!O..[$*AU=:N1}^JR(lgrRvĊVy %pƌ8mFjE[pU\ {@E9HuEA8hӌe;(ee RԨ_IM (+611pXAʁfJ8gR@E moJp Vk= :#<|"Sycx=+h:g(z cVnA)x"p N |2in|veFVgB5p w0彴y@go8d+\H&M1v&NzUOI}!H=]SB W5 &` (xPBu밢X]sđKzUIyne4P@Iz:A;-6.d 5L{0ۗZE nꦍi؀U>]ҤUX3٢HZ2S|;6-m4bq*lFw=W2\xgD3:SH˶(S]V 'Z5ĺ좄?^1n[ M FTe}병<'H?d ިٹyZn&^Y|GJM2d$xd 3 oPT4fpt4-Zck\"Vȕ7E{'kj9 Ĵo{ .] KnHHy/109deXyg~rRK2u "vZ;zmָ2NGp*fƞѻKptb8ߴͭʕ FM[8]B-TZ)Kk +>>Ɯ^p{i!qˆji)r)`J;vX~ه,3XKe݋h޷7f#t]Y3{"h d rrqLN\hs9\ks0L=6SSu>D O [,1[Zxb`0(X 8D'A_SUx`t5Ki>1b!FGՔ}9 bpFG+Ei<^U8tLs5&g^#-z;-CJO4:^/ |HjUA]ys Brͣ煮ZJ ZdWf~$VRsyo5O/rKBoFۂĪcv|hRNDtw)]k=2b ܘP*9Rc<cM͘wTj{+6gS{0OtLN|0ByY9s{K ^lJ y_76FȀҼSS/iؙŧx_ȻI[ 酴!DUs:Xk9Wɐ 3YL2 7GwA}ӓE[p}~`ljVpܤlOHthX&->]G,){)Жĩ(mEEV>kZh6dt37,'(6$)Оm]vN=DAE߸I,D},vnox!ABf}ǧl@giCkْ6<?K:, wWT)CiϞX=-Nc NQoQl\߃#r}oK- 5==,yz/Dh坿NJ>2am:is i{¶˜!lV)~Hgʑ:ZKSq .|"sӧORL'DqS}uPE>(nqD Å07>Yܺ Na[b;I LKGHY؅qP_ꕌp=gѹ'_*^8I"LGY孿/ zv Nv7[Lৰ0vBŴa&p4߷^NdoG{>}K+ųzA s)'<_Z1/r>VTO֑"l{F:ucO6쥑OTavI?PLIy'uLhXk;|㒈yh coI{V!CI 13o"p~o{yw&G%PEtNl_/מcFb;Cu0"#\q/j3O5`dBӥ [Vo^":v}|בힷW#XϺ;ǓlHM/ܛʌo {;څ:?l{բ%>kpb91tWB aNx̧>h#+~d U)yX`o#{rRLϏW;l%mpO0x7o2/!בQ!}'t{\dz~\_qw_\B[o8j/'Ϝ4#/-Chf9pS{Y;j+M~L68#dqVDϴ-V;Q |rHau:;Ŀ:& TcK$KO#뱛l&0[a? o7-(Coj!o9:7pu}/CoNhO|,"j|,[r&StU",w8ƃU|Yy,Boz40@H{< i2uZ]WS[d^y;9}NG d~b%|; §5,1v"ͽý'HJ<>cy_ƖGTZ\/|\pt@ݚr%ɏLcR┽_+#gî))߫eQwEޞj;pzBιo6Hx_OnGP 7m|7 57Zj!KZpDf.yrOHw!K8ZiH4ByzH|sM!;8>Z Rw;)74vhl/-ϒ D/ ']u݁-[(*y31^ O}s ]aZʾ}$  Wҽ|ayz8A_'ȆנJƻqho5mQiA# dց+w ⴲ/{Y\"_6uh%6naé Tr{%|;?lN)V& ~EcHuܜ/nqUQrrNa,,e`v}t]\ &\A7"GZ:je؎v n^LHpҏ.Nڕ3:PD<5j<\SFь$bdnڣy.aN OuR :! 3L'[] YJ}lnBe'xkGx(3%QÓ^:FF+Sh "&i{&ZE+|(2 SphG(ɧEE({Lw禃O &ɚ#K\MƲy07ݼ[S;ԣw}(d>.[)*-Cw?Ҋ='l3ԷHҍIq4]^X s)&A C)ӹ@ k;?r*|QLa<|@dTH{a˥w'HEUpH^iy.o?3@%;@Qr ϸ;ArՋoB̜ 2^Zr[Zx-r?l=.;/ۊⱇ"]"8XFZtw3!ϴ Ng} ;LWK;c}n;OXYKūAjS;Ȑ_ 2nC2^Lgϭ(GF4d;pe.T1,\\wghۂ)x3%`N3խ ]AOn;%a*#7y2)Y,R݅/ORQ"o[WW\! I1@PK~{MHvo `] 4*e[&- k9G2LPuo mR)XbWayA?hX9! W^[oݩL7[ i%ΦE`[la'87جlC{v: v:oJz䦸;oIRp>_~4Oߢ!؝ lxXۅyB]jPiq(w %S?!؞ z.ZXGpEY{8d3{W1D߼-.4e(w,խ%e/X(Ӌƈ0c4>* A_N? ,|mcϤlo>{.| u2(6s:4>^FH?ܺʆ]m;^ uHhZtz6r[I^V=eM t9ōlJ<oY7ˬ]9{XENLD6킅(G,K GW,*p_$ ~5 1LTAGϿ[# GY8VFݽHqNOQ lA}띪~o|Jj&Mpo"X44eQG+wKSY=U|>iB fHņy+/d|cŮ75K5dq~+9F6\0]7]bQkWix-Iw{n3w*a[@ȴc%lv3z7tMipGD iQ0'm|%3pOWZ@o> wD8e\󴫮>72Ua:3tF*Kd$Kh: LѨ4w6V ˃ƅE;)GGiSHsSvnBzE.M3OUPe j# nDog:Pӌ4?|<'EE0L G;M}"FsoNS,B M{8 p u[ L15fM<Eol >O[ %~㝱9yUb4\DrT1 .&7'p8W=9Ơ9j蹋KϜTƊ[Hϩ}Te/CF/7zx*6^i#@ډ^5b1E3m?(H?Z }ӷw)Ow-8G!}`#[]'+&2e "}#",oenSdznM/($h Utl]pyA&lk(dGNv9Wgmc#X./P';_QN{o(hrY+~Ly^n>ITΨX7᭲*l+9gh眉\&ݯ>[Yϥt{|c $X*}Cy=U{cE/`0ƨ>MN+^Y"B=@Z9o.N?F[ 7|Fy~NM zs 871 όUqhnWqf_qk霳Lg+3;3wΡ?Ƙ'Uk: V7(pJtM1jFhkJw! >KG fIfowߟ3D93]2(o%@!ofzүgəi%-fBgSvNnl:!*yZadq&Aaؤۉ*")J5.*Gp/#k ʱs}D\iJ |25: /Vg%>nS( KUϻxqɝF*Wrn;(}jU>y؊Z9SS#d!ަM l)'gy'Ew}4Ha ~W3PڜŷKaZiMj1wYX}{;Z~>:eYWC_Ui%I{E3SwE5#T0zu@pt}Ii:!vbMhxm n|aKٯsF9ks^y Z\Vv:|߷GD,\Oh_0S?:}}U$vos{+Eևbke'S`s>Cfz?fF* gJ0s.M{ELyRg[@U$kG\237fЂTHHHrr4|Њڍr< Ҝ$ [7\Cj rpDnZA5 t4GoaAφ&gr>(T}MNcj{=mv}oI<`'rB?M~V\:'F=$Ln*a*4K>4(ݫR桧5nn"4FctG% zz\k8l\9K?< ,9ޫ61Y /^ea)1ʨHr{s`꡻r!qz: FQ җm3b7- o[,/o?|ni/d hUK7|9pT”+^6[s!"ܣi"A7%t_5S8]C3Awa3"|ű"1;rXSoK8Rhi+hzBm+Y@5Apz)_(U6orL%?%2S}MO8{1UiAIN)QoUl4\YIe/Β8 >A:c©e %BkJ`Dނb$%:i<TldP$MwEm;|]k$32JԻ -RrB9ܶQʽhJ _7.JPՠ7Mwح׻'F”y*Tcx| r9)'?1՝٤[;V`0+{w-̹UXs˜%ٝDvg=1}iE~&/4:OR";aΠTx"'l$]e2F5}c1WG [.BFtVq>e^ ҈%=(.7 \Ke4Fz*OaoXʆ mg?r/4c5p|'Y"\JSy3rb[elabf'cP$Wr TW[od[-Z[/Mb oOj#p8Pq=bbCvwZ\eԹ3o- U|Qp`l`Eu?LׅcΖXQˇ#9XiX}*(xvR QSM?jOH[S|h䕜:/i 'f>,¨`[ܔAhIMdvΏ~#gϺ/7ݐ}t71t[W_ʈf;5tWkmVb!蘌xƕCl?6 ^. }΀(vpwENg셧՞B{@u&p;Fqmj&9j s$֯]H؄,׌noڛS{,ٝ]̜[0!Z1M3/[>'xT2Ɇd硳'8:>&(%ukC,9Dzt]6!p;lc.w/>=ʝݳFhY*:uP1hd#,0]| *+D},5R`{?,S]- ZA,߶rWʕ%oC٧ O1&睦RIF=sG u_S|p .B)ʆ*nI$}m%3R.`LZ̀Ai<1)@K@f!}׵Hoh/gM#Qд[S7.:/N3J_17 ݟh(9F5=MvzoEBwDCJ WTLN}*6U#UZ;fWa 5.EQur̍ޠL {+ AD}!&]_3}cMORJ {-gWzaE^_z<4`̹um>`'Iz޷5aSY\vg0"'?9hQڀs7Q kwpM9/5FM:Nhp՛w >}vCVRx8aߚ M{ү,ʥXG7WRp*w%8Fap?W7>WyB'vS`vJ늮4FJ\{f+ыoҕtKTm؀pc;ef%nk|Mz=[#p*2 [dg {T>6 ,]'n5@sno*iL5Vj\wIx3ݟPJmY&,ZhF ЛOԹFKC8:P|`iXFORZ`7=JF'PM݁%\ߖ t;D[6'_T'+I9 :P_\'RS/k %a0$# :/7ڒvfh3V75$>_ e$솈]5s"q"ؘIV,6{޷.F#uVeDl[hQUT-<u3~ؔ7E<Tl87h:>ͪ[[N1^]S}fn5\߳o#itA|rNJݒ}%RIB^0:!WMyWOgOMy2v}kH8) @ 4Tpk.ˡ~ȩk@u[q;',mZGV##ӞeO>pˑe>[u yN;'?ʆOp-a}q`zZSyO>o~!R[6pΚ7 ]7=R`p 釆ȧIhاINاpӂ֢Cݞ0hz>kn{+fDqʼTԖ6%qv%6%xBqjvJ_weC>eVe'~;/+9u.v.vhikiW8NmmE  { ۞OI`F>bƳ7\AW޸0SLm_8/ujy)ylG|$ 0a97 j[x/ـ"}^#p7=_NpX}5U+nd(||U]9}BaLᬻK@Qvt3)?)o]<Ayxֳbȷt<{-=}ygs'R;$< 1xdoQb a >ao{Sn>ODyf>Jx.И]p(x/<|y7*xdVG@ ](WC%',iPrѢa=ҷat2C dc{9 Kp^ ;Kzb?Bd-]Sa9@jwk‰{XRv-yoWID,pqoA@ϟ6OxٍeT0ik}0X{M;1?@t+_,9:Մ57u3҅&z}ÐDz$vGA:4%X&-#4f)|iwGviZjܟob>6s+#YGE>h_ "{0/ UH\.!I.HW>w 7weCCɈ@( m1~dNčf#s{xa+~yd_ ؘ yYlc]wZ/vk  Nw?n({- UCTВ1Y gµnv$ m39znO{K^  NIwDFx6XmNro<5އ&3sMv ,]Hg[;*]#"}=&ިm8:9eiz{S.!o){闔ҦURzJ2cSiJ<oo$#l_ |Xs+ՎrAA'`e$LW3ՠaܨO3{8nz[n ڟfW&B7ixvp,AXX H zq_1Uf/ݨ/p'(/iң߰cc69|JKcОj v|*-9=6A@,Lva߻*LQ-{o=GhM6 &@n^6: ueP1=6dB͐9~ܣ['/DZwҥ-O6,ۭ+f7nڧpZŜfN2Ĵ+I GUJ>n`ieF?By(ǧ6F-ri6}V{[6d#v#BsdF];Ʈ ~6bDoM7˥F~^( _53l*l%Δb'Fhmw!P~;.77LS@%7PG=S[-k#ǑUuľXȡ۳GΎ (N t3M6$bi|w1ĩ[ X,W߮iS׷q^`!6Òro0k)W}#Q))-L>aXt%xE7Ⴋ .[~'tv\p}T( G64m!JE-U,]H@QD/\1-Vg汬\R4.y-+:̓~0ntj요^Փ=]τII8׭S'ho/XN"/4j}O+7}x?Eq$oge[q^Olxo>O߬Y ?F6$ҡ9مe0Z͗ҭr'+t O3azG^VborܵOqs ` WZ9~IY܂5 lg[ Бr{^ȕao3hC)uBMSxD 0MLGҢFICeW=9 H ţ7ZaZS,04{:^?K0K& Xuh5ONҦdۛ.$/ɨKٳKy>Rol,!Xder%\C|Ɗ[%y*X8n6WZTxwãӊ'iy:ȩocGWkU˱@pИ$KH}-ɑbcX%rItFYDnqc"(T 7e#L9ω ^r*ieVkp{G*L^K#ׯw=Ds#Y}:MvBcKiFz4[蓽^='ݹFV {Ո%)9ķ(x"'QA`ϽWW:F^#`w‰K쒻 r 5]yLK/r5PaX;z} U 'qi7Ҋ[|BәqSџv 1'm/l!i!$)àVڸ_T7]}ӊ%O=q#ԛJL] ќ7Oi ],aR[oqDJ ;VL-ۭxW>§ٯ-0{ܯ+ &cMLRq,Vv D\ޫi|liFMM[zpFi!È~E__16WG2}&=cۯ7zkw3<ſEᾁԢnWLc{Uqڑe{M9W""ROd}dJpu[Fw IGi1zܴ`'er=еUܹt t ]i|nnI$/a ^wb0f֌Y8X|AgJ!g%MxfSc2g-Ոw /,)?n!u| \|18׈I4:B9l@?q1)a~_L{ڿhJ2ǿ/V[={_Գz'ʼ؍A}~Z5Բ/G8I,h! uEvo?p0~bvP*]YMM+6!sP=;q] x{-8E8|oi7lNDԔ#J6hhR#!¬ qmz٩L<w忢%'PJ:@G[(A֬nN1vDxK%/D[C~z|+H)D鮗޼ckWU)ڕn}{v *o_H8[krM$oh47A8='$/O^a3&ŷ%}-;a,C~O/? x.8'iDW/OAiݟOEa{o2gY,dݛknnkvmLtﱧ?fCfIi߻}Hg9+L5T.+f3D@ 7MC3S_dn(VI>NVT՟Cܔ 3FQpMJl`, $l^lLfH5_ZzC7!z|=.gchCm/Hyzl+ _AG 7 W rUnƊ{ptN/7zHAd2ۼAr+A9tory;{u-sw4|%Խv>#͘j `ۯPt]!uĊnGݥP4ٚţdM][l3(/ 2Бi<Χi=<'ڦ>kJ9sJW 74Ν`->.ũun`nt9Wٰ+s^n'YQ1VݓYԏSJxED76;yfd}śE2.ĜfJi49%U| ?C"{X6n3z,\&ߔ5Ț[QtiBK}qF޼8~ *xfݻ= L+bޯcϲ+3cpw/+hsaDx;jjٛ欢9bM T Y}${xooUl'jp_rN&Yj O2f"R~ƭFDQ $mگ\<5.+ pp\pU _Wa C/p#9N >yM *y `eUq:{;!^|@chDoEҍ&-qZb %mhrdž[o;6GKq*F? &"HdxN""o39vzѸN_ܕFgFqSC[S~I,Y+'Cr-Kviߩ[Zȗ[M1De/&H@ưvIHvovFpzA"}4[.k=1I3eo@n2|9М@A0ޏl-j DC Ên,{/fRai8v;\̜: ђL:]z+iTފ&3OqŁ؈Dm_u<˴M4Z ແDn;e۰9ToWBDUu_f:|@8̢{z`&U4nqXP0~S3 +Eη. QC%-JM0)r*n50Fax5ѹXMo]滋Dxv#sˤ_EWcyʤx㽹,+`0]^] KY_$룟" : {ھW nͼG` Ժs'ObٔϹQlzou;nee1f/<ٹ3cgY]z$m(ng#%g%a@Uit5݊#ԧա=v|3NşBh:6[z?ܦ93S6iuBGd'KπOwcif}!ja*wv }j Y$Ws>[`{C|> R4x? T;Q+_iY"+u?JRT&,+ q&-0 OHǢO.=zkK5Y>*yAE[ht3q.=)X1JUM Q{hW2O"$47nHgF/T}.)Gėzx#6#ULێ>CYiyJX v:I© 䉃Q(lF$ RW SgO+޲3헔j>Drq0]빐6`9;]с'Lɼq ZmB&q6DZezY'}qM_P)-WL=ڃe]YHĪgPP;J I|C:'YoIHZƿ_uaBu3S'#C:u}36_?ev?˴mbŽК[0 [ Lu/|+$ QFkRuЁeвݚ#s=s~w{=S9 n7BY@3$ϼǛ5Cѻ6UUF]G罇7Z>tAw.5n¥8"K=_0NQah PƦhӬ΍G.лuԗha9n DCvT&@>_t=0\SO`!-+7~<^[1;onEfKzI^hWkg1Մx~ cU 'Uo6a܃nBYt_ mbO8(0kЯTC$O4`ޑ AkZ[aF}lcOPG%9/>j>V21oڹGGKuLW}zظࠢul]bLV :>B$읮{v?fݜp%U/8= ؖݷ:yxw} g@S{ecCpgeZFGx\}q ڃ:azzPtFԳ/v/mA/W4Jdo Ľa ,GdNjڿyeyI@cC$! c!7pk]'ubٙBDj:+_-Xhak&Z9gIh(r{ /x}wDl87vWoi՟b_8> oȇo劼v?>/eik@޳`50|=;p}x.N _=>E ('Z{ùwd#|4=] Jxmn<#kn,p便IjFFS;ZnD]+hB/`,cIvBN s> zyeX 9>BqM8nB(^)Abt+ 4i~o\oӲ{wHWGa#[[dr0CW$HU'Xh2N@Ԟf?0 ɥ9;dc%9u?RpP;|PTnHXQ?ԝSC"jwd7lGzQnkag A8Sz; G,`,o^v s"G7K?3pʠ y ;XvVi=bepnغ-%3ۃMZ.>% Syl(ҳn8D3 /+gAYg!-M̈́n!o3>ۭ{VSJq= w[dkn1[^ 3 '{G=@lA9Пhy#EtUVk'פ=9M["ωo]'_&9p7H= kqA:I*x>.[q?nTgk3LGD;iH8Fw|&7_x9Iַgbm IJGk$opo0#o-qA[,B'ٰJ:#A30t9RԃiAF~\*+a3;k0 cIBR4E)|m}OVl6)h X%yݢX+X;9k f>o0}46h9зidz"{ߩ^bduɷ<[8fN(ߟD/MbdOx؋O 6gm_W[W,7|g$ib)t;lxh/+ s㽘*(7iY,yc/ zbJzy#I2?FYGKG 5'OY<1v$3lKm<تה~IzM΋7ʈoHKoԅ5=%*M_'R}n6{ve՞7IhI3vwso[gs'm ,V>R=+%JwDM.lR1:&i|<5㔉!5f Bު'@ßNA-z7Syf4'#[y]rdCY G"ɇvܚpʋM9 C[^mE܊9XxQӼQ!ބ1>}Ыw@CbvNƟ,Eisap^LkHlg|Ow.kH]jS bDKC}L=2} K]_+S|8k׳.p'^1]uGͯ]yEG?x&U̥v_b@n:e3גް#+nakŜZdegΚ2zGnxHT+p^+{fy+e5Hޑ'v]x#yxmqcȌ5roa*g}dP$[X3wG!etlsaۉ7rZokw󵽳 g;.1(M`}]RvbFlR3B?DxS`߱(KXo*z#ؤobaY/zD+?/8eO6vC*[~! a&\7H?chQ{o; u?Ӎ^/Ce(#-"S_w=q9G5p9GwM|!,Mmi2`0FG4zc9+u#J}3DéoV *=-ZvZk-垉QyO󈸸ug*jgQ,n7'C%zv~PcmE،=N-n$ ,'7if:@ eY>0Q7sx(kO7_З la. ur':Ϫw i G)Lgݿe<͘D)N;KU&;XAKAga[7{:AwfGe$FB0rHSPB6Wg{#` ۨW쬲qmdf1Ӓ..UrLlLxoXa]0(OZd"(u tgz$4P>.l핻~&Zjho\u].H4^DX¹QC0V|9`E{9tմQ RKqy\\rbOD0h=jrFhuE>ʁtnw۾(O 7{ c5 ol(YJqCg'iQyGDCmuX-;PJlyFI37-zMU;f[3=ҙ2ʭm]tي=H0t'HoܘQ+4+a&_'cp>Zuk؈l`,im>A5zb +|IqRٯ?#䙊utv6@)n௿5ExjC"}\ GHko߻w#>% T{Qx0tFBv?L_3BקSU(_iv%0 i噎M;!37.B*7++H/$Z|?/{m}ݓJ Eot8\zֶkˆn` [Kgrީ0%.kgdgoYN/œwBqɆguVS9\m2 nrʤR@Kt]9]e{U>Ϭ > b ~}]*BotpnH]ΟUewTfƲwg3ZըkA_n [):ͽ|hO ajnPڡ!2|9!6niNX1SFI]S^Wâ経/`s+ÄEXrTWnˌE#y+Ǜ}|ODItl1KrfK&Q^Ƕ)cŗ(Z Q6^}1* iۮ7BD~?Blrp(e=su>Eϯ;AoT7).GLDHެkcg]RNYm&,4Kko#3S?&!Q|ź_6h1G0cP_p!XF,b h=x<Ae$7DBDeg`LPZ<)hЧxEF"x%ځs١;% 3uCn57ВpA'{MV8 DHJ7-㓯.¯&&c1t:3i֝<snN5+eϱ(V&bxOTdUoҪ̩T{+hg?|D(FQL֥ur|e3sa2}` XxܡCoJK&u$ ̟W?v_`:MmtD|58̴Va+>1uA_D[vZ}CW?|8$Ϣt} m$Fgc>)InW#G_Yg1+`v|,t0t1X@28\2Kl)FL2ⶅ ;a9 Jc՗*>G)viE1?Cآ?lppJSf83S^ܞS_hJog| _u;W(:"іN騔C2gM) {50̞V'~h%~dtu]Cc#܌ l=H2(!t?SjLt5vMÀwupc|I[Q8VtV7o(v ޲7% qKe=}#½tB7н.^w&h@~wV$n.Kn i.=ਣS]nٰq./&'M' '.h@N:]N7oxt7kt]4JNrٺ;3~ͳ<D'cgTMZ~[II?bEo9ٟ< ^I߭p'}N(=|Xv\iaqE9Zх'l8P ~ī1O6Ei/#GYU<(#*wkg_]T1v[n1d<;"#X$>h1E !؅k~NZ~#)x}$(>, oL26o'߲ Xp`کW.j6G Ũ,a=[Л[1>{o&pWoNE;j؍ ٢09FPxgoڿv 2:[`!>h,{b}qL,V}UΑG+S8E(8u4vrNц;!g͘&AμEVqn 5ם2~Vbg/6P2 e+ _{iUZWy'c(֒}{1=JhL;As2ͺ?z͍O_ayLyb݉X]( 8`eXh[>pW4+NXeT[/fc۴O8fgAp*("G+Ǝ%wF|wFMxF>!d1.U-0`w$>\Ʃ|B3ݴYs=}4rEKomy<,W=k)79w|V#YޑF9/E{DRqQ|!pwLer- ο>\ "]ڀ vhVxcTF_;eܒa# :u8Sac3mxԍIS7aP{N@iEjn'ݕփ៧#Uئܧ5! 7&mzh%8|̑k.NAPԣXdXMֳ PI4 zzɨW8\~Dkt,DoMHoobޑ|^'7#rO:ݐ8޸=-|Sqϖ6? ߩ)լd:Uv8㭥0XlglچKIaʴ%UlJM̰֭=|Wͦf`[ 笁Z*UFZ᷌EC`(*$?:?bU#R[9ZD{ak)ClEW$-Κl Ỳ2Ϭ86$CN _F;pc:FWFQ4<$7&l1H=%dOV4NVNjT\ɑW}xN:6{[GH&߅|Ff#5$E80w#t)T=G_zG RĜf4i2b5m9t#cܞ$_5!qB3= QwC6nnޘ<)&,(8ߗ])ŝi=i ^Jc.Б@of!0߬tzAI6\q?k|hOw -~Dޙ2},oQDOީ½_ *LRŷkQ>( Hm_V՟u kQy{V_bnRz';Uio՜Wfp/J٢rHLgO49m{jZw|Ԙ#}k~ KF}ޒOx́pNs 9&J'%P {i}-ZξL,KI&lXo<"?$oJ9J#;TI *mZ kyAXy^'7Y\yQXž΀Sq n2~P^+'j4 ѥ[qw+f{VHdc]6kIe+sk9㎥J9a]ڝjw cb$h^ST=37rBS^ }>Q qv>h:(ncm,͜.\i,JmҸ Vm)-73S1_Ċv1fX1u ;v»@}ʲwv["om֭f_0 ɇwHT:e9~3Lb J3ݲe]G#'ohW^aR4= #VSv"+G!DXvVS0z\j`vB~Q Ğ68=+V6Nm*ʫOaY+4V|vtnSOGY{XbMjah`!J}1$ -5qFXJu;R eٱ8k-e蘍 |о#?2ܣHbwlž>ub=;U~oڶ߂]YV.epKm &sw?'571F]͹cTy8{FPQѕz y{ ' ]\r?^&)sw0VM@?`=]7=?{;2[C٦K>D8 Sϙ0oN IdokLNNnp`^>7g,y?0(Dɍ.+r2={KPzҍ BDqUIY5ι(uVY8U_:om.:Up9u~C 7 ƶM}6nԊҼFn [+<[=~HF5o{f5=r,{mV5TMD/a HhCr|LWr8C j7$-7=}?lUgڳ`~ryS ] -!cQ3<8HWy"Zb_gΔh8=b:_ϫ֊Q!jLn1Na yLAʕ1;Fe½+/Y&Fay:ׄDU9-2DŽ\Su>GMԘ..wDm%Sg>[o-vLۃ5Nۇ}t":x8_L7Z;U[`O.TP;cS^t7خT|~KepℛԱȠg2Ad6핶1I_d^ÕVYEb^MmM``j1ڟnB{P"HR/yo vM[nwD5ewރ2i%~~(Z<4^vqto?1>;gYYJ 9tKMMeOnIӓϫ, ̖Or0K|D ?m7>5&Ti6I'w8ܵƤ,hzHa@;}XsIZCdvJtϴ9j'wB *|ܞFSQi6e̽tZqhj۷\9zWC$]R&p`Rs4?YnMߐ{6OhR' ,N1J|sM+S;0cpIA+됴cD,_e7pGb@_e*ō Įgj%m|e*u6XUFagP)?R9CQPGK|"6Ӵ*t޸%VH{B D=h%3^>`Mk}f{:\"ʻ[Io \37Dx.|KwJjRnol67Ўv52*/;e>ۛp_Js{u9gH/\Dx "٢ot[;4g$=9l/.xJt=>`'=2j!kU;}@Qxc@KZY{o:@@.#0Ԩad Ժ0+I;JсBp]5Q1^)^5钮ВEN~bJ}G:'up|ֲ9" Nkϋ%+|vNXzf[pvЂ1{>%qnh<)L -7 {W-e1aAFaɷOJ>@jL ǣ5\e <|L㾵 oY6"~`.=4'W- .bJ7ĈH78( oC~!pAvkACX0>FN~ηXQxztӈy#2ܗ{Li3L{c 9}Iv%ͽKz(<;>%O?LRT.FpΟs;X`4e=>FR ih1Sn! a/nj~-f<&9SJ왫B=eQDn8mr.#L5:h nSM_7҂fufq|`ү= -y^$lkuoG;6~^=I+}4J3{ݍr}GF$I(KaKT=qDHWt[JV+?Nl ipu `;.qyKB✭v*5hrhH*NR)/k).5/'zf_Qxw+:fDFQ>웭k{`6\i`2ZnQA#_. ü!PC4R |SCeL eC \`y::҆TVo1):;v ȍ 3R|)]; z;ѦߴXx\9 h> YkFfa\مY.RF"#iy6 .iuP҇۾%{0 _{swF'E; }*-ଵ#`*i =" %i?IWZz33 )ApbC8O:'aBG[z~^=H *s Nڻu2&Bg+qwaV~:I= ӯj/Ɉس0s.](FStU}~l>E gIR*I u}Z^|sdQ 0^nU~ a:絻^7?޹Rog'zX>o孋il Wգ+`(=U}W6QrMc$ Eό";K28͚xf2_‘ +pD#p N?ksseW=m;%|rى>+O}7~fg6%UA` Ԭ&b$k-E|cd+!(5 k,joe 4oZXz# AQk` %-QG=M~c0*H:OG9S]nlm .~b.L@^%R{~[~ Y ~-½pxYNEi9=+۰;@'8ݎ̗MT. בk8}|8wMf鶑6[a>+HCQo{˂i?U~"c=nLىRY&yힱ̥y{Vs_L}zmjJ}{-Eu3eBo !&aI>MSx-qIߴI\pr{b[tRXG?O'9=LUt|J}v߼,ߏ00җ4_lD}}콺zd1I". 艖Vhg׼e}FU5}wt+C[o.!|*;Fºϣn;(&F&AI" ;T8;v^}ͮ46}0{{lz 9p{m 3+,^{qc؜g"V(BMXõдkZn\jNYoH١:AvSHad2KfƲ)hIbn:6{cseox<3B;&=Țaԕ~-9p yZA*>ųw< YzI,M/DsmB4\!㟃}ٱ]|->Wџ^ my2Tx~ڈO]Vf9&F/>aw *|P:-9~vZZI>]t cP7ϔ[gs1 !ߐ*p3E` `S^.v9g[)O:mqNT+'$19x6{P^<ӛBILT;nTsQ3s6s@m-:ƆAâm@-R 1K7%oim=}LlFqՖяf@{S\>#}\LE 0,OSdpD.@wW=P6Zq͠mfS@?dn_TPfR>StA>k/]r^ 6i)8 "&"!p`,]W#(J'r-b]6Q7i53C")ںobr^Rű3J NT=?XHڑ؀ /-|~i/3(h} K?;_۳8/a&!Y<{} 4g%;r>( ~؏Nqؓy>ý k! \ܰ3St{ p&t7s{> `VL&(C4߿!VwuTq3v\T&SeMT' 6~SP};F:Q[.w() ߷@Kto:_?\[r%9Dp76BGw{[*#ɓ7}J6(~GjϤN~k6n],:#Oj~qA;idE[[fKlVAGsp1soOxa?J3OR#JڠmUBtA7(@3IJXP/Y'+suŶ%k̝[0iv:r=3cR~L&T[ n&hߏB.hG[X ˗*6NnZƺ8ln ''%ZH$j)>~A*+|6r>]ݍQӴ]bzoLe=;ENr8aN\mi~J|ˀ 3s"յu'9RjAHg<2j(az4NnPurb;;R G W[ ~xI[f6\>k3,[轠VI"yb(B>5v7+1G5 O`|yvB}һĿhg dt@z8,zα j=,xx ~'o.Oc@m=4ɕDtlѦay^ $ͮר,Pp}9mS.HL?Oe̠6T( O7 N] s{(R Y} *h}:_04Ay:-{T,뇇ȕW@v-\m<WU[%b{Ѐm}Qۏp|kn 8p\zNzOd J:ʑs{QS,'8}.L2m'έIkhL"3n pl;fc"[yx*nYԸ:m8S%]b0h} ͆a=hinSѭC6.PJ/[|]ht+=WH濫:红섆sI+fh4ܝQI&19RO%V@eqHP@xuL'aZ]\Y``H{ "IXg ҅׉Y{6ٵ1ܡ udP 5'VJ:E׆h(=&}v Z~K?ltr n,ݶ~IyMA +C z8D[{S(@}8Zl+ft6OT(-Vf"W@6-9ܻ\ao&}$XoiYݩE*}c\P,j}޲:0$O!!68L _4!zaӻ=Vq܃Pͨ'{#9m\iޭc)֨Ǒ9!nEث`~DŽ`k^agRhٻ~λJ}ELSC# {MZ搩ASpxʹY~Yy_GoEDqB]]LobB]ْqg\FJX!v0*O)xnn -=ZlG(My`y/1? \XA~~7P}xRiT;EZb{zU3mTU=,c+EnF{F>Z3HGOk0iI#d-~- (u]X7GؠN,C ~n오4hٰe2"[4pf)ck짌8vGs`ov~^!W¡V4yԧvV#hLi괆ވ4aBsF^xMo6omUBmpS7u~wr6Z7 M #<-ßQ%W~e H_m ; d"" k;w53:f9)zp5Kƍdi/B[ሌn3poA=$~8bk:}:ZlTϻՂu5B 7*hSq+Ѕa^Έ o'BEʐga  q q3NP*\k7un͆0=MOg.V4k,Bjd㚏nQ#٠}Ċ9kHQ(v;4@Kq &d3T?s-#N̴Ź7/Q?yN4n7=Ꝕˤ=m3Y7nFk=KH)d J[4}RYiPyl1CG~[ɏ[ PV0KKLf+8^'B]~Y.>Ȗ]N~ 5 ^CB9֑5Vὖ:gJP'mCB}I;FQ͢Q?JqQtȞLZUeR>]P_({ ^jKp%{.a887gb,|+{urSlfe̼:R^<6ko'_ >YNG+d, wBeYZZo(݅/e,NwVE[g}b`VSX[vdzɣ#faQT߫zr]|Л~Ch (*\VL$PW4J%VPvU\SP,]8^S6=ogCǶpTyMX; WXq/x!7}S&m*qADlo.-Xzx?x?g5&T 7Ȝ{-_-ӻ("HB}W#j]B[{ިe;mybt䶒{7(cS oJQ1|,P@2jU 0u?Nf KlD6q!{St]稴ʎJ5ҫ$2eH%r1 Ww8Yy2\=2*V8f'/=!;;kM_QG,'q:v,bu0llN@:y $Vi5GxX<8hNJ> S gt&w\Qˮ;Y,F3,;ˎ6:ZӢ7\܇ ﳊ۫l)t PMhMICvy7精8|<0qƴN2~Qpzc`YKNy[$ꮐ2_az?^ͼ|VQSH9p>ѦfGmooEfeOq' 6 ̀͟Mu@lbDq,a_ 0nƃMzZ}q-RMSv^7ZܗJo/,tɿt'D`pHMLh~H㶎zӸud/x*> Ebq**ƒr~=jC)qƁF羵SqG@8NFCr*C {֌nwe{tl!9skٰsEjrbM'g{n-E\mWNBmQ"Ye4SUQM q\plك0*lN );ƞ@0XЗiM5u3 1l5&8cX3=ZBS&sŒ#1_a}s/۽ʥViћqhr؏>s^B~t˘ݑقZ#%GB%ӽiQT!o|{e<6'R@N}ߧq%?[v׀bճRf~?3TYb5hQ7WegfI ;򮝚8'\- {'WhQC6vNX33%ݶz](ǿ ^PL:ܨ145G{ȱ# +1AerEs[gXKE#Gd[ƣ lŝj/pDD^c.%KG^Be;`O'Ÿw{wJ\`ckq}+inzxK+rɉF;/7sڥrvj TafvM6+]p I'X57tU ư}C}Xΐ9 ?&>Pt}= jhw `Nѥl&!%m /loh1j+܂7m5vZxoI9o\5<0kw\̝A{k.Ai*X4g`5MrF&z.h$ncV@͋ U {b7&:!P_yNϗPY]Y}.p [w}Mn.MJhWwž"!󻛦| V^x{+qb[WVskӝ,io]MFan_/LJCw6eog =W[Q8Ӵ4"=݃87 ᭢ ;jPE4VNF' 4݉O:hm+HApG@*b~>8ߢ(ߍ Ga- yu_(`Tv ]ULN|ߕ'#u)$DzL}MIΜC G2tm-ZMF _`l +\ N٣vL̓pk t RQ^:(<ĥF^'inxc. }6j3gC de]߲R_r7loO=?7DvteȄ-H ,9(lgљ#^oS\?2TZ< ۨg%Ucj=)'ruF͆a=߃8wt|5{ksvwҼ'}nw oiRs?j(5DT'FJ}|H5,x-hD-3a ֿuͻ-kfR8pS2 CB#WV>2 5j}*DWi /Iv$}m =t"_ڀ9-O~0w7A 3 ,T^7t͎ۧus!N8|fI //Z K}e4dRm궏m !0Z` ׷%$$~8p2]+o iR,' ! 2d;4e("^LM!&bj⒰lYp_abs_+mLN,E*{8XLw]~z_fϊh5?bC>A-:%@% J^(8luzy@' pӲg5yt|Cσ&h|/[qK< ȳG~j^'W>O>3ُQ)HXW$\,ENC_a,]9K$x><ݧ%|o V=|o=X?LepMƤ,lt*ܩ|Y|R3?hcbȢ"Tk*H%5bg B/Q _j̄_H|; ku<[ZԄEK?I}vCƛ[? Fp;ۻ3F*@k 0B2t~ <[Wu) N-E`+9ptd^ܮލ,kݐ3GV6L^ۉ}3f]]i~,>H_ uFT +6Oo8zc^C7wokz)Ӫ  =ZϤ(ނ?̾C/ţO vş)q1HMaxӘ#X(#u+#(k}ܳyb[97Z/ʚeSh3,oB'HDXo !5= e8ܽe۽_ ł _!3ktknHtX7D.qߙcyF3Af?})PG|I/-,52M.+ʷ)MǹM`X l+rhx'G'[oRjgUU,ЗoFA})vq";?kYSgy)K:8 ncC8?BΥ.z%.{V@;"g"¼Op'򸨇?8C;ݿ_v}w{*D蛧t<6a3ie`|;bi6 (4}H`fEtD&$ j+O1_0$jI']bq yh~RL({f"mB3D<!K @jv뻪"7ciّK (ک:vXVMtLvn5akny1DM3WW7=X/PYoA{ߐ9A4*8k@\r52i}Zz !LdjIT8JvЃ1H򮔦MSlgbw- X/n$=QzQ=/4=_^jJ4V2OPvd9;"?XgX Zz- ٧LAhwR/q*\ldϔb.B*Oo|Q+6E0 1Hqos1M76, E;}%Y6}:lY?IA}U<'=VWS^9ۊ nVS~%S[. 2ç<< ?㈣M UW0E%;zpUBB8=qq4vm|.V߻Ƅabmc!% 7͞k+6;LpO@ἑD촾v˽@]yC#~e{< Rg%OT'ߏ$a=SAOF!_@QDuUftKwN$6 E9pÂ3~ȫu` ~uENq9e4wr|Kma*`Ri]My_YO}ulk ,cu4Jݹ0O!7:,SdBy_upC"WxM& 7WVq="Xl>rk& pxy=Vʆ=oa6nа=N& /117O6p d"Qoݰ0PO&:KJ5ՋgI1k]uTȖ4|on^HԽvcR\Uoq䣡ޛ((C=gatLgvZz@4Am,Z~ u\U/i+Ǹ 0͓4=i|ىq}z75 A–-ғtm W ~{ӱtfvJdΩ58Nӽˢ9.W\S,xg-xFJ^ vyoө;JX;c~Gd_Ynd[A{A[z;uY:B4l>XjxLxɆ7,!uQ8"7rD}^\a:޺J w˜i:ê 8D'op9^r|p4- }  fOnR:`ŚЕ4^j{kmw*5QnCjuZuS`?)R`lé@grcH2lm%4 [FS.?[o,6nF6c8JocH`ڪ=%/;3tO x(agh1;+QB<5&ɕmz1pбA78"p\eӌxŴct[פa2Y^`j6X·eqμϦ<r@9[idTON;+F~0Էi.8— 7iV`Y1jV7Y7 RF[Myw9Np~kؿNoJNI~*+VSU4.e<ﱽ9ùOJGMϓ[3~*R.!$SYG5|p~'iz";޻8LraSeu"eZėJña&gmY[FK,QTȲi:V'zb):aWBZ*$L\h )Rfc=TTkpv%VOjy,PkE P"l,?IC-y[PI}{m)Y{X1L(*Q;I @r6 ~yZx*ni87S\n {+ =*\J>*^0c+t?WQ|ݒCqAWnN@Fc:=C1]Onv?E] >Ag 2,+ -[U4YQxfъdcAy##WjLsvsi«jm>KMn>h{څe$= x:}JezӴRl}^{Lb UCʩp;Fi4ϫ@t)HTEm:9::7,n_ych^!YWƦMٯ0}.dvk7C62d~d'M2iK+W4}Yޗ%ŃA$s3b~a;9g+-qa+!pt|P:T;m>U˝*Aʣơ瘵2uɴҡ΅J9sbR&_>P0|c.&ͤ[k &Pi@O2F5fV`kymd|Ȇӵ90)*FDaEYJwV#ݽ;.(O֤:o3{Ux?o=N051sѵ0~b`Ӷ{'S\o:o[< L2*:\"MS85vJf4cƉ9["b-K'㘉Y]z46ϿdTG=2XlqrOcbR܌`hy1Hr'F}l(n ҽbt:!W]JoI'j-aد%B)x#Z7/Ak`&BǸ uM SkƋ)Jƙ@Ʃ36!U)r6ÅqӧБcuZp#6Ɵ^9kA@O͔owCaJDϜ|}ЀqeO[7n q3T2s78|)=L\kK)ohjz9Ua^47FJ?߇cOޑl6=7Xz:LlmOBc>D{!{1KNV~FZ^IBXtrX61M}kJڍ܁tRP& `c+S|8tO{>ޠI8$ނNJfu98]H{kVTtX-9kol8PacS4^<6g+8|۠ eU`joA6JFv|JMyLp{97gmVoALw@穄\`~NƊB>8pr6.S;x6PaT}DEeЭfkƊ>.c1O4`ݍ+f#GO7;`eыX;//n'{'7p,<,bf'v݅"WpD^*dxvXq+1-Fe[9b74q*5~q?b ґaymWCҷBƩرSVpۓ`[DRiͭ1P_p{ǁBBc1)yaûDƿ75+V5hoQ OmLͽMmU'\_1Ce]3oүVs!js~̂Z|TmS1y(,!kk7QeKF+˜3c,tS*S .*<<Ȑ%v3WO )HG-GAD !C)`iC珪 +\4*6υ/qw/#wJ[ ǝiM˂WKE7`,G Z1i 9OB"ԘS(b%H)I-he^mVB ݟ4'$sQ6Wǜ I6w!_" IO~Fj?/g)c\; E(hlϻ31>ylu37_5c[4o:6).7gT38mq:PLza6]I;eĉcKw&c4.]Aa0vO%sᬲNmFb:&0*-9.O=FLNJESuM)1ScVc (xӱY<iF[?G@e#OКC>7%rx9BoFmȢϰ;Ay͒l ۞φKh(0.TZEzƾ dr&G$C8ݪ{J{[) s"@ ) 'A )}ʸ9mY-m$\uWl±ĥT2>Q+'lUs`rSr#rXlt|roDySSܧ#l]wLx@rC ղ+&ד_x/ݷ%FHt0V|13g[ah tZ }KqS:3ӎ.|ZɄaqs\nѰE{E"-ܦjIupk l} 悫9'T}協x)d#l[JRtJ BWtfKǀenl/)խZ_Timv#hxo6Lo,tka+Pu Wa<*3Afh+k݄_*ш%2_qnf.=pW2آiNZ!xL2t|p24LkVsRMOFR;ZбpGi[=ӡ:m zlx>'C-KF>Eƚe=<%|ZN▏:a 1ퟶF8Dac3ERt5! -ҡCj_rBN-ЧH>H'xm)/=v%i縉b慱qd#aM!5Y Ŭ`tKFa\I (9yQ$PI\qQxnPLMq ΋K$&( q(pl `d:NC:NBȾ<XGT;}]w|a0gŪqB4}Cl@-&\v${$FᏚ;_z `>ۑddP^7wf"Pwmݗ]kzZꆃ,O;c}G?~X.< Wo&^? ,7{^5"wjsTɷ 8X $R9_~9Jٹbߋ3LKfI}/df *~Vlq󲭑uη&K4dOͥ୾v0$8{MwBGLHڌqDn3*S4;g Ր/6| ,=oO컷><_<vGFλwO6A/}sHΊK7e{8=9o˵$Ya#VNJ?Y]WqKIX|m^{{l⯵ъ_C%D $+ut}KZs@E5L7ZqiNZV)SNo{UbXy:{ms`,ǩ8]MJny,.B)=DsmFOΕ|3X84U0=aIgio߰{ZnNh( _\4fDӘQ_bMT[j[|.u<'MyD%u-~ldH~2(|nBQV#1 ^AP @On-ء ǘw*= 9qR^v^Ja ??`-3W([idrA(?a./c!_S&=n=x,#c?pV^!]@)ND I\w V׭-v)kX5y~0{E#u{}>ͤDFr eso8ɕ\fr.&Cfnw-o2de[مr{Hs9CSepXv# "Lga~sWbG۽/椷[jY-WsfN4$wOFcqzԋvNqTWXlp_>k3c EZ[uݮ0MB2ڤQöD]g5{t C|Hȿ>WMvD| v,lEBϊ33E߷HF6#Omoܕ4Y-b<BE)E% !Vײ>%/Ӏ;؄H^ jzkWX+753Ka>pfn`\Z^f.:˪Iݐ`ނ'>ޏڱ'bƄkGѰrQ &2!Ot>?)2=i)|y|%>sV$QB|Vະj0 qۃ!U\IlDհ}vgoR(-KJ',uTiF *JQk1ml`y-So,%ar)Ct= |q^bM!h5>Rq~-sZP߹Nv)5,hĈ"oK فy&7(']q…d뷅s^XE5{LƐ{f"YgD>QtoHD>ePl?Gho|S|B 3TQFUpT[h/mܚK>2!9a֞4j}C3FCǭ@nEsȆoG7m ˌ!f VLӣw{_+מ+ ւ%4Ǥ+:hJDZ>H/LuRN-IL'j%fԷUuRh>]Z0g_at-;|o<7A"::tÛjxMA>Tn($oP.znH2X81lN D3o}?);A"̄AAqB Ѿ}π]&7}Sz*|Ŧ5]G?m4pٶ -lئv` z;׉ %OE ʥix1pp d[H0JwQY9#z~`!+lwn75|B&)i iNrhkxM}rǔGXy>֡ f@S6 ݕ ɫd9v%b7x*ۋKlg f}Vl}Huߠ l=x0O[%H=\8TNv뤋nZGG )EDz;Xύ^zݭa+VRbŹPdԼޖt W=pDu+4:|S^|Ў+0XbLyEg r߁^'>`ي=Tu2@}HDA>\Z} /G.3'5!?CFzB]V6-]Z,Xĩpt"N1]p:vO:rT^F뤠Zo46 6Iei D'A2^e6fFF HGƍS 7Qe:dxq>q lNdشf >foՔ>8{ c gs׀sj8ܬ{FI 䎚fJ؊V_s/#ʚgZb.lQ #߻&'Q؅gSWx'G+oy-ДȒ^&](lU^ݍ.M?d@gBs[Py䎴iH[EuWH86}C{m) KB1ءlzw/nL>3{xi^ob &Q`Dt#퐼ـ7_lYx v a=3z?}(:1i.Zm9'$3E7sh6_kϛN+7LOLsvtC #s8hBth[bػgf{NֵsXF!l+UK^mc+3p$&^p{,ec<0pHD;)lGâ;кe}TrV\Xu4nj[sAJ >=7{EEI%b Iq|a^\Xm+TP#tFP'/KD=GuBf̱JyNo!d>݈HxgV}eK)XH /n"w9j" AE}s`7y8ǻ4|!>Ջ>IǻM]xW;LƐ X_@}Lq9^t*=wA8v6)[w\(I}2gf]|wz)s~<8Wx-|N9 W ݕ>~÷ 1-@-ky4i"ʾNP!WnsSffw|DIl2C|/QF{9~A4e/-9ژ[q"AwD?)l)(;mk`rt}Zx y-وјN5!,ϬX`Sv|3gMWCoR;_O$[#D[HSxFKh{? ݱk-َ[cƞ i8vMsRW~J3'nwíB-mq٭8kGy|'@ $4CJ0Kn[ݧ`e_~a̓CSn$绵]mUailY2<ĩ0h)RNRǩ[ek(`T(+MI{pSjqe 3kFN{R8eg &S3#/+='Rgt.=Է\$L{| Q}$8ޠ(%$a?{i0F 6o_)Ǯp7 nϙg(xtw >n _t#e7$YNG2Z6 Ƽ'hn֑H9Tt 9sR\6ͭnek`=%࡞8e%I'9OShtC,;oՠQv118TUͧl5$|5W_ ½].pA k`*vNYϚvq8XmWŔX CƱXѺ-+zgJ]h MN@&,{(\[<.VOSwITD&-;4(].\t`f4Z(; `)WhWåm؍n{FwVMW8HCHdgM&fٻt%wش4̷rFڱU ͛)rݷk Gʬx2$N/{1.*rgs͍pdێFTGRэ5134ظߥT:tZmW=f[et9kwB}n Uj ]̯o0wUvG+K30E'5u+ -frDʯC<Ϲv)]"7u:$$y*jމ4D[) cjFy .B:2ܹf+4/\j9`kɞJߤ'z P%!oZMhieGDZj)BXcRa_O:=ۦܴ dȷPN#6zלϑQmf6 ؗR>,V}T1/;[ 2dd D<%><ﰗ^_ ^(~(zNoO(AvUP;%r2t{Io۳:cwOלjTy8ɕ>p|S:{ zQx͙)Ms`p~_;F҅h3߂Lrcv^ax0;cskXz,b4 =Xp7UV6ªRob%G7p) RmtV^Bwby|)/Bu`GMn>j Koΰuu;[JVr'g28 <J'R8MҸ (/<3)k["_qw#7jYG["B_Cr /UFaۓkٞ@OUsR s73JyER6 :NXDbB0A{P$z0gY}\gNjoNO UR7_uo}xC(yn&aMۆP6 lyۋ)w^}f|wZl?)@3@p.VIn!]t9ҒnH|{(6Y6mTImmIKHf泌ݼv5$ҹԳz6zk7V4xT4#>p0/b,^AYQ%҈5QWMGOE‘J+u7[]Ɔn3c|qIldo[̨af+9ѵF+4/ݲ(ˉ>ݦm*q%t ϳZ¨F8!ՠkgqɟZ;Oi4քۮv cT-[tR&}@#FmEL"{[VD_Wfsy ˘av6i]6v:P28'@Ah"s9-nvW,A67vx*nF6Q*G+ cEx}u6 @e cluW}XO-KL隆Y(bj?L#]V#u=ʻ= Gzr%TTk ifq~]6h}7^~--#+M76Z(\[!#ŝGdrdyB  }d $Ka"K{d87[?pOwْ$|pw[RY'$7Axɹ ԇ_ 3 =}V :{4]*evx(lVvDSWyb| G@P;q#AiRbkN>wFdX9uHv?ZG}Wp7u 0 )K꓇A*3>F}s KO5=tO8_oɿPq32\2ex0$to rR%_RڈFSt'pGRk{((RX=b )o5nJxHv»bgx8>ݛE0^[4 'b|f^ !? *Ƒа%Ϳx.9Bx3cc)=vxΟ~z;a|iI<LKҤ0ȇ=K>f Q^ϸ6o2))Pm.'Mf@`8'QWÿھ@ߌWk s 6tb'}!ZTԩgT%-ֿ' F[FY7ѝXloUj!Z ;-فhX{UWL˩eV /txe_ xv>ZM=ã-"t5 3A[0XYLِ: S1i[oxzWIJ԰+iJ FBE3wTbv,o;yۧ07XF̾8Yh-XB:ρ}?GCO1-ȖVc|N:I@8ƊލAIGesaJMoҼE_ǟ duڇS6yP?*ں eYwl gfyps|z׼Vԇ  NE>QMsvz9-,^h+<9人b-4}%앾 *WO뽌>+~ \?H4J@3=e~3 :R )-}u8}>7 *x-[>c:V+u Z`V~'_eN`LlXa֯7i!4}]t_*$vs)ydxDA2h<$7m`5bQ5:ʾ͖䐯z0΋;gk1˴a$ywX~Rgw*DėQJE 4}Cj|I§Oq$ 'ii[ZUF0{{j>N4[NW"Ȓ=^dECD_>/bD䙎Py0ls/"?cxs:A"q5Ht At/Bvٽ_vJN&VtԷqZ푴{OxA5{{ޯkN)?ITL5۳+M*ag2 plJDh&Y/i~'dT9JHk잁ё1]፸z}7[&lwwuV=S)CGEԝ@^i7v=}I'vᚻPCz)^JB`Xw֩ D¢#4&pȯiD;ʢZE pcWלGdWE?`b^^fQAmE󰸺D86rµS{RKpt6ܶ%V¥E(Ž3N鞃{mM釦`ڨ1Q&O]KVSbMm]>9nh%-ÐP.fg|VF{>a[ =|$3pcD]8HfMC;'Ǥm5lLl9FuN}A_g; >^XnpkM,#*ob4M5>`/axgg59J]A>cXSbRoeFש4:G[=/r²껬9'ɭ Vϙ;mVzBZ6u)Dc,96?N׋°> :xscBX/|6DDV=8CNVI(S%s}pGou-VDYբ{_qrގIJ# -ܮv>i[FaU1~Saܒkz!;7C`ګSVJ,"W@u/6~|Z H<^Ntw M vsr[?Pmc.(q\b_&X<::|\2>Ʌ^y-;Z2,;NAnrw 9JQ_ˇۉ8Y17lay3 _;Ma 9zǻ'B٫3hIm]g;`nC‡VqKVsZW/N;'Iքw.۶8z*1$JsU'':X" 6ߎ#Ʋ ŋe-EQȭm7H D0R3VFmhߺo"?J)Z=v?C3 +c4gʞ̆tv:;Թ+DןeM \D'[d>#tY?™}J1yw'twOia9Ou- AZ؝6h-&79zmzI{%t v|cOcsF= lkb_ N 0)UXǩt,ʸ {-,?{~GnXqk*`vS:O6 n&fD8 \x u}Ċcw*Gو'$Al8><"#ީ>+]V]> =ǤgCBZޖ\P7$ƙ4Tܐb4=V4zp;NO #cŤݭ/9"?ӛcb' b7FXlY3J?13Vi2iz֭h6vԸX1%6cE%VȆ_{XϤ!;_7cLˮ&yŊL*W:it7(AIJɗ5tu㈁[ZK1pց3-kūx7Fa%|5CcfNUk «zRaayoGo1aOs,pxnWq{}ې{cvC{s jp#б;}Yr7_NYړ+@4`2UCTw^H Pbu96Lg}@>dFk,Hdfvo~`]JYEq,.k0 G|ܾ6nw^y_n wҴV3hJ &c)zaq)HFᑍY {P7O;_5uwr?с{HC}߫WBFQb@Q 9PevWZY[)tL^'pW{fQ~} =v+uunt!H(oc6vܷ- ww=:ߙ8"LoJI"p$|RnT6FRWaa߼!Č[s'5 _Fo~ C=*HrՆP+ok47޽8Y,yv] @edE>m1rMV%3(/_i@ELX`CFayg󚍫ԧ8 c(Nnpv^qxt|~gpɲ9,7 6Vr&{iƫAy֤ueG8O /A;QTh$N6O_3$ G;{^aCc}sĩ|eRC{d|1/AWƂS}T܀@t^mnfdlWC-e{ »Jj,Lc#@Q mdm}#K45>V/ܗ$V>v*!Dt}LVMžׄ?Rpvjpl_UFgխg)jWQ\z9)9{ž+hxVFI{J}Eae-Vv>Q+7PnE4J+PXԬtHT>mɑ]v1:2uB,kO7:9)jɩB$N{9ҵ):.8NEA){zSA1Sz)~*d_,n~:KU:A1nj{)yֿ]7D 9~!ee ;A,[w~їVrgwr-^fь`Yʅ^>{ΟS(31q*I HteYz6 e _ P) |qtGJN>|]$` d߳fWRvx^}P礠h:oC,LJr|9\%80՗zn>j*gCe`khn7<=t+heS%`n\k]3>Ӣ})ܬ̈L}7a-{/4R'\-HU|z|}Q8W@#vg^OE^sa' 4:/:Blyx*7aѵIeL N)" fBZF: ~ >dPeqgea1tCGt^dAkiE4 ͣUдl 0AkFw2։|8ܯcz;(S׿Bs(-Y۸pd@7:Ɓ"^jn2Az?чycZiGIv~$K-[JNK~, t5tߏD{92Iʎe;[p[ "!;=$mfJ=GC{86IB7lTx1\!c2ֳܝ4(l썍Py d{^s1Ej{y (иy*nI^Zq[)SU[}_كNڰWEK؏D;;~;F ?l[eMFRpe -ne+}xoHEG'ue+49~ OkwVmZy`yucz] iȍN^8!iҭ5Vy7-jr_F ^ht.BZzKT7m1 Ooes0,1oFS\&͡ߣC*gFỏۥ$.=I6ްt!8=5ja, h(du43?I@=IjfkO'~4Y0sƕ0'a^Ђ%\Ƌ!x9p.lq,z =@1:v Cx`}&KFhh%5f Q$^sVaꦕbZ6]_/\Mjj!:G>Ɉ1ٺvUUT7Nml*}!XT2KfE·!](iöCF:-1jO蝂9jAx'pO?ڗ.&1O5իJ4OӲ9gx0i~qB[|շ7as[Lu2^=$% q|@nFľLǴϼI*Nîj' B"H*VgeCƸi^lWXѯFo9G`XoƒEM}c~/ ˾CNElش͈'jEMcX7wel/Mi4 V{it̞ٿg.2ݫpx-JvM&c#'~{w+ٟSKt?"hwӊp8W gA;VtO|*4M9)z&VTF&C'Ã+]0͉NRM~g9̢kC3EޥNHOr#Xk=e4pl #t~0 FWpJѰ%hBr~-o2]{LuxGW!N{p lϢIzV œнfv}kZYz۩;_"` ޢp+n"nVD)/ =q+l)WW_[ ˎ 8"2 .~l@ʇ<?"-&sh 8`*'6 ]k[ UkŶQ8¤('P>(f;폮H,q͢i̖̕: \=om3l 0S']!]OMfn0 jZF,712{c+N' Г뚉 +K!- $֥_Mc\oZވAu'Xn1jx0Og{MۊBsNWWSA̓跛( C4'L(~ʯʼn]ڿFgyk݆p: .xQ?{/"ĊE`,}&`~Z0 %KR}`YS#.!v| mFVeG,bzF2RT*L<Hb\aւfV:t2 $PvG|ѿ/>@ʭDG ]A@ @T}Er k_'}!>tqV_,-B}˙1}'9~|ώFI/j8$Az2VY9OF<Xg>w-go]>Gg즫/m6c?A}BF5 Nlf_RM 7Zخj:~2HOaRlknd~Oɣ3ϡ$/`{1oU5o^g=W3p7cozp? n!'HT1YƅM7_ ܿ72[ߋ$LK[%| Iw+ܹ' +>8;! a2z upoP/]u3x0'Җm&| azW|rv5nd糷Z(+k_Z0@}'zv ]ݤ:}YcҢߌh>-pkTMLw8hKi UO^9jFb ː> AЕ\9pʒ.`YI" _1첌)WO;<ʮzKR7y4ZO-:#);!zAm̄ޒ{Kt? NlEiv9;>DMe:jEJiڹ#DAO-H&G `kymce(p /s ~F$Bdbq 4(w}MG/?~_3awCMyCkw 6CN j#gIekF_Є4Ħx"jޠb5)40yugגT(0M'r+.^-q<}gc5o\}Jm}/ē}ߏ]Ux78 膮3qOqjhP5]CK0;$v3TЄshUKFS+6 aA]+}r{6N_ .w"cv9"~>GyՍrPAd|qb܎mF8HmAjr|.`M6Zd(:PH&LK%l]W"mvӋŻ5#Z(e{ !Z)OӮF(= <&]-t Y┭S{y8"ц9[g2 tÙd=Ehsl$ W1L&ʷϘkoFuX♻z/}[1 kO]=RΚE(ݲyOʥ\m hޮ jB$jseC\^{uwZ9 Dg^WnЄ~`<.&2aoY~/)F$0}ٞc _t7b&"i"O̐j/n" 6n#U 2WW0%ytE5źfRɹƿVq{ʠ pK9q!Ox2u ݦzz{h^#JDg";O {sM7t<{#`Q:P$>@lu^n0r/qr1Pͱ ̷< nK|\UU4߃[&1DrƗE칏C,@~63l|*uu2-o(lS;''ظti(S#B;h57gc`i2wy~7 Z8Hߺc(̋;r6Whb߃INg[)o늁b&RN!a&GjKOѩNX%hXN8"^־{̖lV0 v)M vyVPV7%nu=. [C \s~D{AEk־m ~w e^-KO^tc<}oS,IFy s=nh+o-x@I(ehQGt/GO?8,F|]!< B9*S cُ75Ku"7r>@"5:Xn#􄲸ޟ.׻xDv+-ߎL{v[p;K̕eud7QtVBnHp| KEij x}Vq+F5-mB_NJ e^ů>MlgUtV|6} A^ CǓ^m2yoiai>:vubh>'RVϿ'o!dA*n1 y0J#W `_s-Oʂ}פۙt6"oM3$/g71YNXE6h*IiR?CfD\r~㫑8BVDaTmԘ& av.þ.N'vT۴IiTS9$dnI ~'B' 13a&b\ ys>k; Jǒh1}KN:Rcx@_6B4гtX!-Գ"n=;95bYOFEg+js淀r/<mvb!&RvךOˍL)7d^ƙ4sU6Ch|J+n^qg WK[,QǩЕm՘ʰvsh= Oƙ\(U\G+TѐC9bݑ`7sӢg^OO\?|+']ʄsndUk v~pu.%c n"2yI˓czZOu$B9؞8ھ  /zc|tn{SUpKA*~8rhpx  ,ÆZD׋i$sv 1v(?ڀWh:SXBmX +eH0mo*ODbŽsi\|[=(nH6mr0V4@D*A}04$2bEo8s)F)}TEc o";7Ɛ ~h'#IOL80|+4#a+"H+ʗɇ@#%۔VsmZƮt| Ԣ{5٦xy'=+RВW8CJnjD-ט&h熨Sq__Gp:~c~X I LUwr~`s:^';tZٴe=;{dAr:L8k$緖ӇlG)؛Ƕb~[=+SnKp# yg&"9=I Jʔ7PV; H*)f72FMW WBKQh;_h#䓟iM|[a:@uGFv#Śuѭ&Vi{ypˇV¤TGxya Sm&3*١;D“55EG |M#_36]b?7G#VЀ.BOD#e/X~*^d>GWxgٛ=93UغqMcQ;թQ'! lg0u iV[S]7. E|yTNŁ}n"D>iTLK>o:S6w[g:ѯx9ziv;_Lmcwۅ#שy+T:7n?cY'#Ow=7H_ϰWrM=v b4 Crk OCK`&F1{W8l!oLٛp>~榝[<}?xW9eݤN K?KJznݍi/\}TSxB_}eFDzw;;Z[_0#h/&R+CInhJeϪM@qzѿaJP>ڏNmz DsM 쬜w:ti `#T"!OܩvOp܇Hm7 gGYa7B@co룕)pN KТ:䅾w񰅲f,4}]{$MGGQyDYj˖k4/X|5xwj'UP=Iҿӽǀa4{jݠ'nQI￿-OLd$ntzQ(KP7&B-}[H|vzChҝ>S0wh6kG%H%4`^f\Kڿ7zґ_sZtS{bTũ@9*{d6ֆbU=n[)~*:uhS1̿S.ʩXb"!?9IIn/Mx*}dĩ(p*rNVNE3 5q*?mVb{W$,TtjFt~&8Mb(p/AbdҤxcV6b:7 gKtb;;TޡƱ21)/3.KO"&8AιB7Y>@rQ|wkq eB|# 'c ]pA5nɲʜfF]ۙ:}0n7lƬHTvT#.FW=OX`E&Dzޟk~NtOF *Y}-/oѢjbBaC1 ǡ FKQ"e>/SF{:͏x|HN8Iy@SJJOv[_#{ {2o)MK\7LKIEKke*1:\ШAݳyA3p5/;`r>hox]欼NλEt#)]-xn7[tL= DI~0ZѭwL=8:fҺ3s 7k9<-o` wDd&q9ᡲa<]+|z^c`bGw{t^k4* qDb-}rfkPG=x8q@!TZC;د =JD&DcP{lvRjm 7:Caà \*<"T38W(ጭ_q/kWI6^jMgF 8ʋyٓ,4f 3a)~޲IMQ9d3'K){UhtNAiilߪjLA6̹BI6h2ny>ȁiM#!VtL{rHp/ʇЕR,AH;vJ )xX6]W_FU.qtw0"ϒFI4'd^߸ ?v[@{فvf{Mʋè7gGy+M 16Ք"CL@sO|xbTs򈎷* y/&4[UǸ5ɭ e_eRO1W,8U wL²"|VlaɡjV\T\nROZ|q*?=Y1Hdoӗם|WB{ݛ+4MC޿C--c&Gp½x'8k{hs܇epY(kj Jn*\,n`_`B9O?L:D 1>l+OEgf}YX!GEsB'AreM+ƾJk # 9l6JnKh*_ݼvٛoyݕ4:3+Cۏi%G[\t6r?xw6"om4wEfN vEP^ASE{# l(EF[gApqG,\}4hW, [E9z{Aٟ1UKpշY/؇(5 ?@{}SSշx|=씲5M7IID/٭<*3h${H/.3fi8R\Rϭ>$7z'V8":2nwULJo1oVo:f/F)6Pd?[^ّ~5YxJm}B*mN+;Y3~߹a:9{7 G(N_S-6lÝfDfeoGM׸/:}s[n;IMu@tyNB+q*[ȗ~sPQqN ^#7iӑ܏8}#hcj_jyD=u>ͳ'(9gE!4V+չ߷xKzf,3} [&{7J!E&Z@pαPcjcct==\N{7Yh3Mr6t=܇. kyyqJkSd TlkL.Frt~k&.~`(z*xg?".V# v~*"jL{#]@?S. ] dk*0.䁡_69({',C*zպRK ֏dL .FNŅڝH k£3-6?ܾl߰qʼ[?MKE}Y{5ɭŪ4xBO.L}rE}{ә=::}ҿ jH["axC ϯX*a9ڀka=}˱=p7IrOm>-5nfz; (0 ˦D1d)%"Pz O9/Ά]V֋'L޺.& ZW 2 ~9|67o.Z=P}T~7׃J_bjځQ gŗXB|)Nl Zn d !amA#h^{ y}kcyL=Ql;gĶQTǹoμRW3 E{.ڭ{( {g<5 V;ZI#k^iːPkH@ZjlfD`'0Vmn׏4>E9ԙVALp宺}A)x ޔ^ˍFpd'i}sUsjW0'FP$s#k+l(tĞGĽo-{'1n/L Pgc1-eFa[=ޥ[qʦNrn8l̯i^u\RǦ+1G- !R_!B*m;S<`/~B/ GzU/ ďQؿ%QYH r;gJFYvo P&;eáhq&4F+6`> V~ `{uELz.;K68eF Oq{gk0t3B%^1W񼌯?OWIǺY/ܶ-)i~C<zeBbZXX|^}Vr|u[ҴdPڧj.~Ntϧm~9ru=W`1UA U]|H_N;`Wn.G ~qsþy$S_chsv(9Jo~?o NA?f_)Om<l ! 966sVyц&ˍVvb'#}CqDBWnnU--( FF+rMۨ ~$'%3yxgF|` =NvLoq-yVA{ym>WqjrAo<s>#HF݃-(n7";m,\괝ٜ'x%gI3f$v͟9,v|!)!KWFٻ mBÎ )oˠ&lk~Vb"]x-__oAQD ٖ张d1x,gr/$ֶ[q*T%O@ Wag1zƴ3O:M=(^?HyOKC 9ɐ6xIRsG Q#|0XoZIӴ b~if{]Bn}<>M}}OBϐl3U辮ޟ*dZ:ڙ|xN#1 f M=B!ki[JHbnJkx3\ >D}J 6 Px6 xӴk%勑du>pлg n+k)auvMGe=אd|`^ Q/jƘyuSӪi0l1`er xOZO u*=9J:+0\H| *C~}" 7܅}LB`@FqEÞZ它ZȤ}i}BT`$.Zo PŵA$$z)EQ_Tme-M%U/-ZJljonAA~O*pz|C$lynݬyA 2W16bDjٰ~GYrxtt>v>lNFƑۏ75K8@ApHlk֗(a~C7Tw^|ܷF\qns[ ~Ku_!L;r*l Wۛ7NPUzCϪ_܏8;+V")>{m&-J:gjwecXtԅL|5[[gk&[[Ō!KX"3BAKWTg?}{aĭP+2Xu%61/~ %u^R~8"t>A}띄c'~Bq@~z8F;8O(H4Oՠ6i|%T$6"ֲ^maAv흠ͻeF"`ܱwː!tRбQ_Xa i ,\Lg@7s^{t-3%ů;U˯|[M|/C@,z9tNnx&<ӆ#v|{x | ^A'l/t a2)ZumTgK4 jq2M C REr־%liY@-~ž⽂i̹|Ό[`ғ IҼ%ݦ߀|{@4~*f4g,[_^8уp,fg&U@z:(BS*0l`D_NYeH`wke(E=-Z(n ݫo2r1'dr/QTJLzwdN=H}[:{&>K{;)9߃Үqwj[1O'VW̳ F:{1rsaxRys'Yq|&D9fW Apd'O-_:1ߤQ?X<;ͤx]:{-\-}ٵ{yX-{{hVtO`!od2NŹ7n8xWCM"Էz'?oFӗM{WuG |Մ g~FgYl }rrUÂM^mLsl67RjLXOڣg$tR[\ |E䮍[11Ulh㞗%r] (Dۚm/8$o3i /+mW63@ͧ3(-Qf#C,ⱛ""yaj[Y;n z[zk>'s,9tiߥ1KaWkV1ng3{֔{M'w14~EQ#ٟa2.>S LxVv-}Ha=KhX>fsA"G{~1T2 ضU0^j6k5z?۶6ק&F4DG(9o0r0߲Xlk{c~+nlNn\^1:Bt )b\bm#t0xԹǧjSgӉN!<4y_M桷:϶mw=FVBx|fa<&$Uatlw5@"6,Cוhi0RfɈn^H2=.eϞ2U{z\<unI8Jm@؄@rW]A=\~c9zّ=belY0]{83|,/=oWx&LG0_y6\1Q ߵOWk+q8 OIER*LeC%F'zE֝s2e?v/RYR #<_7N^S@ q[@roԮf_x US9.S80+?e&ce5g[Z2X4Qy-)^iri2ٞj6δ&&v&{Y'(^QD{gq ĸ %_e'L 3[%-ަ5y1&'ɿ vB㫚o+FǯՓ9)T玎"cӍxtBFjJx똩METtƚ0Hr}k^ޤ$eHr*L.lAݵNK(gC45!PѸ[jcAy}0j)D/zwNJē %;h^ݵ Br'B ~BPi p6Er6kB(,Nrs.]:y*Tv3=h6 6c#dC<'4WvxPT\%%OaWOײcqfrn*6Zწ潽C0nĉmGE>xL`%cN#K8R6] R{qFFH#%?V&"#tq~_° !sIwJV<ډU}'nU|ςKf yMՅC93 uk4rwq;hor(b?JɢLvj+ j\ zjhNt4G_6<𷾠bh ]PոE v9ܦJ]tǏSѴmsi[[e ~QR28R^ןu2d.jE]"ُATH" Fq,Kag#8w4 /5d7W{}c? e̗C|%VR&;-iFZ6ƘtzXc`ǩp cij.t!Pi]͋#"2n~Ai D"oGDU:J^Y9"PFPt)_4${v9ḾuJ_5 ΀Cu@+\ #uUFg:xߎьGls7:=?BU*"XЕkΜM1tTEi Y Qzc]'VI%Kcq8_0-RPd 2KOeHB!gyPvy Y"]7OETQ\U¿B<}Qh+W+_Xlw̝)J|)DoY]9;Āv8}<_ڱhl\qL& Ym&c_7%rM[RjOLǡ#Ʃ -ͮ&TĽczx ޡ,!լ$_lY}09"RzLQV'+M3ݛܳFafH1Ęttp~r ˪; {j@;kt9u!Zq &(ڵnWXQ[^ѨE{qji+$C%{W{GuzQiXK) 6*ňݳ HVv6_EA;P5DBO9&8[_*эX?lk"h$C]œ -.RǶiو/giF ]HHn%Ι*{Z_lh-2_m jו~_x{t)Dq-e@:kYMҮ}j=Pٯ˔u_a[ʮdaT#kѹW>=i` ؉|q(Vȕ5u/vV,a:r[u7ܝ`PF:ƹw׷I7IWZZ-nC G.[Ih|F)ĪHC|yh|Q=43י:=w93-F/23kks[3hboht{:Ӛ+lm4#G-ZF|njpݖJx}~[bX*6"3@C  Go-~8YWo}q*"wFr^b_$G+V2C47R;ߵ=BpLM1J0sڱ/C wtnƄ39fbnxJ|u-HWxGk{9sSz/hj%٬ ck>1JG~nјN+K\Dw 3Kꠎ=Z=螓Q^y᫫)a-?ʇkp:\=%-]<'<ݹP6?vL={3A:MS;x (w:FZdkp–?KR&5׎_%4+sF;ȆS|e>65[!j<F?mLV:nLmyаܙc!_d9WF;{eF f&MSᕁ$:>$#8:@-.p=Ub-$#m?lC i`,Mv\\Oㇳ܊J 譩"m0 >ש x̻ե>`n5X4I]59<7R/%eQ+'.SAX=/.ВA嬨s> k ,k@G9a9&LkS'LcmX ijZ+fߙn'VVBH2iF9 /`KmQN t9G=0De'zoS}΅_ ;Ri$M錠&?ƾeEu^cwY6Dž@=d;K7 VRXZ{ytq0;i~bkNM{,O1D}XVAb̌IOC.8@ok:8AC wI}nq4%L=zy#TՒ.5s/ޅ0Ճ_a0R6½.|?2I]_ @ð{W{+(c.='1ޣ#h$OdӀp0~hGQQ]}nm&*2[BE<&-/)u;lfw"P"Y/) MW}n;. ȑ L]O΂N_&V /#Vy&ƸVrfTه.5kq0A\}7Pm*Ea~82 y%IPd-\-c_v3P{ 8▸C[Qخu#|f:;"`ET ZYKKq|gdj (R4aXq 1p{ Ƌ>Er PZ4U}7B;j^tyiUc$vZ4~L!0ms3g̓=+Mw"pʽvQ{@0 WɿXu]h@y%nTVczwK?/>Z0Q{;{}`yk|{ӞQΫ b@}q=_~5z_x½HKBoq2:kPhoQZ;~W:6:£~ P=>yqlňcIk3l?D|dM5(y(b 4I;6'@k/m*;gj n;|f!ةuђwu~ng;dHfg(/_t㱱T{{(u73|KɃmtKKgfD'T%ƜW}{8vSpm{f,@ԻY|J{M{[?w4=?]ݢ`=a}uOsYysg⭿n#M7;ē g;8޾F|[+eX}/qܨR{CΣ~@Fq糘=,)<> %T=^Rx`n6O=mutTJ͝.G:×)/ǐF&7SIS!0"W3WwgEu//%,!xo:}TCARia%}?{lIPӬtnjm@{gveKfQN_׉ t vل~^`~!^ T~Y㽽ԄJlydB%]v+ =}Gk"9Q|Y6&OK?:1βiod׺26jѩҵ+AU39J{WLBKuo8*̍M\BS˝<$MZTa5-Ŏ䶝#}*0܏ƽp={1S97cH_W_a\Yv5QT3x̅pjv&$(vJ.M:ht<6}`A׻ibTQH6Oܧc3TR_ 2`u^trf圡^Q*cKczw©`ʫC9@r*؍FnbxJ}D湁+3hṕ?)}Ygj"m'wCF6&o;.73y+r@u7 6YJ kK~x#|c5H-F*,9$V2۠)uASoH%(s d_BFEz'CbKn%k09_OpfEj\ W|(9FpEР_Mrfg\:=${ms}Ql8,vV똲Kf#žIF}^_a .( '',wR<#/[Qc6 G{gr=<'e#SKv-)#xX-߫aJd7-T ao'vI|zQ}a.vEWD"J? jPݏ1i+?ZػnM_^G/^1{?'蛞a3֑aiev|w=Ṹ܇6XѴ0`}eLZK81' 嘉2{h4)em7FO1F 6Uw9ҍ,%Պ>S ~ 澮8<:.^Z:zj!0lrap;z:nP{p6e$fB({yPNe_#btX(i({MIԉr!}Hٸe; C_u۳Ã/!|Q}sJ7f^\۟_&E<"z Xlf:} Ջ_j\b;Iz{ȡ%<ϪgZobmi%ְW+»{Ӗ+/|%Z<޶޵Su}^K sg T>8NZC$~I y wY_PS(ot;F2;!/S!~qڂ7&o3Mr|4P:7`lp3 Db~q{Xo~.lmSQwy#lk;N{ڒX=iv}կpqw^-1ϗNvPE\U  ia !\E!04;`IagU6Y'cwu'~eO%ݘ(=Hh{b;dLJ$Bs<6mM״9,w/¿w \]Y6&Pdb ۨ0;%޺.ێ;Ң")^'6ܢIbJL#6W&B.Mttt6Bt,W/tBGKܢwp*R)`ۮ@HZQC*,-U~ Ejˎ҃al2ܿ(ے2~ڋ\eTCpkzxpuxlk㾵Ϣ/ =^]CzRXPᑰ >+*XmJiy50Y|d|0?"ŘI=nߡ. 6 'fCha;O ŷĔ^boV~y* 030S_',9jD+/y#C '.a8Q?>iW̻:uұFӅiw֦H]E"ou戠[SaDj3&}Gk-"ضy^\D=Nۊc^(Xa,CIǥcC77ӍM{kasloL?ջw9>$-F؃K,>y C8JZX ztVh0(Xzl5!CY`϶⟴k:k! U9sZS}byta6WפOIR膰|L(YM`,BSM+zF+ABz% q'H}pQ_cPmkiDh׵Fz)b_gi@Jq~@xKϚEv]Zl(fVJ^tgs!=qZd͌ EB^o~bXOc2֭4+i"#x}/=}\KomebX79£{PpS+H,p 7WmȜ M&/3ΰ+7D2_Xj;/L"Ʃp&ͩ e[ѾI/\6|cemXק Gy=զlEJtACM+cojLͷnG/#b%3NR 3gi|Äk9CWu2wZжIJk'$t&3 ޒKM"'AhaL7 >$e析uz>nv1ڊvL ~WJ7:{.ݩMpHo-v;2Q[r]l\4~-4:fuGG% l0Z;;V{`ZV޸MJ7flfL|Kc:Ōz@fC)q'˱SH8KHůSwWW=WQ!VVADmV!$MFͻL~;?r.L  ze(Up0S`!ZSz/Xa5%}m:|:"u_MlDG38Y̓Xvb[\rX]gcE!0ҕ^< }4n{ol{ټ{mp|nꅪp%h6dWq+*qKG[#O\B`U QTc{%>ST#@kR_{>9EV̰}L[arL` ⸱Gcz./[ ǢVR|~dZ~0a!R*Q.WƐkXli]N`%GD߸%DiG9oSk_&bܺp =?_ۗ#? q;r}"|)AGw_,iQyaPV>Z#gcJ:h?%'N^) ZͤaNb0mtOwۭa\Ń2 W6o<=0n#hIPn[/P}6 |E|_aUH/ualCX#E9iF:W,gy3ID݋ e;j*B򲠡@ھ}^EVF snx~U)Sc]c Uf7dVOP0^qF YJi#F:5^+!\M2Nt*LΜ㫽p9Og>×?PZ $M#t: S+f3f ~}hj/GH%Rd7qYزb^bo}î)C㦃bVEoϑ}Ip9偆ƋȁE X=ղ~ u$mEӮ _ vzbŊCM n[ 0..3ӝ'8_&+Ye-ۍa.mFB}P19wGĸVPiM!+ MdcM+ft2 a :}6J4JC'Ǯ+Rn)W5ʣ2 w4+}ن)Uԗ1)WheZ6*z+M#.%Bh),_2mf2C:̾pie}OHvEQI vU8E!7/0 (|CyF! lѹq*U>I=s)i_l^,.\ (㻿Cwghc0qZYި_Vps=8-+UAQ7b-'SmO+۳xYW6R<13%ySz͆ݖoϣ]cgMݗN-Rl7 ۜi~/AV*ʥX->6~mOHx7s~M89UL428dcoӿM@o~HG1uo֬.۠Of#~O<PoSľȅԻ'&AZdӯs,\68g[Z;97[k+j<5݋ܻ<ŔvPckwG|6A?2z {NJOטJ'ciI6L Y}✼kٗRF*L@O#xKPSit X0-F^qFXQ),SfHO*"3;6PD ^c9|<B)2T(&.Ps[eR\w7J!e/šMV u^!}AAMlر~_P^B[e׹a{Ö rX=MǢqY+( Wp|KYyiFkBҹ| mF6k wDDoӢeޡBVT<@߳>'yI ӀQ{kȥj{XR~Bt*پ?Tt_M.;W/A{%԰L1PubF$4^:U[ůTnih(sߍ$J6vZQְv=$K.]"٪tzr-Wt+b*Mޮ.#UCK&dp?J/ɽa1wUGG[$~ 0)ݡPEXxAB'=izu 5ޫ(qð|]n ǧbΏ%_+0maZ<{i^л@3 Eݽ1,i$Ap1C!)%bϣc3ط73Qأ V90d[W?lPM i а0W& |G{QAO[#_n&|^~{K=+~J˙u7nߕ D6%v;#}KwuJ\ܱF)UM ndRF{Z4Ҟvhu &h'@pW-d8QQ>p+EzWQ/Js c):#><㵸?Kf R?_4zW}BE杯/D;p[ 1vY8Js {ѧ^7ޙ0&(V+k!Xe>Ov(a~ցCnr F5ɏXJ_YӄN] gQ|(tgba} Gćn8BIsSVh,ygi }^Wi̭k ^za'&ew4dv갆` K[:])M֮iTJ-D4u/QYnKan ܏_∌tFBʭy>tȶT/Aڃ}Ő1g!a~YBPH-do?:@E-HZcXtBv N^XFڴC> yiyp0rwޑ]? F>|B-`0|m qٻ2ظ}@Igs()67湝 6/"Wr7kN%S(92 ]FJwy*ԍ4 dG1(DI޳)mA u 8k=ZKA&\ =A-q:w9]H>+;!E:0C5de}$B߬ &ifI ,3HWnRAW? }?_' "%)HWHz iҕ+ÿ7T6 j[>FHu>&{]7aG|)X`IrF̃m*e87ހ7it_ bX5ˬ!+Nٕ^:h dCWBuWqAp7U774L\}%ϛ#ro/t.&[%T{'&qLUy{4Z Ī<'2L *uRe5ѫڅ=e%3۱r-=sMA{$v͖Db-f}t#m%5wpvNt=Y]Ənm)wY&|/s<" Y<甗l $q㶀w}{3FxpFv(_i䆄7}p|WeL䁕;9}$P=gf78up$3?T-ͮQB0]۟ 4 'GQ@% ikR;ö0޵.fófpZ}H-z,c|}L;qw J'Etv''~1='xmK4\&P@eH)w -( rM ¿DWf =~n.ڳ;NFl?ëb|+)*Ofyʗ/\&^>ƃSCo!wT |}fcs s fuXT(~1y nazE ]J]=i 0u }9=1mqS3/n&;8rZIb̌')1]twx{GˇeƐ"AM6xp1+~Z+90~_#Ngb}Iߣvwz6S-U}=W846.r䕡N(rn;ػfѿ˞wwtiozh꓍bmY Ѹ-km/N4C󐷺vnCGڜh:aj$C ! ֋0ǟLxdk3Mh]z^#$c#4 /ƥEᅲ|`Z).xJ5Nܙ` ?ulEm]6?A/ҡFn@:5zngZ6N%4F0eTfNju =,cLPnthyYPiw63ʿaُj^oe5~o;P" t$ٗE{qoSOe|I'u}[t{ijF t/%Ğ{eG5cWNH Z p;9?҉eDݨ:ld){*`D"( m"U1!z"G`2Ts 'dgq9y^eɽ =áK1i;pS}=lP_VnXfХAJ !ȳِ9V"A4Pe?ܫ=57)Ym>acOd}sHIS1M 0y Bg FTZDܨ4FJye+j5"(o b՛[<#UQx_w Dgΰuv9vnD:I{۽駚F bu9Ȟri!ᩫc;YtvI>[_tmIs5u} ҏ1mޯdA!+#j8's-)>8;\١su l,X'czMZY2JM0A]3,OH($޼Z/Q.ǩy;IN^{Z&8"]"" Ae˥%0c\P Ģ{h6uK?]NCwOZ]T!mHa !=O6$}<ˀ2Bv+1.t7[H}NdY/:oѵ28~0m w}N7E⮩/Ko* LVm'}n& iq_ueOI ldj*:,m~iz[1]zYn?aFif^+KecR^BlnW5HM@$S%$6(5G[xlYEx{쀄: Fo-|/a [#!9랁}+/anN Wq;df3gvp{*TOYKt-9EsF+vpa0Y2O?e[%#Ow qg.J_4C2ivA;sӜH_#L-5Z)J}f@1gʥX~N$q*NMI3/yFWA_:O>n柯'E ~+>J-j]i3v_0AN)H[ bIh6?Pq*V4ߩP dR\/`Ks5 A)fw*l+AU}Z G=f3߸Wl\*z* v>im%Op?377 *2hg$D${^x f5`_E?i,y!tQɫկ)q{<pp$ᄾe7]IF _pix<>{îv%ۗad;GIh\N3?UvGxK^mZsӊSZ,;˂W:M md 7mvUݕf_\yK,יm5/QcIc.ܹj\[S(.di! {ۑwEc)K{.08߷q.XĴ:} 6߇ɎvFQح ߅)ͭjO6دp zcte376Z|HĞWRWS.iTRDRiݗRۂd n8rfF AȻ1ѡn0NGv1ƮYyizx`FMׯ`R!]`Kz^2ܙSrFS<ZH\.Z+5 1}BMEݫcEڽ4}M2uHtyI:z+84;nK,+T/C=5MI?m^6 PZ?I*2[c63_3["W# ;7% E}kёӅľ2-7:-@T{Y(`C/M^14=Udל֘j7vG\DJM`f~3q7S*㨥+^ʋk:xK XoWw꘥OK!q9C|g>T1pgQޚ(kx/W7k$\F,7@Iyr40_x.D>i~fiyG>°96 ƞ٤\eU~eq`~;`Kb/J/>>odف8dK=bY|RW". 5_htomAro iޤd1;z C#luQש~n+Ilecm&I pg5k!X0O^&9 $V 4]||_BnɆ}ؖ+@9̗Q:S?ɸw:"*_8P(R\"в}/K%KoPA߿PA #פm90}y}ًӘ9٤WW14PvlA]F\Ը6q}|qՏA>aeHF'',svFV32OͿ8u `V$f⚖)h6.a#Ge^9vc<ؕ49BHС6']s`FSY,?vWy-6>Ok Vo$-^͚K]ˆ s|!Pq靛uݩDX VYDle;BbC0mw&vr*62&a8_.8` @c 3%9uT>0$OrH#N$s6Ƹ )'.6 sa[a !bZJB|WrihF"o]+-wz&wa9,tnۛl5R@BZyEo©؍荪"k55⃴V!bF1h:=I_6c.e E sy*.-У⻏ yw+6+zr1 +T|D#Pp4Xq2ˀCkWz{}ߵ5  &m}NMQ 9U+Shj`iq}]t_">(W^%}N΄͂|%W:% }J^pS#2utwîwA쾛'hwr*fU7Uh}2{&vvQ!J]A C>m$׼5 SOw#'/n(;{G9_o)D8ܠ| ,E}]m~ @dL27+` N%sN:;ATn0!UW֤Hs _<2ZCw~{o lk7o6}ˊ/ek-")4pU5XGvzʶHܮ |>ES7;ڽcbвSNEea.1$m辳JNM PrN?w嵋 O =Vd6\E0.)Bpfm-ޤ /SW7aDpp{i}865:ϤzygWuWhUqwM;&վW'ˌs)kl-Yhj„@O/]' A*;t_vHՎF:e[gמ"{O&9LfXhw'T 駝JS"FWg9J6C?4QŠ%RP4ꚷrQl߹HMFgfѩ4)}FPn%.SC2*QpͽFN6[߱{G*4:+4݄HљK(4:!Fn[htS nT/,F߳NOkiL܏K ʏ{&࿠yG]{?{Jޥ{e>w~I۴b,^)m9Kpk? 7∋' pvae9YwU1:HuĎp 컫hѱL=5`5aI $VQB&3LU:|ܺJ8D{O6">tun=ڃ+MPܮ.IuCfsM|U w՗M5̀'ݻ ު/JVO'G)gJӬrvG[A2pИx>wqKs&\ԗ~$vn{c:5 :6],kI  _虇:1ƵxVO? qSjd8ŧ>L.mp酃0vNN(W޿wIQrAw}}*%2˾WF=F/ZtQ2< AsEX?ac7Iy^yƥfo(#%f*pՙG ޾<0uϱQظk('.->lh9י;rk$򵭤hl[b|c93#)(8CY]xb%]~ߗڜ{_1 ޔ}PG;$Vƌ`rT7_١3.nj<;#-IzIҩNs?aalO'7#p4&uQKtxlF?Ey9!i}FtS㗟A I[c$2nÄmǝ# OZfݻ. |gz_ @ё ~ή.WH{1uhOSsLO{:g>T7y-_C1s?Q !>+_x´%.^2 CG+pVn0"T7}ţ,}f]hT<>yea@fG]CtAF TlD%app'FAۧMxK4Nh/aߛ~W*GuV,EيoYP^;sҾ#==+ʜMfQk Iu OG#@kr|vV-0ҵ c1+mMUF3zV2z%{j"fJtsiZ ҩʟ<"z'g{z;#y1(pZZዪOو;-W+mSwBEs(l^Kuv`ך.T/,Gn$@6nG=Q#"mQUr$kߎI# ;O[v'ȕG5.c/Y][qH B9݋@17s$MSצ則5H~7vW BOy1 821r2c^G9kvY)9+MM釛I{{GZdąTߞD%ȅh,&ݾF ޓg#A͛[L7q0["7X/Խ56t# f#۩;kl8ҶϏr^#g\G~eBco)G =7wiWYsбumƳ:H"@;L˷vgx^99՞0Ѓn2C}CQM<{]_5~; 797y>3b#;=||R:w0W&gZ٤'/&n䆋"U`퐳f"Ȗw ɐ4oA=6&HS=̑1(!FGm&bҝ` wu=BZ%~VF3;yc,@3q4yz3}pׯ$ Yu~.1딪z̚]5_S۳k!k=9S&IJIH&3_}6N5D3/lquW jt/G5RaN䎉l}༌7LM?9swE*xς%xϽ?y.yLsAX{͞{\x=Uq|Our̶Hw捗kZz^:2pk ps."(igs]ab[Qv߳2Ɉqd.!mEŸ1#}-bB[Q]=dž{/r]qTD9-hEo-i'N+zK `3A" 򨯰?u3;Q_;pS=83Bt t-<,6c^Zc bNJӻ BQl'/@Ҹ,&. -靳z10T-ݝV`J<tXvÿK{# h5;Wd z&JQyfI؈GRlڜGܪE9M\}(qѳ/ ~IB}u}m"){/|ZKUn$WW)ڽ\w"-VqNYo[P;9>8IgsM`}}Nh"Vnx~/RqԺiߺ`9"fGK(E]z/kӓW :/ IO!Y}u 3ײzjzIꦌrǼ=ƷTt. Qm 0?2g?5"LHQI5.1{%S7+U{ɒMR;uPzQ(ݽtwr.9jksA'b:@Ѐɤwf'7M2w$#{m Ezk}j:Y9Wdnh(|WPna҄[&Qݪ-yG|]ga6iip'rNS :-֢WzNdz0~P3m\ot,r{:!v%P\[8w s>¶K#?$YCJ?gғíw!lB2_R*Wd*{f+0~ L\y F0u}aW^4r;IJw[\iZJxl߰:qo[Kzˬ<@INtZ|wK{s ۛX'| aY t> ߗɃ.9VEd ._u=RKvfnݲ|< [.݅ɳt;Ȝoj;ms""2PUvʥl*c{AbuߕAoc[㝱gd0*V*zk;u2/.ڎ <XR&+֮:q']6l^.uyY8)HO~;bM˜AeFb[~"ZmqTמv>_C_|WzwSb}hѳr\\=L3iТA" tn5V(/ҁA}IV+l%j>[>PhtR۪Ol9Z祍N5Yk`:#\X`ümܽYY>H-!Z0١k=un{y">5 'p*;s TqE8ijwh=F NRF0V2m18 >`G%[`Lm%v)j$ɾdF([wOKEFGQ]_—m}ͦV{b&{VP;d׺Y{Gz}#Is3} >"6O+&^:{ykmM!Jk;HWx#]Bŏ*_]Б0y r*։yWƩ->9kpa\}wxǼ}UCN<\o7%|'n57OXt7ėA)7smn"-6<>jx(p̼lpրENY{#iCqXk>wA@{QB3:8'- bQV wN6cl<FpŠ-Nš$OŁy*v+ ̄d%Amh7b蝊`&"9fW|Izԉy=̀Fw4Ф-kT6Fڌ]Nő^0 ޅ 4>sߩ^_uny9`m(vdO{9Y9X$Nnl$f&vt;ј%h߼4utFRߗ[{qW01yvGQ`eoGy:aMv~6ijom`:LihhMmGOqaGonW?ҩ N=3I)N~nm$&@ziN{u6ԝMfЉ.p+>߃# $%x'=r>{)t {ߍI{Dj1Hp-B 6\vБ `e[n_/yx_fZR4h]?icדNE ; m@%u[!I+Ju6n_%O9k~+A6w(ZW$:9a"G?KF&JMA102셛w k@$] d\Ծ:;|4rj)q98.H屫pҼ P~ %1yh+c;4N\ _Q٬.$H]ŤlE( GdhL= 5fCEHBAKL8XϏ`Y]!&xY8k#x]^Iu{0/ro\[Qթd I t9>bfw܏qz*aZ$B0;B%1tʜE&ϋVԣ͍fMd1 zdVW SO/X/fY~ۚ.VxW89҆5!~b)o_6g.0i `=8ћэ R] 侕5f/5%v8۽ZMVgQ:=ЂQxȃ`x,(*v5M]ŵ:cvePxuF-# %U}* ;Li߉0jjzUL_ iy3SX32hjO4b]Z)L]*g+d:_F"}Rdk k }tOokB#{B@F Nk$ڮ@DKNrU7{`dlcE!wǹq4>-,eǘ3|ODcs~4,k>-*!Q@ TZ'fI`/ na!n2/@5[/{`ؙC8\9DZ5rr3EeS+7fO RFq6a5EK}ѿ PCذf(&j8w](fzAEʩX?1gVoj݇Һ[̎<9f#2$p [p})5] sԸArx7)ًPbwE%j̹uhePkngpAfi"( al0o\竗v\R:!>])Yl͙x#~6%g‡ &I.쁻xZaThS;cEUZ o0Omʘh 1HL7cQּA6Ҁ4 TAMA/ִ5..JaRsՏhܻ7KūQ39ArF w"]6YB67Yue)JXDz ,Z%]P,Nʦxw|\R{V../Xʎ/f^UnPd [bba{3j*|aA.Q*%du(ըjE6bv2ce::]F`F2SbpS=:F)V_¨z"ܫld9<,sH. ng"+[ܤ/76j9q݄۸_@rLmTLK{<ڃ ʘ/*QghZ5{l&QA}M`TZbeJD^KC9^9-,?RFФ*G R6R} ؟B9yA9sipFؗ`u/->}B":li u^k%CreqR8b:eԸ{P|ܞ^ޑ\f&N*1!=wqpq(b6uOъI8@et6A5ܑaMo, QYi|$a/:3 Qit#dءY]:aG[Ncp鍱Gs2W8 EEXDqe+0kBYα3&uKwmB\yغuJ?lV;`sjVUBQv0';:1mIJ;2Ay۰ )6]2ڢ{h0p4p VX=)jŭHKݰ/t,P4M z;&l ?|)߱5zIIhI0l1͝ N Z5+T<^#k#V넜,¶7yavٸᡋJY>q笫>)XB6BM}4$7 Ԙc8:qr^cm*wɕƥݑ-2sAp3 n JQǨ}|.Z÷ u^Ιe%> gc2~33/]#eeu"K8ݕpPK bpS!IW3.)%< =M3 r+T7mO2&M{rl#i13}@aUA;k ˽v[B"R;%Ԡ6O!~Lڽ,on?Y]ʹbvs)|g2nϵWtA+Ґ(_i ~) k#{V/l#"oqGD愋FOLkl O91SԵX3iPrshj;\N_Lyv~1n}6 vU &M'rW^{;:mO┵!O1l&\΄teB Zw]K'.9fVP1_|LzQ8u)VFsg=fw / tYؽVc<]&N.^*KH]W*տ 9[֮}4LMS|%:OŹ8AHr3NmJ;23#" pm@w&ߝSja IxeJiRBѠ`}u)--gW$T$v U~J /-S4وh&ƚH O.[W=,?{Jqͩ /Sq=Gzb9n$hx9߈ydNEc5*=Q o4gc͓:ބƄ8$-d7BJw7g Yy0T1F!͈ؕ`|Yr7:]'X8[`]BpS z* #C>m:8= wJ^5uja_يEdP?Չ̉jʾ;{|_D>`F3FW& vү~mx뿯a?z{S{ɾ m bg#w Vy37(tXNǮ;"MLKf"~|ھ&K/7L%.Y:-%< C>A_ WשOXWLݗ;ɧ}Gd6O>,IZ N+7P^^SNp|0 1V\C0(hgc?\{FAOaQGhzO;Yϸ dܮxԘ4n< @||vg=Q-<V.@Nr6YwGz2p^\ KPe쾂jqWw#+&>]/|E#)Jڠc&BwJfh>}G^Az!WHu9q^F<"2-WN^QW)}%ԣ9c>_gtrQ}I-:y ˑÐ.׭gpDŽ*YڡM PNWM,63/n*u'ILmdȫ1&=Qr6DG But-2-yne-1,4-diol 86.0892 86.0367794 56 238 avogadro-1.1.1/testfiles/ethane-1_2-diol.cml0000644000175000001440000000464612250371054020005 0ustar marcususers Ethane-1,2-diol 62.0678 62.0367794 -13 197 avogadro-1.1.1/testfiles/COPYING0000644000175000001440000000273512250371054015570 0ustar marcususersCopyright (c) 2006 Jerome Pansanel All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. avogadro-1.1.1/testfiles/propane.cml0000644000175000001440000000501012250371054016663 0ustar marcususers Propane 44.0956 44.0626003 -188 -42 avogadro-1.1.1/testfiles/methanol.nwo0000644000175000001440000053160012250371054017067 0ustar marcususers nwchem, len=6 methanol.nw, len=11 argument 1 = methanol.nw ============================== echo of input deck ============================== echo start methanol geometry units angstrom C 0.01262217 -0.66514356 0.00000000 O 0.09368171 0.74814055 0.00000000 H -0.51552928 -1.00097453 -0.89545644 H -0.51552928 -1.00097453 0.89545644 H 1.02444426 -1.07870724 0.00000000 H -0.81857240 1.08639328 0.00000000 end basis C library 6-31g* O library 6-31g* H library 6-31g* end dft xc b3lyp end task dft optimize task dft freq ================================================================================ Northwest Computational Chemistry Package (NWChem) 6.0 ------------------------------------------------------ Environmental Molecular Sciences Laboratory Pacific Northwest National Laboratory Richland, WA 99352 Copyright (c) 1994-2010 Pacific Northwest National Laboratory Battelle Memorial Institute NWChem is an open-source computational chemistry package distributed under the terms of the Educational Community License (ECL) 2.0 A copy of the license is included with this distribution in the LICENSE.TXT file ACKNOWLEDGMENT -------------- This software and its documentation were developed at the EMSL at Pacific Northwest National Laboratory, a multiprogram national laboratory, operated for the U.S. Department of Energy by Battelle under Contract Number DE-AC05-76RL01830. Support for this work was provided by the Department of Energy Office of Biological and Environmental Research, Office of Basic Energy Sciences, and the Office of Advanced Scientific Computing. Job information --------------- hostname = nighthawk program = nwchem date = Sat Oct 1 22:47:02 2011 compiled = So_Apr_24_12:17:43_2011 source = /home/mbanck/debian/debichem/nwchem-6.0 nwchem branch = 6.0 input = methanol.nw prefix = methanol. data base = ./methanol.db status = startup nproc = 1 time left = -1s Memory information ------------------ heap = 13107201 doubles = 100.0 Mbytes stack = 13107201 doubles = 100.0 Mbytes global = 26214400 doubles = 200.0 Mbytes (distinct from heap & stack) total = 52428802 doubles = 400.0 Mbytes verify = yes hardfail = no Directory information --------------------- 0 permanent = . 0 scratch = . NWChem Input Module ------------------- Scaling coordinates for geometry "geometry" by 1.889725989 (inverse scale = 0.529177249) CS symmetry detected ------ auto-z ------ Geometry "geometry" -> "" ------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 -0.01262217 0.66514356 0.00000000 2 O 8.0000 -0.09368171 -0.74814055 0.00000000 3 H 1.0000 0.51552928 1.00097453 -0.89545644 4 H 1.0000 0.51552928 1.00097453 0.89545644 5 H 1.0000 -1.02444426 1.07870725 0.00000000 6 H 1.0000 0.81857240 -1.08639328 0.00000000 Atomic Mass ----------- C 12.000000 O 15.994910 H 1.007825 Effective nuclear repulsion energy (a.u.) 40.3665173748 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0000000000 0.0000000000 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 5 Symmetry unique atoms 1 2 3 5 6 Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value ----------- -------- ----- ----- ----- ----- ----- ---------- 1 Stretch 1 2 1.41561 2 Stretch 1 3 1.09251 3 Stretch 1 4 1.09251 4 Stretch 1 5 1.09308 5 Stretch 2 6 0.97295 6 Bend 1 2 6 107.06154 7 Bend 2 1 3 109.54656 8 Bend 2 1 4 109.54656 9 Bend 2 1 5 108.94876 10 Bend 3 1 4 110.09665 11 Bend 3 1 5 109.34116 12 Bend 4 1 5 109.34116 13 Torsion 3 1 2 6 60.43074 14 Torsion 4 1 2 6 -60.43074 15 Torsion 5 1 2 6 180.00000 XYZ format geometry ------------------- 6 geometry C -0.01262217 0.66514356 0.00000000 O -0.09368171 -0.74814055 0.00000000 H 0.51552928 1.00097453 -0.89545644 H 0.51552928 1.00097453 0.89545644 H -1.02444426 1.07870725 0.00000000 H 0.81857240 -1.08639328 0.00000000 ============================================================================== internuclear distances ------------------------------------------------------------------------------ center one | center two | atomic units | angstroms ------------------------------------------------------------------------------ 2 O | 1 C | 2.67511 | 1.41561 3 H | 1 C | 2.06454 | 1.09251 4 H | 1 C | 2.06454 | 1.09251 5 H | 1 C | 2.06562 | 1.09308 6 H | 2 O | 1.83860 | 0.97295 ------------------------------------------------------------------------------ number of included internuclear distances: 5 ============================================================================== ============================================================================== internuclear angles ------------------------------------------------------------------------------ center 1 | center 2 | center 3 | degrees ------------------------------------------------------------------------------ 2 O | 1 C | 3 H | 109.55 2 O | 1 C | 4 H | 109.55 2 O | 1 C | 5 H | 108.95 3 H | 1 C | 4 H | 110.10 3 H | 1 C | 5 H | 109.34 4 H | 1 C | 5 H | 109.34 1 C | 2 O | 6 H | 107.06 ------------------------------------------------------------------------------ number of included internuclear angles: 7 ============================================================================== Basis "ao basis" -> "" (cartesian) ----- C (Carbon) ---------- Exponent Coefficients -------------- --------------------------------------------------------- 1 S 3.04752490E+03 0.001835 1 S 4.57369510E+02 0.014037 1 S 1.03948690E+02 0.068843 1 S 2.92101550E+01 0.232184 1 S 9.28666300E+00 0.467941 1 S 3.16392700E+00 0.362312 2 S 7.86827240E+00 -0.119332 2 S 1.88128850E+00 -0.160854 2 S 5.44249300E-01 1.143456 3 P 7.86827240E+00 0.068999 3 P 1.88128850E+00 0.316424 3 P 5.44249300E-01 0.744308 4 S 1.68714400E-01 1.000000 5 P 1.68714400E-01 1.000000 6 D 8.00000000E-01 1.000000 O (Oxygen) ---------- Exponent Coefficients -------------- --------------------------------------------------------- 1 S 5.48467170E+03 0.001831 1 S 8.25234950E+02 0.013950 1 S 1.88046960E+02 0.068445 1 S 5.29645000E+01 0.232714 1 S 1.68975700E+01 0.470193 1 S 5.79963530E+00 0.358521 2 S 1.55396160E+01 -0.110778 2 S 3.59993360E+00 -0.148026 2 S 1.01376180E+00 1.130767 3 P 1.55396160E+01 0.070874 3 P 3.59993360E+00 0.339753 3 P 1.01376180E+00 0.727159 4 S 2.70005800E-01 1.000000 5 P 2.70005800E-01 1.000000 6 D 8.00000000E-01 1.000000 H (Hydrogen) ------------ Exponent Coefficients -------------- --------------------------------------------------------- 1 S 1.87311370E+01 0.033495 1 S 2.82539370E+00 0.234727 1 S 6.40121700E-01 0.813757 2 S 1.61277800E-01 1.000000 Summary of "ao basis" -> "" (cartesian) ------------------------------------------------------------------------------ Tag Description Shells Functions and Types ---------------- ------------------------------ ------ --------------------- C 6-31g* 6 15 3s2p1d O 6-31g* 6 15 3s2p1d H 6-31g* 2 2 2s NWChem Geometry Optimization ---------------------------- maximum gradient threshold (gmax) = 0.000450 rms gradient threshold (grms) = 0.000300 maximum cartesian step threshold (xmax) = 0.001800 rms cartesian step threshold (xrms) = 0.001200 fixed trust radius (trust) = 0.300000 maximum step size to saddle (sadstp) = 0.100000 energy precision (eprec) = 5.0D-06 maximum number of steps (nptopt) = 20 initial hessian option (inhess) = 0 line search option (linopt) = 1 hessian update option (modupd) = 1 saddle point option (modsad) = 0 initial eigen-mode to follow (moddir) = 0 initial variable to follow (vardir) = 0 follow first negative mode (firstneg) = T apply conjugacy (opcg) = F source of zmatrix = autoz ------------------- Energy Minimization ------------------- Names of Z-matrix variables 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Variables with the same non-blank name are constrained to be equal Using old Hessian from previous optimization -------- Step 0 -------- Geometry "geometry" -> "geometry" --------------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 -0.01262217 0.66514356 0.00000000 2 O 8.0000 -0.09368171 -0.74814055 0.00000000 3 H 1.0000 0.51552928 1.00097453 -0.89545644 4 H 1.0000 0.51552928 1.00097453 0.89545644 5 H 1.0000 -1.02444426 1.07870725 0.00000000 6 H 1.0000 0.81857240 -1.08639328 0.00000000 Atomic Mass ----------- C 12.000000 O 15.994910 H 1.007825 Effective nuclear repulsion energy (a.u.) 40.3665173748 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0000000000 0.0000000000 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 5 Symmetry unique atoms 1 2 3 5 6 NWChem DFT Module ----------------- Caching 1-el integrals General Information ------------------- SCF calculation type: DFT Wavefunction type: closed shell. No. of atoms : 6 No. of electrons : 18 Alpha electrons : 9 Beta electrons : 9 Charge : 0 Spin multiplicity: 1 Use of symmetry is: on ; symmetry adaption is: on Maximum number of iterations: 30 AO basis - number of functions: 38 number of shells: 20 Convergence on energy requested: 1.00D-06 Convergence on density requested: 1.00D-05 Convergence on gradient requested: 5.00D-04 XC Information -------------- B3LYP Method XC Potential Hartree-Fock (Exact) Exchange 0.200 Slater Exchange Functional 0.800 local Becke 1988 Exchange Functional 0.720 non-local Lee-Yang-Parr Correlation Functional 0.810 VWN I RPA Correlation Functional 0.190 local Grid Information ---------------- Grid used for XC integration: medium Radial quadrature: Mura-Knowles Angular quadrature: Lebedev. Tag B.-S. Rad. Rad. Pts. Rad. Cut. Ang. Pts. --- ---------- --------- --------- --------- C 0.70 49 7.0 434 O 0.60 49 7.0 434 H 0.35 45 8.0 434 Grid pruning is: on Number of quadrature shells: 233 Spatial weights used: Erf1 Convergence Information ----------------------- Convergence aids based upon iterative change in total energy or number of iterations. Levelshifting, if invoked, occurs when the HOMO/LUMO gap drops below (HL_TOL): 1.00D-02 DIIS, if invoked, will attempt to extrapolate using up to (NFOCK): 10 stored Fock matrices. Damping( 0%) Levelshifting(0.5) DIIS --------------- ------------------- --------------- dE on: start ASAP start dE off: 2 iters 30 iters 30 iters Screening Tolerance Information ------------------------------- Density screening/tol_rho: 1.00D-10 AO Gaussian exp screening on grid/accAOfunc: 14 CD Gaussian exp screening on grid/accCDfunc: 20 XC Gaussian exp screening on grid/accXCfunc: 20 Schwarz screening/accCoul: 1.00D-08 Superposition of Atomic Density Guess ------------------------------------- Sum of atomic energies: -114.40753654 Non-variational initial energy ------------------------------ Total energy = -115.285510 1-e energy = -235.035781 2-e energy = 79.383753 HOMO = -0.364629 LUMO = 0.120782 Symmetry analysis of molecular orbitals - initial ------------------------------------------------- Numbering of irreducible representations: 1 a' 2 a" Orbital symmetries: 1 a' 2 a' 3 a' 4 a' 5 a' 6 a" 7 a' 8 a' 9 a" 10 a' 11 a' 12 a' 13 a" 14 a' 15 a' 16 a" 17 a' 18 a' 19 a' Time after variat. SCF: 0.3 Time prior to 1st pass: 0.3 Integral file = ./methanol.aoints.0 Record size in doubles = 65536 No. of integs per rec = 43688 Max. records in memory = 7 Max. records in file = 1445 No. of bits per label = 8 No. of bits per value = 64 #quartets = 1.615D+04 #integrals = 1.566D+05 #direct = 0.0% #cached =100.0% Grid_pts file = ./methanol.gridpts.0 Record size in doubles = 12289 No. of grid_pts per rec = 3070 Max. records in memory = 38 Max. recs in file = 7711 Memory utilization after 1st SCF pass: Heap Space remaining (MW): 12.18 12179658 Stack Space remaining (MW): 13.11 13106932 convergence iter energy DeltaE RMS-Dens Diis-err time ---------------- ----- ----------------- --------- --------- --------- ------ d= 0,ls=0.0,diis 1 -115.6714607823 -1.56D+02 2.20D-02 4.17D-01 1.8 d= 0,ls=0.0,diis 2 -115.6699339436 1.53D-03 1.13D-02 4.65D-01 2.6 d= 0,ls=0.0,diis 3 -115.7109393497 -4.10D-02 2.12D-03 2.77D-02 3.5 d= 0,ls=0.0,diis 4 -115.7132997138 -2.36D-03 4.01D-04 4.55D-04 4.3 d= 0,ls=0.0,diis 5 -115.7133431644 -4.35D-05 1.30D-04 5.47D-05 5.1 d= 0,ls=0.0,diis 6 -115.7133495629 -6.40D-06 1.63D-05 8.40D-07 6.0 d= 0,ls=0.0,diis 7 -115.7133496650 -1.02D-07 2.60D-06 8.10D-09 6.8 Total DFT energy = -115.713349664964 One electron energy = -237.151503334363 Coulomb energy = 96.588314919305 Exchange-Corr. energy = -15.516678624684 Nuclear repulsion energy = 40.366517374778 Numeric. integr. density = 18.000001215111 Total iterative time = 6.6s DFT Final Molecular Orbital Analysis ------------------------------------ Vector 1 Occ=2.000000D+00 E=-1.913666D+01 Symmetry=a' MO Center= -9.4D-02, -7.5D-01, 1.8D-19, r^2= 1.5D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 16 0.992809 2 O s Vector 2 Occ=2.000000D+00 E=-1.022277D+01 Symmetry=a' MO Center= -1.3D-02, 6.7D-01, 1.4D-18, r^2= 2.8D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 1 0.992887 1 C s Vector 3 Occ=2.000000D+00 E=-1.009310D+00 Symmetry=a' MO Center= 6.8D-02, -5.6D-01, 1.7D-17, r^2= 6.0D-01 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 -0.449500 2 O s 21 -0.424908 2 O s 16 0.201838 2 O s Vector 4 Occ=2.000000D+00 E=-6.773293D-01 Symmetry=a' MO Center= 1.3D-02, 4.7D-01, -1.9D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 2 0.361669 1 C s 6 0.329671 1 C s 21 -0.180446 2 O s 1 -0.179997 1 C s 19 0.178206 2 O py Vector 5 Occ=2.000000D+00 E=-4.993571D-01 Symmetry=a' MO Center= 1.4D-01, -1.2D-01, 9.8D-17, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 0.338606 2 O px 19 -0.258366 2 O py 4 0.227184 1 C py 3 0.216457 1 C px 37 0.208156 6 H s 22 0.179055 2 O px 21 -0.153038 2 O s Vector 6 Occ=2.000000D+00 E=-4.389223D-01 Symmetry=a" MO Center= 1.7D-01, 5.3D-01, -2.0D-16, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 5 -0.426390 1 C pz 20 -0.248191 2 O pz 31 0.204855 3 H s 33 -0.204855 4 H s 9 -0.179489 1 C pz 32 0.164197 3 H s 34 -0.164197 4 H s 24 -0.156486 2 O pz Vector 7 Occ=2.000000D+00 E=-4.224936D-01 Symmetry=a' MO Center= -3.1D-01, 2.9D-01, 4.6D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 19 0.341416 2 O py 3 0.319775 1 C px 4 -0.268638 1 C py 35 -0.243322 5 H s 23 0.196161 2 O py 36 -0.180136 5 H s 7 0.165840 1 C px Vector 8 Occ=2.000000D+00 E=-3.276039D-01 Symmetry=a' MO Center= -1.5D-01, -2.3D-01, 1.1D-17, r^2= 1.6D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 -0.410843 2 O px 21 0.327632 2 O s 22 -0.279010 2 O px 3 0.257767 1 C px 19 -0.242529 2 O py 23 -0.172328 2 O py 36 -0.171216 5 H s 35 -0.164207 5 H s Vector 9 Occ=2.000000D+00 E=-2.611350D-01 Symmetry=a" MO Center= 1.4D-02, -4.0D-01, -4.6D-18, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 20 0.599417 2 O pz 24 0.469522 2 O pz 32 0.184129 3 H s 34 -0.184129 4 H s 5 -0.177918 1 C pz Vector 10 Occ=0.000000D+00 E= 7.317537D-02 Symmetry=a' MO Center= 7.7D-01, -5.8D-01, 9.7D-16, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 38 1.203254 6 H s 21 -1.091008 2 O s 6 -0.679596 1 C s 8 -0.545252 1 C py 34 0.501443 4 H s 32 0.501443 3 H s 22 -0.445209 2 O px 36 0.268366 5 H s 18 -0.252044 2 O px 4 -0.198036 1 C py Vector 11 Occ=0.000000D+00 E= 1.338390D-01 Symmetry=a' MO Center= -2.5D-02, 8.6D-01, -6.6D-17, r^2= 3.9D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 2.388187 1 C s 36 -1.223563 5 H s 32 -1.024600 3 H s 34 -1.024600 4 H s 21 -0.729709 2 O s 38 0.579082 6 H s 22 -0.207055 2 O px 2 0.206406 1 C s 8 0.191561 1 C py 23 -0.184928 2 O py Vector 12 Occ=0.000000D+00 E= 1.713021D-01 Symmetry=a' MO Center= -3.7D-01, 9.9D-01, 2.0D-14, r^2= 2.9D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 1.709150 5 H s 7 1.308114 1 C px 34 -0.891923 4 H s 32 -0.891923 3 H s 3 0.417030 1 C px 8 -0.391079 1 C py 6 0.314465 1 C s 21 -0.257787 2 O s 23 -0.195369 2 O py 22 -0.190036 2 O px Vector 13 Occ=0.000000D+00 E= 1.751964D-01 Symmetry=a" MO Center= 5.0D-01, 9.8D-01, -2.0D-14, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 32 -1.551265 3 H s 34 1.551265 4 H s 9 -1.353314 1 C pz 5 -0.452470 1 C pz 24 0.228279 2 O pz Vector 14 Occ=0.000000D+00 E= 2.029427D-01 Symmetry=a' MO Center= 1.0D-01, 2.5D-01, 1.0D-16, r^2= 2.6D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 -1.307782 1 C py 38 -0.885510 6 H s 23 -0.850854 2 O py 6 0.798214 1 C s 21 -0.687320 2 O s 7 -0.398160 1 C px 19 -0.383492 2 O py 22 0.307375 2 O px 4 -0.305149 1 C py 36 -0.292670 5 H s Vector 15 Occ=0.000000D+00 E= 5.364305D-01 Symmetry=a' MO Center= -7.5D-02, 5.9D-01, -4.7D-16, r^2= 1.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.380568 1 C py 4 -0.944976 1 C py 21 0.775189 2 O s 6 -0.434887 1 C s 2 0.363797 1 C s 7 0.356557 1 C px 19 -0.295315 2 O py 38 0.235752 6 H s 23 0.192500 2 O py 3 -0.183672 1 C px Vector 16 Occ=0.000000D+00 E= 5.701398D-01 Symmetry=a' MO Center= 2.5D-01, 5.8D-01, -5.8D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 7 -1.689141 1 C px 3 0.727098 1 C px 35 -0.490807 5 H s 8 0.485981 1 C py 36 -0.472711 5 H s 21 0.292569 2 O s 4 -0.256560 1 C py 38 0.195659 6 H s 33 0.186641 4 H s 31 0.186641 3 H s Vector 17 Occ=0.000000D+00 E= 5.734457D-01 Symmetry=a" MO Center= -2.8D-01, 6.0D-01, 6.1D-15, r^2= 2.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 9 1.780657 1 C pz 5 -0.742731 1 C pz 32 0.441846 3 H s 34 -0.441846 4 H s 31 0.392318 3 H s 33 -0.392318 4 H s 20 -0.208057 2 O pz 12 -0.187479 1 C dxz 24 -0.186707 2 O pz Vector 18 Occ=0.000000D+00 E= 7.843476D-01 Symmetry=a' MO Center= 2.4D-01, -4.1D-01, -1.0D-15, r^2= 2.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 0.968216 5 H s 7 0.960295 1 C px 37 0.893579 6 H s 38 -0.665217 6 H s 32 -0.518032 3 H s 34 -0.518032 4 H s 3 -0.478028 1 C px 23 0.379504 2 O py 35 -0.320219 5 H s 18 -0.317576 2 O px Vector 19 Occ=0.000000D+00 E= 8.570151D-01 Symmetry=a" MO Center= 3.7D-01, 8.3D-01, 8.4D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 34 -1.433626 4 H s 32 1.433626 3 H s 9 1.415960 1 C pz 5 -0.827479 1 C pz 33 0.676202 4 H s 31 -0.676202 3 H s 24 -0.351562 2 O pz 20 0.258696 2 O pz 12 0.247359 1 C dxz 14 0.213960 1 C dyz center of mass -------------- x = -0.04828150 y = -0.11652722 z = 0.00000000 moments of inertia (a.u.) ------------------ 71.913410992692 -0.000000000000 0.000000000000 -0.000000000000 14.306816352838 0.000000000000 0.000000000000 0.000000000000 74.676881210334 Multipole analysis of the density --------------------------------- L x y z total alpha beta nuclear - - - - ----- ----- ---- ------- 0 0 0 0 -0.000000 -9.000000 -9.000000 18.000000 1 1 0 0 0.589869 0.294935 0.294935 0.000000 1 0 1 0 0.335624 0.167812 0.167812 0.000000 1 0 0 1 -0.000000 -0.000000 -0.000000 0.000000 2 2 0 0 -8.725671 -8.509294 -8.509294 8.292917 2 1 1 0 -1.672351 -0.029150 -0.029150 -1.614051 2 1 0 1 0.000000 0.000000 0.000000 0.000000 2 0 2 0 -9.588516 -25.292113 -25.292113 40.995710 2 0 1 1 0.000000 0.000000 0.000000 0.000000 2 0 0 2 -10.047257 -7.887059 -7.887059 5.726860 Parallel integral file used 4 records with 0 large values NWChem DFT Gradient Module -------------------------- charge = 0.00 wavefunction = closed shell Using symmetry DFT ENERGY GRADIENTS atom coordinates gradient x y z x y z 1 C -0.023852 1.256939 0.000000 -0.005139 0.007432 0.000000 2 O -0.177033 -1.413781 0.000000 0.003020 0.008605 0.000000 3 H 0.974209 1.891568 -1.692167 -0.001402 -0.008505 0.002450 4 H 0.974209 1.891568 1.692167 -0.001402 -0.008505 -0.002450 5 H -1.935919 2.038461 0.000000 0.000375 0.002247 0.000000 6 H 1.546878 -2.052986 0.000000 0.004548 -0.001274 0.000000 ---------------------------------------- | Time | 1-e(secs) | 2-e(secs) | ---------------------------------------- | CPU | 0.00 | 1.50 | ---------------------------------------- | WALL | 0.01 | 2.79 | ---------------------------------------- @ Step Energy Delta E Gmax Grms Xrms Xmax Walltime @ ---- ---------------- -------- -------- -------- -------- -------- -------- @ 0 -115.71334966 0.0D+00 0.00775 0.00396 0.00000 0.00000 21.9 ok ok Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value Gradient ----------- -------- ----- ----- ----- ----- ----- ---------- ---------- 1 Stretch 1 2 1.41561 -0.00775 2 Stretch 1 3 1.09251 -0.00530 3 Stretch 1 4 1.09251 -0.00530 4 Stretch 1 5 1.09308 0.00050 5 Stretch 2 6 0.97295 0.00471 6 Bend 1 2 6 107.06154 -0.00038 7 Bend 2 1 3 109.54656 -0.00543 8 Bend 2 1 4 109.54656 -0.00543 9 Bend 2 1 5 108.94876 0.00420 10 Bend 3 1 4 110.09665 0.00311 11 Bend 3 1 5 109.34116 0.00179 12 Bend 4 1 5 109.34116 0.00179 13 Torsion 3 1 2 6 60.43074 -0.00148 14 Torsion 4 1 2 6 -60.43074 0.00148 15 Torsion 5 1 2 6 180.00000 0.00000 NWChem DFT Module ----------------- Caching 1-el integrals General Information ------------------- SCF calculation type: DFT Wavefunction type: closed shell. No. of atoms : 6 No. of electrons : 18 Alpha electrons : 9 Beta electrons : 9 Charge : 0 Spin multiplicity: 1 Use of symmetry is: on ; symmetry adaption is: on Maximum number of iterations: 30 AO basis - number of functions: 38 number of shells: 20 Convergence on energy requested: 1.00D-06 Convergence on density requested: 1.00D-05 Convergence on gradient requested: 5.00D-04 XC Information -------------- B3LYP Method XC Potential Hartree-Fock (Exact) Exchange 0.200 Slater Exchange Functional 0.800 local Becke 1988 Exchange Functional 0.720 non-local Lee-Yang-Parr Correlation Functional 0.810 VWN I RPA Correlation Functional 0.190 local Grid Information ---------------- Grid used for XC integration: medium Radial quadrature: Mura-Knowles Angular quadrature: Lebedev. Tag B.-S. Rad. Rad. Pts. Rad. Cut. Ang. Pts. --- ---------- --------- --------- --------- C 0.70 49 7.0 434 O 0.60 49 7.0 434 H 0.35 45 8.0 434 Grid pruning is: on Number of quadrature shells: 233 Spatial weights used: Erf1 Convergence Information ----------------------- Convergence aids based upon iterative change in total energy or number of iterations. Levelshifting, if invoked, occurs when the HOMO/LUMO gap drops below (HL_TOL): 1.00D-02 DIIS, if invoked, will attempt to extrapolate using up to (NFOCK): 10 stored Fock matrices. Damping( 0%) Levelshifting(0.5) DIIS --------------- ------------------- --------------- dE on: start ASAP start dE off: 2 iters 30 iters 30 iters Screening Tolerance Information ------------------------------- Density screening/tol_rho: 1.00D-10 AO Gaussian exp screening on grid/accAOfunc: 14 CD Gaussian exp screening on grid/accCDfunc: 20 XC Gaussian exp screening on grid/accXCfunc: 20 Schwarz screening/accCoul: 1.00D-08 Loading old vectors from job with title : Symmetry analysis of molecular orbitals - initial ------------------------------------------------- Numbering of irreducible representations: 1 a' 2 a" Orbital symmetries: 1 a' 2 a' 3 a' 4 a' 5 a' 6 a" 7 a' 8 a' 9 a" 10 a' 11 a' 12 a' 13 a" 14 a' 15 a' 16 a' 17 a" 18 a' 19 a" Time after variat. SCF: 9.8 Time prior to 1st pass: 9.8 Integral file = ./methanol.aoints.0 Record size in doubles = 65536 No. of integs per rec = 43688 Max. records in memory = 7 Max. records in file = 1445 No. of bits per label = 8 No. of bits per value = 64 #quartets = 1.615D+04 #integrals = 1.566D+05 #direct = 0.0% #cached =100.0% Grid_pts file = ./methanol.gridpts.0 Record size in doubles = 12289 No. of grid_pts per rec = 3070 Max. records in memory = 38 Max. recs in file = 7711 Memory utilization after 1st SCF pass: Heap Space remaining (MW): 12.18 12179658 Stack Space remaining (MW): 13.11 13106932 convergence iter energy DeltaE RMS-Dens Diis-err time ---------------- ----- ----------------- --------- --------- --------- ------ d= 0,ls=0.0,diis 1 -115.7139925822 -1.56D+02 1.42D-03 2.06D-03 11.4 d= 0,ls=0.0,diis 2 -115.7143554372 -3.63D-04 4.03D-04 2.53D-04 12.2 d= 0,ls=0.0,diis 3 -115.7143628920 -7.45D-06 1.99D-04 2.17D-04 13.1 d= 0,ls=0.0,diis 4 -115.7143844270 -2.15D-05 4.41D-05 5.82D-06 13.9 d= 0,ls=0.0,diis 5 -115.7143849269 -5.00D-07 1.32D-05 6.07D-07 14.8 d= 0,ls=0.0,diis 6 -115.7143849899 -6.30D-08 1.94D-06 1.01D-08 15.6 Total DFT energy = -115.714384989934 One electron energy = -236.725934424241 Coulomb energy = 96.362045078626 Exchange-Corr. energy = -15.505489669003 Nuclear repulsion energy = 40.154994024684 Numeric. integr. density = 17.999998115098 Total iterative time = 5.8s DFT Final Molecular Orbital Analysis ------------------------------------ Vector 1 Occ=2.000000D+00 E=-1.914025D+01 Symmetry=a' MO Center= -1.0D-01, -7.6D-01, 2.6D-20, r^2= 1.5D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 16 0.992813 2 O s Vector 2 Occ=2.000000D+00 E=-1.022479D+01 Symmetry=a' MO Center= 3.9D-03, 6.6D-01, 7.1D-19, r^2= 2.8D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 1 0.992899 1 C s Vector 3 Occ=2.000000D+00 E=-1.008900D+00 Symmetry=a' MO Center= 6.0D-02, -5.8D-01, 7.5D-18, r^2= 6.0D-01 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 -0.451729 2 O s 21 -0.427282 2 O s 16 0.202578 2 O s Vector 4 Occ=2.000000D+00 E=-6.780486D-01 Symmetry=a' MO Center= 1.6D-02, 4.8D-01, -2.2D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 2 -0.361835 1 C s 6 -0.331598 1 C s 1 0.180187 1 C s 19 -0.179670 2 O py 21 0.173229 2 O s Vector 5 Occ=2.000000D+00 E=-5.012013D-01 Symmetry=a' MO Center= 1.4D-01, -1.2D-01, -2.5D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 0.329065 2 O px 19 -0.269934 2 O py 4 0.231701 1 C py 3 0.214290 1 C px 37 0.207353 6 H s 22 0.174129 2 O px Vector 6 Occ=2.000000D+00 E=-4.339205D-01 Symmetry=a" MO Center= 1.7D-01, 5.4D-01, -2.8D-17, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 5 -0.425024 1 C pz 20 -0.251440 2 O pz 31 0.203500 3 H s 33 -0.203500 4 H s 9 -0.184340 1 C pz 32 0.164382 3 H s 34 -0.164382 4 H s 24 -0.158823 2 O pz Vector 7 Occ=2.000000D+00 E=-4.184000D-01 Symmetry=a' MO Center= -2.9D-01, 2.3D-01, 9.3D-18, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 19 0.347131 2 O py 3 0.315092 1 C px 4 -0.267855 1 C py 35 -0.236763 5 H s 23 0.202158 2 O py 36 -0.177603 5 H s 7 0.165971 1 C px Vector 8 Occ=2.000000D+00 E=-3.310058D-01 Symmetry=a' MO Center= -1.6D-01, -2.1D-01, 1.4D-16, r^2= 1.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 -0.415246 2 O px 21 0.330230 2 O s 22 -0.280607 2 O px 3 0.265838 1 C px 19 -0.215387 2 O py 36 -0.174051 5 H s 35 -0.173087 5 H s 23 -0.155226 2 O py 37 -0.152145 6 H s Vector 9 Occ=2.000000D+00 E=-2.645097D-01 Symmetry=a" MO Center= 1.1D-02, -3.9D-01, 2.6D-18, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 20 -0.597332 2 O pz 24 -0.464695 2 O pz 32 -0.190914 3 H s 34 0.190914 4 H s 5 0.176309 1 C pz Vector 10 Occ=0.000000D+00 E= 7.462155D-02 Symmetry=a' MO Center= 7.6D-01, -6.3D-01, 2.2D-16, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 38 1.218112 6 H s 21 -1.117721 2 O s 6 -0.628259 1 C s 8 -0.567925 1 C py 22 -0.458966 2 O px 34 0.458085 4 H s 32 0.458085 3 H s 36 0.309283 5 H s 18 -0.258249 2 O px 4 -0.199912 1 C py Vector 11 Occ=0.000000D+00 E= 1.307095D-01 Symmetry=a' MO Center= 1.3D-01, 9.1D-01, 9.9D-16, r^2= 3.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 -2.400725 1 C s 34 1.103594 4 H s 32 1.103594 3 H s 36 1.040952 5 H s 21 0.709071 2 O s 38 -0.507239 6 H s 22 0.216152 2 O px 23 0.214695 2 O py 2 -0.211480 1 C s 8 -0.170655 1 C py Vector 12 Occ=0.000000D+00 E= 1.664144D-01 Symmetry=a' MO Center= -4.6D-01, 9.1D-01, 5.3D-15, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 -1.759039 5 H s 7 -1.228968 1 C px 34 0.700928 4 H s 32 0.700928 3 H s 8 0.475440 1 C py 3 -0.406187 1 C px 38 0.312048 6 H s 23 0.258185 2 O py 19 0.151717 2 O py Vector 13 Occ=0.000000D+00 E= 1.749111D-01 Symmetry=a" MO Center= 4.9D-01, 1.0D+00, -7.4D-15, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 32 -1.520375 3 H s 34 1.520375 4 H s 9 -1.319012 1 C pz 5 -0.460645 1 C pz 24 0.236232 2 O pz Vector 14 Occ=0.000000D+00 E= 2.041873D-01 Symmetry=a' MO Center= 6.7D-02, 2.6D-01, 1.8D-18, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 -1.271875 1 C py 38 -0.858457 6 H s 23 -0.827370 2 O py 6 0.705155 1 C s 21 -0.653318 2 O s 7 -0.590042 1 C px 36 -0.538017 5 H s 32 0.453221 3 H s 34 0.453221 4 H s 19 -0.373361 2 O py Vector 15 Occ=0.000000D+00 E= 5.329332D-01 Symmetry=a' MO Center= -6.7D-02, 6.0D-01, -1.4D-18, r^2= 1.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.425069 1 C py 4 -0.926509 1 C py 21 0.810651 2 O s 6 -0.453775 1 C s 7 0.414020 1 C px 2 0.362845 1 C s 19 -0.288806 2 O py 38 0.243069 6 H s 23 0.227881 2 O py 3 -0.190186 1 C px Vector 16 Occ=0.000000D+00 E= 5.671013D-01 Symmetry=a' MO Center= 2.9D-01, 5.7D-01, -2.0D-16, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 7 -1.655927 1 C px 3 0.728200 1 C px 35 -0.475730 5 H s 36 -0.451140 5 H s 8 0.436130 1 C py 4 -0.293368 1 C py 21 0.230182 2 O s 38 0.191539 6 H s 33 0.186901 4 H s 31 0.186901 3 H s Vector 17 Occ=0.000000D+00 E= 5.770966D-01 Symmetry=a" MO Center= -2.4D-01, 5.7D-01, 2.3D-16, r^2= 2.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 9 1.730887 1 C pz 5 -0.735914 1 C pz 32 0.405851 3 H s 34 -0.405851 4 H s 31 0.398354 3 H s 33 -0.398354 4 H s 20 -0.232030 2 O pz 12 -0.180930 1 C dxz 24 -0.163773 2 O pz Vector 18 Occ=0.000000D+00 E= 7.861107D-01 Symmetry=a' MO Center= 2.4D-01, -4.0D-01, 5.7D-16, r^2= 2.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 0.957539 5 H s 7 0.940089 1 C px 37 0.896265 6 H s 38 -0.650587 6 H s 34 -0.507359 4 H s 32 -0.507359 3 H s 3 -0.462408 1 C px 23 0.374236 2 O py 33 0.338965 4 H s 31 0.338965 3 H s Vector 19 Occ=0.000000D+00 E= 8.490646D-01 Symmetry=a" MO Center= 3.9D-01, 8.9D-01, 1.5D-16, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 32 1.455660 3 H s 34 -1.455660 4 H s 9 1.436313 1 C pz 5 -0.832056 1 C pz 31 -0.676623 3 H s 33 0.676623 4 H s 24 -0.326446 2 O pz 14 0.231353 1 C dyz 12 0.230403 1 C dxz 20 0.221709 2 O pz center of mass -------------- x = -0.04660877 y = -0.13199547 z = -0.00000000 moments of inertia (a.u.) ------------------ 73.057132012162 -1.281337327030 -0.000000000000 -1.281337327030 14.259566811712 0.000000000000 -0.000000000000 0.000000000000 75.824099434979 Multipole analysis of the density --------------------------------- L x y z total alpha beta nuclear - - - - ----- ----- ---- ------- 0 0 0 0 -0.000000 -9.000000 -9.000000 18.000000 1 1 0 0 0.591955 0.285562 0.285562 0.020831 1 0 1 0 0.317203 0.273412 0.273412 -0.229620 1 0 0 1 -0.000000 -0.000000 -0.000000 0.000000 2 2 0 0 -8.817519 -8.514938 -8.514938 8.212357 2 1 1 0 -1.640708 -0.415956 -0.415956 -0.808796 2 1 0 1 0.000000 0.000000 0.000000 0.000000 2 0 2 0 -9.472047 -25.709133 -25.709133 41.946219 2 0 1 1 -0.000000 0.000000 0.000000 -0.000000 2 0 0 2 -10.095499 -7.898592 -7.898592 5.701684 Parallel integral file used 4 records with 0 large values Line search: step= 1.00 grad=-2.1D-03 hess= 1.1D-03 energy= -115.714385 mode=accept new step= 1.00 predicted energy= -115.714385 -------- Step 1 -------- Geometry "geometry" -> "geometry" --------------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 0.00391243 0.65819533 0.00000000 2 O 8.0000 -0.10391736 -0.76053606 0.00000000 3 H 1.0000 0.51892065 1.04340687 -0.89348597 4 H 1.0000 0.51892065 1.04340687 0.89348597 5 H 1.0000 -1.01796028 1.04492703 0.00000000 6 H 1.0000 0.79900675 -1.11813401 0.00000000 Atomic Mass ----------- C 12.000000 O 15.994910 H 1.007825 Effective nuclear repulsion energy (a.u.) 40.1549940247 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0208313299 -0.2296201271 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 5 Symmetry unique atoms 1 2 3 5 6 NWChem DFT Module ----------------- The DFT is already converged Total DFT energy = -115.714384989934 NWChem DFT Gradient Module -------------------------- charge = 0.00 wavefunction = closed shell Using symmetry DFT ENERGY GRADIENTS atom coordinates gradient x y z x y z 1 C 0.007393 1.243809 0.000000 0.000491 0.002795 0.000000 2 O -0.196375 -1.437205 0.000000 -0.003049 -0.001513 0.000000 3 H 0.980618 1.971753 -1.688444 0.000072 -0.000133 0.000045 4 H 0.980618 1.971753 1.688444 0.000072 -0.000133 -0.000045 5 H -1.923666 1.974626 0.000000 0.000191 -0.000712 0.000000 6 H 1.509904 -2.112967 0.000000 0.002223 -0.000303 0.000000 ---------------------------------------- | Time | 1-e(secs) | 2-e(secs) | ---------------------------------------- | CPU | 0.00 | 1.49 | ---------------------------------------- | WALL | 0.01 | 3.95 | ---------------------------------------- Step Energy Delta E Gmax Grms Xrms Xmax Walltime ---- ---------------- -------- -------- -------- -------- -------- -------- @ 1 -115.71438499 -1.0D-03 0.00218 0.00077 0.03637 0.07927 43.8 Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value Gradient ----------- -------- ----- ----- ----- ----- ----- ---------- ---------- 1 Stretch 1 2 1.42282 0.00187 2 Stretch 1 3 1.10088 -0.00005 3 Stretch 1 4 1.10088 -0.00005 4 Stretch 1 5 1.09260 -0.00043 5 Stretch 2 6 0.97116 0.00218 6 Bend 1 2 6 107.25939 -0.00052 7 Bend 2 1 3 112.60398 -0.00000 8 Bend 2 1 4 112.60398 -0.00000 9 Bend 2 1 5 106.38297 -0.00044 10 Bend 3 1 4 108.50708 0.00005 11 Bend 3 1 5 108.28096 0.00020 12 Bend 4 1 5 108.28096 0.00020 13 Torsion 3 1 2 6 61.53913 0.00003 14 Torsion 4 1 2 6 -61.53913 -0.00003 15 Torsion 5 1 2 6 180.00000 -0.00000 NWChem DFT Module ----------------- Caching 1-el integrals General Information ------------------- SCF calculation type: DFT Wavefunction type: closed shell. No. of atoms : 6 No. of electrons : 18 Alpha electrons : 9 Beta electrons : 9 Charge : 0 Spin multiplicity: 1 Use of symmetry is: on ; symmetry adaption is: on Maximum number of iterations: 30 AO basis - number of functions: 38 number of shells: 20 Convergence on energy requested: 1.00D-06 Convergence on density requested: 1.00D-05 Convergence on gradient requested: 5.00D-04 XC Information -------------- B3LYP Method XC Potential Hartree-Fock (Exact) Exchange 0.200 Slater Exchange Functional 0.800 local Becke 1988 Exchange Functional 0.720 non-local Lee-Yang-Parr Correlation Functional 0.810 VWN I RPA Correlation Functional 0.190 local Grid Information ---------------- Grid used for XC integration: medium Radial quadrature: Mura-Knowles Angular quadrature: Lebedev. Tag B.-S. Rad. Rad. Pts. Rad. Cut. Ang. Pts. --- ---------- --------- --------- --------- C 0.70 49 7.0 434 O 0.60 49 7.0 434 H 0.35 45 8.0 434 Grid pruning is: on Number of quadrature shells: 233 Spatial weights used: Erf1 Convergence Information ----------------------- Convergence aids based upon iterative change in total energy or number of iterations. Levelshifting, if invoked, occurs when the HOMO/LUMO gap drops below (HL_TOL): 1.00D-02 DIIS, if invoked, will attempt to extrapolate using up to (NFOCK): 10 stored Fock matrices. Damping( 0%) Levelshifting(0.5) DIIS --------------- ------------------- --------------- dE on: start ASAP start dE off: 2 iters 30 iters 30 iters Screening Tolerance Information ------------------------------- Density screening/tol_rho: 1.00D-10 AO Gaussian exp screening on grid/accAOfunc: 14 CD Gaussian exp screening on grid/accCDfunc: 20 XC Gaussian exp screening on grid/accXCfunc: 20 Schwarz screening/accCoul: 1.00D-08 Loading old vectors from job with title : Symmetry analysis of molecular orbitals - initial ------------------------------------------------- Numbering of irreducible representations: 1 a' 2 a" Orbital symmetries: 1 a' 2 a' 3 a' 4 a' 5 a' 6 a" 7 a' 8 a' 9 a" 10 a' 11 a' 12 a' 13 a" 14 a' 15 a' 16 a' 17 a" 18 a' 19 a" Time after variat. SCF: 18.6 Time prior to 1st pass: 18.6 Integral file = ./methanol.aoints.0 Record size in doubles = 65536 No. of integs per rec = 43688 Max. records in memory = 7 Max. records in file = 1445 No. of bits per label = 8 No. of bits per value = 64 #quartets = 1.615D+04 #integrals = 1.566D+05 #direct = 0.0% #cached =100.0% Grid_pts file = ./methanol.gridpts.0 Record size in doubles = 12289 No. of grid_pts per rec = 3070 Max. records in memory = 38 Max. recs in file = 7711 Memory utilization after 1st SCF pass: Heap Space remaining (MW): 12.18 12179658 Stack Space remaining (MW): 13.11 13106932 convergence iter energy DeltaE RMS-Dens Diis-err time ---------------- ----- ----------------- --------- --------- --------- ------ d= 0,ls=0.0,diis 1 -115.7143923527 -1.56D+02 2.67D-04 6.23D-05 20.1 d= 0,ls=0.0,diis 2 -115.7144026437 -1.03D-05 9.52D-05 2.07D-05 20.9 d= 0,ls=0.0,diis 3 -115.7144033740 -7.30D-07 4.88D-05 1.20D-05 21.8 d= 0,ls=0.0,diis 4 -115.7144044594 -1.09D-06 2.24D-06 1.60D-08 22.6 d= 0,ls=0.0,diis 5 -115.7144044611 -1.71D-09 5.13D-07 3.33D-10 23.5 Total DFT energy = -115.714404461086 One electron energy = -236.844561308412 Coulomb energy = 96.420354135790 Exchange-Corr. energy = -15.507861343271 Nuclear repulsion energy = 40.217664054807 Numeric. integr. density = 17.999998300266 Total iterative time = 4.9s DFT Final Molecular Orbital Analysis ------------------------------------ Vector 1 Occ=2.000000D+00 E=-1.914006D+01 Symmetry=a' MO Center= -1.0D-01, -7.6D-01, 3.1D-19, r^2= 1.5D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 16 -0.992809 2 O s Vector 2 Occ=2.000000D+00 E=-1.022470D+01 Symmetry=a' MO Center= 4.1D-03, 6.6D-01, 8.7D-19, r^2= 2.8D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 1 -0.992898 1 C s Vector 3 Occ=2.000000D+00 E=-1.010446D+00 Symmetry=a' MO Center= 6.3D-02, -5.8D-01, 6.6D-19, r^2= 6.0D-01 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 -0.451695 2 O s 21 -0.426171 2 O s 16 0.202537 2 O s Vector 4 Occ=2.000000D+00 E=-6.782150D-01 Symmetry=a' MO Center= 1.6D-02, 4.7D-01, -9.6D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 2 0.361344 1 C s 6 0.330812 1 C s 19 0.182112 2 O py 1 -0.179944 1 C s 21 -0.172352 2 O s Vector 5 Occ=2.000000D+00 E=-5.022607D-01 Symmetry=a' MO Center= 1.4D-01, -1.2D-01, 1.7D-16, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 -0.328054 2 O px 19 0.272298 2 O py 4 -0.235462 1 C py 3 -0.210808 1 C px 37 -0.207486 6 H s 22 -0.173187 2 O px Vector 6 Occ=2.000000D+00 E=-4.340756D-01 Symmetry=a" MO Center= 1.7D-01, 5.3D-01, -2.9D-17, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 5 0.424457 1 C pz 20 0.253803 2 O pz 31 -0.202787 3 H s 33 0.202787 4 H s 9 0.184112 1 C pz 34 0.163727 4 H s 32 -0.163727 3 H s 24 0.160317 2 O pz Vector 7 Occ=2.000000D+00 E=-4.190494D-01 Symmetry=a' MO Center= -2.9D-01, 2.3D-01, -9.4D-19, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 19 -0.344933 2 O py 3 -0.316412 1 C px 4 0.265821 1 C py 35 0.236496 5 H s 23 -0.200865 2 O py 36 0.177153 5 H s 7 -0.166676 1 C px Vector 8 Occ=2.000000D+00 E=-3.303515D-01 Symmetry=a' MO Center= -1.6D-01, -2.0D-01, -5.0D-17, r^2= 1.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 -0.415127 2 O px 21 0.329055 2 O s 22 -0.280923 2 O px 3 0.266814 1 C px 19 -0.214475 2 O py 36 -0.175847 5 H s 35 -0.174364 5 H s 23 -0.155030 2 O py 37 -0.151561 6 H s Vector 9 Occ=2.000000D+00 E=-2.645230D-01 Symmetry=a" MO Center= 1.5D-02, -3.8D-01, 1.3D-16, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 20 0.596271 2 O pz 24 0.464203 2 O pz 34 -0.192173 4 H s 32 0.192173 3 H s 5 -0.177484 1 C pz Vector 10 Occ=0.000000D+00 E= 7.525184D-02 Symmetry=a' MO Center= 7.6D-01, -6.4D-01, -1.4D-16, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 38 -1.222387 6 H s 21 1.122607 2 O s 6 0.632182 1 C s 8 0.568946 1 C py 32 -0.462130 3 H s 34 -0.462130 4 H s 22 0.457592 2 O px 36 -0.307801 5 H s 18 0.256465 2 O px 4 0.199257 1 C py Vector 11 Occ=0.000000D+00 E= 1.308224D-01 Symmetry=a' MO Center= 1.2D-01, 9.1D-01, 8.8D-18, r^2= 3.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 2.396816 1 C s 32 -1.097945 3 H s 34 -1.097945 4 H s 36 -1.053416 5 H s 21 -0.711456 2 O s 38 0.516898 6 H s 22 -0.216680 2 O px 2 0.210630 1 C s 23 -0.208750 2 O py 8 0.179984 1 C py Vector 12 Occ=0.000000D+00 E= 1.666040D-01 Symmetry=a' MO Center= -4.5D-01, 9.2D-01, 1.8D-14, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 -1.754692 5 H s 7 -1.235204 1 C px 34 0.715307 4 H s 32 0.715307 3 H s 8 0.461035 1 C py 3 -0.408818 1 C px 38 0.291059 6 H s 23 0.250423 2 O py Vector 13 Occ=0.000000D+00 E= 1.751322D-01 Symmetry=a" MO Center= 4.9D-01, 1.0D+00, -1.8D-14, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 32 1.519564 3 H s 34 -1.519564 4 H s 9 1.318688 1 C pz 5 0.461106 1 C pz 24 -0.238112 2 O pz Vector 14 Occ=0.000000D+00 E= 2.058142D-01 Symmetry=a' MO Center= 7.1D-02, 2.6D-01, 4.9D-17, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.291274 1 C py 38 0.865745 6 H s 23 0.837368 2 O py 6 -0.728097 1 C s 21 0.670833 2 O s 7 0.571446 1 C px 36 0.514869 5 H s 34 -0.438556 4 H s 32 -0.438556 3 H s 19 0.374247 2 O py Vector 15 Occ=0.000000D+00 E= 5.341404D-01 Symmetry=a' MO Center= -6.8D-02, 5.9D-01, -3.6D-16, r^2= 1.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.417995 1 C py 4 -0.927768 1 C py 21 0.806709 2 O s 6 -0.452208 1 C s 7 0.414311 1 C px 2 0.366092 1 C s 19 -0.291326 2 O py 38 0.238002 6 H s 23 0.220800 2 O py 3 -0.190691 1 C px Vector 16 Occ=0.000000D+00 E= 5.672962D-01 Symmetry=a' MO Center= 3.0D-01, 5.7D-01, 3.4D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 7 -1.653573 1 C px 3 0.728412 1 C px 35 -0.475017 5 H s 36 -0.448538 5 H s 8 0.436781 1 C py 4 -0.294263 1 C py 21 0.230711 2 O s 38 0.190906 6 H s 31 0.187512 3 H s 33 0.187512 4 H s Vector 17 Occ=0.000000D+00 E= 5.774327D-01 Symmetry=a" MO Center= -2.4D-01, 5.7D-01, -3.2D-15, r^2= 2.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 9 1.733376 1 C pz 5 -0.736620 1 C pz 34 -0.407601 4 H s 32 0.407601 3 H s 33 -0.397904 4 H s 31 0.397904 3 H s 20 -0.231964 2 O pz 12 -0.180635 1 C dxz 24 -0.165212 2 O pz Vector 18 Occ=0.000000D+00 E= 7.864704D-01 Symmetry=a' MO Center= 2.2D-01, -3.8D-01, 7.1D-17, r^2= 2.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 -0.978437 5 H s 7 -0.953774 1 C px 37 -0.889090 6 H s 38 0.638736 6 H s 32 0.514520 3 H s 34 0.514520 4 H s 3 0.469101 1 C px 23 -0.375012 2 O py 31 -0.341627 3 H s 33 -0.341627 4 H s Vector 19 Occ=0.000000D+00 E= 8.488412D-01 Symmetry=a" MO Center= 3.9D-01, 8.9D-01, -2.0D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 32 -1.455364 3 H s 34 1.455364 4 H s 9 -1.433725 1 C pz 5 0.830613 1 C pz 33 -0.677400 4 H s 31 0.677400 3 H s 24 0.324188 2 O pz 14 -0.231876 1 C dyz 12 -0.230124 1 C dxz 20 -0.220397 2 O pz center of mass -------------- x = -0.04426967 y = -0.13150087 z = -0.00000000 moments of inertia (a.u.) ------------------ 72.809528917171 -1.172688925531 0.000000000000 -1.172688925531 14.220846791704 0.000000000000 0.000000000000 0.000000000000 75.540362268900 Multipole analysis of the density --------------------------------- L x y z total alpha beta nuclear - - - - ----- ----- ---- ------- 0 0 0 0 -0.000000 -9.000000 -9.000000 18.000000 1 1 0 0 0.590394 0.267306 0.267306 0.055782 1 0 1 0 0.310260 0.266006 0.266006 -0.221753 1 0 0 1 -0.000000 -0.000000 -0.000000 0.000000 2 2 0 0 -8.822150 -8.502602 -8.502602 8.183055 2 1 1 0 -1.643843 -0.387184 -0.387184 -0.869476 2 1 0 1 -0.000000 -0.000000 -0.000000 -0.000000 2 0 2 0 -9.460412 -25.645622 -25.645622 41.830831 2 0 1 1 -0.000000 -0.000000 -0.000000 -0.000000 2 0 0 2 -10.096733 -7.898567 -7.898567 5.700401 Parallel integral file used 4 records with 0 large values Line search: step= 1.00 grad=-3.6D-05 hess= 1.7D-05 energy= -115.714404 mode=accept new step= 1.00 predicted energy= -115.714404 -------- Step 2 -------- Geometry "geometry" -> "geometry" --------------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 0.00406566 0.65634472 0.00000000 2 O 8.0000 -0.10138466 -0.75861945 0.00000000 3 H 1.0000 0.51827842 1.04380676 -0.89338545 4 H 1.0000 0.51827842 1.04380676 0.89338545 5 H 1.0000 -1.01782717 1.04538241 0.00000000 6 H 1.0000 0.79747215 -1.11945516 0.00000000 Atomic Mass ----------- C 12.000000 O 15.994910 H 1.007825 Effective nuclear repulsion energy (a.u.) 40.2176640548 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0557818676 -0.2217527462 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 5 Symmetry unique atoms 1 2 3 5 6 NWChem DFT Module ----------------- The DFT is already converged Total DFT energy = -115.714404461086 NWChem DFT Gradient Module -------------------------- charge = 0.00 wavefunction = closed shell Using symmetry DFT ENERGY GRADIENTS atom coordinates gradient x y z x y z 1 C 0.007683 1.240312 0.000000 0.000274 0.000342 0.000000 2 O -0.191589 -1.433583 0.000000 -0.000118 -0.000085 0.000000 3 H 0.979404 1.972509 -1.688254 0.000019 -0.000083 -0.000015 4 H 0.979404 1.972509 1.688254 0.000019 -0.000083 0.000015 5 H -1.923414 1.975486 0.000000 -0.000115 -0.000237 0.000000 6 H 1.507004 -2.115464 0.000000 -0.000078 0.000147 0.000000 ---------------------------------------- | Time | 1-e(secs) | 2-e(secs) | ---------------------------------------- | CPU | 0.00 | 1.48 | ---------------------------------------- | WALL | 0.01 | 2.50 | ---------------------------------------- Step Energy Delta E Gmax Grms Xrms Xmax Walltime ---- ---------------- -------- -------- -------- -------- -------- -------- @ 2 -115.71440446 -1.9D-05 0.00019 0.00008 0.00194 0.00478 62.0 ok ok Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value Gradient ----------- -------- ----- ----- ----- ----- ----- ---------- ---------- 1 Stretch 1 2 1.41889 -0.00005 2 Stretch 1 3 1.10122 -0.00001 3 Stretch 1 4 1.10122 -0.00001 4 Stretch 1 5 1.09344 0.00002 5 Stretch 2 6 0.96858 -0.00013 6 Bend 1 2 6 107.61033 -0.00010 7 Bend 2 1 3 112.67969 -0.00002 8 Bend 2 1 4 112.67969 -0.00002 9 Bend 2 1 5 106.57989 -0.00019 10 Bend 3 1 4 108.44058 0.00005 11 Bend 3 1 5 108.13215 0.00009 12 Bend 4 1 5 108.13215 0.00009 13 Torsion 3 1 2 6 61.55321 0.00002 14 Torsion 4 1 2 6 -61.55321 -0.00002 15 Torsion 5 1 2 6 180.00000 0.00000 NWChem DFT Module ----------------- Caching 1-el integrals General Information ------------------- SCF calculation type: DFT Wavefunction type: closed shell. No. of atoms : 6 No. of electrons : 18 Alpha electrons : 9 Beta electrons : 9 Charge : 0 Spin multiplicity: 1 Use of symmetry is: on ; symmetry adaption is: on Maximum number of iterations: 30 AO basis - number of functions: 38 number of shells: 20 Convergence on energy requested: 1.00D-06 Convergence on density requested: 1.00D-05 Convergence on gradient requested: 5.00D-04 XC Information -------------- B3LYP Method XC Potential Hartree-Fock (Exact) Exchange 0.200 Slater Exchange Functional 0.800 local Becke 1988 Exchange Functional 0.720 non-local Lee-Yang-Parr Correlation Functional 0.810 VWN I RPA Correlation Functional 0.190 local Grid Information ---------------- Grid used for XC integration: medium Radial quadrature: Mura-Knowles Angular quadrature: Lebedev. Tag B.-S. Rad. Rad. Pts. Rad. Cut. Ang. Pts. --- ---------- --------- --------- --------- C 0.70 49 7.0 434 O 0.60 49 7.0 434 H 0.35 45 8.0 434 Grid pruning is: on Number of quadrature shells: 233 Spatial weights used: Erf1 Convergence Information ----------------------- Convergence aids based upon iterative change in total energy or number of iterations. Levelshifting, if invoked, occurs when the HOMO/LUMO gap drops below (HL_TOL): 1.00D-02 DIIS, if invoked, will attempt to extrapolate using up to (NFOCK): 10 stored Fock matrices. Damping( 0%) Levelshifting(0.5) DIIS --------------- ------------------- --------------- dE on: start ASAP start dE off: 2 iters 30 iters 30 iters Screening Tolerance Information ------------------------------- Density screening/tol_rho: 1.00D-10 AO Gaussian exp screening on grid/accAOfunc: 14 CD Gaussian exp screening on grid/accCDfunc: 20 XC Gaussian exp screening on grid/accXCfunc: 20 Schwarz screening/accCoul: 1.00D-08 Loading old vectors from job with title : Symmetry analysis of molecular orbitals - initial ------------------------------------------------- Numbering of irreducible representations: 1 a' 2 a" Orbital symmetries: 1 a' 2 a' 3 a' 4 a' 5 a' 6 a" 7 a' 8 a' 9 a" 10 a' 11 a' 12 a' 13 a" 14 a' 15 a' 16 a' 17 a" 18 a' 19 a" Time after variat. SCF: 26.4 Time prior to 1st pass: 26.4 Integral file = ./methanol.aoints.0 Record size in doubles = 65536 No. of integs per rec = 43688 Max. records in memory = 7 Max. records in file = 1445 No. of bits per label = 8 No. of bits per value = 64 #quartets = 1.615D+04 #integrals = 1.566D+05 #direct = 0.0% #cached =100.0% Grid_pts file = ./methanol.gridpts.0 Record size in doubles = 12289 No. of grid_pts per rec = 3070 Max. records in memory = 38 Max. recs in file = 7711 Memory utilization after 1st SCF pass: Heap Space remaining (MW): 12.18 12179658 Stack Space remaining (MW): 13.11 13106932 convergence iter energy DeltaE RMS-Dens Diis-err time ---------------- ----- ----------------- --------- --------- --------- ------ d= 0,ls=0.0,diis 1 -115.7144048524 -1.56D+02 3.93D-05 1.55D-06 28.0 d= 0,ls=0.0,diis 2 -115.7144051139 -2.61D-07 7.67D-06 1.01D-07 28.8 Total DFT energy = -115.714405113942 One electron energy = -236.841987207239 Coulomb energy = 96.418757979457 Exchange-Corr. energy = -15.507742382416 Nuclear repulsion energy = 40.216566496255 Numeric. integr. density = 17.999998361589 Total iterative time = 2.4s DFT Final Molecular Orbital Analysis ------------------------------------ Vector 1 Occ=2.000000D+00 E=-1.914008D+01 Symmetry=a' MO Center= -1.0D-01, -7.6D-01, -6.2D-20, r^2= 1.5D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 16 0.992809 2 O s Vector 2 Occ=2.000000D+00 E=-1.022479D+01 Symmetry=a' MO Center= 3.7D-03, 6.6D-01, -6.0D-20, r^2= 2.8D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 1 -0.992898 1 C s Vector 3 Occ=2.000000D+00 E=-1.010443D+00 Symmetry=a' MO Center= 6.3D-02, -5.8D-01, 4.3D-18, r^2= 6.0D-01 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 0.451727 2 O s 21 0.426201 2 O s 16 -0.202549 2 O s Vector 4 Occ=2.000000D+00 E=-6.782755D-01 Symmetry=a' MO Center= 1.6D-02, 4.7D-01, 5.2D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 2 -0.361328 1 C s 6 -0.330757 1 C s 19 -0.182140 2 O py 1 0.179930 1 C s 21 0.172284 2 O s Vector 5 Occ=2.000000D+00 E=-5.023072D-01 Symmetry=a' MO Center= 1.4D-01, -1.2D-01, -6.2D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 0.327886 2 O px 19 -0.273058 2 O py 4 0.236248 1 C py 3 0.209915 1 C px 37 0.207654 6 H s 22 0.173079 2 O px Vector 6 Occ=2.000000D+00 E=-4.340217D-01 Symmetry=a" MO Center= 1.7D-01, 5.3D-01, -4.2D-17, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 5 0.424441 1 C pz 20 0.254003 2 O pz 33 0.202710 4 H s 31 -0.202710 3 H s 9 0.184132 1 C pz 32 -0.163697 3 H s 34 0.163697 4 H s 24 0.160444 2 O pz Vector 7 Occ=2.000000D+00 E=-4.191933D-01 Symmetry=a' MO Center= -2.9D-01, 2.4D-01, -1.6D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 19 -0.344109 2 O py 3 -0.317112 1 C px 4 0.265089 1 C py 35 0.236608 5 H s 23 -0.200403 2 O py 36 0.177159 5 H s 7 -0.166950 1 C px Vector 8 Occ=2.000000D+00 E=-3.302196D-01 Symmetry=a' MO Center= -1.6D-01, -2.0D-01, 4.5D-17, r^2= 1.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 -0.415106 2 O px 21 0.328802 2 O s 22 -0.280987 2 O px 3 0.266715 1 C px 19 -0.214760 2 O py 36 -0.176057 5 H s 35 -0.174301 5 H s 23 -0.155265 2 O py 37 -0.151412 6 H s Vector 9 Occ=2.000000D+00 E=-2.645229D-01 Symmetry=a" MO Center= 1.5D-02, -3.8D-01, -8.3D-17, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 20 0.596179 2 O pz 24 0.464151 2 O pz 32 0.192274 3 H s 34 -0.192274 4 H s 5 -0.177589 1 C pz Vector 10 Occ=0.000000D+00 E= 7.523274D-02 Symmetry=a' MO Center= 7.7D-01, -6.4D-01, 1.5D-17, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 38 1.223507 6 H s 21 -1.123907 2 O s 6 -0.628207 1 C s 8 -0.568654 1 C py 34 0.461256 4 H s 32 0.461256 3 H s 22 -0.457654 2 O px 36 0.304485 5 H s 18 -0.256626 2 O px 4 -0.199031 1 C py Vector 11 Occ=0.000000D+00 E= 1.307235D-01 Symmetry=a' MO Center= 1.2D-01, 9.1D-01, 3.3D-15, r^2= 3.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 -2.397942 1 C s 34 1.097406 4 H s 32 1.097406 3 H s 36 1.057029 5 H s 21 0.708856 2 O s 38 -0.514411 6 H s 22 0.215171 2 O px 2 -0.210700 1 C s 23 0.208444 2 O py 8 -0.182748 1 C py Vector 12 Occ=0.000000D+00 E= 1.666894D-01 Symmetry=a' MO Center= -4.5D-01, 9.2D-01, 1.5D-14, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 1.754478 5 H s 7 1.235795 1 C px 34 -0.717198 4 H s 32 -0.717198 3 H s 8 -0.460103 1 C py 3 0.409238 1 C px 38 -0.286031 6 H s 23 -0.249491 2 O py 21 -0.150593 2 O s Vector 13 Occ=0.000000D+00 E= 1.751458D-01 Symmetry=a" MO Center= 4.9D-01, 1.0D+00, -1.7D-14, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 32 1.519156 3 H s 34 -1.519156 4 H s 9 1.318141 1 C pz 5 0.461196 1 C pz 24 -0.238223 2 O pz Vector 14 Occ=0.000000D+00 E= 2.058690D-01 Symmetry=a' MO Center= 7.2D-02, 2.6D-01, -2.5D-16, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.293163 1 C py 38 0.866576 6 H s 23 0.838106 2 O py 6 -0.726865 1 C s 21 0.671725 2 O s 7 0.567694 1 C px 36 0.508834 5 H s 34 -0.437636 4 H s 32 -0.437636 3 H s 19 0.374476 2 O py Vector 15 Occ=0.000000D+00 E= 5.342078D-01 Symmetry=a' MO Center= -6.9D-02, 5.9D-01, 1.2D-16, r^2= 1.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 -1.418514 1 C py 4 0.928239 1 C py 21 -0.806841 2 O s 6 0.451940 1 C s 7 -0.411815 1 C px 2 -0.366862 1 C s 19 0.291500 2 O py 38 -0.237326 6 H s 23 -0.220554 2 O py 3 0.189876 1 C px Vector 16 Occ=0.000000D+00 E= 5.672287D-01 Symmetry=a' MO Center= 3.0D-01, 5.6D-01, -3.0D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 7 -1.651961 1 C px 3 0.728156 1 C px 35 -0.475325 5 H s 36 -0.446971 5 H s 8 0.436152 1 C py 4 -0.292868 1 C py 21 0.231319 2 O s 38 0.188987 6 H s 33 0.188028 4 H s 31 0.188028 3 H s Vector 17 Occ=0.000000D+00 E= 5.774100D-01 Symmetry=a" MO Center= -2.4D-01, 5.7D-01, 2.9D-15, r^2= 2.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 9 -1.732794 1 C pz 5 0.736617 1 C pz 32 -0.407106 3 H s 34 0.407106 4 H s 31 -0.397910 3 H s 33 0.397910 4 H s 20 0.231954 2 O pz 12 0.180524 1 C dxz 24 0.165218 2 O pz Vector 18 Occ=0.000000D+00 E= 7.863200D-01 Symmetry=a' MO Center= 2.2D-01, -3.8D-01, -1.1D-16, r^2= 2.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 0.982040 5 H s 7 0.957264 1 C px 37 0.888795 6 H s 38 -0.639738 6 H s 34 -0.514668 4 H s 32 -0.514668 3 H s 3 -0.470382 1 C px 23 0.374452 2 O py 31 0.340613 3 H s 33 0.340613 4 H s Vector 19 Occ=0.000000D+00 E= 8.487724D-01 Symmetry=a" MO Center= 3.9D-01, 8.9D-01, -3.8D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 32 1.455511 3 H s 34 -1.455511 4 H s 9 1.433493 1 C pz 5 -0.830466 1 C pz 31 -0.677470 3 H s 33 0.677470 4 H s 24 -0.323816 2 O pz 14 0.232086 1 C dyz 12 0.229960 1 C dxz 20 0.220032 2 O pz center of mass -------------- x = -0.04401543 y = -0.13199532 z = 0.00000000 moments of inertia (a.u.) ------------------ 72.825289368469 -1.132754759346 0.000000000000 -1.132754759346 14.210228162032 0.000000000000 0.000000000000 0.000000000000 75.550408511139 Multipole analysis of the density --------------------------------- L x y z total alpha beta nuclear - - - - ----- ----- ---- ------- 0 0 0 0 -0.000000 -9.000000 -9.000000 18.000000 1 1 0 0 0.590093 0.265213 0.265213 0.059667 1 0 1 0 0.309672 0.269360 0.269360 -0.229048 1 0 0 1 -0.000000 -0.000000 -0.000000 0.000000 2 2 0 0 -8.822623 -8.499952 -8.499952 8.177281 2 1 1 0 -1.646621 -0.376068 -0.376068 -0.894485 2 1 0 1 0.000000 0.000000 0.000000 0.000000 2 0 2 0 -9.455160 -25.653924 -25.653924 41.852688 2 0 1 1 -0.000000 -0.000000 -0.000000 -0.000000 2 0 0 2 -10.097818 -7.897893 -7.897893 5.697968 Parallel integral file used 4 records with 0 large values Line search: step= 1.00 grad=-1.5D-06 hess= 9.0D-07 energy= -115.714405 mode=accept new step= 1.00 predicted energy= -115.714405 -------- Step 3 -------- Geometry "geometry" -> "geometry" --------------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 0.00374071 0.65594628 0.00000000 2 O 8.0000 -0.10085883 -0.75888635 0.00000000 3 H 1.0000 0.51785983 1.04410903 -0.89319476 4 H 1.0000 0.51785983 1.04410903 0.89319476 5 H 1.0000 -1.01757969 1.04651161 0.00000000 6 H 1.0000 0.79786098 -1.12052358 0.00000000 Atomic Mass ----------- C 12.000000 O 15.994910 H 1.007825 Effective nuclear repulsion energy (a.u.) 40.2165664963 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0596672345 -0.2290479772 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 5 Symmetry unique atoms 1 2 3 5 6 NWChem DFT Module ----------------- The DFT is already converged Total DFT energy = -115.714405113942 NWChem DFT Gradient Module -------------------------- charge = 0.00 wavefunction = closed shell Using symmetry DFT ENERGY GRADIENTS atom coordinates gradient x y z x y z 1 C 0.007069 1.239559 0.000000 -0.000036 0.000047 0.000000 2 O -0.190596 -1.434087 0.000000 0.000020 0.000041 0.000000 3 H 0.978613 1.973080 -1.687893 -0.000007 -0.000010 0.000002 4 H 0.978613 1.973080 1.687893 -0.000007 -0.000010 -0.000002 5 H -1.922947 1.977620 0.000000 -0.000013 0.000024 0.000000 6 H 1.507739 -2.117483 0.000000 0.000044 -0.000090 0.000000 ---------------------------------------- | Time | 1-e(secs) | 2-e(secs) | ---------------------------------------- | CPU | 0.00 | 1.49 | ---------------------------------------- | WALL | 0.02 | 2.87 | ---------------------------------------- Step Energy Delta E Gmax Grms Xrms Xmax Walltime ---- ---------------- -------- -------- -------- -------- -------- -------- @ 3 -115.71440511 -6.5D-07 0.00007 0.00003 0.00087 0.00213 73.1 ok ok ok Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value Gradient ----------- -------- ----- ----- ----- ----- ----- ---------- ---------- 1 Stretch 1 2 1.41869 0.00005 2 Stretch 1 3 1.10127 -0.00001 3 Stretch 1 4 1.10127 -0.00001 4 Stretch 1 5 1.09345 0.00002 5 Stretch 2 6 0.96875 0.00007 6 Bend 1 2 6 107.69121 0.00007 7 Bend 2 1 3 112.70152 -0.00001 8 Bend 2 1 4 112.70152 -0.00001 9 Bend 2 1 5 106.69924 0.00002 10 Bend 3 1 4 108.39967 0.00001 11 Bend 3 1 5 108.06831 -0.00000 12 Bend 4 1 5 108.06831 -0.00000 13 Torsion 3 1 2 6 61.54284 -0.00000 14 Torsion 4 1 2 6 -61.54284 0.00000 15 Torsion 5 1 2 6 180.00000 0.00000 NWChem DFT Module ----------------- Caching 1-el integrals General Information ------------------- SCF calculation type: DFT Wavefunction type: closed shell. No. of atoms : 6 No. of electrons : 18 Alpha electrons : 9 Beta electrons : 9 Charge : 0 Spin multiplicity: 1 Use of symmetry is: on ; symmetry adaption is: on Maximum number of iterations: 30 AO basis - number of functions: 38 number of shells: 20 Convergence on energy requested: 1.00D-06 Convergence on density requested: 1.00D-05 Convergence on gradient requested: 5.00D-04 XC Information -------------- B3LYP Method XC Potential Hartree-Fock (Exact) Exchange 0.200 Slater Exchange Functional 0.800 local Becke 1988 Exchange Functional 0.720 non-local Lee-Yang-Parr Correlation Functional 0.810 VWN I RPA Correlation Functional 0.190 local Grid Information ---------------- Grid used for XC integration: medium Radial quadrature: Mura-Knowles Angular quadrature: Lebedev. Tag B.-S. Rad. Rad. Pts. Rad. Cut. Ang. Pts. --- ---------- --------- --------- --------- C 0.70 49 7.0 434 O 0.60 49 7.0 434 H 0.35 45 8.0 434 Grid pruning is: on Number of quadrature shells: 233 Spatial weights used: Erf1 Convergence Information ----------------------- Convergence aids based upon iterative change in total energy or number of iterations. Levelshifting, if invoked, occurs when the HOMO/LUMO gap drops below (HL_TOL): 1.00D-02 DIIS, if invoked, will attempt to extrapolate using up to (NFOCK): 10 stored Fock matrices. Damping( 0%) Levelshifting(0.5) DIIS --------------- ------------------- --------------- dE on: start ASAP start dE off: 2 iters 30 iters 30 iters Screening Tolerance Information ------------------------------- Density screening/tol_rho: 1.00D-10 AO Gaussian exp screening on grid/accAOfunc: 14 CD Gaussian exp screening on grid/accCDfunc: 20 XC Gaussian exp screening on grid/accXCfunc: 20 Schwarz screening/accCoul: 1.00D-08 Loading old vectors from job with title : Symmetry analysis of molecular orbitals - initial ------------------------------------------------- Numbering of irreducible representations: 1 a' 2 a" Orbital symmetries: 1 a' 2 a' 3 a' 4 a' 5 a' 6 a" 7 a' 8 a' 9 a" 10 a' 11 a' 12 a' 13 a" 14 a' 15 a' 16 a' 17 a" 18 a' 19 a" Time after variat. SCF: 31.8 Time prior to 1st pass: 31.8 Integral file = ./methanol.aoints.0 Record size in doubles = 65536 No. of integs per rec = 43688 Max. records in memory = 7 Max. records in file = 1445 No. of bits per label = 8 No. of bits per value = 64 #quartets = 1.615D+04 #integrals = 1.566D+05 #direct = 0.0% #cached =100.0% Grid_pts file = ./methanol.gridpts.0 Record size in doubles = 12289 No. of grid_pts per rec = 3070 Max. records in memory = 38 Max. recs in file = 7711 Memory utilization after 1st SCF pass: Heap Space remaining (MW): 12.18 12179658 Stack Space remaining (MW): 13.11 13106932 convergence iter energy DeltaE RMS-Dens Diis-err time ---------------- ----- ----------------- --------- --------- --------- ------ d= 0,ls=0.0,diis 1 -115.7144051420 -1.56D+02 1.06D-05 1.73D-07 33.4 d= 0,ls=0.0,diis 2 -115.7144051543 -1.23D-08 5.80D-06 1.31D-07 34.2 Total DFT energy = -115.714405154256 One electron energy = -236.845029732957 Coulomb energy = 96.420437186416 Exchange-Corr. energy = -15.507846877598 Nuclear repulsion energy = 40.218034269884 Numeric. integr. density = 17.999998346823 Total iterative time = 2.4s DFT Final Molecular Orbital Analysis ------------------------------------ Vector 1 Occ=2.000000D+00 E=-1.914009D+01 Symmetry=a' MO Center= -1.0D-01, -7.6D-01, 1.4D-19, r^2= 1.5D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 16 0.992809 2 O s Vector 2 Occ=2.000000D+00 E=-1.022472D+01 Symmetry=a' MO Center= 3.8D-03, 6.6D-01, 7.2D-19, r^2= 2.8D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 1 -0.992898 1 C s Vector 3 Occ=2.000000D+00 E=-1.010481D+00 Symmetry=a' MO Center= 6.3D-02, -5.8D-01, 4.7D-19, r^2= 5.9D-01 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 -0.451720 2 O s 21 -0.426164 2 O s 16 0.202544 2 O s Vector 4 Occ=2.000000D+00 E=-6.782560D-01 Symmetry=a' MO Center= 1.6D-02, 4.7D-01, -9.9D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 2 0.361317 1 C s 6 0.330765 1 C s 19 0.182111 2 O py 1 -0.179931 1 C s 21 -0.172274 2 O s Vector 5 Occ=2.000000D+00 E=-5.023109D-01 Symmetry=a' MO Center= 1.4D-01, -1.2D-01, 1.4D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 0.327990 2 O px 19 -0.272900 2 O py 4 0.236103 1 C py 3 0.210037 1 C px 37 0.207646 6 H s 22 0.173129 2 O px Vector 6 Occ=2.000000D+00 E=-4.340144D-01 Symmetry=a" MO Center= 1.7D-01, 5.3D-01, 8.2D-17, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 5 0.424413 1 C pz 20 0.254045 2 O pz 33 0.202702 4 H s 31 -0.202702 3 H s 9 0.184133 1 C pz 32 -0.163699 3 H s 34 0.163699 4 H s 24 0.160471 2 O pz Vector 7 Occ=2.000000D+00 E=-4.191740D-01 Symmetry=a' MO Center= -2.9D-01, 2.3D-01, -7.1D-17, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 19 0.344329 2 O py 3 0.316902 1 C px 4 -0.265260 1 C py 35 -0.236538 5 H s 23 0.200529 2 O py 36 -0.177104 5 H s 7 0.166890 1 C px Vector 8 Occ=2.000000D+00 E=-3.302613D-01 Symmetry=a' MO Center= -1.6D-01, -2.0D-01, 5.8D-17, r^2= 1.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 -0.415009 2 O px 21 0.328796 2 O s 22 -0.280894 2 O px 3 0.266843 1 C px 19 -0.214674 2 O py 36 -0.176110 5 H s 35 -0.174383 5 H s 23 -0.155190 2 O py 37 -0.151445 6 H s Vector 9 Occ=2.000000D+00 E=-2.645260D-01 Symmetry=a" MO Center= 1.5D-02, -3.8D-01, -1.2D-16, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 20 0.596164 2 O pz 24 0.464132 2 O pz 32 0.192309 3 H s 34 -0.192309 4 H s 5 -0.177601 1 C pz Vector 10 Occ=0.000000D+00 E= 7.524968D-02 Symmetry=a' MO Center= 7.7D-01, -6.4D-01, -4.4D-16, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 38 -1.223444 6 H s 21 1.123696 2 O s 6 0.629199 1 C s 8 0.568716 1 C py 32 -0.461552 3 H s 34 -0.461552 4 H s 22 0.457678 2 O px 36 -0.305108 5 H s 18 0.256594 2 O px 4 0.198981 1 C py Vector 11 Occ=0.000000D+00 E= 1.307438D-01 Symmetry=a' MO Center= 1.2D-01, 9.1D-01, -6.0D-17, r^2= 3.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 -2.397837 1 C s 32 1.097579 3 H s 34 1.097579 4 H s 36 1.056157 5 H s 21 0.709455 2 O s 38 -0.514886 6 H s 22 0.215464 2 O px 2 -0.210648 1 C s 23 0.208629 2 O py 8 -0.182297 1 C py Vector 12 Occ=0.000000D+00 E= 1.666953D-01 Symmetry=a' MO Center= -4.5D-01, 9.2D-01, -5.1D-15, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 1.755090 5 H s 7 1.235869 1 C px 32 -0.716696 3 H s 34 -0.716696 4 H s 8 -0.460198 1 C py 3 0.409215 1 C px 38 -0.286705 6 H s 23 -0.249356 2 O py Vector 13 Occ=0.000000D+00 E= 1.751487D-01 Symmetry=a" MO Center= 4.9D-01, 1.0D+00, 4.7D-15, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 34 -1.519142 4 H s 32 1.519142 3 H s 9 1.318143 1 C pz 5 0.461196 1 C pz 24 -0.238255 2 O pz Vector 14 Occ=0.000000D+00 E= 2.058923D-01 Symmetry=a' MO Center= 7.2D-02, 2.6D-01, -3.5D-16, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.293347 1 C py 38 0.866541 6 H s 23 0.838085 2 O py 6 -0.726977 1 C s 21 0.671926 2 O s 7 0.567889 1 C px 36 0.508934 5 H s 32 -0.437766 3 H s 34 -0.437766 4 H s 19 0.374441 2 O py Vector 15 Occ=0.000000D+00 E= 5.342257D-01 Symmetry=a' MO Center= -6.9D-02, 5.9D-01, 3.2D-17, r^2= 1.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 -1.418274 1 C py 4 0.928018 1 C py 21 -0.806688 2 O s 6 0.451911 1 C s 7 -0.412685 1 C px 2 -0.366816 1 C s 19 0.291507 2 O py 38 -0.237627 6 H s 23 -0.220485 2 O py 3 0.190306 1 C px Vector 16 Occ=0.000000D+00 E= 5.672684D-01 Symmetry=a' MO Center= 3.0D-01, 5.6D-01, -1.5D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 7 1.652079 1 C px 3 -0.728078 1 C px 35 0.475338 5 H s 36 0.447333 5 H s 8 -0.437153 1 C py 4 0.293466 1 C py 21 -0.231655 2 O s 38 -0.189787 6 H s 33 -0.187868 4 H s 31 -0.187868 3 H s Vector 17 Occ=0.000000D+00 E= 5.774175D-01 Symmetry=a" MO Center= -2.4D-01, 5.7D-01, 2.3D-15, r^2= 2.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 9 -1.732696 1 C pz 5 0.736596 1 C pz 32 -0.407016 3 H s 34 0.407016 4 H s 31 -0.397934 3 H s 33 0.397934 4 H s 20 0.231983 2 O pz 12 0.180522 1 C dxz 24 0.165195 2 O pz Vector 18 Occ=0.000000D+00 E= 7.863589D-01 Symmetry=a' MO Center= 2.2D-01, -3.8D-01, 2.8D-16, r^2= 2.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 -0.981554 5 H s 7 -0.956731 1 C px 37 -0.888720 6 H s 38 0.639489 6 H s 34 0.514892 4 H s 32 0.514892 3 H s 3 0.470257 1 C px 23 -0.374682 2 O py 33 -0.340689 4 H s 31 -0.340689 3 H s Vector 19 Occ=0.000000D+00 E= 8.487701D-01 Symmetry=a" MO Center= 3.9D-01, 8.9D-01, 2.3D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 34 1.455519 4 H s 32 -1.455519 3 H s 9 -1.433506 1 C pz 5 0.830488 1 C pz 31 0.677470 3 H s 33 -0.677470 4 H s 24 0.323763 2 O pz 14 -0.232068 1 C dyz 12 -0.229959 1 C dxz 20 -0.219974 2 O pz center of mass -------------- x = -0.04412067 y = -0.13209256 z = -0.00000000 moments of inertia (a.u.) ------------------ 72.817744445314 -1.140582970758 0.000000000000 -1.140582970758 14.211080952573 -0.000000000000 0.000000000000 -0.000000000000 75.543980538852 Multipole analysis of the density --------------------------------- L x y z total alpha beta nuclear - - - - ----- ----- ---- ------- 0 0 0 0 -0.000000 -9.000000 -9.000000 18.000000 1 1 0 0 0.590155 0.266033 0.266033 0.058088 1 0 1 0 0.309789 0.270134 0.270134 -0.230479 1 0 0 1 0.000000 0.000000 0.000000 0.000000 2 2 0 0 -8.822841 -8.500317 -8.500317 8.177793 2 1 1 0 -1.646106 -0.378371 -0.378371 -0.889365 2 1 0 1 0.000000 0.000000 0.000000 0.000000 2 0 2 0 -9.457058 -25.651990 -25.651990 41.846922 2 0 1 1 0.000000 0.000000 0.000000 0.000000 2 0 0 2 -10.098094 -7.897965 -7.897965 5.697837 Parallel integral file used 4 records with 0 large values Line search: step= 1.00 grad=-9.0D-08 hess= 5.0D-08 energy= -115.714405 mode=accept new step= 1.00 predicted energy= -115.714405 -------- Step 4 -------- Geometry "geometry" -> "geometry" --------------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 0.00376021 0.65585360 0.00000000 2 O 8.0000 -0.10099215 -0.75892833 0.00000000 3 H 1.0000 0.51790864 1.04402672 -0.89318449 4 H 1.0000 0.51790864 1.04402672 0.89318449 5 H 1.0000 -1.01752472 1.04642380 0.00000000 6 H 1.0000 0.79782221 -1.12013647 0.00000000 Atomic Mass ----------- C 12.000000 O 15.994910 H 1.007825 Effective nuclear repulsion energy (a.u.) 40.2180342699 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0580879645 -0.2304791356 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 5 Symmetry unique atoms 1 2 3 5 6 NWChem DFT Module ----------------- The DFT is already converged Total DFT energy = -115.714405154256 NWChem DFT Gradient Module -------------------------- charge = 0.00 wavefunction = closed shell Using symmetry DFT ENERGY GRADIENTS atom coordinates gradient x y z x y z 1 C 0.007106 1.239384 0.000000 0.000006 0.000019 0.000000 2 O -0.190847 -1.434167 0.000000 0.000005 -0.000010 0.000000 3 H 0.978705 1.972924 -1.687874 -0.000005 -0.000004 0.000003 4 H 0.978705 1.972924 1.687874 -0.000005 -0.000004 -0.000003 5 H -1.922843 1.977454 0.000000 0.000002 -0.000003 0.000000 6 H 1.507665 -2.116751 0.000000 -0.000004 0.000002 0.000000 ---------------------------------------- | Time | 1-e(secs) | 2-e(secs) | ---------------------------------------- | CPU | 0.00 | 1.48 | ---------------------------------------- | WALL | 0.01 | 2.49 | ---------------------------------------- Step Energy Delta E Gmax Grms Xrms Xmax Walltime ---- ---------------- -------- -------- -------- -------- -------- -------- @ 4 -115.71440515 -4.0D-08 0.00001 0.00000 0.00020 0.00073 82.8 ok ok ok ok Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value Gradient ----------- -------- ----- ----- ----- ----- ----- ---------- ---------- 1 Stretch 1 2 1.41865 0.00001 2 Stretch 1 3 1.10127 -0.00001 3 Stretch 1 4 1.10127 -0.00001 4 Stretch 1 5 1.09342 -0.00000 5 Stretch 2 6 0.96868 -0.00001 6 Bend 1 2 6 107.65927 0.00000 7 Bend 2 1 3 112.70504 -0.00000 8 Bend 2 1 4 112.70504 -0.00000 9 Bend 2 1 5 106.69383 -0.00000 10 Bend 3 1 4 108.39655 0.00000 11 Bend 3 1 5 108.06898 0.00000 12 Bend 4 1 5 108.06898 0.00000 13 Torsion 3 1 2 6 61.54347 0.00000 14 Torsion 4 1 2 6 -61.54347 -0.00000 15 Torsion 5 1 2 6 180.00000 0.00000 ---------------------- Optimization converged ---------------------- Step Energy Delta E Gmax Grms Xrms Xmax Walltime ---- ---------------- -------- -------- -------- -------- -------- -------- @ 4 -115.71440515 -4.0D-08 0.00001 0.00000 0.00020 0.00073 82.8 ok ok ok ok Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value Gradient ----------- -------- ----- ----- ----- ----- ----- ---------- ---------- 1 Stretch 1 2 1.41865 0.00001 2 Stretch 1 3 1.10127 -0.00001 3 Stretch 1 4 1.10127 -0.00001 4 Stretch 1 5 1.09342 -0.00000 5 Stretch 2 6 0.96868 -0.00001 6 Bend 1 2 6 107.65927 0.00000 7 Bend 2 1 3 112.70504 -0.00000 8 Bend 2 1 4 112.70504 -0.00000 9 Bend 2 1 5 106.69383 -0.00000 10 Bend 3 1 4 108.39655 0.00000 11 Bend 3 1 5 108.06898 0.00000 12 Bend 4 1 5 108.06898 0.00000 13 Torsion 3 1 2 6 61.54347 0.00000 14 Torsion 4 1 2 6 -61.54347 -0.00000 15 Torsion 5 1 2 6 180.00000 0.00000 Geometry "geometry" -> "geometry" --------------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 0.00376021 0.65585360 0.00000000 2 O 8.0000 -0.10099215 -0.75892833 0.00000000 3 H 1.0000 0.51790864 1.04402672 -0.89318449 4 H 1.0000 0.51790864 1.04402672 0.89318449 5 H 1.0000 -1.01752472 1.04642380 0.00000000 6 H 1.0000 0.79782221 -1.12013647 0.00000000 Atomic Mass ----------- C 12.000000 O 15.994910 H 1.007825 Effective nuclear repulsion energy (a.u.) 40.2180342699 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0580879645 -0.2304791356 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 5 Symmetry unique atoms 1 2 3 5 6 Final and change from initial internal coordinates -------------------------------------------------- Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value Change ----------- -------- ----- ----- ----- ----- ----- ---------- ---------- 1 Stretch 1 2 1.41865 0.00305 2 Stretch 1 3 1.10127 0.00877 3 Stretch 1 4 1.10127 0.00877 4 Stretch 1 5 1.09342 0.00034 5 Stretch 2 6 0.96868 -0.00427 6 Bend 1 2 6 107.65927 0.59773 7 Bend 2 1 3 112.70504 3.15848 8 Bend 2 1 4 112.70504 3.15848 9 Bend 2 1 5 106.69383 -2.25492 10 Bend 3 1 4 108.39655 -1.70010 11 Bend 3 1 5 108.06898 -1.27218 12 Bend 4 1 5 108.06898 -1.27218 13 Torsion 3 1 2 6 61.54347 1.11273 14 Torsion 4 1 2 6 -61.54347 -1.11273 15 Torsion 5 1 2 6 180.00000 0.00000 ============================================================================== internuclear distances ------------------------------------------------------------------------------ center one | center two | atomic units | angstroms ------------------------------------------------------------------------------ 2 O | 1 C | 2.68087 | 1.41865 3 H | 1 C | 2.08111 | 1.10127 4 H | 1 C | 2.08111 | 1.10127 5 H | 1 C | 2.06626 | 1.09342 6 H | 2 O | 1.83054 | 0.96868 ------------------------------------------------------------------------------ number of included internuclear distances: 5 ============================================================================== ============================================================================== internuclear angles ------------------------------------------------------------------------------ center 1 | center 2 | center 3 | degrees ------------------------------------------------------------------------------ 2 O | 1 C | 3 H | 112.71 2 O | 1 C | 4 H | 112.71 2 O | 1 C | 5 H | 106.69 3 H | 1 C | 4 H | 108.40 3 H | 1 C | 5 H | 108.07 4 H | 1 C | 5 H | 108.07 1 C | 2 O | 6 H | 107.66 ------------------------------------------------------------------------------ number of included internuclear angles: 7 ============================================================================== Task times cpu: 37.1s wall: 82.7s NWChem Input Module ------------------- NWChem Nuclear Hessian and Frequency Analysis --------------------------------------------- NWChem Analytic Hessian ----------------------- tol_rho modified to match energy convergence criterion. NWChem DFT Module ----------------- Caching 1-el integrals tol_rho modified to match energy convergence criterion. General Information ------------------- SCF calculation type: DFT Wavefunction type: closed shell. No. of atoms : 6 No. of electrons : 18 Alpha electrons : 9 Beta electrons : 9 Charge : 0 Spin multiplicity: 1 Use of symmetry is: off; symmetry adaption is: off Maximum number of iterations: 30 AO basis - number of functions: 38 number of shells: 20 Convergence on energy requested: 1.00D-07 Convergence on density requested: 1.00D-05 Convergence on gradient requested: 1.00D-06 XC Information -------------- B3LYP Method XC Potential Hartree-Fock (Exact) Exchange 0.200 Slater Exchange Functional 0.800 local Becke 1988 Exchange Functional 0.720 non-local Lee-Yang-Parr Correlation Functional 0.810 VWN I RPA Correlation Functional 0.190 local Grid Information ---------------- Grid used for XC integration: fine Radial quadrature: Mura-Knowles Angular quadrature: Lebedev. Tag B.-S. Rad. Rad. Pts. Rad. Cut. Ang. Pts. --- ---------- --------- --------- --------- C 0.70 70 7.0 590 O 0.60 70 7.0 590 H 0.35 60 8.0 590 Grid pruning is: on Number of quadrature shells: 380 Spatial weights used: Erf1 Convergence Information ----------------------- Convergence aids based upon iterative change in total energy or number of iterations. Levelshifting, if invoked, occurs when the HOMO/LUMO gap drops below (HL_TOL): 1.00D-02 DIIS, if invoked, will attempt to extrapolate using up to (NFOCK): 10 stored Fock matrices. Damping( 0%) Levelshifting(0.5) DIIS --------------- ------------------- --------------- dE on: start ASAP start dE off: 2 iters 30 iters 30 iters Screening Tolerance Information ------------------------------- Density screening/tol_rho: 1.00D-10 AO Gaussian exp screening on grid/accAOfunc: 16 CD Gaussian exp screening on grid/accCDfunc: 20 XC Gaussian exp screening on grid/accXCfunc: 20 Schwarz screening/accCoul: 1.00D-08 Loading old vectors from job with title : Time after variat. SCF: 37.1 Time prior to 1st pass: 37.1 Grid_pts file = ./methanol.gridpts.0 Record size in doubles = 12289 No. of grid_pts per rec = 3070 Max. records in memory = 82 Max. recs in file = 7711 Memory utilization after 1st SCF pass: Heap Space remaining (MW): 12.10 12097713 Stack Space remaining (MW): 13.11 13106932 convergence iter energy DeltaE RMS-Dens Diis-err time ---------------- ----- ----------------- --------- --------- --------- ------ d= 0,ls=0.0,diis 1 -115.7144058225 -1.56D+02 3.96D-06 1.55D-08 41.0 d= 0,ls=0.0,diis 2 -115.7144058207 1.82D-09 2.36D-06 3.62D-08 44.3 Total DFT energy = -115.714405820726 One electron energy = -236.845154664349 Coulomb energy = 96.420563947610 Exchange-Corr. energy = -15.507849373870 Nuclear repulsion energy = 40.218034269884 Numeric. integr. density = 18.000000312006 Total iterative time = 7.1s DFT Final Molecular Orbital Analysis ------------------------------------ Vector 1 Occ=2.000000D+00 E=-1.914012D+01 MO Center= -1.0D-01, -7.6D-01, -8.5D-15, r^2= 1.5D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 16 -0.992809 2 O s Vector 2 Occ=2.000000D+00 E=-1.022470D+01 MO Center= 3.8D-03, 6.6D-01, 1.2D-15, r^2= 2.8D-02 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 1 0.992898 1 C s Vector 3 Occ=2.000000D+00 E=-1.010490D+00 MO Center= 6.3D-02, -5.8D-01, 3.7D-12, r^2= 5.9D-01 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 0.451727 2 O s 21 0.426169 2 O s 16 -0.202546 2 O s Vector 4 Occ=2.000000D+00 E=-6.782517D-01 MO Center= 1.6D-02, 4.7D-01, -1.9D-11, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 2 0.361313 1 C s 6 0.330761 1 C s 19 0.182129 2 O py 1 -0.179931 1 C s 21 -0.172266 2 O s Vector 5 Occ=2.000000D+00 E=-5.023141D-01 MO Center= 1.4D-01, -1.2D-01, -3.8D-11, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 -0.328004 2 O px 19 0.272898 2 O py 4 -0.236100 1 C py 3 -0.210019 1 C px 37 -0.207647 6 H s 22 -0.173137 2 O px Vector 6 Occ=2.000000D+00 E=-4.340104D-01 MO Center= 1.7D-01, 5.3D-01, 3.2D-11, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 5 -0.424400 1 C pz 20 -0.254075 2 O pz 33 -0.202695 4 H s 31 0.202695 3 H s 9 -0.184131 1 C pz 32 0.163694 3 H s 34 -0.163694 4 H s 24 -0.160491 2 O pz Vector 7 Occ=2.000000D+00 E=-4.191735D-01 MO Center= -2.9D-01, 2.3D-01, 5.4D-12, r^2= 1.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 19 0.344344 2 O py 3 0.316881 1 C px 4 -0.265262 1 C py 35 -0.236528 5 H s 23 0.200540 2 O py 36 -0.177097 5 H s 7 0.166883 1 C px Vector 8 Occ=2.000000D+00 E=-3.302677D-01 MO Center= -1.6D-01, -2.0D-01, -1.0D-11, r^2= 1.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 18 0.414993 2 O px 21 -0.328769 2 O s 22 0.280881 2 O px 3 -0.266874 1 C px 19 0.214661 2 O py 36 0.176123 5 H s 35 0.174401 5 H s 23 0.155179 2 O py 37 0.151443 6 H s Vector 9 Occ=2.000000D+00 E=-2.645350D-01 MO Center= 1.5D-02, -3.8D-01, 2.3D-11, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 20 -0.596157 2 O pz 24 -0.464120 2 O pz 32 -0.192315 3 H s 34 0.192315 4 H s 5 0.177620 1 C pz Vector 10 Occ=0.000000D+00 E= 7.524854D-02 MO Center= 7.7D-01, -6.4D-01, 4.9D-11, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 38 1.223479 6 H s 21 -1.123705 2 O s 6 -0.629114 1 C s 8 -0.568683 1 C py 34 0.461501 4 H s 32 0.461501 3 H s 22 -0.457687 2 O px 36 0.305066 5 H s 18 -0.256602 2 O px 4 -0.198970 1 C py Vector 11 Occ=0.000000D+00 E= 1.307467D-01 MO Center= 1.2D-01, 9.1D-01, 1.0D-09, r^2= 3.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 2.397875 1 C s 34 -1.097596 4 H s 32 -1.097596 3 H s 36 -1.056196 5 H s 21 -0.709398 2 O s 38 0.514838 6 H s 22 -0.215441 2 O px 2 0.210644 1 C s 23 -0.208623 2 O py 8 0.182339 1 C py Vector 12 Occ=0.000000D+00 E= 1.666988D-01 MO Center= -4.5D-01, 9.2D-01, -4.2D-09, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 -1.755068 5 H s 7 -1.235858 1 C px 32 0.716695 3 H s 34 0.716695 4 H s 8 0.460245 1 C py 3 -0.409206 1 C px 38 0.286726 6 H s 23 0.249385 2 O py Vector 13 Occ=0.000000D+00 E= 1.751533D-01 MO Center= 4.9D-01, 1.0D+00, 3.1D-09, r^2= 2.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 34 1.519149 4 H s 32 -1.519149 3 H s 9 -1.318156 1 C pz 5 -0.461191 1 C pz 24 0.238253 2 O pz Vector 14 Occ=0.000000D+00 E= 2.058923D-01 MO Center= 7.2D-02, 2.6D-01, 8.3D-11, r^2= 2.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 -1.293334 1 C py 38 -0.866500 6 H s 23 -0.838066 2 O py 6 0.726963 1 C s 21 -0.671936 2 O s 7 -0.567935 1 C px 36 -0.508996 5 H s 34 0.437799 4 H s 32 0.437799 3 H s 19 -0.374435 2 O py Vector 15 Occ=0.000000D+00 E= 5.342296D-01 MO Center= -6.9D-02, 5.9D-01, -5.0D-11, r^2= 1.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 -1.418264 1 C py 4 0.928009 1 C py 21 -0.806678 2 O s 6 0.451945 1 C s 7 -0.412710 1 C px 2 -0.366819 1 C s 19 0.291506 2 O py 38 -0.237633 6 H s 23 -0.220496 2 O py 3 0.190320 1 C px Vector 16 Occ=0.000000D+00 E= 5.672741D-01 MO Center= 3.0D-01, 5.6D-01, 1.7D-10, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 7 1.652055 1 C px 3 -0.728070 1 C px 35 0.475345 5 H s 36 0.447318 5 H s 8 -0.437183 1 C py 4 0.293483 1 C py 21 -0.231691 2 O s 38 -0.189781 6 H s 31 -0.187867 3 H s 33 -0.187867 4 H s Vector 17 Occ=0.000000D+00 E= 5.774213D-01 MO Center= -2.4D-01, 5.7D-01, -5.1D-11, r^2= 2.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 9 1.732672 1 C pz 5 -0.736594 1 C pz 34 -0.406998 4 H s 32 0.406998 3 H s 33 -0.397938 4 H s 31 0.397938 3 H s 20 -0.231992 2 O pz 12 -0.180520 1 C dxz 24 -0.165177 2 O pz Vector 18 Occ=0.000000D+00 E= 7.863575D-01 MO Center= 2.2D-01, -3.8D-01, -2.1D-10, r^2= 2.5D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 36 0.981471 5 H s 7 0.956652 1 C px 37 0.888747 6 H s 38 -0.639516 6 H s 32 -0.514830 3 H s 34 -0.514830 4 H s 3 -0.470215 1 C px 23 0.374713 2 O py 31 0.340662 3 H s 33 0.340662 4 H s Vector 19 Occ=0.000000D+00 E= 8.487762D-01 MO Center= 3.9D-01, 8.9D-01, 3.4D-10, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 32 1.455516 3 H s 34 -1.455516 4 H s 9 1.433526 1 C pz 5 -0.830495 1 C pz 33 0.677462 4 H s 31 -0.677462 3 H s 24 -0.323789 2 O pz 14 0.232068 1 C dyz 12 0.229952 1 C dxz 20 0.219990 2 O pz center of mass -------------- x = -0.04412067 y = -0.13209256 z = -0.00000000 moments of inertia (a.u.) ------------------ 72.817744445314 -1.140582970758 0.000000000000 -1.140582970758 14.211080952573 -0.000000000000 0.000000000000 -0.000000000000 75.543980538852 Multipole analysis of the density --------------------------------- L x y z total alpha beta nuclear - - - - ----- ----- ---- ------- 0 0 0 0 -0.000000 -9.000000 -9.000000 18.000000 1 1 0 0 0.590191 0.266052 0.266052 0.058088 1 0 1 0 0.309837 0.270158 0.270158 -0.230479 1 0 0 1 0.000000 0.000000 0.000000 0.000000 2 2 0 0 -8.822841 -8.500317 -8.500317 8.177793 2 1 1 0 -1.646150 -0.378392 -0.378392 -0.889365 2 1 0 1 0.000000 0.000000 0.000000 0.000000 2 0 2 0 -9.457075 -25.651998 -25.651998 41.846922 2 0 1 1 0.000000 0.000000 0.000000 0.000000 2 0 0 2 -10.098114 -7.897975 -7.897975 5.697837 stpr_wrt_fd_from_sq: overwrite of existing file:./methanol.hess stpr_wrt_fd_dipole: overwrite of existing file./methanol.fd_ddipole HESSIAN: the one electron contributions are done in 0.5s HESSIAN: 2-el 1st deriv. term done in 4.6s HESSIAN: 2-el 2nd deriv. term done in 12.1s stpr_wrt_fd_from_sq: overwrite of existing file:./methanol.hess stpr_wrt_fd_dipole: overwrite of existing file./methanol.fd_ddipole HESSIAN: the two electron contributions are done in 123.3s NWChem CPHF Module ------------------ scftype = RHF nclosed = 9 nopen = 0 variables = 261 # of vectors = 18 tolerance = 0.10D-03 level shift = 0.00D+00 max iterations = 50 max subspace = 180 Iterative solution of linear equations No. of variables 261 No. of equations 18 Maximum subspace 180 Iterations 50 Convergence 1.0D-04 Start time 301.3 iter nsub residual time ---- ------ -------- --------- 1 18 3.01D-01 375.5 2 36 1.56D-01 448.3 3 54 2.61D-03 522.9 4 72 6.57D-05 610.5 HESSIAN: the CPHF contributions are done stpr_wrt_fd_from_sq: overwrite of existing file:./methanol.hess stpr_wrt_fd_dipole: overwrite of existing file./methanol.fd_ddipole HESSIAN: the Hessian is done Vibrational analysis via the FX method See chapter 2 in "Molecular Vibrations" by Wilson, Decius and Cross Vib: Default input used Nuclear Hessian passed symmetry test ---------------------------- Atom information ---------------------------- atom # X Y Z mass -------------------------------------------------------------------------- C 1 7.1057587D-03 1.2393836D+00 0.0000000D+00 1.2000000D+01 O 2 -1.9084748D-01 -1.4341666D+00 0.0000000D+00 1.5994910D+01 H 3 9.7870542D-01 1.9729244D+00 -1.6878739D+00 1.0078250D+00 H 4 9.7870542D-01 1.9729244D+00 1.6878739D+00 1.0078250D+00 H 5 -1.9228429D+00 1.9774542D+00 0.0000000D+00 1.0078250D+00 H 6 1.5076654D+00 -2.1167510D+00 0.0000000D+00 1.0078250D+00 -------------------------------------------------------------------------- ---------------------------------------------------- MASS-WEIGHTED NUCLEAR HESSIAN (Hartree/Bohr/Bohr/Kamu) ---------------------------------------------------- 1 2 3 4 5 6 7 8 9 10 ----- ----- ----- ----- ----- 1 5.08817D+01 2 -1.71349D+00 4.05936D+01 3 -1.10378D-05 5.96879D-06 4.68683D+01 4 -6.98223D+00 9.97984D-01 1.20778D-05 3.27944D+01 5 -2.61170D+00-1.76273D+01 1.43548D-06-8.29502D+00 2.68869D+01 6 4.63319D-07-1.99039D-07-4.54917D+00-2.17907D-06 2.84828D-06 2.90336D+00 7 -3.16315D+01-9.62290D+00 2.70559D+01 9.64019D-01-1.23434D+00 1.41323D-02 1.08996D+02 8 -8.90738D+00-2.08165D+01 1.65257D+01-4.62041D+00-7.83433D+00 7.17318D+00 4.20004D+01 8.94179D+01 9 2.73885D+01 1.68847D+01-6.39456D+01-6.76202D-01 1.45032D+00 2.29154D+00-1.04904D+02-7.01824D+01 2.32614D+02 10 -3.16314D+01-9.62291D+00-2.70559D+01 9.64017D-01-1.23433D+00-1.41320D-02 8.59977D+00 5.00936D+00 1.38607D+01 1.08996D+02 11 -8.90737D+00-2.08165D+01-1.65258D+01-4.62041D+00-7.83434D+00-7.17318D+00 5.00903D+00 6.40982D+00 6.57507D+00 4.20004D+01 12 -2.73884D+01-1.68847D+01-6.39456D+01 6.76197D-01-1.45031D+00 2.29154D+00-1.38607D+01-6.57480D+00-2.25584D+01 1.04904D+02 13 -8.48162D+01 2.44497D+01 9.66293D-06 1.78997D+00 6.33949D-01 3.47569D-06-1.29854D+01 3.60744D+00-6.10792D-01-1.29854D+01 14 2.08970D+01-2.13250D+01-9.05236D-06 9.41863D+00-6.43413D+00-5.17787D-06-8.96633D+00 5.48099D+00-1.19461D+00-8.96632D+00 15 -1.26691D-06-1.98621D-07-1.54250D+01-6.33989D-07 8.86081D-07 4.45881D-01 2.68444D+01-9.05625D+00 1.17367D+00-2.68444D+01 16 3.20991D-01-3.26695D+00-4.81328D-05-1.10273D+02 4.38914D+01-3.25970D-05 6.96813D-01-1.47560D+00-1.58233D-01 6.97034D-01 17 1.32350D+01-6.89198D+00 2.03646D-05 2.94229D+01-2.41850D+01 1.36840D-05 7.90511D-02 1.73216D+00 7.61450D-01 7.89707D-02 18 1.21774D-05-8.56414D-06-2.86590D-01-2.30388D-06 5.71537D-06-8.98732D-01-1.49545D+00 2.13443D-01 2.93735D-01 1.49545D+00 11 12 13 14 15 16 17 18 ----- ----- ----- ----- ----- 11 8.94179D+01 12 7.01824D+01 2.32614D+02 13 3.60740D+00 6.10765D-01 3.08807D+02 14 5.48105D+00 1.19465D+00-9.19518D+01 9.62980D+01 15 9.05626D+00 1.17368D+00 2.32290D-06-6.31382D-06 4.84569D+01 16 -1.47520D+00 1.58585D-01 2.69898D+00 2.55259D-01-1.77249D-05 4.34106D+02 17 1.73199D+00-7.61591D-01-2.15495D+00-8.04303D+00 6.46818D-07-1.60887D+02 1.24709D+02 18 -2.13434D-01 2.93733D-01-3.09396D-05 5.91769D-06 6.45506D-01 8.95466D-07-8.47113D-06 3.33633D+00 ------------------------------------------------- NORMAL MODE EIGENVECTORS IN CARTESIAN COORDINATES ------------------------------------------------- (Frequencies expressed in cm-1) 1 2 3 4 5 6 Frequency -3.53 -3.40 -2.43 -1.41 2.88 3.32 1 0.09807 0.05873 -0.01761 -0.15159 0.14042 0.00705 2 0.08583 0.04430 0.00597 0.13477 0.06096 0.00380 3 -0.03415 0.04372 -0.16581 0.01393 -0.00834 0.16212 4 0.15064 0.08604 -0.00775 -0.05204 -0.14421 -0.00234 5 0.08194 0.04228 0.00524 0.12740 0.08203 0.00449 6 -0.00511 0.00133 -0.18215 0.01388 0.00265 -0.14909 7 0.28918 -0.32274 -0.05446 -0.18634 0.21247 0.14103 8 0.07139 0.10868 0.02239 0.17153 -0.04897 0.18712 9 0.06958 -0.14788 -0.17989 0.00989 -0.01463 0.31891 10 -0.12190 0.42521 0.01383 -0.17146 0.22456 -0.12177 11 0.13850 -0.00023 -0.00329 0.17037 -0.03599 -0.18636 12 0.06958 -0.14788 -0.17989 0.00989 -0.01464 0.31891 13 0.08355 0.05119 -0.02033 -0.17907 0.21899 0.00965 14 0.04788 0.02458 -0.00115 0.06291 0.26642 0.01058 15 -0.28384 0.49514 -0.12115 0.02269 -0.00427 0.09353 16 0.16407 0.09302 -0.00523 -0.02662 -0.21688 -0.00474 17 0.11535 0.05963 0.01150 0.19065 -0.09881 -0.00148 18 0.21557 -0.39755 -0.22174 0.00615 -0.00081 -0.09230 7 8 9 10 11 12 Frequency 345.65 1067.10 1096.70 1183.22 1399.99 1511.30 1 -0.00000 -0.03686 0.06588 -0.00000 -0.10626 0.01559 2 -0.00000 0.13868 0.13740 0.00000 0.02592 -0.10061 3 -0.00365 -0.00000 -0.00000 0.12050 0.00000 0.00000 4 -0.00000 -0.00816 -0.01524 0.00000 0.07220 0.00227 5 -0.00000 -0.14380 -0.09611 -0.00000 0.01634 -0.01271 6 0.06185 -0.00000 0.00000 -0.05484 -0.00000 -0.00000 7 0.21618 0.14075 -0.14635 -0.08289 0.16303 -0.23985 8 -0.05356 -0.07961 0.31747 -0.57034 -0.12738 0.41800 9 0.10110 0.02037 -0.03323 -0.16723 0.09015 0.05967 10 -0.21618 0.14075 -0.14635 0.08289 0.16303 -0.23985 11 0.05356 -0.07961 0.31746 0.57034 -0.12738 0.41800 12 0.10110 -0.02037 0.03323 -0.16723 -0.09015 -0.05967 13 -0.00000 0.08824 -0.10201 -0.00000 0.02050 0.25475 14 -0.00000 0.44649 -0.30693 -0.00000 0.37251 0.57405 15 -0.28602 -0.00000 0.00000 -0.22664 -0.00000 0.00000 16 -0.00000 0.19866 -0.14795 -0.00000 -0.22718 0.00332 17 -0.00000 0.34366 -0.43860 0.00000 -0.68568 -0.01036 18 -0.85435 -0.00000 0.00000 -0.00328 0.00000 0.00000 13 14 15 16 17 18 Frequency 1524.93 1541.55 2996.65 3039.07 3131.83 3754.71 1 -0.00000 -0.04407 -0.03231 0.00000 0.08355 -0.00298 2 -0.00000 -0.03569 -0.03946 0.00000 -0.01841 -0.00102 3 -0.06018 0.00000 0.00000 0.08979 -0.00000 -0.00000 4 -0.00000 -0.01709 0.00008 -0.00000 -0.00193 -0.05514 5 -0.00000 -0.00645 -0.00289 0.00000 -0.00002 0.02484 6 -0.00737 0.00000 0.00000 -0.00052 -0.00000 -0.00000 7 0.36747 0.42899 0.30599 0.32690 -0.05686 0.00094 8 -0.28390 0.32062 0.21838 0.21951 -0.04977 -0.00316 9 0.06393 0.39524 -0.55611 -0.54107 0.13206 -0.00131 10 -0.36745 0.42901 0.30599 -0.32690 -0.05686 0.00094 11 0.28391 0.32061 0.21838 -0.21951 -0.04977 -0.00316 12 0.06392 -0.39524 0.55611 -0.54107 -0.13205 0.00132 13 -0.00000 -0.08985 -0.23053 -0.00000 -0.87010 0.01729 14 -0.00001 -0.21057 0.08259 0.00000 0.31821 -0.00288 15 0.71327 -0.00001 0.00000 0.02499 -0.00000 -0.00000 16 0.00000 0.02788 0.00201 0.00000 0.01961 0.89147 17 0.00000 0.09672 -0.00364 -0.00000 0.00085 -0.37285 18 -0.00752 0.00000 0.00000 -0.00368 0.00000 0.00000 ---------------------------------------------------------------------------- Normal Eigenvalue || Derivative Dipole Moments (debye/angs) Mode [cm**-1] || [d/dqX] [d/dqY] [d/dqZ] ------ ---------- || ------------------ ------------------ ----------------- 1 -3.526 || -0.029 0.056 0.316 2 -3.398 || -0.015 0.029 -0.581 3 -2.427 || 0.005 -0.010 0.046 4 -1.410 || -0.055 0.106 -0.012 5 2.878 || 0.158 -0.302 -0.016 6 3.324 || 0.005 -0.010 0.385 7 345.655 || -0.000 0.000 1.739 8 1067.096 || 0.212 1.673 -0.000 9 1096.702 || -0.050 0.181 -0.000 10 1183.221 || 0.000 0.000 0.121 11 1399.989 || -0.203 -0.788 0.000 12 1511.302 || -0.029 -0.418 0.000 13 1524.929 || 0.000 -0.000 0.193 14 1541.545 || 0.192 -0.246 -0.000 15 2996.649 || -0.520 -1.123 0.000 16 3039.073 || 0.000 -0.000 1.425 17 3131.831 || 0.883 -0.205 0.000 18 3754.712 || 0.386 -0.342 -0.000 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Normal Eigenvalue || Infra Red Intensities Mode [cm**-1] || [atomic units] [(debye/angs)**2] [(KM/mol)] [arbitrary] ------ ---------- || -------------- ----------------- ---------- ----------- 1 -3.526 || 0.004504 0.104 4.390 1.525 2 -3.398 || 0.014678 0.339 14.309 4.971 3 -2.427 || 0.000098 0.002 0.096 0.033 4 -1.410 || 0.000622 0.014 0.607 0.211 5 2.878 || 0.005047 0.116 4.920 1.709 6 3.324 || 0.006446 0.149 6.284 2.183 7 345.655 || 0.131073 3.024 127.776 44.389 8 1067.096 || 0.123197 2.842 120.098 41.721 9 1096.702 || 0.001528 0.035 1.490 0.517 10 1183.221 || 0.000636 0.015 0.620 0.215 11 1399.989 || 0.028732 0.663 28.009 9.730 12 1511.302 || 0.007609 0.176 7.418 2.577 13 1524.929 || 0.001616 0.037 1.575 0.547 14 1541.545 || 0.004209 0.097 4.104 1.426 15 2996.649 || 0.066366 1.531 64.696 22.475 16 3039.073 || 0.088063 2.032 85.848 29.823 17 3131.831 || 0.035585 0.821 34.690 12.051 18 3754.712 || 0.011505 0.265 11.215 3.896 ---------------------------------------------------------------------------- Vibrational analysis via the FX method --- with translations and rotations projected out --- --- via the Eckart algorithm --- Projected Nuclear Hessian trans-rot subspace norm:6.0642D-33 (should be close to zero!) From the projected analysis The Zero-Point Energy (Kcal/mol) = 32.30753826 center of mass -------------- x = -0.04412067 y = -0.13209256 z = -0.00000000 moments of inertia (a.u.) ------------------ 72.817744445314 -1.140582970758 0.000000000000 -1.140582970758 14.211080952573 -0.000000000000 0.000000000000 -0.000000000000 75.543980538852 Rotational Constants -------------------- A= 4.242768 cm-1 ( 6.104260 K) B= 0.826472 cm-1 ( 1.189082 K) C= 0.796889 cm-1 ( 1.146520 K) Temperature = 298.15K frequency scaling parameter = 1.0000 Zero-Point correction to Energy = 32.282 kcal/mol ( 0.051445 au) Thermal correction to Energy = 34.347 kcal/mol ( 0.054735 au) Thermal correction to Enthalpy = 34.939 kcal/mol ( 0.055679 au) Total Entropy = 56.710 cal/mol-K - Translational = 36.308 cal/mol-K (mol. weight = 32.0262) - Rotational = 18.988 cal/mol-K (symmetry # = 1) - Vibrational = 1.414 cal/mol-K Cv (constant volume heat capacity) = 8.662 cal/mol-K - Translational = 2.979 cal/mol-K - Rotational = 2.979 cal/mol-K - Vibrational = 2.703 cal/mol-K ------------------------------------------------- NORMAL MODE EIGENVECTORS IN CARTESIAN COORDINATES ------------------------------------------------- (Projected Frequencies expressed in cm-1) 1 2 3 4 5 6 P.Frequency -0.00 -0.00 0.00 0.00 0.00 0.00 1 -0.01525 0.02847 0.00278 0.00246 0.00674 0.23457 2 0.01128 0.00732 0.00015 0.00356 0.17601 -0.00921 3 -0.03300 -0.00341 -0.01998 0.23579 -0.00270 -0.00389 4 -0.00344 0.23154 -0.00017 0.00287 -0.00423 0.00411 5 0.01040 -0.00772 0.00037 0.00353 0.17683 0.00785 6 -0.04085 -0.00075 -0.23227 0.00192 0.00281 0.00008 7 0.42107 -0.02269 -0.00877 0.07802 -0.01865 0.32600 8 -0.01202 0.07910 0.13401 0.14575 0.17065 -0.09756 9 0.20804 -0.00166 0.03155 0.34108 -0.01964 0.01035 10 -0.45807 -0.03181 0.01594 -0.07333 0.03814 0.26959 11 0.04316 0.08313 -0.13586 -0.13834 0.17340 -0.08837 12 0.20804 -0.00166 0.03155 0.34108 -0.01964 0.01035 13 -0.01852 -0.02759 0.00359 0.00234 0.00977 0.29819 14 0.00274 -0.13928 0.00228 0.00326 0.18393 0.15715 15 -0.54767 -0.00950 0.05315 0.21137 0.02917 -0.03815 16 -0.00042 0.28339 -0.00093 0.00298 -0.00703 -0.05473 17 0.01791 0.12130 -0.00151 0.00379 0.16986 -0.13856 18 0.41265 0.00465 -0.29927 0.02063 -0.02521 0.03032 7 8 9 10 11 12 P.Frequency 345.63 1067.09 1096.70 1183.22 1400.01 1511.30 1 0.00000 -0.03687 0.06588 -0.00000 -0.10626 0.01559 2 0.00000 0.13867 0.13741 -0.00000 0.02592 -0.10061 3 -0.00364 -0.00000 -0.00000 -0.12050 0.00000 0.00000 4 -0.00000 -0.00816 -0.01524 0.00000 0.07220 0.00227 5 0.00000 -0.14379 -0.09612 0.00000 0.01634 -0.01271 6 0.06186 0.00000 0.00000 0.05484 -0.00000 -0.00000 7 0.21594 0.14076 -0.14634 0.08289 0.16302 -0.23984 8 -0.05354 -0.07963 0.31746 0.57034 -0.12739 0.41801 9 0.10098 0.02038 -0.03323 0.16723 0.09014 0.05968 10 -0.21594 0.14076 -0.14634 -0.08289 0.16302 -0.23984 11 0.05354 -0.07963 0.31746 -0.57034 -0.12739 0.41801 12 0.10098 -0.02038 0.03323 0.16723 -0.09014 -0.05968 13 -0.00000 0.08825 -0.10200 0.00000 0.02050 0.25475 14 -0.00000 0.44651 -0.30689 0.00000 0.37252 0.57404 15 -0.28575 -0.00000 0.00000 0.22663 -0.00000 -0.00000 16 -0.00000 0.19867 -0.14794 -0.00000 -0.22719 0.00332 17 -0.00000 0.34371 -0.43858 -0.00000 -0.68568 -0.01036 18 -0.85458 -0.00000 0.00000 0.00327 -0.00000 -0.00000 13 14 15 16 17 18 P.Frequency 1524.93 1541.54 2996.65 3039.07 3131.83 3754.71 1 -0.00000 -0.04407 -0.03231 0.00000 0.08355 -0.00298 2 -0.00000 -0.03569 -0.03946 -0.00000 -0.01841 -0.00102 3 -0.06018 0.00000 -0.00000 0.08979 -0.00000 -0.00000 4 -0.00000 -0.01709 0.00008 -0.00000 -0.00193 -0.05514 5 -0.00000 -0.00645 -0.00289 0.00000 -0.00002 0.02484 6 -0.00737 0.00000 0.00000 -0.00052 -0.00000 -0.00000 7 0.36747 0.42900 0.30599 0.32690 -0.05686 0.00094 8 -0.28390 0.32061 0.21838 0.21951 -0.04977 -0.00316 9 0.06394 0.39524 -0.55611 -0.54107 0.13206 -0.00132 10 -0.36746 0.42901 0.30599 -0.32690 -0.05686 0.00094 11 0.28391 0.32060 0.21838 -0.21951 -0.04977 -0.00316 12 0.06392 -0.39524 0.55611 -0.54107 -0.13206 0.00132 13 0.00000 -0.08986 -0.23054 -0.00000 -0.87010 0.01729 14 0.00000 -0.21058 0.08259 0.00000 0.31821 -0.00288 15 0.71327 -0.00001 -0.00000 0.02499 0.00000 -0.00000 16 0.00000 0.02788 0.00201 0.00000 0.01961 0.89147 17 0.00000 0.09670 -0.00364 -0.00000 0.00085 -0.37285 18 -0.00752 0.00000 0.00000 -0.00368 0.00000 -0.00000 ---------------------------------------------------------------------------- Normal Eigenvalue || Projected Derivative Dipole Moments (debye/angs) Mode [cm**-1] || [d/dqX] [d/dqY] [d/dqZ] ------ ---------- || ------------------ ------------------ ----------------- 1 -0.000 || -0.007 0.013 0.714 2 -0.000 || -0.113 0.215 0.006 3 0.000 || -0.002 0.003 -0.098 4 0.000 || -0.000 0.000 0.252 5 0.000 || 0.006 -0.012 -0.049 6 0.000 || 0.128 -0.244 0.043 7 345.633 || -0.000 0.000 1.739 8 1067.091 || 0.212 1.673 -0.000 9 1096.699 || -0.050 0.181 -0.000 10 1183.223 || -0.000 -0.000 -0.121 11 1400.008 || 0.203 0.788 -0.000 12 1511.297 || -0.029 -0.418 0.000 13 1524.928 || 0.000 -0.000 0.193 14 1541.541 || 0.192 -0.246 0.000 15 2996.649 || -0.520 -1.123 0.000 16 3039.073 || 0.000 -0.000 1.425 17 3131.833 || 0.883 -0.205 0.000 18 3754.708 || 0.386 -0.342 -0.000 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Normal Eigenvalue || Projected Infra Red Intensities Mode [cm**-1] || [atomic units] [(debye/angs)**2] [(KM/mol)] [arbitrary] ------ ---------- || -------------- ----------------- ---------- ----------- 1 -0.000 || 0.022103 0.510 21.547 7.485 2 -0.000 || 0.002565 0.059 2.500 0.869 3 0.000 || 0.000419 0.010 0.408 0.142 4 0.000 || 0.002760 0.064 2.690 0.935 5 0.000 || 0.000111 0.003 0.108 0.038 6 0.000 || 0.003383 0.078 3.298 1.146 7 345.633 || 0.131128 3.025 127.830 44.407 8 1067.091 || 0.123196 2.842 120.097 41.721 9 1096.699 || 0.001530 0.035 1.492 0.518 10 1183.223 || 0.000636 0.015 0.620 0.215 11 1400.008 || 0.028731 0.663 28.008 9.730 12 1511.297 || 0.007609 0.176 7.418 2.577 13 1524.928 || 0.001615 0.037 1.575 0.547 14 1541.541 || 0.004210 0.097 4.104 1.426 15 2996.649 || 0.066365 1.531 64.696 22.475 16 3039.073 || 0.088063 2.032 85.849 29.823 17 3131.833 || 0.035585 0.821 34.690 12.051 18 3754.708 || 0.011505 0.265 11.215 3.896 ---------------------------------------------------------------------------- vib:animation F Task times cpu: 257.0s wall: 527.7s Summary of allocated global arrays ----------------------------------- No active global arrays GA Statistics for process 0 ------------------------------ create destroy get put acc scatter gather read&inc calls: 2111 2111 6.67e+05 3.94e+04 5.46e+05 470 0 0 number of processes/call 1.00e+00 1.00e+00 1.00e+00 1.00e+00 0.00e+00 bytes total: 3.49e+08 2.19e+07 3.32e+08 4.75e+06 0.00e+00 0.00e+00 bytes remote: 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 Max memory consumed for GA by this process: 2068768 bytes MA_summarize_allocated_blocks: starting scan ... MA_summarize_allocated_blocks: scan completed: 0 heap blocks, 0 stack blocks MA usage statistics: allocation statistics: heap stack ---- ----- current number of blocks 0 0 maximum number of blocks 25 53 current total bytes 0 0 maximum total bytes 8075436 76203708 maximum total K-bytes 8076 76204 maximum total M-bytes 9 77 NWChem Input Module ------------------- CITATION -------- Please cite the following reference when publishing results obtained with NWChem: M. Valiev, E.J. Bylaska, N. Govind, K. Kowalski, T.P. Straatsma, H.J.J. van Dam, D. Wang, J. Nieplocha, E. Apra, T.L. Windus, W.A. de Jong "NWChem: a comprehensive and scalable open-source solution for large scale molecular simulations" Comput. Phys. Commun. 181, 1477 (2010) doi:10.1016/j.cpc.2010.04.018 AUTHORS & CONTRIBUTORS ---------------------- E. J. Bylaska, W. A. de Jong, N. Govind, K. Kowalski, T. P. Straatsma, M. Valiev, H. J. J. van Dam, D. Wang, E. Apra, T. L. Windus, J. Hammond, J. Autschbach, P. Nichols, S. Hirata, M. T. Hackler, Y. Zhao, P.-D. Fan, R. J. Harrison, M. Dupuis, D. M. A. Smith, K. Glaesemann, J. Nieplocha, V. Tipparaju, M. Krishnan, A. Vazquez-Mayagoitia, L. Jensen, M. Swart, Q. Wu, T. Van Voorhis, A. A. Auer, M. Nooijen, L. D. Crosby, E. Brown, G. Cisneros, G. I. Fann, H. Fruchtl, J. Garza, K. Hirao, R. Kendall, J. A. Nichols, K. Tsemekhman, K. Wolinski, J. Anchell, D. Bernholdt, P. Borowski, T. Clark, D. Clerc, H. Dachsel, M. Deegan, K. Dyall, D. Elwood, E. Glendening, M. Gutowski, A. Hess, J. Jaffe, B. Johnson, J. Ju, R. Kobayashi, R. Kutteh, Z. Lin, R. Littlefield, X. Long, B. Meng, T. Nakajima, S. Niu, L. Pollack, M. Rosing, G. Sandrone, M. Stave, H. Taylor, G. Thomas, J. H. van Lenthe, A. Wong, Z. Zhang. Total times cpu: 294.1s wall: 610.6s avogadro-1.1.1/testfiles/methane.mpo0000644000175000001440000006134312250371054016673 0ustar marcususers Primary working directories: /scratch/banck Secondary working directories: /scratch/banck CPU=Opteron 2210.223:2210.223:2210.223:2210.223 MHz mxmblk= 64 mxmbln= 64 ncache= 16384 mindgm= 8 mindgv= 32 mindgc= 4 mindgl= 6 mindgr= 1 noblas=0 nroll=2 minvec=7 default implementation of scratch files=df ***,Jobname.Temp !file,2,INSERT WAVEFUNCTION FILE LOCATION HERE !memory,INSERT MEMORY HERE basis,6-31g gprint,basis gprint,orbitals geomtyp=xyz geometry={ 5 Geometry specification: C, -0.00092, -0.00000, -0.00289 H, -0.62971, -0.93095, -0.19667 H, -0.62951, 0.93099, -0.19709 H, 0.92146, -0.00025, -0.67283 H, 0.34326, 0.00021, 1.08392 } !INSERT QM METHODS HERE hf orbprint,12 frequencies --- Variables initialized (517), CPU time= 0.01 sec Commands initialized (293), CPU time= 0.01 sec, 434 directives. Default parameters read. Elapsed time= 0.05 sec Checking input... Passed 1 *** PROGRAM SYSTEM MOLPRO *** Copyright, University College Cardiff Consultants Limited, 2004 Version 2006.1 linked 16 Mar 2007 12:49:22 ********************************************************************************************************************************** LABEL * Jobname.Temp Linux-2.6.16-local/tick20(x86_64) 64 bit version (pgf6.1-6/acml) DATE: 11-Apr-09 TIME: 01:41:53 ********************************************************************************************************************************** Patch level: 71 ********************************************************************************************************************************** Variable memory set to 8000000 words, buffer space 230000 words SETTING BASIS = 6-31G SETTING GEOMTYP = XYZ Recomputing integrals since basis changed Using spherical harmonics Library entry C S 6-31G selected for orbital group 1 Library entry C P 6-31G selected for orbital group 1 Library entry H S 6-31G selected for orbital group 2 1PROGRAM * SEWARD (Integral evaluation for generally contracted gaussian basis sets) Author: Roland Lindh, 1990 Geometry written to block 1 of record 700 Point group C1 ATOMIC COORDINATES NR ATOM CHARGE X Y Z 1 C 6.00 -0.001738548 0.000000000 -0.005461308 2 H 1.00 -1.189979352 -1.759240409 -0.371652410 3 H 1.00 -1.189601407 1.759315998 -0.372446095 4 H 1.00 1.741306909 -0.000472431 -1.271464337 5 H 1.00 0.648667343 0.000396842 2.048311794 Bond lengths in Bohr (Angstrom) 1-2 2.154283860 1-3 2.154272218 1-4 2.154291382 1-5 2.154300799 (1.139998007) (1.139991846) (1.140001987) (1.140006970) Bond angles 2-1-3 109.50048762 2-1-4 110.25544572 2-1-5 109.19148153 3-1-4 110.25554279 3-1-5 109.19143137 4-1-5 108.41914740 BASIS DATA Nr Sym Nuc Type Exponents Contraction coefficients 1.1 A 1 1s 3047.524900 0.001835 457.369520 0.014037 103.948680 0.068843 29.210155 0.232184 9.286663 0.467941 3.163927 0.362312 2.1 A 1 1s 7.868272 -0.119332 1.881289 -0.160854 0.544249 1.143456 3.1 A 1 1s 0.168714 1.000000 4.1 A 1 2px 7.868272 0.068999 1.881289 0.316424 0.544249 0.744308 5.1 A 1 2py 7.868272 0.068999 1.881289 0.316424 0.544249 0.744308 6.1 A 1 2pz 7.868272 0.068999 1.881289 0.316424 0.544249 0.744308 7.1 A 1 2px 0.168714 1.000000 8.1 A 1 2py 0.168714 1.000000 9.1 A 1 2pz 0.168714 1.000000 10.1 A 2 1s 18.731137 0.033495 2.825394 0.234727 0.640122 0.813757 11.1 A 2 1s 0.161278 1.000000 12.1 A 3 1s 18.731137 0.033495 2.825394 0.234727 0.640122 0.813757 13.1 A 3 1s 0.161278 1.000000 14.1 A 4 1s 18.731137 0.033495 2.825394 0.234727 0.640122 0.813757 15.1 A 4 1s 0.161278 1.000000 16.1 A 5 1s 18.731137 0.033495 2.825394 0.234727 0.640122 0.813757 17.1 A 5 1s 0.161278 1.000000 NUCLEAR CHARGE: 10 NUMBER OF PRIMITIVE AOS: 38 NUMBER OF SYMMETRY AOS: 38 NUMBER OF CONTRACTIONS: 17 ( 17A ) NUMBER OF CORE ORBITALS: 1 ( 1A ) NUMBER OF VALENCE ORBITALS: 8 ( 8A ) NUCLEAR REPULSION ENERGY 12.84620029 Eigenvalues of metric 1 0.240E-01 0.824E-01 0.832E-01 0.841E-01 0.382E+00 0.410E+00 0.411E+00 0.413E+00 Contracted 2-electron integrals neglected if value below 1.0D-11 AO integral compression algorithm 1 Integral accuracy 1.0D-11 0.262 MB (compressed) written to integral file (100.0%) NUMBER OF SORTED TWO-ELECTRON INTEGRALS: 11781. BUFFER LENGTH: 32768 NUMBER OF SEGMENTS: 1 SEGMENT LENGTH: 11781 RECORD LENGTH: 524288 Memory used in sort: 0.57 MW SORT1 READ 16961. AND WROTE 10959. INTEGRALS IN 1 RECORDS. CPU TIME: 0.00 SEC, REAL TIME: 0.02 SEC SORT2 READ 10959. AND WROTE 11781. INTEGRALS IN 1 RECORDS. CPU TIME: 0.00 SEC, REAL TIME: 0.01 SEC FILE SIZES: FILE 1: 2.1 MBYTE, FILE 4: 4.2 MBYTE, TOTAL: 6.3 MBYTE OPERATOR DM FOR CENTER 0 COORDINATES: 0.000000 0.000000 0.000000 ********************************************************************************************************************************** DATASETS * FILE NREC LENGTH (MB) RECORD NAMES 1 19 1.91 500 610 700 900 950 970 1000 1100 1400 1410 VAR BASINP GEOM SYMINP ZMAT AOBASIS BASIS S T V 1200 1210 1080 1600 129 960 1650 1300 1700 H0 H01 AOSYM SMH P2S ABASIS MOLCAS ERIS OPER PROGRAMS * TOTAL INT CPU TIMES * 0.18 0.03 REAL TIME * 0.27 SEC DISK USED * 6.91 MB ********************************************************************************************************************************** 1PROGRAM * RHF-SCF (CLOSED SHELL) Authors: W. Meyer, H.-J. Werner NUMBER OF ELECTRONS: 5+ 5- CONVERGENCE THRESHOLDS: 1.00E-06 (Density) 1.00E-07 (Energy) MAX. NUMBER OF ITERATIONS: 60 INTERPOLATION TYPE: DIIS INTERPOLATION STEPS: 2 (START) 1 (STEP) LEVEL SHIFTS: 0.00 (CLOSED) 0.00 (OPEN) Orbital guess generated from atomic densities. Occupancy: 5 Molecular orbital dump at record 2100.2 ITERATION DDIFF GRAD ENERGY 2-EL.EN. DIPOLE MOMENTS DIIS 1 0.000D+00 0.000D+00 -40.03634730 47.248244 -0.003353 0.000005 -0.010652 0 2 0.000D+00 0.570D-01 -40.14598536 52.767591 0.002644 0.000002 0.008148 1 3 0.549D-01 0.260D-01 -40.17197596 51.002668 0.001161 0.000003 0.003548 2 4 0.168D-01 0.141D-02 -40.17215454 51.042420 0.001274 0.000003 0.003923 3 5 0.347D-02 0.237D-03 -40.17215953 51.041868 0.001274 0.000003 0.003930 4 6 0.664D-03 0.185D-04 -40.17215956 51.041284 0.001270 0.000003 0.003915 5 7 0.209D-04 0.238D-05 -40.17215956 51.041353 0.001269 0.000003 0.003912 5 8 0.456D-05 0.137D-06 -40.17215956 51.041350 0.001269 0.000003 0.003912 5 9 0.146D-06 0.231D-07 -40.17215956 51.041352 0.001269 0.000003 0.003912 0 Final occupancy: 5 !RHF STATE 1.1 ENERGY -40.172159556913 Nuclear energy 12.84620029 One-electron energy -78.53903560 Two-electron energy 25.52067575 Virial quotient -1.00573623 !RHF STATE 1.1 DIPOLE MOMENT 0.00126858 0.00000253 0.00391176 Dipole moment /Debye 0.00322419 0.00000642 0.00994206 ELECTRON ORBITALS ================= Orb Occ Energy Couls-En Coefficients 1 1s 1 1s 1 1s 1 2px 1 2py 1 2pz 1 2px 1 2py 1 2pz 2 1s 2 1s 3 1s 3 1s 4 1s 4 1s 5 1s 5 1s 1.1 2 -11.2312 -31.0184 0.996237 0.024711 -0.014973 0.000008 0.000000 0.000023 -0.000022 0.000000 -0.000069 -0.000066 0.002767 -0.000066 0.002767 -0.000065 0.002767 -0.000058 0.002802 2.1 2 -0.9262 -6.2984 -0.195144 0.369017 0.404768 0.000635 0.000002 0.001976 0.000419 0.000000 0.001302 0.129289 0.036089 0.129290 0.036089 0.129304 0.036092 0.129836 0.035832 3.1 2 -0.5328 -5.2394 0.000311 -0.000717 -0.000550 0.427226 -0.000191 -0.002471 0.229779 -0.000102 -0.001487 -0.161443 -0.139634 -0.161607 -0.139774 0.237011 0.204557 0.086052 0.074459 4.1 2 -0.5306 -5.2337 0.000000 0.000000 -0.000002 0.000189 0.427269 -0.000116 0.000103 0.230655 -0.000062 -0.240654 -0.209225 0.240549 0.209133 0.000087 0.000075 0.000017 0.000015 5.1 2 -0.5281 -5.2285 0.000979 -0.002275 -0.001691 0.002444 0.000114 0.427261 0.001159 0.000062 0.231068 -0.053337 -0.047300 -0.053317 -0.047282 -0.175055 -0.153906 0.281756 0.247189 6.1 0 0.2431 -2.7331 -0.156810 0.116447 2.497636 -0.000003 -0.000003 -0.000253 0.002343 -0.000007 0.006504 -0.009864 -0.966566 -0.009862 -0.966553 -0.009898 -0.966982 -0.007795 -0.960516 7.1 0 0.3079 -2.8298 0.000389 0.001167 -0.017532 0.023741 -0.000116 -0.313561 0.107614 -0.000515 -1.384274 -0.014281 -0.239314 -0.014261 -0.238908 -0.063442 -1.195896 0.087269 1.705514 8.1 0 0.3086 -2.8228 -0.000001 0.000000 0.000033 0.000223 0.314672 -0.000099 0.000990 1.401338 -0.000444 0.075513 1.501787 -0.075456 -1.500660 -0.000048 -0.000992 -0.000007 -0.000179 9.1 0 0.3096 -2.8169 0.000117 0.000511 -0.006372 -0.314751 0.000213 -0.024113 -1.408462 0.000956 -0.105112 -0.050879 -1.033302 -0.050968 -1.035084 0.066952 1.396211 0.033034 0.683697 10.1 0 0.7628 -2.6695 -0.000128 0.008659 -0.003868 0.006532 0.000035 -0.826113 -0.011399 -0.000066 1.433808 0.096073 0.023496 0.096309 0.023576 0.326495 0.093111 -0.505418 -0.156847 11.1 0 0.7643 -2.6684 0.000000 -0.000002 0.000014 0.000413 -0.827168 -0.000033 -0.000743 1.456016 0.000052 0.435695 0.150195 -0.436002 -0.150325 0.000344 0.000124 -0.000039 -0.000007 12.1 0 0.7660 -2.6659 -0.000035 0.002833 -0.001316 -0.827803 -0.000416 -0.006277 1.477641 0.000725 0.011160 0.295261 0.112704 0.294735 0.112524 -0.423744 -0.166444 -0.161731 -0.064250 13.1 0 1.1616 -2.0096 0.099760 -0.862406 1.199634 0.025189 0.000113 0.100386 -0.033688 -0.000138 -0.131257 0.657128 -0.612739 0.656934 -0.612450 0.667440 -0.628426 0.491886 -0.346494 14.1 0 1.1779 -2.1600 -0.011293 0.136495 -0.213904 -0.022829 0.000210 0.815210 0.027037 -0.000248 -0.964630 0.094006 -0.167302 0.093958 -0.167234 0.561419 -0.862977 -1.035764 1.514646 15.1 0 1.1800 -2.1603 -0.000014 0.000117 -0.000161 0.000640 0.822288 -0.000208 -0.000753 -0.970136 0.000247 0.840078 -1.244692 -0.839493 1.243731 -0.000657 0.000918 -0.000267 0.000339 16.1 0 1.1822 -2.1606 -0.003048 0.041005 -0.066048 0.822248 -0.000643 0.019625 -0.966706 0.000757 -0.023140 0.549616 -0.815675 0.550756 -0.817365 -0.829112 1.216511 -0.349119 0.509275 17.1 0 1.3138 -1.5362 -0.063545 -2.190790 4.772445 0.001687 0.000000 0.004182 0.008226 0.000011 0.026775 -0.305327 -0.859085 -0.305318 -0.859108 -0.306232 -0.858167 -0.336171 -0.849917 ********************************************************************************************************************************** DATASETS * FILE NREC LENGTH (MB) RECORD NAMES 1 19 1.91 500 610 700 900 950 970 1000 1100 1400 1410 VAR BASINP GEOM SYMINP ZMAT AOBASIS BASIS S T V 1200 1210 1080 1600 129 960 1650 1300 1700 H0 H01 AOSYM SMH P2S ABASIS MOLCAS ERIS OPER 2 3 0.33 700 1000 2100 GEOM BASIS RHF PROGRAMS * TOTAL HF INT CPU TIMES * 0.19 0.01 0.03 REAL TIME * 0.28 SEC DISK USED * 6.91 MB ********************************************************************************************************************************** Computing numerical hessian using default procedure for command HF-SCF Using no symmetry Running default procedure: HF-SCF000 *** Long output written to logfile /data/banck/qcl/methane.log *** Numerically approximating hessian using central gradient differences Task list generated. Total number of displacements: 30 5 tasks completed, CPU= 1.20 sec, Elapsed= 1.28 sec 10 tasks completed, CPU= 2.36 sec, Elapsed= 2.50 sec 15 tasks completed, CPU= 3.50 sec, Elapsed= 3.72 sec 20 tasks completed, CPU= 4.62 sec, Elapsed= 4.94 sec 25 tasks completed, CPU= 5.77 sec, Elapsed= 6.15 sec 30 tasks completed, CPU= 6.88 sec, Elapsed= 7.36 sec Numerical HF-SCF000 hessian completed. CPU-time: 6.88 sec, Elapsed: 7.36 sec HF-SCF hessian saved to record 5300.2 FREQUENCIES * CALCULATION OF HARMONIC VIBRATIONAL SPECTRA FOR HF-SCF000 Permanent Dipole Moment [debye] 1- 3 0.003224 0.000006 0.009942 Dipole Moment Norm 0.0104518 [debye] Dipole Moment Derivatives [debye/ang] 1 2 3 4 5 6 7 8 1 0.3480906 0.0000150 -0.0069779 -0.0475199 -0.5660399 -0.1130791 -0.0472731 0.5658818 2 0.0000149 0.3538007 0.0000012 -0.5678390 -0.5096741 -0.1785328 0.5676759 -0.5097402 3 -0.0068286 0.0000011 0.3341130 -0.1196940 -0.1878193 0.3092642 -0.1199099 0.1882133 9 10 11 12 13 14 15 1 -0.1132956 -0.4770212 0.0002179 0.6027714 0.2237078 -0.0000748 -0.3694199 2 0.1789241 0.0002236 0.3292630 -0.0001612 -0.0000754 0.3363566 -0.0002313 3 0.3091007 0.6215834 -0.0001621 -0.1000384 -0.3751481 -0.0002332 -0.8524623 Projecting out rotations and translations Low Vibration Wavenumber Nr [1/cm] 1 0.00 2 0.00 3 0.00 4 0.00 5 0.00 6 0.00 Vibration Wavenumber Nr [1/cm] 1 1575.49 2 1581.18 3 1583.92 4 1718.74 5 1723.20 6 2710.51 7 2770.44 8 2775.22 9 2778.76 FREQUENCIES * CALCULATION OF NORMAL MODES FOR HF-SCF000 Atomic Coordinates Nr Atom Charge X Y Z 1 C 6.00 -0.001738548 0.000000000 -0.005461308 2 H 1.00 -1.189979352 -1.759240409 -0.371652410 3 H 1.00 -1.189601407 1.759315998 -0.372446095 4 H 1.00 1.741306909 -0.000472431 -1.271464337 5 H 1.00 0.648667343 0.000396842 2.048311794 Frequencies dumped to record 5400.2 Molecule is not in standard orientation! Symmetry information for normal modes not available! Normal Modes 1 A 2 A 3 A 4 A 5 A Wavenumbers [cm-1] 1575.49 1581.18 1583.92 1718.74 1723.20 Intensities [km/mol] 13.76 12.30 12.40 0.00 0.00 Intensities [relative] 26.50 23.70 23.89 0.01 0.01 GX1 -0.01111 -0.00008 -0.11582 0.00000 -0.00201 GY1 -0.00003 -0.11644 0.00008 -0.00212 0.00000 GZ1 -0.11641 0.00004 0.01095 0.00000 0.00062 GX2 -0.02591 -0.28560 0.37854 0.14805 -0.38051 GY2 -0.11342 0.13971 -0.27664 0.00102 0.28228 GZ2 0.52713 -0.08441 -0.11016 -0.47371 -0.12827 GX3 -0.02584 0.28606 0.37827 -0.14808 -0.38056 GY3 0.11369 0.13998 0.27636 0.00125 -0.28225 GZ3 0.52710 0.08414 -0.11038 0.47369 -0.12818 GX4 0.31234 0.00010 0.11904 -0.00004 0.29713 GY4 0.00009 0.56513 -0.00027 -0.48806 0.00008 GZ4 0.36261 -0.00001 0.26264 0.00013 0.40102 GX5 -0.12820 0.00035 0.50429 0.00008 0.48790 GY5 0.00005 0.54267 -0.00040 0.51110 -0.00011 GZ5 -0.02969 -0.00022 -0.17258 -0.00012 -0.15192 6 A 7 A 8 A 9 A Wavenumbers [cm-1] 2710.51 2770.44 2775.22 2778.76 Intensities [km/mol] 0.01 51.91 48.92 48.64 Intensities [relative] 0.02 100.00 94.24 93.70 GX1 0.00058 -0.00199 -0.00044 -0.08589 GY1 0.00002 -0.00012 -0.08579 0.00044 GZ1 0.00203 -0.08511 0.00013 0.00226 GX2 -0.27750 0.08075 0.38347 0.22331 GY2 -0.41405 0.12248 0.54072 0.37262 GZ2 -0.08726 -0.00232 0.12066 0.07849 GX3 -0.27720 0.07984 -0.38144 0.22706 GY3 0.41377 -0.12126 0.53750 -0.37802 GZ3 -0.08738 -0.00254 -0.12016 0.07987 GX4 0.40734 -0.38711 0.00323 0.53364 GY4 -0.00010 0.00007 -0.02599 -0.00002 GZ4 -0.30121 0.25318 -0.00244 -0.41277 GX5 0.14049 0.25027 -0.00006 0.03946 GY5 0.00010 0.00011 -0.02986 0.00020 GZ5 0.45160 0.76587 0.00039 0.22746 Normal Modes of low/zero frequencies 1 2 3 4 5 Wavenumbers [cm-1] 0.00 0.00 0.00 0.00 0.00 Intensities [km/mol] 0.00 0.00 0.00 0.00 0.00 Intensities [relative] 0.00 0.00 0.00 0.00 0.00 GX1 0.21447 -0.03004 0.06070 0.08479 -0.06526 GY1 0.11601 0.09285 -0.08687 -0.09725 0.10105 GZ1 -0.03774 0.17236 -0.00243 0.17284 0.00964 GX2 0.29079 0.13068 -0.04717 0.02314 0.04754 GY2 0.06882 -0.03016 -0.12375 -0.03669 -0.02987 GZ2 -0.05866 0.24181 0.52478 0.08193 0.27259 GX3 0.14318 -0.11042 0.09910 0.08206 -0.34082 GY3 0.06884 -0.03022 -0.12395 -0.03661 -0.02983 GZ3 -0.03313 -0.15743 -0.30450 0.47239 0.27416 GX4 0.22318 0.10871 -0.05928 -0.02638 -0.34624 GY4 0.19832 0.06867 -0.45774 0.01403 0.29395 GZ4 -0.02579 0.36340 -0.16748 0.01974 -0.37730 GX5 0.20037 -0.25509 0.25533 0.26513 0.39062 GY5 0.12840 0.37049 0.37010 -0.33608 0.17184 GZ5 -0.03328 0.24358 -0.06415 0.11578 -0.13475 6 Wavenumbers [cm-1] 0.00 Intensities [km/mol] 0.00 Intensities [relative] 0.00 GX1 0.01734 GY1 -0.11419 GZ1 -0.03502 GX2 0.46128 GY2 -0.40333 GZ2 -0.08649 GX3 -0.39255 GY3 -0.40324 GZ3 -0.09399 GX4 0.07629 GY4 0.30610 GZ4 0.04600 GX5 -0.07822 GY5 0.04804 GZ5 -0.00479 Zero point energy: 0.04378058 [H] 9608.73 [1/CM] 114.95 [KJ/MOL] Recomputing wavefunction at initial geometry ********************************************************************************************************************************** DATASETS * FILE NREC LENGTH (MB) RECORD NAMES 1 19 1.91 500 610 700 900 950 970 1000 1100 1400 1410 VAR BASINP GEOM SYMINP ZMAT AOBASIS BASIS S T V 1200 1210 1080 1600 129 960 1650 1300 1700 H0 H01 AOSYM SMH P2S ABASIS MOLCAS ERIS OPER 2 6 0.35 700 1000 2100 5300 5400 5450 GEOM BASIS RHF HESS FREQ NMOD PROGRAMS * TOTAL FREQ HF INT CPU TIMES * 5.98 5.78 0.01 0.03 REAL TIME * 7.77 SEC DISK USED * 6.97 MB ********************************************************************************************************************************** HF-SCF -40.17215956 ********************************************************************************************************************************** Variable memory released avogadro-1.1.1/testfiles/thiophene.cml0000644000175000001440000000447612250371054017221 0ustar marcususers Thiophene 84.1396 84.0033711 -38 84 avogadro-1.1.1/testfiles/basic2.drawlog0000644000175000001440000000701212250371054017252 0ustar marcususers"Avogadro version: 0.9.7 Git: 1e37271 LibAvogadro version: 0.9.7 Git: 1e37271" Locale: "en_US" Libavogadro translations not found. "System has OpenGL support." "About to test OpenGL capabilities." "OpenGL capabilities found: " "Double Buffering." "Direct Rendering." "Antialiasing." Searching for plugins in "/usr/local/bin/../lib/avogadro/colors" Searching for plugins in "/usr/local/bin/../lib/avogadro/engines" Searching for plugins in "/usr/local/bin/../lib/avogadro/extensions" Searching for plugins in "/usr/local/bin/../lib/avogadro/tools" Searching for plugins in "/usr/local/bin/../lib/avogadro/contrib" QStackedLayout::setCurrentWidget: Widget 0x1775e40 not contained in stack GLWidget initialisation... GLWidget initialised... createObjects() setOBMol called. Molecule::addAtom( 0 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 1 ) Molecule::addAtom( 2 ) Molecule::addAtom( 3 ) Molecule::addAtom( 4 ) AddAtomDrawCommand::redo(id = 0 ) Molecule::addAtom( 5 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 6 ) Molecule::addAtom( 7 ) Molecule::addAtom( 8 ) Molecule::addAtom( 9 ) AddAtomDrawCommand::redo(id = 5 ) Molecule::addAtom( 10 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 11 ) Molecule::addAtom( 12 ) Molecule::addAtom( 13 ) Molecule::addAtom( 14 ) AddAtomDrawCommand::redo(id = 10 ) Molecule::addAtom( 15 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 16 ) Molecule::addAtom( 17 ) Molecule::addAtom( 18 ) Molecule::addAtom( 19 ) AddAtomDrawCommand::redo(id = 15 ) Molecule::addAtom( 20 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 21 ) Molecule::addAtom( 22 ) Molecule::addAtom( 23 ) Molecule::addAtom( 24 ) AddAtomDrawCommand::redo(id = 20 ) Molecule::addAtom( 25 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 26 ) Molecule::addAtom( 27 ) Molecule::addAtom( 28 ) Molecule::addAtom( 29 ) AddAtomDrawCommand::redo(id = 25 ) Molecule::addAtom( 30 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 31 ) Molecule::addAtom( 32 ) Molecule::addAtom( 33 ) Molecule::addAtom( 34 ) AddAtomDrawCommand::redo(id = 30 ) Molecule::addAtom( 35 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 36 ) Molecule::addAtom( 37 ) Molecule::addAtom( 38 ) Molecule::addAtom( 39 ) AddAtomDrawCommand::redo(id = 35 ) Molecule::addAtom( 40 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 41 ) Molecule::addAtom( 42 ) Molecule::addAtom( 43 ) Molecule::addAtom( 44 ) AddAtomDrawCommand::redo(id = 40 ) Molecule::addAtom( 45 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 46 ) Molecule::addAtom( 47 ) Molecule::addAtom( 48 ) Molecule::addAtom( 49 ) AddAtomDrawCommand::redo(id = 45 ) avogadro-1.1.1/testfiles/tyr-33-conf2.pdb0000755000175000001440000001757712250371054017307 0ustar marcususersREMARK FILENAME="if4.pdb" REMARK TOPH19.pep -MACRO for protein sequence REMARK DATE:24-Jul-03 04:34:01 created by user: ATOM 1 CB THR 1 -0.469 0.149 6.684 1.00 58.74 ATOM 2 OG1 THR 1 -0.762 1.141 5.705 1.00 59.44 ATOM 3 CG2 THR 1 0.838 0.607 7.357 1.00 56.36 ATOM 4 C THR 1 -0.169 -2.375 6.784 1.00 60.15 ATOM 5 O THR 1 0.997 -2.760 6.927 1.00 60.24 ATOM 6 N THR 1 -1.790 -1.355 5.154 1.00 57.04 ATOM 7 CA THR 1 -0.491 -1.175 5.868 1.00 58.80 ATOM 8 N GLU 2 -1.215 -2.996 7.330 1.00 61.42 ATOM 9 CA GLU 2 -1.225 -4.034 8.365 1.00 62.58 ATOM 10 CB GLU 2 -2.593 -4.138 9.023 1.00 62.78 ATOM 11 CG GLU 2 -2.845 -3.202 10.182 1.00 64.15 ATOM 12 CD GLU 2 -4.241 -3.371 10.780 1.00 66.32 ATOM 13 OE1 GLU 2 -4.621 -4.498 11.171 1.00 63.49 ATOM 14 OE2 GLU 2 -4.956 -2.351 10.869 1.00 68.48 ATOM 15 C GLU 2 -0.857 -5.428 7.841 1.00 63.06 ATOM 16 O GLU 2 -0.019 -6.117 8.427 1.00 64.05 ATOM 17 N GLN 3 -1.501 -5.831 6.746 1.00 62.51 ATOM 18 CA GLN 3 -1.322 -7.083 6.003 1.00 62.38 ATOM 19 CB GLN 3 -2.416 -7.269 4.978 1.00 62.52 ATOM 20 CG GLN 3 -3.637 -7.988 5.485 1.00 63.68 ATOM 21 CD GLN 3 -4.834 -7.795 4.572 1.00 64.60 ATOM 22 OE1 GLN 3 -5.391 -6.707 4.439 1.00 65.05 ATOM 23 NE2 GLN 3 -5.222 -8.871 3.901 1.00 62.66 ATOM 24 C GLN 3 -0.007 -7.120 5.233 1.00 62.30 ATOM 25 O GLN 3 0.773 -8.068 5.363 1.00 61.92 ATOM 26 N GLU 4 0.214 -6.086 4.422 1.00 63.02 ATOM 27 CA GLU 4 1.358 -5.730 3.579 1.00 63.11 ATOM 28 CB GLU 4 1.701 -6.692 2.394 1.00 62.88 ATOM 29 CG GLU 4 3.179 -7.113 2.554 1.00 65.36 ATOM 30 CD GLU 4 3.930 -7.155 1.229 1.00 68.25 ATOM 31 OE1 GLU 4 3.589 -7.943 0.314 1.00 68.16 ATOM 32 OE2 GLU 4 4.903 -6.376 1.130 1.00 68.31 ATOM 33 C GLU 4 1.286 -4.285 3.085 1.00 62.69 ATOM 34 O GLU 4 0.192 -3.763 2.785 1.00 63.03 ATOM 35 N ARG 5 2.459 -3.679 2.914 1.00 62.28 ATOM 36 CA ARG 5 2.759 -2.248 2.926 1.00 62.48 ATOM 37 CB ARG 5 4.127 -1.886 3.521 1.00 63.42 ATOM 38 CG ARG 5 4.454 -2.177 4.959 1.00 64.90 ATOM 39 CD ARG 5 5.033 -3.552 5.140 1.00 70.46 ATOM 40 NE ARG 5 4.233 -4.343 6.075 1.00 77.09 ATOM 41 CZ ARG 5 4.327 -4.292 7.401 1.00 81.60 ATOM 42 NH1 ARG 5 5.184 -3.493 8.107 1.00 80.19 ATOM 43 NH2 ARG 5 3.509 -5.131 8.057 1.00 83.51 ATOM 44 C ARG 5 2.634 -1.626 1.557 1.00 60.67 ATOM 45 O ARG 5 3.353 -1.998 0.617 1.00 60.49 ATOM 46 N LEU 6 1.675 -0.711 1.428 1.00 58.52 ATOM 47 CA LEU 6 1.419 -0.070 0.149 1.00 57.01 ATOM 48 CB LEU 6 -0.069 -0.275 -0.373 1.00 56.14 ATOM 49 CG LEU 6 -0.718 -1.726 -0.509 1.00 58.23 ATOM 50 CD1 LEU 6 -2.131 -1.661 -1.056 1.00 58.59 ATOM 51 CD2 LEU 6 0.128 -2.628 -1.373 1.00 60.72 ATOM 52 C LEU 6 2.185 1.245 0.030 1.00 55.58 ATOM 53 O LEU 6 2.198 2.063 0.953 1.00 56.07 ATOM 54 N TYR 7 3.026 1.299 -1.001 1.00 53.70 ATOM 55 CA TYR 7 3.342 2.469 -1.812 1.00 53.28 ATOM 56 CB TYR 7 4.612 2.171 -2.686 1.00 52.42 ATOM 57 CG TYR 7 4.488 0.992 -3.641 1.00 52.43 ATOM 58 CD1 TYR 7 4.142 1.203 -4.991 1.00 49.55 ATOM 59 CE1 TYR 7 4.112 0.131 -5.907 1.00 49.76 ATOM 60 CD2 TYR 7 4.745 -0.326 -3.211 1.00 49.39 ATOM 61 CE2 TYR 7 4.719 -1.404 -4.114 1.00 49.79 ATOM 62 CZ TYR 7 4.430 -1.156 -5.462 1.00 52.85 ATOM 63 OH TYR 7 4.458 -2.198 -6.363 1.00 54.35 ATOM 64 C TYR 7 2.104 2.994 -2.578 1.00 52.98 ATOM 65 O TYR 7 1.124 2.261 -2.765 1.00 52.35 ATOM 66 N GLY 8 2.194 4.225 -3.075 1.00 51.92 ATOM 67 CA GLY 8 1.012 5.068 -3.185 1.00 52.68 ATOM 68 C GLY 8 0.148 4.866 -4.421 1.00 52.51 ATOM 69 O GLY 8 -1.076 5.048 -4.346 1.00 52.71 ATOM 70 N LEU 9 0.755 4.486 -5.545 1.00 53.00 ATOM 71 CA LEU 9 0.124 4.523 -6.868 1.00 51.50 ATOM 72 CB LEU 9 1.105 4.953 -8.005 1.00 50.63 ATOM 73 CG LEU 9 1.799 6.344 -8.024 1.00 48.91 ATOM 74 CD1 LEU 9 2.516 6.571 -9.348 1.00 42.08 ATOM 75 CD2 LEU 9 0.802 7.476 -7.762 1.00 49.24 ATOM 76 C LEU 9 -0.692 3.254 -7.232 1.00 52.31 ATOM 77 O LEU 9 -1.586 3.310 -8.092 1.00 53.23 ATOM 78 N LYS 10 -0.419 2.148 -6.539 1.00 53.95 ATOM 79 CA LYS 10 -1.036 0.826 -6.668 1.00 54.93 ATOM 80 CB LYS 10 0.039 -0.222 -6.415 1.00 54.17 ATOM 81 CG LYS 10 -0.069 -1.408 -7.368 1.00 52.45 ATOM 82 CD LYS 10 1.292 -1.985 -7.638 1.00 55.91 ATOM 83 CE LYS 10 1.208 -3.357 -8.247 1.00 56.29 ATOM 84 NZ LYS 10 2.577 -3.810 -8.401 1.00 53.95 ATOM 85 C LYS 10 -2.206 0.622 -5.687 1.00 56.37 ATOM 86 O LYS 10 -2.996 -0.325 -5.833 1.00 57.41 ATOM 87 N LEU 11 -2.325 1.529 -4.719 1.00 57.58 ATOM 88 CA LEU 11 -3.294 1.618 -3.626 1.00 58.56 ATOM 89 CB LEU 11 -2.568 2.514 -2.577 1.00 58.95 ATOM 90 CG LEU 11 -2.899 3.051 -1.168 1.00 60.41 ATOM 91 CD1 LEU 11 -3.575 2.002 -0.318 1.00 59.40 ATOM 92 CD2 LEU 11 -1.626 3.534 -0.498 1.00 59.22 ATOM 93 C LEU 11 -4.685 2.076 -4.114 1.00 58.46 ATOM 94 O LEU 11 -5.704 1.772 -3.476 1.00 58.54 ATOM 95 N LEU 12 -4.720 2.707 -5.291 1.00 58.59 ATOM 96 CA LEU 12 -5.878 3.081 -6.108 1.00 58.33 ATOM 97 CB LEU 12 -5.483 4.225 -7.078 1.00 58.23 ATOM 98 CG LEU 12 -6.421 4.924 -8.100 1.00 59.98 ATOM 99 CD1 LEU 12 -7.568 5.643 -7.402 1.00 59.24 ATOM 100 CD2 LEU 12 -5.632 5.898 -8.970 1.00 58.58 ATOM 101 C LEU 12 -6.474 1.836 -6.820 1.00 58.38 ATOM 102 O LEU 12 -5.847 1.298 -7.763 1.00 57.72 ATOM 103 OXT LEU 12 -7.567 1.405 -6.385 1.00 0.00 END avogadro-1.1.1/testfiles/VASP-8LiH/0000755000175000001440000000000012250371054016041 5ustar marcususersavogadro-1.1.1/testfiles/VASP-8LiH/INCAR0000644000175000001440000000124212250371054016617 0ustar marcususers/vasptmp/8LiH00001x00003/ # output options LWAVE = .FALSE. # write or don't write WAVECAR LCHARG = .FALSE. # write or don't write CHG and CHGCAR LELF = .FALSE. # write ELF # ionic relaxation NSW = 100 # number of ionic steps IBRION = 2 # 2=conjucate gradient, 1=Newton like ISIF = 3 # 3=relax everything, 2=relax ions only, 4=keep volume fixed # precision parameters EDIFF = 1E-3 # 1E-3 very low precision for pre-relaxation, use 1E-5 next EDIFFG = 1E-2 # usually: 10 * EDIFF PREC = med # precision low, med, high, accurate # electronic relaxation ISMEAR = -5 # -5 = tetraedon, 1..N = Methfessel ENCUT = 250 # cutoff energyavogadro-1.1.1/testfiles/VASP-8LiH/POSCAR0000644000175000001440000000041212250371054016750 0ustar marcususers/vasptmp/8LiH00001x00003/ 1 8.0805 0 0 -0.116332 8.77828 0 0.992084 3.07925 6.3039 3 3 Direct 0.679785 0.692614 0.771656 0.119499 0.209146 0.616555 0.580429 0.856556 0.169955 0.872621 0.959105 0.512481 0.716078 0.153642 0.08184 0.672454 0.351611 0.709959 avogadro-1.1.1/testfiles/VASP-8LiH/POTCAR0000644000175000001440000103106512250371054016762 0ustar marcususers PAW_PBE H 15Jun2001 1.00000000000000000 parameters from PSCTR are: VRHFIN =H: ultrasoft test LEXCH = PE EATOM = 12.4884 eV, .9179 Ry TITEL = PAW_PBE H 15Jun2001 LULTRA = F use ultrasoft PP ? IUNSCR = 0 unscreen: 0-lin 1-nonlin 2-no RPACOR = .000 partial core radius POMASS = 1.000; ZVAL = 1.000 mass and valenz RCORE = 1.100 outmost cutoff radius RWIGS = .700; RWIGS = .370 wigner-seitz radius (au A) ENMAX = 250.000; ENMIN = 200.000 eV RCLOC = .701 cutoff for local pot LCOR = T correct aug charges LPAW = T paw PP EAUG = 400.000 RMAX = 2.174 core radius for proj-oper RAUG = 1.200 factor for augmentation sphere RDEP = 1.112 radius for radial grids QCUT = -5.749; QGAM = 11.498 optimization parameters Description l E TYP RCUT TYP RCUT 0 .000 23 1.100 0 .500 23 1.100 1 -.300 23 1.100 Error from kinetic energy argument (eV) NDATA = 100 STEP = 20.000 1.050 5.77 5.50 5.37 5.11 4.99 4.75 4.52 4.40 4.19 3.98 3.88 3.68 3.49 3.31 3.14 2.98 2.83 2.68 2.54 2.35 2.22 2.11 1.94 1.84 1.74 1.61 1.48 1.40 1.29 1.19 1.09 1.01 .925 .851 .782 .719 .642 .590 .526 .482 .430 .382 .339 .301 .267 .236 .209 .178 .157 .133 .113 .988E-01 .832E-01 .697E-01 .562E-01 .467E-01 .386E-01 .305E-01 .239E-01 .186E-01 .143E-01 .109E-01 .820E-02 .580E-02 .425E-02 .291E-02 .195E-02 .130E-02 .808E-03 .544E-03 .368E-03 .278E-03 .239E-03 .227E-03 .225E-03 .224E-03 .218E-03 .204E-03 .181E-03 .156E-03 .127E-03 .983E-04 .735E-04 .520E-04 .369E-04 .274E-04 .225E-04 .204E-04 .201E-04 .200E-04 .193E-04 .178E-04 .151E-04 .121E-04 .914E-05 .676E-05 .512E-05 .437E-05 .412E-05 .410E-05 END of PSCTR-controll parameters local part 170.075338972103111 .24362014E+01 .24358776E+01 .24349034E+01 .24332803E+01 .24310092E+01 .24280916E+01 .24245291E+01 .24203236E+01 .24154775E+01 .24099934E+01 .24038744E+01 .23971237E+01 .23897448E+01 .23817417E+01 .23731185E+01 .23638797E+01 .23540303E+01 .23435753E+01 .23325205E+01 .23208719E+01 .23086358E+01 .22958191E+01 .22824292E+01 .22684739E+01 .22539615E+01 .22389008E+01 .22233012E+01 .22071725E+01 .21905251E+01 .21733698E+01 .21557180E+01 .21375815E+01 .21189728E+01 .20999045E+01 .20803901E+01 .20604433E+01 .20400783E+01 .20193098E+01 .19981530E+01 .19766233E+01 .19547368E+01 .19325099E+01 .19099593E+01 .18871022E+01 .18639563E+01 .18405393E+01 .18168695E+01 .17929653E+01 .17688456E+01 .17445292E+01 .17200353E+01 .16953833E+01 .16705925E+01 .16456826E+01 .16206730E+01 .15955834E+01 .15704334E+01 .15452424E+01 .15200300E+01 .14948154E+01 .14696177E+01 .14444560E+01 .14193490E+01 .13943151E+01 .13693726E+01 .13445393E+01 .13198328E+01 .12952701E+01 .12708678E+01 .12466424E+01 .12226093E+01 .11987839E+01 .11751809E+01 .11518142E+01 .11286973E+01 .11058432E+01 .10832641E+01 .10609715E+01 .10389763E+01 .10172888E+01 .99591859E+00 .97487444E+00 .95416455E+00 .93379638E+00 .91377668E+00 .89411151E+00 .87480622E+00 .85586546E+00 .83729320E+00 .81909271E+00 .80126658E+00 .78381676E+00 .76674451E+00 .75005047E+00 .73373467E+00 .71779651E+00 .70223483E+00 .68704791E+00 .67223347E+00 .65778875E+00 .64371048E+00 .62999494E+00 .61663797E+00 .60363502E+00 .59098113E+00 .57867102E+00 .56669905E+00 .55505933E+00 .54374564E+00 .53275156E+00 .52207044E+00 .51169543E+00 .50161951E+00 .49183555E+00 .48233628E+00 .47311433E+00 .46416231E+00 .45547274E+00 .44703816E+00 .43885109E+00 .43090410E+00 .42318978E+00 .41570079E+00 .40842989E+00 .40136991E+00 .39451381E+00 .38785467E+00 .38138569E+00 .37510024E+00 .36899182E+00 .36305411E+00 .35728094E+00 .35166635E+00 .34620452E+00 .34088983E+00 .33571685E+00 .33068034E+00 .32577524E+00 .32099669E+00 .31634002E+00 .31180074E+00 .30737455E+00 .30305735E+00 .29884520E+00 .29473435E+00 .29072120E+00 .28680234E+00 .28297450E+00 .27923458E+00 .27557961E+00 .27200675E+00 .26851333E+00 .26509675E+00 .26175457E+00 .25848445E+00 .25528414E+00 .25215150E+00 .24908447E+00 .24608110E+00 .24313948E+00 .24025781E+00 .23743435E+00 .23466739E+00 .23195532E+00 .22929657E+00 .22668961E+00 .22413294E+00 .22162514E+00 .21916479E+00 .21675052E+00 .21438096E+00 .21205481E+00 .20977077E+00 .20752755E+00 .20532390E+00 .20315859E+00 .20103040E+00 .19893814E+00 .19688062E+00 .19485670E+00 .19286524E+00 .19090512E+00 .18897526E+00 .18707458E+00 .18520204E+00 .18335663E+00 .18153734E+00 .17974321E+00 .17797331E+00 .17622672E+00 .17450255E+00 .17279997E+00 .17111816E+00 .16945632E+00 .16781371E+00 .16618963E+00 .16458338E+00 .16299434E+00 .16142191E+00 .15986552E+00 .15832466E+00 .15679886E+00 .15528768E+00 .15379072E+00 .15230764E+00 .15083813E+00 .14938190E+00 .14793874E+00 .14650844E+00 .14509085E+00 .14368585E+00 .14229334E+00 .14091328E+00 .13954564E+00 .13819043E+00 .13684766E+00 .13551742E+00 .13419977E+00 .13289483E+00 .13160272E+00 .13032359E+00 .12905759E+00 .12780491E+00 .12656573E+00 .12534026E+00 .12412869E+00 .12293123E+00 .12174810E+00 .12057951E+00 .11942567E+00 .11828678E+00 .11716304E+00 .11605464E+00 .11496176E+00 .11388455E+00 .11282318E+00 .11177778E+00 .11074846E+00 .10973534E+00 .10873848E+00 .10775795E+00 .10679380E+00 .10584604E+00 .10491467E+00 .10399966E+00 .10310097E+00 .10221852E+00 .10135222E+00 .10050193E+00 .99667521E-01 .98848812E-01 .98045610E-01 .97257693E-01 .96484818E-01 .95726721E-01 .94983114E-01 .94253688E-01 .93538118E-01 .92836058E-01 .92147147E-01 .91471008E-01 .90807251E-01 .90155473E-01 .89515259E-01 .88886186E-01 .88267823E-01 .87659730E-01 .87061463E-01 .86472576E-01 .85892617E-01 .85321137E-01 .84757684E-01 .84201811E-01 .83653075E-01 .83111036E-01 .82575264E-01 .82045336E-01 .81520841E-01 .81001378E-01 .80486561E-01 .79976017E-01 .79469391E-01 .78966343E-01 .78466551E-01 .77969714E-01 .77475548E-01 .76983789E-01 .76494196E-01 .76006547E-01 .75520640E-01 .75036298E-01 .74553362E-01 .74071698E-01 .73591192E-01 .73111751E-01 .72633306E-01 .72155806E-01 .71679226E-01 .71203557E-01 .70728814E-01 .70255029E-01 .69782255E-01 .69310562E-01 .68840038E-01 .68370785E-01 .67902923E-01 .67436582E-01 .66971909E-01 .66509058E-01 .66048193E-01 .65589489E-01 .65133125E-01 .64679287E-01 .64228165E-01 .63779950E-01 .63334838E-01 .62893023E-01 .62454699E-01 .62020056E-01 .61589284E-01 .61162566E-01 .60740080E-01 .60321998E-01 .59908482E-01 .59499688E-01 .59095759E-01 .58696829E-01 .58303019E-01 .57914437E-01 .57531179E-01 .57153325E-01 .56780941E-01 .56414080E-01 .56052776E-01 .55697051E-01 .55346911E-01 .55002345E-01 .54663330E-01 .54329825E-01 .54001778E-01 .53679121E-01 .53361772E-01 .53049639E-01 .52742615E-01 .52440582E-01 .52143413E-01 .51850967E-01 .51563097E-01 .51279646E-01 .51000448E-01 .50725332E-01 .50454120E-01 .50186631E-01 .49922677E-01 .49662070E-01 .49404621E-01 .49150139E-01 .48898433E-01 .48649318E-01 .48402607E-01 .48158120E-01 .47915682E-01 .47675123E-01 .47436279E-01 .47198994E-01 .46963120E-01 .46728517E-01 .46495056E-01 .46262615E-01 .46031082E-01 .45800356E-01 .45570346E-01 .45340974E-01 .45112168E-01 .44883870E-01 .44656034E-01 .44428622E-01 .44201609E-01 .43974979E-01 .43748729E-01 .43522863E-01 .43297398E-01 .43072356E-01 .42847773E-01 .42623687E-01 .42400148E-01 .42177211E-01 .41954936E-01 .41733389E-01 .41512638E-01 .41292759E-01 .41073825E-01 .40855915E-01 .40639107E-01 .40423480E-01 .40209113E-01 .39996083E-01 .39784467E-01 .39574338E-01 .39365768E-01 .39158824E-01 .38953571E-01 .38750068E-01 .38548369E-01 .38348524E-01 .38150577E-01 .37954564E-01 .37760517E-01 .37568459E-01 .37378409E-01 .37190377E-01 .37004365E-01 .36820371E-01 .36638385E-01 .36458389E-01 .36280361E-01 .36104271E-01 .35930085E-01 .35757763E-01 .35587260E-01 .35418528E-01 .35251513E-01 .35086161E-01 .34922411E-01 .34760202E-01 .34599471E-01 .34440154E-01 .34282183E-01 .34125493E-01 .33970018E-01 .33815692E-01 .33662450E-01 .33510229E-01 .33358967E-01 .33208607E-01 .33059091E-01 .32910369E-01 .32762392E-01 .32615116E-01 .32468502E-01 .32322514E-01 .32177123E-01 .32032305E-01 .31888040E-01 .31744314E-01 .31601118E-01 .31458448E-01 .31316305E-01 .31174695E-01 .31033628E-01 .30893118E-01 .30753185E-01 .30613849E-01 .30475138E-01 .30337080E-01 .30199707E-01 .30063054E-01 .29927157E-01 .29792054E-01 .29657785E-01 .29524391E-01 .29391914E-01 .29260393E-01 .29129870E-01 .29000386E-01 .28871977E-01 .28744682E-01 .28618533E-01 .28493563E-01 .28369799E-01 .28247267E-01 .28125988E-01 .28005978E-01 .27887251E-01 .27769815E-01 .27653673E-01 .27538825E-01 .27425267E-01 .27312987E-01 .27201973E-01 .27092204E-01 .26983659E-01 .26876308E-01 .26770122E-01 .26665063E-01 .26561093E-01 .26458168E-01 .26356243E-01 .26255267E-01 .26155188E-01 .26055952E-01 .25957501E-01 .25859777E-01 .25762721E-01 .25666272E-01 .25570369E-01 .25474953E-01 .25379963E-01 .25285341E-01 .25191030E-01 .25096975E-01 .25003124E-01 .24909426E-01 .24815836E-01 .24722309E-01 .24628806E-01 .24535292E-01 .24441734E-01 .24348105E-01 .24254383E-01 .24160548E-01 .24066588E-01 .23972492E-01 .23878257E-01 .23783883E-01 .23689376E-01 .23594746E-01 .23500008E-01 .23405183E-01 .23310294E-01 .23215370E-01 .23120444E-01 .23025552E-01 .22930734E-01 .22836034E-01 .22741496E-01 .22647170E-01 .22553106E-01 .22459354E-01 .22365969E-01 .22273002E-01 .22180508E-01 .22088541E-01 .21997153E-01 .21906396E-01 .21816321E-01 .21726978E-01 .21638413E-01 .21550672E-01 .21463798E-01 .21377829E-01 .21292803E-01 .21208752E-01 .21125706E-01 .21043689E-01 .20962724E-01 .20882826E-01 .20804009E-01 .20726279E-01 .20649639E-01 .20574088E-01 .20499619E-01 .20426221E-01 .20353878E-01 .20282570E-01 .20212273E-01 .20142958E-01 .20074594E-01 .20007144E-01 .19940570E-01 .19874830E-01 .19809881E-01 .19745674E-01 .19682161E-01 .19619292E-01 .19557016E-01 .19495278E-01 .19434025E-01 .19373204E-01 .19312759E-01 .19252638E-01 .19192787E-01 .19133153E-01 .19073687E-01 .19014339E-01 .18955061E-01 .18895811E-01 .18836545E-01 .18777226E-01 .18717817E-01 .18658287E-01 .18598608E-01 .18538755E-01 .18478707E-01 .18418448E-01 .18357965E-01 .18297249E-01 .18236296E-01 .18175103E-01 .18113676E-01 .18052019E-01 .17990144E-01 .17928065E-01 .17865798E-01 .17803364E-01 .17740787E-01 .17678093E-01 .17615311E-01 .17552473E-01 .17489613E-01 .17426765E-01 .17363967E-01 .17301257E-01 .17238676E-01 .17176261E-01 .17114054E-01 .17052095E-01 .16990423E-01 .16929076E-01 .16868093E-01 .16807509E-01 .16747359E-01 .16687677E-01 .16628492E-01 .16569834E-01 .16511727E-01 .16454196E-01 .16397260E-01 .16340939E-01 .16285245E-01 .16230192E-01 .16175788E-01 .16122038E-01 .16068945E-01 .16016508E-01 .15964723E-01 .15913583E-01 .15863077E-01 .15813193E-01 .15763915E-01 .15715223E-01 .15667097E-01 .15619513E-01 .15572445E-01 .15525865E-01 .15479745E-01 .15434054E-01 .15388760E-01 .15343832E-01 .15299235E-01 .15254938E-01 .15210907E-01 .15167109E-01 .15123513E-01 .15080086E-01 .15036798E-01 .14993620E-01 .14950524E-01 .14907482E-01 .14864470E-01 .14821466E-01 .14778448E-01 .14735397E-01 .14692297E-01 .14649135E-01 .14605898E-01 .14562578E-01 .14519170E-01 .14475669E-01 .14432075E-01 .14388390E-01 .14344620E-01 .14300770E-01 .14256852E-01 .14212876E-01 .14168858E-01 .14124813E-01 .14080759E-01 .14036716E-01 .13992704E-01 .13948744E-01 .13904861E-01 .13861077E-01 .13817417E-01 .13773905E-01 .13730566E-01 .13687424E-01 .13644504E-01 .13601828E-01 .13559421E-01 .13517305E-01 .13475499E-01 .13434025E-01 .13392900E-01 .13352141E-01 .13311762E-01 .13271776E-01 .13232194E-01 .13193023E-01 .13154271E-01 .13115939E-01 .13078030E-01 .13040541E-01 .13003469E-01 .12966809E-01 .12930551E-01 .12894684E-01 .12859198E-01 .12824076E-01 .12789303E-01 .12754860E-01 .12720728E-01 .12686885E-01 .12653310E-01 .12619980E-01 .12586869E-01 .12553954E-01 .12521209E-01 .12488608E-01 .12456125E-01 .12423736E-01 .12391414E-01 .12359135E-01 .12326875E-01 .12294611E-01 .12262322E-01 .12229987E-01 .12197588E-01 .12165107E-01 .12132530E-01 .12099845E-01 .12067039E-01 .12034106E-01 .12001039E-01 .11967834E-01 .11934490E-01 .11901007E-01 .11867388E-01 .11833640E-01 .11799769E-01 .11765785E-01 .11731701E-01 .11697529E-01 .11663285E-01 .11628987E-01 .11594654E-01 .11560306E-01 .11525965E-01 .11491653E-01 .11457395E-01 .11423215E-01 .11389138E-01 .11355190E-01 .11321396E-01 .11287781E-01 .11254372E-01 .11221190E-01 .11188262E-01 .11155607E-01 .11123249E-01 .11091206E-01 .11059497E-01 .11028138E-01 .10997144E-01 .10966526E-01 .10936296E-01 .10906462E-01 .10877031E-01 .10848005E-01 .10819386E-01 .10791175E-01 .10763368E-01 .10735959E-01 .10708942E-01 .10682308E-01 .10656043E-01 .10630134E-01 .10604565E-01 .10579320E-01 .10554377E-01 .10529717E-01 .10505316E-01 .10481151E-01 .10457198E-01 .10433432E-01 .10409826E-01 .10386353E-01 .10362989E-01 .10339706E-01 .10316479E-01 .10293282E-01 .10270090E-01 .10246881E-01 .10223630E-01 .10200318E-01 .10176923E-01 .10153427E-01 .10129813E-01 .10106067E-01 .10082175E-01 .10058125E-01 .10033908E-01 .10009517E-01 .99849470E-02 .99601953E-02 .99352612E-02 .99101463E-02 .98848545E-02 .98593919E-02 .98337665E-02 .98079885E-02 .97820701E-02 .97560250E-02 .97298688E-02 .97036184E-02 .96772922E-02 .96509095E-02 .96244907E-02 .95980570E-02 .95716299E-02 .95452315E-02 .95188841E-02 .94926098E-02 .94664308E-02 .94403689E-02 .94144453E-02 .93886805E-02 .93630945E-02 .93377060E-02 .93125328E-02 .92875914E-02 .92628967E-02 .92384625E-02 .92143006E-02 .91904213E-02 .91668330E-02 .91435421E-02 .91205533E-02 .90978692E-02 .90754904E-02 .90534156E-02 .90316417E-02 .90101634E-02 .89889740E-02 .89680649E-02 .89474259E-02 .89270455E-02 .89069108E-02 .88870075E-02 .88673206E-02 .88478340E-02 .88285306E-02 .88093931E-02 .87904035E-02 .87715433E-02 .87527941E-02 .87341373E-02 .87155544E-02 .86970273E-02 .86785381E-02 .86600696E-02 .86416053E-02 .86231295E-02 .86046275E-02 .85860859E-02 .85674924E-02 .85488359E-02 .85301069E-02 .85112976E-02 .84924014E-02 .84734135E-02 .84543306E-02 .84351512E-02 .84158751E-02 .83965039E-02 .83770404E-02 .83574891E-02 .83378556E-02 .83181470E-02 .82983714E-02 .82785380E-02 .82586571E-02 .82387396E-02 .82187976E-02 .81988434E-02 .81788902E-02 .81589514E-02 .81390408E-02 .81191723E-02 .80993599E-02 .80796175E-02 .80599587E-02 .80403966E-02 .80209440E-02 .80016128E-02 .79824143E-02 .79633589E-02 .79444558E-02 .79257132E-02 .79071383E-02 .78887368E-02 .78705134E-02 .78524714E-02 .78346127E-02 .78169381E-02 .77994470E-02 .77821376E-02 .77650070E-02 .77480510E-02 .77312643E-02 .77146407E-02 .76981729E-02 .76818528E-02 .76656712E-02 .76496184E-02 .76336840E-02 .76178570E-02 .76021258E-02 .75864786E-02 .75709034E-02 .75553878E-02 .75399197E-02 .75244870E-02 .75090779E-02 .74936810E-02 .74782852E-02 .74628804E-02 .74474569E-02 .74320060E-02 .74165197E-02 .74009913E-02 .73854149E-02 .73697855E-02 .73540996E-02 .73383544E-02 .73225484E-02 .73066812E-02 .72907534E-02 .72747667E-02 .72587238E-02 .72426286E-02 .72264857E-02 .72103007E-02 .71940802E-02 .71778314E-02 .71615624E-02 .71452819E-02 .71289992E-02 .71127242E-02 .70964670E-02 .70802382E-02 .70640484E-02 .70479084E-02 .70318289E-02 .70158203E-02 .69998930E-02 .69840567E-02 .69683208E-02 .69526941E-02 .69371846E-02 .69217996E-02 .69065456E-02 .68914283E-02 .68764525E-02 .68616219E-02 .68469395E-02 .68324071E-02 .68180258E-02 .68037956E-02 .67897154E-02 .67757835E-02 .67619969E-02 .67483521E-02 .67348443E-02 .67214681E-02 .67082174E-02 .66950852E-02 .66820638E-02 .66691451E-02 .66563204E-02 .66435804E-02 .66309157E-02 .66183167E-02 .66057734E-02 .65932760E-02 .65808147E-02 .65683801E-02 .65559628E-02 .65435539E-02 .65311451E-02 .65187283E-02 .65062963E-02 .64938424E-02 .64813606E-02 .64688457E-02 .64562931E-02 .64436993E-02 .64310612E-02 .64183768E-02 .64056447E-02 .63928645E-02 .63800366E-02 .63671620E-02 .63542428E-02 .63412817E-02 .63282821E-02 .63152483E-02 .63021850E-02 .62890978E-02 .62759926E-02 gradient corrections used for XC 5 atomic pseudo charge-density .10000000E+01 .99507271E+00 .98052707E+00 .95704568E+00 .92568373E+00 .88776197E+00 .84474519E+00 .79812454E+00 .74931839E+00 .69959965E+00 .65005176E+00 .60155049E+00 .55476631E+00 .51018081E+00 .46811134E+00 .42873901E+00 .39213661E+00 .35829426E+00 .32714172E+00 .29856681E+00 .27243019E+00 .24857680E+00 .22684440E+00 .20706984E+00 .18909338E+00 .17276170E+00 .15792970E+00 .14446161E+00 .13223147E+00 .12112317E+00 .11103029E+00 .10185572E+00 .93511120E-01 .85916368E-01 .78998979E-01 .72693482E-01 .66940833E-01 .61687848E-01 .56886662E-01 .52494222E-01 .48471823E-01 .44784672E-01 .41401500E-01 .38294196E-01 .35437484E-01 .32808628E-01 .30387169E-01 .28154684E-01 .26094570E-01 .24191859E-01 .22433042E-01 .20805917E-01 .19299454E-01 .17903669E-01 .16609521E-01 .15408813E-01 .14294104E-01 .13258631E-01 .12296247E-01 .11401351E-01 .10568838E-01 .97940488E-02 .90727274E-02 .84009799E-02 .77752401E-02 .71922384E-02 .66489733E-02 .61426860E-02 .56708380E-02 .52310903E-02 .48212852E-02 .44394299E-02 .40836813E-02 .37523330E-02 .34438029E-02 .31566227E-02 .28894275E-02 .26409475E-02 .24099995E-02 .21954800E-02 .19963586E-02 .18116720E-02 .16405185E-02 .14820533E-02 .13354843E-02 .12000677E-02 .10751046E-02 .95993763E-03 .85394823E-03 .75655356E-03 .66720425E-03 .58538213E-03 .51059817E-03 .44239062E-03 .38032333E-03 .32398416E-03 .27298357E-03 .22695335E-03 .18554538E-03 .14843056E-03 .11529779E-03 .85853038E-04 .59818462E-04 .36931630E-04 .16944763E-04 -.37595381E-06 -.15251024E-04 -.27888243E-04 -.38483272E-04 -.47220175E-04 -.54271929E-04 -.59800905E-04 -.63959330E-04 -.66889723E-04 -.68725313E-04 -.69590444E-04 -.69600960E-04 -.68864576E-04 -.67481239E-04 -.65543477E-04 -.63136733E-04 -.60339695E-04 -.57224613E-04 -.53857607E-04 -.50298972E-04 -.46603467E-04 -.42820603E-04 -.38994922E-04 -.35166267E-04 -.31370048E-04 -.27637498E-04 -.23995928E-04 -.20468965E-04 -.17076794E-04 -.13836387E-04 -.10761728E-04 -.78640256E-05 -.51519279E-05 -.26317220E-05 -.30753045E-06 .18185004E-05 .37460196E-05 .54762975E-05 .70120595E-05 .83573272E-05 .95172661E-05 .10498042E-04 .11306685E-04 .11950956E-04 .12439232E-04 .12780383E-04 .12983670E-04 .13058643E-04 .13015046E-04 .12862734E-04 .12611589E-04 .12271450E-04 .11852045E-04 .11362930E-04 .10813439E-04 .10212628E-04 .95692400E-05 .88916633E-05 .81879014E-05 .74655458E-05 .67317540E-05 .59932321E-05 .52562216E-05 .45264900E-05 .38093262E-05 .31095379E-05 .24314538E-05 .17789276E-05 .11553459E-05 .56363746E-06 .62860361E-08 -.51465587E-06 -.99755076E-06 -.14411585E-05 -.18446172E-05 -.22074232E-05 -.25294098E-05 -.28107253E-05 -.30518107E-05 -.32533765E-05 -.34163797E-05 -.35420010E-05 -.36316210E-05 -.36867978E-05 -.37092442E-05 -.37008058E-05 -.36634393E-05 -.35991916E-05 -.35101801E-05 -.33985729E-05 -.32665706E-05 -.31163891E-05 -.29502427E-05 -.27703292E-05 -.25788154E-05 -.23778235E-05 -.21694198E-05 -.19556029E-05 -.17382944E-05 -.15193295E-05 -.13004502E-05 -.10832978E-05 -.86940804E-06 -.66020623E-06 -.45700381E-06 -.26099585E-06 -.73259319E-07 .10524762E-06 .27368558E-06 .43133314E-06 .57758523E-06 .71195095E-06 .83405065E-06 .94361253E-06 .10404687E-05 .11245507E-05 .11958848E-05 .12545866E-05 .13008557E-05 .13349701E-05 .13572798E-05 .13682011E-05 .13682103E-05 .13578371E-05 .13376589E-05 .13082937E-05 .12703948E-05 .12246438E-05 .11717449E-05 .11124192E-05 .10473989E-05 .97742165E-06 .90322535E-06 .82554335E-06 .74509954E-06 .66260396E-06 .57874864E-06 .49420379E-06 .40961428E-06 .32559644E-06 .24273523E-06 .16158168E-06 .82650725E-07 .64193420E-08 -.66675006E-07 -.13623557E-06 -.20190722E-06 -.26337704E-06 -.32037461E-06 -.37267207E-06 -.42008379E-06 -.46246590E-06 -.49971552E-06 -.53176976E-06 -.55860449E-06 -.58023296E-06 -.59670421E-06 -.60810128E-06 -.61453936E-06 -.61616370E-06 -.61314749E-06 -.60568963E-06 -.59401238E-06 -.57835900E-06 -.55899130E-06 -.53618723E-06 -.51023836E-06 -.48144743E-06 -.45012594E-06 -.41659169E-06 -.38116644E-06 -.34417361E-06 -.30593601E-06 -.26677373E-06 -.22700203E-06 -.18692941E-06 -.14685577E-06 -.10707065E-06 -.67851656E-07 -.29462956E-07 .78460371E-08 .43841869E-07 .78308100E-07 .11104622E-06 .14187640E-06 .17063812E-06 .19719064E-06 .22141332E-06 .24320583E-06 .26248816E-06 .27920054E-06 .29330325E-06 .30477624E-06 .31361869E-06 .31984841E-06 .32350116E-06 .32462989E-06 .32330383E-06 .31960755E-06 .31363991E-06 .30551299E-06 .29535090E-06 .28328859E-06 .26947060E-06 .25404978E-06 .23718601E-06 .21904487E-06 .19979633E-06 .17961346E-06 .15867112E-06 .13714469E-06 .11520883E-06 .93036289E-07 .70796731E-07 .48655623E-07 .26773192E-07 .53034321E-08 -.15606815E-07 -.35818710E-07 -.55202190E-07 -.73636657E-07 -.91011591E-07 -.10722708E-06 -.12219424E-06 -.13583559E-06 -.14808531E-06 -.15888941E-06 -.16820580E-06 -.17600434E-06 -.18226672E-06 -.18698633E-06 -.19016799E-06 -.19182764E-06 -.19199199E-06 -.19069801E-06 -.18799248E-06 -.18393134E-06 -.17857916E-06 -.17200838E-06 -.16429864E-06 -.15553604E-06 -.14581236E-06 -.13522423E-06 -.12387234E-06 -.11186063E-06 -.99295420E-07 -.86284592E-07 -.72936778E-07 -.59360539E-07 -.45663574E-07 -.31951949E-07 -.18329361E-07 -.48964235E-08 .82499970E-08 .21017413E-07 .33318298E-07 .45070620E-07 .56198327E-07 .66631771E-07 .76308088E-07 .85171508E-07 .93173616E-07 .10027355E-06 .10643812E-06 .11164194E-06 .11586737E-06 .11910456E-06 .12135129E-06 .12261286E-06 .12290187E-06 .12223799E-06 .12064763E-06 .11816365E-06 .11482490E-06 .11067590E-06 .10576628E-06 .10015041E-06 .93886782E-07 .87037574E-07 .79668059E-07 .71846057E-07 .63641377E-07 .55125247E-07 .46369746E-07 .37447246E-07 .28429856E-07 .19388884E-07 .10394317E-07 .15143144E-08 -.71852683E-08 -.15641331E-07 -.23793951E-07 -.31586773E-07 -.38967365E-07 -.45887535E-07 -.52303613E-07 -.58176692E-07 -.63472823E-07 -.68163181E-07 -.72224176E-07 -.75637529E-07 -.78390305E-07 -.80474906E-07 -.81889021E-07 -.82635538E-07 -.82722421E-07 -.82162542E-07 -.80973496E-07 -.79177361E-07 -.76800449E-07 -.73873016E-07 -.70428956E-07 -.66505468E-07 -.62142704E-07 -.57383406E-07 -.52272528E-07 -.46856842E-07 -.41184549E-07 -.35304881E-07 -.29267697E-07 -.23123092E-07 -.16921005E-07 -.10710840E-07 -.45410942E-08 .15409998E-08 .74898096E-08 .13261626E-07 .18814964E-07 .24110837E-07 .29113012E-07 .33788238E-07 .38106441E-07 .42040899E-07 .45568385E-07 .48669278E-07 .51327647E-07 .53531304E-07 .55271827E-07 .56544555E-07 .57348552E-07 .57686544E-07 .57564830E-07 .56993164E-07 .55984617E-07 .54555411E-07 .52724736E-07 .50514546E-07 .47949336E-07 .45055904E-07 .41863103E-07 .38401576E-07 .34703487E-07 .30802244E-07 .26732212E-07 .22528434E-07 .18226344E-07 .13861483E-07 .94692252E-08 .50845018E-08 .74154045E-09 -.35263890E-08 -.76872150E-08 -.11710292E-07 -.15566612E-07 -.19229002E-07 -.22672300E-07 -.25873514E-07 -.28811965E-07 -.31469400E-07 -.33830096E-07 -.35880933E-07 -.37611450E-07 -.39013880E-07 -.40083159E-07 -.40816919E-07 -.41215460E-07 -.41281694E-07 -.41021083E-07 -.40441543E-07 -.39553345E-07 -.38368992E-07 -.36903080E-07 -.35172145E-07 -.33194508E-07 -.30990091E-07 -.28580239E-07 -.25987530E-07 -.23235572E-07 -.20348804E-07 -.17352293E-07 -.14271522E-07 -.11132191E-07 -.79600055E-08 -.47804825E-08 -.16187510E-08 .15006360E-08 .45538830E-08 .75181247E-08 .10371588E-07 .13093743E-07 .15665442E-07 .18069046E-07 .20288532E-07 .22309597E-07 .24119735E-07 .25708308E-07 .27066592E-07 .28187817E-07 .29067186E-07 .29701877E-07 .30091034E-07 .30235739E-07 .30138971E-07 .29805553E-07 .29242080E-07 .28456841E-07 .27459724E-07 .26262115E-07 .24876780E-07 .23317746E-07 .21600169E-07 .19740198E-07 .17754832E-07 .15661774E-07 .13479279E-07 .11226007E-07 .89208642E-08 .65828583E-08 .42309438E-08 .18838765E-08 -.43992991E-09 -.27225420E-08 -.49466390E-08 -.70956382E-08 -.91538126E-08 -.11106400E-07 -.12939703E-07 -.14641178E-07 -.16199517E-07 -.17604714E-07 -.18848124E-07 -.19922509E-07 -.20822071E-07 -.21542475E-07 -.22080862E-07 -.22435848E-07 -.22607506E-07 -.22597352E-07 -.22408303E-07 -.22044638E-07 -.21511939E-07 -.20817030E-07 -.19967904E-07 -.18973643E-07 -.17844329E-07 -.16590951E-07 -.15225305E-07 -.13759890E-07 -.12207798E-07 -.10582606E-07 -.88982573E-08 -.71689525E-08 -.54090307E-08 -.36328569E-08 -.18547086E-08 -.88665773E-10 .16514966E-08 .33524119E-08 .50012204E-08 .65856624E-08 .80941656E-08 .95159258E-08 .10840980E-07 .12060272E-07 .13165711E-07 .14150221E-07 .15007781E-07 .15733456E-07 .16323422E-07 .16774981E-07 .17086563E-07 .17257724E-07 .17289133E-07 .17182553E-07 .16940809E-07 .16567751E-07 .16068212E-07 .15447953E-07 .14713610E-07 .13872622E-07 .12933168E-07 .11904090E-07 .10794814E-07 .96152693E-08 .83758015E-08 .70870874E-08 .57600455E-08 .44057470E-08 .30353267E-08 .16598943E-08 .29044758E-09 -.10622131E-08 -.23875669E-08 -.36754517E-08 -.49161395E-08 -.61004073E-08 -.72196032E-08 -.82657067E-08 -.92313844E-08 -.10110038E-07 -.10895847E-07 -.11583805E-07 -.12169748E-07 -.12650377E-07 -.13023271E-07 -.13286898E-07 -.13440612E-07 -.13484651E-07 -.13420119E-07 -.13248969E-07 -.12973978E-07 -.12598710E-07 -.12127482E-07 -.11565320E-07 -.10917907E-07 -.10191532E-07 -.93930343E-08 -.85297377E-08 -.76093904E-08 -.66400964E-08 -.56302471E-08 -.45884513E-08 -.35234635E-08 -.24441132E-08 -.13592332E-08 -.27758973E-09 .79218663E-09 .18416681E-08 .28626944E-08 .38474342E-08 .47884438E-08 .56787217E-08 .65117592E-08 .72815862E-08 .79828129E-08 .86106649E-08 .91610151E-08 .96304082E-08 .10016081E-07 .10315974E-07 .10528745E-07 .10653765E-07 .10691118E-07 .10641592E-07 .10506664E-07 .10288479E-07 .99898284E-08 .96141146E-08 .91653217E-08 .86479741E-08 .80670944E-08 .74281573E-08 .67370402E-08 .59999717E-08 .52234771E-08 .44143223E-08 .35794566E-08 .27259549E-08 .18609592E-08 .99161982E-09 .12503792E-09 -.73179140E-09 -.15720343E-08 -.23890714E-08 -.31765491E-08 -.39284280E-08 -.46390281E-08 -.53030707E-08 -.59157164E-08 -.64725996E-08 -.69698586E-08 -.74041611E-08 -.77727255E-08 -.80733368E-08 -.83043587E-08 -.84647400E-08 -.85540172E-08 -.85723113E-08 -.85203202E-08 -.83993067E-08 -.82110819E-08 -.79579845E-08 -.76428558E-08 -.72690109E-08 -.68402062E-08 -.63606042E-08 -.58347346E-08 -.52674539E-08 -.46639015E-08 -.40294548E-08 -.33696821E-08 -.26902957E-08 -.19971029E-08 -.12959581E-08 -.59271348E-09 .10682874E-09 .79696319E-09 .14721271E-08 .21269442E-08 .27562674E-08 .33552181E-08 .39192239E-08 .44440522E-08 .49258416E-08 .53611295E-08 .57468763E-08 .60804862E-08 .63598233E-08 .65832239E-08 .67495057E-08 .68579713E-08 .69084100E-08 .69010930E-08 .68367667E-08 .67166403E-08 .65423712E-08 .63160465E-08 .60401609E-08 .57175914E-08 .53515693E-08 .49456490E-08 .45036751E-08 .40297478E-08 .35281856E-08 .30034870E-08 .24602909E-08 .19033362E-08 .13374216E-08 .76736539E-09 .19796437E-09 -.36604563E-09 -.92002889E-09 -.14594873E-08 -.19800962E-08 -.24777384E-08 -.29485364E-08 -.33888824E-08 -.37954655E-08 -.41652962E-08 -.44957272E-08 -.47844718E-08 -.50296194E-08 -.52296472E-08 -.53834290E-08 -.54902396E-08 -.55497563E-08 -.55620571E-08 -.55276155E-08 -.54472926E-08 -.53223250E-08 -.51543102E-08 -.49451888E-08 -.46972238E-08 -.44129789E-08 -.40952926E-08 -.37472520E-08 -.33721631E-08 -.29735202E-08 -.25549742E-08 -.21203004E-08 -.16733651E-08 -.12180918E-08 -.75842715E-09 -.29830685E-09 .15837746E-09 .60781042E-09 .10462842E-08 .14702287E-08 .18762409E-08 .22611116E-08 .26218508E-08 .29557098E-08 .32602019E-08 .35331203E-08 .37725539E-08 .39769007E-08 .41448770E-08 .42755250E-08 .43682162E-08 .44226533E-08 .44388688E-08 .44172211E-08 .43583875E-08 .42633542E-08 .41334039E-08 .39701009E-08 .37752748E-08 .35510021E-08 .32995848E-08 .30235281E-08 .27255157E-08 .24083846E-08 .20750990E-08 .17287239E-08 .13723972E-08 .10093014E-08 .64263569E-09 .27558781E-09 -.88693196E-10 -.44712311E-09 -.79670817E-09 -.11345701E-08 -.14579696E-08 -.17643292E-08 -.20512523E-08 -.23165422E-08 -.25582176E-08 -.27745273E-08 -.29639629E-08 -.31252688E-08 -.32574502E-08 -.33597775E-08 -.34317892E-08 -.34732918E-08 -.34843591E-08 -.34653276E-08 -.34167910E-08 -.33395906E-08 -.32348049E-08 -.31037362E-08 -.29478970E-08 -.27689941E-08 -.25689115E-08 -.23496915E-08 -.21135138E-08 -.18626749E-08 -.15995659E-08 -.13266508E-08 -.10464445E-08 -.76149006E-09 -.47433548E-09 -.18751093E-09 .96493476E-10 .37524869E-09 .64640672E-09 .90771990E-09 .11570594E-08 .13924330E-08 .16120007E-08 .18140893E-08 .19972039E-08 .21600381E-08 .23014831E-08 .24206347E-08 .25167989E-08 .25894955E-08 .26384586E-08 .26636358E-08 .26651845E-08 .26434680E-08 .25990498E-08 .25326857E-08 .24453146E-08 .23380470E-08 .22121516E-08 .20690420E-08 .19102614E-08 .17374683E-08 .15524196E-08 .13569538E-08 .11529723E-08 .94242133E-09 .72727333E-09 .50950961E-09 .29110291E-09 .74000084E-10 -.13989522E-09 -.34873968E-09 -.55076632E-09 -.74429920E-09 -.92776648E-09 -.10997124E-08 -.12588083E-08 -.14038632E-08 -.15338326E-08 -.16478265E-08 -.17451142E-08 -.18251280E-08 -.18874650E-08 -.19318882E-08 -.19583260E-08 -.19668712E-08 -.19577775E-08 -.19314541E-08 -.18884590E-08 -.18294907E-08 -.17553793E-08 -.16670776E-08 -.15656505E-08 -.14522640E-08 -.13281721E-08 -.11947035E-08 -.10532470E-08 -.90523824E-09 -.75214586E-09 -.59545837E-09 -.43667012E-09 -.27726711E-09 -.11871268E-09 .37566219E-10 .19019151E-09 .33784532E-09 .47928042E-09 .61333030E-09 .73891890E-09 .85506974E-09 .96091377E-09 .10556955E-08 .11387775E-08 .12096432E-08 .12678993E-08 .13132776E-08 .13456357E-08 .13649566E-08 .13713469E-08 .13650323E-08 .13463529E-08 .13157571E-08 .12737957E-08 .12211152E-08 .11584505E-08 .10866167E-08 .10064987E-08 .91904090E-09 .82523635E-09 .72611640E-09 .62274069E-09 .51618714E-09 .40754152E-09 .29788639E-09 .18828989E-09 .79794980E-10 -.26590204E-10 -.12990088E-09 -.22922328E-09 -.32370210E-09 -.41254784E-09 -.49504397E-09 -.57055323E-09 -.63852255E-09 -.69848628E-09 -.75006813E-09 -.79298237E-09 -.82703470E-09 -.85212294E-09 -.86823693E-09 -.87545720E-09 -.87395199E-09 -.86397296E-09 -.84585000E-09 -.81998591E-09 -.78685124E-09 -.74697887E-09 -.70095800E-09 -.64942701E-09 -.59306527E-09 -.53258438E-09 -.46871955E-09 -.40222164E-09 -.33384981E-09 -.26436431E-09 -.19451908E-09 -.12505363E-09 -.56684810E-10 .99010741E-11 .74055072E-10 .13517116E-09 .19269078E-09 .24610705E-09 .29496891E-09 .33888540E-09 .37752951E-09 .41064099E-09 .43802764E-09 .45956519E-09 .47519629E-09 .48492920E-09 .48883655E-09 .48705410E-09 .47977880E-09 .46726579E-09 .44982401E-09 .42781070E-09 .40162562E-09 .37170543E-09 34.2040403932785111 T Non local Part 0 2 1.15057430781121073 -1.78824668654781460 0.689048852234167980E-01 0.689048852234167980E-01 0.516605756416416775E-01 Reciprocal Space Part .44361960E+01 .44289084E+01 .44070998E+01 .43709325E+01 .43206755E+01 .42567020E+01 .41794864E+01 .40895999E+01 .39877058E+01 .38745532E+01 .37509707E+01 .36178587E+01 .34761815E+01 .33269581E+01 .31712530E+01 .30101664E+01 .28448233E+01 .26763636E+01 .25059305E+01 .23346600E+01 .21636698E+01 .19940483E+01 .18268444E+01 .16630572E+01 .15036267E+01 .13494246E+01 .12012468E+01 .10598060E+01 .92572576E+00 .79953579E+00 .68166808E+00 .57245473E+00 .47212688E+00 .38081504E+00 .29855075E+00 .22526962E+00 .16081559E+00 .10494636E+00 .57340027E-01 .17602636E-01 -.14723402E-01 -.40150150E-01 -.59234456E-01 -.72567884E-01 -.80766446E-01 -.84460312E-01 -.84283690E-01 -.80865041E-01 -.74817801E-01 -.66731759E-01 -.57165241E-01 -.46638208E-01 -.35626384E-01 -.24556470E-01 -.13802519E-01 -.36834884E-02 .55380329E-02 .13655930E-01 .20519561E-01 .26031711E-01 .30145595E-01 .32861018E-01 .34219804E-01 .34300653E-01 .33213541E-01 .31093832E-01 .28096238E-01 .24388784E-01 .20146904E-01 .15547816E-01 .10765278E-01 .59648433E-02 .12996901E-02 -.30928979E-02 -.70943547E-02 -.10606928E-01 -.13555042E-01 -.15885930E-01 -.17569577E-01 -.18598009E-01 -.18983988E-01 -.18759196E-01 -.17971978E-01 -.16684753E-01 -.14971163E-01 -.12913081E-01 -.10597563E-01 -.81138374E-02 -.55504154E-02 -.29924104E-02 -.51912384E-03 .17980400E-02 .38972891E-02 .57277565E-02 .72503956E-02 .84384532E-02 .92775314E-02 .97652584E-02 .99106019E-02 .97328658E-02 Real Space Part .35439510E+02 .35404921E+02 .35301116E+02 .35127991E+02 .34885396E+02 .34573172E+02 .34191198E+02 .33739450E+02 .33218067E+02 .32627422E+02 .31968195E+02 .31241449E+02 .30448693E+02 .29591951E+02 .28673807E+02 .27697450E+02 .26666694E+02 .25585991E+02 .24460423E+02 .23295673E+02 .22097981E+02 .20874087E+02 .19631151E+02 .18376661E+02 .17118336E+02 .15864005E+02 .14621498E+02 .13398519E+02 .12202523E+02 .11040605E+02 .99193794E+01 .88448842E+01 .78224874E+01 .68568120E+01 .59516757E+01 .51100482E+01 .43340269E+01 .36248310E+01 .29828141E+01 .24074938E+01 .18975977E+01 .14511245E+01 .10654168E+01 .73724523E+00 .46289907E+00 .23828340E+00 .59017919E-01 -.79463899E-01 -.18181826E+00 -.25269922E+00 -.29667362E+00 -.31814452E+00 -.32128442E+00 -.30997932E+00 -.28778425E+00 -.25789053E+00 -.22310457E+00 -.18583796E+00 -.14810798E+00 -.11154759E+00 -.77423840E-01 -.46663219E-01 -.19882670E-01 .25752639E-02 .20604580E-01 .34296635E-01 .43900949E-01 .49787146E-01 .52409059E-01 .52271813E-01 .49902544E-01 .45825202E-01 .40539700E-01 .34505504E-01 .28129584E-01 .21758500E-01 .15674299E-01 .10093782E-01 .51706529E-02 .99999363E-03 -.23754662E-02 -.49578476E-02 -.67858983E-02 -.79265199E-02 -.84664620E-02 -.85045252E-02 -.81445492E-02 -.74893804E-02 -.66359437E-02 -.56714716E-02 -.46708854E-02 -.36952644E-02 -.27913016E-02 -.19916103E-02 -.13157215E-02 -.77160890E-03 -.35756842E-03 -.64294942E-04 .12299234E-03 .22250127E-03 Reciprocal Space Part -.11148778E+02 -.11022206E+02 -.10644975E+02 -.10024486E+02 -.91728884E+01 -.81068144E+01 -.68470062E+01 -.54178592E+01 -.38468847E+01 -.21641069E+01 -.40140903E+00 .14081551E+01 .32310693E+01 .50340651E+01 .67848164E+01 .84526044E+01 .10008936E+02 .11428100E+02 .12687660E+02 .13768848E+02 .14656887E+02 .15341202E+02 .15815539E+02 .16077980E+02 .16130863E+02 .15980604E+02 .15637430E+02 .15115036E+02 .14430170E+02 .13602164E+02 .12652409E+02 .11603818E+02 .10480254E+02 .93059645E+01 .81050287E+01 .69008241E+01 .57155338E+01 .45697003E+01 .34818371E+01 .24681051E+01 .15420594E+01 .71447117E+00 -.67755887E-02 -.61671046E+00 -.11132306E+01 -.14969850E+01 -.17711966E+01 -.19414269E+01 -.20152948E+01 -.20021565E+01 -.19127580E+01 -.17588703E+01 -.15529177E+01 -.13076097E+01 -.10355858E+01 -.74908264E+00 -.45963148E+00 -.17779226E+00 .87069685E-01 .32696054E+00 .53538591E+00 .70742863E+00 .83977694E+00 .93070487E+00 .98000785E+00 .98889786E+00 .95986331E+00 .89649973E+00 .80331770E+00 .68553513E+00 .54886075E+00 .39927597E+00 .24282163E+00 .85396039E-01 -.67430376E-01 -.21057877E+00 -.33960021E+00 -.45078568E+00 -.54124577E+00 -.60895931E+00 -.65279100E+00 -.67247918E+00 -.66859566E+00 -.64248046E+00 -.59615485E+00 -.53221663E+00 -.45372194E+00 -.36405825E+00 -.26681297E+00 -.16564241E+00 -.64145156E-01 .34256018E-01 .12642031E+00 .20958018E+00 .28141551E+00 .34010894E+00 .38438158E+00 .41350868E+00 .42731595E+00 .42615740E+00 Real Space Part .38897579E+03 .38823884E+03 .38603193E+03 .38236683E+03 .37726332E+03 .37074929E+03 .36286107E+03 .35364357E+03 .34315058E+03 .33144498E+03 .31859890E+03 .30469375E+03 .28982017E+03 .27407781E+03 .25757496E+03 .24042791E+03 .22276019E+03 .20470155E+03 .18638677E+03 .16795421E+03 .14954429E+03 .13129770E+03 .11335359E+03 .95847661E+02 .78910187E+02 .62664124E+02 .47223238E+02 .32690370E+02 .19155857E+02 .66961745E+01 -.46271868E+01 -.14768555E+02 -.23698609E+02 -.31404593E+02 -.37890195E+02 -.43175102E+02 -.47294241E+02 -.50296721E+02 -.52244507E+02 -.53210866E+02 -.53278613E+02 -.52538222E+02 -.51085834E+02 -.49021226E+02 -.46445783E+02 -.43460527E+02 -.40164252E+02 -.36651798E+02 -.33012515E+02 -.29328928E+02 -.25675651E+02 -.22118536E+02 -.18714094E+02 -.15509163E+02 -.12540834E+02 -.98366069E+01 -.74147714E+01 -.52849681E+01 -.34489200E+01 -.19012896E+01 -.63063309E+00 .37958306E+00 .11499379E+01 .17040144E+01 .20673913E+01 .22666927E+01 .23287188E+01 .22796741E+01 .21445071E+01 .19463688E+01 .17061942E+01 .14424060E+01 .11707358E+01 .90415430E+00 .65290126E+00 .42459984E+00 .22444253E+00 .55432472E-01 -.81335362E-01 -.18636837E+00 -.26146024E+00 -.30937765E+00 -.33356099E+00 -.33784847E+00 -.32623098E+00 -.30264273E+00 -.27079073E+00 -.23402421E+00 -.19524327E+00 -.15684445E+00 -.12069975E+00 -.88164602E-01 -.60109842E-01 -.36972011E-01 -.18816730E-01 -.54097616E-02 .37090569E-02 .91532813E-02 .11622271E-01 .11841307E-01 Non local Part 1 1 1.15057430781121073 -0.477485991708842206 Reciprocal Space Part .00000000E+00 .15279236E+00 .30752253E+00 .46604831E+00 .63006975E+00 .80105623E+00 .98018029E+00 .11682603E+01 .13657138E+01 .15725226E+01 .17882111E+01 .20118383E+01 .22420040E+01 .24768684E+01 .27141865E+01 .29513535E+01 .31854626E+01 .34133725E+01 .36317827E+01 .38373149E+01 .40265980E+01 .41963545E+01 .43434860E+01 .44651555E+01 .45588637E+01 .46225182E+01 .46544926E+01 .46536753E+01 .46195047E+01 .45519923E+01 .44517306E+01 .43198878E+01 .41581881E+01 .39688781E+01 .37546818E+01 .35187427E+01 .32645578E+01 .29959024E+01 .27167492E+01 .24311836E+01 .21433176E+01 .18572029E+01 .15767485E+01 .13056411E+01 .10472738E+01 .80468176E+00 .58048818E+00 .37686144E+00 .19548348E+00 .37530827E-01 -.96332083E-01 -.20594715E+00 -.29164502E+00 -.35421646E+00 -.39487360E+00 -.41520252E+00 -.41710853E+00 -.40275584E+00 -.37450334E+00 -.33483838E+00 -.28631013E+00 -.23146459E+00 -.17278256E+00 -.11262232E+00 -.53168296E-01 .36132449E-02 .56010477E-01 .10259370E+00 .14223402E+00 .17411299E+00 .19772319E+00 .21286042E+00 .21960780E+00 .21831289E+00 .20955862E+00 .19412923E+00 .17297248E+00 .14715929E+00 .11784226E+00 .86214122E-01 .53467622E-01 .20757677E-01 -.10833007E-01 -.40324094E-01 -.66862830E-01 -.89743825E-01 -.10842306E+00 -.12252602E+00 -.13185000E+00 -.13636080E+00 -.13618422E+00 -.13159294E+00 -.12298930E+00 -.11088494E+00 -.95877934E-01 -.78628355E-01 -.59833153E-01 -.40201155E-01 -.20428998E-01 -.11787433E-02 Real Space Part .00000000E+00 .92469454E+01 .18376119E+02 .27271905E+02 .35822953E+02 .43924187E+02 .51478675E+02 .58399310E+02 .64610277E+02 .70048260E+02 .74663381E+02 .78419841E+02 .81296257E+02 .83285699E+02 .84395423E+02 .84646319E+02 .84072093E+02 .82718205E+02 .80640601E+02 .77904267E+02 .74581649E+02 .70750979E+02 .66494545E+02 .61896958E+02 .57043438E+02 .52018177E+02 .46902805E+02 .41774983E+02 .36707162E+02 .31765526E+02 .27009130E+02 .22489236E+02 .18248877E+02 .14322611E+02 .10736492E+02 .75082200E+01 .46474710E+01 .21563782E+01 .30146506E-01 -.17422265E+01 -.31771474E+01 -.42955679E+01 -.51220962E+01 -.56841026E+01 -.60108430E+01 -.61326200E+01 -.60800009E+01 -.58831072E+01 -.55709869E+01 -.51710792E+01 -.47087760E+01 -.42070829E+01 -.36863787E+01 -.31642693E+01 -.26555308E+01 -.21721332E+01 -.17233356E+01 -.13158421E+01 -.95400628E+00 -.64007469E+00 -.37445516E+00 -.15600089E+00 .17700816E-01 .15004441E+00 .24513437E+00 .30753283E+00 .34203173E+00 .35345328E+00 .34648134E+00 .32552474E+00 .29461233E+00 .25731881E+00 .21671905E+00 .17536831E+00 .13530487E+00 .98071597E-01 .64752432E-01 .36020209E-01 .12191940E-01 -.67117459E-02 -.20906090E-01 -.30783253E-01 -.36857069E-01 -.39713179E-01 -.39965719E-01 -.38221279E-01 -.35050403E-01 -.30966562E-01 -.26412171E-01 -.21751010E-01 -.17266203E-01 -.13162802E-01 -.95739701E-02 -.65697503E-02 -.41674741E-02 -.23429253E-02 -.10415143E-02 -.18883843E-03 .29984611E-03 .51157133E-03 PAW radial sets 353 0.520134355386774216 (5E20.12) augmentation charges (non sperical) .136235640982E-01 .191967637231E-02 .160048145565E-02 .191967637231E-02 .658642282815E-04 .105422033520E-02 .160048145565E-02 .105422033520E-02 -.308695705439E-02 uccopancies in atom .999999999998E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 grid .116365397438E-04 .120001524756E-04 .123751271949E-04 .127618189353E-04 .131605938244E-04 .135718294303E-04 .139959151194E-04 .144332524243E-04 .148842554251E-04 .153493511404E-04 .158289799324E-04 .163235959232E-04 .168336674253E-04 .173596773848E-04 .179021238385E-04 .184615203857E-04 .190383966745E-04 .196332989028E-04 .202467903364E-04 .208794518411E-04 .215318824339E-04 .222046998492E-04 .228985411241E-04 .236140632016E-04 .243519435526E-04 .251128808170E-04 .258975954658E-04 .267068304825E-04 .275413520675E-04 .284019503625E-04 .292894401994E-04 .302046618718E-04 .311484819298E-04 .321217940016E-04 .331255196387E-04 .341606091889E-04 .352280426958E-04 .363288308273E-04 .374640158317E-04 .386346725253E-04 .398419093096E-04 .410868692207E-04 .423707310119E-04 .436947102696E-04 .450600605642E-04 .464680746370E-04 .479200856242E-04 .494174683192E-04 .509616404744E-04 .525540641432E-04 .541962470646E-04 .558897440906E-04 .576361586586E-04 .594371443092E-04 .612944062521E-04 .632097029807E-04 .651848479365E-04 .672217112269E-04 .693222213953E-04 .714883672472E-04 .737221997335E-04 .760258338920E-04 .784014508502E-04 .808512998904E-04 .833777005792E-04 .859830449641E-04 .886697998377E-04 .914405090742E-04 .942977960371E-04 .972443660636E-04 .100283009026E-03 .103416601973E-03 .106648111853E-03 .109980598327E-03 .113417216659E-03 .116961220709E-03 .120615966013E-03 .124384912957E-03 .128271630056E-03 .132279797333E-03 .136413209802E-03 .140675781061E-03 .145071547000E-03 .149604669619E-03 .154279440969E-03 .159100287220E-03 .164071772845E-03 .169198604950E-03 .174485637720E-03 .179937877028E-03 .185560485163E-03 .191358785724E-03 .197338268660E-03 .203504595467E-03 .209863604547E-03 .216421316740E-03 .223183941020E-03 .230157880376E-03 .237349737876E-03 .244766322917E-03 .252414657670E-03 .260301983735E-03 .268435768991E-03 .276823714672E-03 .285473762654E-03 .294394102977E-03 .303593181601E-03 .313079708400E-03 .322862665409E-03 .332951315330E-03 .343355210302E-03 .354084200943E-03 .365148445678E-03 .376558420359E-03 .388324928181E-03 .400459109912E-03 .412972454440E-03 .425876809655E-03 .439184393661E-03 .452907806348E-03 .467060041321E-03 .481654498203E-03 .496704995321E-03 .512225782792E-03 .528231556011E-03 .544737469568E-03 .561759151596E-03 .579312718570E-03 .597414790562E-03 .616082506980E-03 .635333542796E-03 .655186125282E-03 .675659051264E-03 .696771704924E-03 .718544076149E-03 .740996779462E-03 .764151073538E-03 .788028881330E-03 .812652810832E-03 .838046176477E-03 .864233021221E-03 .891238139296E-03 .919087099697E-03 .947806270383E-03 .977422843248E-03 .100796485986E-02 .103946123802E-02 .107194179914E-02 .110543729647E-02 .113997944423E-02 .117560094762E-02 .121233553381E-02 .125021798383E-02 .128928416557E-02 .132957106768E-02 .137111683461E-02 .141396080274E-02 .145814353760E-02 .150370687229E-02 .155069394712E-02 .159914925040E-02 .164911866057E-02 .170064948971E-02 .175379052823E-02 .180859209116E-02 .186510606572E-02 .192338596048E-02 .198348695604E-02 .204546595723E-02 .210938164702E-02 .217529454209E-02 .224326705010E-02 .231336352880E-02 .238565034695E-02 .246019594719E-02 .253707091078E-02 .261634802451E-02 .269810234955E-02 .278241129256E-02 .286935467894E-02 .295901482847E-02 .305147663317E-02 .314682763778E-02 .324515812254E-02 .334656118875E-02 .345113284689E-02 .355897210752E-02 .367018107505E-02 .378486504437E-02 .390313260059E-02 .402509572182E-02 .415086988523E-02 .428057417634E-02 .441433140179E-02 .455226820564E-02 .469451518925E-02 .484120703495E-02 .499248263354E-02 .514848521583E-02 .530936248822E-02 .547526677257E-02 .564635515043E-02 .582278961173E-02 .600473720819E-02 .619237021149E-02 .638586627635E-02 .658540860877E-02 .679118613947E-02 .700339370278E-02 .722223222113E-02 .744790889526E-02 .768063740041E-02 .792063808866E-02 .816813819750E-02 .842337206506E-02 .868658135194E-02 .895801527002E-02 .923793081843E-02 .952659302689E-02 .982427520662E-02 .101312592091E-01 .104478356931E-01 .107743043996E-01 .111109744357E-01 .114581645676E-01 .118162035217E-01 .121854302968E-01 .125661944841E-01 .129588565989E-01 .133637884217E-01 .137813733500E-01 .142120067619E-01 .146560963897E-01 .151140627064E-01 .155863393239E-01 .160733734032E-01 .165756260781E-01 .170935728915E-01 .176277042461E-01 .181785258681E-01 .187465592867E-01 .193323423274E-01 .199364296215E-01 .205593931310E-01 .212018226904E-01 .218643265651E-01 .225475320271E-01 .232520859492E-01 .239786554173E-01 .247279283622E-01 .255006142105E-01 .262974445570E-01 .271191738568E-01 .279665801397E-01 .288404657473E-01 .297416580921E-01 .306710104413E-01 .316294027246E-01 .326177423671E-01 .336369651489E-01 .346880360907E-01 .357719503678E-01 .368897342522E-01 .380424460843E-01 .392311772750E-01 .404570533392E-01 .417212349610E-01 .430249190933E-01 .443693400906E-01 .457557708780E-01 .471855241562E-01 .486599536446E-01 .501804553628E-01 .517484689527E-01 .533654790415E-01 .550330166468E-01 .567526606272E-01 .585260391764E-01 .603548313652E-01 .622407687309E-01 .641856369174E-01 .661912773653E-01 .682595890554E-01 .703925303074E-01 .725921206330E-01 .748604426491E-01 .771996440488E-01 .796119396355E-01 .820996134194E-01 .846650207805E-01 .873105906985E-01 .900388280525E-01 .928523159930E-01 .957537183872E-01 .987457823419E-01 .101831340804E+00 .105013315242E+00 .108294718414E+00 .111678657220E+00 .115168335641E+00 .118767057775E+00 .122478230966E+00 .126305369027E+00 .130252095570E+00 .134322147435E+00 .138519378231E+00 .142847761981E+00 .147311396886E+00 .151914509205E+00 .156661457259E+00 .161556735555E+00 .166604979041E+00 .171810967496E+00 .177179630055E+00 .182716049878E+00 .188425468959E+00 .194313293090E+00 .200385096984E+00 .206646629548E+00 .213103819326E+00 .219762780118E+00 .226629816762E+00 .233711431108E+00 .241014328171E+00 .248545422483E+00 .256311844636E+00 .264320948036E+00 .272580315864E+00 .281097768257E+00 .289881369712E+00 .298939436720E+00 .308280545644E+00 .317913540832E+00 .327847543002E+00 .338091957867E+00 .348656485048E+00 .359551127251E+00 .370786199746E+00 .382372340126E+00 .394320518384E+00 .406642047297E+00 .419348593138E+00 .432452186723E+00 .445965234799E+00 .459900531793E+00 .474271271928E+00 .489091061712E+00 .504373932821E+00 .520134355387E+00 .536387251698E+00 .553148010325E+00 .570432500694E+00 .588257088111E+00 aepotential .574428955290E+05 .546189891139E+05 .519726172141E+05 .494539773024E+05 .470566603853E+05 .447745102892E+05 .426065568251E+05 .405476617905E+05 .385966868748E+05 .367427393076E+05 .349850815293E+05 .333205556704E+05 .317390693624E+05 .302450478591E+05 .288272042067E+05 .274836504886E+05 .262120348771E+05 .250067665613E+05 .238641478366E+05 .227807214566E+05 .217558549269E+05 .207815105077E+05 .198590329481E+05 .189827406685E+05 .181534302144E+05 .173630291794E+05 .166154990865E+05 .159030302973E+05 .152277128264E+05 .145830821925E+05 .139750616071E+05 .133940770918E+05 .128398968550E+05 .123138168713E+05 .118110591525E+05 .113333913490E+05 .108786202067E+05 .104436384179E+05 .100276732855E+05 .963338764880E+04 .925484618850E+04 .889498816387E+04 .855079102214E+04 .822067926080E+04 .790652511605E+04 .760538397888E+04 .731722109541E+04 .704222727827E+04 .677825625025E+04 .652566450428E+04 .628411902614E+04 .605196461633E+04 .583014920796E+04 .561717558279E+04 .541272159590E+04 .521705855503E+04 .502891074305E+04 .484852855641E+04 .467523532977E+04 .450893180482E+04 .434917324105E+04 .419561726587E+04 .404811779575E+04 .390629547695E+04 .376992900001E+04 .363882991178E+04 .351278915227E+04 .339122832140E+04 .327463008087E+04 .316215731299E+04 .305407346548E+04 .294993017838E+04 .284956114968E+04 .275300809072E+04 .265999661839E+04 .257025573260E+04 .248389031771E+04 .240058705562E+04 .232030989912E+04 .224287759873E+04 .216827147347E+04 .209626514677E+04 .202683395547E+04 .195983979770E+04 .189521238869E+04 .183283966269E+04 .177266225476E+04 .171455175486E+04 .165847409895E+04 .160433419710E+04 .155204128465E+04 .150156298012E+04 .145279784560E+04 .140570679337E+04 .136020811886E+04 .131625443762E+04 .127378642540E+04 .123274965107E+04 .119309395476E+04 .115476567175E+04 .111771947472E+04 .108190853754E+04 .104728715428E+04 .101381844595E+04 .981452748956E+03 .950153713353E+03 .919902894135E+03 .890619091959E+03 .862322146507E+03 .834930041567E+03 .808447751050E+03 .782820746093E+03 .758027196939E+03 .734044037777E+03 .710832104998E+03 .688373883276E+03 .666641233803E+03 .645607381772E+03 .625250678628E+03 .605549280144E+03 .586475867119E+03 .568019870362E+03 .550145158238E+03 .532849746149E+03 .516097383306E+03 .499885934830E+03 .484182756593E+03 .468983799076E+03 .454262666162E+03 .440009076728E+03 .426206749056E+03 .412838875704E+03 .399893774466E+03 .387355816373E+03 .375213102840E+03 .363451336778E+03 .352059442779E+03 .341024750587E+03 .330335945231E+03 .319981602082E+03 .309951316235E+03 .300234354233E+03 .290820536846E+03 .281701328999E+03 .272864522286E+03 .264305152940E+03 .256009642511E+03 .247974762134E+03 .240186606282E+03 .232642989948E+03 .225330892837E+03 .218247773738E+03 .211381668862E+03 .204730622153E+03 .198283087448E+03 .192036512379E+03 .185982053410E+03 .180114734015E+03 .174428762848E+03 .168917809609E+03 .163576902754E+03 .158400496803E+03 .153383528973E+03 .148520954514E+03 .143807814747E+03 .139239877734E+03 .134811992483E+03 .130520303252E+03 .126360389553E+03 .122327904524E+03 .118419520387E+03 .114630462903E+03 .110958019418E+03 .107397685803E+03 .103946643461E+03 .100601077604E+03 .973579474251E+02 .942139930549E+02 .911661554584E+02 .882114420199E+02 .853470656156E+02 .825700169958E+02 .798779366806E+02 .772678490698E+02 .747374550081E+02 .722841417573E+02 .699057765428E+02 .675996139639E+02 .653639985715E+02 .631961626767E+02 .610945607917E+02 .590566806264E+02 .570809391093E+02 .551651712688E+02 .533076526301E+02 .515065699676E+02 .497601281163E+02 .480667772082E+02 .464246938601E+02 .448325278535E+02 .432885003975E+02 .417913579867E+02 .403395017728E+02 .389315947153E+02 .375663014857E+02 .362422782551E+02 .349582827460E+02 .337130458747E+02 .325054393500E+02 .313342217734E+02 .301983563115E+02 .290966812660E+02 .280282098997E+02 .269918585402E+02 .259866862304E+02 .250117015271E+02 .240659888175E+02 .231486309859E+02 .222587748618E+02 .213955522042E+02 .205581278165E+02 .197457569140E+02 .189575961293E+02 .181929469611E+02 .174510498554E+02 .167312244319E+02 .160327618335E+02 .153550126734E+02 .146973298007E+02 .140590815749E+02 .134396797581E+02 .128385087866E+02 .122550278577E+02 .116886595404E+02 .111388886386E+02 .106051684041E+02 .100870301429E+02 .958393732887E+01 .909546634560E+01 .862110926332E+01 .816045004380E+01 .771304263260E+01 .727846179014E+01 .685631141285E+01 .644618024413E+01 .604769631902E+01 .566047605180E+01 .528416507931E+01 .491840576365E+01 .456285981534E+01 .421719735642E+01 .388109234182E+01 .355423903553E+01 .323632957589E+01 .292707448765E+01 .262618581354E+01 .233338888414E+01 .204841748061E+01 .177100367689E+01 .150090958293E+01 .123787122021E+01 .981671567279E+00 .732063904403E+00 .488834345576E+00 .251764434160E+00 .206429566855E-01 -.204731463242E+00 -.424556514703E+00 -.639021899671E+00 -.848314711202E+00 -.105260859245E+01 -.125208272095E+01 -.144689819281E+01 -.163722089735E+01 -.182320419228E+01 -.200499943922E+01 -.218275311317E+01 -.235660229190E+01 -.252668568622E+01 -.269312914413E+01 -.285606070434E+01 -.301559778365E+01 -.317185614213E+01 -.332494582235E+01 -.347497115412E+01 -.362203285637E+01 -.376622610979E+01 -.390764129760E+01 -.404636481597E+01 -.418247668322E+01 -.431605423988E+01 -.444716830599E+01 -.457588573236E+01 -.470226877943E+01 -.482637431405E+01 -.494825503145E+01 -.506795832619E+01 -.518552741994E+01 -.530099978348E+01 -.541440927922E+01 -.552578380348E+01 -.563514691403E+01 -.574251777326E+01 -.584790963830E+01 -.595133183712E+01 -.605278859980E+01 -.615227898182E+01 -.624979794566E+01 -.634533492503E+01 -.643887518256E+01 -.653039937208E+01 -.661988260178E+01 -.670729721293E+01 -.679260916301E+01 -.687578161036E+01 -.695677293875E+01 -.703553707023E+01 -.711202565217E+01 -.718618412325E+01 -.725795756583E+01 -.732728512530E+01 -.739410480883E+01 -.745835155101E+01 -.751995734136E+01 -.757885371404E+01 -.763496889544E+01 -.768823177044E+01 -.773856909116E+01 -.778590867075E+01 -.783017766008E+01 -.787130494944E+01 -.790922042328E+01 -.794385610683E+01 -.797514708969E+01 -.800303134503E+01 -.802745140760E+01 -.804835424221E+01 -.806569242251E+01 -.807942491542E+01 -.808951724008E+01 -.809594317941E+01 -.809868431923E+01 -.809773205977E+01 -.809308700332E+01 -.808476083415E+01 -.807277597117E+01 -.805716669575E+01 -.803797950224E+01 -.801527330716E+01 -.798912002366E+01 -.795960441976E+01 -.792682430498E+01 -.789089007126E+01 core charge-density .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 kinetic energy-density .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 pspotential -.835497390310E+01 -.835609390030E+01 -.835717995600E+01 -.835823310343E+01 -.835925433962E+01 -.836024463179E+01 -.836120491726E+01 -.836213610489E+01 -.836303907701E+01 -.836391468849E+01 -.836476376817E+01 -.836558711992E+01 -.836638552332E+01 -.836715973457E+01 -.836791048653E+01 -.836863848991E+01 -.836934443394E+01 -.837002898743E+01 -.837069279811E+01 -.837133649461E+01 -.837196068661E+01 -.837256596463E+01 -.837315290224E+01 -.837372205474E+01 -.837427396117E+01 -.837480914426E+01 -.837532811045E+01 -.837583135117E+01 -.837631934289E+01 -.837679254771E+01 -.837725141360E+01 -.837769637499E+01 -.837812785335E+01 -.837854625685E+01 -.837895198189E+01 -.837934541244E+01 -.837972692111E+01 -.838009686896E+01 -.838045560648E+01 -.838080347305E+01 -.838114079811E+01 -.838146790110E+01 -.838178509153E+01 -.838209266976E+01 -.838239092707E+01 -.838268014568E+01 -.838296059941E+01 -.838323255386E+01 -.838349626641E+01 -.838375198662E+01 -.838399995669E+01 -.838424041137E+01 -.838447357810E+01 -.838469967764E+01 -.838491892405E+01 -.838513152489E+01 -.838533768134E+01 -.838553758846E+01 -.838573143547E+01 -.838591940590E+01 -.838610167747E+01 -.838627842279E+01 -.838644980901E+01 -.838661599837E+01 -.838677714806E+01 -.838693341060E+01 -.838708493366E+01 -.838723186066E+01 -.838737433053E+01 -.838751247797E+01 -.838764643371E+01 -.838777632425E+01 -.838790227247E+01 -.838802439735E+01 -.838814281438E+01 -.838825763538E+01 -.838836896877E+01 -.838847691974E+01 -.838858159026E+01 -.838868307904E+01 -.838878148194E+01 -.838887689168E+01 -.838896939832E+01 -.838905908897E+01 -.838914604816E+01 -.838923035783E+01 -.838931209727E+01 -.838939134347E+01 -.838946817081E+01 -.838954265156E+01 -.838961485550E+01 -.838968485052E+01 -.838975270208E+01 -.838981847377E+01 -.838988222712E+01 -.838994402157E+01 -.839000391483E+01 -.839006196269E+01 -.839011821911E+01 -.839017273628E+01 -.839022556471E+01 -.839027675319E+01 -.839032634909E+01 -.839037439785E+01 -.839042094356E+01 -.839046602886E+01 -.839050969475E+01 -.839055198088E+01 -.839059292549E+01 -.839063256536E+01 -.839067093595E+01 -.839070807145E+01 -.839074400462E+01 -.839077876706E+01 -.839081238897E+01 -.839084489951E+01 -.839087632636E+01 -.839090669607E+01 -.839093603412E+01 -.839096436464E+01 -.839099171059E+01 -.839101809389E+01 -.839104353516E+01 -.839106805391E+01 -.839109166848E+01 -.839111439592E+01 -.839113625231E+01 -.839115725251E+01 -.839117741012E+01 -.839119673752E+01 -.839121524600E+01 -.839123294558E+01 -.839124984499E+01 -.839126595169E+01 -.839128127198E+01 -.839129581072E+01 -.839130957143E+01 -.839132255621E+01 -.839133476589E+01 -.839134619971E+01 -.839135685536E+01 -.839136672908E+01 -.839137581544E+01 -.839138410726E+01 -.839139159564E+01 -.839139826998E+01 -.839140411758E+01 -.839140912393E+01 -.839141327237E+01 -.839141654406E+01 -.839141891786E+01 -.839142037039E+01 -.839142087548E+01 -.839142040466E+01 -.839141892656E+01 -.839141640675E+01 -.839141280797E+01 -.839140808952E+01 -.839140220734E+01 -.839139511382E+01 -.839138675742E+01 -.839137708273E+01 -.839136602988E+01 -.839135353464E+01 -.839133952790E+01 -.839132393561E+01 -.839130667813E+01 -.839128767043E+01 -.839126682121E+01 -.839124403294E+01 -.839121920126E+01 -.839119221468E+01 -.839116295395E+01 -.839113129196E+01 -.839109709279E+01 -.839106021153E+01 -.839102049363E+01 -.839097777415E+01 -.839093187736E+01 -.839088261593E+01 -.839082979019E+01 -.839077318748E+01 -.839071258112E+01 -.839064772985E+01 -.839057837659E+01 -.839050424788E+01 -.839042505226E+01 -.839034047966E+01 -.839025020010E+01 -.839015386226E+01 -.839005109235E+01 -.838994149265E+01 -.838982463991E+01 -.838970008393E+01 -.838956734580E+01 -.838942591599E+01 -.838927525249E+01 -.838911477887E+01 -.838894388219E+01 -.838876191040E+01 -.838856817010E+01 -.838836192409E+01 -.838814238836E+01 -.838790872927E+01 -.838766006058E+01 -.838739543999E+01 -.838711386580E+01 -.838681427306E+01 -.838649552969E+01 -.838615643260E+01 -.838579570261E+01 -.838541198060E+01 -.838500382184E+01 -.838456969109E+01 -.838410795688E+01 -.838361688569E+01 -.838309463564E+01 -.838253924984E+01 -.838194864937E+01 -.838132062577E+01 -.838065283332E+01 -.837994278049E+01 -.837918782140E+01 -.837838514629E+01 -.837753177176E+01 -.837662453043E+01 -.837566005976E+01 -.837463479081E+01 -.837354493563E+01 -.837238647478E+01 -.837115514348E+01 -.836984641748E+01 -.836845549794E+01 -.836697729591E+01 -.836540641552E+01 -.836373713647E+01 -.836196339631E+01 -.836007877098E+01 -.835807645484E+01 -.835594924011E+01 -.835368949503E+01 -.835128914118E+01 -.834873963008E+01 -.834603191878E+01 -.834315644472E+01 -.834010309936E+01 -.833686120176E+01 -.833341947070E+01 -.832976599642E+01 -.832588821202E+01 -.832177286408E+01 -.831740598292E+01 -.831277285304E+01 -.830785798341E+01 -.830264507774E+01 -.829711700586E+01 -.829125577531E+01 -.828504250460E+01 -.827845739782E+01 -.827147972136E+01 -.826408778324E+01 -.825625891567E+01 -.824796946162E+01 -.823919476594E+01 -.822990917197E+01 -.822008602507E+01 -.820969768335E+01 -.819871553756E+01 -.818711004122E+01 -.817485075196E+01 -.816190638698E+01 -.814824489299E+01 -.813383353323E+01 -.811863899427E+01 -.810262751324E+01 -.808576502985E+01 -.806801736417E+01 -.804935042391E+01 -.802973044364E+01 -.800912425915E+01 -.798749961971E+01 -.796482554153E+01 -.794107270609E+01 -.791621390511E+01 -.789022453696E+01 -.786308315567E+01 -.783477207630E+01 -.780527803779E+01 -.777459292639E+01 -.774271455928E+01 -.770964752963E+01 -.767540411236E+01 -.764000522833E+01 -.760348146483E+01 -.756587414744E+01 -.752723645698E+01 -.748763458409E+01 -.744714891058E+01 -.740587520647E+01 -.736392582652E+01 -.732143089000E+01 -.727853942310E+01 -.723542044092E+01 -.719226394342E+01 -.714928179528E+01 -.710670845837E+01 -.706480154022E+01 -.702384211999E+01 -.698413480775E+01 -.694600749266E+01 -.690981072673E+01 -.687591669110E+01 -.684471768307E+01 -.681662405945E+01 -.679206156444E+01 -.677146796507E+01 -.675528890973E+01 -.674397292125E+01 -.673796542993E+01 -.673770175088E+01 -.674359891244E+01 -.675604625165E+01 -.677539471311E+01 -.680194482006E+01 -.683593333854E+01 -.687751872742E+01 -.692676556319E+01 -.698362824551E+01 -.704793442433E+01 -.711936872348E+01 -.719745744762E+01 -.728155501059E+01 -.737083276350E+01 -.746427067817E+01 -.756065190589E+01 -.765855957045E+01 -.775637432508E+01 -.785227038838E+01 -.794420734226E+01 -.802991551300E+01 -.810687505799E+01 -.817229377620E+01 -.822309665247E+01 -.825595080950E+01 -.826736090297E+01 -.825387847269E+01 -.821247057519E+01 -.814108760350E+01 -.804444357965E+01 -.802396205814E+01 -.799360561692E+01 -.795629682102E+01 -.792151439125E+01 core charge-density (pseudized) .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 pseudo wavefunction .414785361259E-04 .427746365262E-04 .441112368187E-04 .454896025237E-04 .469110387057E-04 .483768912094E-04 .498885479334E-04 .514474401451E-04 .530550438351E-04 .547128811152E-04 .564225216592E-04 .581855841893E-04 .600037380090E-04 .618787045831E-04 .638122591677E-04 .658062324916E-04 .678625124890E-04 .699830460875E-04 .721698410511E-04 .744249678815E-04 .767505617786E-04 .791488246615E-04 .816220272541E-04 .841725112347E-04 .868026914531E-04 .895150582169E-04 .923121796500E-04 .951967041235E-04 .981713627634E-04 .101238972037E-03 .104402436418E-03 .107664751138E-03 .111029005024E-03 .114498383419E-03 .118076171200E-03 .121765755888E-03 .125570630858E-03 .129494398642E-03 .133540774341E-03 .137713589146E-03 .142016793963E-03 .146454463152E-03 .151030798388E-03 .155750132637E-03 .160616934260E-03 .165635811243E-03 .170811515559E-03 .176148947669E-03 .181653161161E-03 .187329367535E-03 .193182941137E-03 .199219424249E-03 .205444532332E-03 .211864159445E-03 .218484383818E-03 .225311473613E-03 .232351892855E-03 .239612307553E-03 .247099592012E-03 .254820835344E-03 .262783348174E-03 .270994669568E-03 .279462574169E-03 .288195079557E-03 .297200453840E-03 .306487223485E-03 .316064181390E-03 .325940395207E-03 .336125215929E-03 .346628286745E-03 .357459552169E-03 .368629267454E-03 .380148008306E-03 .392026680892E-03 .404276532171E-03 .416909160539E-03 .429936526813E-03 .443370965555E-03 .457225196748E-03 .471512337845E-03 .486245916183E-03 .501439881793E-03 .517108620611E-03 .533266968092E-03 .549930223263E-03 .567114163204E-03 .584835057989E-03 .603109686087E-03 .621955350251E-03 .641389893898E-03 .661431718006E-03 .682099798532E-03 .703413704382E-03 .725393615939E-03 .748060344165E-03 .771435350310E-03 .795540766229E-03 .820399415338E-03 .846034834218E-03 .872471294905E-03 .899733827870E-03 .927848245712E-03 .956841167601E-03 .986740044483E-03 .101757318506E-02 .104936978261E-02 .108215994261E-02 .111597471123E-02 .115084610477E-02 .118680713991E-02 .122389186502E-02 .126213539238E-02 .130157393140E-02 .134224482293E-02 .138418657461E-02 .142743889731E-02 .147204274273E-02 .151804034219E-02 .156547524656E-02 .161439236756E-02 .166483802023E-02 .171685996678E-02 .177050746183E-02 .182583129902E-02 .188288385909E-02 .194171915947E-02 .200239290544E-02 .206496254283E-02 .212948731241E-02 .219602830597E-02 .226464852416E-02 .233541293611E-02 .240838854094E-02 .248364443116E-02 .256125185810E-02 .264128429931E-02 .272381752814E-02 .280892968547E-02 .289670135360E-02 .298721563260E-02 .308055821889E-02 .317681748641E-02 .327608457016E-02 .337845345256E-02 .348402105227E-02 .359288731600E-02 .370515531300E-02 .382093133266E-02 .394032498501E-02 .406344930448E-02 .419042085679E-02 .432135984927E-02 .445639024452E-02 .459563987773E-02 .473924057754E-02 .488732829075E-02 .504004321092E-02 .519752991086E-02 .535993747944E-02 .552741966248E-02 .570013500815E-02 .587824701682E-02 .606192429566E-02 .625134071793E-02 .644667558738E-02 .664811380760E-02 .685584605678E-02 .707006896782E-02 .729098531404E-02 .751880420074E-02 .775374126259E-02 .799601886724E-02 .824586632520E-02 .850352010628E-02 .876922406268E-02 .904322965904E-02 .932579620959E-02 .961719112268E-02 .991769015279E-02 .102275776605E-01 .105471468802E-01 .108767001964E-01 .112165494284E-01 .115670161239E-01 .119284318609E-01 .123011385603E-01 .126854888067E-01 .130818461801E-01 .134905855970E-01 .139120936623E-01 .143467690322E-01 .147950227878E-01 .152572788201E-01 .157339742272E-01 .162255597228E-01 .167325000581E-01 .172552744555E-01 .177943770561E-01 .183503173804E-01 .189236208029E-01 .195148290410E-01 .201245006587E-01 .207532115852E-01 .214015556487E-01 .220701451265E-01 .227596113111E-01 .234706050932E-01 .242037975617E-01 .249598806211E-01 .257395676272E-01 .265435940409E-01 .273727181012E-01 .282277215172E-01 .291094101800E-01 .300186148947E-01 .309561921328E-01 .319230248063E-01 .329200230622E-01 .339481250997E-01 .350082980092E-01 .361015386341E-01 .372288744555E-01 .383913645000E-01 .395901002716E-01 .408262067067E-01 .421008431545E-01 .434152043802E-01 .447705215937E-01 .461680635031E-01 .476091373915E-01 .490950902204E-01 .506273097556E-01 .522072257188E-01 .538363109629E-01 .555160826707E-01 .572481035771E-01 .590339832134E-01 .608753791736E-01 .627739984015E-01 .647315984970E-01 .667499890411E-01 .688310329369E-01 .709766477661E-01 .731888071578E-01 .754695421671E-01 .778209426622E-01 .802451587147E-01 .827444019914E-01 .853209471422E-01 .879771331807E-01 .907153648516E-01 .935381139792E-01 .964479207918E-01 .994473952127E-01 .102539218112E+00 .105726142512E+00 .109010994725E+00 .112396675437E+00 .115886160695E+00 .119482502810E+00 .123188831145E+00 .127008352780E+00 .130944353035E+00 .135000195832E+00 .139179323865E+00 .143485258575E+00 .147921599880E+00 .152492025653E+00 .157200290902E+00 .162050226625E+00 .167045738303E+00 .172190803989E+00 .177489471949E+00 .182945857809E+00 .188564141151E+00 .194348561514E+00 .200303413718E+00 .206433042465E+00 .212741836138E+00 .219234219708E+00 .225914646692E+00 .232787590047E+00 .239857531911E+00 .247128952101E+00 .254606315231E+00 .262294056361E+00 .270196565023E+00 .278318167515E+00 .286663107304E+00 .295235523400E+00 .304039426540E+00 .313078673019E+00 .322356936005E+00 .331877674149E+00 .341644097334E+00 .351659129357E+00 .361925367379E+00 .372445037952E+00 .383219949456E+00 .394251440764E+00 .405540325998E+00 .417086835210E+00 .428890550906E+00 .440950340297E+00 .453264283248E+00 .465829595931E+00 .478642550219E+00 .491698388994E+00 .504991237546E+00 .518514011428E+00 .532258321178E+00 .546214374511E+00 .560370876733E+00 .574714930297E+00 .589231934663E+00 .603905487850E+00 .618717291331E+00 .633647060221E+00 .648672441050E+00 .663768939718E+00 .678909862656E+00 .694066274547E+00 .709206976389E+00 .724298508051E+00 .739305179851E+00 .754189137966E+00 .768910468787E+00 .783427347405E+00 .797696235449E+00 .811672133229E+00 .825308890674E+00 .838559580684E+00 .851376937234E+00 .863713858746E+00 .875523974738E+00 .886762270513E+00 .897385760447E+00 .907354195206E+00 .916630781827E+00 .925182887888E+00 .932982691971E+00 .940007732216E+00 .946241293054E+00 .951672557478E+00 .956296438657E+00 .960112991149E+00 .963126289053E+00 .965342647616E+00 .966768057522E+00 .967404699680E+00 .967246415278E+00 .966273024608E+00 .964433267362E+00 ae wavefunction .581012911230E-04 .599167141718E-04 .617888602807E-04 .637195016849E-04 .657104659850E-04 .677636378763E-04 .698809609326E-04 .720644394445E-04 .743161403163E-04 .766381950209E-04 .790328016176E-04 .815022268304E-04 .840488081933E-04 .866749562617E-04 .893831568926E-04 .921759735962E-04 .950560499616E-04 .980261121567E-04 .101088971508E-03 .104247527158E-03 .107504768810E-03 .110863779555E-03 .114327738787E-03 .117899925210E-03 .121583719941E-03 .125382609704E-03 .129300190133E-03 .133340169167E-03 .137506370557E-03 .141802737487E-03 .146233336296E-03 .150802360327E-03 .155514133889E-03 .160373116350E-03 .165383906346E-03 .170551246136E-03 .175880026081E-03 .181375289265E-03 .187042236267E-03 .192886230072E-03 .198912801143E-03 .205127652646E-03 .211536665841E-03 .218145905637E-03 .224961626329E-03 .231990277500E-03 .239238510119E-03 .246713182826E-03 .254421368406E-03 .262370360478E-03 .270567680375E-03 .279021084256E-03 .287738570426E-03 .296728386893E-03 .305999039152E-03 .315559298222E-03 .325418208920E-03 .335585098404E-03 .346069584978E-03 .356881587166E-03 .368031333080E-03 .379529370063E-03 .391386574649E-03 .403614162822E-03 .416223700596E-03 .429227114927E-03 .442636704961E-03 .456465153632E-03 .470725539623E-03 .485431349696E-03 .500596491406E-03 .516235306210E-03 .532362582983E-03 .548993571952E-03 .566143999070E-03 .583830080820E-03 .602068539499E-03 .620876618960E-03 .640272100852E-03 .660273321353E-03 .680899188436E-03 .702169199660E-03 .724103460512E-03 .746722703324E-03 .770048306770E-03 .794102315969E-03 .818907463211E-03 .844487189319E-03 .870865665682E-03 .898067816957E-03 .926119344486E-03 .955046750422E-03 .984877362614E-03 .101563936025E-02 .104736180031E-02 .108007464478E-02 .111380878881E-02 .114859608962E-02 .118446939639E-02 .122146258102E-02 .125961056985E-02 .129894937634E-02 .133951613484E-02 .138134913524E-02 .142448785885E-02 .146897301527E-02 .151484658043E-02 .156215183583E-02 .161093340891E-02 .166123731473E-02 .171311099887E-02 .176660338167E-02 .182176490384E-02 .187864757343E-02 .193730501424E-02 .199779251575E-02 .206016708448E-02 .212448749703E-02 .219081435467E-02 .225921013955E-02 .232973927275E-02 .240246817393E-02 .247746532294E-02 .255480132317E-02 .263454896692E-02 .271678330270E-02 .280158170453E-02 .288902394341E-02 .297919226091E-02 .307217144494E-02 .316804890785E-02 .326691476685E-02 .336886192686E-02 .347398616584E-02 .358238622264E-02 .369416388752E-02 .380942409536E-02 .392827502162E-02 .405082818120E-02 .417719853018E-02 .430750457064E-02 .444186845849E-02 .458041611463E-02 .472327733924E-02 .487058592948E-02 .502247980072E-02 .517910111123E-02 .534059639055E-02 .550711667158E-02 .567881762663E-02 .585585970720E-02 .603840828807E-02 .622663381532E-02 .642071195879E-02 .662082376879E-02 .682715583742E-02 .703990046437E-02 .725925582756E-02 .748542615854E-02 .771862192287E-02 .795906000564E-02 .820696390209E-02 .846256391369E-02 .872609734956E-02 .899780873359E-02 .927795001718E-02 .956678079793E-02 .986456854424E-02 .101715888261E-01 .104881255520E-01 .108144712124E-01 .111509271298E-01 .114978037149E-01 .118554207305E-01 .122241075615E-01 .126042034924E-01 .129960579918E-01 .134000310045E-01 .138164932510E-01 .142458265341E-01 .146884240544E-01 .151446907320E-01 .156150435380E-01 .160999118325E-01 .165997377123E-01 .171149763652E-01 .176460964347E-01 .181935803913E-01 .187579249144E-01 .193396412807E-01 .199392557634E-01 .205573100392E-01 .211943616040E-01 .218509841986E-01 .225277682421E-01 .232253212754E-01 .239442684126E-01 .246852528027E-01 .254489360990E-01 .262359989379E-01 .270471414267E-01 .278830836400E-01 .287445661242E-01 .296323504110E-01 .305472195391E-01 .314899785838E-01 .324614551939E-01 .334625001371E-01 .344939878519E-01 .355568170060E-01 .366519110621E-01 .377802188485E-01 .389427151359E-01 .401404012185E-01 .413743054996E-01 .426454840804E-01 .439550213516E-01 .453040305870E-01 .466936545381E-01 .481250660278E-01 .495994685439E-01 .511180968300E-01 .526822174719E-01 .542931294803E-01 .559521648652E-01 .576606892038E-01 .594201021965E-01 .612318382129E-01 .630973668217E-01 .650181933062E-01 .669958591598E-01 .690319425612E-01 .711280588251E-01 .732858608263E-01 .755070393939E-01 .777933236717E-01 .801464814426E-01 .825683194105E-01 .850606834400E-01 .876254587438E-01 .902645700198E-01 .929799815261E-01 .957736970947E-01 .986477600748E-01 .101604253200E+00 .104645298378E+00 .107773056383E+00 .110989726468E+00 .114297545857E+00 .117698789143E+00 .121195767559E+00 .124790828122E+00 .128486352645E+00 .132284756603E+00 .136188487837E+00 .140200025103E+00 .144321876432E+00 .148556577312E+00 .152906688661E+00 .157374794589E+00 .161963499935E+00 .166675427565E+00 .171513215405E+00 .176479513220E+00 .181576979093E+00 .186808275613E+00 .192176065735E+00 .197683008321E+00 .203331753305E+00 .209124936512E+00 .215065174068E+00 .221155056411E+00 .227397141871E+00 .233793949803E+00 .240347953250E+00 .247061571117E+00 .253937159841E+00 .260977004525E+00 .268183309519E+00 .275558188443E+00 .283103653605E+00 .290821604816E+00 .298713817571E+00 .306781930584E+00 .315027432657E+00 .323451648865E+00 .332055726046E+00 .340840617576E+00 .349807067425E+00 .358955593487E+00 .368286470159E+00 .377799710190E+00 .387495045785E+00 .397371908965E+00 .407429411204E+00 .417666322336E+00 .428081048771E+00 .438671611019E+00 .449435620570E+00 .460370256155E+00 .471472239430E+00 .482737810143E+00 .494162700822E+00 .505742111083E+00 .517470681601E+00 .529342467855E+00 .541350913739E+00 .553488825138E+00 .565748343618E+00 .578120920324E+00 .590597290275E+00 .603167447193E+00 .615820619028E+00 .628545244425E+00 .641328950252E+00 .654158530487E+00 .667019926651E+00 .679898210027E+00 .692777566001E+00 .705641280647E+00 .718471730061E+00 .731250372511E+00 .743957743899E+00 .756573456763E+00 .769076203135E+00 .781443761698E+00 .793653009403E+00 .805679938101E+00 .817499676318E+00 .829086516702E+00 .840413949308E+00 .851454701175E+00 .862180782418E+00 .872563539145E+00 .882573713520E+00 .892181511113E+00 .901356675885E+00 .910068572866E+00 .918286278748E+00 .925978680514E+00 .933114582055E+00 .939662818961E+00 .945592381235E+00 .950872544073E+00 .955473006300E+00 .959364036498E+00 .962516626339E+00 .964902650894E+00 .966495035485E+00 .967267928534E+00 .967196879912E+00 .966259024085E+00 .964433267362E+00 pseudo wavefunction .293515950815E-05 .302687589346E-05 .312145818614E-05 .321899593862E-05 .331958150160E-05 .342331011154E-05 .353027998078E-05 .364059239055E-05 .375435178686E-05 .387166587941E-05 .399264574356E-05 .411740592547E-05 .424606455061E-05 .437874343556E-05 .451556820335E-05 .465666840245E-05 .480217762936E-05 .495223365514E-05 .510697855587E-05 .526655884713E-05 .543112562276E-05 .560083469788E-05 .577584675647E-05 .595632750345E-05 .614244782163E-05 .633438393344E-05 .653231756787E-05 .673643613244E-05 .694693289069E-05 .716400714518E-05 .738786442615E-05 .761871668614E-05 .785678250070E-05 .810228727528E-05 .835546345871E-05 .861655076322E-05 .888579639149E-05 .916345527061E-05 .944979029354E-05 .974507256793E-05 .100495816729E-04 .103636059237E-04 .106874426447E-04 .110213984508E-04 .113657895380E-04 .117209419825E-04 .120871920497E-04 .124648865122E-04 .128543829785E-04 .132560502315E-04 .136702685775E-04 .140974302064E-04 .145379395631E-04 .149922137304E-04 .154606828237E-04 .159437903986E-04 .164419938704E-04 .169557649476E-04 .174855900784E-04 .180319709112E-04 .185954247695E-04 .191764851419E-04 .197757021871E-04 .203936432548E-04 .210308934229E-04 .216880560513E-04 .223657533535E-04 .230646269853E-04 .237853386526E-04 .245285707379E-04 .252950269461E-04 .260854329712E-04 .269005371829E-04 .277411113356E-04 .286079512987E-04 .295018778104E-04 .304237372546E-04 .313744024624E-04 .323547735384E-04 .333657787126E-04 .344083752198E-04 .354835502055E-04 .365923216605E-04 .377357393848E-04 .389148859817E-04 .401308778821E-04 .413848664025E-04 .426780388340E-04 .440116195670E-04 .453868712502E-04 .468050959859E-04 .482676365629E-04 .497758777275E-04 .513312474950E-04 .529352185008E-04 .545893093954E-04 .562950862814E-04 .580541641967E-04 .598682086428E-04 .617389371622E-04 .636681209638E-04 .656575865996E-04 .677092176943E-04 .698249567279E-04 .720068068746E-04 .742568338993E-04 .765771681126E-04 .789700063875E-04 .814376142392E-04 .839823279688E-04 .866065568755E-04 .893127855362E-04 .921035761579E-04 .949815710023E-04 .979494948866E-04 .101010157762E-03 .104166457375E-03 .107421382006E-03 .110778013300E-03 .114239529184E-03 .117809206871E-03 .121490425961E-03 .125286671643E-03 .129201537989E-03 .133238731355E-03 .137402073888E-03 .141695507141E-03 .146123095804E-03 .150689031547E-03 .155397636985E-03 .160253369765E-03 .165260826787E-03 .170424748544E-03 .175750023613E-03 .181241693268E-03 .186904956254E-03 .192745173699E-03 .198767874182E-03 .204978758956E-03 .211383707340E-03 .217988782275E-03 .224800236048E-03 .231824516204E-03 .239068271632E-03 .246538358848E-03 .254241848469E-03 .262186031885E-03 .270378428148E-03 .278826791065E-03 .287539116513E-03 .296523649987E-03 .305788894373E-03 .315343617967E-03 .325196862742E-03 .335357952869E-03 .345836503500E-03 .356642429829E-03 .367785956424E-03 .379277626849E-03 .391128313591E-03 .403349228279E-03 .415951932227E-03 .428948347296E-03 .442350767095E-03 .456171868516E-03 .470424723632E-03 .485122811954E-03 .500280033058E-03 .515910719608E-03 .532029650764E-03 .548652066005E-03 .565793679366E-03 .583470694110E-03 .601699817841E-03 .620498278071E-03 .639883838262E-03 .659874814338E-03 .680490091698E-03 .701749142739E-03 .723672044892E-03 .746279499197E-03 .769592849426E-03 .793634101769E-03 .818425945094E-03 .843991771801E-03 .870355699276E-03 .897542591975E-03 .925578084129E-03 .954488603108E-03 .984301393441E-03 .101504454152E-02 .104674700098E-02 .107943861882E-02 .111315016217E-02 .114791334592E-02 .118376086089E-02 .122072640301E-02 .125884470302E-02 .129815155713E-02 .133868385837E-02 .138047962877E-02 .142357805235E-02 .146801950888E-02 .151384560848E-02 .156109922706E-02 .160982454248E-02 .166006707166E-02 .171187370837E-02 .176529276185E-02 .182037399625E-02 .187716867084E-02 .193572958085E-02 .199611109922E-02 .205836921884E-02 .212256159561E-02 .218874759197E-02 .225698832111E-02 .232734669152E-02 .239988745212E-02 .247467723763E-02 .255178461422E-02 .263128012531E-02 .271323633737E-02 .279772788569E-02 .288483151973E-02 .297462614823E-02 .306719288358E-02 .316261508532E-02 .326097840269E-02 .336237081573E-02 .346688267474E-02 .357460673780E-02 .368563820592E-02 .380007475541E-02 .391801656703E-02 .403956635145E-02 .416482937035E-02 .429391345269E-02 .442692900528E-02 .456398901707E-02 .470520905618E-02 .485070725886E-02 .500060430920E-02 .515502340865E-02 .531409023397E-02 .547793288227E-02 .564668180166E-02 .582046970584E-02 .599943147075E-02 .618370401140E-02 .637342613649E-02 .656873837859E-02 .676978279704E-02 .697670275076E-02 .718964263777E-02 .740874759775E-02 .763416317401E-02 .786603493039E-02 .810450801869E-02 .834972669132E-02 .860183375384E-02 .886096995105E-02 .912727328021E-02 .940087822389E-02 .968191489469E-02 .997050808288E-02 .102667761977E-01 .105708300917E-01 .108827717569E-01 .112026928808E-01 .115306732474E-01 .118667789709E-01 .122110605430E-01 .125635506798E-01 .129242619463E-01 .132931841402E-01 .136702814109E-01 .140554890908E-01 .144487102119E-01 .148498116792E-01 .152586200706E-01 .156749170288E-01 .160984342102E-01 .165288477523E-01 .169657722156E-01 .174087539575E-01 .178572638883E-01 .183106895568E-01 .187683265118E-01 .192293688780E-01 .196928990840E-01 .201578766744E-01 .206231261343E-01 .210873236500E-01 .215489827267E-01 .220064385775E-01 .224578311954E-01 .229010870176E-01 .233338990830E-01 .237537055874E-01 .241576667307E-01 .245426397551E-01 .249051520669E-01 .252413723381E-01 .255470794811E-01 .258176293970E-01 .260479193968E-01 .262323502064E-01 .263647854696E-01 .264385086789E-01 .264461774747E-01 .263797752730E-01 .262305602020E-01 .259890113531E-01 .256447723817E-01 .251865925268E-01 .246022651576E-01 .238785639997E-01 .230011772387E-01 .219546397576E-01 .207222638156E-01 .192860685396E-01 .176267086619E-01 .157234029998E-01 .135538632370E-01 .110942236241E-01 .831897227247E-02 .520088475714E-02 .171096078226E-02 -.218163531936E-02 -.650962947718E-02 -.113076874024E-01 -.166124580048E-01 -.224626100197E-01 -.288988612036E-01 -.359639994957E-01 -.437028955404E-01 -.521625058950E-01 -.613918660458E-01 -.714420719550E-01 -.823662481555E-01 -.942194992654E-01 -.107058840041E+00 -.120943096496E+00 -.135932766942E+00 -.152089826678E+00 -.169477453202E+00 -.188159639694E+00 -.208200652831E+00 -.229664276223E+00 -.252612762643E+00 -.277105396495E+00 -.303183186403E+00 ae wavefunction .496884258073E-05 .512409818907E-05 .528420477305E-05 .544931389481E-05 .561958185136E-05 .579516982250E-05 .597624402331E-05 .616297586139E-05 .635554209910E-05 .655412502073E-05 .675891260504E-05 .697009870303E-05 .718788322139E-05 .741247231163E-05 .764407856506E-05 .788292121394E-05 .812922633887E-05 .838322708265E-05 .864516387082E-05 .891528463907E-05 .919384506780E-05 .948110882391E-05 .977734781022E-05 .100828424226E-04 .103978818152E-04 .107227641740E-04 .110577969986E-04 .114032973931E-04 .117595923661E-04 .121270191397E-04 .125059254688E-04 .128966699691E-04 .132996224572E-04 .137151642994E-04 .141436887726E-04 .145856014363E-04 .150413205155E-04 .155112772964E-04 .159959165341E-04 .164956968727E-04 .170110912791E-04 .175425874896E-04 .180906884714E-04 .186559128972E-04 .192387956362E-04 .198398882585E-04 .204597595569E-04 .210989960841E-04 .217582027068E-04 .224380031770E-04 .231390407213E-04 .238619786483E-04 .246075009753E-04 .253763130739E-04 .261691423361E-04 .269867388615E-04 .278298761651E-04 .286993519076E-04 .295959886484E-04 .305206346219E-04 .314741645381E-04 .324574804082E-04 .334715123954E-04 .345172196926E-04 .355955914274E-04 .367076475950E-04 .378544400201E-04 .390370533492E-04 .402566060729E-04 .415142515807E-04 .428111792481E-04 .441486155578E-04 .455278252554E-04 .469501125415E-04 .484168222999E-04 .499293413649E-04 .514890998274E-04 .530975723813E-04 .547562797126E-04 .564667899303E-04 .582307200427E-04 .600497374788E-04 .619255616573E-04 .638599656037E-04 .658547776182E-04 .679118829943E-04 .700332257915E-04 .722208106622E-04 .744767047353E-04 .768030395583E-04 .792020130990E-04 .816758918093E-04 .842270127528E-04 .868577857978E-04 .895706958782E-04 .923683053245E-04 .952532562656E-04 .982282731060E-04 .101296165078E-03 .104459828875E-03 .107722251360E-03 .111086512366E-03 .114555787576E-03 .118133351493E-03 .121822580502E-03 .125626956027E-03 .129550067782E-03 .133595617125E-03 .137767420512E-03 .142069413056E-03 .146505652203E-03 .151080321507E-03 .155797734533E-03 .160662338871E-03 .165678720278E-03 .170851606941E-03 .176185873874E-03 .181686547449E-03 .187358810061E-03 .193208004939E-03 .199239641100E-03 .205459398457E-03 .211873133076E-03 .218486882598E-03 .225306871824E-03 .232339518464E-03 .239591439065E-03 .247069455115E-03 .254780599332E-03 .262732122141E-03 .270931498346E-03 .279386434003E-03 .288104873495E-03 .297095006827E-03 .306365277127E-03 .315924388381E-03 .325781313392E-03 .335945301980E-03 .346425889421E-03 .357232905138E-03 .368376481647E-03 .379867063771E-03 .391715418121E-03 .403932642857E-03 .416530177736E-03 .429519814449E-03 .442913707267E-03 .456724383992E-03 .470964757224E-03 .485648135961E-03 .500788237524E-03 .516399199836E-03 .532495594040E-03 .549092437495E-03 .566205207124E-03 .583849853153E-03 .602042813235E-03 .620801026974E-03 .640141950851E-03 .660083573574E-03 .680644431850E-03 .701843626600E-03 .723700839614E-03 .746236350666E-03 .769471055100E-03 .793426481885E-03 .818124812164E-03 .843588898296E-03 .869842283411E-03 .896909221475E-03 .924814697890E-03 .953584450619E-03 .983244991880E-03 .101382363037E-02 .104534849406E-02 .107784855361E-02 .111135364627E-02 .114589450048E-02 .118150276099E-02 .121821101464E-02 .125605281671E-02 .129506271791E-02 .133527629201E-02 .137673016408E-02 .141946203936E-02 .146351073277E-02 .150891619908E-02 .155571956369E-02 .160396315405E-02 .165369053174E-02 .170494652514E-02 .175777726276E-02 .181223020721E-02 .186835418967E-02 .192619944507E-02 .198581764783E-02 .204726194807E-02 .211058700849E-02 .217584904165E-02 .224310584782E-02 .231241685326E-02 .238384314885E-02 .245744752922E-02 .253329453210E-02 .261145047797E-02 .269198350999E-02 .277496363397E-02 .286046275849E-02 .294855473501E-02 .303931539783E-02 .313282260390E-02 .322915627231E-02 .332839842334E-02 .343063321694E-02 .353594699052E-02 .364442829584E-02 .375616793488E-02 .387125899444E-02 .398979687928E-02 .411187934363E-02 .423760652064E-02 .436708094977E-02 .450040760151E-02 .463769389939E-02 .477904973867E-02 .492458750153E-02 .507442206818E-02 .522867082354E-02 .538745365894E-02 .555089296830E-02 .571911363814E-02 .589224303097E-02 .607041096116E-02 .625374966257E-02 .644239374728E-02 .663648015432E-02 .683614808761E-02 .704153894191E-02 .725279621591E-02 .747006541078E-02 .769349391349E-02 .792323086284E-02 .815942699706E-02 .840223448123E-02 .865180671247E-02 .890829810134E-02 .917186382691E-02 .944265956356E-02 .972084117676E-02 .100065643854E-01 .102999843874E-01 .106012554461E-01 .109105304333E-01 .112279603259E-01 .115536936520E-01 .118878758817E-01 .122306487598E-01 .125821495725E-01 .129425103456E-01 .133118569675E-01 .136903082293E-01 .140779747785E-01 .144749579755E-01 .148813486484E-01 .152972257361E-01 .157226548098E-01 .161576864666E-01 .166023545806E-01 .170566744046E-01 .175206405069E-01 .179942245324E-01 .184773727744E-01 .189700035407E-01 .194720043000E-01 .199832285909E-01 .205034926746E-01 .210325719139E-01 .215701968555E-01 .221160489950E-01 .226697562006E-01 .232308877697E-01 .237989490919E-01 .243733758903E-01 .249535280094E-01 .255386827181E-01 .261280274933E-01 .267206522470E-01 .273155409590E-01 .279115626737E-01 .285074618187E-01 .291018477975E-01 .296931838114E-01 .302797748572E-01 .308597548497E-01 .314310728127E-01 .319914780797E-01 .325385044466E-01 .330694532097E-01 .335813750279E-01 .340710505377E-01 .345349696564E-01 .349693094971E-01 .353699108275E-01 .357322529972E-01 .360514272568E-01 .363221083988E-01 .365385246421E-01 .366944256883E-01 .367830488797E-01 .367970833886E-01 .367286323750E-01 .365691730538E-01 .363095146169E-01 .359397539702E-01 .354492292462E-01 .348264710767E-01 .340591516142E-01 .331340313146E-01 .320369035143E-01 .307525368503E-01 .292646156166E-01 .275556781589E-01 .256070534679E-01 .233987961597E-01 .209096200804E-01 .181168308340E-01 .149962575787E-01 .115221845194E-01 .766728258777E-02 .340254189406E-02 -.130279437531E-02 -.648129383278E-02 -.121673956417E-01 -.183974671205E-01 -.252098550325E-01 -.326449302420E-01 -.407451242461E-01 -.495549559073E-01 -.591210465130E-01 -.694921210709E-01 -.807189935100E-01 -.928545332213E-01 -.105953610080E+00 -.120073014843E+00 -.135271351470E+00 -.151608897664E+00 -.169147429535E+00 -.187950006021E+00 -.208080708326E+00 -.229604329306E+00 -.252586007415E+00 -.277090799493E+00 -.303183186403E+00 pseudo wavefunction .118327811647E-08 .125838243330E-08 .133825372615E-08 .142319456166E-08 .151352671078E-08 .160959236772E-08 .171175544626E-08 .182040295826E-08 .193594647978E-08 .205882371019E-08 .218950013026E-08 .232847076544E-08 .247626206118E-08 .263343387714E-08 .280058160804E-08 .297833843916E-08 .316737774493E-08 .336841563979E-08 .358221369097E-08 .380958180342E-08 .405138128792E-08 .430852812383E-08 .458199642899E-08 .487282214989E-08 .518210698597E-08 .551102256308E-08 .586081487180E-08 .623280898747E-08 .662841408983E-08 .704912880120E-08 .749654686359E-08 .797236317600E-08 .847838021507E-08 .901651486315E-08 .958880566977E-08 .101974205741E-07 .108446651173E-07 .115329911767E-07 .122650062534E-07 .130434833505E-07 .138713714773E-07 .147518068210E-07 .156881246269E-07 .166838718329E-07 .177428205061E-07 .188689821319E-07 .200666228105E-07 .213402794171E-07 .226947767890E-07 .241352460023E-07 .256671438101E-07 .272962733130E-07 .290288059424E-07 .308713048392E-07 .328307497161E-07 .349145632976E-07 .371306394393E-07 .394873730304E-07 .419936917956E-07 .446590901148E-07 .474936649894E-07 .505081542914E-07 .537139774407E-07 .571232786635E-07 .607489729971E-07 .646047952140E-07 .687053518520E-07 .730661765461E-07 .777037888728E-07 .826357569289E-07 .878807638828E-07 .934586787496E-07 .993906316584E-07 .105699093897E-06 .112407963036E-06 .119542653459E-06 .127130192637E-06 .135199323509E-06 .143780613370E-06 .152906569662E-06 .162611763122E-06 .172932958738E-06 .183909255020E-06 .195582232119E-06 .207996109331E-06 .221197912615E-06 .235237652729E-06 .250168514687E-06 .266047059223E-06 .282933437063E-06 .300891616779E-06 .319989627117E-06 .340299814700E-06 .361899118090E-06 .384869359241E-06 .409297553463E-06 .435276239040E-06 .462903827789E-06 .492284977857E-06 .523530990183E-06 .556760230128E-06 .592098575859E-06 .629679895198E-06 .669646552737E-06 .712149949136E-06 .757351094654E-06 .805421219085E-06 .856542420401E-06 .910908354569E-06 .968724969153E-06 .103021128347E-05 .109560021829E-05 .116513947813E-05 .123909248967E-05 .131773939958E-05 .140137813579E-05 .149032553612E-05 .158491854844E-05 .168551550712E-05 .179249749048E-05 .190626976429E-05 .202726331705E-05 .215593649260E-05 .229277672639E-05 .243830239196E-05 .259306476461E-05 .275765010968E-05 .293268190343E-05 .311882319481E-05 .331677911720E-05 .352729955951E-05 .375118200687E-05 .398927456157E-05 .424247915575E-05 .451175496804E-05 .479812205698E-05 .510266522513E-05 .542653812837E-05 .577096764603E-05 .613725852839E-05 .652679833921E-05 .694106271182E-05 .738162093895E-05 .785014191723E-05 .834840046907E-05 .887828406567E-05 .944179997684E-05 .100410828745E-04 .106784029188E-04 .113561743575E-04 .120769646709E-04 .128435042975E-04 .136586969767E-04 .145256307478E-04 .154475896475E-04 .164280661491E-04 .174707743917E-04 .185796642490E-04 .197589362905E-04 .210130576923E-04 .223467791585E-04 .237651529149E-04 .252735518459E-04 .268776898454E-04 .285836434593E-04 .303978749008E-04 .323272565273E-04 .343790968697E-04 .365611683137E-04 .388817365378E-04 .413495918191E-04 .439740823254E-04 .467651495207E-04 .497333658158E-04 .528899746091E-04 .562469328674E-04 .598169564085E-04 .636135680566E-04 .676511488533E-04 .719449925173E-04 .765113633592E-04 .813675578703E-04 .865319702187E-04 .920241618998E-04 .978649358052E-04 .104076414990E-03 .110682126434E-03 .117707090122E-03 .125177913764E-03 .133122893530E-03 .141572121171E-03 .150557597931E-03 .160113355686E-03 .170275585758E-03 .181082775902E-03 .192575855970E-03 .204798352820E-03 .217796555031E-03 .231619688069E-03 .246320100545E-03 .261953462283E-03 .278578974934E-03 .296259595933E-03 .315062276650E-03 .335058215614E-03 .356323127785E-03 .378937530869E-03 .402987049766E-03 .428562740290E-03 .455761433373E-03 .484686101056E-03 .515446245635E-03 .548158313421E-03 .582946134670E-03 .619941391325E-03 .659284114330E-03 .701123212367E-03 .745617034007E-03 .792933965352E-03 .843253065427E-03 .896764741669E-03 .953671468041E-03 .101418854844E-02 .107854492822E-02 .114698405690E-02 .121976480515E-02 .129716243961E-02 .137946965891E-02 .146699769502E-02 .156007748367E-02 .165906090842E-02 .176432212276E-02 .187625895515E-02 .199529440218E-02 .212187821520E-02 .225648858630E-02 .239963393970E-02 .255185483498E-02 .271372598913E-02 .288585842467E-02 .306890175145E-02 .326354659037E-02 .347052714763E-02 .369062394859E-02 .392466674095E-02 .417353757737E-02 .443817408840E-02 .471957295697E-02 .501879360653E-02 .533696211553E-02 .567527537148E-02 .603500547880E-02 .641750443514E-02 .682420909193E-02 .725664641537E-02 .771643906530E-02 .820531130981E-02 .872509529479E-02 .927773768814E-02 .986530671952E-02 .104899996374E-01 .111541506060E-01 .118602390660E-01 .126108985835E-01 .134089262131E-01 .142572924007E-01 .151591514551E-01 .161178526159E-01 .171369517461E-01 .182202236811E-01 .193716752640E-01 .205955590983E-01 .218963880504E-01 .232789505342E-01 .247483266096E-01 .263099049279E-01 .279694005572E-01 .297328737170E-01 .316067494564E-01 .335978383027E-01 .357133579105E-01 .379609557374E-01 .403487327690E-01 .428852683155E-01 .455796458952E-01 .484414802195E-01 .514809452841E-01 .547088035705E-01 .581364363499E-01 .617758750770E-01 .656398338513E-01 .697417429111E-01 .740957831191E-01 .787169213802E-01 .836209469224E-01 .888245083559E-01 .943451514075E-01 .100201357214E+00 .106412581037E+00 .112999291243E+00 .119983008379E+00 .127386344151E+00 .135233040085E+00 .143548005665E+00 .152357355685E+00 .161688446585E+00 .171569911498E+00 .182031693765E+00 .193105078677E+00 .204822723214E+00 .217218683599E+00 .230328440541E+00 .244188922105E+00 .258838524250E+00 .274317129221E+00 .290666122115E+00 .307928406188E+00 .326148417685E+00 .345372141303E+00 .365647127749E+00 .387022515271E+00 .409549057540E+00 .433279160794E+00 .458266933771E+00 .484568254618E+00 .512240859674E+00 .541344459715E+00 .571940889977E+00 .604094300882E+00 .637871396903E+00 .673341731279E+00 .710578064245E+00 .749656791934E+00 .790658451919E+00 .833668309369E+00 .878777024654E+00 .926081398692E+00 .975685186112E+00 .102769995794E+01 .108224598477E+01 .113945309778E+01 .119946146830E+01 .126242222661E+01 .132849781736E+01 .139786196240E+01 .147069907305E+01 .154720292320E+01 .162757436479E+01 .171201784010E+01 .180073642515E+01 .189392512940E+01 .199176218598E+01 .209439843814E+01 ae wavefunction .155775645424E-08 .167114846718E-08 .179015364960E-08 .191515549883E-08 .204655860968E-08 .218479016164E-08 .233030138643E-08 .248356918554E-08 .264509786479E-08 .281542090228E-08 .299510285739E-08 .318474139450E-08 .338496949812E-08 .359645758055E-08 .381991615703E-08 .405609817514E-08 .430580188624E-08 .456987369534E-08 .484921123406E-08 .514476666428E-08 .545755003266E-08 .578863319598E-08 .613915343227E-08 .651031786121E-08 .690340770883E-08 .731978313296E-08 .776088804545E-08 .822825564949E-08 .872351386105E-08 .924839147606E-08 .980472435204E-08 .103944625157E-07 .110196770180E-07 .116825677296E-07 .123854715877E-07 .131308709665E-07 .139214032785E-07 .147598704117E-07 .156492493459E-07 .165927029218E-07 .175935920673E-07 .186554877965E-07 .197821848554E-07 .209777158161E-07 .222463656049E-07 .235926883834E-07 .250215236671E-07 .265380147936E-07 .281476282012E-07 .298561735880E-07 .316698256861E-07 .335951475720E-07 .356391147822E-07 .378091418234E-07 .401131097464E-07 .425593954477E-07 .451569035119E-07 .479150990694E-07 .508440436170E-07 .539544325444E-07 .572576353264E-07 .607657381937E-07 .644915893162E-07 .684488472561E-07 .726520320596E-07 .771165798409E-07 .818589007451E-07 .868964408977E-07 .922477469645E-07 .979325375110E-07 .103971775326E-06 .110387747877E-06 .117204149728E-06 .124446172787E-06 .132140600239E-06 .140315908151E-06 .149002371650E-06 .158232179969E-06 .168039556737E-06 .178460889472E-06 .189534866144E-06 .201302621377E-06 .213807890976E-06 .227097176987E-06 .241219922820E-06 .256228699594E-06 .272179404224E-06 .289131470389E-06 .307148092164E-06 .326296462649E-06 .346648027197E-06 .368278752795E-06 .391269414667E-06 .415705900849E-06 .441679536284E-06 .469287427183E-06 .498632827464E-06 .529825528369E-06 .562982272572E-06 .598227194892E-06 .635692290572E-06 .675517913516E-06 .717853305973E-06 .762857161732E-06 .810698225303E-06 .861555928623E-06 .915621068467E-06 .973096526967E-06 .103419803669E-05 .109915499620E-05 .116821133521E-05 .124162643554E-05 .131967611114E-05 .140265364838E-05 .149087091425E-05 .158465953326E-05 .168437213971E-05 .179038370918E-05 .190309297416E-05 .202292392946E-05 .215032743333E-05 .228578290922E-05 .242980015642E-05 .258292127409E-05 .274572270875E-05 .291881742954E-05 .310285724343E-05 .329853525470E-05 .350658848236E-05 .372780064192E-05 .396300510344E-05 .421308803772E-05 .447899176060E-05 .476171828983E-05 .506233312632E-05 .538196927571E-05 .572183152334E-05 .608320098092E-05 .646743991976E-05 .687599691113E-05 .731041229057E-05 .777232396891E-05 .826347361030E-05 .878571320132E-05 .934101203565E-05 .993146413985E-05 .105592961700E-04 .112268758057E-04 .119367206772E-04 .126915078539E-04 .134940839364E-04 .143474757815E-04 .152549019104E-04 .162197846322E-04 .172457629383E-04 .183367062074E-04 .194967287783E-04 .207302054422E-04 .220417879126E-04 .234364223365E-04 .249193679086E-04 .264962166621E-04 .281729145072E-04 .299557835967E-04 .318515461029E-04 .338673494930E-04 .360107933985E-04 .382899581787E-04 .407134352821E-04 .432903595247E-04 .460304433966E-04 .489440135336E-04 .520420494817E-04 .553362249042E-04 .588389513795E-04 .625634249564E-04 .665236756364E-04 .707346199668E-04 .752121169412E-04 .799730274114E-04 .850352772315E-04 .904179243695E-04 .961412302277E-04 .102226735444E-03 .108697340445E-03 .115577391053E-03 .122892769454E-03 .130670990878E-03 .138941306319E-03 .147734811701E-03 .157084563868E-03 .167025703831E-03 .177595587723E-03 .188833925940E-03 .200782930969E-03 .213487474449E-03 .226995254037E-03 .241356970674E-03 .256626516904E-03 .272861176933E-03 .290121839129E-03 .308473221762E-03 .327984112768E-03 .348727624426E-03 .370781463840E-03 .394228220217E-03 .419155669953E-03 .445657100639E-03 .473831655114E-03 .503784696818E-03 .535628197735E-03 .569481150289E-03 .605470004674E-03 .643729133150E-03 .684401322935E-03 .727638299447E-03 .773601281709E-03 .822461571875E-03 .874401180932E-03 .929613492746E-03 .988303968780E-03 .105069089589E-02 .111700617981E-02 .118749618703E-02 .126242263801E-02 .134206355469E-02 .142671426556E-02 .151668847182E-02 .161231937803E-02 .171396089118E-02 .182198889227E-02 .193680258442E-02 .205882592232E-02 .218850912745E-02 .232633029426E-02 .247279709256E-02 .262844857159E-02 .279385707173E-02 .296963025010E-02 .315641322630E-02 .335489085552E-02 .356579013594E-02 .378988275827E-02 .402798780527E-02 .428097460981E-02 .454976578025E-02 .483534040252E-02 .513873742871E-02 .546105926233E-02 .580347555131E-02 .616722719975E-02 .655363061058E-02 .696408217150E-02 .740006299719E-02 .786314394166E-02 .835499089486E-02 .887737037875E-02 .943215545821E-02 .100213319835E-01 .106470051811E-01 .113114066107E-01 .120169015075E-01 .127659965282E-01 .135613479220E-01 .144057701461E-01 .153022449495E-01 .162539309457E-01 .172641736989E-01 .183365163480E-01 .194747107932E-01 .206827294711E-01 .219647777458E-01 .233253069437E-01 .247690280591E-01 .263009261628E-01 .279262755408E-01 .296506555964E-01 .314799675469E-01 .334204519456E-01 .354787070663E-01 .376617081783E-01 .399768277531E-01 .424318566309E-01 .450350261874E-01 .477950315342E-01 .507210557889E-01 .538227954519E-01 .571104869257E-01 .605949342130E-01 .642875378300E-01 .682003249712E-01 .723459809603E-01 .767378820241E-01 .813901294217E-01 .863175849661E-01 .915359079671E-01 .970615936323E-01 .102912012953E+00 .109105454107E+00 .115661165409E+00 .122599399832E+00 .129941461125E+00 .137709751558E+00 .145927821316E+00 .154620419553E+00 .163813547149E+00 .173534511166E+00 .183811981042E+00 .194676046534E+00 .206158277430E+00 .218291785052E+00 .231111285582E+00 .244653165208E+00 .258955547168E+00 .274058360669E+00 .290003411772E+00 .306834456261E+00 .324597274563E+00 .343339748817E+00 .363111942119E+00 .383966180135E+00 .405957135129E+00 .429141912617E+00 .453580140822E+00 .479334063113E+00 .506468633774E+00 .535051617308E+00 .565153691761E+00 .596848556376E+00 .630213044198E+00 .665327240103E+00 .702274605035E+00 .741142107159E+00 .782020360869E+00 .825003774715E+00 .870190709396E+00 .917683647268E+00 .967589374872E+00 .102001918033E+01 .107508906766E+01 .113291999036E+01 .119363810694E+01 .125737506141E+01 .132426829240E+01 .139446137456E+01 .146810439717E+01 .154535438480E+01 .162637576612E+01 .171134089760E+01 .180043064973E+01 .189383506471E+01 .199175409551E+01 .209439843814E+01 End of Dataset PAW_PBE Li 17Jan2003 1.00000000000000000 parameters from PSCTR are: VRHFIN =Li: s1p0 LEXCH = PE EATOM = 5.3001 eV, .3895 Ry TITEL = PAW_PBE Li 17Jan2003 LULTRA = F use ultrasoft PP ? IUNSCR = 1 unscreen: 0-lin 1-nonlin 2-no RPACOR = 1.500 partial core radius POMASS = 7.010; ZVAL = 1.000 mass and valenz RCORE = 2.050 outmost cutoff radius RWIGS = 2.600; RWIGS = 1.376 wigner-seitz radius (au A) ENMAX = 140.000; ENMIN = 100.000 eV ICORE = 2 local potential LCOR = T correct aug charges LPAW = T paw PP EAUG = 331.638 DEXC = -.010 RMAX = 4.263 core radius for proj-oper RAUG = 1.300 factor for augmentation sphere RDEP = 2.094 radius for radial grids QCUT = -2.932; QGAM = 5.865 optimization parameters Description l E TYP RCUT TYP RCUT 0 .000 23 2.050 0 2.000 23 2.050 1 .000 23 2.050 2 .000 23 2.050 Error from kinetic energy argument (eV) NDATA = 100 STEP = 20.000 1.050 .267 .259 .254 .244 .239 .227 .215 .209 .196 .183 .176 .163 .150 .138 .126 .115 .105 .947E-01 .853E-01 .726E-01 .648E-01 .577E-01 .481E-01 .424E-01 .373E-01 .304E-01 .246E-01 .212E-01 .169E-01 .132E-01 .103E-01 .784E-02 .590E-02 .438E-02 .319E-02 .229E-02 .143E-02 .989E-03 .600E-03 .417E-03 .274E-03 .204E-03 .176E-03 .169E-03 .168E-03 .167E-03 .161E-03 .146E-03 .130E-03 .106E-03 .827E-04 .653E-04 .470E-04 .333E-04 .227E-04 .179E-04 .157E-04 .150E-04 .149E-04 .146E-04 .136E-04 .119E-04 .984E-05 .735E-05 .553E-05 .401E-05 .317E-05 .284E-05 .279E-05 .276E-05 .259E-05 .223E-05 .177E-05 .133E-05 .979E-06 .819E-06 .766E-06 .763E-06 .727E-06 .637E-06 .500E-06 .375E-06 .299E-06 .272E-06 .270E-06 .257E-06 .220E-06 .169E-06 .132E-06 .118E-06 .117E-06 .111E-06 .927E-07 .731E-07 .614E-07 .594E-07 .578E-07 .508E-07 .406E-07 .358E-07 END of PSCTR-controll parameters local part 90.7068474517883203 .26197235E+01 .26201361E+01 .26229277E+01 .26275712E+01 .26340528E+01 .26423522E+01 .26524428E+01 .26642906E+01 .26778542E+01 .26930845E+01 .27099248E+01 .27283107E+01 .27481708E+01 .27694272E+01 .27919963E+01 .28157896E+01 .28407143E+01 .28666746E+01 .28935717E+01 .29213048E+01 .29497715E+01 .29788681E+01 .30084898E+01 .30385312E+01 .30688867E+01 .30994504E+01 .31301170E+01 .31607816E+01 .31913410E+01 .32216935E+01 .32517396E+01 .32813826E+01 .33105288E+01 .33390878E+01 .33669731E+01 .33941020E+01 .34203957E+01 .34457798E+01 .34701842E+01 .34935431E+01 .35157954E+01 .35368846E+01 .35567587E+01 .35753708E+01 .35926785E+01 .36086444E+01 .36232359E+01 .36364250E+01 .36481882E+01 .36585066E+01 .36673654E+01 .36747539E+01 .36806654E+01 .36850965E+01 .36880477E+01 .36895226E+01 .36895278E+01 .36880728E+01 .36851698E+01 .36808332E+01 .36750799E+01 .36679284E+01 .36593990E+01 .36495131E+01 .36382937E+01 .36257643E+01 .36119493E+01 .35968736E+01 .35805625E+01 .35630412E+01 .35443351E+01 .35244697E+01 .35034698E+01 .34813602E+01 .34581653E+01 .34339087E+01 .34086135E+01 .33823023E+01 .33549969E+01 .33267185E+01 .32974875E+01 .32673238E+01 .32362469E+01 .32042757E+01 .31714286E+01 .31377238E+01 .31031796E+01 .30678137E+01 .30316442E+01 .29946894E+01 .29569676E+01 .29184979E+01 .28792998E+01 .28393935E+01 .27988003E+01 .27575423E+01 .27156432E+01 .26731276E+01 .26300219E+01 .25863540E+01 .25421536E+01 .24974521E+01 .24522830E+01 .24066815E+01 .23606851E+01 .23143333E+01 .22676676E+01 .22207318E+01 .21735718E+01 .21262354E+01 .20787729E+01 .20312362E+01 .19836794E+01 .19361582E+01 .18887300E+01 .18414540E+01 .17943904E+01 .17476008E+01 .17011478E+01 .16550948E+01 .16095056E+01 .15644445E+01 .15199759E+01 .14761638E+01 .14330720E+01 .13907635E+01 .13493002E+01 .13087428E+01 .12691503E+01 .12305799E+01 .11930866E+01 .11567228E+01 .11215384E+01 .10875802E+01 .10548915E+01 .10235125E+01 .99347936E+00 .96482440E+00 .93757574E+00 .91175715E+00 .88738785E+00 .86448242E+00 .84305061E+00 .82309729E+00 .80462237E+00 .78762071E+00 .77208216E+00 .75799153E+00 .74532863E+00 .73406832E+00 .72418062E+00 .71563076E+00 .70837939E+00 .70238265E+00 .69759242E+00 .69395652E+00 .69141891E+00 .68991998E+00 .68939679E+00 .68978341E+00 .69101121E+00 .69300917E+00 .69570426E+00 .69902176E+00 .70288564E+00 .70721889E+00 .71194395E+00 .71698302E+00 .72225852E+00 .72769338E+00 .73321148E+00 .73873800E+00 .74419980E+00 .74952573E+00 .75464703E+00 .75949761E+00 .76401441E+00 .76813764E+00 .77181108E+00 .77498233E+00 .77760303E+00 .77962910E+00 .78102087E+00 .78174330E+00 .78176607E+00 .78106368E+00 .77961558E+00 .77740617E+00 .77442482E+00 .77066591E+00 .76612871E+00 .76081740E+00 .75474090E+00 .74791282E+00 .74035124E+00 .73207862E+00 .72312154E+00 .71351055E+00 .70327986E+00 .69246716E+00 .68111331E+00 .66926205E+00 .65695970E+00 .64425487E+00 .63119809E+00 .61784149E+00 .60423851E+00 .59044347E+00 .57651130E+00 .56249718E+00 .54845618E+00 .53444295E+00 .52051139E+00 .50671431E+00 .49310316E+00 .47972768E+00 .46663566E+00 .45387267E+00 .44148177E+00 .42950333E+00 .41797478E+00 .40693046E+00 .39640141E+00 .38641526E+00 .37699610E+00 .36816439E+00 .35993686E+00 .35232651E+00 .34534255E+00 .33899039E+00 .33327171E+00 .32818446E+00 .32372296E+00 .31987800E+00 .31663690E+00 .31398375E+00 .31189945E+00 .31036198E+00 .30934652E+00 .30882570E+00 .30876981E+00 .30914701E+00 .30992358E+00 .31106418E+00 .31253209E+00 .31428948E+00 .31629765E+00 .31851736E+00 .32090902E+00 .32343299E+00 .32604987E+00 .32872069E+00 .33140721E+00 .33407213E+00 .33667933E+00 .33919408E+00 .34158325E+00 .34381549E+00 .34586140E+00 .34769369E+00 .34928737E+00 .35061978E+00 .35167079E+00 .35242283E+00 .35286098E+00 .35297303E+00 .35274946E+00 .35218353E+00 .35127117E+00 .35001106E+00 .34840451E+00 .34645539E+00 .34417014E+00 .34155755E+00 .33862877E+00 .33539711E+00 .33187791E+00 .32808842E+00 .32404763E+00 .31977609E+00 .31529572E+00 .31062967E+00 .30580207E+00 .30083788E+00 .29576270E+00 .29060252E+00 .28538359E+00 .28013218E+00 .27487440E+00 .26963605E+00 .26444237E+00 .25931793E+00 .25428641E+00 .24937051E+00 .24459172E+00 .23997024E+00 .23552484E+00 .23127275E+00 .22722956E+00 .22340913E+00 .21982353E+00 .21648297E+00 .21339578E+00 .21056835E+00 .20800516E+00 .20570872E+00 .20367965E+00 .20191667E+00 .20041663E+00 .19917459E+00 .19818391E+00 .19743627E+00 .19692178E+00 .19662913E+00 .19654563E+00 .19665736E+00 .19694930E+00 .19740544E+00 .19800893E+00 .19874221E+00 .19958716E+00 .20052522E+00 .20153756E+00 .20260523E+00 .20370928E+00 .20483090E+00 .20595158E+00 .20705322E+00 .20811827E+00 .20912986E+00 .21007189E+00 .21092914E+00 .21168740E+00 .21233350E+00 .21285544E+00 .21324245E+00 .21348503E+00 .21357499E+00 .21350556E+00 .21327131E+00 .21286825E+00 .21229382E+00 .21154685E+00 .21062756E+00 .20953758E+00 .20827982E+00 .20685851E+00 .20527911E+00 .20354823E+00 .20167361E+00 .19966398E+00 .19752903E+00 .19527929E+00 .19292605E+00 .19048126E+00 .18795741E+00 .18536745E+00 .18272467E+00 .18004260E+00 .17733489E+00 .17461521E+00 .17189715E+00 .16919411E+00 .16651921E+00 .16388520E+00 .16130434E+00 .15878835E+00 .15634832E+00 .15399461E+00 .15173681E+00 .14958369E+00 .14754311E+00 .14562199E+00 .14382629E+00 .14216096E+00 .14062993E+00 .13923608E+00 .13798127E+00 .13686630E+00 .13589097E+00 .13505404E+00 .13435332E+00 .13378565E+00 .13334696E+00 .13303235E+00 .13283605E+00 .13275160E+00 .13277179E+00 .13288882E+00 .13309433E+00 .13337948E+00 .13373501E+00 .13415136E+00 .13461869E+00 .13512702E+00 .13566625E+00 .13622630E+00 .13679712E+00 .13736884E+00 .13793176E+00 .13847649E+00 .13899399E+00 .13947563E+00 .13991325E+00 .14029921E+00 .14062648E+00 .14088861E+00 .14107982E+00 .14119504E+00 .14122990E+00 .14118076E+00 .14104474E+00 .14081973E+00 .14050435E+00 .14009801E+00 .13960086E+00 .13901378E+00 .13833837E+00 .13757691E+00 .13673235E+00 .13580825E+00 .13480876E+00 .13373857E+00 .13260286E+00 .13140726E+00 .13015776E+00 .12886073E+00 .12752278E+00 .12615078E+00 .12475174E+00 .12333279E+00 .12190110E+00 .12046384E+00 .11902811E+00 .11760090E+00 .11618903E+00 .11479908E+00 .11343737E+00 .11210990E+00 .11082233E+00 .10957990E+00 .10838745E+00 .10724933E+00 .10616943E+00 .10515114E+00 .10419731E+00 .10331026E+00 .10249176E+00 .10174305E+00 .10106480E+00 .10045714E+00 .99919689E-01 .99451513E-01 .99051192E-01 .98716822E-01 .98446039E-01 .98236046E-01 .98083648E-01 .97985281E-01 .97937046E-01 .97934750E-01 .97973939E-01 .98049941E-01 .98157908E-01 .98292857E-01 .98449711E-01 .98623342E-01 .98808613E-01 .99000421E-01 .99193732E-01 .99383623E-01 .99565319E-01 .99734224E-01 .99885959E-01 .10001638E+00 .10012164E+00 .10019815E+00 .10024268E+00 .10025232E+00 .10022451E+00 .10015707E+00 .10004820E+00 .99896492E-01 .99700911E-01 .99460824E-01 .99175979E-01 .98846507E-01 .98472910E-01 .98056048E-01 .97597126E-01 .97097680E-01 .96559555E-01 .95984883E-01 .95376065E-01 .94735741E-01 .94066768E-01 .93372188E-01 .92655203E-01 .91919146E-01 .91167446E-01 .90403606E-01 .89631167E-01 .88853679E-01 .88074678E-01 .87297651E-01 .86526013E-01 .85763082E-01 .85012051E-01 .84275967E-01 .83557708E-01 .82859964E-01 .82185220E-01 .81535737E-01 .80913541E-01 .80320411E-01 .79757867E-01 .79227171E-01 .78729312E-01 .78265014E-01 .77834730E-01 .77438645E-01 .77076683E-01 .76748510E-01 .76453542E-01 .76190959E-01 .75959712E-01 .75758536E-01 .75585971E-01 .75440372E-01 .75319929E-01 .75222687E-01 .75146560E-01 .75089360E-01 .75048807E-01 .75022556E-01 .75008214E-01 .75003363E-01 .75005578E-01 .75012444E-01 .75021583E-01 .75030663E-01 .75037424E-01 .75039687E-01 .75035380E-01 .75022541E-01 .74999339E-01 .74964086E-01 .74915240E-01 .74851423E-01 .74771419E-01 .74674188E-01 .74558863E-01 .74424757E-01 .74271362E-01 .74098351E-01 .73905572E-01 .73693050E-01 .73460979E-01 .73209718E-01 .72939782E-01 .72651833E-01 .72346675E-01 .72025237E-01 .71688568E-01 .71337819E-01 .70974236E-01 .70599143E-01 .70213934E-01 .69820054E-01 .69418988E-01 .69012252E-01 .68601371E-01 .68187875E-01 .67773280E-01 .67359076E-01 .66946719E-01 .66537615E-01 .66133112E-01 .65734492E-01 .65342958E-01 .64959629E-01 .64585533E-01 .64221601E-01 .63868662E-01 .63527439E-01 .63198547E-01 .62882488E-01 .62579655E-01 .62290325E-01 .62014666E-01 .61752736E-01 .61504486E-01 .61269765E-01 .61048323E-01 .60839817E-01 .60643817E-01 .60459813E-01 .60287223E-01 .60125395E-01 .59973623E-01 .59831148E-01 .59697166E-01 .59570841E-01 .59451311E-01 .59337693E-01 .59229098E-01 .59124633E-01 .59023412E-01 .58924563E-01 .58827235E-01 .58730606E-01 .58633887E-01 .58536328E-01 .58437224E-01 .58335919E-01 .58231809E-01 .58124347E-01 .58013044E-01 .57897472E-01 .57777266E-01 .57652123E-01 .57521805E-01 .57386139E-01 .57245013E-01 .57098375E-01 .56946232E-01 .56788649E-01 .56625742E-01 .56457677E-01 .56284665E-01 .56106960E-01 .55924853E-01 .55738667E-01 .55548758E-01 .55355501E-01 .55159295E-01 .54960552E-01 .54759693E-01 .54557145E-01 .54353336E-01 .54148689E-01 .53943619E-01 .53738527E-01 .53533803E-01 .53329813E-01 .53126904E-01 .52925399E-01 .52725595E-01 .52527758E-01 .52332129E-01 .52138914E-01 .51948289E-01 .51760398E-01 .51575352E-01 .51393231E-01 .51214083E-01 .51037924E-01 .50864746E-01 .50694510E-01 .50527155E-01 .50362594E-01 .50200724E-01 .50041420E-01 .49884544E-01 .49729943E-01 .49577456E-01 .49426911E-01 .49278134E-01 .49130944E-01 .48985166E-01 .48840622E-01 .48697144E-01 .48554568E-01 .48412744E-01 .48271529E-01 .48130796E-01 .47990433E-01 .47850343E-01 .47710443E-01 .47570672E-01 .47430982E-01 .47291344E-01 .47151748E-01 .47012201E-01 .46872725E-01 .46733362E-01 .46594168E-01 .46455211E-01 .46316576E-01 .46178357E-01 .46040656E-01 .45903586E-01 .45767262E-01 .45631805E-01 .45497337E-01 .45363979E-01 .45231850E-01 .45101065E-01 .44971736E-01 .44843963E-01 .44717840E-01 .44593448E-01 .44470857E-01 .44350123E-01 .44231284E-01 .44114365E-01 .43999372E-01 .43886294E-01 .43775104E-01 .43665754E-01 .43558181E-01 .43452304E-01 .43348025E-01 .43245233E-01 .43143798E-01 .43043579E-01 .42944420E-01 .42846156E-01 .42748609E-01 .42651595E-01 .42554924E-01 .42458400E-01 .42361826E-01 .42265005E-01 .42167743E-01 .42069850E-01 .41971140E-01 .41871439E-01 .41770580E-01 .41668409E-01 .41564785E-01 .41459582E-01 .41352692E-01 .41244022E-01 .41133502E-01 .41021078E-01 .40906720E-01 .40790419E-01 .40672188E-01 .40552062E-01 .40430098E-01 .40306374E-01 .40180989E-01 .40054063E-01 .39925734E-01 .39796157E-01 .39665505E-01 .39533966E-01 .39401741E-01 .39269044E-01 .39136098E-01 .39003133E-01 .38870389E-01 .38738104E-01 .38606522E-01 .38475882E-01 .38346421E-01 .38218371E-01 .38091955E-01 .37967387E-01 .37844867E-01 .37724586E-01 .37606713E-01 .37491407E-01 .37378803E-01 .37269018E-01 .37162150E-01 .37058271E-01 .36957432E-01 .36859662E-01 .36764962E-01 .36673312E-01 .36584668E-01 .36498963E-01 .36416106E-01 .36335987E-01 .36258472E-01 .36183411E-01 .36110633E-01 .36039952E-01 .35971166E-01 .35904061E-01 .35838410E-01 .35773978E-01 .35710521E-01 .35647793E-01 .35585544E-01 .35523522E-01 .35461482E-01 .35399179E-01 .35336377E-01 .35272848E-01 .35208375E-01 .35142753E-01 .35075791E-01 .35007314E-01 .34937165E-01 .34865206E-01 .34791317E-01 .34715403E-01 .34637386E-01 .34557215E-01 .34474860E-01 .34390315E-01 .34303594E-01 .34214738E-01 .34123807E-01 .34030883E-01 .33936068E-01 .33839484E-01 .33741270E-01 .33641582E-01 .33540592E-01 .33438486E-01 .33335459E-01 .33231720E-01 .33127483E-01 .33022968E-01 .32918399E-01 .32814002E-01 .32710000E-01 .32606616E-01 .32504064E-01 .32402555E-01 .32302288E-01 .32203453E-01 .32106229E-01 .32010777E-01 .31917248E-01 .31825771E-01 .31736461E-01 .31649413E-01 .31564701E-01 .31482379E-01 .31402483E-01 .31325023E-01 .31249992E-01 .31177361E-01 .31107081E-01 .31039084E-01 .30973284E-01 .30909575E-01 .30847836E-01 .30787931E-01 .30729709E-01 .30673006E-01 .30617648E-01 .30563450E-01 .30510223E-01 .30457768E-01 .30405885E-01 .30354374E-01 .30303032E-01 .30251662E-01 .30200069E-01 .30148064E-01 .30095468E-01 .30042110E-01 .29987830E-01 .29932480E-01 .29875926E-01 .29818051E-01 .29758751E-01 .29697942E-01 .29635555E-01 .29571543E-01 .29505876E-01 .29438542E-01 .29369549E-01 .29298925E-01 .29226714E-01 .29152978E-01 .29077798E-01 .29001268E-01 .28923499E-01 .28844616E-01 .28764756E-01 .28684068E-01 .28602710E-01 .28520850E-01 .28438661E-01 .28356321E-01 .28274012E-01 .28191916E-01 .28110214E-01 .28029086E-01 .27948707E-01 .27869246E-01 .27790863E-01 .27713712E-01 .27637936E-01 .27563664E-01 .27491014E-01 .27420091E-01 .27350982E-01 .27283759E-01 .27218479E-01 .27155180E-01 .27093883E-01 .27034590E-01 .26977287E-01 .26921942E-01 .26868507E-01 .26816914E-01 .26767084E-01 .26718921E-01 .26672313E-01 .26627138E-01 .26583260E-01 .26540534E-01 .26498805E-01 .26457910E-01 .26417680E-01 .26377942E-01 .26338520E-01 .26299238E-01 .26259920E-01 .26220392E-01 .26180485E-01 .26140035E-01 .26098885E-01 .26056888E-01 .26013904E-01 .25969808E-01 .25924483E-01 .25877829E-01 .25829758E-01 .25780198E-01 .25729095E-01 .25676407E-01 .25622112E-01 .25566204E-01 .25508694E-01 .25449610E-01 .25388994E-01 .25326908E-01 .25263425E-01 .25198634E-01 .25132639E-01 .25065554E-01 .24997506E-01 .24928634E-01 .24859082E-01 .24789007E-01 .24718568E-01 .24647929E-01 .24577260E-01 .24506730E-01 .24436507E-01 .24366760E-01 .24297652E-01 .24229343E-01 .24161985E-01 .24095725E-01 .24030698E-01 .23967031E-01 .23904839E-01 .23844226E-01 .23785280E-01 .23728077E-01 .23672678E-01 .23619127E-01 .23567456E-01 .23517676E-01 .23469786E-01 .23423768E-01 .23379589E-01 .23337200E-01 .23296537E-01 .23257525E-01 .23220072E-01 .23184077E-01 .23149424E-01 .23115991E-01 .23083642E-01 .23052238E-01 .23021629E-01 .22991664E-01 .22962184E-01 .22933031E-01 .22904045E-01 .22875069E-01 .22845944E-01 .22816518E-01 .22786644E-01 .22756179E-01 .22724988E-01 .22692946E-01 .22659937E-01 .22625855E-01 .22590606E-01 .22554108E-01 .22516295E-01 .22477110E-01 .22436514E-01 .22394481E-01 .22350999E-01 .22306071E-01 .22259714E-01 .22211959E-01 gradient corrections used for XC 5 core charge-density (partial) .57875812E+00 .57853660E+00 .57787261E+00 .57676779E+00 .57522487E+00 .57324766E+00 .57084101E+00 .56801082E+00 .56476399E+00 .56110839E+00 .55705283E+00 .55260701E+00 .54778149E+00 .54258763E+00 .53703752E+00 .53114399E+00 .52492049E+00 .51838105E+00 .51154025E+00 .50441311E+00 .49701509E+00 .48936197E+00 .48146983E+00 .47335498E+00 .46503388E+00 .45652311E+00 .44783931E+00 .43899911E+00 .43001907E+00 .42091566E+00 .41170519E+00 .40240375E+00 .39302722E+00 .38359115E+00 .37411080E+00 .36460105E+00 .35507638E+00 .34555086E+00 .33603811E+00 .32655128E+00 .31710302E+00 .30770546E+00 .29837023E+00 .28910840E+00 .27993049E+00 .27084649E+00 .26186580E+00 .25299728E+00 .24424921E+00 .23562932E+00 .22714478E+00 .21880220E+00 .21060765E+00 .20256668E+00 .19468427E+00 .18696493E+00 .17941264E+00 .17203088E+00 .16482269E+00 .15779060E+00 .15093672E+00 .14426274E+00 .13776991E+00 .13145910E+00 .12533078E+00 .11938508E+00 .11362177E+00 .10804030E+00 .10263980E+00 .97419109E-01 .92376795E-01 .87511163E-01 .82820278E-01 .78301978E-01 .73953893E-01 .69773460E-01 .65757937E-01 .61904424E-01 .58209868E-01 .54671087E-01 .51284778E-01 .48047535E-01 .44955856E-01 .42006162E-01 .39194803E-01 .36518075E-01 .33972227E-01 .31553473E-01 .29258003E-01 .27081990E-01 .25021601E-01 .23073006E-01 .21232383E-01 .19495930E-01 .17859868E-01 .16320450E-01 .14873966E-01 .13516751E-01 .12245185E-01 .11055707E-01 .99448092E-02 .89090491E-02 .79450488E-02 .70495005E-02 .62191685E-02 .54508925E-02 .47415894E-02 .40882562E-02 .34879708E-02 .29378942E-02 .24352712E-02 .19774318E-02 .15617915E-02 .11858519E-02 .84720092E-03 .54351281E-03 .27254799E-03 .32152609E-04 -.17974196E-03 -.36511984E-03 -.52588156E-03 -.66384502E-03 -.78074667E-03 -.87824279E-03 -.95791083E-03 -.10212510E-02 -.10696876E-02 -.11045710E-02 -.11271793E-02 -.11387199E-02 -.11403317E-02 -.11330867E-02 -.11179923E-02 -.10959930E-02 -.10679726E-02 -.10347561E-02 -.99711195E-03 -.95575406E-03 -.91134377E-03 -.86449209E-03 -.81576167E-03 -.76566890E-03 -.71468597E-03 -.66324288E-03 -.61172946E-03 -.56049735E-03 -.50986195E-03 -.46010432E-03 -.41147308E-03 -.36418625E-03 -.31843304E-03 -.27437563E-03 -.23215083E-03 -.19187180E-03 -.15362964E-03 -.11749496E-03 -.83519387E-04 -.51737035E-04 -.22165910E-04 .51907291E-05 .30343072E-04 .53313507E-04 .74135423E-04 .92852073E-04 .10951548E-03 .12418542E-03 .13692841E-03 .14781680E-03 .15692790E-03 .16434314E-03 .17014729E-03 .17442775E-03 .17727383E-03 .17877618E-03 .17902615E-03 .17811523E-03 .17613463E-03 .17317473E-03 .16932471E-03 .16467217E-03 .15930276E-03 .15329990E-03 .14674448E-03 .13971466E-03 .13228561E-03 .12452937E-03 .11651471E-03 .10830695E-03 .99967923E-04 .91555880E-04 .83125430E-04 .74727521E-04 .66409431E-04 .58214771E-04 .50183519E-04 .42352056E-04 .34753224E-04 .27416394E-04 .20367552E-04 .13629385E-04 .72213872E-05 .11599688E-05 -.45414259E-05 -.98721943E-05 -.14824446E-04 -.19392867E-04 -.23574586E-04 -.27369026E-04 -.30777770E-04 -.33804412E-04 -.36454414E-04 -.38734960E-04 -.40654814E-04 -.42224180E-04 -.43454557E-04 -.44358603E-04 -.44950002E-04 -.45243328E-04 -.45253923E-04 -.44997768E-04 -.44491363E-04 -.43751616E-04 -.42795729E-04 -.41641096E-04 -.40305200E-04 -.38805520E-04 -.37159440E-04 -.35384169E-04 -.33496661E-04 -.31513539E-04 -.29451035E-04 -.27324925E-04 -.25150474E-04 -.22942384E-04 -.20714755E-04 -.18481039E-04 -.16254011E-04 -.14045738E-04 -.11867555E-04 -.97300452E-05 -.76430287E-05 -.56155484E-05 -.36558665E-05 -.17714620E-05 .30967072E-07 .17454978E-05 .33669732E-05 .48909900E-05 .63138830E-05 .76327069E-05 .88452154E-05 .99498383E-05 .10945656E-04 .11832372E-04 .12610286E-04 .13280260E-04 .13843691E-04 .14302473E-04 .14658970E-04 .14915975E-04 .15076682E-04 .15144646E-04 .15123749E-04 .15018167E-04 .14832332E-04 .14570902E-04 .14238720E-04 .13840789E-04 .13382232E-04 .12868266E-04 .12304166E-04 .11695240E-04 .11046798E-04 .10364124E-04 .96524530E-05 .89169426E-05 .81626534E-05 .73945252E-05 .66173578E-05 .58357922E-05 .50542935E-05 .42771357E-05 .35083880E-05 .27519022E-05 .20113027E-05 .12899768E-05 .59106762E-06 -.82531773E-07 -.72818322E-06 -.13435062E-05 -.19263797E-05 -.24749422E-05 -.29875909E-05 -.34629793E-05 -.39000138E-05 -.42978490E-05 -.46558824E-05 -.49737472E-05 -.52513054E-05 -.54886389E-05 -.56860406E-05 -.58440045E-05 -.59632151E-05 -.60445367E-05 -.60890014E-05 -.60977976E-05 -.60722577E-05 -.60138452E-05 -.59241428E-05 -.58048389E-05 -.56577151E-05 -.54846335E-05 -.52875234E-05 -.50683693E-05 -.48291984E-05 -.45720679E-05 -.42990539E-05 -.40122393E-05 -.37137028E-05 -.34055084E-05 -.30896950E-05 -.27682668E-05 -.24431840E-05 -.21163540E-05 -.17896238E-05 -.14647722E-05 -.11435029E-05 -.82743877E-06 -.51811570E-06 -.21697809E-06 .74625598E-07 .35544643E-06 .62433799E-06 .88025874E-06 .11222738E-05 .13495559E-05 .15613862E-05 .17571541E-05 .19363563E-05 .20985965E-05 .22435828E-05 .23711263E-05 .24811380E-05 .25736262E-05 .26486928E-05 .27065296E-05 .27474143E-05 .27717060E-05 .27798403E-05 .27723248E-05 .27497335E-05 .27127019E-05 .26619213E-05 .25981333E-05 .25221244E-05 .24347198E-05 .23367783E-05 .22291865E-05 .21128527E-05 .19887021E-05 .18576706E-05 .17207004E-05 .15787336E-05 .14327085E-05 .12835536E-05 .11321840E-05 .97949624E-06 .82636456E-06 .67363687E-06 .52213117E-06 .37263215E-06 .22588813E-06 .82608306E-07 -.56539785E-07 -.19093241E-06 -.31999156E-06 -.44318652E-06 -.56003514E-06 -.67010490E-06 -.77301350E-06 -.86842937E-06 -.95607177E-06 -.10357106E-05 -.11071662E-05 -.11703084E-05 -.12250559E-05 -.12713749E-05 -.13092781E-05 -.13388228E-05 -.13601095E-05 -.13732799E-05 -.13785147E-05 -.13760315E-05 -.13660828E-05 -.13489530E-05 -.13249563E-05 -.12944341E-05 -.12577521E-05 -.12152977E-05 -.11674774E-05 -.11147140E-05 -.10574438E-05 -.99611383E-06 -.93117915E-06 -.86310036E-06 -.79234081E-06 -.71936412E-06 -.64463171E-06 -.56860042E-06 -.49172022E-06 -.41443204E-06 -.33716571E-06 -.26033801E-06 -.18435085E-06 -.10958963E-06 -.36421634E-07 .34805329E-07 .10376419E-06 .17014972E-06 .23367953E-06 .29409484E-06 .35116115E-06 .40466878E-06 .45443324E-06 .50029543E-06 .54212175E-06 .57980404E-06 .61325942E-06 .64242997E-06 .66728229E-06 .68780698E-06 .70401796E-06 .71595174E-06 .72366655E-06 .72724140E-06 .72677505E-06 .72238494E-06 .71420601E-06 .70238949E-06 .68710160E-06 .66852230E-06 .64684390E-06 .62226970E-06 .59501262E-06 .56529378E-06 .53334113E-06 .49938802E-06 .46367185E-06 .42643270E-06 .38791199E-06 .34835115E-06 .30799038E-06 .26706743E-06 .22581639E-06 .18446659E-06 .14324151E-06 .10235779E-06 .62024272E-07 .22441140E-07 -.16200907E-07 -.53721381E-07 -.89950666E-07 -.12473061E-06 -.15791502E-06 -.18937012E-06 -.21897489E-06 -.24662137E-06 -.27221483E-06 -.29567392E-06 -.31693077E-06 -.33593089E-06 -.35263318E-06 -.36700971E-06 -.37904556E-06 -.38873851E-06 -.39609873E-06 -.40114838E-06 -.40392118E-06 -.40446194E-06 -.40282598E-06 -.39907863E-06 -.39329454E-06 -.38555714E-06 -.37595790E-06 -.36459565E-06 -.35157592E-06 -.33701016E-06 -.32101503E-06 -.30371166E-06 -.28522491E-06 -.26568259E-06 -.24521477E-06 -.22395301E-06 -.20202965E-06 -.17957710E-06 -.15672718E-06 -.13361041E-06 -.11035540E-06 -.87088225E-07 -.63931822E-07 -.41005460E-07 -.18424200E-07 .37015847E-08 .25266665E-07 .46171364E-07 .66321937E-07 .85630901E-07 .10401733E-06 .12140711E-06 .13773315E-06 .15293555E-06 .16696174E-06 .17976654E-06 .19131226E-06 .20156867E-06 .21051296E-06 .21812973E-06 .22441084E-06 .22935528E-06 .23296903E-06 .23526481E-06 .23626192E-06 .23598589E-06 .23446829E-06 .23174638E-06 .22786275E-06 .22286503E-06 .21680551E-06 .20974074E-06 .20173115E-06 .19284065E-06 .18313621E-06 .17268746E-06 .16156628E-06 .14984632E-06 .13760266E-06 .12491133E-06 .11184893E-06 .98492227E-07 .84917723E-07 .71201309E-07 .57417873E-07 .43640937E-07 .29942320E-07 .16391802E-07 .30568171E-08 -.99978374E-08 -.22710276E-07 -.35021772E-07 -.46876992E-07 -.58224195E-07 -.69015425E-07 -.79206663E-07 -.88757970E-07 -.97633600E-07 -.10580209E-06 -.11323631E-06 -.11991354E-06 -.12581546E-06 -.13092815E-06 -.13524208E-06 -.13875205E-06 -.14145712E-06 -.14336054E-06 -.14446960E-06 -.14479558E-06 -.14435352E-06 -.14316213E-06 -.14124357E-06 -.13862329E-06 -.13532982E-06 -.13139456E-06 -.12685157E-06 -.12173729E-06 -.11609038E-06 -.10995142E-06 -.10336268E-06 -.96367867E-07 -.89011866E-07 -.81340498E-07 -.73400256E-07 -.65238058E-07 -.56900995E-07 -.48436091E-07 -.39890059E-07 -.31309073E-07 -.22738538E-07 -.14222878E-07 -.58053272E-08 .24722676E-08 .10569633E-07 .18448241E-07 .26071474E-07 .33404773E-07 .40415768E-07 .47074409E-07 .53353065E-07 .59226622E-07 .64672558E-07 .69671011E-07 .74204823E-07 .78259578E-07 .81823622E-07 .84888064E-07 .87446772E-07 .89496348E-07 .91036092E-07 .92067954E-07 .92596470E-07 .92628692E-07 .92174099E-07 .91244506E-07 .89853953E-07 .88018595E-07 .85756576E-07 .83087897E-07 .80034280E-07 .76619023E-07 .72866848E-07 .68803750E-07 .64456840E-07 .59854178E-07 .55024622E-07 .49997652E-07 .44803219E-07 .39471572E-07 .34033104E-07 .28518190E-07 .22957030E-07 .17379501E-07 .11815005E-07 .62923288E-08 .83950776E-09 -.45163062E-08 -.97489671E-08 -.14833451E-07 -.19745965E-07 -.24464044E-07 -.28966649E-07 -.33234240E-07 -.37248858E-07 -.40994183E-07 -.44455592E-07 -.47620199E-07 -.50476895E-07 -.53016371E-07 -.55231132E-07 -.57115507E-07 -.58665639E-07 -.59879479E-07 -.60756760E-07 -.61298968E-07 -.61509303E-07 -.61392631E-07 -.60955431E-07 -.60205729E-07 -.59153035E-07 -.57808261E-07 -.56183645E-07 -.54292662E-07 -.52149932E-07 -.49771126E-07 -.47172864E-07 -.44372617E-07 -.41388595E-07 -.38239646E-07 -.34945143E-07 -.31524877E-07 -.27998948E-07 -.24387653E-07 -.20711377E-07 -.16990492E-07 -.13245243E-07 -.94956522E-08 -.57614163E-08 -.20618102E-08 .15844054E-08 .51590721E-08 .86447177E-08 .12024635E-07 .15282956E-07 .18404718E-07 .21375927E-07 .24183615E-07 .26815886E-07 .29261963E-07 .31512224E-07 .33558231E-07 .35392755E-07 .37009792E-07 .38404575E-07 .39573577E-07 .40514507E-07 .41226303E-07 .41709115E-07 .41964287E-07 .41994326E-07 .41802872E-07 .41394659E-07 .40775474E-07 .39952105E-07 .38932293E-07 .37724676E-07 .36338726E-07 .34784689E-07 .33073515E-07 .31216796E-07 .29226686E-07 .27115838E-07 .24897322E-07 .22584556E-07 .20191225E-07 .17731212E-07 .15218515E-07 .12667180E-07 .10091220E-07 .75045467E-08 .49209007E-08 .23537793E-08 -.18362747E-09 -.26785010E-08 -.51184548E-08 -.74915919E-08 -.97865586E-08 -.11992595E-07 -.14099582E-07 -.16098080E-07 -.17979375E-07 -.19735501E-07 -.21359280E-07 -.22844340E-07 -.24185137E-07 -.25376971E-07 -.26415997E-07 -.27299231E-07 -.28024549E-07 -.28590689E-07 -.28997241E-07 -.29244634E-07 -.29334125E-07 -.29267773E-07 -.29048422E-07 -.28679668E-07 -.28165830E-07 -.27511918E-07 -.26723595E-07 -.25807134E-07 -.24769380E-07 -.23617703E-07 -.22359950E-07 -.21004400E-07 -.19559710E-07 -.18034869E-07 -.16439139E-07 -.14782010E-07 -.13073141E-07 -.11322309E-07 -.95393581E-08 -.77341433E-08 -.59164828E-08 -.40961048E-08 -.22825997E-08 -.48537124E-09 .12864089E-08 .30238455E-08 .47183619E-08 .63617395E-08 .79461552E-08 .94642160E-08 .10908991E-07 .12274039E-07 .13553437E-07 .14741801E-07 .15834306E-07 .16826702E-07 .17715330E-07 .18497129E-07 .19169642E-07 .19731023E-07 .20180035E-07 .20516046E-07 .20739026E-07 .20849536E-07 .20848714E-07 .20738266E-07 .20520441E-07 .20198018E-07 .19774278E-07 .19252983E-07 .18638346E-07 .17935004E-07 .17147988E-07 .16282689E-07 .15344824E-07 .14340406E-07 .13275702E-07 .12157199E-07 .10991569E-07 .97856270E-08 .85462984E-08 .72805774E-08 .59954912E-08 .46980624E-08 .33952729E-08 .20940281E-08 .80112152E-09 -.47679812E-09 -.17332598E-08 -.29620012E-08 -.41569980E-08 -.53124918E-08 -.64230162E-08 -.74834207E-08 -.84888931E-08 -.94349792E-08 -.10317601E-07 -.11133072E-07 -.11878110E-07 -.12549850E-07 -.13145853E-07 -.13664108E-07 -.14103041E-07 -.14461517E-07 -.14738834E-07 -.14934727E-07 -.15049358E-07 -.15083312E-07 -.15037584E-07 -.14913574E-07 -.14713067E-07 -.14438222E-07 -.14091555E-07 -.13675919E-07 -.13194488E-07 -.12650729E-07 -.12048389E-07 -.11391462E-07 -.10684171E-07 -.99309401E-08 -.91363707E-08 -.83052120E-08 -.74423362E-08 -.65527110E-08 -.56413722E-08 -.47133968E-08 -.37738757E-08 -.28278873E-08 -.18804711E-08 -.93660221E-09 -.11664019E-11 .92106417E-09 .18254540E-08 .27075265E-08 .35629847E-08 .43877315E-08 .51778877E-08 .59298093E-08 .66401031E-08 .73056406E-08 .79235705E-08 .84913302E-08 .90066540E-08 .94675816E-08 .98724635E-08 .10219966E-07 .10509071E-07 .10739082E-07 .10909617E-07 .11020612E-07 .11072311E-07 .11065267E-07 .11000330E-07 .10878637E-07 .10701609E-07 .10470934E-07 .10188555E-07 .98566597E-08 .94776615E-08 .90541870E-08 .85890580E-08 .80852745E-08 .75459967E-08 .69745263E-08 .63742874E-08 .57488072E-08 .51016960E-08 .44366277E-08 .37573194E-08 .30675120E-08 .23709501E-08 .16713626E-08 .97244367E-09 .27783400E-09 -.40889750E-09 -.10842711E-08 -.17449131E-08 -.23875721E-08 -.30091340E-08 -.36066363E-08 -.41772818E-08 -.47184502E-08 -.52277100E-08 -.57028285E-08 -.61417801E-08 -.65427548E-08 -.69041643E-08 -.72246474E-08 -.75030740E-08 -.77385478E-08 -.79304080E-08 -.80782296E-08 -.81818224E-08 -.82412287E-08 -.82567204E-08 -.82287942E-08 -.81581663E-08 -.80457656E-08 -.78927262E-08 -.77003788E-08 -.74702411E-08 -.72040076E-08 -.69035385E-08 -.65708479E-08 -.62080911E-08 -.58175519E-08 -.54016287E-08 -.49628211E-08 -.45037152E-08 -.40269690E-08 -.35352979E-08 -.30314601E-08 -.25182411E-08 -.19984395E-08 -.14748518E-08 -.95025836E-09 -.42740906E-09 .90990720E-10 .60229345E-09 .11039225E-08 .15933843E-08 .20682809E-08 .25263204E-08 .29653280E-08 .33832554E-08 .37781904E-08 .41483643E-08 .44921600E-08 .48081179E-08 .50949419E-08 .53515037E-08 .55768467E-08 .57701889E-08 .59309245E-08 .60586249E-08 .61530390E-08 .62140917E-08 .62418826E-08 .62366829E-08 .61989322E-08 .61292338E-08 .60283497E-08 .58971946E-08 .57368294E-08 .55484534E-08 .53333971E-08 .50931129E-08 .48291668E-08 .45432281E-08 .42370601E-08 .39125093E-08 .35714954E-08 .32159996E-08 .28480543E-08 .24697316E-08 .20831320E-08 .16903735E-08 .12935799E-08 .89487003E-09 .49634683E-09 .10008650E-09 -.29187187E-09 -.67753646E-09 -.10549725E-08 -.14223114E-08 -.17777601E-08 -.21196090E-08 -.24462401E-08 -.27561339E-08 -.30478767E-08 -.33201662E-08 -.35718170E-08 -.38017654E-08 -.40090735E-08 -.41929324E-08 -.43526648E-08 -.44877274E-08 -.45977115E-08 -.46823437E-08 -.47414861E-08 -.47751348E-08 atomic pseudo charge-density .10000000E+01 .99303308E+00 .97245396E+00 .93919837E+00 .89473331E+00 .84093234E+00 .77992619E+00 .71394735E+00 .64518610E+00 .57567063E+00 .50717917E+00 .44118613E+00 .37884015E+00 .32096871E+00 .26810263E+00 .22051334E+00 .17825680E+00 .14121884E+00 .10915839E+00 .81746123E-01 .58597381E-01 .39298974E-01 .23430066E-01 .10577753E-01 .34809552E-03 -.76265979E-02 -.13683433E-01 -.18126861E-01 -.21228285E-01 -.23226848E-01 -.24331033E-01 -.24720776E-01 -.24549865E-01 -.23948470E-01 -.23025684E-01 -.21871991E-01 -.20561615E-01 -.19154700E-01 -.17699320E-01 -.16233289E-01 -.14785792E-01 -.13378816E-01 -.12028418E-01 -.10745810E-01 -.95383042E-02 -.84101083E-02 -.73629987E-02 -.63968811E-02 -.55102535E-02 -.47005835E-02 -.39646127E-02 -.32985995E-02 -.26985093E-02 -.21601622E-02 -.16793444E-02 -.12518913E-02 -.87374772E-03 -.54100897E-03 -.24994852E-03 .29657438E-05 .22106342E-03 .40746954E-03 .56510696E-03 .69670173E-03 .80479044E-03 .89172885E-03 .95970107E-03 .10107290E-02 .10466816E-02 .10692841E-02 .10801267E-02 .10806729E-02 .10722669E-02 .10561415E-02 .10334249E-02 .10051467E-02 .97224468E-03 .93557013E-03 .89589349E-03 .85390950E-03 .81024211E-03 .76544920E-03 .72002707E-03 .67441472E-03 .62899795E-03 .58411327E-03 .54005165E-03 .49706209E-03 .45535503E-03 .41510559E-03 .37645660E-03 .33952158E-03 .30438743E-03 .27111705E-03 .23975175E-03 .21031356E-03 .18280735E-03 .15722283E-03 .13353638E-03 .11171279E-03 .91706841E-04 .73464776E-04 .56925650E-04 .42022572E-04 .28683841E-04 .16833985E-04 .63947039E-05 -.27142677E-05 -.10574389E-04 -.17267614E-04 -.22875759E-04 -.27479953E-04 -.31160132E-04 -.33994605E-04 -.36059677E-04 -.37429308E-04 -.38174839E-04 -.38364752E-04 -.38064469E-04 -.37336202E-04 -.36238823E-04 -.34827782E-04 -.33155048E-04 -.31269074E-04 -.29214802E-04 -.27033674E-04 -.24763681E-04 -.22439418E-04 -.20092165E-04 -.17749978E-04 -.15437799E-04 -.13177572E-04 -.10988371E-04 -.88865378E-05 -.68858261E-05 -.49975482E-05 -.32307290E-05 -.15922603E-05 -.87057187E-07 .12817853E-05 .25128370E-05 .36061790E-05 .45632525E-05 .53867121E-05 .60802825E-05 .66486205E-05 .70971826E-05 .74320985E-05 .76600507E-05 .77881606E-05 .78238823E-05 .77749027E-05 .76490491E-05 .74542041E-05 .71982275E-05 .68888862E-05 .65337899E-05 .61403354E-05 .57156564E-05 .52665808E-05 .47995940E-05 .43208086E-05 .38359396E-05 .33502855E-05 .28687147E-05 .23956564E-05 .19350965E-05 .14905774E-05 .10652021E-05 .66164155E-06 .28214482E-06 -.71447015E-07 -.39768521E-06 -.69549526E-06 -.96415700E-06 -.12032831E-05 -.14127966E-05 -.15929070E-05 -.17440863E-05 -.18670438E-05 -.19627021E-05 -.20321711E-05 -.20767245E-05 -.20977749E-05 -.20968508E-05 -.20755733E-05 -.20356346E-05 -.19787770E-05 -.19067734E-05 -.18214083E-05 -.17244610E-05 -.16176893E-05 -.15028153E-05 -.13815118E-05 -.12553911E-05 -.11259939E-05 -.99478109E-06 -.86312558E-06 -.73230627E-06 -.60350304E-06 -.47779301E-06 -.35614798E-06 -.23943305E-06 -.12840624E-06 -.23719111E-07 .74081656E-07 .16455191E-06 .24734689E-06 .32221741E-06 .38900545E-06 .44763923E-06 .49812787E-06 .54055567E-06 .57507608E-06 .60190553E-06 .62131706E-06 .63363389E-06 .63922296E-06 .63848858E-06 .63186611E-06 .61981578E-06 .60281678E-06 .58136153E-06 .55595020E-06 .52708559E-06 .49526829E-06 .46099219E-06 .42474038E-06 .38698143E-06 .34816601E-06 .30872394E-06 .26906162E-06 .22955988E-06 .19057216E-06 .15242306E-06 .11540736E-06 .79789225E-07 .45801878E-07 .13647512E-07 -.16502478E-07 -.44506999E-07 -.70254514E-07 -.93662071E-07 -.11467413E-06 -.13326119E-06 -.14941835E-06 -.16316357E-06 -.17453604E-06 -.18359427E-06 -.19041429E-06 -.19508765E-06 -.19771955E-06 -.19842685E-06 -.19733621E-06 -.19458216E-06 -.19030532E-06 -.18465060E-06 -.17776555E-06 -.16979876E-06 -.16089836E-06 -.15121063E-06 -.14087877E-06 -.13004168E-06 -.11883299E-06 -.10738010E-06 -.95803422E-07 -.84215721E-07 -.72721558E-07 -.61416878E-07 -.50388701E-07 -.39714929E-07 -.29464250E-07 -.19696152E-07 -.10461018E-07 -.18003122E-08 .62531549E-08 .13674899E-07 .20448366E-07 .26564491E-07 .32021200E-07 .36822892E-07 .40979874E-07 .44507793E-07 .47427040E-07 .49762155E-07 .51541236E-07 .52795345E-07 .53557937E-07 .53864298E-07 .53751018E-07 .53255478E-07 .52415377E-07 .51268288E-07 .49851257E-07 .48200435E-07 .46350749E-07 .44335621E-07 .42186723E-07 .39933773E-07 .37604374E-07 .35223895E-07 .32815381E-07 .30399514E-07 .27994595E-07 .25616564E-07 .23279053E-07 .20993461E-07 .18769053E-07 .16613083E-07 .14530936E-07 .12526278E-07 .10601224E-07 .87565157E-08 .69916967E-08 .53053001E-08 .36950300E-08 .21579422E-08 .69062019E-09 -.71065691E-09 -.20497550E-08 -.33305373E-08 -.45567285E-08 -.57317940E-08 -.68588327E-08 -.79404868E-08 -.89788671E-08 -.99754953E-08 -.10931263E-07 -.11846406E-07 -.12720497E-07 -.13552455E-07 -.14340559E-07 -.15082495E-07 -.15775395E-07 -.16415901E-07 -.17000236E-07 -.17524281E-07 -.17983663E-07 -.18373844E-07 -.18690220E-07 -.18928219E-07 -.19083401E-07 -.19151554E-07 -.19128796E-07 -.19011664E-07 -.18797207E-07 -.18483064E-07 -.18067543E-07 -.17549686E-07 -.16929330E-07 -.16207149E-07 -.15384697E-07 -.14464431E-07 -.13449727E-07 -.12344884E-07 -.11155110E-07 -.98865079E-08 -.85460419E-08 -.71414928E-08 -.56814061E-08 -.41750288E-08 -.26322365E-08 -.10634526E-08 .52043974E-09 .21081926E-08 .36882933E-08 .52490690E-08 .67787943E-08 .82658004E-08 .96985853E-08 .11065924E-07 .12356976E-07 .13561390E-07 .14669409E-07 .15671958E-07 .16560745E-07 .17328336E-07 .17968235E-07 .18474946E-07 .18844037E-07 .19072182E-07 .19157200E-07 .19098083E-07 .18895009E-07 .18549349E-07 .18063657E-07 .17441654E-07 .16688200E-07 .15809254E-07 .14811823E-07 .13703907E-07 .12494425E-07 .11193142E-07 .98105861E-08 .83579538E-08 .68470150E-08 .52900103E-08 .36995454E-08 .20884812E-08 .46982314E-09 -.11433915E-08 -.27382055E-08 -.43018527E-08 -.58218674E-08 -.72861901E-08 -.86832695E-08 -.10002159E-07 -.11232609E-07 -.12365152E-07 -.13391176E-07 -.14302999E-07 -.15093928E-07 -.15758309E-07 -.16291574E-07 -.16690269E-07 -.16952078E-07 -.17075839E-07 -.17061542E-07 -.16910325E-07 -.16624455E-07 -.16207302E-07 -.15663301E-07 -.14997909E-07 -.14217550E-07 -.13329552E-07 -.12342082E-07 -.11264064E-07 -.10105105E-07 -.88754027E-08 -.75856559E-08 -.62469713E-08 -.48707648E-08 -.34686636E-08 -.20524055E-08 -.63373957E-09 .77567292E-09 .21643560E-08 .35211139E-08 .48351223E-08 .60960158E-08 .72939712E-08 .84197837E-08 .94649392E-08 .10421678E-07 .11283054E-07 .12042982E-07 .12696282E-07 .13238713E-07 .13667000E-07 .13978847E-07 .14172952E-07 .14249002E-07 .14207667E-07 .14050587E-07 .13780340E-07 .13400418E-07 .12915184E-07 .12329825E-07 .11650300E-07 .10883284E-07 .10036101E-07 .91166556E-08 .81333620E-08 .70950666E-08 .60109692E-08 .48905426E-08 .37434497E-08 .25794609E-08 .14083715E-08 .23991955E-09 -.91629454E-09 -.20508864E-08 -.31547634E-08 -.42191965E-08 -.52358889E-08 -.61970394E-08 -.70954016E-08 -.79243376E-08 -.86778649E-08 -.93506989E-08 -.99382880E-08 -.10436842E-07 -.10843355E-07 -.11155619E-07 -.11372234E-07 -.11492609E-07 -.11516956E-07 -.11446279E-07 -.11282356E-07 -.11027714E-07 -.10685597E-07 -.10259932E-07 -.97552891E-08 -.91768310E-08 -.85302665E-08 -.78217942E-08 -.70580456E-08 -.62460245E-08 -.53930437E-08 -.45066608E-08 -.35946125E-08 -.26647477E-08 -.17249617E-08 -.78312949E-09 .15295853E-09 .10756603E-08 .19775434E-08 .28514435E-08 .36905203E-08 .44883101E-08 .52387736E-08 .59363410E-08 .65759514E-08 .71530878E-08 .76638077E-08 .81047679E-08 .84732437E-08 .87671442E-08 .89850205E-08 .91260691E-08 .91901309E-08 .91776829E-08 .90898267E-08 .89282709E-08 .86953091E-08 .83937932E-08 .80271025E-08 .75991091E-08 .71141396E-08 .65769330E-08 .59925968E-08 .53665594E-08 .47045219E-08 .40124071E-08 .32963078E-08 .25624346E-08 .18170629E-08 .10664806E-08 .31693619E-09 -.42541247E-09 -.11545473E-08 -.18646381E-08 -.25500875E-08 -.32055746E-08 -.38260944E-08 -.44069957E-08 -.49440136E-08 -.54333006E-08 -.58714518E-08 -.62555277E-08 -.65830718E-08 -.68521247E-08 -.70612335E-08 -.72094573E-08 -.72963680E-08 -.73220470E-08 -.72870782E-08 -.71925364E-08 -.70399720E-08 -.68313923E-08 -.65692390E-08 -.62563623E-08 -.58959926E-08 -.54917087E-08 -.50474042E-08 -.45672513E-08 -.40556633E-08 -.35172548E-08 -.29568016E-08 -.23791993E-08 -.17894219E-08 -.11924795E-08 -.59337698E-09 .29268509E-11 .59155965E-09 .11677742E-08 .17269861E-08 .22648087E-08 .27770874E-08 .32599300E-08 .37097361E-08 .41232223E-08 .44974454E-08 .48298222E-08 .51181464E-08 .53606015E-08 .55557710E-08 .57026450E-08 .58006234E-08 .58495154E-08 .58495363E-08 .58013001E-08 .57058102E-08 .55644455E-08 .53789449E-08 .51513885E-08 .48841760E-08 .45800034E-08 .42418370E-08 .38728859E-08 .34765724E-08 .30565018E-08 .26164300E-08 .21602315E-08 .16918655E-08 .12153431E-08 .73469305E-09 .25392919E-09 -.22298280E-09 -.69215718E-09 -.11498191E-08 -.15923342E-08 -.20162369E-08 -.24182567E-08 -.27953427E-08 -.31446863E-08 -.34637412E-08 -.37502409E-08 -.40022149E-08 -.42180003E-08 -.43962526E-08 -.45359529E-08 -.46364120E-08 -.46972726E-08 -.47185082E-08 -.47004193E-08 -.46436273E-08 -.45490653E-08 -.44179670E-08 -.42518530E-08 -.40525147E-08 -.38219969E-08 -.35625771E-08 -.32767449E-08 -.29671787E-08 -.26367213E-08 -.22883549E-08 -.19251746E-08 -.15503618E-08 -.11671571E-08 -.77883269E-09 -.38866526E-09 .91252187E-13 .38423208E-09 .76062751E-09 .11262478E-08 .14781871E-08 .18136861E-08 .21301529E-08 .24251827E-08 .26965757E-08 .29423526E-08 .31607689E-08 .33503266E-08 .35097837E-08 .36381619E-08 .37347517E-08 .37991151E-08 .38310866E-08 .38307715E-08 .37985417E-08 .37350303E-08 .36411230E-08 .35179482E-08 .33668650E-08 .31894491E-08 .29874780E-08 .27629132E-08 .25178826E-08 .22546607E-08 .19756482E-08 .16833502E-08 .13803552E-08 .10693118E-08 .75290656E-09 .43384086E-09 .11480858E-09 -.20152637E-09 -.51255178E-09 -.81572838E-09 -.11086102E-08 -.13888638E-08 -.16542868E-08 -.19028245E-08 -.21325854E-08 -.23418555E-08 -.25291106E-08 -.26930268E-08 -.28324898E-08 -.29466019E-08 -.30346870E-08 -.30962940E-08 -.31311986E-08 -.31394026E-08 -.31211315E-08 -.30768301E-08 -.30071569E-08 -.29129765E-08 -.27953496E-08 -.26555228E-08 -.24949158E-08 -.23151076E-08 -.21178221E-08 -.19049118E-08 -.16783408E-08 -.14401674E-08 -.11925257E-08 -.93760673E-09 -.67763949E-09 -.41487198E-09 -.15155188E-09 .11009243E-09 .36787044E-09 .61964752E-09 .86336230E-09 .10970433E-08 .13188247E-08 .15269611E-08 .17198407E-08 .18959979E-08 .20541237E-08 .21930756E-08 .23118850E-08 .24097644E-08 .24861116E-08 .25405129E-08 .25727449E-08 .25827743E-08 .25707564E-08 .25370320E-08 .24821225E-08 .24067236E-08 .23116976E-08 .21980646E-08 .20669925E-08 .19197852E-08 .17578704E-08 .15827862E-08 .13961667E-08 .11997273E-08 .99524954E-09 .78456494E-09 .56953899E-09 .35205473E-09 .13399649E-09 -.82766132E-10 -.29639401E-09 -.50509397E-09 -.70713376E-09 -.90085642E-09 -.10846936E-08 -.12571783E-08 -.14169557E-08 -.15627945E-08 -.16935956E-08 -.18084008E-08 -.19063992E-08 -.19869328E-08 -.20495002E-08 -.20937598E-08 -.21195307E-08 -.21267928E-08 -.21156858E-08 -.20865055E-08 -.20397001E-08 -.19758647E-08 -.18957347E-08 -.18001782E-08 -.16901872E-08 -.15668677E-08 -.14314290E-08 -.12851721E-08 -.11294778E-08 -.96579394E-09 -.79562250E-09 -.62050591E-09 -.44201311E-09 -.26172573E-09 -.81224328E-10 .97925054E-10 .27418431E-09 .44605641E-09 .61209820E-09 .77093250E-09 .92125933E-09 .10618663E-08 .11916382E-08 .13095657E-08 .14147536E-08 .15064272E-08 .15839381E-08 .16467685E-08 .16945338E-08 .17269851E-08 .17440099E-08 .17456317E-08 .17320090E-08 .17034316E-08 .16603169E-08 .16032050E-08 .15327523E-08 .14497251E-08 .13549918E-08 .12495141E-08 .11343373E-08 .10105799E-08 .87942358E-09 .74210195E-09 .59988961E-09 .45409043E-09 .30602566E-09 .15702185E-09 .83991866E-11 -.13853991E-09 -.28252175E-09 -.42231218E-09 -.55672719E-09 -.68464309E-09 -.80500595E-09 -.91684010E-09 -.10192557E-08 -.11114554E-08 -.11927408E-08 -.12625173E-08 -.13202993E-08 -.13657128E-08 -.13984978E-08 -.14185091E-08 -.14257163E-08 -.14202028E-08 -.14021644E-08 -.13719067E-08 -.13298410E-08 -.12764791E-08 -.12124280E-08 -.11383827E-08 -.10551197E-08 -.96348914E-09 -.86440705E-09 -.75884584E-09 -.64782477E-09 -.53240003E-09 -.41365489E-09 -.29269001E-09 -.17061367E-09 -.48531781E-10 .72462202E-10 .19129738E-09 .30693492E-09 .41837695E-09 .52467462E-09 .62493579E-09 .71833246E-09 .80410773E-09 .88158222E-09 .95015944E-09 .10093300E-08 .10586750E-08 .10978682E-08 .11266783E-08 .11449703E-08 .11527059E-08 .11499433E-08 .11368348E-08 .11136245E-08 .10806448E-08 .10383121E-08 .98712318E-09 .92765003E-09 .86053372E-09 .78647777E-09 .70624051E-09 .62062742E-09 .53048334E-09 .43668485E-09 .34013227E-09 .24174123E-09 .14243370E-09 .43129062E-10 -.55264682E-10 -.15185891E-09 -.24579192E-09 -.33623614E-09 -.42240529E-09 -.50356160E-09 -.57902251E-09 -.64816670E-09 -.71043898E-09 -.76535411E-09 -.81250006E-09 -.85154084E-09 -.88221906E-09 -.90435794E-09 -.91786235E-09 -.92271862E-09 -.91899318E-09 -.90683051E-09 -.88645072E-09 -.85814691E-09 -.82228218E-09 -.77928591E-09 -.72964898E-09 -.67391804E-09 -.61268920E-09 -.54660175E-09 -.47633189E-09 -.40258671E-09 -.32609779E-09 -.24761419E-09 -.16789491E-09 -.87701104E-10 -.77885429E-11 .71099234E-10 .14823717E-09 .22292464E-09 .29449154E-09 .36230449E-09 .42577309E-09 .48435550E-09 .53756310E-09 .58496407E-09 .62618610E-09 .66091895E-09 .68891675E-09 .71000031E-09 .72405874E-09 .73105000E-09 .73100029E-09 .72400226E-09 .71021287E-09 .68985102E-09 .66319526E-09 .63058117E-09 .59239806E-09 .54908449E-09 .50112296E-09 .44903399E-09 .39337037E-09 .33471165E-09 .27365909E-09 .21083024E-09 .14685317E-09 .82359837E-10 .17979265E-10 -.45669152E-10 -.10798155E-09 -.16837467E-09 -.22629044E-09 -.28120043E-09 -.33261070E-09 -.38006679E-09 -.42315846E-09 -.46152365E-09 -.49485117E-09 -.52288244E-09 -.54541254E-09 -.56229130E-09 -.57342445E-09 -.57877477E-09 -.57836265E-09 -.57226547E-09 -.56061585E-09 -.54359885E-09 -.52144891E-09 -.49444692E-09 -.46291759E-09 -.42722671E-09 -.38777786E-09 -.34500812E-09 -.29938280E-09 -.25138962E-09 -.20153307E-09 -.15032941E-09 -.98302147E-10 -.45977833E-10 .61186175E-11 .57469231E-10 .10756883E-09 .15593086E-09 .20209255E-09 .24561899E-09 .28610632E-09 .32318446E-09 .35651994E-09 .38581922E-09 .41083207E-09 .43135469E-09 .44723165E-09 .45835666E-09 .46467218E-09 .46616857E-09 .46288331E-09 .45490062E-09 .44235118E-09 .42541140E-09 .40430157E-09 .37928284E-09 .35065323E-09 .31874326E-09 .28391202E-09 18.3303420892155593 T Non local Part 0 2 2.25569453687051436 1.26390785666839300 -0.197896699663111769 -0.197896699663111769 -0.400951871531517526E-02 Reciprocal Space Part .30666480E+02 .30601164E+02 .30405895E+02 .30082708E+02 .29634960E+02 .29067282E+02 .28385510E+02 .27596600E+02 .26708529E+02 .25730176E+02 .24671198E+02 .23541895E+02 .22353060E+02 .21115837E+02 .19841564E+02 .18541627E+02 .17227308E+02 .15909643E+02 .14599287E+02 .13306387E+02 .12040467E+02 .10810324E+02 .96239460E+01 .84884333E+01 .74099460E+01 .63936631E+01 .54437599E+01 .45634013E+01 .37547509E+01 .30189965E+01 .23563878E+01 .17662887E+01 .12472402E+01 .79703340E+00 .41279020E+00 .91050808E-01 -.17213473E+00 -.38111233E+00 -.54052895E+00 -.65523878E+00 -.73021207E+00 -.77044818E+00 -.78089428E+00 -.76637072E+00 -.73150415E+00 -.68066923E+00 -.61793932E+00 -.54704660E+00 -.47135181E+00 -.39382335E+00 -.31702567E+00 -.24311641E+00 -.17385164E+00 -.11059866E+00 -.54355282E-01 -.57748275E-02 .34804175E-01 .67324673E-01 .91975119E-01 .10915189E+00 .11942106E+00 .12348044E+00 .12212277E+00 .11620070E+00 .10659440E+00 .94182088E-01 .79814137E-01 .64290901E-01 .48344515E-01 .32624720E-01 .17688681E-01 .39946741E-02 -.81006024E-02 -.18341365E-01 -.26569106E-01 -.32716375E-01 -.36798431E-01 -.38903214E-01 -.39180110E-01 -.37827955E-01 -.35082729E-01 -.31205340E-01 -.26469853E-01 -.21152514E-01 -.15521809E-01 -.98297879E-02 -.43048102E-02 .85420039E-03 .54819336E-02 .94493208E-02 .12664666E-01 .15073382E-01 .16656457E-01 .17427835E-01 .17430866E-01 .16734056E-01 .15426301E-01 .13611820E-01 .11404986E-01 .89252349E-02 Real Space Part .24761730E+02 .24750523E+02 .24716612E+02 .24659137E+02 .24576704E+02 .24467436E+02 .24329054E+02 .24158964E+02 .23954363E+02 .23712360E+02 .23430093E+02 .23104856E+02 .22734230E+02 .22316189E+02 .21849223E+02 .21332422E+02 .20765566E+02 .20149179E+02 .19484574E+02 .18773870E+02 .18019991E+02 .17226633E+02 .16398224E+02 .15539850E+02 .14657172E+02 .13756320E+02 .12843782E+02 .11926280E+02 .11010639E+02 .10103654E+02 .92119666E+01 .83419329E+01 .74995134E+01 .66901661E+01 .59187561E+01 .51894820E+01 .45058179E+01 .38704758E+01 .32853851E+01 .27516918E+01 .22697753E+01 .18392814E+01 .14591706E+01 .11277801E+01 .84289480E+00 .60182861E+00 .40150976E+00 .23857003E+00 .10943432E+00 .10408235E-01 -.62238261E-01 -.11219331E+00 -.14303320E+00 -.15816133E+00 -.16075705E+00 -.15373488E+00 -.13971445E+00 -.12100079E+00 -.99574843E-01 -.77093284E-01 -.54896769E-01 -.34025556E-01 -.15241209E-01 .94688215E-03 .14251518E-01 .24575542E-01 .31978766E-01 .36645124E-01 .38851042E-01 .38935909E-01 .37275306E-01 .34257541E-01 .30263788E-01 .25652042E-01 .20744864E-01 .15820819E-01 .11109337E-01 .67886722E-02 .29865352E-02 -.21705590E-03 -.27851951E-02 -.47182603E-02 -.60473051E-02 -.68271016E-02 -.71292140E-02 -.70354293E-02 -.66317995E-02 -.60034893E-02 -.52305507E-02 -.43846872E-02 -.35270097E-02 -.27067385E-02 -.19607659E-02 -.13139607E-02 -.78007962E-03 -.36313550E-03 -.59074329E-04 .14238327E-03 .25586641E-03 .29855668E-03 Reciprocal Space Part .20375078E+02 .20473499E+02 .20766749E+02 .21248830E+02 .21909878E+02 .22736360E+02 .23711341E+02 .24814824E+02 .26024141E+02 .27314406E+02 .28658997E+02 .30030081E+02 .31399150E+02 .32737578E+02 .34017160E+02 .35210651E+02 .36292278E+02 .37238206E+02 .38026980E+02 .38639894E+02 .39061320E+02 .39278955E+02 .39284008E+02 .39071318E+02 .38639389E+02 .37990361E+02 .37129909E+02 .36067069E+02 .34814015E+02 .33385766E+02 .31799852E+02 .30075942E+02 .28235435E+02 .26301028E+02 .24296279E+02 .22245154E+02 .20171595E+02 .18099090E+02 .16050273E+02 .14046553E+02 .12107781E+02 .10251957E+02 .84949935E+01 .68505182E+01 .53297382E+01 .39413550E+01 .26915328E+01 .15839196E+01 .61971685E+00 -.20220526E+00 -.88515145E+00 -.14344094E+01 -.18570277E+01 -.21615705E+01 -.23578553E+01 -.24566792E+01 -.24695427E+01 -.24083750E+01 -.22852678E+01 -.21122232E+01 -.19009199E+01 -.16625027E+01 -.14073979E+01 -.11451580E+01 -.88433642E+00 -.63239475E+00 -.39564090E+00 -.17919888E+00 .12991902E-01 .17814953E+00 .31459732E+00 .42168949E+00 .49971800E+00 .54980450E+00 .57378087E+00 .57406246E+00 .55351767E+00 .51533759E+00 .46290897E+00 .39969375E+00 .32911768E+00 .25447042E+00 .17881875E+00 .10493447E+00 .35237425E-01 -.28245565E-01 -.83906382E-01 -.13056618E+00 -.16747192E+00 -.19428004E+00 -.21102886E+00 -.21810152E+00 -.21618119E+00 -.20620072E+00 -.18928862E+00 -.16671341E+00 -.13982811E+00 -.11001676E+00 -.78644321E-01 -.47011423E-01 Real Space Part .22104696E+03 .22039328E+03 .21844135E+03 .21521832E+03 .21076884E+03 .20515419E+03 .19845106E+03 .19075012E+03 .18215421E+03 .17277641E+03 .16273792E+03 .15216582E+03 .14119072E+03 .12994447E+03 .11855785E+03 .10715837E+03 .95868221E+02 .84802355E+02 .74066814E+02 .63757290E+02 .53957955E+02 .44740565E+02 .36163860E+02 .28273258E+02 .21100827E+02 .14665543E+02 .89737827E+01 .40200668E+01 -.21201234E+00 -.37486876E+01 -.66247831E+01 -.88823848E+01 -.10569451E+02 -.11738401E+02 -.12444717E+02 -.12745585E+02 -.12698618E+02 -.12360671E+02 -.11786778E+02 -.11029227E+02 -.10136777E+02 -.91540399E+01 -.81210104E+01 -.70727531E+01 -.60392402E+01 -.50453263E+01 -.41108505E+01 -.32508488E+01 -.24758619E+01 -.17923186E+01 -.12029784E+01 -.70741255E+00 -.30250903E+00 .17018447E-01 .25812968E+00 .42898018E+00 .53847675E+00 .59587561E+00 .61042939E+00 .59108752E+00 .54625202E+00 .48358895E+00 .40989370E+00 .33100716E+00 .25177802E+00 .17606598E+00 .10677961E+00 .45942463E-01 -.52193037E-02 -.46174135E-01 -.76973368E-01 -.98136123E-01 -.11053576E+00 -.11529207E+00 -.11367249E+00 -.10700491E+00 -.96603686E-01 -.83709757E-01 -.69445067E-01 -.54780805E-01 -.40518544E-01 -.27282898E-01 -.15524063E-01 -.55283998E-02 .25648104E-02 .87423351E-02 .13093435E-01 .15785392E-01 .17039509E-01 .17108707E-01 .16257600E-01 .14745652E-01 .12813749E-01 .10674326E-01 .85049403E-02 .64450400E-02 .45955451E-02 .30207619E-02 .17521089E-02 .79311337E-03 Non local Part 1 1 2.25569453687051436 0.274471180546746296 Reciprocal Space Part .00000000E+00 .47358978E+00 .94094922E+00 .13959524E+01 .18326805E+01 .22455197E+01 .26292543E+01 .29791511E+01 .32910346E+01 .35613524E+01 .37872271E+01 .39664970E+01 .40977420E+01 .41802963E+01 .42142471E+01 .42004194E+01 .41403475E+01 .40362344E+01 .38908992E+01 .37077146E+01 .34905355E+01 .32436204E+01 .29715471E+01 .26791247E+01 .23713038E+01 .20530865E+01 .17294379E+01 .14052015E+01 .10850190E+01 .77325713E+00 .47394160E+00 .19070040E+00 -.73283490E-01 -.31530910E+00 -.53318364E+00 -.72523795E+00 -.89033107E+00 -.10278445E+01 -.11376662E+01 -.12201662E+01 -.12761625E+01 -.13068815E+01 -.13139106E+01 -.12991471E+01 -.12647433E+01 -.12130491E+01 -.11465538E+01 -.10678288E+01 -.97947119E+00 -.88405051E+00 -.78405930E+00 -.68186811E+00 -.57968604E+00 -.47952714E+00 -.38318327E+00 -.29220352E+00 -.20788033E+00 -.13124223E+00 -.63052951E-01 -.38165227E-02 .46212105E-01 .87011534E-01 .11877416E+00 .14188291E+00 .15688534E+00 .16446573E+00 .16541620E+00 .16060740E+00 .15095977E+00 .13741574E+00 .12091383E+00 .10236484E+00 .82630904E-01 .62507416E-01 .42708354E-01 .23854953E-01 .64678502E-02 -.90373735E-02 -.22351400E-01 -.33269341E-01 -.41686154E-01 -.47589657E-01 -.51051505E-01 -.52216570E-01 -.51291126E-01 -.48530287E-01 -.44225111E-01 -.38689779E-01 -.32249207E-01 -.25227440E-01 -.17937085E-01 -.10670049E-01 -.36897294E-02 .27752024E-02 .85353674E-02 .13443584E-01 .17396153E-01 .20332605E-01 .22234051E-01 .23120279E-01 Real Space Part .00000000E+00 -.25176648E+00 -.49574044E+00 -.72434102E+00 -.93040450E+00 -.11073775E+01 -.12494924E+01 -.13519197E+01 -.14108937E+01 -.14238065E+01 -.13892699E+01 -.13071416E+01 -.11785175E+01 -.10056885E+01 -.79206545E+00 -.54207373E+00 -.26102160E+00 .45053546E-01 .36955614E+00 .70551519E+00 .10457734E+01 .13831769E+01 .17107598E+01 .20219192E+01 .23105749E+01 .25713096E+01 .27994874E+01 .29913463E+01 .31440637E+01 .32557938E+01 .33256772E+01 .33538227E+01 .33412636E+01 .32898908E+01 .32023653E+01 .30820141E+01 .29327126E+01 .27587582E+01 .25647394E+01 .23554036E+01 .21355285E+01 .19097998E+01 .16826999E+01 .14584079E+01 .12407160E+01 .10329611E+01 .83797484E+00 .65805067E+00 .49492907E+00 .34979916E+00 .22331596E+00 .11563153E+00 .26437811E-01 -.44980782E-01 -.99687712E-01 -.13902984E+00 -.16457064E+00 -.17802338E+00 -.18118636E+00 -.17588216E+00 -.16390238E+00 -.14695924E+00 -.12664486E+00 -.10439886E+00 -.81484523E-01 -.58973348E-01 -.37737755E-01 -.18451214E-01 -.15950305E-02 .12529210E-01 .23782615E-01 .32168519E-01 .37809716E-01 .40924502E-01 .41802555E-01 .40781576E-01 .38225475E-01 .34504751E-01 .29979532E-01 .24985598E-01 .19823548E-01 .14751121E-01 .99785537E-02 .56667460E-02 .19279133E-02 -.11716515E-02 -.36071385E-02 -.53895424E-02 -.65591850E-02 -.71788579E-02 -.73269601E-02 -.70909609E-02 -.65614543E-02 -.58270072E-02 -.49699401E-02 -.40631108E-02 -.31677147E-02 -.23320618E-02 -.15912461E-02 -.96758980E-03 PAW radial sets 339 0.974843199995423126 (5E20.12) augmentation charges (non sperical) .367530337710E-02 -.592143745695E-02 -.345236382944E-01 -.592143745695E-02 .186492245632E-02 .765120590333E-02 -.345236382944E-01 .765120590333E-02 .250261613212E-01 uccopancies in atom .100000000040E+01 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 .000000000000E+00 grid .222431015208E-04 .229663916925E-04 .237132014562E-04 .244842956104E-04 .252804638228E-04 .261025214392E-04 .269513103186E-04 .278276996949E-04 .287325870673E-04 .296668991197E-04 .306315926692E-04 .316276556464E-04 .326561081066E-04 .337180032752E-04 .348144286256E-04 .359465069931E-04 .371153977250E-04 .383222978674E-04 .395684433916E-04 .408551104595E-04 .421836167306E-04 .435553227115E-04 .449716331488E-04 .464339984683E-04 .479439162598E-04 .495029328111E-04 .511126446914E-04 .527747003864E-04 .544908019861E-04 .562627069288E-04 .580922297998E-04 .599812441906E-04 .619316846167E-04 .639455484998E-04 .660248982124E-04 .681718631903E-04 .703886421132E-04 .726775051566E-04 .750407963161E-04 .774809358084E-04 .800004225496E-04 .826018367142E-04 .852878423778E-04 .880611902448E-04 .909247204657E-04 .938813655458E-04 .969341533480E-04 .100086210194E-03 .103340764065E-03 .106701147908E-03 .110170803052E-03 .113753282724E-03 .117452255699E-03 .121271510047E-03 .125214957018E-03 .129286635047E-03 .133490713888E-03 .137831498885E-03 .142313435381E-03 .146941113271E-03 .151719271702E-03 .156652803924E-03 .161746762307E-03 .167006363508E-03 .172436993819E-03 .178044214681E-03 .183833768376E-03 .189811583915E-03 .195983783102E-03 .202356686808E-03 .208936821445E-03 .215730925645E-03 .222745957164E-03 .229989100008E-03 .237467771787E-03 .245189631316E-03 .253162586453E-03 .261394802201E-03 .269894709069E-03 .278671011703E-03 .287732697804E-03 .297089047331E-03 .306749642004E-03 .316724375115E-03 .327023461663E-03 .337657448813E-03 .348637226696E-03 .359974039565E-03 .371679497306E-03 .383765587331E-03 .396244686853E-03 .409129575560E-03 .422433448704E-03 .436169930613E-03 .450353088646E-03 .464997447595E-03 .480118004564E-03 .495730244325E-03 .511850155174E-03 .528494245311E-03 .545679559736E-03 .563423697715E-03 .581744830794E-03 .600661721416E-03 .620193742129E-03 .640360895429E-03 .661183834243E-03 .682683883080E-03 .704883059870E-03 .727804098509E-03 .751470472143E-03 .775906417208E-03 .801136958246E-03 .827187933536E-03 .854086021553E-03 .881858768290E-03 .910534615466E-03 .940142929655E-03 .970714032357E-03 .100227923105E-02 .103487085127E-02 .106852226966E-02 .110326794824E-02 .113914346960E-02 .117618557341E-02 .121443219403E-02 .125392249935E-02 .129469693087E-02 .133679724519E-02 .138026655670E-02 .142514938178E-02 .147149168436E-02 .151934092302E-02 .156874609954E-02 .161975780916E-02 .167242829231E-02 .172681148818E-02 .178296308990E-02 .184094060164E-02 .190080339742E-02 .196261278198E-02 .202643205353E-02 .209232656858E-02 .216036380887E-02 .223061345049E-02 .230314743520E-02 .237804004414E-02 .245536797389E-02 .253521041501E-02 .261764913313E-02 .270276855270E-02 .279065584345E-02 .288140100965E-02 .297509698227E-02 .307183971417E-02 .317172827837E-02 .327486496949E-02 .338135540851E-02 .349130865094E-02 .360483729852E-02 .372205761450E-02 .384308964273E-02 .396805733057E-02 .409708865587E-02 .423031575797E-02 .436787507308E-02 .450990747394E-02 .465655841415E-02 .480797807708E-02 .496432152971E-02 .512574888139E-02 .529242544783E-02 .546452192041E-02 .564221454095E-02 .582568528221E-02 .601512203428E-02 .621071879694E-02 .641267587837E-02 .662120010027E-02 .683650500965E-02 .705881109757E-02 .728834602489E-02 .752534485542E-02 .777005029668E-02 .802271294842E-02 .828359155928E-02 .855295329176E-02 .883107399579E-02 .911823849130E-02 .941474085982E-02 .972088474567E-02 .100369836670E-01 .103633613366E-01 .107003519938E-01 .110483007466E-01 .114075639247E-01 .117785094451E-01 .121615171885E-01 .125569793882E-01 .129653010321E-01 .133869002772E-01 .138222088780E-01 .142716726285E-01 .147357518189E-01 .152149217068E-01 .157096730041E-01 .162205123794E-01 .167479629768E-01 .172925649517E-01 .178548760243E-01 .184354720501E-01 .190349476103E-01 .196539166202E-01 .202930129581E-01 .209528911147E-01 .216342268627E-01 .223377179494E-01 .230640848114E-01 .238140713116E-01 .245884455018E-01 .253880004088E-01 .262135548468E-01 .270659542556E-01 .279460715667E-01 .288548080971E-01 .297930944725E-01 .307618915801E-01 .317621915527E-01 .327950187850E-01 .338614309824E-01 .349625202440E-01 .360994141815E-01 .372732770736E-01 .384853110586E-01 .397367573651E-01 .410288975836E-01 .423630549784E-01 .437405958434E-01 .451629309008E-01 .466315167460E-01 .481478573391E-01 .497135055456E-01 .513300647259E-01 .529991903779E-01 .547225918322E-01 .565020340024E-01 .583393391928E-01 .602363889645E-01 .621951260623E-01 .642175564039E-01 .663057511350E-01 .684618487493E-01 .706880572792E-01 .729866565568E-01 .753600005486E-01 .778105197662E-01 .803407237555E-01 .829532036664E-01 .856506349067E-01 .884357798817E-01 .913114908232E-01 .942807127104E-01 .973464862861E-01 .100511951170E+00 .103780349076E+00 .107155027127E+00 .110639441291E+00 .114237159910E+00 .117951867363E+00 .121787367836E+00 .125747589215E+00 .129836587115E+00 .134058549025E+00 .138417798604E+00 .142918800105E+00 .147566162945E+00 .152364646432E+00 .157319164630E+00 .162434791401E+00 .167716765592E+00 .173170496407E+00 .178801568943E+00 .184615749909E+00 .190618993536E+00 .196817447670E+00 .203217460069E+00 .209825584904E+00 .216648589475E+00 .223693461132E+00 .230967414441E+00 .238477898566E+00 .246232604898E+00 .254239474934E+00 .262506708409E+00 .271042771692E+00 .279856406458E+00 .288956638640E+00 .298352787670E+00 .308054476026E+00 .318071639084E+00 .328414535295E+00 .339093756689E+00 .350120239721E+00 .361505276474E+00 .373260526219E+00 .385398027361E+00 .397930209760E+00 .410869907467E+00 .424230371863E+00 .438025285231E+00 .452268774767E+00 .466975427050E+00 .482160302976E+00 .497838953186E+00 .514027433987E+00 .530742323799E+00 .548000740129E+00 .565820357103E+00 .584219423567E+00 .603216781772E+00 .622831886674E+00 .643084825853E+00 .663996340089E+00 .685587844601E+00 .707881450975E+00 .730899989812E+00 .754667034108E+00 .779206923393E+00 .804544788659E+00 .830706578092E+00 .857719083652E+00 .885609968505E+00 .914407795354E+00 .944142055691E+00 .974843199995E+00 .100654266892E+01 .103927292550E+01 .107306748837E+01 .110796096611E+01 aepotential .398478649727E+05 .380906134440E+05 .363959337370E+05 .347641869041E+05 .331953075608E+05 .316888892537E+05 .302442247708E+05 .288603407968E+05 .275360456194E+05 .262699529082E+05 .250605210043E+05 .239060927508E+05 .228048976733E+05 .217551135314E+05 .207548601474E+05 .198022154018E+05 .188952853861E+05 .180321398229E+05 .172108955844E+05 .164296480091E+05 .156866873792E+05 .149800179024E+05 .143081531885E+05 .136691968359E+05 .130617087413E+05 .124839824318E+05 .119346410758E+05 .114121651920E+05 .109152310649E+05 .104425237927E+05 .999275132679E+04 .956480645979E+04 .915746090909E+04 .876974934339E+04 .840053479157E+04 .804896741619E+04 .771403713201E+04 .739494135011E+04 .709079811125E+04 .680090787948E+04 .652445033587E+04 .626078856122E+04 .600924727540E+04 .576919537132E+04 .554006187172E+04 .532127306218E+04 .511232090614E+04 .491269491459E+04 .472193623230E+04 .453959532416E+04 .436525568407E+04 .419852149965E+04 .403901286119E+04 .388638571508E+04 .374029330610E+04 .360042874770E+04 .346648496045E+04 .333817762349E+04 .321525261137E+04 .309743465028E+04 .298448724295E+04 .287621049494E+04 .277233873755E+04 .267271420564E+04 .257711143924E+04 .248535984789E+04 .239728404963E+04 .231271395939E+04 .223149704366E+04 .215348104155E+04 .207852553654E+04 .200649350183E+04 .193726170769E+04 .187070231023E+04 .180670582228E+04 .174515567642E+04 .168595431787E+04 .162899699483E+04 .157419000298E+04 .152144508233E+04 .147067339047E+04 .142179399672E+04 .137473019171E+04 .132940509839E+04 .128575003047E+04 .124369488155E+04 .120317728429E+04 .116413359339E+04 .112650621571E+04 .109023799546E+04 .105527566242E+04 .102156754376E+04 .989064728797E+03 .957719860063E+03 .927488722560E+03 .898327652519E+03 .870195844444E+03 .843053436580E+03 .816863759491E+03 .791589971016E+03 .767197349333E+03 .743653548209E+03 .720925869920E+03 .698984558322E+03 .677800284813E+03 .657344924506E+03 .637591696212E+03 .618514944964E+03 .600089765304E+03 .582292557317E+03 .565100555211E+03 .548491771889E+03 .532445371160E+03 .516940933663E+03 .501959244016E+03 .487481605933E+03 .473490049290E+03 .459967421062E+03 .446897071350E+03 .434263168339E+03 .422050251845E+03 .410243677394E+03 .398829183761E+03 .387793172655E+03 .377122407466E+03 .366804293650E+03 .356826623558E+03 .347177607740E+03 .337846062499E+03 .328820877406E+03 .320091735108E+03 .311648475759E+03 .303481272472E+03 .295580815614E+03 .287937987998E+03 .280544057667E+03 .273390621075E+03 .266469502323E+03 .259772918880E+03 .253293269417E+03 .247023265366E+03 .240955859369E+03 .235084279899E+03 .229401941973E+03 .223902513958E+03 .218579910252E+03 .213428210355E+03 .208441713597E+03 .203614935373E+03 .198942545797E+03 .194419419995E+03 .190040598011E+03 .185801294292E+03 .181696871783E+03 .177722866574E+03 .173874958455E+03 .170148964319E+03 .166540853056E+03 .163046719384E+03 .159662794378E+03 .156385427183E+03 .153211094323E+03 .150136383520E+03 .147157998075E+03 .144272748703E+03 .141477542415E+03 .138769412726E+03 .136145449419E+03 .133602874082E+03 .131138973425E+03 .128751136390E+03 .126436829885E+03 .124193598619E+03 .122019072280E+03 .119910952716E+03 .117867013796E+03 .115885104051E+03 .113963128392E+03 .112099079339E+03 .110290984505E+03 .108536956574E+03 .106835152975E+03 .105183792115E+03 .103581149700E+03 .102025548964E+03 .100515369184E+03 .990490362901E+02 .976250224298E+02 .962418510241E+02 .948980818650E+02 .935923247136E+02 .923232256391E+02 .910894731967E+02 .898897922097E+02 .887229465282E+02 .875877336537E+02 .864829871056E+02 .854075723598E+02 .843603878965E+02 .833403619082E+02 .823464534825E+02 .813776497125E+02 .804329647616E+02 .795114422802E+02 .786121466007E+02 .777341718825E+02 .768766337643E+02 .760386705321E+02 .752194438574E+02 .744181363528E+02 .736339513041E+02 .728661115697E+02 .721138599925E+02 .713764574267E+02 .706531823095E+02 .699433309248E+02 .692462160873E+02 .685611660778E+02 .678875259816E+02 .672246540991E+02 .665719250435E+02 .659287261461E+02 .652944591881E+02 .646685383501E+02 .640503914130E+02 .634394578150E+02 .628351895751E+02 .622370501285E+02 .616445145918E+02 .610570689727E+02 .604742104378E+02 .598954466921E+02 .593202960353E+02 .587482870096E+02 .581789583563E+02 .576118589117E+02 .570465474031E+02 .564825924295E+02 .559195725292E+02 .553570758960E+02 .547947006833E+02 .542320547635E+02 .536687560155E+02 .531044321942E+02 .525387211962E+02 .519712710628E+02 .514017403392E+02 .508297977818E+02 .502551232242E+02 .496774072598E+02 .490963516174E+02 .485116696019E+02 .479230861668E+02 .473303381993E+02 .467331750667E+02 .461313586475E+02 .455246639075E+02 .449128790536E+02 .442958060584E+02 .436732609414E+02 .430450740842E+02 .424110907634E+02 .417711712894E+02 .411251916107E+02 .404730434657E+02 .398146348479E+02 .391498902661E+02 .384787511321E+02 .378011759269E+02 .371171406038E+02 .364266387561E+02 .357296818110E+02 .350262992721E+02 .343165387947E+02 .336004664070E+02 .328781664452E+02 .321497417613E+02 .314153136478E+02 .306750218762E+02 .299290247072E+02 .291774988792E+02 .284206395855E+02 .276586606095E+02 .268917943332E+02 .261202920610E+02 .253444243134E+02 .245644814398E+02 .237807744531E+02 .229936362347E+02 .222034232353E+02 .214105177251E+02 .206153308245E+02 .198183064535E+02 .190199263618E+02 .182207165234E+02 .174212550525E+02 .166221818728E+02 .158242103040E+02 .150281406500E+02 .142348757131E+02 .134454379835E+02 .126609878946E+02 .118828421522E+02 .111124906179E+02 .103516096308E+02 .960206889379E+01 .886592987568E+01 .814542751119E+01 .744294035189E+01 .676093626378E+01 .610189833823E+01 .546822920076E+01 .486213758788E+01 .428551456905E+01 .373981100931E+01 .322593187720E+01 .274416594485E+01 .229417020584E+01 .187502563642E+01 .148537320654E+01 .112362436528E+01 .788215571484E+00 .477836036972E+00 .191489895736E+00 -.718631958773E-01 -.314540011307E+00 -.542958710986E+00 -.772935207685E+00 -.103761875665E+01 -.139475976401E+01 -.192110808639E+01 -.266883750826E+01 -.356242906850E+01 -.429814249230E+01 -.449511847528E+01 -.414768690332E+01 -.363939092068E+01 -.324893142519E+01 -.301266282150E+01 core charge-density .163894277759E-06 .174722190913E-06 .186265415271E-06 .198571200594E-06 .211689917216E-06 .225675262092E-06 .240584478440E-06 .256478589882E-06 .273422650040E-06 .291486008599E-06 .310742594935E-06 .331271220452E-06 .353155900877E-06 .376486199814E-06 .401357594975E-06 .427871868565E-06 .456137523429E-06 .486270226652E-06 .518393282423E-06 .552638136088E-06 .589144911455E-06 .628062983538E-06 .669551589078E-06 .713780477319E-06 .760930603712E-06 .811194869355E-06 .864778909194E-06 .921901932191E-06 .982797616880E-06 .104771506597E-05 .111691982387E-05 .119069496125E-05 .126934223119E-05 .135318330135E-05 .144256106751E-05 .153784105354E-05 .163941290370E-05 .174769197314E-05 .186312102329E-05 .198617202884E-05 .211734810373E-05 .225718555404E-05 .240625606598E-05 .256516903792E-05 .273457406606E-05 .291516359351E-05 .310767573393E-05 .331289728081E-05 .353166691488E-05 .376487862239E-05 .401348533837E-05 .427850282939E-05 .456101383175E-05 .486217246163E-05 .518320891521E-05 .552543447775E-05 .589024686173E-05 .627913589581E-05 .669368958748E-05 .713560058384E-05 .760667305669E-05 .810883003963E-05 .864412124661E-05 .921473140387E-05 .982298912810E-05 .104713763874E-04 .111625385821E-04 .118992952873E-04 .126846516985E-04 .135218108281E-04 .144141865006E-04 .153654171985E-04 .163793808150E-04 .174602103726E-04 .186123107696E-04 .198403766220E-04 .211494112730E-04 .225447470433E-04 .240320668064E-04 .256174269721E-04 .273072819709E-04 .291085103360E-04 .310284424883E-04 .330748903313E-04 .352561787769E-04 .375811793242E-04 .400593458256E-04 .427007525811E-04 .455161349105E-04 .485169323646E-04 .517153347447E-04 .551243311107E-04 .587577619722E-04 .626303748645E-04 .667578835295E-04 .711570309306E-04 .758456563496E-04 .808427668249E-04 .861686132105E-04 .918447711501E-04 .978942272801E-04 .104341470996E-03 .111212592133E-03 .118535384944E-03 .126339458768E-03 .134656355812E-03 .143519676510E-03 .152965212920E-03 .163031090680E-03 .173757920059E-03 .185188956676E-03 .197370272486E-03 .210350937696E-03 .224183214274E-03 .238922761794E-03 .254628856369E-03 .271364623508E-03 .289197285737E-03 .308198425924E-03 .328444267255E-03 .350015970915E-03 .372999952536E-03 .397488218585E-03 .423578723903E-03 .451375751690E-03 .480990317300E-03 .512540597289E-03 .546152385255E-03 .581959576073E-03 .620104680235E-03 .660739370106E-03 .704025059989E-03 .750133522020E-03 .799247540004E-03 .851561603434E-03 .907282644060E-03 .966630817472E-03 .102984033234E-02 .109716033007E-02 .116885581773E-02 .124520865735E-02 .132651861483E-02 .141310447171E-02 .150530520347E-02 .160348122801E-02 .170801572816E-02 .181931605246E-02 .193781519825E-02 .206397338176E-02 .219827969969E-02 .234125388734E-02 .249344817816E-02 .265544927023E-02 .282788040507E-02 .301140356455E-02 .320672179187E-02 .341458164282E-02 .363577577362E-02 .387114567213E-02 .412158453911E-02 .438804032667E-02 .467151894112E-02 .497308761765E-02 .529387847450E-02 .563509225430E-02 .599800226063E-02 .638395849769E-02 .679439202130E-02 .723081950945E-02 .769484806043E-02 .818818022702E-02 .871261929454E-02 .927007481105E-02 .986256837734E-02 .104922397044E-01 .111613529453E-01 .118723033090E-01 .126276239615E-01 .134299932202E-01 .142822420474E-01 .151873618449E-01 .161485125548E-01 .171690310670E-01 .182524399336E-01 .194024563901E-01 .206230016786E-01 .219182106702E-01 .232924417766E-01 .247502871425E-01 .262965831056E-01 .279364209072E-01 .296751576348E-01 .315184273712E-01 .334721525236E-01 .355425552985E-01 .377361692833E-01 .400598510922E-01 .425207920240E-01 .451265296736E-01 .478849594346E-01 .508043458156E-01 .538933334911E-01 .571609579932E-01 .606166559418E-01 .642702747012E-01 .681320813359E-01 .722127707301E-01 .765234727181E-01 .810757580615E-01 .858816430923E-01 .909535928265E-01 .963045223367E-01 .101947796154E+00 .107897225450E+00 .114167062743E+00 .120771993831E+00 .127727126658E+00 .135047976796E+00 .142750449192E+00 .150850815823E+00 .159365688891E+00 .168311989152E+00 .177706908966E+00 .187567869656E+00 .197912472717E+00 .208758444438E+00 .220123573471E+00 .232025640889E+00 .244482342257E+00 .257511201276E+00 .271129474525E+00 .285354046887E+00 .300201317236E+00 .315687074003E+00 .331826360284E+00 .348633328195E+00 .366121082244E+00 .384301511555E+00 .403185110875E+00 .422780790390E+00 .443095674473E+00 .464134889649E+00 .485901342180E+00 .508395485844E+00 .531615080664E+00 .555554943543E+00 .580206691963E+00 .605558482159E+00 .631594743411E+00 .658295910364E+00 .685638155582E+00 .713593124801E+00 .742127677676E+00 .771203637116E+00 .800777550583E+00 .830800467081E+00 .861217733820E+00 .891968816843E+00 .922987150160E+00 .954200018174E+00 .985528476367E+00 .101688731539E+01 .104818507374E+01 .107932410440E+01 .111020070042E+01 .114070528485E+01 .117072266958E+01 .120013238783E+01 .122880910431E+01 .125662310652E+01 .128344088026E+01 .130912577105E+01 .133353873287E+01 .135653916394E+01 .137798582853E+01 .139773786203E+01 .141565585539E+01 .143160301332E+01 .144544637889E+01 .145705811585E+01 .146631683760E+01 .147310897080E+01 .147733013906E+01 .147888655108E+01 .147769637578E+01 .147369108549E+01 .146681674716E+01 .145703524044E+01 .144432538071E+01 .142868392473E+01 .141012643649E+01 .138868799112E+01 .136442369540E+01 .133740900468E+01 .130773981746E+01 .127553233133E+01 .124092264617E+01 .120406610407E+01 .116513635871E+01 .112432417126E+01 .108183593434E+01 .103789193079E+01 .992724339102E+00 .946575003667E+00 .899692993750E+00 .852331981696E+00 .804747484775E+00 .757193979095E+00 .709921996606E+00 .663175212418E+00 .617187591048E+00 .572180660323E+00 .528360972610E+00 .485917814054E+00 .445021217637E+00 .405820327813E+00 .368442153496E+00 .332990732707E+00 .299546717258E+00 .268167370772E+00 .238886959671E+00 .211717506100E+00 .186649865497E+00 .163655090681E+00 .142686049386E+00 .123679273447E+00 .106557034487E+00 .912296600377E-01 .775981132590E-01 .655568253069E-01 .549966245656E-01 .458072780313E-01 .378787142664E-01 .310999620080E-01 .253564175923E-01 .205293748939E-01 .165012991724E-01 .131628830046E-01 .104161275710E-01 kinetic energy-density .180546526687E-03 .184493244337E-03 .188607971661E-03 .192899582321E-03 .197377420552E-03 .202051326265E-03 .206931686900E-03 .212029428338E-03 .217356088161E-03 .222923831733E-03 .228745472781E-03 .234834574958E-03 .241205390396E-03 .247873028987E-03 .254853429298E-03 .262163393781E-03 .269820724094E-03 .277844226348E-03 .286253769271E-03 .295070351694E-03 .304316254109E-03 .314015018261E-03 .324191550651E-03 .334872111185E-03 .346084815779E-03 .357859051446E-03 .370226326105E-03 .383219646806E-03 .396874352247E-03 .411227653815E-03 .426319172361E-03 .442190666059E-03 .458886698943E-03 .476454508253E-03 .494943810399E-03 .514407987337E-03 .534903185342E-03 .556489210550E-03 .579229365234E-03 .603191218779E-03 .628445969258E-03 .655069714623E-03 .683142885463E-03 .712751141961E-03 .743985396976E-03 .776942123932E-03 .811723946500E-03 .848439790982E-03 .887205478699E-03 .928144000686E-03 .971386106752E-03 .101707080838E-02 .106534566356E-02 .111636782198E-02 .117030406832E-02 .122733180035E-02 .128763983829E-02 .135142843637E-02 .141891118276E-02 .149031475751E-02 .156588015440E-02 .164586431892E-02 .173053969502E-02 .182019668819E-02 .191514419301E-02 .201570999312E-02 .212224424123E-02 .223511788549E-02 .235472685860E-02 .248149170318E-02 .261586007989E-02 .275830846106E-02 .290934363795E-02 .306950517012E-02 .323936700616E-02 .341954011249E-02 .361067466527E-02 .381346279299E-02 .402864077810E-02 .425699288808E-02 .449935326823E-02 .475661023017E-02 .502970917286E-02 .531965635568E-02 .562752329132E-02 .595445014931E-02 .630165105132E-02 .667041833327E-02 .706212782345E-02 .747824418543E-02 .792032675502E-02 .839003555699E-02 .888913812770E-02 .941951553169E-02 .998317168816E-02 .105822389682E-01 .112189878932E-01 .118958362054E-01 .126153574030E-01 .133802920293E-01 .141935572214E-01 .150582593494E-01 .159777049284E-01 .169554152432E-01 .179951382293E-01 .191008647089E-01 .202768434235E-01 .215275975846E-01 .228579424702E-01 .242730048010E-01 .257782423221E-01 .273794650164E-01 .290828579418E-01 .308950058709E-01 .328229172636E-01 .348740538575E-01 .370563572890E-01 .393782818878E-01 .418488258238E-01 .444775672972E-01 .472747001618E-01 .502510747145E-01 .534182382597E-01 .567884801028E-01 .603748790900E-01 .641913525310E-01 .682527112652E-01 .725747143412E-01 .771741305684E-01 .820688020214E-01 .872777105033E-01 .928210513184E-01 .987203091276E-01 .104998337855E+00 .111679447892E+00 .118789497073E+00 .126355987174E+00 .134408166060E+00 .142977139446E+00 .152095980297E+00 .161799859270E+00 .172126166154E+00 .183114654581E+00 .194807581104E+00 .207249865221E+00 .220489248017E+00 .234576467503E+00 .249565441913E+00 .265513460167E+00 .282481391409E+00 .300533896879E+00 .319739661872E+00 .340171637478E+00 .361907293900E+00 .385028893690E+00 .409623775161E+00 .435784652876E+00 .463609936601E+00 .493204065319E+00 .524677860266E+00 .558148897308E+00 .593741898275E+00 .631589144397E+00 .671830909010E+00 .714615916440E+00 .760101817410E+00 .808455699434E+00 .859854612225E+00 .914486121261E+00 .972548895032E+00 .103425331264E+01 .109982210336E+01 .116949101195E+01 .124350950361E+01 .132214149102E+01 .140566609091E+01 .149437842905E+01 .158859045686E+01 .168863181733E+01 .179485073953E+01 .190761496038E+01 .202731269670E+01 .215435362693E+01 .228916993321E+01 .243221735300E+01 .258397627423E+01 .274495286033E+01 .291568020256E+01 .309671949297E+01 .328866123830E+01 .349212647723E+01 .370776802831E+01 .393627174736E+01 .417835780132E+01 .443478193208E+01 .470633674226E+01 .499385294891E+01 .529820064283E+01 .562029050609E+01 .596107501104E+01 .632154956430E+01 .670275359764E+01 .710577159201E+01 .753173401121E+01 .798181814480E+01 .845724881045E+01 .895929896122E+01 .948929007625E+01 .100485924189E+02 .106386250745E+02 .112608557215E+02 .119168002075E+02 .126080217474E+02 .133361298803E+02 .141027789925E+02 .149096664745E+02 .157585304507E+02 .166511469704E+02 .175893267659E+02 .185749113077E+02 .196097683927E+02 .206957869085E+02 .218348710083E+02 .230289334029E+02 .242798879194E+02 .255896411075E+02 .269600829533E+02 .283930766024E+02 .298904470502E+02 .314539687281E+02 .330853520204E+02 .347862285342E+02 .365581352678E+02 .384024974680E+02 .403206102923E+02 .423136192222E+02 .443824991918E+02 .465280325244E+02 .487507856478E+02 .510510846722E+02 .534289898624E+02 .558842691654E+02 .584163708058E+02 .610243951807E+02 .637070661834E+02 .664627021119E+02 .692891865002E+02 .721839390173E+02 .751438867040E+02 .781654362206E+02 .812444467826E+02 .843762049871E+02 .875554014183E+02 .907761095460E+02 .940317678032E+02 .973151648807E+02 .100618429079E+03 .103933022185E+03 .107249738520E+03 .110558709661E+03 .113849415340E+03 .117110701410E+03 .120330804816E+03 .123497386814E+03 .126597574022E+03 .129618008522E+03 .132544906545E+03 .135364126430E+03 .138061245677E+03 .140621647135E+03 .143030614004E+03 .145273433472E+03 .147335508302E+03 .149202475718E+03 .150860332812E+03 .152295567221E+03 .153495292077E+03 .154447383571E+03 .155140619805E+03 .155564819061E+03 .155710975571E+03 .155571391239E+03 .155139800664E+03 .154411488028E+03 .153383393448E+03 .152054206769E+03 .150424447079E+03 .148496525916E+03 .146274792619E+03 .143765560408E+03 .140977111901E+03 .137919683292E+03 .134605426461E+03 .131048348806E+03 .127264230869E+03 .123270522128E+03 .119086215732E+03 .114731703257E+03 .110228610813E+03 .105599618173E+03 .100868262666E+03 .960587299095E+02 .911956333656E+02 .863037849038E+02 .814079584980E+02 .765326503862E+02 .717018147640E+02 .669386925851E+02 .622654659721E+02 .577030909985E+02 .532710537113E+02 .489871566104E+02 .448673236373E+02 .409254296440E+02 .371731608706E+02 .336199130785E+02 .302727334383E+02 .271363109262E+02 .242130177610E+02 .215030014359E+02 .190043233810E+02 .167131366294E+02 .146238914671E+02 .127295552861E+02 .110218309258E+02 .949135674473E+01 .812787205719E+01 .692033610479E+01 .585700554401E+01 .492552040447E+01 .411313530594E+01 .340732843818E+01 .279696051460E+01 .227359259842E+01 .183139577881E+01 .146434266892E+01 .116363176118E+01 .918901031906E+00 .720600035550E+00 pspotential .858992271499E+01 .859026350835E+01 .859059356949E+01 .859091323580E+01 .859122283476E+01 .859152268337E+01 .859181308876E+01 .859209434830E+01 .859236674992E+01 .859263057267E+01 .859288608672E+01 .859313355380E+01 .859337322729E+01 .859360535264E+01 .859383016762E+01 .859404790242E+01 .859425877997E+01 .859446301631E+01 .859466082053E+01 .859485239521E+01 .859503793649E+01 .859521763448E+01 .859539167320E+01 .859556023083E+01 .859572347999E+01 .859588158787E+01 .859603471643E+01 .859618302244E+01 .859632665774E+01 .859646576951E+01 .859660050017E+01 .859673098769E+01 .859685736576E+01 .859697976371E+01 .859709830694E+01 .859721311686E+01 .859732431098E+01 .859743200326E+01 .859753630394E+01 .859763731981E+01 .859773515437E+01 .859782990777E+01 .859792167710E+01 .859801055628E+01 .859809663636E+01 .859818000546E+01 .859826074899E+01 .859833894965E+01 .859841468750E+01 .859848804012E+01 .859855908261E+01 .859862788775E+01 .859869452596E+01 .859875906552E+01 .859882157251E+01 .859888211093E+01 .859894074281E+01 .859899752818E+01 .859905252520E+01 .859910579016E+01 .859915737764E+01 .859920734047E+01 .859925572980E+01 .859930259519E+01 .859934798464E+01 .859939194464E+01 .859943452017E+01 .859947575490E+01 .859951569101E+01 .859955436939E+01 .859959182966E+01 .859962811021E+01 .859966324819E+01 .859969727955E+01 .859973023917E+01 .859976216079E+01 .859979307712E+01 .859982301978E+01 .859985201948E+01 .859988010590E+01 .859990730781E+01 .859993365307E+01 .859995916864E+01 .859998388067E+01 .860000781447E+01 .860003099453E+01 .860005344461E+01 .860007518771E+01 .860009624608E+01 .860011664131E+01 .860013639423E+01 .860015552514E+01 .860017405360E+01 .860019199858E+01 .860020937847E+01 .860022621107E+01 .860024251363E+01 .860025830282E+01 .860027359483E+01 .860028840534E+01 .860030274950E+01 .860031664199E+01 .860033009706E+01 .860034312848E+01 .860035574962E+01 .860036797338E+01 .860037981230E+01 .860039127851E+01 .860040238375E+01 .860041313939E+01 .860042355646E+01 .860043364564E+01 .860044341725E+01 .860045288132E+01 .860046204754E+01 .860047092531E+01 .860047952372E+01 .860048785158E+01 .860049591744E+01 .860050372956E+01 .860051129595E+01 .860051862439E+01 .860052572237E+01 .860053259716E+01 .860053925585E+01 .860054570526E+01 .860055195198E+01 .860055800245E+01 .860056386287E+01 .860056953928E+01 .860057503747E+01 .860058036312E+01 .860058552172E+01 .860059051852E+01 .860059535871E+01 .860060004725E+01 .860060458895E+01 .860060898854E+01 .860061325050E+01 .860061737925E+01 .860062137905E+01 .860062525402E+01 .860062900817E+01 .860063264541E+01 .860063616948E+01 .860063958403E+01 .860064289260E+01 .860064609865E+01 .860064920550E+01 .860065221639E+01 .860065513446E+01 .860065796276E+01 .860066070426E+01 .860066336183E+01 .860066593826E+01 .860066843627E+01 .860067085851E+01 .860067320752E+01 .860067548582E+01 .860067769584E+01 .860067983991E+01 .860068192036E+01 .860068393943E+01 .860068589927E+01 .860068780202E+01 .860068964979E+01 .860069144455E+01 .860069318830E+01 .860069488294E+01 .860069653036E+01 .860069813239E+01 .860069969083E+01 .860070120741E+01 .860070268383E+01 .860070412177E+01 .860070552285E+01 .860070688865E+01 .860070822073E+01 .860070952058E+01 .860071078967E+01 .860071202940E+01 .860071324117E+01 .860071442630E+01 .860071558605E+01 .860071672165E+01 .860071783426E+01 .860071892497E+01 .860071999480E+01 .860072104466E+01 .860072207540E+01 .860072308774E+01 .860072408229E+01 .860072505951E+01 .860072601969E+01 .860072696296E+01 .860072788922E+01 .860072879810E+01 .860072968900E+01 .860073056094E+01 .860073141264E+01 .860073224231E+01 .860073304771E+01 .860073382604E+01 .860073457381E+01 .860073528680E+01 .860073595995E+01 .860073658713E+01 .860073716119E+01 .860073767356E+01 .860073811427E+01 .860073847156E+01 .860073873179E+01 .860073887898E+01 .860073889465E+01 .860073875735E+01 .860073844228E+01 .860073792077E+01 .860073715978E+01 .860073612124E+01 .860073476136E+01 .860073302981E+01 .860073086877E+01 .860072821193E+01 .860072498321E+01 .860072109552E+01 .860071644910E+01 .860071092976E+01 .860070440692E+01 .860069673130E+01 .860068773229E+01 .860067721503E+01 .860066495697E+01 .860065070412E+01 .860063416665E+01 .860061501391E+01 .860059286881E+01 .860056730140E+01 .860053782161E+01 .860050387092E+01 .860046481296E+01 .860041992281E+01 .860036837479E+01 .860030922867E+01 .860024141394E+01 .860016371190E+01 .860007473546E+01 .859997290597E+01 .859985642709E+01 .859972325503E+01 .859957106474E+01 .859939721149E+01 .859919868732E+01 .859897207149E+01 .859871347432E+01 .859841847329E+01 .859808204067E+01 .859769846120E+01 .859726123882E+01 .859676299066E+01 .859619532688E+01 .859554871432E+01 .859481232167E+01 .859397384405E+01 .859301930391E+01 .859193282528E+01 .859069637792E+01 .858928948696E+01 .858768890416E+01 .858586823490E+01 .858379751589E+01 .858144273631E+01 .857876529552E+01 .857572138861E+01 .857226131053E+01 .856832866784E+01 .856385948603E+01 .855878119855E+01 .855301150193E+01 .854645705886E+01 .853901202947E+01 .853055640697E+01 .852095413157E+01 .851005095208E+01 .849767200000E+01 .848361903572E+01 .846766731944E+01 .844956205221E+01 .842901432219E+01 .840569648053E+01 .837923685673E+01 .834921370670E+01 .831514826638E+01 .827649675923E+01 .823264117723E+01 .818287862275E+01 .812640896361E+01 .806232051944E+01 .798957347303E+01 .790698069815E+01 .781318574306E+01 .770663785142E+01 .758556421479E+01 .744794025610E+01 .729145982814E+01 .711350905216E+01 .691115049082E+01 .668112889165E+01 .641991624864E+01 .612382246535E+01 .578920757338E+01 .541283945045E+01 .499244128513E+01 .452745558137E+01 .402000327212E+01 .347592717750E+01 .290568293962E+01 .232471254314E+01 .175287923698E+01 .121265262037E+01 .726068853441E+00 .311004917424E+00 -.221986759020E-01 -.272552983512E+00 -.447872708711E+00 -.562219131797E+00 -.633640199093E+00 -.687221393057E+00 -.769933069216E+00 -.964040969436E+00 -.127036060788E+01 -.175911535838E+01 -.252892025480E+01 -.351639595012E+01 -.433602513953E+01 -.453707678942E+01 -.417898648805E+01 -.365794135620E+01 -.324663198511E+01 -.301058707858E+01 core charge-density (pseudized) .219911892471E-08 .234446396924E-08 .249941521637E-08 .266460756306E-08 .284071786814E-08 .302846772565E-08 .322862642153E-08 .344201408566E-08 .366950505228E-08 .391203144246E-08 .417058698338E-08 .444623108007E-08 .474009315614E-08 .505337728152E-08 .538736710601E-08 .574343111891E-08 .612302825624E-08 .652771387860E-08 .695914614412E-08 .741909280253E-08 .790943843841E-08 .843219219303E-08 .898949599662E-08 .958363334471E-08 .102170386545E-07 .108923072397E-07 .116122059445E-07 .123796844803E-07 .131978875121E-07 .140701675435E-07 .150000986528E-07 .159914911377E-07 .170484071279E-07 .181751772285E-07 .193764182650E-07 .206570521998E-07 .220223262994E-07 .234778346350E-07 .250295410029E-07 .266838033613E-07 .284473998809E-07 .303275567176E-07 .323319776216E-07 .344688755020E-07 .367470060786E-07 .391757037577E-07 .417649198786E-07 .445252634884E-07 .474680448111E-07 .506053215904E-07 .539499484949E-07 .575156297886E-07 .613169754828E-07 .653695611990E-07 .696899919884E-07 .742959703692E-07 .792063688607E-07 .844413073116E-07 .900222353387E-07 .959720202143E-07 .102315040563E-06 .109077286248E-06 .116286464866E-06 .123972115272E-06 .132165728612E-06 .140900877358E-06 .150213352861E-06 .160141312007E-06 .170725433561E-06 .182009084837E-06 .194038499399E-06 .206862966490E-06 .220535032993E-06 .235110718735E-06 .250649746020E-06 .267215784334E-06 .284876711224E-06 .303704890414E-06 .323777468311E-06 .345176690098E-06 .367990236726E-06 .392311584170E-06 .418240386440E-06 .445882883893E-06 .475352338543E-06 .506769498132E-06 .540263090877E-06 .575970352914E-06 .614037590602E-06 .654620779992E-06 .697886205907E-06 .744011143273E-06 .793184583472E-06 .845608008694E-06 .901496217482E-06 .961078204825E-06 .102459810042E-05 .109231616895E-05 .116450987647E-05 .124147502722E-05 .132352697571E-05 .141100191873E-05 .150425827285E-05 .160367814300E-05 .170966888799E-05 .182266478956E-05 .194312883179E-05 .207155459795E-05 .220846829291E-05 .235443089903E-05 .251004047462E-05 .267593460432E-05 .285279301132E-05 .304134034231E-05 .324234913644E-05 .345664299048E-05 .368509993313E-05 .392865602238E-05 .418830918057E-05 .446512328286E-05 .476023251590E-05 .507484602457E-05 .541025286572E-05 .576782728929E-05 .614903436845E-05 .655543600170E-05 .698869731164E-05 .745059346657E-05 .794301695277E-05 .846798532739E-05 .902764948358E-05 .962430246169E-05 .102603888428E-04 .109385147625E-04 .116614585870E-04 .124321822939E-04 .132538436051E-04 .141298089214E-04 .150636671114E-04 .160592442117E-04 .171206190975E-04 .182521401892E-04 .194584432619E-04 .207444704317E-04 .221154903956E-04 .235771200088E-04 .251353472865E-04 .267965559251E-04 .285675514427E-04 .304555890457E-04 .324684033353E-04 .346142399759E-04 .369018894538E-04 .393407230647E-04 .419407312774E-04 .447125646287E-04 .476675773185E-04 .508178736811E-04 .541763577242E-04 .577567859355E-04 .615738235736E-04 .656431046730E-04 .699812960057E-04 .746061652622E-04 .795366537279E-04 .847929537513E-04 .903965913189E-04 .963705140723E-04 .102739185126E-03 .109528683066E-03 .116766808535E-03 .124483197836E-03 .132709444018E-03 .141479225932E-03 .150828445772E-03 .160795375680E-03 .171420813973E-03 .182748251658E-03 .194824049880E-03 .207697629031E-03 .221421670283E-03 .236052330338E-03 .251649470278E-03 .268276899425E-03 .286002635172E-03 .304899179851E-03 .325043815715E-03 .346518919231E-03 .369412295916E-03 .393817537053E-03 .419834399698E-03 .447569211473E-03 .477135301745E-03 .508653460882E-03 .542252429379E-03 .578069418778E-03 .616250666387E-03 .656952025966E-03 .700339596659E-03 .746590392580E-03 .795893055627E-03 .848448614238E-03 .904471290967E-03 .964189361920E-03 .102784607128E-02 .109570060433E-02 .116802912256E-02 .124512586469E-02 .132730431756E-02 .141489846122E-02 .150826409260E-02 .160778023243E-02 .171385062045E-02 .182690530401E-02 .194740232553E-02 .207582951451E-02 .221270639005E-02 .235858618013E-02 .251405796419E-02 .267974894559E-02 .285632686126E-02 .304450253551E-02 .324503258582E-02 .345872228804E-02 .368642860920E-02 .392906341594E-02 .418759686680E-02 .446306099677E-02 .475655350255E-02 .506924173674E-02 .540236691949E-02 .575724857552E-02 .613528920435E-02 .653797919123E-02 .696690196543E-02 .742373941204E-02 .791027754234E-02 .842841242662E-02 .898015639197E-02 .956764448554E-02 .101931412019E-01 .108590474701E-01 .115679078942E-01 .123224182348E-01 .131254331184E-01 .139799739538E-01 .148892370291E-01 .158566017592E-01 .168856390402E-01 .179801196656E-01 .191440227421E-01 .203815440349E-01 .216971041596E-01 .230953565187E-01 .245811948685E-01 .261597603777E-01 .278364480211E-01 .296169121235E-01 .315070708427E-01 .335131093489E-01 .356414814216E-01 .378989091469E-01 .402923803541E-01 .428291433821E-01 .455166987128E-01 .483627869516E-01 .513753725683E-01 .545626227454E-01 .579328806034E-01 .614946319915E-01 .652564649490E-01 .692270208465E-01 .734149361249E-01 .778287734493E-01 .824769409951E-01 .873675984831E-01 .925085484854E-01 .979071114314E-01 .103569982665E+00 .109503069844E+00 .115711308924E+00 .122198456984E+00 .128966860154E+00 .136017195031E+00 .143348182104E+00 .150956269963E+00 .158835289443E+00 .166976077302E+00 .175366069721E+00 .183988866725E+00 .192823769685E+00 .201845295399E+00 .211022671853E+00 .220319322735E+00 .229692350128E+00 .239092027560E+00 .248461318826E+00 .257735441691E+00 .266841499767E+00 .275698210501E+00 .284215762273E+00 .292295838983E+00 .299831856030E+00 .306709457025E+00 .312807325621E+00 .317998370920E+00 .322151347570E+00 .325132971925E+00 .326810592615E+00 .327055466258E+00 .325746675421E+00 .322775704436E+00 .318051657523E+00 .311507060569E+00 .303104130800E+00 .292841325348E+00 .280759888791E+00 .266950010175E+00 .251556072484E+00 .234780334409E+00 .216884231220E+00 .198186328093E+00 .179055820349E+00 .159900372230E+00 .141147048781E+00 .123215162799E+00 .106480078802E+00 .912274458344E-01 .775981132590E-01 .655568253069E-01 .549966245656E-01 .458072780313E-01 .378787142664E-01 .310999620080E-01 .253564175923E-01 .205293748939E-01 .165012991724E-01 .131628830046E-01 .104161275710E-01 pseudo wavefunction .513302233514E-05 .529993541670E-05 .547227609533E-05 .565022086295E-05 .583395195057E-05 .602365751487E-05 .621953183095E-05 .642177549123E-05 .663059561090E-05 .684620604003E-05 .706882758254E-05 .729868822238E-05 .753602335694E-05 .778107603816E-05 .803409722141E-05 .829534602252E-05 .856508998311E-05 .884360534461E-05 .913117733110E-05 .942810044148E-05 .973467875098E-05 .100512262226E-04 .103780670287E-04 .107155358829E-04 .110639783828E-04 .114237513640E-04 .117952232656E-04 .121787745073E-04 .125747978792E-04 .129836989440E-04 .134058964521E-04 .138418227708E-04 .142919243269E-04 .147566620638E-04 .152365119137E-04 .157319652849E-04 .162435295652E-04 .167717286413E-04 .173171034354E-04 .178802124592E-04 .184616323857E-04 .190619586401E-04 .196818060092E-04 .203218092713E-04 .209826238459E-04 .216649264653E-04 .223694158676E-04 .230968135118E-04 .238478643174E-04 .246233374265E-04 .254240269921E-04 .262507529909E-04 .271043620634E-04 .279857283809E-04 .288957545403E-04 .298353724891E-04 .308055444793E-04 .318072640532E-04 .328415570605E-04 .339094827092E-04 .350121346502E-04 .361506420974E-04 .373261709840E-04 .385399251566E-04 .397931476080E-04 .410871217504E-04 .424231727294E-04 .438026687814E-04 .452270226346E-04 .466976929559E-04 .482161858447E-04 .497840563755E-04 .514029101901E-04 .530744051422E-04 .548002529955E-04 .565822211763E-04 .584221345836E-04 .603218774585E-04 .622833953134E-04 .643086969246E-04 .663998563899E-04 .685590152521E-04 .707883846930E-04 .730902477974E-04 .754669618915E-04 .779209609574E-04 .804547581254E-04 .830709482484E-04 .857722105591E-04 .885613114140E-04 .914411071271E-04 .944145468946E-04 .974846758160E-04 .100654638013E-03 .103927679848E-03 .107307153253E-03 .110796519158E-03 .114399351039E-03 .118119338577E-03 .121960291437E-03 .125926143172E-03 .130020955248E-03 .134248921209E-03 .138614370968E-03 .143121775245E-03 .147775750146E-03 .152581061890E-03 .157542631696E-03 .162665540816E-03 .167955035749E-03 .173416533609E-03 .179055627679E-03 .184878093137E-03 .190889892979E-03 .197097184119E-03 .203506323707E-03 .210123875634E-03 .216956617264E-03 .224011546373E-03 .231295888324E-03 .238817103467E-03 .246582894789E-03 .254601215802E-03 .262880278699E-03 .271428562769E-03 .280254823089E-03 .289368099496E-03 .298777725855E-03 .308493339629E-03 .318524891755E-03 .328882656852E-03 .339577243753E-03 .350619606386E-03 .362021055004E-03 .373793267791E-03 .385948302836E-03 .398498610505E-03 .411457046214E-03 .424836883622E-03 .438651828249E-03 .452916031546E-03 .467644105423E-03 .482851137245E-03 .498552705333E-03 .514764894955E-03 .531504314856E-03 .548788114319E-03 .566634000791E-03 .585060258081E-03 .604085765162E-03 .623730015587E-03 .644013137537E-03 .664955914540E-03 .686579806860E-03 .708906973596E-03 .731960295505E-03 .755763398584E-03 .780340678419E-03 .805717325350E-03 .831919350461E-03 .858973612431E-03 .886907845273E-03 .915750686997E-03 .945531709225E-03 .976281447784E-03 .100803143433E-02 .104081422900E-02 .107466345421E-02 .110961382952E-02 .114570120770E-02 .118296261201E-02 .122143627474E-02 .126116167701E-02 .130217958997E-02 .134453211739E-02 .138826273962E-02 .143341635919E-02 .148003934780E-02 .152817959510E-02 .157788655898E-02 .162921131773E-02 .168220662393E-02 .173692696025E-02 .179342859716E-02 .185176965274E-02 .191201015453E-02 .197421210357E-02 .203843954081E-02 .210475861578E-02 .217323765780E-02 .224394724978E-02 .231696030468E-02 .239235214477E-02 .247020058389E-02 .255058601267E-02 .263359148701E-02 .271930281996E-02 .280780867696E-02 .289920067492E-02 .299357348498E-02 .309102493948E-02 .319165614301E-02 .329557158800E-02 .340287927497E-02 .351369083769E-02 .362812167355E-02 .374629107939E-02 .386832239306E-02 .399434314113E-02 .412448519301E-02 .425888492187E-02 .439768337281E-02 .454102643862E-02 .468906504373E-02 .484195533672E-02 .499985889199E-02 .516294292126E-02 .533138049533E-02 .550535077704E-02 .568503926599E-02 .587063805591E-02 .606234610553E-02 .626036952393E-02 .646492187137E-02 .667622447679E-02 .689450677308E-02 .712000665158E-02 .735297083720E-02 .759365528568E-02 .784232560485E-02 .809925750159E-02 .836473725661E-02 .863906222931E-02 .892254139506E-02 .921549591754E-02 .951825975910E-02 .983118033218E-02 .101546191953E-01 .104889527973E-01 .108345732740E-01 .111918893014E-01 .115613270111E-01 .119433309720E-01 .123383652454E-01 .127469145187E-01 .131694853257E-01 .136066073593E-01 .140588348876E-01 .145267482789E-01 .150109556484E-01 .155120946355E-01 .160308343237E-01 .165678773162E-01 .171239619798E-01 .176998648739E-01 .182964033783E-01 .189144385404E-01 .195548781586E-01 .202186801234E-01 .209068560400E-01 .216204751547E-01 .223606686131E-01 .231286340782E-01 .239256407390E-01 .247530347429E-01 .256122450876E-01 .265047900113E-01 .274322839211E-01 .283964449044E-01 .293991028705E-01 .304422083709E-01 .315278421515E-01 .326582254939E-01 .338357314013E-01 .350628966938E-01 .363424350742E-01 .376772512316E-01 .390704560501E-01 .405253829915E-01 .420456057210E-01 .436349570442E-01 .452975492220E-01 .470377957265E-01 .488604344948E-01 .507705527315E-01 .527736132984E-01 .548754827171E-01 .570824607925E-01 .594013118413E-01 .618392974830E-01 .644042109150E-01 .671044125516E-01 .699488668552E-01 .729471801267E-01 .761096389483E-01 .794472488867E-01 .829717729608E-01 .866957692611E-01 .906326269681E-01 .947965998590E-01 .992028362076E-01 .103867403776E+00 .108807308357E+00 .114040504066E+00 .119585893288E+00 .125463313838E+00 .131693510583E+00 .138298088331E+00 .145299442444E+00 .152720663150E+00 .160585409142E+00 .168917745590E+00 .177741941300E+00 .187082219388E+00 .196962455550E+00 .207405817865E+00 .218434342038E+00 .230068436256E+00 .242326310354E+00 .255223324911E+00 .268771257366E+00 .282977484251E+00 .297844081485E+00 .313366848395E+00 .329534265907E+00 .346326405389E+00 .363713812052E+00 .381656395762E+00 .400102372668E+00 .418987313304E+00 .438233366531E+00 .457748743839E+00 .477427564431E+00 .497150177625E+00 .516784094244E+00 .536185671332E+00 .555202702619E+00 .573678068107E+00 .591450336836E+00 ae wavefunction -.945662117948E-04 -.976400808474E-04 -.100813852341E-03 -.104090772285E-03 -.107474192098E-03 -.110967572027E-03 -.114574484677E-03 -.118298618655E-03 -.122143782331E-03 -.126113907724E-03 -.130213054507E-03 -.134445414149E-03 -.138815314185E-03 -.143327222631E-03 -.147985752532E-03 -.152795666664E-03 -.157761882388E-03 -.162889476656E-03 -.168183691185E-03 -.173649937790E-03 -.179293803898E-03 -.185121058233E-03 -.191137656687E-03 -.197349748382E-03 -.203763681926E-03 -.210386011868E-03 -.217223505366E-03 -.224283149065E-03 -.231572156202E-03 -.239097973933E-03 -.246868290903E-03 -.254891045054E-03 -.263174431685E-03 -.271726911777E-03 -.280557220576E-03 -.289674376458E-03 -.299087690080E-03 -.308806773820E-03 -.318841551522E-03 -.329202268555E-03 -.339899502193E-03 -.350944172328E-03 -.362347552526E-03 -.374121281437E-03 -.386277374574E-03 -.398828236458E-03 -.411786673166E-03 -.425165905266E-03 -.438979581178E-03 -.453241790950E-03 -.467967080477E-03 -.483170466182E-03 -.498867450148E-03 -.515074035749E-03 -.531806743762E-03 -.549082629008E-03 -.566919297502E-03 -.585334924170E-03 -.604348271107E-03 -.623978706426E-03 -.644246223697E-03 -.665171462012E-03 -.686775726665E-03 -.709081010504E-03 -.732110015946E-03 -.755886177686E-03 -.780433686128E-03 -.805777511541E-03 -.831943428984E-03 -.858958044009E-03 -.886848819166E-03 -.915644101344E-03 -.945373149961E-03 -.976066166035E-03 -.100775432216E-02 -.104046979343E-02 -.107424578928E-02 -.110911658637E-02 -.114511756247E-02 -.118228523134E-02 -.122065727879E-02 -.126027259976E-02 -.130117133656E-02 -.134339491833E-02 -.138698610165E-02 -.143198901243E-02 -.147844918908E-02 -.152641362692E-02 -.157593082407E-02 -.162705082861E-02 -.167982528722E-02 -.173430749529E-02 -.179055244852E-02 -.184861689604E-02 -.190855939521E-02 -.197044036792E-02 -.203432215869E-02 -.210026909436E-02 -.216834754570E-02 -.223862599069E-02 -.231117507968E-02 -.238606770254E-02 -.246337905766E-02 -.254318672298E-02 -.262557072908E-02 -.271061363434E-02 -.279840060229E-02 -.288901948107E-02 -.298256088526E-02 -.307911827986E-02 -.317878806677E-02 -.328166967353E-02 -.338786564461E-02 -.349748173516E-02 -.361062700732E-02 -.372741392911E-02 -.384795847602E-02 -.397238023529E-02 -.410080251289E-02 -.423335244338E-02 -.437016110259E-02 -.451136362313E-02 -.465709931296E-02 -.480751177685E-02 -.496274904086E-02 -.512296367995E-02 -.528831294861E-02 -.545895891466E-02 -.563506859623E-02 -.581681410181E-02 -.600437277367E-02 -.619792733440E-02 -.639766603665E-02 -.660378281627E-02 -.681647744850E-02 -.703595570753E-02 -.726242952927E-02 -.749611717725E-02 -.773724341181E-02 -.798603966233E-02 -.824274420260E-02 -.850760232923E-02 -.878086654298E-02 -.906279673302E-02 -.935366036393E-02 -.965373266536E-02 -.996329682429E-02 -.102826441796E-01 -.106120744190E-01 -.109518957779E-01 -.113024252399E-01 -.116639887394E-01 -.120369213654E-01 -.124215675658E-01 -.128182813535E-01 -.132274265116E-01 -.136493768003E-01 -.140845161618E-01 -.145332389254E-01 -.149959500111E-01 -.154730651313E-01 -.159650109899E-01 -.164722254789E-01 -.169951578705E-01 -.175342690061E-01 -.180900314785E-01 -.186629298089E-01 -.192534606172E-01 -.198621327836E-01 -.204894676017E-01 -.211359989210E-01 -.218022732784E-01 -.224888500168E-01 -.231963013895E-01 -.239252126494E-01 -.246761821202E-01 -.254498212497E-01 -.262467546409E-01 -.270676200622E-01 -.279130684310E-01 -.287837637712E-01 -.296803831413E-01 -.306036165303E-01 -.315541667190E-01 -.325327491042E-01 -.335400914821E-01 -.345769337881E-01 -.356440277904E-01 -.367421367318E-01 -.378720349182E-01 -.390345072487E-01 -.402303486827E-01 -.414603636406E-01 -.427253653333E-01 -.440261750142E-01 -.453636211508E-01 -.467385385091E-01 -.481517671447E-01 -.496041512965E-01 -.510965381747E-01 -.526297766388E-01 -.542047157564E-01 -.558222032384E-01 -.574830837412E-01 -.591881970294E-01 -.609383759909E-01 -.627344444962E-01 -.645772150939E-01 -.664674865329E-01 -.684060411033E-01 -.703936417863E-01 -.724310292044E-01 -.745189183614E-01 -.766579951632E-01 -.788489127095E-01 -.810922873464E-01 -.833886944697E-01 -.857386640691E-01 -.881426760029E-01 -.906011549945E-01 -.931144653389E-01 -.956829053118E-01 -.983067012706E-01 -.100986001439E+00 -.103720869367E+00 -.106511277060E+00 -.109357097763E+00 -.112258098405E+00 -.115213931694E+00 -.118224127845E+00 -.121288085964E+00 -.124405065067E+00 -.127574174738E+00 -.130794365431E+00 -.134064418424E+00 -.137382935417E+00 -.140748327800E+00 -.144158805595E+00 -.147612366075E+00 -.151106782102E+00 -.154639590186E+00 -.158208078286E+00 -.161809273406E+00 -.165439928992E+00 -.169096512179E+00 -.172775190934E+00 -.176471821127E+00 -.180181933604E+00 -.183900721291E+00 -.187623026418E+00 -.191343327918E+00 -.195055729069E+00 -.198753945480E+00 -.202431293479E+00 -.206080679024E+00 -.209694587208E+00 -.213265072480E+00 -.216783749687E+00 -.220241786041E+00 -.223629894149E+00 -.226938326216E+00 -.230156869556E+00 -.233274843540E+00 -.236281098130E+00 -.239164014117E+00 -.241911505226E+00 -.244511022216E+00 -.246949559127E+00 -.249213661811E+00 -.251289438898E+00 -.253162575327E+00 -.254818348594E+00 -.256241647837E+00 -.257416995900E+00 -.258328574495E+00 -.258960252592E+00 -.259295618130E+00 -.259318013181E+00 -.259010572645E+00 -.258356266576E+00 -.257337946215E+00 -.255938393811E+00 -.254140376266E+00 -.251926702685E+00 -.249280285839E+00 -.246184207570E+00 -.242621788153E+00 -.238576659576E+00 -.234032842722E+00 -.228974828374E+00 -.223387661950E+00 -.217257031834E+00 -.210569361112E+00 -.203311902498E+00 -.195472836130E+00 -.187041369881E+00 -.178007841735E+00 -.168363823670E+00 -.158102226434E+00 -.147217404458E+00 -.135705260092E+00 -.123563346246E+00 -.110790966479E+00 -.973892715618E-01 -.833613515939E-01 -.687123228637E-01 -.534494088864E-01 -.375820153549E-01 -.211217991733E-01 -.408273224140E-02 .135188388105E-01 .316641352523E-01 .503318892337E-01 .694982850402E-01 .891368968911E-01 .109218622363E+00 .129711611822E+00 .150581195888E+00 .171789814630E+00 .193296953393E+00 .215059090243E+00 .237029658426E+00 .259159023857E+00 .281394473799E+00 .303680213093E+00 .325957380018E+00 .348164149862E+00 .370236137257E+00 .392107604918E+00 .413714463954E+00 .435000470512E+00 .455927378470E+00 .476485911210E+00 .496695752053E+00 .516577582147E+00 .536104106122E+00 .555179890286E+00 .573672489238E+00 .591450336836E+00 pseudo wavefunction .378485662501E-05 .390793072017E-05 .403500687784E-05 .416621523512E-05 .430169016082E-05 .444157039311E-05 .458599918156E-05 .473512443386E-05 .488909886731E-05 .504808016517E-05 .521223113817E-05 .538171989126E-05 .555671999571E-05 .573741066692E-05 .592397694792E-05 .611660989887E-05 .631550679273E-05 .652087131730E-05 .673291378378E-05 .695185134216E-05 .717790820364E-05 .741131587016E-05 .765231337155E-05 .790114751031E-05 .815807311429E-05 .842335329776E-05 .869725973077E-05 .898007291741E-05 .927208248307E-05 .957358747102E-05 .988489664867E-05 .102063288238E-04 .105382131709E-04 .108808895687E-04 .112347089475E-04 .116000336492E-04 .119772377983E-04 .123667076847E-04 .127688421594E-04 .131840530432E-04 .136127655483E-04 .140554187135E-04 .145124658543E-04 .149843750267E-04 .154716295068E-04 .159747282857E-04 .164941865802E-04 .170305363607E-04 .175843268962E-04 .181561253162E-04 .187465171921E-04 .193561071364E-04 .199855194221E-04 .206353986220E-04 .213064102689E-04 .219992415368E-04 .227146019449E-04 .234532240844E-04 .242158643682E-04 .250033038060E-04 .258163488037E-04 .266558319899E-04 .275226130676E-04 .284175796955E-04 .293416483965E-04 .302957654966E-04 .312809080938E-04 .322980850587E-04 .333483380679E-04 .344327426704E-04 .355524093895E-04 .367084848596E-04 .379021530007E-04 .391346362308E-04 .404071967175E-04 .417211376710E-04 .430778046781E-04 .444785870808E-04 .459249193985E-04 .474182827973E-04 .489602066070E-04 .505522698867E-04 .521961030423E-04 .538933894960E-04 .556458674101E-04 .574553314671E-04 .593236347075E-04 .612526904272E-04 .632444741372E-04 .653010255862E-04 .674244508496E-04 .696169244862E-04 .718806917647E-04 .742180709633E-04 .766314557435E-04 .791233176012E-04 .816962083975E-04 .843527629719E-04 .870957018405E-04 .899278339815E-04 .928520597118E-04 .958713736565E-04 .989888678160E-04 .102207734731E-03 .105531270753E-03 .108962879419E-03 .112506074935E-03 .116164485776E-03 .119941858402E-03 .123842061091E-03 .127869087904E-03 .132027062769E-03 .136320243710E-03 .140753027201E-03 .145329952667E-03 .150055707139E-03 .154935130044E-03 .159973218163E-03 .165175130748E-03 .170546194801E-03 .176091910530E-03 .181817956977E-03 .187730197833E-03 .193834687440E-03 .200137676990E-03 .206645620920E-03 .213365183521E-03 .220303245759E-03 .227466912316E-03 .234863518863E-03 .242500639567E-03 .250386094840E-03 .258527959345E-03 .266934570255E-03 .275614535787E-03 .284576744005E-03 .293830371918E-03 .303384894864E-03 .313250096206E-03 .323436077336E-03 .333953268008E-03 .344812437006E-03 .356024703153E-03 .367601546681E-03 .379554820970E-03 .391896764663E-03 .404640014177E-03 .417797616621E-03 .431383043121E-03 .445410202592E-03 .459893455944E-03 .474847630751E-03 .490288036394E-03 .506230479692E-03 .522691281041E-03 .539687291070E-03 .557235907836E-03 .575355094573E-03 .594063398017E-03 .613379967312E-03 .633324573532E-03 .653917629832E-03 .675180212238E-03 .697134081116E-03 .719801703319E-03 .743206275051E-03 .767371745461E-03 .792322840995E-03 .818085090516E-03 .844684851241E-03 .872149335494E-03 .900506638313E-03 .929785765937E-03 .960016665197E-03 .991230253836E-03 .102345845179E-02 .105673421346E-02 .109109156099E-02 .112656561862E-02 .116319264806E-02 .120101008504E-02 .124005657696E-02 .128037202173E-02 .132199760778E-02 .136497585536E-02 .140935065907E-02 .145516733173E-02 .150247264957E-02 .155131489880E-02 .160174392360E-02 .165381117556E-02 .170756976456E-02 .176307451126E-02 .182038200106E-02 .187955063967E-02 .194064071034E-02 .200371443272E-02 .206883602340E-02 .213607175823E-02 .220549003634E-02 .227716144595E-02 .235115883206E-02 .242755736592E-02 .250643461637E-02 .258787062310E-02 .267194797179E-02 .275875187116E-02 .284837023198E-02 .294089374797E-02 .303641597866E-02 .313503343415E-02 .323684566178E-02 .334195533470E-02 .345046834224E-02 .356249388208E-02 .367814455426E-02 .379753645670E-02 .392078928244E-02 .404802641827E-02 .417937504477E-02 .431496623755E-02 .445493506946E-02 .459942071377E-02 .474856654786E-02 .490252025727E-02 .506143393992E-02 .522546420986E-02 .539477230051E-02 .556952416671E-02 .574989058517E-02 .593604725273E-02 .612817488188E-02 .632645929267E-02 .653109150034E-02 .674226779774E-02 .696018983146E-02 .718506467058E-02 .741710486683E-02 .765652850460E-02 .790355923929E-02 .815842632221E-02 .842136461001E-02 .869261455639E-02 .897242218369E-02 .926103903137E-02 .955872207859E-02 .986573363700E-02 .101823412103E-01 .105088173157E-01 .108454392632E-01 .111924888862E-01 .115502522186E-01 .119190191106E-01 .122990827761E-01 .126907392634E-01 .130942868396E-01 .135100252775E-01 .139382550342E-01 .143792763079E-01 .148333879569E-01 .153008862657E-01 .157820635392E-01 .162772065025E-01 .167865944852E-01 .173104973625E-01 .178491732228E-01 .184028657304E-01 .189718011441E-01 .195561849506E-01 .201561980652E-01 .207719925456E-01 .214036867605E-01 .220513599432E-01 .227150460561E-01 .233947268781E-01 .240903242198E-01 .248016911557E-01 .255286021516E-01 .262707419464E-01 .270276930333E-01 .277989215626E-01 .285837614662E-01 .293813965807E-01 .301908405142E-01 .310109139731E-01 .318402192271E-01 .326771113530E-01 .335196658524E-01 .343656421883E-01 .352124427347E-01 .360570665703E-01 .368960574827E-01 .377254454811E-01 .385406810344E-01 .393365611735E-01 .401071465055E-01 .408456681011E-01 .415444231168E-01 .421946579250E-01 .427864374295E-01 .433084991578E-01 .437480906513E-01 .440907886109E-01 .443202982335E-01 .444182311756E-01 .443638606437E-01 .441338522358E-01 .437019693757E-01 .430387525121E-01 .421111717302E-01 .408822530805E-01 .393106798090E-01 .373503708267E-01 .349500402368E-01 .320527436085E-01 .285954190163E-01 .245084337238E-01 .197151508520E-01 .141315345040E-01 .766581668760E-02 .218255006752E-03 -.831898348486E-02 -.180617697210E-01 -.291337410098E-01 -.416657518062E-01 -.557949799784E-01 -.716636137428E-01 -.894170375981E-01 -.109201430795E+00 -.131160690393E+00 -.155432594375E+00 -.182144130594E+00 -.211405936873E+00 -.243305829055E+00 -.277901440162E+00 -.315212058076E+00 -.355209834040E+00 -.397810641820E+00 -.442860295812E+00 ae wavefunction .241425048433E-04 .249272555279E-04 .257375110445E-04 .265741000909E-04 .274378782757E-04 .283297289911E-04 .292505643138E-04 .302013259357E-04 .311829861240E-04 .321965487128E-04 .332430501264E-04 .343235604359E-04 .354391844505E-04 .365910628425E-04 .377803733109E-04 .390083317804E-04 .402761936405E-04 .415852550245E-04 .429368541291E-04 .443323725772E-04 .457732368248E-04 .472609196124E-04 .487969414647E-04 .503828722370E-04 .520203327129E-04 .537109962525E-04 .554565904944E-04 .572588991118E-04 .591197636262E-04 .610410852783E-04 .630248269603E-04 .650730152093E-04 .671877422655E-04 .693711681964E-04 .716255230893E-04 .739531093143E-04 .763563038595E-04 .788375607423E-04 .813994134964E-04 .840444777406E-04 .867754538283E-04 .895951295823E-04 .925063831184E-04 .955121857573E-04 .986156050317E-04 .101819807788E-03 .105128063390E-03 .108543747019E-03 .112070343086E-03 .115711448751E-03 .119470777549E-03 .123352163142E-03 .127359563179E-03 .131497063289E-03 .135768881193E-03 .140179370952E-03 .144733027349E-03 .149434490407E-03 .154288550054E-03 .159300150933E-03 .164474397369E-03 .169816558485E-03 .175332073486E-03 .181026557112E-03 .186905805254E-03 .192975800755E-03 .199242719388E-03 .205712936031E-03 .212393031021E-03 .219289796725E-03 .226410244299E-03 .233761610675E-03 .241351365754E-03 .249187219830E-03 .257277131243E-03 .265629314273E-03 .274252247272E-03 .283154681058E-03 .292345647564E-03 .301834468753E-03 .311630765809E-03 .321744468618E-03 .332185825528E-03 .342965413419E-03 .354094148080E-03 .365583294896E-03 .377444479872E-03 .389689700985E-03 .402331339879E-03 .415382173926E-03 .428855388636E-03 .442764590454E-03 .457123819935E-03 .471947565312E-03 .487250776480E-03 .503048879384E-03 .519357790842E-03 .536193933807E-03 .553574253076E-03 .571516231461E-03 .590037906441E-03 .609157887287E-03 .628895372701E-03 .649270168948E-03 .670302708527E-03 .692014069368E-03 .714425994579E-03 .737560912755E-03 .761441958865E-03 .786092995718E-03 .811538636039E-03 .837804265149E-03 .864916064283E-03 .892901034537E-03 .921787021478E-03 .951602740412E-03 .982377802340E-03 .101414274060E-02 .104692903821E-02 .108076915595E-02 .111569656115E-02 .115174575723E-02 .118895231399E-02 .122735289866E-02 .126698530777E-02 .130788849972E-02 .135010262823E-02 .139366907654E-02 .143863049247E-02 .148503082421E-02 .153291535707E-02 .158233075095E-02 .163332507867E-02 .168594786519E-02 .174025012759E-02 .179628441597E-02 .185410485511E-02 .191376718702E-02 .197532881428E-02 .203884884425E-02 .210438813401E-02 .217200933616E-02 .224177694540E-02 .231375734579E-02 .238801885889E-02 .246463179245E-02 .254366848991E-02 .262520338049E-02 .270931302990E-02 .279607619161E-02 .288557385865E-02 .297788931589E-02 .307310819269E-02 .317131851590E-02 .327261076317E-02 .337707791637E-02 .348481551517E-02 .359592171061E-02 .371049731858E-02 .382864587301E-02 .395047367885E-02 .407608986449E-02 .420560643354E-02 .433913831593E-02 .447680341800E-02 .461872267142E-02 .476502008091E-02 .491582277029E-02 .507126102684E-02 .523146834363E-02 .539658145955E-02 .556674039682E-02 .574208849563E-02 .592277244558E-02 .610894231365E-02 .630075156819E-02 .649835709874E-02 .670191923112E-02 .691160173730E-02 .712757183984E-02 .735000021007E-02 .757906095973E-02 .781493162543E-02 .805779314532E-02 .830782982738E-02 .856522930863E-02 .883018250466E-02 .910288354866E-02 .938352971919E-02 .967232135600E-02 .996946176287E-02 .102751570968E-01 .105896162422E-01 .109130506702E-01 .112456742801E-01 .115877032246E-01 .119393557144E-01 .123008518051E-01 .126724131608E-01 .130542627970E-01 .134466247992E-01 .138497240168E-01 .142637857308E-01 .146890352946E-01 .151256977446E-01 .155739973820E-01 .160341573220E-01 .165063990103E-01 .169909417046E-01 .174880019206E-01 .179977928404E-01 .185205236821E-01 .190563990289E-01 .196056181169E-01 .201683740804E-01 .207448531523E-01 .213352338199E-01 .219396859345E-01 .225583697733E-01 .231914350540E-01 .238390199004E-01 .245012497594E-01 .251782362682E-01 .258700760733E-01 .265768495995E-01 .272986197720E-01 .280354306901E-01 .287873062556E-01 .295542487572E-01 .303362374120E-01 .311332268695E-01 .319451456778E-01 .327718947188E-01 .336133456159E-01 .344693391183E-01 .353396834699E-01 .362241527673E-01 .371224853157E-01 .380343819912E-01 .389595046170E-01 .398974743659E-01 .408478701980E-01 .418102273473E-01 .427840358694E-01 .437687392637E-01 .447637331865E-01 .457683642690E-01 .467819290587E-01 .478036730999E-01 .488327901727E-01 .498684217092E-01 .509096564055E-01 .519555300490E-01 .530050255813E-01 .540570734154E-01 .551105520254E-01 .561642888279E-01 .572170613701E-01 .582675988405E-01 .593145839142E-01 .603566549415E-01 .613924084875E-01 .624204022217E-01 .634391581565E-01 .644471662224E-01 .654428881639E-01 .664247617312E-01 .673912051309E-01 .683406216920E-01 .692714046877E-01 .701819422419E-01 .710706222322E-01 .719358370856E-01 .727759883426E-01 .735894908456E-01 .743747763833E-01 .751302965985E-01 .758545249384E-01 .765459573983E-01 .772031117756E-01 .778245251172E-01 .784087490088E-01 .789543423114E-01 .794598609126E-01 .799238440146E-01 .803447964355E-01 .807211663541E-01 .810513178779E-01 .813334977646E-01 .815657955770E-01 .817460964997E-01 .818720259955E-01 .819408854312E-01 .819495777561E-01 .818945222727E-01 .817715575044E-01 .815758311299E-01 .813016759379E-01 .809424707409E-01 .804904851957E-01 .799367074976E-01 .792706539685E-01 .784801596317E-01 .775511489917E-01 .764673864011E-01 .752102056406E-01 .737582186575E-01 .720870038458E-01 .701687748191E-01 .679720313706E-01 .654611952511E-01 .625962345626E-01 .593322819794E-01 .556192536722E-01 .514014777199E-01 .466173429018E-01 .411989810276E-01 .350719983160E-01 .281552737374E-01 .203608447057E-01 .115939031528E-01 .175292809341E-02 -.927001535083E-02 -.215887755934E-01 -.353223725051E-01 -.505939698807E-01 -.675295263167E-01 -.862561289298E-01 -.106900132311E+00 -.129585481625E+00 -.154432988280E+00 -.181561488535E+00 -.211090523890E+00 -.243139584880E+00 -.277813242673E+00 -.315169412567E+00 -.355194395044E+00 -.397805029331E+00 -.442860295812E+00 pseudo wavefunction .150810069090E-08 .160777468307E-08 .171403636847E-08 .182732114354E-08 .194809318113E-08 .207684733238E-08 .221411115431E-08 .236044707149E-08 .251645468044E-08 .268277320646E-08 .286008412281E-08 .304911394291E-08 .325063719723E-08 .346547960680E-08 .369452146653E-08 .393870125215E-08 .419901946547E-08 .447654273389E-08 .477240818076E-08 .508782808465E-08 .542409484652E-08 .578258628521E-08 .616477128290E-08 .657221580372E-08 .700658931015E-08 .746967160340E-08 .796336011606E-08 .848967768654E-08 .905078084751E-08 .964896866207E-08 .102866921439E-07 .109665643000E-07 .116913708374E-07 .124640815770E-07 .132878626223E-07 .141660893325E-07 .151023601518E-07 .161005113548E-07 .171646327642E-07 .182990845091E-07 .195085148900E-07 .207978794246E-07 .221724611527E-07 .236378922828E-07 .252001772696E-07 .268657174166E-07 .286413371047E-07 .305343117545E-07 .325523976365E-07 .347038636518E-07 .369975252128E-07 .394427803636E-07 .420496482877E-07 .448288103601E-07 .477916539136E-07 .509503188969E-07 .543177476171E-07 .579077377690E-07 .617349989702E-07 .658152130319E-07 .701650982137E-07 .748024777247E-07 .797463527526E-07 .850169803187E-07 .906359562790E-07 .966263038112E-07 .103012567750E-06 .109820915155E-06 .117079242530E-06 .124817290127E-06 .133066763797E-06 .141861464912E-06 .151237428850E-06 .161233072659E-06 .171889352455E-06 .183249931245E-06 .195361357824E-06 .208273257509E-06 .222038535469E-06 .236713593501E-06 .252358561131E-06 .269037541983E-06 .286818876442E-06 .305775421670E-06 .325984850127E-06 .347529967826E-06 .370499053626E-06 .394986220937E-06 .421091803345E-06 .448922765712E-06 .478593142458E-06 .510224504796E-06 .543946458863E-06 .579897176760E-06 .618223962698E-06 .659083856556E-06 .702644277337E-06 .749083709140E-06 .798592432482E-06 .851373303943E-06 .907642587344E-06 .967630839864E-06 .103158385671E-05 .109976367823E-05 .117244966359E-05 .124993963541E-05 .133255110004E-05 .142062254850E-05 .151451484339E-05 .161461269749E-05 .172132625001E-05 .183509274714E-05 .195637833351E-05 .208567996222E-05 .222352743096E-05 .237048555277E-05 .252715647028E-05 .269418212284E-05 .287224687677E-05 .306208032940E-05 .326446029841E-05 .348021600884E-05 .371023149056E-05 .395544920044E-05 .421687388384E-05 .449557669124E-05 .479269956705E-05 .510945992841E-05 .544715565319E-05 .580717039765E-05 .619097926559E-05 .660015485205E-05 .703637368653E-05 .750142310194E-05 .799720855757E-05 .852576144594E-05 .908924741561E-05 .968997524399E-05 .103304062965E-04 .110131646110E-04 .117410476481E-04 .125170377528E-04 .133443143726E-04 .142262670837E-04 .151665094773E-04 .161688939647E-04 .172375275590E-04 .183767887015E-04 .195913451983E-04 .208861733433E-04 .222665783042E-04 .237382158557E-04 .253071155486E-04 .269797054095E-04 .287628382734E-04 .306638198546E-04 .326904386740E-04 .348509979615E-04 .371543496683E-04 .396099307243E-04 .422278016921E-04 .450186879731E-04 .479940237372E-04 .511659987529E-04 .545476083114E-04 .581527064479E-04 .619960626781E-04 .660934224821E-04 .704615717822E-04 .751184056790E-04 .800830017268E-04 .853756980463E-04 .910181765963E-04 .970335519418E-04 .103446465883E-03 .110283188331E-03 .117571724843E-03 .125341931250E-03 .133625635859E-03 .142456769710E-03 .151871505430E-03 .161908405251E-03 .172608578792E-03 .184015851242E-03 .196176942643E-03 .209141658988E-03 .222963095924E-03 .237697855878E-03 .253406279498E-03 .270152692341E-03 .288005667814E-03 .307038307441E-03 .327328539577E-03 .348959437797E-03 .372019560234E-03 .396603311261E-03 .422811326945E-03 .450750885871E-03 .480536346963E-03 .512289616080E-03 .546140643264E-03 .582227952650E-03 .620699207148E-03 .661711810177E-03 .705433546868E-03 .752043267283E-03 .801731614393E-03 .854701799724E-03 .911170429738E-03 .971368386256E-03 .103554176440E-02 .110395287177E-02 .117688129278E-02 .125462502244E-02 .133750167381E-02 .142584976416E-02 .152003008461E-02 .162042715867E-02 .172745079536E-02 .184153774286E-02 .196315344903E-02 .209279393569E-02 .223098779353E-02 .237829830549E-02 .253532570649E-02 .270270958791E-02 .288113145597E-02 .307131745331E-02 .327404125383E-02 .349012714133E-02 .372045328318E-02 .396595521050E-02 .422762951754E-02 .450653779289E-02 .480381079645E-02 .512065289632E-02 .545834678064E-02 .581825846011E-02 .620184257758E-02 .661064804185E-02 .704632400350E-02 .751062619118E-02 .800542362776E-02 .853270574600E-02 .909458992426E-02 .969332946334E-02 .103313220259E-01 .110111185604E-01 .117354327318E-01 .125071508817E-01 .133293425397E-01 .142052715088E-01 .151384075473E-01 .161324386667E-01 .171912840679E-01 .183191077337E-01 .195203326944E-01 .207996559831E-01 .221620642912E-01 .236128503349E-01 .251576299350E-01 .268023598124E-01 .285533560911E-01 .304173134957E-01 .324013252230E-01 .345129034543E-01 .367600004680E-01 .391510302946E-01 .416948908454E-01 .444009864253E-01 .472792505229E-01 .503401687472E-01 .535948017561E-01 .570548079915E-01 .607324660048E-01 .646406961201E-01 .687930811422E-01 .732038857703E-01 .778880743316E-01 .828613263903E-01 .881400497314E-01 .937413901515E-01 .996832374185E-01 .105984226687E+00 .112663734577E+00 .119741869029E+00 .127239451986E+00 .135177993813E+00 .143579658343E+00 .152467217267E+00 .161863992571E+00 .171793785600E+00 .182280791266E+00 .193349495891E+00 .205024557121E+00 .217330664370E+00 .230292378286E+00 .243933947850E+00 .258279103864E+00 .273350827835E+00 .289171095617E+00 .305760595624E+00 .323138422010E+00 .341321744017E+00 .360325453578E+00 .380161794453E+00 .400839977543E+00 .422365788639E+00 .444741196777E+00 .467963973489E+00 .492027335674E+00 .516919627410E+00 .542624058829E+00 .569118523050E+00 .596375514951E+00 .624362178096E+00 .653040508144E+00 .682367742203E+00 .712296963362E+00 .742777947517E+00 .773758274894E+00 .805184720483E+00 .837004925036E+00 .869169330244E+00 .901633336995E+00 .934359613161E+00 .967320436029E+00 .100049990347E+01 .103389578703E+01 .106752072960E+01 .110140241202E+01 .113558223001E+01 .117011194076E+01 .120504766593E+01 .124044058579E+01 .127632364491E+01 .131269363203E+01 .134948812161E+01 .138655919216E+01 ae wavefunction .474144406783E-08 .506985340286E-08 .541575132233E-08 .578031972443E-08 .616480878721E-08 .657054163659E-08 .699891930664E-08 .745142600451E-08 .792963470580E-08 .843521310050E-08 .896992991191E-08 .953566161847E-08 .101343995967E-07 .107682577284E-07 .114394804843E-07 .121504515358E-07 .129037029083E-07 .137019247405E-07 .145479756528E-07 .154448938278E-07 .163959086988E-07 .174044536378E-07 .184741790988E-07 .196089670056E-07 .208129457877E-07 .220905065702E-07 .234463203072E-07 .248853561032E-07 .264129007330E-07 .280345793667E-07 .297563777954E-07 .315846658484E-07 .335262227424E-07 .355882636614E-07 .377784683997E-07 .401050117229E-07 .425765958073E-07 .452024846808E-07 .479925411257E-07 .509572657856E-07 .541078390158E-07 .574561654004E-07 .610149211498E-07 .647976047704E-07 .688185908872E-07 .730931877234E-07 .776376982947E-07 .824694856848E-07 .876070425585E-07 .930700652763E-07 .988795328859E-07 .105057791310E-06 .111628643045E-06 .118617442811E-06 .126051199462E-06 .133958684567E-06 .142370548303E-06 .151319442688E-06 .160840153175E-06 .170969738869E-06 .181747681881E-06 .193216046408E-06 .205419648799E-06 .218406238005E-06 .232226688808E-06 .246935206820E-06 .262589548000E-06 .279251251619E-06 .296985889375E-06 .315863330384E-06 .335958023832E-06 .357349300293E-06 .380121692594E-06 .404365278232E-06 .430176043840E-06 .457656274142E-06 .486914966006E-06 .518068270226E-06 .551239961991E-06 .586561942570E-06 .624174773862E-06 .664228248241E-06 .706881995725E-06 .752306131298E-06 .800681944681E-06 .852202635532E-06 .907074096936E-06 .965515750589E-06 .102776143670E-05 .109406036261E-05 .116467811364E-05 .123989773049E-05 .132002085746E-05 .140536896604E-05 .149628465918E-05 .159313306096E-05 .169630329773E-05 .180621007674E-05 .192329536798E-05 .204803019711E-05 .218091655564E-05 .232248943678E-05 .247331900484E-05 .263401290722E-05 .280521873775E-05 .298762666209E-05 .318197221510E-05 .338903928177E-05 .360966327357E-05 .384473451313E-05 .409520184071E-05 .436207645702E-05 .464643601774E-05 .494942899643E-05 .527227933274E-05 .561629138536E-05 .598285520870E-05 .637345217511E-05 .678966096458E-05 .723316394621E-05 .770575397677E-05 .820934164341E-05 .874596297957E-05 .931778768449E-05 .992712787948E-05 .105764474352E-04 .112683719074E-04 .120056991204E-04 .127914104402E-04 .136286827816E-04 .145209013976E-04 .154716735000E-04 .164848427674E-04 .175645047951E-04 .187150235488E-04 .199410488879E-04 .212475352246E-04 .226397613947E-04 .241233518151E-04 .257042990132E-04 .273889876139E-04 .291842198792E-04 .310972428984E-04 .331357775355E-04 .353080492451E-04 .376228208762E-04 .400894275907E-04 .427178140305E-04 .455185738763E-04 .485029919504E-04 .516830890234E-04 .550716694964E-04 .586823721406E-04 .625297240862E-04 .666291982665E-04 .709972745320E-04 .756515046676E-04 .806105815553E-04 .858944127412E-04 .915241986838E-04 .975225159727E-04 .103913405828E-03 .110722468205E-03 .117976961858E-03 .125705910720E-03 .133940216999E-03 .142712781389E-03 .152058630855E-03 .162015054420E-03 .172621747481E-03 .183920965137E-03 .195957685097E-03 .208779780743E-03 .222438204946E-03 .236987185298E-03 .252484431429E-03 .268991355140E-03 .286573304093E-03 .305299809890E-03 .325244851352E-03 .346487133920E-03 .369110386095E-03 .393203673926E-03 .418861734571E-03 .446185330045E-03 .475281622290E-03 .506264570802E-03 .539255354073E-03 .574382816198E-03 .611783940048E-03 .651604348484E-03 .693998835162E-03 .739131926544E-03 .787178476819E-03 .838324297496E-03 .892766823535E-03 .950715817954E-03 .101239411692E-02 .107803841743E-02 .114790010986E-02 .122224615746E-02 .130136002546E-02 .138554266199E-02 .147511353356E-02 .157041171758E-02 .167179705489E-02 .177965136484E-02 .189437972614E-02 .201641182627E-02 .214620338263E-02 .228423763858E-02 .243102693768E-02 .258711437936E-02 .275307555945E-02 .292952039902E-02 .311709506503E-02 .331648398625E-02 .352841196812E-02 .375364641003E-02 .399299962861E-02 .424733129063E-02 .451755095898E-02 .480462075526E-02 .510955814226E-02 .543343882975E-02 .577739980668E-02 .614264250278E-02 .653043608243E-02 .694212087335E-02 .737911193249E-02 .784290275118E-02 .833506910116E-02 .885727302291E-02 .941126695715E-02 .999889801985E-02 .106221124208E-01 .112829600246E-01 .119835990537E-01 .127263009300E-01 .135134552534E-01 .143475749131E-01 .152313013271E-01 .161674098047E-01 .171588150250E-01 .182085766240E-01 .193199048814E-01 .204961664974E-01 .217408904475E-01 .230577739031E-01 .244506882032E-01 .259236848622E-01 .274810015961E-01 .291270683481E-01 .308665132932E-01 .327041687996E-01 .346450773224E-01 .366944972042E-01 .388579083543E-01 .411410177757E-01 .435497649108E-01 .460903267684E-01 .487691227990E-01 .515928194779E-01 .545683345575E-01 .577028409455E-01 .610037701633E-01 .644788153390E-01 .681359336836E-01 .719833483993E-01 .760295499644E-01 .802832967375E-01 .847536148213E-01 .894497971225E-01 .943814015418E-01 .995582482273E-01 .104990415818E+00 .110688236605E+00 .116662290534E+00 .122923397972E+00 .129482611162E+00 .136351204268E+00 .143540661968E+00 .151062666468E+00 .158929082910E+00 .167151943062E+00 .175743427265E+00 .184715844554E+00 .194081610937E+00 .203853225800E+00 .214043246447E+00 .224664260803E+00 .235728858334E+00 .247249599290E+00 .259238982395E+00 .271709411171E+00 .284673159098E+00 .298142333865E+00 .312128840978E+00 .326644347001E+00 .341700242677E+00 .357307606097E+00 .373477165975E+00 .390219264876E+00 .407543821956E+00 .425460294384E+00 .443977636131E+00 .463104252230E+00 .482847945939E+00 .503215855638E+00 .524214377695E+00 .545849071207E+00 .568124540542E+00 .591044292134E+00 .614610563211E+00 .638824122019E+00 .663684041700E+00 .689187452915E+00 .715329283067E+00 .742101991784E+00 .769495312006E+00 .797496002658E+00 .826087611754E+00 .855250238953E+00 .884960278595E+00 .915190130643E+00 .945907916680E+00 .977077391064E+00 .100865860194E+01 .104061057781E+01 .107289842090E+01 .110550804064E+01 .113846991326E+01 .117188365419E+01 .120591486961E+01 .124072521428E+01 .127635545327E+01 .131268071596E+01 .134948681218E+01 .138655919216E+01 End of Dataset avogadro-1.1.1/testfiles/VASP-8LiH/KPOINTS0000644000175000001440000000004012250371054017105 0ustar marcususersAutomatic generation 0 Auto 50 avogadro-1.1.1/testfiles/VASP-8LiH/readme0000644000175000001440000000116212250371054017221 0ustar marcususersThis is a sample of a VASP input set. The POSCAR contains the positions of the atoms and unit cell parameters. The other important file (not included) is the CONTCAR file, which contains the output cell and positions in the same format as the POSCAR. Information on the files can be found here: http://cms.mpi.univie.ac.at/vasp/vasp/vasp.html Currently, OpenBabel will open either the POSCAR and CONTCAR files using the OBConversion::ReadFile(). OBConversion::Read() will _not_ work, as the entire path to the POSCAR/CONTCAR is needed. The POTCAR file contains the identities of the atoms and is also necessary for reading.avogadro-1.1.1/testfiles/methane.cml0000644000175000001440000000344512250371054016652 0ustar marcususers Methane 16.0425 16.0313001 -183 -161 avogadro-1.1.1/testfiles/ch3cl-density.cub.gz0000644000175000001440000222537612250371054020332 0ustar marcususers@@Cch3cl-density.cub[.rޣ'r$`kxE<{eddB& ݵ*W^##OoӿǿOoן~o_[/?ǿw?-pl9zͅgW߻snG;_uuUϘ7۟wW^zg\|g?Hz ?9͋g}Gx5ąN6?־osZb;ݑ1bj0?wvۏ6.j2xj[o/{ۧ[]?{y^8?Oo1_?=lv ys,?ϘcOڈɋ.z;gūPOfywᛝ^FfeO}cˋӃ%= 崆l}4.KHOצB~4iظeiYb9.&>*,eN掼RCs凸 |1&?VG_=9xoFos/;-=b_Ha]]nx^#-a^cRG3~q¯ZC W'(Ӽ?U:}Ƈ{.X7xn߷µՃ:p_8 xiqL+B^dXfbN3{/ssY7y%Aq)W3?w#'}7[NZW'q'?/$7^xfїW\h7ψKDҤFl~Gnt]fW#DogX1sc?y`ԍhw҅bݻ:zx}pM$9t;#.~^"HuN%vاڱ8CCQ?LW ykէ-5fflN׬k㩸}*7>mqq<.|/my 9[ۏN֬yvKhO:}+[pm:;ψYqdfY:T | m}өu gIa0QI=7T?S/&]/NGϮ04キ%@2}-_ gDgI0DFn#}xFXQA9K?ck^)/(-DmSܨ'h1/?M%2KDdk(xrd?dƺ٠0 E{W{0'xqt$n0xFyG^j"]Hik[cyQO9Lb V_B/E= )'㈖c3iJsK xF ƯsEiʘAQ|アVZ!03ey>'Vkj{$S3Rˍ%fM+~;_P }G{{!gGZPuNi|ZUҳ$VQ܃Z\Xt o[掽4+,j.o2;uWF=l!"37@zx2!eH#ۨ|#}#/VPѼywPcwQPg:б?-3{Lz\kA_[Y hF,촬i5<ؽYwj0҉k5Yy鉸f+^Xxߧ,BQwdˌZ,*Up=IHc b1OpÚϛ)Z#x+iiSz٨Cx= K8hi6v_ttZ+ngճ:zx,6vvO yo(vX|>c6=٠[ȠW|*œ 7W]G6&>M>C?ݪ8qUHD9±F QW/z,-4|=;o=l#/\}K_,cf΢uAtb6bY02‡qJVKͨ$y44(TBSv,hz&';ܣ?KՄZFW3+Xpo"_}lƛgߏV(-J?an溄i>{hxʇI0"Ov{qƼ[[ְ}5V͍%#dnm} ;^oޤ?aIhZwh,j9/RXcc}Q_ۣvק( n7k{-@m}G'I ?»pDi4O ׄ3z#cmL'N3͔lW E 1#M"48ЁoNJꂵvR#]fg iʎQ>a6Hv:жwfJL.6qq-=#ְ֛X6? k hiMP4[Ŭtz֊ bߛ_Be<#Z.I =Cٗkqs"ȵx|5 (Nefs"ye/S}WQd_ջjտsR1VvVߣm6hg#/;jO2ja߳}uHVcYi&={xq#h8^<Oq,Ul3=F4ZfIN7Y͕v43v1?]95?EKd"iV$ړ!Dk)3.k]NwGSܩu9hai+Me2'p 4+W4g=7zjN}w{7SS)Sߕ֥IE\h } .m^e/ V>NVN#sDo1Bkv ]hW6`_ =5IBTC6aԌI'2 6; vMyF^|`Q]h>3tq 7ƑHS{r륅kJWF_TF=pAqûjN6ysOy+KM2vhԇyFTeKzz?0j,kzHmGR2_G=&1=^=-`3tN4MO'} cVhs[0-DKFWZ#[@fa=͔Fc1gb5jya"+O4^ůa39y^{Ə$:/3.z^Y⌘?Κr2-VV4j=w+,|Uys%aYIML^vm0KFkTx̊fi=adٯozNջPO+i% o84|#,Vxl[fqeɍ{{]k׶֏\{e+5o)f"^K] aGޚhw[}tnp7zfm9!F3ݓ-gM %cJn}MxQpmZc MQ4MnV44mbE^h_= #.l5[ʧG #lv~ph8 Mo՚52Ьe"J  yj6.#IOtZWX:bpeY9y|td?AO=Yժ5ZDh`;TofmE>o2q }^U!i!52-qp|1zff]&9n}iLO迄Q -B:4./в, נ2坬;m1Lo4I=q&w<{`Xgm[(qѿ4"8gqYh>ZiY60;WմFo=Ykދ$txtxdz!=xNh?G1?:1<ŸOac1լm"3Sl0TpۋŀU0ػm`'|KŽ BTiǞi\L7j\3\^wS? i=R[wB)|(f^9iCO<`Nf!O{- aiig0&0ǽ:0GvOvpf_W,i@Ncl[UnĴ4V61%}g&S|{DR(h.Ty +xͯ%z[1"{7c&V/fhNT;<~WllkbYePȌ`8=<c,4BM2z.HZ;}xN,v-ixea9QO;?Ȱ'41  pJzϐqY4xV9߲5/7r'؏Es`ȆFd,M݌Z@t.zLW՝aܣ&Q9J+RmJC,Ѧ6?t}R$zE/S6U8ZI8wNt` E{G{OO _F&بVvдm핹$ޏP> H{xls=SJrmuee^VQO_h`zcgtVH%Ꮡ$OmQ^dfVvsʏt,gq|mv,;J P4w,G~!i/U!3ww՝HLtaiCYz^P%bo߼u|*BXVea5 s~Ӈk왑~Ltgpff'9{Gofd/xaԚԨ C״5˙nJ`~D wǿ5gJZ_.kQ; !txUA}QX)ѨwM>z@6+]|ۓFVUvÓ e `>mA/ i2ʨ B.bkZy:NPݛ2Yu'J: /Wn U?Qogn ;Gkl{Gd+VU  Ow>Zb9)c>-nG[e;'p^?ȩ3oTo[.fvYbrNf(Y:G ao:_-n[ԑz~gؾTe90.@MZ}& >dݩy/@UFgŊ X`˙F}iZZ8wg+DCaԋ ڠWoI RXcQ@,&@FzBqdkz#(h)hU޳~" L-2q֬UN8]3Ֆvg/T A-V AP\)ۖ!=_ׂQk<#.KGrT.aQ&/2 W)Mp3 /M ʩی1^lL0W%GC[ton] 7?ՉnȸVH㮻'-?,2gD&a-YOa[|dq:KbW5܊=4y43[Ѯ?Z`8~jAJ?:~25ӏuk4; >i~0+ݕztT9Z gN/ӏs{YG#V1Ab;=j30v 6?+TWmfQmؤrL~}DÚ۟FdZc} +ߙ~\bzag_M)ALRxuH %K:>$ӧKGcF}Z X-n*o꭪b )-Bk3VS(ξcv ؖj Ȗ;^z3Xq׽gVf )'K,L} wU(j4eV(l!P'&YtXyDq>3{B1~K\DϓP~g)z8gTܑmV}Fdyam٩-T]OsTe,:tˌǕ&p g=25G VȓS&*yXߦUNt=+`#ߛᜏ|?720(|śSȔxc4q+oC37vl*ִ>mdN-Į;R;ZGjá2jѵFu0-~{G kFPoXs&㮃犕@4k1 .2je]V#xڝЯo)_N}ϕ!2=-7+Ӈ?||uh*h"0`^dVO|`SG8 is kyf{O= Rixc"TK9a#^ˌ{l DQ-0j=c߽?MԺ,6Fm?e(GLGm<7滯}>9^fzNWo^̀l#ʯ?.~_{f$$W93WuPBHaQ&9H D+ԏZ0RRdxcF d '[VfР]Apd I35}nfۯrnΙ|7|vBPy̘nڞ}@iM9_,0MJ7(r'h`$eb /P$؄sN3X-j\)uٚ&(uXbj1Ȋ#损١tmpYp[9G5^1z, WEẅD-zisҭ!)I>\LۭJTn1ic64G8O%+.`r y;}3o7s^TǨW!Cj4313eecL6<@nMܕ UG8! i@WOYe˳QYlz .AWZZas#1?r~*fodsfR;Rp9)r,A [=^5Ԝ3.FѭuZ iz2 9"gw`/W&|'ԡ䱸"傧?Xљv,1CZz9j]f,0vjY?g0Sc?,v"QՏ'W?.Q# ;y2a P|WUa0RQ"N 6"AӵƏ$ f_|fkkih6]4N"HPHqF@D.6Wh~~k{ɶ'&\z3Y=5B7 rN#QjI)TN6pXGN N~}O,}MzyՒ@wVPᑏ}0{#&=F SwC($.{4 Edl?X89&xZ?`ts3N`z&Wi=c-AZzDB؉zXoK.fw/8 l0F \c)G0N_u18 'V`-yZW+%F+H"4ݱ2MV/,+'[6?t?, 4lEG%3Xw `xpz?ד:N3JٝN UI{2̃D I:AMKNR[އ8 LgA=O]QY)ھG؍q <]蜏Ur$rhx]ظpqqGk'؂{~=,!S+!Co[[-;jvgP9F`+`<A',M`yޝN@hV̎=3&Χ0 ZYke0|.'N:y]d 0=J;<`;Qovp"+~kߗ>}k;q6PD0j`_ұ\9 'H mJ\՞ <]#gy^\`X)BD{J{<qt 1*w UL ґPt^^o197 H5v%G&ui3ƙRd6= Pjah2a#vkUK~lBF]DrۙE-@۳x-NIfGey"snvf ;8F麓ـv:s#FZys] +'ePl*vˁ.vzs 8[92=F&?56Znqfme g6.X9!}TpKػKOgcP 0+9QGܬC\o4lzNG @Y>Ȗt w "" D^a{7X Q,Z'RދccA r26hjQ/cᜇniǰf| vLOO]҃%ĚEi{P#n{I=Q6:HwdaGC5+|zZػ&4V0̇zA۟kfN+@S }ɱ$QϾ"Ȟ{%)y~hsxO6 Mg١ fm y|vCĚ.gG3qIMCB |Pyڮt(ofYؾ:s5,4PanԐf6Ɯ0H*O*b= >! Q.S3ؿt}4xV1k ȗr9ƌ(8=L,_@YqK۟+2=,}Con޳ -!MJиD@hWW 鶑$Ѭ6Ag~&(B}5 l,w?fِN e/鞧hdRufw(W>t)32a&dȝ!e&ϩPOR89r^6hOȊ8eFHeDi~)hDP/ˉ~{8Wg1ջZsXvFN6o92vO's7Z[LI/1-{qzivbkPǎ?r1&HD'=[ /ފt΍]o@aR sWW\K`Ҏ!Ɣ)6<$Bڡ,"&%,ʗL!zc%2<@lm{MUb|NuX;qN^yE(LcSba9V]' yxt[k[bCA<ϧsh =jEjQBg—Keb2*#o7gYI,u#t+C 7۸c'1xCb| -_q o*@|#@ :od =^wOyg3"j(OhN.?OwD7ȯWNJ.?k{/sQŶB SsACNL`kY V*4>HvXڞ@'xwM(Uh(^rZ7q1s`EguD !GNeCO"#ZtWl^Qw|dgv'^ .i*Q21񕵹ŸjA)~hK:LGq^jȵT"SF11FyBKډ7$fXxP_?1:'}-,V;^*{oO|:{.˸{("̂ȍK:r|&hm]&ཛ:=Ս UӠ2.y8&ѾVqЎ"ze3X>loYt6Z<r|[-Ⱥ[+?,c?A( %Z1-1*bjjkjbMKlJ"sZڛD4DT9kL륅ch$Y_CӏP=$thܳj=D7[tK؎U z'wf)xF8+8X4wRҊqKGԍD0A"\^ eB\kqu5XP*Q_Ft X Y*Q_rZH4~3n$ݞ1hWy8Ku/\7pIW\|IN"Y6iH&'k[Ht %۱ᮙ1.93Gu\hT Tº Cw# }яG抓|S[dpJg|sCV3 t^RaHfdcZ''W. d9f45}kȶ\PRJ%CvIYVyu{[s4ϝ 1+83ߙX=H%W^}$f,sc1n(h_l&ne~[ة 7V:h#NKJڬq+s2qjsz^vmE9}@/p/uyWGHgWKI}`[jaP7i/c6kmT\uҿzE p느E!2+~MEdnjJ{ÎCBr4s{0H{#-_|j^Ee?Mcn_{wMլC*VPa&Czv<K=T3)qF3 e 4u-9yP|t!>y' +$/14U&8!s뀊} O.=WᓝGkfz;iK5˨vbTrp!/ v vp\L0u;fqƖpT%<͙'M~95ogS^qxzNLijOQsWv?:ønВ'i +K Il"sWkA,y-kTUv fvۗ糒<[j.vτ"z1(u9=ix/쵣)S+V_NY-3;YOY'R@ ^đwbyt.9R}\24bduX91kΕ= InYhlJ PgDxd{%yN->Uf2%V!A^NghY<&F6@mS|05$@12AjNfvk.x\Ɓ9؍% %JU]@ˋ] c΍"| RbZގ)>8,upzI!|-Ǒxb8c߼w00u2fؿ>Ot$@!Ɩ/ ٕRV|Cq,$IZ}W혗 Ri]?;XNR'ff 0ڀ+P!ءޏ(Ո;ӿ+ 1!k|$vsWø$ sq D`:#k{jcb2$5gI!A4;s h+d怒ٌp`k1\FDNalezLa@Pp@}7Vz=9PbR/?]h7ن'9_A];=Jm"Sjj%l mW%$&r{DCkv3Ң\9vҞa־kH4}bЇ^y<⚖bJo|>S ~ǸS ^H2"'Cظ3L+\wyK1ph1ͳQׅd^-e uދ   ȥW,OWʳN[V|v>FZ]P h{R}HO"-`6+p*"\owK [m,'9TMF˕n968`K7c842f3@q{ɸƑ9eF/ZۣH?$.}aZO,9Y+%xFԞ+Al:Rt969EK'rRwU@ #z9yrFsxF/>xIͽ݅sl6a˼P6oex!Q&'Af7okl| A_jy]|rb{GĬЉ qS|N qJAX7Gog%v\ђ} b&⹕ fGguZ0\#̋3p,Wq6"smW{ޭCo5'i L@int W37(5^%-tZCT@c]v<4$X)mW"Q#of; ,;œ\1vUy^1NOsj튘;LW4Yi Cnw `5d4c` X 8lDX/&A䆬<%0~!m=2kx&._{!x6vխ˽ QHk9֐Q)=ϡc9+yFۙL˗B  5t m14p50*D3eSꙌ@1j@-ʕi>َw4w!$XJ}ʐ|Py iػiS*fslf̹F{Tb+)UT ~E ߤ9y}ٕPޟ AG$`]2 ilo4^;0s.c7XWʗ{D[6ݱ^+e->S6sy$#-|h٫CvD[&`̉ \u~Z n49 Nkb77`oT"E5Zk-,)}o!+Uhhd%B/vs{Eڇr4ZW[%팟h}ŏ@Ǟ7]_GKvio:#@,H<;mca8A q*f'Β؈~YQGC^w"|w^ R}Pβwh~cpnéX3 Dwi"{ vmN]C8cY bə^׭u2;݅l&-pU/MRn׶нks5Rˑy-)qR%yBֵX2gJ @&gw#[Ņ֌;oN4N:Lџ#hUVd;w35IX%v~s>+ < ovWb5pNJH4(H9 Sc8$;7<pEvʎ!<ŽYMmy[a7$eT?|GG=&k?cC56Ccu(ANȝK-U:fGH@b2Yh0f5Opna6tv`1*tɑ7jTb6zp%5,f8V񀪷*fi76Д 8 $`fHwbu~a+L 2lS×GPgrV'ZjF|AOatl];zTfL0ue_UaF=W'#ZuAM*SB*T+gԱX rUGNO£'. mE5PaW9 GJ~׋ 퇹3eFZXTH:nVU^")=YkMhRAaS4E@= Q#2;swRa6l0i h;eS*\Db~㚭FSޏɼp,^k8-X ~R/|1ZY̅ d [lڀ!:90jK$):]t>@nTcoQBD°x^b3]kzs3 HٚjOnj{Z`t?SR(U=IB湺.@-6Xy`|$wgKyV$+jm&Og}h;Ajfv?C4g qwOЁyA%Fr he:_ЩcT%Rod)#g9+N϶7LNNA*Ha /P Ûi%; i ɗ&9Vփ{U-5 a#5eZ&a6cl-0xsSDiZq>ޯP]J!k =0*ZRV+AQ]!׼*ۨpd*[pdEJȍj*HQM.6 uٓ(x>3KF}L0\i FPBxL9s fODks,v0OQoz P3,D#1CmN99߼tO v)3lqL=eykQc\BA)Af]kwrx]cG1*BZg3yOe)# _͊9MZO+Upڲٶp LܑTW`w_ep"=rݓ=H.*h%oKMf.=W?hR-;Jn.i,Azz@It=Ln$=K[HHc-/x܍zqGoI?IuiIك<2EmdiԜ%UleEYxGV2$ia60_Ov蝢Z꯼\'Oݳsd׬j̃%>H-pV8_Fn>Ǖ˳fM۽9oZZIN|q;2i3t,'TKZ𽀥-;sW2EG^xiJgz`^l%D3Ĭ-"ZM ڱ2wQ_L"e̱4Hٙ뷅ڍLv?l9Q! nt7ڊwLa;EϢf)nQZY'\+NCݎ8/XjJ){U,\$4n\ikZHIZ;MbfNSÊäYCy$̬1o#dTNN\"m?T5d?A_Iȳf|8>d}F1WP=ҨhW&؛QգbΦWAh6I>;l@ @;EiL"dNOޏQ/iԚq2jr_I^5j MwFa4z[5h[+=5˛>[=eE#qd<*`µ04<]gٸ$4n01_^\>ȱ[4jlf.aөNm4SrO?-3s쑍J%nH][K; Vlrg 3JeG BIQ@ӏ4G-@ҵBL~F8(=V nE`32Կ`F}A{q-wQ*}=1 ̟tr1ۍ)n4ӢBqY[8O,faX3ŗgHׯ>>/-24[=ʯ!V]HUkzcgհkorL>v7rQ6P뉲l |#`K\ NQ&P{&vߵqub1hQqDX8 c( c93?loQ٫ܖ`QMkfiNDhsmwO|k̈{}4-b˗jIA xY͌\HDSb8\-wLoz{'sjMsn9n@j1뷄82㵐{c27=ƋQǭa4fw1MN&-گvۂzKIQEk@nsF jӜK;M9uPT{JϫbCM7Z pʠm3H>1؛TvV>܎9OF6+kZިOeIaKnm]i*l*7})lbCA; ݨJӮ~6Hҫ޲y~ qq"?)^ZVB .d5]#e"JKX9Ǝ4v%l&'+31_yYzxx|gpS1IKݢ{BD!N].yF3N[ /4+c4677w}/ed:f2c6Ac*Z#C:n6+) s4hήFyFϱ(HbNO}m[iፚϗ~ f,fGfʛAЦlSj釚I ܪvMF̭ZmrZpƫU!c Txm[Y~,Jl|v7$JX&FA@ ӝ߉ZpۡZ)iϖޙ*>mժd6r6(GC-Jw(AVkk@l6|/.b#HԠHnņX-N $I5Ŷ'b}ahJװf`F;S9'+KbK74)iĠ+c[ɞsfog|Wʽf&0SS |"f@1car|$ƆHScbE?fs0+鍅++eyGiwF84HƜ_f:ɆɏTV%ElrG f5ui~Ğ1%=ȁ*&uQ_X,{􅇙s7Z֝ *ufYy] yF<Ƣ︘"9D5tOrx9SZ+鷐8ͅd%i&đ:g&2E qs^jv14Yլ<\'Fb=| 1+L4{uŇ/0-n'VL@߬ {Bcpw- 55CgHZ;Ɛh{Qf41|y֚(:xuüK%LЗA}ixZ3E<eXNo FXg^ڎ#tNmI8]=eX,KkEz?WꦅΓ ?Oi4K79KlSZ`1-I[^5ȩhI?ISf`<$A& V1wj!|#xU㭕:-iZ/3[>I7<]]Iǁ /~rm(5YA$iƅnPdHFF!W7"-γF+`4ri`i7ZJծpFN9Y'2kA>GM/|SpO$?iš27 eiwK017j @Iw0D"'PʣCckPmHL5oאNNP:bӷ0ΜM% ԻL޵zx1/FC/Nd{O,XR3G|QDlV khЯ#\rg6-۰oʲWz=U8<{Ə%\( @I *|";46EYw5&$e4'qExZlp% x+C|jv^szjp+HXF{ :kJSḫ>nmgu$JL&ף:j8)D,@P2MbGo,~^c9#jp]o < 9!C:{9Y5aAz礷̚iRh&Z~sh(䄬˞0`TRy IkrUgLw5g23E[E g"mjX,N9eXP$u"ПlvT(Tke@H)Ȫ_:h0σß9$oa0ȹ f9;GT;Z؈?]BAS,b8:޺ZD 1Eyvm_%l \/)NƆ@9gl8h@59bI~qLWGZueU0sw3jl&M WZNJYD:GUi3 ڄt^{t$yhgtl@ ^HL )c)>:P Cx8P;D[1ԗ5}7 w$˷$$x㟽OL }>>Rև"Y_Z:VvbM)*;w?׳ʞ/S,7pjKr}Z3N""T^K"j,|Ǥ nDh/Zw/ʇzZ![`|&3EC~GU SXоlӲw4\HV@?:>gQ#*d H}' JN1jSn3C9IJɮ%|&#".$/;xŹ8J 2z B= p!R7CWcb&[E`tOh۸9bKI@}~ĩ;?#qvC-/`S`VlF15&GNтۧ?]~݊B2]hD@$4F.7wkӁ>OP>ZW1n-7kZ-~8D|q9-kǡH(7 I t]ecYA\]۽bjr4]uAkƬ[6:asV]4z8Hx^ϗ*cy$F&:QnPpǽ&'\j;/Hm&,dog6 ~Y~G `XfS¿jYpBztɐ+CI ]ܪRB`e!fLˠ $)c>k>rdi@pk. ۘ5m[5,vy9 b4d9m5~ 넹G(C#E#p9XIM^4L˨8V.qBcgnVZ3Vn+~\ |Z%f׽w5^: #nF.>Ȗ}a\q Йv<12=G ;֒AiLI>J1Z!dlk}O(`y FF . g;[+zdLaLRtUoރl꽛l5$!R،_ҷOH](D<=6, %h-E(c)ҥ+ }8ׁ8K: @6ECB3c9'Spx0 4ʄbk0Ep7:BiNKb\[ًky#e^>'CXay.-*&;Vӓ0T;69ͭp[Z!_GJ_l۝ɉv3~I7r $4Q BiBx1]4ƙ9 ^ͤLƺi6BxFa!?>Gʹ4۾կK4!-WգP !'a2LVM$\'E>Gsl$G_h0F>;NO}C`kAΧlDz Fcs̤5D+jay{paǃcn.Q\a8T=7E3>g+YmB>~{OY^ >t *f$=4Vk[*\> 1q}|voY!YAs:7,/ {#zHX i3ͽ('=LㇱcOq80fP#֪1{ viq)<佹ѽUރ^j呻l*. f%ޛ5F20f7|E-Ӂ/A4EzG it!.+|qk&UwN2x'N ;$b`)S nly,OJgEL5_Zxs5LjewnB=(u'%΂[%Noޕ?Lɟ5c, J6JШ^ eepE^GȐZh`#|=F LVY8[5FD\vn;]+X )=h\{^%^Tv\Ieg˿.D΁뺙qR2qfiL1 zqX'\G;/] ȺGL4>34@eEk-!o9M+$% ΄YP-8˵Hlk/g,YW Em\fD%G\3Ch-oP52}tbV$G $jZpI=zF4HVM #fE$g m$L-qfyspF~jFkMG66{j!+k20gq`h Y?-5G@!$.$'+$-&= BS{ t[0kDX׋^$(J]ε}5̌=[vv?lMz~d` U1e't189`s0&mF T%$`-z[>77$eč>osFT<k՜3eιn]p^DM_@TIuY$-PquT/<n7րjkn@CA罰}"0~ÍP"<&}Hlڙnw)059xD- ӄ:<#'AGB lGVg}ɱEqFVG`^%0opЁ\L&{)&熅eWn/.;g1>o*\$gEXsA{Ms^^Y.Fn>ɶvX o$d81Bl}6 zH![/PN\tId;L .;_< D'4ف#j~52ZgiXTD,؏F Y4JgHPS-yv@5>kݺ;67($uMLJ?7'SpXYwg_ya o/M+YuyѯYmRFOfHsBBf7V7_ H *nJ% ZvbA^ȊYc+6HZò@il`EXϰOYH-}J ߤXvڣc/Bg^hS'JXD8h#+ D(Q(RXլ7f9hܓ69CϦfd'-%Wy؏x}>fJo*Nu[Ns _yҷ낳UQxGl?\0]މz?7jOdK ƚ2Yy~aԸb멏QV.aOq\2$(ƯޡP)?qFLMTY)1lZ\#zZӜ9N^Zټ/Ccp8̶Wz[>xQjD!_6crvX3A,Z8Yffl95~p0NE!0}(E wYĈhPP=׻H?$BoNH2[.KMT˟ Y֘A}wj>vL37xAo}hDFrd-wCկ3M?4dS*y /+ èER,쭴ų择4fO ׌8Xƍx`KԬ;5=0٠@W_o%FArKF&#yXI;'3Я9pYsbDN?KyΨhEǩ}ENfbZ bI߳T5Jp۵ [@pgHGJMU/.N_; Mʸx8DdY#N 5y1yX/pbŏԏݠ߮ZyDY9WL%z:rc! h#hO;5b]M[v1?iLBhײn'&$s-$+q8Dd> j*1*S\zHPKʞ#şם nLW(F F*#$v;[QR3=0h1QqDxg9"p2GU2}t6cp{;-wtVٛ?ih)(  Y^4;&wT eZFg:v\R tLo3Zbe*ǥll?4(Q(؜~VP0G<3)w :$[@W{EE8#b ϸO]Q"q1^g9Mb}f %? xƑKHGC*9 E5r?:t 2BM}X"8M"Wsk;zs2bjYLB;|;3|lJ.=[cNoI=;@0j2%CS`L%Ȗ=Dݳ>^zVZJ(Q|$ zE.$94~;ٽH$74ݑ,ӒXtNq#t ܬ r{-oS;Eڼ0`\Ce⚾=N@40PamvjP/l -Hs~I@4(F _?!C1&&2mX(,HdҎSupnʪk}>]ma'-4DLا5F7 nvYo1:VŬv5 vKP:nSPܜ6{y`FE5 8*ҾKG0NpϷQ |8fˣg=&[2NMv0# F.^FIg&PHrvFtfrA[p۵R #S021Za\Ϝ*/K ۼ1VvdGu+j l%1EF=O:)#2َ=5hCo2Bf+L=/_CX,6nꢃ8g?ó"x=[&Rvl-q5&~.=N-AQ f˃NbY=߯WZN|T׷w¨1^!)Dl|àʸHK)Δ'xu3U~_{!n1unjۤI+a"-\diz|fhlހ;+P] E+ P #(JrTTRw7 ۬ҝɺmSTU-mc= #QFW`Ïrs[K=w4 20zvl 2Dz2+wmQ t>9dI7vgu{`l<-3(> ;ޝûHQ"۲dj{s7߷8/^ ҉56~7ﰩ *d퐞j3<̼l(0'Reof˕h%#t>BFRMukP˨fvX1ŃvA.|j$M5Ϟe#0q]c5s2(p||E ۿU/Rx5F1!_lLZ 11G.H| uYj4;W$~Ndm%m[g ^eaXceL"vEhqz~: lYYZ X ~FW1N]Iv+NRӷA@+mAre :X%" !)>!sd]|Btƛܟ(]iYk9:Bocf^l&ScL?X爋#]\_ĠoyF0+.[2Erz}: ;f4I1 5B9Wjp:v ?"A"[xgĆ'Sy Q%EvY8Ȳ2LVߕ+k3ٶVAbv['!tFv?:?@Ɣn8 qAcWͩ&j=SoؘW|vBWbubngd9uHּf RѰfe'$/p~tFn`xNYn:_9a60=.0^uoZ2%`ZϺsi ؉$7gϧSvN;vvhy]ї>GHG"FE6 d$P:ʺNkwl"Q5 1IֈE7dD^0˗2#ШB4KwYBO<c;$f7XUF:iFnԄ$ c/.Tb=GG$}ͣ43\ {V@`,\iO;'(q>*f;̐y`eI'cTKc_3_#[;lQ欼B6هٌz{m;#[CDE0`C.vfqz,l8C)J?!ƛu#N㶨|Nnm1_ }Ԅ0<|& |cy+G;C0z#svN 43-`)p]DCԄ~jtmPŴws7Qwn)!]sKj)D:2sF:CnL<5rZΗ ld'n;s s^ԍ`{&~64лWm,\I=`P~ >(^"5X yDs33"X}^@ x\^/V _\W1:)kבs&hymO1g4tF˃ z5g߯էWȩw p{3'Ԍ:֓lwVfqUFzqBsIy&[mJ?NId&:QZyZ9;/L ˽,d䤑Lݩ2Ȝ E#A& Of$.!u(IG-=Mkf6,(V EFjԻ!$K3 J$uU `qjA}rZe0rr*=wDZ :>ņܣ- Wr s4ju~?*y F1ēUfqZzEmf"(ҀI 8sM!3koyxh|F٥"ҹ>3FxiCa4f=e\QeDބ<%Hâg)ؼ}|؏|?Ϋ9>`9D>{VjEOxi4&r@-Bb/681 jQ#xhyҷ4I|ϐR![%9u8hU<I 1Sl6ʸB_T(-rjEX"3@Z[׏ Ac:1c>F@Tsl!Z+蔦/˧Юg\FF/ј"pc!߃͜).N:PF*0i/RPB vr2bX,fw}31}4diZMjkP-LtS֫;T+tyq3~dz3K_qǔeNٽanfW<"oW &QV;բ҇?7I)7Z7mQjAf]_فُ;F^,\y}|%N}rzQ|7`e1~lSݍjlF!o8 nD {@Td]vV/_`|YHj 8-CZ.wڱ, Q5Z+Ԧ0|6ɲ$bg˜PD*XAIZ!HIޕ{YGlRfSQ]6y>CqUvM3sm^L̴cVKRg]QK$+qwjMRXtˤfB4bg&I]n,kil1t…%EʤCPCv+e^!O n UyqU Ya;SHai7O>! Ú7ćsxp"ų|8R͠^+bu"3@l Ni jْB#@325]5Oj}쓠 ,gJ\x9)+o=)zls{Nw:kFL+*rmӣEOY﹟Zr۝)2*.,:mc `YB ^ۻl s0JG_Z_)ކ$D0 Ѿ:9ˋ=W"a@-}`GF\T):3΢0fo= Uq\M:aA}ۮz6]P0^Hz79BG `4[ҎHqoeȕM1=5Nq&t@c|8{cjGPǠ ے4k4Fפ| p㲾kO3J,B8Y8œR8y `'Jgp\{>CYEےia{.? <}Rsl !Tio@@ V9r[3! M&ܭӢ0r/x3{@N݊*?聅bnLJC$b1.eW-g$"3Zرz+k;VKL9ZΈIX&]&:?:%%='1gOb>1;$2F-,|;Y8z~Ve"B~j4lъ~-=عb~Wݽ⠪~k)ÝnΖ??! 9z-](tؕ:Fk@$gPKz1$}`1HtN 5= fZtz|?#.LI'JÑeBW&YI;r>958LzGҙ*݊;Mӈ? 1|;zh\3c(rAV a$i7SŦ`b<+GV]NHZ ycm ڊ4[ڴW4hBIE"xЖjfOvyxf˗;?-ObN4{rCew* ǁ>FӡGxE,ӁhVN'\q_ӎ1&Jl1#iȝ܃d~ܪTBE?daEe'Q;; 짹@ ֲu6HNTTho&=wc} _s.dȽk Sa,p,Kd0v_a1 pE%waj_:r.ډ ?洣!dW+$=#bQšC_佌Q28TBcBx#|BXϴBVn^S6!& 0XjĒ5Th!,3`H)E6C#zE,%N4c(N/[Hdbז zb  x=,8e/?+ֿGԱ_ K@cbx3(O6|&u;vC58= \,>%cN1|Yq` 䠜_!_g>\?A4gV*dӓm>gyeLCMpIMv,[r@#Z`Z*?.jIq*:(,Ze4MMJ2DƼ?:f`Z7^t?$ 9Zxq?zCGJP?:yREZƒD1{5O]9ͲcFɲeQ-u19 )@țd,:2%K׳82"wpD5j{5$#߱zqQEx`i㊷'G>} ,SN&%Oqobu(ɹH3,u'`@xvxa"dҳDG||#?'M1kD]H QSG\ gH [zCH KREn5DnۘU5\EL:p<㟱flQY8ww3Vxa=RИ4pD$V%GzEl%G ,ql07䴏4N_}VMNQ_ bԷBM40ڜ( ճU`#5y d~|}o~C焅Z>fDsr.?0z9d~u"k`l,L|Riҭ_ĭT3kN ;6_+:;`!ד~$68&FVQ`hpP;y f$γZaX7&eO\>;L(<tW<#kQchIsQn G>fWCcQ]uF_U"(:8ޠNᓂ~ؓcYm$ ~;u}Zj1x%<)h _o[guum ]ؘ/,HY;6.s|i GhǬ8 жȤ4Q7,d?CϺ Dgy$ˋHC.r#–8aiz#_^@xw$Hu)G͟lƽ6qvQwK`[aI?28XUz3RXmÛS74R*sx'ȟn->1k2cUUbJx-3·ܸ!r62k>2~:KhMHu߬#犷M~l2ypdis8=irp@0jKGeWƿVmU&_<#bNJ 溟+7dLqrՏe~1qv?UGk5z~;`B&BIzS%n!`G)Z&fX8JdDZܫ:d%Fdpq7Czh:Czc O[HYo. >F_FdZ\=86RJjXqztUغeF8e1EɹvP~iwz¨іōyeh3:2ɳ|v:wqǯ=s#7g$a>60xe//<* 9i?sJ㠋atKpii-=O 㑤O"J&2 ‡yl]NK'wu,kLJ LtwvN6 $b*sa:VFRy ~cϳKoEc<-Yv$769B >fŋrCL!b Goelh+`s` } >홧gG B_XoV?T)s@WYVX >DS3(j$H<ޝB' vnCK#Nv<-ChEb#lO\٫oۜ- 7^s@Bp'O#Vm5^0q_V^<5(lF+Ư=am>hVȡ'~Qe+"\wl)pό5{7|5INOvz2#,Lec0(mMLuS/It2,c%rO>hҥ 4Wx``FErWa2;qsp;[m(,碴x3~Ԏ͊i#/OcZa5Fx2Sao,eoPrM[%:kK~pyd;[{m$ vRV`P!TF rW/f]^2?/"txk_knU̍BJg3Yjʃ/:W"Kzj,W$jqONKO =ک^#!j-GSR~?'Aֈy @n03EVˌB~Ȍ t(h,CZn`3Y8kYMKHS/y1;37:9H=u#gAUL?0%n5" 8iQػҨWFmh8 UJ!'blˡeax/'y5=e7剂nYPb%[^"5q7 ~#{V y4p7s B\38b,WO0pɫU*{ j4< `-9ˡ_Mksǔ!`+,^ b[>IX0>0UF=~} Rjh Ff3JP9e':bcjZgp\)5U;Ly;t@M]FvǨ3B3Sn+׍d;o aXc<$z:ӻ,(%9k}[!rUw#ЎO~f֝4~r l}*I6jwZWȍX@6km&}f׉eo/o\CS̔GOrUF L!Ds'p7{Zao K>uj-OYsAT ջaT3$Vil\F[y}.%Ȱl4GeVnx%ҏYř$Oа=s:(\hJ=+\-lza9ZzS-R@.JZĖىjs4agbR,Qo3-(R tG$/F[_n1$HǤErF}y?ɽ2eLE-&)lFƺHݗJ38@FNlD#/IyY 'ƀ=Y|{pl ɆOlabYßY 8ם|rͥ[L?0}>C^Nm4 Lu1;Azm"N-OD^@;v/E@߬.<:_g6^{dAuJJ$+XY]ba Aq"%_SljƗE=/7}ָ&(b̘c_5:+XhUɪfǶT71kr(NTo{3; =uC ZQ;Ǡ  6~(-'MLjdH']L(fpuZbVCkԠ@Ey'TAZ %d6MeFay}1-Ǜb`~!:|@9;z0g~RoM^=O$W]7'M&|@AyF!"N?#sۺ+ QPfV]:x`*<!}):[xNҩV=c~#OyQ|<-ц04oV3⨐ ; lojZ%*6[s-hXTȼwE'IYoscs0ߛ~v}`]0Cy%f_z 5ZH-HWcB/:i$oĹc\s4\W{"L gsjs3V Kvx;z_3$[ǬLQIB ElRHz ['Y^\8=֨BK8>OT>L\Lr&3T .xS_]>kiZu\ߣOk˱#pψgJc=^cĞ56v3-$K 罵=]׃?hއ 8(@E,X:pS|wAzCX1]렜YBoEdU; XG[o{!1<\5-Zν`t^nwk;3 =U:}39¬x:L*I$" ޣn%i-kn; SN{Hȣ)7Lpf<#/FIU$/ Pݺ+ >9#d`ux/rZ#1ag[I_gK-Z{U5WեPn'\ Mv2q\"֍ pON)+p0 b {2,>NWRrĶl ;9}9z^ t+Ŀ>2H~CuK]u +*=B=cxxV{~>CSݏ*bN^y3꫗d&u(A-^MOLoL Дź2zD3[HS mB?H8 YOvMèU~UgιG7E]V;K,v9ep7_\+V7) B٘h'.Lڥ=ڮBm xB-Uijҫ>揣G(m9GIt@CmE;b4=#q =yB?=edn3sQ2zlLYE {{ed3%owSӍ9{'tb E/2LoJ%dvsrߡQ3bèA%Rۚ[<[C:V1->J֙::*U+4~Ø7]6q`i]Z 6@ Ű~xBN3 >C_5oZN6E\lhǧƗyΜ_eW? ^k@1)vOuL d|2N]BJ|͝.9wJ͓>g?4ţ`= M+/U۷6K^XCn;Y=w .vKmrg.GZ鶛O2V6 6&+Y. ȥS/'Q[vİ~7ÑBui ^.v(7PjrZ\`oQ}h{!)- Vh-ii#TZ~!ϛ?QW_J)^ΏI=*YTP\AךOҨ7x)wʦ[@+HgSJ>.I ͔Ch~TyD옕 t0ZyqSFjdilik bh7s4f|3}!vANPNQŹTs|ӭxFύz{>|;Ͻ9D,e[jq}ZoGRs^gBeEdh+%!uψMr'%? ﻒ#Y#F}((3lBz#z37rN0 ez$cHa α% x/ق{T^%5f7X՜Ǘ%z0/g7wZ4,a~'h9Y&H"̍vbL6 ZxRBbQDz)XEl %岅ޔWS{>ԋ]C6P#ߕuLtdڄhqP~$ p7Q1=RQfm-+Nɞn@=^z4vEHhBVKuAO<CDcduNAy`Z֌lH5Xaxʨ-ZiwJm4$Z?iߍzh"4}|K3jjWYiv3 g#Q뤦 )MN޲Ž\$0Z-_*9ʹ55 w`+9_Uv@ LZZ cG I&EѤh_ 7˱ L?k6%$ҠZhyݘM9kvBH&ꋴFB9)%٤/.6pO}Lc31Mr PÛFMqL31xyanWz-TWy-~\` Pg[/-􈬱!!{Ӿg`I;AȋAU$"ߣ\Sj.Ԥ.BZ zo ](SËܗ@z+odkmuj=r2ɗZ>#NL42 q/Fk<=蟑6auqذIsbg><}܀ףUD\XM@UڀRHVa{!,%!yCLlLs_ƛ,^(UH겖}Uk,}Y(NDdkF]:hZԂh8 &rhf6) -&$vmMYA+QcRm9z[+b^aF}yzgx-ܶBǍ}'VDCga㘁!f6+Wh"x 7 X2Y>\W#r0gDg䋑*P%IagQER#HVFZg{A_43lQ=*+X#KpS]tqLFOؖW3IgEz(Ư>U"wGתflf`^wW^jS_-ݻA ׋ϮG%I$F8El>4egr'kz?SI '߿ZaX@)lNB0xw 9#1f VAR~?25ٮxSӻ=E ϘxEnQI+V9TFٙB)4z36aN8\[&=WX_gg2D5_~8f}ҏs7 vPY@`^-c۬ g)7[Nf"ԝ+YÉB~y~@!RdD^F0?;rޙ~ J,ِS2W+zYhTA=J]!gY117V Z+#>LBIL+?4ީ(gMG.zx,Ζ#<қsǘsx(ڜYIuH>vr*b4j,8Jc"F VI.-;fOvH`b_ B:emWQerK7O_ X$,|oxT酚>K 8:xzM5  LM!NxRiWbԻfhk m/ 'y9 Ѿlh806e} Ix+MRޢs4`F,bi&y`ŝi8s[2-\˖2|b.uXΎd%~jޭ@V-Ji%~F(+Oɴ|`[鶵;ܶ=ݶVSȁmyRQߓ[EfYm|fVz)Q_gl_g. SrJqGhiۮ%|=-zM^,dgTZ~n,;P)z7]p[-Cqݎ #vn(U>=~5jբ(5[њ^G[[V4uA dm给J[=H{Z%0FKGnScr0,8#.r{,;+fz8f=& aMN|׏X7wܷ:+[iyET( z[AUU,yIν6;` |*vmBBqdS^R3lxaƑ]M8[$ v&pYКh!4)-L6pZ3 T/(fVE/[ ?}-6{ q4ّǎHhq^5Q'F/dNlik3 YUC7p=>3laC*y+\m倆bƏN'/F['ISdG-Cn> SضΡr߻4wTo<ϱ8恝J~z6=hǴ-04B 5g)'wx1V 7]4K],:+V}T ઇ\x}g4Zq*+x1|>C^5&,*U@S5+B);6v췜؏02/yӇ\_0"PTʫۂTZyy$ }drQ87BeQrs-K*tY]]ɂM+\1cDB<4ҡt٪y#c_@l.E"ѨՂ3{q^wm \^_pS'drZ?uQ"C0i77g$`S!B peyH nl/ )l K0 x $mEubZ'*b6e||q&3@x鼌⮬Of1\Ki72~,p %[nCLWYkZh'tlɏCbo8EMKؕ[Vm멯}-:^.@j-|XN) .=X4EXw5_RKsE4c,\b QtoFx燃>۳s-+e8uHs0g_jCMHoi݋6NY;^*)@r9Xcj0>:-c?M`OT|8 mPd`wLSY0ӭi9@>玝A}gZl/X0a7yg|\\EsI&Ax+`؝+wۯ!>;6Y˩L! :Q=o⁾y&E}!'b)d/t;$rb/tVT־y#kÙ۷dX+kv(kqEt0<^.7Ǯ ˋ?]6WϴApu +&GTp_X!@&䴙ɑ]Ѣ{rH:{=}˹&S,m8>7>*r\BNwqwt5?lɿK>/չz;5##0k!%Ae{gsk"{ah \f>r] +y4P@.?!Y-@.<@慅!Ij"4/A'\M\1]~O ۸RtWrpZ,Er Zw& j7ܹ׷w07Zߗy"@GYd|ԁX@pm7T%jk|nLrk*cpu r)f).AVʮ9|*gp`4C Cf1qخڒi:PI(' tYZ7-|I0.0tC) jg&vGʗ*/.#7GׇGKӦ|K{!K#~wX~&FPS1qm;}=HsU۬+ Ed3zp k^_DOGq߈.1Cu 6qWBOD Z}VWi`:% wYN q77ٌz>MQSÃ9%>dK9^yFP.l@e:']_/;E+9"'GcHzl e0\)7d)WLt|.ƕU0$ d z$evhD,ۉ9&Bi}N zY5ķ\@#FHj@Ifܼ->(~"~b %ܹbu+If+`B!6IGvL.+\nI\In!]šBݧS^Kp|XyF4*2 YO*m[ťP'˝OlƎoaN8w=JdLyfw\5е1Ȏ8rzRH'0X^xv /gt[N`vrd!yBU BSoD2lA+U4hwٓ`"l/])7I^H{v{/Β:)-̙BFvM32 6 4V;Ta*Վ*(] %t*(@(i+u4ܩ6@X7|tqbՔw;{ﻢ!/T8"k%V6f32L?E .X:il;3sHyֿfU7{ޟ0fAՏm' \ƌGۀ.} @*Žf^rOΆ7E/k/;?XYJAB wg*ߴp}`Ym;ias5]PJT'Q6'>w۾8mDt5Ȃ#GLO f/ݗν>YzA/Vc{=RU8iõqZ}1 0݇'3jqE{2kM,*ݧ2RB! cREMhf~cH;{#Bpmp NOSښ nIʋ А K &9Ν'x[ qP۝YbB8.Gɸ셷规 9M-+Șj {9Nei.*[%it=bؒ;F࿦Ya8ÿ9% )hUV^8~ HzfX'ۮW5U%n뢹DzFq{f& J%ƉW OF {4}v 6Ҕӎ7Wx_ !$ dJ",TBp7xa{1tx[]{>'RRo򎅛AhDz͂5=-+iu|ݗf(₧k20V>kVT īሜL#g$Ay͗q[9:~qQc\7й{$^ϛ%͜LvđF}Inǭ#*;B [+Loʡ'I(;}ߞPaz&xgiX IJI?6nKř#pXA8 #0C<#=a O Iq@lmV~ 辁@aԘIYSoHAq^A%qg3I:wb GkPh84VHM+jhk1ILpX f(%8r S:t 8T.)Hv喱rzJZbqpS2Yj`'gq̈z8fB=ng6zn~q9?/W2;O;Z6_JBMNOZ7fjiۣԾ&Sao>n~!Ij 58 Ȁ[t ! 2]4Q%k(憷ŽWfu=Xۡ jQٓ(B%{G \ =0[0;SL;M>Z66x\~3/ 01 sFF฾98lqYW 0;0M+N1@elQ\\a܌Hz22qb (T=@@MD*xd˰J>~DA W i3lmJ]$ K7T1VE*|wI0)}dss"R&0wθ >5տv/M B#Z|T&%b`4=,X~?/&vzt%|/kB!e}-,ěmB?:6F~ f 'LFl7v ږvLt A[CŅLx΁t7rn.drwpg+t(ٙSaRAF"|Ԧs1-BZǬ5ߜQFB=i:GIo戧 tUxz4Aho,CNckQ;RcqcZx_jK"?ݻ][hK'!lO-Dl#XU˧=W֝ p?=Z:s #u6Va0l[-ObAm*ssEM{w]Z3(]tps4΢xsʶ5ܱI{K̖.^oJ&yT!\܌- ؄:QțF: !fq<]ǘ3z9GqMQ~PzH3.nFf=3D&6J3>7H;m+0: uA͙ R/!pT%Nh~UV}mC ,"fqLj 5,n/Cg5wæӅ}[W5 8{{XBQ27qa?sەk;y!0v/4I7KyIບ|`E:Rȴq Ƣƀ4@.&|&]T]Q_8 4RlϼzDvnu5!'sy@f%< % Rm H\khO.T҂9R聃ASf.ǢN8㱵(#zFsnt MޣC/A/Z9_n'QWpQ; ʜiqW4"=K5r+M6Oϼ|LᰘCIī/ $ e5ƥXQ[ s_qDo%MsɠRw 5Pp 5$]+o*P\7!_+⽀Sԃ.-ܘcj <R !`J` |+%D-u Jׂ%˱jD_eib3}zz"[wĞK^4dEcR 6(8Yl#&~ M% Zb:#]dg~btFEJ1X0 0V4A?xNk6O֜B1`m@of6 Iͧp=W'G˕TI^KX01}9 <)n]%~.zDXxF/׷3\ 1.;i5/|trP1fM}%0u~h}`@qd᭸"]ӄoNTo/t?=FU^ _// %Ho+!FxњLwP4aԶoMq3ͥk6y)JeӨ@^-1\}EPJտk r& NI=)bפyUo4emrEs5*;c?CB3j֙Zm}f An!,Ap`]lEHG9~`ɔtTA1@Ytg4Op>{y7lRa#(LRh͞vOQe5\S}?zmsIIZՍ nymM X`\G;.+] nۄ?̝c~0d7~ (ȴeW'8_w MUq̘qp/g["/M&}KR=wU62}zQՏEYT暁m8 G8ΚmQ[8Q"S D >chȼ ܜxo%RsP>sZi7y7jlfn-b(du%1x轙3FB M<~6.[dR2boD|M6ۗh CC}N;!Sۍ]Zqd{^OZ.pmUq%O(S9ݔxBp$Yuԑw7Z ]̵kK앙yf)V_T&e `B#ZfJ/&orL-6A+JhINi]IrOMҷR pˆI5 W^emȵ득0Bl,۳7umdP^qHccqjP%yh6Uw̦P‡>T>as\E% &czMR# Xklm{@S |ǚ$d7 /°s)t/MѰ_d3+'ǻGMfgԴ]mbQu 31$LĞ\'T%6yu sEq~Qx+#' wlzG%< E{4@/6栺_]A5 Tor[xCU'T+;)QRUH5hǺ+C)mAR3Ѳrd$k.xN3f>s6bhh#ph/6_${q9Za@Ѭ@AU1Ε뢮WmV;Wa2+I[5>Fi[)Dbs^*ҝ;oIsEpqS4W] .rsǽE ? ɂ "P$HJ^l|~B(*g j ;x1kβC(7FMa6Jxj yfHmM Eu@Po3sao.3toxV?^m 8ğNل |z֪s':?K|Dɱs%1[!=cR(36D~ʵ%o3Ь I9 6?꼵hNYN~vgxW^<lB㩧ixg 4i Ы%4,q+H2G`(ꁾ'D&;ʪtguUSv%gl`eIN5]8>mp•z  x!u:ڊ63FGor10Eo}-L+of3Ʊ4j(δB黵N+\5b{k3k1q-QM}9rgf>Ted/Uf Zx%o7Q5⠻Bﮔj'-4}oꮭ[J޹Grh;1󝺂 Xg*Vr@9wKea9a|Pqi <=Ϝ>G1_X -/ >V@nhи<k]#Y1p6όqWFQ.?|[ud^dG3ؗ^PFU'!~ſJ ZؽbD *#ohqϤ;Hע7MEx@4 y{ȭߺb"z0Jz[5+ƺ8QWf.E+ zLPcsTQRCzeԃP)ZC׏0-l b,5_X*2Ga2QXOJW5|#oG"nNfh 鞻FZ5ӏ炯D ̜yz#=5Gh1v?#%Npޟ#>zF~AtA̖/Vȍ:Z(O}&bAi`uI7kh*FC%:s0+vp9Rh˼ f٧E𒌓 6w42#=/J8XDpEr4N 8Q(2<0*4рkuke̼qZчiﵱo&.:J/Z&qگ~Ԕue hz{;=uӏqN` Ay_cN6!OҳR127-SKN{;a얞aB}@H?ZFErmHrhVy5{oњ6`de_/؝=[!Q8q5JҊA4evBA&!lҸ. ex ޷$_ZJn9I_giQ:0a҇3?1>!#/J2*--u/< ܒm}3A[/ڪ-#9­'|P53VIe-=;Pu Lzb[!em')6n#O ΙȱBqZ$ 6r rn/r&|4 bCEMvrb!d'm JzN*޹Zi]Irdd'YQrELA|J?z3φ~5K:B%aq5ep)7f|ތ 0:rE.Dۓ x͌/ڳ@ا~&FsFsu._le*/l=xbFH uٍh=tTZkGF]b0pdŒ1z3rIT)Rv/P}>>Pr@pL.Ar8l Fj2Ns'")O$rgy${=ScT~ʾ4T"oזfPS0YsZ 8#p'QPOã͜("FTWi{/n˿ A[BZkZ\cHQ{lAF{)]B|Qt¨b2 Dh鶱|㷷9^Ř`;b2a-^V{X [8%ՔiwE3eD篡yVfm8~?Zr-&U q䬵Nefoڧ=E!&J7?-;a3RV|1x0`ݏs-7;@ Ϙ4=u&Q\yᱟkddtlx,xuRpL"e$s{GɁ o7}_ĆGRc&xO`2QjP%ňz^!n,f=lUٍT =I ;@ʐxWuVV14Qu'#'sD$@Y.3?Ł"<5d*xyD,^2e'$Ax hYK< «*HHH)7kuK"Dhə!=v4lfFfXwϒ耿 +yS Є&~P]ݾ}"{Wy-jY2 E4ˇ=섩*#zxe19>_ҏsY=^]Wg:T} F] Ԭ!SMDmyh%g]zǡ=F\k;?cRNl}s! =fX&jԖs~uǺ!?mӷم@ Е@7VHmzE7)Q~qm@k_&sA%֨9|[${$KfySukb`ʙ8ī4neE"- !oۀ5@;MzmC/xhY+) h'm 23X]a>:PΙi㺎f>[d,F&\o^fM%J*lEJvU|uWݮ/03q &0ovwAtAC0}(w.J G]r\jf-HFGw윞I LտRkʇA=b9_Ңqcu@iX@@KhLB|OmJz߯E}:KHGhOu䨎i&aQN})ݝR2_Y١X>^;}ub{!l}٥}6j>i%CWbٔH{5)I.lמzق@R@(z=[ Ewul~|^Q~]|{3:'dP@C4ň5傖6NަTIjErW'-95l8r) pļ/fhԇq>t. (vl!\Nn͏R܈Xڲ)(|x$K%P/Q$f?SYQ 1eRxN/ЖLŜwǕ]1496}#;~ѕº!I@&GQ.r;PE *JLږ"%Z^'K=AVT~ʖ}5L/'7rr#! ιGK xn(ͯ܈Z Rfqv2 %Ǐ9 v| ûDjkCG(@|@?h#X|Y;`̏o%$+An:*] x^urqFXԂȶ) rř5ASiz;]DⴜT,h,F-AAp88jҫ❗@j>/$wY媘˸QN~1CnP؂I]g'k0+B/!D;D[&-AB;|7xՀ!\rp#} &J)H:q ^,32Fxu`N9D{YmӌıSD::"̶4[r0Q3`UVWFN&]tKB(ffOd@CϦĊ__ϢDtJm"~Bwf>EmRgNN[/YWX|ϝ(Wh>?NN aPBLqGD`D61dήrfP}md3R<xNUf*#9/><굞h:)}rS\x3 FT+1#V "Ta>d$*g)> bl`e** .yKt DUsebyIv\ 37}]f6rI8=Ł^AISܙ`ȳĄJRxQg9[rlZ;0#L9vP4;c B٭݊BQha)E vdĚOL*ƾ:,@7D>vEzl;3-֎n$y6Iůzʛ/ v;wlWbdpWlpq:%w*1 .r ueo _Ͽ!GzH=Cnw4G|X{2O7S e?Uiݙ[) _ k܊(u ݧDm\Ð-?h˿<:l, e _V&G$h2B,{6U#oM 3V4JHZ՟l 5_?WB38:f:M9OwqG)w=ӥ̸kd+0'0mdzb_aXm(HhzFفUA9zKixxjf}:f]U$Tv[>BOvCU6F~xӎzCՄ*:2텠3];*,ru;eLUTaTRu2 qx 1M(- ~Bh7I`h (VZ U|/g=Yc[ 2K5ZT]Sۣ7Ї;4όC(r\xh DOFa-NoZW_r#sJޱ#\]gK?KԘ*{tw0;TcuaTfر&S#n$-X$Su`*OhՙА'YM wPPjc| ~[؉o4GOV5=7U>99Qt]WNIuLẨ}mOY=MGmw-4̀_h[/n7y栖M$'áx-g-V)3 L)[Fa3'8MެD.TrocI`7f^P@9;MAY6f{IeC69h#@<6g_h˓?F>%߈*aQ-9FV޺+CzE:jy!B#(-? Tj\^wf/_qruܐ4 l_G,Tb 'it 4D3rEmf@`D >>céL B& "":W6U驫Nt-s{SR22gQn/j-6p5&zwxS(CN ɕk-W˅ gM}咾\3.B @!0!Dʯ>TljS5auv]4ЮJ0p^yP\Y#( JQN]dLjS0NW=JZ5tt^\r.VIJD>)"le1n$< ZF k϶&mk$'A.' N0jlu p=%|rS_ .N?]q<7rΜAsޭE8kTJ29 _  ƇQQZOP|>H@ ۡKZdl|v-'i1Woq&Z |$PR2r@l|ӳ{fX<_2dHX%f9Bثg9֪&hWoҎK,իZU[zaG&ڜv(B/ ͹Ai-G{K8ķPz,h`=I0tlV l3kh ,0hU l%soVXN"bY)dp[Rab6AxD @`l'i-#Q t}QL'lԄ{/܉ <Sa_$ i+^=3/?J6JWUg$j79|]L9O&6@[9UGX5VU^tJn ՉdX~f\Tz ZeuZ{.XCP~v7lȦ:zPaX2LhܩunC*]aG)n!\yF=n|Ƒ hQ &iOv3Z=J1gk9"ۜ$-#k)xS>Pz7n)L|0Vv1Z pX}*4l֜ el* 8`f(ݙ4F=P"a\NOv`a/gr+ʶ">PC=8;C6Ab]3E6kp),Wۡ--;m Ÿ\mT`u9f&3)rɑwh}#}wz9H3*Gh_Xn&P-.R]XUbz *[!h7vywn\0joOm(L=UhmQ'd=;:#)_Y2_'y.ALt)=ES4"ӓQ¦f l9cK;wd~.g9d%#^!^7b=BseaGWg_蚂J rZ\Vha.T:uLv|۹;tY0/!l 6dJgGBG?ίzү>[+c}5Q9~j0^҉`4M%t"9YެJm}搅׺>wszB5]P& yG$; ]]Ft+&lݫlx<WQ}{?pE^nݱ9Gמ2v[M# T] q3R`.e-ZWmToyez#Z tzl›P~I("l|DWʬ˺s=9ǜx}3SZ#h!nR$̫]͛)nI{opvdq13 ך3213:HZ#0Z!G樺4_nR@uI\4sc d##:HGPzeBȑԼ(!v?+ĞCk*l M›S 9fs‰T14twf^A+|QE=MeN+GGurwմgs5ߩUI{Rqs*j&Iv(w pË3|]U_HY ͓Y )Z1sIe;;(uX<1Aa@Fw-=QCN~{3}+rsƉ?EJ9w9;D]IEHě+ԁPjוPjWJCF0ܔInzkk?:+4̨8hp;m_s(eqv8r/X< _d|# ꋾlZƍ)0UB@¸.dv]$ŸKJgSkȲs4 n. xd((Au8 7(>>pr([4 Ҵ+aR۾Ng!;F/'>IT{l8zk9{)y"eZkr*)se#=>R`3 md7]h?s|@~s8g$5=0?qR2k{u.?QNo:#/%>u9¨B s;Irϵ8#ճӸ-9YD;*53q4ΨL A^vF錴AFEoQӽr|J,-M8'J߮S:b^YwsFkO01Y *vҵ֛ryX`TZARYe{Z腑s@T^rΛ:GQh:gzvP/wlo.|^-}j%t?Zp΂ڭPݶ=pOhmG oD%zQLӛ314+2׎nxCG "-; {I !ٹ6 wݨa^nԃMT7<,nTcu >|N 8]bӇV+Yq-z/}D K`n%lʼL{}Z8f܊/Th ?qnU3)KI];]#z17S HHm~^G IZ vz(ak¸9Gո0Ql˨! ye/h4_&6j~4RN ?yj%+]kUv`xJڃB"2y0<O헱~p _:3euJlg.J;OU\y^c%4|˝ҨføHg5J=5OLfhZ 1͓w$f8^B.< ?F)߃&6 ȗ-15uGULE!tV?\ڎM*7SD!]M>5Fs Zy?@njO9G1kQ!Ve5g} OMrfd %\FCA9`PYjMcoO7:#&P`q ;wj(/Os9mcdW-@ԕSN5_&dC`u2>?ZznCZnp0Έ#G`n=WeԽ1qcԛfFm*e#NqjȎwyj0dp@`[F]ճ۔Qqr\QNPͽ7?F=vu=iԻ6χy`tznԇ|icaJ XWI~"&^9ʉ@~tKrb_IVG;^ Rt|lxVtW?nÖn$lO]#/Fa#ҏ L?:|XwWv}Yc5ؖ+Jg~M}Sܱ2{T Þ` õ&rN:bzbKyY|H+}? Ɇܷ$jlx#jۑu t\`˩曙c)neǑZ#ZtѷECefӭyMe!\_jmE0gX8^VjvF[]и=zBe=s2jd 2̐8S8#nDyؚVnt(P ᜏ l?e&kF]%&1φֿr~vL"vn%bwXa ln5,jȆQ@N3ި Im9g;nj^`[^ mdjq nlB+G`em2WT2yKF?ZzJ?.RtY_b[xIFC GF݆\]`5\_azo8^Jqހk`yYQˍ]fUz%\G>#R}_I9ox2qFNm0#6E @=y Б6#+Tq,ڵDcYIFeMP h4lIPԓ{;G} W#ˈA2*Gײ|%QW* 6坨zsR<1+^2EŠt[=E)UOx`q`REx%] )XRDNQ78Ҫ֦9h_Z\U ])ȍ#A^b psNbf>( #$J9n~#>v0WWKhap-U6?F $MkӒ%sYԪYNk}ƀ$aG72^ׇzێnʣQx kGoːNy0 [8gjEГgS.˥:B' E"`$rm;HgjrQĤr.4e6 4/\^X-G-Mc'y}dLn6+J= |H`e IǏΟ1ͷX؛yG%M[R4=9_k8N+ )xkW֒@ kob]˹qc̨?è- ފ`FD?FWm³}g1&i-9t)aAh5lԡ$MHuφa f3߶y=pԨg1k)jDq'L-dv_)z,e ȩK+fD}8j=R皋\tSs^YYjЂ |y;<*cS_ꝲ((B[UOnpAŁs$y@dP%׹@rr";/iF*VӄisY%V'h"w\0Ik Uhk%7TZdSk/`;}3YQ^0} L^@KVzL@Ç]i?K3|׏Px: $VUBG@1B빵͔gYrW' nwLs?S nNxo!%{}I'X^.{dV] <捻Kթ+ZW2w^ȎȎW,`)IqaZñ6Vdz=6_V^$jxmGj~e3tfz_S6lkĽ,鍣_(--m.Si'ITys5NMned~LYg#nUL͆*v+Ibg)?ZU0F2lX+䛼 تڑ᤯J'Z:* |g0oS88{v#sCiw>7^S5UF+GpXsjTgNNl""A1 BHwil-PdI "I N±65{Ҡp:|xI3{PsW(ZmɹWoHL`{Z$ ! |UW/ʦ(V 3}jVAw[7Jc7g2Ʋ?z5FRhnGRܯI i-^U= J$ej(I?}żX})s̕W,99A& @sP ۝T>=GNx(ɨK29ܮ4xZ?1};ե @ ,v39`L$_"D_&rm\CAEx3~ZLLYWki@[(I̥izY\8FhN5&6zX: ŕzl`l]w2)'d/3bI{=Dk0:kEhLyߓ:󌐝4R77f 0ʦ~Q+bY$ WiH#hjL?r{W*(M*}EjnWdgArT 43}tj-Bz06/+߈崲܅l akPV4Ν=p|S(e.2$>J/#wu[µ 8X溽^jTKX`K;ˎ'yĪ#u8g$ #d@6Ozaj<[i Q|'\ #l<q0 GThcVUmMEA:0s ^#9K[{z/ [ ꒧F~w͢I9ۍ*+G k퍡  H09{`"į;x&K)¦T$ZFPWjĝ˨p' #7`Wq!@Gú҅ /֪ R-/AZmͬ2n虑՜zejX0t c7#(]IDP1CZ/3Q0vL,Vr8 WU|~qmVv).Z^l]Ҫ1p43_Gp 7Wϩ$q9'm + 9 u#"jpqxǾ5@]i_%>;Rj Xe'4䵇' w]FZK>&Ţ(+=RHuG7 @tduR?J4].5了7jjƮ$p'5#ipDN MK[fSeU{| NlDX3XG5չfKfwyjCO) uNb;x.ynׂE2INЦt*Cu0nfKX`[T3@IgiD㱲[2)~m^ mWl9ȈH!u#9Iޗ0j Gf ?WbLEOfޗXͽPd}R[Qh[- >.|@wZ]ݕ>Eb FHīR, sƚ~A9W|}-u99s0޿Y2WLrZKʙdlԦ%HUwo:,y9X% OcDv9`81l'5'A/$mjHNuSlϖ+|Oc)O9<04ˀTdUsܻ5~*q; P,.R0 EBhЃT jW e#Y:?mvWFC?مp\ɖ5E2Ĩo8H=ݭ.}+LM@h՞Ib9STj-x1*\1Va㩚SV+IE$ˈ\,`uGc:~E%|8PV(t#~W"Q<.5 @=L=ʋv k h$EuZ/ GZlq2\X Nb|as-L8;`%f6f0P*FgM{5Zwzn2Ķ7ظg=ƴ2|J3E9 ^*PφJY+۳򌀻B a $[XQnl@yxm!2 ڈ [0qFQ!:haђ$L_ S0mAj+խE 1()IZkb/t#Ft\Y`$_,_JNXZquQʖ_(${atǬ)pñګ c4oKMޑ]W?;2/pY|4DH7R8|Kff";z/$<>"IJ1J&ri5TN`v6xiǎpiQnSѤM^x[q` 7NHGYb 1B^Q}lzCZ?ڕAXkI _e1t=_ я֓2vz3 `"&P[]ݠ_1Uی"8C]eg"0J躃Һ.`‹]lf'B^uc]Z 遮@9JcGaObnq}Jl\ 8\<ܨ=Zxy܌5.N$DP,&Jkr=Zw58( H}ͽ~):&SiTP`l@g ؏xi\qrXfڴJh݂;*Q29oKLŻW?d צ-/wjo>wxw/YP6Ɗ#R{pȁ&r} /km@ϼ\hWX?^--⼅ț6N񶤧Y-n:D`$P|ȔmWRSi7SZ\Ԣo6:Tj@qwqˉ{KTr3byo++9t m#/Đf/)ɯMDGҜpJH\__gR6Fr[WZE?$~AhPh՗@Lc!c4O +{c[MUՆ@Mn.s5ӎE JD  vݷeюg+hֿ|Y76(+5։}5=K"ʕ*Jw N_29&(: 6rk" xl-/cI@0A:1; j;"QʿdxS8XIZ ؔfzNvjt UbД9JYd$?KC=u]6qO] ^_M{Wzn_"u؇"v9H{hTE:LkQak؅W1'sj`.>&l̡<ד< jeqtHMfeԇzC?gX`|* so{[w(nR̩K(:Gˍ}X`p4ec5^|^y|m1`{QzoWo_싐ğb<>7<>J ^t%SCNފ%ϩ-Gۑj݁ߣttNYks2K>"D\"ǸQcFu<{' [cS s`Zl#TТoc|~{\|CD1Gg]Zfl90֢4k k|څ^ x~O v[L+Ce'yF^j|UhD 'h|;8ZFxcqƅs2\FݏC͚:{?薅o<DxH6acWG',HNw"wbna?}&HggV45\ FGOP 4@>#u,FK9ݮ eu1iV}=Kz|Uad^`#Z+%J MO"x=lߒJGlj4w*4y>]Q\5ɹT.wgReZR6gt6f/3||c'/ L2~,n!;UU3[|S^ iw8λ&C6`z3fڈ=I_ ZE: qmYώkAӇ³2.54Xԇ·p/ƮGC$1ݖ>9BD޶GEOMgC11pIXїj_Pۉl"Ⱦf19JUS $i'O<,F#\+eC!sǸ4/e7{]#_6TsVWT ~ ]M҆>X3<Sih5*R$+@7l2w-dCnl8(Y*A6]? l%ql8voiq0#l9PTJyCK(/sY*|?wFrYekCjF2ˌ#|H(= jdwaKIJRl aF`T8"n&S9O*=6_ldj97E઱XbeΪFF>[ `Ƿ};޶ܜ ޵W#k"` g`)_x/)Y J}SS1Bvi> ~WXZyz =R?k{Z]Fع Ե> "+ AsQycA o`RfpH%+UcwͶb c.XOoY%AE7wDxFpLf*IFkꝥ糍`E@3_$Tèe̽аm +7rGji&BA./l^߳KzȌ`)* }-z'R1 RqZut:񡎞 ں;0?&:Ǹ87"B= fđc| K80Ek(w<:-CSt+Lƚo}-nD a:wb6N8rX8 uL[m#ε}nȠokW+$)q>af4fF ւ1]{/_MR;%;b땚]t4IR䜉~hJ+_{A :^*a@!C%˰PR78+X<\+~\Y}2.:Jp?'y{yʰ§5m-!Hͫ"@RxQhe L._ywUblf 8&mrpĻ|&\%Z&ؑئn}IU2(v!V2L(NjǶ/ȟmP框+j&a*3ObJ GhNqIj`| *`-QLl5> " ں@?+x츂sj9Xopz\OJ _4R $Jh[tW-c ]k\{|$b3?-! C]]1igtM;@cX\LJbIAe yS ZDfIɹSަ;!l8!`A(Ih( ЃQ0BMy:d}.X!Zb~CGQX}T1XE/9ELKq|9]Nۇf:~+|]?msw'3y"Ÿ}Frh(f4G,H,V!&7RohÁZd&*2')T`]Sx}\rp\ [oٻhGS u+\ڧ;q)ӝB=p=!i7+non{o:50%vdP/X(-$s) BL2ρ hӿt + ?RB9*r`ͤ]zVz/FN*{l|D+`[V*Փ 8d?L5*D;ngȶM]jxҽΗo0g˒\U7AbЇ12 #E^tŽ{e4ZWKdX;R&/T"pWl,?)yU]D +v>x;S헃\ cBܭ#2~Uj Bөh't2ƏnCY {JPQr5ugd߇;?JJ%A/ZRA4 !~% Fi*=e'"hm<(A]~J!ͫd\<s*zE͌;Qow(5 kˬA2rURnn{bg3'M֛ݒ0/A첿UQ7Xp#x$CfSƇ@s_ ([F#pW-Hkb cS/WyKU>@(yQ93VC0U-N6gv˱QفilK$qml׸Q ?gGyxԆvF~gpguGtFdOm;[~"%K]3ZZ8G.]"\9goɲqk qvTl'wOnP7l'&1_>ڮ+љ`7:͕W 3ە΀PN gd{Ž>SI!F"TUq>#s>*C)\"O= 1v4VQȳN{.%R pz\ky(|$:]jo#$BhIu<{wđQ`t{,0|N 258;zæ]z/TdSp(om0g4*fDN3AmhT\OWňچg1y4q~2whQ5 fm-cg\Hy*hΟ +0h4_R'_?/;kw 6|=L&Lg msqn2u-ӏkLRtZQ=/Q~Y7ӏ;i}/tvE^e.;}K NY!g},)/s3}iGE{nj悔Kw12Uoo3k3)^Q4I&O͆S=Zȩb A;hjv휬`UA1(Mi !O88S =K V';Qc}n;=U/ŇW`ak-\ W\BWf}_pZPZ~z s.'p~cq#R} G,^~ м~EXӰ9`IVԳXjzcFRI]{AG5Ѧ `xEf˫{>SR"nFȨ$xC˶19W:53}%}}Z&{+O)vQ< }~,Z]P3Yթ7U0wj"z﩮pF`V,ƫO>춯^62whC+#%BE,P-pF6KUu,$joY4z~Wtۭ7gۿS7?|{"鱾[1QD0fIS.VOjb)CkϖzzFS1fuV]1snRdtKבͺs3uH8:e}ut2KNbAdC#y)Y!zF@'_Ķ!Uo"' 5+ZzcԥݙvEeo?ܬMvubhπbn[ ! ¯.o cro l| /a(+72D'wjѥ}uIiXV8iIukiX}eI `@/fF49,Cxd3d=yZh'p uf[!l}_BԈ{}jV @PeN.%urv|Usjf7i.s n&/ąȎ]lXS×BI8|] _s7󎿄QN^z_vQooT\z8&_)1*e ?Gwn U1EaOe%L0-`u&-=AGu/ (0c0"?XcUV;ɦ~#m\Y0nt>C1 hQ0]d-?L>FQwLk{|eNM _'K"FaSzp`DwUvT(o8h^;\K6•.RxCo LsPsXÍzfLj̆d-je2VwRQ[.yB`f FhQ?J^Jϙ}*yIkf())FbLQ0{A6Eڱ%:Vzn)K"=6Vb:VgZ/Yzf>jnrO8᩷aJ8Y[+׼,,%GX7z:k=+jW!l&[StdE)s؝D]/j1` 69 Cb*j H^IS>9p߻Ftrw&FCp]PQJ)%9A]2 LF]aZӿyAn/]:#(; Sc,u?gI쥬*MWxu]7Jw.ƍ)Y#d8hl|Z0[5* Î()G} K%E~-ƫi/ >} Z3\kS܀B ~^Tpn@Xƾh&6X1;ur%:VYAfcb~3)⥈쨥Cl3,uvIJɺ؝UaV~G)w~\Yn5VPMA["ƈZFOM9FD bU[jnIS %;9Zou.tί2-\쥞 C `F"Q %+PIT;e6.=:}ָWV6-wF"1IکU&nޙZaD*g>4}8I7SF]'Z?N5 ,[tkG9C̀ׯH0-n/%  {zE^7>Azh{iWUt9\ IҦ\y?^Żqp&'0A; 7UL3Ua ~ 䜧ˆNJDlG; mA+6YaR9'˳ʮ$",v0rgOٵodSsM*X;Mb y ;Y.}hg5{,dc\+Bd"!nU]vUrW/Jak[ºZBVQ.b@_}5 > >"O;xQ!ת9-&n&45bEI~1׶9Jʗ#"z4T!>-ՒY6IIUS,tOF4Z 7DP̶+Q.hHW*x"[]NƩ53zEe+DRbJ{-,,G_3T(g]~̇}>,W'& r/`Ї/F]zB4>O pl=}ŽY(k>eٵHcW.Mt?zMh‹k)Z]ܕi]O-qTZJ*pۥ 8cT'Lg; [ =*- /z{@G?\cW |nƪuz}osri _ej tZ{3]ЯįS @Ҧ߸;(m(&k`[i2<?o$Ke^}L晼4u~H~+q%e =Iٱ6 ߓ}PG52S5^=(ZiIq(!hF.voI^KbQ= J&&өZg)R+o)|D:0Pb-G_vt(.7UJK+_̳.h.蔲qޯ풴q/*鼰1s5Z]bRaxX1 qg?֬]+coVv>\+w;9s{|@iYJ,O ֣D`fT?3ڀZ;;D ^Rs1+wvn3*St'h|%g-f(~#b Tl7ӏ< p#ZP%tb|YƮA]罗H)IlKnD$;oqqF wosG=UM*.^AceN+di =UG̢mڔN{0U#ѺD|٘H$#+pg`0RH {[H*6$=q"u\K mN) F?B!@/*1y^6jIy ߶o $6)OijL+ձE?Q˔B"2p95ŏ^!jKM-o@D\?),V$x. -H!W FfvRƄ)Qڲ5V58Ͳ`* @wψrOX>#KB.ht_Bf3f"%ֈ n؈#JerG tUt}3ȧ 6CRS`Po߶%71؟]Sڹ~CWyCyP"X*1^"XľETE:* *ya^8LK?Z, .,#BtFP5CkXE1~/}`A="g_jkw:ٶ8V}[`_D\';52` rfӭr/  C r!9ˡzAX*{8ڙ@8I&4)];F>}EZZ=:}|>l.{wxguGDy?ƊC?]0RqW>}' -YOKRiIpl :BxM=DT9N֔G::eK=TXSg¥p ʕ}U;5CR=CL $.p;q'D+d{z\{.9WŐ3zvol:HsJ:BtBZ!F2Rmk'Y\vgxwUh|>nD.=GKTMϤ[~TTŋ\Y!IX#:#ܩ~,2E@b,7 {U|X+P.x/.˗ޮ"{RPJH3wK&ޮ"KH"q_FAZS/Jo# }9i}f7vʼnNqd᭟)@+0<;;m+9=+_-fЌtt8g=˱=Qּwq4Ms{u\YcZb 38n\=;:6ݫ濷G_՛Bi{]+GVyY§1u&)qO($i3~}zY qiC{gxv5]q0޸v3D%>KqݦBh+u=`]t-!$G=nB?4{y:ru_7]5~%}$0H2_5]=-W7u$M]j0jTŅ[DsHJ7q֟md7x!Țwjoewpw4\ O=~X"ߑCedzoL1j{sGrYd+AݗRxG6=χ\@vEj& f;ώ>S 4ȷŠrTM^ix@rɥ?J~.צr "QD|hBX%aʽZj3 )JM=MKp@҈MbcG&Vv;g[V8)ZSHj%~u{ ѽ͍hMq3r C p^(v;WLWVE+Æ(Sbw-U_,^aR"z3RO1gL149 ]u_VO!bQiֹn}$!(ftЎI`8.³]V|F I?9 Ibw"P# d_Frﻵ zxh`jD$r,nڙ;=Qc^O识Thclq>N a?t*r?-LkEM'ayGn?97OX|tQ]RVOՂ 83Fwk#S#yڢP^iq[tY|pr;kwjK] fph xv-i| +G~T FոÇlǣݏ^,,5;GWE1*_RU`G3]tRSjȆѣЎF43 Rs$n#V1; >v 5SG4o"vLcmSjvlO9ZjF6dSWfV?|x.}jWyz<;e%'D5'um 24E )avjX:Q"D_+z > Bl[  )f؀աλ-o`ueKAp1wO^Ɠ ИT; cf 1~FY:{m~GОnO%[+˃ rhbJ=U7fke8=qD)KKZ/RјXZ!FeI7닲icN18|YN|vQ!uj`)Q>ba181J |V̕GT{6d8:}c7R9z@OKQ[e;|5j^q=ue+Z x^kx LяV  FOP@;JX85ia'7'ׂ'L0Yn BX"}nd38n>aJ/Yڈ2:Ĝ0dR( %`P^Wױ٘#PSWv|!C"[Z.a|AO+|>6[ )L}؟򽎽MJ8* 8L+oZ5|6#&|OQw,l,}9ongf]Xn]X;@@Gz+y9#3{=,&WdW9Ɩ}ALR$pBڑd=hvmz3k$gSJ ~s@UtdzxzCNƇa35 hD0 _~Dž85>ԑGN |O<Uƿ?Ҍ~̓9b3K;yb =Y+6`hcɣCI*5[ٷ>%M7WAc0P}Dw~dԹr}LSf 5)zrkV`s\/م&;~C./g !8Gav$>d=[ ~MY =Mry5kT D s u.CwlwLHfM?\e*ck}"\u =m*<ƳNAJgWMiޗȍF{G{Ԭty v 2p1pb 1x 5̀9R+y.JcIBƝxw7)0@aڬ zz'l|1h:6`!EΤ`'ȖdC|9NwP`3|igp-O)>%Țyw9Gj:}ƹ=_+ycY׸P4Vrc.  A#!HӽƏO9@mDm]#b`$w3$ "/J|'}XkX!%f5CRvM:G,j!K魤 M7WJ$2w9G!9˽|ǻ)a⣳]Lg%3xߩr$dK[>:kZq~+#t%~  Gb"E0,9}q&09 o ` _tηS<,kRh O "^G a+X.%RX0%K] ~y Aj@JᮦFO;Nh#[ܡs6; N-a a=UakXTHxg>g 1ZL5>L&AjJ0glm!㘪xaSOxȣ|Ě uzFjNrԻmXF*u75M)|_WH7ؔacaqsz}Z+.l*;{D2&VیR3| /dz1FLޠ(`'0;[9+oa9& z\Mkw]~ ˋ\Xk|xjeS)@Ka5tgVPFduPվl Gh)Ξ3j~ѱ,yy5,vծ `Sl%Cb= ў$ݶ=ptJN="Vbk0f*kw׫1=`po$ݽ}HѭPU_,炛(iޛM[@r$/_ӵ0wH?& {5p(٤5l>uS`_9%\~P#6SҫpOBCgm}]ן7е+%E@Kj \NG[S?Y]TW}*]QwbDuT]"%5,_!xw%oˤȇ]i%z#7D9SnIA9-/jχ- % S_iy?|^ؿ4*ζxTȍj Ś Y ߫E=8PO۰+0Lgx2Y*>*LwٚTlWC.C F W#>!%EL@äE¸ 끿dy+gy?("Pc MRG urjeMVWȯޏ>_wEl5 y5AL{IRmy3go%.mzE.:|R\0 QΉ Zojxjc邷dZB >H/Ǭ-'.4/dtrGN].sDӹZrtңl)BPoM=^8[‡DQMa -k;^:=+De''<<ˇ22\KJM/U",' 幸 ]H0C@ WZݳoC7FB36(8՛);3Wv]$l#"x&TíVO5]=76Ȏɸjǿ⽐Z -"W1@ (BUWGP|3zk#gwJ2řy#)m7=I0tM?R#m4U89y F dy=YZ827xlmEµWk3+9 3\Rh9ЅXZ\&~~/>SoCa5;jo1Dtەꍨ+Zn,G wu!\;Lpȩ[3}08F~CI R l6UQ1UڢmM=DF__p#ECHU3)x%@hRpv>nݨO&*\;zq-b7]ke_ZUUh$ OVbƿ_F_GA-jorTW& d[ti0A"s<\0w'=D^YwkQuEOb9{༏O3glIA̕Q CHXBxG6VmX)-qlՍzh*QZ,ߍ.nǻn䘙3Tl_M[>(E%Vɜ[_1䩟L}&mhԛI{٭S办m}7j /i {u/}y35 (I~H cPJa6kԦ|ϲZ>Ud x Y3&_n6e>_?`W<\j1kĹ)fR"9+$7fE=ئ ni"Q{.#V"jTp.NXM/U"B>M3Uo/e]sZPiУK-:5kC^d4@̲QξIhCT֖<+@Eι)xQضFC9-ޝ^Ǐ$74 3{d3/h>GF=cQk CGU/[=4ss  V\!S__4WZk+N֒w$o1İQ:6%ZzSƢR5dV@!#5R%=v;FNyP Q=stOH\os":?9u;'&h@$v RZEѪ=rjPW`~WeďQw\OHh;nr& +.ˆ..oh4BIcǨSzقĸTZQo` v>iҨL6 $7'X3HF 0<>+O]tjBL+5`C HT59dK`B(NS?ϨdkU F d<3}LTO)єRe.{BQzgRl^jYƾ3un]j%i7gFiˊLJ?vZw^)7[*>L nexcꛃ X{ĉO|d$)ha':Vk Z驹, 넾m~ˡr@tv©i;1 Huc =E=j‡u8$GT47gG+WM|  j e )ixCSx;:JϗfcE?(j: r`AP$ 7Fmj/\ vRދS]P2rvj6S{`͸E1'6a3|y". )qf.X@;_fS˫aubWF#YWFE+/CDD+BG Ճ| 7N)RLiA0~Ҕe~dΝ~9bfnY$<{{KoF ;lz[El( tu:?[;YRF3;g4M]#OKW[\NҦ`+yz֪ZgVhrطV01ҊV滕pfG:R51GRVHr# Ѥ8XV9>M4Ԭ}wrjm&G|1;ж}yGǰ7WO 3JȐ X=w.M=]iS)meez2# *Yq賜۳z`asTKq 's@ZuX&\2rCKxF$S n a#XWm-e=y`N@ˇDfip16ȔY#7(1ySϽ.e9 *P&؈ ][YCG8NJRU7i4.-0^띪OQj`N[agtw\u`\Q r9>];3ؙviTjC}NOʕq? K;Xف֜gNzycUB묝/8J WFQMڋkDk.<)  zZBMn=crv҉-6J_m;$UJW4f(%;φ.(~pLe{lQF?>C&^z4{`V@1㻱D da=J|SgIaCG.S38ڵm;0㛋k?cBBE6%0ك(O@k)]wSޢKN [WKPCƸ;>3ACn m0v xJ)տzꩍ\D. ;vZp3r]|4  :dK)+0v?OZpOjĹl>gӇ"<#7%G/1 ѡ?} @Wl/p ?ڦh12dUܮ{w}/ \y):;0+]&5dN:KQDuq& dZwd}+5D< nsu0s& M <@ɩ>~h^~c@ < jH.LEt 쐁F9'1/uX2_/|) @(]kG8@N l{&1c3 i :@`ed3ʽrN>m ֙lg| ]"`χQ5\&1q3BmE9cߩ=xörJ'˼B2ɗvQy|V>k4d>qJ?`Y!ΈȺbEc.r?dTptYFdKM%g"∭ `Vrԡ 3~\=;{˱ V[U}Xft("\io~gxb>X$((v.w'ǞCp@VdeWϔb}=j_I\ Άv>@.lUU Ԗapp5|=%YA{mz_OD.}c?Jw8r\:N=#lvniHtŻi_8/uwj[ڱk-9$:oOyt'9廇^ES, soO<@CWy\)^yuF6+ǁw)a+P:຀Fݙ7,(h{S= bI)2ĩZTd80WmNG`az@0Z2yk,ċ /ԫ|*z?ھgSAL]_I;H:wƽ;z,wSͬ1C`2f/oJ04=CKmS0SrJ4 t޳+y&)ҸZXVo$}l!q%ê7>`/QN,UiX9_1ˣO.ƻ,Blp,䋙ΎzgS^wG< 9u(J,3V]bo`-` U *s;G?@17p6OP}KrMW@% N\agFCjӂhxA1DG(8x7/wEH=aMx=ǤucZ0 ;~?￯[ޮ0jF[]rLQS6e)jrO|i mDUa֧DsxeSJ*,)>6ϵoGWcD.ȔzNnV Ǯ0\+TּvATaEĪY#tX *[alGU]>tNY#zĈ3h`j$/`4;SifiшZ]1!#Z)Mw rw8G6`f .{1T6"LW.Q)Ժ $~ћ،rώ?4HaDԈHo/{xo,agv?c)G7S0jQg`hCrnY"UGp%#^)EX |oGr{5+q㶓OK:252()˲\k{, *' _>swQuЁ 3K< 6~{]d\a*?՘cHN։v!CSV'TQӽ)mX2 2kMڪl6 ĝ!oԊ*;G 薻eDH;pOރ{9 AgXrˢ؞7lꁚ;po/".#jͶH>={Il?f [_-|O l׳Q2ޭQ0O-? %wȰg7D;5jd88V@BGȝJ24(Bcyr,-[t9cK Ou=&J6Z 2}Re\ eofxvX; n: !`Ke瀃,2]=#ѡ060AtݦMS3[4{%p'9]Ҏ}AP ՑF>gɃ5 K{}>r|\N Զ'=4l\–*fӥrbJ{4D>x-z[~^].PÌt ե="WrRH19<^Zjx?l]-^00.kk`ߒ#sWE luⁿxl#]7(l.{vRJcv\͊7|-íDei fq5waQ/:.aGޥ[!VZ P[" ++$\f\Pț)v󂡵kN:P7'ߡO;n\~^^Y$K(MN߽ ,y4U©sth'~ٳuw҂5߂eBg/}^׼N;B#?;h(+_Cf6%RH-Pw°7j&ӽ?:'C`}J6fBlP}- Frrn,yÑRp hOh #-ExN3 ײt=Ri|d`,}Nj/2)\m =W69gyf7j a ~Ļ&w,"wM?7T28\):WU`7Gc}QI&Ye\ A֎Q"<2{>iM⬣Okԓ$x3dDԸx#Wba&,Ӏ k"RÎ of\g6栿mc7o17I19y#|.kн~S X\%i k{ZKu'P;A!]TP/ܫ1USxǹZ*:=U\k++ X]._nsMOG`zn( qjK?\%Ȉ;:s8 P] @c4L8)ڌFF#=,znӈCSв.lB:öN,FKϊ{j,7 vZD[F\g!%=4Y/zOOۙmF{bHbEK2{ `ЩH1 `)_^U뀈XXDgMstkchӳn&!mtBz+yvv(S}UظUʌݍ?g$q UC15T سWԝkkmzpx/CϜ]6ք}c5_TW;cFfkQM~u;MwT=4OF|"Ċ{gV7zriKz@2k?~ QT^֙<'hu5{lnvmcn)qʰx8`1ȝ2K;]_i7\|!%ةYq!vҋd=p1\aK _5/vɨѮynsQ[Ä8qa?|a45dke|puI6u'75h]N0T#[t-tİVKFOk/<Ǡ24{b3GK5j>l`Ƒ%f9gל~'/w 06sw%.4̞Rb&zpWZrhKwت:VYƾqN鮫ڗyvG]^Ĭ\C,|Sԥ}sSWx+Rӧ*]ykj)`1ᖎnˎe,ghvtahޟ%U/+Z#]a9sGPLa^aLj#8֌). \ @c=4mcqk%ħ.km5'6\{+w^R(4ПƋ>Q,ږ3қ&RDQqLkW(f8[ G(Fǜ g S):(Y_Xp$?E8QDq['c P'Q8؃'kZB S9N!Z*VXWqvjql ~f;Chսj)0E;<t6(_A%90VQW<(0Xl'Y fFJoZmdv˪'ʸW:У) zo`Bbaʎ$Wr6> (]IJb)򶻫=c~o+s<=Y^P4GY+,'La =XJ$tySw)P1ӎc=.]l{'s}BMq3]+Jnل#) AW'NzνeG^nYkZ/2=ޓ @ E,`kK!~;w íSAA4_SxjHjbt! (wcnQ6leIvsfpqӍĴk܊*xvk*zmY#Ta;6;+N8Tn?+>?6W}"|-sHŔȡ<4Td(B.S΢{7 ]+\`dž͸*Pf.zNcm8$ׇӍאe 78Ӱ^/5/fjP?J-0 ]a;<=t0뿿kP_A^wtHl#GI6Ǹ#sn~c)>ۉcV?Et}'3F5Ɠz4crR7|F\Dt=זBQ-]aӊC;ArNOm@Wˍ$DhZF#D+Рtjf w)RGswjrU`2$*Vr3d5qIRxS7 ,eEsEUQ/Z+}a[Uׇ*>2rl:]J[Y|3~w2o"+If#HUT!{3+F@1a.\=޻4؈  &Ah˕ocVb۳ jm'^>[;$,JIEE҇hU vE4x_A*8cPy4sޤw՞~5d^r&-Ha`<1y,dQQSz,uE>nb`i/+24xcU,Rt-ǗxQ*;m ę19SI]ǬޛIFsWlD3UW!lB)6Yf;+Z(L08I1 a!]n犮's1G7St9JJsd*:c/c3}M{m'  *ʖD]B~5e3߭3=iD^Gr847&uG6SO~vg/bK!>6훬\&>`8egS嶄uk$SK+|u&AfޙVxPm1yF W|Ϸf.T*eM"M@7?~07P#r\m,l'0e1GӒ$tCwWCqxCyU(n3d元y`F'xG'yzH():8br#$|:pCjTt`;b!e, J+}W~PIIa`^ |tQ|xGҏ}:XѫwkF K -/,ebF_M 4m-NnW橨@FR@q |1 Jşkڸc@"m[*Lp﫪\z>@[ZjkuRn k NiX@DP)>CayHL+|8}:WY-ʥ8V) /xX@\?>ٛziS 䓡pzZMUI~2~up꟠嶇pwJ`7a8(=pw%y[rV{)yf.Uq\fq`<9jy4zߦHb;]eǸ!aknO2*SSly` $MC­6-c}Hi歞<5W %I GfʇTkWŦr ={`'9ZV:ҫ )AفWDJ(?9K''sN<2:{3M<m$`D$ ZfXL#COZ:(1+ lרgrb<3Dr=X0t` c:yUs.QbO3l~5A iɜfئ@ :{W}>K:ݛknwX!{+q^G0!떅?c8hes+_;?&y#TBBqi&IJ}b!xvCր+IkHQA ?rݲT:̈́eh yiԻ$lT<%AtpC)geL?l{O.!:h25Te̹^a*䭆 mvȜ}F1',w2=uAc: e,7IqEM^UWh۶7Xp^gk]T : `hR8efǙܵBelkȨ߱*h28LW3:ev!撧/,m$X3j#SZn!ӏaF "B.ѐuEl0 ܘ~`śW c8cFOYGzjlӁ% Mj=t`8 ;R# No<0†ʧٷKđXZՖN nϏ>_O[y4xw"f|:u4T? uu 5ʹwnYh@))nQ?7&/FBںagY+$:̨M6UǨ$OzgY@ xb )BG^uc:mAAu jEyBs lxbNi25r^\ͦd 4 0gFW`퓽/_ݝFCm+mfQrGm+Z\&0U4Q QT2?nOb9gԁ2I NlۇËPtdhf C¦5aoJ?sw˿dN5`Koώ^@qez|x2l!'دIghL6*E|)bD&/y <9c꺶?Y.{MO[m[֧߬j$9ƨgƟ[,(EYApfVèSZfQ>IGܜgVGsԠDrthثB#@p󩦀n26:ЪPNsh X 3fߖQ(ʥY`=T6Fm'۲TmDoKac <e"骳ꟼwx4:9?2Ok3Or@Y+b8c>ߝ{*W [M:':>O+P=tf×J2u?b[G=ʨ_9Ƃ_/t."̴W{.ScPmfN{-~` dԯ.}b<1PK-ѧtv60ٹcc{o~!6ɀC6#4mwD^#ԋJ]Nuµ:oUhL2 ^MǷho'G)srקݎ,aٷkEk饧~Q ު/y;rpSrze9hy,oe;kj ib`WKT6{ T!i?(36(핵>zE:o>dQEpȔ3ptMo, Yo6Sl]㿹>nb*.IHLky{G87]IZ{$z_߈᜻9daOf[\pTL]![wBil:gHk)(KF&WeM.11)D Dʤ2)|I2 [rWr崢Krj"M/9}h5]}S '/9 az)[|+rϵϦz(1fo0&d*#z|$t] cMI!yCrKuTM^ɍM1!856΋g?z˻F=~:Pz:9^(0LUGBϪ FrӄC{V&}&[Ĺy/(W1*t([Ks~~Ghx@5(`zlAnLty޳k?Ai3IB*BTZ8A"tY=>H8z# bڶbǬdw2Ir)uNUyy)ZV|j3eu?̺ko[OFZ]5oFbfgyELڿw-AV!:͋x^e1mp3xegQ}"jC ?PïrlϢ}M,K)1A{̶s6g"ԚOkg*pVܖS3El良] ;VUz7,v=z$FST~0ZYa1LQbKv2,g0,f z֖4/M&eKFJ'F,P ^s6lk-6n6`Bsf93IA1B(G`6\r ڪBo9@xJ#rt mROUoq ȿײULDuSY/]EP>p@`wN3h}V/϶iu;*tTgS^{Ĉl83A uwZUq]Gw֢pua?([Vmr`?CAXwyUL;>6xyCrՉs6_rB83%)l?;(msj`jD?*.&hNK%ii[d(VeTAU_:[tT]^^I4S[C)&pNJq]?G׾B >O8##yC =Fm]l3.ʑ|I~ȪSRd-dv,m¾쐡֓x!?r@l_7h*C.WQ\b0n2춞dλyƒJA$!םJݱYצ?6yJHXSiE:è}f{qFsTVYJ e2w8_\*1VPs{#!'JTC47bs^NO=$KD(Zɼ&;|k+”yB ӆ3fxfhi1jN-H'(~\[ (QPxε.tm/ MV˅9OϗCr{.$KaBI/p]ix IFL!>Bz.(hs >JΤ`t^lSW!QnrɹPe31ӗc[OƗz /*c/_;r(swN7 4yȳL?#czc Fħ5@Һ51Ya܋糎 3HUc0ݛ2plgq.C̱ yJOG@8yB,L)3ڪC\+\l*5 rjkԠG mRu_#d~`/w8Wʶq;z.AeSK㸋Hk`C5}#~o#ywƭQgK#pgTC?$/g?F7jeZYw^'.=+n&"jeo_3ˋv\~(j1{p6gci21f6uw.r !bs* .^7ab c-x{ Uw]l4RNO<φO( (HU{Lчu11)lDs2QW-@jbjf `+Y ~ {_>uNA[pz1åJ:96Bw7ڙ/1Z1Ta}# ^{m2 F7ә <_)5} 3bO/~ tin32;ƼЎWd>hʪ>!;<§iP-j5.n@F`Za48º ķC}8ޏv =I?*/Wvn0E~9?6hP4ұ?ՇqFmEB}Ε/N3J ZfH'rݵMQ7 ۪ 󥜤apLGh{a~v$2'CaM@x+fw"ܴ]qq$1u#]֧W0jFKb#z QTohMJl"H[5Y.hPq#Cuqlp_ZaP)*rɗp{)Ix+fos<+X)'A >4<o9ާq1Q G#F \Gzd ԦgQl6)%xUɖ3Mn^`+OrKu.g_F6n1|MeСpX?[fvȽu3:kK_PT qM[b턷4? 2gt]<.Ί)tb>Y\^Bk_ȕ H]ri _va|#O]W BG;Z! lFo&]zXFIjCgE5i5>OY?HjkoŘw3KESyGs`vdNXN$+\Sc'ͺiCn/}4_b-Q(2S8ȈTvY]$ J&&úyFNO^rUUi_/ZcG/_O*EGx @Fldmuژ.V4)?+,l@5K%\z({D'>ja2ͪT{,sq/)Ç-׀pd+IkTk FxdG.8bv}&jA_fqTPDzZ@ф3m 0M2 @uԦ=9WK;Ѧ2z6W֋韡Ji82 pn=ȩ}2o_6[eŤ{3оAοT1xuYis7 ({l_}9br@P. cq9ķw.=ő[CĹ>AHX,ݮBO2Ͷd٩Fy˿ u=oH% JMi'-Ƨ#%E X fgw|DqbGr/(7OVPyٱ0j;MCd5o~]A.>C)bSrkfӷamYPW# WOJ> \@890'ӥu;d=npCO)u,=ΔXCMkx)~֓r;喦 2JV }qYƞv:Q|diբy|y*Á>;k5Z8("G8ǧ[l~Զ69O|,q9W2> !qraWn@)Sh=`{ ^Hvg4]E3]#Quol}Wm,Cer:#8\΋]: ?7[D6?+}tҙv Q~,tי;&/V 0:]"ہ.H\5#4% x%!2` Y?F}>DhNخٚ֌dKr[zX ?kŠ.*\YI 7~XS47͚Gր.9 iV%j F\BqajKC-v<kuVZz ):>Q~rGb[ 4^{*.ZܻwZ@_uXK(W9 ʦulYU`,#gxT+lfYٕ>S dj l$#{vqI+bq A$v6jPr־F\F$[1y^v_{6LAX%dd07r<@h!/Jդ:cT_ckݩ%)Д?G*Y~VQh_>.:ew͏CwMgsG=Yvl: ђ`m1+^m[>r7HDrdr 0$UG(911C\NEjӫݕؤ9hM}%/2ҏ;k}|L pm-*h ܶV[nM)Јٙ] nFtU>IBZרk=RLìz; eUu ]aX>N4P.ٞ6ۡ4a9GW'Xՠ!j&զnUҏޟҟ-WSVR–otwԜ$~o*-|[8{3/_T"njB|8ITNca]sH ?-V\\&+ /"&: ⓦ*"iZSF1>fZOɤ#S

XN-6bdAN!l\LL=VAM|'DI IܫfrůJV, e#z1SXrJk$YMň:RvU]v|KKn,b4~8n'ٌ)oQi]Ij5$ˈM# ܺ>QoxAsAuh ;*-(tr( ֙CͧY㝙߶T`ΑV{+5ޟ *D, a]>꧱ օmc@4 JӀr:ck#O67OV j7/wW[31c]NJZ9TrKs]Eڀ꥿3(Ss_wrPdeztݘ~gj[Š3jKeHxFHƨblyRz XбWu.xcd长cLLI^H:,DzN îi; V(n5zwnx4IFf>tLًR]  )Gպ{ pq~>sr y,*dy!&3)5ΗK!K_&mrS*>< R\p <  <M ї~^yʖpuHL#1|#pǮZwswdD5ebP^.PguN 2;$R;9۞0DBRҫ̼Vx91fό%^L*]"q0#FzTV|]C $5_*Xڔ{+?=N9ϟQlWv|V2DaNF9Cяv b0:J-DQTwR);0NnKث!E]*®qz7W'r^1%Mzj[mBbNXȷw䪐E^~%9KA C `VvʲiŭNb!(-,j~_46ȕRe^/ixu1˄|el ӗG"o@z%`6!4BWv~w/JS#ͭժf v ^<$.¨[lZY@ѳxir%FomBnC^f۸;Uk% )y$/HJxKm#PVo$驟i ؘHVȒl%sy @L0ƊLBȨiʛ!WF\5ٍp%YqxAJfeM"smi|aN S+o ~n/܊Oݨ_9+V|Ȑ='ܙ/i^{ FPCFC 7yMU%,V7B4Rw=DA6]+MFb`aeF]]M>iHG>InH~>:#M/0j2dG]>U]~3k5ڇ)Ky^oR4OF lCxv!3=5{:;T[2,dJ$/N]M{+GE";^ge/8na~Kª;S:ZI?V_vEfNȻbwk>Ggb2}mQo!MYF`ԭ6_g1Kk6|&mamL.dD?UY戺s 58 9QijGڲS3& dnAˇ sC邇2YԂ{k^5#>q{b.SF.)-mI^zN![#=ZSj _xk_k'S\k q;mӌ#?)CQM[ E vvчg'7u qe exBY(Yunx߶Jn2FQW?HBW~Cl2,em b1}K/ǷȄW=}rXRwU1[%X %N rj ˨Kq"Hn.!2./! {]PQ%rmh{ jnfk\֝́|f3)oK#*|K-j%Bl7(h؄j3SȫG_S;c6}Youm)@a˨-jBЮ%h xTKo*2iF͕K0<]<9}0WyUiFI!Uo'-W;؈?;\Xll`v$_\{-bpSe9! '|w`Mۆ9&&|kVB˨8sR'B3XtתeipUD(>)k}veMMҝalE}0tWyGԣx֨7Ʒ5Q^`v_][#QԬyw|7O^=5vj"rxvȆ `ѧ[a`څpQd|- SH&hBm.`krEM@KȄQ/-^rjB ̏>ps\9Dr.]`5wxd֘mр8BHж{ Kt;hoi w.4ɩCs c[;0|[ݺCM=-=tƼL` u'ܼ_3TƗ?h#yRm\T30uqaRY5Vl{/S*rUxaZ%< .@oMnȀFu|'f7NXhP[gprBOmĥF K_(kJ 0xӢE. (w )%\05:VO<˛BѰ@j;msQ: äc97r qdUf@*Y;proud- LmVVӒq عF_ٱ4nwU~+a4vMePsÏUWJMhl/`K<|i2i@ֆ/ppjxH8!s麵jɃ Ӧ\d-_^TP'F5WE< ͛)3Iϥ䎎rQVcO^kZ>392qs6( kKE62t- <[=;i}*<@:_ ~EweH,W;cF_j ʫW^j3\FL<5j]4D)ٮ6 |M"Btat?\PG<Ԣ$qy{U{a;#(\~6 0rpbUQ]j Y*lqtg[xo _UbvvyfL \wPx(H$}>>fWqp(O?7N-ZU#I/\슸 Ո~ӡy9(= axbjoW%Ue 2ٽ`Y>֋ǼĿy?b|t{Idy8'+'1{Q_B) l' jʕ:htl_ pJ]ޯS8dW:# v+7nW})K1 xmwހ,$Cf]ɛ$gq^^c45]Sw[$j${5b3El._wŦb/7lBI>yF Xib&.ui f;{PBL>h[!4YP T}y?嗙}VKæBq^_*F,jw,s Q|@{a*A>ɶ7F1"3Ѱğ\4ze| i{K(A=/8\H1\lD%G/'4F1)g1bS5c!#O͹nMQ8ٓnM MD+g5nʚ,\{ |RrY-yd8Yk, 298ܷjCл:oH9ldBX*IP ?I R3@3{K˼,E,tr] >Mh =<1ڇl7:/wPa 4K璧\CW8prsWnDY'~CV2uz°5o hX8t't26JTgT>g4xhSZDNK̜ ViQ=:8:ZA4dsYaƋ,ι65t~ᛗ;c9/Q/Sۀ~`H׊PTiIJEJUI~oKD/b.h0B LXSNջxr`P#4"{%}Y 7\ :C*@ސ-Va틅_[~qWtכ'r*2I]KYq{Q[=T)VeFJZDgNK.L:ok?]3`wXiI״yP^gޏvG'Q O&N6ʬbmmx˜dxnѵ߼Y Ax#}ZN5T4Sb7ٮ)j ɨ2LoŏJfd6յEu^zK-I2U)_̝qvg{Leإ5n#rVkcc:@ OK:,Dǒ-єYIwBڻdk +D85g('I甂]fH;BǖN[J"50`‡jXUW1&N6a<"~REEfҔ9+(.*_I@N O*&l Yb%I9ΤǾ&PRFTSn;"p8Ѷ9[gj+0h}SSMO!%5 xUuC#x2}V5m6AiFM:Sea=RVqG &2z\nry*gG]?#&)1 ķwbn|*t9ƞKѡ,\L).?*uu+qއmsN`$ VӸZH^K Qzh6t\s=gW:WNKBy5vxm Y 1SW3EU\Ѱ8pr=蒽yed3S!M6D*eHW>;Xq%xΞI@J.\Ob_1g% j+ K>yS~C:68]8ʤ0.6߱au-m3\$U^? NwnuS3=9 ;Y7qqE/JdX.U-_ǤR]{*XlPbB_ghd/%Mwv'2oHbf0.1 ԡ[xr`:T as0^c3\5Sg<aP@,+gl[;^΅Wl,yn{ӎk4iҎ<P/u7oTv㼿s o ^J,dS%i܂/SQ_ݣ1l'ɪGHkbIx7Iy6SzؿUp?P W4f?,el3*Xe|)Rš2"bؤn9U+iT697%61?Y띗7~ F ‚/Z{rҀ`2p5biXt P\̣LCMg i3iE9X;ݮڏm:&b)]64Sm2)11in?^AS`|D\{<Ѓ̫^Mkgܷ 3+_]=Fc (\Ҷ+>j絟#wByv}9- PևW:_gAm+I麇.%{^fm)z\*j7Js*]9+M2_ˎצ[>s)NǁxIiԎcYƨ;^m=ǬBmX!Zag(64z2Œm&r'f0#|E4bϷo|sf@m6}Lg* X촀qZ[.fg&Y 1B ƅ\ۋSoN6)mF"̍T¡DN)X =,]G϶bswew?G1.8#Ane ~10OI _ֹm:@ -7ӆݖgo TW NP< D7<5Έ`3j605 ##G4f[t>}{}:8ֶtx1s;7L Xt^=ie"#eO1癄oeZLq|6}r9]|r>?9DLb3NXx'ˬ̜epw:S q@T2ۢPdثV@Q菱&n-yn1xUdlprl}JXby˭K~B0&W4$%7tRO 7pln|"k+`T5ĠA4h)8UY'> *ꑗY韪ELz5.qX QyOVex^\ 0(I٧Pl9D-\q8xLfPZQ}m&X޶)pAF9 HLx\XWxV>طZ ~;9_%>Go#]kK?ya/]$Mt8:Fu?A,O+Lm8`OGGw~Co tB‘VAm_‘|јsDCcYл`XOK~)vw^uވAeF|p_} єF5H*oH+GՉ^%y7Zߊ23K3.Y +OpW(: =råO$C}l mv3BwR.<0ELHxzY73|ޟq][#<2"?N>ՏCcǝ \^ hC̤n1+PPƘA+LF>҇OBiNaM|k>9|ƻr@\zOh8yê8Ǽg\6LaG~hB~h3}~1-m>di\WbjIۈ)kJ9MiC8 ̴UkCoXdkܺ ]x:DdAH悆 :b(s([NѰbD+*meY/tHqLj B2C;\=Iܓ):F>"Ce"Nr>#W%vэ,tZPo:G, _ YIE`SvNCKy#)'+L&V=j>ng(Βhq4VXGV\5+8>BH\mOzj||vU7Շ~cg\$0آɬ}؇]f7GRlO;F a uoUqJ)w)#ez]_1^)M߮%H?RR4h-qAmmg@,O?Z N@$P0zBq34ne(l 52EZ׎_f0GӕWZ_.Rd@NXp(F+\rv+%wCؘ,[2=m$[7iTI3Xuh {'eRDC@|Twhqg)`վSýd t6< >;YTχݷ8㔕F%LӝǩMRs)'F9Xؚklƀ ͅR vfʰG r<%sQYZf-I8|u0n:YZ_್{$#QuVhWD2-޾QdF\oa(fZKsӼ^H9,V`% LBii6&^# Ї-+Y)2.#I~:ީw Yl5Nj[@Gh(Ekqnu`7O5Z%҂f#SGdiGN2ELWX1|q,pyV rrZl·DbV`˗t7,|g_Xr'Vc$j|-*4B8C/G Y Y2pOUuO?"6@1^%8п itɚNoMmCըf_cQ~=Ն@w'_g.WZM;=T K|9m,Ez-/cQyhd`^Ax ˱QuiŢz6~ٮu@Iz;$g=&Tho+@D\[>{Դ!̔` TSz]}092!?~ssCVtpfz\<eK^.4Q3R%%C˃9kH 1Uҳl̶oyN KIRkC:1l@aF_M<k2jP ( Pi="Rc&yl#y%֍A/VbZP!fLrBxA`{{!#CQ?\:0),<ϱtu>wfQ$]xslq1׮kSii^8U1* a,y\XMn--Mc^&_&]7yS`NTAB+|n~A:F:ACLFI|Q4jGWBUr*IwjQVsXӒ #93i2 gd=Rlb4;׻,%46ͺŻ=tZԶ ^M :;Dm>G V 8L机:\oDeᯎS!IN]TʻmA+mCgUݤ~ nKKn֐|E?7JB!'-83V1`I2cqp[/"iJYmrT̫Vv:ͶRuDp28 c VK^>vmwObrMIYjXM]e߽_±;aԳ}E@2pvF%pp}d=!eu/}䞟Goywen>x rioUyj&fbJZ_v۟ WMjd^r~Àa#5nb`زb{˨[73U%F@P﭂8 ao̚2yW9t1vax﭅*Iꥧ5St$s?pN͵`\]{IftrTb͖w7gLG{q21R֐ U׳{IEi=+b-5Flݙǣ) y 6oƺwꇳȊmP]1J*UU#;!Bp.eP Jy gw&`Q{7T4qr/\O"/,qHor~$fSqQtCI @a?[蹤QP{2gnԧx?1W}w}9ELiiJ7Jq=wNJHLX)]j"l:hcDv/:MTBPd$;:DFOnaٴ]z s~ Z]-5 h#nńWrn S (ݏw6d *a@2[v?Eykz%~5=z1/[4lJw7t^4+a6տy4jqƈbkv/e:rՕ&i'Sm\˨?w7>116Гj{OsO"VaЫP=F-bim$x|:zGVr0Nol2tli &L 6BD.6>e=BRoCϏ;u-$ R~geH;ulLS6 cVWשQ0 Etp ?Y^ـ|%dv h;i}$a*hl9d=n]n{*ZK yjԻ}lCT~ܷ1UΣek{SU?;B`u|3L(̮qrߖ 6:0ߐ}j4l-pEvPlu'R)2G 'f{%HQCeU:# 6Q mN*lE[d; ;W5bppLt SDɅb.ΞdC1>:K<rD`^My F7Z8Mh`- o{9g%ٓE\mC=VX[كî/V nB|wp:2iT&M 0>y-='g񽜰cePKG 9ZzE.YVQFQɭwdu&f;p5=50#` ȶ=Rf"I3\V.Zz}OK4 5ƪq_RJ%) BaJnٹҰ̺ ~@x}ywOuM~s]xVfDfCrU!強y^';.#WPp^RSaENbW[soEqEG"@!{*"ʍWxT5K(@iG,xR4 nԵ9ojVH ")Ɇڂtj$ă 'fOAR$Qgt~|zTw4M#|sC%inQ^?F,pd3}y38=ZOoyyDI{\=MPl@{Օ9ϵBv'[k>Ys\]47Ն/$i8Y;6|p 4.I u؅(t<:c̮%:)KT^xq^P24[p_5rW?5kcOlT~@i:G #~vE{\:e%6"8uzFZ%w)i{ecrf>kK,[s82J%z̘E"nPNndÿV9q§ɽk+EMh\>7_a|jFϑjc7eߞ W#+H`\=+-hr,vWvE9㚩#gG1аgAQJ8e;Mż/wƱN.6*8ܔ=Ee$%[ $kNo.ƤkEqy>q5gj6)Sze9?B9pjKU&S6Jnj1wgRDnX{re;x䇰-[U7/`=W/-cSN'E=pnHPnMOmFm;XD7b {qJ5h‘+1`=17ȜSxEcRO] PR;{{Uo*W?Ϧ`0__Y#/IT yL7x5xE맗>Kin2݁&{ 5ITVCsD{Ur\b1GT F`]9k쭳5m`sFaN.=5Ӫ +R* GJ_B;[" [}@̩e9ug, `՚qB!,NЛrF՜=?@̌!Md%ڃ~r>(6uF rxq5"-$f9MI!eSCMZxI62 ~Y\J hvv>xZK_Tϋq,m:;yj:Gz UJ~;MZn^3XTU "TZFKz<@$غn6ӓ -絮O 3X=Oodtdl F D$ֳ+1=N3A#yQ wl(j0X軬L Ѿ U Դ^/M^Rkp(z8 % M^Hz$/>nε_N:*IgW͇ K Xyy@ptpbJF #ًGH t{_ھǕX',PFܚM.yQ˒lU*Yi^JrPuTbB KUgu ;}Es/y!wGU Mly@ԴerK΋: ߖ89><@Vz됁D|3@G ×\}YL S@Cll. _&11$cZ_ ^ɿq+(; ;6:<^/k. 8ǚ'w^WnSݶKZ(dٻ(D|wÚC?ne>|F:F?6)$vWTLvVP4j`% ۬JsfL&+)P'܌# *VӦ1yJWSdGf;|VE/{-'`tSXhL~wt#S莧 |`bP è{ Lb4h*DkoϥBCӹy 󟷼 Aľe.JO"]hҎxbm;?QuƝ"hNX!<ߕ /^eYL+o79pQ[ O$`Cm);IF{o CnsNixN:k_tQ%&6U8`y *頳r9<S\#WWEqwRmtTfҳOD:ӱBD%@;t)UnAY_ՑPc6IcK~Hq:(`kES ЈOk^YrýoFMT_xSY]A6i I˹M.tUzt9g FR)0ZSփe/HV^PّQ">sV;[Iu r A^2J? P*so b8v-%;2̖bT:p bĤiȀ!zr #fceM;5ӏwCĿq$7d,Cׅ~E_l|ʽCNB6LT-x׀yfJǐ,:6VS)a")AzRXBy#vFh}NqbN\HB`a.?57Ӗ/m@k:{cR$Pz (/sesUKsՕd@IjÝd= efTTUwuBZܣTM XiD&rvlnjdT,enS  -6mN07 W{^.6k]uzv?(I]Y])9Ok5iqޝ3pFZoGU8LR(Vg.|Td;"]qXHmYA]E]:*[Mv r]NkSL JhdfQY`03@, TN9"]+N.lbap!JHrMsq#^MM_$,Q;9ld2Cro3b}YAi7ރ*x2}p9iꈍkH.pڂ;@c0q_vVl`EG.ل/,.)p(>F۽KT=357c :S{]p xgE9m1>2{//R|+%]Q!#ʨ~Zv8)K|iW2XPj_=13lph/$0vԭT%TkvmEWLo9l>{=!_^\]UBm#k.d ;L-.dcs١l[5vw W9F>~卥ej?q/Monj&jIOL|'Թﭚ` ^WYORX[|u BK͔WKRw0LK!H\6t4<[V CE>] a  ;5.gB3rIN>iJiw*'x|`ߝXFCclvƳC^LK$hs:zϦD-u5TawF5`pi;ٍ@_cȕP6_S[VTOa~ZKstyۮ,UV-f)P '@FF/roSi:|t⓼ IGG<LlAd/4"fZ+{$buN%Gm*{RdL̲D !0qhWep|Z%g3ivuY\#i/ö9>?+xHQ _"(LSjD^q/CVNHXxΖTB/)xa`܎J?NvC5)At~ԸBv{:}3G6996FM* v5*cz>ε|2G=`9E¡^ 2MJD}E-UKm}@=xj]e,LFn=ھ#|/\D)6@+AkQRӰ^hzpٱ ܄31$ *⽬מFyAދ7 (RNfkD A =8dwm{L]lTQN';/'6LP*DZUH1p|OԚ}VmB`"sCMe *׋NEtTK>'r+~:`6 vT~댌`j✂H$ɤ\:[%QGѨm {S7[SkE i0BI.U/EJG|k$o4ksۓ0! غg?Zίf%:,z'zRgXɱ#_{ ;(lqգ#xчog !ѥjLG*C>=ۆyByyai|~\F T4L:eוO0Wot#i){f^Vֿ 명1 f_N,}r<7Aa?/ 1Nu,>}4@-K{D#hK ('Fc_%>``A^^혷;@o9V/̇J Q݆n{Ko )4%w?=4ζDC#߃rs,ryf=i阌ȶK[CP,߇ =&ݒZl=#.XRXY(bEP : x~*=*:^>"o?{LQ}۟,w?v+2@F oI^ 3a0`)o@Js ܺl(%NNp+OhcW4b) X \Yj,c0N>௧6U<Yé.C:P=^ZIJYٲDQz `;d#ș5zSO.+ॻl]yKU`JYȈG.@Ms6L-|C_ʢ,;GSSG}" /-*'9mw V/zbhO_Pϙ&5ʓJ6Q.Lm#uΖbzӐ;|%$bUS診p2̽9?!i.5=)Q{%ѧ^!1_(^W<+G.{5j1v־XZ )e9 =O-gŦ p,=4 Et8C|iJbsY5#`W1婦.v>mzɃ[ 5D"bs=ޯ/Nm$w#\$e@^=+E6\G_haw 3w|jDL*j$dnkagDG<7(/f;V.l,tKgWU9H_Y!X֞ ;PQ{:yFJϽ7_reY8s5rD<`p7Äִwu b+R5Vd@]ֺt UNXU&jPRizv~,kmjI{dh <^bJ!{!4&ԏĊwSr:yՇr':=jH :O)iҼ~32jͽBK>#5ޝyau*[ (g3Ea ٕ+bW:PX;睥jڞ)A `˵zN]}[S]v`ΑCTs=eVcUէ6E)+iCޤR)3ui W>K:w$^jcۭU:N8Ӽ}Ѷ7NLvB;E4=_cy#k:.=c,;o|It7|䁙(ʪe2e}\TN2 ;Y_-HWޤ6Xȁk"k~(:,l-;S(*4o3= |Q-N)] 25v{ ;Yn!t/˹S͉:5cd2]-ripqפlaW@IN K}naWU Bjs .mԧs->5!klb%1,.VS>!M{mQkLDh+glrQw/&l =ThA\ OgF6tN j>Jһ\~bOVv6 #64@ -t`LHUgm&?kwAl6.A! "k(My08Py"-P lXyYCV50:q{b i>.; pz傏w#pOl|M=d)C uɡi& I3 L'C FBA=` s&7JL6~!vņ^A 4>>C$S!!(8 ted(i-#͍u$ϧ&vJyl(u B`{&{iJoܓU놓ڔ2uͶK:S$ `W6S7`k*L 8i xȑJduk,śx-G]%Mnq eIwr_V'$Ys۹ږ:Sٽ`x2 6?o:U-]?ot$~<ׂ͚b_e;tk|,\oEZO)tmF'd4< V wzNY<9Vu67%|/̕$ 뽼|]$'T4Yeaz-[m0.mZ $2r9&i#j8 H4r &)03;/JjS޳W8N;nW " xyX|/ݽ_T;؈dxF&K~\̵)zyP2rx #mg$1Uc^:১H ,Jف5 M9SrMGd8_.#h#~BZ7)ڼUwK_$Ԙ0j,6hej Fၝ^"_;:0GNc[ ]ET'1+Νhg `%0 MN@ucݢ<aX\ !M;*rhǃLO7_wwԁR딃Bxo_8P{^Xx[eԆq"Yq;;Aw3@m әzs$0ݡj4c-rv[|ON"~>-6oF[qdSϠ\UJ~`B0uܪfrR99(5[_ ǧ/~X=b |Nn.H:QWneG$gH 4jpI`~!Ydzqq=w>\3z3 H $>H2i7hoĈGr~o ATF/QQ:)ioʿ]z_H+4Va=l7򻭃ӳmy[P\v !wJ3XuO͸{H&EzQ\ICwn*BLWէA./-wa˻-)ߢp KRpge/.>C&p?"̠RZi:J{$) 2otF~ܾj Dl d *{`ॏR.PjRFK7S;LYi4r/Ÿ5gZO#v'k&&n"F ـS3QVHc1שwQBK=T=I,>d\S"J=H$M1(mr)[xMWr obVixqh|%h~RmYq&Q <%XG(lKmgOaUhU,8KO]+ۡ/m ueQ}_pD7Aৎš6 Q٪@A&ܐ6h1}U,c82灵ڊaU 5xC-iOg| 7Il@I.mUvɸ*-(= eb%vC?Fƕn[){y\"r[932R/e2hu%bϿ=>Zqv283B߭+ȿkao#7_TҔPl-߱+Ao_KNj@%̀!(>AsAJVs+97oqv# |'$eVg2<1s.2#Nm K}pZpr*ґ`ە&%Rj /zF {X؇'ҷGj.~og !.dO;<.XS׮ӻGZ?GqFyITg ơ]u5Ȼ ݳ-7eԡr{+/c4Tb0T@QӒB2e5pqě6QdT}4V^ cE?Hrit_ҏѳXWGcRR) }Gi h̾jcݡJ}bjx~F_`?޻1[?{;ؔI+4%(K9(Y7$akMwA{2]K%)@TŮ5OXռ9޼7b,euWm vlNwTkl;1Ǭ+E%5rj )3~B %^L7,ݫci_ls9Ot.0S&@ %e~DiԐp ]2S8fԆ E 88-yPFU&*֍Pܙ"]k09l=`K$42jh&yyv%xF؋FO}۞h8x94_:6K9l|fW/ =<%5"ф!D91zkOw^5O#mm?2f 5Hr[%csoݶ<YJ@eîfeȍɶ1"zz붏.(xSS㳔&un` rg~6h$m}v􋗾a`rj2j J?OÄTepC#>F Y~%ßr5=&931E6oSR2vPz|{8g _29e3A" ;F]oR#2cQϖ?Z㪌wwUɂ0W|uSUu9Gn/|;`SOmOP 4* O}^רnd0$eԳtE7 ꨕX$E nk)ƷS0.E ^OZ=9݉>l @[͆k{@ۧ<{.YskkƑv]GRl^nju9.dW~xEZ;-:esέ#lU0mݫM^$d& :ώ76{Js)f)v?Ilt.yꗘ2Z8/L?F v^͔QpAxLm96!9j}#/KWptp=iՖۗ'97Sֳ+NT{&=M tU "=ԻNБ{(X:ːrv?՝XvsQ(/ )8B Ůj~B.=+?;kI)ji!UŮ`3;!=,HkjtӬQn%]yOwsS;- EEC w"˙Dރnt۵%pt!:m97&NTosds*G"-++ԑAJཌOH%ΚaLpdg߳Yy֙9imL9}fjPPO&4mɭ}w#"ٗnxw(ʒ}%AA2mBuduo]x__M(5oCҶrh@;y4Qz1-Y1v9~E{Dġqmu@էңFh~l2l @#O"2VbQ:X2ȹ3nGǽ#N~ɹN0,rv>!0!#5e2eTFDT A;q1`+ h[`-=,e%`j!v H1zmkM b|)_!Lwrt_  Q7NI^Jbx5;ݗy"1aޙ]>̝aAXYtdN Kl:E` z^z<˕}oDY+2Lm^r X7?q3xϨzfOe;qqLz 9-5<3B7_r+`^֒覆G^.C ֫b_m]w]ʺ=gE * 蔜AeaxJ*kh}lZ#$8^Jx^-njwOxAݧ'7Cqғfl\w6eY+P߻ ʵ#E?FLo>fW-`$BnLzWYف#N.yR3pjĆ6V5QAsdU<:,=~U)TDǔ*nY*:~"ޏD{i7iWҥC8X=>iġBiփ%"h l4U IDb:̯#CQҿ vS ;@)"s&G+y5QeE`^Tӂקc+ZTGV`qiS<wMik:#W~ЗcT"<^2^oe/: h皹. 4- tۖ.~m5Q3i} G0ݴ;`5_{QZ]SgL_0c}z]rYSMVE iWc\LN:HWUrFW>]4R,ov,MI$ugβVs!,^7o\*;ER!7rx2u`k*Qէ5hI4͋$eY!?!|Y:#HN">wz\V1"^Z tb { ւ[p~93yZNSS.Z5 KsVZ|Q_&HXi +v]Y`3x; yyOw\~WL5B|dˌ;{E2Jw `S,иX8Gxrv4^r\5l@s9mnѩA~#-p H͐?dgi 6A7:"}>У$/pK;}2 5Ypee~{=ql[ZNc9oЭDY|x n' X Z Wzib*8Kg$b0$+_^O74{g EkLUtCq{/&K^Y9'o,?=)ح^Jk?+^KQuXi@3.H`Z?Q`? +@+S`;mCt!se(Y@̕!eɪ$=d^}t#jսZ|Q1'sv8L~͙mj#(tơow">)}q_2Tiںkm?gבϠHbZ!Wz m{8nfʋDzK&͈&{;hW?7doKG>'lu_.زXEMn"u{siS*_R^)][2(ԵϘt%->9&)izt:&T;"7:]Q;ҵNKH59gUB {G qMCx;~dJt$;,+.ߧΨIzu**CSj< ,\>Jg1qbV 8I2s ob[^yoiG]l,Úw{ *l8]R 'j.ǔCXֶizvk.[| 5ֺ!n-":@=Au 9h6י)lݙ dx͉B1ԲŭI)8J\f՛$QN dɿqDgNʛďA{k5%ΜUWP6h,;wkC]9 ZfGgiqre1vgh=A]WG{XbkjE@FbNv<+0܊9ZU9&E,ݵͮ>Hcl U9ƚ.D-:.){qNzW(:Ž/%vFb퉀޼A&lp^*4 Mzb=`R,̽_n*ʳ,e3wS}ѣ[ENe1H =hQ~k/V }xqI?_2dL.X?=@!GjUtfޘfv=w~el֭㻇47Iܞރ;.۠\L,&7%gYIc^jW}DItBاo*D0;q?VJs :S`;0yq//Qt6Uթ 5GJG sKeC-VS(\k>˭&KR ,~Bo5y!=H^9«>(ёӃ3Y s$\+$lNI YO\q6}ښao Ha2]۽7g D0NKSQ2 ;m;Ns%9pl+]4Z;ThusAg=~_'aR*ܶ3S ~zv#ǘu;k?Yw(> sv`)a1 ULZHf+W#L0xo ٬ٽ]s h+^2q׺v" f=t/TG E!@BhvnN 3im6J^sF^>A1TWu `IBnZPYbp*nƭxW'@UK( JAm<1mN _I5ة1jgr,Lvbf!)Km>qi0}CF_~?Q4g}6ާ~?.õ>{zDu,8v9# ĵ3Hx􇰊#/̔,^Ǎߝ<0 ]n `t,No>:0~?_EmM]Xn'\Vy :ec-n/":jtݙN& F9L2ZXϗҰ>F4{tobIU%r|bZF8BGAEޔX_:Ǐj_A0I_]bC#c!./lK[QZҟFڗ ]E2(&fƿ`}+Qꥍ?׺aw ^)D@F_/:s C]w+Q -@}V9^~}81U~ǎ߱*kZQ ՙ W5&cpRTw*uꤻv\Q %•$`\\VDq޼R>x0PźHI'Qeh#U;ƠBC&+hN`,z^Z1JoqiE;Ce[ov܎ mnvϴɍ7.˿ctn^r\xY%a~߈5rJYwD4Aճ֔HJ~UnSwR쎢?E!T˯r-t3 Equ'nZ3w(Rͺ6]Av+yJ$ Heز"Wpz|FLzJ|Ih0]H-:{m ǐ.>ΨiήqubQ;inWu߫4+Ũi_^V_zGl`uD~ć&vbܡ$sEߚ1 4T/GօѳkQԽm[eJʆlfv#Qi!|JOnݼjkz΋YQѤ_JlkC'y_ϤZL0kxy-֭YG!K ~Rp>v톰堯uOчts_=Ya;a> r;/ă ;c}k;վzܑmuKb9Pd:5ԛ͔Fc?qxקml&lU"qt'i|xby:-RW$w()׽&TV8Q!k6Dn8*s1 >\"KNS5ѻQdh@ҩ{31#W]{pԂf1̧X JZkwk 09\t:`=&VGIj]:|Yڟ#jcQhϤ WRt, !+G#TbfVF/spZğ+v/gC)._|׏^);#74wM&0$^b4SݝxܹޒZ0%A9-ܲc!Q;p|cEԏvlmQ :xoxc0:&G66dݼ\ٗpܖ<6]W ME;(H\$Bөڡnw`nF 5hZ];ĩ'Q0.M;l~xQY?Կ0&2e:oRES?v,W VS5c'ձ?&0v^Oz6U<+nQkݏv (.[y6sGteZT4e;tȫFC/$pé6 RBt@Uhn޼٬G܉m.N<,7zyf3U@@fJ^ S *!#vxQUAɷg{6EYC6|Y܁VlNLoQ[mkdԴnAx.5I/GلؖfF]i\4[( |FHfE~i 2#P"S&z0ϯr,UqYw!|9%F!*E X oJ.+] fs~M.,:hT6 " :=6v ٽEPn]lOnBuU ~{uzƙ7D6 PysI ' %]~$|{F},gΩ4ً(67ND\YeT!,Юw֭nT| 6ĊQk> Л}̵Z4=w4txu.Z5Xtfkv^Zv/kǃtq'o;0Ro lgXUM^"xE2/4bf٦ w~hQ= Gb'l¶;M'FM/) D kFoEpDk믾IrblY ZvTqȍr.nb?|NTK7(nAm` 0`.,'Y-Kq~%ݐwNɫ #5U5_b⢊'f9?kNo3mhC,%`3LYǁAK?Xx@l|h7DQF('ȐhwvQ3h@n "BiIhn =M@-0AW"0i7G!L,ppi+N33KnaEらwed}of;2 mrdZ&\BkiHZĸ;rf࿷%]jk䇷o'/!N0MK'2ګgH`VbG'_E*Q*Y' zDuEҝ;>UJ^Zl2͵D,*섵bkOKv6g-li!F3!'/qkvi;19wAZ _^rwdaR{ oneVXm.]Q\ vs?9fbҝvڧ{*^˴NWԋ''o\߹95f=W/?~7q=לcWz31]Lc@+a!] ,DQō4©<$lj%Ԡw_&ً]cܻo!ao7,s16=0#4=4OneH/9?HuM4Xh7vcs*Xx h;AjT"obS]s|XQTig]],zo=W>]oC#N^<-TXۇԑ[tԂ:2Gl?{N{̔:R8>[9ERlT^e^y-w'@fMTՊDZ+9b ykm53'g$bhg(0wYQ Q^ u|&RmsȆq=%cOTXXVNgye303+e/\O9/Yj!y%nl UJ2KFWt_tQhݮcT;Qv?cc!uPOFcygSv*z9rL_XGy:V-hSA~SE-(X_Γ[>5fu&mk_mCBWΪ[ћ"g^)c->>x]? BcK iቨסQw&r;JvFLőS&n+`J6b48#SnKʮҔ¾ꔱbXzK5"6E`7%A^) FY =ȸM^~6d{TM~~[sȎ_XWzݛJkc_lA䗻+9ԣoʖ4幚VC\FOKVE_A!U&Md y3 ppMY8vLI1ٞ,fg)ywa Kfڅ#Sf޴]qf(k6y4q%p[9s|A&p`/ʑPWBY=jWQt|a>KCnXx0{^{hƈ[ᬙ˹r h/H|ݦ?i`;)GJ|}٢4e6`;&fc#:r+k0Wtp$b\Ur)R}4}RdS|MC&lv*נZ[H4?@y mzbXgdq`/:MMb;̴/p,i78{S]JTk-Tx8Vr |8اUK)%%G~Lw:;Kk9oԦC;vI@VU&&spW_~yaRbMrPTgE,[JA=l`#&;D`2Hى7l[L3|xT]WPl^WQYv;+-O[QYA鳯mN!5pRs#g-@wgK= 7E~.1nfN"Q *h.ځ,RT(*2` OʜO3juJ5.<,K=vaWV#<,5ׁ%`4Bpq9RߪqtXfbVrU>;Nr}!+ܔDS] R.^y*:+jK[Puol&2bS?zPF. FѝWRzv,ܨ=ԇ' jN&7%߲laMe,ti30>AozWn&^x䶯dz{1*q*sp|El_`> G(O7e!LF*~Pv%LwU\O}XI .Fgjk̩6S2FfHIN=Vʷa̧㢑! 5z0Y9撧㩷dPw:)xYJ?$ژ¨}EۍU/2\dD-} G. \ίà.hˌ@&GO :dV^:󪺄W,{qQX $09 / VvB%t(gަ A| U]O ;YBmRYQ KZ(!gKֳ%"ptvJ[SגmS\R z$~hDoo9~|ucX|˜G1 3D¨יJ=7m`6]S$vsh嶫C] [Ө.J] ޡL7##(^wdNT"P)̣z F~I! Jc/iM<3'U~PXOId:Ϲg˿cd Տ WIoe)qxUa8\wwQbMҍ:^Ru_ST=Ry 3h407_61~wW%ʖi\y[Ub2L?J?ª}ļK^4& <LV'G.eatgrpQ$~Y/%KǪLqիco'tYv_AliE? QIډhZ iεwԶ&o6mYx4?\L7n><|qӽ'C3RC|J#!R`VaN 䩡?kM{^[Z*>Ѭ[I$c5Bq͢)C$2nzm=`Skmc\ :A4GM2Dܠ:Ǽ渫|'6G]%e$9&_{@ qΞyhn]fۡɷ]?.D+s.;GO%\[>SWXm]8xKq3NIe$Sԫmem@hK pȖc߻s?Ԗo]b20R?RyJGnr۰ d:iť{M.֒uX~B G'q4d+j-u:d1YΘ[tF ٲ5]jO{5/h)gz>geo>}[qwܵOVw݋n޳܃zǯT qlMr;'1h2on9p#zpƧ4l~ԞR0Z\ /BOڹ_f#Bh͝fxj;)W> \Q{c5/%hTE@mbx Hw.z_uF.wlYur8{^R3  -c5BXnȝO{.T #g7;hTV_ˤRJƂoZ:rtxN}YsujrY?7@, o hN\m pءu^ZĮD-sr unŜ,yo;Vi7!.^6p|QӷlBaǣ;XѺ;D<7FÉݾL=g{X㤯~ Cvh@<#\aBvkmAZz&=;(hDcXLUM ˞f5W[Q68 E\ R;O=m.ހ&h .`^$EdWOP&eQ&J_pW 5]N:3pWh͔jXJkmQ}bGXVxDo F/83@Xs{jOO+zSrUiAIT sv#ۄLI:e4"Z=t\R,rpehu>OVGInߩ鹶/cX#WVܝs? dw)ZC+^>ys$qac8rkkg4WyhСc#x#ӽ&07䏡I/N0!f ܚ3ٱDLu^"j6pJAVl-+:lSCsjϚ ^0\pPo[X\"I?JM-]˯dti|^g,M>Dn~w!*ØdF.p-=7 raP;E͚ݗ tHw,QCriP^ݡS P8ՌŚWK%w*;.>8׬NLIҮkeeQ:&m}ΊpG'je ]½: sȪr`ˇKEXAM묰)J3IqOYz$bηoD^r9[w(Q4K$2OZi-[i8d%qp+[.{+^<~xvJ-Rm{FNٻT;[!袟LvaA_\Ar)iu6";n"0Eƹ1{yL~'`挻3@kVg'U\AYE0/֝\̕Uw<%G$0TKh}v%ޤ+gŏgY9?żet$RmG놀gD^+? %9zrZ!-8;Kݲ!-EUc=fY+4'&׊c1){\k).pT!A?8þ_3|Ni\nXahuEg,8#Rja܂It(wWyq8AQE0}[TT_~r7btzwPޓCoSͨntٱws{uRhWyf3DΙÃLҩ4־LΎ]ig乲6*Vca8!wLߛ%Uz\7y7QMȵ^ݒ }Y&K- Llsm4 S?ڎ=ǵ\K 1>O2Q Y[6xk/6ɻ>邟?mnu!OH+䓦E.;>^F9T}bgGT;[x? 32bug 'G ^ԝ5SmY6&кY[`gfBڍp]'F+*$|js?[WSS{' s%[[:ݵڡCE妯<ƏֆZWO}n%p:ݖ?ph-(_..wV.YNe֍]a|iڳ&+;+k昋Njk>b̫Uy;rf pGMsf;&|Y n%+42aރ3\1Nc-s5#,85+Aإ\V&'aWFi`BLxco~`RG~vh ȨEݽ[=:r ES.p{^nws8W^ Ş+Əj'Uʇa}:[1mxݵWS_zZ QBx+>FL"Z88{&926(ZS|9ы}|i{$JkޕI博hDֆed}Z[a]0NMT \ Nn *8rGIOi=M9m{?yC3i\n&&M*!?ټMDm9}y\sHz{fO%ݿ554.k"{E`xHMR8U J'h͵ixm>LC/mXf4b@Uj[}GXj?S2t +إUcWeP7U1^REt.苖e6ͺڌGJ#sFnrtMRpHw2$WY)o[M)_K׾cL٘QgBh%M xw&[mpQFt$^ulUcvN @゛k~ͰRZЯ*=eyPlXam"7렅#XsmF=S.TmТH^Ŧ$8.sU")0Q//G!¬M;>nmr?}ݗS<,]96V喱51l>>gLRR-لrݖJ}\"rin/߾D??4T{L<lm5cG &dǺs~Y2&4ޖK3¨KQW痻ʂa—Xh7th5JJPU4 NjtVvFwd'* y~|^r6 +Zpޛ0kӡQ%K ] GH|GX? V8 Au k!9NND'Zyx}{Nl@9>=X'L5bur0$3 p|H=9αnB0@hq%Q#tm#9৳k;\5_kL_pg,mE;~U6]0;bԫv ,QLֺd[gŞ/=#U < d PLBpݡ;g:4H&wbH)bDafטR@͞( Hu^yDɽsLMl @>Ї^!"fx%<ƿd:EQ'w<w]yK[*?R]h9S^d}^n w+n/挦6;h^lzB+-&kﭑ;1%<«w5ݙ/QgXKp'!m D^h ņh=96*4|b=[Wx_کP;Q=2ч8]BlAqrGSd,e=ȗf/G] ڬR|A6^ b/~ 3:#F٣ `:CۭWZ3汙ַ=wJ:MQܿ̔{ڥL]B/'tާ>9/v"v]F~moa| bAJֲS$R62ID? 3Pht: }l֪3rwWNR!=M%1ZY!hAٹ:"[>GZT̛;/\E++}_J_3O%f@ڧYkĬU#q/}G+|uȨB;%v%/ͩѭVd1'˩{3Y_yMT ̈'IqH#Џqw&ӛZ}x{& @K2,Td:p6˙T~]R턕^'wB֢ABDcyFܖoEhexglp Fmx4Cٷ͍^ΎC16U ϾƮ3hk0Ʊ' V#Cpq0ׇc)$yX̽/gP8u+^F"ja<߼XeA;!5NQ+2H $jS^جwc5&LSPݱ2!%_XNzs])LZ-OwؾS[#%Ϡ7"`IGt[6᫗{~6D;R+\gaxfNJvS0`LزӇU3QO@2VNF 2OPGtݲ,oN9Y8$2)T[>|G.0UL2b4%֞S]e۞>T2%Q -WxN%^tT0~(6{JZ"&o*; 4cD4W1] JWpq9UʓNv_E̙2-#-\-" G[+\? 4=^{3v M޽9}_/4Bh(ͧt o­`zRnI}M jgشcC '~;5㾲 ǎ rk/'rJסxB)~0XI錌&&!:eU">LjŚT﫸<ƌѐ;qg$+^HBSRSI%Gn /Euɜ vSJĄ9G^5~#!bU-$ 8hXph7dY܃,8se+b^w/*BP*X3>[wH|ӏ'C 8oWJ\6;'r;}Du 4QRh-\^p3p,)@ǯl#ωϭ+`7vګTkGݦ#nK]2aRn?a}>/Ytrr>/˭kߟGȡ`_l$],岌ULNԦD&Fm[c $\ Pp=V];cIo==qZ8$hW4ҤXوFƯ\Bʈ1.Y?.s]9 {~FC q##VF?q9ߝn`?22`$EHeH)z~щ;N#|%OoR]['t>+X^ۧ#) ٽ #M{>M/q @ұ I.Ia4"!#|t.d4$ezeC|a]&qk4Zx7@vIb K\]+[*b^(xfO?*iͱo#QE+`(RJ(Rqc+|L=z珍 h4T7L:I\`Cq9 ){L@!HKidSGtRjXظ 5O t36eT;~O$Ɩ 9%@V:*s˄1dt6VA /d׭ɒϘCa-ƒk5;3f*wmf܇nBD̿?媨9o_q{8ٸs&2kE2u5'0uH-Iopi BEjK^Զ3!#WH*)7tFNf\ezޏ#fzn(#̫Z4Hl[[qdh[1,^#=өv(rq, |`jluϰ2EPCL*0],o{--AQSzfΜ:8mMBՇQos)ByQMhP% BwHdT*dh6?BQ) 3N³' z۽cR;:TUt)O9 )3=SF `&^7reܦGs=?InU)792mXk|v@ !:Z>Id;pd0,!߃,g=`r̀{$G3~a"O.B7'E@_R3 ̀--鼀S趱&ۃAʑ q=6_&)pmYOPymOqPI6Yk7{a4hIsmo6D{ /ׂsgC×4UK>҂XcrqOmD@nUl3%<]64Ӟ]to|>\2ٱj{%pi50I2ZYcx/j﷚*}Lbk@pϋYL3qt^Ƕjkܴ{R6Q3{xW 6T-22rot[UjӗK /B;-e!e>^Mv}Asʊ_+!HOlQH26E Ob2?z4)iT@eb2x34"|$<)83͹ T&7"nZ<$eN#htJ_ x~#?UdػP+yXPNVv o^T̽,ҏunУj1'2]YxƢɇx,{5ʇv;WQԓ'sMPxyCz~&ӫ:'ە*/Zrs}߶=tyVOcj76SRS(慼`93r4t-c'2ZX CXjOv9%YR;;F>˰'L6 :gf#@&'P2Gѓ-54-=\ݧzw: u=U㫗pI\8`'qzg6UFꭥ@..gau?i*k ݽ{JNg?gT?{+e9j <&ƅD5UO*֨oDGw'mK|3:MZ-fMO SL Q̶*S&Fs7򆠣" S 2PՈx12psnu.krIg4!,F1ktX6;$e3@9OW9ۋn6EZC1}(ɀ딁T5v ӹzGuiǯc'Beq:fWy"?㘖gFO;KEy n+pyt?7JD+R05 jZm0 .Nj#[]̚MP U?l`KW5q+O=\9o" ʺ9Y\qZǯ^ԡhh -Zuӻ5 ! -V ?B7c/0sv\7QՑ[?91VLRc@]EꮜA.~\BXm\,f %``!;>lK@RPVl>d_sGXg0xR+KU\^ GD&N%f-sq["ld0}=n᧱56"ZqBR&z1"jGĤ̩dǯ4\ʜW׳nֳƵ#Gױ892gum@/UvuV+w, £~DŽ[9KRCV =Jne^ujZϦ 4^,پ2~$ Ybc 81 ǵb>H1pr>u̽d^~ѳ *t7#|a+]'Y8:0] ꘼3|y%7j}ʌT)<ʭwjxc?K.Ki8s4Ioɽ>{hA×28G4+&Ih5piFlzFE jˈTe-[_ԦB;(57!EZQ$oNN ҿ̔bC4B9M3/R8`i3 :pnh\4jta҇Gf2&,pG~/rW{A0ԏFS qum%p{(.ԝF69lkw9gPy Na?@?]G*ӽ:M-9gS*Ɍ6v5{T Ko }@FPA}?|w,99 [QVA_7f^荭Mzw$,_ze/ͩDWX^i݁ydQR-{ie_ܽ՝4mһi<讶8R{KVQuBؿюL)-1<߻cd|½8W4_ ]5KW! fdu1(7Þk*-$ Mj$dLx M.BOy]9QM26BD ?ߔ=KZm vWRq*!OLL䰨%06n[+ vzSByc@]evWDQC`u+ovztԥRB+|:I3=xw5|l#&80a8}0l߬)ɖxP n,Sk^&M?z_]=Wn q.e|8ƧCFm@b(z Eqd=ޯϊemRi]iFR/\9k/ q"-A壵(81ֻ=P!{^xic/$eH3wT=t90u޼={gDoh#`V9w\he2qf:8k]YE3tZhӵ%?sÈfw(f4tvpo.:ud\b7ںnS99 __Js|Wi|N %5 %kIT SI8{+ +wr[q(!'^EgfuV'&xA D!3"܈|о?jϵ҉'X%_Y*w,bxS}LP?whb.MC!?R4jlP$E}'<#梪~ T8ӏ\z2ڡ=adHxvͱ^ū!ȔWm $ꌁl\@ϗP %ׯ:goSS_$ǶCޏdVіDmcA;VDnH%rs29:%$ NVH?.qD24'WM~'r缒E9} g:kt#/>kBzKr bdo@]͆8rG1V6+ZPЃx}V5E h~Y XFoְRL\JדG#%Tz^U3wCɊpЩZ[+jԍ%{\f,{ rZ4a;RrI$֝8c{r~r/%sYfi,53N>|Ϸ5M#ȼoz1eB|E1L~Q7 5``9笝~#%]Q@\ (^9/x?++hwؓ |?O򝱦8י߹jW<$ӘRq i^SzýOPB#^ŠBCh;}^U['X鎲-ɔJz|8X{In6S%l7 ,a,V܏,Hw)!(٥#;Jrgu|i<"hܻy_|+S2fܥ pZ!00Q%? MoF/WwZSg)p1'RXt#3.Dr4SMq2͔8 ~<P/?"m˝qZfp>A "1Լ?Bp82q2қb:Ot`՟?۹4Y1uQmQ`" 8x!Gr"oa7 E;>jl 1^r/>cJI[o-Qmͼ{OzSp3ΖMhg=e >W5 7zG? $9>ԇ^0_? ݲ9s#煩_ëF%_ѢDG*hBp["]ӹʼn;^<6ȭ@"H;mc`6*U Z 'lii+Jm,.cy"hhh|H.WJ}ºa\92᜙U1"Gd֘Uo U'eC7+_WrjnwϑQ-HL2' ҉۝2u` ICc{dtS% --YvhȣI\:6 C<3rf>ɥ嵵ъ{/w~bqׇTh@OD:b|> jN֐xNqa#$oJG ;~uk>ͥHX6SdݐX! _ v|<5Ղ}6: ڗժʍ:eKa}]puikm:ǘ  P:XgPQgJd6c %=3јaI*{P=3ރzcЎ_6kX梟Ni#0*l޿ͦtU[A8\ܭZxA_$4jGa,<b5faurdћ!eM1&A Y?[/:mB-Gzե_}{xcڬ1[Pi[|:P҇>I+AZLHɵ%IK#f!>Ll׼Sd{W`FsStgVb2]}2s/NIV;a6øH Yav<v~,o< I LjZ9: Nͣ $" U%wtTr|f/>N® Ⱥ`mѵ{[x?Sor';fdf_D1]XśEn] r~e r=!Vf7!S7f|vו%[qe NY>=ݹSDWxwxݓMӔrc}cGic,Bw e2Ձ<F;ȼt꾽.T="85y|gB{]$s %dWꩣYًeTݚԯhMu<*H1M@sh×q{2'mh`݉>@/b^0嚼a\&$+ LfPQ9nBbRq~F@]>? }趁BmD#UhM[_ϥvlJTW/X7~xOSa?.Ovu87hg^982f@/tXkԴψgJ,W7ږ]D >u1J _Opl1+7kCrOL|A3fVhzzsȭ,}-l[H$e،<Ỻ̘OY+zuCd~]-Qn+^8Q>XQ[HΫp&M`GLz6) ~twg ɻSڭ6ZĒӨ_~t҇}+cW5t.w8߼%`RhS v^,lPY+d2&`uPfWF_Zx?[cbhbYD,0M 7MܔV 1,;j*Q[hi<&Q .E;WP{b1>8J=(nezL-)kM$ >ѽw_aΙמ; Y ?9õ/Ak]$0(pd#.no=p+<.Vln&@ Ν#r/E/D{6k2'}׿]']t5 6mBbi+{TLjX{ G22f S,f:m Itr͸{QOC_#f^K'\ m _HN(W.v ^{#qIC%9;ز]q}=SvXIBp@e.(ȬyyLYN 3h"ſYR7t3u [b䶍s0kWU# (hMd.~xd̉P'x8"5 JpdeǥJ^ֳGk3iBz<˼%Q0!a.a%[7[0D:Uc""w}߽m~vhcm0lwM74׃於 WlLpGo%%nQr0Xsa03X@do<#B_Ĥ>ڨ{P)Jѱ^j]U6[֝9\}DtDK 6 dzɣONM:q+rR%*b?B1T6oCGIMRo r$2V0!RL&v +MNjk-r 1uF޽ݼ;Z2~^1ul} P<|я־0}isUUqIA~w83_\Nw*Mvh{w'óؕg9:}7]Վw$Vzl1ouhϥr; ;pJE&ōCqf}qw /xL2G.k&Ls"F؉*H̝R|aV.Pm:m2@w6$3)yt`S)ɸ8l{y,x9-cS|hɱgPHy5>rz.܅f_˺H@6 -U'F[ؖ,ҰD}ԻDu\ԡ!mh{|6,Jk_6-zp۟\LϻO9g]jt^;yQYpUW~dh iDP﮵.r1+G/ȑNٱlX7}xǽy=iDHw93)^`#w-Jv]ɻo!lůL'u_N2(VWMiϾF ݼC= 7MZPd+:-+,kE7$&FsB5!3Gk&@im;='.gfn-^E\(T!xWq 6s0Nm2'3a6{L\k?b.2ΓWvtWdDRpVפd->?~UKszQt@M}cG7ѳ4rbt%GsyTXĜ=罚Lڎj?7Tu}#~./Hǎb0;K{bٛdiSS.RNݏ6vnXnqCѻ[ÉCPs~OԘJH:X. VG^~E 0:svh?3`?g}|S vj?,ԏ~nv3ڦV<yup]0MMEnqmCG ,M|J Xyqbtd 3>8=InSՒB?WV8>\PyU^Bolra/G9 *0"Xmw`8tGQrƸX4f$֮b_۳sZ;r(Cb*Hn{MۓqC5iqmq9ld 0z6䬵BjS +Ƴ XR)Vk p )nom}$4_QUѭgqRFD1`]ZͻkD@kD6S~tzI:=1924;o:rZRr7nT#K >IM2VQ} zE&Wya5O*P=~>GAXy?@|v>Q(D ε>= ةB3_aP'm MSIr>[q'me2'UkÀ7u}7/D(-@!<"Jv:@9lE97eK*ؽM-˄a4ŨUZ-pv ȆbYBm2{֏Qs™.`:o/]n, ,d6Yd{B%W>"d=@EÑAU0I[1^_l+c"g{_CaLJ!EһUI;M7oxу^)Źw7ɡPMn,ؗ' Y^8Q X]5N 0V &`s딑ͽΚGi@uR/l-ۜi7Ky k&M >ov0KQE{w=M(Yy}\~X {1~IcrR餜faJ^:FC&@+F4^_Iz ;/4G,;>u}>@EUO,:tgSϸr.x$G3g{l#M9{`^D:rud3/K1/wccHnFs^xm~ 홋 Ž fe 6.y4'O\g֙FD QȨ*mA) kdjSj>D_NG|kSR if-M sLln3ܦzGeW}8pң<[֝sqL:|/ E12n- "֙ B\S.[% Si9Ҋi4X;j]ǯH--`^mE\L;^if-8?j-U ]G z\̵Hhx#89=mjȿ">x5C vuқhܚ`Nʆ=CC;MT2qelEz 7<! fr>ۏzŘAy4cȨCǝr>}I'i;R6ƎNA9]?:'k9ϩQ[2Own6 _oxj A8g0g+L IC {ZQ?s 1X+ίlnh^@-쟀mYfe~kQon y$.cV%v#V墍a%z;ЦGzeP^2(6nʮBpjp ~,fTNɉ"2&Q 1R҇~t?FÍd3;s^9ƽ].{HpQsiHG4 =YJHa+57T5jPdè׮D0{ëܨniKu#ލy8Ú7rJxԯDi88{nԫ"ThE`2jQTBZ'/"]jSJ7 y镏cE_ɸ%B`<{բj;F62MޱikwV`F ~^Gw`X4_`adb:IM$9u9='=Pi ~8Q~Ԙ!fZѯPYB@A)O 66Mj&ޑ~<;QN AFΡ$-$+4#o_\SSW>4`jDA+Id\[iD/ރ -yjEh±\F93l%ds+^p$cdumASipt0PI3\e̦YL"?ٮ){{]]9Ʃ/:E{}fW?#6_Ց{Q`}ތi6#F'=bzW:>_# r'Qg'fE'؛ #qO81Ú^6!?UbtՓXK z[H?LMSNݏnў6ADM8ômc*3Ui"ӱu K6QѮO|Rڧbd|F B^Mf8y\[^ş=, /v ]WJJ^ XIzjM}fB#]fpSuzKw3сz9<9@Z{^`iʦ6\yW]c4vߦa(l0 I}M^{43ҢBrΑ 5:~@LokW?EΑQm*e<k>{d{&ܔ"F#*:d"3Y-nv=* gw}1ÇVX쳕猈 ЇlrsN #M:Wd){愥VX2JvFO?IJ>ǸCp]D%Y-`%}*p._@]kb?>|1m>,bK>Lpn;7U\]qbqQxY51z); Y~ )Zvօ۞#".hn#&ZuvS4:p9᝿ Lk@R\w奜z&j?#<=\94GF:n]zSh?-Yn+ZhݛqEh/194~lxܽnB .R sJOl  aW1˩_J6Q1X,zޠbD};E ]X(µM$pBUї]zYuێQ#zQ4'qCIq*@Zt&y^|=ƁǟՎӛ#nUum}G =K1p wp]*)6ybҐB^J؈h{ˎw/< t4tl֝}6=ʅgOFuA.OTB/ي-vJ _Rt_Ʋ&Mo҈˺^޴yWm;;J-4j +އX4i4jyNXqGNbև3@$YAI07A8 79}@rsi]/f5k\9:r%} _\4eMAO{=yh)9R28bUl-Ip \͵5{3s AD -KP\L7IbيߠO['s=96}=pp(YQ{+Zv/Օqڷ}AJOny J :k娺|_Z3|+NF= uP}ͭj~}~ nq-'OLf2s9(ϥ 4$Z񻊃=8b"-{UB):u6FC]v \ UѼ&#sޮ~F,CJ@ץ\v)QR累d57:zJ'9@Sn9Zt[hNQCFOu[k3I{[u%72:L޹8@ljZj#!'_.*& {'(jb0'nO츜Ɗ5yPƏ #28jƑ/tNȐj9~Wo{^G֊4Zav2M "iB# ZzjDh"3f?Vğ]4>{RDɓ @pҾ?+6Y@1z_V1~a-Aм%a3j-TjT^FD;)d_doNȣoZRRȊnUӵY7GJԓI2oIʣeh܇ӳ0B56iX 1 !9ӆ$jeuyz)ihNz^^x;`rڬXIP=w~YWtth߳FZ CzmS X0f3cm&mL{6_m~jC)S tp|\+i3._>T潾11+s?DFǒ$p=<1'PzLomJ2 y!t0hX-rtP4{+ .D e9O[G\Ƙݞ؈(8rxjȽGu4ߛ8=4VtjK@NEϡwrvN'i$=1FB,sʣ_x *Q,(G"q,'FHc.ӭmZGGб[pjHx (@|Q?}.EsH^\cUAm7&+(AmIΩR+]Q(-/`cOwC췟 "wa?0]&wl,5m n= &y[: Qc'~qu`/_UOʩSbF򤃽dNyf V7wQcӛ"h7JnL֊$cv9FZcWô2\ /gSE/9a_˫j}@G ­RЖ~/VOՑiF}wIJvۛ 5߸S(!iZWoI^l{u\{FsTl`m^I#7I&U?wإLr,_϶fC(z03?y߃\H뽻Vwd9]qwF`2B.BTY1SdlG^͵yRy@=c~!*m*zL&w"1wYBy ֚X%ΕǗ|Gp<[u'4 ?ܨ-͠t|hWV')֯( 4<.FG:Zj ɟfЏn,]4y/ ]yew7yaMgMmJ$]$3EMOm䩨ІIk'9]UU\]}w$I7yENcotw(.E y۾ H`.΅/Ёbyf $6pE}. f{ on&>)nfp{; :R vacd &G1hnvy(}lp10m:j@y:bSOJQCgԪ e݅$DJҶC6U`USAŦWb=IC{S3uQo4xkșܛRǔ4Î˒ t  pޢ?PNdɎE"" U:Nek(3-p&uor7C{C8 |G;'w:k9 T;5y,@pȦ-NwX킯tz r2.|k _ 옖FsfU m,t{x rPMnt'i& |LhC6\+1nbo526[I¡ )B9p[0D+*J29URh4VWv`350f=RQCTѲa˺д 5JNзa甇32CO/fnj:k0*"A-ābƅ ^E o`'-moߦ3;أ:n|'/ B *2I>]v/+h{w8 ı##;~.8>OESCu~@CݴWҎ\"p|cԵSi$eAGBl W5z$5F<; fCe&S=֛)PVUIzK!{1u,ub1v^4Mn{*e9w[-5KC`> GG:# h?Z[oqjLпv! PѤe TUQ ^08^Y@ eV ˦u$9 s "yArz䨤Q9{E+t1|dڴ9ԏKNFvuD߇tѬ O-#%14{?b}J/:BVrئT֥1dqYBkv\$ळQyoshٕvtʰh/،[2+~2M}Y@g&'09}(icȚOq^f߱Fj_Ƌ]v~/@W^gmPjL^-wN]N`g]юmk01՛ޞ>3(H_;,Zeյ݇ݸ\166}>}F^n@U$X+V^nhObVUy~+oRg{U*깜^b50ԗʑ!oJЌQV8~h&mYI/aҺ$ n( (JeVUq$n6ZH:$m/NŰ25-C0 G$Z=4~rDa Jɬt-]?B#IGKn #. 9K+xge< 0z4s=X|gTdP=fON^=q}yAUwW}Z[=yn/ȖaC, FWLǸ(?kVXǏ! )&ɭUu:Dp􄆓i{g26*bf_g̈7S4,-rccqمD&u8}KFqջRB.iVk#ełk4Pf(ʼVK=׼\kfn_ s f -z H?R9)w*nQ5R(MqG@Yh,l yimr6U)kcR-}q>?![x=| ѥЌvP ijW\ˢۤF(V3 %PApmuL#ȆאEVXk._M0l=p۪9MMs5GP 㦍Hhή<[Cl iyV>+zo|1d}nz+6zUD5=!yDHNO 6\.-DN_; ldI@(Uan^uh#JʵNIZfcE ̤(/!MHHT3y& KfZo f|Lp×*J9Fen0GUyV*[Qzp0cXTC:rX^N9=Z-PWE~r[֧/"FY" .s轍ID|!YM.Wca0ƨQ*Sr UÉi3s!`T޼*er媡,?%ڽ%E/M+ -jFb2iEMۍcQPX̞By:j Tnǫ-;܎1.5v{_P\E e> LvQ`;s91|1pb9}\ v֨u>{FmKMZ 8;9הP>[]>qgwJjg6?wKgs[r n'7HՌ﷬wqbXdm:+S7#Z䯑Jp/A#`t.m}X.>5vw 5;tO8|×]S4.Cb-i)!v?HɁFUr`sgn2·di9ECr6\h85HRbtTkOf-p "'SiCsЎɑ;"ȭvw]\݋ubBh@Wg!(s/AKnͰ4nocFPoL_}UK E8*-5p|Enx2~wvmGArK{:`6e}vבp40u3[![?BlFj=™I8R>5]ՊQ5xGNMb u7i?zOYWxiWSWeCȝĊ?J_7T]aO@~r r.b,LF 9okNŘeY֙s",ko5ԋhDGqbOe9 _Fip4w(,_L+$`Da`r%+3j2mU:M7I*4-ps=}ܬ AXk.P7_Zy.}IMWwp ?|5R}; '{v~-u!8[J?Q/{@7^SIa1HC r/P4?뺿[yZFS:^W&@o_-9\-[[_:W Z?]M]+<Fٓ@B2D E9OW4-0|{ghsh{3zvԦ ,N(joҼ)+> H"=ʣMW'Bգ}gd_շWQ'۰]bMT9Ygs omHЍ(qhx W(\';w.x4:f?*Q|LMKJt](*f k`uuXy-&;~mpK%"Ym7ZX aðp{7->Q-%됪0d|/W 9\xcI#ҽK.>nCJ%t?j]GOw6ip,tQ3,u-, 0iP=VMq|V5>,,cC˛Jgs|_xU*̽(p|Ur "+e0[dٲ-L_/[I{.'ˆM=ԑͻ3B @TJrfNۮ(y^J5!d SI|uCp{q-t@#WF__商P- E%YHcKVx> +Qd{Փ,\ԒYySSc_۠ xY]v{){=@,lla~}hXqy܆kADhhZ_Ol/z5}98L06mƳ;X&LTw5qRx`+{Q֣1z_w2.5uf~vI#v!u#/WŝC:L9ofa{j/F2K ["͑):6;nE.6ž˅}fL99 !Z!l{%BL<Q͔2ےU UxdTu;5 O`w{bIJ |ލȵ 5x[Iik;f_r SO;4V&E_Yt-`NG?Zc헋v?cAFm26Wfm {̖T@`s]OKFnSmǚ)X woa݉8V$Pv3?D82-3qnylIqOyڶg۳^tQWlS&\" wm[\aCE3)ŭQߘb_XK ׌8MAO߶N>b⽒F`ICYu$熛,Q t6KҶ^We_}lWƿ}-KDZn#E$ FB[tGv)s0k?"p皏q5R>WڃWsd 3G"Gu7c'Z;* !정* ~&T\ChS|p07_fz*nGzSt S =@ Y*q^S"}K;\~XJ 0ʇۡdN& rJ(|po9?:up8gE$dSl:g0g$jj=*7 g#X_')v*,{d6.'%.k䮾HA{<ɦA~\KqO*m !K1:YvIB55r:X•οzԮgŞ}pyѲ*}*3lmc.rxXT},N";֭/`x69@,p 7ϢCϗtkCʜ߹bd{j=xʕKҼK?){%2٥z#\|͖ <dlLrK$r}yaC礉TUU^]=iЬhCm&㿻Y++KM)6RœiX&XHgt_ƨi~6m9U"j%e'1k\g>U*!}pTb:y o,!`%2i{< bD) ̮LHit㣡x AizQ{'eduْyI0i1~*v2}[òҍct]#;~zd cMg~S:G޲Yf-+84ib?E|?W)_Sagf.sO5% Hwk%wqshдjĚt3©tWJL6LOs̓< q6FmM9W@f'JYqfƔ%(Jy!a7Vq9(/UzT't/G}f+ &]fFUcl4shg%^kʋNO:{Iݓ梧s(*^f)$Hiq^47zpC{e'Ftia n]%K73sښ,ھ`!e0cŷ>m{L9ǁG*k}xyM.KL,F,ʨZԶ3/,-Tw>{t_ɵ}8:F __ %տ '؛fn3zggq\q9ޮ8c?{?McQt0,E@v> 5ZUwި j_U4ЁLLU(:sA(؂h;?{]d2s=–{qͫynh{'WrJO;tynQI[COz꼲l59s)yҨ7WU^[ Kv-K &+|RxwcM>p‘GO=[UN.,Yn{pW?c0AT_|]t??_JމK=%^~S~4s:&޶jz &`CCwI֫z 񠙘An^s fp9%#ݐea>ʎHiԳZ8Q7E ޖmDc39FʬշVz^qZ9c JMN(u_>~3Q 8[_|=P/s( BB'.aKU?D-Eg̛=s;7N{Kz_4~yR0qB!_rDWrEN'3 =ZQCD X\:'`霴QiH5d8r^ˎPF}[{]ٲpE~֟fZm ޣgZ~ϓnj iCg'iq10ȱ=E":yn:F&&cк ͺv[-gN휲W}cmkX, 0\ /e[ReТ>&OYSU\m,FݢRTS*縙Ӌ// mF$h [_qCYTfH0N؆IJ /ܸR֖߄/٪* ;mf@1kfQ=cʨ_;=.hW\fHO62hSk˗XSrio^jh f ~,T9IWN6R [Ch$A;҈:q>aJ@uWI @Ef5QZǴr/.Fuƚ4ѝЕh2Y>PlhwYEL>˨A4cԖ({FRtZ){v2<=`bHOFS5.@+n_Tعg!ÔB 'Ua|<[˹)|ͲLTMNܪ'L1~먲[WC ](k}a~+YyرZodĒG5r;LyP e*1Q"gc׽x9^PpQXj)¶c['~F9Q1yVwڏ GtnWԝ)ojzQGԘ XٴFa7Zvyjd;h=0) ;zEKuhlKaq}&{rLV؈ss`XU)Z>|UUtiJ^ۏ@.{.W5{/r׹iwo[MW(.%)gt#;X1cѭ#UHmmō*JDGA1-4>TuGJSFmqӝG%*%{qw3%kyi̟ M69Zu;nL*0; T3($ztz@F@Ӷbs6(o %9ND*#VKek g|fY#OeKKק+\k^iԱYxwbתSGs>6WUD@f1|nؑݨ-~|0W>[5u.{"ߖ^\ 1u*yTx|K$!=~k<Ҩ`)~ˢpx9`޾yԱxq0}~^H/t'ZT9W:}r{w=S["pGcg^Q^ɜVƷg4~T>G 0%Yև2Ky`Sf(.^l/5HPQ|3SbXBQ'qqͬEUt4Scj yzN '? d2cdžq"6"{;m:SjO )H.ezGdmqfMUˆf,~\PH Ek (KC d7Pc2eXF}!$zЁA`$={3O<;oB:j&de=>Mmoc13޺> _W:NcM*s><iώwP뛜+(g܉AD@g~#Lٹ;V ,S'qQSΈľR 6{a >Z!ؓ3:*& 4mM#irۥ\5ԓո9R9;r'DWQ#M<=&f 'jEB`v+hx87>oUa]  t@쵮w=^>qT1hC#ָ ةI^5OԼM$ua@@T~k:}]Q g+`Қ)t&:FE_iK]ȻYj)G/̝kW}WMY.s{w[wA [3lZGh7ͬJDz% F\Є%xMrr$T4>?¨'ͨugr31`dDC%:C =*osYv RWnF/;PsU0=dHh?|Ͼ6P$+ |4䔠&Nkcvx2XYSN҈ct'stM4H&xCuNWȾ@4s0TJlR5HFs~ (BǗG[}.7UBh伙vm*E&?voR45؛QhAԝ%e&-;ٲL֛ F:BL0}8;zQwSwbp,Vj]lk1/\e~ xmUiQ\& k*_fK6(xFчwh6L_X9 ˚z{O_ᘶǯ `ol,qVLR[ .E.syH1pGPݔ6W*\*/t+:EyDH%JInJVWWnTGrHtdQc|xffLzVwXmV T5o:YK'a\޳.֧5Ƨ>Y#wbAqB_32SȵB:jZt'6LpK Clm.l`w&ϳn\yyIεAI}B)HR}yKKҥ&NBe;|FJeR)ϥQoƋ9vS.Fi@*R23ycJf8h H<+-42]Rwrs(g5Ǡa#5וlu7@_VU'dP;vqCE)+XLuy,=}r!ǿF65Yj@.x{I]ئCS _ѿȽw,AK[?oqܒjv2_|(s2gI n A;8=u.z) M]L6݊Rkܻ]l]zi(KY8lFniywn jb",|IfҎyDoqQ$E;B?ī\tB)Ns5K܂^TОm`$ɺgqYĠ{,r) Utc'='+)N<8/Gw45Pl:SpL:w(nhh$HpE!EE}?t|=J+ᓸVF(޶wRZA"da"=b^k,',ɝ+eht;&1 !ռԲw2K qV-=>Eѭ1+V"ujk,΁?K/3`;3y}(tAo\+iթGbZ m {Yar,)|2Jg=+ 1B)UJ-fZeu+Yjհa`J+! c%_TiK"K~(`3RKIJM9-kM6@WJAWxFX.XVHGf%j;pSV_Ju%VI0K᛭z}.p7\4Pd+{`E{|5I9i?}YwqT!͗*]euR=³|* 1OQ_kX݂xC69t 5Ayr7I2FcW~!_Ns VT𽭴±if 9_Tpٔ޴vy <3Wa1* oj7:1s{xS[GC0`糳m ^ ج<@7oW&y = o=1|oZö84 rUj0`pFn$t۸LZݾ4_u0W *Xͯ˚zx/s;RA{8 +6>C—d^MO 2 ΀l H^]t`0]lT^^?}}x*D;zdB%K*JVt n&X+*zfMl o`.*"0لϊnBLth uiɅ?6PYRIG<;2Y?N# ;fkH^1΍tÜ:޿%[/'C'8sT)^ͽO̚ʫ)sCYNJ%;ƧRB*_1N(܏H *XTp{8QX)dRc]?Z}Q#MY-`۵2<_}% Z8J_$\"xeewq RH2آeaBp]y/e۶\&.cj>=.` %˪QDk2_m.;vkJ>I9Vc&rj=>lTC~bjy]f) ^;B㤸zY% 5g# ߩXJ ldᆵ:qF@nN^] Df,lfHWyΰzu5#/N`r ׯC3zp2E&Z+Kg4k6M%qN6b{-,ھn{pvn10Ba蹌.O3soT46]zu Htdm7 ^IjRnv*֪\f% 9v6,|Տ6! JyWXS"%S󌼬8:[{~@^=[CK9g <Rk,-j˖;-m=WQVf]~O|Ya좖} !)蝙d[`epWǙ{PI,l^5x Sx[o!\<'VWǹxz~aG29kG)s6Uy/ t_x/9 <l,D=}pe/i$ߗhecZ2#OmbiolTs1~UwVvܝ;5z~q$z7Fvmo:Tqq]?sqy$$h|ZPg~K{=vrIh'QfżYen)}ߴ_ԫy9m"GS86O؜}/~9O:E0XO+C J ,'cԃQF;XY,*)lQJ230طpn#pW3uf;1;Vy P)EOVA./C{c813>ֱ襏X%.lTSGmJxåa+rd+ !-=ɒňBRZڶγ;p;YXgQcsblx8^Y' Y+x&oWx-I&dZ MhWtzG`IF3Q]Lj#~}9õZ u.;nҫMRFST}۞P$)5ޙۅxW'k>5vQ@ؑqa'TrY, 蚢/QJS,qRt,*o;Li*зaE9;]1jܣk>˭кyh)F-' . '~M (O`|42( _}kg)pӔk@KRڂ@~MQAP=Pg6sFZ /x?vR (BR0W㵔?'Yj;] 賌9\dw1^kTHK!2_C2/f[ʅዑRXۗ8~3w(xuUm(edIb$x y$7yC-AT {aҫs5ɜU_VpxcNoJ#ۡ/ʛj5eL@z՜׼&F,Xp$HEݟ5 3IꟹauK.=xœϡl6@ga.R菗E3iB'm:1)v:xNx[shMǟ#( \5J[W½Uc h+zέO2^` @ 0ˠ}<P݉v20*^>KgN s޿1t꺱,w%&>MԊQzcYj69:M >2p1 ƧS} ;R€=UO`Ѿ^ψl5"x$HP9qīX-B W, u/Go|@lMoVJF843/knHUkt~[7Tʻ53¼ a-XS<$5qQ0[Qϙ->mjs9Sː}է5ww<[HdaVIN{kl3Wc`(^mSf/7fot)!(9l.sygI( K[ +AauyP8hxwAI5fWxMwsW,޻m[@x[]zzL=;&tzkvsgXz(`k07_u|o1/u v`4߮Џdr{ ~r^iyͶ7 }gOMv2Ƒv(ZFG*jOUDcx)I|y=1vX3XG^$ qב;qi-պc@}9}I}%<\ԋsp8h-:N%>4Fݝ!PSCNY ɊC[|@q%e Xw+5VU2AFrS효e.eXDO[p )5k9Դn{[R՛;qHT{guRUYNq{XpEant|څ >6×7}!P˱itMwz:구:M2ΚWc'o_r &t'4/DԞ]qrhh^{S$I'$7Z?;ϵruEsTFVRtw@z86z)l1]ZlN$|2w L((<_޽^%Q(#J5osmr (^*^Gq.NUyX,.au]MYfaeFLV؏8ܜ8x88|q r;/S4-B )Biw:/@Ů ׳Rl1kč T5 =`k nMbE5L\C/IBX-wX-߅Ԙp۵]t0HN$~4? RbͿ:%z:4-t,G GLYLϢs'!󜥴+B#[Ay<:rqZgcp r6qRﺳ G^&lqw4bX09=,zIlZ &1%W?3quݻn!dLEhJAd;(p3q8#UGoyzSwf\+ &]%Qϻ@Ӓ(+(cВuxwI^Tbh)v'U˛6QMȶBZQd@'kPx|WVDZ_ hǡ n:=nBf }r<>f쀷$eF'պs.i7/KnSR s*;u*vF FuKMrzr3 L6L =ؙT/fE#*nl0WּJӏ :K}dUGғJ+a`>B%Z!1K|5 tΏU`c=P\Vf`PT?VOWqss1gh|)W.m*μdnD5i3$dqKdT&-vͯHT'=;=](jYv% -y%d{~&$5j,9%#ۆߠq Pd=N~eߔ>[Lѵ=`=]T#Wzt{rZPVtZ;eR2$Mak{iUk>w߬f:1/LS). J  áǢl/)e|a;x?<'\A `,weɍܴ$ uXpMӟ UyOX z8Q\鋯 qI.\z\[iLZCzg-`6#MnVV{s:r7K`V{u;u4C/b#6ZR:2jě2! 9|\+@UnÃ҅$RLlKxIn,4xC uuٶ?-o.MK"n8<z0=_^:$>`n+-q4XGF` cGf'sRJ-M"QQ*l.,{^`UNm3SJhW\2)Km6+Lnpv H%(x'kC-A9誫ޚK.9nXS]w8N庶2ݺӥCtunN,@#{X7k?,}ΏhȝY恫XJ+:  q#MnC!hC ҉#r8]H%fO+|9A/sI~t}o7ktSoC(sQ]I*1#\|VqvE ףWr@Wba.xI ;tۀ]h|'Snwz=")h?@$6:0,';5xϾm`NRbY csn8]g3fD)6ZZt6j:j)riSIm90μPdf\SΊ ?0ARrRwgy^#n3\%:LrD<=%x꺲Grf^zsJmU$D„=[\OASUN^],>n_M` jTQ>ӝ~+\!8!x\.-MۡcQn!ɸ3fqET`Tv+$5v*[wHh2W_ӏܖ$ t>ϯFuIUίHeO4i(3FvE4nλKV$qsj~{nJ@DxwIN^> ^͔G6ٌsRf|n,Ǜ}{Utz:R'sֹ8UYb+mZd(mNːWD*PTt9p& B&(B FpJJu} IN)vlj E;0sN@jO;v_Zy]xW` U@i932D$]dkH;H8yhDFr;uU=4J*mf;ؗ*ycpΉ2ڌ嶞YQCxsUi󪙕c_O\eG3nřm)To||sU Ts?ܬ+sk.|tx^u}I!~.JDuj\EϷݽkȲ{bPvX5n2OWdwrV8\= =+f@@V،S. H昀iQ  +.yR~`sܔaGQ=sns/cqhz_r*yM#uy+OxrƌOí֘_Y䣞[03 ’?lqMcI 2_Ҍp9D'6Gz!B0rNUyt1 D"Y׺EAf|}Wku+SE&vo1<>ݔx骄VĊ3j; p@^nƠ~uO0G5bMq\Zp.hXEAA!h+± škzCTPrKӡ G !/:eR^QZGtc4"p4܊P g0Бnn)a10Ta~j x!Q\]vZ0ިA φh= 9 !01 \ j]UL\S*[F8RTV`A,;'4pU A5:;,ω3#XcO$*Oŵ顷-j::u?PQtt8:ڮ{)|@yuwu+lʏ/`j^gͭC-JtMxAXZ D8U8ZEn/*W]WJe|}yM}lpY~̲39hg?Cr`fpsRHhМj{`ENP&!inSX/Hej_Nd{T(yqh͡¹oq3 ֓0LqA{X/7FgN?Vuu zVP$Mi(BPB%=JkRѷqz}xE]Q\\[> R)13DԎИ{4f]Y#=Y*tQPRUWgKXr_jS|]J{A)Av8Ҍ8Ifˠg=ϭvè-9VlV27|bnFWTx渢]x^t#GM+[s̞n*:M t_M魥6;Ϸ#m# t]UX H\WjbB>QPJH/ܬqr7@ȶ nS@*P8,I Y_FŠ#ȃr2! A41;T=ZUWyqɡșL 9͠\וlg t^is jl|_{vfoEq(-q8ʮW^4>`SS/>'sⓙQ?BTi1/w:1j3Sb Gܙ]յz T83MT aws2V5qFq{҉'`[=!(^."n{Q.)qdXnfl/85d!97ӥ|45@Lbbcs_&YJW2@GI7] S)5 DnZ=#}Ϩgg/nU 1(ssk.w=e7eԥe+\uW]9Sz0 jF̗ɟT46NV[;1;&or9jK|^&GWVpC 3˩n0=Ej*ұ!{ucjH^A,ծZws/(QCs> ѼϠ*ŧD3wޮ3mAO%;=J/,:[{lޜ{O>GB|zخq6 :}TIL+"YP0mǯBbj(REa4;,ehMr\XCyBH,2!PG5Sxlm!0OeETf30,8efX|h/NF^Zw9tV;;',2y!B%pj f>u?M Z WXYLX^5|^IӹMnн,)#UίBu*ᆴr(Ʈǒ0){CAj't/6Mx3?5p:ef t8{F7 =ZqJ׵ˑMbƃ gW/+EM%Zd-$ޏ'tf{߽&3lyݥg,uNvp:0؊@@`+r|?TL ?¦e-MP4Ex%G .]VKܫ 0i}z9txMlҕlZ)IN 25ک.cH) :meJc}}[b!HwOyGŁvEkr5f8+;EdDdu-Up ەPHBy$NPhbAЃ31XfQ ifb#nLG`z;H|)']NbA#T`"ͫgO0g]̙$G2ǟFOh:θvlWzh؏iŃ&GEUH .bbW<εi*]΅GX[7_Lb*=]~ۼ0]Jy_`޸| 5)6AAc`vޯ̉؊BD_:iyeU{ƅ)DtܯXEoY:4'k#Bx7ktAٜ'i3RwHޣQFw3v *G5ֻ\u|Ic \èդxhPEj&\n\Cֵ\Os%ng]!R Q$`*{GQH>6v/pѯ7ᒻ%gޞ&wǯ'TfP7LΈLMrĢihn3qҎϥiUu5 :J\3_E~OY8.z7-B<޸|U>E+9\x@Hн'L}z Exo˱ X͜ڔ9Uz'q/G{;XB/'{Joص\oZґV*̆@C7}:׼<{Լ|@Hyx{Yx2˙B5 ~`J1_NyL8-(;T~şpJR)tY]-N HS }z σÒļREes9`>rBP;W9p{>S&5(|Ô-ǠQXeS;^:o1M$ة4v[93ӽwJ$%jtSRb-IGx$NoWR <؞Rs9&;h\lFo8‹pc׎=KqV~pZzp>#DE')hbA έ{*Ijl'yegwi^ȿӭaγj;Kth䪷>kQeK e|m#s[͛4jCp eVq͔w+ HrYk_",aՕWlۡjYt_^,s}:Qa+q|e=J5&qK,J ;;Sar^v`Yh~WxZx/qn"1EzFlU[X7 lz!k>A$\1#y9I*N'nrg(ì=t0"q%]kf@GiZBWF!(ݡ% A߫-nL%8Z~ p`AUxZ$ǺdpӭN;xy)ϙϸעri(Ȩc`aZ*3Oڗc)B&{l/,=Oybyny/^+͢Ph;.\4]5K9R h $Ozk҇3"x"7n4ֈ.ѶCY}NUlT_EVt#|"X!^R;Gq6&i84/I]һGnΖN ݈?l^j{m|GJYmv*/OOΚMnU;\Fl<--ScRNwjjA NY>. аM D$ 9I*{#kyd x&%nYs ;;!e+$_jB1u g!ғ?kQgoMMJ/!4X*lŌߴ&fyj =xkL)xϖײǒBe18< YZӚp+Я]Pt4/AF] mZ=9ېĴMIp]& OTק#G[>䭘[͌4}awKPλ>~愰y瀻>~_cgD_E}bDe~vDH<2h'~*K(hAF <%ͲOUxj/-V`sSeٶR~uݤe i BUOQ[Z\(Gm޺}(EE6'cےW^-˝rnhrKmaWZ1.5)Л7 }4ް,-P GZ`7G npsnL=O\!fJB/#va *1NTuI;u\ew39}Z ]ܠtQQkMZwd:vp*.#;nS:lQ^OZsW  [Wbr}:i%qAs+%=f`k(p4{oߑ+B%}ɻMVǍN|KtFk+{'QxMh<>FmNza;[JQ]>]Tñ aj#$VW项;S"J|UA$NM[`qxFľx`aY?A!Fq]Si^1y )6XڹJV]l fֈ4- ʊ &TҢ^2S㯲jНhisE305aB.wlagWOwuGFRrXK+/l۰ٯz7G1yè4zxsHۀΛ{Ocfi1R3A5:ycV7e˞|g/f1UH5_d뾳p[㫖`ץ' neWT.d0h3 @,`)-ϩ4z ٳUc!W ТٷY5r"CweX\?I3L֐P'Y4F4[i3_e`Zut4ʽ6͟&"_@VEglVZaz\mNjw]ɔ@puF5S[Dej⫙Q@mqͺ_8Uq}u`я~}يZ[3g/&pƉ N+_#泦Ԃw''W4yV*S1wڛBcΫ;vܱ(R5"f5F+";;o^^Wnьr8^PgĞs$uWC5.>4N mHWQyrˤʣpp (7HXg#KBCqiZI?~jN; '{dV|- F&~0P941Y^MmŀhOJS@ub`2hUk[ڃU$B/gF 0T)tdžf( pEk=Xyvl)u3q2ڙA1hܔvXN+,+,ǯ#ela|אĵ 1>eO-6yV이ܷԘP@"wʤx5s{k1~{m^5:Eg{_*fshR]Z'={}b^Gt:.VXΦj s`4R(,/[hE`%^DW(\hWt9!cOWkF8/cBabga&Nfyg~4wDxa |og{/˩HsܻrKL~'xw5?/0uXL |f/d,L0MLU'3Y+gVa#ڶyTbk[ű{L+Xp"e*SuUۑt[r lWR]a垏ÆI3q_\WFqMSPoǫPoE Zloy{/zm l]]38t-~5/Lq'8Sͨ~z:_XRZᨬFwAv&Mmn6BQűe^_lj/gk }ӕZKLJzn|w^m7<Դ)Fn[ف=TScko7vu5=F{C%71aFoH½ԘI,JZnP@4lWoW)?s\t3z,Om6󊿫080)d މC f{~lqߢ 2>X/|icļb!Np37e> yUX|o¿Ŭ /x0W9lau\c-efcG zd RXzJCAYsvXV5NjQQ}!\1 4fy?xqۗcӄ9u]S_vV&/N5$s3,U8ར0A\i Y8$>]&j7tPH߶(j2{ BLѕf pT)p(ƺ35cbu* ԻˉϺ}loA}ԅe_ϋjӻث.&Ct7+ӳrE{;.O ~9\ c!j;x5v"Pz9{xOa\OFB`,W#kĜB\ʎ@ট?½zV 0pS.e Ëo.ݗ&A}q,S>V}N~d E.p-~5Ċ R>ڳV9v"ۯ{|5aT,W"*Ac (^Sqhcb{JJ!u>yݓw-:f1pl)"SݓW<.:^_r pk_3WblVmЧ@rĕm|'ļô>=yIirD_=-XVzKl^:06=aUoޚZCsBawl/׮`#;_*jDA]d> 9&E!qntvX&ͬ=p'Z.,('@(ؽmenaFVBh@j :Zgk!XI$7t^]_оTqr)<7]M1yDiY$7OLD9O}^׺qc!U3N"J Su춫Iw4؃c;R"m7Q!nQh(꣋bBZQP5oKO`X vn (թ9RF^!2sw7qZ)J2uKWQųzx-#850})ZZҵi;L.~o.gZxjvW/ [E_إ4S|8;8GHvP;xwcoXtz>AƂnQ[z TPϛ(ѣYVԼۿbr$pG88Dsi-(vVf@OmwuBvv%I`7']ԒO HoaRs`ư8ˉqAbOêҥ4!+wɽGns04֯,J ǘG.^|5I@IJTU3Hne61UIxԃX`7) }:Y=wǔ8a`i- e;ַ:E{G@8)ë&/P 0tj!VC WVIn|j^;Z4Z>n i7Z!ѝT)>D &to -јi1i_Õt[z#QdHVF1]鼌eŝ%P9 IN%IR`]ȳTPfMuw|D!9I L^}:f>ϓUEn)+"|95mlڂd)F! ܛ`UV,XZ~(tɎd!x[m<@($c()׽ɔTXt*^ ;v21b<x}~c T)^}]^:Z4(ԛ(VKonz]m3t? LCi+%a}٥XCWG%ez [kh&ݠ}UHHwvŃe~N RkFh÷". J_is$6A}vc\ɑ#XbK Z ޙ9?1^m`i$8+xAwe/ϞovtN_bФFTqˀ ^`pscL;~YIbXHS]|krA-^q?9PsHMws){_1]g}SmX6u,I9v+ZeߓN뛹&Et_wB}дUkǑ3,c#SB=I-m; OS>X"zMY1?i)$sL[CpKe.x(ys<($+':zF!c^W?²;@ mNjrk>3WYL<5zѲІE :v!㯂4Rs"|߮Ֆg8n@DPLn|8^%z;?xPA&):\A+ݑF+8D(h[F;4b{x̊xm.3g kɯ|{EɏF^3eYی@12g8Jܞ5M ¤zڮSsD]g"sKvFĎ/lPƼaXu֯;*#|=g1ڝ{5"iyfaǍ܂L9g-̧Og=J[ÀkK%tENMq0ewkWY.Ǥ;9(`LOU|t9D{;` AZ9(zX5) @y~MN vI눁ZX`UnC/̛k^Ns:{ӊGv;:2_uO16.ܵ5x p>[ .%{MJ5QSg ^ 6WT}dsECdl}͜co#ZnNHZxr緳[S9םO>bqi}dP㫯Q80Qmmli*e^42)/DYsՐ+QHdN%α񺉞KK(7=Zit#0>z:ݕ'95D"]N|=^ƈ\$-hF,} aRZC^cH> } PPi@<:~/>GcԐcNK뤥kã 9NgJrBkwV/ݥqOTWB祊Y׈\ ~"'< ם.0^7mi㥌nB]FzF}YpS(A8ZesЀgBx{rPk]OY~hHZ9(O$?6ö*,@Ұ^+E]E+N]!siF3BlNW%TtݟߥQ5ZaQ# W-5wj'^|6s}7KL0xU8=SiG猴(ǧ@=u/+{)}MAoWAzBB #]8Ivi{h}7JcB[L}|j;InGp NZ_;4qUI,iRB6(7FWOvt몠 2`GXB[x*,М:u+W-*_upc h rb<0aJh̑A7Ғ8Һ;KF 5&*%UK|hQKh\uNS%{->nrЗ/]Ёɣl6 V+Qa{>;ױaHh–W0>7UPv"f2CJ !<)2ș \<g#˫a r2W B AF(vΝ'WkҼ-=5f]\߯d aZ D+^RU'q#;JF!hFkE/`ǫ唦h j: Z^nƱɝ^!턡[}wjM= b]/i8h:e0s)oDkkÁamZBcMw7_Tq6HH,6 2%4t 8$ȼ'; ݴ&Π_rF93Äy邸b9"F< h*+Ps%wj.Dut䚂hGojoaB-ލ=qMy'½K*Ot1 ;r?i5'(䢕䁢oƅ%򯪛ԴhJ!HkBzԓ!yzu{̘4hw&5~۽.=@UV`քP5kwm]Nĉ>8 :(%l^ rnBJߝ+Ƥ{\UD_?Xq SR6):/_{kbHTZ=Ŧ9u=ЄU8Mzz"blj y^I [BV{U^ߒw0_D.bo<ꯪ5_y9 .[= ~V& PP3w;޹&TS.YzL!wϰYR ͙Z_z4. |`|V .q^A)[,tnLUGU^$u%g+׳X}/s%a Md|\.u?z~r21O>:'5)J=2WuxivZ7XsjCNb.X @QXƸ(D׈=`geWH$Cf%t!E9 X| ̮We\Uv?{,4 f]ԥu" ϝHx/4JM  R[]p1BD Tqt]SESf5kf`ԝo@dP0d!㛶ZnB#ʇ?gm+122|FUX ]ǯtE? /?rh΢j> 5HEOg dޝ[`[hק =?Gn{$KoWN=%M߿)MqAQV,} XrabT\]E#rSQp/klq*n,&+=xV# !x!lK`hn tx.fἀi!x_'7Kf|S4Kpڃ8:V롎d4EP;=dDw~|:nƘ wLvrxtF9EvJ-l55y </duRdᮕϽmw9[/CgXVe 8 TW^ssr:Gmhb-sl aTSh|- <q1w %~b#14kR7!u゚ɾ yK9KO}%qF}R̦G%H(GԽ+/w痓JN6z,@R< ?x~ =YNW}"5W[}ÏZ3n^LwLp0,lhMz=ypFVS5Yh[8Zu %z>s5Q<3^XϞz/ ZNQ-@+6R A2iOp6K_VelHr_j!_WPC K jO3!A{A|:jf\&fW2oyX6Y}c &ڑFO|J}M|kGU  V|?9]]Jxz,08XMIHGn9vD ʼnsy|4n} da‘s*ϋa!Ccs1ܧU{aFJmja| 1c? Pbߕ9 LcZ}NJKh+k.߷j븬OEɮÔBiVbNahu*εqgG.D[)wȅmLc拗?ZzR@.3)t|O`5oH&Я3nŬh  qd%_X@7 6)WnQSt_Gwn;AlM[0E'[ºCٯ'Hx &Ҭ%# |LiHK㝞fR-.x[Ԑ1qoMykS&g<,v>=SK>XG}-էkbΙ]1:sxB*K>~͉jXj)M't#i7lnh/2z aBx;3`dۦi}NR; ɚaOi3X&nM%Sơ`F KɤMbK V%x X3-߻5هNu`cL/~^^urv0c=}]eL`췌; i~@ϢeOVƭ5N?bJOS=r4+CL!ag7Kp*ߝHI,DQ7Wh[y CיS"ZL{dyC*Ѝ _-yVtkӏ8Z|ډp-.fHJv;-(TOC Q[r}xy;ҭ؟rlo4\\'l9 ~J J\%/yE:[( 4ں#3;#R,@q4}[_ :Ʒ1[:_+դW)'7IնC32<-hVu_Yɭ}tӅP+ک#'cmt\T< 7&.mKhzbi|JtfB'aӳyLWrCD5W3{p#:- Wrv=pL[çLwj}0U%z)3,dL)MLݳԳ|W^Ω{<+Y+b W}yoĦ K-CQ&"\|ɿz?6R'(+d;R˝sewPQ1-aM/q6's9Θk oJ-mˈr҉t(>C1!Ap#}:3;4jx۲ߺAN/لyndssoLU)(F+޶VG6Fx8敤nܘu!lc 6 A@ZQY=32V0)22)cEeɋ篹qM2w !Ͳ32KY˖9Fъ):g/k".a^{Es1M)5ss+16(}S *>Q8[8==Cq^ mxLbédECPo Ģ3 |xWD9MeJz4*B .`AYy~V?a Dv wDt o HY͔3f[~tpVn6;\|]zRZ[}v$kFXd/ۈ nO*CPй0.eD%/,vN@w ' lQvU `݊f֕k׹? H/Pue(zaN%+gp+\Ǩ#"*0i2OuM\r9TG5)QcKf剏:fp|jQܸ^!Wݡia1 k긵fv"#բI_y:" zut(^͗Ց+^Z,.p2D-8ͣ3 ?jn^g5 됗(1c8[MGVzz`ql;V0! ր̞j-hǯԲ)_(s5A 3I:$ygJ(mƫr91ף ^$+O/lEfhnk# ު^VRd ngtZ%(w|ml-.1LVշVSƻ570u;z;_:7Oow`?TlmzUd#]UẠm}yv:{3Zyu;nDG(tGў*EY8^孮oţ_|܍R4%l(Y G{dBē(zÈ*Sngv "=3kʸtA/ -d-P&EP=tBsѭ=Z~Ha$ta |>pk jB?r[p\Bl=tp-ژVЅαCzK܊Gx#Qg$zHqx8mB=P&k 2h%vj[m&fE{u,jCbQX!qg<f+KUZF.d{Ѕn8^O$^3s3y"^1+v(+t3ј_ewk6Ј]{/5(b͖Q-l;d8wqZ79ᘆ6U꼿ΕhKI/iXbe|v솠q^cX՗^/%f&Cc` ݹK([ڸp*^?7oODuV.k $Ai6_x\h{R. rW j͐|߇ۊd3@]4j kX >I D7BlEQ }nʵ [S+)'`^vGfF[c! I]NÔ\b5n~/{v-K*,$^Pk|wc%LICX^]E0nW|:J@Sp|ĥ%.X/OsѢ.lRFd.t/BT*;]W*\t }~W?#P0=s? % Iכf"  ~nBD.KُZ0 9SBX@wyhS>;;D!7ځh>#eD5heoy_$w{>EGnjМBμHm̸ Cט;׎#_: +o%; Qfz뀋ru2,WI sV3˨.{! ; Fibʢ$nAơr NL  e_~=lŞh "Î}/;Gpud\k'-XOBM3"YƬeYɟha4) ɐqBK@6ˑ%q39 5>u`=`f:oHPO+V!Cx力3L_>-mTΣ)=q</hvNBbd, +.;PJjk)7D &U8ki{Aج\Ӹ%>8SA !lUEjzVlNJ~TjQO9 L"~]yGקkL{G~AkOnspn+a T,QSܟVMч-k0CeY+PV͌g6r=˞3hfvo$-T b1ZALGѻ֙בu{J}Lmi1]ɏl7tJQ=Gtr1g4Noz xzi>øtkI#lvGՐ._=gn{ m8 _VVk@)cIeg E'a Ż'm\YVPg3U4Jr2e7Vu`8.3gV >xG_;SUqGs K h!gԫ(|%laOB|S㬬boZ\?KZIؙ[o7J nk+$צG;Hn]ԙh^A3Qx2ᑚcV:(uɯUiUYCɫ'+E h0FT2=b襔eN H('hzAVZ`lJ/sak1q H-E55vç]%`.rXkI);'ͧX>aE} /#'_ȚwXGN"h;=+WS/cx=pϒ@3߻߻RӡnKV:6b@˜Zm=;ӊ*zqhaz|H&m6":u !X>t0i%Lδv01 ꌊ!X"6eެZ&NHv'Qy^~tz? PlNȱ6Fp 8~Y`sQR̠G.%T2?=;G(n5uD 7C_%1OԸ?FTR,uֱR F1Q(vm>Q,|>)~ka{kbΉ#H' e]M|UVd ex2 e9 7}+fԕٌ_v8KVvb߲{) Nu2O?Pjz^G {+sUF=~4`i:_/7^k.J7 HGPtVOQunI""\s[Ok&r9'gNjZhmGmJ S9 0ӂJx&_Ss1߶A r]UkO]ۦ]'݇Y/ͬVuXMK= ?(bܶRNXBHfLhUƩ2ehf\3C/ =Vw'aь T/ Woo0*LλU1c>H7ٳƶ RugKվ75Ѐ8ͿIn;W{\!S =\Y:1RUtgT}]G׍e:(9;#qy:y^0Uދ:{_!{~G QYXtҞZGjA8ifF=WB!M$B )u~؛?*;K7"Mn_MpuyH>:W=m#):\U4j^~LS [ ,:}6LZ .ILB&RօauKi Qֶ’v3:^?A -j GO>¯8^5#$sT>IH-Q-V8ncFC7?*P9+\+tAc`PJxʾ\W'aǶz "u*<dp}~„Ծmg q̺֣3msƹˁE7*5Sg^mc\"%ԗ=Qvf(A dy/g {uL#TkC~B) cf!`U"j#U 6%`Yzv?|*Z%]>.6E-caˈki]) 3.@^<*uaswn3Ϯ=x`@gwk(xh zWPc?h , q)^xw[WfoXj1cs 'aYݒFG1r#A@[^뮻v%z榹Ke@eih7nDrҸ'QB}DIuz?S0)>QVwf dcь>L.qߌGpѬvrUcԪG o@CP )Əq"«D.2"D@WONjv~A;P;U* A &$}L|%@UD/{[8ddP 54M=}'G<2SZ8BRU 5YW0l֍MZ+7~7]جCC>\UnE^1}?_֡ n%|P_+eX|Lbُ^[~Y+9,n _j{{}N/n:$:_=Tzt"mfHv5X*îQ s25%3;'hm-0>ݠ0O;w4D,UrZ2"iXUz-d+ʆ5tO󭴢ĈAu$̅ۇ.Y| T5 fgQ|!3Jԣ5AsePo~Y>TGΰQFCfGj9/ ?]!Aʠ{h1u{(s+emA|kLdu'8>HV j妖ls;IXahMmMДmkZXYO2!ƦM;5 :֝{mȉy8̜E~8_543a,ͧ<,R0EW>~5kQ-#g4|'r _%O>1y؍^GgQ40 |ZD_]sW55sLew4=<{mnr,ĿM"G1=ߞ(gք5~\gFvdjyD Du@*&48fH3-^!$B[o7i N]"m>b L0CME0c|-i a#ղgEF)(U/=GA=ډvMQ|ee  Sf& banoh g3Ok[IOї#zPdԥF8><0[àd) (c}ed.mTƘuxHwO}qskW9R IA/L zVzOH(\d[nr7sJ͛ZG|Yn^@˱7ڷs;?zʀG`R#S a$K|ʯ4ўf.{M5 xi)JLj= &|SFHV%j>\1`'Ƶ߇•P1:8Y,t3 8nw8e'"&T(.ZC'Vl|eo#.p3îj]'],x͹z`?XVWP 'R<ݿ=+~̳#f|O@ Z/0rMU)(4AN s sB>&n,)\ad nYÂQƏIlz!k:^P=bk\/ h_ʅY¶wgM^f1=qZhag'`,Ͱ>KqBtww͊çܐ9]kBNŠ JVZ' _B?hrR>ăW:Q-솧}R57Hmt+pPBﴋlMf^Sh|\HHA{$yOe-R>]%9R$"u_uDR:QBnwss9T3jt8_xK)Q^5yM\ؒO[z 0TEz4_e_K3Yc _U٭Xg#Bs 6#4RUgO|]YȘCag6"W Ҳ~--\h%'U1@νZ[PN걇+_8I@Ko2ۼP>0oim8WXc-,nUK_]ptWP l??5I?|܏`!6#<)fI%S;$m/Sg;08CetZ8z,Ao((BHy'toye `_u]öRB#}  p%0p|ЭW I]+V`UyObhS>#L|$s\ ef/W[8 %lsҙcpͮq82>ݞ1jϯt?Kا!}av!~,|x$t;'HHMC*rk ԰(H=wX\ \tI րPШ*A t  WUm_/rp~܆- VACCTXݬ36%l{ldYjMȘ̒ F> ^fW#oPknkSfNqʫ/㶵-Au\7؈Q{ YըBYmq :fL>'ԃN~=õ֓EeKC8Rj^FFjWȍ9<{W-ZxıtQΚϖC3W"垍Ma/C{oTiM% |b}ϕ٨?ul9-Cho`sKeɈxGhHKAؙ' C-& sv?X[EvhqKl n8ej`Y)(7ɟ`hWnr}7yjl8.~1!1%.`JǽxWL<ޥځ#lз|v_]W淔wMsy7v}Lr'l[=!s.Wjae&|UeGt8|UtcpY-߁*{ܝO}*~0.r-31O;?Qb|U|G{bL*mnz*q%Ƴtˮ'Z ?hM tu;4/[8ES8/@ x}6ۻ_u-n> GZqxN F4I_IFٟdY* tQ vQ`7:~2 cn>i۸Jx 4qfQgW?2ۦ.V2J/hxa2Q_aNӃ6ls:yW6 V%pfVzI7pg1%#ᴨj2{zqD3ݫ˗> yam- ]h1\=M35h@XbҝHdzPlW㣄Qp2P C_f;WK +Vd̬7\Y4]17+w-hoJIqFncz'pe+vNNQ) $)l>LpƴAT!\'@=89S~aUYitd>8-+\?wo|n-^Lbw!1ոv7O6֣dCfj ? vԢl1U@a({`S!SZTQX B0X?7zg2Zν ͜U'RE l43CS HDB;cvB^Wb,2J^oy^%ё#vx B?B@G ]wV-ߡ(eVV'<'N?@ Z NayVkGU`.qMmJ! c{7; *rOF N>uPV\mq{FP1&CñmM_5<+Ks] 19/r*]~HYPsAyF*e w1NnDa쇔I]ýk+Mgv{b)R#z-R}I{B‘8ΧptG?%^60=Fq晅F1؁llc~aX7M䄏`+,ٿyH ˵&HZDO|> |CƇӹ:z4?Qi}p~n-ms= [缊;&v꒪C/$G, (umPiUU^u]cŸP37:6qcP"3o7 =X ᯞ^V.[nS^nc| ?K t1>e>wz;Pxlb9yRz&!B?d;ъQkj^1J^YP{Qkoz=m KK\e[^T`r&1tJ.Ҫ\Jksh\YYfjա +|rQجg O+/W=5vW0i8p NN ޭOWMu!Ǹ~g 흇rVp/} S 4Wcf[jj! bzxlnJ=݋@lMӏH93֬15o٬<T^gf*S޽\UJ@@OY")7mD2` rL7wW莳% ~rٞ_vVeO*7݁!+; cx;e6|\1aq.S/ّɰ\OpZwF5 4hX_mZjvN IL0j PmMgO#h5YDq_}UGhBf`ȟ,/vg N`lv1-网JU(ߘF^T|5͞6mԦʪ&i;2gGC񾹫ꍔ6U{|PD .U9,0UFQfc EmxҾ{tnΟaҕ:X2{[^!Ӧ:xF7A.qKi*+56t)rOR_;FҩyViN6ۊ."lb1 p98!Nz#?,2V=a8=39zNN[^KTsrG Q16 (@/x;`[ t&8(gYBw;pKչơ:n`[܊C \ZOZw?Z㔛&{cC_<:!|$2_;Q,Y5"|y4+<"L3Xp$̹L3?d5NBR 'r0 # _QqGp Q"`˳c Qnq@k }OiQX{]BӋU$&kOzWƧ胆ͳLEoX`@]v$9lMFR>P)|J\g's||\󒫯5<47f$=aգyd Sd? +H)Hgm Oh`h7- _L\:!٩Y+ק( J @uՊ ?; {J(l8ȏЛ.EgZv^EO-Fo"ZDCV;g2oIɂX 7fl5dZ`vx M p]؉eY[F;>7o=V:T86U~WRZ#ПѶڄf =ܘ[2RoٯMr:} !en8k0L~/$תhd~ x8&T - 9By!}i;ivxL`d(nyPv |J6Mq/TK9^p 3Q!Å-S,0jJj' VIVYbK1=#{2+j9iZk7zh{MQ5Lӭog爖~)3fQ< ᥷#A8>o}WYM~{8Zloyfq`=IU) h~}T;2hJojۥǔ/|عaz(ㄙkh&#2tJ(Ԣ`bj:E)B(i&ApHiZ XnsVxA=@x.tk?~t^]nr|ݢ8}iž"FZ=\x(b|#</\ֹ>3y Aǻi!auyȉyGQ|de֯6X}iב^J EN:3/ ̗W&eמqo~F*ḤX'vثH/&aJ}QO~S'Mr/n"w:qQԑ*A[eM?^gZ/r'2;g@9(*Cr|7.8]+irMP%S4l5nj.`y2wi@@:N^,Bsa~+O/ߥ_m=;!PKOI}W\DZ(|)*ԃ[ސp^)EoЋwV`Pb_uCw >*#>ݜdxCHgJ󖏴mNQT2 ]+L,pf¹4!/\՟((t_N28Jfl.H -U RyPMښ8;FBu7#*/4ֵ(>ZF9*јw<|"wCl_0 ?JO/>z YjH$QKi$+.@S" ޫze6MZ[(`xx %t{8tڌThB[!︁ҧjMHE8='WE꼐?Iz=Cu(dR "<ՔH_XZjo +ҲBȔ-ѹj: Xcm`o2%YD脘MWy/UgL6jǢ<[hɫʲOpMh,\WHx1mFJ]ok-^S<񔁈BȰ#5Hѩ<,zd~SE8[;\%0}ߓhH ,j?Ӆ,쭦Puj=A{rBP{wOOW.-ON~kЃG_ 86+qzՅՙ6xcJ7}Eܕ`Ba#ڪZs椙yte_=]e!D:h-~e/N|\*{Ӂ뎷{qʸKפ-elGZʙvr+wRX>n8wayB#4Գݔۅ)=W|yEj$韈p7qG/!">p!O}6A5bPm >rFcGG 3*mΐ8CŪ6Z‡^^Zy--8@MUQq$qu[ yέ4+׋ewϭS*#etC7(nauaeS<`&so rOx X߶ qv w/#v9޻x`ƋOu۸g/S9=3JI `X¾?8O"RPE(W9#adOf*UMwڲ&WZĸ)fɲlCBȰwR1pFD5t'X@O:aeJ9+^쐨O7M,{5xΏ;uO9$ǦݵЏ2YxAnIJ'.|/<^=z^Bp>'Y>pZDF TGx˫:eE"|)RV:jH),9k/UI|Iobo~c}jeU%Hrރe o{La)U;F7GKL864RjGwEvC K|x_)_{Iܩ MZ|9`-k8#2d TδNWV,'.w*^" {+2%1j>79TKvwclAQE6ZDz嵛c =щ|ӅHp܌ڃ܄OVP/abP{+ucΜXu҂=_Qq#<ˡ72q2 n4*+GW6uUU gP>%#SYc&bzJԈ<+w͙/WKM%5j\e~,g9iT~TP0KKl-^N K] VI[ ZI+=A}:m@Lߣ~A͠u:zc4CyS|z;{m|Gqκ5 _ /M !#l{`4U0۠AȈtjp\ڊa^N)g_vD836MkeB.>8},1#4w5X'^skz*?^=5uU([3b82&T#qcsqgd|̪>eP&보NkZ7`4AQ\AX#$T#ȶ:]^AI~#yFؽA|;6Z~-0XܹvZ<E8QĕXbpV,uѡgy4`wͥ2O/Ql^דA4Xóߧ^=ښO㞛_flѱQ|'ǡQIJ_P⡔?ҒeVKcI˽#OU~'z:@EPxbfP׺թ~h H j\cM#tl/sij>W u0$+1h9>B4[18ڣYas^zhcLҡ{\Ad\qr/{Oէ|FWȚ~[^L#EQwGzN 'ZYZ)A&࠙dwrwHˤW;  j4(~c_1 /RuSEUB'A-..|Pbk4G^N"DF l3OX>s ew#t\XD@겳4%rs;>Xnh޼E*`^ˣ+u|9!1ܹVOA+WԸ\@A~$]&؉-*q |yD X3s CBE G6 h8~_us cf8w^yh;tA|_`?LQ.CXbaejh$0FlDpd `OB]X" pF̴MO&IhZWɅuww!n=s=gکJKyc#ܑ3k,_&v=h/t(mz}K>UV: lkG]I r즀y0@3{_ V!\,$=/*njh~_SBA-X\|Н&pv~=Ͻ|X{I&&fF΅5' zx0^r v %:)sg롋A{ĊB/g3\ : qn7k| sٟ`8J'Cz#PpTZn"ʮ(2pMۛSvyg1l@o\w7S}26'zBa hZ ḿktLXuك DA'eJX:{ xysiaj=U-rjBgO{(mȪ\gO:udB:Ⰶ~6/#ŦiQoQ >dht&'dy $Dk֬Gg4hFh8EJ)q+L+ jVr|(?+$xNYuKtr}-=^E(uZ90M55a:WScաqS'hnu ڐETo#Q`%=JC0LU&wu>Odc}ػB7 95H.5ssK% _U4TwC!"ʞwnE+2vaS;j6rWE3D.$N0St"t+՟S(dsWda ),XqxjS l{*fQuz1rh2KO OՅ3ۗ@w~U۱YaB^6Rj;a.Ǩ/?jxȣN= (?*`kD;JofQI 86wWI )~v+Z||Ҧ>О'AJo=!*}=J[K f@I1]TfPש v9 $g[&=KcI}'YSL7GZ2l)s> >ãʦ}{O`!ǵ@>[axR vzA(3\cN"Y&hR-bbEk{@\}i9Vi;#>CV#-).@rU}1gu7QBĎv-Lj+TSbSU[<WiV>7$`P8h7NS WvHSp1- k4Q:]EFNr'$^ӚrܦF yЫo@@Ŋ>g}<%W>XܒFqK91Ay;4 $O0'7p,Gw 2{&5ͳzݔϸglJyZ@IU>񁰢.K)T(&ws}~ Leko1jXI$ֶo;ZNh(;]l$)a6^xI xGLM(icZza|bдGkF RC@BSk%v48j%\'lU_ίҘ2_/xj>R' p*$ȤUCsyVp@$eH~t/<{Uh&i''$1+M]z,9b3POĹK72^mΔv\@k t" 0WHJ'iqۊlڑURijnOfwL#+).lr~`cN; ,m/6={3=hUnmV`=jCWI=d13݁^T(./gXDf/(*8)X\!7Q0%~\ZŸ xþIyǹ;B I]Z}dx8 +'\."8+6P]\]{O݅:,rlaV?3K|T}QsMph \H˘/[EUfEYґP=(DEkkw5($NhK"ml8ՔS |,UB;އ"<g. h3G,KWxshBWI<\IH;)Q^sv6sK0Q_aI´3#*Q3\&%@\6%cGY脭X.PS@P~nd+t#y-ԘPgE+g 0-agt5(DtD͋ Pe~ 4ߔD۬;SvspbTy5gfY 9ZK *&OWb+MW`UUХH17o(6iBlM^!Ƀ3I^D3!L?}U;N/`ܬ4rL}3kFJa Z=a AvaqFj|;pUi%e㾣hZM3֍;]ˋKK\1dUŚl<+/ ڦ5vVٴa∯dyp>Y: k ^@7c0e4~S(93V-W!đ`=P:a9K$g*ہ?O⫚Z [K%&GJ\i-]">:;/2EU, qYB\a*qSj}P?&}Rvxh$6bW"eAT(&Nda0"_+vZ<5* K'BqǍe9I 4~K1 6;Q ȫʵ?š\md/k&vl@w*ٕK6&* n:;N+~%8)n vV0j{TkGL;T۝y{ 4ZwOs)$嗮tyϢȟC fu32ULWo kD[T'R f]{Fbq֞:1j&8.s2_b ]Ыܦt*"d, S_b_nƔ5ah_G0;˞@jkvLw:VB7#n;Y {(1B|K#:8iE=CzE-z+Y6 ] Oi+2=XH*J2E?zȌbbC6 UTΖWJhZE+zx-CW*屉 6$ȷw*{ b4YIgGlJL2Zc:怢uŲF]O&l;qZ]>OǔuaVW:UkJbłfב_=TS O\eVAL}%.W MSt➞kQ0r >V#_a;t j3ljZ7CdV؀C~X=Eߥ1jsX_%ynasc/V !7#SWkj 3gqp@+}5T 6O% @*jgOǑ;A)t@):}123"*朓qvP5^P?)Ac<fn^n"&Ai:Z |TLsrl7fوŻP&1[RRh joQ{ھ_ZTzljaGa )f p5Y7puSܫzGl)]qp?[D8$uF\MjX~KEJQ~82vgٟLblj`ڕI+ Km;7ig36M/IrܡީRzÆM ;#\:Ȁ֭P2mc uPϝduxG֐C7,GՒ:wr@֝B2ಞOV74glc7ay+CBfJW@K5˱>cubH-w-2_%x/Fc7ƻL>b `>WYh5Λx(֦Vj]#֋'C=Ug+`0ucאS'roj!57Yhd@Y‹1Ԗ"0azEV ؃ƒ~' 6TRZ0p2}W1ђ=ƀ=D7bj~:+*,mm]b(io݊[RRzGU5Ӌ q-(0,j~/xGO_mͭ*}g6Ύ~ 1`2U)I%טweuI?e&>u{m0ߥAt14Ȁ_c,5KR\pEvbW#9۞DGn?zqAcp >"X j4I⠿9/`:TZt'6v;sGS-Ĉ> ~:[~n ȩyTJR2k(fIh{LLdOey"@Nv45GDx׎XmC2b4w*Gg`Хs P=VSRNL/Ws݄"pPZBbS FF9܅?7ԢpXwu7| 48K( Gz1'M`vI$hTjL9F*I˟<ʸi{  ASmvرAD 8Č;g.~OorN(ϑSR]7觷Or\xn\Zk&#ڌ+"63_=nDVm86\?ǕOo'JVaCvV(=Dl|E[/ B[QY)4"1&ATx7QeiE`d <c=׭-UL/$0ߋ[5s ~cִ =P7x16ᎄ$ޔ``D-'fr-W6_yhbol- k~`#In=sTgDC_sruHMh]}h_de\`,+81F8DxEltK#B#u iZ"Lau~[} ,S zgvQpZzV|$twPU揪P#$=zˡnYNWn;џ^ WnJ,Ύz֝g-c;]D0洞>q.Zhnm(SvZ|骏)7u{1ϙ#4.Eh7_-5zy% we +9խ)W#>d o}GMI9=E_ =w_نeru腅٠+tD*{ J0s/ %2?wQ/?43?X#T B6'kp$"/;*@D5a((R 0Ĥ%֬]~uZIXj^g'^z' ggJ^$M'0~RZY=p3]yF /.S>8;/K6 !ՕSi z!Έ'J ˎArqD;k=7ӝ3@4@3wZW6NXd_a#>YHi,zwTw՜&7fgW5&A\|m$b2 M2BROvaN7LdkPkƮ̗r1)LdMBO>.]JVJ.׳_G qxisOH_+thB&Kvgɵ0c>~߯ N!0N-`aW>*v(EtHL`kaʁ@|Xg"b9x|)@=Z8YI}K[IJ=+gV ]xX:9!/z*70IB|W*/C ³ZHloN:;jA JB-tht.$9_z,~A3{4d*OB_]X|-7?IAWa\K]mtҥalsxFLot`SP7qOn}+689z%TkK ?؝Ϟ2vA96SCB6t'rϥ"pI!b@97|pmD(9c(%OUq5=◡C8!x> ?JaEWㆱ}{S}x,0ݙ!˰"Vh퐼8>dC00DچDj!{4?rug5rI!L0@*<]Mҫu;Qs1IUGSGu_?F}Dw{izIV5d&"kh*VbbzpTgbVydك-So&.MQhoacia JւlUen5jn2KaFtDVAC>`[!y/((1>eE r>W^5Lj5>]=i|գt]X%kQJ6wv}vw/͙cӎqL;[nA_\DNxtjkSm^԰or%شYS[ ny+jX5<-@x|*۸e% Õ[wl.ܖv]bTJ vݘ3fUJ~#GDs|'b}(%BOz B4"\ǻi]sgPvƏd]^c$Fʕ?E"%b;-@* yG~zr%tIkr +F"u 5K5lHCUXSx;t;ĭ? w/ҠeNj㦦/t\kj {Q{*yDZĢiE]GIԻ0X{\WHPaY-2֒宙re E_VeH:0/OBI^ \Iл3߻^t$=d҈L{ ҍA22B_(Ք QtW{'. e=8aQsYW\Q]/25)2 ݷ̺1 GMORt.Xgd:Q5oz׹ƹ`OцO ܻvsWn6PGAFg✥ܜk\Z䥗Ag|IeVl7}| [h)iRxQJ5~OzVSNlwc<@4^ivA= SYLW|ql/*O,b)e#yv;IW%DegnH(Y`q{:ψ90́k7/0vQ4x(UΖ28u[TUlN6\zZ17 >1?lFo`sbgsė뻂]P25ze=O9V^Kdsov 2І6{m 2bSl3M(wWA=O9Y9;~鯔HyWSʄ"uykdPem,\XgT3 ^/vgOhoVv>|*:\3eTE4;@,:ARz]k_MMU94c/n._C 30Z Udt窠>&zdyRB'ЫPS wZ!6D&TE¥ʮݹ׮tv@:na+gpwuX6kܲKAgfF wUq"8*gj:VJ4a3Ŷrj/Jlj˞@EY"Җs+VKʩxCi"nt[xQujx^Ez6אtc+SSЊi4X5Jdpή /Ib%Shz<|?Eɶm{.5)ybX.+rtu 0y]xGd5:z)3 w9Y&Kռg(u 7nл潎6۩uWʓ{AT ]E/2:B8Vu43#1;׳,z,7B.}~b&FqPOP5֋(_hGc~K %cD B<5OٔUjb1HV^yFnj^SQeϘSo!V'eQ|Rxa~.7ۍ.Hl!Q<{蠄PG*R *Y`&E8l>6jj[77"cET=6rzvy%O=\uEnyNU~,G|#٦~RiA[ ?ޣTq[A0jaY]pޝf;lv0ߠXJ>G!ɠn+fQ̣=EXs͠nڜ]-JHvq j@sQ]ʈe##_:_r LKK34BnOexY[^X@[& #zGXN4 b=]Ȝ#/]q b{vD(\Y%ǥv֚ъ(|OOn yR- ͣ*'D_4^3:&,?U-Ew*]FQMdn8^Uc5C I@ٳQTߛjPZQ~eFMNqV$!=[h  5 '[Z!5,-脞2_:)Ji >rN]}]%CSS^˚U(Q.gh`3Ec jfq{#f倐Ezܤ18zT߷[TSzR݊lfgRdѰQR ZizW&EAUɼ✲3$MVj1QSR(M|R^ȳM6Ha1j%DĪit1KF U92K )?zܠi Qߏ#TB8!9S{uSy 6% FJ5ztUk\LO (O>7@bhS-3~.@;)[bxS P~ f fS>yy>fnrMNk}h"ֺ j,c <V9ڎk7"ϙ3841;~-_̏Wږ;^@2J=nPCٝ [ jWS3*k@Y:ʹ> >Њw qN(Sc~ٲ *fN z,Zw$+0$6{?`4B ݅u׫PܷD .e;;6xpT5WqȦڼG3\qصS6 OWKW553M2l(wXxw"aÍUI9Se6(䰟X=cD"hz"t"눈tdoJlGRD()#_}QaSEdbwqT8o='C.\%nMQzF84="&}ITl:Lt;R pPQ΁#Z8aSZ^('h|zgnE\iJkDrF|iZM@h#ؓW+jvx}bUq D)[1*}vPKa CXiB-iZaD*㉡:#=pP4rاQSb2j( ȒUiz}؝F9qjbKw +zٝd2F#] nwcSʊ6)chw hK?ckNꯨj>9#a.O֜C`9?8ߦ)ffBOkٹ u8dyxǭzZ$ y,[,J`<''a[;;D\(8E $;jdb?LF32uIXdbN5RO-":a-m*֕vNN^̄wO3")|=T * LWV0ێMa۸ ׬.3{ [ior(xųTQc "w1ݳ'/[Ԉ`/Ii8v']Xz} ?''|,x-#нi:"MY? j,ir++ Wa uS7 x^jMEoT2 ޞܠDW~Vܪ;Zk&S.9.DX(bEº%tV"ZLRzfHʚIe\N qnIZ.+rP`ucN֓sz4T/IWB n5W(2$f+4CИ3&*MV|&&hU";|*CS&ж(JNL^WyZ'y`N۟Zj(T};GUt~{0Snf2v)Ѥ+xaj2%CpBH-aTNq Z&O㱿sW eؼpEC4W-xR>.InKQ͜ۄ70_)7U${Ga8bmx?Pa,C%e"`E: ~j~ FoL_*& l*L|$ g_MWt/5EMRzLYn-d{O%mB%:SUA;Gظ# T#n#f| \QH;9+_@SSN@d9J֯PE8{Yv9+5 t9ZܦUI-ܶnjZ:\C$|VQߌ]u:G %/UfsWgpcFFUf)UMC J^Fe\Q8ٮR'Jvy;PJA8Αu`q0?B?\' ʷ+?EO3R2_;lL[JW`Y6`*<{mHJ1H̾Tk!"e̗ȋՇW@kW2gjlknueglilriעL;W.VGb 4u:\Z;-N c5;u%ؓȚ:#tfo NBثe2l&}0uOuNѪ-Xj| |+h,/#\LCi%i&qlƧj-9p|%vlԳ?4}!@ix8(T-VM N@85c@8ڎe_!8%΄wD؀h1`*]qTqb&ٞE kX' <(_4f%0RW3x,_Q cq,etO_ ,q wW3oh+j{jPqwiP'sY7As׸K}ɖqCOnK3'>Dr|E2fN&*9N,`_׉ۄ(XM 1ZܘPwlpvPi9ž^0(}g*A"7:&-rީ>̝a⮱yG>hOyS8>[Y,c_a{Og!yOؘT$^+P]Ҵ1sI.A8.EX66$|S$U;m]Bl&0SCx10:b{Yct>S֊R`t{S_A^pH2diRچH{%o Ur<݉0\;WNp 7?Sxo##W ŠLw :|l>^4rLE!hNWLJi"y(R >t Q{)֥ ymmWYlE)8L鵭VU+5uhU1`FF+s'k5TIp6IMN,c MSk]Vsڽz=Ԏn֪}^89{rRʶQ5+FFMs_}ni-w2tPq{Αʌ0 îk#wY(G@4+^|CcfdJ֕07xnbZDFheN(_|*©W؞+BA=MdܐݓsCNEsbѲ^3m2F8E]={EXXiG 0v b}FBp cdڱyʎz)VMUP-^C 0KhCԺ8Ϭ;(PC,eOr<'ň4?!xI/2=8*xMG~i_7$&dj- $skܜM];G?p8uɻc)?;ɫSs$N&* 8><4U4{vOs ΪCXxEG;jRoy-mZ;O8dCR )a+&l8܌B|Elߒ0Wk剼ˌh_ O#?uk:e'ڥ^NJwwPBIGF'/ 9D`MMF񚺤4;W&<{VܤR+jCz+h_FǓPxmf.C|{ܦ͸[]z2_j*&|Đa~XUmyV6tVp癪^Mf K%41LZ]@Snԛ߾xG'jUhDuFoQ dN ^h T jt6,jkui6|< kq\i:9zeDԋ1Th[\껰 oI#W>hGV# mGne}Oj2 Ͷ;F+n 0-|POZOkYyZ]9>f ">!p3l{Ƕ720ϳѲ )ߤqXZnShQ# czf:EᯤG}􍦪Ie B-q3aY廼 50c6 ݶvGW`{>>ꡋdD6T!:zUCam<, U[CbaO~u28Z!duį> _Q^Fr }ɩ 5=}H0s8rcT^H?Ƈ-ֽH_*q_V:2=-beB.Zt|,HގsF~h'/bE^X_}K"%6xS>4x2W{6+qp=, v;Pȥ_ߵEtaH,{Dr2g{w^mj[:r+Px6<b(FmQ(?^;Bus?[,Pkuӣfy /k<ȷq}LP@F >10Źy7'z8,Kuۍ M*L^Q;-88 u /b?TY1m qFQV)S8oql<+:;cŰF1{O&ZhLLGJ+2&QNN5m^|qgxHFم br1l1ř@'SDK5Y~gz OK mǛb? ~BbyLf`}ɐTSɂ":c1 {Ҫ뺪T.$q(?* >]s UJehbנ$1+h2){kXc狹W;+Ѭ+ۄoLLw@%vﬨɰ}Hط0u_40pBg^e3A5 ;&QBk0Gfo۴w>{O!3!FTUB: U˞VM靭.%@4C\߼jMܲ| O|6s\ "F63EXn:7\ [%5%3E4n IVK7.{¿-]#)5?M BooLZ>[,h Wi%T.kYwOt2v7?3~lȢCyu3_L'#%2󐩛Z'TK@M 5,-M3Gu܋S4(6j2AJh*M)dß;ܣZ>b&N4ص?n hvdiXvB`.a%7qĵ|=QX޸1g~BRU6Ee .zܠ:Jc%.jG@jMԏ j3Op+$UK8]T^8,M3˧wKug J3wLaj弴XNQ2h5&\IaӪq\0 }<V.B{V|wgˍ6EhkJIENޘw;(̦8C* zQBo[.ڐx7$ pMaxdRߝVP\  aHtp7?or&Ln+}K[ai =ۛNlz}ŵ-?cĖ=Ct턀/ c?$qW<xm P dX _Qc *6bj{w"^ӏH3;tIEUrsma@_aSNhrAp+&#l^PHU[-~W0t~ˊwxF h=v!YR`gJ1\NJ] zB-iƮ(l9#27 ދ[Ȯdzpa%'t>p'w!έᛲq)لc ߚnNUɲjfCi0a#wC81'"y%jƵ+],S%[z|i|UeJG s*l(Y4%PD''yPn~u+$|\U}G' ֕2 (.( <ǚ}#̏ªh=?tWu<̢J㊏ Þ*`a:^F2NF(g?r˧_P!\e¼KoquMG({1"B Vnl2et\sTfd4N>xG%du#wI Tw;q$4 OECWX%|)2X7!shouvE{|"g 꺯SJϨQyl$u{.Jwt'4| wv:;I;tqڿ†@슡Җ?:wZAXVMEQ=7QiQ_?v$ggGp Ži젪?[ Nw ,P-qC',_ 7ΨQ=N G.{x_vJ\U0#}d `!MX$v`~ /8l_qn;Ϥqµ~"`3An؉[/(lV(Kw #a?4"g-5L~QlqOY1/nfcXYVڮ֨ENcBѸgL+¤!‘1Kd#M8B+%O&SA Qc13ڍuI7Rmpb Y{vShm?~0+R,1eش_6m(U=2&}W 2TR3 ס0?ea\L֡DxD f5@phjdo*75v}Z-/jadqjIk.ӱxϑ(h6tZe| 7ɹt$鵨FԲ=xzbP#~~$6t.Ok4N$SUf5^퐖gCwu*zc&f}Foh~aIKmO/ΟV`"g ,? lchB=W֥x9{ϑfNCi5vYq{ӗ0E0a wvSԍu,z B>0 }Fo;zlzP._,?^>C~_nS ҒUlqG*fKT%OcG`( FnXP MfXGi(c'=RTQ%{6},@R3ۤ{%t;5L@Ga]_ώ( ֚'l'[]L'7ˏeʈQ\4Rʍ㜥&ZY_rO[ϊ~m[UBKn[w/?tCa1z)4؅U@ ɚ๚@c~&&-K3?ӏ]‚NLx%G@-0n@^;׹DL0ըUbr44fɹ7L%k#*Ċz8HNlOi3l_=|  ~T>r׽Ǜ#&罕qtp:| r.N`v&Ƹ3BAah6{.VO8ջJmBˮ8~DJg7=3g@W͹kE$c92{l/ik=⨳Gzjn-=ow0+ڐ/x9(JHS+I $$ZO!L5`kr* 'd14BMcu׀M@q[?Y]sn_W6΁X.YVnA6w\FV΃vg,,[ɴ},|\ΣC @z1Ra fj&Uk럕7bc6XH߼,{jjFHVSo\Ժp^:7<]<`0vT;Ig7EhqW,S}Vz>X;;?0le+Fzrk}I2\yϾyۧ;߂њt;"r`gO-qp/PFx3@]csM 9b~tc?ۼq)ݚ9vI&01HVYD<g3S"JO)N twzK6 ĀB<%]iDg6z*neKHmXl6+jMLRYfzItqco,` +~Ӷ1E/'".Wh fiȳ=;~Uq=Kc)43cVRf*"J#꧍TpKKhޢˀ=& @suWp@Ptbr+w9x Ô2Ø<`R,i+UL_I"CUGй 4zt* x]e"ҲD{z(XÔ}ɠ .06kAHD N6M0XW^&ja֩Z]݉+H#DvF V3/D{{pFOΑX$-|`c3;'VYkҍ8a hq;S+s]V4(w~Y4R{|` ̗݉P&~G$J*L0;G/ev5~WPf~)TU9!ob3Ok2RsA $}/_LR77@gTv[uMO#=,jɔݐ€g.6Ie})N@e5k'hl1P'Ulsȭ;_f9s@h5Oc NaX#nngu@"3+#p3΍TuBJly]wtUwDKKQh9,U[{ljn;d 5 J(B>%^ `$xJ~$Kfǘ6[.p㾤gj=Z@e-rMec~V兝 \A{hgcM v="%^c0#76g_z 6 B_υ^fk/-4FE'ߡ* +ָ+=ImWjԺȤy1+&Ǖgc@nfTc9'uJaN<ruJbfM$gL7DTe9vJ>_m#`ql-.@]Yӿ-M,,K,9ъ=8$;:ɶg}}QSb%e;k^hLl E%O&.KdZ26u2IsG=A!H;'|dqaMPiqL鱉AwtXK^cEaċ:^8\!i𻌵jj>L)G}8g6@>(]6kH/J_ d -1>JXӲ(Sc}x!0e$JL^\gkIUymL?iԈ oI0㸎qX|^=1Kw Q\t)n3f~ǯL@9[FLs <4Ǡ?ëɛ_,\^X!|4?~|by6bqZ3"Wxmj }#2GVu&Ȥu#AxHųG*l"8% .I@p%?zJ\!Jh%ljaԄg/F>s_3R2ߢ%cE𲱾mITّK}_.^z0O{$:! 醌F;UV\kYcZzFoʏL:Lh 7q~ڕ}n Db`2Ct D .sƐ!tR>*6d M-W$!(RBk0>1-][j*p @>%`WbM5)Ʈ+¦ΚꨯwCĖ ɟgr]6ۙԺsuoHuQ7ۍw6/D]ӝ>(Lz\*31Zv+E")\[զG G:'hT{f5G_VS[0ʔN$mt nZ1]rI:v>*j*̵M"~6 uJLϖl 'ƮH[]`CJEg씦%Yͽ҅42] ey>ސ4,36ŋxR}a8)I7=E'25g v̈́ɭgo v\nEuG;9FE46 3`:fډ@A`XMgk3ZVbidl2/0̺a?]2YS6/yk=i׬)%ٶMJ2fpz%?BS(wa~]B6J8=yqQ[byuEwhl#3nS/%%vw>W7p=|Y h'm.z#W-=ae ^ѷ3$wO]qF.jY/{K攘]Jn댭|3pY7hr 졹 j&^fܠ>_XқRYtՔkhn&kL>k.#H@#%ݿjW7pIEՈZ 0UAQR)d`cWF;!!ߨW4H5R=;ڥ-^}\Z"J Gס9/aE]s};}&att=Cw,1Ո}\QnWhZ{(6ʋKtIxB(Gq is&V &ᯆ:_fDioiSM IuR5VKf' w S5u-j%B$ j%{2|MO¾Et72lzZk3&W gh 07^qpc\Qp͖~t\r][{5ʉ^C껸\!'<p snɦ&aVtpHk>5Ί bY_NxxG;N~g3ɶ- Ry>nDdOvltT'u lfW,ai/Muc nj}缺^`u_.He5YiށqMwKO=f /ώW%7|L.c%d ]3Wv΀_v1QXGz1]=;U5j#_nm0LKLȫLo_&d&{eӎή\RFnOAY_#8QcMޔQ2PVUv'U+zed+ҌS]ǀWUfzX˻.98~ǀt ;18@FssEJZJ5muŏ&|lQCVKC۳G^8p[ޑ׉4N#P?zgH<|i4MIUG>ͪ F}u@N&dMw}Bs| b ώ(\e,VǝN֮/\xXPa>4shMg/NBkO׎!I#4hR{,r} 8ywC\;1 T@ж*CifEvmȼ}FW_eg3$*jy)-Gv/̬˰̹ԐUN=ppгTIK8tq1IʏWYgaS.U;z<ݕCXLي/7V%XXz7儽ӅtrDZy }wM2*0v@#%-)b3uauk[9.}C kٶpSV-$kp]aouXvNX95j.'@cs vӣF dmu1e3F{5]kg­Q+i}`g"}6!Y fG7e`eIoИ!pmh?:^UZ͸fOxMFMac,}:Uv>Am})sOWLsW8`Eo$~MED4b؊O ;٥nӳ }[n*w߸2栦Gx4( WWݬF^͆J zU08X>u[ujn@54 ]roQAmb'&17a0m4Hqf?n=" cϛ]kkN$ۀaKx!1'ȫ'X/1}~"dld̅ڴ&8`YU^R:k9#"ͦp-)؅ۀ5"LZkԓo' bpM`p'fU)8Fyk2#!/5.u\ bXH R}?ږO@s3ךGn*0@f%*~i@.,.Dؠ &!wޛ0Ўdf)4Thĕ4d!3ۄ)L4k -I^[ր 616 C`riPMD\ kS a#l $eF<Kx4n|Dמ/ôxIz-TLQ2+Gx;Hu>1e94ࡒ& 8;H^&U5Pe4&Z3n{DS]&̼Cǫmޘj MHmj7o ̾gVklw˷۫WuӢHɄS<ŏޥ Nn so~Աw%Kp ̏;K}ҥ7 C A%b~fw4\Ր 5V4{F,bjiTF(jsjt"",>&_3 ?0%$,Bˊ8s8B\ ώ33ďrB;bBxz#(Ƌfb{c@9E^[.C/+EԠ8D PޏHvQ{xqJ< Y5#sdr\G QU3Hz/sI0vW{lEA8@LۯL98{,UX DJ@IQ(21|Ȩ31/fH+˝@,;6ŃGO0EjKPsŋ>dXAv*.x`7_zMiF$Kr%iÕG;VjAn#(: xWi߉Xū+~j2İH>YbGw5L'vs͊)`}J#b,4FK7dY すߓY(FgaA. ۉwfg7,Hux]5%"Vd) $ӈwDJcWRGc7NƛIxojI98)5ʰ\³o 6UF/GD윃^$WF_cF9>E`}%Pk e+lzvu;IJszcmN{y/cpAx֌?NZ`2>t k9pߨ^o)7܊7x_RL4՟hdAej[IO=>aތk/OnU}5 5!|`F~^`=8d۝ᱽnIG" N=vK 6ԩ?.:qreMݛ,MEܶ ?t:x#\k7ᝌiHqCc@O`E/AoFVs]U#P(C*Ln{Fÿ9UI ß8PD!,p )o &w^k>Ѥ;Z'h & }zN޷hA غ#ݒm4ιCe2bdΠQkMR5X^y;;zD;0݌KiKQ t&M><ۤ% z#֜R.ʻj JJm/._dh3F ͟d$:s"_u,ۉ%lr{*d*9s|r]Qih\/d5ůD܏yT;vP?c瞧ϵi_S>~{EO}.K.cKa.0-˧GП# .2?4LsHEZ^O/hHPZ᯼VJ^s6aN%BW$u96/كŕԠo J;H_u[ ˰Du]F:3WmG#E '=όGt>E͐B /e Pۑ~$_f8kD#<˼\#}~hȉB#-<Ȩl>A,nSzF-ŵa:jB%eNMʹ"|rV[x`b[|kO,`Ҁ4p¶Aj,]dꉰ|6ӯd4 ,6eR6DB^BX/OVP錋~8urm(,\DUœ]3EŸySjDWTguȠd1fQP ĪHߙ{bG=Z_}qFuV!6\<+?_n-s6AiBh%lxʈmްh "E~LۊR[X;Zhԍ;^ KTHID+zOB#6I%7sT +gor1 IU7EL\}gOnV_=lRBV}^9q|qgQa^1dP1..ɹ{xRD̳2h҅&h+ w6I M-[\qPPW50rd13ο&$t 3k,3պy`*a^1 ~~k,ǓYk/({elgt57j*=Mh!ǣ/010 h$VG>n^2Ge&? GPi,{jI\VYǠ>e3uQsuF3F5vT~wDR&S#iT/(Wes]ܑf1Inʵ0aPԓNh5Exw+ b@ oWgeGӏ׵,\+fnXq@A OY[˽\\~W{HґȈ`PJf}i7;W^p矮}zdRz^_W9#S+ze9fyPlvJ#SG8E6Bw%=C=FVl#ԅ (Pe|uwDÍqcOehDuB:ڌm" A L-dpZ=IF񺣯+Tܬq>drv 'cؤ'9nŤ~k";ˏ=nf|,?&F|kS~qftj㵐'>Nch;dXC/{($ul-HT5zʩDoyP;kiފ`pԵjkH?^܋Y#SWtfSG~XRnA fKN NL0zNa$qK;cg+fC[i:mm}܊7fXӢGBu[T-5>720 qR/_JLjWb[$ @:f+4=Fz&+q;U~q'}E()7aSP+vY C^Opֽ\W|M[_*vpeP ɹu[߽\j00WmW)gwU,o |Ҷx/p I{G(,hGp(._f *iM̊"/TSv=M#= V A!MTqv@ h?ĈZp(Ӈ:SZE: βM@s  թYt[zCpTߣ#XD\F .{tO8;LtʺZcF\3_VYg !X0X]B?%zl0TmJx Ҝd`Ԁrqew L&WZc#N|sBϟŅmA\֪CbYF[QxʬRbfyF]~X#(4tbuJ%rpLb!zӝNJ7W$“eeDxHe+, 0wı}F"厣ȭfA]BƫH:s>@FD"b~ˍNQk\ϪMN1؊TNVMuV1tʹtbNQIJU Y7)d 0ǦD'}r[ > 3ƈ{-fw'_P ٌ#t ̛b8Ԫ@g7;;ġYr @ɴW\AUPؐ!9N$~߉n΁4 ccn*kD Ś'g/Y^t9q 1d1Nm{#,zknUϽT~\c/" ~TaT)ekؗ< LԺ[DiW qG!`"w6]-81l[R[_ =ԕP'lB)`~Br—K` ^~Q0g|Rk?%^H*Q[f\w*tRaF]$~(p{KgG 0$I9~txД_ꙙ_Nݥ"Cu{u]94A킨Rᜤn-R=(Ž$TeUH׎\o|%UQo-P3[h9 ůw"Qu~+(ׂnz$ә ls;f.\q!Q7M3{G ^ckR+@ժ;;Og(u}*0MX}QѺiԠhC,oSc6p܂Acv{u8^r1>Yd`?ښNyItiQ|a=yn5*4bY[7+=hנsAP'87sTttӞh (62_=_H㐂mSWB*}\35Ta|u]b{wvj 6 ]͝@U#u/xߊcf\r`(!K$3jDͫ֗\̺!O t *OD}Ϩ .m2%vK$>Qpc.7@[.H^S]PyqG Y7U;nᨹW|tg~؋L^}z7cďӇٟ#QkP/P" E@EInE/LKv|om3RV€2F|gM;UԬeݱ_ la{j,KrFkT#PXm.T~QAYM*<@0?M{59iAƦHbœR̲:1nץט.QrI&nb2Zbaɶ7=J6 Np$B*S"9?:0^@?xXf@e;K/R(Ѣj#栥1WGUMMC樭ˀ0?LF1V< |q:@ Խj>U)k43a~EڨG.2ɹlU\ 8굆Ux 1^niΒ('(;7Z"TGF|AU͋5mifRw͑PY7kB1Ԣ}@P: QJ[<,ZH9fYwLϐih5P)M0dx،H:✚QۙىA &bKmp!e/(=j$tkÁ.>%!{Cmo7N1(}G%'l0C[g<6ENAn"L#n)#[iqv>+,{2py߱Y+ ᜲ/C@o=׹5s="*cc~n dGx3f HsfSgK-0{Ȝ< 9agh_qk f!kpebğ>?LZN\}@p zK+KN.W>.@jN4!M]Bf_'s/C{j%!_t_M)^RbJ4MsX7S4~L^+jW}tȡQt$[Qw63tRi|警^;hFˋ(* 딚FqO4$uFҁnl-NJ 6QrNc@@eS̒}0#tx}^V!Յ%ۖN$S83">2^pc]+x\ٽ r&Gư]t=$[zR+ ޕhvVv7:x~̊@SW6L nZwt`\2KPJD|£%/MvII\$@/@|X/`Ml)]v7~g{-C*̳g\ }:>B0 Dbo28bpO+gCvhʰR`ҮsRYpcrKsdg* B6V6ɺBw DxCL|]pPlffN)Mv?|K7}~ӸK% s _oWbTC ({|/`kGr 0)撀WzLУZr^J}3~&;ۼR )n1&{)r2y1SWj G#X.c"܆z ZKQ(O$򋇤~?/?mkj~n5zZ(,Zw0EmE}"/oQ.|u*>A[: V3|>;_D`)tj[4SٮScf`QK޾퐋_ ϲI/o{ m˕M4:> ^\{?0l-z##jx,G4K##8h>W&VRƎFFc٭n~r]u-Hq1? (ĭqF{ 7;oF$9LDx͜j(bC7s3\'O_m<tMkB_Sy;s{ TQy>eT3 Ga^mc_#:JxaMF!,YVzʊ[ ?Kei/J>r-'ƒz ebPG+UJDϙ+4l_plkWw[:RrSEt_]>"v_>jD+U#cf۽c ݫ=HM6/4<BՈ'AlgXcF4\gU ꐡN|nЁbB1 ~}=9[D4Jјuc8mx.C95|1Mew)T6;<:w{GgV}p),yHJcL<ȮwUeœN!&ڣG>2E筸TZ#W>0Dr3V&RZ.p*\V׈pX=|l'-:r"Ƨ?'=+CNE0@E"( iUBb/`3` lEer&iLYL02ywvdqy< dY}odysNYzb0^~3wzN_v:(*Yl_фVwZm4کQ㑩άT?9FCϖsa+Or)=f~V52v6ygZd VrW/@ \7tµ:ذ@:{L,W+Q=)|CA+`cᾨO q׬qe@JLxhw;]z,SDjmh+WʶV΁<*- 1491QiyB_}fiHOgyl]y*ѱ*sY.5=16|Q=.JTGԦ0؈쉐|Ǹc(˄̫Έ;꧳;\ʾ"y@|_T^,si1 6SXγv\b|,7+^CM;qYt4=J) n&Pk_ &jE'z]Y>BpڰӏK  lfVM $az`*e~lwWo%w9`+(3!7nԏ;F9j nv*o؎(u7:f|KF!3(XiS[C 1` XDŽ+0=AҌMl$M4S-V\.-/(P5ʾ@al9\:.z٫NJ3vGg>&qK=M*BjV% UW{Uu2YRdf[~ڋע tz͌j30ZFxG#U7ר,mjjM~pNy@d([#/5;N]X6rjvZZ^`OllńY7I~ߎ7"y{{NߡoaXm` KO1?iCv@@ ːw,Α;zs }nIEG9&`dONgqd^.ӝة=5F~zW>L-:w Ʋʬay?[:nes y57"ݳ?VDx0_p+jBIP[?XS9d8r^0s$ԥ:*x]Ц mqq!+AVW^mH"mq̽n"ngN%mo}!rx* zI+]l6h4"8vu802VH;`;{Zf^ R>D~4(@ ßS[m~Em^r#*jP%8k3q&`)G6-LUmSõBG݂ s I]j:ұlwֳ#=.Ii!Ӭ&(bo#KOVS n}16x|йpO) F ^<I[N%;o21@P](|Գ{Xؔ5Z^#٬\E١Oʧ*Nd>\ g+L+>F{T_Xj?+/SU9BLc#7{ӳwl00X m]tsFR3:0ٜ?ޥs"7wӎT6&/QZGYTJFVP\gnJz\ȕ;/ƭKs6@q+yHonjKo2tD60^*y&7bԞazyUX*;OZNm]ү1)>yS'uӋ2"GmJ`x7GPK Δ .y`9wveS0bjENګ`)֤N.e:ru{ϧ ^+JN Qobqgq!e9G2!ɞq&QXƍmnGɔ'*C]hSF'qMBx@H[<-{ *RV2nx-D@izz]^[]Wu)loFibCF~n_sݫL.UVJ #|38ZG{3KIfZ ѧxUB3J[Q{Q ἟12~h " O J̐ۢ3{I\s]fGvL6YRP^uhv`Z.e {3ŀ$Qksv z6 `/X|R{ÎDŖ85NZ)«S{M!% D7Jh]`FdbZK$3}p&?-ZJʦf3W)㮴ޫj־'Zͳ?l'x4gӒ".B<-$2OۓX 1b[ʥ8[4[H]G9ҋ(/זEpoCsJ']4 U2Z:*\fI9^B~YS7ͪ_ʜk5pN  v9h_zS| d) JiSfLXةڵ?_"EY?)Cr82z5ymIj^]jwm8r}۬o >MM?ͦX:O pė[L+!Pb D>L/#9C*9`Q+x(zAv/wՏOxQNᦇͶw2.Ꙍr%cD8]C޻dy»^!u]orit1$y5Iad3IJzXhLُŒ=,;6RPݲZk}šGA>S7h T5$ȏWQKg5Vt2 ,t7{ 6IIaU,z7=*W[A=0Sqqb;uG\9^rS0E=Ø\U_n˜Uib+ WTKoaOdC@Y{EƔ8CȪ"]6SR#Nm^3}au/,&D9nHc+h0= v3>橵2$W"4#|WƧfʐzP)1+:g7SvlB[bi{zZqӶfO#_pQ|>{4.&Q -5>ǝ|w $6](t(=JGhaC\4gg# /5j:޾.k=>5QC1vZdsC,FsTQtmNRu)1mi];*L q znUr_ˠ?&rJ2& BUG<׵ְE} 6hLJhv^Zjay#Gz+[]hHi_.?GNC8޵Ӧ sOm*SC!Qج7n |n-ea 2l&7nP=: '&vLx@Um/{u B`jWvrLv% ]!]\%dD#)x"H\6ibi9I994Fh]#l( `RsTwJorvFLzC% gGblc,k%XɊbؼpE[WWM0(g(7EEkeN,EN6 ;]G8 dOY{ w}a#ak띪.j򶳲)s^ԡ¹|J<*6(ZcLP5GPhQDD}5y(ͯb8qM`qpǠj<"jACGurW>U8qVoDx-ضb;25(PH3?Ye⯼tbKj LF Ɍ4z,8tq>zn@}f81AG A=Wdj] n4FAX9@E5#_\BԤ&]C'`cV[lҊEPW`͘f +}JB̟_}U~4f;2r?72uh/Ig1Z˳R)p,_<{Xmx(YC(5%<|4:Oԯ] ePrDFzP3.ʫS?skbҤlz`P2$d@gPϱ>A7P=J/{on-aK<=LdLny何TEr5q,;-N7"oڊ 4NhsRz23[?Y+Gʼ[/Z!>e녦ur[y@l| >W8m(elYzeƜӕ1L9yQZ*̣q9 g41FH7ܠߪ2oرMQl< 9QLkC`ծw]~(ro 5{I5liǟ,9p*2۞,ng>;`q.W _O$rf;#W#}ǜ ꝙ9ՈgPasODT]NL6Gmw.MmpY`egc'>]?s$sG|TKb1uMv/Ƭ|贈0Jz+ږꎾTUjSqˉ6e$砭"ځ\MdPU1ٻvqCAhWL!cfP&95g˔' JHb񊫭釡ҕ?p-I'@-s[m7FzrˣL]cF\gh(Mi{ƮO^-VXr^\ճ01aۥ3 q,?^hL>%bWՁ5Tb5d_IAA]QFX"/%o4Pψ3(cNb Jupr ׻B-B:NMiQI9.3PjA0Jk{f~xu:2dAmfrnUo̩¶$X󐢢cܩ!cf{FIݳTPkP {8"DWnZ] z.4h`+&QCa¤QZ-,޺, wXFg@ݰ8w G@ u|qb7gƵ-XĢ\>hr(xq d=I|_+G+e E=SZqlyV:\w|Y͐T%HAY+m& FvC_dȲ<^4Ă ըнc1$"0=F8lfS5Rp,ԅ=~FaY#xΫg>Z& B t"]E#(SWl|>ԩ3bۍM\b)]c`b":+p6iECmDLwBO#, n״ !^cbۼ*EfKaL5hAl#Eeļ)`88y%PIe?[`xOSt =='yZ0L0׎r;#=ۍ㉟)Jһ&ppF˟0DPs?f|DNvvep/ӨjӰk 6i`6n*Nbܢh +24kO⋭%@Ȁ͗\BpB jVk 5S{CSR>GYr^tMګv`V)T5m z-&5-Q 0JKC[;e$u1ϴdRC,0"l0ros(oӼG , T0rwQ3hŊZN)t]Mr m*U5@b rݣ鸴q tL_šXjmJpOqmM8uf*mOOnDԠWr?L'Y.Xٍtӝ.|q:k|dJb5żvx7=uM 0)M4<$>4DMA$[ o(Հ;ؿcgK[G` .t,@}6J-B;NC͸‹_vMċ9=X 4 =龋QĿnlcqc(;L9%R,=dvHZ^gf{iIv1[Q`*&tKJ`F4F u=ZnWZT Dd3Y Ē6t baR]>sSjzՅ 2#Tyۉs) 1W0WmYWeP_;T6%,+IBq]FQn>r8bv(vIJsDZthpҕgKԺ4VW)4\Mz% $j5;e3pbnDnM+4u{pm_)d19 2x+E@OyT)# N~:z(L`͖/%Aܙ08"n JaO-2WCqg%S| 5^}_Œ e] &laD96Ɋ:d*=hyZ`ŵæh%bBErEh&cV<ԧz`|mR^b[(@OJ'L4u=hyrGrM8tU{C*X~rt^XSκD)f\-o1P$H~$MX*;kqtrCpkKgq`F6mT{Ɋh=ndމf{CcO#uoȎ^8GӰrC\ߙ%h@r,oO* Ub2l^Ԯ2*6^G}uϸp![D%m ]̧X)8RzPᇖyן4l/]>*T*#V@LsI?ܮCAZ'kMε0;w +ٷÇ:=GCNu\dDs$˯~gS&FcoaC7Ep9 l5)&Pu'-6ra ]G.n/-+zEKX5vbG[?=oȳs~\w ~hVjR9fI;sD.h Q$ߎ2EWq~Ն'*p]/Zb:׊Ye+pic&u+`ܼ <k.e,4#n%V5fi^L_?h4ogjr/Y HۯOwҎQ8q@'+Fe҈Ϲ0)0B0"y-GY iS'N/r͓(R[Vjͻ=eե.| Ӈ{703##*bvW^w0}:o[q2e`Ǹvfo5 fSv&xV418ZiG sq"ytRBџpNJ⽣_{\ԙ`nfevYBO=;Q#>/>`m1u܃!a܄'CZow1m|=zӏ^;CeL74&ggw\i͐\S+NAɚokBa^F2#DWNRiuEq }8(u+q~SB&>el/BK;V{#_|j_e4BM(Z#_Pb.קuFf_wÂV C7;=CW>K/j{8p_2{j8SZ`G!rh܍Rߓ6 b|hR+ft9S&[6YCmcq^ QAq:\˴qoVoZAD 41uNq1-ʙ: W*6]74M# A\WgY'R0GO:(aQ(ZnO,}LoY5q=0D!` ݚn:zSD+w$k%Zv,Ѱa}DtY~+~\qv{!*B)4ödr\VwnW^ ;nGI{wcK:ԢJdœBHBG  #zsG_*Q)M?= @enxN =|{yUFK2VTTH ju0|yL130REZ L{W\~LS7Wōj}S7L31+n-UW49xriWhq&7QC%--]@3h\hXfmit%`}l7gKelӻ,mzӁoOBqF].Tq$4׵㦎&e5<2DTvi‹| z{ȴE!FyUUE8pk.qF"hj1) &eR hc흺#9=c:wwE1NrH" h6vjk:0gH[$^h]ah1.z< e'?G&H 픥u&`a>#(Iw:jq!߷Z,x\Jgdi Osr=J+QJSheg`Rue"5#rTU "Y1Ƈz=ڷ@\|0uȁkz辰hR .E-cC7ƴn9_Њu5D~ bԢl9j1ѵO(\q KΛ/Qq'dʸa5<QJݫ8k%FQt7XN{.c|hpHPٴ%O9N/ YC>Lݿ얎{G }H9whg~bB r8 VcC&6xN5ljӶfRruLcGx"1S{.$D7OdF#TOq\Hy]Gj cvY)frTuBׇFC +(:.W_Sߜо?ᱟ-N>X"5'JkkxoTX=GWЛ9w=>9(NVZ?gS](dOӃp:׻$5j3ekt.eHdQrV/|FY OYU9^Kw+m1B*+;oŽE#/@whǷ.NڨMY&?f4>d]58B3~[;)MEM;n5ð)G3P(7~ݨownMW#B rWQLI%e BMEQzoIR b]t6cẆB74WSj/uꉲՕSBGiOd|Ǯ  #tUmr O Vs0!jyZib 9!kSq]%n{V +NHG>Lbo(ISL&J7l$w`yJ2SC=,NK䫮|LGV/:C-e`JXޙoG۵eUg2̀ڻ#~>UػQ򩿺 ڮO8O#m+ΨZfN)^GG\3z5Ufô4r0{h&w(a_F0ZnDđW,g -GX EYGOuW\;C)Zk 5 jıi%_#2LՕ<v"Lzk*+HԠ)HTSDʄI#GnP6sT2e^mW6#AAG1񣾥ދ楕鮰 p\H񋱷jpyoߝY毌n3SO1H 4±z%uGm_u*^HH cu-8wdʫ?` |$.H2lf7b0Ɇ Ⱥ;K 4*p㽲H9NWM5Z*/k|áoRJt+yGƱft>iHŏ}|" 3?y G}YѦ[q`O+<<[hVK߅ yP*>&5hx낃+$ܱe{:Swؿ6EI~%NQ?M9T,>땒i m *zl8Ns𸏍+fL}\*m0d5 6 }, tYךiL#, s5ނ{L(S/O~KX{EUPi{Կ+3뉿H ',_Bƿ94[uZQuz6R*"1Q`.y%w b1;/aY!xܚ)AཱPĊز6[lZra=jW7%oE@7PwOD! "9_H=1A,Iv5gj|[s@DW*#DjLn-a~8`ԆM;JeD ]UHP`1N-t)wQ۽:byWd#n|#R6#L:{~]^txg0v˪XJ2$uVX ;?e, bz%m>2m*TY/]'ޤwOm~r%2hlP `X".Sv# pz mtQ g3AlvJ^"@3ty+kʅ:uYzAr?4PiȉqR(9:nq>!AVHAe]"2_Zn7I՜)]G+8*y61UM T;wUw\qaA)ϧ:5m/!"Dk:lXD0Q5'4NIKʏ ]Cxh+?:H'G6+106HeQEƙU{W"w.4U/xȘz6erը^f`qrs']stX,;Qu/@{9HAj[FFXs1ǭk3i0}:ԦaFףcehv ĺ(h@^beW< M! %PL I ڠbnx+[P.Wf0[-k#ha*ɻBɚFw^m|9dY8D_ lgGoY!8g)|DgZ)Fq_VzVy1~aMVT'!sPhs08X",'?F !]+YnPMY6MD6$-x'L=q{à~ -UFi,xJ8;PޕȜ*?bQ/hQPӈ`_nN_{iݤ+tՌ*Ї{Ap>)\Ȟ6(яRJ<(ꎾ:|b+bi b^@ZVh '26/+exEWK=h8ѫnUklcqUsnEIz7yW|V7LYq4Eqi=&'[LgõZ@&X}gLʔ(. E\P U.3 `պRiq璿&gPCT)O-O sW,2gzW-he\btIHlŦyP~XUJi@(䊈58fؼ/#u(k뤧v=F';ȫ82z{{rUl_\#~_[~ ,mz,sqF_}J<}5O#fz?z1@N|l) 7,;l;RFAޓ3A'@fQt-|rjJߟp - =5X>m-YCvȦxVܥK;NWMejw^e6, (ASNS1+]e|`y2 Dvw|F^<⣶%i#lhGLvxbNv䘄6"Iί7~BNn3Z7ݪ <5 ʠ~zHSjOwG T5"G!ۼ,{/ ZNX52wo9EP~ċhT`,UN2@^Sjs`Zg#=F+Jz[qP8!9XvEď6i K܅g 95;󌵱MdfV^;Nۛ`WHZnEFg[?p/23sVp<+jթe֪C'% =cK9 ӝ P 3OGqsLZ;w 3kdOuKkZj s*~j55GX3Xw5L<L]&1͜7k7fm/N)ԣ @N:旫DIpvDt||J߅G|S.4Eu}[3n|o^z; )4?$ 1U,Z]\?GzrMw5EQs'2ۮ&]l@)J&Yk[ X;[zPBU~HcJyҾ'9< A q͵8ԝ^/|"ƾ|y?c;;G\U `E2˗RΧ'Z.QrE== 7@]9 ܐtՁ SOGz oGZ`,ءodQsE"|>bXVN^ohY O[M_[YSOwfVډ\Z"'G?#l9WfRҚ|k{ (d^y;#hޔ2ݧ!0zW4iϭ# H(MwEsH l<94a~Ff,슴‰07md\z5~}oO̪Rb⸙]#Zck?OqK6.2B݁4-BP>4E-/QW3'-&d`59q }۱{읂ҍzV/_\qCs&E۽䧁8ڝ32d:-qTji,}BTĿʘQJ9\OvDy 1\>b겢ᜌ-ޑ+6C@٬d0Ԡ0RPB Gk{&Njh-.WCMyjhGz,BN6yΣ~GWa]icuB^Du"SU[V3O;ujyx(Ib[δd\ Cz_u|[.(m0E (6vMìQW># ~"Og7D{:]{ :F` V!e2(/\5U2Cs#ҜE^/zCoX扙yhE)ܢ"ٗ.P8*8;yggD#mUO/`ShčH^?WWH#n}y6BϹ+2;EY@zCHυ=VD#^</-sT攰Qߓ.`֤ΓrO|g[V'|V>{COv{ .f8vjdTj|L!䢾Gן@qŒ`"'ӄ-C(۠ ei{ |mTk:1Xr#ZhNm.+HgݟDhڈ ,(nI.&i 9Pm3CWa3> ɖq=OK_z,@3s"Wm)}h߉R)6;:zʲSj)e Ol~%qhgjWL'J7 j\;P/.b1}Mmz7qDyicc$ Y?X9 KQq:K6#JC{CJN5^~6˜,>^;ޯ|] ]c/Ajk_:WoI-^W^kV  1XH&(2_[۠B-w!YaxkJ*>#eպ󯂀BYNF7Ҭ+vѱm1x?nY O5 GM@Pܬq|G,rJ9#h- p1eDv8`p"9@_ÔhFGFb\\RWkC捞$ps[*dmJͨoG-23¡SGvn7} A f4$m3.1~¦dW:b<rz*/` ?Zee޲wNf,Z:szKaH,x$UPi=L3>Lz6:ٍ@GC"K$#{S)7A;/\ 鄪|Q )AnV) ©$PIa'U%_- 'I+ u!_SAr{G`동鰊EyЏsT'1 n4/KJҪbV-1OlmvԠSǽ)$R}4h,їS47B^Џi m1 &WBNս8X~%F>Xc56Ɍ{U} _/UyE.QdT+ișs!eY&Ud_,AvS fηbcIzjtE8gB6IiSçycGnhqD:tyug#^ԃ3xZ#|e9[h`U"RvfyztƎG63F Xw;igj+xq/ggWGH ,}7IhD &Gq]Bn #;6$GۥvXJ7Dh[ N:mȬIEͮ4"xTF05Ӵ}t{f.O ciW4]zF3gpwM ;H~8?k Pid6ӡqzϡ@ږe6}a~{!D=Nc)1PmFJGݱ,h6SPW[\y&*u]Q6ToKމ%tejڈϧ-,MO9s,r' ӥj(_o_%,V6_Qt |V#u3{,[*KT`R:X\xZ^Qڌv?tAs|s#QpJfͫDGk2hq0>UgXų=vn>azላc^55Kn\ p;$R?]oҞ V9(>*Qs㠜evvr96y jHݔkt̠ [sxc7h4}ӆEmPfQ9<] jfaβc]DufP}~S։cv;)tZ:C}BFnQ?bn? zI?WтOBН̂Vzڸ^!97\HmG+VK{o s踒D<8wp5E:`>Ӑ{quK*WC)IdCֲ4t5uC2YԄ k ^8NMGm x p-,rn6#gVDK53{}5:1aw[q_B4P 6NW51SFWPix)D즆JM_7Sβv@9+PmW5PzVv?W%Y1kR7nJYs S[^QhNYW*D'^gԼD<д{;g:C+ܗYOf#뷭-1=;pE 4^,&?D؞GeҗXy9ٸ3׬e}),!K-ݍzgpTn#Ŀ# #yψʼ0V[PasL`Bo80/dюSnm~{ GT&+jֳ P i bKNNzhGжE}uuNӋǀ,YW@i+!0Tw~Oѷ5I0cJ2^if NЪPL;6G 4/"UoYvDh&ݺƔKOB{iܻ(J쌜Dc(NZ.6CrUn%"CqE'C6]1AЭ<52$εo_4fGiH*~$AزZt+lqn&5 t'SaUͣ=R]alR_ њ6+' >㺭d(Ɠ{mV2ms30m4]pk;ye[P7NcX0DX/=lM7ѷxj-TE4#N[W?zTs+\-l&Ґ2%' r (m^דu\2$;w>hC S\]zJ9]mzڹ"geUd[Q 8'*R~mP΂s~#v:3I2%5&g(2DJ{ҢrTW LNT"=cpTq ,!m/<tZ>s~e/:d#xHVMZw=T%~Hsc-wWCov֮;3WHԲF[MJK, [/5nV] ?aFn UT6q9lU(6H}E3d^F>r2JzD>VX.Dɛ PWD9+CdF(EzHímW"T1/No{SBj(ϏG3mP?;h[uU%wvkˆ\[ie+Gh<ɱiEѼ9MVj--I/N "DqUjً|FИEʽU91Eo_UwGۋWdrk{߽bD)jax"n5]\LjG+LJ5+F5~r1s\ҁtdJ;xړWxhvVugC*;=><t*wJLSpJVk<4`q㿻BwI%s[rDM=MzE[7SOu3NGGP eYBЇ3R9+ezwI\-G5HhusK5wU5ry+Xc%J]h0.U}Ukzѳ~Xƍjq߁8錺+ګbNmGb$9Jï͋Yj335*aw^ǣ/սgo]W:YOZVy Oõڏu_ WTZ!ịldWrAi(r;Bݡ,yj<= S6k.yG+ K j0k6Njhh w[wvNujFNO[[^NY 7K Tju/47zVStT2Y=~}^(ǔUpۗ+BAJ+ 8o~eϼ5֐M}ۈ#{5FSxɕ Pr?9:G!g s{O:q4+? U}u(cu)fݰwDפw9݋noe?w0h6|:z ~ab⎱0Qε?f7#Hլ"KUJ >#oK0&C #cN^㲚bdsR(uY19dPG'g3qՊ ݄Kb|Vč&ؙ؏P>^TR8nwNTG#&>kGܟ9T4|5w;k+y@]e2kA fW8Í#Gjl{(lc릒bQ0V6P$?p g>.:9R2Jf 5M"A@t〘;(NGYڑF0J"<+s}8 b#䷐:qXK mQr7J"=NcCƣߗkymž(KFP4̷*#jE$#;avbU | x+(̞nbF?CoY w\yjG 9*fmN̂};gk!Uq뾃Xen25twE5-=_s.B4h(k_0iZ'mR[«.S@*Md߼>]ufeഢJQD[XN'I`5 D2ġ %tAGxuSz0xt &( { Z+( hFР_%cx_ &,nɪ):}vEwBaKVS3 m9_Dw03r̴Gvws`뭿|:7 vvfp3"Ai:,RkƯ =!w :kLwRDAU 9EAy>L&+y2R\xPøa7;9A[w+Ї?J > &D#2&hQ.q<:̬02Xda (fx9{ސwb?dĥv/"^O@ (nm?Zw-' O@AZOkrgsz- lJC~;k᫆D61dب!Zt@ MWm"n?-n4T]QVm+״2_;',+FSMXE6߁<2ᔎq R5* cYC^3* M!F {_I6wH 4(p@-$qN)RQ:~ ;U`v,F-Pn?GT_ϧȄwCXt3H.RDn-P qаϯ$)\prĸBmF.baR7)[HHī)kP}~&Gޭh?Q-b]ⱰW ;w^rn92v/߸Ijc^%sw²լ8ׯ4gjng)j%iȰJ=vGAֵi Wf~K;U=Oٌ4@$.a1+3pW6n5s[W11Grodؔ"l^Ff@S>ߓ6qs?Vi⺉u3N .1n3&Q4#P{z~im2 x1m~v)$/[/#r8&ٓ?,d@[{0,6M" ?1f>]jZ倡]&N^ڳ?GiWJQ41'G} Gǜ+# &Hl.âzG#&!f3Aq1]zq+G6(@ NKt`[3\V Zknn;х͎Aᝊ'^)1``i/jh?H7IM)Tjdy7/S(ѥ{P_njvY^͗2I ڞU۠T9 !v[V7wW%b~eC{ţVKW{OU!hpJ׳aWسRόȖe5lP^0WTD%F NY ڍm?L)&EF*X\}ċcI/tQ= P]c`fvWh)}n`|p2]7H#6VZtYg_EճDqTFe*? 29*[3g JГ9BU[" UUe B\dm'A ?qHQq qt-ā^W]1{.P{}|*z+QIȊ=QA AC@l!y- J_lm^sM@ `j""/.*_fzVZYb@Z\ݽ9+1[ں(A%Gu9?oŚ[M6ܵc*\rʬj5+臶X"$G \?4 I;F=2OjgB2w^bޱc1Ls+97$6u:³ҵNdcdʛq;m&* a-g,`h>asy l (wzM "%*ˍS'$kpٔ! _8I:Ԧ~ڌp쾨&L>wG,(_M˹6=ΨCxZy24VJ/%XRB\ ZN hd6P4_$tZ&rjM:T1eP-f4 [Sf4rFQSoזgl 7ߜ% )~>^{&6D'@y\1DZI1FP=1,#bjZFkw*>MUdjR'>4/Nl5!<5LI.8 6&9;g\㗚 yIt\(W} SLITI*4$rjS׈:}I gԑ ,9C4@$osp*f.aEZqEALQ|iR j֫ WRbvaxTπY} Bh}`Dشs3^T)O}13aqN<#}Q8ܕ%׾^R+-IQ/˞Ui1n}dҞ޿q,]Yq2-y*q,SEY8@!ts5$]6{-rP*}'Uc.27ςUU:ͦё'o7Z#N0sbRy:Djjw^Y@Ejo%haƌ&0EEtorE棞YOD^=btYʮ\hK咨j2ȫxhCiڼ>Gqe~*,q~:UWu)2!ZA}gomvCUj1MC`qFU凕)3="M]\쫇{zG%YDPK8w"ET7({~T˨\r}J4tw+ozܿ>f$AgIK1I>X6MGd.yv8wRVVvg{_7ZU7UDJ9As5ELsJMSq@4zyeD9,0K5\ s>_P G6NBy(`MՕN ÌB͔^ζ}xӭP:CښgmDB'`BZVAɩg;OK\ ;&ePCdi)u6 ;: D62?3Ws7[޷(vX6Iƺ+K}OlN\Ig?bLDf2uQ yu޴v-RP=UMg3̮oFwoOãٮja`A}%\X` j4\g [ rQSϾ$ Q[ +rzɌg̠^]Z ]*6>Nuٸ^Ąq,.I7p3>F>n:.J3w<nv`@G'd<õ+ /m,QO"'x2Bg0SN jI=%\V4i`P:-[0mE&߉U)zt>)dR, Jx(x xUP$d-$ F:' jG7O؃U,?ʧؾ,n*OHbiOϫVٸ+6|MˠFu+6j k5zxPϖN&`P*:vDZfX9Hnn,Odj(WG>Q[(q3*MXU%KMʏ3i',=SM ^w4VaW,NF%Fk Ԋ-: 0ֽY`)J]Y~5KgyPz{nQ/?n9P-񇰳;s{#cʊ,`G%:+FuІW3B޼ f;ʑ +5|1fγ]͖5ZF|/r"UΏ/KLU)K0z8FGm\堓Fcs jGxZ#/zDQ%dr wʚԯ]zFpPP5ҩ =!7h'5U"½==²Р8Ux;r2^cgotoa㥠7aQPÜ$˿Y3xkEّnA ԀưoC-gѺƫC;7Gzkp4uzq5f5@8HhT1(qK4-qS#o}>߳/x΍wpg@2lB2D~qRj]~s# "s$l (py ʧ N,[C;WCec7ٙkFFnXmFFif2v$YGz/7 7s >0 .3r.kgwfQw>A-ǚ3t0≼{Λ^_^]#35TxȺsRr,\,Y΢jM.cxgPb`~]6sbm< ҦΥ ̂x1j4Z%;+ eT*!uQX-&@,WΥɘyWiix!*HGJy$6C:&_ň`7atzTh-3c~gVA:+&:(c ǝ-NBauwM&纯AXM-L(v`Gi],_¨#~8{0Qq93 m񺗋V$ g\y Oj1>AQ.K"qF]@dGs75ο|ۤƒy؏ӶFU'pzEpbM`5QiEz->&#)6[( |o TCŀ`"w&eNu1FBW2_&0]#2asJADcyܨL"jG S6#vPs Ao/UJ;#za"G?zgd8ϕ00Nt[5GSGqݲX3lz.GPCx'2/JSnEnQN NSS`by *#- MY| @ῃKl&J4Ad%z߉2t\XA J" ؽxzGڞ }y!Kq_?:Yl1l\asgj="d363cmOo9ѻ(%*JNϷp=_E !ӕ4wer >|sj%WٺK.qx(ؚoW,zWxnv0q9;n*ׇKћ/eb˟ ;wU)\]/KR@-o;Lx=Y#͔XT³v3XtO"Ԓe.&bub bR;0GsAֳ #Ji&bYIܣ,9xttjdu`g9OPNHBgŲU9c*i v'I`:g^* Y~Am0 `iG۟8J {G^0|:H8hP@ժɖ3XĂ2.c$pwHpKי'Q}K. N&6i_muʙQqW|i {b;֧JBa_nccT 9uX4[v*ok0If{bUoI4bBMPVӄ0% %gIzjeH9!4Tb@11N plIۥ]gw!tVGRU2ت!<5S} 胟Ft|  ] ԏv߱<%wOz+(qweIᘯvn&6`}^bBX?53lx?]3Sa3Uq 'b2~e}T_ d:z\lrUFMgK6 9:]ᰶ+? :$ ԆgjmE4e<@\Oè4B|'W@PW ͒v{Zf #5~4}h^쑹"ʧFVuK5*@a# A$-6OZI(?2Ӫ#fWY{71\kySRjfNo7:;(nl_>ekA_c'+}iѝIB$Gb+7 :zڷ %(BEvIP7o *KPQ6Id?E ]_pJWu2u~7;odxE}aVJLjӔ2֐cj)QKGek+m/mc'qn3&i^q#P6*_"K+A4\<^y94X lw'HuZU|}gBl@l|_'vK/e88 3d P(c,~w~2uξ1mQ~mܝn{z4R[Ǣhwi8׻+"a劌7=Y=G+Oxf`@:f;~a*{dy 018'|#NIM p\1*{.֭M]Sώw^Dn\.cs>ǹp`q֎|kcx26Wal4T{d n%H_O;;5-'[ jζy勣nY{TDJZ@6*ުv9:@:y>,"R`;u!{}GJgaPx 3F1]ǕԳ=)}ow?QztgӏI'ۉ!j5i@Z׼/R:~3m͇q ( IryjiZ j)Sf0.sFW{햜gM.Xpj[{M h[@sMH&vnTyTٲr`IiCbd;xO{gԸz'8"%B@٠3 J &C3A>#/k k5yDh6'GN.t!6 STZߙ;;-nme,wƧr":+o]ĩ WBXhj\oR|D(XV^DitJ~<)9Ro-h>b9D|g؊ܬrT2⸛ 'x;5儩ռ(|W&gݸ=-s-[Zc~u @Nd6g[70&Nr@ FKD K;ɩ.MξJ6n%2i |ܱ4@ tEetN SB0l]E ]f%/۝X>>`ǯyC">0HM=p 6΀–o) sm4ao޵`U-rKRaCK8#SǽP&MKm̿f\&Ȳ83ukiDZVtM6wwB o7gxm'E8]qj;L?/̏.b! ub|y<+71Pl*ʳDD-Y u(ZFi+y,z[̋Q3QIjˊe] ]­fhϴ#ۤoLxoV1&х¼xv9ZYpό-%Q +rXqQB<.XI5ڟp rØa bJ@iӛ+y AuQI&ݯw(BRRG?a:.LLvXڃRc.U截/:`E7iNP5Td0VJ?FŊsif 0mUgO[3Հ,e5cx߈c,eO(?aMasu;~P'rgĵVMTlHrZ{DȔ mL-=Se IJgz`_]vP>wwtrZٹtD3Wba(n. ѭrct9_1Cb!?M}es7,Davi|ܽHx-0%zQݼtt5Ox@g ~R"ݫpfԚFc3& xBoLˏ1x=:ϔY).05G8luk.IZ?+jvS>aCTmdBӳs=J~WTGѬ Im0v㲑U?]M*!甬9OGVQqh:"ސD%y"lQn`qm,.w׏ *b:+~V9OÔVsAyBdC c5rM,(nJP=X&$g8n@2 W gI@n;zu[֮ )QʹOD cH1;h}׼`z ЌъUJ+{p5j2^9qw! Q59Q B5'،Zb0tfq[3jlz z}~zS!FU@1Qc39R! AejV*8b&z|~>-#߷&@ @DOq3O\,TR".-%:qQU7/,Doj& N8i>͑ř\ F"63F2%O=CSz0ԫ (O! %@ł/(l/pPW^"<ϲU!K)2"[PڿN|9r%s. \̆;]_y?LP c127@iJ{R)~c/fH*^k˚/m87~j *j`~&z jk - rU,1;51T,V 6wvDm(uvSU!LF$lS3M`kh{#4),brdlx{4H*\je}HJǙ0F\ 8`~i6 {f2 B#խnз4X+@5Ͽ"̀}IHmhTf6WQIrƜh}" [֧~ה9ZFq6% #ć:,N*|T<E0QZҋ`^l[Oo XVwcxKCtk".?ƺ!#vX9^{hbhI@2jx_]oP= G3^Q%25Ks-6/()Cнo'ͪt@8^Y(m0ܡ|GnYF\2@&[QMV2 (6E+asʼnYQabqW񛆣^A]V1Ysfy}MWµ܌Uc Լ`~֗tj|wUv;(N tToޔB}~%:*dDGlizNjwGA/pp"O `0)^Ӓy+놈y'I$:!h#>Li.!u#Z34Wc&^~ABb[p?#e1D1i{N7(c q;**Kכ/#"<˹ݮC`E׌BJ+:R&{ߖ"kІ*J; h;j]k2`*J֌,V iq3S̖i܌s$ gd$H*k`ǿwJ|m?k 4SH(N qBDuMg<`r8vKC>_J"NG>ZzZ7-"UB$N)ߝ -\c(Wlz_њ#f]`-B]jve&OZuZj_Ead)iAwxTυ\qNuErXR,H͎Y(DHbgKMYh2ҐQ蔭$TPKqQhzj|F~ԲY>+#ˆjlAΕT%~*9qE~_09{H}[q4&Qae2EB&G{ULw\*`QdmӻrFL!쇃< A$U&%lC;l(sc*|'7;ș{7p%;E4 "UKKq@ Z!I\B89*I1.4C$Qr7;5QgaoV *9]]K[;AD|̅TbnEp6PU:s~Y9$^ME j`mzv.~,;DTJ$er,(_:HD?xY6yWNܚ _sH"D{5@C5pl Hf&㴇qTӸi W! {4 mP޸`^1ucY* = w"=;uW?z&̯IuMq+ws8o޻]}:ug| JGTzAt BMZnrB6$XpN ;g6|rr}:C K/G{ crRNV.qXX$;5WYt$? f6EDwsP )Q(D5-,fM/ /) Mv;5ڙ.W%}wY#>jY?6?M,R1Bc38pPmI{gxe&@`uRhd6D$Gp%[ŭxq&r9Ԙ#Uv0R/j$Xϒ.O7Wk6V]|9<ꈌWLGbcw6^d3z͏^ᶅ^S_%+3d.Wd*or.6Vm߽EVd 0G9|{tE+x4r1V1ʏ.: Q#FӂcK6''(`GhLqS@RVvāRap7v*8hOPLq!BK@||Ė4L?uaO;SY(l^lvamƺQc ;h R%JV9vG D3l.Uܝ*py;yoǧw-w]3,QG V,mڨ#>¸%uƏZ n̎nf<_m ]v L8;o=qw8Pi+_U^hܺ y(cp~l#=~$*_vױop\*2pu"%y_Öwv{5we7r7G 6|uF~,I=dY߬IbS43 62Ŵj"T(,.8[+SR6nM5D;W֘~T6\9Gudb@7|vrqghC\6g=3`Rz]Y'cZ_q_o"Ce|[qH`3sw r0ͤFemԶWEP~A.Q[& D8ԯ̚z4oWP9vv} u jk0aOŠOʞMʠɮwE^Y9wJS jѲ~gT8}.A8~/?uP&,k oH]f0W|$[`b}dCuX~Csj\ۼ,?.Rԥz6c4*ad%=#__"'狑Ŋ%y"DP/ 95'pʠ~W(jzweOtw5&G!Rsf8SFswR\4(fG2bx<Ĕe%OZ 37o4J<1;ݤ<損bm ,()3Nھc BxxL촉H*5us6oH@5! BQl 5uF-oѢnɄûh$ 8;uu+P>qƆhs9 s_@0ovNAU~`Yt'`Y,2>< 9aYXP!M{5#W;;k"gU5s':J߉|f+쳙3v@Q{GGmډKZ!M+T=W'*F{Z󯘔^c^UtK.05SsGGeS\bf{ٯD[Mhwi"J)#o`:J;ibTҲUKʏѺwhi\qwxRƍS#^Jէ3GĪI)(6/2ro^ 3}B?s &` _bj\w_ &-ذ4.E+Xq {l Tj:a PPY]( eoX/{PØD{ #9t!a_!"fpA浔̿1Ul6$ze"M$\2l ~3{Og`LowYŽGdx{<'m<z;S23Αar~NΪj*3(P2؀Bwl8bЕoRIcSl2 JG{~A9HG't.xDT%{abv>1/* +v6-_G&jJF{3r=U&imCaJA8 ȩ,9|mz3$N~mht$奊O&g3/PūK|k4[kzYGCmG=x1J8tQt0lnRZnI5zgʎJ`1L[ehaeB1N$ *|ܔSbPÄI]LWl[h{'$Rcb"/4R' WTj?3Wyh' 6Ư=kp3h⯦S%Y1^?R}g\Չ ʱ2"t']Nf}5@y}0MP+0MƎϝ)nœY z'wkݔA#?K(V *|L.þs [0-˜֏*+ںnˉ$B>t\;X'S2eM 5u\.丆{71v!h nch*8 ѵR}G{w4ul$D+#9sfJm;bKjuMˆDh3 'C`pOfxzgE2}6#eӕ?!O@ +L,̢y70Xݶrr$r/jeomQf|zv#_xJ ;az$@k#!5 (=TZeÚBp;2hD\V]&ZzH{t?\5v /ļ9~PL̦(5DtJ5s\H#oy73%7?~l{6V_84N$j8rhx0ԃsO5gܺx'r% ̳\[0Jgb٤?kLK17L޻ᕜ=q:i!އPF,޹^WHزg5m'wUB`F;s;tdcp*KBc^s;.s1YP?5pTLK0ڮTҌ=q( W覀L;?hy`R"ob6PT$ia$!*l{D !xȣ ›q%071#@>K+@B-+fF^ce*IT]g/EJxK!E#2\@"L996x aʫ)Xt1d*1 -)_|f先ex _Iðkt̮4psJEQFDv+I2W#sxˆycA߽dW 'ҳ9|)σ0W Ya<05ZKb}09==tPw:=~rN@<:ixwde5JwR@@վj̔#ZlK)^"ܲ+62 iغ6l3P/'|5Sr4r^C^Y2 55KCXRۻ ;Ykb۔jvl<~K }j bmO5VH-=OD.^ fDxsD3yj]}pZt&Վ_(C8Fl朠͚^%lVܵiaa1ư 0ѸVdHa֠ {R8;rҶF}Dei9\s3n۞װiFFw1y"v~=ggs 0g >sw X^OyhD'SrB7X7͆.R"Gqݶ38r;kNR H;Zq.^8X`<~EiASϞju`͜|=ds Hѹq"(lr5>U-Ҷi{~tQ.LyPw8FlyGmiX t*_CVA R'u-w|ш*fo<i-TY3yͷ%n-YO훹EmGv}z]e +9ޓGD3ud`j")Z ø' p #aλTV-ĸ}?RM5J›"xNC!:`o\Shuι$wzߵE< `zDxsJ9k녭7J:Qg_07 ϙ 6{ֲ7!i5p" K3≈޾&ַvQq.2|f F/}Y/ 1޻~%\R[]`yVcMi\}L=G1Z)/C!߶,@\]l៣xSY.p26JwlMoٲq|1T\]Y*Z.< f`s*MVL}EG!JȝKN}'aU$wK9Z 35S{>L~Qe|Y ѿ;K,N ( $슯r*&Os(}x)ƑU' Ifko \Ǯkbv3ߙ~#tH:I1*2y( Ƈ^n(j^5dI`zgpW8.Nq189Ǹ}]s+k|!hTW~j|{~349Geo,q3E^E=1$?"')'4\C1LpQ.$Gbi5ˎy:]{96=8GvhտmE}VW !WyH׮kB3''%t8ڭFSE~}«+HW=+'& ]QpdL_ZcDqVUY:TW/4lxU}^Īn⻓fyDC;Q.c\&;lO~.ݚ@9Jx6n'QK ~n^xn\sewfg5) imbۯ#P A1jE@)FBZS2LwvPGH}_ @/{[ϫQR+ToD~.- 7Ɲ- ^> f׾n$\W;}DͪY6[Xccy΢ AuE8䤔^HYYr%[{D@)BCpdM9[V]i-Bd :ڴ+ ޢyy:Gf>eF~3G˼0辺H[Z FP\vF%xE"c.?aPb*O, ="}5`wK5C+u>R%r[CI. Ek7A0 \k.GJʹ<ࣣN&VNMu̅M }(F"SA%‡ |Pǎ{K/zm7vN M"'ϑ]hepƭU}YHkk|*,1 ''݉5~1-)C Rk6M*{_Y<Q`wE8fEVi!;BmǯlRm#B=V5Mj0IFc`ޣBnZ,yXy̶wmͻ#-]e'a8;9!_U!fܡWVFՅII 6n1 #;MG!Wo p]m>=]0#b\>Lm W5ACg$!2֑ ?7=!$Pg4'ZPpN2B^YC}UE\˗lPLoK %Q#$6ʘgF0"'_1Tқb-#86Fi^3bn0 j}rMx56Ӡ@Q/6n:FO6vvאC 5d,_o-H}t-"N|ƩݘcsUVQ?(ub:^BWD#sxec/D,ai%D%@!au[*Ac|*.t,hK|mTWh 0lD8;zsq7q%j9s(Wufz ]}`^Xk}`U* .&eU3plmq-ƶQ2<==@,8u4Ji9=ei`vrDN׶7F9 ]Z*a'2ΦҍyHTT`> >%@UM@oH;+:.W0~ĿD7Eڻ3SLԳ7,1_b`C_GNIп&{/aXSƧC7ʍ ~FH6H<>눱M\\+`.a11g$)`r= \GѥHQn;רV ֞Фl<^e]rlRxqb@k~"b8AFwq M]n e6DD|WS_`qbD(ڒ7ɡA6}(@|*яT0|MjCc/:I~+Ĥ77ՍC:osn"oLxۆe >Ί> gUce02ϬĶ춵}(;x{V&`~fQ͝ŏEGELh /8pvz##dLqcZ+70U y2lxUa\Н]X\Kvlh7x' ];#ѹ542BMt}'a3^ ΫB"aJ!P^'pG9r&3$a01vM`(5@IƐHPF0&\iEΊ#l TkN`vs5[N.Mc!aKwP-׼Y+qPWI,h +Pb7sjz#B.ˎ)H {V~|>M ?]teǼcC eR5 (k lrL7MͦD͵*n}a pFڇ{0#y@޼.A6r~|XZ._*F &D7M[)K&kSphYW%n= Fڊ#FAэԊ L6k5ƼT jƇvCxd.o|_ꐿUc*f(d>?}5QM׽@dId2_r%H"{4xOOZ8pZpUdTnlvvB:ygA+yF[E/L,ѓ~sJC3vNpkGY2,SO"t`wn|khiz+LUaC @v';ĕ2@725潽ZZϻ m^Eԋd~4B&$#]T3 xg|QXF+g=_ēb夠to[ҭf-ꤓ4iv>z;X#VO#ץ|ݩmR/ Zq ɆXgTY! u+Q]խF?52dvUqk`![.pdGO Azr};|QƷtJ3~m{]!P:6;Ed2ۂ(,.f_ߌh}_m yo [ `3Ô4!zn%ĥ,ZB]ʘ6+Yz|n93c?6MZP3NhaV"eͬN8FwoFB;G$>z'j='<'<;'xCKxY VLek>sE '6gC" "X5i<7ّ_>jc%6If'RÔ6r /nNU}CԈwJ61GtOA˹T@0c_5'pq~-ޭ=Kס6ɮ QAW x- {f&IC/ 6Y B/^gpd'^gEkj#n L( jK#J5؞suIlqp~)7;ӈdmnw4fa β׻(S Dv{5՛Zјyc[( HOKR,.IyYr̞e(x4:͇grn1sX|jqye"+t!ʽ8[S\S@ ̈́vfвda#HYaGPC:{̡^fN@imEPC.=r,BL"WSrtF2A\둼Y#ۍygmgG4`k-ݞ_<"ICa ;"lz4s#bqY9EXn#ғ']hOc8z;#[Yc8zQPKoizv%~cg?ʒ"x}A].qʻLυ`PrqEH,+W.^3u`wIj>X#V:Tn":@%]=#7,10#PF_$cva L@ͭ YkmΚo nNI+ghmg\~vzB/Qyh9]@⣖$O~;HVTTKdal61CjJ7e.^%ڍO+7tENgN^$.AǑ{;/+X~ZLf%ras CzxҾ jjXd~z#K/?7_:BwU7ܙ5K#_GTcɲbAA8:ԦjA]G?v:5ԅ}g}^)I0{z"Ni!Tra-LeŤ=q wXr7 ]Qqy;`A]N*L{:[Pe;9|dPBC0hqB&-JxjKB*î=o93P%a=Y [w2mѤ:7oL $w]R?ək'ű~ruK5 lZMǨB2sX~l^?:zQ=~ˏNY%UyㄗG?=s=l>Z픯xXKI':x8=]UuwSqDGY)v O(77v-dO[ߚ9xq~RGPOnoӲ-=ns.fn&/=IK{hɪQ4hCЅEfN?a*>N j !3A ,ÈgDN qF{_ysB~rN{M~ԃlqHFמ3쨩_.R+F}ua-E^MS\uN%FD >ܷbwL Fl ZM0t%Kg~/jƊ PȖW6،фMԯϑ޻%bЎڦ̚/;P4y0QHs+GϟTz( rDgtv`A}LCt@@τvP*+#|]ͩQ7]j*inf#V$#[ME30%*5Dcn:xPC7)Qťe~}T.H tm~EŊȌVFC̘/k  LM[?$R&ŏs7AŬf+Guf@kU=yFw<(p~*/xqDh;.ј6܎;>uUM]% ?T~K꼙/*(d8mŃ58֖OSXsnQdNKg9jms;/<8A׍2z)R/T(V$@K YJM0~ݖ~@/I  CN:!#by kON%ex%jѿ:A5l7la%j'HShԑ8R1yrT t})v/fs6]{aQŝ9XƵ8蔽8wan>zcGr=۪1eq0-G˨@9)[fN{0`z@_Q( vΜL.GxC3eER 3rh2ȂXGo{Mw,r̟/fgPxcvD-Vp`B)p૎Ҩ޵Q`HTU7.V׸]L@ tVH/9ru0Rg=',Q 5#3/r]рY{_V ꜛSŏcE߆*B;zKeww槫dQ[ :"9{&ݤwಬY1ԕ, 5,Y9aP4^UbJH7M9VѳQcytW8G!u &S p41ǧ-_O7 `$լIBaӨ-쎵#|4\Ez`EoGg|ҜQ'jcSǀ{]zj>mi+W5]| Ɨ];,QƎhrͧBl~U3"9?Irnw  ZȒmf];rɵ,Qp> :׫Ϥsy ;@7(܅J%!CjxIJ&É4{CtzBYz@A1uSB6L~s^{ AM׭$f'Y5ppJ뤓N [2"ޥK!`YËXMT(.h{WeRI]8[79)L^W2le]{iRePw40`-L8݀>ދ~Q p; :]=$qeBgF\. 9\'QMZ 6Ա-~d&{h{\2lJD"">l I( jgH%HEP >(Iﴜâ <M^ rzUgwW}|\$ъM:Yjmz`5RY }"S/[Gpsl'_;0'$) COn7ld_6_p1Iڹ+%IٽFv'kCzAȺn 8>Ўֱ< #C^>Ӫ Ɣdͱɩ~Ҍ_ţ=UAY6V;e;Wo=cA:Q2ɴe=]B[r{Ci79~c/MjX8~]S9t>ܵTNWzIƍyPqh #ej^h0 9+ڼw K[vp 'H٨S* Y1Em !xn'?8F-隐(̰:L-K7ڨjH.tH0(h&zP?N|ui/筈ݥUٝlgM]ɘL߄.`kHs8,w>0}="ո,G;F&UMx!"<ъ&p3e[ʦΜc5{{%hI.8Q.+6A%,<qRkvB:iǧc2kk{<7Wm>D~})6Mi>ИnR\=aSlr#ZV̿O`%VQa?}TxjK*HQz&5K-;5^p2ej7f-!&Mpg$ˊBh4 ͥǗf+Y -C#v?˰k3gyq+Wq~Cvā^ۙB2p v͸61X~FH [LFhjr6Z0u_ՎG7[Q~ak,J0 | 7tt^<)F娯8^.PNu,\='VVڦGH]䬚@E-؂SߤG4c;0lɜhK}a=(=3NVlSpƳi珃W,}o߸Kjq.mB*f&h}fr\Gt֦D]JOY!iRő~buysys35&5sg3'vLJnuՁ+$e?"Wd9k(fw9F >:xssfgdw"c BJL hM| P9}U*:qg½Wa#B1j:`$nWVQqH(ES.e%sMʊE+\bi+w.*huinJ{L:2ryh9a v-gO9iGEʼn*Ij :q^#v\]gz=R}@&cs9: D̒͌ۨўB8g~70~ #B [yUUR> ]_/ owIvQ;WD]&&-{\p4uW"c^mqt+MZǠGPc Jΰ!2᫠ne>>$,:F:'iw:|Zgnyxsods~e&aT8vY4W&X.FM},}< )GpK'bXjdn| O(4E|bY=+TۣX#G=c۠uD>mH8 5 (`}w[oy7IE 3eXg͝zӛH Z$BWge[MF;Gp 9^u3Y/b}+l*}E^p[\&lûq1Y]>X6 ?/ZZ=‹ ߯D ANVsw=q&'(jp#hB'Aw^[-%KTYz^{>RP'5.Cx"eӃY܌kǚ'ǙQ|obᯜKY`_mʝn;XH}̌ؿ ܇: %aS#kU[6#*oPC/vZ`N|:p]CD3lûӳѸod=m}}LU< p)d8AgPөR}ZJ 件PJ(]\= IE=#2E1`6+ T{C+ tm^0 */;8n9EјEbDx E?wÎ0nk psNnÐLq [΢M$߮t(aoW_'ԶIdPI)7h$Iqr8GI6]U S;RH:#= _34Na 4}?2'Qz` ryLX=  c%l ՟%iEKڗ=~ͼ. iO0CZ 񼐣I%&4R1łϑY*7~ p.oBx@cVLͲ̈F쇒͎zъQ![1mՌ;⁁}Y^Z77_":kY%w} jVX`tbQhw̓Q׃A"#~q1HzqϠ^<:{ l`u`-?OW|p]/ѭMUF. X&`uP-OvUxMjbkKLt=`uLDyVn#| B\\[Y:UޡkHP^An9U]rh1o:p+H t& ` XMPޯ.'ʏF._G 2kAp9EatD${Ț%`T"¡QxU jAL㸙2Ӫ>''V?ɼ9}Fk|`s03qTj sD#崝Mch n)6YwٴYX9n\]r91qm`)/GӯK1_X\ gQ{9ƌ~ rwk/Ƥ{w,Js2 qqZu.-(ynޥ{㱀N3J荤 ooRf)ܕb`uqm=)>y`V^ 1"L\eǍM;O:c!j fzS׍l:bGn=>^}NV 3_aIh/FNt'Ҋ sNp %wrQݱk©kF=`)5onuXל\Ws6y9*8MZ^R;I➝Ozcգ+w0xcv]pF&"6IV)rwۓmFjba_MkUUe.ltOH p@{>j]4דBWZz#U4, >Yͼ2<ݐX ['4Ni S(D"&FщA1DKvVAF1ffi)ۗ-JhA[*HZ]ԩ,QH=/fh}d9.gf(nay]c;+^@i ԃ;RTdKH6|ڵ)vK@bGYyYaMNBO3VK^ߵrN${ /HX[9"1#R` =3|^zZhpŝQ!fzu jAguf̙(kb^=j=c/Y.f+J٭tX?OpN-"zN~`(-o1e!ri 0 x!&dO3rKV |&9S|sܓ&3(} $"kfޝ2񿧧.}:Ac}gM&hdc> |L]G";z$4 3=xDKPß8bW=IW11R3*!fdYꊫ>uchOE;F;z1;)wm#M䎾䌿{;|WpOz0Dr r]tŵɬs)1Nkf ]8^VC{GW7 dv8d%>f,/cxFoJNRPv3P)eŏf[6pKBlyF crK7&zXR"U!ՓP\G)z;e@9gZX#ـq¶k(`^:N/l{WKQ1­;.l\ܖÔtak4 E i4־8P c KF &7ǽ1-dsi fDN8GGSUئu@-8M7&JgKko:f kl?3F^x.IЃbDUB8kHh=G5"l=O{_p]hӎHtTypH+.>Y7ۻtc}]?w6i}||^!d*a˥>{}ӛ ԋ"XݓJy-`yTe!$7BX.<8^_u1Uj=_B  #+ӝPю9 0jms|zp^u/][zCa󮖼u)u;ʕʞK% [Ut>C0ˏ|%Lk~yiXAq01DUPhtퟯg>8/;xfC-lUV*roܰIT^1%`&e>D8(}S,cI>(#ӃzbL4{?{8V ;NuP=MLC|*pn<>Ŀ&ݗ3 3?ҸL F<݈<8auqI)wvIskk@K Ǭ->sD.N1(RE3c޲#}VC[#3ZoHMR!ƍԏTO *\|sةE1gׂR?2*xw*€*aI+cURS>\ԖOeWJ QrB{NŮ,2moךUxaW{EDqougPNLU$9]wEn{:πkkWm ejO5ՏZ꬛aizRyMókcQ*gYASu86PؾB[,Nv wX"ԧ^me~6%!S>CH 3T? ӃĈ0v+ Ev_8BS[qӹޚ]9nlKD:|F-YfMrږﵧ"qx7ŀy^r|9pǰqZdBFT3^LГ:&{ D6uL˒=XǵiHj^5&C_RIҀp2({u&8 ¥x@[~W&aI0yiˍX/?sV[ǰYqc8l*Ny2I *Mnt]I +cv°ӔҦqfzJRLL`:XxTHlZ{UC*P旑ʌ10ŧ,n`.@Z0e6RwߜI{+I1,:UZfĻꌠްV:s&guMiFpGVPg1y}55rgDɩQ29ߜuNb~@eHO^xMp@0HFp@1fY{%qf6>n6,'9p?cra=3jiҋlgL`ehw81_Q3;gvra#=B Ip$')9r*Y9WDze=v I֪ >Hb3r7O̫=$5-P8>6]\fr.el#q0¤ϥE'ƭ*þ:pf(!LK`[tkGN4ͪg910pM@ NSuLBfUֺ=Tċ0NpHe|+-jG HQ@Yv`=eD4|r*%h|yfC}%qvw}=/j*7G,lх, J$F&)O{rF7^v<>|}o^>e+L2^y~Al.RW^f+u6H"L!))NjxE?7GՀ\YITB*x# cTǫb_}S`5:8upವM҈OVa#y>xZͳFfOMc`iBt(ޱ 5zC@"dBCWӂA/MUZ19rq!IwOUWhƁ|%h_fuό"Ml4 yN૆̗T?B<'?^V 3sans4 [ճDnqq(]cXmDUBiB*?&N}"˔[Y{|[j0Էޏm&#OgءEK6Ꜵ]:7HSHچNA.!.ej,cmsm4NSnވJa9aCbfi=o%XPɁ.LJ+4֌L=43S~lAddAT d;fpb3Y\^G(a O5Wݒ}OCyqTPc5LfLJ^tyTv2(Ī5(EPga-1yGkOwMwfj(DPT{O(M ~39cX 蕰c[ wNo}#j"'h>ϒ@E jLAXu-'*f5u2tkpk\~&6Q+HX5V9 RLxy VD"vw"/nWP/7sΪF.vZ@/v<֙ӳ)]٫CI|"grOAO +z[TԨư8 hŖtiTw 7yQ^D&j5VW-9krq2:wٺ86Mn^gFPX؃?A}ܨZz]5XIMЭ9,ߊ0)3.g"$$1ne8t@/o5en<[/C_gt@a⢿EmEFA{V-N+xXeYFf(>M>COFPC3F^F%QN?ZnG-2O^|bqpG5qQ|͊o9wG {}ÚYz zh):,z xA{!|~i QKPŒl=ˏwZgQgcd&&tޏwKwi#jՒi}O9#"}mid:kR#"\XWfJg?#=beqlHA`8MoU'8X"h?uXc+SFPiSM/[HT, bY?ub<#m(荷661 b(?trJ2|nX²#݃ק-(|r4V)M!rbQ߂`2AsA]?ƜS7SB#7I5z `u)H}& HkNfiJOZFR2+"yUL)4!>]sƟuT[9Lej}؟; .`X A јSph㘵Yw8#>7qf"di ]gV0ȅȑ{ JjC`#D~'^q FWq2z_їmfw#*p|TKDͮO$/ K'%=hFsl'n_@\:Oۥ܃uGuX)*+6M! 2 G<ӑύ=(tԯ:cGMg]=w]7.Ե6Xk4кkFE|RSETxw2~wEocf\b~ =#ONӺ*Ӂ!m"q UV]Q+[sgG,'jdY4|Eu}/M`NX5wfGaAof{pGWئ"S:>Β#<{)Y"e+$ҖY%sz'*CA^1OEP>d.# s[`?(8`{NdV?؈\Sklp{@^DFi;]}cTb9y"xFDXx)^$홚,n+Ӎz2Og3o_"GDO☥hxX7p!Ήt}q&+y4wk7|Xsn?R.m֡LCs8ҫNSܼ4t1VA&pv%ʍ\r:=%εHs@hjͭq)^ ^_3==1ׁ܌QP&9Ԣ^@} s<0|}ۭ>HY/ 9y47|j<{m,FY&U^=97aþHCГKvO2Vdž`0ٴVQ+/`wcs&M߲zdN֤ bČXrntqou4r(1: j58'nL1Dk5XQXE>^- U6*+^QzKOS<h"0m)9uk6X\q{>/М[2(mKw91OMZγjDf?3dĚ~@¶TbcUQ2tסw& +5JN]&ɘLF+=Y|Y[}iG@vhڇ}Ql5W*--H5RY2C4QA;1Dԉ_n¡q`:Br%n؏t"yQFqY\_^*ƀCFoz8v(ּhjUHѵotI i*Q0Ah0@JK(݃>1im#dX-guq#v~eWzj@J-*}x"3mڢZ{5A~nFLI^#Et#ybNOa+~iOHwMsh:0/nQ͈M+w| &3+u T*9]YZdmt=koƀFzH드Y'Q_,!SlkK5F@yrgjkLQ4.AN9 lZt N=IM^0GإjH/'F̑d];dGF 6uTkLr$5b-FuPl^+y,v 2ꉊcԖ,wKkhV҂!HJfڢ{{z} ~N;̆rq]mFO0[ͤ^KSjjtA'a=lW^e8P/hAŏ+ ArŹ]|Z殱լE4SS Z55?Xm+K0%Zn-ZcJF87!Qݳ䋮;"RVb"6pv;anwxȐ:/ˏ~CUK],jg hח`aM>G'pp(iR 4C}:SQ_ǟx\mH2K#Lv+j6x%e௔W_)1C͹WYНJʩƯboi <ێC BXg>[>Zs,4i|khD^0#Cet]]{XjB'*Fԑ^[I7dՏ&ƬIGхv%f8Yiw)on1C)%l%FYT/J5&~nsZL6wNh䐒wc%YGKR&czlCn0Rűt%H6ɹ)w+ͷİ5l%u?+@5)l\trɳ>(u:\}r`<$hRh.BT x羂 ZՑ8 3yRݖҧ^6!a֣}Ǝ]W|QCɸ%ʦ$yxzB.!rOjb`Y_lq܂ ~-m ]wJN+ )%fD SuV&]eP%ӫ+7ӱfN-6$!|: K_Xap<2e\zt$abݒ}$ \HR?~ҶL^_oJ oB6P֜0 l<4鮯y]z^65Z:%K̀3RݳD-O+FcULnRt<nܭk[հ qNf*><aX@OFVUHSV{i:Μ./H +gN2>Ͻn7KB\XFU|w>=5 -?L]5&C#{? /8>Ie֨2]/cB_C#Pδ[5٬1| !*Z-Y2ύÕͰRRƨ{H~3}wIrݿШNH;B"%?m ;G~n[Gg|{UEu[n'@?GeȺ$Gv8r_ k(zZ-U\/ޣN"O渊_'5thfZ[_5z)$0THJ2)a՜:r@]$(r<YeL/Ridu!HgXk)A1Ԑ'||%&OZڳ*ᖘ#DX8үdJrCw]׌mtʜهf3g1UvٌhF3eM'i!=q::Z8Mǡ/"ܙ͵B9 gVlO5 M 2Ԁ¤X^$zq iӴ=;u'#^.Jh{BX1Rl,yJBNoĿr{oYB8LI=(?d,+?a|BTdN2-,I倻Yvˠ8dt AhNbaReh,o1}r<$=:\9(Pt @o,n 0Bƣ&ALp0|q-SidTMJ4l^֡-t WPq~MC=hX/HY!ya|.P+y|a3.wTrn(p*+U DGy" %Ks7V={WhŪ=_$3˷ 0w뗠 DU<'nݛnz :AOy@/t鈁ؘTS@HM}6[mV3K #2q z˝f[cp{ۼ?et#*_skj-1~ ¾}%g`ZQ8h/$*ʧWuלpG: |df855VWvN`L0(r7N[8g(+_;~mB7e@U;f^wnDWhͧ=xG:~SG9thwJY-7I Fɞ2q|}NCFEo*x7*w$B7e$'r ۋ"&pO2›L #2e! 1mMzQ3V^e 愯p/ʻ"QGBN}>濶?LͿ:U8r1},4''L iLo|r\-bԳT K_I'϶%x-Px.| ET@.sn;,:lMxVúoQBBV|J WU֩/Uxu*<8w$I;lwa,G>sK6ίhe`-t%l[:[|͔lyvd5a߬Y6:Vt| 4na7>Aw1hiITdq]GH܈p]A$vaŌ?|_ LNb:qr/t&$T02֪BbXw+>rY8p-;+fD;F(0H˭.cxlq%>b`sՇlo ^>CALe9lz=q%!A=7u=>ޙ6`?Bt5W_sPʣ͸ [F;'2sDM&.U1 rW[KvtpKQח~nuoB}Z6=E6'/5.eUP]+C͒[ =ƻz^!`*5D$zϡD;UQ(аU Gv/n q¤Wk!-ܧ3)W? UY|z2B` j_pyѻ>cB袳~Hj4LG:Y#H Ũ[O(.8.#eiO:C]'La3Cs(25#A(!d xЧXjt6~'{¡i<_MFiH6(蕿d@syqV#66Ͽ QQGF3q\9eY?q\uNbcWa!%.^qYmH?쀏:}aty煆*^&4/xlWrHOgu"]c kL=Oɪq===->G{(Ggb62 MO2l@IjLrt%64 ЛԳm2uث3gִd{}> 5ҕdL@.)sGPˠ夠2[-ZA}*A5ڇ@ b)~\ ^APxwQ*aܒ%P_&9KԩVcDuCWR~bhJ? ΡQ'=:(SD'8{2 aSoɉ*t̒VJk%(عv^xצ.Esٜ踹)ա7WV8iU z1':ؖh\a~Α|U\::P=.ʏj^~@Pn3z_s+ˏ^LdGq8Gme>d%_mFnc߃^Tc DmC˄W&g +~d/u;e. ,Uś1%|IcE3Z3ݫhDGĬkir2oVxR8MPۭ=x^X[q듚N!<N~Ǹ}MWPYyج",*/q)+ks?z}is]ܓp=EzwZHu9+'ӰIWad4E{K+ǀ:-"YuϗGCmIȞ":qIȸ^{]iYܱ3'ybJc&bG)> 9GxqI$6´g8G]gG?N=Uy-[mZ29`JΠs& #[ *^,Gs.?0{Yy^ }BXH#TZX+Zh. zQi`S^{^5= ~ &11B{,n uvW@ENgFSXbzj Ŵ0ܗ(:0KYSؓ9|6[D~MXnd M Pg⌁;5@\D{9?4RpUu5xvQW =K:W[:_("foX;RDKw4'[~]x !i3hGݒ55y? `Y~MfąKn f98AyMLqCXV GLwXv5)M)|Iw 3>ӶV4Gx̵Gb!$&nWBukbM^zwޮq|1N0K֋wQgnK|" gq8RB>`!l>g&썑 `KGga]g$8$=l)4hCS@Q')l\)v`h} ,Gj.<0XPȆ.dI> 6-S$86ŵfT\.&LDj1* % \@9-[wrDSwXO<`n˓ݕ38^~6] BwNmяl-S9ޮ,l7$n/cM?p1&p&"&xA[1fJs] Ty2fQ3|˕zG)Ҿfn ;U$y2 b{N$hkڊE|.3@IP{܂Mz$; ]hmh|Mk~ePnĝ^zC/S;U&={uê>"\q6aJ|-9}T L fcwMl3!|p/?!0fU#$|XC;JPaY=ףe}ktb8" *;v47$p1WPPПYL~zJ1>)Zn"zq-2/\ d~P :u$A_YúZSR2)ejub)Uab8rG)ʔC鶍:=e;%UAaJ{mz|9\dui,|>Oh;=g5_1b\>ͪ9?ꪀG._wS̏ O1CZne,;1 ҤdHXD_$`j l`繫\:Ҧ92aY9]&+g#H ݆(Z]ppkP1n:R0$+b@tx4' jZV)RN=XQ|qȡc%fBpG FžzW*$lx( 6og$ +uZsm]4P>8wQ8 ݱŮ~oRIG/t K.7"&mkgff֑3ƌqk%J$24 5+/.m5Q7M Q#4$bҖ9PXSG->8Yka>~-)WW5mrܽK͏#ANŽ0:Bf^3Uj@a\w6 sVMW{`)_ &]E(F&/8B0$WKaZ{N7ٍg (߭PJ:ZϦ0̈́$}xhu@gY4 A()EqO`s-ccqe?{WL {Ce`䡝z.?/"S/]M@3S% 3O*9hlJhoNk={0Y슷)a$4;Z1v>_4U.=&*N+8FL<}.ݏB#$H\b >O{WEY :ށ5RZVI2BV >Y~3B拗%) ~T=bӏW.dY`f鈾Nk:i>1SobΗoVO E__P.1V Y-5Y!0#sJ{DRK:@̒cP_C"L݌:Y'zM}. ̨9}&0^@[ms+Xto2gx%%elƨfE6\#IEb_̣,S\G˕r+F7(lz eo>G#|zDz梑w &~3Tҷp'fPtKa|BPy/zu&ǝ]Y]l5Fz P:uWuN,Y׸ps-'=mW׏ )t1pr+a}3Ґ K>\ot^ɦkLFfjK9k<`+ۦe^'oVWFa 0\~5205޲VZSQ 4Hg\/ (`ZŠ@ ݑy}SkϳT,Xp`cSXX0BS32S:q|;wUyڽ4r?rǫLU3|4]RpJ9mZbuُhLqi6un9_ 6j  f N@3y':s83Gr =#{ZQ@\dj~)@Cِ?Ȩd,Gi輜ZbA~ʑJ􍾚PVǧ) U]F8IQW4vXDxIU`ڞ%587ϲV5O/ZdZ 0Z/g-},lj?]:F>.13aJS׉2s4aoy[G@A"ad.'krެq2F+ ;=Z]4=#X̖?Vƍu C[,(?֥5@q>]}7ĚouVtFǚ ѕ8^ .K*m x Z9|l{i5 -ɱB|4de_4 5'ʸvѣ4AŬ/#1Y[et{6ȃ4`ni :N*݇$vvk iyb(A8}\(in54JvHM*آ<{¤8y _ݬgcR =G8^ʯBgg 8!eSˆ=D]LrםѨ9€\$5 g⯳LOS?E l#@ 6;iXg^iܥ(oE ieףMj3pOzڏ9Ճ(J}, 6Iw_a2c蝴\vG!: ~Ԝ]\DI(<:7}T<* O险u|/J ~Ref+5-SIjɠ.cQ=A&* }I'{'.ݙրML_ӷw*Qm,fMXƃs}A^CjjTG~n44ObkJ7N-1Iovv.OГsG`)h j8iegX!͜KD.GVKO+_&]Ae4tQVzb붅l0s[ԯw ^>Aݛ]y . -q?滉ExP=LduN?6&}@rWu3#Zl{6T~G?3볾Sd$by%Zx5~8|& 5Vi糷X[?ٱt7!DVؾU/gq~L:OM򣃊? ?]{L>ȥdQ-RZfcWUW|O09GgWEp].B80'i@\ EՒȰUP5 |%$6_Ҥ{W)SGQ -䚜U* ll*X4:sj0j(h(GliYFO| ă4ң/ IW6c3U՜X8R>#'/~;Z8ۧY2T8U{Vާd)v^4@>e;/s5~ =i>㏹dK?ZHFFf*'rHa*uKiD^ӴB6IAmjEFNI%*d(bX۵4KìͰ+71ޣ( .6ΠƝe/hG<;Ǧ'Xۛ@U]A 8}g^/zCw,`*TGt6˝Be5 5q> fU>}ES2Ȝ|8/5sEErS|W\ GzXc rrg<.;&9$Gz~ U`t&kƑǙ95]9<%{kp`Ps,G~uavR. }1~b8*,;I= U,U&} /4pI I^qw3%7o˄nЙCQ+G& vv©f3J#^#lɴu)'Q8ȹp&:MtRlBM6f:z=_n ^۷r8(NKZ^^9E*]O`.ji3~c.Ʀ/Z(b7 7=܋0=Ҝߒ<`~+6 FA]CС4;vybCn3Vԍ*3x)$Pn>)C]O3k<&JME9:!rN>pNLp6|ӕQ~'֠$ja6ƇxwKUE7/ܰF5zh. 9!E-Fq!qyI馧ÅԩJ aUoOVۓHMջ@$uHl#RkRa^r`ȘFc:I*Cpg\ӾPmxj, Z"Zcvs\k4DѶ!F҄:EL0M<VvW9(#;nNmwв&3jRM ;\#Jb/iBJfdvӃ$8qe7Z ݳDe8T'ljZ=j4N6I`W:n~2G<29kh5{w/GT+@B~ ) "pmWHtAt1ꀎNy\j O7wXДÌw>!f?+t*YTrPZJ%2.FњK̚'*Pl!"5';x_eIY.YiL/↙ݴSU<BvDJG/^6*˞ 5\h+2lNԋdN;(;v=PρT/,fS]1B 6IXİt%Ў,{mQխ=E~5߰Wt/kOP'^UZJhDhU9m@w#}Rj1Da!RmꢼkY5mEn7e³#;U. ƴv?pCN>3 4e`f 33,Z'f湬yp`qɍ|d }2vcB:OhiLil+a0 TZ܌$$/*CDeaҏ&0| cV$JzA6;q%&VM2c<>3RLXj ~ia3V{vJx-D8zk.>| >Z׏p aZz- jut5sk8`hp)w) ] 5gt: Nrޕ)씳W.kq{>7o?bEG |U|v}MB eQ;֥M+1^f uNFQ1XOӉ"Oka*^ȾگP׍ER>f1d]Go :UүDZm8f#37Pv83[/vI]&66ccmScXoJWZl6: ;TʟUp?6|/d[<OYԛ\(#PBLJ=s,* hEGaӂaze/**=X*m-t~VlS_d# .^xU ]H{9f\oH2a,S+3enF:h^t2sIdރy>q+nɚi!j{uF,gtM?Bn/c7j/}Ϗ Ъk_j dh0jkoFxy34Y`fӇJ Ƅ嘩N E,MVfѭߘUxObxO4Ã)mǰB C6kw׃8ۑo;m }S֩k\͞Pg{RZbN+ҟ(,&#F+\/CC.r"Cg58w[-km4gFx9*|ݭGU?:a宕 {R; AQ,; এzhc MÏVG 2lͽӶ@9(wP(lLXUT63j6= f7?ȼq+28 |3}'5O@%YÓP3,<^t_9^StxpXW Bޤ69xפϢήh\@UQvB%)jf14Kǹ]G՞`pIDpGLG﷪M OW0qp*/Æ^c-:^@OZa) <٦-.xnoifi&t{B0›q$jME@:^-Ar77u*`reW<T ⰵm t!P}M?r4}_;6`mbCY/n> jFFi};$@*)]#48{#x:ߡH5@fpLqxzui50W&67^O\6ߖACֶD0ćB Xv8FH 4ods+p5%0Xe3V=(!L{%GTiEf /{2Bc|aϩ֗Zc"ؤՏ(+'n[o&2^hH|zYK188`1!u<xӪhEʴf;b:x6{`f{>o1Wu)RkBS^`8gdiDzxӘ3:md}~wя ޮ:WInp{1Xdxq>ZU EO;׎B}Y9D-[-?F/ MA^v?Jh:.C_N*ƫϭ9\{vQAJK] ڍQr3w(2@J5"9ogJ5X ah! m:"y80Pm%[{-wW_u|Dؼc+R`vx_d Sh[ڨېyYLbEujçck}Ex)]6yG۷D8#Of.F"bYM5˽CzЦN(w%N:5f >f۰=ʏ^ UQd@թcL_GPws6ȥ߻Gۆa^~TAG@e+-ĸ( Q~@}F/!SG| ad L<^sW)&su,sJ[Q6. ǤNPzg_4x {l|C{̥K⏀PѲaUukTP@KMq]L;k0H4k!˼]^z .-+6ݏ@i\f}s{:(.'2nx2--C)-l3@/S2!2¯Ow<§{bJղv( :==^h JoL;< [[ܿt2B-[FQ.G 86(B:NE (~(᭮f/MWjl壀XYLIw>qi7q1!6=nE }ԳfL00ӭ"+ݚq>݊?Ϳ?#Ƿ8Ss~X_`Y.4i-Xmyޖows+zGF!n S+X,#QkRguze9Ļ͹|9ۺ!U }Ol\ \=S~ Ft6bt +M]a<,>8zTG>Zu9&/5?CMwid+ǀAr̔' V2QӚfloW%KǕD0И>u${2fgPax1R)aS[O}}!>y s L yf_} -]Zz&/PF6ƜAW=(Њa @NLxK1VW/IwgWtEoWVM(g0t13jnx髴q«o|f^@M=#)H/ɱoЍHK|>v+YS8%h=ՂMK#GV~`YS"Jf ASE53;Ô¹FAeoLAS  0 QbR/f ~~Ckj ѡ\3L*6&5E 觺@Y g:ĊBťfDmt]ۡ[ l~U=#ma6`N2cO+w vm@8zF0XsCӽOUоz(= [VqBKXP_b$tӷx(5\ﺟml L"^>eXBuE6qn2*Cn{fO%I(d1h!F18>ea~A@# }'2q[ 'f) 8c%+NG2-6I= }PDhzATR.yf9Gyw.;+WSUy &ʦ"ڬJjg"}+z;ћ4] s$5`J{L1jȺ-p*r&tS3앖kRqa풌:A8cQu4Q~G%W8MT+NE|TZwe@ nd hO>I@Xu>M }Onzv8\ .1UX*'y`$5Mq 0mW]Hu-J\"d:UU0uR̈5EL}JGX-zYK.lAJ2"fWi IgN+\~94V^>%|ʏ0у(sJbcNv2a'f;W۷!d\`xAmIO*ufveIv:H}Bxūb&ƠUi{%|})Y_-Y u2>Jy(ǽ)kTM<eUK=ufօҭ},@_)ڲeŦN2BPяvQ:pQfVQ4)EoXV4:>#$Ӂ;l&E_UJ jE9|ɫ|4_@q?˳fV*.&4,M{)uʴ7Tf V[[n`5>o& b&^S=shmIxmIr 5Jy ,][J j:,I#12_KB:wwҏx)2 I,E:78UQj}O#xm{L6ii击yѽ.Uyp]yTZY< pQ/n5+og(ܕ~v!WRŮ NzvY'gu^TCe{9LA)?jIp *6( X{մXbHs;i n┷.zB Pg@:SqΔ`|ϫ8) .S VJ,47cC}Z7܂FvC |(qL֨$ s?-m[[^@=O Xrwշz,$H qas;R=2 -Ah{hxyv;BغrЃM^wY*`}+9P.UtWR;\O^yچ ^\G"{P9kcU݀8~ Ry.nG_v6f;*S)9׽8t 8u*ڪ7qr˙"] 2[~A^fA_4 & cfBv.NwrW'! ־(ث2X+uδǛrRHu0'\YlJYK:7zTFQELêW*i;eE]XkӪr^zP_ZFHza"]ٖ=Ky [3RnQx'K a=y90j\q/38fk.)L-Ilۄf M+x*t>G]k D?%@ Jh87^uXh\2P#˜N5:j.-y͊HN6EHRCBײ]K~Z#vwi7G((oeDw]Zi6mkԅ~4ĥ SϤQ9:I+pbBq5LUd\-5W>~q[Q2Sc&{yZ`׺u9zqthT =4V=}bh.QluB 2 ~z\BAݤUIF UWS;C3FUoLчt7߂(ޗlLf,Lt{Ϊ\ߢ#yp8K";kiC3T@DA[kgǬeb!S9r!l._ lԄ}d&n,#ylEB~nsA,|ct5ؗ1g5!}+~#X5rd*6L/˦ݢlfަ0xS !6C۪eZ{1(3x4 굚ʏi(x84 v=rRύ]T׆~jf+Kie5MRзr_̱O컵kL5`9+JQH"+byQ:]}YEgp8D#j-h[8{a|B+2v?r972ЉbgFJR3uӴn#@{UGt7 ]@ܲYO|T1QUffXA timޛ3݋u>>'6UʣM %%Dc$`J>G<`j(x|i,OC3cgGu'}77176~LPa"SEFf~r1E?^`N8vz՚G I<#/^A ^m,EI ouw,wO37m#M*Ӗ]"`][`gn x1A@2-oDHoYhz_p?[z.=бMh, Ԡ`yO^{ՋY"uP wvo`kbfWC\gQDԧ/RzY9vb%H .р(99>P!aֽ3_3k/|MK 6|pymTsj<&%Æ[+5J$@̦f_D796\қ* ! jwn,P讴iRi{ӁȆW/RkRpqREn9M;vʵ5y{QXժ\آg|tgO7>;gI͉*BXNBp_o-8Au^?sY'8 $MWg04Eneza#=S dD,Y۹&##48|OB/&Ic+@ڗ 9D0ؐCmЇCI{vkI󂝱6LV`F5u1A1<+Y5KlKާ|J?lP?ж )H<5Zdy장p(rs۽B7<;w+8Vν ΐUL}-7}9̥wj)3x Z.HNO^K ק``FS>d/VL ˣyU&~̽٥Ϫ`|5}W@93R6X_u)"(L6%pU LjK0Fjcw%a 9GsRl6O`,zUOtw)EgB~5dIzl׫Nmiq\^ccV{N h"(un&J9G-26Qzk n0mf :*ƭ5n wjbGMhBR4VV$Q ݏ+3̍&WfwjVEYF([u_l%ѻhwn,@W*~pPWNQ;SUvsJpU5c䧣O7)e* ԧ&zFH~:Ws~#$=& 2Hs8'ZG56tf5 D L}.♵]tCrP0;\kqhŒoVEbn-JJnoyEjF˲Y2A[q@6*%I?R+pXx|fEBt%UQ% C>pXhZ55"ӽ>Gc'JMo Vg М ${yF$%tE5"鎅Af$؇ahLx |/0Oxp2Fz0PO} ֵ F\>.]tPx0#bu}EKrsNR,QsF%<{Nf,>exUTk]Wr\DeN 9M?Q[$ u]f|ۇ sTé`d:+xy||g`)^ gX%u'2O5SfTrNG[ ]d ˥ ˡߙZ-$]uOTۤEPCk8ԧs`nmk8:mLo<1.91]߇}XԔQ)pfvY@02FB?#a\0PE"68ss;;5u]2AÎ?;u8@ko&i0nc s/qark\}@6ےB;Wڿyяx`,]e6oqNV} RoͶ=*?[jNu˱DB_xt^5|Ϗ62DX`k4,KiEV y(3C ȿzuhO,QzGbCpJҌk"ru@*gNaP;kR$7Rub K1̼̅vKC"q#>h%KG2ĸ™NU(̇<ɁSӹ6l5 rn&(?j!/"kMr6C;TgBPeoԷK Smj@)hgds2?%hZl-B18ľ:HU\xYrb-H8Zͽ2L91M||噆)fZDN'%–w ciQQp}bsUÞ)~HB-W&[]ej;F,BYJ#uէd({xFBXoKHJlPwUU8mwsq[%5 bA_;pgpZrraVWX"ӶaV70>4k o&eE9WPq33kd JU&UOѣkqt Пf 2bچt|<4n)[iY Mq$; #̚:b{:Ov'ḙYB}\^ͷüsU`6E,I\LFSnIe2]?5z &;puYvqd·x7}YZì^K#~!Dn(an8z/Y) ֮23fUG:NC)&wxYz'; l4\'E~_Gd_7ShiC3WC*E8tutM|}nݷbUIaxJM6עQ: UAMQ nzadH3lw`aʫml %_Vl]7g{:]b˰mމCjeB^[2//$n>yоYP(G̓%xVkuڮN-T[2xAM,2ڵ#L[y3Ya0e5je|}?.YAs ٜzL\ҏ q ʼnn%K4!N5+Ef6UI~:)%-ns܊%j #+~آ @Fʫi6 NQ>o,7ъ -'Cjȑ7s-ㄲ&S3lUv~: T)}Z{ `=gq 7l^F02l9Xd !Lff]\Vq5+xLr7)㴝75:MrsD)v<Ӧ;oμ1!B)6mS!9aj\iW/!ƞ#‰%p/SOp dj/7| |:^E<N )=ށXwXFF ob6/jpm_$x]\{:N,č%[ѹQ/)|)Cú g!?w+EkfX=GimhClϗAi*EW*SWzyR7#e y&WyіB0¯12{fY8~2/VmÃycZ}](pN+3C{2 +q/} @\ ^^̒YLp3QnBQ^Ӄ5a8@!LǛ!1!!V8\Х㇢j]8ƫ~i E ϵhR/.l1t!PU.U3'ۄQav1|\]Xq֏vpq.^aPa087>C5f5gmoβeóc}8DUJ@ cd!6uk_}0}O6)uxb^a}`k6ϧ{]1ۛՐ[V}\tSOB`CQUǸJnMy4mWL(^}:8)ج2!2{4:픹qm`:=l$Mv7|.]?!mg˥44#/p%շ 5ڛkJ k YTxA.޴EymEAJ *\^'(`P)dLSr/j kD$XoYf+sXyq f_]aQQ7֧G`Q#v8hy*NVIx>dotGUAbRZ; ״f'R9riglV"cG~ds;Θg0[ϨvvzU︋-"1eV?V0 #V](rclێ7 }DniGᾋF2egŭX̾>_Jr$XO=}x}Y֏w87nǨͱ$kbʐόA¡椺s݇E2_^z~IWvLx*Sk5tE5~7%QZGE]vgMvkWZ88d6+s;c@̾:3$ԹO*x^[V‡,r}Vu$ksLܭSZ19̕uksciTP}סI^<D{5G6!bQu$; HLQl"qsjm^ƫZ b6c(\v>aʅ75uA\O;s#dBRfE0v"\zˁquO23DZuE5dy< v6 xP<|rT+faZ;Fj:::xo6G ^ݺg4 oz_Cas͓T|Ȝy NXu2{ C8MWa6uүe(> /Q4}nu ) rqqv0yٓƼx \, Fw.HjhO}z#OpwTSD_7S$STPYLR]%|.^U!wy4^tvQy_fefX* j@٩ce/LcbTX'Qa!^Cкw 5Na+GnK6!ſl͢RsFMڻ)ܷZ=cqt^*K.HQr*ᡝR%jj(ō"43ub,%h9x Y!+W`9NQJl33(Kì~ZJg3*@Mxؒj.Pk쥀Z+P/.RvjnмT!'// pdC VsoWfI 0>.XiӳV,.E?*3DHj"md~9LD,e0#"*Ng.Rr xiZC"ʫE8,H g t)~ton5R1:kkR?~xE -HɅ:7| n tYߊ9&3;{:Zg+6\Zu7 pR֋J&ǪSVm$M۪ϚS/^vQ׎g,3(6m{F{i)@qkbi ?*k52#ɟSZWQRGGB)*`0'; 4 ,7͐RXW ;Anx%oi܇E؝]2#;[=!X8"\Cxmqx^9ؽi0e` ^Xa/73._x7k~Z2lv,eM%s2ފ|3/W\ O*8D3g 6^]3vG_l2ߡ|;Y|K.w}ym74\ 7㣐 Y~F4 \7ᖧI'̨fU5Α3DUάrPY'Y-kyb\,/$@U;|>՘VV܌c6-NH)۹rDZ!7z'ge8  =\%:0M5Jc~"lUP mGBmQFbaꠏm5$|"LE*FitI7t dRnEA.g,m`^]ep1SRP[>Ju}=E=Ӕ$:3jظ5NSWL + ]wyaL9EDlԥ6uagsMe\]e\D5B3qVO' jslu)DxmS_;wqLD~AWC70U`oIt%Xga_?e^p'Ua\SY_>@8Kܯ](\iOە2{qTwV X]r]/ٌΓUP0¡Kw"{B<#|06dpYuP\RWTQ\T8IQ̔*A %=CM[Üг '<\ZvtW1­'o?WuVru|0iQSmppdvM&nc9&;lֱ}ܮO \-vXE弪\2w~=\Rsm:編}@ 8nflNVPQ}ZRȠA_~ƞ6<9EC;&ӆ^7qgBt.CqPzA|lw!9K3 Y~zLuVzMfkʒNe)cAR&uE7JThrЌ@OŇ{1p6=,C0G(Uޫ\]>02ɐdC6ʧ0ګj>eLf7GD떦}(Ck7$1)o0)5)N})mhoekٜ%ǥ|\1\slz- $ (&oy~^&5rJ!tϢ|}Z Qc1 `gGDNv%gQ{H{e m ]P{n V)VIש_J/p*Bݖ55oy0KlKya!A5 T^^Jʜbhȡ\=8S 3رv 5jS7v".ssOj9l77uFqM-ٙGw3$I%wk?y(lm(|n +6uT%k S¸9=$rb&Cčt[*kVb7>%IJiesĶ~Q.QI4C~dal{7SWbK(WcRe|s;3M*CfgW%bÅE-FԯY-j]#t1@N𲢧WYFa Pa K/^6>—GG!yziTrka lW?gUy0@+r2BeOՐJ\42x.Ј!= BAm^݀Pu+G4; ]HdԒJHne.D Anp` ^ֈC6çdDoUs4q%|Me5Y YLZe{0Ywh],^_$^+=p 6kmW1ME!iȩ(r`owYF3\]iqvɠ5ٝf8uNvV;]Fd͕g 5$sȘmOi`|@A2EoM8f<h~#uJC? Coټ) X՛å*+=NY"y-mCh=7c1)knZ7BڙU\>jw(|혮Dc~ fο_z䰝/@g2>!5^Uaె"onm>#/ͬR"X[R%V׽ z4zu|hEuL͠F-B(d5<9 &۬7C4x O`jj>Qs[[yC,ȋS /v9!qƭD-2gT6'%z1n?M&sA) ˫lP ]Qb? G\DiqǠ M ԸiD*lyh叒;{iiCz)t)G|=pQ:xu? mTq$,]Wwh[Cr\# 0т.*r8:YٖmRYΩn,>yUW U5gTҦ0 Fa<6 $&g8qU5G5*C#l>Nt Twۏ}:B'Vk.IFϗn/=r&ȍ9g4Gs YwJ== U}YtlKo{ D?W}5ߔGUPwT9M&0UhK-H24ЊZ# +d6*u;( ta!;?1$~pbmysݺgh!&G'lCTEH})n |%M"^}5<|Xvz>Kh5( W\Q x2QcBS>vZ oֹ$ Ix*Wd~4  ]&h}d/^g M[r6f"RlyRu RT)Ff XFp0pķɩ5iHFppx/K#%(ooʮC"k fǠe8.I5s|;x#7PiaUMӭd[3WI,+ֹiP:b 'xᣄ5鼰 3wv%u 9q%pV~۞!FpUI6lmwꅾ: JċmH,7*JuN狻t6W.C_+@ܵ4k|7d{vQrn<(?I^ﴒ5OdSbT:tC/? 'M/R}dy錋v.=#X%_EA[D~ƠQ/,xb8xX.=-.r8OO`H#o82 `RB>eR~q=P?=@wI5 BǍpu^B[A^%ʂ،G)IsrL3e W3=Kh|Ų}E]GM݃0QFj) ?+;R>jv?Og"7Kncl4^7ꎷuf/TGצZ7ch:.ޮ7"{5@_!XVYmUKJ55W6=#WJvH*_q3!vrd>vk{W`C+w;8tϫSb7Z8=$ 9aGH~3%"2j'w ʠn-ԔAˏc2iw#tqOWI E~/?~Ѓ X+ wqBM VcLPsբ]5u=Q8V1RTfDG'U?-Nz |Qm|aGEոseO{ZpZdϗ03?76^OHe7w1&-A8՛A=\׋NK~GĔ1T̵UGX/n3)>A] sw9U~[^Tt҄PKw"v9ӛQ 1xa=ݼ7%b`"lʘ5KxPъJX_U鸹TPbwxgTWZe`JOuGnh쟮OZdƒ/^V3&--zt, շʏbʤ(_(ĸ:%̡+gzFs`|Ja6{P..QANݚZ3s(}g9Ain[$??xZXzJwh9 X,َ,Qlmny(vǘ?׫,9|6 ?i m?B}Nˎl \<0~M|:OV? /M)\<0cOTČ?hm=&|)B%0喪c FzMfhA.wM v{YЀK@̑^䯾㫬VJAWg]󴪠~[(iX"61 B!f#(? ѿ AѕD%{8y} $N/ @cRcĎk,#AQsikǼGs[1w>.9ԍSxUw%^RS4n$Vz, }=Q<\n;座Bpx^1ofA J\)$H-w0_>$&B& PZ!uC:R&̤ I6ĩ##!^qXm-{B[1p *{`MGXDq! *G/<<8C`H=W48w M?c hRM12$ݦG.̝|bg ?Hj% S] 3ܱѫȐFJ.]4^@IP=vJ$F_kV0"VD:&/ZFW,%eQ Ys'SwX*ꖙ3z|ۍ[Rו!Pya -ޥ>Wan{W³":%q~C<͢f;_5:_{mŭwx?>,h0/ea?;a]Mc*~CU=r&l؀;<!Q[׌)N&E% Q ;t)U~ !AHbƜJ5: оbdI,? Is&Qw0&(? zfez[7yZ&{DjP MA5c)AAsWudߕ7p@uf# KO.i1gV74y.WC8o$Vț˭Q e QO/Nͣ ~jwRNt Je$dBBhw~/ctnֺ8n u@f0#|ٙj胣rqE]JZ"7e<ǒ&#@g}wg^yy6"xtOQZ| $HJ5틋,<ͥ`$>8wŕ{$ JbJ\V[Kk^{U_QۏMD8SͲ 05bz3MWdT8[>n2kł0q9H@L&e\z.R^.*߾PUb7 ^fN-f ] +Czk$&%2` t_`~[A5[nT2KY,iA0X~ QR\TU۽ԤhZr{ƦZsp;#;fXؽK}-lr6hw)՚a/xi0νV}\Q|`+=!4W͐eJ e=Xh{Q1a|^*ƺ8WV"P 0I-ˣ42969.XmbҖ\/ !Ұš`ÙUK蓙=p=d˃o=Qȏ+a/]*dN1 $u:.`g}*s_!3y* lUY@jR>Wڶ*G21(aʾ˽j9SѺ=5Y|\QvW=eS5TCK֧s8>2F*2n(38-vnMmԨfL#Qw9elrɽSMw2%y-=FG#}!Az .`⃶^>c& j:vb V>.=YVSyz`+li5㡋3.52{bo?¦ Ē dӪ*/>Xsb<#V.OnCPgbb -33 UΙ.^Z0:C v!Ao$b$9WF;4_̹_S:#9K{(Tka-WًATxy!*q5JX๣:fh鍬sO_VuB|&qFcCT [Vi.?lm;o(Dyy$(唡X{As$^ѱg9Awէi&j ]; IjUgϛ2be]ŭv Yʮ/YG-*NFMZ s:k  )l!l+8Gxƻ*1{ʎ:zVS|-ـBDsikO7 ud0mCNTu!c}ٶq]]3EA{X.*YP *`qI̜Z.-()$ {vfeO Ɨ}j#?uV j'6dQ.~s5}Y2oW?^5a}%Z„mL uﻌT3ɛ6t+7y&][w~>r..DI>MIva:H#ʂc'ѕ)hUc8!ܗe4,YCX'䲴ѢFffm ԰ZSny63MW4oʀU cJ\{FNSZp/(3`6ΌvvTU)usQϞgZZbAڪ)H|Wkg~u`-: SCd9>J=bKtxl.PitNL`p@Pĕ59_*V\$ΕR>3qT_Z^~\> 9nXDfށ8OHirm+X5֢pPڭ4n 8< YBC+ |R@08`-(I!tmM͌rz/^$ZcP?YWoʳuIuy< n!v浯 <f5Զ=wwOLu @g3=s-SpvОtYu/8wlH*}U?7M &lIayw׫K{t x/ݘRMz%F1TppGDvnv4k\2ugacXtWgIaB fpT,&nKn_=#?BU rggьqQX];e5"(`u+9 |\+a 뷢8pYnQFkjD#"aQw82| nJK#mo mqOZr=̌'g3z_$) )OVJœsYX#z! c0Egk'OK o"\uy˗vNo [})G^0aH} M KkŷOWQ\kUM/v3w_Nz9 ̠R#+=u8+#L@N z{2X;6ucTD>6R?02*qbuyIE˨7#|y*P6%fruЋʫ's1׹s$tO@S\5KWS̍mv%-3TPvߒW\)! 1T_E)RA2YRp#\;i;%/rl'.z6SW֎9S!d3NjǼ3\ע o̗\E6@n@B;d ixqjZڞzaK5\p=ж KCT8iS~y<_:o^BDHÍӽqE>k1^!MMmnq\+_[|:- U(͗/x0rWafskVȡ =:F,L,]8P2 L7S xCnġY6(3/0qKO +En>b/8և3gwprO)!>(8t{gb֜#|CGGnO%r7'מ%v,blS[z8huמHi[q !K㗎-Ff/ǣv xT4 6Z1~eTm:OSb߉^r杖c;y-^ޫw9wmFd2_gψgxH]Ns5r2s _Ja]-^(4b&8dDW5 %ի횐~_dpv[×R j%%AP'@XuH^c3g)F&:?aS5٦OZ.?Zb_}ӎe1Wݖ >M&z7\!W>Ӊ`}k|*6 K;;Vd(.QSʋN ɴܵǯ="8 x1з8`5|ݯ=r:)o`]p?@zڽ@Uyϣwڞ{2cݥ?P?kx/;˕$C)G S,_tt@F$ϑaJ&'lɡ{3F7tocl'gη3{5* gG]̣i}VW:U*ٌipxg3Qx՜ g84Aꝟ۫lN(ҫHAշ=0ePW)Y܅EƿT 24b]nKe ]h 2W@o^@wcAd1_գz}8z$LRK#4$@ӑ1wtYl|ьe|ux;nPUYUf".J{vѧX^ժLJQ9}P&X406iy)u#F1o7r}RѺ2oNE 3Z5дkUv\p(ˏG~AsǨS I56y[b% HޭE0&F`#9$ qw.sb?jh#֊= E}7_@T/ɪ:jf]3{VXc6ڲkWiHf'x_oQ _b?@Xc9`k|cV |F.}RIZ@5NV Cyg*)/a&'hՌ%j'". sugpMWkTZa&}1Y&d~Y> =[$`8&EH,:EzwsA1s9j?(vwg;{egVJABJzJ<;!=hqZ4#X-ۼCKY+$[agpɆFJ&B9E;lD6'Llb9JkN}$Gr@wG?YsR+,c9,oZǏ=.~;;][%Ӑ^r3䨖痣*L@tlaK^e^*Ϙ(xy'Lv_G[@8éwE3e5;|@>֏U.+yYpNg6։(T-R|OtޫSna@J77@x@y0sZ uU!e԰WY#>2kf|lpU X9&set"]!6@N>O<^T䱲-̃wj 8aEvXHq;jiqZ1}\˂2XP`{9fI<=33z88>jS.Eݮ -SG? ?6M (B0GpǝbLicU⸭>qy>W'vI=NYu 5noBBe"ЄL)%<0Cr$A%x'kF 8P ~ dL-( 1 =P3*mHG(a D}xm]^;e_"M68Z3&+dDJ tF+߽1lJprK/;93Czل^r:үY0eÊ˽>Xx\?xܩ}紖--{+t(Wvu.7?>2" ;xqAJP ٥$%)W#pT)+g,W mE֪ }:L//;W4Ƨ۲n3Mti7: (p!/ ?1y4~>(KynG@W tN^;ԀXlA 7oc՜e%\s6k^զR1!|pƔh*;;#R6lbfWv&X!pi* d]Fdt] j ɯ{cr Ō;GvX:,q.0ФƨNQx±̣pIE9 7Zt[X=q$3eM7zC}'Y8jU] ^ 2_gh&8&lԄm }EȚ!ޑqP7q:{ 6ԤCQ؆EO )M~6 Gq x\%|*J㹤&50#Q,];MID˽cc0t]"1ڇkrѫMR[f&;vTI(Uӏ4&PRlc>{b/B0_>|oWa/*k->X(˘[E] 98<5tu!~'.>*~}HټEa vjmzҾ z|Oa"SX{_}bhJ=0%K/[ rBH+d.r78j)Αr$Vsb+k@R1 _JLg!NZܴ:?=~4J HO ~&ß ml6%ooO~wRm:ҏB(!TjD94ҵAk߃]szyM٭Ey0ށݯCe iˉi--_'^8L1SnHnO+@| ~𺷄*WA- -f0fbC u{.kMkphuCs9|Ah=eǖ3BR/nP ?/e\o(UDz" o #$d3f'4\13YWߩTۥG4kBjTE80&(?yxYȫ?x+Pj4L{Qj\9|`&$yp eyIEsB1dX 'ƌ0sm*2zidC3#M3h+ ]"Hno]@g$Z}29cxѐ6o#֢7ET-ZϠjo'cW5ӰwX{룖5ͶPS%B]#~2,s ~g 1v|֫nŻSz'LZu8O4\cZ4N)_|-`NKޝ'qڹ u~t>]RI ry32 go]iU䢫|sr{@/u˸鯞w)q:_]s8:& t3Ka~j1_跞Ug_MYU7jF+z}#vX{ھxp0sަW({+P>ϨzoψoܖװPbDŒԳ5 9WeStLTڻ*ftUROIiX^/+T7_`oz/VQNF~'%pMKd?ZKNSby'GaP4O6Q5SB0rp OWs נ:#G 72j'(@~TUu13kUȬsEM`Ѫqe BCEΊͻ4@ģ ~"k:#;;X4w=Eb%j{3M+zjdTwG} |+;/m#W 0/jMoS}Jݔz}[i59beL۷JNg>t]!WeRS'\c]  ^Glq )js إ53>誌Ys'Rwj]ܵ褝Ҩe1moSlfZϾ@ctxq2+LYtɖoz.=z`^x'ƜӑOV t_cp+Qg +\+ҖWO^[^/ .[6ƾZw8 4h=zǽY/2Q)!Kf`aI&0"NW+B-U!e:~S:v`;Fϛqg͖rJP=4’6̙E0+ V؋F;ƃBOrs-{EWZ`H >ulr5J8 T] \P1 w-E[wz8Bh> T:i3Bh?Q7S$Rp|QLґT[Vc 0f*ԥ+ه\5W"zYfT赖iq1϶]:'Tk8kut.]E#EqLg/J@͜s= k0>B~No|oTy;ԟ5!ѩ1@\| gS y|6ei 9KBL)Ω ;ҕ*gʬDmlc4'K;5)zfL{1`׆zǕmdڭű0&C%?/t쌔.Wxy\%[:^A A0Ϧwch&r=Kz@/xy.>]9bz4v'NF~'a|kXNW_*-v=AwbB')Z; ;F:B(ʑ%']^ta>.FWva(blA jK͹M; .."`ӰqKf(k&aP7oݝW{q2st L}#eyUA]eElY9zq 8T>FawiV3P̓SBguFHzqp,]9DE0nE{9d)mg5j> aV3}޵E`ߢ]Xsw5B .|gf ߠ8fs.8ܺc+OgeE\*CU4UWA WS qnv 3W4@W5ʏڰlf2⩵@ ԤWd$m7ZFMR;GMlj (6Sp1v0_=!f  Eυ;QϬ8 JԀt=X%¹Nho ~֊8[ѭ.{M+bh*ݖ#٘~ӖGD+frR@l:3\Ҧ Ccj8FPk悠:^<\@ʠ^E.6-)RGP-.8L^\P fhc G>{q2 [UnBHn|DAD4 MޡߝnPXuvA~٪-f(}O\f{5ݱC~<-= K l6n.CNQ_Vcpu fΔU>Χq&7bq:Ar@ <2*7v%NvԵ/ f/mmF!(x4 & S(5/̘i)dLou:F|; CNeC R4䕬Nxev) xzޥY.W疥:\6(|ՏGq\d ! ̹-χ#hc4wgמC tU^9L?GF9[U\%n>8Ԃb)/~nx[ k(VgeL͝~doLBdL Ȧw"$&4'{IO,duo!AWs3l*O3-(TpGc-dMmI|`޻Pl1۽(6¶~>C^6 LRx)UG 4߳ւXnkM:ؖK/'}G[Oٙ=Q:0teiوRBQaYʸXN%2bL]:% 0?<.QzD)eTH6 "SESS!T-#G V2 @fVp0} )W܌[ő| ǁ^#*?Mn*Z[Y4`FhuWGu곩i)d ]@'.v:r1i v~A ?C¢)^Ls 2;o u3@I]5*n$npno:o6-() _M92vgv1,623nRЯ%OZ;@zjjH@+Ӆ߃4OF1&eGŁ{zIpBc:R%Y =>lXK(23 칩Bg*C`"jvLUi9 L$,!kbrLrQҹc`.Z:rDX|խ3"l.v_MjԟAO*<4!pN[ꁻxjPxPMWAV`I6 ],mmJ$.7kuHT3~*|ɟ\&!S:|Գ(N.dEG"1%dmOFJ{g"z_h$)%1mjucR{SR:CO7VM*CD'$΅S싽oB`ٞÝ%bSj;jM%#TkbFJֽ.6BF䤜?K@Ո`^#ȱvnGmMP"oԊl/Vkq~;jPjq5(tGtK8ˡnK>KKi'׾qpb.;y6k%+Kᆿ'`Wna[u;P/37Y6'm:n`ƾ2mZvvbQ֬r>srb fUff4[Fti 2yYʿGfaL둡NZ0уeH\;7, Pb틻37y-HO{Zxs]pt+`%*7c9XXU9T7i_ iNj$]$Gp ]:1.n(US4&iW@t 6'9=0$5w PjeZV˥jE.,y7b$ ߛ̰:?SMyCާ-lMRea]0·/ѿxn{z޳r:%zOZW|xh;GB䯤¦u'ٟ):9y^1u#:>={# w &GQq9@X_m5s8[o?LsNåNO?fKz&46\^K2O#T 2ȧlY E]Xm&8^c9PgP{Jk]_vL:FF| ]/ZsT1t G"Y 7$IpD8^j ųt3.s>LIcvHpwPzz,$dFԊAuqVc{t+ z@6'#mC@<[h7s)C1D L0rϴʒaJұtb2ƪ\=7G3~ Z[l$ 5 Ƅ5tӧnևgV-9ٝVo!bc1<,_j[T`&ǀFDP)C|HQV<ޒqm7/jXF`f2mxV٭#۴Wen g^1"·Y~* k\*{^ t o ##wtoF؄ˉ9KN_ R3>kp _\#R˕C,lFo 8e=(|Mqއۺ(ξ fL/whI]Amř-U|7QI{j(yE>Q)a>oeo?Lii,cHF-q 6̚N_԰:XkBqGޝ)+h/%GD}xjY\#֯*Ei"oGH'yW=G?3@3Hsâ͌%MSkr't'YdDEZ3|Pؼ\;O;an ?5[>v:7 PUފm~wiJu2Rqp ƞ_5sHq#\&LL O!ÒynU>>=8Ǝ *@#ru%I,;nw|_$FdBt `unѻ>.%]ۋ&ú=z}8݃{ɟK ,}.yw)2K:>O`rP¿`;ͦ\Iɳ9MhMqg!vI,%X ѱe eMdRȟ.ū8#_(iJk4jr '7/=YB uqVnOkb!tAtAa?r]gK5&6Шb@Zmƿ靋%⸆YU y?3x 1L`Lp.ra 0L0 ȣO@Kg]eC^Q{WÜCD{(%[q θ_pӫj$F6 >LM?gjT!QqBY/u;>7H!Ý_ aׂ=}~4ZڢÛ6fGu[M sH2l0¨yɎqMT^[3F9O;1;Mt܎{2ɇ*Him+:# N=oUNyg=:/*.jǴf4g_j?''ӴY'?{B,XwxOr' ?sQm4ٺ56>vo K8 M~2Ep*ݓ~82Nfc;_tXoF`4w6{V|Al?GlNzM㺪\m̗o::E7Lse4X~Qn@BJq!Lк03j"N+.XF5獇wt PﵞYY.3P.'~lf2J=g& gu04R;[=bם/rO}{G Pm?L{Zq(d.17DýGsKQ jG9ŜņC vXTynϞꡅ`@F51{,N}cLvZW \2_82(NE h_RBkJ3@ j<]O m@d(w'2&=UnBd3.|xݵ6q!"]'@\ӵKQX>u6bp<~|%RVр䡽!~$ñ喹,e0,Û*4Y!?Ru5Z!նJCw#E3]:F-WMx!-*EWt"VOؽyɪnfG?Ԯbn~itY|REH*hᦴnөh ~N0?|K~zox!JV-j`˜`8 s% {gof~2ǀT1i^v+.4Ϫ:˺(/̘/eB]vJzDS)$,|utw;O杄M~3xD*]TR ZdE.ݯk`(3+BE%ڸ+(alU! I\^l׊}qWW_242~՘^ߨd}uBTm3&޶UÃ[e퍢_,CٌA9Ug^ jy}VA[סz= ,'I}50^2jXTX→l8852"B!yVBG44<e!xw2ȏ]]yEg/ 賔I@|(M^;vөk_5d>YDi0ZफZH)!g+q=՝mF>`rOkoW^Z{Rh{c'o]e@}G\VH1bEnE5 ^(i\3?c] ?A-a1$@yO=ssּ.*gp)kg#K kF@;W9`1iWCgC 6N5w0Bjb8JRF z< 8zJ2^.;iԶ_6e[~jZ`rGHO5Iۋ}%jK z*k_T]}[][ V08R:Y"C>%,P묦T}ogkeѳ~D8y%n2Y7!PVp;ͻhr-T'vus_KL/?|ThC:e:g02&Рw)?֍]E5t dѣ=iX[SDbw)`U$R~or= ?q\W;#g"Bon z)Ў;ȎI&͕ѐhDT*D0Sbe8p-vm"P8w K{{闏\ dYiG^uQ+jlp[-wDFCE8 mG]ئzP]k[5wa9~,=Zl7{bʎ_]T/ PϢjK[h+_A\I罊+ h;IfS|{ȈL%My`Ce<I]^|^R]ao±39z&TPB T0uAQ&L_6&E#_:m'C?F .BCg2_4eW&R[#Qe\Y_lKlNl{qE] ˻{W>k*Q ~nBgG<fJ* c"z3˙R,5pu댥N(K=W~)!SÁ3$Av7sGm#aSWvk_UuN_L2>Rp :5k1tOzUkUIsc* ZZd`4)lvVNyfPsx/3Ԩ|.{qDo5"36z,eTЧ6:9? ueoϓQKiN zkH; SF*;wȎ٩̬2Glu_!/X!t")wRKuWUq2W7i|ܸT6I!$tLwJ{zi/}J0cqu޲dhWLM]*BAk>=$|{> 5 bt ? .+ 78*9x콗ɕCC Vr$2{ڐyʈרdC(UA{lix/V|r3p\)e4,CD&@IsCvDMTiԶ4RdR˞p0'\Na ?2ILy򏐓MzL&WwS.gl-}]=QEMu?BP  ױa3:9}narf RP϶`UGq0D̘zk3h9wmkoWz9xZsgP$(z騜dI*_,g_v&uTHitTB<-)<}BoqtWJ[[˩zb#WVQL+5hk8wziti探ȡ]/^_NP_];u!{pyfS/٢Iy'Y;$OPǫF*[S,;'L|ͧY ELChs7 uI!s]9g{@tΐԘ1qU挎*UNGɇAA6\,fVJ>=Lxɏ{yP{Kw,ʷV*m2^I۵U?Tʇ4%>=bi|MNm!My9Qm /m|!r (4jW,)̰*a˒H9s:͆¾52r+F:Eb&=N=k0=(pmAIBçA!RRs" ew}_4!G~i7wL_IS͓ vh)$@Q/ 5>>c`1!","8VG,c@,AP[~X*cxF%;Ͽn*$>D6n"d`(1䤎q~U9B*ڳNKq Yܨw+}UΠyѨ2jci;D ڬiolȝCv;K݆+jW|`{#?̲S`i9߽?rm\FHb5և{QC$K6(Mcg :ǩpc4[ҏ(76=1s ,8^GrDZ27}X_n[è{S[aqY(RM3  l]ƑW˭%k*9z|!tu 7+?m>)z#3q^_w1MQ3vv)t"dz@VIJ̹*zp)NNfv!o]Rqe%> Lmρ~^N;5E)H>Yd*@ȕU0wJR5$qMVwMR{_, W<Ot*%e %yhŹ661&!T+Q2=OXOJߡCkN;ɂlS$nhѨsDֻ\L49qL ^C!si],ܪEhD>k4j̏Q] /L\o/ʜ: fr^A;%J.OɥZz%8|fWэMmNORO蟗=8¶ךYkzo=;M;fq?[1{5߫y mgIV,#WV8%Oxb߫̂ˏ8Y5>#5"|-ǏSc"KDó_W}Wm~G;)ˮ6޾G=%܋solԞ"`4W ozh,NbvDu>|a0޹bx<-kۉY%Iǿ 5 *l:bܑ_Q|-3uJ?J-aj22B`ou~)i 5t{KEb̼2~Vn3M~% iHн#S 6dV2֋z:{vE;hib|+sRXQ=4.{6epF;H?軧"{=G-\\%֗u?X.s_OUNg7SF 2Zܢ2#s;g52FCqpg Kf;QzX E< 0,ׄϊO% g"MhܿS"\>|a%QЇákƹCG1%uiw2PUBMEc1C8HXLH9& kmfb7OMgiT>?;t״5tF~mi瞄Qw Ǒ}7]礈3N G|W0U(b՗$$b9ӏ=]@@4ץ|#+G6fesW/$+ 4&s%c_n#A ٞb4ߕNX;$9Jᐄdbu{=6m9T5 v Cw^t4]Ll)XRvafӪ SZr-=< Z0#Tg*i^7}durX {hV ==Z~B}VwB^KT4rλͷJC*(3 ~-K6~Fs~ݓ 6M'BɭY)4jgC@P؅m>Z'L(~lsz;(qY>c Xo >G@?&;%{|^880J{ -ٰ" 42wnCabx̵KV_gF { M nlڱ19 e@(HeHdf%ˇotJ=Vߑ#x2LIk0/hWU iP°xkMVQ!)]jL٤A掑S8Vh($J?">CvTM}> ˢQMp0hME辉~z-~B֛.m2_B{#3RL>ͫͥ-FT23 vg q W1s>{(wN.W;KX+ֺrAhP[҈xҷLZc ͗!<5us7OZ$ y$WE[|JԏkZ}[)djv\wrF E0źEb(wˎj 'kxt9qKlY,9, M:ǫ_l& >ʼn"?gf˲mNӿʦ=k;󜆾gη?{j\-6H>\[\(%}U 6fϙ*iVw'emæ%I# ,nj^W F1BNP^V;6׹lw*P@ ݪtf!G" 4`3ۏ0 YW:q3wh'¤y 4OtkYVȑ[togd|Jf#OyjΓC:=/Ey5;]kOc { S0wMWWHqݟ'Ƕƒ,kyFe:u뇖̫t !.o^cG迒섅AgGH*IsǞ>i(v%t *7I`C{0r ͤjy_sE;Ak`]0V jo8ú 8yȍ܂Gf钝~`n؈FGuQwjZfjsbEr)g#R 9Dð ~~(I}F6{ݓz2ɜ$e>4vwcR,yY*PQb3Μ$F{ގd{MCXIzQ0׀X턞N އM8jUH0iSm/4,%̢Al Rt?8X6}87uϺJG8q>ޯğZ#=Y`[G|Sɴ~8< j%}e[2H+J9 5>Tu< Z1!ww9Z=^dAVPh`ї7&%lhR1XN`uFGE;APtz92գ,Ä&Тs~fk4Eam9CS#ƨUTI*Emk`F VI-8ow7; GY#;دǀ .쒃)P#S<~5ֱLOM'O+FabL3yMLyr1g[=8`s$HΏ뻓scbȩ46wKh09ٮ(}&YuGI*bzLc1?OzY[rG~9(5С۩<ԃ jmW,t 368Xh-2W?XuۘhUeɨǯ#7|O}cp|dYb46i/%+O:e]ɆQ9V2V"qde^ RY;'rX${yWPxe @Wx|,:r[1`V#J Dޕ1IS&74I{FGOlWݎ&}Kd7[5@{oBidh["e4 {ujS7 s"{Ϣ×ؙ[-fnlvvT2Z7֛ɠpu 9V+'Hj1dPWW<⎿9zW4 Ѯ7Gls(pС]WwZ%.Uܟسu[YZ.ǡhațI PbF}c"POa}q\ Rx.@sɌw\/V8|KȠ~OyST>hE(pX FW"( &'hyJNQYh;; n=ʏO9 p`&DvBw8d2ɨKi]ڱA )d4jXxU>i7al\jV9\zf"iKS֙@poȥlFԵs+1l-|nP&*ޥ<)B YAOt_  aUoI~ ƽ^Lfk~u϶]>xtyg^l ^8mt_] B=fYOgH?sK'%/לcnwRݴwdU֎r40Ug׵֙ @pJjbtJ{?1N9GpO0+)HLL_hF>2&){R3%|g;CN?D>ꅞ_Qu—q ZNK+,^[ݤe$bu9,b,RKvmLf-F%W[Wi90KLRڡ5yPZ}P雟4,s+3. hq l\_ 3 ZyGqPK}\7Ǖu>P>:uhIMh6 }wJ`b%Ymw C_+xG/Mw{NNߪa 2qJ?n6Эq`$M`~kdsY6w?OB1[gBWn 3<:p论'뾺,odEK1[s!l$87\.tWirQe/W`_6{bRu_,P+0@K쏢+eܺ_aEqAZqm0*x 0/gQ,KNoQ=&}۪XܯPv; P&oPtK ߷V2 DoQ 8ߋQʓm3^if=3"Cxd$w, {nAZaaW%p0@S>Xzl:'lN"ym-] L*k_נ=-o(m/o=`yb]u3Ŕ&z碻m|m"P X ݇0r-UlU}!}]o dTxtÏem6Qfq,[c@0-78`r^><b_ h2Q*gjÏk` `hg\]pCAa>%p;F yuwN5ۊ.;~R+] oOeQoQW@.kAѡi55>ehEul˱ZS'SV#ᛟ.j.‘oך G yH9/klrs,lx3k`_j@`̓'lA]ֺ %=r *eT/L^MkrwLLHG[N[hg6z~\oRy媲=јw~ju*l8%g|P0 .`wT\Z8[^m}8jgv?Mi6;>=ɔ u|xe4}o15z_-d@zA I OY(n#r6:80Najmj'NK뽗#;3$@qƸ@-@{I~Bk䋵8 tSGyo&q-- 2oݻyv+hTKhDEwvߜLBW0۸@OQKFgp±<`ʉSiL{k5npȇ7P1\SCм0\a:wH ތV6̓њL6M =gEm%/Ap|R#WzVdU]Gc氿xfP#-ߐcԔX2g*z ®hݶ5)F>oM'7DqQՒ޷HVZ8j?;Rh/n|]cmfE١xc1 ÎˮUUE*^I"ƚJ7B(ie.IKyQEG݈x.<ڹ2ߗDJvgSF0NJ<07C㏜/u.Ǜ<Ҝί{kG凗 O&M:l|HX-߫0@G9\L[z䴛X&g i+¼g:IAXbtl w /kP]s2;Ad=19 a{{o(P\L^D/^Ϙ7% ƒy13ޟCIݺ]ܟ}'+a=PHmIO*1z9k$G?+Z*iT6f&z #B &vg=5^_mu|Z[ǒSpYevOd`{g⒩纃o:S7Ʊp nEV;t+U+3ROI},G(=d=TdoQ/6ĻClfA!3>>¨MTIر)6!r/)"^uJ yg6yu69y]'qL$C&_Q^M4S1LݍHM+[2o㲙ʷ[5]ƭ\s%DXxuxj'"lFq.Ģc2Zfa(`UAV&B tGm_[fã4{A'b>RN5S<ƫ\e|N N t ;MYr_ǺCOqIu^"ӱe=؞򔹃eo9Љ7]}Ho\.^Ut$ >]TLRY-ζ$AGuj>ɕ+B#{7V@ ՙ?o 9Iޮ8 9hJq3Kik'D ܢgHO4ꖝkRmE_! )*z9Ne~0?Ɯu_oT"jBjp|h(k-չ|Xz.M؞N#qIFv )f+\;\U'lw&ޑ\_?gXX(YwTn[FI\ (Jv!c9!bw:ZLAU`g- ɢ5`ղ;>TWl2t/rЖ/|\#|? CB0lEB'0t2k9_* ?G`IRF3K֊^&,,zS G=>P(D>{++pyMYkYqtm072?9Tw@$fI:ENP[V|?fNzM|)OuTOG)Lr~m^WhrTI2OeAP^0iǯX _N3E{@9}߸ŝyiQ17=T[}ZG1HzIvV8}|RRLd]}Q)WT;ILlq=$M2.z%ҜK ĕ y6A^"L/.' m;ݲS@15/_J$K1@> A{ -UnFUfP\ BIF/[]q|s~vQM <^\L@ G.AQ(8u֫i؞*ɋR  in|Ӥ[bK\^kի}*!3X&꠭wK2}갊NO l¾wkJ8$WE\VBHllj_ 6=ߛ}֙̏3 !V,LgD1}f@~|sT=ͦz-ԓ¶g*ssA(ͪr my.hHjI8 y(a$N#ԱЯ|LQ_tPVv~C8zwJaj4fYaKI@ֳhAŤ񭕼@5Φφ $rEknPl ?fmjtb\W$H'оd&ˠ{i2g7?R=zdðt >h, xyGIo\N!@:^N 5w^VyP[>֎y%7eiKj>*ǀ 0,?>!== "k*2t{vÀjL ".ZBΒlVh{mc2vp}L+|FM;eIt:GG}%_?#us<m˻cd^ʣ݇TY֓~ڇԝEhiwJ/ݤSz?dkYB[ȤY%Y}׆QSK:XKgZ6]L o?ԹL^-(D4 oS͆BΈVikgtyI,BiHGS!ϻAdѽљ,C1R>QS;^Mu7O׏(8B_eIqerƑ;OZ sJDRs!3IƝ.We}D/2]8Gxe݊+ǭLLl|kHBø[rg{: MeKh39l#avZK?TDc !7t*ʉ%nN1w[@}08|`UҨ9޻PͶR:c֏]\ I C+3&sj}}?߾-EΖ99k)?@橢7׶3^h1̨(Q1{*M.h4_]? ߯4"A:JfӷȢc+>_Gz/4VWpXyø!X*F EbEQ 7({i(^a4D|I pIɲ JPhy9խ;/4?b92y 9 iE hS8$;^B8l,W Ĺ 7e I__v*9'$`r5?3S.l]J 6(y `ݠk yi OjDpw0S.@9GlѐMȩ)ɍ!TI4$ f_tCF,"um`YL+&H82oUZq㍯gQC]WhRfqD6:+YE,v;zq&(g"s5R9IdZMJXGN듢-~(L':ҬZO"Pw5ZwX"y`|S]M:FUT68"6 6 L1OCuKuwe9?]ҜY5.(5r∃J("qN&"[F( ӻ9B1@pD{|Թj9cU[n4JQQ_ XG9gWf&Lҝ@G|j(kC4o=b_,:u]5a-.`MQ fo0ۣ}|k# 57?zQJKȅ_K->~t5<<{r֥$mM- F"Nry^}S@/= "ۆT^%{`F}:_F bAS^K6lOtp46}jj7Az5&q'5gQnjC(mg?燘EƝWwWF6iFД[\RZ`?6>sS=zo9TA&PmX3~I[6:uFH8Ŭxn/tۦ(VS4{`G# `EHB;S\.:h[z 5|ǖ O+y/_3++Lkr%8Ljz xU76g湃Lџul`iH'}N09)G bo$" aL+l5@^i6% 0U5è'.|)xY*Qfs}7!7#1|V=~6 7GgOY6.8~*o뾜lEX 1M^'{pYz5֬i@YH'F,2/+'NouQ;ԌOXm]fel-09G[QVZ!+ՂmegDd;6eUi:\8|LAB,wGD  HvU80JRE NŔy")ph [W.2>58o4@X7$;!Pi39uX_=؃,^>rPLsƺ,YM}-m5W m}p+A9Fs-=h`|~߬gQZjud.OՒ{ qjs'[Yhl"n]$;%RxjdnaA ~o FtQ5j71 jNp`&1S!Jh@*5 tmlQ'u z3`-f-1;̣§zPqyeJ{~\5[%&Թz|h!;ncq/RY(lpgQ`eRdԣ~ ݶrѥwgժC/:$.N1ZCIK7w`qvݵ rEjhKjF]F]xV|vs]ʠ!)sΠ ,P\UcdiTl2nizם{|GܨKBsfM%Xh3'Xt#kE\t2FC NoquQ`*XAL Lc]}8Q(>-c(QC;^ 5>~3.sy&8kB)N1@@1BmE^? ;'jMu; ’)վ\ B1IKI mQsl'@`дz驭[ePq"6dyN;`^H΅/<$^cg:OZxTnhӉg|,ݎ \eK֜4K8)zWIJO}L7[`>>9dT"ΕV4jhװ\BB.נEz˘ϴ]{WF]k-J䡯WD jzaDE~S-'p JTݷ9z1pۅ>rvat_P!,u-SY7@qdDa6\!;]F݂ oSNӨb+X2ݎfAsApNݻ2{QOnb7Kc;kT/H[Ӟ2/7~@svX'ʨ5zE1.k@TP3( 6RXa1O½umomqi?MN(kp)yܘ{1YP{QpYoչ 7;{3;qfʠQch,ܝ9+-N=4f[kOngFw^f^]Oh4bّ)yl v:0Kږc璘eWdžcV\Ũ)7vrݺkؔ@FPB&9g?2D,WIqPUvjQ** Ej4"4[MЦ Ǿ4&_IaՔBo&: ЅPBT₰xq/r؞>qM-QR1JMU֝ -.cq5O \mPJ+l{ <֒ /cqmF֊ -v)HgV_\`W|W?@j2 x|r+,':B=Qs#Sc"Uzfߴp ~ AF,E kC t̨# mok%b[hm-!8훢_,r1'yٳ/Hp9 {4zq`.sT`FP$z uc=utQ|3T԰ O'ׂ^aK%"q{S)N{@!SyA?njq9#N፼: {h#; k^@uE$yw6]VT_>_eQ\J8dmjNDY5NCԱQh6nbQݠVe<)dO+|'$th n6fhm֭ڳX3rG:29TO?r)kMѢq(e#trg Kq{Yˍ$ a?rG xͨeԘhu47”`cGf4QL("gi3EBl v͙HIsѫ &_N^ ?ڄ{bRSU9A,g[}Q `srBIz. F{2]&sl;dnٜ`mjȬp_g:eNQ>Y,h*\c}{Lѡ^.̸sn/> >R>dLi `3zgA;ɉkҝ(o6M+0jz։VqA9p1- „$` [Hp֗RGMw9g4 (b UNv@c}W Sig+#\®M JR$`E= lP~ot+N8\# CLht> \Mw~lF7@(nL&5%9')f)"ukCMšNᄍƜN=k%0e`_#t '@x?I}_$JK(ɋ+a1poSj.'1 \4WO3ԋw!NHOxNQG[w=z˶1r ɞO yj#~r8Okuc"9@˜Of\H(R ܶ,yκBiDIf&E9L;-)IkxstEra^rۘ^m;IP;Q(:=ľ,FOfo ydc1:W.PۦGhG[z/t^TM?K=F4h3tН%&.{~ *n'^TҋBb\z0:_r,C$9?1OOT'86nsS֦֝c$-zUB(Lѱo^5{򦶀g(-hV1;B݉@~]s-UƦQ@$wܝ=Mx(6`$͎#6wO (Q'YV48|'9^H]Bh&x&{wcC͡e9LcLlNWރ)V<%sԫe[^:؛fNsZA%oˇKJʞ VlWrAa>7dѺ9r$-.l!f#*s&oJ1s0]l.BAjܾ%o*']? C7+Tޓ֜^ƶՎk $BW`MZѶ_}A }eja5ABug:| Z却W戧O_dj/.+6}e^Lxƶ@vكbzL},MUl!ME[q8vKzCa fnĤ޼<;OӦ:6`>+YL<)RĀ'[lV' 'd5йK~EMo۷qjd7ӫ}&PI1uhMla_n̕H9k^PrMnt?tOaF쭿/FٖmY_9¨%8 "+>vL5-rhƋ5r/HȦh)n&Ai]$]z_ؓҤMmRJ2 ǧ}^M޼Wp3yŲRwӳN{/C M+ Y C?%C_oB,W]BGo,y&qU3UB]+}g8N.Vsqg^Eqm[Il`)I&dwo(z.W]]?;SA= v}6O/) U UMbDΥƅjj?T}t^(@צ%Nf|IvS09-}v6S1o۔hh-Y1 \cG%{_d%a4Iם~ EUS LG,ENwe@Cv x,+;9[|4=iFG˛nTQI%pGt8(4p4G0j lēT}K3뢅?9~EZmnJo ։Fc!)֎Tug%ڼY#pmd@j23Ҏ㥦{$_mR0\lKaħ[H8qSYNc&65~zYkٙ"Ԙٹn/\yޮQ*O03 atjr-Tbiqm.(g,ö.O+ 6Lqv|k9VBvCawM>43«\-}7,qjPݗF _h]/W+ `IYWlwOw a3NS4SHy87&+?4ۦKoV\cNGER2ً%̳ɂ/ $~u=VAH/Vz{z-}coE'YWUxj; >>^2ˮVz_qtҨ\vڋd w邁>Fn)X aǴю16~5ˑCܱԞXBy+_sqlu-)•Tձ>3x`[3.&s;|Y`ťuOY$w]An^P3Pc9uЙ;=7<_}[A1l+R^ CIkԛh :F ҬͷSB rn7l%ʛwq@noWCR_X1nS4GI})oo*;̋o \u܎iv \a\[{x5S3\]:P^4t)2YjyဩT-DY\-;AK)Ij2=[#w'i|=s?UIJ6Fyn$EAB0dxi&:e3RH'ض(*{JgNcRVD(@>YkӔ;cKBL|z ,.^j=5`cχ02([єB7Cronu]PY7wVvݸ+F0][\w܎O{}mC{ԨnF e^7U^: ym/ݽH/k|x]l/K39KՌUkw+Fv)GI.X`jtȔ[kwskP\I+\upiGCSw~c!/aЭaԘ~^iw455i_cꜾk﫣yMc1RET!wmOe jZE L慹ȅzupCna%;7_Gf}@'Mg iҴI_sC?B%ڶ;_~UjkfY·sm*:$qp(4>P`QdR$P5n*i 0+-d/C=*zK كu;?莧v ߓJ] 7ڕ g+ƞ+cDؽec-l'glQ8/? MۊOܠDsgf 䡟2_;A1rky 3>Vo i6VpyyfC7|r!!Wo Ѹ;Ix՛yd=8 RMې% K/8*.!3dA<`ʄ:>XJ`ꭳχr}3?̤[>cHzMsC/>Mt%mI.V&FύC|(vWުf : v$gt gg6|{~IX/}5-avNOUyDdxCjx+rxF6\@2 ^dm;myL{G"m!abw\S5OZK i^P}Gi°Դ+s2nEtDtRu$'qFƥ(^+X;?3 } a{"jhS渀gP8)nVbGP2f+'Ny]&]l.L͡,M5XeԮOYUƌʿ"knn O#x}PiwF4r~^8K=گR)ܽwרJ|?CtMbc\e|+(ܶҌIY쌌d<N՝";6r8W!sS Qk]ɠ ӖIBQQm:5  So]tIJ_sJtal׺ Ju7ΚE/9CQxZ/1ou_%0m&&[ޭxFt>CԀq HV6q[UN󺉢\E侳3[:̡ϒc^dP1HAY *[AZ09]t dK} y*O0lcjqqu_.- 6 Pmq\' g:z~QǛ{l8NYku٠0QS Q N&IeA}FE#hR=?$ke.2X[*[$EdҵښGRzj>pxgz&I^6CV/~t 3WpEw@OW/VT'"e(^LXzabC^' 9{LGpF<VMU2~2' *E[ WqőPi]՝r/\U M5pv{Y~dgi?<3vŨSOz\]E@}dj"lFПɕ3B&dp]K]5&b/FVIA2 ?muC S'ڇ;:eձhd>[F Gk~8>NӿH rh]Pr61/ߪ_YQ$qy>Ր(\2?^܁+>*Qh\2h,rBZ%`& (vFpۦ%GvMYgǂ) ]Y7u꘲3X C Am·z/U8k2:69 ʀvz(LŐvmMGܝ琈yVO~">W*Fs@*:0HyXzd۾[bGMpq;np4IaLUϽmwELaH͐XZ - ˇwdov'/ȜQ:w2iD7_ JQ_g;mȕMwl&p-CwYrdG]&TuA/":VA$8/}exj˯25PCJ8Y6C6aYl&g@SVkz߱8YP>+e+PS. 6cg83ʒsw/೮xCN}ݓQTS=鐛uLw ;M(x Ys$1V[21+)qmҥہ<~ PZ eZ\2I-°NOci`S_ dXn꒡+SGi)Z= {sYV_UeyTcgRz4jP/yv7^ wxUn2^ES~CSZFyD^0lGqoX ovj:>D2B̌,OPE!7'f띁;V/yw3vE0sF|yR3 \(쀆@-mU%@AQX1~k)EW7NvSRo1Wc1$OC7M-(7(ޠ8q[1Fí :פuS^RTw֓A\%)Ьklh`JJn?VygܱNi{ۭt߁0wC9} yJS-'&iJ$ODθJ EJ2H;twQL Ѻn95Rkc v׿*R%1Z{TN —U.h?*Mt4+2QXbq-f#F _);,9tGWvM&ЧԷͿ5HT,)*E/ԝasq|-_׀rȋ ըe1uz^.FGu̜-=nj\`Feit26s&sn&I=Gl^ϵP?nP`4 LW*JrîE5':^f3ǖ [B1&Ŝ4ȽagXhY9zSuTij`>?CJO+ȸﻟI^TCD=~ԖWlYxML<_8XCe>i^m9HPѾ8fdӕͨM>/|<.UNU=Z A+i#j6X+#`Og4Ǖ\Y"&n6eãƘ<fwS5\(6o/|3|xBpx _P*̼Q%cǛ흝T|uWXCO٩䡆S*669|1>} HnoaǖK0&&jbk0EV=!\}+=(Kȍ刨fbӋ˸kI7K-k B*˻SeOU MO琷٠T: loIt;EkQc,*{0sZ-1`#($^;>.Gʇ˫f*,f i躿ٿl1* [W5Ԗ0j$Xj {м@&$dhֽ'ou =Aܨ_8AvVLvvv0["#2*7x6k@l!gMʨ_X` ӲyugIv; * QR?gAh,R-*}1$\XJ@oy_ͷ֜ :3EAEgmVT[Ҝw LP+4R&zi'͑S3pwu|Jڜ7SP!NQc>e5W?K< VzꀪqPpA[qyFKDf+$[?O9gcr9IpSWiryYgnsLgdk: ! ͪB akc+BKr~ry_(9Z&/rǞJv T> #1'/&z,1B{cr2A`8XI}H>4j`ir w\%0KV6Qԯ6ݴON}:ac%ҏGt'Z5t2rYAn%WN=p&r׷p9"}dec5o);0v~,sCgdlAߪ*pPB*NY5D{76{Oj>rS KHxd/y!Hl /zcAoQk"{ g,2>ADEi2j,ҧQ-@H-G$FʢO,2(,=9Be>m(.Nҳ/é54Wdvg2ov}xmJ&RɆ2 G'ĬGjdN}kF]J+a> i6ӥbyǨ1_R9eCᱭa\cAiTbNșF js|dcsvj0zJҕc8t{s}?fcePt֑F=\%ng 2YCL)bSJ"&pt*F3 &Ll#W1nES"wq{ ma8nW&Ћk8G DxwrGn(tus9;ҏqҎg_v\S:$~wMFu2'L1h]hLSnr PLfG2ƶ`׃yJ*#[γF4^I'7.p]n (k>q ~W>dãϜVCZD*Q(ߊfs?.[(Y('bV7JB:[!@2uX{( uV&&1WВLDb+ T\Y*n$kc@M^!v9dqe,Nm؟ѷb/֛//\*Ϛ)lb?僱n_Qfr-|vX fZ㶺jj$p98#Cс(І4jzd-Pf8x;tz2t<@9oWP55F9" xhU!I;kgh?)5$hegm.OV/r1-=l"*[e5TS,:@ j='"Mpz_'!yb1gu567&W50ߧQ eCG<[lZ|w(7 <7g9)6mAhmOu}»-SrY4HлGw,92=%8R?%)4_}Cg3zLFqؙ߻YjTń Nu=zG&I=lPsG6+ 3ONѩHc"kWE#=elÃ&q@ƓdֳL"HN }Vv7,emˣGslA>L]Y2>&ioS>Hu;7@, 0FGjb$\ қ~ 9![!RAms{p1dGD6#gp@ӋԴK&S8ΐ tLJ4T^]< G1U 6^Tim6gQKu"Zޝ$4t~6=n4-;{6p[')z̵$^ݙN9#5}2zt?79)N[tAseTJtw͍;֡njsfu!S QDr2( 79PtG b04$ɐr'f$7LUʺ'&>߄ v^)s/Aj(R_p-c 18.leDG7>].ޢ4{#ETro>kf9.%jH·洷2G˜sԛ:h!z+%YM&Y)Bp ^-A=s3XҊmU V6 Q=݄> e3%$FKnK٨ԩCw<<5 WI}g=eid-Y>sN/W%d2t($BhMڶD7bY4.bz^)j &Is*{\gNT류h]@L_=OnY}(Z;C< Zfvl{v%tچ*[hy0k Zj_>ℸ !P9+#ft~hHvE_A3ԵA25bCr@j7z UVFҜ!#r Ck[erlbU><8Rm֘X\`5•e|Z[o.0`aMh{6rBIxg88e}霧I2N&pq {R,)NVʴ܍mc$zx80tΘU$8{1ʙ\ؤ`c߫zKrl.2MS;sⷬ[/[#Z,c;YVIbhF֩-SjUٓ͗Sqa{Cd'? q$G382[Woӆz@%7\ ]+C ",zծa'r!oXQ叁S,+CVIt1+^XN9ktр՚?Hfҏg3 Г ⅻ!LfScy0kkEPzf'V5P2㤦lBOП~MoN\dݭ+M.qNN/;^^?%->wUpbW?a؜fV?X$ԏܻ)MROKǹ|& ='E豴|UU/l&eofS"x4ebHkɅ0Tz\? V Y]BP.mth_v٬6Zs0{L65ǣf*x' 6vFO̞)+-U2Z-s^ߴgD zL$Hhh&0 UV~L(2>2hGudh:+h#k{Kb X8L)apx^/*<%pp㴣%`Y'9Nznfe4|d+RWΚ;_uAϾ&ゎEv|!^u].A48U!TK*]ϼ~i V.E0_l: ۆ&C)L2ܘ6pWJs2.ܓSw.ҼBW[)SG{ba#xX@*lTBA0x1&?r(ȣ rKPzͰb|g׫u2}N^U'@Q%;+WkjQˆ5nU`o\3}p&M+hfz9k04W]O54kUNu]}ad<1HG7֬ST ǩW62b'3k56 GޤnˆU[Уњpc i-z1|`혮Ҏs$d>痣o(w4W1rў7)kd~uu˫' ,%lqkHB`RiSKA9oYB"y?J%%?JSrroҫ^]oj4fc ;b0W)k4>RH0A;i:Cw\sPX[_KT)A(f) o]z+ve5I9_s-z0$kQ>⚜H9aUlqX܏0JEp'nvv ??oRt%0؋W $n٢?f.ݻQNP>菫hƱu=60;;Ke{0ƀdxJ(xdjs$E# %n3p <2lr Hx.:ux^@8,Ht9g5C8d?,ħIU2j.o T! 'L<Ɔe~'>p7)^wܩ5Ld:k .?= ͪf~؃ ~PVbп`?e8U G[>w89Ɵ,4ϔj%o *q2k 9o'_8IK{ wm;Dψp OYF/bIK *0$-'jLyʉuy_ۚHR;j>gifջsYvZW8qLYG44O>JsOHe,h)l#**mVu$Pb%_w"_XRT6^LNfa8#WnrS[dwՈC' VؿҠDhDR;|dߩO5I睕2zy5B1tEʞSUsSѫFzԖJXʎB.Yij<)-홥{FlLNnI ^w>+bƒ)6=F?a. ơ liR m-2-&ޛ?gd@=q^[}]Jݟꋺ[Iݟ}Rj=$|sn: יCKn5Z;a((̵D8Ҏ_Piq XX];HMlظ]2|w_oBYZxl `::(e@ n ](Ih0_oV]YKW(+5Ǔ͏u% )jk?_U۾ѡܪo~tfc7,>"<ryf)N(yץ.ruyqPv>t.t ۆ"}Siϝnt2K,UnPn |q~6Zl9:l*7c~Y!:_:}N.l4$B&) oZk/g1WMOX󕐫_=`Zͺ3Ӛ6=sbEvlHV/vL}Og/Dqr-.i߽mL11/DnY} cϳVu5Sanz;zus ?4HGG4oO(Dv;7V)bLP|4v8XM\ 5]r!@󖫼FQ̪BqJ,CS}.x=q{e]I]ٖtܞWhJrѩv|KD{t9rz?6q>Ow4N3p 7+c,8gMhu01rQu}xW>Xv\7+隼Ю7CG|tTh1}ܼ=e}4+Oԝ. cwvr֚c"Xc;9IIX9'pVs:d}dCojZynӣsڗ6rU.RbP4-E_| zv Q}%5 W,V\`N [< > 5CY]SSZ2pwMy/b_*fGYʴqϏK zhFv;˪So1Ĉ'(g=s8 PK!po*MGxVq`T܋|f`P;Ç>C=uu뺇.[g٭QgEV/_OT]?Ƕ7Qm,> >]\}jUre VEӚ~aF^ƕv<8{[) ;Vz2 jPzwv:,W+0! Įt-.E8϶m[67rT:pxcXI>7]PSC,ڷ)Q4vW}`1\2BF1$}%VdHUڬӍeXUPw@ 8(Uщ6$󳇃xc xGսpJD XSFy^C~{6>y/ #lkmp^,l`ir3&?>9͟kI?4:䶏{ S =9̩=glekE,{X-yj MzGe;ޘbtgFS0F73 o;s7[s3)p;=ncЖ&6SPCp֝Յ0cǾޑdh0uҧۓ~adn.j ?+u_P۰ۚu:?#pL}~:`Ae&8\M>c_ S&ҳsC.5kBcjY9~Se5{_Zx,Ŏɡx;ƚ"P^u}SfeU<ԯd [Λ,c!~wLp1\ӛf& 3n4s'k Sy~]tg1;d6 "sb>kZY1G-k& @)O`ƏpwQp4Jj n|j U;+!2!MA^?2kԐͨ8*tw>;iŖYÇOB;l~UeC^^ILT5OcU݉}h<&S 2zS26EQdd}fotws`|2eA_~yo?iG dpv 91ED^)fNbD5#-F|JF 6( _Q?쯧B4ɎG `Z1]A5̓67'K䒐9?YMּs$ӦƼ8BKKf#6EUqnNr_G:@Y軉 l6D*e*:ם',2΁Aι&]";NjwQW߼ӻn[Ev܂=n,zCV)yLG .Z4oq/tl7 .x6֞zxqgJRzgdY-+w;Qެ AH@`w~I"1+@G$$\zT\^ȇ>4'8t$..ǮnW=qÄؙ&sʯRWִ6d#Rٛ`iۨ0nݝNz;-KF2~\Df(ap=4\6@hR/̟4fu}tfw,͐ 1Ec1sBیb2QW욆i JFtwOxg߲e}in`k}4~"Lu5^Qݶ#{^DYT3:BIeHxe&fCMs\BҺ$`Ȯr#_? ΢S"23k)T zu&Q,}3+vK]aaPwx 0ɽ̭&6~Rދ$` .yV^\ ?d?C*C(n{3y MC o~}Sbk- fg',̯%qaMB'!Al4VƒY@M} ILV\iG)!kn z9 wBrYy֩1=^JF!d_ג]$j>CsU;~ ͥ-$=wˏ[.=m]hpڒ@=΃gS/37{MK pɊO8xW}Zoܡ$ C9cR/i XϼJmTZrރ!˴U*R0ȥB,n/zSlL>MxX#;>Å)dI@ߧs3A2Qt`jZ0zp-x~M?t >W;t;o_ku]298K>NL`fn[Juz;{.|ijRMB cVym!y3@v!0MVwg>!]LW9=5CfD^/,V2.=?"uKM:kd]#W]?q|?Nc+=h5CE/{y5X"+ή4fY9%TwN G͑FC'͞G)=zշ:^'RUG [+F$ƞF: ,<8O$#ds:6^,QV'hWHa(:I˱N9La@A{`,?}SH k$/b5ʀ(f.LSբs^_d;]gC"'=Ս˫kxձAj/ KqȁN ]P?ri㶫1͸;3ĝ{d:YAͻ!W]zt0qr)~$q޺3zpZnp҄lK *R+yBup3.!?X#ڗ436bt?4M@ eh8X{\Ct.#7ZEʄ+ӋKR)gb6VÉj{7Yc#uuJXE ++XuoX!<[4ꅝz7t] 7φZ:HGPbR$'f`RϮ{m ?`vUZU1fx Zk=^ oVU#AB 8z,xu L+O-žVbkĕ+ce'TVU0dr|!V6 j]xRboE/^6=x 9H.$S4;֡OJj\>2嗌Jё*&_1oK}S'KiG{R5dǢ~8bF:i!ZGcH-"oyP9b9 )H!Ц[ `3%$iw/ -s7O*y\L9[b7&٭G&LY%Q+"ȭFF}{R~o-xJO KݷA]$}F[ .Q&%%i=!VVF623Zq{ +,+Vo,OxO:S/wݽ` B֍Sg*ވ`W}χߛ/sBB乊bثcap'@@D&]h?n芌ߧw=iX<r%8, m1)nr>ԕ6"2”ǀ}ަcW̭wJN D}n.X%f %u$%ps:U"{,9_Vz!TUu'j TpI1sgǤ!p.H#NpG Eɍ$[ & - 65Ƣ9XQOF=2W&6ieTO:Fݚ DX(V4U"-<('JwnEݧ䐑kZ1Qٝrtʵ(]cqZǤ :R? F\ah^z5kbҏߣW";jHȖ3Sf6$a$ͥ pum#"ZIҞU˜!~+ow x9Da\BC?uuaB!FG7qDeP)lG ug:Fhkdk3UM)mki/J1덺ːǐ5EEs/#G(-]GxDЉ:霁SoATE[ֈ#uo9TvS5bS8c:p4ZIrBbݹ/`%IS L+qm"M7swtC-D/(43c,;1Y7mloQiAx6ccوS>TnCl5|l 3^)EF "zE!Tx J`O6Rsε!dr7"BrJ&I$aM*zq^NY)C!m@;rEyzEQ%·لzJTiM ,sXXBǹnԷm Y!^rȦ e^_5B6cS*B|/h3O"Bgw2v.A#>[]-PQ6]T/yi؉sH!)=GR8[¨a% 9h: Kh1&wwOq`'ݻS$|ᘒ<PoעPrBu^ÌʼnMc2B5C3Zl՝>kvȺRJ_m(#e7TFp]V027R\I:UGKx};;PܞkLnxGa Zef`PlЖ̹w_c!Tz!P uNι뜬[\ȍ{[9K?s.ߟvŲ?=ކWPRzɀ]4CL t7C9':ڳhn+嬍Ӏ)^Y]jL6b,ڳbT}G6 AsnZ6hԐɑr8;9H(J/WK 3"3#$YZ=3O7ozwd_ u۾8x Oݨ ʖ3t0(7I68t2ᩗw^eC I#EMJ^F}҆JԝJjX0S{m>KF kmR5%)(אl䑛KxΥhnch[}-ɪ֪C?%+l_`@I‰KoV/&cFilz @4S, צ,FkpSZ}ٶɏ`o$t HFt!KnHd}VBe,щZ[f+a||Yy "F.16ȄІˬ 8ᡷY#ʹQ-Qv"ZaWkq㧬Ou0*,W%nd{|=P&@Q_op-O39f9JtS@oS+r5G 4j :SQa~ԤE '.reBݒAXt?uToI<g·fӍF#mhB 7"&ٌؤ07/#.BB<#r}8opR"zcڊ]u?TJ^ ̹Fݹy{}gAzS 2SA) 4וcٳ BͱQ:U@O= ]CGsU f>Y"_j]_Vvv;G4G0Nv/=AI?j!&`${s6qjŁI}䩡]>Db&c,W~>Zz=ZZ3-Hʼn10QM3ҵ2lApW^(6[ VBpێdo2l{4Wtm,sF*:hώu9ĸpfDu^bz2JJLu6 ȡX(̩3Y[s yL2_Lgڍ,29ϑQ}d8|t'x YM"ζ}}PD H9wID{8}FԵ zԯpA3+mF?tx/]vPm?;ZHIQ  E]#L:C1KWuR8?3p*F-I&YegjM_? s>"^2E_6|W߄q+:}Oʖ^=VhI'q_8tXAmd]}#l8ր4 " 5D! _>9-l{ަ6D2̿ߺbq'gݹ4ΓYtW}k`f/fL&_h6oJ?zj Q|TMkfCNݝ5ekT̙A@7_< f@ŭ l/Y8?ۈQcxHn*] A$V/ Q-n_ 9%_l\Μ7}Ӓp@eyIwʅnte6-swBس0j,#">K^[$,~A=8L. lɛxfmaJwנd}đz/Йڀ|[c:/GD5DH_3һZrC*HK% -z+LL9'ywő 5q˓ huguj:P:-9g *N>LƛSHr^BT=:9GJ]3u_% M)4`SBOmy&198M?֛ڮ`s<*sXaqH' ^ȔMƂʢ].UP +lżWi:1r1p%YBY]4BPr`Y,?)w6fA֩.5gw7hf6Op=MY66.lNŇh{3?n\ϖ'SW!aRuN21d?j-dƳ]x;MsӴ'{e=Z½lP ~N݆JkrBҝHb2ѱնz?ג !۔Ek 2Fc>PW 3gʶ=>>1ttMd6D%CQ-}Gr恉1--32g7ړ[y}|*3ɛyGuPǭ0cq%xOiQ1 zJ#0أP]2!|~)=׺!Din[|;S{KZ9xU{8?B~Pl\%n,FӖ(p:j+Xv8<.(͢dx2TM 1N Ї$|2O O ?2ɢP줺}݇KW/W)ǦX H\;sԆ|>3(?Kt#u1sʽ(潒A M#4_>\ib?4Uzfܩo4d^τx`-s,^" W> sIvk5YIz&^fekgTU XdkCc?+8V@MEt|w_a}Fd ]:טmQZ۔piK4Z{ rcq\ym/m+f\WҾbT YlLS-OmpB3kkgzt3;;,ru-gW=5nva;!GiDe\'eC+G{đoȕqTuY+.obh4r@Zu6R߇@ y"L&w[h .vdk9{{8ۍ_2ޮ -wJ L]z V5rÕyz+G֪jMVhU$r{*47~%u3s\p7:gL۷Cf U?tmd~,Р LַhxM^s.ˣyI2UP©ۈ5dJҎ=@feGU/7+:# U$Q?Us $ve" .EgyT#1y<c6EʬT$}4lh U'ܣ&3 !ߓ2]l֝s)*F}\!̻g .aQdd;q]/f65Ug:km Syx z~;X<3Mk)ÑVp;(׿mȎ$@nL j#JOW_0NV7 ^Oqe0]rA<,YORE4E|$X_켚A{QUowjHGRE&F_!ңv"4;9l7)='ٺ;J#).7D?h=QXv.qn!RџJA5[gcc xƎpge%ǟ$i5n1("cA&_'/CL}Ij9ꩻ d[;ΑHjJDZ,ታeJB͸ztF-+XLfI eD.B ݡ]@k]Z#Rn$ڠ惩{/"V8k#*\ #ho=!T*.1uuǗ+yw] 1c^E?ޅGޝk1BzK.?VK#r jʜ^3?:As p{(c e 6mEBxjC', aH)U/~yeۯ|Ja8]釃ԫTT,ˆ~Ƽ0@,l{{S$Ir}deV\C}FCʏ~dk1y@B6>B* o3,ƆX/[ER)0ga# p=W6ӊ΃ges '̀ѾwLH8eǨi嶷ɹ6&6wCmxЎ8!:|T~n^xLWɖvC"ˮ E_4&>}"^6Hod pVwX`zm%\Y W=/A]mYc}kTPq47CK,nJ@ƭ2/(yH *TxsC#?I^N$J{n0y3E/5P^5*ykDЁ|^~SV JP'LJ6lkԋL37kV:%jC5KH72םsٺ<ǘ>ǃkr@I  Y\!q`)5wG50aulpqKH,5 ;2溇>ܾ^,O_Uw,+Pl6|\^8VPU.*xB$.>db7Bz8~چ?osp:W@"!$gn%>ez5ImվLZLA{R"6)Ml4(h~fJ!?]V{lN#JV'e9 A3])W&4}-M_P_9>Sf&h@V80fj w"jjK@"':x.79\7w `] VKԘoQM j_bf6>ꆘt Z9:%p;(s;TyN,w78ǭ_;1y)pt 6SgG[m^9lVs+[jGPzHK6 KAwgG0~ڐS?ԇ9bو~FTV_vV*dbOlʹЕ4ݥxSs31&Y4Mr2h 9jE€VLqsaz|{b^'NdkCEe1Y-ПjZjye/rRs"i#kιZf9lJ7Hi;k 2_*"1+t~6FٲŽb[1;T}}QvoE:E^bTxh71lGl,^֝1Nph .? T)t=@xx̹3-*mlұ =<+ƪxص}UӏnztwJ;вل}Ϳ$N é'x.h>cNX^=!}ɲLћp+G !oXr,jb,c,e/8ʩ꺺$o>As%@lC@n?t~;.Z~^ 2s%=ӃE_-&x929FiwwƨiJlXT2c\QW%دk wɣ\o[-^?]u B tdВkjKm5mݗv0h]v,*6^>9)5|5&U\2,dk LC#2\*GֿlBjWuP}\vDZźB*vtڶR-AtHtL A✿]A2<*?#$uxu/*Fsg'XN:^WV Q]A?m15j:F栟;tu L 0sk|5/G״{'s-TѼ. @w[,O hM=mA ?U?F*Rw4~ >#_0XAV>qPf0jCmIfRc 0YGoE,4"\\0'ίg/arϔ^eއKX,) \<d~\(nj[cu@>9Y/Mzl'MPZ[Pׇe۲5N#W0WC1luw7 S-_~GE4 rk}ug`WlǍɫy8HT⸿-K, 6S zA9r/e)tɱ+oƫ1yPx`Qe̼G_DKvgo8XFiSX Z&ڨc+|F*/M6a R*j.Rt4IC R-;x{DzLS(sN2` j. Xw:$Cb 6wQċԁY˙>SI豉Y}7o^*mr어9emJ6Cp>n~7v zw ? n,k$-٘=} خ$g}Y̕F ~kd&> l# KCA*{T~Ԯ oCzG9M鉆 f+@Gf{]Vsb!@O$p+qtk)I~/܍jŽI6Xi5ru*{>\:#}$;A/qDZ\ھCDhzyz,:s]> 9Q((A+sqxgj[yqEXyUYݹlEcLj./;1/|uVvhjL:1Zi"yQ= Ivc@WA %_fD"*^6h ծ3 4k³c MۙFr*F-ד>KFi80sv}˴\zm2Hb7#,dcR~Ŏ) %VZ;.%{3#$c~~a)Ar}3ۧ-sm Yr{bzлg*M|uW1y@͗m֒AN `S/ JgQ1wqw#{%Lv* 4UwkG!0cݢdCu6#1:X*7K7Hf {9z q.{qIG(@axu;O3J Ə6yѷ:94Y~ P8\cTxhbV-iFK}4 6PJLvo `&n{)tCO/nDqc +gԘbqLj9[gkJ6@!T>aۀhK˿+ZN0>N\-TвҜvhHv>4dbq]d_e*t̮ںa*]#:HSA\~Ē#]Jǽ )^$7f)K n< )eȍ~Pnw;ǒ$zT7⟕>L]})46>99 3s~9)cF:i\J0|k=#):IE6$A妛MrNj# ]hw?LoNBDP)+ޮYޞE߮AR?6>=+oKTW55{&xej zƚI~]~o]zla*cV{* .RRRTc+aԀqwnb۸V::L4m)1Nk\\6~D*LH }65sjdXv 7hef<*PLʮ梮 Av|E}%4 e` .(nh ZZ'<ڛݭ!nqT>`ֻ͆S! ZyC9T [-sln9;&3tS1 (7>ܾgb9*2#0nzUW&.% FYwn\@ZakA*ҷ#>F}T>ˮϠvdyu:g=gܣTl*ݔ9egB8Q~oC|K:C$vJԂe^j#G:WLyJ s+l|{G?MF~vȡstx3h+Z7xsj B%?GbMОJ޽ښA8 ]Bx2QNIZJqnWMԆj6q%s}WJ ClQd:kx' T&Փ3;\wWF{3.m|je  )d \[a*V *_AReuMTv#F#HOχNxʺ")΅BR-ug]+?Y[wK3vؽq4-NGLɟ1yHXoxrbf L7y2("K#GbMBI "822E'8ݺParw2Ɩ q |Q93jd;k)@/\˼ =F{OUsS mq3aj,e ))9<6NQrOEupƔ*39]2R݆3gՁ)h&XǨ;Q#m; ٛiwsEbaUnV `.CJ8:A(6xvXZVnX-A:I r{G u;>lov0P|<S;7ddt-W5>+w >glߔ)'qmp)_DA7 ?m{2l*;FV%)73Qr.x槬opl 1>pIsJ05lqQH- zj6Xt0B@H e-CM";MFd;&! iUl"SJ5A`efyIXzeCE)q9{SwZ;Q%'6FX7+$~Y}a%Ω<;>G&`hvǽXW|[:Vڷx˨[4䦇[FJNPU٬РQ`^IǛu؆~6Th"\'X$\`|{0Sj>cHdHZQnweG~X(,;bݻm v6m=A72ixN 1|5ޟuFLn5AɹB$tշntff@^)UK]0#QuKGo!F] mHc?!\;L?\MF=:ٮ]dAFnXqi%/.t}N#B$ZmK+8w~ bYxn픻eTف$s(E~cQ?ST ٧ Sy9A?-֞gԩzr ={)j wdg3'E^mMUvf0˨HݷzB*~Ԛvꗯ뻱L?vacbUؚti"S4`Lc=@9%pGxԌʨ[R6pO# ZqiCG_*[zdmsd\2AعUcLECw]t/wD8q?]B(5Ī| SAx)7ZE[z)\tsIMfݲtMٟ-ё;[Ӈoߟ4VfnP쾖QnhA_/ $fE|\=zN__N(Eɥx L*J ŲFQ7d  OQsmj PKFS7>P᝕9N z*!{N&rs$1P: _LڱGdi'!ˆycծw;,f9C9GoxӾg&&sfEɉɷʄa-_\jnHLm(AEUTP z݄WP(?;@4 l혘RZ7S$̹`hrYR4M/,w#~H違2w.؈&mJQk"JLNYv2QgB>%S}` AC=C5x19:>ةH Z9-\wMQ8PsLl[Ъ^/?.×3h!4fmx/M7lo2g.wO4SX$q%X~KZ,4,lהgnj)k9r^јOxW^i3Ҩu -7R!a#~U0#%SbIccHN5Kd3t$ (Ωٺ}Ulo$£艻yȏkVqJKCX\I@r%S_c>֘9k{gMuQH{s\5'2.]䮻%2d5f]lW B+ɭsVfذgc$C5YtLq+BƟP'̨è}aTV}EPU3O!TT2Fmj4)%Dv'rkj-i$!}}Jv¿x^;e -zvvG1X)z]U+kt24O 6c i;~,2ψ]{Ohm52!HvX c1/ iDby\ڰ_挱2]T0*}G TW2HFZ9ek3/qfA QF(ˣLR0v+Qۏ6v93`GY @sa {.e; PHW MPq2Zl|-WOӁZJw&㞜^R>ӢO@i蘴~{GkrZ;٬.ks}' !)s`'С+'r)阌F-\9, ^CnD[LyM՛X33UzUT~u!TPXRt*3&#vS@:TBɝYk6{EṆ)}5u V8aR/ZR7su:wb N:s^Sб%Eƛ0w M;+e7ąX$;Mlւ̏WO稙~l@kcI˛U]- PyyQ/^#%ͱsECQ%8ȇ*J@X Gs3psWì^IIݵ]I zZܵ_0tY73$5!f#Mw29g +NH.U[@yVSviݹ$TɺUՒ+Kn$#^̀Ȑ<: I4@|ށl(ɓmuAn4[zByAZ GodL3p3[k=q#WHhCXoii8]G ~.(ޤAlzr+ M@8Єs1헇s|EMF mb*V'5;d&S<$8u3U#9r8w䌦'Cڢgb<=YGaOc+ʝRɟK1MǕ#kjLj2R>_;]@s2_GX#,q#7Nx#T:coR0zLG˛R{יv!vcY E)wŭ( \-J w)8rp'((D K) 8bn5DᛛO+N5<@?nf=͢)IQ㨜 vȇ/}=u,ghaPp&n/_X3s+! oZ+tʶ+c<í`-A:٭0- ҵ$r}}h{Cyp ,} G>-])d3- ZoQ;IXoä7- hv%PPwnp`얭SSj%;^FFܝj "!0\]kХFOm#@_ ^7r,Ě$tmNz0`^A!ɨ_vx6F"W}3<\U~|%~$s&zXE/z,Gl~ #0BG[V/K8FisSӵFj0N; KﱜL!Zi_xh12a"?CR6}jSv;NJb5I*T74j>k,uZG<_<>|ZbOJktQ'0jhTy1kNqjIMž)v _,#0:"Ṧ4цgnxǚOq伦^dDۆLN.mhc򜝴\%Ƃߥ^#oD+pRcps 6.H9lSۗss~/-ڲ|{K*u~x]\큺i%dwv'aqׁ y0ĭ{f0*+z,jTU99f"[Pd ZLYZ$-:c( ]Or0\C3agϿۭgMFncd+#sV2훲N R{M̃_f 2{Vj;[]szbI0TFC+_ZNLbbfa м?x*?VF/'~t;1Gi~l>~`S ǘUwRnqAP,ۜ|֣ ޅN(|82XA3VƠ^Dh P2g"y؉5d IPXgb՘ssIʕxӒAelצf/x! CfrޝDTu9ݶ&]F]Zzxvƞ yAG]dy̋ŜTDWX)”1!չz}pdc|*S%{5%tYM 9nw1umΥ-m#\Xss-WxҨQ8S4Z)g gftWƜ%ظRC*}xΏݿ^' Lg $+`N);/JpH{9?NߦW}mUm EŨm nמN}K2^sTuu!<˒m@r$đq,ПluApChr> Yf c}7j?GjaBi`\ǧſn]S:ByL[{uY_۶݇qY3KYJu+p7*fx}[4~ޢ`9di}"RP4ꏞ2+R.~+fc_]셑d/^H-i<_z$DZO,]Lّo'N!8i~P╱`\Y)H)A 9i%7tnrZJlFd*$iTv[_[|t+;8{#y/cT XN91Bn>joj}yPs2y{Sk߲V D}BnEphkl`z"9{F\Y|0cDWȽ㲔6mƗngs;|K>0b)?{T3V GZqk~󠿿?ktL-1xwAdc+\~/ZJ@/;=&܄\IcN?y_Kرu+nnwѿ<&\c:vwܦLؑ}v(9}+5:*oqew)Mj\\<9TR?I8F[|ankpT l‚ԔՊTU@ :?FBX+=޾QSꜗY~_ETTu,\Tx=yK~K|o$2;^ޚJW,mMS[/jKZECé}xs+V =?4up;OW6gϞfBfGt0ywȗ!»Oͨu[yU޼WJs/elA_w/>vT}X\)S}實;yWeAWcpF)`Wg.oC[+M]1p45:V;W&6v:/mNy4o: 05%QHg[upW/d z2[Q|t%&J5f^|U;pP/x^1C:њАfЂ<Ǵ0>EQtg1uߓ8$;v/-6o$6o{1qaڌ,n6dgQ͇"z̼71lM6jh ۝ )=wCu50<ڀ?{ʼn8\`[v-bo2MyWw״d_@Lőkv⩍ÇpCbs'y6>ƨ#VЛWWѺn-:5D~U+Gi~N ʸ>N`w9ݪΚ-jP+{)S=#a*䂟ҏb^P[8?X"!C nNo.%E*At"p;#rv&0φfƑeXp/̵쮢إU>@p:=]`6f9.bacq/'捌m7.T7<5FibZcHX|ZƩ1irzc*ֻٽl#a4X0r_[tiS,z0T8M|0ɨhp5VgM hh`rpb[eARo-۴`:p;O+vUO> :jI?fF;RO$*n' 垺ySӰqtZ5y9tpԫ_w#̤zjkv/u'~]5.UOdTұټ_e7#Hm/<.-G HSGJՖ@:+\Cog)cg`3KZ]g՟աׄFdZmO;٫> w/k4wc. JGuuud\x^aQul.T\7 [{>RE_C{ N]J(m'Yq.9@VOv :}dmc'Hp2v-={hs˜gk9,[ҩ;DVW lwdB}$ÿW &`e|dښlPc^N>uto<ش0jN" 7gfʍ:˘-I=^jȐ=̘)ffNs>i @ 8U.CU^J"߿:HkLٴΰǹ~8}A` .,Vmciu c[#Չzk-|w ~72W߶>Mw.L9-C@|CuU.-d8] v/Weh+cd]7m1Vxokly8&Ձ֨5KWR_"wQl{[oFkox&d.VU? ˗\9@lӎnK@y!W[4\Q&6ϓ~ȫU<{L6IKP[ _biol_xA{9S BK[9SW>I!~GWxTSVx#ⳕǍ s>FaWbOZh7'|UcY'`em:AŠF{v3ȧ}oNQs <T 'ۘ2 ߝeXp~:\%q܎V2槝kU?SЃѝ]5GFՉBBFKS]܇˥^iU^w~arʿs#n^K`D`8<7`3u G#^W0/}*Ɨ&ҫOUn2Oh' Zֱap0h5Y&Rs4 ɇ1YTM'g9l1p-c4:;,>c<6>:D^ь rq1CL<8J?DXtg``%Lr ٤/h8}A:Y=4[Zsm5ܲЇieł UR_($RΥ>$ v+#t=KmW W>ǂ?2,esDE>#s'E=d] ,]"+]S<']a.p<̈́&Wn?x/:NW Ay^]+x&#ȳ)g\…D J1D6W[!F9QJǂ ΁кIQkdvgMaaz2+^R,.ԅ*Ήv&,Z.?G/r683<' j(unT=Ԧ\p&Dܚ}Wy6 .SDD)!*WTVum^w|An)1]Sz1RhG3sLڷOvy^a8JMIÁK,rcZ[*ts% M3IPiktNnL>rh}yՖ;lH5U\zRiEF9?Êz= 8MMk;ݺ| Gi?׶UmseAsM+@qwsYnSȋ.I\][Sgͺl^fpsΑ\_qhBwuks{ 4OaDMntwqWpqec+4aw^K!ΞxgIg[fk~\gu}1Q !)UGZe q\/x5Z{)b H3ֺ̫=3*/ \r6`-KLDLDG,w$y'IUIeȩM|6Vk\ő[-ֹ dekc;|˖el`جX_c@E {TmrM}cB20/[2QPaut">u'3 psT;}ZʬAWt[3ܼl(ݨ31vߴw{Z2O>^WqwvmP;,5n7H"3%"%h+_+Pk+y?z8&0vC-{\zޣ͔;i 6As11`mMpr޸*!\N}?ޗ$9wP2kQpNQS@vidV%AU5(͠r#8#o*鶱 ¿a FC"㦌K{/]ݮ50%[Rvw{b0],bW)ۮ\Ǚ"3م͘4ǨJ{vqF4+;.42fKq'˚:N"VVw&"@B)[LD/yDX\P u6J놷?:R( E\܋ lApfoE$>X@2܇Ju`ܩr9ށ{q|*]}tGlw w$3msRϮjJ层>p@Y3V߹PRKb0nf'-B$pg7>LoSF-xY#7Q]Ld˚])mʎ_rN+DqS;$*0lOU5h9N.bj'_98E? oEQ SO3Y8㣍"[qdL;u^ޜ, 4vbҿyA{Qlg(YWisWNmCYU\j6wO/d_*' Xzr:.K`^')b-חG|M(!*ӕYnX2y3*C>./_$?9$D7ewqSp|i2[B9~mwY++e=ǽ52^-J!9%u9Sg>]>&fzI¾[Rd˨Iņj1IRfmx='w0Mt* q 6!#XѤ[< p r)GB򼤅^GIԉٖB9gl"Wړu\VFZQz%9k!()wqeA$TqR0s;F>۔/L[:D?Ͳx,ftgܐ+,bV׮u~/Vѽg G0ѩ[U~ҙgE|,q^`"h3 G/x35"l-#@*2Cu֌x"r-JL-e`qQT5xaKdYE0SU-Aʸwя>Gi;yLs~:1/)J5MYXN`+A;eCcСC63mˈ)5RePؤq.cڍ#M¯-KGP(L?^L)}y1Xԥ&W|ܜuN9Y\*INT x}k⃇S\ ]|NJMA$s#=A$ݵjU];-[0erz ~vU#Gj霊5qٮ#ojk9R*t>g *]0V9Mrnw>Sw8a6\9EN(.-zχ228P)$ a'yQ[?:emhXw.tx/#[o ^#T; ΢#z.%VX ۹2yK2('btȁڡV޸ .OmNM-еuьX[uy,4"u&#;I 9RH G> K1K0 +:ТJ'2gʨ!}~2 } g%YSɣq-+|g TEPδ\,>kq NGN Xg= .IADf6] jLS 2jPmcM%r/~fbVu-6AQY5@rr +`O|+[Hg(-e="?*ܨg]~;u%.j׾*6[J2Μ\?k#..s|quQgp`i:7S=:p=Օ!? uuzJ7f9n+(". ԔILjzdeq8iDNʍ&ɞ{~RElǼQK(ElCNzY0CgqAIm9tzD{4$Ū2؆ >?F D6j m 5:!:/mޟ|=#aԭon;|3=uTG>@O89qc)*t55֢ ?ጶl:= ' (dp;Q\]7KgdNɐP?XN>=+S\\Qw6{.PRx1h.E3}W4ķ9#'4W4& naZ8{oG9MĹր!D{h:v"؂(DZN%Ypfk3d [bg~fv1s_igU=Ӡ/2\d}O>{v$ P5w=7տ G2T@K=/4:%8{h@ۀ.lh&u WOYܨgSsRH`Qߡd5،dԧ(sv*4unԷGڳh:t^WU(^8qTxXލn9BgzPS}jLb4`94̩6~&wexȈgOq2&b׫~,3?} ȩV^.~ٮxߔߺ?١rv>G.⟟2"L={~R:ӛVvIԏHpni,fT[[%H?Bӏ`vHԬ4]K 9mI^O1ED1$ؿsu疯H".L?͂(v*q lZz"JSy!˖Rx{\ĝ`)a9"NzOK޾(DsMQLRd'tzߞv*vXrV2%IU;騐ۺ3 4i9`8򌼏GjNsjU/E 멩_0Lm+5h \o[[++ "3d=G t/g8:XwsRAH4|yClt ?Bxl#\= jOQ;蚎0v}1i A@Tt'g1$ =3vFذEe2ҩ됨ޙZ^`8w!i.P} @Պ zaL&\:F`!72ڞ͔z$J2qT7y2 d9 @~Fדy\ _b2~+?%F %1CrTI ʇXAV`$E X"r y ُ`9Z%6r N.[NM$p.ʶ_& 70M?ot,'D{W;GddzRd3-UH/'ݮOSCj nm}ZSBSU: ` ͋eMQE9bzO)%CJWHT'3c5cVӀ~'`coK?-u5&w&^ ѤL÷iclii堖yi['Ci4Jg+$εzڛQt͝䜗I:[cN^hxɁ]Wƍ9h4W|v. Y}IkշH\Lm1# Ug෿+[^˨SwgcfxUr[%it,Pg,5ZЮ_Oچ!&4ہE S׈zdoB+jL1;G/?#|'niXk]wŃ$&O4 6 ]EKHS'/X UY;5k}R7;US6.υ/է4tЫctmE?{1?yڱ7ӊ{aa]U <#բ3f3;ȭ2 T=2q\ t"G! 89ocwTQwZK٠> 9f$,1!6!ˍ1߆3"xu|>aN vl ꋷr`Ћ]Eh8 %$OcN;pu>MU:0/jԀAL Zg eU% mGfJ/psCGo2\izh1֗m@HS }I2 l+1w\e\DBQ#uө#qR:/C>īDS_UUd DSڧ!>jH8Y5\ N)%Ww;}r"ްZбȘq&e->G)vO݋?sh{GNE?k xkLpx##$"yY2~!t T;hW؁rY LR%C^ tEJ' sRXMrRCh-6'Q][D2zj0c&:]%kQa\n{FY3sqIXV*J0Jjۚ (y>Սn.\yN d3b1p/zg=: rz4ztjpe/è;+9Bb\W.ϣk.zZ~_Ӕ|iՒ3øJ2!VG%&IwIfӜd!NLbmAOikmz N㚈.|^m2vJ1:)\Pt(3iUt kŸ=􆨳^V6 |}aI∊p 2(KӶ!LJV*H[^Č-ql]#Q 3g 1Dw1AwS,#K :/zw=73.<1o #gZZů?k5uףddTߩ_;' 'u>F5?}089f$b7/}C5 ,N .K/vVm Fn:oVP438{& ǓؗvW*+|׺djy!:i⾺1ש4]e0Ōh9Erٮ pz/ABoiǯNiAG*Wgc _ wIِ~u.;|ძn[W?5N Fe'qUoh={plµzj5y1^ U,u&i3εy?u6RkCdn{NDr*Fs ]ansigNبyCG+5^[ XI6N֕?\2/]ƺ.3][oY+]:"3<0~ 9P]B&y}IfʂٻtFx/@yܽ օyNrx6-2?։WFq:U}Ϡ9HA" .;7wmX)l.Ϯyg8mMȽB)Ǝ|=$B{7%i2;7 W ?ʼn޺+I{*n)֬7:u4sU}d&Ϝ|$IX 4nR,҇;ˣPt/D{>*.>ҺUީ( ˃.hECP@E83{*%Mmu1ިצ#r\7F!vʚ(g\l] 'J[ey :J~.yu&KEu_ӞswGjЁvg9u˵wFfg]`SԇXeSNcW QHȬ72]qW.yna#DvPseB@ͳg3;iXv|@r;~- ת:yk{DF-$xÄ3e[> x T7 yȯY:"{/<@{+)X[=s'h%<BY,/> Gᥩ#\;W^$j+ iR20G']]-D}ܿ1H#߼w ,cOҐa$7↱rZ<ȷ7< :a*nΤHd#VOWb3LTx kXsN3"V]I!Y&HXMٶ+l+{^h_7ۧfZEBuBe}WJzq= g]3~OtRyNaN<Z4-vݡ<"::!ޅto` {8Ck9 u]s fn纴XZv3V.]0:f꫖4U&:הz ;&5^6>cwn{~C7- SMze^mfsN?ǥICN#9R(kUh6u8OzUxu f-L ڮy ^@XUم-.#W'&+0UakX-4aSp6]3痸55*ڞn\NcS#;Рv 8͉dJp4?f5֢g4dܫ؁$cݭy"&qK_ؼBm~YawHssxI󒇬GeΈ:hXrT5ƒysQZY6Gyl~Mcne頣}0R5c;Y ,CbE -F{P1kW%ȩ\jhB/Ƕ$DNixsHƳwwvUFj)ˌǘ{0ȎcL֗CoLm)Kb8СL'vV3 v^Cx`CMrLo1ThKYwe4-nϴbkP:Ov/=scZTl*j>i8YRbv:f;yf.uL_7D_[O?n&a< |7@MVtdګZ%sճy%i TGҽ+txk,!E:VN\Ns x#Ϋ! wT ߛ׺F*wB<=获:u'}Ç)^4/>}TwWO5eiՐ`fejxcD+V~֞)ofs{^GWrmVJ.@($vX%yqܹ{P47M1qQdhն'_t;#qr2'Sppx(z=e2au6ma-˛m:ق*2eAG;m_N4( $]M(~~_~1x;Me:˻] VRaݖpnG_Gx$p8d[օ55NM~B#:|Hɖ.?`ױ@ACwR,&H~3/Ra7}sPGN 5^ hKa ߌT[Sÿ°4U;+V)g9u^_V$jрv184gt[^G1\݌]MFo+3r4fݧEWu%E| "Th[=9@L9g l(yR/Z\.SƒX̄&Ի{u+) 1ZH;.XC輾\*1u"|TT:*#;hXOl^-\Up@_F^Zr!'+ܕc !eؾY rNNpfz2ڠI^#L8DuI03f"b /`6(eNacv6ݫ-)VI(`>4:Aq->cȬ%1v/;N4'|BUynսۂ)Թk=D=$'ޑxC΢ .[83ңt=DYBWܫԈeI~OS;`n#R]qT4,uqwDF5hD" 9Ѽw/wnz]up~ȺWRE^hem͗$CڝA-` C:Q^8o^_Y9۝8\A׏AfyIG௄kȽgШpʜ7]rz#I8ۗ3bVYć~bAY d}8J,< BO`7{k8oC n49hF~~z-պ^-uL#2<f]BbLz:U VT2#Eg]=F@t_@%^]DŖUHCFʒj _sI(4VG:0/g.gª,Q޹^Rx<ƣ|5śr+aHuU?C4"qÎrj&N 6L1ݞ= crlcDpG{(_X,[k="\ʺ H@jIUNJYj)lh`د${-u"ZO@V攖s\"/Z5ɟEWm`Q)W?l/$/'r`l f' KfYw#)pWpG9Cr Bk[4j\ )pabGX`|Ksqծ;1R/;gkulӨҺJǁjmZj[;)!|贆fpf|=Rƞ*;QI1:Ib?}=V KيgOcx`eg|K?shv/X3-Lhc' ᅩc0>d0 w +z~ {E6|IZs mGH"?7cϋ8n ym#^X>d! THN:O&h<?g=+! V jR/\uRN)t(/!Փ\Pb݉Gs<|f2SU)ڊZc0Oa°dޮO'Vw`>sjX,H7r7~>A6`9B 9`ԑ*"n]8[ZU|iE]&GgzēۛaQcdCv.Qn Bm3TsNgSZ% ZjnWPB"(@zÓQ#d5:Jsb|nK :rGZүc,9i-9y#4j|TwKi{~G01$ 5hƥQQS{8K#4_HMY[ nȎI`j nZ , դUeh^twڀBVlzIԾ}RKA>8-@2)ּm(8`nzÚkS  4d=l ;8X>SkWwt c[ϭ$_'a`Rڅ/Y&'vSI 6O+UoT_6" H:Ď zI8]4%21)w֜,+M 1T65;y uv}J7aP9N|}쓥<UhsM]J/6OhmUZ?8`[_r3VlogJ4U@;8IղsWDb{>OGq2IC%r+DZk01&I|s#2[dR;Tx'ruu }(4r>AV3 `[vnwj}; -IRV|(LR~rBrXVQy<]}xhQa(l0ՍI dS!8D9}spgk^Ln9)kB { *g*-c1sdl;$fs76/I6|ZA3x!&}(0W8<;9ՙUTnG(arSWa3(6H;֎,ҦIɺO#6 X9:б2ؖJ-[Ha}A&E8#Zr#[1wD;svIripp Htp F`*l9jAO-, 2Ο ̢SX7BejtY)R xfMN/ڞ]Nꇃs,wt2lG\pOh/t}^̶1q[lOwhSڬFLL,퍚)خqDdOqU]`~ݱ[ro=2Yn,'w*\p@k)1KhrZsǰQBdު덓cՙc5_J.lM?cM wgDl-#}5&>P2܈#nlᢜ)U᤭\c1F Gx؈ؔ|Ho:jW>Rn58PdO:drʸʽ{茸buMg`v%3;^S"fx !4m3w77Oȭc-OYz8}eHaXQUl.%F#EF*Y7za;RYy:SyM~_PA5xׯ$ƵE6*Ƽ˨iH=:5 zJ?zb75ːMFieVqPZ۱اx!lF[/?m+F'9b6n!<':5QzmOYܔˏ1wVQz&ocB M<lVgx@7LR+ٟVEܟ26MVK?NV Ƒ2vƮf\g yO({#αk0Bˌ%fxj™W T4|*N.nnjhTAz ̖ F&Ά A@twpGA.@?sj uO };7-f'?>oQ! U 38} 鿶\( B)@=liLl ǽD7!mp0wr>]?6ӣ5dw]]ڹ9Qlΐ# S}iҞL`OkMeC#^>_13!EEWW֭4?o+ŋrD+m ĠmW51<Ի77+h,߂&^á;ˬ짻³N bQA%:=[o 8/Z"ʓJ j{j"1mC[M !E?JL|A?@}bN.wO6c}˜#GHV6LvNmNǧ'n;\@BD:R{@iMK 2!]ЬuR6"c2Eyy.=5F&GǨLg,:2S~wzw)T`fӛѡ8n2!K}]e1@q7ZѢ';6[5mU8D3ptyL?PB9+e'PgrS~(]2vefNyFtCe7:Q4jդ dBEz,JU}KFs2TK⦰b}#5e. F&19-RXUnBO#ā&\O_DsWk+^8s!j 6yXZy4iӲw!Q;fz}OqC)ۅ&mY t^+۱"LfJ"ǏiwLho`˔wrAlc<_h1tw4NzÏi~ 9/J=Tz@ШpbJKwu^nLFIev\^[NHR}G ]_-{n;S`<_ȉ4 TFU>Ol( &Qxd /j莴 nZw=rׯ^3P`˦QQ@ 2=-n=)UՓh8Q]mDЈ^W͊=:Jͪ| ! q?bH?!ϛڽwV:<5Uw}2]pjl$_rq~:yw?ޭ%|پPGq2AۗQBTɮF__ƅ9CrھilIp _HYO M9Ľ {%IE;6t &%Ya#2|TQц8!puʼ8a%sjWh|ae%H{zѾ}xf `!ǔ!m gO9yJ׺v-ٜC.SJ{3symX&X I ]Id8.;=W.8=M%[Pܩж.ŇHeaT6Qa۬eԃm+1U"=^d9?^y@/kK3_sTe=m;gr' d/ɾBt{8^ekGbIB`Cd/* `VUyz&|bFPߍ@zH = 9; $cWLH4ҤꉸgهG>=N;r%Qb' Rƞِ}~XŲ\bQzT9w7bYK{ZSmFAJ j=MO"xo' Ѩt87\uk2*6󌘚H,Z<F ꕠ<ʅ"0Q6~\s s(ގjo5ԭ9EL-wb1ܣ3I%ƈşͬ 'Ep1l;-AA_h4ޘFJ@U$6苏XR5O&Gk|i|d\lvhp\I ՝#FR,{j"H.(h߹lF EJ _ (3qhR0Yji5 "_b 7!|VL JaQٕIm#ܸx'o8't\"܃͗ i>B9e:|7$JP꺡IRnm_0WgaƶK5- `zs&EkՇ{g4.$lzDz2KJ@T%HܡwnNSUWztƃ"$X5њe6htOW5"~%3OR#gL˨oܝm֟$}8ǹX#WԚ<8Ɠ9?dYz!CRJ}C'mc Irv,֏;![av9Q#ϛIF5\8\khzU 7tmw4搫7 6I:R^_ yoΔk=fj`lpT1iŷo8M4*nP<]N)~bQЍ}^iʼ3:J Uj+39E^{^Fx9k!avlȽ@i5Q['{tpus6# %:u-Oe Na,ّ؉y 'o{]J'6c%T~|$rqGTi*t&Լ[ECI4m)LYޏ\՘`R%/"mta vsa(lB&*up| }\`jwd=rʚmdލDh6tmʷ^VFm>{u];[UhOYS">H LRtBԻ|sT5%՞CWIgڊr}69>j>x"v1:ˌNpw]Xş? ;򕚏ߨ^ux3L5z~'!o{>wU%p{#V.V9Ih燵Y]HV9$9,0g#Z8GEA]gS (X٭QƄuR i4hTl>{`Fl{Kd7%'@mA];ӕ.jQnwq(njI$sӚv L@5S=Ǔ4ssa M+>o*+ zA)›)GWvY]>Bs1!pYʐ{tJB?(IS0{Z*oME %+U>xX{&w"{O( %^4BkyQ UlBjXC`}v&]_[Wc!_?J^e`t,|HLbym2;MQHgo? H$ U -g`wr+ 52\qT3oGەkn`k_;8+ Y_`s^ wjsr3M;֘_R=ъ/o9~,hSER%hDKYԾ/W,e<`[y4C/}De-Oz[7k=GueV*W.!h#Ku=Ia#t~wΗAٝ钝|9,'u塱) .Gs"lSv\ HwiVCv^RrE<Ƅ.p6w^.kQ/6R'I(SyT󂤈o~KLx,T̏ެp!2|_4$\ EF|Qr>dRhBF3?¥DG3Sjyo=#lcǢ.(†dӹƷsMQEn'{Ћ/wJ } Sfq WlrvUxXs卨qMM Nf<䜇Ε%DM;PțQճr‰;>h(b6;nZ—ox|@ǞysqU#k6*}|ls*0~IFYJ(~ O}2h=2/W_~*DxPl !F ʇWF\$w|Աe1sxGFi 0xN8:)ò|/1x0cǷxufg_%@nǎZmv' W?btO֚f|>_NpHaG[cPk/tp.#1~n6tpmbQ2ܓqZ2F8O' -h.6랛A ~9X>n^7ݽ/`ЎޗD*[kcԭ٭eFirWyIx a4캵vJwlۢo7 ]?,i>|'+-"@lfӨPk3O䩱1cF&?᯺c)/GHPtz ֬VXNM5=xju@g6gMe3-i^N[ցQ5jZ,V'O0KMkeIi( FZޔa\KqWlphWPbԿ{IU[-LR&226 |h|qB S#|ǣZgJ3ܦyrIs& $P300>cYi#vGwEG/-i`LD&@4>YZ]Z·lwe2GV_{TgisXL32/쐚9 "(H ](k*F+K8Xkp^S他R!fe=V8 Vܡ~㌹͐Wi*U.J`^z俯a|>i {G/%<:4I{:^U].:𥽅95^{9l5q@x1N}2J=tMO.gkl 8 _rz4,UHyuV6tYA(TDR+c|SDe:B/6h^8/'iIr 3 5Z.ta;9 7/t{*{wMf7ϪD[(r @?qى]&m.ھ 80gEi;?H;`i#W~cv,ʧ*u#_!pp|Dm@FKX@1)L|.۪7+s^(6ږAvY#93Ƽq4g˲My\8.])F{>ƧYc_FEfAZy)z8gOb޹waeȭsOlb⽗̽ފ|W$5l c-)N=:E;`^T|*c}D~ < 'q,i7nW[6Zя- cӑk;ݦE-r -*>x#1ij'2{mHqMHz/䓽4J̌MY̹R|=jbP./z<9\Mn 䏏Bj0ZZ?2&> hk9FdO!Ȟy^Y!(~;@ux}$lДt,%9,hkx玷Uʇ:d 5 @,8"*w#sWeYz3!w 6|i"ڟܒ7A#"yJnzSn%a,={o J~q,^_DɂKoQkZ^#%V;;גȕZ/DO,SrNb/@u_l͐D^'g;t->YӴ,ӋsE^%AkZx̝ fQKm؊Ro4}^>Sr=g 0ӵKÎaFÈOǶY[:/ah+`3q?'󊄞+c`:WZwRɚsp2'fwH!LJT $#y^sm>^"~vI]>p7ǒsi 6Vw_v&|d'B,!mM{Eqrǘm>V3Nņ69:OSKFdǘc)O;x_N_W4V/!Np+KalZm4TZUACT|| Ra:zS[[Vh t;C'9PǙʋHιеdX%10:cl4I`{Q 1 bWlUU1`;WV+ [[es kn0p(rHݺ;Њj%D/KY_cF[T|&k{Nl$Em$ʱX qF懫,q0I۪a&} z$ 袗$4(?aۮQ|vJ>?1n>FQRrqΠH+^-gjE /u6_|k9sD}Tk볦ôAj(0H˞j tx;$֏e쪪ٍ5^ FSg:5R}vOZ4NrC~-uL>jжs:mˎ$Yx !ګ+y2*cܣ냝h4pTϹ^؇#]-t5\BV2?^s3?,٠_,ƋT8Il㛜4[9FWCU3g)^~v7.ߑJ;ؚ܍4J?ԏePVxT }DaYQ$0㣭"c>$@O7K% V U8uћcY{E\6 nN +%})!\w}} .=.9LbbC%46S OD4Hh̆^J-m̎ q"iU[$xP9u:E !$7|ľ@0݁V< ϙǕk̤ǾBC"qGsrLń=F'[J뉽RT?Rf]b'0u.O^\Bmh-=Kn1mʨ3`c6Db|?JWTFYCj̸TffP) T{@{ك #ZK|_[A/S:X=ers)2G~{3U)iX[ D;RA}DKqqfrȃA/Tz4CwLjp0J f&!&As9wt)DӜ+Fo\tyuyI^c¢޼Ϣ=8'?|OQ(@J4 $lg8b^G2}6@s:A [h^m㻷s,asQ K'wu'`gHi+KyiG{G{%u+ A2S_/ZފA2%.ɌLE'!`GvH:w&So֔ /:zW7ڎQn{ |T/w]1?穦hmnbu|֙u3x"vr@! Ѐ# Mer{?#d&^ݶ˻R7L-O㍫2BSpYOZw8seLvPJ6̉UFZK.’pSH(;v5 9\ֆ9:@GDayTī'sVɦ4LH (mf3[ Ov&ڴ!.=coԛu-IX>gg # iDN}F޾KDaD4om`Q-0b8 \q'Ҕg^vKPv䶱ڕ3ɍEz̵ib)Fč58cDw݊=\LC2 F1}v<5D4)|Frܐ֯AQ޼yU{v~A[=̳q^:J@9Tx]:RJGW+V9wU99h޺'kRb:Ors-;&PQ&n?ݑ~ue]PkqE4y=o&05t1o9Wna2B={#¨KZ u=cR ЕSwқ0WAiwʆ`;1xk7%ݨ#bSYE%mQMOBӴ:0j!bJЅEP{c<@j"^<+(Ul_]oG95]wYWT \Lel5z{-9ynU!):/ TO|e"u^0>-5+\[BjNHcY(ΩOsَihm]u[AY{v?zmU9<y`a-\u:)T 7rz#* ź(eeD\Yw5g)Wۜ0)L$ WŌV &kk.m۽VfIb|# ȶK9J. 49$ju (K>֧ҍou-:uxQp_zϱ880Y{|EZ^rkNy]S̚K[vP;n:5%0YH.ͺ=_(DMPkJ- ɺ=`0' 2yB׀f[y2lhsw[%{\}\[Zj[]O891bR;_CxU8W=/O2Gtv土j 虘]o 0]!䦀(3[zmiAsљU6i@kXzT9v P; O]Ρ|rF "#h+M`. q%=1)F> .9ݘ O]͠]CWK&|c,G ¡9 mr5R*7LMb'xgSJז@FOݭy=4}pYUYǺzUN}]0|P;  >]U'-1>W —>zRCϗ%"t.NQ֦pٙ6mAS*QPe-v"[m|zяî6X7a0V2=p n8[/sAN"S}9}98>CZ H7wLʝ`m4&@S ]$ϩ_Ғ5 HZln#i@4q)2<_nbaU-[a޺:MAKP{lu'3anWjk˭^7,=r3UѢ@FV8[wkj^]4cZrZYM9?K CLƣ2sBPg+aЦfuAs霧ӐknkZeѠxU[4z$SKg%LWkvNiI߯%t 뙫)^&bP*9[Y\9D,Ue))"%ie ß-^]*p Nxz\g};uЎrSы-gwBC >c}69Dn˻s(F5K'W9To-0)oRխRk蔪|IX* FHzuD5~<)%E_E0*4]nW ~v^ Vt'qNZ'`M9(]tq{]P,fJ` Xi+$4Ām: 4~' 38GG6QV!$#Z!n[NP,cp_w0"3!=u?ٯ2'5.ٝ{?o0{Ne y&;^>-|U a?;aB)33}㳤̃LmM0j'2v>rOQ\@np onUczQis?+Rm{xA#2sA~Ml&ws }Z|ndt;%*e16A͗V8cqGR|z]/{aHB,J'zTb- 9(~a$\UG{T4Y3߾ J4+Fw9IT \)4O]_0WmT;셯ÑfT܄o0E汩岟mA 2t#<ӵڛ\.jęPɮ3W)Qc:5&kb҇*u TyFC8{ sE}]J}8KϹeWLGg`ޝE>kg":eO~ zX%L4EUT*%]Y<{ hǵFȑ7M3<#ؖㆷcUtY}1!VS?=€[pKV µg#fvK҃F~*eNu'VQ+S歹 |$8Stew1Ћ669}~b/A;:5۝_&ǏeLsNX֥~F@*DZZY É'iaRMC0] JeB;h7,Kfd|ghXz/ xݮ 8au9نFxj *hE>SLJ"s| ± Tn.b•vWp7kck2 Α Sict@Lp].gͰWOeg.ițt {u^FN_tm$J̡}4$SM$|Lq4+7;Ƹߺ mܑ+FwkJ,Abk8Х2 48o;>mĤnh3\X<{eh9Ez\ bfC u|0|x7Sn"  w#} ($:@.tEO1aC{^&[#oJ`Pu2HML[ko85w͹K>hԨo*Q/+=cCBh Sʰt*M%ZvmIh)x9LtjR˺'9sd9j?\6F~MJǽ\ eN%uV1-:'}usڹscA9ԞySݡON^fսy=\Pf}ݻ곁wZ*[v]+A{QK.6CpuB`K6yU.=t}6Bp :ub"c'"awC+vrѴ{pg~3c .>p.WMT'΅y~,6Z8 bT\'QbnQG.su s71sm]t<=2claCPfE}>:gPEQzHl 8*_B,JJwhų~9+b` u IOrn.4sĨ#G|ҍw,kKcSv>2uY:n(Cƞma"bQ 6=4Zo``}VDCVn ƞyܭGʛo>͕X"_ͺ^(2ki޼t:`&\Ӑ{g"TOg!9Ǯma> K(]a^[X~!7OsdCBcSa1:=݋4-W#FMQ[/|ijۑхMrߢPdhQUgKFٕdUxP޽*"F"c}댼=Q |`yc)-FOCkpdZKNfF:n)j8ధ^r9xGJ@tiO@H{ϯF*]G!:-2}iذҲK*wc+BGA _;};yV BgҶ~"}(̈́dVh<"[ Ū ^[DIm[߽đ؀U]6Jv ] J_ 1P)66eu8nӿ.rhוɃ>!ZȈuJֆПAtHUuvpc0FT[ <fʲS wf7|!\co(^ؼ['pv ^5_[ĄSB[_>VMHNѯ^@q5_XGK|iBQL_5(>> C(C38+HV2EfV~^|sao UJ˖p ~ogv_Aq \+ ŹL7LTߋqlb^zcfڣsf#os 9逻YGK?6 8Eʠ; N#|z'`aGWS[P7Vutw)1|h=;Yj]a)h% 59f|py0rUd~uo˞27UXH\6x3+Ǎ Ԟyj7UP{6S5 .R^beܜi[ʹG#@tg[NYCBsRJCTQ3N)g\{vK-]v`s*珚+s )1G77NAМ@jwa}L>FM0дy*-E}P,eRpٓů)37WCu++Rݲzpc1L 7p5ޭ3XrԗKo;gl v[ظolE sc@.?BB,_6%}{* q97Z/Њ<vsU{,$/ ,J9K@Lqn`;E3A],GW{-7nԳV0wgV];+כxzoCٔpV~{^ϝ\!\hPѸw"ቱk~+r~VL"֝Lߘ+WU c hJ{%;xAa]i@CMCƿTzw=hmЈٝ6]tcRhQ/\\#֯* JuXk~QwUUG#7qcRL;G;Aa9ܲ=plBO8 ऻ-6|s**Cbd%љsM2Ի;!j縋Gfz0iE{'n`r#\\*ī]y:pݓC]DVH~xNbu@n IA/w}OګoEFN82^v+eڻ42g:~h]6R''AEߦF  E@>7I֝80$GL}xUy0gWaWVŔZ X[.6*~ORX b}=4tڏ0d3'BKg-=״Fd^Ծ+69RF׺8\{/iΈq} Hq7Hz3yLLUNedxLQ5slANB-mZ'մ/f;nN"ͳO$z~QK yucp`hxo@/|CǿB{1+rTlhJʙu !Q|$sn/[mE[:(?T# vҏo'qkʧ|CŃ9=E؇HIl۷ pAuҲJMdUphUUu g /bnQƖOW./.-Cǯډ}'@+qzHIӉʤ9v*2$]*3bœAk؏Yp$@}{GҊ>M;(m]ѱYj|= Zml?&5v-JYnu&58(=|&MӶ v¢!j7ʳV%,򌔵{ro6fP*G[Hu@OH$9 G:9.mɀx}LOL $:\Yo"7̚:=8?)y0(~_-ݒ([?>YE+&0F]{?fvMXN :!4j$(b>-Ǘ~|V4fjs{P3ņ/K '`Vz`{8t imWHm Fgl+r>TW-]ɯ|nfh/=杇7 c%u /hlh$uZEWg;-@+|CeEp%*],fu%I#9}y@K P56,BsSW\X0ފ#sL(E`v:JXyQΖB)6N tiS=9*G=T!4B&ъwKgdDc^MdfYLLqM ĩ/Tih{YGAmTv}cf.˥нZTw&`p6b+Mǟ;1hP4q<+k>q*\+flŤI,_+\;] ]YIu!Vyy9'X6ݟq8E( T]JS&(RꩤFf@F̋bpO~ʸ Aktq H4I7_*$L%>5QckvFArtY#A$WӼqO,tnLBH|`lϕgndT-91a5n 7Mi iyfzBRC/>-h.e#f,-*Ra wޢAHhk6SJƼ-a!2/`~Toʇj+vݥst=Gs֫32 `E8zƃUYRGdwՔ"QPƥntZ7e@ϹR3ԭ}@+GAKHY9"nC՗'f0DJd za9?|7'͏4(۾h_9gli)̦ }ۺ{C t]w5h1qsDoKXؖ2!pZ8܄TMy+6^۲Phz@5;M0IܧKQϘN8lt%_<pG)am^[GСV'I },]~F0D-08USi{(@։(l|H0=_XVBuQCG&#T흫.q&eH-A`'YWf:!~ü2jkdF/;JάߢGWãLʨ)UM5@{ng,ȨGh[;|6)|1$SSv-:qۇMg%C^3 ):.F30S:~ogOFLtj cPŒShl~Rʶ% o<°$blG*3's&6Vn|׬s>Оݏvo54QQWcMosXꡌ2 1*)|.қiQml#O!^΢%~3^~r]GXeQYq~rUIn|^~:Yud^^sZG^͕Ǣ)#e@u!S՘{lP#y67[_)ލ(S vWnk2﮹HjǞ+ 4M d3>؉ @줁.H*CJfh 7nQ?D5fH%~6>ѥk5|ѨF]coϡǨ!GT=R7ws*+v\uAVehqϮ}d{UM,c hxͿl9_tPT<2,ORۦAOmː9N)d&6'dcd7&驡27C7$$ǖQ]8,&㦪RdaF۞(/+~af[v tn[95xu8ءB1c$<ϡl>=>*1 A\S*fvd tz5J}rwYX9u-s]>Qн7'" eAϢo놌6ɨGYwftK\+Eݴ-uOz#YݨAtrM/M%Qnu*|A}˾SUՈBQ;r_ɍBٵYwyU o ;W{(7ꍽulYݨ[pL#Me&¡41S߲(M!L-6|gU:ƙf:SV_9|]1FHi4z@H,KvBG{/2_+5StS?#è{5LE$ Pulr8tMoK8Qlrng#}Ws L.=6F$"5gDNyV24ӨZ7z70/JiaFyF=&4t'73X9mDև-e)EN€&j05wzJ+iht[ Ԕɍ7ikܫ iӉ~L2gi#ou|&s̴,"SV VXP0fKrJV]֢lݔ~+p ;>cx K`}{h4ZJ?^Ű3! #=|1oUB%QkO&r/Xoc!x>(/R9LY٭Rn޳ ],a tx$Guܢ]1QG,pKG5nScp zҢ"a2< %CvsՐ=O0)YC3C+2kuoG&`FqؼP):Xv"^%D*W vsUnEoKy>3{sv?B,4H8t}CJfA1NbkmDrq֒:rn?Kk\}@ݡZ,zmU8:;op0D$m~1s ov<X-#Ъ5lcWP.Nc(1AF,4TP&mo<_+!vvxN[vHA'TCh'Y7`UW\-02V rM1=O_\3j}lsށ;YwT𙠷l VXoˎs=QBbf_k>va <2j9w@;U$@Gb`' qi(y'd`R 5H^z5'9Q$6B=G'LzU nN? : |BxRf,w僀m0D JN^\<i4l 5.t݁k_ͦmuYkfh܇=AA]g```(ieyӠPe>ѯ?ThD`]4_=U-VS JVZ{Rzl\[:/t-I _aI˳=.{-qa!RO00Ũ% DoONM~)wC09Ů;z({lεa3Т}Ta qƏɠD3b #sRe4In%PL3{{<=H|Wh|P}wQ)U1֦/\(Nƨ;`le9?N13K8hYf0FM`G N #r|6Qm- k}#Q{9[[[z`gw`g5j[OuCF'Ӕs_=t0ƾݵ"q_hhv gdan[^ƿ4[F]BDH'c%0Z/NS=msnS1. `#&ru|^SY4j#1>lZ~gT4,vM}6.5#ԌpLy:H{­$ݓOʕGѓӽpR #;?N5ŬaXt59"Q}bi&JCTN'3v΅WvZ8zάY }xC;UD=>X}>̯EGUi6:)p7BpȆeO&&gԙ/%wvׂTn.R%mP˰ZڞI[b=7# FqZa Siy\2c#ɐ\w7N "O/dg#z*|U'!sorege%0O L~up%)Ķ  i' }T2ƧMg E6T.SekVL)R4 Ê~J~>q:LNWo5c/3uOR:{3͹6J+F=Ij\#t`L165H}h'[*s0j{ڕHcGZNs^=3_Hl{`l $5K=0n._42!)F4 <$US۴} ͪ;XKf8OJ_։!ƋW[>E|2R|LyF7frt0ʔ@bg>IXig ^/J2/5SbTbc >Z zX`cgҿAŽ}ɒ8MRp=o.5Ly)8~^HA^8 ;3񊠰cCOՙ]$&GT6fl yx/)g)N>/6s\R/؟LӒkvOGEt"fr@ixұv5ɆoA*{K`n$Mz mSҫBgE_e:k$xj߭g}( Մzt٭E:#+z>_+ Ij4M!z6 vf_.h(@"q{_Z*\g|ǽ`6U¨1hnڴ;.u.?g9w ?PN0xXO6I8I u\n;cHI/[ɩɷf!9{hg45e Cy}+79X$ѵAy :j]Ze6Jdx_I5W/(DT‡qg ؑ@[?l7M#BAR1+y{ (3: 3sRV`/9 4f KZ(+`%鵸 +D\l8է~!Ub(mSWVrAEp*[N 6ΰkh}wMCpf匿y:q V!y>\`J *۝sTV)?{#֡Ƶ9nH%5^!85mЖ2,>chq]2|ޯ@z|>^r\mF\ gt y{'F硩8?tCMwաx>mWZH{QÕ2NRVOHhYdPΥ#UX8]f<9K74fV^F(хƋBé|8֙y袌\(I|bas rZ`zIybU\Jr ke}s(fྚgd-|t^rEmT |60XQ>cQnkBҺҺusWVW\r_[pEQeg:9ת[>n.(0`$W&&}V耔G³cU )R?2}EB!)b\Sԩ+/MA^o*528E^V*ݽ&,7qmj;/Y_xz^=ygK&^G9NO8]3uh/QC߻=DHzkVlXpRTyrnǭ\Zn[E Zb#tgSK-һ'#:c珂\g)܏qCrLK8b3 Z88-X`ݐ,9ؗ5(:Ø8 954 Кva[2/fu -:|s,c {o_.i3Ƞ20b`[jy[pO9ofamd5C7DԦB5觧Z8\椅r>Rw([*YjP_73*;x(= ~AShogk. 'dN=>?XSYp)l]W E"yk9,*]ϸeiM2rxRN~;Vz˻3#Aq/5F{YWǨNqE7DM$ Q+R 0 O}ײ^ aj) K7]hN*_w3P=VeFWJ>Xv@Ԉ/Ѽ0wl`gxeyOڷ=Qt=Ic[r-^2w1A840x,R!"4Ƽ9w]Bh*g޹9W|;e'Χ_n|eP/5q-s3=EιEո^2)5]+sG~7Of݇ 6v#hْųsa@\g `Ġ +]J+Q䞴W|eH"rs4a@"/c0lFEoc~ 32i>FPZb^QeN @'f'Bq=;Q?5lP%;-P-%K{YYD$J3Y~>ޙ`} tooj4Jq9rU/~#Z{"c}|欯VY\0i;k\;n g8`>}Xb1q>&o-0+HqmU]`iPxv)v?45:7'6\!nӛ{uƸi{G[UeMhB&MDg2 2wlZ`auƱa}XQ/!Gk}.7xϝuunNK >-kgȁbD=j9x9gOcw3Nf*tO1$>ϼPB^Khobw^{@5!aGz//$CBMA9)5N>4n{ӝ3x |e5uTYx# aO^JނktFJP+ZHU{>sr/:ruv>daF)vK0E!fDg(`d=%Οbr\c0T?Kc! v@_^Wuw̳s]h]4#+{w +fm!cAbܡ@˻_7ubՀ- r=>\q St#58܃j}lJNF4>m*j?~ZzQ\4ں 'ӉL{$})bŲw|E#6w6nf7?T}]w%z6)MO[KRt)7BogoC @Oi C٣\Mc bނSgM]S4j+rw;[GM~MH[ "T7-iTymcc6A D5ŀE|kYNbS 2wriL\7|}*{m&9.Goư+Vڃ5-@x7ȶh>p%K,.#-^q!eC_KmǹV=v}Ue< NY/*>eܭV, xh+m ׽VAn<8Q߄ar9E"׾$O#bWsSI+snlsI'fbK N& T:ITǡɆM69vg$YdX3IOr lYqqJܻR2`mT]X[= EW}WHr X Яl]@e3eŠ9qȽkkŽ}%٥{Հ{/Ay­Z219.t96b5r6mddl^T4l.$iivEvSHB*cDtۇhw>IyBA#7(ǖ |gā Ϯ{<&;kYSMӽ2GNw7"0 ŸkЭHkLLz+D}¡֓ΊݑM#K 7zi\{vk|ށk6Ae[FS N¢KYZ AIf4hl g/]lxjZk ߹rf1ez91b@tЎagdwo2IP/l,*$Tc%~w{L^U\ݫeBՖ}=V-8>G9ZQ_:8&v%8*Q0/mu9C&lGP\Nr :%V$#; &@wIG3(x6QlZxfR 6fE$S0C/tJYBAz;Ƈ6f{/]'8)z#$H@P"DW!?PM PKgeGt2F¢62/C)S[%2$ƔnϨ }#}}t|ơ{m>Ŋyl,5} ;̽g ψΊrmkB˷yFN}HĴPlmi%_ZԊXaNB¾tC?jdﶟDOf~H /;KhK\nj$[N5Qc!'$v/L*^ {܏F2ZJkj*7_םD = ACHҾ! !|rw 4ȑPWrn8MQ8v w҆_;_ms?ZbDMZ1>dEe;#Ћs?MBM5J\5*]`w^2u]7=yzrr峀1z O&ld`rܨށRsQ`-<=~2C ]|ϽJy~4ȭ+ڶ-K U&)4T.Č*Vñ˻k6͜%}C" 6ѱxE^~L~PҖb>0ϕvA H L#Q3?Zxg K|@a\?X4M>Vmfh{ VP6VwaZ Zo`E(Nnt>#6)DLtATX$;mmcozeDRte,ӈ2sVeJ}T[MﭺŚIڱ3d2%&{l] 2}9$<(>0 K/c/f3 bE}9|ėqۅ($|UUFJIܷ]Z1Tҳ!0N`gCD"3XWI ז? d<7'a;HIn[VXUЮ$&9~֍IBRnh)ە%$MzI@%Sc~ds\$)^M9]XtЎ "8!yEʶe vLI?H?4j+fkgkDdXgLphx4ILdnD"+JH=UZ#!ۈ-ȄQOaC۠!\ӣ7#iIYM/tqenu&1XQϏd# 'sf>x UR51lzH=%d#Vg"|Ʀƀdʨøs#6iԀ[5M唪OonX Ǜ0-%D9mrԔ|Vf^/F@6RN@>ƪk)PU/&w#?ۦ T7ft3 wMR஠90*wt=Q 4'ܤHjc˺Jݕ<~wdոY~<]9]?ڥ^M(-CGwmcdy6`Q+(zl[R\asv,L{m'n.BjJii5 rxk8/$9*c B*9913cH#^cݛ1}a_)QvMcf ؋l+MoB r蓭^ɇ S ـDpҨ[i]ܼ 0q%Mmo'~Vj72wkaSLuMΉ0p].a\rE%)6Nj=\a}*NWRgdx+V&B˅ oeⰡ9j=Z|Iň,5{E;2{^3/D3.t9`w /WK`Qx}}i0=W{(ke_벻ۧ73s|^ d6#~C/Gp//D8@1:Zqg 4^ĪtО{Ln$Qlϛǵ|a@ShjQZ{JF%u6jMA?5X wVD#Zӝ7;bܩɎ!r+sM]n91~ SY?0ZNF?;'Zzeڥ\g$9^| BQJ4hJs3 [6d3xv%wX"zKoׄ3&hٝ?Д ʬ9n`|s_;R*Dgw8@h%&%Ce!.w{yxd/pCrs)JMKvot5Hqd9ޫTEI}OWB^-ct;~PǙx?ic<H =p][^VUa0Ä́sf5nِ4^(}~ qٓHbWpf×~mw A;znȯ(IKN:컇1< ҂F/ǯf_Z) lC|$K T]B>e87"g7pB~q{*=Fd se0`4ȽYs2޳)d6P)=Bgرr(pS$N,[ .Q%B6|ɫӶGjџG dRRݣ^;w YIi0Z#m*,Kmc)<`2='Q 0UAs=AOTCup >Dܨs0/DsL0eO!ٖN^:<9|k(*?0076*nN 篻ߠks@^ (|9i^ZA2mЫ螓q[Nu O7khM1\GЍ6~p*b"vKIP<w "$Ma }Zy<14s![?tyw4}@yx>YOK$>=2]2Ҋ2FH[9\f0kvN1Bj1Fcc`a4>8CO!"i]A5-gGr|AZ. WWu]=ԯS߶FemϲD!ų6瓴$)W 0CKu;vWbhQ:# T߻\zmFK7N!mIL>ZHr$]E12~O/jnQ\9y`ˎg۟M|[~0`+$Zsg79j’v@aKv*.4j}xP傖TO (S+$u}= ἗W=):|rZ^.U֪@3EO=prԔ62 !P .5 kKOmU慙K::ʥ>9.W7!k zޏVP^&:8jW葖PZXwH$$HV;O*P5K's;8t]Ɖ_feVuwGDb)-b/i)?]kTqNU,',G#D{xCO|GgOҫzĹwB+)@r"g/U\~XbBk4&%x! !zRsy(r2Pmrܷ!G")n_K_k)4]+B_C7?]hF,5Ќ#fMlHnq.e\.pZ:4a(M>əM@^6[_k [Sf mO^AGyZ.w3|H Ŀӿ &?.y X̜ը?a+DMDM,*^ Ο-3~qPR?3VϤ;UxxE~j@ @~%'O?Ҫo" ߱B>%ǁib8!+$CpB+l"&k{ыyᆔƐEh6mt^&e֭ڲ1 :Ѱ7: ;I">@wjOQ[(xW#|g{spdn Ǹ[!d+ڭ*˚A;6R:eYBK*e,7cc s&7dz ]ߙ1O/7lR5hCxS0t46#<h{s?$ù+nlApK!(0%3Gsg^)w'P4W0-xo&PB+>nRzW$ߣ?:p; 18.B:ӭT 2vC O=LX.QsA$3ۧ^EkbR1kr{ґ|l; _Xc "7ݺ^)^ywd$P$Bӻ\V| Оr|vw:L{ơUGbLvQ?-{0d;lzeS8 U U[m2w0R\ΚD¯W{{MJ9L rVA^v˔ɩ lQ:Q]c)M <0G&7q[$Л9q0Onڵ'I; +_llg'!{+CR9-v2ИtrgdNKU.P3<F%R#Uy9iZ𤋮Z̎xy՝EMY8h|"އ9-mBz#2+\ Acpσ)`b2+ Q?Jk^IR r/1ވ2( fO.`^]7 *7Hx}d|M5Ry~~#)RwL+&'m`ݧo~XBJjܮ`݃q]N'/] ` Fp{9b(쎷 \8slD6¨*;‰Kg D}6'>NF6\dS=AiBh-d\[|CW8x%`T[5Cn"Xw ى1dKUFV/m=<XYiIujT{>`CFfx1`*:rW{ƎE zI_aۺPF_LM7~ߊRd % Ocm8`ݧ۔P}Fvn2F7їU1zu_m+iAڂ(tw&,CȀ !Jo|[YOg&sO2fb4cϼ\gy/{{87V9ZQ:,1u:CGZ_Gz佖V:`e." !ioF{G!R~Fns!!Gjz\C _4B#⭸5_l9ՙAZŒMMĎ/$!5toqq) 6>8\.튡,CNVud"_Aʽ3 ..yUb0waM&`Fuⵡ]W-\Kz;[=y ᫀxTZ$_JV*^U:XJn3e TX]aD޿1ƚIC>ڤ0@ 7V41qu[nkbWAOet9A`lnjwopo=9)%1L~H΁xп#L| ܢ;g0 fm]ilӨM/>~mOŇK<5#TWGSծ\3;Kz䝋 8 PT$jdŰdZ (+Q(-& fPfс>fptNwMn۬@\r@=v\]aD/RV2hz\dcTh)AslY'-%Z>hMnДşKvE(6WDE4< lv~_2݉OqK8"K?=̳q45t9ڲn2*k66rkG93{S(qB a*m~t1t8[R7f<[3Z==8tOPpKr -9ھ<+56d.ldys{ w'/z+h՚q=E;lcH\ҳFG6kDs.":0G+]6|Yav(mʎ_pb]Nq 82f3i^+>z>uꥺL$:QKvSTA3ۡG$کÅ݃p0+w'ˈ \=$)T(j6D'&`>r?JM>umƶrP ~1BtIMv@7%V_9EMj9I,ߪ?52,GlVZLrožQ )굟1Q3d-QOE 䱡,ac.FL[prwxxtWBc }Ѕ0w{uJD&t)%쐤y,ʄf;SұW^ [a7Uا;c:|\̲>ZlN%Ԋ#YvG'CNDCՙ)E~Q?o)":Z1Ŗk2㰴"q?C9 zd`>cnwp+fKڄ !<;=# 3ռszUa#!)W/#t &w wLx꒷I¿BAPʣt^:rMPWJ6ua X}-~l0]g\N[iƱWcэ8Pܸ*;[g5ҹ]xaX|fQcFfm{, 0s/"]cFnf,/P`E(v 5rgYu9;NÏ0G>:-|.40 jӡDNZ8ZEMasQeڵ ڬ*䷽2>5tLG O>{7?10+Y9ipcHܘ7ip^rZ;Vv'$c= t 8պ]MyI&V;jXlX`Sp;cU.=m'$RBTUF% d66Sx&zjiϏ-uOf8n'L܂p=<:~!WBWPZ__bx;Cԫ/kO_u\y&AFX!:܁-TlT_vtW叨W 2:r ;~@m8X3|ye9mdw+ #OODз>{b^Kۏr+9P65+i4ȟfQ:jJ塈h t#09 צ3!_Y˴ڤ,-Nd u^b0gœQ$Eg쩒R\z;W|ǩwG_x\^֟w# j&$9xmqf$C )>:*o,KI=tSmÀy'z#?Cб6@ݟaUW͹692Ǘ⌌UN'C }N73FysZ/bS[gS0Gϭ!X|ŪEpGT螥Mw"MT>LudǵfY!ձYG [,Q>pGxT܏xO!E5N2C$rwv0P8B]2Гu=_ GXKXe F?yF-a!uJR}˞/0*a?BTF< .Sz)",fA4#fta uHNwH9=r޲Q{>4GBʮ]x\#k@n9!+;" F_1歊XV4ؖV8^01!yo]ICw.  ]+i!Z\f2@Adb״i]Ǵ,9K,ܥ+8xMƙXjbm]g+‹hi9~H뽠o aNczg,XTm]W|mm@ 'Qz8:_tI /19Kͮ-ju7AؾlrTX!.ė5> Y2E0\*Q3<*tŎ>gC\L@/>#s\UnO^ђ)fv-X}w;E#pby9yOvItyt Wv,NRVr{G$~ pz(T9/QJmFnW͊o<HYqO=eؑcnEN\KyqzFfW͔xS8PiJ:?:#H5v-6_fN/d=lq,52CXUM$ |ԦWGҺ.ePwx6x mZjj2L< ‹%Bf0m14]0?WHDvb/:puׯw{,y;#ENu#3>=`$/)8CH)<}5f$[zq2R%]6Ω,vF߿$76>ʫ h N̮[;R -l 2ᘎ!w6I0@qkS['Dn<3+̤P q J:O\+ad e BB:#-"M!I\? +dk@ss<5 -?sI&ܨKɚ>.IL}>3FfB[8#KU^řK[f^J6e{T:g?ֻ"I󘄟w< P^M9)6.8~ҳw\ɽ(lשϘ{6&?~"9 {^.m'+iEaZKn̏'*uQJo`J$5Al{g¤vX3ugY҂/Cv"} yTP_7d:9muWjK9~u@Sl,d2 r=vTlA_)g[nQ2Z S jTrh%^b!lYhoWbaq \/4^NJ8;g}a$`lpC"&ժeYsJ- `s0j߀ 9w 3)X.M k-4`8b콶JɨB7 ԭ`QrHSj/\(TbY]yT,$33%l bKݘht`zN^҇?DW*R)TI4jr|[pe:*Q P65 1eG: Ɛ<[9ԂȁXܦc3_ .{-Ң/~kݻQ5GQp͍uAt? y;Kjb~in9~P$MxF$7Sҋ y,^Q'xN?kUX; lC+W* Ӳ["GYMiKRV }4/i{əҠ<5H׫ĚY MBR.]ۇM!]Q;П;8|/_^(Ұ-euPSZB_(zi=ҫͺ2j"jhA\$%GZ.QRF}9i:Ϫ0+ Mp֏sQ0tqIuWˁ9#s﨩u8ʔ\Ӄ,tQv L"hH޷|;W_讆%jBbQD$ƨBRj'ƆI#b!SBl#\ilc,w^1aµ`$QS(] 9y7~<ϥNerʼg4U*O&h8b`C[^n)RAm~vוT'Po#~tڕSZiᐆᑳYGGֺ1ԞEz``]4Zǎa~o gcW0dAFvF2fN2d<|jmYQu+~1eRHkcbb.$^pN|qr[mǍ ;Ǭ32OJ `CO2jE\$)ͥseێ}+g=7.A`Vxjd)g*'w6K@T97NvQK;+ő~VqrĔN2P:myY xG% *Q 0(K?b1kM.j/2L0VSOd,Vk|/=efkaԨ7ZY\$\Wtg|ȲVf݈jU@PՋFF%G~eoe@ 8ӳi壚a]Cە9ϳیzՌ>/e[+|{4U#^{v'e:K_eܛbͱ J{eyV-z))қ*UZ\J gWsH+oBo4l5V?aAh^i#V,{UQ%Ebv3:8Q&OfS BF[⃙| 6 MI"lu:?xݍzf?JʋCUqΘVF_~Y.}s[?ˁi٥tBpeˇ"*;" N!su{e C{itE;Ӱ݂U7]]܍zVI"Z SLPFc-4/)e&jU6xF}{~9b\kw]i/zxе:GXrpEޣ'ѹBKswmC4a4G6Pl=KgEr{S6Eyg G^fR6GHrꝚ`\Z881d^(cP։Pdvb_*k`STWK(nӳj\k8Fr"~x L iyR:![Q7Am nf7G(yG"OAn-Fr=F맫VY#+:tחLAյ2+_p*4*h$UuB 13K*p 4ugd_}lĩ+YlkC,56dR@F Y95li̇N_f|)գu54W5MsʨkPFk% 5yG67s1Y.~>b;xt8R*49K_? ~MU5f 7jXrW4 `Nk`Q7SGyJiPn;q28^z j,tw5Qq5i<4lj1߷e `4rL 2!Qa?]~1J?Z9ԦtqɚZ`}ǍAO)MM^ܦř̲$7CZ``Bz._ulS/fhe(Ga6e49y ;mBK>Ĥ/j37Iؙ@|XrƧ] 'z̻;,#YӭB TzYTTowi=Wg7~]7֗\i6Qo( [3s;λ{|ӏg{tmFuy݅skSyb!ӏXBs >wcn3ley6>fl{\/]i/9*-W nv}P H d y]{yd_|[۬fCq0ˉ 1妆ᇯXh7_0 {d?6ҭlb+;=SִG}l)<'^7G^jyfqOP?|lbUʻ{E{);dybfKl-`snH]>VZ1+'9:8`F,(% ;B0Wig%nrjcظ^/P=smchG<ۍ>3; A81Nfm9p/WLzem1&8(՞WsM[qC*\-F vp7$[yt* l#,򕠍tSnMs~Ο]HQ{XAy@H@*s~6!CHQvPs'm5QKC7$J`t (9O<5r8W=Vr> 96P)m ״| BQLNaҷ~bf^i_}_{,8Cm궏Ոһ|3Df8*PB# gvܻdElܝmL)?,7p.<-N}vgvsQ4L #]-JPZv枾?WA4S{P,{ ĢDצre;Xd8FÞ:wz6ۂ#fpoLݶ/ef~`gG;c/>>Qh6JW~ZyzW?L88.)%\F%r< >CGl * EgwKxFlJ¬9>_vʼz`&\p\/-T/È*4D|A(>!+`e$͌Q^k \ U6D:dӠ}Y h3xiJte^#*)wZPeu@m !C=^Nd{ESZ霛3K5w:<"&܉Ƃ^blǍTIpx8TP&-P|mBb0ړ@#5y~፩;}{k#J ;K%EgCb^d/nvSA =h8su*;ŎQ8f[K7 3eԆ)uԭKC c*+|9[==f/s~N^9313=j#!zOV&Q(JBxc_w94t{s,xq@6r2ŠE'<4x+9o %NC]A$/PЭ>8P8ݸо14]&>ƥ6\峖;p%e8ӡC&\lF/l8: Mq5pAqպQkQ7_%l,Mқ;Kfsvs!0]rRv"k=2vE-)߃Kd-\:qwȨmS*Ue'wԺg{n9rl % cf+xCI Qd_d/r$-⒐6pUҾDJr^JM!zTQ![[TTw*LXhQ qP1Ԃ Iʯ}ȯT\.R B2/=$ -[㚕,l,\.5:GAp{W}`śݴ|V 7kPQt8 |i3B~IOm-..)w QXTA,赮}ʅC6jQIVخB2v C TUw_r;tU9å9J/Zׇ+U_chXd1՗D3ݡqu$&^< }Su]~C6#[FU|䎱H8Jn:YJ2VmeC:oCL:Zd3]Ks;x&ms匿N7FŒJZv x!5tJEߛ;FQ/TukZId"ɋ՗odXo]*\lJ Jiw^TKtv9lf.;CTбYBxųVb Sv]PcDKcf)VJ'BZrs`sz&ImC8jڗqڣkr@Vl U/5w-6U֐xvsVmCFh*c}oLF9bFd ЈR+ya=%R jי,σcΈϊLݧ1 z{A/e4{! ߧ-,^^ou?w-]c=Y?xIsY piᵱ5#A+hpX 4 N(d茀R﹕:_xs W L\j12utc-`Cf]Wwy*p>Q -}}r#9EGkYw,ᮺr^̖ rEOYU9wvרOCG˲ˎȘ> 1V skD`u_x <*;jHa`xu`kW. XݜeTyRָ_fL@| ]f3m5?"wJ`^ 7* |}DVgZ Q]Wuu=MM4-G ~?'U&qPv>w'Q@TA;>(,X*@qdgݺdﶁ k5g*pf+Gẉ8]"۾`͔ =Kz)'$ ̹T;1Is߆<5buOQ#7W6hhx|eOF>t CcQA ⎱rS_תmV 'I/(.E}.}F$x*N 9I<`z8]sKC3D;4Wn| y~IbyH=)٠@m_\sq ;nƗ!GuqT9N}v44KL[y )t5M _u]BAqR(:^(aFHO7s; ם9&}1Uvude\vNsq@wVEr̽9:)p&%GPԯXMd_S8oYX]No?_u5[k^Pim/ˑt_yRu~ߪ?~ xoꭗJ^Ub@թ@yQcGf,CiԸb:ıJaE+;>F ^-+C`urAm0gAQ)rwS̔euDlN?:r#=Ĭ/a^sG{w|p.ތ#th*6=2luNB)dA^5 {G&eVgH(W'GL 3_@2eK9!}ЧNT8ˆe!gYF핵S+e!j#5s{ 2/]>GԮLdg_wh(vl62ݯ7>` d%>8 J{-[@/ 6~t]l08Oo쓬èu>*lYBKN/x,˜ ФS3bH E'^pG4~ +/gk_ 4+A}ԹPV%_$ܢ rM#3K8N%PLG ٧%Yє^@ڎJ/u{{M\8K`:&v_IC ߀Kq޽_3.뗔Ɠ͔]5u#rsS)l]ihhRtjQ y6.~H>)zs*lmɺ*xJNx 7ZhCwC%P#r*C^ww0#0JTXm.#2 CQ:q<5ˡPAujزj3=rBc;[3XNEɽ{x Q[-Dg c9~;f6 Jik#c6V?/]ۧ!5V->\k|} B}?˵qN}.^Lr2KQyw6^YgvFh8bFrreKkmWAJb!hI=JMw9;SUAR#Dw>|FEP[}ߨf쬧1^׍lBoCQ*8#V}kT/8ڢP}|طrJ1UOx v8ZŽ=!,/ b5Jn\>^lebyCp{6̫"}l?֍8خ͝J%hxauLsDxlK>wW^e\{PөM6|4);,rhOR>E;[~: x\x2M>X/ _7L`+]]޹ݠnnDfRBwTxuP}%1o%RÚ͋yhI0+JЙ[v<6F>S1tCW R5tYzK5jlXŇeqZyBbQ쌛Jx*芔+C&üdzYõzzx`Dc9,uG+cX<[*‚Y?yN*Exc_e'\S a4} qlln10aNh{ɨ^Vu'TljN^o-0殚7Uy͗Ηħ bv_~Ux`GmY- \Z <λwO66@¼(ei3 Fe<8aoGuG9bg::.6^PA"}y"eUej ƒ~bߟKD,FN n I GP?r/2Lhؿ܈:?.R൵5s p'OMF/naWe S-\ӎ [uϩRjQ-Z8{x>JTԆC~9^XN|71=x]n3Q0|EC%]8lnWRGri"5Vs1ѿFf{]CFߨ2~~I{&=OAkZshծ0FzymkMDȲ!]qޓ!uwEh[.9sj_yуk=Yzu78􋯐C`Gx"ƚWi/ Cp‡Ga(S18r\@c# =Tl%T:y6~иK)'_:D>̹wUP&bF$ Eӧpbz pxeQSÉ[4)wyѱa~squm++CDϡV|lh񢟑0.9$OX8'*CO&8FBأw:51LWˬ|/uZ`" szu14WU,3A %7#Ƭzt=@O/:Q7 Ô/Z7 V NQ*-WG4su6*U೜O]Xv*x}%)s?z Ӹ9SUWgt>+E-x+Qa 3{ ^unYLqzM4Dh49 %£|t(`?ξ"JͲd@PV5N8»}%L&ɘ}^ͷyu{!NF)`dZyD'بE5 zLN.kWkzr}ALkM+0d+9.YrwXz,}S@XR-r\WLݻ8)ХyсYks!4?#/߫" "ߧҦ'/onDxYYYtEEz 6:S``!Dp_exmrNpJ;., ץ$\B̹qVfwMտr"mԤYA}!"*XݸJJCɻc|}ng #`jrj lVHTNM;\#>L#gID}suH9庞pj?lW8 Bop u}ɍ3K=}j/~>`e[LL]z6kUS9zI+ ,yTaဉM pؑ7aӢ/ ;.9/6}%4r;̳1ߖj H f%ԓI=2v.\OM(:g/jQ(.踋6svD9Pygb_FsI) WgMߢQ6nގ!}xurϦ 7^Ѣ:r/XmvbIĉU[X`d# vS K?gk6Y 8wΊf-'W5UؗfBpYj McZ [-w"t`C[%Sxk&q5D0_Ge^jJ -%zqV햼'ARۏ2=[gdW֝iQѨcϏ8m?tau?%cuv{Das?x,6c,Uœq4[5.8c D8=%MA0Ln$[ $讹) X2YSlҞ:#7THKS ce2 PJt ͳkRW)>|9G[vCCx\N5&E=FS8{Ykw7bؗҷ }ƉhWfknL9f<;X<|%$d`;8WvFi{0(Dp{-9^Bn@|!cd\R$vc֩bM2DZ'egZ u/5HW]G8=¢uT׺sZtPAiG'X4gvn9Vk gc'4|ѻؕGGXrb N bD!LåERٍƆ_|QؑX3%ˀM |ўK?øRFXQ8xZg{h 16ּV3=f1(tg [aPs%n تJXt7ܳ:nܓkYMⱌD1 (cTdF.@UdZ!\{y[_٦:FQ'p)o3Wa _NF.aak+$[@qcͧYa%^ [Wnk117e^[l~. &H%.I Y@y(frQtvӠ;xr|l+tB(*a\MPU|*ͰsPc .ωZB48G-Y6\`=,]L6C ;Dfu'=ynDW~2PzO'T֐;4[*$)_1|K̓pml/! "SI%jGv%uVRGB!ȝ: ʽCzqY'AXx]cЅ:K$B e/w|vR@ nٌ唡.ઑL՝GڹfL%&6BKn@?Ƕt!ƐݡH ]r/]Zyϧ<~wb\ T|ԝV jrSo,,bl};1mi2dٽS@|]sW/J7i _H}jy hʽ W.G)P}N=KgZW-NYMzC԰>I|O[n7)6O:`-Y]Wcbzy`CY:{89QevmO'Qw!!#dT`WP.[ֺ3zJD1(}9QY.>mG#bT ~?/Ծw8y^cs -]6zA$e9>-9 YĴ";M5=O+j` 1:wܻx><ܥ?wj'][N-y-ze*cgl0 {2t6v maGк^Afֶ~oGWxUҵlD~XkkY %uEKOi:#>˽;% Z$_YxFЋUrdT^㩍 >ȠUѓovN\z{/q?>bssm,_ dSF]3CYp#oL?ʨ^kcn>Vg3ȥ CߘVڳ R-Ɓz;rYncXҟD<PƅНkfΜ-z=)J=w1dPC/0nJ{qQ.'鎿֏;;Gt6tiT p)2Z{CCSS93(pEm?G;$rJY no*!隺c~b1)"K꼵뱺t@m1@RQUȶV@5RK/ ,٦7==}mSv|X[MiU=V2j8gxN@aYh Wz[2]˴RDb e!<߻8J4Ϫ3ښ;yz6Ng7p31iA#o圓z,{1 n$۟DKH3*fߵbC|".Y5o˻QϩDZ_@rUQ?VtL7d(obCbQyNs~*Ojp,} a.|QHN]fQ J$m`g.b_KCJeN%/ ҺȴٽfyUCZdL_ QrNSRq}@=!swm'?aꮚ\w*\_6W:*~44HX(6*F{)W0t#>f aԧtaBB a*PBʨPgZbRhIZ㩗ܨtr 5 `IF}}=쓿\`ï$59k^U]A!Ev"m6I^6%l07^6˽4-ѳ! {)B r.5"^; d eɑPvn*Xt_B/s5h9$;^6BhPǫ 9]Ʃc(U-5L?ΰiexj>ijW`7ؔc bNyxf]Bߍ95Rƺu^(q0<= &v ꂤA;HmīKԲ>w(޼(3{nٓMTibOObLⵕc1a)U.jJL$r߇ ֑$ûܺ]-S31x.vJRؾ4:o22&_ I$kPQ -Z{EFKQNYzgǬ*煪_Ou[sps%c=Fa;aͧ-v3M:4^l[ѦaXRqTli0^XJK 2VT+[z7s.{֠uEQ=X GzjgF]F]=pMUšQ?:e`QbyvR_F .El2ˢ@QWרG2_&_t{?F G-O\dZfd=x?Ս5θe;笣Ei c.k烠8W[V6c&y{mvYM>H D%yzdCz<3n ?#@J ؞bonbR;RKpVTg[!ZQɶw{E4;-ݽcQGN"~VwnrVWyv֜襟Gl:xa!l^m'!˔ӏ|1klڬÛpS" |ia16rh )驭 㽟KZ >lJ_wDL4yG!5̽*Q_YZM] i XS:=dCçcvAxٚji]ۙ-2V.hjx`saFg٪cѳ(P ƽwP5lƙF"kKO 9UNi{$j/LHz]!}Y.5ɡM|\JjC$vk8b1^8Y-@趱t:`Xt$ My >W}գA@凹?1n{ٲif(qX0Tqzq45Wٜ82LLsІ4vZi?My ̮5*gkqnm6wZѽD>AήZcs× qVfB 7F&{. ܶ4jt:kW D'/s$DwX'"8VCQkm#(Su %9,Hv o1bďgd~{^ִnZtrhP/A[+Qz'5Q f_ռ@WLr7ڊEi;pRYFoMy'N__0ʱ>`=AO=,#Q[Q˾7snϴ[Hj]+o+tQA¯.\edAyVzP=ZB"7u5xC7&nH39cxV (DMr1/ pyZ3HQ֭:݉M?1̡:rNU!osP *eԥ9?X|u6rpΚ}ynCu$E^)\pK^!pjr%vc4E<oxv9bi֨ j-oitt8FwMə8|4mK=՞oEc! [{QZs9,< ,VA8b5}*\ơ3~9Jں T'*\ww֑1GRߙmrm}h=WP+wJ=M~W,/"pa" Eܣ8O gl{Hj]=^,Q}Ox')mMyDvWFʀ]#yHia \.w0qשNd bh:Oׇ[HM/dǸ??_Dzyx;:ꍌ#޻J`I'@Ps[m)`Cc`潙=uz|GlxpWclW %ભd/ܡ'JП)%w@mc?#;\v$ơ4Y U^F<7\,:-spQ·y7ȉvJ\:o&j>vQ?:GgDYz-܄F(Q r'f4RT[-i Lø&X-\[Nl{wS :(6Ձq}/ p[_6Pgn_{N@- Zz:05(9LDq0z7ʻ;l=qM2{OīκWkfLƓRLQTc~;e/k}( -Wg49N?2YFmr(C =)y:,(o探0DC͋`2 Hй7ڏ9`&f4la}«+'+G"_/GOJ: EΚ} N|k#V Sm) c2WuAbu V.B"u[ЩTKH|tL.JX؏]Aǔ:=vy2=<椨?\#$̄Tݚ̑qNŽm",o1mCSB?pnU«QS pt_R|R. I{%Ġ$uACu# vJm!\A8n{z^ :0 .n(X9yZViDNKOVjv@Ƀ@FP9()KvXrzR r]`|ܓ2`6[LUwre潦|+0ڔ.mFEpAfꙜGS%4A fd)3~OG 7@ByļJL{vJ屏wڒ~KjL:վD6g>!ErW;$ZY I/j8vBmmKڻ7R\ l!Ţ񪷒~zvk@k:=b6;l]Σ 'v[sCp=j-[jQAֶ_g͉{9%׈XǍ6!0خS=z/ i nT w29\ d T0*+_zÜnYkv!~̲pyVM_WOQfʂ5+%&{%<\j_=аľNd RGE#,8DM=}2|=2s}f ~7:n.]u܁Y7Ͷd(KOh/K@g~(? ŏL h ҕ[aPSW2fSSE *9; lF}Kmb|\:b5Tm/k }6ҟ5$.e{h$$~ "%x \;(fVE7EIk}D?Q}lg[S).q.Bmrݍf`s`W'5wQ-qH%Q&o8˽Ƀar>ͫsmhw;X),f1+At *?RⲨޛ"%c1E T2f^dH t5N8RPvϐYuѥY0 9<ԻTܱ2ީ9stwo!μ~~ćv^!4s-B(Aߦ8.tkwfC>Ql7ȫ3t٫}U*M3w<*o^Z4_"4T>bH Gځ]{Ҏ_=cDj ]sm} Gc)Rl#YuBȜi%߂6SWGX9y\~ ̑GӶ=Yicv F h8R}*󈶤 WZ*pMn|-Kx6X6x*(/g!%0@|VO5rJG589+{< ٛčףE9CIYV􍢄"].^`bxc6c͔ :ͷ'?@I|ZQUF P=R&Vv)^\Z7K+{ l 3*V+CyF`͞eEX_qJ ;E4ȂˑcIg‡Saz[~‹N={oz}rnsxYvjW_Wtu׹7D67%>ҭo%/3CW\7b,ww5TސcZ<ͭp~4eA;FFnx)C`,Rtm5|yLgdxm#Hn}\YCS#+A=lj]|TJ `L. !p>J;a.6 Sh]Sp~Mey]oPr7( " A&`+HR|)5 aJŚU{-gieJScwqGMNPX6r#(=~ua׭6ӡ"WngѨ73Qaf }a,W. O }N vMsmBI(\TiN4kNzד?^#ڂӂ-=u,M\l Oz>4J^>dz3\ a^#w\(j=TzISH0xhle`Q<دN~tɗL/L/dͪ(l 7,':\2n\u3}e^wMu|3my7_A¨w_9D"Cö,xdbċ&X1XcQH+rLAusw>Θf^*Ȓ3$G14ϥ)p O?x\svvUu r WW(ۖFr^a] Q/]=W^LTMn ]WD5m<`;ssPq]ZnkE1drw Ȉ C n->hhPxUc]q;1ivC~ƺ^@_y{隰 ;P#g716dn}:`|,61>+pcg$brKi!{fԢnta}Ihֿ|=9tG_쾍;%0UwAvE;i|7'( N|ytSG=;Nc5eu~ͮ ,{vy=Gl BU{)J3?~ }cJ,7) wO}~FG߃V8LlVQȫ O(ٽd'xy :_ da.qc(f>+y cޑd-۞ʛ?~'q;6h>ZԪE/NfFH<T+-Bg;[,zۡY1;XsGN} #9ҏ>F+gIeLnԣQϽ_Wu~sBN:~+s?.]Q}[76CY˵SQu{>1JrMS(wwuO6j^}@h3_6NE3Kx։xp4-t1rlf$e3613qALjI_~Q{&U飿&©6?棡޻Έ% FdfǿiZJYv`WqTJ"CuV ;54 }cţ\&f_ GޓwD0YYS~ wZ[:~iő9ifQ9~$ՠaV·P6_Oaɱ;ɦ(\Ej!&FNuXVY'$= Ou]oh7u[Oܼ[;.OL~GT8lT󷖓kitR w( T/4?sbT 'w}:{:E;ȩKaT_ЬiI9lY{õt[T94fՈw-qϏ0! 11!QɨZcM7wŸF B{dĿ3MR>eϤW؜c ;r19jy"{PyD3~'(z;֝&ɩS8b~2\ه|vivŘy*CL>KnFX!~54 WU.'(y|f9yih9SxN45Q?oGB/ԜAgY3fي#(oU#gMԥC@ $cAʓXvVjwnH_aϋ}jd|Adl}f%񀖛.}u5<+{|&%cv{f,}gC-Tl"%lCĤy`2؀Hl|{'ѵnL;qylԞoѷ\1uZ4Qn. !~)GWt6ed'yn51 s/ΦKݘk.7n^a 0r6w%.| ??=s8nƠIʈwCԍv L-=۔)] C(r\|L¼mʎo3d+sd6XGƜFL#p5̅}y ј7!N) DXw6RF 5a߮):ޱ:%x*n­D+tV\ "dTy*cs+aKe@di+WDZc.br* JѱbV+<00؏Va*YA٢a (FsOrkVvxbɎgL StsYlYO!C6r_eSe2: …/sAHbw8&?&Džy+,~QS_Eb@A\'7Xj.ҋk"^\+#BN]٨AI[ ;Q٭Ϯ-wr&1Z͈N瑠1ԹݏE'V˓m;fUdt^HdƨjY#GDIW`7ʎ[d_<kϠ\r_$0t|@8 Ćl5:@ RqkCKMv#/'|䂻̻ѝZxcP "T/}.]'Nx=Bt C?g<1 kY2{Z&6u9QWu4WB%2e]]jW@A ?(ץ7Ϛ#^UY L̠ H20jV8Cd}Tֳl꾄?ߍI4~ m{qy_)TCLn8ha(&_lf5*d`=ͰSW--?N\yY~{WQ,[F#_\ycCwH9J?(;;[@Z{59JsGWXg M1[K{+Fڣ8Gry*BfzrKcRό4AOMT8b"1p2/Fy{ d)r$&J:n~ ?sN%gUF{tXAd6GeYW~v'+_5]g zjhI$Y#Nsd:TxIs3mmOG d=׿{O!0}h>%- Xcy,Y}8fz$maKT-) 1ɛ}'EXn[6S PeCPAʷPf}WO< v{7@z}XOF6:B+'W2QƒiQH{{mKLvmq JrFZr 1Ŀ~/DE ]"ۿbS܄e+Ux6[N~z{O2E&x{bNe&{f?hBgl9K1>Ft7^dҜ^ITZiiͥoelw\%7;nE}n2p h4T {*^e3;dYPp]BMO^_tÈ˽rs|8? $PA,S[ƑqZ {ٱ-pUt׈WuqJ`.FRjQZAi,B_]ekwiIs [m[RU1q,-WSͪl,ڈ<[m6\6rûsZvc%켽URTHk{hCLYe=?kgF-y2ikcמ~8GZhBO X2n r$`ꦚՎ >CuΥI)=mgvn0t'#ȤjW5ei1 ͢(V#5n+y0I8m }[dƽJџȐ~zr`=r:9B 3wEZwI7֓&_Vr֑&^gȁi$p_A,W׺:y(٫[ӧ@-6>CPѤ,LK1_6 6XB91Z2n9 ̽{}ϭZ"{x- n?z6՞HшS{;!wWNEڡ/L0,+ jjQU˲Uporx|˵&ԟQ:U#';̶Kf!=pyCF=g]fЩD)ܺt9-Oci9¨aۿN[-Xo{Wخ#J;o3 :)%3UM2ݞjiԠq,L,>Hx\ECߵgHSDlݣ좦]Xssc?IcF}T?'.TP5/\ց4ɫ6,q&Eݨ̠,7O{xmɘ#}3PBJ=ۊ3ko&Y{h8bW+靔JhWn pVT|NIk}mTʼn[$`V榅_Ih].8}S^^7)El:퍐%0m׈޷{D& ֺD׺eTz7ZC?("r](Pn#b1I2 ;w)o~:%aa?s3Ôd8ב5Y`ͳ-Ԩ2fa">`0R)X0QfQ!-!r $ҨOnbrMŻY V%ec b]%:9:M`s3ǭ]t{SK*& z'b4S]~ާ%TA4"f]!yL4G@:3(2p::u#T{ig2O/nErǮ$4eKtOoז$bO$u73ST``U?n;L@̐Lasndt[;ceм$ԗ| =bsFɲɦȫmXcc/8c]*1?=:8hEĨz?F=mЎJSHޙ1`zڒZzkSM/I*\.rcY6D$%5Xp2#9II*u2g] ?,RiԳgRK]  05oX<]։ԑ}2 ]"l+Ի,-vkdvK6./d(I *-帮hLgʔGʝ $ ЁNoJmFKXQ1\\ZTQpL2v:Uz8`֯t#OsNeSU 5vը6}!3j&w2֓P*6[n+5j6}0Z)C24¡F]eOZ1C7I`-1! Yw 9aaITNRU*wrL9lzM+ET@릹h6 hZ+gI9]rb68dcǪcIFa{;H9jqK ?D"@$Rsbcq0Fχiz)@gYX5Z+=u#ӨۜV}AN_)z};lM`ĒӍ=58|<0?{%YV%vs ߼7xAت&4mxa^2O2="n;wrOZ3]ܳdcAU&C qc ]Rw-S::J]¢$tWYT?;ԣ٠HDk(Ki@SG-y^stDq3//olG[ D"8SPl(K3-Q̭NV?nuKddKj⻚ !zNSUNUf3Zc^7J!m۟FOem8߉)$凑-,=^>קQrs3^NZ~Y6biUlD_B'o\BNdmW;\K"ʭphNh%=G]J*ui4ӂ"[*F%=I5~Jbv9v-VS2-;;N I-ZNi%=84&yIP7AIdseO4lR웺} >. T\g—)*Vl (t#'^[cw/_~ѫkʦ~ΤSK͓-;fHCINFVn:aT˾?r(`Y«}K=H.*Q*XXAQiXh0KC:M?F7YlF0zfCNYlS!@Pm* v&Y"^V!͗OԙIvb.e69>.hNV|QFv0V  %"Y.A!Չ%?-۲D\lgEui:Ȫf?Mc6 tV^aWD_?1 g&92ip5{Z;Eɚ)Fɝ ޻-C6&nD>S]M͉ͥG>sGwKJ `ΏKÜu+W/U]~><ޜsvGIn`6N0;#ofOļq@''ּD$+w>pJ^d\m:ǂo18.^޲-CJs!X*hii +j#弌fc2';Pӕjcпe)ѱ4Aȁ֪a{W'LU-HAQ.WэUl%Y\;*rY$^N:*ɴA~:4vJ1_iXnyL>CuU% g.CVr鸪N'v[pԢd SBsO6[(l|[bLOj881gAejK'98i㺊e'юto2_gkN9qSQ{#䪟n _v).YWQ 3UB %HJex[<Q\d#rUY\U9.&jo5 7'cr l["]fD,, @Vaq!ֹXc\wnWG B<> ˥af0t|z@7H߆Ǒ$˞Vm;vQ3}X+;)$Pz]+۫Ru^Irgg+g3LZU#Ҳ+'kUY՗q"/Vo<楰}t?."N["Qx/#lW.ag|cl%^wݳ˶݇*Xd/)-K_$rkNo/LLOg9Te\sY:x!Sk4|mi`ؠBipLi&@Zjny82ͼRbmOc0/x$ZF isk]ͬk]Elh ?bU4˻/lT穦4˴)$.FF^]:Vv6,|C3AJc=&4H2|=Jawd]ƫ@CXђDr:di# ~x,? Vx>=b4֜Kd4RUrܫ2wlj/ւEWڧySٝ >&Vmgê+Pc WZte|&2Mkr_us׺yLCZvE: j AsEvGM:ww+ ' |[պ@.@+'M`SY/=g &-mPޘ2)ːUbJ"bOd]߶LwU?,fqa8dTmhh8}K ޏP}J-YnwيKГR_#3Sw [@){qI5܇S7ws##'ˠlm/N[6޻R9+.^4kwfEDvLOq${MT?NLjF1YeUAP%'n[KF0nljT 5A3ˡ?0reycl!m8#YB%*o:RmAu\6JRفF~ً%QK8PYPJp WH@eh|xxs3T2~'Bԓ_\UV)wx!b|wh| W6^Aw1~!Ûe8AZ4j@I#UHbTR2[Dh "tUBǝQ(:壼2j7K ~yCygDQRC%Yd=q%/w58ri,:b}PFɶHf75jA qjCWiS/}C: Z$K48JK )-T1?n.~-l&Bk.-VW1:L|*IhF # ۶X|čWHHV\~s97lE31]kf$;aj"(#{jf4>KjME]-LN1cOбg֡", = nm:^xJ:v.&֛m˚Ze<-u0VF).YASulIRhxb9Ԍ0CђylDTgv švpvoVv;I_ULQAq6tW3|>ILWSY&uz!IB+*ҥ:Y$uM4tClL3vSل+2Ro"P$|ba2h\R=Kuy?~rKqHWx{b7l;~ڍRZnaazLFf1 i;ؔ©<: cy9^dwH9qtV O/uy\=K2䥩})u-h -@!?б *_: *%yM"Fll2IwJ8ʷ&:Rq՟2I¢= CitRϙ:(H7- `u#&#:M4)M@AbeUJwp9ݱi2. ҳ! w]:ff7x!,C׎g_q걲NK \f ׷x(^/ZHf˿r=t?1g`= ?&%n;CO?8-ܐ|#4mExk(h=^akKFc'٘Y"m#_'BAmr v9.:Fz[!a249-r\kh> x^ $+rQu, 4酕[n7t[ ;ФUزLY ;Mjph":iw0v[eѫ:h]4Q,E6aܖؽQoUMwLYV! V?5y9QL$qGl~>qEMRT~ɳ?ب \`GTM̲fX[y%Glz8gA[y O$2)h]2` ~ƀ/3KKe(CL쳏`ta]E+UT<oMP'dXx۝vqeO-Y4`%?^? >e$Smj` tUpQ!c8w0]d^0?͎1UTzf X$mD;XxF5 9$Tu4ܨEִX2E#I&B8/ӷ IE,J>j_0|gLL/ 7Fg?Iu W~\yсR@R[dC3NhE8gǢJ,L+GNb?ͨ/\bv 7~ z2˂:a|S6YhkLnD;>. h-;> !cXSoIÅ;5qS i6)sRFRme7m,7IQXYJ^:L™,;6bYm$OS0:xpL>㢥rO 8`&86V9USx)r?-v}w-O z]V72xSM[Xʳ S-jMc Q>'mqRXa>\-f@y#:z4dBxo b jpWn8G j $%^"dK=#|pajvkЭ4*D(|a_77&PnocOZb nn\JVST'R(M R !@s2൴RsVhsltOBUKeׁjϸ5a[~umEش:*dY+mq 4iws S~QB1.ɲL`E\ٳE^yU!D8(5,M}JN BB0e%ӂ)M5\{mN2uzhj:Yn@Jy7('AVrp- O49ŲCwjξ)m%yRj&>%cQ. MG4-+7&MYz;J-JY]جR@JY+u01 @k땑]2p_ &7a ]D0t+4E&ج2"^shF9uG4YGx#: Zo3TIP" aF*" H &*ĦA"Q #USat3ca$!A"O=,pFXEط.D]|!E'0?n֏פ \r[x0Kn8FBT °߮mz__PץzS+$fVBTewp_mA灁@E.b͒F\NQzxl; T]?<\q/oHBT {|* QquU]"zî9~7Pץn{8We+Ffv)i/T}qͺRƴơe0xVsv&[E)?96rRrH?Qi>d9P$T\;;Qdli\Y_L HLMH;;g8!;M 2/2/x`EHpd[ l&F3cxȕ2Eu*m{hbqWĝ'q-cܹeʓ ȘօߓLOn(¢n!}c+d\}GyXlGWMG;>x-R?>ͻ#=.\\.%wEF~G"-B"-BТoW}ooB}yn&OL8,G"-B"-BТo]5/xzQ:%{bj"&f,Y\b=Q6Kq OMT rOQY,)O.*YLT.rKlQ-)Od\.)!*%婤%8Ay,'jI9V8Le7e]&tw_Oz{|Irҍ9})j?!h+׼Ep#rh<|[k|h L _ g6Fza>1s\8/U)%T[3Yu/UK+KXLRo&j1)u2bRd:-J(YLnȩ։ZC!z=BC!z=BC!z=BC!z=BC!zzv~uwn~xm&@z\uV TgyJ!)Uɹ0T^JhBc]J$Ij/z bRdŤP tZ,&iQ:Sɭ9;z=BC!z=BC!z=BC!z=BC!z=BC?/KA,QQ:{ό1kRbS{m9ynmg-YLJ,@gp9,D!z=BC!z=BC!z=BC!z=BC!z= zvf:t@׫wnX|JkchFXu9.:ӴO%~R7oU He96'P?բ& 16] 3&J*P7+&ShAGG9'PĦZpw} Ljϸ5'P?) >g`ׂi+mqOo T`Zĥ1Nƙ.B TğiVqqJ֖)ibІ*P'p\Z{j%~(<6Ģ +(72POc~(+(%(WOe HUE.R X ̻$9~(@2hwɴFʮ k#\(چ=))ES%~(@TP (E)Q Tğa*N7y7O%~RHWAS3Ń ' ([-M%P? hbWЉ]A'ώ2YTPUAWcXAy2POnh|TX@JAގ&{? ܢy MT4@@J&'O> IY A8Q(.'Y? Mn)a$ >~(,7Ч::8(tbX)  T`걁%N RL2آt)LO%"U6 MeL&{AZ<J*KHm Knc; TOriY&aQ[M MV@nE9zv>_Ϟ oƘ4kwi9oh^֌R:xtӽ!ÕE!s&]K 7Q.[s4bpƺkh2 ַEawZx;T]XJ7XѤp_B6^ hN.9BqfΛ8B8kU|(2:&c[;YPꯡI(ЭBMpFv Э°3Ӧ֮ $ ;AiIݚz0JJMB l \HX_Ӫvat^%)so>;Ý5VkVA7c(*3I!G &XӤ܅^-[){VT+}JmUX s4)1tH| Mr W]L,ɅEt -ѤĐ2$CJ2lJD`z˗$`0,t}8OM 7)ʅ@{wyOt:L#<rej Mr .%kߒq @ݫYDGwDLc"(C͏>-K!$`~oh4}j^_z ه6߰{]|p1wo@{W^5: ^_sޝH`#^ N Smozp_!}ÝK8Jh0ؾn5w{C.}P?]]޾8޽ x y~5}n-JlV+fJ_x@9ǪoؾNXܻ޾! ߝiyq"ZW[|5fo7{ [p^{pVZ}'^Vz|`Qt}Í[ .}grɘ/|4Bn}oh~~wo^B9sogbg/z|`Lz|` n~uV޿Xkg7HHQȏ!0ϓԏu)K{la&޽uAVe:Vd>>pP%8߾Z8կ P_y=>Uoqo7} _޽{û) ע= KGTlb^o8|{>޾X_=*؜)Gu({Z+ԛs޽xI}upm?QUm,u ~ۗA8<_<޽[EپSvo7\/^?$DZ!篼"1l7^LBup5pFO i< UB^F$uY.7T|}Rjuܾn!u?voZ<^{-}G~5)+R|NUnLq_{c!W_cR˺zbc -kD,"KiK޾+Ht_ypۻ7eIC*(f氆3b ^ Śiۻ7* .٧R?!e~Qܻvox}-W%\o7\}aM׏/_nL6/tFN. Bem[jYJ.)&+|`z$pK;y>Fޚī\xO~o~/>~/, /|*խXLvdw83>uueE\&udjR(Wg:cQ`W%]}'&_oHIGGW׵ j1܋_&k i4EFH!ׯwMOd &slcql cnǏ_p3 $j[˯KpY~di9?>"$r7qf/:Bn.\j@7\_P*_dyH0.0(^pˍ S %s}ű,Ͼ̀K-Wjrpg+I_m# =&t90߻lqrMơ%'ui++~eȢYL?cq)GCr097pr=g8cK0ϳibjR,>Nu3,Ǿ:H尋&%֤}2V9&tKܡ]eQtՁ[km2w>dn;ş_l _|7Iѧ$ŷ](B"l݅">pGǎv5̽\DDlw:a ކ/< =OdʾVNWr%(_"I.\~EZrziT_^—u.m^抜*cKbo(8f^,۽\~1?r I^7i >_xa\cX&-'=2fx?|aUa@-nE#]f^:v~ddL_7ٜձӎƱ۲"M&)tB4N4+NJߎl"4| _/C!fC?Gj"Nd [bCiM D"CюbC!#lUT+GǾ{*YMg]\[O{YC|Cn"xDrwKǏGK"ƒ$u|f9wHg]H.ڋeǾUf|w^Oe6{~^wݼL˿/4]w16cv2l >e8AAMv"qt".6]ǘF6 |IF44i.F-5|ڏͦ~lU|w/ӧoǦ?ݼ̟˿/4e[l%Slb+b+sek2__IA|J!蟧}|J蟣*ӧW}t?yNmB&.Lbo'O_qS (Xѻx. Vc <` g!xb/ s/{9FPw}2VKicRn" 衶ujDf߹$#VDdj6 4H#$ˑ/*ǂ9!Qg%8}@i9JfUB2_YqE/$=E 4ձEkG9PA~a*P7gVīCh%|? cQҘ&i".u)H:c^j"qcF,%:%?_-1@"B $kNEyQF0P 1V"% L-h y,T2Dtt/:$pȕy$U+Vuy8v7zi^d<=;m$ sZC~UKս\񺄶`HI?:n@_׫b94֟ z(@tGL/Dy3 >QjNdژLd&d2&1lLCdشql6Mֱydcul6͇MֱɄ/ڄ/6lM"؄/M6|IRIRd$ś$&IIRl$ŇIl"EhE@P7P aEB6P[(rjrM/Vdc`L Ku69p @.LzEL aaEZ.cV|X!(gǞNJyzXu&ˤ bW@WG7 ͪqdxJq+##it7}A*vT5Z,}/i~RX>v遁2@y,Mfc2Ldk2ikcql>ul2Mwcֱ8j2*iRqwy9!K1@yJUNeQ4_=ϴORSڽ'.E_KѪ^`g.kغ/qLvӒ7%/%_4so}D"DD;?M[p=>$%XߵM^4%LrBp+ᢲfw_B6iw_G |YW˭d[\t_%͒C9_rȵmD 4kķV*ERDT-AК,' f\BMIC$b]^êUD+WaB0:>= *"%ag&?U/] FP؋@nM<(~@/i%Fmq?9Up(ixzKjZFQeC`25?m2ykƱccW;\1UƩXLRQY|*YHꢏ e5.D0Z"I,-ʼn*.x6^!' <tj.7n ĂR YwJJ(.SRzq8!r]jCѤYwM Krְe5].-$.)=Pnx`qaIilT吪S.R--K78WI9;aN{DYg$nuMMtZQ*J#Oζ W')r7ҪN-('.Ԛʡ_0L6ɴ5y|ױӎMƱy؛w}:| _$w}:IIRMR(w}"(E>_EȾG-` 'ӱ 4ܢ;U8F(5%O>Mx;r8HJowi e٘XtTt;-UL .Ԯs^F+GB6LU.Kh9_VF(ܴdpԞyj^_؅ͫgE ׇ8njQ(3kw׈mC\ʯ&,jYEtrC=ZGѯ=K^x寮5Oa{.RSK[T+Z\(IlK\+ DԭuZkt5=h1/p2"TWu_[R]EHDK˒o-]hOL( 3ppI1 eX#,`cFI(SAʆ5m*R?D 6oե:+ʤU l1G UcDz S&]&1&o:6}ڱ86m{nO/6ዷknO')2IIjE.OC6PwPd8.OΝ/sw bد .mb0|K2D%&D"C!͖bC]"nAd 2DV+Al KM",DÚ[" w I%Ad 2D"-4.k%?:(2Mǎ!+ Sz)]hDC^7Y(6ňNGr(AjrB|~2Y|ÕaQH75OYTI go{E.5kU2u_ӍeزXA2X$UlE_{LO58#X&4/Ԍ.*UO2U*o2齼#uFl{Gݿ?t7/@7/4ڕMbl41/ Dw I%A|p dnl E@v"1t=l.:" E64͆F d鰇mC#FH764ihN] ln?6&ۏMcV2}zwmtw/ӧ9u/o"6ߍ鈽kh|؛w2}:/_}]şF_2 "SleY_f[leSlb+bdk2]IdC]o}l 6DAd 2tݥ&ǖcC!Gۭ2]e*HUpNt玺7t2;=2LJRl-ӱ+oIKʹviJ׵Ne4cE: \Tr_\~z;&R(̋.ɰU}ZZ"Mz0hhZ79+HD[l4릿(<}8)|)t&?(ݠsӰvqU_nاjF`q"&H㓆SWyM2Vpt^0QGNGdCE:έSj(nl(7 ]28/LwMOdښqlifE_{ LE:iU adQ U{Gd $1?]G$%a6/xBćdqo#=Vt_qu zcZ'ω,g q!) H'=#q>z7-z4y'͂<\J:"!? D#;BK+X"E{JKglwcteGp:o, {UĬm "NxZ<lrŹFjr<,uɂy #uXr+!'hN-ֶtTZE)s 8XȲD[[[7ǔǕm 'wMxPP9`o3 ؚ]Q+*z:O׺lp8=}I|g/V8ղ_Ah86z8K_$33<ձEWE̒tgLGF,]>Ur91-L&c2d:4lLCddOcӡcul6ֱ͇"ޗbiR︒;I[TFeACuemrpuK= MR~Нhic|j 䖽u@hޗ%ν7/U4?-i& +XQB *4 `'7, `ڼ"'XWoXdT#ͶZ1V$Y N尵">\py;ɫ%_#":)K-Hc)դ^ q2լ-!8OrQBX(d_`f25?m2ikƱcc/tbx6I&)t"x6PB4!ExEvN4ܙ8w {O+vz0/Ȇ/2ņD$Ad :Al KM",Dj[" w I%AtX◚!.7 D" DbC%&fH]/מ`j׽܀.eF@ >Wê˺z iu^Zȩr=kNcTG-O}`kfE_@#d[CՋHf^zs9@Tcz̹V) *cK; \*UO2U/O2齼#u_.b݈͟;%b2鼼+м?E_t}׮ 6bl41A|DY" D 'Y"Mmdta.6]|=nǐ" E@]l44݆FHLC#pmhdwfC#نF2 tة:un?6fۏͦcV2zwm/|w/ӧ9u/o"6ߍ鈽kh|؛w2}:/_}]EF_2+2V[_eV2V:,-L&Mޕߙw>I%AtH%}|tY GtYotwӫ#u߭O{8n'}sGݿpnjDkL ة}hih"$ c:5Q ')Pė.<-n}u^]XĐ6EJوi'NJ 6tC3#V^y.1-s\3#6B~,jGS9\#>FU" DF5߭1;i>q_e&F2"1(ա#d}vgic2ɚɘd&1M7&شql2Mֱylcul6͇Mֱ/iHzǦl@#gf<&qa_Ŧ8f1#R$VEj%u+Xql^NNY"G >*0EuUI(PzLRWĩ:KP~qp]ܺNJ;<]}'g|W=)vr}C |$- tjXƢPwARJv閄N YJNzZj"nUpQpEΗJbTXz^{F,OStBKq~;.Sr]#B7 u\m*A!.u1K-UGQ^ouD)*IPbF2ŊGZGQkpvn,5( h͓ѹ66_r@!l2oL&c2Yic2٘Ld2&ӡbql86&شql6MƱ:6ǦC&loE6|&| _lE&|a"$)$)6IlM"$)IL$E6I""lY(B(B"d(BP,aE eQ%Uf!ޡL`QhP|Ċ_:o3ziHU)-$a- T68ޖrr'3j0TƉ)ٔ6YxpwV~AkPd DtľP!BE!5th2[٘̇&5cql:ul2͇Mֱ86:68,"Jyvh'<N=f5-&/ 4NpA_2")E@ 'o0SA|p"h8A]q>8k.Ç]=fH={8~C#vچF> ;{m6k[tڜLkN|?Niw kG ˻?2hve__b/aח鴤w%חwtAC"}|9OI]ެtRQ.ε56WiY=(tx+8ShL\kBte\f)U"')WdFNGĮT~(Ưh9rHߏ#o{R 680$Y'ˀjծ$Cu}r6s>7~ 9EyuK2z/p_{^ng,BT"LaVzN8Ҝ"+g=|DY6,4emF 44&G1 ZW:d>5td2&Cf|d:6Ǧc#xaR] *6odi!jnoڒ\Pz]6FfwQ>̼$_^gRÈ4hl!jOj>Z6GUBB@LRDy[c U-c{80O"Y+¦Cv@Xh@jJuvdk2}d2&Lc]ǦO;6c _E&|.|MR$߅"i(i=VЧ}E&|ib菣S ħ<6"9"V+A|Z`C?Gٚ"OkRd 6D"wD" D&<܇9DiN _2cւa芾԰$up[)PwxgDsf ;8ZZ_N5cr%/I+-{i]w| x6'KenwbQ=r]{9ԅ]^k\o΅(WzӨ}cD֖]WRJ WW2zɬ2V=f/Ӗ=#6:b.yw]şF_] 1Occ$C)Ɇ?Nv".6]'ti.1=dMC#s SLC#vih?xڏͦNc?׏wW>ʿe^>>lh<}uxy wחmLOl՗iˇD"O 6DtN>2tst]e*vpҧ{8 -Qů] ^[_Iݕ'?D ~Z缸/sKAF7įKJ9blj2+r"Q0c" qiɋZQ˵pĈJF wIp/J:X?{$ws(`>J4Ywmj) \BYo!,ᔡ(9)E*8SD4gX35na]u.ί|"@@ٕ_ 4Iz@MA{tmg Z@RuUa!if25>m2ygαccα/ďlrB<3X$cm|Z~sKWDT?U.qLA\ 9RrQ#:]hG-!?>H Խ:1h`!6%>%5N~h." >d1G:r~_%"]z%mIONEr^M L Pz!Ԥ"fv;E aqp_1Z!_3gCrPXu 8YqqMM2\kZ6/u q2b^SZw/y" ET$-,{"pT[p: 8I%oz^ƹ/Kf /@&X׏XoRR=nI~@_ThDCr+w pIroeiq zx̢䣢/x6 <Qh* yT= < @c89D}^y(YnxX2(JxlnAE R%Tv}I%ZwE nXZQBW/dC0ٹtdlLǦ͟vl6M[ބ/L/&)IM]A EP H$^M% qh]{;>@Uc֣{žG4q0p"6'2M-Z΃xpc:Pv7OfD~ʀ^Yni'DΝp}|BnDCGB h~}8lGn@! _$C~-,#r+j#k> a̠mpf(^W?qȱt{ .W$"i)!5u(bYpȐǮkf(UWf)gw=} tf׵zqi%$bU)Vq%}d2d6&]٘;Ocөcqld]2E 0iGP+N#|]wEyq/@LNj1!>J/}޽x% LRWQ߀gJкB!Guad _|7|ѧEKRt7IoG_|oG_|poG_tX>VveŧM?yl2Dl [ Ci dkRd :I!#Ad Al 6D "L-a:5YHd#7j,>!ߺ wMk[K ;~\hCJx*J_ƣue^>#6}:b.yw]şF_] 1Occ$C)Ɇ?Ov".6]'ti.1=d鴇MC#s SLC#vih?x؏MOc?׏MwW?ʿe^>>lh<}uxyWp>~{}[[ʦJ\}̟6|J!bC?OcC?GUOon'۹\0TFRRU";V,uI ))]M4ZS1[[z_gvY_{cϝDr…m·I48wd&k1ex^βUKps$JLCmV*+YшD8$-5- S3T,鋦Ux^->y{<ؔLpd!}@zoQS|<c+6ɼ1dMlLfc2YɘL&ӋƱydcƱ86&dc_QPDp"5.G{ZZ]WYIҋhd:K `aW>FB2 Q%,D2 z_=?Z ^ۥXS@^!#+J݉P/X!L[QIn|d͂Zub("uI[VFwبR* 07+nu-H;uYN仰J!IU!0]vqP c&d6&56&1dM&c2L/&cqlM&dcql:tl&|&| _lmE&| _d/z _&I&IIRlo$E&IMRl&)~IR"lo("lBPJZ*Ј+R'Qm\"Vt+XbŒ[:×[ EnNp9e i*8^ Q 4T?4Ԋ,Bi>-5wߔʇ`KEQkR4ylEjz!(Dt\CQԉ݁c/= ^SjO8ZR5KY(LxMX$?=C<9%GXP汪;l5bSA C\JL]xw#i}PK  xPb8'(-?!~%mU8 /&zaGki|٣t}&1NM&c2Ld2&ӡbql6MMƱб:6ǦC&JyxRovպ{!,80o>xp%Z8$䱛-*(YR.Q),*npJ}8ȅS{?!0a"YR"~(LM: О`SjuKIeB(Uד>֖ܿm4'a a&vFz. R%Q!=q ԙR|`n/9UAX찷{k r ݚFhssF \}|66&1ɼ1lLfk2dzcMfd7MƱ86[f|lLM"Ȇ/ބ/6Mb؄/> _l}$E&I}$&I?,!Eh,aEC_|j2m俏Աis9G_t,׆SA|c}"Oj'&e >I}" DDbCџ'N& ^' aWtĶzG\C&i0.\av"X(=$hϰ W @6AkdcF6֜]'F&zE$/;iO3"re&#)iٹW*fɬ2U*Ye6Lvɬ22Ufy.m%e:l򮋀N{Du@C+.:-}p`C)c8E!D24Nim.7Nc贋acv |i鰇74imhN74n1~lӶUެmcis2o9co贡6{6}tHkh}2hve__b/aח鴤w%?R_)GDtݥSR6#u>G=mz8wZ7U@ʳ\DΚn$3ZJ!Ք{Gx<ܮ.(Ӫ-38{$/\[Q( Ri/9ajtpXT .Kh2zN⽠G@'+"6.m*ס#YwU^ii\B\O1x A{!I5ٛYKMy.Xb*vhI ')E k,9' =htDTjE;$e7MCLB(N)f|a {i٘L[7w?d 0c@eX߇c8w7ONΥUWHxAkuTQ!8|5KPh%CܗR{7q R{r#rY >{$(`y?OQE(k*^UGs*#ĥ#"K\pJݷ0[oW)+SdY|m*Ƣ&_$E ͠G^܆gr$EI~5ae$la1ډb3{V@<@|-%JOB%"tl`TsX Ex &l% &VSv 7M˱p%^gJx,M)AƱ"^ۤ +]5)$y^];"4%BN$ŌG(u+ua5?`JyXZʠij8#3C!-5#WZ84ܺNsMJ]ouQi;!<-۪3"BPH8ѻ]xN$I-4jY(!8;!G &URdY5iɘ[7w?d _|7|ѧIR|7IѧoG_toG_tpoG_|XA>VveEM?Nyl2Dl [`Ci dkRl :I!#Al Ad 2Dy"o"S Ҝh*Ѫq"%pя] Ozq@wK} BJJrg'mDp~&wut5M> *F?#v薋 ڕ(Ҹ.Wkr6 Jq`9C\x^1T6prJ 0wò_eU&ʴ]CRx/2̻|JGlt]|7/ӧo">Nc͟!IS :" E@]l7Nv".6]cN{844i'Fm.F:%M?6c2z{?6|ޏ}x봡8/ӧqwi}o/b+b+[[韫/]&J}"C)Ć#C)dž̟^NNt1'o.m8 Q1M`pXK=Iv~qr:2-P w{JZtQ!| c7?@)!XEN-RW)׀ $ KF8ZIxs=طAIߘݚ-'K\%u<#||*'al[A{hrhh}D +GC"'>`B:9Fy@&u`w<f?d4>YNV5VW'_s/p:,v>#IaIk]:n|ddL;滎͟vl6;Ǿx|an[SSOym[ǵVd0eK"2<+ $T|"lNR崎;d<#R>SñeL&Ն6N---q\RqW%wU.^[{XɇU!>ENZGaY/ ޼_Չ"z8`Eh@ ?mpPQ<eXQ4%CkZ6 >W)$vOKHΒ5, p]kBߴF}}c~⾀-ZH}r_jYD𷾫J7"MB{f4Y(,EQ~aKjKUW._"IJE 55.er$=IHC$^V@MR q詏UƎ7ʥJ=]'A~i}[kVQJ!i2bbʊ`!ZR^:ɘd>5th2YɘL&5cql:ul6ֱ͇86:686hwo CiVE?wEWYvKIK֢f{J9 2PkiC.NiFzZEsr%pxܦx Usu)nV+4]LѪx&;!uPEp"Qe0I\ar }XAֽ,` \r|ddL3滎Mvl2;ޅ/L]%)IM]A EP -N 8Ӏsg++?}9˱Mo/LEoD%&D"C!MbC]"oAd 2DV+Za KM"-ĆÚԤ Dw I%Al 6D",$'r]CdǯX]nmΆPh")~)˽%ݻMfyE";j.6cY6qfċcNSă` 'I5,,rJ]LŲF]\y%!qjaǢ RqvYV(̹hxuMٖdu2{ "xrl*ӧW*v7{e^ޑ{ynĦOGuwyet^h^}]EF_2+`l{p`l2D%&ĖbC!/D"|qm.>"7?tCLvnC#lh$H{844݆FȶMC#vNn?6fۏͦcV2}zwm/tw/ӧ9e/"6ݍ鈽kh7}_?t7/򮡑t}]şF_2;C֗f}mMd;iw%A|tY" DDY" w>I}tHvLwW>;Ru7=|?ù_z8nd6&׼ 2B85}|O[ʊ4=81ú 4-Sh1!/LRd(B(B""l("|E iUeZ 0Uk8Z}[a#}yj?jVQt4ÉКV&3XU@h };w)6JoD(A;qH@D2]y?yY|{k!x^􆤰${@]eX,"eK,)-2"9dDM+/ú"qC=PA*@ K3 F\=/W✕iAT5i uDԬ'#eʻ؊95%LT|:Wq+!ͼ+CR$3yKIͳ|ND<בlLSɘwM&c2L>ul6ͧMƱcql9Q4Wu^ UZlE@?N8MZԚ%KQ LC'Wz]ǴA"|FBP$B*ʋGr#k=C6tszxrb8Z/C,p/[؊4WS[֛Fh| MȂd%eeU3K,Jkjqzk2jBae*zͪ+"WAt`AR!o}$F/¶kP}UفE{tՓr:<¼zdxk5mF$A}pJ'OC+ڊR/}\ c2mLfc2Yyc2٘d6&6MƱ:6ocqlƱб:6EE&| _ _d6| _|Ȇ/2I/&)6I$)E.,!E 94y&:6y8_L>u-رwNJ> _[E7q"xNy-7c D_౏["nA 2Dm5-7"w5)2D%&ĖbC!Al Du@4/:>2%aP+YgA~i#՟Α|Z/]zG"&ec<^ºgho^A3E]T>B/.*͑1N h)t"-kg\tlV7fɮ2mV*YeLfpٮ)f/)Kf/]Rw_HS~E@7]7@"]]^~-]t C_/eSsKMa D1I-yEm]lwwlcf{q.vpnfCq'FpvnfCq.Fvc]?incVm9yۏ7w{9qE7wvC㶻ov742Gem}o֗p;Z;,n||\leSl]/qI}gKI}t;&A#>6tSRwKMݭ+{Ho>ISN~Y|o"H_ݫS,~O>OW׭.x'[KL*W`('(dӱLm #_Yt(U(Ket'Qy{:HH!5NY\ZYf 2σ%&@B,N*c'M uy3/܍]:"d?sJơC?os#wCC'3#A8[9`aOc#rgb4'_rMYK)w=L.tCM&M&c2L96ulcql954~ѥE>/ 怒|!Oj2XRS.nL0I!54Iyb:>^fcU<p8lQŬo)!ժBv.PTG$H$=tGQ#ve\ߚW @X\*'p<J 9zly ȡydXrA rːG^ɥ.&:HalH|yōƙ:#I)5AD*eUYzj=IT )FBk:Lp}`ov-e'95ݻ]TI E2=/ϑX^(b= ^%+WgY Q Cn:<p±7UùPR֢"MOj2ܻ!?!ڈ,Cq4a+ZK$tQh"܄,1CKNϖDƐҹ>E~V"EE4=N"hrԤF$NpW)N\O1o8i!90w{[3@욧s|dk2}d2&c]ǦO;6Ǧc _E&|.|MR$E&IO݅"i(BpV{^e8EoQ/g"i "0Se, 9NB/ \q,cQӃsHs+D;f{ ̯^ti*d'C1M!i^LE[1b8HvY2&u#"4Q3["=w't\˰nHǕܬx4]ETgsrzryej<5"3ǖ |+7zebU_Hou͐4mHڙũ.)9"` iiErh=Tq5OA+#캗Cod/5e|EYߊB&]&1&o:6ڱ86m{nO/2ዷknO')6IIjE.OC2PvPd8.OΝ+?}9„/&b؄/> _l"A|bK!7<D%&ĖbCa-DD$Al >IKMA|DY" D"C!7D|](kc0C*>3dIGխ(BZ,4+Xf?A|؀FplskEiO28 qԏ%ĵƧ%jx|/d_ | *_W (_[eU&ʴ[^{>w.!unOGuwyet^h埢/kW{E_Mw16cWm KM"-ĆCAO]|qn6N" E@]dtCLvЛ.nC#lh$H{844݆FȶMC#vNn?6fۏͦcV2zwmm{e^5']>w {n^O]CK^ޡ/kW{A_dt7ll|Xl%[lݙLwMO+̆tݤAl :$2tߥ&G#C!Gۭ2]e*HݗUpNt玺ܳ2Kwqud>"2$U "4$S/ 1[zX,>{[u= ¸yIp5g ssu ^h Z^ X&e7jMtN!@ѻ5ġ,} S6SasvrazO׶.k/5XIdC<505bW47ހY>CEd2mLfc2[yc2ɘd6&bql86fؼql6Ʊ:6C&ؗSYdM8m46P{Y]ç;4U7G#gtQ*%PvqsVR/l'ql[e X VL> YtwBmt8qǪIgN:DFj=!dD Y^Aƹh.7Y{ӻl⚼+EmV9 hJ*oA8.F"I5 R_PLr _8Q]nr_xI+KNVj{).NSѡ~ xHAY0g9,JCY$J~OVD1 D$׀.EE_~{Q*9&ȗJiB]n#uT%6Y}hLy/,Aa2y`%%hWH$ד`mJ=b>0/Db`?t< Bꃸ$cqy4_*'h97|j2dLɇƱԱ86ul2[ǖ` nbldUI^h $J-"]V*>^N*9x !ɒ!) # 2|! Ϻek(aSrR&ye.Bڪb*:Һ[p.J!ͯAH2:%L jGU!'A~m`f-H(I5őcOz<2&66bӕH-5ИLɘLdޘd6&5|h2Y86ocul86fdcӡcӋcśE&| _ _lE6| _tȆ/6I/&)2I$]E7Y(B!! ENMޢ/MW{&:vݱձ}MuȄ/چC{KM"&C>Vl IW+AV֤D$kRd դAtD[" ĆbC! $K]4Zb3$uҐK2X;uY&Lc(-ssOed)d^]\>#jt1dΏ#e8kr IR QL0}^R$SsE]U=+bV7Lfٮ2oV*YeLfpٮ)f/)Kf/]Rw_HS~E@7]7@"]]^~)М]t C_Rt"8f8w6ù%&tp!xpvl'fq.]sE@v]=ۆFxIv=ۆFxܩKvli׏}ڶmU~m[=lNc~^~mN>lh};]ľи} xX֗f} C_/eb붾7V6V[K2ݬ/w&&wL!xG}l>}t1[WR}|;w=/Խ\B)1h0Dd4H iUb=9> Ip' n[R(tNlWy{cN] 1[xD~v%&r4xLO&RYyN+'~ [^n#MYJΤ>S8ETˬ+E0yxe)inbQ5t-]i{zFulCyz^9(FM:RO]K  V)K~ ˤq]58$'7g ^^`T~*G]eDL&ӧMfc2L96ulcql9VY&싍r1j}Y4D[ϴu{w"z8|հS}~2 h +Nra)P4,eܪSyW#. a0#I!lSAC*Ja(.J'q(zGGD6Emry=pt9Nj#sOyY]5=IG"pUck?J)5c+ 6E_;/| Ojg䱢(_XPTd5U# Dj $ݫQs>EN=q'娧$=TЗ{+!)'{8؊혚} "E2eDi)15[y>Y#z^hK.jN@Wϥ8%])TEk=3с]B".PǠ43?11kg̦wC!E\F 7<9-f VT`EMz"mUtʶ,qyRCc/-Zm/hQ OJ\im8@utdlLǦ͟vl6M[ބ/L]%)IM]A EP -FBc^/"wkeyyWy;w}}p SMw16cN~C@]"nAd 2D26N ]lm.7cv".]dnC#lhdȦ{8饇44݆FHLC#vKCǦ|m?6~l>&ۏ[eU޵՟e{yלwFlt54?t7/%/E_i+2V[_eV2V:,-L&Mޕߙw>I%AtH d>KM,GC-ݷ[eUޑ/=uHN*J;$*yS5ueҧ?-,Ox"=+ds*%cj/=Kzk `_7l )Xui #@u eHԩM.H,HOʛנ%&V,cH֨7˘e^DufnKN$ֺ[[K KSVcUns]8ߺ\y)'w`XLkke/ܙBĴVYUPlj]n XdNw`!Ƙ]2Xv["6S`25?m2ikƱccαeQgr\h5TNx$Wľ5B,2$q.%>]bj .13Ґbe~{S&))b#"(t5P$o,TӒ:~^Mf:ģqOr4W!DZFFKP"!EWDv!xI4u='uQ܄"eبԅxoU_Yѓvk]P!fpʹ)UU܂d2_ %C/9'(ƒl 6E>2=p&K;|1{yZO]{ؓeX nl8&S)S\* t2rdH6[ zG4ޘcql:ul6Mֱ86:686r`Y],H=g#I:Ism5zEt6j㗂Mmj<1ZYvKCQL6D2C qcUjZuK!"-9k Xrս,iBv~'s͗WѶ5r{ε).Jy4 $_bi}|_€YڲvM ~RykXzغHZ)TM( * ɚi:62.'-~y &]*iѤӔfXBjEcx8@N?Kk[t ?<%[CIM&M&c2L96ulcql9.|E_d.I$şNRl](Ÿ"lp]I;?=Vc}XscEwD_lŇ_—!.7 D"ylD"A|bK!Z"C]"nAl 6D֤Ad KM"-ĆbC!Adk/k/D*KWTGr u~81GõRlkZ2N"sJEKi]'t-uy"ޯrHw2= odW͋J=Y%br5u^Dcl ku1,ͶWj`lgFD큳!9Ġsl4YHo `~˱twӫfiʻLw2}z/Hw{FltQo#2鼼+м?E_t}׮ 6bl41AtD[" ć '06N ]lm.C7cv".~"0 |n64mh$H=d44݆FHLC#vKCtl?6~l:fۏ[eU޵]e{yלwFlt54D]^y?w OE_i+ћ2V[_eV2V:,Kuc25?mj!.G7>D" ~! Gw>I}|HvLwW?;Rew=t>ù_z8,pk.}:ot(z0&jT@ 0͂zEI"K4s&١m!TtoF;@c8v!Dq5*xPf6?)Z_ro3kwF6X98ɕXu r 6;1D'8'd*q&0Q2:ԩ$R*&SIK ñD;e@KcXͷ16&1ɼ1lLfk2d&ql86fشql6MƱ:6ǦCǦWU TxXBv"'z(5JP|^2=N)'"ѵ nT׸d/bӠ4i.s%E8WTZ0WYf]rR*85^ l$tTRXҶIЩ?3JU ".>p@c-Ird+הmcDR,{!?(ԥ^9yb)UR-EhIYm {nTzZfQwOyk^-\W@wI=yc2ɚL٘Ld&1McƱ86YǦcql6Mֱ86:6Yfx؄/6LbȆ/2/h$)I6ILb&)6IIR?@@6P- !E@P C(,19W5T}_ig28.;afkx9=i OS!%5Qʺ丼Ħb Ƞ8Y%%GC"0gȺU:X#u>Pt!g,UU{Gb%d6&dL&1&:6ǦS&|ױ86r|}ˠ*oXPQ?}e?%,Qʗ,f)/{9ˈ)b\}\Z?E_q:6u՛˥ڮӚ}iX$ylP8*uZZͫJ?>$4;ծ\nWd6 ccGho U*\hQ?No=HU.RͪCu_4=Vl IW+AV֤D$kRl ֤ w I5"C!AlUl ZMU\Jڶ%ѱԪ-Fbk4ָ&mx5pg.:Ql؊'.̴!"*Z釄gܼj"fȜ9{ESԭ'ݔ>L^`zEޯ2U&ʼYe2fٮ2UUU>$ue:%ueK+{Hof1uدafE@7 4LoQnE@7p;R;e8ݤƾpn I3d 2] 8qE@w=nw"ma綡n64pihmao64wih]~?6~lcnf?qn_VO|9y_O}_|븡qo74nfwqC./44eY_>.kغ/qMvӒL7%ɯ%C"hKMbC}NI-G7cRw/)u&wLz8_Hq'Ϲ~ؐ_c_c 5c^xtHG!Z&S q<XUKF^@cg5kWphEdiqϑWhvSI3Y.:v.z ~#S]C}hrE%ph3 0Vehr.󌽮A㈕B-VDcYhKUz`uȽO0ic2ɚ٘d&1Mfk2cqlfdcql:tlzAN69T=/W2\8zFx=fDpN{pJ Ν42Dn!XuE?% DK^(=W5d&*#*,?e8X,'"mѼ\֪Q'EDOǕS\ZUwfGڪ[ ;GUN2P`OJOe8GdޘLd&d6&1dLC?86ocul86fdcӡcul67L"h؄/6l"0| _lo$E6I&IIRd$E&Ia$em("d[(!("O)x q'Ze娖jCϽ\Up;ܭKԞN8_HB2&%}݄P]pq 8nHjCT+HI@gѝnZp/䕝ݚ*TzFQKkdLQ:uD2ud_t{D a /?oDⱊbb; A}pN N ֦L)Whe#m\Tt LYK )W}q[}LAI&iL&c2d>4lLCddNccul6͇Mֱ/-S{ۼڋwrV8NQFHVYrnzDKY tk1j /[FRMnuU _Sq@`SS]\RbOhu=[ (͹>K"/YNBX0hix6NYFIU%. Ij9Bxmk*2Tz}qc!C~D'* !<'.,F}> U-=4_$JZ%5t5/eIyc2ɚ٘d&1McƱ86[Ǧcql6Mֱ86:6Yfx؄/6L"Ȇ/2C_6IIRC_6IIRϡ/ E@ޡ/ E@3/>ul+v/0|}} :-D<'Za >V}"OkRÚ'Ad Al 6Dq" r >4 *Z0mrq4)55 ڳ?26y92mX.aIZ"X-w8A]i!-2k00$1 n7{8) ?UЏ[;z~{'Fy MǨS^*f٬2U*Ye6Lvɬ22Ufy.m%e:iR;wi7yyW]tZ ڕ>E 1")ħ %<k.8]oصim.?ihNȇ=O;umC#v~qc\?6fwmNiwɟ}iC#m"}m贡6yy]}OpA_2߯/i֗|ZRɻ;N K!>KG.mVyG}O{p}[Rlre^$ <ؾ4cg똅9$}D{w^ 8_%I98O.¹DzD_=u>OO_YxR=zy9-EHʬOP2#RK ]~l! ױˤyA IO?"Πr Mbba%U+bjRpT@Ry9µWU.uQ7\ކ{o2ɚL٘d&1Mw dcƱ86&dcQ1viQ)TZREð.Qѕ"}Wv9!;>7W뺸{]WI>OL*!|娖7Zb{LQ>/*w nOyFkK&]֤R.@ "Q[1Ih%Jq nu͠kķX͢98xydv1JܣL^z7ý*Uxm{t9zTRJ%`[cRV[q4LA 2{N ;ʀ5Ӝ {OhT㴋5 pSE|H&K mI1G9.a(']D,VjTˀ"lVMw_jxx,?Qc42Tv sUp`URIj*x@j{n>4VYcW$KmP42&d2&57&1lMfc2/&ǦcqlMfdcql>tl~q<_dEE&| _dE^jIRl$E$E&IIRd$EI$I"d[((B"l(‡P,YWQDw8^QyP&G}0 v>AےI)}ݣmDE=Õy{sm~M'qT WDS3 lgC \g8ZZAݻnu:*Ci V'o!|{E4lccql>tlMƱбű *"€Jpl\K_*?6A XՖmu8Շ5(攲FxTs.i SYhtDƉ%t @Gu_ uisPҹ7]KCI!Gn)RSBihIf<7MYETSk%^Y^BvEJUW݉_ ֟c+"<<{AȾvE RN7y <Px 0)CIT xLF$ dCo(Ʒ^m"u3lL&k2mLfc2ɚLd:4ߙؼql6ֱidcul2M/mm6|&| _d&|aA_6IIRC_6IIRϡ/ E@ޡ/ E@3/:ul+v%y#ǶDjŋFaAtZD֤>ĆbCю"C!AzusOǾT!? 5sIN)%ۻM×Э\.Ń"M?h5\ 0-2[~}OK1yWR#}|JYO]>>%uy;R}tJӦsG/OF,6:u+\DpkQ ~{9/!eFuyUsX>Et)|#º两—v4 8L˂F&ÉX(lYP.Mq`V#3$Joʚ-/@ {nmE$vy  MEGx2hѷ%+И2ܕ$t*|{|u UJʵLI pt/{ y RޕI,T<uiQs+/9 b8&i撜 =,SiɘL;wMw>lw}{G<15$ jh:X\j(7D)"`.I1BEEx8 8I kx(T-j ڕ2鷆E„K`6N\ՙ4|\pv9wvR}:"Xoy@;J[nd D^4f*;>Tp\T-9TD["C@FUJ7g_ӊq2V9 &lQΈ؀x?@ hj3vHT451pk !6HǮm\@r#꥟b;rd=p}?Qm¤f25?m2igαcӧcֱ7/t"xvI&)t"h6PB4!EhE.q[z6qMa#u;b슷9k_x^T&㄀ #'MF0 ɢۇh0gsk&a*>O!Z_U mV'GhsDSlj0K"4&ET&>b}NRq[;xCڛu !zMRKɫ&Fsm2 &Խifؼs]>Ȅ/ޅ]I>~;P? E~;? 8; ⷣ/Ȅ/> _lyuc!&C?Gj"Od ["CiM DĆ"Cю"C!oA?wFӧ0s$-[O6BZ&;d~rcG<љV߀N</7f[h9YB^

#6}:b.yw]EF_Eppcl4>NN2D2l Di.:"`EqⴋLv"?sɦN{844?h;u44i.F GlM?6stwӫ^O_>jh<}uxy wחmLOl՗i˧D"O 6DtN>2tst]e*vpҧ{8k\.nlr<4v_ih aT"GK&RebW*+I]}565ҀcNanxFNo sKzNp$iK~fe%nh|dk2}d2&c]O;6ǦcK8B)5N+y1$/EG"MDPR!m')@;(Xj[T,.ۤ]%6N')98NVxu/ Xd/XR"c%U?,ɱBA_,j, EDGF14Yή=Ee@EIulAV&[RqP`}W,>N"b޹8i٘wMOLdښqli&شs]>؄/څ]I?$)B)P> E@B`l=j1~/i ٵ`la4=^ "y9`͚,=R\;AZP`au.*!Lu *,)W-_[MsgwHʩVu$$)M誊SO t҇ߐ+g&Z7S+7qn+aEp]`]^Tz[FzA-iҒ^7Ix|[kD޻=iUuQy%+GdI Y,{%q$UKrHQ=F9N˿f2d6&]ɘL[cөcqldv-fJ ֻv #R ,R>C\\3v/_`}ӈe¬/W]#@#eԏ1NJm8 Y <q Is~l3@W8s|ZHxF^=Kc+S}她U滫L^e6LU>%u2}z/˴˧qĦOGE@w2:/.븋" E@=洇MC#pihvihN]6 Oci?6~l*WcݽLا ?N2:/w}-)iM25?mq}bC)ĆcC)G̟^NNt1IU(y>oK*roTZu\3bO~Jcy)I"jIRBɂ-!JA:?j엔(bNxHo2ݗyě"E߫"4[.wpsۤ:nPG]F*a Ŷ-}N94zӼOr.> h~Q(iV잆?٘LdژLd6&5th2Y86mcul86&lcchţa:ջEoii4פJMFI%5|].G^|i5%BKJd}c \W➆ q?ct>g=<~axeHcx+ڢt(9Ft[rP-,yGK`1'ίcp 6Oű&6)G8Z# pCIKA ӓuғT{*,ՉH0\)ӷP+OE9d yrOx*YIT׬2q 1_' HGn/ ƐٗhF2&HmSNmiOB0V|=ItNvG~9)֤(t.$TZ*HpZ _O`+yK5kDx*m|quOʒ͈M[J Q)/}LdL&k2oL&c2ٚd>4ߘcƱ86[cql2ֱ86:6[&hȄ/7M"؆/6/x$)I6IMb&)2I$)ExE@P6P aEB2P@N)MՄ-L(Ql^9b/8 } 㸙D]G]I(; .A~Z'254';iQ9W5KHmm{#,RDuE"IWXޕ+ظƈDһkE k*uZK8 ^SioqԍI *Kpu4iN&*RP)m?]Z7FpaUF౥~ZuTG{aQuYBD^|qr^xKyAɴxlAgb\id6&dLCɚLd:4^L6ƱԱ86:6Y&tαU֎ Ѻ>s.*@Rh'e<3zWɨIq*|\m(_h iq43!D]qM"_WI]@s/H ΢e8A4V"+H ZשNxA,Zů;_@^n?٘LdژLd6&5th2l7Ʊ:6mcqlMƱб:6ś&| _ _dE6| _t%|mЗMRdЗMRlsB2PwB6P9E&pLN6NJc}Eˢ/> _}SA|c}"Oj'&e :I}" DDbC Rj[떺4ZԦra2JwMcEDhT&4v!L\#&KG)IJc7?+N~~%VG'[ .r bH%ſW$}['.H2ʼYe6vilV*]e2Lve-K#ue2{2?"S7{G.>-&/ 4NpA_2"PtpcS;"ONK!Mv :"|Į=Ol{ v64imhοH;u@C~l:m[*V~?66'f/?ߏӆFD]CtiC#otm|Z ڕ~}OLֿ__Ӓ:mLޕ?__}tJYO]>:%ui;R}tJӦsGO.#UW]:ZG(C޿jd 1QDy}<O+]z$]Yo*k×/fYՋ穏Q)Mjoqu/\<`= n RRSr2Q ajh\cX gy 2{"t,^!s8^jc"j:`_g^ I޷eSɸx?=A˗&Kr sJK8=58b]M";S4g 0!4VNkFbIEZtdlLǦ͟vl2M;]n $pi߹jFv"6=Y,*FDG%x!e=VT/ByYddDQ=E5K]TA xE  d,sZY"xB%"<9w~MOK}' ` $"JCLQdwnQp!>l,1seu;Na 8]\Z:M'DKR^uk\Yn`ޯgX.ƹ]S `핻0]B&IN*rXˤsS~S54=NTkiJes @{=,RJ5Qt*jmr)Ae65eKS͹ԛ2$#RY&Kqb09H(8Uh2~~lѣ$S~A4A+:=V:vMw)?=Oq\zSge>3&𢺚b:mp.j*oK;sp-xe&~x쟙LwMOdޚqlifؼuM>؄/چMI>$)& P> E@aha-f‰ik "I(U}"$:K/ODgr_~Wg@|q:BiZ?&8V݃hҝC Rk|2(0,! uFD|<&mpX\$$)ƖYD8(~$kW=\ļܢKZKE_ZЦ#cң3bR{ܠٙwMOdޚqlifؼuM>؄/BiI>~;P> E~;⻀> 8; ⷣ/؄/> _dquc!&C?Gj"Ol [bCiM DbC"C!A.'eU篹:GEr<_'NĠ Gnj*K=n:~Y p7[S+Bk Bt "uZƢ¦4L*XQvۧZeS ik[9 Ѳ[mu@U>}u dY]5'8gD<9 wW>lVw|Je^fiMؿet^]|}ѧq)yW(# ħ '"8tE@OtПo8" E@]lǜpihN6 54N]6 tک˦xCi?6~l:fӏ\?6]e*~l{8b#yaCq^O21O^_V6V:-)?W_&ӧM>/Ad :%A}d>>}}twӫ>I<}laxU'R{`;In2T[ېEMՅJW_`,qwe]k؝u".xA \})FRqNP<6 . U]`p1"Ai}i:F1ΫUHHK5-)`VSR~ӈQ#8TQ"q;"G2/6s"$cTK銩ze_ӈLdLfk2oLfc2ٚd>4_L6M&l6Ʊ86[f|Y'9K-$<`Tp弌EQ>̄<ݒ BTؚˬ֫tM>V()84/;VRo2{f}p.s02.f E88$7\HyC5%s/)ʢbld(9@i00 +u/ӯz2RX^2 MVåC4jL{.ƍ4z2\=$ d%u2>"5d@Bv"Z4CdWB|<~2[7lscY(>)>V4E5K~ ,q][ZNF:ܗ憐(q;$ w9j' p(QhJt2T(l"!_jTEOcSEߧ5kXBhS58`:\=Z uuL4jȳe}Ň(A q5 _6|=%)$)6ImMb$)IM$E6I""dY(("l(‡P@F!d7AⰍU4z|X{cʯ=gXW03|4Q~mqnjI$%,#7aJJN!#]rx@ޭhFٔǶ@/;i;qiF >&{kGl;?kN9cZJʮʐnqO [ ?5^4+s\$в=17Qa^5:C"4"gqaKBl/Ajb =EE'eA˂eg>t8r(ܖsɧ&1M&k2d~cƱԱ86:6Y&td[J2B\勺 *C\}&E~h*0ٹ@cA ﮴JᮖH8&]8`Oҳ78]*K0 28,ϗ ڪ4=!Wĸv`OZ2/j=bq})0I hi:ѥ`)w'ܸrr%GAK蟧oCvD,Ug0J[9p CS7ħ KaA|ZD֤>ĆbC"C!AhA*_'H ZF[F ۲ueO+1~c'N˅jJ bRERzmEe^^x_ //:V1g~ }زCa,JcI||IJ6'kE{/01PB1G,n?$>}mhTKXisdN)ٜ2Sf{lNONe-˛ue6w2 O{DtY|:M^ h>Opvc?"@tp!v@"CA,qY'N1t":dz̆HNKhC'4)S鐩yB/lQ|9>6Vys;c)96wyGN<{SB#m"y׎GF|Opvc?_a/ϗtNw#?2_)ǧ@p?SP7u>G=o8;p q0#9|./)yAڽn>_w;٥By;=PTsHY_zgev/Y/>ˑdnuM-,- hn+.6i?_՗[ LQJĮr K&m* P9;$uguR<gXF7ݴ,ōzKn%[rL+k.W˔6/n p޵AY"{R.5h-K_PK z/t]]I L&ӧMfc2L96?ulcql9&\'Z5% ķ(Z~y]y$o˭%ŵ> Up6تZ~Dޥ׀3.C&A>u.:%)eժBEgv )3/@jNyWte[ jn/Y$).xF\Ӌxy>Q q6eϢNy&IeҐHWkVڗ@ɼ \N;>+eMY^뛭U^tZDMе:ǘ=BU$ Eg儒se.39N8U$eU% eEIgRWQ,^> ,!F q;TץUUDN*bDÇqޢDwOgѰ{؈Rݨ]ݞJ(47z_'R a5I3@ SQ"ӏ8;x6!Bt4{cP4 }a23K x"嬠.M:,:LD~o*;~5E,Զr-۵(ϡCLJ|6MXW&S&1w&:6}ڱ86{iO/6ዶkiO')6IvIjWR>])ExW\C ΈpT͢]ia,W)(5t모r W+ ;H7EUp),լ4Kը4Uʻ?N)uy38]"[IQ߭X?*l` |;3^1xMFL" ÉG _o6U$ +^X )2i"h(FbD$W3+dE ߭ʘƎeNCBnD%D/MoRy_@_{zW[Uߖe&z3HkDYppG@kAG im1{iɘ;wO>lv _4|ѧEIR4Iѧoi)Ÿ.E~{EO Nt۫/~VЧۊ^}&|i"W_86 Oql2@s@VtZ3)2@ΤAAl 6@ 2@ 8tޥt5Lf[#a/kzUeBz?nLtKr=f9̻emϦ @Uf8F}YC^FAFK>pwFkQdpeew2/!^肫u=o 3{8l"rNSޗ>N^3c&M>*t"h I%R)O)OA̟l2{Glt,~yişYq͟!C D' t"`"Sq) OYdX1N2F>p!4?GhL]2F:e!4'4锏MM2};e]>c#6:bN y?}c>]}鰕Ͱ2=5?m|")#)㧧L>S'}_&,N?0:ϻ>I7S":e?±lYhyEk!(1>ʵ;B[KZkpX:^cGA 竲xI$kqi RK`f1J^)}˂|C)HukMe"j y.UL/:S[/:a_qqQ-Wq![AKbQ2_ n-Gm qnR%ܗCKVXUhpznt 7I'iɘL[7MO?dwn.U7|z,S1 Gi"q?w(N0Qp"ZyIRx }Sw_TDͼNֽ(D_PӦK_/hdЧx "s91ʺ%xnݾ*Җ $6dY\^G\u܍T:7D,.oC G SyEvݮәLU.enDmn-vI2_ң?5L6ɴ3yԱӎMƱyػEO:| _ _$EO:IIRKRR"RM)BRDT~mWר>8v]ptUKD8BuB<$% ;.m_@K͏ GAh.Nxpq @rC`h+eAzhe#Mo;ڋPkEmh2v5Ħʥ(n W/\M36p"Ƭʆ ZH=M\[rpŵ™S-ljp 8Y`'C(]w""fnz }JVu 8$8g.q#p.U87hY h9n*&1NMfc2?5ɼ5б86:6ǦƱyWp-NU&;߫78"hj= ]R8V4b'J6:eiRyJFh/nMfBM m%Ch@Nru*]r@e)JQ/>qHZ2ÒO >w2 U͋kW_&JU*'pbrŽef1ʺW1cլpZ -]2 'n|pzbv~Y.LjdK-j$.NɒD 0UKql }I/[`SMS\w2d~j2}d6&cSǦO;6c? _&|6|m?MR$۫/zZK^}ӂ?]pꋟW_6| _t؄/)S Ddl :VL ħ3)2@s@ ; ?]4(ıkr~ *N$oH):_.:礉— 53/d[k-K QUe<{HPK6]+|%AzcF9~+,-'OO>}lNv| e]fsi B?;et^,zZ}񧫯s!y\cks$)?ȰEE8q"`"Syz! O9d-S Ol |l2|l:cc?Ǧ̟>w>}اMǼSBq^OcvOW_}ld|:le3lnLOMO|<_>A| 蟇}| 蟃)O}Ip}[MYԋ(_U⣻W/b]ohi7©62r˹pޡ 5! lSu/_b. nTqZWS%ǀ֚e}8C\iVjxZoY&[FxڮR'@!K > DiOA1/jEuJ~}uڼJ+{VO*RnŲpe̱+‰g*J(Z ]΂]6&d2&56&1dM&c2Lo&cqlM&lcql:tl}񶐢F@2!ktlw2É$"ɣRR8ǵ]jn=.R͟Gg)V%.+Axs]rYGSE=Ʒ22:Z#;D4[n<Sز*"JϷ/su?oS K ܒETdSR(Cߤir/*8ŭV[ah[ ^im~ytQڍ֊_Y&E9l5|՞㎌Gj'h\WfzioKw>G :4D3<8Ka+9iEU=7fQ!ť8pJ>E=e7ڥ[|@ 4\Re5B'2CSqTc2mL&c2Yyc2٘d6&lMfؼql6ֱilcul2MomoE6|&| _lE&|a"$)$)6IlM"$)IL$oIʔ")EȔ"lKޔ"lJ2RM)‡R #Z1ctYeH&u_>E h) %!j!RͥPp\ K5=eaӢK7$|S z@I^ 58R@rҌQ=Up5Ot%# 9&J$+a|wckgkE>\ Т\tX+JaB~!#aVطDH4^UpJ#!dW'GZ.e.+ ͏vRM՗D9\zi;=1Eu)A%!= >ph+F 1n%7̧٘&1Ldښ|dOcS&ؼulɳ-=z(LQ]Fe% H9MhRZ}u_s,[*m6S; YD,1dzU¶UYOe2=X9Uɻ͕5R1WG!JfWSxe0^Ku5]q|qq *g-SH]HMU4N \媝2"gQFצ,ӈM[Mg'Zc!"U. HY_TwRj5K\/ %ӭap}|A=$%FVѼDgDMjI,j^@kY sGQBq2:!:Wyc2ɚLɘd&1M7cƱ86YǦcql6Mֱ86:6Yfx؄/6L"Ȇ/2&IV_d$EImbSV_dK2"dKS=M&:ױcڊw> _V_M]:ű@?ql2@oqi@ DiLj C x&_I}S Al 6@ 7 Z+W,}vRRem^s# ,,TܠegOO~l.KI oj\JLHBndԧ˱-Y};换or2͸qE8|+"~r%GN@6̛SfslO6Lɜ2S&stxlOes%s)!teC1t_AG-469mYEpNzHN!oSBy_DŽ]~Lhܲ!иo1vLc]>;np|p= 2@퀠} G;};uwB[}_]Eab_(OS5c[(de IxQdQd{-vyI/4¾D DuURԷ9]%l{O"[jS3t}nD['a;[(D`b,4wI5fpu}e/0O_#2yIHB4 XJ/bW"JU_qrz7\á@F+לOD;-Y!Q!xJWi Ueq)MJIPۨ\Kۥn몱e=ՈΉh>%C /gr.*}&S&1w&:6}ڱ86"1]딣"E*yV`\p_AU|=|m q== ȂJ"nqR+*" C oLkQP,Mz/^I>xL엽 JM`ZE"&5-KǤnRW)j;$IA%oUpeul|wϱ"/YHtPŸ+iI^9g%AI[SzaHniU9L(ZېUwV#Tus6*$(/BHC(FB'*.!7A%4S*)(LfZ7 |9׋JCIYFx[[jz c& ӥ;ڌVRL%X.Ԣ."ܨ,DMʁCȨWю#w"sfp@žJq N'Yn}vDV b2yP(=Oќ~Ԉ>kV%՗`70—m%J)nxХ}1uf+<\kMyB~1QEՇAF#Yj8ka$`%nkDyLAZ/ԛӈ܃YiT$z{KS&UCp8ӓy-e_:z'^䘍٘5^0Dظ Dy;C+V<feM2C 8fWwpdH}|p6xTzyu: ab 9?5L6 &Աcӧcαwዟ/tbhvI&)tbx6?-EӥRwȮध'}ܙVp zVۊc;4|l"0|񯇯C -C,MR@?Al >V۴A@Y D3)~I A" Ad 6@[ HW'$8Rp~ Oī"x$3i6k[ò5Cv԰ Fm/V!Zzx:ۖzC+t<%]X*/·8Z$+)k$;ׯQQt/3ÍkJOIYqcTK_{-iRx&xSS槧L>e6LSe~zwy]?w[b_O2:/4oyyW}?]}pt<{ZcӧkUDO ~A|pw,~J ,2,:dq°)=cزذE@oChF~HhdKhdChC'q8 !, Fh4|lz|l|l6|l>ccN2wSe~zwyGN~˻O#6}:byet^ BO/zZ}񧫯"3le~8_f;le3la+ad~j2}Hd6@?!G"!Do@)G>p>p)ӧOy꾝O9ip#lc! LD>̯z1lu_,t΢zg83?o9+[}بL7CMͻ_Q#CQS""Bk1:S,4@v+*G"ӫcQ e:&Z$嗷mR%$˖[o`{/;duN-v Ae_ KBRlyRoˡBq>7H_~[ehXoxGuI,x:b/3/5u"(dmd~j2}d6&cSO;6Ǧc h$ROrN^jwK6Xܗ!10אRRCk#v\A$/UzKB5DPeG\-z,jRϱLK}>.! ِ1z3ZI)Mh#^kI"4)BzY/m5K̫ʛ(`TdgZQ/ڧ!ʿf2?5>m2ygαccֱ7ዞ/t"hvI&)t"xv?-EӥRwRWrER$urE3U),E}/)\DZ w*+A%f8IKKH '٧ 2ԠjYID$.IK_E%t1|j2d&1M7cOcӡcul2Mֱ$)TjL&s/Hi趣vCIk^SXtWBNv>DHFRe֋^$*TUdSK]5I4&IEӕ$-^k֭8PKSdTȝ7|Ĝy~XB$%" 1MzSnD&>4܅%0# pPy\OIݰ {$&ohWPEH;1:%I5- ~JM^&*[":*.?AFX2u SQf7]pcI酦Sa9XKE:SLOMOLdښqlzi& EO}:| _ _$EO:IIRMRR"RL)BRdWpӂ?]pL~+8wm?m+mαۊ}a6| _|N zAtcKR@=Ad :V۴A@[ ć3)zI Ab Al 6@AҠ ^2syE~:յ {}?%bUx+.-x9 <@ek+.(խWE\quJ1'.SV[|[DGj_s.|d]*AI|džK6&"ަjzet8.!m+dYq_GO2ɜ2Nyw]O~7FltAo{}=鼼м]O/tiMw[M@?Al >D8 ;?%NCY8aX1lYlX|"/1)oNCh䧄FzHh$Kh$ChC.}AhOMMM|l|)SOvʻLO2.owyiOG-b2?鼼#4MO/týU_dtll|8l%;lݙLOMO# ~ C,DC ߀ S}l>6p}d)SO};r8tܿ1Cܥڥ\R$x,r(@S-^!Ad"G7jofy\1xֽ {jUpZ.|gw2h||7"|N7]9ي=9PQz`{7H"ۜVd>yd6~E_-RLv gpԡ|PtoF~[妠 r5|F9Vfp%U>QLᄂȒN't/j8Q )LdLfk2oLfc2ٚd>4l7MƱ:6mcqlMƱбͱN WwS'F&jNi/CL,ڬm%l&cx#Jp~:$"INuD[@ulU%i^[FRL8_R> b[^G1"Aʀg#oK-e}C۩GS4`pǦR+>#2zDOx X gQ͒6vDOK&  _C wc/XeꕩM54N~nV <_FzLQ5JX/"qƲYMBQ1ͅ9yD^D@aJ#ٓt·*y?{^u8/@2)4nr+d:uRx}M+puȡ*CD"c~yaVdMJR49LQc˜0,ɞ$Z4)%'rW}^M^bՎ .nn3;)y<BYf!{duZk7el h ޡw37&1ɴ1lL&k2dz386ocul86fdcӡcӛcEE&| _ _l6| _|؆/6I7ILbx$)2Il"0IMRdJڔ"lJoJ2Rm)¦Rl)r)U]PԲ/"Kj~.`A=vV_}kUDbP-XU-W84rUD3"dZk܄kbT.? JP«C[NzJN!oSBy_DŽ]~Lhܲ!иo1vc]6;np|}p1;wP};wwW*Xy5ԃqcKͲ~\j\E7]p}wѦr-`G,euvݙqoehU>1{?kH 궈[tyYJ4ESWv MU7/5{eS ߨIѻ@"=,'[ڕPtfA)cY2 <$Ur =yDۖɨdlN2p EE b ^Xz%-X﮿&d6&56&1dM&c2L_cƱ86YǦcql6Mֱ86:6*Tҫ{U 4$㐎x\sR-o2@/*;SJdB[o454yCqLh|TW N1R\륬 x/FG_5~x+i >EQߚeV6뢪󒄐sJexӻ}̃HMJd/Zz\$-~ 8DP[ʝ 2&+K(sA쮭]o^jnӻIp+PMTgJSF/=,K];)Dl/~(,Aǥ$n!Y}ehl@X=4E$rTc!zL]%qlk]C>iTfKqK)WCHsvZ}.-@`)>H \1Zj (@;ESxC ]toѦD>q3Vy!",/ϊ\L pA'QY_: 7H-iɴ1lMdL&c2[٘̇&ƱidcƱ86flۄ/ބ/2lMbȄ/LE_$ś$&IMRIRl$E6IIRt&)6oJ6R6RL)B!Sa)BoHGiGIzOrhB=_ 0D3#"\ BW7T9*`8vC}(qh?/ &k͡V=5hPQu!J9JaTcU"y- Ge;Z \W5/;XB3 {56am-,ᇅѣ kңRÅ".u$s@A }(cY*Ŧx JzNZpomEXs]~|n]?WzaR(_Iէ*1f )VĆ}BIY! ?Ld>5d2&C&tl:6Ǧ_plk|r%d9=iNDpp5'<AuCڻ+98 eP'g/o*,6BOeML{I>.WT=X1R o!]廭@s]: ?l ^^ű;/"'4.8[ӷdZKTDI}B]Pϫdؗ &Qs@2H:AD~6>^hPj\PzQE|99( &1Hގ\752]M_'ޜk)b]3ycWS_뽀LdLfk2oLfc2ٚd>40;Ǧcqlflcql>tl~slxȄ/6M"Ȇ/2/iE/IL$6I)EiE/RKȩV_& w{[}رwmW}=Euco ~l اӊ-i ӊÙ@L Ļ A" Ad 2@AEV,f>KY {oMA_Eq9!|"8dk(>.IqZ{ 7-J+\:q`WYYAY4WHP.;rT=?vTz JwjL<S)9e̛S&slN)9e:9mYEp1muwoSrM]~''/z:&4"cBG}DŽ]^x4Η|x hغ/ͰwӑvL#o#S h C"}NA-GcPwwo)t!w 8hNqGĖՖ}6_)~KuGڲhNwoQl՚Fݙ OyuRՖvP_ԝ*9Hs&u*5ptUp0Kѵߥ=rO $6Y`Z)\Xд \ڽ kv:0~7Qnͭ!"MEn!yxK uqsCuA^`X*}Ɉ^w"⚾_E0-UZJILjYQo (ǩRe-FU,| m.ԇ?5̟6ɴ5yԱӎMƱiؒwSg‹6=wMJ(,U 0qc' uEw]8|C$oH#$Z/!.{}?rUVSkmm #GLokgw3P!^$~o|A%ղ^ \"Ѓ[H"kx\˺Z9v^G 'UŢѤ0ɧo2&nTtڌG9\{eBQD}4(RXP*D>CI)`"Ru+ 7ƷCiV?ޫ)dbs^D+Q\p&3A lkvN%E8JֵXBIp_Do[}Qpgڑ].uR}."Њ6MxX䤧V/DNCi` (ݼrvjB͚&(jSD߫9vKZٗ6 LqYJ'rJaZb%冠*/JԢWBdC>:~x*X,klw _4|IR4Iѧ$Ż$+Ei)B.EȔ"+Eܒpneq+W *Z*E -+d<þ<˨G<fRN@qXlf}CEUuY);|I2^ ?nH1a+>kQrrh85$1.BkE627%a9O W &u'p"/Gh0тRPW01Ay7PDAݎ+*I}sԋlLSɘL&5th2lccql:tlMƱб =6:5O!Zn bVʹGƊ>:( <lzyqqQaQTjR*ؗ}8D85zcQϭ2WbO Jw ЪD f)'^E3OBvE^ޘ좙+psj^zH=Yx}g k@#?т&-$y딻2T >de?E '` DD}p'cÖ'#R"Y2bG1RQkej@塻y.okrnBP佴kddL;槎Mvl6M;ޅ/~M]%)zIL]ڕ"O"lJޕ"sg[k+i[An+v_8wዟV_"Ȅ/: _ O zAtcA@[ ć ~V Ab p&o3)S Ad 2@ D7 (_}Lg!%- ٚ+-M bWz& ~,m᫖HO)6\14x9*<9yƹj0@JBֺ'a \{ ߹PЅЈC_01dbTƋTBh+"SpÂQ"„˃4r!np˪K8r"UJAߜ2?=e)9eڝ.ӻL;P.o"6=鈽"./Ӽ̟˻[^U_OW_1[iMw{m ~ C ,DC߀ " ~H`"`"CY=Cz [ zwF~JhFF2F:p%4!4SB#=$4%4!4!S 4~|lz&&ǦC>6[>)ӧOyG[}?]w>}w䷻4bӧ#wyet^ڍ1wVz:_eV6V>֟OMOp=Ad : 2p?!G#!G۝2?=e)@ݷSq8)>AoQ 8I"SqN~)-js`=Kt? ]Ծğn FYPZkvg|uQ4u,=YpzGE6GL WVM;(]BgyQ-9Bi#38; =kiv +`w ׹U"zƦiۼÓ]qFRӸi+(owQx]l![IJ>=Rي%My.p#@{SP|n:5t*ITG$:1dlL;槎Mvl6M[׋EXRw>DBR-kװh~5E+s@QF$7ҢE[hY乳ʂRE\p*eǶ/)Jܤ^T޿#61^'A)%Y|EuC8K=ƵUJSrK2Ep_ /SnEm+IUҼ) Z5yD&HZȂwj!x*\/f?y_rwʀ8Zݪ %M),\ԈlaJw>0YwhT_a/}I?e @Y euym~FHUM>gRA%9l"Rb]cZE%e^&v/Y qܝCV?yt+AB<{]5!Ge_>G~As/w˾z;ʭޣIu i4࢞DRZʂzr\"7U DL*JKpzN/5@(sDsgB<9<Ƶ>/j2?5>m2ygαcӧcαwዟ/t"hvI&)t"xv=-EӥRw^MnPEq@&E& zh&1."k O&qj7*eO8MDT^NYԧhS駅QPxQYN*/k.@ryw>UU k~^vIN8pE;x Lꇲ}Hnb 8Z/DqS:}A,Zrӹ$($ɵ9ezzS&sʼ;]w?}w]Dl~{ݿE]^y>wiEvckWc?]cη O zAtpdX8AdYdXt"7aSz ?ǰea!`|Gh䧄FzHh$Kh$ChC'q8 !- S;>6=cC>6[>6>6wLOO?};)2?黼#'|Fl~{Gh|؛O2}:/=n V}2?/ᰕ߆iw#w DO>~A|@wp=!c!۝2==e)@])r8tARb],0e-x kksK|"RkL0å"rO>Ȓ`ڵN9x"88V Y4$=FԻ󭏍XZmY8f.T%C8u萧[d+s2P_6YP;.9(-qikY* ͻ\39Ut[n\[cmd(BM_t" 0Po5;FD^ߙɘLdژd6&5th2}awfd6MƱ86Y&tc"'7;)?̂BېZ!Ź@t(tFӐm+Ȳ+-iEجy9I+DgV>6h3MjMI_ I, |~q*!4"Za37HB稚iH`,@&Q!Юu$UFRz')2i]Qzv0. !+¶)3/wt^=aXv|YZ_\GtNx̛QVib(]w@[/eCu*l߰<‘BZLi%7GQv_0d]4sx' ]PA2cKEP7Z |jv/,BO%EPD7rC(Z-= ED۽H~@FRa"MPפ z,ԴAWxJweApm+q.okDxpS-AfKd3+${W)*h[yw, Myi5 , ߨ.xѪz57&1ɴ1lL&k2dz386ocul86&dcӡcӛcEE&| _ _l6| _|؆/6I7IL"h$)6Il"0I[2oJ2R6RL)B!Sa)¶&]X #=}gȂ,M fjj$zeeEZ~|uQݦLc[ү"GKwW2҂[m\8km2Хydp<1m@H /_I]c Ub:2XCVbmDk;Z7J,w 3~JU)ѵ?n#/s8m)GyLfc2Ldzj2igcql>ul2MOcֱOвF~_"5/{]hCC?w)Mn<%q|:y#e*m,q@J՗3W6՗˨df)x7t*6 I`"ըedZ W8@Ú跦%G咪5l=¾N _%EZ n뿆}IWЫj`4r]dWbg)2[vӗ{ٚþȘL䯰LCٚLƱidcƱ86flc"&| _ _d*]E6|?ľ^&)IM)O/zX}-EȔ"tXȑV_& Nue>uez 2qOM9]~4[=dhvym@s mYEp)muǦ|chɻFN>%4ny_uLhEDŽ- Fh<mp|vz:n#G@p1Dx[}ǠA7h~Cq8ߠ_PCcƖ$%RSt;D?x }cGrlP]/D{]E8kkE_^tptyu,=MsfD"w`{Q}w/s/ \{ 5ȯLG)t?PuhcD&4_*GJ*k70ZumgYc:wop,wo9CSU丫$֔rYs%Z.olf%Ju܀ڤWx ,4yA(تWw&d6&56&1dM&c2Lo&cqlM&lcql:tlzsP׋KU [R"#4lLCɚƱ86:6ǦC&dcorui.Be[w9KJY3[ Y#>[h/BvHKZpzQ!Ϋ`o[f7K" .D[aR!7?aNh9D.R i| #/Ơ/|Y~A3]S3d}yD_s,n!ݸM n %7^Ld؈q M B@ * o!0;LV5,ܽ>5Oid=RTH:CR[\ B& ,(ȋJ+pD-1i\B5lMdL&c2YɘL&5ywֱ86[cql2ֱ86:6YEl؄/6LbȆ/26IIRlbl)¦]eK6s̛sg߯ԱiVW_|a| m :ı>D At:@Τ>""AlLf}I w:MU0>;x0yA]%˃AyUg-uifH}-h'%Qϫ J#-kIYZs"xFs8WFMtΧpEh":.yF NsdN)ٜ2Sf{lNO)OA]K.tx P,:ywg逆7yy7,>Ѧڍ>"؂'mjG }<#N)'EyĎç,KC1;B#r8-9ȧL]KhC 4W=cOi9m锜̛#'I>׼/>%4&b}}tJhM^o7y<Ѧڍ|OvLֿ?_ӑ:mLލ??_ޢ"@p?SP7u>G=m8;} B_/Kag:lb39™ i[k-Vԯ7Ja8$)% >aQnڊ:9V$AYTD4#4Ay`}"@ApNa,#REQ*K8S&K]' [!QoQ/ˎf ί VA&`)B(Z^j[A=Pάĺ>#I. j}dlL;Ǧ͟vl2;AO}:| _ _[ iO'^}R?]ꋞW_OL&|Nql6@d 瀠~A|: ?"ә 9 2@ 2@ 8\9eoX7S7}VUs(Y:BJݠ!1l-z)gY2'o{֛[AU+RyBP^"Hr5y 2Ӕ+Ҿr\/"V-f_"WI(Iۿ) &2?=e)9eޝ){|w]_˿Glt,~yiEYq͟!S ħ' 8t"`"Sy! NYdX1N2F>p!4?GhL]2F:e!4'4锏M2;e]>c#6}:b y?}c?]}鰕̰2=5>m|")D#)L>S'}y mݢ} \۞nj/󋯳>,pJo\}`%@7 w?w9H%= ]YVÔNI\"UDV 򪶊B BW7F췆Z"~,wqUo XOISSW4Y+s5ߨtߎM]6y-<^h^A6[h%b>i\ 2퟽ ɼ1dMlLfc2YɘL&ӛƱydcƱ86&d{sљ =^@Bp&Gy{5UC7*е,(Ru4 XĆGRȨMVL7vb<~%K%e]ZBQTDEP"R7$yR6;{"^U\"D7~EՐ~`t > ;Q4Ik eU_uw&_a^@*KqiHZoy~CӉ9k {++"TѪE<̙L:-rq*Cɲv AG_ƟC-56Qh"jqnHVKTEz!l>ʑt) D]2 Vzv|'-We ./KC2PSq3dWov˫x"x,-qTԇ!x^^! ,UIK-q-*GrQ~ ,M T/pcsnB˘d&d6&1dLC cqlM&lcql:tlzslhȄ/7M"؆/6&I&IIRdm$&IMRd&)"IRl)BRM)¦![)Ea[\[ndJ(3|&)-"cGQ Ӎr%MK "'gդkQ[XՖ+VfBuă8EJTGU~abrb v" >.^֕ |sZ 5}*fRNvIe=FZF'gQSkrXHվ'A$!k͊{BY޻džSh~"?>Z!#_ܑždE~仟KO&tjd%~S}./2$3&AbްU#ӊM_/d&1M/Lα86:6ǦC&dp> `/Q:A@1.bmr7 kpXC kBRaJ+8DR=нĬ3$%M]) ㏄Nq\K-L]SU^[~|X<\gR'U2Kvr߮7:WNH}iw&4y[ՊRS-Rn6Y.=0Y^*q]eE}B@pHFcNI pꤺHq-DUYY_L&c2Yyc2٘d6&dM)86YǦcql2Mֱ86:69#M"hȄ/6l"0|[T_6IIRl"蟫l)B]eK6sLsg߯ԱiVW_|aSAtc} Nit&e >I} b3,q]V݋0pkD-;TuZ[F&)C/'~C+ A0$.Bu*d1$$5x3(T' H^K{e\qtoAGSVFd@29e6isdN)=e2Loql:uysw.ۻ.]cB;t@Û}hS}pg >E8iScC; ON !y hGS%N!ĉ-EFh6ysw}JhM?ڱH#4~ݷ/7n t:le>2ycn9,*B@߇)Gsp9>>yAMjѱ)-8{oCNvΪ..y^Iq :itٹe¾d)s]Ep2 ?|w}C-NᾒP I$}|K2Rψ݂@WA 4_$]pM˥%sP_*ڥ/E7 Uݚ/'M U7 ].]KnAPGE[-.́#w?=7< j2oLfc2Yic2٘Ld2&ӡ96ocul86fdcӡc-Kpc4켪ZE_RI9Kꪇ՗tJ6.%Qeb@eEkR?v-UmZќuHZhG'廬oe6ȢxyL"?#R@Bޯk=>nTP_\#Z@ k!I`<*h^ @\#u ck4 6"UE"u(__r ˒Bzo%/7UhSehp]} GRHx$;l+,[G>ۊx٬TND.ҹ^&\c4mGrU5>(cP9\,EpDL-.)‹5xA g[JN6fI$@Ss|@J'/BVNKWuʃ݇QzIK)~a_NV^gUO~YT+q Fު 9M`(/T/h*!9EY%>HtNGHYOg2oLfc2Yic2٘Ld2&ӡfql86fشql2MƱ:6ǦC766MbxȄ/2mb0|[2I6ILbx$)2Imb0I[2oJ2R6RM)B!Sa)B{ g'C7My܌fCVAഴL)IxBY_+/s[I l __^*Dtl<])5 WogErATE%JA~.~ g:DH-^Z)dH /!$ gQֳCY‘_"i*F)䀫$-2n"4Y.ZVՏ4ɟyAYzW iE1M+5 ^\b@/ tJs/=ޭѵ< 5uͤ^M&c2d>4lLC+_cөcql>tlƱб FqՑzz"2rʥHwNB>^D"5!uYzb$ŢŒ^.E&"=[2w[Qp&p*I.!ˬW#@a^U- 8OKcs'%8+*ahbϩg(No)uRi4PƂE1k-ӳۑӔKhMMU14 J16A9; &bkD{JeXT HQlaN z\zg! ^F] /&;-em+37&1ɴ1lL&k2d7Ʊ:6mcqlMƱбͱMM"؆/ބ/6Mb؄/> _l׮IL]e$E\eK6/[)Ed;~ŧ͛be/> _A|c[ qAt8@Τ,ć3AAl @c6(}N 3W-Pc[{+oW<.ЊhP|&%!<1uOv&)|N7$R'kQK/DUo6.MBC$* 1e\h S)9eLS&sdN)9e::%4&/g|:M2[|̧#uژ~pAp}t w߇ so6z"gx{%v(qb]uT&бHo0+sIz8የ\ߊW A6r;ō@sGM8U/j2h ^dSTI"1QJ%rr]IW5&uTbaˈl^>Du] d2$JZdפR*^^v--mLĥ"X,FlsEQPq2$EZRO<a2f׾i&=zc2oLfc2Yic2٘Ld2&ӡlM&شql6ֱydcul6ֱ͇!6{pΏ,*Ou5$/-(vcɋPR钸v-]Z8s%*fW"5o˨dA?{E$/0 OmPhE3EJ>oǞj+ yDDWBGT#V)"$W%E~ 5IKI ;V'FNMɥ*n"怦~6(܊7z`yPDkLl:og{D}/c? @6!BroMlȾw?u19JH$yobUEo)uu&{ݒĽ 2&QSn'2REgDFC/8'pMj|~`N^A]D߀XLJm]Ὣ M T&] `bQӉ6sk.f>Kа20:\DZS֑ pye@8ZWEkړS.(%~}R/ԎeE c[S`^roo#uUvI~f9Ji"=ToDUNݦV0N(Cˌ,:N6k >5th2YɘL&5cql:ul6ֱ͇86:696O_S86,#S Ay+9zqoPǖ ~È t0[=Cl( +]x(˦D|~և9Ȭ گjn}*S]jB\"2"ʭFd)/c(cs(ߴőy 1!k  0!E)#|Os kMBwzjLzr"јר08aY? _ D8@N+,DӊLAt8@ D; ?5zT7jk kO(& *_~KD8Г᲼M;ټۼqO}B>%+JU.q@w. "J$ɖ }dU/e"{/BB6|l)\6e14isdN)ٜ2Sf{lNO)˼[P6wy꒽d2e~B;t@C}xS}pEMC8? :E8-D灠qNY8,?@cE`1|"<=fGhS%4!锩k |6ysww/>%4&ba)6yyGhHG@p?SP7u>G=m8;p߀"lVI=|WiS3VO/_dr\PW(%k(o¨+*yjs[1۵n6ysBv. WI.O'j~:r9}]^2ZK-0gg-= A=g`1)F].>Cqlm!ԪQdyAB琢 B}uHEB/_Œ@kUw6EoDy٫ خ,ElN:lddL;Ǧ͟vl6M[ǎR=!7ݩCSuI U UF8(ƮҪ%Ώkŕфa ^p*z4n͗S2i(9EAb(׺B}-t7h \|STIXkk"${r8>~hPd_¶HaI.N QK,FŅp"G j !dF{1zHp\, Y]X\>8,0qH>B  un CC.(UZq7KY1BA+ul/p53%\ᇢg^)*O)57pFA@ExY -5%%sD1^qpÒ=TtZe]FGj{+"13 Md]P\KxJWjGAp z|ϠpGQ{/i~Z@r 21t:a=n" `|bQvT(6:') AT};زVcEg&OM&M&c2L96?ulcql9.|E_d.I$şNRlԮaSжO<5YforTw7w`EH8q%u578 :OnW) PWQMF $QHCjbIMkn^(ic= ǖ{1Sܽ2QxmAձ]VBkCY+.:&>҂3q쒄K`C^p=BQze&^ DX'Q|pk1GKoqul2MƱcqlǖyeQG|]/|N'ЪF׼_L6'ڞ]aNlt$V0|ؒ[^A e&%$AE-  ĨHPAʅh^ox)7wkP Mھ]WS"T|Ԉ EZZޥf+TMބhy lpbU/Ui*;jqMky$e bhDa˕p?&84Oy̛}p}е7T./0NY8'Z.SrH_Ngn(T+)/-5 bR[/Zo>ii٘;wMO?dw _4|EKR4Iѧoi)Ÿ.E~{EO Nt۫/~VЧۊ^}E&|iboT_G86 Oql6@s@VtZA3)2@ΤAAl 6@ 2@ 8t [t؊'8E'BfphJFixLIsQh.M݈76|8}vDCe[Kʵ& \I[ 饗m+۽IBpX^nFlĐdyZ+ȷ2.=zm" \Z>XUP D|Լ$g(+qsu)ӧO)A̟l2mAC8b#ogӼ̟˿EO/t_XGqM!S ħ' 8t" "Sq) NYlX1N6F:p!4?GhL]6F>e!4ҟ'4锏͆2;e]>c#6:bN y> h w\}񧫯>_V6V>?7_&ӧM/# D@ y ǧp92;O9i9'/kץg[B) Zp6&w0"%e@=9ISz0W83S ? [c;#e]5kJ71wv.%r .Hy} ~_ 4-E _kEbO,+HQt)^=,kfc+PeTWĽr*eE|1<KI4J$;_q񍊟/ rdiN>K^Ͳ:@ܫXEƎR㷵UgSi٘L;wMO?dv}5{S#/:BBF饖]|*A^K a%2,ER`Kv(v]/}/F Av/b/" ^,r" ~K.Q,iO/j1!Kf(]FkEUJVhN}v)h"]ky|K ^Q/qJeY+IQvPk]qѝ.Ŗ0ʏ_:tWis)%Ȑ,x]y?'k'bҹ\ʠ=_TFvkG^ef 2(@MF ^g7sR(#*nǽaq%P6-,AZ[k]HK`[XdU߫]:y"5i٘[7O?lw _4|EKR4I$Ż$+Ei)B.EȔ"-EUΕѻchSFE}mxDb}h&¼ˢ2!$e@) X5ͣԫ 9PU*p))D{DBl>|2ԀYM{@#z=Nם3q9Soxe*g¹׼"to7n=X>N3^<\?f |W+W}!=eiG;ܯOMOLdޙsl~i&شuM?؄/ޅ]I?~{OKt)۫/~Zpҧ ^}Ӷ?Vˆ/2O:ıAtc촂 D 2@s@It&bhA yH,9+tLwdž;u'+-:y]#YUnХgA ᏸ;A7Q^+QZ"e{+zQ"<yG)ԬOXnw^{ c2nI C v/yKi ol+B~^ %_ؐ=/yIGdk׸"媍5iӧLywʧ]Oe6w=#6}:bv=YOW_,CƦO)S D:da) y_L1qE~|[ [tf|̟6x| b?c?SOo)><ѩRL_E7T5nNinK'nmiQБuH]Mj.Y[p)J2"6ʐtk 񫂟),j:Y+NgR]cyCmm.9P=Tjz2^tP[S|HJ }Kn@^W}l|4'p5IeY’cIyRaK—"/Sy5%_4A)=Қ:m_$Ãh,ǖc_8*FU·r4 EQRpծRՆ̻:krY"BjY5ЩVH}C=p╉uK]|碪#Zaul6MMƱcql9jW.ދ*-s[I3$if>$fZ9nA׮^'I"z\r5v#_9PFU9G-'=zQC1 ɢYdƼ9bűAAvZAi 9 ΤAt:b?AAd @нj>3nk} $]\Ҁۂ+pyѳqZ|E@!Ǚf\ #r~ql!<ڵ׾坞:I^jk9MuCb'龦 %|!Pj`rs4eLh!+nb\56v"~3U))SO2S)w?}eS8b#ogӼL˿EO/tu"8E8klt} "l :E8A灠Cذ'NYlXt" "A9p!4) 9Be!4)S 2psp==e)vr8sogA/@ےS=anQL&v_}:̆SbH^E建.z3"C%j%TMkA1Ҩ  Fu9vݼm]WQ__!znbMޔU{ZG_BCL P} NE 5kHQĞ|ex>OO/ԏOˑ]}=d]dޘd&d2&1dLCٚLƱilcƱ86fl[$iz^;%, 7y܅[DbmD7d,*Z.J^67>y~)o#CȢKzI>k? VDTձ!>v3!^qDՂR" RC.K=+MQQs {q:v—H +"UR B/<쇌Wʚ72P%.ǎΧ~$ >8KJ.F5RJW,y950zz$!fh$.#yws.._MU:疴TyDJeoė%پ^C,j\:ݦ6TIP=U/3;3 @qi%M0_j.%0;E~VQpF}+*BDOWAVMU)8J$,侦IJqwzbw4rj`_kʀFjQ{=yb`: Uv,_p*Γdɢ>ۋKWu"^.67&1ɴ1lL d:4L6fl6MƱ86[&tc"&| _ _lŇm:ž=¾KRt&)2=aŶaSa)_"G&o/~X}+8yEc޵_9QV_:_lױ; A86 8y9Di ӊÙ@L Ļ A" Al 2@`ZͰUM7e Yl=ak34E6\@oowak M^y{)U UO 3SH})~+Zi?D:_^uקٞ2mN)9/"LLOA]6wOA]2wB[=dC,~"8۲!x D@!csWc?F8@?N2@S8A,6,,-=cYdXcr8F~Hhnz:RΗ|x3!w h}l>}p1;wP};ww^F"I6r *x#>a9iCOS- b[۳(BTU~B^CD$+QV2nkH`L0m5 eD:lyD7]gMATD^v!!ay!H\2!jZ-K,5˺*.^6_/8]hjF[-P#KM{CRKg)'$zZ^djstu.lvUE|' r;>L6O7)}M}(nS,YX4jpW*Bvm}f.kSi٘[7MO?dw="k4/{.i@ޗ H+êpmQdE/ay1lZ9hZl.KP0RD]u^@!QRDT>M-بX~wtSeO}$%K9➦\Qh ,m 9 +Gν)'#vxFlIbx2:(ERM׺d$(4vHi$cx o4/'IΒ&]ϺPII2jyu JZVd 6#nT"p it3%ۢY.& ][#bS<'"/-&CWIp{8#ݨ1~uT,ǖX^/$B%\EY5uFE!;`uQNj7c'TVni_`c.i(sPfrUhҭYI$UvEi>L O] Qw9vspXT.aM֯ EL&ӧMfc2L96?ulcql:&|ş_l.I$şNRdԮ᧥}aS_<|r%HYKnq,ȩՋgoB)U}[ÔUG78ߵ$]M OIC]u:jY\W,jC3'5o[,:}\ZPE3Քr2NBcU>;"8ESx58q&JQ">o%& (@/iKŸ(2߆C$A@E*lR"&UCGWQD"MxޢķLUNx.TJ"rVPWd[#%QC\Z 8y\<_e{Y=DJ~!4Ld:5|h2[٘̇&ӛƱ86:6CflrlDlugh?q":R AuIK5 z$SxjQT]_f/I1SWp:TƯMQ)U9 sH4a쓺mQǥ9%*x޼z20j!26GUW32Z/@2g8x]$gD\@ C)Z%@6hϽuv[{VTǹݚeM]cK=0Z1+k u$JqT}QPY⨗bXnڠdlL;Ǧ͟vl6;ޅ/zM]%)~IM]ڕ"O"dJڕ"sg[k+i[n+vM_9k?؆/6U_@=Ad :ı 6@?!D"ᴂߦ@?Al >IA@Y Db 3yKI0wBQ&., hQ`e׻R-Jv_:Ww/Ң /pd]]KuͮhBWdA/kx x,FEtWc\*Z/ :˼N_sEvm:Ia9lxY׳$[4ӳ˿&h=-~)ӧO)wwe]ށowyiOGt7yet^ h}ڍު]MOkltC8jl2@=!b!Io@aS=$Nea!߈E@O1ÖEE,,6F~JhFF2F:p%4!4SB#=$4%4!4!SOMMM|l|)SO~ʛO2}.owyiĦOG=bo2?鼼#4MO/t}U}}7lez8_&;l%3la+ [7&S&Fo&)>@  ~ O>z}tvOO>};PwNzOs8w=Km"2uu7U<кԽYfkY{&+fʞ\zaW;K >\LTvo'2VN˦\aKUWE 2TPbg"@|(^-K3RyYH6{=(TZ}Ф C::nT{A%ΐRrG:$ñ5뛭5d0>=lJ*5*%+f&>u:\T!@F8chK)/!Nj䕬-h.o@K$ib_ˏU(CUޘLOMOdڙslzi&شsK3 \"n45 wz_]$*9JIɌhGA̲7y\uw*GEg\:la~k#z:qd=rw42)Z$/'VN}РL~_HiI2]Ģ_r *V?o=-utB?E iZTn:8մx]mn:M"NH+~t$fA,2or)"*iJ&fn٨mNȤqd_tVT84e@ti%,7A+y:6IT^q|٥u*yhe/rVۈbB>HsQYhJ?F1&S6{xFŹ- xR AIJD*H&#Ũ;_Q ӱůDdG+*E?^w[=9#VR}Q~BBڣ6žpRWiT} _rM_Akŏk+zZG4ef_3L6ɴ3yԱӎMƱyػO}:| _ _$EO:IIRMRR"RL)BR2 &w# >0LH'G+WŵsXb\ÜI] _yJ^CB矋m"5\bM@ We.5|@uCtL7D0%eE#`Nod|rC9pq5({ZY.w12ڊ3u'@⨾L*TLc!Bh^BNN(oo? C'1YStr_hGўhQU$!\9Ʀw=pQDZ}8 ]*~29KW8K0H9\mz5|j2d&1Mfk2&tlcql>tl±W)Ngh dIDZD|LNu8eRj!,d8Up6,AפBy#Hd/Jua4nPZ"d'zT%x;>?/ Œ))ߒFMA/p͠m*m_uS ϸHuK]C$z؈ZHВ) !]I"]ߵidU$|#B #E S4/)Wrx:tS#>-"x;eBnV K un*v}Ѫ.)daL&Mfc2L96=ulcql:&|E_d.I$ENRdԮaSO; M[AO t[sl± _E&|ae z C -CplS Ad 2@N+Ad z C -Ù[ O zAd 6@ -$~Q~]0-n9j|,Z"t?vpyYZv%!"$A-.!?5|)_5&y :UȪtlqȲu\ ~)ӧO)wwe]ށwyiĦOGt7yet^ hڍޫMOkltC8klS Al 6@"d 6,~J ,2,:dq°)=cزذE@o,Ch䧄FzHh$Kh$ChC'q8 !- Fh4|l~Ǧ|l|l2|l:ccN2}wSe~zwyGN~˛O#6}:b_Ee~yyGh*/}ڍޫ/3lez8_&;l%3la+ [7&S&F& }# />~ C,GC,ܷ;e~zSށS'?pҧ9;yR$:MNe"L 0tSg+ĻrjkVAZ)=PZVrǯKWHK3r[6nP.bYM# AZ¿EҜW)n˻{BB^cZG偅Zzz"Y)7f) TOKYs NJ7֜4zAVN [DBASyBn;tNVXϝp]#˽^_3̟6ɴ3yԱӎMƱiP%ϻ+j9ivv_FqVKg[Yj3( uU"זm[k<,1N7*4MnZ O,,)w7 c8QOW=һRVUC퇃ښh^T`c\Sbk}Iz_u /mC#oK.UͲpztZ!j9ۈ>I $@i-^^JRGq"]fݻ^"AH52;' -AYZ&D ٷ%~%:qV[p z M2J:BٓBUYp{hQ{UeD7{]3l8^*4J`d}mr_yT2hD^Ю?~W-B.\YůV)*~+M9t9N__-bbC\hrW##b¿/McZ{ h'.⤊ѳ [fARӗ*t\= +&Dw]jd~j2d6&cSO;6Ǧco? _E&|6|m=MR$&I.IJ~ZK6mK3 .A)xYCWȈvsȒ8-Iԥ}7 EqpbYTqk OښaQwۢKmX\]RB}"ͻя!].+*}8GjWz-bH%q%[w]$!EyU1A˸Q49 F7r !]ZWS-Z> z:-$s&/Qe])(=AIfp0q$pS^Y &H8Kn~C5 pEud2&өlLCٚd>4L6MƱԱ86:6[f|cI+9՗Lg_^VzIiZT7|ebYy W_Q<15D%. /ZnGQ_E&VRLJ'"P gE8 j'EޝG5qêĝY6Ԇ_ `C/]?i IO%ꇵ ~]fq#i*jFȒٓJuL"w/ 3B炧/z7N7KG:ycEA@* &-HѶ{Q@)8NMLL(B) M&ӧM&c2L96?ulcqli?؄/چMI>$)%])OKt)B])+8iɟ.8w&bci/M?_΄C -C-@=Ad :V۴A@Y D3)@ A" Al 2@[ H.ܗuű2KP^HˮVyݕpØ+xE򭸕jW㙧AII,#:/6LT~AxEUykjɮ˲ RAy7#6>P(Y($PBp&;ʄ0~kykN>/SVu^@]J|yDw\(}᧧LOO>}lNv.ӧ}˻MO#6}:b4/ӧn@w=n ?}]c?]cη O zAtpȰ)q'زذE@o "zH!" "C !, 94FzJh䇄FF6F>d%4cS>6=ccc!,{wӧ~y?.ӧvwFlt"./Ӽ̟;B{^T_OW_1{etll|8ladzj2}Hd6@?!G"!Do@)G>p>p)ӧOy꾝O9ipdyYM%I\j,d̘/7 7ұQ}aʥ|s{wWwH Bu 'z qp:Dl8V(dkvp_0?+Q` _л(i2nm@h/#K-5(XF`J]c%ko9ْg/n.qds@X7(ʤEwɏOu鐴DXÝST.-,U_` xji W?⯙LOMOLdޙsl~i&شuk}|V:R2HhNjJ>zi+,Ֆ"I7QINR ! bU4 ;Ilݡ2(UX'yMeIh.kYUJ2_J![}.8X3<"Q;TvߥPѼ"祪YAxb+Y˽"Ea2:R1\ mNqR.YxJuBZz7/pDW/ XE1[3H&@Av!F "S"zT/3ۺhweV%GzKYܔ2GFiACpF't#㐕8E e#UjK0Հg%L9P[E0G_O( Ѯ/ - QCaįxjL^e'Ҭ7GdvBHfqhWúq61uEEQ]~MޗҀn+(]ŏQrjԆٵ,[~d~j2d2&cSO;6Ǧco? _E&|6|m=MR$E&I6ImJ~ZЧK2JI"756iFUmU:((}T*p%/^o]J, _*F)0/#<-^!7Ll_D%ʸ~ߋ 8(]ӆ1yJQ]tPp|i%i)?]Gݼ#r]_*gx݄tI+i-dv2//*AUtl͚IN.$ 4" IRZ9t))u WU넲eP')(-˕dcT9>HݚD"CnR^P5M|I%+ |~(+bbHɈx>7s)C94_Z3a[I!.R!-dw _4|ѧEIR4Iѧ$$)Ei)Ÿ.EȔ"-E6'?-8sVӶ?V0ዞV_b؄/> _?Ab f )D @ l 2@=!bLfR@?Al 6@ D_A-Rb>|F’zIyKPfq>p錛2p+mRp[Z{|c|1E/VcSyB!MG}ͼk&[orkb?S&LJY3wHnu+ O{uٯ{E@;FBB U5'$kmwwe]ޑ&bӈ͟;B{e~yyGh:/ڍ1wV~:_eV2V:L&MލL&S}l 6@Ad 6p?!G#!G۝2?=e)@ݯNN~Os8wܢ8BRx(RL=n?]7gG3Uկ /5UMm_f՗M1qlYR VGH=z8kw#zen>O$βFDסWob7yK.9BetR_:)<j\ubsfDvU^*Gك' ѝG钚b_{ e{ ̏Cd.ť+ɼ1dMdLfc2YɘL&5cƱ86[cql2ֱ86:6[ǖ$&;e 5Khrh#V(/ IWU-޿ΡQ&И߬ΪJFg)b"_ r*Z_V8gK.IP$7… 7DpiJ"+ `őp4I^JBsS}!ԽŠ׺OkZeVhY$Yoz}Y[6:oN0 Iv9R*21 +I\,$H/{|6] Ô"o$'te#SJLJԻ+rW^~e+n˴ #[54Ni2?/j)nU~R$m\(}9{|Ih&d^ Y;/dvH ޠ$zqa_(Pf-E"Z͠+\70Ѡ! 9lEQ>, Pm 8Dze5s'%qEJn&!G sl*k@D߫BCqR S d dRJWP/`2oLfc2Yic2ɘLd2&ӡdM&شql2ֱylcul6͇Mֱل/ބ/6lM"؄/L6|IRIRd$ś$E&IIRl$ŇIJRmJ6R7RL)¶aSa)oogSWDFU=e&Y/-&x||Sz}u; Rn>>)jX:U6]JU!\,}6Ѻ~}Q>mڼ-[*ZEyg^xzŷ/p]_*x]e&%p#t`^$x^@gozy.T`b U_Knxz]bpe $0Qrkζ:%į lդǧ媏 mZ`ޭGD)*nգ^:s1r8,dLSɘOM&c2L>ul6MMƱcqlcG4$n8eFSODs^DgcXo~sNJޫ|kYW fl^ 5)%u-ϸïǩ-7\fD|X~$ !(۪yolT8".JwZtBc˶% VN c*z/AY_54%8mZm}Wu.~UD\UnCx<{yD^0akU<ߥꋏm (ZX+#6%{6tICa|BP(+BIJ4uQ:V~!I]T.8(L7_%p_MdL&k2oLfc2ٚd>4L6M&d7Ʊ86[f|cx؄/6L"Ȇ/2E&IV_l$ŇImbSV_dK2"Vaul|3Ա?{V|Gk[}8| _ _8@1-}8A:Vh78Im zϤAI) @ Db@2J+Eu/J{wp.tGAhLr}b4UN~u]7l·pDSxuU6o-dZ.f#i{\Aew[qE \y!u(Yrx@sʴ9e2LyslN)=e6̇OA]6wOA]2wB[?dCݟh,~"82Op[=dvB"8F8w5cs C $n}L[ݝ;mcC>19ywɧ- иeCv1qc|Ηpm w:lΗ|xJfJaH};_!!w x}d>}p1;wP};w756R%[^ #~cÍEcDzZ")HRux-u8DW޵ yjꢜ (盬"aq'.(U{Lhm_MMy.Q}L~I7YA֚ZT2&Vuk"υVTJHR~9r½sM-rP(ҜWx貕U J)Gom@+۲GMsP=^M[ehE7[ Eɴ1lMdL&c2[٘̇&ƱilcƱ86flplYZe[ n"?5/9l,ɖy%)y@e(Ϝ=$-!JRfPZ=*WEe::L2 LM` ;+󑡂$qOQzPzGc$Oo ǖEe2d#T ' eX"M~XU3R~j_IVZI|!(ܝ! "zʨ3dP0_!ؼRvyLcXJPd\V ָ_lrWrOKrUDDmmvelQigm^BQ-.^TB^p4Mtؒ*ڶ$)ۮ8U{Eul2Oc7[Tӊ*4-v\P=o9MJr"G6֝|MyslN)ɜ2S&{dNON%s%s)]>,~"8w ?lYEpNzJN!oSBEy_DŽ]~Lhܲ!и_p2=/vWcavLV2V [OG2?/w&5R?p= 6@my G;};uwB[}kl]DcҤԔNz׵SX;l EQ,32^L;#%849v_[Eu&(7ckzTjݪƬvc$tUCdޘd&d6&1dLCdؼql6Mֱidcul2Mֱل/ބ/6mM"؄/Lo$)$)6ImMb$)IM$E6I)ExS)EȖ")EȔ"lJRK،Uj*o2rFLzIrG1;݃;~_.KLZ 1یy`;:+C "S=)NWI,ohӔe^XĤS\uW?-(*fіK)(`\TX}A_{-&1Wq{Dd\!|2ĭ" \k\\4HJ1>ڊdIo].AzY"$/:>*W΋ԅ61% + Wwm&$##Ѭ]"KK9i>TU=2|j2dLɧƱԱ86=ul6[n />T&%0J䜖 3qAbV|D.M44yD'ꇡj|Hy˛%qjC: }YHTZBmCuPߐG}~Vdd(1T'U_qW]ku4<[pq2Q{B* 3 HyP݈0QXI^@] *V<μee[IJyR?JX5IŚ"I߇0p E P%( \/qh_BSx$!7GׄZЛ3xY%t8oVe2mL&c2Yyc2٘d6&lMfؼql6ֱidcul2MomoE6|&| _lE&|a/IV_b$)>LRdRV_"[)ERmEcwɧauػݱ׶qbxq-c ;tZ!t<`vZq8A:Ih;2@?!D"Al @TOrwJ.{| Р8vĥu;;2\˰-Ԛi|n˲mcBQoJ"ЇXD%ŭ$ ga$$4]'~bڢxL]̼LxK v403_hN7Lٞ2mN)9eLA]2wNA]6w{oYEp ";t8ٲ!x@1ܖE@Yc]B"8F8w5cs C $6=cww|Hh!и؏ [v?dwyGc|Ηpm w:lΗ|xfaH};_䷑)!w h }d>}p1;7P};ww~7ϻE OԻy.."+tݿ˸".dQ$b[3$*e]hZ.EDP |֙T-(Ӈhd&?tom.<,X%% LJ FmIԼCQl$:d01:yU_WHZc_`bcX7 I/Ee̫Gc$w8Z-_ջևpCJv(B±k)ɴ1lMdL&c2[٘̇&5cƱ86[Ǧcql6Mֱ86:69 "U=Z]i2(},hW."UdHOncx׉y;i~ifWD E1k*z/<(niKPq4fAyY^[gCNR~ ٵdf)=G qa(<LHX[zJ/Yh˶cZO/|l8ыY-HFN # !}]L /WK+~) *.*#+κT2U_ DP#|(9eï$Ϧt=nVS*T2ۺy:C˥R]nS 6wU`2oLfc2Yic2ɘLd2&ӡdM&شql2ֱylcul6͇Momm6|&| _d&|a/I7IL"h$)6Il"0IMRdJڔ"dJoJ6Rm)¦Rm)2s!KKp) M Ļ٪lх,IP m/:'yQ7!N4wjYuQn3M0Slϭ5-76х 뢯thqQ; ?KbYP~ =|%) 7}iUцR6 k~fgnuhE<*zZ ?kZ=9_^F:q(V'؁tA;) > U!5BJ^8/R>8$ÀPkl0Z[:0t"-9P-){*iԃ*̧٘&1M&k2d&ql2MƱб:6CfYU+E+ŅBQչRHs:R7j2MMfESk||Kُ{x_o25t6\ۗVz~c_CJE9D. jշAe]pH[PҼo3/gJKG Uc֭+̱5x_N"Zk_r):Q JAز5"^S 06"3J%rE@eeeHW{Եp*8q5?߯JbS.kƒQn-*o Iu~07&1ɴ1dL&k2d&ql86&ؼql6MƱ:6CǦ766L"x؄/6mb0|[T_6IIRl"诫l)¦]eK6uLsg򟯾ԱyVW_tlESA|cy Nişt&e :Iy "o.jF*ݼ Uz!.Ǣ+p3jnoZkv{5v8^QaWRVŒ5toO6D My µWȵ#Ky{P>gC.5uۿy|=eޜ2Sf{ʴ9e2Lɞ2SSS6w6wy .@]w]ûLoE=m",:&/4Ec8T_1Y;NN;SA|p hCS%N!7'6>eXz ~=fChS%4!锩k tcNi9m锜L#'>ŧFDN ;B}2hS}p~̧V;_a럟/H6&FapAp}t w sۺZqgF-M~c*:Ů(Gըj_8˪M'ڄ4NKn͵/[g"ᔳfĵb7-}K_ آ:RG~7N Q1ϗ{Kc8gpy(ELn݋D2Ɓ?/p*veףST?EE_P@jZtoTqf:7YB1[_.I- dL&k2mL&c2ɚLd:4V|lcƱ86flcy6˸ŷ[ bFQ6EqyurX">E347QIaU_8!\o-_~9Rܡs$'H5S6bo+#.i͜/Ma<{Qz4);;*|jQȴ'Jr5!Jн*0IUtb =&*TNl3;.'bIp;E(9|[, OKJr*K1gS\exRJ詊b "~AMе%JY9Γ2$JlD liwQw|Dd6l XI _vd$)I6IL"&)2I$Rm)›RL)Ba[)Ea[|2Ե=â@D'o}]b]tXW9hQ;?_[l\CA*%ryHC:EC +c~ rX"Gޒ>ɋШ\=58C&h.>r8,zXtx]"&=E1&-+)S|Xhнr15ZKg &U]ՁG/н.b&u).N87O!>JG<UËfR{\lr]ErpQaΠNSb,GT{O1 VlgHqjc$(_Ctd/}79eޜ2Sf{ʴ9e2ɞ2SSSk;P]fs.ߐ?iwg逆7yy7,>Ѧڍ~`)I{p~"ؾ~pZ A[QS(!7'voÝކ;d|#4)M tԵF:d~и})tJ[)hMd9|훭FD󼯭v)6yyGh 쾝7n t:le>2ycnS }ty}?)KSށS7tyOrDMU7FQ*˽U7w-MBs~ t m _ ݼR9чHsf/_"s_ߺ)(Pmcc<~Qį,W<-S)K/IGp1\cح./5^2ږp]JxGaHEMBºI7&^CW. AA] ,u_Z->z%:_׺ۄq*/;-E"RL|1ȸ|ci"zR:#pLNHiɘL;wMO?d]$[a63~+'*iifVrШqUL_zQ#^CMV[N^~VcLd# HE8Cb4shN+pasV]~fIgT5r2Lנ&#㠦?`n^TnD!_>y좒f&IhkT쿣s_AKͺ[akI;_NbzǬ yR)̻,86ZѪ̑A:яREJKRuϸ^ˑs#!գjj AIRӊ. 0<#˗Ԏ*W]˨Jyy}Cn͚|U+^zKԬEt2)GOD6a&M\G$_;xe-C\~i5q4(F7&S&1aO:6}ڱ86{iO/2ዷkiO')2IwIjWR?])Eh[ D'u~Yv;BȄ/FiI?~yEOKt)˫/zZpҧ _^}Ӷ?Vˆ/6N:±A|c촂 D 6@u@It&EbxAہop!߷"vF0cV=T5"*P_eCB(jCG}CttyI2?:DW/%Fe-En73-dY׾dbHIVeaq8I2uˆHx&ǦS>6>6u|lzzS|l~zw?y_̟1qE~|[ [tJfJ|L6x| "_c_SO/)?<DRw)* N<=^[72 Mܥ\ZL|9\g?@ P}p0Q{`?cmw)GD+RޡHIů:LNv7Y]sig.of`Qzʾ@ii tz17;"b_r:HuNjp,Ed5LOkc4 җF1꒛AO.Xǖ%F wEd>YŝV.UtUvW)aSY(*pkSR$'Z~|!UǥU"Z TnuQWDy:JwӲ߫ GI o8 N[Ri)8= TP bxVf8%i$t5:[Ԃड-d(_9#x,R(ԦD{ї"w!&*5HۚA!X>pݺƞQ4~/(ZJ x9MCQJ4䥪fUV$XڴvAlA'4Hs\[Tu)i1L6ɼ3yԱӎƱy؛EO:| _$O}:IIRMRR"RL)BRkl x1~b_t^ EZc*Mښ ۨQ{GR/E;/N> z/+JR oY`cRe/\b|}CxQVTDTyR/ ĵ9T ~CpPBqp1<*CE7jh5@խ&dzٸ_P%[8xfʺrm|EBz'?^5s[Bq¥kwD ҍo8$ΒdɖUm'BQ!ӐfcfcdtoPT%7٘L&1dޙ|lOcS&شu"j ]\b/5gX'EU%W! %@ET5=yaap!S׮J@(I7IHbѫ\H:^ 8%  ร,W=辕Lݿ@$܄/g@]n+B| "}C;T/[SψRiL1"H_e0(CJ<׵B ~퇼[pq.^e $K)})[,i*p2MgT|VGӠVZ&:a2?5?m2ygαccֱ7ዟ/tbx6I&)t=-Eӥ/iI.8yEO t[˫/؄/> _lf)M 2@N+AAv&ә : DD"ǎz$KF(ޚBugq•_DEBGJ"D0;yI}UƖ 嵝)[Hn,E`h, }  7{,LI_B4ByP`)IP=7Ź] +~m3%əؾHrS槧L>e2L8#P.2̻| Glt,~yişYq͟!C ħ' ~?t" "Sv) OYlX1N6F:p!4_GhL]2F>e!4o'4͆M2}9e]>c#6:b y?}c?]}鰕̰2=5>m|")c)G̟>_S'}y}ciH}ziWSZqC(UVjpl 20ojڂQnyl^ jɛn1U.Jʒ6KCEoY1k]|ϼenm >(RjSh)kT.m񍛬NbuEC8Q 5')E*<wW d;ߓL@g]e -pٌ[]vwq,#?k`OG0Vhj z06&1ɼ1dLfk2d&ql86&شql6Ʊ:6ǦC&ؗta;/8pcZ$ޤ{]+=>#,U"#ʗV,4i(7=etfZ}RNs(86t}<<.WQ;~:Ew 3]"CZ"5_@RD%U0'Lj[Թ+| Pr#6=I-={3y } ƺd,&ِ/H?T_ ִK˿T>彩KuʨRZ}R>^spՐ'Ej5g:Ð'lRJB\O*\եUS[u)T+Gڤ \8&:w%)sfUOkM1)D}fR sdGQ+))=* ¢rUed],.JPA$0fŬžBմr̠nRֻC[-ۗ`UP4.viRE7uHݝ+!**Rus@πㄡ׹g5|`+u}θjZ8nO$-}c$fq#<6CabQz s%N"EG4ݹUFyשdLSɘOM&c2L>ul6ͧMƱcql:EJ2I̚5"pH"5Y 뫭@@R)Z^hirp_"4H@N54)N4[梵Ka@\bVJ4:S}FpÔ]J_Gv8GTVKqf)JKfK/UK$($cnwѹՀw)B3$js@{_W:=D ts]ؾumc޵}=_G8@1-}8A:V;ӊ@L DߘIS Ad 2@ " b˸Mx3>"<ފR V${T.tA!}J5wmCgY% *TIpү5kʕdf'/l=ȥQ0-z_ wOp_i8yslN)ɜ2S&{dNON%ses)_GE@Y.b h,~"81ܖE@Yc]B"8F8w5cs C dn}L[ݝW#r]~''/z:&4"cBG}DŽ]^~'4e~8_>pG|ΗdaH};_FG@p1-?x[}Ǡ@S~ Cq8 /d}5CT/0t`Q/i`V(ktm.,2y".}|^7o NuQ/$(PԯzQ'9R<<yTw.o4EzC7!ME/ANQQSt+ɣT-ǎYVx袩b|bK^_je)7B+IթA5L F(qϜ#Za8WFFFfP/*L"*NEwd\ EߙLOMOLdޙsl~i&ؼul[i;2'`RN W,OJÀgB;(yEx/!ZVYbYp9/m ÊبzZo+A.!)f`@Sr\M6!΂q𱘔E-EO ]N)2I5 MY4-FҨÂ^4 _Si)<kI\#jꞛ&),›Ltxu$r_r /|l");TG1$2iyO85rmȮϼ .@ k!?HsUz&dxQuE=)vg (:^4}ea1c!CpKa) ˢ0cQ!FoF$ rզ_8" 5D)0bJϣx0/\s!,g(}BUU^ EE "DwR[ Ҧ/hUwVq2Jucd~j2d2&cSǦO;6Ǧo8O? _E&|6|m=MR$&I7OK~ZЧK6oK4x9^CPqpED\0/ %*gt7EL:@UNd|I`rooQ"(V>!-X;Q# or"|",38uL=`0KQEd3'hqnqnn,8wL o!bi<U(BEN$?ݦ 5WVi5U !w/WD ISYr p'lj⧣j2d6&lMfc2Ld6ƱԱ86:6Y&td{]rYy_%WȦfzT&\^n7F2NRHڕs5dr9)/tt%kO Zgdw _4|ѧIR4I$$)Ei)B.EȔ"-E6'=-8sVӶ>V0ዟV_"Ȅ/: _l Ab & )D @ d 2@=!bL-@=Ad 2@ Do@\Q$gUQJ^$wcJB E!ZIQR|[pƵeu~fAIs]ˈDtZć)Dߵ_Mp7}&]"D\/uM>N9ȅL2;}IVdK{ExfJykɧoѲ.OiwqS~zӧy{ʛLO2}.@]iĦ?w{e~yy7*/ڍޫMOkltC8klS Al 6@"'!q- Yq?Cz Yز)IoNCh䧄FzHh$Kh$ChC.[B#>6=cC>6[>6>6wLOO?};)o2?黼#'uiĦOG=bo2?鼼#4]O/týW_fJOpvfʇV֝dɻl ~ C,DC ,Dp?}l>>}S槧̟>~'=pҧ9;+gC!FlG'_]*d8;W2QbwȊ%ey9j}Jk!ѯ(AU)\^/L7@6y߽,=DpCm*4Ҫ t":x̭+rguU!:y):n^q3-vp}`j)CA0۸)gh)Q,B-*"u պ98uTeQ$Eq9}IHqiZ,)b캌Xr8"7 ]NZ ^zKM!' g↶ՈظG^RIImE8_"'z6&S&1&o:6}ڱ86{iO/2ዿ~iO')6IvIjWR?])EhW\C(@nW5O^|ADZрHC^MuMߚACoá>턚UI4nٸ!'$_^NV(yїMP[Sx"(׻f!xQQ:_h]VW{E ɗ_5w gRP>m¾"v#w)(5:>`QݤoIy'V :϶"t/nH@//kH"G2?r׳TT1$Q HPU¸wK)ᘿc㔣Vn!#Vל z(W߷ʼnL&c2d>4lLCɚƱ86:6ǦC&dc_j셷_h@t /3 SpʢH RdW^_ݑ[WsP-G#zޑU}pzIj6V![VKB*2\#K}PTCېӊP[w%jZe_2Dע?e!֩}[ XXG/mab3҂STSX @U k#|ۄk唰P84i UiVr!ueYIqX R8vyylHy$'gI^oнf=~Gm%I68\g2?5?m2ygαccֱ7ዟ/t"x6I&)tbIꧥ?-EӥRQध'ܙUӶb_?/~Z}l"0| _d z C -C,@=Ad :V۴A@Y D3)~I Ab Ad 2@[ HJ>[ |<>ZUH} Qp(Al|Y⽆ksq[L݄,y=2p}d)SO}? r8tܣRfd _ǻԳ@W5 1~SaBÚ\iU%ZrɪjZF[Z^oI*ea _;kUN9ä- wyZ^nSAꛂg 5?B]%E^Vn5[D1rr1Ǩ)]Lrb*#^VRƋyK1$9Me<:ݽ(4f<T8M<1"Cwázq+bLdLfk2oL&c2ٚd>4l7Ʊ:6mcqlMƱб:D\v4* "ڎ3W)9MPL~į2~VMs| "-k?P/t7sESPTƻISn:K ߨЉ &R*AnJJ"B &cE**dti:Mс**SD04*k甴 ">;)|,#(J L3*=m~7K.&Tk*Ň%*Iq-6¥n0 r9~E7.,L %(8HT,Ґ!ֺvʨ.Xiőh|sF=Uv@u"~U% `HK6U5ܵ#sAIҒw}IKpn.#bMR*~qĤ'%GYڝ (x NpPv-4dcL/H0=g5-آ 8Cv-vFA#̧٘&1Ldޙ|dOcSfؼulꅏFsx(5OFlJQ;uo \!E$=ͥXPH|}rI(B-3TB+UV&7K Nu*#EvV p<5b\`A,Qinrݦ{$&1C6&4zɗֽˏiP 2( y ZaQ}n8hGΣZ$'ZJ\p$q,˖^{R_)eh?d R.@ e#ū15{16&1ɼ1lLfk2d&ql86&شql2Ʊ:6ǦCfdmE6|&| _d&|ab$)~Z}l"0IMRdJzZ}m)¦RJC?Mo&:ױcڊw> _V_M]:ű@?ql6@mqi@ iLj C x&EL DO ~Al 6@ ,$5R;MǾ^օLT$༼Ԃn Ϫh9*^oU*RvcG$>[O{86,HN[4Ñ3wB%= z?Mq|rvL.L 񍏹"ᥢmE9W!_$ǫbס4LS&slO7ٜ2Sfs|xlOeses)]>,z"8w ?lYEp<n",1ܮzÝ"[B~pn ~#d ",-q'YlXY[z ?Ȱx"8pn x$Ch-󐩻%4CB1S wL}>6>6ا-iS~|l~>&';9и}C1q>~;&4;p /nW}2?/[ [֣vL##C h C"߇}NA-GcPww!t!w 8o7$zM?8vly+b޻G3ᥣo"G;ـ_(`kg,2ﭨZ}YwszoJR*pD>41DUZJL׋A2CQVTYl/EƒV[pL7։!(J%Fm#>v ,J IJj\}\~4ZPWkr%״/_"7:`qr5"":x56&1ɼ1dLfk2d&ql86&شql6Ʊ:6ǦC&ػ, Fxڍ+]*I_tZ.شBF-Feed&߯ 66z^>: {^F=>wmt Ѓ'.%Lwz1]/ /K+S\Ae$a M YB^#rjIpmQ,G͚DTZ~Bdz7ݬ4;'tE S>mv.`øj=Mր= sg+`uEPpm dhb=hAEy_) uY^ P0 ƻɼ1dMdLfc2YɘL&5ycqlfdcql>tlC"Ȇ/ڄ/2M"Ȅ/: _d7"ILbx$)2Imb0IMR˖"dJmJ6Rl)BRl)rIRI51rv`32*N(?>~P.EY:%HRs/M\Ԙt; ~W#KZ *'wpp,"t KIO91 HO56ST =\(ٹ0 O'4lLCddOccul6͇Moˈ6xdKӉzaG PV7jjkP̥x*^{Axд.-cYpU_ψN~+\m J["l8z/H{& ֫"%tR2KIbU[AAQvRUF,g]\݉>]ڢJ5p~ zΤBWR {fdV-nU3 88Gz[${#)!I2Y9r]LxA(0/FdF!;bW (>Okɘdޘd6&5|h2[vl6Mֱidcul2MMֱwۆ/2lM"Ȅ/ME6|"MRl/$)/[)ExW}RL)B]ŧ&ܙ/:ul޴;/Q|~q? ?Vy NgR_fR"hA c2[eW5E[T3WPFW$\{qɜ2S)9e6ٜ22S:)Kue2w2ٻeB;ϳt@CyxS}pglAS75=π :E8C7A,qY8#4,B'8oĉC'4)SS7[ͧUޜ|JN]ޑ >7{Gh N ;Bo`mt:M2[&??_ӑ:oLލ|y)d>:)@?)tO p_1_Ijzh ix)PY #P*zKG-S%% &i[7*:nϱylt8v ޯe}o޷>Jm+ /?@Ixp+z}/iBFnJT4 Q<"o樃Cy5Y+7֩'Z!U)Rwsl^ޖsfFl'K%RE̹:KQSpPnQ%$*ݩ؟ÏU9y>s7I ,^M&kr %j^g$׍/&_vIwy:46HH".7|Ðhj%_D vN0D^66bN'З0h#Yu"tm a 8ZPDӬVw RHsmlVXC! P s6ZD*T+CE^TU)(^L4L|C UGw}5 Q#4.âMRUA.})AtFR[u.ˏG E$tBu»HD ]HG Bve&Qma찹Tn\sQNJ"ۮwW p+A}4tj2lL|dNcS&شsm'e@Rj0SB-IK\oچpRQt䮊2j#kR1hV^è7 [}](=ʪ*-47m59^kokBR>M\&8%$ 7;) ]*w:y "9sAAu8n** uJY HBh-ƭ)I3H˭vڿ<>5>m2ig{i&شu]4|뤞&)t=-Eӥ/iI.8yEO t[˫/؄/> _lf)M_i : 1@ΤAAoؗxa_?ǰak%їΡݻ8e3lDߓ^Į?[SU?EueWpID}-Yk\qE| +r%iiDxJ9M?pE?Dyīv{axG >=e)9eޞ!{|w]wFlt,zyişYqM!C ħ' ?t" "S~! OYlX1N2F:p!4_GhL]6F>e!4'4锏͆29e]>c#6}:bN y>}c?]}ۻfJV6VdC ħ@ z Gp:2}9GO9i9ptT{?.0WOS/0TW*3i-ța%dDՍ6?WA=nEPQgED0I pz/ KNdS9|KEP栖iMC̥VQh3/KKf:(YkPq> &g~ ǟ͵l8xł"ۜ C#ŜSE>H_Q̋ԣ.qUZU>FgHej]vx .{+$vdޘd&d2&1dLCɚLƱidcƱ86flc|#e)2v:Ѧn_򵟾Wc4ׂ/5p%Z5MZVz `EMCHSCLԜ%.uaVܓH$J@W3hRP:KDsd J\Œ(4Ia"b(fiE6RB^Z*!Jo4.hĖ:)Z ~٥j2/>ؾ>Zy*N%%*Gb%l+EKNWCRNu7d?g',LJ EeW5"o\uu ) Myt e2 RލIE)BEC7IPѼu hW J3PF޿ 12@T{mNķ\ox+QENKD9BIJN?T(&sSP[/)vd@#Ǣ QF67&1ɴ1lL&k2d~3_׎MƱ:6mcqlMƱбͱ7ۆ/2lMbȄ/ME6|"MRl$E$&IIRd$EIlU_!S-ExS)EȔ"lK6"VtPCA 4-vuMv~ RbYp#zP tlƱб:.%OUpb-uxFwY` wbU&K ڋo/wnVܺq併!Z5ղڈ|˱%AܤW)n^xTe+:L@ K)g91FRPR$h)E3Qfnc䕕%/JzC.E^Mf59* F/T]-3t[ L-O$j5JNZjZWKnQqiQ?RKZ-pv0*?;M&c2[yc2٘d6&lMSڱ86[Ǧcql6Mֱ86:6[ElȄ/7M"؆/66IIRl"诫l)B]eK6uLsg򟯾ԱyVW_tGT_ ~q? ?Vy OgRÙԟAd Ad 6@~ Ș*3BIVmxE`,W!~Z`| ʐLY$B(A0](N}R%4iR5oyq\"_s{'vȋm4XE}pS&slO7ٜ2Sfs|xlOy| .@]w]ûLowy:iwg逆7yy7,>Ѧڍ~`"wo~ )"'E`|":%4&/g|:M2[&??_ӑ:oLލ|yAo!>z ǧ.oNyyN{p8wo~ /KJ=vKVD+GkW]y3%i&=-vR"sANwF~`,FK8G :ܲ4kߙYև\ʬPe2f,޲-d ~Z&KC!SݒAr&U`(iWks p7p<kh4W >O5P=UzhWp*^PxQˆRD_ԯ="ܿwdlL&?ulcql~0 >ɈQEz/ͼEտ(sAV ֯:tEK~e?VI-G"dj!Bz"%<Խq~!I~)̊lsÙ^#}Oc0jltJG UfDV^К[m -MFS8))}grPV1ʺZ4A *KoQ/L֚x}\RN {Ҥ\}Mʌ7;VAifY2~Q~ kS_:|=Ego9 y8"iVsT?eRV^n/|pyaT 9sl՗K]5 u4RRi٘LM~ifԱiO/6ዞ/zIMI"RL)BOK7?g8Y,cxbB6_w/2h%Ѯ/JX2. }dآoD_soBH-GS#qVl-("c&#ǩ 7IL)~H5䘺+v0IswU\GW1kQ!dEѴnaB\(`{R1iI UdLS٘OMƱԱ86?ul6ͿUl:߾?jKe0˲ ݳȏ~}"(<\Xo6tDKѱ>C%zeKsLr-5WUΒԋ"71Wkr.h^P/SGNF[_pɱ@PIcBV_:t1)d_,rnimJt7KS&1~ɏ?d:6? _E&|O:Iꋟ"RW_Om՗ _l/6d)zsl鴂 DdgRd :IL6@ޱ DVQ5U+ð {_6lKr.J}(e\ovR^msltY6}iK~Ƃ햾vWD75{Wӧ)?.cPiĦOG_"y>9V_뗳iM9D`N6@"l "`"S} {ʆE@,6,1fChS'B#uƷ锩KH>6cSO/cӻ̟c?y_4/ӧ/g?]}]6V>_7_&ӧM巗 ħ@ z ǧp:29O9i9';Kw׾e1YT:P'E_E KhkAtxo΢+oc.-r(|WyLs=o{wh;;-.SMQ^Ƞ2G[P2) \<}7dF) [ջ\2)mšMGMvut2b]شhw'$6E8E ig{唄?>?8$u>ѧ$gX:EWi1QܵҀmȋ^I$&niy8t-GRVOM&Mfc2:6?ulcql:zf|Zx`K5h+^촽u"PSQPI'4kCyqmE4lLC pl6ͧƱб:6CǦ7FDΐ%պ5w5דķ^greZBkC*Iϳ!F.5B_֖Yޕ`P``EF5UTI!Ƹ̗6u?%2BZ#3 i$ VیY*gbwpubVať] 'ïl/ jkYɘl V|, ΠmX1^`2IekWO}NpKJa RYQdc10A.kŲL`"(Zзk- x(˱H/b2%ZW]cCb&S&1&o:6}ڱ86{iO/6ዿ~iO')6IwIjWR>])ExW N~Zp Ν?m+i[n+vV _&|ae ~ C ,C-D@?Al :VA@Y D3)@ A" Al 6@Y HTj i,tB8.rYMs!ׯMMz7F˸e1 91C]sĖZF,ujIUǽ2mmC+2$גET-) ū&ۄ޹"h1PSd` }WI|BБL[:U+ٯCտXԾwӧLi{ʛO2.@ݯO#6?鈽#&/Ӽ̟˻{^T_OW_1WOkl~ZckVc) @ N~C8 '!q- YlYdX1dYlXt"`" Ch䧄F~HhdKhdChC'[B#B#?%4CB#[B#B#2u)鐏M;ezzSVOys]O9.o"6=鈽#4GM^y?wFꋟV_k7/p? [|Η[ [pvغ3L6y7R7ApY ć@[ GO>z}|vOO?};P7N~Os8wSlpQ`),OKHZVnʽ""HP/NR.,\:A (^5۽n&%˼FĹai0c%YzOQ X \d s[zpܰV[k' N@@Ҥ\"B*>(G=w&+~cLu48y6TŽS8AG}8ġ$ -8xp|d U4ZrK=&2?Ϸ`aW4INe TY"ҺS71ߺs2d~j2d6&cSO;6c_( đTZoTqô"I!X &iqi]@nwNHiz:sYklJu[+G(iǢГSh"MTR@Ns@#Ֆ赮$"Grt % $^~yJD5^8\(* 9a2=5?m2ikƱcӧcֱ7ዞ/tbh6I&)tbhv=-EӥRv\neI!6@y𾢷*bL.0-d[l:?̙}q %z)IҀ,ݤVdXEP;nF]wY JFYJϳ 'P"NqsƔ*"H[1uaE.M9@q":RKcphĉ"ezO~ {r/A "m! `K]@z|K5,醲?Oy t!ᯢ;Z UYgV4kEH6BUqȊ8uk'WɧW}s~E_Ssds3(d$dLSɘL&5|h2lcөcql:tlƱб:;<$?~WƙաuHsp;~]TfC7v@_*X7NCMDEFE,u)(j^˴8TwڈM2tCjoTk-P"g6pIQ:GJoyQZԆ$ٕ…7Y% f$څY86LxũɵU)Bd w+8xm 0R I2ysC- \TŐ.e!|8,mH?74]$)d~j2d2&wLcSO;6Ǧco? _E&|6|m?MR$E&I7OK~ZK2J]IO Nt3ܵO;!|V_dŇm"S Ad 2@l 2@?!Dbᴂߦ@=Ad :ILA@Y "A=Fjظ(kN@QL}!K">L啤67Z]/뮸d<./[Rl}[\✚EWD (D8%)c#.Q+"iWv||#.]Fz!8|ǚ[W/̻HLSL>e6L8ezzwy~uiĦOGtwyet^ hڍޫMOkltC8klS Ad 2@"l 2,~J ,2,:deaSz ?ǐea!- !- 9l d d lt7cS>6=ccc!-{wӧ.ӻL;r]Dlz{Gh|؛LO2:/yyS}>]}p_U_? [|Η[ [pJvغ3̟6y7R7Ap[ ć@Y O>~}|vLOO>};PS)r8tFD!r}Ud@v;sZj_9x N)-~Ŀ#wIhI+Ye@ESMDP"JL߃~9U\$YJWQȢ"nP .͢UԿcVDl\lɽ.pM&Xgf-q6м {8Zdu(Gk~B/WPᬈ#:P^ic2ٚLɘd&1M7cƱ86[Ǧcql6ֱ86:6YfhȄ/6Lb؆/2&I&IIRlm$&IMRd&)IM)BRM)¶M)¦aS-EȔ"|X-EMB--"ɮ̡?| c\u-&Z~n./Bj] }ȱ5hCIIqul{l8%R.V8vCE"^ 該g+|9. Vl6u * ;TIO=F!?e%  '-bL.(/KNCN%-/G|LDe6"uPU{sQbNd2&өlL&1&Fltd:6ceJAH)*yY ez^FyYNOaʌFO&%.R/G-dX+f`Z} 9/7іGW L 5` 772<";R)A`gh}͇.ԂeƩwKpk-SFXX~NQWD.Ya<01G˘dޘd6&a_dLC~86[Ʊ86Y&|l1lMb؄/!|ab]w$)>LRdRV_"[)Ea[aul|7б?{V;aV_:_doש; A86 8c ~O+AiLj C x&Lw bAku-*q?l&$Ց˰{0p_h)\ˆV MƿѿM qEg"8A_^ !{!sdO#N)=e6̇OA]2wNA]2wꞚcC1t)cCf}[=dvD@!csWc?F8@=N2@oC8A,2,,-=cYdXe[B#=$4s8y2p7hvp?A)o>~C;;tIՕ4(Pޛ"?Vc,VI:ZIM$" C)?5kyT[͢R2'58W-HQ"KEpvuͤ2ds(k',\װ5UjYރQmMѵ)RpWVi/m6n*RPм"ܲFłL*6t N/wN8e)C5Xo^ڧR]U`2mLfc2[ic2٘d2&ɯMfl6Ʊ86[&|d[}D|MD_ߠl,Urf}XԐQj\)$.2MNAT%>JnTiFl$USKzfY 0Qa/-sr.,RJuJ;Wc}KIG$SU-exqN[yJ\86i(yt^x-4AF, | ɫ/C۲x p>;t ,f3Y#Gf _f?pC*Wt:<,2?j4IIkrRiIV& Sx)EA<ܓvKKYUGmv8ꕩI]o_(U7Ru}VD̅}ҷ1A-}f4Z4R}`2oLfc2Yyc2ɘLd2&fql86&ؼql6MƱ:6ǦCfdoE6|&| _d&|ab$)$)2IlM"$)IM$6I)ExS)EȖ")EȔ"dJRK-))cu(LR^[s$q٘B.)wXǰ NPU% UyOYPׂRu)k 5 'DpϤ5vTR\4ߩU*%)+Buk&֩pC&o(?bYEq.GIԡ4R577Z̈́Y.$='Ğ4gRGZI/bx]#܇V>V/|c*7tkNhQ)1YcdLSɘL&5th2[86Sf|dccӛcK ߱;ũ!e].њQ`lѯHۧ:ݍJ!7U+Y8yI ꒵>L*Qi󫢕鍜Z&iq݊SB[liuzXɻsTf^ E뙨ĩ MpkzPeuY:a)'3Tg7<d|8)cE1B#r8-9ȧL]KhC `;?cOi9m̛#'})7{Gh O ;Bo`m|:M2[|~̧#uژS }ty}?)˛SށS7t{>^fA¼,'ܛϭzxV,A4l@]Z)V+(bET6 E{QXqs0*^W^41Rx“o(B_=.԰:)xX~.۫bwKVzq[U W8 %y+)(ѫ^%臆ڸx/ʹ E/}m@ lXu}MlKlܽe %"+ #S]/b +O*^e i{vcIV3$v!;1/7\p{iɘL;wMO?lw}ՇRtUDbIn1sޫҲT"v5sm$F]V; qVgYVĖ'^$.7x7Vp"+GNAklQ)Aea4lZ3(<QGI;/dT8`̽@J_<{^fY cW ^41"Ҥ&ʂz E!iZ/ +|q$j-AF: bg%pGy+6%[ztL1waL3ntmFr| "z4ݹUp\T)f^+"*5r*BRpлE".FzXS'YgCzϫ%\[G@&@&&/BHd>4o% bH#xjW2)\%7PJ(QEu,V8lF˯Ej"UXfef8B\U7wiI NYֻ}!D=iɘ0O?d _4|_?MR4I$E$+Ei)B.EȔ"+EӫҤfAA\|#/#UnjJZZ >C)z%/]yaY+,xj}IEqDl:RrSvá:8E=~D'\]P- \_^mǘul2Ocα Y&%-5J]f";E8u妾^ Ie4FG~;J:&E\:("U`OY{zAS*B !Yd l6O_ƥmKW:Y,dx_pG/jCVQ@zD.g^^s*ŐL'RsETeS2rZ uK(rEpWQhQ2q_(Ģ?x. =>3^wf\v! ^ieSB70]}Nf$PUTֆ/o(+F iɘL;wO?lv _4|ѧEKR4I/i)B.E~yO Nt˫/~Vۊ_^}E&|i"W_86 Nql6@u@VtZ3)6@ΤAAl 6@ 6@ ~?m&]{P$Y*ޗ6ϧDp|Q|b_(,KJ8 ߰6xz`V^Cڪ-ϜD}lN|e]fsy{MؿEO2:/r?9<51Dpp$YdXt" "?A8ba) ?=ɆȧN6FˆHL]6FC>6>6cSO/cӻL|CBqĦOGs!8/ӧ9p w\}񧫯_>_V6V:_7_&ӧM>/Al >A}l>>}}ӧ>~Os8>TWlJY"{I/ j9_"<c@aMzQ܋WMtzdɻ(w6Jd[oKN49F+ԫ [ dmW(RVl0 1_K=ǥS]>zRET~Ar3@!~BC]T<%^OVCe ' }1_ N zxQ-]^_W32u>,j.(xK]ZؓH!kNY_OFd{L&Mfc2oM86?ulcql:vmD5 = J*nNj@SgImO!+^6Iz_5EGQ_emM?%7E{>daL HVUj^gɹ"#q/+Y+~ .RZW^EP.OqlԒ"FG*k)~)/\]S>)9dQ+C)CB ?&&x_<#GSP?%@fLvSMٟaV挪IcФ imd|f}-khkGm$8ϗڠfA(,VJP8!S=rq_!pHrN=-~0&uYDǒ{STD:p|n2d2&Sɘ0ȱ86:6槎MƱy,ةl&B,.Z%hg` nNؘ|+O 1՗y dI2ҥ%6x_.SޥW1WW!>gٵ^I?$=l?CusxE&; a*$PܵAEU9]NZϗ_U|SWN"YD!tڽa-#w|UYs[ J!-ZWj/ qSpsZ{*D4X\~nWQ/j^$~ͳM 2rdCv7f҉^I-M&ӧMfc2:6=ulcql:&|E_lm&I$ENR⧥}?-8/i[An+~yeŧM_}l >űAAvZi : ΤA|:"_AAd @v[|ŶkM|lIM#UOJ/>/$ wE%y뒛btKK=W\N z71w}ld{wTU=/xIʪ8q^][/D]}N?]cC' ON2@~ EE,6,ĉSذcN9ltdChhdt%ChOh6?=e)r>6?|>$4Glt>}2}:/Np}e;l%3la+a+ue~j2!S D=S GGOO>}ʿN4*Xܥ~$~Ӌ+WÿYr9΍~K$qKHdT4Kܓ6fH&o/WcFuU,_ZVk\GrT Eb]M,,5|Ͳ7(@*‰,勾-A#"UMAt U EQzE8E纬\m}[]knD^*L /~)ע2HU˽YtngʣG*fLdޘd&d6&1lLCdؼql6Mֱylcul2MMֱE[;Z-d痢%*VYP]UKĢ1Ƞŕ?dE!4r w;^/X;k(ɫL:=4N_щM^_hi\أj $tZPM Au8RFҺ_]\ 5_7D㄰#/wBE TEoJvҰ'%DEeD4##MGA e""oK4B+O'42k )ʢOS3>]2@@\ V)2 ]-.dMBh/hRԹ!ZZ6HK_]F wiu쩈 ׊|J;RRq]wqv"2)|Z,A*~y 87^XMD)5o8v"(q%,N"DxD2銼mYJOr`9PLPE)HK+単A1X"*)Uʵ}BY=t\WcrUU{E!+NmR6)k_{]H [P}R%}1(&! mn4FqH IGT~9)ӺLIc"24 ߦ&Dtv †T,ľ8k)sGmToXH*D2Zd>5|h2Y٘L&ӛƱ86:6C&dcKAq=4UJ2B(8`Y z,Qey! *>]H",W#1DQ܊E,R[Hng d :4z̈V_9M[4P?%NM]UPzη8$)UPe&Z$3B"R_F/rAE;XW#'1DѶF!, J.]Zw ^p/iI*=Y{b ۉ`v^v:e.W}># ;MxD֗cg"oɴ1lMdLfc2[٘L&ƱidcƱ86flc _ _dEE&| _lEmU_6IIRl"l)¦]eK6ưsg򟯾ԱyVW_tlESAtcy Oişt&e >Iy D"m:ǰza-u96or/O^4/М2oN)=eޜ2SfsdO)))̛uysw.ٻ.]&{w,>ywg逆7yy7,:ڍ>"AtpҦ!"A|pZ m|" >dĆC,KC1;B#r8-9HL]KhCo 4kg|lc)m6y>6isww/:%4&b}}|JhM^?͗t Ǜk7e>2[|OG1y7R-}| Y?S>>uys;P}t ù' TVm9ezr,E"[Cye_D}}d\W\ZN\Z1kG//֋u- 0kޗ,LPZZZU.Z/<$ kQnXU\F4W$[f=#Z#us)74̋}[)|k@=J)+LRUu-s9ΨKʊaZI*ʴo~߲IEڈ*]M~MDhzU.E$!~%vn] Z$}_[:gt M&ӧM&c2mM86=ulcql9N`#.\ΤdZ~IO1-\ e8KpdLE[vfaH/Ty4Q *ɾlsʼnM^z_|ՑgaSyG"eEh̺n>%]EˈGrqt!pl ZJR'o:JkN*z±Wx"[FV%,~u#+Eg c2*^QR)/ZX@M%^our`i"?5!5j} DAʠ 6AQ}H  +J!jK;;JYPY7L*raBRI带h8tY[wYLS0N;-iv`,k%Hq5S`}pORH~adwen7pE$GiB$12^6ůDŨG&O}yԒ2|+zD{ΗMDERʗqS6`Smo)1Dx-se4Fp|䤢R3CZ7Enn[%^Vߧ|T|$d1C{Z<*2)Sʵ&[KRİzsd2&өdL&1&:6S&Ա86o[FB2~ b]{R4!'<(N"[9x!iQUD}̷}gԖi%WVYVTix0i*5&zơQ)\7ea{aX<5x<ه:H[)_m '+8T׫22R4qm֯XU,J]\[I1iQxzʺϲW% p!4_GhL]6F:e!4o'4M2}9e]>c#6}:bN y>}c>]}鰕̰2?5?m/Al :A}d>:}}ӧ>zOs8KTf,'g% ŞXVsZR*N[Kc_K+ѽ_vWZ/ۑ(rdrym^W Z/_$9{"je2|GUWei` o_{x`[N*QJRC4tHR T iP3y835 e3b~T\>D(Dn"qh /LO^w %i%p@]["}EZ˱SYC^gX.REq)}dzj2}d2&cSǦO;6c tb)H{4 O謲`ZL"X|[ai'~ 4rxNS"_A% u/5-Ԉ`WCKZrrVm`=^Zc_n$)%])OKt)Bo"^] F{:{/ZPtù_X"՛iBsH=N7|Ei3s+Ds\~?D`0*ޠ5wiyn|//^O^'lċ~p jGkQ_m:9MC% cAY54k_ :xmWxP6!D-]I%ђ[5! @7{@ =J͊ >hܭ>JV,MgsPEIT8$pG_ǾZsx'9+.6|;+lLS٘̇&5th2lccql>tlMƱб:5E^alP.^9A@ i " >(dDYqY!iUiTk_^ޮjrA LuT7`z.<1ԔJWUzcXk@ KMA_pG&j<6 Lj7wkŚW҄1ؔMrփZY/n≗[!`2iGM* `^k-/ج,3 Ip]EjZBELZ^546PJVtW͡8CJa+VۛOMOdښql~ifشs]?؄/څ]I>$)&M)BOKt)¦])+8iɟ.8w&bm _&|aA@Y D86@?Al :Vӊ ~ C ,DÙY O ~Al 6@ ހ ٤&פelz8 qA%&dz"uTV꽱sac4+.o[[9`ƛbԷ zo_萀zH~Yj 8bMq9>yeQ޳TkRT8푡mU6 xx?$eMʳANnF8SL>e2LSezzwy]Ħ>wWyet^ hO/zZ}ѧO;&S Ad 2@"p=%NCYȲذ)=cزذE@EHO HȆȇNzpB#?%4CB#[B#B#2uhMld|fޝ2?=e)h_O2?黼#']?wƯ"O2=鼼#4]EO/týU_dtld|8l%;lݙOMOl ~ C-DC ހ S}d>2p}d)SO};r8tV!ȫzUf*U+ǿ1\uܛDNgUP4DAxvP?Z WBOț_V$l sfYv互&\O ހ.H1K:unRN܀5$,U76@^Cr@!Ru*fkeAJ2oQT@"#t0NtdBUgUGm& kqpsqX\B,ɮ>fr +41lMlLfc2[٘L&5cı86Ycql2ֱ86/:6}8H{QQ:Fg#+ZReգh(jQkst5vIU熂7J5)&"">囜' oՍE) -A$C& ;CmEKYZ]8#+JMh(s d[,:r} <jeZGE6^Q HD->$G)%DFUХ_hsOP( uMRv>ܥ r6*n}ǀQt}# _^p"p>ӀpAKJ%k l.@޿|TRc7<8|!U/0P׫E0_IGHGj|C44<\% NfQ 7TnNa9/)Y uW=_.}(e(8<5.c|9AnV%ΚDHFR._C"Qc2ItG% rQ'2I aȵꯇEBv,dd&d6&1dLEdT*5E5YH52 _l?V_sMh_^W2̭߫$Ljp:Ns_/Q/C^ OG4s԰u|Sfױ1>U/y$ꔸͧ)T`_;lG{ XsNW<|=/a_dL&k "c2?/c2-L&/dce2MƱ?eشd{1l"&| __"?/^ _VYś&Ib/V_Y}-EȔ"X-EVMV_Y}-<+8?M^tiśײc X _6&|,|-<hZƱA4ñ{&<`lZ:A -ϤAvk"x+A^:ٞ7"?2S9e^ڄ 2@̀} G3ᅯ"?x[ug N+fpo}MbCi;dwqЪP2a#|,h%,tU .iH 2-ʹj(| yM/8>r.T("Oަ^"HO YzS0&"+ܤFMzX*rAsxhPwEecz\=!;P'Tzt򑤐Biʢ*.Jk*EzM$s Wtj8Q]O$iBOnxFE,V`\0n[K#5뇌\l0/ܬC3Z(MD#vnvzq¸*5ZF0Pc!\20ďJж"7q\ũ걪f̧Һ*<eIޕ,ΪgAؼtԢr;vOԫ<;hSx;+|*Nk6eꖂHy k%-$"^\&//t_ȩ,XSsӊIOuL+Rql(GDT0 QxRqPAɴk2m2yjıiױm& io/2ዧkx7IILi"[ۥRQXKb/9ѧ y~"#.1n)|w2 ↡` O*OPЯo(Uuh|V]ohUVJZt'WDQ7N^uRBs-cw=CB=UW:V.C7 ^|03zpPEs7qo6XQ2]? hDoq.H-o89?YUފWőEaܕǖ.#b4BΡsO o' >4(DnAvitE̻$,/H}s*$!J4ɴj2id&1M/L86:6ǦEfd?[$s}_b 8[Q(ɥbǖ`J{` -<$ds(Hh8r(} ɉXO4YyaR٘ l&RwWWuWX<0[B>GJg}Q[9uE(v;Qv]% A=9H1Ԯ]R(!P2Pb,q#KKUEQSU{?_bCF@S)_ B<4Y9lߌq\=U;ϫDtqቸn}XHNQa?nY}d56<3yؼcql9,|nE5KR$E&I,IJ-ERL)BRdVpnIo3 Vn[Ao3h+؄/ڭhb؄/^ _ D@mAl 2@/d 6@A A8` hM -DřY D@mAl 6@ Db /.:\8iHǁ[b~sy$4ʇ GR"2-7@D`;T#G$z "6y͖͆M|l|))ۧ<~u?˴{<#'YĦ݈MoG#b2e~;/_V_[}l G_~|7ld8lad56y6R4A &""D".Ǜp[ NjpYovʴ{)@Sp8iIos8g'3pP1.)#)?A46r.Cjky|'~7JtI!Eb# >pER`2slYۍz}"E1)'aA3<ʎWD!J If ZË #]!xd=N>v完DveN𭉬@EpKP6Uhp[sHBGjp t ݣMZHmWT Aţ? S'4.Ě{1< 'iM<ˇ4)!+Zf<7wMMfc2L96:6df-PުDJe<~_WS'EE!V.݂̕SccT91*υ@<\Ύ^4,R/bh I^ C#Vxb 85B8DxXMQ=(PkyOWൢ(Zz^9֭7B.uPޔK)(OU+U4y,l>η輤D&(ˍsx!8~!L̉"n BHKCNdCRTcr U15Gw*=k?-ߧج}z%+|PY8إEA!'W'=WT,ÉrE$ri \ʑ\WT37- Wh١=FJQJPjG@|TEFGY'w,V^dڦTjMw4jk]tP-EnbX*w.=+V'wJ5(r._C|u/ /D_o!1$,&&ӮlLǦ]Ǧc̱gvȄ/Y$o')2I~Zn)Bo"lJ"V&>fYru"7)Jk$-x)]Z-eؖLcEtqQiGR-c^*sR_USxV=t7VIT J r~<7wMMfc2OM86:6l= _&|4|M&)z;IIR4MRRvKzaSЬ[p䏂sVn[o3l+L6/ME6|hM -DE>pl.D@[ ċ @ v Al ^ILA &D"Al @ !~ك͗|8wwp \Pu~՜;$-ONjt)sCP_! y<[W.b57BU:8\({ kG8d^?:gY&ڿ(ţO)̀ತXp$(7"E{|l _G8u;e=ezɜ2Nyvi.wy~YĦ݈oGtgyv2gO/ޭk6&56v=C8?kl.D@Y ċ'"]o'زȰhEE@Eޤǐea"?XȻF$4%4!4"?8HF$4%4!4"Sb>شǦM>6Y>6>6/gLLoqʳLw޾3r]ElڍvĞ?#$/n^gV_v5}T_l;_2a+a+/[[g&ɳ]6>@  ǻpo}d>6p-}d))ۧ<u?Ny]'AΩ[$^].EVCm-wpNdx[c?#<eG#qe5M\򶿒OVx~龨N3ՕArΏىI(*©wΤиr\%D0,oNUϑd3NA۱oĈxq{Egz~9 Sh:@t -E$v$6'}I܉KkCa7Y:]Dc,GAa,z3Dvczg|}/Dh |©zNj0;%P7 ppNj?٘dd6&5ɼh2l'Ʊ:6OcqlƱiѱñMIb؆//2MbȄ/Z _LIb&)$)6IMb$)ZLRL)“RM)¶I)¦!S-EȔ"XG)"m S<xv*t_PtQ, #oX9u8HfGYc1h⩏W2iIc-\IXCUzHw5"ũS+xD`$R*ABh Oz({ N ԱE;ׇ6BQY*lg]Mh]|P q󂾬Q&Y9Jw廎DOxnKp -ۏ^/twB:];)㎃N- ЊS*7")#WDI+rPټ+~ "o\s<9e6LyrlN)=e2LL겹˴ 겹˴  OY"Xg_LY"Xǀfu 7e&`y 7 9h"XF8g569xZF8A29yv?ɋ)6y_˄Y&4N}[&4qu 7/|yy 7>p|6V6V [WG2oΗG3?F@Mob}Sp$>**GpקZлb_(f 5)iqCۍj cR.S8D=e1+X Nq}WQ,ɧF>t5A ]Hh჊D'e?ܜ2HIVӊ@n=D#!-(oTDrqeINT .ӋЅsT=Ļ﨧"wp4B>V,BoE{cj; 1@Q+'LԢ03ɼj2yd2&U&شdvc̱OyBTS$>2yt%}i6V4CVh)y Iue6=^@i|D/!AZc6< >P]W?w> h@!EdJ!dey? 0k0 H1@e "-/Z!H%sWԨm,J_'r:v蹦~·~oF$6Uh8u${@wcPp霾7庨 }=?v.W ׋ btUe$^:Wib2ɚLɘLd&1M/Lidcı86flc _4 _lE&| _dŋmbhmbh1IG2V_Y}-EȔ"XG)hkYacO/ڬ{V|8jV_Y}-/6gkǞA -d 4A -O+A*muM>2muvʟEr͛|er. So MhhݷLhe"//eڜ//fnq:/|yyfʳaH}:_H}fH}} -Al Apgp*;h[ugBS6e~/"iw!g]k+{ԻWzmCUSkUo(eAYƂ+75 U63x<@~P;2=U-.kW/ivq,e]˫C~~xW72ޣGBQ .ʝ$(GA]C,cl,c[qz:+| JiHq|֝̆#뱎?E9x\p>g}JBz! b>h ~g%9͡|&%.MhL&&1g&vvl23ǖh Tt{4:1o"xAf:AIPr/ʘ/#¨.2ciu{+.>e1pIMD/2~w(VKRAhaJiyD5\aj>*t}r-c.FAT/rl9.s4YQ*چz0z.'HdU@DkE7p(O J"hF0#ǢYޯ|hၔ[ZӬX CNXDȩL*WSȆeC6NREţE1:tV)"YsPq|3*:x jAo؅fgkBQ$'aS&)]kQּ^`*;K8.t3>Fg=o9@ nJ;U0]:xSEC>܋Ņ̻&&1g&wvl2M3Ǟ/ _vbh&Iv$)%Y)»])EhVf:-i{]m {o?.e"qpQ`>)UL|N!c5?41Pf4i7}U/H2$ÓA3kq˿2g.<%Y5>$ 'Xvbˡ'˓1|",_ii.[Pv.c+jU"-⡸POk𭋆`"ꂮ(Ȑz0.ĠO#X4~rSFPGš~*z !KV+nd g"cd6&lLEɚLd^4lcӪcqlZtlƱiѱñ CA| H5&&&(蹊Hni*:BRq"(E݋l cwNܾg2Lod?ululz۱86{h7|MY%)MRv"hf"v)Bi)2)8y Ιɟ礭ݶn+fV _[}fE6| _2@A AcA &Dbⴂ?] 6 @ gR12@A Al 2@ -tT +#uy'03K^]PeS/εcG/_J,ZSyDzYnVc.o/x<4֖U'9NJ)9NbU+ )Ep$.I8ך)kY6aȈ+Oţ[jsbKS~zʴ{)9e.] .4bnĦ# س̻y˳G^U_[}l Y}Mjlڭ{p~l hb h Ȱh8A ,6,Zdq°xÛ,2,ZdKhMB#[B#B#-r8iKhMB#YB#B#/2ukشǦM>6[>6>6/g̻oqʳ̻w޾3r]ElލvĞ O2e~;/yyV}noW_1ge;_2a+a+/[[g&Ӯɳd ޅxc h" xM,GE,7;e=ezg)O8ᤷ939ߢ*-{+h7Y*vd5Y=0rd^|`<&z55/cշ-kC*P}B]2&'2!C|4dlNc3Pܑ?ŁhVEi|B?8P*81FI')D'wѺ1CAt}-<$e(]ܸjdI+HTnTXs׶!mQcP94im2JKu(}kZۈB0R %{tͱy!}/#C9Hzm^.Y~P,TG$k(HB=Xң"enz[/V.ѥwQQjĆJܝ[0" \iuQdz;9ݨpG_*H% ǡH_#٠ .\ʶt"Sa:ޘ[_Ln84D/T`$ XwʢځTm࠿FlB]^zE YV鈞>$-|_xNБmtūkH]U,+n""5Qsck|41lMdLfc2[٘L&&4ql6ֱilcul6MMmOE6|$| _d&|beO$6I$IIRd$E&IbbȔ"<)EȔ"lK"dJ2RL)B"07_zWSM=zW?:Kqi+ $gB슻 Cj(*{(9\ؾ8*ʍj0~`]MJxD 9䝇>vj$xtIt}pWU;rRtxa.`^K?BI=E!*9[Ri ,ꇽW%jmy?Aς\RG pkfC#C Y*2ĢGM]97|^c@ e#RM<ͫc#oTD*Sd,<*۩@!Z.hHzd5sib2ٚLɘd&1Mfk2cqlflcql^tl&|$| _lM&| _d-/"|IMYe$]eK6ͪ/[)E诫xd3|E͓be/^ _W_3 Wql " ZVX ՙhq& 6@ f@ D*PwGb EZ|ĕ&mԿ-Z <$-SЊCer$/woqIH8ޘڗ k0Aѝc\ڑ}x-$<‘"^qmϣ9e2Sf{<9e6ɞ2SSS6w'wy .@]w]Ż_埲hIĞAE@ـϳxu Gk6{E0xI=C8߇f@"E} hFU%N"}Čë,KEW9ȋ?OhU%4"S}B7(ͫUؼJN] /^%4$bf>Z%4$/2hR}p~̫V;_a럟/H&&FϗgpAE } ǫ.ONyyV{p8goN`/8˾n!O\[Ѯ 5 g Dz9Hk1Er.G5pWW]p/.LuHXáGH)Uu$GWWy<b,}WS^} 2>IOty,$o5{QuFl y~HuyϽ?^}нi8SԘWwC֒YQ>\P}Hhat?^/NFbqoo4d9M^"Aȸ^%E&5v|QU&ӮlL3]c̱+x'SK9 CQ\.SCu1<:@q&)tn%%Sl 77MC71nO)jc|Qjy栟w!$!.փ.Y;"Qd?,HQJ%bh]ED5xM< 8=l8>H"xREsVx&YP&Υ܍5 ". ϫU6eаaU}(QГOCS G| t=is( HB*U,"UE֎)0+*_:YhJ _/4aeǴ+\/AHQǡ!韛@8ُDttr@C;d=UhkMœT9@h0%N3r8)tXtګtӡ>/)]O)Eptr ,ɭ81syd~d6&ccێMƱiسE_l}#|4Inⷓ$ų$5+ExK2JHCmRcWTHZ!^'/% c6Ըc “lq|Qר>֝ z5\ ?gMh a}!X ԨSdtDJYG sYcXDSC<"ta;#6 d$q/̂ elAӻr.WcƷm܏ LQ1NϤv 7I3rNR1k$6t:qT9&lL3Ǧ]ǦcԱ'v؄/I$Eo'_^}n)o"݂.8yEmVˆ/6WſZűAc촂 D 2@u@Ixu&EbxAہ twSyR#u~17,ԸzC2/Nȸyu$%lJ-)tԘ^!*Jrqe,Ҽx/x+jirRpm$ㅗ%ދ.>ӸTiY6i !¹;?qE (SSO)WALoe2w"tYY[}a,!56]cC' VN2@v hEE,6,ĉUذcV9d$Chhd%ChNh\cc* :>62}ʿMw޾|EBrĦ#2kи[-W_vvfJV6V˴k2m|y"*D#*GSO}9p-xǗy$)W+7 w_{H5gY6;h2$QI ƖN?_>sD~V_zpovIY kY؄'"?ղͼ! ZjZLZ[Qdyy![(snh EBwJZpn1.B&7`znƐ8HHh?ФlFV\2$(80'&1<1dL&k2id086Ocul86&dcӢcul3woG-N+N#6J#Vp[W=eDgt{y8L 5 F/r6- NMiwl*y}Gy,5,پmhLn(&J@gA=t}o"*9[F~Zqc[S^tݵX2cK"Gu~ %4-@Zi.CPl۠f|eɴ ס7E39tUP+.dX|$~Ӊ Lf$q5,eB Iy"~lb!$Q⥭TjDF-jue(?tTMU7U(sqZw. A(qC[~qHG@w??dޓj~s<{KB`ˤn"=!P@Eyb:5)SY/ -k)p,%d2&5'&1dM&c2/Ld6M&d&MƱ86[fؼ&|$| _dME&| _l-/"|x$)I'IM"&)6I$ŦI)¦![ФaS)EȖ"lJ^,Eؖ"⸨X]*#缺N QP-UgU.z)alC% FVJʈ 7e,)hC`V$*#C- OTR",'zӛJ=l I "&U}u B-9>BÛuoF'Nz%?!}sL3|%U ( m?.#"c< ̂6|c{?!wQŢqD2PL/Z\Nu&5Sh\5Cqd&1M/L86:6Efd?;#Q"ZVP}XXNڒJ<:ꤳE펚 3 W}DkAޔL W'uœ:2;h"Ҥnk" G #^Ŋ'BN {?8xBEc׾9f"CP1~7x9PbWPp~H PWp…{mJ S p咠\ɥvxi}2 sSdɍ\2-4QBZb5 wR}"Rib2ɚLɘd&1M/Lidcı86flc _4 _lE&| _dŋዾ _?lbhV}$&I_W}RL)B˖"dJ/^5&?_}ѪcӤ9h5| UAcy Wişxu&e ^Iy bo{oq ~'@21' ~ dRt; 0*XzU%ꨱ[r-זKL(7[tN6=ȱ"KJwƽ%~iqj(dgUS)9e̓SfslN)9e^^,G@Пx9WA] pB4pΠ>QjpOE'O9݇$ 8uyp@UZD?Rs@4L ⟤8:Py]o""oy)~j^s=|<고$y"1HjeX6RIt@E@%-du,c{S3 .-8QTɵNqS?$vϟ T"n:AdxuHDb$)U$KeW'ikE|$og]$[6\˨-cldz(˿B P/,=rO{b2LodP>0rUyrщam)<nXdwEЀ'4&@̻&&1&Owvl6M3Ǟ/ _vbIw$)%Y)B])ExZTṶڢ: wע-ϕ 8٠렺mq8wTDŽ[ɍ\{(A 5(gs<Xe!e!O t,W8])' _UQ k(]>dc 7 +L☍:Qs/\ꥷ!ø*X2"O::)'.k&RA{K4FU;8p -.b\;m;[Ciau@>"){.PNp)džٯS_7ɴj2id6&Ufشlvc̱j[C(AS9ԟBRײvhUuZ+i8RH̾hjM8S3!QdTíeCٰOOCsc<"#3DZ `\ЕZ9ӪHa5FH6ܢ}/s7*,QUpSIf&U?p c7ԳR埤86b!SGP.KF ^6ez.>q9b{Jh\v^^fᖫ/ze;l%3la+a+ue56yy hb_hc_)ۧ>peO5wM'wo]?G3^Hp8~&S,zRDpuٟ<-p{; 0?lM=fXVD𫾩_P5$cuT>6HEždmj:ROxB;Za@yXܚ"8t>MF7:'$msRԉ_7D?!zOY^={ \d\sTxHɭ!r]tV!4*/{tDM."[MatĂz *!y2C#I=ɼk2m2ijıyױm&4s<U+ 8 W~CD7 b`iCie(V@C| ^JصBQbbtԫq9n7BUgU%xiV߃lFq"nGFрSC'zKvCS =x.qt²nG箅˾HIV2OY[qG _(n,_‹8$<QMr(jx t䊖g(z FR/%A?}8wT:j0Q[1ЪV-5_{-3D G"/B-nБ<K@m(>g[ktG7 YqT)+!EqVqZdrLDspWo!bYS>a>M&uDz$ԬW)K4JD_V6V^_7_]m˫@ W 2@pV>2pup2}ʿ]'\f¢q]^Qx塣8cڐۿ\R"r[tv{_2'MA V:<ǡCd|.Cde"gB4Uw2My $":lZeDqހ$%ypO% 6wd<лB|lPa41lMlLfc2[٘L&5cı86Ycql2Mֱ86-:6}86~%!DHgNIjVʣ8%wUڮz/]W $V p{`DI}p(#(e}tF +<8g7E7%x-{S-e|:R㓬mG:6ͣ8r9~o}(E)=M_` gtCE PXp(6"*٘V%_ .kh{AM{ul3| ߄@׌U22{|@ѹ!/ZʃUDh QM9e8.iUFoh*Z&ړЪXuL'v 9&;uQ_5BK%\#4fV28jS\XZHCd2se(NQLIyp$L"$K4(vs<"GV6:G,PYW%}R3µ`H,;4.+|;NGG Md)ۙ0&&141lLfk2id&ql86&<x$ҰG'SXp]p qS"MZcd:L]e XBI dL_H9iC:ցc;t%mtҳ+eQlM˥|o`rDc ӗySH c#ԉ[F"!\Ʃ05Ci|é)Z<`gef7Fr+zR!ԪPT dc&mHy pɘL&1Mfk2yd086ǦU&شlcculU!wDD'~))IQdG "KgȂhuV*5HiOLR?zaZZ$"yki"o:ĜB(-xgT4#4dGjbzUEFTV4A@c4vjW=<"trn93(aV##TGwrPxk&:LR[|dSzñ=sw<,c)^ 9V8*w4LpX<(S/桩<1lMlLfc2Yɘ̋&Ʊylcı86&dc _< _dœE&| _lElU_6IIRNe)˓<ue6w2}B<3ϳhu@C<yhR}pf"6yrg3ygy_3vig}2hR}p~LV;_a럟/H'&FϗgpAE } ǫ.ONyyV{p8gp-{cv1{#D]4E;'MR)⑴{1I3_.\D$+" Fe-8:sqkTQqiW?+0, }UjrhU> ިϑxdoZ/w_/z__geJ&\q';ӊSO)WALoe6wgwy_v,v^,ޭkEp.v "d ^E8AہUذO'XdX" "NYp!4* :Be!4*S ;q͆M|l6|lؼ{)r>6e~./W ߎ˼UBr^2ou \}//a+a+[ [鯛/U D@ z Gp:wO>_.p}sdQbrQWNϛ˼L\tyeP;|/cPMj~0%/vAGRF&n8U}u߳Q,PGZ=d=Ա @1dD#(o$;:1&]uxEoC&W46)$,:qF[Per>?tq}½XJ 'kMMnGYv 7ɘdLd6&5ɼh2}awfl&Ʊ86[&ؼd{*~%݄QL!e lbW"CjIlrCmz88!l tR20z:4~iu84E(*em{YIp\ZQ7Mq눾N1!wlɣ FuyH(\PGKRE\$cUd۱+r.lվ+LWn37aG"{N$(iotQ}. 4\yѡS'2/j `dW'bчuɾ)$.Qq ˟n-O&?d~ǮB6 5>"CӀd8PƠQUYc~ѱ:6ǦEf3m) DL3 .Rd휐6h!†V}\?2JLyN:8'n34{ !}CI I5 R}Eqk"d'[c9gxPZDg;ES)y8R #ƱO .#C(-8̛N/Z+HS. )@ JVݭѣ.vA.ˈ5nׂɆ:ڌ@^@EP" *|ɮ$7IQbgdLfk2ML&c2ٚdZ4?Lpfl&Ʊ86[fشc|} _lœ&| _dŋዿ_?_o$ų&)6I˖"dJU_!S_W}4)8g&V&m̱|E답;KkX|b ZV|>~iZ ZIY gRbxAہF[\OIk&İކ8_l48'|CxMxQ ܒK^@Y4gằ" O%-ҥzRopEd,KASn/2*̒(0slN)ٜ2S&{dNO>NyāWA].˴x.OX $bϠ?" Ol@Y:I5ý"._E8yRc!Uc">4#N*'xE>qbnEnE1Ώ?OhU%4"S}B㴂cWi<9my̓<#'Ǟl]%4$bf>^%4$/7/'l ˼:le^2iblW@Пx9WA] pBS@i5A4p]ŒEWA3])KuZcxCWM]H$m]MU>裼ly9oU =",t3bokMZRSMb@/]e@UZ9-i9) qQs}/>` Qd5ˤ 8SգkQ4K3LJ:'QCV8]D.7إ¤e헻Qv(vniԋHTm+DDp!vQ#@cm;]Gm.ɼk2m2yf̱yױm&4sw)^E \nD?;a uPPDdXAتEΩ f诎^&oJqVg$^{GIы(!`Fo+c&$!UU5P48eGqH8HT]AC=8 11o7xp $Irh|Dza/G\j3)n+!\4i.ĬB`EQ<&.CZt~}9#YV} =jN]H4A4Bjw{: {Q)d8{TV]wdaL9በ:)!$I_ATRP7ѥ/gfWGpUuS<!}(CZ*H> QC*Z"ID4GˁDw_"64<<Fzx5WMAZ62R [U"3GJU "SQ,RڇثQߎ,M"rWg'Hy؃6 ՟̻&&1g&vvl2MSǞ/ _v"hfIw$)&I)»])ExVLۊ"j!l,krU{[BE?ck.H;a]`.y)vҬ6>̟BpUDh{iTϫW Q0""npCӋ(c_lh) )nWLrB8 b9)Vqs%6$+.r(DnG8+r5ӈ6?$)rNq>TD8ArȩQѶz+;U+"2˱7MÝ@W"o3ɴj2id6&Ufؼlwc̱F)X)010U=N kOc_O@2JC-AʷX%gvc$})_kQ 829$]I ^ToB{cR[]4T @&!~C~Npϧ1I &AMaGvr5o#WSHSPyYHaB,NƯU)3/r7-ܜ~ ˙OV{LAꪺarb%%}5ӂ컄 <_ENgȮdLosPwױm&d7^ `Dh0DD2FD@qQUп{nvWypwX AݐDہ3~ pD6>DMR54U?਍W (ŒmLʪwLN/vXk/^é1.#R5VjnScϣ(0x85m&{Op>f 5BSRj<.>5~ b) }s#qcQxCkOKŹ 5V Mdd&d6&1lLEdJ\>N?C^! P*\8ޣBVTDt.5%NprAp O֋#(zZ =mpOaOA /tIľڪ;nH.%:*RvzUzXU( 1rMm7 I4 ?HQv cNj.7X"*P"{2INYg"I-tS)0 .؇>]n#)D`bf8e.-+|!qv0-qһ YE9 p 3ɼj2yd2&7L^rl6MMƱyױ86Kׁ?XqH.cZzѪoEklA@Nh|uZ!(0-:p_)Xʷ&r(ۓT}#SC 4VQFXc}tlȯM%%o ,μ\$G!QGT;n փWB &V+"Y/ɰĬm[X%Y/%/wh{Ĺ/ F!(ls_zN[x;.Tb7DBƍ By[<yb2ٚɘLd&1Mcı86Ycql2Mֱ86-:6[&xȄ/'M"؆/6/hmbx1IIRv/ڬؖ"dJ^,EȖ"&O/ڬM_6eǞE[oV_LYZű@oA86 f8b &<`tZ8A -ϤAV{8ܪ*_-̲t[fbA<>ճAp9U'|G*x]?5PQ޿9VuPeO\%wYQBɜ/j}%nN'ɞ2ON)9eLiA]2wWA]2wwA]uW)6Y,b@)6YY^,,d,fnB ,#{A -#d !,)q7,6,,)=71,2,V9SB#o9d4p.2uF$4.3uycc󌏽J[yL[mud-gyи8Ηys/|yy>3sM>ބ 6@Oy 3oԝ} -SuW)Gp2t?p~@2OަR$ȂZ@~8U܊ (SU}2@5w Lwݗduo H߻)]P@PF@_ ƵGh7d%$ѥ [JpEdD>dIv-UtΛ)cDuSuM-FoGэ~*@UvX z6VJR&ʔx^5^B&zCjiTW"q[Dz+9yx[P+\ڔr]UKvx{z ?DNc-idzd2&cӮcێMƱyr(hBrkZj Ρk'!Ӣ,z f[Ht?|CZYgQ8Ktf^QiѨDFiM}~EݲOZc'd|WE.IQݵ N4XV\eq9BNA$(4^JQ'LJRFDy-Zo bI;1j+Q*N&S*$DwPB^IDoZp +EvR2(}yh݋0T7x(DiE9jmNy,RWGދZH NBBr'+' 묾D!vZ`7KwKףA }1 _ Un hP>P_[YS܈n)Háhjvve&cUnFx:Cx(M]mɘL3gMMo;6c/~;| _< _$EINRd͒ԬR.Eؔ"4+EpM3H  菇.Π?U/LݖŪG %o!OzFnz"lIX"]PL"B(Q rU(Ed8F@3;[ַ.ws,1ʔDQU66AaxEk(Q4ק<(3g$Co4Ȉ*S0DHG7Mhj2NVȒ>D,̩t91m롍ogvdᨣDY0/d)w]F'z?LdZ5ɴh2[ɘ̋&Ʊ&U&[c/:6[&ؼlM"IIx jQ({U&6Y}uDF3D:I֙$ۛV@8c! 4@+NDnSRbYR I&;> ],DGuVqj5$ }]=5u/hBv]dbp.B(C]ݭwD57hc@&h5T'F%\ur[`)z#SR*Y'YVz]+XzYpS9(ɡeL]m٘L3gMo;6c/~;| _< _$EINRd#IR.EȔ"4+Ef'v93BmV8jl"h1|jZhb xf M*D@[ ċ V w Ad ZI3 x" Al 2@}Ash+ePt,0+W_YwxKBrJue( wt}ELz )ֿn?C>a8k?ٱQ;z.W!_X$闖y?E8!m5>kPiN@jP|~C1#|m'ww2}g䏻<ش=#4~DY^ݼLo#/Ϫ/ޭk6 [iwLeV6V^ǰub2o<l څhc h } &G#"G22}3PgNptUR7G].8K]덗y|HVx}:Kn j,"?_:? $E:Rg:D6wo?5-)Q$+/DηߜA&,$\Ñ.ǂGp'W21zK kҷ-b^pc+mup}1ֻRNE(P.2}k^nuК=:-Υ'-m"ݫ|٘dLd2&5ɴh2}l'MƱ:6OcqlMƱiѱ: ET'qY#Hs9Ή@w)8E0Orj:7ߤS|hnHC55Хd\C.0ӍЩ4?P߾L>S%傀t&UQ7C[ѣ]:cfzE˥sFr1 Z"qd|N +G FD"Aۇ,?6(% g2xK$[ ޫ\oJ}wWj$nNkQ::je*a=b O 7+Q' Sn"rK0=`Zx{RtHZY`PGo$k߸H qEK)]t<8Kx~5⁡ \@p4wx tNŇjdd&d2&1lLEٚLƱydcı86fd>ۄ//6mIb؄/ME6|IR)EhR)EȖ"4)EȔ"lJRKȡ*l(@ !zM CQg(F \rGYGQvlCR9B­OV=+]"GptF}I$_!7vጏ'OPr/}Ir8хfZoLyR?˧pp|@9#.B`|61$tczt+!(BVwMxҏR6~ug9Z9`/BÙS]i!UzY{.hJ){)h7o&1VMfc2dlVcӮcql:ĻTi^vC##'DF<a+r=Jz|c3)/T~Ztxex=!ϖ3+s"S&2Cp:r v?{ P+6n_u(Z ܃:`Fu.x <"*R%Ry |uTuڛ} 26x|s;[%PGkGCj9]j#c: T"Wsg׉ tAݠ&12=iQAP8'% >MdLfk2ML&c2ٚdZ4d'Ʊ:6OcqlƱiѱñMI"Ȇ//2L"Ȅ/Z _d$ŻoV_d$EIl"SnśRM)BRdiśײɳEǞV_Y}-;t5xZ_d*=hZƱA4űS 6i fӊՙM hy&ELA &D"Al 2"#rpEAFrD cZᙱ ?^CvnPSAFaS7. \\}(hב;|.UdG4`b0@ۿѫ!.MKtߕ^A#yQS'ʿy4̓SfslO'ٜ2S&sʴxqʋ.L.L.E@,e~?͔E,,/ hVpSopc pN!ڄYpN N2@U8AĉejÛeX)6 N2Fq8WSB#mdj-i/>6鸉+ R(R蒛"55䆆$S:B"wUx‰G0g߂?f PKiJP9'WE rjf\Z{7헮ҥ!._)k/Jx.G!J@!'e4MVUK4^ gxʊj&X[ᓎ?޻?5 EcnlC/),^OG>?V픤gj%Sgc$zUY,KJ+񆵸-#F#vQF!2Z./JWլ> 8h&d6&5&&1lMfc2-L&ǦcqlMflcql^tlplxȄ/'M"Ȇ/2&I$IIRlM$&IMRl-&)IL)“RM)BI)BaS-Eؔ"XG)"m*x(4JzHH7sJ9jKp(@-k+w mS\Ǻd-,Ҏo#=wsNBEd8n]XUA2:_~!&'.•j2XՁSJU+D*Х1]R'cin_}:r-b.W퐧V(myx5m5Q/""):r:7!̎ty% 5Ns[ nϸ"g(XsǎN6\D|1kCa|rE)ٜ2S)9e2ٜ2-2".*K..;˟"t?e&`E~u@3e&`y@3˟1ܔE,1ܬí"S7!esVco#S 6e DSsE0%N&qbEEE0&=fEE@3*sJhMB2 gUHe.B#Ϙ|l6|lWiS>6oiS|lc/gwHhxLhEmBǛeB,/Wp2oΗpc :lΗys/|yy>3c M>ڄ 6@Oy G3oԝ} -SuW)Gp2t?p~@Gg N.NҶ2J]LR //ǾцZO~˿RNQZe^E %y,>÷ڑ@KkjA0ɉdؽ$ڋREUF8 0s'lDy2~._ZS|D'#bWe~4R#|õ~R`fI_0M*-*Bst^.:@!m.}@BݩH1`Y,zQE YzAG4kC]@)M4.]z41(f׹*,/8g&ӮdL3]c̱KqCJr ,$ڡuS4gP/#^G)":nx7 R&Oo1dEqQp/J!E !$Hl iR[K8JO s$x QU噧І"4;HZP: R6%B'Fǡ!OAюikJw<u GC)ȡ:}M+3CW,ҊSw`]N *8z?7 J$\ F8I/z 2p͂IBO\0Ve)^5GV̢=  ~|CZ7 Ot華# vՃk/D! =۞ODf=q-#XL?ǣe?n%;>/W U#IpT<>Ƴ9)ոr # +޼ƅXPC eFZɴk2m2yf̱iױmfC(Ud={Ճz˪Ke!j2LodބAd ZAd>ޅxc hc NwO>)INz9?905o{,OBڱ$)yZ *3': ʽHOQLWO8¢s?lΛsmocЫ'`Yo!(zx/W_<š7B믂TJΨjŻIM^ds~lsGY!X mKsQYY<9 !;$YQmzP "WLj~^FBQz!_X^;_=>x H&[K((C Q* I0rj)p!ex.@} # 1yX[ 'fpW'}OT˨}fwNL]m٘LS'ͻo;6ǦcWNk[OeҬ'M tRG$  rWAe@P/ˋKKPy!)S::k$܂T7P?w-WPD;ngQ0;/#IPlF.cEgAyk/E2=YD/R~(|: j}$z E"A9Rky mTY\C^_9w=ed W~NnFPv4o4>kGd?ޕQj z[peיTؿ,kojIὈ jSUMAt)jx(A8唂Ght"C}"xlr"B(l- \|W" "%IG=oU*9( dFt`"2?Cj xW19F5 F.j?;zlWc&ECh&+>HQ]xbq+ E7뱳g&ӮdL3Ǧ]Ǧc̱gwȄ/Y$o')6IgIjVn)Bo"lJ"w N~Qp m+bmŻoV_lE?/.D@Y ċ86] 7 @ d 6@A A8/fR?A &bAl @СJ܋B7jD\t}sBKHvDRSA}Rr[9i2+M~(\Vb>Vpu&t] S& k!j |oi֓t2FC554C̲b&)0LoE2-p?;e=e~ɜ2zi.wyO#6Flz;bϠ{i^ݼLoـ3/O/ڭk6&56v=C8?jl2@A ApdXKM[/ȲذhC,6,^dyțFF2FZp%4!4.7 l lc.6dlشfǞ22}3*A[]ݻLo9."6Flz;b{y7/yyFh/}?xⷫ0l2mΗ[ [yq։ɴk2mlihM,E -D]7>p>pyS_O9ᤷ939u Z``uԿz鱯I iW/~˛a T%sYC VQu:q EPf)HPL˸ͻ(]CkT Ex"H cwRӏų9=!0+r.yezARVo~X5(5G"b_@,oe=~$?_>f>eRIA2d19Ro$4]"x٘dd2&5ɴh2}l'MƱ:6OcqlƱiѱ F+.a@uEıdrGlk%܃'bTO㝞X/up6x$c@tb4B^> /gdv Y_ M)gx5:( }D)њ5|V)Gn^^p%M?8]f߉E+]dY\1yƅ.V'nqQvS*`I])$/S Q} F=GR]:$uzw7%YPrSN5:qqc94C[4*o]C]Gj/T/7? Ng + >ftC:ɸ! ΜwuAkJSIZG٘F1y`ى!eTtf5q)t?٘Ldd2&5ɴh2l'MƱ:6OcqlMƱyѱñMI"؆//2Mb؄/Z _d$œ$&IMRφXR=6.H6܏`oF?$b!GCEA[S݋n 7i*åPcP7ZIEeAb>45?Դ. qY]Z i@2H{H.X F0q"䓮j")yA IˢF=) $}-=Y 5͸hزgHSZ)D7(H#ZdLUɘL&1f&/GlشlvcԱrEmO!ϳTIͼ\Ef=e0|X%/,g~]6].'"o18PM^JT%U_dQc=2--mj/8Ґ9jEJ^;dܑren uQԸwPBW_AcQl@m-1l@r$LW_SLJrJ?\.KF^^þdMlL&c2}`2/L~cuYLƱ8glcTE6|MQȄOTĄ/Z _l25hb$)ZLRlRw/ެȖ"lJZ,EY4yZ}fl0yձmV_ˎ=k+>{1|M/ެEL9ě@2)3 6i fӊՙM hy&ELju 7h/ 6@ _AkAɵ*p̓kT$K=^-ps;'KnU@41+JY\]E0R+?N͍CL-'˲AgRplܧQ=Gk 4jK7D6 Gzs:=OQ+3IlɢGUr.֚]R])xQ{ (rԋTgEɱ Du{z׻$S]XZ]i z|g{&ӮlL3]cԱE$;H_:#)mVwٷjUޣ{&zv1".S˝w((!y>9n#*,֭w#d9M A>ULʴ&@8e+bJ}[)FhU*6NA2ۮK <{(ADvrJ/rENJj68#I + cLjMGM2uD'Ή\NUt;Љ)\D@{Z* h/h T9aK4GBF *fegD|EWN|;9I^vF9Ċ,9E*(ε/OaO8ZҰN*HʒuܡRd4eTHd*y.?ԧhGR@QM =puBWU{ uRY֦.ӱWa~!3yd~d6&ccێƱiسE_l,Inⷓ$ų$5+EhK6Jl9Bxf5y1 %(^/f5>EC@QTP Zs _6 tS,ŪbQI C`Qָq(%Pr8MAOL7 x]$l EMFC !I?\i5{bcVMiCzp |A HC8]p AM:;! -H#o AMS¾$AH["#QHA nݵJ/c rA(ȁ!j`ˈWwiopTކ4-Jm$UF3ˡ2c6q-UJ^DfR] 7 @ b$7!ITa,SAnHs閪5|= 1s%"xݣc ZwM <G9Ib/p]LeE|4-I}l8vmr]>AqJpRw(WDlR$^ 5%磿kla95HASLLo2S)2ez.@ݯO#6Fl~;bϠ=˴<|YŻ]}p׬߮gG] 6 @ N vI`"`"E}' w1I!" "E} v Ih$KhdChE'}p8 w IhdKh$ChE.} wؼf&ǦE>6[>iSV?Nyvy.wyFN˓ͻߎ3BgĞev^?߮fc;_2a+a+/[[g&ɳ:}1R]7>@  ǻpo}l>2p-}d))ۧ<u?Ny]'AN ;_.FIrR׷6q(T//EޅUʇCZuN|{8_T0yo?9߆hM(U-&9=2xtPNc.? L[!&hbH.-6s Q47?2Kc dqxu!֪ ꙡ\S}Zfn &۽ 7'%|-8= yeZ/YG.~HINnx׶JA\hzJ<> > GL]mɘ3gMMo;6cFl,~ 9jEͪ"XJCKTA4^s!/ x&wYWeüFpَ~Dtg/V˼(ϐ~6h.65@e1,Uk|s2e#DýMliAVRC|b[z Yeiy5B}L‡( |#Ot٫4C/ )/HQTģx@Ț '_ /ps<1F]2±GH!{y+mF8ձV7䷤Gnh[) ERGxJVH(#iIқFt'Õp|J՜lLU٘̋&5ɼh2lcӪcqlZtlƱiѱñIѧ3M4ǫ(c``!6KJsz5R1:Rק褰J܄T [xIt&B$%{EF {+p&8Ԧ;Ov+2m1.ʛ"&>ag(7 uuS7QWƀ' գ\jh (3TS .?^,8M4pO:RtckXIj)z(r(immԊBd(]SNve],ݠvn I/JE@O2ERB=8Cm5M]mɘw˒[וEw+xhn@J*d,N\^gq<]J  gMMO'6ĦYb/~|)_4+_&ŻMnRd͚ .(B3(2 8i9 pΎ{~;V)_x}-_d-/}} hM"-DE??AK&ĖbCⴂަ]"7 D"gRd 6DAI%Al 2D">!:k"NNo3^7WD]tO1vMlw\^W+ '-M*aS!:}A .&|uɃx ]Nagz duA"ϥ{ -1%=wztߵI"6GZ7}?J@}ƴ8rWJN%ǻfZe]e~z٬2Vyiw/{yFY݊OWuYc_ݾOـ//~}pw16?g '}B| xM",DE?!>hW8A *6*^T'‰*ޕ<UlUl+hMA#YA#A#/j8Mi+hMA#YA#A#/*uMhشǦM=6[=6=6/g̻OLʓ̻{3q^TlޭtŞ +/n_Lޗ'w?fcwe;_2a+a+/[aCݐg#ud]7>D" @.Gt[ Njt[oʼ*H]v5sF'tP9:\,~++6!KrwTO|f,M巾"_ʹ*_=& O;e)eݼ6Uw1Qb$)8 wCCf2OC$6&6?lf=+_[Ŧ|Ѭ|͚6)zIiR4mR(BP"l͠HiP@- тN/N"Ox#u'n[R#X-Mhr4YLb It4t5QE\e]~|9U&Y_Lx)pK]FL^C?/8L u>$2[(Jv'חK%p aBbP B0e ls|\N xQ^hrhPJ)]P)^qBd),q^,boX^m3M+뇗sqif#N8d8I}Lȴ2i1d! C&2fؼllbIl^LlzKl(jbo6AW : F[gy_W|aswnԐx"bͮ/T^2mPQPeTz!+Iᗧ<,p/Qxa8[h}kw+Y&FP9Έ2k&会%;SAh&W'X^j4t,pH0%kW[;jIl% =ɹ0::Ri>TKQt]ʹv'45 Ţ_c/PQ93S_CcnE;J1Vy_ZUy$b2O&du;K@Aݩ3pKK\tx]).p}P|t~CCa솯[$ 皁޽am rWEV<޾6R>z+wypb#!)z)AB@r9޳& +w[7DGa?G 8V+%s+&.qK!dL&d!$d2! ldBŐن&idmb$$6fl09^߽ 7TU%? w^ /GzVrwhc/gė7jIyl+wH]4܀ENihEV~;\eLN; PUpY{Hd9\w WɼPЗeĩՔ^.=UiJh"fݕsEj"@qSb=ĂP;VyWuі3vptr#q8*qiD}s3ȏC&L:A+Ye|R3`Es0_K^n84 z9dE[SoWJnU<>Ak2m2!BJ8]$zrqLx~^Q{qʺWŚޟ4FN[n;0kV&m7m2yc18Dzdx2%u['{0q4!$d6! '! LdC&2-L6d6M&d&M&$6&ؼlLI"SȖ//2L"[Ȕ/^,_l&E&EImR4iRd&ŶIiRؤ6)2P'P a ExE@6P-!EhY b 5%Gn|1d w} Q\uӟrV潉u@M*1z@OtzS„5TtΑ _=./|r^ Cl qf :t]W7|ޱp$ǀ$Wj3ۼ٧%C0HMYHrkB'hb[)Z~}ɝ\;+5MpbA@{,㒄l.yW/6! '! Mܗ C淐dlb$$6ĦO{!SȖ//2LzgELE|r_Sś"ӤhImRl/D_l(‹P>"K!Omg>k }&ZNٱ=WIM\Ȕ/=#hZA}<ȌMoԝ͌Moi8ߨUW Xu]Ɯ?U*k%-鸍8ӆ]L,>5lNBїQ/}Y/Ky r[((3rI!tWu$~q! VEF$IQOUhzTW 7>Ů6EpG S 9Z!ub '/3 cwXvݔ,5V:E.g ( 9!NXՀ1Ja]*ŤpHOkYGON0<Sȴ2=2y$i7fOU6liT\.횷`Q͜z]F*ڔb@&rWAS~]1ww:<"dt}aI>1m6(*f_":n 玃/`'ҝ ! Q@F|$h2p5ۍskd嗶qӞI,iGWDuVP?7rDVḧ&;Cr;}WN 4:hA͏q82kőؾZ ISZy8DC۾y^1Hzg5p[ 6+TXo~F C؇(H5Crahe9t!NKU䄫TpVQ&g~&vߨ($pmM!I% E6+M>v=v(ZlBۍ wCCf2B%6&6?d,_[E|Ѭ|͚6)zIiR4kR3(BP"lMWbtxguE%L*2B,z4B^yYlx ą%N@#B1|NVIPFDQ *C-"]Q(" {`/ Fv ;b;b}rZ;tXmHPT6]xkVTPI>\tQRPøO x5AGn*}_< ^w{_.B(!lgXї" l9HC1Ěx|rc⍞$zBƖ> N{cK%Q /*W|lPȰtȴ\p3 $_}y 8  .2O&d{+}݀QMڇjSE%D>9FR]bhWRrFBYgbUSE~Sk眗~ z3jc42.:VVvW^e2̳U^%u2?er+h/}Ui"Xd816=)E D '":"`"UuĪWUdT1N2FZp4?'hJ]6FZU4_4iUFMvW^oc^{Uи\_t_KLOuun}vJfʫV2V˴2=|y"C*ĆcC*GUW>peonmv[߽#&(=2aT`?4I }`@Hݼ} Ϋ޺5U85q0HW}^"]|jbB B 8ĭEK\Q|T,#z bz5P~ħqSBՁK9vm9))o[`}jz^njeQ\1(5jOʧ Ga^꒎Tǖm)!$d2! '! LlC&2-L6d6M&d&M&$6&ؼdLI"SȖ//2M"[ؔ/Z,_VLI"Ӥ6)4)2MMbۤ4)ZlRl((B"<"l("E tj@^u zPWPaYI,o'نs!QrxR/W|P[<>e䠳F0.4T2ǿP.3#?2bMT؍-uƔUHJ%Br" ^$~]>^%uy3R>ZyQ7׍oz_xrp_[ _tH@]OF:^.4iy3lg" 2XSxu[M|Ũ&] N.Q닠 N{_x S16*qh;1y~mM~Tm/|rN()bܸXWc]Ǣ͡^AF+ߩԈu@ V!2}Xu_V2V^?7_ݐ鐗˫D"V 6DtV>6tst2=NѮp}(]K|EfIS˼@.ާP8|π30&.O=H8:TK ЙNbG6TNzV$HCw7SJ'cD^l_gT.Z7 e OO :[,!]Z!Z -iĦ(q˫qpF^ã^"w5bUSV3U$|ԃ ^ߓBa&GIlԧ]Lkx8CO:L+: N8 /#*%|]"v*TU GW]Ier?zD}UyVYroԍBf7\0mxCJ] ){b`[]4m>̓ل6dL&d2! Lȼ2l'M&&6OLbIlM&y1-MI"Sؖ//6Lb[ؔ/Z,_V&6)6Mf6)6M9e(B3e(BՐi8g!<ɱb?x|YE/ D<%hy"WiA:D/Τ~bC!hF!A ц?.{YklQ/kmxUȓ<4>͗yu G5|Vv̋֟/H'!FϗgtAE">ޥUR'<#uU'u<݇Q_3QZum*Gok3p10hH %;y  4S1)ǢʍqUQkMqhION-V oOs Ī1BT ,xdSP|_y-!oikKltV|8 ^/GBvr)\لm\-{7^1JpanYh^^TV}]}/dEOs9bj`DMtS }) 2LO&dwbZǝ.'%q= DoIḻxX5q;:Q )qj/F$sp|.E}8zY :$"q8=B@8DNrN#Aka烲ePv]QQβ1F QM8w,q6wcaa~H#ag-$Vq?Q9F7^Q[ZUko^"Ç] ax]q^OpʑIL$5yKŇH]dBv<8Y;: bϰ7KG}98.8 򁢑QJPcD,2}UzGV")/EPTd;4J @,oh;Pp+:'5FOکKGHӵH#Dv5+"`"UuĪVUdT1N2FZp4?'hJ]6FZU44.yUMFMvW^oc^{Qи\銽Z4.ez/un}vfʫV6V˼2?|ybC*ĆcC*džUW>puoJH I,{zc_.jW+"bI`F)7VD.S m" Ǥ{W@lR[y]2>@AYAzS|{hUE}Eh.]Kl`PF BE"r: zp}8"GfVQHuRnʅ/hz*Go gCAya_WW}r)Y4mRBIdB&2MBf2نL&d^ > Cb$$6ĦIbIl26$6/&6}ˇbj6CB'{Y%[5p) p痳5'-kEr^p]0 Kb]nj״,h$W4?bjqeAע42r)+{Ig\)-5P#U]f_m6t0AQ<->^7^EtA1%:-鍏F~x}Cܼ&p*i2FL ǐHiPFcddhUh-{V nNPA'ʾ!pmxbd'I%=PA}8-1bGl\<|AAR˪^ʒ_{q* bfk뀾\}$yBV?lTeA+ƞUh2\IYW^nx$8y%YB1T3-?_5~쥭;lYwN-Wo89ZIiZ܇O]@DLgx '! l< MdB&2y1d!Ml26idMbMl6͋o=Ŷ|Ѥ|)_dŦ|b5&EIIiRd&EIb"ۤfB2P- !E@P E(oP$JT,XUdvv5 9Lgdmjx5ە1X4:_ Onu+7f#8*0i4j::ez$h*/BBRd;I/>mQRß T&(>z}D%1.rJnWiR'V$]pͨh iUcXOMWx|+֨aQRTbF2i5d2!blCf2/6d2&y5$6/&6&ؼl{$m9m(Yzm 0^rcy-(uFgPwP!/P|a*~>|7]CYRxܐ#ź>BR ~F2%ٟ1VHxSHHOZ 7jJpWRƃ,iG%+s~Ϩ}:l/'Dž,Ɇ zT|;ɑByrTSÖ́" ^TLи"ZTyL84?/hUIjQ39=6Vy3yU̓<'zUA#M*LkUA#OLo6y1Ol eZaϗiuΓg#3VW ˊ"t}?G*KU?O*u 猺 tߜN01v9`·;3^Hͧz1_%.u2OBf2ېy2لL6d6!bIl$6fSY⾺tN*|hD~rɫ *}q6ꃝ0G,ӊ$'eŤa(zөUu|sޮ zVWzT[Zon18f~rUCׁgvن,O=BD^#7E_^lC3jIP,G;7D޵֣%35WDBsgSUVx,>l(!)~ ":YDF >ԭsXe"y꫋xTߗfrGI֤E/<rPU'{Jژn?>߅yI;xcCS#}ܶ_0`Ґ;єFEPUY ;}XiZ۴b1d! CMbIlZMl6MM6$6-&6%d/T=Xt!ǀ ?LFx6~>3=orCZq|{V?$Eu_Uip?]ʸDWw}=Dj%qr])g qoP/v,N =k;~.p!ݦr(_޹HNKb};%+ǵJjׅ5ȧرq\\:+"A8*׭d#pО+ݩ*?(X)j;\+Il,1~[?IN H}[5 řI]n΃YXQB%U '9X?L!! g!wNl6M6!xo |:=$Fkf'$X HLy?T ^W3}8J5dIx\+jГӇ?}("8*ûqSCݐل̳gͻO'6ĦYb/z|)_4+_&ŻMnRlϚ .(3({m4[ɯ(Io43:l%Az@:,8,,#q8F<1/u؊+f{Y[tzJ"6A;B~ qo}pû)^I8u~X<Oj<IgivvcU Z, ^Rw6@ R_ϽlA/9yg ǟI; 7>nHePY|s z@῅&dZ Lȼ2ibbIl^Ml2ͻ&y&eєByv?+|x_ T*ЗpxЗ_ճ44 ~\ͺ6ȴV5"X!#GUWk =VĠzhKU]H2 CP]~"讪"')KUj7>g$DPR:,EHͮÈDal쳀ϣz "^ฦMs@2OL&d6t}l>>]ezz] '=Ot_Ri#EkC&eSFyyWXaBA]S:,yg_R> І\enPEu!_uOS#t۽YfܢMc+M򢾼7D',LFDm9TFhU[Bs!'a.uA  rKHl4*DmqXlUͤK^W8y7d~:d6!vȻO'6Ħ'v<ˠEB5Fz~?ƚАeykz=*_)h2eL#p*Ņ1]zs]x$Ys_ Y> JS@0c+!nocJW}է NJ6VY!Fu5bFW骲ZqĖ^DGH9\!/B%9xi21[$^_xa#.kZ&|=^*G5Er vBBbkes`}Lv_"(Srܰ%AGjBlƊO*K"r}|j_L DHJ޺O8cMW#˱߮rVYSU qt/O/U콐لL_9n/%6?d{|MŻMnRdI&](OC6PEBR!˟Kw1e*cx$ p ;'fJ_\ebqe\*p|*Ė℅Wc{XQ(_Ql.~0˅,Ū9)ע J>؁CK@Hv^š],dw{Br/ 6%zoZb>VWBf2&d ՐXMbjbIlMl2ۉmȳ  jI=nlEe6$'s%x,iGxL:)[ _,_} 8²^ܧ!C(|4dc01An_oܗ5*["(/0OF!D!< a-ݐلL!nbӉM&EVd|MEMnRߎxPN~p~;c=}veūLD__ Ac!#A:`C?Gٙ"VgRl 爠1! GADQ0vl./e;l -b߄9Nq/Y{QDNyuge/cRcjW~w?jED_FR>r4/ϤV^e2L__寑{l2o߮"ݾOoW.׆!blzc;E6_6D2l "`"UpE_4^6VZ?7_ݐ7_"U" br%sEɩ6z̋#C!.m&_%<˸+6_Zjs/WZN-ȢKc~ܥ~쥢1(vݼdn =o¦7lrq?tsrp! ڪu9ky-G_xbiTMUn=fx:y'rxMBݐɄ̳gMO'6Ħib7qi嵣bn8g}h,TxeG}\X]:na\mZqM_"B9O3.G"aXng}5yMW]E9M<}[QO;N?M72ZHu4t6m" Y-̪`wAD9}KU {Q:BTyĻDBǜ/i(vN%`kq45vrɷ9U 0N9~-d L< yؼtbIl%|nE5iRۤ&ŦIIMBz"<"S-XvhG=3 s+Һztr GZҁA.+x}!]xjx!!g=6Xrmv(7#3zPҵb'!rp[ܒ{ >WFtXخT,'iiDEƝ X˄239Az({5|+Зū*Ye"(y}ྐXQwy#@-Kiq\Pr~Cw /C5UhXg:6T/vlմ,4vvmJ4\Uœ2.tFacي5:\o.؉Cvwhm\ĘS"+2?2yMl~:$6M{Rh|MY5)mRtvEP"ߎhpӀ+cŷ/[ؔ/^-_luc!hfC?Gi"Vl ;bCL D"CbC!AS[+t͊u9KE>@h; 8Ѣ~ |۰5elg2+3K. ~[ƋWh"K'- ܸH6k}C r)QAYa8O!)[Wu$i2_V2V^?7_ݐ|ybC*D#C*džUW>pe i*~[?}[7t<]".nJTT_$3;}iW/oitĉ*.Ta5*8bxb]@kݹ;EphrXfI}mH꽟Me= hP^rZ] Ц|:]^f!u2MB&2ېi2Ʉ6d6!blC&k)^\XB7?aВN'Ӌ4 ۰,!~A!*~>KDSӊTXmF+bV'Lfٮ2OV*YeLfyqɮ2L<%uyg.۽f/^&g*ZyRgϫxu@Ó<Wp^4/ϫfeZ}p??_a/˼:RIȳGDhyv>h*Hݟx牆sFO|f+B߽+yc$10kpu'z1ʃA_om\b𭗬.F2Uؑh_dtVlcfй0lHQ')<Xu~U4/zd@.s+Izr-"0@X*1XUzQĭ>mlxz (yG//x710Eؔ\$)ϰ8E U,1T-4b'Ԣ!1vy]z$xkZU[wI^.-d M< yشtbIl&v˞\{˒dt15T+2]:IGaY'Qn=IK  m& r /?8,0:2NrQRA0njp^{UppQ (-rCGf)+Su$n'm5UkYEԅ1<aRzrpa^}) FmJ.ܿ2O&dGb4]0.RO}RnHEL-d6!jlBݐلL_y)$6&6ĦfZAc!#촂 ī 2DsDI!xu&E"C!hF!A-/V9"kMr~AM!cOC瑅ay }!'?ة ԏF^hWW%y\{L KA4+r]ڙW*9w[kv5%u?_*J6*_ a;fE^|aZALO2U*{l2*u\*t_v/z}-VeMOcu`$C*INȨhUE@FE@_8"`"Uuy̪W5l RWd%=6=6c*ӫzl^^c +6=]u_LOuun}vfʫV2V˼2=|ybC*D#C*džUW>puoW>./6|7^o_MCzǥח]r=`zMCIl@DU18uBǵ:F/D~rw~e^^-ꯃ-~N\Y?VO ayuxrk6H_pGW{P!2E:|dEONƒPNbBƕ\/ɄL6d&d6! Lȼ2<$6&4Il6M&&6ĦĞ_u1{qS8 k=zk2pYG_4M?QaXT #&zOSCqUOZb):0~(K0a-WϾ^~׳4!?Xn}a†58 >EyVm<5pr{ )M)5BoF@m=[vsh7qzҽغLdbrAࡊ{M.!}*dUQ2|GȴX,4~+=:ˈg U . 5IׯNi%C,`O n8L(VFRԛev8xxߣ,rTJrB^r{AïkCp*jAZl2nwɁŒKLdB&2OB&2ɆL&d^ mˈMbIlM&dlbIl^Ll~K}RE|Ѥ|)_dŦ|b554)2MlI"Ӥ4)ML&ŶIM !EB@2P ! E@^"d -$v6LX2:,/a/|wNG7%aNwoiINq?:ԏl:F:;P0}V$soEVl9bGU[\#_QV>0H{1Sr%O% uL @=-buu+Dƪ䱥ݪGF 6roӣD~s2U^"yqIq C'Ž,Eߝm{h,5J3hL{qSPCjo! Lȴ2ِ$6ĦfشdMbbbMk1!=/7z ^ºg% zc8םLjQEB"89ߡrgIx%Z\eФZo^"LG$ |]#P`{+䎭 jNh Jb3zYz6װbD\SW?xВN*_\y}\b fFvB`IbQx ğË5iSBWUWp5zl9ݠmNIC¨@BnxpE'uyF [F8/ɛu2BfT] Q_-@F vB㥛x́҅kZ.y)$\a٬2U*Ye2Lvɬ2-2U^Jd/H]{^Ž̟T*uO=^EـU: W(^e8ig BUBE/ApUG8ǻVUow-Ol9 _nׇ^{:+lH|9 ›\ه`I!Vm ^^7]~UC8NILt`8i *S]D(C#]_xe^Ρ/F`Pb:rG*HԞc{k *ElM.rێ$wW2!$d6! &! LlC&2/L6d2͓fd'&$6fشd.L;БZ-{M"qqk'?|,Rū0;X^W_e5叇8?C rC| |ҽݛx ryBC6 e` ]8}fyΕSq&񸼚}[Џmf ']PIFvC_N55SSCXhrXM7ݼz[:[F[j"KHWn,%2'BBB#I!k 5";E t:[!M?$G/(>_}\8OѬלٟ}/pdG? t#aGp&YV:*2 N7{0;Ǻ(~ɧp*OaNPaVD&GϴyvJ 841ԫ8JGwF10VWcO*(f^"2ug+u_Ѥ;QNͯE^,B;]̓ل6d&d6! Lȴ2ې$6MLbMl$6fdMbbb'|Ѥ|)_dME|-_l//~+_IIiRlO&ŦImRd-6)~kR"dO(B"d-BbZG#B!yǪ0p *{9*YC \B(F-;I̱e/C͞ @b-@5M ^.oGO!VKY!ۓRԚ\PS܇V$a땸XU$ori% ۋI ZLdcc;}s!>u|#E1Cx'7lQQ>ÈJi帣5 q.*'zLu+iL\q6H܌G3D_͊4y1u".fΩb, ^rK}b.}xS[)_Co! VC&2&ddWLbnbIl%;IevR/{֗c#Usy1M/{]iUl@SXi7~ѕ$81R J̿Ӹ$5d34dZ8ܦqr WKޯL+ѩ5 $e(JnM˙p )ݵ[FFeESyv=b  ٬ FEK8!ma.:`NWvU ,QYVVIqqܘ/p]iqʅ,a|[-?̓Ʉ6dL&d6! Lȴ2l'M&&6OLbIlM&i1PhRؔ/&LbSؖ/6/Ӥh}&bۤ4)^lR֤ ]ś,aEhY yx}-<o!&}&ZNٱ-W}&Z._l*=%xZAЬ2OV*]e2U&dW**]UR^UR^]RwIE~"M2u?I^LU"Xۀfu 7UЦ`y 7C_cEsJ&Ep069%hZf8A4c8WUSo 'UlT*<61*6*V5SA#o 5lT- g}]и8Ηys<1u:_ͰfՑtL,"4x[&A<#>2tURwJ&ݷLV]to}LF%u,ƚo(rr8 MD}u3[<9\QSVSDMX׊ 1T ^}/nS Z&J@ͼ]P}NG e~)riru{ø> ,maW Uk;P_{-%NxA<֜##1ݕ[hzu9ܨ&u LG<FCjJhy@giP>-\7<>̓ɄL6dL&d2! Lȴ2ې$6MLbMl$6&lMbbbMl&.u"I|YigX%rY4<4գ)yxyazU-Y)b^ݟ"^)]_sHH9AaGtxYa|-qwzs ?k9_:UWnb{"v)/\Cyz\ukRXE8jCC#5@UXo}MqXlxz@8$6HqmT퐆-3"^c г(^?8ыs/e:(GS]w} i@(:zu~)jٰ G2$Eȩ}i bwUq)BbGNoʊ`za{)'1L ϨD-_OSĭAmP'z? OMgKԎ0Wj=@uIJKV3(ZL|y2-)7CRRاTW ASޡc/(gQ.)k2OB&2ِy2ɄL6d2!blCf4Il2M6idLbMl6͋M6ɔ//6mIbSؔ/MEM'ML"ۤxҤ4)6MlbӤhI[2P&P a EhE@6P-!Ex"Н8.^I!Ϫ#:$zRq Uu "Ɲ%E [S"7 qfwz4ˡ?~_A=jHo/ :x2Z~@_#|W@E ]o݆ ;ʉkX!Gr/ZTW' AYpNC%*V}MoԝJO>ڤ?l0&[@J˻rĬ CUή7}ຜzb$hQ@*1{L "37oܕ킳6t̀Ϛ. p/궊p 4U2ۀtq;GN0Jv4# ct!orYkWb,K251l$ZU ]Iݏ*Nr/Jq `޾Qh/F(WZu?̻!! g!wNl6MĖ 5zOBvW Noݞz֤[ ;#P"u!m_UIXni4]-T%<(/3o-a+V}ݏs J>u8-F:ň-xb~>nNUR!;:еrrBW ǖ-%]269'#pOsr#?z4Actz֫2PlC X4DPx6Pk/7@33(a(\dC BQ1+ʘA9 v?."3* 5(srx\jX:)E5! g*CIH3j6⑉z^L9%Ӫ!{zyG`3ox£GeK}Fʥ5}Ћ n[I?Y/&ǐ8ꝓ8ʥq**'M~\!T+$]( UJS}MicMƀ`랼Y`rr:y0[ \ Í$) -˴|P̭zDnbud.$ Érqس|}Lȴ2y1d! C淐MbثM&y1&6ĦOCbۤphqe 9:N\MJ$ƚ:\(-.. :~v٤[ici$Ҵ+>p:\b]++"o>x? MRZ>7z#VudUkIƥ(22^j2PV׆,Df0Z+"j(o{@K$/y#R+ x]D!#tk$ԫcI`I~AIޅ:;Iz@wyc[?TM,z5/g<4d4 wԡBȴ2=2i,i7fcO/2勧kҤhIMLYAޅ"4!ExEfv'? 8g!)ù{৏OjMŶ|)_Xh|AI%Ac%{M",DiM+ ĻDoAd 6D-ΤAd %x"K!Al 2DY"8`]D[Ө(@mM%"ҽwz!e cR.((as2w} >XF嶲\뮦o$wh~_ yܗ"zcFcU^TQ`|bcUJV3 /ZeKDX[Ҋ*JYn**ӫLfyʳL{3Rm/*6VlzbϨ=;xWÛ*2*ZTyWțFF2F^piWHFF6F^T4c7ddش&Ǟ22=3gǽL{3q^UlڭtŞ */n_Lޗ'w?fcwe;_2a+a+/[m: vCCB&C.Ǜt[" DDA]7>t>tliwUoܮHFr?P*U fsҙzpwRb!raTʍ(YͣTˍ+ ѬhˍPjx?i7dz:d6!,YbnbӉ&y2@ ]-;_tq0_/h;_Fu \0x82yϖQmSW\Rʪ@#}L p;FUH^AVbypoY0v֮~:^rb)YnYb~JOF?A|ݸKU@ě݂.0&RN,Kpw665H iu"!:rqvlmRW 'UqAg(E\d4idŰ'3-k/S!|~fp$bQqXtͭ PQIsq(1Gee¸o^? Sf1Wz΋Q'P@e|!DyoC<[n‰?ao ':l#l7ljC?KEʊT1R_OHEGbrL Kw܅GObJpnV bȁTZȼ2?2y,y7fhMyn^`cnBf2&dZ ldBŐɆ&6&ۤmbIlZLlMImRĢUt̊oA|D_OR0,U61/ DMKC`<$UjUs*ϋ!:&1r?T/S՞D 04Z*-c^vcSĭetáQZ5% p[ւ\ɡzw4|Jע82xcWkpx=mF5|Ea'n2VuqWA?izPwB0"t@#' pfok/quV"s8n 8A~!ntlBiȓLb,gv?]ؔ/Bc&O7)6MMjEhP )N48g>VX1Vm/LEkM"-DE,4ثDoAd 2D/N+Al %hbK!xq&o3)C.DD[" DbC!Cm9EW`Vj'(O-f5W}yJx 兓WbLM!t}1__"v+đZވD\EɬԊRt<>)$_WfyQ.+/s4]e5S?}1a$#UeWv3-킁L%mTvzIC!UUW*V{w2?g^UlޭtŞQo{zxt_ h𸋾i5v16?g &C.ěDY" D '1FE@ NUQ𢊀߄FEޔǐUQТv)h$+hd#hE 'i8w)hd+h$#hE."h]=6oiQV=[e]ezzgշUe^bn+L^'}w2?ݗg̓ل6d&d6! Mȴ2l'M&&6OLbIl&i1Fq- zsrT~D5@Vϣk[9VoMJ 4 t'7Ov,b $H>I/Qf8,0)9s<Ydjc`n*r@Oq`MQ~ ; Q%UPmQ\ZdiBt &RU :*8riC XeA.-;D;X5]:&>eI^|A]`E|`EN$/T8i:SV@1K!ꨗ(Ha(Sz!pL)(<|8q]nzYFcz.Qqc4rvGZT5]֛yqT^ ?.=m zvHl6<40cWO.f_ʄѱpH^4&d&d!$d6! llBŐ-dJ< KĀRxvN̪j{Q,d;9cb1^[2}4XĮOekvo!G]+tkp?AVz{nMƀ,L&d^ Lȼ2yjbIl^Ml6ͻM&yr!ZRpOa#˜DAᡣAc8tBݏI|TD(Iį*UQد77z'bvWE}uJDx݊I|ŦX4N}h!eCtm>YSvDxm`EU"^!K6RҺFB'IVe#,cyT%)Ʌۻ5jh t'øELI4k>7_;i2نLل&d! Cf2IbIl͓flmbIlZLlzKlSxRȔ/'LbSؖ/6R>4)E_6)6M&E.ME"E ,>ObmR7(ly=.q}8X8Jujo34O"UvqC4xss(k7.==.0fusU*Ye̓U&lV*Ye^\eJ˴J˼K;HOU"Xg_LU"Xg1TE*1 })E@29 M"h$C%T8‰e`*My̲g*U THe 'A#4Jݩ6J]2F)ul4cVzlc/Vg&[]'Oؼ^'8yU8}ѦkY8ۂƩ6}˂Y_On:_np|6V6V[G2oΗG곐FDДMo"Cьߧ}c9fy2Ɇ̓Ʉ&d! C淐Mb$$6IbIl6M6$6-&6%)_4)_lEŦ|)_lEl"ӤxҤ4)M'MLbӤ6)2M5)ExE@P'P aEB6PY(a+w32N#ua|{ȇOMj 7`a{Ǡ\/PN5 Pi%M,N\sTrZ؇JM2[;)%a}e>MI!* A+l^&v+p|_ț9b"S1s-?8Wޓr$FX]u(WB ?)(_]wx@1@(b:ThIk^븏~)d6!jlBݐل̳+Il^Ml2ͻM&i}9kř;^|8B_ƪ#4կ(O]`$ {R5_?E_&v/;$unX:הEbc}2T|rgMfAߵ%\N&pN!:4e8q_rEX:^Ăc%'zL'rNlC>cp=k/c @n8Ԁ"L@lWzPd2! t߇Ʉ} C&y$6Ğ$6OmbVCb[)_l;+b//k/D_d&EMl"Ex}&b E@^"EC/D_![ȫ=E_{vxO5E_ųB3ěD2͆)3"6i"fӊՙԔM"hy&ELj5DD[l 2D" oDpFi$fԾqZawy[D7fW{HJG.4qW"9?v)Bw"UYe<ՊU&oZ6LoH˴J˴K2}BxSEL*;ucT"XۀfhSE<1mR co3S"7e D3sUE0NpbYE@FE߭"cxS"`"੊`Ǟ iSи$#hs}M)h\V4LfǦ{$5c{Y:[7fM=8yɫ6u_˂Y4N}[4qygeڜ//f} geޜ//[ [y:l]"2mΗG곐נȌMobCє}4ȌMoԝ͌Moi8ߩ{yVX4&˭U߻GBuU_^~wj?[E.?8̯R,Q #(xrS*b w,ΰ%L J F9jBuWNܵFOx##ډ'Olm*f ӒWRD㼌>\/"8)}p]/%hb#~/^[9hR0\j+~ӭ((z͔0Qԁ[*qs wCC&2B%6&6?d-5NQKr/'8ߗܑ]KPuƲu']΃}&7qJ}؄T)M[iX͔,͍ z/!CIJ UkDJI[,n5unj}18ܥaܥGxsE/WN蒧G<0饷qg5ԍ$I"dm 4: tz"I'∨<5ƾZ wBPQЊYmi!!*#)6(~~cBVgx5d8t{ث#Fx]T~!i&U bnQ*~(]p+ع1xʵ?Bf2&dZ ldBŐɆ&$6&6fllbDGjMZZQӁxPRX~UNe\e: |h,q%n( Px}M[ټt1oKP_}C1}sQTUE(.J4 FNY6{KOnڇ,cdT$,|^&hKN[8`N|lU3'AvZTWq嚾ٕeQdZ L "(j- G(^ e"m4]ėچc]S>'sssgϸP2U8q-OlQBݐلLӐ'MMO'6Yb/~|)_<-_&ŻMnRlM.᧡(S(2 8i9 pN{৏~?VE6E|bO"v $Al Z6DAI%A8i!xM"-Dřͤ DDmAl 6D" DO Cъ啖kױ{ z 븜3 / M?=!2Tie7>&6Ĥ/'Z0/oN=o+U oԜjb1E^_WQ>zM _ ܮFlB ѡ鍩|YfY@ݏVXXvAkZ m8߯22=lVf<˼<#ubn+سL}˳[_/E_4 c.1|d %x"K!x7"ȨxW8 *2*^T'‰*ڕЦ<Uw)hd+h$#hE 'i8v)h$+hd#hE. vش&fE=6Y=lywUVVyiw/{y&NOش[=4~Vؗy/}y&h|3Ż苟F_1;2Vޝ/|̰dy7d~:H-d6D}I%AH'Dv>ڤ}l>^}UUWyF'553M)/#/M-d49DIZʑt걹67p# #;zo4]ذ8˕rQy̟|:2T;*QZI-QI07}ޝ!c /?ibIK5]?/ݝN(/$Fn'.("l]C c\r6<8Ż:E۰_7n$RS劇n#v#O-تQo2G<1z^Bh{9YPdd>TH=s(M~-d L< yشtbIl%qaF9`a†bnu 2nS+LCS44\9E|bA1zYhE29{*};۬wE$Xb||&@8 O$IĐ}̤4֘"B:ik]Iiu9(Ẅ́bPrlCRj'=iCt8,fH[7I|Ӟ'A3qTw*:0\ y?wQc!)Q%IrZMHЋZG7T$0(^%$]tj5<py,0؍AKBʱ>kpjb )WL\-E#cۢ# ׮[r%TЇ=[e*)*U㮽< vCC&2MC$6&6=d=)_[E||͚6)zIiR4mR(BP"l͠!9mҦלNSWI%d}߹GRl#!cSbБDġƹG͵É&D*0ݔxs/[$lDwY $]MqC-䡋p1xRoAqR͂,f#\I%1 ]_֣QG! tfY9% z TNM+ժ'/D7ZCz_75W;Y)Tp!.1,RuT8Ei_rGQkoCf2&dZ llBŐ铐?$6ĦfشlMbbb'ZTSd{%U<84LjEKgX~ej4J|MJee uY 7?X,AQ:s{x6<#s]eh,az<~fKpIЅ"(WOS^iJ/0%/g;@r2ܛMaQӃZ9$%ʸ;)S]7AXwyHۜ2IQBY-MB:j;n$mNcsrCӗתL녶(IP:.,4SxPǐi7d~:d6!,YbnbӉM&yسŻ勞._d׬In⧛&ų&5" Ei(B 'NzpBOB㱂vbIb(_x}-_l-/~C_]"6 D"yl@.ěD[" ċ D"v $Ad ZILAK&Ė"C!Al Dl~ 5r{]UE^sfi(yqoEE+ΊPRIL.q(ǝ;[KÔ;гN=ͥCnF3è2?kshxt,뽨OUT> }UUڋܗ" ]<ɋ2\e]ezzɬ2OWyyw/{yF'+6Vl~bϨ=˴ۗ<м ]EO3Gͻ3?>AK&Ė"C"IoDQЮp6dUdT" "`"]y mcȪبxQEo*#h]A#o  iQVHFȻF444RFͻzlccc{ʼ*dl{w2?gdDNJM3A[Şet_ u/~}pðv˴9_&;le3la+}6lSȴ2?l!xM-DE"-D]7>t>tliwUښeуWe:CB/`9y!!U+\~][kTKQm ;B,j'6%LeIB _h,{6؅{Wϑt3Lل6d&d2! Lȼ2ِ$6OLbMl$6flLbbb[bW<&ys&ᗫE BW< $^^ }>{0,MBER8-V5CcHJUyo/3Ţ|ssSI'h"6%$Dν|;wxa|K,-bk8A:zH7P$(&Y6cZUsP9ZE$TG/'ǁ\l72Y@zǦrmmrD5/ދv S&f7{`{+"\.?8QEAɢpxfIAIsepxNc')/+RPEYtXx$0|6jg.zQZG]{W,*p9߹IK:ܷ z[oo%y,֡v4hfb.>0UFAOϚF* G1iȺp>ݵ^G~5{#ZeZo9iƨ.#LɄ6dL&d6! Mȼ2ې$6OMbMl$6fdLbbb[bœŦ|-_<)_lE|)_XȖ/2M'ML"ۤxҤ4)2MlbӤhI[2P&P ! EhE@2P-aExY Y q¾CHQiqr$K1,]N˖h%^N18o)웜 &|Ė,ű_vObyW#'DXޢ@Vq D+KwRH'+WSJWerڤ 2DψxF-CǛt2;[wRwuZ1x[gw^jL2T+Fqn(.5MUz1 x(}VN`{r_5KE ߏol Hof9ZRVa%^ dFKNYo_x| ~ 0x^kUMh ~* H$xJoSw@ނ@+&v?oW-`XfhL)u~ Z}%q\(b2_唉Z\* ҁSDzQE$r6-%ZU)*_$ơaj2> X/VF|&lׅdhEMjzT:Ω耟V ip & =C6>4loNgvBv[_MX}]E:eyKhUd04l8gm̆EZ*U-?gP]<j2nF:|uI81{쒮FtMiH"L7΍l.`>@.. e(t8q턢 JtQm=X3aU] 횜M.%ꇸ"08 }%V%z6 $jFrz<"-$:'g5FIEf/SsV1ٟLwMM&g2-M^86ulzڱ96{nEJRt7II\UZA Ei(B7O'4\iYw zX96?/&b؅/ _ED$A vD%&DbGf=DD$A IGOAtDy"Ď"G#A( (s.U5(UA _dXx'LB/ 4N2L2bIQYx&e ^iV]D7\M2~rMɋ&ՏpoΉEZ3 %-?@"hp:F}Nj`qHo!M~S滧O2S)/2߽]^wyn#ثLw2=W ϼ@_t}kՆ@_+w16?W W"A|"O#xM 98A~oN"`7E@wcx )rS9E@Sn4́Fys?f8@#h 4.} 4yl;M7cylثS滧LOjlwez.?*b݈MOG@g^e鼼h+w?VmEw|LʮJV֕tdzUKdvDݥ&GbG&D"G]o}>vtm})SOyE~bp3+s_c~'T9'>k4ݞMz4 x47ϮI޵3]xBn/U7QxYGГdqMR`UCm$r9Nِl/U0h`/sDI7o;„$R8!Еp.h"-|)voo"` #%G2&p8"Jw@e@բe5{^+cVWMH":ob@ -vU|Cٷ0LOLdZplcsl^:PR8#| S#rWd9tU$C nlcT9dkvݨ1Fh<2+R[y /aiiwi}&%Kx&.-h  & @8tj>6M&TPVtGSŮP<"n/}\ ?U!B\ nKQF5Q7թz:UxB([*MKC"?L>\JWۼXO)XįW>8ɽjr&WxF"lt'HD#.NY /& {<_c(p0t#uNgZ6!)RV(Ԥ㡲6"&z*%MjyϹ0^Fs%YzVawvA 9C-\&o,͓88H5!䢪kjJ::d.ca AvoO]$q}[!yn5E;u5™d{ݸMl^*L0pztB -tĥ%鍫85|g)0514Ы'R^W"OG*ئS8$Qm[h1WgOÓcj"~# z.c21)˕L]ə̛&7ɴi2aαyױ96o:6{&ش`)5dojh[1Q#T?KHjr(o[Ј(+&7@TUk2%`h,@Ҵ}R(g3yU?`[aR9 $ jgVM,r2bDjݸ0Yo:qXy_'y)iYZȥ^I狵Hһ޳T6xIAM}b|_~鎧Tf?9bOO2?}NVt.wyE~U+ӼLw2=W ASEw=VmOtc{p~`lrD%&D"G&_0?L 98A~oN"1|s<)ޜ")7w@#Fr9~@#h 4.Fr|woc&7͛WwO>)/2߽]^ 'EĦثƏ|7/yy5/z}p\f}\7웭+ɫ&A|t{"DDAtݤ}>ڤ}S滧O8 'ݝᤧg8W 'N6єAe˼H{! WC4kڱ!٫E% ʚ8ۮtM{)ynsm+$k,=t!,M? <]Ml ?<יl_3KUV@+ɇl܌e "ٛU4 +W&K8+ןkPO\w g'+rv9m/qqTny*AbF}b-.]>!X(f3KdTEpMǏ& 6&@xxgC-'[/cAt" gJj}E@(k.TKǖh" "R1Xǖ2@duݛcBt? ]˷#6PS!>&7OM*U:!@9{αUzLHQڕE9|56|从MO;69滎Mw=ȅ/n$w݅"4aE.09#qv{zy?,L@>){4yY8iE/塃# 1M a35X 0qc<6tAU4$`~α"xEŏg&<%.SUn_9:IE?ǸwͦsEP"&b;Ǧ]&tױ96vl?uN]c^ *q$֠q&(BUGEx_)$їp%S;&{%Bu=^Ɨ&6+ÔԂ3)n,)ܗhÔMDP)/:!{60mQ:nNї"|-u׮L&ul~ڱ96ul.|w?~9P"}]O_nYO}.|nbC_&;"vylvDuDЇc;"v ߓ"GnODa#s? led(/Mv$st.m80! ʺ;ϹaVD*p3ej{FD}Z=NYy]$ץ<,ob8+});e}w2=}eMލtSt7/yO]EO_>E@w16=9ENvD2 ?EnvM78OM)ciw5[yʮ]LO/ 9"w vDt;w>vtut=e~9wg8}oHsꔷeڜR49$k:R>JݙQljMC s8@ЉZ}~ $ݠr^H!WYdo-^*Mhwe86"_)g7/T,zKt8%ꗦۖ* Ws(-gU0Zu(Y`Q^qJI YMs.,׷KhAdZA$%[Փ!m"EVh ٙd^Ldr&7ɴi2y96-cwlZ869&ccw6IN$BڋNh ߗȲ*(ӶǛu ">PmD"Nk+PuApum!.91m9$_oB q,\.D}GOΐJ H qJzc4x"z\R]f83 c&g3IWåk{Ӝ;glN׈Q?[{}pQi DˠiŔT9P(( jj"^AM씧dˈEiF+S릦Lq"̽UGM1lugjspbzG@Zj?Q<ĉ-ҙW8%|GK&wڌӢԮD2S7 KZ8"@\٣zeI!~;vXZ(*EJZCoTD#Bɦ /7% -}"R*u1I)!d4'Soa ứ\`2-Lfg2{ia2;ٙdv&ӦM&ؼplrMޱycwlrMMޱم/Z/v}E"ȅ/]E>|KRHR$ŋ$E.IKR$śI|bEhEAPP!ECrP7{(r4STT/j:nNՐᒳ˞Q[4Ki&-Vʻ2hA#yPC M~gg<nR%@mY>y{"GD)CTi>6īa|"| _.|f"%)&"%)LR;(BwD_;(BP?ȦKE7׶+ac/D_ێ*+>{3|-D_]e䱗D$ylvDV, Imw+AVlD${R ZDw I'A vD;"=$pڌ{RoTSGP.R琴x7=n8ܗP]deBշ1ZqJWuNm+2R]WT,$$W\}g&22f{VуPCNLٟ2-N);ey7I]rwwI]rwE/6u؟ff9E74٠l-vn>p "6ùط%D7m`8tspb{)x ٞ"`7E)@#hܞ$7ߘܚ]4́I]rߟ&7ͫyݱ<6ݜ[]Wc[yl9=˟ɛ˹/9=иط}|so{q?wp2/oV l]fyʮʫfnK}_d-"hIMobG}vI%7mRwu.u&ݷMݯf8?{&2dN>F"|?r+Gh0א6GU,o[򕺚 FC $TZ߻)"%c< kJQ.Ǯc+Vrp:;ɀbHm BpcNJ5N&C0m"$% Cy!fuj1ɺjDP\c5Ik o=IX(U}8_ 7UYd~sٵ.f:I 0,ϡ> 6mwMMfg2L^96ul~ڱ96-?YEaKeQ(s?eS8>?5ۼ$|Go)\/UFtiVPs%X&J.1\]NlІ,v)-k8C&bx c^F =&x .($B9,s{<f/[n U$mNCFIaB^@GP@R00g~ E.ZGas8"_58AplI]!F=Q&WU_= 7RcOϮZ94^P֠)G,eDY@[u1.Vү 񯵅$4 zNJJ E(q)xD*Wh =Q/KW8BHW 7э@: 5٪-n/ rٹe`:ę &.CpD;'./ęB.)_ gLwD~CڶCq|dk2=m2;yeʱcӎMαiثEw?؅/ZUINR/](BOCrPWPDѢr76uTQ)}rk0vdѐmNEӱI]AuڅA l@WT:B´''qF>fE$tn)tRɊdi] J+@*J9CTl*04y gC d{ bl`9mܻ-qhf8I681A: $6{7:rh6p2<"{ hZKn߄$ +\2ҐF 3_tmb#)\QVzZ٭Xϊj5Ϭo-N2?}NW|.wyE~U+Ꞿn^A/z}p_blib8?06;"At"O#x$O"tsp)ޜ" 7Ewcx )rS9E@_0w@#Fr9I_p0Hw@#Fv9Kncylys<)ӧ[8]w˫䏻|7b{5Wyez:/? }]EOU+Cf|]7䛭+ɫ KM=DM" ~.7>t97>t)ӧ"u R3|w\Q3kՎ$TFs[y_^uEDJ^}7O/-]@E4фM:4pU`"S#6 jUpFzÃ8TZ@);Xpc7ɳIWJM Dc6/,kzuEA+o .O^#adq&|$]*m%x: Ee}u<0 Ɇ{3[HXlҹ͸bh&&kqZ!ɏyR|"| _E.|f-$>I"IKR$E.If/PP!EhEAvP=aEh"mk̳Ir`IR#4ZEnvԝrCD|Ez8K oTZSGڼQT^J>. 9"mf{׍0l` g) qu{L(^of=`"gRcCp,c(??*¨{L'EG٦cC4|5QHl%Z Dt? KDD|rj cA j2YԸu3Pt8{Evߝ}:m"nHnRM>EBXm윬@ oo AcSnL5[RH AZN)2*׵$nrAPTq~q% Yͷo8o#rխfR$zii ϊh%u,{1} ə ٙLd^Ldv&7ɴi2y96-cwlZ86;fccwlr]bx؅/v|"x3|_E_t}ORo&)HR]E7{(B&!EvM^/M^O7{&vUYػk&_-&$&c#hcv+D$ Zu+v{RK"oA=)rD/{RD$A rD;"D:@:"0iڞu7\n!զoEA-MuE h 檯BZ<yRg,!OWh֕4 '"3\HB犅I*9&fE3b|8eٓVuS);e̋SfwN);eǎݷK.>ImS$u7%7m~5Iݧ9-Ӭyv~.)Q{ qnM1#ElUZ鑣`0a{otK IjӰ4UwL`ˏnibDV0>ԳŽdVQGyECy5_qB9&*Q޵/YrHS8T}_y},IȆl'"N/x&VwyS^A<BMwpO!Ψ \&e1ETݥشZY(YղmARG2G%}Mɟάw[#dER 7?,}:sIRoAtԞ'>lԞ>C@ IC㺾SUsِh,YL't)R*cĮ/|"@OY!~f.(1ŪDС*nM)%Qf9BҒx?IgY1޴s6ن1[% JY  iҠ"*$.TB#w/ ͡7EjG &DAON{}@SZ5{[++g7`46s/IRǼBSq+QfiyٲҺIVTClVwC )pMH<_e@.j1<҃=^Cźfe\lGn[c`2j6l^wmmup-l"|,;ⅾDFF'ҽE􋆾8m<]=)!߄ gQ<ž(K'O),mgի)O$^qG0!h iπ G֤$ {_)r .C_B,]1{yDD<z)jlA&KfԼ pF5|xam/3|3K5GH'Uu$-P^bcW&]iٙ+WwvlrMK^/.|*|MRtbhPBz""+Iw'? 8W&UYAw zX9gYE_|}_o/@_D$A vD%&DbGf=DD$A IGOAtD{"DbG#:y7—,F| SF97؆ɦޙs> )XM2% L{E,Yoj'3|Eh@cxDK_OBW|@_OضMbBQsXzVxǢ K d) /CWqY^fEdds"SLO2SoO2߽]^wyn#ثw2?W ϼ@_t}kՆD_ Mw16=W 'A@]"nA vDm2M)vStwڤ}SLO:wg8u1ylw_뼂槊%gVCԋd/ whUG fܗH^6m"/o3B1M"ѭ S%U )Ec1F-JbJ:8*:Ei<Dgi4 Pm7D)qsۊ!58Su7s3^/cwz)qVb8}jA"(}y%մXҷ MZ^Z,h&佔$-M6J^(_9jckBDѕ?\LwMM&g2/M^86ulzڱ96/;4JhZw2Ab/ً3tCޱ;KS$ek#V%G&=¬^/"' )4J{t<&R闦eFh87S(&hX آ fy,&jmNEBj9QNEz c,j@4!xRq‹iG>Ǯ2VVpYx6K Z s>uʑFE1I/FZLjA94uW@9EV= -A$V)#j"꼾!i6$+ӞDFefɌ0JQGِmh*TW"Lґ^BWDRT>bMH*fmL8ڂUcG/m M' 2.8D?XV^m.c 8w۹Be[l).XDǵt) L ǦMO;69o8O _t"hI&)z:IKRJR+(w? EAZBऻ+?碬e?]V .|bx3|_ KM"<ĎM=DD$A V'A|Dy"ě=)I9"At"O#A rDy"\+CzjelWl4^΄sb^4PL[f+A+'R==۪|[еc24ګ{dICD\wL:e22B3aovcM"|HG4{S ǮH!8,1ɴ0yetH{,7N2?}NW|.wyE~UĦ+#b2t^^5h>}]EOU}-064^1A|D{"ě 'y"M)rS|wz\MyA{ۥ.H`З(KugPf⁢_ѲA>2*`*//CgK o[O CgďR5)^zM8WE)=+Аuչ秮#pc|^S(si%5l+\p-B<CTj>3FS!]N oE,/^/TZ![<|7&3ɴ0L&o29yd096-cwlZ869&ccw<\?fAsL P"f{w+vAĶ|}H=-{-/HtI;b\8.Qd m$O}kXۚ8gҐ9M Zi 䶗qU3ʠkE!PfL2bJO"!TbsR7ye| _؇/rII\bx%)vI|bh3IOR/;("{(&!EMF)"j4<V7M)ħGޝ1YZV=)4|-e@E>pӱMǦvsB%ǘ&uMZ2R{ӹ5Dn:A"k)IN=ČZ i!dE5 I) (^,,c>Ki$OvڍI܀, _+)`P5}CK$c"օO+*]Ҫi4ɴk29Lɻ96:69ǦMαiػy"VEw s PV"CLE,ZJGG9jK+iOgJՖ4r[/IgrQҬM:u@`aHř%Y4&5n,[r&B/JbU_9%CC8ئZ}I^%8"({R Mfk*UM/g2{ܗ3;id0y^vMޱQ/^vMMޱYȇ%+ _ȇmk&/ʊm&)In/PM(B욼D_t}m&o:}Mثӱ7}M؅/Z]WD$ylvD-y]^AtV#h٭I- ImAI횼"&D_p_?A rD9"=l IC2|-m@t.@ /ߞI1$ĭli<_3+BɟjV);YrLLI꒻˴K꒻t]ORwߜ"ئWWS|s`A˟ Mo9E7p+ن5yEM`\a D6Ɏo0[S 98=E@nrUnp+ن۽˫2/o7[5[il݆"2/oW&Է_Z}|&A$>rt7hVtݤI)oЬ>ImSOII +GeIl#^HO iɂ @~R*RۈO"]\F zlKU%,׊ha úb,_j"Ps0K}_6VV+k~pBGj;5Վ?7ieFi)H*MuFE3-]>U]Ltr2SHwq_aͣ`z`.Έ5!/kUz3Ep]tU[{H0E񔻽^\kfUlWbLwMM&g2/M^86ulzڱ96/;PIT/`zR%E_}LO|jT($9}۵^Dٯ,|*3G`) 4D$D_[5|9.*Dmq^HQC&U>2R{7Ic&i;Z5ZE^qv-ॲYb>j vg ѿ\hR]EVM(hB+軸߷XL|'1b ~ӛJOۻʨ%lFu8Q5DP ?DѺ2I@gU?W)Cv}npmҩT콀3fb-MnBp oЫ*5>ӁX0^҉h#j[{mQOM&&3W&:6?V _|7|]eZ$)$.I7O߅"4aEh EyR|Km#B1CcOh'^^*+uW͈qY Z!Y7Ҫ61="-miAŦ? 0!6}$\ >dxX17t7-5C& bm_D9d*Kc| zH'Z*J*8 =pхP%eJ{Hs14zLQ-UPL5?D)qf O0/8E+OcQCmbJˆ6?D+| WmǎjԁRζFԣ"9J^[edv&ӮLMɛd4?Lvαiױ96m:6yfؼp#dMm<[L_aDy4\67SU@ z MrF^kC?8T7~z=ȴȨZP`L_";LN(_BDz ;`IIvCW )Mz ㉸4{,cH1:Jnu$)`1pUC2PUqh!q%"V@mϿ 𥸒}đ _6QLC"VLzU,CT@K Z RQRWp&r&y GY0 (I,7E|QHBěOM&&3&/:6?_|7|]eZ$)$.I2I-߅"4!EhEVNzpLtYrϲ…/&bȅ/ _w I'Ac'A|Dy"ě D9"A|"O#h'E"G]"oA vD;"Ď"OIH-b#d,?AڲpU6"= f2*VxwMyuvto})SOyE~bp3+cy9,woC]M|@W5kܓ8ZW}S57jRڹP%fPtǡ4x|x? əLdZLdr&7ɼi2{96-cwlZ869&ccwlAvǗ Q 2:$Ro|Ro$R2MFx"Iϓ>~] Q}.kTA%#]t3eKbNFtKP\%m){4P] |"| _E.|f-$>I"IKR$.If$-;(B"y(B&!EuUT=Zԩ4gd^b\LEF=BɚvNȳ̅7 _g,_Bv)O2C+\(,ar2ܑt5L1Vu q Ӳƨ1eT%=]m?'+-u_hLTEtsiĸ !1Eƫd,e!ki8_L{7ɴk2;id&36McslulvMMޱ96m:68v ;zl^D6YPZfQhZ4)YK]Ĩ)j" )TAĝ#8n.YN|i- +wb"ӧ7x'BP!b3ql P%e ij@&2(bzgGykO-ħf{PЦ$zQS,uW[dB`^8t)nIKR" _!O+jk DE͇ηl}p~bq,Bx c _㸺㄃*M/Sĵ^-*쎧ёI5Kp}8,`2/Lfg2yya2;əLdv&MfشplvޱycwlvMMޱɅ/^/r}E"؅/]>|ЗORЗORuCrPWCrP:Ż&pLweʱ<o߀D؞MAۭDmv+<Ļ=)OfOA vD vD;";$݉.;b I6%~&AQ5٨i]n䙜Z@do#EO!^ _w}_&oq7k\QoDI&MvZެȑV*Z䩳:;bUh%2_u "Nɟ2-N);ei]]^+R]&wi.]^L.uϋ6hxW ??E@m8ZU)E '/0 ]Ap>O'xwNޝ"19Exjvg8@#mpFڝ9כc<6펭Wc~vyqWɿa{1Żث0݁F^@o[i G j26[}7̻-u^j?_^}Ky7?O]>%uiq+R}KbsEo`r: {/L/E^jȔiwt%Il:0jhU_ŏ浑gZ1sS-<:F~_o`F }S .e^bX""ocp;\C#Ɇ٤#@۩`j7\>#Asdrl&5bDg"6ЕkaZ,C)qVJLL&o2-L&g29ٛLd4?LvM fα96{&ؼ(K{3+#{ ^Bv)"7,R)h^Ф S,UUjK͠pBB8mԽ,\ :q(K_< a0UVU ԁ@#nv7 djE?D%]A݋(6-%SŊ :U`CpG5stTB%Bx$pBb̚ŤCS΢@V *KnИVYiM >tH'j-"xdraP[[>$$Y'mG桙fM?}ęd&dv&3LMdشplvMޱicwlr͛Mޱم/Z/r}E"؅/\%)^$)vI|Eb%)I\$>I""y( (B";(›P?a LxjTxvw k"LSWFOY"UUrM:Րu#d87 !I'Y:05&6(DmU Ng)kackYժu_3K1AεUUYTrP:ir\dB dVO$/ؼIBPia29ٛL əd&37Mfo29csl &csltl±__ŋ.| _E?}$E.I }$E.I_<aEh<aEC_k2/?xױyQVϣ/ _}f kA. <Ļ OfAۓDo<D"Gъ"G#APh~'46X)cV;ys4hI0иBwnvVyqʫ??ͻɼ˫0݁FZD@oZ4"/tO˼ۆZ|w̛?_ݖ:-L^CyA.>$h)H?O.uϋu>y rQ"&*\@Φ}f?*O?UXKVg 5҂U 1Yz(R?hd I^L@Tّ"$i8l#jo@vhYACFeT.rRS/WgM` =7o <)ԓ?UICڥ~ε*\.MkuXB ~j㋠kk2- /ҭazNg+;t{&]iٙ+Wwvlv+^/.|*|MRt"hVPB~""G/MS1kҴYYOj0ra|N!#EQp5z+ .Sչ,c5œ]qZ"(xWj H) Ii,QjA%hr@甧%mӔB-w kQ>ޜ<> \j&`2,o!9t _8.fZk9o^G._zU/:ye : :4{h 2U7zђ2aeBKTyW"(6 g))Gr%ł e:qj%z QF"!z4I& w}"p bzErxI{8[p&@_6uhB^Q9i"UM2B@n7SL+滎O;6;Ǧc _tbxVI&)z:Irw? E~9⻀}ݲ.+~9].|G_<69"vylrDuDV#x[⿎=)rDAA vD vD;"~?$/gHԐ'SCt6Dy-Ybԝ 2=o/'1~Td( 9%jy$eh.V7 Yu+l;.ZVyQ'2l*@7Si'i$<Vހ` ̀7v|S&wʼ:]Rw.w]]ޤ#6?t^St}k`4ަvNrD2 D)ޝ"`7E}pbwN"?9nwg8 4_7'u 4.Fiw<6utS|.wy{{wq;b{{kwq;/yyo i˾JʻVrV|d~.Ď]"D=ǎ]GGwO>_NN~zsǶ:6Ȅki7bN59u}|=&jh [fBפ%HPh f$3xjEv@گSҭEMzqh"[:H䦜 躙w$')JR.LDJ }LG +l9^7c[h$l:o:ʼJ=D{{Pr1Q~eU=NG:uuMI I9{F"kse^8ٓMYBdU &vzyx*Q)Z%yv5{&]iəL+WMwvlrKF4k='T1cUl_9VE[:DF$_!sHqǡ/JJYEχP$Y]>^ɤj~8JJ5$QJAx >djf 'y~Uenr *n /rN^@V+/mPp5gʗV-Ѭצ`M, -|_|ErWcSV$59¨B Z{3b1cK{DUu; GO6=9N]O0#p*٬1j40n<x1Su9#E;0s gJ@Qp$ר*TE>/Q7F"m=>.BDL&g2Ldk29iecslulvMwc7; Pˈx(C*[pQmB:O_6Wq¶IލQVq"{1G]!֊Tj<F3Z=- yI}b15ui@܄;{G-` N#b('Éh*Py~[e˗jG>Ͱr)g:C@<h,$Q&hVP,vS < hRַ6ήX"Ӽ:QdE0~I .nլPN%?=e{);eZ.}L.ݤ#6=t^S|}k`4ަvNvD2 D)ڝ"`7E@}pbwN"?9Inwg8 4_7'u 4.Fiw<6utS|.wy{{wq;b{{kwq;/yyo i˾JJVrVtdz&D]"=ǎ]GGwO>_NNzzsD'пЇ,*oz׃5DlN!U@W @G./H1^miQњStn//*yN2LW:i=sD * |M:DQh}(u> $k|FRI/BD-ˈt~F3TBs8aMǛB# cώTT xrb7@ɡsyA#gU}FZdfb~H"^W=MD)әϮ8|Nln^&5LcD/XH{P@g4;d5-˒a6#NFh+U9'(?;/hҤ'EH.e-6cUDO}`"fB-~ME'. ~84 ]H![ iJkO5/r "EQ'U ikh2ɼk2;LɻMαyױ96ulvKǎQ_Dw9ID z@U(mȷViV i^-"yW,dTAO((%v Y˸hbQWq !V rii+|*ONkz^ M4'%~Ȳ)Q &‚$aZ&KKD3Q&Z!5utvO t^RWi: +cCN͋7,_1͹6Q-JjxQq}ZmH9gsA]F"yW\*!mwHiM&&3W&:6=_|7|\o&)$߅"4N~prEw ~ˇ/rwſ} AA[An9":"Aۓ"G_G#A"A Dˌr?e T$SS7HB+vhw9͌eu̖T~Yg69kbK{Љ $ 9G9t|fco0_paZ7} ;`tUR MaL(m&W.E{9kK/JT$g>tN2?}Nq[]2 uMOG_>Ew2?E_4ڞ"e816= Ep#xdG'6M)SxwNr;InF?nv'u 4ohܝf7M鯛ǦLO/Ǧwػs_yeo i˾ʮJVvVtd~.D]"=ǎ]GGwO>_NNzzs4/%"&#Ȅ'Tliv#IGJ;"Ҭtty[tKjV[f@b'`~ϱ(NTUdc q)LbCx㊎xS >rXZ#1"pY"o]XI51s ǡ 7%a!~u)6 ԍYҎpwu%I|$u `M iݯ|2tJRnrIIkQlg8~:QRKB[plم^FpN&]iəLKMwvlrKihZ )`]n5VsW5"{K3kKGT딇(וOA71[(EB{>jm}A)[sFEyVn1s7ZQDBQ,&O(Z)r&xJBtL4?l_%БV+oU!B/Sr J *WQKnAN{Gݲ ܬF v  jnד]ZKy~|rHmG?[hƊDPԓ.}C R2Ը J9D$8jT=B=PNWuMBt2WG/R j pY&,Ijaz ":FL,͠JPM~㑚{VSϽ]QT)R8~cV̄8:QړȔN-tPjU(-d*ӈxUotǛzSK5y)]EFц tdzdr&c]Ǧc7/~:| _$Ew=%)F)P"ȿcv="&|YuF qE."Dv(: Y)iɦٿo!ԐY6k+Yxr7JhRVM6+, ]Ί"1g]+n^H DÞ.GjTJAعzc^*F4\ ~nsFlWGN,_w'^]!SkY val!q\V^Fd5tdv&M&ؼ:6;cjqohRT. Ÿ?iZFDkK=x6lFE^LRPUS5hF64ģf=řU&g(*ڰV ~}3, 5.j^7LdzWx± ;&6ëڹ!٦ 0ΦC} % ߤ~Kѷ1IhF.4xEiEs=HYM$a!^߰""U6̉%  -gf²thbU?diFgPL ǦMO;6;Ǧc _t"I&)z:IrEw= E~9}ݲ.+~9\.|G_<6;"wylrDuDV#h[A=)vDAA rD rD9"~;lдg46V Sʯ__5h貚Lі3`ao%DuLK:%hoٲ@bw/-rD m?eԑSdԫ(/5|XdYYȾ#3S̢ Yr7yL9}o{35݊LO2S)ow2/IM~;bOݼLO_>Ew?6mMOcBl1 e8Aۉ)vS;En)ڝ" 7E@tE5W+tD;YB7 Iv@W_M_ƈ"rkgUqӴNvYf5F;#a*c #5B( RVܛɼ0ML&g2yə̛&7c±96yǦcslrޱ96o:6y>WWDuTԃZt 6#[r%)vςV-"I-XKo Ei]jZc;-uTyʇ[%r? "gL<͝zr8D'{' <5h tQ+'p kCFcJLꗀ!  E{VSV<948>jhJC(f[.C'ȁ-4`73ȗrE[YdsWJ8KշA4L=F qiDkUf]Ow-d0Ec[9 QT}/QA8$IEf&&aKԪ]=?0)\rKzt f0*N|s6xDPB΅yR{$vUZUP̣\.ZpOǬ݇ZI۴#jqq=ۜΧއ&dr&7&3Mfg2mdr &Mα96{fش]E"؇/Z/v]b؅/ _E)I]I]}y(B }y(B_xdZΕ}ѮcX9G_<%uiq+R}KbsEo* 4K&Wrm-*q&*ڪ@mԪ ˆM 5y_ڻW <+h+A(|8M *zz jkKw%.Z,9$!Vކ&3ɼ0L&o2;id&/_'qMα;6-cslαiӱñW/ʡ -^={d?Lpv)]&V %F vwHx5Y19QVH4D}Ƅj6[5jLq9Tc PLxob C3S#D$ӿ &~6ϓe{N| 4KuZT0$?x}H?E@B8$n-2MDwjs?RRcx+&(:h&!j IQ<#qqb՜'\<+IeD5Z ԫ@݇_gPP[c7-+қ*b{dHDx(=I]3FN4/ΞHe#5N/(bSzZ}?FB|hcft!>q[|!dl}6͢R6#wk1Lfo2-Lfg2;ٛd4K969&ؼplrMα;69ǦM&/E>|"| _E.|f/_ sI]"h%)rI}"x3IGZl8(B"";(" ECo[1ٺ30D`h߭ t_X:zF8Lϧ45/LN\p)I869˸%xdv5EzUg8Ƙ.|H7v3Md2Lg|;AP-v}MuPd+nD($ÕA34iJJ\*}F(Lk=/ҨUL,\[ Jx *D]ғ͆+a)KSD1E<M?~.kS[&7ɼi2yɻ1ccczʗHkuTR]$U|IDa7%6dtɨ!]+qOH9ȬSBHɤE54+8[ bF,5jRIH@-.E z <G^x򍺏g8ܜa4 6tD`pNYWCmr hI/joDiVL&o2-Lfg29ٛd4dc±96;f6c 翄/r|E"ȅ/]E_O$.I }$E.I_<aEh<!EC_k2-?xױyQVϣ/ _}f kA.& V|٭D<D=?O#A"A DRdCz2tH>G;1 BSOw+νC^̗k6UY|C@||ɷ,(3!zodgQG) y!ج++#2Jo2rɟ2-N);ey3{./%eڼAFw{ZDuxAËj)m}pe2+y`9pz"6牠o"M|!J5E['~.;Eo 燼 hIݏ6'uh\"ػ?7ͻc8꟟ǦdZpo^mhE^ 4r@#-jam8^UyVyN W-_^IADП.st풺8>ޥy1ùN#+))˻([xP|.kՖx"-Yƞg7P1Y~\!3@BӸ/!Bd*vюnH|C[|6w!qy^T-mMX X'#ukig]ı4$D]Sz>Em &.ztly7%e9dkA( oN޴m+<;z5JE$[QIN\[ཀྵPE2<9GPS?ށr_edk2?m29ieʱcӎMα;6&cDW.++UaVuVh6d$KElJ((oyL-LJ^p V(Z"7i)EE!(%r]R|Sg+D@&Ά ȴ PW^"DnJ=|tlhV]2cIc !{$81zcNb284rSoD&@ˌ* Az,2!cZ1Jצ`v|||bp]Ŷ&$XMJS±J'iUGi1~ ˞b׍HK]l7 hAbnDh9v6,bo0&(ATX:CWq7eg>; !ޘ}RpS z IZ-ԕźd;dE⹳:N)ED2GI Tz:TegS /-{^b&z.txѢn((vwMM&g2L^96ulzڱ96/{nE _?KR|7II]eZ@ Ei(B , Hyݔ# rϜo,\^^DxdYdT^ /CK5zEA܂Ljm]!~[v_3L pfX)Ae¬RƨnRy"FP#ԋOO4cEˢ%O|KZ)xfF񋼌p rWtzI*:гt|!;V2Pbt]S{pй7̻ٙ&3LdZvc]f ǖ򰤔%8 hۇBgVߣlk!Z Dd3T%a׼fgoK}eQ]D)q5My U}Pz @]bk`bB@\R^xL;ދGnM9YZbQʜL@v?HFۤےLRwR 03SGmMH^V[)94wUpP_6(>%sp$Nl( O1^42ۦ]Bi < 56ɴ2yIul~ڱ96}ñn _?KRt7IIꗣ/ Ei(4tYї_/v~;Ac##|D rDuDI#x'Ŏ⿎bG#xE#A'7h[ )6ucg\.B7n|qΊN@* LM"!3f[SNʘS<" :ß']o>+BL#c-g"iK<"vAÿ͓͊?C^e).Q2 85{&*[jsȰ:t+2=}NInez.˼˻vĦ#/"y˿|/~}mO2"a8Ap#OA[Shw)rS;E@nx 'Fڝ$7H@e7HO 4ncylrcSOcݻOy݁OǴLO2ݷՆF_4el%lf+f+uek2?m/oA %A}>ޥ}}|Stߝg8r@T? tFa,ƒT9˼KVQ^誘}m A|oépi=Ĩh ]>D~(Nb{I^'o(nnHC8ئ=* Uui" ic6qwsECnfX\ 3$>s唨}!l Bęa) xDK=U2N3fGт (E"C3&3ɴ0L&o2;yd&sl^86;fؼplrα;69ǦMf~*숽c7u ˩う.K{/6Avߏ_vf[کsя=:`tb~,z:4+82آ^ZN޲*)o\9~jgCv `":&(Tf]r_!riͶ HM.@CeغbvJQwə,\!t}rI*tR,NL>,cMIӦV.t8,Pxi )`pbq(9^PAQrTM1·#vq`"PB Oo1K7Fu(#p!۴6.Pq03L0#aQq?Y["]VrHj2y-7Eغ&4!H%V=!EUzGMPH0xl2D)3Vx>2F׸LW5 kƙL əLdZLdr&7ɼi2}?86;fشplvMα;69MǦ^Dlȅ/]b؇/r6>IKR-$E.IORo&)IP!ExEAvP<aEhP$ퟶFBvdG}-۬!>-=wS k mgj/X uLqZVL8c}+D?:#i(P_7('d9DNJ HuU`VqSafԗ) ^PTȲ5p|`)g2HMFpcOiS$Ovt,mVna)v *J$RHjlrNڦ-d_d&-2L-o+W{"l\H_H:93ZxXeټ4lʹDrkd9 C8_)8eg2;ɛ əLd&36M&ocslM fcsltl.| _/.|_m/k]bx|bC_"B_"ס/5seG_ؼ(+V톯Jj3|x~Dv+>nş'h' Iy"ĎDbGџ ~0<%`x:t\yqzR?r_p,ŹHBfX\^f1 oA45) " sK@d|sc<.>d2y&ֹ?4+"V[U9yL๚\b8);e̋SfwN);eclܖU˾.ph2Gɼ0MLfg2yəL&7c±96yǦcslrޱ96o:6y^e|5B̨]ˢ=kAraA: c{QbWPSoCQKJPH mE_prls!2HB׫;\48L)g(B'L4S/#IKF9B]p/[ NsDSN{>P 6+L"i6 Fg Q<m`| ݶ>D43UO"P^UEݶf7Pʠ4J#ER?É%BkC4mE]JWY}BwpK4Wxf`ʩXq~C|KT iϴS#5)N*>|"| _.|f"V')vI|E"%)I\$E>I-ї"{(B (B"9(›P=^ufD&Q2"ΜlA Wæ˲ԵيXmcKO"KdAff7!jჂ[UJa"biJQ^ ?[/˼<)$L|h+eB꾊L7\| _؇I\I\}y( }y(_xd^Ε}cX9G_<%uyq+R}KbsE?OIŎ/{GڑP]ߙeT<6u;GN@{$YTBe*i ~II}$*ip`Xm+>?^m&V9#gSl0VQ%~]t_+YLX5$̂`좃br4 XmTl8b&`( 5R))J;G<™ȏ SNϬ^O5BvmF|\ӂ$ ɱf2U6H낏MЋq׋UF^נETua256ɼ2y|ױifؼtlg2,{mSDVKS|@b@j6?eIx"1 Sfe %(qK=f>G"TU[o? ߡ@&TC{86lҲO`UV je&7 D۴M91i6$yM o?8aMF wc m$99 0 ::>m:!eKT7#E],Cb}D*  SV!=bCUbP1D;4u 9q~U4-xgI%tCU%sIK.~f256ɼ2y|ױi&شtEዞ_-"I$EO')rI~ E.᧡9(߀"?>Mc Ҝbؤїuܻep~4ho JlDP=,_F^y=loбU9#JҸNM-:i!6.h6xW/C(6)F:R q!,Sp|ЃuB%AqN)ʙՆPE朿 )(^>,gυ,_nz3~Y-"8>@6rf2;idv&]ٙL0y˱96:69ǦαiJS)<ڝBLRLᇼ|t'!B:C& 6"e()n Q?-+Nl,JP?L*nDΠ]^.tD1+eKzG JVfI*h"O 8xfCoHmx4p(CKSg>gfxdzdv&%wױifؼtƾE.|2|*INR}](BOC_.ध/G_tˊ_>Xx7| _&M]EĻ vDuDgEAۓ"G_G?A"+"@աCaK~CpE^j@׫_5IYV|Խ{);eZ&}.ݻw#6?t^St}k`4ާ6NrD2 D)ڝ" 7E@}pbwN"?9Inwg8 4_7@#Nh?и9Mnwc_7wO>_>w2?}w#6=62?vp苟F_nkn]256yI#x"G_OhcG_GSO}|wܧ&Ҥ$Ť};tRvcftЎЯ$UqILTpnHu^V84{YRЌi~ >_GIю__DPY~xh F *R{ִ W` 7MQDwc<pno)lU:gS`fykM,fS!!9B,0ơN7@RǤ5r)WRN>OYβ\N\Zny820]w\5Ԟ&%*7hYEvî%uҮCYLwMMfg2L^96ul~ڱ96[ɆO72IU&KNS -jƷH,|Mg,qzceZ -RzY|}1?%Qb>Ȫb/9tDF]_A/geux41Lm*%Cm\-T.U7!ALB|Ug}jD*2IkU:@ ~y,:s#u f,> P: ~:tN $e@yg/gGB-' $q̋JW/%PBIM8&x8FhTT>eD. 2!C¨EBL~ZGzw.\@̪;~ /88h;EdYt)8U[z7@@һ5p.9qYwj&KH*6`DODA!..$2<-jl=)5]*%:t\R̬چ:%ղ}!U+O "̇*SaÊ$id{y~j256ɴ4y|ױifشrUዞ_*I$EO')rI~ E.;(K(eWwU3شHuE-{ņ\4xDeP%lXm4Ua(]o(r]9egS%`0͂b!~> {/֝HlS#.zJխc#࿼ѣʊ4ܢMKdFI U#PϻyԈ*pu#BEb|`Ds)'),ͦWN:Qq"a5Gd@LI H,/ϘA(ZđަU4p]+Z2-ۖJo&3vM&g25ɴ4yӱ96:69ǦMαyB\t'4S5aCmE ]ELw+_l${PA5r>*tE0ؽ3&^Zg (/X:UzH>k27Lc7vrT#" iHZ"ߔ,&\'Yߖ-6ځ|!pEQs<ة*MA֏ahU|š$dYd|<{fU?#+sƁvd V<2eA&,ė.J෽QWp< gֆx5yM ϮBu 57ZRĢ8kedk2=m29&ԱcӎMαyثw?ȅ/ZUINR}](OC_./G_|ˊ_|bh7| _.͎]D V##|OD=)rDuD;"D+"DN "TcH]Y}$V2mo\B&~JweUnnUqm[m95teܼ ^pQfբi{^y[+-U];&}(igF1K=$KǒFls%K&QԩӀ"l^~|ܔ"#qVP-N2=}NWKnez.˴$u7MOG_>E@w2=E_4ڞ"e816=)]Ļ '9";;E@nwM؜" 7ESlphNr 4I]r;Kn@<6ylޝf7<6=e~<6ݽ]/[s_y}mmEO__VrVmk__&&7 rDA >rt}>>{)rp3tvUC_` 8&rMZH.kP%oFGcWQo hMp#Yƫ&@KѴpF^x΁'Z^~y08Kױ~Vc!M $9V*P ېo8v@ᙚȫ'ֹ$T=u4y.)2Ylڠ9 :K\ic㾂VGp:dهUN+'vk{&]iə0MwvlvKǖmwGqp9dE-!F]=_[OK ?ȋ -Nxky'"j*T2c5?2x4N&G_/SZy5,!h%R exm7Ϣ9t Wb|xo>j !۾z<-8|)v#(5t&˸hRG-:GM)`# tT/EܠkDE~rT^&)5fyЯ58nջ QJc=SPğFű[.f>_(믄d;6|Դ(9h!?TPs2')ҵ"VNwB92QNfU̵Th , I؄Ii7_}}@`ķ MHﺚ" Z@JuI}^Ť!z` Op ~':]& 4a#?)$=(2 Tg{UxϯYb{&]iٙ+WwvlvMK^/.|2|-MRt"xVPB~""G4)8iM ,B 8EC[[ !9+hQ}(5fI5Y̓_ko:Q 4b { s\Bl4iGnu[[YgPfCoM{RvzOT 3) @Rs|g6^-eQU%O".Gr4eeQ}#|Ez.xU@1 !teP&/-_;hd5,/rC$O.նNpģ2$ó_E0r~0RW2X)R[uMRdr&ӮL&3&o:69Ǧ]&tױ96-["2`X}1kA٪c[Fk` >d eiz^@~S_{s5bhzR֚rFa 'iqΊH 8󰴣>:{6E0FizDtx\h9,N4Y^̘Ni K<<\z(z"3if]fULt"yLYd{ݬsq6Άuˤf&+|6ꔫ%:,۩Ne(z[8K6L@uvRvtut=e~9wg8mo\#-7qL>_~w\!ZT{C`\}~|s^x&ug.ZG!Km/)#-V,0(ًH\]IUV])Ϻ!:I{:6Um:!"tG_ީ3ٻq_UE?~6{q@RΪ L\j'@\INӼ":6+k1~N*!:3^`YZ삢`2-Lfg2yia2;əLdr&aslZ869&شplvMα;69Mf؇reQE"NI֝ӊM`O^&˛-j[I _aT"y E!|<^,z;+ B\>7ؕeΨtHJTL$i(+CyuRP.6gCћGZh$U=H$k%ޖo"+(Q)z-)e{ pP͒R6ZrpeV'婏$vz9TI)kS)HJJ#_+UI~EGzOfE{um8ug#Br@h[ 5Z!t Ce͐I׎*|)Oݷ%K*{w)F"N{:;O *K& (N:)lUqH(^GWCM"Y@ROq(Wx%%<LpBp4K,ߚIƣ g5L+<Ü 8>_za&gҘR)(X-q Sj ZUsSdd],d&dq&3YLMdغplqޱu[cwlq-ޱŅ/]/qK}Eԅ/K]>|KRHR꒔$$%.IKRⓔ$IJ|WQW/EtQ+Eԕ"Kqn"Q2.݆H`Xq1ɿ>5_y P*VVW Qtgo@Lrp@ßǬC 5T376lU"%Jk0U7`$%?X:jd=TKR/NpKjλ, Qd;D. Nm8jȜ܇?4IJ20pTD,N_ܑ3͢Ѻ[F5C.\OyrS}@玚Rτ{7qP tد$#Uhj8f''h[Km~1Yɲk8ed&3Y6Mcslulu--ޱ9n:xf=:%,80Lw iz줘 _i)P$(jodlژB{@rC r~DAa?㉇VoV!g6\""wrXU *j:c O /?DϬOC.IP"$h&BV@m)ޓF qY>c[vi8mc.9YwyEN>{]B."7>%4"/˺;Een[eaj7̗pAM 蟇)ܧsp삺8} ù G݁rwqbj(%Ԕ/ʼn 8Sm֐Bm5B: o xµ肤'zA|v/#>O9 /cǰ UOa`^h:+/S0Hd; VEnjG,U,8:5t#K|];/A=nḇ3:^B$d( @q%TxRm5 p<T6c4 =f/sl 7 2X3#t5FԕdL֕+֧vlq-+>hOS/)o- Bv ׷'@mTN0]!>f k1QH~G1Ɋ@ &B2T9!f^|S]z5.aO2T~5Pd"/xm7S)~P,^@n0/)~#@F$Nt82~e+hdƛ R(KEBJI)W6O G"(h2 M(G-7 !8uȨN1 Hr0Ozz_E;+{R9A @w}w؅0K VHl_vjeRΩ@A.yHgcɈ)Sr[jV(Pn6JgƗS0I0.ܩÉZjFhQ@qf:ᒈfNUp^:5sFF?D6|O+c8aԄo##TɸW/+b̫4Z&do'xGAU4۲H-d}j~du&cSo;:ǖc/—> _.|2|->MR$%.I*IJyZȷKqJs5Y&8zH(q1|Yt_{Ŗ)f|\݁k] }!s]zMyS"nbu2Wl¤VFx:"j86as6ˉzq }[IB^iZUCop{%^7Ic'h7_.Xd u{φ4#85FʠG(o81Bc쯭7\k1DSDů@.w"BH;_kƨ߈`4Z-I=J@a46 酱@Q/U7;Oc P 9RN6KF]ҍLSP0#cI01GC~+>am뫹5:SCCiG"k>Csk>"{q2@E|fr+c1S-b켑6>s\1EBLAΝkR#7)=Nڪ϶Lm}VsmFR^n=X 1,s^%%^v*Xg<893Y6Yɲ4yԱێ-αeث%O×|;| _ _$%O|;I՗<-Eۥ_^}ӂS]p՗X_K2LZ06 Q7gW"oK*7 E8*qrc~S=""f;gI~d}-d9_so={Y1A"0Wa\ /+Vw<ۋzۧ,eyʛ]oeqwYwyߎi^o応EO/v"D8klv " E8AA,q,ecOdc.@@~z&SQw9#4z8B2u'4ne--:>>=e)|l}zwyIh܎툽$4nev^fᶫ/vϗUݰUwꆭ/S&ϗ7 u@A }>݅})O/)S܇VnA#2/aSrHi \+#?V_8\)ZQSi/`%H84GGh=r? NXѨoT@ CV x)yA7[NodIucONS2z|%/0DR*T2=XR+|ȯG^j#L cI7%MօLo.Lg8՛,d4Y0օcsl [csltl-.|"| _×.—%.|_—l/kU}$%.IɪIJ\]Kq/_+E_W}ɮɺ(8W&՗:,ڊc՗/_}f~t@n< tw& ݜI@: H$+ H$*[KV\|vNjz6>Z|cDWcTD2fx\W9|_䖦3BߖbywM~&gp;!.n%!>+,&3WD)՝S);eu,՝nSVweq, eټEн," Y;E^^ hydQ}pg E8uQcο"XApz H6A+o5_1,/ϗesϗew W#adplA<'O>dԕ)@]^t}oY?< Y目%ܱx߆Z< p8vG14=Ȭ(yz=\#._>ᷙ5 H!tX<,q O|p{z_`bu#&8*҈_2>M0rg{2ڜb-%r7Q6ޢdyrrEKW%pᇝ>P|<%|QPҬqp (fTUn~rnJۣךVb.LVgzua:ՙ,du&˦asl]88Vغplqα;:ǖMǖf]7.&R޸u%QĴHN'i@F+#4)ؓʜ#7 J?%z)#\1Dۛ*_k+5S hzP"<^x!Rk ^햟*N@IW/+[Kگ|t U2o͂#A^ t.7TOȀ2զh -](e.~Էa!9)Vvj3ȴ} e7RBhϨSʦHƟҔ6R혺z)(*a/Ď|"| _—.|fR%)Y$)qIJ|E%)IJ]$%>I+EtQ+Eԗ"(Eĕ"JRD7Ko >oEx !fKI:4{EۥQ[ yz/dV] 8vg)% ~S.oyyZZvqdi3Z<Ҍ؁T9Fs˖^#NP~n+2|7Jͣ^g=d"g},/dc0rV]\rm|,qjѶ$ X\Knʗy 'Md2hGnD8s_ڄMjhDBݝF1ն(a2H)1Zbpaܐ6r>L/#ɐ2Yɲk8L֥ɛαeױ9R-a`a=!>xlƐt&dq&7Y&3YMgldu- [-α9xVغ[\ERć/]/uK\ą/ _×$%O/yX}OR⒔n&)HR՗<ԗ"J,Eė"&//yX}m*8?Mte%m^՗>×c/ ym ]؛ӊ%i: Hӊ͙҇@LJ$˙) @: HX&ak|/!%X-eM;&#ψ;4\e媥CM|H8h9X{-^dzbqB FplЌ"޸z]L H%+R xbJr1 P~)ŝS);eu,ŝlSueue} ' /YE ݯ"'t9Y!`{@˟1ܒEYcU9D8<U\AF8AD87YK<$Nlıf,1""`ù$4CB6SQV]( L]uFY1uزcV|l}ަNKN^!{˟MBy_ۄU~Lh\!oи˟1r,cU9.p=lU7lus/H}eO#- h Co ߇}vA%'mPwuʟ&t!ܷ ݯ8=ߨ9ܕIJb7ZZLZy!kuPX,էҺ:.923|]翷K Cyw8㛫PO5?L|w.Mςp\<q"-nEکeO??*ex~G̑#ĦW}q#D#'Tyzc8:.Wp5,x[1svn5/V)P4u-͜P$s;|V 7kJIiNQLmcFN4f֟L֧&MgL^9ՕB&YLk ~}W=Cf_;o3՚/ Y3S/=D`Am475pر3bS\j_9#TqԙFѹԷz ?3u8+{_"ߢCY[R=f=R~$H9!V>>_Hr ]x1T1zKa"zG)Y2cؕ")gi.Mz6|Hhэ{\ `L8جE3IT6<lϯ'эpJނ@fzLFG9j3x/-ڌ ?^|(#0T:g _;9*R4lCO=5axwEf>ir"0nýa&Gtyw)Ymky\\z XOS*6e/LqOQ 8F(ddL0O[:~۱9.{io/uKVkio')uIJVIjURD]+EdUކU hG+yԉpJʑp1z5|Olr yI0Z@-iR̆5ƀ,d{0GL]^RTE YbK#m1VHo噗H{!ӃzVܐAjmպC{Sq?HcaGXQN䩾3T:oD/1X߂kL*/[od&Cp3R>Ƙ x'3r!(&KJ372 +z R(rzbL]ՙ,&7Yɲiz98ǖ]غ[c˦cw+6[|dZ#jʖ+qi?XU=Bz@A 4Z,lTF6z"Z1)Fm+xk GG=y4;e^5\.Dka ~CAcc5Y: N Ozȡ*ܗx*46xҕN065#8fx 2H8)C1?(e:9I%`L|H8S?΃l:(mZ1I/"F'oiz8T*%&{2Z'dyj|du&cSo;:ǖc/—< _.|o?MR4Iɷ$~QWȲYo+? E[!O v[rۊ%O/yX}_—n/KO }Ac y C H=$i|L+$O yA9) @8 HRW*B@ KDW/GƲgo gu"9dvo9#y@%1BszǤ_x\F=hy29h [u'$"4~E%O/v}T_ꆭt,⇭ꆭ9lj<5Ymja8 H}Sd }ӇpzO'pzouۧu?NyԧN6sr8Wj:qutei~xP6j 4e48f3 {NcXs8F ,M/:J-ו~,״^ 8%8`/<4$^k7j й*<#zFodŒəbd@ԟm6ag:AG[58܈sAe8Mo5SO옯>47EpE=m{BNٲh.K-Q}*;,Bt,-z`f2:0+X@1.T/]~^rɟoN9EZOh W"Z:p6M:)&t; 4g:udu&Sř,K7[cˮcsly[V6R̹}S ?l`yPSNxEr@,J,E. x"Mt8xLjK I$udJN|"$ ׆9vq\D N Y!r9b_N$ $%JwE)HènxJI,%3|YC+}(8pԟ7(yQ>YS` jd;8 2ʼ1UБGnjkM++52GnӢyHHnJᜰA^v^Å>FNZ/ȃ7MjX)sGA c'~1Y&3Yɲ0YLVo:ed&sl]88غplq-α;:ǖMV—,—>|"| _—%.|fR%)}Z}K}Rd3IGr>a%QWf)"5yY}kUic//}X}m;p𵬾aԅ/Y]{ C hVޜV, }mO+AVlΤ@<gR ]ͤA@z H$RJ{vBkB vÝv$c4;C|']NpBԷ(&|e<_M-)u:O%wkZ_wMw˵2!rۍpKG"H-"V1%H4uqNY)ŝSNY7OY>NyUweUw).tdC6tf",*/h6pK>dlVn\B"F8W5cs C hd,8""ECz6@@,MШ NuF]r87KB<$4n3uucc늏K[]!{:O&9yǖ|mr.7 Kޗ>}mW1qmB*/7p>/oVnsغ/UܰU͑r#|y Z}A>qp]Pw Co] />ymC+tS8Q5ދr?ť|$ kmPXʽ4bG m0_DMx-׼B|Cr|x%%5`pm;˙Y,!+:ʩ!׷esj! Dʈc[;Ltqe)~E|^ כؗ^)˿=_W]rBy<nX5_=o.T M(otr4\l~0wۀSEFψnJ[` E!OMZKFIHg>5Ym8eeʱc[cұ 6TXb=9}"8SPSV Y%XGBm)Ǟ~!mk>$'7>4#D=Wl:m5Na)DS*^2O9w4!M=0q`߶l#Yߙacx:&>e7V`0gVðԱqa?uZ|&;eܭd͜w\: (zm4y=Bb&N*tm9ݵ*.L2',qރcD2ׄv3F%20G9zxzBeK`hݒEI:aF7Bb{c?20ύBsUGjG2"D{eTNmj6\ZMG8+0™KOD)hR#x!~?Gh_1 ߸t!\^r'P?p seNi#L~9RVcpJo Ʉ6%qK~m\͹+gT 1u7tB,T>#55S MJ ǯ2I@ -U.2 C4"U_Mř,&3Y7MVo:ed&slu-αeӱ;8M %LK<ƞ&wekۓMR$%.I*IJ}ZȷKu,KE)O Nv2\򴭐o+ǖ%O/yX}_—l/$O yAcA@x H$ @: HAts&%S HA q@: H ѹ O1JO)ݴ,7^,1sQL oXKPSso(*/*P &E>y6*`MtDҹNsCqL?8z ^őrj~r]˽x||q͗}&6ڄ:)欯լmS֧>eu,S^eyzwy~E֧[Wg^e}yy5ˋKV_k5XZc[]cΏ[O }ApX8YX"P""Ч}H"P"M~cQ!Q/aal[[W&S&F&; H}d)'>p:O7>p)Oy~)O9m p1!>4 7M6c%:wHji5{ NZja"+xǜ&fT%N#?IuC30fpJ#~ںSV\7m/M1@1l&E]H)nHlIW W8JWjkR^=j-# Poc8R1^h^R'&wKu&-Vߐ%|X_n橳YܢaU6T`#T{3Mx(UqxS~ ;lVQMR5^sW7z.OS?on(5v;z(l☕,aqa[_m)v{Z "hwO3F[E铭d7_c,iKMmՙ,KO[[V _4|ɷ×JR4Iɷ$%$*Ei)".Eĕ"*E-:Ŷ#89HEC8qUI%gXB5qp}>}ۧ}épn}̫ʩ&ZE,jtǜø투W=j5ƶ6xS)4.*057ҹH|+BbTqn4@b1ZW@5HMDpJC1j\:2coYI&Srvs\|:|9ULXǸrg-k_'&<&rGC;$ɣ zl)uVAWL#$;,犤oݾtj)-03*C8Q\ji C8&n>5^W!f$Np;i^DZLAmw[$15õ3C%+s˳h́͑(VP%Veo@е!zRky9ԸZzGs+7çRqyK1zV4Dܠn/w"Avnդ2,+)Hj[#D$<'GL?Y yL8oJ5*"TBG,ƨKivmrc_(j(GD t=8aD3RшdBQR&d 9ߚ@hwD lt=Bzn! ~9l 7R~A@DV, '}jLp-Ïy*uB[[dyj|dq&cSǖo;:֕c—> _.|2|-C2e2!O0BM>`aқi ve6-WL5D:Wn(GF眧ld5Ydu&Mز[::ǖc'RbʶB|obyo"KS7c9 #MR@bap&JbC wL}w9_3х_Bx8##u\F$CzA@c8 kn3!.^x -(Ѳ*>>ҳx[A/j5ӌ70l-h5ϗ$S7b2* OX."<-MVzppH_ឪq|BVˊ[h&X|^vV $:g͒d}j~dq&cSǖo;8ǖc/—> _%.|2|-=e);eY.}wY]]ޅ#|;b,yy/gK]}mv[]cC: HwNu@@&@@wYX'vYX"P"пTGh]:B+ШL]qF |lu|lcc뿎OOY}9[e]co#~;bov yY}cK]}e?l7laadM H$@: Hp:Ov>up>yzS>}os8᾵[ 6P5BLߨaXSᘨ1Ҷu*hr .%zn'JF-_r wNQMx~:խV G8IsM,'ﻃ<^Gh2IWE`\63eI*}(1Gx31qxYT/(?p|~1Y&3Yɲ0YLVo:ed&sl]88غplq-α;8M؜D7ϰW;5h窍ƗgN#]P>v3Z/>lԖͤQX8Tkw /GO-n5uPڊz1#H)픣Aj9P̥˨^q7*|ᑮSK`g7'$2"~`(z[Sl[>W%pbc3z39RReCI P\M$lMe|8Zd#9liF5(dFksXȉ5]G[` `Ȕ(¯њMKK8a+Ce^EI6b]D+QmܬVNKu0aOc1"OiPm-l:zҨsZ K5m9<o8r )?c:f=gO{+F<KR\` 2&nrt`ˢ DqLM vM,fTx@jyӜH _LLo,Lg8śd4Y[α;.[csl-αuӱñ]Eć/]/qK\ą/ _×$$.IORHR꒔$%>IKR')q.JqRDRD\)Wf)H>kG~9Ef4U7vWNIn/KX6!PK{'t_μGx6b8udq&MVgldqαuױ9n:xغ,"⏷q6OjZ8;=gX)kuq(xgj홤)^,[Xl(|j o\LQ7"kHvR!?S^4~nd^OP[j"i.8Qa]:<[iXXI]PWuyOw{]p8Wᾥ?(XZ8gP_7LpljOqw \z_f3ùfЁ8:1zkK'=-qglг_qgY |}wH7Y$n|>EzQ_NaPe.>:e4ԟ1CK-bK@Z+˺h9zkGK`?F{ ۋ, ř,dY,dq&7Yɺi|[α;,[csl-αuӱ;6+ aAa&QJdD۱Y@k),`(ĸwJK8t8E>0v1V4DڋG'ۥeۭN_r/VcJ%cPPD"hT) ; 瀆2BOAlqj I=et`ku!iqe(8XƦ[a@W'&[*${YP4zjCi"V5Bs^{6HZZNVy{+S|y5F &8QLzwVyd1/ HԾG!x™d&du&3YLM՛,αu[c±98[6[>ۅ/]/uK|Eą/K]%>|KRHR⒔$$%.IKRⓔ$%IJ}WQW/EtQ+Eĕ"Kul"KSkaƒk $+m #Sy)4Rꩥ4GTM>*י[ᢇr3܂y*#D,Iuխ9NW'N &ԓp-? \S<8;)c'"n pL1q>nĸY@4zɵ`r 97kBP0*u4?1{RC6#Ud]S;*r9nưǍ4( 9oQȁ7> L2""\I*M[/BE20Bafæ9!0WT,QMY ]a -9+S oBP8Q.\3Q=pi2Ghos ^/m* kv͗#N3b!jҩaBd9öqlG&#(#L"gr"pL~&:t1P`lal!Pl3Q/$O;sl$nBv(5)Oʀ4_ 5^fR&du&7Y&3YMVgn,dq V[α9zغ.|"| _×.—.|_—l/_')uIJW՗OR꒔/_+EtU}RD\)KwME2dױuVd7|K68t ٝVx H6<3)LA YA u@@7q;eYSʲ8eu,՟SSV,ԕ]^ﲸwY?@@w{YDtϳdw@#,ɢZ"XAp^!߇V@"MoV,QM@XcdE1">=fEh]'4&'4.Se}Bﰝ-U]e"'}.Q{Eh>kݷKhE^^[͗uw 'k5˺;leeHo//><'@?SO>ueq+PtscemK8쇗rTzS[mZWMTszp2O56N+xPQcD!R kz鵒5kk@ӈMukga뗏qY)k&DRLna$T> R  Dž#s:rQÍqk,+Ʃ-7-@JwKR"j eg!tI\t~c\xZCN:R\ FI/syk{_z66 wd ;SE hZ+0+vRڈ;<'jb0Y6Yɺ2yԱێ-αe،&ܑb/ DK|C6]Vk=A\>;)#f9-> ,§LqSJJ/z銠$&1(UTmCvIzCEЄm=,zWhdZb2Jv!1LEsψH)CM ,]땯/0M-O`'onI'% e*K$L'l7p.[Dj̣dCN*HwΒ_Št|VI6AB"ű{{)GuHq[#\fW7 NꔉivSX~٪(ߺ"k %hTuXQY S1싥 A sJǔ RH,(%qd+ I1O8Jf a xhG;ˋ^O)Crs#QI>UJ:c"`︷px]~PR޶3-Aj3\:ܣzmw&6K=mՙKO[[_4|ɷ×%HR4I鷓$%$*Ei)".Eԕ"*E]mMp HPLvh0-~À 5GsI)l880_˽kO) : !|Pqjl$\:x|*pk80JfE[eeraࣜUZQ| ѹRz1ېs$NDPohAj ~a֎pNG/ v9"Eǂ&Wp`M%>I1UaшeEN@|'8F6%L~b;i3TN:cSuʜ ^O9b f#2΀ du&L֧&3Y&o::ǖ]VԱ9τm14ܵd,\D,z g>lx>jnB6@ӄ F9> @J~Ҷϔm=hK~+b#q$XɄI[ŗK+ yM2š1M VpDS L0i羁<<'?Pj#2e1,e;r)ɿ4<߭8A\T[QƮЩz_.1ژ,qW܍oXWG*䝂KF1'# x4!QFð7sDfū?3Y6Yɲ2yԱێ-αuثO×~;| _ _$%O|;I՗>-Eۥ_^}ӂS]p՗eu,Su|.˲˛vĖoG쿜EO~;/,yZ}ɷm.¹]c˷km`T.©ec.@@~&@@vYXc69TGh3ue(?q-|lu|l)˷O/cӻ߾|MBvĖoG}&q;/6ow ]}ɷ|쇭↭;l7l|Y,6/oA A} _So_S~ù mé^5u2>ql-7gIaeąkS>Ypk\{1LF56 ce E˘ T;s#j -MAٜ=ӬdM[ Ч  caJRGnr`SFY)*pB9"@-jS>"w)ir:f:L2)Ѱ0j_1 S)#Ge%EI{*rpz_xG mře8Q ͙|A?\d\[?(b6cVOz9Ex9P|% <=YVq̍ѝz KИ/8wv^N2* (Bق$PD;;#j4K"ፃEꬼNߧN7FZ0 $8n4L&n¹ iBw2*z#!:ܦVթfFSojpQcmz(SrB>YG}e|h왓om݉3Yɺk:ud&3Y6MM~slqαuӱ;:ǖMǖo/]eN#ٔ 68ML90dAx dҦNq}@÷ej5<&N@3FP'g(iR!9Nrr8R>ު F2.S&L ")b2eG*50N**'ӍH$=E@Ԋs6zb6IP 8PRb]oȄsgVA-jP>rTK9*7:m c^fgm+mʱ%|KV_×%K_A҇@z H8x H$O yA9P) @8 H7gR u@<!A @O)RbZI+$d[CC\ =e4EP"] \3Q˜oL%kZb1̜_n2)dG >Z,\wxOfda,s;2.B؁kpcO f!!M yp&2m L݊+7p;e}zSVwʺ<]֧wY}W]^Dly{,/Ӽ˫OyO/}Z}鷫Okl}ZckcS HA u@l"p:<%NCx:lijԱ)=FcijıtE,GhԧFyHhTOhGhMzB8B>%4CBxB:Bl2u-غ^>=e)h?e}zwyEN˫-O#|;b{i^o'՗@8 H6 @8O}SdNY~W)/8ép9 EYf9,QWSpɻ'5PKf4#Us-Jr߅z#^}BL=csDL#U} q"I|5DQY_Xl31+L 6<%,8n!+%|8kFcJcܧAg pЩ`aEz2lGt/;oꡔRJ L!b~/=Lm?qd#AEƳ1̱;_-3S7_yV[LmQd2@>ZUxj:{H(@2Z'6Y,6Y&cSo;:֕c F{&0v}(j@Cˈrۮt()P$QOV;* 5=|pS49T' ~IT f2i nwt)N=ඩTx֩N YvYi+/U,ǷEW)rP w#E7C~ QJ"uMs*fNxH'a6 qo" Bbog>5Ym:eeʱc˷[cʱWK/vtIJ&)vt<-EۥRDWȪԧ~\?gm>m+mʱ? i/K\>|)$ @: H6ql$O }A9i) @8 H7gR u@<!$RA !S4̸Id ߈fpLRnZƎgu8z"NΧ_8\?wmq Lh6, vpw[3IkPZ;<,fbtQW+Q3KRL& S .V-D|:d{80w'"$?;eyzSwʲ:]֧wY}W]^El}{,/Ӽ˫G^^U_oW_1Gi-߮W5O yApX8!YX"P""ЧyH"P"Mx8B>%4CBzB:Blr8)Qu+F֧|l}VVǖM>z>)˷OyE[.ӻ߾+r]^Dl}{Eh؋O~;/??i߮VcKݰUΗ|YUݰU61l]OMoh;$O>}A O@;'O>}} V,OOY}+PWuéO9m pܢѐtiwOt 7a  kG ΃ijg %}@YL<#mS .8 A{.dTj?룛L0zo\+ʘ> )uq⇙q oc⳸Ր' x3% ZBCN܅{P^EKUnQU*M偦!L+"/&du&7Y&3YMgndq- V[α9zVزcS "L:|$9r-v!-vnSj\5N=4UGԯh3m:I54!~2VMgP&T DCƯwR g/Ȕ☋CJoʟ(#o)ǚn-998QBʄiIL4Jp'w._d|j#Qݨ)18TN$e6bkZ\)}M#.Q4wMP,ͤUj R͛APԜDRھNR(O9)sb0tz8^SFt2721WL0Qac]yjS>rL/ [,=s8ǹwua8՛, řd&3Y7M֟L~wl]88Vزplqα;:ǖMV—.—>|"| _—.|f咔,$%>I"IKR⒔$.If$JY"J.JqRD|)"RD|)m2E)s6?fc2N>]+)Q2Lb-onxĵ)o:pXϻЎzw}*Tj0dG׹Ursm2vb}α&=z!g~)T*ˆgئi0I2y:G|{_ZpRfT_me 2 V~wMS&GH%Êhmq@W]DG O}5C`l>$(?c_pq8JbJ S?Sv)㸒ԥ\cc_w_LVoo`_,dd4Y?L헝cwl]8::ǖMVۨ _o"/qqK6×~]kU}rIJ7~$)WKV_Kun"K]՗{7|-/}X}m/uKWkm[$+{۱W@< ]M+vgRK HA3)q@Lj$ @8 HRlؚ~ozZgU-{S ?ƘX?%|ckN>K^nGD~I,㑜wpE+rS[y[FC+~+՟+՝WD))?]PW]]PW]֧.nbC6t?B[8EYU^}K8>ػ%[iS|ly&'9yw@}C6q>}&4qWe}8_í1u9_aa#|YΗG+?G@p6t킺KO}۠?A7hVp<_Y|uP|H;'taw=rbaf|aM1oTwj:o{q[OGFhvȬ >}\iumGq{+YP"ɲ0YMLgzř&&زplu-ޱe[cwlq-&ݫiR%x_-1J*oz,Lj=H<#67nĄGd(̭YͰ,6?{9E.#fA=n{)#5kyH+з~׋,xY/#>[xR fS%+$Rt NYu[6G:D1Y}RKe*';t}⟏JrX<Ձ{2':H̭߰R[R8OSnҪ:λP-XC5s6ϊ7 L?T ͥ ViDVpWvAB1,XP0`UBtQ8UL\'~c%M oJ񨜮ȅ0XcV8ތPeSNi:bIs:$6;F%u}`q.cn}l_23ĽzMiъ mIvdp,VmfW3dgFm( /[[[pmROi8hcea:՛, ՙd&3Y6Mc±9xǖcslu-ޱ9l:~8 __—.| _×%K}Rd%)IJIJ\R')uIJ6~$)WȢW/EdQ+Eĕ"Kul"QᑍfcSF W k 1ƨE١Rv+gO,& ϙM4 Ɇ'V 'ɐ̩ ZRz}1E˩8S6n)Yv 0"S_,d5Ydq&]Vز[:8ǖcӄB&G8d:4i8K-xhP(sy+axc?A=`Rژjb{+6?sIc9nm 0*wYc2H4s7n6:JjW\Y}Y.R<$$i"'ַt܋WD)M^BǗ# sltd<\99N!O@ e/z v $5( 6XsD;ڄfP> d5~1Y&3Yɺ0YLo8ud&slY88Vزplqα;8M—.—%>|"| _—%.|f咔>a%>IKR$K)"O/yX}/Eĕ"YG)i׶ɫ]^V_vU[!?[kY}k;| _ _8@6%9XAڞVt5؝I- }mϤAI)$ @8 H$R9'֯!?֘ 9kx- O(PQ{:F ]E{-1WNi^.ЩQ~m潘%|+|Z#Hi0ĉyQ9`/'}lwʲ8eu,eqNY)?eq, ꊻ˲ ꊻ]OPw_!`_E~w@dCf?4c%@p1¹!Dpj҇@6©%¹"X'!qbEE5`Im:`ù$4CB6SQW]Ш L]qF]2uغcV|lyަNKN^!{]!4.y_Mh\EDŽ%O ,?1r,cU9.p=lU7lnԗey8_LAKO}@: H@<ܧܷ .>}mSuw%'m~ns[tĤԏXڗplTLcP֐n˹|uv=Z9w8dRJ~ slx(n W~h`sK ybX:1ƛL9yqwN܋REuzA8m*D{rt|fds# O Mk<&]HWHe*{}Z8bWrv)Y@2/BG7/7eW[/d]d&du&3YLMdغpluޱu[cwlu--?8vu*SρaTqD|)^Q3)d]j0EtR'qjPvDĚhEɶI*!+ ٸ$tMJjx t3 9CI|u8նD 5*yͤ j֫#1~*{3"z_+f4Nlr4VxBV0? yF'Sd^7A1kIFi[⇅%ٍ&N2Wu&gKqzA W)B.ܦ%iS>QaJKqRK%19vCVǰaV_x~%gXg>:%,r6ʼnaE/7q}e͠{JۗxC,}z;Zq񮶊.f,, FD96o,~DsyI+EtQ+Eԗ"(Eĕ"JRD7K(Ex hsPeyw! R¿.SB|bƫ ]cS~~Q9.nmi jbyXpq88z(S S3$_ƿ0e9}ǍWY3Mݳ 7yE7B.E$&Daq|wf?3x5k&~>2قb{m$}RCdDt#RdQ/VѤÄ# Θ ʂePZPQ$<܂=SY B "8(>3Yɺk:Lɻ-αeױ95񕏣/tJH^p^z*#($vo%\Eu<|eK xmvNGtqoyzSbC?o7ѲFEN_{ SC3MEGXTL\`8{8)7f3cpFaҤO',sZRq0d±Kǯ7Q3݈f<:;͐[L@L,냽 (=_4QS>ҝNȣ1ʍA <IYH]&2C]>7 =i,QBj>/8 fSdYd&du&3YLMś,αu[c±9:V[7[~p_—.—%>|"| _—.|f%)}Z}K}Rd3IGrXq|ip ѮY1W)$^h3Rgk}JG #ݲ]3\$GomeLAOÈex8{7(> $pzj}?9eYSʲ8eu,՟SS֏Sueue} p%@Uw4K6muu]r򒏭] '/y&4"cBݧ}ۄU^ 4e}8_í1u9_aa.#|YΗG+oAKO}@8 H@<'ܷ .>}mSuw%'m~_/D@Y@9Kv"M%q wr-o+܈.VGpsuhFkU3bJdUWeE{,oj \Suɨjҍp$FTJ~2a=/lj&fөtjt 0V[4a(@QPk]thξN=1%(vL芢rC=/}8 V!5\FQ>R̤I/biRΏ֬~6sW_`pd}j~dq&cSǖo;8ǖc3b&`B!|mO4؏lNnuwRÆF1vH>) 3;|;:1N1ZL8Z2gR#t !rn6,%K= >BhvР} 7IACMt (?(ޗT1jT i6\G| B3ɕG{)ǟ2q0E7GB=Q-fKw"@3_a11H3pj!ɥ2uG M4ƽط 1&7P+<_.cܗ?!PYfL W ]r1:UjFj-g<5Ym:eeʱc[cұK/vRtIJ&)vRd<-EۥRDWYh7C[3 ".09&3{[&bwiRzTnt@T.;G9Zpq0N {S L?$1F e}}xBr6^D@>c)~qK2lHLJ)G4P"hG@#nJ \˦__Lg,d4YLMś,αػIj˱;8M꒔NS<p_G^z Oꕤ>Ej1n/}K/rbc=Džx#$ $FMޕd2"il:r uA듉6`Ibxc2:zDf6 )H"mJ1> HHvOsKNw^pTfz ĖHx'z7yaʬ;Sf$ I ̈ ;Iޘ^%`^/Q9GpWgV渵q%v,|||f5~d}j~dq&cSǖo;8ǖc/—> _%.|2|-A ıA$ C H=$ix HO }A9) @: H$@bi#ZO#tKѪz]ܓz/wҢ$<SNh`qS8?N\bp1[H)uT WϽvv5 eX_BǹЕk&iuU/Ld3VSSB.z_\l 4&IjK~)OY)wYe]^wyioGtӼ,˫g^^!O/vi߮WG@<A D8AX8YX"cSz<Ǩgc&@<@Q!Q=QQ69tFyJhFFuFdL_-غ^>=e)h.˷y[Flv^?#"/Ӽ,+Bg^^T_oW_1g冭tꇭ↭9lՏad}j~H')ܧ>@8 H6 @:O}SdSNY~W)/8)p5'6 ݆b.K/ͳ7sgFTn 1X^)ZD8 ZjlqhS +/yZ+0wfTV"884!EX!۩=:y8[F1.R=7ߚmJ~Ǥ[yLȵ/G9nqG- >`ʢA)p:v<+-5:٤lWa$p'x/.! 6.nu{|`vd0Eܽx>rL22ѵ =M֧&MgL^9Li]>[%L>5l&M1w IcjH⛺4\oDSAg7}̗ΡW:&*_ro :#_ c@=>bks)\SAtNl@Cm~l.AspJyJ.g7QHOwF 'g_@^n'B`2x.h&> !V~+R>do9҄ʊj,V,:?q(O/Vc\'`ʆ8{de(٩_Bmi,VQp⿷>߆KXMmՙKO[[_4|ɷ×%JR4Iɷ$%$*Ei)".Eĕ",Er\T[ |辏np&'|/%ivޘ*o=Y{KA 7pQDBʽEhy|%EebI%7Ey]fxaѧتh˃JLcQH)Α;|? QP0'J/YqZu*v:!}B'M႖\pc{e8AܺɏɴiJR7zSq31t/S4 I +57!aQPd`$wZ /v/&3YwMVgn,dq&˦asl5c7[csltlplwR&x5MI3^R}  _%.|2|-A ı^%] HA q@nN+i/@<!LJ=@<A u@8 H:&d+ a0߭|pkn_ۋ J|T0Ր82_9_|*(!r?ŨȒu|g62l&Q#0.F&#~1"1Iy36T)o9HPɺ:cOOY}NYV.˷ @?4b# +i^oՀF~9oW_1l{p~ y C H=$MS<$EO8E E ,,q,}Jч,q,d)Qe)NGhԧF}HhTOhGhMzB:>z>8>lWOOY}+)/<"'E֧[WƏ4/˷(?ҧ՗~Z>/7lէe}8_?lU7la0lSmW#Apx H@SO}>upn})So ԕ@?pS|ù?8׿ L~g9O w!Ray)_um[Gk>i &ܥǙ|zEzq.GW`QuBu{rT:ӯZyl2oq{vd K1bIwPДkn3F/d)^(3!~3b}ݮ1KdbCc<:wcrE ʧq. ;faRp75WͯWLLVo,LVg:՛d4Y[-α;.[csl-αuӱ;yx1c7 @-w֯VpɷL}l\<֩]zBaz35#vFF1dpA'nSIoif{|H8rz~R_To#b\s!Zoԕy@o\"%hlr@ )cG\tBM !kU GtvR`hZTۭXdOԙҎ.=?H[ΩGXgznm_VLvj&@u4:XNG0J:@$ev輦b-uNd䭄BidC4BdWYh [F*!Pߧ^+dߵ 1\*X?NޢbOe) /skgjCQ&bpk du*ܚԌAp@b1Tq~:VϺ&| _#|$O/}X}OR꒔l&)IJ])"O/yX}/Eԕ"YȖKV_& Nrem^?9VZV__—,&!cdcN+@< YM+vgRK HA3)q@,gR@<A u@8 H$:7G\%1Jޭ!] sܸ Sk&Nfn6X/ɷdzjܤ1r_SrYv&${X`Ĩ(oQ=>?| +r@ ?eYSVʲ8eq՟SS֏Sueue}  /YE ݯ"'t9Y!`{@1ܒE YcU9D8>U\AF8AD87YK<$Nlıf,1""`ù$4CB6SQ~ù]!q+ШK<[[W|]꒏۴)D["'/򐏽MN^Or&q҇mB*b?&4.}ݷMh\e!/oey8_í1u9_ևaa,#|YΗG+!ܷ d }>Y}Ӈp6:Pw_}ۆWO~6gWgvS%?j "mF8Z86#\iNzx97S#98zUğc(Q:;t7:\oFXTԷ@w{H_+XEN.|vrf6(Kx`l}s0hk7#*tE* Gcn@H7 )HVK|fp2,//bߴ-nѲ/&dq&7Y&3YMgldq V[α9zVزc׊4emr+[v5E6V)Km>^I"|AJo0> Ø}WiOت_V[JǽWsʻOғeo;M{둴Hz,Mf+]2&'ϑ_o7ߚÄS T/{mh åSU4h] t?a vl\l1y74G¯Si+B} 7*8VsUUD%H7icYu Y4I 6ns\&oN<]31ZB06HRǯ@Gl n" ($ry eYRXX@31QR8Rܤ)~LŰSEϸY9'Mo-kh_~v;ƊPLћIa_1i)A㉽ŷNM$njܬ;qbsex7|4GӉ*؀fP|y.v@:iomȘK[mlF1ql@H+':|?O mҭnpulq-K&49/5&DsDFN@;&u~^{|bo.ٗG5,{* f_K2:GoV=N4⏩ݓ M:r]EwH2kŎI˪+Gxm{\!BhJ3<2|u()И,CFַI _D`s z,]8ppPʾ[ ;:6cS2`m7H_eX&TUW|qsvHG4:vRfKI.Nɲ0YMօLgzř&7Yc±9xǖcslq-ޱ9l:zVdԅ/KK]ć/uK6×|/i%/IJ]$>I+Ei/RD6KȮKV_& O7{Y}k۱Wmŧcoe.|2|mK HA88 HV8b C h{Z!մbw&!=j&%ҧ@>A u@: H@C87 ߆5\F֨͆PGVsIegPgtOS8X^Z>sD6+3.{u_J9> Oky65>65t<́;G/,SVwOY՝SVwʺyOyUwuUw).tdC6tf"Ї,*/ hvpK$4n3ueccˊK[]!{:.9yև|mr.7 Kޗ<}mW1qӇmB*/Dh-p=[U_carVuV][7G^GҚE^8~+3ymU.s/D[S0eE o%1accPT#yv&TzKp\V98Nec1͒[wcTconX32 -M Ѽx gGj?mH%Y|ׂ_ fq}L&˷MVg.M^8>ulcslY9YV"BÂE% L=SFA;bEkIuɶsu,p,R`7i\xEIB'DeWr0&/#aJP|k xmpc^ڍp_M!/m3pjE#oKQ `lIvРU񞇂YR|4% ԟSR(F8ҜhyrmuYÕ0U+4+88X4AW:2nB0M .#e9"%]g .ӔkN "y jO͢AU<4x<+ dIum%nxh8S3_݉2kW/tCP:Q'l^K?ߨu^~wrFP6ie+-_&J8{TIQPhZGc0|*$U-CVcT+!23ErAI<%,2n7yh7!y=bdL֕+֧vlq+^/}K]eZ$)}IJ\UZ"o"J]"pLx-q]Sgצ^G9\D:<8͊tOFimF @ [Q޴pZ@O6ly*? ^ޠ9NUbmCpz% ==RY,㦍P 0) n)S/]LzGq|Q{8kQ |HQU)rIhp ;΀ SmaEò2RU4gke^Lv-αuױ9n:zز&0[@1>uS OTϜڲ%2f)?ho53ILm? #|& /j<18RQ:!_ 9pU#AX@jЛ3kˊeGޒ #XK_=Ȥ!7(?۱K)4S1v.i(*?\EH#L >A6O.(ml_@!혴R WTȱ\k Y/kvGTҲ:ݔ0B hC=,^@& ؋!yAUxƖ%wG(Qk&S&3Y?sl}mVزrUKą/YUIJ%)Y&E)OKv)U)*8i.8W&Bb؟m _՗%.|fA҇@z H$8z HO yA9A҇@z H$3)I9 HARA q@z 謾TFܴ6OSa\xpδtUx[`m#k3kY [/gdMcQ[? K=I㍼ )| *aیDZϼ@mgxCH< QO\Rqw,gn356 M2 "pqIdqފ?=e}zSVwʲ<]֧wY}W]^Dly{DU^yYWa@՗-O--|l|)SoqʫO~.ɟwyioG#b<"4?i%߮Vc_t⇭ꆭ9lU?l]OMo_ } CO=$M H=$p>}>݄}S֧>y >p9+^~{`﹞wG0?`7o-_"\>`rgL~[%4usWk:Phmʸc*߀qXsɁ%l/v8Xj ?wءyuYk؛|;oCJ^ĊbcjEk*t?58[v;\+MmÛTױ([DUwt:IYTB3Ί)?v) \nsb`p)nBovN|::ɞ듏r{&S&3YV&[:|۱9zM86lW*DŽc;l} 9AoH0(I Vs"kVmNl|CyG,-"L,aJKQ /lÉF/cpm4 M ?ho+)b~&Bc`X\1Q)ל*И 㮾PV"iq vVVQ' jUnpHa^PP+Lmp[y[Wdʊ3ߧxp-d5CyKj3dL ǖ-vluK^/yK\eZ$)yIJ]UZ"o"JY"Ssegh+i[n+V-?8/KV_Rą/ _×8 HARdA҇@x H @8 HAts&%S HA q@: H$R2BgWV+;{sGnn8=G H'?[3>~sC 9|`e\To.ܬhSȢ#wM|)*z,1EzTĨ؍+ҸfVMlm'W%S +6WrqE,#5)OY)wYe]^wyiĖoGtyYev^^ h>՗|Z>E-OklvB8)$ @8 H6N@'!qB<@@6YYX1YX"X)Qué?p8!4SB<$4'4#4&SW?-O-|l|)Soqʫ,O|.9O#<툽"4,/Ӽ,+BKV_k5 [|YΗ[ [us*~غ2Y,6y5R4Apz H$@x H'O>}} V,OOY}+PN}os8W'7T9;~gay F Lx2-z-\&#iNVis~i[]q=+µyd{s)FS@QٶH|A(Jny3n >jՈv.#:E(r$y7Mm|Pad[SƮjAqoᮬu(|.u>X Q PZ nQfglh)eK7y!cV?fn.% řdY,du&7Yɲi~[α;.[cslαeӱ;)W,q)ב{)]oq"KÐR{[ŶW2?- o #ڈ8Q_7~. j~a֋vĹ/D?os_=Egmo-`^/qMpGSͮک3Z2gL ;Gbz j:)C%WjEێfoAJ;T^߹6Jꖂ=4 B8>%) "ܦnw7q1SE=FusrI/].#|IN_xrGpFynR.Pm"0o^BLF9pўl4FSWSqS b {RyJp_AaިTUT] !4![m QdȁLʷ7 V)z!qbz]кSChe~[~{ea:՛ ř,d&3Y6Mc±9xǖcslq-ޱ9l:xVdԅ/KK]ԇ/uK6×.I"IKRⓔ,$%.IOR⒔l&)IJ])"RD\)"E)W/Eԕ"YG)rL|>.etI3_*7)S<TNt1u?U-85u}SA?R"B.*ez^A/sUCD\kD<#M/"7zu*|&~uҡcp Eb`ƳrvwqLoD'm*[v F`|Y ?w$7+Q`hcwSp2 (ieJY !YZ|{O*D!Z)W0B@Bgr/Kjpzu G#) ؀Ftf}ʪU~kKg aY7QD{eMٙL&3dZvc]fشr샖/V-͚HV:.. X۫,SUTQi~@#՘vN"aFOˋ[|/^$($I5"lG%چie oP=0YÕCfJPJS|{ov3*7C yDK/QItT7(Ra›@HNlh;g+g|o&4%᪅; G=*][mՓ}z! ujSB{slq'7 0r}ޮfdZd&dv&3LMdشplvMޱicwlv͛Mޱم/Z/v|Eb؅/\E>|KR|$E.If$J[}|)®R?JMݬM^&:׶cڊ _oV_]Uű@qlr@-qi@ߘVlͤ@gR ^ͤAt@{ bAD֮3xoj\zA:'s!?97Vcx'aK {M60:9!k݀y[\0|+rY6c+X<<yqN)ɝ2SfN6O>Ny%wi%w..tdM6tf",*/5-Y|E=[U_c]s M`\ط%7m+sE$NM6~5`Im9E\&qɎH+.SwIhm.9B#|lr|lZwiK>6coVWmucM>69yu?ɛ%o }иdMv6q"4ne9_í/p;|oΗ䆭ԗe9_LAKo}@9 @ mSuw%7m~ O[^{k5G H:0Sz9cLë\|kŀQJ9)wY7_D/.2)Q-! [ NYB\Srٖ+[cṼ_;%˶q965f0 2Z(Z}AOBj^\2їypW 1S~8$9y:krЌovv]$x8AtN(kSy|m_fZ*t7ufRtcꈔbEwbx=sqmYF~wMMfg2-M^86ulzڱ96!NUÙYjMID#T@RoIIl ZBFII$x]DKUY3IRј"i8iQ^q"=d+b JP24*8%NdU l lJrIG}U$jd9/g)sT)1@IǿފM/Hv ꥳTLU]K*=s#\oL1A ShH1BrƜR稣b3P{A_P.qVܔmy C2\%1j~KzB +%$5Gݲ- za&oXzj7<>AtLJ|`)Jr( ދVkeN KUq(HgoVRN⦵v,? 8_?Rφk.or. 4~935χzwsc;gyމEr h3eܐ-ש7 lP$ɠ1&1ZVTP{&]iٙL+WMwvlvM+^/E.|*|MRt-ERW_| _^}ݶn+~yŻ\_}m űAA~Zi9 : ϤA;b_AA @PUchEZeݺ-N%鳖1. MRr$DǮ 6ݤ!KHWrUfǁH@N1[h`, 4.[*X=3:6;>6u|l{)r>6߽]c#6=y_O}vn_>_VvV_7_&&oϗw v@A >rp}>>{)rr8i6 ]qn i!_\$^ȮJJ%Ɵ̋ L]򊵶)X9気Γ@)ۡH zFZ@\H\tٜ.& k+7Ukyx1Z)ps7!~zQbxLC}: OjSp-muct?%,]ccsh0I u&d@.,6F {:z7&3ɴ0Lfo2;id096/cwlZ86;fcӦcwl1-)Ms@_R%UU} |fݮ[ci=] 6XO$0.GPm&(]aj֐'tN&SPͽ48`!~ca`9wUʓFJ̜PAP4Z4_>I$67m_kyBpgZG6W{-t)Hڔc8}lpNi47m_+*-Siɵ޳)* nY:(F!;ւ6ᔻ ptG$)Ϡ-j5T 'Bڴ|&YLӑUc*8qW-PJB45(U:4gF/L!%Vۣ8.4%q=OOh=)ݴrW5-XdS!WBw#Cr]&3wMfg2odr&Ӧ?869]fؼcӦcӇc95)N ԅuR) ֬ "ݨ~ՇM|{?%HE߭PG*N7CK_tm Sz){n/W*DP4(8H1+* Kj4~x)b 8 $RGg͝5bnaTU2YpJ6bYSDؤъ (agP=f9'P-^ sm ;Be=Ibr5optд{K lku8hsFQ(m֐=DIpgtHlAAB !\ya2;ٛ ٙLd&36Mc±96ycslrޱ96o:6yfhȅ/]"؇/r6E$E')rI˗"JZU_!W_W}Ѯɼ(8W&vmʱ|ŻW_V@MA;@oN+<D3)LA r@ v@9 ~;~!+'loUX JqBn'wLA;XqnÛs9X*y{.y8K c 7dpTy%4"/ϳVeѢZ|w~̛??_ݑ:/L^|y.>xԥ)@?.t  C{[GIŖC9 ~SWkւS /ik-Rl~>qՍǦ&SM܇U)'j1e)65ڬ[oJ׀bg(8bgU;-=+ݦCHrc=70?}Ep<ӂ8[ch\ ^JB(,tъx\塛yH"娪nd2j5OǍZ, l QK!ҳwq+K1Uc7Ђj8%|d~dr&c]cұcmQ^%K=7ʳFhB (ojh$x/T[ Φz.ʼn|^k}.)261x{bvNjJ.fzW:)) 4Sko@s&r4džhҦyfI* k`XU_c&7tA/l `APG< ʉJ5w`zE7}rn<A^,UsLFyHPP-2vR7M/𬠕B?-i/ M jB 5; ;rb$&#,_Ng8F'ƷWs @ i*8\6L1#^4(!O%S[,6zQS*R<EDÆʞ;": Dsxú&_[U, TJ5&?i/K _Zy9nD5u(##HKw3/PJǿLwMM&g2/M^86ul~ڱ96{nE_n$E$*En)BO"J^"G*"GA z,haB!|{52yD9 ?Q᳠#7Gkr\ מE 3ŠGe]6 6f&(E~MIfs}i]>;)(뎫Үpu\Ѭ݇Yg.?d‡(n7 @a(ةClKNy}ه0Hr (x_ʢGc!maRThdjPieˈ{YABpP'(yڊIui{-31h#YheP V>AQ,/Ph$Ktk'I텍Ld5|dv&]&ؼ:69c}WӬD%˱'ѩh{ ?؋CZ֡@&oH@қYCDӈ+^*]q1&O̫(F1$oS:&æIJQjӦb./M>ARѲ^%Z IBB՗TfR\f%wLROh|m:iDߎFaf* S@KEQD= cRրoB%PoԒgc@FʯIYHi=eI/*~D:k͍TW8r{&]iٙKwvlvM+^/E.|2|-MRt-ERW_| _^}ݶn+~yŻ\^} űAA~Zi9 : ϤA;"_AA @бSKt Hx(_p@ JU"FS\?C {E5/cI00,ĘJ+vkg6#ڴZ>x|Îd/kTZY@ñOH3oAC6jvYLk&nJo,Tp$bS滧LO2S)w2/AM~;bn^/gꋟYvO&I]Dec.~?qbE@E,v,M';B#r8#4z.9B#2uwؼf濎MwO>_w|MBvĦ#6kи鼼mW_t~nJVvVtdz.D] D=G]GGwO>_]'?܆ ^5\3JF>DYeGo3,׎Mū4ɂW)h 57j죤jUڐ=?$:ז#8^R/o{c׫SbOc$"k@!h$|]-9u41=hJh B UeASMZ,~TmR:󌱾!`*U:ud!K`OuW,8~,Br^&5u&nQ.߃2$Gz31TJbog~z$X{.6j256ɼ4ytױifؼr6YRlҔ=^!Yԟ;"1=jFI9(+UFSZG1ԁ"&%H%CL:A)E\T=FôSP3$k@cRBƃQEtrS͐6Mpj }j9h#v5#z򚚡;:ᑬ.7ks窅SEԵNǖk9^:$ŀfr1Fo/ I 2PmDІ$,1`RIJ B#NH@ g\a,oEB!x8VբR@ U?/U| 4"K NrHx ,4_S5jN9^ 5LwMM&g2}ulcslZ:"|EO/rዖkn$E$(En)BO"JZ"P񥛪"ԁu'TL C×<TGm';y <3w5- *Z{[+ >ӞQB )j: 8=PcpSDjz%ڼL&CyGW$G1. TM_L) ,BL]C+xV%5W+Gk<u,w|4]gP&5+5~X+uI3wʷ0dܓ*ך N烾]ʁH5/mL}dr&L&3&o:6;]ftױ96/[ Ur 굠EFiS3L9CjJ}e!ijEҠ7)Re ql :.3 $p YaF}iuI+1ɶ AC2ηC.~6iU49ܮw;ԀaD7ݹ In73bt{O&R檎_+9C҃7^5U&5-6u*6ݠzĢae((ͨmⷹٴV9dzrs !v3LOdZplcsl^:"|EO/v዗kn/n)BO"'=]pt[˫/ȅ/ _kf. v@N+AA~&Eݙ9 : DD"oXS@|ԩ4֌b pAEM^SSok'imN˒/b5nZ5KAPoDE>_b =Ȑ]p;OHPMz; aE"/ ]xY& \d(gIr\}ipJ{$(L%3o)SO)wAOerwwyߎt,Ytm.¹]c5>Dpx$ovYX"`"?Abc.~;=fIȻNvFˎȻL]vF]>6;>6cSO]6{и鈽$4nez:/ovp=]}ܰ256y{ xb_xc_SO}|IOs8r9W尽oeC* M,D%4~CdیxKmJD˥T ǩW"DnY,>7td:whMݱ/5Lކ*xԂ<-E0RAj\~igtʵa70 Uu.IA)璔kR.u܌&w+ٖm g#o[:lKA ߼ I*AnfBAAYy~{ ^CFCכ(Trxɴ0MLfg2{ٙL&Ӈαyc±969&7ct ~4 q%sB/];,'ZcK΂zuיSPm\i_>y$_NY~k.%r-]z9K"rDforIjX4?'d_l3WN[,%2 yI mgCӦ5ʺ5C{Erix4.&m/Q"-3+UrZ:ج5 &ulIh^^A/82HR]yysU(fF5;| _CE"')Z$)vI]"%)LR\)BR])¾E)®aW/Eȕ"YG)$ D 0D;)Epe5!rS7'rT9%T4֢5!N+”`sJu^$QB`aYoHdR @S (|qEA ]@"QqQS%L)rS hZmIl r=U%bvL'=pUQBL;Al:kU*!GқΤ~0ɼk2;yd&36Mfo29fش6csltlp!Y SO 'P1"5%^v5m&ӛ>mP/E'T޵"$iIޕ_.6^T/JnE9U7g.ek,OT> ͢]@qn8pl&%8RP$))p#uv66*Yljp%M~Y>Z6yjCT NReFUCJ+^wGRL;R ʪ(),s_^$ )63-q6қ< ZS~0&3ɼ0L&o2;id&sl^869fشplrα;69M&->|"| _.|f𵨾|bhU}$.I_W}R\)B˗"J/5?_}cӢX9h7|7o@MA;@oN+<Ļ3)LA v@ r@; [^ xU_얉h$TWD@QI#4PS׍JWF$[H6풓iqW^hȋ"4ׂGF^7eZ|w~̛??_ݑ:/L^ԟ/><Ǜ@П.sp8>ޅi\A}pl8a;rl+`Sn}IB?'s[ WBiJoBej+4_#/hdoPS,1j?A[jl;[k.ࢎ;NmZI/ \d/g)F/H)RVR(h!oŔ@ރ3Ǩ<r7fShz5S`QCS[sJ3U!]W/TL}pHr#/gIZڨ7U#Rzźvܯ^lzT/ݢv=vHMJ%cٰ$eȓjHPΨ$P2ߗg!ڦʀ  +@!ut,A|VErrlZYDi&I74+_'(FӐkRJH^;618Mַ]8>>5U2 PՃ-BvqEjTl Ǹ$A8 ؘ  ʄ7VAZl.NSzL:!+|+]P01!:ElODh OmX!{SN+r )+8LVҺoHcx<:3)d !kg74§F`SKz ΁]5 mY>#Yݚ,7)w&3vMfg2mLdv&ӦM&vcӦcwlvMM=nEص[n|,F˖$xdԎ6R NLr1F>{3xh\blI*@OGAYUW9su5A/lFSN. L1TM2}A} JywC,`wNv݄gM'kA*e _c ey K^UB/ ކ[7ę5| T( Q% ?UcdtT)`Sl&ˌ5dzr9moC|._1LRh`<[Vn.(%j޾L əLdZLdr&7ɼi2Mα;6-cslαiӱñ]Ebȇ/^/v\"؅/ _՗OR/%)/_+EhU}R])]Ż&\/ulZ+/_}fzZAc{ 7q?A9@Τ<ě3?AA @xir+uֵ?"~ E8=ěo exm~qbA]&yz̊HNOhM'4.Sik=>6iʋS^V<vɼ+r|v +Bo}-}KhE^^o1_1/ϗiw˴9leH7̗pAM }|9vA]^ pBpc\qaǟ8|y;4 .)D]mݍ?.Yy7ٸylVĂe5t{$5s)A0O|JޖF)쒰|1Rtr7߾l9q2mEB=CD /HK3bEK`H͜dyIATDoS#z†l"b.L&&3W&:6?W}HIJBg)r,#?LYۈٓq>P2 _ nCpt ,tVXԒmنJ:휤dEy[fbvRmFbSRUr?QiؘnJoo՗{餢:k`l7tc !'%|zcA1Dc&줶0ߚ,"hǔU:pV/*L*B0/Ҫ|MMUNpH@|$Έ|u1:!$G1;tT#ZG?t59%ɋQCm:1R zESm3 LONɘcBgDr߯&oҋ^&C K*ģ' ^*14\SF%!iݸ" +DNR: WAyU(ɬ]\G a7>(W`ܩUuKJiwsL)X%^^Y6 5]V4.hW,ߞV;e~ٝ2-Oyݾ]&w;tYt7/ynEOW_Epntl" E8A'-9ȱO'XX" "Op#4.:Bg#4.S~;q͎ͻ|lv|l|S|l{黼$4nGl~:bov y1vOW_|쇭솭;le7lnLwMMޞ/A A}>څ}}tSppmPd+8@/֯[~^J4\z-C[L~#p"V_ E}(_[:xwnߪiUT{[,PY"ǻARB@k9 [lKRk2U7[a_Ize3{3񪭭X 't m:jѠP&BrN6aMٷ0bfW$JJ8ukT]>OF;NU6-Iz(Ey?>E37ksf1n?ؾg256ɴ2ytױi&ؼrl ])4Vۋ 4 =uHϦ'WBnW.t%Xbi)޺DWX5/Km%gT4I^$ՠ/t .!YP&`yG hRo5;eqH7^[x۟RdZO6 ә2k{աq*nt}q_ H) _]ƐLRtVFt9L{MUjo48f7QIk%NmѰ<^I@qԎNI&WO'w&ՍjEC0Yc5R]8Fҕ x漆Ґ˱TMG܊5@qke+@)-8  %jg#fj XVrC(HG6oQ<4R"IiWM` ?Aʦ͜6CLn0 6kCӢ_W:5b&1 ѪD 8a256ɴ2ytױi&Ew?؅/^EINR-Ԣụ?]+ExY yRJlЅ,r~91 ԕ7M5Ap1Le/KZ9(%ZIVWSxyM !G؇-W*U@])EhTwQ;_v"2n7uK<#&ͶH3 ZFT&aӍrTIj1g4+*Z$P$x:ԒOq\~:(kT3I"2X$jhbqK`6[&3wM&g25ɼ2yױ96:69Ǧαy؇,0^mx9-KjǛD2PkMCɭ(!#y* `ԩ9y~V$˩-4Lj`tduȦAB˅7Qܺ:="*q%~K=$Vj佖LC2H{_{3T2d $ l bED %oUU Ei3[3yYLP.`Cגے#nX3DC߰z qHp4;1G|dzdr&5uϱi&ؼrUዟ_*I$O'_^}R.E~yEw Nzm+W_>| _؅/&] ޝVLĻ3)r@u@; D+ D4Y0֭'$XcɀA221O}5 `n$0%([>')vlJGgLy@q[>"^7ysNG Tq`C9lU2ʘ6;>6u|l{)r>6߽]co#6?kи鼼mW_t~JnJVrVtd~.] =G]GwO>_]'?܆]30Z` `Hj6 yI}|۲~6ŏ[!%:yuse;0n:?]YHBDӨw"y-ҕSRթ+OnNM%iE{"dz_PI 5 awP%[,p\J,FFCIjhYB.oV}OUXF6IC_R`TLLfo2-L&g2;ٛd4α96ycslrMޱ96o:6}AWsz |'%.u wkubVtyep O  I-/>i>RՃ8Zq@&GcYLH#pu0|&&-T AELM4H_>t!5B^m r4HOտ4LMV"wpI>ڒ8W^>5}B4W\PSqC!5)ޯDTla3j'KuZ8rsY{ni(ހa:MεJQQ_jehp3 aH?]N Ffij~$V$֌ܵiм.% Vo5&tHZCe_OPVԊr{T1.,}"Z&^)(^+xDf$x h~awʴ8evyqN)?evLLe^%ˋuevw62} B+ϳhw@CyhQ}pExEB8Dx@o"A+uyq+P} ù< %|>qvFkK%ܥt*+3-/__Mj`)RyAX9+TbYؕ,*]@WE8ʥP_(e@X.ba@-(|fs$~-K=9WɣGXAR,~#N :<x]#!QRM :ya2;ɛ ٙLd&37Mfo29cslM fcsltl}H|C$/F&i}\JgNJ4OJ5ȩ\*UlLVP"jiRؠr>ӳyٍh n쨦 $). |Y’ִnb%oY 4M=&EػQ~<& ݓEyb׬wWX F.3ܮHoy9Iht_$Yvi^>=%㽺rKBj+gVեo&GIEE)Dy!1o Ï\sӽҥ!41IwXMZB"[cvA%#KR@~ F#8ՅPMQBW;U/㋌':eL' %Tſ08ڌx*EIզ- pdAK.|m>)CR2-CT;Lz)nm'kyɀ!LdT ?&`Lye]&cN94U^q_5.i=(vSZT D)I dZLd&dv&3LMdشplrޱicwlr͛ޱم/Z/v|E"؅/]E%)^$)vI|E"%)I\$Iʕ"(Eȕ"K^"JrR])B"CAh;qy^ Ua iGDݺ"UR5 :Fo ^ؓ͗hSI/)ϗN (*r-ɗ01)T.I9Yg #nu1 B44%qZMըtv*/.svS ym}C( ȳQFqv oj$Ro;ՑcZ.<9ֺ{-^eC /Onuʄ_fnNga+}]NEr\'[3Ĵ=RCIR E,bX84*)ls3q|u+eΓ}PjMdv&ӮL&3V&:69Ǧ]&tױ96/[ t:[&S'Y|eɔQ=\Xia&PUA@I0Mr2aOHV05j^Y*!bsL T[EyT.|#5")N%˶ioO| _#|$w/Y}ORm&)I])w/Y}/Eȕ"YG)i׶ɫ]^V_|vU[؛kY}k;| _ _8@6M;XAtڞVh5؝I- mϤAI.7 @9 "m h2Zv[EZG*3hmFhUU{Tzƃ3Oc+Zxu%6Oj/t97 N`{*DlB⅗=D &I鿓:_9^o1Scpʴ8erLiqN)?er̛LwA]rwvA]rwBKdlCh,"Ьǀfw dMnU}}6%D7!msUcF8@Nv@/M8A7,r,,%=ncYXbr8FIhp#478[L%odiޥ.tM[]'mucM>69yu?ɛ%o }иdMv6q"4ne9_í1u9_a+a+-#|oΗG+?G@p6Dh킺Ko}۠?AM~ Mo_q8?{,,{(6Bָ'j\%gcݦ*A16C8 JZCEI\4uE~XnYG>)^L]əL&7ɴi2|kM&7?%)0[cP{/NJ0QL9TzuJ\Ͷ5a2UFrz/ >&ej^ o6b!Bh ^ F)Ԋr% "x-K) n@$nks @noB].%yPS@Zm)SLsSWr>Saڨv|1(Uc\ø 1L94`48_E:=TO])cUmye< D:Jν6OLdZrlcsl^:"|EO/rዖkn⧓$E$*En)O"J^"t2\"w zX9G[ıwݬȇ/v7m] nA v@o䁠e&b洂<@A ڜIAt@y D"AȻ(%t**$]jxEhqbK/QתZ8G|m^S#v I /Tuxڎފv[O6J ضlcyH<U(_31?ouQҮ$ʻ3ckȢ|no,ثai A! W)ӧLyuʫLw2=}W]^Dl鈽?# 鼼|ypwklz^!569 Atbhdc]$Ngc&?Ew1tÞE@E,,vFKhFFvFp'4#4]B#$4'4#4&S>w|͎͞M|l|)SOyE[8]w+r]^El鈽"4~FE^y+Bg^^T_|⧫rV;_eVvVǰua256y5R0w> A > M=GM=ܷ:e{)@ݏS^q8.pO-PS2C0"Jc3N+ݖ*Ae`!JUOv"Af. MGcvS(ˀ(L'顧اΜo$<);Ro(J+&?G'<Ҝ9vIBpaihUaGCyݎl"bX2HLHR2ݎYj֑V" c\&/%.zhF\!GZ]$nxPeΎM.cuL5Ǯ[%Z{3}$!KȞ:3쥡CUPtU5ũw)VTR׿ ٙLd^dr&7ɼi2}α;6/cslMαyӱ !|"| _/E.|_m/\Eb')^$)rI\"%)LR\)‹R])¾E)®aW/Eؕ"YG)ұPeV=MK A~A.0 @э &Tot(M W'^-K)C9W}Y'䑼Y;.r)E˹fMRmZ& ޫhZ@@`V9HP%M.ni!yPrԭ9w= \^d;fF&˄,}Q{TW$z[HORN5!#`3G!V.°:b*h .$$(lPPdPkfo2;ydr&]ٙ+wcӮcslV}$CjII8 a3r&: )?x@A+^i:a0Ek섉Mu`^S5S3(Fԕ7&ClV-@wMQ+PbvRH9Sk# g㟄Q3E3SZ%\A#%"}ʩlgoT$ia[/ݸSaRi&=B=k\PqYuV"50QU;uX4WHb}RлVS;PB^ 5a{M?L əLdZLdr&7ɼi2{96/cwlZ869&cӦcwlv]"x؅/r|bx3|GrIV_|b%)LR\)Bw/Y}/Eȕ"YG)i׶ɫ]^V_|vU[ػkY}k;| _ _8@6M%9XAtڞVx5؝I- mϤAI.7 @; bP 5yu}k͚Pf"?9h/nT g-FVJciG7T-%"Njk 6F=*p%5\g{ ֐M8J~+R9^9JY ővиS);e̋SfwN);eWRaK O#KfԂSx洅,xA< %cz38eb8Q_OnY"(Y{MO_ d#NJ:S?tSZ<͐BHtfڬ@DqS4",QY 묖^V~8dDL=R+x>W4SKQ9؀Z;`耵1}dk2=m2;ieʱcӎMαy!LWiU}SͶK=J45O{sQd%Q(R9AIU ݰ1 V`diN/ z "  E2oT(/$E5A(=7cWp$_f8%,Id(CӨx424[`֡rE}f' ))R*5#A@nFp8>UZ V8%_8r If/Nmm}|OvgZL H ֍&<rmkX.eDmSLt.Uyp딁tՓqiHG6fFp _H>CŰTgZIM>(t5nRS(rKXP2@ܰe]W6 *ʙM< Yq5Ի}$؝`^wMMfg2L^96ul~ڱ96/{nūJR|7II\eZ"tKrb->`Y^6s/!=H]nJ]u-I%uMnrbVJx]OƳȟ'R_9P,EPDh]Lojq,wSL:]VHwJ<ͣ)))ľaP&L>C#84Ń|ACOy ;bµv%Izb gt.@~^TɗĉVzr!W{ 5H9w`kuv$;)7$[[L&g2Ld4LMٛLαsl5cwlrMM}% x駱 MÜC@)c'SHk*g/ctӭ񬍫n )uREP6%}"M<XSY(M[mD@uu>s gTMu~;ۛ?{uf ʆ 01NN`buɮW.dIƫztĝEx]E~ N9p__{k+xErIbI$ !li'hw$ܧ1t6 -\EU!, WL&&3W&:6?_|7|\UZ%)$.I*IJ[ӥRȢऻ'=]pL,8罶n+VV _|E.|f Ac M =iy w A9".7 @; DbAkjhQf9Uϡ4pWڧrl+erLS^e{黼u?*b݈OGtU׼Lw2=WϼF8U_tOp?nO+v@&Db&I@c]$Ngc&>E@w1tÞEE@,,rFKh䛄FFvFpt7 eOh$Ǧ|l&fǦM>6{>)ӧ~uz]yFl~:b_E|7/yyEh˫V_t}T_솭twL7䇭䆭9ladk2?mja29 }tch".7>p;6>p)ӧu?OyN~ù?8p IX]˼cyD` R*yf?{WTix̋,}Gg@x~zIkiH ]}urop&]J?-`:'C4ijɽORpqتm vUVzڷ E* /!IqHL<}%)9Ujߤ#~$@~*/{I.$tMΠ祁~)@To]F\iKC)`Z2J0h6!6'ǩ7C_ &hvxq\9>+"ss$ ]9&\ibV>)t-(Ktե&3$^l~ *X$Hk5ӡu[jTFSYڽbFy& ?L ədZLdv&7ɴi2{96/cwlZ869fccӇcŋ.|__E>| _#|$E$E.IORHR$>IKR')r/JvRR])B!Wf)B4^5.ZNU ί l3K@fZM^ ͡u!tU!T."()WcJ%kj; G2 -tBg*`$Q*|>ty$ƷGx*e[r%H3r5$fD:Uiʇh+dښg&=ZD|2HMAQy_3i6rJy)#BZQ/0e><`MU :Iah:ENn#OK sE:SfXQ/6'ԡ+&3vM&g25ɴ2yױ96:6;ǦMα-Gv2Y'%B.Z.G-Ŗ KuvxXG/7t)$%$MZJcf?_8ISrrVB|ycI!ͷPv#A/m!d߆"H W5F#~`8H1ǖ\5] ]pg'0 Eخ3)f:_牁A$^t j7;L,vY*kM7T~^kY))O (,p6muu]r7] '/&4"mB7}ۄU^ 4e9_í1u9_a+a+/#|nΗG+?G@p6%?x킺Kn}۠?@]~ Mo_q8?5J<84!S0kmߓv Ԥ5./;PDvKӐ -\m<-xUp6ɲMWR L\t.IjHC.8Z4BK2x\ ElF%I9m?T-&'[I*:-^/Z~rއ%(](QhM9p vdy*MMJ: '0OkZ֨/j{+~0&3ɴ0L&o29yd096/cwlZ86;fcce:ZR6$w- RRz94a? Kh:#E-?8R|.qB3R)q4tU}hi&ӛ($e9 5X(աivRG3f:T{F7To$ C;'4CuI 7}<!Ъ_,kU%%9 N(l`ZCEYfÄ'R UR@K{=lFd7(:F!‰t$WMpQaH&^T@&CsvyE,WWܪi,=U~Xض(ɨ:bWoxF8\TUz(TGu!eVQVp(c=RJF1 ENSbORİj3FsaumƧ0 늘xx(HZ}å]x=TT(ql!K44fSӅ4=/["EZ3jncLLfo2-L&g2;ٛLd4?Lv &Mα96yfش.|"| _/E.|_o/_.I"IKR-$.IORo&)"IPaW/EhQ+Eؕ"Kvm"Q܎;P%|dK)&GA[ؐ}9< 0+*ܝcao5G1wǮav1R&F_"!S\iCy }ږ"P`Ѵozw%tIac< 8zH~R}c#Vƀѥo- j });RmN ኸMok9aʡ@d  ,jG2jn/8Ln Rz#KctCΩbpx]ztcҍ?l wH QNྵ/g2{ؗ3ɟؗ37Mfocwl^86;&2;ǦMfۨ _q]@Eȅ/ _vU7O%)LRRV_tb_+Eha_욼fm4yӱ߬{V|[kY}k;| _ _& m Zێ&=`jZ;ZA|ڞIx56yM dv@9 b[xXWwYnQE vVd[ՔXU?0$xE^MT=:M.\rm'6Бt+ٟ+ٝW)))o2킺2uWw6y",m~?m{",*/yy [&`{ >p&  l#6¹&pxp Ifcf,1t" "op%o9pnW_+B#$4n3uyv|lZ;niSh|l&'9yи}M6qo>&4qw /nU}}5ۻ˫2ݜ/o[ [y9l-EVe9_Lo4&ܷ h >^}oЬ> mSuߠY}|ۆWwYzRIzb;BC:ŰN)?)ϼ|7zi}ޔpJMt5"rޣVAa !-0 Jڍf;TMY[xEe$ Y^نVVHT~)#]e,7aCI m Ş/T*ǔC(F#'c*6V\Գf? ro'.bp6ɲp5!bN&2pr^(T%,0l*ꡌb/ 풨(dk2?m29ieʱcӎαyyY~Ensޫ-_y# U,iˈ%)/9A]鳰Wŭ4cŶK$%違6blGFPTe3cOxĤEJ9[Չ$&C(X.ttR{d9Y"-|Lī_@ϱy$[F\MgRb^/&՝Gr#q|rKħ%<*tK+'hMf;Uq*a)$" ,Z3 2ΤH#@y)&["> "KI)C2źf\!orJLUD(O-Qow(LS/.RLmTrgA izSRM iS`gif)AڴF.fSBU@,)gd0K)Byi RKJ_Jӭ'I6M9ʭ@kҢ K*Ae _/ѡ"bbϖdk2=m29yeʱcӎMαyثw?ȅ/ZUINRԪ=]+EhUPI,cz3k;墥wYcN Dѧ6ع52R &.[KٰX k\.Xjpi⸶QN}TtH\W7Z $x8g r W'KǞXV% .S2+rQ8h%BJnƌohHtM%I:i:y! _|@:M$! *7Dz8&$rIyZ]r:O W'؈M*܉,`29ydv&Mfg2mdrαiױ96m:6yfؼiSUWD8gSg)$#خS};"$_JȘ:T# /tܑGW \7!-4 uCI`jSYAI椖ʷiRhI\O@bl4il biP!WlAռFe!HHF5K8@8[oyJގhᲜA* D*RRRϠy *Rn^UrH5k Pb6{ZJQ0tև&`\-rILXuKmZ5ھg256ɼ4y|ױifشrUዞ_-"I$O')rIIjQR.Eȕ",E'-8segh+n[AO+l+\ݬȇ/r7}/] nA v@mDw A9i.7 @; 7gR1r@&bA *^V7,Sj,+!8 nN4gW]!nSmguJ xO /{,zQjL~-bqQV <1 ( \z f^ߟ_rE$ a1x=Uoq-ڊ9XU ,$)ӧyuʫLw2=}W]^Dl鈽?"*/ݼOՀ#//[}j Q}jl[c5 At@{ D'}AE@w|8AE@E, N8ݥMz {;m FKh䛄FFrFp.nyF|l&&M>6y>)ӧ~.ݻLO9./"6ߍt^n^Wݭk5aJw|s~JnʛV֕|d~Hdr@߅&Gb&_Ap߅&c&[2=e~W.r8i p6y,` WjRU9֔˻qf3nJ TWzP*#Ri ,|=~.,ġ[%1YӨ|q˦w791MX 7!'p {ܦX'6+5qƾM1:bT*!]\z{RYqQ]N%P&$:*v6 Curx vVl]M[@ҠT"_3˼╱DMR L+滎O;69Ǧc#$I ԥ!"Fp`wY}Ѧam:V ]Vv*hyg/rzHb}JIXnÆ 8Fhs{N5[OuۛCN$8t \EMr S喈W9Oŗyj*ж9׬)K%BF+'}A2C(PFEJ% m? Rv0zvdi2č$9c\{+NgUq޺i*T'UV}8uv5eh #)dr&LMٛLd4>LvMαyױ96o:6yfؼ Y6t")wٚ|$W)%>.hE ix?<#< %+τL"cMհmJhLMSH>% V䔑bI|4qԜbN%:m!3&PӻQ96FrbM|8@F2lHu}.TUE)%)l[ Rahs=[F8ir0ƖSJ^y/sxeeerkȒ4Û@t)VZ#nRϙ}9嗀}9/g+פv4LOLd^rlcsl^9*|O/rVkn$ū$*En)BO"J^"t2\|ۊcݭf>| _r@&D"&M8.7 @; 7 r@&D"LI] nA v@; D HDM;s:.{ ^UQ aSGmTs gݠ(Fgm&wCGSiQo xcd6HM"L(WNr:Bֆ;P?i88l'C;qU-[.xJW 8)6cM>6y>6;>6mWLwO>mWwez.ɟwyn#Wye~:/_/[}j _~2ݜ/氕? ɫ M<M <p߄}>ڄ}SLO Iw94sr8nqb-0=KW.u)``Oc"KQ#7Q]c["ёDU/ah5SE1%!Ԯ:*9gQ  53)GR"%xw2ɿ?$QHn)|z~=mMJ9YbP4LogCתEPUE*v-]Hx_>#@M\ Gίy C2(1jI4r$S6v)/Yۻ&3&,|Iֿۙ|"aaYZC%ӔdudC3*v}_Zf-XЊBFAdP:ܨ[g bs+H)u}u:b +KڔR+HR2Ŧ0B'I?$χMQH5tT3nJch+*Ij99j"ձ'Ac{4PQYy/ tIKR/$E.IORm&)"IkKrRR\)BaWf)I8@|9/I&ZY+ q!0i&8Y22h^IiJ Y79C]nzUqxSUOѝ 8"-@B0B^qG#_2@n$4E8!b}S5Qڄ6 G\I~4藊 b88L Ds.zi Aq1VSIǀBNM bTy:ԓ| lrbkɂ9wzLQ#o-#,f)ʃ$h/ݘܻKԺ3ɼk2;yd&37Mcslulv͛Mޱ96m:6}8.OВK_uRHǻ<}ɩ_"uocU] XN hr8_$Zlax<5VmGݽ Tt1IKRU_aWЪRvME2W_ؼh+V/ _wy3|=_}-]ı<Dӊ~sZ ڝI}6gRbhAہ v&U34Ի ymn k3zkc}ɟ.oi&Wh@V_))ͼM{IhE^}}KhE^^o1_1/ϗiw1y2yaj|y.lAp} Whs?MHRig,_9zH(޼o`Wɻb]KarOYa nӦfMU@~[WdDHE]ۍ@Q 뒪@Jʡ+M%i#>ޥ@S/J+3{bq,`6a0`, -ophL\[b/!C MKx7W*t)ш-sZz˳jxO* -qf5o(SLoAs,^%#c䞰Ѵ nJW,Ur#D\DTm&#86LOdZrlcsl^:3dNfWz 8kqJ>`rg6 Ap$1|oSЃ"I}h:J6R?J6>$K tX;}>*d61gh6Lq1KD`MA?ĥyѮ9vB39}M|IM&&3W&:6?W _|7|]UZ%)$E.I*IJ[ӥRV egut&'(SYgV?,WOh 39N*ŭߓT!(:-9(5x]ѱnJqF@>ؕcAҩԠ&;)'C&U9~絆vHCG"0K}i/XEAPLRпNDxyR$y)xCRrxg <8XN>MNDf.BWj%^&?ZVsK#4Y A rzdr&L&3&o:6;]f|ױ96Iꇼ|܌b{U_$)qjneȩ 2=LpPwS^䓈A܅L.Ff@M U_x$xJBdE[qqC괗}$U ی:u%`C_YKDd*ol͂A{R@R$NAGePPHTDmU"@ǩJR.iz)ꗻb0̠ -qLKcӎMαy/~:| _ _%)z:I"t)˫/[p/n[AO@E\.|ovqlr@ 뀠A; _}LD+ r@v \dTUgm=,ظ5@S7r "LLOZ(tsˊUƪ+B)_sE?%:&\h0^#W`tR.w+:6åvWdb~+kT+w|9R>e~ɝ2Nyݾ]&w寡MOG_"y˿Ew/~f"56=]coC'; vNv@~ hE@E@,r,ĉ]9ȱOc8dGhQc;B#2uwؼf濎MwO>_w|]BvĦ#6kи鼼mW_tVa+[ [鯛/]i˛@; v v@p;w>vpup=ez9Gw94s[B|ՕEWDW,4 mb4,?7JVn+IDͣxi]ЁP&8+ gYEڷ@pV"bMx˼\Vq@"*^oBRlKxy EWNCp}Rt 5FiJE /UKS|Y|е;Q[{A[ ͰzPm~ *o )Isl< xAR@ jɼ0ML&g2{ٙL&Ӈαyc±969f6?{q[Bm3e<)?w@W$YN*!9MWro& t$-t78ivWR9|pYZSn Ccat<__dJJYdR D Z6/{;Κ:恒TkƽHęZ&Bf2fM7CIl _&6f"pٌ8<+Je0dxT9*! *1I)quQRY[I=~#5U!ͶD,zI1'FnMyQHt @fTb/TN T|Wzg<+keKRH"n\cb6VPVpFJCwZhIh*HLgŀ(aB˙Ld&dr&3LMٛcsl fcsltlplx؅/]"؇/r6~HRHR$E$.IKR$EI}ZU_aW/ExQ+Eȕ"Kro"QH9Y@fP@8TF]]MKؗ7H @4$dCvڟ ˹k}(N("9VLPE@ņлF^&<_ 3ԓC&(>U @F4bT.Xhܑ[9ASKf gP> 0\9Qkyơ[FXH#[Jo*?#PtP.>tþ$( J1h")GQJ&mp˱,7U|)47Mfo2;id096;]fؼccc.{흒k#|w9l}iK$KZtO@*׏D4E|I{9UzZP5J̗X%_ *ɗ*߰A'Qj LIoV9S]]4RXJXu^D oҤʭ:-[7*I@~P!J* `2;UmKRWhr(\ n9$Vg0`bZzr嶆b56&&HPuc d;\tIl){ədZLdr&7ɼi2{Wcwl^86;&cӦcc,b$| _/E.|_o/_')rIV՗ORu՗/Eȕ"|)B]yQpL:6/ڊcw] _W_+ vq~@N+>işhw&1ۜIy Db/Q!yXrn;}*}0(1㵝PGt]=Ŧ qZ`%ZG$W6$!~)d4X->WD^|~tٟ2/N);eLyM.- ee޼]wF.tO|C8?MAJ]'N&7'e|7Y 4.8Fe~7и`ͻUZؼKN]^$눽$4"bV>%4"/ϳ1yѢZ|va럟/H&Fϗ.*y}?.ˋS^]tྕRQ^}NxRʣrlZb-=" ˟ ݜnUeu;&&ȆX`"N֯yʔ~9Zͳ] ސ)I `}җh9$KJ.6J76%%YAoJՕҘ5;ӋAkOF+%)t -}$T&0Ae}o7AsG!eB.tA1y6(frE!Ĕ_rSsZ}rg$Q %'gH^iaJyx .*J+ڤ PAx^Έ\#,7.2Dq&)U$!%5Ϋwb`Q^3jjZIԼ@4Z!/l b=djnzJ&=/\z*ij/AS8z8-0֪}vyAoл,ZmML&o2-Lfg29ٛLd4>LvM &Mα96y&ؼ]E"ȇ/Z/v\bȅ/ _\E"')^$)rI]"%)LR\)‹R\)¾E)B!W/Eȕ"Y/EvMK3툧S&Tkwv&c^$/zB?j!Zh.ҼK}R[<&%p7*Em}GIJ~95@ϋR?ˡ *B`@gt B˘ʇ|H/pde X5Y29LUzn\X1U[׼J܎8U3@M0'Uhl< &mdul9`93ɼk2;L96:69Ǧαy؛y@@vͼ\iTSxW"`e&幪Qx3|GžVݬ')vI7$Eݬؗ"J,E4yY}kUac//Y}m;tk7E.|*|@qlv@pm^AtڞVx5؝I- mϤAIV@>Mv@; D hw *RzJ)w|o؊A>祌a+nlPGն`ΪCV_5^m\^_A֛(Mz+%_qW\v?"iwqlwiew.˟.bM6t؟.bMf?4WdlVL"6¹o#K nA'; W.`Iĉm;jC71,r,Zvq%n9pnV_KB#$4n3uiccӊI-tM[]'mus@cM>69yu?ɛ%o }иdMv6q?ۧ/nU}W]^͗|y{JnJan)/H}eH}Y}|A>vpRdMo]=X}tۆW$lA_6?DVIg?(]"6UJ< SZQd^Ѧ4$m~hdžh|BH T Ispˑ0S?,xpZ'UJoؗWrFME3iìCu 7o:($g[48*ݴ֌8U /KM;]B k[HIaegYi=6y ()O8tg 4՚/Zs;Lo=䞥ĉ"x ˿) Y5&]iə+WMwvlv+dž}& .UtQ(yJ, V 5d=4# .D\ulR˗T8xKRlCH( `B6 23ęta=~̑!Vjґz)U|@J>{1?J{-ҙ쒕;wI :Gj(--F5IV+f)7-nLo*RԢu#N&1*){8V "E8"t e]*PTt̀<:v^j"/Rmf)]?k6d5]v)!uUgPBDKA'sxdrk&5B8a >2@Ev(EYI"$<ن87V+s%u8vROU-M7!A&!TVT3UWR?SM "U# !6˿Q#vP#tdzdr&c]cұ/z:| _ _$Ew=%)Z%U)wK~aWвYtध Εɟ碭m?V nE7/\At@{ D86@A ڜVAt@{ D3)@9 A|"A r@{ i^6k$հ1ԠD,ΰ/XK erӶ1(ui|6{>)ӧ|.wyENˋMw#6=Wψ|7/yyEhˋV_t}V_nw|sL~nJV.L&&F&; }|#x }|p{Gp{ou|S^p]'=\AN@Uk[PpvX:uhb\9cS~wQP`E޴iKZ|rݐ"ɢ/0gz/S495a5TXw&>]-nirQ@;7 (f^y88 xf1T^瀜ѪVcI2{>k]^).\c[څՎ|,)Ȇ䓈56TANy0nV2 Gד`!~[օ*'7 _i<=-dk2?m2;yi±cӎMαy/F(9dhDxFGڑrĬ`^I;7d l1-4YQ©v IζfK|,Յ+ӏ+RJSS:^<PoGD|,/IzJF G&!bo<-zUxmqB~ס)yui.C5+iʭw#4JڔIoӅK))& &2i4LNaS^drG)#ia%uIRFv ]0Pkj$4aWԎ=W,pmUhʱ>GEwWu1%)jtr)*h1KkMRmJ& Uc?&1^@mH)IgjKWގ;v.5ޗp̧6 #d%TC@͢D^dX3ϐv MuA/RWH}cSR^>I4TPd6N d:>K92/ @C_Y{\i >Y0|Maӱ)}A6iR(;ͷ5jtñcVuH~IGH\s\gϩ 'WT%S0M05~F $U\~:-V@6Lfg2d4LMdvcӦcwlrM_9v'P2|:%]Ʉ`$ːbtV3|[ bEdt>)mf/D3EOrB4{ cD`0PL%CA$X50[ בX9axR݅h7 F5k<jvHeU2rM+lnB3&堇k,AuMr6=z=䜅gťQ UR_cq "*.66E.9*E#H*Cjl7+ާ)&D6簝"x|r3H%6wI:`,X%%e3Od^plcslZ9*|EO/v዗kn⧓$E$*En)O"JZ"t2\tۊcWn7/]>|.7 @; 7qlDw A9/?A|@{ D3)j&] oA r@; D da)_FGˉԊ3(˿v2-"7-F^ܐ~ЍWrog;SӨJזY#H)盰| _#|$%$.IORHR꒔$%>IKR#IRDRD})"RD\)_+Et_XB:>S/F;@?<rKw|N7(bTظTz33h}߸Yp# 14+<dVp‘^`ש[~WGA~{y75jz<"J|: aNv`=-J!Ll|3¡*- yjH@G_^~r+ %.۲pU%zfX)5ˍҡjW'm=_X50di1G%^"\و}zA RDHf!|L%܀%eJ<&OSdu&ˮLMś,d4Y[ccsltl-αuӱñG$2X%C7 _bc{kt "39!K׬f7qTRm}\ǸJkxhJW8#`:m#L@lo[8™~V8RHPL4!"%l5f7QlFl)J׺M:N0W'& NڹMmSZb5VeCjE"܁`//va<ܧ@П)ܧsp삺8>݅e\ACGE'U:o*?=g>ٛL!m`6FL\,,dM|:dEy-q?"b6i\}TCL|dҐҘ Ldg8C]C4{i89o=[3_QMo{4TgSFRSkcUjl1}ǩ[356WQP/Ǩ6O\[C?@,B~ xZiv(˹rAO+}_=FVǯOModYpl}mزrl*J;N7Ѓn9uܻ)`A%d"lG;ʔR4f-jϷ7ab$t9Ag46;cG߻{<䄼=L yK 6=N%V%ߠүտ҄Y7Ȇx XCtZ7ąv #ETCqt svpYWTpcΔ_e2.j8/A&5UO#f%A"F2L/oo?;+}hƎ(e[4^"R Q6Pp)mZ>pf]^ }!B_гGExuulcsl]9*|%_—*I$%NR꒔,Ԣѧ~QWa@% "9h˜N hpuD#׌2TKP{pQGM s[ J >xyO36+8q b9%bi_>i wt ڈN˜㎂޸5M:LSP.vVpCE!RZT2o%"R02W#hKjeWtVU"fZUe3&i1lͦL]ՙ,OMVgLulq--αcslFJfYO_d0ЭYm)=7Gw&=f8lT HD9g~7$ z =w~/[+<~o4SbG ]YB #`pOoJ0!5;ʆ4{K:92GR؞\P8$|$a3%ë́s97qK22z {&1KdkLgYi6irH27nA+ڰt 4Rk}>'Q;v8 ‰PEslRmՙ,+W-O[[W _4|ɷ×%JR4I鷓?^}RD]՗<-8?^}ӶBV՗_—/qK~cdVɿ q@N+ALJ3)u@ u@: HV@: H$z4mh3I > .ü'2MY=kO@xIoK|&vxm3ʍU$OJ":h Yіk/l )ÉmD mn+HJSPO9\n&IU.+W>e}zSVwʺos ]}ɷ|쇭ꆭ;lU7l|Y,6y t.''OOY}8ܧO9m>7YC!@=8p)zhxM=f){穳k`,|asngWCMsYj˕crd1%SJh޶wvJƽr昌47qJI:>CT1 ݾVCp)"n56RLiuž/VFQ&'P!Ixdބ XS}*[JNnux -jC.Utp p7Ee(t$Ne,= x,j'3 hכ[kH{jw糴&IL^pQbN]'&m&~pcܼ`;%BƘь6'x}/ _z1@%S3IWM&MgL^9>ulcsl]:"|%_—."I$NR꒔Ԫ|QW!J09Br vDCEW%EUƱ13͎ECjug#aL0 ۍ9/~y(ooy/iSTmpRC _%.|2|-$6܄q(/osEBcA|'g. %8>rHkF#\Dۓ8H*}!Tg)#E:M8~r%_2[KNnRx̃L B.8b04)᮱ L@4ȥ>6cQ> N5 ϗǺPtJWO )SoS_8-Pw.ﲸ,nA[q>i%߮Yv-߮!MS8 H~?"P"]:v.@@wYX1NuFp#4꿎虺GhOhcc.[[u|l}zS.>{и{IhmW_/aa[ [_7_&˷Mޞ/A A} _So?S|ùuƗjs_))\o^y9 ꌔ/2if4Ȃ1$b9fqڦmjSTcSLԽ31wTg~\AnȌK<@^" 'biŤQ*>6Ex 14>DոvF9uk/V[ -b)p;io,LkP~oK(oo /WgعVm;ng**S5x^ NzHG*'Q[ aZ/ _g>5Ym8ueʱc˷[cұSh lp0 6̝3 SxlmH56DD@F}p^#z+SMVbN4:1ʡ:5s`bub"h ]OeƍS{r Btԯ%)-gPfAa^ wBmy)X[Ĺu͜8"rsLRbt ~λLyBMY@bP !PFFboS5)O%|e2x$@S@MuZ'X Rp29 pk(1$˾{m@B1-}\Nm,Gِpg(1&t(()i4RFFʯ!%P?1[Sklsh)Qa!R5u2gP(BrP#'d}j|dq&cSǖo;8֕c—> _%.|2|-JNB'MA[R|.nB;|]&3YwMg>5Yɺ2yױ9:8֧αe\Rt]4^Ûe*aN:e>e7c#v%hڛece=Ԙl94䡅T|yPV2BvΛ%F|;|Cms '>đZMAt zIטFjh-";b3![xk!W.-XpVg4Ljb(C*Jb{_S?}0ӈKҰM]Z(=.)P/ԌHA.g@YanFQ7qH$M5G-5z)=5W^OModYrlymVغrUҧKą/YUҧIJK"Ri).8K|Rd7| _M[88 Hu@VtwZgR ٝI_AA @9Aq}!7k\Drī0ߒ1/NնN{ ^vR2S}Q6/sj}l\B#4Eną,ap;S1*H$dn4#5䤑ך.}D归 )m0zuiV\J*}k,OOY}NYV ne]wu nB[q<i߮Yv-߮!]S8 H;"P"]:~&@@vYX'1[NqFp#4꿎虺GhNhcc.[[u|lyzS.>{и{KhmW_/aa[ [_7_&˷Mޟ/oA A} _So?S|ù_ HWgg55kB~oֹpEDCցrr^ x}$+= ס5qߘ!rP'*OA0|qL|aJZpƂbsAhr]} a xn*Ow^NAYïC:)|ѨR$T*@#N{u;έjF* "87cc7tEu F}+H+/-E#W3ea:ś, ՙ,d&3Y6Mc±9xօcslqޱ9n:~8 __—%%.| _×K>—KRHR꒔$%$%.IKRⓔ$%IJ>+EdQ+Eė"(Eĕ"JRD7K(EGul 0ᲿuiL`qL?@0sIj)Pl<[GRE3䁊m~6i5ÈHJREոjDdf6 UsH&9.)qvJ%o-5?Y>>ئHxhC>JvwɅ l nj?7r1`gSh=xQg.k]B,}vjc8YT_1ܟ/ϗus˺;Rׅɫ+Ov &>} '.NyyOv{]p8WoVnsJq4~x4=;c3)S9ڦ.:ea:ś ՙ,d&3Y6Mo8օcsl V[csltlcS_t;vf3 ՕiG (RiD2f~nضcnَsЭ<zdrO91dpzh2(u' yGJM\x*?R9( Sg n힎'}k`s9ɲ0YMօLgzՙ,&αe[c±98V[7[KK\Rdą/uK|d3|_꒔,$%>I"IKR⒔$.If$JY"J.JuRD|)RD?Jo&$E!?"NqJFXRZĮu% ߑIGQr-b@pAr"9MуL۵i: x{:U8)SR`fq豧,CQl}qnnVS +Z^Nlã9շ\^@|_(?Tp769RٺP6ep;S唭D0e B-S'.m11;ř,&3Y,dY[w[cSغrl qj :G W}vά |~Iñ~a}joQ`6୲(hI tEbFZ G:}d[ۨ~$-8UQ[0}cRq7} O9։0v씒1pe@ML]|~Pj4yc*2d>7q"sMw{)gsn͛BE}q7hgb+Gse`>Xq(XQQ1*ۅ/]/qK}Eą/K\? _?$)}Z}K}Rd3Iϒ{)"O/yX}/Eԕ"YG)i׶ɫ]^V_vU[!?k+vײ҇vRtvq%m[K{sZ!=jZ;ZAڞId5RS HA u@: H9%7#g+Gg:n8V5ŚsAw-H5T'u/ 9fb(Y'1^C Z"##d|p<""Ʌ/qEБjn0I] S);eSVwNY);e.muև|m?h%[ɫ3rqmB*b?&4.}ݷMh\OBn9_և1ܪ[ey8_jغ;R_Η|y{2s ->}mA YAp:OWp.!ܷ N݅p>N}G+?uS+P+Xrf Hv_.0{)F{_9"0cB *Ůz7 ])cŷ#۰I 5v7:غ塵@]]B/{Wj:5rQF-,eՠ##{(C|]yNJ˖^#r n7>X~;K,u mrvɆJ%+|9vBqhIuJ7;P!bM jB& 8_mֵnrq)dL֕+֧vlu-K>!A͂SGQlSSW)'QpNmbiA/b weN!}*v2eٛ2E6pJ#ܲo  /h9Mݑs)jO <}A䑜~u эCIg)2k{ c.pF}h0ET-q $9KFmwsE Q֑AtK3^h9dmN9N"PíMfƁQ؈*yA >y CO=ܧMO<ܷ:e}zS^pS|ù?82/22o.Lc[ωxct|pzv_H1wMS!y+52ZkWywW要ս!έۨpC?d83F&:^Ԡ(|L~&R"# ^ W;"zM:_mq%h/Ms|LU9*PyVTڨQN*1v#53n0- SX\\s0Y&3Yɲ0YLVo8ud&sl]8:Vزpluα;8Mا%:4%QTDŽ NG|}x22T9iAHP`$?JDcuL>RJJ;#\Fg"?NCS0ξdL ƿ[ dwh wL)MĺaLU"o}gV+ǝȃ#OP<_`*S JLF=biB89L FH1")qP w ~S)B0i*ذ{; PQd8[2aFQ;,Da(|; KoP&O _ISA| _'$%$%.IORHR꒔$%>IKR#IRDRD})"RD])_+EdQ_iply߈}SS"dF8:)<$}JtyŗEb&M5>,c> ·WϪ)s]Ag95Q3%KpJ7&0@]6MAhSbFSZ=@˓$J8^˹eITL o=hXT.2^,yqmq QܦPRR*-BdBD90Lb[%Mg,dyj8eecsluluO[cұ9/xf}JxT]bqR.~_:J|׻ ʚm.6K,5(uJޓ&T<g¾cۑ (fxl䕒Z9}.$iQ{6#f1l60pa{ kj#LI7j!:<2-D_N _p$^#i57\)F}&z tjٷwg?Wa%>IKR')uNY<̼Β;S{Z~ c[?҄-e҆7BNӗ<Gb-zA>v/}pE)՝S);eu,՝lSueue}  /YE ݯ"'t9Y!`{@1ܒE YcU1E8<U\AF8AB8wYK>$NlԱf,1"P"`ù$4CB6SQMШ L]uF]2uزcV|lyަNIN^!{>q҇mB*b?&4.}ݷMh\Bn9_1ܪm[e}8_rغ9R_Η|y{2s ->ymA ]Ap:OVp.!ܷ N݄p<#ubL8F9ԸA0/|k~by9|2go&VBStvvR&4 (|+>PG4WѬ1B;pVJRMuyi05:yp6|Eo~7yEa!B |a+\gÂ,H~R7; L%bbT9ב/AGMERhaM6jl3nw[o|^ 6[pEPk4'8bf<5Ym:ueʱc[cʱOݐ8w}P.8_sy~ED8XkE|>Ʃ8|=}P] f*d^f.#fI!v*켄\xD?P sqlkWfo5k}"jWkuSl:ݤG @EL('ȋp _@QU!&>">赾"%7UbځioAc6.*"a܍\(l)0S<)xђ%1Gpn}݊d|i&ypIFvgyE/(SqԎ`56c= 8kqL0 sK<|N-.En3/%3P< Q9Lfv頄]qwpT&vja<0ٸUq%DL@^PPdƹB&AW钯RC4ѿ5Y,6Yɺ2yԱێαu؋%O×|;| _ _$O~;IKRLRRD"RD])R$#@q nh4Z2#|# ':Dh)ׅ1(I-=/jHF=|;=f7Y aZRZ3͠ptSpoM,(߇Fɔl72~` 8xV6">4!1SQaKmd&1&,7LQmR#&1^u=pQ3bp1sP<' Q{x[ZsNO`8n)~쌒3i2 S3)E:4CpKS=aL]ՙ&7Yɺi|[|kM[7[~?$)eryUgo#`S3;wR5Q˕82! Gۖmcm.\9,߸,p2v>soRohYm>9Epb$1s AՓe9dA_/8Y8'Krm>5Ym:eeʱc˷[cұK/vtIJ&)vtV<-EۥRDWȪԧ~\Qp.Χm~X9ı _ԅ/ _v }AcIj@x H @: HARds&%S HA q@8 HR9+oV aOI\%J`} kE%b7n1mfo\}jOiCzƯfSdh:xa^2*s:p| Uapx[]jWum("^}-it?3>qDbP2/en pƯqEHϴX)OY)WwYe]^wyiĖoGtWӼ,˫g^^!O/vi߮WG-ҧ@<A D8AX8!YX"cSz>Ljgc&@~"ШO ШШ(Np:B<%4CBxB:Bn2u'-غV^<=e)h.qW[Flv^?"*/Ӽ,+Bg^^T_oW_1g冭tꇭ↭9lad}j~Hdq@>!'&?~)'>p:O6>p)OyO@ݿpS|ù?9+9?K$42on%j/*`$㍍}|`O1RYYNj@[I2싅Qh?{yYrnn\;w T*Jmr?g)+۩r?t9E'Dsm7[5ny,8#_? R)s|Pm6ɳ M 8'"uCj&okU= 16vcpɺ0YMLVgxř&7Yc±9xǖcslq-ޱ9n:|86#\{o_M%pqכ [ֿ׀Rh*?E {A+LÄGȷ)z̠{3/Z1EQ쥡cۚ SCOb #-X]H(JwZ&sdz\tp뭿:+b-: ܌*:͠`<}̙nD`Lj|!Oh>Pֳ(-ߋu߉R r~1eÒV|&~U(7ַ+{E Wd9B'j2j"Pcy`ppIh;ծ&W`mn7.-:Xo]pv0g&֢hm{H%W$,^2DR,Q n^ eF-1H:ܨL&dq&7Y&3YMgn,?1օcsl- [csltl-.|"| _×,—.|_—n/_.I"IKRⓔ.$%.IOR꒔n&)IJ\)RD])"E)"QW/Eĕ"Y/EH ]E75Yɲ2yױ9:8ǖ-αu؍sH '/%L&]|ƎT͇a\/Ov+*+&<4ur.x  rDާH[ַW% NqILSc7ЉI6 %EDƷw-s;Sx+bzo!!%lm"pԋ%utk!$^Tc-y\3{ G/Eh-49;r[S?<ҫt~Eg,*͜v&=Cʁ1VzP O/%DDM"o \|MsLLVo.LVg:՛,d4Y[-α;,[csl-αeӱñ]Eԇ/Y/qK]ԅ/ _\՗>')uIJ7$%ѧ՗>ԗ"J,E4yY}kUac//}X}m;t𵬾aԅ/YM{ C h ޝV, ymO+AVlΤ@<gR @>!$RA 6\%lp#Q;`)F?E3]i-/\"!a.޵AH| _ys4(QdNcgJduƿ16<܄V/\2n3o/dlC3~k@dCf?4c%@ps p.!}l#1¹!p-8!,q,YKz8>ػ%[iS|ly&''9yи}C6q>}&4'qs /nU}}v>/o[ [e9l/p=R_9Rp< u@}Oܧ+o]}uW nBKO}ݟl2bH'(+Y:5V GC z-D6_=,wqnl-dI:rBvHE9_~u%$™ ] (bCSi$j#dA7"=O{p6D[rxq3Iy5{y6/ޣo7Yst"&z Bv,F:*;o,݇^5|s:3ed|zi^}85 @@H:sEB !KF~ЄN5!q"~EJn96wJBg< Z щ%|R1\M8pb&tlNpydc<>b7Y6= ~a+Njy %C8nP~;.{`p>gM1gb]u&J; ,!Pǰ<]*6x\Y6(0SQ&B۪aZy>$ %0P>OT3cx1lXr}tf &S&3YW&[:~۱9.{io/uK~!|mҧIJ%)]&E)"OKv)"e)b5vyM(9ÛH[ 6*1QrX! dAxR.#gSrqUm$.0p>J?>,\˱d JHvrI& ؏2] ܨȏ&9D)҈fg3v_Km>M@AΪ:m$|3d“JRD@6ͦn l".=eNs>Q0)?&r8Xӆ l'z1{*Ws8'8y7MVg,d}j:eicslulq-O[cʱY=xHR@w</T_<o5J0=CD6oɕkgs(eʪGt9;,^m0JSh( ?#3P"g0G?22{H(]i{uTSuƭr =M.Y<] j`pjMZCus{kMmPɴK-Eۥ?^}ӂS]p՗>m+m?^}%.|nW_8: Hvqlu@ ?B: ϤA;ɿdAہ%YRK`/HR 60%MR{RoGzLLq9\.t#S?0ےm.6eP}H4nQnҎD.A?},K.}8 Ǭ1MyM|‹ԯ.\+sM+)OY)wA,߾.AM~;b˷#?"ЧyYq<"B8klvl" E8Aہ]:Ա'vYX""Np#4.SQuFGh]:BvB.[[wcSo?֧wY}؛-ߎMBv^omvnoW_|[ [uwتnت>5Ym|y.$=ܧ]Oܧ:O|qOr8}o,8WRW) oiqtYL87 +FYE6ydjcJ M"F\茚Rl\Mf)2-k l9[FwF΢`fGmcM:(V$ 8ڠ9H86ODnQ g#>W:0sJ' g)Rɳ㾇^`D`[q~zk9vCuQvjSua8՛, řd&3Y6Mo:ǖcsl- V[csltl-.|"| _×.—.|_—l/YzORHR꒔$$.IKRꓔ$%IJ>+EdQ+Eė"(Eĕ"J񥈺RD6KzjO?} @㜀#Q6hw,iE=@xio8%};}kC ][Z[\m)GLT*,]_RN8T _PA%"dTBnqXXZ}I_=TnL$؄j,Ƒiw,%ͻ{SO2\rRA–#ad!r678[ÃL}m/KL%FnJfx1d/yS>uuBl bM/iQ}xǘr$foQQM~0Yɺk:ud&3Y6MVo8Vز[6[csltlpteF6QaxA3BSYj/3k42>YԌs)րs 3E7S8Pg9nQsL'7' f+Ȓa0!8iJ ]\1'qtiKl 6AoƜA֡=^ڋuq#.=MsQ%L,R6/)~jbr2B0 ʵ1%pq(8wT4{ Q${+qϛPp`w4k`B}EA?#F9V'Rۤ1א`.LVgxua:ՙ,du&asl]88Vغplqα;:ǖMvKK]dԅ/uK|Rd3|U_>IKR|R_W}RD\)˗"JU_k. Ε]E[r?_}n՗lW_+ Hvql& ݝVx H7ݙds& u@8 HV@: H$©f:aoc@I_NPr((vGqƞ=OƩ7|Z~nkU?VZqͬqTpS5e\\l\ߘk8?K;h7 q1sM@wʺ8eq,eqNY)?eu,eY%+ueuwY7b.t<@w4˫͟gNj } "]S5 >Dd@l"Z'tE"-ĉ.cdE}z̊ШNOhM'4.Su)[غK[)hdY9|Kv +Bo}-}KhE^^ o˲;E[|Y7~#u]tpnAp} Wds/y̨7},Y?r-jyB\&~(b;Ճ ^tw]jZ.ҫg_y\˼x ;#+7x\}nͼmCsBZBn˦svhZ~,EbxF|'{{y@5jk+W/s9;~N)μ˚OF9Js4_]o'Fj4dVF0,ps1 ׎[ H&q-)Zn.Iff} K֞~d}j~du&cSǖo;8ǖcE;T2u EE))+K3*#navRMji.SBfaO6)-((c&)g1Nh/y&HD-Txߥ4Pꯧ"lv@ 7Y[:0.aqrE*~9)kh}܂8ZZ3H`SwR$(6iΫFt &$0y晧epsj4Ow@3F}&s4]'_m22NOK*0*l^-a&r*:)8rbo3$U99n4h%yu}2ʆDFó WWOS'ƦμQ[1H-bě2nj[ F5-|^Qr}} pH3m'f^N)->6mUn&R,Wkq~k/ 0 9h gxb75s ^I#I5mř,+WO[[W _4|ɷ×HR4I鷓$$*Ei)".Eĕ"*Em hWͩŽBŢV$BgINэpv3qH_T>!VhN{+L#̖qbŢY';g|qEpB(͗qF\2ަ OL6PvdOi3|V&_Xa``EhZK8`VaRH"0qW_hD)+ F7ٓ&b$ś(7 '(6^HOOk'G< iB3_)Gce­46<  OVa  gxϰH^ HL]ř,OMgLuluαcslL/US]k 5uʻTE"뚥^BO[jkw͠'^lot[9UO6yR 1!_^cW/1 Q Ng+yWNy㽄RZUUw Řo}ŪbWƯN+|՝,Oyݾ,..B[q>i%߮Yv-߮` .)?mԱdEE 8""]8~z&SQv9#4z:B2u7زVǖ[|q>>%4nGlv}~;/6p՗|~تn*VuV͗m˛@8 Hv q@>up}>}ۧ}ép}We9㞈o 7oKo?] 2jHy[|coJN4Xun"/G'E(csoOm6 L3-Zσh=J.[.|\CGE8 cgt';h"o[G@3x\_n. nrCʙIOzJ`V#KZ $5+PPQϛ,d&dq&3YLMś\[cwlY8:[c˦cˇcGEۦ0<廏vGнyvgn}3gxwDl-/M@Sw.dAP~ O`uJEIpJ:R4Bc(olduoscj/󢢭p48{2b9O38q훿`x즊 8b17Wެ˒inrXf|bR{?n4`MM5j凯lCD1&73͟g-et:ѕgJ h$!/le81Ӂ1JjQ[~9JPBOIJ:#>ŷ1T\nmZMTsxSs/~2sȗрw{^91h jlFLڏa dpN8:0đvӖԌš2r%qYN<_Ƈ_'Lgxua:ՙdq&M^nv-α;,[cslαeӱ;/ԅ/KK]Rć/uK7×|:<%)IJIJ\')uIJ6~$bqW+Eė"(Eĕ"J񥈺RD7K(Ef9)'Ç#t~O wK40>"8Z#՛}vsy5)8Zu%)'C8PW+q<}KХEx&zOMJʣE>D8l|pl+%mxrl#*RmSw;v7:kJvS'J"0ϏT'ˈFj/4dh^F,!MWJ鶷(\]|8<:)X/*'ixՙ&7ywױ?6n:xVز`3vCh(9׏?heKjF)D#x .i3ņT4JѵK2\)[G~nBmTǰ]<[-b{!߱[sM?N.T>z!$1'#wٌtۖr;8)ec{)>\Fx6ҽbplvs[ruE{e*7dap퐆%BtL^zh{7YMLVgzř&7y[cwlY88V[c˦cw ԅ/KK\ć/uK7×~E哔$')uIJu՗/Eĕ"|)"]%&\/ul]+՗/_}f z3vg@N+>6nN+<3,3?AA @r8n a2Y MZk5>)l:Xed|Pbj%_DT|4 <a 6\_y3 {+B= J?kVSVwOY՝SVwʲyOV쁺+PW]we.Z "b?".j@Y;Ez){p~"XnE8?6n"V exl~qbpEpE1e{Ώeě?Oh]nM P>c[vi8me,"'>j.Q{Eh Ov +B}tQ}p~V?_a럟/H]&FaZ yO7?SO>ueq+P} ˂ù. 76 UB^9}>>G~J?BG-(KjKOˬ2qS_Mk"5ݽjhE9>&ZOS-EP*d (,5<_6B{ߢB|;"TV[VrS3j9&?L@6


^P l&ET([J i|}dL ǖvlq-+Ǿ}v _>T<`]{{2Gd8trB|SWJxFO)+\FƩ݇X9z{IRp6*&/Gx%[y>VtuVT[~QOc@O҆/%dSdNhxG\PWroܠ/LI6g ctݠy;jʡAɜj:AxW ^WMN,7&\~3cYngʆPZ|۬#3f3(Pд|fȡ΍#e:M)ZZMg`Ş ñ;lh qs+x@H;SXSyL =ND-`>p\~{Abmf8'r ч݄:Pf82|לVx&6>͘t4)Q r pKv~ѮW>Wzo 8pK6nodL֥ ֧vlq+^/yK]eZ$)}IJ\eZ"o"JY"*p*o2BscΦߦd R&υ, r $b'_rrzvd]ʃu(^IVS1wZϣnCS*&~X(v9v̑$duum"Hڒʝ kO1M7T^ugBo<"gΨtGz!W~7me2qAۄi3v1[ƚS ?đ|iQۙ2!7@qo.rnt7 zVCW>\\tVy6>Zy1 !`ř&3Y7Mo:ud&slu-αeӱ;8ǖMVؼH-NyB{4ӂ2WL}BCQ?~RūʉL_H|dq(wceEE4OJ7c!!h%HHJn2hyB ǘñ$2L0O9 {U-ew*֍Suԫu¾{cy@;.mJWrJYU(8 WenZk\e["n 3xKRGQʰ֙Z@i-1sL[Q! bpngxWDhWk5@%/,OMo,d]pl}mغrUKԅ/YEҧIJ%)Y&E)"OKv)_(Eԧ~\o yVȷۊc.|KV_×%K}RS HA u@l q@>!$B=@<A ٜILA@z H$Aשu,OOY}NY. ˫O#~;b4/˷j@՗>j Y}-jlyZc˷k HARdӱ)qB'ԳıtE E EO1#EE,`8B>%4CBzB8Blr8)Qu+L]ǖ|lyVǖM>x>)˷OyE[8]wY}Wϻ4b#yYev^^g쾿i%߮VcKݰUΗ|YUݰU6⇭+mW#O$O>yA }ӇpxOܧpxouۧu?OyԧN6sp8n( D<_2yqǑC/f+Ng",-"qn\NɎ#񁮃6M^%Ge98#vcԯHӧ/_ƝXPUQ!gP::q6L }p LgA,qYZ/|sRB݇i,)^84PwΈ ۑM|o q4fG|.08!a[gs%\|1?#]EOy7Y&3Yɲ0YLVo:ed&sl]88Vغplqα;8MVاLFJ2#bXrLm>)[Tdȼ2:Jd=d<¤!9+ٛxl{@bGpDFS@~~H'ƥO(]?Lq LC3 lG!,Nq*wͶLD)8<"'GTL盭}A&f?-)7t)'stᒈ JIt*G"głR*^JKB*Wx2&!pdG/cL\|*Pٴq3„POPc,ToAkG[ ԸtzY!lf(sXB&ȤM&VΉEK٤Unr ?xλl VVk)tRZae' )_eꬶRA'Pn-|~CTM)55T aJl{&6=To/Q0Y&3Yɺ0YLo:ed&slY8:زplu-α;:MV—.—>|"| _—%.|f%)Y$)uIJ|ER%)IJ]$%>I+EtQ+Eԗ"(Eԕ"JRD6KWG7B/怆@/7M(WP܊0N7kD\s~|)!+"ڪ 80F>RR1BLg,dyj:eicslulq-O[cʱ/ITs<5Ƭ2 7|)MS|?!ܧ;rOHޞoԏrT}#֖T+-IoJܰq0hJcF<..Gxmڡ(yJH|!!Fg[FIWSP>}M*ـMWsdߴGG7]HRAXm(*ExyI_p 7*}C*lwjqFr 0n\Nfq(Pj]~xIs`Ʉl+FJ0Y&3Yɺ0YLo:ud09.[cwl]88V[c˦cwlqKK]Rtԅ/uK}Rd3|GrIJV_%)LR$^KV_Kun"K]՗×c/ ym ]؛ӊ%$i: Hӊ͙@LJ˙) @: H$ԹS1_"A'کDbjMA61y#WMq|ed/ qn6$NH2L 9 $|1>bɒ9 &GJjH8"ٲ5W$.}jۗ{9?@Dj$Z7+NY,ş,NY);euş.+..+.SPwu?AM~"Ї,m~?͒EYU^l,}"ív%D !msUc?F8@<Nu@]8,q,YKz:>ػ%[iSn|ly&''9yи}C6q>y&4'qs /nU}}6>/o[ [e5l/p=R_1Rp< q@}O'+o]}uW nBKO} ݯ܆s}EkgPmUmPixAʢ~|9eJ ,tjĭBS|=I?P0U/kF6*٘5v/_\2sZj0%^EpJ뱆?qo0fp[؍_DF F’nnhsSms)6 aV+v-? 1]?t T[~}dY,d&du&3YLMdزpluޱe[cwlu-ޱO-P֚_VJMYT>$Ϝu{5mal $:ٽm qmFi0U_&ͥi*L<Η൏RگU:"li nw bj`ZKs"''9*SjdGĩ˝O^-+*4U+)ϊ\@yS ?!e Gƻ2qlDP[6U7$?~~?‘'WVޖ1RO}xzq6P&e(5K#(_Bhko (`Ҥ:UVCk(H-QN 2<;Fy_*BX929L"dslҴP ^8wͳ x?DiDqS[kPON]BhDxMPTuwf86nFP,]3|W_T7o06>[~|Jqc:ޑcb5Ѧѯ d 3Y&3Yɲ0YLVo:ed&sl]88Vغplq-α;8MǖvKK\tą/qK}t3|GrIJIJ]t%)qIJ|Rd3IORJ]"J.JuRD})"RD})rT9rh-í:wŒc45JJ}$OZjRakc<-<ĥcubU=aL\/=SjB0kFAv|5yH)9"?r!4"E}B}rN:'$XZl :ۅFL9]J/`#rVrsN9 GƟeU"Z*o먳Oeq2 zW6R@k)=Y5+O02"ФmgANiofȃpF嵂$w3Yɺk8Lɻ-αuױ9>ulu-K& *'լ e+(F*YZ@4nq᳎FA#\!8BT7PK5y Άz6~-dy*iLŪxj#3 4W]R7ķ#pZ%bxɲ-ߡDZ&0HQ۹"}R3k~܎k6V@Aַr#;"U*u]NÛɅD6lL/16_t|/g`KPTLiNҠx1J|+'GOtEɆ8de\dø"Z8mIʜ sV*kFy3Y&3Yɺ0YLo:ed&slY8:زplu-α;8MV—.—>|"| _—%.|f%)yZ}K|Rt3IORJ}Z}K})"RDV옼amԟ;aثӱ7ײ҇vRW!ctcN+@< ]N+6gRK HA3)u@.gRҧ@>A u@8 H:0Ήvc)\@2q<RC8UtN9v`ȕuRG+pVczUѵ"uH5yct#+wYIn-W3?aJe+ {_OoSwOY,ŝSwʺyOyUwuw)˟&tdC6t؟f"Ї,*/h6pK>dlVn\B"F8W5cs C hd,8"P"ECz6@@,MШ NqF]q8wKB>$4n3uucc늏K[]!{:O&9yǖ|mr.7 Kޗ<}mW1qӇmB*/7p7ޥZ>f5b[~dyj|du&cSǖo;:֥c#Iudx3|ҏ`F{Q E*ն9!CW}u) B!EALHY_ + k/t*fUe{n xE!{Kz|eo/?‘gRBs܏;t6xƝs4O"qk6xLHq udAv %Wt\5#)J^igbȒBgES%6sRw7ƿad[QoeL'FcK=h{@^䥄<`ih:i 0+ݓS5M!V)AHZfXDӃ W$;$>zSϬ7RN*W|ܷ@rWcz6L))qS!ʟjx"NtpłnBx:ym<5Ym8eeʱc˷[cʱWK/vdIJ&)vd>-EۥRDWȪ|\Qp yVȷۊc.|KV_×%K}RS HA q@n u@<!$RB2ҧ@>A ٜIA@z HRAĥ=y<29Hb^#nDh6PN Pd-b/k`#ENyQ;FdRlNIo!OeF{̑8 } R&+rR|NrގdTo>7#+]hx|W^B=tӣW\;A?oOY~՝.Oyq]oy[Flv^A?i^oՀF2KV_k55<5 $O }ApX8YX"cSz<Ljgc&@?XШO Ш(ШNp:B<%4CBzB:Bl2u)[u:eyzS^V?Oyq]o9./">툽"4,bm^֧yYWϼi߮VcU_? [|YΗ[ [esتօdɫ y CO=$M H<$ӧp>}>ل}S>y >p9+ e)/V&|ARTa. / Q1[@F| CJoĊ z3n.ɝ+M ?5{y;MIOm"jeP%Lэ{नF9p'&ņ8gCNlBUTNˉkN}u_Mɩ6↜^hX-P 0jS#؋6ԸL9,n Uƫ0%㉄cJ`,LVgxea8řdu&˦Mغplqޱu[cwlqޱWwCGn.˧vMD"w+TLY0xI6^Z!zN 6!qD{s*F䛾qPeIKRⓔ,$.IOR⒔n&)IjU}RD])E)QW/Eĕ"Y/EX ؄z$ς 8KOiVv/Yq0Kտi8U p1p:+O6IN\RlOI. p`~s$[Rұ"c^p.n 0)&MmMK_5G'TśM<#XbMUG u[ycPQ?PS< *quT[QÖ)ŎS24D !PrND,R8{xXI̛FӢ"'$6Ah)LRTm=>du&ˮLM՛,d4Y[ccsltlαuӱ;.Ǔ^$t@>2bpߏwA;[(%Y˜}훸~ʉcij&a c1Igpׯ,Brr ٰ#KiG۸y$$&*TڐBQ:kTp I!,& ,@BHpfxY*x(s=&3,q2pﱼ#k5'+QJ*3פC 1u8c8)%ۀP.6xIKR򯫾|)UKu/5Y?_}ɮcˢX9t7|}k MA;@lN+<31LA u@ q@: H?LOT=ABNdTKbgɆ# ؐ\Krzګ(GT@:+^[piE/솿-c; N;ȹSDžQ 2qƥAs);e,SVwNY);eWΏ?ǖ]ڪ,NyE[|l%'.FYD7>%4"/ݷunwVJ5o{4wc&mMdRϒn`y8;b)>tP U>lѲ.#4pwn'~|dq&V7/YqLAZ\:$ɧp'ZÜ /K3pk@ ?_w*F6&UWm 0E *%/tJ9!|pQB5yҡaZ띌cĦ-EۥRDȪr&_;i?uI`2~eb M~4U09-l#RG!rtSqPbxcOgH85 ô 3v}v{}'5v#"p zeenwA樂\;/ $vJGD2͝ɜVPI丒~?s ?qϛ.GgBaI*c*4Dxtk#{VpOw<5Yɺk:L֕ɻαuױ9>ulq-\^h T<]H5"I|{i ƥsynvX j-8?^}ӶBV*—/uKDct$ q@뀠TA;R$+ r@~ hu~ 9pLVB㐸—Y\/jfx6ʻrk rCZS;_`)68xƇoP\WDW\C7e%v!7JJ]qD?"F|Q{O;H [W4.Vu,Aݧ>eq,Su|..ӈߎ8@ev^YoW_ ` ܮ5l! E8Aہ]:Ա'vYX"P"Op#4.SQuF_c#4.SWQ~?q|lu|l)Ocӻ,߾|]BvoG}&q;/˷6ow ]}ɷ|ðUwꆭ/S&ϗ7 q@A }>݅})˷O)S܆jşY*a nK"e&Ż׿)0DE ~u ‰ziG0bVtRR%v aXК .hnN~0xwK6 Dw8REYr U9ԯ1_8kao1=a\7rJ\W/\W~K2S ˽&wbkb׮p+' L]aIea:ś, ՙ,d&3Y6MVo8օcsl V[csltl˧ mHrg::ڒvwY ŚB> ;`˗:Q>jz [/$+qK' ,V&M[ϼ>WNlEԌDcy#_tj$^&;^"U$dw%]ݒf¸uD2ku >?vP0M~n¢]Ey ?&9NLg2B< TD Qv0ܥPRt([pgI2!%%Lr&H^JցM7T_؍,*R:2zpeB/"6 /mg4;Yp&ijLpRFjP}9Ov1gg_hC"ONΞGx PRi CI U7jv:R,8(j<1!)":*uJײڭL'Lgzua8ՙ,du&˦M^e[c±98V[7[c"_—%.| _×%K|ZEl%)IJIJ\')uIJ7$|)"Q_QW+Eė"J,Ezh{wn2oZi$zd R DŽDK"~ 6ʲ<>㍦𿤹 ^DT5l>ra\)1M9T/ϜH>f#U`9IJ` 2 bFAkV&dpޥV6 DhS6opjg\#[3J:\rש Wˈ9 c[-0ˈh]uV "w#h!bRmd^p8lB [JP_TN5'[&7Yɺix9:ǖ]Vز[c˦cw]Fn KS`yXZIǻ̜Qb@: FsDDψύW¥VdxB5U-GkA5bGM[>yP Z}JM~!s:`nRϛc*2ƙRnakJ+Qf-c[A aʧz* 4RrMgڼ^~eYdԿ@gx#|;r9aLݳZlqs?C'@I enUIKR|R_W}RD])"˗"JU_k, Ε]E[r?_}n˛7T_+~7q?ߜVy HwgR͙ԟA ]A q@~ ș,_u0Ԕm 5v`2cm ~8Hb/^i݇%͗ ^867m~G3GNiŊB_03,\R7r@N;\?*MfF,\!ŝS);eq,՝nS^9+PW]Vwe.]^1v{YDtY;E^^ h<@wpVc"{PwEB8Dt@n"V exn~qbA]&7c pzlr82L 5>,TίpLstXGw#8<#t[= g('(\ӌv66 6$ai4O7Af(d:t\75\ sJE+D;p1}h, FNRF@ *=0'>iV`RlZ=B7; kqPGyg*\#6unF _0u|@->!׻J&16SQYa;3Iu#"^"e Jb,v_֌3+#8b^u,* 7 %j! _љ;L#RHSZF"Vfm|w`Xt)ʙa d}j~dq&cSo;:֕c—< _%.|*| $3Ns6V>n8ALA?` T($4hr+(`cG+}7Q w18Lq'S;p5ń )LeiĔ'# Qk:q@G,׮oE瓙ze<湽vj`K~ [3)-uHgp \f-9'V﹵7d"84 NqooN<@1Gx_*rO51~E# 2+%j%YNu?~0Yɺk:ud&3Y7M֟cslulu-ޱ9l:ı{գiMxS.Bd[@fy^BG/R@5l=YCj m@tA958pXAypZmU~YkD'< K7\z?vFDA<,vr!>1/ʄ9L s;J\yE4pDC4#aKRa꫱rIyA"朏)WG(%^(GG7 V8e\8ug ~Ex T(0*jd9顷z}xʉ44oeGmK;ȶU|0a;x!ػk<5Ym8ueʱc[cʱWK/vtVIJ&)vRdV<-EۥRDWȪԧ~\,?1o }VۊcOO/}X}_—l/$O yAc } C H<$ix H$O yA9ҏ)$ @8 H$RĜԭFe`3KA|O!xa^x^9a "xC6BRQfBwBQC \2ilfV 6{[ nVNa:2ߛÜ~O?u۹?浜EEoU"3>c.]s=4`=kajugEl}{DU^֧yYW忭i߮VckQc[]cΏ[O }ApX8YX"cSz<Ǩgc&@?XШO Ш((Np:B<%4CBxB:Bl2u僩-زV^<=e)h.y[Flv^?#"/Ӽ+B՗ mW#AӇpz H$@z HܧO>}} VOOY}+PN}os8W8 &|X[仺:F,jG^56^͢%(* փ6n8{Y☉Svhsiژ|%#sF644(Mρ(K|LA7YQۍu%&#چJ1=Ar H9ΕҨZZPXgMޤf˅{ 'g[Z0yΑP(ٔ >RQ{X ѼVPe)ƭq6QqZB {O yem>5Ym8eeʱc˷[c/861|1rЉc*es+O_n@Lж0Mn88oe=fxރ L GsXdRW1{t9nun['\0 TTk+r`+`<.S9\ޓdl'X&a8"EyQfjrEa.xhܭH >L3STEmoDG{z. v\WJo9>K?N <ŠQz9cnr11T?mPd|P$ zPd2)hӋ(SnřTDmK;婊P="(=RqA1$"F5$Fjf\dEl*&BNo/rB2/]ox/ "8Ә/T)naܸ4zkl dCi\pA ıA y C H=$i|L+$O yA9) @8 HR-x-C216qsZ' 2b[V>9*"vȸ˥'{Fc mu ӝC u+px"z3LN'B p`Rы# 9;u4rDp,$]N%,s&=%^ٯUFxGx,OOY}NYW. ˋ-O#|;b4/j@W՗>j Q}jl}ZckQc)$ @: H6N@'!qB<@@7YYX#1YX"#4SB<$4'4#4&S?8ШO Ш((L] >>cC>x>:>nW,OOY}+)<"'UĖ[WƟE4/˷՗@8 H6 ܧO>}} V,OOY}+PW-Sr8t !Q_Q濨R?kƃV;_R2MTmW9ލߊ͛C|rwIpdv$=^b4ߏ)V(1Tsכw)8ũ]u}LR8P7F8a~> R`TWQ~)ԜnG+Jk)(Qjhv&Mu5X؅W"ɭ3gt+-k_G<#&dq&7Y&3YMVgn&;օcsl V[csltlpL-P'>nnP܌l |`Jzx~N@ЂDs| 9|LUfwpw0lspv9lMj]MՈٜMh#+E"hh1LaD&}Bw 3L-@}u:< Bo,WgaE4 P4PSIL'O9XZ6͠Z:[9ۃti ʈ9!C3}YV;e2}TvSfWb̎ش BͺZ?bz8>h\{$U ~"'2UJ~E>A(x"=FD+V\zlݧ)qpSJݗ8`ժB&5('JꍳLօLo.LVg8՛,d4Y>Lv V[α9xVغ!|"| _×,—%.|_—n/_.I"IKRⓔ,$%.IOR꒔n&)HRE)"_W+Eė"J,E5p*ELġD!.w Tq+qpFWpaamDZm$CYӵ+r>ԛU&F"k/Ԕ-SCrPZ&kV/shK hxP*Xgjj謈{ 09x`?s |9,N7ujSciM/?/q+[78 k7qjdu&L֧&3Y&Flغ[::ǖ_p콼F}&76˧Ng59*bv4buPTy !Nr&n+ʡrnrl&R}D~4l!Ldɵı+|-llJj6l8>JI-Kqux}v_Ed ؏t:ahXm; Fr_b_d&//g:}`n,_;_vα?eu--ޱQć%*— _#|b_KV_ؗ$%IJ|WKV_Kqn"K]՗>M^&o:҇׶cڊ9VZV__—.׮+ HA8: HV8c }mO+AVΤ@<gR YͤM^A0YAVfHc=f`8l%g *.sXjoo}g |1>K //pEbHC#SO\u\wN+"u7A]uwYwA]uwYnbC6t6bCf?4pߒE YcU95yC`\؏%mS$+sE$NC6@@i1,u,$4CB6SQVkEhm8B5:>۝Ԋ۴)Vw4K>>coWw;Y!kи؏ Kv/o[ [e9l-EVey8_Lo4!ܷ t P ~fCo] p6tp~Bk98/m?d|n 曮{m3jl*Uwc/( "5?c&Wj$wɢS9ipjY[OaV~}-L=lQmM2"t }J>D>);MwQc^Gٕ5|l`wʘR [ܔ[mQQ5{ia2ٚL ɘd&17Mfk2cqlM &dcqltlzslx؄/LbȆ/66E&I"IIRd/$E&IMRlm&)IL)‹RM)¶E)¦!S-EȔ"Y[)"r%4-=PQ 2>&4UGjƬа]XDX4]^|)v邠q)E22c/Urdru(!*E7|xE{2\E8~ـ.nCO=:,Gͅ+>' !ʀGGNT%_Ax%w2#SKN}S"X %ÔЫ+9HJHiĆAGi"߬w ػ(+ε;x^@/Mǀxt=@|~Ld5ɴi2Y٘L&5cqlul6MMֱ86m:69m$qCM}XDdЂsz_6(HeKLQɚP[f8-YmU ‹8zRcBTRƊ*JH-wݴ)&T }樂gX&ZgYʃXbAڥ}*%L7Tw(%ʴU%bΤ>v8OpE ZWI#Ba#hNLɞ2/N)9ei]]^+P]&si.]^hE^A?" -j@,ѢZᾁEhEB8"+Dh|Z'hE`"ĂC,KMv9HΟ'4.Si</cwi8mشKN]^cx_KhE^}}KhE^^ݷ/j e2m[~L#uZ|y.d>~p} W} ù5x%jmz`i(|eDw[XI_!g-ϫY PN~`ike)iBg99׏,x2rx :١e!aKR4%Le]>Q 4)C'™rGBhsq]!59Uyxq芈rhs=u"oqM~~F'/0FM֗Ym2p(s貌Y=ਹvS̥ܔRԳϲ6ޓI4~CZ5 SH ?ߣǁ`Q ]|r7֋3dڭJ7Lj&dL"vU_m>Sm(?ˣ !HhՒnz]TB:rX9yO~ΗmG% `>DBVc7+ -?g'k.sV Ԟ6)F)l+d}u/2膴N)MK"MY W ^ 9~i!- ݣE#xzz}Z-eP)pTIcb5v4ܼ Ҧ>z )̶B\t'%%6߽]co#6=y_LO}vn//a+a+[ [͗] D@ ~=] G㻧LO}tOs8˼>"R˼QޫGVᡗyMmv,3H(90٣E4Fo7(sdowFTK&.4c=pEBTimsɻťYP^1OFq:LRNQ9yey-#U"ދg'5)-$/kQ &'NVI>} R#KգLbEuQ5ӪKZt0>ZutqAYt|D)ϙ&d2&5&1dMfc2oo&cql fdcqltl}wIs/㳻3E[V"Q^/hw\}^Etb־ϰ̵I g0 .Zq'jIF#9fAr .S*EE:y(tbQMN"j::.@eVg~x`GjӒ#g^/U s=,!7BOĽLϾT;z6I1<աq׃4"Se_.%2|B!y gܔ^F]L YւRd}L 9: &*2bfhod@*L&&<ԓtT_q]9Mۄ~Zi]\myhԐ< SŗԤI嬳Lҋu困*F"}RB S=P|WgA9J d };-E]˗CB<(]ZB$~c2ٚ ٘d&16M&k2ǦcqlM flcqltl__lE&| _dśmbh$)IILb&)2I7$ŦE)¦![ТaS)EȖ"lJ,EȖ"(/1&~L/pd`ivR?©'*'(QZZt2-9 JpD:~aC uDlc#2uX#2sr MUi1"sQTe߇[},("4#WtcW\xnYDkng[+}Z*n=Z}.^!xJjV%'~r|'@IW^  )|YhW|;-D^pΕIuʧ&mW#E˹~' -}>иkBdMfc2oLcqlul2Mֱ86o:6#9IDR Oyv;jV[d՚:LB&xJA&*mpd0ksd PS:t4U/t !)X* T'SWF~gb  0 IhveY& 7OM"ꚎCP QU.`W:L@ ̫p/H9ՃE}u8)9;j*KJLxz! SnrQMX`5Mq{!)3#"(BY2c8m;bowKRDre\T*/&d6&5&1lM&c2mo&ǦcqlM fdcqltl&|"| _d-E&| _do/~ _&)2IV՗MRd˖"dJZU_aSЯxdZ+]ǦE[r쟯h7|6 ]Ac<D  ڝIY 6gR?AAl v ^xs5r$~T_`׳r2 a X\֝ &4/>^1}X47eut,kMYW$dm$ޢYé.qXylܿЫ{+"?9=) Rp4̋SfsdOɜ2S&sʴyv../A]^.˴y ]hE^A?" /j@,Zg E8iQc!Ļh eXo8.cxE<=fEh]%4& ԵFd~q]cwi8mؼKN]^cx_KhE^}}KhE^^g˼;E|vvL֟/H&F0_^} Y6.Gsp킺8pBp>ƉZj1"%H/"Oˆh*`ma}` e^P SwOAJ^|`j& [c׎QLNo%Qx]P*/"iԪBOeɲN*5g>C({[4uJn/ H?v,|RŶė2\&'qV_[pJ@2^Q>V3GIcG=A$-)!}*L 5n+E,SLu9"Mn5ϙwMM&c2L^96ulzڱ86[: DRE'UۡJΫb*݅:*E-ڱ$&AyJIAZv|2Pԉ󨙝24BI9:k?r5Yh|Ү!ɮy"ZJQ_M+1昣Lmچ*^j3>1srNWg'dﵲuC ԓVn \`Wc}KOH#Qa(Sj 寔H !'O*S.իS>x{:>q* ᮗ(!/HluނB-4YO_tI!Է Qmÿn0Ӣ|P[X MgnD++$:O8(qSI6|,“EۡUL Tp Lm} rW;OI8@0*_i*]'bREԩ3!WA'DQR"EBJ  ҄Гre2yd2&]ɘLK7cӮcqldEȽx-ZP“}NIS/]LP.)DaҏEiGCWq$O S< ~EKrpa/ "qMwm7QK/G/ ~NZҲ/@_7?:$IZR!*[_$ڜhDd2c?g256ɼ2ytױifشtEዞ_d*I$EO'/n)BO"_^}݂.8m=V|yeŻMovql6@l u@VhwZA_ٙ wgRd u@ D+ DoYc<FI|H#zk.QiJs=e|ik(XMEo5ˢ"7SLJ`L4^vxX#~}K]p5.A%~Gu>s%1^ǻQg: ey$xҬ$Bg#\M.6yv|Sfsʼ/cݻO}>&q;b{Iht^fᶫ/~̰|LO_[@ w 2@z GpGwO>/.p}d|~/=E@Z|%<`%TxjEPV2,AOsy5vDB5uԧns8f>e0#nWcm/,QrhيϚSD3 ,^Y}Iyj^}ϷQJZ(c.`,}QU# m[O) D t*֢PqC=a{?/ -:Np=Ni$2ջ1TՋFTDxD(SpW PG0n/WRhS&]i٘+WMwvl2KFBcAZT ~.Εw=fUvQs/z=)+ܥi96qEjz`?A^I:h]9@RIMe9PwĒg|lwUgr/&r4ŧ^T8UeH TJJNZ)pB׊>)9ij[Y*.񍇆ehs`b څ9 1@TC]wQ y$EhfVzrc@DA*S Ujswr ϩ-c8N gDVF٫Pڔ !d?qt0'PUK?rQ$"_ĺPqK^T.n4WX&ň.-WM!"0gj2K9 UK`2_^ï)(7M5&]i٘+Wwvl2MK^/&|*|MRt"xV-ERM)BRDL sڐO4绱cRPNLU N&HEfi/YW_S: ]&R^#XJ=QTP1t"ǍsԍXI8)TZ$BJpjxN/DlZ83b%bp@4gG! CCRߵ@(QMN <7'N028 ʐ/, ?g?AP1ңpH8)"ȱ9)$5n.tLkWkl^8/bA9JE<^|m9ua%klL]٘LwMfc2}-&شd:6O86&p1x"1uNIUt$dTx~ *dcRhNUO=k$񑗎)($sѐ9kO35H2s5fR_%UEar25$KW-s|']0I jҒ "Dϧi^DЂS93~=ETsᤧ9pg*Tїq(\]U MI5y>@I䵥Q}/碶M5tcnR =C*vUqrǫM9 9*p)> _S8ҴqRboAS)i,m$iu^LKeƗ`Ń@v\2 H5yMsy#[Uϸ^E|J')]"Dɝ|68!!(Os !VAw9uuy1HpBC2RhYůAޟ&BƠQ]՗\ %СSc_tŒ\u1CԌg-㚈JC)s;zS5ˡ8s" ba򜵠tN)(R9dӈWSCX'@#)#2:|a`|a wSw5NuiQL)M.w%Aa@Sz!tוʆ3Fuv9)E(5< :t-JiTW]JCzEIW zk3(5dZLd&d2&1lLMOW&lMƱ86[&شc=bE&| __dE6| _؆e6ILbh$)6Im"x3II՗)EȔ"lKZ"dJ6RM)B""GS6S0xK00E!Z/c7э~Q*qVjj(. m|`򥡂q^4dTD[Ţ&)+GVDZU.~IudR>RUI@ыS U,@Ab(ƚatVnH(fo_ [D\I\WD~+:@GAvEABО ]; [r(8*bKEƈsOYGutȅP\. jg+v ].[}q9Q0GʀaI2&1vM&c2mLd2&86]&ؼlcӦc׻,_(姶镤z|aC&ɫ⚶9 h9ޑ$zXrMнbc/ONO2v0 @ _n3 pY+k3IEYA,Z۠?JDV>/|?7"neD`C䫈 RER͛ӕ2Η5^Mfkr?/dJ|L &p yd~L Aa2vy؋]u:]lpi!Et#T9AS6&1ɴ0dLfk2id&/O86&ؼpl6MƱ:6MfˈmE6|"| _d&|fb$)6IV՗MRl˖"lJZU_aSЯxdZ+]ǦE[r쟯h7|uRk.m ıihsZ@Τ,D3Al ZAl 6@};dz79&/P[hBS=.+lMRD1Da,Sl^rǻZJzB+)E6D_l")$% cs\ - $|r<>?pEPp/m=f%ኬS&slOLٜ2S&sʴylO.@]w]ͻLe.tϋE@^ՀY;E="X'-j ]Ap>" d%4"/[Liw Gk52[?(8??_ݑ:-L^ԟ/Ph)@ݟhsܷvlDCH 8%ѵ"&6INklyeO'rNY>f:ƻڷ|h sWD~j:Uߺ^C78'({QñRWR~lpB3?LdL&k2-L&c2ٚLd4L6M &dMƱ86YfشثG$ >*_"||$}}HȲ= "҃*&e*GIS$N㔏RN4( '+!2}&fɪ5K8H h=pSpa} KUo"!yiP$(ŕă'./קFqF}hLfkraiEεw+& |kN ޿h^kP~bPBI0i}>Eh>&JwNō/[V{'Bl8ejq<÷RaQ: VR$ pf$:jMWs 0#suy^YA=8`iۿh K~i2l 0/D\ʐ=mCJP[(zW>\:gp-i$4٘d^d6&5ɼi2Y=/lc±86fd6{Mb؆/Z/6M"؄/ _V$)6ImEb$)IL$E6I-/S)Eؖ"(Eؔ"lJR6K~+E$8>;\6"cFDM$FMMD/%*O1i0ބ3@:&r"!^d"G X2"{pњUiԮJ_8{5@kp+A$;hEph=zEK d_GD;&?L)6g^"}WsN2" 'j>vV64lLMddvcӦcul2͛oCO !krp$`{Y$:?k 2h]l&?"" gw+tL'Y/)%yFLf1!x&$C:9n7(X~(8=Ht {Z]BR=oJc,FiBH:B0L[dMnzape.tϋE@ZՀY;E="X'-j6iʋS^VMd^9'G%{Eh|%4"/ϳVGZ~~̻ έaϗyw W#+Tw &p߅]Pu]t-pT.u]dٻurBbr4hmuG&e<$,Rm$ph 4Eso˶x:#;r*k^tM  N s*ud3U#竴ײb _Z{vi'K$;RΜS̛m.`asnyJ^%[]F ƨ}ΉÔch92LsE()3>+ZrTW ]ďN 6LOd^rlcqlZ:1M.8"9hOُ-dM^w۾3%DGNd/##EIr)]5S94"L i}ksd$).4߳=7jota?pKDE=| ŸP|jVF_+҈x@>'Y`6sӶV$F@:_ A*/L&&1>a_:6?l_t7|LUZ%)$&I*IJ[ӥRV' ?M?I%؝,AiMv si|B,7/ CDy`tju(`R;^XyC$y#/wݱ`gNUTG@ؓu$Mp U,Jw~1V}o jfͯ:әa?cO4.q=/+:~P3H矑O_T AաXG)#+^pwE,ՒեB`r-Mh? lL]٘LwM&c2Lul6MƱcql^:y)HU5IkKl^.$D'э̴&e?MO9c@KfT"w8m7ACJ@|.}zk+dScO2s *b$ n+X!IsᯀZ}Ń[Tv_-MDUQJsD کֳO]`OvR:E({LMa8f_:)t ☦RntAR]GϽͥHZu~dZ?Yc56ɼ2ypul~ڱ86{Yc _t"x$EO'/n)O"_^}݂.8m=V|yeŻMovql6@l u@[[a ޝVAaL D V@žA@'?+jz\?t: QV2![e GDWL:6R,T+Cs\ZpE$\%&]H +b߸"fvފ<:?"4VVZWDxY|S&sʼ:]Pw.w]/"6=E@w2=E@w/~f"56=]coC' wN6@;"`"]qbEE,6,vz. w9lo5!4.S иfǦ]>6>6:>6=e~Mw2=}ػMOG}&q;/yyݷ;ۮoVa+[ [͗M Ļ@ =G] ǿLO}tIOs8cqxB9T-ѣ^%_\ j5v}̢VbS?V%+Y$"_xa[x9^iΗq!I58Uh!F> dK*袐ѳ ٕC!7|D> x+VD^\F~34^hpuB,>χS: Y ]<"[^D6aaI*_58vH:A**[0klp*\x =0s5Od^plcql^9\gٗnHevxͧ8PhK Eu-BE=R_]?rįM%>j޿YS/܉jrp2_ {R1">'d082۪c/zuXj*'My.4]*(–unvR4Ϝ?ER讗2IT{n[⪥I`lRoPHMVEhTU\ŗdj,J!^W8 5舚;%jʹD(EDIdZ/HtA=]TWe'o<ӣ,%6ŏ7ṇNˊsu[:+c"~.})ӧiyʋw2?}W]^El鈽"*/ݼLOՀ-//[}j V}jl[c5  ? M -Mހ " I "`"M' c&=, 6YdYltH7 d ldKhdChFIhdKh$ChM.}@hMwtM͆͛|l|)SOyE[}?]w+r]^El鈽"4~n^Z}ꋞVc?twL7dl9l5OLp߄Ad Al> M-GM,ܷ:e{)@S^p8.pwgBƩ{)N6u/E(z{&upGTS)/Ľ+я͕aFEd㄃SWe<,HN%>LE&Wf‰]v(eޜ^P"x *EzD.R-4$EQʼnzJ)0 iq"yeHH1/hq [&={R{Gɺ^=Hh?/(VتҔ0CN<JY}q<Ҁ2gp I[EMm3Pl&уvE%S}a256ɴ2ytױifشrl1 @j8'{ xl-$US-yT>-CpB_1Wcu. ={j [g焾7NHOEURp;ehͽ.+c?K|>+IV6]nIM\'TչىXKS 6x0"ˮ&$ ׽f^nN;rEiIi>uZb@#*|0龍,C\8Q}I^$ ;A%k?YCGQc(] *YlhHyX 2ISѻ3\:=\EqRq=MT< DY'+E 5鄬I]8MQ՗@UQ\L>@\qmnKj3$M*6QAWQ鐀D}^ͳ*# (uM^fQVAG?!Ħ(Q^EE4B~ Jऐ\qŊL&&1W&:6?dW _t7|MUZ%)$E&I2I-J[ӥR4񐖛#Z2h=Ur90)U2IU@;\`y}6p윋>3$̊rmҝ] /dSs""tbWrDߘ>1\54I Sسt/+c`AR]b 'éHד0F2Q}J']撳 UAE(z9:6_(IGD.y o5|^.{D]2J(s$M% Cyf'ڀcvKB2sS6TnS\;͌^YD76njYńf. @Oψ/&1wMfc2od2&ӦdMfdvcӦcul6Mo-2 Dt݋=UWiruh8#&%;t2ʡ iV_HH~62b󉑪z3A(k)Ʃ/ #J2dīH8OT|d@{>SGШ֢6jgXD4c>*VTg ?B [3|dѧYPLp8oXe:R1Ȳ+h^Ŧ'clR,L\ADߵ̂S$%eSAeú4dY^ys/ZL&&1W&:6=d_|7|MUZ%)$&I*IJ[ӥRȢ'?]pL~/8mm+bomw/Y} _do/z _@Al ı A|" xsZAb] nAd 6@oΤAd M ,DbAd5&)gPhT3*"Rf|6&߲)j8;RBɩsX孜ip/+]8"sMmR2_؆[ YP_ڊ'-A> tzq<72y*LlwܨWˆVķJD_~=wB*ϒ`_|}|S&sʼ:]w+P./"6ݍt^A{n^j@߭k5{56߭{p@Al D8AdX|87lYdX"7a]z ݤǐea&?b.oiIoNChFIhdKhdChM. &- 6lثS滧O~ʋw2?}Wd׈w#6?W|7/yyEh|ˋV_týW_fw|svfJVz.L&&F ]o}d 2@oA}|c hc N2?}+PWN9+ùFG\mǫ/\}4DC5ޣ:иPh.>PT{;J)ʋ*bT_gRIhip'@צT$3crh?_( n,~W6!L?8w[jp8b:[ b^Ra mT04w(֐g8J?C4쭍ak>мvˬDiKelok(ΆB\8^x ҩ$KeN]O- ɘLd^d2&5ɼi2[86-culZ86fdcӦculIRxb&r5s訔ҵ`s3/j,⨢vR\a󍙒r:- 7‡R/oغpgeV~GzHNqc>"YTE'񗾅F' Hyi]b/I?žDS2Ǫ2IrANA_'CҤ7G|VdWT@,4)5*(p0>J 4N]ߥuEK Q^m q%x{忯iJ'E@};)8F8U:-إTsr wB8W9ۉfBYR>UBCQE) ^?0RS?@5pp6EiZE^-x} F(RESBϓ2_5 KxYy(AB0WŲCKG?D8PzLʔ+|5&1ɼ0dL&k2yd?Ʊ:6/cqlMƱyӱ:6ŋ&| __l6| _GEb&)Z$)6IM"$)LRAE)¦![Т!S)Eؖ"dJ,EȖ"&/6ܝ8Cw"O\/ P?j&dV9o՗i(OƩ pss֐/5YKbԯ{T!_]sC&Gut/'[D(KC@3)I<zo棶]o 4\|{'ԧE[q5[!5׉k}csW-? i}m&%S #$?B~/5h,U1 :wDž˕FSV\͓A$K2ɴk2lL86:6ǦMƱ+Н)/n>|"/ @n6ػԒM7۴)Vw4+>6coWw;Y&kиط KvdmWyиM[]͗|y{ p/|s=l%3luu|nΗG+G껥 p6DA)b>^}ۥ p6:wPwwZ&ܷ ݯ8}?CY}>^`phѫvWa{~*0 wع^t{HRRuk2=E3 &`/"%qIg~BS(DJRz "u2Uߐ%p&&W 5<_G)У>K{+Mspʥ{c9DNs%k:(Ru'+n6~BSֆ՝Ҟ",f[!߈! a<0Vt(7Yn*4zɡlLJ@ԇhsYgD*dk2?m2ieʱcӎƱib2J^t :~1KPOZ@c5v);@(Te^`O1Vݿ|Dݪ/Q6;!9"5UL9"~z/9_x xd]7G$>txB%qmm?d\ܟл[K3btR?dJ9xZ;QI:qEi{4S4S*S~p)ك~4ÈCO4FɪBS/s0<%ul)L "ii=j"<&\{,+H%;jU*̶}br|v{̠So@uhf!o](:jI*dx1U0Qf,z&OAi]I\]t^a .]y:Y`xƹC&I( iAU/ +F!u:!:٤#ֻ~uNg(Nt4LjN.'1x9dL 滎O;6c _t"hVI&)~:IIRLRR"t)BU)"J& ܦKQ$ؓcIg/Qķ}mp)&j& PN}l=+(.DsK:w{QY*E㔧F]& \Osz:xXԦpSU$x VU.q_؜ ⇢((%з:z/蛲O1p DkbHw xdxl rTR;}N9E*BJOSsweIԫ nn"ڋqA] n{P)滎20ɼk2yd&16M7cqlul6͛Mֱ86m:6YǖhYP/ԻeF|~rAas3莢 :fs/k xnM:[s`]Y #B0\WT265ϒ:lR!nw#)sm.h+ԍLc~'(k8n,^2PEZPQe7^HE5%GQW8u8jwH!)ȚἫG2WZ4brA#rN1Sl^I/ӢB:TUuze"/XPX9|8gX;\Q7 .褲KM{|dzd6&c]ǦcʱW/z:| _ _$w=$)Z&E)BwKzaSЪY| Εo窭m?V0V_tb؄/ _V} Atb x7At@[ ě @ A|" hs&Eo3)] nAl 2@ Db lPLBdÆ9SRn:>N2~]32g嬩5=U6שYGA;Yzy_klᅠa1ήuWK Y'D삀_92Po/ YD@ 6 ~ Gw> } VwO>v+'pt՝X._=VX']ԧZŶ݇g"?)I+0$)pm9k}Ǒ~dEQi"JXQ_Vΰ ύC t  e]F}KWtWTҍssFJzIEmn8`81YxqI+?BhuwiR kb$K?hZKEDk"7šq`\OTY=:v #NvV&(mCp@~vy_Y-K^>ya:2\sA xהsR*(-^~m+Ɂ'f4 HJu;Y/ˑc/ZILAJ'wyAG$jDNFBmN#&&yQ9K; wY-PjQMVZP} ?AܣtܬSL>֡(Q$H=Tן UU$}rJD+"R~M#\t%./8,2jU@TOh]t7␅JS=6CRfb0Jq})6 /K[biEm5LF$\TyJuCtզ z@N,"` 1h5R 6oXe`̗"t@<:TԕT#u?ŭ<h E\·&d2&5&1dM&c2oo&cqlM &lcqltlM&|"| _d/E&| _lm/LEb&)^$)6IMb$)LRlRRl)‹RM)Ba[)EhRDxƽSŷt:&m!IJ]z(\x?X2騱/ ?+.GQXe^:ޭHF<8*nܻ`WA(pSXnn~*#琒, o-h0I#d+Tbrl娨{*~%-=P>6jºk0"ǑV$C 0J@+!=Ni247sM ϛ|ECK^TDlBcD XCM?00$Rk+S>J*e AE`Zy=^rx/H5u$z=B?t/KVl|r5}=$Kr#|0wpqJMbcsSѼ2.Tt*)kmj\  U^@860ӨW+9gҊ”s%B+  P@9AXMmn.DXj2/L&c2[ya2٘Ld6&fql^86&ؼpl2Ʊ:6ǦM&d/6|"| _lE&|f"$)[}m"x3IIRV_t"[)ExRdeE7mWɻfث>h+ײv"xvq%D7m K{sZ&=`rZ9ZAtڞIh5"] oAl 2@ b C8q Q臊x Lܼ3\񊬼"/R/^DEcu:l ;]&Gknh_dGA.'U8zeIEtJh\cL5|g?pEWvM+}'R]S)9eLSfslN)9e%D@7!msUcF8@N2@]87,2,jC71,2,Z69KB#$4ns8ie. tиeCh%S͆+>.mu|m?n|l&';9yи}M6qo>&4;qs /nU}ְu9_a+a+#|nΗG+#w%G7m + c up߄A)p6tpC+ˈk(Zw|ȱEL%a!79EyUh IIc zm>Tnd|Hw*jmr80&1ɴ0dLfk2idz386-culZ86fdcӦcus@SQSU ϭTtE^Wv!,%NoWbݑtyEĥنx(lh'dxjɣ<#t]WzS/#/?Z0ھJ߇"\Uj"=_Y_?$&~^@vs2 'WN{; uF}2)Ҋu|a[NP$zm?t6E}0ˏ\P]A@ *{&=+hJ&_9[+'ul1%zۋN 7ȇGWFyF"DBV KAO fYU#⤩}/ 5 " Dj|?)<ճ$D>2hQ@S_?J &-EݨdMwOuc$r5ud^Ld&d2&1lLMɚLƱylc±86fd7c __lEE&| _lE—IRHRd$E$E&IIRl$EIߒ)ExQ)EȖ"(EȔ"dJR7K~+EO]Q):['8ӆ[ՌxT'qtubPৰ0>eqвk .R9*S ]3e2~.A f2׫aaR sܑsPpcJ&'n^8bCgjл"Fk,a|ѷ>up.].'bUOnBM[sȢuA B*4`A:++Byd S1 r2C9 ""G'@HQFܼu Ť_ 8j}F7L&c2Ldk2iicqlul6wcұ;֙&Q|a])XWfӱ c[AxO}lkUΤXQ[ő"pDs:"Nd3E@O!d$suE.x7EMd^"( jZ>~'˛T H^g#¦/tUu%ab(Q%ew7;I2$U#(5)*2s:.ŎfA\t=\TcQ$\ 0:T.E|)@$`݇L#K3]4fa88L ٘Ld^d2&5ɼi2Y86/culZ86fdcӦcul2Mbx؄/6l"x3|[2IV_|b$)LRdRV_|b[)Exa[욼fm|7yӱ߬{V;fZV_|_l/&&chcN+@d ZM+vgRK nA3)6@fRl M ,DbAɢ\Yuh{PEY7>$y H4 K4 nE}WBv:ꐻ6(^3 Yo18J RIxNTVk=A;@!O{.5j!"HXe\ͷ4̋SfsdOٜ2S&sʴyvʛ.̻.wA]~uw%oU~w4KdlhVym@;[&`{ ¹&Dpj@6%¹"X'&qbE@E_"Xc&=fE@E@+.sIh䛄m'B#8L%oldyޥ.tM[];mucM>69yuɛ%n }иdMv6q c|nΗp} 9l]Η|y{JfaH}9_&&ܷ x }d>^}p6:7Pw_}tۆWN3xRS;n3t."pYo LELǮy .MWQ2_c-/?kwRsDbJIIՙ HNZNߣf5aRB.H5\5|2*`FpT&xE׏C1ݿ[lHaI/ YZ 'R}Q*>ŲbCP&skJ ܔRPUaXJlQ E}N`|п"4$uep1<Px@ L&&1W&:6?dV-$a߳ nK:]7:8fj1"fͲ=.ub'ra@MJRE{l,M=L(B"k򠿈(yAhrFCܫ":M& Y=T9BNlqև!DܓUGz7MDʠ[hP?7T>3!H=Tϭڢu ;3j-=j ʀ lЎy {rE|VJ}لxAEE ~O5\9OEj ϺFMGwE$oOV _cRʱ~?G>|4t*x:Yjb9FDJ#]bU%q @W [OɊXs dpqo(bS(rGIE)EAzZ|̈~ e7!*8тpYlz ٷT[M[T&^]pT9&8^ DMpB5Yj|d~d6&'Lc]Ǧcұ/~:| _ _$Ew=$)Z%U)wKz!SЪ9Դ ~ LJ-'Ke Qxgp8áؗK[Oe]wVx&@%(N: aE:g[-O2¥W~U/ L⥓a/6ˉ$-EB6> xB9 b?:U½$cEm+k+p 5< B6/m Eu(|("ttwQny":~rAd?XADE*))bpmVHZѝrԧe[ !V8 l)"d6&ӮdLMٚLd4dccqltlMƱyӱͱzm$A (ȆPT`[0Pp Bsz2qA#ߴla>8Dm$^Tbu>v\T(&-"oG [h@EM1}%|ϴ "2 nTS2F^+c;1@@2 N|x*ècB8%m_ I~m'zuls-RNBKS)Wʄ3I . ?'R f4C@R|[uDž<4vQi`|d|d~d2&c]Ǧcұ/~:| _ _$Ew=$)^%U)wK~!SвYtध Ε碭m?V`n7/M? M -M,D@Al ڜV۴At@[ D3)~I Atb Al 6@A՘{md.erpb͂A* +#~gĖ{ :wUg )yñ֩&u'o؆'3# ׸M{a1WDBOFR8:'tSǏ"rԺGED $)z}yX1ʅ4 \)SO)wez.@t7b{ݿEU^y˫[^^U_tZ|kVc.D7 @ 6Nz '&q- 6YlYdX|71dYlX"`" Ch仄FIh$Kh$ChM'q8 &, 6S>6cM>6[>6>6mWLwO>mWwe~.owynĦ#Qk^y+B#kw/~Zު/6V;_eV2VL&&Fo&.7>@ 6 @}|# x# N2?}+PNᤧ9+ùPe3%b]/6*(8g>?yD.MGi}e?S󨩥L7/ cSE7oO%fu|i"Pi(ҳ$Ur?%TIJ|USbDGNnmlB-Tᴱ$IdLD .* N"DwOǡY1P{Kw;2XeWqCS~uV&%(1)HmJ~mH="^MdL&k2/L&c2ɚLd4lƱ:6-cqlƱiӱͱP3Dmq*5%U~ h%3LeE)pݜVjܦ$o2MENs.AM"Oy*X#W.HM*NpB)~/6Gud|^/EȏGTAG!$t6sq+zsgYϊhO?Ѿmx(#ʶdWM]I/,U`|Ӛ馋:"WRz5|#6 tNUePE=Gfmb]bԑd4UD)rl)G"դ:$b=)~,G0ed!B ]pT*Ko'x {,DMJOڜ-pwb\ʋ; 0P!+ ']Swkҫ'IJTMǚn$N}xTkI$1l8vIH`hQ)&S,s.Pn^SIIs7-)XD)֩C5&d2&5&1dMfc2oo&cql flcqltlM&|"| _l/&| _do/~ _&I"IIRd-$E&IMRlm&)IL)‹RM)BE)¦!S-EȔ"Y-ENΞ5-v xDz.s)F88[tߟQ}I?7sW 95G=ef +|>%pU*d:/%'=׬1~[ƽ.X`"Q5jL6-)t0\c$}c憉x^ jqY=h0]Bp$Q.FPx=f 0URs Aqg]_xyBW,) bQ~vDp(qc0ɴk2yd&16M&k2&شd6cqltl}jtti*x*Jquvsa8!7S)#D"-8\ND+D%кI9%xCR Dc5!iV@c)mj6d(>W_p*_˕z?n"\vXgQ1p$QO ȢNR/YWj Q\"܉}9QFPIjHj`z<NJ!d-EpD5O7SHjN߰ B;i Hu}M7ŵϼ[Pn,=IL=h״d^d&d6&1lLMٚƱilc±86&d7ۄ/Z/6mE"؄/LEV_6IIRl"U_!SЪR~]Ż&\:6-ڊc|EV_ZAc[ 7qxwZa ޜV<Ļ3) L 2@ W@ D8rIϟGR!$,zSdAR<*; -DtAE,L9+Bow)$G΄^T8ߋ|$抠cK"U.!#WXɥ^_+bNLٞ2/N)9ei]]^+P]&si.]^xE^A?" /j@,ѢZᾅEWvNZ+y`.i D8Z'hE`"x8.chE<=fEh]%4& ԵFd>Oh\w?]*/NyE[y>6풓iqWoc/x_KhE^`.yyEhv_˴;E|vvL֟/H&F0_^} Y6.Gsp킺8pBpo̗:Q]x8EVE J u2՗D/ێOtS K"RF~:_/^bD[T\(Rt/ ^kpc*&%RI$C@WSز-b5ɆYpXW~wlQ); F/T*p<-w(Gp88 w@n]~X^v }ze4rB0u8!]edzs|?./j2bZʽGsdMy " ~' dL+滎O;6ǦcK Us_u #5Aw#BFAC[+& e7j#)S\) rxlڡG EZO+AڒADGN֮EH"'%؝OQԫ4J,mJVG"R[*ϧ?'@֗B , PfPQ)̟~':"Z.8^[n NyMdprNYW\W+Iz5Ԑ6kA$}-eF(]b/7usLĉ@"ȭDDSDZ5\Ft5 &!LU#8J.UUI^VmBt+%)BI N;)qWMIVSC]c F)n BPm{uGQ 2u8K:1B,SuIuDT" HU;DJ'X}z^oDGJ -5zݢWlL ǦO;6Ǧc/ _tbxVI&)z:IIRJRR"t)Be)"]f:/iܮ4N={|Z`zyA{J!tV@$| D C}I9mUZIFΑ[D<ӵRL^.^uѶDysjkHdᅏd-XW9TS;7Np_|Υ/ Gb4Zp{Uȫf͍ ͐^rd^S"+W WRO$P5w{UKR%$ϙLwMMfc2L^96ul~ڱ86{nūJR|7II˫/[ӥȗW_tध /n[O_^}E&|n"M D86 ~dd ڝVAv&ݙ b bہ] f%dFz-GIP;ǝ/.~r8Oq)z8`_ӱ۱"e]:pt&Ērn' =SNB\~6]p_LI4 {bM9^mO%T"" OY2=ezٜ2┷@LOe2w&t,,[}>`ܮ{"E8ApMȰ,2,eaзcv9d$Ch_GhL]2Fe!47lشfǦ_滧O]6{и鈽$4ne~:/6p?]}}|[ [ywfʿnwMMޟ/oAd A>2p}d>up=e~N~ù )K(Ms˻ףYlfsMZ N12N~MS)&~"'S~NQ,$DZsc;炟0LOLdZrlcql^:"|O/2Vkn⧓$E$*En)BO"dJ^"4bӵE%+^EߊNw~x^\L\鍽1xqW\bexwhGdEKS+<ĠLtI//صHIuZߋȢQv fhg^]$ӭqٵy!!EqetYfS :\@,YM2DN{Aphrñ ^Dsa/ݩt5&mG= ?'dA]p H-u8}E5/S3ኜUeMD\~vwC[IhCٮdL]ɘwMfc2-Mtl6ͻƱcqlc'7J NkX S` _I MYUZTRG^A yO8=5&NUt28t7[W?BuӜ&z^1UοjRM |8XVYd Y*R\Ez:h[W",XS']ZDx/v=e| BUPmuGPN7kVAsCb>:yd|nx i?%"~0 PSRE YJ -7TD}H6cc,&K9cz`OcbC EV/oDŽc lL 滎O;6Ǧc/ _tbhI&)~:I}ywK~tm+˫/؄/ _l{cx&촂 Ļ 2@: ΤA;"Al ^Ad 6@;$н0K= :DpxdA,2,ea'vYlX"`"lr8yɆȿhd%Cho'4yMͿwO>/cݻOm>.q;b{Iht^gmᶫ/~Ͱ~|O=_A }l>څ}>{)9Gw94sév/Wp-'BMb喱**$60YKnYW8$ڵ uPPJ^9xkz[D^k*!hD-;)J}Z/QG9Ci< 1坼0 'S >!^pXxsu/!p8ِ\҂N%5y-W/ !q{AW>x!xηу:vk({/R!K/ }e>kPd_λ,j#uك4VuIhBKJO s&]i̟٘0Mwvl2͟pl7=B~Hų9GH]Л>_qkp;צj k'89b }R;%)ҙ,N "᠔PP}X5tqNQs*bЙxYSE# t9$_e/SЊV4PQWpQxHʈ/ -C9wBI⩇tY,]yu<2&*Ry'̹)@Q4%E)IŬY f7K_gIsF4^V!f'pdv.Q fGes1 +s%ux.&EE/iz?U8qQt?P^/DQS Yz4z K5~?nl82M.mL! 2)5 d͇onIفǨ~ZX e3rMOEѶ i|KT &'EE)bsIs&|:f¯|dzd6&c]ǦcʱW/~:| _ _$Ew?$)^%U)BwKz!Sr +p7CJǿMU9(h2(\PTGÇr(SFEY%?E#x jh}Fqs85KR:);+T2X2ByoGْ#+h\Kխ#uwYWnMJ9<4Y*hq*2Yhc ܌4ڎ*[i!4$wLfc2dk2iecqlul6wc'#^/>4"O{i'_ʤmdL~B,x헽0ʀ`7x])58/~?ng, {c`#ȧj?ꀮi u;'M(Qn(塶)!`jD>V\/>PbX쑔 2-[[;| zowYZuiťS:wʩ)y+o2xtI1^2hFMOOp9Ɏ|*:RGnT8]%>5x~%1AlHIs(8p&7Dp%=Tp([wMM&c2L^96ul~ڱ86{nEJRt7II˫/[ӥȗW_| /n[AO_^}&|nbM D86 ~dl ޝVAv&Eݙ b b'"4U E#x$~XK. 'ѦOZg`]i/4Uyk=aH!!E2T. U:PyꘫQ:}nWYɕg¨r\R0?&A SW07sQZ<4AtۑB#N(nr&Ǚ諼B3q!޶44YY2=ezٜ2Nyݾ]&syy7MOG/gݼO/gꋟYvO.I] DȰxE@ENea. dCh]'B#:Be!4.S иfǦ]>6>6:>6=e~w2?}ػOGm.q;/yyݷ9ۮvfJV2Vuek2=m|y".D_x#)ӧpp}o]">r(uC/\~b 9ȏ}˲r(*7t]~b"&p# )Ɨ囨|] ^rlڦE4IW)j=)uV[̜K}2*@!$e"ij-+X e,ci#sQlsbxI3׊+TYH&‰+6b]+g|gǟ/kj_LlLfk2/Lfc2ɚd4lMƱ:6-cqlMƱyӱ: z]TXF9hӋ웟-*BE˘ u}UV Ӊc3K!$[|YBB(s7z;dUxNuH;ж Q%"(p$(Ѯ*- H,E<\IJI-ED<rE]B%<5xmr%hI!G) N)s"M(S7t:!~ϐzOU(0^tGB5c㢠oq E8ㄊ7DKC{DQL!6% 4㦉HqgxK2K-NBZ 4_%He'惞5<YCD$rD6;9/ j2K|c7eVb'^VYߧΪ(ԧXňy ڋ ׅ"=LBc9&][_6z^^4LYC)'픎 05v_d@.Rqmtbiv&p ~( H=@*5*A@>8Y5jGu+] 1zMZETt{n|(΁MM2*|KA2smRkIRF)0{U dECsoQ#g |K,4 "~\P0){Xeem0&1ɴ0dLfk2idz386-culZ86&lcӦcӛcŋ&| __lE6| _؆Ue$E&)6I~]eK2/[)EU_k2/ Ε?_}ѮcX9W_lEĻ8xy viA;@oΤ~bhA@ѧtyAE.P~<.9uĻnR_`,db?#6 V:.%Bo)^uFP8 /1>jĆKu⥏d;̗eXe.tϋE@^ՀY;E}`.ɋ{p~Dx@o"-" d6Vyq+yL"'?^hH"4>ZxH"4>[͗yw Njk52[|6??_ݑ:-L^ԟ/>,G@}|9vA]Z yv{^p8W7} ?:$/vl(}ŔQ7qE 3߹ b_N!bqԟD_*qEG\J^>O$K+aG^#tmnt]XM^ L.V]-@L-/i  Ԡoԏ]ɲaTVS#*j :A_<1/A}݋8jU]Uձө|wDhQsQ vcc2/Lfc2Yya2ɘLd6&ӦdMfشpl2ֱilcul6͛8qL^{nppm9""-%PgM S7Vs-wG}[SdM ,Ceinv^:!㐡uX ~';8 \VMF+SWjR^b!Ve6dgƙeE"Ph2et:Y=)GH/HrJm"pA NWcs<Εu$wW&RMŬ̜fw*!=*%0Nl@8&F%QPH媹ӊڍ:QD/ ֵh52M?-@( ji/O\_=Vf%؆vXe32?Y/J}7`* y9Nt>gܵS4_'(CP/W8)5CF^~9ӨF^2d _Y)OFY Yŋסs{ӸM.w62|nc<Ѧ,{4=7NʑKx/TT&:R^՗=NWɘL&16Mfk2yd&ql6ͻƱyӱ:6ǦMǦ7Ft6fKWYCP7~!$:Wh)sp(EؘL ɘdZLd6&5ɼi2[86/cul^86&lcӦcul6L"hȄ/2mbx3|[ZT_6IIRl"U_aSR]Ż&Ӣ\:6/ڊc|ŻV_ZAc[ 6qxwZa ޜV<Ļ3) L 6@ W@ IڄษUjK@]SBcGzE+#~Kf -)2mEg@6%xU!A >6WD *>?LS&slOɜ2S&sʼydO]]^+P]&sy.`.tOE^ՀY;E="XApҢ^!C+ wN & @Ђ8A,KM7'eXz mǬᴄFp^^.c6&1ɴ0dLfk2idz3y:ql2Mֱidcul6Mֱ/ , F'VeC:K⃗y?-"gzZhGvПO^D~Pp:"Y)/HG:헥 OK7] Npz{Ǡ툭繀E5K֋~ukS-H)j B:U7Tp'(yNSd $T^{, 3iqstFb@eW>%7nDmvᄟ7 iN͟S;uN׉{#L}"$ݤcn]DqwYNmD$!(OCeqwRdYEtpMMfZ`yDf,˒ܡIPrI` = /L%4f .%{-rD.扳㈺"ԸSFLRih|˜Ld&d2&1lLMɚD8cql fdcqltl$'&| __l6| _wrIRd$E$E&IIRl$EIߒJdÔ"dJ/J2Rl)BRm)ľ(6:7`⨇bv5 `\|YDв9"bЊ&aԠḂiHh'ଶ N hlpip}r:W$U]YAC#׮=|ֵ;Y&WߗwU*zjF !2yvF[Eӏg|1_$iD2G׮H9BB6Q$mrwAԢFa$P&gص=R8s k¦lM&c2oLo&ɻ[[ֱ86o:6[=ğuk-]?H`|DA+d arC /SzS/1@fҦƦH_+죊j1dfC][כ'ر%?}"6DMgF>U/EǞ'PsYLˆ.TD&"@}!'-z@ij Ȍ3L 7?9K: kg dmZBgW0][/!iI 딣t=;+Sdi^,_c쟤٘dZLd6&5ɴi2}`cqlM &dcqltl~s5E&| __dE6| _wIRl/$)u՗-EȔ"l)¦_W}ɴ(8W&|EMb?_}nzS _W_K .&@N+>xK}kZ@Τɛ3Ad ZAl 2@}?zWGPP7ߣfXv_7U oH1\ M6ΕӈDǢ*/"TY鷗HS\&ٔ%O(Eڝ`[ȒiN)=eZ2S&sdO)))4vA]^K.˼y%}E^A?" /j@,Zg|B,zEB8>A[C8h7A+Q],&[eo,w9oΟ'4.S=MoMU^|l%'.󱗛v +B7V}FZ}WpVc/M}seHRSwz~p} W} ùeS P,U7+I]Bq/ dDTkE%!E%86WTEA3;7(8mZ=zx xfpI;~A@{LuA*Rou-EDN*7'g'S*8̷ŏRO9}X ޽}2Wp4ܔ ([#;hfqm2rœfd]/:KO ZK- O\R?dЩry5>.AE)fԜFanҽOS=/Ŷ(FܖPNŇɚLK)Ft,E+8q캆^]3!9ky QL#d^C;'ks-rR( zVĒRW@Fm^Fۿxfi (\ I|`Di7p煊TM2S5ɼk2lLɻƱiױ86ul6+>t6Eu]Ϣ H{&5rZtВH"0 | 5$wr/86p8 *'tMVSK7l[j2D`nݮ);Y:s3(QS 'he`ܮ{"E8Apہ]ذۉ,6,eacv9d$Ch_GhL]2Fe!4wdؼ&_ǦO]>{и鈽$4nez:/ovp=]}}|[ [ywfJnLwMMޞ/Al A>2p}l>up=ezN~ùUAKx$]^_[$2)y}=Wv*lGCgR WɚܖE["NtlxCOǡ.M%@K=E Ӭd5OƟ^Wh,5A!F8GX",wbYGezK>}SΥW#s:e݈ŧ8WJ Η}GRw[rQN}l8@/֋ PLLBK^@ (䜪eYݵ{e256ɼ2y|ױi&ؼrUዟ_d/"I$EO')6IIjQR.EȔ"*Em]AQ()KfI/Kf(HEI0ܡWhCBFDOn:n_&e7]_J|pC(ul$𼎇H:9@"\KGET-/O\/W?s`Qtq:I V+Iߘ2c ,hSD}k2?m2yi cql^9*|O/6ዖknԗW_|K/nO_^}ݶn+M&|W_86 vql6@: N+A; L Ļ3)2@: D"AeI[f2k?4ez`C*[_|bavkPn,&jc|(Zd?(]nF&m|11^o kYwNXN|HMň駬+^Z $>r'"rQF)ӧyyʛ]2L˻ oGlz:b9ez:/9V_t"E8klzއ6N2@"d hEE,6,v. wYlXM'B#r8-S wd]>6>6)ӧ|l{黼%4nGlz:bov y1vEOW__>_V6V/]i˛@ w 2@z ǻpGwO>/.p}Z!#ɼ^"+W7Zg)qJ ~ǎ}"p-Nm5='ڠߵC.O9S>*h4 -Ji(bX^~O U}i9>.zܗ_l ,ZTd Fqxu@U4/`0nRnz I._C/w'2}V6wEbb,pjr6¢qM&!Ѹ>M+ҫ~ jJB+%n}% IkУPIrWD'͒{PxQcF"}H.#a(6\?wA>f/rvHS+]|M.!UKܮN#X28#%&pHM)(=rRLBQ^9|bO=N6P) zSz10zŐ^FKS%zwK0xP ڕ/+C019JG8'Gbkjv& *Gl7XcՆkq$*NBݐل̳gMMo'6ĦYb/z|)_<+_&EMnRlϚ .(S(":©1rrJUON]+z!Z5c71^6}5 I%yoLKm*>A];%\{QLr2z[%,YU9`MZ^U*&786Sk f/ج}*r N?@3W[(6j?Ӣâ57B˧624S,.S醎2='t8 p,?R+ک:E4e||\Ugfh8{|r۞{Tr:=[t8 &uEp^2y5d6!blCf2-̏Mbثc/&6fشHlӤȞlvq7'<|8I YZӣ֥Y<.(罐IgNH1"⸰j\obq8fTsHvhd0 <'%Ѕo3ua.}h!\y9 x),KvWJxwO9baΨ $.HAP'/m+}_nD[ +r\$CPNKWS:san f;̈~2Lo&d=>季י S3k122lVf<˼<#u{yVyb{F?+v_ h}yp/~}p<6ƞ1͆]"6 D"N"]m 'ȪبhQEQ<71lUdT"oT_+hMA#YA#A#-j84F4򦠑dlشǦM=6Y=6=6/gLLoL*v/^L˓Mޮ3AbO2e~/ڤAd ^$;"]6>t>tlywU; 'j8m 猺h8PE ?@yQi{Yچ9<ǟZI֠W]bzXY1ć_yi3L)qz֡K9J}e5N˭m9rG:^Ο\?_N0?ytH?M_4Q5 غC>]\o˳|>->CIdB&2MB&2Ɇ&d^ md'M&&6OLbIlM&y1&6f1)(8r#vKEz*Q=K 0 lF L5qmaOEY 4PiHIz %6 w`EA&CElE#rA.Di2y\C|tר@yuE 6{qsӎ_~eqQ7֔3y >m|:%w̺,N0| }U_2"^.Vrxw]\@j<>y1MEUUMҫxH0H ]YCwz, _b̗|'i#KV,b N4fa؁m.B1;(%<1g%"j=|xz>8|U.7fD} n zS/ ;9u}$NQMta<{@tu\VS]'JEyqK4 MlCIlBf2ِɄ̋!#d4Il66ilMbMl6M6ٔ//6mIbSؔ/LŏeO&ŶIIiRl&ŦIbo(("<"l("EEQt [WrŁađ26|D,}`Q^JT̐R9OcW/CbG0LajX" ULju-sTLuˤ,T,EїHdqCeB'KðY~S msKUvqsg]OAWًu/îSݜN}MuByuV*ӟz:Wb{Tas3 !K$(7x4TM)ENzQ:4UՒ-:L2y5d2!nlBiȋM&y5$6&6ĦYbX%B)M ]6|j<#N Ţ|9ކ >]62HE}ݏ_%* =ݠe -XJlU1(ݤ2.Ӆ%IZ3R{\\ȡj1/snC5 ~8pϮɷ[!֘W#;ц BwbЙ۠$bnMX.A_lN{#Q{P=(azZo2b~9_@4CJ|6Z^N"mL+*dɬ2U*Ye6vɬ2-2U^%ue^%ue%ug{ARSoY~P7UY_on"Mní0S7)es)ěD2Ɇ)ù" 'hS8"`"ZE0Ц2tURwJ&ݷLVI.RS7e~|P?Sr}Sn3c"&%b<BNԤ |Q_'~Ї] xƎlN`ˀ\o>=\/ XT} ATdX&kh)W_Y'r*赻O 56v) bzqe 9&ZFj3br;l֊K;<qKp &! l4 MdBf2i1d&/Mfd&M&$6fشMbaM^$*ޝ! JMK]P~(a:ËUC88J^dpxXv< jYu٭)i a ",5 1Oo|;06<ÌՎY-4hr+ihf+08_FӒh>$qq8!S;tTh(bb|rPNuQL]=&m}FL-Aw1,kN/v)IE1gTߣz9 5@'NoeJ @MO0uFQii!:p %6!+jM*#} 8X/!$d2! '! LlC&2/L6d6Mfl&&$6&شHlShRؔ/&MbSȖ/6S4)4)6MmIbӤ4)ML&EI"4"l[(B("d(‹P-0,*%1Wb#QA.bu<DԃNC1]_(MYz+KlͨiXqQ-uzD?3FG|D2!{q:gJg--.^G? š]2,qU쨰Jn钩^4 %ާWلL! vC&2MC^Ll6ͫ&y7$6M_x)3D[ Y6:t`H*mO׆ 2 ,A h]\\ՆMzȬsVG4x?|/XQEuX:X"%1k(:Ŋ`jX-ʻ1i|MA}j@-ʀx`zX>GcuJ\"ySlڪt% z~>(Ec/b4O?V`A8W=w?GB`.2Zǥ!$d2! '! MdCf2/L6d6M&d&M&$6fشMb)_4)_dEE|)_dŋmbӤh}&bۤ4)ZlRd(B6Y("a EVC/D_!3Ğ/D_ˉ=;V<{|MmŦ|Ѭ|S"7e 3{uZ1%hZV!h:XIM $gRd Τ DDmAd 6D" D$ £Ü w?ZxDE~h8QP?~ʧ?vƢk=,̪N]Yz;Ljʽwq= R^[rEPK‰ei?=;0tD=3x@ =GbpCաA5j ʘ,+|Xn]\H4mMHg~n|O }}̓لL6d&d6! Lȼ2ِ$6OMbMl$6fdMbbbMl<6^O}LM$ @_OH3 ^xѾ:FN{/XĞ0k)ĩ9{?^ANBOIBF|>*qB^|zC5 a ,iNh:rq#D#&v5D.E*mªB968 S>"3) "< b^LKGϭܖgM|II[&4_FMPjh:BwȉXuDm.-/ґY;#dsI8WףWPN:T6]#u‰oeб=0ꐂ@DU? DUrfI^eI;8{yĘ5wB*W`$wT%߾UJVGBhCs2k"/[GrD8zlBՐلL! !/&6fؼlf}^|ΟqKQ?m*V#B9 *Q*\=B[S x4b~3}E\ىV,(!QI/(h9ߏD u=A=OH$Dǁ<1(-Z#fO: 1Hh4tZ8RO}(|c X|:t0w,`($dOm pNmPJ*QXBYЏ\4čq>SwI+ b`4yy%GL*i#/`)"n"9_NyC㾀ϐy2Ɇ̓لL&d! CG&yllb$$6&dmMŶ|Ѥ|)_dŦ|bb[4)E_6)6M?"x}"d/BPd5)M p>C^L)Mسc#W}&Z._d*=%hZA<S"7i"ӊřԔM"hy&ņL DDmAl 2D" ĆbK@I݌V|IEREEirqF9ZK)k"#͐ZN]ƽn CcQ*k(eNCrԂ8cdY>Cy^,;>  o1w0 B\uzơvn(qc4v zfȵ22+{|}+눷U EM)oKelF8 .p{ &WhKR}TfYx`aS_֢FϦh8q7P; h_"V u185͐(U>3Lu..JZ8tp%8)̻!! f!vNl6Ėмo7R PyIXGqե@?"h[8kM9rgX3i9T@(iiL|RЇm0v8G v:]E}NJ1_ 7-'_ƕ⎅n")Q@:w*uNczqB9YH ǐZ i˼WQX6yL} *N+A@^(?0,qAa s-bW #5}%@RN ]c!vL!! !OwNl2MĞ/-_vbSMwݤ4)6 ](BoC6PgPDd\cj{o\n#2|ؘj Zd?`/Y, G8גuj&8!ql#l]E %h IH#ZۧB`nS,yXɴ#_@EA1yX;qÁ%QNrU?]iouZ!*/|Ab.pFiZ -^C!6PJpji&n5%y]NaR(A YnGaq'в&j* ͚'!A2y5d6!blC&2/L6d6MI&6&dMbbbMl2MMJ.F*= {|8|p)Km&(٫m w8aWE>B:0Gé:#6̤!jve}n񅣚I>,=k9wu&_$o> xVXORwYԁ"FvG8jBݐɄ̳gMMo'6ibO/z|)_4-_&EMnRlM.(S(2 8m9 8g>VySk6Ŧ|bL&Ė"C"M^#x"K!hqZAbC.DDY" ċ3)z̤ DDmAl 2D" ĆtZ]o7'IӃ8zW,[S̪zy CUy)W,>/[ry\u)߰w$SӋD|r_OߋKoa8F)V7[`lHCnIe8Au4h2P9[v"'G׋ԏCS} ^[$zdywU&<]^ݽo˳ͻ߮3Qpxv_ h}yvxE_6hu G3AK&Ė"C""ȨxW8 *6*ZTUQ<71lUdT"<iWHFF6FZpCi+hMA#[A#A#/*u!h4zlcdسUUWy&[}l/^LL[yb{&h|TY_ݾLo噠ٗ'wfcb3l2mΗ[ [iqʏa$d y6Rl ڥhcK!hbKxM,džE,7[e]e~{gs'Npupk=8tuU_TB֋雯]?٭w_/H3tv*&eW%:dبu0 )9Ėv-xJ.⽹m:Hи+k +.lYLɂjQ텍S xS W\7o'1Q]ۊ\~CA8<\3{ 'ovco54d Ҵ14Nsd{E߯+b.s,[sJ9Fr+,VUjυmX |ېi7dz;d2!4Ibnbۉ&iG#{`\In= շփT[܄ /ct)obk-6IzEBZL+M頉,̮|!7H*u8 wCCf2OC$6&6l=)_[E|Ѭ|͚6)zIiR4mR(»P߆"dϠ4!5lFMx^"߷`y\BxA`? eo(>T>2-4lQln092 V|Zi~93+" *~{1I(>Il4n U͟n,z,/(eu)e܊#_ysy̐҇(x3Qe,'p{UQFƧ|AzX4a[nvsgۂDE+t@1u+5UeZcU$,lSt ڎ,} Mȴ2i1d! CG&$6&6fl-jGWh9ƏrQW#X*b Ig9 0~D+O#d/8_G~hrHy_JCty<#p+߆vc}Rt++^djJc/7tBI 1aɐ>Lf+EM)=~]wKWtXq1%|r?Xu/I>b+}B1Af/RADu2O 2?g9+Eݯ"muV EHHYX*JK50E+/ҕ%u䙾#'3y7d~;d2!,Ybnbۉ&yسE._l׬In&ų&5" Em(B 'NzpB~ٱwb؏cŻ7E|b2DAI%AcӃ6DAI%A8`K!hM",Ćř3B.DDY" Ć"C!Az,x0zv/`Q?H]Nx|!)bܴ_WۙdVD&7 2?gKHѧʬ-"^ > e䜾K@C% K iXԔ@g_>B[ADelZ˸ }\$$f~ FѦyˈF*vv@E 88ؓ=| !3A_Bz|9H1;݄n5Z֐Rp,"⒑ު[x,jqяkvKwbKCeBIdB&2OB&2ɆL&d^ !IbIl͓fdlbIl^Ll~$6jrmhRWVBRxDZс|t/'R=o>Vix6THt>|8㹊ߐdž'GOGG/b"6~QJ,U V54^}TmxdS%-qqr7{# 彮"`}:Q έw, * BqPLVꞣK}f(ǹ 3Իe| '! m< LlB&2y1d~l'&&6OMbIlM&i1ئ|Ѥ|)_dME|-_d//LIbӤ6)4)2MLbۤ4)^lRhR"lO("l-BPd5dY4U<4uoz }NPH,\ny(p¾8`) VN%t(wLE?KljQuU%Ec}҇u(]u#r:M!ZXB)հ*>Q/DUIAmօR5K ƐJ9Yp?u^QaZG]Ӂ-_,"HWv?|zx4NJ,het&l%2Gw zLPVD&%zq)/XQ9DD=:n!aܣc/ѴjΣkV}F{%y~~>o! 4W_5Q"h\Aݧa: 4};uPܗ m< MlB&2i1d!$6Ħ+>Mb?dmb/"|-_<)_l`EȔ/^,_d~h}=/2M&E.ME"EEC/D_!#Ğ/D_ˉ=;V<{|MoŦ||-<#xZA4DmA 2Dͦ3)DDL әnF& DbC!A[Q PjZt\jUQ|z!Kvė 5,a׽-; SUϮx=<`ъ O]}V#^mYe<ՊUfiE2-2=Vy6{WI]2{wI^o=S`U'uc^E*ͬ/?4tTE@*1 }7*gmR co3S"7e D3sUE0NpbYE@FE`*My̲"XⱧF4.k8i\E_SA#m l4Scl2zlWORS=6o걗eU~VW4S=6o걗ɳ'/hf/}- g{[8UѦoY8Alu6_ní|7V2Vu ˴9_^B~ԗȌMobCє߇"ݷ Efto}ˤlbF&ݷL4^X8cE2]$dv5E۔{۝ϝҀ{˛ 0akF]PnOɫ5p,4K1"BqOoz=`yQJFH)jƒKE]棆ey)Q)^퍱IC[u`ݏIWaD@b .b/~#FPrT+Ao#dKM6c6or(PrQwAq-UhrsjZ@nοO"Nh'SX:8'_7^ph!*WCI5?z؇@L㢴*?!m{T?Fjj$ l+M ZXfq 's*=8TU{qxD M/n6co&mI0:09uHMt!k9 _ Y5Č57=9a4aOsuȅ5Rnz'%VGFǽ wCC&2B%6&6lg=+_[E|Ѭ|͚6)~IiR4kR3(»P߆"l͠ȩaGrյPph%U.l+汗;(@JَB oAjK]9 n܀Ho}w:oϻ%].h1/(U ڋX!B9e]OYb,6V[La!{ofQZVɈO1)4EKj*\(!wI^U+zAK#91h7/8?WCvפ]<ۊ^~a!9RU#@_,v}L`<.Ԇc-zs֢x6UxIlج*zG)^?6J#5a*?Rʩ|A" 0~z^rTzW9{)Aqk>DK@ :i̤zcb8l6pAWu9 [Wu JdՃ饓HleD]Fy7d~;d2!4IbnbۉM&yسE._lMפIn&E&5" Em(L'N~pB~ɱwbc)_x}-_l-/~/C.ěD[" ċ<6?xlC.DDY" D zL+ DDmAl 2D/Τ12DAI%Ad 2D"DI^{GU}M4am|KyJ}a/WY!AtWjau<ҽ/czssz(]B4౗! )<5DqrD7ʋ{(j_ew.^+"6ǤxP~!~I-=5e%vywU&<[^ݽo^mŦ݊MoWuسL}˳ͣ//z}p5شm=c8 DDoAl 6D-2 EE@ NUQ𢊀 "]y ocتȨhQE@4Ү6llᤇyWțFF6FZTChؼM=6[=6=6-g̻oLX^ݽLo8ۊMޮ3Aw}w2ݗgFF[ŻF_1}a+ΗisvfJVYȼ2lN̗AK&G"C"D"}K&ǖ#C"ǖ223R3 'j8m 猺h8i!G Ve^]2@2^v{SzL)N41E[W32ȷ*\pr9| }$;X]Yz"^(BqÞ oƣڷbgte4rܿ36),tx! T&>&ٕ`:(]$z⤢WL (Jj9,\CBij[ח[yEbPp,?]; qi2ɆLɄL&d! Cf2IbIl͓&lmbIl^Ll~$A6QHAIIr}ĉxGxE%gxZEx8.[89l]+FszDp<|Mߨɋ%ɉ Ꭸi:8Gm&W?rqCUa׵r4(q.0* ;yuU}WLsIシECƕ2bA/ybK=bĖsmN]^M,¸OJ<ՄVP8UX-&WTy@ڒȯ/w]FPSe8_I;!j:|G9D"Q,ǥ8~]tNX!n2pQ:ۃ% Mȼ2y7d2!,mVMbnbIl%j_>$GHh\E/KrmP,cE5!.lMf k }#hQ~˧i/~G,=Dޣ їJәEX>etzͤƮZG K7v'5Mە3 i$c5{ׄx(J u6vHm7XxG{ r"װ5`Q/6! y}ل6d2!bMKe2M6ge2M&e2͋6WY6m"|)_VLE|-s_3E苿9V|iRؤѤ ]ś-!Eh,ޤAN }4ɵD4*mԋQ ^yZ[7F@:޶-Xp 3.pN?y'9+c&4Q 9~Ee.W].XbMC߆=f_2oL&dAȿMlMl~;$6{Vx|MY5)mRvbӤh֤fPv E@B ]oYO99V>Vq Sx}&"[Ȕ/Z,_(_]"6 D"ylB.DDY" D D"v $Ad ^I%AK&ĖbC!Ad D!j6x|Tdq3{Gq:h: yQϷ? Dgjxf|?nIڄ?t]HZ^; '׫=hR(I7r?CrYeyC wr.7'qmBs[>A "zW-%@$|. UUW*lg{v2gw{w+6]gbO2e~/4ߢ/E_6kyc{p~AK&ĖbC"IӨxW8 *6*ZTUQ<71dUlT"oT_+hMA#[A#A#/j8 A# iSVHFHJ]~wؼ&&E=6[=lywUVo2e~{/8v+6]ggŞev_ uo/z}pfJeڜ/Ⱅu2o<7/D}I%AH7Dv>ڤ}l>^}UUWyF7o5ᤷ532,CYPz L-Rt cln|@uLkt_rfᑉGGe@0)9*_@ρ)AχUF:YrMހ9ryY*rmLŒ3m8{\xvrS߈,bxCi]զѕ t1KQn>p`t;SBULk[#ӌNF3w펭)@-¥Ѥ~2o&dAȿMlMl~;$6OOA:C\%K.g9^*aS|a v2>] *4)|3QvjtMJnw5n(O8\^I]/ᇛ˸XjUSʂ,L^uG74甂&UU%y]-wۋ.zWUGtjFŢÈsZU3RToGڄW@M:Kנj]:@v_Kw^ UѸQ\` a8(zE06VIa# qG1(]gɊrNucn.Ei݈aW( /{aH]/5&9TKbHt`0E"rέ(t z YB=3q _$[a,`XbQ^gv9Aȼ22i$y7f QGrO[6}\%o6@;8"-J tGf>=v(~~mvV_hA&<[% Q!v7"Z0KrmW(ǎu]~b:gZT^ʼ*Yel/^}Y݊oWu]m_ݾoـ}.l D_M3AK&D"C"IӨxW8 *2*^TC8aT+My [-"0F4Ҧ5ll+hMA#[A#A#-*u iWMzlzl6zlZccVvW^lʓL{3qw{v+6]gGŞev_ }yh}k6{/6Vڝ/|̰ly7d~;H!hM-DE"DxM,džE,7[e]e~{gcgNpupΝjDdF 3txS߸4_zWp}F^U ĂZG^".BEx${H̀6p@W(UW]>Ia!%RI!R^G 8OZ7?>Y\'&%]7L;_w\2IJn.j?Eێ+{P(jV Y~1ZBT;](w'ZK!%dL&d!$d2! llBŐنL&ydlb$$6fdmbO;Vn8QWoBߘ[Y׽CNf;5 |8ͅE5eY <ȅϾvHJIø)y^Uq\n7m}^lJO]pjCCU+"ކjψ'0,6Aǎ`>tzቔј&2b<@ʲbܺ;3d6!$vZ/eP>-4MHq/!AF\c&%RAΩ sY# VO"#%8U:,$s맰[P8.E">nbY*6VG'zz@$0(tuE ^*ӱ [=<3$OӇ3(IYE,HbsȢ "C c|~V)#,dUQ_N&1P{.ʸ%x͵`d֋ŘD*l[h/> ǹG< MlCIlBf2ِلL! yڗMbIlMfllbIl^Ll~$bE|-_4)_dE|)_XQ&6)6MmIbӤ4)MM&ŏ&5C_"dO(B"d-B~@6nlCjQ H-_6>w,yS;ᬙOw6%UlR<}nz.I ['uV4H B9[R2N99u,q(1e@ sY䆡"Hɰ| 1[${G.!&94{i{Dž( 5D‹cbT]4AvjLޗT}p&lͤ<\rʩ5\NXVG u`4qߌh+vPpL+Z$j?JXHNw }&d^ Mȼ2ِɄ̋! MbIl^Ml2MM6$6-&6Ğe!zd(v)$@QfADYf/{9,0Y~=E)!kT`>Y$D%@9[UA",!+p{xҶcb[U+FW]}eD[C8Ш՛O^h2'T|s߮J qEÅb=pNc-kĥEЗن,.]JCQQm);gv4 ?yQ$*?{PDhgOObp@k>/[*ջU6! m4 LlBf2i1d!OW$6&ޥUR&<#up-:5qqnW.j-U͖qeLIM<'-`B("">;Mn.7uQ:bæ tI):NV@+WNo ;#9qR;9U:ZY/lBʢ)\:w>%סI yWby2Ɇ̓لL&d! Cf2ĦIbIlM&llbIl^Ll=˂hQ}J>E>3xtB}!KZ*N$M ]ϋ,ұS s.U[8M圇ć-ƿ.n/nsjǝh9ynYz\-vz}|Q,2ԂDquB{<P!v2# m% 8Vދ ZZb%&iE+v8~<_xT|GݍPgT qDq I M+VC~L+C&2i1d!Il2MM&i1&6Ħf?D_4KۘI<}e @hJ) 9Lrz8^'oe[К^dD"*^/,빷qP\WKqCoH]@He5Q٣iꔺ?Fnʚ8 O$>Qxw} ~cE$^GW8W>C&b#Π%%qJ8^`)C%dC-NU2F,˒UO X}*ĬUZ`NړKRY. C@!PR MdCIlB&2ېɄL! y&$6ĦIbIl2M6$6/&6?{RmbSؖ//6M"[ؔ/^,_(_m&E3e&E9e(3e(9E!pBW&NJYbyE뱗kF*y?OA/N+<ī3opK3?O!A4#Al ׉ 6! YnfKتE_\ gFtCr(%">Iru}ǝ Eo [Hr6q8O-eNe[\f4LёbbQP°Qw]%/&Ye2vydV*]e2LvJd/H]{^ŽLRwZyRgWꀆ&}y6*^}p`N143}`F*i Zd8'A*GТ_NL1"^T pW5V8?/hU7#% hc==6iUʓUVW43qc󪠑'{&ht_3UA#ML/&GZ}p~L\2yl/̗'A-A]>^%uy3R}JD9ߧ$$H]Ry>\ߪ@zI;x^^ Mnq42gց  L- 9K^Bo>;pWdoJS( j:+VMԐHԢ˓."Wq6rz$fy_+RoFy1O$/lSZ?4VY[]c'އ1lMaaޔ+PQ X݋ɝ+XxQ%Bssr/N;t\ytYȼ22i,i7f4Ml2ِe6 )=!nZr;yc Yu}q1QqYqǯlz:Hsû/%Eu(]~ŘN8x5 h09LvհsRh8x^M6PzXفq<j8 /^9-\50뀨?^ztT;Ǫ\8wˇQ]tH[H(85MȤ!!Pj+e2x)7*\UWc'4M4>И\/m [ @Bl0?+a| 'sr0"YrT) P Ym*Moƒ⯛>"rogR?KX 0591C?+6Р;V9kOKqIM\ۣa eG2e|J?W5\6HP$K?wCC&2B%6&6lؿ-_[Ŧ|Ѵ|M6)~IiRV霺W|<A}IſwVes.+b1 ɹQ]A w)/ѨM (\Z/N&ή{%bާ> -ÚD]ZA51bJ{RuVhb?3z\XED.W8K_w#c0&@x]L|U3 |ǜJZH%҈[p5ɩ]! xWDGÑL3TSr .Oz^ӉKZ`Q\d =<jǀcv m=Nix9?_c$WJʪ/QfICm.RQO$Xs2,<늅GX6H^/f2-Vݯ ШVR,jªa܄Ke ֩W7XWhE1e],3'lT~&~>ދZ7)_%dL&d!$d2! mlBŐنL&yllb$$6&llb)_4)_lEŦ|)_lŋ勿)__M&ŶIѤIiRl&EIbG2P'P ! ExE@2P,aEh"Q~;ѥX>/:9,%!l>͊rnCߜk?vF^Qt% Kk#hb'da cތ :J+PJy|c)T\σ5T$15|4B@*Y㒇EoǸX]w(XBr8Ҵ؉ZЇo\ixZz jҥ6qkCMZG1Q;jUbpRpSqHG9XsbA(&ƢUi&dZ Mȴ2ybbIlZMl6M&y/Qo\8]ՂiY+z/>G*3:k^)$/Ä}Vʘ^}O3 /g"?ȡ&dNѺu`wZ亪\ocYd\g"zbVԇM x#uM(@\aO _jJq{2*w:}()bp{mzRho\ >oSЄ{y. ŚJقP4bwiI^8VRj ? _w_r|oSX쯐6p$qJn̗,x(f~#/!$d2! &! LlC&2/6d2͓fd'&$6&شlMI"SȖ//2Lb[Ȕ/^,_(_I.MŶIiRؤ6)6Pvm/P E(B/|yy> 1R_%to}D"gD>džݷJN>ڤI*?IE~J&ݷL4O>J֣A ϗyb79S s\1,@|)~41l9߯JwD>WD?<8Xѩ;9, DC8EWW,b(g$$ڗ^6 }r¿:AvS,|S46צ4+}O2o5 QI_x2:Tzav涐صc[Qx0ʻtĜtS1l M~}[9 };d7UQ9>'?=/s睋&!nvlBiȓĦĦMb4wedgޚ xPXІ\aEgb_QoJS,}-#8WZ#_*hrcn5S7j"~QP.du:QDR8yEnI9*ƖYG=pԙm,~ė.OC$f6"].FxJNlWSUz`CB<cHtj2.hA kŠ ŭf*:V!,a]w5gv,g_4~ @6bP}4)zm{\z[,ԿQs[1?F#䂈[TB x2 ēc(,"x raAVSJ95mKRDxy%>}h2FVtΝWP;7q>"ƻ^|q38,&J\3 lk#VR%ˎj^Bz:]! WCf2/6d2!bdCfd1jb؋M6$6/&6&ӤyBWH^m*&B+u$9+u_1|q:dVb=D|-r&0ũMT/9yP:f+IaWP ~L"ǽq0* 4*P.[Ð8!܏M.д.|.<A$f<ϥU$eX^b;5֢v(]?2~;9n=ce:rWeZ3>aM=v"(4r֪ÍT 7xM }`oCݐلL?ͻo'6ĦYb/z|)_<-_&ŻMnRlI.(S(2 8m9 8g >VcŌ^+_ؖ/2-U"6 D"ylDěDY" ċ D"v $Al ^I%AK&Ė"C!Ad ~AQn}H - kn̻O黪"UӍ`XE(J:`[0va/'^YmÎ~r;lq"\t vB8]c,-q93wz4ߏ[Ělo^qM1 SwyMT}ʵU=)CC 7DOVwW^e2̳Ue^<ش[={}e~/43F_11Ʀ1|`l2DAI%Ap҃4*NЦpUNcxSVE@FE@**6F4Ҧ5ll+hMA#[A#A#-*u!h4zlclسUUWy&[}l/^L˳Mޮ3AbO2ez/Ͼ| ba |]EE[ 4lx?a[pg!ȹo9B|KbjZ@qN?8x'K |3zPW0 q]3媜Nz4`qK["]RnLֶJaUp_BIdBf2MB&2ن&dZ md'M&&6OLbIlM&y1r֙TcC8 sI//"ǥl;.zѾ1}8x⭗dCw\@G͍Ա&1b7p 1~S*Q-\n8^~8ZR:Y#v,a8zEAretűU 8uuBӒ xq?q|kb;HðVY@\OiUsTXC6V#D -JT(4Зֺ6RAd pV3)]Pnde.켜ć2ת :>KFizѣN}G`'G`g@? pfIܚz?r%ۮ# N@YIyR|ã&phԾIJkxkǡkőr9Yaxml6(Yz*6MEb+|DZ"(OUM,=a>C>ʗa)FM [7%tїHw[wa8"3ZD\$Ńa;zbk8FiWtF1Rt(3ddXr+A]?wwe0f\?vi=d6!jlBݐلLӐMbjbIlMl6ͳĖX!8C&{Eu^H,C9'@׀F<.8бƋak! ႜw=ݫZFOW&Խ [ݘá>:/'wTUIy2Ɇ̓لL&d! CG&ylmb$$6&dmMŶ|Ѥ|)_lŦ|b"[4)E_6)6M?"x}"d/BPd5)M p>C^L)Mسc#W}&Z._dO"=%xZA<S"6i"ӊřԔM"hy&ELAK&DbC!Al zA2EbV%`ygH (; M,JI-!}[ː %}Nח\BC^Gu*@Hu/ ت~:߻YҊw" RQ?4fydV*dɬ2UflVWH˼J˼Kwu?UЦ`U'u8xSEڤI{b=y%ަQLwFN^,6<*ԇ1I@oځ,23^J$ \Q~N+/+q'>=r;?5q"ژ[♥JA')슜b#uwYVE*a;x\b⿥ra86< oW4t-|^,. j# {;W:/,r[2]ظIފ +^rv˯Oqru59F0$e;.715BGGf; NEqL[2;'êoCݐɄLgMMo'6Ybx0uazJCmޕ"I$}9I]'X @@TZT ')$a AKqSΒI/|fv$.zV/Ryfz5KMUiZ$Fq\C!.^Y.?詷1HLSiʼX\dl5[]a_mq-([*H~xb jUtd(fܻzP"Xe"$z_TD,("N! *2@J-3)AS@h#q|N:7eE -cEZY;b1Sb7S|k54rͰ9|,Ho #oeX@&9*h]p榷e4zpC.neHԅG2$lQd}WР| =*ܬ ŢFvחar_x ll-}$hzb7oCݐɄLgͻo'6$o/z|)_<+_&EMnRl͚ .ᷡ(S(2 8m9 8g >Vqث6E|bJ&ĖbC"M{֤V $Ad ZVcZa %h"K!xq&Ŗ"C.ěDY" Ć"C!AEB.q m$Ju/(lJ *h{'%{kxLR={}1^'IC%2)A roj9la*5UV!~H;\p> gL/**ɏbūO` #Uǽerq4X9+HUUW*t'{w2gs/O*6Vl~bϨgŞq_}˳ͣ/O]Eop3 ĻDoAl 6D-2d 6*NЦpUdUlT+My Y-!1F4򦠑5pA# iSVFHJ]zwؼ&&E=6Y=lywUVo2e~{/Ͻ<ؼ[=47ev_ }yh}k6{/3l2mΗ[ [yqʏa$d y6RL]7>D" Dv>ڤ}d>^}UUWyF>Wy] 'Q #~v[t(/xNh._(yze`TU #V!R7]qt*2ը`+ lYJA[N`켢vWs֟0W$.*0:xX+Yp 8Ym"j|>\fV^K\|(Jx{M`X#сjTgr9vʗi2نLل&d! Cf2IbIl͓fdlbIl^Ll}0(.Q,к~#q4N៍:ӐDWD 8zu~ڤTu/w/g:*iŏoo"&CdpJE)IXyxa ^+>\ynqxer++js$r=(ALo&ن#cT}T{*qbyB6te'h \( *I@⼤A$Lhm*jN1IUEOHSI\>m]gv*[\ݍ5Wuhvw8Hq48@AjznqX$jp`/7^7FAp!"ٓ+q"W'S$ư)AxÌ3a4fi]?ޭpbYU?ĻOweyl5#UiziDlmTvhPb CXi$ܥ^SE{!㸝$T%+dwN%h &! m4 LlBf2i1d!Il$6&L&ENz() D (7\u){ꂞDJA1*EhiKT(ϒa5*W}afy}yM jt 3@jT' 4!urE/뢘i2نLل&d! CG&idlb$$6fdmOŶ||)_lE|bG2Mwo/ML&ŏ&e/D_d(BPPd1)M p>B^M)Mسc#W}&Z._l*=%hZA4WS"7i"ӊřԔM"hy&EL DDmAl 2D" ĆbKoc&LQޢ"6kvM/S4Aj7UH,@ްjkهX En295}^kVu&6}Moԝ]tm}L7R/ VI/s[5fY\` ;9?>sxx׋N15E/l51BQ},u1bW5[ʅ񾬳Ƶ/@|qN\p_8`# V+XIHA kTUg# 4frhԑȀ=U|Buq1!2<Ǖ_BIdB&2OB&2ɆL&d^ !IbIl͓fdlbIl^Ll~$|/{9赢j^Z=pFUY2yˣ!jfc7YdvoA@p\"DNCӿwz>!=Ȉ-V?cT GȻd2qCZ(Z5 2k r-^ZN}{_BIlBf2OBf2Ɇ&d^ !fl'&$6&ؼdE|-_<)_dŶ|)_X}"Ӥ6)4)6MLbۤ4)ZlRl(B"<"d(B"E(_z #sjC,)fyc9YMCl*AϨ.p"6"Vr%\X:<| {:o&Nfbt$89RGq#,: E _xdݕq7K ʆ.5t8G1{ޫ\hX%IʃS֫UǛ³;70vE=mx5KA ~]/S|NƘp{'%ӄfCaЖNqRKcxIKcEŒZn]I G"ՠ'/! VCf2-6d2!b$6fؼdMbbb#'{F8`稴1ՋCH!(Od(Pk[/zԡ׫*p 03euSLS>##WT-,[}"yU].nXXf8 {7'2; ]DTY+>g/w;r]xa (`)U-^jxVƄ~ɾ6d$hgFrOXj5d jH\&=&L_퐐DH~тB: ɇ!R/~&d2! &! LdC&2/6*&d'M&$6fشHyRؔ/'M"Sؖ/6?׼biRlЗmRlЗ"dЗ"d9 ϣ/ZMl+foNRK}5#xǶD/i%xqZ ZIY"gR"C!xF!A'/!7!baPUCP>в!&7\E Y,ӫ( %uA-A+&Ԏk#܇MuEy*,>2)$VDb9nO+rޔ5'خKYZgAMs٬2U*Ye2Lvɬ2/2UIb/43R^&iq/c/OTJӤbϨ?" Ol@U: WXpc)ī %x| 'hUE`"x_81ЪchQE^%uy3R}JD9GT#ø|Xn̿xX~C PBNPE-6DF @3ZXvRb{e1'Uuޅ^_E˂>8X q( 󼏹ZoqlW?Xͼm0.INR~\-uzUǼ4@K^h']}7?+t3_kԽ,òGw<C& Y4tQĉGΧ$*rKlpL;VrlwZ*-Dl9ZE9.[kQ%,ñH N?$QEao $% ^^?!ExZ՟ Gp/8GVq8/Tg&˄#^?G.[;GQKJk .B>($<r9l]/+ᔓV}6yoCݐلӐ'MMo'6$o/~|)_<+_&ŻMnRl͚ .ᷡ(B3(%R֝UD/痐S#X85ܘ 9X)o3~rrG1Fqs.c%gC(b;c:8" (Llt/ƢV}oqI0-Gy?Y(G 9Q͢ `VN@٤AT OtR?ģ<˄8 ʴ91֓bp6% Ί9!d}|4|dsCg12 *.MpلL! vCf2B^Ml6M&i7$6O{vҾT5"j/$yI$eLix:ABwj=/QO٫_NLҊ^V ;%l8VXi]¿^XDG+YA_8g k=<%7xa[I |2μ$e 1KqQhn" > [Sƽe1K9?!Uh)Ɵc쭐ل̳pn%6df=ػ._d$ۤ&/ޅ"6NzpwG_|)_ZȔ/*͆U 9"q0DN+A#!hu&E 3"}"u"tahCpu\SV%uؚZ^I/Agװ7.W}W"ǽ:QM xKt DhhynъjE·Z6#Qo^VXkM_þ/_ZCR~=,aiE;Q *Ye*Lf/?*6]qe~/*E_6ZV2*ɆU :" "U‰Eب_Ǭj8yUF9Ad%#h]иfǦU=6=6ش*zl^^c +6]kIиܗ[-/z}G_6V^n̻!!ϗ 2DAd }d>^}xwU>puoȕHҷo?~z@1V}WNnWMI:OT&NK='׳rAɝ*FriZov_$ྪTrn%Gϭˆ}ޫ?15=e3OW";^Dce#,IS!-%(X$bRn=ܠnP%v"9HDְͬ &uoKK+5"$G=Vy2Ɇ̓ɄL&d! CG&ydlb$$6&d=!3 ,&بx>r/e2XP~ZыoK9_?;㴉 BVZD=ʵ VD~C ~\/_ 27woId5鉺U4,ǀ0| ¸l X}ap֗vx|t9)w9Mȥ_rOpu?459yyz:' mȲռPe؀䄽#( h=I} 'F!wë 4=ʕFMؼCoCnytK!KpQ:4j?_8;*7vG9uhlۊgo]QpH*X!-d,y=%4< IL N%^oX}sj(R$"#ަw ǖW{aAV0xJNF8O^"B-,::Ю5 !:Ll&N˙+R"?~{ LlCIdB&2ِل̋!#Y_6&&6OMbIlM&y1}6L"[hRȔ/2lbSh|-_ӊm&EIIiRd&EIbG/P a ExE@6P,aExȴA\| WY2_7j8_w2 u//.4|xSwiJL}v.j:BxŠ"Mn"p=H>BN+bgYVjR. oaQEVp!;^ Y,pNP⧍m`iH+!=eϡXA (¶@&CB|G%x: "-wMlkWS 2&=+#^خ:@JUC.\=jA?J;Y?rz5o^ llBŐنL&$6&6fdmbI7ph+w('eNq/wҔD3.HO7i'mTĖө{jMGzϨ w-8lC:PhN2H'H`58h._BG8n,@\Z EC&3(?Q5q`YGE?2ِ jZOOhDW2/ %9x'^w¢ 䒆#Qt҈k22.@u]߽ D0h߮ LlCIdBf2ِلL! y&$6ĦIbIl6M6$6/&6ĞVlSؔ/'M"Sؖ/65ئIiR4C_IiRC_"Ac["y?OA8DΤ,D3?O!A<#Al ׉ 2!7!WbaȲ1: )^5dN|~Eo^.JڇԀ7:(^*>u=ؠZ毫RCܸ">C$ ȋWulM~4Њ ?W*]e2U&lW**cK.O%e^ u'*ZiRgWꀆ&}y6*Z}pNJU'{p UApÖ́" ZT/cxUE`1"x_3N𪆓!/i8Vߜ ش*[*d^ͫd8yUȓ=4hUȓ<4 Wphԥ*H?O*u 猺e./E4~Bf1s1_=DwTIE^ j%pGӒ?<$krtf;{N춾,ېMe|#Vrcw{w;FTtȽ9qP3M !zN_CN^Sͮ_GF\B3>Cև^r( 4(S4p #wxiaqEE]e:0XxliR ՟L!! ~vNl6M?M~ToV' ř_''M C堢.N,zq8r`q3oAc= %br~x!JrU.øɽAoC>ѷ!`Y^9 V~2ɩ3=K/ô TW|>)% 0F $0<($Ӥ\>ABS MM)hB!Ɣ\W#,C&qY-}zHqX>,'Juol%ÅjB>@7!ˁ;yW*&vEG\kJKOl)bnl#@N>'.-F.]#/*vzY{='*xC<5]1A~I Ʊ+4 搓:P;tq2LoL&daȿLlMlz;$60Yx|L_6)mRv"ӤMPw E@19Ķ!Gц=XaҐU@[kb?B´Bۗ}M0*+ ]n:5*dme֊#99_$<3) JAլW$=ѤBG@X*xsI_%8t/#`f!Q2 ]})%T\SmSMK\p*ل̫! vCЃ~MbjbIlMl2?NU~et'Rf/QN9}U4r+'[g5^-}"W+j舿ӽ =}}x7(oC2ga?FSkhB$AveƐ~}az&D@^Eb7}L1Dё1h2Lo&daȿLlMl~;$60Yh|M_6)mRvB~v' 8qE ~X/[Ȕ/^-_l)c ī<6"sDV!xuZAdgRl ^I!?G=B6DO{C!OAb*U16iMz”ἇM_svqHukȂD4T{88R|&߄l%G]|ٳ[r*&/"rD'MQ hfRXe]e~{ɬ2tJ.ez{/3~bWn_?"]Eo"1ùmw)3d ^e8A爠ȨxUEFE@J8cبc~$#hU 'A#VFȫJ]6FSyUFM9=62v2ǂoW쿫q/}~<[F_6vJfJV6V͗y7d~;=_)DU" y Gtst28GN~[ùNiFJu꒥5_%;˧xo]iu'MZL.;⨇h@)I#Ai.}'3}xdy7)oCPPrգP~2Z˨Amr8CR.V}܈Z%sa?.KmBIÐCSqU{xW!5xޖ /B>PZU1®p[ ˜u'|_Hg!nvlBwNl2ͻ} "0n8݇1]r-^|Ҏq"s")Z]Lڣ)/*WGt9e[X5T?Ð_ ;A۔U*Tw_>,HB*h TƍXN%/k*/ˣ)(tuVliJ 8y;j~jvIk7S]%z_A L^2id7C^w8w3"p=NBBNخ?Fabq!AŊN{^(vUmz/L5|x:\6-ShvD6.6){ܩJ(?Kl9pW&߽kUU j-ݴTxIjNRC-@bػ!! vCLbvb/z|)_[xIMM&ŻP߆"lBrw0@eЈce3 bP&wQBM C6-L7_\.װ᛽l[>a%|%vN%TƵIܭS׷@36 ?*_2zg!N- !K⽍8wbBZ^=ѪІl^T L&dZ Mȼzl_VLbnbIlK_Q ,}I|83/KE%uL3%]Fb=vH7W SE?}-5o}G|1W!-/W^h=Ǐ=WO/$%J$ F! ( L\DGm1Mk5d~;d2!vȻMo'6ĦĦo/2w6)~Iv EqE8c}׃5V9؆U D9"B괂 D9"ΤA:bC"C!"sD 'D[N.yEޟ!E &vcehzRnǕ[E;YԊFG&I:ul4VD(*JϭX\Y^ez{٬22e~{/˴MVl~b*v_Umxc,IU ="ȨȨxUEFE@9cWUdTߓRW5l4>З4R{ƧWdc*۫iw/{cVlzbݾLo\GF_|ͰWl/nv|Ґ!hbC#C*GGo?NѮp.}ӴEB1)- L =_K|Rp< |GڠG/$n r!NOtt^up.[GEn}eY?~؟eQsMQ>-Nc GzȪK-/찰/-weʥ;/}ܱQz] "rr'+O2Dq}i_0 "[v,M\C ٩~r|qi_BIlB&2OBf2نL&dZ ll&&&6MMbIl&i1&$jCjEV-ۨ>vD#=)]e:(\e|\jm?"ȥ_?,}2v4p Lך}5I,sU39ֈzDW9oˮ[ו?@;Ig0\{NJlAbT<5RM)R@^\h991 2 @UHL`Q]8,H'aTX37,:m $l8~ X䮊88_'QY}^+!Gb[a-Q/gInkm2J.Mo/nvcLzc/92wa;WUnٳy>.ǁva@',j C񸬽-UH8TyGggY+VozཊRcЊ\^r#3؀rKyUplUx]X2#buBSHś'b!̋=8BQqiuN:,αv>1 ~.c%~Xcyyfai"p(S|L(럁beTt씌ƟQL_r2-B&2ِi2ɄL6d6!flC&ؼHl6M6ylLbMl2͛M6ٔ/Z/2lE"Sؔ/ME|iRhRl&ŋ&ŦIiRd&śMlbEhE@PP aEB2P6[(r^"A[p)E>8Vɮnõ<BYB~$ n`>ʂЮ? 1VN(p7X9IOV޹ݼ Sx&aS $ogQ0!`ZJ P!KbtS@cjWSRR Y%)7!)t,+>*q U㱯Q#C8gzzTDQ.KFqD7 jW;(NJjS$|U)qU`} JBD#+:3O|XՂc 1r(*ygaXtUx Lȼ2nlBUȻM&i7$6Ml2MĖ+m+)ЦQ?YXJAQ;]קBҋXO@Br@aWH)h @l"e~T?:zS ^EJJґ}6XKI?cK4)(A%"}BCBW͒Fӑ.: tzY=/!L&EP( hyAQ8wlWc7&,QdYJd"EiwOumGMǣ?;IM_ kEج2-V*]eZ2U&dW***od2l2%uW{ݤ*"ئW,U|SE=Y4;cnp+>d8ߤƾp. Im3l Z1*pn 'UdT*2t]RwIMo]K/>ImS+ u/nU>| L,՘L{s+Sbԁc?ή\{}q6BL Ly?y:ʫKmU4pSO_<_>g+D+qL*8:lbnSzn~zrwxV$1?$Z\#ws] ܑgGQHImeܝ.'x%኎@'>8j2]یi<H&u×"D,L(p9z G4ʳO;"qvtq՜Z?l.3Z3ž c,<\ZyKS>H]gX.-eX|X8щzX7)ܦ);'Y ҴtBKGBr,mbliH7OrcvgP $yAyul{M3y+7^yjsr.hx^L? O&g}Xywh@[ ǑS>(ej*bv}m ~,1/A5xGxB-O]H)JМ"n27qLOL&dDMltbIlZ%|EO/6?Qڤn⧛&&"tP %yh ;ag0{ G;A9۵ϝH{$o B(- ';'pI=U IPp x>X}A}K@a+rkaНTU7cJmj8sJT ߜ&Z䶼sxJ&D Gbvlx,; wi^A {x!Yܘ/W=KNJ"N]U>)lZeB&2L&d ldB͐ɆL&$6&6&l7mbd|0N1~j֞Ĥ< Y28ZmVOTs&o-D"a8h,d|™(WYh Qd  L%ts(6:JˋJ;]{[zNFNQ*^Ug 4/pU&N"Hꛮɇ"8?":o|DU !2'm/Y^KUF_"LN{Qj)*rXsq~[mqEӡ="=GJSY"_C!! W!&6?d(_||MO6)ۤ&ŦIѲI-߅"4aEh ENzpB~c=VNJUb+Lo/LE߈ KM",ĆM,ĆD$Al ڜV%A|DY" ě3)D"AtbK!Ad 6DY"HVpS*j+T}KE xp؇$/B , RyiKk,Dc6٫M1ȗ[m<$ziEsV] yErM^ @-MgjEJAgnkEo=H3QpqBLg.QJsZ<:I-V2?dVtw/{yE~Vn+؋w2=ݗW@_|}k5{C_+w16?W fC]"nAl 2Dm2 'p7UlUlTtWC71lUdT"1F+h䛂FF2Fp鮠n  ySKVHFw|SMVF͛zlz*UWy%[}_^{+q2kŦ+A#}[_}+AG}/z}po̰Η|̰7Ѱo!ݐW#Att[" DDY" w>I}IVwW^ 'puM7)I䶯tѴܻm{Vɧ!WD5lF TL3xlw7-f:򮈭oSO*@_ YgI%5]?FEG[NLZXtrUnp q7P) K*UL"Kc}W:Wy}o <-`2ld8ߥ0@"[;'+[w 6AZ^~ ȼ:F=t1(TÉ/ZBElBf2-Bf2نL&d mdM&&6/LbIl&i3&!w]/b7qHc0 ov=57y[/ticIBw^[V6N0~FWԟQN?{*Ùls]Q,}yqPǀZΉO-1y;qjx//abEip'P,}:UԨN_bޝC#_To݅ligB$>;C=D t;g8lj _Pcg"a3+A:2/ho{Ӿ%)"3WmqRR-d2!ndB! !o&6f|7$6[St\TQ xJb3'tt!7DBZ>U+1WLUQ^K z:yb&G`-_r?qRǘ2xD֔RIxbޅ$00I]*@ u־%E4,17Td&pVH,qK *:tҤ$|TE5n2-$E%߼(Qd6yJ;^L*Z\^ __02_f/aά Ox 0(x ,Q]NH@ǖ.uאi2ɆLɄL&d! 7Cf2EbIl͋fllbIlLlͦ|Ѣ|)_l-Ŧ|-_do/Lo/MM&EoM@&b E@ڄ"lnK7v+fb/D_ۉ:V%nZ/Ec/ Iml ^؛ӊ%7i"ӊ͙ԒDL ī"AtbK!Al 6DY"HEPzJWX/jӼy?",E }WMU)" MKn1Cdh n$6M[;hD_7ȑ)8/׊HNr^pC7YeZ2U&ʴXe2Lfɮ2UUU$ue%ueKK/U|SEMݯ*6}P4KTlhV}}@9[`{ B_b8ߤƾp. Im3d ù"X 'pb[EFE@_"Xc2t]RwIMo]K/>ImS+ u53U/Knx}J{z}] 8(6=;}($szI.rĜFuY."Ps[\'8n3@A ӫJ9Dz}B7q3zV8W8#vyK"fӻ/:FΪǮER chGYy&h4!$ŃǢdC IG`ccwG5@$ Qc_qPI@_pN6<˷} qU:\~˵ͲLO&dZJltbIlLbcj y5A}EuU=0}W8 {FH ,#18N8~AnpSXze++™qHyzb~3~޹ D7M 0Kl 8b=Zu^q"/x۠^[nOgO|JA Oz~YV~ՆuqjA^nmD) Yum5zFLOGqW_ؐL'(q&㳐y u3.i^ʗN__5]`tqSXorhOzXDAGq3ܴhϻQ:< #e9$ڒޢ}"jϻq$Md曘p9A4σiw|&E$6s %Y :LBy\HWʏF UN6Q!mc:wVXaE_t}-_lo/ w I%Ac%AtDY" ě D"A|bK!hs&Eo3)C]"oAl 6D" Ć"K37>“ǒ'epM$q6s:|35]|^ԙjʋv/Y>\,E"+j/ȥhkEUroR(W,aL8ڑV IT麥yٺL.qZ<5C"is/Gȏt#IUCK !皴E$.k&+_Da i풺%DRJϭ2]e~zɬ2Vy^}˫Mw+6?]W[^eۗ龼м苟F_1܇oblzcwm KM"-DM-FE@wtS8AVE@FE**6*+*6*TЛ<o  ySh84]A#444ҦR6dثULOJ*u/ݽO8׊Mw+6=]WƷt/}y%h}E_|}k5{G_fJwtsvJfʛV`אntȫ:}0RtߤAd $2tߥ&GcC&ǖ[2]e~zW*4tWOk8W35]~ЦMQƪKDW }^*Y}"S@>M&' E;E( 1v|Y$M%Ɵ/B<:E,j]L>ԕCA_,$ܳ0[abt,\Q{RT21秴$ҋIjI}x5mbbQsǴ肛PǕG19f }v\3Vtq .>)$#1"Af{5|2Et7dz:d6!*UbLb2epR 9yv-j:FSp=rld;}㐪AWEyQ$k܄VGbUX{??7T8HԦ&x!"/iGF}b9ʴ 4?}M?.?M#J|'ⰓR[Os] _c |(/s= f!4qqLψDOtz0WO-@ӫ/Mz^FN4tJ⒉8^N1tdJV[wjX1Cpܧ+:E‰"Wyz^{-'9ow(:: Vĉ5}R'\xAl,w hBtM]2^O N+pqR>0eYsѭ({Y wm^ʀ0IZk$ i(ëŏxI,BGE1v{j'TgҤ̯_}&Ӟk&u^S( 'B!! >_&6=dV*_t|MeZ4)ۤ&EIѲI-߅"4!ExE dA.<#(5} ' >֐(?1{IXx(OY`:zitWQUN_&ҍÿ́!C3(3qkcZ#lY,՝c#S.4m,6]rtd6tfXM*bMfypiH$?*뗯^|${OM ߵBu #QIa\EAޝH W(oؗ'ej  aW:4戬JA>Kmt|U Lȼ2nlBUȻM&i7$6Ml2M.2źB9o\!`D/DM1`1xT۸cU-MUHQ/_: _*(xEVm5Tߋ8J'Jԏ/?PS;' QNI]8Ow$/Sr5_rV:+NlKa:.Kf Nfi*~NR3A<^R%W@duA\C_F;dK#N|r$xh8|BvX:1w>V=iVv Mȼ y|7fؼJU募._lתI&EO7/G_tP4rEwї-_d/2勾}d AAvZAi"9"ΤA;"C?G!A"Ad v"_V2V?7_!!ϗ7 6DAd >2t}d>>*9Gw5s[̗q6wW8^tޗ_`*` $Ơv%IFy#o`L\)i8Dq:-bZ4Q=/JuUEi.oe.@IL"'>t8?`Q;@AL?e~ x~v2 QR jZ\g)fV;tP.wr:?E;7}Edm KBSoܰNyo!"d6! ! LlC&2mLo!ĦEbIlM&dlbIlLl~KZ0CICw*0.hI£Oĭ1:t^=˝A$ VԂ9:^E~4%y%-\旓rxHDqtlEV3\,|r %Y86Q ݼX7wQ'r{qp91"O{%7X^L&Ū*ދ)"A%=*:L_f^9<4"/\l9^#pKMtrR ~{>5 xG^4K֢ئ&0B.F+]"("]u8ӟM$M$i~jtȠ);1yɬ]N1`,b6%eaXljS]x5U&$3mHTFiW@p1iEuzs&ԓxaQQIətU_h]QU/6+t@Ө-wqR3h'NWm̋لL6d^&d2! Lȴ2ِ$6-MbMlZ$6fdLbfb[bEE|-_(_lE|)_Y|&ŋ&ŦImRhRl&EIiR٤6)6PP a EhE@6P,aEh"_TTd`_KW*;a+j'>ΊJ]0Ybe kl/nXRHWjNW˙_Y`9{}̕|?#;Y' O\JUߡڻ3@Sq.Jjcu]F*?6Z@ɱ$9>!M83S;$<N/t5i:%jBӔ7gZD:l@%RuxDNy&t)Ǘ}Z.)9=A i %0uk~$:uylV*bɬ2UflV6W*˴KR{yEl2me{y"]{Ew4˫ϫxw }`A. b8VD2My"h%]N y <7U YiWiyA#*u6 h\A޻zlcӮlvɼ+q]A#-*Jk]A#/J |wp@_1ϗiwj˴9l2ij|yE.d>$~t}KbW}KBù[M~;Q|7sI:X] QF_iNMyv{r3w=*pɂMeEMHZA2E?uO6\ULk/.F.$:q34Caػ9OܹveB10׵(]ܧX\Zȱ meo39ŤM'1[HJOHMdB&2-B&2نL&d m&>Nl26ydLbMl6MM6D,9Ԣfq8" ԑ68Hh;1)%(8m:oP)f70=N=3ľ0[}X%= OH }IjNC=Z.AMNBEOZKkp*:/h"ql%l.qqBA+u?]98+'WpǶԽ9jX؉pcR<lI& :wY-<۝FBD8bE;^Aك^$pD?AzKŋ}^Ļe{}q:ЋKs8sq,^o u%MgNrXծZ (ׅU&=*kH IT}W~RB*7i:oz ?MlCElBf2ېɄ̛! ycfl&$6fشئ|Ѣ|)_l-Ŧ|-_do/~+_IIiRd/&EImRlm6)~kR+@2P,!E@P M(LNi%%+a%w8.mt[s]"LRUe tb3˫E&8a#t&TYpNB=c+7Ev:4$n!!>>|~.^(XQ+@-E&Śߍ= DuqZt< 皬 t6 mdB͐نA&fbMl6MM6*~lR8m`%ku"d;NV*2!:8;c:|Km;eQ!*@^/~D/Ԃ" }~GLS,mޫF)HC0Ib|Zkb8ٍDFjå9U;4INJ^}Y>h p Ú֣~bbvSWRاGqvJOx[RD+[ M|0. 'ޥlBU(5U .&^&d2! ! LdCf2oL6$6&شHl2M&&6ĦĦ6L"[hQȔ/2lbSx|[Z}Ac&+e&P P }nȼ}nbXJG_[$y"h~3iV*[ӊ'xw&f09y" DĆbCAKu`4A=??R?Zl}^Kyh{ +^Z!Ŵ9$K{apꋌskUDM(ת KzF%VD3??hE xD_.!IƬ2U&ʼXe2fٮ2UU&l2-ԥ^^d2̛{{E^Q?" -j@*}pϫV2+y`)Ne8߼6o  UymA8bWEvoŦ1++] 盕ʦ}uSq`NͻUZJzl'b/ߣ,FZT애yJǻF^啠yu1/j e2o[~̻#u^|yeKEoA?O]>%uy+R>ڥi\Q@IIOkPC懯7hDWf^`?)O3p|cDs Uͣ|:,˧/0 eNGz6,*dՠ6t]yŃ!DV$ȅ1y^mU*6UͻE\C+* a%G;p|C`ߛW0]sn~'Tq2?wU& 鸜H㸹CUk_cޱ)A7Gr/xՏ MHeK^6ND y_C3W\"^Q 8x?.d2=2i*nbӉ&i Q$^mWyQEFXc+QUN8G=PO+S}M8,vYQQ.;싐_UG<=Zw0`\!f׋E+fc` Q UE պ'("񙾜. $iaڔܒtBީXg459V+Mo$/v2ut51]ep #'5ѱϮ;^'+݋!j/ؒQ * r'thO'Rr i#9?j0y5~Gco;'dziG#sϞ)äTgJĸHWI@S`Ki,MD_iT+Ց=vz__ 1@ޕs 6*S51x@y:2#I% Wa{ 87cA^sHA-ͬIh#YLUB E쒢+q֪eάpn&v_ 2 Mȼ yt7fk勞._lתI&O7)6MWMjE.᧡(BK(;}ť ?v ĮЉ_V{ҤzeoQ?l'^{!*YĄ DuZB[:Y })Ɍ55Nt9E NМzle4xIŗ4-If4n,84bΒjES!6\U,-Xr=a]զ $Ӊ$=U/YGxӤZ0M;Ld/YErV&bg`kb|Ռb,Uy͎xeWWtXZx:! vCf2 Lȼ y3$6&6Ħ&yؗ-iv*C5_Ho/~>8I /7_u01wCIoUUbsҝog9tʬQhMx0F(8_2!Gq>^܊"PEB^ք"=/ ‚[#Ep|hk}7e5C}.蛠-tɬ0!^vƵ̛RaGL>GK 8bO仓[toce*v52&޳R Э:a4$m8Eyk<@hu'TUSDu(5IVntlBUȫ滉O'6Ħeb/-_tbSxYM6)zI}9P"_.痣/{_l"Sx|)_kfC.͆ 2DN+AAv&ņݙ"9" ĆDbCAc{ckɗT|MN◧Fn,ܲ&z!GS -[rW6tst]e~zNzZ_辀:0;˝KIN0"Io'Gi@(aiKa!($r Y9> [VbMc]mYƷH|$VV,h/w\.DMJEt/c#B~Oe+z x^gH`#u$+ !Y<|[nA>$rgFԌXOPbၦjz&v |Dg_ZFrG^ξf,k3|/m2aqʅq>,%3ׅ[B!! W!&6?dW-I,s`)Z?B}ٱ:#I\>ĉEONr⎱vt}ݼ$VSXP MI` ZHm9!FV/*509Tu`S"㉬^oAWzh +&̳^D+g<>/HCRoe098J)D9&:UGYtdUTՓV*TEM5l -d:DME=]Q/9*0f8AїCqSog/.ꥨ46:9q\bᇐK/"$uN7˟trc`I~#h@'08xhrB:SU~x ;T:6dƼ zi W7З*ZPw/-r 0GpAP9`k5 >18NWeIpMKj@/z&ߧO9 +raq8yVԔbw9˴rcT T'/jאntdBUȫĦMO'6Ħeb/-_t"SxUVM6)zIiRjR+(Bw= E@ZB94oxV!sJ23/$uӮuX'>+AP_$8 OFrhA2~{+/Lɰ<[CM"~*خ?p|| DcYlA+twTݫBUab1xޏkD=WԊD0XԮIQ@S?WըI|Dɬ_u/B8Éo~e,j2)V5-P .{PfWa-`+/icOʨHv\?c9PWhɇui)TP^Ǣ; qd"?'SZ*UW*jwIOe2{>AnQ_"}_"苞F_*Msc{"e8Ap!ۉ]بۅ*6*UQc65ld#hNhle#ho4yWMF2?_Ǧ{z]Av+kSиݗ龼m/z}}|[ [ywJf|LO?_$AK!}K蟣*ӫtp}oPU*ǷRo@'<wx,rN3?֬PDrNNǷi.gX4d w(ةr<5^A+%'B1L+îܵ>M|)mROثJ ⃤v\^9+b.+ku5qO 3׮=8lΐpC8i\`9OAh/%V&$w7En' ǚ^ʗK'I)MXd/aO58ѭ:qtU]&u@ɢ O/EtzQL귐y2ن̋ل&d! 7C&2ĦEbIlMflmbIlLlM||)_d/E|-_lm/z+_IѢIiRd/&EImRdm6)M aEB^@6P ! E@ڄ"EdJ/=\MM %uRkY/!ȡ}8$5?JBn5'i!µjTΤ7H`xQVU8EAT'&*KԏGR;ѧJ.Kg=R^Scw .=*w3P`꼬8&|x F}F#kE4caM>o?Ь2/V*]e^2U&dW***̋$uyW.۽f/^淽P.uO^EZՀU;ZGE7wN^`%uy+R>ޥy\Q}rҋ"ZHq8քiu1/ƒK]F'yӛqRou!!%Bٹ*1].}0Ԥ?_^^K+dZ;/ WWL {,o6W2[nHz{"#:}E|Wy`W (xm> "9VGo.+yڧqK"TčoQ/>qt/zQ/"WmZg5d2?2y*nbӉM&yY\9$6N^!yÚ\GˡDz#r$SW{]"G`x✰hpD֯+ZLQ g~:x 3M,I`_@sOsyKkWK=\]72KcP=]˼!ZL4ܸh\:8 `V2M룯Ӕ͡`MX ϟr_.cLM2fa+ 82؀TAO#ϓ#5Յ $Gu:vo:A*e*]4 o=<͡yg%G^d!d2!ndB! W!&6&|7$6]$uuǗ Yy:e Ys@.O$&FutSWP|X}9Q~MƷI>yT?>]'ls#d/&1 77ї]oj.f7ߋl/dTUoGepjV[zܐ0.99\HO! "uHS>%֊Ǡ# k_nwr74rpAN#7"Al]=r;I*;.4l~̭Wc^wȰ!ULO2U*o{l2.u]*ۗ*i"e816=)] D '"TQЮ]8"`"]5tSYEv߻O>ޠi% IP>@Yc:ͯqWZy"qAuU_N/7q#va4t&)~xQq.nr9JSz 7Rr\}\׷';h8=$&t_F^F"=& H8"=Mw^^:bkkpC'<:1d[OL뷐y2ن̋ل&d! 7C&2ĦEbIlMfdmbIlLl EX1A bӮ$&杘EJZR #ES/Z}y\+﫧/^*NȋvQU h+ .i< 3hځ{jڛ똧)oDnD ˒ N?GBLt/8]}O)Eoxf:-?67}!i'2x_rMK/_4vN&d6! ! LlCf2mL6d6͋fl&$6&ؼئ||)_l-Ŧ|-_lm/ME"Ӥ6)Z4)2ML"ۤ4)lRA "d/(B"dmBPDHb7m k‰(HMU {QFS8q/vIfM_SMbvfQ]V$ &ו@ +D## JJ0rLZQχ#*psY< ҆\B+XOk°h9ίL}UC"ll888 X2`I<ӏycrQ$!ue8$ID)O؏W>,yY8/(_ u^rN)9r}R[u%K,?nTym@t((/}"'$6D&"DŽwxTfBElB&2/Bf2Ɇ&d B6͋fl&$6fشئ|Ѣ|)_d-E|-_lm/kl"ӤhlbӤC_"B_"ϡ/ sϣ/Ml^+Vv˗E_Y}]Ac<Ļ K ޝIY"7gR?O!A"Ad v"Hz,kknKuܩ' NKמ,_*b~垲/6x)[um\"V뼝N^ZGQ/qAAJq"R˵"r-hSJKE>fydV*bɬ2U&lV6WVe^%ˋ"ue2{62"]{Ew4˫ϫhw ="XQpcoD2M[ 'xWE`"_1"T$~t}KbW}KBù; "J'>+|-h)Éė:l{?]}y[&|#]H0v+(s+L4u)ȇ^BplnPk>,d[T-?LS&K,R&4N v˾iǡjBrAuzF/Y :LkC$=E>^Bsaq} Cȴ IWkQ{P:hA% evt 8j=u]\t7dz:d6!*UbĦMb*G 8''zڕě;r8T# 0m?J%1IORX*VKk*~>)ͻb6Cb  X8DqD@FF;TesF$\$FQheޒիKu ZTD518/2Σ=+:&EӎW w-Th"*ZL7?h51:A B:L{liaiq[ $wW!dº_.8zl54Z}9SsM`2ܦǯGUXON ]P`q4l'_QmۋH qEUDYhhE i_޲-HE^4;xZ_>XVRN8xebU%Cz?tXmǪCǖT U|5Hd_3QY5b)[ xzLhǧ P&XoU7=Pnu x2 Mȴ yt7&ؼJU募._d/עI&EO7)6MWMjE.(B+(":XnSv؃xM tcս'xwiI6jҸ˻Yr6IUN㥞s6*ҧ_uI@\_!6T籢x~ݱp,L;x4;^u Ő<+'eS_."88֪1w{1Gkh#U/AL&ǘMׯYTr &+Ry*hU[jiRu|7dz:d6!'BkbMb*W/z|)_&w=ݤ}](BOC/G_tpӀ=VNJ/G_|)_[Ȕ/ c!hfC?Gi"vl ;bCL Ć"C"C!ۉ`5 q8]9VyV劯R$"!ˁz}PQM%Vc\ҏ;/rWzݖu.z;)HG Nwފ䱻Ļ?Vb-q|$t~gQ"O5% E=VDX+!/E lziT; ѓD\owW^e2̫U%u2?e^ޡ+6=]\E@w2=ݗ\E@w?U 61N6D2l "hKE@FE*2*vĮvUdT] 'A#j84Z.A#*uzl2zlcc?ǦLO^{Sи]銽4ne~/6p苟F__>_V6V?7_!!oϗw 6DAl >2t}d>>*9w5s;nha~|O~ԯŻ!$_A6 !{^Y ǮkI*+;K_^ƽ} T;DyHE4nrX :!wr$|`J9MaBvaRQLE -F,y2xtAzL,I!a-hwr9qսs#c&UŮߗ籒h2ȓͩ,)QGLY|6O!i*^8lɩ jgE0<,z5ӕ [,sAKI=:eF;ʇȪ< ez.19ci4kX\jcrjqt+ ʥm'R ұxV8kzEE5fKI}*t:J:|gbQOL/FI=]uqD,y<!/q$W 8c*s$㕒UD/$Ԃsga-?_in!ƚJw!ݐلLMwNl6^/[Ŧ|Ѳ|-mRtbӤxդVPB~""0||ܛ] ZU9;M x%ӫ 0ʋ(ol d/P*K%w. Op'I (5M0lJ\&tƢ`S0d}e[D(jT>)6/< mRz6N>narH[ן)b{\S¸%)!yK/b :rX1|O59=gTZ8za'ʼnOMu94WFTq DM) 52_S^5o\}|ǵ;dBf2L&d mdB͐-ddvMbfbMl6M6[aERHd<+&UK0T7}*/Q>yں 5Ml%S}CVDP$S;R}UntzDFܟAţz]^e*YeZb/ݽOVlzb|/}y5y+w=Vcw|c{pclC]"nAd 2Do2l 6*+ *2*TUQ]y ݔǐUQ𦊀 馠75dltW7dlԥoiSVZe*d﫼tw/{y%N~ˋMw+6=]Wt/}y%h/}]O}a+ߝ/2a+a+m[[W!ݐW#BtߤAd $Al>KM-GM,ݷZe*HU^h8鮆p7 2-7jqx^ /N9Gq88@~tq.E-8CWL#b]6W*~zlOyUbP9ꇧQ4 ?<䓝/[Wt_& Ӡ'4;|7H\˕: b(%8eSE ]M"jxӊ4] zF7ڻqK}z/jkҧ|ҝ6!1~s:CNJBElB&2-B&2Ɇ&d B6͋&d&$6&ؼd6/gDryj1mWu!#=D|,/3S;/"#W?oJ9x>=.Ă5Q?#~x"ӮPe 8\m9 =M6sTPAu0B>F)y>Nr޲<fԾwrC)ĝ3<9ɪ'bjuŢV'.^.1iy{z*('ߘfT2fziѻ>ickb$C EN~jGs=R AiDi GMTeԩ,6Pwx,gWओyBR,%| xo!% 8(8W]Ew榅ԚT]̱ΗQGr>)!"d2! ! MlCf2mL[b"$6ĦEbIl2M6$6o&6&ShQȔ/M"Sؖ/26EIIiRl/&EImRlm6)M aEBZ@6P a E@ބ"dvzAlye`C{1boK쪑J OgwOQw}ljr7~bˁ;U+d ; ʌ"V%yאecᜢ5),-Y[S'XN"*e/@_<Ұm KZ{{d6ؘb8XޒS!:ji`Տ}T*;=\2i7d2!ݐل̟ybĦft7$6-{/ P8}AinRCl%Q-˲|ЊɿhMFo<7rė.G|}rA"\9ceIe5nj2AU^" /a|^P_/цշFSkܗXf<=tV&;%Ŝ#򖇗|C,HYU)N>v/2ېܗ Mܗ 7CB;/fؼHl2M&l6lbo"|-_`E~+_d+B|fb[bӤhImRlE_t}"dmBPd7%k;(^/{uxOD_t}m/6勗k7D7m DK{7WD$d ^N+6gRK"oA3)6D/gR! ILbC!Ada'PB1ԕ[ܰU6,`PŇaqUgD:S*ʍFC =+)ڄ`[t"dV*"lV*iEȬ2o2&Kf/.f/]RwIݐW*"ئWW*"Ьf[`{ B_cݐWߤƾp. Im3d ù"X 'pb[E@FE_"Xc4q{We9_íGc/ͰWm(/H}H}7m" K"Vt4+n}ۤjH/hVtߤ#M&&cX48R62r*q"7@" 8vt-N/yڇ&:?Mig i\ݳ<$Vxd#ȗ 4$y9 ϧC#-D塀q.z)dQJMm^"pM7Bqpe/p:ox@uN}smVm[|\In+*iЕ,xw5F̮{o(%^)l4yc{e<мk[- [p:EO\.cZKO!7oJJ8#f2W6i-Nr%:!LPUci95Zp}Jŧib Tsi~1$H_u}.?1vM(4f8!d|eq,9kQچYaY,ӎKfr8z.\V6L8؇Ij2TTz}\/cSVyYĦCZ=*vgsҽ_PђB!! !/&6=l(_||LeZ4)ۤ&ŦII-߅"4!EPv9pC>Rv|" 4ܾrX{bX a P.Mİqp~nFaR?NU=Mb īᶝQ{o+ 9+U& _, 5ecl^ul:fWsg2g4Ocg`>{Az&r 'i)]Eũ?Ģ5^RNkI| AU}b)NS/QCн*Uї8w섣f௚OtOklBݐɄL! Lȴ2o&i7$6m&6fش؇]aRS zxOܪKVWe(&'+u.ּB iҸոN]Vo|yZ1SABTkw3,;%-b}}YS^/q@?^bx<2r(X"?:)){!旐9hjǕT^3$vAVCؤ6E|WS+>yPvJ38?s}Z'd>OA ܢ !" jsPE becK˄'Ml57A@JW__B!! W!&6=lV*_||LUZ5)ۤ&ŦIѪI߅"4!EhEVNzpBB뱂+c*ߎdE_t}-_lm/z+_D$Al Ad KM"-DiY" Dw I%A9bK!.7 D" DbC%)ʷvkE^V7J$ͦ>9,xw]p|H5,4[cHVF)ڤ-ҝ!:WYuoyrW/^4U+7 O4%LԄkEB (;'2#G@cHFIZ&6 ,J*ye#]0#,࣭ER*>C*UW*r{e~z/Htb{ETڗn_j@ޗ/~}pk.Ʀ1(߈ KM",ĆMN" )`" "MYݕMy [mتn  ySVHFw|SHVHFțJ]F2zlzlzl2zlccV2=+G׽w2=W|b{%h|؋w2?ݗW@_t}k5p [|oΗ[ [ysJoE|7dz:H#.G7>D"6 D}t#Kx#KV2?+R}N5+MùL ˇ}{BH?WUhZKwQ wJ!v;NgbWq\Hj߅4Cj&U j*@.nMm ,6F 0vU'1 6B,XaPmu^C '5#\Um5ч! W^TKs}@9k^U|Zz-`ˏՋ(8D@ؽY4X>uR\{=p!"d6! ! LlC&2oL6d6Mfl&$6fشl{`pD8˱[cNyaB\(КwkX(i/ w:xE` ~ozCDw}8A׷lurV p?MK OCDzǺ+4y)Xzڛr'Ǯc]mGtd @WH{Oz-d֐a`ZjWZ{ؿ,Νs'7*8M.+/`j/ 0:]q ޺qՃPE>Ye;rS+*$ӑ- # Tը\"._o*? ^NN%l4m -Iyf\//yZ{Z1@T% r==$RO-9("<ryQSGsT}HR^nŭ; Ŭ&[ȼLdCEdB&2ِلL!!/&d&$6&ؼ/2mE"Sؔ/MŶ|bܤ4)MML"Ӥ6)2M6&D_"l-("lmB~"*HSYgsL9鴋0yU=|Ip)YŔB@iX:/i"VHKMUON"OP)DzY|!vyHNBڥvRer$JA^oqThe$)v GAniQ;9 L&qnkj.夠W,2$R \pc+Vl-YRs`]?b+RxmY+xzVhu=O䙇H NvNyP, 5?=d,xueBߙIurz'-4xQsb ᬿPޑ8GOɟU>q.l%^;hTӞQnI׉*YeLUfdV*Ye\ez[ub+R^fis/{*ޥyQWϫhw@Cwp@_17V.I b8"XApZ"7o  UXmN1"TiZb]2=jOykϊ-S>(u©7m33 5秳r7'?|^/.:#(`2!x\~]p*ߩ8.; `**r[g-Ȓ%g7'7rWGR%~ bM9ݻ1p~5=91iEwIv3'\GU4bJ9w~1}^D WDpӞBKs!ݐلLWMwNl6M6!RmG0\V2 _H2@:,HÈ5FqKXߎ6{^S+Kўc~ W|pM#;X]Cx a-A3p?4c;_NW&2)sEXٮ.I.˩)V(eD=3t74lj_.s! Yj㨦r1lq8Cߙ/! JlksZ!2 m~A\9jM}EĬ;rqylhBU(!D͉kм|MܵՋOܰE;˹S~!ټ:ڝx{;Tr{|>H|lU?/?;ΑޟL+ɇkG8nthSL{G^B Q$q1;?;'v(ܥ3ȅWd`e6 8QP׽`k'6`Z\|7dz:d6!*UbĦMb'/z|)_,_&w?ݤ4)Z6P"l/$eCqJiFNR6d1e{RľUA!H%d#Qӫ$ݑU͏] 'ML8j^(_@_Ҵ"N1wtvU{b8強,X5_G6X`w$3^j =}Y [lZR jSI8a ^]u9srQJ?]-:w۲H854H-desVEgq+^%ՓGv0L&d L|7d6!2&شd&6ĦUb/8Yih,IhR/KtS;q^|ӗuu~%ʧ:5";KNnTtěP. 2YdaeNП{@_//cUyї/ ;g􏦗!Kn6!d֟!1/՗E |߈ p0p9 z;r=x|P#䌶?yx2?2itbIl^&[E||MnR_.ȗ/ 8i+cŗ/[ؔ/-_l?Ac!#ގi"9"Ȳ"l ڝI!#,ņd/6D}?Ze3l=,:gֲ fzgwRTi~p [ܡ؍yr UxRԽVM/iE/өM.sQu_"I/2oEnlVߵ"ػ/ 7swH+IR*ӫfiʛ^2w2ݭtrt_rE_4Wl2&Ɇ] DNȨhWE@FE@.UQ𮊀_d#h] 'A#s7m%#h4niWMFM2=_Ǧ{z]Av+}m 2?ݗ}cmEO//moV?7_!!ϗ7 6DAl >2t}d>>*9Gw5s["ԎZǏy.?+"qM3e1ɅQ˕\/y$ (8jr_ a%/܁}>$?ϻD š7gwH"w8&&M>Ayv~)KnͽByq1BK FXB OXm8_qxh;?ɼJl~DP%[ȴMlCElBf2ېɄL! Lb"$6EbIl2M6$6o&6^3wʫ^Ύ6WNKz lHV}=5`^.dI>Www8wNb?/ W^A풜{O֚~ 6> je^QaC[,|"ȉ3FzVtZp rҬ@¡?)۸X"E0Fyk4)%Cv/o! YޑbY} /6¿||.ҰdEc bTn~_b-/v7/Pӂ4Bb"-v2u!԰N:jX|ɑ8eq>V S8goGDYy4΂"{YXBy'aIq4!GT">NCZB;W7`]-y6! z&8 iUtbqp؄Ml2Μ6#ݎs`泞WIلL6d^&d2! Mȼ2ِW}&6fشHl2&&6ĦfثmŶ||)_lE|f"[V6)2MlE"Ӥ4)MM&ŶI-ї"dY( (B"d(›P,biK zAMz1ՍR'+lA=eKbw{X0[ UPq"yblGr8\!Pާʢy[IigOI.))pZʊHZu@QjHRX,W1!/yҥs,MKM ZuVYRwUldDvǧ_F\\I3j>VeT յn O.ޡ6i"'f霿e>J=9rbRVSJQĻ>C]\HtN Lȴ2ِلL![&$6&6Ħfd7{PhIxxke-.@˩M7aYO~ų~^ӭ\ .B}ၜN" -+?2Vy']|6@@F'/1ŵMOd8F(o@U- fhwӑ1CǪKSu~3 섒É%:h -d6! )j$A!&AbNC9R a]8't|02Zuc_-wڈp[*xU! lȴLdBf2i3d!V&6fؼHl6M&&6&ثmŶ|Ѣ|)_lE|f"[V6)2MV6)2M9e(+e(ݐi8W!<Ħűb?h|YEywy7~y"wo ޝI6gR?O!A"Al ~"Ȅ6d3EMIDϏ}g{+~P`!uOHZN'7Tr2/RE(X,̫Dz~ټ;ӊ4IS(_"d>bzzH^nU}ߴ"6Lfٮ2-V*YeLfysmWKb/H]{^ͽLv/TKӢbW}y5yhVcUKRw^1@]o"h!]NЦ+A㮊Mи"yJ8|Nlj8^ȻJݷRyAcweXlش+N^^={%hBGF^啠[}k MN/A4B)>; =N b6dDUtBh.SфP +jK]xU:Kq*]8 1B pr(XRվ\s2%SIX+6C&2&d2inbIlMl6MwLb2 deVDChB$¯/<%#cU2UO*': x=B?/O7 ؒ~A\aSjkQ0>5D C.Q8 𯓮ȸ*BRs[VfUuo.$9Ś#[=zj I]9|}Srp-W`WcQ-ZZKC,"mpx7}ICvh8Y؟yD>c&=M'ڤoR0զwJ:e K^>2 Mȼ y|7fشLE勞._l-עI&EO7/G_|P4rwї-_l/2勾}ml AAvZi"9"ΤA;bC?G!A"Al v" D?stMu]uIQ :+ݸBKt%&ˢ(1hI/%? ٕ k"EUUK86T#*"Ď+e ӡtI?}sV]@7ٕr+E=J9:@8q&Ujrn~.ׂC I|B+B}n*ӫfiʻ^2˽IoWlzbe~//~}6mOc}`dC.Io'vUlT" "oNȨxWEFE@/p4򮆓9AU4R]иf]=6=6szl*e~z/owMAv_ow ie;le3la+a+se2?|ybC.D#C.dž㻫LO}|WIOk8>"xE| !WK4 Zm/,.40_&ʵW_{1iCA|بIDi|xI/;UnsV׿0I|ޛ$od@E?(sqzzDu[ffZPPt_@t3?-rr?vu?Sos`gXf9Ջ ǹkMHީGw)JAQsid`S8# z}ի"F-ntdBUȫ滉MO'6O$vru:Е\?wiCN[S8 ynCpqZMZH ͼy-6vXow@*cˇQAQLr~)x%a @~^spZOp*x& g\JjC>TE:j}Sjy^õE=L"7t#~m\.z"H@k:yZhqg:oёDiD!1*}ϫ׃'Qpiw‚q>nrw b3 OҦ!ή?ieUJ%d|i}XTƕd6e *8.A"r`i`MBRqx{R2(/jTY]T[K2FtX@JsIv/YEBXJr_Snv٬r_C6m8?1Is:(kt7d~:d6!*UbMb2/~|)_,_&Ew?ݤ4)^5P"d-VM\NVkBbpnks'oOXb+u8ymlbew<)^|~K+'J 2XEb'= rUI4^1" aI ӛCTWK@E0<^cv9]O(Z }ҢdM^d4D񌵆ibl~a} 2fiZ.K* ;?2yb[UfCZ Z}^ $"Z P{& ' Eyuim&d Lt7d2!2fؼd&6ĦUb1]~G"isL5y|HГ~N76"8+ |ZMEfXRtC1]c6 ?//f sbȪ Ligڝ{@»]*2xOA,y{AFƢO;1Ր3]?}$%OO4q^89op‏wEiYf\ڇe9+OفրLPSF/3^W?Nq|9؞7` z^`u2r]U-]o>q"mws䒮  >2 Lȼ y|7&شLE勞._l-עI&EO7/G_|P4rwї-_d/6勿}l AAvZi"9"ΤA;"C?G!A"Ad v"HsL>>pŗݩ7 }ϋ|/WƔZRH7HRBS%DIRd-ZBr\}UX.Kc!<MP|Qj^Qq;g~@yx.%bה4,fE(}+wL-iEbj}n*ӫfyʻ^2KRw߮trt_rE_4V2&I] DOmȨxWEFE@.UQ𮊀]$#h] 'A#sFe#h].A#qSFͻzl2zl|wUr=6^/z-AvŦ+kSиݗ龼m/z}}|[ [ywfJ|LO=_%AK!蟧}K*ӫtp}oP#뇪 b9H}F 0 J`YRAxG},T)ulr3/pos~\ H<)~@}Ǫ8ЖCY^)fYUW c iScA,PLLCttj,ˋP5"'!mۇAʇ>LϹ8VÅ TE*xb֦a"x*NM#я WN9֢x*UqA4'A]BGM$59<)T'Q*;$r'TSU?] e5;MrÚK :q~ ! lȴLlBf2i3dz $6/LbMlZ$6&lMbfbMl2Lb[hQؔ/2mbSx|[2MMLbۤxѤ4)2MlbӤxI[2PP a ExE@2P-aEh"S vh@}lNkq9v,"1rsޢU< ֿljs!^ޡYT%0Q'%cɐxdLO)#bna!)FA=/(9N5z?^txś ~"aɒ%D<\!UC [wT%}.ֺLj#d9fr@ SjR:QuJ6J,ćRPZ0=gfU^8I**2w:Xt_9}&d Lȴ2ېɄ̛! MbIlMl2͛M6$6o&6>LЅ(~/Mk-=4W*IsIW:;e>I>F;Xt@jcBI9kAE#)~MP싼"?Nŭ|O+>Od,&~iS7vt؄CxEBpN]UHIzNS RTg4_,~Ou>X QtrN4.*RDqU]CFGN \+Y [|ISV^<')uOZASǫnxaN3D9巐i2نLɄL&d! 6Cf2ĦEbIl͋&dlbIlLl +_(_lŋE|)_dE>(_E_IiRB_IiRϡ/ E@Z/ E@L &6-yŻˢ/,_߀DؖM ޝVX"6?OLA9y" ĆĆ"CA"@C|O}}8u,72k> f w IN_⼚#V Y%l-Mt_!\w=ǝ ʴ2!O'"H4֊d>"ZA(]=N'yd/SʼXe2LvilV*]e2̛Lol2/ԥ^^l2̛{BE=-*yhhїWWk5(e8yW ]Ap~N 'hSEpb%]ЦyyJȻN+hM yWkA cweXlؼ+N^^A}񮠑{%hBǻFZ啠[}/k52[|6??_ݑ:-B^ԟ/>%,GD}|9wI]Zyw{Zh8Wt5Яޥq߭񷸇ʚl<=wa+.$ƨ^S($O,MBWLӫ9AW.>0'7Ox; u}T#{QH/~A,&CA )Λ/}{-8U+r $hb/)Q08@̾L#|!tpa"O.L8Wh5Wl8q41EFF kE+ŵ H,3}6X .d2?2y*nbӉ&i U? :jjPE.F{Ý\_Nr7RWrͶsa"9LaWęY)86~qN/\/1nxԧi+,>Ri^;gxxK¡!̝8U]rn|`Hq88v8K< H/SK T_ԛ ɡC(+x .Q1\5e9 :R/r<Nø$=:qjo((#_p:4&l+TUHdY- jG1ĕ(_,++R{т*59[95W+iLjIUZ!B?0L⯥tN Ҥ'@,'‰\>bd" sVl,^8iLC!! V!&6?lV*_||MUZ5)ۤ&EIѪI݅"4aExEn>$nVB*pvA8_C9Xa4C,(NYd/nڱĞ1S@/g}"Yl$\L>_>IG{|$-AMCɹ頰bgTixY2ѕ)fεkbZVu1?'hׇg#t^ÃL<=ҎnbqfV(;_^|8sS%OjadJ?{tk't/1aSbPeVh4$4΢[J] QBšq'd2!nlB! V!&6Ħf|7$6/;6q%mh֤I#:c7_-uX%T?%-"6r>ZmԄ6fRs"(QƵay^勷Z"@}o-.*{s1/H:1V# q2٩JM)O݃HptwV$]Kˌ);p]n__mŝ5 [8US;"O 5$61h1RR#5`X47?R䱱o;G0~[$;KSAeÄ Ӽ%"ˤ.|x(J!jɥ;kBUFeɐntdBUȫ滉MO'6ĦUb-_tbSxUVM6)~I}9P"_.痣/{৏_lbSx|)_k&C.͆ 2DN+AAv&Eݙ"9" DDbCAO&P^:`)7ϣ^_i>RUڰSRqɘ~/;*ȧ-_45Z|E鿮2]e~zɬ2Vy^&i7MOW/WݾLO/W]EO"b816?)] Ļ '"UQ𮊀]8" "]qϣ|r^z%Kָ+"y{-UM)> =!h,OU=6ZMa8 ij{7Ŗs|j,>TT#4EPO1TP$6!^ WKZPz}.8U~aL"E=O.5~sgV*Adt'kC(t_Zj^8y%Ytdti pR>9אi2Ɇ̋Ʉ&d! 7CMb"$6EbIl6M6$6o&6%v&}Z4G?iyiNbűZ|7ݼhgsQUŊ!ՌvL^I{?+:n?á8!ziZq7uݲ_>h:OӞE(J`80NV$7]aN|Yc 9E;x?n^lf=ɤ+E}7`O W_NI˕*iY?[4 0W!#p&:Ȍ:*΢.u?gP/a?^K뢏=+Iu*DCؼT&@ 'L+4o`)2نLɄL&d! 7CB-ydmb"$6fl6۔/^/2mE"SȔ/MŶ|iRhRd&E&ŦIiRd&śMޚ""l[(B (B"l(›P,V83e >G/AcB^j&:\&w{)",L`d/n)~.LfzQ4r¢t9ѩMh Ik/HXk>~`NE3Sos8O$[*FE, a7ػ)JoG'G2J-ו]a}{M54hy vAvR6:b@bT`V|y_U{3Gƞy\_l17B~rz3d! 6CMbIlMl6M6$6m&6%|pE2'"hFu )cFs}0:F/㌊ru*}9dEVK,橩ϡ͔2jWI!)tM HG )\[˵5Y)嘑\Z]pQEMО*1rYg2OQ_Q΢k2 %^窋cmh” `_VPl3f*}5M,߃ĉxQ>@L[-^p_* "̹)U)^?|$ .7Dž)Ada4"7A{})uS`NfilV*bɬ2U&dV6W*˴KR{yEd2me~ R+U;E_^ h~^Ec8^T vN^`.=/6 Bdɢ\ogk'`nMtAk*/Dԍ9ȋr4E)q},f6,EudfSiT0o%R!!Es`6*_=DYkwwuT>/o,HL&&1&/Nvl2+ǖ,4٩xt=hplsP* ]a"*^zїT-EM&}F$R}+NBUڄ5S0Mv[@; ΅mE|1/zg(=Vs—Hz/ġE  j$Zʺ/ qCBb&z7Tc)ͨujy|:og(Ċ (yKʔ 04QcLUVp$O~v h{Cz͗%z}9M*&%F4r:r|Iw SW)T,"'TIY ~N:xG˗QKtjWx ]ovﬗnP˩9y7ɼk2id&16Mcqlul6͛Mֱ86o:68(C\$)Ψ6?ըϖċ2IExzawْms#a }>|jWg74Z^O"W滶)* ׻, ydʳ{,eΠkAޔi;{KYn90p%N~MTEtĢ|"4BIFΩjvjA Ύ\M$ O,#/0r8.j.rgʢ;1:rWfzIST,~HVidcXP:ޠ0o M"~̧&&1V&Ovl6+^/: _tbhVIN=$)^%U)B?])ExU N>-8seGj+ۊcdV_|X} _dm/ ħ@Al 6@oc O :Al ޜVA| !bL>fRS  @ bof?H 7*8(AhfG%'t,֭.#VK2*@/sVZD[ o +6Y##"D}BqJFS9T}h/k <䢛52bD?r. :ʄ\v BA#X'wejJ87?))ӧLiyʋ̧w+P."6Flz:b|鼼|Eŧ?]}p56tB8?jl2@A|ApdX|JC[oزذC,6,d|JhCB#[B#B#mr8HFF6FdM|l|l6|lccNOO>mwO2?}W䏻t鈽"4~DU^ӼO#//:k5/p? [tLeV2Vǰua2O埀 :# hb C,GM-ܷ:e:=e~W)/8|ᤧ9+)Or8 /[ [J !c@ջS|%Q4iX[{mxM'ڻ"lu#BcSsH*?`cu-"x|@twr&vѯJ'{'ImooK"7JfBzmF|i7\w_]oW$8XUNN^hzdai|E+|*?;pԧib1 ꎋSJYҞ{/]2U#^(kހK]k\;~d>56ɼ2ytcqlZ:ku"Ex|q5|_U_FJq$0.ˆ^`I8ռ\\V"UCܙkE'*F))eH]r/}ě%-v&%AQӢ8 |ͱY @@pI1+dy~y6ɓЮuSǵKeșYب:.\D븻bnz-{}2}i޸ Z^(u0y/L;h'2LaS9SP!:)U' pJ`nA EAބ25t%qNSPfAF1؇hn>7L*4el5SX8=XIƺɰÅK|oM} &Tn-lg#Zsy{(pO:"O_s/Feq]S< ]&t/`I2 @ndߌosQ}}g7?9xQ|w~]0v-A :H`"߬7 J]U[>腺z"]j~?'>kާB#Hk"16zHVt;L&c2Ld4dLMٚLƱ86:6Mfd6c_ߡNZV.{7Ѻs Xb%G^3N\2{AV& IwrB o%YU,_r17Wj y,(keۛ\2D] CtJA8씣$3J*eoǿ7 x˱΍K,h{!{S 2;:cDy]n)LmS.!,pID_ԹU*JAGZ½t= ,"+l E;*J _t"xIO=$)^&E)§=])EhY, N:-8segh+购ۊc&|iE&|f/ >b xA| !Db洂?S  @ 6gR12@A|Ad 2@ ?n|׉oP 1[FirLNEc,֞> 绹v% E1'IOVL~!ΨxMb^VI; 9J[-?ɒ%)אѕ.d-&țɱo4. ;i1]bЮ}O; No;e>=e~ٜ2Nyu.wy~EĦӈMOGtWyN2=WZ|Zc5 A| !"&@a)qlYlX"a)=1lYlX"!4) l l!4) l lԥBc)ddؼf^22?}+)2ez.ɟwy4b{Eh/x_t鼼"4~UE?]}p_U_? [tLeV2VLSiW#A| !b&D@C-GM,ܷ:e>=e~W)8|9+ùPە"P:_K+^_ La!fYx\r.ՅFȯkJ 4p@[[9Vk[(}HT\/n2]r3o#ɣ4-'鋨(cR9&u!DlZf}:*d&;eV-CY9vk華:k#*j|T "];%FvGb%-n6F+zٵ~}}nZwIVM1&d6&5&1lMfc2m&cqlM &lcqltlplT'"<+Ag% eu} ^I:t=ɷC&-]MM"42$-h el'FDQ^7%()codoxmv)_J:Q լ2y629pR +&TQ=!  ܢ|3j%(DU]S}ÆBPᔢ17Zo{(YȐH(@Y^ά\j*RGZtr^L3 |?4$i?B"7U#Lh\EQQE;Qi)"n Ү V] u5Cin%.GFD7q|i[R)P8DImjZKW9wmY<TES'>hbiP#NxD -$ Ä́' m^5M9~͎̠.9׊InNd)Euj)|N* qC˼?L ɘdZd2&5ɴi2lMƱ:6/cqlMƱiӱñME"؆/^/6M"Ȅ/ _d$E$&IMRHRd$E6IIR#IRRl)‹RM)B![)Eha[,-×ucl%UCQqj*% &eL}E?ؽM-Gڕ 92{=ǖ.@ N=ǾPC">pla tq9%ҧ!uoGrS: {odnǿ1ڂF}spN $Ng.Ɉ~Np83Y39]mD@ERTw9zYv2wcZ_؊궻zw&1vMfc2d^dvccql^:n^FK9" "_m;u^/B+C^)إ߰G'΋lZF52%zS}_ʡtEPYE*dmDZuk%Ch+̠4ޕ@]d(^/aZaDtN] $%uCouMK h֋XȌ*MdAkK:!3<ɖN.{|/Eį7/x3IMRlJ>"[)ExRdeE׶ɫmPwU}aثӱ7ײk;| _ _& :ql2@/q݈ڞVx5؝I- :gRl ^Τvp+ /M~Al 6@}AVake~akԒ <#rza,:K /GϨt% r|XPGNs\ WD*iH*x1LyqlN)rE))=meue:uWwűW,>dlC }+41م,>dlV}"3y!Dpjcs !pxp :$NlȰw>lȰx"ıF>$4ns8yܭF>$4n3uyccӊI-tަN;Y鐏MN^rfC6q Kv Ah>|cU9۽˫2Ηl"2ΗG+?Fۥ Co" ߇}KGp6:OPwwZۆWO>ʛ-"7"+փ"Hɽ /+oOǢY jcᮠrrUCS,)k 3nx{G`']/c},c R4 R[u.mmNCPvZhs*W@z#Gwґ|*`}$)*#O0  >% G^_Ǒr Mmcb!ޛƯ& kϸzyTHŹѣ@3,r6 z"q/MSi٘+WMMO;6ǦcWj38{/8SEoJI 5U{WC ][-))0k}2v&"R&}PW\SDX3T/AE*Uj*'ѐH}Jg$K3=E(JV"\ZE4jZuqҋtiCPRUMFңR2 M,ETT^Ȣ+ϗ j+V&nw3@ dk]c#6?y_LO}vn>_V2VnL&&ϗ7 6@Al }d>ޅ}Spr8i>ܷr $&b#Im+ܦ7hlcimx x<zk0@(M%pFZ) R"y^pzAeAoYu>w.8/{1I^"d9ReY<8Lki!Ws:s:.a>HB>Q68{ _0*(( 24Wٸ kipzݧ$#,spD:xd= /L:?L ٘dZd6&5ɼi2lMƱ:6-cqlMƱyӱñ$D$(0~{UC&{Ⱥ!jRIYcU=Ժ6$8[FzjH)Ã9( n i+[R]PA$Kc{<Ȼ6",zyok=z\`M9j-# 0wcת7']/^ ɗJGMcQQT>IBQ,j2:RLj44x hhS(=}s^r4rhOcYXbu83;>%40 .dʹUwCmҲN'D!EZXty,z|}VXaB%dPqOENJpKCRFPQTe== W^zmRt%):$qjhQ8ȊCI)IhY H~Ed7I T"=E?UP[G%4!Z7]S(_p2 O&d6&5&1dMfc2oLd6M fdMƱ86[&ؼ&|"| _l-E&| _lm/"|x$)IIL"&)2I7$ŦE)B![ТaS)Eؖ"lJ,EȖ"*hUT$ ?s])YWEڢ &6<pΥ+NR>Rۈ.ΤǙѽ2jIionAo2t8eA׌^*&K uZit ]C~m̜m] .7 f!*$|02Q:t/ ; iJhW&,EfϽyaL\\Ü))*RCٮ3h4IWu7@2ɎNw!ZZQ%Dž^Ս%Uj\[(?o)* B]CF Ac2yd6&ӦlM&c2oL&fؼl7cqltlpkn}Fhk-_wK_( Is )S,9S~rL zd5{I4ͧ [[kcu}C-^h*/.fnRvBBNS. ؋N˯oxQ<+e狴&aW4SrǠ^:B9XR#z7; ʽESK\z&74f?\5 I Wmv+eH$VR}bCIM&q1X\!d2-Lfc2Yia2ɘLd2&lM&ؼpl2ֱidcul2͛Mm/E6|"| _dE&|f𵨾lbxU}$&IRW՗-Eؔ"hd^+~E͋be/ _ZAc[ 7qA9@Τ,ě3AAd @LWrߒD:T}"vC}mFE:e@u'@ ZF,s,K֚e~$[~_f#ڥb8^,O Ae[or AC\+ տm;p\GŐSfslOɜ2S&sʼylO]]^+P]fsi.+B+hw@C}xQ}pEKvN^+y`.i D8V eXmqbA]&cFpZB#mr8>wțL?@h\U|lc.m}>6풓yqW?%w +Bv +B`-˼;E2[|6L#uZ??_^} Y7)Gsp8>ޅi\AC>B7FUtUqOYQjx OׄZrN!TZX$OV 9 ~3‘lT %We*Q:F"YULv_,uG$eC*:UP|җ{Q @!^3G\ P"g/9)C5+ N ܦ7Ep!BO0Ndƞܐz (?i@4iI{SSnNS*dPۋNΦPQkp|F+d~d6&cөcӎƱiآǀSEҗTi'=63Z&Yt)[M^MÓBwA'w@kߕ+8䬥EsO+\Hm|BE]fPJ8]-z~99AtaBIEze}kbR``o3>;bbE;kn~bsUC!5_R Q Kf=}ԡ*yhDs6ppY׆#Kg^ѿ$Hh±K/w]4+U%D%Nܖ"C N9HPvqQ])5eX^G%\E5;ᷩޒ] 0&}YZ]1'7kl(xQ)MqToC[x^R_.hW!fERůݥ BE zgu4Ü5܉By ,>MmpM75<%A1kWy p{|g ա/3)eq6I^,M^P d~d6&cөcӎƱy؋ŧዟ_d*Ii$ū$*EK6}uQBF)w˩cj9OF-NVk]}u%45)eQ.o(Tz2_A B ߱+~(On bǷPp`d"NDR@< HO:lϸ뙏p#fgY4RSۉ6>IVh*nǡ_(@Qo&2IO^ps٥%4cV?5hΨ8Q%a8pu +&hz~᥶ŊdL]ɘ̧&1ccqlul6MMƱyR!t 2bw |0{Q5%_G?$m\rkxb24uQ]",8>GHbI0(\ܾ HRUNIo/  sn8ꢳbr՗ի(;sS؜(+ gU_y~RYK‼o]`Qi8}%ѻMEdbwNTvs]p Q귁[:-i!to̧&&1V&/AScұN?Ȅ/^E$O'^}i)O"ӂ.8{ŧm?Vˆ/2wıAc?i vd Av&ݙ s@ + D?p,Rk^[$e4p^SN'R<7{/WU{8W$1xN})E O;5uP.4ʯMdF ƓeV/9KQR8R.܅{X4|+MJ/; {M#qwScSO)wAOe6wVwyߎt,:t^,>kEpntl"l E8Aǁ]Ȱ'6YdX"`"?Np!4. sFeCh].B#yB& wdc)ӧ|z黼%4nGlz:b6 y1vOW_}ld;l%3l|NMMޟ/oAl A} ?)ӧ>:p}n!Yqv_Ql7Feޫh+e/DryY/)U拨I+Nz-vO"Q_t(@QAq& m2vYbU͑k6~OM\3iuxUԴuIRCjFۀ Bԭr߄@EM.OmUրŔ>y8c2ٚL ٘d&16MfkR86&ؼpl6MƱ:6M&mT+K&jၡm06'98Y\#F #hEn /}e;|_uD|Fon  r*͏/%L_l&Upp wP$qog-ժiң.:/i8>xý5 h?GEKH]jF˂ DAGIRKP> /!"UlL"UEcP6KzM ' P&N5q5)IcC3:4RPˈe@CMMWYeK-T`$QkLaKP 4ej74u8r!0x,e(D(^ÙoU\ɋjO*.B)ϣ=鲃M-PDEChs}|ɢ*2ືK+lLfk2-Lfc2ٚLd4>L^-#6MƱ:6-cqlƱiӱ:7IȄ/LbȆ/67} $)IIL"&)2I6}~Kݔ"lJ/J2Rl)¦Rl)\%] x|4WMAqVX[njϜ?zio xp*eߚoD$ /AY9.*[(5>…')*',*W u|g~_u*ZN_eztFwr o#By*En˂K7޳>8<% {DI \iC5AE>a={Y"{Sh]?7Mfk2id&/wc}cul6ֱ͛F]c d$*!:\/@zRΦx j 㡨paI9ToEP܋;RE, P#\K!;<*O9nDtVf(LzO!;TF14)yY-E;N7;߸+fT[njaL&.b8Ů/gQ[}uWBv2"AxCTKDL`AEUW'UdJ }^}7/٘d^d6&5ɴi2[:Ʊ86[Ǧcql6ֱ86o:6}8jk _dEE&| _dś>jkIRl/$)U_!SЪRs̋se߯xױiVW_>l端oñ?oiihw&Ad ZAl 2@q h@ -F^#*/]T0ǯ7].A4{QpV={ߊ%rymY|1 {r{ۏ_ 2/F2HN#VfDFi?ǛS&slOٜ2SfsʴydOyaԥ]^l2Lw?j.tO>w4˫gj <`.I{p>,/"__B8V eXo'N,w "x\XFeZB#m2u'4~|Ǧ9>6Viq+c.9wyEN#|_l%4"b`.yyEh|ݷ/j ˴;le2yaj˫@M }t ǻ.-Ny}w{Zp8Wp7&x|=/K`ٍƭANPVʏ[`"u7ɚ HƗJ M]B_C\-%G~Q ?["HiҴ^cm@E74z"Lb' GRX~.u2TKSl깼᫬nirEDP0^GVD)@D7U pQ⾰k;HE-0cJY1z`HZ*;t8MdL&k2-Lfc2ɚLd4dMƱ:6/cqlMƱyӱ  H 4U8'?axdNIJÙ2ˇ(YPyW&̾,¸۲>EsBj"[$F'FEDN3>HqdosV<0jQEèz z f?NySľ:BMKuH6" ϗ3cd:zSij誒.YR(6u3nb}Q*Y"g7<4Tsxh.v/ 7Ʈ{RxUQʿPu(q2.JQ`Y4B{D8Ӕ_ª~zO ™T{ڭD%wP:A()ExQ)Eؖ"(EȔ"dJR7K(E.?Ni8w%][qH)wUԽWA'ӷ0ɴk2d6&]&شlOcұ%\54*뉂Z\OqQ !x -Mw.{`A7R*b.WngI*1AaR=Qv\]ۜlEaR k7p Q2/ %ԮPLޏD^'+ f=p|V2Vưuk/|y{2s ->: 6@/y G+o]}|mSuw%Gp6tp~@Lu2?bϊ6dI6\(s1,@&,#"ZUU6 ,4]CNpVyS$ 쒳 {ٟ\.$E}IC Q+!&;?ܳ,R4c~#R5etۮRҸKsS쪍>+҄J wa:/(a_y`5J|[uT1 >}^$bm:+wwsQ{S$^/~;ꊸk|ݸJۤϸ/T<}R4NMM&c2L^96:6?l-ŏt6IxWVTRMq.k iT^J^xzEmG >݊<,C=E<GG'm!NԂ]/] )E"ˏ^MreR=da74VIjSIc:?(z4 ]d*ݮ[TJIqK~~+iBMB%{QuʵZ=eȬ$.b6Gb__[B)Ǫ$.wc+ty*{.$ 4>c٪u/:!b]R3(9$JXxpt`A{T*NLZs!"_i>r %ׇ(Sb/נ0] v_ cMAD YCr}Gw{W˩wQ 8سm7f{li5Bu-TiT֪Dx._-"r}87AI~Tc!=Kc7|d\=xH) R}ᲮφcboS 8D(+އ[ZVzBqU ~sűW%'$9uC͢reer28PBN몔rwF7Yp<>{Q7I FE[ C'#;_&?[KyR=*$m~2ɼk2yd&16M&k2&شd6cqltl-bo ,S\dΤacPU.1iEY5}s5WyS"1|8 +‰x A]K3#,PO1[+)QL􄇖.إ2zMeX\ᨸa5߄V\4UND Vp6+NMa;e%CAJ04OMMfc2L^96:6=l_t&|2|-&)~:IIRLRRNKz!S7J_|Zp _tVmʱ? m"h3| _d >" xf C ,iY D@Ad 2@mΤc&e :" Ad 2@Y HB~ʲOO(i2q5ְkAoNHVI7wl}cBkZGuy*LqI1j155`O!I=ũ=PB2qN_sE մ @ʔt;ij28nN56MEiko:lLO2S)/2ez.@ݏ|鈽?"*/i^j@V_t}V_Nklz^!5C ,M,ĆE :$Nea&, O1tHa"`"MAȧF>$4%4!4&?8HF:$4%4!4&S, N|&&M>6[>S^V?Oyq.wyENˋͧ+BG^e:t^^ v//:k5iJe:/氕? d~Hd2@}|A }| !c&G[22?}+PN>pt\E/D ڇÿIVF '\;(nAWD97K;ݫq {YOP Oz1]9@)#9UhJWm dٻqH#vO$4r`&ziN|/o EDE8 5{{W,Rõ9İ(*Z`2'Ek"Ɇ{P",W+Nso7t)$8\X&d6&5&1dM&c2oLd6M fdƱ86Y&ؼl}gXdF?lo%r3_?НbE' BAw=^K%'"mWc"B6iS_o+>] S: :\-< <YQ۫UûCa׺ IzrFS6Ӊ׍C&%bń\8jtlZ_uD7(+H>+umBp!'v##^!~(*aةJZ'¿Tov_rEcUoΧ,*eɒ3nփ%k4UnxXh΂3 h\["{*uolZD}UJU,ZWQ(7 zCP F;󇛶?IN ЄO7GWpy>/B]g W"ME]D>(qg 7]QqD8Q`f|]Nmɼ0dMlLfc2[ɘ̛&5c±86Ycql6ֱ86o:6[fxȄ/MbȆ/67E&IiŇ$&If/OV_|X}-EȔ"Y-EvM^V_|X}m*84yDZV_ێj+苶b+|-/:_[8C hf7piC h{ZoL+fRK  1 S  @ bi/omVSB(ݏ#5VYy7%$DaKܻD85!&߽ބE KBP|on6 T<86+ܒO}2Cñ+{wRl~)&w->dlhVyn"CnU}}5B8B>F8@A' W.`IC6 ~7`ICz6 ,MHm'B#-9L% L]2FZ1udشcV|l:coVWI[$'/|&'W-BEmB*b>>dmWyи;[Ηp=[U__ᶆ2Ηlnԗe>/oW&7%Gp6D%?x킺KmPwu.tۆW-e7QI|.5R1#rxMES75O$_8LujTȪE`V z9# _پ2oT> y^Ե.EtinGs0 nAwȓf 2L큒jly̠2>PcAtҬ iaɂx^E6D,>dR8MmGuY"A;8 dͤa[7yle}|n9aMsR8$-Z2_%єMGq.KKn|cfAAF8F dzd6&cөcӎƱyآ%xܴ fWSEaO>$ ^HZ-g}+b#Zu%{Lʂ](j{G$ORA4zBso!?$yԋ"(uB#?oR*bG&N( &ЬDWUI]aBCU<vixF3z%E@{(8?,ӇR\I9ſh`ևE|v$$ɪ0Rn7|$)W`%q5.\ ]M2[3du7NEq ^ztp^)Ԃ:N>WU㿗l*F8v'=$ Q|!_ݎ=N<ѣrxd )VuposK:e8J"PGWÍEJ SC _Gʣ g6& 룪D WɷXZ^JBVW/MSiɘ+WͧMO;6c//z:| _ _$ŧINRd-ԢR.EȔ",E)OeȞ|L姞c5Lmg])'g45<Į# &";_8%#iU3>:%dfT(h3N+ c9sLít[J҄dO  ]A 0Cz/BU &DuE~O!J l"8Dh+Po̩8CjCbʺק:bzv6#Sѷ"|VdwWTѱԦ* 4fyAC7)|UVxiq (Í,]otk) \Fns,Z FG"&}MdRݒ&_\E ar\C4ߔMe5ycd_tDTI_b xf C ,i[ ħ@Al 6@oΤAl :" Ad 2@[ :YA৛ЛքYvn@#ӷJC=kWkV~-qGaSGOUn7*kY4%..εEbkp3WzO^)~' R@1GZR\p zE!^0†qo*|Zh!k=}}q{̧O2S)/2ez.@ϻt鈽?#"/i^j@V_t}T_Nkl~^!56 N :Ad D8AdXtJCYm8aXtJCz YmزȇFF2FpHFF6Fd%4c)ddؼf^22?}+)/2e~.ɟwy4b{Eh؋̧y+BWyV_t}V_fJe>/氕? dzHd6@}tA }| !Gc&[22?}+PN>pt&XF, C7H!5%f ֎*}mrt\z"vXe? crۥ.]DvOdE);AjKn_m|^IRlGtJ!QKS@0_ sPo`VeƮ K}>@6̗C9E (p_SuUƷSv0PW/pd] E n B)ܴ/ipݒ>WwҺWV|UsMSi٘L+WͧO;6c_4SkpS,ԫnUK%0v"0nֶ!<Ӯ)rWAEic$D49Bʲ7f}oDXUݽ7ݪ.ujJ_'S0(:[MNR!Z:..( 謮8 eJ$da.dm|p~04zdw.1 b)%Gԑc^/8P[ih᪸j8~+x;ZӺ ".ћubSfeYUYƀFtDJk| )^UI1NY7lj |нWo8.Wa`;SCpSi,#FUz .ҾOh$fue+vנD%z˿/yWHQΒ~黬Rg9'-T:i8 ,LK> "%C!KR|IOeYT8F@]}d:56ɴ4ytcqlZ9*|iūJRt$&I2I-J:-ERM)«RDhPKJtHXS1U[B͝ t> o/׊9HASUE ɞU&F6 ;›S! sYW1D2LM?jRɸ92TiFx_(3t})^hlx,Ew!gio7XԌXdC'x{T̹h% E֣tE*Tq) yGgcQ ɔ K$ }g/ut%mQ|i&d]T{4va.EڌPc d2&lLMٚLd4dccqltlMƱiӱñoAxZKL4إi6J*L?dQڤp7wku|E}{;8 ?,晤D1(p lg8jTwKԃs5A yN$G_|9]=u6 0`E9JAbnP8!#& .B^:M #qOQ{dMODUWeBy=$/XV^:R4{r0PT&*"m"8 ԧsl>'헫\{w3q|A7"4&ylSSy AuU^LZS,'n;Kv0NMMfc2/M^86:6=lV _tE&|*|&)~:IIRJRRNK~!SвY|ZpςsVi[AO+h+؄/>bȄ/ _ D@Ad 6@mD@Al 2@mN+Ad :" hs&3))ć@Y D"ArdF n K¤ wIv~ueoWwy(f@ZKWw3OE4%C9H6"0fwn`k>!`;u;[bZ}Bha xuiHNϾc-K^A##V9=^pxS&sS]ӻLOyO#6=WG^e>t^^ h>ꋞVckUciO+6@A|ApiX|JC[mزذC,2,dHFF6FpȇFF2FdM|l|l6|lccNNO>mwN2?}W䏻t鈽"4~FE^ӼLO#//>k5 [ṫeV6VLSiW#At !G"&")LJpY Gp[ou|z)@ݯNN>ptO_}xeL/I$(L6ҖU(wccoB)yRncxUBU^=ėulzڱ86}ñL!;U]0LkwzJ{+E'J'!*(Ie70g&X+j4nUE{=>kH%Kp"V 4bpH9mEMy_ד K:^$M!(lޠFE Er`'@s*XqR2@飂"BkduP#nF8|=נyMЈbIoHr~ Jxـ,^ 8A8tfF|_/Hke⛄OOـ*Sws!KR/N/X%J)@:&mW'^U'9u z_.'m3hA?@TQ? HJ'ҝWZ}}sD3(NծBxAoРïh:ytJSw3(RDD緒uJQAhcκL٩.MmqM@l]Фz,p QdYIP4NMMfc2L^96:6?d_|&|*|&)z:IIRJRROK~aSߍDA 5 q`&M nav(5 1> >"D+T%#{[)yIЈ,`/{}ϝpRp f܃jhO{|D-nR!Wځt%—x T,o𭥧@4'UpEMd<_3X<dn' `%r)%VIeTDQp!:/͋y~K^I"& "S)~StYY3Į^}M.7lL]ɘ̛&5ɼi2aOƱyױ86m:6[&شd[ תgQ]EP:s 6B*y"E[&V(^eFDMI>fV#FF)J/L'7^CD^f5N'tGe7k,TG.MA& ~Ȯ&Ÿ^hP#X>syqcZ% g€BR%eMVtB˭PQXo@k|CnH"/QpЏ++A-e.mH WC"Q6EEMP)GNA$>S C-&C&lL+ǦSǦc7N?Ȅ/^U$O')6IIjQi)BO"dJ^"N N~\L_˶O zX9g[aV_tX} _lo/ S  @ 7ql S  @ 710@A|A9b C ,bAB+߯\wW^5ʔݾMNdG(9O,V>v'ՕAXUVH"AI\?sKDRl{,GR{QnJ(8k ܛ Y ÕC%9Vdm􍚄n}h Qk?7")xNקLO2S)2e~.@ݏt鈽?#"/i^j@WV_t}V_Nkl~^!Dħ@Al 2@o"l 6,>%N!q- 7YA0,>!=- 6Y='B#HHțNF2F:%4!, 7Ah4|l:c!, 7lثSSOyE[8]ӻO9./"6Fl~:b{4/yyEhˋO/~Z>/3l2Η[ [isօ|j2=mja2 N>>Al 2p}|} VLO 8N94sp8(=L:_-_ ^K p\1W_Zpg͵;SDV:BoK Nnxo2@/A)9>'!zwc@lP"qU1F9hDF"-kiQJ7I\L/=۱ HRA|*kۻf ߸NnȭZe T/0` H.ޖFQszwOl9f{A9e~8ق[e8Z9d^Ld&d2&1lLMɚLƱidc±86&d7?;3B^I3AT#XCeMQ>Jjd(8Bo6D -T&VD͏^/^"Q߭;^\Ļ&#)H;79%\*mMњ3Wg Ј <R"ԋN<ѷb"tD6 $' d|tjiFMJ#ՕH8"94.n4Wu@g^_GW7sHle2Mđ{bs*rQbm&r xU=O .ԲM3*,h/q~Jď1oƑpKP"IJz2VN઼ʎnH\\/_ !1CYgԓ*}"Kqs~r7)Q@ ġ.ZG ]" ?2bQ>)̵I<~(:#A[€{Sd㻼(R& zc^41d0'Ҕ3[`%#,uBnxUVS(T*"4&d6&5&1dMfc2mLd2M fdMƱ86Y&شch؄/LbȆ/26E&I"IIRd-$&IMRlo&)"ITaS-EhQ)EȔ"lK6o"Q|dx!Z;i.S<5NH䧇.ݗhLo Y[DQ.!LV|~HI] -_:\MD0B>x-]}гxW uFoͱLoM1*S&d2xzңߊuBxuݷ+qo_нxŬbLS$d (e: jolsx uՒWr(F%pJ8AUH{KN7ɼk2d2&mvcөcql^9y9pJ.7r[qa(-a"/Ч}V 3\/e:)G{o/Ԃn&7ET^՗42V^\Hxr%azM]_`_枵Ϲޠ jZқBkK MQLE%U?rͻ x//c2[ia2٘}17MwelƱ8GLƱyӱ:6 T6|-QȄPo/kZU_|X}MRdm&)HR/R6K(E6M^V_|X}m*8?LueŇ׶cڊ _E&|2|mK m {!=`jZ;ZA|mϤAI}oA|Ad 2@ xfEcP`qlzSX֯צZjL$1j[. /K,MBp"C`\C h$ e,|Hfaf,1|HfaEc/ |Hhp!4ҒùY}- tHhf!4_c>6ػԒ͇|m?h%]/րfC6q Kv Ih=|cU9۽˫2Ηln"2ΗG+^)A?x5}KLJp6:OPw_}|mC+'t7@jCUUr 2o-<^9^ZUjk? e̽ME԰:оzm3K.&7"ۥV}jyBH"ԡ$4Ĭ;0m4AhJuҸɱ9'Ɗg*CG˗%oM@t^{xJ8`[; }Y@H]fT q㤱vYOD, i)xp8.4(^|FYBƏ8 WQBv(@{)Ѕg'.܌s"LR"w^O! &%qYħߣwwp2|j2?m2ieʱԱi&ؼrUO/6ዖk4IILUZ"tZӥRWW-#0 O^./,U 7NpdUIM'|D^GiM$P,MUYW)NjEfϥp&ԝԵQp5vZ-|N =i$~^dLSiɘL+WͧO;6c/~:| _ _$ŧINRl#IR.EȔ"*EV't20i[O+5"Ȅ/ _v :Al ıA$ !Db洂>S  @ 6gRL' N >Ad 2@ @0op-aW9Gڌ?$^T)DvW!s]&oPgVhT5YȄ־ *f55 \.46h,Z'} Wa`(ݷj W'yAVp?Yで:-TF^A^f|9֦L46+1A#W]L))ӧLyuʫ̧w+P./"6Fl~:b{5u鼼|%yZ}j cWGMS  @ 6N@8 N|H " "M}' O1tHa"`"M"HF>$4%4!4&, N |Hh$Kh$ChM.Ahͧ|l:ccc&,{utz)h|z黼"'UӈOG3b/2e~:/yyU}iEOW_1Gfʧe:/氕? d~Hd)Gp[ D@}AS>p6>pS^p)pO7T;uɼ|Vwī!#vs 2yL.?hQ=M\"kR|YvG7]4ueVf-Fu De +;-U΍pxKT, /M]ܔ].~5hDGE+W0\MzmġDE{-e_~nDEFq(~cFJxv}@EEb *{QR-.vߵOCllNK8øR+d jʴO&d2&5&1dM&c2oL&Ǧcql fdcqltl}9%-Epinnui-9ǡs'ԑכwDUR 1>^{GґZ6DˏkwM(w*.-F(LRُV܅@P9.trocΓD= 0Z u2H]:xM8Y\$}~O߭Lm^/Nv]de=VT8o^p"V jD ͑JBRAA#}+s.МQy<Ԫ.>B1RjP!MS<*^ 8;-96@v QU|i<'Ow'D{^pI;vY^I^H0[ !NM32<5f?<7=PKxD|YT|ZD$89^T[rpKcTt#j V(pJBO 6i,S7p$rk^)* 5ZMPe'<ԵpRC^Ψ2K,IO&d6&5&1dM&c2o&Ǧcql &dcqltlM&|"| _l/&| _dm/L/IM$6I)Em)BRm)kkUic//>{V|:fZV_|X}m/6Vk^Atmd ^؛ӊ%D@ īiLj !="7fR?A| !DbAl pu._dd753ZS7g]ZE~-⡰w Wc)w!?k[="6r@[1Q x8crDVIΗc:>pM!B%uKw~p:AS 1Mlp{9eZ2Sf{ʼ8e2ɞ2SSSueue:uWw݄,:dlCt5YE=Yn"CnU}}v%D@6¹%D@6o [,%q,2,,%=1,6,^v9KB#9dp2uF:$4n3uicc󊏽K[]M[]'muc!{]BEmB*b>>dmWyи;[Ηp=[U_caṙa+a+#|#ɟ#M h !ܷ x }l>^}Co] />:_YB4*.cKC-3sXđC)QX$ʱQFTɩ$vy@8mug5by_, 3k gsQuʨ% uP3/_q`]UT9PRO}ŧ5/WK9GՀjF}NGW\SWriyY%QfܦFAr xFU_$GԼ>EX0gW`^Iu8iLoMdL&k2-L&c2ٚd4dMƱ:6/cqlMƱyӱñ-[W'7M68/1,cR{re.ݽ#KvO#?_>?wk+DUu[@^4s>um>0s!7 eya-}NO"7mZa!sCx{W HO:ggX_]&5TϳOF=tJ|8UӅo|˕G)QB"$~ȢzR)ad3fPI E)I kR(1h2@ p)&mEU_|2pwpxA·V0zMgDmEǢ*r4nenĽI}y8%6C.rN؄$6$eі_f%5Q:A4#Cq/Ҩ95C#]:B7``/! $4JSLnN' jE$QJukuTF\wPN ]U""a3&d2&5&1dMfc2m&Ǧcql fdcqltlplx؄/M"؆/27/x$)IIM"&)6I7$ŦE)B![Т!S)Eؖ"lJ,E@)1[^@>RyFѿ]t-'tcKwUhX@%mD"j E6Ź\) Ʃr:nЫi5^R0eVđcMҤKB;iBKPQBcJ]. vEgΡa.vͥ(;4G_hAGkL5Qm5M!!.G+@@ؼHy}*6 l9סvzTAE9YSK2ʛY,Q-9fH>A>+f鼇 5I s=) (‰[6S( n ـp VŤ.J9LTRx+7FxwkeT}R.֜$pɄ,{{'ia2ɚ ɘLd&17Mc±86Ycql2Mֱ86m:6Y&h؄/M"؆/26/l"x3IG2V_tX}-Eؔ"Y-EvM^V_tX}m*8?MteE׶cڊ _&|*|K m D+{wZڞVӊC h{&L ħ@Al 6@ " ]V&WֿpL78"g㸪u6vB]RJ|w@3J,BI[@Yԫ&\V:/kɸˎؗ>(rK T}rG͍p2-N)=e^2S&sdO)))ol2킺l2_-~"C6tf"Cfl,:dlVn\Btl#\Atm#l ^!,%q,6,,%=1,2,^v9KB#9lpn2uF:$4n3uycc󊏽K[]M[]muc!{]BEmB*b>:dmWyи9[Ηp=[U_caṙa+a+#|#|y Z}|mAd ZApWp.uWBKm~ /Hy/JmՕ_Ȅd+ki(AS5^Lת՗Jxr>]%FqW&ZT~.-,/{#ח Gies귴@՗yS袲.$ 3_X\/h]GCU׎{I^oVߠ,_ r3Pʤ!/~>jP J@QA*~X3TĞlmU]Y.޷pZ]Z;#[{mfK M+XrAzpps+d~d6&ccӎƱi{)hE#mw6̽%$ځ588x(ɦzU_%[g&2gNQzF+ˡ ~) D!)H ltS^PxsV K㽚CsL$rI4pIzm,ۡ HH͋ĵEժ]( B4gTrvl@D,˔QwHz~+yajNS Qi9}:Rsm(jWs t#$>Z^tP{i$~TW1d7sA TF!h.Bx4^<^*.\]ێ^]W҅9h?@S\Bϯ'Wn!xuԆ:Qd7{_bwV}lHnp(7Б6QV18i-M%7_ jzWgET,X!O_̧&&1W&Nvl6+^/: _tbxVIO?$)^%U)§?])ExU)ߠ%!_F~tBDظHj}[,J4B7MzJ½UHUSU/G=@W|Гx[.F/rQAEi- zѮVOwYи"ZN:i. t#ʉ4}yJԢ$᱿jK)Jrg`qtLe=M|Eb Al 6@Y '%/JM;vRd!R0?kjE:T%N5ZJ\>H;|Ya\앤~$rJ#˾}1;<>)wΥH\ |JIJЋz'!` =],uqZqe&Y+m+6gS&sʴ<]ӻOqWN#6=WG^e:t^^ h>ꋟVc8156tB8?kl)D@[ ě'AE@ >$Nea&>E:ǰea&?1ȧF:$4%4!4&?8HF>$4%4!4&S>M|l>ccc&-{utz)htz黼"'UĦӈMOG#b2e~:/yyQ}iEOW_1Gfʧe:/氕ue2O埀 :# hb C-GM-ܷ:e:=ezW)/8|9+ùr o(~) y=+"L!?-0M?d/mT GCիSBewpc*mPO$%ko0[ٹ<:):k.IF4W/EqT)<_ڔEjΧS!j6E&eͩ@!4ndZb &BL/鞟5zFrOiRk:l7%OM܃ PRIwZE#-8v+Pܼ/1En^n73-_W  H^c˱{T>L,L̻ɀ`ry]x50;T=cQj: 'LnH^;s.Ѡ=~]]k,J Vcuh"&ɴ0lMdLfc2Y̛٘&ӇƱilc±86fd7>ۄ/^/2lE"Ȅ/ME6|IRHRd$ŋ$E&IIRl$śIlbSaS-EhQ)Eؔ"dK6o"Q|I͘H2Cmw84hP `HDn:]r\΍.LgпtNUdpWK#ňM> l› 'woBKJ*@o.DiTFz"ab4& ?NiLr,n\wg3ZxWji\Sא*L(*~R̓l GyO骶E&cDG tZa]TF$5wߋ-7"YUI.8IӫN&tH38lLd5tj2yecqlul2ͧMƱibrʢYN_I(PSzKFփ8^A>$"4~L@ 1+ːVaNe20@AEV q_I)|DuNH "x :Ht{QfALgqkajC)М.obx}IHO񝣔RKL뎁uAd=5qផ6A$(>tQ2!w!0hQ<~^v7D o 5 kgܚԧ$ddDY57z;}([DAV br< |!!29d^Ld&d6&1dLM rl^86&شpl2MƱ:6M/EE&| __dE6| _S/IL$_$J>"[)Ex/J-V_& NreŇ׶c _&|2|mK m DK i ӊ͙C h{&L D@Ad 2@ D H[ iIրo*'&f: C"}bxo Y՛E*xQ[qzWDTpm[&9\4.ͫ`ΊZ]2"AQ|~ud3{\rOLSfsdOɜ2S&sʼylOyesyes]/A~"C6tf"Cf?4c%YcU1E8B>F8@A' &`IC6 ~7`ICz6 ,MHm'B#8L% L]6FZ1udؼcV|l>coVWI[$'/|&'9yи}!kиDŽ%}ۄU^ 4e:/oVnwغ/|y{fJaH}9_H}eH}Z}|mAd ZApVp.uW nBKm~%M eY?QhfxՇu!ǜu%mʛkGFZ G_q^}칽{D6%EEPR|MUEJ6\@꘮r{&3½i} gۚ,#uD&M^+çX]߯IjS !_(}dIGBkln@E&Byܬ~6Y.*-%D`ՇѵARTжBɻ;e>56tlcӎƱ" RRbwMb].!4g攽 g)[Kn߱t( cw\qʊH]}(7mGT &\te%yse δJNW|申pC]qٙ$V&k^V8; TSe&MG|I:?~veO{&1wM&c2lKߌƱyױ86:6;v^^ƿw"T6/PK4$1#/K*}o W~6Yt-w}"/Sߪ$CiB/{]pߧɦ&O&'=]r | $ݨȩ+Ƕ׋Ykڱ? '@? ckh袶˓N{dzd2&Mꗷvl2ͧͧዞ_d?|}MRt"t)۫/:-8W_tVmol"x7| _d űA>A; 3)6@ΤA>p13@E (}oؚV]p5ώ.ӻLOǦӈOGyᶫ/~ ̰vl/өAd A} ?)ӧ>:pm2v.û( Cp*NaOu*/-/tF=~o wQDckHߟT0'k3B'; LsO*Jz+@ ,Vq_#lz"W @"p~|D*w 균K+#)E^k/|P-rJ&8޺oY%진lc_/I"EM BiMp΅iͤz[tu7&g]451PX+"h븊íX$^f w*J䖿g2LOdZrl>ul~ڱ86/;[E o|DX-(WKosW/voCJ^kGx>"osZ#eg6$KK5[`^S|M>S kh"~Dq4S o%O 4jSe3n}Fh(W_:KfCP.ľQSB$=d64ҡ4#tJ&>Mqh\g~GA*@K+.yU׀FoEHg2hk4yˆI*$y7 ދ9/(t@E63ώ =>d й!2h$ؑkӭDmZ'_藊RQqc^˟ĭRBfRk"/֦˃U8ωKu*ߺH dprUx^oJ=M Cdks؊z or(1*0s( '(s)j1q&*:*ǁ5is gQĩl@.kdzd6&ccӎMƱyثŧዞ_l*Ii⧓$ū$*EK2/K4E%/>"DlsOEXgTE҉Нa.¤Ua.{~#&Ѷzzu}!vfI5`*>(w>->EU"_C.]⅗x*S@6G,Lf$­} #E dE8/MTJ-U"[ oWW5b3 GŊgZl,xo\j!U= ^mŽm)!nIU/B߇nAE|;/?̢z1 S53*ZLjd2&ӮlLSɘL+wcӮcql>ul2KΗC#M^}(1߰ \J߫2 WsBivR8Si]ZIB@Uк YV)%%D6աo(BM|YIQ$uh@ٍ)7x< ʮdԪbH 9))œ<)Y!c $O^lJZ/">= !Y8|9>=xMwC&]N75]Ly^* nZ,2"$$ ,"MvPg]HP"ΛB m+W_6| _؄/.M] D9 N+A;`3)2@ΤAAd ZAd 6@q Hց""^]9!W(fH/ Ul=_mOO)҂]RSx̋6l+&[feG};Rs38RCF>_j5ߊ:F|`Z*Gp-nHaHe>3Q!/+"¾_22?}lN ne~.˴u7OG"ӼO"ꋞYvMO&] Dea. 8qbE@E,6,M'B#r8?GhL]6Fe!4ҟ'4niM9>62?}ʿMw|]Bv#6kи鼼mW_tvJfJV2V͗d~.D] y Gpsp2=}ʿS'=܆n!%pʥo:_݄"JL}.uK)4%I4JEr^K=wASN+dE TUs]ݷ+kR4FtQdܮy稥GEI-#e+G ppJw)BEπP11V'$@oO Y7'_Uɻn(4ޡ}TZU$)XjWktgh#CBdkh08(F+sZd2-Lfc2[ya2ɘd2&lM&ؼpl2ֱidcul6MM-iQRǾ.}W*Z}]`j$>"sj_F ezԚm\"CȔ^afdMэI^,)Dew{yuJFC Wk&׸>̗uEi*D4-t]dK*#]Aw8vw4{0iSEͅL'Ko/^Q7@8= ^Xxc7t/ MCR+EΦJG8ձ * 8 G\LZ*R7Qܵ{^d{q*#I(ǜr[%jNͪsZt&7CMau9H@~@,PsTMv]4竁n~2&1ɼ0dLfk2yd086/culZ86&lccul6Lbh؄/2lbx3|W=I"IIRd-$&IMRdm&)IM)BRM)BE)BaS-EȔ"Y-EnCˣM?*N' bD4ϱNǎsfB?*atIE7PPg  "=U?ա%lX K{[PG(|GZ}{"[oCNBpeMjR]5.p -9I1{q ZAo4_\D#tIZc /Wr(b!-Gmō"P'9ĩ/ RW>-Ыi z Qs8MOm43:߆ ?d5ɼi2Y̛٘&5cqlul2Mֱ86m:6YǾXSQl0g\&գ\T,WS׫^eX ~"zHmJyɐj6)Zt׃2!s@… I[ccU< 2ݦ :Pa:t x%GD} _*p/  @EQ^F%LEoDW_5Gtn;w Es((D3) LAd 2@ 6@ <$ )` *nnm::cSP5yXZ9$ EkU0IoS 1$Bvz¢>+L]xD:+\)+T6bڑdZ_qEqR?wJ _[n)ٜ2S)9e2Lɜ2m2Sfsiq./ %{e޼lE@=-" ,"/4Ec8^T_1a"]5 |"XApZ 6?-" dŻFZD>%4"/ݷ/j ˴;le2yaj|y.d>>Gp} W߇xso6HRΧZ׎-c- 2\CǿBY@ K/[ F8rQ|讕 YTk7`C*h<^R. Rs# 2&d2&5&1dM&c2mL&ǦcqlM flcqltlplrV]^{"fƢqKюjE'ˡH:"IiUxнCiYA{.^}5*=F;\/Y8z;NC ^FTa|LiZV$gS e h$T=Iɏ 8jd:u#m՝o}Qt#&(o&;i&}w^OYݵ:Uphz/ax7䯫3+FGo9dL*GMGǭ(YG2=8z7j* WY]P=Dq\#K;HsEǀ_Tiw=G-`uHStuo %\3.(swEYWV 4I ~݋4uЊ" ~=nĺG'KZ9BvAX]ZcyhS O+rNH#D*"g}UBQ!-'ONsGmpeૼ.Z^X3k_.xo4d^Ld&d6&1dLMdؼpl2ֱilcul2͛m-6|"| _d&|f"V՗MRl/$)U_aSRs̋se߯xױiVW_lśT_ wql & ڝVX 7ݙxs& 2@ W@ D$̎g)$^wkq0啱z+Jv.ċ"|Z{Dn7AE+[2[nuZ}"<:-@h(IdsS8 wpVc?"X@p^!"XApZ 7?-" dOh\ا|lc.m}>6iqW?^xH"4>ZhH"4>[͗iw Njk5e2o[|vG0y5R~hpoAS>uiq+P} ӂùMI,^r􌼌zGA*)%g>Ro\"AEE0 جKMgɣj܌ri/^kp4}i\Y,!g$r ȒsR#yMKEN-85YwM.*nՓYҾr?.krtDS ϗ#qKp*:!65dO̯ǪCq{"IsΒ˗@CM. g;.V~j5WYO]nj}'ф ?5_cF} _i5М!Hw/hjZۏ0CᎽצVKwfH5cKt M 9ͥ)p^ {KJUt"[j女$KT;56ɴ2y|cqlZ9*|iEJRt$E&I*IJ>-ERM)BRDjhQ#x`sVY'ӹ2%pTU7Qc~id4oqn@)o+'\Axcr\qo"F9A<(h٤ ߩ\x^х8gN I[-UN8ĆJxY4BH`]_DP;~/&՝3,  09W5^\\UWEFh7pk0@)EY6x<} "7]d8TAGKѲSP \MsJPM. j1ñDw/QI/¿3ɴk2d2&]fؼdOcʱy~=Sz J^vojv7*Dէ}RIfZ9R*CLd2(*$=F _ᦩ7m+W_6| _؄/&M] D9 N+A; 3)6@ΤAAl ^Al 2@y (8۲q%* =Yb(sg>Z%ed FA'\PU6/`t[‰$[Y*KWTTVkMxkQ6i/ vAp[M޼콫Yg@ަI1d@m#ORJrYY19]ՊHkIG˺lkͫfs)$gZ$7pBK..ӻLfi˻Y28[v3/Wi]/W)׶`4ަvN2D2l DЦvUlTۅ*2*UQlj8iWIF*uyWKFȿ]иf]=6=6uzl:e~zN2=}ػOgm׮q.uy_ݷنF_4elelf+f+ue>]2=.Ć]" D=dž] GO/TOk8E :N_$_/ l*TWUz`ԛg$al.]$ hA>Jݮsȵ (w̼IJujnO'3$\RT}+FUC2a@ݸ4̛BZH.B`z^u"+}1/0Iػ\}s^Nk5.>g?T@i~4FV9zo "M}$rpc?6 \h7;,w:wULnq\U76*7$hCpd߬|OQӳ |SΡJ Vޕ9ws^ sV:(\ݜ*)%)usI.x:;'}\q I>58}ͩ’M :W` BstuR4r*]n_u2A̩1֣ ~jߦ]l4].%@6/@jup5qg|RVNe>4$9x؂{j]VwbGX(?+!)a}vpSBh\vgI6%"~9CZ/NO/͒yU`i`Ӂ&ŧ鋟N_dתHi⧋"ū""t Ei(B4H4`s NwAhmJ:E_. [PRBWpn)rژ%75JyM [ie4t`.;B&}Rz,Jfݓ5Z!$wk}E[Mk`KODPU+AxIp4>zUVC cePu{gvO<.6l!Գ !֑kN-<*弫ܒBnIqwpW&)ك֒,vf|d2KՒwM`n` l> l6MHUǐ%;RX㤪V`RVg?E!_כKT܈fؤ6' ^ %` ^]$0ޥHh%`$QY w6qIǮ a\!a.)hM0사 h\JH%ЀM/?ٴ(@@d4eZ6DvaWXA]0]/7)9bya4t< _ URr#:(ho9]z s#5(\9})9njgWbJhl%%Y2 l: l~:6-{4}LUZ):-RtN? E~9SO_ZO_+~9L&}G_<6"vyl6DuDV!h[⿎=)2DAAl 6D 2D";H kz$y!TԴ̄9dlqQ) g&:p `Y|Cx G meqdpJzYB918FU$H}#Lo[ZQnbHql ʟ**١ RrK.Hv,më*5!E\U|.e^.}L,7H-~;c.u}k_EpnclzcoS '"vN6Dv"hWEFE@*2*‰]Ȩc65l$#hNhde#h.hcc:=62=˿\ͧg>z]AvƦ3}m 2=]}mmO__V2Vmi__%K/oAl %A}l>ޥ}}t.rO5s[EpqiuKMZtM4wp(6K]r$b~8Q\MދsePz8-ud/1fKxiv_%%nF>m1 21IK%ԝ/dF&n-L|rnx'Юh`Zh(lwk^MjW(-vCsR Y0JmZnEa:L`xzx]L3oL%Y2%bdLflfɴdK&ؼl2M6idM` l2͛}]aM Z.jR1GCVԁ'_ق憩F>85W! 4!,[IPU,Ūd\wfK BuE7/p9@HN[u~ `[9a˰A/ڥlu\:heI89ْb{i.85%?>Ui4STb LW/4=]Wk&7)S+Ec2f컉umZ*E ޜVVq0VW8&}]>\ N7"[Zҫ]$_I ړmQ+*[rYEi۾`lo:xY:M [2()>MNxp׏ₛ=BuޗdMj& ^fɴX2%]2/flLvlLKfd2Mfd&6&شE`hؤ/MbȦ/26EHѢH)Rd/"ŦH-Rdm)HExE@PP !EB6P7}@jmI&} (]ZgxPv\.VImp&^WӸ$)T#(smf'BKsECk[@ " De90]|/ U/:NjJor9Q.Fy6aZB!$usMMr1Ł]"jApH'>ݩ4scj JApԷK&7_ԇN=E^)|dקiyh>/C97gMrafG9)xB̓ޥpd6K%Y2o.,7vlM`n` l l&y3#e8=tUsYyT=~j:@f$i!RjMәԤoCu_P\*իFa&}1lMdթ OW q9x00/֑CjiCu$:+ TF]/Mdg/0%wU.&×0m8|Z2L]flwLf2]f˴,,/I]^K,9˴y]xE^Q^E@ ZUϫh G j="XQpc@, e8-ě o  UXm~pb!]ЦyyJHN+hM 4R ySk{Ǧ9=6Vy+cӮ8gy%N~^}Ѯ{%h|^RѮuy%h|^ݷ/nkՆem2o6[|w[X|yE.d>$,fdL%Y2%]2%.M`"6E` l6M66o6&hؤ/MbȦ/26}/ShQ)EEMbS)2E6})EhE@PP aEB6P7Y(rs_߹/9@yWdE\ a!Rj^BuYXr~d:[BnND&JM DrNx=l?;(.H?jESՀ$99MC~P!^IQ~ԊXH 8SEx/N4Xl_* ]}U$AIILI2LJ';uT%vpvUH},Pm^TQ뽆sVΓII0*[xQ%ڳ؃>%u r]Сvofɼd2K%]2%c&66fd6l` z zyR_PA|\Q^M7 z pwm?_$GIW 7G2|D%mUgHMSQKIL[$ F~UE ?=u&q9<)A Q _M?GrU2`P^H MP!.[ΡSI]5ὥlEV]ˬAV5S}#؋2)uJ{]5'>tu(XO(tBxY|aN=" ۤ/^/6mE"ؤ/Mkl"Sxl"SC_"B_"ס/]2-j}n`Z ?h7}Yśy"hǶDon%x[ IY"6{RbC!xE!Aۉ׻gޭ`*.ɢ]~٭tP}NoF$N?uj8"aᭃ0rܓ LKC #$ ƠtM3@[*濩Aѝ֊$$2ߓ"(!%Ǫ Jw e^2]f˴e2f2]]&l2-Y^d2̛g>BE@=-2*mТ.4^E@m8ZUy"]{p>O e8-D o  UXo~pb!]ЦyyJȻN+hM 4R iS+{Ǧ9=6Vi+c8gy%N~^}Ѯ{%h w+AoP-˼ۆZ|wL?_ݖ:/j]"}IyO>hԥ.H?O.u 犺T?iY@&-}kN <̯"ThElͳ]0̳א,#;|;{_*I%Do?qQC_nK$0-05Z1WxF"\-KLWYo~=[\[KA"0h ]K9.Kce c%z~;9i8PTێ_^.FrҰN:^W G+'}y/H_':<."*%H J7!R Zk&>)חsޒt,WK^66=lV}g(O[U/û/|oAc2/2=Zk:&_J/#rl`0b.zNJJF0$ xKAծC)U,KHAnoQ:vaU6.F ٬.MENr#]aʃIaz VJɒC ;&@MIJoGct)q}[T չu*7a+/zǠrVttTOˁW?l0ŸKo+f' L<9$ DT(".F TT<)M[` ag AoRfJÕ\xT̹^!m N"5)<ärwz|d~zd̫%Ol6ͫ^/>M_tbhEO=])ZS(OC6PVPd`Pƞ~ZS荱ޏ_ZA0:m|sITE2Vs^ݍ.MB k8:[ӫ^_/q/g^)|qV2-f 18Kʍ&?\ O}^(6961OKfd]2%,VK l6M&46/QˎȪvokʒt;ҸO}RUzV=]ڐ)Pݚ;CKUr'M@s)&lj*Uן]ڷ[N.Em6)zH}6'.x+)Ӂ])؂@kh u^_/w|0pKQL40Wf_zAV=y;.'~U.40lb1q.2&f}L q|: D̊h&r)Xj X+K%K&dZ.ytt` l^*}iE(R|Z"Bzrŧ}鵂VreŻLߏ6yl2Dl ۭ Cn Dd{Rd I!#Ad ZAd 2D~"ⱁ<:ʷa/MI/?7;klvh0*wa'*7 0cKTH =bM魹*5'J?^oÕ䩌ɟʋ* (kkO"H f}x$M1JDZHr'e3zl2-&uU|ZU|i"e816=)M D '"~?"`"]vĮwUlT'1[N6Fp4_'hJ]2FU4o4iWMFNw_ǦӳOm=q;c{[+hܮt]Wm?~y6[4[iʦJ]NLO/yI!xbC_OxcC_G.ӻ>:pm/Ci!2Qlzڦd00v^s1m&Y[#}wxm]膵Tj,:z~ܮ.f9*a"x{x捶,ļ^gPLj౩B28d`k} X-h\b/SƟ ͷرɣpJ~~'fŇr##B q4̂GɎ 0ʤGaSk\3mӛ},'C6MV(֬ xݼQv8)~䮗-&<}yk͇[K\409Yv@0 ʥ ]_ou.A!xbv F\>U2rW?P)*2X2:>WƖrQf\{k͆"H/5Ib %lA #r6B$PUnnN/#t"U42XA[S%dI-RR:xX$f]m{Y^a!`:uIB$˞:@?KFݠLaߊPƔ-NO/̒Ki`i`Ӂ&yثE鋟N_dתHi⧋/G_| Ei(NzprE ~ZїM_d/6~?Ac!#l D 2DuDI!h'E⿎"C!xE!A  ?PAR|-s:M60ؕ3ir7Ձd}PfQAYbzIW~x_X7R/ 5i>#L1-הڧW1Q6DQ :q" IrV*_('%^,dAMCA iKTo sR9JJbӇ6_mU<'YJ޺VJ.u0S%Mb0uŇq%I6ȴ~?$p]}Eiey#4OtrH6 RWޒt,K^66=dWW$0 U36,;ϮgҞS<[&C].9΍RQ ˂@sIeX7 u8h%ނSUټX7mws fu=Ѐ B.OLO/͒iU`i`Ӂ&y؋ŧ鋟N_l-עHi"E""t Ei(B -]*:]u[۩lXOVCy"9y\.򦺇ҼQrܷSыeT缟\ЫC1)Uh\\v:4޸!hfJ:L LMz͹6U@PԙM"<6hԮo,d^{zS rezɥ)IM'lzHsELpkg.7- w7'o#Ȼ)6.Cmn}1 Ir\iv `U9]h$0TS?salLK&d\2%Y2o.X&i76o6&ؼE`C1TS MĠ㑡70qxRȹT\E)hӽj v1|=Ԙ)&Y`ܟ=:4YMTE?rzn)j$GAxVŚK sTMN~j#7AnNGXNIk}NL/gPNkCK:C/6 5k`܀ӗ#L,6(.1 2 5Uttdzzl̫%Nl2M^/:M_t"xVEO=])ZS(BOC2PWPd8pӀsdb?V鵂V/:D_dś>җ!C"-DM-DS" D"6ѭ0DAtH%Aٓ⏞!C",Ć"C!AAfcvN{:KbNdG1nt)o]~Q1o$b~zZ o}k| hp6+ Z_6Y=UP V|eB;!ϼ/$H运GcȍoKiZ^KŃI>{02W_22=lvV:tz鳼"u?"ciƦ3ثLu˫G]^/:E_4Z> c)1/( >%bK!xӨT8A *6*Tp¨TC*2*TU4򩠑lld+hd#hSA#  iSKFS=6iSMVe:e~zWUBӳLg>+qY^el:t^ ?|Z麼4~SEOUhl26[4[i_4[d:]2=UKcl :#K!x"}tJ!GcC&G[22=+RcWN:pu\?ڷԹpN'Ӓ3K,˾,e0^^hN9]4%X L䔹{WKH0S%HC';-Wk /zhTJ]ݷfY%'H\cM߫t ﬨVM|#EWQ*FoÇa6Lebo^bHs8{rV;Y 2n d9x?WuC#nL$~KŒ,yd6K&dK&d\2,6-L` l^6&lM`f`G`[]'qW#]^)rKw:AW9ȮcF 7X FI*7RZr|92"?½v5zB'!Euh* q2Eѝ-f̭aʸ΀&tvZ:ȴco7#] $J[o} qP_({] }MWtq?%fA96<ېC9a yL~Q8&uk^ߧoP~zg.%N<еRОЄ^m@~\0]YUѦkx?,K&dKŒ,̒.̒ysdؼl26ilL` l6͛m/E6}"}I_lE&}fb)^)6EmE"S)EM"EE@^@6P-!E@P M(B%{羵d4)M~d%GldsŠ%S_A))R(<9w+֚xtd04 %T.쮽D}lyM`C"qʛCID':X:#&-V|)]RZՌl ^'ԓz&'[q'I\ J5R~.7pR(zw^<9ZJνtʩ%Y2.͒tdL%gvL`i` lZv]nd5-A&y]1>?,z>]/P+F43nO5Va|28Q\C_{GW}qьz(F_\+*u xE֡j**}OJJÛU"ҷ/))g~ݠY&$Ld|NjJ٫,)-#%tr1.nu:G1KO* VZEfd̋%Y2%r_fɼdK& l͋&lVشd{1lZ"&}I_ElO),RQ SŇ,!Eh"K^/>D_K^%o}!յ#w}!N_dWDA<6"<~`C"h[AUb'$I!hٓ2DA|H}.Ad 2D"?fPVUO!Ŧx5[|Gj.F~? )GA'_@ei@wKV$? "h6x_a2-v.OeeK9˴K9|J'I/Ut"ئW"CvfU?4tRE@*6 }}ᶗ"f8W\AtHm3l ^1*p*6**<1*6*Z65KA# 5lpJ]6F^*udشcޤzl>coVW!['/|'8yWи}k[иǂƥ}ۂU]4e>/oV l]l%leu/ayZGK?@}tHmAd ZAtWt"?&uWInRKm~FX(>˼07𡕤Ly."@?'$9\=[h_ooX^gRS8PS}9Tܮ0OooԒal"بk` tZP %9'v}'\1lF0,{^AФ`;x)o2]<&*׉`AiYA/䢗1u4`q '!V\L ˫ơ|b(%MPJfLe+$u[m_ xlr 3_^%%Y2 l: lz:6-_W Z_9}6}o>6oj$[on)' k~-AmSM69; j_|G$鏷eSZo<=+1OCEiϾJNeUbɮoEAv+: S8,u)j%7[)x tR0"U% (\o33bc)RyC%_PzT~F_7XLv s״㛓E:Z,u9ƂEMft'ZJG%6+ ө 9S1$ ~ 2< ǽ8'e7oOh WP ګ{ܳZ^~7i`ޗAo68`{t:2x~]~N|߇xL-x&EG<|_}IB/&i$ru-7U o|gtz}lLK&d\2%Y2o.6&شlM`f` lP/"ȁko90Y`a68d~2= .+R||vմ2ٶ#ϰ)M+:jk)!uaRXG"5: 1LV$t8FzY-Qd`Ep0+5.u>%5vU]v)t&Z ]P궯ux; IE_puWR*JM i6@ ?}/^eTWZNU7AMD ??=u[}+E,rwWѺ^<@{yad6B6R3r4ٸC\XgLK槗LfɴZ*4fiEO/6鋖kQHELeZ@>"4aEh EN'? 8WKk^+k*?&})CE6}I_#}"N >$Ad 6DA|H%A٭n!C"-Ć͞} ħDAd 6D" Ć"(Wd_!K`Z{AmcUqSU~xݫ~s=IMjMߛH%- y9T%&7fKndTrF\jP9O?; l㠶 tH,klPhC_L/U=-9ՊHhAtt]&˴YӳLOyN36?WG^e:t]^5h> })ת VO16=W fC)ćDY" D 'Y"N|( "`"MYcPCVE@FE@*PA# PVFHNpA# PVHFHJ]BOt&&ǦM=6[=jt]^V?vyu,gy%N/?t錽4~dU]ӺO啠./~}p4[鴿̇eV6VlGud:]2?UKsɆS>D"6 Gt}d>2tm}l..ӻ"u?vyS '=\QoLQ *<w>?+WiWh"xVȠ>>#acW&]*` K) s YMz;]J~yaHCz-6OVZw7r4Kev$_'?J0_c.L[09Jc,mI+76^ m)<"u.mH=N>ߪ{mZ(7xM;s/|QWI9`tLҞܳ9 vKEzƔ3i!OdJX2/Lfl̋%Y2%]2%.M`"6E` l666m6dZw3ۡ$4T\&&z^0R;)$kN.ZzLR y^ôhtڻ):mYa/*>XpcU7xDy`5܃vc~1˔a O?K dp=UA0tht?YQ%2v=zb>fG} - oroUǜG_ٷ95LnY-ȹ- :Y⦄ita. &eJHHON~ҁrp}:&Js|}P]Нe@k 0[(hY`6FMwjYjnYj [?NihrI9)n*Û@C ,t\t|=zC| ^{eusʍ!YȽߗ ~-^aY2s#kJjXg(]B]Pb N >ӗ/=$V ޿qoKŒ,id2K&dKfd\2% lZ6&ؼl2&66M"xȤ/2m"h3}G2EEMb[hQ)6ElbSxHG2PP a EhE@2P-aEhr|^:1hhgA;uCGjq(7zg'%$^$}/eF^͢<'u΄&2^L ã(T|\~SE ?{L90krl1&>[J,\r+PN0p=6,O1JTk) nυ7qk-:8)`Ȧj+Vgw޵ j/u]_֐}'̇W!iB~t7qR𧤯6^T.)gB1YC35ǧhI!7ƫh>TQ_cuKKfd]2%,K l6ͻ&46)>n ٤Atm( ̙ˎ;05<{͋hh})طAFi xp`Dආcx&JT)SRj+^_`\+7mH"R}ֆJpOp)le )*M\mMVRJfqN"VRD.`AJ(4qjdZ~j??TbZv$8BWItӛEjT. 45 ݝK#PHIÛ74$pK 1EA[iYx;7L%Y2%blLflLfɴdK&شl66ydM` l6Mm/6}"}I_lE&}fe/:D_d"śE?"t}"doBPdwKŇk{+^/:D_ہV|nZ/>D_Mo-{I!c!xcv+DA 6D=%ćDvO D"O :$Ad 6D" DDPtAR$&]][{$h,;*OK#}-SËB9'4Ǧ.-a8nsِbVUj#E7y&tiE0̍B˵"RM(!0~7L]&lwLf2]&˴˛.̻.̧,RE@*m~?RE@*ͪ.4hvpKp+Un\RtHl3+}p. :$N6D]R8A‰mjRÇmTΥN2F^j87KA# lRiޕ.tޖvS)N^P-N^OqqC׶qKuL_6ܲ̇6 }kٺ/ayʦJiԗe>/oWKloAKm" K"#Cъ%ut}ۤj?H]~I!ݷMݯ4=jD̒<*@ jd!3twyuzUV[I"vG-a-Hw![R~$Xg x=ô|yȽ]j9U@\Jm7PY{e e9/u2֬-s\#%qt@$:3 n_!]2#U5.1>L#Q0&^gf9JyNlg @vN0|IEl| AB*PDՌ}W3M,1EÄ[5opin;|5`p[䋺=U=wrƒt,WK^66?l}CZ4!tWVF.45u ͗ U3vDIYJ M5=E.N7,5Q:k鬀ȣHV=GWreԽB j$qQz1j0cPJ( V+,6g$< /JJŽ-kEx/ipYOV+}0 89'%Sq>fZ$ SEP9"A`6"0'B A_C]ϻ !8?I}F=^Π>N&SI84aqkk 4smiߧ_pjZLN(5r8ay[>`ѥKܘjVAVDbͅe@<)R_sM'9:gWVHt8E妼S^u`=kNՎ Z&`?fZ÷3_-QoRAFi ˇ>y܏~nmJu &,ݬpɹ\0ZK\YImNX,OO/̒iE`i`ӁM&y؋ŧ鋟N_lתHi"ū""| Ei(B\f{Fתnyd#U u[,wrn|EY )JHU(Q%11݆wOȧg0B횞-:L^ y< E?vT5E9++"B\<8/r凸C$zC`/総˔R2\t8zY>9R Ɲ5LQ(U;ISbC(i:OaDenPy$2u/EI+AcϨȕ-w$9QFOhZ=٠ L_:$Jnd6K%Y2o.,6K6MH6"dM`f`G`"EH!n]i۾տ:>E {I灉j4UP@i+EERz1 6U< i` 3}q|c)PR[3ɕ^ f+ .95i@r&)a J襾ͭnq&'FGITD~"&GGd q,\pRA$ЊN⨶ Zѡ_ "ɮ />{XE..}otdzzlL%Ol2M^/>M_tbxEN=])ZS(BOC6PWPd8pӀsNb׊%E}M_lo/M_DAl 2Dmc0.DDY" ě V"O :$Al I%AtJ!Ė"C!Al DХV9LDh/qi{/ȼ0EclEN]^gњ.(M-^ /HTH6(^I]S)KW THV~ IOQIm*^#?"R%ax 礿 o/AЊt49KZ6%s(%oK\053@ _~g{B..ӻfy˫̧g>+R,26flz:cόїiidll/?]2.^d6D}tH%AIDt}tH}IVLLOԥ/Hݟj8TOk8W/^Ìc"xQG+y.vl7d(Mċ6E1= LPADE"2 45k%jF;^{&j-M"HT/{ U i_Sn𺷹uT?_&r lV`/# *$1[#lGmH7[/;> ?7*R0x (K^~|1"_8]Òyd6Kfd^,͒,,7Lvl&6-M` l&i3uqp|"2Jђ{ps+j bj&0D;]\+:,biF!NK.cz^ȊJG%fox_`XKԺ,w*7m&ȥOc|q Re/ Sa!_%Cĩ{9CyI,!]rԷZ]G %):?{WsZh\]oNVPyVuR8K6ۣ#kø~4TjqT}+~Xzly ׌}ӑ c׎6۰kH G6LQ`Cy#+]W ]UTa#'Cʪj.N|(&.G0\c).#;7پ S.X`4%8ug(@'FKQK>|`w.NÒyd2K&d^,̒,,6LK6Mfd&6&ؼ&}"}I_d-E&}M_lo/LEbS)^)6EMb[),Rd( (""l(B" EyjP{7tU@jZnvH 3~Bp/ťfl[NW>@&(_ $/*mvř`JT)d :UUYAdc/C^(\er$9eudmPV$ Wr7'.G _7 u Sl5oKz_}B֚DoIZ! I B+So]YLk7Cf7A܃}fɼd6K%Y2dvL`i` lF`_!;0+*ke{ice (M]nH1N9Z4cNVI "BSݥjz7"E@oSy3HaGA1$u8>H\NRw3rXM Zv8IR:NRRYDԭ71H]tg5Kh'1\޴28<nB_Sp+FSRT;4Ô d^,͒.Kfd2Kfd2K%]2E` l͋&ll` l llhȤ/L"Ȧ/26}/S}!b[),Rd(§Y(&/֒W[D_t{u*}!N_l.$A7K"n"݊͞ԒC"h'ņUO ħDAl 6D" ĆbKIwA\_c#t czAKYfW(/w@Aj,͒uQ JedLȚ()\~1%OƋY3hpv]7HB8VP||e^2]f˼e2f2]]f˻.L.L,RE@*m~?RE*ͪ.6h6pKp+_-sI!Ep01ù$f8Ad87UK 'UlTUKy cUdTTlj8F:4nk8-Rȇm.A#zl6zlZweK=6걷e]nzl>coWg+qqC׶qKu_6ܲ̇6 }}v2lfVK}_vK}䏖.&A">6t]RwI!ݷMvݤt}JA/&p!)9ֵa/"6@zrjW(AmZkс}q} /6tKH0o]0. #ػZ~}6sS#&E3[nCԾ0ՊȵC"&pzR% ˒`&:E5HՏ,iIwYε\U,]VPM u0Pj_QBjNaW>X@~z{hpSղ <|9zj-N_%eeER*;qXl 9ƔlR}J 50 LンiT~CwYnv".).gYRokrd,l=W 97iqrˊܿŸ?*!aq: BҪ' w<*`ۑ#WiqVp Yј2yC}`9}X2/fl̋%Y2%]2%.M`"6E` l666m6I_H_dEE&}I_lś>җ)R(Rl"E"ŦH)Rd"śEmbEhE@PP aEB6P6Y(r7`x6FȺJ<~_ fkL#b&QaX4yU+̸їE˹O/jϧ{:`@Rҋd/ɐUr̠cw!YQBE黔mWx`AS ?ոg̒.!Ⱦ~-I®\%jJj EdKk)Տl#11v!{&q}voChijEZDHˆ@Q0ނג<3V7EH?^%F jtBgzu긷`䁔w,1Cέd--Xkppxߖfɴd6K%Y2dvL`i` l^6j ~<bi㟺GQ_4/^HCVmĀw}ɼX2%]2/fdvlLKfd6M&d&6&ؼdLEbئ/^/6Mbؤ/L_d"ŧ"EHfb[@>E_tB6P7}@%/%ǒw{}mZ؛k}m/2Wk^A|Hml Zػ݊%ćDv DnfOjI!ݓ"CѲ'e :%bK!Ad 6D}A޷KGWn<<}i%Fcӵ7'9 (rsx ՁA[˻\PWr4yXRҙlZuN(=XtG=6D mxY dn מ>DPfydv.b2]flv7w>vyesies]Rw_PEMݯ2'u٠YPEݠYfn"Cvn>p "C`\acsI!p!xp >NlبW:lبx"p.|(hp4Jù] Pиe#hR^MFM+=luǦC=lu]qRMzmq,wK꾶},h\Pݷ-h\e.oe:/oV6Vu_vMlh/t_nL_,yZ}tHmAd ^AtVt.&uWARKm~/>\{MLQ$j{{1wjre^)(T^˺NpC[^8J/ʖKII>e \N7pE6IaZXvW-}Tͺ1bz n<ْt,WK^66=d *7^oろMFwEAI_ye[>Sĸ |.sv 08O!!k0PΪ/gf*[OHTැZHr[sPT\A{5i=h*ZjZAM& $?nT ` |҈KR{(6 {h%%$8_ RB_? yyÄ2'-x`0|YzPezYWuu <7{ïa V=(e*6A?Fbq?L6^ [ w-@⤎w}yGբ9DznjrdRNNeK%K&dZ-y|t` lF`4}iE(RtZ"ŦHH-Bz""p1ͫ=x\^;:M"XG66Rwm_x}-Q˷aVzӉDM]nKUGutN' 7@E?UIRs{sg9#)P*(mN'g9"ͩRWAE[A/R UQg@sgdc"&Z0 WI<&y_ D_}KW+T<z~uKF%P6$ן<21;P%o[.EM14%!ͮ<$_J˳Ò,wfɼdKfd\2% l{7b&d7m`)REJgMPeKvE KyaLEX*Mʂތ+nPPݣ_pнG]\.(Às=9cu)*hTLS_W _zmzpӜ >"000s0em4\+-˵n)åW 0)` *+d`B|z}sv,BSC\מH{- Cf0oסK?GFb:> ԫw[y $jऩ呎\ ;Фt-K%K&d^-ytt` l^"}iE(R|Z"ŦH7OBz" (Sɧ%8p^+k*V E/LkC"-ĆM-E?A|H%A٭ K!C"-D͞ ħDAl 6D" Ć" kŦ'2|_J Ol5W#hC8ڹ89`!M͗{(J~tu'%1ѯ {Yc J+R)L22?dv8tz鳼"u?*ci3ث̧u˫g]^1苞F_6 ):1d >%bK!hdKQЩpdUlT"Q<1dUdT"`"`#hSA#  iSN#hSA#  ySKFS=6ySVe>e~zWՏ]^e:=Y^ =O36fl~:c{Q.uy%h ŧ苞F_6'2V>/amL7EK%K^?l :#K!h"KC,džM-ݷe>e~zW./4tᤧ5+ꞿ/CwΡ[`PVNOK`狍K;UPGFT*a&@] 4v_d Ek`M#(:ȼޥspP_&e#y%l)=O_AUN; k6|.Go$|v=)9h.6غ /D"9236𱿹+C_`MO(~ N^RiSF ^~Dpݚ-AU. $2.aRۀs]Qk\Cu^r'xе%Q Q9Ew9ʭaiԋvߖ|OJV[\& $|З}J =|~?ᆴV&7T' ig-:]+$B.v=)rٛ%(F?MIPoP/c'5A֌C_q1at+̯RAL6o)8]3g]\6o6qA>qz6l]_֣|SS7x;\0a ݂ǒ⼺mV>".7fƖd&!@ڇFR',U[@zuTUUYjb{s64I9C[r4Sro!Ӹ[F<ꕆA%V׼xiOO{0 N]7E{mcKBygQn2 憑]!FE*L; =vNoVJu/F̓]2=d2KՒWͧMO6e`//~:}I_J_"EE.Rd-)᧡(B+(| 8iZ\]+ZAO_+Vy0N/LAtJ!Ė"C&U+Zqr4l7Oqr[]0ΪYA#1S`@4լx6Q$%`ܰJ֑^$LP׋e#;0E_z.L|eæ6 RhD2&s7_dSfΊm VI(aS !@>R"f'\#|[2.^2%jɫM`2#|]rt5dI5 1DWؑg%5WEۿ즨 U-\e+vøaB7p⪒aRr!mcVT4=Jtɮ`'9G:%LBjM钜a#2-/G刉mVm.&ȞHd5V멷We58=V+{Yk$F ˛ہ:wE( ZsʀJL,(umf&*OAWԎ&{mZMyN+,hr8p>!_%[շ1+ Rݼ ::F5~8^ czYi}t'*.:6#%Nvܓ3 L:S;H; m`uA2E*v4lpԃU'k.KFښd:]2?d2KMO6U`/~:}I_J_"ŧE.Rl )(B+(rk[4}Wr[j#_F"3D_t>хu_+,xd%@I{:6K*shX&EpĥZcb2r=%6d`,a Vn9yK^e 'd<%ëE\xK4K *dS$]b/^PI2jy:+.,/B2a=:)|$ F!y88bT.YvSSE@.]DPbL H̥E!h^Yq_^Q(fiV4Jpv Ud2K%Y2o.,7vdM`n` l lM&y3#g!O1׽Z:43%9׬n;{_#)3ڷJwo2B~bi֢@Ic@xÇ@2-94 r*Qĸ\Ӣ+a0oJ 3،,Z Bַ\D?,H:_+ rU7 +bߩszP]v˴F쒬OGC:ZyIh@ jPvH9ÃaNv\8oRuO6 ]2xc-JȱZCveX,NO/̒iE`i`Ӂ&iثE鋟N_dתHi"E""| Ei(,'N~p 8 :V׊U`\+ؤ/:E_|ئ/27/C)DDY" D<6}؆S" D"6ѭ0DA|H%Aٓ!C"-ĆbC!AdKc7횕&arذ)~s̭{ 5w\$]ٹ o/"Ts qSr)5%mjc1@2>Į)_4@9JVtlN"JzqR5.ސ }-;>:%0;(ͩ0pdd`VJ8|.e^,Y8˫M+#c2e~.4uy}kՆ@_+M+c"O :$Al d8  'P8AVEFE**6*:<7U"0F:4ҡ654F>4ҡ7lltC=6[=6=6mWLOJˋLg>+qY^el:t^  O2e~.uy}kՆ/p?4[̇eV6VlmLK槗j- :cK!x"KC,džM-ݷe>e~zW./4t5+C).ʶאſ!9~jW li2<0&iT/Т(R$x=eIy* ~;g?`>y醺>)+'C {5f!,70{Nx6|ޤ%EOd2gD_'>L/"ר/ i76׶3xXԿ `Ԓ C֡d̋%Y2%bdfdLfɼdKfشl66ydL` l6MMBӻ3 wn'x<$̒K H|S.>}$.:& PR"ul9·ī=!HPȽKpսQ(9Uv3ZNx~̋et:X\j{gQAPD/݁~Y@)oƸ9t5u6jveBcŕ8OD\nogή x+Ie]Ou`5odh7l JIӪY*}բf{ MBF؏?#5Ң;`!ۿ|oDZύ4UK: Jɫ#]ru36,Xӿ9PH.k~10[/q%<~u rl6xQU Z\] ޖ̋%Y2%bdfdfɴdKfشl66idL` l2͛M6ɤ/^/6lE"ؤ/L6})R(Rl"ŋ"EH)Rd"śEl"ExE@PP aEB6P6}@% @ K_V_7,JN rzpv;{N9q „6BXDd\PD|8Md9/aږ=n:ow8biQ ƒV?E%yVʧQs.F}֛xJn1a)fjb`%Y2.͒tl̫%6f|du9}]JM.Yz+E`?~2pV/r]PynCxs03Eh1aMB_N߭PoZ_9нp#*^@iNG]pMMOVF Pp6/T=>tߺ AHViEwz~A`pkq+:~67P[eLvK,̒ %cɛe66We2M&?d7>_Y6}}!}I_I_Ȧ]k}}r_Hfb[@:E_|B6P7}ED_|#uWv`v"xvy%ćD6M%WDA 6D-=%DDvO DWDAĆ"C!l^\Gx//k Rmm>T4p "C`\acsI!p!hp :NlȨW:lبx"屗F>4nk8iE_+A# dRcl2zl^鱷oR+=6걷e]6hzl:coWgCݠYP-h\ecARLJmA. we2p+E_/ayʦʫf6YR_-ЊCo"C@~fE!ݷMv~fE!ݷMݯ4=H82x+S*G6LsK0~Z ~}2)QէXi0[江G9iXb,{Xԯ7coF6a[@9I} KkNr|qf_=1|Ӱ *u RAn|Q< Ig^8 j/L).=R0r'] <,_wumkr\>srrcSԩIE͌oe4ur5CNJ[Bcx@bzD_/_3h@4Gd:]2?d2KՒWͧMO6e``#ۤӗ?@wsD?H_f`n}6S\[ۤRIR%J*SRP-T7$ˣe qr42 ;8|RaӚZ=GF`\/TSHOVwReߜOܳdbls:":UBRF#7aZ]һ>#9 Q޲>zRw>D=#of]n좿u 5JBƄ?r]~<`ܚ%dYv8?w) ~tlDA<=NΒ,vf|d6K7L`n` l: l6n[`IAˤ_W5:*֤%n^mt~Or[tgs |P r|c^xRfYXY@چFj|A} Ъq)A.Ujz^[ޣ/-qS|4' qu#*z$GH|e" U0k `4Df.?|5ý\*o)9e*H^'1^SvoX`tݍzn.S񌣜} 5}otd~zl%/Nl6M^/>M_t"xVEO?]~9S(BOC_pӀ/>V׊_lbh7}I_.͆] Ddd V!#lO D=)2DuD" D+" ĆO^`0% ~*x7jô";0`lrNKkn{!5T59c SLR7 &rne ٠KVDa /׭ ҿ`O߆~yp:l*f …9姻LO2].g>l2.uUtZU|i"e816?)] D '"~;" "]~ĦwUlT1N6Fp4_'hJ]6FU4o4iWFMOw_ǦӳO}=q;c{[+hܮt]Wm=~y6[4[iʦJ]OLO/yK!x"C_OhcC_G.ӻ>>pmoHO35M.ܻNQїyċ_2QnɃS3U┿`'@6g*61xI Lt1pp TC0aN߅PEM6?R%'7x'Jk9{U.KI,ZZ&$2YA2 m WfnwCnN\1m_-ݶH5I5k(ε(uc|{o:%blLvɴX2%Y2%Y2o.?lM&6-L` l&i36t%=z|l%I=,'O ӉW,LTvkF/{4SU8"hӳl)x")75jS%-35W~ N˨Y2-LflL%Y2%]2%%شl26ylL` l2MMm-6}"}I_dE&}fe-"ŶHH)Rd"EHfb[@Z@6P,aE@P M(BP>)d[=nn Zs c 9*yI0mdM][nIzBovDuc0fIe 'DmJS(9.B@]gg>O*jشù/rZ4Kջ$!+GZp AC_ pyikl$ܪ3WKdY 8ET=%TDmRSM"v=ËUqFaB1t592^h^ P[|e4N@XZusVzϨ罌:xф ~KŒ,id2K&dK&d\2,6/M` lZ6&lL`f` l6M"hȤ/6mbx3}M_+e"+e"EP P }i8WKw׊U`yŻˢ/L_}- -D<'x[a Vy"w{R͞ԟ'Ad ^Al 2D~"Sby mZjjOG zE'J͑U>?=vSl9 IPTM uWcwPhp2=N8kR%_e<"rcCZaڹxkĿiE.b2].e2Lv2m29˴8KRgyE=d2me8 R+ϫxACjyhVmU+wNZ`(Ļ %h|Z 'hWE`"x^8ЮchSEZhWH4>[y j26[m6L-uZ,yR GDht}?G.ˋ]^]u¶?''PRMГ9.w ( _`*H"%w2o |E.0L myk;o9Pi/%w.CKc-IwhȩSQ/.ua_8gebc"F%9Bק5}ʗ~5Dfte&9̎\QKp%S"*<d>]2?d6KՒWMO6U`/~:}I_L_"EE.Rl )᧡(+( >Gݮe \?;^COC_#\(t/\i˗Z)M(GroY$ϕps϶r8/q4@ 3MI.7pw#$A3#Dq-9I #CpЀpɌ3&ֻet]&/a]^V*ɛK&d]2%,K l2MM&46-qCRn_ҭ.Ò<'F"_-]xOR 9\6e[ǠXON2gWaZAK{+ٰo/?zVu1)Y,~FB hbpWWrI .nR+UӦw0ɡ dtzz-RtO= E~9SIO_ZAO_+~9ME&}oG_<6"vyl2DuDV!h[A=)2DAAd 6D 6D"~;teLĚ3~OiEIy*u DCM$֨SX UkN[Z S%p|5,ʀ{$|Z&N%WcvN$;;=z>;U} 1]_Md}Z6\"f`^}*$KZQ^(o ɟ22=dvInez,9˴<˛v3/Wi]/W)׶`4ަvN2D2l DЦwUdTۅ*6*UQoj8iWIF*uyWKFȿ_иf]=6=6uzl:ezzO2?}؛MOgm׮q.uy[ݷۆF_4el%lf+f+ue>]2=&D]" =G] GO/TOk8>y:_6ǂP7QuFƦ{^6RaI5)i@,ñj~3q:;aB6uUq^#1R¾ǰEG{lAaɼQP=z`>t.-֮6qvV-Vur=2RN;<,E6v[ Ɣ8z۔ 8D +U/AӋ@Ao9JW0p%Ń jݹi~{y9-m5|aS<?[2.^2%rɋL`2\l"HR}+i hd VGܞSR_0(98h_O}y\+r]]#X:Nd>^ˏXV.3.Zkh0^wBUM_t)La.WJm:X8M6afArAmI 06jW#?+@9IU'PnuSRXo Uǥl:`SBbjRrzaZ?Հ;8n|:E~Gs4>AJe_6龪]VE {:nR%%*Q6luQJPrdm"tq .x KO ϨJIǼvAhe>ҕ)Y>^xyfܣ64GKW p2rڜ2\Z4 rS97ؗ7/ԇhuDwn%0HS#%4}3VՄkޏe= $Td:]2?d2KՒWͧMO6U`/~:}I_L_"ŧE.Rl/)(K(RByvc!}в.# : 7$Er,xiH&I3ew޷%@ >5QFCb"+r:#yIS,ASnh˓qk aLRPI>NPɒnW\M:ґ0N* Ϫ$&0e&gZӔO{)tה\uZqכU+bn+ԇSnI!<XT^vIK4;uH_9[uÊIgP1) uz\-yu6`\A@q-͒iwlLKfd^.y366fؼ l躤@{P7EPN6@o֢l))õ16Nݑ/C -KܴVʤ$4eZ]fiv hR% zrgA\$Q/cm+i/nXKw¼!y\Z<|DGX6ȾjDT6e9ȡUק^[ vU*FV "כC5Lk`wBS^'#QH#ծ"(~9*vQQ-xa'7.Uʢw({aḩK槗Lf%44&ؼ EO/2鋗kQHEꗣ/>"4O'= 89k=}˦/6vE}d AA[n":"Aۓ"C_G!A"Al DO.cI]v9]"YZ/sDٲ,'QݞU9vEBQ=kr2CloN|/٦9c+nMH#pc~c j/н~!`QFtӐIZ sZ|nb*u9YM[_yIUM,YT9v9W[M'i..ӻfi˛Y2˳Ioglz:cre~.r/~}mvmMOc}`dC.IOmبhWE@FE@]8" "]vy̮w5l Rwdzl6zlcc_Ǧ]w,gy_)ht} 2=]}mmEO__V6Vmi__%K/Ad %A}d>ڥ}}|.rN5s[EIL&=5ub9K!reR娸,y7=bרak <ޖhY"aj,lKj+SpG)B0@@.:_NYm5YR٨ tPǨ EĩQ*D7\n>H$v&k|?Weǥ[U4)8.iZzɍdq/(XsC>m ћ:Y2-Lfl̋%Y2%]2%c&ilm`"6&d7m`{_˞:]R"u<ǻ=/4+7}+1%t/끦-O{9=]C7[?16QYU([\02|9_`I3>;>C%vS+@窦Ce[0qboK%y  `[j7(RUJHȢfG{5]ˈ5)!HݗGJym2jn h0deX\t5]i}6{%xo#|۴VioÊ: z[2-fdL%Y2%]2%.L`"6E` l266m66rK$aARjo$6kddE:WM.ԷE^ \=wfLCLޖ _c[`?[0m^a%嬤T sz$G70%߾Lً@(8*< , thN\$_{ɿ+.璗GsART8QGr3s)#hLyd2Kfd^,̒,,7K6͋&l&6fؼlLEbȦ/Z/6L"Ȥ/L_EHѢH)Rd-"ŦH-Rdm)HCZ@2P,!E@P M(PCkú˖þfإd 將tZ/Ó8QKSɆ|*(ТbXCYr #9 9D6a優~`FM1O?XJ~Y+iaGZR΋ז]|.NCU=sQвnr$Q HXzON/~mx˒Irjiz9K@)T}xk 0٣?pC Cq 5H.6$ ڽ%K\F]U*Rd6K%Y2.̒i&ؼdOL`*_6wգu/%"IN~T@G"ebM:úSЈ/OKZHӸI)Y q$`$# 8y3<o)+ 0H#+Izʜ[ѷi.;aHĪNͧä}MwT^)`oȹD]W6O}76zAb9ht}?RP0 VJGp2 j剩w,Qͫ7 -:>,XKɃ \!GW!<l"Ӽt6LPue/K&dKŒ,̒.̒ysdؼl26ylL` l6͛6ɤ/^/6lEbȤ/M_/:D_d"EE>"t}"dmBPdwKEk{+^/:D_ہV|nZ/>D_Lo-{I!c!xcv+DA 6D=%ćDvO ī"N :$Ad 2D" Ė[+Ck*Bˆ:2-$Ks6TL_3}a.51T 4MA kZֺD|t- 7h4^H^ƒda,1A:W%1|A˼e2Lvylv.e2̛LI9˴K9tJK/Ut"ئWm,Ut"nЬ2}UwpKp+Un\RtHl3+}p. :$N2D]R8‰mjRÇm-UΥN2FZj87KA# lTiޕ.|ޖvC+N^P-N^qqC׶qKuL_6ܲ̇6 }}62ljԗe:/oWKloAKm" K"#C%ut}ۤj?H]~I!ݷMݯ43Z]Y|xW:WM08 cLCIO_RwUAZ֪ 2d'u5NvN_c*`/M )QS9j'}]t쁡7i - r,0:yxʩ+Rtf;^ӵ(5?2&Jqi=e^J3%f˅m80};*׆{Y`o脠LR%ZqqBr-1f8W4u,Jz'Inƒt,66?d  8p,MJ&c8M_dvڴZƨvw ="Vr-#t[rkǤ]x9+qhݧׅ\Qr W[B@\s>A> xQDrG"׺U/$U8n3w?`p NN.BQo8Cz'.9.rVN/hE,6h:lHjto YbS:Di4\I Ǜy]ͪUU.IOdM#r)ǷI,$b9a&J  h+l6wx6]/{I*V²zM &w,̰AU?RI7ק(*cl$CmDBDm<nmsוxu֧shk?q|$OϗE]ԭaJx,aܴK\/OO/͒iU`i`ӁM&yثE鋟N_d/עHi⧋"ū""| Ei(B \v@X/wA7 /\{s>ܗ|ܔ"Ynzy,R -N9`,U|7%J7/HE`Χ‰ԋeYO]MA@XC% rKei9yv,2Ij-*ayLevwF-q_+jyj ҒJB;%7KwO_I '5ʒ?bKiӌ-@}@d÷1ۄ6pS:B]2?d6KՒWͧO6U`/~:}I_L_"EE.Rd-)(+(| 8iZ\2 zZ kŊM_|ئ/67o]" D"6ylDвHAtH%A٭n!C"-Ć͞} ħDAl 6D" Ć"K]xP9וn.=GHOGP{䔊(ׂCKV4*ײ<$KЈ$AӽFs(Ȅ+qY^el:t^ ?3.i]JQWN=VmŦJe:/mif?%%ZEK"N>:Al $ "O>>}l>ޤ}]]wyEO5t5+ꞿKCl^/&R"$6/ahn"W_0v{p$Uy&~~QԜ+FƮy{qD0}ĥ\u19]kl23v{A"`3֤JcrK(;UGU[97[%h1䚑zsܤ #&r,B}SW"0܌0m5pm%D Z":U뱅67j+ MjoM&&1`o:6?dW _|7|MeZ$)$E&I*IJ[ӥRV wPu[_`"n@!9ul\t :uk8!W="/=UvUnQPxl̏Mes]D4w9,E5=q*ngw_ꔆP#V_t.(پdul¤.T@ɴ8HQ"NB:Yx!)-mچ0Qb4BZ E& bTpEj>"D)@z! DVUye! f'҅u4 9ӌn E֪P5>72I$Lfc2d4lLMɚƱsl5cul6MMֱ$)t爜#wys_^+M$)D<`TKmbZu3r&_$pE5ˉPWKɚ<F:lCҙTA0i6fPJ^TPT3 1\&"y*eB]gIacePGq8/0 2JۈȷFs/LQp!i1'-%eKfYj:JyORrd!X\pI 'Uf8ܱk%kS I TNkO2}dk2?m2yi±cӎƱi؋w?؄/^UINRl/Ԣụ?])EhY, N[pspk+bm _t"Ȅ/ _/D7 @ 6ql@2IA|b xsZo ] oAl 6@oΤm&e M ,D"Alle閾 +<|͏h">l'=E,^\pҲB slI~qp!˦f"A^9M zQKl1KC%碒_"r!1p"8Yd܄.)}ӵN~؅!ي4 sQKǾ)< =D9N2=}lN|.wyUĦ+-b/y˫[^y⧫pwkl~^!5.D7 @ 6N" I`"`"M[ݥMz YmzB#%4MB#YB#B#or8i|7 l lO|7llؼ&^2=ezWշS^e{黼"''|Fl鈽"4EU^y+B[^^U_t⧫b3le9_&;l%3la+adk2?mjf2 }|c x" .7>p6>p)ӧuOyNzù9-"Gֵ:7z SGIRC# SVᵹ.HĬGJ͹^!kCuc )6qMAG]<|ue^^GF飯yVlʏ(%|R #n({" N--$:.<ɫHqIAyQPẊS=WPEŒt%.v9v8_t5ya2ٚ ɘLd&17M7c±86[cql2ֱ86m:69:u!qHSWa;6R̐$+J =[ŭۂ435'TrCF)#լ߰ٱ_/} $iߔU.7c~6r(yN4D#A"辶TLw'2ikG{%PGUuxJEUgI|sܹ)8G/&a2ښZUhVDϫ{iv|j,@s9_@<9%;, A#E_/UN5-\8u𺲛&*L"_ *E?DK~[?-5tU~)r_ݵ4 bH&d٫TCW˚~@ۦ+ҒwM:'CDDE O- 2L>^MdL&k2/Lfc2ɚd4?1c±86[cql6ֱ86m:6Y&xȄ/L"؆/67E&I"IIRl/$E&IMRlo&)IL)BRM)BE)¦aS-EȔ"Y[)r01EO rC0lSjF'9p/->:C7ɉί&Srin/osoI%Nt?!ٱѭN#O s!+PyjGnɆ94IzF(Ao=JD^p/uFAjb{jr5yUrKJhUYŬ>OOP''W5.'Ҝtu] FLzWrGUmz)=RSypӕQ.A@*ٿ4ɴk2dLɻƱyױ86ul6+>=09=!*(HN)zwec⡪l8r?Pm9/.m:OZڹz,ЂS2 q4i%neC6 8u|ƻfk5jVCy|9jkHu?%,* Cmeʃ5p8tlA,"ܠIf_׻.S>'q\Ȋ.T:'e &z*0ˡN:J!}Väz)#D2w@St!%Z'Vc:ëɴ0dMdL&c2Y٘L&5c±86YǦcql2ֱ86m:6}/6|"| _l&|fb$)[}mbx3I[2ݭfŶ!Sf)oȦnV_& 7w{Y}k۱Wmśce7E&|*|K nA86 8b M h{ZAbs&&=bj&E@Ad 2@ DA6?ŢqQD]}PP yA)r n⤞]q-[Kp$թK/ *vTȩ}(Bh% V|]꒏7۴)VwK>6coWwKh\&kиط KvdmWyи9[Η|y{ p|nΗdaH}9_d- h Mo" }d>Z}p6:wPw_}tۆW7+?QI ~Yc (7:'yL j'Jcc]~%B&Y7C󊾘PKȒiVcn,85,įQ4TX+YHMj;O1]A2#B\RB|ϥ6E*l:eP]m6fzP.%ͳR %:r&"7lҭfj\O:tdV}8vuREIsTSx^0g)-sթ(:&P2<!~Ni9kWzucg'C <1јWdlיԩI٦j{".N}_SI!׵BP.NYTeHnY#b;|vfbWw-?2]l E0dZd&d2&1dLMɚLƱilc±86&d6>qLbx؄/6mbx3|[2IIMbx$)2Ilbx3IMRdJ^"dJ-J2Rm)BRJ.n!87#4.Nh٤{uSU":F3b7Tu;d,d V n/eEѯM8q\jB]ι(v{]'{YJ;gn/KWtE ǗҲαZ̸9ny}Dx$`1&wd8YyqqQ8~7oS+aDz,gTVWʃx>e.iI"3cL7~e$B IKQexYVXȉ,@HSR`!d5|d6&]&شl:6Ǧc#|oF1 } zo?8czzQPN[ C%:~TiYds)v7qDVc~ PGMQEAA6E/U4ߊSPl{yv ULEQ̍ @)D %hJvrmbqxsJeCU1A)2 (QbuӘQ^&1nĐ2J\UU=ܜI&o{w*s1M|+PjUw k ay?O@]b"IJiAB&]{DoS=k%M0CNW"-q/IPh3j)Oc7#g[Fz㊘S)9e̋S&slN)9e-Y|E=[U_oc]s M`\ط%D7m KsE$NM6 4`ImX%n9dp2uFIhf!4ccӊK[]&{:7.9y|mr.w K}mW6qmB*/wp2ߜ/oVnwغ/ͰVݑrL7#o#] h Mob}d>^}p6:7Pw_}tۆW7^bhRuas,VƻԑP#I#:Gm,gs.kh}pCZ[Y竲GG:9R dV<ձez*F|TH~8/e8<1ZD0USUiM*2ikEMjtʝ+WN0= R\ $0_4Od^rlcqlZ9`$rnu$1$y5YEbh\[КKO__}NJPBѴ!#D0D57~c'OG>Z*?6]J|Yn λY_I>âe% ' 욚/T w sXĉ;n,R"zwߦ]ުzDzY?"% wMfc2Ldk2iecqlul2wcʱ5})$D‚(֕d0Yߪe ʇϡ|9`XrnZ}7`}yBzp<;-5zqN|`@rsёR:N5#x ݝs?=_O HWa5M&(V?ErE4p!\5w xүSNNE!0z8Ydk2=m2ii±cӎƱyثEw?Ȅ/ZUINR⻥=]tǫ/Vml"h7| _.] dd ޝVL D3)6@u@ D+ o.5"NX3yΕh#XTKCPJ[9/Hw-.5f;sB:Qq_ P;<ͽqp򞑚9%s[sK^Gjux?R7ʱp%G/oR݆)NfҁWtGasu܄/g-˿=e{)9eZ.}L.݄#6=8ez:/q߭kEpnt "l E8A@& wYlXĉ]Ȱ1N6Fp!4_GhL]2Fe!47lؼ&ǦwO>?w|MBvĦ#>kи鼼mW_tvJfJV6Vtd~3_A } )ӧ>9p ee^)gs}Hd(G]׭o(oΪ*;e]twp<D* ;٥^_{˯r .Sr$ACR. q/7M#r {x [3T򲀅u/KdY3V_NL:/}̸9¾Rz_"U*ʲTD(%Ʊ}4EzaJK P[/uӯ&d6&5&1lM&c2mo&ǦcqlM flcqltl}t_j";B cDEis|DF=Bru,4{}1kY3χj? 6A^4wt}jB'ʭ UQ :#" ŦDAi"/ИE4ܫ[mͧBϕ eqb>S1n#z@{O>i cŮBmn pQ`TOhRqҴOAis(Sy%4+PkD5~3)}bp(Pxyht8}$eh|bK=p^ vѶ(b_tpwzjsND8n4RaF'TUE)9|0Q+SM+[oeY_PvNh,u?͋ރAQ4/;%`Ƥ}p9,A PUiRǖNk :ITlo(C.UXFMvO (!iSd횅~6YfDgi\~0&1ɼ0dLfk2id&qlZ86fؼpl6MƱ:6Mfl-E6|"| _lE&|fe-$E6I"IIRl$E&If$eJ^"lJ/J2Rl)¦Rl)r轊hoWGyTK~aUtmiFYK}6"0>n^֗1;@IV>e6)0@ ѠQs&epU!"Vgѭ#TyZ" Ɏ J}VBPpiiP'zhA7Q]-OTu*:]d#IM<{$R]$;D$lZ'w W*xM[6E8 ECLvC 1׷e "F|DZ!؇0<QXi}E`2yd2&ӦlMfc2mLo&fشd6cqltl-s;da3ħ#&%Dv8:>! AU#6B*Bh[\e຦Qru3$[&m!Q\_(@s9y/V:LBcrλ}.I"')'/ECs+!%0WͽkT L'r:QCH_~/w85W9? A%#tT[ɿ~pʼ8e2LyqlN)=e2̛Lol2/]^d2̛wE=-" yhxWgj ,D'-j6ؼK[)h?Ǧ]r2-<{]B#/" w +B|vpVc/ΗyseH ] } } W} ùykze(^p_kEHq(Rm(5bW娂zT%}mH{J |e("m'딖BVY_&za}(#!YݡU)SF+(2+BY52s;ء@ZC >LllV%QrP >zw}SWDGA 4?/nbt-2|"$BMQ1WDn"[W$;,('KTL&&1W&:6=lV-79_^rϗezSj 5}ϱ2/TC1{MMm= 򖨋d{jU;D2#XR:uE9t:b'M4BNqK0u9 2 R41.T?Yȹ"(GE8,Ҽ6]P%8n)A{F#"͘~cL\=4iQDOd>f#dyw7ԻW~a]/ꆴ)/~$$2"]MMu ERn􋰧D6L@L? h;Z3#7F/(+(<\PxQ9:B5*JT$_VNmVSsrbgep|Ee4j}/"d<ظCn!TWYEcO(#hiȊ"i9'])G4RaPRgtR;pcM^!")tD9l:7BNAҔ/R2p\HW&]iɘ+Wwvl6M+^/&|2|-MRt"hV-ERM)«R䠝,EwyUK|b$?Rի,rvUgR߻]X =9nrڪeJNC)4 K fFAIF.DgZ) %uj/l$'7$ JE2k?kM(:.)01v?~Sm>4] Gg )!4<,N LpD] 3/0D2ߩun-58Y8 F'*_8]r4Az;Q#x4<uu\ĎXO~YJnpc$g2yd2&]٘+wccqldV}&s;|)~>('LG}|'+ Zh4-%QUߢٔ|8xUs6_h 9Mcf2 83-ӄE59Tbq$6I!DY"Z3S2(2 B7lP&2{I-!QظpEW$uN"uHf$Km jZT6zhipW R$@s~U+*)\`%ҫe&/6_ =%rAg/^f256ɼ4ytױi&ؼtEዞ_l-"I$O'?^}R.Exw Nzm+W_6| _Ȅ/kf.M 6@N+AAv&Eݙ : D"A&^p0Qd9b/*>+ فκ '(lGaF\"x;0wu8jrٱ屃jU"^ߨA%Ŭ\D8k} yфsaΗOGMl/>  H491*;y^_2ҏKkS3^';e{)9e^.}..oBEw2=8V_t"D8kl~އ6N2@"l v hEE@,2,v. wYdX]'B#r8#4Z.B#2u |l6|lcc_滧LOcݻLO"4nGl~:bov y1vOW_|ld;le3lnLwMMޞ/Al A}d>څ}}|Spp}o'Y;vc¬eS!!/:62o9^ %{< fHm "w˼we!LnhPYFmi>릜LyVOQİ|C{-ղDహ4lD`#Uoiѽ/T=q;^5;rQR|LS&1E@v>Ω!MŬc/A\+L'[^b 6]_7n(tA1 J18ANAMz"9+]\;ӳ>tvva(m\HnW[DPe*YK޿|.`@tٻ:nj˕UCԈ]tȧtyeMyYDq$ZOTA[S B> gY wuC|1lMlLfc2[ɘL&ӛƱilc±86&d6ۄ/Z/2mE"Ȅ/Mo$)^$)2ImEb$)IM$E6I)ExQ)Eؖ"(Eؔ"dJR7Kz+E!LyoS;_=>7G8_+K cT.PsB=).W8!H:(@*w: ܕ:7dEhy |УC[ia=O$dI^.z'Ʃ~*{YtD+}F$jW ]0~/#|OKzDmkg%2_t!)="{{:Q@P:A[dV%E:TQ{_ܿkBdM&c2oo&&ؼd6cqltl}?UzVq09#4y j1Fl1B 炕M dDo5ߓBUpek喨DBj|A-ƶ.yuRS`V8Jiux:pZ2i!Q!fYzt̝%<":& Ƀh统Qz5*:䅖U@1޵rUBRTٚZxZ+To0Q '=: r {[p.Yf% =MR.N@fY)xU[.a=Y$֊kZ|0&1ɼ0dLfk2yd~386/culZ86flcӦcӛcŋE&| __l6| _-|-/$)^U_6IIRU_!SRwME2/ulZ+v×x3|}CxǶ@m?A9y wgR͙Ad 6@ 6@ GkpH~ԍ,/2JQ>"T#/wW\?vM~\m7 ߈Q3 eZ%VY$IE5\ E J?OeԿ1 V%9}YH"̋S&sdOٜ2S&sʼyv../A]^K.˼y./X "bgyy5yhQ}p"X@p^!C+ vN & @Ђ8,KMĉ=vYC,o,ᴄFp6Vyq+iL"'?^hH"4>Zxȋ"4>[͗iw Njk52[|7??_ݑ:/L^ԿaxpmA?]sp8pBpoKd})o?Օ@uh[ SC/JuUEk"u'Ry5/" ߝV[A 7hn5țNOn`Q}Bj5s~ɔ|z) [tl vQ k -Dh7.(p@o&#Ui E4QմNx-d&զHmR!)υtwa 8A &S*HřKBLE;L/0.z qj*XT>^tdk2=m2yi±cӎMƱi؋Ew?Ȅ/^EINRlԪụ=])EhY@Pd"0h#ZSu|hE 3$ .p hvO{Eo::.^SlOvg,+pp)H1+)ѹ6x"]`12oc\jEWj=onWX( =)WD:BD&ܕ[!OQMHgbTpe|DګFEEغrқRչ#Zp_ ̐":J#|"r/BHmG_/fG|,b"D#e#'Bz$ %O=fUVFW2ld5|d2&Mfشd:6cˋ@u& pQsVBY| u|V!R!|Kt:[@TTШrD5¦8] 16tͻB{D>bD'.x"`ltjqEPɲMߛ׹^Ȼy鼬w-w'D%.S$xnv`*UCl=y%xvܜ|ҺD^!:8 Vvf)tL}l]O0)R& B=kQ9#t7w}x{5 <!CRe3(!qRG4|s S@)t7\-Ґ'i>tN`256ɴ4ytױi&ؼtEዟ_d/"I$O'?^}R.ExEw N~m+W_6| _؄/kf. 6@N+AAv&ݙ : DDbAB=ݘXVƺ=) B' yhLi2]"z гI%+8. qee}ֻ`]+RfrI)! I^vÕz3:D% 'k'@c=le7u Ҝ"[D]"hƒ"8E: W!v.l)ӧiyʛ]2LKPwߎt,Yt⧫m.¹]c5>Dph$A,6,ea'6YdX"`"or8iI2uyKHOhcc. :>6=e~8e~.ow MBv^6ow ]}/a+a+[ [鯛/]i˻@ w 2@pv>6pup=ez8w94sR#.>+q-?+E$v*(RT@i `rAr/k48,19?>9 RKQBW -gj.uD䔥q*+쳈XR%S @'HN+.QN_KEAIP`=HM:x8ēr uFH!%J+X_p~>L ٘LdZd6&5ɼi2lƱ:6-cqlMƱyӱͱwYpm\{"jwc;%]Xk>/UGM孑B$.j)}sxd%9o)GI]T[~$vPOQcLB 3urCWfE(T9 ={Q"U(˃U u;!k|H?gNxiopڃjʶ *w#zz]&1FOy 2}ɣd͂ d)MЈws#.M? Pas AgR<|€nh%Hۇmyы3ՓA- y Q!TҌ}*HBA婻BLJN> 2kҺV E_D)(sUQ_Rp_JU#Ht x=.XҸ8*ڀ;Q;]MŰ|,i*JOS~Kd>I1 IMvx)UE q1B#zפ [rd> .cSueZ#>]dppE9h|vƿl*i ɣ iYHC V*n4_SK< Gχ`NNOW٘L&17M&k2yd&ql2ͻMƱiӱ:6ǦM&_2uCU s"|('b{ۃMRHF6*8'#ϗFA>xG~ƀ/ÏMYu j:,X I20לkZ"d܅x)6Gf'w5RbKG% G!ppG!}0R WJ8R?pe|C&M1[YXyvkx?ȑ!+*InPMj^$8YVlLfc2[ia2ɘLd6&ӦdM^ql2ֱylcul2͛MֱWۆ/6lE"؄/L6|"MRd/$)/[)ExU}RM)B]Ż&\:6-ڊc|Ż.o端/@{8tc<Dӊ7~sZ@Τ,ě3Ad ^Ad 2@;DdWqY,AJAPd"^s窷jUjEyxF#/kk^9)Q~cdc \\C.Nd>!CiUi㓛PY!ɜ2S)9e6ٜ2o2±yԥ]^d2Lw@#hE^A?" /j@,ѢZg| A8iQco@"My hE]%N&yĒи"x#4n,7& }6@ӿwi8mشKN]^>.{Eh|b.yyEhvbȻc8ZT_1ϗywj˴9l2iaj|yANu~p>uyq+P>څi\ARG@8}CQSڼҹӗymYQ-K&Ujm?(#-_"HR^'ZUl a ȶ%^Um^"/^sOL<բr~ApT9^^y՚?^? z!O (K_@T6ED~t !닮W Gme6DKE@>P\ΫD9Ћhv(TuCk VQdk2=m2yeʱcӎƱid&˖mb%Ȫߌ6# rbL. AЁNە\t hHFY^g95gd0Y_^*FM @8A^5/ɶ $ZyhR"iKT(N wi?-b .6 Y}I#}I 7E:~lWPqM:,:491͔cbY4g==z-UrӁLy""p:JIB S:H\P{JPHg}O>/KDũ^c +zɬ[?/i-J,C E:\,E=!:C9U7SŽC Eq(Bޏq 츊080#7+Q~Eշphrdu] ?(Ynқ+[/Q}ʱ۟'~>,Q5S] q.2;ߚLwMM&c2L^96ul~ڱ86{nūJR|7IIMUZ"|K2JYp Nc"uSW45_d/ݩw+q2՘^\Ag*Qx(O ]KGJ8[|$|ҥC]~w^}ܓ# [HWy`P -Ay[qBM술N?B=#iU(wgˤ(\tplK<$Zan|(R$ 779+::(0}Rc=/C>a7ɼk2lLɛMƱiױ86ul2+^vRu^A Px9f#zƜ&Hs/":0WWN-h)n&)ܧm=ݐڒP|T_C/995;RڦA04'$F|ϡ~@ s;ׂ} -zMQe6̫Su2?}e}Flz:bqt^,[}6`ܮ{"E8Ap'-ذۉ,6,eaOc8d$Chhkl2Fe!4wdش&濎MwO>?w|]BvĦ#6kи鼼mW_toVa+[ [鯛/]i˛@ v 6@pv>6pup=ez8w94s[Ex/߽JKzW!T/^=fBMcb ڣ%")";Veu=<>P:?_iUd_>R%tTdISĊи8!>MJBOYp Ql HԗW"<fٺN'9Í\pIx@}eHՙCpCV;Q NT1̷qQ`ZKMgq+D Ys<%pQPs)6ڨyɼ0lMlL&c2[٘L&'&pl^86fؼpl6MƱ:6ǦMǦOwYRUL֡=?Gt_e ",)=R9j8p9$|Xj}Hzn@HdpI.iأ+RG9@Suo$HLCT Db|e*j~B##OM ѣ+.^4$ъت6x%2HS:XRptfǪ|jLd)IYqT'k ")C0͐~Se/߽:`qN%nu e6%g} 'r}861ת?<;زPZL, T"IJV6ˡ8XU KplY0sJc:T_Eb'=e!_67DeU"h0Mtk}vUd{?KfA9h稧*Ra؄3v硤sg8O+D -u lLfk2/Lfc2ٚLd4L^edc±86fl6c" _dŋE&| _dś> _6IIRl-$E&IMRdo&)IjU}RM)¶E)B!S-Eؔ"Y'O$h /Е3`OT"N꩸MUttFRMb|QAN=`RF ,>K\/r({ WIY?jgH,W7a~x7uCЄ i]wMQ!jңr$y0k&w9!!)oK7erL T$rο\F0TBNUMEV~6^jl>DL(?nt3J$V$ͨ_R,}Q9yOL&k2ydz386Ǧ]fؼlccӛcrG0j쏑:ʪr. u"fE^TxzDvq[crej`yɷY\u2Z"fXְ_P֔$9RXJ)–ME&u6|] B é-u?ȩ1$rjs4%Mj/ۊ&1._-1~`ɐKH.wI/uHkĆF籃(HKA^y"rPũFpϦbNٚd&d2&1lLMɚ:edc±86fd7{m"؆/^/6M"؄/ _&)2IV՗MRdu՗-Eؔ"l)B]yQpLwmʱI'.m ıixsZ@Τ,D3Ad ZAd 6@dA6T\Oڪc1yؗ[ O79)@knր K _prrν#U~jׅQ-/K)O Hח^*C#ɜ2S)9e2ٜ2o2±yԥ]^d2Lw?˿gB+Y;E^^ h~Ec8ZT_1,%p^!C_7o|Z'xE`"x8Bи"x8yB#2u:M7W%]>6شK[)h?Ǧ]r2-W+B7>%4"/ϳ0yѢZ~~ַ̻˼;Rɫ%* "@}tǻ./NyoxFSDexnDDm }JbIw5Rx/I*> u.%i8]@M_jbXqi2:P=KUWTD^hu-2EtB5]= 2zh7EdL+滎MO;6cMogdmuHTFA? D8# 1j‘/dzGqgguS!8E'/#  y 7zKqKkEAIN}gTa絡Bm}1OSIIzmŢ$ԒjA8s(:$P#k:a%r-ꅯRSա3.ꚉ$TV!81xryL#dq ^G͘B:BBcRH2c|coߺF*c^fz(N{*//>f`ŭQH* V'.+"O.SZ:79£e!w86J>ms(fcSqDkˊ{*C&]iɘLKwvl2+^/E&|*|MRtbh-ERM)B_(EЅKTTTZ*uz;:qO*ΜPVA26|*58G){'q~_Dl+՗0179NaXyu]+8¬Rş] 7}gApɴ8%³QR͓u ږXBܫPpQ$]'`yp)j"|cp3S\F0Q0vIr#"zքG\tS}lPJzEH?(Da#?:NaNoN}RBrOQBTAʒ+/D>̀C*򒺾!N+/wYޡ s4-Bl|+tZpܲk}abH?spK.DJͲN$oO2=}dNpʿ|.wyE+ۼLw2?WnEOW_1{nO+6@&"&o@a]$Nea&, c&=, 6Y"0FKh䛄FF2Fp.nioL]|lffǦM>6Y>)ӧ.ݻLO9."6ߍt^#"/ݼLO-//[}j V}2ߜ/氕ue256y5R3 w> A }tpY Gp[outS^o9|IOs8WsYHP$>}D(K^F]QŹ]1_2$?#ZXX.S&828_ 0~Fe8 cN`9b)O`uhEK֤Lj^D|وx$jY@_e_#&%rLn@&#w7Q@yh MTqٻ<ӑQkyy"zIL{5&1ɼ0dLfk2id~386/culZ86flcӦcudKgEz6UɵOdrG.~Ynj%})zVtg{3I/*KMg隧ѣ ǥk;Ty bsx<)cG.^oRVЍr1o/u˽$}?S mjz\yY8cv6u"3yܦQc5ĦQէ9m8GQZRF gSU:2B-qP܂u2nQD=y(<"xrڒtߜ\E|>ꂁ/}D 8Ii D0ju,m^P$ET S4\BܵBuzruN[!:l!pqyq( G*6TqM).BQTjMVǪorCH#4'}EW4i/^ ٘LdZLd6&5ɴi2lMƱ:6/cqlƱiӱ:6EE&| __lE6| _؆/2IIL"h$)2Im"h3IMRdJZ"lJ/J2Rl)BRm)r$W^_*(3Oܺ#u3 h)jDS+Q!.Ѿ_FrF_,\o)P۔˵P!Kk,//gԳᥭ@t,~He)~n7&\ ed: s'gAp{VSpWIgh`&_ۅۄ|A5<|(à~]@\$ĄFȰrVެwU Y>`.(7nKN(,5qU맢;Fᕙ$Jੱ3ć8LZe *櫾CJwp)S럊,\\_|!#Ӊpʴ6᱅4) EEMxc%u.RYccs ad4:5,%7x5&1ɼ0lLfk2yd flMƱ86YfشdLE"؆/^/6L"؄/ _d$Ew/Y}MRdm&)IL)Bw/Y}-EȔ"Y-EvM^V_|6yUpnV_ێj+{3|-/Y}m/6Vk^AtƱAı7K oA 6@}aZ5ZAtڞIx92@&DbAd zd@7r|Y6e=U9D|Q),Qו:X~n8Gup899}{>ݥC!(K㹚uZ҆86]p;y 5?6coVWN[$'/|MN^eEh\&kиط KvdmWyи9[Η|y{ p|oΗdԗe9_L~oAKo}@ @c up݄A)p6tpAK?C')![Ҧe۩wQIV4ԡ%k}T+'w{VdIp !-6)ԤJW:Y,KK#uyUEfXvvK;IA!"h&;Dž3˻M!!ߖQfzY]Sz\eM~WO v~k}l8?2-URԨe8Cc#/ڏ WA>̩Y(}'l]E׸]@vq;N0ɴ0lMdL&c2[ɘL&5c±86YǦcql6ֱ86o:6V:4DyЫa)KT:O>FW 79RwATkVNjFP7HS)'"Nnu \VQF!9}5|TE,Z'E|'4LvX,Cy>Uh) K?H7n-% SWO[xBQQIǻZ$)ydLy<0PQJ0%|p1P%^t}2_'e b0C-ӊ-șY) 8̥E**8@D $ "I^7EaFѤХ6 OMQt>G54R=plȀ^&-XuW:.vIT>RXU#hh>Ca Wi+<,֮H gYFR'{ 0'Ҏ_┣ME ٘dZLd6&5ɴi2Y86-cul^86&lccgx؄/Lb؆/67&I"IIRd/$E&IMRlo&)~KRE)B![ТaS)Eؖ"dJ,E _˶& #u '[ݺY^qTᵭ4 $:Gn"͉0yWnuYbIÙ*`*G_Wt Ztieogx>ĬO-m+Ҥvqy-]Wv].eqR;$t'{ʟ\/ܨ]/B(a R̮y,BmbQU(s-~׍ǨkD)9Չh49Kߠr*$|quZFZ9ld5|d2&]fؼl:6cKJU HBpqD*]$rQ(IYQ/\D;U ODXF)|HReZZ>?l4Rʻ gɣJ Ɋ(#/)&w5(E.EU%kw-D!79L}3ez|g/ʹSz *t(RhOx&^A_}B /sI-YlT_NCiD"l(:jr$ Փ Zp4|c؀d"]~<ܰ4e]z" y; Nya2ɚL ɘd&17ML~ul^86&شpl2MƱ:6Mfl/E6|"| _l&|f"$)[}lbx3I[2ݭfŶ!Sf)BoȦoV_& 7w{Y}k۱WmśceE7E&|*|K oA86 8b M h{Zմbw&&="j&@Al 6@ D:pL,Gc$¡‹qqS$?׊[..q,;6y}|Ypv(k JI4kS2n/P0 qZw\b))&}q-W^Qw9Һ9eZ2S&{ʼ8e2ɞ2SSSueue gtdM6tof",*/ hvpKdlV"B8߄U}\A|F8AsE$NM6 4`Im-Y%n9dpn2uFIhf!4ҊccӊK[]&{:7.9y|mr.'|-BE7y_ۄUľMh\&oиo1rL7cU>.ts=le3lհuw/H}eH}Z}|ApVp.&ܷ N ݅p݄2;.~TԵk?wI,O'D_$ ^FD˗89S 9ɷd}5Ql.oPTcȳ%:2GOs+ ~nS}+XIa8:8Ny[fp8#Qy1btN'j7aUdk'RŽ$nQl"N+Rsw99ogEﲬxyWO0w^C֙קZB_Fw Jw] lw{_L&&1`o:6?dز*'Caqb[2jC &LIȌ#pioeeD%YBAG=$XΩph*4nc5/Ç (h;Ȃ6AKǖqG 5o))/~V4֋C}ģ.k'&ۥܢΤR Oqe-7t>6C3몂.WKtzC9UG&(Pi=Afrۋ*zen.]ߓ3GV_x`yV_ˆ2Zţ|񜍢// C^ęĮt؉ܜF3Ǯo zTA\Ⱦ* Ddɣu*m?hAD$OD?| yddORLG"B8G韘^Rkud$ջvRG1/Ʃ~c&RHaj"&.\eS52A4Z/x01&1vMfc2oLd2&dM&dvccul2Mo k-n ϩ_/?":+_jiDS% g"3*"B9ɺBU*wi?tK!UB-|]ԆZ~;?r|Gp%Wr¡W% n"nVsISD_ޥKY\T85Tʧ:QFM,O,ت1+k +> e$ϻ`vF0rhB(&(N ,]uU+X|[Q OReĈS'ZWgiuL&&1b:6=lV _|7|LUZ%)$E&I*IJ[ӥRȢऻ'?]pL~/8mm+bomw/Y} _do/~ w AcA|@[ ě @ A|b xs&Eo3)] nAd 2@ Db |'a.nn;wn]K16G(:% >"0E&BԚ|ge=$ _.+Z?_i© xJ2-NTOqO7\+|K񺊨%S Cqn\[;I:hAKe[H%R.iQ^[*!|+"нGP<巧LwO>e6LS^e{黼u*b݈OGtWyez:/4yyQ}ꋟVckQcW'|.7 @ 6Nz '&q, 6YF0,K,2,dgWB#%4MB#YB#B#mr8.nyKoFǦ|lf&ǦM>6Y>)ӧ.ݻO9./"6ߍt^"*/ݼLO-//[}j G> [|oΗ[ [ysvغ2LOp݄Al Al> M-M,ܷ:e{)@S^p8.p7Dr&J3~"‘ʮ^9 LФyN%'" >Q䠆sVT7j6x nS":ԳP ?p[Z%|V9z;"'7!W$jghD&wjsG= x}!*KwU\*C{C"_;(_si;;ñgwr: R)Xu: %T[IPl"!6"ѩ>* i\etlHp籟IHTKܔEXtRħsׂL&&1W&:6=l]Gc&^YWl#pjO'+, ~%ѫY#@xj.ޤK񱯾K4/'dI nYd=N+KCRh%By:_^4A!+4 a:lMMS\m9a]9E("f{ٗ!OB.N )4X2PUxYsf{ KZc*<#|Ο:=Ex&,d;#o!wMM&c2/M^86ulzڱ86{nHR|7IIMeZ"tK6JeWiTfOTK7\{DƮMM Dx0("b)-U|1Pql"h˲4SXBΪ;C}ZA!Limh6U.QڻZPS|#ttd~d6&c]cұ/z:| _ _$Ew?xwKz-8W_tۊ?^}&|n"۫] Ļ86 : N+A; _ٙ vgRl 6@ V@ }a@g\pAK}l'~KNN_8vI]p!UE8 ?ͲѫM*r4'al/>44P|xzy}(yL.kƋ\<ad PB (^4@O!Vվoub(ƔُmQ/Bw0|,(ɳfYN+n2?}lNW ne~.˴˻v#gݼLO?"?]}mv!M Ļ' ea. 8" "]};=fɆHN6FˆȻL]2F~B& vd)ӧt.wyKh܎t}2=}cꋟ|[ [ywJfJ|LO?_A } 诃)ӧ>ᤧ9p_Iէᨹ_N #V9- <󹟉bYGh\tqW e6Y[˼^6OR]oYj}$a_ 7(R,^ŢQˌ<.mY>rR ^$qWٷjx}w8~hd/̂&+ js{+PN+nngݒ2\R*ҩ݇ J-S)Ջc%QON{eGp"FT<`D4ndD<'!d8*_P2CO &]iɘKMwvl6M+ǖ"]t:f3jƻ a1T]ru/ֺJD#Q;s򒆔={m ~Ypq&=WӠg0_FrBЉȨ[Ź"׀=zIO]$'R+(TN޵@LJ9 Ҧ\!T@4ͷ‹FNDInUیE,Gg/ǑE04-Sn#wE圮ȪG ^ Wynm#&V\ 8vfЋ?+(AdB'dhrU'"_FZT̷穉!N8⃢">(N3r6QW7U%NPF4 Fh(PHb̻!. uuwtf*Vmpf!ͫ/WJO΅ &)P2  \5z,"T5G/2"Ya#9k256ɼ4y|ױi&ؼrUዞ_l-"I$O')2IWIjUR.Eؔ"*Emo%)=%h h}│N.N4tz_ 8i<̈V:f"]eFfU !Qy*nNT LR)):x%Nي̿&BZP$rYc#:kCqT-l˝'Ea /Bl.pF/$)9#<M"U~B>vG~Y+eKOOℨg2bX|8eyW1<%CTN&1vM&c25ɼ2yױ86:6ǦƱiITѮVeZ"7Sm/6AʡҰ?TV]͑y0?6^0 ˺%}@D/ 94SEWt|*2 Pd@:Ȳ{/B៌Z$rwjv>>`'AtI0 ו1.GE;>&l&!-8PUeY56ɼ2y ul~ڱ86-{nHRt7IIW_tK?^}݂.8xEw ~՗ _l/2ዿıAc촂 D 6@u@Ixw&E"xA@ǖ!lHš`nLβs_O&0F/}\=y=mBp}A_cMm) _J,yZVϹ"uRB/pbS7lFΛ3^F|mU2@9K~(IPI=1ypwO>e6LSu2=}e^M~;bn^gꋞYvO&I] DmȰhEEOda. $Ch]'B#uF%Ch].B#qMM|l2|ltS|l{黼%4nGlz:bov y1vOW_|ll;le3lnLwMMޞ/Al A}d>څ}}|Spp}o]x+n3/\}/C,޾}`wE@MQJ^'{'y`uL__i4:dH갉TT$2S*Y~'!N1$ 4=WG u=.N. +."j)eX/xhGO$es8 Zܽ:HR"4j,(NH+mOe)M6&d6&5&1dM&c2oLo&ǦcqlM &lcqltlzsl S4qhŚ MDd髼6d1V_ ٣4-ڷfDUQ]Q#>ҤJ/£(/ŽQŽy*46xJGYOE6iUΡ?FLSЦHä0u:77K|[T3KE$6W$d"~fI _ƽ3jYP }a#GP½Jy@2r=吊_JK``P9CקWd\ˀ:#Ϣ3Ci$Ae<񈐔Th5g|GЮbXxG9QB*:)P LqI&‰ܦ9BbW4}f|^H "]`Dx Ǯ9Z w $P+p>CĢz5L᷄u/>Es|[;j+DPT$I0TB<Ě.Mj_]%h"/JVa)wiAxE@椼W:yԠNkp(e%ړN'E{GM0 #΂TB[0tNA1U4V-v16%0 N1ɴk2yd&17M&k2fشd7cqltl-,3;LS??a^]s"X/DtyzdF5m(O!dYmS~T? %9xhua*18"6N  S<6TtA51Crc:AHQ/X{Rb"ùjE]9Ù0OVU"J5d7DA(&)aS6kX/0"'P˪+BL&^ݫ:qvSChA1?TAY|QKTASw|CECQy-U }ԫw%OFia2ٚ ٘d&16M&k2ǦcqlM &lcqltl~slh؄/L"؆/27Ee$E&)6I˖"lJ^U_!S_W}ɼ(8W&|ŻMb?_}no端D8hy wiA;@oΤ~bhA@0_M\Ź&'UŜlI%hdX AIQx$<}k)NgMJMQ $BpϜP~BK=u) 1:NZrE|!eM*)_^OLɞ2/N)9eiɞ2LuiqW.ۻL.]7Pw"]{ ]Pu]t pn]FcG5=Md%m> )ҷ\˨E]:Ӓ,c_𞃧Ɯ'~\n¨eΗ{zc]4Q{=AfퟥDVq.x- / YB,Jq]_m-xMNUKi)_LEtk`Je"#ꄡU,ZAS"&Q_ıdLfk2/Lfc2ɚLd4˶86&شpl2Ʊ:6MfQ R|;*!gI;2TZȶgta:)av8.I+sӮ?|^wt :UT5?kSzLܺ93qHo|7F%!' |N U)8b86nSmO)Sec;ntMJQzLsW%Y/ H w‡&FĖT9YUȹ„bmU2"Y,I0 Oz(}倂AVYfp-vjDGEM 9Tqli xj.2hq:(LB}Ma.01XܝkO'> З9v].1W}@]Yn}`X;FS '"*[A"'J9&1ɼ0dLfk2yd~3y8acul^86flcӦccE&| __dE6| _Ȇ/2IIL"x$)6Ilbx3IMR˙)EȔ"dKZ"lJ6RL)›Rd}eQVɯ;Zᥩ*>ŻYP_GT7=N[K>7Z5jsݤ'P}uE&ID2qUk"4aNJW$X'+EK(%]C J94YR%^"l> I5p2ѽ KWpp%S>JjUP|<0/^̗kN|U PwcbHk1顈VLƖYGDnw¶Aԯ#,,y>OYuL~cld2&dM^ooo:6Yfؼl Z>)aUI 9 -Q=? Q|,TI}g<ֺTNHD-5Nm*bx~r Qq79I! )9˹<~pfd29"Z\[8Ù,(mNk&RKC†nҐ&%~Ocaҩиz1_P$Y!.)UEic,/7UT>mIxr)jf'U>_pDY/h bڦ ;@BD^1)6&1ɴ0dL&k2id&/Ʊ86Ycql2ֱ86o:69Z C"؆/^/6L"؄/ _Vz_&IIRl"诫l)¦UeK6uLseW_ؼh+V톯7׷T_hǶ@o?A9y vgRoj3Ad ZAd 6@?ِzgP}OTY]—QIw+dC$/sdq JFWςK/;Y@ks+y}}O7ɶ/c#czӿx1̄[ްA^H0ǚ_pEVAɜ2S)9e2ٜ2o2S^j킺+P]&sy.KI]{6Vyq+iL"'{f.{Eh|b.yyEh|ݷTѢZ~~̻7aϗywN W#K)] MSwy}x)@ݟhsܷƱ#3WG8ʏ au=:RܱAzTY$mw"RejzօG9&Jq)(Reʪ%S7!'n#M]1(s[g#.oʞt\StkHG /s)q*\WԻ7Jb!WJVl隇 < Hq.ʁ'8yםJ&7^堮vAlqd$J7o ٘d^d2&5ɼi2lƱ:6/cqlƱyӱͱu5A\<_?>.K ~iB }f<? UsCi" g$"*) Oy9M)>Nb,mF(kG*FI?y!CH}B%K/S^& zWv9FY]Yyᩅ%wYt:T!ߴzׯ*/LtRRNxgc2:_d. 'cOkE /tDya2ٚ ٘d&17M7lc±86fd7?sEl؄/L"؆/266IIRl/$&IMRlo&),I}Z}aS-ExQ)EȔ"dK6o"I)JQUpSDHM \F;KE:;%حO qư,lhaPPWFpwpTC(k07Q*"QEczؾ΢ddatt펏!ݩh2\#:L%a3O{XX'n#TQ4FP.(#+E ;'-| IE:B?'mN0:j2yd2&ӦdM&c2oLd2Ʊiױ86o:6[fشdwyjًe+S_p,s 9ezh4|oF%X-9R Oc5*E7$k=Nhip@Y"y0۠ď}9C̃e%4z 5RzvQ (2y mPm{UFJ(=|\ޤ+^o)YlvJu^msj2m|!fD$s|ɇkrJ5d6P]z:ߌɒ,%EVHL#Gr:M&c2Yya2ɘd6&ӦlM)lc±86&d7c:bȄ/M"؆/66𵪾lbxU}$&I_W}RM)B˖"lJ/5䟯xױyV/ _owy3|=_}-] ıit9y vgRvfR?AAd v nܤTmԳD[+2YyQNtezQ^zZ cQ&/m:_:JopEp!TgHP WY*+rٞ2-N)9eLi׎.@]w]ͻ̟e.tOEZՀY;E="XAp^!, E8-D@Њ8,KMĉ=wYoMv9oĉMyH}< =>6ؼK[)h?Ǧ]r2-|_D%{Eh|b.yyEhvbLc8^T_1ϗiwVpn[~L#u^??_^" "@}|ǻ.-Ny<ǻ=/8+yo6H癤ݞ~C5v 4dQ7RDۯ^+t9-~"M:#mځ4S99(o BȢC$ѳ#ۨƐv9I7Gh8.Ǖǻ0TRhײ;H'Ɖ}F)JH( x3Y>oj}b_okynS6Gi$^y*wh&Y􂏟8E~$Z-"u񸗍*dZd&d6&1dLM?86-culZ86fdcӦc'ۻ,˒gF!}rOwW]p஋t;!ҨuP;˙p$Vu6.guoE}ga,)%`S6.LB|@G5r:_֧mtKP뤚EqRVaI ȬмqjQ* I\&e_da@)tн2R`4>JY>Cj{UD,U >LIWJjUB'jz>b}n*m>tD2 )=*HyhyĖGPPµaY ǘpbjTJ@'>шwQiP _四s1Վ¡mB1eA差fGNR dw+lLfk2-Lfc2ɚLd4L^elc±86&d6E&| __d6| _Ȇ_Gϓ$6I"IIRl$&IfOo/[)EȖ"(EȔ"lJR6K!gb!ZuJ.S|Eu$BI.5jliMg?OB׾SU4ש&εZ8 r0OppΛqOq8Æ|SGhHrT W "Gm;)WDPgSIGC(E)" thq@D|Rmd4'̊ |d l%%*I)΅,=Eu e~)]Uי>yٷ:e &"2dLM?86]&شlcӦc'ۻ,߰Kw\hꂂ i.ϕ_vH]Q^:I/@˭AM=]A,S<50h):CRGߴB aa O_zfZ,Y?P3Ҍݗt'dW^k?qYxe΅VD4e >GR (b]j]GĖ jd2&7ţDvjn6*I;Aj#KV;z&-5Թ@~$)Y`S@Zcu?Tnqd2&5&1dMfc2oL)[fdƱ86Y&شثm6|"| _lE&|f&IIRl"诫l)BUeK6uLseW_شh+V톯OVk. tc<DӊOiA;d 5y DbAdV$߉<_Fn.Wj9l/9eT[m$"eR7t',{,e]LsoI}^4x_xmlIcIPEeKOz ꗎ)9eLSfsdN)9ey2oA^kyu#T! fkQpv0Q)!)E)N ΌᣌRE8k&]i٘+Wwvl6MK6&FFtU5L|ЊWM {&.u#Zs2zxBүQJ;t>I1DDhI|'T/O]{;%g^(TF>4$%.4"Q4/#iI2pFs6qo<GΚFK4u}HSt1Z3FE w?uE^MfcjBF%;t:tCZ Zp~0M)D_cW4A"OiFr ~(~בRCx %h:**1:6b J,j zQQҩPFوGh>ϻd뵟*s@ა/v"DR6TF)aC[ "ϟѷHu74BQj-۸pcZy`} _ä2j`<)M5ƛ[gUdM &&! ; _3LOd^plcqlZ:"|EO/2Wkn⧓$E$*En)O"lJ^"Nʚ,A8Aj|I}4YeUز~2k)ֽDr .څ~"\Dحp˗>A"Fio\K{N)׊`I>9_Lؒ|RNCIweA󇛈e;:xN@ۉ[I }R%#{AL'Bx nwp·хYd"o$uo97 }Yf -~yl!y4Ad6&ӮlL&1&o:6]f|ױ86 Ic^>5ȣWBEpEmEA͵K42ğ^U[OEs"F,RhI?59oƿ [}z.N=Eh+Q"U8NV}md+G/܄(MVKN%s?bdnP_xa _$y92m>@1I1TT8 t^oWN|d~d6&%wױifشr/A=Ȅ/Z/A?xEwK~-8W_|ۊ?^}&|nb۫] Ļ86 : _6@N+AA!L Dd/2@ }ہ)aDׄ-䗧az?h֝j҈=GN;חi|o#!Xh4k^§D: >pEhKc3rEv]^#9\4+з>pE^!5Ex_Ȼ^}Խ{)9eZ.}L.ݻw#6?8e~:/qݭkEpnt "d E8A@. vYdXĉMȰ1N6Fp!4_Gh@h].B#;qMM|l2|l|S|l{黼%4nGl~:b6 y1vEOW_|Ͱwd͗M Ļ@ z Gp:2=}N~ù yʾ x})Fq>=E^=?b Ⱦf/҈i8!|8U;o9lmV^ab7LC~a:6vВXN=DZ;h/H{+)&Ftšr'_Yj`ˮ86Zj2PԺTmW}W7S{(EE$ 0 ,d)*ʢDG:_u=->\ 4.+3-xQ_ >Y򇄅kn|Z( OY^e¢"T ˼]! `6U,IW rSU7|Atd~d6&WLc]Ǧcʱe~>Hx/} 4#x[>sS"sDPlI=vv8IbEYUS/i#/{9?E0a Neݺ!>-J,3ȊʬC,kYЇYe;[cwSp5p&g#s*cZ!JQqWɚEKcM(z># N/|YuEuJG=.ꌸXDH"ͯ!wIQ]ez9폃J8Kp)/AE\WZI튅iF Ke5eqrV%('kfQA\nUcŵ>: *RC@ , IBtCu\S:ypt(]H2F~}=%hkׯiohE.f82̫%-s"]' \ ͒"ͤy8]HQ:M&W[ŵf256ɴ4y|ױi&شrUዞ_l-"I$EO')2IIjQR.Eؔ"*EN& 6!g-yrWKIu@SD9+)&Tqoԑ\SYXMG ^nw\Eѩ#w->*m^UG*#;CF/YTO> FP:8nr}D q ;z]o7E-YE(Qb-:bנW|YМ Uy .r`\[8 82LN'bnE"4o<:qB@t[hK$k/TNA J~ƿ}&,]G 4_I璟A qM+#ϸtË1ɴk2yd&17Mfk2fؼd7cqltlg-[U>I)/uދҼgȆؓ[Spc "O1.ZeKK.":?yz1 SV*'D+g#\VWUx%mEt$G1_Eg, Έ /FCNa;SD0_A=h뤖p:(l"M5c*+ECU. "g,C*r'RJFDjN#|BC]#δDk_4O W*™D3 mK B I‰ڙI(E-ͥKtdzd6&c]Ǧcұ/z:| _ _$Ew=$)Z&E)wKz!SJt Εɟm+n[O+~o+Lݬ؆/26@Al ıAd M -DiY Dw A9.7 @ "rX0a,\$䕹\ 87Ė&S䀤򑇉SCFQS'ꞛ(U(q7UĨ?L݂|2%y*[ڊԷ8&AX|7aZqBp_?7kbj-L'`rp_;Rh)SO)Nwez.@ݷ|7b{ݿEU^y˫{^^T_t⧫56߭{p@Al D8AdX|8A7lYdX" " "Ia" "M &, 79l d|7 l lԥ7c]>6ccc&-{utS^Vo2߽]^"b݈MOG=b/2t^^Bo/[}j ^}a+ߝ/2a+a+m[mغ0LOp߄Al Ad> M,M-ܷ:e{)@NNᤧ9+ùt E|wOiy[T#HvWE8|8Iך^"n*"()| o(q"kk6%s-8˖jUW@пLj sE@=ؚ/ĎPt,+8&\R[U(ll`P$)"9ItTcb04/SCnH)} iyn[k)*SSW^X.e*K^A7xI1L ٘Ld^d6&5ɴi2Y86/cul^86&dcӦcul954\|hhJ =, uM7YśQP4Y}K" "t2")KJ{3tp^uPЈPP/>Lc\%}qeL~|C5OUw%etpqt/327^B"/\!J$k,埗:p#bYku ;>H)UaiAjt{,o"ES ).ZDB5f' aR<-pYZ bsIIwt=4QcXzg&IE3Jh5ƪ,H.=4i Ȣ,VCj~ܐdJhEǤ3$MJp}Էa "Ԥ$*f`2/Lfc2[ia2٘Ld6&ӦlMfشpl2ֱylcul2͛MֱɄ/^/6lEbȄ/ME6|IRt$E&If"Ȕ"|RM)B"&//Y}m*8Lue7m^ݬE__[8@6M;XAtڞVh9؜I- mϤAI At" Ad 2@[ HN*/ )Cy ZoJ "&~gg)ظn> NI.yIK@7嚠q*֖z07i}݅\BS].Ƙ[11?E?"M)~{+r,xQ[9W)ٜ2S)9e2Lٜ2o2Sueue ; /YtE ݯ";t9Y&`{@1ܒE@7YcU>D8߄U}\AtF8AD87YK$NlذOIfaE\&qIK&SwIhm.B#-y>6>6ػ%oiS~n|l&'9yи}M6qo>&4;qs /nU}62ݜ/o[ [y9l/|s=R_>Rp݄ 2@>ܷ .> mS~u7%G7m~|Lh\e"dfbmyC6_WjGx/ƪwkF pC LB_Ռ4+ed4"G6lȢG^51$9P׎xz.]} <4QDOA'>%dUӒrο.B}:F٭S{y5&YY2SǾO~Q _J9 {} 8 DhWlH ɩsuO"\ y4]A6O)rCXh(ފ.G/ LwMM&c2L^96ul~ڱ86/×*'43ӂ$u+;ChJVW C ({Sm*RG}mǛSP``_Tq(.Nm<1'/g(^4|)xE hl6x隔pU:Y奓jAۏG}i9dܗ_lA0,fg{޼1TY (kPeKAYQ{(λ5S/2eL^jpEYE5$$nzDG)2 B@QnBʼnӵ^ 7ITUҮ"E);?%.ey>L` w^kurדգHFhms]Q YD;}!>Vw,$D *.^N 75pT ,-DN~g*?DŽ&Ȇl&GI2L "T$h}[BfSʡc-7~AıHbhpWRGUugjM&9W*H!چ"_w{&iɘ+Wͧ͟vl2MK^/: _&|2|-&)t"h"RL)*EZY4]`Zo}`eYLnKKbA >o85ocPj :lv) R(IAM%v e8"uҧQ< 6~5Az^"FhčrNx /k2>zUB!HJ3DR縣ĞXq=K5oK[T\"ܥ/$X.#jA+IW jqvWDq}VaKjtW,:J Ѭzl)t" 2sPdӏNq~1"Lcs}lL]ɘL&5ɼi2lcӮcqltlMƱyӱ:UCgyAY*kNW(aQ[MFuEWRu򄷐#2Y%,U/UY҆&By9\jN~bR+TubE#Hh02L.D/뒑F9)GRUM1QoE.zvz <5ujs M"RY5|ȸ|"ˉgD7/ []$uM٪ dVz\ 8Jq+C'rRkp.hKd'^&өi٘+WMMvl2M+^/> _E&|2|-&)t"h"RL)«RdUpiI.8W&N t[r„/>b؄/ _ ħ@Al 2@ol 6@A|A9 C ,͙[ D@Al 2@ " 5~{^g^ϫ#5?w ֬ɫnK),ik.״ VIZ!aS[C>į8A\1cX]D%,~B~.#;lIwn/"2LE*όFa5e#eT_Fd1*+"n))ӧO)wN2}.@ݯo#6Flt^A_Ge:鼼мEŧ}ZޫEͧ56}^!o56 N :Ad D8 2,>%N!q- 6Yq'cCEE@,,2F>%4!, 794F:%4!- 6d d|ǦC>6Y>6>6oWLL>mwO2.wy4b#yO2}:/yyQ}işVc|:_2a+a+o[mغ0NMOS>@ 6 @O>:}d>ބ}SSO }?N9i p~-|ɣ~~9(}F/ɫ7XvUyRU@}-_nf0?+A"Z?X'm8y~Fe%`VTAAE Z"C+s}|UN֫8xCd^Ld&d2&1dLMɚƱilc±86fd6cħ6yk(c=U`1Hw0%*/sޜw>Eя/>I7S>ɔdX BgtA_2*?D:JMM J }!ZHb9ߣ3h},I*?#:{(%7>@i_wB/s+"-L92gKC*M:{\Γ"W\ 5䬪]~_} 5 Bʐ!z%Vq c"0$Rafv4ETHeOE+ѪB|ߜg,CW~,_2 ܄H9E7ך 8E\5Gʏ}^J@~_ ÉJ?%ؾuE+iJ.NZ+MEA47|mxBdAy'̯ŕI)ܥQ|Qd/*r#'qgWqn*O2 ~Ԣ`ݼ(uRO'ia2ٚ ٘Ld&16Mfk2cqlM flcqltl&|"| _d/&| _lo/LE"&)Z$)2IM"$)LRdRRm)‹RM)Ba[)Eh![Hkz{TJƉ(u OJ熛q=:XE߼WҚz"Ht1-dWe+ KV"E,ϻ{k7>ĖM-y?EPdQ3kwqSr wWGv^uweqǣ㎾&w7_Op >"SXhq:0L7ܤ3Q,i&(gκs]UvCRwxo_~Qc&"~FY b Rtچt|Mfc2d:5ɴ4yӱ86:6ǦS&ؼrlӡ zH}l2 .A-55Mb1٬`{AqnlA4ER&uWZj!40_xѥ$Rf\!E$"66$:Q1ނNssAw .ؗꟅFb& YϵmK˖-ퟛMa{n[U   2A;$2a.U*'w3j)œJz;_D_6Ȇ[.<2.6Ii_e!vM`(r]HU!iDAq_NRzDa&~!B q1+(Np? ٘dZLd6&5ɴi2Y86-cul^86flcӦccEE&| __l6| _-|$ŧV_l$śIߒ)El)BRm)kkUnc//:{V9nZV_|X}m/2዗k^Atml Z؛ӊ%ć@ iLj !=br&e :" Ad 6@AP`ܟ'zdGcWĩG^M_B0AţsYR2P3w%F 𲉴~)x8/5wQyB.$]L抸c_A{%- .9\ )1LS&sdOɜ2Sfsʴyvʛ.L.̧.nAKU~74K4>-Y|"í1&¹"F8W51¹F8AD87YK'YdXw:lذx"p. |Hhp!4Ғù]иeChSfǦ{c!{:w&9yǦC>69yuɛ%y_ۄU>&4.}t&4;qs /|y{ p|V6V^[7G2ΗG+G@Cob}d>Z}Co] />> Ҫ>6|KL8Gֽ7W_M@lEBC.m# ";:<&Ic҈4ZQp=:7WHC wuD/ODS[ :&K&]kXQ y{pOrJ[p (mBQ{VNE5PgmҦMvT.:7^eH0i: d Dy䳜7-ԄjYdGJVq,YAIR&e \9ɑi~ɡMPFP)?y1 ǖ[׬:A^ҝSn.N}(fl+j_|(DG]!9:Z\{_+Wj_> OOD8%g܁4$^'[ (Y 7ۈ>LGI%qC i%3)q" GZVi-$kɻKDד:z֜KjW  nU@,s><*ɹbUMQ "\jpvo.RxhmJ8N6);/^ )䥹 nSD={\QN _L78r;rRu[dlL+SǦO;6c/tbhVIN:IIRJRRNKt)Be)DЇ2g>3L,i2_P/tWݥH_rT$2mBSIuB 6bJ"(&~@jMuyӏ$ap"+ϟϥ(CeqJGۇN'6)5%a%'bUz%€آX[zv"Ҩ\Cqkj}n!F|@kD\sNh L x̾LJ~SǽTF>@ -|(x.c1 GD?X*Ǎ^;K -lL]̛٘&5ɼi2lmlԦcul2͛MoIN@ ><ӕs]IKeq')%G) +)Q])@FIh+ E3xdC!M>7(a*P<[% {|@k* 8{ ExWgw%cToq 4A[p$2_)YYQᶅgA_W\wwt0x^Sg/؅8I3rSt2dx~(˧vwFbTKe|]9;.Z\T1|j2}d2&ccӧcwwN:| _ _$ŧI>$)Z%U)§}!SYtZp Εo؆/27o]  @ 7qlzñ ħ@Al 2@mN+mZa :" xs&Eb)D@Y D"A6Ȃ8_t8TrBQNDK%Wd%yjZx!NP:`riWÒ%CEB|DPUo ôVȴwn֐DZ!뮏H8uĦ~QB *_ށ+rN'D]q{S?B-MVUY"^ͪ8SSO2S)2e]^owy4bӧ# ؋̧y>WD8O/tѯp_tZckVcC ,Mހ "S'زȰxEo "Sz cزذhEo,ChSB#yIoNChSB#i˖Ȇͧ|l:ccc&-{u|zS^V:e>黼"'u4bӧ#yN2:/oyyU}işVc̰O|8_f;l%3la+1l|j2}Hd6@}tA d>:# xc NNO>}+PWN>pҧ9+ÉgW4]%q͉G*x@.=4i^c#A~t8} % ` |(Y,u'd*N$2t{$V4ey9wJmTsR T(*5%_ĽH Cz%B'*HIu2@Rs!Rp|h-߂  :&@WgE7i-k1P"ir*d'B+U$ o(pZ(ȊJ V7z,{&өi٘L+WͧMvl2K TcmZUF` ;($:Gd%QB)~vR]~hu/[ma H*ʿAѱ)] UYzAUŎp [O9ZU򉴢,G2%Q$8zj*#HO=/QWKΪ3g q,X⸲L A4E*E09rܥSejSO+w0qNTҋ&mwߔ[}[o-(CحIub(JFvbjEhv/ptKܘҨGgmʩ6[34vX 7l&$yYNGEA蚤6& L޼ʮQu8k}k75 R?w(x#$*:u}": OA"0kgb,=j.΋3N߂bU RKTu`cQ!yȃ8*"9JƯaɏfЭD#1\ߠ&iɘKͧMvl6M+^/: _E&|7o&)tbh"RL)«RRKErBe1U`ھd*Sw2uP8-)vnFs|96@ Wp("Yo|D)3ߟܛ64yBhu%L =u9,i8S,(v_p ) =eܝgX a ܋iU7٩`8{|r})#hϣ*\"Ɨ+i!'᪅:~mxP92 NÈI"C%괚\fUR~OnrH8k/;xY2B z1tRB ~2ɴk2yd&17Mfk2&ؼdkMfd6c&)m' r(9y,P\ms'uELyO wQ񵗍/hBE}IŌ8kҒ=~':*?K=t mmMD4D3{Vz防xH66k.xaR_8r7/^з;D[dRh16TׯFg\hS>#OG@!W Ew>rrs٠3z1D3*PR)d'+0n0G^؋̒s{s.衤ˤ$G*5rE6;@)t˥g2̟6ɼ2yti&ؼtEE_l-"IiO')2IIjQi)B.Eؔ"R'seWo >m+mʱ m"h3|_" h& C -i[ ħ@Al 2@mΤm&e :" Al 2@A"RdmMݼR`K{aiԦml5g(oAeI5wl+.ǩ/5z-r$'t/{0 Ǘ-f.$\%bNky!Ma-HQ4~G?/"z)u.iYTšNq;e:=e)9eZ.]OvWO#6}:btyy5yˋO/tѯpWc>]cη D@Al 6@o"'8AE@E@,,2,>!=- 7YF1F:%4!, 694F>%4!, 7Fh4|l>c!- 7dثSSOvʫ̧w>}W|{Eh|ث̧y>WOW_1[fJe:/氕ކ dɫ:}1_ S>@ 6 @O>>}l>ބ}SSO }?O9i pP`vB[~K]ͮRaPc*q-o_,0-hu'"2|[pVJ1Hbj";|[w)]eCtzYwWe&"D\E2Cp*#iZӳ~D^rt)6"қL*aI3-EpBn_CTb:Dz)Yc˂z6B"BS\F=+דo^Nwo<(\/!j? ɘd^Ld2&5ɴi2lMƱ:6/cqlƱyӱͱeG`&r W~k,ӡlV7S/!ݯBEZ}(yQKR8tzK;T_hL"1cF/ЎݲATn!W֥nSЛӊ$.(Ep|}Ӣ >i'@#ԡRtϠC_QT`Gz'j O\%|Btx8z}-hEdj==ښxEZ gaH5]59U|ӻ9U?~O(z}sH"狧FEi␲wGmeb^>ĢHV 9թ݂R_0Έ/wGuΨʥn$Uasea||]rBxa"R] K8G GvrkmhTt7zS$j?$,$Uј%qJӕeH#%W؝o,`1϶Cx~ßLlL&k2-L&c2ɚLd4dMƱ:6/cqlƱiӱ )|"| _l/E&| _lo/~ _&I"IIRd-$&IMRdm&)IL)BRM)¶E)B!S-Eؔ"Y[)"wTVgdmLfSS&)(H{P&n^r[W/nFG5&^\ޗ ZSJDB;j]juG%>$|8ڢfÑbQ AˏsEd"U]:\* ~ı@dcrryN!VyYQϢ8Jh|C8nD,?V>(O?R#p.ET : hS8/v~/ff\#%AKF.0w(#x?]3YONiSˮaQSmd2&lLSɘL0y˱86:6ǦSfشr7"V$}AIUuM#L P}.e}Q;d~j~A^1#S80%pqH+Ik]tk#I 6ı¿ԓEX-Q%_A %=쀩ۏhW-|I#ڞ%x(Aea}"Q#"/)P8uoDTɢ'_:fFۥȢݩoIRj(ܢ :zwHASn/\{|, @aeԆ= pl$6W:d^d&d2&1lLMٚLƱydc±86fd7c __lE&| _dEm"mbh3I[2V_tX}-EȔ"Y-EvM^V_tX}m*82y˱V_ێj+{7|-/:ūc/ :ql2@piC h{Zbs&ڞIh5b)ć@Y b 7ɍУT1UÿoHb+: h% $9]0TZGhrRcp%G* ]ˋUN$*bbczԎE~o-6Wbyt*J(H^S@sʼ8e2iqlN)=e6Lo 겹˴ ꒹|  /Y|"؆W ,Yt"Ьfs d!`{ p"C`\C h$ e,tHfa"Xc"`"`ù$4!qI+.SwIhCB6S WL> V|]꒏͇|mh%]~#'/:}mWиd!oиo1ṙ1ܪzm[e:/o[ [y9l/|8_L~AKm K ?h킺KmPwuo.tۆW7~fˏ_q!R9dSY)z1\ʊtΤDඌ?iHRXh_CF.IE~@S2.&+f3.p>$YXڼ+cv!]nEM.m+Q:(M vAaƶyI|xFG\ EuY1 RGi~6՗Ҵ}6`a32Qd:dCyL'ya2ɚL ɘd&17M&k2Ǧcql &dcqltl-I_.x)9]--=h R[Np(X<-bZ2&Z~%ЧhGӽàmsC@d_"RdbUB;E$ ͥ{rBGffҩv|${K;w[E`]bˡ|$ʦr["%A.dMKi}HET]4Vt;Ȫv(J!.S5(sVY$! [SKӐ/*GCnc:o.<ܺ&&;kqנ` |tďܤ$M@iʠ+L} [)ޏ5.{pEe8c r{^~N?%jGSjERT\AZ%T6alUIhbx',3y-DyJ yi7yE)r/NrF594(պPFjG"`G-:}ǿL ٘LdZLd6&5ɴi2}ec±86[Ǧcql2Mֱ86o:6Yfx؄/Lb؆/26/x$)IIL"&)6I7%)SaS-ExQ)Eؔ"lK6m"dKӒ˃!T.%8Ph%܍^Kp; NqqrJ/h/8\.bc,Ǜp_=AhrRP$m`Nh_XfB1p[kQ_4ϋM2\ f/59E;5x̅x"<Tv"T>,:"8*wQ80&Zvm,OcWV=e\ԗ|1]mHIrWT:\\ߞߎN \*nU<7FH q=lL]ɘ̧&1&o:6]&tlW-4*eh[kG'Y# qf%B$d0ՉB 6."KPR\r IGњiwG@n寧lBJш 'L P~4_ÉK@~<U]؜ʷ 7H@!ﷴIhrζ tET'tyvT=c9\T^Z*5ѣr"_.D7U厴Tu=+2RLi ȀuތF%0Qyd^Ld&d6&1dLMɚƱilc±86&l6ۄ/Z/6lE"؄/Lo$)>"$)LRL)§V_lK6m"lK]V_& w7{Y}aثͱwײk;| _ _8C h& ޝV, :l ^M+vgRK  3))D@[ D"A#K !mmPwwhBCZ뽙[EMAJC~x?tqYD\备"Dޚ{!05exm!f3~}K}ZۚOIPBp~;WDYDQ\Vtʴ8e6LiqdN)=e2LLo ꒹˴ 겹|  /Y|"؆W,Y|"Ьۀfw d!`{ p"C`\C h$d,tHfa"Xc"`"`ù$4!qIHK&SwIhCB6S L< W|]꒏͇|mi%]~''o/>}mWиd!oи1rL1ܪz[e>/o[ [y9l/t8_L/Lp}@ @# up}۠@]~ !ܷ ݯ8mP܋iSdeLlLfk2/L&c2ٚLd4L6 flƱ86[fؼA-yW>+UI[",jqHU~j"͗.8U?1U-񥿆[9?;U1;!]S ӆ_un&8Vd|#E<Z5u8ERb]䏓:L= 7urO ?U<տl,r^= V$nT6k=̼jX4pbg EAD49z"^,uU0{0ߘD;V{)Wj2/L&c2[ya2ɘd2&fqlZ86fؼpl6MƱ:6M76M"hȄ/6l"h3| _d/$6I"IIRd$&If$eJ^"dJ/J6Rm)¦R(EDrRTnݭY7ɴk2d2&]&ؼlNcʱe4ePع"[C/^L[FE.*:p Mly2LX} ԷjHF&Hyډ nqo JnS3q`ՠ#"ь*'#$T:яpVx]_tU} $u͎ޣ0v奭=`ZUAo,tXWƝ|Yk*w ~:2 $)8WboQv=(;=/(i 13t]ǭbI d7K{+Qd2-L&c2[ya2ɘd6&ӦfqlZ86&ؼpl6Ʊ:6M76MbhȄ/2l"h3|[2IO/:&)2I7%)SiŇRM)B"&//>M^o&:k۱WmśceEvbh6q%ć@6M%9XAtmO+AVΤ@A3)2@fRd >b Al 6@A¬iY&^xX%[eKƛF9[_ $*/47h}!/GB?[Q#:7\؅7ѻ9B:>F+Y114IP2/.xC\9r|p/HPyqdN)ٜ2Sf{lN7O)l2d2BKUĦ/"րf"Cf4c%YcU6E8B>F8@A' &`IC6 nÇm-Y% N6F^q8wKB#dblشcV|l>coVWF[%'/|&'9yи}!kиDŽ%}ۄU^~#4e>/oVnwغ/|y{fJaH}9_H}eH}Z}|mAl ^A} G+o]}tmS~u7%LJp6tpp^>|/DY~;=n4/pq;E)?חF;_N 'Ҵi/. x\ә膟TtCX|V뫯5i4{}ho܇x`*nZ$pM/pY%;,ɝΩ.k"Qr `IN.vψ~w7^Vks@֗?ju]qCMxSP coDq_7ӂOD*<] PjOcЦ8TqD=ddL ǦSO;6Ǧc ĵޏoXֱQE]wIGtƨ|r<hǫϪ#nU)FU dE}+SziyR*s4~(UC`gTnM(|x"3dg1'yWH A!fNzTe-JJsNN\œQk|SUKiC#|{yA8>5/<Ƥ~!"&|_%y_b.ZOz)O@BunYGϧ|$IT(4 HUE izb)*w9ʹ}TF\<7ט|G /A`E5l{˥CJAAjjR.ѵ۴TFyCN}({]$`2HI#UeH ,U`]t Hhf؆/27U_S  @ 6ql S  @ 6Ŵ' N >Ad ޜIA| !"Al z. yxYrN}m>4~s>,@˨0Q*a甛jr#~ˉt8uyb4So A>@\wSUi:j:цK v$)3ig**^>XRuqvwn+%a^}xB%d=">e>=e)9e^.]OvWN#6:b"o2et^^ ho/>j UNkltB8jl2@A|Apذ8A ,2,dĉX|JCz YoE`tJhCB#YB#B#or8ȇFF2Fd锏M|l|l2|lccNOO>}+)2e]^"biĦOG-b2et^^>]}p՗|ll9lad>5>mjf2 N>>Ad  'N>:}d>ڄ}SSO /@r8Ip7-9~]}60 ʆ-0N]0藿yHG9'۔Klc| J99ť,EvHE|!t%Zh:7DTHlԉSi4~YTh)`_ŜQ'ߟRsW{D$=ԇUpKj\$,of _ GBu*:? LEt91?r0"j?_ ApE^MdLfk2/Lfc2ɚLd4lƱ:6-cqlMƱiӱͱ1 r TT⬉&O}aT6iJZ] ve-C}wwCo ߩk& T "Ӣ z^ݹKdA(sZQ$III9WR@^6Ț;_*)RvR~%1o߂p|  ("Ў|S]܇וA&N$7T-e)vIE77BX+l*):QrI>n*f%A "͔mA0Ա(1˥: s*]PԣuYNr/] WKTΒԆ϶;| GTN$T‹\fR$dɴW3f4&w>SUqi ”_K$vZ=Qy_9DK!:^8NA&=S@oYz)Mwaje'%ũe\W5I/EU異% *~KgN$jo~5&1ɼ0dLfk2id&ql^86&شpl2Ʊ:6Mfd/6|"| _d&|f"$)Z$)2ImE"$)IL$6I)EhQ)Eؖ"(Eؔ"dJR6K~+E6M"(B3_Drer~#ơ!%&#ˠn ^EroF^̷N_pCE,\dVWX$#_;~v,(Hi;f^,y'Gwe|h邕z³a/5.^PGx#yVsՍS|^bߡ"嬌p{``Q|"RlLd5tj2yev6ͻMƱԱ86-{7/X`ϛ a(:H϶}/p<4@s!NLE.Jk,29Ee Ha҂3gS}PIߨd&%2uMޥ<1$ pNs 6UI~(A' &D rb bMJjs@6>ERڜ]@PRQJ rw*bqN@\}(>O&5&1dMfc2m_~YOֱql6/ǦMǦ7EELbhȄ/617}/>ޱ/h3IMRlJ>"[)Ex/J-V_& NreŇ׶cڊw _&|*|mƱA{˱W@A 2@/3%D@L īn!?Al 6@ _ [yGU߸7H!Rͷx ""{Zq7M/;h~tlOy1߹"iwqlsyes]7Pw^E ݯ"tcXt"Ьf[E=[U_ocmWB>F8@A' W.`IC6 nCmX8Hm'B#ù]иeChS_ccӊK[]鐏M[]muw@c!{]!4.y_|&4"1qCv6q c|cU6 we>/o[ [i5l t8_Lj->> 2@-~)b>Z}Co]=X}tmC+W}CKH u/PH$roVNzIyDr668Ej=_FW6)UiU+3|!G5QNGydi{ED-y'PX,WʡXqcCx)+(Mn:e@=e-@q]u*Z gĸ7->oߎL WeeB{&x.#bJVBiDL!d߼bY"nHN?I)j*[VUBJiWQ>:3NMOLdZrl:ulcqlZ9%be#@"0g{V ' MJ%y5]Z=)?>&v E8E$7exsEFESY,Jg2vxEMG \}ս@P5zT )Mdo\;_o*1L=!=_WN&Dy*U x@S/xCARxF ^A\D86BWRuU?XS&ɩ{]Isْr)tmPc{?F~n@$ Z0^HAHbBs:Z߻2ӕҷ &xOQLئ_.Ϡ={zv?zJ2 zԇ],c5T(& C,,%W\UPӊ/*#,PKƫ-S opF7*=ddL SǦO;6Ǧc/tbhVIN:IIRLRRNKt)BU)rNo\ɐB'Iu.=>n>D?3&i[DUW>Qޔ͂P xK΍>%*\AZǠK*S` T$%xOќ* XBN%պ)fxuм@up:pn$vSvKÁ)*UG_:y|~/IIo?@ E%4v!d%ǹT4A_}| hopicor]pIIo" ^&2cp')?_|| :5shLzN{rR/d2yd6&lMfc2od6Ʊyױ86m:6Yfؼ 8;tJ]>nxIjfUR*):L|{%} xu} 7+8WάͷCH]6F0<(PTS\R@5: tw|( bF-5pTIx`OQsd~"UB~*-~p'-eRwy_HY JQLuu,F9; aQ eQZZ5{W-^4(|AA 8)B[XZyr ?ϻr*F};qLS&1&/O>dW _tMUZ%):MR$&I*IJ:-EӥRȢӂ?]pL~/8mbomEV_lEዾ_?A| !D"&M_?A| !Db洂-S  @ 7gR62@A|Ad 6@ -$UjR2KrW[sdAE4뚤K!![븙ˆ g]cB [t\z;e#V5Yߠ R w-yը#nU5OWw+0deȬ_3{Dlg<)W'(mqtzSfsʼ<]ӻ̟+P./"6Flt^Ao{4/ӧj@V_k5{V56{p~Uc)D@Y ě'!E@ >$Nea&- N1|Ha" "M N |Hh$KhdChM'q8 N tHh$KhdChM. N|&&M>6[>ӧ.]O9."6Flt^#"/i^O-//:j V}|ld9l%;l]̧&ӧM^L&)LJp[ ě@[ ǧp}l>6po}d))ӧOy꾟IN4sݿs8W*N9Upֺ}Q4up?P*T}Q?K2n֣ʖˏS[x^m^ 9npuQU~KyQ =.NHߦ=sSGW)7.I=AhL2F5SyWheX+)8 UK=(_1RB_1.]rvLWA^\l+PBUN:K&Jzw@CV8H N%i?me2&1ɴ0lLfk2yd&qlZ86fؼpl2MƱ:6ǦM&z.Z#:9|U_:#DID^gB LE{?9'z$3V$iCN6ثBRdQR ,3Vy$"= ?Ǎ&7CIdh#b-2PnWd:#\F,(zcŮc}܇c[_#u).)EqhMb"Z5䐵EO^;+fhn.RNyͺU]L\jy H86Kľ눍D*!Obi$OrU];\͐D.p|ۜSlFԊǗƸcnՁȠ1r໓ p|_X@M9E62 =qz_=ꃰty&ݕ6%.t;Iey{PE(COKdb/*O&d2&5&1lM&c2od6 &dƱ86[&ؼ&|"| _d-&| _do/~ _&I"IIRl/$E&IMRlo&)*I"(EȔ"lK^"lJ2RM)B"Q*Pbf`/z82 zt7k(7vv08w7fR}nS &]jㅳFlf/HEZ 7vDF=e]." LE;* *6)_k@S'p𩂦 Tu IH~a%e%/^.vی;/R'$^| e_8P*)GA0>-_ GO $(cw!v !keSI(9B닆$*B2*R@m8_Hl8;y5ɴk2yd&17Mfk2fؼd6cqltlw9_ YV46ho/2qH{wY+֋GKOl# 5 RyCAt=SU ,Sˏo%̈FiA{"B9GJ+?^@Nxb f$altdCFЧÉ ]◚9|iZ9^ꭊV W2|/&5ߛjQJ ~?i&"b AILhj!DSF'e_|QOUF޹PE|4ֹvd^d&d2&1lLMٚLƱidc±86fd7c __lEE&| _lEmZU_6IIRlb_W}RL)«˖"lJU_k2/ Ε]ǦE[r?_}n.oZAc[ 6q?A9@Τp3?AAd 5Y& /X~\.q-%zA$פӐim*N)pC*d߾@'Ey"ExՇ𻄯*5}+"@yYSH}"yqlN)ɜ2S&{dN6ONeZ%ˋue6w72ٻb.tOPM }t ]Pu<ǻ=/8+p7[>c#G8>Qc <b*1y@*z_\]\=Qeq$evtT&xOxTs&%3wcޢw [@ԑŭpWUP?L ٘d^d2&5ɴi2[86/culZ86fdccul.NmrH* qGZ^w!MRrwYZ.tFiE(ҿՃD.|w_TGxLcz!?0( A38HDnuefrA ?e|&ےSZsw]l6ޓJ"r qs4S.J)RsYz5e%|#i#(򍳫yeЛfUэsUO&1Z$.,MHb"b4krsO&K`2g55$f/Kzjy]%L];UtBsTrhfie.HV"'',uĖpwo}.J eznUdlImF"Ժb_!E܅iEZ`7-Mɚd4lccqltlƱiӱ:Q=E⁋h٣N5|G?|2*ԄoE^wkc8$dޗEi1${]@"'<ӔՔɮf+sr0U\ }j@}=d#֏%fmB׈P/6T&NBZۈl{z49{ԙKmV[QXOmhD6+ F)װ'E OX^p+` AO&_PĦ]lsGMSoAa^KN6fB$I)85N/L ɘd^d6&5ɼi2Y86/culZ86&lcӦcSEbȆ/Z/2L"Ȅ/ _Eme$E&)6Iu՗-Eؔ"l)B]Ż&\/ulZ+/V|-~±<Ļӊ/işhw&nk& 6@ W@ D8TO&Kt|qvH.n󔟱/cE Pq)Yt΅{PtfF,+$`" "ПRX\H}G^7yDDOu6W} Whs#D+uI$\Cl#CȮv/ʶEz]rZp;]5qyj_Eظ\ouR"{ j8B L哜DѬw5[A􀼸RzpX̧&ӧM&c2L^96:6}ڱ86-[M)ۻ,m1x֐1[brʿOwYڊTi=œhΗNae:!rM 'H')r7J k$.#I^:> |^g <7.WIJvXrhWOPTg$6KB8": ^=zW yTSKVLUdrnhVOۊ2&_W9)BMD}).|+d*0 =RzpY!XYr-y8r:"-P=W-8kh}6|"wY(UaP%Vv~S:Qj{u4Iu '] FѫJ$ӍZq؆lR("Ae᣸Qč3_j_;UȨ'EheyUrW%oW<.^MaFlvgԄ)תb_?9%eCu۔"ktj2d6&7LcөcӧcʱWO}:| _ _$EI?$)^&E)§}!SвQם1$i׺x/ _tRdig,5xr\&KI{UP!{~SnMwD[.LզIX4$~_}5DmD;kw~vl 0ύz>?U(x+s?>Fa<sC }DpQ5 +"NB). e{A>=e)9e^&}w]A>vet^Y|Z}ѧ}&¹]ck}`$.da. qbEE@,2,1N2Fp!4ҿVcB#2u'4nyMM:>62}v>6e]c#6:bov y>}c>]}w+̰vd/i˛@ v 6@>6p}d>}tzS>>pҧ9p_qo-im^Yx"~ZP]ũ}pC܌<Aѵ, ]u[ުmM1KM4uK~(&@+!u}E;I>`]+E"SrUR+>7y-~Nj|JpZ3w.eߟ~EC&EI 2AMRD0ϤtVl_LF1xyk[t MmCSM)*3H<^Ȼ;M_8GaG-As{_ᗢ%[sg%*X)WfԛБ{ky#HG]Z0 ֗5efZiD/DmrDS-)'p?. q~|TQuue,yʈ>gX&K&v]x/I7á"U E!Ŏ_ L@rYw\#;iz[˥C@4NknM_<@4CH/$"}kBO7@˕ U{59j"VNWhɊP E2LFD6Iq|w6uS\TTGIGD Ldž(t(9?no\ql<?T ٫ؕwe|%@OǖZ(p:O՛ dlL+ǦSO;6Ǧc/t"hVIO}:IIRJRROKt)¦U)*8O++Vi[n+VM_9k/MEoAt !Db&Mo8C ,iM+ D@Al 2@mΤAd :b Al 2@[ 芇ËB71\[] oxfE5Uae؜JKdu/ ӆ.*z\Nq.q5}RP np]ڀsQ8P:TMq N+T̲"T$Xtl<뿦rD”+2$"_ʷiqs7\+c/Y7L̟>e2̫S^e>黼u*biĦOGtUm^Ӽ̟˫[^^U_tZ}񧫯ZtZckI_A@A|ApiXtJC[m8aXtJCz YmȲȇFF2Fp%4!4) l dԥ7Bc)dlؼ&^22}W/OwwO2}.owy4b#yN2:/oyyU}iEVc8j :l2Η[ [isJ_[c2̟6y5R7A| !"&Do@C-GM,ܷ:e:=e)@ݷS^q8Ip7w*T~aKF*߾Tx5fT[U$)-_oQ*rD]aW&li*xoD[a̗N]pcvAM DuFU^`ˈkA1k*7=eWuX2p:D()$N.| OL^ջ Gn,KW:\@/gFOHŹ&>hbbx:qςgqXA]H5>AT:RZՖT2.eKk=OՏQ ;im_z6m_D+LmJzi7b2'W(,K~@& GU̥M%0'aP`>k(ޫa*]xa%*w]ۍA_%)D}"e ntx\,MJ:IF}?$f8S\2$іw:G<a̸bVQ T $`aidZ 7@TPU]ئWȸ~9:ry9YюM|@q(߭"Ez/&d6&5&1dM&c2mLo&ǦcqlM &lcqltlzslxȄ/Mb؆/27&I"IIRd-$&IMRdo&)zKRE)B![ТaS)EȖ"lJ,Eؖ"7y8SP 8,QnjZKt!o2Oq"<<&a+]@>hB5OB{lTbNY!&xy+HϼkZLp n3"TGD4^GqrI$t[W)IGumA+7JhLҖh&PHv =ι^J(r_#\]!=ᔻ' rFnлSM PTMɘL&1OM&c2-Mtl6MMƱԱ86{\/}XB~eC6/rY^M߰I-:A,1kKsT_Dae8ȹT+-S}S}寫&3m5NV^}qu䩾ҜI=Sp_)0wE).W/`_Uj*fA2Hb_' \|%, Amj1:W7]GI5:O ǘ_ľlMdL&c2YɘL&5c±86Ycql2Mֱ86o:6Yf _d-&| _dm/w/>ް/2I7%)SiŇRL)BRdeŇ׶ɫM^V_|X}m;xs𵬾_l.ƱAı7K i VӊݙC h{&EL&C d6@ D7 0DTF˚_yCD/lmB=)M7f:l2qN../uFpT^p`=pED$k!!ZCHɞ2/N)9eyɞ...K.)&td!`_Ew~s@d!`{@o1ܒE,1ܪz"K!msUc#K m D+sE$N!qbEE@7`ICz6 ,M{IhCB6 V]ȇm.B#/iޥ.tަN;Y鐏MN^7r.qC6q Kv Fh-|8_í1]^͗p=le3luY͗p=R_6Rp}@ W@W +o]}tmS~u7%LJp6tpC J}J ¢&`yXDS3{ᇔ-ӫS_"oh㮮qn~%6*oR8QoaA,5P-i_2Uj$UAnɷl.U-|zisy^)Wx{oemxx^&e\#'hp1 ș!qDV*igd>5?m2yeʱԱӎƱiWm?j.;rb 5\rP٣ۚ~$rEDEl-:LFp!H-; # R;Qs#I8Bj2s%2*t ?ʵwJ ?rU#c0~AL@?2D%蟃(hUWD58"|YסZWAYE6d-c[2|abdXJf Me4ݔ6;У``1vW@R=C;"IET`|ٞ]g”Gc ܦh?tkxUև,IZ_iJB=ac8!ZGEݎ/iL3d<򥈗C aѓ?Xq âKzME2xH _E&|*|&)tbxV"RL)«RAV$j AԱ%<.t t/hdmu?"j&w2z*% UYBK8!EZnR; .,PfG睊Y*wC賈~bơMAEqCħImL/5.Ѧd7$.LB֫-ZJ@urs)wu')&p(يp[֭8A*oE޷4c3ч+h6I8ThL\s-6߆k2+&#W y!~[7U%-dU ⓛ$Q'?ӣ.s#4ҷ"Myק̧L>e6LS^e:黼u PO#6}:b|yy5y˫N/týU_NkltB8jl6@A|ApȰ8 ,2,dea)=1dYlX"7!4) d d7!4) l lԥ7Bc)llشf^22WշS^e:黼"'EӈM+B[^e:鼼"4UEZޫ/3l2Η[ [ys_ [k2̟6y5R7At !b&o@C,M-ܷ:e>=e)@ݷS^q8ɟp7-<@/:紺uE +M!Typ@IZ=N!i ;y]=2²9܇p9ٷ8m&A#sos8(u9 A!$Xe%+2 seyj;/2g]]9&^EAa$(,;*܂kkjEn ѧ+NTf녛&&rQ%.$ &ovJm3{>uHj +Ndgsc,ya2ɚL ٘d&16M7c±86YǦcql6ֱ86m:6Yǖ.x|%Y+LηٗV_{ʔbuh,,:(2QtT"cy۷ÔNc)Th%䑩^ncPbCp 817EuH5ĹT@Sc\pb(.Pn|! h?RIx\##)C&wi=gwjwE斄GPtqȒm{SE7%¸Mpњjښ] o$<5TAڴʪVLWH7tG5{dﻝ{Ns%l~U U:!C*]tJQ۔Iu*>:U஢x4.Yݎ~+Gq"Cmeyw,iba᎗u{X] DD}! '}i0N{< W_4u7N92`YuיȄgp&/CuY8] ~jia2ٚ ٘Ld&17M7c±86[cql2ֱ86m:69 __dEE&| _lEl"h$)IIL"&)2I7%)SТaS-EhQ)EȔ"dK2m"lKyHA_nl㤾%Q.Cl7SK$xFMxUN =Q*."c_ODy~AzlL]ɘ̧&1&o:6Ǧ]ftlW-Ջ8qQB$"jMRWĿ4A4nhY)"+Ktf"^8ޭ@n$6V&Td4d=UR̗"@kqi<2!v!\CGGqŁp >bi .˼fM}R(X_ܑS Vdq0. j0LREjE{Y!Pd ST"ͥ!la?hd^/aADQ&yݹCVN1EKȂ4GN=/^ ٘LdZLd2&5ɴi2[86-cul^86&lcӦcul6LbhȄ/6l"h3| _dV_|X}MRlm&)"ITiŇRL)BRdeŇ׶ɫM^V_|X}m;/ڊ𵬾_l}#|mK m K{sZڞVx5؝I- >gRd ^Τ ħ@Al 2@ Db ɼDs ޼+sOh*}rIP JƾJ_jJS). tZnRaݿDl<@,x8f%Mr+~.uئvH͍J{>u€~7̋S&slOLɜ2S&sʴyvʛ.L.̧.E@,m~ߡ͒E,*/ hvpKp} p.!>U}p. :N2@/M8ĉm,%=1,6,^v9KB#9lp2uF>$4n3uyyޥ.tަNIN^鐏MN^wr&qC6q Kv Nh-|8_í1u9_Ͱ͑ṙ&ApWp.uWBKm~|wAijLjk/"$4TIte^Ld< PD>I284m"q=>᡿.B=J|6ԈzłGG]SS Kcwc'ci75Ȳe6ZE!DnpHrHGj4rs%0157?mDq' &]7>ݦ+##Z/V_xw1k\T@[d ȥ Rp]>SSA_ݶ"DE QSz[#6R(%iWP6)UoUT ҝg!Uz^t(C3K|DRlE&k>FxJ8SQ jjMr3⣔JuC#gI^^ZL&M&c2-M^86:6}ڱ86-{4|ѧūJR|IMUZ"|ZK6Jk{ /r 9%Hhep/U%NH{1uqDSխE\4!Q}9%X+c AFT!r3TW(fGNbxp[A8ÓΜZ~sP^r59-ELZs!R~%W %A8kkJ01r ,: $Zzg:~nrE33 YYUL_r JA_L&ӧM&c2:6:6}ڱ86/{4|ѧEJR|IMo$ߖ"tZK2-KEɧ'}\^p. :m+mʱj+~ _tZ}a6| _2@AtAcm :b xsZAo )D@Y D3)zI O :Al 2@ DB -;| ՞t{w^H pה|E{7_lJ+ND-҃tHsKD71yiǤ1+ ]ܵ+"H!U8ė&Gt/"]^I]o+Wl%6:85Ǥ$$)GHqedjXy%T^֧LL>e6LS^e:黼u˿t{ݿEU^Ӽ̟˫[^^U_|Z}񧫯ZtZcӧkVcC ,M^Y|JC[mزذÇ,2,de!4) l l7!4) d l7c)ldؼf^22WշS^e:黼"'UĦӈM+B{^e:鼼"4UŧZު/2V:/|찕Ͱ6d+dɫl >c h7 }| !c&G[22}W)8tOs8WsRI8_AqGqȉÕ*#{W/kg.MiYze;+5YBsN<3A-=LLIá "iVϊK[@06(,ZlSoxh:^\Ȣ\B&PJDYg^H!M& y^\-ֹM+SoƧg]F,qR'M+"8*!94m\F/R+Ⱥ9$98_dZLd&d2&1lLMɚƱydc±86&d7c_$FR}EJrث0KҌgՍ"#XoשDC' -H3ڈ>ziѾ9r0qWo !F=RT6#{ӐE^:ܕHa 4) ^xo7F5o@NWbwp9Gf!N5{L: [mw)f$d]8P4EMQ.wk]O9ҟptn09SRLrY& őчтX_Zh_M帹VJjT&p"W؂̭vxϡxKS[Ft'R_DC;bnuyK<{2Qiz񛉊Q.K=tn>wOԫׄvϤd)eyk9zW@eWǪwS>Gɼ0dMdLfc2[ɘL&5c±86[cql6ֱ86o:6[fxȄ/LbȆ/26E&I"IIRl/$E&IMRdo&)IM)‹RM)BE)¦!S-EȔ"Y[)xߓ62XaJygg=Hn2v]V)V }nͽ='MeqsRqa"W־8D5!=ڎ%^MW??mAu'w 3#%T}K]@fLd5|j2yecqlul6MMƱy8%Hǀu +h&cq IFX:Qus^]UJ:] >HyFEpzBF$_WP,#оhvf1ܵ]zy7[fл:_2EnSZgCNQ} 8e yt9KpT5㙔F+U4u3" -^KD~{ͷy$PBzWyʠ)+B5&WDA(/rEnyf4;W$_f!t<J_y|=e^2Sf{ʴ8e2Lٞ2SS&{ʻ.̻.L.E@,m~ߠ͒E,*/h6pKp} p.!>U}p. >N6@-M8Aĉm,%=1,6,^69KB#9dpn2uF>$4n3uiiޥ.tަNIN^MN^wr&qC6q Kv Nh-t8_í1u9_Ͱ͑rLdb->: 6@>ܷ .>>A)Co_q8ߠkT@;{~h +z`E7R2˵Y,Ae?pswQ>֤ ` {/"Iyy-*H#-ro|$P1ߨo枯>}BRDoBDv-ei,_Ɣ\dy?/U@MR/ʚ ΉL"VT@9?5ȓ8šG/z NA <+#K(|ɻ0:n^yT.A<HDdRΛZ̽RUQpLS&1V&O?d- VmBw)=GZķ>$RSC)3܇Ѩh B"IM\ ϲ-"dT{O?g,"+\]m t 67(,hJ[Ĉ"n k{o˥֧!t$(p,A Ǩ4$MʹPyK^ 9=BFkr $8ufe P[yTf6qAu8ќjץZ2YޒNN59 ,{y<LLaZtEIJí%qm Hyq'Fg2SF/0+/r n8.J'Fǁb*NSJ54A3)@}ᐭ%M]Z>ͽ Ud1cZhUzO}PU"AփB՗H-F[%VwAkA{cys-{U bc('v;HJ#']g2̟6ɴ4yti&ؼrUş_d*IiO')6I~[i)B.EȔ"*E+PTE_xzH%cz/ع?M>A_ġў?ysMHUqCaQ#ՉpxY1-~TS>\ m18@.8''c[8!y&D '!yn-"[6OYz`cGkF1f1n *f%:A]9P?|=\y~`2y>C~bSQcH7/vٵvG]l=W1UXoIEˤڜ׈-3(?hgI 0guaVtL2ɴk2yd&17M&k2fؼd7cqltlzslBث,jq.ʕ)|zNxh7;"SO 2PYP +K\J%_x7gKڙ|kN*R^}p /ګnrᐳfYd ?0t*!]Y7J$9ՔbTk"T~G=zA40r\h 2h΅{.]3$gerD<O@eO>9_"e4/]UqM4|uk$@Fsq{=rzx-P:Vۥެ:X(Jd>5>m2yi±ԱӎMƱiثE?؄/ZU$ENRlԪR>])ExY, N:-8sVi[n+VV _tZ}a6| _2@A|Acm :b hsZA")ć@Y ě3)b&ħ@Al 2@ D7 KCAV̕򚺟ܹ57[Eq/ uٰ|IH{7o5YѴFAn\z߮8y_N5İ":_^"Sp4KL8v!aQv24*>˳rV]/aTu%Kgz+85kC22}ٜ2}{.ӧ }ˋͧ?W=}6/i^OՀ櫼N/týW_NkltB8jl6@AtAp@O,>%N!q- 6YlYlX|JCz YoctJhCB#YB#B#mr8i|JhCB#YB#B#o2u锏͇|l|l6|lccNNO>}+)/2e]^"biOG-b2et^^?]}p՗|dd9l%;l]̧&ӧM^Կ2' O>:Al Ad>:c xc NNO>}+PS-O9i pQz9EjopR|v_5d֙[uE"_bV^Z# 0:Lsх! qer]c'y%R^M]LlL&k2-Lfc2ٚld2M fdƱ86Y6~fؗ4 c/)`z> 9G=F$&ݗ7w,)R};8Ty/;?LsdxWm%V:DWKcgp~,8<&CouyWWJjqVJ,@_ hɢRi{ˇqT 7J;5ح('ˋOTK(EZ//~XKYgOcHC'YMVg/Pc٘dQh۵O&_*EAĵ^t9eՔ$%Nh1% ?|'oQkc-W(h%\D.A>.7=!e-7:zUct,'S8ue'r+t}ʈ-름 )]Tg[*xHioﻌbRlw^=±roOlOYZ \ CgU sɴ0]lL±6MɚƱyoy:6-e2ֱ86m:6[&xȄ_ˈmElbx$).6I-#MRdo&)IL)BRV_lK^"bS-Eؔ"Y[)R Uc?C__Ur/KZa NԏMvl0)99 )G_8U1\HPoQK }e^3'嗢]3)`2}{ޒ֬vDj[w.ׯr׹#0R^9Ȕ!xGSI놝DYp"9?dM"[++)?;%<2 [&p)/ՙdLɻƱyױ86:6ǦcKZ'/K\?%ͻ\2snn#j_'I6r9.ߤP$e$4.DtrF}WB&޿A.oHVֽ }c;)!]rRrqKv p)Y\pNYdY[p"$AY 7!KO_kLFpAyBv? ק0yyop17M&k2cOyS~k+ccul6ky06/lbh3I[2V_|X}-E8խRJMV_& 7w{}m^ow_d-&ƱAı7K i ӊ͙C h{&L ħ@Ad 2@ 6@[ HN5UCVјp^\OGcmVF-}zY5ty>|AߡqE\xEsFĞRvА9eZ\ұ߸"y7Aݥc@ݥcnBKU~w4K4>-Y|"í1.¹u!msUc#K m @8XK'YdXw:lȰx"p. |Hhp!4Ғù]и%Ch%S?f{c!{:h[%]~''o/>}mWиd!oи1rȇ1ܪzm[|y{JfaH}}ʇd- h}@ @c u8!ܷ N ݅8!ܷ ݯ8o7EyCY&rЏfm_آ[r @Yn!]uC.p^-8v˹gS9!dUΕgt(}MsAu>էںk57yO׮3u 0B acwg12%¯蘄6~s]CA/@Ks>UƢ*(JIC ]{ej5sѸu=ZDE`Z٘ ٘Ld^Ld6&5ɴi2lMƱ:6/cqlƱiӱ:SpƫXjL_?R}8rz9iRomHt)󐪃D&<(ٮwY-nR#~fʳ-^M& 3##Ѝ? ?` \p+z^ 6M3*(T\W'Ku!>ذ/e7$CёvCq¨H:jjD˳B֛ȺE8^2crUr7܏{9ϨE׍XS9Kۛ[{qB8Uq@ 7CϙQKy6`65NؤV~\=t ^Zp(8]%(Jrq"+4)p-%iz- Dυ}pCY:B)PPTjU";{\[){;J82jQ,"WűE!ᄏ4" xH%§oȚD UeQ!`9vkڢ7}nJ2adLdLfk2-L&c2ɚd4dMƱ:6/cqlƱyӱ:6ŋ&| __dE6| _-|$ŋ$E&IMRHRd$6IIR$ZТaS-ExQ)EȔ"lK2m"lKD@QAJ)O(TMN5 7n{򄗦n"<šk)ap>Uݜt}W?6Q"ТلS uY3QKD:KV$#~Wu^ZWYaU;Ia=ԋ6rd[K_UvJgW@ZJi*~W_sj2nR~@; Ōd 8Gq/$y&KR7AF#tEIjj2Үpp sɼ0lMdLfc2[ɘ̛&ӗ&86/culZ86&lcccEE&| __lE6| _-|-/$)ZU_6IIRl)¦UeK2/5?_}ѮcӢX9x7|7端D8x@N+,ěӊ?LA9@ + D8u_^4/{DxʔOB59\"xȲNʳf򣤡.z\RϷH_b˓$NB'?G!&Y1Uނh?5Pl|W#x?xsqjp̋SfsdOLٜ2S&sʼyv../A]^K.˴y./X "b?" /j@Y;E}ExEB8? E8-D?-" dĉ=wYC,cVFpZB#or8ŻF^D}GFZ`-˼;E2[|6~L#uZǻ@hp}xԥ)@?.t  g>d\UQg9+^T/2dEE axuM-|-,D7P񬸉肅W.; 5KVMJ3@R[]]W2uR>5 ~T4ԋ(Fh'פY9 8^/hP6Rq "C9e, +S !'{g.~LS&1W&N?dV-@FCp l"2%-&" |+nB|:mE$\[^ҨOEeU2ZטT,2)(PBIK"]f#f .M5>(x'tETK.C^=~{Ϥ\>ASJǏ+\C5v7dh=n76\8-ʡGэMq"Oe<䘵#ɨ&T5޷]lj^!5Mu6>U?ՑQu2 J-95OMOd^rl:ulcqlZ:"|iO/6Wk4I$HR-EO"dJ^"˶B.;|eeoQ/ҜVVHŊ5E>UxٷK &D,~ON/ #jj{SD_7{ p#G|tq .Gt X@ILfr\8Nu{(s}έO O%/m()ZG3LGrD ѡ!qpIK}釂L7IS! pDD8M^B] "64ZW^i E5IAa>:'%MW@wp3 o{5ɼk2d2&]fؼlNcʱw#rᱹ1"BenPSA'T4,4ס&slNr:bBBԲH=%,ddY&F!T//9$|2B ˼)'09?{PeÒk==r"Hzuy9T p\onۼ,FSc1>O,-Cқ w醂.袛;r%gU~&~95?m2yi :ulcqlZ9*|iO/2Wk4Iѧ^}i)Ÿ.EN NtW_|VЧۊME&|?_}md űA촂 Ļ 6@ ;bL D: DDbV86 HZS"EXob@#kȜҶJ0 N̛1ٜ DP>-W#p"H"2b*{ܛ0]Ty12% oa©,_p9) Dc*e D2ex_Cn_\Buӧiuʻ]Oe6wWwyߎ4/">]}%¹]ckm`d.ea. q. vYdXcv9l$Ch2uyˆH}c?]}e;l%3la+a+|j2}.] Dz ǻpup2}vO9i>܇ J2K}c#WI sA<ʺSn u83f^r3I[ϋʛ{;&+EIN&N[*IqdhQaG ,{_#-(86 8V=˷h♗8H+0w~c.wkfϪEʍe2_Fz7F\.)t zw(VU99.^7E&\TdN>o+5x-/8ϵ8e\]A6k$9&3&g2̟6ɴ2yti&شrPP=fo"3_kw"> N4*ۗn)G-hڔ]sJW^KfjŚW:\B{i>}ijT}& ܋ &kѽBCt*/CN{0"Yp{ TElOF5IG6NjғJ rxTDF{hP4}f!rTV P}n=zˀkt wm#&O0jr (EVqW>`X).DO!L nD(Yg'U\D*{cQKmP!80P<|FEl˧ vm `\5{ҋpS1{lo Ԧnb]~4B#1S7RWl_emVF e=}-4,{&iɘLKͧMvl2+^/: _&|*|&)t"I귥"RL)BRdVd<i`Wn)֒paV3{}ɽJQSjM K4!^+4\ȂoޕTVF@ZMN—A n~]]q"m|VhEu2M+x ڶaD].{,Q;H{1RT ZPro7dR/AFB$%9Ëېrj~%)!6qHD>[5BNթn.PTB\?A{d6&lL?5YnWF `&p?)2inlqND\ x$R yj8eicsluluO[cұ?Pu9@y / &Qfͱ/PvHˣ̛9M8[D?#|S"Pbdqm&S53eR=&fq=2z!Dsp)rTUIl&-8a!$R.8ulcsl]9*|_—*I$%NR~՗<-8/i[!n+~y×K]?R} űAA~Z!i8 H: ϤA;R_AA @qlR(E,sGp)\PoE8=e@C*0̍{?\ $)ǵSᵝD֛PaoV/XH\5q+"øv} 7Ws 뵨=)8n`O3~#Gf_x@P^) |H9>9A"OOY|ŝ,Oyݾ,..B[>9@et^,yZ}駫"B8klt " E8AM8Ա'6YX""Op#4.SQ:Bg#4.SWQ;q-|lq|lӧ.co#~:bov yY>}cK>]}UܰU<5Y?m|y..ܧӿ>_S~ùփyBoԩt v -*T6}W'lYn` D" 仸}4Ko٦oY*K GK5m冧ʰ;,oli[0q0M`yqwVfpS>Aɛbr8]uR|;_nx/ehJ3q+w..MJFm{{M;^d0YTܥ* oo #E{GH3}̠c(SܓXo'$ZnIP)bM^}fGXXUuPӱ1WnrWctV;Y:Iۺd."t Y/{OLNz-pfuU&lB-[8 Ǩ[msE`' b$8\s|[31I(_cLY:F(sm$$/dR^K ?Ѧ$$ERÇ0ŲǘT.qH+=21"v.BP6 'ЗD|b_#5SB|ǯi`4WN5zɸY%qn' =QaRL]ř,&7Yɲix98ǖ]Vغ[c˦cw;1˔7a8?sh. )`lӿ4ul~jho@R= q92=ifmة6FG=b׹c<&WȈSa;r[@?ȓW%JGE;Ӗ󜍞cԛ/@sc$9OjRv;(NwcIKF,g:uHzqUW^.(BD7eݐR:Q6߰! ݣk5[@R.(6 Bde?mj, T=S, ^~۟3[Qj:ua:՛, ř,d&3Y7Mc±9zօcslqޱ9n:zVtԅ/KK\Rć/qK7×𵪾|RtU}$%.I_W}RD\)"˗"J/5Y?_}c뢭X9t7|K6端$8t@N+<ӊ?LA9@: H+ H&D-o{FouFЧw H'(Ih&>dj#`K /ry)^zK2c$Fj a~ʑ?~FF9s _j-7Iag>`+F'|՝.NY)?eYSwOY))?euwYwy .@]wY]ͻ,_@@w{]DtY;E^^ h<@vpVcϳV"Wo@"M7A  ia|ݰ ^/GpbkxpS6adjiuD3?^5֑]"'.Fy׏)pWy)N, ř,d],dq&7Yɲix9.[cwlY88V[ccwy倊i3NSR@7~.-y|as̨9uczKE|HJ1a:|j׺tSlx~m2Nb7%Riߺ()dV#?bJ8iAj3`Qw՜vQ.54j7X x`l^-Ϝm>o7&3 +bmҨoG&#t lZJ< DU>B15)LBv'!h.=X:bB[D'"v7dK& %d -.j+|! Or/ OZ-D[@#| _×,—.|_—l/k}')]$)qIJ\R%)LRꓔRDRD|)"RD])"Q_+Ed_Ɣ &|$I:ek9i-ڋoPn_>&Rxͮecw0Нkqά -u:|SҌ$30- gK80(\8 9!ָXqXp!A)xW_mj. )ݏ sq6\ AÜ=.Fs,Fs2ov*~BצV  P[Q^pw&xϽϠ6*jbxn6|䵴2?| k NԻ5s&3YvMVgldq&MV[v[c˦cwlqޱw K3)Njm~~5[ HRLʦ=e~0.ɳE])'*GnlSGl G1T4lS=ބF&nR?_c#N+sU},P(h ~,bqW_6jVuHrd&1tϜrxL8a؋ߚJq#T_I pj(.ܦR7M|xA Q| _KZDl%)YU_>IKRU_WȪ򥈸RDKwME2W_زh+V/ __:'=Acy Hwiştw& ݜIy H$$oԙP"#㉲|oLFɋ45=.3I%:6 \=PB&zw>^aW%<^!Sa?9_c}!AqI5fnWԐK7ʱ);eSVwNY);e#Ш"4ׂݧFY7GZ|Yv_ a럟/H]&Fa@EtnAӧp} Wts;8seP3:W2j[tl a&$?g<5Y>m8eeʱc[cұMfx V1.l>+RMza__MFݓ?L?%se;Zd}hשcr "z #7b/Wi#R 0Sbbl=S6)٪)50HmX쵬(컵b857f05L.V i8_~q: u4nnzw* 7"֬V~krIp*~u8)NkdT`$Pr@:.!NڕAaL& ͏ _WW7I\j<[m:K┨QIS 0XO8"o2^ׂ[Qn?eqL>9r$\I/Yzփ5x}QOY$2pS)\jZ9LPr[EI2Z|fHޝ?s8ת4`<,b/L&˧MVg.M^8>ulcsl]9*|_—,"I$NR꒔,Ԣ|WYdԁLZ+@[ PtU}Yl &~E⑛cc2MpܑL#3!;Ȉ_,.a4&*Ec7~@?Z'Za#W_^nFa0@c$]ġFIPL11I T,?8z|!]唡,$Gb^4fz[`B3|*BvKN9FENQzT^k#s >7]q%'ql7ՙ,&3YdY[v[cSغtU'%#hαfiK'2 B-r66/iV9Hvʭ/M53=/I K[FxV㧴} /X#U(Nnl?W}Q/j˒*rSm527DbzJN;%Y5yNA"z? 3"_o/@ߠAۼϼ'#,ׁC/Зm{?Qc?5Y?m8ee|iغtU4|×ꤞ&)t՗>-Eӥ/i).8yO t[˫/ _ą/&][$p@N+AALJ/q@ }A+ [X1ǹB,9p:I; 5vVi]ssKT;n:#/Rk;WD\m<|F|aEW|Sѐ_TT`c[劜,}) eOqE`O7.?=e);e]&}wY]wiĖOG_"ЧyY?9@V_kEpn{"D8ApA,u,ec'NlıdE E Gh]8Bu/5#4.SWQ?q-|lu|lӧ.˧6{и{Kh鼼mW_ϗ[ᆭ;l7ln,OMO?_A } )˧O})pn}?9ݗN[-뗿#R2|k~Y`@Qf39qBmvX^D晏K7_gt{i79.yYm!xj( U'‰<]}+x`1WPǂ2#;IgT Ҟ:[\ӑU,Erz=h7 FgrniJ"j!)Wv0fBG)7V# >red)LS|BHY(GQmgɺ0YMLVgzř&7Yc±9xօcslq-ޱ9l:zǞw9}{χ|fjQwЩzݶ}ǔ+L"CiPOe$N 8v$&z#B.׊&5G1g0C)v[ˍ/\m|s6_9"uEBVBV)6fa/Dުr )G߀`RۚC&Dgappu0's 3Lw_T)jKz6.no-pͷ&ƷHB ̀:s4n%R}|U\dLq1U0=/Bz;3ó"CVK>)#x`ݔo&q[7R4ڐ 6n!hvE6kz qg) Ҍ>G(yxI1?].K +~gRg&la.G,׋e]! vThNT3#o| _ԇ/uIJIJ]d%)qIJ|Rd3IORJY"J.JuRD})"RDSlic#X/8"j}HvyFls0qR2BERz װS`C?cA9/iJ+/ϡ]qz/ƧLjgR޴TJoe@؉[33ՠ_hخx9**!$*5+acdAOC!ߎL@`M8DI-V1֟ܿ(?Gg@褊v~䳃e*)g1=+HPxtS"dN' \r hS`;B_7Mo8ud&slqαuӱ;:ǖMV~-|En:y5)(" ¯)׻rQ}N&hd8hFkT`wqfEl¥# HYPL6DZjz3y}:ko)1I8N)r*1VӜ4Gb(~? > r̩S $[ ?a΅/j3qԳ.ͣ3Y<^9: 4ۜyߘ,TSk(JoZ+w!1w|X:يX;DKZ付:A`O3YMօLVgzՙ,&7yyα9zǖcslu-ޱ9n:x.|__—>| _ԇU哔$%')uIJ˗"J]U_QW_W}ɮɲ(8W&Kv[mʱ|%;V ]Acy Hwişdw& ٜIy H$$䐹K{кa_p+4oLTFlwun7D8B_$(TN)wx-WWpq>s/` /ϨԎ3g?~_vD\v݅e\AGjCMP;ol Rʁ:UWN^8E4\s5?vⅷj^op|_-lYG[9+#7YjۍC@owFk)^jG/E++e6B(з~B5W_r<%Th۝%oJ e!ᆡE|iRSIm˺b.8ncnxHBl"qT>X_/^;(u]%\} d}j~dq&OC֧-vlu-KΜFع%!F[)R1wk%9mR#>F8').5J$a_wPZE͜uNGgǥ tqd}8&)T|b86~` eߧr9xXDz"[jF!*+Ij kK b7ٖ:+IS q)PsO+D:-T  @xSu:֓T)BꏑaѦ!!V$)f uSeRTɤSPiÞq!U^aQW\  S 9g$1,)n1ZZl} 4&gm ^L#(ruMm>q=_ \*Yp;PXmP'/Q,YXNi Z Z}C++8&S&3Y&/[:|ڱ9,{iO/uKWkiO')qIJVIjURD>]+EdYlA oGKg/9 WZ2 9$*B^RzD81 rC>F7HE ϻpS %<,<|LP!'[&q)츚j^u+UY,'ϐw&dfb%8ߪ/!jfN6uꧣW Y 0-N^Eo05LzqL 򉳃S=sb\2R-3+]&JҲ`dF9R$ $FP,".{S(FRgc:udq&SՙK7[ccsl}[V}G uj%c^dL߈Jᕗa璭H?5bwՄ~yOKt)˫/}Zpʧ _^}ӶB>Vˇ/qKv×%űAcB$ q@u@Idw&%ҿRdAہ RjBmzkH7%w $/'٬k9LGܣvXC7ߦb~HG>=.j:Z4f>|zEBViwp~zzLO1UB_9il/k9p8[ Y5ewis19"t]{S֧>euSu~.˺u7-ؿEO~:/r>>`ܮ5>DpdTXX""Odc.@@;=fé(NqF+ШL]uFM>8>cSO/cӻ|]BvOG}&q;/˧6ow ]}ɧ_>_VqV_7_֧&˧Mޞ/A A}>م}}ӧ>}Os8ᾕ[0 חyy|@W5wb>p %2onR˺k ߤ-w"dk!i?۬L˺PbVN6)jz_R}[12jadu~sl8> eJ|y7>qq:JX&ע+po9y3[\Di|%I  ׌͂ruM,ާ2jA& avkуdr7ua8՛ ř,d&3Y6Mo:ǖcsl- V[csltlƇOl& ĉo7[)/‚A1k+Jb bVψ{$sy53:1ɽ>[H(d74&K-­sx+8GDd&{dKOaEVx߄XPFc~Uх5|[FרpLd$B)͜]6Y#k<ӔIhI<#[pȒCS`^=ZuԹ>SrRXo4fnx_'D@'hG5r.ڥU-zP"GiT}(X8,*< P ҄%bev{`$j% x[hH_x?hS?^nZ+og8vWQfرTbĉ|j)(C7FUiojfKg e;N$ǪvʸyՆVzo˔ M&H$YAe|Sz+TUŮXlRhF . 8ua8՛ ՙ,d&3Y6Mc±9zօcslq-ޱ9n:xdԅ/KK]ć/uK6×| _.I"IKRⓔ,$.IOR⒔l&)\)"RD\)"E)QW/Eԕ"Y/EP#vP@>S҆#075s RZ>?omFku qB0i 31c#Wl<E@3J{SwؑⅦ ?dj(W#fÆt@^@\!/~ri2O:oUƗB#hoJn"8ypv޽Ta:6u- yʃkgnL!QY/N2 ))!J.鸥ХʶoQjq*q3zPKRA ,q*M9pځh^Nzd ՙ,&3Y7MVo8udbslqαeӱ;8ǖMD(۳G9Uގr~pHpw<:`]^Էpmp[݊d:{QFu ah=|⡵nwG%io‡b*x%NU#dKw3k7%]̃6@l=cr«U ~~N `XeojW o 9Y*E#\joG0"pib$գ&骅8_L]9 6ͅd);[7bQ^4ĄC5x kmkoɺ0YMօLVgzՙ&7Yc±9zǖcslq-ޱ9l:~qltą/KK]ԇ/qK7×𵪾|RdU}$%.I_W}RD\)"˗"J/5Y?_}ɮc뢭X9t7|K6o~. ı<$ A;@nΤ<R Atk'k00T{f)N{8s\sxn7* +s c؎hgҸ+9U)p"3jOfġ'Ep4&r"/~xfntGQ)՝S);eu,՝l~9eweq. Ueټ./X "b?".j@Y;E"]S5 ]Ap hA]'N&ĉ=FwY#,cVFpzBlr8<ܧO>t)@?.t  _k Z w:5MCkL"ӜB:7^υ4w#O./&SKB>*g{X2O4M is u~wRBq,˷PY"Sn4;ejPbh s:ˏޔ3Tb_iCiՙ?a[:~ڱ9Z+s 4:bGAS!5"wF(ģ̷ө ҺgfS2PHBqo$BmZjN}3+{HSAhT< ;윌^NaAy,{,\LΑkc6N=NG4ѹ5ƚʃ 駃ʠ wS:d(u M(D7pQBuSs{ӊqp{2cPM*[`5FHhDJ:~dyj~dq&OCǖvlq-K^/}K]eZ$)yIJ]eZ"O"JY"5J,o?ύ!?GL, X6sDdfP;kNGዿ R9`Xz quCvtϫGI+S/z}EjupOaG6.k'S97 JHwJ Fa!QrM2Z*wr}iCq-6kS)+BTX H2ԁW|I*.E7p444KW?|9vHCCP¶vc"/&-irrũj?☈(0XWj;UǛ1[.loؔB8d@} Nެ\9LӉB fW'Rfoi"HROqsvSƹP"agMǒ'bqrQP`f1V>n)$<;;[qp= .'_? 4~Hdyj|dq&cSO;8֥c/—< _%.|*|]pKW_>| _ԅ/.-][ ٝVLJ$3)u@u@: H$+ H$qR~pCJh'zQ,+yy[H-폹^FSpi-߫<2+\\`z̻Yc)Wz1uq\&7|ˍm3](o"߀l!=y.#A趃d;Sid_1ި JbD2mcX<$II\O)S֧>eu,Su~.˺˛vOG_"yY>9@V_kEpn{"E8ApA,u,ec NlԱdE E Gh]:BuFUGh]:BvB.[[w)O]Om>.q;b˧#>kиyyݷ;ۮ//aa[ [/S&oϗw u@A >up}>>yzSp>pʧ9pߪBJ@y7|e|?ۺ" { j~D=H;rs'**s^9s`ewo _1FtT©u~^Pm7dL?r(UYt)fzxDNя 41K  |9jAɎWgt2H7SWmyo؉)q9, n0.8D78µ;2Pޱ 3pqddcb0].Ḱ{UhdY,d&du&3YLMαe[c±9:[7[86N5`ΊG}I9~}/MԩW=šzS;jS#ied&夆d*Rla6_G ƵQ9 $u&æh߾b@QT 8ҧtZUXxx.EpK:匟hɟy$=(G#S#'4f)Q~=G2FAiZEŝғ'p_0U܅oO8J~=#! NMjDvnmFS~M'gR-uۄ뇉c G4e91%v&2!>aEާ5]$#LV Ţ<|9 s)6B30'@-ۛBz>EJ<ʩM1?kʧ~A@0-Va4Fiͨ=A(7MZ΢ oOYe FezBn2uqU>c[vi8me,"'>FYD7>%4"/ݷ/Nj ˺;leeaj Ow &>y ܧ,NyyOv{]p8WSW^=s"L_|NᖅzS8 u"jx[ˀw`ٗy q;֙d4 f þ(Q]דDXulcslY:v`Q:hu(QJ}l *\\^iH:8|uL\\&rl\[L2S]I q7eϧjpWq*S8O྆Ђc4p2WdQt2$;k#a1U;2awvr\)?ͬJ5d$M N w y29CaJBVpPa#uTFlp\o .:A]qx굽-g2RuK32^0 $[紥T2OIS ۟:-t퀺~!!'u [Gmfh6qk܂PSJŸN;8i*BRfR sΗz넛m*{[Ӳ)7<0&4NɊ8 Tl,Tsi |04%M_WT>%`+d@GKvSEς?((G %׹~mqlpF8*3Y6Y&бc˧[cұK/ttVIJ&)tRtV>-EӥRDHCK&q[7 >s؛WS6JriJ^F l)sURmrE8A9{̻zqjF?&92ɥ.XWhGOF<{ ƶoxM{隳cjkQppqLX|Ly55 $LLY~"?.qsۼ%OAjLawDTP`옝-!;$c1MR$˫/}ZK_^}ӂS?]pKW_>| _ԅ/][$ ٝVLJ$3)q@u@8 H+ HqL4 xZaX `nSrYc7jkl0Ns؜I.|i5RwoIuob)QpnnqNT#~ܮWBS+]#uDwOzb8<ک H@/^))X۸ιL^s;hʩ"D)SOS)owY>}e]M~;b˧#/gӼ˿EO/t"D8klt " E8AM8ԱO'XX""Np#4.SQ:Bg#4.SWQ~;q-|lu|lӧ.6{и{Ih鼼mW_ϗUݰUv↭͗i˻@8 Hw u@p8Ow>upup>=e)rOr8m[/vj  8q<9?}vٔ !N 5&ʷqvȢk|kj$Y4 Z(cM5(G4Bzm.?*m_GW(ʹ@$ulOT^[g_B%\Qnn&9[(Ip8ܬ.bX5{S]Zy0&S&3Y&/[:|ڱ9YuL oF3 x [/_3" 䰉h9bV*YazRx{q?"6`Amǘh"#[;]]@EI qph66Vo:Kp^kJѦc#%n*0j ]G93ߛ>yaeLvJguRL 1tKfCd%3abcȌ6T,mj#739?xd;:a˩ܳkƯ| #^:HL5i|Rw贎2i\8_CsɡWJQW4[V _4|×%JR4Iɧ$$(Ei)".Eԕ",E?9M1jQ|QשVv4A孜k,piT1Dcz` /Rʧu,j GSF)<|}Q()4615yݹ^+xc Sdhd4;\ {詈$ֶ@7 /xa?d& [Bi9 4^`[ &6 ]06s+ܓ`qsoGj#a}ÃAr۠Oȁxߨg0LG< [fKr+4, 3zc/n8edu&Mgldu-αeױ9l:xVز|8D3{ ;fVfLR^T˱cC Rtj z<x$~kD-l( =|H:`56P|} ILmFEcjef^ 1D汩.'mWܮʩYf)=~h'1qy8hu̗ځ98^{1;):L0uZ s|UY\,^Z.g"i(^Y܀0I$kDx= L"Vf3kdLdL+֧-vlq+^/}K\UZ%)}IJ\eZ"O"JY"SseׂsVӶB>Vk[—>a>| _Kr@>!R&_plS HA q@lN+A y C H<$͙z H$O }A q@8 H=Dod-}5w14P*n(2 u1aΗko =AaHcwCjxŊ|HIJaR _0LR]"m_riV$xk㍤SS|7Rٌ߇SAZO2bVs:pjH _?!E)M>=e);eY.ӻ,+P]^Dly{؋,O~:/4_ҧ՗|ZT_[{pw o } C H=$MS}"Ч }HP""M~!N8>Czz:l )Qu)((O (((L]Bht|lyև|l|lu|lccNY~Wկ.˧,c(bӈ-+B׈4/Ш!4՗~ZW}}3le}8_?lU7la|o#iW#&; H}d/@)ܧ>p8O7>p)˧Oy~9Sr8tùr j|ϲ]|Ǔk?K *7k٥/ƒYG4,FJ,h{} JtmbM4#Q&Ox02VQpEvIo\(%4re`GNDhP7Xz Q~!SW~m:%Dy++yOʦi>~j1g[rC"OEAz;8z+P^=BA8O6V8ua8՛ ՙ,d&3Y7MVo:ǖcsl- [csltlnwR07A$l;$BrR!?&wF*dG}o?|lj2 g~Ęެ]Z%FsUlITa84gR#NGeŽ,8Kko$gכWg/?zRhɹ=aSi;^miG^1Ni+8#e,c6GOG+L`/RV=%XSO$G;48 &`sC&A;5oZt@!u\WĎoҩ.SH7J bہ^pFN~OD+Nަj-8uwR/RhJ=M-cCN 6Y3F7!vj:*bFSˠ)9/SI>_ pۗ# (/ bTົU\6bPk`σ36U9pK"PLljںyԓxmjn,Lgzua:ř,du&˦dزplqޱu[cwlq-ޱŅ/Y/uK}ERą/K\%_—KRHR꒔$%$%.IKRꓔ$IJ$)WW/EdQ+Eԕ"Kul"K6ǀ#P︺՟0dgZʹ=*ra0v4urڷ]`1ˊ%c5ű&R̆ -T3 ijW!|E {;7Yph˾K2h9u"w[-ͫrgg*eکzltr3 i%ڐ+2t+REB3N/_L3Q޺7CXl|Lg,dyj:ue8:8֧-α'{+/#\16Z?eKչ<ά0lI:VDToS ܼ*D*R_+1cSG) ͗kiB?9vBsA՗f/_S/sn2B <_?)W4ԲGUj++!OSpm}q:lꕧO_0q3*XKd LVoO`_ߘ,ؗ3Y7MVov[c/e[V|غű7QuK}Z".| __Qt3|}҇W%)LRⓔRDV_R_+Ed"[&//yX}m*8;c//}X}m;cKV_K\Uڎ+ HA88 HW8pAڞVd5؝I- }mϤAI? C q@8 H_a+7#sa9l?8"'akK#;s.m qF$y+n½-S/⊸SVK;eu,՝nSueuey WPw_!`_E>cػԒ-۴)nh|l}&'WrfmB*b?&4.}ݷMh\/S^͗|y{ jVqVa^)/H}eבn)!ܷ t?jdm"+O}۠ꔿӇp6tp~b}-u?m*;,)Q1,JaSj~ uPN$t\=&%,bxWo f8Dlw%WiFNwDFurK sgP(f'I{ ̓DhZ+J4Z d96*|r^ "&jtw5Tʣ7,Sx=@CChhc3Hڐ'bWG)x!hƔ1D_&\KmE?4h8 vtk!I$ lR=]+EtYF Aӝc\RDJbjN)*`4aBxW 3oqْe""S-Lq ĸt+eڛ0"pS) &<혬G3|!vq⨔RJ7ټ,WsKN yJ7dg/8ģQZ ڿr?h#!4˨XKD[tY]7k|*~gb\DK %D<*R}Jp)L]/əӄmi~#x%g:›=U9c5 -Pl)eZX&3YvMVgndq&˦d[v[ccwlq--_i!%/#(d g y RfK@޳S9`qܟBUHRҨ{Ɣ+d]ܼF.\| S=˩$bY}ȊbW>"28J"7ZfyTլ|:sI/TGL6Kp||@+&0"(? -ٸjF9faJcDS |#=҂-۽{422LlÀq$M#ȩyB[p\#f˔NTh`h>ҖJ<)an2Y,6Yɲ2yԱӎαe؋%O×~:| _ _$O|:IKRJRRD"RD\)RdUpӂS?]pLRp yVۊci+ą/}Z}K|Rt3|_ y C H=$M[=$@>A ٜVȗi) @8 H7gR q@<!$A T52*ⷝ)E1wpߪ/Czx:lij)QeéШШO ШШ(L]Bht|l}ǖ|l|lq|lccNY~Wկ.˧򊜬c0bӈ-+B׈4/˧%//yZ}駫K%n*Op,~*n*V2l]OMO5AӇpz H$@z H'O>y} VOOY>}+P)/8ép/Υ[ k_7~C?~&F.(3d}T!I>y:B&b{5|Ѡ4jgΨܢֈq,ҹ.kD.z8cN|S {b*x4,u"s)8l'_݆W1>lQmϝՄdG:F(s(ߒnrG57 Vd[HҠZW3Y&3Yɲ0YLo:edbsl]88Vزplu-α;:ǖMV{"B2著=#[oI# Cr@|<6v,맔 dhbg8(43Ep+J?[%?TomQRT`cq&g njˎooB(`Kf,8aaζnm]kY#9 o Q852(i+ЈFI5'9']|DI3#jȍ~sh^ޥ(%HVtЍ1Q\v74v&nN },c^~nu {=f]9v{{ӿm+p.>E۫`(zWPz ^T7` qϘCCcGZ*̷PO Pdpc 4Gvԇ} D3]*FgRB |rh6Ý@]1q8G!&=H8ffCNk7oLLVo,Lg:śd4Y[α;.[cslαeӱ;%%.|__—%>| _ć/qIJIJ\t%)uIJ|t3IORJY"J.JuRD})"RD|)rA#KNf~f%[P)j[ZO=]0Pݪ5 !mZ% ܦa(w[45\nx! 7#ZqԀ|'D:L/P;Ix>R[9ML>O^Ģ̆tkt3>|\{bNݽllBѫx}codSѮ"+yż%NSCW2nb|??,TlÙfޑ)g^%;$^ ҾL]ՙOMg[αeױ9i󸫱31z5S5YzⰕ֑o /Tu&dq&7Y&3YMgndq- [-α9zزű]Eć/]/qK]ą/ _×$%O/}X}OR⒔n&)IJ\)"O/}X}/Eĕ"Y/EvM^V_6yUp~-^V_vU[ձ7ײ҇vRdvq%$m[K{sZ!=POL+fRK HA3)u@.gRҧ@<A q@8 H$ ^$˱CD7ۖ0bҍQd{+gL}޴{B:ys'M$P]l\6E6&< Eo:.B*7MUt|=~+c\~TvМmweqNY)ŝSNY7OY&+..+.SPwuEY*b74K>dlhVy{1ܒEYcUe p.!yl#1¹!ptpn yHfcȯf,1""%`ù$4CB6SQV]Ш L]qFY2uغcV|lyަN+mucC>69yu;|-B%y_ۄU~Lh\!oи򝼼5[Η|y{ v>/o[ [e9l/p=R_e ->}mA ]Ap8OVp.!ܷ N />ymC+螗Zkg;ߘ7WQabQ<6T#>,߯}ShڢZ\ro7;W,QP@DPϥdZ0AWisLP08F;/o)s]prIc)ŖM|ZZk >) ?: RP̫5ʂ˥pMȯ67 QH;?FK^u\U":wor)b$}1Gģ|٤s:wn͹{y)rX1!AױN],OMO,d]rl}iVزrS[U<6"ә,nݬH07-Pf. pΨE/K)obI9һL ^3"QK*}yD?ys(w;l@amg",G*7 ҭGoMm9o(̣sJG FK_{[P z1xآ_ /zL{>nB- 7ʄ a\gp%3)N& 1œQ Z4)t׍ѼRƆJD}L(Ks:L :}iBxY:"(-/+(1O^_Zs6Ud\`] 4A,$i8O`vE㝳Tk1}&1e &E_"6s~Ml.6Ж GĂ  pc^0 N(us125~ϙ,OMO,d]plyiزtEҧK?ą/]UҧIJ?%)]%U)OKt)"U)r7A 2eRnE!tfSJn!H$o).~i)$ z;7ѥs'*u^󐆅(F Ja͊uv'[;Ci|}鷤yޠ{4=+bs[jbknH*ݸUak=$g1%%D mc$gꌪ+H}L9l {zqX jvL[8qn,{Ma%3.VFhD?<1s&S&3Y&/[:~ڱ9c0|_—."I$NR꒔,Ԣ~WYO+Bb_ i%/K\ _A@x H8~O }A9/ S HA q@nΤ;3o } C H=Ag36{ˌN1KLy8E":/Vw ~qI.ܺq@<ڰ|fo"\F{3kRLJd>7`#9D8Ms&/U{)F'_)GZ$Uکk9iz^Hm0(*gs>{nWS֧>eu,S^e}zwy~.(bӈ+^0/Ӽ,˫͗i%Vc85>5 Rc)$ @: H6N9<%NCz8nijı)=FcijԱdE E (O ((ШNtF}JhFFqFdcS>}W/wyiOGk^eyyyEhW՗>j R7lէey8_V?lU7laad}j|H y CO<$M HAp>}>ل}S֧>WN}Os8W-?pe^9 >>2o\|/ (_^ՉY~j0/O)o|L/̅͸Z}Q2cء_EQsfkA)}Rh"~xBQD)n8wx5ʡp|?ܮ\zBٝLmw432we,w Ɖ;\Z {-Of,8xĜ'kMMHxR{{~ oo|c,Lgzua:ՙ,dq&Mزplu-ޱe[cwlq--ޱʹ9z~t % 1359ڜf]jկYE/oz եߴK:G[ǔRa=| Tv^)3zG8r }6dfW7 pJxm= ro3SC7ReJ7(GC%Ѵ._9 ˤ)`ҳCAy *noܲÙ8,9ᄏPFG>e ~Β:}s1~3ZR`@1'~*z !Ψn3`%mx/f H\mAѳ$Hpl(ky0DtI;EoKDb#d L<;6h Ί*1Y&3Yɲ0YLo8ud&sl]88زplq-α;8M87KK\dԅ/uK}t3|_꒔.$>I"IKR꒔$.If$oJY"J,JuRD|)RDSqrqAܱUxa5X'6jnC,X`jR-pp^dQ_lo7DŸjS6Igz=aMܷo&du&7Y&3YMVgn,3ݱu[c±98[6[c __—%.| _×%K}Ri%/IJ\$%_+Ei/񥈺RD6KRlambc//yX}m;ػkY}k;| _ _8҇@6%9XAڞVd5؝I- }mϤAI)$ @: HRx?m; fW.CH/l7 >H^|XBNm>nKKjEye" P  f .?_PC*.WrIIw4HQ\$? FuE~@wʲ8eu,uqNY)?eu,_NyweUw)u%@UD͒E YU^1ܒE YcUe p.!}l#1¹!ptpn yHfcf,1"P"`ù$4CB6SQù]!q(K<[[W|]꒏-۴)EN^!{_ɛ%K иdCv6q;yyk /nU}}m[ey8_jغ;R_Η|y{2H}Z}A>qp]Pw Co]Pw_}ۆW/=SBp_witj 2/JZH)m2ڸ;(M(=25v{K‚c ѯQC[IXT&{=7[QZTIɪ1*,.yL)d^s}ȅ銜Ts,x FH`z HC \1o9G{\!mvX.ݹJA^ 7nMw8 <%#gs~Tuqn/G+qև9vSO %#s&S&3YV&[:~ڱ9.ssGSb7x/S|p9‘cX_8-2v~O+N1Ҭ+*f$C8KGp&3ҰC j-cAdz^W&" ' _56rJ>gnsZo|փVN)= NisIXAp q{Stl-\ #N?zzG~iY]Agk}Pq3ZqxB~Hݍ0d8*R5wP;ɼ=3tj ?pVd&Ij"JM#k^k(KRXQ2 gt :dDR>F!ԻP G/MVox`*wf0A,A$p;զ. aHe;jx 3W1p~ \CY ^zdM&_қg@2GT C()zh p1 V ,F88=+8K9l`h6 dL0-O[?[W _4|ɧ×%JR4I駓$$(Ei)".Eĕ"*EN܃ȳ XuZLqZ8w%|Gʯw.JdJ O'/-sxhpPO!p ZrW E 6+n op z 5#VJ~wNҨަ"BjF(zM)07^z lC-j?;#v,0ez)Ggp 0*T3\Њv52GɿfE8h{t3Yɺk8ed&3Y6Mo:Vز[7[csltlS6l%O k3ujRIڴ7!w39V缘ۭ(o%0׹_. S%m8Fl# x`cs; I$0FWk}V?g>5Y>m:'LcSǖO;:֕c—< _%.|*|>MR$%.I*IJyZKu,KEO Nt2kh+i[n+Vi/K]%_/S HA u@lv@<!B=$@>A ٜIwfRA@x HRA'kDD.x_%خu8:7uتx_49dXp๽G~jGԷ\#왒+Ǩgc&@cQ!Q=QQ79Ш ԕ/F֧|lyVVǖM>z>)˧OyE[rʫ,O~._"bӈ+B~üO|:/_ҧ՗~Z;cot,ꇭ↭9l?l]OMO1Y$O>}A }ӇpxO'pzouӧu)O9i DuN(+X #qXm4+~ d˼41ePטb!뇇 ;HXa%1גZ*3T833H_nEIvz1ja^nTI+ v <*!PZ 9nr}M@QۅbwQŹ.T}#IDp>vr+Rw Qb.Řۊȍн.LlnO.<:96(8ߔ aΨ36Bk<_K*7ɉ} qb8A]t0'tF'&2N',.MűL)^M@Q_;M, r6bV,QWLfJ݆^8|dy)(o&]؏|+|f6d\~f'@џjCJtLipS$>ȼzL}1mbw;VtԗNxl=o^-LMoȁF*Mi|#FeD_S?PֺpFGÍ[jt0ėZڨrt(~ue{Kֆz0[gh@+ܖ7^o\,OMOdYplyiزtEҧK>ą/YUIJ?%)Y%U)"OKt)"e)Kjn7q-'lq11w yINwS#Chl\-OiRVufҰLB~AfTi21r'7 J䊎?k<ڨ4SO4r^mD(wm9"HX%! SidB MJ:m|ΤۤGZ.!W^ɳ՘gK:',.F{$ŮS&{f" OG0|N){ nBpEyAz%nXL]ՙOMgLulu-αcsl]:v!n5-C1lfTH iLT_3 GpE8rxſ9OMюs"j(~y%OKt)˫/yZp _^}ӶB>Vˇ/qKv×𥿽űAcB q@u@Idw&%RdAہm.󘯇 Bhv2&BmR..8q ~{W}!Vr:r2kLWIs+Dd@"G,y) h{| J$crɾڴ~)$H}NYV ne]Vwu nB[?9@et^,}Z}ɧ"B8kltl" E8AM8Ա'6YX"P"Np#4.SQ:Bg#4.SWQ?q--|lu|lӧ.˧6{и{Ih鼼mW_ϗUܰUwꆭ͗i˻@8 Hv u@p8Ov>upup<=e)rOr8}o(rw=_g|k3 LyaRS7/z]D,:u M:ȫCDe#_8HB]Gy_7YJK7F?jX܌ʮwo6+/>斿)Z1<7m`cC%aw{o:)†:OQLb\/w|<_>^Uy 3浅ymj\tX3XW[$h]CܨdY,d&dq&3YLMś,αu[c±98[7[c gB+04𹯞b4Ngỏ{ޚMzdDv?~ >Li4:ưgl"DG.ꢬڐ9 aN_L a6x/N#)8[DŽpop|HSAɞ1hݝ8W@x.tvq9IxPޡގ˫EVls\D[}_mD*o k#d8a- EN R§q>א!QCbb_(L7!Pej5AjqgZDH'w~ [9=`RP"6-n,2,8Z nxWQϴ&Q!A=6d]d&dq&3YLMαu[c±98V[6[c __—%.| _×K/d%)IJIJ]')qIJ6|IRE)Q_ȢW+Eė"J,Eԗ"rްu2 f%$"EixNלTk}* -Ɗ{.~$_l$xPVM@ކ#`s1)npDӸ+潞T1LI2(Tkw+d !CAJFǣ9㰠MoyhL*BE8#'F#"#X> gn"&5yVv$d:se Nx5J׌*9'‰^g~pU9G5F=#!o&3YwMgl,du&qlu-αuӱ;8M/6uCh~F0 Btn:9MeJek+HGejmầA1x;UtԐ#mox*ev(,01]p"Z#:N|v i3Rb2c#^oTVz𔛩2i9޽c伌oXm̆'#߅B&D8IjP 8OU6,H@f˗Pñlp 3ޣ]oS u{E'p`{?A*Ț"j-}ha]Bon󑐏ymɲ0YMօLVgzՙ,&7Yc±9xօcslu-ޱ9l:zVdą/KK]ԇ/qK6×𵪾|dU}$%.I_W}RD\)˗"J/5Y?_}c뢭X9t7|K6o@MA;@lN+<3)LA q@ u@: H~;tJsDȄ s8,~J-$f/zEyZPG=u8.g<9%9 '. (X}\6\g8C|saXr?rE8Vȴ+Cɨo)oyNY,ş,NY);ee՟ueqW,.]tE^AE]Հϳdw k5<`.){p`. D8?" d|8.ctEyz̊ШNOhM'4.SuyB㲂}ǖ9>Veq+c.9YwyEN |Kw +Bo}-}KhE^^o1_1,ϗew˺9leHܧ@dp<]PWu<'н,8+pMjXێpog,EcN//56?w7ye!>kM@nc܆ΨJ5R*THyʨ܂NrY2^DŽYP(K&MNEސ#_%q1uJcdpcL8.Yq3rό%x5, U[>k_XWklma}p XkpEDZlp^(2'MօLVo,LVg8ś,d4Y[α;,[csl-αuӱcֶNj$^[&B׋g4Zّ=C6nK:| ~%~Aݪ-ށ; i %!aHS܇H3LnW3I{ r 1yl,;^S-adfos<ҠuJwS NVۧHeQkks G؟'0~ n4#D8f@|Ѡr5:[=ÑCo$} Dbk4: Z8L)O0nH l&+X cCuR66~Lgzua:ř,dq&˦dزpluޱu[cwlq-ޱŅ/Y/uK}ERą/K\_—KRHR꒔$$%.IKRⓔ$%IJ|WȢW/EtQ+Eĕ"Kqn"Rz)K=FUH?W+QW=;z7Hq!B vψ4ܳrKpq!LL:Q:n)4pP~6ꅥuAvq$Z2z5edC=c`h`GM?Xhs{SßL7$@ ''Ԛ% 6"<*4~EPNNp[ZE1~ h4l ;u7OkpBS7hQVs!܀ur(叧&3Y6Mo:udbsluαeӱ;:M/M,60H/S?eD8pr~B/Ţ P4xivK}vH[+c._m}6'^4_#ijS7Ix(ZBvxO-OʻcW*vk*2SWrnHBGaqBNWԻלtu~䃳c^N;9r &֚5"O8J6w* Cۨj5:! i(M'\+<^E@q]n=)8AK{<|"| _—.|f/kQ}$%.IɪIJ]򥈺RDV՗/Eĕ"U_k, Ε]E[r?_}n՗lP}- ű=8dwZ ݜVy HwgR͙ԟA YA q@v /GExN{+/$ 'Xt)%'.MgQ|xkn1p0۰W_S4+8[f }>\O)81ykrԙ+ b;o@wʺ8equqNY)?eqe]%ueqwY7|.Eн," ,"/4E c8YT_1o`, E8eQcC+ HwN&[k"uuq+P} ù?-s-vA[S$HcWoP.ζrGw)#B\Y?}LNb#uou۩!_^]T,p_gP*މxBpMmT5S/LW:ͻ)l=2pO+KJx~|pPPֹyUQ#։^y93Cym&gP֙7X cS9o?Jr*q>&H9;eV{B`lˆm.x|F/cOodL֕+֧-vluKǦ> kMb~lƢ [<:E'DR{6af橣تZh^ӋvˊLÿ"8l򦂎}I@Qsq0At$#kK P~/wXT'0:;:{~EK}J7~AT6""%t_R{p\yET?JWexqPYXȔ|T-nuhNRm(HR t#ֈ&Q*IlFhhFRF3eӹMz3 !T [fO9@q:HV)S~d<5Y?m8ueʱc˧[cʱWK/tdVIJ&)tRtV<-EӥRDWw4\/SXbo<eԔ( h?{6RKխ|f[zj2a׹nMϱ!.B)[1d\fzPYoݪdkW¨s"l! lOa;ƈfWS1r%Ms='ګb⨔DIC)&#'*/L\'t&_zN=Û0:a} >YmZq0Äni>px# _%.|*|>MR$˫/yZȧK_^}ӂS>]pKW_>| _ą/&-][ ٝVLJ3)q@u@: H+ H1gPz=Sb. 8\,/)W0LD~BkS/rENKEH27ftX|sf| js2Jn!WnSUS>eq,Su|.˺˛vOG_"ЧyY>9@V_kEpn{"E8ApA,q,eco'NԱtE E TGh]:BuFUGh]8BvB.[[v)˧O]Om>.q;b#6kиyyݷ9ۮ//aa[ [寛/S&oϗw q@A >qp}>>}zSp>p9p_'hq?/xx N".d¿;ҝc j?MHsM6!YqHP3.#cW3:l"8Rh4 hs6@d_M#TDzh[r>].`QT<*q433FfW;|O74NSL LsHJl9-r351KD6"B1ԷHP1R6)(4:_.E9iR`yMEeȇ{ȁE4T1 рY[1`~yѰ.HYj]zoKi`2vm@L=0 ݪ5t*FዓthVjs>TSa2HyvC\0wr|31qmp/؝/Ed[1F3"C~mp(F);.{OO8)gq(߾@FdMr\.(6n;+cBO=2|n0W_即9j%+ax6>:&:eyzSwʲ}cK?]}UݰU>5Y>m|yR.$ҿS.ܧӧ>_S|ù>dS~e*wzԈZy]k3o VmQXOWk)guEL:T8fM, 8eq^o,ԓCl t9%B5ޛy! 3Kטp>I@6RO$L^m?)9.D5չo͔M G l|U`֋ :m P$4 xw;tB=ǔObKJRH5i b/ekM۾ mr-q< =i-D*B_. }Lm{0^4%&SO'UQEj)\DRL}[ɯx.fC8 n8^r 4«h$x=|!)ߏ_ W 1Q}eOLr)5Vz\ڦt?n琉Rm@CT9Rlsv/cUQ$ ?]:sx^j~8|-/F1aJ7Op a*##2e57!C0&mivyM`x/0+9)&BATO+eho5ᑄގc/eߏ˰:Sd-S,ܷR'Mp(A#DNX5 n\9"o,* ^s,G1>f 7>#Nryюx1#.ziΗ# L&Mg?rl}iV%O×~:| _ _$%O|:IKRLRRD"RD])"RdUpӂS?]pLRp.!m~X9׶bc/}X}_—l/ _@<A ı JR@<A ٜVȗi)$ @: H6gRe& y C H=$RA"-!6\fPk~{jAEln7Z>>C0nͷ nR7:9(Ukšm79.2Ob+5.-% /Pr4|]bgٲ^Ob.;>NW11"Y{"A3")SOS)>黼uEĖ[?Wľet^^ heOW_1l{p~A҇@z H~@'!qB<@@7Y8X1YX"/,GhF}HhOhGhM~p:B>%4CBzB8Bl2u;o-زV^<=e)h_Nyu]O9]^Ely{EhWyYet^^E%O/t} [|YΗ[ [us*~غ2Y6y5Rb: H}t/@)ܧ>p:O6>p)Oy~9Sr8t7_?|'Po ɕ>;9S(_pz6*yŸmR~aԃ(5P=iJ٩U%%թ⑑zӑEb*nb?E4 >E Z5谑:*ma>޶ltxa?5!;ߙN]SH }rgg1fQqw'*%F6*>Lz9eB,t\tjt}īy]wea8ś ՙd&3Y7Mc±9xօcslu-ޱ9n:x>q(.}V}* 9V|km@ҙ%]\9RXZ/#MCu)'Ih6孜2B:&&S:JwAJu@M&55^IjlR N7 d>D(cjᰙPtM]/"b!jd5j7kHM׿0Kua:՛ ř,d&3Y6M/&;ǖcsl- V[csltl.|"| _×.—%.|_—l/\E')]$)uIJ\R%)LR%IRDRD|)"RD\)_+Ed_Dk椋D[PB2إr:et/Ӱ$87Ge|B'ic6CioAIwZ@^a_-)M!MB_)|xnJFh݇fmH (EWD3OcV"l`q[7rST)Sy]]ž-&WN)ۖubpsoupٲn]Ҹ">e/1sbe\Jx 8ͯAgZ4Sq{R| Hcvp:ia l|"| _—.|fR%)yZ}K}d3IORJ}Z}K|)"RD})k҇׶ɫɛaثcoe.|*|K HA88 HV8b C h{Zմbw&!=r& y C H<$RA +L>muZu2@( n#kUG!Pip˘:sNI ^[?`,{x G86%DmGes597 ˌӫԎVg>?pEes8>_*wrsEĝ,NY)?e]SwOY))Sueue} WPw_!`_Ef"Ї,*/,}"í/c]s C`\؏%$mS$KsE$NC6@@~5`Im:X%Q9p2uFyHhf#4ꊩ{cC>6muu_i%[ɫ=rq҇mB*b?&4.}ݷMh\/1rcUu 9l]Η|y{تnتaH}9_d|y Z}A>qp]Pw Co]Pw_}ۆWA\Gzվ,-8eSy[xhS)jSx)JP˼fWF4l#WVtz=BB uF(fwƹF^b7*G+[C+s sT帣J֮z-E͍򫾽̋I jbeJ=[9L1XToKwTM3+`,z`O>NSTym~Qsi1J}=p+]D*lp*sẻ+EA&O S̳>) ܷ/?%J>3eI-MMEFD6_^yb-.ԷAK >x!UJVc.p۴TDU?sܭ5]^o&st 7ʻfwj69JA$ U 58!neg "! c/z;| _< _$ŻINRlϒԬR.EȔ"<+ELԎxNcQ _bKC[9zx(2Q!A#ZQΦ({*J$E]1ɼj2id&1McWmdccul2Im wasoIRY(  c #23XwƊz~^ļ4/@ wO7:rN@ RM- XtV=J7M9i8I5{|IDb:|ŵ/ӊ,ĭ8'Pi֥h3p>. QppoTv|cMu3cdNxpPC [)%BQ@4Iu7SQH!4|5Ae$Cid~d6&ccێƱiسE_l,In$E$5)EhK6JYɻ']pL(8n[o3l+fjlbh1|rZx" x& MkU 7 @ 10@A A8xM -"Ad ]*}Ut麣+ޅY>4{K/tM2mDLQ&yQ^9C;y^h'6{򸡌ޯ6}܃x'ORsB:b^Twv5|5v6œ 骻.neA^9!nq~ʴ{)9e.] ˳Mߎ3#bOݼLoـ#/O߮fc8ZnMo36@A ApiXKMY-8aXKMz [-cKhMB#YB#B#/r8iKhMB#YB#B#-2uhؼM>6Y>6>6/gLo).]qgv#6gƏ=˼<#4~IE]}pa+ΗysLvJfʋV֙ɴk2mla2 w>ބAd Z2p} }fLo 8w96sp8A'֋ފW~1T;YBk!N ]԰1+yHMyiuO-ﻌ,ɾ#{Ȃ^@.ω'I@SlFt(ǂ84tKIsF(ơ G[R*EоICUa"Nױ$I\3?QmUv[ ϣne+AW WVgh2~6J)~c2OL&c2[yb2٘d2&lMf4ql6ֱidcul2MM_8v&zc-"I#R&"9>hZ]kqmhe$a$ Tk2~RthRtD|ТBMj,"5IXA[>Et6It-f Ez cͭEi3g~ҊʼCciB'6_|}z(@meSQK>^-dGpX'q.C9<x=u{c~1Sª#4FxZ٨lخ.?']zhוG^2.?ͼIGVq ZOa!E1<%I?ÝdLXw)&Ået(,!q4P$yܚrKNT&01<7}sFD+;"ebͼr&YwEZG3;7n GxU K(ۉ.@4Y I5vtk1YkI) HxC,zd6&ӪdL]٘L3WcӪcqlul2M3>㫼cohE2eH B$au#% )*nED\_[)5,f` 7MfR00=f_UM諿p_5"(Cw'9pFk})i*muǦM>2muvUr͛|er.wy8}&k8ۄ)6}˄Y^$4.eڜ//fnq:/|yyJfʳaH}:_H}fH}} -Ad Apgp*;x[ug .BS7e~gn#~ӯ6P|[ztOͺ} Aapy޹V4Og^Az`lqAؑ %xtmлlMwyWE7 MD,QEFDq(ʻ 빅Vi2O{K?kRpF3:-8:fW 6s(,0@֫\֡\QfZc$hX#cbX7$_N(^T6ߘɘdLd2&5ɴh2l'MƱ:6McqlMƱiѱ:Kw݇[M&G"?O' :~IRG!dFK(@Ar hj KJOc|I7򎄁(hCdW{HcGCEFr on:H47*QDJQeD "^b>etBb # hZp:̹O5L }(EDFCu2dדtʑD(o>v)U^zo} ށȘ $"Hu22urɟ(6 Jj@kS~>Oa&!\R!Hpxx҅ᮟZ,lS[oAyr7UJd>[:)I' &!)$'9z-D /]w(%9i9iQl^HХi&EA -+\ɋc)6WlFu(RR}8'BzJLՏeFb%ܛғj5tx?.9s X="*=>05Yi=rNrZXRcc2OL&c2Yyb2٘d2&dM&J)ﶢ߻bEhU{cؐw(h[ҧ W  ckuc$=vѥ,C @)^`g+7n" 6 dEM)X]VǏ!vi: լh;_Yᔸ֝K * ^*Ev U0s NzC s뉼׫8(2FQR.c%%vwwbUmܑ"CMh.-|l/3{HǺ٘L&1wMfc2L^ul2ͫƱiױ860)?w(Irxs{nLUzHE{ADVNK\lEzIED%yvOp)h'LD;UW;El0Ƒskmͼ8i=TuCJ4"Ra!;>zBRJGT0KtOD16C:=8V 8cH@ɾm̿Hn$z/)‹eM^L?4|Jͥb —ݐo22Rh>7&d2&5'&1lM&c2/_cı86Ycql6Mֱ86/:6}߄//6mIbȄ/L_oV_Y}MRl-&)"I}SnśRM)‹Q,*"}9Hȉ)ej@cqygQ1ۜ2ON)=e2S&slO)))/l2d2OY"Xg_LY"Xǀfu 7e&`y 7>p"M`M h$\dLIXfaЯfL1IYfaЌEyи$Chs;%4&qˆS< g|UꔏM|e?i)6]$'//}-g{8e&o81t̛1ܬí[eޜ//[ [i6l]O˴9_^LAS7e DS # [upm}ˠ?@U~ &ܷ 8н,![z)Vx(w}M&ޯy$URvṇ¹L~aYH@:2|NGͻR}R oMsY\ő7~D~WRPQv e2LԹjԥƽY1GE"{+ezQeG Aǁr?dևU !%* 1\ѫ6K7tiS?<^PIi'hVd56<3yؼcql:.KE)HC{'"}[Y@B@N- 3tǥV,2ISۡmH0| #]nw" XZ nd7~J{n0l2%OďcU%|>A_wVcCPsnȪ}-%Dܒ~[cnd .^ $]h˄S7TRf*&*P|jNɅ 5h$@R&9 |eNp _蹩#IJK:p.:nhN9SB;@^Yx D& m>1 ĒG}lwiGh uyUNA0 tG>P8)  /CKx*M|\{MF*$n*D7:'mS׎bI]g|vRm0|s QKd56<5yؼcql9,|n?~x7IILY"[ۥR~q{jVosϲeTcx:%rky2:=Zۘ_ 򏲷)nrR*Uu8F?Ա/hCᩖ\z. $0&y{1WxQS ([v޵CG U3M7h,mr&I븀|"&. x¾tLlҐWVVpꝒDp Rs I:E+S~,L%٘L&1wM&c2L^ul6MƱyױ86MS0&:#z>lw>r1 fZm6 Xwo(@%èRB-J;Tρ5B-ܷӯ*񦤷xXHEQ? ~cvG\PXWz̷AVaruI /,!Rrr)Ĕu@~lA ;Uχtjq6/B #rցL2%SAӤ$sTQ12R>ԋ"_DF*q2tcdsQڏL]m٘3׮cێƱyؓE_dDa$Eo'_^}n)o"݂.8yŻmVˆ/6VſZıAc촂 ī 2@u@Ihu&EbxAہFY3 I3v]2 VDH*ߝVt?1]F'AqAS=؃ُeQm|8—]€,wa$c/EԸhI$|MzC+}EAu7{AApӳnMM0UӊSO)WAoe6wwy_v,v^,ڭkEp.v_ % ī' ~?" "U~" WYdX1N2FZp!4_GhL]2F^e!4'4.yMwO>_Ǧݻo^"4.Glz;b/V y1roW_|ld:le3lnL&&/ϗW 6@Ad >6p}l>>=e~9ǻNzùuEPwmm`pHȓnYMFπDܿݗ**mHz^e|8/Q ]c_>UKB$*Jrqb(w'TTת J\y\68쬎]9G5!e [Ij";PIjE.0FpPUP6K奵C]QK P-kudKQ(s=\J)ǟcscc2OL&c2Yyb2٘d2&lM&~ۜwY"z)EhR)EȖ"4)EȔ"lJRK.rZ7w 8N LTNrS ١&8IUIo S֍(E4(Ey(q@{YBQ]:</s꭪[jx'wvPeFb&r5Nכ$uD\nD*d?E7Owe tۈHw]"O?7zy2eFpH|\u&Ef3y jx.֧ن 03轪3: jK Qt':5G2:!]V{GC9GED3}РOKߧ\c-O~(De נ_!^ă0d2&lLEɚdZ4lccqlZtlMƱyѱñAp|1#* iTKn?"Viq/YB,9B&42"N:̨@& (<ˉ\+v:o7D%!Tp{w")xzo (D]Wl!g r!=2,JowAp椒.r~"ة$r&JԚLm=H v+78d5c=],"U4xw$ M]@7Z[D/EA]d\9dH@zu Ne)K<ue6w2ۻ`*I{p̀ ^E8-Do& ^eX/~qbBU"}žHNKhE'4*Si>qZMUشJN]cx_JhIĞkUB#M}2hR}p~LV;_a럟/H'&FϗgpAE } G.MNyyW{p8gpԱh1:cÍ cJLsc>'9 )/M.f׾9|,H ޓ5ߵkx$z@W#;Ru+9G(lTQTXw jZ=ߍOwQ_*sAwp(( EU|9ѫ A N ڠQ7:?:v$άyYvɟ߈d2&5'&1lMfc2/$Ʊ86[Ǧcql2ֱ86-:6}8cv( z |+E{E-&}e. f3 >':yяZz4]pL1ǩ2y*״ᴗW/1hvY몉db G8ѹSղV. uMܵ@R zL PH}enV!ZUM/P?>.M@?h[^YU9w(("Q٪V 6O& <߅pSDQyDY%"c;p_'Xd+E;K>\U4pӡY2sPܳ$X.GK^gXVnvMI;Sŏ>ળ:/iuq+/qxEs#/;U+^b4FС#8CJ*ZG쾯M&c2Yyb2٘Ld2&ӢlM.&d&MƱ86Y&ؼdLI"Ȇ//6MbȄ/Z _Ea&IIRlM$&IMRd-&)HR3 S)Eؖ"<)Eؔ"dJRK 9u^]"n#DVxpuO}ۡǑ > 5pķ "W|> B#werkËR<)NZ|Qr2eDrqT [}2?)( ;I :jh{*AB-Ȋ26H@VAx4]ǩ#V #$M~ (* ? qlzWNy"} x(y Ydss3,U?M&k2id&OɫƱiѱ:6EǾIP|MA:Ï790?G HP{]T" 4ttq_8DnΫY?dMs-YU{<SL]4A) HӋ'3 -+X1ONC{䐨F,^RP͢7>h (%rN`*H#ĕWtVk;]T*S[p'&lL3Ǧ]ǦcO96Ku(z GZ)]D:T:TXjK"rT^~mAgz8r" ^ %?zKᝋyw",5EU*SvEV) \@|e(H!jmvwIHzԓ64X3(դ* nMU !‘M⡲ywRpԎwrsWua3?AIcs>Bhe0F$Tf DMm3DKRZT{CڮiH1׊7I(E*JPj9h/딅F/Z_x}g^Le,ɢM@dWuAH+ V]Qz [4%/q%ӥ7&1VMfc2LdlWcӮcql F V2HWC. 7r&h^BkB E(H>!ɼHҐ VG|KCPUP$!݇pHq@ ) FKS2,@eTBxr&deJ˷ y"땸65~EA8^K/;^Zޅw? l[E@ҝv?>ڃ12yU}tJ܊ozC3TO&MO)"jLqERC]f'x'U)矂]E,٧WĉN|l #2sKmx2}lN.e~.4˫r#/gn^/gnEoW_,Usk,!l ZE8A'%ذ'VYlX"`"?AYp!4* :Be!4*S q͆M|l2|lش{)r>6e~./W ߎ뼯EBr^a-ᖫ/~e;l%3la+a+ue56̗ 2@Al >6p}d>>=ez9GNzùD˖nb"bw~IHY~ȗ@έ⿢Tʐ*eĮ#r9s swSXoWՃ ]SocC4 gwmdEN-IAC/6> lpj㔋$um)WMrJCT|z|>2TtfBɟBa wK&!u%4ܐ< hݕC*DT;ߡk^Q@q|~$ǧ(hҪf:Vd56<3yؼcql:valR I8ME"F!J+^NԩU@pkd-{Unxeƨ=z[׿?%,PuJw S]Meʕ>S0Ge} ¹6 I +gIZݠrPPxXLق\B!ֻ 1)74uSնeuyW":HnɈPH|{tGTeM*:RI%:Jk)wk|pC*?J'Z ^6^]N0ѥ \MtXt`Uըހ.# Nht bxﱐ!>U}B~Y-dE ?Lf+:22TZkwߑ rm*`BM:U -VT/|<%S C U2 `<!>ɒ$ *LE:^A7٘L&1wMfc2L^ul2ͫƱiױ86[85nu"ĵA, ޯWOJFzlm41 B7[%x !=ʴ:躓 ?z<_.p.}?), 5thɿ|l/#~g)ӡY+Vאfvry v ,jU*d* OmcG̷2$zټFZ4cT D&Bb A~~r82 jWjȾ֚ܣCup5|OmDѹC-MHPC5?ETkpT.a͉h\Uax=";8<1lMdLfc2[٘L&ӇƱydcı86flc *%RdA [MR!D)Dwi4D)yɃKrOA#6yl{OpNKDpmZ؉g(DpH}o'mZIHcdUjEtTC22ZUdOR;n^f%$PAwTo()V,I]}RGIE!R~:_ɲv:MY9PmPGd~:-RSCppjtr<ۄ//6mI"Ȅ/ME$)$)2IlIb$)IL$6I)EhR)Eؖ"<)EȔ"dJRK(Em"l2u&e/儲9_C D0ܧ,~^Es5rm1L6MƱiձ86/:6Y&شH:(D\#8JഷJB$U6C7խ[bR 5֋Qb2pwzBxAƕMB2 hc(α.,B UvݍdmUy8~^5' {(_CкG׺j;H8<|Qp kC|!ZUV 99E*M9a6UĢל;FqƬXXK%h򬨦#"ܧ/s4geRt&U[={ZE)<1lMlL&c2[ɘ̋&5cı86Ycql6Mֱ86-:6}8 _4 _lEE&| _lE?פIMYe$]eK2ͪ/[)E诫xd3|ū͓be/^ _W_3 Vql " ^VX ՙxq& 6@ g@ D:(y6r1dYSuIl+>,!Z.(r 6W7766'mhlُ?- C'@+Fc 2M+o>28VchpE A}kS)9e̓SfsdN)9e^^%4$/7/&l ˼:le^2yblW ">څUP'<uz=Ǯی3b?khd]1]^i6vi,ru&!:hnNpifE{]l؋C9SH45Jθ!B+5w)˩&ugɫpIOwDpQ J,xIRKdV]~cJr$\Y@<;Dڎu(Zw Kbd56<3yشcql:6N vaH` HЏJPtNF<~Iq@Hh{VSC((~E[)4Y@AJsAzAȹV\ xM2>U':vH7Tc"gxH@s*Bt`0[&b2!iH?R@YZ{߲ht!2'~,kފbyDQgSw< 9! !ك\T"RvldƒVKѣ~ЂQ\3x.|N8҂\PLRNbO,< F8);4KPdLdң չD)™]Qs(w1zQd+w f2CR@RV W=Oe贪*GU4| 9j Xw}T &6MTJgsfe!Gw&8R4X ^ki֣f?4wMMfc2L96:6dg= _E&|,|͒&)~;IIR4KRRwKz!Sдi'Dpb;[O!(?ʂ{qU#BR3%0“;F}|ܜ9H18Erx߂DZv^%2g JhL2G.(BUQ gEriZcm( 8q%;]0.~G`Ԁ&668 hc/jNr2SqU3",khf"â|Qpݑ`)lzά&] fHcT$UǬC9! tDn:5b '1AIp7٘L&1wM&c2L^ul2ͫƱyױ86M̴wY[Օ\eFKu~~;q3 sfI576Q)C\3@@*q/"~"JQyC 7WsH~?lnp(KAp޹T6)xTeZ'k.xK?8qh6QBP' !-냕KmZ~Cf*/*IR%xwE'L?= ܺ.YF~JM?A;ce mF&ɴk2m2ijıyױm&kse}ɊxhF=%A?`rEdy/m,.j'J7&d2&5'&1lM&c2/&ǦcqlM&dcql^tlpڒ6Ce,?Q_kX& nHs]G>K48zݦ1NdJwY 9|Q'lE48TP]/*t,0=C?*;hNNdt~II$HG},\ERF?/J#߮'8ѠY%dN6C3Hyz#v)oąvCT2?\TnFdaan86BUp(#?h"{NI$z(ЈӚ6jGE{:6 Q RTf )$Y1rU墖/2 CY?^ԈƗSiSTf[SH5mnIm:v"Մ*$[iV SG_30#C&K'WMPh\4lLEɚLƱ86:6Efl?{>3IIB]~>\ӊt+ )e=joH-ʗ2=J:OAAӨ('O!]NcA.BHx+];AD)fQ]B=~Ɲq^XX @=>.f`H+])Gs y6 G(3a,8xIxB4&)]J`CVTɺ> [EFD7&>^%4$/fe^|Wv̋??_Ց:ML|y*d>Zb`-Q;'@S9\u@##?XT"MC?^z6gtO,B""UwϺF=#hWLF%ɘL&1wM&c2MM^tl6ͫMƱiױ86|lDSD(uʝkE icD 98 jM9ׇ"v8\@vPv |o?=;*q2[ι&Hr}Q 1݀0(B<,TzT@ԂRBj-XA1O矰s+RLohebc 5tpʚcr=!SܦtL]:hPƻHAW R27 I7, I𣇶3nNc;)y^CVUZn̷G&ӮdL3]Ǧc̱gv؄/Y$Eo'_^}n)o"݂.8yŻmVˆ/6WEZ±Ac촂 ī 2@u@Ihu&"hAہc[ң6YO2NH. )~|`H^q[d W D[gU{qn\5AvT\ [,Or@>%[5| E㦝"$im\4ΚғHSSO)ALoe6wwy_v,v^,ڭkEp.v "d ^E8AEȰ'YdX" "NYp!4* :Be!4*S ~?qMͫ|l6|lش{)r>6e~./W ގ뼯EBr^:oq \}//a+a+[ [鯛/eh"_xc_)ۧ>peOD6DwI߉ بljO];-Q,@vmG+hCsWkKNImN&=ԹUM 3!R>>wVTԨl$UU JDZ*-̳0E/M|"k"bQmG X#چxAj"ʒBDu;YxP>6%$rs'Zwr"vc]FD"C}F(Oʸ9 ^[6Zz NAHMWQ5AB&ӮdLǦ]c̱u 7t42$j+Xu+4Y7vҲlXMF{oڅ "{A\Dh .(RݼWZQ g A96#JQk+AU;zV4}!8"| r t} #/"{_|,e#:Wܶ#n;C)>^TrL׻M8jH(|'Rp,E]y̐P~j1&$S/}(7x׃2cZrg=q'v"F0:z>&R#I*%14QIJJ!'-U=&;C C[T'ig;~ o!O(H+wckz_ʃIhQYb~Ii`HK7{O`$c^L^b[:zc# GVHweɼk2m2yf̱iױm&E_l,In$ų$5+EhK6MK` >EATc/8@u)jnjŁvb؈ze,R<f]axAq5+QT *!~aX/W ͵"jP[Due8ģ/܆Y~YԒ Ǝ11@F;DiR2|-%(cРbDQ qe Pp_# cƄD&Uw'uj4)†FIÉ_z tgyP]?5GG4*"[2t|~84IRY/e%sɘ̫&1M&k2idoccqlZtlMƱiѱ+FΊ2(! J$Auޒ$!kkio9K䉌GyPuR%H! }DVq:A*@yRթ[T?\KKfȕP$BSt$hmWXJ2q ))ї.pKKc JZ gr(~TUtxJSN_\k$-WʼnAPS n Z̧o]'8*ț=`TZ@8Cpl.D@Y ċ V w Al ZIA &D"Ad xcZ Rr%j/E<ć- ҬJ e>K\ֳ0MjP99wA4%q]<';TZv:7iP.%4}XKJ(xcodxddQó/2WSNR?ˇP+gS!?$L?YySfs<;]ݻoqgw#6ggĞev^ h>ޮfckVcno3f.ě@[ D'AE@ $Nea">Eޤǰea"- w Ih$Kh$ChE'[B#B#yHHȋL] 4>6yMM͋|l|))ۧ<~u?˼{<#'YĦ݈oG3bO2ez;/yyR}noW_11fʻeޜ/Ⱅ?idzHd6@} Ad>څh# hc NwO>q3'r8m pˑD32]`z c?Y.02᭝K]R9 %@Rrl^G~Op5^ਊH 8Xqӱy첳1~0 ^IvOAQpbV+E 7!磼%4JG)g[S8D7$p!<++ׄ(KA &^8"yGy' `6Itd}AmN*KF'$%H;%UuZC?ȡPNm^!тŏud)El,(cO*9>15Uy_hcBИHގ厧fdj2CD>  :x҈ Nӥď3uDdE8ur( hyu!I*:ywgĢR~"('4uȘ eЈSs٫\ak -OCܠj17@-qHnh ;>&,]py\5ډeAWZ.iUp,CP :`%0)DQ;QH3- F{dLd&d6&1lLEd6ث)7˴)VW43>6mɳIN^EeB,bo>d-gyh?/|yy 7>p˴9_^O [>'͗ys'q.^UȰi%{PQip#|\mb{,$DrOT=hGC .W)p/BTq񺤪4씂LƿD)Y/IyC̡DMuDhpvq^` !žG##sgQz3Q,)jhϙ̻&&1&Ovvl23Ǟ/ _vbx&Iw$)%Y)B])ExZ#aWØ I b-{ 1?P9o8Ԧ7QsR Ax'~"@jԣ,9Uђ95w,ңa5 /Ak#&p |keD4.? >ԨQCQzjPsc׿ǕdQ \± js^%8')i4Y5M^':_ +R]sAqaHE5j 0U'9W4Ey+X6]@+4#)ć$ m$4B;_ҵ@t-zG'ct")lLU٘̋&5ɴh2[86UfشlccӇcdY, L×(; " *x>+̇,~렻 3X=׮XW5⇎%"gű-Ii`h{(6le ^D?:В.NC|l},BKACNe](qWB=J0a׆|Fee\O~} e~jj9r'Yw?|1d#ᠤӂ:=2.+D7,ΐGo|!knyׂyhd6Q ,os_D]\ zHy':qn2oLdEjpVk$D\xFga/"DÙ` n- {2$vrCKwS*?9r fC0燧̻o2S)2e~.@]a݈MoGt'yv2gm'wv2}g䏻<ش=#4~y7/yyFh˳v/~>/3l2oΗ[ [iq։ɴk2mlixM,DE ? .Ǜp[ GpYovʼ{)@ݏSq8yos8g'PT~:r^_=5>DEYk_]6ٽrރY˽D ygˈor= Xf56$$YBxqN(fbEF~ jBB0m !8ty5TxeavJU2X?BG scЦHw9;yK^>ԨmG6E ep Zdϵ'PBwm8$$U@%Bcq+~|$/rV[7܍≥:w phѣAZCteYPJj.s&ӮdL]Ǧc̱ U${E7 ֦eh(htR_#&&W^6RLm*!`**+ˉ^up=޽ բ&䐪L4|&zSG BN)eM7J"'WEJ}6> }TR`dwջ+P![ʚOZw*#\Q7݅A E9L踗E#tYU)F-S\hQ AĢkL4BF(B*Wؽ%E6. #P큇zaOUM??\NVkUvZ!7삦  ? ?—ԟR8rd3P#tD_@ pw%lcqXNGeS!uߴaPx&vx`OMN=WWb;@-n*#0 7NX;~6JWuԳ+RSVjFZ _ D,ML]mɘ?awvl2SǞ/ _v"hfIw$)%Y)B])ExV߉V|kQhwCH& p*Y:vYA:KQd,8DT!A;Ci & WqkuvPs"t~d>ݧTDYD/O)%_-y#WDBz-:| Z<7CEtH}0 c b+y8zAݲ""RG?%D ?@StE ~[A ,|"l2hֿ.xˠ%:HRGpӮ˖5?dR:o%\? W/݋0}' gI=Mfc2dZ4dLEdlWcӢcul6͋M'Bp -K$&5C_2$aiC3t`_ҬKUm{C[LBj'":*@W`( K${+/m}|[JBr2]Qd> I!t\MZo?Pn([3g5Uj?>HSQNvO>e2LSeڽ]_FlލvĞAtüLy˳G^U_[}l Q}jlޭ{p~Uc.ě@[ ċ'} E $Nea"- w1Ia"`"EYB#iȖHȋNF6F%4&, Ah4|lc&- dسSSOyF[<]ݻLo9.O"6Flz;b_Fev^?ޮfc̰w˴9_&;le3la+ ['&Ӯɳ:1R]7>@  ǻpo}l>2p/}d))ۧ<u?Ny]'A9 P\oT>O22>7s&WCE/tBPUD ^k 4ڔ3Aw7R+R=oLlL&k2OL&c2ٚdZ4>L6&d'Ʊ86[fشآ>JCFbm(EMfk5\mAֶ" *ʹPdTm;9Qy2n^2ppVK['ˆݍ&Q  aҔ܉$T2mcFW4zE"Z0W| I5t>^*tP!>ġhz9[WH=g'0zHr !(,&A3*x98/CV;r>mZ㼲s]!w<^"O7{ѻTt mAV?%pQuSa⒊͍q) Ǘ{PL\]CIT;) 9F[kC"=/'X~дZT -ԛ(TCmˉ_Nz F*}n(%gꨈ$ʙ' 1iDxgnm(Ay7!U vWMꅨZE:5Sd6)7cQdd&d2&1lLEd1D@Їl 2@ @wk ^eXu؋rZG mvi}"@R? OÄVZϜ Pw]E\7sEd&d]~+xR WS&sdOy1?"lNO)L.̻.8Y"Xg_LY"XǀfhE29yv?ɫ)6y_˄Y&4N}[&4qgeڜ//fn.˼9_^tغZ˴9_^LAS6e 3 A)b>}Moԝ'>1Gp2t?p~BRɏIȒҿ4/K]\cQ_)M<},gjY-GBVrTwWgWI tHGGܻ24te"?N/ϏS;|"18\S@ppurW.1* vF>(^{-(j P7s E"]IQ sPU̽kD@Q<S3Aސ$:\ &B) /=heK6^Yc1P3e{z|wi7fˉɼk2m2yjıiױmf]o"S^E4۽< Sd &*JU#nP5:zyx7T9 Pݢ0 Bp\[znOV貕[ŭ"X n26I*v>a92"'ONR0xQ?v?%2d;53jQ5#[?ꡛѴ?FxM dC Qg~D ꛬ>DZEp4 1>6d56&бiױm&`EģKu:9 mb!n_n ]A~K:&/y\"欎DQEW6 _M]D3"vkj񄰱Sz}PGhAVRbSi/K VeqwRѭ8xֽxCM"=N,'Uo]ӻߥ)¥zN($);h_Sbc!K,ސAT$F)".Ighj&%C9`9J(]Rp#~c2yd6&ӢdMfc2/L&fشdcql^tlpl? gZ"&x%U/ $׈.|BH=ij..}AgEaEz^lqgjM-@#W?( -2}*&ӮlL3Ǧ]c̱gw؄/Y$Eo')6IfIjVn)o"dJ"w NzQp m+bmEoV_lŋ?/.D@Y D86}] 7 @ 10@A A8⏙xM -DbAd %4i|S>!ڝ:/wOLo3vAE{@Sv[i9LY/Gd<|o+xah! x%q/hyTr/B#esѪjMv>Rr<*n[Y(]6'mN޲IO|#[V}rʴ{)9e.] ˓Mߎ3#b2e~;/4yyV}noW_1g5yƦkQchM ,E? "]o'ȲȰxE@E@E@ڤǐea"|Ch]B#oyɖȆȻF$4%4!4"S?ͻ|lccc",{vʼ{)h<˴{<#'|FlڍvĞ?",/n^gV_v5}U}}3l2mΗ[ [iqJ։ɴk2mlihM-DE ? .ǛpY NjpYovʴ{)@ݏSq8iIos8gSjbҒ%|b>{qoD"!OK(h`AAbm(q: ʖK]"<]H۹T^&cI()dQ) SW`+4ʏܛ׼|+*v1M]$Yt.AIǩƃ#c"~gitQJM %VYD{5^ R:(C\+YΕ&ET,"i |;/2nME'^pxvr*|'"];\&ӮlL3]Ǧc̱3KZr}ĥ֬I ԣQ`SntI§) \*Swh3 *YurZ|:92">GwJnBS;4͍'j~Q n}HM@ۀbV 5QjC}(ؿ$j;+ xBt1R4ݺ-)r]sUfv·_ B^SJWۻQ?;CUPy gh@D?凗EJJ'HqWĪsn'qΡ!t"np{I>ۊ C[GI޻&^xݑVH]+ul֐V̥!'c2TPeXѦ\k=FD"EݺB^ϑot*@Ѻd4ɼj2id&1McqlZul2ֱ͋86/:6YǖPPF{/:(D%7E+W9\'8Q-xxH(rTfo 6&{؇f`.]&gEOcSLj <;\9韓Q9 2~|㐈[O%B >:tMtݎ,2%5ϒ#!"Cesk(+δyA'T*~(%{Ut'f{V!z(:)*ʶ*(J1ז:]͵q"-BK}Cd^z{頺lɲT`{w!*KmxtVS9ydzd2&cӮcێƱyؓE_lM$In$E?~Xn)o"lJ"w NzQp m+b_߄/ڭx"Ȅ/Z _l v Ad Zı6@A A8` hM ,Dř̤ D@mAl 2@  #5"Fr8%e|h%\|q5S-I:O$aQ 7@v}rKB\#N2jCNw9cоUqcS~?F)qc_uGQ}:-߉ B7]үq ,l뢠Wx-ן;e=ezɜ2Nyvy.wy~IĦ݈oGtgyw2g/ڭk6/X?ikYc v Ad ^D8 'h8E@E,,6,ޥ&=, Y"0F%4&- 94F%4&, S>6yMM͋|l|))ۧ<~.]qgw#6gƯ"2ez;/yyV}nEoW_1GEfJeޜ/Ⱅuf2Lo<]6>@  ǻpm}l>6p/}d))ۧ<u?Ny]'AyD*ʮLAA.ʼn_T0zomoW si qղH4"wbm騮iE jxʣ 2jT^_?6 E>6u|S(Z5 7^q7O`7Ǘ\Y6sx$tORboFDanʥΟϩK^Wp#;\)-K Co$/\d-gy+c|6cY9[N˴9_^lغ:RΗysڄA)Moq8+'^"o'֯YTXƗ"Q}J]ӘvdrЀ OQ[1vX4dkMQ(k>6wKN-SnUOAPh%DQ"QH}.T "R@="ύq:>;*zbCwx9Exx|+UC8uC񲨼T^SQ ^ׁ&qbL9^,Hj!"@pA&\u*BNI TP;ؓbh!(Ju?TZtcgd5643yشcql:9Ltd\|/utB{(>7 :7Ek( Ep@'9ĩ4t۽>ߊS˱JSytFItӝ]I{o ]UWelC+#tm|)P rn/o{v9GY~~)A2,^b}kER\SW?CǡU1ctŪCN$u{w +c$M <^ yӫ(crs\Ն58pIT 0lغ+Fp;xB J# lƮc8qf+3)TKqC'Th5QF5쳬& 5jD$GM%ۗN+8YAy2zAFj3FR}t: vUǖҤz*?*1"AU;̻&&1f&wvl63Ǟ/ _v"x&Iv$)$RwKzaSJ gռk_Ĝ;^!H Tu܁gjRɇc) .*`DÂsG{7l%9¡KkTDw/ýk9vƑ,| O"tZяԫPцۨxS+,iAkgqpJ76Bx]}~=:ҺDtQWnNkGi|=R+IO&&]?sK˔DԑܢƘqBQ`#W2$-SIaN9oLfc2d^4lLEٚƱ86:6Eflpl^(#.%?V3("ˡ>`TQ459|{pO*k3}hݣ6ߟm"z^+U:XV9vc(5`mWG/I S-~*B$|1yLQfL>UwxZpvtΤiE.ֿ*YiՐpQ)_4A};}M&ue)zW{5c~;L&&1~:6:6dg= _E&|,|͒&)z;IIRmgwv2}g䏻<ؼ=#4~DY^ݼLo#/Ϫ/ޭk6̰w˴9_f;l%3la+ad56y6R0 Dpo}d 6@-Ad 2p} }fLo < w96sr8"]򖮈 Ebuce5/PDVKR7D@k+JDF=ׇh=m"=VP9PG}r˸˵F n|Xt^S6X0/,sc{+Ҥ12b<*ઉ>_KДX9b|P<ƟhX()rqZQQj\ʿ"8r. 4}>Rҡb$tSyb2ɚL٘d&1Mcı86[Ǧcql2ֱ86-:6Y>WwM$l8gڡKU9$&(#I]ͱpUܽOTTcSзJ5/OIɤ[P[PmC?|G(}0vˈѰ WSc("OQUӑP!Ãt~Ǝ@N>`|֔ȢC@#Ks;wxrN{!kȤ2zp)^IPKj>p"߼+c+~m|k֥LOE#k'eui*b pjrk"\Jr}Ɉ_AT5cPiUY^`t.s6$ܼ|ʼn#lBE:Zp(8XSDHl]SC*.TJuKdڒꁡRL4[Q$%:)EAA l{ _xcC2Kyҭ8aLdLfk2OLfc2ٚd^424ql6Mֱydcul2MM_87'Lbh؄/2lbh1|G2I'IMbh$)2Im"x1IG2MJ6R'RL)B!Sb)ȉp4(AxEۋCQGչxz_aR9{ltiݩ? 盶"6x r̜d\dx?rQa\]=QcwZEtiFP !^C*]p7ř>p.T(Ţc\@a&\Sd4WX pDG^z$e4qqF+sBB#uuO2*1D.]DK/<4wO͐uA)N9 WP~lmdLU̻٘&1&/:6ǦUfؼdGDGxJĽidT D+M~DF#yut9h:EEdRﮜz)nPD CIPp S_;!V%9;ϼqH%2TH.83ؘG* aPي@5([dҽHuPeJcaxWI ),Z"oBk}EuiII m:P"8? dd&d2&1dLEd '5Q?'ǂ,CpJ;)ܭVTS _5&'oL! : iO ktvbBg97U;) E?Yq%Dda>C"I~+bN&ٞ2ON)9eLiA]6wVA]2wwA]uW)7Y,b@)6YY^Ь,d,fnB ,#{A -#d ",)q7,2,,)=71,6,V9SB#o9l4p2uF$4.3uyccӌJ[iL['mud-gyи:Ηys}Moԝ O>ڄ Cܪh&ۏ;)Q a~x,;3@NVڼ6 nJ: :FAݗ]HW ᩉtթp"p~"Mg +ٕLoGIxd pQr/[*mÈb}'"BF?+™e u݉5}K~}?񣃗űT'xFlzז s)Ue׏yTR>I1㓻q,^L7 9{U}|!s&ӮlL3]Ǧc̱Ť\D;މMGk'L]q*'>Jr/B?2'RkE`5 _x٩R^cۻm1Wŭ/]9mC!_xUEP^jfUܧ*lZJI ZCԼ$ڕE8FWˢP·u˶,C.e4PJtI;)ќR&@x?_:4Cz?d_}4[D=Dl6Uh[44+މ wEpUY?.E6IP5UXSsxРByӲp(ܼ#-7:īCydzd6&OCǦ]cԱ'w؄/I$o')2IfIjVn)o"dJ"=EqؕoM RT,(!>N'`ߠKp8&Bװ^ 4ù)̌7Et(ANF >~Ν4hF=!ᔴ2)!OzگrR.Q?PǩܳANMRp c\@X.whIl<"N +d*+94Q9Vu|6^BUw5ibA8UTDCMt!l6im'9wtw+1`G-HR\7ɴj2yd6&Efؼdvc̱er**KC֎ /R8ghͿI-`LJv%ǧ HA$&;o1J"({R'x8#$C_D*?qQɉzaBHyXn֔EV(:nJUΫ?sp|N.vȿAD&;8#{(d yDN?&TQ/czGS.ZU9RL|o$22!Yl:b-!6>6|?BRez{@M]qḻ=B|!cכ#Kp3ϙ̻&&1f&wvl63Ǟ/ _vbhfIw~yŻ]w N~v[˫/Ȅ/Z _dkf*M 6@N+AAv&ՙ : D"o(YJU#8I>U~A1.͉)Ek?HktMZ\cX \_rUQxnV;!#^7MN廦nγX,|GWgΨwv4! aOÐfj _U̸G]U[IYRR|٨v22}dN~W@oe2wwy_v,v^,ޭkEp.v "d ZE8AہUذO'XlX" "OYp!4* :Be!4*S ?q͆M|l2|lؼ{)r>6e~. ގ뼯EBr^2ou \}//a+a+[ [/ӮE D@ z ǫp:wO>_.p.}Oe%\oew쾾1/n$yٝC]]H*ԙDu%;iT&SIJP#!DY$ k G97tkrGu֊ެU_'E.Gco5K}a{Y^s/mSrZ"wY,ҸJ~胗&=w5)1/˱uFܹ6sJC*GSUr*{O=2dwib2ɚɘd&1M/LƱidcı86&dc˅;B=5]PDJ!qQ4Ul,LcSe<"~&m]o kwufzAFN^p?{V s )4E"ܐijo%|uk'TD/Kz3Dԣ!j3AE9Jp6N-[91"&T5S Жi"ژAc}2]-נWU RhGSLr]GYto(F5"4hZ(}J/JmC%[Üҷ iAZ%5!;)g<+ȓQZ.rBge.).c3vCSwտF+ 1B9q)\LA,ChR.I\ b+~:HX㗥+E0,irmrw}E&w d [DPPW=eyoLfc2LdZ4lLEdlWcӢcul6͋MŲ/c/OAΜSFAj?}h7kBmS Kڀ˗!DxWSU|$z>tڝ`sV Q:*'3KT}a*'}P* qT{K]Ec8"_/x؟3ȷVFb֊c K (;FlB1)U0#UaUD})wv=ܪ/p%rн P8dsΏ]mq~9~QpIΙ1'&141dL&k2yd086Ocul86flccul6'MbhȄ/2mbh1|GT_6IIR)wkAGJ#!0qջ•c[pL[ku,[6hN'\^OοfqE$%bQfg9:_FĎֿ>S)9e̓S&sdN)9e^EFD}׌GF}vlLc8T_1ܟ/Ηiq˼:Rɳo/O>^,G@Пx9WA] pBIy* S7nsUNnȂp&DXZ dĊ\"3|dzd6&c]Ǧcұ9,_\qSP08)'%495IAtQ$W5ސRMrYn3i+D R9zUq˜|b؋"8SkĮ8-!r5m&T:Vd-KWb$'O"4\< 2o M7/YuQ˃sȀOe )5u lHvާ"B8NDHU-p| }|K= tf H ]M372cB$vqJ)jP%/։k}˾4ҾSC^O/o!pY,)szʭcpTES݆Xy2oќǿA mLM^Y" ԺSbHF( )h]{zʢטN4t4خ gOJ;ԻA/}`w\~džܭ X㓈W ӜjU%4I>H ~~КϽp5UMrs" %iHGCߑ'̌n'm?OA貛 '\vS?hA .G.S~ԃIrles6pN':2JGWu#%U)" LyX8Q14)2ED<ǝ?UQN?{uk)SްOe,bրvw3O:UL/ge Һ*fk&S!K^eeq{ac'Tc)IX9-!?!EMh! ~A5y TEEWuQ:lȜ4eJ}7|e)в]~]uS_ cL ԏX4e@ {f[iӠߒyH2<_Q>P9׳J_X`L&c2[ya2ɘLd6&ӦfqlZ86fشpl6MƱ:6MǦ76MbhȄ/2mbh3|'CEb&)Z$)2IM"$)LRdRRl)BRL)Ba[)EhOJ=v\gHձRur)wJx IsUrIq5R,^FkVR,(JvNFQkM-ÊZj1ȹ0孛MP#z8e7w fթĭpOpEMF5J/<?)S ŵ; ?w;4/ V`2\"8$м2˕^GMA{L)"84QI!S#D ="Q07݀ O_* ,ue7h2Bo &5ɴi2[86Ǧ]&ؼdccӛcm2E~ND2,!u2"~n'r,|' o^~d_jhx9IfajN-x4u[p<XpεZ{94B~ KD| ˔͇DRLy,#>\^;z'$Eq6ͤia|AӥtbC/MᢟQ[4}*2P.#Ҥoaj;jex E%ܜpt2)b^_p2gs} [U/[Ys)r3/J3&d6&5&1lMfc2mo&Ǧcql &lcqltlM&|"| _l/E&| _lm/kU}$E&IIM_W}RL)«˖"lJűseW_شh+V/[}fk.m ıihsZ@Τ,ě3Ad ^Ad 6@$BUp2iV]vF̶r4/TVsVV2 5u<דLlx̋wכdiC4*le}BBGZYrQ5d>|+\Y7N|hϟ%l\)_\OLɞ2-N)9eyɞ2̋uiqW.ۻ.]添`.tϋE^ՀY;E="XAp^!, E8-ě@Њ8A,KMĉ=vYÛ,1+B#r8-79?Oh]%4&S=?]*-NyE[y>6풓iqWoc/x_KhE^}}KhE^^g˴;E|vv̛֟/H&F0_^} Y7.sp킺8pBpoPJ%f8U䜪qKB l>?=P-?Mqm&e\ҵEFI?~C.}+{1|KAk櫽-LZ;NsPL3B4$.!foUKRzdԒ,^F|"U CheV>j݄ ~W7eMF/DL#44F^L4G uȂtU(<|W1\^r½ {eh<,#0FǙz?΅|dzd6&c]c[6X}nvMO١"*W$+]vG1 QΤGFsڲ @#fY2 iA͢7S\Rwf$qk"CVԖ៯I8˔8C괍@"JCx' "jZc#Nr#δI'ݫh8NVNrx%1 :o_ՃytS^D?SBY(M*W>'mz6Ivp9q1+U^h"iΡ(_CNȎi}G(L|y6:] (h4| 2z)Ϫ/Y *դ/V%i.8a?>agJQLPcr}t :8&IYT3C9 M1(ePY\q\@$ZL9|C<[̴ KdvpFC )) .cDNP/*0LOdtlcql^9*|EO/2Vkn$ū$*En)BO"lJZ"rkqzQ9Q"j$FpRHa:n2]Y0(9tEBܪe QJ*PDnۧJD* H5+μS}y@Wg"3,@?E+܅͢Cd']UM eg w#Fm/UW!"vC:gCSo2id6&]ɘLK7ccqld݅ÀSt/`2 (3rPEDMi AFyb 9Ĝ&UT,e;߮H;WЕ:AzU"跅E]rB5?J KCHJY=#˪vQcKQzȀZ(0ZS('ʥ˘ IL" /=e[zMRH…ӏ/$C՞'AU!&+R_.d.zxޞ/d/4lE֎a*.i j먲Em$-AeMS:L D6=1Ծf256ɴ4ytױi&ؼrUዟ_d*I$O'^}R.Ezw N~m+W_6| _Ȅ/kf.M_i vd u@Ihw&_AAl ~ OZ?zw6߽]co#6?y_OmW_tvJfʻV6Vuek2?m|yb.D_hcѯ)ӧ>9pzϣ{Qݗ O|E@P|>mVk 5-zr\KR]#/jમM"1cH֢m!+rel5yE?aj;{SCJ(5_B%ѻU^o\TC@er2xE~%&ݩ Aks[R>{pRXLj|"}92uEWeTdZLd&d6&1dLMdشpl6Mֱydcul2͛o} : D{Ep &_2HӢT&Rєɕ,VQП\/^7xSnx%U? ѐ.J]ʎWmDzx(z2!#%ȆivEd/9:䦎%Kj"/O}nGί\Mq,/nUXI]W (:峦FQ^<> o B"Y649(D&Cn#3TհtBa%c϶ d M(zwMϕ(#)p>!&;+)?BֻKS΋.{sZ4~Lxemmͱ#sQU7z#| B8މ̜̳kEӍ>Q6(>4=z/ P}Uqlyifd:NUt@CțKf8yLq&ޯ˯<-\VDs぀yJǾ$9@LB&D5 JsKXyosL$t'a,^zƞ{?'Keb_lLfk "c2߰/6&ӦlMcuULƱ8[LƱyӱ:@E>/k&|"lm/z _ת;eo&)IL)Bw/Y}-EȔ"Y-EvM^V_|6yUpoV_ێj+>u𵬾f؄/Z} M hf v7i Vӊݙ@L īԶ+ oAo&Al 2@Y h{ؚe(.qǞ_!apEz~q6@q> Xy^V쵐wQ8e$ olMK\:wU"ɞ2-N)97SSSueue 2rL^&`_E7~^&`{@I^ނ,"í1ܾ&Dpj@6¹"X'&qbE@EEMz6 ,]{Ehm'B#8גH7 L]6FZ1ukl2|l^w;%oiS~nhV|l&'9yw@}M6qo>&4qWe9_í12ߜ/o[ [y9ld5_䷑v)&ܷ h P|xm"+o}۠@/hVp߄3>邊P(5roqee͕r"T$ 7~5pCZ+F,yUdVegp59ekg<(N:/r/ͅ,1~)o,9BDA$৚Lrr teLo5#Or"0Ȯ.A&<5:$Gεz62JM=qjhz>:vu.BvLUV^HsJi:L.}ЦrUx+.JH_/#g7[[nFAYc_ e`W$[u~_zKۢ=\DgEREs 祱97"Ev 5.;a.%a74Ni;rD>xA s_3OLd^rlcqlZ9*|O/6Vkn⧓$$(En)BO"lJ^"GVnsJO( 7\o:k~XEq[Qa\WwOL KG=b_c{IqE;w$ڠl{Gx5S {C{a%$Т1ps,8L}NtkiqIe\S IQx(y @hDld Dx?%!OJdd3*= !OP"vsP,ܬ`TMPFS<N&и)=̈]5Μ">)*"?=CHH8-t8vLѦɧ~']P24ӋQjt8Y^B(6Ɋ̼r @/g4ыviP$ح%i2 <,8ר53c-/fZ6?4@Hmz0]RaNt෢u .1~%!HM\tttq[Oe<8*"/I?4'~ZIQi"2LٮD˯ ]OoxLqU և:y8*d_49ujTa5?.=ocزȰhE@o,ChFIh$Kh$ChM'q8 &- 6 S&, 6dثSOʟVx]̟nĦ#Yc^y+B#cEw/~Zޫ/3le9_&;le3la+adk2=mjn.7>@ 7 ~ w> } VLwO>v+'ptLJDA]x?^tn"0L5Z\y _Qm}"!T+CVe LFGI)*j-0|!tAe^,ZXzd&Rg5լUR&#-#e0Ҩ~qQb&E-ܔ=|N&)x!Mg'*n}W$ΎŏWP9}r^[4O}0Hɨ{QWje Ef xdFR)b5"~&Riqu[ FL9M&&1`:6?d}lo:AĔ;Pyߡa^(Z~HMh/e̛$SGNcZ:(n *R*p TznUiՏ&?ΑZQ_)Kn$(F/ȻY7a0\y&R}xY(]{/Y7.OL5COZ&5*N-?=Sy1E5"R]vOy,͢4wq/TH_ڞ!nWm~dTΤ䌥Xz_(KSmk,}?:SG]ɹ t%_ &"?;t+D0LOd^plcqlc1|EO/6ዖkn$$(En)BO"dJZ"ҫ&1sORK"6%=!֚yʲĝ~=];RL>.ju";%(=:~pXlw*%bq*ħX$uۨ.G4)O%~^=/)ķL[g\&SQLK*E7:%e=Ͷ!JOĮr@W2G+8;v4>mrZ|9N;?'EDtIN>*Y%ȪOam}t|V$"LRKCÉ GR_i`2id2&lM&c2mLo&&شd7cqltḻ+I #79E2әos+yY];;zxgލWxO0N#rp͒vyQ=[QC^":'1K]E$/+jrϻDh.6o 5ODMK*2T[铖6&ŕ(ObY#W D B.;dE!ROgpl;AnplqQwն2yL>LbE=ՠ-Rj1?2(Іɨ:wt{:KV@m8nǘJza"22LOLdZrlcql^9*|O/6Vkn$ū$*En)BO"dJZ"t2\tۊcg} _tE&|fA|@[ D86Y w A9` .D7 @ 7gRd 6@&DbAd zpwkCe*TEYqlaբ((k!Zt͂B@5jGUeC\Gw4A\Rb`Nj}?^Ec Y$IpY'2nBN :'IӈY>T |^8$C}I_cf_xtSfsʴ<]w+P./"6ݍt^A{n^j@ݭk5{V56ݭ{pd M ,DMހ " I`" "MYߥMz Yoز.niIȆw tȖHHL]F6|lǦ|l|l6|lccN2=}+)/2߽]^"b݈MOG=b/2t^^?]}p՗2ߜ/氕ކ ɫd M,M ,Dp߄}l>ڄ}SLO }?r8i pJZ)ʋ!c|Қn]E~=Nj2^G2MR׬%/2^l+nE儮^T|/"Fqp+ U?)\f?n̤PËk PċBBWmD`Np./܅cj:?32#tCnA< ~Uq#=" jUm͎r2r)$*JwB*"@Lt҄q/ZK 9>pCLǣZPbh364LOLdZrlcql^:ɂY?駈M9.j!{z\[j,5Y>ÙT.JIKF{葤c8F ^B ŋVC#V8Fca*(28eFx SjOQ]4I2 Њ[ƦR$K"sYR:_Mn$-/娫EspdLnΠ mn./ wMMfc2/M^86ul~ڱ86}űnūJRt7IILUZ"|K6JeiMno]%"ן/iJɋCu.hhTU"r7D4UiFA6p$=]~95֙AF"-y_Jw> &|ٍ}:5*zT9\<1Gi'I1 "yHs8v$EZ(п:1_97VaW^?r͵rgG LZD?X+I[g8iZ, aVc)M*ge2yd6&]ɘ+wccqllNR2iF" 4[ZͿ:Dd+M94 nn7&X!_$-k:aPM ߦEEmAIU'6ͳRx2`FTF8%1\1ļp߶dL+ǦO;6c&|*|}$׫/[ӥ_nOm=Vˆ/2v^}d űA ;  Ŀ wgRl u@žA,oؘ G!Z"F/BNVӞnk/Yl5k%[*TrEx9j^IqU#b)GB/2dB9h^">/쪆 ,nk}l_w2=e~ɜ2Nyݾ]&swkvĦ#_gݼLO"=]}mv!] D' ea. 8" "];=fIHN6FuOjFe!4ҷwdؼfǦ_ǦO_cݻLOm>.q;b?vy1vOW_}m̰|LO?_A }l>څ}>{)ur8i6ܷP|y e.TnJ:o}:aSXYp/'n-V7n##>7Sq,%65P+3Z쐣Ip>1r^P!.0̝M6V;R/1Ou**&ćvD">2q|IhGT/:)QbL ٘Ld^d6&5ɴi2lMƱ:6/cqlƱiӱͱw9$9:Њ^E1Կ,2 "ZIVп)ݞO )A@o[Nh~k ꢯBP}&˄[(0EBe?Fn$ y;?GB)}Hxi._PB4/'i2]pl!^Ǘl&Ϯ&JYeYvZ]ySStŹ%Y?ţYW%4"/ϳVGѢZ~~ַ̻sseH ] Ȣ" x)@ݟxs?-"~(_ :C5lL](EP69p7`;ZkBu֚*oNemkTn2w'қc[Lo%;_gBe$Y%82RUn2G"~Jx2$$zP8+,'{ sܹr4:3Ź̹ ɇ5_D !D]<)Nnk׈]!: b:iڲ-[Uzʨ,+ ͧؒUZC<+ rT7tp^M5rxpO(~A_}о .U¬(G8V% uQA yg0k~^c H8 ɘdZLd6&5ɴi2culZ86fdccc" _lŋE&| _dślZFl$)IILb&)6I6%UeJ6RRM)¶!Sf)ohSޢ c}S2GPVnϧة3]Kԁ^8CMKjdwP;t"bW^&:7= ˊgG ?H1i_ U=%$O]㑺/l_UJ._ FDIdE"\#TViM""Dk 5ɼi2Y٘L&5cqlul2͛Mֱ86o:6Y^eYJ iHi pYjHiVW9򚧜g-z?Z\$(NԺQ;DC' lP,)R~hpIIY4CPw%V:R `q!9[r ٠U%qܶ>UQ?'Y5UK\J%0^oGw dC WMT]d`;;zk2njdb1dK";ՈԨu+TïSEM- js&:&1ɴ0dL&k2yd&?86fؼpl6MƱ:6ǦMf_6|"| _dE&|f"?$)2IW՗MRl˖"dJ^U_aSЯhd^+]ǦE[r쟯x7|6 ]Ac<Ļ  ޝIY 6gR?AAl v lMR!g!y:YŽq^\M/-n~`[[mn.CMTmtUy_.P+AMyRRYc& T~|>IP&B.! ώmN)=e^2SfsdO))=c+P]fsi.`.tϋE^ՀY;E="B[pҢ^!, E8-D@RqE"x8.chE<=fE]'yB#2u:M75=>6yʋS^Vͻd^9ؼKhE^}- w +B7GѢZ~~̻ ΝaϗywN W#+Tw &p߅]Pu]t<'*>-Eݦ:*3] Zk.j3 ͢u(Ԟ;^twNԩJt?a'Րo)l~V_UWMt:nuvR"pnE=K );}*Lȸ8>^_Fgs0~|БpDzҹ4 RYIGV K٫9ԽQMDQ ZVQ^& Q>өHqCul?;&X=JQXp+Erymr.L&&1`:6=dWzd"5JS Wh2FD;Y'Oxt 8WUH>E!sI'YDVׂCHy荳-^#A_f|PμѯOʩzt1(I. s~" EUhDFáYVi:$ɪ|璮&9ו!Ter Oaf܄#7+^"9ԧEA2?uEp3HA&$ש!KқZ׼5QTjdGtE.-]}.b ) : T]8OYXUr[69i2#L>?8 rQLuuF%Ip~`E31I"\՜ AmP<ݔ*狴2dH ?P((*冫.aIRiLXMG>x55/I2*GylZDm?Q?c~χP'$R|dzd6&c]ǦcʱW/~:| _ _$Ew?$)^%U)wKz!SYt Εl+n[AO+~k+؄/[}lbx3|[2@&D"&b] nAd 2@oN+Al M -͙[ w Al 6@ ,t{*ߔϓdcVAe2LS^e{黼u"b݈MOGtiS^y˫{^^T_|ZtkY@Ad D8 4,K ,2,dea]z ݤǰea&XHw |HHțNF2FKh䛄FF2Fd.oyM:e{)h2ݽ]^*b݈OG-b2t^^?nOW_1[EfJw|sLvJfJV~.L&&Fꟙp߄Al Ad> M,M,ܷ:e{)@S^p8.pwv㍗2nxNkR]W@ܫT9;{S]eeH\l/nPPDK7u*Nt':Ψq8U\׳Wq+cٲ:JxA Z~,U^vT㝞O?WTZ<^I|ʩ$FwUWEQE$z59Ql$ !`ͻEI#gY1cpQfOyl{G)>H>qvZHbkzLlLfk2-L&c2ɚd4dƱ:6/cqlƱyӱ8'JRSΥ:Ej1KKi2ӒG1TDmY荊n1 >%q0z2N.*↬G"]z-[B8d c~BCR*FFLMuꆠ}Ϯ^ps#YơMApxtr< F43Jsޒλ]!Q#x9)j*쎜Y| C,U|yeHaN+ |""^)P -B8Siu9˔ .uA9HU4a&z%|)f9IS7<%|Pl0 ORzd#hpTDxcٿ&>';x%k^*~?f~ǭ&'}W$6_xDEOĪM\,Dph84)(qZ)tivN3^G(A[[(2k~F\T&p _~xXԒH #&d6&5&1lM&c2mLo&Ǧcql flcqltlM&|"| _d/&| _lm/z _&I"IIRl-$E&IMRdo&)~KRE)¦a[ТaS)Eؖ"lJ,EȖ"t^nj ^\.bLF (v6]$k`T>;͊Ejc$HuFSlگ[͇8#ɭ ˱' !qn!3I5xGU#bUVSJ@eTi$u/@kJF(KB&H8:Ă>sǖ{駰^!N I4Rb>|F(wãm-mxoC&1vMfc25ɴ4y?bplul6MwcʱTN\eyj/e(݇ Vz%fEhf B J(.h#V}IZ JN+G ܪ%~Yu`r:A*tnþҺN*2e,U} `)W= b_sK@[!}B/TP?N~yC 5y#|*!?8G žװ/c2Yia2٘}16M77e2Mֱilcd7co"&| _KTĄ/6?i+>/ _?W_|"$)LRL)Bw/Y}-EȔ"Y-EvM^V_|6yUpoV_ێj+{7|-/Y}m/2VkD7m +?8 mO+AVΤ@gRd Lj?A|z7Al 6@ -=l^BlʝI<|a K/*{|*P?triYU$TJjYP%F.npET#N So/qE)=eZ2S&so\6LLwA]2wvA]6wkYtE ݯ"g.gdlhVym@ -Y|E=[U_ocmW߄U}\A|F8AD87YK$NlذoIfaE\&qɆKf$4MB6S Ly>6>6ػԒ7۴)VwK>6coWw4}M6qo>&4?V<_1ܪzm[e9_jغ;R_Η|y{2}[> mAd ^ApWpv)&ܷ Np߄3^7ʿ>d?W퐶)씳pBEM ˒gKGՂT(Bynxɇ@t1 TdYZڧDDԬk?*~Ng_bNbj3*VE _4Eط %Jݏ'%v|Pa\VNwm{M>d:)KCá6WoEb-7Tq8R#i"%2MУY!FxEH:LF9Ip8eITqC{_.ZOi"{bK|dzd2&Lc]cʱVfhBqr(8 8(w͑5TbF y*'K-ɢlUo*Ys/"Ū!$qS롫~6< e/&Ц,&ޙlwWF(k @v/)>5Y:*>=(zc۵ę p94Y#^*4\\"sCAɊ9eGkYߩeﵳ *FxmM7kpDA"D'E:eO^ M;8ݹV5ߦ(%.fSZ~WN7:ߡ{ i"~ mR颷U5v6u8uãET4bE@ux:_٭:ܥKfPCCnzOi8M~,._"6E*Ech❡]CX.WRg7*j_v1M̺r}WT]M;(N INCR;ʤOT_2!gg]>|//wMMfc2?86ulzڱ86nEJR|7IIMUZ"|K6Y]B>av'37q1\5k6*խ-_SE?-i[25O{(ݩ$(tf$56(J Y+_~VKV\!ܠ˸" W6@_Vd.S/]D1mm+bm _tE&|fbA|@Y ě86@Al ڜV۴At@[ ě3)@ A|b Al 2@yy!^|M4Z;ܵDǧCk>^/>{yEp)@q3K^{ˉ?]~|}A|,ݽPQenDqweeUR$)DИLRυ66c&.,qFC9^p mBk|EȈC6ccc&,{u|S^VOyq]]cĦ+Byez:/?V_t⧫"3le9_&;le3la+ [&]iW#L]o}l 2@mA p߄}l>ބ}SO O@?r8.p{mr~˼Njj2> jS|9L+[Ηx43lfLːR%HQ:!%Vc'٥.ghDSҾ, jɂgGAЂbO(-5B ?ϊX*:X̭?Íf;U?6 uCjչOOdQZ6rW99| a/x9:R'JȮ#ev)#ME)b'c\!YhI(TߐNAKx#) K85lL+滎MO;6Ǧcٚ܎ŷ&^YiӕIYtL\@ SdkB=թФpS'9G>1O6ݽ>K]ΐb,މLj-鸵f!}P$AI:+NB)lr(8'~%"({e*6FFQrLQ q[Qr(Lfk2:+xCץBSEifRSK>:)p&-8xtsF:e4u)A!=%\/v7x\G%1E G)ehpF?/)(+@OWV? nHN*>̧,1MG+/M@QE޿yQ?m5xIpumу~g_B/♗A9]'Na{Lyv[ *>2ހX7Trc5CԿyEhҴ&ctdzd6&c]cұ/~:| _ _$Ew=$)Z&E)BwK~!SвY\ZϏ(W՗ ',"E*MN|BW&wk$1}n# 4 srձu(nYu>:#6?> t'w_i ]N.}JV؜}K{5:xɒ0p뙤:r3ew؇_TF8ĢEd:O?[Ŏ\$D KDH(dAFcS>ġ q_~:ũo2id6&]٘L_1yDZ86:6滎MƱimEQȫE(B^Fl+$>\GEÙ^ U~AfR]f6 E[[ƩF%VT~vKȇKޡ?}ԡC<A촆b=62?Q nНQ.-Df9>AL$)XQ?A5W]Dy7@qx~p4?(C"̓Pt?8x.]LM&c2LyϱifؼtEዟ_d/ת$׫/[ӥ_nIOm=Vˆ/6wE_}ml űA뀠~A; ѯ>CE@ΤA뀠ϰ++ b_d ~ HM.}vؚvaTK .'"sakYq8lǎ-f7w2g]UVs{+>pEh9*X3 #@f\km6w!'\ْ&:]Td׸"iɽ ֧wO>e6LSu2=}e]tYt7/ynOW_,MsƦk}`d.IovYdX"`"o'NȰxEE@Op!4. l%Ch'4niMͿwO>w|]BvĦ#>kи鼼mW_toVa+[ [͗M Ļ@ ~=G] ǿO_.p}+;P+z}Jy9 vˉT DC5 w%ğA q,|> nk/B*220FnRQ,H/^DK Q[㨡Gʼnӊ;&ӡi)@D;\ۍZ("lc;駱>t? %;zHhRQ*n]P+P~[SzLvTb (V0#7Rh\+E"pv> ٘dZLd2&5ɼi2[86-cul^86fdcӦcuq.ůl>M`<8%^Yg.*kR(!t}B!¯P,_NCо9t84Y"˴. JQТg ^rnF'A%d& hWcBwO .hNY`,cKPjl䪩[S6 /5DWκCvGCY3=.?v?i~}J,;0=MV+(N%BQCit*kY?<8EQ7CB448su?QmCt#_qTѸ\S{JQ{&2MJƚ∵Cֽ4_Qۊ&d6&5&1dMfc2oe^6MƱ:6-cqlMƱiӱ:2bE&| __dE6| _Ȇe6IM"h$)6Imbh3IMR^}}^)EȖ"(Eؔ"lJR7KD) k#8d S] X>SGХNc@#|U/(~@I e j+P^Liq~Ã)2gBQWD/R+\=x9ܓiBju?C7z:;k^F'Vq@ԡ:r)EJU[EQKH٣=k/=!O.I*^| (T`2YA\sI8%7k&wJ˨#FŹg[jo)`,s͎,}@.V8Ǥ)mn^1dMlLfc2[٘L&5yyƱ86Ycql6Mֱ86o:6Y^FlȄ/M"؆/27&IIRlbU_!SR~]E&\:6-ڊc|Ż뭓 _W_+ wql &@N+,Dӊhw&6ۜI<b " c2YKV&Y6 Ⱥ6>ө6/Lu7]Tdf=Y"Бz N͗>a8EʅU\<I1( 5-/!;@ ])H"4Zw01i-JՁeH"ߝ8K e{i~G6s~D4̶"1z~C*Xhs)u S=Ҕ7Qi($j8YˊAǙ!"Sz1r:`h ݫuJoyY&K2O*.N+R)\")c2ЮW:6zCqj55B'il,։:bX/NY9ݽBN="-XnS$F s].?̂FHRWsw ~[Šw[Uq9je(UTA0;T4B>T@s\b*It^*= N#D5t>0I *cY pY&B֘ ٘dZd6&5ɴi2[?86&ؼpl2Ʊ:6Mfثm6|"| _d&|fbV&)2ImEb$)IL$E6I-/S)Eؖ"(Eؔ"dJR6K~+ESpCT&Nzl!7'hHp\mc; cW4]PKRrYS/.:aBY%G6 ^$,SR%e\gp]o~,H*w7TgNŹ% `E$s`[nϵ >׃&TQ%SH'h-ӅQ&$JXFyIs6*+i2W#~.{|nb@Qw\?B +ğgpSEijf7'w䬾ҡ pdģtǕ55x:iNٸ(MQoZ&5ɼi2Y86Ǧ]&ؼdccu]2DՖLxW<) 9]uULM0TD7&gN:{=U mKUZU.7'<99XLYT_6x}<" vBY>}VKWeW'6/ɘdZd2&5ɼi2[pcul^86&lcӦcuUĶLbh؄/2lbx3| _m$ū&)6I~]eK2/[)EU_k2/ Ε?_}cӢX9W_fko&@N+ޠiA;@mΤ~bxA@1A(R"q&B5}}و -}_*7?ᤂ,k $~8 `B ;"7"(Eؔ"lK^"dJ2RL)B"^<=Nŧ,:tI*P['GGTNڧ /UˈP C@(H^%.v $@u)]Um*DdV Un,)ZaRGE=ޑpΪc:1Scwu 9GIR`p@Pp]Sh@1>(wZ C$(q#!X_X#7>9e^2Sf{ʴ8e6ٞ2SSf{l2/ԥ]^d2̛w@v{ZDt,"/4?"1/y "]5 `.i D8V eXm'N1"d|=fAh]%4& ԵFd>Oh7?]*/NyE[y>6풓iqW+iWo}-}KhE^^g˼;E|vv̛֟/H&FϗWpAM > G.-Ny<ǻ=-8+>y_kN'/a4:ﰴmg'%ή,',+m+))e/.#􄿢̗Q|?.j>t2DO햊|1(KXN+E(8Q(tJ$Z˗(K5?|^k&%k-Wo] boT-5"B֎>g$+[j8RS` =qjz9jX͂]EPIQ/ <)Avu F1)0OLdZrlcql^9]UKv0UdBT*"h[&S ""_zi~Pnlj9hO}Ԓڝؗ0S;2HtAכ,@k}ҬupIJ7h-KCT/|NGOy,*R)Ci˂[#mpTܥfr\"^2qGyGYt޷Et8!t=SձхdTY;ҫ@ifqQܳڦh 7q վ"%N/"^K7>IP0[Zѵm ByVN`>tE䔝np4- zD>gPx8G7N<_ͱb '<ԎY\ItSDAUR/S`_S$n4riTJ-h&*$^!Z S1;mP7(OjNV*~BԤÊ3GReR0QJBsYJX.z4OLdZplcqlZ9*|O/6Vkn$E_HR,En)BO"dJZ"˶g@jIKZuV%׎s*:Zl}GPS#"\i鑒`Yp!̥uUѱC9^O,ıE_oy|d^V-w*19ïi_F9/vWROE5$x~hBy2NU>S 6AÕ>w?Q9Vv.G:4ɴk2dLɛƱiױ86ul2M_p&XSnD I:XpcQn}Q >ڀ#gI:hP)^RCQ$\*uFtOɇC%9F2Xp;'Wf ^AM `R ܴ;8;E"ߧ Y6ZqPaIiBZ"ʸysq+HZC7x\#IdH[3AJ&&1`򟱯MO;6Ǧc _t"xVI&)~:I"t)׫/[p_n[OM&|OT_[86 wql6@: N+A; L D3)2@: "AM%^8A' ‹~r ;Ƈv@S(Uq턂uDI(hMeRh$WK,?"0pϚUlp4ͪtcV@sWGP'z٥TY&##ėB)1$SrA8ȓ+e))Ww~;vnjI_#x;VwO>e6LSu2=}e^]~;bn^_gꋟYvO.I] D?mȰxEE@Oda. $Ch]'B#:Be!4.S иfǦ]>6>6:>6=ez:e~.7 ۼ]Bv^6ow ]}_/a+a+[ [͗] D@ =] ǿ㻧LO_.p}_P˳/ Lex*I"|tED_T 9OY#HVnV'/_ª.C_Vh`hd\uҐyuC Mkrm:6Gn>ν"֊ݻ|?5w\6Aƿ6,=JZST"EnթxxE9%^N)mTDZ՗4\_R|*T6+_`2ɚL ٘Ld&16M7WR*Ʊ86YǦcql2ֱ86m:6Y^.0o;Ѹ4Iux'h*RzxAA_XQuY;w 錾 ʬE0 =0/Xeɂ>͔BMە! Vm*T]Xߩk5U$86 /!EVB(U2T2ЉV%i*B7j2."o B ~'tTqb(̉tqQ;-H !I28)E¹E3D$Ќx"xyR*VP2!<`y:24E/6f*?m4d2&5&1dMfc2oLo&T݌cql fdcqltlıjE6|"| _d&|fZb$6I"IIRd$&IfOԟRM)¶E)B!S-EȔ"Y-Ez_@8_=}fqte$H=4\(k+'vHG4%%FiTNR@r;\T5lKQKO?f6h5ћױB*UAAK3yԏyD_r3ta4űqܬ%i7&)'rzd&16Mfk9BMfl6{vDTU֢>S{J++xi JUiQ6ȹ(fB^2'@jaltM`ܯn'Cs(Erڃh&ډ_S>(Cb s=^G tPrC* *<9lvAA\ji(J _A#8YiNƹgXeMGmE\OAmT!.8%B:A$eAzJƩؘ4c A~)PᏫ:dL&k2-Lfc2ٚLd4>3 YcqlM &dcqltl~s ؄/L"؆/66vILUe$ERW՗-Eؔ"/5䟯xױiV/ _|̻cvgy wlݚV<D3,3Ad ZAd 2@};\,.0|$T >eÎ*ܷ/?MQ`?źDY6N4eQZXU6sF$4xYYT_a?.GwVD?$^3PSI-jo=e2LyqlN)=e6̛o[./ %{eڼvWkwv{ZDt,"/4?"1/y "]5 |"XE8Vul"A+,q7Y'VeXz o 4.iFed>Ohž{|lc.m<wɼ+r|v +Bw +B7VvpVc/ΗiseH˫@M > ǻ./Ny)R'Hs?iWnCh@4 /+P nՙ6":>ֽ]6cզ, -̡LscQWjѡNV#k`14penũJ4\eyKH6\=x m{hJvs+Q_i. A041ڰ/eel _3Od^rlcqlZ9$ӊFN{w$TLʙxER=wzEwӉvR=xDB<4/ۼƸwA[3s)*-Щi깗HB2NC' \b&TnLd5td2&]&ؼl:6c&{BWh S}F|Ɔ(eD4dyQ/%H=}.DFA± -ǺabEt1!rh_ ؗtxAa2?1OGEgJхKBdgW1uNPH 2/ OTM(LLÇ3_r41^]c798څ}>{)ur8i6%HIrj-=1)v@c^ 2M"@/=\,u ڦ8նUWDvDF8jt-5HF]$ǷȆ [랆PSaΨ|>4PZ/.{C@H[- ]BHSmpSWDB/ya2ɚL ٘d&16M7c±86YǦcql6ֱ86m:69?'9u<#륣)O1 Cr/NU'f^h'مBlQƏyeiba׋E<%nNEnuty9)ɇAjBUV.r-Eq($h$X, SFRCo JS⧢x2q @O池 ULI~L7rlpY V-Tyk~lͤ(jZ~W/VTыpSX($£ej&맶3ʳڨUtt]_Ke(Lu~Ē^[Efy<sDk["qyl_tphM 2Az" ƽs%=xCpjr9u:3jڔͼ ɘdZd2&5ɼi2lƱ:6-cqlƱiӱͱME"Ȇ/^/6L"؄/ _l$ŋ$E&IMRHRl$6IIR$E)Ba[ТaS)EȖ"lJ,Eؖ"o+H4G\T( E6JHzQYNe,}S2\tD&J, z*M!_T#! .;[CGO#[IG|t2R"w_OE'z*\RuPUEW9<DT5OXEnUs~zIAâNsG:MnB( zw;A!#nį"w牊hzQbiJ\}Eˋ[2\L&c2d4dLM?86Ǧ]fؼdcӦcӛcWQݬm\y6!ZQE@XJ֜O: OjpE-3BG$ͪ_РҨIJ&H5tUAO"<#`WzP+M5b-\XUյ{a -1~T_>)>L|Q_/Z!?`_nZQh28GA ?x0%!sHIk߫qhI*rDyGS LT\6TdH8E-_ F8C-aEVrC>eg;8j%5H2Ť L)E`2/L&c2Yia2ɘLd6&ӦfqlZ86fؼpl6MƱ:6ǦMfd-6|"| _dE&|f𵨾l"xU}$&Iѯl)¦UeK2vME2/ul^+w×h3|=_} ű-ě8A;@oN+~ݙxs&@ D+ o)9^>5KE~!() GtLo|2]MƁ.:})G@5t 1~8^{ A>z/fzʃɆ`QPw +6e]ݶMӱ>$.ߞ%PS5))ٜ2S)9e6ɜ2o2˴KPwy꒽l2me~ B+Y;E^^ h~E@c8ZT_17"W ]Ap~ N.'xE6Vyq+i̋"'{]B#-"%Wx8uj ˖euBݿEU!X.تsYH't6ij8J^eG֎/n?R**rA&-5$2G .MZ;?=S@LR]er$!D<+K~ f;cQN?u8nU7v̈l0*kPo˷(o/,r nRh呄|ꐠzM.*q"4,''x(elΨf4F8qS&]i٘L+WMwvl6+>(\PTV \xU^DJ| |btWM|8"鬮XuvW4G7:1zlszRǖNM?(0WCTzY{Tb\6PAHQDNj@ .r#bԗJ !^ttxi3'8N_Fޛ~J:\EhG.8QhO PG#xLPGERql?Ed3DEfut`P[pʩ>t\2)rr!@ 8!:xQ48 X5_eH=6W,Ru>.̴ZfCRp)Q̉zNl9r•X!9"XaJoETR(Q]%4 _fو"Cn7=QG5XC ?Kxg':PaJV'OA!~h{ C]v(1 J#xRA&]iɘKMwvl6K^/E&|*|MRt"x-ERM)BRA.4gthG&,sMwXeyI8!},:N eJ ] m*b+JK8A_?klYIĜ@IuGA*jIƃTɓЈ/G8+y2sah)YƢR.a-R.~3ƣ%U^BGvZ~xзK?=1]&(/yRr;듌L"ѵ` PQ#,gQZˆcB']OqhIdrn_݄C#dX0^^Y&1wMfc25ɼ4yӱ86:6ǦƱi2sB~b  N@7"|ֽY^M"H=yhEOa;pwyHd:!j[,Iђ5w!2]p>EsȢt'絘:nA?Q_8/IIǷӨq{u?sQgrN@$ŅBIS8O{wY \%͙TJM$T'\,5xYQcwh(dkc.(EHB/CO9x)M%js$EiU>RE/\5J4LOdZrlcql^9*|O/2Vkn⧓_n)O"'?]pt[׫/؄/ _dcx&ѯ촂 D 2@: ΤA;bѯAl ^Ad 2@}?wIƳu?UE4)mcxPB֋Qxkjtn{V&?[j'7+cD٫TxcD#TA,B:-~.}߹:`wXCs쐫V %~FNCUWPJ"~]FeI p`Mz6>6)ӧ|.wyKh܎t}m2? ok ]}_/a+a+[ [͗] Ļ@ ~=G] G㻧LO_.pn}ǩ6";cKQlr)J>~%4\UQ*S#[XDũ3 6Apqkc6sL.M1_'+yjC~Ke.IEMA`S,E2 YkpP )q&ڂm&z48?\SQm.y1ePX—J9!%iRppL ^ {}jJPgE,Btx~} q.r8e䉂{w&EGxMy_ErS- gкhJRJ]!\2x)ґK_6;RKE㧌jREQoJC)z*Q9?Mt"M>rHq!~o]LwMMfc2L^96ulzڱ86{nūJR|7IILUZ"tK2-Kq>jVCs QY?!MT1?4]EU8)'ꁋT zXMͨݩ+vl@yΈ- q.Ul H3( ͞nsLfc2Ldk2iicqlul2wcʱl4c>Txnbέa($-h[wS,ۚdXx|9H8d*v}S1!yŝ;J-XDiO$E4CD颞e:u"q1,,Sg0c*JJXTWn{&ufrѡ&1<-8)7(Ľqb&M)dڂ8Uu{Yt]z`LwMM&c2-M^86ul~ڱ86{nHRt7IIW_|K^}݂.8zEw ~՗ _d/6ዾűAcAvZAi dgRd ޝIAl 6@ 2@ "-K9\ˁuBT^\P&.kj, ع\p6+n-ɧQI |&Ւ.-f% <Ksw\}.Jmd CTKaڞdOخBPRAJ94p:C_$'gD$88W9_ڊsFIO2?}lNV ne~.˼u7OG"yE@w/~gl"56?]cC' vN2@;"`"]};qbE@E@,2,~z& w9lKHL]6FvB. wd|S|l{黼%4nGl~:bov y1vOW_}ld;l%3l_7_&&oϗw 2@Al pv>6p:2=}Nzù+TQ@q)J׾_`*c8d Qo?P'gU:꿹p[eoT[ *}G|n*YDWVcPsV.Τ\ASUsȇj / E+EOd3hy)G%VWjZPACs}VһvRwmtv$j"AjI\nOVYx?%in;JHJL?'DU^G#w/^)@s&idtFHtJ} {,.1CP OISg 0Xxܢt't}ShZ}U"4ǵB(WilP h0cz@i~%XT( mH5l40?F/&K9L49 s E.x"8N,R\ze;8(^JI'tͼJɴ0dMdLfc2[ɘL&'&plZ86&ؼpl6Ʊ:6M&d-E6|"| _d&|fOׇ$ŋ$E&IMRHRl$6IIR-IRRm)BRL)Ba[)EhOJ,}b⚪$_^_эW7ŢVQQw#$ݎ'1_]@i/)N9k_\`gjhǏ(E{ RX(gű9T2[_!kuc/*/6^6E%ÜB99k`YВ\s>!\HԲ^dG$Gޕل*jCӌ@ f(]Z}.nj;ٖ4آhDdGю$WMB x=L?:y!uyZzR,5<^ eI"kS9ۊgZH{Vm+>Ld5ɴi2[ɘL&5cqlul2ֱ͛86o:6Y>F@A"t ?FK室р ~'^YDW!)*{HkmNU?5$@"ln7|8cEp&mKTJIĜ_S-֍f!.1T7`!{TD>8G'*9"(11TaY%Tg{/xj.`r< R2M邭XHf(w (OueS:|j.i_WW&G?>zQxtK'՛ຣĿ="A\e CI9(#N(Ri&vҫl-P;/&d6&5&1dM&c2md6 &dƱ86[&ؼ&|"| _d-&| _lo/~ _&)6IV՗MRd˖"lJ^U_!SЯhd^+]ǦE[r쟯x7|77T_ vql &@N+,ěӊhw&e ޜI<" "Oh]e$#4?4H =rM cKUhZD'cjkTg(Ԧ HYׯԣlPhIYB{U6L"YGUSWD&~ܦvTesX"\ġʺK֫clNɞ2-N)9eyɞ2LuyqW.ۻ.]添`.tϋE@^ՀY;E}`.I{p> E8-D7A ,q6Y'VeXz mǬᴄFp6iqWoc/x_KhE^`.yyEhvb̻c8^T_1ϗywj˴9l2yaj|y.d>~p} W} ùśŤX謹(9C,ƒ^EGx;LhS *zd6k n .ښy)c&rOY }g;uC;OD=D5<qD(E2 PON%ц燤V#(hazauIy\E=S"I w8ɒ^ݜI&Z+/pQNWa̓D_疜Z[QůP"@JAȌ9*8L\:ѧBW@2lec%:Y{Ub{rT~6OǏ&1vMfc25ɴ4yӱ86:6滎Ʊi4#B{|DYp7: Jՙh֓DS1|M(!3wmQ,rr%1ET?<@JCW5;u'td~d6&c]Ǧc/~:| _$w=zwKz-8W_|ۊ^}&|n"۫] Ļ86 ~dl ޝVAv&ݙ Db "ہ aȎ{AV,Ծ{z9ćM'9z^+|b >C~M{;2zSk?ůk:\Amsi.mkk7a}c[ԏ݄Ɇ8BPsS[诚[tO.mu1YxXHJ+l5nxtS&sSu2?}e^M~;bn^_gꋟYvMO"B8Apہ]Ȱ,2,eacv9ddCh_GhL]6Fe!4wlش&_ǦO_cݻOm>.q;b{Iht^fᶫ/ze;le3la+a+256y{ h"} }|SppmOImC"P˿R%0*C!ˊA/[e\b%|w^$p Y U%RTG8>d"#EĖF m@OwTRE*2Y??FGrK!$:w0YKԏ~eٲH_ MN.4v+6t7dhgɞOWAΡ1O!PhAt"]+lL&ulzڱ86}ݱӿei5*Rx!Ӵ)_Xf3gci5S-+U-re`, )H{Fݯ8d 詉.yp*ߦ6YD(!3}Lh*JMISx\pj6" >%쪍O\p3x ^X pj/Lы[co2$1pcwD7idarm#X0kvC 4?[ũd3>[ RBJO>-Ur~,/.sIlD;: (ZIHpZcǫ,Hnbhؓ>ul%_K*)OLOdm]Ǧc;[ľ&|w=$)zJV}+ERL)B_/ELB6cWSO鐒+Ʊd_M>ES]|2Uߎx\sr)r:8UDchI]UZr3/Fĥ bǎ"Or8-j@ťMwΥ[4|%@Ф_G Ys#M&tQEIGMVʇd K]jo&1wMݗeɑ*<,KC,*JUOgI 8A s1NM~+=occql:ul2wo(/"DbZj^ּZP/8CڱE,U6*#RpD]WhQ/&>];4MK:%]O Nt۫/:m+mol"x7| _﫾] : N+A; 3)6@ΤAp63@1l/5vΚ\̰Uu۳kͣOǿ;d*g5o}@M$5"P۫".$Y )qExps8v2ϸ")ՊmHu}ı;j~9M=e)9e)ݾ.MؿEy>;N/tu"ɻ56|ApAca. } ذcdCh]'B#KȻL]6Fy͆M:>62};O2}.Gh܎}q;/{c?]}̰ue:5?m/ Ļ@ pw>6p>>=e)vN9i>._9GRtUPz/$ F|K=!m>YCIbY87.|[^W~ٵʡ:z;s*J8tD2ϩġE/DabY7ĦnBʨbgE_ey;~:x/)(h}v*qƺE~if|j-3އl'EhDFR s8bX jEJ ȘRܚdx}ʫɼ0lMlL&c2Y̛٘&Ʊylc±86fd7E!sG閗)]GXE mF~NhJʋ?Ak4 2( TSC(oSh9ѵkA fT7W䯎^d4BέZ2i{[Ex} ()WQyTB HKpP$zNB 3U`K@\4a)vzѮLK\UήJx(p7UiZл-v1h%CE>$+nCS$I!ڔVh::K_&߲AWIBDjԜ{?$K5WuQYxbQQ4IĬS6Բ!I[,P:绞=DMWia2ٚ ɘLd&17Mfk2cqlM flcqltl~slx؄/LbȆ/66&I"IIRd/$&IMRlm&)IM)‹RM)BE)BaS-EȔ"Y-E4YN5\=a( gxiVE$Bu U Ԋ }$%"JTE(Jű[k&pwJ:/23"`eW%hۀ'Z~2wSHλFvAR+sM]u @9U ߜkJwVy;&1wMfc2Ld^dvcөcqlZ:h#|e w\*TT!< i=<^P]N/"zUiR'gY\_ N$'DҦֹ:89h񧬰[R "zNqcԣJ7\V:tG-v@RzE'j.7=']&*n!JV`$>7?}3;ex ]唑r(EO&-$1J N:J Yq3_ȫuvZUnn&zI!PSD2 nZ'fia2ɚ ɘd&16Mfk2cqlM &lcqltl~slh؄/L"Ȇ/66&IiE$E&If"ؔ"|Z}aEaSf)¶5yY}am|7yӱV_ێj+{3|-/>ūc/ :ql6@-qiC h{ZAbs&ڞIh92@AtAd 2@ ߀ |ԻdxL3`rLo[ԱoߓPAz8[l(&+{r]z"Vh_͕L:0Zgo2J"@/1}+r%)wǂhsE*psGFasʼ8e2iqlN)=e2LwA]2wwA]6wNA]~uw%Y*bC%YU^~l,>dlVn\Btl#\A|m#l ^!,%q,2,,%=1,2,^v9KB#9lp2uF>$4n3uyiޥ.tަNKN^鐏MN^7r.qC6q Kv Fh-t8_í/.|8_rغ9R_Ηp=R_6Rp}@ W@c up}۠AM~ !ܷ ݯ8o51uDS_UxKx9(,ի_/cbIฤJQ=M཮nֵHR[ L}&:8x)\Ufˡ7Din' 쓚և]vTF.[]iգ|l! ~Rp˚٩ $+W?GMb/kñQ$3(AAQGyM{rw'0t yl*)"[.4ѻn"S܋K1!5b([cQ-<;ݿ0NMOd^rl>ulcqlZ95@U;QI/nZ$/Qֈɗ.=zys}tNQ{5x9U=e]^/v&‰vY C±nAI%|.7~aZ5fH wG;ӬˉѾY,O?y$!cwۉhRIWOaFγR(Դ/W2 p@*[#Ykb%o[DXP.PE2ܪԽrכҪ,\Q y<~/ E7%! P`DUŝ `t<Ho2B0~E$fM*\"J%5t@-#OthGM^R܄r# }SE EtBa5J@Ft x˪Ux׉7z|] 8+>!ah~0ɼk2yd&16Mfk2fvltlMƱyӱ:6$E6I  _=e#|g@HMĚ@pi8zՕ4n4iZxyE^6Q4x&1wGtI-7g(*LQ#,6OLUߵrk>=<9$)^&E)B}!S7J_|Zp Ε_N t[rb/:Ȇ/27톯m  @ 6ql@вb xsZAo )D@[ ě3)~I O :Al 2@ D򜳂cM^\Ely%]c %64lj[n)Y65ԓ)w|{g QjE^G֙ 1xhM/|dYroy_1/%,WUrT7;I`w56inZ"UG۰H@#r>e:=e)9eZ.]OvWN#6:blO2}:/4oyy6[>ӧ.]O9./"6Flt^"*/i^O-//:j V}|dd9le;l]L&M^L&)GpY D@Y Gp}l>2pm}l))Oy꾟IN4sݿs8<exkq[ MWRC>Bp7j\:\7V.UGdCLX)D/,TCx~bYNb"5 ,d U$ ICוKgD@G]kp)á;u"P~̩'G}pI|[K(sP}/4E9y} pV^-; b[.Kx❴5I͝^ExO&d2&5&1dMfc2oo&Ǧcql flcqltl~sl)¯鶴0*^էQK}Wp43E&bOtAޛ>F!;>Y^΀cIIȮ":]/r BH 3B/newџFim}*.hWY3OC9}K)>_O^='(O2O8chF'd@P4"r' tBeqQME=ߍSȬߺ>E BAyK T Mts PR)k6Yi}f'7)œj$hC >)AS\Y# :zR\fr<xʄUO$,^*Rr)ҪZSTxLB!xyFtēCC1hO#iV[7.%p(t!\"IERη?H|W|yY IMY$yiEBSnMkODy_=zN+\l%'5NT]{&1wMfc2Ld^dvccqlZ90%]E}mC2Ȓ]D% ӬmȃOS7 t/Db"W֓H0f+ Kh*(qVg{V9nZV_tX}m/2዗k^Atml Z؛ӊ%ć@ iLj !="j&S  @ "$l*j_v} =KSAIyl ֝;殞j8DF.pm.$4/{iGɞ뷅ѧ\g7e-eor Hɂ!j䢯{\=_yyqlN)ɜ2Sf{lN6ONy%sies]@-~"C6tof"Cf4c%YcU6E8B>F8@A' &`IC6 ~7`ICz6 W,]ȇm'B#8L% L]6F^1u|l2|l^wiK>6iS~|l:coWwIh\Mh\EcBLJmB*/wp2Ηpm ;l]Ηp=l%3lհuw/|y{2m ->: 6@->A)Co_q8ߡ{d5-<#ׯ"y..nMxF́5J;d] qR"ǖHۥO.17MR8"t Uz?< Y2❌*' 6z_I"r.n $=[ÔEgYDRyJ)$.QQ.uɂˆ:^歨Q2x\ɊQ][ÒPAGM¡eĽWQl!9חw/\_O3L( [y^G|nF5׫&"T]U^ׂT4Ґr+A^&өiɘLKͧMvl2MKƩ2G"N .Q'8ZBq/SdBL8P)!ᦕi%zeK?.kd^#~.gD>x& WjuqX\E%R"?v^N_DF8rjv͗{/?Ae.gAP_v!!u+qtP(hg^U܊J"T])=,,nh9D ?pq%+mAN= RB* I*sBpC:u+ZoB$KQ$92, (/R,2 KM<z-kJhrS!˶9ᑴj#t&W!k&k-0ߛPS(oek91d!)7Eq.['jVR-e2̟6ɴ2ytifؼrUş_d/"IiO')6IIjQi)Ÿ.Eؔ"*EV'se[D8O t[rbc/:؆/66m]  @ 6ql@7ć@[ D zV N >Al ڜILAt !DbAl @ C`~FF,P&Uɫ^-TʿvDלr4eSGOT۽!4MZN^Cj/l'ʃ[*@n+TCE<$o~'5lQ. ~\&2EdrO^RO_rE+pA{?WE6젹Owx![uo7so[;;ykڻe2LS^e>黼u*biĦOGt}et^^ h6yM:e:=e)ho|zwyEN~˫M?W|yyEh/}OW_1[fʧe:/氕߆ dɫd :# h7 }t !#&[22}W)8|Os8W;sUvOԧn !k+ (I~a,"8>4͌OQ.z Q Vk;qBGyuRTST*&Vמ1xx.-j#",J#< 9 ;Y4ޔ&7fb*Pxܹ+i K]Z8ѴoN2^mƂhJhI>+<լ/!Zb|ӈ:`2/Lfc2[ia2ɘd2&dMfشpl6Mֱydcul6MMo-&<)俜%~4~Eӄ%"ݣïJwgюxO-ȫѬNiS⟶RKbNEӖ("ZWӬ_wIr%ͭtq8ҠD=AF~Rp­䜦V٤zB蛭\8 2'D\Z)wCWt=qSpHLAI7_JBѫ5tDFMOtVzз_DЩА`$C"aOAOd$|#&-SMb'SW Cu'×~vzz h9"2{kU0 u3:ҧZLCͻJO5Au5;^G Hug;+1MRկOޗJV1\ 5ZSKj̣,!6K ;Օsm9%-8:ʢ ;XC ~l /`2/L&c2Yia2٘d2&fql^86&شpl6Ʊ:6Mfl/E6|"| _lE&|fe-$E6I"IIRl$E&If$eJZ"dJ/J6Rl)¦RJYwxiF腻E"G~$ O ["K**油,nvR@A).:I`.{\X<*1?g=厺e{~dkWm|d&${TR`*Q!o<Λj,w Jm҈-uNuv)?},DcHU%3)/~Q&7I67~6?L ɘd^d2&5ɼi2lMƱ:6-cqlMƱyӱ:6ŋ&| __d6| _-|$EV_l$śIߒ)Em)BRl)kkUnc//>{V9nZV_tX}m/2዗k^A|ml ^ػӊ%D@ DiLj !=bj&ES  @ D"DwZP{>?ސiBcYq=99D /NT.$ OUs(D8Eiʲ+|𪩋o}ՒpN4?7b1b)_>| b!8!%?&8zΣc۞Gsʴ8e6LyqdN)=e6̛LwA]6wvA]2wOA]~uw%Y*bA%YU^~,:dlVn\B|l#\A|m#d Z!,%q,6,,%=1,2,`ù$4!qɆK&SwIhCB6S WL> V|]꒏͇|mh%]~#'/>}mWиd!oиE^-t8_íp[|V2V^ [wG2ΗG+G@Cob }d>Z}Co]; />>G)2֮ῖ`^~zHQ)y v躨5$\/ET S[U=1=uIEr;wUMDBJki.,2V.dyE%4~fnl0GnA0M4HIGΊw )풾's8%y{vNnۋL GI+SwYWãHQSSa_ns6@Rܨ~qٿh XL ,)FUEDDm3Yͷ8]c, iK:mq1jiI<4(DIP eΨ).&)穂(ܥ٭V%#Ts CIu.ovAy_ȓ `NtxIѠ( u Ƚxa'6.E|q\n3V r]h{n|߰[q1K =+^ E1O]?[UZ)- wkPޒxYtZ)n~xc:EQ b ԇ4>&M.!ר=r_p>,E $&~rCpiH)ux8VBX4$ZUM|cӬҪeXF2<)^^,y6&1vM&c2od6&ӦlMfdvcӦcul6͛_86> T"GQ E%)]yÛ#"D7S 6 %ahݗRMfGTks^"/:r Bn:t(^vesu2H~"BrrIIMGH EEPy 'Qrj([Ifq R [M_BX)NKfyC[uLXfsHp |FRU^s_Q+X|.vS3ܵ<;nf]c+D\ߕ qb=77Ѻ,#O`nite2L6ɼ2yti&شrUş_l/"IiO')6IVIjUi)B.Eؔ",E'se{h+购O+Ǧ/EV_lEm")ć@[ ě86S  @ 660@A|A9b C -D"Al Ad[ *T:oX 0Ah-{}]e.J}e{r`QSB!4*pnFc{`Gyk/DT]e|MD鈽#"/i^OՀ-//:j ^}-jl>5 S  @ 7Nz NtH`" "M[cÖEE@,~cB#ȖHțN~pB#ȖHțL]F6|l:c!- 6lثSSO~ʋLw?}W䷻|{Eh|؋Ly?WƷOW_1}1aJe>/氕d>5>mjf2 O>:Al Al>:c h# NNO?}+PN:p9+ù~cW2q-g77 ! yժrכ|fQRFy6=W@7ߵύZ/S]/'5 P)8+[!xΗz8E0h8U5N> O>?"rq_D-1!@%T@BnҥVW.chQުUY"܌=E6pIxFUWdrN JB7ɴ0dMdLfc2[٘L&5c±86[Ǧcql2Mֱ86o:6[Ǿd=`ӐL0p?TDmJ,8xűGPmE}K]09`{]"RBB&l*rȲy폓e*z#%~nJ-c|e#}. _ڝ:T*e/Pbh{؇IX,8wrZ!k'&HCB}i><%%iRnj^NR[(96i4q覿 h\9-j0JlΒ2$AeiJO ͥ @rPiKכd>_qybg0<_XT(Z^e X<7qMh2\G!Q`S\n̿$P6z)LNrRzQE g&K" TıRw/J1e M4.OHi2!|Θ~zȨPvfdaq QWJԬ|vDU@ .Y5D(6+z=ŭkEN3q׏ceiq!E8fT̄2~2я]LEwT|>jpMBR4B Pp= ?Yy{'3h!ZE&1*/ p=I3RjpixtM>%3'i&O^t1- ȴ1Ez*WDPZ:*ڦqCQM%x3xx?ѣ}L %Á8v=|[1L-٘L&1OMfc2-Mtl2MMƱԱ86[M5!x?G/#rUv2 H}P2 a6Mqs)/JISlꄮ|D%1դWQQ*k I~}xt U21\yD}z='i<.E)&:5E&S->PN Q(e\71# 8?H{zwP6dEXe|֨~w򡽀iRDSR5wEF _I= UN:ZNwbDAtإ_ـrɴ0dMdLfc2[٘L&ӛƱydc±86fd6c __lE&| _dś—IRtZ}aE6IIR-IRN/:Ȗ"dJ,Eؖ"&//:M^&o:k۱WmśceEvbk ^A|md Z؛ӊ%D@ iLj !=br&e >" Ad 6@A:θxW%yqԤ(n*?QCcÏ{2^oN"ת [~jEwm-=y.ԹuwsK!qEnFYU𻗷%%|jϣhJsO%sʼ8e6LiqdN)=e6LwA]2wwA]6wNA]~u7%Y*bC%YU^~l,:dlVWc-s !Dpjcs !pxp :$NlȰw>lذh"p. tHhp!4ù]и%Ch%S?&Ǧ{c!{:w&9yC>69yuɛ%y_ۄU>&4.}|&4;qs /|y{ m [e>/o[ [i5l/t8_L/Lp}@ W@# up}۠AM~ !ܷ ݯ87ܦ"ŵmk0>Qcw̲*y<|q^{lV4st7N)OZ[We.Bձ~}fP5ԋR:2k\.W&F`\%ټ{z(qBnTAk~UprE3Y^GTqe[= ޠw*PU}_YzW%<+ϡz*W>_BPOE pY6;72)W[Cip)5$^(l6 1,Sj}"%JߡhzonjH,e~=n⌐xxCA)(c).n|A72h[V-[:p17xD`  ~׻4ޤđ6>Nl?.AQJBy~7l"X4 ?%z4?C;=bOs- ɩViB;IXܮRJ@P$# ,@Ѷ  ֢"@Tan3Go>؈^o騻?A&[ϊxvQ>һ/{6^CukÐߒ i"URebcvLlLfk2/L&c2ɚd4dMƱ:6/cqlMƱyӱͱME"Ȇ/Z/6L"Ȅ/ _LEb&)^$)2IL"$)LRdRRl)‹RL)B![)Ex![\0ruç8BEHqkaQ8zw @!,nJM,B2Ċ"ZZQOquȈ%iZn>d@t7\Oul2K$DIs J_zB{9 MYɂҋzj]r*if (:RQE)e*S||IN{U\y跾/3JL}7<XH_H F$Z&<G;?jZ˒sUb";l׿''m|lR)_ G"CZZqHy3I`}|эړPZ e炓1>'IC^nTs"5؇tW`8Lx75‡e5D}UE(P4&8w`2/L&c2Yia2٘Ld2&ӦlMfشpl6Mֱydcul6ֱ͛Ʉ/^/2lEb؄/LE6|IRtZ}aE6IIR&)2V_|X}-EȔ"Y[)ikUfc//>{V;fZV_tX}m/6ዾp%ć@6;XAtmO+AVlΤ@A3)2@/gRS  @ "D %lq2ޓ g3e'yGYL>6x,^Y8r#@5Z U9lD|~[R2y%!N8ǖo,+\\a(Z>vm{.s>̋S&slOɜ2S&sʼylOyesi%s]wPw_E ݯ";t9YE=Yn"CnU}}5B8B>F8@A' &`IC6 ~7`ICz6 "p. |Hhp!4ù]иeCh%S?fǦ{c!{:w&9yǦC>69yuɛ%y_ۄU>&4.}t&4;qs /|y{ p|V6VZ[7G2ΗG+G@Cob }d>Z}Co]; />:䙵uMZh2Sx~+89U "?XtSBmdD6~kY栰IyX~EM ~6nxݹ.x/׿pmR< Tc*_jtUqGbeVm'J} fD-W*Wqt&(2kZ#0 RUM }u[麃 7\jpdZє<;%6pUC/>IKM&/DMLiQY >8Q'j&ĢUz)HrSjr# dƩVQ)dRhVXX˫?rXls91]Dǖxmk%W"ïË4=JMS]&A/mXr([K͔ 8)N^#3SDσ ">eZ}Ҹp&(n;rE=I:䪊RVj>v-hH\|+"o5Qc(k<, amrpJ$KI䱦{f/ a 52* hkU8{}!63T'L{Y@zH[WQ%D;vFxq  w0&Pc@C&өiɘL+WͧMvl6MK^/: _&|2|-&)tbIꗥ"RL)«RDL]i2\Dϸp*j-GM%d fN1<w ) 4vK R 媠?C|xM'|ƌز2&NԀ)Y~\WO|LT8\A],4eatѧslEp#|/A`"|vEm=NORR=CQ3y[&1wMfc2mLd6&dM&lvccul6ֱ͛eEpɏyU.y*xi('wCϓݗғ]W]G`Q5TcN(k g!w$>xW4NPz&wa}CYUJ]X&wNjt,/ ûLdSB uTh)DM)M* %TNp$xדY/ʂu }Z[8!VpgLn8ڡJlV _tMo_&)>MR$E&I2I-J:-EӥRȢӂ>]pL~/8mbm _|Z}aE6| _Ȇ/6@A|AcA| !D"洂,S  @ 6gR62@AtAd 2@ ހ ٙp|%y"YfA|"gV謠 +6Ls_P,+FpCFI!^|rtYv Ѷ #Y jxx$E,SJT  ʑ5y>˼䵪^F %RBET[!Ӭ56ҋe(_/~!.E\22ɜ2}y.ӧ }ˋͧ>W[^e:鼼|Y}iEVckQci͟W{m :b x7 Ȱ8A ,2,dq°Ç,6,dȇFF6Fp%4!4) d dԥ/?锏M|l|l2|lccNOO>}+)2e]^"biĦOG-b2et^^ v//:j ^}a+ΗpLvJfJV֕tj2Hd2@}|A }t !#&G[22WWK'r8t 3ʟ}$ wqC*U^@ڿ^`z-ݷ(1{ML?i Qr6\VD/$ʆPuk6JG \]rUg(B_Kk.EMJp95}ӵ RSek887?0:)fbP/@Zu+yU[Ep[;xiS. ʚ ֋%w7IZ˲cP /oڗ*FzCmDɸ7cpoRkk]^A&d2&5&1dM&c2oLo&Ǧcql flcqltl-cZS}D{#4_M!vQJsȅ#k?m | R,R-NS q$4%,"r W(Hk59Kx8!zEc/ :ql6@/qiC h{Zbs&ڞIx5")D@Y " 8FJB JV**o-r.RpR]OijK瑇Lu*6XXeeJAy GK#2ܪˈ).I>Nq Yu!4;h.,Yr9cAi4)ٜ2S)9e2Lٜ2o2Sueue>uWw݄,:dlCh,:dlhVy}@9[E=[U_oc]s !Dpjcs !pxpn :$NlȰw:lذh"p. |Hhp!4Ҋù]иeChS&{c!{:w&9yǦC>69yuɻ%y_ۄU>&4.}|&4qw /|y{ p|V6VZ [wG2ΗG+F@Co" }l>Z}Co]; />: _Y([^n^4v@>z(J|= (yʢKE$4"k^#/gxsMOYX,y! |Y})G'7al)LBY\5vsP<0QKA# $'UOIF5 MaYBI#J-#i,'2sa,__j?}-,7drF;>C~L/`sq.0ΧL LdL&k2/Lfc2ɚd4lMƱ:6-cqlMƱiӱͱ- f)"oF,;ĎYrƣh]8;c )&d3z8hI݋^-(f(]26o'tEҢl۱/)4wy'BԞG`q&-(Y>FW  ybHiGH EeE*tG^qlq{Nڀ 'ĔG{ԫ&Nx( D3Yhሦ(~rMrH+0.j b*_^khdyʥi@biGnNQ:,tՂny@re*AīPeͮAzcc,.aGєӊczQ%<J/,x^ K8~Y6\#:Q&RQJT١͉SC\5>VDM BEH\e ̺Kn[ (ת/bfژKE7b]ݍ!\}Qڬ@qq`2-L&c2Yya2٘d2&Ӧfql^86&شpl6Ʊ:6Mfl-E6|"| _l&|fe/$6I"IIRd$E&If$eJZ"dJ/J6Rm)¦RJhpYP6`蛒U¢_{LL3p/tθGJp_$(X_A\IK/F@sA!5*Z>XިDJVȴU:ޤ!'W#l*֫/sFAٻ@UʸMDrT$xJ"d2xDepQƢy9ӑQ b^^6 u r|:?!R]G违J>qmDpMSdc1y81$_WU_h6_řΜx!u@U[uUCrd6&ӮdLSɘK7cӮcql>ul6M+ICs[z,gXЃi3k9zRgZ$'nyPrw1?l"g_|8_IJG E}~pE,x5D zCc^\FA[)ڍg٩5Yj[#CF+.͂3"ѨbXu<}RA8L^MRH59$j*8j^/ P nhpU[&q3a`Wa;'W76eZ4}AU;qhɼ:r> 2_xI/ ;KpE E.("XgTUok_MdL&k2-Lfc2ٚd4L6 flMƱ86YfشlMEb؆/^/2LbȄ/ _L/IL$oIʔ"tZ}aE!Sf)B5yY}am|7yӱV_ێj+{7|-/>c/ :ql6@piC h{Zմbw&ڞIx5")ć@[ D"A<8쵂A%?wĮ4%ò U!XZ_.7!Ƌo-r*dlVn\Btl#\A|m#d Z!,%q,6,,%=1,6,`ù$4!qɆpn1uF>$4n3uiiޥ.tަNKN^MN^7r.qC6q Kv Nh-t8_í1u9_ͰWݑṙ&ApVp.uWnBKm~|_Ѫ dI,|hPPz{m?P)YY:+\T~n~T@2cN[`ZP_&Gyje * LjxECm;ʲ\god˪|x41@~~ݔOh1!jY}i[y| *))^]f{w <7lŮ_\!_ޔ4: LKE-$#woe x:s¥47gPJ_QXE_Ɩm\:R0_C)i˽RP,jud:5?m2yeʱԱӎƱyWornTW)K@uj!Yz`Y`]NTI'<% 'ЈMUE)0tk1)Ukvlxr tY;Z fS_5!Eo#/ٗKR䢶`qFmIv %qy_ Y&yu䆂u]D.+6b*܄SMs% SJe1yDY6WDƯPxCn G!0Ja 2P'L JK!R \ 'rКA"ҡi)$K):?C[S_V)z]#x%3Z]N?*KN^N\C S0'&5wE_2FVLnxkL)xo(MHSVNձD-Bo|!=&(I:℥Y9?w~W1t:HN5t{t7O_ 5Hu*R)ȲvcP0&i٘LKͧMvl2M+^/> _E&|2|-&)t"x"RL)«RXTuۥ<N>yB=}?)+HRҮ{ n(\U]Hjl dJyS UMp<2M):8]?pڪpCFDA]pUk]ϑC &>:5. G~DRۻhSRF..M6|q{"2z.nD0yif=55wq +2IUztVp0nz=:gҤi Nl.2Dm &N0{D,d%`2yd6&ӦdM&c2od2_[MtlƱiӱ:6$#Ir. 9c+4RUStE34*/r8&oC(>[A8Hrh[ؽȢ2ZTp'd AIY슮 7_ $Ayى_м?ji/ӂ )=s} PP|^bqA8'1 ~ ҡxF̩gI^ƏS&.7)Qk{)IOO uS/X t|!r wQja\`q#H/~R4I-LS&1&/N?d_|LUZ%)>MR$E&I2I-J:-EӥRȢӂ>]pL~/8mbm [}aE6| _+4|mAtAc~.D@Y ě @ O :Ad ڜILAt !"Ad @E#7UD<5lpUztWԩ 5r4 UH-O{V=[vl9i-͐͜P*.=ׯomRέۈA S,< и 'iؾnCN4_ن %Km 9Y4{Yj+|iL|f[L!wSSO2S)/2e]^wy4bӧ# ثLy>WOW_1}{ w!>k^c N >Ad D8 2,>%N!q, 6YdYlXtJCz Yoc|JhCB#YB#B#or8itJhCB#[B#B#m2uh|ǦC>6Y>6>6mWL̟>mWwO2}.wy4bӧ#WyO2}:/WV_k5{ [ṫeV2VLS&Fo&C-DM ,S>p7>pӧuOyS'}ù99QPԟRc[j_ }DDDhhU7]e9{u A r-Ikta;W*~%kS N;*s.%u=E{XR}"JHh}XpdsjWWPDԢ)tU;S@&iɘL+WͧMvl6M+ǖ#Pz.g(.^J~ԋVUq1u} PjA2bD\t*p HA5dysvFs~L)<' $ |pd\d`rH"O:B ۃzą7W@_T#S _i;X4\[U|>LA&bSZS1](RL͇cAp\>T0#[,:6FNJصDF{\>ԧrNtTwUnJѽ!Q_'I:|Gt*NorhuU8MnG!)ң)jG1.H'E@ MŤ*|v/+ID'RU{Qk9eY0Q*ĵn\ MyO##<\SFl|,V)-{iJI -4 0QC_'+N+jY2yGaaWD#6[N/~i2L6ɴ2y|ifشrUş_d-"IiO')6IVIjUi)B.Eؔ"*EB72/w<% E婶Z[*\M-QқP`Ɨl# F򂒈cG}W0%_C| !OėOJK91QRtddSTw)Kܧ8C<տ bzVLzwQNS2Hw {A, 2VDaZ#8\*x2Rm@+'c(%}A|]@d #`ER^z 8$lL]ɘ̛&5ɴi2lccMRֱ86o:6[&MRI]\ܚN3Dw1z~LR2?ƙDSAUu9PMt>em|"pE@͉.%F5e@UnmGfr:lERB|ؕ ay6dDZƫk>,sGJ :AJWR—*) g(WSDR)2{Y] zyDxVqM|QJzIGk&/"Vk5VoJ!>uW9W0) ϯ<I|ŏCiR^y~a"])EhU N:-8䷂sVi[n+VVŧV_lEዾ.ć@Y D86[ D@Al 6@mN+mZa >" xs&Eo3))ć@Y DbA=R|ß>7‚"|:u$M}sע/W[.u}H)R^D+n$Ij,HD8Aicz+%u o-m9LMbQ+Sj:YpVڇ ;[bek^PҚWMVU:L:*tbs̜SSO2S)2e]^owy4b# ث̧y?WOW_1| ~6;5 |At !D"&oa)qdYdX"7a)=1dYlX"7z!4) l d/8?HFF2Fd锏͇|l|l6|lccNNO?}+ꗧLw?}W䷻|{Eh|ث̧y>WFO/tc|:_2a+a+m[mغ0NMOS>@ 6 ~ ǧp}d>2po}d))ӧOy꾝IN4sݿq8)Ӎo j^7l.{Qxpə<Ũ[fZ:&*";#/o +NՖj [QKy~=IH*UV[sGu01'SYw )fNױeb89ZEnJU,UIIς 77J>\{֫ɴ0dMdLfc2[ɘ̛&Ʊylc±86&l7*z\_E_"z,e֛"`0o EB 4!!q.0h#I\OUUI:2TKB1U 46k#Ǡ\ZOplɧ۹W{$bљiiM8gw*Ee8:<Q9Tz24#gw G)4Jz)5 HQG.4))Y_t'^$ՏTDeRL4~kc /Ȓǯ(QZr}]UϪلzۋďr)5(VYz$<:#R?R7vJ=Z^rAdar(\rc x5JhDVHS A{A+3?;-/Te| pv VJ>{uq8ɭml^{5&1ɼ0dLfk2id&ql^86fشpl2MƱ:6ǦMǦ76M"xȄ/6lbx3| _d-$E6I"IIRd$&IfbȔ"(EȔ"lKZ"lJ2RM)BR큿^M9>V~0#Ejևע&dcN UAټq;\e'*<%;&G &48}>~AB^V{$/]`B9TU8C8KUj~X\XEo,2y 5ɴ4yӱ86:6S&شrliJjS 0B8QDY2 /kE@aym`VEF2qՍDg*#B@B@H/pѼ{ \0K~Wv؍>_.FP '#K^'BlĐCS,S< hr`('Fly(@U <]Ǭ,S'chSw9p6ڧ ܵDi`*o"|[Xt=>~ G) $8Ur\uʷ-Y|"íp["C`\C h$ e,|Hfaf,1tHfaE\и$Chs$4!qˆ+MM+>.muC>6muuo]r͇|mr.w K }Lh\ݷMh\7Bn9_nU}62Ηdnԗe:/oW&w%LJp6D%}vA%Gp6:7Pw_}tmC+t qyoa%؈|.ա&0Q޾ =>RՖYpۤbN> IuDSr"uno Up~| = #unt0BO\`UMd=\o$j,cU1J{#RbӼ LWLgY]bc\}h`Q5)juQ8j\Τpύ$xt*iPl{[|>#*aX$|\hRvQ .`2-L&c2Yya2٘d2&dM&ؼpl2ֱidcul2MMֱ_dŋ&| _dśmy:IIRl-$E&IMRdm&)IץRl)‹RL)¦a[)Exa[8%X?SRIyzh 4 棂i-WjmD+-lG WdHKY)|a4/{'//IW\@Iۛ\^ŌF nNW >$Hmdኈ\(I\j)75gW L*0iNS,ډ}QBO_5ocˊ$A]]a!T1^;yqlN)ɜ2S&{lN7O)˴KPwy경d2oe~u,څiWgyy5,ѢZ"]5 cͻUZشKN]^I>׼/%4"b>%4"/o1_1-ϗyw6y2iaj̗pAM }t ]PuySD‹ap&D4"QCTRoTH ޱ?P<Ǫ_io}t׋HC |K97-O(օkSy.ifPg&nC)V޻GvET"/A!񢌡*GR PKh&Qc?&GxD\TFMJoO". N/U$dQUOڅ}ӧ>>pҧ9pzckQ6W݇ s'|e&Aβ' L+RBqhE@խRC}F ^u6ܨr8-hYju iNR^j&5QEt_!腢3(ש߫ѽ>ΚfSNicr QJjACxu$@(tɗPT)ab/L0QZT AY-h4YLjݵ4A*AÊC)H5p' YoϾyR$Hr,D.8U5'S4O!xRyr%Ԣl=Z,(L7"q< p'.)jō~_vb7Z0bka8E8Q Ic2-Lfc2[ya2ɘd6&ӦfqlZ86&ؼpl2Ʊ:6M76M"hȄ/6l"x3| _l-$6I"IIRd$&If"Ȕ"(EȔ"lKZ"dJ2RM)B"7%Uu.M3 j8˩J!ыSӱh a; ~PxX*DGHY/ ͓ҫ0$7;R[WDPg[Qzs;x1@&ޛ6~asP9tRw7"W>%p"dС(h >د$8>NjGEE.:6r "uѣN̕Bo &5ɼi2Y86]&شdcӦcu]FpHs* iwz]W\%2iD /7RD=e؇ s! Eyko(w&R*V/UJ}E H";esy u -EL&5W$UKlj()[ᣲl.,MQP`ɐS}ZD mE.(*f€Q#Sd2&5&1lM&c2m䟟׎Ʊ:6/cqlMƱyӱ:2b&| __d6| _Ȇe6IMUe$˖"lJ^U_!Sп]yQpL:6-ڊcv['@o& ڝVAӊ?LA9@ + RZZT#[%&%In$}T(Vŵ(Xg?d" д6Yw9Y&TA#Ošm-g$k~;WD#6ڊk~Ɯ2/N)=eZ2S&sdO))=e6wwy .@]w]ͻLowy"]{yhhW?"1/aE8iQc"%DxqwY8A,'VeXz m>OYyi FeZB#o2u?OhF}vi8myL"'|y_KhE^?Zxȋ"4~ݷ/j ˴;l2iaj̗pAM }| ]Pui '/)28UC,rS NjWdIDDs~k+W+M_nKGߣօy7#&șfD iCD!)qDR*#W^T4*?GܹB Ͻ!*kNxrJMI5|d:5?m2yeʱԱӎƱ;ŧ>Ȅ/ZU$ENRlԪR>])EHRξ @m, AԳh+g-"BYsJtEt?~׎^s-jmWYAř#7t@ʼn\cOi풽4ܓp\$SørjF: ҢoF!<5 %2PZ=K (U%׫%_0`ZTQ"IQc^ 2Qڂh&KZü:8 tEz!-(Eӊ)U>h)J3yD&wu lL]ɘL&5ɴi2lcӮcqltlƱiӱ UDEruȧ Rɒta3tQz ߹?CT:% '≯$uc_}$cҪVU~#*M咥TjrpzchǝNP5qkIt@Y=ZAm1­ȁ1L{p1_ j |n~d,#;1e*jQTo՗ 6g'׻ h k 2f N& i[kDq JUx&xYE?s ^\ {qژi2̟6ɼ2ytifشrUE_d*IiO')6IVIjUi)Ÿ.EȔ"*EV'se[j+购O+/ŧV_dEު/)ć@Y ě86S  @ 760@AtA9" C ,DbA @*ܬ |6E[޻r:/Yh(q/z1AK4@dGQ,,TyPT?;ʢ4s؀j8v"جd=2,J/"l-ke:6RTD}x98_{%zIaMw ~-+))O)WwO2}.@ݷt{4/j@WV_k5{V56{pl >b h7 Ȱ8 ,2,dq°C,6,de!4) d l$Kh$ChSB#i_c)dlشf^22}WկNwO2.O#6}:b{4/V_k5{̰N|8_&;l%3la+ [&өiW#7A| !b&Do@C,GM-ܷ:e:=e)@ݷS^q8Ipw-ؕtEpm|w{$T@_}k[E*Z$"]ym61DZE@~&'([몮I&YQ9uo0~}b>SVp6RsUYFtIYp !,Wñe}Ho FG~A kEYG=:MJ2bge7A ǵߍ&(C$^%OLRL ɘLd^d6&5ɼi2Y86/culZ86&lcӦcc)W*5"@Q ;%BA#35&14IP n8:nP%p2_\ߵ(* fQB^E$|ON@ ȻϤ( {Ũ Tu2rI^I@@;e,~*+˄[Sɞ$yw0'ZAtNKؐb'{͒h+A^cƒ֫LBB ^tEpjC_8I,burg Hҙ5G]LBWɊN|X Rr zDРUSqgS-Ax` iԋvT*EDC,#/ KגX$;.!aktk6NӪK/^H|Dyճ2Ϫ<*#޻%4O=yߔ(JU{ue_&*G#u+7 >2LD>UET] ʒ\痙եj. ~0&1ɼ0dLfk2id&ql^86&شpl6Ʊ:6Mfd-6|"| _lE&|f"$)^$)6ImE"$)IM$6I)EhQ)Eؖ"(EȔ"dJR6K~+E6M&>cQA޿a2> $DǠf 4?1D6teh:?W# rksn-89K[-Qx*(D 7~X; U @jqpiM k%Dov\X_" =HOˀ 0z;H‹jL/6K"Up)=N|@R!9]VD%vCwI..`*/ʠR'Bn S۹Lfc2Ld:5ɼ2y;bǦ]&|dQdx%^ܿ "|aܿgrC{c &owMUyIgKW4zqys &몱{ 7rt*NV ^h+S_Q$XM목x]R[ؗ?Tʡ t SߠI _m$PuH qbbc2[ؗ1oid~3y_&d{/ql6/qltlzs]TĄ/M"Qx3| _ת2I6$Ŧ/R7K2yY}am/ -^V_|X}m;xw𵬾_d׶+ m K{ױW@A 6@-3%D@L īC dAd ^[!:.Nz̯“EآɨK'V8fq-_ .ݜOEWM.KPq}2Y GQ-D2m9e䊘Sfs\sʴyv8wwA]6wOA]~ukU~qYU^~l}Kpm m "C`\C hd e,|Hfaf,1tHfaЊEctHhp!4ùY}- |Hhf!4߯i|l:coVWF[Ь|&'9y{@}!kиDŽ%}ۄU^~'4VWe>/oVnE|V2V^ [_'Y͗p=R_>R-EVp}@ @1pRd!ܷ N ӊ_}tmC+;tyjp/e.,d9h<AQd>\A% NYBR C+~(xˍ9YKC8[Q _#¥ӭ_F^EKmB)ҿMlq:AM=V(>&˴{"rx[S7厒x)[JicE=8^N,u+>x m\Hs7 s#Dq2rGOP\h_0ZNրO[cqUk 9yg2̟6ɴ2y|i&شrKߡzR-U=|{A5hr}E[WN4).z7!l$!=NyKM)M!4I5ʪ ""f-sas­&xwxf8й4< ^ޢeF 4y((UPDs2OJVmIjS~dV)d~*^Mvb5Zk J!O|i˾2J&X ћ_y9RZ*T@KѢ#⦸\n)t S&ɋkt#,'|F&#$7vET= ~,")d RUd&өiɘL0ͧ͟vl2+^/: _&|wׯ&)t"x"RL)B(Em)-m^8Jenb禵z{B# \;aiD5 -U!7H7tQv&0Naw$)^%U)B}!S7J_|Zp Ε_l+购O+~k+Ȅ/:"؄/ _ES  @ 7ql@ N :Al ޜVA| !"L,DS  @ DbKpP\HcG޳O/=D}s0!Ɩ?p:_SfcR n^2dZP4wTy%乜n[5BBČ1Mi*nA#=e)9eZ.]O~N#6:b"/2et^^ h>]}pעƦ?]cA| !D"&I_ ?8 ,6,dea)=1lYdX"7!4) d l7!4) l lԥ7Bc)ddؼf^22WS^e>黼"'_Fl>鈽"4_e:鼼"4Uŧ}Zު/6V>/|Ͱ6d+dɫ:}1RS>@ 6 @O>:}d>ބ}SSO }?O9i p*TYoIS}PnE@JNKԖH^םUT*#>SΚQ.">Fm^t~:?nxB{LCI\KWSm!89m&Q HVIRU5d}AZ*QbDCJj˾Q_9ѵgYaI[$% ;wXD-$- ʤG ‚JuFxn rf~P۲J )VLn17tY.NgabJQ".!)ݨFXPmvF0@4>AnDj8OD{RyXn Z<KRsk+%4.{ZY}~}alBw(m vpO И ٘d^Ld2&5ɴi2lƱ:6/cqlƱiӱͱME"؆/Z/6MbȄ/ _LEb&)Z$)2IL"$)LRdRRl)BRL)B![)Ex![&."Q$ޒP Ơ jMtnJtuxFeֿjTbڧ*E/AwoMc[Æ[ЕiD5Y-2Gcyju<~.BG x;2@SWGpq^O pg!3,D+mdXR `Y ytU*|Q$IF3!zR&jES}Y *6Bp-#lL]٘L&5ɴi2lccqltlMƱyӱ:((eEFq(=/Isj숌#TX7OoI$$gO4LFváz ) ?7bxuA]So2\.qh T:(zIRnBca̳ӷ=5lPcvt.qAh]) nFf}F]6Э ~-%].N8uC<1_v*«ɴ0lMdL&c2[٘L&&شpl2Mֱylcul6͛Mom/6|"| _dE&|f𵨾lbhU}$E&IRW՗-EȔ"xd^+|E͋be/ _@hǶ@oihsZ ڝIY 7gR"hAA2W=ۧ}#Y5_؝QzUEFqzlޭΏ)28p􅗄g`uYOQD+jA8iW\+U0pSC/w by&nNɞ2-N)9ey]]^+P]&si.]^hE^AE^Հϳhw Njk5X wNZ+ ]Ap@Ђ8,KM+z ,=7Y=fAh]%4&ik M9>6Viq+c.9wyEN<{]B#/"y׊ǻF^|wpVc??_a/ϗiw W#`xpmASsp8>ޅi\A܇%9؅`:?/&Y]R)0œbMlR/|Y^s@KQtQ9 Jp銈iRDYAKep \TUhJ)Myaό<{VuBQ/\D .ʯ#ySkB8SKɇUrJEۊ/^U {'( C/{HRI P)R1"mdmZ&-/~n^>Nl{{ѷ֛Dݿ0OMOdZrl:ulcql^95V@I.eSi}Xzu1٘;o#5BEEcʽ3zi$%I1H[BAVFh4^\)_(k쒖ua?Q1^SkU4īa4g6\$G!' ܺ =FDNGk٭"u7;6 ӣ h6U9͢{ fĎ҇92BQyG '>eɷ]9x#GNۂ*NvsZKSEݿ p^P],(A/$q[VA 2" R?*d"MŲ4%@EĻU G47[ "A˰nȟ(6#CC)Q3EmH14OYs-Pz[cվ k)nVt8vx`:j'%,-}qwt388G<,E5K.&œOspۀ,!=dlL+SO;6Ǧo8//tbIO}:IIRLRROKt)¦o"m}jD±gG,<^Ĩh%DQ2+ qW?Dg+ %R$xaɯ:o!VU4eN#%aOtGȂQvNigMd-LOTp*V,M0٥'|TF]p<ּpGQJ{MPR{&k_NOO>}lNW ne]fsi nB>;O2}:/vV_kEpn{"D8Ap6YdX" "8"`"]]'B#r8_GhL]2Fe!4 4nyM:>62;O2}.7 >kиyyݷ;ۮo/a+a+[ [_7_S&oϗw 6@Ad }d>ޅ}ӧ>>pҧ9p_&PȦM/+rSCzılHCv@V/x~>Cdv Ewy\Wx*nd [ qYE 5HRaUDt6VVoN6T-M_v].VjU1W/dTy0QB !v|1bӵZ&(Jrּ.^TJ^Įb$4^AGTtsWz\u]Vç8Lw9?cm2̟6ɴ4y|i&شrl)vdp"OZ[UP!SVZ S`(KfBH=hI;<|%$a٘EѼQH<0$NMRA@\9)qV$$$r^~WIR+Aa?A /ax pX"؟RQ, } %+"+)WQ%&Bc fQHI/&Cz.IiS^zd3\nTta~}Fǽd==D&XxSA!ǐE*4=P5z4uzGV+OqIdiS %'sTJ"2$я$v,_fCB% %xF0b2VYSN: r!P}r\ꎈL::LϨEqu%X1HAA8A4֫*s.< BMZƟc :دL&M&c2-M^86:6}ڱ86/{4|ѧEHRtIMeZ"|ZЧK6 j+s`Y1^sS \\C<zGx~/{+PѢH1瀆[PQ%]Eњ L >c6qd>T9 /鄗FͼNn*F;ZqG"UWY Wѕ`{X,Q#!"Bx\fm;8,RW;3z3^Ӕ-9a2/7aDkCc CsaW" nR%@7جoF o}0|:+MUT2h&q`S=ɘ̻&1NM&c2-Mtl6ͻMƱԱ86-[u'/&arR %eI'ΰ43tn_97.&,hKCg$6YM@LsP:R+g ϿNʺ)PZ+뢁8 H8?;"GC| tP_O'Y#y-M 뜚%rPݭw.B5fjoeBmzyCH BY1y EtNwOJE@4En)r* ǹ_s>}2D3(T-Äj^nd:5?m2yi±ԱӎƱy؋E?Ȅ/Fe$ENRR>]N Nt۫/>m+molbx7| _W_86 vql2@ ;  D: ΤA;"bhAAV_M xcH* I5IX%߲x xf!2.Bo9f>+P QǿGݿfH&Z_?H"(I͒|k3% 6*;jHK,IHIݦ֖$(/5z'W$f/[䢺>sMN-\r<%8"Asu\HrJan ,?+"|92?=ezٜ2-Oyݾ]fsyy7MoG"y˿EO/zf"56]c` $.?ذhEE@8" "]qz. w9l-S wd |l2|lcc_槧oocӻom>.q;b{Ihv^fᶫ/ze;le3la+a+ue~j2m|yb.D#.oo)pn}P[uk{|7VK=! Id?Pd>pB A{CQրh"mS["zS,c^e&>D$> T C8 ozx.o>&P xِV ;?!SM62Dzwʳ4 "ԶO}SW)Έ-G5\#ZO'W,QȪ`p%Qch}e"ѫ@(LdL&k2/Lfc2ٚd4lMƱ:6-cqlƱiӱñeh_emvk)Xw)ej4TD\FRj"kt$Dw锔+#iu&L_nVy@ABfm+Uah N¬kvCڸ'x%څk2NPpqGM:@ %:1Xq҆bTKmZNDpYqlxfNA,)E#ըc/~Rf5hU?\LL#)KEsQdHcxC?UQ(( ή!9y5pХZEfw;F~ 8XKVRכ(e:/I H@plRT EDȳ&z85*oT >DK"#IAd6&ӮlLMٚLd40&ؼl6cqltlp# "ztkR~$ )FG|?5.&Ff(!Yq6x y1ۙ":dO`tǠm.hϓ}ҶTiz%"~ D `S ,|Ky*) |S Ҏ@Pm{ QmEBzT8'/(έ;X7e~Qx^8)F%PnkCjO Y}=G8QRwVP7U&O anR#: 0`PMW*W(@T5HjE@=-" ~hxWgj X wNZ+}`.i D8 N.'xE>qbE]&cFpZB#or8ȻL]KhM_ؒMs|lޥWc.9wyEN~}.{Ehv +B`-˼;E}|vv̛/H&FϗWpAM >~ ǻ./Ny~?G=/8+}83_RKڑ% KTI\(K]f!vǧ.&8I i.u<1RX=n h s~'OaO݁y*"%~z"At}",RFSbeMIv/}No*ܧʡ.`IF)#ڬ}ׁQEd?(hh%!jٵ؆UtĶ<2,`r RKF:Q5b'\XNdЈLC>*ǼV dL+槎Mo;6ǦcKDۋ,=Lɞm ]D7PtQm!Cqjf/Q!>9p4]Er Wz]DQ;/r_4$ㅡ)11NhdIG9 @{E%Lh^h.Qqo~~GvRiۥ+ dtUj]vYEhO2%%4K)GSVĬ ܒF&.l4e3iUMr]t#M&o <*'F^cA&h!rOVp}AdzԼdY"]O Tڸ2;g_siUCQS:Epy~"@Jfd6&dL&1&o:6Ǧ]&Ա86` /=&։h 7 fT[yV' )Qy + Y8kIF1ku"V'%䞒2BkJ:q[49[? |psr]Ҁ-n0#A=.?QM\$i]U<ܿKbHsW*tGiRe]b2XLR/%4=NMA]ւ 6O.xku32sCw&$LG (6hr6RJRÍs/] =dx+􎻭+dL 槎Mo;6c/? _vbxVI&)z;Iꋞ"v)۫/zZpoi[AoL&|џ6ql6@l ;  dgRd ڝIAl ZAd 2@q ºr"grC4f^8K'_I7KЕYCϻYAq>O U;*~[ Yo%;YK:&$rz 7hMk[>87uL2hJ|'L $iT˲Mm'lK/gؔwrSfsʴ:]Pw.w]% oGlz;bv=v^,zZ}>`ܮ{"E8ApA,2,ea'NذxE@E@$Ch]'B#uFeCh].B#qB. vd)ۧ.wyIh܎v}2}cޮ~|[ [ywfJ|o?_A } )ۧ>~ᤷ9p-ʡW([c!W_.8Szk}V4Cm:bE$V=!/ZeS4>/n<5DN=Y|^Q*$$_&NvzSw"O'|;'d.0(q[KE+^œKT@F#HV;62 8!;;SYq=brs],(M uFƥB +s1_md^d&d2&1lLMɚLƱilc±86fl6cw9Y4j82?Py\)_&Kp_;_e <4KS|K9!T]Z'Dr|pTo;EnEuG[!]mb ?aQ$QIJ3E4Qz_RY学x}Hua:yiӱդ#*EА8\jHڤ: /=+8ݥdx4h.Ee x-8S=W4 ɐG?=Xӄ#rRL]Y9Q\Ի,qQY{UHxJ^"2̛P)<F.ZNA'"z %)̋J A)ux ] =p' 2o(.w5:R!!k2 *N,*\&w?ϫ'^pVTQBJ\ZnHTy1\DhJS茇 M:Ubn&z&GI`2/L&c2Yia2٘d2&ӦaqlZ86fشpl2Ʊ:6ǦMǦ6L"x؄/6l"x3| _l/$6I"IIRd$E&If"Ȕ"(EȔ"lK^"lJ2RM)›RDNBq+N |_RA=ڵFusvJ!jZm/E"7B ]Nn! D,ӂM3UU*w_/x)IE2{/A*=yiOᎢ UDҝ+EV("t'fWߍF&J5wY2%TTRK5HF'iSRo!MkxB]RPRqh8-N%7\ 73DP}/HI2SeUQt">$ NjonWԮdL]̛٘&5ɴi2Y86Ǧ]&ؼdcculW1wxT=\Ǝ5ˈG"YHVP9Eg6yqD%=x(i>) dFB @hxa]Jq]*tl#[ !G(YÿN^?'=^_OJR}(2V)ɝK)r&:2MVv3u 4@[DdBܑɰ[šA8 T19D&874Q`9弛Nh:R`aظ)^Pnn6gN9(gE!4 *)xXoz G.-Ny~?G=/8+}OwBލI;U?uYcŪ.n F?ʳc_HAw3ŔT)J;-(꜍f$f?$`_E^_R*n 'j⒕ ]ی/`ȗKp^D8Q3Oiܶ+C/ vR='Y1L6;?MN>QtV( Ujϕ;<2Ţ|iY)xDy>% I: VvcszjˇH*LLq/?S yT$js6:)UMS]-GY4Ј.QENJ&*a^CeD J(OLt7TDԽknrYsvUK_݈9*uER0t^PA%OЈFtX| rVz圔>N.˗Mpַ5 ۬P}q~Ŏ V[GEΐ}wI֒(5,BViqZ=gKldz|}/uܘzlܤdYsrnׄ%eM~qZS&sʴ:]Pw.w]]ޅ#6;ez;/v=kEpnvl"d E8A灠MȰ'vYdX"`"?Op!4. :Be!4.S x,<~MWTTE>nfJqB4Pıho1zLY~8J ۢM:Ve}鬾dz>ބJ2ם A43 ޚG9dsuxa~ yf!#OI| 1r ˚qG_"+g0(Z):BӭmT8Ȥ~<|v vǘd&d6&1lLMql2Mֱylcul6M)z6 h0H$R?~^-AK kS3Q)c)}}0]J'UB~܉ck2jiH~@Md)ҊG6@/Z"kr4H0\^ i^0͹<˵c"4@\kHL~+״_ դ ڄ>p5ɼ$?\嬨&|aD< .RSP^a3cǩt %(\ŚU:NpYq|Rt,-gQ. ߹_}yF;&0=bD(N>@tC#(Z/+ԣ=S.Ez7y/ Ue[s㖛Fh QPoɝvN*1T=&o{k@*@OD$ږmj#\ZB˘d&d2&1dLMɚLƱilc±86&l7> _lŋE&| _lś?zkIM"h$)6Ilbh3IMR]!S-ExQ)EȔ"lK6m"lKęTr LbY\"|!q&x%hRJr el+3D0hsx ܅(k_4u?Hw[>6IdP>8bR0K6`lIQ&MAMWh х9p8SmLmboʛH=4/Y|EӘAe1Ic n]YF,b:Q?sS|OQcmk]oڨmķpr)=RNCP«V''/BdM&c2od2MƱyױ86m:6[&شd{'~MD'ī:W[⧹c\.^CeJ2cJHNW)"̵tίؑCV "ˀDI] UO٣x,YjϲO٥ [QuMowM y«ӝ\]ই-IL#E*ij_A(IK/=>%IAi-VdmH3EW"4XP J|ջWjÔrS&`)O ]d㢣h*\אSCNFܓ/)QuFcYx.WV~~ɀXƹ*(Ox KNSkEj"Y&wi¯yD++R5* Оte|W|ְ0sdN)ٜ2S&{lN6O?NyāwA]^K.˼y]څiWxw@Ë|?vpVcY+wN^+}`.i D8 N.'hEgF]&cu}.c}& ԵFdOhJ?Ǧ]*-NyE[~>6풓iqW?yWy_+viW}2hQ}p?_a/˴;Rɫ//>,Ǜ@}9vA]Z ~v{^p8W?ID ?7R-|[u&y9K9WQ hҴTB=P\t]x4u7 [RCu5T7逎9٩;7ZU(^{Kcei&kueg`>XHb1rT_v]1]Cz)ɩ,ujoZhz,PȇxiǯC^皓hA%~(T(6~$%\l ޾kfԹX\hC*iԣ.3*x`o vkSJ_M&&1&/:6d4r W$;Bpadp *JzTf^;zAеU%'cG48rs{Nɱ 0`wU]o,EY"-ЌWDsSs6\0[zWjrQu+ӚҼ>"Q\m*%;rqNnbH֩2npSZJo@Y/V1Hvyd6OM$2Y>Q˨o>86NLfʪңN+\YL82Za48xx W HA?thg*xC]juG?N"E 5- ~ n LkGT^̴,ȒT:)"++*^OMMfc2L^96=ul~۱86/{iHR4IILeZ"K6JYckoݩn" m`j!։HjRrN[3AN8%vz )cvS෇>EKm"]NxdzUQ{A˴(:I`tEFqUgϯȢB bSح*:% toC4ÁUdb z: J}R]% +,!-k2yd6&SɘK7cӮcql~dV-Dn7[H(}C(A׈*M;?S@;8C=fTy~m:2F<(p""dQEMnqR$.5 !LwVsRW=TQ> ?BrېKtE- 2u$Э;'qI8 XIp<UPۛ ШB1/~Qӻ,^2k,&/{]|y7TsW:fNirxȼ'%HWOXBV>d~j2m2ii±cێMƱyثOȄ/ZEINR⧥]ꋟv۫/zVmol"h7| _端M Ļ86 : N+A;`_ٙ vgRl 2@ W@ DKPB X"_;c#A8.^ql11(".UtT}lY[;S[`re|Ŏ]l3kkۊ\2 Nouwx8Ϩ¦(T܇]: DI*ޓ "I;ӜIpN>e2Su2}eZvĦ#ogӼo"]}¹]c5>Dpx$vYlX" "?Nea. <=fɆȻN2FˆHL]2F]>6>6cSO]6{и툽$4ne~;/ovp]}Ͱ2=56y{ x"_xc_SO}os8ᾃyߒ%~c{ߞpi& o2#*v)RieȂQ2DK!4"@ґqrDMklSD4Krm~7*(;Ӭ(r Enuۿ,$j+B5JG`ݜ"AJ ؆3$S\,. D,L&&1V&:6dE:/S⬦p+T,GTF&~E_8# r#VDD64nm|p"RdD[T9^IR NYIQnI"(sLZ}UQnj #T9V7U;IG W~1k~?) ψ}HWPI r#ExGB)u7A(2mŸ~.Q6T)ξOi2ᩩ .!FQ C-u$M}PC6sp8/دxփd "wz6G;Z 7qshZdbu^NO&nr9ylWh5e]hjSM^F\?(U"n ^E1v ^`A.cyRۮ4, )Gu!G9wT&*KyhjԴӁ$![!<ݢMF:YB!M|+8Du.C:k&Sm٘L+WOvl2M+^/z&|*|=MRv"hV=-ERL)BRDr;]'ZgGS9yo(3yT_(K]HZn.c,HXoh7Ujy ].DG5VT Cg=q0|2u(We:45:ܤYrjdWVc$?#ÏSipnMpx46%f"sr銐IA?UJ8xnwr|pK@WBEC28t=]eԒh NTDd^piCuj7KD}2 7kM PMjɘ̻&16Mfk2yd086Ǧ]fؼlcӦcӇcK^"#$DсW."e~ XK{DT(DyKMK]8NUp}G,y1~"ϩzȗ'^jS1LS^!갡%wT_ *nV&TM,7Q88B[ V_/[}X%^5`cg -W]0r )F,=9?Yˮ\,̵8HO ȖHHL]!, 7lثSoqʫO2}Wϻ4b{Eh؋LO2WƯV_2V~:_eV6Vǰua2=56y5R0 DO>~A @p=!Gc&G[2==e~W.+r8m p§!։(/9˗W6Kʷp%9,%_R/Uipnі wee+*J,;vcWQ'z_(VTE+1J"+Ek!\r_!ss\j0ei Q5Arv-%Rǹ]rތtɇUv7P7 v?*rNI~HZyL6M &dƱ86Y&ؼ&|"| _l-E&| _dm/LEb&)^$)2IL"$)LRL)BRM)BE)BaS-EȔ"Y-EvM' W_3Yp 8jKD)#Jg.1J쮕C{'~:cNJXuc`_Nu"HHNAdD>?[…!r=N\o^"bc6 :pbP_rS&P ZpfQfޗZ┚54In"=~Pk&RlL]ɘLOM&c2Lul2MƱcqlZ:n^FՑ%]!@]ئN{G)íP4/ǒ8A둋RJCzT RWmςX} Lj4ߪ/%IF*~}Q}IwP>A)+Ƈ4v6['8t~cBu@RpK +ꎮX`+_c_w؊k{N6u]μv(K4n`_NhL&k2/L&c2?/6&ӦlMculZ86f2M&ۨ _l/E&|}h3| _ײ$E&IfbȔ"RM)B}"&//~X}m*8?LuW={V|:fZV__d׶+ A86 8n^AڞVx5؝I- zmϤAIV@=>L&Al vºBA?B9 :lWPww5~akҝ BU_R-&Du^#087E%deo~p,[-Ka1L\slN)9en'cC>6muu]r] 'h/z&4"cBG}ۄU^ 4njLcUE_T_[|Ηdnԗez8_L/L+EVp= 2@/R}KmPwubCo_q8?{Tv|YO׎, <[%ttEB9} H,L1,"{ &UDԺg(QssWp>G6Cš$8›(re Ubu:!Ǫ6|"hzi 1K͸9Rߪ?N5i #,eQpB)}R;)TE[~䂴J 6y_$a2W~Yy?$A5˪'+Y#+ 9B N4 .S-5Wv5>Lʼn ؙ--Wdzd6&cSǦcʱBIUP@]omtpIdDa5oM p-܉rP- QIj,T,u%i¾4}(ˣdvEdA1 GU"}>|Q:!:$K:r9Ɣ_Wn2.eʂ{x _}Vv .zS * wWTQ,w9WɛcGk<$")ppoIIM^T4}W"}WnC~_I_Q8kw.Y}bFHu<=Mx[<#R)&=*>S r G)STNhb$b jxUnTkNhU{=:vGat!KSjCq% <ީ`_Nd4ЏpW%աE͋h&)MxbGM]w=A{75j8ʢ"hE L&&1W&:6lV _4|MUZ%)~$E&I2I-JzZۥRVpN.}RhO3]Z}j-ZRJ2huPpi2VL YQbV/)6Fhq}Z$=NF [=<ӱ c5B㿋uߕwI/4YC44LFm:6} b̑qpF]ՏzD&S.yC/S  &rHJN75x &b^$b77g(W9К:vH8Ͳ!| Kh~EON<(D"Pɘ̻&16Mfk2id086Ǧ]fؼdccI5uH{PBOJQ>AM$rmE_8vswv0iRI!1Ea-6IIBNJzoV RƜΑQ<^R 5ђS2_R!(}A7sQUtpoVA]$eY1K8~>A:MTsi 6_B NBc=Tetpܜ!݀x֏(F !<26s]ݦÐ#ℓ*%Ӵ?{ls.*zYc b}F|5}p !u湃ǂ_kgT>_;ezz)9e^.ӻLoqWFlz;b4/yy5ˋꋞV_v,iMo+&S Ad 6@o"p=%NCYo8aXC1lYdX"/X?)iIHHO ȖHHL]`>6?cC>6Y>6>6mWOO>mWwe~._#6=v^?#"/ӼLob[O/zZ1V~:_eV2V5ol ~ C,M ,Dp?}l>ڄ}SLo <r8m p.Q`h{ǼF;KE1l)<|̋QkX]ݨQ@859zcxM-)=Aَw&\yYnNͶ!@OSTڂ_Q[yUuU4c{„3]`@CVYEs)!6մDXT},Qږ2¸e"u3)d|F׀P-qEejvY#tĞ ɊUܫܵom"wya2ɚL ɘd&17M/Lylc±86&l7ph2w:ڈ,=I??B )]pCz:rHJ>(G 6x{dk߼!Z?KgWhP(`)ͱעñU4j6]"a7fos H9c7'-}S"׵QC#td Q7/26ԟ;PBЎy.so)d*ԗf-N!xb.J.u+jO {?8QUQsЕ-#&/UȄ¹)l$TMAI8~`@+;>ت2z|Λ"\sD$',h.Biy^\@>IE͋2Ӽ-mT& ٘L&17Mfk2id&ql2ͻƱiӱ:6M&˻\Q饡v#tx7YX䫻 7iRtyϧJ#)Qv7"|X *g?[. ^/j) ( I<SRz7e>]O dvQ א9>>!xsޢHt8h5<.A2^judH);<T; )`g]0;Yq } 2 #ފ$ U뵷2vsEQ衧)gNS政6dMdLfc2[ɘ̛&5c±86YǦcql6Mֱ86m:6Y^El؄/L"Ȇ/676IIRlb诫l)¦UeK6uLseW_ؼh+VޯV@M ڝVX 6LA9~ DbȘLdJ-U|oW`,72\jZ]P"KrIұ~t̝~SV6pJ]zSh$&qB[%eC# 6-hvD|"ܒ̮u|x/*ͪː^Jjgɴ0lMdL&c2[٘L&ӇƱidc±86fd6>{uZSfңCľI5Tܚ!!EHE(1u]7,Y-n+beJI4+=~}9f1Va}\QA(R ^ӊ$t<梺D:'wms?4o3iLJny$?;)ԞJNך? u 'Ƶ㩒^HM!~BU?Ljb8c?)-9ơS`4㪹BpH6>dzr[erN/N (M+POXRRPgYҗ[Wܭ5;tFp YC>~FK wA!?1)ceM3&@5PtF%,FVC_PV1AW(Z[#Oj͗Y,DU׷ͼ2V+5)i|TJiΤ-4ٕ~+B1dMdLfc2[٘L&ӇƱidc±86fd7?&| __d6| _؆G쯓$6I"IIRd$&If$L)¦![!S)Eؖ"dJ,EȖ"|u80NgB?;|V*:uFqh񥣗%j`L :tBSƉL xiV:2.NOwy_d0? ;%:-Q{_&N?f|JyYR*'Xe$`uV` !M&|'B3sO1M~2XquB#nOM"֧HpsO"v󇣏됯8wK7p'1A8 "i8CtktONӊ]?&5ɼi2aMƱyױ86o:6Yfؼc_&ﲐd=J~irA>.K'|:XXǡHCE"VK_(DWsWfyA?^pK ^JMݢvd'ZU' z+ekk"GJeKopLPQV_yŹ8 y9t]Ҵ[BD3/`2Y|{*Zy|cJst7Y8q/r묜lu,1+B#r8?'4.SNj>vo5y1-˴;lir(En(A%"<>m DĬ^a|u-jGuJ7t  S̟#*[4]W8l"\[(9"M8T-?EM5ΞFQq~gM~)pjg u"RSխ|`Ƶd~d2&cSǦcʱWዞ/~;| _ _$EO$)Z%U)BOK~!Sg4&:K5]gд_KN}V'Ӂ&S/"^klxX gnBM7RwA W:]D)x)//KH Ͻ.8EAd8U`D/K[0'./D3O9zFto;0HJr ǟq*%!A~|B xvNo;\@qԡ/KɊ"gt2u`,IFmB* ,xLd5d6&]&ؼl:6c$ۊCƗ Ne;D=^kJ MSfsʴ:]Pw.w]wi#ogӼo"]}mvޮ!] D' <"`"]q. vYlX1N2Fp!4_Gh wd |l2|lcc_槧Loocӻom>.q;b{Khv^fᶫ/zo+̰vd͗M Ļ@ z Gp:2}ʿN~ùuEĮ=]c'|cQ7BtE?T? IA>d㈏'W4o~W^SsE1 0V> L{V&1[o,RxE8_Cr1nj5h K,חGN3c,I!+ULzLD$= ՠl4x# պ:RB`&~e (=N(`ԥtMZ Mb^McždZd&d2&1lLMٚLƱydc±86&l6?[@(P *|FNQT.:GqT*Oq,I+(QxCD(ݺiyD]#K]P<ѠEImS}Rh/l22NC Ta^h(9} n9RkMMh>϶j):K)aAt. OTd{S AsIQ] UdqZP6U곍cw(Loc&%w9 TH:;Ph`j @ʅ<5wóG,p)ND$n9wq"UPRբc~UtfQ@ * B98Eƃ湠PWHը Dο! .R3LlLfk2/L&c2ٚd4?L6M &dƱ86Y&ؼlLE"؆/^/6LbȄ/ _d$E$E&IMRHRl$E6IIR#IRRm)BRM)Ba[)EhRF ti uF[m~[? ^rK \ӻ)WўvϔpOqSa(h38F:ǩ6.Nx 3!tu\JDCDݍ.*Sh.%(B0[\Q{utX,8M (֢_e;@ӄ Ce!j9pe$>K20Yb@8KM<v9F%tQ/YF ¬zBbT|,dqkDj 6_qoὗAȘEsDL3&1vM&c2oLd6&Ӧ?86]&شlccu(S`V` *PD(sѫFpq)iY.(^C/Qd'|Z\Մ V} 9+iۀb>+#1-a2HDo-+ _IMI96,^TNj[=9 I䑗xDѩyX2P #_&$E9ˣ%mo3|8C:×L&rE.YmWTQ"O&d2&5&1lM&c2m&Ǧcql &dcqltlM&|"| _l/&| _dm/kU}$&IIMRV՗-Eؔ"U_k2- Ε_}ѮcӢX9W_lEk.m ıihsZ@Τ,ě3Ad ZAd 6@q H@[/ %p/hcPwHbӻ+Lq'yVU֕dxӏD~~5xI'ࡈwå)~ΛT^wv U(C6wU=ζwDn ǺZc4LS&slOLٜ2S&sʼyq../A]^K.˼y]hE^A" -j@,ѢZg E8yQc?, E8-ě@Њ8,KMĉ=wYC,?@Yyi ~B#2u-7и`MUZ|l%'.W/%4"b`.yyEh|ݷ/j e2o[L#uZ?_^} Y6)Gsp8pBp>qreGȏAvdF ;ˮ:;tl|OU<] },HM2۴R2=~+%X~ΡAF@|L|I孻ō,OaO*|2@/U;ZҤdJE%cn7vcZvZsK_7F'$~(g#u)OSI\5%<.^Nwh9,Buab_ =$5IO ꜶU.; qkielIkZ%3N ̻zld~d2&cSǦcʱ?"KOiiJƹ[؅EuT@D02Hɣ$S7 \*@cK /{HSܝܖ,IhBkgyTMP7I F 'zeνDUudtG_%cyn#bհ) 9{/"Xe|pMhR,湰+? 50ݶ/tybՄp EPG_,գCl-AhWMkfGZdrD˾M0(TDʣip@/?"*6: ޤSЪU8p>:,ک z'Bӎ^lH)ƊrnT]iPʬDRث1\A1ڀHE={F_*AsnnZ]ߍ呯2f~N+EB xML#9D7e@{5lL 槎o;6Ǧc= _v"hVI&)z;IIRLRR"v)¦U)l+2A\aj=W//Xc ` 17(<ǣ7Q,ZwsD!A`5μ.ZIBGRTHW/|$j8rxF1MıNYtCѩYuo-LP7H!j_.q86nj 6\EpyG{hJg'E0#0,-IxdP^\@8?# 䋎eրGi OQJy<|4#mP9NJzEAslL]ɘOMfc2[MƱyױ86=ul2M+ǖ(qM*U9O6R[ժb!BɩI H:vkSf%J_(۝ВIMp-) *6tŠQ|QٲT;JY8::Htܻ[!`ӊwSB21+I2o/:]/\$);IsC~" F7!duP8H"Dp$~d oF)'O ne!]>jdw^Dݭ7 RJNPg22pJ#t>!RdLkcێƱi؋EOȄ/ZUINR]ꋞv۫/zVmolbh7| _端M Ļ86 : N+A;`_ٙ wgRl 2@ V@ Zزc!ͤP8J>{Jp]~2+p5<W+hG95ڠxQ:JrTŵEԽ_EwLHYrKwDi~viI )Agr@lM3"fЋ~0Tc Q@&Q[V_AaU1SO)7Aoe6wVwyߎv,zYⷫm.¹]c56Dpx$vYdX"`"?Oda. <=fɆȻN6FKȻL]6F]>6>6cSO]>{и툽%4nez;/ovp]}̰2?56y{ h"_xc_SO}Ios8>9vч=dT.LWT>p7קc܎/cvAU=B^ң|ԑ}RP_.ߚj-N 6%zE$ou x:旭}KHu'+?*\W pZm5纂O]*靨s5=5S4tz^-1t{Y #Ih>ޒ̍2sw^;oơܒ U/䬊}o3)⬩D 8zh7l޻<., rZDLOMM&c2L^96?ulz۱86[ԮSJ>W ;)wQhܼ,szfLU͛TZ&R@o1;tm>j&I9NTks("xKTDl&,iLcQ*E'8Ϭ Ȩ!I#N:fVxz*SVA@3GBNS3~*Q+d!hcRK2)pC9}䓟NBp萄>ԳDaaIh V0t7<,pn R6C+lzAm;^TLo JŊ<\'ߤh~K48.C*ݬw3h:nvhשϚ:$FG ٴ@ݣ*It(kxAZd& t紭}ljpE5odZrlzcqlZ9*|Eo/2Vki$ū$*Ei)o"lJ^"*^쟃5n"S>klͰ1d,ڥ E^/Y[8us*Ad9\EF 2}*CSJz|W\.~L&c2d~j2yecqlul6OcʱE'"]RHSDUShzUyCEV~J$MjI?y ~%#;d>F1z֨ ^#xJCS5w2j}Do, ǻOIc!95Iu01['L&&1&@ݧMo;6Ǧc? _v"hVI&)~;Iꋞ"v)۫/zZpoi[oL&|vql6@d ;` dgRd ޝIAl ZAd 2@y h=qiGZ,iX4|cw^ ᫐Mhؗm6(*a'F$I^VjɌC^}T@8gnx bǬBq$4mz"0 ЗfJ݇Ս;`ګSE2*Lw+qeeuj+TJ@4:tUhq~0&1ɼ0dL&k2yd0y>:6fؼpl6MƱ:6Mf؇N@/8hz AS֢(Ӂ2eѫqW^M'O>C/;UWDvwAU"5NaM:)'yadey~Cnq. @igp!I%dY6^ַm]>oN.1* Kmj $8?OJyD;/tl %EZ٧6>.m.?½e$M55&JUC>q"O"xF5M49}s=x7%y$ E=dބOe"7S![ջ.cp[~b_h˜o"#4Z$4p8/rCtt5y%ۉʻ/qKuL(I=#*>5Ar,()O}UFud sCQʒpM)/gT6^u'S3 QLwP7^h1֨o|uR-#ZQݮyq8TOP~0&1ɴ0dL&k2yd086-culZ86fdcӦcӇcEE&| __l6| _#|$E$E&IMRHRl$6IIR#IRRl)‹RL)¦a[)Exa[H؅ ڧ6/׋K,4koPbv7?Ler[up-A:xrwe8:]}UI0#wi4DE?^Ρ6QbFBjh#Jp.Hoz# ;D@T~)iv&Bώ@%]R{.+j]{/*l$]hy@/2^N'4A"pKZI (5ڵNq+4휯s n^va #$/H~ߢE]: Fa.Ex. T*A  ujh*d'xsP25ܶtAx~](}j64c2-Lfc2Yya2٘Ld6&aqlZ86fؼpl6Ʊ:6ǦM6M"h؄/6lbh3|GZT_6IIRl"l)BUeK6uLseW_ؼh+V/[}fzZAc[ 7qhwZa ޜV|?Ļ3) L 2@ V@ ה\V %o1Ԏw\&ua7)F18էa"N][+Jxr6kM {ӻK}{eW>2#Ntԓ8F_qE͐F/\/X4K,:e+bNɞ2-N)9eLyɞ2LuyqW.ۻ.]揻`.tOE@ZՀY;Eý"XApҢ^!C+ wN &>"N.'xE>qbE]&cFpZB#or8ȻL]KhM 4Jާ|lc.m~?wɴ+r|w +Bv +B`-˼;E}|vv̛/H&F`xpmAS>uiq+P>ޅy\A}GIv%apDŽiNR)YYYW '"C)Mq)%/:ml&_]S H#$K0N uV|Iou4x<baR d9dM! )]>ւT>V)_L&&1V&:6dVygFɋfM)+IKrw |w%aQwԕ'>, ;%̭b)'=;66E4嬾ѪxSFn锲N+b76PepsYF+GPc҈ud=UyCp*$A8ICE1X@/Yz u^Sn "A%t勳7BSrUd/*xΨzE ;U4BcN~ -}هiywA:VL+vB1aMŝ.A61XZD/T˛G9肂^E~+ϫ'j5ѥu:$mvR&jQu F]P\>+05te``mSKcי!S}\=pUCΑf 1٢Yd~d6&cSǦcұዞ/~;| _ _$O$)Z&E)BOK~!SYष Εɟ碭mV0ዟV_bȄ/ _M@=Al ıAd z C ,i[ O ~A9)D @ D")B "B._sL A<5q ~v:Nte㻧3'_]9-,SƼ#㞅:$V&!RF] Λf=u)ilx686pQ,"^Sq o\w:ÄTA$KZXOD!^_EӋSLo2S)/2=]^wyi# ثLO2WϼiEoW_1| uMOkl~^!56 A" x Ȱ)q'زȰhEE@E@O1CEE,B#?%4CB#YB#B#or8i l lԥBcS>6?ccc&,{uS^V?Nyu]yFl~;b{i^=k5 [|Η[ [isօd~HdS}l 6@mAd 2p=!c&G[2==ezW)/8Ios8W'Vddc VRAMUMtوge,}(㋠C \P;ӉQל㏤%]FZ }päJY;tpSCq܌4-{2XB8\_! umK -Ã^Ѩ4xEh+B=U=%?C<  b/?ǹMU7B6etjk^jb]ڧ}J,uDRBK z }PzufqqJ9bÊg}d*B)I , "8}E[ypE5?kbbP͒ eÔ}iĭ$i)U;vr \de|D6v9y^tIJv j(KPIpQhWڸܚd ~\6)x_i^_h~(B('h! BUz5d~j2m2ieʱcێMƱiثEO؄/^UINRlԪ᧥])ExY$<3[ů^xhʼnqu_E)O!$r.*8D'oǡ/7$uS军u/Əf5A/],,.{splܺCI6 |סNpH(:2N AQ,%F7)!@{l W8Ǡ ݮЪX:A_)HR"" wq3A(cwʒ\3!bؽF;d֝ {q*C9wnK^G,ONee*t~cL&c2d4lLMdlvHR;Mֱ86o:6}8&|V_B-n2LD/0^p&)ܣ!kѝn< 2Aɇc*n1Vv$Ro~N&x%A!ɣP "/ Z-$(Y6UZI!jLSJ8x_MT$)̵;QTj&'RCS̨>p*ARrHhD\EQJsV&Sm٘L+WMOvl6K^/z&|2|-?MRv"xV=-ERM)«RdUpӂ.8W&v[r쏶L=؆/66<|9# @ 7ql O ~A9i)D @ 6gRl 6@?!"Ad @QnU2ۭ+4t|N"q8Tk7Æ4$d`\Y^!Y2R5%9$IAVJ] '~\ @n.i'|cDna?]-s{rhѣC74{~(tm+ ~+rsvSfsʴ:]w߾+P."6=v^A{i^j@W?k5㟏ᾮio+fS Ad 2@m"=%NCYm ,zJ,2,d)iINChF~HhdKh$ChM.[B#>6?cC>6[>6>6mWLOO>mwez._4b{Eh؋O2WƏiEoW_1GEfJOpvJfʛVb&SmW#ApY ě@}Ap=}l>ڄ}S槧Lo 8r8m pQ gJ]}ii'x}(]PjПRYt_~GQ/{tSp 碖ШbdӬ'8υ9p訕ܒPrޢr+99G/:v3OUb),jPZ"QNW8vb]",EpO*⋔jxX۹l+p3[#u85 օIL 5TNN([Uek(k\E\;ˇ/a$)‰iT z 2,&G$zQY#ܗ' f.+F!A.J&S8 6hzR{x^Vh!wfLa.ѤTˣ8G/"ujH])ݷB8//ɵOPn&)**@U>7k_@Z4IoCg3~*(bGS*z>]=QaM4@$|Oz\,<1q WޗD P\w(sr_+-ڂ)*8c&*(WeYރB[NˡrHي zUwB-kǩfn$9{I eHn*Ej,iEpr f?XGgm&xyʤDը/m-Kc_ja"_7\Q?ҍ5`5ݡjU PݐU +#Z7=d^'qT~K*=B|麌ia2ɚ ɘLd&16Mc±86Ycql6ֱ86o:6?/^/6mE"Ȅ/LE6|IRHRl$ŋ$E&IIRl$EI>)EhQ)EȖ"(Eؔ"lJR7K(E*:~DJ.#(@8KQi"$ _InCPQD7+tY7 ?QS`b* rcWp6|bp(YP ڧ~s epwۊ.*o>h0pY~C-tKdMI]EK?W?Uc"nEeC#Q0#2|2L k7TvC-٘L&1LdZlwcSfؼrl Y&)Q&i7er)_fx1=eOneF7`mN;i$ \9?RG<[$-6f)iHmc)dDĐW"تr8nH0Na)mY_Z~;b]Y '|(:)d$JP2i Y(PjyWEz(wNn}qǼ^P㮟y 2YVQPE`xgs5wg?G[q.> Pg?ybZnkȲ\]Jro 8tC)jAǬdZLd&d6&1lLMٚLƱidc±86fl6p/6|"| _dE&|fb$)~Z}lbx3IG2=aŶ!Sf)BȦV_& w{Y}k۱WmŇceE&|/-{ C h&ޜV, zmO+AVΤ@=gRl ZͤA@[ Db)Ie!ת%(kM_h&%܋Fh)e+`3 -+>xJYp洢H}{ܤ (yV"Z\;ٽt='\a\c`}(÷w":އ >~I:?2-N)=e^2S&slO))=]P]]P]槠.EY*b@%41-YE=[U_` \B"F8W5cs C hdd,8"`""Xc!=fE@EK&sIhm'B#8L%lbiޥ.M[]mucC>69yu?ɻ% иdCv6q鋼5[Η|y{ >p|Ηl ֭r##] h Cob ߇}vA%GmPwuʟ&t!ܷ ݯ8/"+y?rUjlGUZb?wlݞN`n$ñe%Ou9H uÓzR+j>MԷ"2(Q?D/-\ÿyd"=3 YKxG\\,nFmNd?\Y5̭ 6N)U_]}rd@r?uNmsL,LJ8ɄkFd^d&d2&1lLMdشpl2Mֱylcul6MM-;Kۗmw–mSY<j4/K[ |ҾEDdhjs}WE.囿IX$xgQJ>LG/v)"1bc筪1wp'*#&Quk>)rRP+ ZxSXvWjSRϳR ]seD_ -{-MdhB .-ÍޡqrשE;lq(N,pEyDZ;!w_{hDRݴhB(YLt˔G}TI9j d?$XDgg kʎnjZ"nj@"3/'(R/߾~_ӱEH &2spPTe nR#nmz$/Yѣ/SMχϘyzsv7=$0kyBrـQSk2љÅ*3F[g\1h6>'N?d^Ld&d2&1lLMٚLƱilc±86fd7>ۄ/^/6lE"؄/M_/$6I"IIRd$&If"Ȕ"(EȔ"dK^"lJ6RL)›RO5\nbqQJӻI~e~=TP'6\ԇI4QZiR 1''"u*0|)zsƩ+=ST6 Y!Q20QTOV<#xPQl4 v:wnlԅE7Kɪeo(Q. ˢUŽq辖V' j']("D 7b ocWdF/lt8mnGn59_qE9hj:Mfc2Ld~j2yicqlul6MOcʱQ#R{w 2P){d-|铙&3+,ДLObӑhyζ"GG} O9cU-HHS{ Dĩޛ|!W6l !0+62)˷$iZ#X.Mt;B(R|b!xc]5u|&aqD^EuODpuI! LȒ1͂J8zIjiadU)rbsm<.5uad}j˼'M:P CM&sK g՟DF \2uS*%&d2&5&1lM&c2md2M flMƱ86[&شlME"Ȇ/Z/2M"؄/ _d$EO/~X}MRlo&)HR?Ȗ"lJ,Eؖ"&//~X}m*8?Mtem^=Ec/ zml Zػӊ%Di ӊ͙@L D˙) @ "$! 6;]. kFeS/(gkpw\BeƩ)t/[}Ji3\pG|ˇ,Nm`rHPS6 J| /4F:6ɓ?cS)9e̋SfsdN)9e~mAl ^ApVp.!ܷ N݄p?;f~E~Ng -Ū,|"MRc'U:T89&&9­Fʪ bqYAJAtD\F/a7d9pYZtiu:UMAİBKy(]@m]X>JUɎրU'WDҩJL[^88 rw3s Yi5y潼dUy)2l.uQT,+%M)LlLfk2/L&c2ٚLd4lMƱ:6/cqlƱiӱ:Hjc-j.#%e;z\Fi v"1a_x#a #^ɭKM'=9\}mN+D;dBj2h?v^͸$2Xh]iIQ}""T\4.d?HBr:A+rTmVCRȡhIHn(JT4CU&}^+k.WžpT&MvK *n˹NJp7e8+r98'udEJBQ "9[NU\&5yc<ӵkwG,&Uy^NsbX?!<⚢:A*z )A%3F!N^h9Qq*jBM- TI*EA88KQt" kc~u&Ku2Ѻ$-8RT(ft2(ol^ n_1АdjP|Y!U^ڒ iJZO38`2-Lfc2[ya2ɘd6&Ӧaql^86&ؼpl2Ʊ:6Mfd-6|"| _d&|fe/$E6I"IIRl$E&If$eJZ"lJ-J6Rl)¦Rl)rᢝzG 7<2JN>Je r{wyG.[,[ocJr"8$xnݾY:{s q3xbPU1_ [UzU Ї:h,bM S|'LRH/ ;F͝XkD"!8s>> Ȏ,\: sWpWpצ!|jsᗣ@ʗxU,\>Pe&6"Ч mSN.B ]gm# Zğ}#-+Ď,wL&c2dzj2yicqlul6OcʱE>/HiMF;$QA&ms޷LIzWQJ!q:?NלQJ) JR'e(w4bj%8u=(v_ 㔫Pa?Bs:p^D߂[@}~[YQ"o+096)E*(U# EߧP{7|-/~X}m/2዗k^AƱA±wK A 6@3% 3)S Al 2@ D" ۖ^Nز8> &s-< ZZ790Dxn\&SY&Orj2Y(晗o$ `9~$(x0WO-~;[$S.U;M/\+?ќ2/N)=e^2SfslO))=]P]]P]槠.wy _!`_EO~s@dCf?4c%pꋿ`l!KB~p. zm#d Z",%q'YlXYKz ?lذh"p. иdCh_pn1uFzHhf!4fǦ{cC>6muuʟMr]$'o/z&4"cBG}ۄU^$4ne~8_í1u9_a+a+/#|ΗG+?F@p6x킺K}۠?AM~ Co_q8?_XDUMަR%j$" [փʞq!I^jK%1fGi"aD]Q}/QehW>F#]rw?b,ړk˦("+Yj"v~xȀCm̗Q+$RYx8Bc~ _5jĴ?J GLyˣ_R{?(Vmqksi/8uMy)$N`2/L&c2Yia2٘d2&ӦdM&شpl2ֱylcul2͛Mֱ&E*Y5k7e䄜t*2]]Y]O/8MHnu.)׀~|$*q+9]>LL&@͚P>%*EKhTS@ ^ۊ߅"HvzhE2h!ߠ #ZYĎ㩅J@xhc(КHhSpnR[{&gTyn($ gʅf4ۊ&A.xBđ.'y%^ > IsZ/4)9zT, ,'Ւn |~'h&T/E;2vJr^ƒQ%,pJ1yKRex8L6*V;ʽUn&n1м4@ſn 8tj]c(u<J;G0;*JVn ?U >|H:U2\2+0?I:TX=RʻXV*9 UU0őț \P?+ !=Nvq "]T :*:j8?t2{Po&1vM&c2?5ɴ4yӱ86:6槎Ʊyآ)yDLE(Bԏ5n8IuK2JYL/'7)ERjBQGˉV-ut)Jʂ:G sDBԕwQ$.S(畮.w'=CSc׋"nh7&d6&5&1lMfc2mL&cqlM &dcqltlM&|"| _l/E&| _do/_&IV_l$EI>)Ei/R6KȮV_& O7{Y}k۱WmŇce&|2|mK A86 ޚV, ~mO+AVlΤ@=gRl ZΤ O zAd 6@ ? YhP[یe9HכslP<" Ydo+l-YSKuuI;Y58]Å& ra ~de'WH&P/l}w0i"{!6Ct ė"09o9Dk+v OLɞ2/N)9eyɞ.K...SPwu鋻/YE ݯ"'t9Y!`{@˟1ܒEYcU9D8=U\AF8AB8wYK?$NlȰwzHfa/8KB#?$4ns8id. и%Ch%SM+>.mu|m?i%ɫ9yи}C6q>z&4Wƭ1rLcU9.p=l%3lհuw/H}eH}Z}A>2p]Pw Co]' />zmC+t$IAO*Ȳ[;) Y}X]"#[D7ׄ7܍"Yo~%_y9w4ZT3e`PJס/WSTy<+R1.xKeu/mtq^svAPuv(R%KQ=CI#xMέiϗCxxRPuC@4%qiBf~(^N+~9nj> z3n(;!CT.K7;>mJǐ'< 4ϫ'R2 F ËVGFJ\L"O{RnN|U}"S}&(<F/en$y/Bk[ {н>FUd]^@%'[RRAġ$+gID5{洌 Nբ^P*Ÿ#BǏN nUD~Y^X^A"at>!XѦS"ږgc}n8"BSFMQk(9vnάQ\x&z7k<*:x%7AֳiD BOU($~iICѓ a.guV 8ε͙'IMp94(^S#Z=4eMC^RZ^nYeuRW4? sA¼@)1$Z~0CVKіFPV*B AO /bS/7R7-Wr\50D)3~L+% U1]? ){avFCS(eT!_̎N KdL]٘L&5ɼi2}lccqltlƱyӱ:I)O";(!LI3:UzY^ؘBHWVgřrBGÍ(hep&4.ڻT'#V[]GЕ JzBF*c6 MֽVBvB̆[Ic[I%p {.\YP09mq^Qd:ߥ.L6_8Zx2=5wK&{:ItV'|rNknAEx@iYtcv[Z@GʡtVS_qI!禡 rL؊' !QsVB~ZE?dzd6&cSǦcʱWዟ/z;| _ _$EO$)Z&E)BOK~aSЪYष Ε窭mV0ዞV_"؄/ _Q} A" x& ) @ 710@=!"L,@=Al 2@ @0 p/d$4JxN\M%-U8ZGp;7HqqH]@Q>v='gQ5G</ !R \}aӄvVxaD/~v2 t g  (뺼*:?B}7jG=8^5įݿQ#llqS&sʼ<]w޾+P./"6=v^A{i^j@W?k556?{p~d ~ C -DM? " zH`" "M}' c!=- 7Y"0FzJh䇄FF6Fp)iKHMOM͆͛|l|)SOyE[<]w߾+r]^Dlz툽"4~FE^y+BG^^U_ⷫ0le~8_&;l%3la+ad~j2mj_̗)G>@ 6 @}# h# N2}+PN~ᤷ9+ "eZo i>tIEWcI-s]-Ώy[k:N4մd]iV7>klZ*Tb'Dt.N:Ю!M/ڤ2-#mWWts~\I䷂((ǖm '榹]YxdWXdrwDtu*= &dOt)uu,: BJoBp*zwia2ٚ ɘLd&17Mc±86[cql2Mֱ86o:6Y>ݡu72r7ٍGb}y76zwKi^d1Lһu*TAJOu*4~ q@' zpzhGudJb,*,ވ6Rm&Ům#a.Ak&Ig2ah?.HbR;^Bv'=#DXD.?np-ۮK["Zd&뾈6[swZ;+t2A B[8w)"( )| =Z}n %_Pi7>E-1ߔq l_480HU^V,M\yip}{QH0)-BI)t%,(pԃ?MZqnT79Mel7ɴk2dLJy9.$2mOo&&b* D*2yױ86:6槎MƱyϢm݉7<'RH5u8On*Iz!gI,gJyVR,)hCIţ%tF2?qCSW%?L6^/HFzqi@9ѥuKX"#%(^CSC=2VkMz$cT)9e1I#g6-Oc,ߠ~8%DKA^o wT#kz[Z`VRIw [E1s69yu"'o/~&4"cB}ۄU^и5[Η|y{ m [e~8_rغ9R_Η|y{2s ->~mAl ZApWp.!ܷ N݄p?pK_3(p塜+"'.ѧk쪜Q~"UAˈ?siC2L9BPjYw(ܵ.jpyM%N Qx+UDƝ%EԋNC@۟qy!%)rX)˹b@]ꀑ! Jq ˽Hv\w&A"QģRe68(M?B')P/GqYyM7視׃kRnj*Jr%Ȏ̙OM&&1V&:6lW 5nF# \;bc}I Uw[.1f>pqؒrb&)G# x}UX_z}n_rֈHWK#u&_#L^O;;z-k?E%lj j kґ)Xے}6"'8_gVE)fTaQx$՝2$ǘ8 ҭ_'!n(?Rȡ鈇E) isJ&Aaef xk8_cU5j:M|W"I76Aĩ1QҚ[TN'|぀6I I;Uxt0kwn=Xmd5ɼi2[٘L&5cqlul6ֱ͛86o:6Y>~->f釜ܡ*XkC~餧!*̕ 4Uq\w#^n@̕I:Hs*y&u|ŠP l,ȴΩLEQ#Qj|o(5S=)OҕadDlFA*%o)0OMr~ ]lQΝ wbd~j2m2yi±cێMƱyثOȄ/$O$)Z&E)OKzaS/"?-8io+*8VӶn+VVEO/~X} _lo/ O zAcA@[ D @ A" hs&_̤)D @ "Mqq3)/^IA *FUk0t<>褭v)ɯyՂ2D41 JH70]}p_U_?iMo+6@?!D"&IaS=$Nea&- c!=- 7Y;B#?%4CB#YB#B#mr8i l d/)yM:ezz)h.wyEN/?4b{Eh؋LO2WFꋞV_v}T_ltld9le;l]OMM^?M6@?!Gb&D"S}d>6po}d)SOy~O96sp8(p(G5R$$ÞGhF 7!"~U`Z6O'Rt r$n ctsC sotmm 7=ݏ6d֑:/Dᄑܡko/bikԝ3R&D 65|U  s6D%UYR$FK> ؐQ-MuD2DRrQ]Z`\&"7AZE M@Pjy&0Ξbo.8ٜR(!A-ͪ CwsK7}>98 Lc.*+C)-}UPow= dk뉣$V!"rV4-XrB OL'w ;*n6"n W_H q"E vpk%040MuuS}594sP(T)f*PBqA[1]YpP2TcS忡"G"GT,HRNXl3brN7&a^P[=>5 QGkI|H椻7Į}+{dTrզfp'q"4<60^l\?GNhFp(5~ҁTf(;d=炁T!;4GF0MZ"{,w1&1ɴ0lLfk2id086/cul^86flcӦcul6Lbh؄/2m"h3|G2IIMbh$)2Il"x3IG2-J6RRL)B!Sf)¶9c Vvb˞rT^9i/G9ՎKM7T1o!I[*6ۍ?C૪h%#gnľSKtU+ j)Ck%mK>vrS6 w1Rk6ew*JؤHKHVh )+*5&kL2o(w:v˱D/!"p;ԗPz 'DXxbϵq$4O5qSs(!97nzŇteJ͐3p X}SV}FJ(UIS>7ro&1vM&c2?5ɼ4yӱ86:6槎Ʊi؈xuf.x8.d La'tP]AM(8% 0 K>q3ֆwUGLv9\zP;<5E oMmqezM} 3IQ;051s(n׼r ;ol$PcTS7ȑ]x"YԼ1vo.S)!M"bN%Yz.6eAX^r@zL RUCWnFY UX' T4B|R{ȁ1\>*K< R㿙L ٘Ld^Ld6&5ɴi2[86/culZ86&lcӦccŋ&| __lE6| _#|$EO/~X}MRlm&)HR=ؖ"dJ,EȖ"&//zX}m*8?Mtem^?ſvp%m +{wZ!=`jZ;ZAڞIx92@?!D"Ad @Z^T748T@C6bIeHcWGZP-\Atݖ6c(@1ё1}=(#k˵8ߓ]OoM_^6sj-技Mx+}le$H"yqdN)ٜ2Sf{dN6O>Ny%syes).tdC6t؟f",*/ hvpK=dlVn\B"F8W5cs C h$d,8"`""Xc!=fE@E@+.sIh䇄m'B#-9L%ddyޥ.M[]'mucC>69yu?ɛ% иdCv6q鋼5[Η|y{ >p|Ηd ֭rL#[@p6%?h킺K}۠?@]~ Co_q8?YWg+ 5plybx1gg5 ؃py)>J n !^Fx .9K )=Z x=zY.xnL*&UoS22 SJ48|S"HѭzwW2Ns( 7+]Pzɬrv at: ?3) &c>YcCDJF?0WklV\iʗqs]2ވvqɼ0dMdL&c2[٘L&Ʊylc±86fl6>S޴oTRt|CHG . .ɱ1Zs)$)4Uͥ+@TבyBw@KZLeЪuySP-7CEU >s gyvRQCBѧt˔@~$yd|V_ H8jH?<6TDAߧ6BY'GwɏJ7q]ioy]*!(]IBͼܤh`:yp|4}Nݏ)Y#w- Dw2ٱux]J8g#* ']Z΢7'`L66DC`O@׽`:U+L)} Cj%4\jֵR=s\l[u͈jC-iS&CQ͇!g()p$rPJ@KBr6;~YZ1Լu`Yx& O*xw:?+]qh=b:(~g2-L&c2Yya2٘Ld6&dMfؼpl2Mֱilcul2͛Mm/6|"| _d&|fb$)^$)2IlEb$)IM$6I)ExQ)EȖ"(EȔ"lJR7K(E`kqw]O]*D.TV1^xt7h|'݄Jͺ8\*fƱmL?I aUŵnXד~O퓂.|:R7uwڊ#&9<1PNB: ^!*wMDTY|y9e.]EA0p5"KLW+@|W<ҡ`ĩX["֓ :ru0] ~ ,J3;Wyȡd"ݕ.FDP,& 84ɴk2lLɛMƱiױ86=ul6M+>*0]P/JU^7_Ċ߂^JG4y-{m{ĥ r򈼪IƶN)>DGNIDҘg@qTc_o!g1OuSp!;)RUdD) S-1Tn4iI%7(\,yR w.bw\|7&1ɼ0dL&k2yd&ql^86fشpl2MƱ:6Mfd-E6|"| _lE&|fb$)~Z}lbx3IG2?aEaSf)¶5yY}kUic//~X}m;p𵬾aȄ/Z]{ C hfޜV, zmO+AVlΤ@?gRl ZͤA@[ D"8xMdFc0Q8;zFͼQA {-p댽`/(f;" gh5D_x(ܦY7n5"n7(DX_#AaKA Ww;e^2S&{ʼ8e2ٞ2SSSueuez  /YE ݯ"t;Y!`{@˟1ܒEYcU9D8=U\AF8AB8wYK?$NlذwzHfaЊE\!qɆ+.SwIhm.B#/|l6|lZwiK>6?coVWA[%'/MN^r.q⇼mB*b?&4.}ݷMh\e"/oez8_í/.p=le3l_ԗez8_L/Lp? 6@-y +o]}uWBK} ݯoPQnǙR}NcC;!N(?,_s蚧+\73~H\`AG*Skx {akE^ &j Ep[1"5uOQŰ\\mWoːRxu9;t:RJη p?J\VTRoV,1M@cSvQ45RŖ]$K[xLqTWIjAHFǜ}g2/L&c2[ia2ɘLd6&ӦlM&ؼpl2Mֱylcul2Mֱno,kty){RKp::t{ GVEnR1 R{C@g30%zm+CTC+ _$O]uV[4ݐ.S%I2Z.f))WDzmJΌ_ rG^tZm8R{S *J)N~{}2&H:r }X>_wH! Ň12ςz9q(p@sMMPU$i{ oa0{,{MUy4>isNIPcP7CX/~&e{(Fh)~U|".Uc4xnS,鞳Ey`uI+,G7$f9]'g[q!RL1.+ m,% }{b:mpKɤ8XTrwNN8S]jR3O,ϟ r@SZx C:yf~pS pd@ &^%51)@rO#&vvd5d2&]fؼd:6Ǧc#؟LTd,jLCmSЊ:,:s!Tn IOްqqPB)~%jb^JZ%nsz67HrrV|')`z֗@xR>)\w(Z޼(g>Jʡ_~orvF5{34/s>9eZ2S&{ʼ8e2ɞ2SS&{ʻ.̻.LOA]uw%Uw4K?dlhVyc@;[!`{ ¹!Dpj@6I¹"X'!qbE@EECz6 V,] N2FZr87KB#=$4n3uycc󊏽K[]!{:O&9yǦ|mr.7 K=}mW1qmB*/yyk /nU}}v2?/o[ [[#|ΗG+?G@p6Dx킺K}۠?AM~ Co_q8?{.[=yCTӍBQԏR.%$lQǤIэ?Kޖ4xqrU>1ųOo=@S{Fmf$<XN<{"!CmoF$~)ҝxxrU`HF 4*YJIRxTd1Hȁo͟|Mz_5w R (}.0iZ?}9sY]AG%$ ,P Ѧi!Mo" ,کuJx: )J 44$xV|>&Sm٘+WMOvl6KǎY X$e䤭[ÉheUt/HlPE{ ͝g /zN,,Wʳ_v% #z$ ׹]E-Q߳xM_~ v$])3RsUw8u 0?j.k=Ɲ~}́a˚tco#nc,N)NxM?' /sG dH;-%OTAW˥N0GˊݮZ=ڡgG ZjHC/Ohs7ebA+b}~Æ 6_ !x4]qyNeJH ϸjFl7x"^HSh* Y<8;z85N7(]t}F 4Bv8)+x@V*H )y-@qb1} &Sm٘+WMOvl2+^/zE&|*|?MRv"xV=-ERL)BR$gD**ףNSQZ9>p&_}+n?%qA$@e.p DڡpJ|֘kj}mǼMb 'TmKlv5vR$dMx)bt *΍&fwߥ$5}ʓEGљSɴ89r1U|˵F2%бNǕ.KJP5aX!&W,#( KDD}ǁ[w&1vMfc2od6&ӦaqlLR{M6Im:6[&ش&I&}8+'[$&;)Fȉ)y]/.>XRтv/ŀXK"Rkh컂ڞr6!Fg.pM+*JM\sw )e_t )*ܥ~s9Ź#^QM])3"A5\> RM1cN|M)C fgvIQɹR.#O|6 lL+Ǧo;6c/= _v"xI&)z;IIRJRR"v)BU)*8io+? _v[r쏶a6| _h7|mA" x/p$C ,Di}L+ O ~A9" )D @ "P>ҕ2sXߝ\uꨐ ұ+_tY&Ԡb}Hۈ[iUk(E nT#b;q֗# .|O*9ku9X]3/JL)C)~R72yAOs$@Je6̫S^ezzu?*bӈMoGtyez;/4yg]}pcC`^!56 A" x Ȱ)q'زȰhE "zHa" "M} !, 794FzJh䇄FF6Fd%4cS>6=ccc&-{uS^V?Oyq]yFl~;bgye~;/yyU}ޮVc̰Η|찕Ͱ61l]OMM^?LfS}l 2@mA}c h# N2}+PWNz9+)I'ZDeӆpu91qlXVy(Vʗ&w\T aa I- e. ucK^,R@K*0+k h՝g!I_敒caVRaK=_"1SejEעРZCKxBSxOT Pϓ ZZٹJR]$G+J([i'_?e&n]F䮫BFYRSRʡ`<ßOMMfc2L^96=ul~۱86-(v:aWлjHs)ͧk;k=)`KE{9H 8LbM~~ @se |zU\@:8Cy&ׄ/z(;s@#G.05 J#R'YEbpJųۄҟ6D' 42IЋ7zLRk1|֦"dz .(;b]ɗHٚWh tGK*s:!k#aqR_isx1@ȣ"T>Ҧ"tw)/XGQ=0ڧq@^Z@Α-V~釾r#GHաrtIaU"R|2߆]0y"C(^ïTlh*mRBAG#cz1D DergN宦VI'4iȇDdnc~RͤRB].]ijLjԦTJ1]djh 8?[<nH!иVH0Ar*T8*M&&1&/:6lV _4|LeZ$)~$E&I/$"K6JC%|@8qE VR٣M}ğ,&"άf55n*tndY-5'-?* .:F gy2w].RyTCWqN)&IA_!}V.l0?] #<&i(S,|Ep.&u[T U/[#L+"9&%$ nEGp#LYw`Ĕ/h? *ʆlOI;-h|Vwө걌t4TAy(KER+CӪ)'~̵t@LbrD^R ɡ.'TIpJsXR7bO"ҞTu 1_iY# ?Oהx}Y}Cҕj+Ա4l4],XX XO; J v`85sOƱK>@~9WdSW7.nf2?56ɴ2yԱm&ؼtE_d/"I$o')2IIjQR.EȔ",E'=-8segh+i[Ao+l+~V_lś~=|G Ad 6@ml'C -Di[ O zA9) @ b .`(0,QWIR.6O19퍤Kp\VL_atgu胦*  -D!g-uɠvy1RTe֋ḚJɬUJTĆS:˨C_WKxAc7Eڈ9S+N};Ή=~k%b$F"C51{믝2==e~ɜ2-Oyq] ˫MO#6WG^ez|Z}ޮVc81!D]cΏ O ~Ap@w,zJ ,6,deaSz ?ǰea&>1O ȖȆHNpB#=%4CB#YB#B#o2uhMddؼf^2?=ezWՏS^ezz"'EĦߎ+BG^e~"4~EO/zZ>/6V~:_eV2Vǰua2?56y5R ~ C,M -Dp?}l>ڄ}So <r8m pk U!UzD~#7 zBH9] uM]8yڋUN!_ű}6J% Y_k/ɗ&!b_AP v;$%ɽr>DߤoW ĵ]yzJ/P*q΁rަ8QfFB& jE:ͶJK҈Xk&Smɘ+WOvl2M+^/~&|*|?MRvbxV?-ERM)«RR%Px*%<yJEG|- $U`y)Lw;tY_nR"G*](^O9 H]*Rul͍pV U)!=%OO^tW)MR$J.}@ EP])9 %&m :6U+/{QK R4e*7;}ttkzW)Olh5A*\#+;Mc”+pOv7HKugۭ&A[Z@8⓰z ^}lL]ɘ̛&5ɼi2}lmulIjӱ:6M6I>T*5^瀦5/-Y.u}}Iot8n\j puӻ:;Eq&xԿh`CP|EŹT.k&SmɘLKMOvl2MK^/zE&|*|=MRvbxV=-ERM)BRdUpӂ.8W&Ki[Ao+h+~" _b؄/ _ zAc ~A9i) @ 7gR12@?!bAl @С6]ϫbޖI'A,N&FТ(1ƿQ_NU]Tn.\!XU=޼/ʿ.`(Mr-G g2x_W>>"riN+Io5HVQ+.`ߍ> [HDڊti)ۧLNwe~.@ݏ4b{D_hez;/4yy<>k51={p~UcS Al 2@o"=%NCYo8aXC1lYdX"z!4SB#=$4%4!4&p~GhF~Hh$Kh$ChM.0u !, 7lثS槧Lo_Vz]qWFlz;b{i^?k5 [|Η[ [ysJvغ2o# z C,M -Dp?}l>ބ}S槧Lo N~ù?9-ߥ,Wօߗץ3_ ¯N$GUJ@*&w}FEYQZR)p{;*:Ū"c-UHOLcuR6y9 ѵW7ɽj=7g~I`iMRdDE\KeB'ZJZn,!Mj- @;J?~4:ԒVmEC_3njfȽ¿P(u[rXj$)U,I<:ɴ0lMdLfc2[ɘ̛&ӇƱilc±86&l7>˅;/|&Fλ%ITH*:$F,2iTJP)ZMrojJa P0@sa9X7 /N,WEe=E+ңzR)"ݵ4>>,66rZ&=5gI7·)9͟zϪ.]zl@QԱNYϗXyю1KQ$&\T;ME+4{:vuҼe9@zHXOt2nbd0sHiBܥ4ʪ0ᡡ^ 磻O} ouhvF)ݒJ?F[tڷ2ӰJgC#gDTQ|N-|h TR?+@$M^"b bTG*TI )H'5*O{e\ƨXhG/O2@jק*UIu]xIb:dZLd&d6&1lLMɚƱydc±86&l6?ۄ/^/6mE"Ȅ/L$)Z$)6IlE"$)IL$Iʔ"(EȔ"dK^"lJ6RL)›}"r1I>>S~+<9?W.?đcwrBv@vA>ʗ}8vU.b(N!B񩨑Ko{] (X]qQRmw5- K#0'.Ґ'n">%px42`C}u;6K͝A!m ߠSRI\I8|%$`"EV-j8-9Ox3 G-WV-|.9L.>ܠvȩz6b98b2a[Ĝ95t恼{~QCMfc2Ldzj2yecqlul2Ocʱ .z`y zEKyI_"M~! !g0 4ZUY>H/ R:iXp5 [$HE5 5Md)yM҉Keq*A[c*O4)J I]ldO<ϑYRt@ 0MW]dl,y2vp(1VD`G23V f"y>X$KF}6ˉ @]tRT!|w&d6&5&1lM&c2oL_|wl^86fشpl2MƱ:6M/EE&| __d6| _uOR$&If/w?aEaSf)_"[&//zX}m*8s˱?{VmVZV__l-&!chcN+@=d ^M+vgRK A3)2@fRd z C -"AU GPԮ Lhl$g?L&I^¼.,  ]mjn`_TJ$UrDN)a(4~o|B٥H[\wŶSSq2Ӭ3&1ɼ0lL&k2yd086-cul^86&lccccd3 Rr t&n-O IˉԹ{ y%k8â)cpkOOH Iσ2_g\MZ!CZuV@ִr GC \$띲Xe;2]Qnshձ4NiHC3MJQZw㮧cd 'c\ڜ$ a!$8{'OFӑӒKBb@WSFKO7=X9E.3ňZ'*"w5xE<}oİ[o䶮h1Jser׈.urnWj2uEJGI&wK"AS2^,iImk]nrE+K3p~=?'NO4-JVyf/ЁL੺ Z,'@S8=Jq.OEoqU3I CH_wFC[P VV@ΦW\rN_ ؅ߪ $n-NQ"26 kLdL&k2-Lfc2ɚLd4?L6 fdƱ86Yfش&|"| _l/&| _do/_&I"IIRl/$E&IMRdo&)IL)BRM)BE)¦aS-EȔ"YG) -BgirhC}nn-ͶԷ3nR{A >wQO: 0Ih8 p8!ӄ#zO aoŀptπwtl'сF[ Bw.S`Z8vr7KU1hVxH=XT]xui|dF^j2r)$_/Lr^C3财J~^4*[!|)䏡D?]G$s+Ħ)xjR([P-øba#7Ӌ@Mg:Nj%5&%륌1[cǽ3p /M-VlT|15uq!֦tͥ^{J04A zR#[ܺ4) R/rE1ȋqۤn$G/ZW|lsʴ8e2LyqlN)=e6LwA]2wvA]6wBK?dlCh,~"Ьfs dCnU}}6%D!msUc?F8@?N2@]8A,6,,%=cYlXbr8FzHhp!4Ҋù]!qˆH+> V|]꒏۴)VwK>6?coWwco/~&4"cB}ۄU^$4nez8_í1u9_a+a+#|ΗG+?F@p6Dx킺K}۠?AM~ Co_q8?cc9ƶ"Vkl/_4;Q770ǖS-JIܮQ; K3H8&]'gWBPAYrjB5vRA:+W^|9]ʀH<fx`[į۫E> bܤ:&QٷbaMߑO:Wx/U@@c5{jO)>$J$]*}>͝4rR ɼ0lMdL&c2Yɘ̛&5c±86[cql2Mֱ86o:6Gf3BnQ{y'WR偂4IY&F"/>%q ]054?xȐD /W%U3STm'%/Yg[P˥Z6Pntsj "yzSTBT]$ԚNI HGIy46Sqs9qg*nWC~F'li^=9BJi`.|4\ c*P )5.ċ0sq!nSWQTj0yѓh0N2IHz4)g;:`%CZRAX%nн˩9+z$Q@BSPm!idzNXK:@irk$\IK)L-SNm [\hrڀ3bU,2q"rQ׎@(8_)Rt*GG1S.IiI ,¸RU5ACiܹz_MlLfk2/L&c2ٚLd40;Ǧcql flcqltlM&|"| _l/E&| _dm/LE"&)^$)6IMb$)LREE)¦![Т!S)Eؖ"dJ,EȖ"ĦJ[gz|?뜒91™\CT %T~8~FD|$pD?C6Hģ&AD(D6 gQz"VCf.ypprԾKXI9wq0uċE]׮T7sH }]H疼3 ;/E+zu:FJ.YA95$Rȡt[op(PaiR4@s[13s:z>eNكۡT Qc$zLJ`iʭ2ɴk2lLɻƱiױ86?ul2+>$$_LqrC$G/K|a l+z{R,֭Zci1;s ju&c8<pOМpJSZ@.OZG| nYy4&(Z%Zl5u=@yrrߦw&d2&5&1lMfc2mL_c±86[cql2Mֱ86m:6Y&hȄ/M"؆/26E&IV_l$śI?)EiE/R7K(E6M^V_6yUp~V_ێj+>{7|-/~X}m/6Vk^AƱAı7K A 2@3% 3)S Al 6@  -XdT7rnCG>6muu]r]/[% иdCv6q"4ne~8_íp[|Ηdԗe~8_LoAK}@ @<ܷ .>zmSuw%Gm~ "ݔJ0ҪrI+?*q PPR `iϭx@O2^ 1oF=ZU~AEeS[[sQn u8r$HNܦ)&\Ez *Us]hQD8p;Mg$`o9קdU&'!WnjU؏$"Ӂt찖gVa'U2d)l &gI+Yr!ݍUSrĩK%PT'"n%T&P 1* S!, Uey"%b}iP[H %.* I#to*#:)t)!k&SmɘKOvl2Ϳ? _4|LeZ$)~$E&I*IJzZۥRV.?4}Wq֪\<.jfe M/͠k!V轂@ $|Y=P9(L_ZLIpR~RQ ٢};ϻ.W0OTC n+.Yҭ6}-; n'mhS}m(!' ",ڏ3n]yX@NEۊKQ T } ~ ktG8'Gj Rkm$͊if>Yh+↡h >\k|7ɴk2id&16M/Lαsl5cul2Mֱ$)d1]UpMj(94+gkf;sgC]ys o)O)҈[kMr`}RZ圪Ց-}]C".u;]m)P2D7 ЀZ#"^RE* 3JRM <)MJ``1Xߪy:V*rwHS$1 JC~ë", N>kF)V߀%{"M.J$?:C&5jR/70 AEy;OԔH*8Ţ kҔkյ|[:9ƽį"F'2CǰXP;ܕ5uC(T[ײ|$1HCGK_`(O/2?=ezɜ2Nyu] ԥ/@ݟFl~툽 ӼoՀЬg]}p={Zc5 A@[ D'}" ~H "`"MY=Cz YoE`H l ldKhdCh䧄FzHhdKhdChM.} !, 7lثSoqʫO2}W䏻4b{EhثLO2WƏioW_1getll9lad~j2mji)>@ 7 O>z} VOO>q+'?ptXp ;ɐcB.nT@WSE4$M˩'}7H4{Òځ wbL~R36E%&k !ՉR@H3HUO.{)ՑIkZzv~.^'+~kǎVsk{#h/kDrG^>@*rb);Ćtf;]&7ߣɗnS MHejI9cdZLd&d6&1dLMɚƱylc±86fd6cjXAjB%%͠~ҍ;$U$m髠{~>Nʼn,n]ʳ}Ji^&Dl46 3T\?Tj qjUIhǛ&l E:*.}uLL̡k@$KFD8&d6&5&1lM&c2oLd6 fdMƱ86YfؼlLE"؆/^/6LbȄ/ _LEb&)^$)6ILb$)LRL)‹RM)BE)B!S-Eؔ"YG)"-~)P9:;-ѹRzŮp&j]|Q D7lG,IJ.M(%Cw8OAYu (h#uN8,9OxYG4+ ݀|ҧ>k֩rO z(p|KyniD.^xEKZJpqyYt$LTC}MrUcqe|c(t`] U,F:\<1y FPPU˚ĢTˠ^nyA'ɧA6R_ԗ>HFS6@^ph!|ת&1vMfc2od2&ӦlMflwcӦcul6͛M_8vc"G] ^ƻqƄs+ fxbp2!av~cE B {Ջ(śZB% #ܔ+D V%-U>^kS‰J?kfkO#59]>s%MxI L,TP~ah;tPlSn@ҲL;6bw)0 NM $Yc&埂0SSʽǚ:pViY)SH&sB)'|+ \JAt~u QnjqG߲^8;ya2ٚL ɘd&17Mc±86[Ǧcql6Mֱ86o:6}8 __dŋ&| _lE?עILUe$E\eK2/[)E蟫xd^+~EMbe/ _ZAc[ 6qA9@Τ,ě3AAd @\1eTAkEJ $~؀T-ߦCnEwpVc?")D@'/j>Dx@m"A+,q6Y8.cxE>=fEh]%4&yk 5MؼK[)hMdZ9}>EFZD~]B#/>o5_1/ϗywj˼9leH ] } }}?.KS^]t>܇bN ,|?X}. ZuT"QB};+p$ju,x\>Q mD/̋!cWlqQ @T6Hѫ#$qpmbR*G-')70I)sߨ85\IUT1l*T튾Šs>yrvaw v.z'(<FTggTKv_c(>}y RkB$Ldubnm8yx7got0V5g弇(?i^LOMM&c2L^96?ulz۱86x?g-5<0Cp/Œ<8T > !6&_.a68g һhwMɘ(Dhei{>jKR 5x+y!0wx`B6dC"r|% RF%!)HZJ(R曆Qu= Пa:(f)ڌyRG %7iO?.z Sֵ" iH*:y禢Xڔź: z T%+bHC@vWK:~꫺tzS^Pbq21$>C}xD K88:9ԴE.Rㄠ "EY@JTf]xRM< 9dD&M_H.J!x@.++mXc*>#BE|ֹ'Fԛ=VpfG2\S*E_)(LΧŻt> 8YεkiVt9ŀUƒ_fW%RCsGGR^ImtwʧYqE\=/Pꯝ2==ezٜ2)ow޾l2-&tY4/yiEoW_,]skm`$.mذhE@E8" "]qz. w9l-S vd |l6|lcc?槧Loocӻo}>&q;b{Khv^gmᶫ/~e;l%3la+a+sezj2m|y".D#.G㧧oo)pn}w?QGNa ^CO?,Y9\m^*x3K*S6H3TC2}'ޭW>_®dUzJx+I'1xzް _(&%D(uc*6n46̟4QZ7lX&;ZkOA%ýzE{92 eJ>ZBp!(nЬ'u@^/v;{As U ]QJxOMM&c2/M^86?ul~۱86hK'z$)y-,.XZOS;ICECSB WT+eyiX'f<ȃy *ԑ6@zKoO[!X7h%DSV-J"y--t6ThĠˆ$X o{2˟̥ O$E7Z3IJr1$G?I!R`eKڄC%!T(CQe!'Ð=:>QKÙwOiRUu Y]7 37z\^ 2DHbM%)v\uF<ȟ.IN)<.K\, xj{p%&QؘĀ0T.(w[8=PM )K&5rC TWH:;K M:kGpAngqzWor fF0:BS(ڱ}2 Rjqn9^ӯLOMM&c2L^96=ulz۱86c4|o/6Vkiⷓ$E$*Ei)Bo"lJ^" ~6'm$mE2յ7( {:M:cWSyB8;%z|SGw ~mtA%nQWɛ\_uBFp(;˹B>w7 8N'wulT*}emM@ːۑy m0蛤.*>sWxH{ul 3PCnZ_)qH=B$*[ts_|&AT?|!gN,7c.8@N;bytH] -9Ap,UTڕo7Vu#NANTOT# 6nzrHiܽ`a ʭ1O]WV&BzA}(NT+zz_HSlL ǦMo;6c/= _vbhI&)~;Iꋞ"v)۫/zZpoi[oL&|vql6@d ;  DdgRl ޝIAd ZAd 6@q Fƭ$#d mb1  9 ~)ۧiuʻ]2̿nAގؿE@O2;V_v"D8klzއ6N2@"l @. vYdXlj,2,eaߠlq8yɆ2uyKи&]>6>6s|l~z)v>6?]c#6 kиmW_vvJfJV6Vdz.] DS'/p_ حlĄK kj;^ڧT1IVϒWYlp'(F8ڒڭ h {sc#Rf=WHK-qmM0%T@t `7փbAŁ$EITGdHQȤsu<+N~w ucԏ6#ـ5͕DPWVWi[!uP[U4=ܵ%2bԮ:jm3xj2LʩFj3uI8&Sm٘L+WMOvl2+Z8j֓-cC ~6Q.G}ɼn <o/1zJ:B{Hu 1.62KjJ)-ߤ17̈ 1)ݔS;u{{#(PɋčooKtkc<Η$ˤ U<\;)M/liS ./Kk Ǣn,ݹyj8ڵ>n"jCi6AqA()O$%$%)/8U_칇y( |}><įh$|nIӁK"0)ԵXOY!TH]mq3yfi$zZJI^.kҒG rV}CMU8|`UIC间JN`Q"{=>0)v.)W(E<ӊu6-I946X34 u7n{M 7s$FnWw f*zwQ1DG2BSᦟOMM&c2L^96?ul~۱86/{iEJR4IILUZ"K6JCCjixhAoVŒՐ(0NXsh2N\,k}nq F!b YCnnģR~cgB^@j]F;^yfnLk-6QvO 9hR'FФ=rtko[rP|v" .r-L1c{/,8c!_gNGc03 s&T xq #Ld5d6&]fشd:6_p(G+g4JR tJi}AՃtNm.1Q$ ӁuZ*0{~')!+ǀ~;Lxs$Y3Y'ܩKϽ>7t&_{s$z=r.ɿqS`V>%gÆt!_]@/ C3c]$Ja xgN{FyӑCG x$ON,I)n#w_ LmsQKV&nrUqgZ9Y\KxmΠQ۲ !/{Ncz0Lod^rlzcqlZ9*|o/2Vkiⷓoi)Bo"']pꋞv[۫/Ȅ/ _lk&.M 2@N+AAv&ݙ 9 Db@%J Ԥ.] z9G"FJ5ynyD*_  aR|1㝥5|zn+Y`3SLЪV >p}u%5u =s?%[2µB᤺(vUԍ\7Z$ʐr˔U/7h*;^~: #|쟞2==ezٜ2Nyݾ]fsiy7oG"y˿EO/zgl"56]coC' wN2@q hE@E,6,ĉ]Ȱc69d$ChhdeCh?Nhcc. 9>6==ez;ez.ow ގMBv^>os ]}o/a+a+[ [/Sm˛@ w 2@pv>6psp?=e~;O96s[r@:o3cSD'T4Fݩ,/ G.+x5:a^Ȃh$6=дyD#Aׇ԰S6֥o& NečG884!2 &ep c%c{LSq"'75i.lj;IٵUW 㩄ץ˖ܫ"HKj%Oi=Pa.RI+K]L ɘd^Ld2&5ɼi2Y86/culZ86flcӦc-U=N@׆mj- o$*ŌnTU"vgn*OA*唘Y:- {}xc/!sR}F墛y!Ӏ)ʙ!!dk S0Pnwowʹ8I ]S{ x< -bsq33!K(=䔮G pY)z,d.' nTʌNRm~Y$^onj@(9L+j&#/N+QLj KZ%g6)HAn Y &|֣BZByF;h>ް0igvRCY0"G܊}Zk4[DfIl\Vllᘢ5T9kWN0hG_QtqI%n"q`!O_޾89 r7q`7IU,H]/{D[;S#8'Rᇧ%T(olE@8.窣MQF|]LdL&k2/Lfc2ٚd4lƱ:6-cqlMƱyӱ:6E&| __l6| _Ȇ/6IIL"h$)6Imbh3IMRdJZ"lJ/J2Rl)BRm)rVpNe %d5OPM_&ւr$& M_,[yBXn~CgcD~-E\ Ϡ~HGwmpwr`K~CD[t2 WȡE9KfPIrHFޕma64H !4k ,>C-HK KԲAjysbP|T۠N=7BFY 7AM,ҪR!A.'8Ёؒ\i/ pE1 ~g2yd2&ӦdMfc2m&fشd6cqltlplӔRHБ7 OY"Jn0K C=5ޞ ^py@X$O(_R\_Ћ-u&h2F@=F' ݁FhXtptT.::- 2YPr$8e۵rQ (U$IqԆR:8ߠJ5WIp A?:(FETLĻ A;@mΤ>Db bAY4v,-C 9Bo004xU;` T`p]%MU^ZjNoR "*K\O9GHĞ\ܜ; MLV]_hNLɞ2/N)9ei]]^+P]&sy.w,ޅiWgyy5,ѢZg E8iQc?, E8-ě eXmqbA]&}z̊HNKhM'4.Si>qY>cwi8miL"'^hH"4O}KhE^^o1_1-ϗiwj˼9leH ] } }}?.ˋS^]t> (,G?P$:#ƞpr :K/C/ᠺR~sI\?óT# AWB6JKFa6ZF0!dsW\GUʷ/raA'TW!qۃ 7c:yr~faR{K-mGUP;?ӘJI'%~m3&1ɴ0lL&k2id086/culZ86fdcӦcӇcﲔbs

AM,Qz Y 2RF](- =%=@5 8EBt ;':$nʼn0U5s(^:ϡlMWSRI҄Z%fTRW$b$ݘñlEw(7H)VEΗ74zoY6my͖=;e=ezgՏSeڽ]?,bn#gyv2gƏބAd ^Ad>څx# h# NvO>y'r8m p*TI 婘ot_q5hV,U֯qn}ckQR\I#6դhYfܥZҵXG NVIԱۏwo;fU7 ͏U,k-CdC.E!I=( l bIi>Br" [Uqp =ơb$n{wJ @}iEGi%/U=ħKCjLޣ1@T:jC% h'ƖOOEIi4N1׻Eny{ X4y\t pCxJW ~̓^߈ aFڔ# MXi Ӂk&1VMfc2dlVccql:v,fDX Ϗ%6 .2Ȋ0em +1%)Jҗn솓p82$'=rM=p4R Y@10q'ıKֽN*!'M?eI3)fVٵO PMolw+0it$ěР$_cho$~C|b#*D2R9%ǩ f|Uꔏ͛|e?i)7]$'//}-g{8e&o8_p2mΗpc :lΗysFo5CXft w䞟C=?tڥ%@iS z0=PUڑ/Yb9' NCV%O~v^p/ƄG.ImQWH lnCȤs֙SjŔ]P9tu>=pi6㔥_- $kTn ^/k.;8z Dt>ij`q2:ަ*nB5H@F1Ry {"_ʽh}76RU_sƚ1 >Z4%әnW;a}$(Bfݜp9C?K5u5 Zp S&IZ+XsBxKm5QW+ϴqK)aŗs`U߫Ty^| R&=X 0'PԫX#KŚ]J@i7@dRWU:n$ \)q] dQZ$MBuqCV=g'q'byCߘ1`dRBZS$aL y-.5읹y?Mzzs$C@8vȩXSnqL wf2yd6&ӮlLɫƱiձ86:6c#HκZc VG<ka7LS&slO'ɜ2Sfsʴxqʋ.̫.̻..ASoYW4Sm41YMY"Xͪ1*9x"XF8g569xZF8A29yv?ɋ)7y_˄Y&4N}[&4qu 7/|yy 7>p|6V2V [WG2oΗG3?F@Mob}4VA)Gp2;;Pw} -C3tuCbagA}-7Su+)t/?|s~ mX_rFr77Ok{E;O?˼RImrQJ핊K 2oM*tw-]:!*ҢVIOþFP< #!/SӨ%z<՛R>I%, AՇV nGjZć~ߔ(׷&[#†L EnSعK$ 4BUғ8Q"l.KyO;Tcb2od B8$ca= Y: TH P9YU;FH,6Pܸ^%^Ez`Kc\n\(֦PTtgĖ IJ.d8HR7pUscʾ3Ti*JZ10=|TBQ\EvnJT秫U;HI@|TgKf2yd2&ӮdLɫMƱyձ86:6Ǧc |r8$d7e Q%v,hYEyGx7t |T- SW~Qz3u5}k]R6F bh>\TC(E0{hYblpUhzQYyvLZte}PmAmwROP7@2 azϗԇ\<pqć IA&y!A.o{Ux<t) \v;6dē&"pkCp7dv:om9_JC֜SSO)WAoe6w.AގؿEy˿E]}ޮ!U ī' u hE@E@,2,׉,6,^eaпOYp!4* 8Be!4*S uB* VdyS|l޽]^c#6y_Loevnⷫ>_V2VZ7_]mˋ@ W 2@pV>6pqp2}ʿ]'\n\]Jr_(:"Q?y}\E,c=T&3Tq`sWnw#p4Wۅ^x hwHp-7JvۜNt:hK~ZgsIj!SON!!jH9k t^t9;x$( 12!ƎV{.\xU\i2ML&c2Yyb2٘Ld6&Ӣaql86fZ{v>x)@U't>woIթW_֍ iՖUg,%^h^a _T _Ro iUNjx*Z,Is,8u]gr=fcM-PbG! MJ,=OrhTwxXd2z<vcT-`歯Kjo3ԐzB8֋v@q泶 Nm>9vTT ƛrݵmՅv#rBɏ鲔U)% ,9)`ɊŃy7So(On id~d2&ccێMƱyبv09 u7Eto.T4*Nj'/{y;)СczJ';ǪrRHkшQϝrZ"Kjxie>4D$#8`]3@_}*P 7%s>rDT>6>6q|l=ez;v2}ثMoGe*q9/yyݷ8[ϗ̰Wl͗yd~"U DYN'.NO&d6&5'&1dM&c2/Ld6fd&Ʊ86Y&ؼd,TGb/K7-lC0A J]%yL N !rJU)/HeCU]ȣMe>(y7q=RpUR-\qHNJIHRHǖHu8.Xw9Σձ]ObhQB?N W_zPP WTDtA5r :vZDHK&r.ocu,VG*v<~))||,_:']$ jH^K*C6_cߔDvs !XlpC2+^2mU߇ Nn)!y}YLWcv fy ]-vRH 1R)aMC}8? , qզv .8 ":|xw%ba@LyvF$rRkJRZ`2c^͆f=2&d2&5'&1lM&c2/Ld6&l&MƱ86[&شlLIb؆//6Mb؄/Z _Eie$ų&)6I˖"lJU_!SW}<)8g&:6Mڊc/[}b ī8h ^VX =ī3) LAl Al 6@@P{PEc.R~R 'pr5w⭌Ya:7mн<*T.~ c2݇$~! 7o6_1O/Ηyqϗyug#3V "} G.MNypBYQ ދZ ڧmAhi!6=R0@L܃! m7c߻)%ւ4,z46/baMFn|uphbHEs&f6& ~Rі%0ץ1w-t UeHa#aQt.cwz0#KӤ mLk!42K\_>lP_#pH@J|h$nsלSԟxWK",BIC +C!/~d56<3yشcqlc%ŗ] 5I[nŤ* y%*S~Ҷ.{?>~( # S 5 IJ^ H8> Uij@հ-/c|VI tH)~ *@O1]&_P H7c+.CA爞^e= ::,AⲶBŏA:|1r;)AyUЅr .5x-(-@RnJ"_+_scCtB7<4$1jchC1MNL"CAD+Yj/bkQl|558U_[F zwmeQBJym U_c<5BM8$~\M~N]F@c?T,%c7ȈHkFtG@!,pVRCN mol N5x\[]PǕ{&pءDZ=!@]Dɴk2m2if̱yױm&2BW Qר.nY t*^,W+&܁>CprU:U0J nq;bK߈TR"oU,_v g1jTLJI@IQ TtY xSs;*$.4+~}$zӯd^5ɴk2ifcqlZul2MƱiؠ˩Ļ Pu >(P:g?-i| =ő0 HQpx>JۍRS(/9VR(4aZW]z] *~;!Q)ZZC6 yi[)Q&fn "̻ +,J iNg9b6?/sP.P2^l@=FH' .iHzFu=%[Gw' &rbūxIhdĨՕR +H'^"5y.L&&1f&vvl6SǞ/ _v"x&Iv~{Ż]w Nzv[۫/؄/^ _d*MU dl ZVL ī3)2@q@ 3 D:~I ^ЖVsR6x%žR&_7I"Mi+)$np,qxO U4`JS Y,כ2Bkn [%z0V_?bχjx(f>*X%ݍ?X _$5F%#T(: C}_~x;h(SSO)ALoe2w.AߎؿEy˿E@]}-V߮!E D' } hEE,2,׉,2,ZeaпNYp!4* 8Be!4*S }B" WdiS|lڽ]>q9b{Hh\v^^g-ᖫ/~e;le3la+a+qe56yy x"x#)ۧ>peo2/Z_ep_wcP$5?$k͇8s ]u ĥ0W6AL' #rICK*ؿ,ע]A*P(/>M⥬^z;kI?v1ǫ?H{Ts%!pCϣy(Fd%$kKDx]$LVmǨt (I@J!)D X.եr ۸Z9=ZxDTJ)·]dd&d6&1lLEɚƱylcı86fd>qIߕKC3Kuw`Cl^C]Cvd0dP}b|y &Nv3c-\![HD:zė :"qQ (?1Qñ!\AK[|p]DhR\m h.~ak^u HNهJ'ŴK҆11\*R,m$!.T'^z}4w{4Uʱ2S'OQjᗐ<*,& 59u&Pb kH!#kKT~!u9t"#6,P:`IUh_JtT6>]t@SzP~Ph찖#"KY> 65˒k!YƲ9 G^>N"d>.uA)于9^:LzZt*ՠaRNLL٘Ldd2&5ɴh2Y86Ocul86flcӢcul2'L"xȄ/2mbh1| _lO$6I$IIRl$&IbbȔ"4)EȔ"lK"dJ2RM)‹"&y|)J{{F,ݼԴUp kMwGr;Ê SmY{+8H_sPN ,ji{pLr8H-?uo"y!=$WTϴgmЧJ45d=Hh@sP]b ɠV)x"`6>P!5%-}CVX6r`Nxc_!O/dLUɘL&1f&Byձ86:6Ǧc/$`R%8JRjI8?#%9? L @7).XL%ބ 6@MW G3o Gp2;;PwyZ1h[gOTKFΗC+k]|s SW$J<\\{%"! &E7K"R=]ȄH^d ?+E}l&5~ -0(i9C*-Svď$I7Q. 8yW*t-Na_jUI*.I)r?13C.cat*\%2^}TRbWG-P׎w 0p+, \/$ 2$r,JZ4b L ))spc^!hsf l/!S:yI{b2oLduEgHRTzcA;Mѧ3,SH@|'!1K^Rhj᫿ hMb:x!.wj%t|,D6ښ5HYģ^;+h?MCCw:ԗ YBN +:I"1d4+ңR~h^oS8DZR;AK:ʔ">Dz~?|c[97t I0K$HPh8yDp_䚜?x.*W&m1WNY•Fl标Ӿg2odYͻ56]cA &""a.q7dYdX" " "]z ocȲȰxE@,Ch]B#oiINCh]B#myFǦ]>6oi͖=;e=e~gSe޽]?,bn#'yw2gƏ6p-}l))ۧ<u:r8yIos8g'3vidTIGCq@b[2T9c+vY1bjIRJ΍4ZQ=o'ܴPhǎjG{._zs}/Q]SiC]寷Q[q X 77S!E݇ X0zf=GV@IlݥQ9HʐsA 54r@<&hd\//{)T-aNЕ䙆>b'J_7.h/h09avv6NwVEQ!Oړ+Sidzd6&cӮcێMƱi؈(_mN^K,g^p'Y $EQ? A$9tYLP^64>3H ]2=8W -qJwtk /z]=TPjiHoiH1 g` @o+nAN8I^!ACH.=v}@!A?UX"ӡp\QrDSU.VHBY(m'q<7#h]jMů"~A~HIA*(WŹb?Ld^5ɼh2[ɘ̋&ӇƱ86:6Efd>;!"K΋II$L#+3l>P.HqP#%ұ}iPj/9:MU| C9FI=.^)>0x`&űx]H0NN| B1\<ʿVt$C)( +11LX@jAK*|oF=֤pl.D@[ ċ V v Ad ^IA &"Ad w]Y7L W̋AF9^-: x!8Vsm+O!^pZiVQA8c<^KJl:*IFDJ_=8S-Jz*]Dlvq oE3$ #'iANn`vI?SSO)gwv2}g]ElލvĞA_Eev^ h>ޮfckVcno3&.ě@[ ċ'}AE $Nea">E@ޤǐea", v IhdKhdChE'}HF$4%4!4"S?M|lccc"-{vʼ{)h<˼{<#'IĦ݈oGӼLy3B#}AhiE]}p՗|6ld8lad56y6R0 Dpo}l 2@-Aw>ڄ}d>Z}SSOy~IN~9?8 JQRQXEK Lظt&N*'W ]ʻTgu[:tEA^ǫ5 %׮t]*W7CN)b;&.=ѡ<^cG@OhAt`cgs`ezr:(՛Cبu&/ŖQwS̓8!uyN;w?*# F g܀S+gɘLɘLdLd2&5ɼh2l&Ʊ:6OcqlƱyѱñ!A Q uo{ڧf)5%> 'D 9^"|L 8=;f2薌UDųrF[FSQgK{ƒ$}^8S_Ň)1'0T*t?$ ;WҝV-!U@%ڪV(^|\[2!p/˙-*:zPb T=]TԒVgbY(9C B(k<[/l8\BuF%~Hɇ|r zK@A: hZh}H7q0 LBIG~Y:BBp{MIV_gw|P @ͻ- P$n1ɘ+Lq{-M7(޲>E{PsM U (~:M[+ mѷ. ( h(v#f/ɑƾ#IxNVRMn|]?Qah[ ck,}ٚ٘싌ɼh2[el&MƱ8glc*C"x؄/2+TŋmZƾfmV_U[LR#IRv/ެؖ"dJZ,EȖ"&O/ެM_6eǞoV_MY&chc: M hyZٴbu&5hZIh:Z7@mAD"ZB"e%kprFٰU"uw"8?[3xRe6ثԔ͛|e?h)7] 'h/}-g{8e&o8S͗is}˥ Moԝ oMoq8[ʷb}/JPKpɔ%kK͋aG*^r ]BcI!6<: 7?u8R$)@A:W :+I`t.Uz)-&Qzb¨o l'%Z I_J5/cuzgưU$[ +Rя!1$RQWN9ZBC$Ce+ ~ Uy9e07vMM&c2L96:6d$]DIqYꨨRcoQVK$ A~f|yJӐwA9( ͒tװc_@h̔$ y7!j4>'%T*WJ}I=:/nn4Oa~8" cUQ 9e"2PP.%qʥ+IW#N{8n'];&~ny mBQޠA#^34 2$jRλ^i,~06D*^v}hq7A>\+%;W*۱Qhl)S7P̍YzwE%!!:%r@pVO-^|Ip|h8/CCu6IƄ;o`CdSNw4" Io|X='k4@Q\I"_ɴk2m2ijıiױmf4uIo/6gkx7IIMY"[ۥRgx RS_m,/ҜjtijCC3ރulNd}@uEXTcs0RWL_Jм\P% A![YQ"o %ȯ3%@tIܦIp>|^Q@A-^JQt\]QF[^Eӕ0P~X._B:WM"idzI{{ c wCKJʘKc\L߁z#I5b'J]Yģ;t%%K>r*'4jK⃜kdLU٘̋&5ɼh2Y86ǦU&شlcӢculS@7]Ң+lG (OpR)Ju|eېk]r rK; `Ib RIɝ;PH0h q#Lz+KAIiy`9Y̒'Y©$O/A7,y!; rzH"G%%UmV'vrI5JeкFTOJ$iu X@T^gYIʢQk׋߉z D_ Ge>CRtY'-xѪI_[HRWuQz!4'~j2od8ȻF$4%4!4"Sd>ؼǦM>6Y>6>6-gLLoqʳ̻w߾3r2}YĦ݈oG#b2ez;/V_v5}V_fʻeڜ/Ⱅ>yd~Hd.Gp[ D@}A]6>p>piSľڑޥtmWX&1ĻT]Wh$HsdE\^ Oݹ!Н ]L&&1&Ovvl63)5bC t "(8zCI(ԕ~:& ǜǖhuF:!U7DKJFMH#߳~CL7k.Ӌ.NnrB[DZ+X<%,ĦArR>EWA=7vXG_?m7t}UGQTDяSZRnVpC){#M컖.R7|ԠY78=/Y` G,F>Ox(E`8խ*!DW[CIࠨgŠulSg15U2cD3;)V. Gz(t-G߰='<4$Z6Cm!0W !RT4im Jn?<T+9d 7H%B)Nև+TWM:꟏<-)B Ėg2oLdv`z/+ ! Z)AT1}0}u0i?jp1!_1?^yeԆ64u M%<Y+XQza`C`62ǹɼk2m2yf̱iױmf4sYo/2gkx7IIMY"[ۥRgȬ݂.8g&&ݶn+f_8v/ެȆ/6}/.ě@[ D86[ Ļ@mAl 2@-N+cZa h" hq&E_̤~xM -D"Au E+O_QMI"I2ԺD /:ΛO8On^i[X!6ǚ 9@#SiT`!<J|B^bD^S'G6oyM=;e=e~gSe޽]?,bn#'yw2gƏ@  Gpo}l>2p/}l))ۧ<u?Ny]'ATE wW"/; L/e!QX`%X)H\ԇo@Tb&YG BGS!objI QI"6CqG EZx@QEwi@``sTJf͐sxqQ%[oKETrna%K@n*ǯ+ij#GP a~z:P䱾B.Qe{ݝ^t굘E eT6^+UjufQ>Il^.0/ u$7#U`hc(dtUJ0x8ѧ*^^8J *ƿ_V0R\!lgB7Q.޵EfTr/@kY:)^E/nˈa`g5:N'pUg*j8E F:z)YZsDFJrE%ۂL&g2d4LMɛα96:69Mf7c/`v-jAOsw٤FGEP1?PTd\5*Z7}Y=)V@ߚњp€\Z)_Б纹͡x[m͐6}d6MBK!krhIKRU_aWRvME2W_شh+V/ _k o& ڝVAӊ?LA9@; + 3/n@BnƘBOX_O=0y6iʋS^V<wɴ+rc.{Eh-hH"4vb̻c8^T_1ܟ/m9leH7̗pAM }9wA]^ pBp} A>—~x,g 5I!6L<]=岐_pm ' ' j,!Zi'T?P^Ֆ8:7JD-0ྤN=AE^FC=շ%].$Hx H,mH/ 6RKK!S^)#uI͔BZDKwr )Yۮ/H+3­Rq*|/]˫TpWb }OQ@>ǐ4ˡLϏɶCe~d~j2}dr&cSǦO;69Ǧc;ٛ-fC&Z#jGP]SG$N/NEQ)S W,}Jcs4VmroCCK]T(娋p_IQտh\؞&(S8e<ь^^]pbhdiƀSUXNehcĖV̯w`j83G8w 2Q*h#CR5N) ]gA 8p(|xKڞ T<r:NK:,z"p8Ff/Hh"U^nrdv*__AԈßőEp"M=$ΦH͠3L6ɼ2yԱӎMαy؋EO}:| _ _$O:IKR$R"R\)(E~^p:O`38 ^}4"$eiuWțɽ56mLG)$eawY]~0R ͸̧w;mMrMmLcG!Jl}̳ Ѳj FN7s8>c>7JB|.8C/E<&īOA#ͼP'U~< h+S>#7w$4g X-WHJ a8<tU؎dv&ӮL&3W&:69Ǧ]&Ա96/{|^F%ZU\%I,뒒ɒ([^5W>M3-,s@-:mNj%|r՗9Atܫ8:ᜊ8et\9ˑ/őG JQLA`zU j\N xy造í"̢P/WbIȅ/^4I/i)B.E~yO Nt˫/~Vۊ_^}E.|n"W_869 vqlr@u@VxwZAzCED3)v@u@ ^Ab~a1PtʸH3ܰU Q)HCFJ#SRAVYR&[p.M-C:w"/)cXoo+r2%4Zw$U>ي&ϊ2?W2;_~zS&wʼ`ܮ5>DpxdovYX"`"Nec.?=fIHNvFo5#4.S?qMM|lr|lӧ.ӧ6{и{Ih鼼mW_ϗޭpV_7_&ӧMޟ/oA A}>څ}}ӧ>~Os8oT!LKhtF<9)W8A|2,ILTAŭPvBSgnѴF R(.cJ #sYkTPW$L~`3CX3OP:a|-WrltS 70 2T%Qc:Vu,umd+@g~C6X).%BDŢWmJUqnJEڌo舖Fɼ0MLfg2{əL&7c±96ycslrMޱ96o:6yǶ.#fOAE7zTn?\q @4UU2 Vc1"whV/Uq"d*U &2eL~4ǥ>-QߐEYw 7~I@N{QhL(Fx =jhvDs%RR1s9a8\G+MYV>@55zLuj#F"p^ʀv}tx$3CO=C~.O\U Kud-*>eJ d=f I2^Wk@5jl'GN!-g̑B'uаSR7(ZvR(RHD F<>ͬhފ XGVk^Fif768ٙd^dr&7ɼi2yWy;69fشplvα;69MǦ7׈u"ȇ/Z/v]bȅ/ _5b%)II]"')rI7%)WТ!W/ExQ+Eȕ"Kvm"V~TbZZ, GIe2+Ǥ@9BSe [Ak*aku%l>6<{–wW*s43&WEۚS&/q">&L]M)F L-5{[\J[G#BIh EtڸHTIAFi6MB|\!r)D.p1A\!bSHƵuDӂmpE#)r~JYpG%4bHo3C4e ̣o5mMfg2mdvαyױ96m:6y&ؼ{uotϏpi( Q-re_{MۆmvxJqފȱ^0 0HN(5Rl;B4vJg3*@IDzJ}"ɨnB!xPJB@YjrʶEDِx5d x|7E{L,ϸ#ˤf&7Y@+ʻsM1dyn7GM+Äƨj#Gj$Q v(pl?*>uT}D>.yUܾ}xfY3MLfg2yə̛&7yyα96{cslvޱ96m:6y^Flȅ/]"ȇ/r7.IKR|b诫|)®UKvűse򟯾hױiVW_f ] ı<Dӊ7~sZ ޝIy 7gRbxA'L&} =L%e :.VƏ&.kQQ֋U ߁{ZH rB|R% zY@̧1!t1 prJ"^^~h?'CG"3܌ZSSȹ pS&wOɝ2S&wʴyv ]Pwy꒿2oewy"]{yhhW?"1/,e[pҢ^!"XApz 68,OMo N,7B&7cVĉ]qb b~-?]*-NyE[|l%'.{H"4~b.yyEh vpVc??_a[9leH7̗W.Qxԥ)@?.t  pH$yRF M2N3:59׻]$ߞ<5 ě$T*Mߥ O%!bPgHG-*.o*`Z&v o"-/:xD~!p fEVJi f9fVz// Z')T I6\,BtYkŴT 5 \#/n\W:׋7$\fm-\wY0! ww،Չ?VX \xaPoBYZL&ӧM&g2/M^86=ulcslZ9ǣ:lCdkDKP#-P.Tq"dKh'U n0m0px]9e~"):"Q/1 Boг6r$rGp­EQwKpt4ZYg10m!4BA y(DڅOLG3Yu!*Q٧,=zՊ@ f%}dzj2dv&cSǦO;69c= _E.|*|?MR$.I2I-J~ZKrJslW9z?(Ld GxSxvWL O֙Jt"x~=1\&.qm8xr(UǸ,Nl?dRri9m%a!꼥8s:#i^]t~,×̭%y-BS-L&ӧM&g2-M^86=ulcslZ9*|E_*I$ENR}=-8/i[An+~yE]^} űAA~Zi; : ϤA;b_AA @f+-?ʿhT-|U\MX{,|{#ۢtJa^[sq5f1,J'. !58#ܛ)G 0EqS#iDZr'hɛŸ"(qSR+E]uPo_nv|`AvN'?S槧̟>evLSu2.˼u7͟ؿEO2:/r=6`ܮ56DpxdovYX"`"Odc.~?=fIȻNvFˎHL]rF]>69>6cSO/cӻLEh܎鈽%4net^gmᶫ/t~JnʻVvVdM D@; zǻp9:2}9GO9i6'uK0W]@Y1]]qlDH)Xi9T3 g4٭Ƿmo|bjGS= IP V_'!g_> hӤ6!Ojx%3|G/*c\?xHh::R> |?q5@R-Z7 wdܳx_@8_!bAS)IvTT5:8=zlʪjҵ48Cs(k{+o3!-טU,Z뼊!\qYC\&5kq[9-O5PRb/erpRչ#fo/nQΎU@lKu۔s~}3Ф},z2`NCYLOMOLdZrl~ifؼtE?ȅ/ZUI?%)Z%U)OKt)BU)rz  DJPbu#nw7P^jFжM]&"aט8v't W"z7M( 8X^SuKW+)d ޱyFc?22-*( /68AxTBCTcҿv*Hz&o_T>+H{~=c ^{W3rI>e_+pCdHmUS[UTD3wMJ24$~2`ArJ{MC/&# -S1Y9K&3vM&g2?5ɼ2yױ96:6;ǦMαy؂)-EZNzCfiHތZ#m4=y(EC鯧mB]P^KʤV k)DdJHJ| *vqYU 9BqB Qd5 fKC+مXVmzy72()M,duC.Nk@&2EL9E(BѽfSH%`e\F,FMɛ wVdܻM'}Y@@A7hPq7g&S&3&/:6ڱ96/{iO/v዗kiO'_^}R?]ꋟW_O\.|ﯾ6qlv@ ? DgR ڝIA ^A v@v [;L6^|2q3 HB8L´(qqRP0#~k3VuK&M`FFY~W)ye'+~[W,$iiGpw1CQ8rԭ<6rė)VWpiQ()Kb"Z;DL]!TJT2f)=#)S槧L>erLSu2.˼˛vOG_"y?9V_kEpn{"D8ApA,r,eco'NȱhE@E@$Gh]'9B#uF%Gh].;B#~B&v)ӧO]O}>&q;bӧ#>kиyyݷ;ۮ//a+a+[ [/S&oϗw r@A >rp}>>zzSp?pҧ9p߲B2;E6DoE%9SC W2pI*9SÉ I!,k<چ //d@E#WPfY/:4U8Cķ* [X.Yܠ'ܔ I:C<ԏBR̘Eu&Wg\mN7#%DYXXRUx ^eb7nCshh՚xH<:Ҫo`5jқzdZLd&dr&3LMɛLαyc±96;&7[*RkkH3j}ﮝUF@A{B;Wd6`1]!U@ђZn"(p2dK~( UDN& V~ l0QGM z|I^wUV(J6 s IB&miGkMITPxUuʋ F];gZ! r=1(=9PPãEO`v˭YΘ[-99U/!XΩJH3(G.Q)ԛNTOl<,C1vs*^g3'1].j0 \!+yjmSൣGЯwz4ݽ:e5e|7?lD6m\ 7ӉoKvf9\l, 3D#(E zG]$<7ӐL~خSU44AYj1|\6L əd^Ldr&7ɼi2Mα;6/cslαyӱ;6E.|__E>| _؇/rII]"h%)vI}"h3I[r/JvRR\)BaWf)_"8YjQgNՠzTx[Raj:˟DkGA-ϕ@}rF^e8uyLՐlQס4x //8ĥ7KRn4זT,!(:3ܝs#٤ćJ+JFSSrQ|4I 4p+c'enʓU}O>]a@ 5.l~2;glHި}gpz$|/%)^U_>IKRU_!WЪRwME2W_ؼh+V/ _D8x@N+<Dӊ?LA9@; + !{r;AOS$MEB%`~t/z1o#$p괛`5YmQmj#˽I9ْWdKQ55I %w+2L$-m V+Z |ʞYOLٟ2-N);eLy]]^+P]&wy.+B+ϳxw@ËyhQ}pEhEB8Dx@m")qvY8A,'Vexz m~=fAh]'4&y oT?]*-NyE[|l%'.ɟcx_KhE^k]B#/}2xQ}p~LV?_a럟/H&FaxpmAp} WhsoUVD_~8%q[xo7Unꄚ<,"SUl8COke9{V:B*8skmk79mEWjf6"{ad8M`6bX2Nj n뛭0R\7r̕+ܨtY;bŚǁ$tQ9j*~]k`n!~cә|07i-/׮HH1T~AqvVLΈ&M Pqyʆ'CEɼ0ML&g2y̛ٙ&αyc±969f7c["TrCZdMJQ`D|8S:bTnB{=EtPc_ b^)<0ZFu!VhKQjG*QkiQvx"V*`88(^AX5-?Q@mܤD( pl d!# rL˹2bөZyVAՒM1‚j"A;Nc#GTkj#Q/H1\2!K "^SƗׂfұC5]VfտAq,|Kw줦HYi՚ڑGzS F*y'*׋Q6᪋x2-D= "F9l9%`Wp^EMFǸӳUqor*%ZUoDQeI"IKR$.If"ȕ"(Eȕ"K^"JvR])BR.dꋂp B(R+s^5ym'A 1up"Z_V&dŋJ/ Kc({E\n*p)hBit Bx*T<.79/i*fSKLǦI-0C Wu8ؔU&0Yd]Hwo_0YQԩ ^ e%J׺S 6m^& tE g%x 9l$ԻtA䠐4BwQO nC &!e2{ə̛&ӛα96:69Mf7c >g#1hi[,"*!1@ty)8B:[p v.M`68<1x P욀7HWLϋ Qŏuȣ]6%o$y>v4nj?L ədZLdv&7ɴi2α;6-cslMαyӱͱ]Eb؇/^/r]"ȅ/ _՗OR/%)/_+ExU}R])]E&Ӣ\/ulZ+/_}f ]Acy wişhw& ڜIy DD"d/굓qV_+6((-ًgrTs3^D h(du|lB ?WUc{V0/EڵOQ&_|!Z`Rw$!"2pef|)"/:/|lwʴ8eriqN)?evLe^%Kuerw72b.tOOXcxE1"-i FezB#m2u?Oh\O?Ǧ]*/NyE[|l%'.ɟcx_KhE^k]B#/}2xQ}p~̻V?_a럟/H&F꟟/><Ǜ@П)sp8>څi\A5L}I{rw QfD$@r<6@LQe!j3ځ ݖ]60]ȒI]H3 !o^b8T(a3DYAf5M]Q/]fZY*b 5|0&17Up.R s=ߣ zcn6X) 3OZnZ~Q*"8aDU)ΎzRi}ms!HԒw\rJYvYUPLEbOMOd^pl~ifشtl$_ˈD)hZ!girx8\hRpb}HM%-ӠVvk/^Hпdʚw3xZD̻ԣk-BR&]F  )b>E+ˡCʺ*]v`QktIGllAHfMyꫲp j =T ię!LMj:K:9[h{{*ܢ֢8  UeP_ BزE oU{7/86b󖦚h6-v$HV"Ԃs1mEKMfPDIuT=&*υkpЦLqLH䩮u.-fmE!SHMC7=^ڤ _kr.(߫]MraM \W[}N!P4Kz&S&3&/:6}ڱ96/{iO/vዿ~iO')rIIjQR>]+EhUlX?WQq 9[DA-k;Lzg,gPB֖]) ]%2¡L">,V}.V$(uK])Q?rNp1⏱]2S?Bh=Q6U&hASgX)(i9 ?0M0,əuUy)4JI]6͕;?Dl7 4q Y_ !w-^D@_58f YE֐෶' Zoo،G5>8V L8z-b,?GDgR*;,"lL&g2dzj2;iicslulvMOc7{(yjL*:5BChVz( ɪ:9P`R)z'%LnYPn# .=34)hR*Ѷob 5Iig?(& I9!Em6 ({YCMÕdbQ9̩JbjZpf*e<2ѰL6ci:la,քrMV,2  ́6ˊ(pO7OQt*B9eX5vEMߦ"L Ne\<%~%\J-a. 5t2U ?5̟6ɴ4yԱӎMαy؋EO:| _ _$O}:Iꋟ"RW_Om}՗_/r{cx&_i9 v ?bLD" "AS6g.r:5TVy H:>c.J/+8R՜!rL+~a9e629MɿvN0Jʬ2|`j7D>iᆬQ˹7rCqF`perw lCQ0 u'%dq B#",=u-N2}ٝ2/Oyݾ..B>9et^,zZ}ѧm.¹]cӧk}`d.ȱxEE8"`"]9~z&w9=Sw |lr|lcc_槧̟>_w>}{и{Ih鼼mW_ϗݰw䆭͗i˛@9 w v@p;v>vpup==e)rr8}olIg LHE6z7\ *d+K>,£-E8zx">)RD2CW~*Y)jr^0ptm7e[e 0锉Χ{P8):wI"ڻAfZHbZOUϋl'֯*J)iܤyIA9qSI25j7꣥e]p8hsy}1qJ^%DHƼqtru_ LI.9FRGfZ-P|MHԳc DbȏC"곩W ǧ׀&;l{Įps@Jez<58rv SڤsEbj5=݁S%N{)*z6~7x◕xY ƫ}"5ߵ,B_=k #ҳ+rvȸXUQ*TܥK[U.,H ^5uxwdz>>#ڳi 馰?g9AvSrd^d&dv&3LMdؼplvޱicwlr͛ޱم/^/v}Eb؅/\Eo%)^$)vI|Eb%)I]$>I+EhQ+Eؗ"(Eȕ"JR6K6"{*VQK:G?7Un8o9U!0Ne^EQˈ ]Uݹ DˬWQ hgmLq1on2oZTdphL5H?0=L0qkOEɂ͙QP,<'3-˸'fo]@ ܶB9~Mo x3pFSA V*#Ҍ|R0sZ=q| _C?')rI7$Ů?ȗ"J,E4yY}kUfc//~X}m;xw𵬾a؅/^M{ C hf ޝV, zmO+AVlΤ@?gR L A"A r@y 與+6>U6Aq$rbޣd}2J&/V oKQ֗d-O [kڄ*m+Xcl˼pb$IHw!BCN(WM퐢\ \1&y3<\v̋SfwOLٝ2Sfwʴyvʛ.̻.LOA]~u7%U ,YE=Yn",1ܪr p.!~l#1¹!p`Iĉm;jC1,r,Zv9KB#?$4ns8ie. и%Gh%SMM+>.muǦ|mh%ɫFN%4.y_Mh\EDŽ% _1rLcU6.p=l%7lus/H}eH}Z}A>rp]Pw Co] />zmC+'}I\!Ry-%Hmh0gvmp-2|]?'omhĞ\Г q7X͗y5Sqa)`$qq*EfѡyIJM68&/?خoZ 3JbtˡېX,ESP1F}WU#+U&(D-u%Vm]EG{{9ƠXdLbQdzj2dv&cSǦO;6;ǦcK|CQ5ŇtΏm?=Tn{e}"Pd ^D"N32a$ӇE/if④RH:`&*S("fSeOD{m>1B<ty| Ot?4ESx)VmgAU׍Z/aBy m+۸nWK0*a_ ]+EhŰ#)B#>CV 1JVr5^xlN:y`&mP,(*\]iB02SNHB;`jTw*@Mt J}1]*IEz<a˘n>zTaK L4*BYsI<n &l\'iBIDeL fP :aؘ ']itLosUeE*]=0ɼk2;yd&36M&o2;&vccwlr͛ޱIMR uaGqo$u  IiFȪbacO ylɩb]QD$6 L]$9Bj֛.LK?Lå8D7&6BmKLPdhnQc2PSYmrWA:9h^@qt+g<.51, m( VAiZu1}ҫ2Oj4eÖܛ(1_RCRX2-W_E@9 7 @9}#hcN2W)/8ɟpw-d7w*/>P"uI"EGM.K\14pBе=΂H`oy'|%MM6bDG_mM"\P[[PM*E^>EWggŞm8TLϽY^[xm?u#0Ytm5Y=/hvMrgTLѶ *d6_vL[ݴ'ЧC:DMDE0h&dr&7&3M&g2mLo&;Ǧcsl fcsltlzsri^yY2JOtڌ~Tkw,855@8v,)b|u1iۑZq,s뙡\97CYuĐLZ~&@!qͤ :xp  (^/:B:_Fj0"dfnnuZpz))Wh Ѳ}X埽NkTQw\8 /kX9TW/w֏-EE3~@'O &"?D8CCR ~wj71@GlY/GK1n' r"K5AIM]es(_.~,+ FpjUmLd5dv&]fؼ:6;Ǧc ?Ҍ(%%4G0JU-B*Ա+ qm/~(ğx)몌brMPzʹxmhǫnԒG閤 L 6lBu3TXSC0(D2,J,É.U}-4QWRi1PthFFRp‚bo!` ?^fr5ςhKi2 z~RNV.jJ}z0K7M4IڨMvP]B@XkԩC]:kvz&vu 7q/ʯi\g=F 2%_wya2;ɛL əd&37Mfo29csl fcsltl.|"| _-E.|_m/\?')vI6$Ů?ȗ"J,E4yY}kUfc//~X}m;xw𵬾aȅ/^M{ C hfޜV, zmO+AVΤ@=gR ^ͤA@y b \[XUS`lgYaIib^KdlL-sSPMSN[-dmYk$ (#R>q̬~Yueso\c'<7i|+r$z #(DiqN)ٝ2S&N7O)22?uWw ݅,~"؆W ,YE=Yn",1ܪzm"KB~p. zm# Z!,%q'YXYKz ?lȱh"p. и$Ghs$4CB6SWL}>69>6ػ%iS~|l~&'9yи}C6q>~&42p2?/oVnsغ/ݰ1l/p=R_6Rp? v@}G+o]}uWnBK}/ *v*.CEY`S ]Ț6e{<\Ŷ61LWdN:O3-`(Lt|\$r_w1^+[H5tn2b.9uQew)j-E'T:*+!{}GٍHE.fLכSʷZ-A+ ȇío-MSJFPCӶ/ ٙLdZdr&7ɼi2y96/cwlZ86;&cӦcwl$A\ }q(n 4@Rފ. ;=xfxdFΪrTdzY7W4gziC$'lZ, V㒬g4 wEճH| _-|$ŋ$.IORHR$E>IKR')v/JrRR])B!Wf)B_"QÚu*'ME\Y!xo[0m!) - AϴloO?YmlQB6?n_x=n:6@ԛH[RJhJf|]%}4}M(#6xZch30+i<a>|(߯ "ŗS̶WjrN(B2i)8ͤD;#|P؋s CgJp5  "2kS0$`3AxGna,G̻ٙ&3d^vcSfؼtl4;x23^CB:]9Z;G,>E?_O8q|%zA=t%굽jfܔ ^lۚ @pd^d&dv&3LMdؼplvޱicwlv͛ޱɅ/Z/r|E"؅/]_=a>IKR')r?až!Wf)oȦV_& 7w{Y}k۱WmŻcoeE.|*|K A86; W8b C h{ZoL+fRK A3)v@fR z C =DbA Ջz2ލixe*ŧ6-l,FaD٢qkvtT!])~JA.K`\"n[!uUE1B+WDF݅!>(.;ͭkw8eZ2S&ʼ8erɟ2SSfʻ.̻.LOA]~uw%UĦ/"րf",*/5-YE=[U_oc]s C`\؏%mD+sE$NC65`Im;-Y%9pn2uF~Hhf#4ҊfǦ{cC>6muuMrM]~#'/z&4"cBG}ۄU^~'4nez8_í1u9_a+a+#|ΗG+G@p6h킺K}۠AM~ Co_q8ߡZEJka9_Qp>T KcN bi6dlP *Tev[;ơZe&Ij>5vldN;5\ S6fmFMbMFY>Mj{۸0YYQGk.g=`h#p m(nzQJr|u%tnSsҍ2c[@iTPrJ feYڋqWlTHFs6%ZU|loEk3L6ɼ4yԱӎMαi؂xbG-b. RbnžQ Eg~KYqh/2o@kXǕpHAН R/ۗFIX!d1($> /--#SeqP.]* ޴~ tRUd4D4CeKzɤaS t 1mdȢ%7s^KUu,T<3u$G4si,GLL8K".!Gi{S l]HN /Evh,EBD,zuR֪/PKM[ӺQSq&;uTB-{z(MVZz Wkd3QlC3[P5=X0)(FdL+槎MvlrK^/z]eZ$)~I]UZ"O"J^"ǡχj^75+S`7(x(3$J7vQ%RplwQ\iE[j8őM-׿X-V$wRR 'XMp;"лD0 28Nu/li& m98a=-XI1N-i]A^B\khJTK:~'Zr2הqJQz 4" ka#ܓ1^Kp hJMMhH.r#mc_W!)Bo&3vM&g2mdv&Ӧ?86;]&شcӦcW}OR|%8?OpwQ9t jwNӉʭQdpXRTϻ9u/kjw4 ؊ (D;^I35X^ GcQkS:M{QR V۔#F uhD!Ⱥ•uEtS;zQC V U|Etާ펛(nҩ(|9X O5\rywCE)EU_c(ɹArinC9yGwP|~lAkj+# \rq9ڬ3}d~j2dv&cSǦO;6;c/= _.|2|-=MR$E.I*IJ~ZKvJUIO Nt20m?m+mʱ+"=ȇ/r7{.|G A v@o쁠MR@{ D zV8 Abhs&E"S A v@9 D"8ud[pʨxF5NXTa{X]nhp+Do[.>Vq3K"޳*7-N-eI]FuKE_(Ya,yI=smD=5D)r$v#| _sEVJwOe1툇c)#jd˘[u~)O)Wwe]^owyiOGtyet^^ h}Zc C`^!o569 Abx$cS?$Ngc&߈EO1ÞE@E,,vF~JhFFvFp'4#4SB#=$4'4#4&SޘO͞M͛|l|)SOJ_Vz]O9."6?鈽"4GE^y?WişVc [|Η[ [isJoօdɫ z C<M ހ S}>rpm})SO };r8t\UguS_h ɍ!><)\mw ;^X)roSDNɴ0MLfg2{ٙL&7c±96yǦcslvޱ96m:6{>=řTU{FeVlĹqL,=7jd<6tDu'B 6чsle^*x3h0a]Q/Z~Bl*G#"GNR6А/Wx( @!o+bve-]`tGQ?)o vS>JÔaAC5oH$3cwQ448X@KDG4M&7y\7QA#5ҐvI L|Dͬ/݄EވիujG?c-u)t#4 PEJQIpb*/kSyn_⨂ItyMz(E^7Ep|_I<#]듏n8P> (q&V0TA#g:2qjwUtF)W("r{] S?}\8Yp-=UK&z)8CTɢFA0,ܪv{cؠsXJմdZd&dv&3LMɛαyc±96;&6c __EE.| _Eዿ _$E$.IORHR$>IKR$C)‹R\)¾E)®aW/Eؕ"Y/EXRd*4P?<~4cxQKj O{ _(wAip^44b-#Vb$+j(2^#!x"G$ѣ&Ni Mr<9,|B3.kxݻȇ-VFc$KtZWx)8.VN.Q ٍ*^D":LSj"Ԁ E+v{n\ B##Pzf.\ݨu!f-E.3ɼk2;yd&37M/L96:6;Mf7cK4A%N|단ZԎ9FT}$ܣݬ_ ݋W—vBR.6fՈ.n5yc5%{=dxmuJ4&MFSCyM ՇAu}%!5 . Y;^i;]8ۉ T#[MfI&2ZtFD3Xp !Hh^~-qp&dv&7&3M&g2oLo&;Ǧcsl fcsltl~slx؅/]"ȇ/v7}~Z}$E.II\⿮RW՗/Eȕ"U_k2/ Ε]E[r?_}nmW_+ vql& ڝVx 6ݙxs& v@; W@9 ĿCC>|_RJ~hӕ`lx2akBMиگ<_S*WydmdHץB葵cN\2L˛Y+tk&33W]@3\c7pD{Hfky(S);e̋SfwN);e6yqWW/%4"b`.yyEh-쾟Ηiw Gk5e2m[|wG0y5R|y.>h)@?.tO  p&Ǧ dȑmXX$t-UD?k&u_E_^nTw\rMRi;[c[/ h=VmOL:wFQSO| * «woN94ԘI7[wիX6 >SǽI@Q.n{§h(1!3ܿg2?5>m2;ieʱccʱ+ E-8S6DQɰ2Z2E 4ˢ3N9O9J o"*zTGJ4|*뽠*AO *† m5 f+mJb䌐K$^f%h"HPFVX/gsz9ڌ$U~һ,r]7k o]nR:Qˉ|CQߎIԃbS4TdԢ 7 C淝 dt8{JXb:@(ә4tAM+rV~#f9T.2HI!Ro0Ds1֡DXEd7r2B^UKa%T'^͖ST4GitQaTsK4!dL+ǦMvlrK^/z]eZ$)~I\eZ"O"JF)[p\RUp4^^Xc)л"Y8B<c֑;BZd7 @MPp&r/X hjHe2Lvuj "y+mu3Jq^nU@YCgX.>%9'AÓ j C?% E!w`PV^5JFSP/x2&aL\(0UIy [5B *R^Qt}H)FDfL]əOM&g2/MtlvͻαcslZ9!'KFi,;$B&q\o{|$/͸*By%)P޸Րrj%6E}vV5.Y#Ium@DP1:.zW^~d:+Ga̱ᵽ+wN|d<)UD.~k̲`kgJyݤ9E\r*8e{ۂTe*RR_AM*Rk*6a/(\ڰR^)ҥ=HJ(r7ꆬpFzBAڸڳi&S&3&AgMvlr+^/z\eZ$)~IW_O"'?m+m/|"h7| _MD86; : O+A;`_; vgR r@; V@; ĿZبpe0/K}븂ǐm386 Lq˸5\#qoy-B qdBT%\=4CX̋^r-BilԂG>k-_31!RJnI[)1\IyF1нԿ_w;Tλ\ůYp lC vǐN2ٝ2NyݾL.7@-~;b#/gӼ̟˿E@O/t"D8kltl" E8Aہ];ر'vYX" "Np#4.:Bg#4.S~;q͎ͻ|lr|lӧ.ӧ>{и{Ih鼼mW_ϗݰv솭͗i˻@; v r@p9w>vpup==e)rr8mn KDPL *I|RW?KOC@sf.I#<`*n0Q)ȾҬdTmo#!f Ț&X 0eqSA:]v-%d7 5U:ST[Z*twT*\ ܼ[|(2\~ާjCW^U9P41P.U&IA )F*&g(doyh*҉,(闄ŔhT}OŲñƩHj*YTeVrb,{r5.yϔ뷶&S&3V&:6ڱ96}ñs<$48o*q+qez  @JVX"=K *ZNUyCքr$Ȼ^D4|Mdv"i9EcgXx_uSЖ Uect[)D LI>/LIi1N]1Їv$W=>!h1R{g6%i0DZ#09KSƈL:%w3B#gj"I9.FmRIUdO@r"ݪՃI'{fRz~k *~AWNpm# #RSUl{Q'EPDY~h%Df&-yq@1:үޔ[Չ&FP]{:k:A)*tCwD7 B-&/!(.#*FehrQ}oS5e(`LOMOLd^rlzi&ؼtE?؅/FiI>%)^&E)BOKt)BU)Jp:.r}OG1T΄nǠhi6eVsjl~#J&|2׻v UM?J)~`LWM^P%.)j3(KmUPd<2Mx}6B;m`p ݸ ǩaY&d}CI9oB4)^(ֆed9{zҗ D뢏5?9d9|~WNN}Lr61D/L#av)L]əLOM&g2LulrͻMαcslc[5BB S#<̱E𻨫dBbN9ctwlz몮:'xDV6(waU&3ܸtHk؇]Kt8KϨJ/v$"nC4wv.N5ͩfa(ՙUu`&@wS~LOu\t?^'s,*<>  *$de։ٖC2R㰽f"@VG3uգEk92?AeTu(EmkOWdLT\a!Dv(1}yf2dv&%Աӎαy؋EO}:| _ _$EO:Iꋞ"RW_Om՗_/r{cx&_i; v ?bLDb "OA? B#SN'MRB+-Mɬ-!m唌'c-WCKdԈ)^fKpseXqS]^ɹWDE3HTyܖb#z8Ehd+% >DW[ST*nPc'g< ӊ̟>erL8-Pw.2̫ oGlt,~yişYv͟!MĻ'; " "]9v.vYX1NrFp#4_GhL]vFe#4'4ny͎29e]c#6:b6 y?}c?]}ܰ2?5>m|yb.c.㧧L>_S'}ù7~Tk5)qeE6RRO|Yc˶lOFI;$2a˶,UG-#ǠXwܓ !K̐ ϗxKg{0`\T*[dx<*yBtgmH"|\2rҗ4d rִ8P(#.WG/۞זuhLZ39Ů"\ UY_M ;LLfo2-L&g2;ɛLd4Mα;6/cslαiӱͱF{&b|/Zm9 Tg)ۂ*4CnDgPLM.D+<͕#k=rh xM̈́2Tϸ[%ٌ/dQ[HA5bqh$(V1'[蜎TPSA 0GO"#.# hH*YrVٰ3?p0~D "H+1m{ݥ4Mp%P-!kM|yA$5i"@d&ei ?ȺsjɢU_ӶF>C\%$2'$j CDzsV䨎RFŔ{e9M."25qopшd B3/j;(VW"84tQ'T&V]"}b{٧bYNߵ*nL2ZvuEїsjvSz7LPgOЈ-Ou5md9V3&3ɴ0L&o2;id~396/cwlZ869&cccEE.|__>| _-|$E$.IORHR$E>IKR-IRR})‹R\)®a_+EhR嚨}ŐT響T4ZYOz{4 -F>1s3z=;gd@vhced&TJmgݓkw+Ѭ#>|Y|d6˙kWMjȣ eQGl68CաTaǙU2o6J0s A'v|äbU+7[@^5T=(Yu$I`XjvmR%v͢O%Դzrc7hVfD1gl$~:@E=V@E8)5vM&g2d4LMٛα96:69ǦMf7Y v*Ioc֪M)\6Bj؋WEl*$tJ1B\c8Ͻ P1(zHu[H\^lҤc#֡CR.dALI)UM{!SB5Ǹx̳_I >JfQ 3KCA=ZޭpT"mq~ι&S1r%{m: a3!c\KD5]^ Ը-|.s\8) gQ'`{^ƏRL9y:\f=hSkՉm WrUO±s?]z}wia2;ɛ ٙd&36Mfo2;cslM &csltlM.|"| _-.|_o/~ _')vIV՗ORu՗/Eؕ"|)B]yQpL:6-ڊcv×x3|k. ı<D A;@mΤ<D" "A硤>)sђ9Z9]VH&ǤR^)Oˀ٫aZvmOFQMc &Ч ՊR;x*~9WDHoBiA*'_抐;eZ2Sfʼ8evٟ2SSSvwwy .@]w]ͻoE@=-" ,"/4Ec8^T_1o`, E8iQcC+ wN&qvY8,'Vexz o>OYi FezB#o2uqU>cwi8mi̋"'>EFZDv +B}2xQ}p~̻V?_a럟/H&FahpmAp} Wxsog|:_JQ~=%KMW;K Һ`| nEGV6@xE= yqȆ!@Ñk#:KEAE~ kܓ|*o"](rP JJ!R)Y?Vs|攁zk=2知KJJFײM)͉b86 3SCLۆ.rEߵ=)v(@MyӠ$n\veG_RHD,`g2-L&g2{ya29ədr&ӦfslZ86;fؼplvMα;6;ǦMǦ/[FhrFEt~7 `"CL.YbIKF(GiW9п6ԑ+:-4Jkz;eͼE~G΢oYO,7 4D]f!GiI $V hvRx=vKhC% (cbEEJ­K˨rT h~Ķ׉az3ЩIgiHekL$~ќęanbQWPC&Dw(dБ&[Sq,% [ȇ]_:2|ȢLI=nJODMRI=ϗ*ҌsF^SUi#k!<(dk">uŘU 5lE3_<D*| "L._?Jtv*fG-7rݡH&փaIXU5%VyDEºYm^E WiN3~"YaZxv[=E{3&3ɼ0L&o29yd~396-cwl^86;fcӦccŋ.|__>| _-|$E$.IORHR$>IKR-IRR|)‹R\)®a_+Eh/J]hVf#4H2\~dI"aM+O]5]6yŷĨ~őE+R;vcCF[(duR"CMﺚXűab(~:Q Bh|Ex^2ʺς9jJx2ϩ6\Z|"| _*.|f?a}$EI|"WV_Kvm"K]?M^&o:׶cڊw _V_\e5yC hf ޝV, zmO+AVΤ@=gR ^ͤ?!f2; "lZ5l=B,+;3lSxPƗ [+Ѥke:K8Z1feKM/=rE_9&:QSAA"sW|+ٟ+N)i7A]vwwA]rw",m~鋈5Y!`{@o]o",1ܪz횼!Dpj@6I¹"X'!qbE@EECz6,MH NrF^q8wKB#=$4n3uycc󊏽K[]!{:7.9y|mr.w4K=}mW1qmB*/)|LcU>.p=l%7lus/H}eH}Z}A>rp]Pw Co]ޠ9Gm~|ET _y2כ4Oථ0K&Իe'2Zo ^osսNqy-ux٢uӰ鷁H sβQ& Ydw C NY[F~ ^l%PnR*?5̟6ɼ2yԱӎαyU8Lo]5Nw[I͖$F*T-dڥ[NUTIvק+.i:|zN*2Tԃ&"56q?"P!쎺Yvj5Ez6ɹ4tFz բiF/ (XuhAP BAt?CK?j^PL3gjT:UK7UoiU}_6g| ލUڵɹmؔ˪,Xi.*FtZ>ֹ]X}WABuRL1`LڥR$+&QE7 a7VNMHQodmP+b)>'2Ҫ?/܅K#՗?ߢgaO07|)59dT}mG3QҺu(O pPU]O?"bqkd$EA聒.d~j2}dv&cSǦO;69Ǧc= _E.|2|-=MR$E.I*IJzZKvJSj~,|(:/Z!rI$&c,11$e SU56k.l_P{,d#̥x ~a$qJkGUSBPpQԀ%~coo 6hǽMa,C/ZIn9] - ÍY‹$nM mɅh"4yP g8kZ!n6J1@5T`BTg3=\@*rKcWQ) c7u@JF& O/D/UL4)ca/DTXW ^uH Sf-4 pP`':`?4;M%)Z%U)OKt)®U)*8iɟ.8W&bomEO/~X}_o/~ _@?A ıA ~ C <iM+O zA9) @9 "$ k{Y>yRrb'& {C7hd9=Y]*@5vYRNa @Uw%Yh3a-u[Q=D7IEb*n}ta (W MQ =лPpMrJIB)U,dP5qfOI^6ss;e~zS&wʼ:]w?}W]^Dl~{ݿEU^y>WişVckUc?]cA@{ ě'AE@O8E@E@,,v,zJ,v,d)yIoNGhF~Hh$OhdGhM.!=7ثS̟>mWwe]^*bӈM+B#}i^y>WƷiEVc8b ðΗ|ݰ66l]OMOLp?A  rp=!c&[2?=e)@ݷS^q8)?\AoChȻIU@~(gk׋h5aW7_W#j.<2] Ag v0JsH52g>ǰRI5nRlyJOGګdZp~LHI4$z-0_8LgD0@cTUUҴ7aLM4&\ EYv_ehUQa볙`O̥SC T dTgd-Oۅ{l#0owζ!*"Hc=iə+WO>W-5ɴ!m7Eݏ"L.Zd=~]i!vQ"=IktJG~#Ḧ́f6Q@ɣ&OFqXD'OCϦg#BDCYMzC4l@Av >et6v fz6nZ/x!uU˾ᛠ6P !45F3LT7 5fHNYYTjHH%\2RzG^W.Q;# vӷ Z g^g,̫49^Co;Pըnwǩc:;yEh-*=nzz[v8H^BQIcUL#8]x`k6Gh3d(Pn&dU ~S&& P5Swot.ɅG,!΋ |ja>O٤'IE}.B(6J"$]h{QAFGTtL&Mfg2L^96?ulcsl^9*|E_*I$ENR-ԢaWЪ9+6 }nčHni-QP ^?F}^܇HEcYî^.[ooUEtP7 bgp@UR{]e^W-\I6 h; Jb)mr{B/TX`/Juo~pAajf!d¿2߰ fWGu!TI.d)ϕcDF3\_5h\F)oP7y$"gk%{b:g .*4! LR^Q̲ z'o L]̛ٙ&7ɼi2ccsltlαyӱͱ@2Un'1/@R`O礮,Rq4 R 9ո),^4D3D4|:ĢLÈb^:2Nv(6;Yz=K0|ŬtJ~QLMΎ OR> "XјK%`T]9nBJJ]7HBms۠g\wRz1OX9'pܵ*]tm 3O|1T7Yњ04DŽcBQy8A~I)nlt ?9S0?3!sk,, )[qFqaj>aSqq=+=,n6 .ꇼ &PL{SY idlI- yۗkgW ֣S#Ahw9k>"#QHka\G2⟞2?=e);eZ.ӻL+P."6?鈽"*/Ӽ̟˫{^^T_OW_1{iMW[M@?A D8 t,~J ,r,dq±)=cȳȱxE_~ 4SB#?$4'4#4&8HO HȎțL]~c:>6?cC>6y>6;>6oWLOO?}+)2?黼"'uiOG=b/2=鼼"4쾟V_OW_1[nOpL~nJVz.L&M^Mv@?!"&D"S}>rpm})SO }?r8t\MjԒxwߨ<3d:?TXMir/<nQV[d(] qʈ}5z"Oy\K涁z0?WZC&⨎/bvR;=ߠʖ+"Q!:OpP@d׸p;9yN9WUAf5ա/gQd+A_fgEX+˖e/|f,K*6f RTڪcm3LL&o2/Lfg29ٛLd4Mα;6-cslMαiӱ;!V"G]1YD/Q)ݽ֌cT3ݮ~;'T[S<ꛫ}(iDG;Isd=k[?+6c~)'h׮sIO-樯8[PW_mbr)I9lKmBm^l.cj3YPv݈НJޮÖ˛3눢U**)2Ϲ5M0oY"1rӐ/ O],.y*t)& ]E}j9<#ML&o2-L&g2;ɛd4Lv &α96yfش]E"ȇ/Z/r\b؅/ _\?')rI7%)WV_Kvo"K]?M^_V_ێj+{7|-/zX}m/vዖk^AƱAı7K A r@/3%9 3)S A r@9 D7 HP&!M\YmvNMx#Ϫo)4}`E74|!2m3 n5RE3h<݊)I~! B㚉!7gu˱C\dtxrWLSfwOLɝ2S&wʼyvʛ.̻.OA]/tdC6tf",*/h6pK=dlVn\B"F8W5cs C h$ e,8"`"_"Xc!=fE@E`lq8FzHhp#4ù]!qˎH+>W|]꒏M۴)V7K>6?coWw+rqmB*b?&4.}ݷMh\wBn9_1ܪ/arLVvV^ [wG2?/oW&w%Gm K c up?A)p6tpCUVVS^JPSׯT`)urds[P%%BJKNfQBޫCKdiZEN`ԏ%p/DCAv>S75tL,xx{n=F ܅뙏F9&<ʠ DQ|Y Ioy^u˶h tj)i)\y, 땧E7z=L(!6昣 kgҙ;hEFPVQKkkG9rP򎡐DAC)DhX}Ƚ dێQ/)L&M&g2L^96?ulcsl^:tF]ꈎhp5IU&hC GB&ʉjzDN]SD4QD'_o,[c7D4|)u¨T,:zPOTIC8x]+ YL "4WS#v?9C2V֐ex^J TnrbEf z ]I#6"pM|pSP4'/  "@ThigaTZ>-ۡCy.bRLuhiQP#i0X90"E @heNb"/TI znXEu8.BGfg(K,3@jY(b\ījJ:E((ѩ55YT51DG \}1I@O㺻hspoE\~xahh%1 :Rnil"M&M&g2-M^86?ulcslZ9*|ş_}#|4I$ENRԪ᧥}aWo  T%M̥fE[xc(o+Q/r9_{ WT}Ċ*QFMcxn JWH`^iGC4f3#_HxP qjy h$R+*0)+dt҈ |RYvڄw9({E(Ɖ89q r Ęk̢Fm0dbXԤtj8nc6 :BErO H";*܌+X[х9S1jܴMOSg, /ٙL&36M&o29yd&slrͻαyӱ;6;MfPy囚` kg%ipȲ$z}I>NiSِ>p_DBJ)8#6ۗGfcJG|fxxmd`zVM[9כӈS 7![%`YYM>[j3,crlj2lڋ*yVgEZ6eSy]Hi2hrI+dL+Ǧ͟vlvMK^/~]eZ$)zI]eZ"O"J^"se{h+i[n+VVEO/~X}_m/O zAcA@y ě zV8 Abxs&Eo3)S A v@9 D"!wSjJjX̡p|( >,@'է1S&R[OU| K$n*-&{*#اRгGHɲEMDa2$] YhЁewY74./-!l"\E8G] &.fˊ$%@*S槧̟>evLS^e~zwyEĦ?W[^e~yy5y˫ꋞV_k5iOkltB8@?!b&"" ~H`" "M{9=Cz {9mE /8?)y˞HOMM͛|l|)SO~ʋO2}.9Flt^#"/Ӽ̟+B[^^U_OW_1{冭t䇭솭9l/?5L6y5R3O>zA }p{GpyouӧuOyN4sݿq8 ]dK#?+b˼MyͲ]{Wp6 *G|UI"qQ"Ä2h 7עˈ%&ڭF'R=$wE}k,>׿PQԬyu}fN(usC6Q-~3Xt9d2oAJeW!Ε:!o; 1IL:1MrAlЎ5k#E1Fղ*δ^daIq[D ;ya29ٛL əd&36M&o29Ǧcsl &csltl~slAs@x&MDIZ}$/y&?&Xbm=ZoxFM'`q̷a25~# \14RքNrС=%}ǥ!NVg*:$ێM@l7枆ХŴZXaJ"G\A5Geŵm" M70CDUіᑴqͬȄԨ t>_#bτ>i(8ZmMԤ5KQ :ĶUud$07@ 35ǡj ]n9J1hQ~fߩP, 5.Ukj #"4эɴ0ML&g2{ə̛&7c±96{ǦcslvMޱ96o:6y&hȅ/]b؇/r6.I"IKR-$.IORo&)"IPaW/EhQ+Eؕ"Kro"VHs78yg?6L([W* F8m3^l$E3_(P>>0z{I}Nąecn3H 0t>=p)oxg)6fJ^X 1*)7?١{.B@R>6$TU@\Z|v]4H)B:]xe NgYy3s",qSDbS4Ջwmn ZcΞnJ¤/e-U*|(:S0 kZCuJE1i倸$\7ٙL&3LdZvcS&شt,L!6L=t@iEW! LFx-!c \ҢQJDO17}O ü6KbH>dG3-\zq&ꪷeIy Y(JlxbE8ҚRP,f1#HMJW%P9t]lIKG7*UH%ns*"eW{5jDoAt4]ͺ9|زA)hjaY2J)MI˅c"wЭ_[#/붪bya ʊ s|~$YPr9TmP`pSd^Ld&dr&3LMɛLαic±96;f7c __EE.| _ś}"i/I\$E>I+EiE/R6K~+E6M^V_6yUpV_ێj+{3|-/zX}m/vWk^AƱAı7K A r@3%; W3)v@?!DbA @񾉼oȤ_整*QFL(2Rqfȡr%6t7*vr2(i᷌+g FIz¹.nE.fYPe 5/Kz3f^.fդJO3g}vW چbFĖU`Dm`z_ED⼪PԵ;HSdK&@plT^5婵M 1aL)Qx4R_2f9r*#]昫h(&j ,P_E;*fP#e=\>1UmՂSUv{wPd<fXVvUZ9M9u[)k˶H >EPa%rTjGG%&ȩ dDjj2B'd)c);^Z8:[ˢ3|F4 ^ lDodS@KwC !?p&n*/'؞)?VJltxab g=VYPL"sgEGzxiua@gN&x#Nw u%% ̠-UtEQ?e5(h+e[pVdҐ{"NAX:xW >ch#ػMmo(FJ߆Kh-X|C/S^GfsuE]ϸk=^["Qxzs6CG&#> 3W3] յHh 8zkiٙ+WO?_4|ѧHR4I$$(Ei)B.Eȕ",EDaG&VuSԪjZ\UY"x;ՁЕo&*a5#~\oYt~X}%,@xA&ܪhTЛ?+7 fC5\{ |˄_TciC7I3Ьǒ]GX!7=R˙xI:&HO&+ڌ)gy ə̻&37Mfo29ydz3969Ǧ]&ؼccw샜S!+uEDU`Jq6P]bBMCDWl$Xn^88\娎&>m$z)iOzU-%D]#9z2^L #cdp207.)j}ډffJL=DwWo]#(nI6ƛ| _-|9 Abh&)D @9 6 r@=!"L=@=A v@; :^'R1t;,EMy&U6ۢdVz<4ao~y @pmn:%mP}hi91q{l9KD/#gPoZRUcU [fʺYܬծVQ1GvEMM&B(״bqӧӻO2}.@ݯO#6=鈽#"/ӼL˫{^^T_OW_1{iMW{ z C =DM,zJ ,r,dWĉ;c!==7YY 7#4SB#=$4'4#4&S=!=6ثS槧̟>mwe]^"bӈ͟+B{^e~yyEh|˫ꋟV_k5aJOpL~JnʛV֕dɫ ~ C<DM =Dp?}>ބ}S槧̟>)O9i p~c" S QWDx>2J0{|ro}"IsYSA1cI;ϋ ȼ%mmu?75O"qܛ"//ɦ'b_XWuaU7L7@3jюj4 ; ġJRJAjM)#{WvIdYpYdm P_K'G-GmeWĿXm_=" &dv&7&3Mfg2oo&;Ǧcsl fcsltlzs]VA)'MP' pvu.RlD՝%NȲ`y]l<0v7tOݷeǭJQ`c=)uDR(٩4%s?- L$``ɋpmld702Js|HC۪:򺣈Od{wY4&k }IJv͒-za8a E}f"JTgwG!$__/\:̐+"rhWijIkG5'FLi }02,iCvZ}TEVH<߲_#(>imc8t}”D,@Q^,&^bݨzy (3i.ѮI++ eS45\K\~77ぽdg"R,9+d L: k_A V wYpXtD]d8‰,]gR2[etH)Z/UCY/Å l#.71\i"9W zoʡM3ܝ<ia2ٚ ɘLd&16M7Wy86fؼpl6Ʊ:6MǦ7^ElȄ/L"Ȇ/27&IIRl/$E&IMRlo&)~KR˔"dJ/J6Rm)BRl)rI x^vg}`^t\`s,kW=>I|{exYSʋA2\R.L x/FZ]%T% XZK>(9ם}^eQ sD@=eޔX!:|n#D))MޅI]E*sh[E OAnܭkj1녢< %HzE9N?,ZhRHa {[\z3uFPa|MYu|JTPNn.^<3`5i/dL]̛٘&5ɴi2lcӮcqltlMƱiӱͱdgU^:|d<2׀ 9ۻN {%x4*D)q#4_u@~HzACGsTp'twƳlF,/ u.x^+:KId.0qY75/ROE7nf"B!bALNT\4<¤ϊ{Rt|&3Ie,)*ֵ+ 4y#Il`H+%g| 80|%6<Kr1Vh~ U{- K9Mfc2Yia2ɘLd2&lM&شpl6Mֱydcul2Mom-E6|"| _dE&|f𵨾lbhU}$&I?W}RM)B˖"dJ/5䟯xױyV/ _ ] ıit9y vgR͙Ad 6@ 6@ 2&\Ʃc|%'5d]+jpv2}0\47OX?:IE(ӛ[r|̓(rKC=o!Iez <ֹHDovֱ??e2yqdN)=e6LL؟%Kue6w62v{ZDt,"/4?"1/y "]5 |"XApZ 7灠qvY8A,+z ,1+r8߈Ο'4.Si< [MUZ|l%'.?Ǧ]B#/"uyq+P>ޅi\A`L)tmw=4NUՕArQk,(P+r7OYVPɨ$V4eϯm'UGRUޣc Iq6"+Re:0HhU+w4WLDwɩ-*HEFثu''u`k9*bQ-2u;!6Uh256ɴ2y|ױifؼtlc2Y% &6G'y/!9wY*MY̎g\,,]!g_KMN |KND#ǟSlW鸢(t6B(tzQgvc(_ٟ#!e%)3빠CmA;LKNձ>]%"x ;q4>4LOd^rlcql^9*|O/6Wkn$E$*En)O"lJZ"˂SM>EؽrżɃU%ÅѠU":ϟ&ǹsAOyBQ]zM] ^"KոzŅS <@חgDQ)ky ,˪po˗k{&&1V&cql^9*|O/2Vkn_n)BO"'=]pt[׫/؄/ _d}{cxf?i 9 ΤA;b?A,op |Zk͵}fz 0ϵG"֣buKqSp!궆N#n,ƫ+B \amB^?rErxH+I_@?rEgmHRӦ.=ezɜ2Nyݾ]&s]Yt7/ynOW_,]sƦkm`d.I6YlX" "o'NذxEEOp!4. 9Be!4.S иfǦ]>6>6s|l{)u>6ݽ]c#6?y_Omvn>_~{ [ywf|O?_A 蟇} )ӧ>9pZWDJvwo G_,_E">>9^mBCN!KJ1eTJN: Ut9r(eJT]\XZQ :GHbR}nqEp8~2*Tlعq"U0<g 訖yNC:` u(.LTn,j+.7IUuDZO9.F M|sBC478}NS*c5  ܗ.N^MlLfk2-Lfc2ٚd4L6 flƱ86Yfش~{=x?h}Sҍ&t5=k{2Y z\>uٝь)xMY_xH󡧈@PPۚdv=Dw4$og&Ⱦ匞>Ok/%c#~Ͽ:iTۄ$]DZpƂguSK)}m>'2K^GVsjƭIgN||" ?LCSYw٣ew( ?,-rBtփkZ}h&=ʡ\5/t~Z1"JN?-k$!u^Q)0eJ(ڧ%ӉZD ⠙9PaVS 8h)/=R64^Y}b+vA|H:6_s~9*)4ڍUU q!(L)RBHTNTK=֯Ix//K%o  dL&k2/Lfc2ٚd4ɫlculZ86&dcӦcӛc/" _dEE&| _dś"b$E&IMRHRd$6IIR&)6/J2RRL)¶!Sf)BoVUWK(UhҐחHIN}=̵;6DaFfk>Zſ)N.!E?oIt@O r):$g#«T(xEPf'R _fֵ%s^+Tj,5!W欛5Bpp]nC Gm#MCBI8M DQ C.XǞbQ4@P/e(JUPQr5wM^b[4Q8~\ 7VNi2Y٘L&5cqlul6MMֱ86o:6[^Cv=dF<~IsJ1?NԡR*-S7e4QL58CVܘvքo4:RRԐ P``uQ t=YQѲw%嘧嬨lBԂIɜL-?"ts( ,?>ߎ:uE:!]4!#owֆ83,4\Lfk!8{5-47i|L>j/Rvmd=/>CuPLբkS;Yr46Jxi)٘Ld^d6&5ɼi2[lculZ86flcӦcu/DMbx؄/2m"x3| __$ū&)2I˖"lJ^U_aS?W}Ѯɴ(8W&|E͋b?_}nz6= ıit9y wgR͙Al 6@ 6@ "c2Y7kN`:!^ͼM>`?K؈- aㅎ'P_/6Ww W97jwHr{˨c;harRdzxscS&sdOLٜ2S&sʼyv+uyqW.ٻ.]添`.tϋEZՀY;E} `V!W7@ vO-y hE]%N&+B.и"z̊8|#Nlr8ȻL]KhM7W5]>6yʋS^Vͻd^9ciWy_+vyW}#xQ}p??_a'ǭaϗiw W#+Tv &p݅]Pu]tU_YD9*@wiqQэG})f=O=w0]Sui\O3myrNDEd䣟nQШ Ǯ^i)&uk=hEPE{zrI4Q9N7j jۯRWp8"Мt{:4?QD"#6WJGPm]ӦмP|XIGgqeSm<|̷Q]IAfNnl|D*#M&&1V&:6=l_t7|LUZ%)$&I2I-J[ӥRVȲe$MDQ¹𻌳stFoV= u5Yr7{3xc( Ypdj@QW&`JF-AjF^l)kx %yVG8uapM8*Љ]t|,}Ƀl q,5"Kwi~Yje2yd6&]٘L+wcӮcqllW}I8c򍜐x,(lK1Ȓ'.YNTQv4T.Z즂7TCm ףhJfQyQjы^ ,""Z'+OLCșF,DEJuJ;-vz"˯rȂ>Y`enk:{ ipcSee$-/@25e=KWTD ڤcBu|rnNke_@۳REuqȚ PpB $}_/"wMM&c2}?wvl2M+^/&|*|MRt-ERW_t ο^}ݶn+zeELﯾ6ql2@d ;` dgRd ڝIAl ^Ad 2@±Cr8v@/BAG(B/و0E7.z9Dq x}=6>6s|l{)u>6ݽ]/|-Bv#>kи鼼mW_tvJfJV6Vtd~.] D]'=܆*c mg^敬3lHD|+""MN*aznt7Ʃ;Wz]7 9Y~>ߩqCT%x:?gB>W;x\9Sn> ! A脦4:U^]4HG'u S#7B|V+qj!6+4 4dc3ExujS /_v˷))Hr]YuCwթ*BsHt3&d6&5&1dMfc2mo&Ǧcql fdcqltl-WOݹ>'_$~AC_U^A|ѺȞܑs`bAg[ga*x7(O鼄a>ߣ %闾&<)~U&$!h]Ҫ9~v%RZESdY\؜"xȋqʬ;Q?l<ܣ1Li@RGtŷRŝ ∧LQ\H;_CJ-yȺ.*Ϭ]m/ȼMRQ?n s͎ %8#7]B=ĭ%ѬG<H0(I.)Ry] ~,9I]=DOm$PQ 㙦x)4-ME9ia2ٚ ٘Ld&17M7c±86[Ǧcql6ֱ86o:69 __dŋ&| _dE—IRHRl$ŋ$&IIRd$EIޒ)ExQ)Eؖ"(EȔ"lJR7K>_LlT#PMnKtcfj2Oia|r906eEBcH72q_6qvǐƩ4;[ʄ~ezExAI$^>!! +E)"Ba;殝N M`3{A I#N)㩝 XY7KZ)~ U郭 H\rzumYG!Mxz=+~9f;<&ӑDˋu<Nj~R5*uAn苖IJAos"bw!By]dZLd&d6&1dLMdشpl2ֱylcul2͛Mom/E6|"| _l&|f𵨾l"xU}$E&I?W}RM)«˖"lJ/5䟯xױyV/ _|hǶ@o?A9y vgR͙Al 6@ 6@ ccZ{ZEt,ȸKst,ZS &r4)F9 !׏U[;>*@, w/J͈^Hin;5>_{x$e8z sJ+"Rȑ=F晴eC)~7LS&sdOLٜ2S&sʼylO]]^+P]fsi.]^hE^A?" -j@,ѢZg E8iQc!Dx|Z'xE`"x8.chE v9HΟ'4.Si U{s|lޥW՟c.9wyEN~}.{Eh|b.yyEhvbLc8ZT_1ϗywj˼9l2yaj ǻ@hy}?.KS^?.tO  TC!w4V?Q(QԵHb(?|8vra}}֮jxYV!/Ԑ5u]|6J|XK~46Vf퇒(6З6 lx!N u,kQϫZ Xؗk?j+sub,9 EцY Eo\.HŠ\Csp'qB:*UЙKsv"PfWSnu\&T*pbu1dtN|=td~d2&c]ǦcұQKjYwY= Sy =88ektrֲ6]Tzb[hszhR&yo?.ˈeǯo_ RaME%_'"!^䂄&}RtzP!*^42*|G|U'qJ,C볏AP}yn MGvCOhG_[JGTܼzDM0{-s?<8MYIkG"EB%sJJ@P̻]ux-Nvq HA]pD㒠 n)]ӼEbq^=4O/@4XE>S=I1sTvۧ0JE|r@L T\ZKox><(P8"x  w_ uvJˢ Eah_."8FўEI#Vv::~_M7 @%Z e&6?Uڻ(!weʀx%^dk2=m2yi±cӎMƱiثEw=Ȅ/ZUINRd-Ԣụ?])ExYh]LEԭCչ kpWN]{lek|]n0uT]?/cls|,7bf[܍wQ,LaZNQ1"Uū.3NO;K@,ӻ&mi̛"z h@6ݡV qשć5/*bH9N7n^B a+r=hDY@^EZ%!NB=c2ɚL ɘd&16M&kr7ql2ֱydcul2͛o9U=NBRԢyܩrG;אs|P5N bpN#m<_@+?iC*Mm;h_s,^A7eb}I}u0Ex˚UDD͓OExQGp^duE{`ҠjJK0}.W(JQ"cTq;*JR\ȨK ?O\;IGw,װ nQEvtmRpU8C/fe^T0QTr*g^ٛZvSS;v6B,H4ǣvh} :(e}GīT?Ha>6m o+zxWMf=OshaTSxz3ᗢu A< #ɼ0lMdL&c2[ɘ̛&ӛɫeƱ86Ycql6Mֱ86o:6[&hȄ/M"Ȇ/67E&I"IIRd/$E&IMRlm&)$I}(EhQ)Eؖ"(Eؔ"dJR6K~+E~+q[Q3"oWhq;ʹNj?7xK6c0li^dy!.S4t]&EЕBDpfz(vim)Xdk%r΂37'$ 6H8+yjщʸa@ ѦS1ǻV0:6%d1iet 8 h9bvRI~:LfWZCO;˶&9 Im)HBVT;;Qh\yd6&lMfc2mLo&w-&l6c/ߑ|#K|?kw!ɡ4_MD\YIh%R蹗i(yƤA0ؖd$۲/!򹐝ݤ >G ٩D9eК^,P:Cu炂s4uӉk!< 7q4|E? ١vAzqZN>9lODjXSBiV[PuGX)IEM6H5 y`8_p|/L_ٿlL&c2Yya2ɘLd6&Ӧfql^86&ؼpl2MƱ:6Mf˭a&| _l/E&| _lo/k5$)6IV՗MRls՗-Eؔ"l)¦]yQpLvmʱe/ _W_+ vq8A;x[`9y wgR͙Ad 2@ 6@ Zm48BG|,**5ʚ|!؍]Xa&,Q_R/1 MveوLtwCsqk'+J0Ê!ۏŀA#n_b}h쎃) o Ϲ"ɜ2S)9e6ٜ2m2o8|~./ e{eڼ.X "bgyy5yhQ}pϳV"W7@ vN &<"N.'hEh)@ݟxs'/M]AܰwT2`Q:)b*R4?w\dx=^KϰhyG4 "l9lʪ[m;*]$zK0@&?sC/2?j@={ _UTwsPctS(Ry(R o~@VåyrhHT4PR($Z}2', p:K#DAеWl h8M-o'2',5=WݭH[anH=8u FE&]i٘+WMwvl6M+>Y%%q>KưL@Q̨^Zm3R !0IJ /zTVE%\qo(B#MiZQtoz=4Oz 5=?aH( ;/a0(ĠCsNų2n+HJ軈\ԨY"iw m[v!Աc>1\p* Ȩ4%mÔAWr(ݫ=N_"r6)5D~n#i2pJj]1ı>Yv_x/ƣBY_׵FQÏIZ3b#x* 4pcW ng6$"EOYD6Ώ$>-Ka)V+'+ J'0v94/\Mk ѱO)Ȣnk K' >%*PDmHDX'm笠5"q"AS4vg]uP)Fiʔ8S.50;G ?JQ BYdk2?m2ieʱcӎMƱi؋Ew=Ȅ/ZEINRd-Ԣ?])ExY0׍.xTq& c}}F;E/,\%DT*ZQDj'5m~݃SBW=C wCw%tIuE΢m}0+EB^UQ<V?*wS)s&:%>epjm>F9v21&QkM\}ϗ@] C2.F..&@_$ǟxPC#,p"^d5|yB)Kd5td2&]&شd:6c WKEMFvRAdԫWiT$C (YA?p2ߙ${]jMOY&U!mb"YT,:"rI; S#9KU<M`b?< OTH0T[𲤨H}Oy< }xD.辀v|TߗI`;!~ZB_'TWN +Fzi(%p\@P$wl\oںVW{<^P&K; 2C'(Tm+GxY@4B3RW)z7[h256ɴ2ytױi&ؼtEዟ_d*I$O'^}R.Ezw Nzm+W_6| _Ȅ/k&. 6@N+AAv&Eݙ 9 DbAY'CFi1Ӣ7;?IJޫ*Ed=Ͻ8SAJ'7r^YMw4jۣL{p2,څXn'ct Nϼ{]V2 yexQ} eMnޔ~.L8nw&i* Bem:\@VNLOD8NK*IN2=}lN ne~.˼˛v#_gݼO"=]}mv!] Ļ' da. 8" "];=fɆHN2FKHL]2FvB. wl)ӧ|.wMBv^>os ]}_/a+a+[ [/]i˻@ w 6@pv>6psp=e~:Gw94sv)+R~ژ+c_G% q21*Hh=|alr,}8[f^OLYCQǗ{>Zs"Z@w _fXpqh⇸Co~{(I˛fu.}Pr2͝Yp\6T{ OJC;nNAJ::~Y 85> SIP9Ǚ b c"|odZLd&d6&1lLMɚƱilc±86fl6cKLyxx$V-kE%vd9|Z+'N>&,š-}!_ʻ#z7--^xQ:A<@u4_x9džhIjy"|8)i>?zCOHrSjS-W^N0Q87}U.#<"ᡦK(l@xK4"w/9_a"ձqb|ࢹ2 L1 k=Al8UpQS] _Nls8 *~QyWKQԍB_2qB%S%Z]knI:(:%5^z=sA-C KVI8Uͧb)j; eG!W{8v)$eMvmz8W%(@OC0O$Vaܜ06T8*eN0 NUmA zqL6K2jj6O)(px/5 R݌ɴ0dMlLfc2Y̛٘&Ʊydc±86fl6ۄ/Z/6lE"Ȅ/Lo$)Z$)2ImEb$)IL$EoIʔ"(Eؔ"dKZ"lJ6RM)›}RdQ=OwwPLq+w-(&Y%t@Wi8ÿFoZʇWc'"c6ܥя18X"W{oq !D !]$"JpUjS&m31|@r]sRDIJi"3Y_M)|n㩤L~cAЈ[qIcVE+e<.(噧0^/-{̗ v rd35‰:fd6&lLMٚLd4lccqltlMƱyӱͱ Q& S\lQ'2 rHӓLp^cDncߊ /ͻ4{#-R  J1ypLX\S,~+s,x9H~DRM>{RHbR}\WTeR/#ĮsM}2k?QzHF$bGEo$ڨ0ZjbB0T?qwJG'oLb/ c)b.\RekȂ읨(J,Si)KbF6&d2&5&1dM&c2o̟ylc±86fd7ۄ/Z/6lEb؄/Mş?T_6IIRlb蟫l)¦UeK6s̋seW_شh+V/[}f@M ڝVX 7?LA9y DDbяA"YD\pqQKG,auNޢáشfQ[bNY1ڔ@kByq>O(9 =̨奩4#I0!Hew||DYK usEx壟\6LS&sdOɜ2S&sʴyv../A]^.˴y./X "bgyy5yhQ}p"X@p^!C+ vN & @Ђ8,KMĉ=wYC,o,ᴄFpxԥ)@ݟhs',S .?z^~ROVJ1n-LY>Qk/ Ʃ-Q9/k7I1f7'o ] 8ٺlmtYTܥvu$%2. Gky%Zhz ]ݳ&}b"T3-ʫ`&Sdl芤4e%z`PD}_Qj)Op|;}Fz7H(U=4IKG<}鲓0WnuyH92OLdZplcqlZ9ABM^v@ZCU<4:d$4y=OwgW0cZbBvmeYm@녧H"ߧY=X$.(vF7A3b*3 q/ #'Zh@:𢗨WHѤT/iWAzHe)k[Vɞ.:Q$?JA"?29|@; kzKк`BWW&4cZ5/= NDN8ĈS^IJ[\bm)Mx7uG5O%2IPBc:?G-CD&H"st?8f?#]pX!#dF9H^L/:ပ` RU 1qTiNrvfkOS2sӐʧv4$fs5c rkAc}@UFT&1vM&c25ɼ4yӱ86:6滎MƱyM Q_MrX"U>+/J9׭i{[OwY$\3E8^4+u][S`I"\@\%RTG$pP>ŬBu )?i3lR|NSДBP5O}zȂ76M"|?j֓pnk倜-ZzȀ\^u>: 1˺2.\n?N.!W 6`E`zhz(ٳRJ_hSGqtjekmvFpTj9TOLwMM&c2L^96ul~ڱ86/{nūJR|7IIW_tK^}݂.8zw ~՗ _l/6ዿıAc촂 Ļ 2@s@Ihw&"xA@n ~GZ8`p)'44!D^tΰǩ`KqM)Do$N3GDu /t/RoIkze .kU_9F _C/RdSTi5e6̫Su2=}eZv#_gݼO"?]}6!] D' ea. 8"`"]}?=fɆȻN2FˆȻL]2FvB. wl)ӧt.wyKh܎t}m2?}cꋟ|[ [ywfJ|O?_A 蟇} )ӧ>9pJ)5L$ ^pR'I0_c]Y/~k\}UGg)s"f+͈$5s|\Q't}K=ZP~6}ux绶SMp|\"ӈ ;ճpWSӚԊkJSW]b$vU1AԟRIQ4KEMgTURO"y1%pHuYXs>QPk$5E݀CjEEQ75NP^+'tdyz*(bHQStR rA w ~kdvt(=yWXZ#2G 6. Äќ/M9 GJ;č 3!y潢G䄤^<5d5HITKa`OAX Ŗܕ@ WñE N Jɢ"#M·}:%}NOarQo9 IVW-q`u/xnPDG _pR}q+KMW6^gwyeF9͝ h%5~g_3LOLd^rlcql^9*|O/2Wkn⧓$E$(En)O"dJZ"҇$uCPn\uȥ0zٟTCWvb% H#t^M |U D %e5l856r݁/!Od)@qItݟ"Y:"v56̑@_Ԉ^.,pl\X2pЅy8T~i#<\\wѣkWSc/ӊ#օyǓќWLUu[Tzٸ_@_嘲_E++,3Cc8s(C(FHu('g qC_NA/:K8!o$3/ӓu@14ě)g Dk~$27ndˮU,8 -//EuKlH#4\]ꐄ) I^La?;W!#w8npED\c:JHn80ɪ^je8U1k$&ͷLwO>e2LSu2?}e^M~;bn^_gꋟYvO.] ȰxE@ENea. $Ch]'B#sFeCh].B#};qMͻ|l6|l|S|l{黼%4nGlz:bov y1vEOW_}ld;l%3lnwMMޟ/oAl A}d>ޅ}}|Sppm #rXcxj!?B ]w ?})&]~<Ä节B9#5E|^5]v~'>8<@MDdfc>VM]Ddyź:-ZN7' Ih`$/u,~M^|^<\O  V,,_(eʶ,DM[/uAYUڽ, PPbhIsDC #LY.*G@s>L ٘Ld^d2&5ɼi2Y86/culZ86&lccӛc_(J+zDxÂSԪ\ib3IesSq*{bJe?kxfx1EQA Ptu}GsI/:&%TۣFQx?.~nn> zjb~L&N-zGNA7dybE zyS M *,eZ2^ʡOR,_"Ąu%9/?#|#WN*Gpp^peҦ*%_փ8tNM ]&-)F t☧LmD q٣_|)Ä́A*Y#cT^%JG׊ms@. D2:ozO9[aN(sZf:@Eس4lAB,8ѦhHYOw T(Q2!$UR6qw!׍ز Qd5ɼi2[٘L&5cqlul2MMֱ86m:6Y>rJDf~$V$CRhaI59j4DyU0x>ՔPQPkCfX兗rh6v.BLs@M<\}C YX _z>L ٘d^d2&5ɴi2lMƱ:6/cqlƱiӱͱME"؆/Z/6MbȄ/ _lתIMUe$E\eK2/[)E蟫hd^+]ǦE[r쟯x7|6 ]Ac<Ļ  ڝIY 7gR?AAd v H#vN)81.(_QOy`x( ps%s/o5( >ͼ8ŮO8#2K '; q(n4db$>W$|HQbGRn~OiqlN)ɜ2Sf{dN7ONeZ%ˋue6w72v{ZDt,"/4?"1-y "]5 `.i D8Z'hE`"Ăû,KMv9țΟ'4.Si< o cwi8mشKN]^cx_KhE^GvyWo`-˴;E|vv̛֟/H&FϗWpAM > ǻ./NyIz]Z,eQz?_L}ʥg|E{G?d 7~Ȇsv_uEP /#㶎*ZQE7M5pP[InkRT}EYSe FK^jܜI~Ϟu&ջZ%dTsz_:CmMFr>HE*~ D#ǡSzR#u4 CCH٧vC/"xyegM)h]k)&]i٘_1OMwvl2+ǖ-3נUנ6J@KUxD(5d=`ŭkvNԗ3E{ϯЊ,,LN:=yUZ*&oscQ;z߬w"p)]PVU!0|*b!b e._0[n}]RT\-cDPĬ5陪} >17yU_7K;kH塮%z!t)bbX8>ܕu@#Cnx$MN;WD>$RCz i8+]?"k*.,zfJm2%,PPP')Ŗ?)YNĶP tQj>qw(U4|r_3LOdZplcqlc)|O/2ዿn⧓$$(En)O"lJB)#h_UGSI gʠUAزu) wEe$\UDi$xuMeJZP*Qi,1u@UTN:8AUׂF2z d~ :Y%/ΤpX Q&k#ԺARL"GDD/&M~^M ᑫ+Lw:v Ns\}E12y-jA}Rb+(EPjoc* %rIISFm(v]$hsz/{\>xYdL]ɘ̛&5ɴi2}b&شd7cqltlıeȇcsEƑuxγ&j\D:B.L']t~|F5y J _5uyOEM2y`,'ֲܾf256ɴ2ytױifؼrUዟ_l*I$EO')2IWIjUR.EȔ"*EV'-8se2b VmʱnE7/MoA|@[ ě86[ w A9 .D7 @ 6gRl 6@&DbAd @!Z}O u=r1vBhdn?Z?MNG {,Y3:+ (2:.VK266].뎉s+K(e4gBcG9C[BE!" t"uRi?+^hӊG/7Q9G0k\*2j|SLO2S)/2߽]^wynĦ# ,b1/ݼLOՀ=///[}j itB8??At@[ D'}p~`]$Nea&, c&=- 6Y"0FKh䛄FF6Fp%4!4]B#$4%4!4&SMw|M͆M|l|)SOyE[p]vWFl~:bo{n^߭k5{ [|oΗ[ [ysJ [h256y5R7Atp[ D@Y w> } VLwO>~ 'pt\1s"YNE2CY/F}ۿxRN]; :^]4OAuD*F-Ī^A6h\pxv? 'gpH8"?UZE'? w`F B6MOF/ᑼFǫbh}ژ6B4 3;0i\רT-œx :lEC88vTUogQ8*Sɼ0dMdLfc2[ɘL&g&_MƱ:6/cqlƱiӱ:6E&| __lE6| _-|$E$&IMRHRl$6IIR-IRRm)BRM)B![)Exa[L109KtID ԋGjqjjxJfŶ-6UiavO Rub;|^}I8'i:v2]/,$bHSt }p{.t¹ԡÑ$/Ġ a,7$ mGi9UCW UAk?EyHIljZ,1MFa6N4_lju\YC L|poV kHr_}̻٘&1LdZlvc]&ؼr!/$J%cec#ĢyYet4㑠sN:y'48TTa$W )/U+V-`_/WٚL ɘd&16M&k2u[:6-cq~cӦcӛc<| _l-&| _lm/~ _&IoV_d$śIޒ)En7/R7KȮoV_& w7{Y}k۱WmśceE7&|*|K nA86 V8b M h{Zմbw&&="fR M dAl ztؚ6lV)BEsڋG*Z;lmfت_űV7b1aԺV} n]|@I8Q&}K57H~+rEC\4F|V%2p]Pw Mo]; /> mC+;t/!&^yQKu0|?E4˼|PKbBJYa3() &P[a^GZK(++UyqnYܪ-(K֮]vXg)z9l._Ġ/P#N|^A6Km^G /^`v/m|##Թ่LӺ(Y:;,/Apk fstEEȀ79#]9-cNx =0P@͵V*KnuG tE,UU5&]i٘LKwvl6Kǖg$|{Aќ:$ek8-!;]xAo$d=1b\ׂS_8^=DcçG|To\^Kzӡ:VK _AtŕP)=ZrF?ݦ@wnitZWN[4J2AkyS}cG%Ȃxhnsc#jCG[EBOV=|Q :~#$ )RD!mFgוpoͻ?;O'GrhQOM}7R*̢ЦQHlnta*CY>6AdjeG~YWѳW&T?S}ijZ>z i.!O@O"T]`s v|GY4g& 6oXAJכ!F74Q:[(jp*Ods^AAԸCj KU&]i٘L_0wvl6K^/E&|*|MRtbhV-ERM)B_)EP HJ(c3&NF1~^/rm kL݀hXв6$pt=Ȳʬm8Ir[ECw=-g/RѩZA!NKj/PA)#&]VG0w040)& yb2U$)3* tEұMZlzAQW$^{bIp죭xn.)"P|L^슭^`.w'18mϣ,,(Ϯa}|Sfsʴ:]w+P."6ݍt^AF?e鼼мUw/~ZުUMwklz^! M -DMN" I "`"MYߥMz [oE`|H7 l l$Kh$ChFIh$Kh$ChM.YB#>6cM>6[>6>6mWLwO>mwe~.owynĦ#Wyez:/yyQ}ꋟVc̰Η|찕̰76l]wMM^?5 ]o}l 2@mA p߄}l>ڄ}S滧O ԥO@?r8.p7W6P9vZ{Je(i1M,}I[ oi5hG,oBAĴߣOYN>$NshFUKp/#g `ˊԤHGTKqt}#u!xIMR{T!]klTnd& &jg4CK>8qQ+z)G#$ i5J1i}X(A~-f (}:9:"x`r7f-9 M}r*kR35*4<JKmtM ,O=Ti@L6R!}tBOJ"lZ>YV9uα,?]$zj\F~M+ۨ c 1Fh/M>*OFD)N|С*ũ 0'Y $$k%ԥVUъ.sd$)kReMl'$e2id2&]ɘ+wccqllV}P.856<~7-2aUA!BN\$C,?>60YO)2>t-'(vA5ҧ4iDUGn%"ݏ}R8 95TxX`L*csSg)ɸ)N-$TWeΤvpQvnt|&WDVv2ECV[h5&.vz,<8C-O~MžSg.U?j?$+JeBD7XB-{˹7ԛqQry?E^)Uq_d)1qHRf7&d6&5&1lMfc2mLd6M &dƱ86[fش&|"| _l-E&| _do/Mݬ&)2I7%)SoV_lK6m"Vlfm|3yױݬ{V9nZV_t_d.&chcN+@d ^N+6gRK oA3)2@/gR@Ad 6@ :pr줚RB?wvs%0S^`q RnUrIq8hB dZO"*cpՋF(ǩbb)ܟW3(?gU(7u;d EgxLSfsdOLٜ2S&sʼyvʛ.̻.LwA]~uw%nU~74KdlhVy}@9[&`{ p"6¹o#K oA' W.`IĉmmC71,6,Zv9KB#$4ns8ye. |и%Ch%S͆+>.muǦ|mh%nɫFN%4.y_|Mh\Eۄ%n Fh-ts=[U_I5l]Η|y{f_nԗe9_L~oAKo}@ @ mS~uw%G7m~|eZ "Rٝ~Ay3<ƣD0#!sY8Y]әKYO ~׾tSX\8 u iVxBwѐ![uuA'E+E_{g5[84 eO8(|65j[hR8c/K"uJ&諱rpHh;PxT.5|O#uea7m`t֋eK^Y7Q EBE VyU? L&&1V&:6=d.j(IxIIEW;tV.#Y3Gqr50hGej!B؜uM4~犯 E!_kWd g=d)T7EP}9r -CPL%>_Q|ӊ}A3j"o ܊\&+@$˽48Y2;@#6 Rrz, <"ÕXW;$Qynqڴ(],dEu&*24br "?ZAHbSt((D5vjd/%eP ؂z*/g4i:t !y(%GrxBiBN?=r*M?=LQ#퓟 J{ZV(y]\l\3M\T,@q)T7, ['a |:z)A| *#%I$KFSFE^6 k&]iɘL+Wwvl2K^/&|*|MRtbxV-ERM)BRdQp݂.8W&k^[AO+OCݬ؆/66m nAd 6@o}.7 @ 6l 6@&DbL-@Al 6@ o@ǫj2HV಑aBeA.h S8"VR! `3,§ 56iRM'nb\59E<)_颴Ǖj^ʟ31ʯ|.t*{|YHJk'6s섥\nۼJI^,-|Udj_;e{)9e^.ݻLOvWFlz:bt7/yy5,/{=]}p156ݭ{p~Vc.D7 @ 6N~ '&q- 7YF0,K,6,de!4]B#$4%4!4&?p^ t7 l deKhd|l&&M>6Y>)ӧ.ݻLO9./"6ݍt^#"/ݼLO-//[}j V}2ߜ/氕>dk2=mjf2 }t# xb .7>p7>p)ӧuOyNzù9_D^J廷Dy';˼9E.7P핚?WB9jSe4J.7)oky73R sߺ8OU "Ic`C1{.SیIzSSU  k:g2IIA[XluO-%/.+pEWsi9a+sZ/cyӵU":e:E&ˋ+.Iɼ0lMdLfc2Yɘ̛&5c±86Ycql2Mֱ86o:6[>]e_}s 2^zF!Ua7(m.;;:#CSJ%wUI^#"9uE<9okpdZEu3S* +>DH WL\Ɉ;?L |%-@!mN͐Fu*#QHY^2͘@y+(Pn7"t/' (>8EEeuy 5ACMOA9UEuwS) Wm21 eyz&W.=yU$ĩXtE\S /\LfLfN,N%NƱgM9*?% $סwx G/"~QƓKa"1eYx7w[  -d Q CE4oCo]Ys[_rղ;'h8VE&_G%uYA9(j,z,A Q܅$\8Q숯|U,CDI9/ͨVVJxmY,%N{U} lSiS Ɋ|Q 5?cxI2C&S\smSȬQ,j ,UyFɋ2g8Ϭؿ;Fn=#ayp Xi'Ɩ&"̕P#Cw. wN{!$YC'+ AR/)6cP0&d6&5&1dMfc2od6 &lƱ86Yfشc__dEE&| _lE—IRt$E&If"ؔ"|RL)›"&//Y}m*8Lue7m^9VZV_t_d-&&chcN+@l ^M+vgRK nA3)6@fRl M -"AdB?֦{l_^ ާR)SXQ^/^q(*K8j|B6M}lUZ"# =G@ E\x]+ED Y+TK;EG@х,:*P& j0uS5Yz,θ[,w9MBVvOc/EPQ%μЁ(N8ytg(~?䩪\aqO+9Y¡&a![@JrNVAjKZ, ^SՈ R^d5|d2&]fؼl:6ǦcKxrGm>M0L͸ÜUy"$*;$"QSf"#$Y7RYv}q[[o FtXrIsؚ(Ъ- z%-zf[⫎KD70_ 2Eb8Mֱ2 2PGr¤v4|}ӊ F-7ɪ+oQ VT>^0DWR.gq-Oޫӻ=)Mګ/HBŻ,B邿[_ϑE44utZ.mu|mh%oɫ̟-BE7y_ۄUľMh\&oиI^-|s=[U_ocar7V2V^ [wG2ݜ/oW&6Rp߄ 6@} G+o]}tuWnBKo}ra^~ҝ "::B@PE}9vO"+GG/+Hŷ{r5Ტ{YȂ4.kKK|if p݋bm}MQ_28iȷ:@& BUF؉K 77,*%ۚE@" iGqQꬾ"6i"tNؔ9yLN<$CONޫ*!E!IA]|.7TS; )bk*!ku]v$ª rLwMM&c2L^96ulzڱ86[.v*v h*S%1v*]5Iu}VR}U%&% 5'REx!~gyՇ 8:E&urxjk#HBU4N}ip'DTO_ܔ/ɽ?2Tps_] Ia\X9-(<V4rZyy NJf8|,+|ע.jHgPJX*Zolxj2~<7W*: t75p d`ǡ Nۺy 8_u)I In5ʺ)0DC8)ӎA^ocQ˻}  4aJihp.C:G,6TaJp:/A#kw !nj1J[01/:WT:XUPFdk2?m2yeʱcӎƱ Ew=Ȅ/^EINRdԪụ?])EhU N[p䷂sVݶn+VM8qE7/Mſ_{@Y ě86[ hv A9 .D7 @ 6gRd 2@&DbAd @б gsQv *Q|g6-<Edn/ W/r5cN*űjՔb#2_,/WxM 5 %b{+p>SKxpӌ*B*S7ʯڤ jXf۹y휷!Vo![UlNfp?FKHKҤx)SO)Wwe~.@t7b{}t^^ h=]}p=[c5 |At@Y ě'[ '&q- 6Y qc&=, 7Y"0FKh䛄FF6Fp'FKhFF6Fd.oy͖:e{)h識|.wyEN~˫Mw#6=WƷ|7/yyEh|ˋV_t}V}}2ݜ/氕ކ ɫd M,DM ?>}tpY Gp[outS^ G'pt\1؂\ûEίui^%Y`zTY0/9$盬1j\蟹qvr6rˢjReR}34拨xul1Nf:\MRO 禔J8AQ`{Y})KqV%w>zUz$Cpdi[fq$ Z5*TFy'z(z*J`SL4.:*W#x"ڃΒW{U Nkc/M&d6&5&1dMfc2oo&Ǧcql fdcqltl~s]Nn 2 "ܡ;^w*O/4)Bo=D ^{lwgsՒ{$8r׋M\UsY0W#u?U/Km.˞r/;Fxr8s̩3"C*#]dĦ+1 tA.L)]>xUddMb*ͅU3_B_ZkMWCch9f)Q6A /T#Z"mU,H I}T:p*bĎRHigGӬ,ĭG,-w^G)/FZ}I,+yh!Xh/+iցL_wNp fC\Zj]C3t0k${7 ZG5At!pkM\/]*J)%p.^_,T'} A|BSNMb;m+Ѓx.TnmptjuTuiNx=X#rWc*3nQ^TI!أcZ|kԓoGsҫG9:_`2id2&ӦlMfc2md2MƱiױ86o:6[&ؼl{u|Ge"‰hrGtZSqRJ'2(*EiJ<ƽ6#7Y.€z 9^jpe ) EӜRPJf1a)0dMlLfc2Yɘ̛&5 86YǦcql6Mֱ86m:6[^FlȄ/M"Ȇ/67&IIRlb蟫l)BUeK6sLseW_ؼh+VV@o&@N+ޠiA;zmΤ~"xA@ɚe~Y}TME~^V]z&Hd镒QBZ RBv t†\a9wU1NWPrK&nF/-"0j/Q>"oŻ Wq9E=VώmN)=eZ2SfslO))){]^l2̛w@#hE^A?" -j@,Zg,ۊ]5 `.m"A+,q6Y'Ve|Bhb6yJS^VͻdZ9ؼKhE^}}KhE^^ݷ<j eM7??_ݑ:/L^ԟ/PPM > ǻ.-Ny<ǻ=/8+> Wb8Kz2uEʯjVX>. 0<]pxB@˼I-'}Wփ0ƿ)~BWN ~(gTD LҦoɱ*кSЅEεUC>ڹڟcM-h\/I ^,R.2Q5KG ~`.Վ5wo/( 6ImH !ej- \j:R})Q3㐪.,'kDSSt t)j-vT1bo.kv}9 np}dk2?m2ieʱcӎƱyd&K*e;er)eL:Q ,ˋuGx%vRz9V yMu':;ip'mZ`u܄m+]t ЮMfIz ; ̈́AWY$4!~^rx$_e4V<&MgSCs:xHZ&1xHO1rC9J*9F&Jߡ0O."4~.:^|Z|=E4p@vwZ%H)?/KE<%`RxA.}h妍MGsow1qT^P?\*54"`i"()J{IlNN!ө`rvWO[BM.F0IPrM&>,-:2Ծ"VTRKepIѳxgYjRPIybLwMMfc2?:6ul~ڱ86/{nEJRt7IILUZ"tK6Jenr ] E,/\$cPCG/S7& ~e9uTI T_mAȴѱ,G7u;Eҧ:a03ġĬ8G>Y>tՆw ~Z c< pI&ą3I]<3Vu+O[Fk)Sw3ϒD!td$ bSs/ PtßN>Sq(DSceD-֦f i)u|:u8)KT;j<0'@qȫCJMBئBnUƛNI7s~taaj:)tA$ڸ))*Sp HqkG` 5@^@I}*^X_f^[:ߣ"W+B 1ii<<6Ĭ?rEZH*i4\+"oD\>y dUŻ|S&sʴ:]Pw.w]wnĦ#_gݼLO"?]}mv!] D' ea. 8" "];=fIHN2Fo5!4.S и&]>6>6s|l{)u>6ݽ]c#6=y_LOmvn⧫>_~{ [iwf|O?_A 蟇} )ӧ>ᤧ9pUc'L?jd5ʼnz7XT$󂱤~2/i,EʠLRba"J`GMIo|;wEQމ^B ި51?oB2 ewh*N]ֈ:/\ڦFn ŕnIn7k]UR(.⨸ǹD=倏n,iU*/:DLOwVf]E*bYiA0+ZJbia2ٚ ɘLd&17MOLشpl2ֱylcul6͛M8 ]Ę٣h/"s=Pu\sPQ 6+X6e|F[bLu8.dVOL;7/(Bjv.׽Q6T/IG::)NW&F"T0t^tF wu,RLܜؚh\1?C1f?;o7c_{g m\.7YӨ,gM,jӄ3#B3~0YP7l 2 ?SGM+)-EV]$l-Vjmӏ~EFB7h^E(#"VJU%;j*M?Īz]@sAnNfhK˕88ŰsuV2Ni|]V'>5`wp^8:i"jCN ㉠FȃWdy*Sی6%L&c2Yya2ɘLd2&f*/&dMƱ86[fش&|"| _d-&| _do/LE"&)^$)2IL"$)LRV՗)Eؔ"dK^"dJ6RM)BRߠ$*0泪 ĺ5-SJCN-r+tcD0wMp'J(~@+5>1Y/5uJPQ׼\5!ڈ3,2^SzT4B)MCgV4uNC\{2QυyZNV}`EKjASnG/##@$uh!m> "wAј)IJE/*XR""XHx+[Hj^cBo7M&k2idMƱyױ86o:6[&شc.Ke!Ӓ2}U|v%\NWN^Lj іT 9MF$ҢUDBR(CpTM' h+) \QQ5dE8IH]y_A*Ee &*vxJxU/99*)"#u?w\ 7 );7VG 0KrWu||a,Iɘ,NHb]_(/Hx)W->x5J/Y@GuRvA}ba"C(BR5 #8moS&1ɴ0dL&k2yd&N:6fؼpl2Ʊ:6MǦ7^DlȄ/L"Ȇ/66EĶIMUe$\eK6/[)E蟫hd^+]E[r쟯x7| ] ıit9y wgR͙Al 6@ 6@ 2&5Y"ti}ckWuj]kI_}DGx7i:dVЗd 0&⣌$MsHZw.6(-/ yX>wԣ J8Flkۜ2S&{ʼ8e2ɞ2SS&{KuiqW.ٻ.]O@?xE^A?" -j@,Zg,A]5 |"X}'p<"N.'hE%4"/ϳ1-˴;ld5l2iaj|y.lA?]>uyq+P>څi\A}_P8+ѱQPv0p_wlW1Qʸ/̿Jp %&Ϭ|~qگN*?.\uҸ] (,ʩr uR*rHMEzqɿV Ρδ)Ms6!mU"g\շH D+P/:֦CH;]^d^ )vTxaURL k-@4 4ĥ%7#C=(\MlLfk2/L&c2ٚLd4lMƱ:6-cqlƱiӱ: p3N4{=^ot11 "8y!d 7[vBI%"2t".. u/He{#=sC˯B'2O t*;S $iGwiPoT_@Pc x̂(}GH M!"Zno苔zF&4(̧vkezC—EieVd^d&d2&1lLMdؼpl6Mֱidcul2Mom-6|"| _lE&|feݭfE6IIR$ݬȖ"lJ,E4yY}kUfc//Y}m;Oڊ𵬾f؄/^]{ M h&ޜV, mO+AVΤ@gRd ZͤA|@Y DbAReyfx[): -hx"̗(q[ajvCxV(/)\D2f9 HEWGe_Vϭ/(=qvsǖh/xb~!r6̋SfslOLɜ2S&sʴyvʛ.L.wA]~u7%nUĦO"րf",*/ hvpKdlVקcs M`\ط%7m D+sE$NM6 6`ImX%n9lpn2uFIhf!4&Ǧ{cM>6muuMr7]~#'/&4"mB7}ۄU^~'4ne9_í1u9_a+a+#|oΗG+G@p6%?h킺Ko}۠@]~ Mo_q8ߠjrk2sjIt:lA-*izUIORmce]~nJUDL%qve0F2!C7z j@IP uY/~LJ)2 /:WaElk ?YűOs5vT%$hnZ<-bI%͐cUS"2VQ@UݐT:fH1L[dV<ʂZ= :m𸆽3urBQ^"I Ll%K*K_3LOd^rlcql^9\ xd%PH _Iܒ_PMFuUIt RӋ[qd*7v#t͖Ӯ=3K P`PUȚɳLny"T61lJbY>,L8Л P H߄,mq)yo 9*)DLz L͚ItVj]'@hE8̱T"+~3E޹1q< <"m#Z[dE[ρ8%ŞP opz ǵ#2sexPdatf"ԟ[Zh9acviC)7;T$*db<ٶ#Z+:P~գߥHHzګbg 5 S0ZSt>1pl#uc+qܠ345X4R[9hM_:N%yYag\"Z-rj#`r)!3df/?QezXNqɜ&_m)5V W()[ea<5Ym8eeʱc˷[cұK/vRdIJ&)v'?"o"J]"Ի7lxh-$!>ףMZLG:xm*R[!M wߗ0*IL]cG P6 86qqbzjVӆmF#6 e.5(uŊ|ܔ>H8,HR87#68b S#r|+aP<'MvT^Kbq4ƅdu&LMś,d4Y>Lv>I:{ӱ;8MǖvIJ|&Ȃ}9ILds6z%mM4\9u+8 ߘX9F9jX1ܻDM7j%9S/Ee!L'"z+8{JHG얜)^OOY}NYW.˷ ˫O#~;bψjev^^ h~y|Z}ɷNvpƖo+S HA u@l" u,}J ,q,dq±)=FcԳıtE ,GhԧF}HhTOhGhMNhԧFyHhOhTGhM|[![<[[7ثS֧>mwYe]^?*bӈ-ߎ+BG^eyyyEhˋKV_k5ܰUΗ|YUܰU71l]OMoApx H$@|Ap>}>ل}S֧>q+qdAlNCAMnd}j|du&cSo;8ǖc5 ,Jȩ>6c8E:`G35[5RKb5] -HN/uqs@=L i^h;˸40ԘD婵uO5:?S̩X?%0ma\B{7\hSunL1!.cհ3E[<\ δ͎=fѦ$ll)\nr[b>1MĔ_75v>m8wbV?>mF&+~s“M~!vh]n**etlxE btpE4u(#8l .*;WY 4+~}:jHf9~L =R.`B? \R*~zSt8IA}xO;[_a%2]Mi@mʠa>u0#tdSA_,OMod]rl}mغtEҧKą/YUIJ%)Y&E)"OKv)U)r\k sgbѩ Sj#Mhan*G12rޔ׬Gxk(ud2hBT8&{DI HQ."{Dή&RW.^y9+kyh!DxilN"72S[ߟ冊- אwqό\Q= 7Ĕup^;D,++>4b7*eA~QKjc ܪS߸%N"R6yf8edu&Mgl,du>I:{ӱ;:ǖMǶ$e&)2mrj-EWi\̶+5Iks^!$RA p3ʹ^y(l G'OJ6Pc.]7:v *RQBEtn: S#'lp-Ch+娦}jbp5 %ki'NX9MlNwCdaH#;./To=e);e].ӻ,߾+P.">툽?"*/Ӽ˫g^^T_oW_15>5 O yApX8!YX"cSz>Ǩgc&@<@Q!QyA >y CO<ܧMO=ܷ:e}zS^pS|ù?9 5"%r:݈/RGqJ/u2)Ki*(POQ TslkJv(븺}\_ZRD<~&XLir.bYeq{oLaDaz㪢1G3Kkr ;m@ |1~ӡS7 Z*0%aOiZbWйN S>|TWg'{[k[M_ k+| ř,dY,du&7Yɲiz9,[cwl]88[ccwlN|(sm|ȹJ6I y41O!RyH@]ߔc؀[+`xL^6[[*b]8%{AބPl!U a򅑪OM NnÃ-;)JS7Wv!"~RTmE>zac74CAl3E갏)rI:wj"i%:~tJot4Z4uE(Y~r^!*]Gk&xrj x --u:>`sA1<7ypݬdOUaףKVyG:?V6Ω`<#tFJPttsS,5X[u(1ݥ!<>x—KRHR⒔$%$%.IKRꓔ$%IJ>+EdQ+Eԗ"(Eĕ"J񥈺RD6K(EX&Xp"U{teqGDߨGh:U%M}CB,;3qd^^Ee9Hrֈ *ՋrZ--CGOGN(v(H2Ջݱh{b5Bk:lWzA/7@7UQ/G+@ C}|^o&p<%J;ebaTc\lhTz;ԎYWDl7xU1YSn+NiiSڝOBIjJ\ɠ(\4;~ex\CN3Yɲk8Lɻαuױ9hy|T8AH)96ryh/UQw񆼏]6% n_pm@m Y28d2BNzz:svԉ/orٮ4TUjL)Q>iJ֌Ĉ9͜PmwPXľ`RBnp #uR۩ 7WG]sTbts Dc+9v9n1$i-39 iΡhz^5N箸ȖJ#̢!\, řd]du&7Yɲix9.[cwlY88[ccc.|__—%>| _#|$%O/}X}OR꒔l&)IJ])O/yX}/Eԕ"YG)i׶ɫ]^V_vU[؛kY}k;| _ _8҇@6;XAڞVd5؝I- ymϤAI)$ @8 HR* K{EV,B'i0_lAeHG2~Me9Lrio9r^BZ)\mO$=1N"lZ) >?'"#Z. Hw"gZɨ4?-& Wĝ.NY)?eYSwOY)))o>uWw݅,}"؆W,YE=Yn",1ܪT_["Ї6¹#K HA: H&`Iĉm:j1,q,Yv9KB>$4ns8ud. иUGh%S-+>.muև|m?i%[ɫAN%4.y_Mh\EDŽ%O Ih-p=[U_carVqV][7GA)p6tp~BkABL1^|Ȉwy 5:8bfO8/k둧 h:|Ms7][3M5#^,"kFccȲ\AjDqTǽז+fZ~e֟zt 5FhTm3Gş*ȹN]CW֘ub.LVgxea8ՙdu&˦Mغplq-ޱe[cwlq-} f{:) τ)E1&~/ε݈aW#]⁧$n <%Q3+$T=G mP4l U~ӾZMHL9nRbSEm_ѷ wH۱ݦWgkþ80RTĽz'N ju@5p#ՍM=mUSVPTm~ &JY)Y/@J`A|ǭt># y9JO s9ǵ<!O!g2#tz2T|u젰gyXՠ{X+*[b%2Fp[B>Tj!XL%SI 0<5[D|O&Pt"Ԓ*TMw%[S^U2847gL:e b&>; qDQzo{&Olo\d)'mp9Nmb,Lgzua:ՙ,du&MVغplu-ޱe[cwlq-—.—>|"| _—.|fҏ咔,$>I"IKR⒔$%.Ifԕ"(Eԕ"KY"JuRD])"Rnx̼\P6|tإ=<(SzF8Uڨ"dS-) w"Tjlk<«4p( Cwv؝BuLqpSA'n&{;8&Q$nSZ42d,~1ءS'iB8M+Ri$>D\؛EL|87 Ec&'|8aS)6EtF'0)Kmj0r&eԏbb- ̍psTjzmӑM)]m6΋6!!n\X8}@'vߙ,d5Ydu&O[w[cSVزr&A 8` )X=25Өy~ ǻ9rvA9 `6ԃn 8|4~v0i!"l=4&<5T~`9뽎_9k(군= о7fi\j*KCM .Uc?8u8)ُfpu TLL"ox:ʘHn9w9}C͊Ble^ϨI}#B{_[b:R9>b;?4Aw͍8ʅ_|쿘, ř,d]dq&7Yɺi~[α;,[cslαuӱñ]ERć/Y/uK]ԅ/ _×$%O/}X}OR꒔l&)HR՗>ԗ"J,Eԗ"&//}X}m*8dc//}X}m;p𵬾aą/]M{ C hV ޝV, ymO+AVlΤ@>gR YΤO yA q@8 H> 8n܍QmUGZfkjO$['1MFԳՆ |2yԄ=gႲr1~j '65ه'nBI8qo*|_OQȕ4%mj9J'77ʘ 鵴H 0)ŝS);euŝl~&...SPwu?AM~",m~?͒EYU^l,y"í1&¹!Dpj҇@6)¹"X'!qbE EECz6@@V,]Ш NuFYr87KB>$4n3uuccˊK[]!{:.9yǖ|mr.Eh\!kи؏ Kvp|YΗꆭԗey8_LoAKO}@8 H@<'ܷ .>ymSuw%'m~BWPұ|k<1*ob_x#1\z_W1ù@ j_oԑqυSS"+$^ETt&3YwMVgl,du&MV[v[ccwlq--92b%X3)dxØܹı͓/.]?i"9ݭ TTG~OpWHhЙᅬ-m8.Xp3iJə8Lpb¾1c-dGbY$2u 'Y2;sFuwD.@ #b6߭H73I1j:ש;$,U:uTq2ț)sayeD3$P %Ms5|?f&{R㘏ԏ:_|7Y&3Yɲ0YLVo8ud&sl]8:زplqα;:ǖM—,—%>|"| _—%.|fҏ𵨾|RtU}$%.I鿮򥈸RDV՗/Eԕ"򯫾dd]+|b/ _߯V@MA;@lN+<$3)LA u@ u@: H~?'Sc{ގx4etq?}R99s\{.}x1%[qn̺WwnZS6 &-'6$m8 ?ٷlf|+”MDd@n"V exlOXctE1" Qv9(?Oh]'4&S7W/k]B.}tQ}p~,V?_a럟/H]&Fߟ/><ܧ@П)ܧsp삺8>مe\A߇ǔ`?Cv!JDE*+E;~nky5/w_[erV=`z^@ Cd"(;|`BiL .s(|*L^'P3hԯp;߈|cѐDJ"$׮t7x7ߡTIP7C>,5xזH7![>nYL0Mdn3M˔CyjG@JfJL*/4YO6Q!dL֥ ǖ-vluK5o*sZ NpbHE㎗_/$qH(s;)42Wc0CTm+wF i 3uy!">M98R=zj[2и6T Dƻ׃ɨ 1y 9nas o;5PЊyOrE5Pvb>%"kp@7"F0 K_̋|Bw3)%pq?#4~Kn_a,BHŒRBj%8t8԰sAGLSJ G[=rlOi>U}6>wC)b)ކCKR%Zp(j|X?}_bXWrpIFtT[nr? 脸Zc6hy{:K?|6˹y;\@Т)8j?7$p S3hPzRbmBEctA괨 B1MAkW7-{|Yaf~5dK xdu) M9dL֕+ǖ-vlq-+^/}K]eZ$)}IJ\UZ"o"J]"00p wpePMBQQMnTx;B6^2K@8S@ Cihy3Zﶝ$ 0Y4g"wwOrTvR҂E͕b Y#{ mՙ,?a?:>ulcslY9*|%_—."I$NRҧ|՗>-8/i[n+~y×%K\^} űAB u@ ?RLJ: H$$o9mӡ6`fRsCj ,w /]7\00JaӁ l %?J3$G9j(7ouyp|mG~>&UNo'59^w2H/$hH3~9m-Cl)Ls~QmO1π;MOY~՝Nyݾ,.݄#|;br>YoW_,Mso&)]Sec.@@~;qbE E,q,M:Br8_GhL]qFe#4o'4u--:><=e)r><%4nGlv}~;/ovp՗~e?l7laad] H@8 Hp8Ov>qp>yzSp`6 8wm(l3 ckZ= @Kg<8~9_~dde^0jHTcߌ ʢ ƢrbN#`)^c(|̻^VwV1ZېX,*\1m̅Hr= _4W7fMU@ 1cN1_hnok :å:%|"Q.N9l,)[,8mC#Hqՙ*qÎv- `=Ѷ>4cZ{P2ϠOȴfad[9A3ڔ^(=5eijW\19^ \Kz'L֧&MVgL^9>ulcsl]9*|%_—."I$NR⒔Ԫѧ~WȪ9 Ʋb$Qn J>A]T"x6T171ΥT*cpAC$=d85;~|f掳"lQ'GGS-r21i=D[)$~0~P~cabÃ|jep,a.H74e"Eg[A&]j3E0/kCF--ȥ9!]Pe* hșa B#RxiMQ O9c&D!ro‘)T{ĸ %7Yɺk8Lɻ-αuױ9>ulq+&NӉZSߥkȕ.S0[)C680x +L]&jrQM o~'`~#+f'J5S#18a]lp㌌RZ@o|hPc֍.{w'r#λLWS.d>E)QJ1fNAw_wSKp!)ǷK莚|{:A݃ǐoc*R[tdo$&0DfvɓQu^ȐeȝC܀:,}Fd =xb!\ю3Y6Yɺ2yԱێ-αuث%O×~;| _ _$%O~;IK"RW_om~՗_—/uK{ctV u@N+ALJ3)q@ u@8 HV@: H^d|8:ƹlc6cMpD~va,JZnl9!O"|I1bM["ڤvp8{a\<`#t91yb*sB&{R|\t|v| >#_ jI _|W_ѭlKpcØ,B;+F8ߔB_pK|M yw#9V~)OY)7A,߾.AM~;b#/gӼ˿E O/v"E8klvl" E8AM8Ա'vYX"P"Np#4.SQuFGh]8B~B&[[vcSo/cӻ߾ {и{KhmW_ϗUܰUvꆭ/S&oϗw u@A }>݅})˷O}épn}L('bE9ߛz+Es-#VqYgj";QCiȬMqGt&χg]PY+ N|[D>dT-Z ʩ^N=PY,Q@ĵ\U!XѰRD4ʼnַ "醦ktNP4e^ ۫p;M%I:q{/˱Y>ybI0rR*j+qo혻ԏ[K^Хڲ!?$P*es73Y6Yɲ4yԱێαeؗJ[r؀sCàbmØ((!=!-ģuNC| GYO*&ixF3v mB Oښ25Ym:ei±c˷[cO8?/}K]eZ$)}IJ]ҟHRXRD]+EdYPϫ1{/ÉhRf˼(POA?Y+J]{>HdG%g[Z*8ti\*TMzhK5(eksAٖ$=Vn٣ 66 op_In|ݓNbHmJFYo| d!'Mbw*FhC1L 뾐~c#"ڢs-ihb4{as鞧F +qMNvkv˱)I0P/ձ[+TΡn.VJm@L4Yɲk:Lɛ-αeױ9z-+⽌W)ZtnW ~Zeĕ tM|*_p? i|ڹuS,%#E%c¢YW #$AEVy8>i&P5)~NUgs,OOY}NY ne]Vw'ti^o_"Ч՗|f"5|އ6Nu@" @.@@wYX,u,ecor8uéШ:Bg#4.SWQ;q--|lq|l)O]om>.q;b#"4nev^fᶫ/v~*nتVqV͗m˻@8 Hv q@>up}>}ۧ>yos8ᾥ[DߏPUnk)h*aj x]µb}̋wUc2N#wmIKKe=\]\P)c.E`y3gWsT…|SucEx0]3Kf+8c9;lVsmfQ"# "_K,:=׏Yb궰S:𖁸#KjoC|#zٚd]d&du&3YLM&űu[c±9:[7[cY/90vS)h˜d#Q;bP:7zL3ms:Ԟ,I4֫)RP? v>p tԺ9JxG2 P!:5L=2l& (gIM{fpd'1\V|?8b8_ ƕFJaCN ܅d~Αk ~7Fj}sPcL|ᘊT*8?6a񕲉[.·I14 gl#EsцJm60R[.LLZS n_;TӜ'k+sS_t|!)JwD9JQLPrΰRm@Իj.& zyf#oRg8*~*a=u 3s)qv#)j1k:mlwʆf`xí3E xNtL<sJ1Y&3Yɲ0YLo8ud&slY8:غplq-α;:MV—.—%>|"| _—%.|fҏ咔.$%>I"IKR⒔$%.Ifҏ$JY"J.JqRD|)RD|)8R;b@Ἁ<%~am'*7/F1?xYGJgNar֬+ _a^<sI ;y9X<YMrdÆ^[7N$VO׹S2'én8snnPs UUuwp$O$؝[rVw"xH@T%úTNQKS0ꁚ_VĆm7p cDfz^@i,og%WI߾KN<ưR3ǹ&(mIMǜ/du&LMśd4Y`_[cˮcsltl-αuӱ;6G|Ϡa$^`Uka~KPC 3Q -;ֵ]ZW8kQG] !898EO5%tMcV&$gpӄ@*p65)[ Kɨ 1g6IrsT"*j DRkyؠ )M. __H? F3 )~4| +1u ^PcRY;:eùs4٣ kC(wchsgsVbgea8ś ՙ,d&3Y7Mc±9zօcslu-ޱ9n:~8 __—%.| _×K?עIJ\U哔$%˗"JYU_Wȿ]uQpL՗:.ڊcKw×d3| ű=8dwZ ݜVy HwgR͙ԟA ]A q@v PǵZym2R@J{:* pͱIKcwS\{_[.5l kݵ"!Zf#IPq..32i/I)zX!ȹEyKweqNY)ŝSVNY6OY?NeY%ueuwY6~ B+ϳdw@ytQ}pEtEB8 E8=$qBwY8,@XctE1">=fEh]'4&u >gΏ?]ڪ.NyE[|l%'.cx_KhE^k]B,}vj,c8YT_1ܟ/ϗus˺;Rׅɫo//><'@П)ܧsp삺8>مu\A߇~gb=ujJ__mPJ|| 䏸 }BcnrO|S*dS@z;|=DC#aog?-I  aiUdb\""m|z[8WnCډU%g 1j oSSc 7i?fu-5GG:E郝ݔtP.-Lzi\od\HпU=y\S>|}5Qח[X1Y&3Yɲ0YLo:ed09,[cwlY88V[c˦ccs0~ [#NY{JK2vn*G@սoҩr\fyg(ѭ|+?KϜ<#(S7 }JC҈3gPة]9g!/G΢a)N8rD( b=!S)T xwq.Y42\>%rqz\ɉmP=S6`N׃Oq1,)bRvx~FpQ*ANMyU=hW6BgV!Xd%XPO9%$k!5|C:~C8x[;p<1WqT0]q:NuXޤ{&8rL8Q90XJ5g`l3A\؇i]}9P1 p=LȉR09ݧ?٦^\  Qiq4ij1}6b3)㣴j#̭{؊?.,+ $5 33o 8kv9_LLVo,LVg8ś,d4Y?Lv- V[-α9xغKEć/]/uK]Rԅ/ _\E')Y$)uIJ]R%)LR\)"RD\)E)W/Eԕ"YG)i2#4ĿL>ebirIR(Gyۼn2a JWюԆtjNG&dpdsS*фl59wc.iٚEBF?vl9Bb77Ip<ڞnJ !K[P#h0`8L6)9HdЏfBpg^O&ʖ*sHFLvۏ }ϔex*o2O ^V}`KDUk9VpT1I+端㧪/iH^H|y] &ڟ};h/-m˙%Lgxř&7YceuޱuVű9g[6[c"—%.| _ _#|b_KV_ؗ$%IJ|RWKV_Kqn"K]՗pD!msUc?F8@<Nq@]8!,u,,%=FcYX,-{Ihԇm8B8׊Ш L]qFY2uklu|l];[iSh|ly&'9yи}C6q>}&4qw /nU}h wWey8_rغ[p=R_1R~ihCoR qp7hVpWR*ܝ7yT896 ZEfh8sŃXOMod ѱc˷[cұ*%7.5~b͒ܢ & DW97Nek}"͔#@L15b-[s#]F&hKdPz&q0jxΐ6B(]?ШTe Kɴko.+ۯoP a nSl 0O~Ǭ:8 c{![hP0؆2L]RwyPNT)D_̅C2wP&r[ng;\u'v&p4jgrL!'4<KG;ex,WJOMwɅ2%MٞC}l]r6ڥ~aT,>-cSK3)ݔĀuo.-u:2sh6cϙ,OMod]plymVزtEKԅ/YEҧIJ%)Y&E)"OKv)"e)BA-Oy< m`jWpyH/!,Sx*)WH޸9~}Q)#RR2'@ 3|sl,PE﷤y5= 6L`"uSʸ5. ~%nexZhM6Yo"z0xP)o7&#ӗbd/ /!;80!ϣ"VTXi!YY4\LppT˻8ڬ> m-kyb39ՙ&3Y6MVo8ud09:]Vغ[ccc6A.VՕw#u^pHdL+ǖvlu-+^/}K]UZ%)yIJ\UZ"o"JY"SseGj+i[n+VV _҇՗.|fA҇@z H$8x H$O yA9P)$ @8 H7gR u@>!RA  _&:f[!#_)m%H@k`oJmY \eomc\8Yo/7[&׹$T,g<8:W*\j'arT̊ȘFqqE츿1>EVbŗkQql1Jv>3R)JIS>eu,?qx]oy[Flv^A{i^oՀ3///}Z}鷫N~"[{p~ } C H=$MS> " yHP"P"Mz:@: H7 @8O}dSNY~WN9ép{G[tkS}-ɢeELtOzInk'\ͱj CwFT]Ѣ((~3Di~T$˭9z9lr<CUx{[NyFC?+( ӚE6"Zn$9F.%,Hik=Nhr&YZ$|ɃE|CKuȯ W1PmBlөug53ZډÆՍo˼ȘZ>~dyj~du&cSǖo;8֕cVAԚ.qdr$_nm"Bu6r$EL7>vM!6uDĒ,i?Nk&W,+ȁ#]|iH+p#,xa.WCϠgD6:*#AR淄#yRo^X>a/]s%̨H󔑲"(޼gPёgs\ \WlȰS<k0IPbo=u=N.hΊnSc%h62 z!%ד7xZ6ܿ|LX֢*;qk(SI# нF7D/CGFÔ݂JT(L hpuN-M]vt Ŏ9r7%"RrjN6=S#8`b0CCᱣ^mnr =Cbh$ Jhql|+[RŻ-y(eb'WϠ`weKN@ w[XJ#>!rIfR}菞=ό(1bU>ZMǜA!bl(I(q*)QE -3m;u&%ZD`@M"jA۰.n)eH Ld ߯Y@|hCAP32(5B6ʼnh8I[\1IAlj,C๧)Z7 (5$&jxPqmq 6q(iL]ř&7Yɺix9:]Vز[c˦cciU<#glJwd&="RhC&<"S?>8D8 :<߈!-;%!4s&FZo6SxbBVY+!c9˥(TP3 < $`ZЃqyT$ kÿ3g۫ԸS9GdSwF8{GaOpBS&&mPlmHKȕ ˜T7ÂUtCl7$0ថ#o#4%eonh>5Ym:ei±c˷[cұK/vdIJ&)vRdV>-EۥRDǂSse l+i[!n+VV _҇՗%.|f } C H<M[>plS HA u@nN+A y C H=$͙~̤O }A q@8 H<ts#: ̒Z{7)HY8zR_ǛlbS)kѬS%v h82 hZJxjeUZA:787 ʟWI'g\ru%c9Qo/G?p2!(n4IZ+xdTX'j :Ǐ<Y^=)SoS)<u?"bӈ-ߎ+#b<|EO/v}V_[{p~ y C H<MS=E O8E E,q/,}Jч,u,dX!4SB<$4'4#4&S>8ШO (ШШL]`:>>cC>x>8>nW,OOY}+)>"'.c֧[Wψ4/W՗}>ل}S>?u)O9m \#;7Bñ _"x!:}tvSRKa^XGq6j O|KA|!>O؄e:TAfb|4QePbLe>#2Dɧar,|^pATeja{}5u[gTCCA|Ox;oR([.Q U}+f9h狀-lj %-^OƛBFb;֠"EGe1S9\R,/<эEPSMFX|_E^ &S&3YW&[:|۱95{1?ᵚpҁSp=<}0MGk3z$\Ύn(v.9϶} -PGmc"OAlD֝>l{I B= H⡖ԦzCt Х>snem~~ש_ZHD,!NKZtWGDjkQ9t*vʽ#E<Bg&N 9rNj1gRȊ^,1k4:Fd TCnf1,]|1A6$T #6Ⱦ OX&+'\Vj)a'N`;#\kְ/DCKA9A{%.JMK.ҙ?OYS1j^ op_KC ,yanBMT8űR럝+V{fۛfnU'trb)U l L֧&˷Mg.M^8>ulcsl %O×|;| _ _$%O~;IKRLRRD"RD\)"RSK[0) J4%wsΩpP5[⛐(ZTxFܱbE;jRbGޭ3D&1ogCKyd.hh B#'D1XJM=-Bt@PZ~;eڔK#5'u84oC|q 7Zg8#)X}C1S%7$]w+NfVIԊS&qɈ8D?ޔO<ɥ+M>$/n6M|="Ġk9 4>Sp(?g:udu&Sՙ,+w[cˮcsly[]8R|W" 4ϣH:a͆ EBʸZp瓯&@ӍXJ cj >ƪTPiJ[P6w 7m! #h㍃ϷJa8 Nvw+ꙅ8bnqv(&&7,Û#%Ҡ RFWo 7| _ą/.][$: O+A;P3)u@ΤAA YA q@v mww $O R2Ƌ-G4s|1{#C9<_"j皰71rI/̳̇%UmUvs ފO&翧vF8a'Wa -]?D巚 G #*zS>eqSu~.˺˛vĖoG_"yY9@V_kEpnNq@" @&@@wYX,q,ecor8eéШ:Bg#4.SWQ~;q-|lq|l)˷O]om>.q;b#"4nev^fᶫ/v~*n*VqV͗m˻@8 Hw q@>up}>}ۧ>}os8s-ߎZϥ9Kz~/(%R6&??XCuN&6g>uþ}¤!t-˼H} L)fԗpx%!5|} 2%0":ڠzz⍝m.ڙnͼؕ9vb}V ԸHA#o 񅍽tݑ'#hw>)4kG)C6tZ*- buBB׏ `y4spxaQcJ>NKʛ\lQ.a#W4@D\dL ǖvlq+Ǧ [n+~:OpB%ON6RfrՍ^>q &7T!Q[qJ5mMB&gbr ? ;s9cup_%sჅ"-0IdtJ7إ؆TT:9{9j؋$މP/NmcwXPX֜[o78.eNi) ԟ2)-21p^}FξN8إ8A " VAw^ʠH !Z,UЊְ@JNVC*=T2hG #XUG:n]Hu}X*@pi9;zƪ^KRf͂зig4N)6i[dQs4nh<5Ym:eeʱc[cұK/vRtVIJ&)vtV>-EۥRDWqx!E-+|2yq?*@.;5S1I#ZÍf2}t YJ犘\c}[/j)Xo60!l=G)Qx#FP #C|ʺ~zL$q K*ΑS=v.Hl|CS32p˗Xt?U!7Nr7{%@8IO>ԽY ZI_}NIPdQje8`c:b?޽e75rY0[ߙd5Ydu&O[w[cSزrl馽NDo E SB$XpچEtLǻ3G"($y|8(pc4Y6Yɲ2yԱێ-αe؋%O×~;| _ _$%O|;IK"RW_om|՗_—/qK~{cd q@N+ALJ$3)q@ u@8 HV@8 H$bs8}G$;߈5KC5$H ~^]7"ƶ檎@:KqI2DAh˷ _x s 7jtWF@m $V7:.ysͽ]j7v|%ͽ|)n `  xqNY|ŝ,Oyݾ,.݄#|;br<=e)r><%4nGlv}m|;/6p՗|e?l7laad] H@8 Hp8Ow>up>yzSp>pʷ9pߪBEt n\^t}jFEwۿ8|n LIJqW"lI= !*9Gs ;%įʁ p"%RPKj ϧMApx.O?0 +dƫnMMZZue^IM $8`9+upMR/&3YwMgndu&˦asluαeӱ;:ǖMd126u؏Q`ێ0zW!J5r9OI$c#VD9KL.y[FͶ?&j44$.>_ o'|mjdi<9pύTlg8m4PidHe*6x/z o7g;$5>#<㐯9u"bV0ܚStM}KI~Rt.s+~ LJLTT9|r&%*9ZOB4"KL?/uכ\ Y/_LօLVo.Lg8՛,d4Y[α;.[cslαeӱñ]Eԇ/Y/uK\ԅ/ _O՗OR⒔/%)U_QW򥈸RDu՗,se򟯾dױuVW_|% ]Acy Hwişdw& ݜIy H$$oHPzq=N6,ܯ2>_"J$'!Ϲ){ظDɗFv\y#iE%_ϖ%nЊ፬en'%_j FƹE 77~+ANWulsE}+R8OA,D[ڋR얋~ʺ8euuqNY)?eqe]%ueuwY6.#@v{YDtY;E^^ h<@wpVc"X@pʢ^!߇V@"M7A pU$s/y=[9z5@B8!˷krτ{*oF~42 ԩL ~r1/T$Pcwb)qriB:wVGn 4U7ř ř,d]du&7Yɲix9,[cwlY8:[ccwsh?`HZczC,D2 k\2zcj44à-Tc_K V&otUڝ1>X ,V085ܦR_hqףŽ(M-:#ziω9F`]cO9I9dJNՎz|D T e/NnBKg8.ܴ:T۬i/x _Pq&S)4$VG񈇅D8WN=DGF3ɭ6_r@Oҭr)JrN'ˑ)胋qI5)Vf 'o2aSB%"45(lNElQc'6eI.3J3mM3mEJfP(K*^IJp_nYZ-IL:>ᣰmjbpz7#lgDT94Yi}4 4:řd]du&7Yɲi~[-α;,[cslαeӱ;.|__—>| _#|$$.IORHR꒔$>IKR#IRDRD|)RD])"Q_+Et_P,RDzieo8~]$%3R7sxc^Lpـ3j 8!2,(%F{{GXwFq$L#㡸pVAs=rzJx!+F{<ˏ0 AÆԘ֝6er$gRıcj3P@I i4PzXdϐaLIlῪ-¸Qgމ3_LօLVo.LVg8śd4Y[-α;,[cslαeӱ;.|__—>| _#|-/%)]U_>IKR򯫾|)"UKq/5Y?_}cˢX9t7|K7o@MA;@nN+<$3)LA u@ q@8 H7rMc OcfE x#ZcWsrjFrB|Wl3l8+V*pB RfKR/KzJw-j. ~NO87=#+o.äS);eSwNY);eqbE]&Qv9Ш?Oh]'4&S7/?t("4J,zШ"4vb,c8]T_1ܟ/ϗes˲;Rׅɫ+Ov &>y '.NyyOv{]p8Wo^+3>hǫOb(Dp.3R'R=roD, 6R_<4Y6Yɲ2yԱێαuؙ&"v٠N.Q؟Nt_VHtڻI%xĬ]YDԷV(c3 5YP3ӈxҔ M7TL\^M+H#$W*5c[I/xK~!FƄ+3s3EnMJ@0;vn|n8Vd+[q$#E#2,$.N`z=e+p"&71AX}X JLUKռqa~N ac GD_9"/s6Oפ~7(.SHvSc4oJ/[<{TܐS %R>`]1Lx>o3q*Q5ee6m*}ظ Dhhwe)5PSF'z=dJ<&C8+K3t1( 7kbN/(Hed1£!P8wes-DSE)mP-)11bɇ"B:ksSр߸M"dyζO`\im<5Ym:eeʱc˷[cʱWK/vdVIJ&)vtV<-EۥRDVqyt4$D8wxNsi>"eLc9M&nN/ %AҥP1!7gx-E$[LT5KjUt#B+Sm_r0 \D8p!(F+_G{Oph#'3%TȈ2̪&L!VsILN16nM(eHva%V2 !Ѝ Hi%M'C`P(>WU>TCI(!&3YwMg<5Yɲ2yױ9:8֧-αuHJi?n(=B6| 7 :iO'KiѩNSy::v_9IHrC*2ߛ粥0yj,X?]F^mw)BVڤ nȩ ek|/m',/{Jm9X͹:zbLH,S OOڥ2Wx& ;S(Vj8v}ϝ^ 7UoKsSy+{s8~ig(Td3PsQMYÚIJW96Y,6Yɲ2yԱێαuثO×~;| _ _$O|;IK"RW_oҧm|՗_—/qKcdV q@N+ALJ3)u@ q@8 HW@: H:q„K;9ZSFqo6=YpG~߅p[|+QRﴈӔp!@Im3"+8bNsxqHiئ |"2a1@d$:qZmw!W,rRDIuchL/ ?FNDNY~՝Nyݾ,.݄#|;br>=e)r><%4nGlv}|;/6p՗~e?l7laadM H$@: Hp:Ov>qp>}zSp(ِ'QS,m2\oמ)Ny ?\ڝy- I $K Gȁ8NYEv>QfXLd܏mzSg3L%ir[qc*,6HQ+)ǀrx3 P#t`K(uPmB&~HH:nHHmV\/A|MZ<%##̆N9q*pX{R7@RR g1[?x7ѳ/-̹΋jdL+ǖ-vlu+>Sף['E}*?OC3m{|}dN+/XL6E|N+Skxfsz ~%_sI0!=oFMb#%)PNK~!k`?c4M |@f& g7BSd&xW6GDQZA_X)4ڔ@a&' o$" °VTz홣 ZͰøe3_\{C *ӊdl?㧈W$p(t*R/0v͋fW#^K>7=d?\MdRi>TmBDdbd0i.=DL?0nb(V\T"fȉU2M ևgU8G3JwL֧&MVgL^9>ulcsl]9*|_—*I$%NR꒔Ԫ~QWȪYA4 HQbˆ1]W}Pk8qrM#R^ƻ$xsy;ˈ&){2I5{ؤ\؇mA9gtp"#W8ĹyoExF/BR9%`olU;Zp^߾qs4##;%t5[rMޠ9>eFh{Z>^ӊ>eq,Su~.˲˻voG_"ЧyY9@V_kEpn{"E8ApA,q,eco'NԱtEEGh]8B+ШL]qFM>:>_ǖ,>_֧wY}؛툭ߎۼ]Bv^omvnoW_|쇭↭;l7l|Y,6y{ dR.''OOY}ʿӧN6s[M00}~ C$r;(7(1 v.u86m3ճ {%~we=Î_a rt"qt]`׽X!DKlM4O<=9J\B;ۛb5s;j(J9ҏ9a@aAea{ŝ &3c DӒJq pS}yTua:ś, ՙ,d&3Y7Mc±9xǖcslu-ޱ9n:|86u( /6E3$flh/f6o(httS:P5@M[m` #oʇfDqmݤEqf͞)7-$̻]:h!=K)\qJV1S =e:J)8mpy269U5LHל?Rr~0{wn:lw:*Q TP٤fr.xVu#KQ8ޥFs)N`T3я~{99BJyR} a1SH݄Z4QʣHpT$)~HsL5pZF O5-{B M6AD/ "抩ER<"L}c\Rlį*)Rm GSo2;gų=5$Ce*jtp,F4w0^>Ҙ vZ2 )vupʛj|7Y&3Yɺ0YLVo:ud09,[cwl]88[c˦c/KK]dą/qK}d3|GrIJIJ\Rt%)uIJ}d3IORJ]"J,JuRD|)RD>JgRV[䳴 Ӯ ){"&(΢=P;_.㤓uR$99Kxn¯#[#7ِS(q(!݀$hZE'qIHfD-r+ǼDqFGGf+e)=\:%2vB\Ƶ5;TQ8.z'(>:1Yɺk8ed&3Y6Mcsluluޱ9l:x>;#X5USmq2`[:q>ro7H!ԷQb* ^nDŽC~mFNxFI wa5kΗ[^ZU`uO_WŊ/<,UpjmJℙmdNjjJ7\%'QrPp{~C:aalSnj)8t᭽Tl ,j;X4<Ӝf)r%{{Fq;rS FMp((Z'3-p2'L<7wZ0~ mLb\[f.LVgxea8ř,du&˦زplqޱu[cwlu--?p쿄/Y/qK}Eą/K]%kQ}$.IɪIJ]]Ku/_+E_W}ɮɲ(8W&Kv[mʱ|%W__} ű=8dwZ ٜVy HwgR͙ԟA YA q@v Lԧm,@>Fo(պ/Ǚ [u|P\p+yWrh?*Njw} 8RSlfjn0)z]@: Fv)ŝS);eqŝnSVwuq, eټ.X "b?",j@Y;E}EdEB8 E8=qBvY8!,'Vexzn~ = FpyB2u=Q7и`U]زKN]^^tШ"4~b.QyyEh |YwpVc??_a/ϗew. W#0_^} yO7?SO>uuq+P} ˂ùQ"3|NղH(=|=1솂P weܛ˯#<]ǁpeūy,df8cmd 88Bwr[2J/siU_4uN9&KH"d_Μntȓx[ivZ1RNA#8_ IQxrWpS--pj41.ak얨2ɀ\ ."ʒ}Q@,LVK[Z^F5̳F gdL+ǖ-vlq-K&W΁N SY>E(QW0 i5gpTոLxӐ#ƻaxd k~S= c2pzv2Jd,󥡣R|~3QFAkbX[T>a>ޏ9GoGV73x(jhu sZ1y;oΩt{EJ0_crY=ZA͢o?y?]΍0!TfwPUvS _/E jM֧&Mg,M^8>ulcsl]9*|_—*I$%NR⒔DRD"RD\)RdVPnno _klxu)T^ǤulʁDcS %\I >r wfn'"Z  Xad2!(P=&Nÿ-o XFW5<u^篦Hƻ,/q 9PشJR)7щaV2N47kpvE$#{) #Nی~kHv6.rLR jm87>p!K9NUё`[N87hNp?raA;-%s=O"OMod]ľ:~۱9ccҧKą/OIJ&)v՗<-Eۥ/i).8y%O v[˫/ԅ/ _—kV. ݝV_: HvgR A q@ q@8 H?Р$>D̗ǔ'7~4I|MUMdςys<$"6!yupI岒8FʋuF}G56Bs9HFIϼ!u69uͰ7qR0k%=mh͙[6`#Rs;=t22~WiSoS)wY}e]]~;b#/gӼ,˿EO/v"E8klv_A;8 HvNu@v hE E,q,ĉM:Աcv9TGh3uu(и]>8>ۧ.6{и{KhmW_ϗUݰUw↭/S&ϗ7 q@A }>م})˷O})p}+0z\NjrwJ_znM>Rd[ WoAYQه鈕EjWᯊ;XQӿyRZSn[qn(ʸ6fJr[@vݜKh|޴\@!^0Yak*H\8v+EИUBb~;hؗEX4ϣKpfQ,!Df22&OLo,LVg:՛d4Y?L^_9[-α9xغ{)~4* ٍnQa2 /")*U0 i7$ Ƒ'aL0[eQwZhumuo@ |j !jИ^{E|N~̶ 3XwhG^GpS= xSyU=bbvȕG+~Nm@yr)d4R,(%ܦ&< k-fRH*G Szus/e!bRWoNp6. ~1@c~@)3͗Y(cNZ"=:kqCQb5oZMbGhiBu DUޟጢoc92l)wkS]+P<C) zQ \]HͼOnxğ\LVgzua:ՙdq&MVغplu-ޱe[cwlq-'—>|"| _—%.|f~oŏ$%>I"IKR⒔$%.If$sRD})RD\)"Q_+EdRd%q_`ĚcDW.qJ}RY- n{SfA)幪#' N9x: j23"2{=bV"H@:ފVc%|22q,0Tvw>d#M!EU=/Bg8~nɌ7܇ m *J\bsƻtI>z72>rP8~xPr|-?ӝC5Fc:$QnǛWPBzJS@yXVDX߯g@ 9V1wGG=@6D$n8hG)U[;K-ih{+:1>=\pPn~W!;#gF#b 2_*:XLkĴ4w&w^ itWLLvSL.da,kB69S#&QCrձ5["/ǖ tne6u&8 7܂!kswFkw_LVo.LVg:śd4Y˵;α9zǖcslu-ޱ9l:~8jk _—%%.| _×%K|ZU_>IKR|R_W}RD\)"˗"JU_k. Ε]ǖE[r?_}nڝkrb-A;X`9@Τ<3?AA @jCОSJ"2iT8m*062J#8%?BŃ(#& 2:ފ5(M8"\v3`.){p`eؿp hA]'N&',p,@Yp~pyB2u=Q6'4.Kާ|lc.mUy>uqW^t("4~b.QyyEh>o(mw k5el[|YvG0y5R|ytX` yO}?.S^]^t}'plmk;tJy;6FGs/ݐ~;re8-K~ !|҆<ܑ'eX2jpVΝ&$ fB+0΅m9;5mFfgѣVw5vIa0 , ^+];Y>?hR6 cH"pPBӫX,?NUԐS#Kl(b/&dq&7Y&3YMVgl,&;ǖcsl [csltlM#rU`#G#ϑ{0jSDLm2zQSi|C%'0yλey@$y7&j{U\dDbM&S#+7542% r\nQx"<~T nLv V[-α9zز[\Eć/]/uK\ą/ _×$$%.IORHR꒔$%>IKR')q,JuRDRD\)Wf)"w}rP## `Q_S͆cj[yD綒FU"SN.@MP,3'?q35Spca')Ubl|pJ&8 i!fW_g&37wQ&gJpBqCGH4xVjm ~?dq&L֧&3YW&:8ǖ]VԱ9;=s/p"sΖ,2jӥ1jU$=q2w0缥SlLM=ָ݀-Őud=$mHz| ao9s v#;/}cwAod<~ RDoMrpQE}(3]6T|LICǯ_{j-fq| _ԇ/qIJV_%)LR\)O/yX}/Eԕ"YJ-՗{V|8nZV__—.!ctcoN+@< iLj C h{&%LJ$O }A q@: H<Ĉ?r*&7d*5[]^vs`IÊ-+\e Ϳ؈ ]Ss%1U7jE0r~|!ٮ[a 0RJI>6Z i YT^RǗf ,)( ʝ,NY)?eYSVwOY))?]PW]]PW]֧.EY*b@%@4n"Ї,1ܪ"K@B~p. ym# ]!,%qB'YXYKz6muu?n|ly&'[%K иdCv6q? c|YΗpGcarVuV] [wGA)Ӈp6tp~B|/ 1vZ;rT(ۏ%(! Ön:J 4h-an8|1"YK JFb|m+^;~2 54_盭!xJ3Ι"R.H>$D˹ފr(/ܛ'Fm VC,Ro#ቸ5M $^,Z+p$F ~]ėg:DpP=5zZd&Oc Ո Pi9)5a2KZ6d@bgOջ;( bbP^dyj|dq&cSo;:ǖc_ˁM?[z]J*n5pp>%ε6 OML<{p?*"YY<({Ԃ-l MydZQ `f ~7W,[;)͓9l@Zf|mFcs0 G#oCGMEA /q GF76NꫝE*r-b 3Ygth+dyX^HX꽓br 52(D g99]EE/SY7\Bx;vZ=ؼ3Bi3JH#MHS(ƨV˰Ib=ÞQYtEX"w9dL ֧-vlu-+^/}K]ҟ_io')uIJIjQRD]+EdUzSл8Enf:6>!apߠێqp.Q5ҝ% [N kS'.M3eX|Af}挊އa.{~-GhS 0nR19@8)WT`8sF=7=:O3?Fpӑq~ۂXpxɪ~8*o6\AhIdz@x;wѕPS"ڊa`OW%ەyad0o 318|0{I`dc Ü$v2v±RG4fCmƁ.n:udq&˦MVgndq-αeױ9n:zVزz ~ޚ@SF:޸u65G>oJH̢ GI?*CxHVOMxhcՔ@#2G~2^ q1gdxPHU_D}:wE9̻GnaFx/cIs)t.V^y 2LmM1pOpe'@aAbݞ): "#Eꫦfx{ep>l8Ίp#PR i5ztψ,&/(XNV?g>5Ym:ui±c˷[cұK/vR'?&)}IJ\UZ"o"J]"Ssegh+i[n+VV _҇՗%.|fA@x H8x H$O }A9)$ @: H6gR1r@>!RA @rqh0]RKf R ̈:kAoȌK >)p!A nxK|e;+BjS,$̤T gg8g;ڑv˼w~Cd‑՗|Z>U-OklvB8?klS HA q@n"/,yJЇ ,q,dgcSz>Ǩgc&@>X(O ШШ(Np:B>%4CBzB8Bn2u僩-غ^<=e)h.qW[Flv^?#"/Ӽ+BG^^U_oW_1Gn*Op,~*nتV֕dɫҧp<A A>y CO='MO=ܷ:e}zS^pS|ù?8K)O^%Ur4nn,7V/槿ŸCGN0tB?1ߵ aBG(Ha,~@9P='嫮q\à*sJn3( Zkm>L#VjK,}\˭ )}poDm.(E1lWq׏َW3S ?]j\n}/6drI^Bb>[/ȨDA[^Me|(S~5 VRf \T vF4jOj,ׂvGxr2U_8]5Yɺ4yӱ9::֧αuqrWsZCsJ Hs,GE72 q.d|`7pR3"S;)l&b+L0KCR1[I$sZQ9F3rH\#ƘIb:U_<^9I5S5ԭr`3M(9Jmp$G ida89&?Gj"ẚ77Rb95 5p$:ea8ś ՙ,d&3Y6Mc±9xǖcsluޱ9l:~8 __—.| _×%K>—KR҇՗$%.Ifĕ"҇՗RD])"RdemWɛaثӱ7ײ҇vt6q%m[+{wZ!=PjZ;ZAڞId5RS HA u@8 H _;5;q[irh\{qN'O8_"ϣ]#SZF'x㯻8.ӽ2'sG+c\ދ]qEW"mK]#ΞmHgpS~)՝S);eq,՝n|&..+.SPwu?@]~"Ї,m~?͒E YU^,y"í1&¹!Dpj҇@6)¹"X'!qbEE ECz6@@W,]( NuF]q8wKB>$4n3uucc늏K[]!{:VK>>coWwIh\!kи؏ Kv>dmWyи9[Η|y{ >p|YΗ↭ԗey8_LAKO}@8 H@<'ܷ .>ymSuw%'m~}ݝ/p7~kmc=)(5e@*zf>B$FЫ [+Bmp+PrCU8*^Hk%SqRP6g?LU8T |4 ߆n=81y0b:1?-I\G@ߏo8"`YMe{^ÁpG4U,[nN@97 5zW%ʬ.VpՋOzpw(?f8#JWجQE}}y_ztIrn\ ia^)&bbx$H"bn^PNԌe J}/%b ظ)zjA(cPwMIcy}"U?ʆ"~PjI-`Aj]?&3Dph}t+hYq Ũ/tW]Oe9w-${&iɘ+WMMvl2+^/: _E&|2|-&)t"xVPN""Cť Xx WSpWNhU9<"15JpR/"8PfPqҽpu*0 5$p"qu"\3h(pWzOf!G⒎9 (s} r_w+^R3=eܣunzωv >T8ۦ,tSp(/s1O-橜"Â':A'.Е6-WbEfGbwLTw͞#Dlptk}*ԧw-5IcQnN,LaAiOERijy$GLqQJ-N1I:UDa78mLS&1&/O?lV _|LUZ%)>MR$&I2I-B4aEhEVO'}pL~N tYr„/:E_|؆/27/C)ćD[" D<6[" DDAl 2Dov+[a >%bK!h'Eo=)C)ćDY" ĆbC!A2끫( RbK`slMh{R!=< M][e|璝%>|P !WO E_ijýS͟+ c!C"-DM߈ 3Et88vmN">a;E@f7m 4@#4h$3H36it4hI]ltcǦylثSSOjlwN2."biĦOG@WyO2}:/ })OUhl26[4[yʶٺ2OMOj :cK!xbKC-GM,ݷ:e:=e)HݯN3t:ɟ\Q3+]u[`y @Xq5uMF4$ƵµC 14 I/=*K IR2{?L ɘdZd6&5ɴi2lƱ:6-cqlƱiӱͱw˖[%J'7S.D')q[<rln[W`?h!ϴ yҦgu*:w4Cȏ23FR1ggڝu(b`E BS%F/кH~p8-*sEަ:LC}h^)SNB-S]&Gi2EIpG.d?+$6&;a|m7ƾ_^DG NQ%rzee]2lInQvHGU\uߖ/*Wإ:mz4|mE*4&_A9gbB[Vմ4tԏ:_W!)}k!MŦQj\$}>ݺQQ#VeE*2g6>PIpJ66$pQ昖~Dc _y5X}kQIyI5 LdZLd&d6&1lLMdشpl6ֱidcul6͛o6| _d/&| _lm/km"&)Z$)6IM"$)LR(""l(B" E KT(2:gvx>&iA^q^u7M5ZY(2p/78vQ6vƸ)ڣj"Qteh7"ztP'RdPAg<0׻$pkV1r< I{U^\4IJnϜ/RpSY7FmryQn2@{K .=ΗME%FAWK>;LUI @4Q "YA^ZHa7uJi': xtLfc2d4lLMٚƱ86:6M&d7c/re| >r.'?ѣBʃu2KqdPz"IWMHW7h9%zf7arG[mKhOR m<zE&XW%dT_U=ǂ*vו¨Vtv$ܪ܂<I#7'=ƴpѼK!Df]]Iz2)lL_4q+⃷zMUOåe`+U(7ݐ\)ϰ8o\|)yMF" dPCWlM&c2[ia2ɘLd6&dM^ul6ֱydcul6MMֱWۆ/2lEb؄/L6|"MRlЗMRdЗ"lЗ"l 2ϣ/ulZ+vwy+|}}-]<Ļ݊7~[ IY"7{R"C!xE!AA&"r_.%IboӢ\0h2]E$]1HdՑ"p"i6 v&uJ;YL<*zîy'ro/֬-bmhUvA#n1H Aɬ9e^2Sf{ʼ8e2ɞ2SSf{l2-ԥ]^d2̛wHR+OnyyՠSۆZ>?E$uwNZ`P+oDm2'V;E`'xsޝ"19E@#pځFڜ;VImNk{6yl[)V<6'.yxw{5t4"/Uq G j26[fiN W-WtAM"}|J]R"u<ǻ=-f8W>|"cRҴ*" e -'5!XAHUDMu݀"[WATи$>Ź w5T3yw^cЁZP}/`xxe9i:Օeɸ!|d:5?m2ieʱԱӎMƱydwY•0`۝]db}tɵUZٕ]BWR;hZqAT%R5eP=?qX\Rl栎$Pt8%5yOyĊG݊.yUߨqyH@:yyM"Hdeø}єS3Uaz^7 9N{fLьȢNuVv#Ow)6|79ȾY4w0 qiӿ ah%ud֡(YNRXc[ %/Fl|k9ՙI( +'rB)fa| iQɜswN [Rԟrs,Yx,* !c_Pv#W1Ch%/ӱ| [(;rSaNXe`di[߿w.$]'~Y0k!n(K3NMOLdZrl:ulcql^9*|iO/2Wk4I$E$"| EP 3~]IY Qq>;_j[k|Oy ƒRx,DѧR+YZjC]}͢@)]DOԤj>_K}:^(~98L,d\a0@Ez07-Q ׹R& MEnW K*eylw ҭHͭ efoT:`C rx?Ho9OwcIvw~.c7Q .8-bIҾlL]٘L&1W&:6]ftdJRyHl5$_ԏy%榋 iG_41/ː;DtU  jHy\.gwWDA_2_JnɗYsVG%( 16*kWB:bv+B逬M%-$[sve\3PAeԱEd,_RW)mk0LF.1ϣ-W|N'#>kP=]-+eoG_6| _؄/.M] :"譬0Dv+A#,+Bݞ"uDA",EZi^C*n.r@4ͩ()9Cz y>}Ouɾ\!( u>ǥF"Q߭X̊pJWY̊\:JV9YnfEФ0)e߿;+dsǽ_/~==e)9e^.}w]ӻ̧?et^Stk{`iM2d e8A')2S;E@f)6S;EfN2;fu_`iwR@#diw<6ӧ.<@vOG̟݁}mmEF_ninLue:5?m~y"C.Ć=G] :NO?}ʿN >ݷzH M~7~%_޽Qhtyk> |q,թ䣏 77vn g?9({\r<,w)>#Tp7Ss(yE_#!}ɟGN05vCFΚ:rrX7p_wE+hhYQ}Cv1fp\K6XH\Z˽([ ~nꭈ?nLdLfk2-Lfc2ɚd4L6M flMƱ86[fشj.m*$6Kq'C Uah2KEs3ehiCMTn»x*#eN^͆FjL052U. U!<\2` @@57Ib䡪ɵy7zi7p.f!ZФFg:IҦu9+" Mj} VVEc[{W9VRyd&l5iz Iު`p9.?$uN̫$}SՋ]T?*t.h'Ino1dMdLfc2[ɘL&5yyƱ86YǦcql6Mֱ86o:6ؿ6| _d-E&| _lm/"|2b$&I }$E&I}Y(B }Y(}ɴ+<]ǦEYr?h7|URkIؖMAۭDmv+<Ļ=)KfOAl 2D 6D"y"Ș̖`Fl/O06]!+)ɲ\X^}V-aIߋ5ɥP k5R=n~zeJ+ULzsD],B)ĩ,=!ϨFo~e\u_ +i1o0ɜ2S)9e6Lɜ2o2±y]^l2̛wbw{^DuhACj)m}p"X '-0%uiq+R}KbsEthu&Hn'NKBdNmG3Ho/sY/6l9R:|-V4:|lJ)V;hm"x,=mM)~S̲2@KVBHeԆ)x?? pF&竳M/Tdg&%Y.Kf+Ɨ4$5fu REvmE!B#| N9$|BuNhr/gg/ys|Xr:3_|j2}d2&cccұQwˮa"=g|!+ՍsHBտxIT?|~/hY\WVV"P27ojJRbG}9"9*i/ 0|`c ^uyWRHzUGToA#Dc">Fȣ!Sqh0$ulxu177ڨ฀PA!XV|*@*K2%} &Jf݂[ Wwi2 >iQ/N*O(7 WOQJ z,!t n=! Fޮ&Tw:Y+EE**_#D.E:e`X BmGp@*(9UE*;}׬#g'EF/,nC4"ޤ]V$jѫ&nK& ]'짏DŽ >txMRL 2cpsl>LtDFLH)0קE.Cz]lDbj~GL; N3ǩ T|j2d2&cөccʱWN}:| _ _$ŧI?$)^%S(Ÿ"l%dEc7<p7KqԞ}#Mq, \+e/=N2P W3N(NGAu< p ۉ@ b/xL oBDtˣc:ŇcE27m(=] \* 5M$7\.R&%THt|WV8>+(|Þ4K(qpCI;p9)T/)!My^būWEŹ !^!ֽzDܼ5~_B{xY3 mlL]ɘL&5ɴi2a6I:6$lcӦcul6Im4@r|́ |$ZA<2\tcpⒼuBp~Wu(Y./sHy;VU1|"Eji(+:1"s^Y L ׹p!A?t5#2LqR νc 8#cҲB,rs@OCzQUP)";]I7_n&i٘L+WM͟vl6M+^/: _E&|2|-&)t"IPN""+ɧ> 8W&&"8-+eʱ*+~M/>D_dśw6DD[" D<6Y"hw :$Ad V[AtJ!DbCfOzRS" D" ĆbCs9 8%;d2p#<6θ7Pk*o{kOxj! ; g&Iev*ۆn C)hb5$u?rt̧̟>e6̫S^e:黼"u"biĦOGui^OU-//SşF_6cӧ1|d :%bK!h7LN"`3E@S68at<cN")z"0t:ȇl 4 'ہF2t:ȇl 4.}1<6c<6yl2ؼ9v{utzS^.]Op]^El:鈽h|؋̧y?Woyy}ѧת _V>/alM6l]̧&M^M6D}|H%AId>:cKh#KNOO?}+RW3t:ɟ\Q378Q M*^Uk]y(:2<ƝFaN}Ɉ>Y}PH.ˊA܃Z^@nM`Ц*9&b9QVJ8a4K떣IWsB *zYRWK IUE0Ntb#$"]CO\xS~LrʹVJK0AOɴ0lMdL&c2Y̛٘&Ʊilc±86fl6c_ϥW8"kɊPo!gOEf #Wߧ.]j;umFTI52oZq@ s#EB uّ@RχZtn,yKHbv+W3ΊtzE%+%%_A~PLjNYG=zS6:H ~eyHՃmOQUJ ]'4LCRp83G+y7,K(fK_ CՓtsIԤTW.HRTA\Yp͜$5^o R8hivU[)mV.~GFOІ90? iOR259 t`.v}QKT&$WeO&@Z:>0hprܦTw.\aw:UMRפ|!I:hA7ta0u:_^% z@9d8Yd7 /Me)YQ aޜ{/4n hPu br5<Ɏ(#ۤ%\Ko|&]7N*`5Q#Ix0'u}AHJsa ʕҋE9Zh\{n9 PUkt̺g^9\v(v0Ԯ;ZOCJn rxLoLd5|j2&o96]&|l(YdMoe|ߗHeMq$5jT_,6NQ.`]2|)B }[DOu}!t;`DK$(R>\sc/YeDګoSG"Ԋ_^_{DH^7Hkz"K%p%-7)32pqrrnx<2ngvi.gGvkMH ^L!Dƍ04_$y~#ȥN} юw5g:E)Wɼ0dMlL&c2[٘L&5c±86[cql2ֱ86o:69 __dŋ&| _dEm"}!"$)LRd(BY(&a EvM^/>D_&W&o9}!vUYco%CȄ/^]{I!c!N^݁}m4"@rWy[memzk6[e:/o7[4[ill/|_nL~kAKm" K"?OhE풺KmRwuo.uۦW3o76'jcKX|>X45tE1-ğ`KKh$r^*x"C`W{XxӅ"\[u} y)$1!05uXãvCp87uu=Jzjr/ %?6&QEK!JJF J\opK2-!N_ W h͋~̬'B++< {qQj7ɼ0dMdL&c2Yɘ̛&ӛƱydc±86fd6[\M꤉"&B֪FZUY,q0"W&:yb9 u/ H&EhT{j(f#\(nc/Qnp74IzB%psdwףnA-eL6&ѝH"yT&(FVCE*HQʱYoŝWe%2N\JWZf|xKF;,yQvfu_ T|V̝x4*}2 zfa;izL@d8t8EV$ Eҭ_t_p(u Q[wY'7 t}C8P!ŦUS5(jJSr=׽DJRxRPԱaUảf dZLd&d2&1dLMdشpl2Mֱylcul6M_8M"h؄/2l"x3|[2IILbh$)6Im"h3IMRl/(B"dY(B&7( |6ZUVX!K X$|(ӎc̺#opYdnDRһgE/^_Qo^1=% .t,7G.qIi( EefNԝn@p=ϭ{|uNE,`wN kMuzɵ9eg%0C Z>|b"$F!҃d0M898.j4"4ʿԳg躌<}~l1.lj|egD3]vpQg}jWvL;\ o;}٘L&1NM&c2-Mtl2ͻMƱԱ86[ke2fi͑k,gk -ڌ+pNFQ &#lgnW:&h ߊI,+ *9IERpp) ,ɋ"H IPyaTc5d!%Ibu1UJ@V-%'7BFA#G6?4[ x8EY\CJUL9PTo2ph"<嫑ϗn zѹD)ց[j}$)|RA. 07oH=Oya2ɚL ٘Ld&17M7c±86[cql6ֱ86m:6[&hȄ/M"Ȇ/67/}!"$)LR SE-!Eh"&/mWM^/:D_ێ*+{7|-E&|*|K"m +{[$V!;݊ԒC"h'ņUO ħDAd 2D" D"K] g07"EG=/Әh-M |n &PuU?B~AڊCĄJ mWE/c:)iYeYwTpz'[8bWHRۣ+@i"&C6̛!+G@sʴ8e2yqdN)=e6LLoI겹˼K겹tJK/p`_E7~A")*/٠i-p` B_mMsI!Ep01ù$f8Ab8w|88=Efr<cLj`ws9ȇ3di5ù;hÁI]6cnJDUuP3Ъ{̊ B%Pc9 g܄ 5Q/sw:bOF5?m2ieʱԱӎMƱyثE>؄/^U$ENRd )OC6PVPDHYdC~S!P5]UO;C|{Mrm8SauX4|/ H)ıS: L] f@3wFHw%􍻌S"Nwّ垝N;MC}Dò'j/@팢+[XPHZ)cWƉL%eAer ߍ|!/?q>C/->GZeCQVUכ/zIuU4)eU_NH!iD#ɒN$C w;ν2n28qY^"ɥ^! ǹRɘL&17M&k2yd&ql{ױ&Mfl6cIRd$*_B0s~KSST[1I»KXbIzEnFΈnK=!9dŠeȒ&O6Hꙹ * q !,ԋB +VG&8 nIG5?m2yi±ԱӎƱy؋ŧ?؄/^U$şNRl/)OC6PPd8pwb8O tYrbE/:D_lEዶ.DD[" D<6+K!DbCfߺS" D"7{R֓2DAtH%Ad 2D"-t/ =|!e%ϊU9N;f$vǘjpxV#EeI|mfVNJ[!^&SEܵ,x$Yk|Z^щi]ˋ72)5E%.J屪y;t|:X2DJw=8cYv͊8o;e:=e)9e^.]OvWO#6}:b,O2:/4oyyp/4Zx ǧ?W ;6DAtH%Apdtp'N")~0St:C1dLǘF>hÁFdysf8@#4@#ہF69_L0M|8v<6mc^22Wcotzwy5vWO#6:b"*/i^O@{^^/>E_ijý/6V>/alM6l+dɫd :cK!x"KC-džM,ݷ:e:=e)HS^p 'zsEݿpX`#X]Fb L}@We"`QQ_[~#1t곽ݥU"EGpAuQ]Pcycj5|g*o߲ 7<*gw#9*HRfiq繦Vz ȑQ~+dE(_A8^pnI^AaeԢR`"ELXfV,HʥϷ?Pzm[dFޜ B>+1:M~JQQES婇-o 3'sDxdI] w)vV/f/Tn &ԥv"N"JQ6SL^E*Z1t*"A]TI 뱍^pRҨ^Z,S v*7(TA/ xbi7%_ BT!!,CdG8d  = z{Q d?Բ }H"ǹE(@:QwU 'tCJ>̻,RM^wKHdE'RW8v׽6ң? ٘LdZLd2&5ɼi2Y86-cul^86flcӦcCEb؆/^/6M"؄/ _LEb&)Z$)6IL"$)LR !EBZ@2P ! E@ڄ"CGebj^RW /'iB` h8I\5+j>g<kP%I!~ǗԔ 'UKW${tޓxJ͞s_AQu*}?EXTE IIHM/QnR.ulUHiBHdVK%xfAp䯶#3eX}Տø(JR{&1wMfc2d^lwccqlZ9tuOIl:m7;ܭ) 5dIex ߨ"rrqRe:E z$N-{LTEB:7[Um-IHZBxR2$s}1+Wzulx]{m4dU8|<ߘ%UYdWs9ȫƅ$?nr|).K@sѸ%?22(}rOg1vxE n?"9Ib<VM/yCēIU_2׌ۈ.`cqSia2ɚ ɘLd&17M/Lilc±86fd7ۄ/^/6lEbȄ/ME_/:D_l$EIߒ"t}"loBlD_|M^Npn9}!vUYػk}m/6ዖk^AtHml Zػ݊%ćDv īnnOjI!ݓbC'ņS" D" D"CT=o4;o?ˈҁڣ}CD$fr3oZg(W-sÁLx?_]^_[`фq)5h<.qW%+0ϊDd,]kIbVĜ2/N)=eZ2SfslO)))od2풺d2FR):"ئW[ Nl7hVyAۆ[Nvn p.)>>f8DA '" rp'L"Xx) rg8 4rssRw9Hۓdi9f3Myݱ<6coNmluw8y9͇ɫ6;иùU>h\Nt@*/ 4e>/oV l]l%lUu/ay2K->: 2D-<džݷK.>>I)Co_pSWa2˘]9ڥ~ҼU<Σr<^/ѳ 7;wJ"{yvC.ԁ,oȲ޹0myHQd7W\CB"C {yʫsHX2.$MY\\x"E 0+Mnv_ZWH0cAdYs, 閴;DAO qMRMi% e(Q=>?LlL&k2/L&c2ٚLd4L6 &dƱ86Yfؼxf+xbSUKvkz5KIB%udn *p~hA1ޫ9J}@}co NiAPE8\׽]va)(ÍkxlQDކIyUjv}fY 9k4XRZ$uE'ɻ:vkR*J4JL@>E,GE1XSj3Z7yjs82ʰ0=P$xBQcs7?$-@-OY(hLL8EppɇM th-旿ó^IAJdR񾚢D5-ˢ% Gkj|?J3_^ T~&wKaz͖Y>˄(=ÈOqϻrE. !>_Ui-LOx sslUbIe&qEe0H8E'ae݉y_|wa$8SSǦ-t)p+uf3yQaR~DRRpkZn3ɼk2d2&]&شdOcʱ7i%U;|V'bOucw [&%lG؂_(u%H-Z<'y'6Vw;4ӨP$ĈϘILS*?g״PzWa0ׂ!bR:ě]Xd85a4u<[|#;.+ %:dYJ դYϰɨ\Ѵ)oPtKiN_Q*g>z[zX%ʘ)= 3N4dZLd&d6&1lLMɚLƱilc±86fd6c __lE&| _lE—IR|}MRlm&)~KR)CE" E lD_|M^7w{}m;xsD_tūc/ >$yl6DxnŒC"h[AUb'$I!xٓ2DA|H%Ad 2D",$Y`!=-vmZ/!b }W&KR+zʮ{Ls%,7v]l(Dp{W X/=ؖeW[ܖ̖8},^/0k5!Y0H5Rylw-|hV_/bjBV÷4̋SfslOɜ2SfsʼylOy%sy%s]wRw_N6uff9ES U^~kSt8E݆[6.ù"f8W\AtHm3l ù5E)2S1|8=EfS3ˁF:hܞ$3HI@#4nOhդ<6wV|8=:己<6co'p@r羶Wxq9G}L_6ܲ̇6 }62dlnԗe>/oW&w%LJt6Dߧ}vI%Gt6:wRw_}|HmS7^1[<'֍Ȼo(ugQBȖT Weukr}Kn]x2wʩ>[)DEI$(I7}%Asemx*M.⛢/@F+blo*b(~􆊋UjOܴ4=qf}>_ӕ[EѐGpo4b"#јe@CD/C<GC+yrInޤd!A)DIO?uR8[]+N|=dlL+SǦO;6cK}!PDKkU1E!{}4"_סNlI \w%*("z/-Q^'By{;q5.*oe/J|i] T=zD4#WPn#"E Ztp y%u׼MН5owZ_JɩI] m=.Z+f"OpIeԃ`r|"Jxl#rBaWZ׺yz b6`ΕkW6\C!t0"+&EgSģUljEdAt cV;!(MIHeeUdn\80;>p44]ƴUVK){w!k`<c'{&Qk݈&P޺]N1R~bXWv@yfh ތv6j5ѲS=&XaTf#Z]~t7ˆkdlL SǦO;6c/t"xVIN}:IIRJR+(§P> E@ZB+Wd&uvQsv^?/H )f&s m/](F4)a6űMܒRfFŦa#5~C'v0e*V"$kLy'i6>) Y8eI!p6auGiZЂ3(2H+>_̞ z]w[IE SX&1^4u(x8ѓjjyeh"b~Y&99!)sm+ȓZrj^heM*S H&1wMfc2od6&ӦdMflwccul2MoIJ~LR:2{IF<JS$.Jw`k:ND};N>'G//u%= PuRQMG_:}+ #|B&&ȪÄg.~ݜu2͗?s*HEӨXCiQy): 8KϦV@R~YjMaQ/r-7}Eje_Nq .LoY2x:cB#M:r5>m2yeʱԱӎMƱi؋ŧ?Ȅ/ZU$ENRd )OC2PPd8pw(+O+~++Ȅ/:E_|Ȇ/67}?|M" D"7ylS" D"6֭0DAtH%Aٓ"K!C"-Ć"C!AFɜC/1.n<_+7 !h# ~amy-,y )VɈޯq] Jy8~ZszLH+A^$m%"K!xdK" >`;E@f7N">a;E@f6m< 4@#4h$3H36it4hI]~h4|:Mdc<6y))Oy5~ʋ̧w>}Wwy4bӧ#je^ӼL˫FbN}p4[̇eV6Vl[ua2L6yR3 ħt}l 6DmAd 2t}tH}IV̧L>~ʋN:Op5B !/o >2/0xU9'.Vl纓vcPH\mSJGIFcrVMq‰UΚc)H ?:?pzM]ENn-y;92GeIJb; ("CMIjj gPDXO# _>=qrҕrEMj"DWs\i^W而Y_ԺRkң@+SBj*"Y'wb$MJD]| FǼ\B0&1ɴ0dL&k2idz386/cul^86fdcӦcӛcEE&| __lE6| _Ȇ/6IN/IL$EoI@>E_tB6P6Y(k}!6y8Mt%Cثͱw}!_d-&$A7K"n"݊͞ԒC"h'ņeOAtJ!D"C!Ad z#dBVg|EVq%8hrQyՓQԺOq(\(m\(Cisϕ |yCZtEj"2+mwcc=WGf8DA '"W rp'L"Xx)^Mp.pq{@#/g87'u|8и=fVyl6ش[]c*&J U6DKK{2}R!m!_\V]H\{ ԏD,+L*, XtjE cFdT۔J6#xR+P5+UuOC)>]xl_6Yh*ێOia2ٚ ٘Ld&17Mfk2cqlM &lcqltl}i[飶a+u'IB9'ݗ.?TPa ň(eU/9O11{Q;g ƶw*U\4ieTxXić:Ir ၅oZE'IAk^F5cƽ, Wb\RR#Tف5IEOѤ Ja$%`Zeԃ ;O`8bѥ)\*:W Sw7$HRGpcnEK`"p Sn$9&QV˂fkGKIN;Lj׻ԱBO5ǐ SRNs.ElEh%v JGDkm~ bu2Y.Tgz\jsdZd&d6&1lLMٚƱylc±86&l7c __dEE&| _dś—IRHRl$ŋ$E&IIRl$EIHR?@Z@2P-aE@P M(BoP$|]/Y1tv_{zY \5B 1wx]w#:)QQ(j$/-[c5z5E7G; KϻS99ET}m;aP|OfY }%9uU UT@0gkW&)'K;оK@ӓ<"7S eHz Q!j$7\rQe`.oz|d~WE+ O{%!bn% Y3H3J/zx~CQ~Ea2yd6&өdLɻƱiױ86:6cK{M&5y"-4uƉ\\j~ (2*ԱsGyZu-Sw \B" SF4#W7k(ƇWHYT]Iu?9u^gUui@5$Y9y]~Nh\}@*b4.po{q7p2p+ކl.t_niҪٺR_R_L_%LJt6Dߧ}vI%Gt6:wRw_}|HmSw&#>J:H&E28)=ZS @Mf6lZeJ{LF6T=H|麗dpW$%]ig jQ[]QRܿ,p[F[֯7u=!{~0'z_xE.0ksspR[~t! }jT[E/5>Ral[(JR duZ%ԋCNS%#4%'亜zBR_7VJI'MdlL SǦO;6ckPY"(YB} pY,*IYI|ţө|o2%>xH=OnR(̦?`h.$?A)6_b/K TY6$umTj88_G?s3;;?0 :zL: h1υȂ,oUǟbWKid@b]Tu`Kx9ݣBBrkæBn/A+II~iyd)fP:ULTp.W!28$SO!QH6_ 4 zWߌ<y)h]T<TR s^kAE_UzYD)E()&y??w45D&ZuEY Z?KghLB>8z) zZ- \TRݹ$0UJ;饨aӁF\C](Yz֮XZ΍ЈТLZF8l >D)KݕwFL,S h/%%Ӻ x dlL+SO;6Ǧc//tbxIN}:IIRLR (BP> E@^Bs@UwvרGVƻםTM咽kyIk&"~^bP; L("W>JwF."i\z]6WL 4\ X>Gr 'A|=3Miނ,Qg[܋YBWXq/Q? n'o?})8w'uO*=Eg]=aJ9= I(@[W^e§ǩx}8:\>[]K|Lvc ^G=B?Mb\~*bd2&lLMٚLd4l-ulIjӱ:6ǦM&ؤIJDd碽P*9.gsm?l|q5p)΍"wrA~FI=A5!=RZ3IF_sa 8[F jw,RVYDQ]hk"\H"GM9&nnҐ}[:ÜD,TqÑ n$}QiQ%_)!2LZ\-׼MUC._GSGI\w2-P{$ SlJ/U 'zyl͔}U"HRN." 2_7^L&Mfc2-M^86:6}ڱ86{4|ѧ_LR|IMo$_B:"i(,'N4\8W iY.+VUYCSEl"x3|v%bK!hfK!C",Dn[" ħDAd 2DoAd :%bK!Al 6DA]L}FG2Qu&1cs o4s6N"M^\4?"Y֚ZlxIS}_^W*s+>+"M{C }VYU^q,*ӴP!](\iU1ݜNjȂ L~Di؟+~aɡSSO2S)2e]^owy4b#؋̧y?W b8O}}p6\Y cӧ1|d :%"K!x7LN"`3ES68at<cN")Slt4hNlt4hI]byl>yldys<ӧ[};]ӻL˫䷻|{5yN2:/})OU }iiddlel]L&M^LfC)GtY" ěDAS>t6>tӧ"uNy5I3u_}M g!E!}#"3f8Z|Ǹ k*bO 5iM3#P3*G(Rqsm8QO1;&Cݸ:+ץ 64]scf6냔^}nsocnrnL$47D#XZ`LD_E1;TI|:<CnFp6JaTkYȦYS}mHj>0pc[E4wi[|N.h% 8u"i(B ]RBM+58,וukD?p86Q~4jIթh=#—0{p 8ffi K@ɀN#,uʢ$^~ܤ؂zXBX4Y ݏb2^;iI"ܮl ޻AfGUd.IN&]Y9/"+%t(¤bCqMQɥϫ!( &zAIB Er&_n&%$u*3\p/xl~v _xю=f@Gz% kz6HZCyŎPu&өi٘Kͧ͟vl6M+^/> _E&|*|&)t"hVPO}"" I? 8W&EYAe}X9[YA&|)C6| _$C",ĆM C"-Dn[" ħDAd 6DoDA|H%Al 6D"-t3._竳]04P^yͱ~D#lh˘lnTp)txk:1p*5NI2::◞vrI 7-i5"g BI*m\Yu[JR8١3v񱨫:mE5 w)Y&4լHGRNNO>}dNtzwyEEĦӈM+ꞿ4/AN}}pokc1c? >%bK!x/tp'N")Sdt<cN")~"0t:ȇd 4 'pF>hÁFdysR<6c<6yl6ش9v{u|zS^c|zwy5vWO#6:bؿ|yy5WN}}poMOt_flelf+fd:5?mf2"N>>Ad $Al>>cKhcKNNO>}+R3t:I\Q37e)6rT{ LEJ0Ҹz}zUpO׎S}q[EŨK4LL pBw*dQYL. ]("Y松+)_x=D>,ua|Z U6;k3iZljQ8+фQqkz3dzҟF:ĹP^=cDU0T4ȣ风y蓬RK٣VպR&HTIxqb6Y>]~ ta z|/򲨠_QȋC gZjwȿ]ǻh^tΧ/o̲)ZF_cWmܲ|ӭoGv,9&%N@E]r,%%kM~}IwFs5sn.&<7 )ܗ1K˘d&16M7]/Mֱi]Vd^fشdL" _l;+bm/kZ/:D_ܗIR$SŇ,aEx4y}mo&:}!vUY_[k}m/2዗k^AtHmd +"n"V݊ݞԒC"h'ņUOjćDW&@!Al j;aA#G/6f_6[-$C2ަD ()Pd`MQw~V$~hV$x萦`-:cVĜ2S^ΊS&so"lN6O)d2풺d2Fn")m~ߨm{5ES U^~kS|8E݆[6&ù"f8W\A|Hm3l ^1S :؞" 3E{`9Ç1SdS[>h\6ܲL6 }}Նۻ˫2djnCU-Uy >: 2D>Gݷ EVt}ۤI7hVt}jvu`E|%Z廸-zT RX4%~2e,) @oͿom{'ܽyw^VR/?" _p\VD3@DD*~jbDiZ Z'&uYcꎈ[ E@^BBU#'OC|%X[sMh)'{2EE8R6*8vvE2<2'uE>0'uK4jru18Dlj;*rTi`VpSjr٧X +brP *FQđLq+i=ŹGiql(oqkUʼnӭ1~`zb͆Pܴdxw\~z}}L x"sk^[\jO 3bv3-"NUJEDQV"25Eg s9ܗ1ɼk2id&16M7cqlul2Mֱ86m:696+ S Yd'y=$XKJR) %+qgD9ӄY _bW Awդ4f`.EQA(N7JҫlЧ&gι8 p)*;kp(4!ZT/Wi!4Nrk^һD0}~ Hۜn:-SDv~(:v% WDU|8QEw_Bvpzik:N٧$2iRe2}w!:BUGK:sU&өi٘+WM͟vl6M+^/> _E&|*|&)tbhVPN""+ɧ> 8W&UYAe}X9[Y&|)CE6| _ }"N >$Ad +I)ćDY" D zV"O :$Al I%AtJ!DbC!Al ~#dKY{$^umẘxU ]߫n뵪y#\e-/ʢ\)H1G=7JeVh 7y{]v A%Zĕx9὏z &4̢}QsmxHKv6 -4uye?CkH ,zSSO2S)2e]^owy4b#؋̧y?W B_|kՆ{C_+ͧ>W '}E< >%bK!h7"LN" 3E@S68at<cN")z"0|:Hl 4 'فF6|:Hl 4.ہF6t:Mlc<6y))ӧOy5~ʋ̧w>}Wwy4bӧ#j-b2et^^ 4SEF_6;2V:/alL7l]L&M^LfC)GtY" ěDAS>t7>tӧ"uNy5I3uO_}99L"bޟ@rƋB1t5}JOVG*Yc*)yѩPtpNVvuTY?CU1TNF]t]+;-ސ.+jp'@HQ?%&RDjR x dlL+ǦSǦO;6c#M":P;(h'j=uJ~"xzhd}.$/D$\_(٧JBe'!#'*6J{T.1݇h黢/J؃ZMHP6W'k,!~QgŇZX{iHJ`}zy6}xEKRNkMx"(T/[8_jw %$/NByS"yBH"BbdUU++=rl/^E#'AC6!#xZFEцKNc[Pݖ/HY/c&MzyHZ!mn%v k҅DP)P%;V _xf0xj{Gz}d,Q{_F;) "\ PlL]٘L&1V&:6]f|lW-!] o̒s7jtFʒ":AAX2"4_` XK&0B"ޜYIC6PGB(fS/ёW%ڽ50j8&T.6!ψJS3-KW.H1\'GR|z+ -kNn͇|g&鹏-X#D)ئ}// AFX?,nE@\@ďyY@۔s+ѠozOz] sNqN^ {rI ,VC&95?m2ye:ulcqlZ:"|iO/6Wk4IoG_| EP䷣/>iⷣ/Ȅ/ _lk&C.Mdd V!_Gٞ"v{Rl Ad 6D 2D"q"Hy!*ޠ73\Yvn1_0*{,,c-PAAEZJNQ진TxP,>#8ty!7=Vt۟ "ծ^#_z\{elruIQ5 ԯ2p^c[j Eߝ†[SSO2So}w]%IoGltStyO)O)]sc16Ep!hdC?NN")6SNlN")6SphN2hdiwR@#diw<6ӧ.<@vĦOG݁L}mmEF_lll%l]OMO_$AK!_Ox#CSOot>=ùO"_$k})K_~]V_P*Dze[ B7Ѐ D.HSmDZzId8>nyD䈋O# ˽O Wu$r]nnoE $}sϵ߷f.ŴtQ34Эi 8&ͷtқX|1t2b:HE.{U x>- M}l< 9Q}RRf| .)]uNxѨLlLfk2-Lfc2ɚd40cqlM &lcqltl-Q@q:sSfIDJ'AӔsE0$w d®^g@3itb^u8}g1QxKE@HOq %)wU@4 )#_0A#FxUk s %sC|J9Ȣue㲇ͩQ69$u\Z"S(F-iӫIw8]Y(f^NP(سzl+bu_/L7D(D˺Ye#X{, E]ak~\C.(D%=$/:i/ufy}IO,ި|sDmƎW(xpw,S`ECDmJ/6PIXe;t*ͫ؋?"A/zhObLH~2wYؼgN82dAKsHihA""1] kSfIƸD_f xL:pY6A]bY 4* Ȣe#c(NyҭudZd&d6&1lLMٚƱydc±86&l7ۄ/^/2mEb؄/M6|IRHRd$ŋ$E&IIRd$śIߒ""dY( (B"d(›Pߠ8=E9pyIp\O%M1tD,JL E2M\T>)E*9 k+V?_ܘpQ4+2չI4_]MGS3(M@w Y|k,|rpm$IGBVm&.㇘8k\ss5tFPJKRKm9tG\ 2&T.T${b8|aǗ荾+}$XeU 7AWw\ݜy3uW/a2yd6&dMfc2oo&fؼd7cqltl}a,թ&|=Ljm'd/&& DϞd-K~qJ"wMXoVFrx =)'DTm2FQ*Ο狊j Vυ^1ҺCiEB 8}o,6P:/p${AGD1kN}X\jn BHC|c\Vߔ,:('# M 2XvseK-2.?'wܣ:QQVX%xu'h:*^J^7fY0󸯢)Y?m';i"U"r}̊\ D& >}1+)ٜ2S)9e6Lٜ2m2Sfsyq.-%{eڼvSK"b??E ZUOnkՆ"]{p#/ e8-ě ?BrpvmN#);ÛSx/iw4 hI];Hh\Bylc*/Ny5iw8wy5crwiWZM@#/j}2xVm?_f/fi W-xtoASst8>ޥi1ù?O]O¡ևCA_s o3r)1.s<-=&MRx 9DE"qې釲K L+u2&N&: mB2uFKyiH7 )UtȒAp:Zmn D Ͻ>QːؤR݇pg a7\! &Sx!)BMEkPeUj{O*"K-fMv/Լ- չ論eFb$) :A. . ܈ꀀ"tj2d2&cөcӧcʱc,˘^AMJj1ZuV40oJ«> הQS`*x ?"\R<&hڽ@~@S0Gt 0-){m&4 wł,֧v$[]f U4|8(SQ@J5g|aT}吻Eƹ+r 9陴Z ݊/ccú6pDdg}cٖ>VG2JE[PX@#Q|XHuh=! ό_~T)b;%qۃGu+:MT^X diY.E^)}( v+D5?!<pOv<; 8/XB=,br9қvI↚,dTZBukJݥا!0g]bWתrkS_D*a}] 0WFa*zќs{Dۗfd:5?m2ii±ԱӎƱiثŧ?؄/^U$ENRd}#I)OC6PVP[tZ+ phc!s'XXT4ߪ*6 %5ዮbEyڮ8:8.J@0MT4U ,X22,' FW0s N )kTS cSny< tbS!=DP*U'p[S]_`T1I$3)D)ʪ 3m^"4s ߧ蕺wAĻEEpKצ0M3Ja};ڥܮYądL]ɘ̧&1&o:6Ǧ]ftlV}MHŹR$ uPP?>.(RQcEkls_JGhy0E1\G<&3hy+^Φﳟ,/j:_=Ijt!StVەBҀe%†t:8VP ­̷2ōBq_TiʠUY'U1*q+i6/)Йg, 9مאG:v&*1昂4nS2795ͮN%DT_V*7ȩi٘L+}96}ڱ86-{4|HR|I귣/>"i(N4O tYї _d/2qc!xfCѿ 6Dv+A#lO Ļ=)2D 6D"WD" <jK825E"eI&Z2DT_4c#kRw"x|pS_T[މwO2Q;.O&1${YD VQ%)$,oyeI4pK"]WeË( Uӧiyʛ]Oe2wWwyߎۧ4/ӧo"SşF_S 6ƦOc}`$C.Ɇڝ"`3E@Sd؜"`3E@Slٜd3H3l_7h'u 4.F7c<6ylc)ӧOc]OýMs_y>6p>~{6[4[iJ2L6yI!x"CcC.džGL>N 'zs[l*W7<S"B) ҂lm"8 ml*]hZwyVX{\`}} 7fUvFg (J %)!2j+Q}w7_Ϣ I^%Ze{USzt} 9:$UW+aX ecW*U .-`(ҝjKkZiZEݕ׺_i}m2ٚL ɘLd&17M7WR*Ʊ86[Ǧcql6ֱ86m:69Z0))nHoA*W[=3Q0G$}2@VpTdsZF\Zy4l:.(; u 5{݉=i%UiEԞ4$ hi&numzTm 5}7{QBitHߎy%z?/M1+Cr"CgʕVogL( /r\wɷǛ\ҷGIZF)A骍!}U 6WQ&<[ J,7fNU/7zęT%EWHptsh>lL&k2/L&c2ٚLd44KUcul^86&dcӦcCE"Ȇ/Z/2L"Ȅ/ _LEb&)^$)6IMb$)LRd7t8"l[(B ("d(›P,z_k/1^TkN p_s_hxD:+Ϸ?csݔMHa. Vs48k;D? /*G=-'#)~c"LTɳ8嬇>v.%G"zeU .VepQ?2/^tCA c9!滷xh^Y־'Wx."=)SA44S2RƬ2bq3i* "׵(QJ^2(}41I dѢB s"RsW!*jBGi5M9yd&16M7e,96ǦM&d7ccrTXOfE{+)9e̋SfsdN)9e}KWh 犺>d-yN։OtEd4|HAٝ)MohB#^`D_L3(X+;zW(GҲ!,,࿅=my~zo6ޱKZc2!MܝSsO_䀮[#s(|ub`ErS]-┧ɲ;WuD7nF W>R[I-Q)(V,=x`>|$Z]Q*(v+" ?A?7NMOLd^rl>ulcqlcPQqvt}\&9eIvZO%T3^j@㥡E$OF ^JVE~K)D%rWgUR^Q\nȺq`ry^~UFE|'bZi5eUqIrQ[Z]."@#Kғћ *eUկ1Ia@bke@e{s&_FҔGSТB 82.XDЭ6#^ӜKH^GsՎo,xC1IJ(g~ @yDsҎ({ks"/lӽ0`goFarcD58B\75jY32@eEXps.sy5Dê`b.W\ pVdpѼcY^J:U.aBsinu@4{*]9yJL=t̹o|kHzQvnZ~b5=ZBKyˡtAkY*\Ut\D=ddL ǦSO;6Ǧc/t"IN:IIRLR (§P> E@^B5ZD)/DO2%Fr2 I/lZ2/[* ^z2/rb솛-yn/AFC]F_w ZJgjF68Ae&^֥'s c<&@hsg+bKSOA=Ƿ̏{ Z!xL*}nt-<&my"B s=N\r7ДQQ[6"}#j|ԺC֣oC)4#d:g Js%! s?Ld5ɼi2[ɘL&5cqlul2MMֱ86m:6YǾ^Q^5л4 EDYx%5z˿u"_x}C) (]B(UݔCAGMgp.xum΁Vʳ r~,飭œBQ-+eʱ }!"Ȅ/ _ DDAl 6Dod 6DAtH%A٭ K!C"-Ć͞[" ħDAd 6D" D"K-U-k9B $F?oRk#+/{ YwZ"~ԙ,Oe* ΅tj%vp7uu'׮ H?|k]ਲM#%fٞG57~4kKƵ9:_"jŋ z~='IߠSE o<_22ٜ2-Oyq.ӧԥ/H_Fl:鈽#"/i^OU=///4ZB_|{pal6DA|H%Ap%LN"`3E@SdLx ǰ" 3E@S6ct4hNbF>hÁFdisR<6c<6yl6ؼ9v{utzS^.]OpWwN#6:b"*/i^O@{^^/>E_ijý/l26[4[iʶٺ2OMOjLS>D"7 DN>>}d>ڤ}SSO}? 'pҧg8W JAvbSilItyRW$ɽ~z5o[#Mo;&x}S9&V筥bPB(שHq{HEܵk%I&xeSgdD5_'q7.6<:s*0 \[kN &0fEdꠇUkՅIJT(M7i-eo&!ynH]檺!:<`|nEtS7\Ǐ9O8ܽ#nښ V*)Ѿ+v.$U-wM#dM 쬼M?LGe* Cˏ4ɼ0dMdL&c2[ɘL&5c±86[cql2ֱ86m:6Yfx؄/LbȆ/66E&I)C6IIR-I(BY(&! EvM^/>D_&ɛD_|{UV9nZ/:D_Le䱗DA<6"WwiS*!%}--_8ǡ2%?ޠ!,6ͫ. Bǹh\iCM8{ !& hgQl]r,B iڈ*-%ǔ}ԇrr9ZoʻDl ce]_C!0S%OI^ !f ۜ(,"NK# LDέ|Mr rQ˯AP *|4ITh>@8EOTՆ M/@4 R$jIjzDKI"}C" E lD_}mo&:}CثgE.|o-{IC"hfGђV, zHmw+A݊ԒDvOD˞#)D D9"ĎbG'1+yE6| dznh)& _Ck.)ſ"e)19kqD-| h7x>GlAy!{cz٘#E88tŽZ=!&km?8Gwʼ8eviqN)?evLoI꒻˴K겻]埑[rNlSNo6hSp`A?klSp` B_mMsIC`\a D6I%ù9ESOO,cx)^Nlp.@ 'FέI@#?hܞ%7ȫIylrؼ[]cy)n'/UbHD?3!W9ա[Dǔ]Ѧz풆MTvP#<jt0(E3ZpMvK҉q]OGV,}7 H]jĞq"+#V(MˈCA46i$geE<3|'[pspUT9TD߇*Nd=iB iQ3q&k(I8D(I-S XA.Mt'[fBW?pc:@2{/e<؅/ZUI?%)Z&P> EA^A#@e.Cn[GҲFK9h5f"5U\#l\K.B8GE|H6!`q GO88]Ǩ|g>4UyKJOt ~*ġKR6oz_-4_LRܞ!v^nҤN"f6R9qWC% B %qmȩXGMߋHSWdN]3!e&%ő_Sx|N'TdD. 77@c<ME*Hb3V퍎Cܯᔽ=hwFpQé(Z)h3ɼk29id&36Mfo29&ؼ7csltl-9dѶGHkCNs}}Y}yCQ,oN)RJ`BFh%$$GUiRQJB 6>n5!HZNuʍ MWC迃ǫ#OgZ6PH1VGWCp ݱ"K:UD V2VNإ|%H8El|nz% ^ъrf#FzE|?Kx@alҙ b$,le]\=YK@&x"{ʦ\6SƠqjGNr/M&ӧM&g2L^96?ulcsl^:"|ş_-"I$ENR-S(Ÿ"/pSI+碬eX9{Y=E_}_o/~ _D?$A vD=%!DbGf=DD?$A I[OADy"ĎbG#A[[A:ʰe"W:.3e4IamتL]ۋWD+ogq4Eu>{gk(4;W`?M?_^dWaceWQ\*pzEƭSW *PecxYc"[ˈxtUf:6L2m4h8pi@"z!\קLOO>}Ny]OˈO#6:b4/ӧA苟/4ZcS͟+ c#)D D9"7N ?M)vSt<ǐ"`7ES6E@#?hd?Hn7g84hp@#FڜI]7MO<6ylvؼ9~{uӧ[埌.ӻ̟˫_Flz{5yet^^ 4>Vm7EJO̾ʮJVzk.L&ӧM^LfGS} rDoA rt=!GcG&Ǟ[2==e)Hݟ/g8 '}zsEݿpBݥ^Vk|mN" Qz6/<#@Pl m&/AAU>YV: q=v ]I*W0eSoUq2S0yAVHP RFͻAFRY88m7YySIjB_+pL~]V.!g3U+ab<ngZ)9x L,| tS>h_-"I1LdZLd&dv&3LMɛαyc±96;f6c(JVdEBFXm%pPI! ߡMRYk؄pqUV:i> -IEcQn⹽z-e,(uɼ0MLfg2{əL&7ycsl fcsltl򎽊>| _-.|_o/k}b')^$)rI\b%)LR }y("";(B" EC@jI DP*GIt7+'gQ%+oO5&PWAjݳT&81hݯRqQd8B2ϡ2xI W2 UM 5RN8{X Ӟ#?ji2U#\ zԚ>gɣⶨ1z;*z\ըP*=UajDFِ昺"U\=Do/ %l@-7]"3 ϲ'7WǼ6Pr[jBj4fR|>pk" ܨ"\ˑ87ˆIqk-dLd5ɼi2{ٙL&7cslulrMMޱ96o:6{Ƕ<.gHW 5}+1L i28X|:骧G.SA ]H P o0#~0Hx%)= *U/?ٴQ!}Em?΀*x3[Qm$H/#nA޵0(ң*왧UoN|ϡ(<2 *:s]yB%uhoHIIDVF&3YahU&њrct0ixd9eA:WPCzl=,/ Ç}OPKנX[meG"uυqdr&7&3Mfg2mL){fMα96y&ؼ.|"| _-.|_m/z _ $+$PP}ɼ+}ѮcӢX9/ _}f4IKzg>ICq¾*ٴ>/\$HOHЋ'5n#v=D4.|F!qQ*UEQr]HcHFƢj[siG Yr_kgoSD[MJ$E8|/|'>:S;aRb(lb>Hdh5'ةsRU8sZpog "Db]5եtZ3}HHCU 5{Hp{&S&3V&:6ڱ96-{iO/v዗kiO')vIIjE)OCvPPd8KjRr&ՙ^nVM)=!* H|s#ICWp=ycKn6tp_sC `jc˩!d ZNE\Į_d6qJ* C01m 93OWԖjg!5fh6$=9h3I!3YO*6Kk,YvLs•~1!=Zf29ydv&SٙLK7ccslzVLR./KF,A4L;($h9Pt"l2Ǚٷyy1]tg4JBP{ِ%F=Vėd6uΔ~Š8%Ф)pH~jW }!Q3cu}"Y<| `/ȈkHD> j%#PқK"HP"(#p~$6܍`ۚ(/1H7wZzw|YJ9x|f2dv&ߠ96ڱ96-{E= _E.|2|I?8P> E8⧀> 88eqw_6ylrD 눠zAۭ`G_G"ݞ9":"rD7ADЊV<ʆ~NY‹lmN,F ޺fCN+2+ݍ*/u'DXx?̊jVDQzɴլLCXkWpϚaqdl6წ? +`1橒.?=e);eS"u2..?ǧi^O?>EO}}Ol2?)MD ';"ڝ" 7E@S'vM)Nv;nF 4.Fƭylvؼ;MnylzzS.ӧ<@vĦOǴL}mmşF_w+~hn\2=5>m~y"G.Ď⿞cG.G㧧̟>?NN 6ݷDG/Wb~Wo?2KS~$(:bD? 9) 3 F!f8}8C7TDtyuI{[ J|@hU-oCT~gGPS&2.@S78v$dn!fIz_<xr c{:F?99)ݗ%MxY7 Yk^UtP6Q'w{. ~rTya2;ɛL əd&36Mfo29Ǧcsl &csltlmwy. Plz_Ep{n8pe7dG+J$5Y:<(mԈ}W  ]bퟆ0TJw"_%sQAtn}d.*J4DQt&prQ+lSM˛2ܮX%)~ĉ4_.mGafUd}9BTHʖ~.LC)ʾii u#lGY 3Y溪U}}DjP" `?Ҵ-ljd;gXqe1fĐӅ'c ŊXN?؂'E(4 3 4b.USY!A괋@BSd~äGx$1&1BvyˆѠ \y=×">~h ~7ýAzytм?O7wQ{m#E()()C/~or&3ɼ0L&o2;yd&sl^86;&شplvα;6;ǦMǦ7^Dl؅/\bȇ/r6EI\"x%)rI}"h3I[rPPaExEArP=!ExOBMJ)\L H]|7I]TC#틧J4ٸ[{e8^NÙy ݂Y.";iU@Cx 覥 VQĊk5@!R()˜W+OajZ9q[ "17TϰH_q[m`1QrtV#r-j{_/#28by /E2q)C#p+F:4Wr:Oh.Hg*8aYB_f,6̠ޯwM~SN4LMɛα96:69ǦM&6c/ﲈ(XBi]JAiHmˀ$9fb (b"lӡ#@[;=2?^/zP( ]6pDMyĀ럎FKv+l1_EQu4S3!ґF,Z`b )- 7j:iטV LdC? ahlE@v?|Nz,q/*-6l4tpuR~!c;"lQQ̮M,;f-+S&3ɴ0Lfo29id&N;69fؼplvMα;6;M&ثE>|"| _E.|fbV')rIV')vI:;(+9(B]y8W&?]ǦEYrG_fwy7~~"wof Iy"6{RO#A"A z"șLܗ1KXmUGڕK?p_@6i\xP^M VGzȃm#tE /fzVW-er~2-ܽ_\mVdppN)ɝ2SfN6ONyشK.H]w]ͻ.hE^Q?E ZUh j}~`I2+K(_} ݷp~  ޝ"9Eޝ"19E1Fڝwf8w'u@#mN~~7c<6Wc?Mɼ˫䯜N67HhjwyW_0ݷPuzA"WfЛ3+T a;fJ@ʛyFpWe(@8hv%^殿9T p5QQ!jC"}[>XEp˚ x-$M"[Ocۺ!uHQ>w7nr CΠGQi[p(΍G`SRm)l"WՍdv/M&ӧMfg2L^96=ulcsl^9;$~\NY JEߣQ:,4ȔG2܊8{J[v3\]4Gbn9L6,E 7R![FbTU$}.e'Y.G,pMAVR:N/A`ķv_ ):Sh ω4"Ѐ&rSk>`#,iVGڂal(#f"}/dh Hw6 N9$VMiC!'ģTF&PP^o#p;<ΨXGXL_ ' ՈP6f[,<(&ML (bj"  L 8Si2?5>m2;yeʱccʱWዞ/t"xVI&)tbhPB4aExE#Qk^bo e4sC{x#u'^oH يGp 8Po24ʑ"`V-"T|\ڔs nI6 szw~@. HgkSﶨQQW)ݖu'7-pLcK7 )Lw>\T/uhiѮ^EB{*':-!.Ĩ0yxT RSf*uQ/%CW K*.쉛!0/("77j4rNJ !0m < ,!r:*TJ* KxWjEL&g2d4LMdwccwlr͛Mo-fyAũ5M2Bi"j]4Q1ildG Ce=Fl=6s鐫X oQqΉk1rU4μ5˂n͎"> &-{A ^"]y'U뾕*$·{Qs~3&ǟ&E/) hQzcxIKО}>s61 Үl' M =SUh8=(!o(^w`u> L qmDy2!d~j2dv&cSO;69Ǧc= _.|*|=MR$E.I*I="i( '?i2 p ~ZVˊc=E_}_o/~C_D=$A vD=%!DbGf=ĎD=$A IzRw"A"O#A rD{"~;\M11hq2W5 F x~ ,*My/C-2" Bg* Y1jRZ޺W5qQ bzG+F$ 㥡d9!3xƈSݼ&_ΒϷ\L L&.PeЭ5T~M)ӧO)Wwe]^owyiĦOGuO?i^OU=//?E_ijýƦ>W &GS"A rDo2p)z:8'O")~pSt<ǐ" 7ES)@#?h$?n6g8m 4ӁF~8~@#oNۤp<6ylޜf?:e~zS^.ӻ̟˫4b#jgyet^^ 4O~)OU҆O̾ʮJVzk.L&M^MvD?!G"G&DoD)G>t97>t)ӧOyE꾝jpҧg8W o1("QuE?¡9HrZSe^Q ph-g&dr&7&3M&g2mo&;Ǧcsl fcsltlc;{w+ȂIq 0)$CRբ UQ@U*okM U@v0fhV|OC%|Д? k 辂s f{Hc"5xTUR&e*KR*ESŭBQw=߬U5`}fA~H+e+O')5fR5}iT BuCSk_/UMg ɼď!z_i fNM[眮xSE)[E"%m1ɺ9E b5ᦂkۻf. :Q/@1Ӌxq_"Iцi 8znhB\Y+lSW ]$Z[tɮgs3RJۨPMIEsjPJAS)gբu%ÇP2w{5Ld5?߅BxB& |LL&o2/Lfg29ٛLd4LvM fα96{&ش.|"| _-E.|_o/\E"')^$)rI\"%)LR!EC^@rPaEAڄ"ȮPjpms+%v[%~o&˨*DZZDA1G#WɚU;vW|\K27[4 _VıeJ4$A=^<< g/b,Fu1I*3OP٧^i9RMiJADW3*Q  |OG&]jEcgޣGj#8hU\?j9E0:i2;ydr&Sٙ+wccsl~+`knHBL6_qeܥq,de䒗9 8ӝÉu|,@D AEn+UEDPjXڭDJ)#H݋%G(e 'q_2چTO7/Y{3=$l/9K6o!WɶBHz8ݷ=иoۧ/vnp/l%leuuU[+ZDВt6D%?OxE풺K}ۤHnŊt6u|7%53=n Z0lFՍ*3̟6ɴ2yԱӎMαyآoL  eWȟ"2i4#`{ IdAejuI)bt"zdVa'  ^ P"1$9ӶMЖ4ѨS15b ܖ$kkXFhdyԆ]E)j;QgHS.2O>g|TST+ޫ8_W͟C=4 !X]~J1x%IGUIIB*#qEħk/|4:uO x&L"G0mg v ^FB}RF9=._x&snȧ6a/n,Ц.d0=ir7slGmVd⢏b!H0Iw)J'80})( A#nN2ٝ2Nyu]O~Flt^Qo{i^OU-/=E_ijOpcӧ1D?$A d8rStpN"`7E@SMz8C~oNO~hp@#Fޜ᤟p0HO@#Fv9Koncylis<)Oy5vʫLO2}.*bӈMث4/j-/=E_ijOp?4[i7[5[ioօdɫ zJC<DM"ވ GS}>vtm})SO}; '?Op{ u/IeGxRɳw<9q:)p!]Z LelJeؤw|" ,\KlIVi;Rp.^΀ ٦RP! Kk?WPMbٞ[dZZwMMXx}Z|A'ĆLPMU `6`|'Zy·8}l V@OMOd^plzifؼrjH9u}LTQxPpCwm{G!ӏbpB(ˉUI Uu3FufJ/7E]522=B6\JqHzM, $C"{ *Kmqlp 55FDl7qT\ `^d2ux9m|0Hw ^SsͱhɀsTADT`v)x{A,D̼ɤUV*yڛۜCDʸ} RW7 N+w &Bʈ.)uUPq(e*oQDݲ -=#49,uI2[j~c!PJ7o/E`=Zydr&ӮL&3&o:69]&Ա96c5^&T.R}Le(Mkz0)"ӆ6HE2r5*_ڹL}iM|_I7 Md9~ij϶[>Y+I.d]CƳTFD.T}b,C _EmޓB'}X$$A&E6YhL}WUy⤳MRCPrn龴v,G1ɭ H,\bgjI<|tonQ.s(6ʁ4o߰꼡PW 13̟6ɴ4yԱӎMαiثEO}:| _ _$EO}:IqEO}qEO'}pqEO tYї_/vዾ} AA[n;":"AۓbG_G#A"A r"Xq׋6[e6ꔿn.&ɣe>Yݠ\+{*zЙN ^-WS 5RGA\H2RzaAaYxbAu[F7銄#BF#7BG$VfO$ka_½ϟϊH%igheJUE2dv땜;x NzS槧̟>ev̫S%u2.˼$u7͟|et^S}.ù{"e8Ap#ˉ)vS;E@n~pbsN"ٜd7H3hiwR@#}@<6ylڝ&7<6==e)yl~zwy{sq;bӧ#@v^O2ݷՆF_i˾ʮʻVvVdM"DD;"zǻt9:2}8GOg83tO#+[֋V/y'B!6EB"7Y᪗482N5^딑=EzU$}}>"1h9y=@nA* N" -Xc@nc~fy17/SO u++gtls15yor[Tai2!SdBdEl 뙔g\~@%8߰LEF,` lU q".T_ɅdU7˛T Ls w"\"rD /Nah77qk$,L@'!p#_LOMOd ԱӎMαy2j'):WKe,IiR9K:29B9)DqPYID8xש"y= g6$O~2GI92T*"_:##"=t}}̧?OAp`NU}UU!DH+lG> an PO#|POj;i,F#hk̵h &@&0q3ƉϲHvjfQ qSzDG89=Ajsѥ//eScDwK:m&)% BSE|IOnsS`Er2nOY8\6 rjx+`6P]ι/7HU *S01JrpM]pY4j"=,ɨTCZ/>L&ӧM&g2L^96?ulcsl^:"|ş_*I$ENR S(Ÿ"-ZIetgyo!lc5 u؍%1 8*b<ȩl`}6RWH,K„$(j"z*Ů^-#vp-D#DyDaZ>D(C,kih3Ézy pW QWe0|-yO#wEQUp iL 5嵷 %D` h$p 3$uT%MP,ׅ$캯l]nF;jWWv"3ɴk2;LɛMαiױ96=ulrM+ǖ~<u4DQ*/S6?U1koԳÒjEs ~,5j_&e~{btF)4y7a&W1XTblfITmKz\6+n0Ж-Ŏ &#,QQp(i̠d Le@{zɖ]4+TWTr ~;NfNXq{B|[6&"z SJН\2fn>Hk?ʖ< [ᐩ?#. {$cr?ED iٙLKMO?_4|ūJR4IG_G_pG_O}E.|n"&M]D V##|OD=)vDuD;"D+"Ď/'d1ȤMӦ3:% V1GR]2ge #CX>LlS$zԇ5vLvd=)qyrEJGʗ85/˞4\~c\je5M;duWĈ#5u ~935ϬEs&K7DvASda*X~)ӧO)o}w]%IoGltS4/ӧ"?vmM.I]D_OmN")rSShw}x 'Fڝ$7H@%7H7c<6yl)OcӻLe{kq;bӧ#@v^O66O?_VrVmk__&ӧM/oA %A}>ޥ}}ӧ>~:ɟܦn!ajEʐ{ޮ?c!{'#ױ NO ऎe^$"bXq^"qB е h[꼽+d`= C7y[\<] )b {O^ :zK`dé # `Ej!~+7HhqІ ֳx 3 y8o / L%"S^MZKP΅/5/DC0p`2-Lfg2{ya2;ٙdv&Ӧpl^86;&شplvMα;6;ǦMf؇ (:ZiXs}EN5&bW:H^CDosaxlT3tU[j_*ȪE!2dQLhYğD2ˈÑPubɌ ğC#<7)md͇"ܮC3[ K`okZ~!\^"PFNHcjBGVס'<hU|OzZ>,/Y[%xA6ȖޢɂlI&܄#j %)IA?PlGK]| _ȇ/vII\bh%)vI}"h3IOR-9(B"y(B&aE1m iu/4!:n%!pc J!ܦѤCcAV\Tq5ET)^}|>8B*: J?%՝눅.~:x#WeED-;Xؒ 8fs&8 "=, v ՝i3BP=^&P 6350"$٠]P4`9kR\D3-[Dt*JQe6~bURK%>a&7I"CcA)-U6.mdv&LMɛd4ccsltlMαyӱ' $B>#rKwT+vPG~x.@UVd׳n(c4븽ԪjJ6="[iRFɞNHa^>G Ђ]Gpkq_$ PaՁ4ՠnMyBT 3_;"%*N@@#$A:i`akz7\ !-ƨBd}@*MqfnE'đqJKeL)RSȽiMx$ [҇5c+09v`2-Lfg2yya2;ədr&ӦfslZ86;fؼplvα;69Mf-E>|"| _.|f"V')vIV')vI:;(B+;(B]y8W&?]EYrG_<5WD؞M Vx"6OnOAٓ~"ĎD"GїAP/SNFCnnB=@֣ϸGvȚ_  ȊH+q#@%`,f} @* >̈3r9h$uEjtC9Mk"W@uϊ/%:/tDYVOLٟ2/N);eLi]]^+R]&wi."]{E6hxW "6/ת %Sx^1_@, e8=ě A ޝ"9Ex Nޜ"@#pFޜFڝ9i?7Mc8cp2-j8ث/hE^ 4~bwiW_32hVm/nyemUKGDh~}?G.ˋS^O.uϋutU!vC zDzuy/k1T 9${c4>LA&FoX_** ɚͪ0Sһ2q[ =.ۅu#7Q![3BQ+epͶo>ItTa jL0&3ɴ0Lfo29yd&slZ86;fؼplrα;6;ǦM8var m'kEFKۋY\ΓC S0< S 9| Ǡ5+jQA~/>CH()b^OS=LpDkPUrMA=JQ 7RJRU7Xj9Me 3k?YmD҆` 39څ: ~z_rSu+/PC$Sŭ.0H*'Q|6Fjbc3SȠKQh c3 $\XI” `9ĨN~IMA}_FXo#]XCo uZH>ԗ %&],9}'S&bx*DM|FFM͛!6 [/7i#QJ7"]H=)[%zjƗ6h(L4QF}}*|^&dv&7&3Mfg2mo&;Ǧcsl &csltl~slx؅/]bȇ/v6/x%)II]b')rI7$"-;(B"oBP؈]%(9kcprI]Q%_8as Tte`f-EASxq݂E9ߓ^J7?f5pnx)zE=(Xm.EƤ༦EPyǑ"_oDn;f"T))m"}}*Fb 8+2(;|C~ h3OظC9Tۍv)9F|!UC7# (Қy^"6mGXS[zE9{#*'w ϖ-\6^, OGb͊5MWqoI8 4m4dsS,[,zU%a'ɴ0ML&g2y̛ٙ&ӛαic±96;&6c __E.| _E|Z/%)Z/%)З"З"uvM\veʱ}n6׊]Ac?Ļ Of Iy"7{RO#A"A z")U b[N#cNI]rz n'CӲo2)[Fc;mL(L_{DSߓjNƠ3K<*U];BCF)wD:`^j a@Jc"fdG?Qs\NLɟ2/N);eLy]]^+R]&wy.˫)ޥyWOnyyՠ)m}p_0Eh^1_B]Ap~)?8ASX)/@#pFڜFޝ9+tywl[ylN]^ '~{5Żث}hwyy5}2hVm/niemUK v O&t=]R"u]3+ >(of]mٳl˼"򻖟 2=`kjx<#~Elي; ү6 LT?ۥ. pT]ՑD-~Q^/랕Rն'$ݦ~ҩvI1XT':+6blMZ` 3 `[osUڍ8/Uz4KNq@M>V͂ԏ7!;t{0Ϭ+儆o*h[o6}4Aߍa5S8졻Կ@k:*8jOTp/8zRCl;Cpt8?<bgHC^*Eym>t [.TŗB nEljE{eG^Ř-ن*`ÊCII*2>c\ϰN̅t|X<0%uA+PDT\\Eö]"<"}w-X]#o*(5/#+In }M|)4S))I˱͈9MM |@>߭M[+ bvM!j I5C9ړAy (e~Q1'y%t݀*"@%]mHp6ځ_ =.&N^x[:aS|EM&Mfg2L^96?ulcslZ9*|E_/"I$ENR}S(B"}SI}Ӳ>]VqE]G_<6;"vylvDuDV#x[=)vDAA vD vD;":ARy* 2 h5I@U[ҁF`Ҡ{*r)Q0E+>0MR_>go6/zܽu&TVY<)SO2S)ow>}eZM~;b#"y??E_ivm͟&Ɏ]D_OmN")vSShwx 'Fޝd7@e7Ȼ7c<6yl)Ocӻ̟؛?62}:/Om}okn]2=5>mvy"G.Ď#G.G㿎̟>?NN >ݷ|ދ/; n_`*Pi{t}5J'̪mb`\-4V<u[\Y_SD]bC.&O@2븁 ӧ~E4+oQ7!VK4HZQ4ne|Q8W`3hSrl 7eX<'$Ғ?L ٙLd^dr&7ɴi2{96/cwlZ86;fcccy9"LSNZlEOX{\"X;ͫB?.~](JOE19w ;D$ =VtmG$/zN{6l"n:uSYϷ ?T,->$Ǟ= *!}b-L ID35Dt\eL^K}ZG2Ɔ#68!EQzIA̬Bw8MzUz.Jݣޭ鼫gn"Qf=7cvmD$^xc*XMF-M )6hOC>PsSLv3l7*Pkm`~^iT[b&o{[3FTҕF!!cB|͂Pz5ԡG&TnҌFdQ5TJLi!j=QyF] f| _ȇ/vII]bh%)vI}"h3IOR-9(B"y(&7(o&sOxnx2YG,VM GQ vKRRS?;6#\h)o:v>LL`QKU α?23-70'a$u%Eu;ERLcg|H1CX01_&qWc_Zm4՚*vwx!EL)!US~}>Ű^Mމ:uNӞQW]rR@#9L&g2Ldzj29iecslulrMOcұ5/'uVKq{S).>Wy9_3I"HY?RMyABӡazJVk+\jTMڻ}B_ ))JVTxZLDYD2H4e㭚ʥh|SC[fy.K(M U^ '+BŚ#~4O X+6#n/^7ȢLk!p)<y:!^Lc-HfSِI} ~iSF.1F WF[(x~a’mN*T'US)>VM5q::I]VNgCD/J c8e<)X[4^p c0D'卝ԬDm g]{&S&3W&:6ڱ96/{iO/vWkiO')vIIjE)OCrPWPd8)OΕosUVӲ?]Vpዟ/zȇ/r7}݈ ~JC"<ĎMxlGS"A rDmv+'݊ zJC"<Ď͞y"O zH'A rD9"߈ Ȳ k%ħlyb#iq,k:u3aGTxg;XT 4,CW!,26l=Y6bG}f>&Q\.ZE<ULjyhz?Y͔iHu?qq ׾f ؍oD)ӧO)Wwe]^owyiOGuyet^^5h' _/zkՆ%Ʀ>W &GS"A rDo2 vStpN"`7E@S68x ?a?En6Ohp@#FޜᤷN7HO@#Fv9oncylys<)ӧOy5~ʋLO2}.viĦOG@{^ezyy5KEO}}p5[i7[5[iJoօdɫ zJC<DM"ވ GS}>rto})SO}; '?Oppfy}Xr (z7nyBE(?yS櫬^5 bpXw" (%cQ)#fi8r'ZD/j!8xncC㮩 $8KnKd _j60jm&[o! }}I=&Qb=L*`R!v/:NY ]ӸZW X-ڄTeU;ik2C_ν  nQozޚOut|> m2;7LcSO;6;Ǧc? _E.|*|=MR$E.I*I="i(B,'?i2p. ~ZVˊc=E_}_o/~ _D=$A vD?%!ĞbGf޺D?$A I[OAD{"DbG#AǢflH|2x)^WITlLY Ue*5=ȈeKdr"$גK6AR9KƸ #$Sh )1AeObd,֔ S)I g\S~^}Ɇs4$$KZ"߫w?2Rs-wӧyyʋO2.Hݷ4b#ثO2:/4oyy)OU~҆%?W ;vD?%!DbG&o "pp)ޜ" ?E@nShsߦ@#=h 4 'pF~:H4hI]<6?f?Mn6cN2}Wc?;_e~zwy5vWFlt^ 4O~i^O@#d苞/4Zf+?/2f+f+m6[7[W&S&Zo&#)>D9"7 D;}#OxcON2W)/f8 'zsEݿp& rz(^AX`*x"FE9-3K&n`,:mJ"K#wK貺6H>erpT)cȧ 8CaQcygD//2Wa+MQ )؀ED{*i dCK:CUcb,C9 qTLVd&3 sBv+c%$Q0ӯNlV{Y^vB⓺dZLd&dv&3LMɛαyc±96;&6c/2Ҧh*ӄG7%$z!") .6ʫ՛>bڀmW  KPkj6Ȥ%sL@d5@)ŐIKR'%rP!EhEAvP=!Eh2:1CsV_91\"aZϸ zA8!|5 Mrmr D |\.J]oJGy_+a'<{Ef="2lY c,:oYg38uׯ#IAH?7ڄ|e ]8q&"ڄ* ]&́ǭM07Hդ(`E| \߰ 跫`SC~SƩ[CY\3DC8«t O9T4Z $2}sQCo2hG=$ 0Y$g29idv&M&g2odvαyױ96m:6yfش{yEtZF%EHYUI=Y=,z/ L*0DE6ycU_Dc|gBnW̌evO)ʔw)Yx@jJniQ_d_0%X(&D]A 뷕Yx`*Q*(EzGp2Kwɛ<j.U_dA@  }hUA{E}5^F.l4sҾQ /@h+);ٙLdZLdr&7ɼi2{cwl^86;&ccwU]bhȅ/v}"x3|_$+$PP}ɼ+}ѮcӢX9/ _owy3|}ZQ<'h~"wnV Iy"7{RO#A"A z"șLJ2\ī qz(&!I)B:u+Қ::\fHoTR`&Sf:SU@ 9Hqv[>Wfq=qLo"rS#"p[2uc˾ ;evLiqN)?evLLopl%uyqW..]"]{E6hhW "6/ת %S&uwNZ`%/ e8=ě A ڝ"9Ex Nڜ"xjwg8mp~@#NUR_0иBOnvVyqʫdZpwcE}?O>hԥ)Hx 犺<'o.̊O"OV`n< ]5Ù͔HőꇒE8ΪQK.[:ZwyYڥ~h `.$dRwcO/mS/Pʈ); g=D݂r_۴_r \eU2n%XJy,DYjwM.l$[/>/նC#TG!3`T.8oT`/dy"ݡ)M)#?E+@R@d@赆"i#LOMOd^rl~ifؼtlg2{EŨnd1oI1ٞr%?ǹ[5/m!؊ F E{18\Pf$݃pn#ŌUg䀼e%,4-.RX*ՒԀ\4Gts(qBJgq$_@1C^sՐ1Ch]"v]>oJ7$*L1Rnf&ɇpgDڍ#$EU,E"GI_@b ޡ6hJk]7Ctګg%ŧ!$qW1||MܓI3vV2#6Rl!`|{sn7Q Uhi Af,XݶlwqX:d**{Rq `r/neh*zi^7,(#IWh0SEM.R툡uY'!B䵁SOoLOMOd^pl~i&ؼrU>ȅ/ZEI?%)Z&P> EA^B&'tĖR;A MJm9M/kʈ)݋0 Ud>Mə̻&3Ld^wcS&شrߨ~˒*^s'IeJMQlQL uQ#aLvUk5+r+j""ȡ琌ePM?/LNkPOQz6|Wo::k_/ /A硄؛2ήlY+I͊" m.C7()̤&Yiٙ+|i&ؼt5~\eZ$)~Iꏣ/~ EP䏣/~ 8Ӏ/~ZVˊ?Xh7| _kfG.͎⿎z++D vDuDgEAۓbG_GyD+"M'Vtk}oXNS2Lr ::R)C h_Xh_ [ΡP +:ì-fEGRK7 bivp5qNMCYiLh?ߚ9F1]~zS&wEne]fw]~OӼ̟|/4ڟ"d816cS '9"vNvD}=9EnwMNlN")rS13iw@#uo 4.Fƭylvش;nyl~zS.ӧ<@vOG̟݁}mmEF_nkn\2=5>m~ybG.Ď⿞#G.GL>?NN 6ݷt ğPHϿ]uEV )Y%+E4jŇ\qHbW,ZS+¯Cxp鵯ҍȻ J DKTQ Dkí b,sX)CO,7(T84zĥE%vv !^&g}bl( tU( xi0tAEY4pMRt4M!Oz^SQ*Av^d>(Y7P_t3VAW}-U&2JjM5Qƻ7dZE)8씏5^R*@bm91s:ɐvK4ِvhs<EZ\uv".ˍ_ "2$]nD1RL&o쫏}jъcvw|"ȶyk%\GKG.M#%l~M7-Hʀf~݈ "'p˜M$gz%H@uBՆ E_(SDI<Ұp Z55MZ)`,sC1o/Wʸ)kӹ/jEF"U HM ]*"Uq<`Tߠ *o*aԖQ}dGC ^o.qp&3ɴ0L&o29yd&/slvޱycwlr͛Mޱۅ/r|E"؅/\E>|-#KR$ŋ$E.IKR$EI|Z/EAPPaECrP6y(r3] KޟhGC)@z([q]o` 45G? ƉuR*)@0ZjWH򍒜7Qkݘk~D3<ܠZpTaTfIf[SАE`s9`&KV*$$,3ɳ- 6jLR-eQ^o_nڃ-dSx ğt #\ԞuCsQ=P͙*47L:3BSYL!*:qwR"~Cq_2LMٛα96:69Mf6c]n?h%ES9*&ǙXmCOer61D KYd/ՓDrB,٠]=!h^Fʩ-V/qc^/ʋ|)#Īo.$x{9b-Ʀ4r\$6a8-Bw~AљW>>7~`d,@O!-':I0vސ9ƴdB S6 V4VDo&Dv+ިnAۓDo"G#hE#ADQ~09-|G캽D/_N YNKG1u$YF#r 8>P׷z̋."@ˋ;h$!8d CAN?~'wʴ8eryqN)?evLLe^%K"uevw62)ޥyWOnyyՠ)m}p_0Ex^1VD2ot&y"h58S~p7fpW1;E6и9E51ηhIݷJjsR W<6c*/Ny5ش;LNylhE^ 4~bwiW_0ݷ/nkՆ26[:/nK&Z__^}K"D}9wI]^~w{Zp}BfkuEij']_kjE ! #|Չ७La^ԗ\9FVWS^LJ*!Z%6H4Ґ_pQvoW/{Ud8*] xRa4nsGpX8lJ[ҟմ!m\'G"8nęh^nJpdќjte!8^͟eh+Mue~u %E J҉l}IbU4u Odwya2?5>m29ieʱcӧcұ,cӸ֪i;f}BZū9tcEdɶeĩ;ܓME*`bֈo<䌚JMz Aɭ[ŏg(~҆(dB$5e H咧9rV)񹇦<)uu:/ 9#ԇ, jꪶ:W4 RNg4p8 iə+WO?_4|ūJR4I$ū$"9(BK(o(B^IȢԔ)qP )JyMU }eC8SJ"ZVL 7/ cKHYPYAp].oSO))D[sK xBS/UgiWib,EzO 1S.Oa[%\ ע+o rAPu>;LѻNiKTȱ' ⧄,-ꍽqU늇d9O4!:Ҝ6$zl Nci*r0 0nbX m6QU. 7əL&3LdZvcSfؼtl!M!4I$ҫՂ̢0,qG'mAbyZqUOrF)vՄ3&U_bp<-]MC(ɳGoYw/4yD::!9YD$G{i0Gzɱo`8DRǴtN[4:"qFEp#xdGAShw)ڝ" 7E@_>;nwg8 4_7'u 4.Fylrؼ;Mnyl~zS.ӧ<@vĦOǴ̟}mmşF_웭욭lelOMO_%AK#诧}K)ӧO}t?=ùOUB* $O?9FVlEp!ՠ_tL x3Yv"!W ;ۛq"u lKW's2k H-uEi"\8$lG08,-L&ӧM&g2L^96=ulcslZ9H)玈h>EHU2T>ɓj4zYl1i! 6PŞ/*_{Y$*yTFoD]1]=@7xfVxC"%@ Ԩu ҽ`Nj6r}} cFH91¡a߸U~njR^:'ru C*k-^co|J7#ݾͤB)OI1pPzPC_RN%u~I&6h ( ]S3P+;S= LY>l>Y|@QR ;>(4y}v@b8M .֓?ՈXԱkɭpYƴF!vIޛԒ^SJ ݋D J!nY5UdL ǦMvlv+^/~]UZ%)zI\UZAz EP%AZ: acLgsl!J֍Q.[Я /lxHpBcw)=a~b/"65W#D)W4oQgK^IFu(%+BAxsԴH)L缔v*WϾŋbTD{9iE.\DP/zSRFn? }5peI6XfWR|f 7Υ%iyEpKfѥJ[T3wD e.bFnx@43XA!ӫ ueLEjWwc<6.Fidv&ӮL&3W&:69Ǧ]fԱ96[Bnz!@gR _fKVH \-u<Dǫ)^94y }!!q#ӄ;@IY =&i9~h;h$cWw#˟^ϞLeJ ʾ(iR_l"vCRaOd0t7eerLS%u2.uOӼL|/4ڟ"d816coS ';"wNvD5EnwMNlN")rS13yw@#u~R@#Nh/hܝ&7M鯛ǦL>?>MO2}.oc4nGltޞh鼼=ݷۆF_i˾JJVrVd]"DD9"zǻt9:28GOg83t "cRS͟/0# "' 8ckTN9c[C;k׸5x5d{6!"/,zu,u#) )J#2E7iٺE,4⁁uk6hJDÚՠ" 4咥gg&RV)Q_Ѵɴ0MLfg2{ə̛&7c±96{ǦcslvMޱ96o:6y&hȅ/\"ȇ/v7.I"IKR-$E.IORo&)IaEC^@vP!EAބ"졈'}`A٠8fK}µD88DqNyI$4 0ڸ MX]O&/\_5;9jbLԺ\z2 Խ!Чè V]Y"e1%x!-t n\a#S0%-80%)B+ U/7]N(AFWeK+Υ(:^|c`g29ydv&Mfg2odvαiױ96m:6{&شǮҧ)X0CldG*_E5R5-cGb^磚@L!joGxɢHcz98Kb9><>k i!a{h{D=$cn<{n)uܪ_&ѵM,\be< }ud 6Q$A_!i|\v-I"R!sRYYdckj^@5`_$(j2IͿD7d<1,y72c/ʈ&ҋ#B&5<D[+ mia2;ٛ ٙLd&37M&o2;cslM &csltlM.|"| _/.|_o/~ _ $E+$EPP}Ѯɼ+}cӢX9/ _}fK"vylO&Dv+<ě݊'x' I}?D"Gъ"G#ˉcp ml5h%2|_Za!QXX^[%Ν\y $5Gͷ7dRp[6Lݸ(YWuR_s\rz #.uJkdcd괯&1Dd.qVWo͹D6Vһ+2cqLS&wOLٝ2Sfwʼyv../I]^K.˼y'wSK"b" /ASۆZd2+]Ap~Z N)/X)ϏǬyw4 4hI4.!ylǦݱU^jlyw8wy5y4"b`k1G˫O˼ۆZ᾿̻V_fy W-///>%𪬘֜RhꝝH$JȣAUW l: M \M\m+q PdQ=dxQ"CrA^Z (<Jˆf&dr&7&3M&g2mo&;cslM fcsltlzslyY!+u%)؋2σ fhJ@| 8+Ր>ޡ|Wq_uVmPT{-L}^NZ$iVPɠ(VT2(0\((Ή i3@!(|@RqT᭻3gVos_pZ䒤`zwE&X#iц_w̋z©ń dECxɪ|hF^u0 > `ʢ U&,@2ĕoNԜ6eeD!@nlIZR1*"?{8[u)`*l*%[5fr.BcƢ߭p&3ɼ0Lfo29yd~396-cwl^86;&cӦcӛcŋ.|__>| _-|$ŋ$E.IORHR$>IKR-I9(B (B""9(" ECc\!wmᢢMȈn(ϫzm^mCl:bjD#AIo͘6ʘl3M疢+c&jW$ڈ({Yէe,c$>.5}N5^58uEFDbYDuG'}U@E[=$EH%wTG/i Ob~#u/䘩H(eOBLԲ^ѦF(* CN5TVQJ]xYGi"Y- 㯨$$TT8FT@(؎QN5bm (>lۭ{+IAuEckHfb4CI`RG*eAsB,&FED+2] H}h N?WJTTfJMI?;h`Mkeyw!'iOAȚF5| _ȇI\I\}y( }y(B_xdZΕߏxױyQV/h3|}ZAc{"7y'h[ V|?Ļ=)OfO rD9"VD9"_N )ɋJv׹NfRQGݐxZ{p^|5]J=#Fp @s=Dq9MAe5Y%Cr|?>d$ybs8eZ2Sfʼ8erٟ2SSSvwwyI.H]w]ͻLowy1E=-")m"/4?Em8^U 2+ (D 'h"h%J;EY)NcxwcV;isiwR4<6c*/Ny5ؼ;LNy_}@#/"js_K݁F^@Vem}p_f/f˼Rɫ+v O&t=]R"u]3+t!eR"Pgwo)4UzPC?y,#.u"TS~#W- qE\ݠGѬuG`}S, v$!+%dM=М%%y{Gl`N S sM6nòFfL ۩(qd)5 mߨ,cSEuC|n:"aˉn_}] eZ4BGȹp^|\yQG=`H^mqn6f<<d~j2dv&cSO;6;c辉$TEx`H.]K9rSd c±QUL p~|RԺ2;n̶h<zZ(!(MJTł84,9ˑ;3|0L6ɼ2yԱӎαi؋O:| _ _$EO:IKRJR+(O""{Sf_=|HͫTq@D#3%x =| O.xűdӀ㸸MMQS.#Tt͸, ދ/Oy(ʂY]VqE]/G_<6;"vylvDuDV#x[A⿎=)rDAA vD rD;"A2h].y]opVL4l'2;`=5o3Y*^lu6OdD+ˑc6͒spo3K(Z MJoǔ^՘ ?1M9_gx SL>ev̫S%u2.wyߎǧi^O?>EO}Ol2?)]Ļ ';"ڝ" 7ES'vM)Nr;InF?Knw'u 4җ4cǦylvcSOw?}w#6}:b}m4net^ޟlm/4el%lf+f+uezj2}&D]"D=ǎ]GOO?}3mwT;FȔ?ꊴ` {,Տշy,|'G}Uz3 %o%$v٪/,2}b]QHWX2z2kv 6hT(bLSCFIу"4eی&~:I>@#}7WqIznQw ^)ŗc7~ɾ c(Mu{0*jU4dԓ>9_WɴEer5 DM^Vlɴ0ML&g2yə̛&αyc±96;&6wq׫t RIls|Lţuy+AtEy)%G N{eQq\E1D-?El<"uHKKi&FEff2gKsDED9P}|$/2PG&H !@~?jqMH9\}j5˱S \XhkLd[ܑK _8TFS\!kNu#|" g%^3H⇇.5%#GjMѦ4///x)Gq siZ˱ld[-SZ*6XZПEBTS{Q03lᓄ $zXZf&\Q&:hC}TCAd ׎B(rsR-n<_6*$r"4Cɦ#7Ipx!DOQF~iF8G囲,`ꎅ*qE>DAGpi1ZN誶LL&o2/L&g29ٛLd4LvM fα96{&ؼ.|"| _-E.|_o/~ _.I"IKR-$.IORm&)IaECZ@vPaEAބ"E2@ 㡖|PJHqfUpfV-ل$bì2X/L- !}YĐ dJxYF3#N 4 fNCE&+ `b;)Pz7,B]FTp%7}3j/VȤ{RIT pKbLZvR "RPijK/EAD]z~t3gKYIN84J8EMH_d=((S̐dvkY[Jp$ѣ{UQalLd5dv&owcS&ؼrlɫ"o!4yc{" +ݚ%nBH EWO` A#4҅r 3G̫8@ߠ^([lPB^,P*ܿ &Q v!]GD2NxMy&:wiS*E }̪#p2RzҔxLZn&գҒFi؊TʩcWYPB(n dY.dq!Y]Ȳ%,[\bOl]$V[\bfbGb%|/_(_ʗ%|+_Y|&Oї"}C" ECݐKWg!o%}CثcGb%҇k|+_*_<҇D6-;XAڞV#d9؜I- }HmϤAI#) D8"HG'Nx7u}D{_ ym>߹ _uou @?^ebz~J=]Njjԭi!¨7HME]FHoc@/(1h߽;hwyō];;2BJq,UVWY,nխUʺʛ,,OI^֟-~"*m~U?RE UU_l*y"íЗLEp.)yHl3+\Af8Ad87UK>NlĩV,1P"P"`Wù4CA㶆SQW]RШJ]qFY*uغcVzlyޖVC+N^{[˟MAR%u_ۂU~,h\䡺o[и˟1rc[ey8_rغ9R_Η|y{ cK->}HmA ]At:OWt.!ݷMVݥt>g}4J9D>rϗy+]B.ojsB&ONO 5zF#[ڌ?z`_nW}E/`UT܊?_o" Ց*ֱOA'|Ywe>?`FNzS<Fiz{XXM2@lϮ.u ^KKfRX& _G|15m] b0eX ՛#b3>jy&o'(uD!<M,$o6Ln_Z4dvBeȋĖ-Nlqgps\3`=AsL 稙|밣_>؈)%y[zl@ΦqH78Nw8QS <ѳ/>-orMtH<<':~2>l`s:aNz* ˗S)> *~e5{t>.yL>a[ot5@VIՇ.Y-LlI) Б[I8\E gGA!qEŘTccħ7`>܇@ ,k# a~G@kYZLڙ2L}1m_X{gd^!;j4l08]ހSa%86~Ǽ>όfOV|ft@P"gߋr4k^~ :D>rsaMpM3gD /ⰜhY/#K_3"4΃X׉. 4j*@upEf)-[A_ Y,Y\Ȳ y4ۉ.eث%O˗~|+_,_&%O|IkRjR+(O~""< o] z{+G4:-"py@HDթܧ͆ovm0P||G lBbR^ߐ*Uj٪ ֌͊[/O6Ǟ.۸_ˍ4x.;P㝝d:wFH"Q:Y[)qny :b YPjq؊C1^bgJl-.e3'&') q3,9Jdt߫I&<-$ozZ[LH親Z dh~hi 学\d-"Mek))1BX|?sjeH_ _au=Sw6z+r}UM.|,»;+Sr9Lq]`޼ in94  bʹhE[G ^؆k27Ҕ/낪SUj}dIH/ j㞯'ƴ1ByLokErb9G ]ÿ Y,Y\Ȳ y4ۉ.uث%O˗~|+_ /m pX>VXʗ^GJ{r/j/ K7y {7ۍQ_o֊\_\eyUʺZ^{YW^^UlyZ{ET_ྞev_^ h>/0З|}p7p0~cҧD<$A d8t*y* *u*Tp©]e*dt/˷JW[Vlv^ ?+/Ӿ,+ALWK/6Z>ЗayH'AI>}JCO<ݧMO=ݷZeyU^pS |[ù?4(KoU,w˼-i(vD/V޸zy?Lö;ݲsUy%sn#Kf7w^ha{8ؤd4vmw 6(p .0r>_ȦaXxŴ$4e:L3Y~(f .Y Yӷ=7kMӸ3Hec@Jrd*3@N#t*'E3oivnЅ6OkumOx;;rt.H.y34 :\N8g3H\׉OoJף8z6€ZW1z Թ m8VcE*6^s/U-[Ey8J5rP[98&vOx@G'z3Ml"Ťp':;i#q_ʹBN6< ).BeŅ,>dq!fCزHlu>u[]bOlu-ʗ.ʗ%||+_ʗ%|fR_5)Y4)uMJ|ERפ5)MJ]&I""ꠈz( ("ꡈ8("PD>4\VpILRbz l*2y p4ezw?}l~#d[K:U:);#qP? pxϺ%m:W|90"XRvLi6=zPB7kQV>æ9GCe_DBkoDPC6v%2l^}l hFlGF6c ǜ؛[51چzF3KVn#@}z.BeŅ,>du!fCزHlu->u[\bOlqʗ.ʗ||+_ʗ%|fR_5)y!ߤ5)lR⛔8(Oї>D_⡈8(PD< y!y8?CL%҇k;WNJ%VZ/}˗c/ yHm ]؛ӊ%$i8"Hӊ͙ԒDLJ8"HARO#A qD|Aŧ#Pyǀ=:h]Vbq(i: |WlDJ.n3vKܗ-2Tr@|OvBq@y~Z/CP2߰i-]KJ0 = ؕv\ ׼׊pr al^VYnկ.VY*[enesů.n/.n/SRw?H]~"Ї*m~U?REUU_l*}"ín\R"f8W1ù$!p#dp y(VS?"Xc@ߏU:'@uL;P^Goq~56h@n94VIх 8̉UyB!Mu~/]L9'wWmuTmz t]jh@(5fXڎrQa+Kc25XLQ{ov³|x "^=pm$;!iw ,O 2d}~;du!2Ebo'ĖUbʗ>-_||-"m(" $6si'oۗY4힂7gP~2@1K^R 5m8^dۥY$P`C6U(7>aLjzY\oCBݐՅ,!Y]Ȳ%zfbOlu>5)')礞F59`]%F4{ )Q|?s}CVTDgf dYvG,*lec٤q|#wSBM>VշPiwG7KGX ,WG>Mn:05LUiaS2]1#;lvmC TUӡE4L)is7'BW@^OwUPis@xd{cnT6z;@YC%@MHΙ]hV9iՅ,_&>MlvbKl%O˗~|+_*_&O~IkRlR ("O~"" O|pB+B}X%bc/yԗ/qK6˗n]"HA qDn≠e%!RGB>ҧD>$A ݜIOfR?ADx"HRG#A| apXyWUa7P86l:yF+'Z j]K $re ⋃Ž=oμKj^F=?xǖhJoא^O"_?o!~7iE~NVYQ (pnͷ6a_Ä"Ȏ0~ԊTqE +VY|{ŭ*^{YW^^UlyZ{EO澞ev_^ h>|k51S+c;"HARO#dᔟA?pB 'ԫԩdSE^E NE O1P^ENE *8A>4CAzA8Anj8CTШ՟(ucS=>ccc[{t۫~j/ӽ,+q^^TlyZ{%hثO~/A_/yk5@_ꆭt,ꇭꆭ9lU?l],OCo,ҧt>A $A>yJCO=ݧMO<ݷZeyU^?[pS |[ù?5k91͗y4m_1 Iif[2/U=c 2z#c_>lؼvh-:]pF0%@|Dv; z],~Q#&+T1!3c?t&zWe/F#7+W!N%tSiȝ杬A8 m^`7%KoTҚFWHI`o.o89dQd9~'6/@186M%:514#{L \ImlҘQZ3 aZf<+Nl*ԒRJL{PHVi/+C#Z}=R (`5GLcz-҅M!2}Y! Y}ȲY\Bu3d!KlY$غHlq.'Ė֏vKK]_tQԕ/qK|RWd|OMJMJ]RߤdѤ5)uMJ}פdIGrPDPDQEdEAuPD=EdO=ߤmqpL+V1C/^ aSvBV.dyenbKlMluO[\b*I|Sє|<->HQQ\8/(ǔQjvR5ۼ߷V<]{ B[<tԢ7'RZwv~F'~vGx+Kл5Y)%Hz5⢪6(?#kLmiSz˔C>tt_Hjġ|~ [t'kB"o:0k2yp^`4|\ȫ >^۝6,Zo)I֫%*2ȶ#1'@h}S2BEB.BՇ,.d Y>Bv-V[.%غخ|ɢ|+_˗,ʗ%|/_ʗn/(_IS%ї&%If&堈>E_}"⠈nB  y!y8's+K^+>{|-їS3FKmv-;^W~I*U! | yxY]򐱗xU>t^-Fhv @l]?"nuVY*bŭUVY7WY>VyUu).uTC6u5Y䡊`{@1REUc2K@R c?f8D<$NqD,MR8!*u*UKy>lĩt"p.Pи'hsW4CARWQWJ}=8=ػե[걷eUluKcC=8y'{yKи}C׶qU >}4qw /n>p|YΗꆭԗey8_BAKO}D8"HD<ݧݷK.>}HmU uw%'m~WyƟDmYFg5Z*nkOynk4>0:nbgBs 1r&p6 aouBW|)=xuRx5_bq6~;0s:j8D0k~~CFt,,LٽI5F :+̤vbn;ƊSB7K&e0ln]$4!dY,.d!"dq! Y}B͐#dزHlu->u[\bOlu--%{ɣ$1^FAM}1B'hbL#y- {o7L瓃 >R^3D.EIt)sFqX=bkoxW'm1LKp Įl; դۛ7Ĺ37_xа0sTfE;&M5~C [E@`u|!lmoS*yȺ7'ϐ@{ h"(),-嵊̎!מH^Vu;dpu"ѮҦ6E"e1yT6VQщ]1 * Z0tA3{XiԄ Bc[bj68CȲY\CEBŅ,!Gȋ[]bOl]$V[]bfbGbiyWė/Y/qK\R_ĕ/,_ןW7)qMJ|Eפ5)MJ]&%Mj~"⠈z( ("ꡈ8("PD>~cĪ^:7(1LUi|8"?8\.Tw^V c! ;>"-"UKfƎjM'?pF1x*#d!mĴ8UL; =e$d0 ڑ2O)q喥A0-ms8B<ݪ+;´EBgJQoeF_ Qx.V4MIsX8FxVf+}U+HCtq%2Xi_}ONO,BiW77Rpc<p6l*p%Az6! YvCVn,>du!fKlq.u3'Ė^4^d Vi*l/&5ѐCDO l71s6(5L5-4mK0Ֆ\-+" dE+PL ۏ1\bOR{v*~4YNȮ 'dSE}/T^#*c~A8 p~A*u?NRJ [ز+[*d_-dY8?4b}}+hE_^ u_͗uw [|Y6#u]d`E6OSO>%ue+R}KBùqi(K۲3kjy%Duc#<B{Bf|!p ~"eŏ!qhfvYg[9Վx|(4 }8)z7##SŻj2ŏ\0Cn{w`iU=ztDwrqW0/:,mV}otHCZo=ڔ]>L?C!WmL=Y}ȧ6 xkF2NG}uئNL_&A˗ҕ8dl ܴ҄c/#etyPԗ/ꁓcNS8F,茕ʴ OxcFF7Dw^^Ơהnp\͢aUiagŦ/H9f6C2r2"^1PyVJeQx]I;:~{%ܔ,3ݲˡvN>v;I)y 9PyP/o4lNs5ԸOͤ͡q+dq!nB֧! YW!&Ė4%BbIe:%^3.1#G)rHo/kМ^O{w{i^Y04/Amsi, aL+x&#ņEzI~V1dSӉx~/5(L:<ıSe@60USV')O5äo ?;Iy"t>J+t ~A3mPHF;fTxfxeܿ ]ؿ,Y\Ȳ yp>MlvbKl]%c?-_|ɪ|-ORO|IKB6ї<m/}zo+qK\} A#B$ uD ?GLJ$9"HRGɿN->η?:/#N&>,>7l=:o+m'Rtaa="hs%3/[H[XgZνS,"g[V}P NK+R~.x5ۋV}-vjE),^Fio1a~kNBt5?L{*˷WY*jwI,]e*t>p5t DzU^uDNKwФb bAxہ:zPl,r4xNjƱUWkKy/x?xr?na\drhFO89^Xj/4{soW$z|Λ3ҬXͮǟy'wu8G? Wem/ADSmV(ӿ_=UzRӑ3%N=A(^m /֥X-rN~uՇ,Յ.d! Y7CCb"%ĖEbKlu->%n&$z/|aQP}n9wozi48{Of}Ӂi b5!py˩M?l/4v. z$^f/XҪQ_ڬlvw{DXa4i XoNߎb~qzB RI1đ )=썱;/8ZLjv,^s!8;˱壺ϑzT 5+m`٭sy{>et7gllpPZYy/8Ӈ?ʪsp;KAQ(5Ӛś ƝV9S5&;W\ґ1=fpҦ":)1@_yqvyx$Lڐ=9uU-fd2 O{đǠ'P3'D_r."ϣ^zK $pp Y\CEBVŅ,!yٗ]bKl-V[|bKlLlHUvK\R_dQĕ/qK}Wt|GZUlפ5)MJMJ\Rפ7)uMJ6&D_"⡈,:(""⠈nB"[1NCUPI;j 󆃃1`vFv-ؼѦH9c3^(-!'99:8&Tp@giLG^!bgLpD;hP;WŪ#!} T&̚NJxu&qɡ+[ӻ!8'o>dq!fC[v[]bfbOlu->^nn/ ` QNr1^mg{*)tq&2b<քjeqg}#Xt%B_ כ dc;?AO'Go.唑)uj oitSt/9ݒS:SXة<uP9rXO.%ctdKB^f}j~\܂@#o!ZD&I5.$LwЀӛi:33v˴,n03./! Y}ȺY\BVu3d!*[}b"%[6[|b+_(_ʗ|+_˗%K|Z/ߤ5)Y/ߤ5)ϡ/EA]/EAϡ/ YsG_غ8V/-_{y|}} ?MA;7ݙ'ts& uD:"HVD:"H:$.d Wtv[XyEkU:QqY2~#_KOEG*GvG n 0lݷӕ@%`uţs}شbm>h߼Бo{\+—vl.?5~_%,nկ,VY*[e,nusc׉Gb/H]{Y^ͽ,{y"]^{E~hdїW߯"1.j /2+_D2t&}"h%]NȦ_N]RW"u?'Խ.4+tY>4&|˭\~eW]g\+g/Qv{mL\iI_` `loDR¾}W|9SKo/3m xZe^ѝs0vb#y=lxƄv_33Y =v˻A"%:iusĎϓ#Yx(5{*NUy_gt_j7Qa Nli4r;w`rN+yL#;2ḱ,qaՉWXOCo.dYJlyغLlpM^*G)rN_=wyxag q4 ۸dZ_~ƞފ=9֗+Bo8P|M٢TdEW4ClS/ {@U*h%rea~ }i, :8Cn4/w'$[0"D(fE]W  N5<j0. 5o< Yu"ib˷[\b*WK/vRWdUVMJ6)vפdդVPDB6QEtEj8ne,(dHe#N6y1EeݷuRyfcJC5ۢ|2cDDY?ygH@}aF S@i5}qH||\7b*I dmr6 )QoC[4U(1Hzk'N4N6S>O\6e& } Y ~=Vȷ8K]%|ɿvyluD A~Zi:"HsDI#tw&$RGRG#_'NQePz@;/FIEV0jH>04MoX+#πžqc* fWLN <2} xu& p"Ӂ')хlXh1t0ĔLUUN&Ndi kqf 7v8ìZjYX,VY~{խVy,n/r/oR[]q<)om.ù{"e8Ap#_'vUT"P"_8""]8y̖SQw54z8A*u _4eW-N9=<]e*zl}{y_)hܮ튽4nev_Wmї~}e?l7laa4dvM"HD:"Ht8Ow>qt>yU>yok8UZUwy 7~?2!4G$^`g^te0atG ۴?xtz?Pl2UxMpf\_h\nJc:lֆy7!5DO!:6~)|[' }$JFPDOdȖFa3߹T},{J Q;H$Ȏ[cW^CU!q^cT3 ZHouՇ,Ņ,.d! Y7CVĖEbKl񉭋[|bKlLlHl(PݱRxv4rb⯐QK-a,Eh/橯KƼD{LF_ʼ0qo5P!xtFv/s˛ va=m[ ^GӉ&D[_>a)C(Ɯ){ %e(l:df#GN0/.xq5&=7fN;tdPdڅ@Ҷ4s2ִvy uZ/gQ-]4Kc;%=d+Nt؋Ѧh#hŸ `Iʘf<]{J!Z7Dq;˸d㜚Pl\12@w5X}oUnoF˩*iZyKtCk_4*Y]@h+rrׁbg!<>La[onZu|^ zeo&N,_?Յ,>d],.dq!Y\Ȳ$[.'.[\bKl-.u3#]ERWė/Y/uK\_ԕ/,_Q\Eפ7)Y4)uMJ]Rߤ5)lRꛔ:(" ("""⠈:(" EgPbQ))ϋ@+נCX|(xbu:4bkO,^)rU稵 -p9"U8m6=uNf?W}DSKv>fI![rܮ]ev1ZWbs4an 75}4Z&'{tSOXޅDg=$N6dpW#QU?D{{I`Nx, % Lv/JK%Zh%[Nf8O"* #yWMOazvu$aojl؋SO8p $+dΠ@*H1prw=q!"dq!Y! Y]Cl>du-[-.%غ[\EWԗ/Y/qK\R_ԕ/,_Q7)uMJV7)uMJsCuPDVCuPDsKvC\ї&,Kw˗G_YVD؞MA;DlN+~?3)OLA uD uD:"H}"[o1'n = 2pd" !,u)-]_9 ;6T^alZߤ{q`DCIx(^Jvm 6d[= XA38>{=j"阯Oڗ|}eVY*bխUVY6WY*˲KRW{yEne *ݥuQWWF}y5*}pW(e8eW ) 't>NȮ 'dSE}J*/M YeWFUzAn*uAgzlclU~=슓uWW/4b}}+hE_^ ubc8]ϗuw˲9le"HݧDtt>]RW"u?'Խ,4+tu7f<.|9L+B1Tz]ʶSb|OcU8z>boe}l|bPWk˯{!ࡆr;&ߤl=1vEJ7vy1eZTk*2Pvm݇W7Ҏ{hM՚;.׀iFoێK5he:+D$Nc$9bAn#5&8GGFqy\8:Fqu=^QuH l!r8Jxlٗ[:Ѿ'`vbgPI*hjE2M{ 9>fPH=agf}IcLiȁ8yU9X&W._YY]Ⱥ y4ۉ-.eثO˗||+_ />mR&II>"m(" Ӂ1Xxf\q`o̕:Iar@0~P˔~Xr3 _zGBwCDa2\$?o7UTC!/Q(صZE9~7络uKWbdSs [h6N}Y](7Cs* r1aMs)mii]pepܼ e8d% q+$O#d5FcKs[=RϥFkcb$uJ0ȉoLPZ(fuJCWy %LT˰9# -hre7dq!ӐŅw[\bnbKl}[W͐fo<—' [Q;Z~qLz'I_8)Ʃ鮏@8v8eб }e5iEbB[ѠF,v{_Ƣjj5܊w^Ƣ΄rɃ2,9Erh"zops5〻31tqnЄaxa+i-v"d}~;du!*Ubo'ĖUbʗ<-_|/lRIɷ?)oC}S)8 G_|+_[ԕ/.][9"O+A;G3)qDΤA#A ]A uDDd(!s#1_/-Rm'F: .V9yKUGӧ KvN;a ը.`ĉ]Ns|dETA  p. |>?nq{P\ ɋ>̚!I |L?цKU,^eqU%u|{/+u]WӾ@/6V2[Ep#dG TT"P"]8"P"]:] 8Aj8 ?'hJ]qFU4/hccˮ[[szl}Ut/co +|bov}Yݗ}cmF_|[ [ewتn*< Y|yG.$<']Oݧ9O~{qOj8m*W lAo w^=˃xW[x{ ;xSu|v~m32mAʻЋ}@EO ko{)6r"A7Ex^/9F`-)x4|-6n=2C<>ay1aR c@GN=L:+]N''(k[q1ˊIx֚jGk/,BeŅ,>du!fKlY$VزHlq.'Vا6nW_E+deHu_n7{~QC0sc~җy^>>Jl^i"~0Cu%x$FqL#ZPTF;4~o4/)MJi"X$t<DKa}3n4/Th`>(8Sj= uҺlH,)X@386]lOL_B˅,.d!"dq! Y|B͐Ň,.u[|b"%V[7[?ە/]/qK|ERWԕ/K]5)Y4)uMJ|Eפ5)MJ\&%I""ꠈx( (""⡈:(PD?Iۂ4=r.q iS$SGms2VмˠG'{hv+N`114Ք6i:*|eXF4i=( i,* jۛ ێ.7e}Jݧ,VyE~Ov{]h8W@qz^E^^ϼx4Φ:`b!"x&ӗ83 ^$ (߽IQ~iyId1bӸi͑;RT9W}hWaN'56X|_z4b!9#$223^T 5#lx3+Ҙ/ځD&X/a$15!K=r040ftSYZP#iG%+iKqNlQhfwt9*!Ohu4dvBeȋ֧Nlq-&|;I^sJNZg,8lVLxQT|%ܠ B Mhv%?J,va U_GKys2ߩfqy<50'_inn;F W[=OHGmF~ 3ȴO0?g/gtX)H;x8 ł}Ë3H4Gx ӺLLM>ޔzS>]@2LyUzL`'V D5dѹFt)GivtvdiS/<,@ό1wژ<*c= xG3|Xp^GM'(]5am&9^v,uYM? 68 P0yጭډH$[H1ZT=-#NfD£S vk5LާeT!<PҜr\y~]ٹ ~-d}~;du!2EbĖo'Ė_H,_|ɷ˗%hRI鷛&%ФS("߆"ꠈ;aXFqz'U!'nS^u k)E٤cF} Ω|2$"OGQSLlюE4Xު{obisp$lut}>}t۫}T)pn}|&umLU(BtMD"Fο'5ЏrtI0:[޻y]V$j96'M鿃N#n^,OCo.d]HlyزLEK]ԕ/YEMJݤ5)Y6PD EA]B%S^<@$z%?E;jhomhf8#vz+Hou;ǻIB4uD>r7w T\ӊKcB-gKpL8F%n&~$6htPmNFa!G^U\HJ8b? ~K;wYĽH&#L-hr&S4sThtc;)r Wդ8 Fv$yl͞tFNRviEk|S74(M09j8vfcoFϲo]NB꽌p̟iqP+U#28s6OA<v:(H1H*sBlb=V跏8V+_}C%|+_Y|9"HARO#dO#)$ D8"H6 uD>%!GLJ<ҧD<$A qD8"H$L4e=6ީoFCef*ǥs q=ݿ,&q}a#5SI{)O2ք%C,iÂ4HcIG魄)u+B ugqZgkcsE"ry ٧)8"u?bӊ߮+b/>|ҧKVc8/1}H'AI'}ӇtzOݧtxot۫"u?WyԧNsEj8} D ($$OS6,avZEqN3Yix1v4=_a@>.L l_8M>z;#s~D\EEȶ|,f~bbc/%m:Ȕ:n 8%>欴4ߜBs #y8M|ri ^1v txK>{L =w̴h(xM1xq:_tq^ҋ@gOiMyL 38Elk>4¬6ifBͳ6u_4PQߜKoS1p 5'@x^Vms8J?a/QrU$R8 ާHn2O4?ڢҏ+ %=$yv/_ YY]Ȳ y4ۉ-.e؋O˗~|+_,_&O~IkRlR (O~""ܻ?5aL7 p'|fEƶh 'SGu܍7(vӵ(ڢa6l#G:[Lv>N/]c缼b7Ag$~"$㩑5t2 =:J{!:L/7!<rs"e{ׂ2 4)75i^ޡt\Lϳ)bgz0m8߰#6ŁKpmnMb"mlpprĹLig|iOxT,Sz zض ӕ2NeZ@7hҦ(m"CG6eԣsJ=Q8mُr?l޽E^ @Ǩy^K_FSmx ߗzu|'hFl"+1)HÛy%B:{]+wV;˼`yZ"4o{iØyt=_)fr&absR4& ry]ŀ`imge7B!CB4ۉ-.e؋%O˗||+_,_&%O|IkRjR+(O|"" )O~pBc>=V跏8V+_}C%|+_Yė/qD>%!$RG&-GS"HA qDnN+A yJC"H<͙|̤O }H'A uD8"H=ċ-%F6|<ܧw {L[6˛v1,sW''6kNW;4L]mc9bv4~3uSz\w݌{ܯ~D+k7;?rR(m=ǩL_9ɼmwsܷ[\|U֧^euU^e}{yE~UŖ[]WG^eyڗ}y5 %Oї|}pk)Ɩoc$O }H'Ap'ĩpB 'īԩtSE^E NEO1P^ENE **qFy*hԇFFuFp44SA>444RW>NOP-^Nzlz*UoJʫO|{/ɟ{yQioW애b/>4~ҧKVct⇭↭9l?l],OCo }JCO=M"H=$ӧt>}>٤}U֧^ >p5+SùF4k2hgҶB Ncdz [Rݣ)RQZB&2g/$S?,{ [$O|ju"o~M4Fv 7 Il6&3/t|]ZhalSx# yKȯK/L96\^'Az\~kp0huʁp'#+ڇ R,BVeՅ>dq!fKlY$VزHlq.'ĖV,AowbFslv4|9 y/JcGV:yA3d$5LF$RʇbN[cUǜ.y^ƒcUGjcI{0k3CQ˼r'rExdnG6T~iKcx9|695C.9/Г1ꭶЈqZ 3@ _;G@) >#E&Gu/rCuֻq'͊Tr $Z4@63Z^xƞi=쾀D`.50 qI{{x[8Rj1GBPxDBal4;%"o`a#NK|`.oa+)ȹ;[mxnz \]>c A+Ym2Ȝ7 x-Ҹr^5Uzڥ YoЁđsCȲY\CEBՅ!Y]b"%ĖEbKlq>%n&|$+_(_ʗ%|+_˗%K|RפtѤ5)MJMJ]פ7)qMJ7&"⡈,:(""ꠈnBPd;t^^ B>?n i'u6h^ ʙ;R8¼YXnYAkt͛iY?Msui 7~>̑=)9隣G~aطOR;ΣQD ִz!E1|EV52%8N1GHu 1-x0Qd+=M1/bf(zXyt9 w(oG5GȽwAJr$NfH Y]ȺiBeț.u7%>Mlu{}[#N@2|54@Y~˼57vY#?~CG6v29okBhh{|c99fU}Fʬ6z]mzy|9eevD<=9FSH+oW?'8 mTr^5 E0r.F% .H-T7} Y|ȲY\B\Ȳ|{^v->u[\b%n&fE\R_+_'+ʗl/Ϲ!Rߤ5)lR⛔8("Oї>D_⡈:(PD< y!y8?CL%҇k;WNJ%VZ/}˗%҇D6-%9XAڞV#t9؜I- }HmϤAI톼"!:"HG'|Y>cuk~~>lE%]SٹL7n9l=2r豇y+ȣcNh$kE"^1ZWYnխd**_]RW^]RW^֧j/!TPEMݯ*'u9Y䡊`{@˟Mo"*1 }}vC^Q"f8W1ù$!p#dp y(VS?"Xc'ݷ EVt}HmS+ 'uJgRne8;3 0};ac8,+|$ÏHxYYox;װˁLH| uIq"~f; eqtozu` ؊.K(/Wj<3kHhC|"cci@y!`֜fێ3F1,PK2bn|l%;Cc[uŇ,Ņ.d! Y6CVEbKl񉭋V[}bKlLlHl:N8x+ >qKJ\?6Ѕd. N(xFЈ߀V{t*s8\ f iS*a,n^_S:ޜ*]YgƄsπn(:wcMCZhJDYPP[]rhWfEcȟ й8]luRM[wTvBsR4 t t)WKiYM>\(iHĮdBo8I#Q Eff~6~>Dև#ە(5 䛦vH͠ ESBI4y:ͯ d>3`?- vg:N3'z,Q;l̬:]@p!r;PZ9 $$cg\4ZeҶL`4[.F9&Dn>tȔǙSTqye'-J_9H_Y"dq!fCVغHlu->e[\bOlq>ŕ/]/qK|EWԕ/K\5)Y4)qMJ|Eפ5)MJ\&MA]@qPD=EAPDM(pkѤn:;cj& Ȳ !ǜĘ6<#[K1s}WSځH9=MkJ| ˔{A% insTD$V_6r]HO5_y?6;<ӣrraL4uH0Z4VPz>wf?&U:A1#Nk,X%Pb𲎺oɯ&+  ksNzы<;H30A޶"zc#vɊ<2ksV9ޔi,Յ,>d].dq!Y\Ⱥ|[.'.[]bKl.e3#]ERWԗ/Y/uK]_ԕ/,_Q\ҧK/MJ\&%MAy!EA݄"E6C^/}C^Ώw{!Nձ#w}C]ԕ/]M{IC"hVGޝV, yHmO+AVΤD>$gR YΤ$O yH'A uD8"H=tw#~z29ݨTZ_Wp"Oj: mWV0C Toobi]'-́o/@[!h%HZϿ93NlĩV,1P""Х`Sù4CA㶆SQMR(J]uFY*uزcVzl}ޖVC+N^{[˟MARu_ۂU~,h\䡺o[и˟1rc[e}8_jغ;R_Η|y{ Y2_"t> uD.yOݧ+o]}&uWARKO}JA/~^xI/2VN c絴Xi% & E;X -zwL^N'C@xtalvy"[u_%l&WdQԕ/KK]RWԗ/qK6˗|/פdѤ5)MJMJ]פ7)qMJ7&%"⡈.:(""ꠈnB"# ŀnXĤ&U*avH^9B|`bf,VcY^w98C˥VBat#5rDB.`X6M/ӃL>}W1s?3 &X8v enőK6i nO槍EDeڷm>xpG3*OjLojyi3KEEWTRb -2&(S \ h.E %IJ=*/du!nB֧! YW!&V4%.`)moR|"!" L{]m/YQ;>ƥ=M\$~ 7㢡) %q6:cHt׷1 ;[<^T 8a"rJdY,.dq!Y]Ⱥ|[-.'.[]bKl.u3#]EWė/]/uK\_ԕ/,_˗&Oї ^C*߁?f^J2I+6_{G,Zd##^NC<1_?P{uNնj9- Cb5~؅ލ?"B[EPnuVY*bխUVY6WY*>%uW{ݤ*}"ئW,UPE=Yn"Ї*1 }}v%E )ms3K"HA 8"H 禊`)Ї‰m8*coW{YKݗ>}m WqmA/wp>/oVc ;l]Η|y{تn*aH}9_և*ϑ&!ݷM#dE}>]}Ӈt6ZORw_}ۦW}+dv\x$ۀ=QQn* Qx~#YqlkLIoWRߥ58@k~ [;D=H3$<;OqAy@`e0,Cw͕Wx%8x;H9soE]=(fcmx}զ(t zs)i$Hh{'!p|%4dq!fCnboR>%l&|$kRyw3ğjNՏ')>¾3dB`"GV)!F C9|\b@u4M IsBQe8ǛtCumf=zRL|Nq0}q+}Ξy4w8,ip4ó=>nZ:1d կotFHWr)a4d^o2^9bw}nɫ)]>?6 |eqB@$l`/.B֧!˷C.C^$2>R>@H4{[Hli̋.jWbˡ]oܔ}I?.!8>hVCW;E8/uؼy)o*UoU*/<"u'_Vl}Z{EV5/j@?)oNƖocsFS"HA qDn2p:>NCz8l'‰TT1UT"y4SA>444ʦS>4NШOPШ^(NШJ]4:='OYiŖoW애Q˾,O|/?)o}>/Uu> Yj.?/@SO} uDlA ut]e*HU^h8婆S\Q% >ɻ.t;/׼}h=q8^ƾk7˕[ׂ 5|]Ʃ*[_x[m ='$>:e(/- 봺XJ[f-Xb ] ؾ@:"* hRMoW^yLò8}Cø1u;e1ܮo ?b[vKE!d],.d!"dq! Y}B͐#dغHlq->u[]bOlu-->7$Qqv{d%Th( spؚ]N@g'0ˊ DR5O-ܳI5 w7MT8}x ^N<8f߮v^F{LJ!n6@6(L Yxprĉ䘒s1 "I/TV ॿyzV8Q4yDF;Y]@@)uJ*Ghf4ycEpzqYIݷt7-N*q'Y`.7hhyG^q}bH yL,4F :2Tq*wvcjSͤ?Y` fDŽVI8<-yu:k,3R|{& B mB3>hhR5#qqݑfқ<_1؉ћ{{DVSI.7\PqG^k*)4/AǦp'rQ4<{rzSs,%툗`}KVBݐŅOCBMlq-.ibKl]%%ӯɚi0Kȃlh = iڷr?zfRx 9\ m޷91|ĩhY#Y&kNt򇭏>HLOhsv )혐mu"(D$e[]bOlu-ʗ,ʗ||+_ʗ|fҟXeT81vH~L>E)7hr;@74K>afau7OwR7O9 VEw^O?|gǵ",O'Ç|9'nuVY*bŭUVVY7WY>VyUu)?#u@Uu5Y`{@򓾼5[`{ B_p.)yHl3+\Af8Ab8wUK<NlԩV,1P""`Wù4CA㶆SQV]R(J]qFY)uزcVzl}ޖVS)N^{[=q҇mAb?4.}Pݷ-h\OAn9_1 }}vqt]RwICo]K/>yHmS+ u^p?Ja%jSg:%7l^נ='od82-s,o||7dWy=]|ww R< (e`|:/o>^=`~oW6N&3M2x9g 9.Hn8GSׅg^>)ުJ@{q M1X5it LN ((7!צּGKcHh> Ye*ib[]b2 C\ #V8(i@]@M#>J9Q{WȂ,:kO<2x{jmi}/i=bC|)iZtсic&$ڛ=ǰQإlw<t+uzt>{$x^6H#: ґ7mZA(<^*a{'-ѧK5G&>=mϭcojsawzafth4lґ%n  N$OZ!Ic4;NMC-vk6W5ʝt>gV=@Vn4帯LL,Ϸ9s蝧NhX6Jצf@=}#:=Yso)"b4 Ҁontwyxnx`ΓTΫZ1C9P\eTK7^R7r#lffX1lxwB!˷CVB^%>MlvbKlO˗~|+_*_&%O~IkRlR (O~""ʴjVԂ )sU8+" ~" &w!Cz8+xamoKoŀjj *ˁzo@懩%3Q~ PlB&k xE4_̭?$i3ɶai} 2.o. ee+t7 SWABr\n|)y:oخW/ŌHC$+2 a&1#UT9_F6\ x2]4u:[842('X<[*SBdH%3t! YvCVn,>du!fCV[OtdYB] gwǼǧ6ym-'ʚĀ1f=$[~m`F|9i8搿q׫:+ệ.‚1˯,OCo,.d]Hl}V K/vWtYMJ6)vפdդVPDB6Ed ESN6\ 8 c|XJcşS}C|+_Yo="HA uDlciD<$A ݜV'ADx"H3)I9"HAO#A uDJcOnTu"C'bÛxn3y٦)( o\ 9JalqNf}l*ԼXUd S,\JKG`kVuJ5^M[z+ەf|>6|Qyll7x^juUz 0\ߑU֧^eu,U^ey{yE~UŖ[]WG^e}ڗ}y5koN} 7)}HlcA҇Dx"H ~ANEOP8^ENE *pЗaD8"H6 'O>}H}IVOWY+RcWNyok8WnQ|3}˗yu_K8?Ư3 ̬=P&Ei< ?ҫ m*:]όƮjWcύ`O?p*t_9"{=1"yyIvCɿ#('q#h@䵾]Hcy|G v6}b 41*z4q2/nDXq=zF^|AbnQcpق\AZ!89_!dY,.d!"du! Y|B͐'!زHlq>e[\bOlq>q]5ANcA4)ܨR%/ u_1N iLmkqc V1f8~9א,dqIϏlZ gxz8MCLوbZ M.u277F`3 q9q'#؁r &;RRMˁ99jrPn38v_'$mn,UCXa^Eym7xr,^qq"^y9u%l&WdQĕ/KK\Wė/qK7˗%IIkR⛔.&%IoR⚔n6)MJQEC]@uPDEA݄"EH=uzم,4mCEI5*Uȫdd$I4R"!'S`;ZF+8΁M*xGJݣ⟃Vͱ6j6eG˫hO:!YR=ɹp7c /kZA'(\8 iul Ui?G62nqJi]UO"YAeC:I6'L_NH3 6n,2nPiz275fV}t;y"CI>c0xcoG c 6 Y]ȺiBeț-.u7%=x޷9 qaL^FZͷ=QlC>1< vG!ZDZLVGY|Dї-1my_7`]ܛh:oRg, NyseHm&\x hBAC"Ŷ&.R/ (G2wkL:W7TeOU0v~Y! Y}ȺY]BVe3d%.[]bOlY$[\bfbOlqKK]R_tQԕ/uK|Wt|/_⚔>E_}oR⚔n6)MJѧK/PDM("솼D_}m!o&}Cثcgbo%҇k|+_*_<D6%9XAڞV#d9؜I- yHmϤAI#) D:"HG'7ydPKrd5".o#9͔f`d 8G%4N82Pk7Yo}ͺej[Kx[0Ķ4\N{Zj4.ʄ*?1~aeVY*bխUVVY6WY*>%uW{ݥ*}"ئW,UPE=Yn"Ї*1 }OT[ "6ù؏%mS+sWENCĶ@@iR1*u*Y65KA>4nk8 eU.Pи'hR^N-+=luǖzmj&['/P-N^埉Kݗ<}m WqӇmA/ 7p]}t6ZORw_}ۦWN yWz)T+?I#*:TOwkH&/̗1I?WgF3MF7h }UIAgy l=9_6B,!pwjVbysUiPnJ;T-uZ|ǁC$?"Vqݡym7ݮvi,xW_ 9Ԭģ8.1G"3K2,j#؊YX͚6 4/gZL4X鴓y{_áuE:aONt3m ?z> Ye*ib[]b*RYAfC# գ 1]OkC'(qdÆFCt mAhw~q]7IJ7վ}$x&/z;x.|&yYqGe1.ҿz//Ġߚ&61$O*,Q&5cJM+t4ut$ts8yo;Gߠ.jhzGshV} }w':)O9t+MP{1=+QNχ{Rث=O_~_Hڂ=T2M|Q8N/:9jUoF0Цq!Zȕ<sZ*$z#XFzGMBa2\!.#k[og=*S9B3`6@q%1};KDMDMx1":aHw bg-L+b9=*IgӴ#Z4dvBeȋ֧Nlu^/yZK\_)_դio7)qMJWMjE)oCqPDWPaN<8 `o{pm Q&>aM xշH2>c#Iȏ "&5o2?l|r<ߠ#$>Gqe m;GqUZsL.urY!<eRb/U3aþDZ,F1-"V9f1e\=\eDly-_,Œ-vנ`#xOXo8CF(oÄ<%2i ~oJYJt GLa{BݐŅ,!Y]Ⱥ|[\bnbKlLl-.u3'60CG9˴ܫSx;U6fkt5vM^y~.{ׄ3}_DE9xޤNxdG?tobШF92?6O%ܑB4eF{ W6t"-E‘iv3(s< ~c8&W8ФN,q +Gq_lraF@3̣Xșބ&:hԉLsD324eq`"F;MUejC~5Bx!ǭ7<+dN#@&+:W?qu4dvB_/[&|;%,{Qio/qKkѤio7)qMJMjE)oCqPDVPd8)oUsu b؟ W)K}Wd|GrD>%!$RG&GS"HA uDlN+cZ yJC"H=$͙~̤O yH'A qD8"H> <4vC^ZQ|ū8X@V-{^@9d819*jHIT 8уz}O8%azxOQ"1[3`w^Q~A8xؽ[m$0`y*H=؛ZSKZ WY~{խ,Wy^o[Vlv^Q{՗i_oՀ/З>E_m}Ɩ[W VGS"HA uDl2A9>NCz8nīĩ]e*dt/JW[Vlv^ ?+/Ӿ+ADK/6Z>ЗaD:"H7 D8O}SOtOVY~{W*/4Tép 2-eő4v7@ 9t?|E(#b:=t*_.YY ѰOCB 'fmTt+~la`v:Jzg] V+2MJ%u`fNޮ-rR 6ɣ#}f0ST*lI^<"eqohbam!a rC- <xʱhq?vk[%_A̍R !"du!Y! Y]Cn>dq-[.%زUR^n2@fWϸèsIP;IV;( y -'vSo p-ds}a l/^A_V瀦RR60kt?4AgNKn;{x+8YHKr<4! uzh44W9p6l8S ,$Ў0;AKM!>8۴ =[~Y1 3x339 thXi#1t.,Lx]}*wNx^TC_86;㐃tXK8C# fYn'Dr!ƍhQ*>m4(q%kduڼn8ݲDe9Y! Y}ȺY]BVu3d!Kl]$زHlu.'Ė֏vKK\R_tQĕ/qK}Wt|/_⚔.&IIkRꚔ&Ifҏ&堈,:("⠈x(&(]t@V_w+*T,S'=4L;&^Fuwm4@MD/7B9mإ]t7;֏Y W7"͎4e 8܏/r\DLf$ ǤӛO'Ҥ҆YŮoMj+dq!nB! YV!&Ė4%,ȯw%N6Կ/VǠvNα:ӊ{4ac7hRlQ/yKoF5*3 rTW/[u=CcL3Ayxj^ 2]tBhS't/QhU}]4|ǎ\s eǰg%ExjɀmI:Kx.XP)߻ fi_gT}R̻~@=!שBSF6/$ssoWި5QV/d8B31j .BVuՅ>dq!fKlY$VغHlu.'ĖVʗ,ʗ||+_ʗ|fR_5)}!ߤ5)lRѤK/PDM("?"[!/їcoVW!['/P-N^qq҇mAb?4.}Pݷ-h\An9_և1 }l 5l]Η|y{*n*aH}9_*䏑.!ݷM#dE}>]}Ӈt6ZORw_}ۦWꞯqkxz[O 1@C=k8/t.C[7EoDY5#OLvv3`헿]jӄq{yT=O@|1MDx@bGK{k!X{f^;F{}Ygy%uyx7?nՕ0 $v)O;- %:Yo.[;9kF?x,#E6L-C9ZGt#J4iˎS@* [?F 9e4dvBUȫ֧-Nlu&FI^Ӈ|] ;X,bWdQf7^FgOɅA[o'+JKZDDYLkk`&: H~|rECҐQT&U 0EqbbGp|k$~TQIx B >4p1ĚqTVވ5Nn)~5 1ϖ?]WO\P%m+y?/7i7*nUl-LUKayA3OdZplcqlZ9*|O/2Wkn$$(En)O"dJZ"Gu^ǚZTL0zno=Fw(! 8Ģ3&튜Q&D84S6\}*X}e8nhEQdOJ-6z׬K^F$xgmsh1GX*qE_ ;2_B!pޗm\t~]@t5h3;Q` :8E{EWɉc۩K~KFtRǦ!+=F)~c]$Nea&- c&=- 6Y7B#%4MB#[B#B#mr8i|H7 d lԥ7Bc]>6ccc&-{utS^VOyq]vWFl~:bEe鼼"4Ew/~Zޫ/3le9_f;l%3la+adk2?mjf2 }t# hb .7>p7>p)ӧuOy᤻N~ù8(S3?qROO5曮AQDčC@@EZ)|T^mUHA^ {Y2N>9 '&$z"{Ǯuԧq2LSW$.O%嚺Hi"gp \M("e<,㝫E1X?e I_1)Ѡhs&]i٘KMwvl6K>է%`WEbWцKFlLSK[铙E ?_ґQm=U3Ms@^."݋Op8"}#ئDHyqq8/M _ĠF԰IcـI UE1jǡ<* г5-Yj kT"7̒"|@&s) s3WJZ"ˡRU$ ^; p5ʳ_^Kq!D<>x23VCR$8S"Wp'RGoCRE Z-C󕨔#!]ZtS86h{} g$i8CF-SACSY>i[`3p~e̋CT͂\DK_kB~*BTiQd3f$&)qтG'A,Lj#bNx0 4QUav5LOLd^rlcqlc5|O/2ዖkn⧓$şHR-En)BO"dJ^";#ᮏ YsPℭ#)=Zk9i$t.BE=2@*EUˊkFψ5O]4bGnptr V5|9 ->;tԼI8WcW8]R Q3gZE0x^_ŗsC+L]PZ$1S)璔<S.̃B 9KmyYz9' xi/Bv"4(Qzt]Ψ }D|Ph1+M_ϰjJNOE<@@!B"Χh ~StlYΉ@: ^D д[ nKѩ)k2=m2&cql^9*|O/6዗kn⧓ԗW_tK/nIO_^}ݶn+LE&|OT_[86 vql6@s@VxwZ3)2@ΤAAd 2@ 6@ Zh]IF^>9! w "W\- GbΓ$EϜs)N ܼJp88gy˸vn;*sИ}w)IE@_KnEM6Ģ@wD~.Kl\l7d,|["|l JOL+2=}dN nez.˴u7MOG/gݼO/gꋟ ` ܮ{"D8Apہ]ذۉ,2,eac69l$Chhl%Cho'4yM2=}_w|]BvĦ#}m2?}cꋟ|ll;le3lnwMMޞ/Ad A}l>ޅ}}|Srr8i6-Rʲ|3=T~l-$ FQV剣xp/] I ȦDBחKCٯ#zhZ.WpݨjzJHՃ79D8E|AZP=$*[]sqCwV2Q̊JNixL+Q>X;K" 릝nyޢ&v Sc7˻A)zV8P\b(g:(J.5s"\pN!M inia2ɚ ɘLd&17M7c±86Ycql2Mֱ86o:696'uT)>PC^O*xu\,u6Z?Eڥ~JLWﶹ[^NKE./)!ٚt+ݧx4鄨7mCߺ_eHs$^Ջឣna2(5&\`ĭ3rNx{RZ# R, ̋{V%~tNdIj4ˋxS,:Gۅu9Ae|ik&xOԳr5DQ]Tp{[)~8_Wm:s;īhG(9OrwBiq.AqM1i|TBN0W#$3M|u7CSfE{+*gɘd5ɼi2[ɘL&ӛƱ86:6ǦMfl6[K3$ᤢxP%1Sv / xUPp&r>2"}} w9ԘiSN6IZ~haa+\Q%1sdsRJ2yKTwj44:ɲtEl/ J%kƹ1s?s9Ϸ]kHW?~+"g W qE=(ϛsT+bNLɞ2-N)9eLy]]^+P]&sy.+B+Y;E^^ h~E@c8ZT_17"W ]Ap>" d|qbA]&1 B#r8-69?Oh]%4&SyB'*{|lc.m<wɴ+r7/%4"bV>%4"/[̗iw Njk52[|6??_ݑ:/L^ԟ/>,G@}|9wA]Z yv{^p8Wpg[wƱMxjBP% c>pU}5QVYּQVަ|zK n>i:REȖz錜,zWMpC})q:bBvYg/Q> W.㜫:.' Țm罒O~c vI"#i ixqsMNMՙȃ\E<iɁGbhL&c2Yya2ɘd2&lM^AƱ86[Ǧcql6ֱ86m:6[V ?Ax8Yh]v賆>$d AUa0 LS;H_0nufh)Y:f^ߓGȏA$ mJDӼ7,+׋(%l.a6hg+/+}P=zp g2IRAjA-eST ]Zh]KMhdtAA&!9hHxah%Hem|,t/Z.[rB s'kڤEt9 nUΪC"_ xT(CR!X.Ks ==࿿,x7"pY::՘w=_4H=͉O.8E?oBJf;M@>s-}A"w & 1YџHECgXp\Kc/ 8|2yY.8u駵?N0,'CI](t!f2-L&c2Yya2٘d6&Ӧfqcul^86flcӦcu?>_dŋ&| _lE—IRHRl$E$&IIRd$EIޒ)ExQ)Eؖ"(Eؔ"dJR7KNGF͝a<0yFOp׬+O.h,TIcQuv^݋e*7?B P>|$7@"'1˼)gW 0F[VeRs:GJS)1h  veE4}Z_Nw|,)y&ݕT.0 "y7!6iN>98+dًKwV_6oJ@m\P~tp";'bkM?S# a9ktЅ7x9D-V&]=G(iTp_',zp|2buAp2(nVNRRh'PP_݌an49Qp4/6mE"Ȅ/LEok%b$E&)6I˖"dJZU_aS?W}ɴ(8W&|Ż͋b?_}nzo端D8&@N+^ݜV<D37͙Ad 2@ 6@ zL6-}h 66u9 9_c6Vyq+yL"'{]B#/" w +B|wpVc/M#hseHy &p߅]Pu]tuSι^=S`G$92+Rf=Q NrK8\ŭJ©Zp)d+/ ި/K6.z`6e㢦4D&O *Ř+%\\sB%ѥs"9M9k.&E==+ýOUs9)9fD>y7A ]@9~!<}dk2=m2yeʱcӎMƱi\=8Yע"M:"%"@Or8.vAUT.5(_)L哐xRE(#ةH4MWA=fϴGuV˵n^7Ihw٧ncJTY&; {! ~jף{iG/x)E퐐S:U0OZB) 6[]HS +n U68 iIڬk`REQ{?S<܆V̴d}r|)lm#z 4NzAU P(H:}HY }JJpPY庈(VS(xƩOYaA%s&oiyaũQ&]iɘ+Wwvl6MK^/&|2|-MRt"x-ERM)BRdVP7(#*OCR'N(e"@$T>yW+ ˄⨮d=4؟R!!(}|~hqީ]WB #S܍0ZRC2yƚJg4(#hwѧ/-,*_K|@ _cr|IWΦU֧ MKj|r,MSPh>ɸ&ρ ?nu_Mbᓥ1ɴk2dLɻƱiױ86ul2K󌖷GLd@5XȫoIETca+<5x98~/_RJS񄪄QܨR|*LgQDFyBN DpΠpcBOc?2<N.zJ)^42I±\Pс5.w:%1 ⢲y.+9+@~}n2*˻."@QtǤo64\Eok}^Ns%2PyH-Nv_h_HP"'K&&1W&cqlZ:"|EO/2>nԗW_tK/nIO_^}ݶn+L&|ѷW_86 wql6@s@VxwZ3)2@ΤAAd 6@ 6@ Z h/x^^/Ǹ ~y+=*`ŭqQQ1V%E!}wmf=edq/s ËdL.2ߕE^!5tG׮o#D2;} (`_N "` ( e k'wO>e2LSu2=}e^]~;bY|7/yYt⧫m.¹]c5N2@"l ~ hE@E@,2,v. wYdXM'B#r8#4Z.B#2u |l6|lcc?ǦO]6{и鈽$4ne~:/6p=]}}|[ [iwf|O?_A } )ӧppmI]Nb~,ped1Y.\BjCDC"BKeBT䑝ڹ4YӺ[Y=܏7ܺ}lL ɘd^Ld6&5ɴi2lMƱ:6/cqlƱiӱͱWwY"Tn=CBE?{|,±xh\BǁEAbl${=rSŷ9bFsxE4{&mK>F,}sлmNc'M/_ /Kg, Pwe%R/ 4$ `L7!_D63U>TJɚ,1>z4~ʢt7jFUYc_XCq@suĿgvi5ulS_tYgBg}",}} ,mR*/eW b} ezGa¯Ha$7MHB/(+J>@U2 ^$"8*n0aCZ6 (![ͳD A'cRUrkgv4/,cQݺT^0,JPmͫɴ0lMlL&c2Y̛٘&Ʊilc±86fd7>pGl؄/M"Ȇ/66&IIRd/$E&IMRdo&)zKR˔"lJ/J6Rl)¦R>(Ew.ծ]^Eيڹ9!H(S<_<(@2h$ .k;d5IyꛖĸN߇ E:мK PBAFS]p("4\ϗX$Ȑ (!s [PtC aBS,@42v '@ܤ_#Yb\5 !yHc< <`&M3)sNi_Jϰ ^22 g B.'^:oq 6_4Fws롗)&jaYؘd5ɴi2[ɘ̛&5cqlul6MMֱ86m:6[^# *8DT3em#юQˇP,_;~qfC;tutڒ!T5  IB̺:yyѮwSZaQ}EU}謻\E޺䐞d6B8kn/8fLt,אwkB% ~unH"+\&,sO#ڍE+`UeOJGi21󔹜}e256ɼ2ytױi&شtlc2YMR@091on,>r(t( vS T$֧8-nY'B( 'ã饜ïmN:Q-E[G[ Ϗ޼4A M,~E{H:C%@v MS9E+O1@mPp 88kh$AJ>!<~hd6& &(~C?wiTҘ,:6YPJSTB2ms]I1:8HM7iJXT29JERZpJ]žmlw1'vun$g$Z5qDivψg:.oqSzOS* nSJ }dk2=m2ieʱcӎƱyثw=؄/^UINRlԪụ?])EhU, Nkru-x^Sd+Be8d5~7Y.c5eȮV^9EP~ ht8 |.ǖ$T3Cgxw2kJ~cD7 6EROϹ <梎 /ѐbH i S6"؛&')OH? 'zYHr5 *i2yd2&]٘LK7ccqllWLR6/Z ɜ/Mc=/K4*BҎONΉ~?cgtQ-"@QߪX`3.0s[ en4h@fW_F|a2ʼnP݋H+*%q>Wn}2@Ё;s# ;۟ NUCN0_֧ZU\ u/9&p?ISgzk dLKcӎƱiK nE&)~:I}yEwKztm+˫/Ȅ/ _d}{ch&?i 9 Ȣ"d ޝI,E"AK [ {{ WX 5l՝\Q2Tzc`e5vGHdZ2Uw7-"BčB)=؍4b/"si]9Hn^'YWg'wO>e2̫Su2=}e}Fl~:b9e~:/9V_t"E8kl~ކvN6@"d ~ hE@E@,2,v. vYdXM'B#r8#4؆ȻL]2FvB. wd)ӧ|l{黼%4nGl~:bov y1vEOW__>_~{ [iwfJ|LO?_A 蟇} 蟃)ӧpp}j@\LEgI_iy^xnx<2o~ҹ]-sw!ӽRoZ "jZI&B@,EuN/VnjCX`a<+W ҀE`ֹ{0VE$jÍȆlb 65u|wQ,\ՋH";I~kZݹc*HGCWJ|+:L ɘd^d6&5ɴi2}`oM flƱ86[fشc.W/plٝ^˔j^0wӉ.:3Q]:QbQW)zk._=hFvTFu)k (E±8<@p7&]EhxW9*-+zQ&n[u'M6 ;CFAJpg@(94aAVuw_ DV2:J]5  J#\uXb&1HÈ R?/T80R(eo(Fр4Ocꟍآhn Bʿ5j>A8H7=Nȋ:"w/!8 &G$-K1EYـ MﭼXw5:|dE^E(?,W:q"uh\5N@ܕ"λ?"W^V ֠"CNiKm.(%Zd2&5&1dMfc2oo&ql6Mֱydcul2͛MֱɄ/Z/2lE"Ȅ/Mߒ/$E6I"IIRd$E&If"՗)EȔ"dK^"dJ2RM)›P 4ۼ] EFؘyY9]FJPK8\5'\)# XX6"d,tjEIv/M`s"}V|l]2q~N٣ ꗣZB%J zUA)N䰝{o"b/4VKxLQ]ܩ0S8 s# V\U'e` rSLA1 ™­*26$L 5<2EGJX. #cKJ#X]#x)x9k[Qs]̛٘&5ɼi2lccqltlMƱyӱͱ]Q̄?޵:~x\i$@l~GtjSISVXLb)08ME]sP'r,񐞏e: _֡}ڻKCGT&g !ZSGԠKs$Ř[.^l&DTG)fƫC_MA=d5o&1Y !*/*EF/Y /&c# e$8wrh} C,QF!)xz<:~EE;5lMdLfc2Y̛٘&5yuֱ86[cql6Mֱ86o:69 __lŋ&| _dśעIMUe$\eK2/[)Exd^+]E[r쟯h7||xǶ@o?A9y wgR͙Al 2@ 6@ 2&5\[ܜ'G'k'/w-Oeؖ 8< ޱ(4݃Yf yD01&øv M(5U/BFA~O8cПH"ƒ/SZO)c+6Lɞ2/N)9eLiɞұwA]Z.˴y郻WB+Y;E^^ h~Ec8ZT_1,D@'/j6yJS^VͻdZ9ؼKhE^`.yyEh|j eM7??_ݑ:-L^ԟ/P,G@}t9vA]^ yv{Zp8WpbN[X"tᑷ?{tI\(.; HW& 2/9( dM+PZ怦:Y!8WnJUY9ݧ \vKkŮ[sC1坮F%Rpi\, v!v~(y|`}ύТbq_İQ :^@꯭݆7*@ZDeJM!%T}ˡ[W!cD@b˻(K`UWʽ^4|,ׇ-׀gz?I2^ÿLwMMfc2/M^86ul~ڱ86-B<YeG+ԍx12G'&O59𢶠XY> C c𨼊.sGTƃA9K43RS 4zn^ ]H=+cє.mJv7^}9<ދ:vhbMqC ~X肌!ꔨ7@y5? 0#k>}K]t %lpRS 9g܈GTs >|dk2?m2yeʱcӎMƱy؋Ew=؄/DkINRl/Ԣụ?])ExU,k,^ 17׬cv~&"De?ITqPQͮgbhk4B,:KW7x"!~ .6J%E/U 1&sL"v"!iM!^HKL2JYU q -L"y^,i/lIsnCSZ%<@^hG' nMDrGyYķ0aE_0g [D;KVu .?yՕ +B6z(f2yd2&]̟٘0y˱86:6ǦƱyG* :9eu[CptLDU =PIIR83B"@!Nֆ?Xlew昳 g oIi+DĿݕ0^=n޹|HjR7/s zsR5vp{SM*/8~QΫ 6,1SO)7ALOe6w&t,,[}>`ܮ@[' vN6@};"`"];qbE@E,2,~z& w9d-S vl]>6>6cSOt.wyKh܎t}m2=}cꋞ|ll;l%3lnLwMMޞ/Ad A}l>څ}}tSrr8i6ܷt$ }Q+LU_+"6ϢRR^HF~ cٮ"Gk.Nﯴy !'3zsmN+ghs3rGRN/*>cp ^֝54~ZL!Nz lEE?6Uu|ifq{QiTICpC ٩FN{IxEGFE.ojo+Ah-g;녵:6~Ыꛬ}BN!MCu!Ueg ՍoBOQ6y"t=]2!l3ķf 3EBfL^E]kO#z,3!?>sҤ^$ˣ{Uy/šws 'B)hc6~R<ckwFĮ"+ k}>"K)^s`)`W]zoWU7L1ς挣/s?aaUߵ*6wgԟpR$}j3* ^qjwaHފ(Hź9sphi)Ƣ%Cjg/i%ڊ}gHd^d&d6&1dLMdؼpl6ֱylcul2Mom-E6|"| _d&|fߪ/$)^U_6IIRU_!SRwME2/ul^+v×x3|=_} ű-D8A;@mN+~ݙxs&@ D+ nUEY;&KW\3gďwΔzJx1Pf_֋ܿp& g%¾/ ˜ŻFZDx_ vyWo`-˼;E|wvL֟/H&FϗWpAM > ǻ./Ny<ǻ=-8+>Deu* >erCQ;VXՏR13^2Xc{X1Y]Yo% &]m'tX)h[!!+OQ<x"'wuOO=q U&)VWkFVq 0(}=/*)j Dm:^ow=M/S{43* 8xMCN@^ZEQ9C!hܥ|˹\D+VMG-Y{G : g]_uʚ9lL+滎O;68vNHK#M1wult)Yh/[lU%/#`V^,S n:sGvV^@ݖe2M/TtbTI*SR4W9 8jcwN5Ɲ*x'tB)h?H 5U#oQHN}\Edrd-y/WmE£8uܱ:hksO4 $ rzN]%АByzQ8{7ɢgǟ( |,qt^ jz?{:?AFy:\:L/󔅲ĞFՋCh_Nv#e>\MS*J=YË#{Ff)#ROcah;ϺVfNjő쵳B{+EqBU26Zϥز"ķI*_\W2.T"1%nkK.fCmͩcdk2=m2yeʱcӎƱEw?Ȅ/L[INRl}"Iụ?])ExU|ZDiSEEPU,Zc#(KD;2.`wߖZB^F1H#ILϮRAnD yX~+d7GMMUqh}UINƐЧ Nq$*{(ЊFlo ">0e}=Qr&c)*'% swuwp׶j/Ej// -K[&&1W&/MO;6c/ _tb3oI&)~:I}yEwKztm+˫/؄/ _d{ch&?i vl ;bL D" "-d܃siI薥qjDtr=3x.EFɡŭQsܽ /2| (Iլ||aYtl ^x;YeUC{qG&,Vbuq| (ʋ@GFDΏzf*=#hJm4![qE*pP'pwO>e6̟8-Pw.w]]ޅ#6?E@w2=E@w/~f"56?]c'`d.6YdX" "o'NذxEE@?Ap!4. 9Be!4.S иf]>6>6s|l{)9e~.ow Eht^gmᶫ/z̰256y xb?hc?SO>ᤧ9p'^mNve^Y||JW~)4&*J=<˼K 3Vmi#pR8P!8jxmDJ=W ХI^nDDN{փ>j,J:uUFX^5-OrsN|ri9\9ʴBv|ƹ&z"P >!]SkF*[|`zY|r*#۩;d2&5&1dM&c2oLql2Mֱydcul6MֱW¼@_#}lVoʚlm_!U y5)8ű|StzAyfmبt `t(Nٰ#p8HTo6 TX$a}_MhD(s*A~~D 3|Q>`6rJƮ(Hm0g8٘dZd6&5ɴi2^FcqlM &lcqltlzs>)Ȅ/LbȆ/67$)6IlE"$)IM$6I-L)¦a[!S)EȖ"lJ,EYK)$UA>~IڋI<ӗF>(Ⱦs_АV>[}?>?7$\M&'V`qR} xƈ. xȸ5E92ȩN-0}pN\IwV=! \"ڄO_>JQܦ!?pIAq&a $LGu{uZ8v<3*$'wM~ۿi2Y̛٘&5y>~ױ߄7cqltlzsl~w~A}F2KÂ(EA@=Hݸ4%AϐKUD$֓hmkM j"̄׆Ȉ:&]ZBvY^kI˷ xӫ'D|7 |:ӕ0Yɢ:oNU5LУ)#qw;x9 UQ<YGْ BvKT[J3j|V$ A@\akwpRs~:&w~.M/z__f>Ddjѹ>;Ld&d6&1dLMɚ4Ʊ:6-cqlƱiӱ:6ŋE&| __dE6| _&IIRlbl)BUeK2s̋seW_شh+V/[}f-wq8A;x[9y vgRoK6gR?AAd v hѠ/!qwtT[Yۍ 7媫<Ʊm Ykzۄ>qd!OQ%˅'9N ,֣|ʻ4pE4AB;h5̜2Sf{ʼ8e2ɞ2SSS^,q]Pwy꒽d2oe~ B+Y;E^^ h~E@c8^T_17"Wr.B-qwY8, "dzg{Eh|b.yyEh|ݷ/j e-J|wG0y5R] } h)@ݟxs?}± >3-`3[$oM %cCCf4:}346&D ֡E QC}Jvw]D命"# By3BC/Ya5_Vv8=jPKփ #u6coVWF[%'/|MN^7r.qmB*b&4.}|ݷMh\e /oe9_í1u9_a+a+-#|oΗG+F@p6Dh킺Kn}۠AM~ Mo_q8ߠϠNrD5uA~f'ǖM%q2\?pYLR80~:͝4Qbwң|uLKV59TIlٍRVN$neTYaߐbjΫlp7C~9R"N+rQ ]5tey&˾&Uh͝\E$BV]<0-7h%u#6s` 7 Y-w-E\{Wg(9Ie ɴ0lMlL&c2[٘L&5c±86YǦcql6Mֱ86o:69f#bъ_Xk*"2&,9'4$ܱyxp8媓(|kxCfWZ,ꝝ7xjKE ގ|LC*dmR9jl.oFň[In#)rb_Df ߸??L4Z,E1N펛\#ͤtnaJDPP?wG ~4_Hfsj Q*SdMy5p`I|z.m)Bb¹zGuHp/i }u9Y(m` B)Ddsx(J6*gTZ,^2Rk[!x_UK$t7VQY]tW⪋BDӂMF8uޜ$b2n`e$7 5m*s8AYD+* B@_hZ&d2&5&1lM&c2od6M flƱ86YfشdLE"Ȇ/^/2LbȄ/ _LEb&)^$)6IMb$)LRdRRl)BRM)Ba[)EhRD NܜҺG6㊢pI"ڪe\&Rp *AO@Ev"0֔!w:q!޿&]ŗ}pQ]ς<Qlɉuh"h8;vQ֢=N*^ZDsiU;=aŁxrDF%ő(QHT7!UD3P溓pT6N/ūy&?cS)9eLS&slN)9e.muǦ|mh%oɫFN%4.y_|Mh\Eۄ%n Nh-|s=[U_ocarL7V2Vİuk/H}eH}Z}tA>2p]Pw Mo]; /> mC+t/oaFr bptY4.7|)ő"~;[-MY~As1%|:_WY$M+ړHP />szHϢ]baE g߃;T$Cif}𛌇mAUiFaFK%`׻*'S UD蚔^Uߠ)܅:ͲyKKel27nB%r(T4Y%U@9?nIℨµߥRNPXA4ǻYrLGRm^{(OYg8Lno/|m_POXF&57TiN/Td$9RL >a256ɼ4y|ױifؼrUዟ_d-"I$O')6IIjQR.EȔ",E'-8se{B8t[r„/[}m"x3|v&D"&M"] oAl 6@mN+Al M -D͙Y w Al 6@ ߀ LiHGnN_'߷|u<$aq$z\wj^0e;{ĚSp خDd>\SQBBQVA`%6") DFCɩԹ>Y^je*0(),8?9}'1eQN2?}lNWt.wyU+=b/2t^^ h [}j G}\cW[M@Ad D8 4,K ,6,dq°.=ocȲذxEEw tHȆțN~pB#%4MB#[B#B#m2uht7llشf^2=e~WշS^e{黼"'E+B{^e鼼"4EEw/zZު/2V;_eV2VL&&Fo&.G7>@ 7 ~ Gw> } VwO>v+'pt\!bAe$2"%vd:U6],GC@ uĻ*V)O~̛ӡ\u*ܞE; OkD:.>0pm!ͩ|{S Ytv3+6]¸!m$U?;9o|ܺ-wMU/ RCݎ|xC:g)ԏmj7R*tK5t)L\(ZzTZ9IP&d6&5&1dMfc2oLd2 flƱ86[&ش'OBB|::)˲+8[ q,j)uT4RsrC^A3󨋤.xO%bg"~Wc!U%@H/oF/S&I0\$q棭$^p7nj:\$8|I)hMT( SРE^SC6!DXA yrzi53a |he}0gYvFǹͤ7<^#r#&]2e {∐ @6)N^HDMy z7 JU.Q_S8)Cl7ᘱ)|*vH5QRmnoeT,^҉ԇ^4vi=^ed6;D y_bo:?i"!Cyt͙\&acPਃoSemwDධJWKe14Q#IzW)R_18-3&1ɼ0lLfk2yd&ql^86&شpl6Ʊ:6ǦMǦ76L"h؄/6lbh3|[2IIL"x$)2Ilbx3IMRlJ^"lJ-J2Rm)BRJ _ %yh)P)`\ɫ۴.ޠ4둗-%)t&uY݅EE-` S\+Xv#!'˜G_2.=e]j6zjQFQj@ms)r5:U(L ٘Ld^d2&5ɼi2lƱ:6/cqlMƱiӱͱMEbȆ/Z/2L"Ȅ/ _A-InV_d$śIߒ)En7/R7K~+E6M^V_|6yUpnV_ێj+{7|-/Y}m/6Vk^A|ƱA±wK nA 2@-3%7 W3)2@&D"Al @&~KD()|LJcɁʻ!4*נ:pك{l Z~x5K-t)kdQLJdZr- 岍$Wܔ1!jTdS6˚HJAD}+"OYnRӜx;woLS&slOLٜ2S&sʼydOyesies.]ނ,"؆W ,Y|E=Yn",1ܪzm"KoBƾp. m#d Z!,%qo'YlX,%=ncYlXbr8FIhp!4ù]&qˆHK< V|]꒏7۴)VwK>6coWwIh\&kиط KvdmWyи9[Η|y{ p|oΗdԗe9_L~oAKo}@ V@>Gܷ .> mS~u7%7m~| DTmC3?xb^[@QKIJ/ gy7B@4λ]Jt/r<fQ,r[pr&(eȋJ-_R:B"ȸ<(U e*y*0j g\u!)]JD}̃l͢ͅԱCN Uڈo/ YPe\RDE$r1K"Ko]&Z]Pݹ.dĦ!+/J|gg=B>rfw~b܃q J/zf'M&&1W&:6=dW}];@~9J@o^%E%_L9F;|(QY :lptDE?nR+e}hڍ rщ~ՇKx#N>vp1}k FQL2>P4KRAMeD\z15 5w5xEd*QցzbY8é\<%'bQu+"H2s!(x}H}j'ɵ#<9S2ª:IJD`kVT#kQr2qNf'WuEZ n 8]= b$Hϋ[NUjELLUcpp07c~ ;<$˸ .Nw\w4,.axJ i-{&iߒUCJ`ELS.QCsls@Eg^Up&Em$-tR|Y~4)G#\|^Q] I;|aqV$tdzd2&c]ǦcʱW/z:| _ _$w=$)Z%U)BwKz!Sұc7 @%?E=zDG*XA6Qtڪ!js S~%QͿѳ$)) JPޢb>ԝ5\UyhI)\NKAMп25%E0,WEIhϻ|=#Bytý (E4:(Y^ LL]5"L:bG.J_"*+f$88 \&*&$|pODr$L4/|9\ͭE\ -M ;-贋f֡V91HNiuC9TNd6&dLMٚLd4dmul2MMֱ86o:6ؿ%)zORΆ0iI̤ Q)sZP{KFyabL.#_KI8e}DSk|+qK'P\VE˕#ؔ($Ì< \Gy?cDcz]_OԦ}<kn"/h@f%#}Ȳ@h*Bb׼,CXңkȄ畂"ಝRPuO9ZKY!׏g&JX$nFS:tȰ!\Kx@UWw;mb_[(WI,#$'M&&1W&:6=d_t7|MUZ%)$E&I*IJ[ӥR>Q'=]pL;DpۊcݬȆ/66톯m nAl 6@mlO{@Al ڜV۴At@Y D3)@ A|" Al 2@AhBRz 97T.|ɉZg͍ˮLxrdC9/zM~l IDĆs{/ĸQr :4ovɰe?)jwDK5C^VoÉ~2ݜ/氕߆ ɫ:0R p߄Ad Al> M-GM-ܷ:e{)@S^p8.p7$XT$B"r3%rUuΣC8J2>bφKE@S~7Yu=<[~A.zR"l\$C,/V/w2驇Zd;i7<\"7'wOYv,Y/ofx"ϰrfF]D2й&ciG)JTꌈ0QIXғ>J+.Yr|M RF2q^SrХ p€zJw"iԯ5'ⴞ&]i٘LKwvl6M+>:(jߖ8 Eޔ*M̈؂" >MM(xE<*g |(P g׋ |8>NGZ]4%nޖCԱN(&BUu;,|GYK~ Ś̾|T_p8s:|H[Kh7rAguiCI"B/O.uvD#.^XwUSrsA:Թ\]YJȳuT9JTC UTr93K\ {RE)uth.!&##_5 #Q/^'detsZ8ɸxQ*G-=>#\uoX T@BB}ѐD_q]ĬqoPA3x.dd6&lLMɚLd4L6Ʊyױ86m:6Yfؼ_o:ؔ]P8/fvx&xtPCbψ%>oD{"BT[ *ҖpLlZzQu㕌)vtҘ'bq"?F_f)@dDgӥ9j2-SQ 9lcq,DNIOGფQwlΡ?>e7x{sS?J8bsB),ՒЈ{'dwYܻzIoZgB5r?7 Μne=LmSԋ-9\j 5بET*oܨz8\t !3!-UP!&]iɘL+WMwvl2͟p쿆/&|2|-MRtbxV-ERL)BRdUp݂.8W&t[r췶L߬Ȇ/27@Ad ıAd M ,iM+ w A9" .7 @ "tkơ n!Ls y!(f`T{Ǧ6bnCB) S7_>`FT snBJpe]u.x /rgee MIA1DŽn!Xư=.(}QQSVOI@+S滧O2S)2߽]^owyn# ؋w2?WnOW_1{nMO+6@&b&Io@a]$Nea&ވE@w1tCEE,,6FKhFF2Fp%4!4]B#$4%4!4&SMwtM͆͛|l|)SOyE[z]vWFlz:b{n^W߭k5{ [|oΗ[ [ysJoօtdzHd]o}l 6@mA}|c hc N2?}+PWN9+]8ā/]%?W.07qM^M sr9JE,WGyw82EgE}]C4tяp `YU.9I^8aO3DuX+XoOӯ.)byYG[U1(8З7h-LP/S)CC9i)GTGD$P7͡NUĪg߇M) nРo/Cs/D׃|i;82fwuNzGZ}yi(OjZ1u,~~I *9N ly 8\cE2KQ!|Y}%ȾPtҴ+P.0[;Z>D7b )"\)q2l!'t˯PApNTFo>kɼ0dMdLfc2[ɘL&ӛƱylc±86fl6c __lŋ&| _dE—IRHRl$E$&IIRl$śIߒ)EhQ)EȖ"(Eؔ"dJR7K49|dfTr$n59f+EU^:j0 ZKO>IR6(~|+4tV: ;Iֱ=(y"GWSNNr D.Nڪ*MG Z"߳?gm)5Bwklyy$E 7'qȀ9$Uz`Pq!!u4od 2pV.]:Ld5|d2&'Lrl6MƱcqlZ9r2yYwv]F ]oy~P9_A,iyyN|| NDtYKS< W?U}> IV_T_&X5G:HA8NiP =".׃>Xj9RV}} ̹B :O@PExڊyya91%Y ~ǂCNNkeT ZՓ-Ngľ>6lMlLfcEd4l{/qlM fl>h+~sltl~s?"/2mE"؄/MofE6IIR$[)w/Y}-Eؔ"Y-EvM^V_|6yUp~dc//Y}m;ڊ𵬾f؄/Z]{ M hf ޝV, mO+AVΤ@gRl ^Τ w LbA[% YѢFh s2lM[%$UbmģRX O \M63O۠3{8}W1(2nH)qEdЎa6ADG?pE)=e^2S&sHSSf{ʻ.L.LwA]~u7%nU~74KdlhVym@;[&`{ k \B|"F8W5ms M hd e,|8" "f,1|"`"`ù$4MB6 kIh䛄m.B#|l2|lZw;%niS~n|l&';9yи}M6qo>&4qw /nU}v2ߜ/o[ [i9l/ts=R_>R-EVp߄ 6@} +oY}tuWnBKo}Ip8PG @5%9_#?uAڅr'!d7ݔ<}CS<싶ri|*6ˈpzP)D6M]C'PIVjN79]ܬ>YMC V *eD^Weݣ{)Y$)$"sݝ̬SWwVh}NEuT_G8nn%z6#j"@4{9λzhfװXF s wvRe02~ OO sE*5 ,#7dk2=m2&ձcӎƱy؋w?Ȅ/^UINRl/Ԣụ?])ExYCYi&iѰwPC(. 8Љ8W8[|m݇"zr-VҔNf|(MmI6xE__ ;-\7t&COrշ4 %@,8v ݼ'͕4 q(H8' ֠߸UQrBo'}(Av&|űWd5Q#Bs;i|qbzQ,EWI|,dJmjj[ه.Xrk$.>PKHEitB/'_Zo&1vM&c2od2&Ӧfql6ͻMƱiӱ:6ǦM70^/)JF!0|OD\eaT- ݐ$ȭ+/p辗FkJg+OŘ&IN 85}gsN@[~IGy8x)T=BrSU7 A SG7hB?/mH(V4*^ȵu0IJb푷1s}(y6(4btbi }«dJ*t|e)'NR6|iFš86'f 7h Ď| %H>otdzd2&c]ǦcʱW/~:| _ _$Ew?$)^%U)wKz!SYt Εo窭m=V`nE7/L߀ M ,Mpl] nAd 6@mN+Al M ,͙[ Dw Ad 6@ -$嘓ɍ'+23ZvBtDoh:r2Ѝi}l/y&wrR^WH ^`Zu" &`ʙ;?_9xUY2O mUVɰ$H=B'܇PSS\tOW[\S滧LO2S)2߽]^wynĦ# ؋Lw2?WnEOW_1[nO+6@&b&I .qn'زȰhE@EE@w1tÖE@E@,&, 79l d|7 l lԥ7Bc]>6ccc&,{u|S^V?:e{黼"'|Fl鈽"4EU^y+Byo߭k5{ [|oΗ[ [ys [f256y5R7A|p[ ě@Ap߄}l>ބ}S滧LO };r8i piy2(|>?*JQ1,YRT@qm"6O(Qa黷HpPZG ~ NUH 4?Σl,ƩzASm44@7ηE+'" |;">MY)'U]UKQXDgC+[ŀ2źُDVs6p D-Fbhwpt:yW?-SoK+sx|H"Mnnuqг'i.8c2jGiK¥yb辪l?F5㎄ ^o/R*Et6x(ƒ t U~.sO@iRp2o py֏p+ACqk"ka '~ݪtRyDyS}Nh *4z`,Mt.3kcd{:F ;Y||\Js국i|\磌;1N#΋|32)[AU C`7HoQt77DSEqSp"TTD@"'tԓR~5LOLdulcql^:"|EO/2Vkn$ū$*En)BO"lJ^"BF)Ԕ7HW0 N"pZ8 @4cL#n,DRj{ݛr^=|ǧO1ɂ-25ɋs^Bp%G.sQ"t) ~($*G4wrU_x6 vp Cn]KcJE/рIt;>_C_g0VڠzR=AO]_xq95G9;:Y(87%ctx}VђGWOqph]\n{'w EMZ{鿙Ld5|d2&]fشl:6Ǧcg _hKCT\~r吟dR-)~Bǫ. ݣsy͙A*e; /%7]Drzy,ɂuDpV_)5娾j?xTӤPTQAfIdp2Wi|@n9/2s* (ec@aɄ~* m!Ofbs7.m }hWY/ :"w(ӫ&Għ''SvJEQe"I[q0TCS~dk2=m2ii±cӎƱy؋w?Ȅ/ZUINR_^}R.E'=]p~yw ~ˆ/2w_}md űAAvZAi 9 ΤA;b?AAl v Hʹc7\h9WWc\!8KfQ.gYIz0g7 N);2Rm'+łҔ_XB*R 7 Ck&ܓ9yt!T6TSn_,+"xI%LkWuR{̢,FK\4yF+>e{)9eZ&}.݄#6=E@w2=E@w/zgl"56=]coC' wN2@?" "]qbE@E@,2,vz. v9d-S vdM>6>6cSO|.wyKh܎t}m2? ok ]}חϗ̰wl͗ex"?xc?SO>9p'"tihS٥'tHc*i&˝7>PgA .grb [4`_/! JIR3Lc7SJe)vmdF] dBfih+kX$Qt>uQ]/XJ )rp۲<.Zi2ah 0'iC>GA>myppE _AI5Mֻ7.M˼ASB`?UNN~eapl4:k[q8vu' *+^kU!arX"KÉgu(tS9Xh K]PO\fBt)L5A/4fc0aI!喁MODB"kj1jɘ̻&16Mfk2ydz386Ǧ]&شlcӦcc#GcV'pUPytsTڦi˕D0W7K$TCa2EU>" yB)@ÍʅAV)u\!9-_pH^jQ M rg K<V%) ':+G$ 85%T1}=zIuvE-}$ބgEm>) FqNLD+/tT^^k (:۠=S-~DZ&x?_y_KhE^`.yyEhvbLc8^T_1ϗiwj˴9l2yaj G@xy}?.ˋS^?.t  K&(@ޏ e8j Y^HR/YOޕؑe,H׷l<٠tڵAywq[ Rn[F< \")daxȭԼ2_tw;VWإCF/4\-J]ARFj$=;$ > ,+.SW=t$Ob5Tt M)I!VE'pdbaH2 v%td~d2&c]ǦcʱW/~:| _ _$Ew?$)Z&E)BwKzaSЪ98I\$W5uJ:T7(,Z=Ըy*)'ķ!3|+C^:|'BdBϤ;E 1o~y , S5/D{\xb2Q2p.6ȓ[`{Ti ]uҝHc+^jsu<  #ŦWO48#T ^X%M4*j4)jq&Ky.OB_b&  My0Lzxp(!xKG}RJSOسh2). g1ёQE̛1ttuevGῙd5|d6&'Lrl6ͻƱcql^:6abդ l29nrҠQ{!Hyx؃pEr2#>3DN). E$pE Nqj~g Dp \TyC81cr:J v)M5uFpfmI@?%\0@TzٴVԟ}V\KS׋B|?%.nWtEh"mD^zc &YIJ(u= I耺u a:]vA۞&7iHARw$xAu"D4L&&1W&:6?lV _|7|LO&)$-ER˫/[pW_|ۊ/l"h7| _&] dd ޝVL Ļ3)2@s@ + oV"<%ke+DN18 m.Xc_|V9CynPdaK@Ph"w 4:#=ʴ6syѺcV>('BHsE$:ܔ!E~Gҩs,KЧ;N)_ڍE+ZWIܤϞ2=ezɜ2Nyݾ]fsi nB_"y_"?]}6 DphdѷA,6,ea'vYlX"`"lr8yɆ2uyKNhcc. 9>6=e~w2?}ػOGm.q;/y?vp?]}}|[ [iwfJ|LO=_A 蟇} 蟃)ӧppmLE9zeBRJF'.Jd)kA)sH{`$f:x sJv 1ZR\*jO6:.t9Ȑ(X8?_Tg<ρ5dջY~M}:ŏGsohjnWEE#~C<'ң;뮏-rSJql A(s'>\ң"T,Z4dˬ,q-}g ]PqsfR*Sz;g'2%f}!Zj256ɴ4y|ױi&شr#\Ч:>^pt:t%56TLӁ9L vLk#fwW'tUDDƫ"EfܸĠ"xfEd_|} s)E*~.dk2=m2ieʱcӎƱy؋w?؄/^UINR_^}R.E'=]p~yEw ~ˆ/2w_}ml űAAvZAi 9 ΤA;"?AAd ~ HR mʻ[o(6zlgiS*>Ob]`3OP( W['CgJ|_((,p$8RҦcKP_H5(D8uȃ>^k8$GBw aF+('84\Dt:b)9VJ, Yd)ӧyuʻ]2˻ oGlz:b9e~:/9V_t"E8klzކvN6@"l ~ hEE,6,v. wYlX]'B#r8#4Z.B#2u |l2|lcc?滧O]>{и鈽%4ne~:/6p=]}}|[ [ywf|O=_A 蟇} 蟃)ӧppmoYR6B$9xƸW21WGH.a鱺y,k3sW6C㦦 gS@ sUۄ̻I2_sGZl6'c?>BE<E`-]n+ E s**x|%#=/Y`Ӯ=%;ݩOifT/ڦHQvץQ me۲kߜb׻UqȒɴ0lMdL&c2[ɘL&5c±86[Ǧcql6Mֱ86m:6[>jQK.l8N^ (Ź%e!"e;{#S'bzb~o<%}#$bOz ciݐF p]H!o#C( 8qy'ɿ fy>R>98Mܷ?Ad)qЊ68y(0)2rB,U4g}FQ\/棽ECۦzm^%Y_v.)bg{7b&:KCa8 _hE j2$37lEU.gNCDKmEMKz2"CP_W;%h۹t^hD/BED!FJ@"LtSgo2Oq tg{#J99㩂)#xڈ"Y7Ɨ7hĩER¥@S,9+"8/xEA<y:fb1p\  ]illi 5ɢN}Yak'<% nqURF `4(7r'_!>6?-R 4GEbU55]3dL&d!$d6! mdBŐɆ&ylmb$$6fllb)_4)_lœŦ|)_dElbӤhҤ4)M&MM"Ӥ6)2MӤ@@6P, aE@P E(BȪ]n\\N|rUS:/ *K}偮r=8Qͻc'N¾a"VHظudm .ӰIrF\K{7\]-qHH6U8/6ḄLCt=RjS>a3ywdBԗ߮ʪ*匐MQJނ#>))n=UƢ5xGKd-`Ibs]Cq*)Z Dͭmҭe/=WC=VC1zavxxa(Υ9{{PO[= LlBՐل̋! Lȼ2B6&y5$6-&6fشJEpEF:z'\PLƂ|uUZҸ|8!"ӸoJ^4yWG7䂇7d:,:~g 0b)8W4K9i JyAj œkb

ī KA:D/Τ>ĆbCbC!AH$WtA?*2'L+z=jhTXi*)Gju$:֕"82}ٜR}^R\V?CڥUR&<#u>G=O43}s ֮&1vDKɵ}3x9=6,9`*wJ9S/1q>G 46n6rkԃ\ ,ЋdaƂS~YOa J&]y|+ߜk9B/檠dTM2;u+uF`4f]Ⱥ6kw6`qz™+ 2&#a'$ !oT;YckE}Oxg4 LdCIdB&2ېɄ̋! Mb$$6ĦIbIl66$6-&6{9rpѣZ!@1/T`1)z#4>+K"W-2!^ .D?G~돡a)Qa} v)%$It'#iQ ]*<qbqwE<\>IC݇^/,h? Hpbp1LeD`l8twU'f-]W 4de=-AGȢm=! 8>#Z9Ĭrxͪ21mcj7?n @*瀃Nirj7*q<~kHyw-^WB8JUqT󉏏b.Czd C.!{?{{Z}|C$YkpX&9=u'}=pG|l>XвN8V֑u4TT:3(jӱ`h9RLy2ɆLɄL&d! C&/fl'&$6fشlE|-_4)_dŶ|)_XؖW&ŶIIiRl&ŦIbbۤ@@6P, aE@P E(B?8yHi1'~VYi"3 KO~:1&42\C_QU"  &x\N7M莽j:Z| 7B䁶p25cvIj$m첞bL9^'_tB(;эG̲zCX,ABRLG*hȡ"AzlďFו) Ijb42g"ށCl,ym(օ\>Im~Jg O]2y5d6!bdCf2-̯MbIl^Ml6͋6$6/&6{ VS~19!Y)(i V4]IGOAQӦZsr1Q"  HI/kt=."nֹ9[%.0|.]3IPG_R j漤S<], Ro(y⻙r91bBo)"mLȬ!QeFSX` X!>OmlA|ogD8n}I;lj>aѼެo_ <~u Myݗ߇L&d!$d6! mdBŐنU>$6ĦIbIl6M6$6-&6ĞUl[Ȕ/'L"SȖ/65ضIiR\Eg" N@3_@B7TuvJBi_gTL?kNw=d/Cݐ! !Ov>lg=+_[Li4)mR&EIIMB4aEx EfSCִ,m%q NtٗS%d)EoGx%rMC+5trۺһ2Ʈ8#lqm,nx7Dl[ %5;HY-RVJ:X$q*R&?xl3`i|. Ҿ&6)@bMO#x/Kb!x@% O8wA S_lzdCbؑ!WIHxSS2u&H+~LyB&2L&d L< y1$6&6Ħf4KICUx㒯 f.Iپ\T4$^Ӽ5c'!6l7V?\#h07C5 hydЗnCÄGЪH:V0}cYBo4ㅾĕ-@P~Ww޹p\.BT<[l:YZܽ(dBAjo-tߺ )3bjdk"46Nu2 8D),b1pqhEa:b/ڠ}/~3d ?2iMltbIl& c/tbSxZf'&şnR:](Ÿ":]ɟ:cX/[ؔ/^-_lyc!xfCz ī 6D ;bCL 9" Ć ?O>EA5q]lP}_U:OoŤ*S/FRGLԻh1ceNeJԊD+"prc]]\߅~98v˩t͐ŃVDV yz\+ELwW?lVcH̟l2o݊Mv2/*E_i"Xd816cS '"VN6Dy"hQE@FE@*2*‰EȨcV5d$#h*uyUKFCиfǦU=6=6ؼUش{yY*h\銽Z4.et_^V}}e;l%3la+a+˴2}:"ĆU" Dy ǫtst2}zuv5i 27}Uϰ Ly8X/.Ծ>P#"K:qwzL*ڊrt*VA00Cj ukOOl|M쯃O\9Ӹb:AOM悩pr 5*t^R7) n8DGУvțA16QrC7X%ۮK222rcD0v:lĨibHo%d&d!$d6! llBŐن&ylmb$$6fdlbˀ's:eq9pf/$o3{%܆Ej.B'?lq %xzb_C7qkM. WJY2Z}C:2op CU@7cZoP"PyZ3zH0|8MdC7AgX$/og> !2R)zIb8̱1JV8ɐMR J]偡?z9!H$@2kuƟh"<-WI܋.۪Ġ>L tW8tȅG"}68lMIK(hP̍X_wZ!g8\:i(}RA>cM'Mmbe5gr'90<]/sc!i2Ɇ̓ɄL&d! CWȳlLbMl$6flMbbb+g۔/2mI"Sؔ/LE|M+iRd&œ&EIiRl&ŋMmbExE@P&P !EB2PH>\SIjYɬ$oF:^<Ӯ6|b #ŌBYZOĕ#vW߹r@(+/ܰ5aȡ;qTK\g1HOk @^=3Dmz8vVjCC, m#bI(E JNDE=O9>j9Q<_Y2ecԦdEp) "!p2 rn\!5V.嬊qT-`lU~:i)E!%cv2&2vN^ ubdCf2/L6d6&i5$6-&6fشd{eC'}8fWӾqbI2:gV7r9ċ dCh NŅF0^2D@(1NBRp޿%w㮣 ]ԛPR-t){e<"c!Hd~]r:^r*d٬2U*Ye2vɬ2-2Ve)˓<#ue2{2DE=O**ZФ/4_E@c8NJ5&{p`B*i ^d84NЪ 'hQEyLC*+E13j8p5_ȫJIjQ39=6Vy3cӪ8&{y&NzlZ4b}}*hI_ ?Myu G52[_sq˼:RIȳ/O>Z%,+BDߧh9VI]tR܋+6vÇ$ȵ~ '! l4 LlBf2y1d~l'M&&6MLbIl&y1N3G?<β2ВX@d z9*n8j-HWY"<^rwi%RG>ź]n23@NqvdS:6K﻾hCw=pTpqNsuaʁhT4l8_udc4.G U-aX<[uI <`Dy>?i۳k:oQOvث+Hd"r,Uo Kb8^JHL龧:7~]iB@uO '%) V DU%q6tԵGLZ$1O[Y{HCeK1^'08\H?/NQx5ݿ RL7O/3vDn 35@ToVX0ez *VN 34̬ FgYo2MB&2ېy2Ʉ6d6!blCf]|wĞP&$uRC ߮O6f58<+g┈P!DEpz)#{N/PK/bN@XT+DQƼ'P$Tnߋ|Rr\G[?\2rU(ի)eH!A4!?Tie4K:j(F!7NC|%mAwrH$UST&^& %8B&2L&d M< y5$6&6Ħ&4Kl9< oX .j\ A޲ag=<cQEHR~"ve;H^hjȒ6^Q(+زipbZCu5X`ъ}Й$񒘣@=>28/id_PDkk:Bl٫p].\KK }"rpʕY]J<>И@ZwC"1rVi`ޤEK,TAb j\bXIS$DMb`b) Tp@q騅ؚcW\9HSD*sr)U]tI:3>r|$!5.+m q'0y]\]p1ή6: єuLԕvUCہFzqKKbaGzN'fRYoao{1qH4TB:).9zlE.ʇ_xr,qja%dL&d!$d2! mdBŐIl$6fAڨgqB\H;۾ dExbQ6I|6ۍ؊M6 @H;CT@Ȼq;"NF/ܮZ% rC~}L{є󖜊;epBvՌXː?\ Lȴ2y7d2!,&شdvMb48tKUGAS*l%xy#i0I&حʨX!bY5/Nnn\%^o*|uCy3JE)<}Q x$v(YvMc/ɣ x,`iA--ۮ[9kv\&|=<rph~Ts."aS_mp EK*Q{厫X]#%K_ R(]сzc+6}V_:EȃwE|ЮZ UdVXfcxb8| '! l4 MdB&2y1d!Il$6&2tURwJ&ݷLVM.RS7e~-2bqCɻYhVEu-G)GD94HH~W#y48ȴRHZEŻ߉l5p=z04^ΕB}=xHER𘤇9/rI8z7B HTm;,?8IPy6~$#F_M^AW݋,˫*boD̿-Pmi(CUs{ЗyNkrjKIVlXUU p}OgCwyٵ@[8n֓S ,X/ "̻!Cf2B%6&6}:$6O[u\MS qo('MuZpisy\pP^Twd^wcMʩiN@^jTek[T~Uߥ~ܚ=ݝE=>}Ql" o<[Ѓv8t<8&_Cw΀x+$8 |R/8&'֘ːngP)7Lŭg6)9mH|rBNl8V8sM,yBhL$ƤQ %Ag!'TlJA*^ aFq:VSHV |E&~eh!e6EO(yȴ2}:d2!,YbnbӧMb4'w|)_<-_&EM>ݤ4)6 ](Ÿ"lϠXHR^NG|R|<H M M{ܧ"^}br4ۤK^CG"7ӣcɅ/IEjkB=iRJoƕ2Ή 4 #Z\ YpB)*i-%6ꁆ,N=yPZ.:O䌆XQ?6xl j=%iw3RTj֣'Sr*hv0F^YgxB13yMKTۗɄL! C&2i1d!IlMj56fdlb61srxsTzh?&\`z/lRaH]v9VŻ6Ŧ|b⟗=^%hbK!h&K!hM",ĆiY" ĻDmAl 2D-Τ52DAI%Ad 2D"^DP;4qI @UVUd"7)zA:}w/rڐn5.6MkTTn$^rM'ڇZ/wnen.(_ͼ\e]e*YeU^ݽL3Rgv+6}bϨWŞe<м}.O~>c.ƦOcd %xbK!hiT+M[/%0*ڕ<UlUl+hMA#YA#A#/j84F4򦠑vؼffǦE=6Y=lywӫ]gwŞe<4}.O [iw̛eV2VZBݐ!FꯐAK&GbC"Ė"C.Ǜt[ NjtYoʼU߭/5Ok8g[9cX e^3tb˼T&IU] ᢪ~TSpK]I$u{\'<_E9_2X q jx Z x7 y賋NIP˖vӱ,/|AVUgH& ~U:\l$]FvxFAŮ8P9^AGNjI򥍷ԁKU::Nwse;^i1 Q &! m< MdBf2i1d!Il$6&4Il6&&6Wb3lbÄLzHZoyz^~9g>EӂOH3 QRGN/ۣ}QXlGmHqA"Fi>x`zbG1Gq_vGT%nXBf2&d L< y5$6&6Ħ&4M ?jjK`Պjгr }/|yy> 5R_%to}D"gD>džݷJN>ڤI*IE~J&ݷL4o>! u;z@\SJؖ\''}Jhk!*C3ŃIJ/rG ZomVtͤju;U(r՛ɫ)'qdȒe)x\@ЏKY*{7"dbW|D\ֽ]'!o<؟/ 5^m9qjHn\,Mv;U초%(C؁B(U " Vt*[Ұ<zD&yeݜ?-,cBGbuy57hKU^{'!nɄ̳gMMNl2Fdg=(y InI=rX{!(|% ,YcQrdkݢ(oz!cN1_;{JRbR^O-aҋk+Ċ>9yGp1±aXU+> 'i(©qqzr~`%[Zl~C|©ďCGfVo# 0$ytM P`j`fׇeG5y,jDž}9ixCYU$Kľ0=CB9Opt\!3= Ѹ?<SpjC]'>Q|\ 꺂@02 5%ex$wbJxj!w.Qnoe\ 8VԀuU/ >iGI( YpZZDJK%%"+.EMFNzx +;NkSW2]=E_)!T*E@K=$Ozeȴ2}:d6!,YbnbMbo$//t"SxZ&MwIiR4kR3(BP> E@B Px&CAVۜjQ Z-)ݚH5x⊤y90Qx!P8/!`ðABTPs+v5˵S𨇿ޡ`EPs j_'.WTT=3FYGEV 9H"jAQ1UopAp$<|PH B <<\\ˈQ dxq"NJJц 焨{j*>~t}St1#J x`xGY?<Xi4<$O~Y&d^ Lȴ2ېɄL!+dl1jbc/%6&ؼJlӤ6c@rs](@jUŐ?M*@8{uuݻ"}ۉnc&Oǖ 1ωjB:tm /]폋1Xa5ꃗ+ {IƩCRW_}W \x-<h`=bAOJ 53\[G-r"۪j[WJHizr 8g!=VЧ~+jMŶ|)_Xh|AI%Ac%{M",Di]"7 D"gRl 2DAI%Al 2D",tѢ\˂NƝ <~ "O U^s ZXmY_L^k4"<Rׇ6զ5&H# 龍 uApD2rMX_o)U2.AVxgv"-]ס nwkC~ k7**W*lg{w2z/H^Ulޭ={vx<мE_i5v16}c&C.ěD[" ċ '["w)`"`"EFE@ޔǰUQТ^*#h]A#o  iQI/ 4򮠑6dde+h$Ǧ]=6oiQMV=[e]e*dUe<'bnOW왠Ug}v2}/2t/}d**WyFVy] 'Z9߸E(cw^/wiG `ۑ>:@~ap\2cqxáBOqzL($ hĮ߸G.]>cF6nBEW"T ^8vaz9(y2xPr_KHiDsg \]XEE+ow,krv|_ N$vO7UlIZfoH=w".g< MdCIlB&2ِل̋!7!Il$6&4Il6M&&6Ħo 9|m8}P'׉˗ccn ir4"%qIU"dzBw5v#ݡϭWŽO];p~ZQ!trDWoQКoGsH$W]b=("^򌻎?pBOrx׉\7ϣypp8Dx܊M8Ʉ|xņpju1b%ӟ(o&I CYWkgהiGoɭY^W@ Fr9@_W_+vѦ۵bKqq>#_~Y՘IxTB:Դo -R2p-5a;S<IPcWrcGUxNl'R>QzF%R4 pF I^ɋW*r~(lݎRd CǁXT<`מt߆-Hui%d&d!$d6! llBŐن&ylmb$$6&l^=ض|)_dME|-_l//zIŶMMbۤxҤ4)6Mm"ӤhImRlO("l[(B"@'y'v)_(N[!yʅD[7B`{X1v4a/q -`UI'Dgx8*AxYǛ 69]E:1VH+baJk\Q^.p}@G1Ҵl;!fnb$ 6>TjY 2(:Kܒblkze1Pii2bECL?hx>K:" CFEWNgo'j"!ǔ%Aq%Za䐕3! VC&2-L6d6!blC&dVMbbbMl2͋6^N哺Xc:~ZBs)Ծ'ee4|ZɼY7Q4Ez|qh h57Yca,`)c'v@ 1q8(Rk&PVXVMxeq߯)H4fAe2y/;qe2s R-Ⱥq91 |F:/!;  <|<r_, YD.BPo,Kr=nFrE4bW=c;# 02&rGBM"{&d!$d6! llBŐɆ%$6ĦIbIl2M6$6/&6&ShRؔ/'MbSȖ/65C_IiR\f4&۬2Uf4Ye2fٮ2UU*{^d2L{^{y"U'{F}hhҗg"1Ol TWN`( ī %h<4N 'xQEy <U@34Ҫ iQ}@(nNͫULش*N^{ iRgf>^4/W&: |Wvֿ̋?_Ց:OB??_"JXE"}Kǫ.MVyF}W{h8g\6?9=iš盃_(QMFUF+M~ɴ8um1_^ɈϬâ$>n*Bŵ x!q3Y`Y[:`N E#,@lZe8:uiqej4^r8"c]u%N_ +%*Xɻ~S{ [+B^[FZ+?xZxuḋ/ח9M^%tcjT1jrq;iFeĿ wCOL&dGhngP4!oH䄏ư5I}[*wUWmdEp"GPRYIU-:''ygg]H871+]ӦDq6qڤRĹ"zc4.YI(,ُ46yN9!4t\BW $3-]rrM Y62tn|eڗ#?@k^=N٬?ޥ#Qp7zkĿYMoVT'dd} hl;]<}:8q׊- >~_H\',}B-+* ^&3uEl;Јuk:!N=f L}8/__(>\B~fSHD<$-ôKjן8i9B '_,0}Y+n*?'YJ#W!nɄLgMMNl2ͳĞ/-_E|Ѭ|͚6)tbӤx֤fPw"4"p Q[龖1W!^GLl6z/vwpeÙABKU]P|mbQq^e{rOW]E}?ݗu/4ZV2?)U ī '"<" "UqĪWUdT1N6F^p4N "hU.A#qAVlc*W_c^Oe=qb+kUиܗ}yYݷ:[F_iϗ̰Wd/nˋD"W 2D>2t}d>}U>p5to*5rK}az;vn߼+^^Uʑ뫴Pm +>,#[U J^o\02MBf2ېy2لL6d6!b $6MLbMl$6fdMbbb+5^8L7EwcPw1 o5[?\Kp#DBIrюb'=4b'{Ծ~QSiJ:,G\@W=|#gޓF'y]bl6/_p“+ !;܇}x.ĸ\]Zpai9%sdݗh]`$Z8=ZT%.(#Bv9P|6 WJVlYFS"HF^J5| jdQ~X=Sy/tB<toXbNe)ac0:<=@Y)| L.WXmPL6oIUtURn=3?,q -k 8$į&7Y=/qBIdB&2OB&2ɆL&d^ Kb$$6IbIl26$6/&6{^/6mIbSؔ/ME|FҤ4)M'MMbӤ6)2M"4"lY(("d(‹P,9TQ(QV`pIb$8C5}7V͞VQlq8 l)(/\#uY*6@6 )N7"F!#-Bal% N+?jE9$]udenf=8P߾"?^x]h=VD6 '*n"s) 0KÀ;BF}r&^mI!(rr=lҝ De$~ʾ g]S.{x  (aMIGXj:4WC~94.6d6!b $6fؼlLbbb+^FEvazn? z*zGtڇq]TcFs`}h vf%CtP UO*ȧ -Wk>wt[ht"TxغK崍K%uCR1}!iЃX2`g +RUGWSwSRCUuo/!$R92VUՒEi[qnES,@ro,璞RA`Ś; =&1p1U! l4 MdB&2i1d!Il$6fī3nq& 6D"gD" C_C$M>{=8ؗ 1("QpcS3"WNK"y"h&UN‰2y,y7ӉM&y؇cD$0^WUH,)Q8A_?'Zw dyv6T.TN-8?"x+,B=Cj:@U$bax3OY,Y `?ݡP@wŮ?*fd\N$^>XѬTECOh%8X~j_K֙`UovzȐz%x $+rجyGޛ8 7UHP2d ?2y$i7ӉM&iسŻ?]Ȕ/I&şnRdF%](B"lϠy$0kOzyEȨ~`\ JN <ւr[Mxrs;ZzkWS zHmP@qB"FA\X%V54㚝]nUxu C,:вޝ. z+PYwlUǠPQ 86TauVJ'/"K]>ʟXಔ l!f'WgRA^JKwCZaDFG# J} O" 8TecIy gj ' ׆I.4쬟! WCf2/L6d6!blCflVLbbbMl6MM6}Wl4SR%XQUQDOqO3"Dg<swv<ޮ 1uBP̾Vq?:2Es ÆVp+{ V:5d W"Ĩ] @obNp$-a+ Yb$xIH_)1UFI#$kPRMWحjHy-(7BvMюK/ݳ!bC7츄վ\pQ\$n6!UP+~/Cݐ! g!v?l=)_[Mi4)mR&EIIMB4!Ewȯ'N4-ձvc, Sx}&b[Ȕ/Z,_l"v $Al ZAl %h"K!xqZA"C.DDY" D3)f&]"7 D" Ć"C%d\ЇJX撖ޏ>Y{34 rDX7kuzZEhZAO{x3MT&r>N^2()kM O*.Aqru,{ =؅ȧ._X2\Jl)JzTSNjz"jUUO2UX_e<#u_{yVib+o_e<|חh}ѧl %]͟3 DDoAl 2D/2d 6*NЦpUlUlT+My Y/"0F4򦠑5pA# ySHVFHJ]FEͻzlcccӢ{ʴUV߫<˼{y&N~YŦ݊͟3Aw}v2/w}}poe;_2a+a+/[5l̻!C_!!hM-ĆE",Ć]6>t>tlywӫ<#u[_j8yWɟpΨs͔WDn{FsG;y2b=o1 8k+nwQyTfu H wX\CcUt= G>}+vhUtǫApWPGլ{w=>:X=W8qz2n."v]It W VKSu7%Nq= .+A>˼8Mt!!f _V5FCHK4 LlCIlBf2ِل̋! Lb$$6IbIl2M6$6/&6>ЕMÔ`C@஢)|8u`99ݦ^=3 cZp_~זmkaO_`EBQC1n )#xd7.gbʥ\;C`ӷpHӘ<,Xň/Oc`-ZPea!E&v*>>>.@[<[kr]ȘbC}r W!p5;H]w8XiDWn9qk(7^W\*ӊ>4Sh耋i8ˣV@QuQ=.gru}bZJ?#CPD>1b/WxD%|fWryiEHeլOrរoW*l|pDkCeĭF X}Y j&| RKl']_g#2sȚ,C#I} '! m4 LdB&2y1d!Il$6&4Il2M&&6ĦĦWbEŦ|-_<)_lE|)_XULIbӤ6)4)6ML"ۤ4)^lRd(B("<"d("EBe^mt><ޗg, 4 RO !ص\6tNUgc|I]刽+ |%O!uk#9 <2JX \Cc9>09qꔇbsEPJ JY3(w]l2n~;%862+(c*j :^, כd2WW9K|("QѲ>tsR?rwY/ASP|QOH^{V*dɬ2U*Ye6Lv٬2/2U^%ue^%ue%ug{M.RSoY~S6UY_~hpSop3-2S6)es)ěD2Ɇ)ù" 'hS8"`"[E0Ц2tURwJ&ݷLVM.RS7e~|Q!/Ңɕx+; `l,qig;mO:&4-R\#'\ w5Mcv_-rzu]}āx]ty Bl:z@yU2cDt/Z bڤbiFTyq,>O},NJǟ)ؒvG}7Ҁ"ϐi2Ɇ̓ɄL&d! Cf2IbIlM&lmbIlZLl}-˅-4|V==#cEu5Y򆺴G><c{jT=7EZ $tu/xUh&#̓^a2 ccS{s\ᜈ}D1gQO@08/G4@x=$uNtxvU : D_ݰjbfX.YІɫcs,ׁTUphОF+82v"`%>W$FT-WQ{T,2ft!킖aR#Nnj r&t-G'8Ӓ3|1$ᚚcY7sDPqt\*WPu0*z/<(q lE"N1[؊UN,[{m]CF"!!JA@%3 ^Yrn#ezy2ɆLɄ&d! C&2ĦIbIl͓flmbIlZLlͦ||)_dMŦ|-_d-/LI"Ӥ6)4)2MLbۤ4)^lRd(("4"l(B"EBc$qxgAI ;A|aJ*FMqJKdv m|cdm%\I l4Q'lOEBo)ɼ%*("\ͧ3ўt̹:PKE t\AC]zOI8^ ÇET/wC^'jۘI@x] =6mb~ZK Xܫ(%^NHb(>'+>E,5MPGtL2'Ŋ4*Zmp-Jji'O(>x!O67ƇSaB&2&d M4 y1$6&6Ħf0 dc2YU :X<~CJ4qU]6]+8pGIpj.~Չ/ذJNI[Ij4|m]їs&lU nw^T\*sK?_\ڸ_bAo=M)}eyo-)vH˜f4U8/K-"ESGeо\BhU|  :y7MR0sLɄ6d&d6! Mȼ2ې$6OMbMl$6fdMbbb+MI"SȖ//2Mb[Ȕ/^,_*_I.MŶIiRؤդ ]ś,aEh"!OogbbOoĞ+^Z6rbS7=%xZA<S"6i"ӊřԔM"hy&EߚI= %h"K!Al 2D 2I9Ct$!libF*7wL̓U&lW&Lfɬ2U&ʴZER^UR^]Rwߤ"u?UЦ`UTE*ͬ/4c6Ucz)E29 M"hdC\TL)XVQп"cxS" "`Q94ҦqYIFS Rw*hMARfJ}=6=6ثթ6˲*e7^~Sm꾖-hxSݷ,h巠qq 7/|yy 7C_1u:_̰őtL,FKDДMo"C}4VI)Ǜt2;[JO>ڤM'y5?jVOiФ B֣"5n' t@IS|^5C-: C =-=W[ EdR[ێ;}n-Q%qHH &f\t+oXm-u1hoHq\0r2j-B]O㺄g>We^bJz2Z9+e;%R/kbM.AۨX+pInbUN x q8 D3d >2y,y7ӉM&ih2=,~oQQL0KHu,L;.* +8w3IȃJjbbڀ E>q8xKi@~/TpŬoB'ypMN"is <4*U Hv>FCtuVFE&῔p sd6$$]*x!kzW&QXa sIƞ (G6K}ܿ{{/{[5k"@}:'I û/ao'0$XFfNM+vF|QyƁrL]a%Nf*b*zry*80wB'uRCtnDN*Z9OݫXx=l$׬WЬh2Ծ-߇cc`Ml8N˫D_Yud$I k'j R/(~mYxr}+x-^2wJBֵzPlso^ȼ2}:d6!,YbnbMb$/t"ShZ&MwIiR E@ (+ -CR𰪖;T :<UPaLsQ7$nTF<_Og> [rzX6[4fZ{ɢ]ukjiLk;v J*lIT8sUgqQ^d~;tF1 ]JWM{"q[jsG6aX,W8fP8-Ee PNݗIpjLb+58PE8ĤM Cp U:oH>KdBՐل̋! Mȼ2B6&y5$6-&6fشd;O;$q~/N6мw4Foe|XLBo.>US@jl;Hk> sv# n2ɠ9.~z!mtޟЃ b"y "|qGqE vU/NQ=IX 'r՚ῪWjag;'`m׶)=THDwNK/\Wa v}=Z )'') }%Xa/D_dŋ_AK&DbC"MbC.DDY" D D"v $Al ZI%AK&DbC!Ad DQ$;?R}o$sQX5E@X [9+E{,y$![}מu#*r]_s/2,Scъ~cuƻJmXnYZ'"oqŪhRy ?ӊ/j}bzz i .^WnDKS=W.**ӧW*t'{v2}z/H/+6VltŞQU_e<м}.O&v16}cfC.DD[" D ' "]o 'ȪبxQE'xWC*2*^TU4Ү7ld䗆yWHFF2FZT4cӮ7ldؼ&Ǟ22}zg*O2e^;=*6VltŞ ؿ˼ۗ}y&h| ]şF_1w˰v˼9_f;l%3la+i7dtȳ+d6D}I%AH%}K&ǖcC"G22}zg{'Npҧ53ᜦ, Gr9L?cw˼U)l\Eֺ@2ܼ[8(Ph 8 un|5S=Fhp`~*گ|o+F}*wV(kp_p d 66r]X[EVשQP *l^l й8:^5}b˼$H^nxYYup|~Į?Ă(^W2G9`aQ2Q`җi2_͓لJl Cf2IbIlMo3&ӱv!&6EE|+|)_TLE|iR}o{u8 c[)ؐ}I64DRA:ik 6X{]"1,~]e}%/{d,TZ{kXѰbٛI򸚣sk]•`S^wI鸔_ 9UFQ8Mȯ"Lt2zr-^/ YBf2OB&2ېit_t Cf2ĦIbIl͓ĞXalb)_4)_l׻bOoTlÊE勿)__/D_c&EM^M@E_BX""!OogjbOmĞRcb/D_"=%hZ汧c/N+DoAӊ7M+gRS"6"3)C.ěDЋbC4bC%娤x[h]&5kw>vl/)} دa?}?HTxpjrM]\+""7"H2} *d٬w/Wy/YeZ\eJ˼JN{ԝH%~"M2u?o~q@3UЦ`y@3n"Mnzx|EsJ&Ep069%hZf8A; 犊`*MIJmTCeTΩ7N2Fi8WSA#m l4Si^Nؼ^V%[]'Oش^'[(hxS,hUmATGeA/c|7cz2mΗl<.ԧeޜ//g!7%"hJ&ݷL!xF}d>}Moԝ]to}LI}!5t>2mio-r?G±tL$>nDqSoyuQLrcSyDOuuzW U oKT{YT@IKz [ظQ!m^A&egJPA͢$}`CN}QFhrUz,Җ^+WuTl} _{R WoauD-KjLbT~[6+r΃LUȼ2:d2!,YbnbӧLb45Ȯ0! 6|<Z5θ[f-娷CEHBZ,(-&[OL^dZ륤HY]P]˓oc>$'_q)b><.oǿή TfC'3誊!4 gT>b\I_#yv8AY61lP} G+<~C#r ^=C~[=eh7ut!1!9(Ag!Cw]JY8Ϩ"8uت 5q}#Q br6J2/U{D9R7ޫAxtū Q ;_L!C&2B%6&6}:$6M{Rh|ѧE5kRۤMMi@ޅ"i(BH1G~).8Vz=:Eۦ]pPm11nDX"n؏1ubU[Haε$N" /><5QT{PD*9cKo|^gS?,P$OUFR .hGu 6|sq]5}Хv12i5d6!bdC&2/6d6c&6Ħfl_M*jR.8p9T ܭl@?%ʳItŊ)ĥ.okhUu}<ԲL;e!nZY2>,jWDź}\@ xV2H%GUEYҨ˙} UnQ+vx7)$0 Y(p삲( q J+yzhh H'G=0dOW Z`4zTEZT?!~4 ޥU^uV,[}0·GIܷ"۟]b_g~[+}FwA_'i9X(]/˸Lԃˊ`ʴU&4]^ݽL3Rgv+6}bϨwŞe<мE_i5pcli=c8AK&DbC"I0_T+MY/cxSVEFE@**6F4Ҧ5pA# ySVHFȋJ]F6zlcӦlسUUOL*r/^O8cbnŦOW왠˾L}?ݗgFFKŻ?fc"3l2oΗ[ [yq [2Ly6R̆]6>D" Dv>ޤ}l>^}UUO}DINsFݿ5 ]tW!y=XD|W U ^([GT֤WF5ő6bpiu{Xd2*ꍾ<Z3(^hheVsWydu M_֍hAoR% 3P;+r>+N ^16[gZ9?Iso Li QS3nCnS Wܘ"G1$aȨ&MR"2v/!$d6! '! LlCf2-6d6͓&l&M&$6fشlh2!af\`}9^q>nZ`\_LCL|+N$=j&/ڨ8eĈMv0ŹM<w*;8_8>f,zzD>SPS?0ҷ$hw:d2?&<)GODWH:_>L:]ʲ'R~Rh͇. (>HtuJ?Zq3=m"RD!&By$6:*"MesteFv'|AOuGwyN߰ 0Y4ex;a-U}5-HǹA #^[j y T'yPa‹a=m:+@S8ԢΤ}p=#OtV-W58^,^l75sKN|\40ƅG%缦z4oKȽgoXn 2MB&2ېy2Ʉ6d2!bdCf$QhJn3ag|N)5/E#() gy\FǽA$i­~gQB3(jq[<̰\N+Ӟe5i{ [m!Q OMـmynNKFN$Xcg>, :RGI%vū E{6l>hc %OY{0zWGPMcUB{oaܐ"<ϐy2نLɄ&d! CW&ydlb$$6fl^mME||)_dE|b"[4)E_6)6M&E.ME"EEC/D_!+Ğ/D_ˉ=;V{|MoE||-S"6e DS{qZ1%xZV!x6XIM $gRd ͤAK&DbC!Ad xN@í?C# {}Moԝ]tm}L#V{Sʳ\`t|i?{QŞKnHu WUY,׍-cЛ{Q.gH1n'7 d6@.A%%(OwyU-u6jN׍o,Ak{ "T)FaB*x]uG3r)զ{h?lqNY\7\{E_pNo!$d2! '! LdCf2/6d6͓fd'M&$6fؼJl#2|(]qQnk8 oWEz],Mrbno1"QݰYnW.F 'Ƒ*]?{fGP".{&BFvrZ~A!I2 a QsԇXG R88V6nq{®֢29Mݔ1h]VrfcZrV{;xCōAvU|ΙTMQuwBE@d }m?U.dCOhB/{8.owa|7BUʁ>8pt0^T;ng1]GZǴ#EGK$FzP8ԇp"'ō?0CKB&Ň k;Vs. nWoh%p,80!q3[b5+vu/RQ9 +0gc7[hL.{9ldT4ưyN΍Z1*<+,뙐i2ن̓ل&d! CW&ilmb$$6&l_mOŶ||)_dŦ|bW2M'ML"ۤhҤ4)2Mm"ӤxI7M  !EB@2P a E@^"lo|٬:RoI jAP&Ih(0ħE] ezP%xϩX2dW@Neىr#.V3|O;O9 I_F!@xOԱM?!\s\m#F?%*,yh ';wzE/ڴp/j-Vep"eN5U PCR>rxջǬG1D˯t3T2ϨuTvjEʑfh;˹"zmJ;,KOΡYSUяe4EST$/#ƲJ p-^\9Z Mȼ2y7d2!,&ؼdwLb4EH$<|{ 'E Cf%뽷. A{7e[,zIEG}cU-G(2Wx/l%~$)Qބ{z!D! I=hW*?4L-_VG-6>xXr,7k! y#qww*4Q\KtNDN H+E  ƮnRbju;3X>(7^aNقN2vcZeШiK< LdCIdB&2ېلL! Lb$$6IbIl2M6$6/&6۔//6lIbSȔ/MEߔ/Mwm/MM&ŶI"x}"l/B~AŐ7r3 y56rbώ^,_Sśk|)_<+_<M"hfCь^VL $d M+VgRS"6"3)C.ěD[" DbC!A( "Н/;}vѴP06#s\+5^5 krXCלA*c[AY4].i!>K`Vͮ学gT3+1ٲ~ϧ({5Ye2U&XOz̻!C&2MC$6&6:$6M[ޣO(i-H-)Y&'u&/qﭫb[RNjrq6Jz1jS-j۰K_F cWiq8z;@zjm!VN,wZ(qpY?\iy{"VXv w UpAKQڲw]4ήg tM.[̳5MvQ,uL(!f x% OpBvRմ<$dZe\hU46s~:n8EďOj7Sh'-Qp"7@![wE R<#EOWtgj(gK \P kЊ^)IVw/5K4zGREBt=bTu! r'곂!D+n[;"[nxcDfE?UqQUPt co[0-2:j䙰zW(kDx2Uȴ2:d2!,YbnbӧLbo$//t"S7/6)tbӤxڤ&Pv"<"Ĉ 0ݫ矆W @S/ 87۹4T8ց}0*sZRh8mr<˄FU7dz @݊_CTh6_n6)( ZpG ]ᵗUܺdKr Ҩ·mM,ʶ(=?MB:9v|=HAoqKNBu#jxR'{ұǕp S@ )|F$ )"?\.%Hc<~ Mȼ2i1d! CW&6&ؼlLbbb+M"ۤw-_,YUeAWϴI)+RCrbU8!#3XE mޅL\U>DMC"bJAmd>Yp pe2l>$1F?N^s:HI2 Lz+kϠm6`rIQƄPFh{bB}",C]ŀwb \|s@iʥL;(R{Ug؛Y YUd]te_őV:੝XaW([QŧXH`{!nل̳gͻ͟Nl6MĞ/-_Ŧ|Ѵ|M6)t"Ӥx֤fPv"4"3ɻ> 8g!"=V~+jMŶ|)_Xx|-AI%Ac%{M",ĆiY" ĻDmAd 6D-ΤAd %xbK!Al 2D,Qy;WW״Ǹ&kQƳapr L. irWTQ5>dіPbIA!~4%@xo~i-FƫH3( W4$(-L+?[e@?jøoTnE?ΨRm[~Z*^#ͧiq(}asQ7ɚڥx#Kh#KVwW>3R3 'j8up];ZH[ K Ƨ8m3zHCj 7&;v\bWs(8a "tz붼ZrbMmQ'x̗YJ5iSX%mv=\YoOCl|:̒~ NBi-]ko%q .WWH({'? xwrl4M!Nk^έwrBan̓ل6dL&d6! Lȴ2B6͓&l&M&$6fشJlq鐻I Lnwvzc io  Bq E!3~DŽdMI9X!!oJЁ$% 90 E;9"%:Ҏrèggߪ.RlxቝzBZPU| dRftˈTwq8̠e2-Z^%X}uNuQOARoJ,n}$49L%E*0HؚeXቊpGǢ3ǢI}E-ruDDk뚨sIX95 BqP'z$2" 'O$XфL,d6!jlBݐل̳WMbjbIlMl2ͳĖ\?Ah"Fo宗pJ 2:ȋ G gsJ UJym_h `eL3>ibG&X+5O|īΨrM%>2$>NA=OjЍenٞ ZVj=5HqVMewz1IZ?хzٷ<V=lCxrܸ5D8>loqeTPwQ-FWB Zxu8N8'rYu(]8?.aDp 2MB&2ِy2ل6d2!b $6MMbMl$6fdMbbb+MIbSȖ//6L"[ؔ/^,_*_I.MŶIiRؤդ ]ś,!Ex7Pd))M p7s)6rbώ^-_Sśk|)_4+_<M"h&Cь^VL $l iLjJ&<"Cl&E]"7 D" ĆbC% Xgզy& E, |Q9P$۟ ٫ D#,z`ǭa.(ƭoEڒJPq"*3/zsP~ۂ4^]+d`M:e^hV&fɮ2OV*Yefiqɮ*f/*f/.;^^*T,SW4So4݀fi 7UЦ`y 7C_1"9h"Xf8g{AI-3d 1*p7*2*USy mcUlT>Em-{@ئAON=Sdy4hD'r$q khݽXz+/݌}QJ/rQ`+OCt +"i~3WF %K˗8?%EtNݚ6W/d >2y,y7ӉM&irn+=LDY{ub~b iW!)jY s-prcb>t7)Qy>WvQow1\ѦṋSM 5cgmZg&8cp8G44}=d8{y*xJʯ qƚ!1rrc:ѣ1<1 ;%kű8{YG+, [7IV5W|30|ܛS_SΫH.8i׸$asAq M%1#6q}(ʱͱ>Lv^I9c!Ρ"Čkb;.Yb]"]*NR`Ivk~ DcSتQ 9㾀*%fQwrB%qr(z4d ]c5λQEyA"(1Iq%--76OP[ۊ*]S֪^0 wCO&d -w<0Bgacqߨ*5jaGII D{U* t8! z9c?}*|Jפɕ.R#yosM em_tlnLj^'Tݘ٧.hUTBpI֫ږ{3(Ǹ2y5d6!nlBYȫ&y5$6&6Yb(Wac8< /$LXr:1 #x1+y?.N|U+À349?4ц{{amzrcص8݊U(12~E& y;`EW7^A)51H"$+!EVA()|oh"=zt‘<a"+_Vu-jپ<\~aS`ΕXdaAd6F 1Ƣxى!iN^ )xcUPd7dtlBYȳĦĦO'6ibO/tbShVfMwIw}w'}pwcſlbSh|)_*͆U D9"N+A:`C3)6DΤA#Al Al 6Dq"hgdVfJ.e^fiJ.R>]uet_UkYEp.cl4^VN6D2l DЪVUdT*2*ZUQǬj8iUIFH9AU4RqUMFͫzl2zlywӫiw/ӧ{Uи\{Y*h\龼[-/4vJfʫV2V͗y7dtE" īD"tV>6t>]e*tj8uox?ig%+}ȽfF>D!@l0Um:TI8n.EHpAyUWA&ENt`tu'/xpjanA_FXq6'AXۡqi~ ~"EFpG$yw72bՕ/̐r/kŸ)A @6; iCME ftQ]RJh7emg[޶F ̓ɄL6dL&d2! Mȼ2B6͓fd'M&$6&ؼd/WTW5 eU877[bPE n p9_ Nr+z± pj/poG1c~S kxTٝ>&uN'qIMrU2ztox&8 =i}ut_7^aJ×'55DVy1ҼQ5r PImsY{o>sR8.8<^8ЋGp % mab8H3,"3:XnCp "cE~ W P.%xrNQrgbW /פB") EEP8 (I;8i$nOXe]1eP X iQiy;/|Vq}29QcȅBBgb}xkM.ܰꘂkp(8_7b!]*Bk &! m< MlB&2y1d!Il$6f4Il6&&6ĦĦWbœŦ|-_<)_lE|)_XȖ/6M&MM"ۤxҤ4)2Mm"ӤxIѫI((B"4"d("EE0CnӥHl>^+7(ytGXDF7|ٓeU;.|9l*!w\^yi}&CSk:^[x{zx)?( #z۰b>q=qܟ q,BJvA&NixϣrXi plW,O W{ MJ)101v== y|(hi(/(''.jsathte✪C]NtGAY["$YIQ_X. )CpVWSt=Y+"!ȍiE1oi|\꧂caidV*bɬ2U&dV7W*˼KR{yEd2me~ R+U;E_^ h~^Ec8ZT wNZ`4/ϫVe}p??_a/˴;REȫ7̗tAM">K]R"u]u<'xwUS瓎^WW$^*7=y+z64'{C{/꧃ٙ&SSz1: _g y3TilV#Y)+*QANhU0f?IQ)w]Lz<ˣO-W!22]r_oXTsLE}'cX.Us%>w"]9g<|f :vpqK̈^ ZTw1e+8t{-1 !ݐل̫WwNl6M_'-_u8t?Z%%庀fq2 z05_.tx>$%z*wWSJ8<> A.Fowoyp8#Cs;gE7{PKC ]C mϊ-ua~=oQHA"zN'%djWExu˩>RpzEDu>ڤ\|zF;V=0EMO+dC*D! D퓻ru:9P *t!˄ S<0O71WbtR)XV"}e1rc;aFuixXEQ^L(xRm~*D(Jy[Xi| m_ҡdΚ}?8tp=#OcVG|$GxB[G8!Ԡ2ȾqB_U=| *G'>yJ>e~Fwy ~C]"a+ZMap[ښk*`,(&(we{'d2!ndB! !o&6&|7$6[ ~?`AeAW"hjEQ囎xR}?+ s= w!pÜKPĠM(=u"";hp7K,ҷX~C}R(YT*ǬBbydRDu;w]NL,&"_6m;fѧP5} a0 `.I6@FRwqcfzu7 b/B!! !/&6=d(_t|MUZ5)ۤ&߅"4NzpuEw⯣/[ؔ/-_lAc!#촂 Ļ 2DsDI!xw&EbC!xE!AD2 uvpSl %ک|Ec'>˕4ʈ g=3V\hkw4%7FM?2]e~z٬2-Wy^fiwMOW쿮"}]Ew=U 616Ep!xdCA*6*UQ '6UdT"`"lj8yWIFH*uyWKF/hccӮ9=6]e~zezz//z-AvŦ+kWиݗ龼m/z}̰2 y{K!x"C?Ox#C?GUW}|WOk8BUm(QҨ4˼kێxX WD'`;४h;|"g*2s7AA?[5Hް;TtǻUIK_H]̼H @N(F%ꄒ~~nG֣Q.GNS |JQqk8JAt:_ؔr! jEOŨ㗚E{>鸃Tը0ؗa.#V)h_}&d6! ! MlCf2mL|Ml^$6&شHl6M&&6ĦazҚXlϻ";}bЃ>! /h]s=),2)fupqi8ԋ[`hB)@У]=g?o{9f0j ?Z8%q9:>NxM!hJ)c >XP/>Jg=k0j|ojDȚJʯs2Nz^=M%xn22A:Qqm! }NU#]aQ[`/WJ ̬\jŧRbm",?qj'ky&ztN_8N* Kq#@'g帩Ã~2ͣc(e=}VV]`%5MŨ)˕r{ñH! F}fI `XRS}zb̟xǒ삂v`gT:>ucE<[QIPEK ɄL6d^L&d2! Lȼ2ru3M&&6-LbIlM&y3&6EE|-_(_dE|)_Yؖ/2MMMbۤhѤ4)6MmbӤhI[P a ExE@6P-!EhQ˩_ b/¬B0;i/R:1uILNc##JS ۠5mz^8O3@t<\ |{RHŀsƺ3m>c!.eeA&}Y8X,\;eW8ǏfEpM]ЅNǷ6 QeT^#B;h #/hy~A/#<+^43@{A闍H'>16@zQ-C`_ʁ!wsB/^aBf2ېi2لL6d6!flC^^bMbMlZ$6flMbfb[bފŶ|Ѣ|)_lE|fb[V6)2MW6)2M9e(B+e(Bݐi8W!<űb?x|YEy"xǶDo?OA9y"vgR͙Ad 6D 6D"Iysb(f 1Q%dr}R ܅"}ߢ2dh|z>y҆YΪմ9_/SNhlC;ziED_ĹH}\YeZ2U&ʴXe6Lfٮ2UUU6{{yIb/H]{^ͽoBE@=-*yhxїWWk5{^Ex^1@e8-D DJ8*+M‰[^;Z~~LV;_aϗiwNW#+v K&tݥ?G.KU^?O.uO 犺;F]^LB{ t\ZП!}`QvJ4)^U/|=(FUTm٨x~`P|ETIJb`;*Ʊ1}e늱Q}NۮXPR.d_$Mg4j?oF}Uɴ$7P"z8@)!sOQAp9bdSjqsAĉx,r-+}W^?(ENyfNޔ`y8caeĴ.a-k٤tM7~-d2=2y*nbӉ&i&d!D:آtc'I]C3IEj8ዻvcן t7ݥM6{I܉x=z#EY!e ,m5_ď--jo(FbmMP1铜 Ey^GVGwE]λVK(XY!d~/4^Wps#d9 k2Rs֣xB s|~V܀]r"ha{sd=8T}QYGPȖ/aA2 F9 yl|(_g^6I 4x8`/Ip~d ԛ.*A:L}f梊 ?dỎ?4 Й㎽[K+%1rb!80ŸWuZTX/؎?ϢV)XR= *S8JL|2 Mȼ y|7fشJU募._d/עI&O7)2MMjE.(BK(!q[-L+ 5P?UO.KIuy/t 7Ȕ& !unȡ]י|_(bJ/2]5f|<زw(0I@)b}u9MI6r#W_HϿM?D|~;ΓTfu+?~A?7y$ A> %zX럏1\NF?Jut9Lȼ2nlBUȻ&y7$6Ml6M^>ehgz y1LsXqSeKmhYۗ%a\_琋%,2pғ+/ +bQP%*lzYXQ'7#rK>C_99]o"C+)`3朧=œ!&6u"4iMd0؋-r=1@mP)_5 <%| c Mȼ ypMl~:$6/{/~|)_,_Խ&O7.᧡_G_tpӀ/{৏}"|n"S&͆] Dv0DN+AA!CL D! xE{ ~"hEaxą/{ [_/Jg7_aE*ס yzgpqFx&2V(7ܠ_TҊ(GȵI[Mъ[G.˻cʾۑӁ8_*Ye*o{d2w+6=]e~/uE_4Wl2&I] DOmبxWEFE/TQЮ]d#h] 'A#s7m%#h4niWFM2?]Mw2=ػMOWm׮q/}y[ݷ;F_4w+̰wd͗ntM" DD"y ǻt92=NzZùM}Oy[wۘyp[hjO2"~{i"  e4"ɝ}z8](]T^ڐK =/*[r)>Gu 0e^N 1}"Ss8\.gۜ]dVבᇻj)rvW=xPoΥzk<m</_?lBG~ʳ N餤. >CrR)yz]CElBf2-Bf2Ɇ&d ldM&&6/MbIlM&y3&Ӭ蹱Uch^6".jAS+^ͰWJ(2|u0 *G"!O7~DtÞMu2_bsRe \h+M6~*[%<ܿ,UmR;9yYJz..SJ3{ϜKlȭWMbE0oũZb\YP^) т6YX kK>4.Ho+GuJ8(Y0h|h_ڴ G 8>~ 0>Xlԋ vq hL8զd>KM[M0/!F)F{8.,ΉLOD[Mmt&gy>mOw׹S>LɄ6d^L&d2! Lȼ2ې}$6&شHl2M&&6f_Ŷ||)_lŦ|f"[P?4)6MmEbӤ4)MM&ŶI}}}"l[( ("l(BP,9u1b ^,AUa[tIfBN#=>v /l~h V9Im׊]Ac<D K ڝIY"6gR?O!A"Al v"46Do!c iH~RgO2 n"ګO(z"cڵ&7bf9CXXkԩnqwX m Z~.d{V9zW!VKiUkS^>7~gʼXe6LvilV*]e2Lol2-^^l2L{H݅v{ZTu*/4?"1-j *E@ '/0|"XApZ"7牠pvUV8A*oNQC*+Mc(] 'yA#*u?9Im)u4~ccNMUZJzl'b/?Ǧ]A#-*J=?hWȋ4~o1y1-j eaϗywNW#o//>%,+BD}tG.-VyE _ EML*ƍF&4.cYFl4hz}pH%$|+Yêb EG\0<D)C%]ssjIp@X (d *Bl56Џum4&[C& v z~N ƉƪXzuU}&d6! ! LdC&2oL6/M&&6/MbIl&i3-MEbSȖ/^/6Mb[ؔ/,_VLEbӤ6)Z4)6ML"ۤ4)lR֤V@2P,!E@P M(oP4V3(USr_@|Zsz+v־ ΨB]r T |pA<(Ơ(e(p){-gJJ}❾!N1pA!N'(/8aj5$u{G~Gp˒cI>Gl4_<&e;hTǎ5DqI#[ff'h_E(ѻkQʢ51vO};ĝO/ 7Tý @cy˵V˫dCƊ#g>{})3/f2ېɄL! LbIlMl6͛M6$6m&6^cC#D`7!>rR )o ҃+2ˉT:a _J+UTQj^hv׽y/+W} U6/F9?iUXV3>?+k a;E ˛\@.}Lj [VD$P1 ʝ\*CCuJb e|c]׮'1w^krⷣ)>BNǯ+sס\lg`7rIەd1 /&N]eZMBjqΟB&2ېy2ل6d2!flC*Hl26ilMbMl6M6P?/2lEbSȔ/ME|}bhRdЗmRlsB2PWB6P9E!pByŻ͋c*}nz;Imo@_ "wylK&DN+蓐w?OLA9y" DD"COABf2 qܛĀ i\8ܨ%34!PD* 7rXJRwJ;O&3:%^=4"z!H{4Q/HdOK?iEDatѰwSn'Z?'Ye6vylV*]e6LvKb/H]{^ͽv/TKbW}y5yhVcU_8V1+[(?ApZ"6o!(]-Ҧ y <6U Y'hWiyA#*uNRJo4yweXlش+N^^^MF^T애yJǻFZ啠}#xVc/5l2yj-?"Kѻmy}x*HݟxsEݷ3u=6C"ET'zݦ+sYS\dwem۠]ȚDN'w[M_IvO?/1Igo4OEZwQ8uZ]oM?亰 eVo\f2/Bf2ِi2لL6d2!flC&ؼHl2M6ydLbMl6M͟$8.U850}MN&M v87sQ^M ] _a Ђj'Q^*Ǣ0 #iUG3E=0!8Wᔟirv m/rvōϩaFOk] SAbI2K=//f w7r tݫ^HF=?'Z\eEda.Ný_9!M'h+J-Ѩ1M]CjW1N1+CB)vDSx>&-KckB/VHw. (7(xŢmSH\*+"L+~4Fd/*L-W:Ȅ4Z5.S8@BSG$ 4vL'$V ʕ[\>̋ل6dZL&d6! Mȴ2ې$6-MbMl^$6flLbfbMl6Mb[hQؔ/2lbSx|-_dE_|}mRlo6)M n/P M(oPd3%k;| y7o^+{|-D_MU屗D$yl2D-yiŒD DiLjIM"h{&EL w I%Ad 2D"-tHh[գYir[3/wayV~`0_ Ah⬤nއՎ.q/.V٣<#C:5Jͧ|]_. :zkUG=̯%%F7ږvl"bʝzSQӸ1̋UfdWfɬ2Ufʴʛ.̻.wI^ݢ*"ئW,UtSE=Ye/o*"ín\R|"f8W6ù$&p! 疊`)‰mmRC71*2*`Kù4MA㶆MRH7J]2FZ*uzl6zlZweK=6coVW&['/tS-N^wqq⛺mAb4.}tSݷ-h\[c|oΗp+>.ts=le3l [wF2ߜ/oW!7%G7m" K"?OxE풺Ko}ۤjH]~IMo_i8ߩ5E%$ĥ; )_CɿIltēB'8B8 -):9`1$DB|u,p7[dfu[CpsXBti2)4@rB8!QCǁxx;XWS`A n^쒂"5!)NADE|@Ėw_N ٚ/R/6?yer[xh5f7 Q!n=`BElBf2/Bf2ن&d ll&&6-MbIlM&y3&p pJ7ċqG39jI Ϯw+ NaŅ{KК( +9<^bw5I">q3p}z9,閕qu&sֱ!C8bL?_Ey]/^%H,~ߵAI!$PA.Q߃8f=CoSHL;2v-I'K4D`ԦA㤦i2#G|r~XSKāSRZґT;6X,Q*o"Vd/?o7~zKORBT(₪u;*6^l'KGcKϧ_]lASW fE^ ('f3f 7U(mRF|Zd˯oI#Bc)}"]1#gZhu,UrzMC ~ӮJf!Ϋb_ jHzk-.y :j6Qۄ\'$)9ʪo! wC&2 Lȼ y3$6&6滉&yp4}A8}$AtAQ,ה_\0"$U8=̯TcTBi"%!uT0=55|}}<:zliiFb}yߝ1Kb0D u0x<DgmP)"r~q eZyŭ?y >P^b&S'2☯tZdn^ϰMcJH8I_`<|*]4rKXQYYT-b g[=3!d^L&d!"d2! llB͐نL&illb"$6fl7lb)_(_dEE|)_dśl"Ӥ.mbӤxI[2P/B2P7Y(}M pK7vbo[nŦ|Ѳ|mK"oA<6"EIiӀlZH鴚zy.w89m@1kcFާz _|;ȏ7gR^*H#ꫲ^|PEvΙ꼖+y--55@wz*׏sPQ):/nd]RF3EaFyAhE62:FM!ڐx狼%Q@r[|yzEU|8wq:+bܘnx}*?PgiSWP>'j/B!! W!&6=dtWU.rSoiXĚOJ.EiB0\8%1I{5/V+-^WiDžs\uEjϊ9(uFv]c-!QMVުuӞ+RAS'9PĈ'w/388b(-hnEl,OEmױ8L&5:WQ o] OcC5Ɇ8c&4]5'.<8箠r:`S%.>ΗӊRrPX:B(䦺 h]&J|4 M-XeTb4xH !$crhВ-#qR54H%"t[xd FuvAъqQV6I (.%g:Nx|2 p /Fm5vlErTK dcXR~MƐ.(%I.@Vh:_ O&dZJltbIl^&|EO/6勖kѤn⧛&_hR"|P %A e;B[Mþu*Q 'ePLD_|}k5{G_ w16=W ;6D%&DbC&IoDQ]NUQЦ߄FEw1tSCVEFE@**2F+h䛂FF6Fpқn  ySVHFMw|SVFMzlz*UWy%[}_^{+q^^Tl[銽4WE_}+A[_^/iý/3le9_&;le3la+a*d2?j2"}t#K!hbK.7>t7>tj*ӫ"uWy᤻NzZù4҄]}ӘIeu8+U\,F%(*. *T:eAawbQ/ҹ6\&vZ;⣦m1S$ҋUL慦AA #;Q&0z)6 CR. ^Ԋ eb̽+|w3$o( ci];[qzBb& H lB GBX9*NF/3 0ֻAMbL+*<^e#cVr="~˔2 ґr@׊}\%[^GBw9Kkk52i7d2!flC&2m6d2M&y7$6o&6fؼl[BwLк]d`'V@ s\ʕUnY+PLvڴ/Zi)m:ɣx:qB8 ņnpIb>cpF,Pj0$HCֱ&}P^1yl)zF=Ms@hQ(:Vu!(RA UA]F9"|VmMO iS!Y%m/''/\U.:ۿyЦUuQntdBUȫ滉O'6Ħeb/-_t"ShYM6)zIiR&G(w? E@ZBऻXwb؟+>/&b[ؔ/,_l"AtbK!h&K!.7 D"760D%&DbCLfRD$Ad 2D" Ėz\|㤝{ojO< rbJa~]N|n= tsGqJ-y=TR>D<H_7=}r](G[[ũ] neQ=e:1bSdF"ae#U{pY x$e4w:;yo/_ѕW; lq2P oyDkѪZ>.V2?lV|w/{yEE+b2t_^ h }]EO}-064^1A|DY" ě 'Y" 'p7UdUdT|WC71dUlT"74]A#444Ҧ4FwtSHVHFțJ]F2zlzlzl6zlccV2?+*/2^^b݊MOW애b/2t_^  }]EO}a+ݝ/2a+a+o[mغLŎtݤAl $Ad>KM-GM,ݷZe*HU^h8p7 1}qѸ=I{S`M1prEa5]9h- M\nҕȳ77x8\vyBѐ}YL&=0ߴgHwr=25)c[OH\,}<'tAA& ZLRW#g!JwqFv}~! lȴLdB&2y3d!IlZ$6&ؼHl6&&66M"[xQؔ/6l"Sx|[Z/ۤ4)Z/ۤ4)З"lЗ"lswC\wNJUb_sV])QBV{ͥҊFSK`׵ݗU*Ye̋UfdV*Ye\ef/b//I]Zv/˼啊w{^Tu*Т/4?"1/j `E. b8VD2My"h%]NЦyJC*+M򘕠v5VHΟ4R yS ƵszlޕbW՟cӮ8{y%N=BEF^T애yJGF^啠yuj̻c8Z˴;le|vGy5R~xtmA?O]stXtRpo*bp}ZD_'kt|%$y?e^W*yreh=2-Zz9୞vAa(vy8I!+.Z @(_Hݢdex*>xܧyF"`^_D2$!UF8Hrv?dRV*b'LMBt\.{9'z+lwqK@b0MUlju9>N^vGlUͽ/LwCCf2B^%6Ml~:$6/;em9o_&/r2`u%v] l*|;.ݾ\, r)vO42yAa˵nQþzFwizW pe[0DD]\eG:.sik!ݐɄLWMwNl6^/[Ŧ||-mRt"Ӥ MPB~""ꔗ` 6q9?W-E(U ,iq88$Z+s%w8Շ 9[O ͢VZ󫏪MB2f®Q0e굅G,^Φ{:v+W85,SZ06;OSJ|Pr䱗r,C\GP5PtCn'I":5l5=08qS}n*h*UW*r7ILOe6{&u]U|/}.׾`4ަvN2D2d v"hWE@FE@*6*vĮvUdTM 'A#j84Z.A#*uzl2zlcc?滫O_cݽLOm=qb{_)ht_Wm?|[ [ywf|O?_$AK!}K*ӫ>5tn"'f^1 rX+rl#vZmv&|Zolj$$Q{#$ Yb,H)D|W~d|ab KӿGA6;L5Vz ǀ8H 5 Nx6M93s//qVXb!L]_7z[ل6dZ&d6! Mȼ222M&&6-LbIlM&y3-k~!z$ЈSDHM!Nf5J=wu.jM+Nb$-⇈sW;Ӊ4z}뼊Pj'-(g8iʆ4* 5E]LKk\=jM%i*2q&61vSVEr2r.r4%E \!qaE8F/;=bX#'urrzSv{ M Ci䙢5h( P&\:Q*qR;'-^1%0,I2 g @Ml69ex MZhhJQOгXDS6!xY/!G3wA{zK9rN{GqrIVLX٤$+jPi2Y'AHC`AWƤ74ו߄&d!"d6! mdB͐ن$6&شHl2&&6ĦĦ^'eŶ|Ѣ|)_lE|f54)2MlE"Ӥ4)MM&EI޻s(B""d(" EBZb'p~ -nỠXd+DR˂Ndl90w>@1 T=;vt6-qJ^`'Ɂ_xz~=*[RN9sNhɍeÑL='>b:Y%4+ n͊,fW=ڴ*6Rjm&9Ǒ[aB j䔜X%ˈ/_-Ϙ-9x."ca5yzJcPY'-h4TrhԐB子Ɇ&d mwfd7mb=9}(S|ZI5~b?BUmd&8/_* q#ar]D@󂪆pYlZSօonj44d*FVgO9/4Ue5(e*$38{:,r'+Cd>ǐ -+]ntP_D= G!$RxlM#eyJ ʄz^ɨ5A]Hsd#2?hLKFIUQڝCf2ېy2لL6d2!fdCoLbMlZ$6fdMbfb[bְߔ/2lE"SȔ/MEoku}iRlЗmRlsB2PVB2P9E!pByEMc*}n7ky.v&DN+.0ݜV<Ļ3)KL 2D"WD" Nn4ϴt?\UaWS o4x6 mC+au-_\exWՕinxlV*b٬2UfdV6W*//q%uiW.ٽLf/^7Rw"]{Ew4˫ϫhw ="XQpc)D %x" UXmA8nWEv7ܦ1 A#j865?/h]4ҦR+{WM9=6Vy+iW̋'w iQWu_+u yїW}2xVc/Ηise"H˫ Lw L7.G9wI]^yw{Zh8Wt9 n38/Ţ M4o?׽cak1>:4Β3<"~Y*P]W(R=0|_{WX-a^F,W Hȫ['y^ƲA,We7; "#i%ws|z[q>#6!/xdantlBUȫ滉O'6Ħebf$vGUtCC-̻8#]bs!Hrԧpk?'s?eZB=`&BMb'v#H"vS|"R7 #B]yltg|t ]R7ƹSq[EeDW`#m4a_)I# ;uO ]!N8Νq2+AEDbh\},8Lxle!uCh~ ĥyQZ]LpﱎG$@bs}Ap6rr*Q$hjhP|I8sIoĪԠZ1i95nG6>6Xq875r:2yՇuP/Sوjl]*.d>Tck!s (6@ȫsrsaRtyzqrFQ#vbyO8J.sjo2 Z 4Ӵ/R!T4L_ LO&d^JltbIl^&|EO/6勖kѤn⧛&E_hR"tP Yb*hjO%OSWO@r{*QRK\(5w?.LG_Ȯ2M"#짣cBO8,E;I] 8Y&u幝c08W#mM w"E#͉QKphsX g@]ncV׭ j9]Be@ ˄绵+ɰVk}y .9%.~CD a q͂_OzByf=NA\}ReE)]{YrJ_cEntdBUKnbӉ&y؋Ew?]Ȕ/^EMnR}](OC._G_tXAO+:MŦ|ѷ] Ļ<6"9"N+A; C?Gٙ"wgRd 6D"VD" DO4rU]ׇ|vz-O}o4^z؆M'&zKH0F=|ǧK/˕]NR!#E{{ݣ ˺җdҋ|ˎ\[ŢXx/>w6r,REqRļ`!*t5_˅奠 ZkLwW^e2̫U%u2?e^]~bn__W]EOm.ùiOl2d e8ADЦwUlT‰]Ȩ1N2Fp4?'hJ]6FU4OlشfǦNwW^忮Ǧ{z]Av+kSиݗ龼m/~}Ͱ2 yI!hbC?Ox#C?GUW}|WIOk8/ TD ߧmͭ^3#,?@ %?ܨ/i*_ELTv.*Ze|FfXG?RRF@e[,ʘOi8L_.2y^3G ,s|L7QT! OO<bF>V5OZ49 z*]Xǒ@WiaRE,$c#z+\]rI Dd1e*r3b$8 7NQP~m^hoS;=% ށ:/c'VE= >_މ/;yҽ "Ȅ^V~JϮ(Y3thD=5y+;̪g/!NŤC-*G[rI@_B>Rw[8A?Xf+b_UL"8H!q(ꮊCP{oT]dCdBݐل̛! Mȼ2ِ$6&شlLbfbM^Έ.#|҃,ywu sp@VnqUt]l?`CaH֦%V[RM'5V=o ,ޛcC("yb'Elb|}paucщ8f9E.!J 9PA?we^@ .=0z|*BU@[9͵74$Y$[1\MU6! lȴLlB&2y3d!/W$6&ؼHl6M&&6Ħ&ثmE|Ѣ|)_dE|f"[V6)6MW6)6M9e(+e(ݐy8W!<Ħűb?x|=ODo&DN+ިiA;DmΤ~"C!hE!ADЇɆ\䅗\OkCSk.)P#Upmy:tǃyױy;T>{T oqJ(NQn8~ゖu<&u3wЈϹ>n6LllV*b٬2U&lV6WVyػ./%e^v{^Tu*Т/4?"1/j *pcoD2}[ DJ8A*+M7'UXy oAN 'xSFU꾝6 hǦveXlؼ+N^^^ͻF^T애t_ u iїW}#hVc/ְ˴;REȫ7̗Ao&tߥ?G.KU^?O.u 犺(]P .5?̥C0/AI&a0S|&1V[Q\ƤSU#KN}%tʪɮN dVRϦ-EnzxWoȍGzFFGRBӴ[,}P+^n<s&żg_/^Ǫ#UInN}1B ywp">&Xve_p YYTe} %'V}^tXT / 7ܷiǐntdBUȫĦMO'6ebنTk:R8}y*.rx,9EN:zY X\B44eQ>#UФI08e.@84fU_YL5pRSr)q$2qAnG(puI>)STAm{"? 8݊Cѝu"vVJ_KlBP N1x?2%H} u$.zǪ`kbծ.Be^͖<~4y(4ԉ#KtxP||Ht=87Y Ke߈oNJ-hml?4qΩ9Yy؀^穱&JJ !L&6)^if>E7V]YJ}?B@LƢ, D(Em7Kş6"Ƞ/6_T}Ѡ"4XPJP c'C*k)zDA/(p"HHܕbg'\#tw@5 iE!zX2~ xT9(&yހ9]?O&dZ&6=d"/z|)_,_+"n⧛_G_|P䯣/ 8i=VNJl"Sh|)_k&C.Mz;/"vd ˊ!hw&ņ"VDADЊ3>ZPa \ƍR:AQTdSz[b4L\X_FqOD!YUUEid"ЊHWDOԱ)$rc)ԊHMVGqEoZkxF a[7 %PpD̜k|U J֐&h./ 'kK3/[#d+q$cuTT/#Ҩk (9Fך$-Yx 4i)W1D8q>cxΕ9b().-ΫЁO]&y ! lȴLlB&2y3d!IlZ$6fؼHl2M&&6Ħfثۓ\O\.q T 1:NvLp6xbY9ZR?`ElJ)V숾GOX$.FӡW9zgʥVpxxv ϧ>,]8sxGHh+H#i .ރ~F<:VP:rIC㇐Ʉ,m=kg ;ip)H͇eUѹXSgPMTSnA6ZLL9]г8@,h. 5bU-1SxG#{ زwQwtk61:k>G9ï]EN1$]!IWèɗ[wē +p+:rʮYj}RXu-pҢ;IY{@ݭ7"31A5vŇ8֣9vZS?X1YL*M~=+Dx LdCElB&2ِل̛! y՗mbIlMfllbIlLl$XmbSؖ/Z/6Mb[ؔ/,_V6)2MlEbӤ4)ML&EoMj,aEB^@2P ! E@ބ"E?mL`Ե+5B:kDQcmU\(!~jaQe^i(7De&IGQeExi0 QT#=b襠i"#I l·N6Ia&ye 889_ W=%p@Q?lSTʼnY@ѝqΑ*>`)ͨq/kB$~UacN?L}H"2~bWXOk.WƨwR wU UCF^F5ҊpK]ۤw6`q𒡏(^dqeYݐ߮ llB͐Ɇ&$6&6Ħ&d6lbG/uxADFX\&u?ey‹VD:>3$E]šC1`9=vRU€/h,wGd):i*&짊4ʻ鎀jS6|6]OM3f"C.mGfڔN!yTzAh2.IB +:)9 IKdC`%^ZĬ;a yb!*LFǟtf"BS5/OՏB+jsl5廛}8Zr &d6! ! MdCf2m6*fl&$6fؼl{YMbSؖ/Z/2L"[Ȕ/,_dײb&ŦI }&ŦI?,aEh,aEC_2/*G_ش8V햯Y}ߨM ޝVQӊ'hw&e ޜI<D"Cъ"C!'! %MLU;#ws gp-! L:2 7ջ EՏ<:E"L~AgYj$ Ǝ_ՊxqGynK;F=t{@y*rcL74/ߠ[Liw G |voaϗiwNW#o//X%,+›D}|ǻ.-VyE<ǻ=/4+y LMD[@e2Kԓ@\]"ujC(3}yL HkjP+e}(@N^)Zyza(R^6'QU*/<NdUA>$UO㈇aef ˃RMǟőGZm1ķqF4GѐvR6JAOR7UbHbNy(f)1\浈'{GpA}K]> !; шKmiVsyغjU?"]eaHA4#9np>` q- \ek L>'Z IͰpFyy,٥Dއy2ɆLɄL&d! 7C&2EbIl͋&dlbIlLl~KlShQȔ/L"SȖ/67/ӤxѤ4)MMLbӤ6)2M65)EhE@PP aEB2P7AXPNG 1.kn{Tq:E&jJrX؄4iWB wzi(OO]/: qX>EIF4x}#QҜ^ 4B5G͓"ppQm[rJN2@NŇS\Q(I똧ߗ;y5F! }AvהOq3kD<i.4fRR^$~cZLM|#M4ߞ1UTEAiOKl:;W2*`WqyCqSR%̊2i7d6!ݐلLː7MbnbIldW- 1^DETdtrѣ-͂^9*">PEN2/G뚗iˊYdL "^:B#y;OI=u{ž^}t6Z7Rw_}tۦWϨ{i 9YXa Fҵ^4y"rڿ㬗IgV, " ~}]O_j]Z:|Lf ЀЋE6N^oP3)-˼Ե,ȫ%=a@PdS@D_nr]94)S=ؘu^ jq.-0'r|-$p3*@ {-g0_Cts,䟋 3BU98`9G+Uq-멃s I<|_OL&dZJltbIl^&b3zVusޕ2u{*+uzdԲX2(azrq0MDa't(d= ESMNJ7Th|A[9Ǧr&ԿJ=pnY,`[*~i;͙TQJvy|<)T3W'u%_4yn|>_q~Ǎ8<E&8_xlT6by>SIwRPDĄo43>Ň*F,<>Sq-!ix׌!`CjzHqdAA ^1{1mӷ* bXV쥨=|朻wVOQ輪Mܹ Fuv !jN2co J1*U䱗AzzFvEInz;gΓK/b!&j,2+_'9}!d2?2y"nbӉM&i؋w?]Ȕ/^UMnRd ](OC2PPD췢oz4k23 *$^jL`gu5 Up^o.8~GlsU8_5Tk4fD곒;z9Y!qmd d2ͦi-"I)7VOAh*?Ż(e<ÚOtJ:V9YF(>|x<>]-yW.{+a8;(uK#{:l8$tz^о+-:EVE}E, PRPɄ̻! 7C&2y3d~ $67fۤ6lbIlLl~KlӤ؞Ď0cfӼF+Jܴ+ؤRV9Q]^]H]LPݜ**eI8$Rފ@_AGh2XAjT4Gs%yËSOi`@АQl+C7GmsT]EzRph]&iurҝv3x%9/RWyɗPL|~ak]cb݊OW애b2t_^ AE_4Z>C_tw7dd9lφ LŎtݤAd $3"J]n}d>6to}l*UWyEg4|WOk8W i!2O쯿[L M\ߎws?6x긭X2=y7Rǟ.zZ{-j4WE/jM|J\;Iϴ6^kGbĿn&?fA+*b.t] if`ڬyp$HflO'tTƋ89(;">pËQ] RUr?0;|^ҏYZVǍs !d^L&d!"d2! mdB͐ɆL&idmb"$6&l6lb4Bnx-8SyqУ&{/>ijCo9MWƟ-vu#E$QaLxsUЕQJF%^,Ż*yKjb8G~rw^M{"/)0LDh)<58:a."T /}.c/WD>~$Mmk?--@e $5=8+;8VAr_NE]n8.69,5u7WCGI1\:qViۥBwQr>Io%cu>ihaQ~Z^S&)vrō%9-җLˣ[qy hHrTmJUUF;FʸQqS[Ё5`ZuRUPe=`Er((=_x e_ ZiRrI(CWQ45/N+d*+)e5.V]-.3N}p l\L_+tj͗SK/2ԓT96FS*j!. $u4-j)$V+@ȥR&2䐯pQ "wľCȴLlCEdBf2ېɄL! Mb"$6ĦEbIl26$6m&6%)_(_lEŦ|)_dEʗiRt}MEIiR٤6)6P/B2P7A͐nW-^/{uxOD_t}m/6Vk^A|A7K"oA 6D-3%D7"V3)6D%&DbC!Ad Dq2lsK$A˗Tʴ繨H7'wNAȊQN4w4*XC z{P@sˇ)L L;*P>~c7yu7/v@bM2*;<8Pܾ&F9]0g78}s`yx uEb#dq>~`HY>?4w y*wM[&D^Yٚ,2-B&2ِy2Ʉ6d2!fIl^$6&ؼHl6M&&6Ħ>I9?WZPƍU@GJb8UN /"{8"7Mx6670LJ&px! \]79B)Q*$X{{㗧&~s}SRm\,>d1bщNa h:lpb:c=)GZ*Td@^fu EU vbW&}bMإ8̃N[y<.Rt.x|b,v$9$Na c69bUm8}9r]-y}cلzBmiQYo/+)i$8ty!nPBD5hi'VrȿhOqJoá13# ⛻ ӇSl^3T,D!LwA$d7'6jӪdMG5 |9Oʐfk~! lȴLdB&2y3d!IlZ$6&ؼHl2M&&66Mb[hQؔ/6m"Sh|[2MMLbۤhѤ4)6Mm"ӤxImRd-(B"dY(&! E#Mi/ӔϨEb5g)Npq(~[Kk6zf\o@NEwXyf@(ՕxB@N JYeMEf4e AxB8(v~&L}JiMNls;- M^nic6*yR yny]Zڿru/u9{8QaP qCep;'񅊓#se%iQ$ħ*Dˢ(Jgt/9VT9Lo(gJ,AzhQjwo&d Mt7d6!*fؼl&6ebׂzNeywe0 (x`)b=LԜbp'us 'yX]d\! ], $`y_A/7HV5s[]E 5ɝS ?^HTqq[!:iD/i<9nَX_K}efEPBiSQF[3dt.@ +v !*3I"Jk_SEpU/c0nP5JAIii@>Tx/!"d2! ! MdCf2m6d2M&l&$6&ؼlME"SȖ/Z/2Lb[ؔ/,_d&wD_d&śMmbE.,aEh y&y8BM%k;WNJ,_KE7v"ShUvy%7m D+{wZ$&= C[3%D7"3)C]"oAd 6D" D7"H%)uezPqKE Gz@֒N#"Qq9U/xHCzPUx̶ڲTdWmu/걏+b\ mT?qͱ<#ivNo(5>c_Wfɮ2/V*YeLfisٮ.Kf/.Kf/]RwH]~"*m~UߩRE@7UU_l@5[覊`{ B_oc]sIM`\a D6Ɇù"X 'pb[E@FE@[EMy̶W*] RH7N6F^i8wKA#4n+uyyޕ.|S-[]luWcM=8yɻƥn꾶}[иTMu߶q՗3[Η|y{ B_carL7V6Vʰug/H}2}&ݷM!xE>6t]RwIMo];I/>ImS+ ;u>Av T0H=-\ʼK gʴR$IhLhQyʪ?EK;@$n^,.Zҡܿ\-LFpad:'edr_ElN`օ筲%{ ]ZW.&!]/0 Z>I 4Dz8$L6*arü,[ {+CAZj!cخY <[ q )^>s;CHițL_lgsk!ݐل̫WMwNl2M;jL"<{zrJDYi@qn`ilYH$Iv[Z4%//# :&R9E;VYb 3ﰓ{ 3/}aV9_%u /v]Aߋz)k}.fhpjj/qzH#M(N}JTUV5 imrk> xd+xO|]U(S2EYގtk_ LO&d^JltbIlZ&|O/2勗kѤn&&"tP 9^ Q`p`l:؃2 J*z,}*pAZ">l]j" TQ.3Ł۝$y^Nrt*<-.ŕ٧՞E׌eta_|tE䜀e)xtQSȌ9%J6I>$kOuH{rv&n`#Oop/"(@iԳ^8÷ :t.y:2;COZcKIx%NR>(^M" H>dhs_WqL&d Mȼ2ِɄ̛! MbػMco&6fشlLW:LOFJٹy2?IJnoB)b V.֥>^HwM8 s/HoCf1Ս#q͡#8_xuo*dLKtT2n1AH9©Z^-9( \I(/xLf;b] JN9:Skul41v)ai /0_k֭ HeU;ʰs<_/MQ'T(#VkzN^wR+ o*sFq/zr O|Hd!uSPT|!d2?2i*nbӉM&i؋w=]ؔ/ZEMnRl}I](BOC2PE8.*λ zXJώR3mbSh|v%&DbC&͖] I%A9`K!.D7 D"6gR62D%&Ė"C!Al ~#ꯔ$UzC{{Pk;Mݳ\jSdL 5T]@Eqpb40ֺeښ<jJtAʨ=Nx _ƻ-B]!ϙ}rX\e5jCK}K}}YQ!\cKKTZqpj_[e*YeZb/ݽLOWVl~b|/}y5y+.j _ݤ1|d KM"-DM-FEwtS8AVEFE@*~NݕMy [oȪ鮠n  ySIoN#h仂F)h$+hd#hM. 6dثU滫OJʫLw2=W|b{%h|؋Lw2=ݗW@_t}k5 }}2ݜ/氕߆ntȫ{ȆtݤAl $Ad>KM-GM,ݷZe*HU^h8鮆pw w5u4)VhQH;.woy[.Y0_tb KYub˒zqh0|oǗAc3;<4sqr]21Ogc?d{viwRSة5rBq/YBcu "*doS!Z(A!\WFzOTzym:*DN(e QđQ8)/cA4 E.}Y~Z(_=߃8<Ŵ?tL/ӂ$5H2\U ?=OV@7O)B)aȐ_}u)9(2l-U/%(-C0+q-5'~ ή]b#LBg>wCCf2B^%6Ml~:$6-{QnEhR|IMLeZ@ Ei('4\㱂+c*ߏ|]E7Ŧ|fb[AtDY" D<6[" w I%A9i!.D7 D"6gRLDw I%Ad 6D"-tN4ʔKȊqɸ%x[DFE&P8 ri }غc<$7>oj؈5h h<=9Byu`KQ)σTv/Q\^orPH;W~#݋`hp7$Z*ć4iK"o&>rs!ufV BU滫O2U2^^{yQnŦ+O?eۗ龼м苟F_1;Z`lib81!.7 D"7NDNM[oتبI%AI%}|t[ Gt[o|wU^4|WOk8Ws K>;3wMb'/54˷.FQUy< a2.}9ϴVFLySA0۸=ތI=^t`QRӞm^5j@ ^Qt?Ο{e}jO}tO|`58xvlֱ^|דVU&)q$}*1Oo8^?_F9Tc|! lȼLdB&2i3d!Il^$6fشHl6&&6fSZ19NV7 '3>2SR8cd ^&"X4t\itW˸|<|9Em+6p}b]/k@beng4;WX}Pte&r "~#'raޝ|sFL8MOIuXd5y_w.D'銦b6O~8|$֜T:'H@W9!H&x~!"HH(/`AQJ/|`vL /el%~Y rNoq5NdʅA9+59*tՈ!ϳ8^u_XrNx`ȂêL~b#*ʶ0]dVPji=-"[n;,bW:FǿR [p ݠ)!e"T]k>ZrGSDkPSLȼLdCEdBf2ِل̛! Lb"$6EbIl2M6$6o&6fSxQȔ/LbSؖ/27EIѢIiRl/&EImRlm6)M aEBZ@6P ! E@ڄ"l䡌]7fik)*qn0QQ,A zj'NgpN`̈́#u@ji$bv9`DqaiRjyi2k%t818q$)n?k4b3e,Z~&ƔIdZE|p_Y >١_^IQPׅ,R9U(:BR\Z8M4]O ]orB2;䖜iaN#" :4af9YXJz}rPX?LCA·Lv=Mj[MxlxC^tm\Mh8TXdW)`n8y!4Xrgt,BPDUemM<2IeUl4BW\Gt*N?D's:)S4̤YX}_y.ik^mwbC8 $aKXӚŝ?|. 3-,rU-7jxHթ%2-^8hHe ȳ /NZl*Qn^CCjfHWBBcV +}A6ȪNJ!"d2! ! MlCf2mo!ĦEbIlM&dmbIlLlͦ||)_l-Ŧ|-_lm/~+_I]7&ŦIf&eE_|}"doBPd7%k;|y3o^+{|-D_Me䱗D$yl2D-yiŒD DiLjIM"h{&ELA|DY" Ć"C!A2;gYC q,j^ܬxkKEòUTRS%o<$=]勋ѸYWi*tueծ7%}M+"iQn o[OQWmx/S=V*bɬ2U*Ye2Lvɬ2m2&f/.f/]RwIM~"*m~UߩRE7UU_~l*"ín\R|"f8W6ù$&p!xp )VQV,1|S" "`Sù4MA㶆MR7J]6FZ)uzl6zl^weK=6coVW.['/|S-N^wqqmAb4.}|Sݷ-h\wAn9_1 }'kkغ/̰VݑrL7#U|yZ}t&A$tWt.&ݷMVݥtݤ?жBӓT(fJ)H,dۅ&y?Wߎyai U&/%bӃOˈ0@pUwrz5s.7}YoţQ';' ؀06:#|+{#Q<.3&#TutPc.o49MKR^ @$%ױ&$A< \nk|/# /Vj5_>#XUyN7D7`,7/bJw4t2 Mȼ y|7fشL,8P{h9{KrUpA81˩G|t=9_v=]r 'O~ibOjtv^ZBNUOR)e|(P(8xdU a#s,)8~ d68J8ג'UjއKCGrWEq"qVzU *&!'}A\`YrzZu8+0i3+EǗ!Wػr]Xc6/ea!!a&yO8#85XwJq\xqX!R~94F5HXC>KUGW ;6I2o*'8#`C^?ఛax_ҺI |yl_>CB MeZUp8>8//W& 3m XL=xŤC\B."y Hb@(S%ئOAi#] #NGFԄuE/Wq4w\]u^wCCf2B^%6Ml~:$6/{QnEhR|IMLeZ@ Ei(4)lO:Q2 X9O)rdq_9Y*oMx]e<Ӫs+#.cDCJUTюx\Q*dU2Bb,_()7-kc̭Wq 9rq7a4)<)qBPLHZW|%D% J ֿHDhQ."gJHbcƬ!d2!nlB͐Ɇ&d mlMbnbIlLlM&i3&IGX 3{yMTD$r&Qy=gޟRx]_~Rސ4hN`3TtN c }A/g+?0T?DCSz͠@%Z'DNl9CZ_b0BwٔU*ʱ|elN}*^-`riOjBIdy!T;˥ 5On_|] i Y:8V iyI6exΗR؝nZvyL¼H&?91 >+9T -$U'u}_ LOL&dZJltbIl^%|O/2Vkդn&&"|P /@?N 8i 3c=VNJUb+Ln/MoAtDY"sq캲3 L7x dP).:%{, IM 2E-] 6 @ l 2@A A8" xM ,DbA#-(o{ۤQrw/mhM>NyG,gthGRz @hw f!汱f)dQ^/ZFlJ㗻RK-W:!A[TwkCzXS&5O wΗKiFwɐ,oϚ:e=ezɜ2MOyri.wyI݈OGt'yv2=g߽=X^L}ҫ]lo,bqxCokpM0+UT2=y'Edďx9H!r_g eۨhe/pYU$@+ZʾK%$LjmmPX  D?fHZC禬{c2ML&c2Yyb2ɘd6&Ӣfql86&_ʷ3x {≚ VCj*(7T]F V !vG)Ppp<ÁEd*' _O$E6I$IIRl$E&IbbȔ"4)Eؔ"dK"dJ2RL)‹RD"+\]JUTTZУTڋp\'F>TET)r*8k;,U 2 9E\N$Ĩ,yE"_Dz~c 0 ڡ'ǟ}iT-W\e]wD$d]6 AGa/}C.ԢY57%t+Q_D3)Q:IBR#,Epz;gKpAZsa˝mҝweCLCL$՗g˻AdR|qyhH(28Cv K)w7%٘L&1vMfc2L^ul2ͫMƱyױ86O['x7RtL'J@*jO HIf]rKw K񨱥N}/cޮb|D (I1 LŒbHM(q"`ֻjs -ӎ Xn|/N| #FnܐDWs(&VUd-gyи8ΗisR_po}@ f@>ܷ N>ڄA)Moq8ߠI)[T1H:o $#e {n._DˈK(jS;Zti{ MI^Q]yꓲqՏCHGґ@:^{C` ~/Rl֎_[yJ yYBWF#XݨYO7lKBUvWh-\rO\Dp41dMlL&c2Y٘̋&Ʊilcı86fd{r?#>DxI %rl$CSdJrH+̫H^H؆edd>"vDlXcH0,Z+8Q_c^$xK7Y)DڢT,TxEF1^&r2vMri"M׍??~{r f[j2{3V> 9Wna y(hEf 5{\,.2Y$bw<"Zʽ)"bzjoFln\fDqu~_2L#HtsT1}Q(,DI2a/ ?PGvrDVN"b>I_(JPmsKVv(E?`L x q@\$bS}Ǒs6]Qn{_9K>Y5BX 9(!Oݽ.*  ~.bU=$iַ>~aVW:ձBT7h+Fq4/eY ;Lʹ2h)K2`냳Z4֮]`2YCM/pZl )_4$ɸ a\QY V8`u 'JzVq|ERW$Z_&)eL5ӿxd6&5'&1dM&c2/L)fd&Ʊ86[fشd Cb؆//6M"Ȅ/^ _l"$&IIMRf՗-Eؔ"U_j2M Ι?_}Ѫc󤭘9W_:|5Wq7~y Vo ZI}2[I<" bہ 2&;{.u>1;?T?b_A.- Q[2~w_ k$z-:_JJ1m!\!#ԮSfԍcVMkԎr tCT£atHPs)9eLS&slN)9e^>x_JhIĞ}}JhI^g&:I5|VK֟/H'&FϗAo"p}?*KS?*t o6xulAl<+%#jQۉF$ `9'A hE*"դ/e]WJ3S\srI=v{ةUDEo,!T}s\ Ke!C$%HUDBQ픻@Ik)CC-zi@4AJxx0apŒ)'j^Hd@}+DQjڬ"t,5yhLɘLdd2&5ɼh2l&MƱ:6McqlƱyѱͱgwًT Rӻ+D Vcۥ@~ꡝF%Cc2>"G;%/F`Q.&PB啝C4kHriHK=*!udQɊ$ Pv E zm/=xkE[9j#so Ln߸NEέE2"04_M&kHxxh++ 7?|tJH*{DZJUI3I<:L:-9/|ۿآK]:U.ic[?El[/_C5vxP>kx]'fRu!G#:-R9- IJߨ2Q$:AjEu+ݧ~)724.}/q̿{"˩C)TػsME/Vt/s Q]6-r/z 4nW$*bLlLfk2MLfc2ɚdZ4?1y:6f4ql6Ʊ:6EǦ7ǞElȄ/'L"Ȇ/65&IIRdM$&IMRd/&)~KR˔"dJMJ2Rm)BRm)rI 25ݢukt~lZk>꫇`C"bA^܇([xdZӌ YEO0!1GIz;9#k82& ;)|Oͼ5HoMiƟ0FDl8h_NO7q A`d"{*L&c2-d2&cӪcqlZtlƱiѱ]>':Q嗇SHQ"I7wYܢefWt<0g{{j!ړ E 9;]a)bk:;0W'Z ۢel7SL*lGU zXpj0@ΒĭA"Kx[^đL(0XUQz(*E{(]00dM t#Fw>T)cerTRl*E7d"C>IɬcZBlI6` Q&J)d)A}\&1<1lLfk2id&?wl6Mֱilcul6MMo=6| _lM&| _d//~ _m$E&)2I˖"dJU_!S?W}4)8g&|ūMb?_}jzˋ[?Ac/?~iZ@Τp3Al Ad 6@}?dLf5YYT 6 <:ލ]HJ2ZaF4^ԇOɢަԷ>̋qXڐUc:QeAV'n]Uw.)FR?)%WDu8–t:"Z 귎)9eLSfsdN)9eZvkN9CȲ*nt%SURix|a:9KQ!j%I!{| ɟS'VVto1RS-L)?޻/% ;˸(-[HKT9C~cpHAtĖnQER蔮?K"ViNՎ^`Y&N| jCcĎP_0̈xn9K _u0kIг HVKP/u\瓺ϿƱѻ. >1}D?tD&SD5:Eнh9T,wO?:%8lw^o@=_g.0ʰm 'vyt 8E9_G%(DPxٚ k6>G'3w/T9 Ϭf2id6&ӮlLɋƱyձ86:6cOI?`~$e2,rY+^9ŠeF"d*<48'Xm/SOzQ`||͍9> d/Q6ez./W ˼UBr^2ou \}_/a+a+[ [/E ī@ y ǫp9wO>.p.} U,&_uE.u<6x)k$%cDEښ*$~l}kEyGgߠ Io fx(;X[V:@wҪՎc4?,xuZ EAۼʵ,yaZ74!Rq4pHUALlLfk2MLfc2ɚLd^4d&MƱ:6OcqlMƱiѱ:.6KGʚKAZsH~s\  Jusͼ(qJxgDd42Mܰhvݝv"硉8bK9&1_hǪ趝[PNx[XxkWQO>fG' N 8?0Z4UOJ:_U}iWeQGR0;,٘,H#L (7:h?,/* _}50)܌T%Oڍ&P>2'la36ܵEԲݗ#6uʷ9lv—G@n^ڕQo'ڪ(M:}/*Wy{7&>N 6Uj2!MsE= ΨI>wdPx#.fv}C9)Tw0Ysnpzg)TZIp*S~J|0&&1<1dLfk2id&!/pl2Mֱidcul2MMֱgۆ/6mIb؄/ME6|"MRd$E$E&IIRl$ŋIlV_aS-ExR)EȔ"lK2/"dKqThGutњTtM9,}ײb({ѿtҵ;<+SC}ir]4 *ֆ=[ПgHm`c۴0$#'Hn5|ˡf <C8q6W8o٫|!E*d5 a`&P=UbW߹95$8;fV1M4|sVp>A;~>A UEE6h2RN gR z=%ep(Ấ6hj-"k*o(JS-|0ɴj2yd&1Mfk2fشdcqlZtl=˒(dMGGmQw].GkUEFU>џ!TLoջ\n:~lx]@Z;g),[>ӂ^$n ؆Oz /@"fR Ց8HRSNIyWrx|l}_;]?4}s^`2Y%O^7ۋrћ>|{d_fTE]y[dqB) 'Zcga׹Եıb +"kPORоxd2&5&&1dMfc2-)&d'Ʊ86Y&ؼl{mb؆//2M"؄/Z _l,b$E&IIMRf՗-EȔ"U_j2O Ι?_}cӤ9W_bzB8'@N+>?LA8y "OAL&kzoq[Y˚|Gj?CVґTnA " BEUE ֠YƳ0/( 8^C\&'WNF@ԣۜ2S&{49e2Lɞ2SSS9*˓<ue6w2ۻOhys|lZg՟c*9'wyFNy>6igo}M}JhI^7<&l e^M??_Ց:MLԿak']#;)\(K]È6^ Jl/'Hb/z! gFnLfk2Ae8>_ɢ?֘|l"5'E8d!'e MGHrU/S3_0L үAQf"qvE6bKp]a3_ s q>/Y,v1%62j(ї!=ʪD:kNTJE%NɪJ+#b8I"r m`LujӰXr"IڧHETG<"]vqXXǮp"x$Q[5\2<</PĽC~[iPr2=Tմ=@&Ru3̇J1Gƒqįχ,?2ϗKΰɸ#  O A =h[!8դ~YԱڙ$LJ?~(\E"s=%ɘ̫&1wM&c2OM^tl6MMƱiױ86{I,}1sÙ N7Ie!p#2( ѩg1/)W.Pa;g/OGҺEƾKHJ*p ?̿AEL%1ݚm%nPֱ[ߛKnYYgQAAg/GU* tp6rQ 5I'y"&6!1M]|iD|d56<3y :6?d=w=؄/Y'$׫/-ERW_[p_xۊ^}"&|j"E D86 9 譭0@N+AAoxu&Ezþ D3 2@?4̰UݽEx٣~)J>)UU{SYND>E#9jI,РpEhn>Rߛ2+"R$Y\9qaٿ2"hɌU{ܟpwO>e6LS^u2?}eھ˻EyE=]}!E D' Zea* 8" "U?=fɆHN6F%Ch'4.iMMwO>ǦݻLOe>*q9b{Hh\t^^fᖫ/~Oޭ0la+a+se56y}hb?x#?)ӧ>peoZVYF,o+Fe3/JEBS(Ce^u nQ B*bvlX5$z?,r?e=ivv#hFHs<їplwZ8BmPPn/Dڥ6W9^6NޭCM_/X}?[iY;1d*7M*,m*^Qz*!:t S:41dMlL&c2[٘L&5cı86[Ǧcql6Mֱ86/:6[Ǟe "vNȻtp7w9K4>xiCW:)irHZUET~P J:"t=Y@% h^-a*ݳaOxevJC=S0MqSgRhphUZB1"QB1~Qt)@r5L;xG86>j&KSwIt1AVc R6&KyO&og:۠ "l!0Ԧ+Kp%JE$/k_"\xR5iʨ2y),(IMyL'. M.gp 7OجЛjZ 6k.$I-5TZog˕D&EDZ} t'R2pS_%A;]_~M ՛Ȼ iz܃T.٤# c2ɚLɘLd&1M&kfl'Ʊ86YfؼlMI"Ȇ//2MbȄ/^ _d$E$E&IMR <6jܺ켉H|;G mVS( ZT,KTGD.o7 E#kjoS)}BxmB 6ܔ#$"иjEɚd^4lccqlZtlMƱiѱ:.#iH[%((Kx]zڡPva֥U~ƶP5 bJNA|lcY+ViwqKBM;__0"#|UKq>q8,F<ϷEӂg]pFw>kSV'"ᔂ9Ǘ>y\QBc E${Ԯt,CϕOjwx:%0U/aa5dMdL&c2[٘L&5yvֱ86Ycql2Mֱ86/:6[ǞElȄ/&Lb؆/656IIRZcqx 4ɞ2MN)9eLy'M.O e{e^v',^ygϳhu@C<fJ8 LR 8*Usv )ɧ,R=?jcZ9Ĉ7HgW)VxS-*'bT'4ui&Dl9̡p,?7#ER9%H RD dsA&w)]՟;]i56◛zL)U)ܥ%- >e % p}%SۚPP0p*!ǝ'<'\'ɘ٘dd2&5Z&wYL"G#*]p@}]>hRKħ˴VV`凇p]DLCJn]s7ve~A DcmKu#CRg}7J:= 0TσK-mDbԶTTÅ E?.9 H`:?$]˭( ;ڢ2t2A֓eɪd&KƵ9?'8c,j2 7r7Lw_Rǵh!{wշӘ]NzнOĤ KLF-$$|۔ 0682G?L<1yvp1Mfk2cOyسS~k+86-:6[&h{f x1| _lV_Y}d/&)IL)BoV_lKONuRdiśײɳUǞeڬ{ 9bwRrBokǞA - ^VL mZ8A -ϤAy4&'ؗBј iX&V˟^DkD]᧹"gQ:CNN6g /LScHݜ2-2S^u3^ugw],d,Cݯh&`y@3m4cy)"XMOXK缭؄)WdA -#d ",)q6,6,,)=71,2,V9SB#m9d4p.2uF$4.3uycc󌏽J[iL[mud-gyи8Nisu"i}CSMRzժGEq),߰J׀w0w2&|ڎHg3B6&k8 a./E%nMJ4\Ḵ7ɘL&1wMol#qlZul2ͻƱy۱m^F$B?dॼoۼKEcjwnȐLKu(jɣҐ\ ww*btIH"0-D%^]n3+hΐPpΐ~ oLF˽R.SxR^> Z66ɼk2:6=d{7|LŻINRR.EzŻ'?]pw z՗ _l/2d*Mzsl괂 DdgRd ^IAl) D"qؚ]q_(elLнRn2& M?}d50  &[&Fuhc8n '!>+?wW=ԯ22=}lNOy.w]YY[}_gnMO"' VN6@s@ea* ==e"U{ B#r8#4 VdƯiMvO>ǦݻO݈MOGݼLOꋞ|E3la+a+se56$e ^A}l>Z}}{)uw94sGJgm s84|M%%:߽upo G""4Zpox xcsnPi}W-V}?͟|UYKyՅWNVdN)U|C9"t=N9Nerysirį/5"8$/ʮa #gT莄u7z3->\/(;jk=exzjE-ED{%.ݒ "Uyyn_Ϋx8ED5TQơRc_3wMM&c2MM86:6=l={ԛ "c i-NMc{F</C3\_QY,ќhA8&!B,Y嬓Oߧ&Johɴ'C>׊S$Ċ ^vTF1TE|tCDUTt^OMͽLC"dhD N4Z,REC>+%vR1M~Q>g-5oČX x*.qFb$1j{IYAڃG)멢ΫjDp&@SjceL:-iM-%K*8+]|">J!q+b>DȿdⷢԔHRUkSF#ڐKh*]U<lQݹb`KmH CRNt//&1WMfc2/Ld2&Ӣfql6ͫƱiѱ:6ǦEfwםIFv#MIHO{ƒ~^; OvK2eNDɴwD,:qʲ- qU7|^w,*ȐZ3]c*W(Z.vwN.$rɦ|D8DpI*%2hnZ 0XCcoDS4KFH'F{ ~kZweHf!*o GtTx84Q/I |*ƈt s}U!rñkUI;EѲnrV7Jei.r AOh^ N'ltoYx̿zHN xp&%%JBEgxpS2!TXk!/ XNwO>e6LSe޽]wyy7b{ݿGI^ݼLOـ=/O/ޭk6{f56t=C8jl6@A Ap'@'x8AE@E@,,2,ޥ&=, YlYdKhMB#YB#B#-r8yțFF2FZd%4c.7ddش&Ǟ22?}3)O2ez.wyi7b{Fh|ؓLy3B[^U_[}l V}|6ll8le;lL&&F& v>ڄAl ^Al>څhc xc NwO>~'r8i p~A(~ܥ.T>.Xblj.u<~C1)/U2pxMFrLNHFd Ecv=u(M~#kpI'dOH/lŏS7_]ԡLey :ǥɶ*v'3u- QA#$+|xPvy7 _"eʯ w8U:U-gB&pXȂ 4&Ey׏%Yϣ+u(N DZ c2OLfc2Yyb2٘Ld2&Ӣfql86&e*69]q]E4ԡj{PWdoAZg]9}eQ~fm z8TZ,"XžlMb_d6&c_dZ4L^헍cul86f؟cTC"|_lgȇEmZžoV_a_-&)IL)»oV_dK2-"lKUoV_& wWAYśײcڊw^ _7E&|4|g 7e DS{5bπ d N+gRS 7 3Ug@oA"Ada!{}- +SWs;r'5c&{:;wfM>29yvɋ)7y_˄Y&4N}[&4qgeޜ//fn.˼9_^lغ\˴9_^L~/44h[A<(E G3o Ǜp2;;wPw Ǜp2t?p'pR!`k}ڄ1l 7:bb~ v6B:`|$1vS/T"E5C'km]4jM':b)PQk{V**3-Ոh* GꓸA\.3y)~Fqu)HH)7{pu"y}S?^Pfu'n)Mpr[r|ߜ2s˼! ; RD[96^k2TDWm`_%˧x^|J58+mJ(Ynɼk2=m2yjıyױi&4ulJI.:&:.k2 (?U=&UPEQzI3tJB$8v Wv`Be͟|}s0>2$h BK/_hIgpC$hmX!s }: R)^GTp]^$}p)E 'li.kwJnK8%}Y9HEuG/_z`Ced 0vڽG y7Bա:jEP/A>Ok '>mD|#)TPn"kUE:9J.'8oTڐ|{ޭx!1@t@׆b,T KW㢎.;IKaI$TtKKCE>;DsR@v?g|(8xfQl ȫ)ޥHZ.?I ؿ< 9!/yKb)s.&ZIo"[\< v6Qp񲤏p1^BOYwGL]iɘLS'ͻMO;6cO/z:| _4 _$ŻINRlOԤR.EȔ"<+Ef't93Vm̱ xl"h1| _d x" hf xM ,Di[ Ļ@oAd 2@-Τ v Al 6@ D:VswA: /Dl]PeW\pa gΗ cEo8xW;YbyEWqxNӡ-dm%m\R5ڈ.t3sEt/MT?浌z?rnuT)9IHUV4㢖C ۍW>(:e=ezٜ2MOyri.wyY݈MOGtϟ@˼<мIŻ=]}pפg{m x" hd a.q7dYdX"`" "]z ocȲȰhEE@ȻF$4%4!4"- w Ih$Kh$ChE.YB#>6i͖MM|l|))ӧ<.]~'v#6?g=˴<#4IE?]}p՗|7dd8l%;l̻&&F& w>ބAd ZAd>ޅx# hc NvO>~'r8i p^JO1;.@9!jY% ɿ[FV<#voA} ˽ vK=/EԓGQ T,yHVL䷐_>AqM>֎*e}H.2Q95vcc^p/#wI1 GsBѩ>LF]=Q5]%(<9\$#d-nQ^FL<>t{}(˒ =&ʼ8.଱L}d5645yؼcql:vj{ N+BGלEG܋{Ľ J=4kP=C |/02Rp$3)ɀx6RFej ]L##yWp#v11l@Wh:ǤM%;Eҫh rDߥdFtEd0:AכJZrN q*:$~c2tG \|7*N6Rw2X078f$隿vסSA4jnxL;r U LQ`#2«}C}~]&0c,UI!YlU:r 5ڿ&E "8 SLdXАt7tڣiβђ=({SS_Vc@QHszjU}&lLǦ]cԱ'v?؄/I$O')2IgIjVn)O"lJ"R0K eL ܮ^>509+8!zzy)z֝"3ZU'2$=_jx1K-!l|agG߼\v gYֵonCZ@[&M|_O;)ZA<8 MK) #%9ܵ5ew9jQ :}%-8h2OLd 8ϩjyj%|#>::GF# 9%5ղs!0zƷ(4?8v^=&-Csl].%﹀6LlLfk2OL&c2ɚdZ4L6fl'MƱ86Y&شlLIb؆//2L"Ȅ/Z _d$œ$&IMR}@ʴd- 7KU蠗 gR:a ¨ewC9Q!d%1xoPuck pJx)z8!5VuU8 kJ"Z#\AWA^QNa(ah7# S3.#1lGZc0H]fLQcYpX_(NaVQ.%\SIc;:6nY&g{j?,kXSDURtEQž ,:; /L/BvpVҋvߋ<1dMdLfc2YɘL&ӛƱylcı86&dc _< _dœ&| _dElU_6IIR4lbl)BYeK6sLsfW_4i+f/[}bzAc[ qhuZa ^V<ī3) L 6@ f@ kKz;~%Yx 7#{z 0Q97t#5{ cZ$^V'}@Ez]pΘ#O+r$n)g"FYp |ٜ2MN)=e2SfslO))=e6w&wy .@]w]Ż.X $bϠgꀆ&yy6yhR}pϳf"6yʓSVͫd9y>ūFDx_vyg}2hR}p??_a/˴:Rɳ7̗'pAE >څUP&<uU&t-p~}ojBNIy4i` JheQD#ywnQA{TrʍJRaj_ۥ~=,ZYAE6VK5*Fpe87uKRxKMp"6zCRt![Zz!KMq]T5 [}^*o CGTpiH"#ߥK`IC`^e]šjơE۩ D邶nw X~`RnZiZySPIF%\^*._-G]cKQ/%!y&lL]ce9]!hE}\"@#עӛC'K״;u1:(>y8t-mR*!xT[V] 3Q*R=*Y_xh;zS f^peZpC4Uʑa]wriK#("Izw;*JwҪ8F4c{Z WI}Hs(_%,!#Ҷ:-Ȓ_Դ׸)ɿ#8XV(ef4A/ԇ:i 1) rtN閦ǩ'H߇&@815CޚC#w97EM(tc4t(Su|(qI,򯢶(cK&s$,S#1OEKo(6]}ԒY7Q>dž^oA T6/&S"cuMM]iɘL3gMO;6c/~:| _4 _$EINRdOԤR.Eؔ"<+E!K@O%wܘ4"tfD:rb"+7LrC r.vwЂAEoUZO EĪԘ lʣB7 uH]Ey(>d\n͑|  W f 6:.f}<|{*\BoZ$Q'ī(E~"a}"|Q=n*^H XUaa$ PTڪ3 UKW#ZU`PTw3s7lu‰6tC[bI]K&1WM&c2dlWcӮcql:vhQvx#7$ޖCSn&n,J]b!Y=G]n6wE%R\O=d=UJMTLd%^,lHObGGq%$uA($v}şe"R] 9u-ΈOA|>^ϩTf*KN"%2|?űO8\NFgMLj]p eu昢Sc}`͘LzPN.r0t_P<Ԣ]E OĹɼk2=m2yjıyױif4sYEO/2fkx7IIW_[ӥ_xध ο^}n[AOL&|W_86 Vql6@s@VxuZA3)6@ΤAAl 6@π 2@  T~w\d&Ǡ&@\4VCh*.caIX pQRGbp#G5׫c%߷. inMcwa *w.^s 8D?׍|ZZ/ʸv!CKJRSSO)AOe6w.AE@yE@?]}!U D' Zea* 8" "U;=fIHN2FˆȫL]2FvB* VlyS|l޽]^c/#6=y_LOevn>_V2V^?7_]iˋ@ W 6@pW>6psp2=}]'=\fnqro/YIl˼8|l6,{wmDzjo;لbWlEğ9w6P:vE):'/?%}2‚5\rtԔ zg%qD iEѹC`?W1t_qFu(ĈY$o<病MvXP&[kC#HPҢ(@h=e+v*'}o>ZZ]z^x=(DdLd&d2&1dLEd BO<>UDE)ZթvM~S`Ḹz;>>]:۫F&141lLfk2ydz386Mcul86&lccul6&MbhȄ/2mbx1| _lM$E6I$IIRl$&Ib"ؔ"4)Eؔ"dK"dJ6RM)‹"p/z}Ɵ5NNDZVв>IgHU ui#TD{OMC88e'wV^YD™QцPD]cϭ6Vir3iL<#'?ǞhH=#4~kUB#M |Vp4fc/ΗyqeZHV "p}?*KS?*tO  \bPBWBE>ٗ$Hq6?wdNJT g(?}l瀔Q^u-"u+2H&:adؿ`'2ũ$n%UA_1b,Y(H:ԱwmC.jrȲϴ*D"6^<įd<\Zx: 7.s\tB7/%(-76.%;7%QpbI$&Zpj׍IJ9s*'&s:l]fRI! N4L]i٘S'ͻO;6Ǧc"HK4A݃ U8Z$kDߨMT"zcN{|+U7vuQ_ВCp%}C蜤 4z%@)bY>f{U1ye!%i4S*Jn&mT],>h=㋪eRzۋWD(᙭θ))#r@l1KnX]P:CvhaAk?<C=$f(HIz3D(CqBTKJx|B F9 . Ő'r2~ڍ YqAXᥡmR0~/Ō x(dZ~'qHT\\^3\yT'Րo?d'* .ę@Y<%4}.؍yc+\H>޽[{I%u'T/3oc`6ה- t~` (qB|TQ1gvGSq')IB"oMw^7 &!BCɌ$Ir5&I?E(1⇡"G! cu(O~n2yd6&ӮdL/lVcӮcql:X1u쥐k;I+Լ\LEV 2 HZjBxh2[=H{hڱD/3a '^C<"[ ZHAu4ɡ #C [^{MZP%AiPG%*m(j89"$oVJb6J`:Ix%Ѯpb%sܫ&^@Я7-Agpc@Z"z"KwQeW.IuP(R:с1E(fyE)z&ӮlL3]ǦcԱ'w=Ȅ/Y$EO'^}n)O"݂.8zŻm=Vˆ/2WE?Q}-d ^űAAvZAi 9 ΤA:b?A<Al xŦRndCE7 |P>8]Wͫ}g^Y#IIXV\;A89zKE(@E]W3/ZMdyi"l"TK1[Oew\kFN䆐z ٥/ KcrAkqS.'LLO2S/|L../BE@yE@?]}-V!U ī' Zea* ~8" "U=fIHN6FKȫL]6F~B" WlyS|l޽]O|BrĦ#:kи鼼[-W_tvJfʫV2V˼k2?m|y"*c*GSO}ᤧ9p߹ ^Sq>-?qlyf);zt c(p/KP!+š%deR&ӽC-q.eD:_NA{ KP9'@yխI=鏜r ᳐F雤P`( [[ .];:tMRٖOCLGs9Z D@@F) ncҼxydg\E~=/E~ i@в #tS#/nj£]O%"Co**ނa2H"x{&E_8[ե<~~)zL@|Sڮɨuq<~֭0P Htm7glK2.lF9B$er:įL[}?˹CH6\0^2?\Hh$#Q}Yk6jNPRUId(d56<5yشcqlc)|n5IR$E&I4IMJ-ERM)B_)EJsU ' )|}]6qt?S;QE \ѫ͎~<#|QU9˾ͩbRR &G){#hWRzD`C#4"9EEdH~cl~ 22RO/ x~U/:ǁFwKI͝AƸ9Y[T|\KZ#~‡;՗ X<\~j&a엹OT𗊾$'ZSd<8$0Y4XP%2(MK2)`;`k e}0ɴj2id&1ML~ul2ͫMƱiѱ:6EǦ7ǖAMqhe|R^E;$p:"VTPT+$4І(9ʝ$ԆcJEI*yUbI~A:"q,s,)i49WAǫ%V:DFLr)x5Y:'bH*[SO(7=e|9$* =nǘed xo ˄jªBӵ;Rz2`d9Ƙɭ>X9IJb׌y /]>iݏ,ܾz ~JPweT.&-1BTA#IAɼk2?m2yf̱yױif4sYEO/6gkh7IILY"[ӥRfȬ݂.8g&g&ݶn+fV _[}f6| _-| v Al ^ıAl hb xqZb.D@[ ċ3)@ v Al 6@ B#7΋t:RfٻwZv#Y^&{վX3h\SÉ/DI/&GPT y_Bo,aL$0Y%߻-W{pl|_w;Gdti٤qcU~KI9'IȻf~-H[QؓSSO)'wv2=}g]DlލtĞAF?et^ hꋞfckRcnMO3>>A &b"oa.q6lYlX" "`"]z mcزذxEo,Ch]B#oiIHȻF$4%4!4"Sͻ|lccc"-{vʴ{)h2e~.owyi7b{Fh|س̻y3B{^T_[}l ǟ^;_2a+a+-[m:1wMMM6@} A} &G#"22=}3P'NptS2Tyy˔'ʒPO3+L]1fcR#>{jT\JNnⲾ7*;]sz=/ %t Y4Q%+C Jz)h<iCeB)NEJV8M7@e\u'?Si:esfI M=˻"ع E0-6շ"$^}Cxo|H@SpڥU=}#׾G_j\Ρ<އBkⱧ{&3įB.cLR fL:&;Oc@NkE匴T-1!$c8$/6 _~A'5l,!Qpӥ;Z%˕} \]ߔ[yQh4YK4]R beE< "d6&lLEɚLdZ4L6Ʊiձ86/:6Y&شl$ &/jƅ%6x(|7)K24dž9)9J8"[dqNrs22?}dNg<˴{<u,bn# ؓLy˳[^U_[}l V}jlޭ{p] 6 @ N~C8 vI`"`"EYchÖEE,,6F%4&- 94F%4&, Fh4|lc&- lسSSOyF[}?]ݻLO9."6Flz:b{y7/yyFh,/ꋟfc̰w˼9_&;l%3la+ ['&ɳ]7>@  z ǻpo}d>2p-}d))ӧ<uNy]'?Ao/r +}fsN?}#** jk:_'+i<&(_o4N,^H]Ե]b:9 {UM5@@UDžSV_^b"Npn/Ǜ 84OUsR,H"/"O!++STLBPBɢ g9J%7v7H1} €PR(\4V,@P!Q8\F'pr֫n2<ÞC: x5&&141lLfk2yd&ql86&Vw!ĢmHCIJd\n*M_bt Ջ )IK)b%1OBu .׎(Nt84S_rF8qʈg*^pIGs*R|ա (ksaAؤӻ,]I<|iEJJFCnkﮗ$WUCqB#՗o*.)1)[`xQڍǬLdZ5ɴk2ijcql^ul6MƱyy9 { nH֪y(~oQ4PyYT7YqBK< e<6JK<`K՗Jފ*g-n\Mf\C`ױ/<֔"Mgyk60O]KwG.Ǘo\ź\@35-IcPQJA@l9Pz I~TKb pLoQV5kTJ H6ﯚ&d6&5&&1ؗ1M7/Wd{/f؟c/"&| _4 _d*!|b[?V_Y}}}}HR$7/RKȪ7egɋ=xZvY[KkZ}f؄/eg@mA86 f8b &<`lZ:A -ϤAj'5c&{:;7*9yǦM>29yv铻DhhLhEmBGeB,/Wp2mΗp} 8lΗis/|yy>3?/"36e D3 c [.Efpo}ˠAiş>ބ ?-exȱf:EY(ttEGDJj NNُS ߸Œ?G Hn)}UIѰ(Ap*ҹ\ =0w]x]!%+5 \ؔd#%QoEF>$_ewzuCTɎp ~ TȮn-uPsϨ⇸t tn M^:p\/yQ!UQ Wι 1e/{quZ&\ֺ)"ɴk2?m2if̱iױif@ظ:@@^(D#ޏ/Z QGeRF""KASE(ӽ]ҋ(QW<(8E2C1 8zϔL]iɘLS'ͻMO;6Ǧc/~:| _< _$ŻINRdMԤR.EȔ"4+Ex6EM'H OSpfH/: S ]Hj:U߮?)-߅G]'m5ˎ>cwՉ&aQ|/mI1"hUzʇR;?od\ eA@ū^p'K}Kj\q0U?,@B)| Ѣw-#ѐLsR/uY?$)eOijC܎COVG"[{1GRTɂۈ "Ì==EJSD_k)ĮԎW̫٘&1Mfk2idz386Ufؼlccul718ŅP#(&P G詽#\SQ- nHMQ3MP/7{u7A180<5Ow2F44NIΩ28"{8$7t*JRT/@^$oWd>GN ]a| 4.6 l l7!4.6 d d7c.7ddش&Ǟ22?}3)2ez.owyy7b{Fh|̻ؓy3B[^U_[}l V}|7dd8le;lL&&Fo&xM,E ߀ .Ǜp[ NjpYovʼ{)@ݷSq8yIOs8g;s7jo/ofe<ؿ/̹ Kp(x˼>=mǭHmwEcV7VvŝnNPEJ4d=+,iy':#5i;[Rk!ס 4X#Mc ^E4zLԵ(N MS4&Ց,ve"&e~#ԂZi:DuP[90TYn.0m!ࠋ#G9|,5`/&d2&5&&1lMfc2/Lo&ǦcqlM&lcql^tl}cw7*QO^yKꥠMa`}ʪ_`Z|p#WDAA<G4;f0n,>PAjYA8vwəd%AΩݗ]Q_^q@bh)B"ܥ[Npb"yQ] ++* :vZ"TihY 1:!WhSh9 (WUDqexI2HDp yGYZ|M+p!sj 8e(c.%[4+7Y/=:qKH7%2VK-m~8F#0\s Jc&$[uQ}Øb 6]R41lMlL&c2[ɘ̋&Ʊylcı86&dc _< _lEE&| _dEl"x$)I'IL"&)2I$EI)Ba[!S)EȖ"dJZ,EȖ"QnBB䔔6}' Frw΍U.z4h,zϠ0nZ/ƗVF5$qv4Qݏ"JEC-C# ^JaxQ8XB.V^⇢+󟔕\*_mȥ+hһ=ks"8rN+eZj>f;_uViAG)\I|Q*'݇,(*֮ULń)z",]c-bp[?LdZ5ɼk2ijcqlZul2ͻƱiWT & Ǔo$)z%G0Pue9eiuXDpLÕ kc. UcäPUI,j幽8#%:-2 :?ā"ܲMf}Yya9\uF奞I^(NyhREmxSd1j!pd!PqLcTBE7hYn T _ѧHW hQDVҍtQf ݍq8iM|Vj~5'$j7!j2 >ԍ~YZY~(*"%sUaOSDEFū~0'&141dL&k2id&ql86&Ÿ#x'dHfyie,Mfpx-H!$Η]xx&09J%8~?<|̗{1_:? _H{7 ABOyrlN)ɜ2S&{dNONyesiesyԝ7PwxE ";t8xE<4Kc)6YcYE)D29)D@2I)¹"'x8"`""ch" ")`9%4&qɆH3*SwJhMB2S Ly>6>6ث)6˴)VS>6mɳNN^$4Ny_Z&4"6qMv2q c|7cY6[N˴9_^tغ8RΗysބA)Moq8ߠ)J$X|_\;L"sl)׋/}ZP\_fP38Jhٛh;I1i=e"M%p>!+S\Yٝ)/^U|cu(V =baaE"P}:LFpuP;|!cd"lҷ Fj~lu ]Bv%{A(cGP\Y +X[&d2&5'&1lMfc2/̟ylcı86&d?qly"9%FC *T$:&jE@Q4[ZI >G.E͌-%mޭ z<.C@7+@_W#B9!KCi>H"]@cZp$7piHѷ[yСsMCY Q2Z2TeІthܫD8\2jZ9ziXFERRaBs͠gqY (K:!P5Fw +yZ5d| xOECu|CnH@J"f%ABzj5!=/ ˒l\mG?ŏyh,<0/R+/^ЎESD yM#D7VTFIG/@rx]#$xa]П{:# Q )s +]w_ڥ>Q!ՆP8N%GO@BHk1Ī5:X浈o'Yz5'&141lL&k2id&ql86f&_Xp*- 7^ J92ϖ-^к-=~RZpCKI8)C蘮iEw u Qw ήMk7Pŷq(_#>6Uy佀jNAH1A k[}P!?$J 4|5x^Q2#aS8Ho HKk+%WMfc2Ld543yձ86:6Ǧ]&6miS~|lc/gwHhhLhEmBǛeB,/Wp2oΗp} 8lΗys/|yy>3m M>ڄ 2@π} G3oԝ} -S~u)Gp2t?pCp+cuK/0m 7JY8nʼnK-|@CVO _dB[x\=ozvK|馜Ċ' JZY ޓ*=ѥ_yT%`G7s/H>B XV=ͻ5a%o;fC+xSkEWփ"[Njlˇ.H*SF5 Ó z`pp銈َ{oxSPƋp4)9{H+K%nƣzӡV)f):)&<~auk&ӮlL3Ǧ]ǦcWIEGDLE%V5!<1|EYZtI ߯x~^-h|qUA?V\Ac|9]µ j-56Cl~ZbUmDա ^D(*ˍ9 SMBCB,7EP NB /R/A!h5iJNIFyPMelg^M|\Xm){ƻraנF;x^ kw(qTjTRҸ>MDZSa'ۉgoxT3 Vuz&Gm*xU(DQb }MNu݈ ;:^ DOHG =oM]yzX}pTѳ[%ڢ- 7pFep6g\d0E/WR;`Ew c=$ )fTB8KЈ_O C^)%k3 fmDTKI;K [@!( .M]i٘3gͻMO;6Ǧc/z:| _4 _$ŻINRlOԤR.EȔ"4+EmܲW /So w^& 0ڕd`R2 P D\f/s:F,qO}ÆyY =~i6[>6>6/g̻Ovʳ̻w3r]ElލtĞ3ן2ez:/oyyV}nEOW_1{e;_2a+a+/[[g&Ӯɳd ޅh# hb xM,GE,7;e=e~g)O8ᤧ93!JtEe CU_x<7{7LKfrd)pb_qI EIYUJ0XNǴY#hU,!c:@mAUkJA(|NiMiZ54#2 GlYsERKHYrݴmMJ~]+z zj7סq*EP`mh҄U CxzUMѹTݥ;:։(1+*'FܴrCD5|rD!mMM=>t@z|CcG b)?izBe`>D{eN[ZXHo1-!J6IRl(~Nyj)(f=ʊE<%]T{g x&(?Dz!V3l^$Us6qKjTD1ф+_BV̥T7#&Q#U  E;A D@)Jja许$d< P)-5"15/ ǩ# ;To27$Ļ A;@mΤ>b bA8rz`^xiBm6etCpl8q sKo< Je]v:(OI}.pyAy39p$lrbS{ZYc\0/;WD XGHx'yqN)ٝ2S&N6O>Ne^%ˋuerw62w{ZDtY;E^^ h>wpVc?"D'/jOhؼK[)hMdZ9y>EFZD>%4"/ݷ/j ˼;le2iaj|y.>>w>x)@ݿ.t  p!PZ|j׽?ptA%DM y((5utuN9sȉ9̉ &l򦬆*2 (O.W$zc˼f;h:;T8c˾v { )S;DjRSv/H<}>ii-l-Btx|d[N4*)\{AE"lcsb e~rX|9-(E]d8\^?%ΎSi8{0(1i-eS7/lZUW~$xv L+滎MO;6;Ǧc'VT@EE([h/iR\4ǦE;Q (:lw:rJ{ȁ^l{?)VpOvR{uݲ- Dy`RWJ^!}@[0$khHк,qFxCE٤juyUyuϔS{ Υkgբܘ`}QJNq>ڵn&rC[IRpѾjDFY+rRvS?4YS gC_W0rcg& K*Q0MeW+vX3D;Ju2Ij3Rt͐> ?M+EDȤLH+҉1SPIQfBj4"Lt)PdԁV#Yr__NNPT"Ţ@' ʦ?|hP*?6)49Gn&+"&$83Ƿ2|r~aCuNxDο۠]USiCCd)L&&3&/:6?W _|7|\eZ$)$.I*IJ[ӥRV0"ETB>JܔU}&c! $n =u4"+7 q(H~_7d]Ĵ>9*Em^q ":FM܃ SZڋLxa|l韛*# گ`%tDu6%PՒO4>MI_p˱eOCg(pզpuF[֘u' 0ĵ{xr&4R45 )/} W.7ER9RFg|hJP)ϩ-pc4f6IQ!-Lfg2Ldk2;iecslulrwcʱǬ ?4KG7u(ueJ!Ph杻BZjpJGvf{q y"<\ufڡ7N VzCVqmV ?D ŋ/iUnB1b2LSPNgATN:'%BiX/Ǩ&gyf-%{vHb L3J,m49];)_7G*؁{LzTT7s52^Emeǰ4fCNy EC?PƎ= E>_x{Lj0 /2soU.?sɄNV/Nq, T$Q/~dk2?m2;ieʱcӎMαyثEw?ȅ/^EINR⻥=]t۫/Vmo|"x7| _端MD86; 9 O+A; ?; wgR r@9 V@; $ 1Da{S^n3ڳYy58ȪA;UƗײ3+‘EZcx8w"]L4 qlV=D:4Qjt{# C2A?`btϡ`)eۋWePbnC8NIk+p5}7jcx ? kwO>evLSu2=}e^M~;bn^ogꋟYvMO&]Dec.Ǧw|MBvĦ#6kи鼼mW_t~nʻVrV|dz.] D<]GwO>]'?܆(edjik%lZ*=*"UЉOę𳛁S- L])%|BG~M<]T|ѱr1yk\,!oA_ Yֻl$|͛zStEd9*qwa kCmGD\ؗDh]uw9ML굜]NEj^.1U >@ꬪ%3چT.@8g'u~g2 sQH6J&UMFx,e5⵽ \_lol6*sr5TOij9.Iʦ,z }6A1&3 "8.;>+ &]2Mx p $P_@zYmI!a"i>^KOǾd^R*t}_u<98* . 8$͛`Nr1*~SӈQO˒q7TCig^ʰR5U-8oW t.7 UM!LS L#yEl!.eKv!K ,TZg5E_+&Y)/wMMfg2L^96ulzڱ96{nEHRt7II]UZ"tKrJyTxcSDs,IuA0GFK6!S.O+ k*ϙjy+F56%ࡿ;eeQu(&Ro[D9K JW9kW+hUYp%}&L.(wZm#VF{6 D(B8lMx!lg[F'p, ߡfے@JPM@)A],nf"brk) >{ 5 ӂ#EOwZ\V"RlQ}N')_^8ɾL]ٙLwM&g2/MtlvMMαcslZ9vϿ"aRNrhBWVE4B%٪h2Ž`YJw ֆx Q9lۊ f~nR.q;b{Kht^fᶫ/~e?le7la+a+sek2?m|y".#.㻧LOo.p}+UTɍ.Y E8PՏLT`7[* dpm'xjp6KOվAqjCޅ^iI|MF^7y3UOgSQj{&~ lU+ICL&W=Pe+t*Jzñ-Zi= s8R:n${[T@RP9/)+ۨEˏG:Mз=b?,ؙL əLdZdv&7ɼi2}α;6-cslαyӱ;TS'6">۫Bk#'N>EU#h("4݊&0b.' <\Ȼ,͆H}>9D[F2B)7}B:oA!ܓM]0ޤE' zuq(`5Ȳm"WjI咛iI%`H{/Ċw M#h_XLJgPL Eh=ZЭ2?*UEwhHǪAɘLa۠bu = c@ME&,g6\@pYs?MC !%'(ym611ƥ,I=xdt l "kI-qLzwa_UIP8Q.Q}Pj6\kˑ0)zKvң/ I\̪ qGM%iEKgCM`VpQrh☚Od4JGp8:6{hYE@m ֭W BJ>~ߩf2-Lfg2{ia29ədv&M&ؼplvޱycwlrM/>|"| _E.|f-$>I"IKR$.Ifbȕ"(Eȕ"K^"JrR\)BRh_DZ6y01Tzq6-X o_hUHᇈntr#jxF|r ZB; dѻ> d5>Fy8Ryl1 fhE,,ƃ-O5&!^!<*q$v#5C=>(JtO mAQ"Ѩz=q>;Dj`٦#!ڝ|#>(JVʼn<|PvT2ZsR鞦 W|~VjU% yv֤vCTLfg2d4LM&vccwlrM-m8<•&C8uƷoo#w Kyr~p61㡕P #E,ΩŒPR_JbF Q_eYLE #E.""m$Kdm|G4 FoI gZ=&"Q4k>,_k`k6)$ḟ@ňOhj{|lc.m}>6yqW+yWy_+viW}2hQ}pLV?_aߟ/H&F`xpmAp} W߇xsOf+/C?<_a ە)i('ؑ&/f3xY[HH`n|"jȄhc)z /irs l]22B/mY{G  . CfR$eJy(ZKF"rƧ.;j>W+|SwH1d*F `Eyhj@]4/#GҲ X$\kߐCΡWCf)"Y"nz%ڷ,jWН1r\ǁ͔A_$cSKCD2`,tF%x46ϦIgSHWoj )B H|kwE4'fݘh4քKR.RlED-!i-dj1wVTe(ZMB0KT.EdrwKLxE)#xt[d56BA^aB;͐ڋ6CVV_\ =H5$:TV SgV'YݳQP&DSn\oRt'4& z)TV4r )4G54LTjQl~{F]f256ɴ4ytױi&شtEዟ_/"I$EO')vIIjQR.Eؕ",E|`jʬ8*X|‣}mgnJb+ɱ K8.F6nwpEZrQzD kLwO>erLSu2?}e^M~;bn^ogꋟYvO.I]ec.w|]BvĦ#>kи鼼mW_t~JnJVvVtd~&D] D<]GwO>]'=܆dK},ACmgKe|zJ /˶|%?x#XG-3g.;ي6Ԃo_u*ڼ+V@MMFج+ңB v,.:"qIۖr*<S7JC6jn#_=ބЁbT-,wM>\wUrĭNkz!(^TaKԷlfqtԸ]޽İdAi+*hVl5j3PA+$o'W'Z|d~dv&c]ǦcʱЛ`mɰFBHtjz6SlGտA0l3I! 7j=&i1%0L-ɼ$/h:(OQ50$eQɳ6R\~x_˧ʴ>˫1g5?s::ԭӣOP8rp,$Q[2 j) N^[N*mjw*m~&v)fO!5:"q^P :j+)QZ}uAwmbŹb"-t+IUܒt Ds e|hqҲ!؟ wNQ)9}!zSPq,IoG9T&JD8鸤e6Y[49q,Wk"`L9h/ KJCV* &^%1W]͸M/q O8+̂R,P68]ܰO,CEn"UUZD8cmJ2eES.BuL`W&]iٙKMwvlv+^/.|*|MRtbh-ER])«RdV M|UJz)C!x3/ 4X7N[8PFĥ;i.87$i0]1Ap_#V'&"WWp ,e (~zSp(u#G̬WEűTQp8ذoTKᝒ څ}}tSpp}oőLNgFk/0E-oLN' LE mƔXUGvkhA;ۣOI$Z&ʸҒ)w[\.m[ Dj%qA 7Ґ/۝k^{Gh6>(TsEkcAjZcwʕey; S|!sWuZɪIMF%Rc. ,TD.VĨ)]0VMnۼ2j⫾hLLfo2/L&g29ɛLd4?Lv fα96y&ش[T*\ݔM1cD:MoE.嫭i%t>C0A_,Hf4R V\Jɪ}³x~!XL3m-ºN !WADv55O9ɣ@*"LF齙|"| _E.|f/$E>I"IKR$E.If$JZ"J/JvR})®R})"<|J,[{"˼M0QcO$Vuw #Έ.EA(*L8 T,:Q(mB:>XWbIkǘf~)zF Dy@CCO[gE[!΍$jICtʸ$OMZ=bwӔ 7o/Qx휉D8uC9^R͂AS5BvmqG>YR@)9lW4Bq& 4fy2B}1HY?QԪ^wYSL:*Ѧi:t 4 ȍDjY;ə̻&36Mfo2;yd&slvMαiӱ;69ǦMǦǖ(^('0!НfB1VNI4~!dnz(zÐq…ɢ.7D4&$oĢ|x u4N)(/jJ==҄ߤpu(3$/lCPĔU,$$t C(~HQ(MBK/uZPc H!t:`yVnUWN&[S륱{JMysTӃvE]?H`:S: "zۻ),5L-/۵ULڥ/S<|Eߙ əd^Ldv&7ɴi2Mα;6/cslMαiӱñ]E"ȇ/Z/v]b؅/ _՗OR/%)/_+EhU}R\)\E&Ӣ\/ul^+/_}fzZAc{ 6qA9@Τ<D3AA @\geCeAU]"< b@6 ČȻ!mZ\^^$Q<[/IO}ضQ卞| 71an)FERqHiC\)7+*jO"iqN)ɝ2SfN7O)˴KPwy겿2oe B+xw@C}hQ}pϳV"W ]Ap>" d6iJS^V>vɴ+r|w +Bv +B`-˼;E2[|7L#u^] } }}?.KS^]tܭRϒޯD[_ڰh~l*ӌQuL'eC&Q4P1jIH&YE6UA߂z>Xy3)hB-CBH[~=д"Y+|ɢb Րs,ы\!Q UtSZUKA#뚲|}\&EڱP0ͼ46'ҡL=.Q9ʼn\j$S4l{3HɂB(Fb&J)zj5šCf, wA}.M"TJxRR):R1i&JJEVHnBE2By1j!A2<\HaǤ3δz ?vZeVL!&j"uM 9ZJHSL*+RBb;F1Y>LftD1j&h&<@ld9LwMM&g2L^96ul~ڱ96{nūJR|7II]UZ"tKrJۏ !ւQ# 1kE'~_c,Uf$"#_5o`I$4ܦKsaؿtڊMəL&3Ld^wc]fشrl!$.D/HJڀ#!"9cEx L|r%v|ņ`dIQN/hj|[swКَ<[I.MYA~җr _[koj wS&wʼ:]Pw.w]]ޅ#6=;ez:/v߭kEpnt " E8Aǁ]9ر'vYX"`"?Np#4.9Bg#4.Sq͎ͻ|lr|l|S|l{黼$4nGlz:bov y1vEOW_}쇭䆭;l%7lnLwMMޞ/A A}>څ}}|Sppm }2D"G]$)8qp_ߐasP7U/'$Bw˹Ózc71ԍQ):w˻j>Fd!h8 ww}J4CKĤ)!K"*Zj9)չq3ML&g2{̛ٙ&7y)~cwlZ869fcӦccTJ$PY}M}[B mo6Od1w\aբFӛ#55(SRQW+6ŝqf^) Bz[,K_\/OږIP9ĿH?ɨPZ!Ze0D%(+WHR"4k^5QK-8]{y 4ed= ?։?lAOI.FmWtǷGӐeLBLѥH#*T9ߙ ٙd^Ldr&7ɴi2_k9fα96y&ش{/v}E"ȅ/\E>|}akwI\bx%)vI|"h3IGvߏKrRR])¾aWf)J  BpS`GgEcPPSp]PhG\ժ4:RjJ-]4E9vNA\ )FG%`WtA3cG44G "étk c*53$Niay ~Y ݯMP Xg0e.WOP皓-W Z E7্> ukYEP B' ?/odv&aZ}ϱ?o:6{fؼ{)^AG)|;Su0LN]nѤItGUS yC4ڐk{,؎r %FYQ[kg{n2c\?[!Kw*@QQzc_=tde6tP8P<" zӊZ'&/dW~,d7B~QIıhq yv 7D+(b bz8%YX|_`PuXwdCd kwʏ/;ədZLdr&7ɴi2^csl fcsltlE>|"| _E.|f"5$E.II\RV՗/Eؕ"U_k2- Ε]ǦE[r_}no端b]c& ޝV`}ִA;X9@; + ?|Qc?x8]H(dUv+EYG4ڸfAjҚĢh $: g]M)R՘pxWvTaDB&A= i~q{iFsn );e̋SfwN);euyq+P} ù%b"EVHo=δ)#h6ic$WIJN=j7[00}īԵAad&Uϛu > g'0^g.?>j)H̸#3Đt}(vŋihJz>D ZjrW "@{tY*Mix~>!MM{EiŞiSh QDkL 滎MO;6;Ǧc _t"hI&)~:IKRJRR"t)®U)"ݥj!ş(*j/EL0kSNE gI SIzL 4< G CttPoO(&I1 #}f{S<ݢ]Yq{҂R$2  .RR] N4hSgxEI:HB 3 uIAǞ5>kѽ¢`\4ѺcPd_}`1v?]}pתƦ56?]cA|@y D'E@wt8EE,,v,K,v,d.nyNGh仄FIh$Oh$GhM.&<6ثSOqʫw2?}W䏻|7b{EhQe^y+BG^^U_|rV;_eVvVǰua256y5R0w> A > M$C+w ̪UU'v$,*w9~G=E{_lUܦ $UY&zT@N07\u2*wmω)+bOz[^̗-:Qۙdm*{%pEqԥ:+G#$;QnE}ʎTT7"nk=3 `a޾ ٙd^Ldr&7ɴi2}Mα;6/cslMαiӱñ&|2q)/L|㑠:˪荸QUɋ ֨ !$nJ9TA%%>}6BzFb0ݣ hnAZ-U !_.Jm ,1i*hh^K踆:!j))y~&d>CigA51t_}]Sϰ LIgEFo\|*o7D RK_2TBrݏ3K5qk"ꖳ׻/TMN=&A<Z{CPjXtFkgYz0^z0 @)8"W#z89*3ΤpȣKTHD7pވB.::BRݩyῷ9iw߀v7Q:4(}SB#"S#݅jOD(Qٕmhl/^&dNgD7*/ @*0;kᚗ`-O=rtUqmbm6mŻɼ0ML&g2yəL&αyc±969&6?ۅ/Z/v}E"ȅ/]E>|KRHR$ŋ$E.IKR$EI?+ExQ+Eȗ"(Eȕ"JR6KȮG}L9$Y5r|`Ǐ/(n&2q&Ent3f7 r(F;9Ǯ?vl\UD쓴5/:!iO/HIFuCI/Wo ōY߶Su&Ed&dv&3Gw&ӦMfشplvMޱicαyӱ;6*DE\"~/ _$Ew/Y}.If"ȕ"|R\)B"&//Y}m*8?LueE7m^߬ūm @6%9XAtڞVh5؝I- mϤAI~ M dA vWl~l.a #5dn*4SQooȪ⨐bm-Y-aBqEC\"ի>nsE)?eZ2S&wʟ\wʼyq8wwvA]rw ؿfM6t؟f",*/ hv%np~"3yM`\ط%7mD+sE$NM6~7`Im;/Y8H7 NrFZq8w%nbi|lަN=Y&{]BE7y_ۄUľMh\&oи1rL7cU9}`5_a+a+/ts=R_1R.EVp݄ v@/yG+oY}|uWiů> mC+'t/tQ~+rs%qjzzHx#P<-+b(Q'$SѪ 7`˼)Pz0!W>$ZQ۷MM!݌6B&ۈZ^lilrSwoŧ\>#vPeyKWkV=hӣ.E0g9rWirFl8Mo֜m]pԷ}zp!Nt)&m崼DyӐ7cEpJJǔ NʹWYUnA$J>%L?nN8_JOkL+滎MO;69Ǧc ԔRf-98Ħ Yjl I 9a=M0Gp'r \A)z7*8jWIrk6`ZÁk#4DChv8C+MHH!ϑvFű6cխ6ik&]iəL+WMwvlr+^/.|*|MRt"h-ER\)BR4Y48LՈR—5on8@wLEf^ 5hPpm/Pk}(%hbҰ,P] [=B&0@iԦoЈ J G;t( |i'Mv5=e\ UNڴ7=N$۱+¥$(j#A&dBSblႝ%BK n)L FKh7?KK"v&xg|[C䣝=TO/*&fa\[(Ƭ%wٙL&37M&o29id096;Ǧ]fؼcӦcc' lB%y%J,E:zjƿF1E$9$AvWCɲ^#t83hZ7[bnoh_>! Li-gS)axC8Gw)2ʱ3MR}i٨"jo&{;/v~C]6[́,IS\6PQH퇘j]IGt˛?N5VM2>Bos!JOp5L+ǦO;69c _t"xVI&)z:IKRJRR"t)BU)*8nO+? U[Aw ~X9G[A.|oV_E>/] nA v@oc; A|"hsZAb] nA v@oΤc& M =bA䁠w1"jbk'`0aU(?QYT_,a sͻ]g^ {K@)1c1XU[FƲhT/ogD8E$>ۂ*!d4"~( 1 ]}ǩ#` yfxz K,VC=gՁ/O2=}NV|.wy~UĦ+#b2t^^ h>=]}pע56=]cΏw ApX|87YX"c]z ݤǰgc&?Xw |HHHN;B#%4MB#yB#;B#o2u郩tM7ؼ&^2=e~WՏS^e{黼"'.2b݈OG3b/2t^^?=]}pa+ݝ/2a+a+o[cغ0O M=M ? ]n}>vpo})SOy~w94sp8\,UKwoeh!>^q" Wv]QnI-ԧ;BD' QN*=yVTa:dJEk u0)`W+d".M`Vd>R.f>xbS.[\l+d]rlģ[dq$pl[NCuKtCwkﯓL ٙLdZLdr&7ɼi2y96/cwl^869fcӦcӇco0`Q\\Qx:ަh.x= 65hHY-Nr Q4D4n&JkY%Nf ̨c94z4x$R@1Po_e1_A*(;x.8u31!|}^z?ibe75( ce$MQlSFplhh@C/*HSt()ߑ_Z #Ob0DuՋhnv174ǕqC T/* uAkU {i*MBu#4$qv%v_f$9h-S +SUF媾Lp 3]uRS0d6JEY YJ*YѰh}L'ut ܪS?xS3kfj&$tg+S1o2ZN͌5įCJK.2IJ؊sAjɼ0ML&g2yəL&αyc±969&6?ۅ/Z/r}Ebȅ/]E%)Z$)vI|Eb%)I]$E>I+EhQ+Eȗ"(Eȕ"JR7K(E"\[H?+&<Ù9`x(] J>pu<36Džl=c+xdcQފx4BlHYp)`ʺ"lb6Rxg;f\&/`bB o 'O9K!qqTt픚ʥ|}LՈݲI }3gNexKFp&7NYc1Y$YZjHo :l{oCC-!MwDN!*t+ OBϢUsc!?d)zD!RVYILd5tdr&Mfش:69Ǧc7!ˋHE xF!i*Y&ecC.cd_:s/YL<9DOD/Mпdr󣾘ҙ;A  SͿĒe Z-2>s\OTfOwTEԭk{Z3YToUZ7PkoQ ×( o)C lnL*) <.7}oI\;QJv@[޾A.O H4lrLVmrA/M\?*qD޵i1DK-$&]u/^D=ńMLfo2-Lfg29ɛLd4?Lv &α96y&ش\E"؇/^/v\"ȅ/ _\ݬ')vI7}$)WnV_Kvo"K]ݬM^&o:׶cڊ _oV_\Uű@qlv@pi@iLj M h{&LDw A r@9 <$WO89 ʿBІ\H8iIUyQv{G*44IgE[_MiޣVY'y(/D᱾--'XMpaTJERrGs;|\˰"\.wxl:)HIY>>Н2/N)?e^2SfwO)))o22uWw݅,"؆W,YtE=Yn",1ܪn \Bt"F8W5ms M h$ e,|8"`""Xc&=fE@E@+.sIh䛄m'9B#-9L%ndyޥ.|M[]mucM>69yu?ɻ%n }иdMv6q? c|oΗps 9l]Η|y{JnJaH}9_ϑ&&ܷ x }>^}p6:Pw_}tۆW nSr ]D86L9-uGR@`@GlS@3=1zE)aDUe8E8"AkRt" dUuH 5y Ԥ^ߊԳ *=íک,evTiU6Ne"4trvYɍV!$ˈhjԿQs`S &dv&7&3M&g2m&;csl &csltl- nqA( /`}G\J.a4H&MrSh*zw;g_Kފ!@%:uE7%iC.LSDRh]Pq`|譔fUS@8:C֤4 CkֲvH1bIF@kٖ7*vF7aͼhmGhYp(3V_>fIJtD͗G MAxqGZVFx]F-/IshҎ竷b;>HF9 }[I͈H2%AI2_. ApT(ɼ'<4%Gv_ 7gtQL D֏b#zxjPLDz)?*t3a( N۩͒,}Iid2_` y6bFѰm[ۻ"+k=.B|qZAڥ65{,Rx]ļfN ѳ*\KhZpVN7o/ dU"Z(6L@xM~aCiT3&3ɴ0Lfo2;yd&sl^86;&ؼplrα;69ǦMǦv\bx؅/v|"h3|wII\bh%)rI}bx3IGr-JvRR])BaWf)Bj&RzUrb7w*~Cc gz8TݪPc.W!( h ϧj@P5 jZq)dBtXD3(\הhCYfѺkj=('cFHT-m`#+gD+9qf},{ gapߩ&vOS5"WX( xR19.CR~]=褤O(lG)Unm;@4"e68"]P7F5ctIYkߒ^& iI\s*iL]ٙLwM&g2LulrͻαcslZ96LAtU,}gbxb cVp"7Ak"!ɇX9,)ʡvRJNTyXߙ! )F|5><'h3"j;7zD{D6J"WT5rT&o%f6ݹCؽWO@~v^ .]<=#Ob FjL{bdQ\fl끒fMRSݲ`/.#gA%_t|Fsʺ7 ONm`[9]庂zJ9 s\i9BMdMLfo2/Lfg29ɛLd4~`w &α96y&ش.|"| _-.|_o/_.InV_$śI?+En7/R6K(E6M^V_|6yUp~nV_ێj+>{7|-/Y}m/rዖk^AtƱA±wK oA v@3%7; W3)v@&bA <^g姛!rQRT͑_bhZ;7ѿFPԟUAfv{ hbk=4x{yĴK3Z$ڮ,_`;g\M8%C8 _i$RUoT=Nɟ2-N);ey7A]rwvA]rwBKdlCh,"Ьǀfw dMnU}}v%D7!msUcF8@Nv@/M8A7,v,,%=ocYXbr8FIhp#4Ҋù]&qˎ+>V|]꒏7۴)V7K>6coWwKh\&kиط KvdmWyи;[Η|y{ >p|oΗ䆭ԗe9_LAKn}@; @<ܷ .> mSuw%G7m~tue9xgGcyF4R փ2u.$و+o#$Y6ZN3/"6rjk7Eԛٖoh%5#:ѢEfNYof'$.IE(jx8]zm3oF9~&C[o5JA*-g3ѵ*AT6K]Qzҵ>"zo dز]Ux"k@`.TjAI65vF83~dk2=m29ieʱcӎMαy?tڱ* Oms"?d? (dx5vEEĔN*u^2z}# zWHbN_f^xb%Un+Rn!фy?&@ˊcKNLXV`ފ.#3:]rCpKЫ%QLyukմKPc1tGFKb4rh8M ec^4V\)]΢e"QV#VȠǹ[UI%٠pyPŰENm )AdtQExE}}Oʑ2ЛD;NcHF$Sio+;Bej,4]3_}J!B]^_;e{);e^.ݻOqWFl~:bľez:/4yypޭk51WGM@A D8t,K ,r,dq±.=ncسرxEGhFIhdOhdGhM'}p8&<6Aht|lǦ|l|lv|lccN2=}+*˻Lw2?}W䏻t7b{EhثLw2?WƏnEOW_1GnJwts~nʛV.L&&F&.7>@9 6 w> } VLwO>q+'pt<(ag{?)7du"EQu8Gß %EatyvĦT2uq 4ۤ2Rhk-YPq6}e;Pid KW~bV߄=Qƈ}^׻R|tIȢphH#$8;baTxt(cc+ȸT"¦貄k4 R }"O<<^T00O,ۆRDT:(/S?JLJ5sp'⯎h]L&&3V&:6=W}.-#X"#8Ҝ畔`OFaoii LQgQatwцmD l&E 6A2phrH -4 c`o|g*Xn*`dk2?m2;yeʱcӎαyثw?؅/ZUINRԪ=]+EhU wCmK wZ.O TYG4I ޲;@ك4*#mEY/Lvĝ56^Yzz"e]5H=]UI|KEU_w9Tp? \[:u]O2RJv| _+ AcJR@A ڜVǴA|@y D3)I9 AtbA r@y HN5N`b~&o'KYJ-5 :p!Ze)EAN,`டk'^3.3yѾۿ<ev_8_e{黼u?*b݈OGtݼOՀ#//[}j Gc56=]cAt@{ ě'AEw|8AE@E@, N8ݥMz {;otH7 #4]B#$4'4#4&Sw|MMM|l|)SOyE[Vy]qWFl~:b{n^V_t}T_솭twL7쇭솭9l%?l]LwMM^?L&]o} r@mA rp߅&#&[2=ezWNNᤧ9+ùVuH`o`'/э߾K]0m1Jr9~` .&j|[e2Ύ;R뜺"fRmobXhZ,Wh|ެ2(WDXw7͌pPThk~RD 5.AK)[Tu~epWU& >[r,̶]꽗Ё BCV\1>.z9pW Hy#k.i, yS:fE%2+I+%Ѷ M S<4Z clIL;U(9L!T|gmhPxE-U9S眧pJUV}W v #Ky~9̬cKܞ"t*XZw2-d$_sk;ɻɴ0ML&g2{̛ٙ&7c±96ycslvMޱ96m:6}8 __ŋE.| _E|"x%)II]"')rI6$)WТaW/ExQ+Eؕ"Kvo"KɫЧ)}ÑJPD+~zC3[9qwqkW؆phMkF0ynND{je<Ҭ2rZ$=&in­mm"h~Cw#vaM*^+Rմ+>RO!7ۦ!D7ar p!kvptaTNS˴$[=y+ }F5=aRzf G &ך[:9 `>YAT0p4M5$ђt3Q[CEo&3vM&g25ɴ4yӱ96:69滎α SiW1(6ɋA0 Éc[v!u#AE-vF|9r$ͼZ'}4Ef$ΐօ2PVA{?K%䷗mcrȳt9/G{ƢhB Y1yH_f]jԢ;WQ+Y0F3ƭEM4k֛~!&GEfiM-~ Lk# P)aXxnzif9dOrِdI e:e$čtE,3(׳pKfodZd&dr&3LMٛLαyc±969&6?ۅ/^/r|Eb؅/\E>|KR|$E.If"ȕ"|R\)BRde7mWɛfثG߬ūc/ m Z؛ӊ%D7i; Wӊݙ@L˙.D7 @; Dbt8zPn0n2b g55#z}{)$Y'tHo>-PrB|{Q97koEوl>dGܝ]6Rado|Ucq*B,RnR] YS 8)ɝ2S);erLɝ2m2}&K...]PwunAKdlC oh,"Ьǀfw dMnU}}v%D@7!msUcF8@Nr@]8A7,v,,%=ocYXbr8FIhp#4Ҋù]&qK+>V|]꒏7۴)V7K>6coWwtwK}mW6qmB*/wp2ߜ/oVnwغ/ݰ͑r7##] h Mob}vA%G7mPwu.t&ܷ ݯ8mb%زHʛkR{5v" ,)J~, E!%(ҨVRcF9&J,Ƚ? MPI| p:+TDSAkKE$Xm)~6(DɄ5\ R닂7kM#h<ޯ5W5wY!]n#ח-+v1Yֳ0@T~yښᮢsתsL- ɼ0ML&g2yəL&7c±96yǦcslvޱ96o:6EM-hL0"ZiNI?LEnC*yF sݖ/*Ѧ+n ܅FkؓsR8TNjŎ>'FчId yfSA#z(AK,D4!نI-e &l.Q!U ܬ}JPhb} zdrmEۦr"ɇǰMJFIB*_B%xA2[v#Aq!I[#]?gmhK1>vlRLT&|J(Q'@P֧)(r4/i)48FYJYaZ7*<,$ت 'Ծ5Qt U<㊋puMx| o!38.ZD|ޭ5ͤ ua1CD~n/7,ir^18̸LEZ`bV' PsY3áw]$)y/r*^LWIvT; EZh[n2/L&g2{ya2;əLdr&ӦMfشplrMޱicwlv͛MޱɅ/^/r|Ebȅ/\>|KRHR$E$E.IKR$śI|"WaW/ExQ+Eȕ"Krm"Q워n8!UD4g\$c.(=e$U(^4OL">.#I>PM$O;nѱRjMk-v.d%ı>BƼ@gқT ׆'6U9YdEQ+I$Mijŗ Uj|7/9mq6%())(E'[ .ylXBRJ-#Uux @ /@</adv&L&3W&:6;]&tױ96-{7/K6[/زHu*vnsLTBm ӄT4U#HulN:6`Qq^hmU}롣|Aٝwo F~,Bja.|b_oV_ؗKR')vݭfžaWf)BȦnV_& AU7m^ݬūm @6M%W@ ZN+6gRK nA3)v@fR_At4A r@; ? / [Afq\02C~Z" *~ [CMJ37gHg-H>ܒ? qEOԆ1/(q_⊐;e̋SfwN+N6O?Ny%wiew.0,"؆W߆V,"Ьf[&`{ >p&  l#6¹&php Ifcf,1t"`"`^&qɎHK&SwIh䛄m.9B#|lr|l^wiK>6coVWA[,|MN^rf⛼mB*b&4.}tݷMh\OB.mu5_1ܪm|oΗ솭n"2ݜ/oW&7%7m K # up݄A) _}tۆWO>R${ap .,S)/ࡆhˋRǷgM.ԓl#=ukT?RvP/bs˶HSr<;ykd3s7$]{tE O1뛪چvVa̒Uldb K8Pz2L6xoBORS7DPgn+TESO3<="7͟aTnU uMUDafSKHq&'64E{Va&"ʦCVvV1 O gve}a|k _k3.nTdCb6FsF&\ҥEtW0EWuSɬ#S0&9l@ހ瓊"3BQ&QS>j q4'*J]sʷ]E)nFDU;ĜvUT;H0E Twfb,c]NB(5`9T;4dpf~xHl a _ônSWt9ߠ_ABxnQl [LwMM&g2L^96ul~ڱ96-{nūJR|7II]UZ"tKr-KA`Sҁt_@VϚ"x>z UyB8%K#^E]Ԯ@$ςS L3jE ")~^L%v4DqR;'+]cUUiIRuEyJx &7NX=>\CAܢҿ>5q/afl$x9Q<[ׅ1%!5#:&%ĶVNVonkE_p25eicy)\ u@3RRǧ@$[7g:Ogr|u2Of3K*%.)$0pҝ̴"zRi*#W} e-b!<]bG fpcuNӱQh&E]T!٠NP8YsD()JKL+滎MO;6;c _t"xVI&)~:IKRJRR"t)®U)*8nIO+? U[w zX9G[.|nV_ś?/] oA r@mc; A|"hsZA ] nA v@oΤA M <D"Au #[Lh۱PxQ_kP0WI^ӌ\3ϷB,:}bYAjNu)isxI~2mq1fѲ,=NYiwY CcgۛE3!!mEH6i(~88s펰er̫S^e{黼u?*b݈MOGtye~:/4yyU}ꋟVc856߭{p~ M =M? " I " "M}'c&==7YY|7 $Oh$Gh仄FIh$Oh$GhM.&=6ثSOS]w+r]^El鈽"4~FE^y+B//[}j Y}a+ߝ/2a+a+m[cغ0LOp݄A rp߅&G#&[2=e~W)8|IOs8W=2űQmKS^d8dNfF18ewf8 >ӌ3N7zبrxM$ʪݱՀ ǖ@KQ|KE<帧YEDz!V,5d3Q,ԗ֜E{u(4𯷉QԿ[t=DdTXIIW.;%S Y]#ZE{6{7ۖm&*!)W;'0ib?su~#bt"7 Y>a|JދnMxiJ>)kMsJ YTH4[ȦG3(fR֊?g>ՠp@c 8 t'eYvr8c@$q8PQjGG^a'!9 jR\߰bӷl?o$:S<!n&@['ee. %`_d-ȘM]$Yp$x>B&6O 5~-ӇyԨjI4>EhRf@ i2GV`<¢"W}6ĩڵ2ͥ.D PWw ^`,Z9EځTޭ8ޯ6g\jRF6ua,!x;ya2;ٛ əLd&36Mc±96{cslrMޱ96m:68.KX!D~{,I %J5@qiߜW|{{8S9/9O"ZS %\"IM&ًA$*ZT=CdT#)?dyq%Ϸe¦Q5- ھދ75=^sPlr Ie3Rhe!)a+T8+LfgtZ|AyK~A؁صL=<%ѾEj~uZ2忽4$!"A)H\e_F' ?2bďU_4ܣufC-x]i~Z y%hf1> Am69x_*g]D7ju6#J73Czk}%L.!C.#^|2K҉Zh5Ow)fѼGo,24"WIoIKR#I/W+Eؗ"(Eؕ"JR6KYҎj[S~AKQ3L2.ɸM&bDMЉԈq֏BEN{CM W[S@{5$4trz+NFPjc̤ӴBE|%_2~c>6q_rsVC bWQLfg2d4LMdvccwlrMˢ;MVAܴPM6/+Q򞩺X=k~.˔͢2-79x!ڦ!]_/RJ9̷ ߙ,Dx*y%c!j\NQ+Sir@UpfW@NQtY ٯ}dZd&dv&3LMٛLαyc±96;f6>{}"؇/^/v\"ȅ/ _')vIW՗ORs՗/Eؕ"|)B]yQpL:6/ڊcv] _ZC{8tc} wA;@mΤ>b boAߙLdr~qyL& ʲ֢ ű0)Td=d4_w4˫gj <` "W ]D8V exm'N, ,B&yz̒8 Nlr8>w&SyB6cwi8miL"'|]B#/"G=-8+}H02%3X3_ 9fԳ=An8C_* !:KV7[)YKUIlox9m̖q|[L_n#+]{ЃB`zuEOU=p%M}goҤ4>Q oka )%&iO5Ab˪YiWODyHF!Rjn$xLZ}j:&j1-Į|G=B['%jIG?evuUtk}Y9{|<"۬_3Od^rlcslZ:3N Pbq׻S)4Y HtJ?(٪mFnUqݚ ӵ 8 =oŃ<35!%0Ei/i^Q;^$۴ jiEk)U8u]QXgjS@`D|3ɪfQJd/ }g293uM#y &תZߙ|nJFbGSOG *x_,>( Ie/UiG/3^L A|, 4WљF^h_j'*n󺊳 ͬFM 6ámyFc*,HrlbaP4[<%іJF\$ M ^͊ 'ZN ^#“Wp?D|L su//~erFrM?6Od^plcsl^:"|O/vVkn$ū$*En)O"JZ"˂ә|3U"x~Tpz;p$]m-md\S %j~!G" )YKb-}79o]v}Ыkya /xȯ?.;>л=Sdύ^[p"ĂL$ҵơ mJ.1 !Є9hq`їuFJ&᪴3BD"˕zgɣ>;DcEFEU?~$N7w>_;W|=*U&3vM&g25ɴ4yӱ96:69ǦMαy$A~BM ?IR./1< Cn-/mfc $Zd5 DV.*@)q?i6\%*⪯dUh KGF81Qz ҢM']%2nŜSc]GѾR4Q= /tR:6{FW?$݇ Hm.'}TĞ:J>jj~[͑EfNƗd~ƾk2=m29yecslZ9.|*|-INR=]t۫/Vmo>Ph7| _ǫ]Ļ86; 9 w@N+AAhw&+ c_ @"ܣ<=?N"nz?QӶ Xf2#}{Ze!RzZ}PqJ 2 x+ro,H6k+"iϠL^ٕ PH)xhx7/m[B~.=ezٝ2Nyݾ]&w]Yt7/ynOW_,]sƦkm`d.I?رxE@E@8" "];qz.v9}͎ȻL]rF]>69>6cSO]6{и鈽$4nez:/ovp=]}ǻnJVvVtd~&] D<]GGwO>]'?܇Vn!(x|-pV~A% dCDWoȸe&뤾3Y*A.n+U$tq]ED58;B~Bi.vҰV$VTaO&UUy4?#U:DT'g,=znyM֒Tu2(.Ny .g:l_$><hi4SDD0:vH[US٤GLW rԫ8V/I9əd^dv&7ɴi2{Wy;69&شplvα;6;M^Dl؅/\"؇/v7}EI]bx%)vI|"h3IOR˕"J-JvR})®RPYttбS|1u$TS@O&0<|9WQlWM2qM~d9B U4E֋ԪԥZL< 'fѻ|`C!( fqqmoow#+<fA,|!̀_ϞMpnr.&3<=m@'98C5Nud\4J >0o]<(^ˈt#jpx 6hI3oהs&_GJ7ʹA4x,VE<rwMrMfg2odrαiױ96m:6y&ش wYLz<ҭֈ3?^}W5Gxx,Zʢy9>htGUB\EN!}3m`CmD2J&$F7׬žL:O 1TMݗ:2osM|P꼵x>.j˕cRM4*ۜFan$۝݂䡨17MLfg2yəL&7yuޱ96yǦcslvޱ96o:6{^Elȅ/]"ȇ/r6>IKR|"蟫|)BUKvsLse߯xױyVW_>:|wq~@N+>ihw&1ۜI} "șd$- %ET@ۛhz&GG›D⊗5;r.J[BK  0s~qOmY2DY@_/P&7nwo;hd]^/!zT⪡?__:;eviqN)?ev̛r]Pwy꒿2me B+xw@C}xQ}pEuN^+@+o@m"A+,?@Y'v9ĉM'4.ScU{s|lڥWտ]r2/w +Bw +Bqw Njk5e2o[|vG0y5R~BExO> ǻ.-Ny}w{^p8Wp9C)JFS IS䯒i]зl%;DDy,g y{ʛlr_~C˼R}5yoeڊ'R[<ETY㝣]bX5'԰WB_u#Lz^u˹ }$;eY @Tǖ{;hp[?sgG_{5^Rs)UJ//DPjZ(KᢁDZåd'uTP)tUC6kQWhG|l`1\F܏7f256ɼ2y|ױifؼrcG}bL pOGTAzKC_ԍL/0Y*DȮW{gдh]7*"A9iDvJMsƥ#?ﴑ [}(˅ thԷm|GYK`V ˈTs ؇ij>MN]O7ym,Y5Vލr2ZT*D,VpIZp-ƤC(G{QȬ#p} ,b[IJu C%D^wq֑5U14+,0.v;p^Crj]]d~M.RPu؃Q(*C GUoEϱ(e<"9w1PKg/ qRkh7^ҥ//-"HR+Lыh?K'tR;( b7((%N\oQՔHY5*ÿﶴ!Gae)) ^eVnI V ن2FPFя|CT<8_YTm)vRf}QXgO||еbozw]Ӫ0򉪜E{@C(CJl/p_yH_ T;2d~E w. yBmOLtdzdv&c]cʱW/z:| _ _$Ew?~{wKz-8W_tۊ^}.|n"W_86; vqlr@s@VxwZ3)r@ΤAA r@ v@; 8tN&1d]`b6#<0Y6liY5lIFE\CDlrX([u[s UpcmH$Yw(n2y3 wgYu2?U? !n\86~a8hRػgiY:4HZ؅{;y9R˱~U"YN2?}NW nez.oGlz:bvt^,[}6`ܮ{"D8ApA,v,ec'NرxE@E@$Gh]';B#sF%Gh].9B#qB.w)ӧt.wyIh܎t}m2? ok ]}o/a+a+[ [韛/]i˻@; w r@p9v>rpsp=ez;Gw94s[*;V=hLY)XX0|1y n~:a'HUE.EsDq#tLRIp$|iu5B"c!?uI@[%Үx{ hF#R @d쯫?3Յ B?/yIc=#rnI$#9cJWg}(.$ |/rõ\ CJ{zD=I8J"brz٥BNDՒcz!yT\Ei m(&[׾#fZ}E%T^!SYf#$.]4<~tRfgcs(<1*Fܨ3˘I.1p&'Y,e%6tꎜi&[Jד-ǔh 8]A>7VXэ:')0G%-GzV=q)/I5&[C)xK|Z%2D_Hӥه\Qo\5̷RVmttZNGKDx{$YT7j4>b4Fin Λqn wa`ϻ,w5X]:ZWA$"}0&1ɼ0dL&k2id&qlZ86&شpl6Ʊ:6M&d/E6|"| _lE&|fb$)Z$)6IlE"$)IM$6I)ExQ)Eؖ"(Eؔ"dJR6K*p`=MIA8G?JS,PV>c҂SN({ fkA $uJAy8#U6@Rt /ߥ`r]wHsJC\\1r>䓹Fʁy} SJ>OMIs atJx=!1HS99=C{)9_i<Ţ]%k|iL?h* mD}O$=bRtIg ҁ(NQZIN1ɼk2id&17Mcqlul2Mֱ86o:68vƸd @LשzYN) IyS,[egȢ5v'Ȟ#--H~*睝T8j ɘd^d2&5ɴi2lMƱ:6/cqlMƱiӱűMEbȆ/Z/2Mb؄/ _dתIMUe$E]eK2/[)E诫hdZ+]ǦE[rﯾx7|6Ļ8h~ viA;@mΤ"xAǁ F&W(UrN? t2/Μ*bp}ۦrkMNI⟾ r`!*xEq"]wח R>s~X DÙعiZsE0e( <%r]cэWӈN/?М2/N)=e^2SfsdO)))̋uyqW.ٻL.]O/Y "bgyy5~hQ}pg E8iQc?, E8-D eXoqbA]&v9ț'4.Si~B㲂}Ǧwi8mشKN]^^xH"4ׂǻF^eѢZLV;_aϗiw W#ϗWpAM >~ ]Pu]tG>hn$ ?XWkM4c;f %m$fP'.W%yޗdr.MC"iYZ"NRu!X إ{ + l"KR Jg8^.dHJ"iΗ1C!c&W\7C %`\AC.wK0_/ל΋T ri8\:֒Ry)HF'rNqHuRbsްK.AmHYϬw=h\$dzj2d2&cSǦw;6ǦcrCxUYBZVƐM4*Z\ހ u3oK%?_K4bT#[p1I0YIJZBχ94}4Г&mmjBA`}7% $Z{?15)nj`)]JRΩQ]rmAP" M`%صo`'eY nW'O6}v4LrԢl4+WQ?8Iႇ::!՘0M7D P-fJE9N!=Ch3)Y\+8'ro$̶B +QKX|P8tMA~œIjn*YXB'1.&FP{(cKiT R7A kV`u&%eS6A ?@K7x|S]TkI .wou~Vu )QI)mѬs>A^.tL ݀>Y~d~j2d2&cSǦw;6Ǧc? _&|*|?MR$&I*IJzZK2-KckY%i@*Pb8kQQ,#0TRFS#hmbtд'/&^#'ߟM~QmY$h`K<Ezx?uE:0J>90Ai޻6tpƧ݋ uSPGGWT:ű+4&rU[̋VhCmjIߦz]Is{Xk/9KI M9BH#T'7O?.>OcXѡ6xK҈J6Ԃ d Sh"(I:ɨOMjЌ@&99Z@V=WKZL\!TIShMkyͧR(+g\ >HRWtPt@-N+ )Ĺ\,ܬ`)$͕ڨ\< Tϱ\x' 9OC+'~$޼GW4} V%qpƬ$)Ǘ,h8@]r9^DU[9)Mj)HiR+uL&Mfc2L^96=ulzcql^:"|E_d*I$ENR=-8oi[An+~{eŻL?_}ml űAAvZAi : ΤA;"_AAd @qu*( 1MqBN[UwnnH" D'+O>eUk2ÿU%Ԗ0׃UA'񽍒ku "kнT_a2| Ž25ɏ>$,Ec ǣ7c喎`h&.IULKN2ٜ2NyݾL.@-~;b#ogӼL˿EO/zw"D8kl~w "d E8A灠MȰ'6YlX" "?Np!4. :Be!4.S 8q͆ͻ|l2|lݧ.ӻ6{и{KhmW_ϗͰwd͗n˛@ v 2@pw>2pup==e~)vr8}oUbW‰*,,oxD6<8/?Pie.$@DQ}5< cۂm *ǹ[u?JƂMu!j'.+R:cwn{l&V&q-ؒ0Gśo{5f^׻qͱCQUȡ{צ`N:Xq:@KrIK5Կ)D|j3i5hTZ^ϡHXwya2ٚ ٘Ld&16Mfk2ǦcqlM flcqltlC CUь &DRPwJDWKA| .N TNR:?gdR$V܆_B #VD*7$ɮduSPSЄTF{Ip$YTƋаK/X^ V ^u|%rC6>.< Huz24GLA~j+R7ę8toinH4{ H5)Px9kECY(-V[.ǑSM, >86z$ՕkB:% *A|y#}V S&'JQG5i -/ @&R?9 %E Tl-1M)btm;o멣K}]|.J^Tn ` -c2ɚ ٘d&16M&k2ǦcqlM &lcqltlM&|"| _l/E&| _dm/z _&I"IIRl/$E&IMRdm&)~IRE)B![ТaS)Eؖ"lJ,EǕ{ EvT|K:pPJxg (7"U!Q$]8 "7#ퟥl.LU7'U&nիs a<> nTxC C(2FCI?Q_6A i=CG݊SΞqnvZr[M uq#i1|)/Grt>/ )(|[|'T/$\覌M ᭄Fqz)@X~g )4Үɟ(4nLd2&ӦdMfdwcӦcul6͛/A!"r`Z02h6xZW?}v'DwT" (?zWޗηYJh-P=t;:C%&8TJT*U] NCiZ'hqR٢W9xl{tՅccB2ppSy'P'ԯ\9{Ӎ=Mf)<- ԑ;T~zBӍEi@嫫\8E j`QL5SBZr.7wPQ$E+'QҰOPʜjwia2ɚL ɘd&17Mc±86[Ǧcql2ֱ86o:68 __dŋ&| _dE^עILUe$E]eK6/[)Exd^+]ǦE[rﯾh7|7@M ޝVX 6LA9~ "џ$ urKvx~>TU9U)YM"g64誷9U 8RL&ϋU±VK#ɫJ; - e/=ɋIvuk63cE޿~O?—&\X&ICi[C_᳿6Nٞ2-N)9ey]]^+P]&si.]^hE^A" -j@,ѢZ`.ɋ{p"XApZ 7A+,q7Y8.chE~z̊HNKhMyk )s|lޥWc.9wyEN~?{]B#-"Gx_d.yyEh|?o5_1/˼;le~|wG0y5R|y.d>p>uiq+P>ޅy\AC -NІ[V]8ߤ")"9'* ]]J3r"˵,FX*I0 )iΎja̽KIA|DiFO=* GG1'VcR9=3<v 5Y" Y@%v#H0$~!c<=Wמּ<Ϥ9pq5GT2mǸ2C61 AmKHAI4 ?&or F\ n'^+4*0%JN$"U"iaؐRo5Cw z~_bR$ QoB+QPɋ˙!P w?YVw?hυk3/اIѕ(_%Y@N+bɀ4@8Th2VLmJɯص/&.&$I(\V|e9_ n9r뀦eWptcJ<6]qh ՞n٘+WOd_4|EJR4I$E$*Ei)B.Eؔ",Eq'!CGXH3Aכt) kZBd*ƜH)-BBV"WծPUZu=Ĕc7oX&S.K`6ر$ $0A,p@ir_2J˳$^}드UK RfĥƉ!`ZzMt܃ N.ڠ+ h8AlҧEq(Rċ6)IHͬ'T &uͅT4\z#.b p͋;_L>[ -ImLd5d2&]&شl:6Ǧc,*־@AX59I fr%'>(x s ֦>,j^*ƻq*xgLr!^z^SL\V] lnԷ#6ZI!sOPHU tk/JʫV_^J66 $%͊!IL?cHӒáysڥ YǦw}ػMBv^wmW_ϗ̰wl͗n˻@ w 2@pv>6pup?=ez)vr8morK@ǼPzk~+R~7RzAyx^BzM,eF| YlC] \&͐R J#o] 4{nR*S0GbQ1C.87De-sb^K"o%Tjvb":j)M6E 6P*ܐ$iPz,:{qy'{Kg`UIT첾tw>&d2&5&1dM&c2mLd6M fdMƱ86[fؼd HjCKvA|iKf#T~|o3Mb9|9-B '(vcl+±Mi"{R =1!k)"2%3$Tj /!n5N47w)PC Ϲ@#N!+]bUU>VB?%gld D9)asim*%U&=* 7U̐)Gmxq=8U1ߋ4mYεEw/>i9'-~8Gݕʣr5EE7NtDlWhy#|j5#RA:19`R*$G֡K\(ަLdLfk2/Lfc2ɚLd4lMƱ:6-cqlƱyӱh؄/L"؆/67/x$)IIMb&)2I6$ŦE)B![ТaS)Eؖ"lJ,EȖ"G'rw8ފcU%%sGƌH>GNj9A[Ns k8&QBJu(32nbI0]2kw a^zБ*TI)-YJZʽZjCh3ƛ|48E>E+}cм^9 ե=4~;r!JSؘLd5ɴi2[̛٘&5cqlul6͛Mֱ86m:6[> [r<1BpԩW?]@$Ytlrr#@r)s KJ;T|0R9t5YJ2"9NxwEHOQKx? H0$ fUU>: x2ƒ0)';$8rJ$н0~ 5WUd:Sı1I[E[0jS56o~G6%l i8vȫs TTj&1)k$yX,] Ha)%'S%JRwia2ٚL ɘLd&17Mfk2cql flcqltlzqlxȄ/M"Ȇ/26Ee$ū&)2I˖"dJZU_aS_W}Ѯɴ(8W&Ż͋b_}nm?P}- ű-ě8A;@mN+ݙxs&@ D+ ?RkYNQ{;[|:N`&wN~q"bKW+u0/Ps(HEp,7GZqEHU4,Z@w9~:?@P(^HiTym+Eiݽ+65y|hNLɞ2/N)9eLiɞ2LuiqW.ۻ.]&{W,څyWxw@C|?vpVc?"X@p^!V@"M@Њ8,KM!NC,KM1+B#r8-69Oh]%4&SWS>6شK[)h]r2-~>EFZDw +B`-˴;E}|wvL/H&F/>,Ǜ@}G./Ny~?G=-8+}Xwӵ+3s?ĻQIH7;MG>Hp H]iuI) % Jyy"CrЫQi q<ZN3Qj *7A} \/m9!0T_F.1<\|rN0aN*X nMqws MIix*SHmV7E,i[b M9%USp~6U!@1p)~W|)5pn7a;v}d~lL+槎Mvl6MKnOт33Jƨ!ߐviJCzHHHuSL[Jg8 J>J-Zש} t.}l) ܀D'^9I !!.&CQϡ K:Ts/f3uArک$T0cޱBqN=O.5*(nS6By0q:?]NkOE2bMnfOUR#hm 9F4/o ybp޲Q(Il)U[} 9w?)i hϱ6pE~+>I} DKw1@G"{vV/(M:=0 ˡ6h<{M+ׅvDcJ ˜IͬjLVc*N+pZאL &"m 5&E (EkAb$U䛊VHs]uᵧgy?PSJ&%p}q3eĆ\U^rX74ɱk))Inv$Ƀld5d6&]fؼd:6ǦcC6oʑB6HJ>B#. ]wcBO~)·W4"ŏrD#Xt&2uş|Ge,r/:FZ| "Ok2ڧCCA(" >I݀boRbj1". ĉ '>\AM|fNWA45|ACqn(Vmu.}st;%I5IUT( aR|N͠zW@#:A9KS&1V&}nfؼtEȄ/BeIߝ~{EOKzw)۫/zZpһ ^}ӶVˆ/6vűAc촂 Ļ 2@u@Ihw&bhA灠 ; ,Ӭ9os?SGCX>:?7J $*9ul,\$$)H`,OgPOb@OZrTR/qaH'׎2e<x>X `v\(S7@KJk;h$B Ū[r~={zS&sʼ:]Pw.2̫ oGl~w,~yi﮾Yvﮱ Dpxdџ6YdX" "?Nea. <=fIHN2FˆȻL]2FM>6>6cSwocӻ|]BvwG}&q;/>os ]}񻫯>_V6V_7_&ӻMޟ/oAd A}d>څ}}ݧ>~ws8/yL/Q Lx^ǿ1 %eˈx4$5`u#O٦ZK顢JL*j8Z4u8ktS j%+ɹq]J jr)7OL.X"dR||msZ[x%7r7 9bQ>.EI~:reVdL&k2-Lfc2ٚd4pƱ86Ycql2Mֱ86m:6ؿ Kwȩ $M> D &!,W8-CF@=fe/%(@+땛d=u%E CfBU>ѺGw$5#${~'=w&j9״ȩT𠙔\n;36>Mq:,N gwq.&*^䞋c|}:q!lkʠ TW/7v%O?:mt>KV:,ڽż)j1xjyd֧bR@%dDص6ժB4nKSNvvgĖF.TZY`<4jW#6`!&gu&Gu\_Qu9ATH 1;ݥޤk%mWY"}\v'{+ r@m`E827!=%} +n>vԂoȒ (#,{س:0_*0.,\p?[̈́Y8YIs;mv8oF)Uo^28DקHih~J_ؿkMɚLd4K]~Ylccu;tONkP 2dI#BjY@%8$eb9Hف(&n!,iyՃU(ef:N)rE֨8#QPUHBvӨ5|*Scvc9GP\>'{*tѵs\7'5O5-٘Ld&d6&1dLMٚ4Ʊ:6-cqlƱyӱ0؄/L"؆/670$)ZU_6IIRU_aSRwME2/ulZ+wڝ -pOV[ne ޝIY 7gRAAl @6 n|ǰ!»y#7&psZƆ\4 寜~%%J R|ReWT`̒:rilE{Hk -Z2K1N|"ɜ2S)9e6Lɜ2m2S^.quiqW.ۻ.]PwBkE^A" -j@,Z"XApҢ^!wΗ˛ eXmqbnEnE1 B#r8-69Oh]6M 4~a#>6شK[)h]r2/GؿٺKhE^Zxȋ"4ݷ/j e,J~|wG0y5R#_} ,0p>uyq+P>څi\AH :цEw#)j~ Bc"NiKBr\?ۈqkIM ?s:_$9mFTr®tӪRf`}gdpfHs&U+v)Ek*:*9_NYMuE܌VK#5{MOYP 2e$'ԑΡi2T>f9J^IQz$赶cbECK+)gڭJ]R#H}9J\֐srJjR Ux>>ed~j2d2&cSw;6Ǧc#`Jp\j5{/P͢SF&{(Z@n lUTG@84&v*i6Zs3/ZOI-W(8^kң!Z|`:/q%%e~[䜕)9*NL/]B-H6LYS!Hn߰U)T &SlpRrbVa_<@Urʵ7,y)_Iy_@g(-+~N(_\*Tn,w5 K:ZU=jҥۗϤCP5IwHp0M:U4r5p.}S@MM)"3SKSJ1SZ).%S JAZ DWѡxBF)]z6pSJJJC9TB5uX*$~Jl`Y%q*?AeRn&ܼThdzj2d2&cSw;6Ǧc/? _E&|2|-=MR$&I/KzZK6Je-~ts!dS7Hd`Ikl4%!]RҰ@~bg a;\nj̐Y=m%|D%UYq\+C[|5lqjpd1)'~Co ӄZD1 йg U-˥9%hJ?KRr+JUէ©>Y^>nB?JFAXO_ľxPp:*r%ϤB=D_S{#C2W'!&D #wUW.c:Ra_FZ x` )k_̋AQ"˽t9Z2V)"W3%]s#r܌ZG Dx6]J8GDm7mv\cqnn e)d~dL+cӻcʱWዟ/zw"xI&)~w?-Eݥoi.8{EO ~w[۫/؄/ _dk&. 2@N+AAv&ݙ : "v G?/ ^[8?rrendHfd\dVr`Zƒr[C"$;fzN?V(rzJITϚ>QX6DK҈úZ{vڟr=GJ\d\ݓs/Nj)-_u`ѩ11==e~)9e^&}w]% oGl~w,zyiE﮾Yvﮱ!M D' 8"`"]q. vYdX1N2Fp!4_GhL]2Fe!4'4iM2;ez]c#6;b6 yޝ}c]}Ͱ2?5m|yb.D#.㧧L>S'ù }a#1oUH x .F{RjYՄj˭ұ1^e4Qpe !٧ K)z㪐hFFJXK|N(IrS&zr1tY{7QK(:J֎n`[WM Ƒ:.I)_ 2&s'Vw)bu**|,+x7XҺF_sH\+9/iTI)ێgUkGwט ɘd^Ld2&5ɴi2lMƱ:6/cqlMƱiӱű'*Whǎǫvha/K*([WTxZӼ4& '{31 T8]6#H i ɜ9q ^-}6S,׻dTq,*?+]D΃sN7Ɩ.^_)GZNY$4{ NsMMqEt:ts@ zM+":\NMM&=I2cUdJ#~ T7GR(JXbS>KpAJj-B;?Jjǖo?Yrש+FL/~vi,zk𼮊 AE#}E{*`+х!I(nht]oPXǪIv|9C<_*ڐo+$Yc}l[m_Vs1|{m}Ƙ "WX$~hD7iYP(4̋S&sdOɜ2S&sʴydOyesy%s)/.tdC6tدf",*/'yyk dCnU}v%D!msUc?F8@=N6@]8A,6,,%=cYlXdlr8FzHhp!4Ҋù]!qˆH+͆M+>.mu|m_h%ɫL-BEy_ۄU~Lh\!oи/1rcU:.p=l%3lus/H}eH}Z}ApWp.!ܷ N݄p?G.GiI* K\u7(imCs˶TRQ'RZTI-hm#^!':e@+M&Mfc2/M^86=ulzcqlc˿&WtSKe%y=|m>Z3\})ߟ%ɔzj6rmFp4=;)KuIo4S 쐹8`r//&._mf)@}ͣ鍊9o6ހ$54rZSCqՇ>kJs۽ծyYD@ЁYOR4nթ !Il&%\!~|VGIxIA'uth'->? dއ,1/ɔ/D{+7avj7TIZRJr씠!os0'C38HsZyXNDA9Gc.Ş+ !s͘hF-``YpVvrBS 8IJP1^)4FnܦNVUX"}MM%fNR@>m44䣜JQ'PUi-,P%tx谡zK_3L6ɼ2yԱݎMƱKEO;| _ _$O;IIRLRR"RL)BRD`2(]Pަ@[rhr J-XkD̳rr,ݢDZ| C iaePJJlA OEI~ bע=SLu]nΣO7LEFHNW_ x\U%Csljrw_W-!#/IkݭT;⩥ʵ-:va>̧̇ӍZx`I๛d5ɼi2YɘL&5cw^k-fl7c&INe6vT_,O@G֏ \~)O s_86?m'O;Kp wP;7^r7tX*Q "P븸@%F jwA'HAZ-uT7,*wNa0%NM ]ݷ`I ]䛥!EXN 8f4:5s%},֐}]H*Rjn5~dzj2d6&cSw;6Ǧc/? _E&|2|-=MR$&I2I-J~ZлK6-KEIO N~w2\!O zw[r׶„/zZ}mbx3|v!b&M"S Ad 2@mN+Al z C -͙[ O ~Ad 6@ _ \ǬYI,Ew.U]&ɐ?*'@Ȩ*u1]5NGϽg%ƹUw '`WV;Z 5 :K ?XZOr.yuc9ysKA'\Qr+,7ŸI^AA~yݧLyuʫLO2.@ݗ4b# ؋LO2;/4yyp>j G?}^c]cΗ O ~Apذ)q'زذxE/ "~H!" "MYB#=%4CB#[B#B#or8)y/F|l~&&ǦM>6[>)OyE[}9]w}W䗻4bӻ#yezw^^?˿iE﮾Vc [|Η[ [ys/օd~ɫp=Al 2p?!G#&[2==e~)@ݗS^q8)\AN( vGcErNuRhס%3XY~JS8Yi9S /Ư_LRE;bx^Q΁u&L?䦡4Џ. azL)^v1͘W3| Ӎ .G!_ uSYa({{y$}oyR/{"xU-I3j-EsuOuz ٣Kn~+Z}A OاT@l@xn=s.}IS-E(2]v:s&f2CQ"(KnɘL+WMOd-͡DЋF/IMi% EDxZUs~$S8̫(SWHvϷRn|]>zx;#f]d5 kR eSB5\eBlc$%# ^m?]}D8C|4[L6v>#vK9 #فuw.8+YZb>?x] ed.(Ylo%/n.tRREZC@ Lp.q1ʪtB3|ɩH@%gt פ.x6a D9$m#:gZsZ>Cu8h#cԆaOw+hx]\!39c.g:сҼA9KIs$Gg̣d&Xx8bn QZ`v@VRquVgjVŗI'!mzjNB))DPoCñ"ؿf2?5m2yi±ccʱWዞ/~w"hVI&)~wbh=-EݥR$yXEKt?/+'Ee R*I]%ݶíN!*$H\oS((Xcȟ.Ǽ3ǽ_^pO|%pp֠_][)qC)7lK#~'cTΎiGO&t`*R.#bgrջn'Tk5T6Ө|o 8|@(]P nR4g)"n fCJ;V k&Rk*$>֔SP胱_?ŇhzO8d6&ӮlLMɚLd4lccMRֱ86o:68IRd;)*NHH~zkO$]|}(`E$6pt"Ay,ŵ]k1Ӱf5wi%NS/1-H,,?:L5GV2assǮYKHPqpnD~yݧiyʋO2.@ݗ4bӻ# +i^wՀ5///~Z}ѻpOkl~wB8_klS Al 6@o"l 2,~J ,2,deaSz ?ǐea&^1HO ȖȆțN~pB#?%4CB#YB#B#m2u)y͖:e~zS^V_Oyq]w9./"6?"4DU^yߝWFꋞV_k5{̰Η|찕̰62l]LOMwp=Al Ad>~ C,GM,ܷ:ezzS^pS'ù_9_X/V|tDC/0ł*LSqh'NpW]` ت l^c=|Sv>Hj]kD q8+w]qT̵r E}=}eὭ G/ +d OXs˄\=eCϪZCm m>{OX&J, _ >Y:˷- j }R/PUF5u)ܔ7D}5K4Rvľ>L ٘LdZLd6&5ɼi2Y86/cul^86&dcӦcuCFzҧTJM_D3]JHRJ'I:!(-܇4kXʗb? 4K/ qI )\V,]FgiVX,M0~qJ?_+j x_4I'폥,5:"Ah^FGVDʍ.NM I&~\OWi,j㑒\ I]^54&R5LuAZfhLP.8Z,S^79̍FMm|rЈhCIo,m\UYMwru(T7O@z bu/]!RWn%geT NTbǞcb.I+R+0^&`6J.$ t5ٺI4Q,Dw_SPL7]!-Y6:^>G/L&c2Ld~j2iecqlul2MOc[27,^Rz/}kAWPB#rDlR=U4>2ÐѬ(+͹~[m%,c9@}TI4$^& Gxʝ&C>ߪ2PNBzyX<:FM1HIU'D}K rJdIBvnr9)W(b~ҩ}rX ZȐ-66Fd4}rJ*ԊYI06R0m #[IL 0 fd^Ld&d6&1dLMɚƱilc±86fl7_ۄ/Z/6lE"؄/ME/$)~Z}l"h3IMRlJzZ}m)¦R^JM=M^/&:׶cڊ{+|-/zX}m/6ዿvp%m D+{wZ!=`jZ;ZAڞIx5bS Al 6@ b /6to/h̋Tz_ u]C,r@l0e`M*"mËA~agύW@]d9D9zkWB$I㊠( "ص1Jxk^"iqlN)ɜ2Sf{lN7O_Ny%sies)/.tdC6t/f",*/ hvpK=dlVn\B"F8W5cs C hdd,8"`""Xc!=fE@E@+.sIh䇄m'B#/9L%ldlشcV|l~ަNIN^!{/]By_ۄU~Lh\!oи˯1rLcU2.p=l%3lus/H}eH}Z}ApVp.!ܷ N݅p=_o"oA2F} POkoo-IN:[{ݡmV4T0f*8Sr3^Eo%jk&Ah}B D A4@T"EF\yT<Jo?r 0&1ɴ0lLfk2yd&ql^86fؼpl6Ʊ:6ǦMǮD'h KFHt%d( _|z_|aH!-vWt"2]"Abv "1CQTȜ@P JHsDtsz]h"D◭IITbr:F:C,5G/^&!ji[q843ȭ$|$6 j\=/ѱ[=bx {p4|!+i8Y iϕ<.`I!m]iVWhRU|],"UTEi!a'%{*P~Z'@ j -|c6Q )Kc{nSP{?%|D)ϔ+cu?Tlhy& JWN7 3g馱|,mRW}iRPKePW6 `bI)L{7`9QWŔ8!S1Ǔnj< T+SE׏Hb/I^:/ݚQ欫bR`2/L&c2[ya2٘Ld2&ӦlMfشpl6Mֱilcul6͛/m-E6|"| _l&|fe/$6I"IIRd$E&Ifbؔ"(Eؔ"dKZ"lJ6RM)›R1V G*A~/s CM!:GѧRv:i̩mmCRJ[>)=K*?jRCТU(`!9<H^֨8%+Y*#|ڮH(urHһC4Y]u;93d5Gs|!tƹIT315c-;sơ5=p.Uc,dۂ y)v复 .JiM_*> rH,#@3pY.1灼dL]ɘOMfc2-Mtl6ͻMƱcql^96ƿ(,jBv@TOC+E(Prm6Idee&z:Tݗ^Ѡzf81S/ħ ɻ>K0K:'2In vV 7°09_ $BF#ZHC"ؿdTH͙\4fA'KYJ'8Q)`x|*<+'MKPk*ab^V(-KL K|Cˠ!ti'JB.V ٕ X엥pRߊcsO*Р[J&d2&5&1dM&c2md6 flƱ86Yfؼ&|"| _d-E&| _lo/~ _&IV_d$EI_)Ei/R6KȮV_& W7{Y}k۱WmŋceE&|!cxcN+@=d ZN+6gRK A3)2@fRd z C ,D"A 8]'N-A>OȴKidyya/XM\bI3iv'K=c)Pu 9û儿λK,G9~_d}MCA p |lȽz8@-)ɜ2S)9e6Lɜ2m2Sueuez + /YE ݯ"64K?dlhVyu@9[!`{ ^p"6¹#K A' V.`IĉmnC1,2,^v9KB#?$4ns8+H L]6F^2u|l6|lZwiK>6?coVWB[%'/MN^Wr&q⇼mB*b?&4.}ݷMh\Bn9_1ܪz[e~8_rغ9R_Η|y{2!ܷ x>2p]Pw Co]+ />~mC+ ttITgcFJ-3ʹP,s5jG( @U?wlG-&Kڵ׫r]zS/\ 䏱 *XU:V zex],5c'#\ѧR&D&y^ [SO@LjNS-!'3V rk`]7E% (B>dK )'tuEvȊLv$A-@k9{Ղɴ0dMdLfc2[̛٘&5c±86[cql2Mֱ86m:6[;z}oZ"UwZΒbJ uiFK[-I [P7. 7`8ї *,!ߚ.Ixl]D+V3 #K/5=?MEj~Ӫצ~;eTMA%bnjw"9N9íE+ )_()˷)d's:Gb^zT7Rz󫮒%>qlnSx(W8ei3bhpSI-.W}s`n]MҐR)sV*99'I\)C͜8!mİ!.%1_n``16Jɟ7, s: Qf#Zܔ@g C=pؐ#g=vp_:&g2id6&SɘK7cӮcql~dW}/'Fl3|S&&lT5~h[5 smj]ۊ(&IO*CoD;4SҤ֒*)K09i}-݄{/ؕ#>(YdJrYʥq?ggBCh:/MQ9,EWUA'BD6%_ܔEtZ᱒n1SΝ )8oux!75f@ԔtsmU)~ObicB^_bkƪ,mJꍌ-d7d9ɪd^Ld&d6&1dLMٚƱilc±86fl7c __dŋ&| _dEmbiE/IM$E/Iʔ"RL)›RdemWɛaثűwײvbh6q%Dm _±7K A 2@eZ3ZAڞIx92@?!D"Ad @sgxF_o(&[jLa-QK..io:^דrkEl<_wW?c\*]"o_$A-_[!;T~ۛDŽe$%bo-őS&slOٜ2S&sʴylOy%sy%s)˯&tdC6tدf",*/:-YE=[U_cMs C`\؏%m DKsE$NC6 ~7`Im}E\!qɆK&SwIhm.B#-y>6>6ػ%iSEN^!{˟7K?}mW1qmB*/Fh-p=[U_ᶆ2?/o[ [y9l/p=R_:Rp? 2@>Gܷ .>zmS~u7%m~|Pc%Yci ̾ac 47G/YH8C7գqp~MmGbuvA%֪# ġs@ݥp^']\+ sn G6{d딻!;r$R~tH{ALDu6XZ?14ù_*W|mCUY$Icn|wMRrcT?njSRÄ բTp])N*ɑrq/@*r`9&qp/}BvUH&QyrSޕu|#pd5kK5nH5!SU F0/zХF #ZA343άWk 3q݆Ŧ $L^Ls*$LNDwIO ~h"j8xgAc$ʯUW@g /9X ZM?`2/L&c2[ya2ɘLd2&ӦdMfشpl6Mֱidcul6ֱ͛Ʉ/^/2mEb؄/L6|IRHRd$E$&IIRl$śIm"S!S-ExQ)EȔ"dK2m"Y)iJ^<^Xk:nUJt2{ FE "Yb.ut7 Nԓ!we3'H#{CM'}:.M! V̂3?&:?:i SD#ko{) &nH;fReD4AZh-j.9,E$JAҿ)みTO:0C)I|!)j? rA;+TL\<]&B oЛ'@PQg*ԡ^#}I-鸡s}Kp_|T̂sd2&ӮlL&1`cqlul6MOcʱ~M!@tvw !uR 2ͼ4e@lpT eTHeitr(/!a̖Sx)|&߫jG'P(iʛZ}/bEҒA%>_Y} 1+խ5=*IznIk J6󒹺(Bۿ0I)nŚF'9QTJ`EaZ'C 0jJHR8/Ss@#nr^;%4ـfk dCnU}'¹!Dpj@6/ [,%q'YdXYKz =lذh"p. иdCh%s$4CB6S L< V|]꒏۴)V7K>6=coWwIh\!kи؏ Kv=dmWy3Bn9_1ܪzm[ez8_W;#|ΗG+_G@p6%}vA%mPwu/.t!ܷ ݯ8}.66Q|?}{ 0 ;c[rN여f 7ZgQSE}:vIe/cOxFQ Uu  P| ')`CR"'mhzֵG$FL*f +T=MC;MCqWq$EZcPb\q-iA4`:V xq9=}CVz\Pq9IyTx{8oyK_CtͅCţE|<&F[RUdzj2d2&cSw;6ǦcO2f z( }JqJ-|7Nғx(C?"+ ]Uns_`+\:=JE_>/7Lil|S)L'` H֖S!ׂwsa0pOjfF E4%ς,R xDsR$W7Qa@qWC |MecK#!0Iuw,fSRK#mVHLdt-e|3Ex SP>Q=Ol7gѐ/eܭ7{uO6i\ Mrd<`ѣ#\TIU.^qjW%2Ko~*'Skn846Qa8—&mHO'@cd~j2d6&cSw;6c/? _E&|2|-=MR$&I/K~ZлK2}eIO N~w2m?m+mʱ?k+>/zZ}mbx3| _d ~ C ,DM,@=Al ޜV˴A@[ ě3)d&@?Ad 2@ D:j][~rSwUd(=^|,VheIk`ͤ^:zuE4+/mƠ:K{nlSSyKP B/ 3V\=7η{uEeb@D֢I 9t S*1\[t9˽6d؇ܜzx kJ1Hla}ݧLiyʋLO2.@׻4bӻ# O_e~yy5y˫ꋞV_k5{56?5 | O ~Ap'@=%NC[m=Cz [oز)iɖHO HHHL]~a>6=cC>6[>6>6oWLOO}+*B[]w}WdˈMO#6;b{i^w%//~Z}ѻb3lez8_f;le3la+ [&S&F/&)>@ 6 @}c x# N2W)/8p'oXg5˩29O)^zKKaUyc TDžx?4:|Y/Mǿ ֎-I+oU~B:BRB{UW2Cс5Kg21Roj9xݐT_ ^ؚY9E?7f律ʶQ{0)ܹ$Ē4*RNNw+hA=29(pUv˱:,gW裆/ƭ+ p' o~i2=5m2yeʱcӻcұdoz_`1o)`W M]POUZ#H%A[UQo. X?@O]Rޡ$2s$0ǿU ϼ6Pisq8ܥ߮vkwQ>RKx],.s1{\,~ЦfCrhKnI4FEG8UH5piI8Hkf9 ;LMSҗPAHw-'AkW!#i%Q9k H Tp& QO! Nΐ2!tS++X ѕX%-ۦ!i!=*m]nJN P[!@, iV|+QqN{J:(I2y9:>LZU5GszwS)K*꤭bCW ɈNCqrI8S99:k lzp~$\v>/OMwLdZplzn&شrUȄ/^EIߝ$)Be)OKzw)¦e)rS mKD/J@ $M Inq N>>0)i%!Odx|{ ڞ*ow- 4H`A1TWN t#:xFrc?"`2ߵF1H TAr'KD ' ɇ!ݧwI$dy%'ڲB]`\|*9$]>8BUP!PypRp%._A/&䃦sII V[>Qbar$N7'G$nc&1vMfc2oLd2&ӦdMfdwccul6͛MֱO}l:l# _HIw[ sm='UXsc2)gŽJI<ok.H(Us C~(u21KJ5|s-L%[ު;aK0CrW8hvꩋNBJ9iɒ:5@fRD{7"\Q_wict$6L6ɴ2yԱݎMƱiثEO;| _ _$EO;IIRLRR"RL)BRdQpӂ]pL~-8m?m+mʱ_ iE/M/՗) @ 6ql@ Ab xsZ"S Ad 2@mΤAl z C -bAI* (G'1RN;xZaE7V b14YqE(Ljqݧ ˻O2.@׻4b# ؋O2;/4_V_wW_1kiMﮱW'|)D @ 7NzA8 '!q, 6YdYlXC1lYlX"z!4SB#?$4%4!4&^8HO ȖȆțL]F2|l~|l|l2|lccN2WS^e~zwyENOؿ4b#Wye~w^^_Z1}OpLvJfJV~.L&ӻM^_LfS}l 6@oAd 2p?!G#&[2?=e~)@NN~ws8W+sГ6}@2KPӎ'R#G47OvŒ)i^S:[ϛt3H]R>6R'_G}?%,znZyɺkN9M Ꮋv OX*E( Z;#Vj"HFh#n*9M¢z)Z ڔ8d -`g|!T_XKMS J.NP%͝i@> ɘd^d2&5ɴi2Y86-culZ86flccu]>%kUGF)!?rHP=Gue2={9 RNC{(4yzjC/yY?k'*D0T\~I"j}(UH+ !t걍x.A<״+)E" MiS G)uJ>y4w9MfcdfM)/L@(`M*W(MNB;,L3K9\1љta ;ŵuZ!@ F~ ՔFW;ѥKSj t:,8d/5"CqD# bn ԡmGi3ÙTVO&6$$uiosB$@O+ʯIC$W&DbAKSf]"<ۦ'5y^uJT.8J*Jh_wQV j f78, -uCd^Ld&d6&1dLMU^6Ʊ:6/cqlMƱiӱűۆ/6mE"؄/M6|"MRl$ŋ$E&IIRd$EImZU_aS-EhQ)Eؔ"lK6o"RGwUog,>) |4L3Fs{a-tTG(nxC U-UsF&)&xM"CQzbY~Ur N9tS$҄k/*#jW9rBo9ssC~&]09#Err% *,'€Uw?!O؋u)'nUwU2,YKM0rdsz >hu8Dw1cْ\ǩcNxO'䤺y>n\0,9dߗv _Lfc2d4dLMɚƱ86:6ǦMfl7c/r\9cqRL ={]lKU\W 䣺 eTSnPZkM39TSc ߵ@(h?X(?$+$f IRd3#e2(_Xb&%/D`b|ɿ.XR¥!$P)k H1yi^ b= )lkMfk2`NkבUR<2VLF*s؀`d0i\Ԑf>ި .̴*Y i` UlLfk2-L&c2ٚd4S6MƱ:6/cqlMƱiӱ:*b&| __d6| _ȆUĶIMUe$]eK6/[)E诫xd^+]ǦE[rﯾx7|G_C8 tc?Ļӊ~sZ@Τ,ě3Al ZAl 2@y Ș:VIKr ^2G1|d~?wQI{x-{hQ+{-WK]Rܵ5, - x<_'i \pcDO _sE$Ѓ]ȡu/&֦3$@"n%iN)=eZ2S&slO)))/vA]^K.˴y.A=/" ~hhWgj X+PwEB8DK vo@Ђ8,KM+z ,=6YǬ p~?w/&SWS>6ؼK[)h]r2-|l%4"b}}KhE^^[Miw Gk52[_&/H&F`BEv &p??.KS^.t  pzK"rJMK-&9ɱU2%I$TƆ@k#;@zD J90zc{̱La[NS N$Ũ *ޒCKI>4TVcuu'L>i:'I ({\zF& RA!S[3;֛@D_II?NP] y>z7J !S%Ʊr9EJ2K@oįm%]+jt!wujqL>͠P yP>)0wKϥh HHw}aܒ7$VAg^ n6UI$]Vɘd^d2&5ɴi2YWy:6&شpl2Ʊ:6Mf_6|"| _dE&|fb?$)2IlEb$)IM$6I/[)Eؖ"(EȔ"dJR6KHf9$P=랪|3h/K_SII]Eա'6gW%{tUcX?*pÖϼܡ{77?\rnRRK BH_KE. {JE>9NīՖs'?KUa:qULrYZC92م0PE+UI)~ ,9 &R U0렉SCzQx/µHeOV>̇dzK01]2lg'ǩ)y6k*!♾ Ut_QEk `d&17MOLdvcӦcul6͛͟82Z钓f,o Nh)|CTժ:u\-frbTP; ؒQ~SRO70yNPl LҪS]vhJܹRntA)U #/$i+9%If?ϑܤv*1;)ag-%Z:zI:HȥJN'|%iN)=eZ2S&slO)))/vA]^K.˴y%#hE^A" /j@,ѢZ"X'-j ܷp}V,QM!N{,B&cVĉ= qbFe꾌7'4~aK3>6شK[)hǦ]r2/W+B}v +Baz;E}|v/aϗiwN W#?0_^"@ * }?O>} W} ù܇RC"z *MP=^4@k,GM:B˽:MN@,E!ZnJɯ/^Pn dBR:_I*B*ؔpkj !weS`6Hb(!3Ou)4Ut(u}K"WX .깙 S suC:X{"EՆZz4Ql2hU8.@jS<@~cǛBXZKKP+I1W{J{('L&ӻMfc2L^96=ulzcql^:1@+ezehvR2^_gi݇'%PO^q虧c?.&b09Đ%'EjM=/H'di{9)ٱ=O Hu(+ vT:$N.)2bݵKIR+R}$%#'DO %1~^:-O<4e|0@G)HrOK~Hw|0mʪ"cI6JhR$1vCE08?զň@@0z7T g:66b{*ʺI5(H֩11|I5/k|,.^o!)M@W)x΅ t䷑X'0J#ݼ˾yhTIv$X/ُ?C95/R$7RиS@L@bl;TYgIm1I )w_脪jDU7]HS_~b #UK\M\LOMwLdZrlzn&شtEȄ/^EIߝ$)^&E)OKzw)Be)*8!B+j,~N2&hO i}֥7M> PZ-8{NRwOakP4ԺLdU>[=ڌTeSƎ|cnMKw\t<$G֝y*_(@%vT`^{g\b?s x `fERr1ç^ l˿wÆx?[\cΕ WZ9?^tVYe멊/CT{d2&dL&1W&:6]&Ա86-{I,?tb7*ğ$)gD1YؒXRsE{V&H4>o'i>eۜ,]J^ߚ@%%k65M:}pN,@$zӾo NAO xh )$J=8) X)KU@W5}Q./&%^壦^թ[# 86ɼ2y =ul~cql^:~LeZuRO;Iꋟ"RW_wm *b/2|chf_i : 1@ΤAA/ؗh`_?>;l ؀Z Ios gl(,,FRBփ,&HJЏ|S?;R'>C#W$NWޫ<3W$墵b=\#܋Gq).1|.?=ez)9e)ow}e~|Flzw,~yiE﮾Yvﮱ!M D' 8"`"]q. vYdX1N6Fp!4_Gh56B#2u;[|l6|lcc_ǦL>Ǧw}ػMMBv^wmvnwW_} [ywJfJ|L6y hb_x#_Swo)܅_w~N1՝(RK3Jy)HdIy\]~pguHl#G2Ԧ˕};?X{q`}dyty/(u_5aGYʐ`qS%p}J#H=~ߏH!8 Y@x WsgG@q~cxZD8wxg +!x@y)HP!"@q)%G!#*ދCXޮg,o_Zw]ST[pCJq SCܡǩ*Y7Z^; e?`BVx j1#z8E(Q2&v:)GrhC:AcU&H"Egh0Cf1eQrvf &_0JU¤>.gw1kٸuwlN7BZ\>KKgM0cN~ؑKI "Y2 MLs?@*A76H)r7 aJ0~bЊZXn%gǬ7Q5/K%b8h9aDC560T ҫRIg.?`a]H:=Cj4Z}I An@Ok V9Z.@K^1f-v _oR[H\?LgUTs,~ۼ\p/u[qvU6WCVc[`mA1%5q4pH}.!`}t }F@xփ)!OR-J˩N](qڬPd%p+_: "!+$-I}Hrҥ OםچⰍ%MdKD`"C0)v)[OCЇ\1k<]_ ):׎NNt9'Vwd5INV rrzHgv!ohj_ưSe4PM7IIaeql)Y%uϫ)^UAK@mI&I!&dF@@tq0w~cFszTռ*L"@ѐ:{!{OS caum)!W9I78.)@AmAktD2xR[:gnR̔4g$5JtWW}E2yhI"-ݜelpFj"y⦺JWאsKr#g1"BY*(U$?c їJi#DtO5D (z(l b!}"8߀?S;e<@G n=:DK?!ObetDv-i@+xP@0*Q^fzIn99q*rtO/0, ψ|5˽gDR<0t[$PrJ+Y師̠gŜC$!4)2j &)&ǡ8|υ3 T\aDKk@j+pzR`8J$9})(%u0BJ8й%Hq,*s'i& >YkvSaD6!:|{{W9Z9 5/7 5)WXfmNa;& 8ij\1M%ZJE"ްH@i:P$I+D鐧-^ʿT&vq;1}vG|p屆m{?sXIa!%^ U.Q) N?k/ IUϚ"$:ʙ8 Fs UZMO H:U7SCy7FdlǩerٯZH'-E@ͅ~[ˢbɍCîƱ"&s/xv;F"uOl >3i+7wE1]X]nM|/$K>DZ_NJ+u$9D"r{ Z%o-K\tEq ZA!rHcqjRnj|yqn#ua"~D޽$tJK0̡_'C_BCV15tb()`yw`́Q7aw=e`κ/AP}C sk.Pa5I@>3x73V IB9ϛr>73O74R>fcVz/[%~s:rFKdP5zލ)pwHʪ-8M5%֞! Љ, VY³%?<//z(SRM mn Ώ~. ~ـQmPMrS{ZrhNU^ $_xb1,V odMKpEk@ju͎=jF7u%#EҰ'EN6vƖ?F4RAo.HX+kxwvn:'>XWK @WNZ< !b^IKk>%%3Iu%!m; 㣎Cv?O5Rtn^:O2wT9|*ZǬT!4E?ȿgZͤ4&^ CzZ6oiZ=h>Ic;'mrs9ǹu&5˫AP@Mkl"q29_*[>9>4Xb:Pm;K9g,Q{+ b41b+nxeЁZ)QR:F&F#j\&]sn{?KK>(~1Cy$w=X$c842[.DMy}D ԪPC7q2; _o؞tV[NT]k%pH@q_#4"Mg{SCi0S0 i2Nj+ԏT01cf+&4N f>Y:VciZl#Sv_-g4`eWJxaWU6 p5>H:U4rXOn0^[5w7A$֫YO(S-Fҍ=4kI1{ lL[~Yp6?swDۛ#I>Ҷ0ڼ/^i40T} 4%0RL"QՓ~?.<mգbQ6R]Gg|Ђv e#3POxOsM+8I~@=>'sCY ` 2`!>֓~C2|e%}H(F\42:Ճd^nI0j|>!{݈ ڝm˸Z\h@!?ΗIOŖچ1wUj]Ȝ45r&}x2Vf[|XW)_תaTd,&.qn" g8v$0sdn`tSܸ>)«0#6]9)M8 5?KiI8Rpn]Q_(qӪۙ/*+eW>엾iDlAh*5D~Sj7D(" ؘa/9uCu6CS09>W~AsCkB~~J3H(4 vbѿ%4pŊׅ1}eA* 7@N-$yJ"vF%UjY2#L|>ń%1H>/L;8Gq 6@eXW¾7L 5ȥ`T"(+|ZM"V7U8@^%_P!)pi o\b $?'MPY䙧},UTcrLEx4x}UatqиW)"gx,< ; \1ݖ6I}los<,@=&͞{>ĎPG#|Ic]憟0!!^rXQI8d?XXbb^oA87\QK8IYxAoNNZ':x;B|;c1gFY?2/2j=$מ~B8IXq7O7^yx{qY0UfrL#vM[V.9`Id4Vôw#9χCkՑ/ڇrq>QCx!{/|dkP~w' (Qz >T+P˒3qi"@\Ԛ/ux';^&6}[y`$|qqaQr^/(WF3B2-_ V/7Gb81Q5-82Oo(ᰧG-P]N~+!L`DUaq|16 hh1G_cSFD+FSinLoQ狚_ߠ6R^<L>D8klH#ԓ2a@='_!A.A'4."oiIP &eW]q#|̋2|t>'x P rE 6' $(6$(Z& 7moaQ̺cmQ%QM.%wd }̂Q&Cq'! YC 7 rZ힤/<> 2uU2,Mܧ8Ew6R} MtKFJs_'x_}}}ъņņņEE/6d2z'r5k |d'iZW0ԇ(Lj3L(R!tۗPBJ C<_!Lhsy>̣r> %a48X?DptЀK.<mcO!b׃zphB;0 <Ҥ2i XcZ=}xypQ0" V>EoT7~JuT7~7Ս ՍWT7hHCǽRXgs klK|7*nav(hNZjSr2a Udzsj&Yts`]4;<0`K'7Փ.t)4<tGw <+^bAk"qz/z-Zho Znh$/}O}nvv}KB#“@]RRߤ(= \[, 0HGymgZ?5x סQ$~ʥW1zu0:շ28>N[pbzя5 7mTvIqn_c8L! T) NN6NZp8p8r8p8p8iɆy(AaSeZx&P$7 L?u|:]`onL(0) X'|;\_Wp'W#n*Py~PTI?'tSCCM9TsI7 ?VКÉ7 J%|)[W0)CjOZ ku<mUU2U~J[U~;m mUX I}+`u xP   mL3M"" C9 ?S){1"P s+.=dS.=eһddLʪIM>:grTʚ E'MU3(XS8\<%~rw~B:{ygYK&f*sOE>>/By[G)On>6=cӻlؼcJ5c&/]=ʙ0/Is2ī?7*p dC?LB|9dj҃ JeWfO"_&f cai}9|L=IߴÊ0o|jQe LӪ䌒RápXTtzJA?MAtz7 W%oMߞEE~^\F<[>1hhi4M5?3U&6acVk_cډX؊}"WhճrI2{0>P^(q׫:ݬ{2{^ɰɰyź'ú'ú'úgú]=[=v Dwc]A+RcZ8Vi2)MGwuK;@yMmS ak6ߜf9mڵn"ug+vhM N2^ew+-tLy*B3',*# m5,<>++ЀW <4 ЀV <4 ЀC2 hЀCZ<4 ЀC^<4 ЀC6 <4݇ Uv358jЛTaRhsKt\5|UhsR'*:Mk7Ljzh1)* ]"&@f@ȍ1df^Lf*fj~,_` Pc|m'UK9|x[dVy[d(lVy[Ammmz[q$R'(kn^]%Mo/-V'4yEZy v2Z?^Q|z`_@T]H!X"@xx4aϙw+հ^8Na&'v˽ ,"|&_+ZF_sszs^='Y>4x5߽50^m s,/Md{*|NMĞpsK9!qޗ| X.dP=* J&_WLHO^܀O>+#l[LJɵc[/#MS jPռ_GOѻYGux_xACK۟$I+I:__Aߑ?`п>8. @_"2ԯDoDOcGkkLS鷢En-H17klRVF)ҎDgV'R*G&s+U46\^$g(1P ,ۼVڿ=߭aOjo̟d_.v_6zM8M>=ԇC}O'Wwx7'~߲W d_d_d__'Hd?>.wְ?n<65lR;-ȶ^gkuK{f5Ϲ Gw/O[_:>؟"Oۇ;ccmd#Ї?<oO77Ww9nGNFN:rG?ENkQ ~]yQΗ->Ռ (ѝݗ*2hUOo z/?L 곯?0~5}3~0bo / 0x?iB^ wï42߲}dC,Y#Kg,YfR>F?]F|>~9?zcKfz=ɼ6F1At^=rW\/_t 4]_O㯯έsv(u} Oꯏp)ax|~}$|c&Ǚ CdLZmcVQW}} /b_OٟaZ'd2Yx=A%!N)\%5IuXeS.]a,5b5ssDNs-]?kA!uzf^bJBp@H zN*Yeu7}_3϶[%S͓v%׻׸Vd[a݈)|`\)(Se_'n % iNۗES5 $U_"?>R>~-9#,AAv|{q^)!Zv8/GMҵFOo`|??Iu>^*3G&9jv>]V¦۝<7TMٶc9y|xy~-5?C>qs30ɯ/ euVaNe$Gaa X0e_MRܛFY-T~UKPć͢:q'\(KkHz5DM`H&*1ֵ 5V&c}n8F.G9e7:V3=sQ1|@9xhpkoG S@e?0̴$O7WRέ-hf34cX .:3;#4#{_'%~Mn1BKtߟ_ :ΝY\\X/ !)է&X_pzW=5p5C4hOfXty:=Srf}{9Wሆ{E`\4sEK eO_?s-۟`OZgPsy6]o{|-_㒿=(k`ߧek 6)oy)lO-!e;YN`WZ[ xØA)l5b%Kx_e-@8jz23.w+hzQ|&d}K[h;~!thY#zنůMkG׼QPVz-e{?2?:_ﯧ?GsRT:wy}Ɵ!IN~^nU+qj R ^gUkN ʾjV JK LKIG8䏘ߟq_c}ƌLk¹ ={AC G,zg}mLH6,|FK|Q^3EdDѧ ,Pm7'c_Q:bګ*ZuN'Km.1" k~Wֿ0Ϲg%$!ZLգXQ>iJ߯/OqP!%{'$?e?k?* <~<%`gvYbXx?khOQ_ ~?q_!|H?>)m_5ߙnS2JsJy8#ꧦ"5uJ&'KU X1}ٿ>ҋ}Mz3<.fDsX}88Stގ(|.y&.LY=w j7LL[÷1iR_útb>6ho\:3HXhViWWVfD%r:VQWYZ.lM}>> *׬b1z_7wͧns}u2SXy:CTZICy+?L4AzO:7;]E@9Iظcf4擿z(=ȾZC3@ݗT[`2O\_PnOx9<7\{GvHoі%V*<~:u[Oe^ Fx@%qhv@u*)O Cb7!Xʥn+!Vvd;+(!FUk6 b{H݈Wf~yORlDpmxD؜DRx.GYR/1Mx9˅Ys~l}IؼA<~CW?6+NO#+sMk.HHZrX~WUgd~n2!]Q.\/2"r9$ \be=R%Ygzۊ!UhҨl4Y= $6+ uX÷4#5I # WÄht}e&n}RbtZ3ٍ&n 5 Vۗ*>5r,|!ӱ> p E]q#*\[^ ΁^#l'lv<_e6nm;LBR SV6*97B,iA䞁\َ͝4,U Q>9u(3v0l-ܓeK2,SQP>bH5٬fVK#*q|A{e'Oz (LB+smyQ>~evJO! ;\Ea Ej|(~XOwj<|G`{d,>6p2|' ޗn7yg25 [$җ@&.Su8N6cR'hR#CJ)^ӉhTH`}'yoQ2Su]l]]UZL?ZJ֖}ƫx:|iԘ)%aq` V>\aPs/溪sbz.fq]ػP+VnmO;'yw]0fFZLb ZQofKRb QՅ$Ad6uJxWACCepXij6wG_CTYxcy|&M)Lw'e[e0?񼌢Ko.PwJP9WTeo-U+N, 7;،wWÄ{\XL(2c]U*3 W<=(dg=btvWi),((} 7n Jg!Ō5mz!y}G᰾}>vYOAlq2&?LPd}}BK.fcO4QuOTk9R?мc`SBnLu;#:$k.G'zk v`N A0 Y LOxgD[b<8ףH2ޭӓ=vX EƤnc\^qE C9lkBtا儣۾>*FvAeͲN@iRAUYc#@|jpXIsPdv;V<կ4 Eb- #A|9́oLl擢HU/e}IӍVL8ٷM er_M$[;Vy|%*3v-u1ȢׁڐSJh_ Y<9j!p!˪UjTc31%͵=S;  x:LD$9>lZWׁ sJi[%Z S+x*xοtVǩ2vj/`\[;2|Y̴v1j+QV=+[(-C=ɳ_ - PhBfP9s'_-zK㮦h4OpfZ6b& ,"5\[7V{ۯvdu3GSHZg[˝7`<h[Ix{=2vu048\T++>X+RrWDڐ44+:~ -"+ :-!@YNlm?v$PfSj>-MT%.ya@(ӍFx-<>#E\':g,nmun=6DOIpRN@~O'Eu)i+h=UJֆcq$"ϱkrm*R@"j^m,lzǢle]LD9yPa wSb\ 5c5)3p(ج>CP2螄J92C lc%ދYdq9T~̽nfmFލNvFMuѳI_s]W1WŐvGuϿrl7|_r$Xn}WDU+&`m<!}Wm+˃Y7j"R XvӽcBu~C|'ᳮ:3Xz>Q(qZmpAoS2-Dѭk cV+c9xn7;z5~s~ea,7cO5]lCH=fb o~nW 7pMbmW\겄@~J!;]>CxO%8j % dbzBkt:ՆfZvb ×?uǐ̠[ŝXQL䒣ɐ /V= >;$hGf4Y$MAu˺LE'c%!*kU_!F L2*M&Macu^vOV$wHa2"W#'+ LDPZ@& ZeX(!+)1oX`(4p>CC|՜yp[sNsC qŸ+%*kFVq8OK2IhocFk찹zCʮF15Tw?UnjW &#@Kןb'FC9TXzyKQ,x~h=iÜ{= \C9Si4&DZ90y$D6E;ﮤ_|95y3SdGE`|{Ca&Я?<,[t˛S\(7:҂ٓïJoqv^0گudI)ML5FږMXUp[|SWc7軶a6rt3*TCeAd{x4E=蜽c_1:,L"T IN4z꒭)1AV%'כ_Ӳ .!b][ՖfYw {f~w}&מڥS|1ˈUJ;8yd"&2'۹rlˁQ7l{V}g{0sicUOA#Hm(*=ߚUfv$H5þ u~!$&{R͓U#ݯ-\E28_yOaZ`r+U^CW"ާ0]gh}dy6(*B?= Jg )fӟUg:7aǓB71Nd)Zq3 k0|Rշp ^mfDWO+FTHљP֧Ep8&5OU؅*˄%=mmx-ZM)slC"_TF\MH:^ Roc\'eZv 8V$q2,lG58ZlqB.|^>UMnlfݕrLb|GI*j~6!Gn{ԖBR _{?DzpB W*+ԍ[CY֊l);xJDWA]J"d 3\MdPe%n:q{-n:#0S|\E.@* Yڽ D艨Ejn [1]cc (?c zd uQS-\k $%LUw 㙄ݨmBlAð-Il>Jb*Š` t/ٝDNĒw |QEyUC *y}2 3_ O0Pb=k??a&b _.XC74Fo7 {v)]va@[{k|OD 7:-TDJ\Е[ x~ܑF{ٷ0 ̪AO^AeVuλ=|bᇨ`>}OlPAbeM簊y=Vr :X Dc u[ G㎫b~M usqz@ w* VχLM'O Г3笮Z-o ˣ'5^Κk)B1nYqNGR٬9$s3ϻ<(j~vi>U#,x=jaq>:㎛'?~R[Cdh?H3ےh-pGuzco&;s<>Ww(a țKu6b,FNkoJÌQxN,2gtKɰFQSCC:,2X7AN"1^YEY44Y5'{}a _"!b>=g,|e^J"z-<&VRqG_cRZe]A(Q8e,~:]ccJd`CzE "a=xDc6ސ D$-P ']zm҉I}-K=kȁ{gX_,1Jc]ԮD#gϐÓh-OdN˱mOlVwyVUU_ ߢM_Z,OWH̡1 Ʈ[-xR(XV>j>gzH()|"e(}EZJHu1y#ԍ0 hT,4twɥ#+b)7/!YGsШ0%Fj &wӑ_3.8mVVJ O`\Q4^$j=)X= ! orP3xKf7.ƪ=;L8R b RA:C1su:Z:ڮ# ؇4|f9 Vj!t9+;dg-Gfz!(A{T w.J^;Bm\)hL #^c4ɹ`8j$dTO)O~|Aӎ350Sq&_N썪nܷ8ea9;fssnQ.x1s8 QVI'WF.}c QBזS*3_J1(xNdgiuJ H#D'ci1yzr6kK4]_RzpӾ֫(k/"P5|99+KVfk#\=C׌qm\0oyWZZ9c}eF$0Ꜿc}Cm+4gѪ3oͦ08u<f|ӐzKлi2kp7K*RU(7܉u*LcEs11N>lgKƪQ ";=\ZlP|fFh5:F,⢦`r8A:Y-9m0g+`cYYX[?ƼdA<3a"S7ekG±. 4%Q>\+Vc6>P9Fjn  b1sd,zd9d&Kɇ&`5pL^ȼ.zԀ0=a_XB0A=zԋO#c%x kt;=Xܿ;ޮ&d#l*4%mB`h.)E Gwe'?e F 1oVA17E9i$FdRA895ۧ 6?bAu|cIXwd1?ђl XG9 33#9'7yeP]u6 UlYxb3d=)c lx F$!p~3YgŬ&1^&a*p~t41(Kcs1 xKcMܘL2Eg1WMŨV, TEҝLoXx`M, \Ω?;B8J۫Gst_El%8$şd)vCYF?Dd?чw䨵˾77 ^1VD#C~›\?[MrxRah:c'R7KY\$haesZkю ]vA*VL!𰉈Q3s&$!*[r]2Ml8Cv ]>f;  }P wrڼ? 3r+X 0JIhT2P 0mlUz%wչC/I6ۨWE"0e )ui.K"JMȱgmVgh;{ ǟF4a^ZDYR|uB%N~ʜp`)D!y4£hq̞w i׋\\9hl Sg1g֕j93~OZ<[E\-'l!Xmܬ #fǐ H3n 1p4TMY7*,SJ=:)A8l;zVDEOb~)T|=&RzxPywQ,y)Di=5?ǕikB7X5puR`N2 uԜ}ٌU7ص8xv"idƲLc v֖8L_1e? թ(SVI*2(ɺp10t"1M;td]8?IpzF9k ^鲜m8QRA>I_ L@-i^|ǬQz,ў>վn]ʐk4oܼg9FWPP #eХ,ArqFI &9ÉӇ2O}ҾLܙz[3Ӭx< \@r2 8,D՛lE|#>PרU#W hNCw&X)q&XA5@ҢgAuĵ4'4R hٵ}~l#Á"$mx jq5g'4#>6EWb%q܇n\RJw2v'kKkH'+[a$̲*f/x XH֏8jLUEU}=ڐ\]h)=6;zov5L5-ä 6]x+ݞv 2 t&M{͛+ (P7'Bi!k+8!n lnшZ">&jTچnʒ {V6ǎbqBoo?v&%ކ. I9LU^ ~B wL?GyU{9T{;u^.oAb@,oiiu& nFn8UހhQ:|gٰ\3HT3JЅ+=®7}*B\"%)+Do`N3;Ѱ '6UT̋oۋƛbky۶QkosAT &云nuv=VUHMrB8c\U`7|C`蠲9r7B.H{(FX[F $EwPedgL1{6V.5u c>" ez6XgzkyȒqӼ> !"n4jӢWP*gK*rOwaQY  _s'(cN+_LeǥQ[O'Pm*Ql`mIpȡ czt;fݻ-.ړkA^5I۬*R+vl]h rv@> IJ:=ܴXչs$p /Ja V*ՠ_wk% $Q "xOApKP[ǀyt?3;%Yoݫx7ϔ t9W}I?߭ E 2C(.@+|]ۄoF/ƅ2 _@;0w\T$sn_8J( xAJw=}#Ef:, g\ݞN'VS\k <; xt#O6EBء~nPhz0@fҕ9P;z T_8I~^&9o\`Q_ߊN1"чi9 f:p\N'ޙ[&?6s_䰭Y~ aP\Cs #k"@Jb-E1$6Wj,#Ty3&s|oy/=iQX0 5n^w,GĬTk5zppgX'oWmR;f@.>;]H%㸅tlr.rg{nGGCC:ekC5wD hQCGj;N9T1XJ{[) rmMLLqmō@Y g߂y"z{pǦ)97'6ʪDdα4ӏ2|4Rdܜ;;=H$zZh?t\CFY;ppGuXpo~c/wL^osBl͎9sy|@V #ɮKHMȞj=6mYp4VĔ6xIUT`R3Tϡٗ˹gqvxɏoY7uH嚒uUY QƮWd6Eu Mjl.ވ3t:/pUr؎y6A%Ҧ 럼.M5xo'εe=oDźxJPs'w+wO*.n<]jOi (ʈMcMɠ9~ K"=T¡sb,uQM`Q~\ki[۬#"jc%23g7H eś>PQUKev,Ъ}}դL<93(+,b^8ᚴV;M^=BdxLؔxe>x[3jfixnl${]ݦOÇE N$"f&'P*1 Y8Gw _JEP7+ o.o@5(4_?ШlI|7ey+2ԃ=өiPg:>XF{m_!t*^wi؍%f 'Ondf6B"@ i J>Yb CՉd@Q|Bar}Ђv}\N_j&e!8`>fr}KiMXЪr ƅXLWEN`0~42FRpRt$i\Ri' nxcvl| M3&}#HttmQ |+ N20w R]p9J'Lޕq!Ol0)%45Rrj*4h?o,PzaWU}f [y(ڥfL<#>BrCLZH7tl}IƤp>ưd]R,› + bf~y`b+֣OGqGJBҳ\h6" 6v׎1?f|%λl5 " 8[2+rrw n\]o*/W' y߯\5:&#cM%0h0V'f@!*{kcS#jNc~"W>|y_՛0x3YD7CU6IJfw2,b`QJqglUQn@[:d{_ Mk]!.~%bZF8"~ӝ.wïvJC#7iA AZJ^Pq2/SD% Q ˳@z6DDzVc~|#uK2omA.OJ6g,1'x-F!xCߥm=Ps:urJ•e#uS֗BhMng94OdN,!Ud2b(`ޥco`76&u{pi Z M B-֛Y[/>$کd9GFΫZỈ\ݨd^PkE> g(+ʌػ4Ү%rW=4ՉJ̴~sC%ylOVSDc3a᰺ïP Oڴiٙ5JIS䝬`NkX+14XCUzDe*?yU: -<}䕺!z>GYg*b&W~Bqĺb +ޓ%GO. _²b]\^]"<9?Rl_H5bol~$BkѡO#6̀6mRc_ј䃠.0 +nW*HͺbXEV14kNh@d{,E$=.F^xyǵD'ī䢙S.eqmX}KѳW\UeZ ZySb:>sNi<l& 9?'L@*$! YTrY,H\(ݑޮ4K*Z'nܒy jWX)$ޛ>WniG`lr zlZ`nq* r -xr2odfiGG4ѵ80XuC)Q*zDN-qšQqD_OF͐n;SgaD!>;ÙK:'n0=YL#l3{}dXuL؀=q+Ou:)R[7N;-5:ɚIn"y ꨻RЙQ+y˽aN2zcˮ*$uO73N$Y¥ND ~a۫KttObaݛoFcӇo'e.m8"MOFWN.?# KQT^$8<.=3=4`ߑx ~7fTۍӪW)@eTwӴsxoOgn]6&TΊ }X墹o4yJ*Z*˅uuG6m\.a{ZWhLޙ2v7:ӣ{ YXe˥^e,(YQE"M{w?W#:4g!QҜ,/nrvU|C_B[8'Fє_"MߑD\.!7B1z3L!hw6Լw=gyW$z<ʿs;0] g{>d~%ҿe/*u:KxoK z*2{F'\Ճҕ&5i'@EʖP ' A:Iը(Z4@SW z7O ͏W=5Z4߬{ӘI"OIxrr)F3sٕvu_%3 r*.#>bpb- BLnLsoyS5iԳZ6ZfU42+=6=eVzR#;pY$n DLdsvly#cعN\%[]'wkb'$gIzpgYiu:_'ssmy1[z@%xK2n$&W/Y<ż +>e[LسMJ_i?C'6+%DpGi*_*s4~l95*#/1 om*8j܂2 C] Y7%wSJi×CSh&'=u>ND~(QΎ+}+6L;{dj.|yUxK~/ _6q:2or?}\#xуR8P=ZF-g,ѴBR:f-f- ?*s1GKa7Fv*n;"Dm o!m<Dz2cCL R |HlIu=IZzw &momJ Y^u6Cf NIPzyq`Hp/koΫJ0߽h?Mqe\:v&[W`s.)s (z.ێI$yv};Y)UޕH+U^3T@Fټu]KVT<`9UI7kܹc߉[mjƐƋ?$xx֙}}п'A\ 3c/j9 !5_V 鎪<@(hR;w5E0Xͯל"/)IW@jk[|[G?+$SͤmF{ ouY𤏲>N&JƉN=QO2Ś|OQvT?CKVE_E,>bc!za8}`S>)A˔?KW24D* ݕ[fd0DAXWhÍ= .L}7c[rY~H7V]!2t͆&A>RoYŘ{5\L䨀9>O9=͎m9&b$6ޔV vU sPqd}kF%0K-޶ZֳBe&FW!r`}g?QOK!q[K 'N%&iO0W?o |֬)J޿" Oek F ⰅcY?}Y^X9b9bU'.A| .r} 6;fXR!* cpe|J\A5)bmo`i7j.3C}$ eT& Լ[sE\? Nݖ O~K!cRn, ɓemBic9)W-hw^~C{V!uLklSaJ՟[q=bYruaxȓ=o}L4Gknz]V94HmpvU~zv)C~\: z4ג"؈ cvhYi$زlnȹ6ߧЭnwU q8ޱ3u<' Nq=ߏ/4jM#,ش;(`lQŻl5-IH%Oware'QH͇GB,w~hzjH#("cܟ2 $|o~׼C%0Ҋ>Sz ϺfJ&ؖ>cezذU[G0rV` ζxT7;>'2{(Dd 5Z1RÜAA#Zte#OdG(.vHs_/8T]-u֑n`_Qi?o"ChfIݼ6D^BHnwZt)/Ge,GP&+qWss!_8:daթVˬ8hDK26Ɠ5e5c(Twb"xRB'H6|2*knV͔4Xi{HcB:\pI 63M>< Pc$D$=&'<>|F9α$[ys6mr:V2̝eq)ef4}j brWi5} ͓sY@<|}IOKCL>soOwõ51! ؉/@ѐXN +o{lOYX$sެ73VъTt~$%hĘ:XWcsØRv0ݻ6IP9ǹk>n.vbT 6Սb\k)lOWvžm*r88AJc~eaou6QQzc 'ݓ /QY-l\N 8ւYՇ!5m,RF j4kmuh0Pާƅ)#n\}T5qҟtU\̜EK0seɭ)w0dnxˣj5lq(IR!NρUM*8QfA -g.feͦ|B0zȠx)fLYV ބAc2|SIIh䜅Ka@iui4# elwYՑVuh{2EL/ `@`/Oc@]PᙬCة@] Vі"} dvH1Q%ݗ87nmc$\_b /5\].Cm>%KUܼbOY.Dwv䣄k1XVtܬ\|Q oϩ㧺(!a58gwZA{*enr^enQީmr J5gS>jsa?Y(HFǤ@t)gQ8dYȲaWy*)?0rDq)}mJ*xba\\]0%xyh'C%s^{0^z{;+vU:IzɅ p3,S߹?u ;%FK LPPs:V'6I͒ˈ{]v<̻@y Nd\1q_1,MW x㹨KOd '5bN*r(0vAϐV[HיKfsha9,xo~ \8_E jks$#p19X}rV$-Se>lVY!9+Vl\FkVmۖcfʵiۜQPw+ƪb!oYI"xWZ,/Q̒F&hX!^uM#b 0$Us6[6Y=q7G.*'}#c Z;%u ۰{K2{ϲ+EY]|~eT'y6:Op$"Vݾ_$RpC.uFtM Ov w7FG[*FY ?aօk~bIMf@t?D%QdWѳ8{@MO!Yl|7{G+<,&AZ-7/lek=L'?cwH(4RJbaocw0w@;èi3%89kᬱG7'rJag):xا_Õ k'fq\k"qaJ6Dʨ&O@AÐ\pI>H e dLߴz?!$v;qAc޲^n`裇8`1fJb !8 8_e!i97]e;*( W4T̓t|l/4IC@[oAШ@1+1FT5/YUDh'TM6j^>Yƃ|:χoOɴ2|{묨Be" Xܩ>a/=L׬}K3VcTCޤf{$ֻ_$?Ow]5r^FU, #iόFp>LIP->9ivNĖEO kҐ})u^LlvǤ!BS8lV-A5v͢#ut>]ڡ6w'b^yto{y)LGpn5%8L5> jc1= {LL6'APP!U:Nj:xq(Oe*$" :fO,7J鶧oؙrǎ1p7ɜ RS]B7Yh+͗p?C[w#3Qw-xB\eoo(q"f3Od ukQMnzvmZR6mE,E YpcwVA\ZձIWmRdQ!̐iJwzvfuKhm#1*PeίϼfEXE!4o0,% .--#o^ez`DeMUQ9zgjtUQo#VYgN:b6'<VY_cP|e+GQ)xeAvBYeۛʧ RECm*(ҭpw.: 4'f1jk (>bmsjz狡GynJ#OuI{u' X]b{2moC vb'Q(cZj(.-ڇ "G, _9bi#yusqE8sZwV({HpӅ>lr^BʯE*LXǝ/L\R_`r2(NLO1]uƒOP_HO \c;u>2v٢W;gt[mHbi8"ؔKS>Eagf~N:x.vaAv@wC] )1\V:O\-[#}[areQ MIH Az!B΄:<=Ui.2Z-)ДVΥVH vmM_Ŏwey@56仺;3.b:}g^T!-caN5BLB8D:t!G,!oV &yiV7mɜ*b'^oBjY68Fi҃ Va/ 'kGnã-)(!1_sGk_!kO{0ђ=eXVsv$J걞Ҟ LP׼XH?FWrI8\Ub`Q"<|}خժ3'B z- r{W B'B+UD[4(h ;l%~TqC`P:9Ԫ3χsL<gkބnsAhrbuΉmJb>Ӟk}2\?FN$F01tڜ~/à4QEdg(.K%ߍ*Y,SE{xpӅHBX%JVu&1٫Q~%&\wCDgZ%Hz <)h^T:s VIaZ2Ur Xr eyP&io=ZSJeMN> VYwN6Nٚ*(!y5C:Q3u}c@!ª[| w, p F-3_~*FTάw ?2gwu/Z uz3f|Zit6b^kA9u%HH֗Dl4t!oMpN!l.KQ)ez&D2/e O.aQ86 ^ ;ʴY>$$:iMB*%*&V׏AA,2|RUg.:M#@u=("JD&UmIYw1LK.Ar ?@ U>ԳQ=.A:$(CԸ i0Zjs59,hzMSO+SAn?T*+6\R/~MO@V~8pR+SCn}#)c'5i={N'IGA%āt4,o6Y#Visn&h9Tp%ސĨX/XdEQom2ܼ%G4daF̽$eڱN& %"1M)Yo'u'l;1GcJ%%f  Io:./IT32[K-?^؂]緼U3D~/j2tC' H R`rBXeB zlcGx߮ /ڍ7P=7q%,6_oEv?6㌶"ra_YLRҔ+8뗟-eZtj@ޣ|TM[&{3`oJ ޘu=e Bبh/ 4'j0n*fɠXXbӄJ,!(k۳šÅ@`n8^}%gh1XzSE԰%c2iLq[HNRyj\na"9>SI;viԧ'f_<7<}u]B~+cAfJ{7+h R+3cLfa\'=VYW~$˯l4A_dNF }NbKgDz=ug:#M?i|B )JKd<ؤĒCm9 J-@3B)hDpE3\"R?Gc\n4Ƞ%E0ZܷG@6h͞] 'O͞*ZV>"o"y5$} jg%`WES~ˉGI E(rР!9ǟ叠4.%1Y16n]fQھ  BV)Vbe`ikѧE $'3\bףx;AUѶaCJ] 6@>ȶW6OԇI+aܪg,-g.B*{if(#utbUM'!!Dg㫱 7icpXVEӂti/hX5GDu )ui nѩ+XAl?>J2HS;6iJU;Y!?qx}aq Yz;( ϣ;TA,Z\d4-Mj|8?&hcppT "(hm:` Z4fQlB-Mם,6FP0;*yA! L޲~?33u:EQ g-·|2umi yQ3!Xw_(7x8za/p}]=NV_#Xz=s/ J=6h)F4:De&N@Ӝ;g-~ :j<0 FcaK)F 巜#O'_rDֵLA Vy8S.KLRSeӪa*yciW7 Br~ir":[؛JL.ȳϾؒ!y0Lnn}EzC9MaCM[(*tG q~ӫ/~'ED8Z53gw\!yy.mg)cEa(jـSa~@Vq;%zUӌ>eM=hVc~G#1] 43(jĭWXKcE7^V$?k. zpJOBir zn+zwVuN3ZY#gÓLJҜuoWF0æ8Ļo̓I䫒טEܲPUiUs#P\C4w_ҍ̢ORi["g=ËH[mZTM.M͞D5e5F0uրI z G#T }VqjL-1[lofƦLQ́ss>Ѧ 㝘㔃Ŵz=TC<{A÷"|1Ρ,3z)b~uC8ڡ4KN'ʒ:ܺ`Gcc$/8/?9HwۼO#',:0=Nj{'>T=8zTkHt)i"iGz󐈈O-L5w*ӳL>ֱh2=,WFz/ƁڠV[Z@C,/HὛUB$qQ?V|tmը$bxd%[Fkb;:3Eg`q VTy}_b[%UissxmkdE5K9})xVf~|X;R'pS9lmD8%]I#,t_Cy͍&MQ=1ޚ&]5rm $c8GTf#{RV ȽU9h8e7x>^&oΚIѷMnE۬h;%'4:EK/C+INۈEBTnExm& &Ÿ!0)88&lL谪7:o ,}C)q܌tD{~z pt4 P 1ÔZjt,mԙڴ8@KÔNquDtbdN># (<;OrW3*rÞ0u )!Ӯ:V/x_y}w2uq QtߔT0\s #`[7߲ Yq!' cw2'6"g2xy y0c-tYaxjSt(>(79tµ~$$}w}7 nkUykbE %Eq5эxk}jݑzOS|l>FOU*@0NZgG8҆EgE+#(l7m#X a-2`(ObqhĺS,7M˓?홝YU^se@uT3ٙȟ /` gHu޴cCYNQ`.R_АxahߐЃkG"´.bٺ2g|&fExuk-{A 8v #׭>S>/Ȧv}Xi!!o$4*8I̺C[`X Q"dUl?@cMw‹]_i&'|+Ag_~eCS|d[<2'6ޏ[ h1}*@D JCƽ:}KA_ 9ψ m$NV{Bړ'50V]6pDWXE꓿;s< Jh=dM~lgZGEc˅oAiFN6~(\d=o0m"Ff{yz^ cun5:NB'Kx8wqx1߄T`믯l<ȠUxsc߲q;mдMLrPӳޔ =4O Xsϻ SX*kȌ t'lmLnu0 ]IlE'_4e!XhKhd ZYIN*de& ϯ > ߦy_O袼!Uf3芕0vE[@H>7Q}ۀ!\\ږqw:y*v9g $.9](gu!>ˆ#[> =QTTa$۰Jt/w!ܢ_25DCFq+GGpq{rM _ }AaZzڇ$Gpr-έ wлdyؾY|d)As0s&MM -.+6P첄2e֭t/lg1mY)%V: VwbKɁ91MP9w֋^GcN@}II_qwC1x6)Ԁ7ͤm(‰mV<8q]q+hCV)G2W_>,^ؠE4N)dj,"c4HE Tu0驯YUnk7=C?Z\ĵXFzMM&tOK BQP 2q Z'ӆB Hh#+#h#k۬WWѧ=Re+ðU :[iX/=AܼX&4)c|B]u Ddh9HAP3=2A+=Z}`BB^|pscHYjʨ.]B/)" NyaoAݞJ0"յU.=@(#{V4WJx+uaMNZ=" +E7? f!"R~}Q|W<)0{Jf#G{i*ftVm0,5 Mb0D/k$!2$T mI=fڴ 㯌\K+ 5li\lor׎,sDe_ZEmP]vDB(W`;X]"VB Rlm7ɮdJx AcZ*Acd{ͻlK@R$1]~UZl K7O~E{ʔi ntV]ɑ!fCD*-lIwsV+0CM[:s8 =l"s :w߲s^߾eCQ>.?}vx$_*Iv0ELBv;uI&7!]%ǬI:~B%p-ç"8?O7$uGiT.21";?aO*a&]m, f{A/,tBK%l!Ӑx?M|m'ApfUXk>S+fœp7IxfA/XC8.'4װB@=[{b\H?Q&.0zr ڝôZkV$2DҞL&a_6D3ī>gl:L8ض_9bD6G};>,>SZ1 Q"c+P?3b}F SNXR?CvfkV|eۤJ!HEJ&߾fJbvswnj{DcvBz2m&L{ ,?Hfwa:񐔍DA)-Xl*1Trb!#O4Rb9frv}{Cy@vyL'P}"z2B=ñ*/POA8܇CgU+b#{1Q/>)g2<n`kʂ}vz}*SV7Cg6rm#{DL]~ӫ@eS28}i?22X*Laߛul"MEk_3˗rl㴊*F O#y=v\=d"t ҷQ'6!{%HϞ1, ],|E=g!7<44=|iF%=[8m^~Kb}+x5L8Oz2 ,e/7tcSx4^Y6:c*}AyNȔb11휩gWTQӭ6Gc֬4~AC y5}^i3$J+XF:6 BT4uZM:]Rsf#81`пƇѝҁa(jq2ZOZZI?~.rA3H6XO@$F ee F[TI,I@ YX K`*4JVGO c4]$\fިhHQgqSWjkBP ix}3S!\δ{}IѪy_ć6} "J֙Nc0`A}XΫRa}q OH gg6Ềnd9JV Jk7d"2bc%T6OmZ\2}GZFk+ EtE8#!ZwRd 'W| )B0U}F, qf ,{} OUϱbW#kOXTu Q{1C yjkfc͉OL7L8_0-eiK|V?LA:bP2fm/V ^WfANEKh/r)ȼpI>WyokGE's{WZݒSp߲+ S&<ѬM$b-12)p3@ xoJlUz7b3lH݁ڪ7 :ɇg0ͱ@'AGj|){\h_h+=6y&q_vNXSy5M +gR9Z/&E׷l:siC@l:O )_X~+f'2Yk#-2횈i'x_R3gd<-fd ! f4tNwoWOj{.n2J>jՇлNfIk[:Bn39D>jWmdG|"3)ލ"SAJXo? `OuN= _:؁hs? !'3`>ѿq56|%N²l5_D:ScZ'r/ꮪ;V$X#lrěb{?d_2d:bC&az[Ht'xVsPVMSy"he8\ ^փTcW<~U䧈-8 GB/s%Ob)VH)X,Ug6b,[7|cZxҙʾ5fK8wj#J+i<;]¢|={gD[v13cβtz5u"~hӜ?CЪFgRZnp=$B"'tf^q+r;OݍQf?ЮsV/[1lagD͋%DY%5jZ ~wCxO:[d>pl7rB^= ^0\CM`.u8ϻ;"}svNZ `1 6+D'gwאl؏GIl6 k1O1mLU 0VOfk%&G9L%b[I=z 9ɨv&Yq5}Jb|V?GA^p~CS8FBk'0@Y9K:U]7s/$ ֒J]vYX-Osh^|*8H;rma7AW\|ZX}S@ԫ m&V9KB/_wNTFmwm!O_Ʀ>RftLb32f8  kSj/~T/$Q=קX$N9jX-ć,5^W X ,Z+W]JD%؉ ~bC[BO@ޯQ;ӻ]0C|G ކ乑1IzG.He A:_Zy sk>\J-8vBD+axgŶl&Zйvr^!gGjIZL2W;[&& hsTP4/X4bb*{j~eH* [sKwI찿%_]mvNj(ILi5:4B^z4V@ޒH}v1D]<&*:نi^grbvj(,gWޓhٶ%SNJ {xfGEi=KݺJ7CIIK 5,T5;Pw풠LZG)+Ćm<&wR&pmnl=n9 bQ$&l|ˍޒHdݧ(IZ=eT&%=?ٔbI]Ƅڒr* ~ӍIBڨh0. Rb9V9?2>!yhi] c{v ԃ-\Κ:^ίLLw 'óP藳[9b8+`KZ&)Δ#m s`=}86ǫ0>o>,-|C;6=3i_zR=S?մԈEG[c-58,&>XƧ"_* {TJrn2 Sѷܽdd>&N FNFMWzsqQ,VSqXgCbAQ'bѮ!X.ލ+%b*_eO@1ܢvb i|R=19ȴX9Crc3!+ROxʳBj2쾓ŽsKT2#7xZ!`VNfEϐ~+!!ɛG"3Jݝm^eB~JOv@\ED*/ũnDsT8Ղ8jjްB`U> V'(Hr%\!c%Q qh>̌&VܧJ%R,;썩-;!ač) 'V ;UA㗩O) ZrRÚGf2zN'U[Fё6dTb ?f&35!-CϏdbM~ MQ:>f^l&gZQub_xJH;lbdڲBƄsxP3ddQ"6^`Ol- vE ='j<kyu>.1:nE U_U%RӅ*:)Vp6V-rߔ?2ʯnUkByYĸHOŎ6}fz 2A(U,WR a`9cE%ʐ$(U+y[NC3" ޸oÄ;3yt'k4*ٗutARApӼOp!S3K?`IU;Tc2/zջD.+"w7l޼-zol78 n76r.Eh kk)bZY=UEL\vc9^8rooI}(d ,yz?"}~/,oWH#^W56Ov*?eMgT%ylZvq < tӌ؇`^,LW 9:4_5pגּM(f(""*y89i&+dB:'~ (P4;ǁ2}W4;~4=k qiC/KDɠ-(/ QX/9tǨc>!Ǹ>658K}N(%qNwdt Uדz@7*.e#ti!SqѣӠI(/wă"MS{kHKaPli+P]6\ooWH {eSoZ3fuï<Ȝ%(rG|@3rRu**B3z:]yzКzONzɇog'xWK!WFTl RcҼ[7)_4j!]z ,UQ9ؓ'1o=bǣd~lr:ҳ2BѴyRY17?p|/4q>Pȕք8Kf fRrRP͓5*C=i?#SPbCmc>o;\]1TbzpUbF:d 8/pۢ ?X&Dz ۸A@ WoED҉Fz@I]s~#O7'|îq\,{]St): ;y^!*Q;-&B'y9~k1,7yr͡.Gx3hW:BZV鲾.Ax_%fhOEs^Y`sm˔n1$ %^?fгm4^.P7GmU DHgSVHYGMA@ƭ␘Hz{ Un39݀O؍M/㠺 $W)1=v|uY+d5uEhˊeLb6|e<]9Cfxr]uā;"x[~a*o4~gxucͨ/q4/p7>$UN )` ]qepa 6`HwAwK In2@U <{ [ fN)m,whw rjP `DI7 X ":V%4%@)fv )j0B'#$E֟z0k*sjN]G?N7p?lVGS{וK݀1y4Iql^t~l'\Oqx[uK~ͷ??"N'Ƭ>$̥~(6Lч|!%.'u)z0"Œ g qXg 27eq 0`лSsoc8c;<4U_t<^19+?ё>8lRqP[C ht,0$++e̻RRE}ʯ!K#c MUճ_j{nwҫ:xp4p5wu'-0.߻' YpٍqIs4r5Py`rcxbb*dATba~S˙b Փ R'NX }υz8z0RPU~#3{9CȓCH cNo>H =v5UQm(CóI/:TSC]GD?1-p R&wDxpS,ՇԳɧт1/[G᥸otZJ,MJdi`hnq\ĻX-6C?|l>8Ye|[=1ap6'/U 1Vvq3W;ηHY+JF D@TZSA{%,a¾?YM_۠ ~g]ɶX$! *2 @/h 7@<\_s jHc$y>F|`Y! _u_.Pԥ22AC)sU>)1)= wq˰#Y{\Y܅>;u6By,Ƶy?\w“c0E|:ײ@S,kl#,(#P*9=Kb%Yp$bJwz?F%F+Z;3W' 3 X,F"ֺQ*X B\[|au"4P {zG4QO`zbWkݶJ31.:cPǭm7 b>Z-E 3X-)4e/a~=]Wz5YyfkAWy:)ۦO,%w!&Z_Ym4{ ;W9n5?,Oϳo+W\H;b=Xk.2o5 0 F>tEK ZwgT0Pw'X~M * g_0=M0}PUL?i堘nԱ/]ys|^`u( sr\N>p ʣKʾal ؘ͇ GQW,9RA駩M} V,cSJN FFΫ,%K8-46 tRWaW5 4֌,`G)G@/bՌrg@_z^/ /N.?$E =(q2|~S`?fwi(qA;gtb"$ԓG8tf&4~2WȌRt1if0yP}E9 'CZiPl)VFnAq)і~Zjk^۬[Rzͪ7ES mR(#㟴qzBj0ЙKn=Iï{K>]A3CA:5͛mRU|\gnV7*ݱv=f_7t% uD>pa?lҢA6gM=gP'jYXVN2yS vQ ^ 5)d~c%]\j;VcZe;KAB2D :x$yy{Nts8Vvr ܾ4Br kDrmڶ^ܡi%=5fdRi =j oHiEA l짧[29VW}G2eyhUiv=Y8 w1iJ* i| {}8.y*4a5#4ÁOݧƃ!H["OwE61 M\HNn4"DpYZ$X%dƒVZ;.$Vje5ޘF0vC吢-c{*ÚᐪQϾ :,s85ey|l>8zoRz: (!'2U:d>TPvs=!x;#FE{LҪg 㾙囲)|5!Ӄt\':GW=*hn .Fƕ 16fˏBr} Upa%wiڊGN<}<>PkL UL% m(>9c}b!9Mـ`)k<1}6 L\Sxr,? FggU&S>f 0} 82ܢ,s}CZ z ERk8hR\xr/&Q;M3306]ڱ.A\=kYUcrM$N3fUDXLk{~v wOS$|~klGy&sn ?轝t]NS.gRUfVo䵹G+z$c v0&+tI;R$;<{#@>6*#S@1,sHJLC/.1j+1Zx_:)(1 &JpA,lR?]KC)Z&^U|N;<m4ŋbCatz1ŎC*;~3qAQ;A>DI1B%9ޚ3J\U~E ?|t/[+B4spZOE?l ׿v I|0i,GL\jtcj$*%ָvxH\TY䆩8YvwNׁJy'~!9ްASdr,GOKOW$aKZJڄ?Xl8ό):i+ k&!!=ob"e/Fp\_a `Y%mn*&LxltJvU6O+7 $@)?r7D̽ks>ܱ oY>)JVm;6?9ZWJl~96r,ܳarR *r>#\%fA :LRp{EL3W6Q gчi>CnbC9>E7:B\IH[-^wzfA5T>IZPA uAy?^uqt`b}BmnV:Uo,C|anYjgJY}ȋ1+ iS $'M@ʭL"מңc>jI*38o.׋׆})}322jpޓ+m3xr,vnݘ_Yڒ'b48Rl,-1|\:7k\uiS.kn}D Qn(ܓD;y8_];`Dcg/)^>44L[glWrnㄙB^<#}l_o/Pvٷ3>m, cR'RJI ]gߋIm=264 @."r}o.`xO"͇W teAG!<ϣiTV9 ma;3lPHP̄XIM;m\%O,HVWAɻʂq!Ţ^$NzWpc&z'32U/2/x=U /A^*V{M\]'bxFߤΎP"yۍmNٍ P-xu5VʟZϵg$8S%]#$I;L5BEuGKD6&)esU=d&K';m{}Vdjax{zܐ_AoI;J_ m>!u>uQ{yH]-:^=o4\"@d֫RT{곯()GZe1A|I-='*cS+̷sll/ZZp۠3G4|gq%`P> A֯evio b]W/<J\r|hK9^í.OI<|p.{glp;R }f t$X@nYyz TG?Llvup4D.̃11ͷ+ljd]2u6Ĵ'rz Odً˺?|[3[;z^oJ_iV/"#X1Dkr%G@[eD荶]؏a#5k#{%YJ_ ʈ E*BNl`M$?xܐJ !kBo=۰ZAi.[%=2}ƶE Aʣ1R測jDkVa= .=zAT~1w~" e7 =Bxv rdȅ^i}oeZXy+ Jԫ4Uˤ c~e1sF&s Cl/CtJ p'"hJ.74gcsR q0|_IHZIEs:EGpJd>7ޗ M( @ɇeydgL $dy*B ,q|FԳ{A"d#LKrsoYP,pCG E\ Ȏm7>1Ë$ܱ%wua#G6=ܫ)\kr66F2e|*ˆI+3 IaUFx "@>ȜvMj2ICƝVRoi(l?Y~_ 7 xp{6gC@YZ(m:WwE*ȲF\1TvA,[;1A{( kG0>U}))u0#ڥHG{pT}+(ϛjm hcj4*!0نр#6{|VuE3`ghge뗤]BW4DqS3p|i5,>  x)i̺Qׂ[;j =vDi&j"֝ :Q(ڒ`!Sy#9U~[i f:/5G8}n8v \T aŖsIFuȮwVFҗHbIܼ=Od&K<O;r}-*QM෠kS; &OEq^&R`|:zp9hP|%b~XFκVJ#>KQSۚچ*.RTk6); ^kLY7wR,%*ݦAzRޒu WZ`"W !j;,~bOH/S} 435`ܦuHR7jmzP2{Ih5oD/~=Pѹ؄h؝'j U,!#Sгr2tIj# rH;[nH܊cV\1DL%9;-g?m [l&ת:ӌW찼=I{ٔIpÁo"XnUu$Y;e[#VvZm^1D#Ӻ.:4 A&};u`e%"N,BiFXzV]ƀ|_\S:LwӲG ˤ`Kp'Y͞m'bٗhe3傉+rFpZ`#[M#ApvdwI:LqPv/muN{r[%؛DZ{p f^ܾ5;kӢ g~pØxYϿL㪨Hw_]P. Ąpǁ"iVp4 \"+&3xFm]cd$Ag*T6Ӽ͠B,Rxjv}e58<ʈ+8 L<x{{ow'_*!QUySm1 d]->{š^Yw:RkO_+ϱo{ߜKFpzX ϕ 5l1iA2B=.wN_z?݂$Lo}F}гZ8Ҳ4J<gIСm%Ḳe,lNpNԧ̼=ܴ.5 Ov_ilFoo TS~fsdžݜTFsa+%h&F?SlJwy)]g1eZvlܖh;x]_ġ :aI]s̘Pƞ>2E9XlvqY8:8.blń 'Ú-éǸUHe=a{bpf'd`0KLj_u<ޚMW圯8RL#ޚt`ڎk1̡3Sݳ0 9j),g[H@,@Ea#u4 >) [# Gc.MOʵ f ^pY/xEElX8X{ó>ސl ?)HSٮD(t/m$J?*"*\ chwRۖbvM31Mlmi':*5Uo#;*?vd,VQK 3-+5  E2ϩ2]r&_Z-ګK_s]CMUVjlɧPv~x Z =EΚ{s 72rĦ74@3ij_ٟ!5cH^ .vXy}o^W/H%;/c;G ʁBn#+{"V5gK=HRݪwT[KFwu04LZ EPړ1Cxeԇ쉆 /nK@^@q2h鬞 A;B$ "RSM~|Yjw^Pd;|BF&䠶4SӺuT$ 5e7HXUQq<|jm=aˋp$IYp,n~=fWuS+&`mz!a$C :\/ϫSkLqaɺ1y@ҮX~|ū5rV~0 MJ@˶o+ l`J'kW)HVlqʮg1,~l],]'6YaQd^XuTTHoB/O>O w3(#qRЄy}<ݪ$0a\)zg^1)/\x\Zv rظ{}-n3˲zPl8t@lj/$d嬚 :98[WNnD19wķGEND"-xpr+`@1&+D7eoဃ2`E[?a;}SÅ c{?@8k#,U }%I;(*fFj"yöU/9xtqBKV+I!pަ jOlD񀒺BWQUE!yuiMu}ԧ`pZbJ0:otK7!z6`%z^W"E3L6bzv@sl C#]t){W:Ri* ~Hؙ2>ǙAO:e=]~ ETH֡W 7lhawds]#Yƞ abkԟia9e+ @ˆ[H#3nciNbZ8M)\stxkm AaK8gS{bWB~$Vc1pi1Kke*#dxd]HڑeijfƴL8#拖<ڤ{hnt'& ]:\bl0IcYi]!spJ%^h:{R?ǝX4Q CqGv`{=;}V4~z /[֐%0+O3Gw=˓QyU_hDIŠ SjEEu W\Euh.)Nyaam (q!5"@ZQBCC›La=U;ep_o6 (cy`g572\lLʋ#]N3 (]Ʒ_,9=Ɩu]Ë-=j\d׃R{|&Y zJwآ>҅r0Rjx|a뵺] suM=*.6D>D3q7sǁxrZ MQP(!_F#{jPz,4E#m9:; OBNFׁLUjdU}4H쉁nLPH>׋O LZY$8"0HH{ϼ)cbu\iAuŐYDMenc  #|j4 R)~7.Gdپtvc ʢٝKL~;O7*Tr\[N*}8jhiT*edo"@jR]eX\b%?vn}\xe 6쟢v4bBG{H>Bd"t}P̞UlMzo (r¢,$X%e2+3 6RDLN `0CcŬVO|-'CDw|d*srfG1$F =Ie%Kv. c(ٓtQD7ɢCD[3Ѳ赌%^w_Х:f: % E|o N`.>.iA?6Kx8}"WCw\LvK_آ#]E$֪#.>`ں$|10O#i6'Nj%P۰e!6bݻUsA1%gv(3FXENƳSG!*}X1%ӂYy:++q'B+Pg^Ȯ*YYty_D]c8﷎F amD<2<>~?#>.( - 1& !Ѕ  >]SB8/k)*ȵ9ߝcxU2!7:akSasEq 9tS9CsWZvZ&ul$Wywyh4g@AH2f*ezOJ *EX7}"m\9 ])(Yu=l}[1,cZ)"oC#a-'0Zto*zN=!9mT| / xJQ7戬om2np$)xlUHh5]܍ |hяиViqvt'L!^)]BX~gZJ3Q7If9ho7\v8$ފv$D  kcW)o:EڃSd6IbjSKܒp`{ȱ^Ǚ1$Q-]HxDu94^uYT*yBYR̍mj*b6W&b''fW?.dALs#fdSXQ;T(#^^=ʎq͇s9GTW7iSۜ@ĭ{,zՆeVhC^0dwrBsӛ9x2~*~6} Ӿ5DSlwQ;mm}\33yO~KT^8V_9}?rmi+(0@&H7?!Eߒd[&'rI$-QM+Jr~$+c7H<-6\2Ia=fAc/CU㗃\br9> ^ġ/|+LݼZ#gH%x>iURSDV`.>٨/0s͹Gřq„+Kb;N.M_*oNZtv/YqzMW.DKA;W`=('i t>O_2-[#fLQ\%az眬 СOj B`F;'%M6:9 olnFk%6\(ה4\+;HmlQ4%.WWPNr̐؏Ѧwrɫ?ѹIFKЃչsjR Al~|+┐=Nci*E)3d)?- ̄9M9Ю%;bcY\o *t}N}7 _x/[؄d)`AoOlVK#\2ZH{%SU+ǧ/vRv,sRa,|.i^|q<b Z$OvУg[V/B60.ׁ}'Ud(ԆL*^S&-ք3DQ&ͧ[Kleܐ[M;RE272\t+V!d E>myu#VgXCVX|+>wök(ŗvm֞I)KʎݵѶ%ļ`bF 1iUo:2Mލr =)[zD ΃n6jo~j], 6V LzL(qK61v-EB~8Xe1qm"6bzZ}NYgz6΍Vw.7 Xn䂙17i\BJd|1jhM6~< ƸYDp<lLEGO:N3Pl="|e!,^p yJYPHZq[YN,, $Q*ԩ9$Ye<)JuO=]HN `[I*1c#.1|L9gؕ }JѦ7Ğjj\_zDH.>ܲIWq| (o;OT e/50D@*Sjux52~y{ ?j(±kLKu[vKOwl!d\mMR1ȏY0̢U9n;f B#u0C8>Uޑk]&\ʅR ZLSs,UjO5s13;|Ԯt&!oZ;pC>qEۋz,|jr<ҶktӸr~b= GUMg{:-56.w(g`J]dP7@L)13x\הyqأ'qe&OH'[_eP7 K@v2%3U6W6˳-RcnU.K,8&~%L7+vؤCϚ -]x슠֛_*vg)EEgCJ!X)3GsH+@2?˲lT=!6k/j. ?Zb.>CGXy=q(~C*Nr%SLtBЂD z$a֍arՒٔ:g :td{NOnm_{8 P+^)maB<Mw'KT,QI@)RE &a64!^ZBYW` #UW/ǯGWξeJg$ $)u0(}Vmy9Iz/І?o)dPxB n-յtnZyS G)oG}*6\h%>}8 [FTS kue])ۃg1[}[E \L4[ڏz) !-L+RUCgO'ʸLmMV%]&1&).10{YM; 7VZ#e),lVLہ~c('DvcˇJ'%X/Sj4.hL=םBhۃTx6v7YBN"'зvU# 8a5d} 3O@:#=\/ڸӺݶAΆ_*D-Yd@ ꃍǑSP⁌NAm %a?3'WIMh#:C]KZ+}b={I wY8d3,n"8fmd=gɾhTo\H'iͲm;׆w9][,Qj`>؂[ҍɎjt}Շgzih{. q'H Y0/q|+Y1lRZ\=3rUEK39XWϢlP{+n9o ݉t*C4_6i>)p2FzfTC^"0FȞ.u0yy;{U*\5t!Gg;(!YހތȨ32O=f=r<!QQx=% p:9-n8/ۃ]N% tbaq4ߢH>>Y|_y'Uc>іN?NܓQ{6"_a) i(f`;|f8q4Y3:QVUJR1vG1ΒRGnS?T,F>w窴 N{H|Jb޴PԴb&'V6(4:X+k)4 H_Z3˃0x}C|,7;=,E߂1!q)3fpL,8rM1؏vK}nU׉ZK]`koqp kʔrlbS߇pÆ'hNx #UjwJ)Mܬy_[S[G ЅD=yRo.1sԃ _5!8*c Isٳ~|ap3jubT Y}/'6 TRm}웛ք̈́hVuUMUdDq`|X* X9-;p y-%^&˷ϓz=_Cd[hַޛn<5V-cxN E.鲞dGdҲ!1Ecq#.vALOX 0Nmh )SqxTy{ 6s|ևY&i[MCmo!mvJ #3]* u#hH l@+>bnvA*H7xmH:)[u+ ̗0=(4eBڟTYJvFu>m;U>(vQuo~3Hwz1:#MTN$\JD:P#<(ŎFە3Rz8A8=En211f'6 ܔv4KED5JSU嘚\ķ}fӔ>4wδ jZn.QlMջW<ԽWubv.릹xp4 ʤ>&e};pߘ8@#a0ܼ {q6:ݔD;A*ѳYz1U?` 2oYɺ+# \MF4kRX~?]'K5,gxDբ+f˚X6:tQ=tC$v),>+5掘uq_ *2+C@a/ " "'L6]u߾vvsfKcsZL)ggiKx|N{ J0 Ȉwl`Ry#R潳 CVJv_{h36L%*[Uֺ?d\X3*h}zRAw:'{,G@ Ys|#V73v@"7 $ZU{f`|}-M7Y!-i,dk h’l)ߐ`orޟ,o3/Ǘ<{]>]1L0w_ϟbY6>~ۼVZ*R5ڕ2]qrE;]h-M)EG^fܢCW@i\-Zz9h4XZ"D2Aír˫ ϡwQ$$UK(񔔙1'نkX^uWϲ7'yACR9>8f^s~ T0BmVB;|Do8^wä*@ iu?#f.ɬ!S]\sS®֮9ŋ>b;IDiZq'RVl2}v?Ju$_gLݛ`~Nۘ;|~y>ʔЎD"Т4IF S(yX*db"zbƶ$yb1Mc﬏+"ϨavU<O|rj}X+Euai߅dUl{ ۪|.{f: Y(I=UAzsn$~UBrJ(&Gq['bz? LLlF2LQfRW?׏A}!jl*| ]9[J+'d2oTIsfr%:؎sSasS_Jj[-AzY)EuDCa35ꁰK12'EuMe[4K ԺĠIHF~y'P1ɅT={ٞ8;<ֺ*#K}tYfwcH\ɜޮhK="U* ,Gj댎Amjk=6rHfwI<]HKn, 3 //v/˗[x_;ɿo}~y[/n g\?aD@u8 ΥAތFJjN`ыBl)9yE1n7[UzI#+ ~ ls,1g& v`69Č`GE5SkxVhO @m a#x3󙦏X&]ާ`pWkHچO;o3nb=NϜC#eދȭ* i|*p7?[D r9KH.D:H*yrT77>B2rW+,"!/ۚ#Xm q;&Nz$2G (`ϑvWA+lP)IaRVjU뀎&s P#dLT\qWnqO w|Z;Ƹ_b͒1-ו={A Ndx; WK̳o 6x\3X<В/ agyw0+p/Y6ճ|Ȩ2Ȭӛ,Z8*ѣ9 W1lъ)nj^x0?6}u^iG^i1m.|=I6\[Ҭνh4edW3s* C\8Hf)e,Ѭm݉K_{Gmi\S)h%n˞u_vYlucb9Vgam(5m^K,ÅDhP9y#[Ipūfn,2ᬜj*WN5lK?pg2wwz|7p5UOڃ E_,) 5tMftJ=h$JCߞ,$.3;J{x||Rda"n#z)>iWn>86Bf)%&'آS|#=q G %V8wO"zt6Kl+zu_f7ҭa7w Tj5QX8)?%p@z \%HP,M7@J^ 52DaDϲ!)\0.sxp+ˏpiզq͝a|zHPkPZVLn2_J́KMe%sViy|W&`B3<amI5or4^χi}DA[@@~6%n֡U4 R萝ڱ>/^f6LyS}rf݁4,w9I7yˌ6բt3]3BZ }xhj 8 ,Z'+4|e4"DP\; 5B N9\-%8mjGK\oBHWBD_cZKJ2DD6a)<d xc]wߑ`78)ƋM2& GGUMW,2M4#Hun׵5CbZU>GP 0:$^NvenFQRZ9Y*[/5k h.gF'lu_gG2v&Ņdq>bV`3 aEnzFhLn{=H>B6 p7+@u OI 6L~$HEjIA&}~~ҟ]~lYqe5O[$|1F־n@ڵ ֳԅ\%{٦Tu^/ ׋2<__R#sChK_>j< ,[6ZL*lmYhj3_6&=Q?|8vNgӕ"f* ,? 5? KN6>P_A2㘱o}$%URЫ '2~ŋeY%˹HnE|NRA%Qkzc(>ϐ5YHgUC!tXRg`<vM5tn8Qt(^OMך`Eߤr^֬y!*PzKױ>cљGz~~~Ÿz 6fB%xax^Ҧ!q0JrqDZq5 X6$\R ϗaZSeޔm%+9;29w"T˪r:<摢 Vܻ|9y6 lF} l$o55--U;\= =,MA+ϐ n%%1^[dnCAH^rˆ~MB2Dӝ\=O-G>RV-fEezOlby&N\cI dfOI☊ݡ&x,?sCً# WAisEU9M_i0~#se8lAbuwyeWx/nYČ\hy]p/طn E]"-1 uoZbJ}hZWW!>@"ZL E o9\ot\q ^׻|q|kJj2ᡏcq=| -XpMcr cLV6>(u͓DB]7juSkLr!2c)|,2ecnE#!YE3wgIxy~B?P?8b?#|zv ȡ3媬"dZ܀\?:Iq9xx=d1?ڞќH*":w/'joB3#,ߍu|!7R2I=ۃݒ׾45@ V:].nR\CceHD :@sE9<-RTW(1[09Fx1P&k|,8[ΤNPV-?Hܐt4O,ѫJ} t[9H뀭A8;k 9G8A-n85l9`5T RcXl0c[<1ބr}&>mMxPtajH!@| # SXgÅ%R6xXծbP) Jx6Tb kg\gݸ$s* KrM;wxg$pFP,#)6- r2-1W6~KLѺwV[o86!7?c_Ҽ_O<Ç]_zC ScPgI?*DdJXTVh?aR^~{6Lr{~ш3Yfu]sFs2ȇNʞ\hZpJ̼^˾YEIJؼYF8-X7E~}χt$p4|T-X^l'rқ >?CMEbj=Ԅ^UWL1$i}=LSh;B3"p?]cyvM)4Jmqe.)ܺ€ dD%TFJA:ړQ7lO-©Vlm̸߯oI4YMٴqr0cmIЂ;'K_Jt%&J//lڂ1 ꧛;|J?&I6#c2qqJQ [>cĀW=oAtۈ\SSgu?ۓ~ A(] `_S=|eTyp7G})3Ի-O@ wj ȭןyX,1*;~ܢI'Q|K{MvSSK^K5\qg5Ɉ }W\/B AWk (qݳ>*m ] mzG0魙b>6ZpziaY9֟ 6YOX||¥SvAKA,؄6nfbX;*v@ULXQ>cO2͡XzZNExFm(cC2' >r$9+vz}3%gOϝGZa=S`a'6JEe3Z:ށg`QGf4?C/Wi de-Zr1nѷlY 5=>9KD^c RFlӺUC,l͟J4o7kfȆY$˪*k,Y$->Jw7cV?؍YuX\,0z;qODR0K44魜$^DRI_LO33#EG|3Vz{[oA8u0[ P)>V:khD) YYzfpNi^w Z4[R7$H -)?/ +35)`g#sTEsjg]0iln|6u_.r 38 zXתTJ\^o[ӧt"EHտ]IqۏIyA^"*Z~@][7`ؗ/͐D&{ ֶ~V9r)ѫo߲s* $lz N[mo L:17~aYrca5&zLG~.3%xqjNˇF~9\lSw9nS.IǨ;Ap-)2Y٧$l7X2MysL*, %k/P+Uݩ?Ӭ dGN+'VLm=25zRHh\lU OeX/SgaN!'2p³jkMpb?)H%z"Iia-LⴛYc7vaZ~#V c?td%`Jeg(X7I>Z>mM*ӯ%gOl8MuDi~fi!Wa rMV`‹ƛU1 en P% X-VI`~~;9сe֋EpMJ%km}~5}Lq J^/bEV<O3 9d, | W7֞WD vw3|aŠlK܂H n|mF>"0(yGs;f6r|)a9wŮ rK7Uyep6g%QSOL.8}45Y%?-#G}ГK/U E7 ih\rA,]@9>; DV(o>U6inu42m))w \uHdի.#ma RX(8-)_pXRWӿU߼ؽ}^ ǣ`$ڐ, -5Q;3C ьPJ{:佬Mҝok12đD)wpUIlf~,Ď$x>\|'.|ʨA3®p7gWLOt ƈUc!%QVmɹkGV-*Vj;h?GUE]mK"znuzd}C+ ITz FF5$Xݼ=N|~P^V 3l+؂9g?g/FV KAJM, 4Re>9po.Vz,;7B4x&(nj1onD8 c.WEkI"'g%rp a䤥/ȡ뒿Yާ j!r]H)+,[7pb{=QXz%t]BOq gW1}, ٱO۫ϔ}PNDDJBݚYjxQLDyW;+ g}hmc:`p eXVEX=faʓEMI~Gy%1ŦJSQպڟ%a5(`ѕZЬ.c}*A%SUׂ3cqg.}x`0-\+*/L^zٺb{y&50G,iT]R̩gh`cs=w?8.,>La="pĠNdo(!ݼTZPr5gx]D>[w[93"5=>$(V¤)1zKU6yG͌[| '5: zA3PϹ3]-Grr}>[~ѹ~gIN ]ZAְKJSy* T ljuvR}:NhϾ!EOL5BYG@z1HT_;/{k4d==9g]o>Z"䯬𲹏h!z2@ϣ[p[ͳ곱CVl"{)b|[wYHYFu8*5Ʌߜ[䂜#gΓٵn]}K#ov ?{=ꉏO΂7?wjt׌XbHzKFQb tnYְuw^u{[NW6y~yf_䈯K- ϵ.e>e*v4*Cg@ 8o^`w :ǮF'la gΦrX#*q1OeR)Bra->%F$Um '{T|rNSYN#ICxReׇ,Iб޻|fڞ$!/XtVF esΆM4Zr- [-tP/-)P{};OԼ}L?}ɂ#{2x~Z-2۔AoHe~+X3*s.WkTo+~i:' z։^ "K{˜Ye6Ӟ )oX\1B3 JM4I@cZAܹBFhj"ʔJum.S :ތuJh M8/Q3mJ|TV[u~8?dC.mIĈϤmGRf.yf;ȧׅTX(B7ǗaPzc~JHiCĶ=y(&K@boNsq.d=>/ L/[#$ߏP#k|gz-FsV {yZ"kƛM0ԩ (م 1iЉd$zʴыOt'ێ7ء/Aw"/kMbtP4'\^kmfvUe dG&}V EXu&ZE$SsUO2v$@8<pҴm'k)2ONܝʙ0R@g,u _}O_H(f`%(8rQ/,1ԃ/FS(sxv\P[kV +t W2-.E1/4 KsE23[t6K+n0j%),1eC7eU {ҖǘCǶ\r<7,NKk:Nsb^zjfظ`o͠/%gŁ.z}}D? hn@3!8U'"V#L:5icn9۪hy5[Z$<&ap嵜P/6:"v5t`m.XR7%+A:)JR:/jS<рkqV7+1.% .gN;[5x=t+bY bLzkdݱЂONCƭ$E qj,&=yKJ bNwLa|bO0G8vG(;.9g*T̡ZeR=ݓj|Sw^'WAw詈HFHw_Lp`עC{',+>?NWtca*T}}c6]hg61"ٱ 5 k|DPk.K]kTTw¤Hn=֢?FXRiBK=8Jk ҽT6iz&S9bFtL LFo`9"LE rlZ>~W;,H&W/"v%.@GLT(>٘Ud8Uon45>kr )Qe)=ZfϢPo<Q-2z4!ψ%(kBwWkYst3[8Ψ@g23(Grs Ȕ,]1ra)L qM,aOӺ o?!l+A $V)c`hB_lSzTYLî⧓v8mL]q^`Nl`ju%DCIոs1SH7E:FFd^P̻TJWgP)e8)םRd]Y]vʣw(;uSASURp@S9M#qb-*E[uK Vol:]j$@бt$B\ b I.,Ҫbikԧsn a(>%NƌLIxB4lհ(^ FP|?;1~Z#,ds?4[TOZxn=)[c:A V})<ݫ`\gwA}ϼ)^A~|'rQQ1Սk߳*} ?h͜mJb&B6b/hڞ@} .l\9nUݚ1-;?#KEVpT8EF :` L[E>n*U9`EP7Bȿ<ZgI2E>BKB{"8R*}Լz2YpI_=eEo[7:9;O|bd , jq)hJRe?Bl 1>/Ÿ/NV4f6A~Z=D)*opN%qw3U0gkיi#yFFVL/hܓ+3e1ʓ zC+ξl9GrJd|DLփTW/חu7M΀ޯgFw1opmN? `L9[Hoft\A{#'nz"=]*26mA%>ûN M0y~ v+M30l={=.CXEEA(#%Ԏ>'9!4Y yŕ1$uTϭȃ`Q!z,wp;$-%'^B%VMhu%YmuA7B Hy5- |bE]|*25d'T"0eiZ˧$3z*Xn-0rCM1fI h8$1J\q-< xGٮjśE(i<4A}uzv0i0u_eZ,>VJ`(3wCnl /lVyG WBJt UTKrY%A E rt,Kg*3/H"I!0F??g_ gY X_*|$ ̶@+%XiQac$U9U}ȂAw@0.,:zbU3(N/8כ -|enS.mO)ȥs6 n[3&W^iNWnj'$< N=2Y&z}r|3:Ȅu+V3ޜ\@49K!صΡ %YGQ/ ɣ玑Ѫ"{pB .+D>ʁhИTTbc=ȕT@^[54J,'Y7@l͡6krjQ$ t9YKFWqsQK=޳/&jD+[q##m}^=- b*ӻ+b">q>|&P9h~? N|K+aƺe7<H&C+SQ̯߷VK8{jY"Q:c!;7HuAb݃QGټ *Њ56D83Үkg8ҭ r|Νcjgq[Oͺ֕1e/^*Tjcyo5 ڔ,Yº l/CCF4OD+9e J3ӉX 7+L.˂zD[ohOu4UN]R7@Ô Ы:یSVLd@xN.LKtzu%|oQT;tҔ_qsHR%qEy  Vq&TVAAn=.%[ hl. ֻ4 +.7% L?"ھ'uo%)wӺ[zk10b|,92 C@8:Q)7>B˛٢xH".m͉cdk^Myf&JUFэ,0|poR j(?bT) y&npnp,Jjqx5.gž.3AS0Zd Adކo>gnMH6#ƚGzZ n4S/=I4UV{|ТCBԾy2)I<ډ,XN((C|[vgm"s [w|A$v"3~ Iۣ^|?/mowMwۊthD^)Uu;[liǺҺ?䫆kޫd#.6YUG mo΄"P/Yy/*9L2cT\Q}H_՚!bh7 Ύ74ILOgȬP|M]֥?e |6p9?gM#WB}3 6(i{eX3ez\W \/<%Bȃ . B[ Sa$ RHTYLkU̬B.7(\O7 ?!T7~-hQ d <Ktez&O͵Ǭ6]Y6Ήh~ek0t #Y>{+J5Zm;y/l"ʼnNqE2!EҶz(42|>vFo &rl :V\K<ǘЏn]YE OfWr|Am06|A%a=cqjPi%ߕ2wygxlnYhe^^=5c]ځ%#$yY^nP>a+ aAT+Tf|Kh(3~~:3}c,<^Pևa1;O# 6zH--uei_maCT^\'u~W#h%XP gAB}pPtqrkI͙is0t m2rdh)sVpXE<efI+&mޚj 5n?6(ZWz;k=+˹1g7 >_k=VsUlqȺwlnۉ zE>ũg(g|⦜^ݴW-35v^a;Y^Kړd<Wdi9nls' Ҩj?Dmh2-˨g>o0uZwHR[yrb'Xoo+c=H-w\ҏLj- !*aw:_pI9 1SS{VY1A9as6'G2Urܖ_!Y5 }-Ywv`&󱛬KI 3Ga-US@y]v})fnee uv+E+&Ua?Pb!:+p%f.Yg$.蚥FC=YRz˖fQoJ\%L})ݯ<1!Cᶏu'(߆=Q^j8+ }^_z%-pͷCfv$RAnUlUOvL![ȏotgWˆĨ=8ݑѢmgt;*Y }Wk$R6pg$sgWgctJ2a# 2w +._[> {Em Mɡ nɧS9ǽ'Ug1U|,6vZ0!m9!4:ϭaz.a,kI[5[C7án|KFTopsy %4蠹5H 쟑Y~૿~6/gzk^%(Շ#Q%uY?Au(AHnYhuQcK8u2bY @<ɜ%FTsjw;lDKz:LxX$ Ĉ?Mɱ>b^+^_jhF_M(l6tPcPb@*5jfݪr YؿD A>yQ(oP_^Y4T}hڍ?Md]Ԟu҇V ǻLufgS9Q4`9`KrNmf$̾Ф:;)mWи9Nihn/ͤ >k!FiG5@j).ej3Rs)-\J^e-T S _1FF )Q¸QKL*W/aG3q(UGblMyGƝfTS/lr\!t9fPxYʵzCx\YczR`)1vIu`( ao}}+Q՜}q[ N$Hə@D`S`▦HP%-t^wz[!شGjb8`oX, PqczDJ\B6BP4GR>L%&C'<*?Sq5Rd#MeJNlkgsV^vM %vgMO6 !S蓹e.Vϩ|2D]ҍ+AGegڋuޮk* L tAUMmio~l'p=nLCe(bX\Rí)IԘ4;I?|PTƬ4Op]K jQ(4̄f LBn*AF?jlNָ*"`g7phy(K"+Q9^l%%®LvD-MU #|YcWt$D,66u͞ʾnkkʷ[J?ٶ `Fs[߾Qtg8׬G}h}z2:ԣG>e'나Rrä^"і u9EϯOŮ$#'e{J=q=V ƓI~2 xpZ/1?q05^Rz׬A6>ey9M`L |M|dqgS£xdq:YW `y#c,m[Wl 6=VGKClaHN vG mdVK>vtzf] 0 ;\X[!*S o]4&G >fv"_ھ}L#釠'lĎH<%;qߊaČ%ZW*[#QlA\zOeֈqЎXOM?YAx0Ugam)E!AM 3̰'M۪2qթ!\Xk: a7Wis^FTtmԦ[p]K_SJ\pv1.4MnJrAU9%Uz ոFȈ ,,_u %=NY?4LlwG޼2EKS`*ztXSl}]]lsYCJpUUsϚ۝\W"\lU4C1'xXs_N/VlU|rD8}:3~p1)lw)2FQqȾ#V"-}+'[UKdBxSGȴs+|cQ T3ACђ"Uti. PZ֧(ޛ!Ut˫Y`M2HeľWw;ZtʈfH"i͇X<vG ku4O4Jj<>=Ġ&G|Alg7cfW63GxNiZ2IGr.YlmON~R%VQ 9_P IX i>uQ-ব WRmϜf1viVf焕]7+o92 %UBhLQ7[UVO:昞(7(3f̟F7 Cj#VM(`x3^ PRBoC;֩JbdV9@K*<+J*ǀP1@>(μ%b}FGf7Pv~N0ە*m}:,FC]@-Q60*2٧$ gB@z`'XūuuX^i}x#Pٞ4" ;dS7E|kR{mس}DI'1MI?ֻ!oAur: dA[-`%cf[k:S)*q};Ojxn (\ZtqvFo}QHl$PJ/XGO!Ѯ`gp"[t.yVӊx.c psyеzQ;%~2%F WaOdƙcՃuקBwu;F zc',ruڱȺ%?tz׵Ԙq(I5vܼmaF0cq\) f"+4&o^ޯ`iE{C^]t_=.؀XfQ>hFMsM?&_Zٕs|F*cckQ7|3m't9%\Ux9f|dxco{n;вc߷PfY&T kaPJ(Q5"e硔Ƥ3&X/gJxNN2-nAܺm`Gj.:Y(߁2as㍽%$x k.𼭘'~g'yj44ۚa †v %feˮX<hxbobg좦I3[>6Mnȯ/&>A9fq3ں`MC=5DAwu|j!%}>vRhq!A&uRB-U|)<볰&ĝFko=W0H-VO}GlcPуP͈h|.nT%B 5z uQ><gdPkrg\A|ð>ܿ-}~~f~Ze)= F{Bq57n*iFUl&%xsԤuԽΞM">מ;O0TM"ؚzSv,l!F١D С" Hm%ۓl1ާ"ޭ3,vD:μq3x1{9dwQp4!=cQ\_}&H;`c_w-q:lOI2B?_&T)q.*)ҟ0wձs>fb~>Lz* `}hκ3;zxc{Ld*[Geş4jn-c#7+l '(g=j0c(Nt~Ur'iq^V1z~iQǁmC9mW~qe~+1HCJŕxzOj:|NhQ:vp8w|\ 1rլ \EGߍNS\?^BYM. ϼXfC. X:D^pU}Ŷ$s!XLy-[L 7P*5 >` #WlTP-:MZ*v!ls*}~Ԋqǧ r'K h|J*Wh#25K.ԢL7 cxWEa1>m5 cC[rbVI|Pd ИQTīiZUqR3:r mq.MՏ] q %t^K/P#5koM6x}*9:~eF#c8}tͶ!v[fH"~U (_n!(ʘYht#S~e Vyn}TnŮN\t-gjЅF14}Acu)Uysd0(X̿3BMO+;0y'"r.,fɫB`*.#RlLRQ!oĜd-!Қɹ%8+(;Ex3XJ:\Om=U8uX; M< Z/MOr(/ M@;3z~wD!\5~U %SSQuX ejkt!?jܤfau=RШʵD㟐{nLV-Cz,) tYW>*|<.װ࿢Il͓+WCOc+WMAkzDl -Ndlߜݍ8k|10XpS;$ f_X]Qӊkuѯ)sL~/^wÒ0Y|ʻm싁l|؃4v ?~'Noҳt1<%#.kr]]Ps$B-ikfkCG]|ŧ")WGyՅ.]-'`XbG$Ƹ^`!T_5U#,H|bnOI)X%lzc<*,mJ;W!"vaΠXڂWJŀ$߾T Wn YIȶ:`J/Zk-Ţ<8IeqbkϺmΝCϐ˯ )7u).n\c4WY%և]e|;!ڄg(D8D'\ܑ*DG^}Y%tUxdVo8p_I1٨>ҥX 1煉љ-Hz|]n\Q5,3~=D>‰DkUɻ}I!\!ʆ(&X)۬Cku>ZIjŦB e hkLbe9** żT|BAl|Ȯ7By!r|s%M_@z"ezX[|Bl2Sw;hŸg`kV/Rq[l Ϊ*FuV&5jG:b%5c>!Sm668$+ ?jNJіߕ:^`X!2T"ҫhCȮ}"(ZԅzFnnE"7z?v%I(R֫=ZT(J9Ga8؆A sw{~ϿUw/6bfK $^ YIEu(i LiΦM^P c>t^mthฉ{K1Dr ^~xV\"M5@.QJrÙ ҫw|pf[ Qr4MΙbP\ig^|0vfkG GwUV}Hi7db?tofצ+G[܊!>l]$(z%Go CxΒ.#%>^&e6#P]kڱGt%#*ZHQ]H6(uŇpϷO#JgNOK(`a)FXY$fs݉q-:ake,OS)3fdkRRADju@ǩ v_B5LH;*Ïd2zDfџl=z@m!sܣgH:t*ML"Ze QY:;)X 2BN#=68wm:YK!Ԯ>3eJj E\Fs/qf Amn )$|f΢P[\'hVtOnCx w:#TEX)EBy`ѫx)Ë Ѻ CVq^o BY+ۋ.5 !qik\9 8 zeG+{Jh^jqba%A#(c`iK^XćП8<ȑɒtF,i.wDբD򄂍:yMH֋l$sfPfr8+RC2FdDrҞ|=J;QӉ} *tS"ڣJ w%9l}Ϯڹc9-Zdܶv&XaщW H tPegzPPoANBf1hȳc K6P0r(vþB+-WOjDՁ؉Mϰ&0(DNiQ5LH̉ȃXׅs򥶚7j25Y_Ph!3zSf1&wMP)|qjy2 X;fC6 A.%x Ep8ks 8}\n"@^F 0@&pH Q]+ D%1q5RnJ rڋnլCηKלAYD dý&ؐԋb^IF}gvg }:%b=RBj{'E?N-cy;h9nlCZ?|X'|p u*r<%]G~('k+Rvtd,on\2fR"Ҍխijd:E(2k}I;g:s䅬S5Bx'7jdo/:R~й3d0x8!]kNZ& sNENFM~}^) +,c6BwjVˈ&e4׈XXM*~Ao̖rtk + Vi?+7ڙz`[R:Gzev^5M>Dma<^ ~u1z]űlM){Qωdcw `7Y>oCtrjW'Jw]&9ȌsA}']-ufՖ "^~2u Էzj`j7y͋48C.:x s~H'4WlF׽$ezI΋q\'I /P$@Fڌ >ϷjСM-a`e xǿKp/7c gUKuC5*/1oozi,Z2-~$P;掹GXͿ5FR.vc)׌?llMӰ)9` mqIN[17TTZ?Www@~a8o`` 1).e9 nƇ!A`Z˪ߙG$U±垡.6s>C8$mQK0ґìֻ:MY8;U;uf_Wfz)EV&wGnP)2HaLUUO9 v$?B_$MX[g[ʍ+'+q_`z~"g>jB`?§,:;z*3;IKu-K8˓4Į3OPZҥY2Kk@HdlW>O|+/rÄl.(׭.~<>HF5^zReE>ζ]f LgzX5UYڅ!i4}"u v>Twzyf^(=Xe&.顺vd@Ia]Hybt2nZo+hW0o%j\(_8s?BeE( ȣ5@@v xQ{+X-^gޞt:mN)'lk#>߀o) ͇~,gqIN0!FԿF[Ӿ)Ð$liz_=+ h*bw3.՜<2RFW[d~a݂t9֒}` {&kwo5"ٟo)zL^rT'ͳBM{qVaU\2v댶^K՝O{ݡT/`)`-k5H7aAe[B%2A0Vv n{a\O;cų@J:~ZLQ܊GJVǐSb|!KuVpF[k"ZZT: 6K{}*% M hY8}#QkRcf}!ok#ߢ8np *gpU@⋳4xCn& ]Tu>A9x "蔖iS,-/;.bhgo`\u%RV~?*ڽVaz ?2[%xמy̡|k83~bnŖ}m|;Y2A,Bk6ŸK\`0묪(l}QVYػ cfƫZ,ԪI}rMk2n% /\C(PxRٺk li5U@*P6=#!şo 9@Y0=S6\|$0H-]&bEFgM%;"9㹺G:-,86^jm1\ J< 7̼޷mL0m}զ>2nި|kK=赸\M[h! ;i $bko5ZjazEkdQ׏[b񏤰=RF)AYkri`Cη5oWql۞s7T^Jeaho]ڴE4jpQz%!u~O_O1FwL,.9:k83(ouvIO7M`ـGP MW@sХF]%gGQ>%F&ݥ泰嘣WZ]u?  jN9=Lօ+i'E#z:rTFME$0grJ: ?wԨXRRF6[Mbӫ0 /cYJxdo_1q"W"H6$yD''r 2DEIbdGK|`/ gr~0p͛U Z o)( l<Y?w [&D/vsWb;QlKsRЦ{\E:З,wfB M4o&jt!8wWc:sZj:`p}xˁ U}n0dN8t GIڧd&ȴ`T2X) n{)Z%iӈ4@ΚU ?PYX\HM$znf>2]O̺rk8"ѠU9p% ݀FRYvNqkKW>4znuW/A4Aim퐰*R7 J qRgT`#k* L~f뇵MD'X?p',(SROґKp{7*#;OBBC uj-Iw" qߒ^el5v:O7iŌF~FJFӌBa Jj}_CQzvknX[}ȻU>=h6 ˌpCZBkks}R9He&Yr>tBvh͋I ` f7~?$G nYrucD8z`$ά<&5o2L\#'>ɓͩ0 zzo+% .`)>Lbw!aoь$x?t.ΔoɽցvFO@/JGOI('Zm֭cm0hV/<̜RSj89B LvOz1*5Ϲ{ޜv$I$kJw% j5CN-OUN(Ieq6rZf~F.ň 3n0>y;`hUة˹oyT?Ƞ*vb܎;^rdgҞ/G/04abL.[X&#Ť8ؖP\R|};lUŕh`o8Cǥ@Vh Iγ F +7O0ns1ПA$"jO~^S-Б'[em #GVGc+L-x̿!\YB>V/Tfkpԗ&ax"o`V+pb!1apY:]Jgy65 .Y [ Ѫ_Sfv3= :xZcjGUQDZsRy|pf]A~[H9YatJ)gs]'-|{0Q~XGs;ڤdT4} ʼ1z̆+;th?J"^N<)2}k\BN|ăZTsj7GloA]KjI}Y'Y%A~]Ot33V @RR^1}{܇J?tn?\fq.Bw(nc gH2ZIwL ''֎hg}|=P1,i]G6N8ڔ{:-Ŏ4IV>23'%g N‰^oȬnM=3!#2Tc!ϐKI[o$ `HvS̶0,z<\΂G+)n :_,f>7O} KDWl%<˟b4鹜}0TK!9 ysxW$HħG|"h}hjA>B:h9YQ2 `*BcRcrfCLEi{6i m[5 xhaBP igDssТ̍r~ͤ+ܒLz6_gpPݮyQۅ Q:^KE {_? ܊ص4OX[rgi^#K\?g=3Gb}Zrǝ~W_V9hh@xnvCm*0 b;Og8-.]GzfI W>ns*8lc'Dcx sjG[Ѹ)y~Jd3ewL<:C'kz:ޝ[)B *\iŃ_.=u%j5IOh( 9 Vzffr-)3'}a+;5\ēL(GqSjޟ?0퉮P7venzb[+ گ@FNNH>dsA3c荣f,DWfSr9 %Oˆ0+;Is'vV,'!mXoqxh;CNó3ǤY@/,bƑRf# q4s_JLm;௫I-`i_SƩl1޿2Zo̜ƁAuW lYsp<[^ی zucsx,^.dpc.%F  >s@(޷=\M]h- ){ 殘,cp*c~h38jXJ7e>+)t}ޱN%U˥$z+`șåsӺU!F& /F}3q|y7Ȕ7!18|0lyStqj jrZ'w ',o}C>򗋯?̅i|-$hMZIJO6fګ_3H{Y(k}mg *R4zsӪniS.]O]YZ4{bXS&ܿ rԸޡ~dgy&j7m/GWI9 j#;?{U$]/ePC(|[|R zQ覓P [5it?\ шX߶nY@VbhdF(tr)zM5|:=r򝝊>'/jK,*y~ئGځr"۞cλk;(W=rͰ؀% Wyfl{`yQ-J.Ag;a?3am2AiWmy.#+*KXD?Y"%^!G^f TZ:p 5V}թ7DnGwz%A_y/BbzzPLQ> _mVjC1w!:\݇;YMsߝ &TU{U[aרglvWKZ~@;pvېJ~F\|7)cڵx৶C (V"kL!D߽_Z1Ij]i Sq:qB6Yѹ>wE%0 -I}`;e=8 Iqxv׽SejCPagva5P,ly,`c(3pR1 氃bԥ!Lb&;ѯ7!5dV3gP>>N/FEB w@>|F,13\#Oډ:; E7WDpz3%65r`I`[P4ZhS hzׯդnpMbQ;᮸6!K`_UօƒAИԱ$"mnF$#p _Iŋv~M Kn㬴 n7FYZ{ f]d] \`kqx "C"K1{@UG܂~ i5!!Cj.m$9T٭dq e42]-Es}Y?/o9"9<)L}p.e?,=*+\v jX >'V$Нӑս}3y2JJDk6kL*{P(vd3;Xh9mV qM.fsZlS )bwe<[o_4m~d8e{x00F?&!e>]|DS*km=@[ӷ0V^ ö[ĭyx*&_!v SC^W) 1S}9OH8}7]ZG!pZMk?Mwu^b A@:}J%w|J6L2+~ZpTt1+Ԫے {)= BnB|Dl|e [G6P<g0l|=R& Dh]_swfL}6hл;>sC 2ԶIq~Fˮi:J?~Ǜ|s?d?M?Z&vՂWd gSyiwܣ1l*y̏w];wKK'kSs'Iъ2 ?Lﭿ1V}i{InK;HX;DR o"dz!o^O;Yqe滀֓},Ռ VwzNgp݃mOl96?:`cڽ֥m뙤 'ݓX˝@Cq>ذmnG >/ =i~3wtoHo-rgdl͋+腭Va>d xVox!''#pc>;40}m#߷]F˿>t kl4T%-2dVц[;$nVK{ -VΊ;5GzކVN( ̟jkNP|N5yius7HMwc]O#tEƄ&Ή~iԠأ qL;+X#sK<ή2%\(Y(U[ =+)bAfNv_+(%'niµi/56LD`B.SU_.WBS2,!>>zw4`"+niOe&͢sBYؤ4:bdHkx r(ǝؑ{PV 0'L7sZH7fxٸrSn n^]P.ЩIR C F_لiq$EI+tb01He`FP֔I>N?- .$cPEb.rׂza9F`fBvp6IrJ 1 $㓱`- \摗3Ea9_A\ux3I@\/rܼd.m*ժѼ羸(ٞ\JU$thg NT@PE7(a"=dE}6\.WŞH+va-} B3M̺ @(!IBKs"U=LFHW}4H8|"fm(M{CB `'|Vgw]a.93XT W _$ bf#Afˌdg!G%'(Sm}F[}*Sd9 }CAK@T>`rX=0թ4t (>7Y>,hB¤TNpx骪1OSlx9Kf΅d7t% B;BJ֠NHt!a:oD%x /6Vj&Dm߀X \g,c8ۛ+ g6@wI9-%hLsNgJDؗ/;eg^!P1ٌ,aӪ3*>nt">6̒<2>F~)ݠ 9P{v3^hF-zBWVB$E,oFްጘ&@lp=8OZbu^gf'ED>6)n.:FLbG7P(xS<,;(Q̦ l}:"mM12#;Fᱹ.ola(Rr(t#9`#Vb]>m`lӶ'?,L;Jn&j_¸ [#2ۭ`(GK\͓9_!,/9.po tP}W 8:y-'(K;gKU?Le뉌 hPnY!1[RKY]> ލ΃a`\c)JLek=?NICa)I;GT=8D>*y5ζz<}EͯӈTn7-=m$Zya]RH2p*43Er&/cyNܶuOq2u>qxIRwͽGoMys2WLaTI`05(u_QۀG7Q([Z> W _# x^x0F߃M"ͤ'I4;4uE{p:a#NǓm-[sȫץLwgJl@0r~0]мWS8~BNF>R{wh =|T>Y$H>Y]GX`sB#PpC"cE*yd fu`9$!B!9.=3"/l_]n wt|Cl>bz*gRb3eٞ$O&%Wȋ ވ`(9!)_b| Zyn[p}%ɸgm=GrC`O'5eR- 邗`v?ƒ|߶s.Vcdޏ2)"\].1: ݱL3i⦗sШ;l{$ne?G'0{Y%%RɌpFu)睏TP2<>֡ϒ.ʂyO[= kʔޮv}ng~짍%iU-v1ΛVtd"/T(!"uPe$Y{|*M;n;ݙQC_* #?ۅGno yKYWFփ‡حfHi\r( 23HE&Cꛥ^ԒkmOPLqhJ+Ad9^rj<cmپo>сVRxi/6hVL^Sאj7rvT̶GAjWY5W+fmͱ^K6 h́Hܾt8]TN~Z#>ŋ) #[c̸+G3kMW[_>d;t>~G@h_:: tU%09`SXk6wm ?wIp`@f :=g4uVKL/ [+u_HwIB i󽈜7*V|Ϥ|m7"EAK!k1 vIsaf})ݖJQi3%*B#jviNQQf np9Ǖ̃Ҙ\tC\*MH-a]1nc^rۭ {q1?LKWTY{Q$ }. t^VP6`7mUm?YV9kSؖ͜!:8"Zh 8Ufsmse1;UD}.@[Ԟ,N@it OlW|çi ЫMbn6NHQ9ñƞc ђciᖒT9?9v몮2{0umeF" ]зxEJ'dXÆ8Ex`lL ܚcw㒺ٸUI.LeiOP.SYіL0=q&)'Nj(ݘeRw ȤE!V[OIUX'٦g:W=IdߙUgx:%"D>: k"$tUBhqk I |q%_ʍ;*赋Iܣ@кB&#@¯5JK2)|\x>>bwQ|4k'oCp%/͏ꫬA KVFVc sa7so|ITSoKemHk {Y8 vȞV5%[E LavQ|ZkƘ)G8hjѵ YX/z45~ d0{.}VMw)8/OVvK Vy<766K!msGvR]ڶՕ(}6ō7Bsv7>0ox{ˆ ";>oq76_'c&V΋% 3ԃ8V6Dq6IMjlp;eҴnr$Y;iMC'"WiIfӆPS>*;KG @CcXmCzhBEM JTVHGUGEִ?(-igͳeWalAQ֝&V1࣭ .`N΁8Rl"gȦnbaWo$,ߤJ`G8R"/"pl8[Ƶgk;=E%P eV[MJ@1|4?,AWE4ZQ(Q(rhVQ/n5&i)BWaꄞXb$oػ$]RRGNgfvCIasOaF[ȢN co}nMw@q6u㹈Ũ'Kž!]%_R{;opyxP:JCj3&/IC !:kvFeg@ۋGR>{s<zck.M 3e|}SʖYu R@Te l{I,S5G+A:D7igT+1jw m򍼽!3(/b!9ư=xqrר%11s,>h fLgL cIĪ*%VX+*ηI03cmX*~3\QXƞsr4{)kt} eS'U`R0Nt Ȩ=KK(ʃKE_Q_݃ݚDM%vBAEG\SQUѺk/@1̓Zѿbi&O^#vq4$y]uBRt&GZgJ \:Ӿkhb+4cxcZ.XSC tgKވ`|gCQNǠ< ]н5!ޟ @4VH! hpb ?Eb,v=ha9Ý nw7ѽ÷l{/Ac(>cK}[ oΎM #KIRęuDF(Q4|k4[aK/{Lf5uOdVyz80@>R>6}2{axXn £_Ux>akfI4ydZZJY42âjp84:zZDl<7ɓ 0~ ξoڟDzקT/@`>z|MpIxPm̬O0ô϶osbU&z|[B9>p qtBU3ug{$HXqLc[)otZ(pc %l[V}YZJ~A.}<dC3LaH_3Ӹ2sϰoʵݘ؄q"v 1tV݀ { `w9Rv8B NVƦk%x5^,V]@^y-B:6ÃOv|%x>R_MؗkuW\1dG7B0k VM^] X;f`F-oySXy{mx)W5`?Wfq)óDv2_v$*1w[g;ɠE[(6(SV)cJOld`OPf3L8GUOzzuN{yBo|{|kw?D%t+(/MdY@UxwFTqS-7g)x= Өh ],$J^'sQ쁩iap6[ iPqJS[|+Bwu;aVa=%ڝFR؃}e/M!]@q9t<6}C#U= y#QeoD'ǧ̠~N b*ƝΊ,rxCMW8gHSy i1Qo,r"ǵ B1课D [2d}X0[":H pI&Xm`~Cw6$E&Wfed)`\\P+S0\pL6/z[re&G*U2MpS}a]q{l]`u'+ dR(, 2؈Ej+LC Fjs$Ad.`Z40LPf;]! h,ΡbY$s5B쾠6v\_)]vcn-G1Ez"d4+zv!蕠%F>e%m*m{=!T7? w]}/|Ϭ䮱3mV*M9f VH?rz?vao龊uoA0nKDmKAx`F=x'9uZtߨ5rcG]_;AygJ>GĐjT&+ő&ɒ{k)4UUi ETC+:-5n E xD&Cw7#^$ B J{Dq6RJ5' .Z5؃vJmrW]"(="~)8v9&H,]|\9|@ʡ 1K- 0C :mAz*SSFHNwL _(L((zH j/;`j wTo+|ac䜋FS@Gz8ᙴgϼ6Qv]5Ed2 ߊä KE"s yl8cCn˽M.W;VK*2j^_q9}ʙ=c!)${O31Il1|WiKvZòZzvvpJys= qVV2"a%;)x7Tu3fYev)*rJAhb;p]ЫսˆdN:1`ٶ qDlN߆ܺN y7ܽ?O&Da{G7Ru?{W}fƲK7wSN&AKӤZ∧{SlyJVmaG:_?Sp^N{ m} 2\h X和&97]؜:bT>sp5^j =nch؇nKPC"ݕ"I ۓuQl$%,@[8;/~ׯzC8ӠqO'bM=Qˋ 71$f'ߔJölw٨1jU%fTuK| 9Ȏ;BkF`lz* TRx, "ݹ`uMx~бU3=.7:l|LĨ'B GZڻ)>$OֶL8P5]P1q%ʃ8+ǒPl>c"^@H Ϣpݫ%9%YFLZ1Mt3jp=A>_ZI@8j(chqZ΃ Nf'bCևl-whb6oyQG+H[׊\"Zd)VY&^`SH)Nj0Mnj%"0!RG Uk|J)L%/hA?!L7,v6d2nď$qU l4R)9j$a&+: 6FmE홊nISt' 0j%5s>OdIlzrARsqx\AǢ4 |\ 0fIʣ->+89I08JJ_u*e['d䔕N;d1ȟɻoIKB!WowY gDS'KLV[ڲf1Qu!ocb58 ׼řr8c7^`t#KaR)Le+Ò3 2BR=ds\RcpWQ1'I| T }%  og꒱ѷ9``$W/}L6oRoXLmuI/4/ [@JU'EQjG ҰpP گ#[NXF̘b N!XQq$!xrm8#sZ"-'֧.enZEz.[#6(O mEIS@n5AAKtBj14Qx.r)sn84^Gn[nIY«ty,DoW:;z tD*#JlѫN['l&&ąTz_0|Hz|Xz[WV}F ۢmpIͮGwBT--۔_ HZm+TTiG;-O:Z|@e6 42u]WLnH*a-SSxNc.N~Eқ{2(ZƦd:/S](7N|ڻt`ym#3+%&+dkחEW{~eKtā@+sbcsx?fWވ_$#uŒʛo/]q \sh bͿ=;f(Pꅛ3ÃGec)*v^e?_Ҿ&!Xy(ꒁq`Aޮ2H>wP][A1D\QԀ}ߦe%W kmU< ,^hEAh]h%r-oj7>r]ש>& M&@Wmpi #WJcpnE~[O`/w$@J٨pFTh-% ,1E/*0շp- rˈ/z.N JRy$͞!n@>vvئDUcFAwfFcy# ӓCM'X^b0{4vg»] RG8Q-vz]#ʱ(#ַ/ m28dX{ . h@OOxY.S OK=W?;jd{vG,׏oj>m:ťd^(-8zgRxA/10 lc'y#3&AO%x|JCvKi a~cIDs7}*(hoƭ4xyQ,(Snr^U)5C[-7=6`)8}͖ӾИlg@( ?݋҆EL@!`; kgvlp*-V hNW)郁;97/~fWKg|d P[so cfiiJ4Ȗ'8Vg[0n?AޮƇρ+'lvd{h2P{pu{ S-y&ܮQ3Q;FӥKD㍜ytGv)Xg3:-G)?g?\P1*r \!+52dV秡n~)Ӗ!x,@!'E>6o,2_qo DPlFݸi]:>]|u-Qz!5(8D(h]*E;3û>{ͻ՜`Nt&WHF ^yZD[U(`jA#MTOyP* @FMiTOw2kڨ%z7yUFok?:-F7/ 'n%iowlW`HJ,%qZZI٧qŒѳϱ~%9s|2)mۍ#9 yhOb9 3A|3(Rlݏ7CnRwօ5-H3,f3<كG} )Qʹ}0n*Tl,2ӳ[B:B6F+D&=j]7;3#"!BŨ.#ZbGE8јNb+teQ2}d^fAy4%`Hn;N9y d݋OLcsPF&wD jէsOm b)Znc T{[,aR56N'6֜K5,KӛI K1M~m<]/fk@Ve35;3@/ paba1#9KN)IhpXtz I'`wa-Z1ϏI}2=AMW5:00n.o:k81Ԇ=ç#&gjWD BX_XL&wgк+ȔpeyƗ}JL&Iɸ^`ZoQX8[?gTנvlbѺA6-͙A =xHy%0|{hgfWUq4}[c(`5T ged8c]8><.08/ge@6Z3 Jt\fʿL3ѓ*V2 w Ou U?O߁;i"r]mPGKRsNjPtmC/2n+FkSh߲Z+Q *x?b P v܊y+RSnDfJU 郢2:^ eAU-ٺ%z*S+"[n5KXz)jcyC.Ve+@Ы6p(?7mIB5O?~e+;$ trҚY@ӰCeגG|$y܆K/uHLa0 '$^<qƢKZCؙaʵJUe^}}r?#&d &W>pˆwl)=xncENUo=#MB|uEt *_C|訆+C^4cm\Xw_W!_=>pE|]GK`Z%hQBh/tS2QxY)!j򀪉$mhokMgW-\;gHyfEa}-0bQ Э|7#]eg= SßoWLy):iMCVf֞ݒcWSSЯK#kTܘ_A8<Lw2ܶnG9`wLikG!o5V~ͮ `Ov?3$ӝsΪ$\=Z0:~Qz < 7PmT?~諴ZoG@ jEl5QgӃUq&V0d]bd%6hKRo"BՃ~RJydl\bdzT+4bb>W'|wKwOew Yf;"$ۯԓpo=~vKykF5nVAKEOV9-\.!d(i1˰,vF .{̒v"*aFCBgB=Paպʾ9{(Q̜6joRJӂs懫gDjM۳p4tg?&֫R/aUdoeFlG'-T#3&.XD<ؾFslw)uן6W0%hWă\Q䒟IcB㼺CU~][\,дqVX\xl/LO'zD݉B#S)gΠXG)Vۨ&G;> ՚I$7KfԤ^$#}-iG4M8 ~֠Tc=4x~ث}/A^K/ۈtl hLo'W?҄[r <$pKXyم=(~e;h29B}LI@W7L6Ydoƍ_^J y(V7q~=~cU1 _E NBxyf8 ׁUV{g_ZtD lM͇PDD.Ӛ6xcUWu#FP]>G:4x2fs7y1f́i+`%0AȾ""$o_=IhiO6EU263wEAN]T+D9KZ7Ԟ SGr[Vn*[1.L$tvƵhXժ}n=fy-Mz@QMs[GPI JJ$V[%.%dIkKb`:+~ oO1@c")cLCXoO!L.AFD؈AФ߹Mه;_Wș{ͭJ[>~EOX {H:T6Uh| \.b"wy 2ZOΖ)  l|YLh}ݒ}fp؉2 At|Qr"0N!rpAJ\w Ktu“ջ09H;n.`ܥ^^p޵grWكh'z[|fcuo߹gMxȠFu1l++l6AZ}# )d_.p8_KoSϋ.bhj?V`K-8z{dәVN.“uN0TXqp[G=zr yN"%̏L J1U؀_Qh-i;[o֜6y #o ŅdL{l`U;||1(n <)j#`+B~"%yԍJMD @ձJpNWr ^7 ɽ ~?y{A} h}jv>9T{2B[KwT%y  ՕSS"(k6FgzNO>G[Xemv#>屔(^? 0"$a33.$?EQF-R1*kNpΚE\bS!H}t"^<+ep0NI5lydHݍNsFc(U9كwG:{ҞO=Ҽ`k=\s`_ c\>7̏x\jc3ZÔn/3Gf)aljT8,L)#v@-;bCUCXuh(YEdPyqeiA՛|S۰UC CPҠh?T?#pclyNQ|֜Muc*0k楷[Y O'2C\!Q لx$y7zs3nhр]UOҩF:lrA>?Gbُdžx@S3U v51c厽n]zYS!WCذ˥dgк]oCo [?T孺-Ihȝ83g~zP_8>Jg[Ajbfsc>e"  ‘Y҇ӫUq{!SOzI\4![ ߵ\1&.~6kXzpSC;CmpUAYަ8o9}N lwwy,,Rsk@'4,:b2F8urm0 5~ðId4Cŝ Ab\RjWnlĿ~ˠPEF̪M`-ر_`d3IYb@H=-C$=X+`|2cʏxr$qafrͭ:B(Mכb @hmoLfMo^_ laTe9&3!-+k5.>2#3a#q+gT]@tg׏_f&qSެ+oJᾹƍ'_9$/`o[oGfB NTc紾n ă}RN vPԻ(oEP̓[Ѫ{(zSJ)ʒRW)J =z(lGvhW'0oCT?a]9Ʈ} r~ʐRZSnDBAXNA5]x`yAxIX`~ ms?l:H֑|{RpV)3|0w:gu>\b-fOxs2F{0UDZ *qDmP Y>,ƌлvkE,'FsjҚAo](a뮵z9t5iVj/v"k)87/1'<G([i QO ,XQc}xR>YZ7]oli"I\娮+/vep7;a2~:/iHܹHDlnNptkLRU-qPŠï],v%C\]CT@SrY>ܤҔaI-]lah\ay 'vgKZ^ F!#t}H,t__M;`cP Lc7Jp{PVPbrFg`L8ٱW?ID,~ x[arkm3 %mzm&B|=f,J&M3rl"B[M{0~ SoAF@-;qaz$a !WL^N00,a|Il:`#Ӿ3'\fϣro}}{Y~uVş3]wuK3 ClC"n]#z^ɡtAι)kXy_Urg]:PDވې',rqޏE)PgN[k:X|N\>Ww|WJ{`U3Q!;)u,C>J|:˃Gp ,zPw{2*v~h @ 3\?=  n13q򸍏uFKyks8macu >/ wFl%Рż "SE6fvUpXA`IL\3^3a.LN]AtAb="e(SBoRb4{Rd#vkf2tU/?ZFf39dU ?\~taS!vWl+)5+ '4o~M]HY3݆dUD?} 1<Zez3h  Swfch8tAC~WGb3-PR8{MWjo P{{x|9):rcNF_R_tۻԭsDO{>8oy>i+'߲a>pIzUO\5-s~,{AxbP2Lv[ /# P4J)"rǚۀ 6\)QؘpώTb^}(kq`ɗb,gJ4- x,|W^ʍvux+<rFhRV)_2{:(m͙}UW6hE7r"Brp/Tzz Nf3'|iV[I W^p*'v Gu0ҜԪ^I^l.^ïH[V J+w%[!0NkXIYe񍝷kû>[1~SإųF;_8Zu.B;o/gM=_qR_yZ@}4Ss.V.e#}֊غ`2.6yw ([vuuk7 fV>ؘ&[_bd쫘5[}GH|t%e?Lk* "#J4 Ĥk:-N6ihwm.5F46W!ܧ"O$5>vcvNΥw(v, 5zM_oDInv'pKJٴ\-%*|Я,#yBr:˼@Rb: wxQ6E|pNGG x;]YwЌ>1{,nBJȕ0$i@%yYpIq}&uiRdq m]̅qxY,<&dpgowbGQny^\Cse#8)M˔/S*݂5)O,{3:aVpCS=~`bu2 XL|1tn=>%ɀ/t*԰ycI^$$Вufq^\śEgIzLd݉[ OMY%o4+9SexAsu i)sy_NBQ,5ЦHmEqf|, "b)U_ K6:²6T7TU1'el+/0Ḭg4ϙDAg/a {WoBد= /)f13DWO@t[lc.&hT/8Ք^m{&cqPr00Me*L斾޼Y]g ǁ<&QN׋?Q-"2Nt ^"'"XGߪcN=jqxC|xXvv}Hgm^,,9UmT0 #W0v[h t d9"v_J{mݛ:Նl>L'Z5K&^Dtu :H(5=v]M6I>ۓy{g8Q#S$UM)xLu..fӉczfHv|*3խ\m zU-=7_w扬)=c=>ЩC=˅zWXG{6JS{;NZfKZl1D1QN1d& b]ۙ'XO^=1$'nO)@A12̮TAjwҎ.LAuMJD~p4_j|=ׇƁgQﯼTu{c-:ҥcVXdYyFWg{z7Ha:,InS[Np -\7z4|G !G1CH>,VX-7C]Q>(z7-UY(} h;prUKW>,['D^Rq{__Sv-'cUԗtUmC,>얲H:?Z뺬U}L@U e~iBg!1̅UA#30A᪩3Cx?x #}WGI8ttscr)1:3><l Ö^dܶ6.CzNuoΜӦ~APAGu m{1>RܲGDP2홾[EyM&\=G*0(7Cc;C@S@mۆ W'Í!7"kxCnKB{F7ZPAT[&_=?Gy Am ~\yڝ6סۯՇ[=س(?FW\cy]斳qdEt,VNV[$PO>|D.Lާ\a돽G$7ݢJ KGcwZ:2VB]r5.ծ$]>g !r?va٤q~DDPy](;DˮvK |dS&U\663+@:sSQ?^IE~#?S͂h6hBP:PXпΚ K pG~X dXODUB 󱁢K>mάG ZMJƉ'ML\e=4p`x117^5|+!omg'KEKϤ!A\YKמ" if<aoOg®TMA*f A̩j՜Ρ.S680jD4ٞ0# [艁-cxA/X6^jgoȋaI}_[d7(\%ѥєɵ%fNEhֹ4tf4>15:Z]^Wkmgx^1;i7%]vmrH"E{O;ǖ%bK IĢ%/-N0.2ȰW ( '!,_ ֋d 淹m-Pb7 ^Jb?w0dԃwJ4JI Ш7qe Ÿj 'W=lnq҅I}LS~A%Ly8EQjk^bWtEy<ޏ̅on7S$( m*2EA&c+EtKt ҺZ5~vz-󍎡짃>II-kܾ~b7]sƣ~ex %m ~ \GzRzg qcz@[>5..wjY- 7Y`mCBx]i^"ߌPԤ#5ooFoy6B_J9gP>{9&(_Xw`1efd5]OFA;Mw#:*\]n#Divjނ-V%v=ih-m%ʼnU**t&aRu=Ikї YL?p(^JZOjjx@[ H="PٳϵYVl:#ؐ&i;®u~uqV\LL3AzPf 4>=^TbENݗZ"ks2ǥ4FX} Ot~/#{T'bƚGī )vM GdženDbbЦDKjԥP"R$ \Ҩ^؁}^>f}=0: u] G~缀=i~!b2r{"FLC *XVђjţ_1:;F ZB!Bc0dx_fkl> gP 1G5t)5 ɸ6z|9E9/P|a}֕Y`LIpםmezaO[r}킍>$hW%E9/#]8FOn1JZ\Rg MtzV J)UhP͏2#o2rcFx3t) <m>T@j6\!=t@+!` y~wɕ,"jjJ. yfU)܉/5^qv'8'2Y"So 13(evlG?쿄P6λ^2$ɻC jYm /\%|Iq1~GJV:&zR)tU)!|::q$|eQ h<:Jl\hT(I_>SgȖ~Y>k 2hJ!mAbz3ps1|N C@^l#yXݻۏ QE:PkepE^`0$$苯`$,T{q]m5& ^GYjhBtuaTW@XlyFkq Ü7rr[¬c G5r0Á1wּp\ӆRn}~qjı@Vɧ$U3#1XG_ iŝf6@KѨ@kkBx/!1C`՝f/8mht^4%9bTA YyTB  mo`ln^ҡ!l&< *ֱS&Kn\MUFćy ΧIhO0gNEߤp$O/aDh՚-}D>U\k{/ê~ޏvEQPpT΄# ` ͋v0S\fV<'%6-Ϛ>Ɯ! 8 1dI;g`C }Dԁ:wRƣXHֽeIlУ4JSt_p!ED2dIin#`F=gG $ylc gZypw[/teM4kS(񬞊hYH +:k%|.b՝*j&2M S-jbxk"%j;ew==O†gӫꕴwĶ w8 ˈ"N@aTL;<F鿇D2690O7u00ؾdA1< o?Ƽ 7ɓLc C7֜ȃ#)]=F zSNĨI9Qnը3%(N]hҊp8(t; sUR+;FF< !| =KVJnFW#zu-F"4N8PUDvXoAjv|z+H-R;|Ғ];WmY/G?e=egxxưч!rrgg*ɐ{l$(9p!W_n.jZ:[.e**KT28;??G4EħͥX$?ڨ^|gt=?TU2@ztY-&e*w4(i=x7[;8/;kL">E-T{ʁa9t~"wd4>3Q $$2 /l}wRsJBp ,1#k6ԇI!sU<mUBCJT ihW<3ryf%̯< @YzR8EޕQ=|mx7R58OiAch8s3\ֻԫ7yrL㭾tTu'xe¥hѿ} '&yq4KFuBh~DE)XU~E.gm 0:67LiibHspc,u(ov[5B:Ac Q&/HWJ;``u^:QFm ;-(yy\a)`.eXٍ:@p%`K &c#YwK&wQ1!}@Эzәh ؠ+1i5y&z4rV0EoO\*o 2GY=DZN+gL Q8]@ڣ}ʀ$ٴN]@fÿ}gu77 jO9aY3/89 f4b"YI@OhCwg+Vm֦0„"Fp70ls3ڹNgTZ$5=A 5Aiv[iAXu]覥IQ<%SG =6ZFt^Q ov4G߫Dѧ1_v $b]?\x̋Q4Wš#d{@S it C/)%4'u CJ'gIC&Ғs3;'B[`t@M=M E:o%lsFN.2|mZhbW~cְfsdfpX^ƫq'H6L5YG)9f䈹a$Vcg3yb@6r 1y} tV{DJ͊3GMɧ?aĝ Yc0T*F ϖ^Yս>2=I-X(lRrGy0@J6|+abs9$9`:rYN~gS$wҚ#[=5ewֽr[5)e5|BTlEċNBY;,2ȋzˆ+yMnjN߻Mp bc@ o[7)6\rAks ӷB"pз{V35bM%:fG,cS!%tx?=:Cإ:\6V$YWDY'Ԕd6 ة9]n7xǓX,\4UE!S7T _)BX1-aT%6}ptA!0.Ljd W GOȥ755_mS3ˢ L]vQ]z!_ySi˨=׻"YG%bw6RncAd 3ze7[&׃IZώޒ2$jqH%(ޣl.W$ ԭ6J:tY+}i3:1?7.鶄/@S;4%R7ξ\@.Tl<)gJSn=6ѽA^Ju)u_`*Kj=:<+=F0OcUΞ4?]x"a{ϒK3gD_ /Ӡp':8]lv[2ӧ2O)Uj54;227sd R+um;R㽵um>6ͤM2|l|1)%&k{eA>`Ⱦ42 ϐt64EbVɔId=63+p}"#?LYM>L7a"n-O1MRojψd/(Jg4!nI<TBӶh]PWgY#{#(7Ĭ%<|3LCLpr,R0- cBBlIr!x)1QiwmjS@UDFpN; b#(d؂E_Zك=y;R#i[pO VŸ6i q(Lj1vxGqt's Wa嚌TIL]$Si vϸ?Y% 6mTZOOg)D}[m][u: |0v$O\ 72+mK79q :'Y1M}XHt>‡F2'96í5]jh%xI{HhXfmέ`\X#t U8V Q*A*/eOZJ0S+5-'jBYqh? w1LS.- E+aHʑ:_3 ttb%L+7]ʎ0ս5XF4n檔uٚ |UCt6XǗYG`j5Z56NFV}ube[2[G(e =lɿOdz,}B6wWsU̽wv05?eO]5Y|sVn $qrxf+ u@L4&Ƭ2@mvB/=gf.ͳw1}Aٸ4و`~ԯ9fLN/%(A(4yqi\]yl <`zѢ0_ΝCjr ['fgeBߴ֫_ݷ^&JPw)U|uehXk ^zEDr8|EDBLB1'tSϲߤ܉X>l|RiWº6oi[v]n Q|C ݨy_qvd}sn\?\mq:WO['ءJ\'z¾.u R}3[͢hR@^qMge̸-jooA.]&x`N?R\)"OB*gUzM7fd7ܖ}fP\D\i[yfБM\m0KJXfadpMMqQ}0d<)46ଚso c'I/Jb7bS-NuQfgƙuR'j Or:"]QsN;Q&i_zbm֌VxjpVM<(g_'5;䚏G)(?֛vT{&yCrҙAl#jnnz}CrЯZ$BG~mTIۊI;nĐ ~9iݵB 9rtM kbGmD5 DA8-!×HeH &0&L?]?uQd1xkOS97ɹ WhIN ؤTc~Ky#QhuLyvRbTt ǎLrAp3Gdu`q>sf0 Gֿ4onw[c$B~X !6 0p!n!f0 )(9m֜5]^5Wj9ϡ4v ~+iWT_mb ^yJde;AOKp:)DzM6i*}WL*b[;h[oaG1g7j&AEۼ*ti(psa04} @(a]$a;*:D zM|BR? f,%!g͎'+stw^UEԼ.0rC^,9OK!4>8@v{tzih `h&rS̀Yт X}n nK2/HoWfaL+a0ըnt2GbvAA}s0Gp?1?`#:ȸVq&f32>ͽq7,1wMɛ!Uٗ3=H_=Bô-B:Sb<|FA|6:,$42 ? PvbKyˇ2d'iue5U 9TcA<:/l>9~-ZB*5UcT`#x@|2;~ 3-M5$u&@x.]HN˦rocA"_(Qس}) :i"׃ "X6d4C51&ނ=;_>?\2~Kbw|D:e}vХzmE٢qĈ8&FMlGEx;(KI gu .ϗ"$ B[ޜSmF2oLp@Öׇ֞Մe S`6a* R`M%b2Bmݮc[|dOYۜ+ݧUc tt` hz:q\hY|#}~2j4eF ϳO=&ڜgVmivqm[~yP(}YsIĉuήI<ƫoϷ+[HkRxN7ZϬkAO>0ats=&͋%$>xuu8X_&w02|a'tՃeuF+0? meZZi3e"jA q(]2.#DR[$Ko_źo^*_ꝂM,liaǗ{Зe⊛cKC8@.iVjTȀhv <Ԧ (vvTZD[ڤYzp R>(GП?> }/gE5nY4Ho35 8kf%?$(C P9Ӻ-ۜ"F|;d2Q5QdZ Ob}R^ϠIw{0 WhŎ2yU_5WJt*-"'gISM܎t 0k@%ݞ]5r%xb:,aQ7>mB+$E,bWQWW2{ۜ:sKBE;dFTVeR_;fȧZ/_?As'кuYVDзݨ) ~]I]z|y=-жV׏[C~DQ4ǞfN%C-ð,,CAb<2*;K&ē{?(MVqV 2\:tuac尙4Gy,|"QR^7?d'x9XiQю&J%zrO>̨%<16q5j`CD蠍xe}<eaf Mk ->ƫа^4.}^E5KhJejXló\"BpAtěAge?ׅ y*.1hV.2~<~[Zq 'N1w={DvqV MСȃ,+\zPiBdz2 4$]>yh]؍CM @qE[2MU6*E29:0Ȑ9j.,0-2-1^YuS^3wCUqNtuF{S3&G]n0XWZAUlp$=y^vqJdU@'$i]3n*Zw<#_b.n᧡>c$+R$f2gPgAd(6'Nå`m@Ѓg 6_Uшd :՛\ P̜| :^dc=a6׻m19>GC7#2u]Ȕ=(LDhQwZmAv\RrwJߌO[})|K5;2F\koCf*'!:)2 z$]eƱ*Y^dk>u]Ux&AR #oYc:vcKb1-%ŠN Gꭤs]>;Uǀ=ۣ-F?|;fl۟PNdZhRPzoJdDǐ ޼Jꞝ4_.4;MԱrY>ob{頕B^fm| "AE7VQ1%wO0ʇDžnwP B^/98k{vc~]5yw,K5zRCo(M*GW\(疚ff[T4i OZW~>TQykȷy>065:ebjqp)~0l흾;cЃ YU&݈ᰙ½+ʶzϠs#oQfYe qg&]3EYaTk~6{2b0۲ $̦9 #?Հ>s}`WHgRm.x,I,^X9yGQCj bڣs΂&&/hFW=uQŲ$X_#P G1sH&R3]W1Ei6bn3m }$̇9 B&?Ch[/kuz=̮8f02B83:"Ngx D?5vN |%rG'PB8|z"d!TpJLpkwtU eK8|dIU{ymNgї¥/M@Qo_(b~&ЅeY/[uFpoE%+-czl`* M~AG:#ZxZ*w="1s$ 5T| hA} ];Lo9uK[Foexx{2qכߦwD!.ٮ-E8(Ƀ#^>1L/[ DQ6RE`E)>w?[@/#AbmlŘؐT“T/n5w?:vC06Õeg;K'oo;R8ܘ :'9z|m*W'^1;q~ȡM~!:@8Q;Ʊ^N{9Ҏi_+7?Z1c间לΠcr$}y3u]%uOIDN /8V[8haRAe8VWSG 8"}S([7LGS(Ln-cDԀd'EY3Upr#䤔08%[,7k`[AO \( Oi6 Z!oia۬kcf>ī%k8&Es8jK6 G".Nwxzrq$=FjMCLOT.?'4PۮRce(C B!j ڪ.uPXv&D [D]JtQan ̭K)aX{t}M0GH؞d"zpo٪u2S:wmxzgᾀHLE[2R%^ݰXD#H͂ũA0:CLahDrJ]I1g=.n7]YظIF| Gc `2Yb\pdR#[|2\1rw:&+ I4b.`ٺ>٤$EqW,J*ҔZ6I.NDeqJZdү5K,|-WU+XKHé{EK. Ocbu~2PA34N H0GW oy+@ceE'FLt'=@i#v'S>dw;8D.Zg! ́aHHXX.NV') "RO^@c˳C`"L.cSfd&0O=iLr9%Mп^ o(~:SI1Ȓa(R?j;Uvc%8mR`>UO{"f`ЭjTҋ4K+p`%a 2)?lOJs3#2)yoycm{QŹ,?놠P\=p|Jp!s[G2V+%,so/v[H}W`c/ 'e;k[ O yM؍Q;)^ފ}f}I$@o/ nZ ˋŁJ:\n|jt[SDDhx`{˽eoiСHzVmb/8U&0GJwgψad|Ě1h*I._<[qTѪf}r cp)'  uV[q \ryS@N V;؈dߔI]A_`2,n8x Ǧ`2kVR5eF('A:Y.nbm]Pˌ*jNW4[aP.A}w-%;)2cҢMA!n'(26le$wKwgqW+ݜSIԹn'8[kqaĉ>=hIy*1Fm_Z:jNhLm(=Ag%4JЮr&\RyS‰]y< 9+ġK6'QY56m0͇%,ɂrl!s6DloS 4b!H?Eñx-+$h;.gKu=38o p>GarX5ߊ;[=i6!W%>);p&0*aפ-19 g,.)6{k}s:W|>E%pMOF1Bi !Kx6ꚪqB u MRLRR²ín=P s7 pv҈~ffx\H(:z :ua6ٛK+>5j9~vsoS"0pvhBπV@S|dwb V@(ntdYJVCxv.cc*6M>y<ޚeTf N+^oֹ (?,Ly,;qdշj&(c1[7D޴/j^# ת53i6L^S%zG_{qCrwuw'[I 8NH4k#eAgnrԎkcum;P#@1HTGya(üq^K4a~ӽP]bܓk ~#"s} i>_zKjAIlX՚5:!; ;j\9H^'~WOymrVH#> wk?r[б m cZ9ync  B{:.l+b 3*.l4mH[s]FRэeĬ:GKg$2^<"=a;(Лm2~רU ejurUkΪ!4 ը ڌZ/-u+u7c<:Crb`ˉ`#0P%uonx8/[MeO,h,)GE%-`Ԓ)Ju%V&^?lT#jWBy쪓.#&[s^ZE]$j#OnvC .(+ ^:[ϤNW}38H½S xS8YV/舽J㾾UW\E;sNn9*Z,I̫ WejLVȣαOBdîY劰"h|k5RAḬk*{n܊doĦ%Tpðϑ(TVY6LY|W=vKNlC. GnHlyMIԡQ!bn̢k2 ޹"DNQ1rnô66Scfj;ҒJV.A\b8;6 )VBKuNP`uz7wRr:TJ h_pvdwW`*1x)8xPZhid(۝!wNw9Gt]w.zY<&O{iZj*OFn2{{cJAv[Iv%"oXT]UAX3]]"mMZuOngm(7u/IZó ג+-U(fsBއY6f4b, ^>Jܤ|@ 5UoZ -_s^Zc3_\ʉHŅ2XQ;z%͘e+,lBtNQj T[ԷZr}\HbKjwg3o*W|i O\ep0B 9-BgI'[.uhLEe'%~3}+Xe#nWDgO2٭>xxǃm'F'-iDC,ga ck^ hG7Fx낚=.y5>-o>]> %裩V̽3@{w wE'YWab,ao91d!Z[neԡW74'|s|Jxif1$zTNhjEsYH]ŀϺlfFp!I†o _uVuj U_?ѲAH6.` }@Z0-oyӇ\9]ucY*3 #liݑ]oZ}#c-WO~硎#sߞ^mv[}m9Y=RJ 1,nKWDB9v62n#*8ٿ񺪆G3Ǡd*I&m-ݦо%Ƈ!^9)£hVvjtS2׆+aFh֦E^8>ud1A G ;P{aԛnu?ϗӵxW7@>9Fc(Bh~tudX}%Po m*{s7iHhXReۦ{kȲl?YbD[=׸"3vg6B8Gfvz! 7cOHWy,Rla[j͚Y S@˩$S 1%cm(skX?ʐo܀糽E2whŸRKFMM]g%yU="6%HK72uR#`@(j *=6tgr8֋\:VxjPFx2֫s}_ Z` k~0 EIb4:@3:4ACΚ)1`5]Bwkftb/eIUoc pqŝ &t@YZj="ohU3_X/ߕA Gu_768?)U~ zQ[nxUW٧uxSX)w5Cƿ&)SIj{ R7EPM'o[2<^b\ٳ|6#?2ӹʛw3Y)1-;z ͂kR`Y:u BBJ];ywY䯶t88 rv>;ޥiX'6Y\`Qw>J ^y ;Xဒ.|Vt]x[C%AAUMMŃ8_e_}>F[bRߒmcU7kfKί JDzouaI:cWP]14Bj8?5"I%f}6|}/'ʍwmӁ3}Nr2V>6iۯŎ*xD4$!>% D̮m:W9TDލHֽ?&E÷pc1V&*l[Nt91 .>|921T;LBG^=I8"˃'VX`x/0aa*=¨:Tc*'1OyJF!˲Rh!$['txl̵Œrbw=b0HM3u3ո MeT7\h)w@:Ju p~Ǧv9J*XZ9" 'l5Tv߶ ΅p&.bCRoOXw]l (yfɹ |!xF\5x+YND'mSIj msލB%~ 9*vCpv&+'@jRӴckSAѰL(wM;T:pwy+QVY\[n`K4.=8L.pյ>c3mU+Mw{0wd j?N*K`s3CE.s'n#*ʌ xo=9@X[ 'tj1޾2sS; gj)9WV*5WE}`CrrdG?H[{ٜ.5cPӷ 0,<2ZoYYLoo.q\?e8nzXm୻Dr=$E39c.4Xŵ6/Zr(Y90j]UaxBot؅7na}~n#|x()-[fw{ߌUo؍&85"Xe5C_e؋v3%4VC~ģAV;Z6YD;;z6Dx`5/l?dЀ9C}._4.jb: rαIU2mPqTBƤ{]+u҅^nAS,0^dt^(81UNVX̓WGkj.[}>-h[eIAba/Dm|sR3Cs=2]o>ΎQ3uGLT>%UxFQwFP%y݂(O chwyuhY[X%w םO.$+SCh̕Oh X^5[F&' '8D $Dhm@WH;SpқmAj^oKDv[. f6?5/ Qh+F66aI} IlR}=vqQ8dfG2 EJZ`5f rCܠcҰHASa2j D#wb̪c崍@Lt_*FsNK,,9J HDSg%m fsorBj=56Yo$ӟ$E1 רD< yIQ̜EcqѾ?Pσ~9gqCԭ' Rp4kRwZćjSv\!g/US6Ĩ0v5 d3K+ڀb nZ9?`\FԻ !2WzVoqT}<>Q 28OeiVրӗq^n2Ks 4fnu*K~6>!+8\*7ފ>4n>_&.R"V@"1ҨR"lPIWbVcCN^N"%#Ow+f0є'6B~8 bao]yp&~ٝdZI nep뷀n36k5%#*e9blL.1i :$~0sN0;4jtQɼsq9oͦ\Wvzb[j3{4mwģvLrGzzH*zMt0D4p% c9D5JCL /H ,F7I@/O)Beb)aќeOxeNz/a>VA^KbQ˱k= A1~k]AVyē^ X| >tbCϭ ~@TXy],ckR<:Iݳ0o6;h7xoJ{;;beIE&D-`]@#kG5eE"aŤiqD蚧׫fMO:Bum1xä6|Rt݂Q 8S- JY#$lQ=:[~:]w mJw#JmM{Q,<'񹄦Tm&ĹKJIHO6\D>f F~DR@g ^}Q3` BOf7PAP%3Q4Ӿ>ٗ%=& q2սg72A"h^B U\x cV}1Xa\":q0=4h9zw6,tU6Rc7컶i8]8L|u7,ޭ^4XUHzjVў]Ry0d0aFM8\ Xo:m,8] XN4 > o]Xכ c/CW} p[$ #s_'[`l᛫7 (-IޠyTy-ӥLIz_Y"i"xu/6 GcBx2%iPD5!pny̞9PB7:$ͫ]1<6=B}f ~Xz[F琑GJ.],vPz<岑{=f-ڏvc9ؗ,1*H59\#^>V 4J9]_N2Pk]k]zW{W(+oy=D΄f$Lܥ6ZBn: `1XNI15}z}B"n#=][;c0 lV!f=@jqR;9D 5- Y!B2TL"XjOSV_=ل}Kjqʼveӯp>gU͸ev_~e;*Sίg}LwWf9eEXo wiN:~yLV{7>B4_#ZsZ P;Bɑ/)bΏHtgTGKpZ@>!*e6}LWLA*&7꣒C߀pVpM z(6% Jd aP$ڛIE#f&[}vt{l>":Nx$L3f`-89e]9ٚ#0A6k.քcC ?ݲ͕bP  Ί6\O/Ǥ[3[rOc'v ƀ}6\?ӐKgSl! bQh&!2} @4Ccxkف{YM{8[œp"ڨpJ7`r%+5"ՂE7 ٽrh&RoY_ao$ yΠ21_ƩD@X~ @RU12,E_T'\jǘOo6EB](>ZWvXZmT#)?eBk$ l\Q ]՘{snTYL.Mf}Gw!RE7atL][@`V5^t<1`l~>[wID$D^HWj(!hso)W=!=I )yܑABYBt=Y}QHo2e:.Ij*83jm.uc(P`kzE;.=ƚÁYf[DF:[iGHB^lMץhAC=G={6t [}jJ.lgsTfŋ}U@=(~P+ۢ6܀lKuK7'iבnMmJUF'q٩Ng։^bj񎉣dP-߆t'Ru{CW4y4"If[6;i{λh_e(5DIEXd+'\u4󞒘$Kl]}^^.TtU~eVӎ~ {NazI%\7)pWidc .l~'mwN%i7j9z|xxL7<bMeX;_v.x< zҌ d,> !'8|R%ě( cmuh4wǢ}H$Hg yps )y h²%ʈltND36a[E8tY\e? -N>^\UPlv:S;?䏫~FK-NFhƽvehە {gsnYOB,L闛3{m*!zBՏuӞVos*p/d+r7Bs6R4<իLq2&*ڣ+;y2 ScU(!-9`ϗO+9#6 ӚptB M?QE;ׂsIA+O|hNflʣSput,ȓ_j $&WL[1pS's">OgGƇaFu&N\k q"r+.ZB+7aN|<1҆&XmYp(sj#n)hd홃(k/QL:[vVaTװ§ÿ<}?Hנˆ-_)K YHߖ]ΡKN#_얫?jM9>ňޯѥ[6r!O 9t);yZTK.K 5i Wيi.RC׬h BbbGϺgs)W\AP#~'CGBDBUw{bR>@-gBN*4|I^CF_moyH`MZw*Q*}aa N 1'J_joC8nܘ86o4 ޛWg%N$Aop rmw )|%wN2ݾHהyɓ%Ĕ(^o2 i-z: =5O nBKS>s =֢U%a'5֞ɦ 5]YRyu贌>h(޾t-chlpp!ń}:B~0*UY*0#J+ ?!8 ﱿ;-;5mͺrR:νmg\43*zV ZslBg8A+&͟A3Ra=6kR>fr?cGF5;n0  x,!4eL1&tR$*?[LLڣdos;T}qZm fOR]c& hp4?X٪)x%;!Gmh) ɲ4m6뽶hGʥincV, Q3 m%#rN<( b~M loWcnj/&Hs/tyݸÍUFr::%m8QLAzW _fE㯹>NyeFB+԰q9E2u 2@cgޔJlmlQBMrҴE^wɥ | Obܐ_X:DCVcL`%1Um F!&ZO0II#H+ew/;iuF%3yj.F;7+Ф%D v w0J7o Ns#ښMzyrNt<8S7e?9h (ShLTVm4'ތ} D|T[3#e=Dƍ;T4Åf%, )9Fi:g:-VPfߪa,m1MP({09wJdq Lp7Y; .!^T a"d?p3Φ@ gop oUT "OE>BtA#vOLqb7adY7msIۇ@CD6f^K =vvKgrTJ[uZވoUJm+_@$eOCwA\%%!zG[v6C P$G~Elgn1G[%Y2vj4v:Svt">Ft:'F99> NT Y"d#]$LJѽia-{uV%vYo k[e]" n"v{t |ЊS@E*jCsY{~WivoH8CSv+g\:b+ Mi8WF(1812y(cpu{)ߣ0[Ngo3[:5ߤo!'K^Ԡtni "ԍfsiWpڴdBM_xXi^ݲGؠT@Tid [RvzD13:U&)-ctǩA"UeҜO\RnzLH;WƩ=Ph)݂.}Kw)Q^cxLf6"y;I (%1-!dFK 5vc,L,;H^RFBg|H=d/Y~eLM3Xni_R6c`4ޡX2-~ŌXHcR.eɿ)l!7mU9f \H u{ۡhtjnN^p"bBUV:] tTgc>v<5BѾ 5d}E@n>c MIhщ\ye*'ẏ}^ܢpMg8t`&-0x_"\!#RbD{-˕.|a! c:"E.szeD)57`/Yme*6if RknQdpMF!UV z(F,jh'(w83[HkM+!L P]ӎz%Yf0>(Xpaq$Y +W6 t7;KUfAt}.ݣZu]_u)\E9_'P,daۺsZVk}ә|3teRck5*O#FO YhA~b1Szlve/žɠgLCVYt겚cY'B/B`(5a[p:Lxy8n'Ix˹|fT`5YZ'C Khޛ s+;2eG2ũV=)=N҂Gk\{Vg $9a`LU?Us]]>h2yiN ]f |U6D*72#M&h3!t>]Fs*ɤq \waecWbwFmt  _kn{S0j_ xP^lH_Ŀ ~u$9.])t|%IC} 70~(2=FwJ{rtwaH+QPiM5O"CJ9VFZ>yVԞZk ׂx*-unVcyͫ+t[ XO8ݮKO[=a#6Gwؒ8,/,I5gm! w# ˷s\=+k{U- ?Qi/%.v(³OR> Fkjj}E_`KVOW"ٯ(Ľ1ިfWRHXŖ&h6 aAfbN:` q@P¢ !C_[mnd @ 16?18v{hwnDB~N6PTO)Bm|6cO4*s L2ho1uAUGn=+ipf [x'y&щ(5Tn9|{Z5 d p5bكܹz D)D(S)V{WF _&^l>7$ؐNEȱw`ʾ4!Ǭu|Y@пpI1d3clE/H@>zՙ\\BZ7C(b:KBA_qhoIGN_c-*}RY־p̐m# i(n);cm/Ϋ1ԽG~*8J5pA\Ot7\pcYu ['iՐ ϔH޽#?|5e&S[HW8f+Z9`口tH}EBM*rVC9N<}vNN_R@ՃMQP}regxEO{G_:f /Y-IRoؑ\k#t^~nf%@"o8ǥ喣rF$a=Xq "pNa$|ȇY^Wd+UCB~y$.^Fjӧ:;K k?} _Uվr&2ӱh{= xyS1 q/rکϛ0soޢ8Z,CX~DP6J,GRHvf}S%_B~*ǂms:)ǣ#O-g U=U1.ѭdx )Ia xkX̛cWxk%g ZPpQBHʟ.ܧˬ5TTS)ͣi7J,YIk*fbMqqsI.|*;ʍ muaձ H`'_ S<\=1 OK/Rpݶ ux濾%zlȑHAwfcC J'geLţ*q%: _zB`qqRt2ޮ?Dրjo۴usj1qkFdӍG}R X?jN۾.rYrbcQ&hvy0 e4TP;M T[ҎqﳄA\q8h1W_]2}$+ձ"H|?1%b]l6ܘoxpҪhGUˌou7IZU 'C( b6{ z2@-Ws*jӄՈzY?ҷ[y }YAWE`ĪZr탃Ԇ+gHŶvHoX>E@ 3[/C1LI$L3P)9%#hB ڬUZt,Iڦ,'A92(zS%$NKI0 rp6qy~R'Ħ93'Ԁ }{˻T9U mJyQ yyN}K'ӿd)1jY/h+ Xgn3Q6 'R@ж,(hkyMUA,%U2+GbٗѬ\B!J}v\\)M<2jI)+RɅIyV/ḁ*dYܓG"k1CPyU]Dd]R(]Kіx:M 8ܑG |9X%TQ˩$ iDGUu~kEw|2E:W{ wFTk $xde q@jAe_G}h9ܺuJH~6ٍ̪#n=&=<-m6Q9I0[ `e2yYXf…mX )i8ףigj=~e7ݼދ pJdWyUBw:ჩt킲a|n1g3GUE~xzK.vgz)IyLĝ*ݽ[D 8ޛf_k(!O!VfbnS!L$k첯\>x1<ظKMD2LIGr}>#$^ Mb['}tVj# +O)9=f닃_l\;d=kbC:1*F[`o<̮E!¯xKu^fG} jJLj7lQBqs/o-0x9FvJ T}>fIQ= 3^`xfmI/oW=z7ҥ{ݧ?{ U1q:;p?K xCo%LKJ-XvjYUkcmcU&xq:<qx5Qh/+#o=rʱBZ1kT7U>)*ʠ#(m'AKc#Mn@3w/WsHbTM?(zUh䫆֘{d<߄+#ORdSjBEL0YtHotx &:DP6uXox2XSJU|\WrA{\"!r.:'Nig?qNC,DK¹FozJNd5gNxu4shW_ K[*=Y֏-cƠ{QƁ$ GDBst@3CSeIM"v k0UF~cS%-%w&s+׊u7rV(_Z?Mx8sJ{Ž B#{9.Rt=MMY{і.* [V@2oGgu՘/\Ry%!ne@Ȕu@iݒTؒR&xW%U GG}"p$$$K,-(r I}9謩5ۃgT_jgtHpFA?b]ZO Uclf^}1P`u^QGt0(jaZ4v5},&z]>G\&< SQql#4zQľ$#(wP΋ 3lmcc2 | KxZ; |ކO֬:Uޮ m =[:? a+ !~]ݾ,L}ӢN-K8FGtmG*Ywp~JP)(%="{AN)u|UeV:uɜ˚-@Qç*p).1d7"ӛQ}\z XJ #8GrdҘ6~hүKެb=Rd}d=D3G}F'U]2jp,Ut|ro8/Mn$| أBV^daZa/eP!]ɦRve} /E/'p֣O:>`Wbfʸ$YX&wӗleP_!_N2>"mo#X{qI-қX%Le# m=B&~H ~s+-|gwu*8 BOGa2/[h&qVݳ1WбҮg{\ZJCuG~)!X1D@ž1f(§yarB(Ziư[xJ!K.phywyw+M‰߱t3ބhTo$430Rw|E ݤ|xLqIyV;9m{0c LcJ{PYULf޳ף9$Ds3?A 0Zf^!Z6A0ٺM8;|հ [Y~v>F fq}W`0L1k3]٧2 ~B 5UfJ]e/ԕ?J4§~ M\}g_4Ӏ#M@>);2 4I\%# m Ǘ_Judo؅^N+-2]+NYEJGT 9t,zt<׍pOW_{>pN.;VLd$nXwF-,+~!yx\3Z/E} ֛ rpCڥL[h(گ·`/cҎ_eñ yC<4{~0 OUesA+Z{\9g-in}-*{?b-f77gj+6]kߺRw->,˓6%#bwAcSUm,; {Hj  Kc%~ww:[z^6TZtz%&>ͦA#2cM e+\L^dQ-?[TV#{!l~6O/iP+F)j4i6"3串qa즤ކM)/ӜS53;&]8pKktkc3 z9m2QCk`:IoN؏h@r6Cƥ{ }(_||4L245?6T$AeJi1.dI~ՇjH+'K>1ݝ,}Rܞej+ D|bȘC' CZ~k@Ǖ['<'6qEMjCf`yU-%'DE-}1fR_7)ҬU5WEN;X ta7oPI|]g{wYSILl>6nNw;NIqă|&-msǩ>C%; ;~VJhDKw`\D^wB9q6lb8-x3X"2qaxC?TMMoz࿲[N~w 6WjXhHCU3,:e BI Q>Zr6 T؜5wzC dei^4APS"yVf;^)x>K H̳sgnV=Ttv/+;s!N~Pja}n?x(R`:%rHdS)@ppm}SoZ[N~ /~bًDmgbC\&NiG2qֺҙ=;o =HM(-I=Z\+Dylz1RC壦$Pd";" >[se~*@/LPgdx >1-LAnkGy){UoJ!'o[b ľWuy~@,~-7Vf  q\EX }9$F$eWWԻ/a92OrBxn6ێ\('+f-\ g o:Erz[q_U!(8; 7D'rQ*#Ycƺ%9m.mUL>*L%@-t_ig;N-zqa1Z5V˷%s/c,FW@Kdj%9tķWnaIdi<}RSnAЩm2B[f-u FS⺷?B$oRnCN{{ <0U'3Y +/'2^>m.5:(7F-xtZFYICVk&I%+ҳjJ"Đ}sg ]@Dj44J<A7eLЗT ؍zhWncч(*#pYhr*G}6d^D{"s1Aqk [~R=Yh>!9wbW@렾">ێ'A僠S@"޳G>mGAtR+e\z46bffЏIlJjGvb ZZ;ϱj eP$Hp1zBTO=83UEbm]?-Zwq]"#[/+F}b^'ͣgO,@{,/i t7&Eb"U7g:?ch&?O>1sy*#ȟNJ}x (g!bA#'_ ʊLk<7%HONêu8P'.;| ~s]O~CQU}*V iAJ>Wk1nV+Wx#~~Uig D^ޏn-l3c>b!aG=jwq`_2)URK:f,][xO~@Ȯ' {lM qZ*YnSv}Ηu;7)joE鑈~; )2Wz%Rf<"^glƵu 2աǢ܆y*6RJn6˯ % r x0L .YnCiDi^]ك""`7 D)hs"StO)!V>zXpO^@AFLqka fg(e'!}a?73E&a#xBO0PF`Q#BslS}Q {qk|Q%.Nu>9RH*p]Dfk>.-LE.t6>99Nj>7滗nQfd!~ºz&|7t/ _7)z~w~L2grqcD!:'vg _OnYRmUc0slv8]KXy<4P}Z]'e?nS:qJB֎ͩ\0rY )(^-? <?&O.xRp>n EaMVL&z`1څ^͕sn$H:YבQ8\V܂y{Sc}moOQzk fEoX[ӆhUKٗ6jWLA1IA-KNJ(dx0nCVU-Z- 7_{i oE~db vי'р}aĆ疆}Ȅor)fpIdѾqzlhht_!h/]]CvCң5 Hh"9ϼAܡTbnգ~9 `Es>aD;58Tg yUqė}`G0:1*5Asd#- ?LI[P 8qW2/-]_9>Jb LʾՃ]p9cAs14MoPNvpPK RѤ+j>7iwM;kڪvEo5xWfcӓ: /z=g7ݢbljA'z(*݅{ ;]]{C'tfɶXݸS5_/vc_g} t ?3W8OxS2qXuQ_S,Nfoh= lbx vu\?sp } oEP%DiC=6 a Sd{'L6X_`{4u%~b^=ΑOғtT7ӎTW^Fy45bڇ ̤A>V~.+Dz*C\uj~#̀qnF7t`1sVb?EMUO>s^0V>XucV.=FQDZw2EfnrɄ.ا$Qubh;?ڪϾk|#!$^R2C-1H )P#'{c Σܿ% Bv1 7G~k4|#KAr9)LKralk'Oc[Ǽ5~* w^ld}U#inL w*[6T .y3, ͠@`3` %gEDUH4I嵳>LPE`ZxW|I,h}螑@_t:/X@YRƘ([,lӇ*Iri9%ʏ5ܟez8X qq\B[v7WMY}A}4K{z4>ȯt钎\LJj6 ֮EijЈA&J[Nj^ ս1_>`#sj_ds[H;;cl0GUl@zyOw"TГd ($f4Pg¹|L6 eym"lq٪ ŪjtOVx׻́:CKDU 1bRmQȧ֠Jz,?d<|zEv;:xGTP?D}x`C>g9w\ξ3E= P6O5կ?lRb)mPWunC'(=tեWҹ\))=gPuEfJd3H>!43kw {T!aqZ`zgQu= k~4JWz(u6ɉoM1WvBr8(fK;Sq'j#-WX]؊@?tu8&qxnbx_S޲JG`|X{r2ddta33^ɧnPdX2r%zX.cuzx`^%8ߘc{&j&!8#68V3v?1؍Bٰ#S $cacP+(i d뇽WDp q\ g\wdݿ\bdĻj"ӆ 6U-C>'zhQM_?Z z *EήDۧʑ2`N]8:Hxok~;Ma qG`@K]"68Ϊ_)>3,8b~'}4lqi$^ V~ms{ ΚLe6>=$Sʈ*{5gHI+X>DȅUt+] +-URYAҿ#+:KhDb1ȋڧf$#ꊜ^(@{ZtXwx"`&9;޷RP߱|@E>&k<>ei#WMJ~jOݕ]Y.5kW+Ɩq޴ϒV8(&4NPS12CL^9]?&ij8=&iBXpܶh*]ﶟ~yE=ƛcA]D Wi2@F\N>3j46j&R5gV%y"w5Ŏ U\i|$E|)}9'lx-&7!K=(pX&vG$"wOe/(EDIfZ!ekn6,|ѳwBtR #􎓡>Do|LC kmRœC@!b*݁yqV59"˖=dL9_+g~WfWJG S6nσi3Gg)vr0mwW]zrT_dp]l1o>|CwZT-vs`Qh3G6T]i{> )i_x#UfK}Ⱦi1̕jEeM׃W(+p[ &2j'8 =\6б΋IbE0][ǏsШoTIzڙ'q{3=@pr`ADW yl{G| qCHlId g}H;R1-UG !tȨ] =~S)[|Eθ[Ӷb:: { x4>X,!xW4Xz@{' 320l?a*jWm&\Q\jPi1#R< Lp8; D-3G+FR_ ۜEa'fd:'@pB??KN&\ 3n x]F_x+՟!uH4i^Z$];=xL Fc"> Htvs*MKC圣%$&_1܈@tf/^0u<[ϑ̍ra"0b L)RLE𙖚f4K  ׁ:)QTӷ/:4c'׺Wx-hSp3i[]t^a{#z#VDӻ]3?Cz5-sdS@֚~`i<:GM.)ŹKRw("x !_kMc5K*ͺ ץ`ȉ,uX*K~M~&!ЫRlGٛ \^շE !Q`/%rDuTo\za 0iݑX۵~?bVx+a`o)6#@ ],agt҂Ӯl*z¤Zڈ)lGT>G!kRdi3IX$b}vƸc4Fś)H.+{Ltnn1.#vӨٝ>$zi$T@j{ ?q g .N4_ag;zX'Hm=\x$ ьyGXǛ;rc E92T[1+ט$(8U/Żk=FE̒v0Z0践;ejϞn ZlBBK̫XZ4BƕqF!.Xq ;-"lgZF`lq 1Xyrr5İ[Uk(1>׭0%3h+]R9n5.sá/1NLDkIsl\[ψwyQv1(8SّhSy?g4+M^|;KAHVG`^n8G\LÛsG$]6!5=gA_'ACvb͖įMLy5H*n G.0o~HĮ8G;*"LBh|ls`ՐڹJrBp!b# vҭƏ v2>=mJa}&!_K& XC"|<^R Hg ZJ+$1E bŒo`թ1Kbs3~]פ}:nv&Gڱ4S yV9Qd!Z>xZQQK"9'!R+[C t6i1ѺC0b /()-83GI+EB"b&vSːJ#6v˞Y?Pj9wmoh+-g gN LKoM:WBA5 #͞qӌ/_xؓ3c_ܕdqڮtF]aVshsH&{8OcAjUrh6{p䐩.t7 `2?i}0r(͓,;[-9Vx*-w2y"$_￲Px[~+Ăbҹn.!ec}ߘo$?2휗rJ a_cQzmd5c,:G,h{׉KSh;挶nmQE1WNIs(w+6_Z}D" ^H=^L!u8Iz=syR0(e{Ƿoї G=o .QW5=ؔmD`w8y8sԮ ɱƩGXxPi ׸+e+9Orz0z2&?Iz-+of'3ΜG1D\N{OG9ȋNФ(ۀ>w>S+jl1o+#F)K#`y\6(_$J-qaxIě4QM݇P8rcEhf5༎e;s]&vS@uP|,I8OcăX.ӷ3H#Oj.:p"ʌ(_N~sE O|3+r[4Lwؿ9 :VGH4p<Ƅhe3܋.I^2'_΢{ MG\N} ckL ;ՏPvWD4> |:(s/{G`('yLzr(a#n6go'آJQLʝA|Ch)*}|Q\2@Ɛ=ZB jxC,HCgg-N؅y~X>dG~_ھjQ.ceņ߭-Ev)"&^~6ĐlY=w$ 7?WT\uWõG{8!o 8#A8;9k]YFKE?M3OÚ$.7+pEbl5vR(9qjH~z!;1):?M;}ךo y4y9" G>M%w 7㻡i]㖵xlӼZ`* Qw$zJϔRodL:vU6t e".yWBכ, -”&u&K mE }Ѿ޷첬1@ouiZ" S`^G?ŭcܷS[ 7zCѱ4ɴݦ}_og$ [㉬7ЙlaK[2lgpH]+OO!úLUo+J& [~KqßFpm3(w_&@E8^^cTVbpg'ضt-ތ<5v{/'x]rt Rԉ2:d9 ӿynJݬRRFXQ ٺx6Wi?7hýiKb :y2|< P GeMu%5:nZr@? .t,gA3Of,q0/F\Jf\z m~`35Z4M"1D-bDy{O$?ahhtr"1>Ȍ=p~: aSkXW^1s nK܀bC  @')3~7OL&Qa}~~-r;F;N}O-( j fzScX䗖є1,C ts3o*30Zzlhy^XW'%l{1C_S>{uu2W JQBgU")t_rlb}~e qs@YEG_b}SOdt N\>vKQȥ{V>] uQKGoI xĊQGAT)o}xloj*9kh?|=+uAWޯm c?&> ?і(.~.ϞLOGOg\T|׵r0i#~BX>=LtiƯt.P ~MܥBΗo76*5g0k), dPS_~nF 6:(rv4]>%brs;z?efNc}2K#i[ABNOkBo]2l|[ㆫNƝӭ3Q_? !'g=E3mՈ9TߠȔ4t+8K&+3u9>CpW% E@S䍺^1}<3 'ay)l+h+d%)Ɖz"bֺG$#W3œ;`A`Y>[%]١'bxN>} 'X!5>;rBm<ӺLYl*9v(Yw_N9ΞYa$OALFRϮ Lj|~Kn2?[r=W\Z[˟ud=Gv,ٟ|$9ݨEt$Xhoըe>E)r-uI{/  =,x`s. x?/{;/}KYUdgnǦU@Զ*'Ҏ!Gn]6'5M;w+DNѡY?쾎@dڀQ̗+h!sz%/ꓞC@ pv.v,Bn<Oə1%BuvxӺSi6nGb:),ڝ9t,XRcOBW:1Go* *#3! ķ];w&g_E<ѼZXeHX,+t:|F>d,v_xv_4J+zժ`0Axlr9ni|ls$ 9* \ Dfo}|K 9i[Lk3 .`Yxm0m1I^ŢP ޶7vbtc_p%#h H6vO2f4TޯJDx|ގ H jFE SG'dRZCD۪DB9Q@p$ec~ȸjeF/+O6[A f5CVs5$bΎ9gCHf"E_ןN$*MI(*jJwݟ`瘂֕"2p ʌGCp6U]4]EǷoGuƮrRI(fio(t|ۮt { o/lYofu%m6^ROzp>~_P\0f2cܶٓTEcbNpEsTը = ,u,,O Ԓӷ_:-$ R c>5wqZJ orp Kl%}Om#37жca}y7(<70yV[P[<65iF̩ϐ=؇?M0n)[}K3N&cRשnf1aj]GR\L,0#)\Gm= 1IH;^" t߈V 1t_u/aޅp (a7n5ObT;\\K(v15~K, 詆S^Cm}F& &k(1~nF^|'U'9bYlUf Y"^I{d*ӣ2`VFP0'& nϾwbJBJO?rt %zPb$l}>8GW>6dVIw_>fzN.X* s` i'<*v7'{- E-&%}.-n5\ZGt1rU p:-ːBzJ/]TOU6x!F^__h|&6"lT3?q.կG)dNKYa74c/i &[%Evt3g|cx,'O'Tϴs"'k9ɒWmݽzÎl6Օ#́4Н-@'|&JT"گs&u|t䕚|duu&Cp9D: cZ3'G8 j=1p4N1MQ }LJ^U)ӮfyF{o)])d\s{⯴g C4V&-_a-AB,Ur \BR(Qu0E$6aSck櫋nrݲ3-e6׵O^3^v?=絖P^}[2H; Bs³7$snC :Όg{֏3_ Ӥ0'E8lԗvF[ GEdp) :5#&_. c۳|EF|)mHhҔ7 |?CPgH&qȕltE[2ICr`&*3\-“ &{PU.(#Q91GK`ϯ!tL>24 //#fhHԪR|u?!6 I 6~%TҀfccKa^ |WG/o`$ l*zߪOt cӶ''aC< 7~pvͣi<Ġ܋џ tsAI?XrkmYp;$6c<;{ި,T=ZnAP3@)7ܹ_Mik*p0.>oJhu)B-ELR SL:+q.x37 63I &agFsn?ECo>T7$.z>S8ƃA5zJu1p[qRzpK̟=S͌ۯЫ$ on %HĒG2?ʞk,;GnBePE]`bk~J$1C$Q-/t~p]9|^~?p,${Xw8(f>љrK$tuR>Khl)EEpgd,RmO[7i" K&³Tٛ-MtAW$;fLt65Sn,Pq PLYB֐kӆJ "C P=:/!" ? q5'C7HoZWg>[S6/I,viSO^ HŐo _hQ6 Pڬ-| ]D˵I\^KԁEpH<ô KHˮ ]0q@ϱo7ȧli > zbYpbΟ*ITua4风{uFbOtUo}VpΙ)lkG L`D{*2ˬE"*??ѭv |v۷?XNLjh5I_>}?|2Qv &YBB>؜$hqm4~Hz{ndYWM_=9 f a[|i*'4. y*c}"=c*-+{YܵInnOwG{>(1ؙa<4;- ǂHenS]bhQж^99+V{j>7 b7w <3AP\-qlm*`b9*6"i9%XT;84,S!\)5IjO[XH?=_ا% 6KJ8OiQ7,< Ygl6V@<ГMlXr5Y9Isn+Pxxy,['p =i>DR̭k&RU9+\哲 #VX8ynuF@vS>N Ș!dp w v]SbJC1XMK{q YģʓFNBKI짤Wȼ]D3uUCHFьq(؅Y'8D\W p64c $5>~MɦW)*Ѹj ^Dw3 $Bahvޔ5I8Va[?߃}1 r5#iw#Sh؛kT8V+IdDiPbe~僒 iڱrua@&O,+l؅HG8SZ@MRy?Yq!HSgw-\T@L%X|EDJ;opKRR HqڥALN&A uޱ q$A]`ضYILoWDԏGZRA>!i6&Kz2 qREEg6c'Uqq61I|S2ÝR/~=xOLm+ IL[4BM\"vt(/3ЌNUzf Z8p]ELקpIaw2k!pٲIG i+,oEr }lߑw d"Xҏ% aO$BE!aIr0r!vw԰]tӍL]g$Hnw{Zciɓ] yṎ=&] qՔDz脳Vds#w,!5 0?&dV-*L( XbB ^I"O5dL@{HP}rC4h5 .OjK$ ryjUAoۭYaH{L9W_ʧǙ6Ai_顥$*ZW4.,}\ bF[H0ʍC>%Kkd_.,c.~Jbh}ˌ Ѯ~>0Fhˌ|O[^)n_܄2WjC:]%bWzb'QT Lr~=b($EJ7qs'"0`Қ`Y`C3X3 SɒIDR>PU 6{eqymb?v?mH0I eN.A~ JvD 12)#%KYG}|ҚK8<2/œB쒸W=h[v)Gr])pE&ZR3oՎ5,.,fu3NUΫ&@g;Nu~r_ߠ+7,U$',]ƜND18=9a4SFZgosuo%9L%q+kh__r")BW<_jI.K6KB5rRqut'?wJɨȾ;v,c3#&?dc0Tk0vARC*ܸ9}Uds%]),c e]0 UlIwQ_ʮ vQk[CZ^b_-!~‡{c5H'0"v0vTTk* ]>ӷ:`)#tU@z 1)=wloH`n/D#$6ʒg1+D" '='zDlE% F/F.T#Qumo ])?j3I}WsyX'r)LA蠰7ẳ= gKݻϲp6Kנxkg 6KLDPJ1]YkZj_}G#9(= 9«vq~m`?Dю2>uT i^QYUSdfGD@ <:q?Jy$߇+}F7K^c BͽFU>.VxPWԽtzdV+"<#յg)cL]ZgƎ)t^p q-@>ԉ>98S( |!ʵDFb1W44( 5o024GS GX$LTcm |LC7^•N޲)5V,ΦFT&##2g[ؤyLZ 8 ;߇t&$jnՒLBǖ'R(aŐGZ7fs2SM|Sl]c4њr)g}Fs 2 f~x&'iJ q^; BQ$[%~J8TN.>|W}*=I>Q Z҂0p S9FtfbzgXU=:h{_RPQF*RV7)s_;'umrfxx0_3ZWykk2r4.%CkCԱ?WL=/9mu3ZmQrDgG#莡mf]*.e詻K83c&U33013!0$b&[ N/^VY=z{+"` w&9"_ H%3 CT%O..O:?A?hMeK7֌R~p_J[Zﲻ]-PGDxC`4nظs6f˔ ϑS1og5 1;ɓ5\O-3T, PNj9׹0FɜD2R`ف} kKYѱS9UGRkVTe=R1W o7OJHEQ~ ]:3fm&GsFV7+JUW@"44ra&n7K&-]4~@2ԣdGo97qKI,s~A68 P.9QzZA\۽Kԋ˹Pz.Qnж+]H}6ޔA_]}#Ozح\)ް& IPpޘ;QF"#5<~wA}J5hر|Jb0kiMc_%̞D>##r=(?IsMStwߣ=}3CH8 x.VL_T<חMoçHe~S0V~9ޚA.]fJ)?=[0; W ]EL,crBԔ בɘGs%G-'|3m8,\GGzAmǶ!Ǫ=0ё"L?# |u/g2#3A1g)>~a"_8bķ^ R#e?EY&H7JD6rn G cV i:@?A6LD-V5}CLȂ0YGH%=p@O^ C ?k&k$JK15zֻ~준jLI) @KRZB}'-8KC1syOPD2 ɀ%H/&V>sl7G/-eZ8 *Y~(fTnkn&bR 2hM'l<>h$FW8Yp(>gm?C%3C:X`ݚ~53Esѯ/Uhe$*_٫VuA*ZD> IKlIq` kA0}`mҰ\lJ _ToǼ t__Ӈi_3Ԁ>BFQO*P-)b ;8R|_ξ8"@ 6O}z h$Hoxen3ʈ4lK@$5<ޤ]>olS>'k>>K.Niyv)N6H$΃k!]5|Wk*/P.^Ӭ>1q˟WwIrk8f7JLd)%6^Z¾HYxZ-%.Z/o58/o]\#NicFqvG ST,SG 2=0g&)Yچl^o>SQI,`fԋyķ\ΨE$(MIDy&}@~|_>P>; ~KJ#,c'$$؛ۓ48:n(a+}Qb(|Gy3u]z]%K10 y)~w@ĆOTOz?P`41~Zsi烦(ψzˏ?o6 |k'=H ;%Vwq_ sYam1'CX)?Ip+U|C|NY#P-E\޽r9 R?7 Qe)KO!+%`=̼ZL便!*ɔ*1{%"ˢ}?Q}knJvD kIJ7&x8ZFQ?oyK EfqPz W=ggy @)EӜk& ajF'CA'v@,S˫UPVW\Fh'1׌yvG-u(VH|YzY]`*UӒӒz.cO/ukZB 9t:uyp6arl|3|vd{@}ߌףv6dI$yeUld8Ֆ]i < M r.쿐$ YGL[~ v8m>[aEG"J]ӣt0 ⚜?3tȒ-KKG[/CasiHO&؎4v\J杻94' eF|N[}A*<|LO~)6{{іnRTjV +HqW MۍO_!tu#'E y ʴ`{5E,%sFэ:>M~aqMʙ1N$gpv᯿lVNV9Y9 "O&**d\iӈ=k7crdf*r KzaKF*~*2cߢ@y7ė*7< 9:5?DVה gPs Հ!~՚󣷩O"Aă-.`?{hCzS%n1;Vrxi}D PRTW #V[1H`Nv_2X- })řX3JrVy.{yA.ChCz0"pG^%~5 ML/`{#GO,:>P[0-́W(?ȩw̧!J6Ǭ߬Ez2TU'_юN'T M| #ńSY{eybS}Kj+x_kOkua2}54ϡUOMSXjc;KQ؟쿮NJ YL]X\7ҷ &.ژf L Rl%!")b5{Nϋ?Ȟݼ~)LorwRt:">dEbE2gM;w$.cZAd%9<\P":߆7=7y YR9%H!SÿmJI}g5\5oߌMT„/ aKKPlzA73tJ &-AI'dqՕDBϾUm1uNAFoO–r:0PHrQNIRyDž8@Suԇ~TΡHvAJTd^8PP l~hс)oQP ; $I/q Rw:Pb#Ƨ_&%"#?n@N8 9=7wAvzuc/6;Yӿv]6f^b}2/|`ײ `1>[娼ߑ `ٯdž;-WpZjV8RL|g$j-"o2~v Z(vmb++5cB'0 # qc]#Q̩`g<f.0 %Wg{2Q55q|#e$oQ4CCݾԤ_k숝i^u!,?7J_ PЭl ~#څ猢96bF,cmoW0(L *y?a'U+¹ap;Gv'X :'~7_zSB귙4$_}wY4)~tK Yj-(1ʗJ-0oЧh?FcN^Z[%osNoɼVn'{)Tq9׏#P ̳%ӃKv2;ľ7$..^dEWP?bR}a u)ٛ^Ƕ#vȫ+{+)@q/5cky@C޻i+ٯE[kWI4/tj*F̬D+\IC^k!"e$ng^r+޸ưO.^EKh??fDP{ {)a}PLjKY]@' P;% 9sܧnF@ӲS@҃ [cdOߥPf] lJT.ZN=UHY ٮe1MNj=mqtP˔WsI5(̤yͤOQ3IWfϿf߮>F2-o)u})wds-)ʁgTi1va̵_OMKg1b]fnMVfY!EФ}ocjg@_FI lGJNVVķVaD{bDBHKINnhXr:~#ÚƧ{jDoWYIG~%[rQ٘oT9K>у2$O-d-P,{k/s1Ϋen14HR Z3^}t>MQnRi?Yr.+1R< (-HMkF>z6PfeB&FAS5>15J AKQ-U?ʌ>ݍ[r#B~`λ<_t;3 FqRy,#bbVM˭rÁ /".2ٟ`ًo c&_%wvnͩXPIZPҴ9N򚮌E-W0rz. [Ѿ ӯ޼JR% UUc ?(ʅpYT(2#W3ͱ3r0TYbR W9kdؤz]>!B-V¯Q͓*tf57K`/'kw#2~!'L)!KWv%aSiwkkd(FuϥuTCeAvOaA68*s`yo:޶Fg SacԀ/R9ҧ}`WhRX.KN>\iOhF :;;-S.a3ReWj%LC1!Z"6 Kt((thϦdPlt]XըS2e+EI@M!x"Ve(m3GDB&퍝Rj [2wW|뿃V {ĻtҌT~a32V$+v)'kƼiTV4b1E![&[E˻K>hʞU4{{TKGT XH-J{#yTwqHëU璸Z\`{RGC_vpUѭv2>r?6Qa-Sҏq|1H@_S";' ACcbxul)b#9RSg(m t"R8FxrmNTX Ԑc+ՍAeE!*XUBa.t5F`lt>$`63g^HJ{t~%–׈nVF,*)!e/4IEzKM;{ _u!L@We$)ZglFqƕ'~*k%S'E$c$ܡvVejI2l7^gy[[HLJ! Wx|t-Ou2YU~Ҍn!lj#2hcx.U~rxKTFnr4*UHRJh w_zŻ?,h 9.NW%oYKf)ͬId*$жv%TY3,-(oط@8I|cF yf-IE `SWK{5еBՑzX[\,E*<4_aBiANFo6QѪ1p?y <`XdHtFIR \|$(+Hxoq6Z.3߆u8jwh>!#Rwd2tj/"ʒA2ŎjfШiP rl,'[Ȗ\H(FE!޷p'-1/Q !cLn45tӞ+6^o5ݨ\r}elc{hG-b^f7rx>L>p~W(u1 D1<<&"τx>Iw[GMn1+Vp+v/B@Uf֜~\nhw?*y'z! =ʛ^$iBJ]>fW%H2+F4:sOK:0E\2,W! %+p"`84"X4ڲ JyP^_(uY ycOi,kۣbYu@9ljMd +O'L\4v}(Tڳ5y"H r(ӆ[eWc!?WrZդ}KO £%axy۰4\8K #C~OFf9IEP<}(–|C+$HՖҘ ӵ45 9c?/ٷfϨ> 敩\Wzcq>U*h|FYGCPN`R0r^"3R5% W$͠nЃu_hUkc팾]>*V_I Fs<ꕅb1z-S3h*=67`>\k8 !@|Hfoky$X:m8Y/f}tϯ7H\ 2%M㲪NO88s=zETG{C\趦jw:(9'&m*;$KUQ z}&՝If>p ~Ĉ%'al#q}4j4O6[ Ȥl$\C;Ϻ?.jMxIݒ8(KCoʙx>0ʹL%1ă<6ٿJXl^d3VOdL}ȂwC lsp`{zT(+htpޖPYQcv]U˯yvP8t.kOc!lh[bjr0mZe+ :&)gEaLrKګ]KfqR0 98s%VCnl|6X0'=]Ў8ڴZHՆLReex3 b~*V0@?Ю :4z:po +;:Ḯx!OPʤ 7$ O ߸5?owzWɏ-LyzJ±4uP*NUȒt`X|tcHqq Zt(ZeShnb^ctƼVs|ݕ.VJ]AŨ括8Ws2GRTE p: [loylq\!{p~`+Sk9s],9s-@j{#<79RI/M<3F("*CG8y+ ϥb&@waOfFڿVC}/3[e\ee42޽._+@b b0wԾTo1A [/tRl3P;Q"i+qX獵5%M"0px|E/3SXtzcs扳@UeP&z,lRi=O B>F'b,yqAWWNN5CbO!1b;kԏ3!}3Yr>rYtg?nv9 ڌ"hR'3&KA,|6Epڕ8O2i?ç[g|xt+2eQ0d^gvX+|{fH5J擁O k~*JjYC$o<M|CVZ5>V!++ è*=+BxL!t/ r"*@I:V]L<wTBBk-5=ApLPa<^ <%PH)dZWfj8hƒ6c?= xY`5WvM:$^8C>UsȒHh;Y £حʀ<dAK벅v߁)ƚ%f?eh*^ .=\`[HH(ꗊThc2/]PFCrzB9g$=;mgtDlK BꍃR7)}3ܯIIGغ!@̭wa>얟eY|po}}=%iG\-,9oŌݣ<D XF'Ƨad!G'UBEQȀQqDײkR۴\3uT*MKȊMA&fCpmC鋲0-}\5(s:$3[UDSCwlRpQu4Q;KFz;vS>֩m-хlalKU4*-1]9䊏nEV&^ҘE*k=G':6ߑ__Ks' tD # %QZ/%մleקvS 5"gXd8,E)λvSk(}zdԤJc5P̴l2[)(ڛ{Css z4(W<(b|Dm+(8@k;&3W)`Yr-V)+Fb8K&tT)vU>?MEcr\˪[M \6sK/%̧?Rjpޘ!A\A-)9 Q]mYG ޯ|j:/$ޗ13QSKwLI/ m9u' G[uWy[:&H$^D<#wHճp4˥gKsٲ##j~|8rN"suf? l&q%g֠PfS?/jEC/7$8wڥX+ja\C[c{ij;XA]l ?Ns$U, ęb|M0N4~ AtQ햜F!5`;-k>,iBA TM't낋6ĴKdG^ tn+. g kADOʄ'X~˻CSe"kٔ_5dFZ@')-VΧt4|Bmcxx0yD7t~yjo<~E}WbWasj,K㠹wnt{(}l5`vVIA&O侥rT KDZqB.ct3ʻi>{E:OQ_߫FfG00^\cc ΍e7Ǝ*bglVI+f[[dqgxfENϓtezd!)έ6HYLp{HYƬݭzrP|2 b hZV5.>9P)u6 %"HSf%edZ9eR$( JԪQ F X}9? Oրq,z+x7"8eSyX4ĝl",rHF 7В+1jjZot~(u+yT],aѸ?lhZX,%S.*MXK j7Y=e0jtWtX*'a ]Q'th' @ZLD>!K"NZXʂKn*"s?Z#.ypI] v*]-uy݄]DW7X %YƇJ%ZiGԐ7ZH* CHK:،|ζ$V$[2aXsiyLru f__c#4LH!>=&Kg%n;ŞO[ a^7Ktx*;x7 >xvz3hTYZxbY,TN)Rj`,s7ɟ(*f55􌯸s~IT-!Iސze)[?ʑuKg 'pɥGƁEZͧ(a3WL=6cV3r ̾D,' ~Ov;ԃSn8`͘j o*` !w.Q /;63% $ף.Ƅqsp)vQ@zeߗ?SNl\!K\Ӝa7w[f_vwYs\FD|%KA2+04ZH Bcޯ̶Î^;L":/?8ֶ5$baɼt[h֌U,8f]+؈e3+ʎJVOr'/y*]C~W/Rą㽕=خYbBYS^u}`{^]?:8@`VPySDtj5A|%WHK*ڑ_$GK$pCg}yMErs\jmM8vT 7%H- BΎ=oZ)\YZǩ$b`m?p1O$y+&bs^i'n!"?W6$? ^,2m`,++l8d'A<6{bA/v/%ZV| шK F~GC[vw䨾Bf=%2S*'FXBll?1h \sV=ۊ_:Ғꨄ,r~C5>Csmkӎ,:6%p!`?w 4M1ch{l :"T=j͢EbF ( X-Dh'I=BbN.s[ ¦ŷSg $=0Oў1Ώm2ϩfÆ-o}o6>} Ő͕ݑQbepr WQY~זbA8j8muo3DzwJgоNWQiC۵娥M10c#ݷ>ʹGo8Ѹy~'"z`;l5\Q4H1F`Y'h+C2&,ƴ͠L0 a HTv]5Kx?ϲN؍); {mc5!):4tjMD zi S?hR.AO]Ȳ;>őeN_.[]QNe 02VtJk^+[b7:T;Qa1ka۴Dk gys=_T~%{fdwe4%~eD<(ʈR \9\Nwh6I^Og҈(m1Ch[PHH&c}xdue߶-]뙺[7kC/]tZ?+en3y?SK_)dt&ElXD ثQ}|J=T?[n~"gjH"_!>鍵O]~ 2TKCg*JH,,z|O07x +@MF"_ÁK ɀ]G\g1|EAn3^[~տW'ÇsP=}kX`Oۮ*8sdrsޓ]#@Jǘ íW?q,oJZ|WZb"PQeN/¿R-c|\5q_a۶&=yH3:zsRU#AslJ+ RRB>]nw}qjvSWp'Pp"u?w7&\9sɗXr`YMEƈT%5K'zFE.O"-.^MODr!IxC %Eȫꀭ)1d4z>r)g|PRUj Ӓ-@&?$@QYO Wf Y۔d^ҫEHR/z!!lrd 爌M`mg[q3{h.)@όbgEl˃iY KnLbϚz&qE{s4y IYޗ*V&T"X`W@"׌\.2 Dc6 ΉPU, 5 [ <cMfu 9JJQ9z՚ە=9]dhU7ʬ^5W®r^XN5ssϷV< >tpcߣbkOI/,s@2:ەwBKTwuxͦRxF8ѻ JӝRkJ`2AH׻_c8<ޤo]NY A}FY[1%5g}c]#v6?!^^E)orpeGHF}K҄ Jy#>ZAG6:,5p\ͩydp! & Rcja^N#embCRwv5.tooA`IR*r ZjH0[TNVy5'PxI}7Yr g!>^B8.}"/ws4^Qv>,Mfca:}hTb$*4mwP`󊾄iplM^40̌#NFw \9AZ|zP\E/M{d$ Qk0G\Rg \? Sk XcDYO|V?R_wꪡݎ%N? D?!)+4 v>g.٤ԞHW'p!6KuiGϜ.E#4, OfyNܧ?3!9=8h4YGq 4٧v\ar"0{G?r`Fэ PČ .y=c&_ZobC:۸F?!$£ayj*K_RwᒟLJ|z_? ilv"|\>ڹdWuUE@;s{Hm>h <{ŠU_UUM+4ī1Pmas KnW㠕 Z|)ݐVq/46C8oz0qr)?O~}쒶_G>RYSywr|dߩvK9, jJH8h w4UEQ6#BkhWp} 3 7޵(OIW#8#͡ y/x_F3\Y!N0Fxݝz)cKF8hw(Tfl)2[ޢ|]%>]g"d9J4)Xǃ|bA[]"@Ă_ZKQF+/3ǡ.Kt,4'+eߐY3dL>R펻!eBXQWcNa9 @d W9l0>{y`Iܢᬰ{4, XK ZH,A; 5pWH/XkgGl&m=_ cTw8ˇW}Iw-ɰԊ +ۋD8Rv<_'\% 27ӥ٘2#ǵ+؟l%(QWmGժW&bBؐ3 TPc) Y1p,\)TeU8Psf9qzw yR0DDS:GJhX&[g]N?hh_ !>=KYBLlDzkQO%"Ndt.ό#t ͓B?8꺓+@gsX6觟͵ƍ}s{}JjCwkj.cġ(e@`&czD$veGueSgU :jJD\U|( :G.š]"R̕v{?yrOwR :&UfJ OF}B榑H6 `$F}lԾrHl ޻ʵ]g/ YgĘ+GC6>ZbeՖ3ŋ'C2 } Y{,6CQpƣCW$Β>BW ]بQ~ 3'0Zs,*QM{a/wJ6Vgs; !DO6}ED 6AtX#nEI5c\'+OϏ_)?~$e}f*8j ƶBP|Xt;}\+z`EJX_qy('զ (Ofa!f9sN]raqi𾺤lt$vgpڡkBHH(sF}94p,P7s%tL9L DQYAM5 ¨UC<xӋ +Gu`Zȴ:oeǴnqJMzGjGxܺ dh^GiGqzW_$~d#f s 0gwA)3-c鐚CXP'(\,ČM) o6أzlv}ƽzs^& -Ikci %\B2">M#Fh+7xNml8g \2C}aq)Y6fJ#j3޸d*M`0bB7>}lYgƣo7 ?J -O$B0U-=/T M'+Ga9EM>Cu.ǖ,a "=?yw@22sng5lO)] _t=cIuCJ!P{&96r}UH9dZ_OV6# jdl= "$T &(/)IBP+8Dԭr^WA68?e@-9ۜYfet}S';F;{2a9ƑnRz1qNp>(55T6R'@8{Kdio ʿ}\H O=yWviA-+YʵO@gb<ŕ} D{`{"J=bߵ ӂ˃MO4́|XmL> zZ cp!m)vW/%|<@ܔW6fK@'}7o.ٟy}tTlA΃U#;.?chW|)N=H7JOn>٣ٍ&l'c&FМןOz8LP k͌= ^4:{$]':S}$ 7BYcTѨJU{? rZ bp C<~ѦH '5>G9my8M*ᭁL@>D+cuJiҸv4m|$I+y ՠϘ9*.FBe@fc7|ocgM$pY\M]nbwAcL?P\VNzXΨ7^늪D72 pnY(dly/޾i$kYB?{>9"~Qsl9XE'n2#|oAС:`l=&D>=N8˻Z{wh<_IF_oU*hMfck*0o5c"mo[`iǬv wr{$oMtcX+F@<) ,pһC`Nfrk;XOѷ92܂JηNTpp`Z)Dc:P?؝I 1 ?'KJN9cG|bgO6wrs{!))TB}#blZsZ8ўVĊ=Xb!ʹ^y/-4N 07j |XܫLgؙzy MCb?oh.]*f?Fд2ۆ'C`;X`WV1q߃1_k>u/<ƒk RoxRBlO˗6-tc?VBu s} cLa!XM<Qsni#OoʫϘIƌ>iI<dbk LyJgTci*ӡkUKmb&Հal~*^zj g/ 9X߉:21'+$`wp YRUjF'* W}-BcrFa̡tX-QQNJ "ui.%vHD_$!VZʔ0ޏ?L}CМEɖnl H#R\.WxJݦo!{1p&ߜ, m5jfivg~H6K<`h*}Ig<3 .A.>JI꾁h! :^r1 k"butJ`2a?C6Ԣ3H2XV@WI#DPDRs2ȶ#8 jB9\kBCq  7*t-'|%, qEaĎגU֐zwAG p V.)#~ 8C!ve$JLΚf~rR\H] 8u㏶!.K$%AzuʹZn|X,ʞZST>upms}.dC ?]Sh5#uKThC%x juC̫1?>p)oyIl`!qY^\ҋJ}_RNJ URmBg` `"`έ*_S\2є# yVV}УFUcP?LyX4RyޟqKݎQ_3#>nmZRT%,11F3 ΘX}'uZT܅Vz5)~3V9<f ׏t~[2bi KS7JP/`>ZC,/=L-=KY&v0=z燌rDS~HNd]ݵIïqz~g} ZT D-p+Ah )OՄWt!hr,HXU)+W 8"qn#} ¯fUf9` .$(ɳvۯn <5LXm}΃WKcsP* L29f]݊iܾc>KQGcYLIlb'=%llOgQ(˜.AV\Q$ :Aw~|9byKyH/Uĵ*Bya];$~/dXWB} EǠG֛k^spX$ftMD[b~ƃpB ))yJfӦ~ *.>L#('6BN9&p!T|ͫyXeAx]R84d}VjYHAB"ﯜ(lD cY0n.ɉ"I: Aq|'"9|z P@wu&KǏ܃hQ@kk"I=XqHQm@ct-iPח{R 4uCh`|5'rq\Z." OՖ Yv$a;F>'!u_G@lRH1bR 5<.4VF=vx~X<ΡiJ5@j+!I.~|w6'ev}T) vw6ƵtΌ܆$h>r.G=\$AooAҶT>@NQSUk'R2I5C%]|8sX=ò Bpp26$Ug63r?f,/?Wv78_-~m ݩAkz~#}w;'Su #XKZJkV9xb=8{'j{cg ,?MOx;MGbSK~,D`!))wi|hnc}.i+`ܯX8p*\tӁ1['Z'82};7O'"}h)E2 }f 7IH-XEicGDU#eVQA~4̇ϵ s/@~Ƥ_=8ǐM{5ֶ4J ;,wkX`J%(Ө2?iOi5v)hBb ebi l3SVfj~aLWZ7֒?vHx9)D**O52;l GwJ;,h=g=Luǻ&Z4,xld=u}ûMYJh6I-]P Ow_"O<6%/tθzD2]ZFRJɽvIYfیol󮗵4؀PvS a`phZΏI ""Sz]@]̮s)^ރNiW6W6JuBm ruBuK%Hoh{Ԡ4e-fox2/=M)swN=V|8g84eo'oKƘ7y 7>Tƚ^]< Bb\dBOENԋwsq|'љnciw}:/VԪ/ᚢ}s/݅ESG\xtlޑ?7;"e,MI(1zx. ɟ}`iZ}<?k,ߛBJ.jtzPv:` , N"}њfbzi&6\~8mҾJ $-|~r`$hwt\LF+AZƯ˧'Ȗܡ<#NhDY-p{pI&S^-FݯT`B-.4dT=@:oZ$K]h :!P[J/c`!&GdwQ-cf1Lf+'<=owʽ\[Ơ*|Y9u %ZoeHBl \|&/ئb$uK޵Bp^!TLuNsd,w-J cN剶:|6,jR`+;Gs2z;#ޘMq"G"zEߖ`P1WDbeK?m~a'ACfzB JI{>vC`DΉ{'r7!:I3_$SWﮤel@4|ŭ$qt33#*&TjEC [$*KcQ_UYgXh,m Wh0 Oc2M16v1b i‚{mˆ~HOqLfT[~$䱗pL%X/x9EJlwԸ=¥G^-8XnZ)lC=qOx¬_F"S᤹ NP6pVʹ \ixY+5X}‰ bStIНY|,JD W& \rԋ (SR5{\hwQ6Cٜ3+\ doqӏ] YG ĉ?&pVSmu`6>(̤=@{fuR%#K_S a6o,a'cGN1Id}>nc*hѺ9Iyu}QTdBqɦSH40.oh /3xwAM 14A'U S_'2k6}|RiSD$wvޕK}z?#{8"wXJ5$9ƈBQP*Wy{*.M) &Pr2^R$<2BW$qpz7,$lfuOE/ Oyc $ *Qi6D9[MldAn!n/É{IEULЮ(ע$BR]C+ξ#78?`/hk ˑ ^x/ 2' U~p~-.)>m@ cbv7bo츉ϐb>94gbj$@f E&sPpGNtF "@kmQn], a^qAM)$O56֞1/$,wi<s4= p`@1AaE!ݠԞ5պK $OȴP*zVȭ;=Lk6QSL8)],p8!";n=Hi5,gDV-_lQ1A:H %¸Kya Dt}k̮R?A8VNL8NQ'EWH0O,-qF:Bئh7Ki (2CndX>M)r&oFI\^AwF*g4byx fT1[n˹`tٛBe-̱i1vOc\8o"}QSϑo-铟Pkh/D(y|a>ZMJS;ͮbiWbH8tE~ޠSj10ːa?o$ N;~VlR?ۯvd@M3_g=@B+70Қig8 QwcNQ ) ۰pϾƩ߅!}nUlWp' 0'jM9Zy l9 k ?11C>cLN.`75rvv3L; xfS`yn̲:[ Kj.y4>b-ӌ/[5>.u3,c+`҇}j,ټ0.dրEpYލ8wuI'FJ>|2}'FsCۇg"[QD:m/tͺ6NOTsW뀚chZ)I;$K TTG!};/#簏d2-!p}`gMȨαpԍn͊fc!R5cʞ[!)yQT"/eŘZSb$jܲAڮ87D f:w>1c_3j-.)8v98"[MJybBgpPjE J B )3r<#buZ댰5RCyFxݩ^ʒPWP̊h0 ̨kƭGpjCPyI;E%Ʊl# 1ͣ_e~F#tQZ[4F3i9Jbh]nkP Z)ǥZL4Ļ,Ci 6~p[d]2߷-Rchi,ō1-3P7SwZR/%F/{Ox-MS ^d[]5G{Yp&<^t#$ (n2w1[omgVAz &9rDhF[P^AT m$&=II .݄c 8|.3yy4=.1S8yvU^5Z[<8y팢f_F5^JN9Ƭa uD=ؐG6e(oOX({OZΗ qS6-FTU_c726X>%13nQHO3% UYѿWi:MJxl 7Vwu p5ZJK\\8!ȋ 3,9H}W\) MjHwE6 dȃ^~h;Yᗲ?#)7 =\asHӚ3m̪;3"qc%~eڧ 8׮FlNJ섩4ٓSfڊ!cq%zf_Hk7&hR}Rlь WJ>v2YР?!4DaySBdg_% `E0$]V0`0l eZ4ofoJ?g"_k~mLLNYRW xFQ 8E=RĘ~2e#ky\v(i CU!L$@NB:nt$نD> LTĪ4(ܚlao+KIE]4_{}V㲬O& @!FfJ"$$FOѠ |E s> -Jbu/L/u#Ԧ[{YTm Bpr$U\,ysˆEއGlbb'^ʛ-(#O>c+bmxɭ]]!fؽ}/u0}E71~mdߺ1#K L]MQ 2MzK]L/ފW8etPHL'Xsn`K8E}0>&}|B:F^E)m6 1#]-U)<]o IliqĂX5CLi*{^Kێ(|2zN oQl;2n͆9j=\9ubZ3ZTf&`@\"e c|)jTB^W-JAK{xG˲»vˢ+! 2D-K7Ρ$A#CVOX ⺾zw`G> rS|6X$J>}FQ; tI2]S%1\bq$qA|urX]o̚'R2p]OjiK|Qy"aӐbY(ޔMF_½`N'K<>p?vP-:1vZviPRfWvR ^q^R%b`+D<=ΞlO9mUh)3 qϽf78L0v5J> 6tY>ʝNwRafԹ$#fc[(e $F(fRّ-sbKɽ8G"}ظ$9UA3ȐY"hQ58Z($G;k)J5SȎFKDp1 ˝ˇTO _:h[F(}J-VbS 7cPŎ ^de* C I5XOp$-SuR7߬SZ p6dnE2-Td=Um|"a8{bs=|99Jk#H8f(q'-#vm2EWbjj'r[ϘϻϤOJ'D-x^0@N5%yRaGoO9^IJ'C'Je/d3(uD 娚4y[ôfs3(߂C;HR/䴭`c_ۦ2CTo{~3c'?ɓA} T%6 'VqF dpt`>i,sO݌>q|yD5FpaLS0s5ܖ*U)np!sNͤTD;蘯氳ՈyTUЁz~=DиKJ<|{>)UH)lW0smk,>](i=w \^4_[hX_56pRHfyF}WI)>2%vhdж<5LKCfovg4j|5Yu&Ͱ_Re"[.+0LtRl18pgks\и5e7xBzJ\q?/\5K~#+N dJ~F8qeӹ#l풦y9ϓyq`pV6ݲ.9UyVF&Zr\);֍Z(BR_f]q\Y'۔/O йcK$;3*5HQޭ˾ eGhѷ\-w(EX=? 8#h`q-*yH_\(n>v;KіT“?7Ƚ$`' ~+ұ~J5蹑NU"yg5uccins7.en.YAp8}SWpS1M "z 7?eXe}*㎡]ݒ8ǎA2Z|l F$%4b.r̻"o-/p}>]&Ds0i^_#zloy|#ıieSr$:>vpx'{f?ppaWsb-Y!4y2 1e` $Trx!cŷx|Q:HJ&ucn#EKHA}}sRZB6߫\hيyR+@]52h ]~1FIvDUYHW8Xb=@l>ZРldz0o |Z̮)([kI%V`k 0hf19*r?WiG0biŽ9nIH/m>V[LWZAobx=< |PO[}?tN|B[SiVMbw(ƠHϿO~Hhz<4kafԦAxKA.s@`Iap u_$&BXsG(Тmg iGe0z7@MܥBT-E){w{b+*%j>ũySϫv2RHw?jbU{:EVBu.N>Aws@wrC׊ Dÿ~b0q[%* ~bHӽ wS6P̑B( ]Nw\,x2X73LlO9gI)!zaR!Sz iS9{YHo<ҧ$BpTLޜΊ%ekD!Qg1c= CI1f[ӕ+wL1z Y[-E<5:B̶a!!%0]!s~S*b-pq[mV|t$qd?%؏sHi#Pm!BƖV 6 M.=َ cx'%z;+%;ޜZ増/yu uwV?() P'1VbZXԠ^Y7aM1+zOcZ.Q wdАZm9Qַ55i#"'~QH"n[K (*@-R%sнB&^ei*{Sfu9~KaKV-Aiu`BHb[)LiNۤ>WM|+eKd*d`#FNte 4{K 3u %ɭ7@E|w֕&^)>㱨ߪ2'h~-k|qD 8j-z?c;ਃϠ&VT) y4'EaRݳY38I|\Ċ/)s5(`lcU(dTu2L⯌{F)D|j™ISW䂙6A3x{[!=˪U֞16*BU4iL^Y{2*哗bEsU@:ԭWmZGZ"ڷ4R;aPn _vs̞FO}RTp1J!HGNcLT˥h$ViYz/ʥRt(Pg=<4PأR 4![)jx+z  1sޑCK vxnV9%Dvޱ -S Uz!cNd )Hcdc<9yRcC򕞞T|H繘bD,/ .1ީPP-Aj=A56_aR JL2h9C6)D\?HpS*Zgd]IkHA%BzVhE,i,P'tDTPv>h'a yYHnh]<"fe?| [llOm2cX7)iC3|D+f}>C?)l^q1:Kt-#w^_9[->)y^=6.GZW+s؅vF ͉M`@}%1!YU,6IC" w-2kVǐS }dc?o5_/Vi+_A['J>W ΪK1CW/L.c25Yږ n%EҼxǜEK !nK.ٌ9' V);t,jj66>Wؕy:?[\rW%U]" ̩$^`bُ|r팅/3>``辆, DhpEF <Hu(.!Z)5-.1V *+te ڋpո;B/ݛIY~SݣlxF%퉏u.!Nu=>q?#ie~=e)]sxj*7I o?1fS$u!iE wt Z7\)O2K%@! ++9bIXaھ˔vOh~0?5HJ0woŸHq8^FR4RӾ5@{LFGo(np:AкҷХ%EN\'iJB}8(n) (H:mulJv~Y㠸w\ecƶ(#A"RO(E0-8AވA&ב0w\nPe}<wH"JM/YB2_]f4_x6XtKYDmGqDW;BmR)'-WAƫ)$27@d  +0\!z$Pm?o.([fjUK,5S@{{Pʫ"0:AC:8:D1=a!$g'4^{â}zs&)}"hh_;h0%nZ$fƫO1u^9ʌNH45qu4 A%s6(6J?ld,g/hj Zq +X3<!W+w/qiJ&tE=,9V'塼P'fw#)]nD1ު>l+EDap:탢z am&&%^1!u0D󧔪  a/>_RTee2ys^?;X5@Ev'.}-1y|!AZlP_2 )T}1/#C_J2?|}ǮoԇB>}U5ZQ寗 zSTT*YPk̷#$EX}4w`R}/9/)<hbj3TAL>M}LrTe :Ϗ;iM{O9N(~6,HiCr]6;bq?f'xFx*uؗg 'h,Q|]bcUqyJ˩ݟrN*NʡDS㓪-lAPx96Dj#`fY֦W\(E;T?1+x<_c9f{L ALaAq%4Y56AjTnugT($mCs h7_"y<'_?Sfxҧج]|!x"7EN K`DzNUbl`:[ (kSa!^amf܊9Y3$1ϓĈپF_ N_J(cmWjh>ZҋC󺐼Es<%WbҏVvz5tESѦ;bxGFq)mM9ᾋ=<p `0AFo01Zl!~@,j$v6H?wa\6c+wy $kpur'2sk#/S$%|?/n뗾_RVGg& |_9wnL ^e?lZ_+R: [tߔNnA2!!TĻmWt-9 u"vhCuI͢9dc"Y {21#_( Ohv@)V +v9[<@ :/Gp9esᦷY\tEbn2dMI6Ajy+?%ٷ ~Za\O0{SܔC]g |O'r"OYQ+k&!qyejݖ_ؖ./3Q[̎jiL12}<6'%9&ҷ\/DfgQ9ؐRb8 oic\gW͹KF>~ISSg ᶛ `&%l yݏujی mKR.PzC&(w"WqM1&G̗̾VlYΊ9g;8Wr0M tBL9|iT{,y\l@sx{2S@we "cįcAFa9v[.hWBԔ9SLNVRŸX>@ o̷_:mFMܔ3E!`!,tvR mO(ǎjUZg3Q 2ZXhIJsj%l~+3yʌS۝Kr 0~a&$MzHu ˾4Zh2Gd,f(p]6X@Վ>]rzR-4f8G0ÜY㱁S<'(k&5KƌΏ 1^p]akԚ&7yiX%)/SH`^"P.uȮNs%U^lrV"k=ɐĵ/hu3ZVC7d(S\KG]Nx1Rv*G'*:?=~ҹ(=]m.NJ1}My憗r!59 B4i#!3kȝbz8G>"I0Bųp{bKcH/kC]{`_rQ|.G|2)<(U Qm#/ƧS ]堙//:wWZEz|S`n_+t [fETYqsAVz{#BU#/Lܢ39ች#BiՃ݌n6uEkfA!` )_ + X޺gt~/d{|Ӱa\7o#Eŋ+|?N"xS$%;w1y b;P=cCXy_[nl}VXFDLy7U/(lTdĚ`[BW0ǯM0,ChGЏ].xQgZ+&A~e۠ n_ \ `+hʑ ~NRVeϠ\}ɓ0TeQ;,S,[e(tZ,+=Yξgv҆|Ws~o(OĿ~041)6\FFnn'AEhPvmC;])EŮQ-`%ߘ(l^)NhRKbq?O%j4id[/Ad@*a)R@U"ԁKЛR8۝&Zl Ӑ%;}F''7R(QP%kkY[rg(<3ܤ}3KrΖ'.J7[}z/?٪.Ե&Ese2SIZ;h^ fSP!J]CCJvs"E"4飊Ozݾ'a8MYVOΝET / smN~ x[ 8ø6Ɓ=:cfMFB ƶ[#TM1=Slŋ{F]3.r{5F|AՐmaڷ uw6FO )7e\JthKJڑ`\XwHʬC -Lt̼A8`}BA^x)Bڇmi z`D=ذtܔ.KH43*įlB2-‡a.Zl2aRRGʄ"U: .[8UCBA_} ]B.S(%)f57?ԻOpldR"֥qV絑~)!i++6 Qrf)]D]YM#p9[2Y`19SbFԭ~gr8EW^m?\,g4wG {V^:: b0fŐfO ɂad۹Ǜbt WX~e Pԓ P į|^߰k7>|ٕP"g=Ril๬xL%cưX8Nس,G !_AVn0 ł>Qz>7#p4Gc}\a\΀ܹMD$&B#\$I%q̋/G"KC(M,MOc;Ł9pg/Auy w;3eW&p;X!&1pcQþͲFun0h2!>mx=STYv/o XF.l[ܤ.uȺw#Y41E_e>04H# BO9-7pjTOsI-DQ0BmVfQɠBH٦ʹŐcŗV8ŝB; _ŰEZM$i^}Ixrj`zUK%453 Y>b"cs3]brK1I1z!fb505K[ a3Y|d97^7?8IJa(Nti-"CH:6ϔG6lFRImC+BrA j!j}E}XY4Lah9͔o Θ/;Mkb`>c+ tM^R{yʼ }M^3Y}DDGoY?&wM~\yFQV'% 6*MfԺ@ӑv.J$_jeP2*0C۔ʁ9\uDQDǕ\ob𽤪*NBsǰJ= ˨"IՕfVt Mلv3oys Fu!nMC#=g9As<90Ө9shp׉`#SSAJ#UZu,ۖ$&IwWg)1j4:WtYsM HB6NXp ,zfגڨ? NH*޲c/9,)׾w".UprcT l/|*@4Ӿ}GUa1jq/–yv@<?(|U%,硃zz \)WR$igF۱A9c+1wV#\sq{"%_Sdrp[G/E$ҞshNyJ1-*yI!G{ꮬc9 )pa툜 uGL"T9@S=ј_Ƞ`øm7NYck+~7WJ#.«˅f˧oHrgS֡V;asgS ;TYSbsp@נv!O!UX׊ xVYr:CҴ7uҌFRޮeN16r,k" GR@w:8d!ِ_9Ƃ^%4vg9Z1>KVi3rKhl߯L33W,R=E_|d"%Xa6} E c6ޑoic a5öY,-٦"4!&!t|=s@Q Iģ}qoUnntc )EzlfƉIK+aG)gV6kt&{CEz^*zy5s?R H a 9 K)GeՇ]\N/:˗2>7C ̥gT$U" Jn3PD p;;ͫ=& U a0Q̼8dֆ{!G;dU@RVk& ䷒ Q5{)@pΡ UYS~ˌkH4h+01b&L 6ȯ1n4䳮eѥֿˎ,י"=S;]X$} pĥӥNw k+$%b`ʅ]-~wm`Z†k)E+]Y&Zz &]ôo1=vc֧Qr)k{-(~Ё\-Oc~-`0v/:_cs=43_YyĐ:bO2ʴF>qAi^F֊^J<Db 0v $7\'A6>)sK0ilׯe\?~҈!jFBɢb~;cr-!uPץwnhѢ>`Ӌ*f:_&8Fux26l-MY%ըrE*p > :MO?/)6Y?kCDEսʶIe -+I She\S:X1ctcg\bqkq[؅xS*HG3f}yxN{W M.^_#&sUS$_^[ kD *m`|l".Txï OYB_W+sp }#:zAoDZ+CTUTjiٓ=rDZl?ld[')_y?0 ζ# ۽XQ 1ݞ}d+걐ްR./&1fxw7Xp;lRs1OIaijiCsC4qֿQ~ m3F;l$pO3b/9Wś1k\1 /SĉY#јp*ب Fѕpꈒsֱ;u^9;L%и㐘)@M9Z;+p+~e`]8ʠtF07רJ-qnʘ!ʼ.-^N)}ʬqMr1?\;zib.؄freyD'o'J4J> q9).>[g28&@Ffwlo!JiR~)Au"Vf4sʹ 뾥d <5ظ\oW!.2>5U7!6FX uݥîPH<lJeNѧ+3R\z'#|*;VO.,\aȫAA)?Z ٓL(̹a-SLE07뭈% f÷P2¡r+l ~+,(+vяSjT1 [lWܔ.*B7).6Z^dR*ڴC=&"F*HYZ;`kLjdVR7|/OŶLA{s͝RW\U7Baex 5<;r ٻ7mK.(pxD $iTEócXdS0u;”8ŏy!_u-6zODMU#|;|HbYl+5}yGpPMoghzң֦O4=MQ}[2f{:%ֲO" t(ۦ4cu5iđh`.·1|LqI"}ρXKw;B-S! %OOMr$vx bed2N<$K|sQ + o%8|4=,֏_Pܲ[$vD~}a]~g#Vp&s\w2&u##:Ό5q JJhۛa" :"+bQ`'D`F[remh Ϋwi&1Yz˰i;UZ 2ʼxUpď!xBZ2kI,%_wUg@N)|(6T10YYYBZ\Cmrm`8*S &tq2b{:Y#n+L"> 8mYrYN1a^CNxZ,;0E#Ս:$$#SF+t>?}5[4"ջ!itaT cg7+.vC &Q(18Q +lKL dC42([vSNxf*2Fܛ!`F-"#D>:ې[vĢ g"zw(DїmPU{Ǥ@U16S ysa(_v9 WB:t\yj}>HlsqЗo˼M5(Fz;9$}K4m;9/tBnݑm Ҟ* %†JMnJ af MTj?XKpb̴ %\l2oW㼘$)LÁi'CC [zF⾾_8JT6BdNZ2$* 4 g"MtK%c:.b'D?% (8SDh -8k52fC[J{b5;`,;JYM^\Q2OkeQ-(B6tBwF Gc? R+"DKZ&C_C(B | zDÚE5 w-&Jh ٽehxU|>ʑN@;_wgI;4qq"c8c)²?J3D}8p1}p(EL=%PqeEdoؽxJ&wEm}GDVK:Nܥ9;{lx@,9,K_12͢wư%sCԓTݓӳx c^O_?lx_bSz'n4,8ydn6UO^DmnA>Np F#u6cDS9kSr5#695[7gĝy?2m6rsjdZ|aJe}؈^ֺq9Ӌ_ʩkx+>Db ;sN|9,)6>ȟ+;P4'}G1qDY/&n1 =>S;ZKq.4tWbKa!?]Ӹ8Gz+Fk1?$6/{[V9x*?(8[w,hSw$0-vڝ?;;pG_'M]r%1u~%`k^W +ˋaT,#PaAC{IFMNB0JPo˟\ƔD|ߟGK8ƺܘ~Sҳ2oiYu)Pg)C{OF*: ۼNZ&?6PB ڧcd'!DMH`{be- YʴUI6 <0M̮DCEO;L}y>#W:m7ؕ2Bڊh teʔ]ʳ*M;lp`,[5JIL٧O hM*|Fȫ]3orY朢\Q {҉M?>Z P Ww1UQ|30 JwDrC )iԐ!bw;FOA"`&[ A5ևRQ;-"f̢-9[}t_|0Ӈr1{'eD@0XXj>Qu5d  Ce+#& \t"s\gc2fپr}䧢_YI&19&KS 8=j -bG,<> =Tc[@QX#8EbZTl\ Yakև;)N;;,s,4>3[B` ZFT1k.%\8=\…Iv_sr "R%3Lj~zB`W=]$Or9=䋪|QTuwYˋ^2]:P@H9-2\nq5'{Q Q0 FNTF Io#mb󑭾'bN5h,%!fYb̒_ l I#ăȠOeZ~+m΄_ȡu!h}w͈Yn;וz 垮Az, fA5!K<4OV<_*OFFQ3'.NB/!_>\-vx8ffx B"gZXzHPRzCnbN#X"rb =<8ѳ\$F>3zFw[CuXUۀ[й'HS*s~C]nX6„D!sYA8s(/֘( 峓X57sޣ&e6d  J[Úeo@*EzEpF M:f\?# <'%" ꉨ.$iS~!pRH}=o|2CHDu;)6{HexÙiLVj#!6M:7n z>36I7>kGX,L<ӦJ@zS'Ns%ږQo? 1bWo'/Z}L"x= ֽ Na"xJ&s> Kÿ"Xe5KASX>9AR!g4[ 92LcD@K L)$FF]㓯}/-%`B2i-4폸Ȑ=r?FSYꐯژZrUPqG/'7GakJ IwRo,2fh)$)yW*])iXAZ7_o_ a X} AZI,9O[~KkItH9V6cDFwww `=>IҶ혼@"q/9dselc<#o#b\4.#X( rA`z1κ{bdmng*t#=lZHRJ]HVm.s޷f. / jM‡M N[FJex"xG E=='j'^$M9rĒЈ*aӱ<=q²xWd::a&gI;Sbh)dhN5֪ <9ݗ沿W  cM{y3Ǟ7"owoh%u.rkl돛TlX>-P]̰@,mZɗM༶n=H9qG hG]th6y59AΨSSSZ^,w[ k uMk{K;:Xiqbk5G2ͅd "62mZ48jODDߡ_T/ΕʀLj ΉHG=Ҽ,H\N1򏄜"#p܄S  g@ k3hs5]JKZ`y(Ňoź[Ւ¥tÛCsGO ˊ@>+*91W[1:j-Y-4LNϒK$v)c#-OZ@o}-<套EO9WHn~JHr_~CJr?'QYgƻLogCd;zؒ[t0\_7]伽J8(ŰqV!A('2NjZb;/YVl3 1:\f3 '\ֹ֫0U.?y<F }lpxl[[E7N۟>bz:W^ f" W+?c* CooϭkzEil 6 '~Z:8ÁeL|"Y-lu˨5w ,z۰#kE4\OBhy|)>"p kF,, o 3^FqV?`0Ļ -}j]"O,*nw6aOmޠhol ~κy['qxd[Ԙ,p橁$ˉlEbY?pG:%|y+R+5r? 7p΀PB н "qO)3Se^y{Ýo7pvq";$Cೖ LH'iͯP' k#:Rޔ[Ty@/FNh9R‘i[}cO9v]Z|k<89|I-(qE}o||^a썘beAԹj6sH czdU|<Z-Esج|;e|;8sR͌ pv܍}nP@ƫeGUca ODuVki#0!heY8xZX;c;k)07L AiYu72 _rRrɝt&P\Rٍʨh*fQ,&GC]_#G̲#}Gڨvy_V)s,8 IoG*b8 .lsG5*+QF׌qaufB!1ᛘev#7xDs u6t3}Ts_WTނK}5t[1h}BW+S +hDrr--tl~'WfS\DW6[^ s"F Hر<0sLYL%s&JvHs19g|RІr8KʀxֽR%ǀmfk|t{A 3f%L~i/` lݵWO8?kIM>rL)((lB-'6TY-؆W*s\+{TCxG )+EN2TcO 6w%89&¯SԆnYQ& O'zU6y{L8 ̹c]pe J`4.uHU Vnk~FUcj,V&ॽWoKtƨ^3.nL1̬$JJDq΂8h)jyP쌦}c ffo ?07! .$d%uF]RfksB9<,;xk٫;{;@w\I-p lS:ȍӆ 픟ۊI>ae3Jow6ЩGJZs&X]p-tC~=P +W\&\pye1sP@^&4"hXKO+2Nv$ĐxQl*"ɷ36بotp(,wL+?#sĊܩF}9yDzxVG;{Q_@A j|N*+h}jG̚O<]ejtrUglsSkט9s8J.1v7me +D겮6ߒarC5֝MXf.Ի9 SjSZâ~c2H3  %sW[ڧ(}&W3X1\#Nldӎ e'MMkD}}:kk2fwEm(nA%`kC> kv3م7b B<{7ZWKp8AۺТEJgY8-H{41dp*r%Vd)Œy'9^e+3TdUmEa#kpfNM(΍P\rA֗ӜY&l)ӭ8ϟ{5ܴ"2$o#3 ـˆڐgO-({v;<Oѵ22P{ 'L606\9].GQGټ~J B~ 0ػUΜ?C[ⶶhFNO]DtYYvYu7ʷ9>?r#!8!Dk:?_pXϓТb#C%QuRCH; eڈsIe')ƹSD4K F\\6ݎN8(Ϳ$_b&Qh j7n"M4cCӾ?CXޚcDh*)JTY}ǝ $OeHI:eve_afed'ג8^_[*>7Fu|f{G uVB,HHfyUSbH#3w2">37cvDMc@܊;agasжЈ *Ar.Bt(?I㊀ck2jL8k"Qw6 ֛0a9C($r2'*>Ac.*{bb0Mr iGA\{"/sGjM0"e `>6iq/0^- SVX cLCycUi;U  }Zb;b{*ثKL,#HnKiyZF49zvOu"Qi}kP'\e1K1vr|td/e#%I~ʥq\fk3Ko|TUk+"\#lI7?rɶ++K v`s(iOnM!E†iXȡaoFخx䠽)XsǶ ϝJ}i%ps.h/Nkw[IM4?iU 1j[ @YvGU%;GUPfkM.S#rz BQysYo+lU  '~:|z;Zg{~^sݥjf^D.sd]bJR 0lNH~@A*~]ucu,.=6j@2O!98KiLˢ)ѷHízT 9`IQ6atẍ̰;y‡r2le՝N;̼ԧ(ʬ@yd*T6AeICoy2{YEF`я6d1=3J z! 䞵ڪqicgR3SH|//Rʩ󛈵ʡazpv\R{*|ӎ@fh-۶8щUMӆ8ّ`'.=DNNpZe]t_ bnDM֗DB>Mk!~M^עc+%$=_yf&'6 ء M7av% Z qC?c|؜>ͺUhվZGNZގN$7H~sVϲ ܨzFisF\;wK4RǦU}|$t(5Nc0rP͟i#^?Yay8lKc\,)KM0|%x&2c ' z]9guNasGNwdhư9 ֎.-1 ^3g4{*..ɳn0^zS Wq?;"sA\NKqߦ8ɚa6)/;Ɖ+!2?i$movǴ}n7 +Y&rpD "YKqbm-690$F>GC:݈?zm~& lQ,LyƪSd$.CUYu՗w8k$j1-1n Ch?K0BC"kˇW X`7iF4hwBBƼDWv) ʵ@?뛦&V8rKsHg}1(³cnscB 㚥M53CΘh=#2֑Dž6=DwzYb~{;P`HY3 0oy ei^sc3<$pq^qf:dd;s%y.laBpfDZd'!}(_L5:DV LC#f!N$KP^odfL8X=B'~!ʵ4$>.z)=zexOTYi/t# X$>lk g翮tl؍WFK״G拴UؐoOg+9'(((3Ub#d%z=zXe8Rb{۱W74QMYNdI1Y"-]7 /:?QR"H-\6-Pr] @7֔l3У\bG?)8#ٴs5YcifːHԇ^keyFhg[Kpk)w0$(c{lkC/{/h`8Jգ]&12Wһ`R4xIڸ[,͎%nXqs(v'|"Mn-ЇX2uTLD%L#U?-7r.%Lb$UUC>z{$Dw賯->Jb4y(cCW#=FrʌF x.rj%*crB< 'ir3)BOd O"%kϫfB֕bfl9y'RLܻtl40WNSHF:єԍ_P$SnOS ٮׄ(%70EDN`Pcx_Y{9e׷6†έX!G~90A}zkwsw(^z>6I#&LRR$ôK뗵s!4_"PĒ~dS!0t=BUw"CK ] ܭiihPqrNSc v *=nL*m0)XڀCk}Sd9lLk7MqWn ]Z@XX15>nT1k;ڿ8;i?/S, ׅ<|ldeLIg+Rҭ^,ЪH+BϡQ.O⸅%CG%@{s5E"N}N;%~aEe8>SSP2c&/C+U./HkrNkȲ}N{v5K`,N` 3cbx6lmE2<+,sj3KHyY>4{TN%LF{ֻ0B$&I+ qb>? 9sۈׅ{d 5:K@ӚA:#96-xHx7gR6 /IDX8?hX; ʴ~xs57"mY-cp;|7rl>e^cehZo7vLlFPn9-BW ]Syiė_-p)iѸ$#9v,^o^on󚌦LB݂J3Kbz{TL] g)-bM76xs8<Ԛnf-ZYaYqnGFt2eiSG=34O%n'&Ҩ|/vHDr;+omt>&$GB2OKt /#ۭ>wE^d#/+?U!p9HV%;R4pAP5%vY|Ġ Eݻ!.qШjDœ]ց '1qI=;I}K ګlN)<#>C1?S_I vQ+ uGïlPJqB˟2DW>WBVLd y^%ᯑyd9r$ xpnLJoi&lwR]=Pb@"̴gJj,p?l ^V0JQcY)snj˟E(-88a._lmVZ!5z_s=DF|k׸-Oq;&Ӹ#`2<|: nZt칷$p >#OYuU+th#WROtc.Z ŦBb |R#8Zb-cO,Mv8p|>HE!jK`G8f,ɜEpi\?|19sE@.3EFpvI_cSApCCx>W\c3QY$^_Oc+zFT i8722uE:屝OCrbio585P)|/58JDz 3\4fj JI%A͟rYBm1C7SƛSr(YDu@,C^1kVD-ΒQGxݯ ]c(㏅L1~O@mλc;Ϧ3I8h[s1 r.j 7 V[ (,v+4/T|Oll91['hO#d~QFtL6HlE=>;OHʩgU?=p17lοe<'6\e<c@~Ct3iIQ}qK-GB ){GfCHdLqaY&x2=upohWvze tu R|)Ò>Y 5p[*I(_m 7@M}Ș?,{ 0h}zxG=;Ix)^+v4҇CDm~tA?# sBCԃkE ~|-)C&2{=PUb ~ M5ȩ^\FtY†$4cWY$-;U95ƊRkֶfp Q=g0R}( X1P.k>{4s)K)%ng!qdK^7K쒭"@iOjbx|>>1ߨmu̩ƌB[Jכb TH/DiQ*;IvN(,Z FY?GhCYcKEx9?S8Lc.vUm lbM|9􆬏s,W3Syhش~1Ds(E*һ.:e /mՇu(oT5c#pOK.}lT^+tD(0EEV?%bjmk_GO]U#0 U)mq$j ^fjle5֧7"UpK/=֓APC"(Jl"ˌvw[񧘲3OS԰BCWԥM؍7mjU %c|.p>tWwr5_tmI&̉8~eB u(nFxvX`/h 'I;$[И{7'kQ}|/7H+*E߻?sz`]D59![G|} alDR0w`G z9wη w&[@/Щy~RX{7)J=οϳ[KDL7R屩~}sw7Q7~fnsVNJ 9g{>9fO hުO"ͨj˿ s@UKF˟S|q?/h~^RE݆-ƴ0GLAlY;e=%uzpA `v\xxsw48J7c~7.Է$J7ɰ~NlmliM@"q|LZ(MJJ&|&90r0Oߔs1_|g_62!;<-*ДAW+bExBHp|M+j.=Prxa!F.64لu+^MtRT!g{%?F_Ӻ4f!xB%?޼bLj01`oc&+̐Lݖ׶b\;1%h 7B1Y/EVD[lG|©DŽq89)/Jr`&B P|m^-Bt̯5wQp'N{_ q7o0 9Ħz3Ð? R@Q4IBYW:yE;O|^ajSj2& vM%#zZ+cΑ]089h,FИBCC8 {5N")Bĸ:xd˜6_K\GfMz(GT+i;e] xw }6wWaSȠ)mw')$;cH>FILkW .':VUEap1,354+mMWӣ;faRnۗXmCVk (QpUgl}$T FZ;kNX չ5T$$CWcDwtF.S2+MQ߶>?p}aM6Q87-SqneYhp̃mx٪'Sp{|L "6s͘.2pE\ xzSh_Lqp)CEM}j̘3lN?=V/Islpmі}IK4H`444_ ;Gbr߈0ٚgc 2d}J֏>kS#))6?R!U{0J'銕9ߞIj 4^9OiEfQģnTɻ;c$Ѵt\kY¶6#^nA%ѼK4v#Ixޛ`r詗*M04?H<]3}%'l}wU\%,#*C0晄Ȫ>2߫}"dHgPL88-Yӵ %[nVbAѕ`7d4O"mzL]kri6tc8H^۟; A4:e.u/+wt]c]]oy[gnt8@;KO^C^}:jt5Wٿa49bx JHp?c$~iv~ pDj%H]u;p<z'3pׄ>dFSsP6HeuY$H7@#v`΃?5>Et(MH+I)7o5RpE.ڼ Ht; *UM@vXșKK5ݘos{tc:9(#V/?3<Aryj6=*^"jSh(W .]„!|% ?4UY|CS3[JvKboKEН.wKϐ oދ&䭄l{Dm# 0𻩍cGslSɒպ!Ο%yS>O)9P.#kTD#c)dXSUW=u :JiBb<; O 2 \; h4HԔjPj$^8!-&|eIVnSX@b.̙?q<"NWskQ>; 7v4Gp64=HhIN>&IC-I4~Ek_Ԙe>jy),J 0m/8yaڠ(Ε8kK!Ii#LH/ķ w盬:4 avTq5oVV"gF tE-QnJ7(E -0䘸@|S}_U /&NN֝@3^YHP"B yS8s0l *iLE$CWI429o`c~ޒ(U*;!ڔG*j-NlnBbmjS 8,s#O&Yغfz*>D_ʹ4χvϑˮnV ^g5ӳ.BTם)/_ysn?SmSSJ5dL6$1jg'z5HX(F^n)w,OHH&U`6^@@Ao+F*R~eYO>aQ7'WnVs[(S'P0 5 [׶dk!,bt&nK-=Vy̮/u 1 -B\G<&?5,8\c}" k.%TC^nЍ|sU~2-]շ)~>v1k6nkroMh. m,?/E@4#:|)xe#8)+  {yS{)<\qhv4`\gی)F.S̅GSb2Qc;o/?mMᛘ0g!Kl7"h7׶l^Upm5g ,F "ߝ[)VbhA?x Rjk;wI!6mm96;F bi(cD ^v/uRsRq BHۉʺ7`qIZd%e-hS{qP7ӆ};v^d+7ٖ`PjŋP WB' f]_ْdz7O {v<~}Rvg!zYw'\Z "Gf[RvV!}p>qBbQ?6,퉠rZ@[7Y&g+x=V_u04K(> \SFFz%={ ޙĞ:^CJ4LbLUL6k֞ SL7:xjsw+X/k?q3*˫#E3v<ֵ8>v$_W:J+6cF;eӥ.9Z (0QMx#l?-=*ˌ}`BTXɫYPwKn]1L"'NkՏۭ"^QSN*I,I/ul%XUs$!>JZ}S C}g)8F5 -$pPZM\i$>8ܺ;)^KdZpM^r3x ,dK\iuq^q)e2] 4/9/ ܴ ܏u/sx̏i1IAZIM- |ioC]\3Bc>hrXB_!Bf˖imHN#e;~l)Kfs6p4Ld ) _̮cf8PakW%qIwVz>G IdA6N $>C} :iR?c] ZBUֈXcKEARf6|w}CXNoBfّ*V͗ 4&vc %V"% 3^T-ͨoIKif]ߺq.dk4D:͒7k+T*a4eh/XٽHGO١&m2&[W/9N  lftN"bw IH~ 5{TLw,՗<;<@MpTΨFPM K,Ͽ뉦wHL&Zx[LANmI!9}܊'/-x7x#xtԗ`2񚁳fE)3چBDhXM5y{-2Uipi£ҝᐡVEh=žzj`oV^&Izcl5fCK*!lV_v-lͼM+WI9@v ,ӱFQNP\W(8(z/Yµ" 59ʳu.p%)dGMΥܯ/ooeH4S\}-BW "{1==>p<9t\%jPU^PS56n2>#$EH7Ny,-t콕ڙ"c *V>0q)O j0 h3h_eԛIӞNhƎĮfnKJ[~H (+̥Y'wM)J(XL|H|7W}_oJ{tkxmzF4fĦ ; >|ʹqd7tm=?qxrXu~X?2l M{n̤+$nY=FԷYċNw[W Kz2%xb>âg̀+Ipf]>B_f~*4o4_òL98 vA ]vPu1SMYA>^E CôQ6(n&*r/0,̲x#_:Xzsm+Bus-#6Hx!ޮK& }Kl S#璒ޏg|Ց9'GSBd#:VX:yl2mDDc)UF KBXduKڐ-Eul#W׬I%_yY ƣlYRpf˞Y[`H/b"ʹm+Bss5Vl:r>Ey~XUq-(O UdAhJ=fLO~9:op|Ȕ)[P)Pin¬#mMa 9*Yf^zA@0g;?t/YH|(}I.'DR#OPscUpIDPR:MFѱv@)ϙ_}m4v9!`4OjSA\'' U-\;,fK*?_8cFy[e0? b#tFus~ODDgoH[h+Vvۂ\QaENJT~Nw ³0z #ՖD0 Ԧ 9uM8%>>c Z$ k곲EFC6#~elH՜[=]ްMlOHLC`=pQB@ӏ+'_}0VnRX+X-!i5c.ʗ bB(;;$srܝLsR[Y0׬r^*8'ar)s}tڈb %L7"NY\8?){.&`Հ痎 d]כ@ u?,S_c0cFk9"4^2K[T"d{Ȭ>}չ!u@3`Ũ+en o[z UݓBI,V `N;xMဉ;ZjO 8D><0(8ͨ9jW.ZyLTo[ddRU;{w-+O>X0/1K# q)syK@j(E_uE Ya9C;ak|.ڻ%3ڳյ3Zgwbˇ Cg$5Mn\9/һ;@]6n:>8T%&ۡ#/mdZkn:uA^fy#<ɋw/+dvӤ>|R~&@. YBٱ/睄+ 6͚hH>bqxQ׮62…d'r1"MIVsO+QhݦYmG$D$2"]IqN"UvpEidp`P[ 7Aǃ뱋qh|uyn{]%[@7hh_7ݘdt\=Z0"S܍EbNv #"o.< ^5z~U3< k$#9KԬpH`r.t~{SV0DUtj 5sJc?8U)Km3>RȾ5d*\:U1_t{:@8{=@U_r]{­C@yW_.7mȗ~qxWJ$j_1Ba1B!XnH&r"T;ѐVKmU_m eۄH+A ^ηI3^ժܻ}TAASq%Ƹ޹4C}&JDI~ *+X .abȘiF#3L&2ǥDjob>\N>S^OwJ7;]f/lY2Ф##-&MҟϞ$X]9HK*UY5xmʽk 9*J{]0ZKic |yg~C8|1BEuP9>A-뒟 4<*sXff]FsT[KA&kB8Jf]$?8.댝<UہK3 )V S`h |~6Zeo} z]c>t Oh,%oc"`=*/ǂHU8'Tw3fsb3z\iH^=T$NڎaE4jyhѴeCKCSۥٻ|K1HK[Z_XܻNdct9 lWsC$< (;/L=wάSGFd޽%d .;Z%Zq|= V%SoYh&[ڍ^ \H}ZA2?$]uѽ}dc>c$#w3/ɼcYw }vƂ[4㝿cG9W3D/`6jPNl-#"Ԟ31E"y|ѝدƵ"l:> sܤ%? B_ws*&%Wj0"P U)q{nb ix[V>ս%0zҽ h<ЈzyloQxndwֿt3*91W K+XmdڒK :s KGQCCgtIHD2X5"4Zf5+y+`-n),@)J .jJηΧ 9J1.>LMZY[ž[I3BҷsRϱ3y* b 8:?vP,f )s:-%ou~j33״h&6ttڞίY؆9j&o沅 R2 хIQ\ ~?J}'6 rtiWo}+^.1+&D>קX΁# 5jye+3Xcu^Fk"^Kzy͹YnY؊$rEgo^E6ꚮI#i?H/ ~OW&)Q<d 5cPDJq6E=[qB#JO^M[q^ZcDX}-gUyʿd̸`` T"cbrmCJ4j2y}&~st;إbk}.M{w^lac~qX"2,C$) %A~#inޘnc%B4vĩ‚|ecxSU,eV#5:xlj#Kh5Ek2]f4䋇ҪIҬZn[Wx6b!}^2Qy-9z]PNŭHU֤*=@1X֗$FuKix p49!ҬJ(p_oŮwUy~"Sʂc‘̪A<5 Ѹ[QZ6{[ :e]^ 8&K6n?G`#._N;?K#[ra@[FعyLwWvHQjMq vnVI1kskE1~REp;9e$vmƽ%iVP2wu6{='~[saȂ(d&Y9;J[zE0JŌ5faC,N>ٙs_um#pL7` o roH?GU*0A"8Ca MH3{M_CSL8gT`C[q,,1ݴu%˖^c7-N|910^Px8IS Y'!|IO" 㪤lDPZdaskLrB(qK ||P@޻r|z u\Rdzl#R@(=<ߘ .;kƋ6r7%[xȄZg"'zwOC8,mf ]R<go@z𤶘3 \%:/Vv;9oN]襗Ƞ>3mD؊ny߻ ozON^#8WVᖑsgCHRsٝp7O_(ysԔ?#-iH뷞h4uzKM{!{3 }nC:sa$`t>PʊfZ,%gbo/`n*?]P_"e N#cQg%b̷h/FT|N}loV;.ّ d4V끃hʤ9k]fPw-/^HpYhK{g2br܁|Ċݒ8LR9`ΌEËM.c4 ٥pD]G9\&먾>uqOȬ`bKbHyD*zU T1»;(6[7:n\\cTM/?I3yeƬk~]3+ +یZR7ht%[kmaIr@~ dVg{{OWꞳj14܂mfۑ O\D:zHi6"'ڐ1dD_JS3DѝVK/"h)y[ M$5 g|vSqs4Ribr䓫Sg\|s Y%Vؗt*u%͸IXАI|=K=4 "WeOh8bȡ0wR6"~I/u )# !n#>t8_⾣C%9岠|'x* y/vH0cNdηN;s"wMzj6seC x`3T_Јs͵΅k=(eJ1SIe%1B_d mעps7%34G`E1Y}q?~=jR"tL|>4N%fPv*ؙc#|(938}RT[8.T("bþ%1[[Y4U.@PW*o>R+TsEMe  k3sdt%Ű^php\Q)7$*>$po 8,z)Y̶ Gah7%ҔIqԦĩK}cZC/LȌZ2$[}{;a$ZʣSS[%7dK 'X3{~Y̌R/(gNX)ab;/H>R8/>*VXc *!pM$atPRdr$u^#1Dz]]aDi`AZ:1G3y?.FGάV ^c_*R!,F5LCr1Z"~K9p4OBې_hN (}O9}%l:i{5p#΍O&#WkFѡ/CP6%l|)^/%+]3fo@cm%S ]e ܴ C*4欈U[O0y-oSTgsKE ];wG9 /,_.~j4[v)7Ԑzg|6 2GUVAjPnх ia<v ZCzSJ__vd/l?6>_N]@K`I3!"&6i|7,Ea7( юEP>rX0uOR^a/_Ti*=Hr:`տ|=6b8^x.xlXs\3&ߊr^rwE|Ja+zl1i4uiANob]y5D~1 D{!V޵ KyE @3syiEt,:bhj[ei`qr+2czg{ߣy [0ZQ_Ҵ[_O.ΛQ$T28څIӺ ץ~Nls @XV^0q75iC`y몥BAں\ 9_a"A#ujP0oL~G+WӢrOsnD4@;@2Zy,Y؉ ӺYAAޣ+G3[M$.^/֗2h"kd̴FU٭lXĆEIt+*&zl@ܡ!$%F 9Ηjh[}I>/@5^ucOF?l3bK]"0™^.8Y+~u,Ȁk@# tM^fuH@]_K>0eMdE#_"7ܮA:*9ݏn!yc{7O<Sz1Ӫؠ6hl,5jx)n c?<>\n5?1c4Y6qD}Nqgz{PbYqR7i,n%bH14Z1  p-W.se0Z|ϫ}f1qȞ!:9IڬB"cM[CN*q>:f6zdfAxTU" Szmԫd^4'}{_ǾS+_v{@}@!k+oyP* (|W~,a}e%8"26oOdH:i}ZDNhp8w9 >z;5Z #M]U?ǵj #vnHB]VݧQJ_h.1pV>{6E: eō>5 Pilt _!6.RVF UA+AUgC »*m".7^:Ϳ`\Z a{BO45&:{2&_|6_5`α]IQTl1sp}KU $)+|[9kܫX5KXy&%rTr |2mNgZeYsmSM ,,_˛:xWb0+bytE+p.k~#&퍎[㾾3!j'v?g9[x&g$$-+zjnO}֐hV78P՜/%~uMY2߯Lfb?@s v.m ~GE"' 7w=NBDߜ$>8,>8Cg]vt9 Y?1ceRcN%q8\)lk;H3-9MGo/iC.Hf.-6?I(t> sEо"-T{zbQQ܁%R:IIQH}5=#U@@x0_**R[X*E>m$Veirneu0HHOz5 ?,q ۅNJ+Dk<) YAX>cdg񐛊1Z3(u}m?s7L(&0qgVDM:1qr9.e/W-TW0 E%r4OU!7컛ict+3gybtp,b-WRKf>ssl2Dm&S'.{[Jʈ6pוW1 ҌYxRƨ.<6b*6L{V^~$H!c^gސuGU?F{pZ{r|ӌD»e(>"9C䬼)0LK/ᶚ Ԇ!G/4ئIRw3ץNLKʝwEcrlzYu" >I-8 ?>i%:5v\o|;Ɲؐ:+&KH-0OR%dBUE#eg{qih0-wy3Xn" Ku < ҷ-Ac+j3CltQTȯ^߃p4$#[xDf 6?C}Z=9&$k}Mtd-ec!@\cH,fHT?1gpmRF0aiֳ:ԋKMuYPzM sNY L5^=xOM$ 3Hwi.pz*񦘯[.֧Œ_fM,Qw:'+ ϙۇ]v׉utE-S'xO9I90|7 -͓AE\I7TѣOpRkEZrxnz/0K |!;jsIM0x# {"BuUG|GoC3c8{ΑnWʍ'l2iZ#uDd>qg 9lDLJ^&;òZVelܺ*}PZV*+tOsIPXDpO3VAQmS(,0 "9Y8E\'2O t1$6|)|vU-,%aֱS)x%u(HIvQ^G;\޵\ .u=ށ[epav g2iyd؃0e**prh5QC9!= 1?3nCV}AY 70(}!y‚;p{%40q*W1>aRWzdW)(SHk[:ʊAИ ݻ23n*Ƒc z[}u-:Z* 'l`7 G:.d$<><*12ƧI5d JS*w'b_Xzs݆L:BU"V]!j\JkYeRzͣӣnczqX ڑƢ08hJ$ {;'t7S0*zE$ob0 |R`~ %{ɾFwv[Ð4:+!3UigN#-s@0kQXr ߉޹"_XHWf#3Z'F)hz٧6ì|iP{z}b5,1%fTu+w9]3[v([l3x hpobg?]hDO;z8Ls i𮱫U{\`ڳ,o١E"]v.*8c|Hz0ΒA.YZ4>gƇt&ZVӸZg !R>e@-6FPz+BM{BdG#3.! ŗ= s Ih4Bo\5YpS㱝 `/:i=\BDG?]Fzc=- *Ծz@)K`>Sa-,ѲؠC$5ٸV+ڭpv /լЁa J3-K|FK̲|H3 msy[J+HzrG`OL#z:y"kH2OgrXa/nLŒ$ P2ӸVbC] L#d)R8D$+3XjV²?}WGlT_qƫ]N`Kpz!$; oDc:0%̾АƼpoܚA@ޡ+Xv4bbO݌tU~bמ|<+\FK9~1:5j8~)_GhvJ2Khg{PwӱlL&˯h縣"T3EOa'“Fc$#85˔ZЬ"r?#5K7w9-ISBL *czf )Cb{!~e.(o9ad*sȫ ӠYFd|i)\u%Ͷֱ S`bA<}q=ӑ-JBU%Z)ÉfTTÕ &3C{df9?;߷ʤILw5JTlU7?eRp} wpY̢M|JPD XYY1F7O݃Ia>8Vx0&kW[ 0;%U9#sK>]>h1b 4**12[]]e)FSv)SJBɯ:3#-%F|)JECN)Xh'Wu0RCNg!bgepeـ/}8Eut9cDqD:) GCNQzC]{D |!kGO1#KeT8)Iv"͍tNf+_{18#Jƌ=>Y<9 MaYMpbƚqgh7|L*< 2KMQHw*,o7b(!z6< V`5%?n;x;=DR*c-͕{]<|u&Q<{VX6B`[XQM]QCKL0ҏe m]hnXA>RH}/,@-R;sOJ#-aэF958CF=Ȑ?yUܯ4Uc"WyȡDkpK4IUJ.z Q1P Q_Pq}tortLlg2sfd7,_1&BzuRId DdLb0 d<ܪ׸vUS$( ;>3s.Q UKb)uJ5`X%ª;pn(}~սfS&L]o?cvZ׋_w_~@w=61?D63.d 3vV$Re='u5&4fa3gznJ7f,p5 Ei#c#b&b)>>=]l ۇr*E>RLEI,|ozGwVSl9MAdC".$M9MXL~)G(ƊydYw[{2 ;!l :(ʫu:7%lR2/V]*NWp}p3=S"`YT]'s BZf*yo;=~ir)(fe_T$%y|) 0̄[UpCi5N'}A7EQjB-S߄ tfF`'zӇ;d3qDl6`,~s2CKY%Тj\*Su2mx*zJ.X]r'?\+R`^2"'u(F!Dz ϧ$޿ʱdSQ:9•P }l㆘=wDU)7t٭ Ȟ+qѫʼhEy,tǷ }6tI>} QI7<{=m}^B.9 F<2v,ᄱA4 ]: 1ͬȧܳ]t5H \*GGʃ3麲te4qIEVGT |ڍjZ!A5Z96sMk%wh:@w_50#>hMo>}J f z qcdL، ه͂%Tr& slS{O ņNFTn1^ -58U^o΀}ny߁xL\A01ʷ:j}nيUI" &|HT-`A?96kQM;Rd 1gM5YK#mNW0 fysqEBzBO3nF$vV[NWoM ?J&SKubj" 9zmLn~%9 y UBjz3ʂeyjEf`WH(*Zs[S+wcU_4|P?J6ԕg7򍤢`7䉸&Uz|t2UfAPby!pEQ!-H# ZC4)|xN#5K\We. XIsī$ZmWRsrOa^.+{)Ԛv-<'߲Aj'?=B 6d?#&z~erSC.̬~_=z /9mƃ<lF5 uA/j(P{)i\oQp8t(!kyc!yg{8L~> g1I'S$0칇Ήf5}"Th]k+0` x"%_ ~@4EL3|iUbq'v*Z'@vy YABUo#IB 7?7ko UC*9 D{k*q#`/Y ^eNJ+EaaZRR(D_gӐ Nr\v3ұ8tA'RTFƱͪ2*MqA㬐 yF:Lb5_"o晭 ~TB$nF׿W_-sBw_?g?>b՗?WLshW=4j@^`d׏伶* ~S㾃{%5o5%[Q>V},u2`^nEvPݩ&.|?3)ZO1=t^;|p:ŐcB]5H,XW_9[޸ds4Z_C,vmYO(I%D9& 3>tX=;<>zbPܴO&HtY:&"{?bz<>C,MyΘ%ֹ<0A0/=_:>(RXR!0g]0aĒihݻߤŞ0 ݽe{@ < )>eT]wʺc&,.)Ʌ$'wJڑ|k8aԏ_ J˂Jq3&ί+ ̱> =? 8 ;am+#YޭjPpף:=oJ|Flgg0,2 ~FăB5ٷ,(טu#,P)a&%iKzrsA,[XKUo+?qL#*-'ɛB-_hk2ee*k膋\2*ڛ1g~ N$ޒp$=7|kt/\ٵ2t2!t"bŽ>}@.KcqoetrTYp V샥êG{yŽ\yRɶzLjAm1A͋XcXF|ty<}1ϱ(/N2R惬a܇.KCQ;"9ckG^7[nsՎS}іDM`T~TަV/,tLGet)~gL8o[_Qj"\\NH=F_T1yt فyהyQ>j$GXpr0b8߲Fݿl{g˔ vaVJj8XB:Xλȷn̤ilVCU9g؊淶)+v^ZWJ=N4O^ =E*qƲ$ 5Ey΄gl1!ywT<ͣ3ƧEڱBWhG|ԙ,av^3Y1}~b١+ӵx7;o;?+[ '摩m}-B挴 t=Z 1` E$Їͦhj8;;yԥ th||6|Qb~Dd^[nŝIVL^=ꋅM6QH<zsupM$-;[^jO5{m(E7 ! ujTD8kJ8W_ uܵbڅ}|k(XR]gwrj_6Hu X}v8y;߿1͛.).j9 I.Qh)!tvn2LnaKWQnؑٸ I:akQ׹0G+FՏ I0$QU5(@#%_65'2|ߌaЦ|m=KJ?^tΐ|zc7 f~8Eo ڏQ2< eA4RJ'HW@6O'%aZ-|SR}](,iMs!+jRmY؏=F0ߩz#@Бbn.\ͮ"5c_2>qyjr)NE"!pnb3Exv"ANBư;x-iǥK-ŬL}#3D`a_GIL.s`Д1WZӜ+q3 NE)񤾼S k[u_mIQ%-FAdPxhyK{X$\b~f~d/tG-[IK/zj=LjHG ?0"]Mbгnv.Um{]\^o:dW;)gKbHQdlYskuS9|]L>kl8~W>{9>Tg!QMȗjlu$s" cAxHLF1yς&c5z M&f3wxzN=E/ ΈǰMy8-n8ةN~ M-^V%wD(R5c2ºIǓVqNUW, ˘_ Ѕ-i%p/] +) ]jR'5ʼnq]9]hX wlLYa;tyki=\g1;K3#<}F<#c )`=?ol)s11JD b uOl@k/LZf]NwW$p.%Vkyr}S(~U+tfG.si%9d6]C^h^9t9K/bX:1MIzmZGC#Ќgޅ/uiȄvr~q8_t NRIqzHȫ{ xiS̲HMdN­7,?@6~.ﮬ΁{s -O$]8v;;|/[KC`fw|:8_xpFy3k2Wv^HGw/o…Su'#H\Dɔ̬JOvj̶/nA&|!W hI+cw"]\jRU>k3DR+YMbg% npg[zJOuL D8 +=}10מlvIzlqe Ws/tA}Œ,KFC{$MaKYYbαEC̱$wI84%iв0g:Hip8w&̥{ pﯤ(gU^)6HNdDib:&5Uߧ43QAɓmiD@>ba#[_vq]4~u7yqJ ys?:y88g?>{'8?~9ۉrDGwWi϶l 63$SNg;1_ƳA 1)9kԎu"#݃VgO` _ܓEg{[ s0k8*PAZS9R%Mvβ/%jdvkUԟlFq)>]|OJtYGSlf0-Y+ U+;),YKiv=ŕ9p{ †UP5+bל/o%1T͙-~(-*JdDy 5WtRX/Nn ҫZNA39Z^ܫ I( U$(YDh#>1k㑽g`EO @dNô%d^S[u9[mfN=q4d.|d\>fEdm_MYXL0$FrʒqIq?vF|o0w}]د4"a URo3$i{L4j@0VO ˜2U;,yf]T&{f̭_bys$:GR@g_|TRBH-S/?>pbYN+߫}ROEJS@%vLb=YS153w_t;Javy ^xJl%0:R tSw'r_:mΐ\DCCy 6!;HG 7Dַr"+,ˆ7fqlN~;YGv6Ǜڛ hk9#äAYe8uxב\y6dz ^qhb%U/6::<Jl[}أ]M?G-|+cu*׬,V&fF#ĝrY#|^I9Ċ\\X@λĆ<CZ>"g 7{ >%iޫա/5 HU'CrOGbAWk/ EcL4 Gppcf do`hdդ*H$~TC2" )Hnkhy{E,]ۧcp|itN{.Cj绂ZS`kpd$k*7+a]5w 3[KmƔA|D|B@\U>RsFL{2Fxnkv|m~1o?XjZAgGd_%gͦQ}y-dF.8i>.gFs}=,ș_4iv@>1b= +'SXorܡgع /)B=ʼҏO3ߑºrB<w_sl3i#+_ri9]]ѝrIVFRiY\Ƞ'b<Av P&Xx}FM[A5׆Ԧ/в"7O+Xњ-G ^ROeYa4Qet)'n6UF0Z΢0@ pQ)L(Fw0Hܾן;q ߦ}SL]U#RzP%5>P m&‡sw,%ǼkθwFϫ)CژqguMKDFPv@1:} H rγKČwS:*7^ ?eSݜ7>J _<6\}עH'xWQ#&1bSS$29Gߤ*LZ!T}I޴+Sb2 )ae~ [H.KZ;\fh㓈@Z~Nm*;]O& ~5׹ aL>@w}FSleXFCL}Ent\0I;ƓP,m +/e:!&䯷{JyrEW h=A1r9@R`ܤWS[GOVXxK6C/i#v1G|FESx~vcb&6}e̷_ N2K_4Mh!5C}#qFF/ްSO'uyV0S팙+ )Ո('U`Z@?yPo\O|\U62WL46." ]yif`'Vj26C[#lLXAÝP$F@2ExiW{p*Rcԉ͋WIӎV4Y }'1t}Ϲ;+^Q}3nᯟt=2k٪Qfh8M0\\}3)P'1l|!YDXCb(!K,%l2þo$p6*q-~3 VE9,`3ɺ&$n"k.#PHC"JDCVWr[/}k[K{~ɿ<xR"1!z'9[މn]Rmw#&OgpȘAеF1Ktubٓ"ɞl-|܊UA 3vsސ`mM,lJ!Θ㘃4s`OTuȒ!@ K}6jz}:0ꫩDE'_o,^p>V'\~mFP9X[i\ҷ[5vn꣣GH)ѱs+^Y-Q0]$`":\#$=6#waߪqmÉ6xTy[&|;ee v?;q7ڞ i'X.ut5|\LG.ORC)/ wBz%XGkj ?ц!.awjwu<=e?Y2.V?,AV,#i?ne0>J] 39}S5?˔ rE߄Ri,^nDAC4qX}˖2 w\_`Ob-ǛiCDm~Qv5'~Ӆ\T ^NֽAE:S#E$K2yӐcY{]QGXhгk 0:ZAy6N}=F\#nA@wW?D~ 3ڧy%Oi .>K_Qj&<ϲ \ptήa0?N,9\o:`B2?dh4D@@ļszݫHr{=@r=̹.<<\8M`;6nxmQZO>]CYzOO 1n.FyS2Ѳ|$bjh02CMމ∱yEBG,eU^?5~~ڋ#I9c(LjX["%gO\','e}%Q=DU_Xpz;(b9 MΞ8Pbb]XzhBڍ%c ~XDF>ZRx+s=jc[=qf|dkt򧶂#[}L , ydPc3;^‹I?Ŕw]"\>>{rH;tEo(H$1?(syt$3yMPI7|LHy2?D褎"PB+Iq zSv%O;pLkM8oʢ8LqTZ 1;" )i$Ol+̂f7ġNH/t:U%zpTJP)?ё\F0AzC qL}d4^xY2-foHLX9԰#C97S*6ڒMV^3}:L@mտ}Jr=|٦YF~-G:7GpW2ͩߨ3wM g<ɔCҒ4:4B]@-فqL1k7c\'2;B֌'m9oϑ*;*cFSK;I?Pl1wZ5|Nk8Hije -_<`\]m[v釩[G' mt72=}㸤~*v`8О<%n H)V,Ά 8bǵ)!]̚^N6cݲ} Tm?'n]s.y?y4Am[D&P1W#O"_R-N2!< ՏBWyR wGG>em~ߢӉ@[J`G_qbQbY\l'k=U-u<.U.`x]ި OLP7FKxwQׂWϬ~5S(F0nW<9 5&K9 X%]\CEgH c|)cnC} %󋶄IdR塼j ݺr|kK^ EFQh9JlQ}Ń݂:C4O[b8%?li OU q6ɥ_6W=^56`ew%?*UPO8-H(cWnX Ma9p+㬯?e6j>'k|w[;Srn!t#:OeЈ6,a]S aYeH7ɶk3JZL;8"'.`$ ́}/57 }aTKUFcI޽&[(Oy0O0Pf"odLʛ[܊$(j|lT,gg,=%15mɺ?fy[2 !mEbA_ etҊ{OA~U>y= hkZ;jr]Kg09bL(* 9}N h;ܹ3vfYO>Xpg#TJ}.Ep(9PHb.%>S;_Ik]ᬷ$ .+ĈhO,EpٵCUr'og#}~ R&@ƀإa?bT`X6B*ҩ w'o6ŇEOD)Evל1/$% gރF I \>`_f =ܝ\ y 0YKERQ~Y+\Fvx^t"(L9ֈhs҈EMv;[&}V'úa~몌'J:f-·يIѢD.sɔֲ>URnT8\R((yV=)\~42Nո`#z ˶7rH^1ʯ֪V8Iؾc^4.z(X w=I?,Ybywҕ0W=ڸV|1 >BPQWfӨ:gjs!ۿ"xlDDqEYIP-N /ގ&ْo%\3n&uZT1>( #Oe!VUA5{X\xgG(OEäZ <.1"ngaD`s6+褸R&5\M3>,U&JRRݮ,'K=?AA/ c jIXu[JK" xѝB)y8hK_a3k*8P$v*Q‚iҪY .Ć3zw$ա38s1Bk}@K'8%i53`ë:@nMoYe2j3ŃW{OE OepPⲂŹEK],2Jܢq|67 4KiR 2$p!X }}ٷb;OHaZ`?Na܂P9|ᛓ o>F ɳ@rr bKLU>R̢wlfý1D L~ dqib ?`g Wu2N#IɃ*u"jݔmσ_2ՙ|MrUXcɢho3D9+΄6+>]-TmcS L%uʓcw ؗ4R-[S.3"eK&nzMalbL<yg P0f7SLZ&J$'mpF:~yŊ>mG6q@‰^$Gǁ楼ъe<# ,by.,#p}C`sy~f|7Y!@ |<9vW|p֧OfIPBv*ѽR^w$YO$&u nj?m֥rhڹkd[·?[Hh=[(\jFn49 T/\P%"N#;VfdeDFboA8ӝk¦ؘ-e7H =Xj?h. iϸzzSC㓒DS1d[D]WaK*>㮕R1Xp3_W&BeO7o!B ފO)z\iW2 WT͚"z@4 |懂ɨcPNuOxdބf0[έd#1`v\jq e"49OM LR`Kҩ&I ;0)ub!N|KC NbټLɋb&S:2,5X,-+kCl+A0@xe?qwrS2SÒlJx8h9{-z.&y)eRiOd@O3ư]f`ww۽D/Jcvُ弼~P95y-#d =68 "R}GE%F!f *%.rx3HL+V?{ج%$$f[8CuɵN$Tlz@j]2d}pT3F@~=mK]'E ׭ڹv #S3 Y#(}T_!E<piyw~D{঎elCu+:(MBNaxq"=ȟYCz>$>?2$"V L=w»*r2m.,,@B˺_I #FGK2d^+<_[ޯ !V@E5Oy%13?EfW3r|Ӄ5MD棷JGKr"7էMqxe 6KH屜}W0(ud~(FcxOwoR?/\V"j 3B; Ogt,#,7?JǮV}'<;(1|1Hr@k ~v囹XIk}̼tl#0#%|0Ƒ7ЂK01MufZAu.c\ycҒv>fIH~=*BX4%i~H_W¹@(H} ԂuO9~_DUԏ+!5T5 K,s_nv RyJ JsIS1d-T< skNpt}N:2JsŖˆY=k`?lQ^=I^y}p]U.bF(du+ 3k1ܭo;Gf8RQ,#Dr?.t|DnaDF} vm|9z* /-dȨ]"oYMdpB婅I[Z"!{vER =fRc4O]x 8J@z|8MLe-Ca ٺh81㠥 s4+}xg$n+whbqgxq&=+pT'FW`4- y>ej|賙U@,igG+qvǻl5:Zezy$UKXh4y(~\ rzq^α9_FY>buf[~mVr(;,`0B͖靲|b7)9Bv|]25J-x6k _ED%3G.1ei"%C3`fô%\K#rPYSA0HSĬXx({ݗ7 gjϐ$uOQ!LqMϹHR CXLJ"cn*HI Ntye(ƾJj?3emFؗC IQ׮ 0%o<(V|#ᦿ[OQ%V3Ҝ{ծŒ%yo93̾ro/`PSap0?gBZ8#ױ(CX}_ZPHsG3fWBS N1 ʻ#ҴI>Ƴ:&M;*6H%qcxrupeqDVfD#F 0nmV,9x[b Z$HO-b}$ZD{}kD!`AT gdpe"sRP@AY,Wŕ/|x>o@Yċ7iwCje򉀽j_we2 d G>O,X95+#=~#AGE2x; ̃a;=JW_I$l c6KQU1࡛K{>^}.]A4Wḵ*5pi5A-Q>UlE;@:H4WYc@i]tRƯF$D '$VUw hc|QR$[|I%yaH;XT0,I*܁|KIĆ_VAIvl*Ҩ*u;#3VO] (%/ְls:c]K-DJtCm5w64 *cQ`h ax7PpK8l29"GF1zʚAb;Rtf>l5! zgDC4+UEYG#Py``=Wͣ!_Ǥ ghHũsI^4-;$}ZDMd6DI>8VrcAxGP’RpoC'O]^ީ '{)pXjD$`{>~dhTz~H,ۼ3ǂ`} DZI sAlQnwTEGb!=eD4x׳_'~.Ǜz^5!~q4+xv&jW D)q_ܝM\$ߗА;qvpa݋=:pI'6u?*lSX$hkzΫX]6_Eg}~=&I0XzyxzseYK/DHFM" bz>]A^KBa\bn(7䎕-]7oŻh aE5U4D<Xk/kuzhS{/shUSdxb3:+;Gɖ4~>(tÌ{k$+Gh {JHP~)#f|Ma:<6E}zĽsP eDO;8@fzbC2Ӎ`90şm3Ĺ6J$L0ȁ,_4v]|OZ8kӲt/S%0Х +$'K)N$YO*ҩ0gFwDمO "xTW$(VaGK/<9cNoP#iŁREqx)"QpSSX/!b d@qbbBO]ʶܲ]Ef  N`;:uJ2L .w^RݗDy]}}p QzK/XT'O׮j(U VգeAR7?t0RU>CW}jRˈ{Gj"3+B0k0SڸpH-Vkq>_:ILC XL+VX^r7V'>w=ϻ-Y@wgy[itA慻BFPd$2kP۷z5&,Z~ܩ]^ק'qv/[E_5јLL^I8~3yU;;?af4b 9=\:1ٟ=8IK]B`>, :/6۞/>ji$Xip9h4-Ҍ:ZD#,7k.F  91㊞Ÿq<}VѭM jLu>$eF4D5;#yU;dm؝nZiMy ;–c;<=hBUݜӔX^$ҳ:D>i!MCtP/#1-Y  JݬJj(}{P;DtJderϲ x:SbbcL#SLM2,C..qQ1} 8n2~e<Ƙ')v7?h{XN7(/<`8,:!OB, U '6ݦk%s@Kn?^R[.MIsxZbOwߧ4}kCyxV>a".r`Wp^.2Ō)bz_GFdC*?+.=w*;iof-҈vA3UMQacg\idł/~7RO ^WͶظAx(Aae.cW Hs>UAmܴtW}Oc+hJ $sbXs`zihtbH^P&׮r>:)EI\YHCgڛu$N-< SknH"hdƉӜzMRF+Ȣ|%1ƉT{_EqRORX)5 Wdƃ=Q% q8JAwuf `:|p瞅xgG^ 77$5h'8JތPϥ`xdb_0QҜcwt[Z1l>yL$IGֹRn yJ~…gQ̂H87䨹]豒y> 8yy(?6ʊ֋[oJpK'2_OHէV9ĜÔ6-4y` =W|| `A'y$r%HPs/eUZVfvJK02EעѺ;2-2S Q[CAhLy4MܥEmѨ,7iEMDG6s!1s-Fc|%/h)gFPrnj1shMGɒIG!.!`jb5IqbMy!FóFG4! ofx&a]?B6G]GTXrG x^1en/v()̵e'>)2US8bR.hq c~'64<99>+a1_i3PbdI1d+5%ెB%=΅vJ(<$X2Όa .!('wŧbև¼K T|Bަx,s U3Sh0~d_則æb|;>GߝҖ -͓%G%֣dWQOgTu${{mC~b8|?S?8k`})S#(B5,NJ)q{|^F$tsQ/!:+*uvR")"2RLb^}tE@@&5[I:Sw9} ӹA09ӽCE @/;5'\6YZ(]-s(Ѡf9NhmxlXU<Ug5yP^ۍ tlg I8Bp/@e>$ocV. rlx`ӗkKX9},KN#,H=$ǁ}.)RgWmzkxtcd~q\}b /B_؜ՋhS(Y+k%DIxo. o@޿ͬ1vJ!=&Px(.nA|A ނ)ܥ_0kUEȔ]wWD[jؿENc3*PT~ǟ-5)+ؙ/*(IЯ+41Y#-OCě /b9NRT?9 E l% =-Uxjny)Ed&\K->C q7]1<gu5 BYw*zlU xS,];IXN8:xڙ}Mׅ!v~|OEf.k@@9nZYH?Рrr.Lv8O@:@)[qxSX $oǩmpȜD".}C2K.L}b];A9Id†ӆwrIse'mBW G?[,zlA?e@M8BHos[ -uR2vW^n%#psϺbj>H<ǂJ5,1bw·OhBP'9JZsÞ"dȻ6{B2_(?*[9F$P͋mGFvʁܴr|&HYQƳpTYΦ|]?*|Ɖ-J3א]o/ -7oeYwtt>J7ylEL4|KmW3ꑀvqjMlɈ`T 0jybHQ\"=& ?bH2;xcw J;Y=K:D>H^e#fʛ֭fO1X,FYVPxGmP^zkv%76 |!_ձpq[&XuupS TcGtcAYy3Ov&LrY+&ӡ,gLv9nׇ<#0ubB_ D28e:ֹ*WqK<F@чd1}/,"1DvLC $NSd<}􇺤 b3ﺳ 3qq}.("Y;ZdpU`|.i&XsPl "5g>HA 9R lKR}0A£kQ&ɂ>7ka :KT!]כVgK=57Cn/:Dd5Ϻs?˒}_ADuxOt©H}W݌] @]Ϭv }=:|3T -R;l_"(OjGԸ9jJ2Z\SC|uqzgE#F*:3~-vZG.-ͫR@jq)iM%1Ee>?,r&f$&K%)XO9v=kX}~^s]2L;bE׎wڿ%D_|I_#E JTd=i83_-Wkuϭ}5jOj4gQ$V,cu\xyot)M~zD3{ȶ\E*0!km0%YGx%{pXg<0Np.oܙ/J2N9ˡYD?ö(2R,a>-Ī˹NParK9jÂȈ!^pg̃?ˆͶ2cĄNhJT2"Rݾ"k^HrOT#KCÿ‹?1sach v>2?WzϘ laޢ3V]TnJ a|̭A߯wO@6 +sMܣ*.,UN=q>ӑ/b@h0KVWJK޻9B"p'BT}5X\iɕO0)yMr'֌0iG7]ݕY#('2 tG2iO^")ƙ[x"Waᰭ7s/\L4r"8g~7Q"++-8>tՊc&bQз*V@C{!. |^Lf)G(.@'f.1omL0UPyԤ -p@>PꗈpCXeA j_!LpZ0kKl-Y3v )ؿlB5:+4.$* KE6}i$iUcI$BQ`3ŏu3RPA_9f@89h:Bh>^k2 a^NI{6z$?cȀLڣCξCG{O'2fcDr}ԗΊwIKS9?H/ P,iN`\43 O!+ܥk] 婊nVr4:c< Y͂y@Vi(C_#԰!(6FVxvrׂJP Gl!I?rTSW7}Cp?Zs@#|XSR6O,51>j@'GQWE3/p ݫGNR-9t•d7;ֲ3"*i_1/qq.[fFs}N" VOR/j]jWC1䈟͘ @R7q5^U.(~¶~Ӹ31uNί w&)o) (.byuX};J>xvD2Pӂ&cM:AxlᛚR1د5P%QkG%gH(1`&l+ AgHd1c yq b5F>ckdkNUN6J= RC[Gdb,.)/|a76:)gI_">[,yc9 ϑsy(@#G}Hzh, ig Ma)0 vrWjA^A{9иe\ y4XNf nF.QY_܉ѵ(d!)e J &J0q&O>jrR(k3$5VXzFd"O"O[3`/dqoE!` 75 ")Dj󺔨`]2jM.OюEq6q(saz6&0ZwYk+g}ķb݊2j`^L |Eqɻo)Yɱj0dxy/ l bW%)%*znKC;F Šn^%fW+Evpq3D G f$ԣޥ$[ni&?RƖg<`jJ =\e钢Y~y2FL%XzDEwdz h ,k:oҸm~rm:j9,;?L7>6ؿXF2PNDj[o2 ҽQrot]NB#¡?tyWkȺEg80;' nkqWM3L>Lw?DA҂Շswɓ]q ^-ѷ);IF+&| j5qN^G2`; <>EڑNeq(eJqaoDp,P# @u]¼?͠+$ f"K ]7BPL-*՜_>)\>+L"\ DzkS̶<@P55k3V8U^h50kF#ܮFg7$?_kGrkp)s+b$j>65,ݻϱ]`f>c) Lţ>Jo盿!G4w'pPR>v(Jc:i> ZpR5Pb9/ds[]tV~cp'P6bb, {k|xhj~ƐRR>pshe8_[S!d՞[hX _=Jd ZT`ag~W`۴;m5[p_C;Oq)()rlUD>L >~=V^+6bl_& _7%3ZR;ov ?%c=Hr]{VYrF0QZ.̂v(0Fx=G1z_5_>ٕ\8yR%6#i\wD3._\܎TCGUjX> c)Œڇ(o1էT/:YDdXo<)dR,2nohmŃ0 w QcWosp7|?R]3h* E xQ|+CwW!y c%f_JA&2)>Mg&pe;! }̘Dp/N9LBVOiͨϔ>Iw9}'@ Ubg!wXsHc|05/.1?3Fcߣ@%7풪HP`?S%.Vˎ$uTK 5~ZoAgoDʈgϒ0D $5^üXD>\/P1F\{2?y*wrr+2=F[Et#un1 0 1 ,k\=I>]]0>|FZ5EA )TKE.wX z!/.-0 v?ӶL/1^ u8wϡ/j5NHC m%(bhtbF~`{W>b}'kejS;)y 2+2U`+KA9CڧX%Q/h/0>/rpQ| &Wp1EO-9AװK7JU ؛cd1U,o3&JY1QZ+>*bbȱAę#jYS =GT3H kG{`COPlSWk+X=w$nIgCX=ڈ}@O%d'ZS8,$82zN!:Q}*4 9V{HI!\3' k $X#}x#gGu vQ !-v_.<)$UP^da! r"] ڢ˄ؽlϋ ;Ϭk5=p+Lрe.=^[=GtTU$hMzC"wৗigygIZdQfm PC"^w8{]kdr%Q}=9g~D`aDeH$SzY<c;˺C)cNr@"zXNRZg8VNm|wiGj4seߕ-wBX$!sDP9V bD"K8,z.qu}Si&aSrp1DBg\#˳7נW#7^a'\t/CN+GտoDZ8phV^}Dte59Cbͮ|ǩ%*R ⒢8-6vUwJ@TRbWPbz?ʬ7܊;" np+\t&M/!^rZE5'HTtNV9aəD ݊=Rxt2 lLW\,8R.ˆO)^U#&(j1 &`wifaB+Qm+@ 1.OFtg[h=֬Y< $V[o?=<<TBI'NU+v.OyaЏLu*6'nelKdqL)sQG>uEu~vvߤ97K}]?p#=߾<M= Oo5v9 dv% >hrw)|v{dM/ު};S'piMux}OhIQL]uߚi_Z \x|tlD O)3P}!GlJ&`b3'm4+4 6~\K߫/gv,(`l\z,9߫/W&ֺXN QgA(Zn\B2uto9u#6 SL}ʵ0Rj%l@.P:Y8V~A='buvdN%Ě"bT;\5bw9p؟:p1J*w)R uܭE#Rʟ+kR!hDD Wg(аOYrѽ2x-PWh{:K(s?CZrPQjɊd$/2(!3/GU&\_!eԪ폜8vs](&O4- @j~]J !jp w ePZS#!ڲ%U8ݷ14}G1 HYkAgӸKaIR`:^,oNW ڨ<ȝT{ !d^gb\%慍xM G?1v嘊@GM-I;)d \A&n7K<'Z['2~*,]6rg' ;STW8RJNvU/pg:@ cvcml5\/&_̈́6T[?aezxǠ<$0Q@/?nQJhAtIq`R|)Wnh0￲n,<TM?͡FSScbʼA)8SX2EcN >nyQnJ[^ Nt`Chp450 |U K6r=b^2es ӿ؇ʂ{κ?ă= Ǚ?|jlQTXD@jh ۪_͞ex'2g= )%tې%؍1Vs5o99`hshwUjWmӸſǗ}9Ywc2k׉ 2_Q}M"\Gh]YW3_0pBIG@zwXiM6%!E1_lolo՗ I,d]*;ɷrB1_fsM͖>Q^PKfÕjVx't_/Nm`Ϯ\YsX}df*v- n n0iMv^W0Ҹ8 X]xC^U} k̾&Pyzz!y'AAbfuKz uu`rU[g1`sQi|WyuJd}~qFuo0Z} [z{@5ţ:LtOjWFF\M;q圮Ssk=.`-׬5|V{XM!#(3$^tUXQ?OU\hgQx c7TL~r*Ǟ|W/1Ț$Zh}2iy' aZe@_[!:C!PoMetۑq#G2hPI[ˉNfxؤ3|1g f2Zƶyl3%&/~ȄcΧc*25yc<'mB*-wBdRd]KdkӃ =1H> ګV)#K}rxPLxXo4$n K9:% SN9@%(5fP.m|VYr:VIZnTPi huڭuΉo8]P6b`2mŠjX" r>%I$&_uQ~9S%t+XXs>ͦ#-BUKj"-^o[?Uk^59S~k8}gw^N`ǩ1u15fhd=RT9jE J++;rX%wHr^d{\PGj>*з.KjW6-'\Rc,>Pfdž]f} "58\>#qKc_(GOud_ 1;Ib rWE&AWC*= X ?mGAص>k@#y5]:XIo#}|}L?x3 lVG!Y辻.FkVxbJoZ_X ɤ?-Cu%{5UVe Kr(RN_̄+׆_j4XG X7O^C}Qg?$?:I+wGU߱|,Ϟ&ȧ30 L !9u&s)"@<%=ldKʄt]t8!.qbEYį'qVWtzo)n#U#eq'pFoNܫ8[BV}"f ̲oM؊&'4Q%$cur4-{iY g+u5p1{_؛2;݌ {_ژօLb^)Sz"Ž xFCBYѴlenp,âo%,CGX2\nav{Y_ VFr+>` ]l3o~;rrS!2 qO,Q.yĞ4/ۙ[3q$uqkHᗵ7CЈK:Vʴ}o͕_4'BX?7l(rABb zp4]ڸKgJrS Θ,Q@/=*zv\4!) ݴYzo!u&FŝҘk FҌmvCj +W)3F.<6^XgZ26teZBG$]QJmcRJfaAdOv1SdIwum_\ȂzI_eɈp ) IƝ)95]:?ݪ摶5p}Z7zC9 *F<%>1sICIK~y,s4`DH;DHyEE<ĊZ^7ǾyGha,$1rZѭ2O,FnPyEx,a-Z'RG)]iS&wf wO{&QMjyRzD7'2Yۀ4ϳʥjQ2֣\W*d<%{oybnjfqy#dm~dW[B1oL\Wt̀m LoeUv~WhhйڻCd^k y+Dc"lf1޻gM-H\qB'/ܿTPZ߬Q=N:>'U*FZn*0GjP Ag0aʜ0T,Ed3N ^caʞMOψpl67]M^?SY9I=رٷ!d7ЀG($l@E3np$3\Q+${7WaQtqsYB6ci })%b@i!lt }L2ILE R33x$W"1^9t|'<;r 3nد{eЃxEC e.YjQzlcW 0b B]y 4"KSPdn=KPqT} oNs|~qf:,$.Ǭ(\z#IgzN yYG\"|"|ہ%@F̜`>㼪o0>AIygFGk84m.:mQ[, ~e&Ϊڻv(SM~#s>;_B&(/dAqˆFŋ HzecN!DϒIڀwȨh#W*k~cF<2~e! P1X.#}2F$ԧ8uj9C//"Fy}u?v&pⓤD\AſJ;tU6\4#d%tCVƎޣF>$fRRsֲ5C *k4ʜ0Hwp˴% 0^e~B(aY/w{@_x>%LcƲ+vaeVDzYG !>p}lIAȵoǶz 9lp<+^y+vJDLw>ai.{ e |+m9nFE_cDh %WDƌO#4BbIP JQup;ska5xP֫IJ=}Rf$+~b$uhϦza>jV=ּWһj)Tk]ҸGeb†y'DM@'W{S4MS w32$9jKmľC27[9x;~̪DTDNmT5 )r+1b*_O}=m:ofg1K0S/S^qSݗh'V]K 敠_3cX/Em!/)GJj 8i33hݣ6&7@KK qLx20 #"Ύ\Bm$ x(Ja$q݉ ,e8_x;DgWfy8n[HPNe#{/u5XFӋmtFz>)o`nD3N#@UEKU 8A*+ <:a!|]LՖl?Ӝ.aDd#O: dz)Mm^2ZH7u-NT֧BXƂC>lV9 &2ȶpv =V_Ŋv#>sEZ/>M97HE<6 % 36Z-w>1FB/#W]R>9%+0+]35N\+V_>cj&od:rg1qޯHhfU]s,k)|\I`kתwha9qPXHMf\Nsc̐uw,A,Ws S§ph[GrIRHq5ڈLGsduV{QQ&Jp#zsdk;S֥iXZ`u+^[S`<,8&G]f'ߚc|@vDЊo)x5-<ȵ+nњΘKҸ'ϑP+q $$b L ]Jb A;mp+6cG \J9=K\[mZRl˳zoOr\Zov ܟ>JSFG{, D@.{%e8`uSN=P՚cxSߝԇw< iVH"硒"z`s'5}K)TUhse{wy@]n]/H "k,jYt00#{mbx.\Tœw[,D[Hv5] %E $/0]Gah: (4c}bzt\KaxJ>Mཛྷi\Wsob)'y-ߍJ ?䲒¹nWD Yfwﺈ71vD Gw52e9jlG! oV!A Cy,ߧͷr  A# u!TG[Hq"n˔3U:C Ǿ9C%^a۟:CQQ畫:q'N9b"9&s%Nc(2>-DoR٧‹ 8NBBW <׏6-`Dɒt(BÂ(0ߊhM?|iU.]p@Qd呡܋K,xScR A͂ }WgG푒3 |y$MxnNn!>uD4`hWSibO3x{1"UvfKyRhz1k҈/?gOqjE~ K?x(%d?MzX5VZ`cPzE[i-nf|0w|w<61PYg&JQ~hvQ}9Lf}`Ң~ʠ`;P2ޜcDx4KiKK Bfq[?d!$;{lM 5 +[_f!}ŬuT@gƓ'!廒$}M=hMQB|~*p"< }3>,E]Rf‡C.YidE }O8 m)NL82?',#E6[|Io[_I ],#̙'J 8ݪUFT"]Ť倥nCJբ`V 7.>x(d>'v\m)߻%oDcdۯϺ>q6ԗ̂icl~`|&JIX'YYbwIKɉ59ѓRU})$5 ])'5qؚ#wN Ypu]w^toZj7H@ZfV@Ɏ>Kt E[2l,p-;3/ jA~M5>f^DZ*/$~.å9xw>%o%s)>oo}ԀS*,.3ޞȡF?f*+Z1:X=+kJ,Ϻ?@;F=c-2h3ah{]Z$6|:-d$MpLa8xЏBM) ג^ȣ~Je[|pC{,`RG^) AOiJ'$#\j_u["~덿~Lؙ(aqziQ"Ú-X$a㺸W^!>JHwnj הbr˽_gO ZB\Be/Xe&Y2eNc7N&<=23(G.Ҿ7̬BUkʸ+'kPlɓ^O~R~HV_8=*p+Y!iR3'N4-SVr#N]э6d8le)O*L@7XՏK_Q"IB p@R( 60 ŖȤJFo/sHQקu $/| Pqk6Q43ŝ_ :}VmkJep.=ȸ1)zi#j1}P:jZR KH"_l eۑ9Q~ܦ]׌}2v%ޥ\ &gA -.Nz=?~v%048'Oʞuq8_ B{A@j-Y[K95&g[q/TXd^P(OvҮTդ}ߩ9a,`*#媭os؞Ԫ5TSp%iʹ!.PK'8>{\89s(0S5.PCGsw,CKrDl 7@IEKt-OtԨr.pTFz1vX.CH"481ɑ( 䭀fB. tߧu[mOX' /1|3zB#Rwb$DzM}A 'ugV!h(uZ٘vLԷ}S‚%*L@Y^S=v]#]Í+sY}JF!3RfIyd(޴VS<8JX:#w9)RZ_s/-l $հy6iOq<$6{u}0eV3ZEѪ<mtJ\Grw fuףAߺ"$`RiJۇϥ>6%O],=A"^<%j6Y`SOr)'hxTs豩 áR0 # nX[r`]x+@@z}l> ¡wHSc{҄{m aw)ݐq\YdNH=qG3Wl3P21BuK䴬kq.ŇNUYj02Y*-"hM.uTRixNqOق۵%˸ 9 y4foMg3̓xn(eF}Iu}uQX1@#gsIo, Ύ/}in.M0,t&/9]i I/Dw&vpu}48K?$e= ne_rdK170Req-_ u':i b5N]j_WuItislQYph|=][Io^xO6X%K!{ 5Z?Ha`Al/l,Y,"5+Gec.Am)&.W8{^ 6$F'S C5@U rVcownȑu'DQ9hjo?fhS9;R_ES6~Cf2nNMpяOY 'ޭQxqdJ-@gU|9'JcZ)( gnA Nv0d}h䴞kđ"V)YHo>~߂}:j_]W5>XȘ$KeJ}Dz ik.wsj+I![C vוtd|K0,WLX+w15sH'00WE޲s23 ɲF-:[zd @e9#|k.aWn RÉ/ :q0>"~ ӝ}iɭ+[ݥ{I^~0AΧ z{jB.E!+9Ln¤z}"m|67o{ǯpS<=9 97h /ӨP0D?hʙ%T}7yBz{4['CT Wgg!jIldV`-E)l0XּkwD?h(LC s4X)T\v43}[Gb@ܫLʟywALc^/)R̵^L> .Cs\$ SbLkAzͲĈE$K%lcEkV{ҨJsNjgPjhr 林<%.g[G#HܬcZuU)^BIX Mg{Aܥ.bA'}4 5˓gdF *R$9_;H:#r\o#~!5/%y5p0"<0gnk:G6fʋ"g7I*m\cax0UL‡eEiyVS Eb#51 w[Ы`2wDNUwyL=" 4}v&Fu CoiDRjߪO[QW=v\@//7q|y}Dmhb=Kl3/#m+Dϴ+ޝ3B;犕`,O䜢ڝTGh?I_"Ot;;"OgswՍDi)făf$r)'Ў KR>g@|rahD©BLBjTwb,[E^9`3o_ٝ'WVF"Бe1!o(|la~: xyNؘHE]g}r~Rr-!hg=GѾ&O^ԾRnJ K5A_y="ZhF늠1WVB48XaII>3bJgUF_DVKG-wW\ SH`OAN8]4@MgtwLi\֊/SŶ ,SS#EdtM۴АEd0SOB.A X*]SrUa=(gL owqrh!":1/fi )۷EGW8\&p7ڍV75n% YtLqB"K}h7ݵܪWs #}uMi1ґ3sd6=SSD-9Ylmh^. Zt1 -.DHN,n cwP `o*, 6%dXh|JL DS2bʠܴKM._MV]9S5U^@P$O^d^ØĜ%ϒ?ji<}~5$f&nbi^OpYuͼpvrpYD*` dhhEi4hw#;d0 E;Ҵc+Z{A1C_xcF3=$$c&/yȕ y\+c}?ca u /2~6 ZLwK<8pr8ND)H?݅a~*QZTTd!.Xr٢F=Ya$klWS4Sezo2>)` DAnYļ uɮ(ȠY}t/#:캷)ܟÆ1 ї3v64{e`L0qI4~D.ӈ)\r-RwG@v`LW %boεtϒf'pҏw/[`_ɩJVnE#:J/mq<=I`K1,wdMYY,dqE 9x_-8gNb'{̲lO9?-m>-H=^Ã<n:b|oo' e%#$}p]2k-k-_'.@@|Be{trTY~|)d |=SΦtECZ37ΰlj..WkSw~% LIv=MH!4L"ws~;"ĦT3윦q't'?Il!7lYe#RUvnr%0>^2fiC1B0c)cb8\'ex)j A"bXcUjh&K?*bu8=Ib\&kNa#li =b}Ġy(䵎o/' \G`< *KETMvAQi17L}gesaѳ<@S-⮠*#Q27kw123W\RZ6]-h}]#,adB˷Tm-yʒuw'*3O۴G4UN%UHgؓ6&3]yɜxIPjwRxž6la) 1R&Q+e8ސPɭ5yc:q%~ Ќ湜P~plzc\,p<롐DpWd}\pS;&D/vRx|EC`q7_ZU 3kۇD){szfwa3F|luo2;@TLK1%aߴԣ{8' _d8Q^?qd tk;; v{{&853:c8bV͑_44XV뾆d8rmVvH5H68 { '.3$IQEౙޗqL?Ij=}mWMperlP0U:wJZWŮbiT.n3G(.k"dEC\̥Go ==6D՘{q_kNlƜ%["A_O2dzNOox gJjڇU߸(cy#@ۯ_z5:aItX CIOH+b&jX`{jKƤƒq} X.L+SVizGC(1Ǝxn=xN K6wR"_  ͡w|&+ß㠆 g|G!Q޻uÐ$aW2(7shegar+X:7dR=RBq.%hpw+7yվ}ߟ!)hV<'6%O449{Q0..{zY/""vl~OcrE[be*10gxE6#/tB{otgJs&c\R.>M.Ymrүzdѭ[t罖1x> oP9^\J}ڠ.CҊN `*IThŠ4ǹ#/q.gK܋q&R68̌݁؏FI/-lеO3(1#jD5cP\|QE V Fz. F;y r̐72 .~hZh8]|ft%[.izNAUh2Vb>s1C~ g=|ʗ_>1;ɽZBG jo|DfN&uH*Ag}O/\HZ|e:zG3lLZ)Y8[[0AGNׁ ~K**Z< ukF) )Zʣ7bb-|P^#jl?l]]%Uyu7N.T4;B&a,v7MxMCq tތ~LehN*b59: 50. XZ9zFʳqc;O;sut@#_y/5Λo:TٙBd uRL$Z_nAwm&~ػ8:`s̘eymJv(@f >ƫjk6ypYK28ImmNL!=63-ڗp%{ i/܏T񘼥Z$$k:~F|0̼6u8Cc"9\N)ft'UB2ɴauڼyP+:l=n&/LJiȶg8an&KbY!gǽ.iAO2U~'6NRGaYX!1/Rv9w?Is!&́n:viDj]31Q_4mAz(Kbq< k\IURpEe@p]EvN&{ %S? 1Q/2Is8C$KOՕ} ҂':BJ~ -q}C9iE^iFGuy&k #}~?]~?g (D)>3z͐_&c_qŖ"ck--޲5/G@)t@"zZlI}A?ލ{1U=~|m>ң`{ q''k}E_ʡk@jgA#Y[de%1R!x? tb&cZ_3_vBVFs(m~ȈQ?v碌B"/% %>=Ҧ@~2H(8Wߑp ҭY!NWPr'@&gphG^[ l-r,*o8f@ĴŃJʾ$p( k,'l_:ݿжLOS"/Z௓CѠLuP{.c5Q޸a 10U*H#&l9.Lmﮞn]`[gBV`Chօ.M͟ Շ6$/+)il-d̝+izIM!)NzW6?#Ni&a'B欋Q4F&BRP+o "-b)/MSy'7c =%}GičWɻ3Ƚ1H)wbJg 8Z:}Oh~2ژcy>f Ku}2u-oyJVjmTnua}0c. j2}.vfb%$`}ʮ_m.և|bHUsM{=^nCgbSjD)~E"ZKa,TI;QXH'rż SqO~j>9F/Xɯgs#nv,PK ƝS1?gC\1$]؝qPA3 C *PF[ipWhP3ܴݬZlzCz8c!v8" ]+ ĺ9$EH?Hkoy|:)j5q8αk(r l!2 )uA brr@SI>g?g^7N%kLZdScƥPbþ\cϡv8}6.G1g{A;o~ڦ{<ugfXk$QRqfVZBtU8TxoS | eڊdž\O`_/(Syz؜ʞoý'fx]}^mTv|TqB6V#¢{!i` Z<<2_A:YdžJ`z/)zSνPMm,]V%(׸+1dgp'KZ_}øsKA)t*$we(^mX@T#o]MOR &d:1B`$K7,'.Z%RR816 9=;?{) 0e"m͏`÷eA:A>/%d` 5MaNF\>9]j| ,p9pX z>R{g>vऋ`dPwswX+Pf(b\Ѵ}Ȃnx p+ iD7h~0Z8lJ$k4T=}8*f4F qcl>aF$U"!::Fn@]ka˒ [C$8K渣?JF|8ғk֏Ңכsv|fsq F ֺ}Xy${E+<Aw=b&Qhv߱kXg΢E"+sᨩo퇃w~0YnE!٥}ClRsT8]%T%2Ws!h~Pk֤ADlwϓ3qPOV9'ȺH/K@'?p&yq4JN)np`y4W|4l'|2ddt϶BcPD-xpmF?s}m ʴd>3sZ1v<N-'e BL$~  @a6R%}[Gk9K3|:.#\Fb+ӀOXHoԥf[;bϻS@ִ#,qX,h b1m~'@ZɎN%_HiC}վ|]3XW*ih"A/`ɡ fJ<1!O5Rf/ L l@5FՐ‹/[mJY.UbCID4@dt-#?^$}DzK3+JJɚRxɈi͚~QCo)t:t+O|"ZbH:/#s?L"?gv\= 8ڞwyUӛ~a|]$JgwL}~3B+0=mLVZbj?vڧ@hnzboikeFY!PvE&D}Cw|`W ?UVЛ%,<7Ђ=n1y'C~QLe-]Ӹ}- nZ}N(W:앧P᮳u}]\QxOٚwws5]%].>qE Oʗ|*Mq\2_^ObMWSrpY)/ ,gy]*K>)H5ۼzy6ޝK[DhޏNB0>[3\1su(#(oހ(W4ù"_7dsюbKËx=:)]I2EťC* AJ#kP.dWڳ.F~}iT؝"DyỏLnTUb B hS#÷6z6M{Q`+&~,򥠟A8i]z vL䕬N TQMk2ݩN9]`I8m-Fy[J`Ra$VF nOVD4&ouJb`7Y'K<)a!Ml" >&e q (3Q-[rT)0„hNELAU\qFy12GF^5^ݱdkb7o=3<ܟ7n5viUo7Rh{sYZK_-ܒs #I;*`OGlE田UHHLL>CiU<ͳ۹HƜI&.1eؘgSoR%كXƆ]Ym!\M^~܃cF `XDO7вm My"/lC!4' Ru2T[%5l8v hGja-ȫGٹL/V)OHEֳɵ 1WCRE#@X̖K@|=Y!,3nc1Z#h &տ,kKе"6O^=X "S= vPx7<RҎʇ3УnG~B,ZGdF'5Id\sT,|=`c,t_Bv1?ŔQX}J˕QA#q|q>) &Ser.oyS!b3ԭ C?Cw l,S\J&ڽ8ZVPC(Q>3"%$'- mK>>iMhG %5KՆ DuB=m7ܲ3P7 uMy1`Hpqq}2LNjxEPr8`d#s;[Hw#2;L6!LZD)+С5P-p1,W 91>{l,Ib+sdR19 *є Hmx\TmFEO\xק;!#:{Ӫ v]RV82˟ӄ;'a5D09^ʄO#k@zM\gGU9; jؑmQ&{k!*V)#Ʃ5vͻj̀A鹶ۍTmRRDa/]$}XS1YZ#W [%49e>A$,>_6}JÙ A+g9_pU.RqdyP^wTTyaIh.d 6@6s%fui.!:!ڍ a*(ײ(XH+![Ķ7 \$Oa[" v8Pc%WAur,Eu1Tԏ_̀("4ql1zB1n큧z(Q(^:IQ@z=%-jUcNr%Q+ _" sN O+W:3#XO_w??%)%Rtۀ°ݳ6',zk-ؙݭ(Pa^'sDvq ZL>@0 B˯&ߧ-[>8$siCN}8HaOmsaGئ^+ftEndp}bo=[O+1ϊg<@̓3xjӃҍ=0 ~]-bW' }yBHA8H1?qDG,8։6 JU !pWrƒJ2BIij)O(=[ kEd O@cRpTՇ3mH/e `v =-,Ͳ|m4meR xO5\(ݡQUs5\>?;ǁc.YF=T{j?'blWzfܷ˜$`x=[1nQ^塇$ ۜJ]$*'[1|-Tga,UaK+\H;n\,?rˏFG`ADxz:>y|2TNV#=Z9G2{R؜&$"Q'Y<\u^"MϚlLHBGV B#L uk ̔m٘D?>Ol%E &bPC93EqL[pS4Ǿyw;6O9~Fz ,K>\E3D Yۇo%v (20h/qu\kX)r8]zv q!ɈPOc.gm_w)+ S7Q_T7R?hqPw_1W8bp {d Mn@*SP%BVm<3ۧR>}G螣[5'eF\b/Ӹy1dӉ7e ֊jacU_b;٘Y>̓2.Х5c_D}1E_>aci2e{!jрY3ǫy?m@ZcҒÔ w<%ouԜRJZ.\Sd_(`یp2I^ &n.c>,mcP&Sd }׌z;gϐopHO{~W@ac1e:|24諛.h9IjyS~b&cV} ##wkޡioD(WIJї,ǭkX9Cw )'͡< t)Ny0Yk0 n }i9 .ZZmSz1;R;.&<ϏggRFRσ <0iC'RU_rfe[?@Z5sgXr<)a`D7R=E=^5M~glBwz؜Yq95D=㾣Fҙۛx?lYce^\_}\ `FN'pR +YVOsĆ%g+)?՗[Qn'Z2^Vn_IqO7R{*=Tgϵp )lz8bj+Wi?V#/4_ N1_6DgKFu9K;=\S|^3DZLhQ0X Y 5UJ<>7;>5pcFB:u_^a[f1 gϮM',Gb и_6M-VՏ;~ї8ˆTRK|MF*iy5Oa2".~ mfV–)3=ᯚe\lNp&VZ(&䋮*?u&UBfȈP8ق148]B_e7|O;ByO䑢^׈96A^<Rɧ>`Hz, J[zT-[8?[L[웽}3id?e7Dcxu\_#=SsH2υ |V ö4M&1X&`z+YK.tQ*_Fb $hăjgUlݡp3'j4Ty0?"鰑+G؜@}w OKn1u&bS5$hKYop4cM#+3E1'XUg6ax5L-.0 3qPIX-kC5s^>*ȨNl>׾&%-(!Ky*+fa]~?E!3rGk6G!0YN[ic{Hb}WHNƵ1V([e%/'i;8bs;ws, r2gTzXmwM2-jr3NQcrsL&c>~3H2(8@ATDa_\g̒ItZWEgASzgtOk"C`QUVj*83cvSx"X\+u;{?\(f֔Q>ݻ5Ih=N1ed|Q决9MfŹ`jv/Lƃ%P)#XMT1CQtCE]'%OL*ݿyϯ\e6 Hh;HS9,ְ$Y_b˻$GrR2cK#y(&dO!i|8Ot/%}3ι%+=(mITUH5|[3 mL?H;f9,dYwa̱TI@A}uEU $<2F~_x{rߜѝvg|@'hǗC[M.2Ha)b^h-tS ]I;Ln.M%G"e?E\xt>J S)jNGۆf5akVZipVO\<.խIhS%8Ec7z ~DmG?\ÙX m!5mɈ5~t`BbR6DS҄.T$s/ZL+ea4 5k:\CJHmބ+;s0wOkQ-[Q|8)Rq40 (zP+Q}5W'd?kA>F$6#VLox$v狖HnDB—XWn}m!~VjRn4ǰ l=nYdu7d˟ID[N6N_x]qC5s~E߰xyBo#vR3lme;xDe>k4Y|ۈG4̝z(Ɲ+W.>},|6d"zY{^ۣk)v+4vi?؅I]ZfS 7&y|N܇IFgl@n_0|{Q^v'k(@K {:p@ 9ۓjKx@ωtkYĵdQ$iK@Y//hwݪ y=A`9 [3kM0V^Xni(w@TXwwD1Bl3TPl-'E6Ŧ5&+_lgMcUxbS@p0D3թj%x¼C#ǧ4ONs[AXrwGXmY!,͋}! ߊ'Sy(^,9LF-UI)3.zm_BF1CLpkh6K׵e"rQ@vV+2! pTn;4UcP$w1pӍ͙_Ss5Dd5v!_z> v4`{Jf^EQ$!s7g8&EUr^o#Ȝa_k4]1s- w?de] γ<1/S+"„HtTAAu_8;+S >Z 'B*g[LݚZL'vZYo7o Dr];ޕ" KsCZ,3uvQPt1"g 8^knRףnci{aGXnX@{w{Vv"F(&_}fE$'#~y59 M!%>`Z(ac. J&9*s( "s%>qD I%c6bҸ3^9`y?ν-R\Ea~Pޑ߱xPx4̞Sz>eik!Æa߆Kޥf>dc_nõ[]Z9VRĖ.CCG5Pyf~ W卪abiQe–ʈե+GY] d׋a/ssk$ S9c~1C/_H ? diFM <0Ȃ jn'΃[2_,ݫI\G^Xgd-x)izNan^hy^wy2S;+c'zXrmKO,GI~KzZ =sf 3dS??},g|URyIh)\B< .$[2/Xޢd޾W?Rӵ];!h,5~*B.6s/"գTy~2qv&\ xk׋k0%p/8tPẏ$U0F>>eԕ9`Q0hV5Io[iO؏"̵,ބ@lxna/u_o"ga$4K+Nܜ|FzS۸p-q?/Z'J%7|ռ]geĶgJ|C3 e#~{0b4U[{Tf[6Zx{"r;pR?1=?-bLzgOE:nY)xM "R-|oX:fN!1%.}֧'$xHorxȑ;ǂfZLJDu]]],Z+ f1$hTfGԆ:VtK腼Y?Ƴ(AOiE aYjnލOKA0:Ѓ{o 'Or^fߚ$w|gG8妈=)JʨpaaYZ3>XEn҆ B-=gh8}]f}4IW2#(#i[`hꏱ{, X] FU0Ϝ:@6}4,E/[3 >{-܄l!Q0 zcūF-2`H]d²@56~=<@gg~EPv-eDF q==NbRoâ')laޘ X!ʾk~Hڸi;ͮzyN2-bAڒڥLa ,xOnymM~e(푔 i?D ^7&.kσZTܢŗi*CCuZgyZPe>L+`PP}RM涢bC\d81kC%VcJ,wqw7ӫMm yZ u=rKŨ(奩YH *ĜNnsjF=z_3:zYڧ fwD5KxWߏ=zw5h C$\՟k-qm7 ],H=xh)Nhf*")Ͷ/r3z(0; *<_+eB; A93g3 ҋS3L }QY]Nrq+^%F$Dw}v sӺ>N-)ֽ qpKͦp^g^,\ʥk%_;18|VH SeCD/~ekE;Ec>kaڮ_7xV,E]z PkLUi8N2mK+,qɽqw] BZ)MR_W$ա='0=kY`LE#{6Ձ;YC2nJsSOCAA ؁} x>1xiEq$ b@-(1 (-!w)W (k86!\#?Ȼ17x_ i.rﯳd`ӛz AWg5]xfvy[p[own>E$j X=v~io(E!D`v P.dltq"C(w46xUj1c&S? H4-; ׹_|2!;*`tI1j+a^s+|Qۃ% )XwT NK[~l?x^oHU݂YW?9:ggk9G*XD[ -/E@'XoWE]em83uM* $(i0Y峽]4C3y)QY'y:!!6lFێ(RQKsCp|z٫]^ͥV=e8bTl /&H|8 4Cg$ ld vV|»f%@vLO~dk 0Ucu R҇,`?pS1^zcn6w[2OOlbTcOj|}AƖ8\>8㉧]Z Mpr7YFOa^fI$U.6th~? ;XњI `aI50Sj]kBΠ#~X # YHǬOtCsھ㦙gMm*$O29oR{]౓fض|dwXUXP0P<#r1&2abLyrN he*AXr-j.^ʹmF gK?U@QOu?촻K8 ՍYztG':޿(i d "6>@*{MIBR,[}~"b.'ؽ!έidorL";ۮc׏xucPZXo}uRRA!{slJW ѯχ=a0m4#uY#Dn˲;<] ҹvZZٯaWWW9;<"˂Ц/!ZhJ$R,h_#/9OP,RVrɑ1K5i!%|%}J93pF6ur)KmQR#@$M,d?}v}*]M.\)f^"T Zeeb*#D /߉WQ!"v&Ν=/@,d~UٳYX\0x? 1վ{j죝 F9:j_Ϲ4H?Ǻr oLypɩ]YdXΗnwč?2 \}QB|\uOWO+E;vcږ/BWƜ+pRsX_ԇDϵ_ӋW*Hu4Ξ;`E[=@/  ѻMU{&Nj?3!ƂEV +Hos)Î>)5B1Id@ qhuaOw4$GčK}_no Xpؓ+aFW?*ʼk2c cR#M&JCpUcϘE#J^]c&~hoVM:~'NioW`&gviY1fǿ9م[a+r /ޜE0<4j9> .6(?`Ӻ3:Y|}xc$XwDpJ_[åN0cWrYTC K.H>C__~ƭ86=2`G}. ^g!nI蠗,u/;Zï @Md11u vR< -U%'hjL0#.GWf@Z0"sM 2~bZ(3YKd$2V[Q̓Oߤq/&5.ޚFliᯏjnA({E7gE~O> 0:.FҺ gkg̜},gI&(__QQ->tǰOCbdkH7X5MӸ}vqFvg7N>W1f/:}g #*;NDJA--]\^Rt8~DBw脲 J1eB1N劐 YZ *ؑ-Wĉɠ5/Qn(qrBK ;ac_A7# c$Д8?F4=G2+G\%%9! r&K^c#Qٜb<v߮k},ӓKf%l 978%WFMzү(?§ˤ[E5;aˌϐڧrզl*pڌNcB'HՃ[w\>ʹC6:e?BiKkr to_yɂBOph/i,(7XkO,kBO[4C.J+nS (Zx#D}vSG:BTp\OA76h'*kJl6-uYb/45%OK\uZxb`lū?CaW6/l0ϫǝi:L=r MVCݚ]GՊtNf`e1 Q{ ENMgBĪIeG4%G1m.—4MAjGf! q:`?kV٣ s~NbVlALfl*a-xV'jk)$z`=iޤP&4?P+ݘDC:Y[3`rA휇j%1.@p+DPÌ[f &Gyb̾JrMx<'v_5a D`}%з_咲K{ҋDTh_kQ{y;v0>CH<5~q]6TX%Kdh`׮&g_Hr6 -V slSR cwM;2rcD7d$YXƥaxk7f{vz iZ&9"*i1(Aɾ긼u8 AUwDJ>W)2C]9_>ܹAHV9]ZSxr14R5+ aA"a+@)n*. qȴ3AM=b% ϵ=yD㿎j]&bv5gD|^}V\E> ʍK> b(qqmrMAU3) -L 5vZ=Gx1 B=GGӔcpy gZm@W򟑵l]ix Ւf c ޛr$JǤ b܍Ҍ1ujz{ϨG˿vO6KnT|G|˅,ه @\jt^26w_BXa? nVy*qH &ďhdtMBη0#eCY[8 $+i/r\,RzndA5x+ݶ߅AawIiZ4F;[o1ǘQvfy5AA~Up-:ak%bH:AưЯ˘{ 5cdSs-גC}2]͞2?o76K10T5]dCuŨ7su1fKuѬP*9stq|ٽ7j3 $fZl0:qi_ïF54Cg(96 yv:RӍ˒!LS+ϛd~HY+ѡOrzX>50A.>IZe3Kpp<˲u$}S"8 S̥X,0]Q2cD,%yI&$);Wn!f&h1?[3|-00'oirDQ/UCԡW+0)1Feg̱mY=TW2mG dxS4,s֧O_'$v2 YV=1Q~{SxzzHA**#VĦBºNO).5vw[hK”UCSdyc^>N;ֈa`L55:+1‹1T1Ypӓƭ^vnRݬ&"!>=G@8hP>2,d#d֍ﰋ#z`; 11΃լNݿGK_R9eR3ճw gh)eJbuV=sUE exˆTdfkZl\vs,\iȻo|.Y ܵR~%1Pa|Z7f)iUN8f]:%MFU&CQ'aӷD[fp*q7k%I29l, o'rHY` `Weo_+s}q?!^&a+I kįS?/h4?d |w7r_!9-ٍ~W$}>r`։3ͳ:=Ho9Pg_ '<@iX_둤&o򅖿 #S uLRܯQ)_OTndΜfi3cSOVP0g rKR8Ro,N# I DmikBCK|=Z1PiW BÞEZ-8'E #Xrak_xΕÒ=Dq G . g!M0r dP̜f`,Zm!`{s}3%gAzolv)ʌJơN$tRJzfQ͏ Nsj|ӍwٛHxԨKLJaȽuc\3S?! $\UWQ,9[PޑUQǬjmA;d7MV%W{O.EWBP7bl8s8aOQQ9g>QG;Ysqk3SC:3Ov0ֱk8=t݅C%ޕ|Kg2rFf557`b~|"3*DxxD2>a9}(/fyz`3CɌ U*.$Rϓ(z)~NSuq0+h}? rbBs#5e43$eT;?aj܇6\~/`ƈwIf"eceg-r}RoUgQ{SdI ElE7 ! A}ƥDdIɓHJO6l$#!O:k z#AȚ)[vb Q.k|y^fKk݁Ta[yHOGFyJCد~]?&3!KZQ1 aoȾA+6lCzQP> t3SXd.Q/i +W^и#*t>Rrw_Փԧssp{M[#z)kxQ k\hwĞ)(%*q2P)}LJwC "k} YL}49<..xY1't +<ؚKvcLLTՏ7c>:#-l(*|{#BmVڦ)oA<a6LQ `F$3Q}nB"%g:[TydCqgTPTS{ N>1^wx1%{zcpזp}c}'͈zcZxmTEGOI:vlKH_)lhڲjvj?]Ǧi}% t 滦y)wѴX$N[R䁩('X8њ_IfkJ$ZKj0arL-0|ldZ~\00Nd쐤E |I"P:5?qey}s0GHXF>?}?"* NI=$޳;g%{Sb6{.1x(-hZ.OLifO$̼iV3w7K)VR)!an_9p#gOL5,G_!f:FTރ,DgQќVkh!wZ?Сb/,29ؚ~ *N͹#O4 rsHԷ7gxMEP` -nKIl׿lQP i6:ͬathFƹ՘S'PD-&,R5=6oŔ.No"wd@׀ԠzHLҎF-{߹6uBᅉ_v@XQ?1C~?qZ >4r&WufU {#+B E$52VSqV9iǨk*mJdNKoI6OHf3%ԖPw1>՚2[M.QS|oSFsӍx5 'v@#:+?;؊)+nW*1 7MтYܭ[i iX6ȵDج3k`gk0lN?ΪN:!Dk|kG#7>Q#{o\%6$-T }Xc,ӓ7srOWaQxOZSo/L}%zdgvW[zDSxm#/ 3/Y[8hPrf.`XI)T y5Hiُ֙9Pӳ"B9~ќOHՕ8g:I- 0i"3Lw$DBzvhv߲{zdjZFX6} >C}!V-aù_; MRѧL ̬s WÁ]dOuWfVdDv).o>i7G>f+}6R[<H@TBpxwgS(̟btAUPLm R壻O JY1`;Wʆ.^ICWQ( +F8P&*Ei[:vQy<2|"qQcj?H՗^}2hc.Zoa@CNmSL85 B%2z"yQ/œ1ۻi<_>?l tIU%pkTؚޛt,"(j O?n~F>0 ,J3ӌ&IAvkaW5IIMH #C;_R {᚞+ sk3uq SY䌝t(v۷xذ(D=؋0I7*^#s8@ĵʨ 6އU pa*7i"8d2+ݮ R7~,9lW_J=W}!7V #}+W,4Zg.Dn7+Op}D[I#\\Z6J`4G5,(ոUveFȖ mojaVAϮV$IكxrT_ͷkdfʧgȟBjw?&sb0]ywٮ"iE>fh+HUPj|fFZ<.YB8;WI{ow7k}|kP@bP_m~KJ-*ʴtKb\ O +Z}\mr7t@Z5s#]xF䘊GNJuv6SR3`,cَN } !xcͰV߷h,a}ۻw\waU&'K2feq^Kqm,߼y*[K!@~(1>&@ow\rAL+oxD6Pt%3J1ș_ :4{u/fڿwr(w΋;KAzi%L$; &\!OXBZШQz}xal zJn1>ϐ:9hBe*%kc|=CUvc=;K7)n,>Ǹ0%j|2 [e)Mc_ϭ]Avnprۺ'7ԙne"Sk][|53 j:dJflȾDvyb1 ]G_]`cb{(E&bj7:aq# '0mԺcϗ"g:'|0PcȰ[(S{D40'X"kgU%(o留xќ@Uܹ D*dM *Ijی1>5]͙lЏݽL"'pر. ;\&Jr ]@p8rcRڹvcX$梯Uf|˕[z@m~'|?-܀R `jH3BNʴSZI֊ ) QQ]!!:ͣ?HYS{} dlKwF]h8iĆ}?hءycpΜ@I 8}@7RzٚIM|UV hw6 y*YԇP01P r͘Y(1$E8PK7,֬{%p%v3F3kynO_e-޼a5* ha eE9WP}R<{%mh`wc wo?7MP+ pN%෱$> };](0w )"Li̹ 'ޕaqÉB3p.~B|ܪ%?ڑ#*Re=;CgǼ] svx˹u,0[1ԋ"6 %`lkηԡ^>z Yz}cԷp[rep R^S`4+IO)vL^^\3s`tWWIP]39ChJ:'Yv= WSlj7BHFhޕĚ1o'Rb "Nɷ$>yy_n,ŮXz3!u sry}we&x AϾ IJȋڐ9$*f}NW߃˄6uqT[W79-i+#ԃ0kVRgB9/wo;B_/cQc{rti8 >s=~GXk?.u1ZYݟ) V_ 2aIDƑP, 88#YTyw@FgJ"؄: >ߏ6{Z!Bx( YuiI--^dle;g΂E#ڜ1Y=bckiX0gcƺoAH ۨ} izH&(7K}6#p`ǡ;H#ʀǺ &юP6:W 5msqS'a֝;q҄1I? XÍpx'@ݰƄKȥI5>SzV_CԳઞK%8QO: LkC hZRm#VBOs\n)9HQY5<'h\?wNW Vz O%)j=f(;<10 9g Ϫk9ǹBôo|6wUZ,){Y0y3p(W82ŷ>7GD4p ۟±&*Z圸q@/]!V7, Λrcٓy;t`|IS:fݏ؊Q5͌;)-NuJyQDeaajzVdWSx1$t'J ?7W_t(%7XOŻ cY]${t YC v0s8Zc9/k8N?`Qc;r$Dt(1ڝY{+&@E4K @_h&څ[olM&rE4^,)1ݓ}EFQU)"tmfR"\upzs ,XB;\%fʊ.͔ķav})"'f`/2uhr`̥ٝ`ޟctQJ &FU pi 'QZLj5N`C0iLIi"+x,E@o)@n򫜤 ZV0oCU~R> :T֔f?=SD"%6bW?btȫ@(gjE47n3{`zFܻ4H;SmǥFۓ3pÃMN3`#Aɛg̥AKq]42@ѫUg_{"I%DV#+$:z=tx ?%s- ,Z5a;g|scی7zVO5+\4Y߁$cEo`[gZXp:%}c(6S p3~lRLV\baas?a=KlVed}fg@%lۋ.3KZFx%o5"k@ c6$v3sh쏡pdZDS,d@(*vr—F5u3_!w龝-k֮iFB,)æ'jH 7#Kv'K^O d^PVS,+LbzNw= .(肦&t,fgx8`0ui"韁~);jyxk.3uH9ޏ1K?o$ƫzn|.Q73Bwv6OT>όcp&;`4|klDͽO%F?Hp|\}Yt"S$w-Jp0)^(z=Q!8>22y%]j#v+V::8dfuȱ{xPQHNҖNG`K)dtW$ڞn?)fIf/6:~)g}'\j$$/F1Ã]9gP .E[fA6]<G }hD_7=6췱%T9NDVV5SS{ ΂cPϬA~33CI".ՒukE#T ,QFn{Z/[;ܻW^Y { >K KzIȻwgz(0G)<Ħ_=9m}ۊV#j,zJ8,-nZɪChm@7oNLx8h3~";RgKǒϊ9X!rriaN?plO>˛zhU(KuN;4'ķx&QlYӹK}1/Hj'>ߋ?)%b?d8_!P@1ǝQAZX gRUa&7*03t)4ʫ|@"u̽ c)Ax|,;Ʌ\!wen^{~zX: ]<(]JX{v[cS#-#&AaVS(YC1Up6/uR/=}.pKڒB1BhD".L~c*9*I%V|i,EyTƒ]#1z։l [l? հy.bbBEך9}n(z %JsZ}of[Nj cu%;zJv3 I•L?}Մ3EФi_>2C5>h{ r/!p'3.Sj~{j,f}i>y#|Rx>ozJjVm%8AWӎP@wʖXLNKPejTa uK[2F qTk]?IpԐ&$%K)$Go/4'z.'誸&o5Y{y =g^l5;dc <[)̬0{ 趤~]+dk92dZ-=7p?{ZX,{mV;.-̀y"AƓ"@M/uJ?vAjDڛC e?Dʥ}>(؅XYXnYBWf>](J^ag(2.pO qT:K~Uqؠ. ".&\І `*-.أ5ȓjtI{ xcX+CFzo1vnLm|<= Yė{]F$zՂf4#p4ehucc<47OqBr8 w qVLU!yNGO V)8I b2l,pi|y}Kޗޑ>j_y6 W{B!xOv~*<>Nmt^d$sk,RB gUo^)1$sB$n676vM]t1f_8~bTA@IuH/#N_l9uʣ ΃ &P}vjC2Bs|QqEHS, a6(yd$6 J]ϤI5o\ j1AԵ 'X+- 48`+"lYǖoͶX*$z{g{\2 Ol3F|f}NmQ= 3ŕ:_-s Itݹ/cg18rP+ƌسK:9|™^} Ob)ûxE _>MnƉ/}mݥ%2Z 3 ~Kw>Ejgz>6M79>u3ceW}Eٷ>`ewNeWx~ĘsQcܕMZT4rcw}A[ r"b)O~ʏd7lK1;m _!/st6(BѱG^s\T<Ѷ-ELCNerIyD;PUVp两g)|zV @j#SǫSbp1Ufoa]j̑0|i,6x6"mW VX}|Æ|ޜ7vfQP[u.}୏Kt){H3D'SOv|݃<*f+~eˡ1$e xvs轥(nvy}}qGvn.Q =vBY&`"נ7wA+`AjhdIHF_YYfW Rc~?@*hi1@ FQӃK1*g b%DYk}`n9ǐA2,&թKƇ.챟4i~&p:2mjx82(4c\ƩFjE󷤀 *SJ}&o>bѴGiZ^%'̱(临7 D[i>B#lcѽsQz҈/ҭx+їfSAV]l̽"=# 5 #.>C6-FjhCɂطPO/QIʇz9LJΰ8w7Jsԧ(B3\gv1#&PCnVd2*HjXjϪ"r7LB˧g4Ob}-Ǿľy㐎ǂsraS nS\gU(J !39"hlM%rQCSO5jYYPT@kYry`T=,$=7tt"H|#itvR˙h%ȡH, TC K|AXũGZ8-)'ڷitQBKS2[(Ƙ&ox9X!YGp*$,d ֏v Q~i2ׂhgsq â@7²"g?rSXHE⠩q&lU"(3WUzVF>g[qS9 WmO8=[bv@%>>;,9[=]Uf\HsX'Nl43gMh<66!ȹzo#맟6u$HBi/Mi'qykpO"n`IjK!]Ļ\ΕIq,De@zb'0`yc*)"mEݦawŗLS{=qB ga~sڀ;aJ"VwJ\}2 kF[ö> DŽKh i(U%t0ƙ\TC _#Ըf)SeHzyflh>GV7= S% +!sh@Rb,XY#sI:2œ#рa b-Mp}UۋITJuBZE?=_˺&%ʽTt) t܉PK($3)@@Hc̟4JG5n̨LZct~Idb Q͓Xr[^x/3v/U 1Ž kSĪF4OKI2>c*SbB6'~Zl60Oǯ?ְD~~vWik  >vf?lgKf d? %W:#]< ѼJf%ٚV@"]y s k,qΎm}Қ։&:YbZj?2E47/c WNJ  6~e'5q?S vK}gyܺbɀWu,Zm 6 Ꮥ >WYCudt])pë%hyG ’l֮N)3Al ?1bfDItWg!ωȒW林,޺eknyL5<7+ʷr |N\zGq>߂:Z9:83 MK]fa U]#/\WA z1t7KD$ p[M]D<ڢ>$7`)H Q>ZWgI"W0c,}<Ǝ~G9sXd\kv7gpQG8)'+j1Cˆz%(ehѾ-ףNAp ț"4㎹x:#G7p?%p%fO/GijgRn䵦@l*UaĮ>~>r#so RBVL}R[ˢ\CjI:}H}1m}:|LDD}^=yp8%^CL@!'.e8 Y?$jYjTV.퓙̓p~MB}}E;9okV/eBkrF$Z1yAX5RsF_zy?P@3"ޟD_3 Tֵ)KI4_kݡW,(ѢTšr̼QsI΢$5kf7I|˼kעVNwʱI8 z}c4>/&}gጝO9=3G; ,-R0jɡܝu0E~[k z!"4ri׹<r@"܇i[H:g%S&4v+|*˶QUgc_[ y+T}JFRi(q2+;/Lh_?P<%טPCN[Xr w Ϡ?$F >ꎿ'}<ey*Ұl3wl\=rΆ'O4 = eCByNV=:vF.̜_(~{Ubbzqsb3Bփ)\酔C*-@T]Z] +v^i(ao '/Lx}nQm(@6|GC2Enrͺݜ[Ta ]~45+f|摅Ub=o)uJli3rѷL.3:퇏d% bKO+} sqvm.G!4j"npn%Tĝ2osA[K#⧠ ?!^&fhLЮ}fJOŨRe|'4 NhZ @mã:#~_٢`re+4GU`&Hh*d*++ݛvmt5y׏+ӕyBWBN; 7}Q S$2u,+|e:DΙ䄻Y!<]<خ2 [8P˃ǻ7#z.FK,oST7cbbnϾ ڔ6 ǗB{;\Mmvb](aN?] Y耏6NZP֚$|3I +@ou 8Be_~eˢ6n!K@lb(;3~BozݟEr杫 9hvYע~} !f"kB(Z+ǙRT_]_;O_HM t8ebOvm_ nuzSwV~LJpJrm|C4KP0@r|nX>Ilۘ5VGiX*Zlzt*$kHڇ@.OYsk{jΦ69L@#zӿ.a|'x~=ipXXeZ'V#)`' =̞"?"ξj_xȧSӾ }0 ubĒe6-4p;; ͩq-MJX{3b6s\o9>",7VSbfZ^/#1u9.}.܍ZEg.o?@+JhړwxP%e '|kE}Gy9z&| 9 id?>/`_F?mi3}>5xT@AI϶^.F5`O=s&a6gΨo%Y鈂V3_ݷ܊_ )Ps YHtY!Cw0 }޻[u |(<=qyN zLO]+VF?q_ '39H6XkOk>)6 }&P9~y0rwc/h z%yivmH̠O<(H4(Ő&IfKr#зfKe*&ϡ˃>Ax{e^MB'lq܇%22Yݻɧ(=aL% S|;b1#%|N"}f7 BY,Ө;"tʰGld^"E8ΆsD Wf$iE0(d<6 O%gBmՊoۊZG7[nO$0i=-t6%՗o9 m1/?D$ Dn2 ~} yh2ijsrg}3 >{Ŗ1H{IurVJLȅ_yr %tOJ̱)0͑&@Cǘzݸ/ ע`zgjQ J$M;%v~zlrOfM;7ͱclI鍮 {,M;Xr{Z/TUT`w3ϯy2d6.Wn=#OC.Nş'64ؑOᲰBăKI<47)2M I`΋78бƇRTzG̗VQh]ܐ%~g ; 'gr _)*{7Vqp~qfzGuF߭V3]CcBx*Xw?j}ԇD4{^@G&CwޗҞ$kX|)} sĤz!j;I'vEaU)]K dsY0;)MSCz<ĹޥWd5tʊ# WE1En_d#i*VsG`Jc#@TR9Dc5,97;R$v?3Q.Lnx=&)qT)=!s {닙01Fˈzn14757Ynˏ4$ev~9`:˸K,lD*C3*s/Ƴ_2 eqKfx_l lkQ{6ޯl^`;>YO@p€G z5Oނ{ je^̘jkm+ V߉<`8QmvM:Ǜd8- 9.,B%O#AE!'ݻ]/qǍ*_5{wc>#9\nY PJQfv?MҲtTԷ_ZĈ[)-ߝslN`U$UpFDu {w[iYT@v\O3ecvC`fåoƔ2?Qxhw!.{E˿.[u `?gs} \y}>+8i)Ի5.3T~#2g`""|&/[ȷWN>SOF29hżudݍ*P asq&GkVͬ;=}G?y(gPB@Λ}r?X[ HR ['>oPQFEb @`3ycTR%Ed`]:'B{!1߯_:ͼzh%qו1Eccc簀CTzN?1ObBIIKP.{H,S&~W i6&5oCj.@5"fOd>@$=H)Qr$ uG܋ݜ 3#F5t sF4:fL2hte#!K28d}:ǶjūغON eWf}ɵVkj <)gkO)~FEd י'z: /Nם21d+-,Sj #f0m'#bpO1uw5r o/}Bud~2ޣ21s|԰A+_sl`%!u*~YmsЊE߉`H].[Yݖtm7/F+8!sl؈⓴m"0K3'412 ~MEYfIfJI0cuc.LA/tiWɌT8U7gҵe20y =ZY3}ﲟFvI^/ϯQ0ϏK+o5إl5 V z ^25(g+J } (_!+BHƫVP_YN0TcnL#m֧Cb'Pzx}ׇ (-EhKܗ*+džyդG5g# uͩwY? w m 2dngA NjBUĹ֓E ᝣeVA=^W)0/&YX2ʢR&Ca| ;jj;NNW>u&aj _%lHѼ?6Za5E9GQʅIP`~LůH N/>_PXki"qIhi\Xe!RLt#:/Y&i"J7sCaĪb+µ>q[{ rree2HޏW)Bj3T HbyDRҕӧ0=)xg9^۸=chU]@m"")W^ռ2Bx:A`SeeeH}Rqbس/BvvR ]vwos<#bQ;)&Kv>v|D#چ!֞!39I5G= 8U}??G2xx: r-?G]!I;82\&ϷleDOr/5Q}FTص|0TLMP.%lN F)t;Ti+MˊTR4[X٥D>efQϾKCScD]{9:]˝DŽN0y^q[+ɧEd1\ŕoB0Bp_쐖oKJGDu Z)Ү3߆컥S;hck% ]7c;?q!DҾZ *< ̾&,,+9`w2 ul/e -YRZ0 L)j!SE%S[Q"4A/kuL^v?U_ pBpNX"UHZvd%}BXӾu~ul_?zzbxuzI*:n-(?|N x0/wB sƏ\b[y{N(dtK刿ʈ+@+&lcrֽ|Bnз^_$owȬk6t^Q%ӰgI9kbO]?W1=Ql~t`Lj@@' tIow P+ `-тFh\ݭ1huIfʵP>G#727-ODUx0 Bc>S HO/ji|eF|u(;a!v>Ds-SÍv8tM[GQQxWÿ~umG@>zH̻<y852]H ΟeY.8-\/[zqdA?bZbtEy"x/b -gWK W:-*V& (N|ґ ceR(EvR,sS9``qkw}bsr& oY4tNpI)ֹ}M{nkle-?Awq4S@'՚)Kx}z{O?L1<#n l [L1`L}G>4̺ U0$%m2 nLBoƍO pUO,$U@{S>& Qv4WXWbcaQcAI.z3;1#dn-e}z[2pf#\|\,F_;Z0(SX̷#LDd)* Z%``%{i/%\3o[R$Xq.WKɾ+ ׈[t1R>WU6qO%fUF PSTTʢ] PfxXOxg:.<{Їp -)dUaklDBtEUvjI,xf^+ FhMO]E;ȃdۇԫzlXCzo 0J7}f]NU4V,3VrATWpAH/ (ex.UYhu(IkۢŰUҞvIKiM0ru)zv:o9浛=cJ;yCn|ZK^*!h~ ˾U{sfI6fZks.hdǓbAB)0l [pp^p=7zBo" .zɄ(vjv^loe v!Uݫ˜HmpooGdl7G ׫\1:.I+>wݖ?# bg]ZkdC{x_GH8(qıS[P$'AΌU 쉨u[Z[z5 ?C9uAt-} F2s`у`;Xڋ2双W:]#_{L.LXS\nq[pPωgjgj>BsW[Ũ%/Ʌ,3G {DK&,i4§9b )׼0>#W»XSR9 s* &QLטc=v R2a;̵-m36m.zYd` Gb(Y9Agxx:y|BEpp9g?|a`"c Dzc8 tzS+|W>`ҳO08@Ms0Mch?QsjU[)zmӃ _ηUĆ~wKvSq+Q 1I}`/pV)7P%/Q2-DE~>F@ "D3Q}_~+&9yRλA*> ʪR G=Km8[ԳyK!^<"г1v8@8z!,_!Rf (%r &7]Rg &acjD@\|@^Z2)d Lg~Mu~k7'h'6#5Jkь{W~7BKiN|IgdmO:)=I眧W=:OSOtI,VV؈SDž4)\b`IP{O:4]?ZЧ)E{*<{K0j +r~b%8=slv PΕ̬_+H+{ "_23mf>{747u2$rrMWnrF̥p҅ wjUyV1'ɴIQZͻEu"j2k|(wwRfVŃMsqg(+~*K4rב{Wŵ<cJ!.bR@p"=w14wJ \ĪO"(*CeجEf <6~0pvhbϬ}cIQD uW$^*˒C@mΜ_Opc.geHzs?=F[4w,e;8~=!A|riY*odrd Uwy3y:znz->n0U7~-~b6P4b'U] K@$EE$kV))-b\/3X6 ` oިG G:Kv{> c;{]rB2e%=R0^Q؜hKKOYz q=[M}.o νU1x^[mS?`SZtUc:8͏$!v$SBThvva@j*x$nQa?ψӳ󑐜C2 P 05IH޺*VVěQ(*r]SpPS %Q}-"ziJ>xFAܺ.9IAђcitESGKj!V`ڳu*P>64c9;nR@U&Z,{˟ uďȟg&qcƎϼ1qlP$ʟo/@ ]0Ye:Y>Cfda$a1G0 J}cDyȜ,]C;C :jD #eHK]KdO|vcha|l%p*oG)!fkIJG: yU}|C;ElMLߒA!+¼)#mc|w0;mXCgt兢0j{BKwO -6T980H?砱3GemZ :6q,,Zš/%D ;ݗ}]gt~#ndce{Nوچ\tlG!xvwp ؆`ܲAUZ%?b_엷k@>ihS_1A\\Ge_o_5L啵ܮ] 5;̈΃},˚?7Ey8t1}- 8],2?gA=[h\Ti?M$(ym5u\?=߀KXkoeglkĔjT%w\%;/~9>;޷vbhk7?]%.8ǨF 1G[3I;q]6'+#x7(r2ܮN ^)Tjզs?-F򪯟INMSݾ>%Jd?EPQ'(xl4#Nz:o.` _i~deZ;$τzSzK.%w{KF|b6|>*?O?Aig07gA3{IRwt_7|(v!Ws='Q(RPSSjqR"r^t)~~.Q>& #^$u*:#aլE=}P|V\H4-D|)j|HbG/z3䨞dyBZe:juOl72POPøK[#)32HAf{hEh }\&ݗőO'($H;ڶ! wPw™@+;fӻn;r}λ=B`(~&JYmzɵJT5p T_&B_5=F|ek0?'Q$xBGU~wz+:%JZdԂD(X_1vjugciR։ *.U^/>'/>J,l|H~_evӧxk~5[ ad{ے4{*f/SOܟScBd٩sU;<ڟ8<қfȧA\Tʲxs:cdU9U77o_NRt|J ޅF_1gcH1؅w S 9GƊm ]ϟ Go)9;V{__[H{O56IHLV;.U1O𫗦Ւ%Ko1 TH4Ņ I3G$Is-:Fr(i =uiMaSz#`ΊnrR%(jLE6 Ȕ!^Zvc]`nH(|˯C5_C0`^L9g«CE]J2U7]Bg/ tHN:چ+Ts^y~[ @E-w*y@N&-|Bx[ f֍~0Ysb@|)xHշwHrj!~'kQѦh+}a4(Cuށ`>Jpgf)م0 ΝSJZr,^ٯYRp8h/i.ZWl6K-"+F#A(r){uG-ƷKa` qb[wk} ߿0!WqDޣN-']1jlp]#MI;|R8mEЀPue0v/M3V6 qKa1vi :я1v V6@҈,,<Ӗƾ;v~kUDdĮ8;EL3_|dDls͉cKXsVI7%U1`<~D-xK !!k4W/& p&J;.;4AFY6դ)U!1tqOGr7b@jH4=pOehlሬHpEzrdgj|7hÆ rE;j+bn/ 'K/}'F:dqhl\vpؑ?dFc&AKl̀^N[?Hᓼ|G.ֳRlNͱQ5XZ{Gbx,1fY!h\N{-~N++3kȎ/y"Hh4>+lHk5u$$/vRu 2Y!?#ucd`7j3vg=0?F4KO[xsXi crTǽgj_kvyiܬf"L>KT5W]R.biX\|ʐl+9nuD5f'_HM? #7ڞҙ@lggwUlGKJ풭i[ytp?ROz3t,ɺxD`NEAG ]ӕ13t!IRAfk@lxo=ursؘVz|cYA}DQeJ~劶y? Y[&*xa?.G9]ST|^Moh֣5a' /2nA=?=o}wKW!n_/_TR@r'$'!Aʿ.˞4DcgCfV;L> /Ng50p}ږ.h3~Q;&{͖KJØ9o!}I9Pg"J,U р\+r:A~!1!,U|ny 5+*VQ8Qpb  'kYoP+1kIܽiM$:.jaȠLRd YvN.1UArp@,!8];eaϩYtͩ9BU𑒸V}lŪ0C|r+Kx6hKr<.ʃ"J[=%i,JT ӶԶGE5sC$nqɑ{Bʇ3UOo|7vvz j."ŭdvl:PP9&<\ĎĻ{[Œ&}bձ%ScS 8OBg'9&6sVIO&fJxar{R.ʊ\%.En5@< }Tv`w+YCmQ%ز':HR\eE$m]d S@4GN .׸rC?rG)0 7Dr!xn U[=l?rXu5u_rkh~\Pe+㕻b2=|F؝| cÈTgy@nq, Ƨ4"0[ 2n'FqwgNC"Ctϟ8μ"Wq8]LXz+Q@XٝT{hJ}?iwAT1I"wCXafC0/m ¾ht͏+v8Ewr/{xY x7H݂d L!Yu""TBV5fԀR 4x+1IT>hm]/Czh\B8E=҄l8QF5p%wVlѠC,kD- _Bd Qz-s BD\XFez} >7XjJ==ehEI,)rO1r\kZ3L;_?=0RQoD)AC1̅2b M|g]*46@r"S{_' $\JnN/`쀛B<'KZڈā>Wt GrPo>A,g: P1istTg6-&"*g+WP;fGQcjR*9] qۗzw dǷ;%F 1>tǔ٫I"!HK¯S3\7oo:vAT!v\?1 %ؙoR8gE_~~{ת\Qfjջޕ rFVԣoݚk.iGvNr|/`Xc;RI,&D͏WĊ1B5%ĶՋr~k%]u\Jǹ$Pxh12^q%Eok{ȉn~8"iTQOL}t*$eš  AhZ*UY%Yra:%\FCT?2_K{7#Y!+Al kLSV49KJHn<>:0bˋiϞڔ$*(%|jfu`PNjhn5p{2S8:4<0atN:1b=?|s?; q>sNS%YOxy'Mo4;犠U*=&Kdz>Y+dVm{]t.UhnQ;۹9lLJDYÛլF/=`{>EĬ)&Ԓ>77E C>ot%ZkC-rIyd lLOr4Oa7Nx҂f:4(0cv}Q7*2LE-֊ 8q742.@HM 1tV(=e,yiu Uw,5_fO9Xm7vݘ]W9ȴf$-54E9. J͐ RʙlJˢt#&, u-+^b(@dbh~J$o9+!ꐱ|7ZEcQk FF {OF5z)QV" H0fϫgA! 9ťow[wNg[=jЪQSi|hZjv_mEnMtA40mK߇d MAzN Vhj4L҉f]XmRoP_$/*\\(Ee k|7;:et7orJ8L' oQeG>+J^HO#mF=3׫cNl.=Vdl2zȩxviBҩr yaq)EN0p +>9͟'[oY^7x6.<-Lwy!2N-٤Q Dup|:>dO)K"(\=^-@eJRdSItJ `5v,@߶~Wح^ 6m=xK{%IB7@vjN3odꪁ0v÷m*FsJSU "sPJf@`7L)ҢTF`ԛ8 }ɢms )(R4_LmKwHy񔹔V\pt6Jjc#r(y\'f ]g&^,*O@J/A]X?T`ǁ_kI,} r~*Ҷc MK(~z !$.g>a@⮲X!ˬXڙrxEpTyDi/l|~@/E[Oqkb8>>t`nTW-y}N~h|;'{emHDJ|ӫ` q y7}c -8kn 1Q̂)aU2x+?0," kWL-YS&" z5˃6B{tBCnR+tar$w\fezdxIS n1#,9%p }xFnua0e~V`\ohQ!A0Ej7R4.^r߳Ghn x؍HNG1gʤߌ"½J9d-0xWߪ=h#6N3g"săq*/0΃;qeUSh' +=q3BWtHy\ih.I"飨.N{_rA{Wadf<4}N. Y *2k~ȸy#ҙiNvph9]s+ͭwȢ1= =P!&iur]Mt͑y4/ENe57ٴv1,>nq';cF"MYj29. 3K,h: #0)V_[ɝ>rLG~IG YjެG}I93"]KoRI"ݾIFH&/I݉k1@TC!xu1=.fC%G9Ú?6DP*"ȑl{2#%-zߑ7$ TXL8ٔL~Ibdޤ#MG3s8Z |]p3s pO'>.3ĞĵhCcO^FeߐT;,; q]2KV sS1IH,;S]1^Ǎ!c4yZ.-yϝ yO[<)M<'o˽/օ,.t59 Cð)U6}L-h9p/-g8 9d.`3vZHƤ:htί *"qQ6˙\PhۻS|gi#>3B_<9@jjgA`@-N',p_'4܂һ Tg.tw ku~v;ן\!>*i\/KV)ʐ1Rjp_$.S笷h]AnUax4Ǧ~Z,;v@ L{9>YUުjҳNnPMn*&|!$|Ч/ɯۊӌIZ:9. WB>Ny_%g WfkgE}.y*ؾ?no 3g@ -Sq}5<3~0 jڛ^^A$;[?ܱOCyrr cO}Omcߒ#R-q.4JkXí#) Yu0' Ewą6-1ʷ6l_< yMz4~( :wTuB.փYyoO2ϷeEmSV}=ED^>m#Az$J31.|"T:jQ<?[%Ø .1W6S'?сc4K(٨1]e#ev]BKpn"!v%0Lh?FIXcIZg~xdv#lOu}YwALBOև?w(,iۙR1)ȭZÝ撓7NRvws7SЎ5UcCArInύ_ysi&ɓגf@#xw7" UÐhݳs<~p$Vܸ!`Ng-*st":z7>L]x6{NǸKej)Ae~2 c 1Dz=N\%";^v!;s5dϗI}0z`ꋊuE:| N xݣ'07$o`Ywz;)ƍk g9]1 :^X%`3)U {h;ko75<.vEȂ_eta&@fI2Sm?iV- |UqG%%[@?fLiGDcp6٥sBǼt_-PMdinQP@o#0K頜`Ifw-ګ}i~I?1JՂn|XD/B8щcs;_ òFl"KXz;F_ w::W?)'uGW`]K 9JʯlI/q|C rwҭJyT44r]:BX38?D \zÌu2N 3ݧ^>r1d|s̆9%K!]CH7!pua"G@b|f,9Sn9Ӈ2nCaܥC_?ZX"ޥuY[}Č5!*)Ƕ-] a|R8(fѲp*oEVπh)^b- IP/,|u(/Yl\|Rr{DWQ׀$g"qTvElJA3ml{I^Mz!F0&3\)]4d m}[8N$y,OIuv哟B!ocF 5s6v%MTܕ:??DHf]i_ѱN{ٞ]@ĥ.Fa̖453Z&lM4 9uiٿЫXC>3^I@q6g^cUPW~ [N[(*Զt[%%!vayTY#4'9\K‹Ԁ4J5"+>6l-6 4&-@w|E9hjo5yʛ?PKT7; P1igTկ{\6t_¹zYOŸ^i„7M_;;N?#b .E1VWl-ph/woQEyiJ0>\U l3M‘%l-4g:<>684vFVf j[} e-顚I V2x ,Jd|FOrD}\IM&E}}nL\s?H< V}E 7AVrsـkyӎ|ը%X휣1rHQy}#A[0FkZp^<~>߃(+i^⸝?ZҌ}%$j3}"Gٍ.tf *>Qo})ƫqu>zIw8>sIubOƗ~i2ٱzl/,{IJK5yL|^}u+IiM=`ŐczEd ^GDO^se2mo_٪˲*3<yN .u|r_1gCi%W06?;t+ѓ5,?ı՞g䨓\~~#_`l_}ZE*WfvV@K*CXw<8Lrw1RڥIV9uxu}N$(U0W~|Dq7k` :O߮kDZ =ב$zXq)mI+XF+{RMQ,h/PȊW ^Ƒzl$)vhH/9?WylmF=Dzk,ʛ"& 9?Cw5 -cG_[R}&"~sM\ca/"zH^2#li?ӭ#86 B6)٤n0nY~iJdÑKm#1dZެ+s=Bhz՗c{| ehzS_Bb'81Z{ѫV?Sز̵3N;,0ڳjR{tǀ; H{Gşb)ONа3 |f%~ZmN2 *;]jpp6KՍ|M]+&f?Gu0UzcX S:H>l*vP(+kB>mfˑJ"X><wJʨ0z&#\۹G!$%ܷ\H+>gE׊Q$#OmvU_lNEEe(^u'17hP7"Tl~N#fz P -m1ɮ|/[1rhw FxRd0λ͛/[ewu :DVrK9oSzȔ\2M^U yOkXMVp9yY=t v[l{\@}Qi`)FX/Z!,)Fi, r<5g@fs\zGI~ZL CY)R<  I_n+wu+n A`ߢ!bH"A k>]U_CkRxt2bhҚVSn@j8?V:\v=jdortncpۋmmOa.1Fy 8:ӼG[og%{emySEm]۳؈/C-apiwDCzjT[#IN[s&23{lz*`w^Zy #;jy}CԷ`/ 8kk|F 9q̾bʌ,f7ʨ>Xrq\C!9"6zuσ|H?L$izo ݃g/r{0g҃b=AzKP!F㺟+ct U SۀJM3ŎHh3 ?c58B~$ 3H[/㘆N}ps]XZ+ xC`p_13I%y>xv)[`EVx Ky`F)Q؍(^@mFwqi;8Ewt_؛!{ٕ:']^^ce8߃a[L]3 Myֿk6'@ϘO0atuV$4+Ѐ| 8,(砃N)ʇNΪ`sT{O!.)$l_֐vv#dMJoɃK/F ۚ\: 1V _UUF)uuZGDeܬ"xs 7vnͩt:y=$p깤o"L ?Edw(ِ c9G$t-:?m"fhb}%4!VD #.SgH;H _o­h"X4a-@QabPgP#"`02Ȁn6(yq]3+@v ,瞒\6pمdJ|cȠkhZIGD"THh1"~ȋFF!V|eKʁ$rL+H3%\[LEr&iǘ~x jc*n+8y|Ud}I^3J_H+{;ur|-]΄s=^Oq/ja߲lPci c_1c;G1iFIQL !!!.j uކz<3/B _hJϬC C5vJ`5Q˧;: A kV:I(+Lz> xrA[kZ>KL}p*q:acώ7c!ғ}cBn+mQ(? ѥ ^=\4e|<{]˻`%<>t޵!R"$ _~93ҷ 8@xt11j`4!f/q by3}otU{/̐>) E^ 5ր5a*ҩE8J *1!4#\;z:Y*3ϫ䁖OO*HIT2|:dDc}݉=Lˣ8* / iZ`F4}cY>^4zWԽǗ/?G!B Q ;ԣ w3A^E~e} ܓ}`?ᛧY*0=/`5 UlsBZ{,lRHjſSH2f\RV\|ENl%Pfgm+i#MD{6*SԟQ˨f8ߙu.yfEbH㌕y;. ]ǐeyz؉[9>K{dd]rvՋ=GW $8kcrG> ƉB[ԑW0Ǚ)t"?xj2)u&U>f{b܇O/(|"P2D)ekhTF`H% p]Ϸz14"l(x\ꩼ^ v)1@[ yna3Ql!aEϺ$hzTV6LCַ&R5X<ӹH]:%Yv uC+YB;6uh0L3-$+.-V}h*ab5? 3ߎx2^qdn؍.+K(YE`EFt)ɑN%=zc2gI t? NJlŒmP#Z3>lX)~Ƨm+Yl;N9{پAs'C` D& 4[,' D6%04:$ ~Gҫz[$.mHn5JŬ)ԘЎ}3ĖkT F\Aqr<:MB?ӻk/#r%[  ;HUFFUy+tBgJ#d἟ӿpAU%ֈu cm(_vQ~<3PojMq{tx0dʍ$ K'P7pBpo]9 `k4mo1^NQTduXs:s->4n:-2e(]NM$T kEؖL(̴с"?YDb7.y|F~2FN+FYCNZ,y)5 b۽_> !Br,Ҽ#)5&DXۗ*b/rPUn $N 'koRl;vڪ8:8<u9P/.fBK.+EQVٍ1J7?t Ѓn݃;S. ;zUdbX)7n)^PD=NH̡GO JZrԋ$wD~ /]42zin OD{pY:^,$i1?;z;=Fʫ;/˹豣BH^퉁l^L6C,إĄ$N=B-+Zr,a7%4!PtOHBԜAESd@=ٿD۞O△t<& z@xt1rjGI!zѐd󄖓iX' v1Kb;8L[.شd({鋲)Uφ#pCz~)AsE`*qeBJJ^*')$DZZ9a{RfllV#"'O%$>L~j=Z3;]*s8u߇+ †=^{ uwR30v3H}RlM'gU08smz:]kʜ㍽cN#{ΞLvrCoSXށ/˰rxsqyQg *X>ĥcܝHѺ0vTW:VZS 1_noe>!Hh$%v XVJ{UHs(c;<fՏ3x[ zp&K eI%*Q=yD JL_>A ɹwL[ù"? ANvm*ˋ(w+%Z U0fW;=7+I75ᴤ} ޮ%u[BA$|ᰶ=w+>{ ~mn7)A )!F8DSr7YΎlޣa`ؔz 9P4_vxL[@ve$/D6GSY$ 8!yWgQD\U7ev+lȥG,ۇEWš;&XSbF9;Byp4r^:GiٺQetM|/xw'.v%W:I?*3\bVKN"|b *M*j y5VŒc^69(Fd 1hBd}"Dgǝ1L=.$"]eWeo6)3Lj0W)ӟw7ȡqJhнp͠MbU-_0E| ==x>A9q*}6|VCk҅Ǖt ʈ<7"Ĥ۷H;0P-qrYEևUXiWNۺ#kP6= ܴ압y@{Ѓ!gW@j12' ۨ7RSx!1%qaID ˔Oqlޮd a_yX-E⩝ظҫK,̈$!,>lgg#h 9D\b/kͤwLv'$VEdd;qK`DsPZm}JFF\fm(~kC|cgoBln=oGI ƨaJ/m'^5cV\]!Y}XKK {ȩi[RE`:KjAh\Jϡ*+·7%F+MT=CngI;^rwy5RHI,Ext3 anXE%yQx\ԠY3/M6D441'z=Bp4D'ryNss p[Ar?qKfRJ,uTk%(ϛ 0x1STFr.I's&s0=4 3)vQfFO^p}m~%襼ims*"QyP!^f|$-]xmg1$/wv h7ZQ>6zLUieH&~ ye3CkE5snW?k~TlW (;" ^; jD"N md+7P:ãIڒЇ6Q~Mu<-\HZ%|c3Q>ڮnw݇_AxU\ :'P\.Wb,-9 Y';aw\`6d/O[zq3 ܪ;$>Q,5#A^vKœ[k\Bode3[b %J|vYV?/ؿ3"RqwKȰFs,[Y-'WHKSJd.wy3#72E)?#i͏|L[ IJ%̞Dg.ӛe) Vg>t9!y#Y7niXXQUBA+ 779b/ZW*DFP;ޖӶ:֫4+\cNm`U: Wnxe|dwq*-Ц8[m=ޜN,*93< ZPE k_R|)DZWtdZgPcNCA+(kA8Ωn2ZS5| Ck^gEUڪeb2BH̶J# %K '%s`CK}}@P ²6~#DP%hd*Wf9`~D)zz9]}$ :$F @OZ)_ ,X FB1 B8h*8v([Ey BMa$ _Qz8$T%Y0$2IZ䫮$/>,9[iL,G%|ސy 2?lK)I!֌ aZ4AUKVm0y9>NϢQ ?B($++)bc8kי/GE[?cO*Y?#/ x>N>7s-m-Ǚ` xf_ޚ ijrPb<y7c0H5Z\oY%(?SXmYrEY2U{oF&m]eٱ&n|.Ʈ{O@`Ir)=VTU`H*)e&KWW+$'KWV|@ d:R" Go@^>yVϼv֘qo)@S_d QﳯFҪo{%k>o/.OqΩ X,qk#@+Y$%vD%ru*XQ=K?$:$~:#FHލސG0Kߓy wjѯV_1Èw.z{naD0qmHeitk1'Q"}^Ĩ=ŗk:%9y܊8"Y1Jʇ= sDݖ˸}P} i`%4ڜ%/reQ ! کI#DO_B9hkI{S.#o8}k}bm]gHyXJ|Ɠ6u)kÚ_Rrɹ볰i`~H4೯/gšv>2 ś}nH㲛OŒ; F&c'4qv=[5h6{:zGWHP2WdR3d GNΈ~ \A(;hÎ)_EO "#&J\~9_CW2"= ^tϊfpgհ EGЈ]ar,36 c<{w8ԇG_cgWYͣU қMSsٍsTol źZdyPSVxHk=v(|uo񽠹d'4¥puḱ 5m~ƾegQ^9}O&N$lB!."=D>Ad-tdk0~>61G{\+CAK ou91η܌v^9㜏寳C>깥Q" y۲ ^w#c;#t?rI.o'5g?`rb;Z]f4'R@X1 8PĿPBJ^Xܨr`%h[񄗿nQk'3ϔHc,}E:sY8cO@ɉ:)USc>ΤLwk%{}ͽ\ӕOpB`wjқ}UUa][󮞏p%3?\O%^zX ̻VzOrl_ l!*Uؽ/ϐ8k9۴'ݻ५u]%4J.=:.)`0)TΘ8H`ϗ;#8ԉv&eS*{=ȪU@M"0"1qU~f8&K0ϛ`P -fՇe.!L},%3ݢAj=gL{j [4Wl+xr72''o ~˿$iӗD1PHDu=R7ѝ:RchU9 ,6-aluy223?&PgڮzZ!őҪm(/Vo1vɩ:A1y?8ձ KQs]KP?A5\@b}xw 7gA}~r*_ ŤyC!7xk7YҌ9 ]h8g\ Ls ߑOykG2h-xc̻цy[n]Vc ׹_{!]nVQaP m.>+돣{&RbWF_OAI*[>XjZm/"~x{3V_(蟤r`YK&9. [&'2He;o\zt+"Kg$e2(GzkЦUSifMY"hF_| EyaЮ:>i"g. Kdc# "zÈj_﵅%%ߘsKxu9V:"p ;P&S,;?F'jdrWn}& 0˄Q8pT⿍ǵottaqq= ;se`O_baUU{|@C:TȔڱ:)_uR0{5}I:xG׵atsV4 +ԅNjQCнNKV_eK.oy~(FϘ̗PhO"$\uøƷZ[O>Ȟ&ƿ8l֐s߾*1_7gL / H؝Nuw{I$=xۛ!n9?Ɲz7w[ _gߚtuq[fr,; _|VY] = =G\ wZ'\FM!)&J/?h % ! K8w>#L|8-)vh p \dzDx1-ƹ[?"P{`JN&L58?:(G) ~ivz5mE /jDb' \̊n lxruN{|m(yA} QyS;v:.^6]J<8;Qo)yx#Q{ӕSc'&‚}ߊsO(ڪ<t!tC.!SAAK)N.1-d&W'!J!]B9}[ؠ$e^p9U6O0( SȒȕǚ!O@0߯jAAyNJv@!Sz+!6e>QG}ho.e@Z>PZsd\#%h| з!El>\K͸F2 3VBTTQǿusiϥx;&uI9Cc/~ROPSgc] \nWNp/7{srGF=\^>1ߛ;&յeM}CeQ[AcDCϯN D;'s,`C+ず~5TGzX"VS}ʷ&cj!Is%QiϜq*Gb]ݐ>~𧶁ZrwEH8A8 1[_e5 |ks\tUWAIm9vVF ?T8;fYq*tTq xt‡CNJ=XXK[ė؟xsN"6śv`MnGr] {ʱk-rNI$Au, r;M;8"3U % GÁ[w!o"tx+%fLIY$5J^f tsF8ņ>DhuA8;O3OIa[7xl|>]&Vٿ^ >". n,P:˴P|Lh.'ɣ#NQ!F?;Cql{FaO7?d~y*e_8*r;$v2h-/ښ9.ѽqWMXi"O7 o'ٖ޳Lؘk#tԻlhk?vo&?߾3`+E3 kːY"MnJ,в1e/*~o1Dkޤ3Y=y^rܾdC%2ut9PQ.QA@9cvFQB+7CiC%k-V~z:';99xCpe^?Y2nGu6hij!OM4e,lρ?H8Xq, K'tRj]1"|o}(npp 4)J M?~/s|MzEeO~ I;/گTHPgv:{KOB6UI(gT&οV%1"1z?଴{0X,ryy(pc%u0pF7" Q ɰ{_D'^_37̧h-'b\O퇜0"++@xV˖y÷j$V_nQVljnzs\yǭW2U%wQId}cj/$! uFPSkVa?qp:5Bt)Bm.Op6Cj2'ZE!k7@+b(w^]lgkecynkvq׸3Kz0AYc&2PS'%{jQB8 ֛(fZmc'n0BZ1їXʇ8)> %?d`1U}NaX`g^K?sb^'گhEHV  ʒ:R x3S,U>51XjOG,1 ]4sʼnMX--FO J!V!bo?) >3{Cy]ud R,bE;x`g BGňpS]e[.Rk .mʬ pYt!7H(?KbNƊ0&h@V&o 3/Hsiզ ~o o3#ϐdf؋=h|RgWE ⮳c}uG`؇XkUwE@-abvn(yӮvޞ)7:wm+""*Aeru:XFTo^mtҴߚkG;*OV&6YO MW,V_ΖzɪRCV ]"5p҈#v;RCRΑ}O!/?Cɸ3Q߄CK81Րh E?&څpBw ^1'ѕ@yEN; x bm3S0c茟/׏ 3Exm2>4ԉ[j5ÉϮU y)Y$wZTIW7{WN mr h@yFgz+féFJٶ7>- !*yȉ'~ˇg$Nݍ! [+XF&+.+e@ ~Jܖ8{KtpIntJn([|Rv^7sb,s\>AX%,VK`9 }|ڬj"=k(W&Ȟ3 wS 8Tb9KGAtz%]pZe9~,y R;}ak$nu`HAA]IZ8{n c~'} Fvd] wZ(w_̔1#h\r!Y?K : yr'f#M9(6vHݸJ4X =w ,KfCmF~߁b-KkgHm~V;tBָv[$zhS.=DNW^MyUSpOiˈ沴V[ D#n=c'"4?)%sID@W4>B*SB¢mŒ5Ipʷw$6k͆VGsMF7 iH+ݟL$=~B6'/@[ȥJV fo(|K֐XqUCb_e'&W#UiENYHBy;n)CSӌ &&K鄓 yGow 7jX mVY^Tbi#s5BK~OOVՃݦ݅z BacL~eÑE:i~wx4Is#kk:'3(tߥ9QЇ|شgtǃ;b<{RbQD$lo[1tly%^-0r1t'qSyf. 7'r`@g lq/;JP_-P)4 l 6G_U}y#'JrӦAw(ę#$4%oE%U06}(2fbs4Ʌ`P5{P yq=ZK0G~ swu˛o]=Ey>~fH"v4g(8iGzy4Փ`z/7/Yg3ݼQ=@Nh}b9}ű#˷싴"njZ?|9/#^C}V7Ny7ߗj55i:7ִa{)`U,ƄTU [K)N?k ӞRrs x^y Q\#oΎ],ְǨ~=mCHlMs!|Yx9C-$k8ƛ<^zlM@BZA۪x_oDaQICƃq wrEsh#dWTn #A?_޺-; lU]uD\'3iO!!Rzn}IP3`t $*_Ҍz>7X\;S܍GAtĭ\BtCuPH^.,Vڞ$ϔCq_m$[4P?hbS+RꛂxeP X$%nֆ301ՓC:SW"g$E؊^KFW{a ר;)R$d(y$Ftq?AP{DOjq;:Eeȴ5ge=Q?W%ҟόwGѪpW>>)c]`%/!G`CF%i7[^ 6,;Jb:~M;" ׬Ljdg歫OdL"GR)l]1lx<|iL݊ o/)9@7~"}iI?f| `?z@2{pvӇu2VJ DU\+1~bbKdNog Uoh⨔vgF\޼+[e۹iX*iT}{* tWW6rU{Пb{>3=Վ`s[6v3Qn$[R@Ҟ" ˊ w.SXd;+x.a_tL8 FnQS#ALzIu:cT(c73MO(B^\,aX5eKP+74TjPL vS3S=Ӌ3)H?L'=/Г48kOv-!s*A}3i(qSgƞU톺F.:$6)ÛXo8ѳASYTh9VnjlmMmQ5pYH#c\})ƶv9՘+`/ݓ&w`{ԩ: cہ|iMD 䭗&v哉^I'I)Dw_:᜷@47gzQvSbD _hY1YB/?x./䌩HwUԶr5OZ ŃH&4^_>$kB-KS|2QSƴ=%.~X|˼QCoMh]phKaKvW{?=)V ن%&\؛c8]JJ gz4M{ڸĜ5{H|T.&_,ޜ̵^b'cdޚ>yV&3Ċ'î=~>i..u?:X^6ޞRB Q[u~HnAc{,)@|M }+E2no /ď.OvBv YP*>]Y܂x#jXð$dd"0<ӕj\! us[V*r>p(hv7:Cw Ω o\rG`Gԣ Cʗ"-oRgzwT̄Cԧvg̖?t~uIErQ:s9JMB[wC^xȮwUqό+TZ3=JYHvd>FgdoN:҄+ "g41vRC9f>"ȏhvZRZ df}'6@T4_3Ho0U?k84^4%}q94KS~S&M(׬fpdRhg" 7 a.4Dh{F}8IV$ :-Eb/wSi#ݭ=<i 础{6e|tzŝAC*uQRd=LJc:wR`^rn1-΋qT_{J+bџ[#1#7 Aq0\(vqi¿ 1:'ئ`_n?tJkBGS.w!oW:ĸ ؎& "ʷ0QXM|9;֧Oʻ`fuIuU a):rKWέR-گMyl(@h}!\VKK cfw6?_y?kMafO,w%GS+vÍ۽^z3%2iLEhaS23v?ur|LA8?5Zxik7gͰV^T˄;cG[1$KB4WX[݃IHYE|8CoR7s[fsL[ߴHc88Sq&k[:ݧՆvQ #L+8%wxu.;+xzΚ98vЧ5!ů ktat*quoAdL<>Ɩ0a#K#GI獧pϻ!kp׷rY*V&ΜaKd)&'+Gf_@FiRnZ]?i 펋xҝnGj(ENsՀ kDub|DBHJ"[6=ϐR\l1ÒMk5[DhU^ Wpұ/-|W:K/jo|"3slUpB^7o;HNj@R,:'z[1NJl`~X`c6jh&61 *$ ^sZ9G)3D7`S(`.[ IJ+X"iv Ȯ;`u`;Y^\WOI =+$V Ѩ淃j%LC ͈O,8q- O_;*].AiSf6wS6 Qmf@3Rؒ\B[]Exr[Q?n,Jtnui_Ť4OU.=nJ;D=VV:1b5ކGodJ`ٸ.b_L$JzAz^k_;vK.M^ꅀ?+ZEoEN[&inKVMR4]Oi k8V{S8)8WmP՗7Ɏ+|ѩMu,wK~ao:!V.En+U"*!\S}7׮6ŷoT8E:"㲳, DK=4>!7tl>M BiO;د"fbi-4*וS3W&oK_!禍9*1@W[N]c5BpIe?\Ɯ!4vȩ €5omDMO#|083n;R?CF@”ը+uJ?fj{p-1YfU JE2S2l=@ rRZE *V{pkﶂr)\ /k Ρӫg"D?;0uB_i~<`Ynό[pã `z`ozZ qF7#e8:3CuiAX>L AnCJUZ:S8d"fҩ߱CYY/CLǔ{p7g, l]dT寻<m y&%%Z5|+?e^Pk]MR(VZOR">3SvwH o.Fd%v"ی ڦ9dxaݒBhiJD[jZX[gqWcȭRi,*؅Zb2H7٩Ǟo/5yZV`[$45 \M%@V;(owyC\$}]* #P|g&Gϻt.n~&.qXz[#5`ҿG1O[{؋fқV7Nؒ[J]@sȶ`K7cuC3(]¢tAV?Ik[n5zss`Ff!n_b۷^@1SěV#>tØ8{TU4 x∿4-VSlڻasD6bwz>Q% (u5i="u$2f'[!;6<ݽʞ<+$ :f|Zgl {T_m~ML嫀丝婪6:$NwȋH+$àΆ)++x+)6%~X3t I_3AB1=DF ',yw)=$claQ`Jfό2 Ao*pgyFM]Ɠ<ʡϮR_p*tL7z;?X!6T4i콰l~JdDP5GW&3rݕ*j*>BKd WM'V^_@^o< ]uZ"o%Ţ`Ŭ d8l%US|TyD+}%YãY)ރcQ#*Āq`fZ0/x@0Q?~c n<3)$>բLmydT>E+ xi_v\)Ґ kUn)XK2sݕcꁂuw0 !<4'Pfd6ɝ Cd;,RR$ xLh 6l|GdeOfn[n-7:ƃ%g+Rr>&.a:,{Y3)ى^bUǚ1I˽?-(nܗE)e#$n^GCW>"!!V:+{hwl)pT7YIx: Bh!?ѐE15}z1+Qͱe~2L47? ]UΈPtCiĩd&[{p$Ƴ(rWAIǯp ᆿZٛO.^% Q*g)pA l:ouvtb lOfμ'ί0BYw*?7 q%)*13~pԷt_VrTW |r|339ЁrwԷ',!dCY;|q<5k)vK +(ǶuNW&]MQ_βdVcw*sRd>XDv\c9C\G8a}@,S};h#;N檻\.hw7oy+$fwr=V2ڴE!i8VdY"fUv&p-̇>.*A] ;y-Q;RWV7gv Ѩsuh>+6\Kfkt>܊T(oqfnWag6%TG[i; Kcg|`˶* Q}d*4.[ZlPgyL(_{bDݦ dgf)ָ Lソb%0@ـ?r;|y)~ew6bǠ&ޛ—/TBYF7ؤ>QD=񢷣4l{[=Q3|@홈ni鯝vl7ir fD°M  ԾRnzyݎLօbWL<5(oU-+Z6 Y.d(i^}?.0H}vn~h%4K3hR6& z‰o:4 wNZeG%اHSdeo 8&=g>=2q8͢"V\'H΅ƛi ;Mk4n`[Ux|˽k= {}1d`VQs}^X3Vm {b0m7MpުrM&}9#0ecL%UuWr" lw֌^]r5f$xH{#ao,{Cp&YpVMB~Ywx:״ N;j=~ *q]w3; z$c:B'd?vXSіnSIHV䀓ړTNb9vVo9U%ZͶbE;X=b',哼q&ԭ9us{r 'c*JH)T&/Y_u TX)r/Z}_%:Hw4#DM\QK$#c;>3{.{I8hGn(*DUUʱebqhG:,̸'\dZψOgݶXtotUZm>%}tH8㟫VmcC(VZr 2}wB]GOHr@6Pz3|Vpss%C4#Ihl?CO_T{ѿ(Ooq 4c]r2rad)-8LS.Nʞ=V]f  "#  G~N.sAoE@5Q=x.+`bA="Ix鵋ߐx(c&Z.-STGwix[3s`5;gO߿ ~x%QvJzq: h'y n uZ5m&ǽ܈Xo 0pe:(LW{XesSO 7pVfӞn,|[:Ci$R\ŝxʲ>Dÿ.Gw;;uc?Mo.k-{|#= 9;flځH(8ֵ1>F <7q"}TZ44chV Y5m4t5)(h:0(Th#fwx-Pʧg6=K^ht[flHEO.YٳQ+Z jW&G7TE[ϴ[&0p<&<ƩjY܈c47u)YQo )5P9[XЀ kGHM]@RA?#NKӵEu8ѕPKgV`aI6γB+bߵꈳG1k.^]#Ϣ,{ 3H-ݎ܉>;\1ɦds"?ގʒ/z Ij3{ؾAT\#[0jX`bl0.vh[S#l7 㭄ɶ\\y鴟ʀuߚ'&8v@ևi^şޮ>)= zg){5ƋbSΨ`>;s99`|%>q!] ljeC&@5`:3#/y홞}IČoNѤO@hVȜ~ncBղ~2gqZ9w׆MڽiCFT^̻LB.1Ys`qBs ym*l2\L瞞g^߾ 7._apS=}ى$iV`! 7V z̴a"ktU{nzU#U;=(%\tx_\f4NH`HbD ՀS;պ$:gD!DVz`:u(qgR]^S uj$͝bZY?iMFN? {#?s==!b 'CXHPl/uըn4-cov/dڻg=5]T:hjtќ=]nelo^&_!Ȭn 1e}e>ct-+L~7nX.lW  A)~9PT϶ WlJr öJX8?/_#'}B8uIzET‡<OGI\yHE sƐn:r|8W=p5P[C3vV̝78f9g+A' |3v(̋=%-D>@HkvW-7nr8?B~BX0yM/:GnVXQ_b-#V}Gɽ{wjy.˼nLvsycGDR UM=.ˌj)j|>D8rj4|=!om='>{ m"#-Qj븉7.pQskI\LX8x[a42d.(V[jtV|q:%n-#,FpO"*vZqbc<=?|lHlN.)Fc[+c V .6D?7 iwdK!o5ܵ`'QΑ[pV+2|lT l)Dv}1)zl9 s4ipNhW aɶ6$<{(2^ཫG@遉C8B[66'<-;<"O) G4gW]Sh;&A_"*Ln^݂C0`S|(`+7Ԃ;ɍa8[ 5l{y=k@]:4/ 4ʋE\b kHkܲBj/C^Ovdá zL8Eϼq4\6Cz5]?[4Δ[A9 qB\Ilwh&2VMy.wv ќOxvxA۱t;Srzz"OrXFeIQ$+q9"؈Qʿ/Ғ4jH i0}d(y0w~h}C ,<9Z>0աAc'mxg %Hˇ֍eM4SSJ3vg]=7k;Q׋rsfxi3NgQr 'bQ#TX}C|gݯ[Z<:2cǬ"0`Bƭd˯+2[97JZ}yR^Fk,:k NqT#XF4\i@3~ 7_їchѺ&=Nֈ"g % & 07@i5C顥Ik^;Kp^yYM›)4] xjwg)ot`DCm!A^/5]1y8CbC\ ~ yoECp2j0^[wD}]HyʝHD/;7BZvCȵbn!_Y;?}51OϮ[!S 0CHCt:`uv`]tRĮC.)UUTSWN{Ye Kn=L*;XW eunw\_Fa%7K iT>/tByl|c@jZJo_[ŝ;qy侇>xXe(ye-˿z0ӭc:˄grέ J'Eu9mUGp 8|S{13Xx])v% Ar+ߔ<ȅ"7(sqCkcW59 &rCŢ])wo;yGиv$uwY_J9zQ :筋|0Xʯ!Sy.ZS(C bD$zpf/(3p]Nv(0/4ne-ĆksĔ7R[*,}EES;Ϸi7#]E$ɅXP;HpzhدYI!*0q֦L,Nʗa'ngp9ʊ۰)b\א|ȾJ \B(M'+|$hg zC;+~E׽N%)ˌ꫐_pg4)w:·N_VpWU+iIk8eG1)P!A;,ʁT ʧQ[Yq2P-&1$|E8t͹uzm*Ot`0%chQ8ɫ^lCV?zd1RD~4pS"!BLǔfs[3trppךÿW_Vk h~vmz^ (/f貦v`8K #bfۇC Gxٮۦ5q4r-V}2Yk X;R&ė?;>82xrRϵDZ,lWZ"y<>QuО'8:="_v0_ _}l=YR }iࣃ21aA]E޾[~V킀{sÕF%؟C\Lx'j؀w;AcWYHX<2^bkN8 %1dJy& 臁6bk <ǶcSαOxccsA<|8hyPsSSF(QdAtEv}V<yhQ1Hr3ycǨs2*x;d6@AcowTn{h/l>[v Dҗ%;pR9KYEE?Ac yjrXHow4|£jk9q,r gvd@X-nU\p i̧ú%S([+pƮ۝c=LݾX4ҼoV1xTJ<8Fy1YCr?32 T¥RrWRPn_onO1|xWK;XOk6z:[yt߱V8POKX:3HE,lX]FĐqڰ‰O2ǟ(GgG#CPP׌DXp|'2@feF[QNz#.LIZ:ذ z+CIi&[F~=:\gQcR9f)He_@5HyMo;1d0oZ]MEMĶN qXpNqV_g56tNs8}8J3,{@%{%;6聦^wa/s?b/FGkJ'鉜hN7Pg7ΤF؊\8P7 fKzy4U}6gKrgL`A597?h㒿?)GT\`*("@;rIݞ7_J%e#.~ΐ T Aׁsa×Lj)xˑx`oOQLX*uǑJuETӢX,?/3k?S!7@ҪVilPE\`+ȫ/0K~3K,]xkZ  TQX,>NW/\RV); |sugʓnRۛSFAog7vǸ[4v|1u1gY^F5 Ok"}TE;^=Xud(2ۈ/yNh@H]l3-qsFƈkLmTBܘK,O㾸2oӨQ pM@'Ad,kk˔Y[{,{gD|ͼh'9$t>.qtxSĥM|WFmh}At-w71ց[*ZuYb+xck/F $ڍV AE(3)o4/Ԋj"TΉ@)R,6orQQڧlEsxud\zؘ+VCY((~na1N](xb^5&3BƇʁiT;J)6sY#4Fr~'`yld\ Ck_@n Ӽ:ki6ǩe+xX LQt9d7xo7jxi g{;;ǽS,*g8{ )bYM_^QH:E:7ɒ,G, 8T "jᙕf"]Zgը^`>E!oZ;$yX%c҂ pTzKPuKf4M4AG?oϲuu!k;0K=+^ѕڸ?Db]H(-GrKbc^P=@TJJQnB\\O6`?^~lAbB^#G]^82I³5k8؀Ij•D ];4A`ܦ|azBY ;sk^)7Դ%LsRrpa>VenUZmKҳ_`4 # xhAu3A[W}c×B{K',Y|il»$!זё ]Mt}/9"4EᄬgvP#[a˪);JAF%00FK xϐ{g+ Ǡm`zjtig)7t[<ƌ,E ;rXj[ n@ EFZfģ/ae &β@+̽;@6C|@8U ;Z?o;Dm0'$ PP6)Z.!cۜڨdG-Wۤ~=nH@r>LDncr7P ov.ŷ/#mb}f'0ɧWW<} LҪ-{w:w8`IVaRWNf~yZX!*sJfCw;2-1%.ew!G gU .GԴJQHW} g,V\jx6kuH/P4Iw!Sx3?ܿbnz>}gS$wuRg\!M쀧pfG`ylshC[ڙ:_v ry1AA`{n!j^s/2[.զUn#zڥ!q8tR_3Sd\6xe[ۖq*~&" } jy!ykY+;} _7Ijp1]:^T:`:{iμ͈:cJEL snLJ4zT?m]rpcT77|,޴_q =Hr_1l2Y80>b{-U6[znY7âoYc V7dQq6d{q#4u^סi‘fR_׎-,M5>q4? ӧؙ\/zyvZ^)7~j'!k2rӺֽQ6xCDk.*PVPz;ҍsCuL+I, hC eQёu5Ƕ/ @k JU`l/ uهi$їTNi\Y#Е,(+iX9lv3CYVu<snf+iŅNK%ycM"7< e'MO/'F5 wT}AHHmfa#+`L{k2C $<4$J Ƥ+{cO6 MvzRTھac[ a UC>X+$[X0W^#W4o\N6\ӎO!C-zG_i26p+1ݕax~mOuzz4hY@n|0qό8'fKrRW rРu$P6Oe|8xj zRO<ʫEY#?7 A컇W'6pZ;rCCA߇K1 /aep+b18ΟroŖ%_A3 5CvG*5ز䪬LN Yja< ~1GV`b#~sZT.)`D$l&te-۪C|`]UL[+~)<5FеtV_1Yj9-C`./qEd8A@6bΒ;)KԜ ` N y^4&aq )6s]q=fї.n#T۵"\]N UtXU|k{^'?]LT;08<[Gԡ1522W&Y_: *OA"Ycn7FqgӪ:^ZGҊm^8gYU#T3[6$ͳM9 Q3$)Mc]l6}oNxtcw8,U2lli<6s-xiH):F+q< IPo`3 GHb[e\pv俎q!#О3fVKZ ] uJ W1;^H~^^_jz5Jjգ9o/Ul4諸K  ~ qh)+wYzVw+*q4D3w(7Gcb^Y -K6pcƉ ƒ#J1d5}bV6Yq}Y8k4;+uZُL%C5uPX,._fTsI=V/H9wgL ĭ[}>&(}op"76Sg]fJ]'W 5 hVۙ{9\r~L]o 6Eq C341k+ |R=℮MXKzm 2͊+s(kzʒrG~o s(s*^>SI't$ ,6>N ۣꀵկ'qaϢxǭZgqV%h'Njz}oq#DIK[cQ$Q^j.σ__ ƈۅǩ/#.kDǼ'\S"O,9  >,]KH(w[sTV݋?`ܶBji60P(Up6]ri $Aߘ2 +dv xu4QےPN*g,b4V⸇`AŃtIsc[3B& ą6d5;¢3ZL0h]A,d<{\;cǼGDGyz+ȁ,3R3Y(_8J ,C㓢4N,u6 i]dֶ(r*ΣJl!u,|1Pp@qxL|8*KT7VYXlǼS7o! OS^xj[~7A3WlW˵0Uޭ'8YhL֓͠q\GsT"H96}'0g=BiJMDF͢L߸S d, C1>zZ{"iFEvec,β[hmV0 &.Rf$"{NeVBZ\nC>o <ԟ8V$?>LR񰙔1IYE͞D h &]zNqAc#nhˆ'Š8Fpf<,K]l3G6!TetBz&Brѯ MvECpІP-f+^٦xMB0` p't7|Nȣ-]| 4$Ւ ~x.K|#VaK-C34 !DpM#@RzDGU3Fy}kun@yVϻՇvbhZCh2,ɯUWq~"֑_z9|׷A^b0SP[Lz.s(bʱt5E%ƃ"/*!ôzÊ@ ).i3 =55t ΈHi{,"A2\5 3f="͝- [v|H"> y~4 HөGG{W(&l6$@a\|Rr2m,`5N)ϥt{-57)01cWk;ϔ$[Gh]0i-sHZp!^%o7cVD9g07"ƖfWŠw clMUg{v6ɧ!2^s*v:Iluk~@vR*ɏĬj%Ѵ"8h I83uomsGν"ro2APXT@zO%+H+cf,m8yA4~.lKʙod~狚’.x[\Z(Ee)zISwur2HlHDMKk3iY(h.wBm^Fm (>_89=zVf,O(_ͺΥ-$7/S*:l8d/X.1ÿj jMʻZ-4,#;V}6\T-'r/j-[RӇVFckjc^URgE-I_R\z f.]jS3-pM{%dD4l{vVS5GHx/9 ˭+U6XWulWcV]>´;+Ҿl@籟"YEXbW7<)/Ż?ʍܓvƃy9# 93)W@n>e"IRPxg%Yg&&WՌG[OEK OϦ3P ݢah.}n榷#h~ 5\?NOJm?A|Zba! 9Wጪ?W{~'=hWPmiOrnNn[*fcʞW]R p2@ao|_5L[.K zp#~Jg1̂ل[΁oʒQg nM0zPc][tE[%q Dʰ&4B*i.#БJ=C:?FP=zr :ăxC]7>4)1O e̶1QqCU ! G8@Hwdʥ)l}N-Z+' 1-xo0Ŕos(k>YgȋeFYd~zp~yO8|#ahh}3I^++kl|2pS v8 E6w}G$6S&Kߩ?Am|@ދ=L36NIβ•u<>,f+|_i YD޻0u-6C*vIq9hX)o7`w|;YieZϏl|[(V,V2L?5iECRwcC$E5U},"h$5[7tmog]ܙ@Il$yΛх?Bdjbn/h{Q 2msjT᭙Чx=>8Y'G+Bf=j7"vS nv8%i8'mk%zfWRv vJut?-1"[<ދtOΘ&Bj,}x! 76_yV?HB2^[Lӝ @]Gf 8&Xy* "=Wu ʹ&,`ԅuѯuIQy'jᙎ/T6_nAlSoA&0!*uYo$oÜ^/2=QtGF"*B8a$7G) ].5 s&{(rhKH!SXzT`,}DNF@:# S1e15vFc~_ NCVl}l`m"\^(=)ϨuAka6Fv6O.]12!zM~L{:OO8L=Uv7}ܫ\_9 e >%3!1tY4VF'C-?(Ц \v%`tpy Zq3[@6oMTx^+>>^~"n:i%E)k_7:,C[RFG{N~>ָchtp# ^t6,Y@mQ=ƕ`c[,7ztO0i;j8[W5wNՃnXVU b6ғN̨??<ą 3;mW\K> ;v3f_߲ ɰg'+)7-SwtXQ$302$MmP+u%l/d#a9ĉl/[K [-3튝A0qJѣ."ˏS6jP,2/lٿ?)[j`AK/xv+>j=3Iu}"&•c+IAWDOhDiJ4$Rm >L+m. gK5\NM,!t yC[ٖٗZʺca'g ?g_9;m̅f tP2!+-X+ϗ!k/Fl h|QdcBߏM:y˰I |-I]>t<0s4A9]tQl.웙];cZN7xO/Q{ɽ+"*-p*'})˄vG-v kDo)]ի=?\ÝAP |IّO;-GIu$k:f?Jp3DKO󸊧LsL34.SI?ar")ns aqbU(t( K&kc`H9,倵#UiMP++1HHUzAa/e(K'>}߄[5D=H'7VeQ)&?;*}0`m5NlHnufOB*I!WVK54e 2CwdӺ %Voe0*J5aWS.-\3ޏiy\n B>PF0΄<'I Wq53xrϪ=,v}:wRЌ8|rǒ3R͇ 2^IJg7;L$zytvmÕVo ASԟpv8pQ?p3Z1R d䦾!"#z}&d|6j&Ge!^ oF2z4jÿ4IݝTWgbsr6Fg{|";Ld]L\orq|<*=M6[wxZWxb(3QepZ#zt}Gr72 ssʆeakAHܐN1!Nḑ{[a*zSiXfzsy1qk {,GiK.).%te{$G ^g YdW^mAY+L96sr^_ٲ=m9ﵠax׷E/r% !V9ae ; ? J`0=,C ԵT7e&Q@|I1%=,sb.#k^R͆Z$AIY)T}HDUnOZ!?_5NXBkh?ɲ]얻*EPD}ͫl9pK RdXB`qe$>BGI2pyl8ݣ~;p )bxPf.8w 6s8w5P(87tƾfWsSs!Y@sSt7`#jzJi.{¯ѽY`/tq8~q IQUʷť9$uʤUShSm2jY.:GD/͒YHͯL|h+w=٠ZwBW y[^R4mh5\G"cFg{-'PPZ&Jw^=丟ُ96&Ҕ\ֵ6OP;(}T%Nt-ģ>LBϔk:px^̜uuGJt=Ȥqu,QE@ĺ4Y4p綂̌\DjJ8p7͖sIP^ųʁ؃?]h cR-SцlSbJgS(2-U[6mvuIQi?X~t]՝ ꀟo=cf;[vHnu&Mۉf af;GI`I>K>%;5\=9xOF!>r_RVΛT{?nЦwJlD򵭰[Ѷn '"Za4V7c)A ynZZw:.Ոlllڟ!21g}i(o{K-\$+XqѲsV\rH7Br|w)=_$[UyDB_/q~N{5_0Н9yBmM/rQQEA|Ew[ڜ'${k[xKoNF{wzuX9}/P Bk> G'3oJRfI I |"'lyhNZ帏.K0LΈ쑑Iz;Q_VU-cLmΐ÷dw6}27o֔fJl<͠-R~t J9?@5c0N&8lg]S>=zٙ"{_5hWDu <LM*3E}&!@l'0cE $#NT< yU6Y7O_E*ST9aMHp`;&\Å] u!q8Rwp5[FLrZ{lCaM!c->pht۔,U /`-ȟ ֵ[Oj|,e) Ua/E6iy"D=%foid>=L[A wk4q"G2(]ޢ"..@h>&շ\R4Lݩ7Q PWW&.1Yw c xv>Ux=˄fb;f]ОjQJDz-NZjۊU}VZVZf0pݜ~lyK0Qk>Wph0_/`V y}I_Ⱥuzd2ZpG[")'e[wjT| Uthɍƀ!R7<#__>1$ ^ӤW&( n-qvu.>1FV(JɒJC`FT}Yצ"R=b[EKCL^Jӯ ٵq\x ZTL ԃ0r0xհ'=8cBܴ%䧴aoJd]$0aBJ0?]]NaQ=2LwR ͓cᚫX5on+M!Wz8!)%lJu't鸮h1?Jx)BH5Pw t$ؚcH*xzN^P֫,)TwRj{ߖ#\?ݍlB%:ks{q\tW Fym=[o?B {{vPN =|[nMm.}+ l@5W$Cs< kGV>7o+llb '¥i} -d?&YQxf=OtgAKZ`3Z 7?ydkIt +$k64ԦVѾj&-`O !T4Q!-%K_=s=98e` S-Yi_Œ VIWyš5lsg}a[ *r]ܢůp=3jّl6E (g~gv-73{k6.Q}:;3`%`C9j4">H̽_sX^pOM]Q'M9rn1&eթxnª7j9|Uo@~b2ՉA9ʘe2* Q!u!)jy{$a+okʀG L8QB2e???e:m_q*9^4 s$aG.EBOb^]i^':0Qg{*vnbs3}K qf;tA%/~eiy:`rarJIzYڬiކ _#wS @Wvm3cΎD|A]9Hέ"[V@Wa<~>#JtUw ˌESJ?mKM#Din2aa}{?~P4* gwuviMc6*mY$ԃ$OQMPYG%snT,MP+ x`T_vj7#.SQ/ﰎ~UsY{kq uwmo@ n*&CԠ+dtE9^:%\+I(SJy' 1BիUp\He_1TܑuA\OIܬP+F_ }xmGlOՅ1KSXv|^~+f^5LJMG0wJ h22]ݷ>$з%nEҽ\!_$_'߼h_7b={/xS8%H\Tb ib՗;Yf:n gwPI:9q*,-Wd,C H 9 yg%z" }͔BZWd]st?&{0Tم9y{Kl4)qV0ςz~|6ʂiէăTRZU@Eܡe@@/$m[s7韽!/bJc98d]<6v_cD$rӝ+dwܬ2bDj²3sZ ֕Wxct󐀧+a5io )M+sz$OR[1uc¶x'6b8xBe*w&kD](Һ/9TއNB ¦"ޝZL&7pJZOѫbil-iU wUO#N xF1u\<~tF(p-fh{\1;JUroʸ.*rh- KI-j>{DPE/h\Kv37RWk[8ef\7?v)yLz{bB [)UEԺ gdv$F` )/f~/uX:9\I}[~l#$V6ly\_L1AvR[k]J >εE{ CP{Fq'joHzz,cۙ(FM?K61?\&A-I}8 \ً'Kfpw@nXZ&Qj,`:BSAJDn2iGJ\%~#TCikv O ΩJې UJ/O#Q٣Y#EgWx:FW vQ]Q˒Do5ΦĺI!ѻ]>.㊠طTb`Q\\$5N&XѬ=+ET}V;$x@uK" 9w)f#ĭ` ru쏮lbh\Rdv 2Օ!}>Qf )U굆aXAU)mXRFW#<2ܯ]5vC#x' t^WYES0/mc^m>@OICl9[sG>pܱߍԠ'.vhZPai fSjܷ>ONEr(>mLNF}wn`Ygu9 a!4Y˜ S: @+ׅ"]O\ûal=M_3:F}h" jEٕI],:R/3mz]?N2QJx}z 7PxǍ[ u93r%.T̚ܯ;\U hxeAAFr.ؽ>|,JBSt qm̈H9 WF&&1F o*[{4Y_%|tM rhwKmC뾒 %/$ݥQ뱻AғZ3.} L~AKrV~Y_qj3 YUeyʴ&x>eXKݒ gƪ~WW ztW?N^H<_ęM9?0ҟvpJk6Ybr'CypxN6Y24LjhRAeRæH:$8/Vtg9FX,LQٗyw,-:<OLIo[MFKaј\)\2ZbAIDaKFbb {0hSm~Ffc1K۰XN2׾Wj6G2dI,?ƋGL[=WaN@+mS_Miy@ |,bݒ"r ڕUXuέ`!YaO|;F) EFr =qWFzF*Z4 cz~ NUG5:[E91y)+6N230~]|Vڐmp3Ra b(~vnև׬/Řmg rU1Hz&V 蔢bx.*v:U u>^ Ҿ]L5QhelV^3/R9z/zFV!sܪg]/51|@X-a`蓤aWi I`tx+ PbWhvnwr|<ǩ`Q@)JatĻVS#q6eT>8B2LLa>=.RekWgJ&g_.I&M$|ht~)4%H'OA5IyV*+r8JGo걍͜wi4q\`T*͵Ĝxw񴊻ݱf {]&c#SwQXpӸC){6nuFbXaF;~+rsi)2Wr ,LQFMN5A4[pRk!3G5WW n[$}EaM" c >L#7!5|H%Ds,㓟ǥ!'(!H"ft-RK*?#Kigf~%IOu,Ős!%<-nn0Hâ>"fٔk_3m1!d11A(].9HA9 dۂ~ZR">vBpe>k5_9ÂƏ׊F,霡t7e<V\ȯ.˟dn Lwm3Hv`ە2e?؟}Kq&:K;D?F~P (`Qi&!(I h4vBe cnucR}pIP֠Wyu4K ʆƼy>)2nzdF~5&ydfѺdԓsjʭ0W(~>ȝ~,ۏ4!/-7f/jDU[ h#+9㾉u5_mWo|,cU&i0|3com3 ,̵ J ITtrؔ'@7HNq[}N-ƜU^&̏ņV BHԩd/ƏV?6YM k-=,R'ùB=JD_3'8igvy֛H8^=pY)NQ .c5^.UZ,CE:4# SN·2ur tTB}LưEMYiSJո>MLܑ v/r60[‰7^Zm(&[$&sIkeD |Q\3*)7r3Ē]udǽNGbcx5By8tZ{(>& *-Gqp]%%za[Puy`EpysC7{Y*j=pxl]xm/rz`"f-8[:kF5#3W5"X4]`e,#St8+yw /i%7L\b*Ay ]>1WF$w1Kb5-;+p}cAv dlH w 3=kLeUhZT\gD[49/8 0sqs )J?נ7<7=<\r'hӽigّݥ?'vNJK7|LP+f"w7iҎ(:g0nc\Z1Fa$E0Յ E-X6<Ν$U'èaz%r~ǵKnM zUUQ ._w^i3^'~eԎ\fpHvN:<_2 hA4۲e>/uG { 0("-$:0yZ5F"N):}I?QUKOKjCbV b-#*!F}1,k!KANիH;?"ht-JA}{RZ [w=ϥɵTpE3RrR8TT牿z NL!m 4d}',J3b9Q[ha4uxaB|URjƨCL|S#_7iJ>`d7R6fG3ocfvq \}uJl@$RN$8LR$D%s)] o 9aCKKnQmӬ? ,zfٿrBbxp٢f8O]J4h|_V8ͦ2sv=07s䡰b9([3pSϐļ0e*P9c5us-#MkAA/߲&J5â}n;&HN{'K@bV:Il{2i@!E5 7;^@%fbZ(GgyH+iA.n MhF*G7s~D\DО~?M_lfmxCv c}%xEY=ۭ l/+(*cn0;Y)1*U^pqeuދ{eml/%x\iOmZ G8 |Un/q&۞MbrTwsDLR*yHWiq-Xl2-U]8u+YŨhK\*5,WRsz#ˎ-Z)1H>w^cD`Is7M8cvsXWjgz*~a&\SzgECnD@GAT<ێ#;s9*G{86c?X MgN*RZGz| ;fHd,sǣn2Vgdj"&i (voAOÙ;Ip.xYp{My6v'U&KӉs7L9++g۽qe0e͑8;W:-z,yq[eRhYSU~Pjziw傼Z(BN_5Qqf"f<GݹKu5XeJ9Eh!_a*k|!^-ުtԁ]heH]C JjK+s'UVc[t_ݖX7w\v_˒h /±6-R;ljI852Vh} chTC6 iJ27a5yͤγւIA􄂈)ۋU1cЎ[=i/ݗ ? $9° IzHvt\.qg~u3: ,)%Ig`I~  ܥñ{W9zͨTpG)&YKCoOyy7òw {^9TiBw=* ]@hR!N"*|Fe$V!`ڝ,ͱO8yLm*f `5 J 9qhڐeazhueԣajcB;35}TeX:t3{.:r;}jL&"u'vLٗZLyg\(KeTQ}HIGO+FM'b>\2M4ٵt1@q]x+ye$޴}PKgt K I$'|s_cP-(~LV,u۾V|ωr4DJO.% !2^ջ~,qv{luRmGH+icП ga3 ~S%S*7b҃ *<5VA U{Eٜ,m~dPڧ+^A#iy6qbUUeEH!(ZnZm2-"nߝJ&{dMʤ>`|!3pLZCJ-_@HXш(-'b!j g5n^j>!}p֙Xu2j2t;E3RJU'iZYQuZe_n7&nv%pmhj1bpQW@; |[.%hzr1Wzheo9 Ŀ<.,\, ]?!t9 =ٕC;t XC9Zg[F)eЯVaI#<>/N9[pFZuIn[Bӧ>;4""˙:&R!zPPJUPz7:;(4lnI;Ҍ0B#u͚ZY[u?Pf@(ݠhn\C*T)\6+IL.М G2pIV0ЄU۬xk!&Lmֆ{р"t>C^Wǐz]c!?Ѧ TћKi]Zqˣl/3|S1RO~ī[5&!uYXYwڢ8/`s1({ HxbêɽLK DvTB0 K,Ą|41u<%0oMբx]ѹs2Gf_i,/t|y\mǺ?6F \B VJd{XVp=&*f:JoɒYyh 4`W3Qw؂g(dX4kD=gmC~ u [#!|("mIA?F`M]|&/k\ɯiʊcYiDӿ$SVqj40b͔e"E-˃e9?8}|qB094W g;s¤TdDM*SdeLW۩>2: LѻL@YGlHݲ9=o03і4`F &sO]%1HG.bG ܺlLmD_x2}T3)D/+PaX҂31bL 2-5Jd4&TMODߺ1Ѳ3 &,[ teVS(p{[1<1\qAؚ9`rgbUk$2Q`IhfUS:C 9af 'B^#;yƘUVJ)=ttNOe=UtASyo(Z!@[%!8Lj()NwzL .xĒe(2-c-]).҈>_^^cq: d[ 2(NC?еu_ڊ g1'ڊḑ WhL`;RoFbh c& /f/T)*spm[V&o!nKRW՗kF[p"8xu+ x)ܽU>%^U^Ol/b!uƉHXpk?R&w(( LmlUwA1iGKU.]]uL 5'q?.teEW,ܹ&dq6 (H'Vv\v5~ NZoNORW}/ NQ9?#Mb-Gқ%z9)&_}A|CvPryRHPDH2Z;/ ƙ҂^m41sX%JqsO1ڛb|WK+bS &}>69p2XܧLxVj_GE+ p3tVBԘOXO[]zxdhܡc>]ʳi"/j|q|+!ӵ%vg!VXmXNd;.ZxKIƂ(ЙDuͦmk8=U vi_U-WvLB!!OYaϡWG-tLy)r+帞4# ]2Y~h5F#$ʺH<._W7bwI:h6zҏ){TTGjW2[.l0v=q٪pD YWC9K0JnQ1)_e3w4>Vuvg[ 倨}jAC liS ؟F+)(4FLe,}64'Ih([ gӛֿ /zY>kZw6[f>*"#x}&u#3Fo|4}K`cQS[V$Fk+)n1 @! O95j1tw=J5Z9 Ip0!9j I:A2p }2`:x7jtvիU{u״Y&w S× ȉmƚ;_c4LKP5*VCiu܃,a :S/ȲlS{0lE~(1Ѵ)'4Vr(|I;" nk}c4u 7=?kOo+u+핬4$JDăKaiwUC }Fv{uJJ/͊I+ch8`ĵVkݩvpn! ro%O)ޡ,*'Z'vְu\y~eL%1 z0{s`st'ذk*s!m֚9 WU<F`Z9];F\%mwuNm,)HGyǿwo⌸}쬐b9`Y[_ӡkFhYx'7{齨g$QqP7Fm/kސ^Z}RM@W^%<ݺu4U'l`9t4%tx;ޟ?<ˇbPQܹjM{";N=lړxEJ#%cq+ӂypih|><[zLGdjgnx-7\Kah;zc'X|Â}UySTi9z&rzYU|SL@$+*׵iXG[Kn}$V 0CrAi8D%|~*%rR`h|7_17(E ejhI$䣪^Ŕ68AU&1I 6ɠӣ  x0XndNS^3X75 ݩrd1xv6ܷtm; ؽ̙ٗT.=8O*p # Z^U*I(pk$|QNᦑX,+cx r4% 6,&3~X,kmo7cu>\X= +7,oONHFx8<:'׸K㛊&6Vk8sDAHLMOd\u ӅsbƢw E$X2 }>!ٿN4[Q`.-9)hQg$^gw8-.c=b? +*z.^+{zC̬T`כOwN܌~tn\fڏpoZvGQY$fY?A!d іG1(ذ goa$M>66fn8t 8JX Vubϔ1 fwXCWQZ2cpŽu;Nq܆% * z,)Cgmdk*2cEU`AwԺfK}} HU`ӳM=Vku:(z^_WRT̤yl05g8-^h^c}oPO8C<,3.GNZI- &bb!I3UC.x8Myp"8LQ] vsȦ}s j>4fZ*l.ө(؎Q3ɀkq V'E`IL#fu ӯ _,S^2ʶթ=4c/`ҼrX?)_əy!'M62Y'llhfiUm zrs)h : 9FfhbM3XуuqO |LU},A ^+51gV]ʙ^+;_Hh+9g`P*b O" )GaG)W6unc*?-Hl=#F,RU?rv`3칷PIHws{qI#u`1bI{I;k$BÄZR#& ŧ€Ү6})ލ9{XD',؄U@{g & z5TAX1hwƅ炥Wf9\+blI"KE1jtlymyjQtelŸ1V^\⸔nm͎wRD y^:L ߶B"kY/6ƌqnKnݺnY%~[sCAN&[vDF}cDƸî3 2YTVGN䩊PP3oq:]riƭ"mHfO#_w_/13`6XfwVh9H]Dgrh "Lo |}6[d+_ڹVXZ|:).0ݶӆC3rI[wze ;^ks2\+!GW>N.p&.$oqv (;{7um`'IeKo;  ){JӥP۝^w* klꂼf;)BJPѾۼߡg>H .<_a`"qv&ѨnF}4{۶.e7[X<~[`qNjj5>/ ӎ_x,t={Zvun孈 Pww}?:HIzߤk$IC))v#>⡜q#_m;lZlGRN^zv{8[H|D{[۴^x/櫋^sO?$4%^1ce(k`=x OLD7/A`tv7>͎EjraڛfsAhs9{t`Sqwsz" peZK#q$FZf5^E^^ft5 b/=H[Ӎ`%djcD>y M&d Onĥp0rm鏀H-$wl\ "xi>ooZ#6"[|< _ӣb ‘cb'z (kZN>GjR鉶d>orԃF_S@Fn]hW,!Zib/DDs*s&>SuQ;hwy:<`e5h֧gW[É, %knm4>q6Rbi /+"5K$w*;)?3XVKֈ2&5'ʭYZ  =z+UWwb tN6ZWO#b֤B KsbMvԏ/rդ S^qjoɸ Ĝ ^݁0"I:j/-%'!Ho%E{ fWrE" Fsc'uTDGKYD? қMjpBZ| @BPl] }Ti̍qj\tgoGĠ&X#=%RH&nDeHG 16 ht/3!c5lR9C^sGWs8ncnԔ š0ܥ{Om-* 0h>[\4wmOtqSb[hUhӺG0h)6۬7Ԡ03 p>NWnz|>gQ4f- R'Kp! b뭳܊m&/bCwkjm:ϻ_G b3&O)"O1RZՇ1 =TQ]sv˫JVT'ʈ\FJʉTf4z,, h|SÌW +/m\i4EH$/7% w9dE(`.ev [ҢvgDg~+{"rR;f#UaZ0;%xĔy*V[w ֲm)عq~3UnpVu_cv}YFDРQV:ko AE% >oq|O6#h&٧sі #[:I.L&D#^QmzF͑; s[56huϹ74[;7-ܽάڴwgLRX&"ۈn  l+ږ­W?s_,BnI)ECF SܹU.m ݟq6A.=e-!Ƅ*bŲzՠ R-n^I g~n^1pΝSeǮ#P&!~խmJi0#w:7n>4rϯ[Yoo:2}@:x(򡢿TgyZvr{fAؔ>d湎a'M/5W}t>/o"lo꨺#41Aւ qVIU~X'ݎHN >&Wfܓ2uwƝ5Zgz&:o}qPTҾn~'-iަD>CW.m^ rκx'nTWk5I,WS:ٺJّ]u"؝Dh*Vw_أO*yK/Vlˆ}Yq A̞81\v? SRe?l|tjs<$z,`&[6sH?.YQwI5[ݥA_ڔdyV3׵ޚޣr"jZ8v޹ `Fpmk{]BeZey:nWy?,h tˁدLH<=3 a΋fiZJ)]_/` fּ#>O%poy:|نja@|bVLRgCL-ӧDS]XZjrG̠CRU/ h妠S'%_o1 䡂Ex9&{yh\zv.&1߈M4X{sTS Qbh)K1iVOA?!UvC2p1_䠫M;v%Ssh5j Ɍ9W ZZMOWo;*R|CU>)\ iWfB`lb;!D*pz&zS"Uz..PTGF[&=)gw\+e W L~ߏUCb˖K ڳĨ>lΡ*Ƈ;$;vf걮)q#[5K>U޶\뵨x]]K<)樹StEy"h^TkR޲ I.'U>| Genӻƶ`q6J*{j3i]=wi\H pW9hp%zj8)Ĺ"+5>\ 6@#od;L6<Ǚ qH/I56Czl7xjDǙޡ: Ē׏(5HrbۏLϺ([*uoĀߍ3QK;c]'hnnMniCD0i&6Rx]~Q)tU?Um:: V)47^q'Ի?W!+䩬Zjyug_,g2~;`Ge:9Y_dC.I}LK`cuR[eG^+p%X14Vx I{(y̆뾬{{xѾ/V$ 06Slwy@/t}k1*[\U+hD18ߐ8^2,슠<019[9fԛqGW7O?>A= wD456>!+##CL㫫UTS4W6<2XKL_f?&wd֍M%Gda^B76n_B%~;QBA$ŠuS}wΌF`i߫L'R8ճڄSǥo+]<=B(jHI,T2FZYWKADQ+zM!Ô4plv4>Kx൅+\U K2 ^C>hcP8{og!22Uޭ[=`Q>N77ts>qHo/zVXfVp*_Ct_kP/|O!ͦhoq!͉x|Rw21$>WRy =f d!8cm48C&<*ZmN'OjU{a8Ø{(춮φMuuu(ف{MFęeF+iәzx3KSNzJJRrijfW2/z67N(=-F|0 o&Bv ٰu5RfkP64 OmCd{kSe MpYhG6:/b{EQ"|.m%46]ve=f,3wodl[dL"Q#D$\Dmj]L:1||Rކӥ_iH1kn$XxG@Fnxf=LCRSxN) B>Y,7l cC(6qu;?ei(6j怰ԍfSazgV?~i.P}3z/Bt\eE9L9J4M>ScG9*>ԇk (άj߻1US[ .H=c!#gep8|>/UƓQee0-rɶ% ވi3±^}G_w.m;`)khٚQ"F5+拴sk1:,VY!KxLGt<[WpbNrrEUM@FaWuh߮=rP2&0.-|/~lxQOs| ͻ?oƘ]e!ih'>Eu0e4L#JP{+vRqp7?VPu%QamiZHk]S^z`nJ% 96\0z'#n]|04&3[{^[Ke+uĶݢ"~تَBc32V1XvѤl9(.9O%DOZrUmIr LwWܯЪ+5l8uSķmqjx~-v`7|p,$,FH]L ϶`+vk̢k5䒇t67/.w>>xKGM쳭6ޝUߺ94\t 'fdv ~bl͗ĤO[A}p̈F"lL2<[>t\{]q%La2TpBj*e+Xm貽glsZ *;(qvZ?Q<߆7:| L$Jg'+ E pbOحl,oh8" ȍ^℥*r(bO JfV a/ݲ|Am1+i]=M18/\ZG~Y\[dFMS@5b0 y:T9L%UmpY?eƌ׆+ɳᘎ1nE I!))#ڞNkzKu2*5,{S8zNUfɔ闡6I2__bDxb 3M ('#ү=WՕTn8TQ;*]ǓNBKX͞: u \#!V,6RKFn qT_f|?BK7L9!y{!zo1>7tlDy*qZ&zBʡ84"ˋڭ˒->̺E>Fy.%6n?oIx ޲[M <Y1Y@Ǥmɫ=W*xòAb_T[9LCuĵlo'` G]NSH(<=WdTBd%SUՇk: Yt$*eu\LtiҨ`NS@}abjUc쳷 mI&NBY"R0<8aM^6v$G=0n{+H_UڕEM&gJjZeK|t>ez n{TƱyjpiFPO*0u9s h"a#V)Xnnja0R)(i;f'c;l1ɮɋ;l 2h%a &G-08VFelhs]dM< U7y&gÜPt|1yQϐ1w߼jV QGOKz B)KW@5 vkx5LAOF(c໚vtWa|ۧ K cgP GxT@ZtH&4>a$Y C^<+9-Hx)o>'nRJ]$V^aVj0cMh2o XޒҖd!\ɱ zJH-Z//w)3Rsj Jt<<&9|@c8ft )b;_ A%̋bl$9ȟE6mTM;~q]bZ Cz6kMYf6Ip=1 IzwG#` ehoab&- ѭX 6kuc{!F·p_.!"#~kѿhw_2/ot+ؤ`* -r=I{;ayvnn8* eKcB,5MHc py孲WQW8S"=mpΉ1dXn`5)O}x+K^n,h"ieRFc>a?m}˲)b9ȣiho8E[VRXLS]KSc1%6nCy.gxr)7^r%C˴LOE7MG!*:g7HVVDNc-S :Nۉ7{Dp|!TcC1"Ȼ(p#DuƢl "?lšY3XbB*ȝ0s/M'.'zo[ &K| O4,:o]Atx% ߣ!l )#gڮy@mq@|X^|6Ș2ts =%x$VRj5xP(tqKv{ @w6dm70\r'R$i۪z1r~"Cq:FeBq˼\ ceˉ`wiIãfqa`;~$ԗ;efc2M/͝_ 3WME&FzBm# /CWYH֫f>dQD +$dM m6`yhTZ|_6@/|2Xx;=z.MmeD4[[WH%e;T#[Y<'Kl0)}˰P6}04]$xo+&ЌpgO9ڤї ^U_2]!肰crRL[Q>2-tSVCϬKFa|K m\@V ^$ N*ә@m_sIR'ѫoy7tU N-=ا0ue HFMJ\ȤZ龀FXq΢APH8,[US)zD漦"3 ӢR*'?$5YӦMޠ *a@lIFvjRq tmΙd%WWg#LltB8vgaO6|kP-9 Rw&=q9Wb 5V$9 ÚLq8xz}C/\/WA *ٝ%l!]5?* t]l4"]{- $3N3GYKZZΫ iAT6&S!3A 7U%X"0ܹ6dѩEW2=+G>K.8>En6L zQY 0,kHCp\1 Aw+He,KLA}ƃ_ -?b߆ˆgQ?">/]EеA{KUd<ӌ:inSDN,>l]Qd%uRcS.ԷeIuBOE#<$i#RJVc> ny(ToѾ~'eJW@O;u'N)ͯn2D~|-c !xD?a"lԯvs0: ]2z޵MesG 4)82>eDlyJp(ex1:F8[3İg,گpGHsw>,t CuC0J.p+h SntGrچ܌naZZT&ή|4sExz~46hy=J'Y]kh':Tz~l*LU4:c{e\5YβVRC8UuV%AٟǤpJ1OJxs\cWXg:JN K>`扩m[KzjjgIF^Oy}Mj(:&Y}!CIդ O8\a]Od Ϯ21ώ_1J|oPݬuzG!4 ] g3Nj iZ&|>II./$`ܒ /$v7phגل)r=Im.Դ &ʑ\܆^kr+YoQJNG#9kݱN"?^$YrF{E8:Mrh>c?w|3_u z#?fIL4= 5Bvt{0⹕g*5=^l*ؒV4lܥz~|=ٜ"wVRBUhn{{2UѮӒGm&&R(åkAӢ+i^p, fUXv3p?J Pg|`4AMZu$;vG 6=ojXOzݺfكfW2drԺEv}D dP:F< ?ҹ%(LRʥ}%A>2-Dl|t 7Dfi-KZ;~&im>;賡݂ig~ 07\I[B0#s H]ch'3*ҺB^t2X'$J8#K4eS`ߚMΒe4% jm$Xɘφp޲/ @,Covolc>*S0jIEA]}XRt|-/3i{5η h.HvBQav k38_X*>k8{PupC4?щ6XEBv(E YjVF&C,\\9['Iκz'5 V盇q>YDX^+IyH! ¸_ . =A6;M T }p jH39F^?mU ٍ9!*Z?`ӛ/02Dд֌Ѧ/6^1?0(LX߬ψvccQ S,frYiYż:jn"T)ոAr NĺG4dd% 򡯚u68 lsʳ*(@Ҝ~u|/rkbUr/4NݣiA?hؔ􏿲M0W)".2 ֫'\w7Jxl`EYʺ=lg٦,i}=#@mb6tL~ pu\ZQ7fw'>s 1fs5"WV\Xury[F*3='z݁~{(%:~^RTޞ9SC ؇!y; H4+Tz[I`7f4KH夆Y7cCT\|'}$'++"%*c7^eD]Ĝ )m\ ~iwn4FFq(FGg$FO3ОAy)(C6@(=xЙ֨īj\)ytj$]oYw}63;MaAatFjehCnh["|t9Uf̬g@T!?r|6iƃ.Liݪ-Bcu;~%GuVq*բzǭ8,l`iN&φVcD+ א/wɧY,ơL/Qcop1+%lNb3A6C4"x<>әޱ_nj~wq'+"e]oIGv$y|z3>s|a*^Ѯd+1YC7i? j/mִAWC'+;*Ͱouٍ-h||ynM2Z1=v㼅^-byh ȗYE~,fb';s/h%1s1fyLRc^aXoY}iEC P(Xɵ\VIuFdjQ'K&GH/J8(38(- ;%|QK&1o ¢@g}s{LF`RLRWb]] ~oa$dm"ymK.EgKqdW{HqHr&1<q-'ic7$ yDC儴0Azwlwh2Vy^Z(3d;_ x +6dc8!lsai)V"1W[3#$x.CUn77= Gٿ\p6uŪ!ަ}~-O\c]7^XBMT7r{j kl6@6.Mͽ U$<:hY^ .aKrtZʯ'ŧ1q^ωщ,A7CcT p8-DS[8Y D糧tc3plC7R)CO\+.-M9tUEcw%K^1bW܋Ra3+$ݵەp@׵XlpodhT4o2%:'3^]@}J]VY˽y(];%zo!asy>u$+,(X`Y0raBޜi'yFLt; :0䎃6lp:Dt~~\RG7V9ftp".MLN^w!dr?fY )8۹Zy?M\_?|Q "a< 8F\SBciG%((7Zz`@f~iG^W'[r[&uU%i M"R%l?6[- *Ug 9hg~Ȃ=DyJȬCau˝A|wcW&qkAs)a$`\Mֽ#~}IXF֓tL0'/ 4vt Z@11*.-|GN~/O~g3XM(h}uI35|l:fRY k$أ=p_ x=]mL;5,YR% w Aa\g7@[iw!sVű<,l^"늖￀*ԝ}+fUl3ฒsF?Ѐ!Tu%muNiIy=?zDddkAیL Η`v {TuXmK݂ȟ@:P9ȄY% GvzgN6\I3 =<| mDvED*kNV->}zk`I6׷F 6Yրٖ"Ȩϥe=}a`e;Ҧ\6 P<}M! eYz 2?Z;A1D]cc^,qh֭DET75|ٷ3́{/@)le~v~mI-8\ JSctC܀2Y"-(e)AX,IaI0jVVc}M_++l5UL۩ KR.-A̶QB0H7 @rA,qOM(G>T]gAdzG{Na1acӯ\] E[!Ez\ePߠKuL&q%5nsQ#zFxSϹ!Xw cQn䕆@CKHK['7 n;v)bq~qUʀIAzw:Jt(.H*#gGE@Nv<M@1hJy^ve1y^^93"I[b[͜6k|N'AF~|wJy>o@M(xmY? xMIy{۱ؤ^ Tmʠ*<XE>AX6 )-WpCpPl@h2:,`Z&"s/o`=,t,t()Sx,h?4[׾;UD0|A?oFqP'v#,4< X2p5aN1 ~ET5vR p|q}HOVfٕhEBHCQ\ƅglt@iMXsxq*Z;' h[UOKX&% 11L Z%L/K2Ȕr Ί۷CW.7Y!'l3nP0U{ϊ(}Ā3b\&_+qRQ7JJLVARE߳$]g +mjLj3?';9yuZ+on-!.ތIsϊޒ!~3F|Dv.F[eym5 ܚ˥iiQvQ W(gwG Ö́22k=%Sߏ$? ;]Q+OmkmD-'3 &(ґ. TPĠ[9"=fucWsD/a]ǁ׊h2?dhf;¸57^OV3Q,椈g=IvKJ(0dYq.rr>;1g35^P%nyr UiS dK4-#p}[dĭd?q75q`)y} qX AQaK\W'Kj5Ӱ] 1I[dċW Pɽ55GQ(oܹ6q'sBln{*XrhQV}]rhөl(Zfq6W-O紇EwQ&D^W?esNWHd4D<|QaÚw>;yl_fH'J669IJbĽU8/ZR,Y8塡.碧rHI΀A<Z &wҴc'Lpz4}E7W&Myҍ;?F[x<fƸ_Ұ2 ({znp@BR s֦tf'E#|mfA`4:z,D$;`J'"FA2Ġ̃j*jUZiC#U|9$;i>ރ"c>Eh!ȳ?]S>⸒k\E9>('[2; |0\![+1w!W>;*X'qyu7B` /)֣?3%Ek@t3Xi#JlCE_j&"nyqh-frԂl9$Z@6YEz\֋|䡘NW?e]ǵ ~`qY%p[3Yx]~*͜;*@)s>S'7rcc9Һ,qrc*<=LK%zdLA8-Gӟ Ȝ u؜(U}s xqڒm4gI`}Yn,pL$I\f6a!9*nPC[vB֢<]QVu%>j/! 8c*BD0{^502(7@k7 ]@)&a<{ތ cg1U(ֽ4~Q^λEd8| %FTַ͍?KN.n y 02פ &0Þ$!˯-ttVnJ] 572"bL.>Y_G\fTR?#]%:Kntf~gqЧ"o;z+l>#)O ҼO.h:m1ǭ".ίiЧpXLf7?' ۖUB^,Q%ҞKJ\:Ku)]x.Xx3?z(A:t;r2^cw 23ف,FBkS!Tӯ[cnq}G׽9 i 9lAXD+Ztez$`3됴#SLXPX`.ΫH67^хgKV!knmT+0m?6h pN>CY֝jՖ,pC& Ob o#֟Łl܉O/h\<♴MxztQhja~%v:Ődx,lռ柮Al*AOJXۻKf̎RdȮcmZuTkf2xQdy3n.Cֈ?U΁h͋WfeP`1*$R'CpjjFm'sL $ 1 %@fbu96;{VD5 bFA: q&c9@@!'˅}] &p-=b>îǏ!̇X=_rnj3V0  0͢\).c+Cy{ˠ}vgیG53(+ P-?pyOl2Y3^Fռ/#UsdYO6UB\wU'EUVsT3f tEniJB@ަ v`),טjIƃM*HVf F86nr*LcRR1=}V\!ImU$l)7ݹ6 KԚBMagڮUXݒ:('1 @.%1u t;IvP0iї uKVsF?]H=m[g8ƄiH&4Wp41ipd.u9?asW5e2}%jB5Ǽv%8j2Nhq*j}GV4KKZ۠H(!J 33ч)IOk'%7~(Q02eY ij;AlZʱ ;M;7Sƶڇq(}v''A݂v7+70([!U0I =%C;+ '/,N;{'`$7ijDip{SݨsaV;=vju9yT)$U\ ) q#V;F\92"y1%q A;08"u&D:A¶tEچ+dBh\gwN6<!dìiZw:`%oɇinf?6;l# ^:(5ebYU@n/Jic~e+7^@b C)V)xtP?y$ߊr+,`k6ZKI5uSbbC&PCK5WGbeLSup'_`=]^N12{;{ {hm"%+"tSz~r:1sfޔ-{jF ӥ,'u\%5N3~ ӭ_NdǎYҶ%fhL7Zʻ#޽zSnv~PaZ6ri6zGWQ]׃FgoМwShTu.vF0픾6:t3t[r)RMPXXW{=B'9^U6:V`rWeiNb_ m_[i3K;g^q;l==6ո.ɷ,`g3ʔ_Nl$0 eM3Jw:U=IRi6K6-[Rl0Pd8FZ=ͧ4K3CkEG{344EOs-6(9>Sn~0"qr5xvTПBV9AQs)=;*> [V\]X™Xڻ D^}Ose^hsQknD /ނ*Yit8p,[(De#S߂t ԓ;M/C+CHP-Ku-B{8!fo1?w <4_^rܓǼevDY9yd/ܓvd .^N9C-~]uSV-T6K QH%;z6݌JbBm[)R]{f]`_[Pu)7?j;/ǵ~LG*X:ގlI6?2NI;HPHҽVq{nlIY}ϯ{ )2pSmCVfހ KxӔnoӧ84,\WD1Hqېo#3,lw͍v9ô+``&|iXQsuwNi\a1*M@grҊ3i8PMc2 ynn߻.YaJWP+A PwJ>=ˊD<4筶+aUh?cB^d nQ"'@D^\&{B[z7 57rV2r>f!>y>gOJs_ {L &n{Bs:êtMRݷ쌔g9ڤ?P\JwJvxTc2Ll$Ah2JA{81.)W&6:­=tU)If`lu{2,s\nhMJТ,[~WG92Eq['G*Nv< "tYDO0Ǝu!+H3n}QG.5^VcV\IQMe5~ f|u^Ţ)q"ȟ%Ʈy-ZO߲B'V'ֲ,]ofJC"mް\/$AXV6hot*p)5w}ˬҐ9@ܫ EŶ X/Gx @s ]n2Pv#քrdh_@'[Jj/ e~Ul՜v|7 {V}ow5K;]u-u]Rxj8I"@5 uJR2+sW&HCB͚3" ZTe1卽IAI-EXEfWvgF!IZИˠw7L,oIp7YIQ(uHVo 1\s*U '(JD}\W^}Pbp_S9(MJ lCcHrIn,Oβ6#zl ⴝ9O,K!EIF#*Qw*~`H.u)8  \?Mt_nؑ'}i@7:vXAF13B6iᅣpOѦrӭHh%'ʏ兘(C'X,Bb^sq%&&0Wz2|dWB.agdLe{:k1x ]6ڃMV]W3{[R1SW"4)ֵo݂{<v y͊ `PjWޗFŇd1jq2$0]n0鬰9h9u,u>d Dl_ҞaHo HiL WhR#>fX5*z:Bu!E lDž6ZeIt;ϸ;Y$F22w$x>еpO! KX۰eBEWuޱ?`-W; ]&qfh))9Ͳ>7 =sBu&[ H>bU~6!<*2BM5r:וnj@IxpdI+j[xYjD vB7آ{]gɄR7vL>f7k*4c#fⷠ'p,v'rSWѮ{z !F_}B7K`Nh:GX#lۄ.=;[!8}o>#z&\e+*W 1Si.gj艘X~FOM>w C7(TQ%G\Upli^W>1ZOETFf1Uש1 FF{,2R02*uhH!;1 _>0!m+۶_p*1*,oq} ݟ @s Xteso!2 LeFsxn@A!M=W_[1,hG1g_4r6NA.{!s,j>^3EZYe4uĩWq-SAf|D\z+ ؃-ʕ\Fu6BoʼF3۫r{c!:)t'LJh5o+eI=-fYݯQ!ߩ {.t<츚tXw-1sy֑1n٘}62ںmy* %#9Lݭ8>Rc)yHN,tG,i14~ BС`Ã}}ɮmv o]w,okk>VaWyH"g쏫|]5ڜ3a.J(!]@W^qfQ{uŤ4j#3F'BƬ13IA;-" aȫe(,Ni}XB'o%@;0Nۂ/^P5+]KxnЬd^If뀌)&*e`br㫰YHl}FSNqzsw&W_~uOHg~Ο.AzڣYgKpHۺH"sv:t^9sM鎪(E։\" p"0z8{ pS\K`(.o,@vlG{dX{mcfQw&koۦ>~"Y˃m¶uX&ۣe$ ( i_WkFbQ} ?'o6j$ፈY(@/Fwu*͒#v_3!->ae}DVa %Ol{m60\lȴb([2A2c3hV[[(FW۱HM~|F;')T;0B:#w@λ{z[)\"Q*ï )'b0+ozB9(fG_2X aG+(IF$l#3qOv#ƺ=(<ؼYR#t2ϸXub_Τ>dYcݒH|SeOKMlEy<|C񱔜sl$)40SXc.zn ɸ#ZgEcjQ|y=5`siS*{z7> Y Uc&Q~ܡ_WD|-Z$e~sE&D#7FDie3ڠQSr@~I~ {^L[WzOP* qЛ2`LWYQ\Vך ~Zmh 6Ě#zv6W6IDN~"AԨҟ>,z*NfJЋ#[=;+ 'EqEXݹ:HqJLBdnƏ [.1`HlVLoAe>yX(?\'2"0@c@Ѕ bĒ3OhͅpOx58v 0.\:LsǤwQ*P.ѕ.Z %GW^I}#;lGQNn:99?{/ȫ~I[W{F(8mvsFVWT`#hS\l+f&z6B9G:E #Q&! !g@i乷O }AJR-.EE4 y#`|L] us YE1*qF ., hM{o=n ft%m9-Rp*ԄGe+6%YeH8;X/*˻*^zesxXMj^,,L4?W=xA\aQK|SԷEl|a- J7$$\B=WMdw9[W @h0`tuM6ߍO. z`> z5@"8Htr#ъΫJ ՜I@E߳bOcP;yR,dA5[t9h~ImNU]W$i#,CsHNG&aw34,DY""j?-ط?|J,S~u7yW7Ze4@z2GVC{d |6LoV6Y | |@s<pcM\9L2]Gv#>7 `lVЯd ey! R#aoP,|J n]>GyxKP"dmw 9שjrV~'QkϷ~~ wSc)9eD_X_{W( Ji{U wOd$M^2^= 82Ap`F!|]2$i/P ś'fadXȻ|jhW>%= c0uSZſUBb6n1*}8YrT{Z-YǏ3&lMd3ة'Ķ*IR `:y:3Z(m%iXu5.)Z9]<U֝3W_4B}n,.+1wʮUVn@ ^hx~>7@[Eds7ٖ\jP#gq/H/^n8Vpi cv8]+9 hsnԹ1Ut'#Mv<#6 <ݽCO3>Cp{1xI;YcP".b.7,^:<2y d\(Cu`YT7SE(Vl#7׬r u?Cv:}K?m7>_di溜Y.[!ϐӰdlL{˘90Wb}nEت*C 7l8jW $[-C#8iaH[feڛd(eaY)lRAQtE0!W z0 VE,5 Q+#ju‹cA356J \ZpJsV 4B|^X%OcJ(k3T^< >27E:Z20Z*~eARF&{* ȨmIO4zmL{V EQ`BǑ%WhȾV.a#\E`Ȇ;u0aqoxʰ j'y<:z\v< VA2@CJfF=Ğ%i)VdFTMm>f~ia(Yڋgxp׫2sؐZV.eWt '[:/ebL,6%8$Yχބ@aP̤iʭgQ ^aILݺ.ܳN~gCso|Mc\FP~ez0e^mo0BZu6cQstégp0*|ߜ,k8 Ar&ү>HYhHGsJ& J4 )cg%]olAe΀ǝ׋5l/ee.`>٘gAE_Ju !.RSk(sށ.őc=g,>iZa+Xe_V3`kQIF|c?9qu=vv'ʱo2&":Gu>Uc?R$XK~cSwI H mdь*Ld_q\mG*^v]zMkг ٢zmiEqxo-FoAhAW':Z>Dg50l7r??2`c#+lANd5ba}Fג:!+E_'S.Qњ2Wm| ΀.\yAԟ7);lۃML!-јZ!$R"Z}fJ֘dOhDn ($7ėW)tسd_P+Gx͓50!ބDcݧguA#b!d5Հs\\H,I9:piesBzX׏աOpgaaa .dݨD|pu5hQ_`M Y^}X<}[ vWڢg.+5a/fTRuGK>%7u7׭h,:S .$ᅱyʏ2~?S9$H񞂃i={j;VZ rjj睂H !$Asj7ڙ(h8w3eB[ zAz>Az,UZMl*]uDw% U"!Ӄxs:*3`>oy{m=a*+&;Ե"&DYE6΅1k0,YhX`)M,VEx܁d޻QwzeښO>ؙz-J {7C XXvcU=Jo|}*a8=c}8WJftx'ޓeXh\Yc?f? ETCZq#qz.I(Z:Fw=-:m|E"%y+Mk ֬¾Mz7Nc袶q TjC @وE/n|Z6L9G7YE {i^%P>5{ _[Uuu T6I u(1ٝK-Ϗ1p!wg;^ J}}x -?6Bg~XeU1Ovf?t+l$2]Mhw#g7c#dcj`qGBSzTP}/u+淒gj{sb/@WY!<>P$BRԂe`, ߊ>8lžJzM L;jwet*^q2D(T`:za%!Sdk g'6 -5u/٦;Q ~?J 7㬠[k5:ũnfn&*zrU`ҷ<_ ի$]_m+:N_%]_ ܿr\ࡸ!cCw}ZlUI|eD+z;PtiIHz7ǛnVaFG<0 }%g#OR6:*GXL .7D/hg_C ɧ5%}1*o-K*:6C$G}$ (Z ITYB n1vN<j}P_30I2?oUZ{$M)7 9?~>0pJjC | jj6ZwQ^wp"Prm&9%LMU_\h;LͪW64WYBʼn3ñx3:Ѝ LDQFaP3_K ǰ Ere)_)kۋ3ˉfܖ1BB w '6#[Hͽei}k?)ۓ_?7B{@ܶ2 ļSBv6';+㹭.e+ 7pzp |jszubR-v[1|ÓXÁ$1@p͒m(IR1AzW_$wu ijFA6In.()cP^ !=N!G]`4 f2}cA'ct&xK( rQ -7$4n uCKr^zwt,~ 9c΋mn bY !P},b zLjus% LjP&ʸCoJDe0~)z* F؃r$+r7{8ĉ{ ہeuZprֵ2==2cu~L?0׻_CMbzD0ŽfJ|"irv~˭xƑB^tH[Aiv^$dzzњL+Y]E~ 4>F`⊽^,A^| /hZ,dvHۤPp7>ZZ{OwؼqYN)FB w/Fstc&z5y>/w6Gl$ Yc7P r}#?; 'r\gWq&SfVEC;U} #<=\6x/*vjln9@޶+aKBҶn>X`*rWzm)&8>82u"usDДyˁ֙anK+o eiڞW^0oï4Q(T-c2рT%InOߘxjh˹v62' жN^5f=`rx6;Z=껰`H>]Oma3g v ,:ɳ1 ŗSfµsxLCqG &ZJ<XLAwn֠"~zϗ$eMIՇ $F(ւ4t^b wR^М18͍:6yLF{ȓlWx<|k5lk v>@\Z'|/6W0y+FTC*C<2[0B#t6d0nһ=kU`baUcO`wl:/ʐAL؁JcGÉA98yʷ* vCh"'7HrS3~Av>Z7p@Υ2}O'-vaB+$QM/ L^~'v* /m xx6aAUKUMAjc.VQ U>;?geVbŧ":L.lej%>rácH@FϾx>iv;5Q¢ #Z: =?0I=zuƃzy'h ADEl $NN/('Rw/DDyte9}=5=#~PDxUp76 x_mYъX4ONP, 5pk;î/- f4i292ZuoV=hƶQBqY>L ^w?K5TXmW'붆#I.J gA ]}Z*Kԛ`T;2Z^fz(>:j~7=h1ԟ}kv܏ 2؁m ɝp8K#nfH%ǬovBwI٦*MѾHgZ fzO64v;@Fp-0A$^GxS)n0lBp&>O!CZ!e|0OMMAZg>"`w&C۳pЩY 1rP_j huϺ?C;!܆1x) Q0hdbgH^/ \cjI|e>8K+"h@ 5}xV n:t6FhHgp6u.lX=HDy#jrΜ|9| õݝ$"O& ¶kLKZl [*KpC49p5GF* LeZH` Y)$RdEA7LL͢ͽHfzEFqB0y=s,e%%:ؖM4ky`-a$-yѹ|[76ay.zܫѴrr&FCկEU#qQe~J-SN=0+3$Z+6a~Yub >v=?gNe4j+{ܥaʹs6xF L7YFݨi4|Q:igpE$Z:z<-qi)Ow׆t%%Ɨ͊e>=K@紮mtDʱEfVWK}7^4HD%27{"pd] \GK;LÙYss7B7>CVY'^]Q&;1CIm'QbXqYMf!]s,iGk8IѱlgjSƀކén|"YO[˿jgvڠG||"V$࡫r" iKSGr'uvgd|>y漚%D )Vpaƃ>fw;iݎH8kbwΫ$~ACOoSQ}=,) }18oUD鬇~PP}^/,̽%@t~쏋t>T nGFC\'F͓%1rڝIOԵ5C9#麋ؙw o|0ehÒ}*ӿ5*:؅Hi^#E(޳[o EWWoz5fn8i*\֭89)r[ډKv1mO"ͿH u \Bn]lE(lOϧm_ICq2}m5_y`cY3"b㎿qultlLO[1Mw',}.4řa*o-j9y;+"Zn`hBO2~ywgUTGL cٲt[E^\hrze,ڣZuN7ʾHagzf 64;Mؠ}Ѱ#[<2.#?ur-G4oV]^rC^]% {+1x6t$[i< (tЭ -JIxzkU.m:pb-7b`CMu)51-nvCܘ<(ĩ0/ZVX#%UJTь!U- V6;{9f!ӆYYVҋL,%s\{>dɿe6aөl[ Xt؇B=xf[Z7| QMjTVPZd'CW8[3ڕXhJZ'd aC6yP3?2:'t=bѿE\DENzgYr迌HZ{Ab~  6X7Ip`] nayP{mSC |IU6wL.[r>Ӹ-c~!|:PMZ"QAj`oF>$gV5>DU% 9dm"1*\BSR6Q1ؑkZG=ڻVdR{rWt]~PjT<՝E>@pmJǡve+⛿l.$8g I3wIDa9ܥ}b3ikA\R'SS-v1|T`ok'%yAFqwr^Rluf&H\ *S9U‘bw iʟ:w Ll5h>`!D$?;l=#[ H;GdiZ$JFA[&qY.$ͣǝ25 )A;,`τGHz5A SNid XW<у=2 "2bQihZ.,2hRڼE/LS]K}o͎ ^ F"s&=~j^ia:K(xR)O|H]G_ffSt2]iฎ %q"s(qFZoS?!­;#J6!i㮺Z&0~FzӚ!b t8=0$_jLR[2>J( ObXfFVDM]=chTſ7"S8]K"Xn_A46i׽4H>VO6f0;&s8Qh>\81oĴ1|t=[·:7)\Y3$&F%mng5\SSҲm/1ގ+֟$.J .i%O8 2ђkZ!'3ʠȘz1^%p>yoy5<Y1/ˏu{oo.Yo7ilnZ|g2VJc41$ %h8פ/PUtpΥuB2=`^Urϭ';n'6/FU'?2\ݎksG9&nETB6XcY< \}f'fCoET{W[NqiDLьJ|ytΪWa04=w|FsE*{ H.Mul؈")`CԎfoaUP1 hؙ=c%`8޲ļSm{Eқ_̽uǿc&'+V~ʱ.@&49 #d;('WXIk E_ n`׏>׮](@ng.w7a"yrY%&+7 RҜdNwI?$([R~){ +_Z TB'X{/fޣs>nR?e"#蚤&'No5c o*q}0pS\u1ƒ]vM[n;ܪp,>Ż>fX>ڱ^Ż$1rppCǀCG,ҵcTꉻ32g9za84)pBPӞ l@.m#"y~KNsͬ5⟣^FxB|2'i. ` a37&p_OgZcڎ%(dce/ǎ8N9`UAo@vz"S- aid1l:= !ZNI5'X_t%*qBG"^qH;^R %ǖma-&/dRıRIMB۲B^`9/>(^@&K+TY3=LEP1]}QP9<!J]!l@f9*bGMOӺ׋)4gJ&`$O~LSL @l5إ]/=ݲ]*IJms^iG#rJiCGxdW ݝ[bȝJ2m7^jW/jwuQIu_Hi!W T]}9JJ2s ڞG2z |i6r^H/pԵ؃~G?M.WK eD1U2A|;y-Ć0 tTFԺnDpgf',&[(lNŠ"Pbhqc65ܒ=i)Gmy{SIg6#{wӧ%}H<[p#&HH?g&bqv|6(WUVN 0L;?DjAlKL LE127yG,Q~6ܟimt^L3'׎13f3T%=i\ȳHre4 †[CWjfWl~\b"Zr? t@lHS\2`ފaZ:05oE nn([[b[?փMqo 2= }&ͬ. d=hE 쐃rլdL]gHv b2M&gݱ':̆6vBE }ˍ󡨍@+ffkKr܌EC]zJR+W1>L7&m ,kȒ%F8vt*.h{aJ ̡h,ԅJaYz1>1bO: Edxٔw&`s[uyR%iǵ'}͔99<]6 >U  Ur 7Osꌓ-1,:+R}]Rc4$]kC8dMڦqKVXi6b`qcfѻ7NjnУTH8 <J9LDXP_@2JhalDL9TPY+uo'#\"'7^roE i@.~{‰ɡlrJ~=Ec~˷=p:k!qf}VثIwيÆ;9(~B%Q # ~O;K#!]dl#`v2϶JB(>R4ZJ{%X |Z5 2JbsxPjn=Fo-O߬oݷ+ktjDvڧ5fnm` q=iMOpK"sԔx5Ri^Ϫs7fytBW oWJF+'ۏ6ݎO/A[&;*VA㬄&$Kn -8yU끓*AO,rYO&m:u/6RThkhQtY:rA1w9rES#L߯vx *@ܑQFHB֮kcS~^C{mL2$%h0Mwnn;ҎВ #-\27[0="wybPWzaZF|?j|4<ŵvgj9&bWڒ="hIdžzy(}5X{ /΂ҒnG_bO9v1ҌxGY8λ.}f1ք_#B As3QtPmTePFch A(n ,5]13\jfRn"pkDiqVӹna'Fw1nI;H¨VE0nJ5u`VFPA:HN(S|]ٲĒ?eOÆYܿ%*zko`a :<5QϳE:PBYM -G:ʇw0$BF43(,n1ɆA)I!łf9~Ha+Ʃxd\u"fV&Wfm kp)R<enK"~zt2n-X ifQHuLMgmP 9P^9vӮt]G|wF|cz3/[^ {%,gh:!†OGXk3Nι:{h}T$q,lٽ%0Oy|7^C^1nETޣnz[e3ވ0$. ;21#K 4\w0n撝vyjlԥDQc>;3_qՊv$^Ցj=e T qht z&,+bsU% z^ g&z%`d9隆F~Č2kQTܼƻ7X̧k,| FAzNNNC`j^J-҄F< 4"D:KgR%61S#lX bՂ}Gۭ+%`}-O14ymt; {Y%(+Ђ#ùv;*ŷ$s^#> ?a7n';Jm/m1ӣ"vMov2﷼QycS*IOJ%M/^2YfD[b"Y5@ʹ; Y)Np:#X}Z84|Bq%'6})xTq (hWC!7a1uh6߿`6>h]`]=0\1 fX, XY-؜YGSp1w5'+!S\Z9.X{&^ ʰWo.ԤeLmjSJa8féCI3,N9YRWbUiW|&(p^ek%쟷îfd9dwËtYذ Bzyx6USia 6ȾLԓ)+DZrLCec&W` g)b![#bwwrEQBҒ'}v0xzVӱ U'W՜^8 z9ߝZx3B M$tCNW:ADuA`d gٰ==v ;*Rя[GpZwMCj74Q{ՇbJ=RGkb΄0lv8~rciCz9 @@[X1}_wmbUb'R;^–1nU5),H i<Ӷyfђ:s_"0" sɏ/#,|קmLC H$?{d&ƸV^# 3bפ ]k~vU^_c٢8pJ4u 9T]韃WǺQ6{Эh^nvq`QV Ńt+zT5\J{ :Ӳ jmU!5SVCS\T "hs0ϴdO+gvImojbҬbx6%G ZB^xg[ER^ mko._& 魸"gR^.mD:bR6 r>#_^ue^U츘+fOyb=ӧ >rY6̓YfC^1⥇Xt) /OvdaSJhjd Ikw[Ahf'GL~V߬::X-+B2Bl;ðIeՁE)*829jo4٣f$)*&Myu{:YWx߂ސ\[`} %&ڌA[Rr֛xdIy6}s5M4Khv*U۴>P_r MqO}J${±ZykWAgHƒflp DO9ixW|UĈy:iFJHjwtzkk.wWhLK>%afeJ!N#U"k=A7Se 8ѕe0P#^z÷7-2T._$F ^6>W #tq = nHzNh I*iN'=R]5uiJU&pTG& #IQ ݯQc66.zn!%ZtG< 'z_Ջ?"JB' D&(`_bx%x`zy(Oc hnv`a\Ń2ހ>>̧^DXgpȋ-VkNP_MƴyhJ &"m^#so,eqv93 CQq6Y1¢Wj@(Sg#)c*+Mꓺs.׏qFәۓƅ,ɽPqbE>Aծ14A,(lG/ bpskP77çs*6;Eʹlh ڼD ^bEO?]RPp@跻%L=uWa;ZtG>"I]Ts 9hGeר!* v~GWL?U*ڕ K4eʳE<@k.o pV[?RA]";1"˘ks}Im=0ւxV0pŽ}tVA`:NdU=\u@r6gɃI^?}skvs_YjU2##L@kIwҴu^EW^SUNɌr-DAK[U S O~0+d+Ù#ȼ:}I5Ќlb7䄓wE|1KzDH=+*& ٹc* 9!|}!2n1B6u-Z^:1"Fq)-\$mZUX傝:gٺ-ZsoׅRj 42C=nh1iOA3cO Ecg%(йE6SFS9?!3՟•޴o[ʉ ɩVjH^:s cwQNFkVxUzg=UPg- mkZ9m#(!J\VvhJ J*U˺&]Kd_)#;(;RUY*m~W{`zp`OrG3ͅe{[1!$AzۨjyUEq i\ gO62rb/X_lM4ԑ9p8[OJ% M d("OoX߻gt*W:Z6s8 ?)\𾖣Yi*yםFҎ#G]l.3-͢ibi/K$t("M"TG{Х](M؟נdžӵzȗ`5%Y|]0\YuB xb.:MXKv\+Z`.906&"KGsp"VHnz?6j(>c|d$t.9>tzt@e3oi^4`ۍ?>];(;JA7&ȥ~T (yók?Fw}zl漱&er^ܘ>M6LW|ACD]v6 ';]ۍfJF6a_IQ!8rإ&`?@6O/}2Y =㒎!Zeei?j[~\ݕ&v7lMoynm;j֚N0r(<-l0} %mpS5t?{Dt?|n%_}qUܮ`;\F[7{-ŘEh٦dЅYN V$K.^=VlRr/gXV-p6GD.7|}rDd.M!|T(r{|Rسl3%k~i)2bvfbm{"cRtb 0Mְd^Q?I̭{E~7$`x+;,G-j|̒Eʼ14\bI TǮW;n\P]0oFy+@IMyqQG:cP ګ~6} eJw"ж HP5+Z^K$)+s^Ol#6φqh#=,"?N֗i%оߔrAϺR`)\j^<3Jt!l{"r=- mS琪UGR} ˿ӚŏIqr$9XOTا`B@x{е`g _J˜=6eλvo|u 5[z_fS^Ϣ.)E2BMh)!_xJfZOxK)7b@BM@C'LҾ2ED[W<걉|V!Zh^CB8(cV#~Op 2 IW2G3k yhX>* '1w^@dzF4~ΆѢ/˭Q,Eϭ0n#l\qw>CxQd)1LgQ8HFvӦj-n}${B^k횄S|8/ ̾RTnc:1gܥq p$G7C{޸UX%<8BPvRI͵Ax͆rs{o kG]{HP{Ld3F=n5fwj>xyWDƖ/oKf3ZQX !L;jE~GFБ$x\8 @._<`~BU ͉tt+dcHFy|Kur8@Bg 'a;x+!.na( MFn'~~/ OE"t7Дڍ!&ipOaWfgQpJ>Bl)\}ø&{K#u6. {5[6wdZ8C#\ŏ̓MqdHԅWy]8WkۀmwXl^o '2a zE(t^2fՉo`l%b ηXz3HVoI]"bx"N= {La5{xBPEH3?aՍSs,]6`(MQnEN%gP}ZU0ot%a~/8j6{ Y~Iی =B[7WiΟPk$dlJ({}ŝA]QVTfҳj[f>~2Ad]r(ϺO(P:fi7.ތybY6acѮ]9. ؋RFtغW³ `wnMaL |f_0F8]N ct_=zCX$eܹ->+؏L.K|]bJ^Stcҍ}gHΗf³9Op=sގ4gyɧq?{ϐTɟ| jDaA8z|f_KX~ KP;;)Z>D0ψϕ]{2Yy*ã܀] eT[qh0HU#(tUnzo)km60D>ү;)+5%JM9I(CyHb:҉|Oq}o6 \ݰl"Fׯ k?qyLf]&[Y$o;) +tҏN9BA~[;WeSjJrD /Ru0~X!^oc,Y>K׽8QN+SII"_sm}a[.8'+W髠LZ.^p |*'w=4A8&WZ '&P-挙o9߻TT`|n+La}aMNKx {V2v yltz[lat{YT^/ d㮃Ž>.;)ytVJDqO_:E,v}Qvăn.΋͜|b1e+KH NW"-hHzCF# Yh3k'\nӮ$j; ^\0i8hl8p`Y3hV> :?UOB3?)gҾ:˚MfKթ'nW)ΎOP wRK}{11AT fkCz,3l̾F׫Qczlܘi~$-p/nם} vꕴh0}٭Vumm6$w$ukY:[/DvW`Lދ`uMuV5Xy̏R1̮D]a}Ff8:p$h>4SAi\R%mAcSD /t c]ZG2Ψ-p"X!:>ЦTT3O\ɸ#if@2cKRנ&jmHDoUE :T(l|捄;5QQ5Wp M댻ޕAg zCהNhY3(&]~ƒ6hS `.]ngq0x3 qyzlZONɺx3<0UOs*cgNH!"&OuV׋~-.$5>(f1?z7Se'vNnn Cz믱@}hkwoոgg-q=\bLmCL3% DG55 nD%oy d&\ɴ#ާ6z̿2Oڪy3Ǧ-^$s肴!-<Q\5==Gas.V31Ӡ՛hFy3:h N hvL% r!._ώ>XҨvg܋k0< YmQ>2݇trl_?eA8!gߔbKT]~(țvw&OpgA|Oͼa q章sxMY] k>vRAx6||gy0IJ4XתŲp |HكP< x0#XwnY@EPוIU?*|sk2k| N+2'?XMFiy$T| L'ĢGIQǠHL.KkՓy ɓSK?vRƲ7Ȱ( GsIzZU\OL, (!T!^gp:X_0\i8֪Nux⿐Lj< } һ76(oE[?vRZ}of e9 MN Y5fo9=ʦmL w7+HxdXKcTd2 |\s$=IG|ԇ-N1bAOݷ?>=P>dYQi/de7 n%FllDN]7jRci>\U@UXB)n67 ^N%mˬmVM!%q$ mHB1huHa ϒW7F)b&Wg_^ ^ڇЇxZmm7vs׷aNmhw&} "4Sᙊ3L Nf:ghQEF2*'_Æb( _*0./xε8o T )O,3H 5\68g"yzP:< |9Ǣ0Pk!i#$U\ߐ=(uHa}g 6&:+y[vBCrJbq*em%&kaM4SQ'摍x@L7MT0ãDS{^1$]@zPZ3;oty5PJ}TeGoԊ'j\V: tEq=D;Gl}58b :=͘@1#N;Ǩ#A_iSirފPʜ؈{9?3f }B] 8m)ӷy2mC8%6!E_кX74ނO3tA_߻HV̪~Iz XɿGJ4I0|:o|;&I&FD6I!UcE3'EWj7XtFvQP9Q5q}R$!w?!snpShgg2O${X 辒8;(F?mjc4tF}sr~Pi*H:k9}Us+T {yg(Uu [hVߤH=5@Œ];eq/RH(@莛-Seg8vߟҽy# }>jOet ADS+wrӡVZRV ts覷]$m A=7J$Gءgw6K P\Iİ}h7gHp'*B/ (5f}uXx$ou,V9YQ=,aVˇ$Kxp̞;r/rQB2 w'Ν* `*6.)P-Q*g+^E8? ;0T#'dtG;n; \*??0=H{<&}N2WIDkٵp;RN?Y!ړ1f nv'=fL`gzidJ8 b#H9\n?"sЖ]s -k§CwIE֝ 憣A: 5)T>)! &NLcZiooo=Sad _e3Z+>m#ˣXMBs*Sy8H+U{zU=Z/6W a(l%l:P3r]3BMI?5J}z5HߊvoScO^)v89NOO'6Ahgn %u)_/Q"h!+2Ϝee4g+{{K8qV ) aViܫ B0|[s @d!, T`tWjL_uO{ϨZAxVdhr(ӭ'ۭr!'AHǝhn}Cj%bޱ??ֱFOV`:1" ~l8!f}G~o^p: *&`n@6R0d|FPK3h~/Ol*'KE pKGM3U,:/]ә/ksz˥n@$J+]E|}A1E;QWÎ"qpxp\`TxYu}CNW/9%Z~6GUHcʲr;T16JI`rc|X J;nTm;O~L˛OXg܆X0(rnksJX\w*eѬk޸UEoZdߢjK^ى>(,BgR}d"PX:5Ww"^Rb7-[*46F# C ث'+\ KkiG=fr))mgܳs&}5 2Cp=v^2S´6{g]k9(;O  ,a넪wYӲ{s>Z_1G >j}- wiNpdcc%ky(1{q C^]φץRmiس?GFp%=R܇Fs'_kI'9"FKWVwg= _Jo C~iEvXij.CH&m6[W󙶺7ocJ ؃kQ]1bi_vCL)nsg<ޝr 3{{+&y%UzOn'kg[=2Q:'{lw7ڷ?54K響|ojdBU_Jb OO[>P+< 0*M-sx/kIuO^4̏hi4qEBnbd>?!yQ"RL ?b{nxFqKF8s =;1@'? 0[I=$WI@oaqD`)(1y{G *$0Ps՜{P4^6!'StQY+12}g:6d8>{n/fVKOBr⓷Ao|@Mf'f˥c_9!I͍ߥ2$ty)1jy0 g%K̫)/tj)ތUP9hGv|R]ܐl̃eu.?S\_VFۇAasȥċdTE53_.tUGuiiJuWSuM};1Awpӻ܃!_#lWԪ~O!*2%9Z.4'ܣc7F܄M6# WOzL֦ eJcOk O%,-[7J+G$_m876b+в A!3MJ*x̄A+AТ4PG^+AŸ{FPjQ#ގV`[WXmeڵλ2MbrnrXX0~6ZZ*i _Oa1(n~k;pimg%F`fZ՗Z$8=|3pF4Rb6p1rn ɗ3G*x~jpG+fN-(blsD;s"(whn&tWܢ.Y[~@}vKhG5ρ+DO&Q*-`*yiQۓ'h_;5n1m^jM^]-2~Lx;m_@q`n+<Λ a>ݟ5MZC(K, xh&}5ɶ8/cfQU޳OAD+;댝#ꢧf,Ma0Гq9F%#*1X@ )z9;J%5|XiN`C+fa~ wd #6'%F$P%1rvuW O(7!;Oprfu{:ۊi|0n141B9%XY2~8O5qf sIq6wNLJ&t#9s3ź7vy28BC=LsOnIY,+#>EvW"su$Kpw**eﯙ(4[MVM٤s(" ȮsAmlw}&zqI!mp-qCr-R>jO$r>aĨ\| Ӣey ҠAn!G>Y =DM3#Sziq %J tMR=уs]Ğ KB=]>aƪrf0飪 .gm};&X6kf,E zM(USdž;#\er˅LPF nÕ0lǃ'#"\jחujzy[l)MFܥsNe%R}Nl|a8TU<<,TXsIEr=-ͤ*mmk+`pNX6½.G{Gh%<ڹU(1W7g%R<;2XJr[ On4) ->057z ' Z i*9,ݦ JuYvƅMp#7TK}& ⪀ƠN\,RTld]3{8bf 9 \>:cHal,[37{*HJTXW.Ǎikko&d{&Y5V[kČ.aQìK UCӣ@N2ao(> sϺJaغ] 3kuOrIGƐL4Okf?&V>Nk|n0DFZ(WЯYîI:OA Bi4x;Z41$AtL刃V05W `Fx HY8 EnCmnWGs`^%D+ݲ2 aa]/UYt*4vf2=Fv+FP吀_Me'&B-|!kU 3cm˞I#|,p@ hLNK93굆J+,oK̙ZGr{"}(_/e{ޔ06]CqzP r+<<Ɉ&Veajk8|=ѽ. V@m|X)as6iIG\bY MOG>6i2EO-o91{b[q͖-1ژ8>lk2 %NYĪo~ n㫮x{˗jfG/l >+ {ۀyȻޚ3Vemċef׬?e 0-T;}'M'Imo˦7߰9YDK}TZݓz}DU$N'y3Um eмU?8LlS= }u/wt~5- yj?Cqg*XuA0Tp*]N ϔG|-#uiU>yh >gh4]/5iI8ow, 74:Oh7ϰYܚX,u ]V\|b}h͝؏lY7jw%o'Լ\EXu4qj5 >,0 oj~oI؛ Fwf\*pWݙMݜjC Lmg`yݽoaTۓ{^M2} 3fR:,ǎ r!Zs+xhU6eHg3J/cNztQ*{񂜘pgV1L] CR`J . ang/[KzVMhǢ:f#F/tE;Y׍BH/ ^}h{(Ρkts#s,$}"4mx_o%uLڭxcŃm}vGX|^.`{eJ6 -mͨwAÝNT9vMNw"}0GmHGI hZ58(YOL77+#ZOES]m9΅`FZ" gp $Lvjw# ]KVu+EQnZFoq)֛J "D{+&6|ׇz4JqaQ"c8n?bƼ IJ}q$_}%^n묢ݒJ!I<3E ~ijCڕބmh{"K5{Vdְ԰)jq3ZFQeml1; :weBhxڡl#'!4n慰7@$xȩ)l_x"SxFNVK+Vlrf,MC8.JGGlCf8΁W6GzoW J pKrx,`SM PqX * \NP'癈~WkH~D NBz^$FLC8fʺs/ժWGl;⿕"ׇMkjU,wͺBK!-֨1_9Je ˥'> --y3ї R0f!7<d`2'F}1m2 ui'029w'S"]_B@Ԑg|c#?KTg+Fe%GtV>Пppe7\D`z{=gEy/vZՍ Yî*z1Y.xroӏ7-"^18pi(Dk99:[)g}aޜyU@mG[fxSέ*@O:Jڕ]!k 3:9._M E;dzdB.q&Ya sd ;;k)5PahT:;ncxmCr7%deB 3Dl xp.jȭmx|0 x(3I|L*Q7d}=Dfכ0srgkVHyoA3'eW?iƬϝI%=RB]_)vi^f.ؖhME6=rC*W1ۜfu:uY} Fl8TWb h>3c;<$dsD zՁw_Y La6UM`jwʰ@ thIے˓] fvU3igqH`x-2nטoɧ6:*a0,M,Lѧc &纳?v9qϺ^zQtֱDCq/W7%Kʭ(%vܻ91גs9;} |{'D4ÛnL$a@X6Hu/nB5uH?ZI^rR7} '5=/󁴒EE'{C@ݚ^XN8r28cOBwOzݟgõgffv?׋s [*TVd ,[s+"{xb:6xE!Rss^n9 v`N J3('v#dMtSTv3+jǓUwq&FA}QHw\̎ӄ7~y! ٛ|9dNd312mwϭ1Ei69N4SXG]bk7Ed> M!!R:9{SL'{hMř 8 h@x(>Xbdp{i]lJmfw8-=[6"0 zSp=Ÿ"RrjyEPTTRG¶6d[+ᅍwOq+'DV6rǖ磬gyG6Y!`+IĮ510wL8THNQ$6.򉶬W^jXYn;=V t`jA_ F^r5_8~\sGСlOEI+vr$ӺW]/H jlX $Ƹ Lԡ2VȲvFVx6hEZ3Z&>2FUxks@(QNU} O{(ԆGd\cՀ9$ fka&kX˺(jL.0q(ګ q{i/|*(Ac̷EC]%3,:x yXDm8=30_m1 ңD[?"2.mن\XB鈭T['spu$8>L0KzW+im vPw,b['4TQjLxNE֋M_`9* m֫q\ HRҷ4 j ɘ]ȒL 0]`Ǹlϗ2k}3fWlZbYVAH?Nֽo&`[/. _>|TU~y+5a&ir''#L),̂%eB2Gu7kzklWaۃE ;%?,ܔ>F9|=$d Za sM\?&7}sR3q/OXwy#v:\@1wE kwtNyR :sGA&Mފd:j VeZ52>s믯%CփtOyD"ٛ9?J7}iCϰIC>c֥32fKىQD 2&,H.DКKʺ[Uӹ=oo%#7 0M п2Vdl:σpD5Xc999,3ѯN+ؙJ#R6TDIG&+8 WXjNE|p'~\RbNR̴C2&T,cf@ړC$tM HI9DAƬAq'Sg WD5, Ngz&PH36%ۈ3$IxYI>] rsI"d\qƜ5[y usEqXcfT[ j)q%&Zepezwͭ+@I`p`&i(np2LJjyL)ɫ9Ogc ݹ3&fn#2"5{'vun}-2=V\Rw=L/Ƚ ==7}"b=W +1܁<7z/we.`1ɛ, f4`x2AMw~48Ai_~Џ|{o}8xMx4lPnڔ1jE֕,S }TIV3ԂXX{'0Ps P4G^T9l@sA }E>Ucs`x=`+Ө&} WPnZ]E@0q۟Y=Imm+kt#U]]a",!*wSp"FW6n8)kZt g)8B%x&ʁ4H%09ٚc[nu v}>Wo};Qԗ0IZfqޭҳv D]fthK,-72Ǝ|x<;$]Rg͹ٗBT/ f*bUoV3Gk9t#"[<\=?{Tփ5%+>6VwhP~W.=k'x G|3T "a-Q[Tgf\ R"ϦɸxR259d,zT[;<)g= J&?š1ͦ4V$xe\]]ӷþ~txB;J̕Y[u`eW/aQ[dtK4ϡz~?S"P6SP{j>XrXbJ3qq J䓥%uqg95_nvA QVxx AQWb t:$Q@ts]PxG0a^F吊{ԇ'"+<9s<h4ՐJk!UMI<%K"O4޷ .Vp*:Fٹ( Y{~X ]i!'ڒ06E X!HHV[qG=Ԭ:Ѯ&qPr?=bC4e}e M~ړlFa.HGﲗW,MM`T$Dhͨa:+: -̶d,}ؠ=7G|src-8w{K[eWXm4ST,w1~q@Ҹ/ཋ!0~IItY`ʹ![9 pZ} +~:.d}{WG19 LrDJ0]|[> 8z|_*˶[O"y)oUCٲ7ESa uH>wޢAe^A5r.b^L"~7N=sh8v 5ڟ ]FUFE1ZG:Kx(yQ"%3\5+(ea:*#BsWH}['p\ v<$]\Ý(3 K? ֙2 %W |Og;s맳sK*8rEP%'Q7Ψ{Auz ^*gӅlk&dns\z7l~ }iLDAr ӆ]xbwZ6ش ՗ -h9hdޝ{&{H&kp1tfZA@^k,Ӎ_ʊ3 eu/+l.APaSe=3%1 |[f5);Fr؆9PJre2G-h+[]ƓjNǘ#ߋRu[P1jpSy`pVm.5;$N%Dg`,Z- ^[43'6,꒞/ p3Hqx]/~n97ƞbO:dܻ[!JgQH97]FtUf͂brI=|}itzMϽ% q=9` 6bͽ?O`\>/"sE⯬wabP=7ī@c PhoOPN1sո+-;i(ߴw:.Ci٘|?#!:J} m¸ lsaJVC9wՙΘf15c]OQCV$P?Qvxu\V)dK?"M*5&Yȣr9#Ǝ<ŵ$H]d+nܬ$RJ7~ Akh[xuI\n [ 2zv?3D Wήϥ0e$WXuFp Lֆ]Dr[3CRwB& x8lBOxdy2 P< y2*l8W)쒏6mޅL?SddڼcW@ϻJ %q<3BNVO\ACteN7DbܹykT8B2IaطTS/c>C\s67 N,٘ëCX0t] gQ! ?fyEJnpBuKZk=P,ETR|"(:^M5Pї**'z'f]{yF'ugگ0V=W&f(89v:S+W&C[p )ʶ7|+xUXg!Q)!\鹊 !J)d$7@C܌]bj6 W@@Y[~1E|Ʌj JKxA_z6` RD@mWEQC1ߣB0w φY\|v0ǏL4|r}Yii'?~tU@)IartZ7-"~LvlRLK??CZ~[1;íwԜeʲyKdZ |ֳ$[Yվ]RL?̮??B~Y~[Y8|ҍ''EzY >`фM6bwEPGfu-[?B6Jb"jd)8'd^M?1#ZgOUC'gѯ4#+xµƬQФ&#Z}`Z:p7<(^B1_֌ƑT/0'K]"(fa0f}{L(666SX"7~vk _jZ?EXCΆ&?~WJɴv& &e NzyScS|M$5\7Ӕp.bbN[rnb#2*E* @i!ӆ1H5tt`\cB#+KEYc:ϏЮ|$b#_R} ִTB-|Zu[A11?AέÈ}ywl32f6*HȷX Ҍ4#ҷ*+vX 5 /B*k0(Hi*#WaD=+\TIAW!RW~^L}v} Rd"p g[cr 3Njjhs^=(*nf-W3>WxrZ+x.5:~6S J#lTIS)GΛݰS'q@6=CiDjruAGͤӘN* I"d3ys gh7s 9l'o,"-}_`Fɶ,>?$'3Oz&^0W蛏%؟Ӹc""(*,InǕ6%y (쟠#~k%,#FtSRe-Aou>h;~5z#\;2%1"cM'B:r({=]5em?c:$RQ6Eu9 -r}J8pW]U7YF ~<6ޛgz6>T|쳯$%t^X|04ga_e`}>ЂMC ̚c,m\DNu3k8 ӝ]Q- nG1n Yf6NLâL`-P=J~I\.v\bYb?q_C! &1\ ^oWVWHBAhkFx+gFUSHA I!?q&=G jD򺄨p iIBel'?;mPð06d#4rO!G|3l:ZNV[zz;bκ=ۣmvZs[j67q([{jؑg4)=nFx9{vTu5ez{Gi͊+09$a+XƔpiҏa|}:Gre~RFw} 5XPBH|s(.tvkVgV>;!S 7r[[xupvMS#&Zׯ+Bp*zsJGnzFNcV8V &S[q[Ҷ;yMʰUzxD3*,=va 4k4)4e  Udu<5Fg!Ic*p}M{.ј}# P#[ sbT nwNJf}mY|(XMl,,mM#ҫy@G9ЖVSbz\tc ;y8ghm-8ɖ67[luK߯^5^f|#hדtk[?2ȥn-09moN':1 ։o r[ʈp-W:O)bdTyx)ҁ7m2 -&i'[ɮq[31IjQu9t}pb C 'ms7atڎ|+:$s\"Se+b-1j6 o'\jnmK oiSl 6+OWnTA3-nmwuq_>gz;{d^ǿ{ʨd!!Yg`cX?޶mv豽咨a];VAI-B:!Szϰi /;_5Rts(+vSB3b딃e]Mo+ǽhw>)LqRuʍ5`jjK[ 0~x}.oY5+n'Ud˱u2XE4# R]Pw2_JɬhSJsv:icS3>Nu|wXöxRn`2-=ݧ]W33[WF kNSdž'?Qװ7Sovnfvp wuƳa[OE-yis颀n-2|$aM3 ' H5/dR,ॺXv julؾ`2|' NtacOHڨ~IZ1FJA©d no<]a\#76J(vuUun\Ǐ7:\t TERU `vwMpgooraxiS|jGP@r#`Zk8l3WLe7=pWltϯ 1 ڌ|ÖoP+}zzj$_j:ʢ{FWRFaK"bFծ11q|g^-ǢkEޣֵ u -wL}QxOk|̕]D%ؽXff_7K{$sֲ#ff< ,Iׅ60rUu ~mF? n lfWK^}ϷL<_-ZX.~%<))B5G7X_,&³:`Ojη%nY22DZ;oUp48L5Jʉ|TբW!{s0%@'.R""JM=Y(QI|4 Rݰ:(%ݠ7n=KM/yF8\XW6(u}_!$nԛ7m?&—]7+Yhs+NZ\ }Ug熥ۿ*bndL=v䪭t<] WnHHTe h{gYS>$5}c_K0p()3hv.&%_bO"Oޙ!)*x bv_@1_ c>( >Rþ[>dGoc#qa D/̎lXj@_O}ܢ1)8NA'tCmڦ X6>%`>a<:JR%K|c<+u&0Eyc5V!o>H ׷usIGUd'kGWhb榣bBӛS78@ljŭZµYDUq)-F"R_: 7knx3iNn dWo:=Mc;G7H2[ jXWh'ڷ\ra뢏''-K>'1g_fA*5A \Ϸ; ,=71^ҟX\l̯vXǖi=(_e]aF#ckɳeWVS1]i1 gyJI6}i1T fF>CWi\`O9%fe[K^|T' Υ&O{KKZ,[4agsi5-[%Ma"YNjs5+.)3ҕAqCUb â4% Bb %w%F[z Gl\í+BP,M-)eY=Br[O)O9/dcT,م8r(TB$ 4'*pZc ]K,LM IpRrOx尞r;H->p`lm~<%Ji>7PlugI6ϠW[[/w "c PM&M`9 3ol@Ψ ioʡL7%AԎ<)5lw O+ƪ.zf.m#&Iqώ,L.YHUʴѰMD'"P(, 5>Ԁҡ@3ߺSoX_ijE 0#H(afk*'*w!Yn$_MEH6}a3酋VXskɗ |A* krvz%FӚB=+F l3͒qIdك q+׬ UG"xF8^^z`.(C氯նZ*SE; ;GraĻ8dq2؃O)HMÔɁ< 6%d& \%L2 Mpvh])9l"%kր2ح>Q!j7j5=#8<מi;{pMWA&?N2|zNp6TR;HL5JsI}*: 0!_fݛt '/e_Rٜ Ix~{^Nַ3 =5}&{9GW 3\H\t"'Á7vw{ L}>v&# ]4/ܟرo޲ﭙpFR*8'k&TW̮-PF>$)LZ⧨w9=KßS,Q\OR ZbtK7},woXMťs@xF;3.Irʒm`)?2pJ^#o!#죺~Cںdܕd+ ªW2hdJa㔜Z}ڰM)ѝ+y}Rw@pnۮ`+h75?Z"88 }/  ֩/4s$]jȼv_mFR4⎤K/[ưNޑUsC`ŧXW iG>}6|h|dTy9#EZ3I_ v7GQFh\[]S?b=#.^tPʠ9C;QZQ3g:#N&b$Sk#\poiSs5Pw 9>-$pD-p0 MB^Yn꾎|ނo |OhcɴalƼK.#0ൻM(k/`ݯR_`qi৞. Z wM8&ЦUx|%!-h3,l{xPJɶO>@Lu竬+0;\YOJDVdYOt#x7p~DH%]]4p蠢VY%>yS{f [:07j?c6PG_?e[3bzl։jpz2LH-{dbp8}:EתSʭ!Yvhu߰3Yb-VVY?f1ZZjQڍ"dJ2q>]2džF& Z#,'kDWo,wq ଇ;.Hv3hvi3OtRunb(>.Yc T:t:ɬf ߑU26R[7 >iM3yǿ^ly#AGVߨ,$eC`cBd,2.ncv7D},d7 ln"hzt5-9 ^ȵƠ_Eדx:S&-EF*$@#Z7F h$8h-K=9|0UFfueFO#J;.J\ھϓ1-ei^?{= M{o ^9!1e'>vvܞ9Mj.,'F놚cWvtgnMl7il򚕼]NC~U^[LgcxwV2CAG_^}땵\ʗ7g*vר Wg#b?})8 <ِ(/ FEؖruGlea =6 T-UUW.ݼ>q_[PF n Opts5kTz&攟 ^s&=, }[~ݐ/˔p/87%^!2 I\M@!5/C,I& aO'pȎ1//ԷXwҝX`ϋoʰT/hw-wrR9f$\u6Ph:GVk ֯O%P* MK17~a+7j&i?63] '@`*="ɵeljBH Rpb-C3\MTq5C[Mh}n|'{׋L a c|^U2dU5hW]z~&{L0ܲ/Bkv̙'IHK= B!z1f~qW.V c_}F XM,8xZ| |U m IleNޕVx.-[\FW . +xj\ Ja-`vt*0/Ѯ[T&v2."q?>+{Ъ[Zwh[L5?=ε̡g(dOFlxC{nY_ZA(YgPaB-!N-ׇ0ZU޺J &R@M9.tG{=|/-u[A"q0{ r"Hz}K%\ho5i{]!UL[3٦MBYg*@zw Nچ_9!BҚ8=px`YFS`%0g:8N(3} Nٷ"ݤw,Igޘܾ3ѨA 5=e@z /)ؤ9QfKP0 ,'&2-9 B5;V?;~jxUݒhʐ}=<:ӎh=:Y?~͸%o2x*d7iCX&i:EWf4"qK5?Q= CVޜԂ?;k/Ƈfy0L0jW"ܓ'3'!mq[hE`c 8L3 sE-SmucBͭKv-YMchtuSIu(к8tH=҂:.API +r$P^n! x4l)6Uhe%xC1} +;tNҴLgr =m..2=SŻ!+?mIyPvsCZ6uN]Y%@RyD?!C9LmM$.徻ٴ{)d6b ٨ᴋRadnr$=I.nL5 OxY0j$WُY<_l퇣dAB!l[$Zi(v>tzEJګL|`nK8jpjk!= >Z鲿$߱;5Sղ^/8I] ѐE⮙* )uVw)$ X~MUe{G2=kVѝ$8}Ǵ]ʗ@}ߌf}JvF }JS)ٓ|rE454͙1j内TQĴ!e#E֫>Hȏq/ZeŰɢYت?|cKғ'Dۢ{vMC]@E , jkzqn*OI64]Z8cň'4pnxz}jC,z&T#6h_P)vY{4r>>ަ਴-HiAjQ&C q@K/ZjF(<; C3z8XD_q<'uANL\&KHභ.9-}D@1-?z ! e =Pss` T6#q9wS#Ř/ WjInonuo~> ȳHG$XzO4ą|gdٜ6O&L"(9w%y8g1vm]GΡƀۇUk'4"Iyh=N/j :þ Jܢl~D/'ӫ(Q0QMrTS C6̼;h]scѿw:g.HBkvAOlGBV:rXu4kVC)78[:O@۔E ww$jz-bXCW:* O\N%UlQ8WåoSJ& āy^JoTq_EyhX{z̯]P+-Yz*b§{H 4+*Qh&.*n55]׬]΍TƫLJi(X_t!F6 HHYV7 u1'8{P"w ͭ z﬘>l{j'_W6upK1.U}mLa^5>t4ت69Qٝ h cY=(GwݪQoRf x$7s\V;DVN3 eNUFV &E̡C۹n 1rEq!֟t:>xVNʂ0hop1.1|oօSSdcH2_tBcHEsPշ1Y̼oԡ%nN%bܞNӡ R&cxDwԈK|nû)5?M26V<Ԧ3CP0-Sxbe Ӕaōq}\0H /]P$KiAc-4|ݓ6MMqDD >2FE_aU^zzg?-4AA]j{UpP"nn$NΉ?P61>RU{P#ޚAf)U'?%sB J .m U;/ 2Mf5c}i}UhڱG+B:4ܪ \\ \lM\eVmoo #) ƉGƼ[5[ h y 6> P}Z1:b`t`ZUFXwQS)ELYUfC㙿d7 DսQbӉk![WR._ # 5zL R=d<~۬>|R==edzL=It@ \4,h[EO 3l{= QJld*cm&KX5#52ѢwR͊uICYUumVͮ%U⁧J'!OUe" ȝ3(˴y{jȮDŽxRg䃣u:Qo9CO202ȝuM!?6w/KVEל8Q,%_r!t1*nGCx*oRgA 3A8ܑ- ,@FY*g-~чLZI@6'ݾ*UCi*~/!-,tpiq@zC貘 ⯛Y)גfh.M,L#6)b1ќ=;Lُyz|>;*HR8mt5auTS6'pԞ=.4[aEO?J`[9I`$A90H~vs$J40ӆ遐4/ rqt֪CbA-k,RF==>#ˢ]:k"hPaĥi|yjG8_qJzmfr^o9AY(+Z'q+/50pf;@;vIzBணagk􊧜<[5k(# )nnC5)x{W`4/HO<<]2Djw3\DI=Ų³%'3Jr74 % 5]. H`m`0dD~8("9[pK~~2 @+[5{F%<>zSq&_@,:9*oҽ8YGf[o&db; y!@hWBߔ3(߶^JD<3v!MMߪ|ed lS~7FF_U O:!=3[uۋځcąTRk?} I˄F3U44N^f}ewMT6xC`M_:y8oLv mc+7re=v\bʌNYC D&O꫟; Sba=җ6ThwVpAC L]]k1qyLTf PI1=8r] k1Hb1F.ثqLXxok9 {zOsڠW-m3D 3?LY8N6e^xSM*k1  N]YBm ,CjQ( _Ş $>$ o_Z b;݇uZQH]R#*- Oa:w{W:d^d߳2ltE'1 wkj8y,fKOv&4 '[Wݺ+*iPA 5gs·2x GsgXǸ)?hלa*y 7E%@5Kj6W[R!.VgkzP4oaZMʚ}?z.Q̾ve$'vXU[4OG_xYi_]'Am:2߄i5eE@6w{M@ YnU QLIoEhCV_#]oJRf0+ G[3=@q7dXǯwX%Y`R&Etb3Ȓ:- r(.TUq8`T;Y1f]ƫqQH(0U3'R#$[HPd7Ch7R@x}}ƑӍX9TC0Z^|nJΑ]@ WN+S }J+K͛K̅Nc#=b A~2%Ke]>)M yʃfD([e}r9xB }Өma22r @wpo,F. 6-E~XWJ68|.r%,+k3 LV$iHX'֊'6-݇kMǂ|{A݉Bu~8 ^ ۡ[LjjࣺevI~Aszy8/2Kuڵ{"B;: u|7!7hsN"#=ҏM! 0oB[l+jɄY ^)`$a0SpiQ5ks.΃re&VzK;3EmRT2+hp`Fbl+,qqgEfx6) -f/m6"Fr f9U[}KSحkKuH^CS]Kl?F_7Y-; %VI*|UY wJ![7e((:;SbAKQp-컛9MJ>YحWJ,e7{o+ >:J4C^= !^ ;]R5hZj;JD|]ln3g⧟}X- cI^`r}&jVb wqlN]9<óO}ʃel0 zq,,@`p9 ֕୙I(jrTWyBU 'x*# a€{~{WY5Ya)2]%3*9']Pb=1CWiV G}^mm..zfS^^=Yj udIkVk&iJbiUfN f;B+p4IEƋ XOY8QmRlH~9$xl+Ѽ\E|rmgǻsDlds =\}Ϲ$.ta=^-UCsUԚ4Nhds߹卾iML=:6+%k=V\U90aDŽUOU#Ѵ ]$$%y+Ө)iރ|nj>$kr3_/>tW@* z* OSe !G%Xab.(t5K._T n0 pwlf#NY/F#EqૢB!ʔUiw)#tI=,ʩΦBҌZ4u58~WRT IJaʊRbuײhSAd UX,-cV35۲a{l]"/TJ [UTGL, {`ڑG?_su<]R7nfr*3qɼZSaK8)aڧ難ao H̃m?9TYlF_C #Rv_X]5Եwh"EYfKzpRrd o{K; Ow'TQiN2ޜ .J~)y IWx Eɜ-hIEg fX ZkRԳ|(%)ߪQGn vT)`4d6޺=F,)҇ix^ Ai'kU:X;* \U*8$(,C( ˯gp:yi[!+v136 !I`v>SfF'okzDF/[v㈄J4NlT/]4~zKFULM6Va,'2Ў|"b5eqIygU_{?d*k[]ƾ;2YLذkl0;bjPZTgjbsoReHLkME7ԄI*/ _b<]B ?L~=M0բӉR&ms1ɓ5CVrUZ]#[UuzOYʈIcd@W 7}~M8 p.+TSŪ"IH%G_9z;٪ŖA:sw lK,Uʰcmq2uxfM2u'74a.;muدw7qa Ӎy "/3fS%Uئss%nSaZhxq6i?qG56}+YygLp\< - M!$6S[O/ZzkٟaSGAzߵsBc-̨*NB=W+R4֟[_#gls~$#LFWfc~NU(k2",QcòcB>\y Hٽ-`F_r6', X!=۫9;>m< $:@4x![AaĀ5y v7o'V*$s{A ΛkA.nggo52A#ԽU2"FsCь!xrXWnN_2)fPc+FQ!3^߿2"zvQB`W/-5<,Ta jjvbsl:ZQy]/ߏƃ[h63ʀtbϩ+18He( ϴShlஊt-x un5uF;`'}:V<rnsIz0ҷ"AMWCs6:all)T:V' SoM{QwEREك CɼF-Pzw쪎CucU\b,قŖfK"$aU#i1;b2B)0ꣀ$\eҊ(NXɽEX0s>c<fvGU*'4$vL0w|M^!ɒ l]Yc +HZ6^Ms>/8e$~5Vin.3³Hͦ$(rib"HJ߼-2>q|tJ '~_ {DWR&.!E|ΆUgpqdr"` ]zNzH~zp2K0t̹;ۖܜ1nM3Ď'oV?WzYsD(AS71nP`q#|NogBD7QWT˄ъw\Lþg_$.A;(#%Yn&n|V=WH~c1x/V݄aI0Vs)ũA9♭,'lݱzx*ñn=v2 *,,䔔ܺAzc_Kۍ+Ʉh`H627 èq 14|Mt{>sl^03^'kE(oL]R r}DMVGIr6%I,mm͒#Kkɵ"5a o14Zc.V볓x⿔"+I[%!6ϧ5ɼyo)b){5$+?` sz6\G6lxbOI<ϼ~1x$yS5%U]Pj)ؙ F쏡nA_VZr3ʝ5SvcXJ3G_` V;M#˹h>:?FkF޲t>Y2>G:YWxliT]u&pK \ݡ>ȳGS7ަd8oUzpv7V^K-wl?&MI(mmҒĹ A'!1wGX V} YneF: ϧ P`DFT+9Xŗ!vlw5ⰴûö@DSCNn6} &ᾧrc$XFܽ}'I~xP4_~ .Ӟ_zijRg1ym%ĞcwH8Àn}>G$P)˅N*D.#ڗǠf>eѨ[if?C 9ch`w9UٛgI/eŬl*G"_+,nҶ!%ϊ gT6pea܂Z5I*e(xҴ D5uzBr޸2#gj`Vpq<};AK-zLVO"Jt^MҭN`GY,J\@{]aRe{U˰$$Ee h]nuʤh< IQ0(M+v]Ҏb<姬"糄o{xUKeRjt~]^>WIM^r/3$--CI{'پexg'fP0 '5qguE%hgSx %HFj|H:eZAf2?y#>r8$P=VC<[G8ۭp5hfX-gHh6!pR2hz6S hGu8/YyOֻ$"){Cu~b?]`]þ^l z邴LR6ޖ!'n`B:wBb q4.\\%j(p}xh6B܉Fd(Ol$6|KY[R8[Oļ!Avx5guʣ:\怗UA|UQыD0RMDM9d)ӥqR),HQ-Gm>q?rN$BXq2*I~@/x7|0OfjC `2W_bX'V[A8/Jg"xJd AG!ɼoI.q VsD 2o mUՔvYz8c$zc9qO{-X|Q]( -{B2WH>*QݬW,Wuʗ_a=fϐǎ@(|)UoRHdR3,W9 ^_bj㵤H2Ɔ@0'(]?SI,p*e"vQؑV*-e}1K X.>+1?\kȡi7PZ!^5 :(z d[aiLȉ=p%Nfo.]"$f Wy4"0/’t}Fe\y1\Z:xL8C+qr?Օiѻc2>(+f'l'b*WwA;yЫ=z-gAhSv)q#T9A0{cDkȸ+,wwl?HG+mLR},Y?]úe]AE?E #}zol!hBU512l_ϠNkߎ„bg:Lz5IB-TYoNΣ+$Q93B-peRz)KP,Ic;k-h^<.r_ͮQUk7`aٞm݊.|ZF~o=t~9IO3S:ꐮXEӍBRmkztVHPsVrT^`_>gՓ_Foy=PϭB .Jfyq]Ewz\P"'( 'ީiZzxv7 t]lNv,#!_0a'o+P^8 mE^w I8 >JȪ]@Q.|4M9Ӕ}ƽ<%'Ѫes1: qFx;r9}XO$y6x*bsD2UbkRl-qQeZAT1NN4eCb;)0!4 BxkO3\;nkw%jqUd-[Q>$h4yPP{v#m&NQ"crzF`% )U_ۭ1^n5ˉ7މWl-ӰŻbu2OYm'ðŊ yX;rmowV|DBnG@mv'wQҰoC:{>[dn$I"nwvbc0 }<(4L8V ,a;XfI~ )9A% 09\8AVR@ t}e#Q/wa)b∏tP)pa(clhV;DɖZ 7~z4LIwD&WLh*a/$ݥQRUrzYO@\ NaVI+&IuOgF:MA'$HmSrV=2d6AWjr&h ;I _U`NE:lx\Z M8/$$ EcFњpZmYr :JΕ%x 9\TAXL}̵c9q{U9pӵ#Z$RgSux#ؾnA1UbrJ[ ~;ϯlJ b_gQ>]_jCnlGqm3ro&<)a4AuI13Bv Tgk@9|(g[A[r2O 5TC-|ihlg?ڪjjɟ1J]A髑}^f{|zrQRIT %YeEZ#;ąrDY:5iXZ4tF<2!}l}{Gfa6L?Na܌u*yB:vM_`݂L#xvp*J5584^,u*|a[4Vo[ص:wBSpEtj>ǥnVpDz9 _֛]Hۮ;ؓZHXzzp\Bd 5B0"zM,ے҃"fFX29 t$5c6yZg-v7yɖE븣M>r?(_9)|cVQyݘ‡GQPo]- ]J9HNPPUUݶ ;b)_PIպyD-/v(瑼0Jُpx5]9WqB\x/C)eWOdPmb<| f(߈j,Ok^{7N$E$U;y?a4K* VQl7Ե*O7WC΅A4nm԰o}naZ] #6ut:;:=(1Heo8R45Q=K)rjJ za!z, /RI&JZKϋ-kdܹȏ%gxS>ĊʾCNlG_^'6 eYwzbLr&FΩLj۷Ij2Rv?x4T|ٺFHϷinz5䆋73X̒{I"~?y3j0.p%G9VA(:GP4+x8P ]NkNc:Ykt^Bk ֵYE&k/AasM,<2L ?Trd'u6!L]KӒhʷ*%-+}AP7{JII|h Yl"}D0|&d]o}n:5N譩wşDHx{*AK!#nC(="Mk,t9WbjW:j}sI:|FHd$IG.qTF53a-_xp}ќ^ۍں P0a7&Tf"s|>"w)3xr٘qBdX{#$+.L8X?9XJ]%L\qJ{ TC;E7 ɗ\<"뎆|zx XBhm(}8P̨D|);@#JMݚ631fЪ(u,\]nUjҽkl3 i R4 ¹R-R{ӈJLN)GM=80ABC'xfmHڑޅ,&L<20')[]6E0~95Kȳ0{м\-Xs.H7عs쾣f4n{6:xE吨㶢YG=n FӸA7`2d2"S=\7E= q笢v D|H^^%Y"Vq,5{}= CmTtW)Gxb:vӯnoO9c[%k4 g2I}5u?̮rx<._ɍ*͢ʄ3 Ƨ4('1# xx8K,r{'x#h6|9y-p<׋՜@F~-Gm+ܔLy2ujpv҃j,0FA|'͍UT 'l֋"5J^ 6?н )mꗑt2GWHNq@r] mQm*Ma *!*@[LYf Bb_|DW4?;./'ډM1v([ozk;RK# K[gh'آvޔi~-pX~De/Hțt&<ʴ^pge>7 EcS@-IVZhm+Grg8o~ 3 j=tY7 zGd'}nO=WA{q$1"OuN?(DBpHQl#6 }oO(tOUz `ur¶vU B/OכAzgiJ/.FaUz7spg="ujf)~'7w ',CX%qS5xfƓ^JM8GcLN^9tԊ9zM5g%ĉQ[6iKd Xc{BCF:%йPIݨ{SLJƂu_#4Ѓy ;D.XEz|*iK1X#^.V'_GzB#zFCF*1'b6O&NTKR:mIlD <]!1"̴9t8.ضy7{N%..IQ"JهvڀCT.t `X. zm\!2{[͔lʃ⛣;uѝ\yߠcgbhH^f}+q:TL .,4@X '@7i|Xq2+*-0NyE`2H/JY\944WME:sOԢI37>vs׀;>l8tvWT^٦OE:Aaj,$gHwu=E{Žfy++ZÑNeoŠGR7z*܁.(+F-~E%=Eџ԰x_ŭ`xG'+o^Wz2kdv&F_mQadR48jgM'eww͘9۵'"oaqVl[Wctwf?6MqXΕ En!\v aޥ1r n9^3կbRrOWW8aW$ǙPep whɼ P! T99Uw p9Fȵ lzK[!v4YJ=ygN/1$iOM^mх(XUp4u|h~|Lrֽ#Xwm(uu|a=?{ny~ըӳ2Lؓ=-a$[j#4!{}5厶оԚ_Z'f#IKI;'Qސq6}][J #+ܑz{*bñbF"1YxV2T[!LJb=7b6Efki,SVr|?W@[?m8"1v%QAgg+1e0i)#Լ.bQ w:KUokBX h!YFtn\5:'[$&fA;ZpZd;u_K|v}V!}3 I>HDxnzvR`x7&_ ΏȘ/LmH aI%뙮! 0+淮r?9L.jˆ( BֽkdUDXzrWmL ,&'zHbJ\.-[yniʻ@6Ouӈ|Go yKriں^Ǜ,eTGY î>P&óG[vW\8?!D'ӫ-O>mu5'2Nʤ}`X֎Q 15~h:P~M?ig O% bsp_Q1dn20٢-%^Mr_/Nd1pq%Y.Ptc/!|P ]X rOP>xҩB~u3[*no5𱏨.6Q r>EHΙe1^Ls:u!-# 귴ĿF{z&ϗoI" <0j~icqJ~ҴOY@'c Sy)9#$OS pO/"Vgz]!*1lw6z)v`d>Ҁ˓ xf`%\5;JVl8=p ?覺-+-C|ߥȢzQjX`#˻iAd #ʌςf5;N F؋O<+}a Vd\lR4`mfO -{߂ߑ˜-xZ xPYue"%f2|賂YnzPH6xe1Q(s:b#'kדkneJ9X20fVǍ+6'h~_?x?xW=YϜ&oUbjQt8&Xi W^mI[^H%_-|oG]"YB펙[3fA|ߣ{[!=j&D ȴyhìhП,R~ÉAX u*g>Ld~~NI4lk;`ጜ?2}eIHfm, Z03dS?~.ut({Te_1np4sB<_x\ʪnW;|r֟VKr*/q&eJIH})ȎBb!M `(>U7lAgzA{I;W ] 5fF ^~u#HQNusa/ҡU>4'Q%6:B 1ŽԘqz:ם3g9wB}ⱌtB ۝mG[ 78Bn{sںMxi"KOvfɲlLGWe80NVYηZLv:KY?#Rs%9v:l]r0oKeϸwd<ԎhW|U :ݍ#b x흟WzKbAR[C3v'\M2 ˮ{2DcjrCov!Zb" x)S<-AXҪ,dɞ/ߔp\#]K}nlpbA*a$:#(/ǒf*c-8\u;~0VBUfծĒ.I Sy{d-gv+(=cC62ݛ0cy_$*?AiXld < - C]51y@O=,HS;.ζ4^V"tqt&ٔVlpι[(d!Z_x_kOs,;pD޸di%{=)f'%GwJlsJ|R[,;_ 5.=H)=`Bn ?켒TX9PmO0Z"t?$6SW2o@;+Jbҷg&s=)j#Ȱ ZrJG+3U}:o+-&`:'l!ONOhˆ2K*qJ_>5CRpFυb1ʏGlnG9̀u(*zt#i2joQk%G7{k">x14˶vYx p@{Njf'`G$j9-s0b !O{xM:X;VgؗR VɁ pV2곳K괇+JU_HiRWN̓t)Dl?ã"lQS&)  vuj((&tFYno垥{r? jӟ׳ SOUZn8EG gdUwLJ '?ξKZ b6*"919MjQiN 4[ܳVЬ4% M}&5vNY ~b7U W[pD`=}Qt5᳼=:j0C߫F|0"kf5GFTq|=v3_ZiF[*:ܺUŏ7*4;d&IB5m'ӥ] u2cC6dގ|)2vU*66(iljvZ)cfd*fcf C۝OA&^hW)=jg@MG<+B\wv1 uL R-ٺPMh2t }Nɉf YYtʜHK?c.TN[!lѕ;pU6p۽K!oEySY~hbEℤ1~9-ɔe!8p@u3O1ތҟ/*d b! #g`"Y*:1Wo>lן׳j + d㬷sb.|WAW(گ,[qOoh Bl:h{7XHwTr*h _- x0r qE/^j~mҘ0#aPPfV?Eҵ K8փ855phWvuLADNҡE',WVa$3zY֑-U+-!q##ר_}оg1 鈗iWߙC: $ߍb=L5pYM"Um|?y[M#ai輛wv5n`t&AVbca3^o8@LH՛tx|?: % |mMBtRb^}3^I4hNڱ:K '(-ݴqLCN ,eїEGi6`(AqjRS/T U]`+W;m=#SXpOzL5C1im"13xgd)dRj)ئ4~}*EdN %!$[Q(,. /j(!O?=ںzӎ E _&9f[<riӆ-rܽb^plh"%Ĉ1K-ihbTҞ %53{)IV=9ѧ;˔i: 氎>c̊e`A 2S.s˔.\aG0nj!|z CKP{nٗbMeP.[̶XpG8%`й3o g?<: Mt2]`sQ,aNY.Bt)u! M>z/QH2.~yjS*ߪcaRFZ*Bئ k0BVڕ'u]u]gf6$nGEQm:C]!)"hj B"vGR׃C'TB*S Gu e` Qyy ۦlh:n`дtW㊮:n;f;GU;/e;oP]jPFa+%+"x"Y?0r`2&)y?8_?{[A||ggOwB?&WDW`skV$OKHz _\i0w9~=-퀙,Ef})Dd4*l`&xhni(Zo<R'q;bUL1F=?"cEҵD6&쩶tC 8A6d4FĐH{ :B:%:2@n7stΈIY.b58&l&1n]hfЯU d|~|] 2&?t&bZz}Q(P7F l ˆgc'ls5\YGP2Lc|Z9pM![1~FR<лcgق"|6۬?kK=2Uu ?lj%d'[6$W#9% $Q.:u+S%:$ xn݂نNtRtK.'2( my<sW;7%EHW 4SOKKoy5&/"Խ^la4Őc/axJvlt4,juRkl_qj7|l {bj/N܎. 0O$z*FxjH' 1uDtLvGv4A@gd-BN[iwgqeHGPT--0|R;HIIϕ3jN"lK~Z{*Ɋn;VR rC '@E;Ut=3r->663 6?J 9=:C0jjG4.=1?:zʪ(HA$гJ.qGEu$?GE^)XNt`={Ed5ejrA =pR<{jtd,NDYnCXV"f Ux*= & Z74 %5ːf,ثpD'(ʣƌRo*ol>\%$s="BPK(K}oޗ1~q( 4'Z U}%Hdɕ9PqVjͷs2]W'GS&HK[·P.S,`QEzB !f}G<"tZj U<F IH2 m\zw&ܮh\#'EA̓ 6JE'eSũ gJuS!vz^J >B Ϋy.ͥlJ- F>2h,$7ԛ1 ΪKe#uP͸y:|"Slk0nﺩf뱾)9xx0y6Bk~=v9ၮqvsA(VC+ glM>9ɟxRrk5%m˘6O~3¡emv)aT( ,b8 A^ ESe>?AN"0AFCtBjC{e{ěOL\gӨ7tB4Fd%iDXbY"(p++474=xbg>l2:L`Kx̥bVv&ߣ6y2֍f,1AQ6d,\ ^R!1;msﺔ &k,RS(Xt1]^%1>ٞzm\C^~KKZ(IjoM Idzs5".n&go, T ~w4 x~e;gII&]HAɔ;+LeRaޘZlKpRPv®wRs8pTV2yeY$3\[orԠT)95Ȇŷbq.Ճ2 #B6KS9 P#Ԕ9&wG#3 ܹ}Ba?o}{u8.ջN$˶#hJT< 4Ϥ=>bƜmEci' u73UQ tqld+;+t-޻֧<LɌ-7D6 ёl;3>1"d2Z#+ tjލ6@Z\ZJnG#]GaA矆ALΨ!qR9R"lm 2S I! yI)8 `-'M)ݱ %=}ev6ԋ'}ivɱ[㱷j7nI}*{j,΢Fx舎B|\"S#jD6` '9)ΗH`2R({v H.3[sW opY#Z_?H{OǜdxQoSBMQCfY e`'/nx7ݮ9,nx %sKzsI(Xг'C_։C٪}5|n:o,h"A}N墉o-׬[Dհ/N-C8h/_;0"D8dՖ6['vgొʢHriZнK$G0ٖ(8[{w) knc牶bWeABqv[vwUNEM13^|&}ƆӊZ]r9,\);F4FTrtRvYr2pWLF/2SOfeuZ,~nG4讏YXT,V4[e^6~mP0}U~b|Q˅u!@pD6ev_i!ee<{ukCI4$~wgELؼCTmyD]Rkp_9' -I'j}V@nN&H6]6Mې e$DVqj#p<'6 R)X~ jfU b/8[Uzإ '?ob83I6c1[Pp SQr꯵mJ:R' ˇچ}œn&S7ingMC꽤lW3獀5bkOK@mLɋnXдʉ"vU fSa2&ɕ׻Rցii+Hވ>F_-_{I5vL#d@r!)h#5?j96K~BO&80<(`y(eRZFGm#/w3lk;y|lv6='V%f)O.\ԇ,$=U)2tw%Sy)&o>UP 5ː#x SGjvx7ޞԳ91덋麓Q 4z8J4JDSH 1 8j.+4̂ݧ N&Sgb)ANOC=9h86Y-:qZ&CKиUAjJj~xO,#+8{08ſU\%cP=Mxmo[:na%WiH ~91ɡl8 7o7{XvdvѮ1:QӡM b*M|u1@_F/ ;Fbhe+Kڍmj xL<;(qV_DD۶'9MWcxZQ*r2Db Wd_J'r]Fld C]C~ϐtMם.ݬ%f)(%sbZ9e_һUZ*N4pP~:n`Nz-u-L9kߴy'_ ~gy> {@J)vEۦfY+ xJ5_$tWF'y{zG _g8mwb{Jr:K 2 >PnE-^P¹!Cڑ.kOԷ߲}}]m'\sVn7hx7@!BO]yJ:y ]p{|($]O\EHw ̭n27ǪoR:[{lM"X/do1'#N2Y샠7o=dŝ0[bY!8BY>#[ڃ{ ^kc BcѾ"R#2 nMgV $#`1nO:jg2lwꭱOZ]'{*֥n0(Z.8XfrPyv\y~'J]7YUr:V% 0J}4쵖Pj!ؤ'kCtuiA~E#XxEqf`q4\ w5J)`YPLݯ@w{'@H#2DW2"(ףd/w H0rWPe6fjM5Ӹ@}ǶFc*X*a_RJ6I8%#veFGSw wJn˴M"׮΄U5DVݑr`jcoH]W Nx-Ku6"L,vq̀Ћw؟m Wp4cl7@>h lEz;|+[ĽFYP~綳?5.$axO>ؔta$!VM($:~\#\rW62]Ovnu(mMH931ua`ӡ-W!K1m0ӌceK^^v,?wߍb)j#؟Y䓺#HS)h#2x%@!9Yp=SnUA֕Rqq \Q0%݁PZ7OݸUeM!LP8κ۫=ƯlPνfY_B u+CRb%!}]}do2P]GKlh|.s;,P b3.m|55tYvexhk:j b-0u r=tV6U5YX+ɼfIYt"fW7ԧZ(=y8?!ĝbwD̷k,Ç,,㚜..A#Hn# Ck:WYlYí.?ynxR/-2 fԥ^ZJt{qg*b0[w:H(X_q5 rX},15Zrz=m%FNG@K6iT.\́\\o=1~З >mHm|:JyΛq~ET*=ڌvy1IT>`\?*3#nP:xsɍ7JsLrtPiod N{}%:UT{G߱3^3:Ks!2'ɸ1淽֩[K\c爧zr}赕 AP@Co8~㥳 'n!{?e -w'צ]@(6%n9`{u,`@ؕQc++e2i6ێsj;oZ'؄{# ΀3/8' Û%=Н6 M56QKWݼkIŹ)!j{>5Gܣ<\l* })ug|jl= j^toҦo?$#O^n9D:()Pvc898 ^D? ~/%;} m9(Lێ8#,"ԻR>}Հ7HW?>VDP IH]j̧L[hE0ToD>=b-p`gAԇlmf>vzz.%sa*fK;|ܓ7~'~A|?ZfxdPҽ3 : 9s >pR([PDct}$!xC9>CݛCR:-NAG FÉX,>]1Yba)ͭ8Wo}JfB?6 m:)=^?](Mi|*Wd\9>_z 4ee"Q+T66A#h*\Zb^Q; uN"gMT*- ^=6B)/qp^,y%; vxsq 'z&ʿJ*QA(xr1|v?ݵ'p,2Då;E#"[kpH!d+t1;DЉw:ڷ(Ӈ S7eOdpG{(Ch\ t\1ۤozuuD#f픲ʹ[ Xhskȏ%g]NӤ>*1;򲫰6\w0PK*;OTXx]NrJiްf fnak")G2.Xw֍K'MA5лd.R5F9xuG5ŏ&?ܸLdnG~ж48ʻPx@؉*c֌4](.PlSGyLR`4l C_uV[.Cala$prMw2L;s* [wuwT♏& (#dX=0Egr}gYrI1(k6?V0y$y.;S͖36S q-fBd\j,Ge+}u[Ŭeu|Ă'~ڔ08.F 1z~2Zc\1yV`svsf Ϯr WҲ;锃dqc7^E|Mf r3(ZAօEb̽.jްXS7=ń`ߏD^^PZ/U#߯xeBhMފJڍFt[ӭa&;2,y@&a `I+~R)iF XrJZv05cC#r<1u` rf^K]1)k"t/ta9jR?>8NČUg@OҊ *)bj]qV~r/.Ü'5MnSzH5"j*ZԔ:acyR9;VI*&(#ggví0 ޭyk0=.>F y5RJm5c}N)HtoQ$+y,*W}U Qm47^jA`'QZ/䣷٨^SSv{D<ܝD yَOEh:h 5+5>tShٺ.sS!A0ʖzgշ577jBZ?}~=ruf6Hr"VOna ζLWD`*1/bir$n؈_mSr;~xPOאnGk_5|D_Mf(ӹi'w}Ka(~ԼO%, KgF]JX3zdP=j1&l"XXpwG4Y~XJe5`.&F.dvp @Ћ8˾ڞ`n`# M\ ^ѴDzYr!,zP5LH,5g$A17j=8﫹.qmBiGH;6BZYGMhCU.7;TLHd ֋\WQ#Xj"OI)19Ǟ| aPn6C3 iAM6 dd! (BL ڜzkԃ!MAcQƵ۱-@U%$ {&qtD`k8]ꁆ?AXrzivQ*5frm$-=a<{an)ŐT됄 ~C s@ә2VtbY[kɰ6E'4ClMj'R_Xkҽ $|Ip[X-Ĝ5VYOyu7"2S~Y!sDpX61K۞p?ʠSR Z"=]Y&6ψN #Q'˶܄cUKݾ.%i1߬_ y9܏$"cyǦ!i\zk E]8|iiKh~LFy.Fu0p.=9|.xO@όgfc2:ۚ{E#Q*%u@uBegb׫E J2;$GO]JeoUa>sEA#9DƘAQ@mޱl7aUm3vkQmO &H_bn61'>_gEC\jրM->AxۢR Gciλ00swN}f8QGbD\sCRrK$"%ާ$j2CV4|khn7|C:~6hWWMKA-78hևr=;Y2M!Eq5#K_|:@4 D(7zw7SwwlZj !pm^mG 3 h g*Q3B:IOעd)LjfES,m0+ #޶aBje^3[FWL `'D1ާ'f^CagkzDfc'OGwreTKfbE$)g\8y]UyS8rVOj7yD8| Ut!m`l:Dۈ)(3g5_z1>FBh{.ﰏ gt(U,!M %̎^>݅׳ zl띡-y)Jȗ߄b_z]yʴP_%/ŚK; |n""aA(|F1ht1[-jxN~NNicxŖ|+a+1zt;%2Ga<~Wi1GerH}+S4VB3 ,6Bt,^_ 2h|Ne!ƞCuaiL z9AI9 x!:䵆HcX>{ 1R}0N:!G2ߜmn[X| P(AY R )p(.O>]./ HZC]FI/A)1R2ð] gzNDJ8Z6P㳎klXrUu+ qC"4!gi^5-Oi {ڔr4n^W . $e)j,|j~ ! 7 y-TF 0L3C1}Ѓzhd‘$7e[ ^j(}9%PߔukI4H%ƚd*w׋#.˳: ul㔽M;Agzo2~&؞p|5sJиa|o =6b"~׫<Cmyޛ7 o%4->[ڱp ,!lmް%[<~+ƯO. ֵ˯޳YEjoG{|6ξB5Onj1L&qLO`]% 2U@C#G%`6Oh&OXmZxq`gTE7CBޟ:0O@XcZR*JtdzQ_oQSm)5 If'uc͘1ʪ'*C]*hj7{vDm V4!'O*< qSa %\du# yI >h.FWQS.L3dUP gaT}by>\tB?|R,eI$o] C7&UAӸ3R1I*젼zʊN;j/]7zϷsqucv?}sF?1az^n{V.׈w=ٝw ]bxh3džiVhH| ZL;_b)NAE`g>Y;+`. 4g;F-2 1lXb['X82bUJc.)֓%K}ɴ `&;iyT-꒢9̾O_6ۿGUqNgϜzzTΫl}3G7za8<%Jh4}es%80"d8v7[sޒF)@9 3R} 3Pk!P1nk@/x#_R76Df~6 һYhI|`Z,,e *sѭ qX)],mW 0$ml06PSAxfb~lM`gC= n^I͞%%]1]' F'QDy2^jGI9v!Avx?սeͺex&יV&^ v !{{Cm]`(?BOly=X23+29éE{V2\0ׅ$.'y{QuP/jlAR=xqfЁONg01sfK7D)A>.[Zz5bǮ~ ׀M!͡ |K:$WaU.&ҋ} nxA+ CKe>~:͎bސ=?]Ѯ[{{U(_*Rrs.tjr=J6". Br\DwܩO>&AE2v&N1Ճ`¾G<8SS$}SS4t~v`RB݅[)=2XG^3*|mURQFpAuT,oes=iC*/ AۡkpScvD-g}B'ІkyƁQmg>՗S\JqJ^ ^_1Z۝&o~ٕY;2G,YxިI`YB#6HOuRw=swd[VٲyT!e¢FSq={Cp'E簪6u'&,so  g_^%H@$?R(Peʏ;*hҬ*T XEiNo7'8Ƽ@t#n${rmg'#PHq\5$jP jDAʃ:a+gƯ yFOuDWrZ7%s=Tt2`Z=ևi‹ZɜSٻ>avpd`) U=L~ ֛n͛GՇe7Kv}0_gWJ4d05xwyW}2(x*ĺccǘEƘpDKB賈>&΀vPx t8O y{^?a=lU {Zoã,-x뀿դT÷km-N;?eB{p MOE ҷ&܋ku(`=e^Kl+V8s#CuS7@"cӵzK:ⱞsScc'S82[lu%YT=~鸞Opv is8f:'oȁz(E.[¸_AQD8o7VHV3;CUChxH+%M>pZ0%Dɹ@ ck3O4'e,a!ko$ԠWUo,g0v!)0 8O卮WWFiuI,34TJlDXE" D<}oF&}h `&A쨺L}GΌ [nA n{!zuK2޲-4)mvՌ=8Y>wjUJ6NZ:8cf3y}RT*4 ZlMrH*'vqg]<>c5ކAnE4Grf8c/VuHG_*\xkbW.Y~ b; 9Muٓ?6d<[ᯖH?gZSpnX=Ǚ*s_zU_L$c&zm<?b: "κI7fT~\3 H?f Cs|zP av]=`-nM#`벛Սȧs-#+ 3>H"swt}h{X[>ˆ} @0䄹d<=ͣ#AzۋBNF1f):?ДOvo=[M[O8DhRh g)cYeľENOknvl47* ]U?m&3Z7'A~E pGoV"s]lRHodqK,bJH0upbH!F+s=69ʳXOEg߶ ,Н))1~q:b[;Ӽgȸ Lߛ}f4-Շ#]+ =_g`9`*;I=jO [*ej-?Gv*ЧAkfI, 5'QoM'N NAσ̿+ӂcOVKS9gZf>̾2h1t1fE} z(߄ az[8MAo^ZO!f60r'_Ãzh+X_zO5^qy%ޣ~chp:<VpFlutHҙ[yc- 1eaYr}ɢ.H,3hq]]L%vA9>d<Y7P_s-+_ Kl r} ׏Dz臱w\zUgX7t+gBԶם&t_)teVQ i>YYv,\[!lŷV$A9`qZkyO/VO E] 6jY= r uJNd C r#`? xltǰDs(,B«·-5EAe$goiUj>]ƶ6fʼnIԑf dԎ;3&EĜUPyA2SN}<+P݈eM͆IIsEA{q&evro)ֻWb zӉ9&1zMRC)lDEkNqs1P>#54UԵ$}Km6[rtYcજi8 RJ7,Ȣ }>=ڔ;{[]FYs5#&K+Ox#NKH]G! Y`$UL . }ї]BkX)wSxF4b:D+Wzr"r>o~'#ߟSEkvUCqIM\gr-ࡶ*JķzE{𬅇bN"0 ퟃfeU<vRܳ8aUݕ^ W]h?ABc40s8`L+p^6A|f۵iߍ6 &I +lG&S |=2!l.k8u;xvoF,Cܭ@X:.rZF9$ C{ y!r>8{K@zޞS{& ڹ&Y3c8zV]w+>|חx_=BA|НO_9\h&4ާb) ;I?,rVHzWD O.5WA{]7Niz1(E{]M.2‰\!L@Ry$Cɢ#Igm qڃoeC`iK7OVkAFO rȮ=5 et|y(w|gs.al# O S] wDԯğlob(Q5l8UU>R!6c=f{7pkڙͶRaDuSHGY"I?uH&b~lN%QҾF0wX wk5'Sr0^9ml2wAC7r n} y4/AQem_s˲Ru|NwF Z;9g~7~< HYB,mk6w"=#TAbG[mF{M@D0W$/r͡?mQVju~RHsBzKip4<іE2c (HezD JYgEу8C\Ӿrtq-' R6W?fOt3#)2¨FIڐtM@0v]pfn OFł%l/g_߿}Y ըS+ jHJj0MrDMkC,Ξa:`1S%kzU h>DdXݤFq> ӧMgIBOXpe4݇T>Cyz !~WUU u ѻlOHݝl[64 6rxw-3+_n{9 ̗a@0x1KUm2p 0Ui3EI+B䡒R7BKzx_haJU%Lxlw+wņc t&eԈEls'<;nJϚ_p&H9jl]MeKszfPk,9)fK ?ԣĩUPd9%}t#;&M'DJtoB&[\'^rGk}QZ$}RQ 6>ce<{o/-gU!#Nk9zǡ0FofAO H%:` kboRc3sVQR =sgZhUm>lo 1˘[^gNh=xTxu[R2|ys$"s"G1y_踡4Oy 2;h{_o7ZG>TOI[}̺X"I,ka& G$Dn=9>`Tz>2=(~P-_|/%=w|b]C[tZ:>J?sq16y˰q{'Tn/$ɴOLʬ x;1QI*Eؖd]ĉJ;?Jhoɵ}$j\(u_q<ѯDTsq:[c>x?FV:Y2T.(E,%9nqdڋc?m$y׌n7VI SV.Ev0Zn2_Oqaa")Ep: 6D%W#NF</F^҆tc3XĝbAf߇y HڞL)k'98#WBZzRŌ88bJru̲ͣ?2[MA/4O&"ޔ/0g1ѽ*Cن3j[Z>§&YBCfZ[^g*N 3=q}ߎ:1D\zNj?O׈ЍQumut y jE,x̼wͰ8AI+gVOQs=>׳P XHn,DswZ31p=[~u[+h% KS6U%ܻ !$"1-տ6{c] 6k<ŧ"77I2C㡶MwIUPNB' [ (.6{7HHdvkc*_gHjӸ|arO@>~<ݨ|}5:&&{~^51 .5pTqK9`6`k*b}L/I体B9i!#Bq)`xeC׊ل1M ]A#m+h0 1ש!.xddXXMww MٹRfבܘ?Sx: Ҿ 0\FyQ3^#-gRmIY@^/X`E 1D'lh5I=bںPSQE=v)dzy^ nvhYq?]'2W%"yʯ;ghlm7[!DI iے` '>_6.ך/nK'NPVdR{YZe(Nw.ӁuMު"Ŀk1lpχTSyՂ;a쿎/Cks;f vTnUظ o2r԰\%y< Lp~ޕEj!_oypa՗#jƳ  i,]껊Q NnG' sKVwPjk֫3 yOC ;Eoݕ we6|*Wу?Dzk8Kf.BC>2@<ϮtʅeL ookM˳Npr~s ~aS}L7 k }.)|"@>!8QTʙ<īu95@!QEts9{ y gNG~ptIHUtiٰQHRh%֚]a&D_/ltnm-+bl (9{,;5ڀ veUh0h?u!@IَDWdl7Ye3&Z‚k5<@-l2)o03⒟fa5g|Bpr=@œ^y!`nh?0Гvd{#WNlo5bohӸZ0Ze>o3c_?/J}W*iϋ%B \!i7?CjZA6X.8.=%ZVėVakɱee[i(8yiȓ1]A#[2[IKF"b\%)^2&}6(O 7<#k>S虃oKcQ.Uz[1m&FOUsכj(29u%چyiN^R$YSD^a<RΒ?H}Lm gcv["gI(PDB|2RDDr&Sg)1G ozXd^$8"؇DCs8aWo)⧘rBQ` 꾒м~L/ {E '{,:PDx\'8odf;)jgqOPT<,ki:Yv9pܕ\ɷ>AC4{/'-Bqq^2 z+Ju^6L-b!*عq3WQl|} ۶.c cUtWg+w702@C8VJ<}g_ P|L$,XIU,#ڴ[-yҳSC(0e7G*+OPWP qǏ輛ۯR,_IxP=?kiwnpgm:/#:۫3VE;8"Ws aZ&B $d}DĆZmcPpOri"V r{։]3|Eހ> tV!:o٦ʳBjLƇПP=YV:)؅ .Mz6Z9Ґ%)t:X 55L8h9j=|N@{lԉs9{?܉}4avmF .v!_ /"O*ͯ%hCX*,bK8bDowvª-" d[nCE3۫[%per+yfa??#_0# e40OHvG/!MVa p4xrXW0@yX͖20U }0 agN!̥'#bcO|PiLGqVX@(~ޱ/?q[l«>'93EP OOߑb/!H1zpE$w -[W\ 2`-7,!A7с۫n%P1$O*Bf˿x6V|ajWV־x2ά&rW AA8jnFO >K!PlGͱL)i?#Xj7wj[nxmZ+YU`z ؉b(w'ǐP0EƴE24YqH=ٚpƾJ&L"w6U8w^,kU\~<5 %SP7ɒ+Wm-' ̜9"[Q(=b_o߂%:/˶pu8nn;i޿<HhŏI)lɍhAleG6}i6@֞ĺ;M?g4 iƄ{`82=OvI謘PX[OkNtx?>4AOG!iJYuW%+(nE;$zg-WJ'hq|9-Ʈ oփUG9qe~HF{xTԱJ'RokW:56TK)Wwy:#zn-Nj}D(F1֫DJm6cGqS9()|:k(xG7Z^K,edbDs:U}!Eɫ-8!o`叟MMW!Իҍ-z&]מ}N8{Vo o$T/(]YVSaYklS%U@?EyΦf4]hVx#03 ЯE[Do9t_SuꬪY0 zTdTfu0\58ΒC䎏ݘѰgY"n, zl n_bde-/ G$>C"piZJaH`agzPTث AC)A Ym=}D@Xpڍ8𪽷3KP>T},^:]y2sVD[CVmZ!tI>"C3Hw)z=!_OЖ Xe[8jNc ~sv)~X0] ~7^W3zNrӱ-0 TւNȯK $"^,i]Ez"\ )8w}a%[/㭢3QxnGY%JDn4Cԩ]oXN%0u#C.YNj61:﷌QT7y9x1X&DLB}Fww\P s hbzG1' ݝz@LCƨu_/d CF;lQY3Y\5Ǧ9ɒ~u~3umE |oІL<`E86ԍ[v;ҕ3m)bOtMS?1KeD@\XSԯe/Bgn&*dHX\>MdT)PHOhXVO4;MՀiGVqizfm&cf˟oHYfZ`1MjjV'P-6ds5>]ۯm=>(p_Mż{i '"5prS_mY4;qЗE WhT}ʥgϜ::33$r\+5CcU4#$}Xi=x5֭.2|;r}lWIkn'f2?y6^}te4lu.b^b}ľ(hGjj5B+8 ׬B5]lSl-_η|9"3N4^;ڮU.F ʋ=Η F[ox N9pi-vx,1Jg PLE.:Ѿ'w} [pTsc$#>$)^ 15Orcps{``pgȡ Ld>8 $c"k)F-Sy)FQc!o2"hYA8'xH߂e %O=!MhQ!ZGGWUe$c <;1 X #at'Qە9\]> [8Vz/-l<6(.?a(;iu@CX]ɘ[rzm ܖm` 6Ir9 ;c6U+JxFTF/ۧp>)hnKz[!X yC +xj r/H#fNt+,ʜd%iIڹ(*[ReKrN Weݹc4et hE8J{%p+̸ZW_fO#ھ 7o6æJ1I9*%f\89K7c-6Fa>2kŞ`YOGEGF+x@;.v[<$ԬT{xg TH<8ă}3D ?ϝ|܆|'/ASdG$vE':ZȊXN$E7Kr˦Fw֬Y%@ԇ5i*?dY4^g_nb=CXנaF;eݪ> I ='fG.YFkcm텲|+*`9,^3v= 5\pb.K@5fJ46wiHDBhZN9Y 8kC&9|~H'&\1 m 0-ZVRԺerj'ֵ_^uˉM1%X,A3Hq\X'`Q*<8r j1%zDO0L/Q'fwR"\[Ǜ-"vo"UT>] D[6=P#DZֿ% 唝(x4ʳ2jNqDt2Z 2Hﯸ^qm}\!Iaձ3;ش@x)Rw]^n2uj?@30y-VdBdl"'$Jt$`C)TnqcءRQ*t?u/6{BsQzf.Hh4eGڻ"@;) J ㎠!Gi!Nu%JX6.NWb0OH-K'5q&7=L|fbڦzΪs+$ )ڛ\aaky6{giܰ|c湜[O9Kn,+_Jw(<ڈ4(]EjY )\. Ȝ '8 (b?dxm As{y^&zPnuFFb#[am ͥk WuDڈ f1&qH,u]1dXL3U o|qwLɋ.#O*}{/C$ӺT^pѯ$E vp#cQ[Xz;k MmƖH>.c Cڞ(Q6̮,}JU UH~k^8DZ5waҽ~vT'bK/9ף;ּݨ_'4Tez{Q{PlnUA~r'WM͡i㚛zBNzݑ gA4zJ6!ŘJwG2o mޅ2Sp <=G˘Y+&fMw1k R8c; zPzH8i,fFk`)KR@eV^G,n!Kj\5 _=K2ϘzWPն,:H}cf)WN۽9oq|' oןփ>mvkVlu P|%Z\2pX[8Q.$d]'Šǯx"}s>?6m уփxwRnEPN ɂ7`GZ$$ ]oƫi܁G sV.T  ;Q.fGFAѡN헛_r]X~pn79i10|^WA9JX5hdBUߊ$I ,LkI4t4B JFrz i5Lv4cb ~"g[25YѸpTCK?/k6NP$~{0@$EXP籩SNݗ(lS.7  ,2mA<%N!leUt\,TcۭUUvJ}G!9Qd׊ ܄c\U9ƺ9[%9RZB7I r|)F{t_w\aXl<$0|8œӴRƿph 64 @XS2 QhK/ I2Fm{"f3tβBd:w4pq^d첚$FM*TV3 +xt(]uE2Yvfy͡5Td|R#ZR2|**)%T ζH>2Ixtja;`.+"A/VDX%ߪzQa TujJNT澩䞭fAK՞-(QݣrOcSuZ4vWsܗ} 0b8A#\xV Y o5t[E}-^iXQyg,5  ODKq皙#yP݇z/:4 U[ڛ1ԫ@EBշ+c7R"rdIւk;# ̶:j&VفCEE0BÃ,}e?:q!mSqL0$xD.@WKp'úf*=|$66g*RcL[ -Jπq9haAV6 -d;57n82yD\hF=JxI]ya7}'r?C Զg]u; }J* yy:RX"R@7\E0nw54՟$.86goOk"Jª-de<^w~ՊaᣥlIl}"'Mess'`~xTU ~htkղmO:juT]Lm5$69 4ʷN$c>(u>)QQ[f_7˳VHhϨZ۩?XuC**O Ԉ[2e6|{$\7 4FcBI"zdWg-rR'+5Vn:%SqE"lz7MG<^9:< {`֏<֍z fl|X2^ܼcJSw !h\[/̏$5NT95{$D~(l*Qw2}z%e ň ph,k:mIFUB8*GVr ]cօ(QiK@Up5?3[>jo1DDq~%GղNjΠ g:ۛOI8jA&gu8ϴ bče|\w+z7n!^!yh_%?|>{ ~z5\r|^SCα RwL˫0xW>2^ md &=`Tv~~gU8jr88mf6*&In-ȃsLͽ^#5wo'<і!&g8^jfDSt[w G*[aLu Q{V@gz6+?EĒ4# <)RcX{lW&GbӞL҉Cq9WDUl{}$2pokPQo@: 4aG‘W`@*a-V\eH^G^013^r.!.A>ţVگZ)9bRc؋z/_p}"Q4 bǤ*kJR_!7jhEޭ;b B+{Դ (TF%|E O:)3VKl'kDaOR~''@q5{N2E-7cE r1#K>U(R ,S/\-s~%PDm+K'o %IFSB<7L_ۑqIy{7ژ\ypU;sͺCz e@r_2J3Nsӟ1ԪW߿2ŔQ(Dwz! O`;EiRG;7ؕЏ%ÃKUA_R?l,}ȼVLE]_N >O>!2%)LY1i@ ; O LղK?,(ހcxt*p <% pMsmfVG]s =GJt**`lVR$$oȭ]eCTsH2ؼ7{ި/w.`HtE1L_ ݁ |[?j_WH*z0 O-#B9BWSbY.$2rr \o+` E'`@P;eo :hg:ǟ8bRXu3/jaD[cxAũ|YUWjU[^2v⾩S$Ѷ߳8Kb'rq7n+85bc6 .xI5SPI*шi B#e?yydX?:ôU/-K߂-[%3"LyՃ=KণlpFꩌJ7nE} maa\{Blʊ,j \/wCӯGmݝ 1IgȀJ+gfG%#/7Q{ᅰuXMRx7nkJD5L2M86T7uq#, 2?wyXb}Z3JWW$,{9I .lZGt2$(:hҴAFQIv9#gPprIs~w_( M539 ʻ:'\U)pH‚Fٗsl/ͨA.nk(2wϷss?iƭÙ _zw1_'wxWKc0_;! 6ї{v:z֔c)g&{݄g)b1`z@_Howv\ q:^xӋCϥL; >Uy7q`}j`5їb٭"u*4bx0!9S(ړ"; %4ss1\1ǂ+=tg@Mސ/8P@RR? qGlS]; hD &ɮE2蹥6&*@mkn40)ppmkwaᠤҞd/a"yD"2F!8S&Vl[wՅҕ.\K|6S4?D|zu9 AzG-*eh_Wv9bfW΃ZG!oI"9dL9"N&\+C Es4_aY${_cO~8OdfYm_|nJjvZX P\1?R !5^4**(;W)"?1KZgi&mاYC@z(Abž-y1v2) ÿ697Ńrg]u(K6A6Ф>6L1HD`%ɔjx zb$k6շ_Χ3q98Uhy0p{w5&XRӸN|[yQ1kjXdr'19T%DcTU Ps\fŽb^H^`ۛRB^W< 1rhJ!?`njT#o8_S)I]@:_6CJ$)~=枢R&Oxm/*,/éa=vB֮f֪uo'<{^>L?mԟ)Z^ȱm>2du=C}(ָ4gKhx;#]S|ItaNfhxnԌXT[a*ɺ•`=|> $hь]` ',FWOcv8'>⒓ki&P/me'`XIrk}޹nc6Fx݉qiFT_1?lt'E 7>ô-,d\`~o|V*InʼI2\!pU9X$q'^~O,cmkBMTs(Tke}6aM$2"m; 9WV[PRA2v&!xHAsq* "fQ`Xī8+NZbIDL{t%tS?2UQ][͌ uF{c:E 'b(/踠n{rG hr, X$i/4t˗l AO:SB_ݡ jTV*˼Jc6Sh&C^tK|E1 ׅEgwA] ʴ\b& dXƾދh8,Tn} 4"6EZ&0afhktLe\<5j_Z(S4(aPy|Ӝ,+CIp pY:&lLF?j"tv7 zgq'%%29sv )(FYo\X"8`CHm !/iPlG+\I1zxf0D:@4``<8G_kMʮ{:>վ2=aZe*dI,E jiP!o7.KC>= &*լT9֮U%uJ4\n%RGSդ%9'1dYw y:ؒ W.d쒂p7\ݏ4*Xmf8Ӊ4]x.m65|:UpH VWVo9*p$QK5"--7eV0 C2m](tWU/ع3I8bso5?aF\K, Mgs{Wٗ^HP09bE2W*m52=*j qT,3\ҋ; &E<6G!/Nq[o?qՌ9x2qDW}yBa;ds=X'JƝZldf@7<N\ zچ~N=pV6jevgL iX-zZ-2 +"qeAO`=RئTǣi_?fly2fIBS-E$7& Uz&2&c *\L.!/.)3ޔ]+B|VE37hUe"t1sIA%is~2hq#ukVXOq'.aZ?:ݭ>qx!6@c9u2l@aǶ9Z ~((5Mo|YL:Ze,}g1@sFoI6px:"N#zʟg8[*bsJ:*#B0X:+5ِ{M0ߒFtx=Q#陽PxJ M,z0Tz6i).*+11(X8džX[%Xa&nSa./M*(Hܼx"͸*z-Y":$PP?,S+3f xIkj~fLm}[rf$4ZPE3wӘQ$PF mYNX=Th9 ۚ˦,MCŴz *%gq+wOq+|D xllhl0]&08jt-p5ha.V06EWjAġ#* %UH|uwZfRRJ0Y1jtFG7`O ;\LW?w ʸnmIv4QeZe"yv5]+AjUa"ɚ=lRJVy]!C1wRlqr&H6xI:\ ,TSF҃,^21iFgS\rWqzjld|ޡO?ei8m?N՘%W)$+V"cTCkEV[{/0O֍f߰Wee kӋu6|fp6, Ѡ؝N~=@'-.U%eL\ 9?{VcϽY3K90Q}#͛GjjiuiY] ZXB_UiĎ˹=]y|uE}1GR5P9!NWO݊}XNڴw%b]- aea~f\?W>\)O$6jkҟ h>h;enMW$:5*SCX|'KSEQAV)*ZRp:K{"^TD"݊  y̜$O[3\\Hwhj{f'rX.Ϧos6ڟmо;6Ri%\ gԺi^&2)?1I7{QTnBW+ZF~O-feX,>h4o)jQ# R[}m jǐ!uZUeZ`sUtNRk&c\XOm&M;cꤏCy5j{{l h'A:C+۬pF]܃.cܹ:"c\Fl_;Jh5IdhHDXI@%V yq?]٪Mfw6h@ tAžʬx]7#ӥeR?0#IC3چ НeʣGAa'9L9 ;*3[Byޥ޳ahZHU{Q vx;b*ԅ E5?Dm9eF h g{`)mPO5'͘i|xY N(pKzusO(f2ig̀\vVYps~%ngP;}v\Hd&tOZ9"qGN[0})հļ뫗 NbAcӧoV @㿙=>$q4N阗k~%*QݶiȖ HBMR>=vC2SQ a$^;%,rԎlb~m|xQdOe5t5* <6O!fK&ɱ!`!YAHcdV6څrh>D]*pG5Tj1 Rk~ܘ!Xzro<)>胨Ka/D6QPSDT4'VޥLcmNE1sHM, FSrPKխbH{WԄuhq_fmOmr]>e%Jء>hfInٓo[?/DV;9lmJ֠qs<μwZm.VT=6Oҡn0жmZG>iCkGٞ^ỽ1;SdT`r|Q'bZ+5CcoĔBn5KÞ(QSȱCOZek|Dࡡ74e&yBf?{xfsAKF0wx,9&#B1ܸUmj4EB[/3Q͎pd5|v;_S*s VUcٶYاq 򔝄sŐmX߬%ڣ95,v?QMҐ zN^1 GZ5@q͒zv9rZ}NzxwX>/ZۏpDf&BחųE=Ě(*xc+I9YGmqx̓ﱼ%>~p45XE>tk,lB\Ӭ9I|%aN\E~La:*1&pq8A;h`zzJvahs Q@8,rR]Em* ˬBw}Wίzo(sSb͋iboFvpJ52'kx#wJEy|_ /1Ug&Fn|heɋ$qyo ~iC۷<|/1~47%0/"=VxF4XyQxN{ۃ>vf1V39QѶSQ;fĠ(zoEnΈEGo"Ǫ&t%^a"`շv#jbyRR1E;ױz+p#>FM3⎚:Cn{4;ǁmgY츓c{wQ(%+yq a@Ǭ|=vlXSG@& M~q̺DEhIQQ]lԘ,W˔^\p#VWSML 05g:/Im+dݑ}fίi r"աhK4A1gJR^o]:xJ; ݫΓ5nM;/mx恄Rχ@:*+,#&hrO&9_jF=@ >$8)9իfDmݠl\,=k66){r"Go"gijQ ,G||2VGvƽ{i2nV[wۙKN@ʎ^JxQ ;`6uu@ J [dX҃+Lߢ9mRQh֫5r2d!vܦ3:aĸC3`UF+WۡMC;4c>0o"C|uwd_wr&Jp'+ x[.Ht*%3@C 8"W0sOQL4뱢{D.4n9(\T`_`_`W#A=c9RQp)UW=rjEfe uXU>ezɛE~PA')8 ~sg\F!pdɽ`$)ԋST_] HlO>(_wo͸}6 kqrߒts,WOrhj;9J+djcIqqymGlu8 1GϹ|1z1' ,RѸ?-E!M}HĐ/ҝ֫`r0,8bEKKm)h9m Xs *u'c?tZ\kW6ާ@x%>d2njoAlH˹u0;bbϘavoؕ"Q2!?eCD}vO=2e^Bs "oS~zӮچ_Q9Nq;G{KޫjlvuL]Mj?>Y&5~.ם^r5yV }czD Y`80Hϡj]dV q H~[[r-݆ffN'KYnUoch1{6<ڨ7Mz752Qԛ/ja;mIV2ĆGc9)Vj)MJ\\Xpv(w;y=:Ȏr\:~\'"YBZGIPB=֎̾ځT`OY2)7=pĩ/.Tsvn3;I,d^?Ë`.O]ĐD**c3qg^wÕ~)粅5aN J'B{Wt):-8C-$D.c L8f04_V]^{ . umS;%K9 ;$G$wz+(TggXdjGUidOD1]ww||WBvUw.{=by _(U8Fkh35(B~%>ຸպ|O5)M~fW8fDRr-4h;z*Z7خm{]Mذ-_ 'H:['Ϩ*XWdCu(F.Բ[~Z̕>;o377XlTv]֛3qSfKka$}ҾsucոcN3#NpJ N 0L0'gnz=@b9e)I?ˏZZ0$Q߂1 q=#Xd`Y5o`ZM\4էs[^3M~Y g\UȒ[5-@Og{Kap4=;'JRHcJrMyVRD\ð𭠼Z\n-fQ[ځ ,i$$>Y!M6<5 =B$Cn\;{h2 H&b疫wRdPH\R٫m}5)Vn \i }zvp nǮWb e0~M@NAI3q21ysh+W*(G)n!gA.O_fV-tΎx('61}K7\iLI Iqr3P|,mDٺ?V8|b(&-1J}{- j9"qJLp;X/Eh?ctb#$8_#Z'tb W QoBb9Z= s5$c,'&ʵN-HߝtMڏM̨n"3 p}2N]d.!e}ki_6ЯU#,`ɔ6m=ў}L!hsc#r"m: ZKJc"o*>~8p{0P2xl*`CpjJ'1ohj]=N.[Q/^%E@,FξcF!E4fTAQڧtEB.u|\AQI$rA6JdQ<tJEδ\N;u}g&ɲ\ʼ}ĐTMDrG)M`MI;Pʃ]7wʡG\.WlOݾ0Ft3TdqdJrj֣E'EStWEoP(;aD2)s *A^tlg;UHCWsj@[;[res'1?wqMand<ɓp6VBV?)QTU4G\=O kzu_c kFbg+jA} 1uT D NipgQ> `gyoWAh#:Op2ˬ1B_7bm1jWe+ٚt$OU|Ő㣖 (Z ^)))g1zKhgnUeM yt uvS3"|>%^~ܥ #fr}cG/1F==Yu 7Hv8YE[B )[Lw7ƪ;0YGeTMtlTv|_ty/]9n_sr|2`L0tSƈ{:W=)c>Px`bh(NIXedܬ.ދ{bL\WĞ*sjxݭh>YFx/ YN8,6Z 鼈K"?LT{dazqNM"LK'oY '|,77dx 46|#*:g|yl S 67uUt ~,I0 @.Bsb6S.[R 1(vV e= Hiv׼5c3X񆉘؊3pvN|eyTBdI^[-i"39#.DЏ;EJwjl_ ěUeFWwe5zsCE۔ n^9jXƎ}iV NO!ߕAxU`Br(#?"q8L)3F}6e71qs)hSPHPb6 ~>IZu3FZt\$ |ULr n-_DFx *" (U79Z(* I6; 1HdQ/;cNdV]d΢2y젚OpUOQ$MqەP$&{J bea`߾Q>Ƕ?qۖNa;ǯagk}ocO8rd 8cd4R9 Ȭ;B$@C!R$҄+\w|?R&>xl9iN'`P<1?6 FzGcg9 P{Cu<~iRaRryF~:{Pv .ajDׂ:\qGr{rq\o2/@w9B-ӵH;^X՞KU.Z*ɲq3Z*_bFV?v>IJpM ze3Z޴_ ن8:9=ar0SҶz3h0XZ}h 㧯"%ض6Y#Zɣ/[Mg z ijdJI\:#?0}vdC.:qL,<%a.LMTXzQ=,WcD&I&(є llVVFâ&{kFy yqÛwWK$D),.ڳ=1aHlpHHIni`GwӮr"jkyRYU08_}j*g& p =2չ-ӷux]H+e?| lGg\F?%ٛb*"uy.rkB>b28Cp4)`*mɨ5*n,"7>tOLmȳ/AKqi[ljbAƙ|"<%Z'œYb1nf9v'uMڳ)[p)d0L s_D1ad'  `F(1v r(SCX|Ҏ{pr٣2Y!zt_ v.-A_e 8r!$~FjHȹڍ!0I]oAoX+ t }xm?{3!`h'#*=LzF tbg4"]54{mCEnF|y{kƳ2` G+rc\HVXͻL {$}5i4=g<3tO'e삠ߧ.4}ص)jv^W/ }60 aú>C!B7g~DoyՂ*'h б*]~|j-I(ћ* MQw˫sޟj Wp ҐcPr. <zkEpoõUc˦ԨP%A `Ļ\8K^'\5{qna4O[sI~JtM^W[=)9|kõ4neAf9QK<$f[՛y F_`](U'||hy(huf8FXjT}ydl}?m{ݭmm$ĵƈ%TA yX}-$a22lw7 SDCsxŁA_?}߻s]rchKFb=@_94MΧ=5 NYq,"^3X2hEO$ I ZI$iod6vD0L m9 P<6pѝ)/ 7]_q-gzJ [Etv bf_xGoin{RgtylCd bG ut0 j5WOրT0u dyz|h+ G d ؋uxiϯ vP|"J=xDz2f=j;/08֟ v_%Ci; 9y8ʯiZHsŌ1#yJ(|WJ]>73E:U4gUrb<Vi B'1[j0Lsb`\ۂ?#LWv9yybP %oZ3@B3ci7`@N 5tIQz"lr0߆#ec2-VSVc%2p*Cң-WhC90ne4 Վ@hU7g\R%{gEw0$KS>{HNBl˷zv N ^|UD/=o6q/-ЬhH9J㾾3zm oߐO[1I$^-O>|F-_10HugBnn0ؕS3"e\(tJeߚ=y؉Zf< Cl%Ih%kA\uB#yM>z# S7/Ȟ]K+n49pzǾ}R}O:8q3 NsԜHz@qQ(w4z xьJȊ!5_n!*+7y\GEv7Xh1f it㭏,m)dhMܛ8I̋KQa8};o)JsH7zWQ`m} >w;fH~WB3sFܧ5z ~<mhoLdF{Q0kXO={<({9QF|WUer Z!}n")^IL$%Xujm(%ΌFVk4g&ű^G 5o!E0Հ<>{Q  "@1濰 lq&Y yRL]}$B ~:ilIz?3,4;b0x? T#Ç˼sl*YƁ2^QaĹ%XdM'cF"he)) 5%'HKtn'ҞC~1r*S{wa v '-T I3^& @n@(eHpz^D"q:0$g>#zQ jZd}(|yNJ#i].q5lVC̡K!6rGvӚ\V\mVfW eﺇ[$ ϷGDݜe7Xb%&33)SxwFL~vs3TCS u^qش'5 6|ByQ?Y_U2BV,ɧʫp-w] 3<̜VhA ŨN}VG͢Z)t[;ߕ4r:,0ТyYw3b\1)4\|.cpu&9]_L\[%]vf5f݌;|&38fUޚ Əsۊd.S%6sP5f&&|T 8y)G>C'Y諟G"\+og:gF8m3!y(lȳ@sB\I15AT9:z8mej%.Ƶ+C TWN'ym"C5ߨ AFشDٿt_01 ]ҝmː<7ẇ-hW( t1(oP,P/TGA^jzn'NdTUV74<K\;Y"}Σ]\ۊ@TVfcOfkCs_p ZOjTǼ!g|Eߟ݀w:d'Y5zV^p/m~Fn֠1KA}>Ͽ ,G(1z_q\kX'*Xas HVZ- YFY6,W^z:gUVWHƻK!f=S!8ta7Pb̅vz"Ff4au=v}`<:ݘh#G1dh5TJG_ْ o ߍNe?e}F\uVpNϭx<|3s }CvļBލ>#vgjԥ2v-2*u\."+r&D|t)x L&g'<9Nþ,}I6<ӵ$&,kِ7(" -q0 DҐ tk)[ʺf G Nn4x)f/@8=w[5Ckm^fQsЦ+w d]P:1͹J]bbLo4NcfQZԢ3BUVYrO2VDg.Ĝ >CI^Fh#>j&n2Q:劬G$RvuIփ4 7S_bX Z&-8@J[!މz2`D[0tSð!d#h̽K8Z|2{Y7O)/X?!cCL#B/hs$zKUpq3{s+(/p[HԆ|k..lDqλ:R"y~㌰T+0ƚ|2 ޓȡIwy+]K<,"Yo|?f% ~g_,ͬ> ?%dOeWj Oѓy;4Y-@2*vtj6ڵ׳<+$%!mD6&Ǿ3^5/3|"X`L_$1Z|u2BVWRkhҎsP7"OlK{.-%q߀F3F.tzAKœT`p P8(2˕fZ7m6)jيӡ? O^㖫Gb ӌ Rlk_{x{8zpv{=+~so붃 Zb6VˬIèݒ]>ed/ E☳=)itgy%\ &!S&u3 l (mDJݟ3s4:c}Ss0*e]R󢖒򣰉jMDx'HBb(fux{Z 㽹" ܼX* ś2;brQ=֋9yq(|@)Ay[3+JRs}FǹPWWx./ޮ`J//SPүKi$4uhp{p1Ik鏊Œ7 #&7/ °ʋ? x3Ua;/,oNfhҺqG N'2KB76sЊ3v LkFO8#duixo|1ltU [x2&;-A]B.Ov&wOpZްYЬZ*Ei ȕq1v^7FlͯV=+ (i瞄_DgS=jrqY/p$:Z]`z>S`,%>VȊ;!ŰoYh& 8@Ҷ\^YQMk|6&.mV^YkXetoB,LN*KALξa$U{\{lPI!1̅Sm ųdMC FK O !эvF3rɵWu [IoA>c<ђ-_e !CV~G=pʽ~ohox,H8ҋO^˟F0BS!Hp=2P{̖dp@nk܇JBN,1搗b}~ =!ŚZ)2TbAI/$[\`M ^,;'[!`l;G7 -SGӯws:]DoKA|f!)itIҶux˹c2 ftHchݧʝXn!cڊNRu#g37v#h̰`3b֝alJ1 x\<&AZ o.Hexx?S*0τc''I a\m;cHG-hB㽄ُo.[3N=t-I1gxlAɼ-*'C(RƷEg/{cbڜ_6(>\mo Y(J*\ ,8қ1@xUh?ITQ. .BfLuJ(bDsO@Y09US'nx7Q}[;pQcژ0K[ĺJЁ̋,tҚG_2*hӀ+_brnjODp\/yp9c8[ѦxT" Bz=\MݗR@pz9O,xn1,VGXI<+Cr{eܾV}:#uc+F@boQMHTVz'vö;ZY>1dO:Iecx+V9l`\MyiM Nl`NBxT47x= tnƦ sG3=Y4>Cx.35*y9[`؞;>\'sg/MQ誣z'QFf*zѠ"&`V }rxT xq?Z$9O-wϊ[7[a&15? DLAhU!' Uy7 ><49Lji6}ll<ۦ宄vMj>qHjGfl5 !u34#H\^EL4 ZŎ";}X1: #6>T훫MaTuU2 F림y#pANfB6lSm^߸Ј)Wϭqđ/pežOlgMdC$)\=|-S>У66?Ⓠ FK+Y hq1Q2`"HX/,,VΦa YM?'CQm:2 zQA6qU]5B!U3˸V ?WX/o_fs ѰE%oSs.kc•y 8sJ j.-;.QoF#9nX:|,>ad/HerEϨYgs8s27/)6B7%gDžBtph9Ӷۥl;5-3$8 a m}gCIXtvU2^%=ŠcI?~R+^4}?Gmq@%quӻIcXIޘ\钱f;\#9=9.Td}>؀ji5uGn7z6=oI?+Z-T-#93C 笵M͵MP=2YrII PVC+tLg` ӦwP_jH~uyNۅqW$ɻ $;F[}lfܕmՏr% O!I6VӻZ$חڀ? !" O'Sٯ\_bK a~z_y+sga5 a}9 uIˢM:ݟ tN C"$YCC#@%G-^'C:&ӽF&i_R -Tہ)E8}^tSR))1q?zQ4G%G̐6Dh`sΘxbuRHѾ4VOyWM}8L{ cߊp=zָ^6QKF*mO EX=I9:|ʒp}&6}HE@l.(jwQ9xoZ90RNó3ᩛq۫; .#c7}#t#4dV)PYExHp B|UNܲHzG$hUEq[aɞ,5 xks> '+ʋS;,,iӈa@u[ Vg+{"jpqƠKk]Grs|SK|o#c@W'W%:JD(aMoiSk9gpnB6I;V!j$1~qWIu] PBgxT35y: .e|=l崝JT{˪N P^0yc"%ۯX.xo+2$QȮ69jW̒V+jh1P¹ePTd*3#WAsJjYuF$%1X1]Pk^')s8~<EP*yT=^'&C u1tf!e"t%|\RxQGYN_Za_Q$'hU}A:!=y+9\Bѫ-fu)vؐ[Qw1w!!0 I+Y}Ռo \.lŵדW_Ǧ@D:61زIU ǫzbŴ1ЫbmוIΠ\6\4t{w"vZi|geGap8ς`j[KC*5HQ!I*TGkKW6T?r0`TA2}<"WϠ,Yfn^C̳Gr$3d^Evs7?lt||HTRzlf)H{:4%YzS@*k.EIOSþK6c5괱E_jQZ8}  9p̌O?nOpg6 N 37mOSNHRF惶fw=I4(e ums/`cZ= peH:T[^KWq!yʅZ<5;)Tjz*zCgmFлm-QΊ==5ZfAqTtIqbŔӳ yHNxXQ.fk rO V5zaKdc/3iwRW7P' A6Vgxn_y9"'RՖϫQ!GyAvЇ3Ǝ\`Y]u~bJ|B O]s<$/dJ ג$`05Na}1U?p%*ZҮjdy~˾D[1ȕhƴOBbl:‹8f3dq-:µTvq HAa2=UV__?tϺᛏ% )rx^*Hr}.3K'͓@rvRL|vBo>([W.+HOn̎pC^Nor@7+snډr]b(9[q6-~dR%׆Ye6t;3%ɼdS_4e4qXҁ\!7Fi,sWo]ץ%* 0fӯMW)g$vWJT{͞ + =@ I$C϶tIѴWrK–}ˏ jGUT3r┴+Z\iFW=ϰɻO>"[yy6jwamzB:GbVmh s.rMDf!_&Mo4g]Gc2΃̂fl .)C^}e$f'.gA+e$HcL׍ȕNʐ$]緘Įb|'V Ȍ/gp-$͑ίeM` 6%]bH#My5KRv48K7 Y$ 9IepY+z}^Md_ClcF^~6>.~Ie/mУ';+=pf@A#}(/RbSw:˻Ư:];UNkd?p FvBf}hN~Bv̓.ӳiz~Ec:voN7e_ύ)SEljE%`K^@W\lu~qJѕd;]Y Y]s 3ξL!I(><'$c;y*w9H}xWH%Mflj!UqlwSO]#^@v Ϳxָ[)륊y,Js<(&3hq>i댚]PY>K-# J*Oܽ9M& pѻސaDSpɭ|e̺`p\I^J -QyIِ_`@`.R:mqOA8Gs싍7T -WA0$ -M*bz040&['4Nz =ԧ 7hY-RD dI=-g5̊'?]/(;?߀{׼7N|V]4 .[N2 Z̠h$cR\@Dz$!,[Dp[@r1>j*ݩ+"XǸVꓯ2]y?6szҌIkwC Y2r3Yv[ }0mŏ=TzW_yӃ?P?\ e =PsGePgLy p;O᮫{6R7uR?@9;P.ݭ9@%{wqe~XTZXPj.b#b=c"O,ǽ]ѦdfɱW~2 #\e@\+N-;:ZkI )4y@sH (0_gXF@%sN M[烽%`DUz /6;) ʵ7w|sPF.>uj}w7 KT_D%rvcgd=,q><\`H] NeԖ N3{b)"_)8!4կ ͒njAyyV01;T9 g[8+ZlUcP4*UWWL4׫$h\QC`d2ÌJ$. ?A]2yw)B|uW,=1"]y]@ x:=&Pe`v%F?~DFaY;e;ٷLS_Q],1_Fn3Ҟ+j7B-L~ݐfz/l*™{/`IPqc8u!8vwR}wX-ak%~8H-s,lg|8fۺ -mðvgN"8vd1e ע&=gi'&c~\i=DIKN'!kc]ws2^Oz*fs&QE+o,\spb]1\l^s3"><(GFf#Z؛jYpUibf6nE?DzjG6)/\mH"~wbz#wU]MWKtGf8;f*1N=x*ý/S%Ru]~lx~h~`z1 ͭ2sp)8Z0]RQd^}7Z9tip &/z 3R]eEfo|i;5C`mlaiS>/mv󡟴A0_7<]K9L0IdoV 5hƐa֚ħZ¢Sv[frj[ArO cV֛s撩c.ya&`J3bUh6)5!7jƐGɪ/8F]8$Rt=RQWap# z.*նs!b W}wVfUo'z w|ydHԑ(c$?.,5Xw?(s l91 Am:r YW Ϡh:Kە8vtϣqf؂\aT>:ATqsy#AǼ~9 y,3o-n &9'9LȢ/I5,Qjuz.#>e}xo9uXI mi8zuM;<Ⱥc  ۨ -WN.aT#=dDD4U%wI_3N~5zxw^^!CY_{ZTjUR3N9,719OAl{lf1l+w U 9l?8) gyx쇏6x_B$ OME"r1Ɛ<6,l>[3ˢl\9yppz𹩯рPg= Ůꫀ+W)9ph?EU8{Z06$>Nߟ_'nj9 \Y4Zޭ_> m>)MTmjd/ ^rt%`p# x߉EsM:yGx4Ūjz A:W@)σ=/0 7cB"V#XNWcSҽŊՔ7TC2jo}M_hT7ljͲMh7E L$od @Xg9]O+ֻuhSR | UlU1.t -hH< $6guKL5Eݳl^g_0=^3?1$O'=K"#I8]h!XRhC "%A~<9@wr"!ܐ\V-9ߦ.2Z}'e@ 'CRvѣNriX6![naZ'x('z ~o+Y2Ad麓z&=^ϑW "i\]y2X һa0s(S<9ͪe&pt a;a__I)=6s;~^B]*hYkp5K6FxCr #̅xjW֣=BL8Q}re7'{y!˃r~e2I. ib>\b] @&~>nli8H~Ht}da3yɌ ,vqM +1@C ԁQKU +#_i *4Zi$),fzt ǿah{KE1[m-nsdNN;?ȍ*ktrI0VYm>\a 78)#A͈X͠C^n{HЛ ʩ\׍>wʰ@澷3 9Fw98yՎ\,ut35aְsj'~O [d*6$ HG7( .qî)QƩ9ClCsl ݚ^u+vc&JGUMy]s,ޡi NSqڻ8+UrV3BKUV mh&<=F<9Yq Mu=ץm.w`X.Ŕ;Gk(N$QhA_^τdhb0l`pl=76[,fkOWO|uv-6{r%XUZ`ëVIVp>zp ;&m{`K0lWX;vR lTbߝ;3UǜN,wpA7^\RҜ[a zSH6>,7~bb  a iVFmE% ]Zrt-? |R&etTUd]nn:?{h:?3Ių^@݇E:5p- Tەr0ÔDyKƿQ{=X -zWlƞ+*hl&AA7^%:xچ>Fp'(˦ek1g\o7*֥~$kT/Ex0_ߟVc2.~VEb6WN |h{lヽB" w#ҟ[/KuŪgcHP(,f,[19Uf 4$L-]"NbZ(44@N/]J"!wrU*<<Ů9ܧh 5G79`nȎ]%qV`.ClN9n y|ȫ4[k!MU-&ۗ6vUPtoZ Pݜ^-Y]]{*%1um}0Ԉ8]N[ &D+FJܛmp~BOǏ󬾃;'0!$Ǖԩ5\|T 8Vpquz.٧ }'L1ƿÿ?? >T /]팱[kѶ6rC0F6~vHŚq{J !kEjL4\sJÉl8B“04~Xf~ax1ugF a6@ۜG2 = \XIt٥n1!v,6A:F`dP9qz<.$J懕.IBY< #j݁$%jJ%>.g9}H"h=P8'OWRѴNF]{/wLj Ltry(fijSE{Zz0GUz=C&Hܤr"cגǃ!5!SF^܂\zrWأ?TE[Џu#ghr`%$j8y`bjJfwɦqnRfe#BE[81)NԾMj}BX 1u!L"xb;{&h:{ZCn@Zsv39_:@}uɖ 5.M~~e|'9(Q]5Ɉ٩ndZ}~| |&nJFnx@%bA6[w{IꏌMTǓV#_IL1‽3XsCȈToWgU>tL::p1ѻbכ[379{%hZ4>ʘp]=ec[d A5dw5Ǧk MokkԓuYP̗gNRkVQKgb2; @c>=)mS:m/[D|NܿLq܊5Ku" 4A& #o2N0&GKKvm"QӅN%ehƧ$&xMO/ˉUE;~ *]ֵ]MS1=!/dY$>;QY Ϡ'Rj$֗4NLqT3VR-'?Ϭ%'m*+ЀVFORr5M %0#^zMu"+=i\\}&n'wpKN#H%F97]ZSrب^ߓI4L )Xk)7Meڽr <}8W ɯp$5ưlC24'C6Mrv2# ٭;̡)12XmS)a^XC;)rzvא@sY!]OC?! |ǯCq]kְ1HSу7W]jhᰝhG (MtvD(v.lv2QuyWX#E cˢ8jQ^&9=Vz ̸֪Lb́[r{;|Ǎȥu]+!)I0^3L[oxҴWHpE&)kb(Q61QsszgNzޞjKo@.#t)I2clNGbR`*5 |ѣ",+s+ N-"d=K~QXe!o/j^"Ɋm% 0=mۻbuAu}$VAjc+1ǐpldn4!bA^. 0'_$LSǀh2.|M݂bo]HsW롧͙7á&ɥ!ͤU|dl\8 ۬6n{'e W xRDp =d]Km`$vd.4[]m;% TI ̚yܱJ-wrN.#{싾Zy0+e{K*:UTS@gZ&Ix_]D[ǔ]sX&ϛuJWPVdu#K-xwv ͹3{W.v۬C:Gԩ[Ө) 1ϓ[eQR^=N#oãMD]Wm(֚M^!>͉)a뎱@社(~[z-STVJ78z]@6=|tR`5(u M]N.: #LykO-iynxLrSe5T_>i**u75 4$) r ˤ ȦXv@]%$`؝̀D篐PU^UFvmBE UUo"lk , N^9ĻjW9_n@'NãDUME )'dIB؊<1\.Ȱp8wk{?Ī< /`6nz]^'bu2v ֟r,y]o`4 ӭHҕG_Cy!UPAӯʁ'H785?(:[GV KOO?wVk(o ~"T=q{:X>-Ѹ>R4,#41t8s]%/SrWӘMݣSm5~ Q/ QWG%*է~` ]k7l[啺HC"($E6:rٍ2T u_z "dMFpUF ݅$a[Ftpr:r=v|l k<c- Y}M(J2hB bHjo}c8md=rmKF\aZ,8l*O ^D[r a\Y N$#;`x;!˓@9{OubQ~1Z1t5}r..VoN jwXJ 7"쮤``o*>;8k@QB]1$}(_xB8[4&rzNWw;eG|ЂuVr)\6?i3`SJ"Rۤ7cU /ee;p8\^+ Q ):Aw9*h*kyհP8f(6)@3?iM:f֧=ސ^ 9eQu)]dM (:b" G@o' (hsH;_V1m"C!Eh5OpF9PI}"p wxK;?ѻ'hZ¢&&zsW\2Ks=>9j)%jd)Ku4dnZn@%*O`Ĉ5Ǽ>)z!iɿے=XmaUXY!_+B0J$Qf Zá5TWp y`V,ܲ+"zyo )3rL̴ؘ#je)$]"DwͺX!%YmrRZ^ .X3t LECSBv8lv_SlU%}Κ!t @]iWy), uy~7,O󱄓2{ !{*:] J k嶢cAO|5Y0oږr!nqX@Dr{_(.Ȅ]>mw "mC6{m3CXq9%hՉ&"t{:Anձ#WZ}g]tREqZw{coS܏B99vcw@FA.Q%0^ /FArӉ[IX4kg} g4'8cC`CRJ6ܙ^g1JzGDSi疣tgXmiV0Rf{6$[/h0yqbwV{F7fp 13/AZ:" ]fOB>'&w v㌦7;ਟ@@}j̲:1L~~6n) J '>tMx۸F'ͻu\p+s5sz(5(ڥD"tw)w]\Wٍ;D]\t4}1~tzF'AYh1T3ODWĤ^18Y % ߋZY`%ɶFe9=Y?t3?AB*i^ܔQЇaZo1Sڙ[tz,h(D448Ս*_èm꼛GVr1\EAqǯ-,SE5֮r`)jQ?V '18b=CB9* eZ\|ogNIw)iGDC^FFzB[ĢOt1RUҮR(D]A-ȼFp?j` h>ht>5&t`/,:5UJsY&q'k,>t92QT`!(EyS^@)>ڮ(O#yJԭ {(z@dX0zfyYUpK ˺ުWm.F+I7ʼdSǃk)l;ފb־0C)HO(^Y?m$D!ˡ*X_0d2"! EXrMg/&IN'|.k-@Xn8>͍ ʆ)q5׍Xr( ty%=&GH}#111k$xf#;K dZrEk8h4N3j!sԖ^h:#U lJݕʹE@|}<^cᦓU~7jjb2>^@NlBpya]!qjk,! ,2KU,k1{1< .Te01~LCȎYwݰdr87I*Xu K,c"bKҦSl>K(56?(ƴv~ ׽EjS -@|d6SAh=fpmElhNT )ϿnԞ٘!l]k~؛0qb%u>ϻr͆N"Zd rlRLnv~mne{tWPKv/)g2@aXd)7Erv|TxWo=] %g?#;\֪h(5 ѱZ1- hRއ$}2sqٸbM ;/l xE0wDpU;1v iƙ6\G%'"׫@lmҞzMAHZ,6ؤ;ӈiI(ts$F|,f xo.bҌp!8ɝgto6j-_kLW)c) 6f]|xot?K"}؈It}<5'u 슓 20T"jz1 P0LO(X[>N{jO> N Ft[ѡT74oȵg$aՙ'<|7VL<_ǶkTF$#;&0~I0e-$dŔ bчd!V!N05aD(H!ҫeXG'imNd#)f`5,W9\Nw<{SHaHS$owSOY@evXGQu52Ad|+ٳ# 96o}h|:ΚPRX\Ԕ[x]4Oa~$F=b +hіCΚ"<], -gm囡Kt]ԗО\X̭7D&Yjt:meo~&,%ـps,X[˩F:V!x:YVOb} >}EJ5Ńy)18;};L9f&5cꑠsOgB+s c'*Xٵ׭W'I}K ƥDÉ%o\RCݨVf!KeI?h݅8犘=;ή= '_mWx/zH[[ن/;Ym2NlKvZ.wh7BdFt^쓦U$R VކԈ\ ijN˶%iSYn˙^':EـQUDZhC;#Al)B^)ӊbU3٭R='֊^]I6L\^on1qÁ%9"j=^3P^\ᾄYUn]íbב֔:KDRMz6pبJM޲ XfN"MJ]|_5RMbb7bypF'j_U>_?ѳN$6d)1X{/}FRoP"m΢ܼ&d]<Ǐ< ;p%=_f4߯. R`ɒҼGc^hsbB"4Ȇ'c;vn*5#O:\3 CڜpMԳbprm=#("z<_Yt-dKN:zcEXeDZVn^ C˅u%}R.Ca%\RX%xro4y\]UA#bڿS$80sЌ\c7t{`m]R[՛aVOqb =1ZG%S$EJ.]zSҭ;1 ӥ)SxE9ZQ@^}\QoV>Uˤd Xۄ@c5sI5 лpNT%Kl='H#{4仧Y{:)gg'4DZD;ZppW]8ȴ)\#9?j$LMɳ6.؋{| @SUՒ5E2LrV[Wά( 6rW;Rfli?@Q FmPҐH~}ܶ{iK+`Oh)Y۽'(86K۬_b bN3 oɒ3Ji;q-<@|Qt9t'ԎVu qĒgXs ηd}TiW.VB1=]bI3݇epkځ a siB2L7eu0jligiF#lLwnMcоm7g ~V| ϖ;z3h!U 2-TGQfc961x ݓ Ј-qo#x&ۺV r.< 9A}Tf+\Dž\ҁb!T"BslcVn3Xpr1b2̾C(1nt'͢mw&@ٝ |l jK1i-{j.KY]CN6Ge?ڽ]cT jn[m<'KX<>ڳ5/\%wo}}iZ}BWm3^D5GNb]v"WrP6gY'>aF^P=u7>I. "9̮6IH 9ܹU}>-=A@B+w{ ҕX[aEoLYuÍ?co%Y,m>y7X0T-ew3{i󐹭*iس*;FIt 6^?GT#s79ˋs{(d.7f[rm_#v8gTn: @"̅_Y~J%#[^Śi;Zj_8v`s'82Ŕ',Avx4 =ѻxc(@ vN£KJNfuzB}\ă*kQߙ ʨ^8&)SޞG2|'{1j[r m*]MnWbă]ěe%6[WO؁G LG_ghaQcoM>x֗ДkFӠ{uKv͒3#Ttր?~o%QM%OuNA AVsz5m(V @GE{M"6ї^4Jh2}%|.'9ˋ9 OhyNFk[/[cyjcB#,i|EyrVv#ވ>4U{ծ.) PՇ[keb_t;rf ?'p 3=O=&WOF0lsf:SyLX]eEepì731d {V,znn~m+{af,qinn"@*QCl.4#. `3w~иQN-)ror>d-B}83\b~福` +ސ*KA <:>ŬN?`G7,J68*\(/\Cz30Neq,ȧI;5=\YE&q@#~W$ }7p" Z u0Otj5kW0P\,7b~'7%ĺ̓?f, >āab6-A5yGl ڼPK.s ݆m>EM=wUSLk݁8FspIB@(lH+%h>4/e0ܥ/ wn|>XVfgX2 m|g&cksp;":7 r[xWwqf]ip N]?5E? Sklpr2N zנ(=+_/1ZdžQ vCݘff btZnA\8!9j j0h2C1@n lHdӋR<I8d w U6.p +7>bUK$zzִCb!~wK \JѴJj;(=@|p 0KlC7\֚1lp$dX} Kʽ껵uZy3~bӵSnv+ʉ츌t>VL>&YJ &Iӻz¼Xux%H1u#(%Y#x41OyeƉ(Ѵe GKBV)tKp ޺Fbx=̼-h|p4) rVCf^+8hE X>&O38B-$vvBLV }?`&д'\sfL>IkP(C7Azuuz+#bV>vݶrRT^No'(r¤k@:FY4^,Jӹ#_~ଣ$"5{Ưl 6^υC[&6@2X`ޚ.2Q4h19L'FXp5v9(1#܇A_~UDh|ÍvL})J}**|z U)LM"j=~1o{+FsHA7m1>aH/`Wopg2+l OtrM4BPrTFuF,]FTIOy9[vs

heiw@9 Ù$"' B-;ڔѴJ^xYE>"?n{mQ{L%qyvGD^t]Uy(6p^XjW,lM?IX.ȿ,zlH1$Y TZtV@`1߶ImL_k5nU 0`΢ǼP_f_]6<+.N!l( Wkɿ2w)/普cwн5-W +%r `o2L,7 ߏ 4 4gOԋWkfV.F⚬9[OLuZ'ewPh Ƣ(GLWhTw&=GwO$%.'Mh J1;ˇ>0:yYK'"e`tDvrQL9WNGOE= =ݳ/bR_O-H:YZDBW!_ϣAֽ}8SY9wvm̸Őēh# gh3Y6h6]Y,Oh(X!Wij`h\cj&>;s5@|9vJ ,wvʵ쪬b*=;Dh̆exGO@zֺg뙸slSPN2!ڄe[F6mqAz1?#?#ցRMSq4FUKIւg7+X%^>ĚѡjgJȁ1 Cd0eg!s&=܎~J>'F.M"I]r)mCtwy݀FYKs, Bwn14=0PT$ڻo^5(Gn} & M9t} X8m@} K~ֲRlYBA^c|*'2kXJ3b XU9޾YO0 XG:ևa@:_FM/l8'Jm1x&U- ,x(("sHgm;Aho 1feۢzVK6gj0V} 6$nv;ζ_ɺ̼-[nR Z:}VݰE]gR9б1mn1Y':}pUSl+\JYiRZ1gMiDěηmwVl{gUX|p />/qߤ/*N̻ 깩tcZ%{+x|7O86i[֌Q&r&]242 :y $9ˉ*f]56#B1.ClOEӋrq}KCIQJr !ˆt$`-0hq;lmeH6ϥ?f\3IN[㨧t\+[|][?!\vqǥظp&Wչ ~Ǻ聰loW!‰y_uct75,Mֵ a5k4:v&vΝ﬐]aVq"hfp! ZS*5..|}Ԟ(L ycrjŢ Pprc $O]Nw:A~mL[w牅? ]ؼ Yerh t5+>+OFף=>6#p eJgvlⲆ3I .[ ~Ρ3axU-n% ]3"Bbˈ|8{Y9rC滽ML?jpn$ vN )%E7DCrQ{Iy-( F y6nfcWɽ~OLff #> dm>s)*rX8+|uA=e}[7aL,- LwJ@2r6s*jȘnb"2WO%[E-Ri+lLإXzc 9ܾCbH(`k_aĔ`7~#|it+Mn/a{F!n-alP*OփDV )rk;3\h?!7Ut뇃DAmZY!&sr W57l lև^4ߙ I{L &"Yufjru1I!3yxW=}h?GbJ: tiN;-P f 9޸ OTLa5m̟ur ƈ:-[[&]N'oBLjdgGH],ֈlZz׋םNlTYD1"9[WCj[J`w=Y D)lPy=:;j Qg) B& R^h]:ꊡ%TAh!(ţJ3@ѵ 4q7SEYj pAXx0D6Z'\(죫xsc~lR!5 Ո\@z$ YIBdoU%D p6L7 ]swn}cjCIF m>$6#e߻OPSe|g_T8ZJoɼ,?_f߯5N$#߄VDxowrSI,A8+^  =cV*e_rU 6r|nӵy! Ѐ׮6}U M] 5B'rЋ˴T=k}|W贯o nd/6Aӻ=0L)!ɧWUPDK*v|l%-f;‰U3﷜m.[DKJD~d޿,/w D5,,c}Ah싋8KZj6Xuꪂz2N&88P+9"=nxҧׇv)K4G!lN~ ݘ@#88'S ',inDР7MRlb1pY֋J ei9q'Ojʭ(F[$ umqBFL585Fv;mFZCڊctc ڵÕ" '{C|_g>i3Zpygl!=l*({"&QAF@9|e eWO\V7Q}w2-ms@kqҐwneP`Nc4quׅQ|W)j9B"uA^AR歾Z)E|]Jw/(6|:w}mܩI,Y&祈`֎dt: D:mOz W&!}L | s \ ȶԐ_F3ۊ"|w*|$_2Eym)M ۃJB&Kw9 %14D #H M|kTfNi섔2k@ fYKtԨj̽`PR X;EO8 ,DP)*5H'>SvGd ${B4;/p"޾$աBLSa`9R !` ΢fHIzI$FUO C;RctI"KdAccJI%CH%N:=r hqJw >Ai )4Lgñ;q_k@lZAV9* xF0U K>2HIیSx>["Yur2G16Hچz!DZBfٯ̯}aށ$HYМҮu>(q zL^]XͻQE/;Lr촐#Uh3q]-5[!V ys6Lc2FY|>l `StIGp"Fz@3X,eRC _1E1|T1<سcìAZL+^gb2bC|{@'t2x=UYq,Eq@qTmC7OMRúzYJTB5>Ŕ) lFQvGo]7xTdvM4f V }npm(P3I5$yoӔ*t)z56^3^?_.#{U-*A|~| #(J-\Q ؒs|1!+i0]hwq/%]:ђ:aRuR4abB!5ZbaTa<ì :TH7RmU~q_1 y9P\E1Srh8"c-b?70L&~B -ȕWO;=֝>ex?^ VF!?`ۚ"Lt?B^Iz rbrΊls,#5:9ZABsTIU Y6&ĮMA{&7 qBUfzw|2$SR3XLnޚ]?}^@QU϶kAfyY3RaBs9D!]'IP.0Q8ݿd</m9v>PNhd7otW EiKWjl2]h8o{tzKN-yϻ5[-o%؞r`λp)L=%_FI{1>[%)iAnN4fV N|[KfK#2K6w0tt'59bu\YDV13]:GMlr'rbhHٶ&b}Dt=aSĝ~oDSo$yBkrm]멹VVP0W'fkz?O=ݡ.%$NcNwhSr$Oa[9Xgr 3C~CpܗT !)ԥ'ruglG@>jp=# nn`8"pM8 +0fg;pT*#jm&WkM S5r>RBm4-!\@m%?Yhq֟.L0'uyAJcs^0oӻE>YBaBsuڬrk ۸"Rr}WDOPÓ?gDKG^dĥ:^O?1FBkV< jNNDjowlQ帚%{so2I1Lk~LXAx }m"!ߘ3[$%SexM]Ws5A/& 3i`eH~$aڗ\̏i|İuy۶">ר9&*#VDʌ5Z ҍKCeZɇD:l!BWyd ,t[GApP顋U3هt/!Dgx%=NDŽLGֿIñDgxjַ>?DF[CEaÙ;! AY0{cBR[,$8ܥG:= ;c^jDL yN*=X 8G[Gގ"MER i^r:_K?o;7leqO[n$'96 &ʎFP9V Ne$$,"gG#, 1Ɇ|[5-ңE/0!T\t[(s[} KO$Y7>̱?|u]KJ4r4Ls;PקԤkZ)QXw׿<Gtv&ZE1M]šeHu^ztƉmX<(`0ʨiW6_(oķ8Y.[Ot/˳^*_|5kiI.̰>6>'zr{zd5>u׋[v`И"vԔ?kUޕhPIT:m\UfL]`8Zss[+-_Z.7sPq44}i@giB:c35Ok"8aq @jZ$Py}/;.9`I.?럚cWYKckkuj5%MKGJ8.'ro>T %JD_LOu ?`\DB[VPd_(9X,Cf~.]$$8es ~~@S՛cK38#/եl0Iه0RSװ>-`$7s-nj3,>x\GomN;wbߧ:nAZ˞pN L跣 ,W%_uyr(g+xo (%j!Dx4mOLYtٍkjAV߄HYKխcڹPW5 z˿2z5|Jײ{3LKy^_ iH;8z,>U_а(D,fڒt),GwqGWFLa] 6)kްq S3@ֲW_9ؿ՟{0=y=ib O'=T3q E4d }OS`whi+43!vFIS%|O,A:hqzi1?JF_ݲԮRƃ8 H!8CՓRø{8ґV/a6r-g<5 D3)zL,RqTn[7\P[?PEPvJ قB'2Gl#9i΄8GEff{H*WoF[`p"9>Q܆軑ݒSmVH94귧}&A)%24"H&rz" (<Śk+5IVV`DlD<ԶTNT|iH,d8]O l,B%NCo RK_D$dP%~dâŸ៳iD{y$ l3t#XeA,n*Kߦ]eh:gYOY,TY=}Ƹ }8|}z]5)jR9볽9vd/B[q ӄ@YB dJ bav:C|2GW kN`]FI"`N"=W`ɟE;X4t)3lõc۶}|Vqoɣ'^8Bz(n cp 8Q"91Q]B$`UE We Mm<yG;Ys yOto[L/lr)$7MxÍ&<>4'2V+:ILa%pzšѵ BN1tu"jldܙ@l`u΂cA }6>Sl:\FS;Z7G!0|׫3X$ڶ)i-ISWZ p`/LiֻRg|^eDx-8qqΡV,oU*e M1sygT(`*hUsh;z7V?~o-5A_'n (r.z|4ga0Gj8 xbLrz!bV!.=+¤TS"#hv!T')7eO`0b2j.9ÀTBqt4K|ˉ[u1^ߊC&U|Iޢ^ժ\L{f]X_Kr54\[sJxz_=ל;QҶB?ŋ“|@u>S֨)8|՛%ؠ*S c#4#^5v!N[QKbzʈ h#!1`;tiyuHC3͝tvee҃h}Yƪ >§Aq]$1yh3i|Vc3CV-w>m%\zI1es#Y q H+@ k\r 4h5MvKHv'A x;2%!0qo'&%e*u Ǽfe"gc:DS|~ʐE|8nL/Ǻ3xgC ՉNӢwnÛb`VYo^m0w˶h6>u餺KƲ5B`8iyۈMbѮ¦֝!-#jvL,FII}4ΥY|'+T+s˸ί5yGSk4 y<U v79_KC7Kdl;cAM]߈^B"v-AJOPf6Hj ݘ]&.Z$j/GYK)Jv3hPrLA:C[AM'U(uІ?ivj&E̒Ul5,[M dd_7<;@-U_ommKf<Sw8(8UC9J/fҎ16{V;ڃ5ZjlYb) <55[4\BFa}Y@mFq=*Z̗«ߍt%th?-#?0@x4P) 7bivm ¾1{jbKVT"d%RHS=ս(R\<$HJE6_f7JP#\]利׺&< #ٻ@ep@%xD xၑ* sb;?Pm`15BA&v|): z{pp_i^SaH2 exUiX@! L`Fۥ'z"8wWpf?_Mέ yGo5h]\|H-3S8,dAM[.jyeWh;u-`Xhs_eŧ(j_tO;u1·m 99 =HV:g'o}}R::f0c V $ DheYgֻd%:%b$ 6atSh+HiFAz'r+Nޘ`,Ғb&}?Զ@;* I-qt^U`V/]E{K2ƙc?*e-esVvº|ԽY4F9>e՟ %[īT*~tx;<SN<#jrI } Lc6 'yX^iLTz`v4x[Ք%|cr}nS9YSD] ͈*XjR|ý %ڍ]jšg{CVrAK0Av"MI,g yHr9[:d?b1N{NBj: {p ^@f lՔ7:SSa~c&hC '\)"@yDa荧ٚquB gV+r7@gN"]Φ؎W_s~#t"BJR1-(Cz>j0ie/<{aK=q2װaXil\>Fr<#Sai`<{"lU">k.+f@a1ry ƒR|S-EZ|ӨƓ?\\n ~7l>ɣ-*̈́&QV1Kp%Fz <$f P-C~A҇qcbuӔxlF^S6F+α5o8=Xuv#pFtN A%L8f տFU Z{6X[ XvSӒ闕fRB4:}[P yJƸ[ Z]obk )[$i5q>/Eر;Q׈ #UptYFʛ`NU H}R|k0GSo 0Y,-xܲ7Tahm<"Ƒ{=v!ԛNFm7Zۭnpp˂#dUaF5+y5PJ ޺?\Vunٱ^pl_ACCҳ:f!Uus׭lO=8p;a$̶޳D0Ac8*簉FfN@%~%: ,_5 +9LS7^OӪvY)3fW"R(M 'p̎'p53;eVzl=5TsJT +&#gv3̖d#TO)+HeMwctӆz?-:.#ݥ ލ(\'W7׼'D"k}㕉OV gb#ڦW-5cE N (эl',`<pQe-|jw fdYo؍t_4o1%b dsЊWZѦ7Url L K Eޚ1`O a(g|g'J_(yZ)6<0?6b Wـ7Q꒯\=0ܡz6RLlm8Аa[Dh>t(yʵmB9ێ\zN1dܟF=5/-lt:'Y\p esb@k4q<ۻyd4vla]8# =N^OQUna3^:(ua&s(?3Ѽ8i)ȕIVtL#sT ݔ!xc` lMCpDk7Kj}&:(DObsx13V>21D=vIM~}p&DPtc@h7x72j d&iW]M}'$+F_]̺kifNj=btbݏZGx Dt.r([Ei֥^ l)ة>% ׵k #i k;nx;Zξ>& br;) CIVTgtHVwu5se\PTcx|Cc1yV y(>g̈}.2iWFe[c (K_u` (;Z@A ó?Ƣ)iM\…!kW Ee*IBf >#(81j`{'^ 8L 87Fv\FD2'}i7˰H(.sy+*!עpCvmysfyv|]+DAe"y7-9ڻu=;=bp (A2\޶XWɬ)1*0ww&#>qx@3=4ɴsxhn[7ӻEkBIfzNalA\(H$+0=jjsP#jes?UN gN`̓\36"hgZ\@0T;++7yȟ_M3Y8t( UFUn#W`m*ކ_HJ YO"C#Ӹ_Vu 6L |>fpG$ύG<LoA56H+S;lub7vP@<>m06srԠ-H5|Iy!Qgl})NPW讒-O9b>Hst \U/D$S$u|SV4SA j(P;of<;reg3_N{oeXf ZHa&`yϻ smal*.VD׼ F?]U'f30ַk;hB'*Zf(֕n=rL %,[G1j2QlϨ4 I2΃cL [SYyMRه(?DtE-GN.<=hY$&-PVöK5rBl( ܋F[!F@""(Q`;$6.It!!A_&i$Ad IeXm +,XhN7q_ Y"0CE7:beiϟ~"'3O|̛-&vK(x+S9сY1'2[FttS7Cdt:?%{O֝qy&C}sGZJdXR{ӯ:< ޼Y 2YQ7_ٖ6IRD˜=ԁ,mHɒ%0?Q8X̉u(WDY|K>S2."gҁ6x)&@M0 .\*lӾr5/Hqєdoϴ&'C79%>vQ>cpڐp=p;U@幇1Tw;wq=VadB.+ϷS4]P\ sH P ^lN_АT\'= AeG)N^)KӚm#ԓ9ej,Ž=UO `_f!⹗T7*8$;țcg@'FqRӄy3v3X_mm׏\} ^&2dGn8*c#=!fUT7c:DzCHwn4vȔ*L"T">ig{qG}䝅TX&{8l m`3x{:za{&J݆̈~Y_gϔ-.+[ p( {}-ב?al'U6yEzs rC2T[Q 깔UNڃ(l0DFV)JZ5Bi ^ HɹO!Qv#F֌t!(|6MBqi v䐓Q棧2idO|HJF3㳊 ~]ŤI|:ZI|I HF> xmtوEXN쫵۫Pru; 9]#\=?J_ZAIs?F{ XN<$忖NMVT} |HP+ǔS^F~3^] x$92un+ND8K;iS 7CIh^uqv~<TOH77ţ@7oo}?cYVQ{kyȳulWU@8*٫eI1ۇ(c rFRfk|yo \kk1 ^mHg,8oNR?|2gգ=]2u$rNA lI(DDϐT^ٺ%YIss<R~\!'$taSN.{flq gd)wW1Ƌ7'{|e$_E&Qpݴs,: T q Gv寇F n,Uۿit :WֆF Gv*Ն+Vt]$Հ;J`NަIݤ><ʾ['j'x e#1 *wgԅw3!]|5ۘbʎ8k(QN#2P$g m^`vlkyNڻ z'ЖpdI{m'1Jxtyg,M*#%oShMMZ!J!:-B*T@` ]gSNS)򉜾/? ]Z|'e:1`lL~|eVwns@}aL)(HLil3Z;-9j{ S]~Knlz3NcuEGriXSqg*@Yu  .@%J55?޴I |Vߓ*!Ηv>_6}9g[bSxfWiWSsSp{L/0m,\H.мB2oi㓢\klL9jPk g<~"Bc@\C yώڋb!ZʠY_$J\xN+C68{;w99AP3H+UxvmǢz ~SWV7W;BS jm{^ndM+GYj v~[3  rX)1<䰗TH=΃MRތ,5H?>4"Va&[G8L+gTq7ASWeK)4s^E˜wH.͒k[ds="`YGpTtT uLڤ``{L}3k`Ǝ,.FP#"k:`,azԈ|l[Ԇe C4-]h ډ!r4sB~pn;hEk8hs8dK%難`^o|`A F#ɯ_($it:yTUrA$&,t?0KMlBLծ٥mdzMM'~S J\1?aNzVSSc~_Svч]NRG KYVu0nMCpt**(EOA5>8j*d}},[@RGou» ҵi$`Q }~} r-[)) oo77\!`F^PfU:#hՅ`gJv]pQg!0y NV]X,2#OI 'Tů?lV59JMDE!NFsvAy(31ۊl{j" %WŽj S4F^+*?7Pe 84o5 Xg&axKSIDk)?ʢF|<fg(Ф<)f10Bt9]ěpdJ 4dah ZLO/YSb6IPBK7˜LۮG ~e}f1Hx̚MW{Ostb`m-s'ݭ;2eBOm*l9E~#F\U>)qU%mp0ǰ=maRhWgU -Og7oQ)TBlc&nVͿM@]Ħfgpu/|8/ɗ`{󈔮{kVF4m0o!' D:g;B3\I`׫䃣H0z/`wPA*cIˇ-ĝ<AWu|,'5@U5axʆ `|/?}u!ax*R7[ Ӡ=UxMw[h)nO:cK\6˽#΢pyxzn V0i,o*3/nF5u~t2!A=^W{^EЎe,cD-$v*r. )so,!67VGy*Tn6TY%huA(z-4Ґb!ٴfY?Lݽ1|E 5vT#T)$W;w@[ FnJ|̟MEܞ3A} tDe@,2PaI& KaG(FPeW 5fՎA4Uv`pJs0{~ϭ).> wBʢݬaq+h_  snBn'>Zީ:TcVn:kn )r0t p޹ZrB,bj~jΐ,FoiFYSSK8ʁ̄M9SsxЌ=.E! %zZ2?̟柃xGk~7ao{:hк!Gۊ!Sܵ]Jr4l5캒},q\Ϗ=&g2-dP kwI \iitf$?[@q=g;꫌8$N$FU ^Ѷ/CBy{gXAֺȱR]ǟS/Ϛ|m?iWL F&A<P2+'6/]zR9LH{Ǽ54fY+ڌZ~lXn*3T7VAPxS {xkqBj0{uܥηlkj^? /oŵB'-@`t]o@9t:Qŧ2Ϩ:|$Y4W_MN"`} f)!uz!5b_]V rZ'j^)pWYNM2̱}h8k0$p}"!}Rޔ׳nمZ6[#ZB V//Iod OdF㠒7G^t7steֿʆ*0c*X=p5gC晟D,|̼0}RbY]v/Fp!@mgRY]xU7M6yʜ=zW.A#(f:`Zf_V>u8{zcO {q1!ё1tp#m^m,=+n4B)pcUj[qlz'ŀp- [mPu7b,% M(Es2@]vu$e xS>k檏 bҨc+2Wv<$ W)u;f|P@>2#w #x}Ψ f@k$"W1 r[1<K!>.7Q Z5]+Lfc #ÇܿP}ݥ>/8;dI»i_4FfҜ?/Kgoulx̓Z?r7T'طLٺو?R;]̶ x=$Yr>cѳbSLyxw&s- Ǣ)6$l,2-HXc*ғ?ac0 cȾX_):Yc>c90oÍ5K^N|\#%vv![G}!$kUt,|Al*CEV T~y)0f2x<;XJb NM\:yN47_j~+dLNl,] &*|eLD0+obfZ~4wh2E̐ 4ix̢)(&.7h[ VN>dvb" cE8{]5I/C:sO^\kRZL}vVdsڋ"lk!ÜIV/49 6T#Xt-^W*V肣$^M9t{edsj Pξ!Inŷdx RkFܧcymY[Jmy ._\wk#ئ29ć5]@wfҬ{Nq ɈJao-cAUѯ[3A>ȑ{iރlrH֭8MJxSfу^-3b, ZCkFn iXߡ*i`VOY,UC m  +~W;(j}{lm X‘<4BP }|#XG_C]Z% >ŝ̸s~XM.n ;t?@UY7Znf($OsB@dkn o@kQ6ȭ hA(_aτh|/\7Z}\$Wz0a .֘rT8\ʣB%PRx[Ai(ILؔHGEO^W# ue#Ls٢Xf>N?mRث˓&= u}EThRP%pO$kS}3cd4G?~( 4F3kdfKfH.fm!o#vGُBbE;zhO,UXn2 SxF}'46p U6@4 v3:PGT@ŠU׸/VXiDp D[։9h_JOPDnyVb-Z&YN*0?Ǭlap,\mx/@;W!h1,Ӳ26Sˁ g}ᝠ7ڴ1UW_roo#1P$ ԞP,{S0\$uC҃bFH|79JYC]I1^y?ғ> kacg3PB‰?^/npdR|&^GxL!)+zNN& "@MJ$-=.̈)*vC4nFǸ5A(SnN XilQU>/l!Ŭ{P{|b(b Vs\ȵV9XEwO^JFմ$ =H݇&dt`,SH{joLztrU'iҞC݃9`#zV+L, b;nɩk:f IRшrrK*1t"))fBQ}ף_1bU C=iv٭8)Hr{uCr4L,}[&"[`>B%~ߧ WQѿיkAT/^\+;Ir蓮SNozaZ465`SFrrDP/a- &F@jُxMgn]g+x5:F|{7Ƭ|gK$, vHahaͧ̎"|<;+4#\vTފ5[Ͼ*%|kI,YРɪ 4R0c~i~qM9Lۢe|θB[dQ#qOFZ ^,;-e7Hy9N}vn(umV{p~lDhsӪ4%jN_`aF;93}=r܂dOXeAVO :|p OO0՘Hⁿ0Yg(7_WTu*:kAN-x)=f u zU#Q\Ke0<4 ֖ ]y$.kn92gx0:5Qf< kTmb^i0=(H4h_=C̦DŽW3ktW,Ӻ]*|]_E_.N 0SʤW~@rHӵp"TmLk´[⪦L(y*y?]Mݑd:=fc*z>smdeVE %t';(>2nnbٞ9 Ժ6?Y*)&_o"ye3H_Bo#V?73p[CYXsYr5vJT\OgpiX:pvruJwn"zԒ-!|3zo?_}Q(H~{ӕ guPIԓs NST Jn%z9٦2CثУ(9D3eZN\\b")aׇ :kl@I!P w_w*Gʗ>mrv8 bl`Nqtbw,Q;#1oW|e\skz呆AZGU憛Izՠ|6UC^8nvbh>BB-ڣ]-X@c߂yqfWgS4aG9<t|y{sםي| 2ϵ:͑gVBA{%l6i} NVRAdFQj1^" hlIX=A1\W{>WdbIXjOSC Yhep'@m6ƏEa썆%5йsfWsa%ٙA&*.SQ&.^j m#+04vFsuǨ_*RPDf9s]Vz╯LJg$eRR~e1EHKqoF&Ho{^#{ r`Cл:y3l؊n=SXmim Mhq!ET1: nqVFF6ELg|@$J+-@JGX]U5PS(ѥQG>1Jf#9i I2fAfZ.DPW0ۭPx1κ; LxNs4|כcU Kv,u,Oy7%to34W)ky Lq漣HGӾ QHgʨny)xR-AzǤ.[}~YE i}qjG.rÔsuAGPΫsd[` zPX%!._/`f[ /PI w{)lip'>_~ / Udԕ3_O1nog9J|}G4 +r3VGFl=>tQVyT/=u=ayMYEݿl<(z-O}H}NuVx7'xEvmɎ[ㄜ1 v̪Ep?xdJ뫷 _NY#LC)wp7]|+ߠqNuއ"EnUK*s[{d ${Ԕ)Uw = &؃ e887 մ3YB?N}]mow-$2Ќu2wOk{ |~e.iVz1Tl&r=% >dA{v"dzO9E\:ţxݰ`ze.8d.zzPנВYfOsm}"J7MW$$S?wX:M +k9QBw|ކ%;һ&R )ru#~3Nt8*6(hW9f&_@ )5 k?%`Y}F 53uKy*Lҋj'6{ հF]oǢЛ7\M Z|'E+4&Kyp[ØϸŒ5 D5WVQ;>zt[3d!%7e>{C$RrCvb`ѣ|R\b~s5&7Co[Զٗv?C6>+&DS<.N)-C3~! 62g4Efq9 ?jK7"ey"J;qZ~؄s^ܯ/b/ +)J(cZ "ͳ?`2/Mre.TlhZ55)u~ A롞)"NiW&vA˒8+`5(+OazG> Dˬ569[YynA^Oa|"?؀A=YI.6qMzhGB,v"[q;t `{Gf2g?Pv/w,:FM8Ā՜q>$]U( kȲKu[(MH|Ҳz^}a(J(YFT줄!Ў2oNa~ol^,81dDHF'XJڭ`M gDxBxpx ݶ=1fjK7 Jg{[!zi+4&jOf61 -9y/tvD^< RE \d]Q V8 wn^C#̘E>z4uU`NVL01&v o=M ֯3=ܦ]i}Y%jUNޫz uYB_SL9z=m{?+8WDV[dí-;_D݄ WL4)&{>2Uߨ}PLr|t.Eƃ|aɔ{΁ͦ;^-񘞀JJN۲}%p/U߿E&TR=<ng $W7X\1q.#+!Zly(*G؋XI_fk"Z}0v:,D<\{PeQ<|WBtxhQ5sX۔"ŝՈ   %{%[ ܊'IR=U({UBIyC3;ؐ>y4SQCQ(}ݚjs1mD ]>r;>7ǝfEj^*Ra=; ԨvNgo+!Maܡogƛ|Q>6bM^]T|p), G~=iZic~~ Uj [-G ˷Lj6+а4s|rv6gl5XVHtWB.G+M'Nn7Jsmɻr7ځ x(FuLϐ)W]xh//^$K*dύbڹ@6Ɠizm8l*ϔU۬onйplw\ZT>WXdxO'DR;`ި ()kkVE~|Тta l*E}'BF65!A# eVM՝n 8NE:K)%9HuV')-WSHG#qjOYϽkF93?g]ESѼU JN b'x$}٭oT\ ; ^4n31G5u V8|0NBkS|XʫOy7y4y,lw]Cu*GJ>bkZ9 94R0S dzr}[`l=U#L.I2]&U| #Ot[bU _@ޅE6J"{AyRs"K3_0BTx2/8s}GUcX1U>(pQ#W j?.6VK Ѥ"@6K~2Ex~S2'bYsxGšvoO"Q{ LfD`5FyXiý8eSLf8 wobLnNbkekXt[7}Ķ[פyvZpy4{C8Zfd&ҊYwܺc4%(O lZ*!׬f)MQO29D"pS""yq &enk0%&K@WQzV662elڻ8oz #z āf2 %Zw6@EiF6>Vʍ(ҵdGY9"򌏀m8&sAxue3gqiE,H=x e' AiI_jY%c>:\L:V$/籩d܌@'>=3}BX9z~?ab8d^"$M-cչ$FhD@Լvl>B3*Zˣ%-9}#1ؔ.0p4$+qi^ ?PjάELulŔaQОrX>e SXFh&|rTZXJi!w^|?C$Փykc 9xRr~s0m/WDE2DFp%f `m79k 'g[&DŽƊfʫ/`TO+GC$ [WR/η!)^~dy,l{?^Q'zZȀ.@SֿOSd\BN1|OFZkT1[c[?e_:3PZmq\;bz^%jn!š`)wWۗ҆}UG0ۄc8y`{@'&iV񄇰FF9ەv(4z0X Rc=tk^,+A9ԆB`] 6V[JƧ;ͥ CuSpSVd$?ƻ6%[F2l Sw]@u/OeuuBUu}u%y.zuX.ߨ1.P{*\@D~ELz"͙f]Xohtvͻ{~ 6l (fE&-v'$\CBAܕ7lJB/D,^-X͕X^?]ɃtmHAk U'8kTzA|R0l}L{ԻjW\1$M]}:[&G7f9 B#aAv8-c |z~fl[% fkD=qga=S aGf|xDcH*˯+9=̅ľHDp<);_OWo.'[jU,63 A 6vnj 2}*z t$]l;G0ȃ*Uv~t|b!)㥈-yDm/X^d'4]uT@ȳ=N;5bg}RU*amaҎuk }؆p#+/ɋ9$ph)"YH' ulͤZ22wrG6F8ͤ+Qi.nQ=7 DNb+7(1rp71ɿ7bH%/op^6!:1&W=KYv? DBtHJzP Ws'wJ 1:猰qK2uawX&J\qFF_j#'7IZ~= A"?v֒mU>X1p4/R6YUxe/ap\)/- |$_2*NNk;|ɕq?xfcY ӛ=(gnll=| er[<=Y\ 6m0n * yn؂xF=|2O9\`@֝ӓ_]E>jPc ϣ'dd]畬in8zC*By:|^MMarTU8Ybt$V<|Uq *`ݬIQ3o%Z2i7[4xr+d21 VHr3[0WɅ-QhGrtO؁+q^'/xr-vI/(l>zWaJO8M]BOR$oW)=ؤ0'CI-Dzc~~ߩhc'A(Rj%߮j䰎 0]VХY4IUb)7'<% PB|Jd'ZQ kwH2)ܨ=ǞR.){+.Xcz͟q ~(F`8CWB44 L#oh9ڙ@G($@S'-568n"4YY%}̡r#g 7FT"]qZ؃+8 B-Z/pNMpc`R7>ZP 4.P<ʈ@glLp1I2{]YX=Cآ^OJNm6UPL81cۏME#:B]uy (e؍6I2\o@.P*׊aWJ3k‚^MC='keV x/t>-bt5U,K"Yd !e, obVOU] iһrtJ;i(-FTUQ~;4rkQl& PD7qv㸟I*+zv\dɈ1?gZei2V1Y1gЮ*s!.sexݜ~\lσ&S? 8ӭԥqy+*ꠠ /[E 6ߠOsq`I)x&-A׮lPBV1WQ"(pCw{7_m&[^>c ~jP7z$*h)id>“53k 9NCvKfAYs`6X̱Y,L9z 0)@֌U1^[[jR~ € nEjh#RO>;Ĩ#r=n`aq4⥘ 2!;7D 6WxeR lfSz=iLUlE!%DRSBFn#ȘSp6F܊@,~O=]~&R%GQKrB-a,:m7L';H[rUXp`T琴6#m$gXE]SX2Tp".fZnR qOO-2Ŷ՚ =+zŦ8 c-Ztlf1d_ nArd8O;mZjb9@uI)l)8;C`. wE\='L棁g91 z/aRp֔>[mHWo#ECqͮ2 c&٠*W{q(w kD̞q &yUVyc%dzI daYJ/KǰB ;4Q?$lwʢXhz4z̦Âb1n4gqB#"w!*v4>u+Ӗ8,LJHv42lkJ̮>b. ?Er*hS9} dnuˆ[H{~UWbK̢ v0MM=](.e>Dӊ{gt䎷hA=+1bpDlY97z֥caA&CevVj꽪k^hOe p> ;8m:DyogzC0,Epa^B^Ѿ6mu4FU'NW?OtіvL} ǘJս$JÍ wx#mN?N̑É>}.*6UOcg1xkP}E,3ءd⿛cFDv zD ^3!C].i6zm|yW<(UL_.6Ԭ(1LD}Rx;TkI8=4TX@̼6T% K);̝zvVΚ|02f`HFYDT C{T7:L#:(cieĪG;3"~򟄃lXDd4ўG0Vk4*k'%(4TD%mNx)(Rצoa澭~b[LO9Giz; ~}t^ i(~/j2dCidԝ"BۈԤe g?[5(uRNMHɰFQep!蠤ʾ ޢe;2G[qg1Y~?<A26=Z[&TQs–`xI{O$fD& FIEѪImT QҠRq6;qF:]!@~jglG2>,' p{STdVMe$LG4Jl+xQ2:#oK WҊXӝtP7`ӕۈVKnDeE cǹϠwA9=ݎ w!_ ?[==Ug0t6%u1W/ ҵ dTvPP+CyeZ76Ц[S^8^9gC#hl^ݢ wqY\ YFAM,̎+J!ڄdޣ"@R"D$%tJ4Uy[OGV4᫜uxk`K0OkՖʴ:_FQ/V׃U"|zj~|`#FPONQ診ݍʂ}: rɨ!w-ʕ GE8.Gv9Xnig턇K^!tPg@SyȳSNBI ҉{&q([_2u7/4pKm*'zo &A(X95}RUY۸U938 vpF)qf7s96/n~ngW]u֌j{2 ˹>Œ2RΏ),B4lX@/3* 1BSiL>| ̘7m'e+Esb2,gAP 9CT>PJ~pJ׃Ui=iRP&ø[ <3p>鍐k8Tg>xzӎÜ<p_7Q5a9gDK(B2ۢ뱱aQ*_(J.GicN}5]U%Ió qWp|̒=,Utl.uz2U6L~ a`W< &@p"(e2} (zSmܐvai%SүMXuv$8rW )8.+BO[y^:vMD$ˀ)'bd<Bc \ M9ҸVYVFhFeF6B'TzL/%9f^_8D[]\{.@YzsZBIh SLʖj;٥7l\1gq ;$1_!G߃ˣ8Ԣm?2%ˊ` lq(Hr}"d֫>9c~=rXyEյ"hgGpV1n.ZD s{azU,k}p4=UڲOp0 C2>idkQ3W=+ca&#`C ]j |JX{GN/vʓ"xC7 Qy)mXBq~O&s/PTlG!Ϟ5sκpdLQF&3AEa"$M\&a/.OzڞPԊ%:܀w 8SDoju{j/:iօQ+acNXB/X5HUb9Pp3%M6nWf X`_vY)Sm}G|4}}wQrKat5p.9%@CB``7@t4Z1@a(>41sf`f0n& V g*Ms6da~U8׃z8#{ LjAJJqUF+iu}?^#K1GIA dZ xzX#S$F[M1&Jm[y 7OQj ;2}S1|Y~--ttVk4.ʈ$N?8\ȕሤ&.;G껎S%6F pýDE(,J?1Wg5n");m?.D&÷TOBáb(ArjH!gOHc ]S$aU~C=XTWݯ7eW} a {s3A%ur9Cs$Sኟ@I[h J~{wW{5B`,R/1k{9{~.mT%1 k5irk]:_g} zs:ٔrw[a蕐hcXآ5 Mvgl$!t)*v+eZA_9۞dҊ"%UZe-|+ &bI:-J WMN|/OTiLaH\ D1s>"keŸ#R5e40D/~X+ݘc>Xݮ%:o2іErm*ɛ2fs0lJx!0 \I;}ޔupi8TtZ3/1K׭?)ٶ|,<TwFR2#;Znတ=eXmsF'#}{anfp%Z]- h jOsngOP$TqV+XշS7s/OZ;|Dɽ>pҚZ/Dm[#@vdbK.pm:~M34v[‰j\.8A_٘eXޓR g{ '^33i+׿l #pj$yq, WqJ& ucZaJ]ζą42Q#R,/AzM;P6˿zB.yk.`p9S+K6Y:^2k"9f]Y)FWHbZc]`>iҵyNXj^m?ҞJ!LNDd)~hZ6Pg06 8픣K  #{qx@l&nI; 0rW#sw78aA!_X/5|`5>4 (9N<>m7^cғoh()tɎ<}a*'G*ճL O4g|~utشUȀ9¶2c6]‡PX@RzX|$y ŝr. $!5EX `& 2έgѪ6YZK8v0MAfwxgԛh8H!8P]X ^//=m٩[$՞].4/[^[.ɡz^guf#L~g"vj{o8GM΁3KaЧ\H>ˆ MnW ,7b쳯1zd_}!Z(u]f^ 4Rp8`pj{1ȹsvT8.kub57]lpty5KfH{KjЂ{\(GHÿzēJaW`0ݶet.ocqqrG2- Bu0VqH<'Cb1nz l~YUXfOl 9;7E+C!/oYH9nTe5JwaسFx(,Tb65olGb^y[Ƹb'0i)EbUr)v\  XŏK;jdJۭZsj^Uc12b>Ԟr;{+Ŀ#|?yfZK_,9nsr#1tEY|'L$#ZZ85iZc>_"H +2s &ҴU%L/CϤ*UhǣCξ(>l'Ǿ]v)Whk0kۋmd?e@☔#c,Z(Jj#VC]&#F(?WA[sbcfw_ʼnH=Ut/GboK+p=ΊifYu\bgP4zN<3i߲ҟ8~C <-Lsޱhz&7%r!ܽkt(#),-d|(Gm@ ,]ADR-ÅoO)wME@CQz@ޗwLhyWllZ!aB>u&XPV?}P 1l^n?a0QVkr.]BaPQmXٽY q4K] 䑫%vr&X(O*yD[^zo6.x~ǬZyoF2|!W]%G_zWH};v$3vȱɻݪu_b/hՙrpRvt5qzva[oGolqDw%jX5$s)ߐoKW9Y2 TBa.).Hw'_j{!)[&Pr!e[!Dwc5|:S/5ئ: e} աo|J́.-=[3]*ոDO #?7 A\E hYnwNG86sq㑒xT uW {^x=m2D~|ɥRr6Xn.I*ULhϞ5O8?R ,_ ]3 tK]}%^vkcOR9 n#R@}hEhrAVx3,kĨ+ԧK# .z*H bmZV[01փV jY`aNFF9qEW 7)EFAԕlo))QʧͥP,mSLVU|=HF Tk|2'D KƼg5{wH-J4]œhvv#c\@If[Ot.֨Cq]ju~mDFF=1;g1H]sɒn'[l hh=M^OeMOJ jo#+"qWmʂbP,FUp/C0VS;d}=M@njBv,@A=]iV*+ #1;2Dp'Xѳ+ WG_CU7#y68_i=Un>%)Œy-Nʜܻ4V0vQ+"̆t_(E^5p+RW, ^{ޙd|訛[Wp/%FŰY dWhb;8늮!.3f}) ='2*nz+v4%p]0(uffaao^gl*4ze68^_W-i#mʴ 㨾UJRZz[jn*փt~TnlRVtJk8h ,{' [Pd%^]b 'LƹOܶ}tp`n"PJxQ/MrڇvKӭ 0ǩERƺ)W xr=8!>\{{.b /o`nnk&[sd`F`OR`&e-t Wi]` o^;<qI)wö5 8CiqKaf yy{?-6"/A`gp6\bq2Ԫؼݮfцhn5 &]U;`/0k>gHIZAPЅ-/k MX^:]4[/FI3 yG>hL$'h_c4h]kWi<8K.+ϛ*>Ql!EN`5M`T-LbIAȽmox\I3]3:e^*PǪ]4P7T~Xz=P'\hC74æ| 0]d^uˇ/j^{jZ'J~dokew̖=*E֫^[ )XADVKe8L4&7;>v{fhxS׋SW60~?wUL4p%"uJA(Kzh9mwܙ K6xp??U$J9X':3Zo"/l]&D[ȡ%H}j||'vf7V$fꘆv^V3/U1ķU-z"*=n[^~3;''z 9Lux&k5sRΞ9^=G7tڇ$L t||XS!i G[w  3aAOJUɓ0eFI[;Сɏu޹ħk ]Oq6|U+- e+2;8{ޑӡthVKn X,1DSVt=v7z {/_ƆWú{=iZAvt>S Y7ErdŪ$8EI(\H|%F8h /KDv5L+6MH}5 WMpX ׫/Sy dRChmu^$\u腚\2 ꊞ¼-ah/|~,Gby–0Oނ!Iu׎N' t)KV r?!BbьOm Xʝy bk{GS?N#7>kO2m61jq(]dZP.hw,Pq`:L{NMns IQb-R8#@ ^-TӇb F:P}m&yk9ɺ&("%zv:WmtXO=.uP-[FZ-| cxJKfhXɡ>0J r5'^qF-[r7dž^2׬ȝj|l23 ft^vC簹s8Y`c4Ӆ"G9#oy刏ڏ[Mn9 n@>]݇ ?B@ro}{~r7nZZd P3'gUDg\5 DU μq+Xx6爐c< i[]%3p%njZ>:7^rj2(7NkޤzxTѦ،7?.=L if M/oYpS%tĜ]/+ 0=(EۂX0>"ȱ$e2C.4O ba1?r BSHkщ%m^QDDQ0 h<Պ*{R9㟚,ݬAcg-ؤ>^/pďo䖐~<آZp*Rc6N6 1pv6FL?="Y4cДX&xyS;r Sjq 'T!xb`$ _()WeŞ+Ս(RP 퍩E 5-CBec򉹥[<(bN( 蚠`ZUn3A7򱙧k;5ZyJk^*^GJFP/dk~2a&-ݗ}I jaNw} tz1d}P7l3(&m0 f!٨)SIy\ &VPjg+ dm@5hQ8LȶGHmmyy3.Nʖi9;-ba#GZ9/ã͞LΖ&iM 52M?0ڦէG+gd\uy(GVj1!w:lYE??uNG@oԤV<#]R**[Z}ZK{%CJ"EBO(-݇;3tO"_'o6+"pT=8/r H *5k OnI}l;eʔ=cD ϠZ u嚇.;'=X^wHݬ~Q H{+,?o} M#; ͬ3o1>s' N7kI, ۏ[tIUz IGXu2. ?ϸ}=Ԇ/2M-y6תȥ,&_tGq:{A_樧LðgvQ}ܹ#'H>vkuw$=MfXۦ>Xj~K,˭ؠav<>-;ωl? Jq(5{*580I;?I9+BGY M,:[WSYVBlppCzzwXŇ] MaGwm =GȀ&z @NŎ`mcD ~,kzy&}$_icjsL# 1-9&`ZfwN?t#-k1DnЫ3P|z7j ${F'@袀xv8~ &ЋO,4o怙v[/qflu<(74Ci3^4t@_/Σ{4cV˯L_zN!1r؀6ٖ_2kZߓmTSʭKϲ5E4M栧,eL{֫y\ق| UKۯ>}Jn[2kߙVuOEWa|:W >oq5M[Y a/Wz* 'x{ѷ) nHݷ*aJ0)_׺Ԭ_0ϞF`$[S#WQ6  9_)_=]&M3kp6-#@zhd/L3U+J=f](YkMrDZ)OϽo'^Ι~D ;k4$ }}U -X ļ!h,B?՞En7{*kx=q(Gg6}BV"]cDH /C6U_bp`r=M]7vJ]D3I#F n\tvE4$a֣|9U.}*AYOG,PU:E34X׾d{{B n[+V|d 38R=p>3R}Wc?8>VzIkZp$[=>8(@LwT#7L8 *P;+>m',yz19ӱq#ETKBuDO &pjkC.ELjSn#ƔE}sZv#x̭*Mr>-X?$R92b Y%ufuxdXV9O'p  Qm v*ApkS<`qERg#s~,]LTDUI-/I\Zz; zm8($';)|}ɼ˹.=zĆ+9797M:,T.O@N nrp-b+< Q|lpVa-R=kA_51קP_+0:DSjF+%qڌ]c ;pij< bze$)%\ٕx*,.vI- ωdԘ(T!HƳ|ϡ*e}FvEXM Mo(1AO#fEcFD>t֣S1>mfۧ+4ZX\|z"Yȹs9)hz|,f>2X#?"taR!sV_J9Y-*sȜ?<RZ mP/2=/[rcoaBwA?#;yɘs+5c~-ɬ2IciŐf5yJ&#*ʒKb.38L3؍!6I t;KZ8|"Ia:߆/=\0ݩhO`wsoMDQ~y}!s> + jW>~pU- q75k;!42m}RuC-Y('mb0zo9\:W*]Kfbvrܳ8֜6sN{}7qqak2Ia`R_ݿ܀jS7Y J!ݙ;P&SӹV"_g1ϖHAuGz+"ة`K,#(`vIO)g2ge7s] m6pFJ'Dx1B4 R8l|][ޭHZU_mgjo*ѯ6#G89 'P񪹖(|dIg&bu2[~<)+'%J`PZwϐ耵>TcRbֽtYg=,7r 3]3ٺQOuHDd;jHI 0yqBasq2P4}a%~Uf{7dc ַg)Lʺqxs}[ÁaE۔9k=קD&u# h#Lfbzx,%=UI[rӅYgb&_ zn*|4Ky,Аs;UW9(фB/Nb \oO"bmՖ-G"ʿEWSOfߴLOAV:0Xgf-HaKY뱏V>,. qJה ibs[$5kojnDgpLvUc/{d]#t_v1 6eQtNNI!*5,.{HwI'+iXE3Zހ |eGOSLDt٪}yznSV~m%pIb掱pmrYƴ%9bQ3XI0v V|1Ģ`cV&%D-x|vrќg`ŦƿOșo,{X"yn:2Y(ԛإme"Pq.WfQ?$\A[ 1H׉ۑ55ooBim =R 19~^EdPK=`^ڌE%yzޟ]sIeb8[ڪPP8Zlškd !ǔ(rUzͳbn6r9ue[MbO$VkPWliۄky0V3~l%t6wzc |Z!z1nsXO`NJrW Q f`;JhȸV5ѧ9fнS4xJeY䣺Sg_OZt*x&1gy>,uxt͒C&| &U$ a1PbS!:WMQs8-e Eheh&/u)Ѵ8P@>Qӵ  vWZ42,vO\j }Ap"eyr""^5k>A> fRs'R yDMta J1= -t>u#fe kx%VK"^y)y*ɋxkq0Tt~jTAƤzDdm#uoy}(e ?#J7ٽ?UBOTI lc⫉aѰ'A6rQ:Hg~ ;Qb%Ipw7.}6ij%랝aP(/܀LUctF61ڴTܰԫg„bQhe~~x6}d8e*Eתp:D6(h`10,k~5swdy9ns\OQGSH\_9%=ڒy\;<[ېs]]u/臿lVA9z}&ކwH>@S43|ui2‡1>`Uۡ}!\9ڦl2A&1}O>d)A5kB$[}"$#Hʱ%(k)aUf"U^*uYAwfA[V_jf%A/jCHz(5596!x -f:IZX 4T4boljdtͼ1q[jxj!f&A'b5+@Yrs6ws64t-1 ƚT\l]{AL5A-ݧgzmU1ֹT3ExavBkluaw;A#'Elp;9,c*gY0>0YN>5[_VgVg!lpC,jQ27>Oźw2&'TJG̷u_x9-꼭i\<9C@$HӴU@["ǯ؍rs=QVgH քq2b>. ":3poXM4u8x_TTl}$lYqjgü1/-m;{ÊiKL-2v_ཻp+6y 1ts1Yy7w qd[AEo`MUadkqAE O"x6NIYgC33KOR9c3 o>B"'? FEJ z0K,FcWxhYZgg8{xDA ɵ)*9`fK$ilOٴ|iq JtIbCB9tDn"ρ| Y{?t#uz˷v;h\HۮKW35X:]nl kzFxǔy,UzZ[z Iq*屯&G\ ]a3 Oҧ&RegbtwC C$j*zm7EZ8y5e(ӡ1p'ߞЌGoV0iQ`;D۬qp]U2 T<<N+ƨ`F'zzbdEcdjě]|oGC70OPZ~rFl; +J$sخ\-%rp1;>xL-n0T3me\cGS0/I0b*eb6/c)m(2y4͚ץqd¦%)].K2B" ]Gu˅:o:X6H ܞdt~cK$DҢ&B \5숾O%"9~g%U6pC2 3Q*XzGN:_'xjZ/QW8'Kq}yXZfqAd:(?kUJ1]U0a.Z+<"&E𷥫_/)`NSJ=2-k=Y_#TRE6W'YdX[fjPaW] >r}u4kOPZبקػR$*?(vQOO21;U lί>vSQ1ӊ%pp7kI)ŕ KQBxn},[ i.rzT.c ywsLi7W雮:-}MC_;F>h= )Yh=TrVMÞwxǒexG$8 )}AT˯d͓fpU=аFNE| A>-)0y,y-y `EFTz~ۋ  uo!Ц[uMOwSo&UlO].!"Uw D_r&J= SzpLo70)K}|϶`WͰL9ڿ܅jFWw xz@m+GQ;a'NOl88c4Me0+s|x3-8s=#Ҵ3ì3^/Q\vvg(.*!IO[ g͵"t* $?`dža_rb,'T,7}lӃ0l+wٴO.@T.`qˮ~/O 91Qz O(v%9vۇ[pr$8;V?^i4KMq Q y#O[Ue0upZ Y(cG{qggPa#Ho1D㳔f)uֺ_EOtýpf{ăS+YomUsڋemd )2ga&/L޺D LGByU6#n78vvUS4 Ī"2:6CoSHֈ^M-S{/b1him5ҍ x4oncAV$~t{nIQ${%7u֪tH63%P |s6úNН1{dg\DTP>" 'ᯔEm,?٘:X5|ǟ5;iw/:Tu`AsɢJѸ[Van Vr4dL_ (f C62 j"R5.@#=&,ĝ\hCaqz g4?w &7GOxC M;2ҏjL?H,!kW#er[G<ǪO}S<Vkx҆8br?:vzWK){^i:w R i_}. n.Aukǻﭪb@.҇gd b >O.fUqp- B۸7'O&V#߳ ٙ DIgf/}>vgN12 uP=ewN2)NL3YhMB l=ÚOw:д݅nZY=ݘ7w=L{\j[Glt.q J 5uI8<-B^[]o.@p?= U,nXmFא}'$>,/PEmRYrE~LOϵiS8Bmڢt@Uj=Ú"h9[oʞe HVq~eLkXZt<E$ۢf2@0X,0 !͝[cmWem*gE$XC_@22*Z?gƉ*!hųAʣ/te.!|j} HG°zn6ܝ &d[z҉p~gʦ}R[ƹ0觀+3AO CyRNG?!`BxW ETTy~D>~BpyBnldDlM꜊77|wţ ?VLižZP߆;i8TOIh"J4 ؜I]YIKFb<>nzBrz+l3//6=8LO̬- WLP㐊@OEdÓ2ͳ+S,xr0_2%U1prU[Rq%QŝS%<{aNK VlQR_@xz.Hc[,did{.s>T`6&hS/ (xPH_.jNb/|\r~߻㒳M#R5kǁk˅Ϯ,"6=h$4`4}ID盒 qF_C<⬢ z?43qH!RiGOw=Vxy*`y7T;lEw ]־cԒkx =5[ATkWZNGí%^X.\ 5t͛)';w62A&٧:d'iEk}K#ޥ&ruՓL2,߫/LpS[?2Չ_;LPtYj}؄S7 >@sjbY\Wȣ)f#5e VCY\~ dǪ|<(i!A=L6m{Z܁|MK/<_Uc]Kͅd? X*/ '^ k$Nvvc+8ĉlr2 ɄRܑ$5WΗĄ{hR(&UmO3 TAƫPFN-9rfy5srK1D\Pa4u>/"A]v5zXƻe$8z~mqkw>2|Ŷ)*-fmUrYPx7S-.wpaOI97mq50C5 aqէ;o B>/FX"a:,mZR{[xKoۤYޚnG7MʎFꅕmߤp[)el_o7);zwrnI\qt ,G˚LsdVV6`ӆcjkv,\VM-AmJ,?TWDTDo;hP+1vM{ZG;} ) ҙBg,olpM1Y, /=jL7 R&YB[t!e=UdmS_3J {$4A!&8M?Iب\C1q@`ԫd2 8`ՆK13sTHD\V#ޮDŽj|[H'j4U]q(Xۚ9G}:6tq˱TWvU5\zo~8gC#ReH)[:]8eFP\=,dJO'iZ>- ?`tEl:cJ*8Ш#HbT9t{M jgFlNɰ %}YFTqC:<Lܧ&~ɼX/*F]9vKFEŌgzbˌҴdKz4\Y /Gli6y׵4W;P"|X3evqETLZa~n>3n3D(eFSB0Jte4T*D2hڀ HiVq\rr_ʆt7_;f"$ ?nfnVRva.=v;l$N4/ٖKyt~w:;1"9#̒o?ybBv)xL:OQQ{iv.j2c Tb٭;7n,hA / cެLZFDԍj2gs$טoi`5?5[d:f^ijRxd1ִ*0/܅{:h荺_}lsw{vw&Dlyzdv-E}_Y3LBmzߚ=wEȤu|I {4t/?dH|S#tcӻԫ'Kܯ=3r2U3oŀE,5pqF;mh/4~,݉ϦN޺-8d^*XhBI 2[s9\E=ʹ` eȢs%eI*.`.>wnG6@,wSөOi#n! ק߂V5 (3Xi\p5]쿋:q+H}p ;^TL~^׹(H^NȆa5P h4O'!zdVR{jh'<G9X!:=>,L8BQ域23)>Ad㏟2j0ndk)=0sN S6$H!T(]biGT͗wh;,NwNTqdR6{{[BHQ okEG?`X5x3~j2M)If[7lk9n%IMSN]b3{DdY%%[lLZ$YKN?,m-`0"<.1V)1Qӻv<4~πWvEDßaے(Yo&"6KNZ[>iLFU}-EL5܈jI9XB&mµfBqIZpR$18Ag6i^Mͺkɡx͒r))|oOmCe8=xSub|(&pUbЪ ̫Dy#lt#MCL[ J*fQ|kCtO|m*zZw :^BdyV"e^է- 0t6)  ԋQ,)HĒ. $3!?zlrK#c;<x `l4#)-x{|$-NQP?KVAl|Mo~'"ޚܥdꌡHB2Jb6 ٔ$[휎Bʷ50yP ])[!=9 VTrYqJҙwp{ϠsP"y6"ϵGKh;0Ѷfoym[x|Uw&E>I$1:(&$mV tM{}<3!Y(UORnȳ[#dYS|z1]3II *%Ù\ˌyK P? ,jB&etUS#XrM:*f/aQg)yT [v@F<|xL/1pQ<2P ?/ ` a},_dæxuĩ550c&eQd-Ul2YGOЖiIU_.A.ؤXmjFC5}(ӽ$f71miC(%U1Ҷlq lnZGiܴ!e؜sj Dj+#J罜rW`v¸FQIzkBaY"͡{jFRWUHI#) ^mm"]c(׉C'oD£y}CncZzix㣷o9FQ'l\žnqp[WBe់C-[Ll-:9ͧaIǜKQ*DD27aܦ5V zmdELh|*1Z܂h snj\rYzO랮P{IV9+ũm3I 0 TGtery(, sG|(FC!/ԠKB9Jf?z%"hav1_8 6O3mOo- @F}zZb+F5Ȉb^mY.U{#H1ܓ5`NM)$rO|(;Y+5…rbNͺ՗iK 'of h~}J~ŵ*}403o0ncnCoҊxwݾ\mR9๬PG zǃEZmzRpP"_/_#N![ڄ@BIiJ8|l S= f[F" p dSi%&rM.ۡշ>8aIOpíf@č#)< h/|&9¨1H.h)C4Wћ'UmĮ=ޠq>BܺoH1dn}꾘ԳdZ56B=b ʓD40\Xz,#@@pusX߯8o`"aD1s9K54QrAzέջV(RnW}k ŗ.Kxrr:]yWoXE2sp#ȟTLm%$t#[E{CѤPKs &VI)GHW hXU7[gtM_Wi,g` `2Q%n*G7/e'v˔u݁*is{uScFz8zn@oO(=xDBB1CYglkFD֜ф@nt(7PgX@ MAZiy[2~П s%ӠX`Ш0 q-Ql.wʔck [ |y+vv88^G&B-Z>2h1_`]WpժHX+B,$_mM]@xc`X)?/nW{V $]DZMxo D %L6S 4'\EY5@Vte B\Q:8]ue?s;@Q*-Z0n#!bK-ѵ9 7Os}6WoVKGT gt1Rgnf4p81L~=&XBiO[:*= ` )}6 nh3aުbSO]Ցo=c9{TbB*(BvߖNiqw gxox?;{I (9u.R|}{"+5ރ|cD>&i䣝dNf)ʁ3)8hT* SyBd4b*=*zصDvuיx-/:zC#J/ -ODžȽ0(?cjaE:Nv>~Rd>hs]hhg~tyRS3 hVsg1$Iۋ,e#o;ϩ(gr7DOᑼuO4޼5aB\#X``nb@8BuBxrB)cʕL7TgR#p=D 5nAȴ,[v1} :C˒%QOWĿ +uEGg-#rJ5 n W_G(Dl*f<"i]X.59M]3f;%8qU;T|e.6(I}Fh!_k[LG[>}׶)ȝ垆s)9kDj=mdXmw#3Z'"CӑOSU TùfB*x'w}ElSLetJwjFO7rxIyn$8I)ҼG3VD\6]ҵޤʊ .GtP !f=Mqf4.ؤق;&G0|=4EHשj$P^#\{cB0O'UCE0zט Ջw=hxfS܌t38ړ3_[6=#w* %WNn2_zVkle:HF.zFEmmhm`K:B^Z2\?Ӷ.G}:@W F#|YJA{HLR^M%(6%l5UtH)Xas oqݲ#ԇSk,<"evڶ4Z M4;~=DndWWJx[6xZY8޽/LLi &Dr|Z8!gq H`v狫aĎ"D_ֳxIf+܌ 1>Jh2z3c:t2Q\fKmz$ػf M}ք)_9KlҊP$KvՉ!ӄ_p^!NԦo;ױb a$PE@u qe1:Ka%GߝEv{6(`' 2k3`t(3?syyF9E,?f}Z-ÅegU;˥^lkwqxeCc4nx8zD: fNQ 1"a?k̒cBoeh*] gW3)&f=kDCqH,;IC1%ڿ- USڗNM N/11r7ӓGcvHGI ^¢Kmd/غf.39^M,+<:>_6#FY5R C@rCDuC,H8|M*ca0WFҙ}~CVp0(:B,uޫsU_ VҐk``;Pi]f0-jSE$V2ƭ X@ꨢ0z+N1!`5lG`IQn g˩)ؔV89‡(bXTNj9Q,;/b1uh]j}OO{8m&Gq/U7T'diV hH(!fXiu[4{\'31|aX_kh'%W>ֺP9""ZPlt\U2U\PqꄎtF#J#"dWzb2= rM5G1ާBꋮN{Xyu%C. O/گ4~/>bVif_[X/ϖ~jksv? g79:*3#w4sZ}ACZ;ePxq7LCRv8*OCmWT,ǔ@Kv4R T}R [B>WTSc}ɴ!C8ԝ[e{d o:X,ub L76.Ua!?xI|Iǽd;{yͲOʝa"~3=-Rcd K?CEW(@GP"%K|vm[1<r_; ,e 4eJ3zs*XnЋQ+p4%2VYV܎ytMjv~yA1RZ|. ݪOm}'5bcoQ3H>X./msZlM4."(7&"cX&<#?]b-vl]=GHkZ? 9}D>ns2F%< ^:jz;Z T7=0Ve8oIyKfXk̙"y!u4m]bxw!!?0%/}Fg7]!ѹE#dct \LTGLbpow0Jtt`q_)N P3 E| TCuR2CчE[6mOTjgW2]O|ᐝ.Nl&~dvQz;$majSpn1:1_:v}q } dGvG~NQ6?Ϋ6MnM䐥vfJ"u7- %wi…?cfh]FOGӖl`AK ?N]vr x2>/ O{rIQӋ.-N}>ƫzt)GU $֮g$$8@u :Vބs8q<;7#UAU4I.n:F+]>*Mnq)듬.3r{YOdencRq.Q=Vo#mA9!6ύpZӄ+x"7-<+䨶G_zmW^P -&:x^ZI[rKMbBKF<<#KKra9e7Nqă5 l%WIPȓ64&L6uE/>=[d6}EuÃ]ֵo׮K^6KՇcw\/S檆zWE}\2c8,5fΩcatZ9m3yV&&FI@0!s2ցZNwc/Qx{ T3Ijb6S k"(vRqַV4#J) !-4 Dd7 % R>c>4UlogQBAB"w)ƒ#ǗLAͫ;z֖^l-߾Bd31<Kv_#ѿl0dd /6Dٝ x͸'ْ&b2RjPRr%&nkq "jlrYO>55\:hI1hYEQUT Mܜ%q<}Y⌐ CH4^,]\/7 Fx?$"\hvWh~C@g_p+v~b '6rOd6!s'hwMr"S<1JsL{?oZ5?lSIt">^ӌ_dRC l׹~US5 0q*Nuhi㙗D1t̊nό~mHzZrSF.|ov 9x44BqU0!WL.󒔉m9DW|=^>K'=ivC|t Fol{Iz|r IQoVWd+R0Łcmg o;$ ԻWe|0zO*EiH׽i^7<-eim5* I8HA1NpuȫUN6OV 1H|zn%nߞ2sܻ70Wr)&𧌇Oj(dYF'%6W/3p:jluX{(Dxf&O`d#a6{W*1 =(h=F5}9^'C S`HϗluTiqɛ@  %JN]uKմ9>`IuJ-#R ~Zs,6K@Hcm24õ4%)ȱ&)#שkq ,z%L {uBڮ ]o&OaJSș@w֬lRrOR j Ơ` i#$J2LX'ғ;Z{ 67v]΅MpD ^`xbtjkfPyiG_䁰a+nгI6nK1>j7B$܂ssN]Qfž| M(U8qhXgKleH?,b֋[bIFyBq 2CV@mBUdn[E|f(K|u둃w*,#~"Cq1#@ē4x/>̹=ʮ܅L ) !և㙑jOZlJj;sc)h=TH=ׂNhh{@֔~uo@<:6ZkS{@Ʒy,6L̡5>ltZ/RtΝ/JdQ~w=9}8qeFnE{8K~6 %8W5אmZ+f0a2#Q]{&oՐ)w>iK$Y)NuЬջ!_.x^ fkqɴa"EAb,y=۶^;)Ӡ5Ge8Ҩɒ|biF'>/6vㆣetbt'l$ITo/ϙoU|lwSgP|UK{f!T܆O>/kCs˭vizUq:8੉ ,ߒiIafHJؤDuU;0Z|MdjۀU5<>ջs&DPa;#ƃݲ{{cIKyErҸi┋U+>_\+׃k=M n̷x aFy?%{)1pGͻg2 sbw‹hO9B`ci]MUf MWA T kpԄƢ/`KN[.xPXa{zF>oF~:2Iְ$g{ԕHl=>NK{zTtꓤA9f]qHzRyy~$>\[̤v O入& L3fiiN+Ǎ>g6Tgicd5Kc>NE{6RҍMW6iRsmPԏگ[=eBlk(T1>egVDYxSlo{|_q9qNMY?"ԧn߳>١8˛m*Egה}lG8\K0rk yR߁ X+޻1|.pup7ӆYKF|)u󰘊Kf]5m6_gn~n.fx]x -vQd<%1^ b9}umRtܲJ_38d`$#3#'\s!ݴNN!*9Ca}r0Xb2=iLN΂ /Ҍbǵ&v0fav|# ]B٣]Zsc~Zl&.X~bq_<l/6&[z z%;7/6r06Z ׋m9c9/fs2$Jׅ-V'Q&O5=u&$?@inч.̜&ǐ4BJ۹GD6LMo[K*8)T% \9&ע-޺v9JtlĈeO NϏ a3YGެL#8Wo6,i K=d)>-~f~+1;(>0+sl㼗8hoHZż;o#R^`-u>Lމ'u֢F|45ZVzM] F%Uv} ZMHG@ѝf{|"e@ ,hi*oSIh>Ґ4KRsQ KEjx<"_xTφ#!O|'j4xjү~I*hĬ\ Xl1,;}Ed}Es$umg@0%'JtwvDnZU:XЁm$ &W&u3`M|_Q^j%>ez5rSYI-?nm0$`6p\Q33+10 }ſi6GAp2's+k}) ;z~ PftvU`QDEˉ %7KLU*|>5/ҢEd ,Dm7jpDY,U/I㭌W.kljM76.3)sž^ru`Ic0#R|v 47vSyɪa]I蘁СO+uGuvPT#쪃HiiM.:" ڥhzrkV 's'g:>IC=xϴw? r:]u>u x ,5.1vANP>ʘOo_xlh=JId^AV[Rl fjY"eP H$mnFQ1DWUEGVV/‚>9.JoG}iT-^T〡Tg5yO8a \8-& 1Qf׼ ?*r{BZeھaWow W̦֢Bdf VwO&3=r5 +߬I;GUySlFEkJ~~^O 괠Z-lSC<X=MC :ICha&TPoxO1X7\G>߶1 !j:d"FP ɸ3Kv7Lm$t|>gq0ѓ&NvShi7Ajӝ>y8#Bt=P w%0l-K[OoHM+6]a>@&%\psU&0'DNhF^\7cyd,{ u=듲Meq擥KFHy ׯ3<.˓Z=/dcY^€d*/B Wpϝ{?ƃ]qo_UsM'/6me0Vj"b7mS}Ř? I2i7):|RծMʢD4Q/W<-ejuO)uptwI+6ԪZ/:`}z`B/ɝۧˈI(HLYW}trZY)?_*#pJyFw51-?`OH^Saa(S%ݿh^+Q^BCHA%r& 4חS|>XwYl8qR+3hS@7 /FX;;nPL T>Yejb> [UJ-ֳgƜ ʠ/B 5e{YOL/߈Se>qУ< :c8 6;2e1]g?ؤawQ!h0+2 EvAʺCs+Ӳ z! =\kZ$Ϲ*A`V~we:Ym'[4D^N Qm7 >uD$+ĺu\$ֱ4'J=>̼(7\"%F7dHZ}>Ja:G7~m׊(ݨ֓ƿp5QLC|jjU_eswC56>F7KIL5IxPP) o$`4E5 >I ./fL15) .ngտTgRnÚ}DhڭĦX"dUW-%pKe-A88zk g!;GIwt} K,zp})IBgPtě7o{Fz.#z4c^ɓxE{)k֏aѻUVv|X Ly=`hQUד)toQndsw6y4jmєc'&dTu;4ew =1ƙ,$?0µu4(9r?vQ%:KAǢ]}6-U(Q3DڪT #uTqp?Ƕ?o sxVpԸu<SENTFOSkE-*v6QJm'ɌѓeoM,i|?a٪J09[E73za,4\a*A2-K1i<[4Χ2@߈F:}E_|hd5Fw߷l3|gTp݂1E+2p nPU*I SɱgNPC:WSc o뭿&_5~J6OQ޳]-w8M54 axemA(q"rjyzWOgJv\$^g]IcoCؘozb/2!ʜA_YhX?uמ9颴 z/8{V<;g& F{Io5.@~~'n(WQ*J1Y%!x_*x݊GV=)Ӑo7rzZbɯmXC,YM)$Tokn_oU-ҊLbfF76`6pܧL2S݁J(Ìk0kư?]Ərr?,H#á$f(OZ;PNB$M8 6m> HgYTS'fJGQymjGPM)?FDJk..gpIʦ3pr.x>ڣxxX+ {rWnY\ck2xvV-Tl&T?(n0T`jl0(>ǛhT=Hl9J>Ln!X 8|FE0@ZBWbc cQsfۥJO4p5N裢8дƠ\ȟ"м =դ%/f ɈODu=<=82Xq'EUaj7$x2y}Z$s ]w GP6lLC tYnlrsdk̷ @m¬!㌆]>-q}YguY;қC-EkqrJ㈠Bw0G_8`JLkxbgwy0[t)3X[X֋nqjڦ#C HQN/*>d26О32Lɶ]Yc``d^lGggN3>Z`_%κ<l#M96p>H1RʍzZIXi}_rO9,VtϹ55MӋXۊ6u=Q *q &b/)F&ڼ!԰sG7R#9t?PM^3mLX ~;>+ޯD[Pvd`i:70ЉdV%Pԗk}_}5J_d7;;i#ӭefkϛʺg'8Hw|'.WC׸ɛF਻2m$cά+rƙKگ X 5C+fe%6*/=k>/4)&M~[Wo{g YZQmic$\sJyŰ,*ډiւNOS^ YgV|j e'Y;gdWQ\^̼_Xh]_@<"o.~=1':o`|P+Rs / $,R 8 =&E# H>󩢼(~!U.Щ7vx.v>tzERUqdvIFG p*/i:p'5<~u,`ةxd=SP7AuT;> ANiO;,F*Ó%FI90(*_޼Q#IԴC(`e-4 85[xL3M1Wq9kn̶ Գn̶Z-4ksg;YaEgjSQ3G`G)hfϦek7 joMz9T%f4]O ~flz,0M{(8 V·BLK zw]zɌx\Ɓ4eIN͜}z,ۖ[1p w%gGDNNS&K-\!O롖i} W/q[^h_fכ&96Y/)~1!9BA8iCWϙ~(J]د+kKڜ%[~;tc:*#>SPźv;Mxf"rKM6pzߤ*AAvxcJ"km NdC2]l d4E%̛4V 0%.)V%Du2jo?2Y`lEe߹_%z 3fPϋ62Epw G&F9|뼋uϿ=WI|ȬFÛg4r31w+ۂ '_0 ݱ;m[ ͸ltzݤqfwQ$ Z}6.LC^5$1#q=wmfRx{0 ~zsY POcEW<7zn4_`1rC=$rYl>zp W[I> ՎljG}YfP9GM4 kmݡ֛2bj2.{e"^,ChY>yO@b9 ֊کv#mM_ ZpI ˿LJݭx}|*FYcv^(TgeVx] K‡%^Ji.'v"sҸV+ڂ*ƙi-9CD6@&wEڇ?RqW$yd(.qߴ}=֚Ǔ7*2Z ^\qrG@pZ>^Z-M91+!I۠Ck>N2;kK(u0}(9+ÚC=TN[S\!Evr sɁT8ܘUMptJMfV+z:GCZ9}rP'0v,'ڜH c>l5CUGb= ?mcJO[woTL-9A7Fl?:YH`S}hRЈ=aArׂ0}mX f97lg4fZ@6tsͰ_8 &Y1@KuN)FnH?ZN`dOHvxt\ZU}hzVK&^3cPmAV TJi[Zbˏ@%֘U+gUgn혟!ڻ*Lk +O6 >U,[Oe ō>[viFHلzI\/C/Mۭ`zOzDݏf𱡣v),%ENv4c9Tٳ ?4nms =T .S8#KOO.DKp|yʦ'8SzɶB`kIZ6t8 :Y15aԇGzeэ E@m!钉/Wh~{d7mIczcws]w?@۪ e9,^ M4ףG_f4GB" DgjŒ9V+'Խ#T/ &5 ȩf ZbUn{UyF}1 S& h=Sgt /DG|CkhpCRתg/Le{jS GǷZ*Yp}P k UQT7a,_Zr,+{PЪ. _t#7F+A|W'gv&a3{^ã~A>=%Hf[7PW"G4_=m Ğk'i-S,6]Аg4?^o4dҰUge.Ѐ W;N;K-FNdx87gMlpF){&t۷{UbkG9m<ݰ$L&y8XxmËI*j6,%'x-޺0CMz\&D_N)b ͝[̧iSY7)ہ;߮^SxUR X&K7>1d_.L7MB_@u4mLk$PŐ`BϷGs|UBr9f ͛qkV:!ZR7q*\Iœ/9Yvm=2kS%+8,dL/{1# Wi%/@{1{Od7z$9IeMD_ykѮ?{"H%Hŋ\zU>@ "=9ޣu(ѫ *h^pv0xlX~.\'Hq4L7~w z-%{]\׹P&'P MYHk'@O-]kFQU 8Fkw'jfv1G v-I-rszQJk126:1l,(r V%_fvI!TY\ ]mucJM9ZNYsKKU:QC-]S;crQ_@ rk|^H8:H9GV;GTydl4 L:-yݸ#s 54\<,; JR*6EPtO&3)3֩`m2΁]9WhX=-.CޕpEPCW|)럜oxcyJ}Nٰըėf;T2ǘ HQ/>Q4VLce\řOO(K%b!gHO6 2OiK& ψq.y"ev4k[] i'}m_l6Ejbw"Ń_/6,RٖJ9x̏hω~_í@Sg5L>u1,_LA(!@e-tdW`%qo[|sC?oRsf;0pbHR q&UbOyR~"2ęh4j N$TC/q-==do%xX;|O 96QYUYL#,`c$׳,.4>ݳ!kLg'=AY˚I>s%7j&wwz:C 9wd ijGY;CCvv9;!*f U"alnEx* b. j'hhMU~LwE;HS:PهT7}'3?ă4d\HA2G1ng 1ܘms54ӀEdo!E_v 0yobyC۶yҙn?KtpR$Տ}zفHmv4ۗޭ缿f/#؍vO?ekJ''[X.`iN=<>ka2DCslDŽ)oA/CA(Ɛ45X]徱Yboҁa߸={x f?B vE9zͦa2N8AZQ 3mr0G$1LyDg_ OkQYw6ȁ}1e8 `/Q1Obʩ0WE4JYH@ *+Đ*!>@$VL\n1(=?] lQ%(9纇^6+ٛZ!#W/4/[nN<1m?hSuGxgEj`; i*lMڿ!@:vf~{gQeGXVp\UHެ1a-~ oh?Tm3ߠV7.Ȏ{ki_U8zš$ѫO<NX2~ztIǂBP)ze{t;fc.h ?Ҷgx&XO3$XͶomXįd/,.T|)G椭II5|rǪ&cO ,[|zlD c~ҥT6ȷz Z~O]wy#0bWf> Xm^pf|T\ QQۭwp,"\$R{mȹ]/N-#oyGk_2_0}>R3D‰/^}MVJ@LťL GN?'-aELVUjwNy9w} ~ʹem 6~a%}t]V"N%Mo~ 8k7*pgjy-31bQ/)dd,PT]bޑ?LY/`ֻׂvlJiWʯ6}SB3~Fȩl72[zEe~k$pc#,XlM/8 ,-}l-d*H6A{v=RJc K䕵Up0(|vjsK=*Nzzj O|]P<Vy8'Z lu8 @uˉdmQ(OcQO *rpnVU w! @/~bz+bʲ;q4*K?,dH5*^UzHOuLj>,C\oP8Z[Y:z4޵aG)m7nń+(y5G Еǫiv;IU#bZrj-1ԚHcG׮:.edƖ|%)rx]|AT? Aϯ(M RE> jbl+0ʕӠfڱ]պ"L;؛z?P1!>7ccK>?U^UͯpY! 2L!D9vFuSSk`SMD\s}6MOܓFibiCf_pOGM3{TR7d t,JeR I7~0欬LJr,; ͤ/_[9η5zߦ>#ǁ.txt mMqx|)d]q KSZ}HQ4/` ˫*Х"m Pws_vnx?l&~'#ǩ#%f75~Z7?>8%`%msnj 3Au,[k 8+#&Cfa:L,ـ3s'D Ɯ=R8g v܃9@.\Guj%g>μ c<14L(uKuۗ2Ik˻U8 :iA>A{dTNd;Dawh%8sO'y)1' jkY~U߆?n8둱myv(=M-_Ùvp-o|SljLxv5`r9WuVvT6| #J Di3Vy}Df#ʹkԳ52rX˭\kxE1ut {2 (3O#1mubGyXaB_OQ-4[i(IşPgoXbM~!XoW>6=·ZFYL&oh:V qJMBc (·&ojvz9lEV حAx|h+NBUz]ӆX:Q6X?__f{@>JzHy pF[3"CX ]aw!JxfV@kb}9'x|=5(6F,kfUk#v+Ϭ/Kڑ ߖtY_NORu 4=4*RQ1 0 DQ8#ŷ~2w-Y^ g&HR} ȝ εbFQ"/`vZ/ ;&HU 1 q K|eоAțm%8(هxlC4avFz|P H)qr+%2IX8<T1'f3g|{zAĝuӷJ!v2 {q:@ZY7X }DiNLK8@,oMKlzS wOYC__.=`E61iU9hBq]Q m9 6⇶᱓7gfߦN ]jR!q*{<½o#@B-"fAC4gQZW-!:tbnilv))G5V.,_2Jwf/*R6}V #WldtY:\!I_%)ܧ\93__Iad=4h/ּU8^r4}o0m:2c滃B7`Wpq apX wo/ohmk%G`jOI꩹ՆJjۧgLUW ?|:,l(;t {jc%u Cq; E;XP)i~̈)b_TJ`X+G<=_U@marǮ 퍭t C~㴟bpBtBCQ& U}9vVPl)F8)HZ {tT6RD9ً(- ϸ-YGDI/+ѱ)OQ4zGB 0VȧMӻ8CgpܣsG{q4)vc{61z='p @w x9V hZE%e a[Gh !WXKOd&NaYR۴1tX^)Jk5 [ڵGGյYB(S%msxJP/_ [IkkeFZA*)nYYQݤ=z(i4%\lXe0%o7n2r(&K &%:T(o^Z 6Eɷoԏ(\!m[;G pE)UCCJ.m@<+"֦gpqzXаVx>/OzWɌ7>^`_bNat+~g٨M I+ +Ӕ,“Kma~ݲMŇ~ٗLnRm'E &N¹6sb7]/z~튵#dTmq}r;-$wY*'R;噈ex M>M @b4'nr='5ML?B. HG/n]N׏C_Əw+ W $1Z pʙi,_$)fg,h4-S&,<39c41lN >AP 1N6~ش, it 0V'vdc,~3Ot.9"oP&˽#cB()HЂ@pxw7eu>X$lE'>嶢)GhQrg{4@\?M {NuJ0LIY,'bun#LnpP쫨AaȡDTqc%,l3y*}b,5tzj(y^D #' q8 W,vCJګ|T+}`M|ryUw1hV5Ygʍ,?.Fs .{aK(\4aX$gq)SNHcFag=:#EnsJO3458& JƆT$NbA^rZ@n<`G&8.Ɓmp]XB>=ٓQi¾Ҳ،%Oƴדhg:!? 7C"4=Zak'EYaRZӼB$I_\Q?6s o)..1W_RJ .:4*>V|r#1M45\`J+;m& dBSL "*G(nk"Kt8̀h""7|漕~6 鏗s ǐ8Kފ٘bx&rɔT p^@TZ/+3؃U~bsܥIJʤ3/vHZnsZ}~Q5Iŧ;Tן|xw <ݝ -EQcOްE;vCH.SQXĮr{ԯՠfn .-]B!r`bM$ңhiDdz&&2Mfg+@tvU>[KQJ`= 4߼߭i\Ͻ:)wR7CX4M<_|ǣw࣍MU~ g眃=QQ]wOjaj6y7(6M e办XB-Z p"犸yJH 91P$y _@#9MG!# 3޽A0 ێ2IOǒNTuR۴brы7gסKh>:imdY/82H%E{D9ǧlkm7uMx5L}w@ -P=t+7bsEjd39DPن\3T`|V,5,>g Il'L%e](K..%=Ԣg[\唥?$l\wi-ȿBsl]8 AoO#Ӳ2 ^m!YB"3#${غuYW4Ҝ.î{GDfV ٴgFE-Im랖 VJe1B g_rI0atl[?mG;?-$ 61Sm`fm@ЭQpUNm/U\H h_aɟZ`!^g$bLvIP.AϜnlFd5oYl/pL"(^64ZЋ =b(<67xSU ^Cc8)c->(dHɰ <PE#A`Ҕha δ$(V?Xb0[_RҸrHa L+C @ALP S ҜM[ܻK-I$(%\Rbsu&{cIg@MVV}ll-6QTLZTӞwzH o mᘚ 4Ձ`]j0:Kl@}m1K^W/aA_ *L>.zxEFQG?\^lbnR5`-Q勇t#w=*pٶ.t@-_+g4\,˗Jf%d./S?oR"_zcI%Y@,O/6b됧7 )m+ۤXmH#y +{@;\ukI!`Ia,2unqjCfJ{bϦ7_ER@ԡQMaok֪>R'uI σ;RKpIң}Wq "mܪ#5Npᮇ4קeۯWL]''e]u 5z@z5zL_E0ڗQ8|: S=f d $5݄=41DIcnG5yJ5yALp|z,%+]q,]S#6B#U>)p`GtW {E(0*%Tx~cY.}"9bLDsgBW Q\0_Kx뵭~"1JjJv-_m]qCp}@Y_`첵3tU "͘k 3{uarїNԼ~sJF$WԷc};!IJ F9L@/ZVY̚dNok8# Ѫ-\0ʴ۵:9߆/ciNkO0ys:NFUd+X"͛y,Tsvb1O#kW-j\ 2~{\{P-bV[G4sr=)Xs`|3MNTJA-2qzTty.۪݃,H vfY CXu]J tB Ds(t'`|u,r䑣. ~ςxS?Ҏ\t;z8[b:\"FʭXrnNA=Jd iCt$^Cofb1ڭ4zOR\o(^гiI:z%G6C{՞u ߝу X(`חqvYAs:*QՐ,J.**)U6Z,W jiɪ04iL5xm7ǿTX ̑R<VeY+][@|BO28|g#s-MT8ěvx^ʭ|"yxƷk@+t 6uQoY;E[}r0iAna+\'9ʖD$2M[̧…Dǐܝ o M|])BaZ,u@`ԯ%^iW6Q~DPqs?MԊ{8djڜ89\Y*ʩ4]mst&2%{k|(C#ȀhVNőjlFPȈZ!j|dėҦDu-gHlTYh=ӿU9v[lzv-C/; K)/A5H~ {2Q:ܦW8L.]yQiHv d<) ')Ɓ|HdOu8-ul`_KcfA$F{mn!Q&_=ٵR&+|<#ِax<-j`[fj2¨P-3j=7,g:xㆀ:xF-v\|[zΡ @(=zďw9(|.CC?]@v'>;YMPOak|uHFzlOϡ2ЫgZNdUF}IHQI|sܺee?䢅yqӫ#}]?C/ ͱ; (LvP 9BnZXߺjX"[m^N'3fo4Ӆ8+FIlBQ8r1' #iJVq}6 A~R'|~#E\MK.ȳa h(9@3xǓR;rҎn3Zo_*,ڠROM;i0e$U.w%=S~ iϹKy=pqzKzu+$1[ 1ӊn֬z kItmRCś`.{6FAuIa. Iѻ(2"{[5NTho_[ٛCV|<kLb' }+Sx&GZ{*$ZA fǬ/L+1Q`wk'(Ѧ3[W*Cmul1 gQ/->nR(Gh ζH=@+mo-·~Ck6PͲ荪^7ül9Tz~I%?#vFdwЀJz2o߮3#עWwXJHЭG^])f/EgOWɔ6 oUnʶ.VgIԁxb^F ٥y#q{> G"r_/^ٮT\|z݉(*¤Dcٟ 7eD Г_o_ũǦoMh!aL!!:֚Am||)HiӦ̫Kb{)E'+Ykȼɽ҂I*7n l v*&UpLp.mt'TIVptn? EQyho yaNƙ,\'Ft:,x*6 âZIa@,֓$Qr) kd srGNS٣RfOZ,ǃI!RHR`b&s&))=ǿ|Q%0]׀jrW+a]dy 1d#vbʧ_9)usî.1 ~G26p֋كTUkyz4Dxm^rw[/ex-d+oQeN h#HĿ~qֶ2$QCy+E͏+VmHkFK:E R@!@=Ec,x a/K]z NPuYBhLgU5rSb1ܧNzSwV(>5I0U]uH(?ʶ슱5F-3 _,/HPtzH6z|A}QY:y/M I𪿂q*pEڜkG( /&K'o>X,% h*k=:oΞCw,[ 6IJASf6J">~boS%|5H-t%Z$_|鉩ft8*N1 $yGtf*-ݘVjчuǼl{*,!$B''Wq^E(@O|F~Sn8-<0 ӎǛ W˥Ut`^1 exׄ9zl86(4$–5ԧArQD&G|X@FuZ H<}USP47]!I|[a6DX4> |0"`6\e \vw2*g~) ymSKryhF[s*; Jix);䷣ؘ=AhB{`m C|0mPX`.S6 Ub#mєjj `!0OP Pdkj2䨞'is\!Þo(OeULVAly{^NӲaU,O ry$>J]NyIK^h yEI@orz" O?FjfRp?sJ.Gج o"^fu{[ep,`)s%N`2e/66ٷ@ξiWy'H;>N_;[95aSTd:dc(8Ң "k{oEQ@d @wdnG"j˜"6w1)EyAhL|M/ &B=pbfTm{"mV[Y(N;H M.r4w~\ći5R5bs/̥rX S wm/TxQ^Pk`W8rR!s{UCnT&.( ٰ,nspKy@%ȧֿ`kp^ 1N$ :eF@`&uB`Ojm®B]4x:;J q*D/.8]+ x0bNgD4yKWیLQ$ElR_iG8&"]bBXni9M$漚ѫY! x}k[lj?^ ÕՊo Sz'5?F7A3ӘїJv=^%u/RDbkIF,Mק}iRoM[Ѩwb~:?ԏb”zeMi'2hnp:i"l F(]4d`g2&.R?'1b1H]1$浡wp'V-A<Rۙ 1-kKlif9D);g& =$_S@@IA2ftSyaplp5mbrlPӠLtS-u4ؚZ Z1>w{A&n: pB1㑩,;sn󎶄'RM2w9Άk1QwLuOǷFϢi~ҐwzlW#Vy*泀 /!zq18,"= ʆsp4oJ+Ls2&4^5P5.\\ fސ OO|Yds+)2 rן]br݀>Gׇɺs%f'OdU3x 0_PkOZ!X =pHQiU7 l5=ҪbuŸ}a~aɠƇ ݭbQ/Fҗf@$kM;CJ*Efd yɰ\Ն[\2;e1Ncwo4Ѩz}gp_xl6f EgvzC[旌N:W@1dLc7{ڔf9mI;j2|obhNAêiCs .i'<.1-Vq "PJ 2qdX/([,wrWo)ofb=y!'XP?cdIn,(B beL=u[HW+3bowK}N[:0>3RڅJmL8V0C[}4LK^XJS|~*xc;YDF X!RMLw-aB?s9pD`S#fL'n Pv+ $#R$#+~"> !'IփP5?K!w0igY.xkն䥘~x}8KLpˌj%0wbpGr}ÅNj_¹<^үRݐda@&ҩuHZ{07YNP#5C@@0@3*^XUs N~^JгHWo|l 5pJ}xW * R8j1Oʠg baC ΙgzE)r8eF{.H*>dhC #Ez)lMa,ů>Nkn(Oɺ$291}:ucG0Px!.]{9,Ϋ$$ܰzޥ,#)hŸsvVpNpM};cQ,J8^Iۗ<ȱ$9/؍GИ1u"-q]~y-IWeYd}b]hz82<9ypw\%eM$᱀rU7̏!XH3 q,)o SP w<>Y L) /%>,:w@ER'r04G>"~f>g[;p@+;am2:82Hi>n_[Sqh'iIꚗ[|bN^Ӷ2WZ cU%0#^A&pI%DŽzC8xILy_9jcdV QiOhQ7?n8x1aq4Wx^槺,BùIKJ$>%[% ho#@L1}xk|[%SA6:äkCjG<Sd`ȴ7<+a~@$~qJZSzS8+Κ?qH.g$ U5a,m?S`\I.v#XB07m"S;'o B^f9%}VmSƫJ?|0բrm7ED[IOXS_Majj|nK\ދ=dOU,IOdp8kViHֺ97UFXMJ ?nQ-lT-OH2 qI a~8Kڃ ]e4}dMG2`^$]ۏz3 \ұ2NMkʲN^'K1AY߆{9*b0ip] IJ fխ~iBؑ(ʛ_T?adht{`j>FH;k}18!4$EJ? t͖skeBk41)S9.֖iODܓGo^>4}5̀QAE<$tFϗ*oNc%NaJA5jc!4AH:rrcAˈQ˴yFI !xLmW7U{^1ڍdǒ,WcOurJ+r H6_᫂ 4,!zP('Q`~.m%L~Fͅ= V hRV>⼼"|)4ATU{8^n*sF۪%bCB;k?/)sclPXTz:|;Ye xf;h0E"jWcEQ)oI"c_E[W k3Ion7)į~EXzS]'q$&5\>J_Zj3 {-D'KLk7y$usU~V''[3!QvX6tDY/b 탴s[:v8Q.y o/+~Wq=[_J p}MƫIjh&ѣDBy)v\ ETFK`%8pǵG-|4ug}ofvvlG+@,q)P.){xY>['{oS,UIBl18( p.,%e?/MEyZ&(3nwy!ctZ1d/IQ,w2Ihm_RN*9N Y\pDPrEYL9ggf'6ly6WDvOCkd'iSi5T[Zu%uY"ޒRPyTrk[ RV2yTxN٥M%a֢fKB_?M-_"nR)O.EH<~|?V+Ao17S(lq0qjhY>B;a \ө Ib PFUق5JbtZ|^ HcۻB)9m؉#8c k+*8?`sDkV07Aх>F3r5QA? GpTTԗow%Vhx1wu.˽_EK3W0wQj?C݂y)sl@/@&Ze- _gTBlBaѾ >ú"VwA;@CCb1HKæK|Rݨѫ עmn}ôL-@2 )#Kt !&HTkfy"_j"s .`?<Iq'!z?w{ܟ xcQg?a!Tcc;pnrnU-L9墸2Z,sB#5nK ѓ Qb<]==[?#~& 4dôRxϾ-8>q+L-%f=q;!h0g T!̄n}i Tq!M۟ɹ(kAX4Glga1"Nn#w}Q 8Ώ6y@ֳ=T8MI&)qMd.?G29Jg"O3iJJ+8 m)qӊj a (i?" H?LD}4v!y3q_%0%S68iGӆ[.YP1gvF ;/.jpN _P,W+^PŏXՈׯ\wuŸ*%}u+YT31g-#{.zBǞO/[У֟]&׃ Ej]:4Nlf>TSJ TI2*Td"U'WhOzYK/8BaHo4wm 1}U&{4rv" -'N 5xod|pb_g WZ%ECŷ̮<"~_0ݷ8;`-)dzchoحDl7\] ( Ko* gK:w;p"Je_BA]-УξnlGU}8Bp6,Q1JQK@^o {7EmfAԁ۷bCյvbAqX\aS*N򅹠5d1fi؍q'F*G59cO{TP0U4/D^'TcpnҌ HzkU-i1!@rQKcD(吝>oݰ S֋ТHg΢r̯Tt{za&zǫFp54r'-1 44\ f~[veиo?s;شZÖ7*ZgZsmЦ˹0# VC"$BKEp&%`!~/brH`>Gp:`6?oF>}K;)m`{d !5aЕK<>O )}Q0|ޯH~ /E'{Ͷȃ!D -x˰ pWgo@Nʤ6/b6 WC`TĮr՝<{}1l' ZoꡃלTA 9Lgug[^O]yoABJ 5 }ǖ@l8$>%fa$CH8xۋ}2zJw J #$p7E{~\.g`٢ڏ-rhFx~\^o!9߫ţAwX*Y9Gj6h(eֳw0g0؉_ ڪoV҂ F`jah?Âm 51 ~r. 萼e ͒_gJK 8,&%'e-I5{aCcg6` f|>6PSLb(Ew ظvFx`QWI>eF.qvbE."crnf]c}=#ra&ܒ>?^w*?>9Q싉#;#u-_R4DG,-!M TR"zvǒc~t].Xm)A#5F`Pp?Y%T؟[ܦCo¹_HncrL֚b5$٧R! X:ٷHm)4ؾJXS_GnK ,3?[Tv$(vv`΅C|R4wY72[<x{E4tFUXUnQvI(@I#rA"7Q!5rcm@{~懻ٯ.E k=~eGQI*`(W 5J;:Y:89 !xPߔ% 4ը@&jaL'Ǘ?d< -qU'gQ.ꆆ2LxWbsS'&C4 [|cZ5 p2hCY3f*ݟvir7Ƙ/sj\%RnTc뗣3݇9T8Vc;+;`{m슠*v1PD֓q~eC*W'˜0^YPf.rl3,ާl⇊Cu]9K-rJl rÈ2zcݖt`MaHrzݍ]_|6[VKL]V~iE->]na1f_6˽-3'?\KfF _Yrl7K5$\J`FЦ1Ŀzs+gQ4f뇊eoBbR;c1U loy"[6xARt@gqXtݳz,Wfxv׉}zR_&{xOvm.e|rm9Za~oʩiV]ׂEڇɺ֯zQwuM_2׹sȦWo'6D l4"]oٝWulYq]1o$7Kq :#k"[Nxse* 2tМ&KȇMC!IZet9]h9/-IBEuXD'5= We~U6نa0'=;Y)v@~eYµ;8`w6=_~+k UW|Z_ moR`:Ma>cK%Dlaե#+U6S67 ~&w3]`;ѮšdpgȲky{S0=X԰lƅ 񅃆/Z%1m.῏/2pt-Ԁ"PE{*r"tL=R;ϥq ˎzTOn0bKv=R1Iգ3i~\R^DQrŠd 'ݐǥBmתD`q$tĩ0߽0}K[ wq>Iqg@m#`Jn\A`c]?0Zhv-6sXe)ꉵ e8h"P]9 5MQv&"hL5Jhښ:'?zMR!vmwUGi 2j.tfc^o?6ͭI^KM}Qƭg>r*h; ~e7Qbܪ15AH< )f1O}p]ʨj.>*v(!9*J +"ZCZt%`XG4)0v.ˡC+uf!genSEyR+/] !1¬1q$ qY5baD0{%:75vm8]ЀG[ڸ"`êYVgp Pgqvd17|[cpA{niC2eys$L>_`~ٻsNUzqj=}0PL:lKu|i-IKW8pb$?nn!~I$Js@a%4K.J: P$#fāү+H c̪σ}zLQ;{l3QT<3I;^UB|a/Z>#QE:JM{ؚf:̭x3ᷪHd҇Q}I t2sM^{iPʀBMyt9::W,O>@k5GXXkyLIFI!b$c]jR>Gە[`:aGzQJ{YHY}F,>gQ&O8ٰ.3ZR >G⨈.3\%@K#%Ё $ cP\o܇ZS}O6d#,_Jҧ'ŗ6Qx7hKoʮӈi*m<@o9@Njg=kGvvfC\ۡ!K+ A#INͪjvlQU cmC$+b&W僚vx ǭSDŽdG>C#ϊzect`"τJh?};mg\Y9ܿSวI3.y Q7?pat8ڛa.aS638,oI-xs;^ tŌsEd-R8\?|[Ô7:y:n‰I`+"YPwic㳰TCd M^6?T >QZzYtZdTr.#LEAjZM/x`a|+)rJcDWЅ9i=8c%f/ ,嬇rg/6~ n=yU>QhŴF]wfC|*@3RQ*uF1~e4Dr;`GURLV&%)(i\8'v_vN *SVfy}'JSy,0l1D ؒ~x7?-ܿ=!u%#ɔ~gDPq@BZ3>䱝Qb/ eFznzSbww6Z!1+)xFL*X cۭΊ 9nn}gz\^+t_:3#}0ИP,lyhЖ%ԋ5Z;ʢȊwNΟ/ Aap$ϼi2k)8RZ!K`aYraJ(wE}ZWK̶NdB>Q`#kj 38?{=wx K%N>(LjDfwEܑ頠 `rڝKv:*wa=`wwZL'3O,w!~8g  Z %0IN{@OPU#ӂivxO}vhpOlUŷotM(b6sG]]LR3xWQ gִU(]]j۹~ bO|Tk%JtuhFhܜFC|/~.!vߖ[ %d>bn.yT&z2Z!vYjB-'e]2hb8`ws{^?RFƤ~'` u$p`c)ڍ+0gYw-NuÑm9R[g!u"f((= ]x\$'.+r@gǷXN<$_ QeV)/gp^Ol }طBIP`TuX~`WZgn+rPOԘ*'H}!}1yrW^Ɉ$X3'E .v.s;U ΁~wF>%["v4O{x䠙psaD4S%VՇ E8gԯ(p_ge1}灦$9Mǃrl luԜ$JCSL Usx1`^0ipJ1%ٟ/2ViGv?@EX&ٳx;\q1pxL `z|+)Ggň:) f3jõ)"\)fw1Վxla 5HDulgUó}ǬɮD_͜.=Hw4HD)؅a˙& |ȞyGRDI,(F Ȅ4^BŖ?FN׹>jWg<[H PE&qVFネg3 GB87!꼪Cyc1>Nl`sbCwR9B^宊vR#伱d!cP):Q$B7e$JZlxʬۇ9yA=mbɮ&(jm:=5 PEޞ$"rnM7R~fd"5bJlDaW1T]czqckoC.i)SJF="u4fk-]U^Hʣsgqw D5PV >VOTf $u,Yh#rjkQzfady:1WT_ Yf&j3Ba4h1Q&QB|-sWj1Ur|(iG&yBaLcx s/I]Z)L'kBk,EdU-ٍ]xDelAӻk$Q?FdO|B;I9?.J)γ SAt`(yY]vYJC}_˩},|?j vdv'y|8 "DF?HwqݐAf:l~QBXpb):ٖ>tjû.*q ̫QݘѽCͤ /Xj#=p4|4O 2ׯ%Y.6!qƛ2p̤琝|zxy\Bdhx,dz1Ȕ+.%jy~9yfΒ>6#E탬~5°\ޚoƹɑ>KXoOXhҸȿ:@ /Ue3?CC|`ElGdR'Jb#&`tlc*Cnm$qTPDVAl5ě0mxGH_P{2 vv0=z3HzH8  "q#&A^. O29ZK!Np'"ƾg*F/N*N @\( o`\>:DPMMka{fkkEEȦtwi~jˡ]hw*S(g #OSE&́m.e!M(>ЕJD]kW/\h >雧A]lC$""1Xr~|g)?.8QXx(1k`ZC@IꄌzN>#߯HZtnBC Fbj9M[;]T76>lvLڱ2SA>F%XAo<-M|Eq݀8)=H/OߙD=4B o˚z0{m89l:$[ޟS8Kxr6LJ:%z1+%8sD޴SwB 1,!s8x:^JX=lCŷTE!YTC'X8j Xؐ]_ROa}Dd >So%G¼aS ^p(lNp]&.Cbf\?e~mC%#dx!+kR- ܙI3 T¤n]IѶp?upt0a/%2[ܹ ̾KmKTu 9Y.]a7K1曅yP/%촷ñR&MСz|hJ+:+D8uǬWI=2]K 2q-Ί2fv "[FSR̼]B~B˱yFGi,;3>wa#Z3~F(ͫPG1Њ؎e׋?Pp!Z?k?H-?\:>_LHAZKw;Χܫog[AKR#bɝvGOퟡEm<[1ԅO'yI,*1FkS>(+g7m>}Ұ'Ungoy=|]!Z%ޤ"(Z\5̕bd:}F&+JXJbiƠ5+ScY'x J[ԍ7a<;) rQ@lBbUÔS0AB]ʴn't r' P,QbWk}ׯ^ǻb8d4MbWu"J5WY$61aLa"e5E,.i`$}V|1'/YpD\dY{\riI_ՆǗ;lߴ_9$.>gdK(<]VQ ?*YB 4ٟ_y֞Ośc)??YM[)rb w>;tg'3kIzѭEy2%ij?"cs)ft|*Ef#DKT{pB+%0_xdyL3uB+NB"Z +ʍt=2BE:4ɢ^h C]HhWq]fN{NĞ}d<=[#0Ěwڬg]-1uXi̻zjkBQ>["KkyGUj%lvZ^On_]A3lqmiq}7e*yѴճr x7l;,믧!VdTX3 _)I؝ȌVJ}.f=ޔrut+xDP%{c MOPF8Ūf B#2Zq P?!f vs?%c1@ @DvXS76{@_&.XKե+%MdyP}ig`4w:?6'֦.)]rs؅#aԷLزrІѢ߿M4~wwl?"M"rlx/&*e W_ 'Y9}VmQp"X\`]"h~j i,^lZJd9bj8ύƗ)BaQpXCKZR(1xQ; Pe̶[rQpWy\q6 *X՜{atjաα$F~|8#Jeɚ'TԮ$mL#&&F )1bMd>gD >s(p1E=_D4x|m'6x|`9_YC?+E5b軿hf>va?hs, 5wVFQ< MJ}-aڀj3й= 1GKr4#~EW9఼na2c2Wױ #yw:v6vؙ3Dɧs2tiV3řg4~7 8!U?hr|1fӧ5 Xw|h݈*,DG쮙qL^` MվZ=w5OA+2\+bv`;Z)K@3N gczpBԚey7~FbtKOiwNrEУG,Ԋ}>‹4RL=Ь2Ë%0fQd ܾaIyYԎWO\|GùL/t([W֥|ßӆI z7aG0d\꟨ߌjXgnjWOVpv;ؗ:MsBT_uɊNj55Q8`~%R.9e3vw{)G8A aH78~R ms*&%ZV&bP03GdLm3Ϋ߼e$as~v;*, CΝF,g }+טYS()>E0z1xL:5_bm3Pp"RR3Dn0-4ߎ>N>iM.vC9gT@e:;_NFJӨ5\*UR.7gIC{x+PNk裫DMiY`xl_R7Q%,#Y>ICGph[^Y@3$9rNg_*dR`}/ψuڊׯF|y>1.{x*Zem/X\f=vbB< j Jzhgwɺ| AgLdƝ}Єo_~U,H c갈gCmJ3"?] ıl9eZ +$n}CgGH]ˈ],AHbFjB\r~<#?{=5sד%gb,|UywJ< 0ҋb&%7 $pw8|rFȚޚ𭻻Gu{o9J4]UԕX}>a'V2o""xgRms~ bq0 oһaV5[xG}$tߺ1eoϝ4uQg#9%+O5Y;5*?c?otOXixpwWzYCeXW Է.Wlߡv2C.IcleNO`)Έ}JV,0G.)0 9ťEZssM#eRS81?y!I>z^l)oOG6 oUWBd;alj#ioieEAj#v3/MGn8*wz>>6Pɟd垜(bxCz`ꧥB,2=xzQ2IgBXr0'ɔIl|?{:$41%o0طr8¿ᦙkE+^ n~>+CɅ{ GA\J <<x93;-C?7E$Tn^5E?$Kk` aYø[ ;ЮgMgu-1 !5]nY-ʘDŽQGQYW U}Tg53]  ʘmVɡ0bL_O'ŢȩǛKOݴpOa)U-:C Wؤ+C0zm?_RGEVZ|.L 뫭O@l9Ӊ)倁q免 xrA,6i:q$;;-9`zLMJ}x]9ĔDrz1,l&!ݸB ci4y]O{{݈s;*%z(Jpf,8ZĤ 'nC* `%F,7 Gi=~&$>ϪnW{DO߳+?] ??U NlcW;0qǰ#,aHO1tIT >T0-o]5#<`o94܌}$h~"yuW@"$p<<.>ߕF^3e)٥f8)~WG'|U"ݓY]E{?sl{./v?Oq47* AOl}^V6:H?wjY;hy*W#n#'xjz`.,C\C R $vrg0S^"M(~qU]GuqJ:-sG7YJbS;Gv>kiMXj‰3!h>2RRdk2?צNPl_Uzve~m-tٝ?1KS*! GؗZ ea+KNd0`M#F֞G9@^ n Lmz#w&59P8yi3%W&ӰA:yT_ݷڜT..Gy6y?:lO&-T0p\]DÉMKC*LWڑkV*O(V| ֐T[h*IdD?;Gyٚ<4'+xEѧo2 ۸}>[.>#զM1~eڨ83X9^|Q3xCoe>34P5b5߇OUWfE;ꂾ0#OfwJc?q))*ɥX q[jE;$Cɬl0TxYbwp=eix3ٷJUEͪt€U@ b(u0f킝Xp$HQӀl?VžI'd/4[vhZg70P=LIkt&]{VE9Ȯ,k=fvIXQ~q/؁!tcgbN+93Y*|xuF/"MAA8c9Sa${>{@M`=/M(^>>FqL;*V)G%|[=i#J8JE*խI2߽zS) _)a-`Z Yu<^U}6s~wUAcٞKM)|O(wMP7'0*Ĵ,-bl*U9"ޭzq7[*H/+qoA'>D}Hz* )AZ[Z&+bXv<#6/8SӇF4Bml;o >#h Lppx*kuO~:w.ivј(@Y.Ssgzy!dK\06NwaV%L\3X{ʟxdKvfUnhTUHCCO ,XXs[27HfjET;Ye`4ȉ߈fփם*|R<=L _^,Q)U΢mjRmj4TxS6w0ǻL",NkaU4%'v\%k]r(8dUjo} Mυ7(?Yjer:Yߣѵ\p +gJ'YcI.eLP@sX`̵A$ՀjH+`<VG3'16!,錞ST|B`Z׭?T2_a W:TGICR8¢ŗf9E0I>0M{aV`ᡲ5imԑܑ)K<9VRW.dz+*{J_Lߞy_ę bKu9f!IQ;z\" pG }~$Uiy͹HiUZSq6XO5:>3wK_k|wVq.O)PEl,_oA)iK β}bwkѧ@j/1W>Fs0ђɩ+"{Rq"CYݖg4R4}e>Hp} Kgb"c= ]f/`ġ1ç"? }R-F{؇®$(ξK~%n73>SWš#w}@^"š,Xql%]V@l7)eRV|Aǧbhr`T1drJxƱ.#P/hbq",F:Tk ee FnҚQ"Omow_CB+/*ɥoVDWW(5%n:e [O{} c?3Qcۻ5Be ȶ dKA>ԇ+~taourE7_(/!pg+}g|=7KοW+@kŸ.kU2u1SI'gbd-7e2M2iF|-c6A!dh7%#n5s{P7Kl&fa;/^5% ?n0_FFDkĨ(͛E ZD77_%SbIY%l̕hnth5]rTD^+sKI_c*[\eK]8+%%;j~+]YO|<"`_2bȽm/Pԣn~C%NTE ,,4R |Yd;_jڕ^g0"{\ JGLFhw=7]@_qFR_E^J<8&5K[UҰ#)?=@Gհ/3j|oMoTI*ejCR|tr,=5?avI)1Yc){ldn`Wgԇ5rWzBnY0LSt`bݕ㓲4ȉ|zOEg%;?,j.^ ;12y W險}:C%'JTVS@ZȰdf #K| 3)38G̾ Z-bD} .9iG5{A͜iU )̺֘At#VJڟ5a>v9 }t|>rc:9?$|Zڴ {Qشus>i-FOrW^&H//[7:Y}<6/l_=(W霭q} bx[Qєx_sࡦqSŝ5wķHCo%CGrHKxd:≚[履+$VuOKʴAWtn?Em7iӢ\xf\i#|Y*8* 5La?E qs\} E54L8bw9ޤ]Mpvqv嘡7{z:F Vfɳ JG>.ELq5uP"|ӕC[7gѲKY77 - µ`'xEU^ҿ&+k%t-ՐnjU᭍.x %Guf'2Ze׃hxn3If̑CK`WTKکн-99gdP=@ I%ݠZ+, PM)b[=_J09$d k[0.z";sNrr׊?+Md^rq |GƎ0-+/pi; %z_%TjؾķaLf֌Q~([ART8M{m]a]z3kkH?0 <.22v_ߌ6Dp\;o dV۷>T?3`(8rIu*#ƟPw+c]Ӛ`RoVs3J\m' Hg5ڎ*i $D: BEN~=dg?_W׃M$ڕ4 ~5OؐJ$C4Zqt䃵5!%,C`V>CBbsWo|)ި"5br\xaR3VoVڇ@,u?X$s}7GLz<6Oh]IiMykyD4~O25^=4;[8u'rDt){?eWWm8OZ_O%bLyQ*Qbp0Уy"}ȠXE?ILsE)αe)VbgMII ߩIOq[$;ϵK!/^.|Jo3̌8yKJ[ʒ`MܑWl)i@k z`UzK#/ h{Go `u!MO)SNNm{&dCkF"o/z *P?Ihڢ((z&z9-9DN4.YV ]}˞RMm 6+ULH:{DuVw{'OCK:./ >GKZ*i̭e.KG&iJ|J@?hB5l*-tCH먝oo)VFpg{)1a3hzJ//_h)'$yqC\$vɈ;Ħh![e>CtP){ 4j"o-TٵIԷ/KrÑe#\Yyj=iT&Z~0kH:zL* ]eqL]rآj f Ԡl!Ew3`ݟw~^m,z&F1saNÙVCglxa.6Dh Ox%gX'+8T)+~&?Yc`؉2ZgSc[^3LSxWBqS"xw\z;b"&ݣ`,"٪gc`k3<@MM*js}f ^_bBX sB̍4,2i&lnIQCIޗh.KQ>7p)'=ڊt.\ZC*`K#Q\ZyKv]jib`76TL9~!~Wo.;+2ٺ,+(JbVIMc~K}t=?9n|sl/ReLEǚXPlRyNe9TVfbtLfz4ֳOᱺǿ Y𚯪@<ݮ۳ײxcg Du?T=̺P~H')aϖjlƳ(ܧ.L9V;yAE.>mˣwڒy#ӲX`\2Y!eja^9Į" C&FҶ҅MgR1oW]G`qW_|Avr%'ط,O3 fn0kN =F5<NxzC+߾Ȋ=UZ-߃OzdDp{V7_2,wMkZ@)H <7?B1,"w҆͢;x /r"l*N*u>*qQ˭h\Q3Ky$ }TaR23OEr@k6hUĎu\YK,6p¥l$1Wq94BjL\4Yٻ 4@>x7W XD~+S޷}}T 7! eE@61c,)YGZh@5εpPg8fdm.i(E!uoB1ZCbY>Eˢ-17dX"H^a"c%+zPu8*Śj :v>k 39WhUD5B?=W\b$a1ςK!PSrlxY 8RIKF n=k =Dy~?Ye.EZ'x~ )p.yyaG5AZ?\ߔX}+}2eUtxxouD6Y"+j *۠J{ _F05W eV5[sx4'B[,&~iQd3h8&%wo_5o5} ^)Z&n4^Te'_9ed ii$]I;)(-堀lQ;;lV KVL(Zg;>E]VAڱ{`| {9zNa݇8c^;l/|S'Y&(4%5y##NT܄S>9aIYMR";RgudnQ7nށ0W f*Yaȉ*Wfrz'T=e}˻UF nf%ݒ4V'gH&gw6SL3v7D](~$B6w!'AYsnQtÕ\И.W WA ָ~?؞7^ a.40ȱƵp>1%0zKH0_zBlX-t`fqy / d9<߄FmYdOx;n1զ-5#úPD/;xW}tqxniM:Gwc9̻kZJ5 [F9_!G`4Y1(ޟ՚GVH}Wl<ǩrY ܞTtdl}Iϸڀ#X/Ч3.]u.VPzdΩ[/"x)HD,Wz,nŠs~_݁`ek_. aY!&bvIw<7,az+\)y!p&pl{d} 4e. :哲_߷{R*O#JY ӳy2+^σ}nJ1 0Q R_ҰSfa#@&W 9z$na?  -Fg.5X "|=~YU7Wuɾ0j&*III1J"MqYCʦ.a9dX?R@Kmڎv^'o5XQ^# Xb0s.3us`K`mY_f&ΗbBQ3s4!Mvc2 Sa L%l(k-|:cX/_k<>C>QgxFMsݐG0ψ7)3 FQ4C-HPơ)1dg778\SՕWMkl}C_t%| pl J~i)?6Ӯ.zHLܡޤ#J.QuGf~$xF.NڞbxuWpC' p&D=djIEO(_]X4KAK(3Si~ ~P7 -h`.I  o?j,Ѝ<2n8~Vzs{Rf̉rikf0 Ts!hZN QSgR}HJ`OqMADC+'lؔ-[:ݗ&>B5u=>sYh3d4)Ұ2T7F)b9,cT?^g7!ݚ|=W$W;Vk YE~Ur/w4CKGP@ē$Y|1RlsY7:vFى}^5V]Օ+1V7b& }0,cF~e"IRhRBfuuS,QCc c0bEtǭ=9 l/iȝ R9c}֙ɝfА#CfȚ_Ζ?bcx{o#ubuTnRls[;%95^-ڋߒn>WTg!ZJ!Ud@B@vo-(p<}~tQENXq>D Dm߁00HR\(AqԪp,f55aGtXOtF]fm-K%H05CғB(Ym5{/ |ǀ_epQ࠮|qR?/r-.~VDƼ^-b`!12S%5Y^u 隷>- cdjox>\|2m7=n=ZÑ^nyKL'#G ?Ί>u%u3$2#D+ľX47!!K~+b)^M;>5b 8A@Ktu`a&X],ĂEmn55i^ci3(j3PJ;y}sJw]9_1Õc>)-9;3Jac*dʫRäF'h 9E#Ϙ$ O 'u`/N:q 5JgΨKӰoA0z?c2 [pa77&T/ӈ>$I-pdgo΄_Guyxd*sY| rEd ϻL:]OA~QJRG"o]3!%XL[a{B\9A^޸*Zf (Ʊ9RLX՚x+ nbW8ޱ-Y"i*#|vTdH?E3J%G!0Uk$#?)EPĉ/"p]?om-œFycg;o}ǘ1%Ag{O0 OpYFɋl%a1f!`[h|r4JŜ{vF?O?`b<~} baBdP`L@ӈ`ICY6g>X\$97T_Ctj+7wcIr9A3u4M):ތ3e&W֞1x$1$Uz;0D4fA]]CsB\y p7s1*ʼptΥ˟<Ŵn{3ZG wדKX`Lc_/Oua$lHAI)nߌBf"fuߥ8}'2b3ƛ17[$eD,#+N{XEZ S,E͟L]Kali[]uI?.̼'"G}!֕D}tc]~b3cp̰Gr(1f ոAilzg}&rPP#tGJX} sWƸ=Nlp5C`2zM%@gvR{u U)&g|fTJ)}6Hi'v9уbufY"X=,;D!`g3g:5|");~᧌I\2$W\8Sev]B0}n}K^~L.)[Fu:&uZOӴ 9zs7طn'HR׻\&wBFj~0Up?IZ<6{qUVF]d}ava"~D|-_ÓJ.vu4Qhs [G,% Ȼsc_XQN+>CTv^ΨgI'俦8oܵ~*H8s 'r.B%QWktRfsLjĞhx[챌Ei̺}"% D#@vЯ\Lӈϔ~?󛯇5=8pێ{16BTҊ")…?Gi馌kdfZ;XMJP"Tt Ԯ,""!!h%ƴո2ZTkO b܇!˂m15  Kh?~}ZC$/ղ IӸ d,Ff]uBc>RV|)ət>YMhg*cdP4bG?4f)i.zV~ ѫ~,9JZ&2芝4SIr5I[X f4kA'2힡6Aqy\>INMD`:S !}.#i5iDT7DoGe_7p ϪlJ)բm~{mK48蔂o(tr@2~zmP DK0=JpwZ.lwT*$Z>Sue :D0.ۭP)hLԺq'})4xmp5'@QՃ+F#A<ڊ~fV~ci R4Fu9skn>%ea!,] Y{qmW/I\r֤9C[ ׯƆ`}%˝DO{B9 (GSCA^|Kc(@CΛuXX(E}1{lu6%/{9:;'^ fTW݀[B^Z"Ppd&E]ULU5HC/xtjkY'b bH9RA1ڏR%∛o R{PD>m싼pIYzTwI-%I׹>@Ms5oX\6<?@9 y`zD% %jSdT=|D̟|e.6 ȋZ8#*Xr,?5=-pC[5[cS:*Ҳn5#}km$(ӣ~1o#K%&EFU "c3*U&a=.h'ͩ>_)\vmȝ8=3iU.؍u "V]u~\ߨj7vf/$ i(]:!!6YAm\XL%4_/I9Խ*-CWĮ:2 _"znV(;A@\;m!mHuBHD +)*#IuWY^ ґtIڦ4vq4NO*ĮUfcb:G1Uo)-,oj"Uy۵$pOά'@G¢r=98p W.ҲBv[;}F(RĒ3EN%8bf;]ܶTY͒K#gBoCτݗ_ekleT!,2pz%o@=sʌTcy)Ru12tAk`I ,w?{;\\UY1SZq %~ >yP;玡Ҵ%Y\3AQaB AIŽd[q!__HCƪIvif]CFF A<ǯCfa"O7_j5T#@&匢̭"(r+Zq>'d1Ja֔g?=5+*%5gGF,]Due擢w7l-iLpS k]%ޣ'"*\y_‹KI1Yo= @4J|犥?~&AbK+kE~%#ۨx3HK-N^ٯ ;oYxrHz\!Ȼc:wϖ%Bt'2r˱BPKL+ń2gX}<ÈGYj&sJANpdF:3C߲Q-~ꖛgԦoĢhD+$~ ֌tx:n}G97?Rʧ 섞Cg*04]+g洘"?5ba Dh5?twTgѶQߞ: 7߁꿢W<؄4$G& o5r4 &Ҿt c&0Ŗծ3*RVCf9<󮲷]Yġta 4i 6!ijpH!Kw{:]zb{KیywA_YH]Vm>FQfu 7Iwˬx;+iާ"Ic9߱? d Mf!ӆ,^e-@OXjƒ\WwƊ1F!.i &͍b{ v):݊&[N'ϴR'5".T#V&WAڟۅ7,(?9/X%o5K75Tͼ;}_ɲ0HG-e+36>X弱PqkAlo8|9@*7ܾ,I絯PDBc6)Չ㳽V dq|<}~0kЌ]b-A w%a {ő&h#gb= Il Ab_?|`%eOl 9eYev;[,3U)^bi̧r8!<ǒeNTgd*0A+,3ٿNSE4Ij[(t ϱT{w_Es39*2}?b<1)Xw\tpL*@"˾oi7ݻYH!teY-,cDbaka^*m@ L-C6ϲP{D g0tOZgh?VDs@+4Ӻ6BHDK"v :N Cw*y-`XkX<4'zb\=p_@he%_ס@gڂ^~<5}C#kT2ܶa9,&sBp+T%Ge~ !k˥F8#ro=vbRK:[ibhoaBC%.9eTHmCPio>X!os}3%YOraBx.篛VBfCH&v8w_-'?-s%1 ӈ,h%ːTW)(lFRw#$9&īq>plrg;L\͒pϹ¼x(MiLUm|^}$ڿAQ~\P#1誓scƳ6{Ӻـ#bږȓN=TbSozAFxnz]*|U,#փ_ds*"J {Ew,`f]ș̾ )^aPj2XyOyxӾ?E hMZp~̎ $>ƃ>xΖ2 ].|Hy攙<=)[eYz)QϗvQ.;LrtH є!CLP4F3qb$@gJ ko o%xZOQc~ э5PZ|k>[vX緽uݩ}d)+1j@;q#(Eܷ:ROޯ JS\I9FA)Ĭ[B+Fh4R5A\e s0ϟGpG듪v (Ai dptqSR($a[MSlgv )G:3 GP&3{t%2^M` ^^,&Z:qvsҍksb|Yl#Z1:z=(5ܔ\m,}K>q@quei?\0l`XUMlpX7ا?ŠKRg̙}t;!f+uޯ?mP*!ٷ,oDq lE7RQYcrq/w@6a-'JUT@#Jnp`B]/'9TWmdDOѭK+ =2dwmf4B 4Ã$nWu=[) { W>+Q h_%Nl-XykI`>Yyz`{u0}lKG"3=lM:(noE.-cJ)ngD LIѭׁ]ץJE ,|I꣼ܿ~P8Q W1%ى;">ɘ c7_{o"w#N>ЬE;VC/-!9@Z@xl5B˲~^=w]-3|QBTqA|c( uvvpLQ/B$~}m|$v)ϐ1U"F)%8Sg{ɼ3Ɯ'4 X,FaHd1)9u\L?$բ<*܃zmdL^Z&mw>2kR{>6OD9V\ -ֽ]]Q\ͱw q2-[@'?5Kk\͖3v۳hxҩRĺŤی3Pbxol{\<ͮO&U 0?ظO wRfc}vNK}#3]ywq3K_)s~+7(ܛ) z!5?g ёcP$s4ig5 gs >G ڱ4=FDxM)+@ oڥri≴-}0Jli1Ksm3V̲S 82qx% 3OuyT+c7#{fa>|Ɏn *X+Ro/ֿ5s>=: R"b4F{b_'$)\)! 4 OAl &]f^O8̛7:} 6h*~'FXU2FU z[][Uʇ8t8A|$4*!+1Ol:bN֒#Ŏ%3Tpm)$~NVpv<!YPL7YGS2I_N>S0xb@Ix}f  }#i~Rwj=dcAr|iƫZ,5PHv=A-K<-3X8qRw O<-%$#J>іʐHik1<ǨʒgTT 0g_R (hJfH]|wuV/O٘&AmYd}i5H;Zy"yqAj{eaVJxtRr{]DhČ6,K2Um+v[D<HMlw *Ƣ{x>A>3wI p{+$0O\ FՇE*1._Q Bp%t `C>Ō t\3X)UZ>)9/2L {FY]\y$+ V7NWhiIoC֞C %)( t/j+#Tl78ҕOqn+UT[>݂_Yžg[a60J9kzSMfyEx3]0RM]/ P~IjTd,zEg\%R}P^ R;x.޽ky( Nу!K.³sѓneEMmA$oQHDXI:mvJ:Z f@>hQ{>~ࠑVyn)܌>YS(vRD_}ayWDgP7X =2XAdeYisHB5.';ܶ Nw{ѣG΅Fa 9,ߒIV0@N]Lc߯ èw^؜x45{_i!s^xPs@Ǟ4\͠ƭtaat#Ntϗm锢}#N}}(ry, h{.p熷vQd{}ԜjO1g6؝M y3:߉ X/8~GO/j՘]j1`+ƫ).7ϐ q!xنWVL"2AA";].s>8*{%e!;y/'[oS #5]u33|[zC])z6gýkvOūCmU#ՒE L2fJvE^it_%4M 5 JWv<>$\w|3p:\h1gVRϩn׷,,nJ2n3Sp19eL+Ō@^p&ZDQ8􈽤lC^5N # ԧ_F +>F;\GT#NORjwcta/?_%ۻVy"85zd6iE80 $P(!!q腚%mFB72/|.LEd(΢^U^oxؐ}E$9JTH pRwdvzCŎ~ {*ĉqڒ;B%6Oz^ysnaISMNp}z,惉LsՎ˥+ 龚~e*JJZOܡW!<6PyQ aF]ipƇB M ױ .$Z:v%s 6x|+3ɡ F>\M<Loid i6;xvG=t~g2Oi~ I;T54~#D8t"egrg=$B q8H2^a'd՘)ȇkt孆M)l/ hF_(@TyqL vXS_anlo3AYB7 ٱM? s3:rA}p̛|^J'|P+0:[dMo68哲)y B܆>P͹kFszojgL*8qw׫*d_[eG웉|joy"@ ѫ yo]Y144C?P'2 @ 3Ey9}~%T̶.!b/ nW~05`㚤EBa#DeŠߛq&o}{C*AAZ=^>R3q\CQQ"c{56o_羍w{d p0)o*;͍ *h9\e|EP%ig`>2 fTcvWFʃgɏ9WR Ń_8nqT*[3〴½+]î}U1@S942DXtnf#Xz #ߧX%;IA}}]=byS ~VYc+AԊ 4qVHͳJk@f[ڷx`S_!% /uA2՘O ЮBq&7RdKa_jk|ߌV)v +qU .u^9znq?Y|P`ywL2ό{>|Lo`< y%kHmײsÕXǤ}~6}1[a΃#"QϷ | -]3 E OQY1+`.3LD 0]jVԭO&!˃Ѭu!y7rsY3UQbO.W.3Y(fdҷ^>/ˬV=9)5+^bYvvI(w)E ~<$D*o٘||MKH\ˠ[O$F8<)ŷS&S\R3XX盽dlz zZc}GBs )y(@P0_T!6fU<$bK@&6n" JSb<赻}L]4ƇL*xiIy*?a+Y4Cpnb-V#CO^ø?DEƍD 9V̞+qfJ]ϦT_/Wj↠H+KP`u:\.mZOq;`,bj[xzIJl+F&^:7)El-1(gT6WKYo#8+?}*i)cK%\\NjϥoͱYq1yOguTzF*BskO!7SZ'he䃟;%1[KTҁs8_DU>źGdˇf0'sM`nkz|\Qxǘ܍5%.~ɲ`Flk;m{ s,K/kK8k4w~Sy5v$)RmMTC~>Sb+Fmn3౟o>[LNkZQ}R=j*; XX3H蕩4i-W.EO]J*#Z3 K 6U j?1+wr=J.v\ Ζ,˓0ٺ "7cIRITp׫{lȮV %ygKIn~e%7ʥDSB2=lur-@2Ͽˢ~fKu;Ίg Mٜ֕)wpf胆^2xY.-O(؋O=wd(KD1UD|`Ha ,p| QS%FU4=W2h9Y]RNNXp1TķfD eAc[p2xzjlE' rob,H5T1޴N)^i* q0䲾eBBBR~[sXXHw7:0J/QS23fIR49Y(zFV$hO!gкp,ZH\wsF懖".1}1Z(q{w[rw܂}N{Nl]bZHk~̌xLOn ! v/}\f5"b /=4gW\U5~ӉCt!5:r3byP}3\(/H"@WIXyl%A@8ZKKqo^fQ; :~]@] CZQ;<[h xWc=QӀEhMmB5rpI8S87;RhBI$ddSʰ@NuC2dq{`Nrp>ND p!z AX!n#U);1 oAɷ=}~i^_7tQ)`-xXZhEj9$喇R ?寝Qڊ9ۗoU!lK/y|(_mrx RSϿ3@Cj>0^&nc^bW|m96L b Ǭ]:/\5ޔy+*]5 0@I\C\cx 1ne*p= -W^,RM2aez7}vI}zy๯l>u0p{wur@`=_‹ꂖ9VFRQͬت%\4Hn2>5zWjlLHzԸ%5>#Rt7*~<8TW%Z`KE;fa0w8xa5i1H]x{nIc~2 Lje|FA 1#ӊ':1NMFaHwH-2'EVgpXb;kRķ&u肻h7UVcnTUG9BBR1ZĐ2"8 CQogM%-P[/ mI(>"V%ʍR_Uwn+FS N\?yR(''`ǒqg2ۊY%p!CV7Y@2N`%wI'P^ R3,LJ-H+= G%KปDN|čQ+A:n{Ғ5ĜF|\u ea]NX#j VbbfhI8]oіR-,KU=}ѽÁȯJ)b?gjgB$ն$u[$8`+B"njK1n{گHqcUy khRcu yU~w8G Qd8:Ôڌzy$G V7$)0 PC&q;):/Ϭ ZC*$l?AR,-1] =QXR\(J0:ƏGKz*/oWS9(n=nJbLy@ۙkֈ MV Ys.&r!gkj!*zۿe``~2ʛ]dZ^f@J(_~hroZɕagzu9v򸒊|P7!ȌOڻiEѩK?_^YP;gX>-C}ote*;Wf՜MZ`_,Uk۴ۣ_6b[2ԚJy4;E_20>K#h-ϩ{F)Xoj1sһLm %|rTBkb3-3A twU ˆolx?:̎b)8#/, s,CnH܏a;#|3"=F!Qc}`>xhտQ,E56 7m<F&1}0p3CMc2&0^Hi|HdLU_ )U&+U}`3&t/Q0{ūmVc'E1i*Ɍ)HC0'l_pF.nWpH[ęH. s:[3ڎ@NtڰogQעx" D-ą}r]JQąڈkx-D&ZsV%45 @/up\KUvS+?΅8רm؍^/ϰ-63RЧyͱ?ս XFgWȵ-8t}&_E)+X8$jג3R_=~#Mh.ۜ4g)8)oLJ Z"~ʮ-~w3BAf[1sdWJP-l. A\s5@. @'/Eܝ2s},;ʊO+LTAǯj}NcUwA,4'ˌ}2:|UIGt+V⡧uˆ}@P" fj֫'HmתKc.)!YVX.9JnK'yx=p7= {g$wqtlh KoOBi5OenʪeWxy|=x'fV  LI/|/FtFĮTSB[gtBcib(X+jf ae(Y(eljD|˔xJG@m5q&hRft$J 9~Bφ%!i()+b U~A ÔLPÈOZ9!F>%hDҬ*PGt}{?6j;89QDXE[m+V (ސ6OI2Ԧ>ʴ 91G!ɋ:-iP]>,t`3&k [cbd[ vi7t9(Ws$<\|y57% FTte!g;h_LWk(l)-uԣjϷ/\9x. { n'l87jN1ؒe|fb (5< 3O;.=^X"(N^3lz mj4:J<[t&F>+zVPLKDg.p_ |<$ǕZb$*%ٗ=Fjkqq0 Uhݔ˨(K vRg^y:qS΂RX.-9CE ˹j6HzJL.W~%*xOD}3N<);Ϭ)i5AɢzDyC^.-ʝ ~Y*XBGIaYtTB _cUmR}uf[w/o%92q|:J|i9+ _l4A3^._VRUӭh Ӆg3>Cu|`yGl1#]K;nIw-{A\t^1~[,]WWDPQ׾-aϷh6zNB)Pb6=xld^99Q{QJwl;o@`B`?FirZjL* /+3gI"OzA79NljrPvKdkB E'03U'0JM xV "@Gu!$#kbZ^Pc qg?.L!&->JyڹEz C " (/#'ESN\8j 9w8F Qi %GCpvCD1·kJ?.nx&EC *la0z3.?E7K7ZYʈɢi #f҈i~l[ ?bɼgjD4'8{uظ$5+)1ﰟT@vgfuxzb> &:AJ(ī7kE9dw{ƿ/p+E%l%-]Cs5qz}?|0ҍ*=6Smm+ܓԫ>]ύתxkdɧFصmM q"6fcrBrwU]-;Mu_h:%@r#;;Au x7(҉SctwVR<>X9ǻ}V5Vơ-~9EAob̓굪]5hgS(3PFnOGMb =]fay誠QΘ},o.K`*MRIп+Rf_tL!4 o'yحgqȞa=Qv0 C9jjL_2\SaJ 9y\{ g!]Y-Ij"Wce|4/b>1-ErMQR_+KeHE2'˜)./ޣ\Y-0/gػ=^-p}WQ~kj:EurqciTJcO$YodDžVT/7E$f2x/GZlė5x*̩}-&]S~< L3 R8&rkг~T1 ';|=}TV($  XfJeMl)w .31Jyjr ~6" %3xr>OrUslD&$[ S_̜Ђ_I%pc'9]^K]3V  玠:mTmV1G)r[EQc#g̑?ŠrާH$i)Ϧ3"Z>sӒY%~"rqcpX3h .wW6)@{}Wra2&]Yw`TK5<?~?~˻6"++#Dnc*w]f} ,k焯~wB$(@os4KҠ|*6E -`JIgNkmp7)$o\v=+/7ʄk͒\ˏ۟F+nF pBr24KXVa[q WP#]ˀbC5ڶ;*{nuIi0;r?LKnSO0sUcί=򙻰),'A6{*ҵI)TQp`7WB.10=Nyb>SԆ&F)2.?S{ PS 鯧 hm]M!~)|nxԓw[kAPd*{Rzp>e* U="*ۮގ.Tԇ%Q:qvfX Om\CP6Rogةl(hRx '[˟`ac[)d 5>4E7,C!YVhgWifh;"RKJ*ћ~} '4s<סs԰} l$el! sbS IyRȽ(=@.4IXy ]feܝ]b>9rJBZ``TƬ];3Lxs'pSrzm$t> 5.lU"ྔKJJZhHwe&?muH s/c5EBA #qN/ESI iϱ$;U'<)E',=MM"{Vzۨ[5Vp:5gϥk$D/eJNpq3E`{SuJ[Go2kȷGW▝oJjN4bJv$HdH,|>Hj] sNW$@lK@2>bD3Ԧb!dJrGUDh,1 pWq;?:/UCݓɻ 5h=`Xĩ- r9Ps+T{ 2a"k_W=2ZuKh}wԑx7)!u$0_ < gI] 4dnUjla|R8Ys^=`>v(Fn:whEJu/}k?+~?F +; m$S1_N%Ɓ|F)"2d6fVBlU*N!ں}R);WH& O!K"x*S+RDxȴhIкhѫnKR݉>{=Z[ hIgzJ '팀È:y[Yk8:sQn #yf@_ZߝGI7bݏyzs|}*T}ig7M y j)U7hˈ]xU,hFO%HA|BjxsNu,vo_ա$6Tu%5L&l%h4OX%`~olQU l"߲#!wVF-C Qc/x5Bڎ[?"Y]uorOn+(ry}McֿyHlN'1vS/m~/e4L@Z}£Ter>\XM5K  h3N̷<@{ }ϼ3[Y 3!vmzQȇpgW.tckX,[O&+Uq]靊y?sds"ayě< +=R!#L /=EןUOM Q*Դb5$쪽{Ai Hf+VCKF&l ϺZƬ~']N--+oA]XߤуB7꣯9*A{8#!gRBUy7!ƲXCzJBf>(u}bc\V `1Kܼ)?3ک`k>Cu@Vw2`FR p+3ю$(KED[Kؚj/;j `p#QAqsùTc7"񥹹曅-! i0>O /W!I20?_$ۑdK# 3ƱIN^ST76 a^<ϐtEH*GV8llSL `U6OHv 8$IhO5_W ʣ'ϯyo9mT&ծT1i[#) 8FǓA* S^'2QX4MOc}r3ZS9=\ԧ~Y׋陖c+ya w*MgGpX)jMˠ Em){hL2朥bn6ׂoWynOQ[e&-}uw_t 8ͪӠ_ \7j~t)SUd^".q'(=V7CjXK5y'l!e#uȦ W ӌkhxT}!Sq(}H%L3 i\i$F3O/tx$c;O*` 0M&UV#h;M85:)21]o a&G<^Pǫ2fTINO[N hoN'KP_CnQdnK8gά;I#u_fDD kb`0RBm'9݃A#Q.Vn͗\HV)Vtg} Uew]bb::!SCO&_}npFYbQ!&sWA?ݕx#E9oFs:@c /rEfu8i)\ IfEHGb+gr0씳x%&%h cԍsV SҪ9rD|4e%uHUQFnZ9iJB= eu}Y8Blj x>oI3;4ǶtQDd.اDJk)hHAl ުdaU <ro[un'V#}.CY/1(7Kp2hq[Rs =f"-RNb`m ksa֟n<z;T/;s{?\~A53Q<ꊯ;p><Dž9{%((Ggl*zIh%'׎$@$VdxUK^J/8q /6xCʘN-*nGqe*wf)B7̚i$SJ+?u8iA֓pi U QZh.{JŔ' RQvwQmgRՀ<#DԊAy\M`0V&S@XmCsI]0MrڟxPAA!*Y߈!^L!@lS#uEWLRQ3OvEC"cFnv}!3v)PWCiѵG2@؉G/uco]fmu"elL^p A8^\I-xCoJWaڟ}3>olDeVcsms{l,sq>fVsUJ1+Rm-u Oʫy´cU tpuʧׂMUZBY<ېU57W3 t&T^E8C.>&9 ,U;cmvTup]{--#=+/q>ycjmJvH/l#5bs+B_6 43m]כ1ZK(" KJ5 ۺ0p}Sl"?7ܕkr="4#sWdaGE R+H)kI"n2][W[W7z bd,'z!}bҿ<^5ϛB"ή `U(qzRz ;%.' ѥLkwUo 4ƚiEZ_T#F?}-^4md\1~ WešU@Cӿr[@5{~NujO o'ct7CMuc(`-rn}dOng ,C|*^)gd{Lnފ!}\;Z8,f*`=[ }>^B3XzW/sj4hIUt*ngʺ!.;8CZrerU-m@$ϥΩsM|LO}2i?hZpJvDDǘh,р6s;*- .,TmM.&Hʔ)֘|h^"v6wy}8}Qԍ4 ;S** ց4!AxM76%9q ]7%(1JAo-ߛժ+nWJFV"t?Һ7!vf B3?G$ jݍ'Vs5YCC + HsJbIFv3#ի } ~g3G%@:!w/؝%wwM.0/Aaz d08\88t$[LZvϪH ?6ž_ }.u@͢zO4Pk6%8Z+knRqtcmgs~@u6Pͽ$I)=fe4=ZBdF6F6Zr>sxDS 0\w3e@_*wT֛|X .gOۺ n]GT9>G"ڜp\Xi)Aq[Ÿ"m˴9_Yg7Nӣ:U ~ĵJL# "ND-J_/(OA{Sjv\ , ?cOo-bĿ<1Gو @T4SM^5eX}J QK }0 i(cFIAt}86}l+wn9V==5uӕچӢ`·u_&(7ב@CQH ڍɎn{;&W*uEo9wer] h(-5[hו7fḿ6GPd#ī jK*(f=$Z6H3 f4tf0822+mu'9cϞa%EnMtp{9k` SZy,Wy{7b䓛Z;6#`GG.EPkx N7j0"`jWgqk}Nҍ!]$]n&;$[kU!ݵ~GңpRBTbL5}9UP$wcF~}Tn!KeKd[i1Ih3um(L+O3#z%t%&mX3y~gaC@SZ.oe^-֣EX`'˄qgQ2|ף\/”:<)a[`߀MbWO:VbF.jYmM#)dcF ] m QEXmo5:xygFI%>&C!jΚw-GH26޼JU`=R5lS9 'NR-/ M6JѬ>TSVȠ }=I6ܶ oS9A棻Ls~ĜxPXxPݪͪbMwY`!5P/dbXk|z<_R~p -mFR3'1@/~Y*Hʹ}r)=}pK=ln98%#e\:uIi kUUɼ |NGe;t:KlL߸%^! .r0(amLCQ(@Dn ^Kj>U#8F$]E9(*̙+J 8jP"T+W|8ZxGL]rNgr0$_bƂwPbOe VF݃ t’흆@c7 NBIAd. xyc2ӸA'$P9*c#:{&:u'zw)w$p5VdnDԚIwE߂|(Ny4<8̴>«g.trowVkuEKHٌgL4 p_A&x{LcP++q'<8 HDLnOm6owIUvN(~,7hS-`(-ݝxMo Z!Dxߡ>ʊt G$Es09h;5&]< np%خ'sp߇wrVU3٬Ы_<ǀע&VMm(Gb ޤ8;O{c RVݘkA!'y(OHiA9Lob5:Q֖wӈƯԯlulW_&Ǧs| 42ɿ% &|QdH\yjQkôxH[sH!8RE\P8i)#՟:NbjKM/ªC7S1Z CvP2Iוk PDqn|P"q&5 aiRjU/P1;0Xx;n/lh.UK5#w4)Ne"?0ڴs]d! Jɢ}K'^[Ly_Z}K2)%" IVJї4Dz7.BX -< `rdIa L[}b4=%wVp*;ݞ\iI8FbrQʒOLNƛW748n=|f׵D'`C0/32H'x2LC%*xͫLx+X._UcPLO0V_&x4mCYr}OFRf|Kb.ֳovo&f6 x٫0Zr0^a"j6A k\3fnaWV kDfcI7qBNU[;vX5F7MKXjZ,faPT i4=01x.֏^zCy4dsl8l!zñ/HH.%X+ξ_~@\[Ov:BV_K=*Ks:HD1seu%ꆒ5|A (*M:{T,mH!՝K-7CxN Q(3B8SJr8%WQ'6)6 {6vUtKI DKnfIczXG}ҎL 42.1- +5It7h%7_hJIp-۱@쒣y(sw ۜSWc 9#5s)f6گ_iQO=^o,qs{F<)&1j4`}':Xx?.6(5yۑ$ߕ q@X.ݤ!>2ީ mל(pY+b#nN+ڄ'͓A|FA+l!iڞSV8ܹ貄Y kE%d6Nv`ݝL|LV1VU,u`lջƝ4%wevp[\) =MV6<c&IZ'@׌ڱabX˙cV:S Lf(>ylK*8A';hl2>y~7Ws+jDt91-g?$[uJ^j1Uͽ0t%!x+CX׈x=uK!༆cQj"GJ驲k_q?@ y%9p<=X_YY#;PQj9"ckII/~m@0/'ix9y_\O%`A8B 8TQmH;y$PD#_ 0pq1{@Co @$ ڊ\UƹїnIuE7z㙿l lTǠUG x&,`N`L`d!]-ܨjGMUB꾭m{\kѓF4hˏmhCxPY%f&E QM1(t%qzYβQKʧR ŌMV}Tp4dL(!AH8GK!1nn)XtX+5_@'?1mIC7KWs(=оKM =֌ 3|9^w]4r67@'lR7RcwWcq >,T @ҙkEVNV)"m<{RPJˣ]冪sZԽ'\nvBx4lSԃQ(Dkn"FZS&06y}Y7f͹[Vև[A"wL٣WLR+%&8܆$V@ڃZ-9 p':1`$̨AC$2ٚB)Tpܸs]+,Y 'ny!%U^l/b#50]oYjJb_ 6rIOEI_d]PD;kr*iNypΫVyט.|)ѻ$Rvq꽴\U'D~s8iYw+`Nl+Zv__ѳ@G=չY.JRŠϐ ka S,}@Tgc/eYCy\wMs.k>ǣM[@Cԯ3ތ.py{RP_W?FOd$g5*v A}drmG\1zEG6V1Is2p0?GݟًF3b7+P@z=eYYDch` سάi]#`n5|߰rCk\ %HX9NNte0|[M+Yt-G"KUGMTV$j5"!j,lrVXrDfZ*-_TV,y3mi8T Yc<guvQD Z?ުK/:!vr:3ԢakY f:_+32TүKp yLc8vT;rr+HvyHG@Ǥ rK(vZpz'+u(z>\E10q Q[>EuS*6XKQ< ʱڱ'Jl!ehBO="Z A{;rd?ڙ@ZOİyw!}XPYL:|]>cr-#)YN>3m8+N.h!>xODªF+jȷ./Zf-=l ,d]K.4R\r ʕ%:Ée |C3 .v g u5M?!_DfQ ?kD=0.:T4%@xw:Vs=zW3 R?Xpi0 d:(=JpP]#n$)!z$$J \,n@!CvtcLmYHD|Q4ՐS`J^ sOðjpvmh4#x-s/MbDJ㝚1/Y;$suܷD/Ne-4\r굂Pf,ϠX{M8KCklh1uעbm|\Epז<уmm#zi޾]jڥ7 L1GhJb|6ɲqJ[- $%,Xn?G\CZK!!)9 Ioڀ\CC~Cz, RybnkzJdy]͘NNXylkx.؝F]t̮$Q&Ƅ_jfw7sԸTD v@%WRfDCE5uo.jӜze0I˵jJ}E2ٵ!)%# Eb;ڙaBiAa"XG]!nB35Z&ez( f:l.YRԕ洁GoyR<50E/u7 !{HoC0E~:Z`-n,R>-$3xЉ~#v ;FI $$.!Dzͫj%Y59CWoh(\~دƭ\Iqi]Vv"mZ6+f8rtw t0#U@qmx;vD~eP]2TU{pи# GQpW; &C\ɟEZ!֥H~ utV5<1:6:geCSE*{cu<언p=#]Oq3 wya,SMJ =w3"+'Q,8B\6PhAVL1 ~B6u(=AQ#cZD'ihËoQڰheI7>ިn2!͡ ãguO wU4ċp@nZ@iɓW?'.]Bs 7U-85 P|eY tKv  E=Y޴w #AtĢ* 􌽵t',n{l-cl}lq=hO^ H;\:G(#O/!-& %Idzn7`'k.)Y}FxzӍcc}EP7ZҦIp 75O ɡ~7\ =9z HOF.stᘁm%:RIOWYhs+ Ph,Dp~f dəԼO >b~݈۸:9 Y[KKTyzsK&m%bPD~!Ռ8[h& ~"f2jVǀ]) Vcq2 1U2_ZzGBZ*vH_4ڱIH&Dӆ&cAp;GC82 JT]Tb4*U%@VQ/IY92"VWϩx@ SJch^#-L38>EIo%EnF5m"O<S\'H[l8Q ^-D9j\׎'%FaV^)£0ZV'>yzԣYwߵu0abD ~Ѱm]yR*󓄍o~"&as%. qPÕh\.OW4O *ݿuLUL6`̩LJ>XK~̮2๚لx QeB13Jt)pn=Qbȟoo+^:d 1 *2g+DHkCFWJVH䫠bܺh8/[ͭ\;veQ,:吿kh*dJ~^bjo|RvwZ9!l}z1:㋙f8{!zԤCki5۹wA>Y v&\" t'<4ŷA$'D"dH Pid^"E-}MhYIJ._ £yxCGB$bieHiQG|Ԗ{c'p)EDAs:&QK-0f3,?٥poC0x乐h4y(*3'gz[UG7vb,0?Ro=DR^;f{z@F%g"@iU2,*CsE-UVZÛKlə/WJUM.tʥRZ7 d(nj tASuU͖ŷȖEq9E,4t+k?zKTc>A$Ҍ)v) G^XU;MGș)܆mݙΎúD$iXmJ,n5Ɇ+ߧ[cW*njC)8i@a0@B_.EXԪBx<[V.h[USәJPٞ2U(`Eݘ4K:ٽ/}գ|MHʢՃ_3Z#TUoL.8#s/@2zq3=mqwՍ/tXKt= Ƚ=x3QR!sRpn8H-jot Ԕݶ2[Zd:9M[~yl\oh ~z̀J|zn~EpÐ?ޒ]ؚncA'y]L)(vB)I6Іsݚ&,3.'@ sD ʞBLzuAdlQ2B!u܁P81@=W}ZrUOLg/"= `5?9׏g[+PE4$G:"0oMәަ'&y4Q\p"ڃ$4'kXB4l+% ԮsUOϕjKʫr E0,+(=y41ݫ0mI$Z.૯} ʞٟYHGq{|;g`JSΣj)@݂oؑS**:}̡@J\NxeferAjAOȈp;TWw`c2u"Ezҷ<1wZ`@nl)tyլdSp{trT`؍M<T`mlV[O C2.NѐK<N4D!<yL%([KYu<(S7JMo^'IEE6ԽDZlsv ;(ϒ%neؒK;6O Q8/$Ma9M)}V5S9FVbaV ,躇=pϔ̔(>s/<:h E CIOdՠG宷^L_`\U q_@*t"iJMl8p_8FU% &= ~#\`+@ /VO.CXDKD.4ӄXyZ,i fP(y'b]{Jb[v-܅eh`{W+Љn/^ ߾pυPT&Cаb[z4KC*Rhs $UT[5kl؍eϨ."=@ʷAoWQ<6`LVVE?džeȕ/:@T⿒w/;+$W9F8pyxrdmX+&d*g7cRP ?'KSU~ŖWɰ;j-[lkEp4BPpߨe@W 18a~[U?t׉Pˡ~ ?G FG~f_kO>g]ۅp -N#*`w|r ۬[1fs81dq.l>hf/Cc9 _cRjZΫ!V gCc~78ouX m9]|pwA;|x![>qT&I6 cP">z=&p$C.m[jο(`QC-P'41 .h4l0&eˣFPhW F;FඝM5)ȓwx2[W1N5txĉgcB|#U]b.soR"8[[ H,}`i{njxlKG$Ĭ]ְZs*~`5g,M,QasEz3(J3EXゐ vtIO5$V>m 3v/?cɾ xꫬ݃v+!9]U 7i#~Sa "$RNUQ,:[U\g9$_j|8"L|<[Bzȟ4#hczwHBu$)+7"RWK؛G9ܑuL1js/k/.1ʑࡤ tS\ ~ec0sB¿bP⨎Sbz,3!z˴XJͭ#DgoOĢo6c>Ӊ-< o!qLEiKsKR:"@~{?Q/"8{ʭΜ8$}A0&UK`0ufnA'눓fӃE-i g`N剨USYK˱:(ɕ 9MEdrGF r0"["Qе_w{FVQT`{j-NR<1MT|b]RtG"!Ix("=ːSn/H3ߧq@ڳl5@Wo*;]dYƻrսi蓜\Z1yxOzg~v[6DHO-oL^m1D{oZ˷ K~6ƸI$Dn Z#Ӄ3 0@ˋ2=3w⼉Lm9`/% M qxd&0N 5_@ K9rAh{*l>-܉eբ.˒ԴszBCA!q !K8$7m}=:DY\;G#> ;e"PFPH=:\kDW u*hzy/TOMxnf](~&m x؀CkA5,LZ.ڈog,FD+| )3@NH =R C(U30LɄzt%Ԝdz?9 /ddvdGeȇ;]9˔wy-+g=gC5RVҍJ˓ǛҍAfC_ WX!cFuܴqP -JC~6g`3}=-ML P/|R{Ĕ}}_+FXYc* dgmU 4Kkjt`wF2!ntOPmCzf4@Y6$9!p9>b5R 6pl~^eBV$g*S@@.6h*[aؼ^3Wn}RPTL C0 @0#?pZnwi9Ӄou ƉIV|]k@^7\+}3$rz@AE|Lp'ﲉBMe7O?ɏlt1O-] "=($ԧfec:ۺ1j8/\wp؛20b1 {s xv$eUn&8q>ddʒӃI7OTX"Ѷ!l A4O|ʤmG#kKXi.dZB y[ycw˛zL68"ۛ28$P]*SF|x 'OqYzwXPqP^141yΗau9G/q36Gr)ꐼvQ*!@?qHʽ%YOVeo [-nm6p.u@+O1?(UA{k 5u|2[-H_IO~ĉzuQ֙TIMvUm-}izKc.0!ۅ.r0MAzh7C# "Q y5;]'(gyM &1 J4s؄)&ɼ^\ChSlK3(ǒ=˶|s( ^c [Tuަ~dzSHW dBvG;eܸ{Z h>ߗ#Nje6z&ђ{ؘAl{pJt$S ۍz*P&h? ֱ͠./F~zg[q[xshtxf=HS  ^tŸp%o0rsLo  S/)f.9*|V{l5&}B@Wmc<53*-1o6C51L+6f݂Bmv' `vfۖ\r,-">N>o뽖aI"Zۺg$5})ߗuE{m,)ۨS:  ,Bo˵?͢?|Ū2V)H9 uMda.Y$:aD~>й58m^T^;d[/cf-W!iv+ >x&=~Rȉ9[z~/PJ=Vn̳E£4=bF:V7?fN>5c8~ƏZ%yvr4=Qb/M+#΄)u?/uMā,mOYoN1=j@ }l81[|Ö́O$< ה8ùsVL[fHb$cdFL p?6o ʮ$tZخYBOH.!"Y% C3dOzjl' VzfVM1eb 7f&m[DvܒS %~G0[QYɰO`妌Ceg %QIQ–ʛR׼kƃUTMvL2lHm̲|7S>a~ z/_7۲hF CGEAdgz;QVX tO]k䬪dZOL}Nb#x|I]9 :$0M"\Ѓɨ;(Ztv pxe(Em'i )ޛ"bq@l[_8 Bn&nDt:|%A¸Y/Y%U%Fȹ$Z].\b;9r=b~ &B[k Mt#ԦTbQ!+ĵHZ'O{Sӌ}_[׮p z>r|٦1vlάd6Dk£DP|/δ\DTňx$NM[>SuQ$mcݔެiH{@lv/>Q6>5πfZԙ/ANm/bl.m4csOSU>fA,sFup|!J}>itPWZNS5^Zӵb}hS dZsD}gp㽵VQv0Դ& +@u jU;4Y/ߦ͊HGf4gܦj{˸dzVZAkO\XlUCW}ܪh N+RUݖ,H'ld , ďkr43,cymN_(5GYsݫuC)Ճ"sMat8"Tvj-ɇZ sPHu ~f֚*531!j%>x]wfzSp+(h*ֈ.N{^^jO\yl$T%NOPx' `7QBKC7@FCAd=I9gWR)c`,$9{0WELfr Pi|pDWt諷"$oU O)Ot4#sYRiW! yGTL`bfȐfˏ O]""xPm_gH=H?'=HMiw{ `u:<;KS @Cu%7R=و3{\;0,40_k5OՄA!4Yg do3>sOJF|"V3MkwjuDqSJ^pZ_iM%2`ឞRF(P Q#3*h|1_)Fs/CC^wǮjpu'«?BHWwW#OS.5)um9֯]:-kPgEd;(d%ڽSϣ7b.gkr6MLcg#U&)HEjRI+u+Z3[{P V ,GNr}"O+[V2{D# @0㒣{tSُS UL,{PbzIlHHG9rz eKu&7 dCOڭcďHrϤuEpt8/औ n)¡e1xn.uLe^ފG2wp@bB eܨC͓IP?dwK=iD )fuu} FUd?`/\:8f;s(QiTg[?ݿGcH s9u5wʨc޷i`! c >"d O}Z9u2i\)/ 3}i=d'ipKg*n2҃WvxjVa];| Efǡ5@hiS=YL{JHNEkq3 #;!8p>{Qhx丙wnG~k?4ү ^hñBhp ce MSkQ>bU@[{5nxKBKkLmzF4f9nn"BQ90i Oտ(a|*j`X5.mzib6>nh>"bBsynw#{9iTt="&-;JخjXinNm%ͯfRkO͉mw6p;"(ӦNkG[vJ1;Zhm8+*~ro{ͼwnwԉTn..y/DVR>Cn'肝@=PED~HvAbXk)fmp(k\PT GU,{A\GJwfsOݾ7v9!qYؽ]mmM8od5]#e]:?x֎ȩnb;Stj* w_@d>sתI*zN_Jue= :Xj|wʄܘ)zuSr1A=BV#{Il8s-{~.,+moE/7)m0ݔ]E?Vwaз*)W?yBaND4JkD`:9d9틉_y CF(]eNs>)6HZª=HZe"fÂ,|,7rtIώ!SenⅮf9[֟2]7]Z5Exhsw0(dӈ͔]VP")R|u v^dzmLAyVZ\![ WqzUi9,ɾWJ\55Uz֙m֖\c%1wC(M J1t]%1H{J=O)65d\yWK'h7;}t"`{͌|঄N1RT/8ٶUpEmk=#x!D"kĻ(J蓷,ók)LR4}hSG~BmPZ "hb N?)ZſpGObkO.ͩ$ёn$#?_3Z'ϩSܙm39=b%l-ǢN'3۸4#CE; qr$̤vQu%kBKNiϑIPC2ctw]#ɠ7ry?(oO3Џ yRLkCj *Uۺ^z$\Ji>@x"Qm7J(l1HP߮ 9e;jVɌV$(E#S+:eD!B:`W]]8LzrA0Љh[Iؤ2s>$(>EkxSX=%f G m1 5c`}t(.^[v^pv\ˎ{/Tɩo oִf0F2\WMNSV΢(.ݬŷ65rOYrs/B;aCΒT,!qlUU:vN8W;,+`T Pa")*ȥ5b]ۉLm±($Q]z!B"eNCqCjQ" Dd0HTWLS®aݘsD%:JWGSyIk~. 0H~h2کM,Jh,SʞRwaA*`F -m$(KDns\mXVX/SQ}UyHݾ!kn1}ZLR9Q4yԧgT`I8_5evo(mQoMpc Pd{8kҤٛm($9(Fl޷\l%OѩfjbGo{P7-/NugĂ7M-ĖaqG"t#3.肾]jH2]Un cxchc o![4 N qG3!E>P̧6߈wEvcQ 碶ZMh4}@͵^eƦ&T&t=줍vG޸Ko"e}:UYDPˬ:,ٜV~ףI|c&v<1k Yj9z5rknq*vKޟaÝiZ2-v`6ʅD؛Qpʖ;EXa 9btw1X [V5̓p]1fR4#gK|^rTRҫH:KwlwyoB3~SEZASbiQAe2XUV" @3)+&.J Z E9kk!o4'Ӹ< ShE۫Է;qV5#dN\|ٷ> Y|[;=%#X#& Kb }7B:#x!%eZYO\,L׸X{ǦCVM@-;<TwV2EWOݶe% MZd?"j 6ȐOvHe"OezSZhY֫Q. q{O'/[B&P68λ?-8'A>U~u_(+L01dpLC6 ٩GXZ~H/՜D>ΐ.MA8Iw"( \a]5L~ZkH#E/>c5O.hz$;7Ft0 n뷳~Ws}.b@B߮_IAx9|X53"' R敔5Lv@' dN X{OqRT!-hgz]}_.wFdVK&Ph>,ķ V͟mμx{p^L)$D4VZW V Mo@}XT8c߄Ŷ= ;McJ+`ѡ_Qg?eH}%zSpbMo\w@tzYz ;0pXuv0L 9ۢ]mW&ڼX8yʘE[HjҴ"5>U}io3xLP*v'>(-䨄T@AD -˛\D/3TҰ tk{[53X@2z"C*;v/=8tpoFGq_ Җ~ۃ!Θo2q%I#bVY%۲4,NUhdN5186ǨOjXfdM|a,N% mo4y9pﻓ|%U"Cs_h1iBʧrЯgT'nѺtDkxTT;$`pk/@rkCuuc9Fz̏A^K Dud)Z5l<7<ʍ r駮ŒAY7pz3)F^ ] |Р\j^_/ӳ`O%i!:(uk)%.'Q* Ei.]tUXpǓ0L7JDv~Gz '$\qľ[2Y6%V V= {l-Qo.c%Y:LJF7^v|$1M HԌjva4kYJS'Wf%Q\-HG)ˀEx_< "]noXLhj;'.];X_Cz *Ր5#$'x*L r̺q OëFbu*R\NHޑTM'pߑ/%Dt$)GoL2.l:Γ|`t/u`Ұlq[14 vbGy|Ny;#?( )RNo_wiF1(OʬC?jѧ70=1ZY ^*Jݵ$mtp?BhE W:eR #sG03Jcї=1Xcj۬<=uL|)^lws9+ъߗM,)ַuE$ݨoSjh^e~ەh7Õ|U16P]&=Z N(LnZJ* ,ān t`vJnf]oi*ޛH(noʿ]$;vVrj$[(y>3K}aTߟ+C9.Am_7:-X\ey]*mMӓOCN^vMa9Ip*} 1fYo+&C2̽EH Ie9>iױó?2,2e1]3ΟbV;6{11 ~H%pM"h%M]1=M݆﹊E+Z4.yUvZC`S2j+f3KtہǸd2dOy{,h($<)r# =ef7u7tsKO.1KDw^J!~]kGRfXz&pe-ܪvn7n)̮Q)iA(F\hЉ!(822,F?s0޹h-Y_Ev}2"B卢.:sF]bGgwӎcYAoReVlQ{ް|% orp`}#f<F!׽ N3rp;/F Arɮ{ B ashTyBوr3 :&9@lS`\QQ gѢwM,j';׃e/tb@gcak%Vi.a)a>;0QxLec2^re8{~O16x'lA!|.>{;΋p+h)t4#䑬|П)d]39inCSt x*܏u\t6JNQ>X'+b⿂֊$~~c&)|#ݹ]HsqJ.^;҆wixZUp2}x՗)k4گeaH'iIA%4RbPnYRt0b#G3z:q^;γ3QV q)j,T. }eO|ɾM0l $1rAL 1yX65 9h,ƦsWw<$z+qEMnI()ݱ^s=+UAi!zæf%oIkxvYRI3 ٗM|-;$v`z׶`10>f䰌զ #. 30 !=eUWkQE=Ǣ}gz͘9pw3j'Ҽ;vKrt$yʰSvok7vTFjk="v53h~[%o qP Iivߴ[MN;#6Y@;F|e>a&ӧ'kΖ)b-p{"ƴ;XIfөhD}?uy kQ3ֻd~׉$;xE]2& w2r Ѷaih&:[,rvT5. ~w{o|e2Nxި] FqXǦG%ʣK) hN~Vlw A!?lGZUn?fj!*[P0=PRo<Vߏ0M^Z5.`0RT [\ NE6u` -{w\KwP|p jvšmUi8ߌF\{ 2qin\Лn! h8?rXo.BS>\+Sׁ 7RmmI!DH7"#!>iZVh=BUۙ|3mQT VuLRLP=SF{z)m8bF  ժLH:(<k.n?XbRuN~*,0/ _h=m՗ {yD;4 C"  4f溗H`*&?%+1(˲s$c22vc01)[[곜v !e% Czs`R.M'v_y#b;k+7ĻάBHޠ\9O7cC^y1IU,3 r)vï4Hy4SGU)ItǙ=!B)\^[SK(Iu/Dr ų',a,2YP^ųAUMK~&< qOLng(,kjznT] 97)RA U M&?ZU2OkU(Ls'_6 gVjq"?T|N0}"qՇSp4twS3ȣ| Dʁ>t QS0ybwK-__*fW .}.- 9{"LˉƩE>8GĘ{{Kmρ  plB~Se7,Q@|Qqtwb7aV\yJ;#R ??D&)E"ږ8<td3$0b HTq[d4 !ݿqٙe/W$6Zg.&HP'0 g\rpՌ"wWEu#)XiN"Z0)jd^L&#՞ oI 9tfn2n"7m[!@jv@!r7@H6νLB_[ZX#υ=DI(WXzZÎ!N0}w:hKO=dxFX22=# mܛ.qD }hT'ymU}ڜLŽ 8.2^YYM|Ү%g}SlG-1CPc#ƍ_8b`) 9wt!M5I|b&g>A~s$+#=8l'6~Z >Fk^C%7/ E @L‘'"\ӛ{;q'G93fp/qQ~hnv1btj51}hO=́C=& ލ5ƪ*Q}RrƏӵd/֦ A%J)zx'͢\7njC70_] yZ$ZĮ/q2$G%;GK{iazh]9❘O1rf6֤X ҽ6 Zn@3HNB6Y'Hd(ϓ:KEqpԃ.h1+>? cH\|N[7ny+Ey'/7Z%}"Z9_4f)$Tr~ X,80Wp:-\qɁ]0ڻ@))έ^7r#:&Vث83ZOsbYdG ԮXc4C7CH^.h;bv8˶f;D(̡vnePxjDHPgj]u/\YoQh@BquTE}݇7QEP崛b`׽%Jt#irAP@&+bPǺ gW.YG8)6XZiwFQ!w{덵s>qȧQe)$c9L]QDcE1)(+uV8(s}eW_$r; rs"g[Hq5dPmr;ְz=8"~@fUmDcÙ zAp[S/.6:7V''e]\o׫ׯ40nq49ksL$)dN̚Zm_>F H5<,ׅ-5b&b KS3~ 1? 2jtkђ6~)8p‚ݥ^qY5 ':ѝ#waQd[V8:ɺd51A8-* *E62&-\ǀ}목/Re-gh CXP8:`S&ν^[qPB`cNyP:YLY#r nNv`_|Hya;}p|UaWIi| V3u>Z: 2EA ͨq`YU,*䋦$i7(`6N|)~ڃ ֹVUbw!ELL &!tGRQF8 췀bѤ>69}HcbMZ$ڒv &ćd{ĆLk:U4&$׊VM^*zšn{xuIKO$'2J;)n\VQ tiVHb/=zn@ͣV8w#LD7p]?3_fd |'*;P6E] IH8ѸK⭷.chGpy7oXz=F{{0VA;nkzCY9M;G`L,IߦV>f9K(  q.bDZ`]zar#'hm~f/̦L`Ō 4wYea̕  RRB|rsS=[Pa?4ǽ/wYZBй-:GrI*dnu ?%'(4?'<"a'HA^Pr7>ar{UzvTNx($7pݣ!.n'oS:Zg:kݯ%HͨLYA$)#"z`3@CDSQi9q3%MvOnZ?[bC 辌}vI׫~^ y#ytGc&5Ly6kѻl4fI,>Z̗k=`vʘΩ(ns675> q9Ԛ.͗"@4.Q,R7}ʸN~$YDq*rhMAdfǁI BA_zƞZ0 Ozx|e(KfVO0GrͶf[WDJ;cR OΩ)hPHg x#Dɚ_'{=Β/eTyE}x6U%T0?7_ofj[ S)q`W[;^Eyj0|{u~4AJ‚E[(o\)_R(\RjiOϠCH g!;`ћdPq62r BbӅ]EuR͢f{4NyNƓ3ߗiOU}s8YsD|TizyT8T-ۧ0GpyxqNmwlW&W8Su}j&UtQ2ʙI|ѹ>lr Y0{ܼ6zgN97v(qKT+R- ,~-0unޮr|‰v=ICƞuCƓo_Վ6Rw 9cK@gKԬW{l5^mn\?H/$~YUHrs@kSx$aNlOW~nupiL#6 p; ߆J= =e'82k&iBuzDJߐҒ9 r1b.'s@ERåsh@lae @v͂k ?ikƖU |fH)XR{bY>\Rr e"-G7k {X ct\5#\FKd`2|SeٱiI(gkUӊȩP2%zsL xo]~|Т.>v3,W6ٱRkϙb3?6nG+4HͧȲ}ߓ3! 9Sroi_lhVnf=2 P`J^cè$vYXGANCDm0' sI :Eی#ɥe^ #XÐ"~{>QR7OQOSs>P|"Y]UYbtL/TV&&!?d\;3x&YV%eޛ~( X3Gb-=mvABLB"%)_sH{{U0.kQ95[nfӺ$46bcnjsWtPZxB4x{^܅temY/=ѨA35+PU.Qj԰X;Lܸɇk?DL,lDPj|,P :?R^a(:ewս1#SrPSD#4ٌJ=a!l*DAŕ8VC=Yh=0t7iC[%~ٸ׾2)ggPȷA`If^w!E8z,MgF62#ײmXs8`HabWf+q3d+0] f{jF[OVux]dS5 CnOl?`'OPKh=& 2p'+Hlv0.Pc,_B힍2e<:7`/;2dC|M! XAqrUpɨ3OcS](1h* FlOdޞcdհ=TcB^ܮvVH|.)ƛU7^!' MVxGA;=}#:fS3>ָ#,[g”? 11l;q5XN贚2)vkk+ ֛t O8\erh<:d#? ^V˜A,og(\weP jv`# QiehI._\k0hJ41;gSlN}ۍ"#U kaWVP  PD'p/{C2"Oqqi9= Z3.D!<M1UB걟rl*"*]yw`S-sCnO9填e_;UuzD&2a!mKf Ն"`ŧI8E;C1=mwzy6HL@ޟFXO64: 'YnO~.X(=xL~ H/mWI*UҘzJFh[P!v{Tdxt>XT"FA.S4)$T@V 8{ie=*X8zGfW7;]6%NXuA]:֤,6r:SW-q M;`x\Qlt%M k-qo_qJ :5ЁhY>NPw!ߒx8U<ڭ&D+P&]RFRJγiɄkn_H}/跓'F3"ZE|[2r K|HעgZ9:02 tAN!Jәh(J*rI7zYZ,>8GBDKCi+GDsl@L3OH~Aٮ{!^g*H#cDVĸ2XGȤcF~1ڝVXVsOz'Rd @9x\X/NJc":Ȓ3(1x>P̓:H{ly g6b'nf#ᙍ#Аk|}ah 3*U:!tv,Gٮ^UFs:}Mq._&(\. ־ @MxPo6k%U`p#W~ǟH傛;p{qCJ2/7dF He1XZwGB:~睒wYQܤ 6\Ds ޫ" Za~d٥l`1I7Zwm(Bjf-}"GA^karu4wpbP/tw!TͮY! ]dYFSt(o (1 6s[qyDPQJ Q.S Ft-qC\Ww)z"blu~8\o]i4OgCf}sȆ N}bk2?v-ݴuܳ3=@[ovXds{fe˃+8bߗq>TD݈]ޗe2 |ebfQbw4NƏh5W^Z%bJ2!ͽCޗ_3ܙM˵2ݯX$w'dٮ4K|ƿ67S4 JϢefݷlInؒ=gyIte |Q8Sܶ7ܵcy̆4cL5UՊxӬ1%* "vzB~ +jl×WpS%TY2^Qy$ ӎ -\!۪%SLZ95pdږD`jVɌ'm@/ 3A!0 0{~&ٳ3ƅ 4wCcmfr;'2'3#BZ;r(^EʽUͯ},r@SP2Pg9hhO3YowS3UV߉7C .(|`? VI*{1_5'GJfŷ%`2'蘥BAD^7+;'o )+]xs-#:]AҕF bwsdr $<ꨏdTYV6YDŤ"22mrv."_=CҦwT"?" ~P-ft/3F+Cb1PtO0:6 [:{yf0I$c狄I7 lM|.T>q[p? W?gh;8(Y iGAzFpjNpҌrZHDN®-^_X:H슮Aے/zo#xZ&Й=GCYH2݆g`O2Ě1Ųs|;RM`]4[W!IYvhR܏-b$H:nЮ#= [3iږ?Ño06)[J;H_#H|2َ6 `dh΋;%;v='ښJB{Ԧ-&.ՠ<㤎.}휊[HU lyljceڱ3)JJ]|Svr: ~Q1=ed@6fn>&6aߺ鉖3Jy ewX~԰GG񑿿}Oo/mas“ 1" /Y"yV}XKu؎9OlPzk O!pxP,x%kEdMN6~׉?9 3BSS.=ش[W =NTzt%){4#n/!Frǝ6KWt(me3Qx)R<' $Z16Rm{b*O>xPrhwH/1{c ] .|u`k/cTSg~yɹ#^Qτʼj-Z\ggbPM,n4X8V ?L+2(Hipw?ߐ ea]\{riX3 bdG E bM?Xzǭ1@b7 BOj}b ~a|L6i-19˵ndd{ؾ>n_R?=>8R"?-E>(E>" y{].s],*y>vV0(ڃU7 1Z'SAt W ,ɦs ѩ5׆5?O|A {sN xvZFƠiK4ɓ*) k6(o?Nx9Γso^sh{M>ȳ ?D|cxb-~v2-osA;[~rPGӶ]fA]jLw-禅Iʤg$2Q81}z#eˏ{<8,@^~=1{?磲 ҡҊQn"d6=ڗ踼/뽯}x7$a$Iw=o"h{#~s04ؙz)8L*_J. 0E5<7َ-],8eN8qhOP:mK0=!Ixt vuzP"@$e֎6;ňFVj9OhzwQh\(yu0f56P{u[3{pLHBw32;&ҍlT GN:™?2>0/(#ڹdYHyx7`i׏ۿzASIM`۬LWx 2I)b7M잦I$\cvkGH S0!7>v OPX7GG񑿿}Oo/ma}}tczH}CvHV|RZRp~Zpr׊ϯ׊"?faocT]I戦 xT <f5)9L[HVfTW+ȴ6%Yfb|@<1g zՒ-:ڎM16uVUۃ WIfzcSDfy*J|fgU><$5 |ڸCzq-.SibUл;tcD4( e[&j!06[ WwmsHLoH!^y!u;*4]mg o5Mؓ׼\S0-&p-l%UAOߧKlF?#wL?klL㡼YJmYKQU|W:z ،R9[.9Vqd)$@: Wp#6=zD8J7n]0 54=6q)e49vwI$FIug8COT h]a+ӧf%oa$HxK wO>R* [Nh5 F5 |+C ` O(F# 0+U!^Xҧlc@Scp oe[O7]Cj?"o3W&j;Ps`733=Mm0Os/bg4??#|oӅ ca~[ؿm_?ݾ>{ؾm_R?=8R"?-E(E"CĢ"*|ӫ_5t¬w=<"AYlY]ډ:0BO^G1?e$D8~%8M)^`%^S+b\N}}Y`V)dr8\WfTnbIY,<)H&Pu/~ !}s͘m;>ӽ d!ԍj#>Fp1r{VrWN`,]s@oKk+b؞R5אoC(Hw~u#-d ?^3xSj804ƥtL.#<N#9T#KV}&g\~UKjurZ<a֠ɼEFԂm:1er]5-r@fjcֈ\ڲuldbE*Hws_;iRɴvA}cJ'gt0ylNQ+~l f>ٮSa 's@}^z\H[`LĞߡ'$aq)<=ȑRʩث{zѽQS#qX1XUG5]z_v&o' +:#cqn<rl=;c'犿yD037ҡUIUi%93S]o(fE,`@3E,&`ћ]?"6}]&л9,%m Oݵ=KQ,8^ m0@ͪJId#|7uJh#244*uYؾGx\T !y˿%V"CZo4drZV,Ph~; cRhؠҘ{ Jcaz<8]XI`4egjwwOQRTiM> &iE EE7勺Q9y9ٻG$.ctR(}xx 9۪TDw7 pǛvnc(,^zn6~3uwB~ o4VY҃ZD+pAjlࣩG,Zr3g6]3/k%Bh}CLIbV^Ұԝ`9ɬz(dTFLG>Gȟ>G##,o ca~,o ca~,Ϗ?ׅYkkVݘPFJOc[d22D:@ʷϤ S^͔݈P}N9WKV5jVh 퀝<dq?zlDXg,.Li'71Ĭ{ĽCY k Cіk⢘D "<įY!{ q x_We1Zi6RϠ JFrzVo亖7-"zʘRkhnVZM_M1>?okqbu>|e&:UV$^ߟehux1IF±sXWl~qN6|'?Ϗ}}l_n_!8>?o!qH}~RzH}RR(E"G)Q|~"k)QK){`/dC)oӱIsƏz(Ԍo$i$rs+T`콱ߣW.[fS3(!h.7g+Oc/ܸu[CɶT#&a"_i~QyNUXnf2w?Wl)< U)[G8g{ixHCf>b8T!M̢*ԼC` تK{as|Zg}hOX>T_0/qD[{!cH W!vL cֹ {X}:vƤ}#N~P1ڶTyweu${FOŞ'یuzhWS{jزw@3xk %cLGH4=C{qkLj51v'|\{Ma4Fm.Ս⣘@+ TIOSeшѬ`L!>Gȟ>G##,o ca,o ca,Ϗׅl_߶c}}~l_}}qH}~;?C!qH}R!RߟԏR[)Q|~"JϏR(E>?J(E? oGQp~+8?? (8?ׂV|V|~\+>?߮׊kǵZ^+>?V`BJ3+ с/efs`5(ԡ&@_D$CbQKpꨕ`}<-"oVAl)H NQ; rEJ]j h>43BSck6NkNYJڍK'/F׫j|~HDC yjWhݻ @(Z.Zc-.G =D`.a w :6TUsnc*J# #PU>- \oj!J^#2G"M{*[Bzz.Y%7iMQ,ׯmtq);[izj+ݒSo{+hde?OגQ@|[EWZ}il i;:P7zzwǿ4ubLFkx 7mDXcT54nfuwL%'-Gt&-nWgnLE{~C]Js${IwWlҏc? X+ &-?h|$$s4jէ|*mX`,A -KHn J7FOނMJ 7+xwI 3e ׿HfɡCXc~UUŷґX^un^(-{C8n _Qnݕ.% 6& ߤ-\.ȟ?ȟ??>-lk8LlAἸ @9ߤ}0?ޥ6Sb8ۯ2 8PbsN*'glg9?s;b<Y:5z ®d@;ϩ'5@t DoWW64=yv+tDǢ3Duؙ:gv߉*c=Uy%kA_@[o F.>Jbs3%!=|Cph;Ic7zdLk;z]@Ay 񒞴 OUʳt;y6ȲBk]b LvotjZWKq& B RB|nb4J3+Di JD/q)G˯p?{ xP-YkO= I`"!0CN|7hأ^$3TnJr԰w'肎'[|讚J5<`m1MeTr ~E';o^O DxРot * Ҷ)3&}s1«Oú&kYKu8h;q" m{vgHYCƃUWKvfcx˾;5K]z0̖"tkXÞY o<ɀV#?FoL[Kyj$}\ӵ"?+cZ!q-U_o.V{=ȎauãpZti; P&ANjs=O|ܰYd#uُSƳp9 : Όs$ lgd*3CCf1^cM? ku*O97H2&W|ePXfoh$'`GlCP~Uj4oN8\)+}6+Nœ7kqplȟ?ȟ??>-߶ϟn_߿}}~l___ϟR߿}H}~RJ"߿]|"_K_ ߿]p~~_ _?V|ZZA@O A.A_#)(͞zJ}Jul3gȠ%QS.M{w!ڱ.䠞NGXO]9ї1]>1AU۹., O˭^'}ޭkϯ]o{h lurE}C[W z?>"i^̺-)b][ J fT9GńLJ<wZduۃ`- ī u k2D}nzB >SypC$FЛkQx I!_Iv 7)1RX"r+n•J]{aWȫ^T=tцz l%;b=>44vשݷv/_pZb̓=0\ubg;:_|ϟ~ȟGmataX6U-hܼ,oz|_4Ums>B$[5yqfu%UT&g`# Ć` (FdD6 f$u*P۹xkBSݼ֏dJjUUYK.eK$фAa,SCWm<&: O4K;~HETU LKt1L9A"yzH-35UTO?G[؟?]؟?Ϗ!CϏC!K)RKϏRk)o) BciVI{<伲Ws{FFBn]۟L 7 S{_^zp%iykn@_efkYB$~5I, Tz{ .ͯ!o,UMU8b8e"$! dO]{O _28 Zk ñðZVmgxՋv`i].ͣWub`FiF+޴k)3S-нFw?ڠ91 LcᚰyGt>@By7 |$K][gޣujB`t|mάuq2ƽIgtya57ˀ6ř>Mĩ${]Ay| Is{q52Uj%A!ۃe&hT7u޺^,!}݁9$8k _qFD~܈O ٺ!ڀb>ҲPBt[yjy|aocV =*~ే ZV]Quv3:bp9`p vgf`@`I.}hc}˸$TS>1)9o6Hޜ4"iG^'R;fw~Bw?#!W #q*)Y =b[S{y>p^3I_;l*d =o60BOwwUN)0;V[Ӑ֦HZ4O ,Fh+O7YlnOk/?O?o#??{a~, oo_CoR8Ro"R䗂oׂkO}V|VXo+֖KlUSW,iȺk؄n+s o7:z_hh /Z]8@ͤЦ3n̄ t)=5Ui=2K;xs]C׶)nĪr7nC{!g«u~~eW8󐗬&!L@Gu+0M$ɑ-yBf-}> .AFVUp3یtkcb4Id VF51ia8^ҋ./*@-l| DjVaV8'N eQvB bGLc %4m62FtdBC,|JU/xDlH6:rSį|Q Ӥ; 2>D:]Rhc:MބUHGfWR wyeU ʨ(T5k^*XҴ&ji{iE,A>?;LD  (wLߠ=U˕A KN7b_2LQK8.dyŭ6)+=ꗰ' ڭI;uI 'yZ>)Pesb}{ v+P=k:j|*kdJ'r1 ;+uE2_uu*HHWL%+%V\-xAs%K-6Q+j dKЇJ CU)eAG*PAO׃Lk+DUZmt ͒t4ӘkOu|<@kmYtEin;II;q0icLpsyIJ,epD(ݐ=秏#^|{o~~`?|;=˅fB%4e k:ЄifYȨd]a>RPE7{KtR',i/X-K?E"~Ew?ff]j>T|4u[]#f*-)z`#7Pݍci㾡n, 1Y # 몱2JjId&l"'*(28;L8=DQ!vLFc3&IpzU]K(9IJs|P_q3KNč#Ze%Xӟ`nӺk0YHn)螳Si݂ZQkt6 Ny}:X q[:dtl/weT)OlYU/#WA4-,܀ -\v$bqm|$T,ۼہO:|IdARSgB9!-zs3w's4 ڂK}*PdGRh<'`m2.qVtZ4eo]q*߉&TQxqCf*c1U28;bZ3:\wN"HsDOX\5@!O"]GG??~~z>`oy?_3I=?MRo'畤>ߒԷRi)v)JRKi*8?_ /mmۊϫx,Q6C!2 Ւx@PMBOtWe2+^OqJ]Mn[@2#.xa3I7F+dw]7.l5!erӥ?y#!9q6a⍆:SЌʭaiNw`:y%Q8(|bEU^ VܳN(|%ؙ̣=`)LVD)T *ȩRA+F#\3xE@CUqd͎nji1UI",d 40)AI!Db9&;$cK&k_OIvP쀑q ü0>Sx*l!GYlw;<`< [Mf[+4FiuJV)T)FVPJ-7v'$o3`T;2.@*QNn,]lJ s|g}80\B Go5,Ezs4n5 -X 5>R8+G N59g&AcxVop0I F}턳;jgN Qb/d"I|-_+pJN杔2Qv3URX6;й33xitF) =‚(ljrR.~6]$_)iBFGu6 [[v{K,P(WT9=(O./DM!Tn %pdwĤ/hFɗg6S T"SKbI5VnrƮmP4ttV6(9 I/0ko3K62h6GU_hɷ;%ĶR: sR644 (4=U!ݱĨLG~&e$Z6~ttzqԷ\i x6:nANVbiĎH{=6ONe>jɥW_> 9Jq!,9d!K?)H0k3}WЂK+$;ZG[І=y2MmIk:eikV|fjR9\ɣR$.8Ǿdَ>M==gwP+.-ICRN|k<^vF d+K!`sL-Ѝx%z xQμuGy! W֪[ K5=z췛C.N}NX?_y?zϗG~^zϿ}ȟ~`?r?:؟ۃy/_+|=_ _;|=y߆+|}^I>$%I}^Iy'+I}^Io睤^Kϫy"W)y"ϫy^ߖ"W){-3WTK]$3۟Do|1->:/̽Q[B'åލ^K}bk s&҃NT 5C}3[i4eNDt;Mkڢf2KVzB&kUqglY$ @@e# .%C=ue+)w@ GycC$HbZUr /v^XNWS=xL#)sϱ\j9PMj [d59{xW^{$W')AR$:Eވ* FV p:'Ar]Y^xXŘQ1寫bpAСI;Vc1ۗPs'!Nev.FOAryl RdKYg:}M>d46:Rqsġ#P"$LꐔR.-ʮc5mo.0۱ԋz% E Z TKZ-4L/gކ~WμɢOKLFK]W_=Tى s2(+iI^wC#:u/kܰ ~Aڎq L6$@S/l0^Թ[kS[wN)za~4/l m0&n-y92dhn&_(U"ncˮjg<}htH,\U]6˂R=Yrc#_z1mqG~<~둟/y???G~^`?~^y`^:؟W| _wz^%|}^yWy畤>_NR+I}$畤wz^Iy%ϿMRWJK)y"ϫy"W)y"W)JϿ-E>Ry/.8W|)8W Up>o Up~^mxmj+>_ڊV[74Djw=ɧmEW؎j-(9j1oVW9BM"/Y#vr2dFE_@Ea`ۖ)غYEր,΋p,/+9Cߘ$~6&A fKCBpJm,% &?q%jaV1 ahzd/5 .c85MM&|-[+T`KSiyWt*,)ۂKQ|6T' ~|~'/̺]uCdDkh$A1\"|gQ'Pc%.@x\C.^8U}˃uTm n; mHpdۆtJu| nÐޗ&s=O;H$ 6$'@#d0-jK IЌ`}b.v'H LfuqQ[FK)@q6zY:acbaZr_v3*c:>bsd5zib49MIܔAߐO1ufE3X+!m L*GdkO9 .8Į 0|-`MD^Rpe?LR_ORW|KRJKϯ"W)|+E!CDA} n3tB;ؘvբaC8; C|0$2o 1F@ܻ:5ǫX L(ahh.|k#"'l^%ܘ.\}> @ ӱ..2.,P\M4]Bo֋/#K * sX4k%-xy=0~]l#Vs{jOn$bϳ{5 */{B\:ж@AӑܦVRV0Q!>Fi:YO*8ON⅋ i`Z%?-)-l1NѹT𨔲;xj(Wԥ$2׋B7M݆yHQm?X8ĨՐHA&4FbZ֜@8h6QձR>*ه̋Uaslmm-YjL d3o(&vn'I\{ )+ZP6gy)$V%y6sSJֿCwB!u0hSVUb fqLt;V?1^/чW[M.%\)2R qE܂f5錀@O06.ktfk8 \^s:62 ]c.{:wT֚M?{燏#^_y>? ___WzoI$$[Vڊ |{꧟fa#m}I4=wKwOk{OgLDkB5*DNj)aOtؑ Qձ*?-/gr(qT Po^ ,7=awAd)8 J(!p lՊ.QM ܦ5 %%WJkqwE+}@\Nɹ0h,gI=NBHMQ8DތXp@һ^ s,DY}#y;~KBɈW}i.-lib*7Oӳ Օn !2Jvg { 0y"/c /uAcwq(\=/"~B9NG)gtO%&ss&׈@t[:EMd<ڒ-Z1U0֑}YBJ*vz*nDUv &齞\.:wʴvVKEk*2*U(ZjLQVHp)^!cޱK2-J;erNï]prďq:1L+?7Y6Blxս&` -hhjpgI) (DA;FA1Ni,i?/dOK$\FmHEj Y\vYj#~ȟ~둟o`~z>`?`Ig ׼庖Bd 7Rg4ܜ%\:ϮTaVASܰ*9b|nBG#ɢ?4 Ë,5;i . | "e8#;NyL*e}@P`2Hؙ';(#ʼnͤKGmbǙf>%CgSq# ;rB>־ʃ2 8&w2|*Aae7=DWdC;aP/iTB3ِITT -ωFmVȆtzOG푿OuKz~_+|=_ח$4I=>$"".E>RZ-p KSrAMwa~K~9D*Y 'no>ATw.EdݒCO(2mJ]Bq_ Xjq?Z!!mBjAlk"C"~[LjOs]\d B6ztlhe_#Q9)Sd4 ob[;i2hM5En\ԌG/mUG#zd6cp ΑDb7E>AwVD.qh-v(Z# Eҭ؉VjaFb`{P%ԬՎtNHcd9MX.I"Aկ_3C 擄kߤTA;iD=oMfGup]0 %1 `4sq[yj"q]YW ^@=vɀ ,Gwf,uiy i}!WSRos9roTgY Qj.TȊ+iI! 'Pэ) 'pj%2cPXbcbTaHA6FtZ'q2y-q&lL1[, Г> }>xy{H<+}98KvUtf*}ȴݨF\;Oc 5^|,⎩SM!&~Ivp!NݍN.~JRJ5^!3.Y$$:f?iRr{xYܓ!xJٗ\Kȟ>y=#;؟o`?4|=>| __IIy%[Vt#YH s^\ (/I*j1^`Gzc8` m6u ^3Wy ԥӨ%SCSR'#4;1! #^p/kBAɴ՘Qsœ4a1tL͊I{)%'8TȰzd wq }ABA߬:X\%5Z{$z!Ca9AR'&#p&XPkIB'Ga nJ+;3l|*/GSoJKL"sqP 4P~X݉e|[Ҫ QR@͜1?[٪-`ٵTuvZL{"%)UZK9t&KO W+0G^ݔD(Ba٭^O!`ETc5uմt(M<%bCh PSVmja\-!."0uzqN5%~ϷGvu{ui5`cpFZL`kÔ!d!Kmwx ,"2=(@)^2sР R-g Ef3=cѡBPԛZQŌť2/m]H lzORҴ7vP+2')fs^zIsõWki5J6eR:|Hq{P 8HeʅFk.WsJ,zI[x8/( !Ѷ!銋B56 `JS[]GrQAb XǥéX+\h z}43ʘp':ҽu!s@`|* sIB_HAlL.:x>a9DioTElNJjh `[Jt-혰JM ch@ڷm[S+|Oۏy=푿y>? _oKz~NR+I}&/秥Kϫy"6j6:(zKZjB?8ovVB0ORpYYVa#0_:fLQ 3skmxߖ234 lDzQ9ؓy!nU2!fa6+CE$8Ek,.h)#f_6En-CtB9uQ@w5=h(y8K0}"?Vg. ;n/& )bKcÒV)w6q뭷ڶcsU9e8߲>4CNf u ,rkn$ҪJEZnvE:`\ی''#kebY§}qڗ k!a u7-X.g`%Q$YLFJx:%Jtued+V/G{OXtv0"Gm'rN< B]r-Is[6`,>.9VNVL셉ˀ`jؙdOWzbMFZ',v…/e x0|ɚ3X^fCZe.l8IϭfAG5c Y8_j\3^1Qd W"RrN xUpy;dzP$(o2ʖa<> `7Q9/dMB ׷$iz~;I}^I"OKKϫy"_ O oϫ|-8n+W[V0g3%*KգŴ9^X8 2Sn1t)͙vz9'&k]\͂j(Aj SV}Hٖ4tpTf⦱p;iI 'aO"e\%TȒ B?hb:"E~ZJ/[QAsn[҈UkZP`kZ%p \{F^wct>#J]{Y,K>6K,5W>=܆{*ZӃl%a X7Nbe=U8mT}ְMyE_R*sŲ,mԥXCIؾøʵr7aeD$5K$t'R흻dp;em=GjJph>0K95'< 唎{?@R|=dBIiWB&SUoE{jtĐĢ2rY@ y!w;B+[ zujn\o [42>Ԧ[zSP|XK AEQ\ZUJܔj I^Hai>J(p/2ā9A@쨆Z͡.!sah&*[)af)@NIBVi4]"G^,=qCmsÂEKZG @6FnLevx1/R \"lVڗ<ਆ^(sWZ)눶EUikj Dw`Lu2zggyDm{C6Z^'YV#29KwDpuXQf9F4.lH[^m=H\,|G??~~z>`l&aN)=4\R@^N n$B핯H@[fE=C^ҵmpIK HBbWߵg*R1:8').).VpApa6)ioU9P4pSm3F{t%C5SZ#[&]~#wX:er-86=TNd ϱuMň12:5}3-fyc}'O?wS`y8^ .FQX=2Vm9Ff -WQߎQ!P$/K{qo8\@ y(]ʨt2X%C318ks˘/=0}i]g#Kq8L)PPg ƼP!].32UQ*)WjC2oVv[Q\b:K,H2D/ +Rm ʗ˹\fP1HFF- })JQx1t=.e>q+Oс.g_[6,vxt7VMZ#3F[-a.QN^j[[Zu+)vsuT uRѝ2bi! 9]B 9K 8UmCZ)P0XC0ݑl3Vu[y]-P ZuM#Jt ӡlmE^+BBN¸YL/??}o?ϷGvuo[z~_+|=_ח$4I=>$|MR_J秥ۥU|A)? O oWVp~k+>?m+>V9cV:쏆gwL4LS2g Wϲ…$HNryk[TI?.q7)C܇c|<z n%M>zylLkW[ [H4>0 I +Ֆ As^TFZD?@RS۬xs0 ~P~26 _!tAđdkXUUl5I3xjWM " ֔+կ.Q]UN.̐EQ~{ nCpv0M= {>],*Op(ۤE9ZW\gr@}l `Qmq={ҠyѓMdi6 j/Dlp0ms"~@d]ޢĊaFU$]p~QÒD:xpHs/ ,f7ĪY٥-k%敤W8RLbTاKEqPP+, T0Yбk XH@.aC3!KX^I-cmM۾辤6G)^2Xd$9˸(";^僤K|) ]^AwAN b65 RWI#1Kh8FohͰ:\4`d3tnjN\tPV>)+*X.ζTJi}Fe}VN+E_'  K|&1j ?歩c/T dr5/-g%W J-ʤy9^0DG%ҟr+#?ȟ#=~^`Y*@&zIL q"[Y=|- C3xvn;6(?zB2Q>sd %K ?PGQrT `?aQOC4El(M[pAP[ k+'IZ^ }n]KʹsNz .LjrmhI&tךG(@iG~~o?ȟo`~z?}?y%I}~>Wz&/RRy"owМhLhsn- ƓmŭP,.Z;KAT =l[>ĜitF)8?n8mf*b.E [j~!ar龷0+f H(ǿXQisnV!<vJXjIR~]4?(rW\cz. %rٛKMk rtV-/7Ӹq "uڊj/)xܷ^igF6ϪT= $ lFbf>+JW`@: WEåq.=Н^o턚Ro _}7*#G}Km*5%ʧ]BW]#TQ[ݽt.A0xrpN8GԲ`OcD' 2lLE6K4CyxA?`O3Z/_fj{QKЕRMӚ;Srf}L8.15:86,k.>ouԒ7!^/6txmoQ9ώ^??`~`?|;yk>?MRNR+I}&/秥KU PVg/U@3"jݩG</=Ed6KZHFNW=uvuE~)cjpM-bUr6* NVo3oŢzGJ6 }:2;r 8+-X0~˰C U2D,eivQE GEݵ$VWYNoK[V.:bCh{r@h5.00n)5vf;)\~*TI!)ھ%l#gZy!IV R|($sNȅJi3U4\φ軎HR#=VKN_{Z򁬑:_2LpKVa 9]}NegOZW[YGIG;TR $}'.2הVۊ(,K>c$G XΔ-%.Z#2F.7q4 `R~iZtJ Q6Ŷ,5v'g`aj/-JgY5/$2wƥo#9h.+MY%%b8ܹ>!w5kKE܂ni6d=V|r׷Zq@umn^895j(7 EsdqX(7ܪCnxPԊ590sjJA>-^B"al},[rQ ؑ B>,C2.`}F[οRӒPX{/myKZeaGm(?ȟ#?G~=ȟ#?G~^y=:؟o:؟~`^:`?`[MKJu)A ܒQ0}>٠Ho *VAmQm6]SKPgҾ>%[C$01pJJ mj1ή|eT1K_6ItOmp)+C=pp4Ӥ[Wz^o_$W-I=$y%+I=$$y%ϫ|+EW)JϷRy"ϫJϫym)J]`9C:b.^Onq7s"coVqwUv]bT?C&O-Pn1,)YS)ިR[ft#J9bT'z \̏fRŢGЕUU6 `ž,Y̷ s%Jl=[Cg%w7Y7Rkyt5!r/]/O;b\1`&|,ARQuɿ.f ̎rR$XiSI x[+F3GD{LN`.kPipHJ%6͠xeoͤ7kgK|^YԪ}բiJᴡ.b$']Rg:<\'ҝ7֌]Y,<10Uq0-z X?Ģs6XB#zQoJq-c XΥPXJîd pLld|l%\xJu1 Ƶ&XÛWVN4|/z3v`^;/#,`#hD+b)t@r6 /֔T8Yj5Ֆ]%_Dye $|KR+I}^IJRWzmzIU|"ϫJϷRy"W)JU|m)y"|^*8o*8WyWۂ*8W[V,[hIӒh%-.Gj  ém֦R}$9lwRS㺁vhi6ZEH\%Qg7\IT˳u:Ryvs4dH>#o+(ܟT;1(O4VO0.0m~`!$ģQf)Gw' P%*H= ~#Y%\YU8gf<#HSƣ < 1-ǚF }m-5hwt6liѝM%o%4/HY$|IR+I}IJR+I=6I}^Iy"/.EW)RYNBR uULF7Hv/E!8(pKO'l!" lXUum Fm4f$^o#J5vN#Dy޲:h&5j,ܭяʱsWlԆ3Xw06#)rwG}SS M9e;~mıdCxulA8>2vC37]fqmtOsQьXkN]n&5Pa_O5G|y#<ȟ#?Goy=u/>؟~`:`~^yKz _ϗ>߆^I%I=$Kz^INRWz^IIy'W)|)E>Ry"/U*8?_ ϫ|Up>o Up~^mۊV<_ڊϫxmj+>mn+-aUh%R(!u#f!7pbB5QU`5)0ŜYmp|q$snWR|~Ҧ* RYv٠kky"pN7ډZ|X\3_Cԕsk< #JM?ݧ=iWuЛ`h (Zm ģ (2bil 4qx̰puN'r`P-@Sr3go#Vߒ1(v.UyRvw3Y|OOq2a͗U;Elwq`ZtXp )T5TڡpdhlnӳEЁIZkV |rXBpK@m+\xh 1i1X+RT^-Qb0iM@'s4d |. /upLD>@W04}m՚`¬z)P#dSJ =w״,=Cg8 { Lɲ+NH藵yM~_ yd)Xi?4O>P I/$#i;YBq͹J%e ʣ&!"X'_CW$+|e)eu"#Ul7f%w ٍԃXim#r':R;&;(S+Osms%+Xt߀LepP(CfؠKnYQd X ,#o}BIakk{?cf*3VC.vA43fKMBYe*Z ^ 2#s- Vv(hT󬽚Qd,/R5k&.`PiZ]Q%G SMЂ0,4KOGӃ`+Wϸ!CeN^g3(D5G霤@_Qy8:Vs蝬wVjՁBK# }2-tcGyt=6bg+W>k|am{lyvTotGQe°0[ʽ-$F4=lk!I Oŭ>_))ouZ ,[t>9r/~9YTĦQNRԚv-`{'ZS0tG(Q* ~C&к:cV<_o9LUC _.k%&.Gi{+FH]V/|JreUo*ldzs󭚪W7TT[FWOȦ%<JpeA::f'ST\{rJo͌O34&WrH.U#2\TsZٕ{\RRea6ɌeB_[Ő>"&$iZqTDD13f5˖FVbX 3n8)AN Ō00ߖ -ɰ4Bψ $噃MBHKħ,_ ŜH*}bxXeءd_CA;H}Ym'e㍲|m Eh<>/'J\N3jˇ߲)B&mNg'#ApLMQʹ]An0( ) s?> 'ٔ5\!2͈EWЍ~&{8c1 .`ZPJTL!k&-U4'Q h`_.+SIKQN` Ra1"~[; :*u梈AmG!GIF זRЫ <؋*)-\ȉjR"kϗh CHK]_VXFL0|v6+U2S;^ڨzA;GK|cg~?~~z?}?zyϷ-I=?MRNRW|KRJOKKϫy"_ O oϫ|-8n+W[V\F1VC7(0MM#`#S$ (򼡜5hdk\Z/:+y^LDc˵FH Jt[ݍFɳ'* \(Țy ԒMDDC] cZbiD$.{P8=UlH@\˘'ғC?bDp-? NÌ:pƭ0ȩOgiXJq, & =/ /:Hsu#JGkI6e|. "nlTՃTRD.SMe7FQcN^,ȉEH%-;2dܓj?@>A#.IDznj6j$6yZJQ_Űx/e Y+drFX/MsenkNsَ*iVOEJ 1휖l\ƚzN L-@f+O)MXe6_oCJd S^RSb#5Xn=9"\MoyKU.8U {:ʿcUc, %R _\[ is ed ;7ϫG&<9vAA N},=@3b5-`=iJw׿An3EVqo,hX-07AyB{՝4?-:CGVPu'Ks7oºX?8oe7Rݮ¤/rhZ,K@'pXqv; }8Eݻ +x2#ɵM`tYIoWFmv]-^ AG>dp4İCʥ,q>9VPT˅"%j‘5etyH,rA2nţ]@5eȵLjvRrкOJ٥f/TyLgNFݎ!-(?їXVYJ җE8Z&v3\D܎ꗵ=-J8RMZ?Y-6ΰP^E)06K!su5_fts^2‘wq^qY|X¸g5h.GDgk{ˑ`#U"Ul•T=7>>betmT9,ISQFLmUGqn907~pJRl,Oph*ls8fB9'+8%zkj 5kXMLO yB6Ƶ*>j6eKG'5t˽;".2lkt̶ էH7Z8LӲD麗 Bv\}>/y C .`_ͭb4nhfXZWȰS2;xȨY H ,Det0/W(ΈTI5< %y;itm&dz<:>e򵓐]9)m}mPY[4K H9CVNhKj)+. C g pf j.:k1PiV2MWw(*ӪQ]|= ކe ͆mc5\^ZE)I˟ސKڄhɞr2zUbX)]IWїMfZ3޳FۄSʽ>l+-U˙*sL];}R0ʾd1(hwܽTC~Ӵ-Ӊ2T5~`8UġH$G_JꋭZ3<DŽiWRن g27?:#zaA~}t&#סl,vS*mf{VLHSYLKfu=yOؤͰ y1 -bO;vz$DILkҒ312` Pm*e>M!}ح2ct}'%] 2'˅eJ,0jN4铅tHK tN]@6$K ߫ 1fF! %&Q$ {[՘%5p)vl$rYT#IϾl^ J'K057RkWqQo639Wқsj5D̾u &x?Ȑ:و?蒰QYFb+X6y% g9CH@d#4˄SMa:;9U-/w0L`PuL0L 6[niCQqz3Wf}c@ VovM!F(h{ٛH .-\Y]AG)΄oq)՚m%&NPH\˶B*rssj59m9VJB&T2t%1y۳E_H4y}M2n19A]u:@P4M!9_/9P#fCUE]D/\bi=OizI"F ͱYf33B xK1f0)LA9 %֋Cϰ̑_*!#wy0l}b(?cǥ`{yg=NmcHƶ͔ӕywYX~E)ZX̏i0T^OŊ T}oH b`Ļ@JŻ}ABR62ǛdjMUtaA|Urޒ3s5ǫ寥`t^n-X?&< P3R9F?!fR;)$ZevVJ|:L<䥌sLվ+Z=B3` %Y'UUΡZ[o$._[ -#/î#2~T9L>E Mz|YI^3%;=|S`Ul.*!+S-|9AUI 1h GCw]]5"P-z< 7dM"y, $O#;]֑Nq X8ࢲw9/xTR;q) XF`J f)G+ .惈UnUP=l}JCJpTk{/)q[VMCL a%WxƎ{f`yЀS) 7 l5|@ a:įVp3 \c0Ε" Hg)YoƟǛ[%i4RmM󤤞`B?Iwv=YHNjsUk"BJ~$yǎ 䨧r=g[*; l!c9O8F@m̵+Es V?P ěeONp,k魙b[knX. Ъ[ cͽ`6ĩ/Fjh3XGFclO+'ѢSc"\\RxS.YVñ ^Ύ鄊ۦ|rxe3xL\r&w41R'!*|T+%X׹I i^[O9ٛCƩ-{XGHv۩p.: N^91: l1is?+Ϋ_2Hjf墾s宔FiRs=wLmPj biӡy(*&7@JK9!^Db}@wDz7cBHzfYw}K1˿](j:خ$t3XrӚ(Dw'`܆`.`^C]LZS3,I=qZ'Ect3vy s #sٜ1JWl݊c0cL{,2UaZgAǰq_B5FjwTr!ϟAYdǙSwAbߗ :M3z!XVTn xX6L@D ObR%KKe/ \rIK261+DdE?v1 p,vDLPK Y.ea_'y7QT # %&r -߲25RZK.d;zXm^uēKo@4|poCCRYǬNē;0KV?|C{(*@>+li]c3T7/ojX3qT.]nJV@J ;5%ڊW-w\8y[οyAZ^$|(zK,Jū/Q67-Aj$hT=KsϡnUtR<2xu & Ӿ)hh'%scϕB6@dSJh|Gl!Dg;II^첃I: e듅 _`^r4 ْA>} 0}N)2P n*^8iTC[[ZVH kt2Yv P'N:i~^^OEhVCCGBۅJ PvSP!# |O953Y2.UH?2+ɡ 墖рuc?}I)Pz,?aω ô=:dekמ@ꓻ1锥) 1L.M58d[uI=0Jicײ%N! Cv_r1oUmq~*"p"9d\αռ۝쾷̭KZZ8@sl,걻liJm'%/[^8e=R_se@s"4qR.:4js|ɼxnV(%㯧ht^l&$n6 $6MSz$LlxƭxLw5%~۹">y!ˠڍ%y%us `Yp1f}\KZ, ҃V)%7&jl^ Dq'|IJ Ƚ(f %TBlO̓f.ڑI>1e[',f[6ߌ&DlЀfj}ϱ}j\XPjܵ_1d}pdmt-Mr&(AO~?Kdwb _ߧ}'V_㱝l‰Xj1 Me፷I*2F(t'0iBtat0^@ܗV:Y#TUsepnͦH(9ݧcWʰ%>ܲX.TG,jqg h:)Nwl(-I6ոvwŸTZP2)%偨ɧyJmOQx4f 9ҦoflJBav?4k[ܲSHl)Hzi$'Icz#" 9L9^y9/P@V at,16Q V!)M%1uGm*9F_ٸϿW.6>Ȃ1~jExivh~IUs[PTYBD[R*I0\wМqLə0E720[:ɑM@Vl\º,Vtnt,9QhJX|f+l*FY b-6BZ7 GY~%0 _a[$A9H {8,]ڦBN+6fF"-fb.1S<ب9>Օh66}e\0b?dl_rU_\,'G;<By 6R;0C0/Fk)V[mv6fp\!Dyjz@w94/7P>Edկco؁֏MUj,2Q.'r@U)ERo8fe Eiz4:]"vn= \b$ ^ke\ɐ%qT\,z!0T- UOnkp wK7J%ƇeiQz7h$Tþ2X"n6A1UR+"zҰ-=)Oн6se3!Ʈ$֔8GK5 ٍܶ{4!iFKkd䀓;~91b(Py L7+^_M7,:Cfi懍ݾpտC)Ǧ{KO(ݒK %f,K,) $i5-,I(S.WeD_H0{eb]Id9d`'܋ *f](^Rp!e^U|S:-OA$  hFtqٗzgKKrF7+a sl%W+E`V͉..x9A|dV )Nt`#PfW-^bd .E5,OCҺ dU±lAn'kIU;NF4k"ZU40[tQAZ EL9t&^V,-MW$1160: MeoF|Blj[vb>2(̽K6TJ'6#WW@IlSN if^4Q3&-,Iablѵ'e@N;XP_ zCA?fd꺜$]t)u!I;8 6zetL7 |=츎0<CԋU4n|yߞ k3*&􉤚a0KׇU0%e81uxpy)R!:n+85^/M\$U7UC] k9jjٶhJDk?3B7(T1!&)|VQ R 4L>ݙir 0 ›:UIRѻk&W #Fڬ9:~y'g4 +'\eH 1 s*TёNдY堻6$-|fKpMIjђb+7.jLJ>8#8<)r2SdxL.rUmoʔ鈽s2nvh&xWwF @@d}k{Zt7BrJZ$YJ |_>.RWN^f+|ƨL`69Ol b$l:C*kVR}1!*16$vV3gXm.gS1Z?(x܊qS. _]) ,p =rwɡ[vȼaSCfRS4 ܸI0sHnIP.1 2l ^5vϧƮJ IB]qaKJʐrnt@У3 a^Ĵ`eװ8 6)¤Tf8S'Ù[/s@2׾Yۊ)g`,1ݴ9mf^*ܲ\\Tn%z(@q6Q|xh9=;0A?@QN6*逸hsmA@Qigr^\ׂN 7\?nW+G,b(TpIWHRbf T~fQ:F?-]CrOiLg6lcpՎ42~L§"-Vm՘ڂs#x3b>CrXXd>~E>2Tl 0 1w2ZeV5GYL!MYld u;^XsifS~Z=L:tZ'r/.jF3{s%]W7KRT"-7yi-#*eGr V]vl]w mc0$JM\ s^W>^ޏA{-݋ʩvlohVY_~ޚcӚixZ&KPʓIZg b1֜'* k6h;)p1Wdj |2@، E!/jj tvJ{qIǚƉWRm[U"M l%zLl \fWlMp.)atiUqS-ZQШvfr'PV94>N) $Jg0U<]Bu+4nGy͕L?㷧TlYfm8mЇMdMnBJݪ-3ːլnj9r |<|EV6,>2l 9De$vg_ 'E-qغCKC-qof`z^ ~e)tB٘C;lw dC}qDpzBݠCೕZ36}C=*>!hڈY^6)RM~HNv˘Vbsm:Wj,S̘.1n"nFų&{'\'VN.z51 {%>$igIo+ ktqWMp[];UVnI 5SЊDҕ294FjlzM~qv+@-o4_y"ӕcֈqEd57Z>" uCk T.t.ic@L;5l4K+B/̺8j \JZrbFY$-5s@3nl}\v:5/LigCK:Iւ*7݅%"0mD'2 FNT0zOAvD\jfMqkUO{dU'WlusTn20A1R nY`/{Xi]MBX3eVYFaQmVMZ,ԝ6I">|<9y-X<2fө%BСsXCٿVT0ᵹ3YBrrgu.g^Vymxcߒb2 HCkumtRg ClATwLw/"B>f)tigF8|o;sܜBI^iv{>?$ i} mRF}ff#NK)zDo,XʍJ$'vҦǗgTF7ob-BC?w®9(j"Y9TGuv$\'[nTVn7xY}L}2x͉yco®TqC萤I6) r +|<иgK[duHCѦ Ծ!-(Ɯ -f. !g'A8&[zzAI>TYFf",bT:Ңs}JBJ-Vcs'W RgEԷȒl8>,p@7z=X0a͛"v95E*w@D= Bf#etzJ_eT6g.&]ȉ[OuL BR9Cɴ$T݌$lETo3;Sc݆nb{1=؜X4dWCh}Ĉ9vaj2q" k}Ǟ딤ӖXS vdecOڋ> V6m)J Yy0,zF%7E* JRB[n4$' 2HA*0J=Bֹ4ݎAp04 -%S|WJ2Ҡ f,A0;x]]WH ՞)Oa؅ۭ>SV/9=Xnt@1gƆxՏ\\0GR,]πڲkaotV5OMRUdf"PQ@g &x&‰*jqR9ǧaG $s}b+sюm.LP0r(:zJFT`HKPqYf_t-ő\oQِ)!V-[:6F/>%E ^4,8 qW81)NCJMI094͡I(9ε V%/; -\J,YI rkZ[3l`4[mKbϓi).&ѰۆD^H(tI8^Ksi  mZVkLnJg<%iE՗vJwFN0` 4!a25\3h0Tr^U۠Ux.yPJ֝)ڬC6JﺺN5Y)"Ih1 >c*̘6Wϩ)bSa:emP1Rv1`jNTSAd=ܽүhCgL~P% /Lڀ8; J<+*ճt[(+. )9 urqD% VIV ,m dOGbYҟ])f]SfSy1 K]y;:cwS.-+=…'v@#dyX`nd=}e%Xy_HNnk9\۵OI4OԂrZQ_k#zL|~t ɭڤ.M y'|!Py2nyYo'qői] \F8!n?\9%xw˜`Fûy^[y5+&\b7h߻;F33[5͕@V7_Ep+5:jåU~M5<,ѨIH` cdGj`ϲ& wpqlD ZFh;.":gӇ'FZ3Y.DV<̱,%:VDRBar1Q&ϾRSi2I)ftNs'-GP[7ڕ^]J,,'7So1lJb-} El@?] 4M*:2Hڔa$zb֩bXn T%F2=՚#3K3DPR;d`eސ@q.45w` UsGYc_Ao߅bVۍ5өL5:᥾3]:Mc 3L TG%I uQJOCF`( C:[ieZsrt[Pڔ].83)')c+TFBjͰt`o,~ڥ86 ?l'f>R lC[ƻZ)'\L^Vpe*͈+^FHua fiR]joY"pj|uc~KGJIͨRߪ?r&{7ItU1zLUьC.ɻHtL}X))w x jv'\%/qsVm 47 ҽOA˫-tXB6%|Geó4 R3p'Ô+N˽4YX=ݮۃFk9SX$IWcsRi#/m |5u g6\ O=$14$DL".k\r1\`)r^M%thRW3yUl&_S9E*!8?tvdwf3o!V5MH㾰i5_MOs!X#_cvAõ[*Y[Nć0 ei; ؆~ݘ$҃C8C3ws4{(`|,]sy8t`DXvOygqWrRUZ2k8nFlv~,} Ӓ Zy(Bi3Z#y8\_`!ڛ?bGT1=`u!E 7/'ތ )p 7cHkװIh_MK,ď`6biPܚ21RKɊPvFۻiG6!JnΎK)S['@1:s n[3oMsٍFY 9l1]Q"bdBMIEzN`z%jO- >J3f-W˼0dYc(sV),l}:Q+d4.Tr:4yFmXnpAշfΆ;(%C= u{|3Դ87wIk="%>%L{Zk~ػ/_ `t\DP=*d(0`}.P6mueLЁ0Kffw˭ydjU):٬ք=}+>-DmHae+=@~3'u eH3+v'jEhl vZ#ΔĦ ״rέ*A65&}Thb?qhhYXf OE?GX>l."*˜Si^6W?wb^xvXE(!z`*#4zR<ܜţ?ز`n 3txTr S!9βĩ-J>!]o$og=O1-&)+o˶uVjR eK]ntglm/oMmTIQkC:C5?w5%a5{%tlsA@0%@P#a]>0l& -|7U 6E4C?@ݿ@D klk@esoLSqk0ު؀n $Eug)kvGU NՖZӬHrg=;` A2&z LlT\!@TCb~g0J6wc2O}zX 4WaKIj"GThRS*}&=tk֪rؒu.YRb1у (p.bf3Q| Sm RKup;FQmKɱha*vƨ/f67/;.7+p7QshYfBwd+; hA_6zs)ɮ͔ހOIͥAhW9v29a6rB5 #@7Z?! <5U=Qr_ЦF\VTsQf>ҝsWq#:]Lb+c>m)ۈ0ÕVbG&At@DS`fՌR|k[\Uq21ɮ"YWՎj20Pg($rQet5ΔS<B.2QP[cG!učnEߓMektnVMm?C{Q(׮w+N,߱rVq8iTu,Y&NQXDqY򹚶3uwgpM BJ} >6|f a܏f0MEKJcmWͱabgiY1]ZC`(YuutVLL"9"i!Z^"Ʒ;zQVN̿0+JJJ. (sUkyw\ndRw ~J7Y"Of-"wПcteRRh\rRPU&ա;#by):I9*aTQVYYw* $B6GB͠=s5+x(ΑOmQC(N+j×H|a!JQ!unDT? f01]3ĵ_ ,~_[,My!df)R%I^H4"4|x[ !C7f;r46]wjDhB.qP0bDQag>*j8&Z*@jr:vBaoXLհI{ByRCd;*369KQ1P7鲌)gǠEuK88{pVZn<"6fp )=` ΰlݪ#.@T;<*9.#;Z[Gd[$TJ׳.^Z.Ss'4: 1nno;GLy8+9K%U^DM K b<2'^\*nGc&';6TS㠪xLٍvJk󰍂"嘀H7#{!r/R6l\UӚ""lFI8`Z9?Q;AY(RmK^&9S;e p&?b45kX`od rJF~vsSӾ9!/ьB&ACQ|׬u*._ظLrL7Zz2*R ¦[: Ų]\{Elv?$f>|J1b :^Lw$Fb~e'ڦ3Y\K]#](M;X3Yu-{uً%i/X!5O f$S#\@%8cɪ\dW֋Dtww9|#H:G.,",Jt$KF9^̒7n98{HsE`-Qʰm̡b E,|KS HLe Dǀw$|(ڈ6P~IX?} VWvK\+ww OX|A%Q_VRėP/;b+ې &z*nL)R!l/D3*ranUz/H ’*a {bVU2|6&}^c$ YΎ21٧C=^, pb au ݭ=$X̐l쵛E }\X%,I$_r˷?o/0 {f ɡjBNIhn 3L>oj_:tInm7r5ojlV`=3114K(Jic1щݩ`q'w"g//$BI~NOI|KnR(zۖ,M'.'!TmR&_{E4$MyW SvC1k\}sZH(RbBG`Lu{ gL<z25w@ZcKD!2p10qi?ě*`\ iBܸ|+<&5Jۀdu|c%Ɯλќ:t RI6Sx䪇&6\4`K@ /`@}xiuEIGؓ,+93Wz)?e;I ^M%Pr - 7`Lm;ILQE8:igVc:#)?C0PbX3&:^t9uFg nkC&>f@5 נӹw"Hjat ?6YQ^{W*$?60͆c4.&v>!" yvg ɷfϝz6,2IJu)i:/J"DgJY!ǺLrT-͖yz hU'?Ҫɗ<Բ"^/iWjG˚,#bwj|>EGN)hh=%O3얂xWxaq=@\y\Kf}d7i#-꿢:O{,Zx/d>@ٶ`rQjˏ GSzm W1aG*4#E \IznMӆեdOFޡfՌn׃tXC*jsQI]h kѫ/ )ra0 )^.x|8X^ƯzO9aҼ"WTQG]nOM;)f0ySg !JK>(RyU|LHa#3UߠjxRH%V$}؞WuU{7)".i[tU_ꢔ@krQ>p:xO[#Q UC= w6xK#ݩ|ROj io0 UZ/ÂLE9}b|.\]Zj#l~mV47:س\j*b3,c.f""+j\cq!Ȕ{X#;B+$t#I'{Sy2rd\,)(f;1~ kRdI54,=KǙM<C>T4t`)]>,ݜM[b\@F]ae@t*+QDxned6,*"!aEfADb^U 1My\bffR.%\'!.̀Y)#z\eT1`9YL/y.d5L# x}85!{)zv;҂y]t9˸B\X%].'16XR5hM`'u..E~HsnI0`P#sS#.8ǰܐp|UVvh)|0iwEki`_ӱ3TgF(:/w 椦@Yq X)0m== K٨8m]]w4$=2O\tw㡫K):=dJ(.X%]K0`AW6cp7 rւFw\n϶Y'6{uG&7@Slȡ]_;XV\m1p碵1Z馫c[X\YIj-^H#3M7.4x2Q%w?1f9fʻBlDj~^(M}Nk풹' ./{tFhWƗen\W)W$ҵ֙\d(Czm{c-E5MJ42L$z>"XV,HpV Q=gbL"{KKٙaH6.2V@\6:HE˶;:os+C J LMŽ s5k]FAT7dA #*FAαz#~К>i$ȗf~7>ejrpL-twZ/(_)]zx ic KihVIܴ9O:R*6)@ňev9Up5: [ 0];-*EԻ>.ԸKz6lJ[T[q\жSLqtf!%0EK_ *َM[`57Н 'k>DY.P յT?n9b7VZOAܖScuHÛ<3M9gɍ%! ?rJ3 MQGYjelvbw]Ǝ+| 0NJRTSjvUd:'93q mLc h-c)Ŝ嘌UG0.(cpqas \=F~6ŘK Ъo% 0oTrcrNLz9zw /o"6K-8l%PaVWhs3dߑRwh) >9lj('c Dg3ݹHWѼA h- S)cH/Um5p8$U Ksܿɹ2)Z&O{l>}$+%i6dQdTQ^8GhO>,$ h]5[-v(}T5= 5m+coq"l*ȹJm6 %ETP㾆y̨I,d&7m&7ګ P<:.|{gjs)J%Zthb†(iXtݹަڐp#&0*p;ft,ԳaDS~)=hc&Ux bDԔ Ҙ͐.E͠ +h8/@naJg*̚(dDND &E69wTF:7G ycUz#RZPKqe+,$ݒ%F0Ɨ3HN68E7zѾ?cs>vw{7 w|q@0RWZRX]Z;ϱ}% kzl=ݡ(MEkb˕\ K 7>MT6ӰQbHxG97o"U^ T-ON(QW{Ԩ8RE.okֆ 3]E6xXk8h?]+c\7 i},yO>}ZQ"JU嗕1B?Sj5-*r4 [ 498!7lkt`7XD ~mF,]L\ 9|<e<8ն "lnԼW `|ŽT\eYlլioVU2 b~ bW5Y׮JF\AHȺ Xp f %Du,KT\pnۗ dVE>X9RqmfaZhB2-rNulOP])OǂugWbי>p>f^$lUpt 22V Nm|E=7 3g^Sbr^@+$h> .Z﬈VA>etݰgd]{A/gƌw|:T [XPd{d]3(ϗ(Pvvzpd϶/ң緑F^]cn<6T/>D:Fh LVB̮ז,/::c2BuE/5φ2 皤:M]36Z ߴbRjmzxLn,qqX܌SZ]r[`Qz#`G5xhI~3_[3&ɡץSΑ+@>Շ̲5gH`< }%" _~QڧJB8kSB~)[?}a]sM0ET5 ]A2?=yg(2Gާ`){Ҕ?'^{ZؙOjVݦ".R\Q>q&H?Zs62stY*R'jhۭtdJEG )i#`9p Wl wĀߚfE]-MEWAV\OAneR[UYvB@i 5_xK WuzG/O*t }feEBS\Ò,m*oX[:} tcԪXEJ7j_F;GEGЉKmZZ#f0$>F%_wu50&aJ.?꩚La=2haZr9]ħmZT;P9j.fcgZ'ຠbJo*kt7osŮPŠD|ֳSp^aׄDZMlӶfAJ>j9ی4IO{7?)9eQ},RХa[0R}cĤy/nȢKZOnv45Pn!&7a 3GM%6{G.0+(˺%~؅֫]3'hk9Vprr>C!=mSD|"ޛKR7NlTk69rKͧ GP aAbcpYW[[_Yep]:vj֩.xEǼB(4?XG*$/im!!0 VpVE4m'u UR0, ДǬ|q9Yi M&f ^C/2g:,fk5HI]nFBު#Pl=D*&f tFAkCYWa=neS(QP! caߡ4ӣDg=fe&Ӈ9ej1=7tMɉJeаw5_Z~Jc;؍;D3ނue<1NGeU0i+1 4FXG;^ ksqhNr^jhd\|1mGM%(D,tteұLU>ΧX-#snPA$B*G;c5S ̫mO9;2fFTvQ:[,jce1㹺 p܌cKnm$]Lrsku2uaEy}q6sέ@t#&P.* )l0[CISFkMEލQ`&ϯՒ(ӕ*+' @_C]fF׷ajCjJ( dJP6W_C~f2]BRKl 68"0$^FۊvUAlmOw}jxz=ce|g(|@ fWVa{ 6 sX ۚuEmg/|-(85>Rޱ*$h5sE Gvft-h- Bµ\(: X1'yYO$Q:Fս/Fa[$ T}V ՇLÒJ{n=n  20UܤR `gijN/WrH' r5)oS}1+29:$oiVu dio ?ԯb+$9pMܥj2QKGiOֻYo9IEzY" 4J(9 fwMz'.8iRbX6z xhGt Ğ,xs~R6TFhN~|TPLYD h[jI- {%Sh X:}`0Q[ˏp#Њq(/Fy(mkb 3:_'R46*IeѪ?t6p^c6ZtyWH XFq&K'fL "rR|fɂ}b bv@w.G+*~,:(љ\:Bŕ$E^F/ ΰM\TH8 *N<|^rN=|̕V_g~:3Z#'k=Ѝcj Qnk3hTmȍM_xCNGh͈Zb.Räl4J2pd]/[ѳꙷt<]F/^9G RDX.\\{b&Q!VDYj Jnt甍PZ#Fvǿ¶8){.*f_Hda UxFCJ>\s/% @8RյF9W3XO%5dS2_!O@x29F>f(c] 5ϩ.;lZA1v}iKNJ) UO `9 J` ʱi23盼|z(LrK4 <2QVK]>%0|PH΀X5A(A$sw_ۘI)v̮f2]GtT*"uؑjXeo+**޽]̭ͺdcwBZ;LIX`,m^Ϲ؛HJG/YuZXٸLmm L{<"w m_ MsC%,9߲HFS3s䶬*4 j-vV{9$`@8)դ6 C:"|a"}.pF6ئ)HVFWA/'J?O"r5swV98\ݵp@~b#ݡ-fsgP]]޷/\VO5=?L$ɰڈos{]lP.wYb* 0NA_ .Eߗ'c TN(`",KzkR-fsK+6s$F3[K40߯4RAn TvxLħR>2=֩ +ZSl=vhy^^''<0(H:r4TUʼwb8btm ᐀~'ּUC]'?4Y(@D 7WZ}Rfҿ0W"[GIT +˯cEtlV_3iͣg#.z~P.sk =s%Uc)<$e/9hG ,gU:|>+r鎡p4Kͼ[utQ,>*:BBJ'4 4K=".9G!bqOjP枏¾S_)p9cr! ㊉'c-٫6Y\4֫I@qdI$iD8eSuO-xT`硜k_7xAϻ%I#R!ṟFPj\S0Kv@3,PK+FT[ivKC9x5׺4nq;`x}#A6{vN|>+#ep3__9*֔!t@  8$T:-XF}X-U6wϗdn4M)? z1Ϣ(X|VGbQO,vTd$I n1!=uPB'3Ǧo[I\Ix"N]"NK}1f*Y]xZtFImWY0B賊Y9-bٶٍ+ ^o؛y,iG @<@{t WbpDNFؤKU"xN#9J 9 ck4ǯ7D3'7=jsby3cQPJE |jn)1אһaatX8?`S99w+9eJ+msήw:d0wv݄h\]>i=xp(8P)8DRG*2)>6Yrx19Aʑ<>{BWY'c4Lzvۓd*^ ʮ_]""ux_&hR݈_0MA 7 +~' T-@%H!1BTٜ&ʧ;뢣7Š?<{woOj;Wª(1EXe&D=Si+y ˫<[ȓ?6+vyk@瀟8ַI;s|~X ,10mڤm-ˇ5weoAq/g&.@ wxVj| .,SWHqAAP,K%i֤{ 2-h%[#mK%+(@11OS1'ŋB|%) QmqeA e3Ne4u嶷~ q/\ CĻ 65L+L>ׯuv q/j*ш`SaRpoI&vQ%[0,S)bpw`_#O%{ߐ{ﷸ=yz\M/~pi )qK6_\r7CFVb e`Ro]0LڌerY s'F=]Cy{iܡoZP%;4|Faᦷ3l58ؐbz*OcR_V,;nK~AgE|,񥭌x<bd=M)9 !VHpnA+?%C<5H2wLNsD1"랗7E4J-ѕt<:X{[.;c|?(n`ar|Kp.]$|)h26L'ml(*\,4)_xB 3s%*H`ZoGK{>A)0r•U\'[c)KT+vycfȼ{G㞺zu<qbAf=~6>NJ5P.)F_#e O{hʣ:'<Ȩ5縹W2l"(%>!xzq8POpy' $2=,"$:څF _@HӦX4dy_[= /cP;E^#Õ|fl 7Dl|_MW/vd/Vq \#Jf)+-,p-FKm+(3ӏk0//"Y.6 zᩑl[&7HtrD(TSZ^JRyq44v ak"K/EiCwyhW wI`~TW' R8> jb[=:nLt}.}!R4|) paV.|*ktZz /dŎr,pt=>:_p0I 53 |1Ea`Q𱍙'z9 if5ٍQ4'?iQ%"`țNObbŎ:zƧd^r`X9RY0$ j\Eyc7EɑH~y2UDmK$k؅k<)0 lP3`oq\\lp`9#s7&Fl)#ƅ/<䢽MU %:qe;U&S;X(2C<[SSɁN0|11.)f=^j3l+qIuDCNjUjpV=8pz:cLFQmI=zTglomI26Ѧ([+&l]c)gxxP55V4Vժ&_X s\J厽ӉZ)d֮G|5>Pe[bh9k3 E:bBChDJ;>?,NGlAF7fKϛ^?2]~r̄Mw2 Tի'^^&[M27f X3Q!$_a^3k~?pɴ zsX cw>7VLTdCRd oAfҔ|Akf΋kyiq$6;SqԑqFhBY!bMfAs.V7J[ݫ[bLK{zKKUГ"ā>KKKb+N/'9O}؞Y"yMH?d`y 4;9`ʍj Ag0(4ϑ\JTɾUӔX0w} DZ:ߘQ%)*o+U|3R澊]9^$yqkh%N8.Fv֫jܨ]%.zsoVwE~WH,nFMr~bbvj9dkGs.Eböd乏lHi{K"Hgc-ߪX,Ue򧘱`v'Ji*AyEƙboca4*WBIF`uF}9k"^1QNo'OSn1P~M!#tq/ڊ({ c"1 &cyl.%\bgJ"kÐK<ہ4# s%-~]OƏ;t88efml{x>zTJI[i%o9q7y)|`yIyM*YR?7ynڵw"j IE~orٱ%K0$N:~/o+j<5u LXLSh:kq/l7K@Wbz7FPW@GiNڭ?ScB!f|v|`w\XG`d`SΆ36@_##O[X$x,k}D\1޻ * mpK btsG Q@r'9[ Y_#pXc^+J-fƩ z;K=0$K8aHĤz8A%>2.c/L֫lNC!k7Z %-yqg:pe)Ө@sT!tbi~0ڑIBฮno_1]|2<>Ws5̥sCҲR@+K!$EL7{]oȷ籩cR(0n'7]wwi4s=Cf*/5oþj {dž{k-,d ϩwɶ|oҹ-ElI27oh<"zï Lܝ/xC)Ӻ[)*J2gK!4Ȼ#X|hچs>f怎K!.¬3h.Jʧ y` gFV-6Jn:'ϐLj[l\&Oާ"߰YZ6NG2HN}8^.3+3|ٲḵcD؛ŒYfĺv~NW؆iM嚡}&#ŷg2>LP0RU[:e*1t{/.Vaa#!Af+7,?ܗ$j=nM2XC2Gtdc1+jTpfXb` j>ezt5Bԉ1tƐ1k/H!b26#`%Bfe.dq9D#;btҲ>;Y7~9_]qNuBWHM)ά2 MBԉϸ5N[BU_x+cjs匷糔0^ŏDs:2Ox۝+jQԋ!ɥ\kb| ':rnU%Ii K&s~"M$ey@2Y7Hyf)酡KZ M+tUѧyѡ8<z5ڰS<~h}e<^Aj*s ȤS[StGt=a\kv4L;z"(4c꣫M|{.eJ6.ϐ1Gֶ̥ADK4TAf]\HY#Tc Х*Z%`MJ\q{[Q5)_I:zyxs qeVFxX6LmvsK4H8EQ{UAY}&AB r#'+',l]^qßdn˚9˒2<3J{'i /@ޱ+9=lY&H ٧X|S ّ%\0X]ÁzfɆw8/4S,= 8 mS~~:si[du 'kW5Ym W&RN8w7PS@(qd49<_Z$kl,Ŧ9}ěhw 1"֢ʑĜ<2 wmr'[ez1E?X>Xر'ke+,_ַ~OW8`x҈MdZa [9*9}xˋEL^BeŲݱy&9s\Y-3h 7Y~e _ZeqЭ7VF)BrfZBw?k:BP0P\:y%AbšJ(CƜEؚ4K!r?`$<ݤK^}Ηs}zl6?,BӛoWBsVS]M,8W>]ppU^eqɧy331͈ j{i>(E݄4g:{PVUn߹*\uws}'jO[ǾU9 a\\)lϭNJto#Ԡx!TY.ŽQ8pZiPz&f$.am S aarbkVh(+NPcٶ8(x~ƥ钪mR-g\S۰ЪMaMa>༲}XYm!{q!л:X녖x䭽r54(s2J#F.%.rج7Psm >,A.@`ABWYN~ژ,(sF)R!.CcT)fߜ<#x8o=Wͩ6Msa枒bL3ܹ8 _}=bkF}:]କӎ`fxXt+,lK٤s-t +iӱ?_Շ,V M PDڗ@ dh Mr  ŌtAf n3Ez6ᘆoD.j,MӘ0ȈAy߁A܋{ xOF{sT}ffkvvЧ#;fDPgU>2WƙG zZ刐Y͒0dəޮdR1փvHkĝ[,Do)|1ɺAu7S5+"R旐vdVv42Ntn0bwMn q(]\n+M4Qnt "8љ!/b7+Xoc+$)q"#$4jOH[,1ьW96'Xa_a{G>x*>G{0>:5oNG+u -d_8>|(Ybn'zBKG ƛ! K5X;DzvDDY,F=P7ʨ?pߨ.{#^=5=yMDbkqj/#w) }XfZD#Iڜ b59ZBR[-S+tŔuOK9TG=*p c:ҒDI"5QA=E Z"}c[l+]CP%r0"qT!X7S/€$;>^O1@J*J{y>w Щؠ_#Ni.yuϝ0n6g FIsgpvۺ{)2#{AιO!& Yh',vd 58gOQxo۽F[v9xx*чlC.s/Z T=ŢNPF@2/o(άQT[C6}isH;:t.dSҎnt $1#; 3.p\ iTx8;Ԥ5*b$:ЂM_Hḵe+ |hR"z9ϡm `MX!0ΠBlb U"y+EAѓ``02,i(R͡i:ϒJa\\/L~UXm>ZbhV)|(԰ n5 Ԏ3uqM'XːMc{&C^ۍtjlVI4^J,0ccl ،$ո̷?C1s6^ t6EaZ#ւ&z[DYrb':v*oou]dA^S*jw p|cU&BtiE D@݌&~B J#G-wd^"y5#%A[ZR|QP>J{. QjjZ D7'þn;@) jv 9HdY'6ʹEdȬ܂jkY.uo %SR?-V+6܀(a2#8G˅z%yOfwe'Ӯ'upCʨ[2؈2,UCsԱf_ ;u@X=@F{,PB!n?=i:7Õ\W^q4[rrQu]aѸ"Z\j( (Ϙ0a_-#>_<}Q)- UpPդ $2O5S䊮)7WYY=B9,7\i騶ztcBar`6[aۣ %&چpG>!l3f0`WZ Xꟴ:Ζ'>(ywŒhԼIL\{ݲP,vQzl-:*M a8s гkdz~^f\K/Ҵ21qZ$B}ȂB!p]zSj|EෂM0LE z|츔<)S:,Bgyw#Q@bj%0ނ%Q9&YzF',LQW\RzqӡEAZ OuD{QGb])IA9cs"D,YC^jJdA(-+\W5cOrpa˜c1z3(p{% K:*.`;"`ysڒ41yZTV.q)c..+kӸ[S*=72D.܅r}\$۸J ֫1'zLxV$BDp.2M<t.U^C<`4"k^*v{([n.b"yl/^P+m1a%QE%05%?dZXs Qm$la ae׺PBGwJ:{&o]#{xͬEpPR___GlFݘjlF]/ojTU-7,&Ό<[o[-:ixӐLFm]q8*qIae0 lU-a[f{ 0>j_4}Oڗ P~ s`&AQE$S⧃eaDPHf>m/;5mOHkLDP r<]: v\UaypyF+y5 qk{!9'L>7V/bY%Nos0nKPC4 +k)Rz=LRW\cde؍%r(ȳ]%&=9ʀw36pIsQ <=(ҁ 3X4nW.۔F8WV7i+aP{)$rLᚵL`=$wme#q+ ϭ3hU9̀>%|G0$74S'֥܂;|dU FE>zæ真%.ߞ7ה0`FKPDjXc·y/ħD?(Q1+ګ%4}n!e ^Q@C?U}f8/l1w:ݝ`_9Z3iH{cj;҉;M +{.c҇_jKIkC.}GBFlX`@x[Onmߝho8$@v+b)vpg`syyw üF-M]jb3$nY\fQdZOX̦(U0Һr5D4X <[EM`iyL Ii[4C|-=,<&$tr?Z}#+ڪD,&)*\Ri,&EPB b*=q?z{PWidwxLjdZ7|"U5D>Ik,qM;Koq?GE%:?$t6 gBT>T YS#եD46ڈOX}mǢ'nn{2+hBlM鰙l +B4c#%,ffy.zF 1N$z{4Ƭcf,>Z)暌Àq#IZIW"d=fX'Ԇmy{(Os5u窐hKO),8tB#(yـ5ʓZ(Je&dRg(uQb4p.(^$12P(fmCڅBկXNQҖbW<(C<2DAV&)oi"n_b]I7zxy2K yO`H iU,7R q7ۛɚ|@l2,ݒT"[k 7i4Y"t>:!S${N)yacaa($)ʼԷM-sH0ͱOW gl '2 mxN&FZ-8'>z6&1CFITMYD bc !)YAd a)L_%a6.qNyDw!o|,!詚HYl'A/?+Lεg(hWźoG!T𞮫f \&\Te0ԧ b.<[ O]TVޢOc ZSD9gٶc(RΓ(719 .@>9v?'a51Dd6 ([$<tXLv\*+ lۊ,$YF!a]CULr)pby"6?hUb'WtDiמ'c/$&;z,H=i~RRHJziFUEIqm-GPaV;ou&]=m{޵ER{a  =MO$kZ~<}s>&+i0jv&%F.=Dńo1=͊ < ch1`j41[pvGUof.my?>r57{!6Fphzo+4Xo‰ gN$sqФCkuF'EEC(a7Hqޟ[ʬB#2k!-=aKm=dzuE!Wp1?m%v4vSF>Gh^(8k mw3=jy mܟDAPp߲Ϩ1~u*#s@'1?-JЊN)5*S!1Xɕ>4ءYJZ;ZfttCQ^j pΡCIqi󨢑q͏Ue0vʧC DXq6•2E+t_XA5I>FQѾ6QZ๊gbucGX6gFnY[.`=i, W*Ys=Xh`CT>k#7-O SsaR溁]HAře*:mi*sT,Vc-B{FHE^i\9taȹjL<Ȏ`Ԅ@cLbpNfc4ice$1s 8UVJaQ1%}N!!ü}&9YQ#45 oY=<Ҳ"!‰U/3Dǵ>lO;>u(WK:慃b"bz qk[0bR BORS_/&1oqD"Vٹz&,<]HVa v1`G:#6:֝OQb}pKO!/E&ŷO%򟐿vEPkk+cO[4إM.i.Mqtjb5BW"OA5^a(!kQ O a%fA0b=,!XӔKQGV o]{@),i<“Û? W1,pCXs'[q^brWB+nxf%: K5$}bWx'hԷ̙VJ 3\Zh%QE jYnAm3B!) Hv0QE X&yU HxiNZX0bsD7WLӝv12tZe9|X`Zvʝ |mE:}C]B^]eTwntzhlW]:@/,z834JbfUn5D8Ӵ/{HZDjȝhO,πpF(yO ,"Ay[7;p3=s)g#lHQnfcfqBߨ+f&6@zfyp&9ۍX}$^LcGOD۷ Ŕ*ݫڞ9.BsT@&6\Pbe]̵>+ŝ` #:)_Ȥx. 5;?_lgM\bA^6}H}lU>lFS -IDCMknVŶe\E;M(GE&]"Z˽tqW)0` d$8l#FlfyS .a+nb8Ͻɦת˾>Km'qh,Q]qM|C>EsE^,Ɩ7FZ7)̪!z Aw:Qys .=:A|3G-f|f^5<<4 |4߬&G$%rjQINz1>2$fmyl)}+aF~:IZU{P҉/s=>~_d@yAB 4,9Bx ?DtJ&4Q9#hך+} g/LͮV_rn HQ/y'y\hz<@2`V;5>_`%+l9 :m%eJ1N_ha}H[WT*dawEqyɍ:{1ș2XաDuڒSs^Lz3ň,dM8d[B+ETfhJ`v5(WM>%%oNJm/Y=ԟz#)"A7,kQO~ҧg8fY u{p8;!sY" MU-Ҍ0  Ɍf`hC TAж]\G)|CG2 $F+ӗ}Sӯf\bX1N_Q>~1=띺i1Z5Zb('WdlrL*Y8 -v¾` O߽7! [8".1:/yAUco}e5Ul\R<" :tw&éJju {Ӆ7JnQLBWꋑy<͟7( BYv6 -%Fia]1+(>𱠴-_43v6Fq1a#i}%oMs'q~6TϤЊ5pS!^#()ͧd' p߯M9<wDDayvy[IqD Kcy#gf4e>؞2o +ڮ|+Z*^Fˊ_ZB6 F Q}YdX2]*tW -%^[>gK|p8?&n.3 8 (\o]I  ҽ䝀@wۯd-7^EeM1>9';j$mTCZNB1ǥ*?omQ,!i-%`57 /IYꧭk:9_?)B!ɵ'`بL(._7# Iit}`qh6QFK+v.*E1 2md,?Kpʿgh Q!B1yyOUwieC5rX]zLp/m"-nzkB>\4&,娼ihWd&?-6dy+^?a]4s 2t'ߕ:k}2"lR4L=lc$e?Ì[A#d*?`O>NRz~@lw~s{uW2 >/ZutN6gp96G.A@?Հ5DtiJ)&G=8^PU!$כ$eQBrN Co9dHM^yΤ?dT֐=Z pߜ ;o-1 "27d6-"<8=99 %uZCոLVfllPP򘺖1GL>G\qq淕mȱ$`zPd?^9\hX0nkoEj~S 6"Rz^kϼfrj5evtQ1 Moѳ=ćY_>bZyV!nuĆbHK?= |lk*R;'0DвΏKP}Oo8S0ZHL4P{.6x_ :/ k-9EIEG/,;k>,#|5cO9vyqJ`p} #}/ cT# :H34Q>w箵VXev\]H!3\)g)+cܶtK_?u$n%FaYwW=GU~Q4IMǫC&j)at܉E!{9]oUyL0o |lHB!B+ΞP}%ޟ^jKԍ>dά9O$C;-\S רpYH𡼝/mEUn@熑<37]zA&\3hs@ؗfojz_E9X 4Ob9[i8eCsclلY̙tXha%iLJ{< Ya.l ; mw6ǽ[,oPL"l_aĈ#B!_JFcB"uTX2hn"8ShkKSdbns>y2B_Jyg2Hun+{e )rtYb)fVz,gt}8fgV& _i)`np }|Q71aXyv(+s_jrsyl*ëo0-lH'. wQ`1/Q"<~`K "dV;O闣1d'673p|:Q??`}׌ {!dJ \EHrn!ٰ.paJD<|.O##II`oiC[„Qk,Ni'p|WྀJ}Z?&t~5حJ9GXxIk;v$*ޟFQ,ʪMtƧ7)u&cF`;7{m1 ;1&R>T߀`7~|k5 ;p})ηSyl(SMrΠ^}~TEd )lrކP{9٤?sn=I!whB#рoVU@poL>fI6Iw0WWj,#\(q+Rpp̼** /ݘ~ؐ"QMǛy1K!eD"Ӹ $c8WU~tv2TCmʼ H$RgxtZX)T \ W!uRvmmP UaKaJk"ԡ'{%Mؘ*Οw3XHL})uRƝ'j!0+j9z\R-ٖ rZ}S%>NxBMRy]<c[1OAgM fuy}Vx bQ!3tb VpƷp!м;Z;(ADta3PIQ;M!6'E 6w9hn_\Jki'νe4, SLR嚒EFU74S:۹= ]/KZʖ89A7UmïJdKH1B8ߒvdȪE)ұsja$4Mqf Gy񞲢!;a!mːSYW`?a 6te|;\ w٢%i.cT;+ TkY)yQmy?R6( va20WoW5G@h?#{0{-,&G\|- &93A1=Su#Ϋf5;繥쏾FF#!mD=gdtVițahA$wcDSD!,>!Bp'%W哧G7L a+7`3&'sW{ ҰdyS9d*1i_o<2ZQ}@eզ"4 ohu^t$6Ev^`@b!\G!xt<E9< cB芏/8d&軗\CV^?H# {^d>STTbq:(#VAPBћdv8א TYkf. 3 >Da|h?"mU3"B_'DSb;zDcg(I3Y6Ͼrh} mk7}Jʇ$x w_2/#Nķ.2r|WMHA+Wi}eb"{OjnR>smz&z%e :ϒ \X%zA埒~ 4A=iaNq7tN<78j 3qY7+~q+\Vbk4*SxJ\f;2hb!{Y5߇Y޽Okg+n+9kw$@Ч5Og gA {AܧA$HSmF‰9G;i;qqAT0jSB~> ) G1K4>6=z$"ףG"4*Ji$1f9h,]@!tYH#"*[n) [R` $b\3Q9^%L'utVDԁ:+is2zȸN };|߀3Y2.p ARܒu}ts!&T2I*Fy[NKN}Ke6] .VܻjX)99aT "8tK'|c?_r16ѶdSW6oI5dG4^bMOҽf sGF߿ }UnJS6R\Rz˥n¡FS*[S4=nUuDv–a*3,v;SȮz'kn|4Ǔ%؋@$KRi͹ޯ>SoOw+C!^4ܽu2T#WR?#G-B&sA|3ھ[W$&Ƃr|yiy YJJ5 l8 ˹1? h7C|h]nǥSM(zD+EdaD5v1R(Wup2>)֔"K{+/Ab# z"0nƁc)AIpit-T5^oHJ6-A%b) B 43U%ȱM^_}.ӚE#v簷\uÒ0aV$q9z@zOqל,9PWjt8{\vT} PEy>B[]SMa@ }S3&dwtC$o.' ]>qO>(zm\C9#l@:ֱ8?S+Q@~Qw4>-#R܈LDjH̓T$&m}yF9PKSpv@RGU1`7ۚ\;/1x3ܜFʚk<єjGO.tWFfT:CXLùѱ~RxO-KM*z|9KJORXVd? *ۀsޣϫ!K'P8G.z{y?.IN. d^+[ƼçO&߂)rű?@Ai?sÂTĂ.Hy/X]l]4p_>:Јz\%t=طKLjF$9L=`w.YlN;' Z.9\ꠦ^>QS8>-Kx=|l /STۼ|;x)`삳S'?sQ5a#ؚo^&JiV琗ι?' JL%*<+Vm))܀L4S,p*p 4YijHZI5yU}_{  uJ*c~=Ƨ+/]) aK}FQ,sSV$jpN HU2h }M$$K+RB0iEo;J3 +l[{ ̦D$FStAu(dRK2*ԏ* 砱;RήsVH+ GJp6x2^jS} `'79MB8;tXPI4%ۻ|e4^ФNG P#o;"V+ *2 }sRACNY]e_5 mټ׻We;`Vu&'go 똍|+h\8g~~`I81 ?>$ f(ZeΖ'6#ֈuETuDyt(gYÄU3-г.Q¹ Dd1W‡LS%W ܻC9-TU;s} Ƨ8L7,OܵTkB`[vfdx~,2`"ẌԩB¨e6FԢ_u>є^H ҵ_I\.wToJ:9@2_SQ4v4eli'BI2*fLʼ;b2Gw1w9tNr݈k1>c3F ֛u~)sYCqT[A Ν<tx6ze+2ȵOq_@ABf A#|Il;<_L8-Q^4h&-Bq'O8O'wc;#Zq΋fށ88e(KP{#Ҧ̽(cWwslg}ZbMXڼ&m[1Ƕ)m'0%7p'l ᅪ7X7BU?+γE Dn+C(o9 3^M˶-XT8X$jq\(—< S 'VZMyeM=4? ҉pCT_]R_wR]&쳍Q=gcV6ǭ _l|˨1"HFOr]ZMElz{Z,m{U'VS%q ,X=Ps;6Z\Ż~Nd @ÖcOtEZ{[߲iw>:f] ײaV)WXo9hҰ<_J:ӽQ#D96pU}pv#zk#"]mܚ<^uqj )U[ǃ\YO\{r~؃7(7O56j|F&Vjj_iO(;>},~n/2I x#PMIxᗹ!IH|m1/r"Lo}4I[9Mf&֮c1qLEλjl6BO.\QVyC쮥[Aa㴃╁F _gER/+| {$wb\9ޜEjC]-xq91)"|>2?/a-_|X( Bҭ\Rެ y=X`v=L`[QϫYsh7>{Eh2iBDKy BC$,;[VA#_x1m,ū&0@d$NG&=>եaj E6tUf n^HSd!菁]}5Vn)UB (EY$9e$w t=nkG㌓bL]LXPˢMz5 {qA%>'ah̄%+47m|z c7ح+kg_%ng)WS gJ&#y30Iherٟ ݞcS%żʕ"]m8jCuX\ϼ{s|,"k<2D &{#q_%FJ%`M6?;)$)XyXjч@iEp"N'߼6@OhKG"jfIѥn~%'?M+CU : N+gś}:}ҹKCӺtBcKo Y<Ѵ<꼖dEG{JJ!BV;-oT~ 3RgRx.70 >*:!9 Wz Ks6/z=cRJ&*j<ШsTCs7q7B`7Eͭwwuj8CHap3Gk"cy)8Cl~0΃م9>g=w/ sku=)hggfW"|I3E#p*d\Py̋B;Oby!,(!!/X/NjoGLz.gy'i2ȉ%ي,X&,z ,_X^%`qXZ)C:GzFMd g"ҋρt'&KbU̱d.ʠ nGyFٯ1\BXbTA۞ wŭQ_?}nEbw#upo{17 ru.w[ =ocÀM~"Ra^e е-cEZ1Я^1IYe LTY2=j8=ǜ6f ~. z}_ކ$m6 (5;|Z Zzk[(. ]kO`<3H?wR=ߩ ?Ut<1%ϒW !4'EJ0P8?첽b=~Ϭ));+~~y:RFuz!Eͼ뜖KsG A鵝>J>\4o/`62"x2mĥe^4㍞ׯ̞US3W_$H,Gk[vE3y* oD"Z>Z4E>ԹFgdEKҚj/{nٗWG÷a=̾(lyzȺ”xB^ WS^jxYjLB8_&O3" gaY>#U<;'N mq);XB3Ckn:aoK:Sdۈ<7 vς/SKZ!\cwzN vS!|kƨ⌘nt=YVӜlpߜ gwm+ Ɨ4zV4:zf5nȅNU;b<&zބ% }RY{YAa--J;)إ˒eBƞ- ?mzYB}Y ?c7ׇؐJ%%u2?kl""Nq$j@S|z2Ь;&E&)l_΃=09y?QoN~_{=3Yf3}a c'el)[/N!%Ta0CQ1|\KwFۇ}ZFY7b-t"32+z%&ӇJ0Ǭ\ȡLWL:H{c䃄kF,Sp9vB]Yu,\2O1azej}ϓ[k!֚?+lsQ4o_j!sƯ\pvFR}t9yѪ#ɔn>lRz:fLa*TUDChH_C"S5H8]%`g47íyA6U~3;lKA@|V>=O%wcAW4sL.hW-1ě^ƕmy}H4m3Sכf54;1~-CHy."|^2['XTFb8j.SH+!Ioe?)Mg "11f=g527m/pv?+󻏪tYyDRrTSQ>f8k .I-xaS! "i wNBoRpFTW7h>|DOx~$ѹ6$)r>&/깪&ev)qM|Vo4",ʳ~T$s϶ƯHՒ$,/3nHCjFO ?\Nް_c>|"N:A sI/oY 7zI~uSܳHTW֘Ȁ.\#&<)9mB#rh @G,yW>MZJ52ǗDQ bCG z1IHѫ'Lꨟ^;b`Z>&9˕!VfJdH|[FӂRqITBWXdC f\`BKcuLJvE ExpcG+Onw{[4rla g[EAOn;+yDś``.r`|+'{4\Ir+l$a5P Y95lJ/~S\dq[(L trloqpk^1ΟО>QPuC^M-+ j`M{q,捍uN|@7m%^ŐM<۳BEa5:\çq|u=~Jjeڻ$QHXVY*M䉮?" gULIU @&^!o@%KÀdFD@6ɹ@uWTt֫ޔDJ8U?Wf/ ִ//`6S9>\IwIA|MĢ= 3k1j$=uylURoHWB$`Tr58+qIu:{[Y4֍i(EJKY\L8/0Nb'q*24BNR@iK@ʶH@e['v"z~agpÙmit1l18WS aƔ^\*OqɷYS5G&k,PYŠrqv-\" AcBЁcYH/֛Ri'б^4cR&9=(iv^wȇ{;ɀzʧ7NnРYkV^ZHpF7HqGO5Kjz;`[-L̲x-])K2m&mT$D=u+IӧƷ8U6FFpu+Yy7oҮϯ SAWyODKHgd.eEtCl kaor 29x'j\ Buf,i2LT=SU>p@)d 8'~e􃧬$FH¢ȗ~mVmv7[qyބRdxmdž"0qCe`nkI|kqj_MN4/Su/!0ԅ eǦ3M!T7:ub5 HnOec.]ca,Q՞{ejkl&rb^x޵ޅD>A'6ՠ/WVQA%s>̴j?xS| Z晊XE؀ⶳ+ /(m1T\o'Ee`J53E#؛|zy3Cnk::˕cc(8ICd|LSIp1ɀ]=p>"`,@57(}p*cI چXpcɮb]Ϙʓt1ϯ̇|1_&`PaTfJ 1JQmm_SN2kVQU"ftÖ4}ЈeV[K*%,KVPzYʝ َ̗ LI ?enh%Sش NIzvc $ ?@HՖ^HIBO{| Wvݎ/vA{Ik89ȠMXC;/nY(9d/!{#eG}5ekfݮShh4U3Ih[\c2?,Sdꯑj)Y,n ?&prxK_ќc]>F,Z\b=;sr^X>y`Tbg,`l?ph渊HӅ1^Istd ?J%>ƷހR973kBVK!k)T1~eHZ/621ޟޯb[5'r$S =t:q)"x'Z{D'N1E:X#t lOn/ڷף\;%~{&Oh[g>R!jlnm,ZT ,gN)c>,4?IC E>U28 zHٶ KugK053;{*ߢ*:4sBcw\@?Ԏ[q&ize1Yr\^Yoxk&2~*y̋hXO&]θ(M4Nl6D/ n%YhҜ*\aAi$f>9ew >Sdʚ]>Oq0l]['Z*Qm[%38Sb0&ik& bAΫ8,&qћ|ƯVTkO:5d7^50i^meWxbfwh rtſf+gE4Ǜɦ 6.Aj{nctdsutbe \mF&BIUSS+S@;gW>Ҏ5~"(mnO}9Eb6$ fʜ/O3{lʴ+6Bh߆>Ώs.56־bsE1&W-q%z7760zw4 qĬ^=BhStU%)T{YInHF+|CZX:VK=4:l,ٌ󈶍QL[GzbTcs?>٢|S`Ln$Tiů`V4s_ѓ oRm7z|g~7^Vr0w7k\u!W{\(O%PA)ojIx!%t-*Cq2vxLOt̑~躊gl' PT4իo1mhc*OfEZ!'QCk8VT7L5ӎp FWf c=NnU?֗` >^]H2  A2Y}Qm ?JXGۉ)pX )2[Nm Mb718چpܭ_аQAeS٧tI(?2ⱋ헼f`}E>b*;^[;$-☜ېA&>aPP1ܧQ6SG*i?EjSӮClG_~A.|8@&J_Ez%WKz~Aj5_ZՈS= dŠUrj , O e* \qÚ}`&Ͻl,ZRAW t3:"X" B괺ޯ"Bqh$-7%fGeD;psQ 0R@nO)B8q1`CU4΢ޘmVoJv=g PL##+<9v4Jl Oj $c-㪺ʻf ?P<"?` u57n>>lCᖑB:8 2+K˥X4-7/yƪN鼥eb;bwB=ݭbh;.-ʩ*K|J?;)8?k8hOnGmðlDhF3$)k]oØh]0_QoҢJS+,$Hi!-P(5žCpKs~໓AQ/8ƫ jV#)xVah9#ːސN,}9ZI!}ilق02$Eo>_[ؕkӾ1F󁧺a,P7ɑ;E<ѥfa,=cc`X#MV|3y[,hnE/GVk -hC9"/[4wWCyמEѠF~M&IV}V4G3,1%v'(ƾ#ᙧ"kB '6(blr®)K[%B+^3WF+طwiͶ>DCK(IPf/ f@FS.t 6SOvv !%ـL@^C8nKWwӷ&? ,3XT,'l"йm'# J<' t-S+Kƽ(I5c \" 0S.?A9mZdW~VX =t|K.Cpk)6y[!y4IZ M~k=ET-!j]8hC㈯CBx!yǍt;Gt"BPwrZOUc9)޽lpHԟ>F+3We$ͤU>[zP 0ED)j 窥7\!cEN %kl+3 Tg _дlZ>h()8"b.8?.#2]3NfiFG"<>؇wgJ@C !{9>>)zg)5BFR"\-E:S1 =e3;nnG0kO.rnw;:ad0gRu-ik+krJxs...@>>#-;>qE;Nfċ2>DFp`VφI DKb a@HvG8j*`=?ՍWf[N5ԃ`r_e_)/1PU"L`YY0}̢/".rhzlBaOed \uUU)JCʳ d]9ћA|c|jľ2UzXLC`XaW=7GS52Md~<,=@CcPf C/o3gK/Z"lG#i|IsmxJ[ v~4,M#ږGLC8q˖挂2MdÂV wJ:`3c]%0mAY5m :aA;,`ې.$XjڏbN-(Adڢ%)Y2 PW 2hb^ G&:o>–T e.mO6&,K;yWA6heNS!7ܣS<"[qE ̆dcIےX\k:p TLcVz[:Tz2 l`,l&//pتs!zK."!ZZ e}=X)=3-[9 te L{5 @)nFT9:dYG E^ە BX|BI>x|j΢)׷Қ=>8[f4i!,;oG`x/{WzK}ICו"C[1d#Zz1~meqR" wB@Et_iRਕlwƺlsUE~G f98v.$JRuۗf\4ΝN:P:o,'v1z|@jkF-@#K0/t6V;)ԧӲoa m;|%B#l#k\\=CrAYnPy{$bCP>vM8 a郸.wg⚴_!ZHHauQ%it-2 E.wXgi/TW|#!6&5Y.2@G͹R[lhҞ w͝JyVaUNͨZ F9ymP^nfAIܛ~f^-Ϋ4 kEO&3%W/ "z?<׫v7gwZL5vR_2WL{Liϯ9Bj(2=̔|1>v0 w_]R<6w}- ˊYKU*t//;{F)#q+5-°U 쌏TVdЌٯ Bte]ڃI_9 \; ~Ƚh ϻ{ѝgwLEM;̸!#`ۢ[MdGvD   DM2@"7y R`WolqW;#^~ߔ:=Lfu=&YRhEy7t1ibBznYZ{!mh\ryԀ,_dɷ|C]"Fi!$,@1YGYڕ.w;35:. YY󭮏)mmIF@M]Y%i/=O1a,c#dW\@ykgS14s` GvMZ:k)ᥚYÂ#kJ ;FSY/Ҩ]C2VQ²U{,w\GO^6@?I2r4m6 h'& !ȯbì$/\| Vd͂o~t Ӈ%۞945919ę gb)]oK_$Ia4&Z1v#[( ܶsxqTWFlT> #!h&%AR_KnN! w}G8]ֿ{tZ|TQhN(W,_;K2 62=w.a?'6lyة?g&H'%1KW)\Fn/}ț/)tfo 8}f'Z;g.EʴKªDkI|BS1կVD˽)b6e/\HvˆϪ- 4X/)I$+XوdOi-~N0,\+ڐz&,V^Șq)w* ! H'iϻc,걂nЃL\9ixbjkt$ʥˆfaޕooqfUXx $nNJT(6ro?pk h˜Ey}^=v ,R҃Z D>)C\anɵIݚ!M|z*TSPfS0FiSa3'i1_MN!~gJu)nVHߺ-Cgɖ ^BWwu.m DhX겚0TTS)tرA|PlB S}}G~j5Lmޤ4蘊2rdMΟ<|F0WΦ|`Sh ]#rMeh[JXes+qnD%mi*k{B4@;G-%'*V ?n9t?ǩS4lէd {+o 4wU`9p f^ Ŋ[\:y?eV} T'\ZW4R%lpeWj 9"fc$12kK'-!3KfߛdA9ټsy,y B+GOE;>@նdz \bE>&Y;o*u$W|Xb2G lњ="KFz,*ӍgG1ߙ,p] AիND O#'U-}"y5.fdg(ٞAd|Iy Y+#'Q0Ta۟wCJS62gQ2y#jsRjdE[OBm ^q9~ԈPcdr((㢟Z`0XjѧyLĨYj>L-H,9=+E}?~ bulY+҉=C‹%CͫVZpEj/\f7["pIz.#~eKZ y Q]E:Ys 0繴cWjx~m<1il)<},a<= NWBJ#&Hy$*zG,C^C8DŽ.XW} !efR"?kmkOՁ2u)buh&qUnԛg3c0(XqڸܴcO#{DO—'|<nQZ Q.{hC*m?R?>ӆ-DOMh~_IǸk"mVÃaZ];̙רIΆ}oCTeC"|؈T7#B4WSFa6I9eF)MY 4 3^M1w -u=/9f %(O?SYAn%ŷw8+b1LaRjг&b .X>BN~{8 GF՝=m3K<[qGڧ, Dg?{zVmbkftV&T(3OE] ۷K Ǣ`Q^OR8\؎`c'(I;kRc7ڦXFV5'A ~8 !2 ңoPmwmc_`, o^1dvŎ,a]mʪU@¼%=Yn()e8v#\dqh0R̈S,?izUch)x{x^g3S⏃pYV[@.}tsMSay'Zlux~+O|s IQ? T`4ʊ,n57ȊQ,Ce!_D#t[0qO۝QSqJ͔x]S_"9JsM9،>2ezcV s]C]}Ɛ>fʋStma y+!08dAB erXmtvxx"춺B>kH@;9m/LޑESN\My$-Im߱0nqG \{ݍH:KBV9j/g_J1§)ga0Bw5l od(+&cl2$5oG=ؐBee%/'â|e@Ta5~n3 g3 w6F+JK1i23n{0xm[Yj fY#q[cSj@4U**x=)ꔴ8B_yqPUvуM^iڹs\Zʮؤ`QP_l+>}QT*He[a ù5_P+-7IbT0ܽpi j" KN7N)rY!]GQ 9c~IV4>IpG;- ē%l&?=ZE?ض1 h%L󜞺;uMyƾ%eY&Þ?6䘭E rr4Մͱ%`X;kۘ_< %S(WQ%L\]MEʫ!8\1U_c觢՗odIUƓ8^Jۜb^*OvS$\Y-|}踶ojl.~j4moQ{ zi]bt:Fv,+Dfzv=mGFCto{_!O,%=:a]wSPR[)#'5$%W|%OE_CCnvX0i >Eo?2S}P_&"*lYQsTy<̳U%6 Vn&t͈fJ4.%8ܖλP= K.)>Q?iL'[#Ufm`;$Gȶ fk-iJ)JqxH,{37YD8;u>^bGu>B>u/#)i> 6͙@eEQƧobɆmȡC# ɕJ+dGu|Q:6z:v_"2u?ލn,1z7##;,3,:zO6"!}N-wc"<>Y`/ :}D}*|!ZPvVmFvchu/CP։6r\t4߆[?lłW3z:SZGzۼFuo|Te۞Df.;?o^ʡ_z~,IԑT> Ծ'*.wgad$pK@1ㇴ\0z iWKs۹W_|&m<|?C BIIxRv&YIi񖨖nʎ Ocl1mv$ %DxC Bd`b~ fE  }!wJ|>9 Jf>vI)ߍf23j]frįP2xG#T^s_}~;JNݾnFy%Fˣsa̶4R(Fmk]W^z9v!-rewu$M8Hoh%1(5`R{)3褐9-xe gI ?4$7_Pmsݗ;Ը ɄETty72$Wua MD^EihZu'm ՔiIV]xBp69 Ί&t{Z'tdfyqrvJzw^oEq/yBTs&kؓ-Um-KHGOg8$:ԴޥDkh,#^UB;q~!gro9B <x:VB(+xڲ \xF3x6WSe%vn7Es>Bll?i#7-^j!Z-U6#}(gp@PsXVHͩ9:>C``SO|zH$2S(좢}O):z[,YIE?God!9'-6Uk(KC5s|J|x!0-h-:#C kI%>"h9 fza7)chr6@ٿ.;ۙàBYKv(4r/ୟb{Ԉ6&R\K7+؇}OhDpaҝ$2TVEbc^cO>SF`8"%թv#9SΪ=)+īqXζ_&oA8<vS亣E@3VcEZ\%$`^56/Vp@C*F"f:pO_7J1*$moF)1:pkz*;e+Pń1k̥E:c{Ny fP/BETk/ [}4[u`aخO`KSs8(;ɪ1$#09Nѧ >EWF/wVZJ?N!_yrKh+f;(!ŝ.$>iyD@s1M^/egUPOCs6{x*i׳+%ixniXѴp{t<瘲^?%.&?{p1S/ɥӸ\! eCo"ԟm=c;acgIگ$蠤{`1ߟRRQ8jV`{B/T4(.e=p| s/RuiiUX*V*Xde=4N#]D$]fe~6w)hs)룪vKY`ǥfXB3r|dZZ'M]%#/G.Pd |x]آPXeT޵ b?|-a0I?h)=@B=w=&KL~Jξ>#{Q_Y)wgf.ih]9]{pϗ`_oޕ9w tc7w\MB}Ô)x_$F]/ތ5\߂GCWO- ^p+ Pdw iB(9xl jz4Ż$lgquJb. iX`*Lɦ"C̆Cmd KTZ3f]"ɨWB55-!`/g!@ mh"5L8 RමJdYk^iqp`F{06F9fFQ \NF ,sI\W+8/@8齪Өq`/oiGwY,7e8ޯ\nQEHܗ- V(Z58"U4НlԴoF/WeE5V-N)sNNq6%s͟Ü}JS2%c?]SC'*o;;>))? v9X-_Et;n`όƈR~f楟fk8T`г:)WtR @O8~ziZH;$u>JZN6KIBt;٢ER%yY$DFjh;r;bVҏĿorUCX̥ƉMj<̧"CƎmn NuLvbiBI`" +i7m@%*uK3p iݧ.>2-۳>3{͋~*NpXh)(2qX\=Sۏ5``X3FX}ţ<[sϮ3jTgV}[ϴ>v8h3ݹ0P(k[qx8Q `|n=❾7:;]@ϻ\G,b[K-_k+z)IS^-mNNe,=-x٨LxS1rAtwoϹ l"};0*fˡW>2%DRIf~"SwPFjoѦc(6٪X}G VZ3%zչ%k<=fQ Lɷn]Ьd;ݕ[O!D^)J{pK1fq~߷2G;ψԆL(e&l8yρ{787ծ I8ӹZ>Q#׃Ҡ)¹%,}.3xóZ|mc7"Ϋ}*w_X((/ն5gXGl 똸˝Pr֣&&byWT?BLQijc1l"6C G2WؕvZ/B k^4$:wo`ZO%Mn4QRn*4.4-:Нw#uik-Dm3C t6q 'Ľ 9G_Wfx?(p9lz CObGpqw9.y_AY;*Hy-e6Dd<+SА"}DM1|I3fs04B8M9xSH`t8jkB4>$)09gd1Z<}'+s@_]D`^ `bfT0F8mL|Ty|< QmU#'g Z"4tO.)Y U`2 8:4 Ue؂F1;%á0a*Td-LR$I2L^8Aq8<k`pn#}HqrjuK뷠T.dF؆`s!ٹVP PF"+E"4m[Qջ#}J$"mJ(ȡ ͼ? JPµ)U>nQr3(T $8U 'fіYm/Mq0{sz#P'%lEujywbUrlHKm6dLk.)V~V45ƻggd'|!<BAixS+>ɳ~E a9egHUJQF9wN6:),k:GƎSY5sOYDPרآbs9>Aԓ ]R"BhecLFl1'8׳j Eat,b% ҖF >%[r ABjR^Ͼ$Q%8.Q`4 5U>%"ba%b ӬJ"g0qDf%󞳯6yIJ輦""?Tooo ߼,0W̵ϋ jEQQr:M,";>Șޙehe0 mLh|Arhzy]u_ޭf^Rlu˝cep7o(f"[cY NP<oFcm`rڊ/Ęssj\[;lI?GG +6Ҵ#{M+`C'9ኡmg S҇`xŕ@E 8-isx^wCwZ D ~ta?*SB}`|a)\"NE9.%q ÊI69 ~%`y,QF]2筚bJ;fT뤆% ?W$hh;ۡkՕ*XxmP"m#99*΁y(U:58wN|GWAM9N+Dx]W:SYc!,"G03x%Gu !fP7e2زzЧAW9>5uAo}ϥ6%$ %5S~~Ci Lk8TswtYNo蘱|AFgh$z~Z>~7ǂ!oؚAzR ٚ$/H_ tSrC\3t^HAEǝ2=_3auὮs#\X;P—YZCsSqZYm}lipAbB%Eܓv?6&qbԗ1 N1vP5(??%G3$ҾGɛQ?f_Qӥumu/w&- ȹCb $ _)k CBџ. Jf:H_uX/˰ @soJÙKbaS/ՈI g9 ӕ;Rȇ-6c*;&<ʈ ܵW_ ~0| q8K(_MJ"L0yB[V塋4V$/R5ӎkNnUd0-( dSubV$,3HLuw!9}Yd6.ъKp Ʈ_UvCN/;?]_iTS(lT9l5 EXbҪ0˘% ,ycsJu,^Bi}P艔b+x66/C!7{ 'Nj{s8%Wqt%E4v <+03<}סAE97$1yV{ȎYvd(ਛ$ 238*SsXm’hm&1][2zZw1ͣŃ}:sm.E:SEOA|0K;/xf +tg%\a4W:mw=G!ꢥVڏWl=18>fQ)^ &>hO +9B̸^Csuk9wRsbe@} kvl?nOd5܆#) f-Qb\m6nd:M4~F^0#5 3:5$^4JĐ6ܱ= :8T%&?8d!1{ܭqU5[3c&MAG߯Tch9rΟhro]],;6E+iy; sb ?{!֞J+pddfg{LTKRM*-H&P"y8L/G~Jq"Us/ЍQꎢnmvP3'ihg]mHQH졘<#&%B's@(dB֯qm~nO>5՚UHGr9nToVgO4 UPciP)bSN fQk3:qi`^fe)SdyfxKH{a}w[r&RXp xrPN :E?_T'53dhQ"Ek#)h:L5qDBV#OouGp$,}W 1gt~ܻqگl0IS^}Pӧh+uJP<8=\)taT%>9ՖܹjxU=:JEhlA~vd džjl):nѹYq U56 VȲZQc܌Ez( ێ%#tUxh, |}0 Q9~MVb~ eZCzǯ|k>:HEeHίv:7]TYsޚ$0u, <} 網R|Ҽ~ w{m۲OD8z󐉦Y)^>%zXGl|%C؊!Cr&nIAĤ>'"} ;R򿊧oxֈrӍK \cIoLJG\b8;`#ߟ,$vlsEF}2YteĨwP7|9m!͘$6|^ƎLK*P'xeʬq;<'6$XM;G̵mTϵE-/=]`)f[$ .s3+R!;e[et,SfRô676ټJCHu5;?pr/7V-z QoŸ]y2T_1n4΃#īAFT- kz^]a9'+vM7  ep2ۏ`B mY4t-v/ p<7|F rÐq,LKmJ9= YQyF +̣ !7nʼ:+O%cԆc:~lV;TkCθFR{x)8|V!&O.OeٓS%uKp|)D%F@(B1W#Z%j3Uu<.7ݤtx!^J|n;p}K?WEK]NJ9MwVg`4M{aQ=BGV`Y~xzhLP>^QM]a1 `~1#hrS6cNm?d9.T%k` )3Zh @iJ\esr\J굅k%[[57l\ؾՌJv] Hu$BU]`<;,;2=8şbl9t(QR4>$u&Hܛ<\4ʕ&\+BG<'i}#[oPYGqY-K7tX4^|Qac .h[+-tZ3dZ7o>I7OT7ׯ.Lg$ 'JNBf-Cu !E̹bnL6OZ)adj +Wp\j K餐I޿nW@Qj 8K]w󛬆#a-]<0dtNi2oGJIl~[m@WZIYaQah65X26*[*.vZFo|n7P{?Juwr~_]_)bdOmwJHuP!d)4H3=E² x&/NLWU-e9` ht8^Sj2&:I* pY=.ViPӸ嘂y\ig?BAN.\|p|U`qoo3kGOX)8CVX8;ne%k AoDϱSy/V$%,՘$ Gm&[lK"'Vl2V<=}BsVu-OtJ{]1V*ʵjH֝TA7\}TI[dr{*ӓq-?/?W^xwT[wr0[Hc#Eg=,/ScHMX^rXw J.EBn8Uv aFvvSL3?2a%ڈ2qrIkMگhϛxL_SY!XFt*8WFm6Hy@֯<+\[vo1(+=pT[ŷ"ydK̖|dU/H-:~y-ut_ ^"<ؒSP&K)? }\vN&Οp4w9)g`?rdu?kL3.mh[e7{i.99"0a e\qXX1])Η:5@øϷF KNƣgyxxl@! N}.f]k` L1}.d+[dKL:Mt5œyֻ6lw?<E5nC]18MspR! :N&e t^/\5eևL%؎d[aP5V9 8)x Uvb#%>=t(l"h=r['|}[fh!MIl_HK %9Շ5hELL7Ų/hܢy6RoZYJsQkDLM,DhM$ ;-]4Mswm^%8z sgcS2$AY7hY`ȹz'aeաw; 9έf/W-!d7a +3J!E U}n+xRBaNϹl7)\3zJO*`$!Htzy85bY.(h6 M F4vn1ʴn^UrsmI9f=m>=-˹IUc>iuNw'Ai"Dڦ&r7.߿`^$.mbJt?mѲ̊ȍ}DM\4K)g̑,Qb>b-p6M6LuW]޾"qQ(fLj`<n8(ѓ"%mA썐o."UЉZ`OJsg<$8Ẕīb3X}>՞~Y=BHH麐oTU@O;ij;"p[[}٠A|KLK]GiVwzY&B nIF|[uTV:j&ñt >>Rجϳw-{F%^Y G6ib>u\wccDtbp颺Uy"d3ylz1`Z&Ol[MQ׈U٭vp&XhPoM8Vcӎ==|xx3Foh|LD6tABwcr{:V]䓌_V V]ɾbخ1&WXPM n͉^ 6'iDhwvgiNO3.Ùv&#<0ygx($2S~ؐ6\SbӍ5@m0H/DOu<뮮b@tƻ+q /.vZ⬭JDjiBɸp+nv-ٸ4S]UlBB~[mZ8]7$=LV^ŵOPyDVԿ:uQ'EP-Eb~ &)Uc$gUf^[V%a 6) a٥lкJқC_4ttUsmMM~s 1p'أY"p]E`I bQP"S,gɥΡFFM~ ]`4}GDr;_A16V#ӺQ'qQ%`Ȭ/'MLͭjfv딐eufh]N" NcL&Mt1OSMPkc,N(6\mp'\Q8c{UInMQQ뵐ݒlgӍ33 $ڦ%ٸfg ׂ \!ZG^Y 1K ׹I=A&P>%1sѫѸZd͎4*$6k@Ms<+tXmlq7ꦪJ><$,&$F*tHSpczH7M(~$}"}$P!c6@'3;j.n%cUmS ^u~a{+z,u0YZoۤn&10RxBxr C*$C+'cG'>}kA 9Yo9 J6 E?;]p)bs|94DR2>%ۀSдo҈"U9#w.w6roH ob=""juK(z˷f;BN^k:elȆŖ ˙zuLTԖuGO00 Mz1ʋfwcjVOM=pˁ'/8j ,[mt˅8*K}>MJq%?[+&Sk?[+$RӺıIAC"^%DriH˵_ݗP6WyAڸ?!_(xK`;,³ yfԿͅd )*%Fa^X=ZfչK@ZQ][PMzAz}"ӯu!3H}*89h}JZԪWҝ =*ͶxjBtx`eVWKl;+U]ТD!\y1pFDgAd9߃xU%`GlWNmmjj4R.-s&~!2hJHNi%q ߱IDiK;R'@ȷKWivp8\4 *4xQ+z8A8ekZ%>lu4T>]e*EZC&Ί2O >ۡ Չ`.Abz Li $gF<|6CM>6=6p`Iwužjs7pT8ʸcR7xm ~|z6P; #o,nEj$lbu|Tc7y\ni +uCme`\kg׵ʔZgXCt0 zLEX 8$$IۥTߑק;\D8IbUqU_imC?k9z&֛> WAWOGaJ5$Gy⒩Sp/֧O'PK)dFP0҃E#3z$QNɱ➢-*| qpUgćU1[qeDO;}/eA&oN\\qs7~!-TY.3nAk7~t&du7̮'5q (6ӑyC1k;{whZȖ q 5ӫn.A%Jb3j.ӂN.陚-n7t^w7ضrj ] DAٯS cΟP9_gF9"d=Xmƒq:#C jG8 RskהzRПMNS}J0z˚/>ϗQ ,fV,#'rf{&5b-(7Kb 7 "Ǽb \/wΔ " 3"Ɔ^m>\Wjj2gT[U3 t~tqǩ6? O>"EH 3K=m܄CP/$T&y]f+)P5ea5p: `1v&@tTC[^%*U^_\!VCֽe d h m@:8ň*-uH|؞ZrjRs^+uv[l%wevӮ >W)3s0 wávgR Iz ?8cM3sTX]ʀg|m{5?Q+ڌwRiUS!c)鄼 3ޤ%^<@h,mvOj*E"=cV0O.>&褞,gvAo C:ӳ䁉V{Eq$?Շ\ iI]G#\?޻|tAY*dALPoЧ|SHV6H;hJ!kF9 :Oq˶!9fԷLL[ȚI)&W!(^1FgC iDrvߗ趯ؤ/;s=q˴mֹ$_d>DKO抐;Ti1߆EĀ I7+byA@ݑ1!g.^bC2ɭlw": )1@OTy)ФHm}<ԂO$( lp4݋Oj{Z؋vx;F3r+vAZԗ,d(|y8s1<2 o<~X1!xb)g Q= ;Of,U/?)}G ?G,?ZxA$4bUPT~6ᐼRR"sy[%Ƚ5;p&ZA5%,@K=֥,~ dZYϺ`ek5yJ,崙7ysbosȟ=.%e#G G'8(Z`GfEh%*?&fq#jQߊoCT}oJl*A}Ǹ3c C18@X}G%8!x7fиϦѰx/>Sp-o?vOp\]"<>Ylޞ-A9m>d?cu n1c>v$sP%o2?r엮q>bJF h5[@bsQmAM3+Z4(Uuaٓ{)*j)<ת3\7zةg75sL&U"7ǟb3x kSw} HFFI^er(% x3Aun7[wC=Xq<z~`H>f l˙3l0JTΔ!?hC*k;=;߫&Bkza/5 O32R-ݟiO4M+M0V}´qY~e@*W3?Qo¾Cn"![J77QO2}tAJNwXAM9tbH>oJ"4}e[gVZK~M&Jᜭ]t㰝Jn[qh͢}Nu>bK^99>Vs54hQ}j4cPCU\ND(;q <ۛgx ܼ{|(Zw@~49y,vo91 /#-֑㔆i]zJjMQo1>a!GRJx,YZ"gMIaT8 o[R a, i^i;J*36݋rs0lǤDcTeXF|ivms\@0GP`+f,*=P;)4gU1`{mN_FrG%۫PKٍp, EA>965W HamMF\G@) I‘^y+??~UMTV[:|f͓퇶jt_% ŢHQ,#IN?CRJyEv̙ӓWHŹ+MXT&W&~VQ]Cz>ÿ$)<6: rٱz{Ki$_&k@AGIBm(׆3ƙFP̠"& σFHPG<1:QXӲ_ҝ9,nDڴ7`Zt*KMcBwfTkpuXfn |EQ>a>1b!y~Χ0  N#4'R"e8rA(61dxTk1JK\#nLQj9@pmܶmPfҷ^;v{]!{o^:NG0_ oB.>[¿6٭aLQG_7aGώu n'"}sk'#k #ETqZg_֡7NWcDϟ&fPLx>w(2j~k0}I}bd`S3P\1x+ !9s cLy8tXm;Ud77Rٶ,v Sі/`p&TRd4D)[~,:CȠ<0u%ZuP"WRB"UC{E~m5 0R(90-|P,;IK|Iv+Py˴6zݿ.MJլ[MvoWQ;s?%u2W}FDAҷD'X׊` 1:3[tD=RX}7<2le;U0#ߦ[:D1Vo./(;ce@:~#XsCiM."erN8޹o E-s8}ՐA#H,ZnHo*Ur Dq3$obl{ Ĩt}"!4ALW7!?%}DmhRb; >d3_8'][WspvUBr3g$8ZLN*3ُ )^CKgZ1h4vhhoֆd^LWFd,:`B]՚F',RB>roʓ;l.=<(=.dFD'*$(c\rt:wSxl[ٶ/l*僁Eˆw3lw"'C=>l'ȼMnwH aO!s/9BNゖY?u`.:ef27hT5ͨ0n;/Of#E:2p+gM .n'?bȽW7-d({cۏ3*Ǩ+fwrϏB(feJ8ruRbZ*HDL NpiS8ʅaCz׾j6O&QcC32<|O(⭹>:'!Jnal)N_wHʳh֤߉\!@E8ŒI窶ۑ0`8TeDΆ %С"!G|̼4U{tx}1N~"a{Bl0vKQŜ:N`fMb\ ZfԴvXgT{*#r.(Xe%1"Qg i;QKE`!#=0f6{i8zP]]D]#h׷桇 h>=`.9?iL5h&S/s,'$8'x8Hx^YU>pFV)(1a3.nRjPHfL{ `>6\Tcѡ\R-iimRÃps 5kO3re[Xބt5r*{%&s-Ғ0ڿ25!KapWD^ny~D3%_g] Ӿ#㙕xE1栅i©o 1HX zMɓ%q*4v*N,q:1|妈ݺ?&gk%$(=;/>c;)i~C'' 6LF, B!X]pIyl- nV5ۖę7-%B갪 sd&~ˎ#u,+5,ZEQhQ&Lj۰oN[ֵ~ۺa0BzAec2GeW'M/ l>@%g3m̆^-,k,ʁCA!2UTVn'&,)Ӏ{ݶ_vnMY!:9lxmc.Ӟ;Bw˻sYl;CR6 p-܃1Gl YAmͧݟW%GG+NQՇd#͡>TEBt{1#4ښIhnU#H˃I@ !o-7p#5a5-D# dl$i P8@MH+*Uw3Wl[̷ujs3IuGJӛw=դ=eDI4B(r-Z~vJN={--ꦄx(%UڝiLpQW)C~4R O2|P@Һ3wҫa,0+n%&!ۓ2P Ԯoe>cdsu+j1;7S kC8[TĥA- EYO[咈 wf{d[4C%g̹xh\"@#H_=*4rruNA]uJkqz|bdIօFyQx7%{"ևkx,fӖ~T[: :b6ٞHD|l,KO+nk7iP;JjfdpC 8q 35b2.Mbps2(۔?!5\J1y'~k\ޒ_-Pf&mR-692g\>)0Ͷ 6Ơʈ6]ͪ -"-J(ZaZ)hZ]ȌFwX2hr*Vy# >J/ 5\琒w=–, EZe<2ijƴ.YPɯǤOfrjѽdZBk,+9#;:@gQK"%3i|ZO@K4KL̟N{NxMDy(rL\HPF9@ dA5Oe^E4oNQ#8M4񐗷\L(C8$>JF_9 >eT}A]4O~>.La1[ʰ4oI'T/5iUUsF9k.wkcţ-Q\l"fC{ kxziש`a]62m.Us8*( ytɵ"ݎp @4~6ԍdbEٍCފ8(Sar}%Swzq$u׏KT w24]O`5u_Nǂ5\g 3x͓Sp6Uw*Jk*:UiqSfpr ٙ}>(4ᲞН0`8=VH'c#}ϋ#Hb>' k !ֺ+eu˹Wew2(q})C8|vξ*2 BrRH-Z]f`zC9SmڕWc ?gV(CF< {̡C#Lec)JwdžRqO [410@L1ҷ'!mK7j֎nO YVhZ_Vd ]l-ZT0 m1SOBŚ*8- ^л>Qnx`/ tO|ֲU9?CA:r{JUoCѩkq=: |ou~[Vb=3wuf$p戤|~>c,/ߔ!iAiT|5"$2c qiHg8*Qɼd r-g ܥO Ӧ3؃Q%\i>O6fQf-`FGx#Zߔָ¦rR{Hjb׼kiM*n.fd$BnĸXOj:,aB2C<$u=,X1 |b6qE;xnܜ2ėabۜP6vJ}mt_PvUЍ45]Xu4fxy6(ͰIگڈ]j+cW߲SB`T6&ZCu"Ja\PQx /ֱ: .gUJT 5To{CfR4jC@xsN>\ /.TI͈&DI -\#8Ov޾@o+ cgEW)N:]}?s#)}R^ݩG&оX݃(G(nj#=EbDGo , l{̝l Y[vU2-"LX) ! b%f|×*Yex)Lce/掃b^:Y6 Gh"'ؚC̑hm M.͛>;a("sUDT}0Mxjw 2fTܺf>bfE 7V^N |WՋǛ_P;`6F vki6m~U?ފUJp嘡5'Z+,ұ6[wVeнckoz`GZb܂epc:es24U2Q%L;f\D]a9h#Kˁ4]:NN iT\G yf&sz#!gXq{8O: w>![ z([GB HXeblxzـ3k]-ѮUr+,)fr+#k47 >tcz 5_ ZċH Ϭ0St1\/ܤU%G>Liv^Z|%Iۈ$уĨH#+xuޒ~C)r+/Izayxv!a:S3mK"ffu\ u0=c@JA+Uo }zbr>C[ NO&Jr%*Ʃ|>; 4G4uW?zߺ8EДD\Pj#r}u3[Ahql/&JHg<$PKn8u>~UAQ;Z]fLoto+c`(=kK: pF=(ݒV i˚bě1 U̷@ >dnq )䰠Iy'i7=6L?8}$wulEfNۯp~'@j62Pڅ%] d#('anpv0te*DE~0@8o yxV&[z5C.VIk\;8USۣdž)t3"WgLfk=3<Ph])Sec /LmkVYj~MxSv.x[6f]gDb1tN$[ ̏,# _p 1?D!Gįwr^eHV$:Ӝ[ܐq16#E>Ue1_zv$$$n^X"kDB,U x%2fS{q a:b{TRH"5.^ǛiQnLS]U֋zf(E>[U^ O$tF@Yò \2d^`"ࡓ d:Ћ(\zYFHO{)hT' .=cvmUVPl ZG ƘgGZ GWY2L ׻hg/h9]Fxp6PgW2`r-(roQ LCp?!Ut`ͨģoc%h cYB*CGmF:[~s3CS,>iߗl:FP(f)D#,#Hm[Pzt3% ǡ^rX%>?P݇ th.)KzcJ|0Ã@*Zb\dYR'fbw8*V59P;8X^Rîf\a[h+e}v5 \?@E#9XR $nhg~JjBգ=As tL\hߟC:ԷK{@0tkzr#Ӊ%H?@}m_Qڮє%"#L`5MtDi'j6MLQA @ .*mg&X˷8TBb j%è; s9fFc֯y`V7Xo!װ7LH{9g˜z6$\ݏ!Ejo y˭!KjuJwzy]F;ϒ]@2ZdpvhL)G!fJ5 _g^^eԐL^}N"pf_oL咆?V:MkYu5TQ߫/" /9R QF{ ͛fCF=P&aφGu4CX 7x"$w]7vWevտY-RQh8#I.!mNk7";QǸAk7a˵ͣ;J"Dѣ^tb8k͵Y5O]!Ya|j}=@ku |B\@/]'6ю~_Ζ'|5h֞]g{".4(7iiz_ޏm9TGz0I{\?p IP3&)Uy`B+ު"%l3z} Ȩ8jy6Sq3#vF NP Joy\<-Rg/@՛\nf! am=cqԜ9$5"^fR y37Ϊ"x"uj Fspf4X[;GvY!c}UVx6hW%=BCr¢fY?|\z : ~p3{;t|!{?\j|Qɜ@3峙 ax#ѥEܝ\w`Zu")[N&: ! إ0!7Q  $';x럇n0,K`5'vqgU:] 0s!SR1To/0 "piʋQީzP f3KR׷3PPxd xF0YHkZ m 3dp: gХ!7dJY QMe[Wp4\yabXFah%;<ޖcx0 , ɸ.SoȄֈ4ɱ*J^4*X}:ik'(Ql'я8Qi :c]b2gnzG3T;s{٥nඐ\eB2ƅޏg 8t vaYOɰhڌ. vhAS*zeu.GKU5%ͨ  `CfL3Ը>nY$)JX;0D8ת j7.[{gY PjX>MTV(6CK 5 ӽgT1Vÿ'5pdvMC[p(RueM.=3 Beϱ>9p kPMa1%LpΐQ>pXrZk"Ӄ°$5kpB#>\BqC%JlGo8a5!'[-5V,WX >H< . /|VL $@pSJ/:0#&:?kzH:s%½o٬`)2-$uY:6-ɔӁ; aA_|>cBG&IHǠoC.ʕVpC'XLd 1ɻwŎM*lQ of sD"S6W_r2:z )V&3|kiQ5a'O W)` h"B0ju{EvefxdxkI/3+`$C/:x $fys;/@0[s,̴LY&}/5M!2_]czMd}&nI\G11sayF2k<;,H[1ѵlw3ԛdnL~ qNRB*"kA٦H&>j8R.|@WYk2 v$D.ۓ8L}q}L'|PX;Dǜ*oֺWEBaʑw^ p,N l9=ÅV>_M?j "ATG-fw|u_\Mi ⾍n; m )4RfHkc*O}Ob#eN1q56lQmfQnΪ-y:P֧71)&4N;].o /)LCS)wsa5VeLl"~eER$fρ)YfpCyj=tT=Vp#9]lIՅer,~y\GKyn./4a¬aH! 0롺fBl}\Cy̧ +J Ƣ/sh3bǢ—^\H_o>Vڞe[,Go'TG1T<,q4\^/챪%0ͅ]fÊ3xCͰ$*:g GQ.o_Y5MqrD*SyWl_nmRWZ7֑+C ƌ Cǁ8t sHA0BfRQC{$%s~]{Ns _.wdmXJ;01b'l|F6O4^O3f65|TQ|.~"Q5 2<%g@^L y^ ѪXt],kӽ`d=Y&DQM$'7*7ҝ)ߏ 涧ʏwE~dT |s- -?A 3 ڭ19ݼV9፣.ULp%*D8ڟ-+0Qly {pEroi0 m_dH9(m_r ^q D7ܾƯ3mp;+cIEٶpGM:cwZ]ܘ {A+otz'~xxӗC8%J p-)EJlXiv@8ǎKjsu:{ i|ӿNGѓu ;:]b:/+ދ2mth)`X[/ZASmCˬ;im[_m*c2U$sݧ&NYڬbGf"(;^## qdIJS|:y-o: 9cA7aI藮EL2C~䠊(iBaJ:Z_ {0ݏQo~sa dp˜͵f7zz NŠKBcaӤ 1>{hU-o_6lwhY5qLu?BcEJ8#D >/8#6?2Qq$H!L|ALKȩpldK:m*vj8F9x+cn.3 %+,v }H̱֞M@;q~B¶:]1FlOϤEq5` XͫPZ[,Rb&_(>џx. 9A3K`^NRkVi.Ǽ Ѯ< K=Ҷ +R_ۢ4A~`ƕb-'qǛHAq*u@CH"rH 5)B*17J͐۴) F O*fx-& [Y$\fX]"(v953xaC\3K!SR ukؚ z`ɡGT&!|3 NN6[Rm;zakra*ʲ&WGja8G]no`طACR^\=#S9 ˆf#'$[6ŧݪ%}]]_ J2ZXMD:*W5.\ΤUmU_H (nv>ofǮRD gwݥ/ /67=Y`ISdݼ6X'R 9S&)үu3H\ mև@aSL꟏n?"9m7^?*l~3mxA? 3f@{wrEC%NF2lJ7P_#vgP}"_Gu IH5/V_ϗ{[ bj}pCat٘&X"qmOF[kS/}r*MF!/% H q@[wv}̃-!u&ۛji As8`׫& /RD]:Od*7mnpkX%ɭ_ԛ}Wmغ.$|#ϠlALKٯbl)`"A! j}q &uRLt4Ld,$#y߸Y YMa-hL6me>&2g0zCaYš8p&sH!4“ x}aNZLWa7xDtBml7u5YM`O \k*FY_GM׈m^6KX7 k|Kn`'5Iа, _/t)&f紗!*ثrC?1N0y>u총 ,T%/NGp# t࿊6zj}ӫ8'e{Oo *wp`*s_lfUcxIަ^wn=r$SZ\b0SGiMf~5=\O'ΔiFUEh&'[6LȺݦ&ݽT)ɤ8<屽H(sP8#dLL"u &r)#h4Y(蟂/Essؗɉf>4[dBMؒU |aneb 8cN*f/Z\G!Rqo#!8{t8*ȩn됞,*Hw5#AgؽŊeߖ |^Mn"WKy7}1Pwc p;b"QɟxA>Zu&Z5TSi}q; oEۃ$8W]y EC̼>4 0 )->TX#f\< #i686p fk#6% aCo~k .=ӓ VsK*L8̬ oB4AVclw"yLN 1A?z'e2pNaye{;XG,==<]ViTV:-p-85F k@2ΤFS@KdMa9#1,JdcՁӉ\bRewX}w)ZV?c(uΣ͞*m Iyſ>$Yu}# ҮK_NU @xo5 8@!a-LcVj,hj'̣s6o ޵2jڼ6+Xb#kBGXNhvEP;5lᴫ~$ٚ} ۪kp6bGZu=22JqzQ$|:Kƈ`'nlĆVܪfB-}b*пX9+>[Oh(Y"6!>% }Tw)wW֦`UFkoSc#`׽)76 AźM.4UD\D{wn$VWO%p0ʮ^XM1DW9:ʰ U FTy(fx\>+7sˆZ,tugp=y*Cu>/-3 nb x~Lw9HZĄ0B=Y7r} h0+ש~c96xeQ\2ߨ_[z(GkoD$Q& d:iEr胨u8U7Udk x~RQ37yM\Ue"C.Wu$\bڦFƂ'|LRK ǘt+)e$޴yw(;y x)Uq GN¯R(G&̅cd6;y_MlX9xff{"Z(K501ka}u_yah*t-Ҕo,%ڧRC擭J<}O/Ͱ. &%)̋x#(Pe H1/ Yg:q75z_ypOΗ=r]XkE`G_HjmL H}dM3` 0|l /^"4{Уb!Xvg au ]6O vW0s/N@f (߇QHy@vR{j"AF# :~д. 1H &|t_`.wIXԃ]D Z4ҜQHhUCŹ$0?~{f'zbw ;J#sL W<0k?\;UaCLJP{$ozʾ7=誔mTAmD2icQY!Q~o(F!ﴅc 7ڌ>,Q!n"ZzvKPsQR#<6sWe?r#6GsK]hӛan/bG^\MAU jř]>!tm=Pt'e|ĉn^vK1#b Vݱ@ϧ08 A3(St@f%y3= ;Ɔ oW(ѵ#`S>CKF۰= @0[;ϻ+ŏY܈'5b7bB!*Ls-`.I7'Y5sB m-kId>OGJz]~=F'|O9&9ٛiރ?#,34D$6l5{G4XgLjysu+q!dBo )ڪH4ܱuR@c7~"l՘U=:Gȯ*<#ӯf@8%66*%ķ( ~vY- dh#ސ}JrmQNjK2t8aܻLkTMQI DîZfӖICJ C@Mk% Z.SϷ/x[Jጐ[`^Qp]UǶ06cgr{է{n; Kp7[ !#tG]+_FlC)؈JorZ{dT׵dtE6]rMobl*׿qƬkpM;*3'v3^6iw*SH,\J_ʈߟ3a3ʜqJ3's/l; Ҥp˰gzG m(Ar*NNOmIѩӀI[um#(aiq fU`ͧEueVͬbS)Nm9̆KIJcz;vNtAM|h\pU`S.6qF:q_-o~8<5%-6YiIsE|0G+vT8Ɲr&>tirF7 _t$N~j[)O*h7P+Nvrڭ={ mӘ^/#)2擫&Fs<ʹ]J݇pqZeRܫw.R|sv( 0( ]&hwAՏ][qu63)ЂWH)a$#fx'iU[hE>Lza bȄ2;#Bc1&R$tzd5K _oX/U PF:RbN;Ad!_rkk`8?vux9ZJ[ock }iG|2 a]a99~hu5qAqxJ{[mUPuP<1q= 5 s~ i[$Ĩ=̠6=0W3O'dG^Knp3pyδQlgiE9.|\ԭnfN&! sYs*q gSQ8Cb:O 4Ƹōþz섢Z%ק#VaDIj;"?q0 u+Kw?I4Q{N!ڴyYvvmLu{{oh)ru$ 1Tć,,.xD ~릕j,g:Cx=saX\!d{( gfR@l0Y=m")Hͽ(~(uy$+_>8JzEQ{Dx[O;/cN;ˆ@q,9e~_(?1\y;G9s.mG6>]S3RǺs3 JDH7\!MߡײvMɈ=>6%DE^Q".ԋ:]*(5Nz]ը=R,lߤ&6~q6jj?K/+)b8ɼmT63|"kUYMFTjHbW':1#fa3!\G^O2kiQ0|Ó(7!&2 Y՟4K"PЃ~&21]E$eCZJlܟw ~<̤Ü3 6KfO"3_^m9ʋ}DGI$|Cj)]]nkl^cIeZP#}z:b Z$f?0,Wԏݤ]Iˤ|;r3C2Ș8uCԈГdT. H|Rȗ)(R­*0гgeUUmy!] {ZZ$x v/ؓwL7^)ȯF9I8&x0Wdpv8Jb%&.8VC1V2-\Rdx)s.;d C (VZ/ \c&{)7 מ{ z΅|]\Kb@45TyF@Vl#Eɥ L(M}#~> A\dY03Zz\K0nDžpTw7|O5O1|5ӫ^O"/:;~ٶ}/}rha3o=0cjZ ;H…W6M+,{V(b~g> Z1&~I *tP*V\oCpnHglfTj)d܆em/iկ%&wk} џ¬Ƌ ڟ\ 2-뀚2q`UŅv3 tZ&!stu iqB@bc WHVL;`jT\coĻۑײ/wJf36O[#jYT@y5E[$J\n%QDKo?X< ]T-kqG@5;@w 2U} /VA%0P䮏BV9wrD'#dčKk)Ń&g);Hdv qdKws :$ @vjw-^YHO)VȦ`8vnpځNL/8)S %Q:wg J;(7&SF^iܖ1dy'y%&WJnqond&K9 5)oce;f)1$2t#yi쟛CB@O*1Ydi+=ތ\Žngjy-?x( lM /Ґ6gs򔃨52L'[ fry);B"*H/֕ME: zka6f~o x8;iŹ>"tA(k`ȳ.U%x2%s?&8hUehug0T*RZExwX#0\G.zӿŊvN^Bhlf!- :N`܋BQdiusֺ̘ĠE\ 6lE5ECo`g>}kU(a-'@}) /)QM^U IƑg}$E{@ –@g6W#?֛L%1;?° Gwo-e\b)D.彭 xq8ۗ]nWp $%F$5OOP)s\YU#fẉ -0K}# otf xJ~yG¤6k(nKiϭzs+ !΋4ukV-~@:s,RA<[ ֜]%J;8 !Ϫ(&._w:ƇBm פ<\q]7oV5)렕mQ ~U0XM(KrgB̴.}kKq8*2nUM"N Z|$ow && 6Wݯ~/1K7VeG0SVn =s&ރ*p^׀Wf9^"2M}+P)jZaQE|󾠣#zERW79"+IM>mL_T6rosdJ3!- 0[s\c^z0͝WjJ!C k$meᷡw`v1bU?p"FHRCmލ8>z9i ]8oM(uoeh1ɲ,Utda=Y k$և$X$0𺇹yuSas`^;܌ݫ:>oZ׹ޮ&Qk y:ȳc#Mi qKɣܠ0"㢮:eYC(qH*Ɲ\AϪ ֩&ӵCM7zPٯrl2jRd݇5420o}Z<3^ƾ{*@|6NSqP[\{ .g6f3m{x<%FX3Ñxwmf}!x`/ڡQӾ,FEn1e' dPj-v6}琊=c=oX9WϜ:$*8,p1ߘnd4Puf):uI23F\qa}eVu#vtMX(%IvkYeON.N:ij*Rm K1F$rZCK& ΂fvo?2坟jոۏ:w{e\_nZ֡TYDF>KU1d ii!<sl("Xo7 2 G]6#TNA>}i%E(LijF+NHj{Z}2 ]}¦BSy YۃEù6S,U˜dM So.x7NZSr&}XfsD[\zU#/D$d>ʄ' Rn9e@tKfNtS"vk{x{]̡%n:`k`0 ,Jc|+XUtÕr0xUH6 07)&35Ƒm rD:o`K<ȿL=(ъА+&Y\ ܤ#IHuKe~Y%=l%8l2d{JBߢfy{k7Z;_+PK1$K Q7 04 AjޟI&2MlecGHXCߘȉԳƘϬe2[}qHy'#)8JkU[5Un#0*z eFEaGsKW-efTЧjE{M݇\FUڬ$x (e]J ؾġK`kp Lƹ{v㨾OS,|X|w{Ry%p=##``ڇ`)Xє @PZ`b>fth-CLv!)\R)·DT|T}R 6K懙FDyJrt'FeʨSv˙UxTo s"{Li?!:CQ7tw0?0! $W"MJ*~8wpTr,,{woo*$a!牙صqg\_R_ES\J-Fy>X1sdk3* R[̄6n c-m߷/bȰL8پ,.[&q<C2WɠMp҇?3 .egΤ"W43nS7dpfc\ mmoug@ɋGK8k͂&_AU5zldVsySS();bpa' 9EHxȇJd%2fjw.AN8h(t(%e&\%Yd 4oVپkV;1w@1p̞*妛QFȪTZ9Io3!`J:gtg۹^y Yo8eNNƭƑ&HH-FiSHҼ/Fsñz=%Z\鏀;h_艖є7Kd$Fxv"wqoX=kj;SOr¶F8>oڻ t֩M2>Xz =CQoـb\}OQ]*t_ *ӞʐDwmz #WԠ9!A=>Fo ̺=#Xydfe&IlRyfwv8h_oe1Hiv1s]Uw 3 =Ny2>6ICKN!bMw5K-7((w]VúmJwtF+vӫ7[cwlkфPK`WwhBmV$p*0" ۤݹfؓ!]ȔoKyWGΖSM\[-;:G.iJJ8a\܈Ȉ;.D߮0# A=6{Wєʹ<4$RҰ3DGz3`BaL= #B ".أD;ZZԇnD{t঳ /lC6?0< bZBk]C*ka@6Wd`%, sjQd[  rL՗ %R!EZf%`̍^$퀫1In"ڸLyqV5gtz:fE+io#fY#'qN_uo@ oFPKBKѦٝmZtȌ%>}K0$Q>63JSvzcػC&j(;12&;IF+&뿿AsجEٞ{DR&KhўV0: Q[Qcؑ}4Xrnp2ڙdV`_?_gi[$@˭C z/kU{58] /Mm?@GROT1m-]ʆrRFߒYgʻdlqѳ:f!ecp =)&JܿvLt$TN; ~kHZ}?̖ttb^n[qbx$ 8ݹJἓ/Yة>U~S,ALV&ܤ WwӶ}nu /wRz+Զn`F+LQkWdUy@9` ~*"R+(ln}-ǻl-FOfߣJb$"KVKy*N;T&c?.tC[cWJ2ꓙ]Cy>DTG܂]1 =Zqt1[aS(c<L\-[w^Om*sfPC:X^2|uf;4FZt~)^ǯ`"{Vݠ%i,Pw\l eھ FBp?o:1^%Y}VuL;עVi; ~{[ QWo6?v_ɏcTM=謯(%RwBr7"7[`oB%0%MǞ=Ʊʹq?w*)<+fu -Cڑ ®A$CBP-_Ѝn>#շˈ$G]gi¯6ޜh- GΰZz/LRlN(ȫ>l,55cwG6/ "(֧|ʽ/+Yo໒~[g$R:F7ԎWL11}} Fy@HȘo_S!s>}E֫g*Ԯ>1'oIQplw/GFNٺwX2(\7C1=_ xơ?W| ˋp DNw;k;QRZ гY" Oc㽶Xj "cFmFR|jݨ)pߞ붷M~ =^kRρZ~4"]xY,պƳ Cw/NCa2S٠e1+(q;*ZtSWBkȗ-B{"V`c>S *->Agih*"/ТAw!sMoS3{跩1,ıꨰH]\/F0\\KV\ݭY#sw\uo wq^.Jf46ÊodݜT6nYuO_+2gT=mf]&'*ETP 82`R|z; /ic O~ 򛜟xP6i)3LҜL6&N]O&k;AL8I,v ÅwrG>MB ?n@$b]K7!Y;Qh^.l*ys|f?kCL,l;艒Se*'d'Jh-0z>uxJxdålR6 #o%s(]iiMU9Vq?&\*)08'[\6iď!M=?i!Ƹ% hȬS7H۰!й ^%6lf3πOծ:$R' 0#4#98Չ^u@)1GHlR{ ސEDgoƤs%F p?u*swW"~͗#a¼k9 =ԑ5CAά43 9wKQDuT׼j٤НkӖz0풠2@ߤ0{ȀЫse \.4ES &IPb}>UCp'!^B3}ěO$1MNˡ $~XS}޼MV .9-V:-%y$VC۟ WKgmjZ]uԍ; :y@"WbWgO!RϜEBY p BAϾ,"1-Os׽" \HrrZkMcX{ qM+Th Bq oH1H @l}'n2)hc|V}PP4w Ƞ .On* Ku"t;N2*dҔR8XjaP(ychj?%wMШ;Wad/0/D܊W8g^ j _OLPEK;n rxHBmٰ:%$M[COtkKBo Ϭۨ trw\#V@xU7e "r筏fڛ amlxkG?^og2nV)s{P)F 9aƧ$LҧwUDr2-{oZmhU Ɇ_Z|\TU&LEMNLKˀo Y=^=*1`_STާ͊ bK#q1/>.a"R8R+s:;1%g_CIfe֬-3[HOdh2ŷ-0[0Fs_ho^?mg#{;h-ouI la/9#|L?Sߡ'7'FJD tk6s>T Y0J4&XQ MI1 clQ}lLCMB3Al?.r310،@EfݲxN8ңpa>zvoxa4ʢ<71HZ'I3y[51gpnVL7h'=m/©u&m\꟏ < "k`754EK_v<5*rĆbwѕᙫ ֯.k`O oXP=fvç 4;Rsk{X~{~T&x${Z,)}6m-%TW''oo TH$(_!-cz 80bjZ6j kƄpN}$b ϵ ‘V: 11z/lqC'3Q(C@ҖZ|KKe.ܶ˜κg0I"oI#]x?7"5 ,>wwm20!ԃ[|X2Cu Q7)|wpcqJ)4{()$ 7o1=`n$clmPk-b7WV?b2uUAj5\o^k@gFwvnbx|Vg_2q\qd?wܑmkLMn7٢ƪz#W U@`Y DFwbVZOM6hYp&~*7LǮkfC"#9bvNxdwy4e/|x0:\W̓Q:3N+P'Dknue0J.Z֡N˦FVQC f0:u Ϸ\2虭VY{&qt.H}R"'o!Q (s cEX2[gF1\XF3`1_Uu4C Լ~OSI4!D>i{Xqt(Ń!V?l@6ndnnSH1L 3H6wuraNd; b3 -[$FAw=r4C7(E?pTfs=p.' R1[uso㛹q }Ӻ,lB>ʉچB^{B uj6 5)>vgn`t 7uvjz&kj|e4ݞ͉PH*\ _G*.o-7kݕoz2g)nE7pZ#Yr2{ISUE1byiC0O)ve'Yo RnhQᛪ?>+U dv% 2-M]'vV6@8.TRza_ۻC_CDzՖDFke`ZQ x CzS,O pLi WDW,,흀T,v!LVUy ͫ/T2wgV0bsدN{s-B9Q%6n%p!E뜏 rTW/ǻ6| oowEЅ%VQ fP/#)+QzUid.֚_ J]/ur2|^r{|AxoD cϩG%#/z U`1MS]2S?_U_TV[Qo9<CHm6jXt6=z vBʶQLsi sF=z4IƂjBGl'o hdWs} FVɼ=uHj  u}"$nQb,nF!\P0*R*YF:8:]4-U+.ݑ=q^zAz. O hx[~p^aL].v[|jϧ7`إEDo%(2LEr?c7}]LR~ V~ ocԱd.h> vRubѵr<*V\NMȫ8J8'ii&ѥ9ד܂fގX{,8lxV1zՠ4rA.eSX X-CK4kԻ8 (]8<{z _a*KR YDe<'> 0lNO5C,R-'t&X=tk󘮐|p\gvO` CsP:08e$XxqE|ݜC0pƽ@f.+~#\l]7vJ AsUJ4+rX%l6I݌ d f6ZBh,ٓ>3r:8_]+"(wpb ArԄә77LJj뚊VWŷ91!W.p]V*EH )v)ϠeWW$oDk.+&]!' m y./OQWUCЍ򈓑_!uQy,jr8n0:&'ԣl:3/0eb /̌3Z;wK;2( [ c:Di^.'?e *z%Ҕ{l`Ԣgpc$2ѥhachWm+{ phc|Cl fojp_(':c>kQB0Kn! o' uqgʽY|Սtͣ-z8IQ}̼ {+ޓH25YH'z֙\HX ] ~_y( k♟VJxAj 5yd fJnd|DPUl@MO`GiXZۂCGra3WIVI.1f&<)]-UK4 }adY|C@M):VluT?~>.9&(&e:pdg@q\ fs_hcHD 3]o#C0W|-Dq5=aLD3R#x6DZ;vk;f̢S*\ͅdk1hVVsm)E/!]m3%b uoYaT;Y ?->QSZ-Aiև=Y*~}ᶪ4ϓT(:l7B>1A꡸mT=@2erVM;R t|+Q˂vHB3Yq%L+ Md|ZPq gu[)tT}d?4 JUf nBQ!f! zc&pP^̐Y 6bQ Ken,nR/UEɫӎki;0?Os>=XGXHN⽖ iϗ=*QhEbǼֻ;B^ZA]9}1+b#!!r -Xtǹ MZY2_~e;Upk_Tu BY p9P!I]2iXvt֖lOj׹I@i.25 pG +w/XHFY¼K?>dƙFBr}n>#>:ρg>{߈=XY:X$iE6.gvO>SX9yNMhN];ghM]di4B=Kh3Q'BcE/@x!Qs)#jU{'#j9}})E(1A:4δm]:S? 5>IbI~}#&G(ԔG6)0#f!!6>cj0`GVyWϬ/)dC;p^v+ zbz64ʅٙh i"nVg)0J3կCخ$}[HHw, LToz9U~;5$)4NrZq.i4&ýmغ!G$kO;mz!N}wy \T1ai`Am4Oo+vJZrʀxfQ+in*yhoUn6P=*ʸv6rwE&ښJzIkwFƿېN12]p*oww!bVgcuf7koYW8* &02PqXkX^"K)uOdInDz.>ծʡKL:iFݨ P%f`M YN"@T\2w()KWEBZ1:`- 3:?vzxP=q0!*p4>i! :Vj2LRn|"4ɧ4O&0gtځw0<K͵xЉ` S#rEG‹WAȹKwRy1|?"ǯ{D" /,keUHl>7{ k+bzS+ԋQ/lQyl卆(S#Ytdw vg= ruTC[OTul B17?!̬ W +4B}yUaIe i'n-iRP$J$ZvF]uMZr ʬfV|ua>( nmPȭ{=,_EѾ}eP8xDe/eJ@7K{hVIl_ȸ偨q[yM=lr%kN(#ДJ;ӌ><2ES'Pt[%˚C4ݐ]ATeq>瞲04<%޴lCԇ6O7 qS :c(fdʊ\(aBPSwOiQB2Qq~i}ïdx=4lj?2$|yqWUSH8_k)fGXkLGgEY_pVHo"7WyO94K-l~)C 5?/ltX"|8Uc߾,E ɒhL}5;dad?߷/nNqߔ蹌Xڱ*6"{?\_ VV?WYKzf%{)ٱLS8(pWA<5e),̊c'ӗYت̅dT 䝧=YɜQ޴D0<;Q[ҔwX_2H6S159n`ѴG4L ZPlܩۉPlQeWe*u$7FmNR)sx$lV-´6BQ?є-_=FP2"M~6uS* mZ*26ʵU2q+=ω7&!kjN^ ÊkFOW8cV}O(.in(ݘE;s`pGA΢7ɜi՛>ݪBGYFO c0sDU@ȈZ \c=+/uGMmzwG" WTɄ-ed;ѠC{|&v:BbAm`,J2o)B1Pʐl]oA}OSm)[f}blHyWXtn]u B'@&oG6. 1C:0Z#~yfy)u366BP\S:}aWc[c[Z-lHhw1QX5gse-WSBriHGZ0i.21iK`]K޼f"&>3| 3Gݜ*mۯ6‡$t@+Gu-l^G )ZF#g.hSɺ=|d@dDRjUkuVLՇXU:^C5´Y"#)kD??VR]1}ii |~4hxRP` p?e멫iQ1 _}̮f97q o2 ìFJjpcLx'[C 6WC:cn Zr0\?.K@l' z_\tf~ C O_"’U`2ի`nw%)Һl;Ҭvxtݘ_j'Rj}dyz1ȅ DoRDiL&'n"ы5_ .2E<ɲ3_Lh҃MG5d~-OA,}y-P &b#$ȭp(wˊ I@ONVPXYOEZӨ\G  /@0hEG L[xtdCUʸA3 }:846mGyg&Xʁb0rm"kx FtO#B3IFTk> M1bn $-ѷuܖx,pa^J5tjj ==.ib%^ET uڀ%ǫ3F ;I͠3luQbNbj?0\0kl3G; wr -)R3gC`һUeXV0 0F(^6Nϫ5čS11A16"#[5ZF-0T7hQzN0ԙdZޯ\tmYpil]ϟG%U*AT/Eꖒ8# Q*XivTE.,3ZNwĴbmގo L^ hJtpr O6dw8IkܤrAep> w\ü *? T~yL_ 1/*Mx\ӳ-%ѸnoH}Qdnq8w7zR6jnJtD1U{V yiNK˽ -Eˀ:~Τ~s佰?6K,J}~$6Tm/ED+̕Ip.~6ٳ?֫f &u^%tFiPlM|;.xv4\v,wߦ,Cp w?AiϊIMh J~f×㳯{MtBTn8q"aX}mcRV2"جv!9Y^$lc{.PXkP}^Dƻ&QpJ?PQq . QH8y!LB6 ev~2jVydY~~UCھvQ(ug#2㱯=[c5Ҿ4$&cv;+ gͼ!ljU^="nMt,9m4Zl~k< KFS4ELw NŨhԹ+,lL>~7#"QU"[_D#ټ3zvڝ>lEn|Ȝ9=H{mVsDlGtePIb7t'CuHnftR: N7(#;~rIhonh; 0A*R$y /PJzqgW15S. #f>vBL"XܷSs[!v9t8z0n[6]g,gm6o9v&jGĠe.t8!1E!a=22Y< e\ZY$^"v)4~_U|ג 7vO2(o04h[# ,4-lf߶؄8L 1~H4qc6IOwDٜa+SD>H늣reSٯ]!/Ȏ. }b"!͑y_e>OlnG!/g|Zp̩Dr;:Z5JoMN aqgp5ѿQbw m}/ }*F#:Oc%7tG@+oć!BFwU>yBoLny .3FaIhYD!J<>X.6ƭB6"7~Q7pך dYv)X4DFw4IHK$[x/JlTT~Lm-LֱcUm()qPyj7X{\&*Yy;Amc@ЇRpW1iZv|]FA1qUb6b8n׹Jq4;TchyL7 OSpEKY ;6UWP'ܻUA BRpK1U~b%+r)ΓjMЕ8R,yѽ ;l+sm[/;:/Oݶ}J-oZ!S 'tq3F#"(ā; OlUDa 2R⼵3"8nҽM>K5P\GmHr}:ݤC azB%8wCsfbe]/gR ^m!'sxK\Mg`çS|&Y8y w6:a35fĞ}UTݒ1;:7p;+GyDjgYO'3h3[+w˜|V1\'w>JҦwRG+Sf3>,hv uM]Dv07‡>t`fKG&9\^_ZK6h(M1#C)~ bHr,{ta5">|Ncl.>ROXkU'4i(ڪۜA{S z* )p R;DZNK|X RS}ɓoũjmڶF0hE?z2Oya4*ڹ̮o\.mQEsvIi)sғ8H21;Se[WjlMvz[:a'T(SMz[nWoMVIy;IHֲ/Pv' te.M~ψb7%b|E`GÙ@z&! [Hq퍖/(A >݃mnkB„03@EcҞ!Da'@RFw'j%N/w,G&u(9߆ZwOhp/b<YOD&+(i?cg%W,9WyA,KTLUAh#r`3<΅U윙 W* \HGĠE`(I"a+UT [0QFhަ#`Knb8W}n!e95˳ Ήyi&`.NF1.m3$6; مQ=pFTK7-t҈i`#̱JpK Us s#2<0aҌΎQU$pvƯ iލ8t׾[v<}EB`J5LTԉY)i9CӶi!D[ |{Q1:~&h\^p赟fA+h&c{{  E:E[XM 3>kl3u8l7MgYB|lgҌQH+;ŃHl/#!(L+ww>ήD{sWq|B؄qf2b ];0bmZ;fT,^[^9J4kVZ9eU{=KHVJ|6rjthO28)oźCV3/wD't|M!sf%N1^22&"GbuUUc8bx -+pΚwy ?ܓ0[W3UuH#VʓzTk=W/;mQO~JѼƻF :2]ǫFTR4\UMٓV9e\S$}Y`ԥkɱz,øJXyOIKL"כZ.ZXӶDh@=պgb,5{͖KTa ]joI82*\E{܇`WE`j=X"/Ĝ0H;q%}Zz0q+A21ݱgwF7lڥ[ _(KfrUF 5o&' Ew.͛íc$9`g 64Am{/#.W}|3s.=],?`9N5y>CW*Qƀ-sWUA*j_뭊.mFU*zݹ!+!W^sU2D«v xU6Fp%}VӅÂAP6+KQ1hUp&bwzs !g!GC/}{ޜ9B+f_fMfbKRQ'rJk[90'Ļr[]/_jv}ίl1>ɽxr{Hu'9Jc5WqM+$SP$N^WCK6G-A(y61XJL kUR\JM3XRoĕ⿲u Ƭu\ noȑm+ʼnË0qw0""7W :*V \hp%buWU7 [}`{Q4@p.!ֲ+Ө}SI̪R1kWo*)kpUFr1|k%=w=R Cr&jDJZ-3E==mTaAvqN )2W*$u˃ `ۜK';&Zߚkxp5`T]TQ4MBFe^%T{.5 y;.PYO~o,"UcN.O;ˇT?c8Sp#WEcvɧ'v"lUZ(\/I?Xvj$k՘A4xn۬ ϲ >ǐ6G\Ag~2gO&95 Ʀ rZFky{éĚQ؊֥8U& 7aں݋kt޴r6geĎ uql"Ot%g ~wۄpm|KV %U :wBՍꠦȥTn\2\sƎ)3M{WFrÇםaff ^NNO/|-05$K %zl-\P#8';h]S#(x"}uwNä=_s_T'RZ`^ sٝ\/iQ@k=J!Efk)ms;s{At]&+0~6C`A(k'Yh !Sp j aFѵv5d\O ý Crk+X&ڣ [Qʕ.2HY7v\fL,C打ikd2(sYj=uגcd,UsےYfs<,6N]qHhbڼKQ]"gVXPIowS ñ-qZuW7 p|Djl4VבQ<2 $Ef~UFԻp$S<[.v_0rF1f}XVo·Q@3nkL ˣUZ]G[w*-${.;cv;vإDh׈ R_IP 0 mS撝uy5‡d~c}Ue+2Y]Q=ߤq=.Fd'lv魇e䇫D1$P!gFrHK2o)oj‹<&KA4f[1>jsU2Hj"!Wa6_%xҾנu0Pl%8]Eʛ:f,lO"bݧ0)'z7 z~f $hsrz2V,0nlɫBoi(ܑ2]t4A8`]:)8 _޻pq;Dfl/8<>U e0 ζ#8lY<DZ9bmM;\͹Q}zk $;6o|zKAp誷._ )l-<.ȈėǃT $ڎ#Yj #ޜb´"˶ϵǵ@ceZH?Sg8.ɏ.ci+(2\ԐŦ6#j%IJF)&i!,2f4Q#9{u'v*~i1a=ui0.Ulq.oDŤ^>?ӳ>eZXpͰ Woҙ8q%62cZCYd<dg0[{ːJ?(ŒuE >ľ#يd_\/{;uͥL8qz6&yn@\:UZ+u[ ҥw)ux\Q(ˑXRO#LZً߄}?cu"Bwe60vMO75D69WV"W;5fsD$0IW̜gՂ~xn5A5fݜxcnH .kmQ8admGDP*&Sw./g q:Hέẅ́ߵ`]Nm<47))'@z-cSޏ\ٝՑVwї FFXBfd>mc:Չƿ:i@4w@r7嚋 5eT?~eai`BrQR 5o8 p_=ۘ<#6qʆCL9`ǟlbk-\N1-q`ҳ>dZl.vd`C2$0DnYCI_NOAN>/5t}y|Y/h5GP͞璬A"P:}Rn+WBي)V1XkMA]·SFɾLg1{Q^df KfxB  O`7ꠦ7R3V{My(ݹ@gR(٣..zKIs\IʌT䍂e&kBWORã"[7WOxeG7>B1w&EyGPb@Ћ_Gbt䬊ܵmDx(v9}\r&\KāWTW>dlU{~e4'LX/S/2Nk`:1Y_ \OS5aHZ&nlʱo^l}|iAR:+fQPm:k:|-,nN)%Wf. $v-a2,;SLn/t)R_b;CK 36]N#cS` [G. ɀ 3WXou^]sC[İ/ ,FpH>a0*K~W=[v7kTB\]aґuQ1vxEP`yL1UvA-A rBʩrcfg5/ghsZBc5kU"FU0;]i=Z2dc<`S3tP]?S +6m*"~4i#@d{Qe$~aJ(@F"bVlN\a݇i6T>(,ЭZIbG8FnAp \O)R5 }[ofL]up6 [>ȒEobjmI($b~vQ_[ %9 r0"u98]/S wxZemhk?AgtT*)b88к~+Qnz3h)$oG8_VIysRW&=En8$_e#T auJf-X_ƃsk?m RmlDJNxUz q0Rq޿=veM_<ؿ¼\TЃmB:a4Ɯ#xqaR\+ 5>e5ؼA1Yu'd'>[|!;tOD&F[-Jи."yo8t0l_WGNB щb192n1gcFp_Aˏ_ !6{̺JXeɧ#Ra4T}K*17C8NߕT\goP0!Ӳ#8囈:ޤ!V9h>NQ~GpzV/YN'LEi1bm@jPVJqZ5 -o>3? @S@NyLdu}BZ LqØ ܜ2ŃY+ZUvu:.r@6]R,g QбCu]C/Zc,Ermtf38pIH 疇bjYE C[nTtBEo63̋Nn)%wېir=ExJmAu-B,/iԦώ/%89<ee^;|SI5<և0}lngD-W&6eѲ7a8+9˘6Lvb'~x=IrBB]x?6ע;h]ޔ+ 7>qOׁf|B>z0U3kwab)=t.f/VaCh67ό)*Klx0%?سBk&2N&9/#;_w9MJT bd(~lB?E$cz$}n=bSW*SZ'u!VQ؂ ki Ct$8?@nmD${sɧAZ$WvY1ݫX)HȔ}0@ oR"K ̬]G _jҫZa-PP=fi1G W|!n.< RmFػ&oz $?8ڕz 0$1{:|G7-)#\)kJ9TqQlm֡reaRfl|a 03/Kp $55 I~ AN|JEm[Q:eڶM֕X⎝ h~s3>!۲WF%O^=e1TEZσǎ#%5yhp<_D>WpںsE/ R?GA.'hm`m$y2[qzh 0 WP؍"/(H(\K~ٍ'9hag7OjuSV53uZפa!8B՘EA྘nwe#؊ ޜL \z L6yOZ MLzUc<=>ij̪n2!094vvz gC0K}M#ww]X45+ +R2]Yb_A\ kڐ\@}FL /(ed& %G4 *vb{<%]oM2WJOɨ|ډfx(9))FF{xēqRkt#E <=ogPR3H[UF+&W79v'Y #3?θaHT0ͥ:X.M]u?,WIR?Ě˶xmU 760R3e uóSm#nt`R=;/kb⧻=?,LKѻc׫H(n96B·F Ta4Hxݵ=üǧc” rH 9$ɧC X`=E;M#40;$`Q6 mHmDl*Ԉ/>_p)Jb'i i̪x3,|Vj.]b#T_t縊a6؁!lͲZ60ϗBwvU.M-sWtfcN7Cz.'os|h|ǃ#y֥R4VaP/@w84ꝲHxc9\ Vu;QI`Oda&ܠAYR㵍ٟ;ǿPMM8-ˈo'HJzۀ* '8 |2!'D𾧧ayN5$O"C mɆ#J ^Uh x6%Z 40=&>5 c}ט U/}3s_ʙ}!J轻QʃO8vkki [er!T 0>Z!Jbv`%G7Rt៦o LIhIhCGqmYmXW=p $gcmXҪzE$"9Ȭ)~ \'.K #YV;y|Iإ߄9,A  ˆT"z/9>d W7b=OҌs|߫tgxV0tfe6t-(ߎ)V9pKMؒPwJI^}Uz _s͒ƣ誹 RV:,li]W5uEQ=jE.9[T+e7)""rwVs5]?$v4s<\)qg_JKQ='y 0Jʆd-`І]gWE#d{IQc?b4fΝ*v+8'n]WDZ9fqF N VJ7E etO{i|G>zi5Y&A^ܞb[|<\1nH? ezC "$vl8K [AP)0GҚ 7sa][Yr!]MrڑRNRio;GUX :n#,(mn#:ͼps8fS/E5%%9ڂ=7k=io1 O҄*Oy~ej#}i}1^!롟)( "+/@T:%*MMwp, :mCO2YC [Gn*iN0'3U%twZј\ "VFnӛUe*HB:uIu;7 ɒh$/S bO' YÑ2wuEi8fCC-h w\,>ĥ/Vd j؏>]$my\/jEƬK [3@]@K8IMe}P6 o ]SչuFw_4<^QL/>Z?ʶZWLQ(ed} |6O|ZٗԋB%oe%l[e+_ַjo .zēгދ[(BFNÌZ& b*[x,*n^LP+טJ Ilڎ|.kEd$u ޛҏMzq /!95A:#,겟M7+yr1ܙU-R0]케%JW U.j;@#qQd\÷H4_u|f[4Z$x \zE2-pyjArhY%;-Y4Y6Yʠ( ARsn,*,gs TkNIgR\eۘ !VCq^&$rk5]gv3ZHuUt/ʖHOpBQ73K#A1%溧=t.40ړ"ƞcj@[z>Z%2'ХJ98m78:/u=рSNm0k2c-(', =/IxtGvb+]Fr=(I2R FBh{bUMjy#(E93H!Rt~9U`KsJ.cv遶 Exa̾s܍7,j?A+"sFr~QwR "u^= i2 URE'U]h|h]j1_U.Hrr3D!٢A2ot:U0I><=?^Q%3.<_\Z'-7E KR%eciW55Fe* M{uP+;eM!l踪EτӢ.D*[[M;-^IKXٺ]'g JΧ|ET}dْ7PI)~xoaڴ,+viܣ:It>[S?D~]HY>"qx;zUjXڢUڅxok `/ )I :g@=3QOPcTϽGJd8&^I'BkS}5|0<4¤i WNSuC@B"׳0&~R%$fX=1g2Kև&DT:Ԣv`b*ȫ.ajRe}SkХxp0vtP42"ϐ/+U'^ߧtCbw9gE3h*(`:/Dƶ TF&uNZ__[e\h@zwRpcď wJP+;;XPff ˾d4OTsJrqz i;Y%: ״O(.*84mמzxu;5Sa`N݃ɻ)6iZPiI8bك7 C͗f?d JT ד'^!Be;"p R$" تTv\Kݷ:Y$@n:꧛(`1[X]A 6׽W(1LZ~ez< KVo3OU¾;`FOU$ K1rQ;ryrU sJߛDIm,ԴX:ˆE$hu(shZ5gjC@xfp۸?aV'8Ah`1+J:e"+Lj[ƇZ̝A,}MYToMtAS>Q/}8 .j99rKU Jd}9bc : 9FPܟϐv- =z!AJzDge/6쩘l{g5ٜOM]܃U!UЌ/8k8W&ȧr`WV(^YT@zr,z|Gχ}zlJz99`;/ӸAߞogIprۼAhN nay5m'%VAم_ M*Kr4B}Xg*hM 3%bYoeH4)`YVm%i_li7UfSӧwcnpډHd>n6&z(e:)"]&v^/>2 ٭Wͺ*F=vo{H~B-P64sZGpf,ȲW )aJv7v\aK !H {ށ/'170kT]Ek⬊G`iu$ִ n(|jS$^GkuIğ_[e\fc׺qU授ݫnmңM k ܓטl$A'A:% ӀʹIuS;*;{V }Sz1lъ>Nm O%v0#XnlI6JkSx/h5KQl#TpKa=osGzI.JX7H?k8>K Mq8N#1ީOB; C` W֍TȷL売j^1znUa[0vXw2f % 2jҎn=Wޕ/3ۥ0Z=b]}u] h xX]Z\۬:4)"2aj7', aqB 'Y>dG(Ay%z,[v2ʌIoC>٩}I :5 (]WC C[Q*T}bU -I 3n(Xk=7 g"D+Ei…w# c:aa hiX29 id_NsW~*(onĜW̝0f$pߔLԞ`qQ"ZimACM|݊$ڰ#|bmX:iMk)giWsSrTnL#Jh;>?]1"+h:~3'F\Ik;JVi-0_t]ʄu%Qfo?!0 a?VCer[|klb.9zu]v8  NhQou]Uz\ƳPӟwzܚ%yTO<ׇx :HU򈎪_g=|#wH7S׿-a /B^ ںM1*Xxrx=A`vVWR$ ߺv{HVc'n122&PAtTу?}7 jp'4(^:X*Ӡ7 A-d l-a_ug l΂n͢1ӕؚm^ۃ xḪ)w%$vx,yfٸᑂ̕!*$c$xSmY,g;V)LXFGUm?Fa#sϥ^ލɧEE .B|i;?VG}8Q!bڍܵ|]E4Qpr.غ$f ֵKCd"y*QLA'8̆ ghrR$ e:M0NGG@Ƕ׫vWbؐ+j<$VY-KMӅc6 ,pYFk?ƽ??\??d]\r\֗ԌT!}G&MVI[y7CPӅ$Μ)LC;"wҔ(Y+!UyngwWpݓш)[c\#S4Uhdp f%$jަüắn։ēlWZţ\*`r]5fY՛q4LQ)V7b^px'LGy /+^w8VqeRg-9a"Q}dˌ{ pJQV4AISpCEYzXPHli wٞHKN׋[Ra3JCR0 }{$F՛hKPR hPש&COlp%a#e?NgpQ} ZLьCҎ.tષ?t HcDvp\ŃeHk!='0+~!o!&N챓\.K 07%R㉨6+#IhEve@erga,W왧ځc<؝XfҬcUcDI8(k5Ct1% U;HCVDaB`!Z^l9{q򄇐:rϷ IBk}N-LQxΘz  ƞj4b9= u$svi`NlSP#&11uX3/x}2 kDO׏_=4gJHyjJ%Q-S7NIl@=+jjah-KC Rf}qnxK3#r$6',`a EZh,c]2] D~5_wCUO 3'MAk_t#*ܛ6&`[1vVRd$ٚA, H܊]T}ZtgYZlg3 oru_|Fm=]f}X[4y3%/`\O˨^_(@4L3a]yE}Bl^\%pm ?@~:cyl1>Uِ![UOoFĚ_f|cM1@+OGOLZ M3cw#6@}mz(VYCLqCICŢ2Z D, yV`^4!CЖ͜1|!ϱL z̲d`)j۔vvtP(W@ȘJ'O7SU4Zu%1X^8KCgH.a L\cD"aTz7VHz䄇AIp-Y!0YSėɖ;yG|BtfiVkKdL)wSW4`a,ǿx_.k&9lu19 -Q6RY`PI.զ8d8$6Mk5r/ÿ&*!/J NX3evjAI^B++оQn֋6 ,2`nt^j Fqh*F-*H1Q4ާ UU6c଱ ڨ%p .+&({Il⸣§#,VS.ò:Aƍ~y-d#3WvSKhZ,ƙ(Sf~9L:3u$B̎0A(疡GGx9p??OIby˴*ppB"xBTd%/ I{*MC&#s$HIB䃞Ȅlۆ"?o 9Ks2< {'2 _t]#}n'l^GA2-J]cTu_C%[E!IaD>@Jؘ0kS2VFv̡9U- Z4*(2wzgb̊/V4bjCHp'-̚RYO:b¶5td8e\5}:K Cz}fbUR%Pm H[qBr2dV DPUΑWH, c)]jIgjcs+1aᕻ\ ֊ǚ{.`=8 DO20~>d^? 3̪ꪮkoJԆ| v׈ؙ0ąL<[38%'"F*dq%\1I!ѽ ^(5 dc.$#02s+Yyn&4VYܨ;.2t㒳p>D*Z?‰ގqDB20tefE&p5\c }*Z83ϫU,.;XfjyTe繧3c"/t\M@-(ݦw7o¢0ġ3~tጷ|;wW]>) +XX D-U' ]B\Q"`p{'z!6eKD dza(zWb9XJA39N(kВg,jhmRjSԯueUftܵN-y s \/1h,_CLK~T &a;)Ĉ,w][@LW@h ܏Sxfj LnX/C%FJ3saB=z|0*d!pPz!7.FCҷ~RV:9?4wəCɺ؋9g;&8a&BTB=w[_yRď'skj35))kBq'H,(Mgqs10,1"X:26=8r6ɅyLg6]חjUX z@2 g@)%:L7!_v@?a_I3مo*~NYy,LG}бhYWNA6LpKn0?PGe:mhä<Mߗ={OWFZ׀ w)q2kڝTcDOoܫ< Y?O;61sqshj7cWFʫ;3V u z«|R=̢ѣA]Jj~^jEF2-4=+ '%l\KVКoFE#hܛ'O`D♼$6H@>.t@zDEC4it`H|jvTn,s4 iJAd \i4ZoqI>># pE2ͭLIܓ aDLf YTz9"@?S.j&BN+(]l1zZMISpܿ# 4^_!JOehAy$&Ɨ`0,FeOXm+j3T:0HvUs±>l4Rm?u*, @Uɘ= upG<(='َp@ޝvF ?\3>mc2Pw?VjN,n^yPm=O6yk!اyE0]M?_R÷ܚo&iB }`ISHz>˖XC7W8oSۊ~1'$E1^C]e Cq$:yz@K0B+2MّQF3^;ekkRL!1B*n1u.ig0nC DDKl8F{ ׍b9dIT "(KA>^%˼G{vXsV~(ήG(#vT!t5({s/-Aq,I23+XTeN^z\otF0EvWd0 А8hWƸ5E$ Et*ІR"V]z29(Reb^'o0ɈUQ;\=3;Ljρ/! y6?!m_|/ԗKj>c'J J /#b؅wjU5s%޾:Iyu542_SދA9641pG]81ǶEa֦m=jB['n@4v^;yIVI1(vKH;_j9TW­X闹k!96[0>3= Kdm^O2Y,$\Up@C?yR\1k0"0:N}2g`FP= XOGun񞇆c: ksFQ*7In8aPZσp{A^rJ%>B oDKiH59s 'DؕC[Ѹ&öb>=Mf8_m}T{PVl t ?}gq-ԘװzmceY1JP ')[2}ůH/ˉJ;xA"L_~Q֘M'%VDP]}O*;-rĄfwG=瓒1cw6eDTUU‡85ߋ~B7f8Q2nI;+ra}q˾sg!}O {pOf %/I7GPen%S~*=һjb7@omqSZMD=EL]e 2"@e. G7Ļ9|Qe>Q5cKO_C m^'K$6b/WƮd$ ߩǷAPbd;O['סxgr=2^ Wv/д,!y`H ʐ,%AHͭd7.`ki4WQOB-Jp0ecYv(ޣ*{5+|lN'Q;yty^/R"R.qE'N4ZN[mfykǍ3o8,-ޠy\ZBI5|+GKALOu: 蚊769?%QQ'>(ƑEDY # hN:+EQCJa^.־e|*?h5=DEep%v"/,18rIt:|WayH\qk}a-~D9 H(u.0`J UTR<>и#Nf׋ \tC@"޽FĹ%dWFjں\бɰ/S!B^zʆD[&t'үIoЮ݂fVKEHɗ˜z;v,AnIevA6 Ubz(,u츭fgZo (wJ|ugSgG\'˖ 89 Q&rZ#G˦36]G5PQE=iaz s_GO~T[nLK-J3AjYXtM.a)9hTwzs7qIS`KژZ.]-_03Z!Nr09jFeXJ}Y60`$Tf!+( aG pl\{F6ǔQ;:>_4l6b̦IxޚA7s|`Rp(3c8&ncNSO"nО;S`TW8r0O=PE]uRj̊#>;@=½GQ-Q\y4N&m5+8m -C+Bo 5ӤV =tLW eg!ٛ:mϺI6oyB6۽yHV2G1D5]d ]JvvCߪFWwu\jψ!-M}L~SЙ0@VldjQ~Woe3XOEq([U g<9'S(DC-5;vnY8]Xs1O-HŬǨOŁFS`%j*xi[`g8H{NW]?B!i +ξx qyv(=ѱ'ODdzo7 h9 oJ,4TYm$FIA+$FKTz}5WUtP<,&`FhIA~aT^|˼ `!P]a):$_UuOdsY.?v Z/Nd=]~d'|]bAEzKKE5]ܸZ[SNCqx!JZZJ]:oV#ƀ `Ue&ۯL1'$.]ϖilȥOT=Z;5%2X<\WZH{Yo@К׋M.^w3}}m+X}1w' QfTH~>6pݪs/OK;쁙E!IͲ<3mp_͜|<G)}cxVfݟ2342S dr'S$OE'_o%AWʼny߇ k-Xo F xڥ(ͼsd<>C]ОZn\'ۡ&9+M-g{Av3 +6 Yn4vY P2#Z4V\oLAUf$9E30~uSd&[m`e{Cc50m=e*"Rkf#j=2\Ej\hZw^Qᦒ)nG{oND,ilPw@nI"̛O mOJ'%lzmbfS 3Jѧ$ IZ+e4 ?,]Uuͥ^@:h:c4 ޭ]_Jeۣ(4qe-j>^ͨ$Js 0+Ń~m*ĚvR$9˛uv{[A0zyVz2k[eH? u׍Ԫ)w_ˆ(ݼr(^rjA>&DX\ka_R.m9nl@'PvՂpr$Wܓ[S_Mx4I~M ](Ӭ/{ }OIβ>P$lۈ@˺iC9<6}\|Rfc[|8C 7Qsi+Y^ ';tv$]UR/#՛~DuR.~x9UUyN~]b3Z0L ]mq`pvdmgmM:Q@A ,_AJY pFYcyhZU-ӚO>eɵz+ kRo>\;H-VϏ>8$ K{Z)wzpq%1Lڎl|y UiIns-Gtt@A&"XpipxM[ۺb@UI!!8($%[YH>'k=߿GR]{`k*AgyJb -Y|78&0 jf,&%V|n›hP`DF;,ǃ/ύJ'$*5kJM0KYzv00<<@Hr[rEև[0rO0a!\'X͟@XZext.KvІnH-UdEɷ~4GS;,~˾Φ.C(q[U#MM Cq"cHÙͦ4L*RnGb)S2$\$ TM.wKA*GȨ"Wc29cOyѢQ:!sxаc{E'\f@UZ8QzTdd{랯M,PS%5G?u5Cf}~t n^b33|"lQBj™K7HP;&Qzs~:njiG_b>G!AEq"cZng?:MQL@zS<~3BBnafeֻ$:| -ﴺ|zh,њZ 6.#Rki~pޝKl7}:Vlݣ qŝf NA3#3!FG``sć,#P!½6g=`EAx+HIxb$1ν|04qr!B4>X'2'>gS1^,x_SL2ô1ȍpzj#֪&Bl9ҢZ5K_֏^yaLuZ$LoAXE.[zQ="Q<ה(vcwRj1Pr/bwsn7Qss .wz=aѾ+mo đ!Vަ鲄=3d԰G1Q\p|DbyX$ZA8ѳԫ  9xD+R}4M;o\̔c_|u܊]Zu3Ȅ[EI ɏ]^K:`g=FNt_K;0MKۃ-fn'pڬkƖ*Dr'g;$[qg\/?4NFO]"(2 Ȋ9siG*Y.z<"@ƕ0Cqre{{VrcN"t!tJa7>,"׳&m>i#!Qt n6IvPAC[vs#ԢT0dT8-$^p~D~8yI`*wɚ~___u`hnI`J=8޶zi1BF̵- w.n݉]uj8-A5BHE 5U.cױ1V3|)Da#VfZ]CM@[G.ίao6 q#_`зI&F㽝i Fbf%&1l3V`rz) QBV?."MM%}^5`M?yO΃!-R ;_4u›PD}ly Rp Lb4hVk$MZV'AC}8/|c޵ 4IWmCse\P*{ri0«U?!ދuا^9 Y'xB .(WmMZZm 3[&Ez缻(R:xE*iŻZ>{+NG#+n 7AZ,`ѽ~UȟdTNAn!:E.J&幼ڐ*UB]sQ*،{@VcLjrO \}v[ЊYO9 +{1W|ȾdjJw)ආXq̝o?mejsrsǞ'WӴV#-U1##or3h5ֵc N(O %/ԻZ6>V1f"2zJskxQO|Ķ[p HPڎi˷E>?&ȩLf|YUb]Z|xbLj׫!vVP" Rp*kU' & vY_zrNeo-ԟ&󙠷( 6qJ^E\6ݧee'l>Yq9mYpGbG#Ru>"w˶cO{R}aJDs)=i67^zJ]5>`%㟸K U#JǿL\]~4UR%!A1:hE.%Pbˉ3A8oF{LCxͷV0Cңnﺘ@>YVtO?ȐHNӢ\ڳ5cR[ө'2Z\%ScxL_T++ ʒY_J?p?tGj\U<xUL}̲;Xi #WH2y/}d45 ٸ+% (uz%~T~j`㳮lbQjP(iNj|)um6BO7(Co;Ǒ_pxK1~kUyF& &q|L.=DPm>M.NU?&4~y.>[ē0x4u iZh"s"j<1jF֐Hx)lgbH؈szf.0ɪgXRԻXk r)5#WŇUkHbN$1؞Sp&$cN.13Ԅ;|خ7λe$\ob!u< Ѹ_/[SRo <֢6¬id%!읬}0 8i7dp`vl7`VX|;a f 4y-wVZg.6`M(Oo*,DL27ͮ8Sn2Nub4!EW>;ָ:u"j)Of}Pl}{w []*{RbG 沄d  gEM8m Zyy:;zuyhMd֩Z!dZȚ07EgH|NC[`]Q<1#լ,4a}x1o,t;QX(q2v Ep'K\J7Y<)T_ 패k&-զ;@c塞!'4x 6\&R_zjE>ƪRra 27ӬOn<֣ަ>%X8ٝ_y|Jx;l^$VZrtOXncT5 ZȪ CKXרxd]釯#}Q*S۲i žnno%^h,9=PN̥t4"%KbȮ~nբ4b(}LovFY:J5DT:M{^7x(lBi{ ) 4TmVr{!k8=EN,-^2)3ٵM)wq4qvkv:0b/Szb[Kf4jUScT_+[o\,OV-mHAS4NuE[ܥIk:[_qz{LL$ E 7,ާ=J]L AL4;Q=TjA9nK"ƻ~,Dfdj#g0{-*$zT>$'=qa>|#6R@PIUmd}8?l!{<(PGjC˽tϯ,4 ¶nћ#lp9ss)M`= ':yL> )qJsB97{ٌӜ24;Ҳ>w B#q BkA 8s 0vHqi7/*߅6.$î[Ɣ-?ϱ,C|ku7dZ[HwAcՃ)\;'i:mDVCPi_dY_nqՋN1Qy%(搩|m_)aGS{:h8 gk$=(S I@i$6Jx8K-x+KH2BK ՝^{i?/&ɭa/fcӸ6xědH]@5 DV'zZ&4O!8Y6ϣL{Pƛː?SV'FG~Y! 422sɿMo)(.@Uzdk6a>j ]@Vl!]m{ ΂WuZV6^X\#!Qr]L{^ɉF3.+_I}಻tz׋)%`. d^:yr|1 x/t=@|G[U5FePgxX!ޟIHjx6Ԥ=ajz+ҊGrq 1$-TX7kW_r.~dN%͊Tu,bpg\@[04lnᚭgLm99La#?j-XmNO3͖UBG|Rt Zv&tG߿"Q[_cl^"M)飪`*x1攪`Bܚ<"<ú-V? H̨^N#=Lq12 M<< P޾.%<\͚,v*-'%`]f) LhOX@EhwnÊݎ3I1h1AُxM%s )T7Y2O8m\E<2j*^ixORL.AefWj,,aФD_> rWG8Z7W D{MџQA}Ͼ؃;{աb#Cb0?ml5s58l0F> V x0\]헡71'~M NBbUml*cTff(Wج:Nk [oQly) *vE3fZ?=ѽT6Y>y–Kw20V~B&֚ YrqNέm)*X 3&itd YST^))p'a#%I@14 {T@zn&9"cZ%>Hn| 2&7LrNe[Z| 1SLR\Xm*͖jMzQ)2t[Vi$u%sG󩵩>E&Pg72I<=ߍIf:h]φ~PV)|+A\kL.(t[U@b䨑u4? 0#$Tǡ>TĪ"/T1u;aߚ˔o?=UnA~ Iz'OPDCRV倯ҏ1rVI~ľ ]΂OؤgXK@[? KӞAP1E❌|ܹ6gŎb);M4KEc}`H8GR XHp]^7r由N< v,ӱ]^ll0[Ey 'WRaݨ d"kP*8Yx?S~mJ^7B^}II &[Q_A]!<3v&U|KOJ#gHG&uԪmIy%H@N )5xº5J-?kt4bp{|P{tA)kdwfyH$&/v`-q WISXnip_kH˼yrcЫhE/CtuR嫳~3V))[߭5coÁzI*IH5%{+ -j652\(owǡkYd?xrt[Sz1x*}24ƃ , =g6is#._b5#ռB̻pUI"EbhPV}̠GGOVU!h. )LVF|L$ {hb!n=!ԩn^lvR=mU:X8{ޚ }GV0p_zKY^jN$>̴nzWi)l|CC- ^^{KO&l\NI烟͸] %\|'qEQc T,4t>\Q%ZZm֡|wW(?̴.XžU{*ߐXdZ?l'Uv@iwjHb<9X\TWMI4:cJp{%/&NeV N@QkMS,\ϚڄZϔZ-iDPR4Jn9^R0&~0n>Uj>%0vhW8Ի Ew=S.dqiys; ~,#79d'./b-3g6.Hwiԑ8I;ґ{rx^TF{asu!V0ҦCWd_)ZY,Rq=fy*W>"DUl7$^QYA?ʜ)Q+"|Xl(fHv-*ݘoK˞2ƫRvhTם g!үm(AB241sE<[u31nkF0Ң<45Anudu-qRKw:܀mƪ/-c'?(v -z/1gdՙ|d@Qj8Il5^9H`B5&R \O-,'&%%V6VlN$=Z+ʍ\|G:[Aé cȘ_LJ#LOQRHbG%ƮDt׬)d<@FSCi%I:C 24V`epO}#6,0}np݊ͳ&`9d'Qd ) u}XF5=ݳ35\@֜[ <\> 1-yav,OjR,B1swAFq(&Q_mv1gh]Ȇ| %ZOz? 6)h2 h `sB6J3F)YmAׇ  aoR{F(5'~[!p9SM;1$~I~a ͭjb"ҫqMe!)ϰ㩺B#ZZ y{x\G5D5#Dm~d^5 C;7H\;")` lR&dwNg)_oI`G'D>'Mvc p3` EF 8s/C0*ھ_uF{p7]}B2R'|-\ 7bkփ`Iá92Rbۀ u "$4ɗ,C AB'B |heD!wLh̲ܡٗ vHdBHMm󙱌r\q? P)#nA(%'𜏬imL mBUVr%\ |EpՃ-}J%iK77B +XZ{˓6jJ[ M)$1vzlHO@tJQ…Zx:޿6W l?C-(7ts%QQbve #'!7wq ?1y{ Ĥ^tY2 3+ב~|GO>˜σzK 4Ϗ?扫;|,X6^,=ZvY&)f^ot:֕S \bjSA$nL&!!W(ԗgȻʱ[N.j}ڶ.$Ӛm4 y*(47 ِۻ"z3noN"ZgO*@$mj0>yg%y'`nlh-& c]MAA{KGǃ7 {v[ӇR0'K\MU{eLTAx R\9 9P*5 #kAH7vdOOVW%p.YD|.ģ1 vk#7l'=fuR?c_ nEF8h>:@xYN r_Ҍ@AsC#yѾ[A@ޒ Ә=Pm\!΋5#bbSi$Q%j¢~CY_=5[%׻r)yy̶,$OhU]1p&b;m2SWnclߴ H*b$#n>*n~hFCE'9gWV+EzH%=6]l{V^kB;Jؐ1"w}g],laUm'{x|,j~ݦu'l]|{ru/f<+l)=6Dn{4w9@p˝Ozݶ$W;N;gTf3Xս̄BZ:4-ԇYBڍGF7)=wWKOyV}BF]N;;|Ou>yZU cwiC7~Oçk$P٣I9*\L\v2s\& f!EU~'6Y2 q՚#x4ܡ."Oj"2 2C)s) (vA@=xc|q<3"pVo 5: լq_-Jo0{(3Q肫[fOb'ъ>k7+cxTȯمIChڂWcgtY4hsr %qx5M5 ~e7=\L[%_$5\SqWJWES:=J!6*v_k=ɽk)K0T8؏c"ZqiQi%+'皿5_j r0 n׳^|6H}L8M~$ .+oe$k줍pvm9Y1{HxGeXwblYD" ե?FeC_&OxILP{̉6ztzf#*bwN;/:(-%''bCݏI]0Anv_B7'rA[qyT\O"l+$3.qQE,C ^Ҏ ud24{{}A4£B]WL.l>U S@Ig^ޯ/`+F}.iHpz;lvmLXJk}&/(W'Z8`Gd4k?ک41P/8nKMd9'3{|?JQnڞڐk˲at q$ "Ҵ $}q? s{"`slVR;8wb7"W1ǃ0PKVPm=ImK>wrqqv/_y5ѸF`ZwO}D`[}dZn+Z*#|j Poe1ɣ蹤< S4Z=V}w)5lE; +x@`x.>YuP_N?Ͷ{~nv^*.eλTva,G'KٟUgŴ0Nx->ğ7i3]/7l-!%1,E><ضp d7 u%"՟)g8"k$ ;C0kξc6A;IC[}SOsYbVkݕ}iW+L3zbVW~j Y6R]$#a0g#!lj;@)0_ԋϿj-% e>:pyfpcR].3b͢y"+r爀:^O8 ?fO8*x؝vB_Rm͛ \>PCpAƾ[pT = 㭯44a@ȘJ|P1>.^6 8v>NM*j/HE egYcTɲ(Ɋ[_&2\C $ճfO^(]ڼwޯ^d=m|&rv|yBvC)Հwnę}χf(]CNb%~', }p >6kN98wPk?A ȡЮuع/]%+izn8uV&D^={#>d_ݓ#3] J/Nӳ4Yw'=wD`-/'UfwrѷugE9c6 <ķܲ3Riֲi\rkIOqC <d-|߷rнs9pPY#J11vO|_c}H:sTx*i2VkVzZc%E'"fy`Y.,vxº"l0QE]¥ [۝߀Te4ߎ|a[bGR!qr}ډc[q*ISQuڦxi_wd E)HIƼ0+ї /(]ǣ[`9P{ԛ4lBMA 7VBv{B*Y轉H62 s9Ea5 OLܲ2߁拫T`Qk8TIJov)1P+v 2o$D9E0oVс~EI2CӹB`Oέ XCrS'$%k :YrK7= rE316U>$Ф/$`ʫ<Ł%Y} )PlPÏ=Ex3"VJ@{wlv0Ԛ)jKoWLO|g,FL04hxFM89Q!ۍTxJ^dN)Ԟm Ûϗ4 9䆖?V"sCfc3!]Ku Yo5f+:glf8 ι~sbɩNVizc`v?V)(M21̩\hR <މP ֡hV.H.փJ!}S(JͷIK4$~ a8dO!VIfYS-UnܡeKpK냖jW=:7\e1rzU!x0zr Dam}]? }3z[ӕmdsuqX=fi@gxdl#* Aڕe`pbaM_j߆׻n~<F)%gUd!8`N1ڒFU<ͅdHk.~9*.ǨMo28Cvpwf q OLB2a4I2IF:[K@Yߨ߉:*TSR!'ruXG|gL@9ןb4K*p-IhR¥N\@<̜ԷFI&t nQ$]xp,O\.>0,IRҏOׇ,^캇zv8PsJNWNV;Co/n3݇uͮEahE67Qk#D-0 1/Z)8,20?HG$d(iSYg^Uubh7XWv!-؎y^\OQ|c7؛| Q N>ƒ3*ӵu*җ qVAs HB]gzw)~zX`rJ/u:۞Qt0@;}r:h"WHQBl &[qTL{Jq3쏑^w0k9ϻy@XNAϷ8MṾn>c%wg63ݞHuڬkCugWX}j 83Vn)*24C|;@D8YLr_d;!pWsY|y :͸`+Q|)x^pn'h҄>)+!ۺ&|btίh9%Rx\,ڼ7S -tS |vV'y=p]CWʈivJ07NoZ;xBI 5Ft!aWncC2[G WF~*P@Ub&Z#~eg=d.6DXHVMby\ӷ`~bǻPo; *oFDكuv :&ęgg4RT"UU8I醃EN1*X ܼT w:'2f=Sg'L AI>y?C'Ji:gp}(PZyL`0tO\T YrAsN8`0&Itx 0"(j`C2&fUfk'CNMJ"%FҥNR `I252<3Ug4]I?6D%} ֗Gv~&K$cڽV'NK}C%-D)LMԎT-*c8P̈oю߈9R]2Nyxl{x֝tr*Y\A@.p#)sTcT ep cİ=5qD ȖJ`RW8' ]< 1cQUGQc]mv;g7zbBar C'FJZ]Muҵ xvL/Ŗ4FAZ \zpk4TI am+|= YI=H7|^zl Z])Kg2h#G%b, gv5 %6O."4cFh5/Qg]c PE:Xu'LPU-ȳ='4Rp}dP4G}0dKK ܥx2IGLG)0RjnJRi,Z*v\ !N}뙷de.N݆-*8!-R]n .=.ϣ \xӇFZ;A #NG$S9&{12kDed[cۭNn1١a G}UlMU/6(Rk)|Mv皼K;NxUWNjH4= 7)|'l:&6[3#Ӭ]mMaELYWV#C\ԝԋ'/Q#%qu 656ntIֹLB%2bi:FyUVԶU{>R nn $El8@-W;axӊӰZܬchQ(ԜuՓiP%N^)YC]'`4/j'ֻxۭXtU #0ATp|ZD RhK -%UM^x) ސċoٺq4odV5K5(t!,ia,O+ gțBjvc0[ '7n lp 0=Ww h͞wPl0-ՆrCcIv~2t]e&]48vCL>}<ff=60c8qF*YUl#=څ?}}[wCqI~_-?e²=g3>3E6c>Vn/iMWΜµu~t [5fHEf^8ũycD9pCGd,9HKV+6}mK;ɓA['ƶa4yi.G~ٓV7bc?}mB':h=Miƀ+Ek `whm\k߆ 0-sm QAk/ XZ~FFcHh K*Z}vj>YʻBdo΁6CZ4ß;. $Q,v)'d L2n{$\5y5z% uFJ)}nLQ e76mAYA0YZi,R53u=gFhc!_=fH`#A\$\OM Whcg˕T28 er687ѓP'ycuuKakl`p%$خbOsK4:RՈH~IX[$zR>fN(yЍo+VQ2ŪBpج;)[AOcۓ1N^iji3"wixDhBϯ2H'֢Kஈ=<2a'q$Alp[֋29Ϊ/'kXE'Cb^(NZtM>tˬꗍ%4`4%[wX+u:?h.E.M%gc>*ku8%ѳk!zx2;u&K;KN\G%EldV` I|a|*y6+#dO'AEQ^f.<Qd)b͖$XF3P7Y!I媦2 Wn8z&(QTM=zjl~aoll\F2RMťf90"(pAրW&^7^xdYW5-ݪ  @xG#~p9q:aђRwi3Dscw(m|S>=bd$ZSszNyԽKwjC0]{ԑrIPm25 }Mfs:VeN+=#[ٶ;ܼ/eÖڹf^6^j<uѣDGK*:QƭDW!_DixIxcuH`C8`48TT5b^К=o YÃu~6ՆL>yÅNvR+K0 #^Ta[ԣŒ.VH~.fEʵB~+R\SO $4[m g&kJ11?*P m7RS2f b6EqEv#1m C @"0;Fi Zb.Y5j;ٵ; )N}䪵2n=vHOgI|-M|*bV/ف߲jC(C<81qRXi**kň)I/m ]}IucYܢ8!EYQx|11} 7c]EH4ϣ#ȴB7kFC`0wx48B*ӻH%GĘ6g>q~涥8-QuS*/WC03ڏ! |CtmjJB͇@ MՒ܅ɍ\Ͳ(7~6ڜeWU`[5yȭlZ|)]pMh܀ٕFKLGIǕ{peK8vS`Fg Jc %4XA# %V\Nݖ`adʾ#~ ٹLDc2vNKA ` \ xIеnz"I9?(BX0QTsgg=7jOzۺ(@]6qOM:<>kx0c;^P%W _S<,g ^؇a֩amH<Ʊ7DV YJMÍy"{BQ.$ ,XnR^fcC$6!C,s=)&yÌ.NO9mxx8Q]fÉ<>c{Md| )᙭9.w6AWs=)1ʁz)t@LQYGx3cctAXʾ䇬|wۘi#'>֧2倀g=JF(3[;\.P"և8W,Z,5*{ԈW?'z'S-|tUy2mνiPA;y.\ic?1}K6[ 69rX\nIo`oFͯmG~0@J̅=cW@{LL~O#AO؆dۣKϼO哃VF:A4OpОL:(9B*cXzy$Ԧ*h|p gǏӁG햎9m&OyDz.XBx}֌\7rp:)6 ={N7LuNl6m$˜'wfShZc5tHpA6}Oik6;}/0I@sLsfƇPxMC#(o:Yoqq#9Jzʟ]Z;^#zIѽi^% hp1]l(q4d,>#9Lms$6<еv fXFld%Ĭ4wfs1V?, { ٺζT#D=2[}V\*EsXj\s>ڹ*u( 6j{((OS0e:'qܱm7zT4MR, `9H_{^'l6ݲ%+RoZfgYrB~$K&ZRxׯ,mQdSb6n=5_*? jn'ԷnQܦ9rҿ7C` [R ;"Od9(SNm"0yA"s:OnggJ艒lήfn }^5 bxCSy*lP ץQԲYl=kq pY| ](ƚ\8+\VHC~0?f߅f6 @>s¦y׽tQU:#1GLj뇡FQ?l*}30/ӆ]p|d[TճU; w WM s;%NYYUGL8~<6fһ1VY$-{v02*Z!à FcH)N<OҸ^b VL=j뾄ex3EƁxyp_@ /syҎؗӼy4ȦɯDyͨbl)֠StDvV3Z1A@* o |4 hdyqQ$˂ ̯Y1Ɲ6ފZ5!}nCn0,؝܇H%a#E(s^s(l8!ړ{N849~-AǔՕi\]E7swbdr^&ccogJ} I=ڷRl֥ 7ldy7`WYcĂQ'fN{ؙm?ގe[֏SjO\}A]SC]֝gh2 k4uژ}Dj,C~~|+N,a]hf r Dt nvîwe/"~ÏۨI{$}z"֋q!@0G,LpU\= ('qмnŬ5 mn>ޚ!ӟ[K>yiT6=#uW|u޾˦}d!TQвgeD,Y}#T^O`_qY;yݰV$}vfz,#2:d7ȶATRʡݍ*%~$;]3F<΅˞,Y:j Y IH\$+W:bf)r=?<$Ξ^l9* Vq܉Y=5>)7"jgSRH>y7qބ}4.w28_uE=@EEx L֟+`/i՗I.vt̐bBCA7$>>.UqMbjwj7o6fwh! AЅ)-#Rw邐= 1]n%| Òg׃|NA]c):htjIbΓ'QI[19G 0٧SW ŞN:a?98Ch%_EIT(=PLJa(2 L0U u@P#WͮIBAA*ucu4փw2iv>'ʆIsL`jl*(m`Н]V xhScb9ۚ!8` 3 kh`e **LB}dKqp 8#k \ lHL-]Aoܮ_Ϥp-:˔iܐl;"'c jQ(GЃy_'HkTBjVAHUgpMxjrw{˹xu[;R&JCwmLj']m&Q4[ðV]BfY/q%U1]$ObNJ+4)=XJd{&fVZP+) yTuOQ:|zÎDѧƱiP{)$-xoAbABYٍ>;wfYȋכRt֥ot4mn COWF x}ri1Z=h)-[I1O$tnz1O~M8̩?+>FŽդ8[~XӣfT:uo#c~M@ԫ+1,\憀ij?^ *Ë[فXϱhց}|3>%iMr+:`} m) |ȏ 1h\s1pDj.cVQ҇|O +61:Sʜa\A^o&ɷy078Fp? TԤ.+K S_f1{~ |{J:-J[mkHtXuL䠤Pj]#+ֻ*=fB(AYrTW{fHNj~OFgQ&$B{!k ȷ< IV3g=_^U.$膹 %Urv'!AΙ(A:ڨ Ѫf'Nm{ л~"*nLlTK}W78 }S!TPl',G@Fsv$)8Qbnt5ݍB'&{tu {}zyӰ~5̑z ʇlRUh¬&RW}E d>7&d&4=q43FlOt:l!6Gzȸ{3:f'K n<ZSC *  2l zb#Zš3Pi XۮܕBJW " TG>l2ߊY-?ؖ3: nw[aH?!qN>zu,6rEֽ-~UYNeKLHTþ$m"R9#k.`R߯y<8S߀Yaw-fD35 3^dfoCInRp_ni8/l&'~0kjtQ-%=()lH&6Ԧƈq sO7`m7ܯ)9ϱ%< ~6\CJ@gh'* tjG'v0pJbjav,4 .8mo>ؼI3h=zgk4i 4.%#OpW'Aծ{>a\8kY !U $ />)SvFaEc겅E׷N8î?S2G9dD'( }uaRrbC6r(] 6Qnv\]q ̼~E}ZՓTխbZ/!߂Ӏe,4!92tom7y6ugtE|U*.AWYη O(PۣXΐp׸a٢S# (j8׻Ro[ S(4 )x߄#tDTʮylp'+[j;x3j/6?Qɟm#m;;|jje嫬"C1bu<ߠ4dg~ ~~ +|vRC.c~q!4l80@4K8 }pa@{sz녰ٻhvߠ>l:>7'\^>+SOgSj虂 5t?葚wF,þw=zAVd/ήfW\D)Ah2V;dZsȒ+HDǎ6o 7]ꁂ*S=&mξxic3N7a d7τ&[Uv ~'tK=I{0ND|Nc@-P7ZNQd\rHv{;bZ]p}I>Y,btM yyvR 0=ΰtvQ~[)e y'`**^둻yk+V` 935tlZѧ߳WKgj;^48g!+go!N$ɫ1~.jFjS]2,*I37B ~YW\WE7eypa"`T|,Hs%i}X Դbep"c:Q2m|~@Ƈڬ54t")!-_[O];%wxO"3|n2%DdIWхH^ x[nq]FBtuX…d@7֧U D[Z'4DnU7׾Dl5Fj/kQ<(JmT!fyjv}H^G:?$W--e8O8I,t|$H'=)oNW_3m;KHBq%foߍ T[B:JZ,7ᥑ#-_@< DBz}ɛ` K>w.>pIw֬R;{}*$.&C!}V2~|EĻ H`T_ 2eVkJԖr$?;!l3L(b6c)uQxd17K*r,{O3:Sb2f#CZ_N0s<# ,_6Jӧ09(iWGE ng!dgZ }}>ZdG4[3$i+t.:)'ʎI߈sb3'MaI=ЫO#h8ၻ옉s^x-g\hu1yKZe#x.6rCņ: 'I\ˁn$zSvh{A۶=!$n&B>2עFxj20t&q&g79Ol\&KvX{^\`t]zlb=u.X8Zcɷ42y1 _67f?q$ߥh2ʜjhTRڛ2!'ċ\'ǙUdl-p"5Йj\*f]@vI@;>v/뱸 3TU-`_Var1V'2:.w=9KO.ۘh Qab HR4IL[vb _`x4CjcxH.{z87jeϱ"f}@l?`'F_.{ 1HD__YO.nзDQ|D9MPrOdh)4`D4Fv4tj3Ib]\l |NdnTC9ϷL%ӣO=g )eY2݅6rqd}cdIhiR݌ؽ1 0q5#Kva uK*mkD$yh1+gKBOJ5g>wL#))d;~y#f?[SR0'D!fCƊ,K& "\"Sc1ļr`cf0k0 +ᢋނ}[s>PpAǙ%ԛy`D 2?p >CPF2<1KfpJƟk޼\3l^ if5$o z[$w_-TTGQ\No,: !6f9/Ĕ+@9uh5ÁB:;9)nVjK#bTu`@p:@l,X~R(FXkt~pXMjn'`Fϑ.B lPF/+V/U4#u]:j{%͊8]5pnWq@qbC*ó3\Y( (,&4xW?{~|#Ԣd \ߐg+0OYGқ/~rhqxQU tv2Z]¾cKz ;Li1Hb`PCry|mnUA9Mȁᘠ9Se7,Ox lׇ`7S9UȆKwJf׶Ug Ÿ4 yx~Z\FYfQ:[Ƅ$GܺfqV {+U <~`W] =z|TTT_ݮ)M{]ǁ}l[ŗv[.c7 LIWs"6yL6^3F,xW& kċ/ N6Y7ךow!_&10 $RbS%zhU#؛dɕ+K}\B] JT`7ċ9"[{:q 霹C_.*Zfw#tFǙm*%[%& H8kըV\ UV6=o>A +]/^7!\Tgn2GEPkB 2,>/"Jxj]R'9P7`L8\E?a оx giRlzL&ye ?uҚA8;dt@{NPx^G! Os| EQ@yrsH%YΉ kIM;Zz:L+q gK_-G^ @b9d 6z>Pìu`v5zFbga>l:h9ёWH$n4Ƌ6^۹)C}V&JWҝ `':&IHO^gi<"*Mb5E0''] y*ݨI֋5Ę業Y2 Cy*Wx :n<*cGsUtQǮW<ЧpexLTs)_]6&S Y:k\Y5KT,DFzR#{σ8[4,MIq["J|cߥJ6 o-0f{ ,u-`'U'ONPSP=()b%|]YF+bӺ䨝1@ZTlPs>%8lU\C+,ݨ1+2)]K01 ǰrpc/ k6">hUn2A>` RL )Uo=Fy 0v>S03L;-9&*?xB,xCU)446X2wJ ںc}@sl6ߑKW022 f߰}NӀSRjN[w$dǟ5}سk%suF{b4g)9k􍔳BQ.SNzɮ Rp.F3\[㡟dshiHaPv'R~Ѵ;]T͗id g#z:3;ܔJXbr&SH #Z:`_˗ZEʴ4`*I(BLprS@fҚUŧC*U!Ҳrp= dH+TC^L09S.2Bt#^%[fm|7nHF;>Z>P ZGsX:x^^>[[$!A'B5p~9ݧ4COAv-;&Q}ݧғdb2_&#u]b,Gwq۳ēִ Ý1 p=z,h`D^2jE1 E 3Zy|"l.Vof$3.c i,#Ҕ7Y|IuuaJ%ӻ$&tB{ϦBo {;C8q@5߲e'hwK$ s}Ci]i0e.u9mïW"x23W@iv)Y m"OAM@/tT4=*Վ&b(;?9$9}DC7qmJ3=3\Yn*XlzH %ݸ9rXg.J2utr.6DiX˰/xL@mBЃ%XTŒ]ӟm/7zXReO)QW$,_ّ݂BlMصPA>C[b(-UNx 0/`Yb2/lz XpL#ÜHK׬]@LⳇDv +Uj!zJf/~I.]#g 7ZL~|:1WѤ="X#&3_WejIm>2T(\L,v )2y 2,1aX[g[2bo F]foe9k{̲wQѷM 9tBU#ْ%f`m^lF*gQ83{xz5|F׋Ҡ fX_T_c)%Fq}Xl&I& Z&>{ ~sֵ*P튈n4︺%%nq1NlekcnvV.Y骨LZb)c^9tt78\%@OWl kHj4N ũI?m~E}ڿ"{3mIQm_!S {|XAڑ`!Y=[)BfQgm|hkiCO`y߀a#]|na^>kF"xz{jwSixR|)TKQ3}K۫ݘ_ P]PJΪJ /|=>d^Gv>ñ]@FꀈX|7-h׫6(oץO- /YVH}u?dxDCZUNl]٦r * B%=V![d *9+&I4!8 4cォ5Nd(} *=eO_g g;%V\~IĽ>)צ1˲,CoTǑix<ڏ,ڱ"Őa e#>\qݘ{+Xiѩ0bH1:7%S:C㋔ e|ݠ.rZ7m6W9]Iq!_#A[pƑĿ1=v (a_r &&m9 pƁtXUcQPfP]]w0|G{[RMU<%3Ůy?'J0·MWKǕwۑ+&x$$+o9R4(T{;8)g;pF2cIXK ʗ7nwK|KZc)#-bKWF /ަbivnp{CrL״cNC.Y+b :C?iл kM/-6Ӯ HRNC@  ۈO"bV<}8}l%lk" zӛF ,x~ue t/ctvG%Gɲw 7'x /1z pp=뚺F޽:$pE7 M^n"r KfG{H[ɠUEJ))r!vOXø ۣ[s_THW~n$FI,)4H+:̘ *(4)f r M@m᜽׃t>$GLYQ}UYޱjlUk'&mqWf2cL$w X+H3nݑZX7C0Wtуe< '>A~ن.Oō43 Y_,VYS?S\o ] HgiUlHUt)7FWeu[\?B3D{qnaOE֍WOWivޒObd[rg[6`&OEY҃o8篍-Kvvx1RL}"PQ:dXZxw1ۆ*xGf3<ek8 mG|ZQ1 D^@ҷcլhZkSn-3ew|x!@b +S=}V7ş{T5@.ydMמ>ޘ-<ԅOoBT0s)cC͙A"'6HrCOQ \i[q̀Xx<&uW4Cz cf#iUN)]0^? 6dN%')!@A~EŪoWRe<3F# o\?cdYm~-VIȊ59R 7 j6X4#0}Rz;bA+wFe)ȋ)}jLOPA}âↈ.ȅ$KeU x! )f4B\uw32v2.F}p"{r1V8 ;$f7UrsG#cImEвòz2g5*@j|5Z:Ӿ|[WռEyl`Cg Evl.h^%sGw ЛGFo؉5Tl󞀖S3$'"!ǿIf҂te֬™oUax.)47Ӄ Ies#}xdaLW}GO7*^o]KAQ~3?65+9j A bPKLtk2  )L+\ChzZDrpoԬӓ'aٜα 0L˨ufIDWKu4a3_̰$؈!-KˮP=*ڪmrҴ%g~@9Yt_DO4ѪT,+5yzJ-@hArN%^XuUY׉䆋pb ξ<h#BIZD;<&EgYNIVn]eoc}*!yx8(&Z>IJ 9x3 zt%MQV}OaS[q/!s؜W숯B}ίm_-O,I>;n Y-?TV[)Qts簓BJJIx\B}\ḯ'99eZ\Jl!bHxeaFyd _XJĖ/B Xlo{qLm;~Q<1\Bvȍ/챻iO5bfM?a| FM 6su-p,-mo+&֘R ܁%;87S"uL& $\O{|oaZV 6?jGK/VĊwj=> .P|nRDj3?9 mvD4s;-qOWߌ#B4BһLM?Jw}*ԣ_)v, 0Ht'4⾜;UrGD[ˑr1"c]'ha2ؠhdEEo> KEjvnr3HV > %>gNC<*ŏw!{m=]}mI,r; wo /$F28+9"5$1g?[F\]]iH0ubug]E Ni‘o` cU~ 0T+{|-1@硹qYE[a&Dz$tmop_i?(Y֏,U.k]9LܼUNUx2>h6.I4cMng*cLwF"%e/&.;DjO }4k3FzClRoaFsq%mbIɀ$M%YޙB+9܅uN͢v|<[HOqfB˚6*wyڠchQܕ:^m>qC.`"/xº*FU}2'LLS0=+ 5_?a$& l@ptXt k~+7򑠳>qɢ̑4At9Wo.{]{< %գe2TZy~PB Z:K6wi 04HJb\jȋ.7a!j V}$}Y8xS86U7ܶ.?q%kkPd$Poc4Lf?pN'"mٙV'xV*6Ђ6 &X3yܽ#wc[[8TI;ɼũZmJRr%n&TgBQo a*|n!5ߴb*  q$%IC5IbI57Nʔgܺb FEVZ.}z:`WSO>1y8vtr)~i!)2fz?.u1ĠٜBJb\\ᬔ ^"4OdC5'OC*1xGL]6%(L]2T MUrA\J89/w ;}ߐHYWJϐ,?!秒tn>la#O-J(M2VLc_%^kc@rv8{p9ʂmm[W'ȹ˅^훅qfQ=\C ^v C{u;1q9dnS&F@q#ZM}fm*[!xlbU/e.q7e5{Dv99]Ux4 ؇bhE)57G'Yag;!2f+%c}2 y(n5ϫ4)tA4-I\܄>`n!vR ^RU쥞\VoՙpڰxE T(-><2>j^I&6]_k[=ú3 iyr'A/ d[XYs!wbWxJ!åp?-Fc]D{X 3Zg)\E ן4mawdW»p4|j}Xv}F<W| &o܋Xv%Mwd(㴧 }= Dp$lu 10ԇrwk#BTM&=#w]RYcnisMLFǻV6}R&i.YmȠT &%m\ccbVKa_۫*86Ǥ{mw0n a5)LS p*3_MRU%%@U+$-9~Z<;~~"ڃ^" uiu)u;6h@5Ȝ݌h5?b)>~[I`C>c8-Y81.u m)-jLY״V~PŃ5YͱV7qTK9hLUؐd[Mbԙ~==x.s_Z;y~0|*)~L[o=UD[& 3UM}zs7.{ELI1܄QM vJ2P11v@mN&WorB<%[oʞ44m5nvJ;*Y`. Y^Vܦq fF prc'x 2t!K`<$/ >쬵pHtIua-BKZF2^=Et1E&| Y~b"mN%:9!؟7cmL3Ery/5N:RU&_F49e͏'&OpigV7sX'GykAxZE9RoJY(GO КLӹiNÇLU,puFC=bg[bq @9ݵI(nLWgzcl }I"dN(yZQI,YX6)bBo2ƺxJ ,Ϩ6ͣu%ݞI AѶPUKˢ>LEIgD3Kc}e@moNkњ·I8 kd$6׾SVE@ئ~H[Ć1<?ҕbQs^I K v^lOC9lp ?L?M$cqz7Z& ]ctgނ x9AN,}*0}"ʫ-FqjE2xuY(C7Cq'_"'Drlϰnpq:Ĵb|Ou4 \[^\92U9ƯNWw4Y ‰$: aIQVٴiFbӺHUN;.\CC0.SR8j8ƳupmÅe[òx1IE2#)p Ò|Ki5M1]0bd j!R|>Dy`W{VSP uU=#Pt%V~թ?pȚ/ "[|tK4u#5C+M?sg/+v>gp*ȪFRI~rt~;|ޔPM 9%I\P?S^>&o_4{v p@<h\cwD!ʚYJ]D[W59v6 r|a=)΄Mpt|m4=xGSB7ZZ ./FOz'9Yb * 38\$[d_x&A#z})6Oy~2>j|@ZȩTe0d'|+1&I?*c=m4' ٠7H:?-f(c&#'" E_A7-Y7bEAT1#*eIJ霿Y=D_mq@֜ANɤ9jAnD]mz l<\ck7wXWHUYĆ83Mc߻"zliE?! bDs5ImlK #j3|a(.3iq*y[:XKbx2oxIㅴ9ty}"63m0mmH!K]3Ŕ4|ȼF9kM r+CRR3S챊5Z;cPP(馐/|m<j-m0Rj#VND#tB e2`dR+Vaw~%fpGx`n]@F`'&≨Пj,r(ꏁ t~+^t_fzZ\H;tNeiȫLaJ萟b lq2(AvgP!IleFYĺVtV)jϱlW Q/!<@pд< 7j0Q@Tn7J04uam?C2SQ !`'+&{p V5fo(ͪ诟ܳNp=A_O>o\u#KH"4c^PؑZVpKh(ALoٲーyyFp-xo\t[w4=n9EIiA?sGwvU6(vt#n܎G^ZFT$RkIZP|lD'uʍ;ix&u/kHܸG8OiY[vf5iLUȧoh74w҆ 7N=Ay]+h5 1i1*h)H~LQ@*rtW+2b7lNsAN.HYgEnk\p/E~TWٞ{x}]Ӻ)jzs#̀KrFAASJ í^Q.s9H'te#E@sH'%xyivTGSq\y /lnFoo&II+x 8(ߦy;sSMg6E M"i5UGx XX&(cmiHN|.:^ӆ DD[~ى Beq?T'X:U;)^zFW\p9ͮiir(ꞣBm:za y.HQGEv|6YO8g$ʫʒK_J[۱wg7t V5fٸyہq?g!^ߜ+s mSc\(6sV D!k4KP` b&ŃeThA3D`>Ux5pT78{CV~@Т4T16L-+%4S*T3$ABW:0/!qGTdIh<^6˦sT·ZP큰QY;lJ[p/}8?G *g+*}>o}?@56vw hDŽfd--epx3eÍ׵cY&[Q $ j;ߞ%zoVuC`Rz&&@^$F$ya&Frr:Txf_FR)'owj(歔Q ~6LR9Njw]Q.;Ϡޣ g:ΕRx2XT6+ۙejm M'8ʽN}s@jW"c%5atcͺ'l'&G*g ]pdq v C؏V}չn`Lͺ;ȣ4: ~Woec3)ލ}$5 q"mͰKـoZk8=AY^r=Eɲ(b:p=CޅfytKa7jbYyhTIJwt5ʭXAӉlœR䥨0Ξ츀Q*5O|ܴ r,I P6N*MFՋ cUwѧM$6NTFe P4k6Y,W:Zu7.v}u5ԋk5KPG,9YW1 ͛ńN;|-1 dsZo (כWD޸7 t`z9 8SuԶU>/&`K4/IsSy/l웯72~WIөbJ7ǝl B] s|XV\O7?ňlv^nȮK: 2H&X:btj҆}cʮs j zo^ Cawtϛ){D ",v;+31JmLW_ߔsGf2-cr{?Er<b=wx*MV`Fu}!tX֧js,ʹ8{ %^:Tú{9=*9}\['>Zu)({pk2dsC?;)u{3HVGa͚. S>R6egʁ4&+bH~IhZ߆B] Ϡm2f7j|8~f8W؈ʣg!H ϯs?$D?! XAQtyjUQo\)7pz$[icV֠_iQBrC%D&ђ F([||aUwd$[fy%m/{nwYY0ݕ;Ģi&UO,`6 eWVC*t,[!e%iIk] -_jd?}z̓_ ѕ[L$R7v2zթo F)­;J:SrJ㱗W]mh:9 \~=xnd lEPtD.m#uZd'| -a҉G%0?,?&d3F+㔈3 Fi[;輙h}5u e~m U<% ԫ20ȩؤ$cmž9ƃDTiAxDV{oIn*9:PhzFߍn采2d&mH#@ޒW<!µ.e$ VWkoq_q>1uB`0ɗn[ %`Ӭbtc>5sE%U}G?ӷ@>cw}SIG58ҶU h\Y&k[TMlu&2n1>Z.`g͂-"71:/@幌I#( wnnpk62_=yEaF$>EYP: ,8:&`wJaSh^0 M}ZŖxeQ$yo 'OѬ1[>OI*^spq$wt~vn)w|cΈ*1:|χtc1 _nW\Ѓ s@>pQƙ'"}TFBUJUacjxF@3,x<1$h71pTo-vA$%?Dnaivn$Ecz600`Zg]t} 'xahAx^ XC³~R%4dzF˄;Ԁgl4ԇ7FJ \ 894yWZӷl3dfi2OQQw/' mveI¹2 [pP{fk<ϸ/J6;p-LDd<)b: ISκ9Xk=p!$O6ɷd'PL|gdo^w 5h¹꠮ qIjqN2Ct^"٢i)4uQK*>3ԋ=|hF)~咝(9ph9һҧ %`[Zx<|ʑ4icN*DSdc;j "E4>ј]oZ}I 7[2U%G.'1'D¸ROv5)t"O$'1|!7f[\Ww%[RFuDԀW!v]걷ᨂWu~|Q9`oC#H+]'wԢ jop$qV{+%̈u]gsOWrf" ݝe:6ɨyJU$-W2e҃1yP"!~rE% L㰫v,mg&}&a׹am''O {YNX; <ؘ♂|G%*O$gK1cdb *C+ z hu6Y y)y^uǺl3uPΩ] k[vMiae[+W.8wetúW#.6Q0ՃN j7Z ڵmV:ڳ̙Bo31q-m+ś*C#퍌2]ENb<D>%* Y0&0Pe5@gէq,zY=XAvT.ޱ4JzAix11$$^"HGל{⢼% x/>}[mFFUz?R]/ q{sXYrpOUYP%Qb'+dzCn7BR*^8p@)A#޻3ۍ21L}&ʄ0Q׮=LFHRگƩ;\( H. )s 4"jwfܴkN2oٮCDM@sWM1xNȩjd@o!`!Kx<*2ų!Wf߁01܁Vsp==b40}HѻUA ?aܻDtǮP?@UF.jFbS7 jl#O uOƪ+XqCl`o.Wqi|[o]g_q(w0ēi Ah΋2zu:\` R#i$zqDHK%##!b3bxھ SJ;{&'땤bFȴrOF`uɾR> (fEQ6)i紾qg~ o5x>)#T4%O8Tz%fWa⢑]jiŜZDgo׬Q=wXƯ)0u`A=#q:V0R`slxCd&/^SC+A`~ºOz.uIW7R֜$iVS1$>4_*mښ.x'(F=VBGpulY)RsńK:1;I ="d޽_^M;tgvXU`Ք .\$W6p> "'d"?to+T $-k!\ʪ3$s5\yk#lХY YiGPNu8tdN0lL~bhUIs~E}\XH/k}^ 9NV$8{OFF|LuTuUjdiNT2~{ LGO{Z\|;˺Go"Ē-Y4bcej>vC>6J1Z ]#dm1^#s|wC5mܓ!W5o\ hQFӂrXO*Y  ĉb PmO_ig{^LW+\A[3لw8Fx\!<mk%!D-uwkrtULc &GF&#pM@S8l7ƴLbMHʫ_[.<#^dkUJM;xrbw0 UQЧ_mʘZY+x27gEKQl^G>wёFPې̒nt[-c}{g~F &H^k=,sdU`65i!6tt_̻Nu9B#Ech%*ëLJ^#Sz',Aa@VO 2=B=^w.9{0|r!)5Z|hv~;sp>Qh$r$EK GE]2jz8s OM _}CUrEesV},ݶ,n+$2sbPޮ KtT0.KRk_Z ?~}*ΛQ%T'Xh/(m;MAK~BSXdAV|ܽ'9>1X%nR:~58N`(ˈ~)8u&S6@m{;ޫ~\HnqKi*p}iF0c2{ME- kuo}WhH&'O`aoz ( =jD>l0ùtXm㶖P4]piKEuXg ~v u;q13Ƀsכ]pO9PO \;`PE}0{˥l3] >}T]On\7qr1J2V V])mE?ȨneXqjĠV([ ˽eR(g$%b g+y_vq,8U]|UV؛A3 * J>8B+ڙ\57-OFEw,[ ӎ*.64+!b]q1.I"hek7c)1I#,4+#i?Ѻ*Z 9tљ40zŠɟWuGȤL 3z~ PAn9fX=G!'4[CJYsХiGv*C:|9d= G z\yYzua~n!AhI6>1ToiTR%pn%ܝ:ذ`{%20:Jucy=Mi}9*ʗi7`_\yq^;`=1HyAt.iG7UzYp5c,QD=xutԵ4 qWK:9 %~X~3WR2nacD܆a>E>``VVz`G\zϙi6A/vqyx-HP{k8P 1PT8㡺1G_Bx ḘX$0ΪUvS;^QÏH#+-^N,mWF5l8`=6TpcFԝ-ۯ"iIbe_e5FQ $GU 1Z!.,IyJn!k fY  H^I6 }C[AWCI' 2B۹0~^c[X,у/uz^(A0Ϭ,Ǹ |is֒`~OG"j4vȲcixQ(&ځi'h $e !{uV/p.-@'GgAv3Tm`.„g8dL4[mu^ sQJ i+yn4Qq_梷 zjBjBie~XD+ 14 KWm>aL\b WUom*%ME|ñ_+X5C٤K>eƼ MVtQ=}h{yIp$Jڶg0f8prlqlJ-2+ e:w\XBB<ڭM % Fk-TYdi =fmDajqgS3αWa|Jf6e#V_)#ބ[@`0|u88džbJPQ~'Ksslp\L#oM.(O8m]ҿ\6" 5xFO/-[aӈ+sǬ08Ҍ^Bvy|LUjp4jC[%S%d:xwA끀.mY? Փܒ vZcp=`?xl͆fa})7ن?/va$S[,vrYP 3}u=n.pǹ\jB^Yڻ]f$>8 @!YOaFi,g &.LڙMBΨpP<=By#}K5Ful S9lrbGICvf0nBvbsNHjVH)[ӂ0qO8a5cDUxրΕ&):@ AhFkЕz}}zL7РnĄ "OpFo;;+596KDҥ=9xzr)6ĩ#>@𶟥nA`Scə&?(Q]hQw}>/7ߏZH y5 xv{ i>Zchq#TLCSS#~׋bf jreÓ_UyLkp S٧bǐɴTlXa"4J 4Q6RQ@{LQzʙ$kΞ[Aۏšl\ra2n`Qi@yeб&)9MYN!(Qa`Xܛ,w(O]݊+ i<e*u.ؤ(?2%2A8S/R7stRryZM3`#Bp 7ͺD\|酗0@)1vMbQjN_L;$S/ۢ.okkGSk,ZV=#O$r02zNofyx+$vxGM2knͤq OP{JrewVX>3]dk]#cPrVB/V=a&ïz{f@R%VFԫܔ $g110̐|6Ώ e W $$]H_e-_^B:_%JlkB`҈#9!XO H7t6x28o|͡TGm>Fj/d*T\kʵx9KVJi߹t.'~H¨^bwfC*36 `Pe2 j&"z-/t D!^6QΙC0l9˵B%olsSq@\8Q-ml2jˌ=OlL@շz=Eu)zҥNwU/h}%gC#Ӱ7BdiFC1eMq 8yu>E]oS6R7kHH%ቚ>D&y ܴK~ӓy9{.V}ẕ|czӽ2gs5X0%@g;)Kϩd_*3x+;Il,4ru lƀh䌴f_ui[FEEYB߯ZHߞBUU K?JvyezHWukT$ct;vIlu=pח+Wr4f %<:'(&#[yo9֒LWdӔc/߾e&`MR7Z-4ÿep_ciU*6pvvɔ j?kPwNd`=[i#9|չbwIiy'GGVEElAofCPJn3[^]%4t.ZȌv>ظpX=CLïQ$L1mr@&kx[ۍ R Ky͠A}潼pR2DwHۀ^Bq5ӷlZeF\F(CUp㊺cr|:X׺hƭ M!DO*7-g,[ўu%\hx_G! ;VN\E5/q?Qk8 o}2ig+"wyyV{`Wm6&g[AřDZހlϏ"i_PgAJFW833?\S1h y}R=dYW~n{/-nZowILCh4ó gYa,[rý50^OZmBt4J\,b0YYii6}0%8"WP7w6F',ťnW!tPր1oglg|OFǸhh_awN4񟆺e#~6Qȗ)OLMYP ,*>ʞ1tUx@A6ms,foC]{? Nm8X%ϡD g G'imQML0[n6xp/٧8_Hk&zo/EX@\]J(?8t%s¶c-Ϲc FCZrTh;5C1'H_'} &t{XJ}Ǵ5S ܐ;ڵ;22~lbN\^ʣf6?z<~2]R7=X[ />>}OV g&6 =)yihTUQuV)ښ[lBc\IK{zW~Ag]*T_==x9?9,k\'yhOK=(ֻTT oHF}1)xY5sl~Ř{oZa*WG7?ͱɜA) C}WNN#n%:V7z_0w.SMzg{ TV |Tosl;iDI_9;>ؘ"̉gcpSͱDT̈́9>RV!2ܯm9wth}ZFsYV~`*G}n (ns8p^l!:=cPpm=o(|=!4%bI|o|aN !m?lгrv[õwެ0<ZǦlʹx XPnDRP,󴈿~~efqg&XB2a}FJZ]YFI%̒5Urfi_~۽c_nHـ,mhSkB7<$xʹQ%Jy7'WM`_mAܗU}riKGR5 ƪ͇lKʀcu`YG>}0H$S@gx-tyx`vREF\b#F 0HV eM5V^ʆuH?;ZhҍaqFP_j%E qp轲~ ${NËF4_ֻ#S |X<7>ؘ`|O8ՙĥSWɻ*XA90¸n"rݒ@ dfMMrLdf  /ftڟ!c5Y*<!7*H- gU59Mng1R=S9Ez(x;}|e9Rp@(!ܔ<O{8!N/I``uaF:z~ag9k. /f j !Ѵ7,/2>ڔjWr/7GQt>ip[lFP ,-x:Џpbt:d}WVˬȄ{~qw$gR: {S"?AXjzG0%kņn5KyL/(Ô>;0]KW`z|y@nPwP AZQ|Aücb3_(o>o{ɕ8ԋ?d-'^,]c2k7;9Qe;YD\E%SN>57Ʀn^mM2k R;UeII D'̅ܟDh:Vp'"JXU>9&vsTA![1o޺"`M|/q/i׋'K}SA6/6i!+vƭ<`1{\hn~?k)K UZ!oaW;1zxHi՝Z Y/ o=8O \k|*gۧmL_0'c m} #?%Zr< >?k]uB8%}xoSchUv麃mb/&4rgD`+뵈u8M}g@פJ`q"J7>̅F?Yj2㫽d*S3<{bj-zBk1ð䌃9:ejH%Kκ%e_ƶd!Fy)32ۉQ/3mvejݠi-P!Ls.MBt=i $=[Zҷ̐z)JڒMD˓gƫ *=mU,U韀[Bi:?_$Se#M> "1b ;-*/f"(<`:Y!:1Y`rEucHCLJ}& W H 6TH@M>|̒ 7õ´~9ٽOn'1 {>i:Gti{%2w,<MS*T{(̳ʬxЯ\i*+\H `qL 5|M8AIy0rj.4N r#y蒠#s 6Li=.|=0<k[Rj&ZXdL-KT߰&?XV/8&$|GppDo|&JJgM7Wy~iHK<~D( #S5~)YK1ǂAfm>N1u$oգ+IAFfiAXhyZ1r I'vbe<*Sm"]DwsTevqj[͗>ͥ"'S6V˩ ~5nHAt'{^o.׍l(m6\]f_\]Yqc:WY>ar $SXwvyб)~փ6hkrf$_47BMׁa}z5v˅/0ՉP 9$ov|!-)T8$_i8v9%F; :^'H޹yODLK#{;L -M}޿:ⷱ6ijA>GZD+ƑӵD i-HKmuMq\bm$r# o_eNU0m=6DGWlPQYɕ˫-ET~)zFmI ~X4=l;sl"\)f;סK`z|oq>u=By)};2jY=mrjn|5*f8:|%To ֚ԀO"[J>!ra{:!E?P~J\mUSP*6/)~4cJLq…gzѭL;1SLLXX'4ɩ @Qjpm3<#e+G @1 F].IXS{kqz:c&=yt& Nڒ O]珗"1h:fj=9>rktqS7`>yDŽvK! O Sp1K+l̷ze'6,y>㡹rCp 5ǎϧc9-ؐq ΄ PѤZdBiC-iw":Qڈo%)/4MmY*>6Q{iNg8O>s:lEFmK:fwfʶ֖;< az)/Sp9=CxP+Ln)1mngvNE:޵!7cݒp?; (ˎa$ &1PjXS_Dhc2Ew  a6|xIݚA$܄/G9+Èl"EƃPƑyG;QOvb}y$*bVd{#csqn-itlmm]}zLz6zHz(8L4jEC4X q55;="GSÝQ_ %u77?4y:' ^N65yLBƕoҴ3XM5IA(c}ܒӍy|(<LHC-kIwŪML+zh9ŜfcV=!*~V LÌ\cB3s[.wGo+$b+@:Ki$d,8ӣ 5cоNa(.zGȶ Q7#)0 @ Zv@Җ ŮRDYfFu>BN(}tRH/InnWWa+.{ t FٿNϗbVV4"1eX""*#3V\IYl ߇5f ~ Zs3z '{Umau{bCWM.SQَ. IF Va5 C8L^tNVgek]$$q7HJ2$S 98+2w/466K$Ot;#$@.`xMgh̩mo4 L3*؊5;saK65ᬄ; |K5bQmzǿU|GfR[\( Js;_$mNa/nq)a {~D~9w;mP t#6Bþ8ȫyT3ɐV*vmpGu_Ɉn;.8#WfD=;9z^9e _pe0ny)jqB`D>[a>ܒ[jBfli=T˴ i8ɛ'g\Ablc -Qk}v)_چn؞dl-+?ENP)jojZ|E'o"XHM>9كM]]-\so6Gk8a>'.ɒ 4'"?nah {PO /̠1#i 0|-t^؂Ms?FNVzҬaDŽ\7߮%ǔ=\qqIqF*h[0t I5Ӌl~<EpIN4ZwgVa15\I2uf c v8lK$۝z \fּ #8pJ\E.GDm"2<楝Կ`,y?fg( Xb1>\=>f\B d#)Z/K΢;:+zkֶC#`n3¢*Y,+gқ Tp"Xέ=0Hc:)gd!1qrT#MJzgw0:/F*lAw{ u6{Cu oɁ9{X{g,f$VȌPڰV B'e Ux>֧eaE8"(>#EL5٠0'A!.l_;V3dȢ} Z&WԎTC8 {@epgѷ&DZQԣױ4řF gN+{o$)O 18Wi^ u/`@?Nҋ</œK)YKD:3%U#cY/h/wΨGPEx~Ag .Ko*WuˑvE`xtV9Rhe'xh `z5\D:`wכ(xlyj&kOKv$Y'W 7 PXPCr̋Qn9\ II~ë*H]u>T!/~ :f*:Q;3VV 6L%)'YPg!%%.bRtN ߉3Ay̓ wѫՂv'@' 8=[sS'ȔzͩPFl61ŁۧLxݢ\Yýt ҡ^mmcy, fi*֣}Ǿcՠq;bz9]H26C3u%w9p%\S K!l#Kh/Jiĥ"35P*O3ؒ7EZ}KxpNcdR &i\V:Z`C/JQq =11VL'\Nܟ]zrv'+ޑ|1qMQYf$^ˬwHƬ(Cִ DҔ=,:Q%EDAS?l菺o"1j%ds)\6C&/aՏ:L;0]BCr`%v*M垶 f:wJAAW(ٕ%'Qm' )!*ʝcd O Gs#zwp\]e@\T`1ga ڋpfg.E"(M*lQmIͩ[ol7:Hf w`' nC9&VR)ɋMx/RPaB{Ҋ :?꒏k30<߫W #LhchEמ5/FpY`KƏP 6')% 'rN@'18)(f.`(T65=>Tە ;@-R$=-03 e,DEIp+ p\T;2uaΊdF`DɟR`uN4Ac`p$kzMf؎e mv1Nl>RI{"Cؔ*f)UX?*$<Dm5K%|,za3D@J*[)G[?A,w0>phSymUkK1\9l]1S</Á>6(P= f O4:īuwsc:p e7%!p&ES3GÉX{կ^̈O6M{e8o_XLC'Gf?1F߰¿RbLH*3vA QajvI\?nv]fCR0Rgͺ6lq)GrY) gks@zaAȈCᢰMvd%d& Pk:h!|ɘj٩jǙ+=nr^`= Y\'q8&V\""W%!B wP}jAKbb>y_cyvS񄏳'/`UСSu»C.VRZ_jR5R /,˃!5 bHWlY)Qgtۻqhrz #'10:7vQs:P.d[ JftpUV&DNSğxGoo|wgfRjь5eX՚IXPCVfH{;(?! l*.&UˑT}DH bJl@ysヒyn_iCtm(W^S9BQ>9>\c2zIʽ,#:K0.7VJL\2]D[H{As;urlIN-&yzI6]4d6sxTxYk̥UI5mgQ3 LKV~Az]"Y\-m$;mDe[(+9mYUꚐ!4=3\Q!YFTjb}M x-"ï2š|8KmȫoM-T<;^0mح^W,)ڱgC'; &y zs2 SOІH\8.qP^}Q\ݥ6fYVzz9Z=\^xbEF_U6CUa:6OtS,$[ } f`56]Ӈ]KC҆2 G!6,V_G"[Vl6'8 a=`mFި]^#΂6SJCRbN_x]hXVw}|n2W qJ{ҍp{(7CWy}{v)8 c[_>B On'Et5zsHI~y]Pl,4kx B` (nRBq;¢"je7J+'khn1҉* HW' y)UV})/n 8RF{Fh'&0̐ 24? #,^Qu=ѵ@{3$F! VC^%2`ZuVHKF3 lW\#0Ƃo*lf"$Iɋu#HЈljO0:0*ڪuTw{Ȋr1xUb}bh4/qsM%! d+ݎGZߖlny o}Hd/w)m;aWn) ~#j1ԕ[Hޭm ),+͜o}к辚C^KIsP{kY') I / <](!Ybr}dX')1)uN:s{L&5(Q Y36z0 (KFVqV;1xE$[,HA GD?cd tN:g7qxx#!L2ղ^6lIחBwvA=nWF Op{] W*чDPDR w4X }b;K7 J`iʒH풇e ~R݃~yω6I&߿@)ȑP>,B2P89 )ԝAhjv?v7HÇdqT.# .Sጌ6b&FOP"1>ٙ)(_[|ۆm%xѢ%?R`~'y؜W}u1nt+%nuvCc2yG+0pfGe}A̝tݥL7_\>RH hv\33${b WeZǬ- \'3$0/Y?`\yv챇 mo5-+u}i;)Ö,@GrT=Ino&LJj8NU??R#3ko]b>8zt&\G8nUX-^M RfIq42e Bџhbq"TwhgkƇг"䷄&g/_0\ۃmV '鄈"*(FX3anvd_w[M;51n/e)o#޸4$&b$_&P7ENL)6ӆDXg?Sgonrnb%'ܵ$.D R0kv+/ ¤}62Z+i7:k[UN?ZPuômڊW֧|Ðe'JV2yFLA -#Ƣkx2 дX;hKD2Ը*[ζv&:`Σ)}ˬJw~[NX߈Of2{?WT+e&'|ݻ`v$1@I2%fT2'$*ABAp}:8]-$^y=E0rg7Mk("Ӣ{@ '.B`l% <]e+ y)p6*W;.W% `b~BŦscVv 2^RW>zf|R$cm.~~bbEFs|Wh&P9G|3 r\K1vZ!h:X)K |kv(<CEPpZP.$o?W?c歝LE]AN9MіIgt#Jo{TdM*x/vR{ewCumj ˺?,n ϸjksLSE=׍F._we lj|\*ۉ g{k/4f9xH 1=A*n.Atŷ:~%,9 'Y0WUXNPM6QN1Tos5W_H &ǟ56VlWh rJoI5܄hd"tFLA6ɬa'' 1p&CnwLÊ7i keݗ;kLE{(])1^( v=% gsK;!`NES_A:u:y!lH5n-Ky?/WeŌv5 E0}JZ Wز~4S} N}}7/ &񪪆.x ΈːN__sSOF4'/$ JPV|r`)Go8k?^ ԇh}YTpu$YztYf K伎1'AF  iCo^hmCo+d a4=&P;e9-ڹ_\4K #]P 2 s?<\& Z][DŽ:CA Id]d0%V8\4^/6⨽="jIm &m$U>"*ULP2څ.A5pkewOv>k2si Y= nl' Oӗ`7[Bo'W/Qmyh q'8m2|/cac]7dph|)9;wY?Cə:5٥e]tOOi>PN9g$|$U^h9ө8tôury!ji @ O oubRqT-8 m=DX1f*eP_.0>%h'NU)>HկOLuxokЈK #x=ZsG!P8Wh{gH+''ɼ_6:CdGΫkpAu?k}p50k:i{I A$f:eR"_;sܟr6{ ğk˅ZÖSN!0OcׇO8A@KA:݂H\PZM󿸭I4{Z@aReFF?"OĔ/ 2Dvs+ع;Q%Ӥw|5M5 1=vqSpz:9CՀ0n<& z[3%/(@a!غ]12vo&mhѴxbam Ial<޼؁њ;0dU xF!嬠4ͽ;h8@)D= 鿍l:0m0aTA$!K T>3ەv5NFAB퉪jwɞ"FeRIcFy6BpɸT7gr.!8@ b 5Eeqi%?z Z UTIrj=@bBEx}V@$FՅKc[q1xEDpqNN^_zp$1_Sm+$\Y TKZrIfaANX7Vy`"Cfo|&;cBׇn n,w]R(~ցoLbC6râ8˴hǑ)Fԃ" &wbK14= v|Ic+7x& Q, :_ʺCZW6ڤ|RB*v+vK>fI\ݩE+ˍHzq@UZ,;+r9In25REu K}X)_ 1 !FZ8U=bS(r!y}y к6:b} Ē_jsv0L@w[ܕ] :(){t'IL' Rٹy,dITc&MV:9iȒCSt3=?#)`>D:,LeYR'lLL+%_wZyHĻj!C섣$qE B檰vszЄȴd^3_.`l·2(I*CGmZ) EsBŦA98&Q&$dފup)GdH~=≻EO֫'ᥴq`HRL:k爚S& GdN&=r%BXVP9X:I? nٓs)Iꛘ1ch > ~q ce{ǸS UmcҦq=O$'iL)s4߂֝ˤ#GGvKaעp;4(.B n0%Pl3o~f]*,q.s+(G.& d˹V#l+v340RWLR=<]{5U/aDWD?U@ahۯ|1ٻ9c*!+qހS0Q|RDeaY]팬kUSvǎ CMbk*7y JS&ڼm:s YI}/In;(jsz'$r>s"Ʃ(([$ /΁@}d&~&n\Ƕ,YтXs_8R{Ǵk\ܞc>a!&;kvi F)aOAy{dUɴ0bGׯ&bO \-V #K劷"6FN=&X""UiWAN`Zy諐#jnX/?2^U"'^i,ͬ-Er@(>ZQދao"̝ԝ|8X[: 5%ZK)%HSV8Kץ܇$e=%%8Pfၽb_ MiU&uShN>EaE_~7iw1籢-1ŝ$g&LjeͼxK{E 1w7=Lɜ|b'W!AaNA/ |x= 8~Ӹ+T*&IGHkGk,C*2IsVp^2Yau~;&i- Lň@dQErIm8#6 e{$Var3n Ķ>֎m:uR+E(=},oj7h%&qh*HYÈCM;ydJ "tzyۀ 4B^ f5#S|ʜ!G&QzF!R@JHZ.1AiS[ ZDv='o@=fhm@v(]5E\!DS7\3&b~z]*Oۊd;戩h7پIj MO 0e~N3"_ZHAwJ+AvgI;>G4S޼VUp!ϰ6D:tNֆp}[[uPntxp+Ft18ъׇ oD>dߧf f[6`tg>T\`'3fg!3R-O,m0'~tY! ŏdƫP˥%ZΓ{Fn=){8 V}}_Rtqx'ԦN5 p$ɸET'ֳ~9sߵsݢ٫˅n[7SD^gSYŸ;T%b--u+N$"9=:/"E;lfh)'5mil G|X(6nh3ܟV1qFzي4=[mm,ݩF׽>c. QfpBѧέpRw'erӥ =x,ZS~;-CeU8n(n!߀-7Ī*ƓS%<6VoAf]( g۝n3{«U`V$e~o4ܚJڥ%:3iӓ)a[A@g–ֽ!AlY0T,R4)PCL]w>2}:ЌJe{o":|R8di`&9ۈE]nWI~RvjX? P9̫"03OqЃQ(pp} C}ly;S%;dpPllK,{Iо8zw}?@2פy_ʧ'^j0& *]|kÅ8_;tÃ=D^4BQna^g#qph$Ft╬ۻߘ>J˻x%g/mxQPƥ)Z #4FRW;/g,vYަqָ1' E@4ݎ?_@A܄+#iv{t6 '#' iL \LTfcI v@S+$ѧו' mS˭U*v{C$f4mwa=Tޯؔ7tvt6Y~ oY9.;(<\`ekj `[r8ϰm=tu . QXvj8[ZW)*S2lu]KN@SZk8NH4=̠_ ]N}73y_I{d8\#ZPYDi1e.}W>mowq|L.4vB 2;<CkY$ʋ^\c"$sNehD&֯ GpaO{ 4ſuVG=+2rxקA7٦xOH!'c֭EYDDxI ɐhqJSO"M}T\A&mFzhu> +$C\Q@=AbMmCԴ1z;]c #?2#ЋZ7}< 8UDVWЇ]g{'eYcw.O_y֓;dlʡ Yy;eSm-I'NZ!E߲D$_^t8"N'FTрH@[̦c'r#G>u] 2͖kѮ/yms)pFܖ,1pU00<ۜQYvŸ1&K|- 79~avy6Rq<0hPRZm.K _rcGWO@ VasFcƪ/Cb /2 Pe-;8Hp`T*gOq1sa9 4w^PҌ;uP7h0C^& GfWݧ( X$"ܺe^oB6*GhفN, ֮͛QFZhcStҐUOUh%{uG{Qb`ӹ &Q_KF& # Y 7+S$}{ynvE\#9G bf VpoV^cBhaQ(5J*ZtV1tV=pFhf XzdeS\<yf!.?ֶ᪦&ήm3ؽ[;N]v!&{D`y+G( h/pŃt;+x_ཛྷauFKS!%WBכ=% xIw`ˆ,k+&[0FiggXW|i<5'b:6ce>fbom3QY+'?!b|M4u$Nﶽ';噴H4q6Bch/ YF;Y]Z&{בP[ITc|0_P 4]OH.C7^ft>Oi $k"棼UJ|p iE=㺠n&ےXZ ?:xHyݑ[5#z#%nw#FjT xDehq!l2·cRڬeb8Cl.sDGҫ Iى=N})0H[}T覊XAaf *Ӏ)keuD5N{&xp]J&g +*Βm YU"kxHZ rϴ-qiO|ַWHuw;n%+{n2Cd^%BP3C xDC)w ^ $ ⬀*lyJeY-bA1á,7sogw-MD`c4f:zwj|tJ HfD*hsVEKv 1bpB`9lXH]O쎋:luzڅcݛׂYڐc*G}8{w\ûIkdI'9MV!d^/.3!Y.M4.>JDIA$bY)KOU!1Ln2+bu_Ӑ§=U-YxPbJ؝3X r||6}HԹ\swL% !mw.7 ^,V^2ȩ-o+RC_RҰh*7զmbeX|&IH /-*Xm2b|P̌FpU3edڟXrb^~AI֭y?m/tV%)l"7_f+|C`w:z+d~}j鬽]ǻ9% V 2jdRn :X-Kym/CB٥KFPBSUҘػoѐRoHXczޔ3LC|lmX t!iQʫ: YHHCŒ Ǣ&^ [-%^t.<[N+FS!WEͧxұ-hP$ ҇H7%XFl҄;A e{˯%@!NIAt[c'{`YW <*SwQYzfYdn:A)}hR \U!jѯKT{Qf\H%ӏ-W)R`j+j~{c>g=vC+B+\L94-lrru[6ͥdAH;dž׮F槜0.1t3YJ%pv.~C3y t%ݷ"^FDYj6#t)CDHm˅`j s5{Y/3z9 6A2}F9` :܅b;V>*J PpvRUP&O/ ώeE[>&}˱`A")`ĹCH 1z=}%]BD0Dͧ$|e؆9uq42(I|1y au 4v3F3֓%V߆⏫l&ܡ ̐aIC!_Frl g5ǵ|g]6h-5"i\,L҅+KSf^Օ$tk]{n!̠X[@IQ, ]$,RZH+䕶d^I ӲdԒK;i65p'<>QQ<H7jc߳NA鏋Ƞ,K m;huyyGT8T;rtB@ߟhFw{0[A6Ւ}r-e#Sn Ì0rIAUɲ^RPVOح!WT)<ʁf,n`g WEKM~&W10/.-[<2?6"XzG&GsR3?zČ ]y9daI!} q 6n׿ȞMzna~z}x/azQG}@ELJG Kzs/x̗ˏ*"vzr%9.GonmkEx@pSx4X)N6[`_i?"|yF}̲NU)t B@>"rW: <-E9u$WA|3꣪beJ5I, eF[Ԑ 'ʅroO>D*sH؈x2`|Q-S@uXh GU(uގx$T뱢5$I?3-G?C^?Auߴu68G6 rmZ}uDd(yyQ v~b-%V&0k,; yF.( sUVx%zYd&9ǜ #\s=!5NWG' dv*lcd[ņj5[O.l_WVjU/!79* YD֫aȩgmd8{{yc(1C6`Uq(?.q0``yqySˍV{d,¾<ք", df6=>,<*1 ;A;`o"(}WL2K{_N!dќ>GB9 LC|P\ǣ"%2u) *DXѓ$dQ2Ǣ7PLD8"pAL 8p由UxH^(92&7 jހ3K!?Auߵu,*ZR'Y6kEa<*.mRXz-|99Y?"٫)gwiQRyъǝ_xݚM-]\ν;5Cpΐ5u<@5C 'g|N˲^ld%jT<2F852OjkD c°O 4̀$0UA&&Q9CnKT[N}JN:( :tWR 8 >ÚK79HG>ҌGi;̕f'vgtG^!+17\Oȱζ5K|2y_?kȑ>)̒B"U)sv|we%Mev+O4O^_ct]溜yͺuTdEʁxjO3Mp1B]&dۋdL]oٱH, Xwu)L%Dc ΁_(ݫ)V)&WT[rH#PmpFl0{DJeN/*OpB(+fO]* LkHz$B̭2jjXdT_u$, Gw{n2/jLI%t"CC`pI1]DVI]G@u wGϲuK|?”l=? Zr:|;) of@v?,?xx1ScG4;oH<ۆcI"W7'm@dy%:-l+FG:7x֜X>ئ74V[||H}WyȽ kf+o4AF߂•${%fi*eHU4̢׋La̸ضy;eD&V-hThذ<ôק Ъd &sd6݈w"#*:G}&![h؆6H8Id}D<ѓ&)8cb-ツ'Dn{ ňc}k=kh;K̕;97RUٍKĉ]Q8֙DrFQ"`p)'`IM4]Nh,_/ڕfntaT.ki5LW|1Ԗ5֒ܲ۵җ*)衛dNER7K:͟^j9z\\=w=CAZpUJyA:ưw%_B^ ps+lI{wpZΉPJ9*6"Ԅ:9A5Ү#;BWE뺆A^S>Dl8V+{AudRSB }a~&ۘB'A%Ӛ, `.WX8=.Wjh76p;=]Zqkm=`tm<DU;rke\];f*a ?M5_ 96Sފ ]&`; q?;5K8jŒ}2yO41p~=VmIȳi8"tn&4/dD OfNX@&cM,># }x.t-y €|SmRNl㖂@}%3S+.P7]%K3AcWg6C (#(El ؋#0<LNZUs0aއIom^4)KRtηawGXJ09aPh/S?cbU8p̒( pe0_t7 a,ʹr-4F1ZuAlL-/"!Ɔe5p*7Ϋf^ZFWV-Rf5xpu k'f= * JWp@n*- 8בtΘ@ B&Q&+qe/)5)PPn㹫.[XQ9>#F1񆘺~ 3m[|]۠ӎAC^r<ǘwJiq.=}̂,wX ;ͺJxÝԒތ̵93Qpf#bPq ^o}g¹g`2=oj.hܕntcΈ6†J+f1ԞuI=I,Y E{H( P$0Ժ+umEˏ3\ّ>ufIЙi+n"Q1@)>Jj1!4>`'̙3gDPm{ тlBu4^56'OPXddVaM)H ~ hy\YH-bU/|g&oƪ^eלNBçBoCa,ܠ4Ar+B8ZRCn y'G'c5 h la/B&֏8oѾ)e5-l4cƃ\Ń5\Cބ^̠ԑ."ZHoنu*%Gw 7^lܖkzZ;u|0CAy*zԏ;Uv u=4SwݤKȳd"Ӹx/f4dzK5f xf2:]ڿ hn . 55 `,'E{zlIbHÃ}SZ\޵Y| !UA9[uc'5i qz]ohkIJڇWcD+8]B)oH[z&[Ɓ׻[Cf,j A MR>rKw?Ba_p3M/8CL#lFR#4(lt(<[3fSЇ$˩ȟ\Neq=Q8kl&YSo>Baj 1?i4hqx.qS*ȍGT}*h+`I>b<}D~rDlr^7i==1TB ~O3S=hQ O yY5 C3>>q ;% )v-라L_o| mhG!*MR%TK}NWXg%ë.8eOٛeu+KlsPu]LR:|#GX l5N O̮[֫'z$]d3Ir &3y\r6Nlj!D@*0%0nھ,hƆAي}ÿLq:h/E}FkNπ7(V M?cD 3#*@ZD Z9(2* 'iژ>LiC'o&W@C򍏹7ܲdJH7ݍzն"TLV W?(QIpG:7|m1\YUD%֠r(uM閇{! 1 }j9kU%jo@ReQzD6? rd^3¼]M4#ď+XP7}jFWh䝼Cv؀!=jm=(f' u (LR;d[ػ˂AUW?GW]jP9gt2A4wG:4 az >~4nx%|M]Z=fALd|hSUUW49wG=8...hy]zс<VJbH7oʼ3}gjȩ`i$Oq*u!Gmx Km"kk :TwX3Mio{j 6J֫_D]ܘ:]NIl󟌖e@2TjMkcrOԮc;tq6%ʡO,S *):),rdZ<;2?_ h<1HI!moĢ.[ eTɧ-}*0l;dxĭn;S|z5gZqc FA2D^%[2 |[7b\Vd?P'wVI3arn9\ʛbh\r~Sd@w_ڻtk7-HtrJI `>n # =MÞZ Ug, ?T#8(b S kx M'lH! {WPi{YE쾄8 l,M\<=EV߃*Se` *p,'8!::ZBm2t?ї8uK>Z*w.lҞbtzSyf9EdC"@z6ˢk8[!#[|@ڧ_LLy:ұYp*HY?6=$>DVP35UpyʬWeA| 9}Rd~w?vE.3/cq1S"pI I CUTnz _.|}O+OyT6&Ylf{M^30]E1)(yŭLmyB3AAU9;sEjiZ6d&*ӎiK̺$ KDmQB <(潸+yP<-=Zj !8d{sFI* C7z!eъJ-&/a2ɻOr5\ogPH',i6#=P9E)S\tGq!jTn 0nALHDxoN#Cil#|o5=61ޮGw1 aL7v&Wc٧08PXz7^RQ6<`s*7oXbScTez_@`W}Jgt#=g鎁C1 /3@} %=˕)~jny;l jVם4˥4f+!~oM}gVmT3"@}#՛_r5k*J$O4dup5oAU򰾓-Xࣣ8meZaoxu31ErYYa=^@۰;6~^HReۄIݬU +-(I"ZMGk EtfRUD){ФVe 3'̩%<Gp Pɪ2ʫnF ܧ gI\Q>E!S (Cg$`:07_cꞹ{?Ѿ:NaT| rg"JUw+y˩_C'4"Q[3ؑhMjn}N.uҋ'mR }C|Nnڮ5Na,zl 􈖛{!,KhfM^0`)j1=5i_*{?I-!.*PSfMO')i (f! }kC}L}odE;YW`}{T`vScy+D&w٧(|Fl@`q2 NRbЫTA.is d90T\S;*z8pm]Jh{EGmM}BO,Eq'Ws7v(eAAS(cxWœy0 g)nir慐X(m*yr%SeήH]p;ZU$낽U[< [ lR;9NJïO}sfqwqx[߂<<b͢q5 H7`D>zWtn5`߯*a{~6&̫oc_!$ɢKEB y7aRucTG,,?~#}  \0O?zRk}}$GH{T1Mgf%V7f׻ 0 -cǥom\v<;zfhۜ Y풘H+3Ђ8lgК5z4{P|*,̌W'{,@Z0i"r6`Ŭ:Z9I@#-] 'uv赶x#amTcuԶEufEƃFS򱻌[V4EdE_/Pɖ*9gIj}'aAPϺ:5(uLB@0,m\pݫBSmޏVw_}B#hPXF{[.TƁ,q tvHV׷G'?(lumث?l{N;V.QD%m-& @pW]!N8-:w޷5ސ%xC'G::+[ȥaTPPW:-$ Wgٗuz>8p#&Ϋ^X:K[l(5GTdx(! q)I<)tGX|:3O(rxDRpMְZ<{e!{l(gCZc$-°rw6 toZo*+dn*.\1pķ An[ܿl멼||Z1Q5zz6J0@ZҭXp-#IaK$j0n5!}"hUnn݆9CVb& *WKck[#}Q1LϓadWvyf+d0ΡgHB؆*SؽEi;z~"'lP'IcjA)0"4vA(SxR?^4rOfXc(E3lCYqd՗! 2Ox| ^vgu[H+v/r:ͦ` ّ>I۹= E.Q mi0Nּ]O!*"5 .;hME~)Nތ3c jmz<2x#U{vabsxT6PLY6'@-}JBLxShؙ?9Ɣ䦐}|Tad?p1)OΫ7Ru#gK.dw[.qi&X/s F+ e6W[ ,s>fs_⎶aq6۬r,!TiwW8(/{Xk2x{Džyg4Pgzu{r,?0uO&25a|}^؆(h0l^fr# _Zb:L$,j2VX`c_HPfm,+B >h2ݚe4nː652#ւf,|W$1>J^!E~\KjWW4مt]Z=gaXPgEmэ;$I%ö,~689餲;@MSC2abef]ĺԃzr.1Ssס>lWE$RDz7F0GЈ | ~PWS2KzݐQjNpB"rm ojZ⃣M=Bj}8b^%eQ\yiXF'2Z*81tkĎf\ lB4Kx..hLŝ|KzI*++E [gtN+BA>[֓׌epWsi/|hSU4tb#Ts6cf|^"=b-`ʃט>hT.~Q#f>?}svL<8é;%xTιScph/9%w#>3W)&31Wp2ODQ ytbN󓉡v 'WƴEG,mF)_=m V,qWfIRO&dՕ dHdXS(4!pʖѺJlubxT ݣzRgYDvQ(vM5 ~=&^ k5Ӡ窍Lm]cg|T% ֠.FIV@OC6ɝ'ɷ|)oȌa" !ź@ᐓңLe*vF7#TK$|<[dgB@R { Ҙ:o,ҨL*r Wa(EyM$=ZH[ȟ O#PQ_qI>.R2].^`ǂh .k? Gbx86T)(eŠbM9ashC) jܥ&V7)/ە8]EFҤ@| ۂDO~t_?sqR؞X1͟;Q*EnlwL(i=v<+]=2QˁJ0 gmAt%>GR'~*!a,_i (TX[+s_ LHbo4D&WYfΈ*}jxQi`bjlU CL40]/]D$N0tr!J]0YTHypu ZӻuMI||詐VU{B ɕF]w.ZrFO\ | 'j 8PS|$<<0Cx0t`= +}OĈBۮ %Pf2%,yx d 60iZ^`U'b:tALu L]X* _y42][l[[=PEf8!NKi:M؉rK2do5Kα<,C!@ #SVQ3X܃DUg~2ő*LΒ{g(` /Tƣ,? p^]Yd\RA;&}~l#Pt )l6uMV[BWDB@Qc7=Z@g5%#J|70=9>Bjl"%ȳoekS5ȏ\Yݘnv1$n D K6 -4M00v?\Z~[$uĆh_j)M< B^^5sOiMӤ0@;tc*8Jրl09? e9)o~XTsnZ9w 63L5gW(T( SN*nj:b[6IOvH/-?NX .u>E,g|4KJU(CELF6[Fi؎)Ʃu m _&ڋ4؛{P̺RJD*zS[Siy_䑧kQ~PM< ;Y(ARq,")Nj\'r9iD5>苌YꕂOF|)GiY6k*MZw;hFY~0KJQ8S|faHAPK}7vMg#2{8OU%!Q]_: >ؤ' "2;:ˋ֍; ?8޿|.M[M]~+Hm*KթE ؔU֥\27+9diMc@3ϋc|3^+Z>*PpFe4: nr.@E $N~Gn` -OXhcs>OOǼh;h]Y1aB9yA<ܤHJ@a>.wh5/^R2fXz eDTӚX@~4cg P^~T3`X뼾 0-.X jdrCҿuƋc-gnh+ 'ß|..Saʖ[vi@4ފ,]_1# y}G|à|Ar eϘ~{@! }6Y `Q㊊ނB1' Zpb+ҖpC 68l=Ca֏oRާ8o6}ym]|H(+}7d5\CWd5*s( 1{͹ɩ ;0b=הE4u$^`cZ{ L*fhcVȝ5?!`Glw-$ݕX|\YXN abSb"8pW7shj7JnJ>aWkt\ 7̡$J[Ȕ 4)Nw@5Ȣj|BڐMc={5VA:+$4PM?Xpe=k7%]c m-"uev)'v'e!; udHCd'댦Pe-4iYK`,WdiFw̋LjŵОopHuʞ2F}N>m [)z 6ᴸ.,r|iqroOEX9]|>861VQ{*b*67}R(kM$Z^[SjY@UڒSp"Y ȫ`4Y-8(-{ 4"ŏCc:'\a fS!Mu]\!<C/h4|;?+>,16W%f7=_ ZJc1it;.|ȱ#nx0z-x1@W_Գ偐ol_[骂H{9-4:rY0EGݼKӧr#!rN*M(<qӦ-4SLtDJ0h g&Smj D!*W;ayvbriȭق[!d\pҚՇiFA)XDKNqc:`GM8] Ytp1#Q{X$` *5Maػ_Iּ  O:nlpY wW'| Ǝxj=>s1mB[Fꂚo"*xS;l>-<3𪨠!&Q*{Pl*b~xH`?dï8<.!3,Rw{Q>͈LzɿSroPy 9ǼZ4ZhzفU"4‚srXx _e\G{Lxp<>}5sމWJw\'6i]<\t\,zTWY`Ȟ'`h>$y}!X a|T77#R,g`PߎMU<687dy:CrO<-z-alrrf`JuL-c)%D+[~Ib_R+%;@ؠΒk_쓧dZmⅡ2d,0J@M≈Ll qF`VvK[z 0h;2PhV!.ªB/WAT瓥^`)"]҉] Շ4n2٘w$Ѝ-NfU_b'Cg<6Vp6f=aPع9/zIu_\I2iaa|ɠTK|\^ȯsm_b=NjR90|3YKҼ[:ɫoD+G<mFvk)[W:G!^UOb Iz1Ims$~]q>'Ƿ\apjP$ ^g3]ڐ](/>&1TػsT9hC_Rq'P)=\͐|H5p֭SݒH.x+ $cv h߾}d+3U 8C9;]܈F؆iގ(gZW-au9#*]?<9ۿG#ʠ` 2cٻ_V᲌H/K"[:^j\%b#kPrZy`)!5W09qx/ճZ>OAQ;H "_;Id!n=H$;AsB-|)p;bnZGEjpȔ?QO-ωMUԇ\ƙ@F^ZA[}7_zHCΊ(~Q5,dj䀯;}IA;s;ěrUdVoB6J˽,aY36A`ͼʹ%)wl PV2u+J`Dž6 letԈ7ۈpCᰗo/_`i IaJܒcpN=NMtiF^$gP|p"3/_jrp"daC;C{#ܤ]~y,tyR'=_A1w{6Pl{&roaS2+gC:{{Q zƸ^&+S ԣ)OHrۦ.C ˈ1ZUFSƾ5^!+IVH+=[YV_JN@26ϣ%u׷5ZO+27)E)w+-acaLg[ַ:ZtX}2pY&tNE)4YvN95`~2a>}6`#'_TRjYpMeS(G œ.@XS:2X@D 9wЛaCYO/síd rE|Saf R$v89b~z>ۙ)ۿi֫Hl#vicyUyes"b4 ͐g .M;)8JO޺jNOx2}HUg4[.GQ&F+nJy,6q0D/Og'-fDžD=; (JAļ:vpH̥[5vWe =˙b-[.W7$EQjzgg?U I41U0\~aOM6CcҌT[)&sdtQq1|OnOS~Lpf-uXדL&RA2ȣ\by@3^;2\VI[uT-*ʵT}ضUv<'& !ɘT يOl斅Duh3h X8:xtL^m;Hnek"1=~mh=c5 sowzx%[#DMI:@\2A|ΉJ{+Dw2:uǖCf)1` /ߐԨjG+25gU~2X(pi[ "N;x ~[%DZgFo;>2on|VuGb tȶnAqo+ 8FwwgrRTp$e)ȏ3jB=Ikg37͓`z,DG$1up^v*[YE{vFۙaM'$/ƬA&f?27BJ3UYvTn8wR. q(("r+w1h3ؚ$ۣS6+LugYC8QQfeOӊ: Ƶ EK`\vZT$Ⱦ|t?ɻ-6pK⪂uQ,% u(zp],cC3gSex^mbc+$ !c5A 9yںdV,Ik˅o{hcUi'1BOևxԣ Jn)wl q5dnC}I4=nI}-YC"VggR_92t}Nl%%:xfI}ٚŰ= Q݇ B? C@۟} 9$pn5̹@ƥuIšRv -]@-pAzŞWb&K1߆'hR7Zu~B.v m1`w8W fFտJ B4U!(4[Ж5`͏3hF^)G/]fN;X`TfWT] ѳC͂mo9s]A##X~fD5]k h\1<0aڧqc6tW{mћfHrFC,!NmN z)rp~{X8DL f4IUݩn\_SkOM4ىp D,X{[YAh5AL~(C 29]1"PbbqF`SS9|0dY|D`7 ΗsF;h@F-:tT%ˊcܧy% Ŧ`ad!Mg{j:ߴwv*gt,RY dtvSZ΄L\AT=l4m[O3 FCUO6t[ڊUb5u5%XTKjO2f1uѳV;x.HM _Jd}ZtӚcܴ 5J+c©$ݺ55s07ݬqZ!B}7cf|Fq.@ p (Ɣn8ˇ9ם³9L,>sџ *57k+>L===AI0c|΃NV #}+]۞G @\6,ZS2%ⶒ]ziD%tflTn*SY#*7 WR ,ڂpI}Kn3]5kcA i1^;Ŀ FڞEhdqڑU @BQk 09YjbϐnMʥtpFWXxDcvQs&5us sVi28n ڵ0hCHH[`uAzm.mSW|^O,ϏMl;4c:Hy\Wx&GU^ Dۇr359# bY˰Ǽ6JZb"BAp f+ F/EdPW\IE=rNLoK#5}K ~=]7ek@󔏵]f1ht@z?z1 %5GiRr_wA,aL1g}e'}>fuo֑rO//Ѵ(HP{kHRZaruG~d@Y펾` ~B[,!Dr׬c9aU~|nL*_t2 Iλe208TKYgtY 8Ӷ>eu^ ٞ:|-/KRc?<e*Ih`&8S{;񁩂X'Y˳Rղdݤ7AD U^|O  Gd"AZ'V5fG[Q-H55sUhwf-<hwx2ް UkOj{ )QP.CT!&NIc)lVJ-n}Zz9 .Nl qcBry̻He,L!+]z(qIݟ hIF@*Vw+ + boʹdXM.~OjN, L֞cg.?$P3(!?_9#! <)RևbgM1nЧ ,W ,OvX!G+^PLeQ7ekӯ)2trRf؂tbGUxt^ Ȅ|lp6|'\(;+%q/w>D[s鏳5La_IUl1Jb<%vC, @uWկ/m>m]J,׌yV.Ta#7b(\oRK̯%M]L F'zqۈ dG5zGLȂjIAm7<&_cĜr!/r9NVi*ӻL:ɇZ[1Pi:֤ {}%MPq%Mܲ݀O `k5)"83ZbuLy3uAS1pEҀQkgwiSvt~*uqzQd$&] *fϫOWMad,sQm HΚy˫g*BOI0ju7d޻2|CV 2Ĭfy#>w&!#k,Pwnh45ƉlZH*ލ;م1ۓF79jAl$Rz^|W:F%ۙLD >α<%-Kݶd}gI;)<F G@ 8;Br( ЊR$O!Ϩ [^T0W uCί;cc|1 V}nD| A5UF J(/y-vWY٭;(wG*o>IYXL5&{\LTd2ׇ7eZE#;yz3'OQ&váR4I}#J&^9]ġ[w<:1Mۃm:gøFFɶ B o׋n6rOa_f( H1Ow.K _1&%eGV>&,g0d"H?|HoO$$3qˇR$%iHbdsKϭ.EiCnll|OgI8'x;01]dzFh2qz N򌃝_Wqgۈ,N2srM }TrW58ge j!!Fp| Ir8G;0oʦ%lH9f~_ق=tA%[v A5*Vص:nrHua)g ☻ڬ'jօYndth!寜L61olח J(y tUͨ4Γ-9?0pH(ͦ;M3s G.eC hFylRpT Vv;72ZƝDSዂuZ#-}^@+EaSA#Z-6wa&%_02]זOVEUC?i;H//ލ]^O3QɅو?SjY"#AZk9ULI鞀jɔ A#m_qBk;s2Vh7eA%,0Fſm+IzU[֖OE L$v_«W#GWV#"ײp=JM9@^6z=+b{m(%f`tS(rL+o^4-xo4a?o@:?N/ ufe\ ptRZTzuyh#EF &Hv 0ܐX*?pb[yLȱթk;82ߡfUSLtG szn퍣٦P\ FT z?ݮa^'X֟؝wyݡlf6<=fލrǑxFT8؛C(u Go`;6ƩyC;SHA1Bl MnLI>#SQ7Ārk5* R(g }G1cx;Xc_]o%NAQ?"@5(fW %Uf锃'\, gO8qYDGFkLaۅjE,RRU8nAϘ9!lč^mY;ا*b]kvulՖ6?uv'[N.$d#2gbV'A6Z9iϛh`'Da t# |o?l5<& EniÊAX \lqP| ?Lw yhGHއb/"u;? >4 y ɮ?+C+gKlA 8tcjڟe\f_.,$ ʇi 8? uy@&c 3G&+1u\99|*l1?JH<2e18J}oE">Y}m4ҽ,.Բ]i\sih$r5~HV3A# hC yM9֏7or/r!gMcѤFȜ{X[歳k'{'LJ_цc/'g‚ y+5榐f}.:K-uInUU>B>u+5S:W TCk J ufKOle AL=fBӅRv^zd>XTS ,?&jU^K޼:n^ #%a5Y0LKЫYE|$!c3ϬwԞ$6bXQ+Y4B}CE :Mآ# TaᑛFUf ykl=$u-lpC<&ЄE"8:kWsvxOD{ێO*AnuvvmyS>9d,JQVz vi m̯XH(o2 H]4sS]݌%JO|?C<"PAasu%oʓ~Pۀ~ a螒8 J~ot;se"+~I@] ;ztX(t±Jk(#erDꈩPƃdUpIb ug'E  2_!Ɍp \;J=|L̫]NCVn geҢz@p/VM0y4sMҏ=B2[Nr#V9gGK{?1[Zq*;-aQHa2[ 袄6  Ow*!uM7['`4TC%Z̴~'l.۬3F ̠81+7Li3titg*uutG 6'h/9j{Ou:}i{+jjLY2>CXpAkBE SLVu^*TW=_y.)}k7 ,ٺe0ϗ.'%֐e)+rE-$zs~@RX$RN96/ GH6ٽoa+7{5C<#s(ϚƩd.=ߓeN9<+$UY$b3q}F|@awW㢧@P̦9kw[Ð=4yLM(lJd}﯌kgͧ5҉l/⋏ʐ u=]ÿugqUi$V̙$ռG7~FՀI?eS4uPܗo{޳Gb[l"E{H)wCJc u 1oj/uSmV#ONY>ٺfJ6UFE*,)cNaߖfMBQqdQ;X\Y['   :Fi8Ѓx׭tE"G(]A96R[|*S;tSojLJJN>" 9eˠq:gI%!c l>6Ym;ѩ7"WsNAfsDjXJ.H}AS7DÔ,,8AOu`/NP)͡#djӉg!r>KTOcDȩ%H?;z4F3]Eņ"1ДH σ DAzv,^ة 1Il X|쐓yl-{S-piCWMddV) pqDPݟvHM{MK]>J9щ;?.Kw 8Г*ec{0LtT ˞$?:Mt5\!=ρIbSyQ)uaLٻ-7jo9,X#7,*1xzkBXζqM%U LsU>2} ',Bk7BdZYqZ n^OY2/ #!)idP-4S*I ,GL) ɳCS3ТSyD&Kj8'Dk }՟=D#!yx-6pqSg6۷f.Ҹs ')[{xZz0U+W 90HHc%e/ ,a>QETaº`W5=O] vfsa)6KuI]Ҡ!=e>IPRt㜾$2^088@A$.x{7d!!tP,mB I(3N#qdp:䓧tFZXݸX?L‰wRG["pSUAbb }Ejyh@ sWwb0UnE#\"\;RLabíiDOm+ն6|@΅ߓ8FUc5f4.o\{}9׷L, '3}3"(Qc%ft)qtWI22ͮs.nݫn<$v_@ /@]p7=qWGTzN$crNRA#\T@6X9΁\^ݮ*{ 11V;y~S i<>&y5qU XP1V3bD4JYE) 8Rhń"T}!CϚr5VU-NYGQ=^#7rڬ4>pVxsu{`ne8Uz&Sp 5n/x,-rMby5 nVqsyB0*[x8oƞc3C׺6?Ȉ B)\H,PN0n!ho@:dJ4K p5 ”* Aі(eq32`r7hLM^?BڦX1f9\QAYP1<D-@'!/GuQIS ׹b1⪹|(עI;\!ZX~>~ `UR\f@,Q `px=mW&3cVwFi>mL ]CmZP;f,.<[oLmlP%RbQ^_ItU$?9(P$I2QeY2HCtEw} sMڍB?;*_}d}p{WN׵FI??V|ي3!Z>]yfsm, [/Q= +\⎅orS l/~?oCdOy)6c`4וķe4X_8T^nV@0seΎn9Co[㹮|X8\d)j$tNSE:e՗XpŐk#yQ?ׇZz.R^`c65r艋~]VJ>d{y Yb= 0\raѬ? =DO3]۞ գNÓڏAԸ/6s|d vl,vgƺ{;)L8JL&W&𩖋+zLKoJi]3,.lZgfws'_v%CU•j9r7Tsln n}vm˔vREzZmAys3[,YzIu:wqT!oy٨Q:rGeҔ7|g¤XaO[)QafQ.EB}1ܠ]I[>H(%6}Oq7>+").qqج6++W8BWb9mZۥJ]] ϯ̝A[zdXDPpV։>wݒA($~:uF\?e=/fsTQV[F3SES\#ݭ?DLޒKl^@fU`I.zP7h"Ӹb8Bkj*M:gސCj)q,OhM%R0,vV.DWi,qSrw@3 *&}o2@oU95Q%`WBm#ʰ*ƬrrM󍖰91vszLNюii}b- hwئ`XŏO:ה{(3nFѺV G 3 +2LC{6쬪!GDhR h٬xCyvv^*ȍr8*Z zX>0q<0̂޺I +\{Ad:ۯ`{/2T}vMC5_?[y*%c@Uڝc,Z*R~R2C IϾ˱t:)>3aֻ[z0[;NP-vup|Vj}乴S@v(F(>ˉ3Y$z{(;_IRl]R-GֻlV(șTzcj9aYW@+; `qp|I!jI;Rlt3^a@FS)YSjmחn< gDɣ}ܷΊCUhT,>,chn9 ]|V1e$63I1O?X~??~[N)GT[wZdJD[ gwp/]5_YmErA:bӞ E=&ʆ88;# %N^veL3r):Uf7Q2+ J0@CΉ>x0[RMmʱJ%&hy.ܵ@V^ڀWԀ~$˛! W^WYQ߶\"aʮV1L*Z}X,Wg߇hPlcr8Y..wLNnFDYd{>-x=5A(ٜm \i/P{Fݝ>tO7'X]d>& &]eX+:Pm+&IB{V0wחLgIӉGooğp1]C l{d0*5F"S\v`+3eg%'^傛Lù~VHT;y){bG|PS#yt\,V\nIOf۹-Erv%XX|[Kxkon[=#h˽m c7ݝvn}Je$T̷?/FͻHۘ>yG[f}fg?v.g =<`M2SSֶ>&u>vc^r;X }>~ns\P9TWH!|t;4A@0M # Gx"Lڼ*TTha}5I' &beKw013vWH). S*ݸ|B"Sb b0m$e0%g*>C m0j~X ]ТÑ&M!_Lͬ GE)D]qn_Z")O7|. Îsм }!lOeF5M݃1xҗ ˆ EDTgQrph{d &3@<+#' 8tB]/H=3l9aXjJb朐H>[2v ݍ-]JN*n+[n]2MTOVSVҏeF$9IM%ےsmP T"v+'AZ:Fm˶84]rͤiW8z$=gYV[C9;$+H|zTꭞe}K?<!+ 9-kKF{*`18 ̂OT'LڃlCɱ.`k0, Z:? bJ,3YBan)pWkW( 2"y`>بrSKtp]QSHf%ExF~`\!cЋe*>H<]RLEDpw:% Qw0bE2~^{pbwnjf$SV}tOCRք>'t Tޓ:KP;>JDSq*$1A"(E4b|悗i~<&Ne% @%̓Ngުf/?xh&`Wf 5Ou_n<'TvIǤrAT^e70gWD(F7s*Ld̥# p]ƣh̲>纓+6SȈ G)wb18J@u}R4>j9%q+!04@}mo~RkZe[iȧ;G ǝq}8 j^]VGRavTo[.tbr%%87TUxߎk?H.0xDMILWC#?9WlēԋQ^WR㐴0xkgd.#z^ "j&uEgyRA`iޘZ&I5ioFSX\J蒶eíavOّ B;ݮWD&R􅨢,>~m_,&14 v:c@ֻ"mן=xuV82CY*^w~Ng~ ݴO|WIտ^ރŴybP [n=+P`l{/3ٌP.9' .nZ{T+gk^>ĵxQi:=28Tlv)礹ksƘ˴eFo9|ACmk]m2SQVUc!5IEf\;(mϔVu@Zϡ߳Zb7)HS+7M?m^[S9jlE?p;լx,ns xY|_Q??a}'Ov-FCǻXc))qefY>䓑(Β*}IF /XizP6A޷XEI[fʡj;®6ʘZHѿgdzB`fP>fr5njXJHO%V?β툮ʀ+Azs׺2yhM @@;dd?R7>]%lCVE6 'Oad؀Prw#gn𨢺4)8xrD2^OUO8ol\ibPdyH}|?7'wVN M!G|L"wxo0N&SS,Rl~kv.,RŐ7^A PB&OɡD,d:_RΊ*?k6I8*z:Np ~# RI{7-Q >HD& 0\7b{EObi~ ̃3%t Q]8l-KZauBs>~ݿ֪ٷ\%UCޣ-;KLηTSh)y))b: fMTt| [֘LpK볭($`lѐgO^$CF*P&}E6g_]X-c;,^Ɔ2]֌s*n4\D;D:QTi)>+X-}ȕNS[5B\_1UnM;ehADCx僚h=`r]$ht>c&d +vm'۷rZ54jKSh[$$餏 VC'[-h:wV,~1Nũ}ZQ4.φN){99%pŖQ'dOUN|jf#~KdBt{XT˫:HL5ڦ6 Ia:>)XKvE?wF)dL Zr{=G09s]Ā\'&*4dL4}2Ł~Mw(pZ =¸ $zEJ. Lʍ2&t *t  OƜ{$Yze[%gPiPܝf>=ޔ'6Ytó"86.Bm4%h[IWH=׮ y r'm. 75R=r#r{?=v=mÙ# a۳7}DZ 6|_hY?X_hQ xaw$UAzmE[0BWZ%z*/ eO&mڝpєZDlTkͅ-xu -h3h8o hF=jVQ-\ϙ9nt+$Ƀ#i ˠã*Cl3GIb{e{&2 D.'$ju]ɲ[6V 9q;Y'|ܒD׹/@#+61FaRŷsUgfo>qhaA5_ (j:'gA1̅ek0JhfS+FQ,EXYru̓(/3{u|%ppi$/ujIB5֣ь33g?)wImOyY맓qx('jrvh);|x}z~*=+$N1k>g< H pAID}J+R~P8E07* cg쒽Jd7,!790yhݮ#O}6p~]8Q;ϯd)w+ґggnrB Nd  {ciC"SVE[/b3Xl[0\JxX݈DyN a՘}=(%Vw9ٲ80!tcw>UJ)kSˏ܊/dW(smbݯo5+wV& Yߐ2Mo!.Y[kI*u1J3sHE3lH8bHcB'4@Nv89)ڲ߻O,XVaw]1e$E|38,*$=ɧgK1|]Ӹ6tm#@4όZ*#֛0~@{"@uMŌ&0/dQ`_W^fF&ï22Y^;4T mŝ:v Uᯣx &זEOlp|&U%|OUpi_RVc{<&+7Mr 3 )lҟPd  ՚ ].](z;{h{V۾AaQLƈduՈߥzk(eJW=mTh]X OCp pH`S)Ǖ hU;zmȓ#5w[}DS) Rv(ꉩ5O$G|0V}0|NTU{D-_)srAc ]f}؆<¶qFV-и}| @M{ʏ`]+u`/$]jĵ/arhAi{Q<&\joIBjH&*CeDsZa}sqm Hp4.֊7+bDjhaV\f󕄀p+Gä;VPId)&'~W4:Q.+b\i1rOe- lC.S/3hni["a(rvпłO,\icl fy$FLmH?۷ .bZˋ%+zS(zAx/W,qmbX.'Z(:L<%@ޑ*ZdS[qX6D $Ξ&Etpw:?ѿ?aj@x9ּ>h2|HAlaw?Cp ޟ p*EК,\xLok+Ɣ$V"kc]p6*gi4|3`E;Y‚'$g:7c;&tљ݅hƪP <= icxu=30U*&VOLErxp֌I|ڜ㔭zSTĺ_O}Çy'13պmRnQZCJ`~DžnxdևF(k637tW `/Ƙ]&v͝,+ eoL%G(0{;Ӊ M0Wydl0ȴ2gzwzH^͊=Z"ynQjl`ehA#wr1ڑA"X`ĘZVbyմb0+-J[̒ Q8YnwzRI7GcR({:;ƛ"h6[N|VRjA(Oiw1b)@hbY`pk3%>8C8QF"G$' Yw ,NAL-?JwDuq<4}+:ץQթbW+HCm?ӦѬ] O4?e3DƬ8zxW*<~s@7<ۀۣyj,_/!yTlY;$F; j`nQ몬Jt¹v˸:_><%+;P"WW8vsoeb̟YEye@ڵ !tmMOh*Il z{–t*̌k<0m[cp:fw\ !IYHD(VdJַ_AΓ#xM%XN6H?Ilf rMNUܥN ҵ&(Ģ5lXcƇ8SPF M.]p,/2]Ν\UN6$Y13?'8k{ƭ;AcxT#ӏ Ȼ?،īDapSj<#Nr?@3UEͩjI ,"}^?N4n=(+2daEq~Dzי:Nw&֚'7O2GC%=X}2D'(:Z|Ҳ1M!W/Y*-mײ}P{z}'ntw9mzdDݙ \%ϲwJwoR)^b*C'XGiA"Gew! c0|t_gӺ"΢+D1Cgj@Fy?. Q{t6;֊QFaY`0 bfSֽ[( !w .I<g3' 2i}`Ѵf^+!7"$x<P<gRƍI5'Pr*ɳG츮_QyXW!7T-S;zV@5Ksta4 Z枃XIUޅՃDM֘ c2ghsqAϝ e&c=''e`JQ4қ%L3: ˪EP.'K7y۝d("f `T(.eQmz[ߢ/g-WL2{Ͼx ].'7B@QM\]p#f֝3ZL.qA@ELQEys'˄~u 4:Z{ChHD?3"B HJ2(żvDyQݒ-\!~N'wB/ 9p9]n fSwgP"Glu!Y& i!ЄdK h B)|-j_/ 5.JQdʄЂ4X8^n ڷܘ8n)i*K8#TѫU%׵K)%Tx-Si|7б1)*+V-WpEʎf+\bț++'/V/: /8O Kb:'tLj(EM31HaF<EK%z%1M  Dϥ' ?h2я.3nQ@:ji&9xʁT1t IQfc5eO MA e&mJ4HӳhPѨ;)r}:{/gNgu[oG9\[jH.X'nY Z 8RIV~[W;8I嶑vzNVoNG5=k&fr_xp~惟wIפidI?VkBPs|k)HrI>$)m]e~`!}V?0znd2nvD &Ȟ'0"N`=D:kIJY47y#H$hTdP|sD`QU>"mXԨ@ MOr E/ˣ~Y60A_ZΒ+L$cG)1" qB>NxYCp| h\MwCJ}KЍ(%f}](V` >vU ⃠&uϣ,|7+,:pq1#Qըe@Wost2 lٲ%kH˥dj_rOPqMwZY\.W2M1;Gi=FW8'PT{Ձ{n 1UX 3`wP;gDZӷᘜ'j^`߻VKJy7xDP lı]Ѭ8d{x"@E:Po@R>zqi6W\11: l.`ui14$.âV:{ =b|+xZ]&h,mrM ۨ%){Wb[sJ=\uz'`06:'+.gh6Sl.}@I<`u @ޗt@M!) 崛}Ny ׬@$m ~~S +6dCB6:2E1BrIzzMkFQm?v ,1o>Pޏ`sU.>D F (_~DV;wJG ]Y%&/8P!A],J7rK#sKa޺$rL7Oxc8pGGI24&fwM[t{$t?^VlbY;2ʅ_#_9Gxv-^uL5Hq +cn7HV"401-pۍyR0=/%칷?ƃrk쿸fD1"F3/iAtW ֣D0 -G%|i 8,l}Qp5>}IQJ|{$_.) J!"˵5 j2U/QEZq!5wj*KK7l,o3i9em.:#dH呚qCzK~R”|, e|ɂG&ED吢SFbVLpISaͱӸtA&JS2u`!U>ƠEN*ψyҦ mwGԠxgE[r2g[119f={ڻ!m+x*VǍ!!  e?|#hS%YY @_ OzM, ߠaOgJ5C8‡DNM] MS]rAv`RTy~iRbmEؓ8KRR8c̻J lZ߇͓s;1P 2h TڸFVRWezf_gDtNܥf1|npp\  m9Ɠ-kS(Q:54Z1QANvE{dʉ 6Q4q|Osvޗd/&w9skLDul+G4̂$!j- [~@]=i379P`D2I޸*Tb`2]H Vn]"N~c*i,ijO+x}͒Y+Ck. w&,  1fLCu׋׬KyMvqk»W-e>֭8bB4 vP2]nRÓQ 簒Afy)) )ʦ,ŷ OJt}ي)4%u^.䠻^|>UOnEd(1ښpC=z* ?Oa`#OpRZ}F<>VAH0W3LO'Y47p88ߒf8bG}$ mkK"Wh bכlfb^2_ƣHkZgCIW_[.hC:*s%҇b;w)gPRVo@˪tXЪٿq*309*VzD4M "gu\BcZl m:[Ck WolgKy5JSʏf KyRî_ 铥u].HqP*LK ؎}l96N= hm#(UZ6]Na<^3j&aE)8([߳̄^6yG.B3WizܣvR aJ/145ʥp5yց:=>Bn˿%]ȤENH^p㸊eeQGVExu;٨ `]. 7ΑTevvOc39yA8-5 Dh}"jg=4;7 XX PV9WAJ1g/mj6ɑiv~q~@C^`p.{kRkVY#8HRm>}!MA,\D]Ԉ9_R7$o*="WD]ň82L?~ ~-&y_lpH `c)9F.։^ =ZRJw"Ӽ1<8Oϸ&F1({})2=Uw tM~AC ls8\L;W&+y֧ڤX=&0^=w#V._-0ʻ9Xĩ7Jk3jYNHnI$z2k:&W4c}x4Xt>0ZL^4j,'420!Wӟjk}f$KR@ri#܂3Vᬙk<\uCKg[pa͏3nxK |nu\@MQU/I$)~~f oK-40ȫƦz3L!=2 TXt?J/d fRG}gfs '[Gq7v\Ew T15g,Leq]I!?[?x@B(F.YY{Xg;|vS{z|:zֻȡ|P ^Wuu=7YTRx'Bs|5L^4ӂ} 0>M||qtD?2$ɮ6nGƬNe\? &WR78܀߰.z+Q}3nՒo֒8!u ̡HAq쟎8ǍK⶙G!:q< i }:> pAWWc*TVv9Q0ElYJes@Dp׬g^<#SMCf +L^*%I? ڋ RQn#fn!Ī.1C^Ӣ$I:% Ѿ֢Q 9mq=+1g>Wa#?O|r}FoٯnQ9OW$U$'kBu+5RK&啘\(Ev$r!C7|a'[y{<XIe>jIؚ_ R>ŞH0O3]E 9NXb5y%%M,Ȯ$|Xʍ=7~!_Ҽ1hD#v"fwau_)ѫI/䇚(:`>hsy ڀoї.}~>˓քvTCogJޏpk' /XIWPLYfYOj o#=՚bֳ?8UQ,5' $5r\AE0672OWH{-Wb՗YXM p:sM dX4KҮ4Kmf v~Hw9I7[,DQz D]6-vloxٽiG4u܆)b@&&+Q-c)>I@PwIaߐT-F' nwfp㭾tNR޴3(BwpKuGzD( EA},oSJ>)U3O.!r& 1@Vp+Wnl: ]c%t%ղV ~uC+ۆCݺ m^ϩjYیb>Gp+vC nFQ%KyEyp٘$$wY3Ny"r˹n*Ň 9/qSIR+>Oa8BgX`[ueG?z8P#ԛ0I<꠺'AOp$?ik| c"E:hX?(n5,龬9|U:R2T@WdLE]=KeM(V?dM7 FmAΆ.6*!U`ĿR7ӽs)ZZ!3@y0;ZaD&ZX:d!z\MX_ vM`D'Hs]AYғ%":0&AbBNI0]Ék6 ׽ۈSV=B3pQ(.(MYB{A9Mؙ!"P J[Q @|5#'m[{yݺe$EpL{* !]G!,.͝kM ,=B[o}O ښGWols!8﨣+/O!3F qhkm^Z٠Hsځvy$ i;=R]fG`Xr?Inj|4:U@a5}≸9u%}:hܕ9WPJOk7mO!h?0g&z V1)cҵs6c)I0y2jRYpZLz@ !ΚQa?h_RhyP;~) ŌIzh25N/<+‰KF:!>A@,$61|Mf:6Le&P@CUМ1GlbˇSv^ʧ; >~FrGN юy–z֒0Vyj[.dN ¨%^! U}_ZX_q:}A0Xuǽ;5B 1OOծU <_vϡ-7ѹlw`Wmshft~&$rMS"V\9OJe}Ү{̤$c]̐P.z1l1^]C0g"0 v0+v_2aW-`d#$j x&k0\WTr` _<t0`% `\Hg n=]̌belV ,&gmxuR8)<bd~[3pWuY様L ϰ|)abONPEItpzL ~+HEL4DZ ;MCQ`OmOO6'.o|פz׉8˱8nPqXC@ZE#1^A*>SUjtK1c~4~ڎ~ܞlToy E6)ֳWlj1(QSR^T62-+=:W3 o>ď;4| e;d l7hJНQ8k,D~9]ֈa+Zz=4D-x -@vˆԥiʸF' g׺V{9&Ѩpq;ڒ@i[nƇr0$5>c7{7>jS%$XI:j gR ^TǀY$4̲߸7ڻJ;[ nv8>➆VD\m uIc<8:Pq<zlYdJ>4v3e&DiB͍66} c"Azz3h8S¶d{s=fF2hؗP &* \%hF1DV4K)1,Uz8/{Xy"RrЪYzdLO4AU$LDwyy#ͳW6Jbo9|e-#u JՒ՝ :`|eReK~agb]DIlK0; !Y|X,Ҽ ~7J !?ݑX]O٦iuvb} [euZ䃝*~tHl3i.s uih֣L >ثĸ0+qmL%}f9`Xkf] |GoTEQʭ< TfKi4wym vz~B:#F7e C+ֈ;W$STݓ%n0 I9wqхH1XG$u;m/ W#2*<\;tbjr)[]E8r R!0n]ō鶈?vK0!iH}[`rCoͧ١[19m lT wX.v=eH3$ψuwQ`*]gMLpu83HvEPF.TcZ׉y2W1Y fNiT}הKD*$MIxPI OCDZrz^k[mY nO~Wik]#Rog[wiL]Ѩ5N.LaWi*Еf15FnZJVn'zʴ2#hD i,)Po(E$GDyB$C @}H{J$6=5Խ!b5;pdβg!}"aN h0޵QGr b%C~89Ð\pPR>WDx *fnf-*Pݖ?b}^ЧĔ[m83m 'oV㣯1E搖֫^c' Xuhh[AU/wDIN1T)-DTw)b,:n)z6ylȊ Ũ.u!A8aNOJX וD[HU ~*jBTˈPFVݽ즳 nX?E/`>U": l?{o8災)`q`"0,1>MRe\A":؎QeδmW9x̺$(ˁ<w3:ϋ̱T35UQ%#YzLmOKdSe`Vʣ皥59AI?yҋ~b8~_b?J.Llqr&Vw bvCZb"ԋ@HA(C#%J`ՍH0`'ѿ3Cw4sSaX'QEc}b!Ydo

eng/cYbS^eT dB`32 (]m[!]E Bc7驣.uTLeqٖ# d 6Ĥ' 'JmFs.0,8%T'4WG%wgo;넩%s/3"<=E7]\Պ0%D-uZ%91˺2&Ec<87Zj>-#i*Y7u- ͡z;h۹RcZ”7U\%uXd۵UOpblӣ~AXG:Ma0݄UbU`j:yQ8XkVsLygJ)0f!+'O?' _헷4nP^;@ x,:e={n^&`?Pqf /0IWHWLwK^O2S.Un}w6ų04WֿFI9$!FDL^ǻ+(-bՠ_zcr^6ƉxaB$0 ag0ÓX'HX(=zo3Ct/#4Юhwa뭣 oȋK@v[럙cH/n _] ߥ硞{i,Jj>,D}˜XogfD/EwТ82yT_\e;8(G[k;DUۨ}xg1e$>z2SyU_kC{JK2 ^L%nAFT O% ޛCBOj =u/sr1% H@ aJ)>Yh4<ґi ]sie#7&nCW ]HHԉzRGA蠈HsԳ}$D3]xb'Z\ ѳ\#0W۽^:|^ %ʉzb2XXJF> <}?$954KSCݰ^EFSoW`~<"dF&M' ;}H&g÷%aIZ=0ϱKAZ̙eMܹD4iR!E ׷Q27(9r9=6؛@feCs(-ȱ)'+|vM02>z!jyփ|,jqZWbr {;b  (a)/rbw= PۀhS9tO-7mK~x@)'(SvⰗiRF1[j9<bD| UC[_*]ZR_AX%!iUIfu0hre"KݝVYe 2Gfu ms~2 nxmў{Jg?~z1uO sF[2c`L#H}K_WH_w8I3W?zRMl m$2bO[ xxW#Od TMZYUY!}F aY21J>a6.R{zO8ۮmֵcTQ/Ef6{o>&*(*udrw \Wώje:`ɵ"`WwL1H}*|X[r1oE6x79;ILښ5<=\@Ї9fyEӾ]Rqy.-NjE/Ӧ#97S7dm+XAovl_J^J8Ĺg/;az ɸz ~|jnۜ>뚌6ILd.XWM[Y;{x6j a^[)IK\dۏQ_?RaSx0^͓dހ}TZFa 8_y(D"m&3랻X'; ~m]6,"!XrZ "QG^??]P-kBV\d}~,%^VS>+D~sTgaG1 ϼNhٿ>5AoݒWiĴ5(byT idb]f.WPxVzcڈ츚*֑S[,ζ-U?nN(P`;;n" @Մ/#E`~g6.t(UtTwm{ )d; гAת37yᖨ#1@9tɵJv0m66pجbcdiם1M<ƛ|'3a4nwؙα!W T}b׹@PV*jŦ(oq%qEb* DqD40jatb;?6$aFcc˵?p S8s*$&nC$ x{c:` KF^m=4Wp1c TWz:.J%}|DQ<䇩FAr7yrۙF㳖[ˬ[dhy)B3'~,S\bqy/u%mvף~:MXYpTcrZ:T^ZeDeTW OqHYT8K^0'0h[Bxfll]¯~{GNЬ-iNꯠKڪU}cWF_9x1_?qj IB׺[}E(?Ҏ Z*V^_GRXy.>F=m];.f.~ڝ`bwJblS|C ͼ7|a4R= vn#{0TwQc&NH,COQA2PBT@wk˹i$oZv 511ϑX+8m .vEmREopT#SsFG#WCoqJU^&e{lBP2 FO3ib ?LP5ݭ)7齂+imSI]VM`D=ܩvh4Y{>v>;/Զp6aa $뺒6ؓ"x~"'@N*5iM$O-ET"϶5yD;r~9XoV f?zt\\Az5e+ ۋ+]vex ‡ms9wWh646H=蝴Y7.=v̟1K:\Q<2ܶ ?o&m+zNlE [YK :?DY~Ǎgjr\9a=߻RcɆgjEPkXFmj&ao3oIں@x:-&|RZ{ #a8}Rbӌ`V\y.4E&)bKtqpSb޿UDS9 C%Xj#\G,@Φ sLIу7>!׾虢=/v˭*lR]J?T*<[4r"h+1ʅڗXm,lfxL, I<} "<%̃aHঈI=O-M[jQz{rU) $+P^v ¾ȇ$n3uȣolRD˥/H*lѽL8)/vGNeSӺWgJb'USb8Q)926kzXm&_|8[skh5\e.SLN-'mq9-?cX\Ozȹ5[3!lTY׺Nv|d>&5HD=d̰ v={[ H˙[7"~ p{5ލ7'r#[ŌC4B]f/Slؖ1#AU%wӇ4 (X#Ǚ,oOkӪzeZWçȑFeE$_u@i~ņBU-dZĽt6L8iݴ1L 6x̅m~ôYޕzhjHSfӐS =zѶ{=Zu*k=lzhy0Ҥٻ-s; jWDf90T-̤ʔc&[8 d˄@8;CEHx]boCA8ٚsF s5Ym1 ZO:/Mؑ Z^O #+yh._5 :R.)26ĥmO9mE2+1UUqj\rBeoDO2zǨVyh>1ːC&XH$F o!%:`|ٚ xT: SwNwm:+!±#EL'jߗb}񬐲%x|Rg=!.Ҭ=xf-'vct@3Z6_ogp:Wi["_ɒ%ൈb-P'繹{kIնTÏ3]BJyz=pӏC brdk3B#LJO0n vue.uUCs@_)^կsK '`J,U29 `tH t Tt\xp LJuGSC[TF 0'0KQX;ܙƬjW/;G -! SX[9>PQK\̔T~W"?S& kb=: vTWsWgon%lfL:]JT\2p\vEk:\hys5V+_J )퉐!ڈSy|z n&!SQS3ףwJxkˏ!ztĄѯ%6Ņ, yjN{Cu:< FNb54v`.c,5'xtc O(RcbyѮݺRT!. ܆Էum5FiZhF`Q\]xB8+:@۠"1\kY <TSqRCwp؃kV0'Cp! MApVLmg؊+qۑW˦2)\Qo8pEȿtUiį.^&ӧz x#Jv'#Q4e nTŨ5SL?HVJwNc1qݷ`pjh~(Fku =,>f`iXI%KI!0W׈8 !BgzⰱT qn͇C lZbc%➢=C`y%ӆ.' i5Dŝ[OaW x3$̲}0d^FO ڀcG.9Oٚ`fҎIITYJC|–l?#Ns<3v+]RQSC9 dkU+aGwx7U1o02uuoXOB8)O1:3s`@&0 ŦFcB twVTF(RosI/0,#pHO5=ZF>UrcJdX,4QU.Ҧo/lD@8zX'>KZ(luS%~x͕>>1@򇢾fr'{[05ցs&2r*-qWDƋL$ 7lX%!8,=DKEalڧWd=LDJZ AoKܘ:$ӲSN} 7CS{ODy,>6pkaw-HO~pxm*|F! ]jkEiHs"*Y= v{MҴY/g<77ױ1NE-0Acm#72%D=2]W,zo yhN3aEU7E/ QPxdGoA^&DZ{>浒Cf!E2>%DgͽIL/ȄUˍE0y<w<NS.%Sb%U8;zXW;]&A+2!@.5 >a"w< 2|iEɓw6\K}Kgę6"zj"fM8fҦzu?rE>{#d(6L /c0H>d= >riQHisK-5YcqL4wBIEbݑg*u;PS69O5Q|'خB::BR܈JO*8Wmх3J>|c:lę[_k G3x`^TwJ.:ˈlEѾ*RO+&iⷠ6`-@Ri 9a[W]ݢ_VL#Á§3ܿF }rc;K ]GQb96ڷچ4kG钐 9s=*]skf,ស76D?{MgeFOPwuByxlFyERm:A=I{:asnЅ@i1 Ȉ&+`0dZYE@JoCy; U2$48)=pfYH|7%Y/3_w3 ϊ]ޔhQf*Ɲi:-fO2Ҧϊ[#>~5.V}]JL%Қ e-$S8v{G_a<)G2tr 7ctTw}f(?jej4Xr* @WsGf@({$P|deWǰ 3! w6P崗c3WʹZm us, yp Q !mZs. G;mN*,b G 91u\Wu/fіgDp0u7eꆆxjIlFIij.q 7NUn9d_Wu.Z! (_5~J2Kpg{Z[7} "#׋Dѯ.NK0p֫GwtU$L.mdY!^$^tVz5[ft UMy+xɌ1SU#@e]Rb 5&<믻L [ KoJz˴*jav9Ezݛ,[GFiaEHK<O>v떐onb Ht1#!7]}?6ٮzO2%<"x@iH5'ڋf_)1Í1rMIrf;v61iQmBsj*4[#1XvLUŵxeGف2-X,:[ՃpAѾȻja!H8MŵŦv[O&ciNbQBNl)";%cV>Cz7Jz]oV '45vxkWMRn5gzSdLn"Nvv2tZgV}aA%C%̓HwZ1G (ԋaԒN^H`2V\#F>y-_,Ы3t9 Wb͒HXLɭ?\q:zͫA={ggVm[a90-JF')Hj)遷?@`׻Ғ30QOz6eUv`?XܻTG =p@IHAG00 X=eH/$2"+D73;B fkbjylAUWWF.Lޡj m(njʁ%UY!3;([Ւ,ϮP5hj$v24\?CW,B\g~g Aw /,bM;.}nqS#6EfOOV.R>v\vmLwO-Ç"v0T\f#_YsX c-{K<2CQ0ҕ;.d*NW![ifs EFv7Ɩ_K&QגC*&^p^\a7`5067 ̝plVjq_G|ʜpX} to| hBp9`J!趪]M+^))^j`e1vV zts#Í]%?/!}^R1ց>BRJzJx E2*8JXYdQɓyǨظ_SS[//:SRӓ`h:aH-f@D.Yq>ެ^n~7!%oQ=6Yp:xZE'3\8ag#\C ,S\ՏݢYm4! ˮ5^f6H.P Ē,i]uRfջf;)w]hQnl~u25*| *{[i,u;>[oN\A75z ­`vvT=üzhvb?Vp2;ZCT츇"Hn1\A3,ArSzU~'цp*p=3CSco_J lv޽?1q~vE8V; NLbJԘeuN.^ݞ㭾X¿cbr#ˌ8SG֭bR 1`COXdI#KhR@B)'x7HI.Pၤ'Eu 9g$ks+Ny)Tٖ9kf1ן٠^XWQPrK=RT=\á:Yarp<3_X`RoNixkNgL>q_?y,w VE:vQwi)BRhq}iAlX6+HR`KUDYg8GAV~ǽ%qmܧnvvU /ZuW+Scc.>|x ad89Czǒ}S;?ĕMW&Ca]~A`?|{TLK&q1sY !G׉Nh:!l `pf.];q]Tk'F4G KOHMwaccx7tsdyzH^HiZu*6o?4xC*n 7l&اEhӖĖFqcO"* ّ0{/,q4K 43q>$cWDCћj,3P׻\`Tf(6b̽2TkܮO2t6 l$",0 ,/vgb;)[x,t?dv8Ҽ|Eb+nNby<;0ɐ= g8 Ά7Di\9J>>4q-oA.$ԞڍH+џ J$s!4=!EP֥0τ2^f|fF;+*p$r$Nf2ϾviDn}5NXPkH>+VppM> gVmG>`M ,2u v]1MiYja&Ѻ-VܛD?^]N(]R^@>SwV?k3#Gzt?_N5ܩ1bhI1,oxȓVa^j:*y)1jæ%}ؓuV8&`.RlbYIL hJ:|#6dh J~ߊ $2&V% Ij/"_+9N*1Ot!% ]:pNtA[ Om JiZEbQR{t.Hohwϴ*rm 0pdͲvѺ!d)x}V@ʳʼ5FLUFg*zU ~"4V*c }QZgfHܒk}x^zY8%2.> {DpE߳Nv{NK =HeL6_ BIX)ntmj7Z7󶋽ywpm*!; b ( L[=UCr S'ڻ YM|@gWUܡM/V*loG&DPZ&r+`&m;(7nӻT;zlXzנ@72 "qxrU cT `ݛ; #ʶ$g}NKWmN/[b?iu7{a+4&XϬQUoE}j?[!a>sU*U^b.lT 8ҞtCȭ˅DnǸ/ڥL-ISb #(P+(x ёG=Vf7i13W(=.E 815tV]H KRѯJ!_oV4Wmu^AHl(s‰'}9V]pq',I9"O>'J鐢wZBϐY~m mNOYDQe -!GK<rŰ4jڲ~v1=uzQd'qw4@P\"ߟp:rLl;_Y1)OdL7R*/C $.t3 gBiiMr`}ոQD`,=(#"ΕH [nZ˚VkgN=-݇ۀ}7,G#QݩE<օ2 1FFe>VtN9գ4S@)&kuUiWgb aoK;A[ }`MZ^/6-+=L+"7縗y>5_uXSfΒ(|igf,=ۊn*O1(Q(~=r&M[$ů_ 5vZU": CiZxS"o}Dl8{D@t^j:I'MgI\eU 6|q\{A7?7GSb$֯WM?E^Ϭ`υwyׁPbQ@s`=(;]p-l="?_Mde ѼwGv'&ŘE5JD(php:Łd#"'<:fnP%O8HHitPl+8" z1iy_2Okvjf#2Jެ.&x?hl_&-o8Cj>ɄaH-r{yl֟6P.GȉaLEs4AUuՊ?6l+%bٚ}JuYȳfXB}f(ɗ˻+>Y|Sɥ5|l!4J0: (X >LU^+1j; 9]mxbAvɿU[+ ev-)pz8aqF3]Ӟ)%041Q$j9L]&9]Pgx*yE5}q0v?qE!*A % a<&@KL#҇gdtG9)] #6lE֍QDžG8U B[hK<;!C'*#ҭSSl.6M%WvwٞP"QHwB"_{MYƃc h;@u[n1~UZE71B +هH^+T_%w;x217u,9ї׮ =<ah]V/G[ ;ʲ=[?i|sKAk6K"K-+P׭h 2mbnw`MJSUͣ#l(Q9Wc_چpxwuY\XQ6os ToDQ<ݴͽ[lWz mNS`dO J oQ䋖ZFC;f_( C+$XRfY ߁7X(XV⍛QxG+ɹ"")3|xQ^  09,nHp820 1AN11P2.2ݫ}FiC\" %V孝[fej_hRΎ>`3C&еpl*9 8k ;ph4j<0}ƐY阤uuZ@Eٙ#β>oDf?,ymUϺ?Fur"0 6ҝ#Ҍ$|!I%_G )7!l cJ>NM \ևCD WC(S26S 1Sx=uzOh6uێ G tTͽtS F q_0ީf Q:tbG 3qRPswkXBU{oal*s[\r|DZIaD85%ӯI-iֲ%~e_xZE`` PوoKj_Ӭuw0 OE3QiXP B<՝l{6W-ݤj=EoD3wRDpp,*yir.jh k2yoU#=ְB5պ:x?0{.3k~e:(c$]Uմָ 'vdXgl~<%_3e*,y5Ѻ4*0Mˌiwkw}U#]c> V}4VL}%E2Le*[EhZpٛ}9kmFl52] ?=\;EY)ٖ P(JcE03v= z/' +}ͱe)Tjl H Ʌt6hgA|C||b/1c2wȓ^02ŷ Ѩ{v {,.TMQ2cEt2W*㿘|!AՃ LO4Yrgܒѹ7gzz}Osɜ3j G( ۣf\j^iTSQي&ҧ\ڹIQPчPIUw'$M'~+`ϪpcG A|­ /*WmK.fČAqy]Nc4_2jAra.Y|+e3[!֞eTH̚yXCHkSMH;_=fQ (%')KփM37c0vmuBge("2[p{XʶزSp^|>suV.T&Ik,+*Sv令qg1-:DdC)R0&TcGZ>2I;ٚ*G7P|fM6Ea0َ.b_RD6)"Q.*z* +l74cׯe_$m>2ڑtRFJف}G㔁+o%1d%Vv0tm>+u*}8M6 :jr{ % (#liYL$hW!XT l9QIWjo_ًFNzlK| wjlYO/mLW[{0w4ߩ ٮ2S=\x:~3dC9eGSQfdG[橫-?[zrQuƄ!)%bK9μ~5Q|(muf% 2 誸Gp[cds~և+R<ڻN*ؕN1ާ)iC~N\WNn\1pGH+Zmx &5H֊K\Lsz 9j 4tNU{( 6v,#ɒ3)pOmx/ Nb1+hE'#EuiM&|\ԃ,zndR!j({) YR0!O>2,U4/H-q֔wGO/8h hcSBjfnVP9i=(fvq>+#A~=y۹|mѰ3a`|MߥV~~ͼZ*J 7t'̭xjIh@)MK-V/BؼKH>Z-t VdX3T ;r5P^BRoreT\h!: y5xP$MOhӧ8w-J_wAke6.(~ {wuL\9%dS?Mf6jd8MZM{굨rC 5qx@'Lf"Y+yRUӍy\,6x&)?+` 0Kc6o/s#U]r2AkʝJ.;$\9m]]k}JMpv{{9Ѭl2ˁh2-7!Ћ v&2 wS{?{ @<2ʧn;P1dQ=и*=^_zb!aD 5%+J{kR}UwF;XuR n\ߦbM =RZ/ZNV xsIdQ"+a|"ɯR>pTQ[&N2#f>9oV`1踟6^JLƊhA3pMXe(рexiU3 %@\IQz3j;¤'_Œ1--W?łnܒ U;GƪsppP*Ä#1;sqNߍv$74c7Nw)!õ쌪;QHP#μ~'^o#3TtJ:k:`:l͜5*+ ~x'q7ᢊ|i##a;OL䪱׷ƳlQ7sRAH;/d2# J<U3*P.>^(q1 ;+ELIn ay߀o@_t@8"d ,A|v tqQ exr 8$#{Cf$eҞ-]P¨6bu]<Ѥo+/rv\9έctA%&o 8Y- :JGFMg)?옇o!$.]oJ?F[8yǑ4E%.Fm4qF'xm2|*ߞ&XFeuF3P^JfVáWAx%y3fOoA,Rf2"m?Z*P<*Y2{¡C\usJ=^Op'%ՕFڞimenqxmHV:aFSjFsm5wBij4ُ3Vy#=;%Q`sGP"3ײhFm2wѣ?@a"dF 1 g7Nz;OiͥfmE2ZRl'dZ܄c5K&F>Bٓars>44U(N;+쌣xUuxF+,J1ǽ҅ذa*ήJ`q4gnU `OcTYdbBG1L1f 뀦U)dlۈ9wOuE)j7;kq˲ ^R"(FF asHUo#B7뚥Hb$]R~m>1 WymSy[Ev""ݦJU8D58S!P=#7&{pYzPay&*48Qj z`6D~%ɫ9N:)*TlY c-GOcpA8B=-%Xc\{tgx3WHsV*޻5q 6g7GZǨo[W<9K[)D؞X+L0)ASv~Xq hpEzrB9Ai {B}rO,]Ԏo~0as}IYESvL(IY-y+6-xߒL|S Qb ð6P0]C36SSܢCQNŘ xP z*GCKt!ͿE&'bu  O>Sx@˒ӱD􆵉UU-"v*ikp<8kڣC-KX5bYD2%ԮR ɾlֱ'PbK.!I UsxS2pC ͤFL91]smƇ=)9s(1Hڱ= #%ACq[7ezYu#A qV~x;bs@>&M7${~CPfpö\A)iAS\Xv%Tg}pv0 9f ˑ J3 0=lm `a?v6#>n"WD{CD3"Ѯ6 u{ACq!%x3VDMΫ+Krcq^8* ڄ#58iG3L{ُ# Ƌ P\Mwgՙ"O&gs#͐&S-t5!?GS°Rb4Ѝ(1\ X4]7%81 lI @±}y,x BqwTϑor 1|5ޢ𩐔P<$'bw$htF!jև\cwV F| X-CM=?9O {8fL,]" F;"͒xɅ퉰'Ȏfx6\#]&wA6dnEi~Ԓ́|WޔG1[+F4q%v2zRwN79L66Irup@|d49 l(cւ<mb>_B4=g, j$<BtXjN9ar[hVd/giV@JzlrGt {y_T*'skb@he*ri!*b~vx<:_]J֜{*ǯ9ÍH<]G0wIlVOF6,LT-T-dzRM}7fm+]-O =MZ߁,*(Q pFFS92EGxpsDƼfyH!RrPWEJR%|L]{'ɦ}qLm954Цlh3~0U"#BXŞh=l}}yIY@_D ;Y$j]?x`zn7Jo 6xZl/DlJgސf<az&O?iDwJ*l\m,͉es ;Xe;%q :X@bf2TN\\26A4սe*{&dQSGer Y~Lc>W},䒬 Z͵93aa !Ti8[M`nʎk$Sf~K q+MT`sJrm~ kpI&Zt_iU$~([iY :ȋ(A1`,ר On)xgoׂȝLj"N8X^awZgv+T1\'rKJ(=_)?z&tV/ |]P}K?AN04yv`9!Nj?rڛG0qmI{l^ /ymGWKM2i:L0Q K&wfg%է!bGXt9e<-d"ΩTnWVHz"q1 u)U|?l`?jgdgO^`3 #>6+>䮅}]CudyFc:~JlR^9{sF"E@o' xsދ8D"j{WBeڬV-&xoWJNM'WZ rM{@oyP ,F8ǜH-Z#5C`~yg3[Р'EeA]O;}Fmԃtt860h"zO6N*o+LM݃%] Y> K໼ /ҪkO,|,-~Tv"q@1'Q8;Ɯݬb6F Va-fVzMU ֦8/?0OGyV\|Gd%U!V3 q$QF5o$dB\W6CLB@)JW+WɰL++m}ƻ vܔ5xP6@kGHqu.Ǖ 6ɮxԠE]@ RAU;s 7RXFCV""c9Hh:* ~ ϰR:؟Ti;'tfc&.7ׂu;. g@$PN`0'~:oڿ@ƇpxB6mHRkР?Fl}  oY4|kfU 'L51{KYI,'R "XϜW-~?\cT2KX\VCw+vpDlTQt[$Qyy*X #@Ebu98οe[uL0[Wil7g``sM|6fW3j[bwܲd1uo2&X[@ePD+P= Ex~lL|-]As1 gq%>_ḊT?'nbNOOzLqWZ4dZP@-Vrne*Br2h8ol`r҅k6o~U2/F@n+VH͚?=_r1utvV k^C#==;lSСV/ڍ|6D"u\,8$j,mjnm5H wu+5EfVu6Kε1"^5$ +0{ IS%"g6rzo}!'D7\o4R\ځ _"r6톏] MnV4@ '̍F[C]c>i3->)۫N ^?lv'y 22{iM 'QBtAZS|/r@*5(Yf*Yl?4 mRDs?S]l(C:4ӑ0L)bF\秂#bySЩgQ. a]2 +Л"h.?e  a@udʸۯlMEou0ڃO+?X&Ӛ-^]MSۆp*Σ{C]DS"Tlܥs̪.s>51!$r1HI0{L;ж’ՋCv)TZʈJhTUersILxyea6d[lRn׎8@3݂=X pi/oIAB2-/255GuܦzՒ5>0}7S(" h5LsXQSz3eOAA֓v2'b_ G On\R*{/-L*T$O6ebcgS@EN%S0x {҈e*R͏2[LW&wMb4x̺oـyVS *k+Ya|tMI:[dnp(J̭K)X"ѳ2 њY4a >nGWWCePS-wRw+{)9OCÓ'qzp GH>2Ѝ[ߍ?f8؋bCZJMz :uE;\t mx c8̒v;sR5E,c\fy&Mu]|w?hΐdk$Լb{gs^5?ؐp/h QX[8lY">EPh鈼S{qV3@t,ٳg"xE%c?٠X?8;Ctv3b9W"ӝ]NnN?&"t& F+잱gԮSx, 5ͳcӳ +]+Ǣv9]soZӛd1< ƪM y^kg mT Z!0vam?P:af-ֱ3ӤEA=}zDvR|3FVZ"}X\\[Z4 ^R?^ja?4f2&Mrw]|Fo0!4 Sazڜ4P;a:&;A|vvue v (Vi_nUy߯Ni^c3ׅ4}O1ΗEj5d0B ou:"{^X!)EJe?`;Yy@K0(-:ɪ ςb,pd '3?#^uTWF1z%{GۭzW@J yte;j~D*p+f@?C\QYM^*Y9"ctϱvAv[Az$(ɟi"@ev'T<dSl{<ֿ쨻+uuz|m焩'+ 2,$$J̎d:"e9ܬ8۟@q`Λ~JyiM{BGe,b*ol IRTc eM8ڹ %:-3% ̣/#z8ye !5ib/ܺL 8=] r78>!Gj<12HAt `rnSJpxIhlGo+a]uazhM!/bn.]_ԭDH#9L{/@nvIlϹ;)}U$e6>%SSp8sb5@ K ARmZRo ?13q}n>Yp#bʏ~پ$%go5m[p5_!j@Rq/~Kޯb6S}e6}p>Ino'.dOE\Cؤ>v!?`>^~0r$eX* ~4%f \t|P_'f0IY̾ދP0{-H+#u g7 z!В+ӊQJZȗ}M?6oȋ[簪X"|)G[ac G FiG&3(]iT-lgm9^eFr6ĝ i+Lc=~z 3,\G[au`4XVb~EyJ.le 6d2d%ckm*3?(fR$s| , cސgI'<$_wsp?9;aǗ$ ݌$aUJu]D# nD7cO8N}7"7\@%^6ZlP.ߺv5WmVLDy+]MK)#Dj+HxeQKZ9=f R;SX0Hkvȼ# N[ѤNUx-a=~}4rX*%AyykҎz00]j?=.Adތ®LQP2>c)׵˚{qebzd2UKWIjrJ_eqÈ؝9-6j.>,;pdLEL3;LI=qmگ'k652xE}X%v̱6:wy_dQ^Fοhl?:N 54ڽ-܆U&hK'R-WXlQ.N^}%;Yg/¸+aZy[^I; x({HJ~?i1ĝ6"%2Np9%55Y섨5fs}3F2wɳiaU]`G|HK#4-[dp;mm:^\@`9~b#r77[Ͼ еL!nsmcd6|H:.Q|xL0SEy24S3ryKaTcGr8]gK?^@< h8r|*ӁYxyg5S^0U)eTTa5!g`iG Ze?P~W޼SשXZޱYծVxZ9{]Q1b4 ' @sد8(E}QrMI䚬Wx lspbmk>O9JgOTcOmCԒlzot}vd.f[4]r#BHNhgJhL 'T\h &pl *h@E}V"4U?܆4OSt))Q8AL `ٛDS6'xtrxqi\U?af<*tR e֫D9$L=VGGևtA]c8l2l&6(AUU4c[ek:R= P;K2iOuT=W 5zSq8XFr ?p?n/-$–H7by|+6ሚ_bl{M c1f2BB >c%'Dq:,'68~< Myd3~bڟq:*NX lA$xέTKYDF,\$138A'4KpYb| /)uV$ŋUvԱ^GÉED6#39be!>Eid=(t>3/:Ħ PQ˶B;!-PRp֍R-Զ4'zL˜ ^|Q>[ I5]1C԰k8_ⶖEjτs}4mkHMr"eBz>=VNהT#)>Β%j{^@=IFޮc@5,>!`WR_c-`Ywҡ ũ5\-o ETGzyHmJ$c24{o'CZ(qz3G^%rb3>g9.v9a.'?&)GbqYnN)uDw0}Lm+V-^0 uˠ N-_d45҈C( U1Nh[s14"FP.}ficK>WՋ!'ULু8RIP@][T4!txq0O_/ú݄lRD6XOKJwm+ Z?](z;f}6F /@XX@Fߟ3,5ߌCVykD^Tu˪s~&8ot+zY}HcQG2B½]_3\? mɃhmlaQL%%Fb2iSw:/*7'F)_%~T'g+N ?25GWGՠmqf vClׁ gj򍘦ZrgdK 7jR\%v?/Ӵfd%)pqV9o+ ;mTa딷azUܜlW޶NȢLDn"x~Â-Uu:ޡ/9ʮݚEfSɁb w)Ahyl,$'h!] TiOGq ēӕܓN0IcGjt&L23c%X5]}>ub 4@6ʹHYNL]Uy"[mF_ȷfungKunԆOl|y;9F ~xwб'yg !:GR OFpY$9$˝!ma2iĒ&L=Rg>H/jϾa:{a(q`{r ?[a92Y/5[EOK*o=y{HKs -[.s0 $!5 j87jTѪڍĤlf cBA(%Z9]!i`'(M)9ƫ}Mk*FPY=׌iE[^fݓvmט \J3 <ѣ-1ҎAQ3-0!S.'G\$(7]8zU|.-a __OB >;B>=O eLPI2~n۴&)yINdҦ^EBci3$5Sz*VmziJmh2}/` M>Cƃz.к!gvVtԞtc:Z: "T9Wj2]e̼ :ZXg4ƒNjvf˯]=öW2^jhʼnxe%ϲR+‘EZ) 'WH"^_ԃ@+6\Ŀ}u/BՎ>ۊK. ԩ*T7F W 'R$*iCSR;VF4kɆqQU&}47*5_ϭۦO_HG!-O*J!CVN5עC6,ol{ /{o,a(#HA4dJ['vgi_+9$3 c&16"ˊ]ĀyYAHnv݆lz-9].wzFQy YF> /R4 [*axc:! ACos5xzօ4ÿд 10(y)y}(MVI;\ZƂ:e]ajKZO2#ڛ#Ƴ0zj{3Y&a;&[]L.9Dteϥ2M\20/hQU "F;RUnx_GN{ڑӫb!0j4)eFwPD<Wbh6T`K/Յ\<C3ōVo LbY j~*׮;FnJt0=+8,yixUe!q#C}t:ZOVĿFJ&;MHrxEPecViUDor%!yCLNT9j~/r}ˈX,^E Rm #o052Y{%o-IіJK:l<K"]n8!l]lm SRFfg%3Ҧċ'p]$Zo+pCϮ(`F&߁)7`W[jȅ1%DBZH'ζED/Wg=} 4nVڡ=I:m"Jyѧ$W>cZ%'$q{lO:Z%E7ݡj8C|Fe.ȰB݋v<%Ӧm5rJnnK`thV_ۃ$FW6cm=ҡ }Imfq7'" Zerª@6Tá2ВL.maғa]K'wH]PY,7 L;l0mb/Ut^*k7lAĨ}oA7ɸ{M-GQć32G1!Zg(Yq0q.MFV$_jx3:3dYRsj[vm,MurEǬ΃6κ(]8[\\͹wċ/d{ǨzL3نeIPd}ٲӣ>CѬH _lw<)h5jZl9F ӓ9m'X#<ꗉh'(hY@F'\4UU.jYFwyMg./zMaZ} 1_R[{<|2cx;iA?޺J#hACff%@S'" KuT9/{gg|߼Vi"QC!hgM0UA࿑QTwD}8#BU:a3چ9En_4Mv'ӓs0xO-4!{/4{۴i>ž}u'ru$LtAe:Yx,qJ4'4f9{Dܻ F"Vo9dJM;z/Q2&csТ(SU yGIôh =;Tr e{~rxȟޚlIku, ij'頗O4`d~4YMbfeHIl].Φ)Dv;%s \d>U{Ar7<7J=ݚBcK2,-Rv(pEnF.A]WY!O_#RpQJV޽$<\]Z9 apo VT7Q*Uv1"%-8I77{)8}z6QTt6)vƤ>67׉+a;SQp1 !iԃwB4Tc=ܢq'KyO NF:#DpSC2cG]vI0"SId;+P[p\vWi)sҚNҊBZ,ѩ|1gFSrBm\MAmE_K o do#գO ړ*[ǨS9țCat*:[vq#D'[t]_ܿ%i1- ob=2-J4#o9TE+SR?ڸB"*Tܢ<%2eB cW<;#~>gf%7-y1e5TKiR87JG{[Z5dU=ZLqOhD T4۹2jT.Ɔ.%_>5YMеBi!8 zi^TG]UdjYtA$TzWeEi3&ᎇW`^AVs en-^[5GUĈ%o|qZӕ6K"B)!|!D!%o@YE77cnu_.~֒s~ &;zzx0˴MH;{UEUC& thgj[|Rblyd\3Ș̗٘TܳD½ߋvg?nIk[y":d&!z-ik~AO /[4pSbWaw>\$.zK\@ %ƣ>4#tb`fӟWܥp:I@QPx=΅Im+ )g1]_zG;hy"s\D$Uns&j^ ӭj/P9 vUAB@e D NlIM2]Jto3" i;O T9 {ݼ6yyG!BҜڪT(Mw 1F*re&eAT|9,娆nSWի(|` u!h;8Qm!l-VTC9/Q)7n'|hfڠ(\6ފD[52$6p+;B-$Ĕg27 z@,h`N b:Q ?4.&`AR \Y \^pfrquA[:{;~B|AtAD -GWPOs9[a!ֳk:^C2ut5Z ;1Awh</8g=Y:7NE8W >{2 mehMUW]!\hpT؍DNaH2*JҠ%j Ited,|zULO{o#ɜ;a˄ 7GD΂#m]2:"L4Is8gKS.⯺u"QC׭ n x%(lIh.!>7bp%I4FbkO ^ʢl{D*fMsO,6h2 ̱yײYx>蔳#,Dg7K?F S HgNX_-g)?o-kfZyg#_[$ZiFu/E3\tG 樽d.uϡ6d{\ݕO[:~`n,z$&i6#mly"LJ_O~vɵ?:]r)4gJ80}sí/z}jg<ͲέOyw]'xT}'|j8ifqDsO'勚t "/%2pȴ6%ƺB[r0*xgޯK 0x0{ȑXkXk'~00ކ\bִx!lg =$'Y>vt۬VP[O qSCoj5[ો+ Aǂo64BS'zFբ{TWICM.ȴ)\ߓrؽ|bFh vkt6qp-[&,*ЄwTJvӜ,2/AIj,`ٙ%j:" 0ygGi|AfyH;ʁV'**|?yxhkY~@RLSM%c?30\IQ!O2ï+d0bp͒FpVsbI=A:noQ=גYl(%zWA@DqF`~YJ%\PAGlrdyQ.JhhW&\>f.{DWQܪV\Q7lWkL,|ֻa}Ւ 18' qѵtx9zT,n D8 {ٺyowwd4Y8PcA* d4CmqS ~8Y'rj>2DA ׇ "9bA3% '3QIreflj[/40?LPAr$1OnwD`8$JsAA:p%twfd 3$\#$J&w_;}vrfuxjnT 5V0CIHyʴmTXSփl֟ =>jFaob1nԜuY{A͘Q+K)pV .7QLp :0W>E8hbq:(/ G̭J2Yx7eP稒̡`P;#5Ѣ|N͕+ 4l%mjTTQ^PV4HMB hu 77S@LQƂ+ J}윕^8bhC:bGbըյvLN?*h>Y Dp?OC~ 2ޓ"Q'x>aH8aM"[UU L7[~8gOx=ZĆA،!𕴣˓3 "WPlS䤶b0r@J $)(DZ5N% ?m?eZf {k`b6llHcdxwݪ4xVÃcX%6JU-ABgwN,2'޳='**psFH\/& A>?eݴ!owb,uy\vdZw^LE V܀mpWap<칤`Gf_3XҼ}760HD ա" =ywqp}H6m@P_`@S2I* y,`2@܆oK9J\j͘ 3HVd12> "w )x7dp+v+ IAZXʠ}[ê?]r܋CvK߶w )v1ZolپfiKO`QTeVԢX *|\C4rʭ'EC"wA_!>b=>Yqڿʌ1r kЫl9pa֨Wejbݕ"H8nB &eR ӹQ>~fTÿ>gT~ʀ@s̜Qn,_wf9>2%.Azj׿a$aǕhG'WU|c~pD$xN@gu_F<CC+jw7`Tx!c|jog\[e 9rXG1E}. :Uڹ́ڞZsE;n۩a&JU47hu|!]Qzm3?ZX1*c=CN!tgѷ2G!hv%O&((m}EYi{NRMzVqO~Y'a#<gMظDDȨ =Ƕn;NârKPcYI)pNxa"_]Bm5 ' qȠ~ y ʈ1$>6"6P*'?UX~t/< g>Ќ[)r@^}[^5M<@ &Dž) *=CuNvI+UM\7ER^7ę1 ÿHr̊jQfK' -D+Xwy];7 JП>VY(QSJ}sM]C|,7C"e!$>P:yҐ'Lc;2jMZEa B-??t'_/ݯ;wq یhx2rVY? #jF.bPmDeQgcPv[.h,Vx{kp̡/iUȧ7#~ژ+FsGNo},x/{`~iȴjnCux g&4ZW'[1< .d@6Z^a_+=TS#ڙdy䛴G^ٮ] C˪ɹ,E7ǹ^!]>DFr%<`+g9zs0wre% ͘%1A gH˩"pp) uyX>Ӳ0ljl@<<|sY]FCN qT'o](eZ4κv$/@d'x7Bz[GtSmӨ\j!) k4s?`"!?;G۞mdYaE%WjKWT&z{Ryޒh|V5N%gvBz%X.ލ:'SagM1khox^3ҾVH`jxd0ѫ3?sz `*b(ř6XS& '$(6b~Қ`?4ah?;t@u mH R!+S&ugoڢ& ^! $[HWSrLXw#(eq Y pnj35aՃA}J䶋F J;)e˜Ѝ7Y8tCa??e#^w VX]%ɘcU klF( TRzw\s%/#$Nٝ]+(^?˔ъ~e8QHm<)t"&P Ƞy۠|a~{z!\[L[Aܳu?Ov'=S(>ZGaO&O^uRoX=zh yvE@gvU%̾o6FѮbrn^F0/F X [0LUA{K |Nω H֯ȭYHNkjދ_ôh4^hv1{aUHWd-rxg+rxn,gel,soO>)wVid š_]qiMHAHJtM窀1vFѽwM9j3/. %vT c%lfcO(Iwsh:`W CdZ>B(gLӁiI *acɧKSF8 ޮE@ol@+? 5mΆcLTU?aUICJCKT 3> G`NiYP{ȠM3X'F8Gw";0"ۣIYH[h8MYЃdK31[b j_{Y^f5GWn4$9Mo RÀک$V`0^Lk,X՗o$ ƓFl2ݟX6iX70Z`QlJ$9J%6jٹ&m.5p#Շ껚ֳv-@P+복s|PUgGF-3au\gWb}hsȨn0^egC1֓1IqQӡ nTڣ ͦQFeT$q xSO@J=`D 0kpY+$8|~:[l4fSfnP nNJ @˷%RrT!,> @L2ғQMcQ&3;&dYM401]J I󓓡O'E꘎hj)j ~ jOtez|GU<#:܊٦OilfPCV,Ӵ찆h٬=r{H8te)9lJ Gqv(9$qp|.`HH% M2o|C\!Gn/,L1Ѩ.)J)%ߚ0hoĪSxҴz6+# 96}^5vc (4}mF'4D}؂'O3Cyx_@/Z 6XK2 RPDi&L'4DPf)e_@?iO(cN3ɣjDh\]M|U3Dm@&!7IюdXϳ|؋B9yRIVU(d rFvI$oKͻ4 BIR,4 ڰA+$yvnE _1 C,(ѽL+k̮~HIxD:/#P=)w߈F:O{|yidv;%΂6vR ggU&Ȳ_q!Y .xr] K^E>;4@Qnt${GN=Mi%X}vmn(%#Iߌ.m:d?%T5#Vڟ~ۍ9>gVg\-}C7T1It^"Ţ-G$? '$lS9>'QkL(eFDw,r.<:]Dd" "Ht~/DXfUxjuHLu6RP)@?p]@Eh O%< ~z6 wMbk$VoXPhz A V_7'G#C3S!{bI*esȦq9y}>m D YzT"8}[fiΏQ/'I֍ZxPdʜo[aJ"uߕv#\MD]$.$eQ ;bH ̾P6C?py;DO)#u|"K71]3@t`NͲ֥ɓ:dtYB(4'3BrB%;IUkSu\9Uiso7E̾$ ulpt gR)[r{W=7ΖbuDP=%Yy\>r>?`3UQai!hL;9miWs v2{jBծn=@HVi2vA@sN~> #L4n֦3uYxzf]4l?wL8OߍSXhHK =Yb [%v5cͩ!R:]բȗ rg kڔM< u)'ݝTCkGDzcU7Oa!Hbe 4ffL Mcd8SRlБ?Y2%hz,-V V;*|nWT{Ubw'+N3~{{XLK}{zs`Y{q'-yWC jپ)"5P>$rGJ<<(5-|'#5WW0zDƽO;+Ѣ`V\NAɃ?5LIq1&eg} mo϶b}k' "x32t&0xM*<)9)TVht>N,!Cs._T:PxP6 Y 5>#\ߊⰹ#uc",_Ҏ\褕5ga @u[iGi Es$R#2ϻZ:$鲞34 _œM_`o&VUi\:, MT}ACz)*| z\Ӑ}dKR_!ӿ&$d>!lKfP9M 9!I;)ۊuxj扙8#άٜ-Lޭ :LBKzpF'RW70wuӖ( jVdށ%V!",j6bU=VHz,tI?0Xq6"^zS|C̸޺au󷄍pȶjD I<%2StALI4?ak4ֆ!Qi:0AJa.~PmĪ\X͈ ]΢"1 %9Ls]HWC<{u`a4BS1JLӿÂ3ČE_Uv 6p?.MhbTm Z+C3,In0bcƊqÕ]%'G:?^g]`Ѵ\X7"T0vJ{t9\}aÂ*/cëC&P ՝B≧;aU7Յ:`h3DuƋ|A8!B]G.wi GC]؃)TםׇWlNMvG:cqb9Hb옝v[q55aG{f苩{^rkM)(7% ĶpTgG3 3+" cۍ2 ^8❊$؝Rm,ʎ tƈ_/j#d@8X5״3QD2׻Y?w= I2̟t|3/>csNI"yCB1s:}*HɮO^2Zh@67X> ~y,|xB`Zrug`Mjz0]2ND4n^S^'58"?:YɢR3TʌiJB,O6l*e ~AzqEZe'q`*uT.g ,3D& FQ*Q+ 9}Mhr0a0^/UiD*ʤ.B suFk> Z'O< x6UTV!s*Aݏ%EO?fQXrm'k i,pGրsqVĠ5avǜ^ew)0 `G[m5WTڦ{*3}CIh>p'%mUUTZmJ`:c]SlK{SY _n5f~o&) yQ&h^<1eXCK)O*ft.ƒrӅ1"Vl(%ofߒ=|N5ZF䫾eXR;}dsccts~R77+zq7&ɓ6Rl! t|k&[ƒh=j ǐw8]۶F&Bf'`U($H죇gc>}bIUPc]0yexMp\H$rWI Sau$ͤ#!i%D. cey*B"A}IPKp\)E̶?[_yTL BGϐq8\؇ ŷ~&?;8:6)yMHC"R&NhƥT_`3B0aR'פWk9ܴO&O, ׀52u6_0A8 ji C@]_Ȭ7ʹA d)ohM@Vs3#Q\dƁ,-PǢ0Cux4˽#DYA1ɔTLnAA? ?gPH=h7Q.$b uh`whn.AGHVsɥnT4Ԭ=<CDyjiaaёTvCü-J%2&YUm[-ӣK0rso*H@oz3;$b#;F/>ǫD W&L`oLqB$[G((y]%Az<)OmNu-f (?R}gJ~*&w(6= Zm}]-clSLniZK.Tczq:Pڒ:̍Mb8۫zJSsέ_k~щ]`|CyX=%)C΂o ֆUxM2Vn[B܂)p+%O|oOA!2ġx/zC΂nJsB7 be+,|+w'5r 7+}8ĚodWK NCxfTΐ9^1 qDibم'[֬?|`VpIFnb6>b|f_d;u8:[ßxwHw!V;ize-Y$<ȫ< P .m>F'Cp|֓:Z9ܘ阌nl* 5^Wb!n xVC/t'HezYR?O p}Q>ޝ6=D^?r;)3ɅMWbnV9%7>ӓc5{2bLz$O3jb-^>zӓʓF쪱9GegHd(o:SӬϓIn&xz @ҍrC7۱̦<%9h:)2MR_nk{dLBz(E^I:_Z4 .hPS5Ց$`}Vq?FQA[iӐ7+YT6\`.dɆyqa|{?ɻҒw_e?h{GW<BQ!>-j7ʱ *T{9v /)8ՊdXJ,}. c=4:PVVES+x*$9*/R򌨓B2ʆ2+$A܀ϭ<d)%kQVO3h#!6u)^*8j}d>IjTzM~7vfY<)#[.e/Y%sT0#`%xr`iutcsH+"9B$hdk[zO. TZ/Қ"G'ⱅ}EtW_4c5lE xBխdhkw cղG_E=p(]V`,@+.b^+fw& mzut(2h [PG*|x3f²$|۟˜|voe,Jɡڑ bmȫg9!TBCQ#ӻ:81%ȠX6)r7iA6  l`іF]fPX^3?ô ;_&дE)(ndWG'uK t&ˏDiBޥX4ʈ`DsWl\ ^@TmEʪuՕ"&²U 5\WMV ڀ2\!$;l}ȭUٷ {'L㒩DWlEUi<*xQ?+ z}TlĎ̅AZȡ줪jhƇ q,1CJAHqO_2LoX{!'KK]#nOz)̓7W&8,`<]FkGsi D|`C\.Ƴ&a/c7q"q`ɺUP.wr$caqPL xH̺gni`<ã=tiѭ$;alvuSscx_h딲ΖVO^rEph:M ޶f IkB_svfuJ(7XapbD}f*mźb9N8"A(2#zSB|3H.Q.ҿa>FuI$٠?QQ鳟r~PϟOL[ŌA@E<Jg:C9GYHKnyȕo`c~=zwok#btsH|A6*(sdFSU!*_.]iǖm)RX8|n xFתc,G Jv|*RmH^/=Ij4OXO*8mXPoeZ,_vrN3I\"OnsɣfHmq#p^poDz PLi"Ԯp)8nfA G D9E~ h͌8<- @^f2؂t\>ͷ]9}%DxFyOqؼpH lCM#ĺþw zC3#>Y듍~ej m΅#Bނ/Sh HUVPv7Z"bKca;sIt[ Le` )|+)Wp*l&ؐX7J/e|`GQciMFm d44?\?ˮ$'ӕhu9  լ83C,ϳ#1FtOB@j?\YV{s-fqɏq|JUc lx29I߈WPV{{qbȩkӈbh%cSv:k F`P{O͡) X.Ksɵj :ᄍF:֥ /vcgO]K>^=OH](e',SaE'CeJdu)hZ}]پtz˴eCy|VGKׁv ;V4I:-d R"n='c8m9_g,, !î]d5+3,4vpK( uƺ L37+FĂE:۞4Кq=h.u|W iQr#[y}"q{jGիJrcU=ԆL.KL_2~4s8d "MYN#<ϻ+UφF%9o5䣦%smx?fZGD~: RJɛ3nʧgB r[:f}ӗd}#N&ϵy?Rָ<փ x ~p<$Pkz(r*Х)!2ZP2Vne&sHd*s;- fY:?tiy* (?q':$VQ&\d'klHrqw#սd0@R+H|cU V\tvd">a~6l}uQ*$i؎ mF".u1xXtOnmrDXL XA_ H04bA0N& ("W(FULY0KNtY)hHil]b ŸX=. ,|邤s3lܔsnwRo}i9l[.XRȷ/p#.4Vl1OHwy<{K䭥q'kpOlʒWF>src) g&LjȲ]"Aw֯ m0?eiRL]R'v8ެ^J/T@&%i8v7qJ Ep&zRU/ S IC;7$E@i iݱnpZrl[=wE" 8(чm\^hw~aچ,]S}ȇINlLN؆{x2x+P!;e!֚aIPY"̐]MtKHOuMÄSdҔ=`#N~PlpJͲu$!vA۳/bvh=p@(SV%NO]OabvcQ/Y#;mn{Y.:u+l'WY nG[?sdHo >$DY)RU^2澙G *8 I$ʯn\-#`bcBW}JX)hk*d;\Gݣ XEyOk%['Yͤjad0K~\qcoRPB2ZYoUH5D ,V5#i83]{ۺVIyHzV)+/,u. ;TMp\}P֠YY-'K u&46$Q7egmqH5lWyua؁U sIql ɝl J*܃C ^ I%F !mk>۞2jQBҤvLL`;E&ԭςf>'$06"+0]UߛaLw6|[ʑ0tşfQ]WE j&Qsʹ@IU #ָ?3XwS;㐞Sdxxήp gCDku{Zև+8mV'~?zӿud ўb$ t!-3'Z_ʛENB2~s7lhT_WPpӭƃϋ^ڬx!һ? 5Vڼ$^/UpGzwvv߈d>D&у / yL,+ywFWqqcwXM̏ CJGyɜ?(Rh.tͺ5t'Ƥf-;=A_֕Sjm84?EDp'7ynE?^e]p]a?یoVv~͆GdʆS͸=@:"ź{X53omd0ɧ AfՃ8,cƟCb CgߺNd(MKueSCGfngP~ g!U xz, #blnR],Q(+?t5wEl=FhՂ}'g?mîHhO'v] iA6Li3u߷iZF',7>">JKsFeFc}e?Џ+VoZGQ]^좻ُ3zK@Ѥf'%]ް$J4+`{x fO)IHi&Ff<ȓ-ǧVuc A$> (} }efkq~K(2Kā:baN ځb1V%i,S5FSk9JƐRs0zR!8dLy jLmlvRorܵYdf`G"|"e?| R- vj'lvݼp=X.z$Q J󓢒߈BidN$] W46K5,76 .T}gNĊ?[GVN#crAFY2#!PY͍Xd ~c99Č$ #\FKAGܓS6$_K#}R _4;uo̙rCǦ)Wc"gIgߎ¶G•޿W^,390\|+MRO~f|!ⷜ׫[E7CaG1??A)IQi"". x"XȘX=㸟dPn]@0S6aTd ya ^JNvb6wm":l3V)'ݑeí[rSBGUnQzdrkIa!w>woϾl z.u8k(y"zy M#IYM5\1 qѪSMe~z?"c Z1$=kL~t U : rش"=I`[\֚@VS&֝%=pAUM;UnJ~o|OzPIqX>Y?#G'\y4yَ[MHifoڦ5yȴZ-bE+Igy1_(錭U7 e8^&Qk;za"ąd#ۜP`2Ro|_~eԂ;tk/KXZJ*Yz4|{DPXLVڂ1b:0ח;¦XeFJ \v8^|uTXvZEh$"zD2xrPSwj:~ևɃErqracJO0̧aq߮zlkW1ǥgۊlc qrQn7<X7 JTv!8ܮB`u`=B_eT!6j5Ze]jp6.^GU6OfأR\-v]В ߵ.:{-Ǫ}F! GC6XL31I͢1f$;6)KuO$G_2X|SbRX,+XywIܰȎQ {ݡwHkUjJ~M?~Ņf=ujr*fzzztR 0NI>fqA k'w켿$ZqqzGdX4Y"9L @SP32i{9~b32뵵HUSEQi"ݫM)X"ͩv"51.cgMcgԉPI̙۬,ـ(}=<&Ђb=Է/5b6nm'^WY^cZ53g %acM/ZY EU3_L?mElUE_].'ĺg7-ʹ*.Р*: ;g,9<^v3(K49R0CVN͛QȻ f,1+qM,*(%5S=s': s,vGxrvf9lC {>gfG>;)j*\ j6n '75D!ҶquefHa'~XUɳ,Q +k{miӐ-CT\?2gZؔD^(j*QxvWS04aн̊+*|R7 r!*03s/>_gEVFg=FR&I.ut:YɼoawET65_,l>B%՘Ƣ溔܅iD_(:UvhM%Ű-=X\=IeGe\kQ*T<>gfq'b4LdciRbCm)-6=D0Ind8-umS z7C 7ȈktkGPO~\'{dgA)q";J8[{oG C]LRK;JJ%FT" ]L-t!i<{iDn(گbcݡxq 6*U_/%HŚlOx گp0ʔuk3D_BX'-"w@N!uUVFubY=ܞ$^(Kq54Tw9g+Zw&.^O5_]7zU+݀wP%ad!iF]~([[pVj-]UN.tkR ;p!Yin^^QɻXƟnL=;oܝYkKR, J.6 TDUp竼0B3$=*ofR/I Hjsf4?Rh6 3 M-Fw{t(C*1Ma%6hEADe5{˘ٔfh^Ζ4o}~$'$4AӐbs5j 4\j̈>Lt +ծ-ђTG!xP`_<AyRX!Շnд(xyAK"se(ǗfoW%H L.^_@(;c ܕͻԊR'i.r.QyvVO|XFu$0և[|`-qeԪN\S)@ 5i'y-Xpi۪pxKsn3ve?$N)h zMep:tCei$.J6s\w_@pXF"(lao6H%z+ Zz&m#|x)YSɩ\ NŮ2Vt`wQDG#ٟQu\1 fƕC'h's2F~{Q NQR͔n ~3i"-m*|W؈5 )ty"*cnޚzFꂶ{ 6@o±r|$*!A[ z 4-E&,I?ЈcsnLRÌ4l1v zDRm_P:J]Ìƫم"z_Qю|@Jw91m6$^2C~sajOYobhɬ~s?A+?),ڰEV`?dW4DV;!bO;~ Ffy(^rȜ˂>`=w(SZz=}tvj$Kس:) d7H* "vc7X3NW VVNPW;@GQNTbD3wRC .FwMJP= RhLU| FGe6`'5YT|#$ אD)7w]Kဗ( ە˸FYi8302119 )7/IX%?4㧟>ɤ]W Le0(W[$~~L u|nIȐ: fتN,+w{tHPqO1~QRSY3]jII%.<,$JG5EQYKH]f~\1=C7^C+"gC_wҢp%/!YUDrŞXVJߚW#ӊb,fZk<qJ?Cc6&|!BCw FֽCz:_M@ϞegUW- d1%e Ne0+?rPP<+4e"ڂϱ-vpNS~LBc*_QS UfuCv\xlJޤ0әp}[M,sdv=+ϸhL#J 1Y]x6[tt˲o-Aޕ#lLKt?qd{Q<;OGOٶH|*S'b Lƛ+[ QkO,N)Bd\B-#Yvuz?L<['Ժ*W˙*ӓ 'ן/(zU)$ϠAegJڠEfBh gv-^wj)izv-{86u׻ X/-Hbvm1lpwixc"c~u-1<8k !C}}8vL(mڧvR]چf.aDe|@(يZ3^+=+1XN( #?CRn"mɢAUXqi~O6*TBNÎADZgc}:q_$q:ˈ5^*ߠ+CԘ[,*h2K7Q'hi*ANGzeZTWZ*1(!*'-`2(ڨ^W=94S&颡.w%a8jS -*YD!+$R V0RKmrӦ90A>wn3os#][LfuBmmʊ#tl~=H>fK'3K[s1F' sjTkD$2&džfkO7:USߑ;/C 7)$1C:OH1c8S|K̃hʇml&[AicL i}r$&2dp5S$qH|b :,~̢6CՔxJH.pu 4W9}TBQT>f٢ݕ,Þx5 ĩ1%QNn+X?ZDeH2 ?P6w'1'ǹC1d!a:g`4J~D3mAf0KeSeX-h<56EO`ݙpSv3[#KFPW_ SQFfځl\]56WF9wN޷)c;bs:3*X)/LsJ,ğۡM$|\sQu~3#5ߕKwS0K[ ";H5t\.g ߍ}5t}_ 4晬I∬JLO8ӔTU{a感nBͣaބQ/, hԢG8KFU/ջO" \Im w~m| f f## 8Z^=8IO ?'2XK &F $9F{x2\KrIOYxVDSÓw?˜FH;Lئc6Ap{lE'l`RRJ+s¾s-hR#y9\&y uIiGmx:?~#ak=ON5P[tpHkSؓ|dZHrtG7Q^; $%Bāk\M08l|Ycs9֗wYukI7Ɲ6ec˲jezGKB? w$⼊F.\E!c>v^o JԮpgnO9y^<i{$ejMg]/%CFqWMdI}ְ31wVPsR0αCڒW E#pd0w+^ bA,~;-̆}╙|hGc% T}I{q |wG5") OÍON.>Zvmt|iagCv$3aH$a/p@.C\0uyx#&th[ҰS- V+*8U`6_ji[~<d@y0wVz 'lӲ%ƶta $HhJ2K Y46)H.yun@5L0T{2tE@,=} |&z ȏW tLK!j)y>@NrP?'(P}\F~`}\M~ L )zE@a'$Ja)lAT,U}U-߷ 2U-וHԢ9a%}fמ(f<Ւ]z$ 8>ݪO/3huGnL}QkHYõ3$6f]7t1K L><Ȥv|g,BDd轔%d6Ȳf):?z?|yx%:[A5RgɜbnP؆#&(9J'pϞ RR,:NWoTe["mT3 oi8LmC䢠u|d׹0]eJtXL 1&apuT3v=4d*gƼ_HaGW8Z? \:Ob6/U*2$s$#[ -T1@ݪP c1&4IdEP2q%~ )4n[dv08RRDBXa̍wJZඋI@DR_t$*@[9M7,?DǗtQֺb1thQR"=9L] aUE .TT2wwQsz!%p 7?8Dc9=;:Tb&A~L. |^N-$4sD$h8F zqa]k)ˢHs[N Ɲ僢=?Σ-m x&ؐN\eBw"SI>P.AF쫛L%4r"aA^U9Ecޱ)dͭ_nVWf YFs*%g}$X˹F8jtR̘?Fxh (auI1eRU  fsKX!,ͩ? r;&y>|ѣTh s[r0!H]8݈=nXI O=B1C4uv"~'qϟgh%w奀Ujڷ@O]j\xQ ITGuTU=ۊWo~Y>UκvvxpE2 L[)ַrW*w62bQ4ʵ}ǕzySOW7(n5}ἎpoG!jo:iC/TB Tlo6˹Χ^}8l\,<غ^BHu!눮"6mKϐvyId8%BcATV!}:MkbÍY#5lSKKI_^GCMOPVG<\%/\'6璢jȎ|l:oAƨnYG9lňF310t @گ.1yQH\-ϵ1~Z)bvR̭F"_:x_Ϧ1kשEjjgnQD'S5wbZ}੾֋[@;`hZmB:OdZ߂P؜`yv dY 9<`7xfP̋ղB1Vs8p#B8GuXD1#;ސTBnf=:> H΁95&*swGey̫ةSֈBjjQ{1^cu–sܱ2tGD:_̼Jby;giۈƩZx 5UQYq(=㐜cBB"DnQSX8័Cz1G9(Z,*DՕ5뫁AJRu6$Vr _eta?xH99ǣ kY6Oo K"+0qu)-낐џJӐF?P&h!UԀG(UcysꋥVJ"R}pP16WV *蜦?L9mYGH#rZ' %-ft6㴷?nQ8rx?ם8Ժ@& i-y%Gs0 cwR zjO.L xHB0U:45:і'?Q/?I0w‹Ew/(^ ЩDj9rϩ}4~g|PToźU[RNdP KD6ln|Ʋ-)?؎3 R!pD.h֦Gn GhH@5S>;nwV@$ݥC(2ViC&]SL659t`3-1wY{(0gga!]C iE*^(WVP՗-v ++hI{ <,H/ sR 6(u6tF|Ji%EW|HN`/S1(etbK5^jQ|t_7I$(:Bd0L]DŸo;h @Dl|lz?-QlȴT_Hkc c49mz| ٮY#3<\c xxù<"`z2,l8 f*6W^Jb\0tҭnbTө2u%+u=%Q}vM50\pSQChwFW;^O$ɪr(HOVΕFLBNr%hiӴ0؝]rL1S+&Mio.Y!0xj*RUǣu hUCӷ.Σ5J?##E*joاLΟr\Þ0g'rx?U['8$ &({{~eJ*BQ\{^WZ˦lu+A[=(Ym|Ν y8[4,X5w/8)y9֭#EG|ORH/b#6ӒƓKnL2n-x* Y2Y&OK P0d؟0T7kM*';H-xz?]x,g+z%Rdxdk$T]Nvs`g7|#inw;SaǡLA˅ > oG u^Ŏ OE$ S5pyJNpC}ߺ= :_! dU3&AY {xlKFJ&wE9y5%=z4XUq#*qў|x^3 %)R,9*"z:>%`,ؘKl,NVo߄bS$wN $OD1xmڊjp/(Y[}pVK GpB%DXzօ&J ׋ DrU yLJJ7\Ыנd!Slاt#>bFS²5БKHGX6 ԭ8p_4\Aq /_1aS zOx5Ǒ[o\hC77.嬐8Ӌsq땫ucLoNgdup6_!hWoy̫bX][%uU2 ;FFAku 9ߙQT B듲 O,~wZCY>p϶GrIpڇ_Z{VTt} byM~@*IqyNEʴf {xO$bg}Jth>cp`S1OHRBSAЪ%9Ķz2YMRzՆO(R$W%FXB^,q*)_B\J ]*ăD.-ŽT!ٟu%=9`M)E,o1TG9KǬ_O}ګ^12A| UB B%9 lvBX͕1Ì(i=5qd'aߞ| xSd=7BD@tOphw iꢸ1?!x9{u'.uOvׅg> x%ş@z,tSKc%?Ex2L,7fdXg,2F6>u*UJ5a<xo9L. `35-ؕoVWbX y ifP2lAOb<aFɰ+Z#v"0jӒ{oYT2n`aF$9L5Z<3eYwư^ؑ#y7|m =ː5%7YlwC{*Zb-'O8qWw3XG~mP7:pD\`H N!ӱʖ-6P7 -U! (囯Ő\. 4⬣Sv:_J|UR;*wTIR08:1Gbod .|M9eۃ@iN8Q*KIMe@yYl< BejdBH4Y5|naSvF g[<-W`1,Z\m<d-ih5Ȉ9tꑢ3mչ 2כzg$EAEce~᭘zX ԫ' n=lTwBsUʧ;ndchDNWt!i|oٮ&1$y wq[WR`@K6t#㑭&6<̭"Y׿•9B&yȿu޹L)GW!Obq=2-8Tme4Yo#tX>,KwE[o=8H P(ks#cz΃씯?a1d:-&ط蘥0ѱ'&+Ym܂`~כrkfǓL9 ⊠XQwhNSW:xcu/|Sݟr,(>u6{(" rOxՂ .:5[Wpӷuė'2x\eZ suEC_Y BpԞm(%'S1wm%d0>55ZZuzƦ3BmG2ޠ#Q/^].Syfn ЦoD@;T%^݂%cQ6qC *$:}D%8`U+@v..-cs;2Dê,o$Y00U]()3d7Xb6*ߤFV+ko+VLo#%Ɩ\}vQ~3!QO$)hvB Ρ(·IBĐ~`$v<"tjمɬMEgnLN _ІU8cGwٍ1gFY̠] ʆ-:& qfݡ^Xu~3Qd⧄?Eلzs KUz! 8:| .HQn`x22uInil쏇ޔ]SegqLEle86Pߓ. aN/[57hY~qhh@$X$爾8xq]\U2 A+twy^8<@y7 U㾫&1g#8VHELY*o 6̂]6e<"5LHoI25|lP[ t|09'fנ6Ј5BE*$4K/e8 kFKrd[x\Y?I%<\pI|ەL+K[`#=!Ⱦ ee0 SH֯w}A#CvvY`Xq>{1ڞq?50Hy(6.o.vZ*oǛ0$ݫm5Xr3pc{~&Dkt~P[kmI!jslPLC_NFO:pϊ^=C$^ Ct_eN@aJN m,Nt9b0nFsSMӔy:lGn< ;Q"PBଗil(4FJ uCx.V'x.ZPLVW LRӧZ9|Rtz8pD!*жBq4ɜɈRTv u*ic SQl4{: _ lubGΠgo$ib]^r؞0<[+aZbtUNhל ^U/~HKdfsXR MMvKJjR4hbMC<v6r(%ŔtH+"([폜O=0e?,XόdӵMOhU-9&i4u<B:S~}q&\plN8XZdPgR9{շNq%` K$3;RXBhlџzBRPK)꺅lM6 Y/0$!{[pEzz"dV)q (Jh]dtf蓜0u_ڪE r UC BJh7qa09J~\Qet}Q">9 k'_HIz1q.$nQ$!ge,[+F"4D2knKS(8[GΤWbėд!+U_ 9!!GIS,#Žl# Spu3)9>V{lj&b>VHfX*{5$/6Os"#]/k _\@3hż햼Vݒ%yl"zTrmB5vs( 2HoԌk BaqlV# )8M D|,>tolr "إG>L1S?<<]or;6sDО% lwv 7:1(̊:D&#/q}ɪwz5jTͱϯXV(![[%gjp2!cA$&z$n0]39Tt.% :Qe]'bY$h͓ސ }@-XlNWrn}GROE8xoכ$rDxvAO vAXG:,WGvʨ`ETkT\h#M4WH02e2;^c%W">C_ y0{*{ZhWbwgSa0!IY/[ջmAw{ؐ5\oDL=5kS̥QH nnAGOYqZǔx|S46g j9*"kJ};HA6`VE=|[w_`rj`a?%NY~OhLGeWWNXNj< ѽ2nW)rn?FÞZ#TH|*Z:OJ"E٬ ZEaէ, ɡ1te U<#=fiM@#g^r=U 0O\2k>L`w!^G$͵Qu๠+X}mE+& ;~Bylc>kA`~uB6fD9Q{)=&-h)|s?%Iiӽ4Zϧ%׊ ʊ⌐hښQl0  ǥh?AU@LF։>ŭ"hNg2-v)0WRd*.xHSڈ 80X~d=xj5JG}9>(vFSrlg(ϫיr`+czѤiZV GS" U]V1xbj '46d~dZݵ)}!G(|9g#"q4I2Z~TU̹ >yUVDΐIFzr+C} m҅",4?@sldW*t]z6WA6Ɔ]$KyU0AH ۨ7yydw6xQ)e} Xk7#eT?r1C5e6|ɠpBq7'mT0>Rۉ؟sPbpb=4q槫2Ъ|)Ac55)'kƁߥF2]zݪ"]=p.pFRQ(W[~YFXѴGY#,=(65\]^x] ӧ ;B TH ^F%02]KO7(/: WFdڭP."f=B 6j# U@A0ᔐXƚgnOHUBXV ?NBp;N}gcj_U VfsTΨbW4G:6*:k+  .ë́dh޿5JC fy$ID=FT"kWoِ)&>]և{>vL(z @WݰLQՏ7U.4|āE'twK8wfj݆[~)o+q&Mre!Rmb̏1p%fLj+vN%/4^k-bMWFMh<#GTwR J;&%0_|J8[R7٦óplp$jp5h;03ѳQ sz~Φ;.{U_eC*Zn&E&i2G?:ۄ7=*ʁ$;*G@/>M."(( :e-9ibFQ|#(nȧW1 μ}R;Wίrn9 w(p0؞\7F,Eu !2qW!ycN%.A>rh*R\5` soPqyyZ[^iOPwJ%EEv'nketف8g2CYsE܏u\*{]5~F2mU4ԱFBMSv VWm1bZGY";qNy[&*3(zŮw#>#ތE`(t%Q-"54_i81v6?~!v|\X)ړp[68U?ƺ`R;\b0Ar& H+wOu8krrÍ~3ĒM>o&D#.8Sb^*Z#5qkL9 Ae^͠I6tk=O$f'IaWJR:};]52t>57ٜeRa)Lq m!PS'%fB\gk)GU[YF `EK}U- &plkWgEl$%G$%Xo>c<̌Dg3Cz|;`o=2bUJv5jHr-J%eN3.4IۖmZ\g2RB*?PJI#^4se$.G.)_5WPRnL\|o2Kpd~3w_%+BNI?$YJXtbr*" =DŽAD:nGr.YLlNx ǥQRp[V~[]cfL5>vJ񔇞 8OAza6%d1=[f=-4 {sHlvxieC9($C"nyMpFB8[QV.#V\'lU-D.ifr9xUj瑩ʏ~Kb38ֱ20Vԣ1~fOVwXf:E~W-iH?Mv33;iBG$PH.c-E.ɓ*{YPH 9o'/`{hnOApq' @ޏd~c{S F3z%sGA3gV5%X_|eȥ^,S jY?L72+5:?W&mzw >fF[Ӕ"5JYlCFc?+MCމ=瓺}3H;_0m慝Øˉ͔CZ`Ysǯ4=D67u45_%uke>cHA&%eso ] 1Cy7kDz\ )UUE5,>! э{/!ùs4g5g}@E+keD`I[4FQKiIL2OA9ެu5 k;\,[31i9P0m;DX;d8b꠺b:s(<&&xp!}X}_Fh4}R~/m% ja ~Vi#m3U CSbpepS N%:I 7aͽyHŶRSv߷̾0UY #}̾lE,h3-<ʯ媽3?CQ]0-\Y:Uǔ<*0#u;<[6Nl;' [o{qI1=HR{sB{4 - GNR+Z1Ial$e'8{j<{zϣNAr~iy˽fi<Y$Z$lBZ_@l[~G@#'c-ϒ<:xlh:k^K(BkB_D˟;xn=lZ桜inyZ'Ezʇ(ER斃`YA-uV86`Vp5 ؠh_&3xm\x>+؝uu.֗4gUf'_j1d%3p/`S"Ս}T>ظ)?6}`oY/ Ҝz9Maisܭ{y4vW?d7=[MW`h<nPGa`m=2 Ae:w3r*QGƄ4 ~w ,vGbiI,;rtUQ}\.AtiKID=4f!cxgE! [u.[D<圭.V˫4-cX}\ARY|hk)EH3dخgV1n~/<Zb~/ᢷ !%>9#m r;+~_+b4<Z)! 9>/Z㽎%FV[% e!X9s*Pp(je^\!|cGC! Gogkm]i'b{"Dwsl7ݑJ)|96Q&?ͱy0Y)&æglG%ߞcsss7? н;9v }aǘ XuUf3c+7&LP}_d[0 &bd&Н60"ٗ`JDb˦ŤCZ# @nw>[AU)1㍾Ml)%ZK7LL5-J/~ r6J+iDE]k!*U__^aJX ¬dT*l -`UVf׌b6|Gb ;Q^2G N uxu^p [dgzb hQr0juIoM1!) T zpwGsC}-ޓUtڄ=zؔU5:C2={ymr:[a'= X`~)KmOyB ð :ǃ4:}-*ff\w2[k3xAz[jb 3Xh~D>Wt\Ⱥ|vF6-pR fxPȫ}l+xs`|t8 V8UxzNm**=`wGo ۇ.)Yd75,m{d= [c CVcx-ƑK2' J4󓕎 g!*tq}˸>rڿ2tyQ? B{3I_u[ޓߌhsWAm\Ez+m^jk5k]C܉IOLezA\P+ gSk*GMMAZ03Ե@  '0u:<%BŃv8:ob}3ni 2dzX1٪\^KYs.Iٖ^-13sˌ8  efڎ8 Vң#NRs!)sQH^4K{+Qy˻wL0JjT$@Ӵ:3XR{UwB.HP^ډDt\,֢+Q,Ă'@1ޙ+ &m#RnO CxcNqcq{[ +r]j0$F>Y™@Z pYlZ&|B|$nU> O7f:cD@3d' ~.dIұ,}aUWѣcIՈxw~=bn z[RP̆5vWft0̐R9$L~bq'WHFQš,8(KIsl]NZ1Qn+h#Sq:_j@>1,Ͼo_ ZnS}뉨dr{zlz'iHԯhTקs҂ !>/N2 ψpՠ3g'v, aIn$VLd_30Z¦FA/M?$Dd5=,iS )T3t{8H [jt>Ԋ ^+^po=͒ttz6i)qȬô8gՂ|p]|֬stLb}>#ܴ6ޯ\-1zcwʰsWfA<@DR䳯Ͽ%V2Yxqx8)\hZnNl:c(PToyb3Dd=~|>iׇ {/mA[db7R!䦠e>p鍰rñLM& q"A9y{{Tgo1 '|,04)fP5:KLaDܓ 'm9Q|V_A7_;V_&ධ$aE{*N;GepWGmٗWuz`DZٗFWM՗QiL[+6([ 8v +ߧ"B) n9S~ԀX"-v|gP3}1a(3_f_3I] n2kҍaYZ8iAcUJLznGL-k;YGU웓SwJlE*vQKψKy 3͂{3^dLe[e(e*f\ jp])ItĒ&̡ƫǞ`:=n\Ƶy3w͆lƬ"]*Si&Ez+LÑգf=MX2,uLV|~&7E쎰?d>u@n'"!5c1y.plIxǥYW$o\ʶNn|QTR_fܥ=6fL~+[=W)0+1gM7gpYWK?Ľ+݂Tm@-Cnƨ: ϫ ŗ"/L2N("Ã0slgEcح3QR%ַ[."8^ô[1YI:]w8+=q\X-{k8o2t5\ETA[u:- )UC]Pc?x15[$GsúoVI Ka7k|\6Kp>]>mƔ n[[}i؝vU ;S"U 'āz" t Kū3zq6m''4iJ_&Bl#hE15G-WQc<`iyRew Go'ssq;؅5Szu2a+S2s ?Diڶ:l&m73kY~)F-bL|c[Ag{@_?.1[/>&S3ٞKj])hY9 aR095(ØKn>̱gxQ)B̦+8T F7@Wи4/-7y3 $dSrkޮ|_i5Z`A4x zU8g8EE+V&Mo'K INK oe|! Xܿ2KkI+wR_p#tLYW o;p 4 jVpJ)>A۫a]*'[}ۂ`+c)dyo|s]mpAًtc6We`mӛ]FɩMaWKL Y־`v}+fg?Ed2xU)uHn<Yq'|5| W(AmE`yK@EpiB4lY ZkfI '3*Zi3\]= To*n}#z3qyQLIQiy1Y-#u[\P*hV5w'^*R7Z?$mt?`Q(Dcn˿ Gj<3MnWl{b1d )KC<@IN,+<Cnσe?̋rd4a,|IP屋#>#΋~x,M8ǥa_FY/m8z*gq<=5ww2˽hvİrAbJU! Hzt'R曧gdv:t56V90/ˣ[ȫ0"K^K.|1%+Rgos0@R8 Q9V>qUgі((Z`-^b>6qHM0ac6b NL=E7o7>Qg#.xuAy5CH  s$??@b}J&S" v%=)=%[,$NvX 1<ﲾSRai K %׾#P1q_(-Hw[Luσ}pgb av cH2g[g;jrA#H@dhA7`ҺCVXny$3Fq8$T&72s)kSx},WuS}b^إ?9M86j][-!F&x' #Ǻfj8D# $ޥPt_$\eA|%WgW_㮯(2fT(zpp+#ڛIt-LY#ػyrl\_ơkMcU* 4}Ƞ_~eCpq; 􊩉w 9 3\a6LX ۳/Q[V;? pq[G}#+}$A*{s'S $=kW)Ib)lՂ\:_f_MPVEtHŤS_.{>(OK+֮[`^x˯-v GC- l,Uߜ\]r1췘TdlXOW"G"BlM|>u6H|nv/XkRߟ}q#M[2˾Q9o]W}\}|ҏQ^"?DDtuѭBG]O,DN>e^EK:!U6R6r*~Oz /pS)ɜ9@;e2"0MV/xSϹyΐO7A( e1Gd_6iGD`߻)d=nr)sV*tP߯j`"_-=&bT|z92(Ť&̭ %븳Y]? Dߧ MAخb?5*2]bO:jl%.%9Qr /'$;)~zyvי@axU9/lVcqʘV3Q&29+xP\Kl-vHkq'X:ouWF_:z|()O)”bQyP[ obuQ+`;e5kwB͗~B:/1!='H|_B%}jܵ^L(8[ww87J|5Mr3-\*Sn!yyv>bX٨I8HpgVveMC#ȧ9W q3lC-ְS5ϻ3@:$cXcoBA-7ּx2­lچ;pjǁ#Z9(frʥ˽@ GSq SW#}ԿҘvLq`4br4JXjZ_l W6*zK_j3-pmHSC05i%VߏXv\kajְ-ѯ_1XPELHF}PK1SU?6TQ<gF6R1-]k)W ϐ×%)X_a  e^Q.w%FKl`L "Exvf>O*s>X7=6>4ݳg ZgY&ݴ]6MO[x,ݫ7r1Eum_0T,ęrR}+7Ne gHt{ SyŎ 7k?RԅcE|ƍ'o_jʓ[Ē7'8s~d{F ٯM^W Q pr]&ܜ[f<A]G1zvܪ`{7bfK,1)eb  XP_zT!4/VyJdAЮPVTarnU+ljϰذsK4x]6w@ŐmdlG7w\,3vKŀyTal4Q0A kbhJ՛Mޑ)"VW'V&s=?O*eĬ HqV)y*jKq bq9'aX4!/.4: 9W,yDj`aW0$C!gi:&OoU&‡F𚫪:PS}cT\7&'wpؕgK֗{LVܫ;V5_|ʹUc0 _yiQ*Lo?ٴ~RrD|sO 1_Yd5cE9k^,5i-N~AH~?8>4[,h0Fh˫хa !랝y&t /}wvs,tꐴU$d$ BRɦZ`m66',B˟bGٹ?;ł ~wڃAYߗ6P;dGq<՘5x)إ {w[p_nUu\@6@ͬ]9Q`OJ|҂rz:č)2A9GpBONKXOD-Ei8!>u\6e>|u|2Q]}hJKCѕޣR攣pMwA\ve\3%\#h2כz4;vLQ0FҊMKr|nbXw dGN 7gZn1秆k(P'," $O4|DJA,FN>ڪ1@V!F,^o=1^ mSH6`Ƥ%ƭjrYqx뙍 Z* m5v=ɯ-rG:#Xݺ03>]Xf.׉Pl짏)JQEFqd.2s^?LM)b} b=6'KC({ .RM $t%opH]2fRߒ$Ag1óBoD3}}ltŶ1!o֥TE>vw1\}""x9T14>u}(\/n1IejqI!gi<)ќCWH16z؍nŏ3n#$u"K>}GB#B#޻pZzCȭ cU;i09^)޷POzwZysr kh(Qȸt(cM8Kd<~qVԮ ;ah[ rV Ӓ/_Bk ‹p$Ct^ĭm Ae*'JGMB֎ g=ǙMWGbD6r])s53g8255i"΍Iy~mW|!lb9 Z'lxWwl;[.hģ4[PB?`}֥'vb==LGߊ c)`څb V1Y?1 !em9m>c4BQJ<EfSt(yV40LuBgU֫2vF? t10Ro[k<,TTf[&'o;`þҎf*,"tمzE)6zt@+ ")=b[0z Q\̵zzEsP: j!t&{m+#BnMYrmUhRCN;:H"Dqs_RxuzխIӣHLf##zg̼VEbe[!_hUɟeU|j+K`a&SXԺ7%z fp"# # "ېʋVњ{S~??EX bZ5~bKI d[=Ǩ*8-qU5a+t㓯 J<҆}o&689KV57ZuZ?"Z4D#\QV2x乧ySJdV}|ِPZqX_T7@T`.tO,w!@s}&G ~9Ḑ<1Dtl֏nN9gguGaZuDD٢] ʒ.Ig@ߪn):5Y>F^p>N7=le ‰䓌gNE ޳Fia~ kdsɎeݯ#* MD[[_Hsޣ="ڙ12ҩ|)4p:;vP&'caLrYY8u.7Zz"bAgCpTR^7x(|J [Elh<O@hFъ,8^w*r2WfGn)a0 #: K}d8VMһ{o$9}=;Y`}5fncqx[ "GgQ6ФWeP[JnSs~9SЪci3 NjkE:w ^%KgNI)0NΟN1Z҅E#!4OFRfͧΊpbiBϽMSpi/.OgNZ'v$KejR qK>LQ]sBOaA֕d x00n). L.FIL9':Őv`g<&[/{)bQ1<[|֌,i56*[1 ڝXb>%"HẪP.,:~bU+-d->&ZH,UJo:{أf<َPt}Ai[Tc<)}tPh>3PJ3ς@`a7/^U,ΈQ4;}5iBg=A=()pwE#)娱1b$mwfLjE]h`73vzu0)zW^TWwuyI4*%3>P[/ȪixdZt6[ 敃 ߻x%$)΄&eZ`3/_=Er`G:k>sXI|AY!ݞiy'.mc>a=lH=kl7-xcc}^j[>ïT!8>&{ͩS>2M3 p雕sueUs g} r7uH+! WSt 5|00o gL9J4do{e>{N+88KoX;{̩P|,ν~雯!KzI@ƝfQ>`^p`t Իچ:$*UF^9 ~_QStggVC*UYguΌnD^ o6EXo/" YqLG,$Tr&KjojLCfbVoisD{|4_xfbi{E)¼0;H3}fSmMذwQ0hFM&]ڦ l]C䚦979{[-^.7~ðਫ`=:׈7U7<9Y@E&eYwj9H| ~>"QnQyMz|y$y#?M9в8J˽L\1i|1\hv_#ڹ. )# ̭ :'KʌVOsw:lhN#xB횄}UشV>C@'[}~wr1!4In;I0Gk ?|tIe']njnΕݍ6({Xx p&?Qҁk<,3I8HP||#:h IzjVᙝdrmhu6"6S1א %{uSX0b9`e3]A6kWѻDVn?6 0i^9ܥvg[ف2?1P 8TU#R>>512Ju_F*1,Yҏ|iHzB ZjdH8 ]"cjͤiJx谝dZ]IsL)"ޜ *،,$m/QN6C mAoC8'~ liO8gh + nx5?KI<̲JSOx៘ +|;7X> $b(ld,RO Vk9Ķ*$B׳H{F~CM]1< ׶ uU[3UbgYoz;g Alr,Qz2қ`|`wIUcl tR^GBypUC}K^P=jE&??Qzk;&㩥EoDPNJng|bQ5fIux)Ȉ_!f]vV" z ,eR UeoT>ߪ# DtxA S m#Hε*nN)On;;.#wr}Tzb4vu}&P=gGi?AqT{ypc >Y[+y)YvnɬpC],ud6 8ܦ«z/vxhG\\c\o튞2^ԃ߬hf*!0Rd#rpQB:p 'Ʊ"#j ŊlF,o2ˠ XNI#1U*Gu6F~E] 0GΡxpZ@;>'WV2h~.vC #.*bx;Khzp&&dg7) ) jכ[{HҬ6fHy T8,`Gp*0J8!H {#3*`e}>eRHN({葶BĞX]|OuB}69h V4 dՆeRV"ɸmxRSŬ(WU4cnuAc˄*}Me}@Ft%^}!hvڔ&ޝ%7eVN64AP:#ֵ{\i˯Lz;wKK. a6&8MCAB$։iWؙǤD'7wpAITU~ 0*0w,uV3mŷeRБʹ_odʓͯb֬i6@. Zk E]M(1j/HPuW\}Qפ]gBS? 8|2 sA3Ȑt=>ߞ}.ܠH8T=2d # e̲s}#%7^98m^XYm̳J}bre ҴI"EIHQSO/j19; Q~yy'(+Nn.vztMlƈ{D5EU[ü>%0`⫸qMkշaֻ;Nb;eO AekVEPf3 M4#o;N"(FU 1uqPF+cq"H|*֋G=њKLohض!IsX772-ST-TFcuo{ Y_=Ŷ`$ Wv~卖(_7C`vZŶhG(-GHJ IduW+3QLlv}cg =0ٔI#˃\1X=?\u`O68zcw&uH5  CtkXC5,C}mh^Ƞid0b`=Θ&QWJbgՑ؉\imo+_|r_mx*A*Hp Yf^ؗ~njS9>AYF.[5,VHBwSeڡIÞ8b'nf еlWb|W+«6zr|~W+x.kl\%1).LpT* FqPZhkELڱ&b0֊Z}.EiEP\c;)4twHݻҀ~VC jsln~F[A0 R)`4֍7lH)fڷ gC\?vڐ$Vmp̱mmZWEХ .Svͱ\Q`ͻ[zەG3mG%HO$}6ah(]|OgS8|h@pNN5H@ u);=E7qkN q~kf"M$zWE%4.c|q$Gظ/2sR_aIM ( M = 8Sh#hTZ=G9xq ;wگWC+ 9 qXAa\@;#;;ԹfՍb?`}^Gf0t^J/cZG#+LH[LVWV@g3x;ܤPF>I.CTyEI>ӄ8Zl41]"JA8V/٣F+6D}{vsIs}fpuyɋ%#wXO:ß$2|G1,$Q_k/@.VTsӱro~5@r5Lެc;FV~ʀ P{ w"|(oym0S:f8Yܟd~bAdrH6=kȝ;p=~n8V ˸qwF V\E~',[-` 1ςXAEUe>;U&CFq/\ĥmk{oAFN%`59(r:` LV{a=ԫ-5j1CF ZFSL^Ч+B$P}#)zyCeWS4WcLzD7%gV uqäy7c]Cڎ+=?*q0Гʋj9Cm_MG}WDvh0 Aj ›)kG=w.m$;I$̮%`W yVW_Esn? 6j3$)3h.X]5x ck4}dϢPӊdH/fUUӹM5<ؓ4'Hrr8#DܱRgko.ELQ%5ARY9LT(2ni,ZSO^o=D3+ Qy,"O)Zhs ZM ¿[L¸ގiatiܹ|0&qUwH1O5 ~%[PD j&U̠A_fV=[8uS7 ԈES`YCD>Apuh^$fY+\yCv㣈DҕQcC^FyDŽ8Ch!20E%|FX8t!Y6{q&)}ޜ:AgcgJɴGn3a4SHRw "-K&@EmiNjƑ`+AAʫ0s(RʸIXiJH  aAj5vޓ\[ۀ ݉=ȯ_k}'6~ ,_uDg4?';'? CWR[%[%iHl)c(\*65')!Arԑ­hڻ_֗F{#T3ɽ[]ePkn`=}_&m&%kPoez@5d2|$5<_+ֺQTd7 xLU"K\bOTk.e4?|=ƥ=_y)=@I:2b;|pR}weL04YAQ}*ygٌ Wss{Š*X.S\ٖkԧK5d'=g#|eZ³_5838G@* 6=a31F",`Lu5 ~Ͽ!a(vWl+CӓC><7uAM(3RYA>dq!+XjcsS. +>ǹPYFI}af $ZbK 7cD=6!*;e q?aXt`XD<ʛ)fzu<ZOZeDYF]?*vE)lV7!- T͛6!ZNm"\4I"]Kp=ʛto %%OcU"A]T6Kv+סUD{쟇:wMRi|UIʷ%G;]U-]B}R#A6h 9sc(On2H2rhN_FFP&ζf`/ ojp67Kb i=떹N[䅢S߯;." ^\V`߷;r}mlx 峏WV8#zh-{NŞyS- Azɬ9x-,YziEgE:(>EC?1tf͓7dֆHܢVP_iEgm@J3ek2B0w0VHUM bM=⑬ۛ+^2^XbzYOcf0v/)[C< s j SA59?co:{֭~ ~cO;.،ѽf}9cwE1l&Vw1evIqTͱ1DޓLbc~cuwʃѨVn̦F/ûw}+ޝlD򵞩qRs[6frsCzp4||ˆ}:uvΛV$+\[EZz􇫑3^,GZ9Y%~+G}EdSM &W֭#C`rCiYY#8ަ‚}wsZ I988^U 4HCg/+lbCn6ciUځ&ewrZ°ؘƀG-G %od'>ӳ{U[tg M8YN#{BV\ّyRĜR<::{l-Ye>3YxȷGW3% 2 pu5*Q \)- L~#Oƭ< zK>$@fC끥 .V7[{k4%Iڎ-8[v,*.\`Da4Kl6Q{?>BϫnqC^msJOJ1RԼB[Л|TĪ ߧ+chy$ 7,Ĥ #.m~.wQ ܋!(8&b䠤r!D7Z{wX݄h3>3mw2۹T+1im@sׁ-&F}Yr RvW29+[y8j !C5eSB<ǑzF{ ^pJ]FW `Z7bv0oC+C OM`QޕҰ܊ڔgVO 4Ȇpls|%m!) S@]G6B[:ECm㓲<&=z5uEd '_e.lx^⢩YXw`s\ӚhVp4 Զ zLF8@HZ8*dIxX[t]@*s1ʖ}V<Sr nyagRL#Y2_ZNAj,rzT4=2@EKWPL@n{YE|%ɨ PM:!{L(ݴ;'&gW 8ԍ:6`&uF,1eR39Gl,(0qu"1`=D+eh() S"E'U9XżlgEkrd୹-B DARR\ځrK{NA^vC08d7PXF D%/JPH=)`DN>5rVznZeaTWfǦnz|z{| {8H-X5I1ߢ⑳|b90Y~In4Exu"sa܏WܹU䧾Մ#3g{ښt ;ĸE1nN0dx+(85S4,[F硭wkuRHV, l4疫Su4VɰW osEDjM.#gO""{O ;g_#@sˡ$!5;no}b':&W5&'{;H?Y@Uo΍d×bSo D9*If52~B+N& ָ^>%;b 'vYQPB6BL=ۊjO ڈT*GR`Z;c\ ~[=KQ H"u-c /^N-BԨYZ9]/xjj2 #y3ڟaP]zMJc$_e2H͇YPa5) M;6sMI 7VG䠗.x ^|zFu+$Y7)v#!*4$mͬap׻GA?`_7sj/DqEQ)h q0r<!R@WJx"qzc;K p~ڥK->~M PTUP3}mX!Iƿo6AuQnI=W-3zM?#Eo|q<6:wwʆ;liT|cQtV[Ι1 Mwt=^O[L7W0U$NufCp w[ї{~o%]傦h 1 5cpImz;4pTɼkCq\CHAF#8bw}:&aQ|V>`/X5_ ݧtΌ~3~|.Q$([Z+C+؆ ,"7^2- h ̱ܾج*$79L8MWA P::4B 2@`^Y2VtB#Su6=\-:k` OdC3K5 ˽8hT %.r˼Qi`8ef9d(l0yJs[9pFٕ8a4T׷ d$6Cwí41uq͟QÙ{ȻHպ'LdWǼȩQ4t5Ӧ~IzJZ]ƏŬG Ѐͷ/4DBnikUY믽P}tA*еTcu$)$E6aev!nns]ӎ0` #h8sR{Y6P= kJ˜[gV0BjeW{bC5e:|,C MCu`-%|Q+ik{]g`J|fsjmkiMk$UI{JGshM5"BdioMBO ^h}[Xs;D ǵbFGZz[M,Ju-qDYB8^OS+>b+}r[Β\RVcv-:6Ų=}޼\n$g3=%$Yv=`mHV} nÍZǩBQpܕh`W}dv~َ}GuU>t.  QO} h6+ 5 J  nƕ2 ,>;qECݪڡ^pKұ RxH ipBZ6GzNG8QC/wo޻_юmݷ=T( 0073^HS`2~:&fg p\e4u,VKI3 aCބ8m;F{}v)}W-mjHRqCh?:Iu AE[rʚ/@b~^S0˝#]`RǃrI/L4;49I_жCAYoZϔ#9MvQ]uoa =5hC EB2Z )bOvDžXt2ar%W,c#1h'bUm.vs(s->2O6h`{xL|ynC5.Hj:4ZK~_uG:Q CUҍr_Ĭ@ϊ 8UvC.>J(@-lcY2FwFհi gj -$g q@w/牁LS$?Vo6 UbJ2-=;_$fPzj:$ҫv,/1&,+\0QQ5{" r?'zb3c4ݾ&>0]ms_撶u_:YcBt Nk\EI(zYw?tqRMN )#tS;Cgb[y*X.*L0܏tR1@2ݘ?˔mp/O8>&@h4d yeD,VYTxG.RGk*Zf xĻVԣ (F}I#(Qk@$U_FO;M>?ѢFJObTڎwnDHoHpc>12[ C_D g&!e}]4Jxq< j'sxRK)kH9RhXa8ׯ|ReI]_ᐬ?Ḙŷ/a(Z]nBG&5ƱԔ|Խxw,r\1a\ɥMb7ɨ{ %В1ȵwsJ.[Xd":8C68sTTyu\zNN^PhGҙk:kmm;f a7vA;X$_{0\`z/p1 J,?r&&^ʡL|@ cqPʍѩEfյ5)0u>rq[&ɮ cq/07uEI6al.RrhᾪiC!M!1,e(^֘{%fU*,%EJ ޭ0E |bYȥ%m cs zϕF>|ʽD7wO ^˟\9TiG\r3.&o.*dd(tT\CDhF5pזFIOKI:R^3[xRn̈́5(PaH3l_kayz>jP~׋ưhaݯ3,orǭlVٽ{L#PR(^f,ώY] .SXm e7+qx޽;Y,{IcB|FrTFrE%٨NwN`5L'4Y>2^-7@ګ`ַ'|ׇS"[p@:jyV;@gcYr\cx0 YAJtp=>C*Zڃ`^"6-jx`X:!y-[]V_5DOwBOBm1X\-ZgS!l]+YlMmn%Z=/L ȵԈ9]!'̑^b(-=Y ?yY$`-gZ]{'_$ͳDw5ue6*YU8B(.42C(4)tpv}8\țJȬlj3֤ԓע9p^s̟ʧ_gƐ cng}܍A-NV0Q~;8SeAA Up*nB$);[ kP}Jwi\jt%&v\)PA;"FU=$~zhlu g]5v~(SNir,b0"a /ۿ[:/c!ǡvPGKq/ 0 {PN֩}/3uiH))Ko{qݣnZ'7BB{%U!|U^e[GDpn9矽k3;9vrm/l{7=B$vA vu]{sIճ`= =QEְUPBZnw6S 0R(׌j[yicxtP8vkm 7;:Z?!M*hפ%db]v}Hs} ҙP*(F2غ`⻏L"|wkDU|h1!e =M0Upw[k|zΏxºTmތȧ#ľA>K>?HVGZ 3<qaR#amFAk½1X%"XoSc.%߇˔ LOb>y|XeXf5ؘCօzmȌE@yU]Sg%1h/bv14nǐ#^vTJnRoC=YЧq2 :=ImGe"W[14i2[}3W `"Xa |d0<ۗ_'& Vu?dk3V/hEyc^`;$8#I` YfSzβ1 :r;-RĆ,l% ˻õOe&*t!ye7צNS)A>sI$} l#H$xP.Ûk'?jbiϤR~e&B+$9H I2O#m9xj{LiHej)"ɻa8OJ6˥Lh#zsmDrI19Q3\U9 ՎMnR) ;֎ӦQk+aE7qaߌ֤HXKenp VP,w$f*ukp% l& a;hmQ|wmppۼeZtU5 .%pdG5O2}w2=_G>AOA*yh|-ݹ\_ـ`25Ŏ`=]z`!+>r4&ZU]|d m5#C1{Щ(ȍ`a/EzW+qǦQ/%?ܱgUԪ6yo;6OnG,K}6PS`N۹lef.}YJsR"G˹LY:ݷSPn9FFLŔa}_/(4T Wd&NH54A)mOozm5 6-3il۫}uԧH5G/ ,>qFLO{_Ţ?e@K S8M(ZH {!%n8Ȣ}q{M-xvYn2:]h:FK D3t%ڸ7nٱ㞌{0|/<5J3.0-^ \u:%cYwvhB?%aoDlxkmc/kRm*5z;M]~ 7YU)(pH\lh 7Jn3(LI5x}wΙB^jVF]vzZjYo7C2 ę՗. L- l䤵!heoľ Hg.|$GB~a2mR c>>4st #6X+. o֟}d~cB^E exj9w$0ـpΗmaájM4¦5BU޳^fRm.lVj 9,7B4~ .(E~H!J#kSRQFXz(0{BtJ+ܾ҃V˜k>#ݑeeb/`0K>?Ա}jfn&Bl?*U1m{v` gx$.ٝ >᱃,o?{@H. +?٘RUOֆlTJBx#_ kcdcV# Ͼ'JhV$40CyxFOZФ(-[׀^+bwP"Zf4S{~D=:?iE!o$}p[@+B-$,*ON2o>@_a\@h7mTJmNL?wA~O0i:ڕ.tqhu%hDBXfFVZ1Vc#ohƗ 93" <:>#>6vX$'*S}61{lM>6,LpsAįxç 6|"'? 4eT9&wW4t, 9Au$A?o>(u\ #DWqδ lh6ǿ7a XɛLڢdAy,?2-TT,S/U>?ſc>K٘g/?"& 'ݪm:m=(V O$N$ѵcPĥr|zIˈ :Le:] ,\nheM 8t ǵj8 7E׃Pѫc׫fORC?Ǐu)"54tQm`7u1v9ɼiKm)5YHWEo:j>SfsQQ  ˵:94blU Qa!ĦAWq@=j_ r l~6!p ^!I [ d.X5FW_aȱͰN{ngH?~vV@Mhp?\)HU*"|fE$̪x.$W12e3zetz~<ɒftL&m˜ripdx$n5L^ `=0Cؐ*|;A2`T vrvK ަ&6::7Y>>-}@h]XyA VU`cig{m $؍#*U,E<.(AJE)l8 [KuiǬiA_f RFwI֮an2`>]v"2.LM 0.>Ђ] R1i$R |?<:WO;b_jpYqwnO߅&7LzO+L5/rIUJ4L;dZ1x:W9vU|_`;Fs  ]bn١6mcAj V>8Zɟ2\! [:]՟^G SDUiz4~C"_ i]ћ`/$_XG]q45GW ~l=U+û"LF ح4&6m%uΛG|ѝ,$,WO]L6 )u72"a gr;f͘aӰldjd Vz2MɛP iͮ$ms|E~JmJݒ8]dPÎ]G7FwBNQo@ze7R ?yRV>s>3a+=ڂDP̗EcYs@/h/}dX֦crmI!ťn]_;΁l_@{mfvPzz(ݝ87bn{~wlk] @)?`1yWrމ6UDY*2kYzWHR+>YGՐ-Ԓ0bLcFkp`Z>!7:|l?2rTCĽamg е2ؚ [0fy4u=,p9 U uC6>]9bx4=x79;6Z}kE>g}ppipbb\/wɂJ)ňk 893pS; <mA!ݹ-m/!Uzxc|Cyt_H!~C :҄Ej^` 4ZM',}+V^jD3?R\/ŋ)Kf@,(F@@{) S!B.4(dYw[[z(@*^:bOt d4(wwaMUvu$Ccʖ%2ڙqFT3 k h*tVPhgצ&a7#Du4sڢDQ׌chL7p$X:A}n-*@'v3x.OԾc[x<s5OIIlL@ʜAv`WUCȆs]nj<\rY,.PG<}5)4bkB#܅,dy?.o"icZi2L1t ~-/],5x6Ao2R~]23R7p!Df6~XC6 ]P޸>ع;a+4* ؤ3.4f 7 \wߺ9Rp{MP>܅@akC|]q)jؙ@1h܊@"ߡFTŁZ~`)LF>׫őZ-]H|>SٹZA6Yv_χ2\浏(ne WRݯEOn F%u?^+"eO&D=H||{lBdf0ʡ%2iPFx6\Z%fn >(j%˓^ˮ" +ޅ?!K:.fFT57Iev% =*#5}onZX7W˴!454]'5'r$-|Rn5E$wͅd\1r]mWQO߆w-4ʹc .HwqkuS:iۺe װJ\L $&DīOospd ІBmb$XIj#$C"%A0ƀ8JZ*i(&OTTɴH:&^yTC5HL-Cn,t,?#;M=⮧w.:ZP{4L m{ubDPoO3}*(h4}ğ\qVj}kAkGfVg؀j ?(q,7Tgf/mG{ӯ<ȼ$J.k,g\ 0xӃ]GdOYqwA2UR}Bn0vhV}g/saƈQsX_AdL1d蘎V F>Oz& n̯tʨw\!d!LMka^ Iv N@8@SrTCJ> &LCEыi}{UzoJvH6i1~Dh)z(4>L_=uGzE !D5Oi ,h<1&$DSr4Qpk42,^گH/{֜2 oi(Q~KmNݝ9)$)u97oKݏULGڦ$H*HzdwWXk7 8@ETw{ubgOq$K۹9\$RHV\<|e{@NQY+DX.Ssf xM0*O*pJ;6L+O`7WUeB'oӑ<E/+j)GME:JQfzJCv[ 8ݍ3Z ߣ;sh4k͂EUu~(FC!O,\$~:j)d9u}LA|+COnXm(voV;( .Ijmfs[TQmNTDxSޑ flndR@](lu_$A$$mj 13TF='\+G^3H[iQ~>iwc~H$|!x0Ɉ)+b]M15~AJ{OQXe3-_* W>qiX 2LjLO3CʲtC7=ϛml>M3ߒ7| l.w'.A`Ml2z7ñM|"DWN. q&(q䭺_ˀ(0fu5ƨ GR#Vۢ7 &T5#'FIe T 3}O Yc(%.kts1tICSnL.oZWo u8jibnT."Na2/붵kh_N9fBF`ǡS(C?t}m:1T9 YgLJ4ya8pgFMҷrwKQ]a;#zH&i䓆"IdOvWi1fG@ETH'Le.gF{$X%8 $P nFQ7 QxE,5"NOH%k{^|XF,麁ѹRW߾yfEar}ƕYp݊DOGf#z5lt8C 3uA2g& #Ucسh43vӷ;2&N%GG.ځur%S,xQM!v'Kn`اE9O{bf" ɿS$1 gB}w.u(Ѷ6ٜ,}:Hfu-"u\DB"[)2A U&җtB䐇Rs,JJDGsvHjȇLs΃aVg!ANol0}z<~m\Į2iȐdt/@=Fqr~\[z B#˃~4l(gDgvsph`.m,x5x"1Kt?Y3<򎾰 #KkJjJҟiRULg%*x}?h_<]sU'476nթ&s&ώcHH3|A&F8v_Gg7~QZJDk@K#ױ,kE; 2Q<(#!N;Y`!M!rϸYX'^gNcv R>[)MCJk[i_l b1|'PZMaT1Uilx] |od]|"Tr552ޚ~q6"0 jR= WS*0UVԛ~̐twk(Zх!!9%oSo_ v_KwCtgt}~rI^گʔ͒/ut'+ ݵ!fcME=Yi?tLk[,H'<:I׫<.1Uzud}Ő:QVr#^p7DZ'֓AP͕kJr#O-ZF(rYs>>!=HyK6jUxs©wyr&{5ؾ4p+Q5n'~D1,[kKIrA8eiK;̩}ٰLL/#&GF  )R3>-S>Mvuw^DO'x\hVm:r9L ېc`-u="=H;k^sIH#?J]YX,Q`t{\kI;?`1QS=wg֛^|@? mMkӭSmQG\+2K8#Ȅ@o}K,RUpK恃dhkφl \Ť=xЀ3{`6LnA7BLrflO:ddMs|bM{ksk{Re@*U . "PU+4eALH+(Sc_6BUǴ<̻IcpW0$wFQ s]lBTLyKw[M7g'0MDb9lፕYRAMMN=icެQ[#j`Ҕ6xlqk\w*ŷ&W"iA`a*mgcXCR{r9dcZoa=L#9"t6{<:X?a(5#L.dɷ -whPDH/:vFxeq^,b4P/4#L@]/}MaƩu#XrTQ3zcg2Z- -‘y & X@Kzu_i1QaL&x~AlwA-EB-gZ >˙@.s/`fORP(>OZSޒK,ʫUw})z(ɼTk !TAܹY}]aX! ?xĬWEV0uukuYEڂ~.F.ұkVR06э.sH)"3b,r, dȞ±*oi R6a~vs*t/EzL/FMۗy_Ol7)pe7U*hk D*]:Q0O5[o=k݌2]PŞ+d P"Vnx/Ѧ- e!|_1$Y`fqo.>Ɣn:r;q+[="KMY⻵s$|+K(SEQ7;af} [/J ^nQMڃ0?$ H̫#hd*ׂ\]glt;ۣ V}x:-H&7]} Cx}Z1`)|snOvQ RUbSU1$A{ڧ{Im p3 `i4B-F6r1ε4JW:xeyM&J?Jي-Y^8kfRxNYelXr_`]&fpG \-(v*{{tFGc@fFKn⒂dSB]a2"1ϞyC]'g|mJ^#y#^3m*o$lX^0'U.ڿP{V6L&+s:?m?L=-M=XzYs_և3t)ERWS,,~L /Y9>_b=.#og< >#fEO y ّ 1~ùδgTzq<iG }/uO–sF`i*@3Ew,^cp*"SA6Ř|jPq^T5H~!|=ЀŶۤm*X&^M1<=b(>N/2?uDU) Kʊ%[ m.71䪒ځviPlՋªJʭ|!#ݝ}R/;;ZwTU{!xry*h>FHnV(Df=Tn!6C `ݻtczHYUH@\Dg!Z zcYlkgm-gpo S^ ) {8-9W-84c೔a͈gfX23e[ j}lٸsKi:ġ[[mm1<䚦U:t7287]u" o[XuJފihSyנ"hG>mz6R|K;ņ|K4rsA#Qh;Q]Օg45v֥ޓxkCe0h h%KXג[@ pһ}GVrg:f7x!kMo%FֺʧK 㞁B4%?`}}m iМ<.NIH(.(N[y \fAzpΰk#7S6BQ ~.d̋[>z "f'Z=υ /|O5k+h/2C-AE;c ('&4gfgv#Q+vj-ݐ7)SϠad5|YO>4Pdk"ԡn㞊떄AQbs6~}nN?H*9xEiT*#)L.#.>]&GshW9gȵi)1,A;naY޿!]t\;i4THr[p s>ۣ0kBѯƏҏ'W''e_gDQp!` :tT1l N"SLB;rI k4kfwlC߳1Z yWc<|ݥ|DZ4O0KpSum"MARkӎ 7DZibAίf*ujnb*~f37 2ZP\Gd_C:d6)sAMz0l~u.>3hp@LwB~ HY¹EeʡДX@66rrx ݗbKd5NX5OY^V:|Us(5[/><ԉhc:)XK'Pp-WDT WVR`W' 0g9#>I;\&b3 :LE߶LR #)о⊜m2w1w:^rU `_ojjO9Ao %<X| Of^W 5$>oRPr`wi5>q9Hpnݱf1T~cL20qb}$xz.)'&6Yk3˫#=Ҥn!&eSq&p&M=lI( %К;on̆vA^[(&ޔ+Ws_+)nwB-I%v {ܮk~]HZGizCKSsW;މq0"`7ASٮeC8GV$j guV!X 4f:{dl< [54݌ mݧ`G;\7XCi1^S,MMe'4vqȘDkyp $LJ 6ŷ/N" a@~`b2Ao1x,x\J`.9ACT)f񻒅̭Ɲ ,wQD {n:衬kO~MuELի syیdT9w~6;"{Ь;R72Sd#f>wiӵvnA* uGJKd6I V|P^ d6[A)Л`9Y@D"y?ck*9֢ kW7tz01\ pFUdätiaq|lVXj~bv) NeƗڂ_/Sr^ BOjI3\@G@J\;QOF/r"y0ī Y(uPO193[3)æGlYQD7$gg}`MVmWc'j }USXA%r%$&K7S7 t聢f0_EuO +$j36=6=We24n ;kXIZ:M{(YfCZ~4O+W!AE_\ ! jEbJ@ЃAѫ1,eVڮͶU;v%IYj8e&p5O`2UؐP8<5?i7]G׸qc"rT G;1'>hB@k 1Uձ+TGh|r>?? Ե#@i]i-dr$,Ω?jl@wSJ, ]A *hџb)ӧCqxߔ-'7o@l̰% =:h!+\;EWݓs~݁ Yj8E1Z|UH?)h)4{I{ E@j}>w ORmB*TS'7ў]M{Cu_(y{⻇FNה |7. m8u<,a!D'ϰ= PU hOb57bqR!/Ԙ8/L߲>p8N WyFm 5}}<RAWP||!E>|zӧh6 r|\N/φ?p 8RD1'(h]0 n "?23ˀwC 9j)<8ˡ=u6_৿PM`G2zV(0meK)oiT6)G5 PmP2C^ӈ~᧿P+\ާфwMo9g{k#jy3b'PO$4V}T= `hhC6E` NJL =2cׇm{G;IJn&l ]a9f: 7o`CW5 ੴ$J2pC,bB0lՃYzU>mov*#67i{nsN^< ㄒ1$x742ZgdEqf+iH[C12T} EaĻa,XgS) b}mO癒RO*gr`WqnV;dz*Bۂh*b m>Fٓ"_W@US?Ҫta"P(ͫ u7 a&[ \rEӶ3"(a!ݵ%ZXRf\}RHB@ >N@4A⎪`ְTY>Bgs`94Y4\c/X+ 6deN.L."|4hnr)dX3O)M4P'>>YE|)+(Hţ6i'D~ݭ mA;wナ;.57c7A'Xvq]0&#Nz Zu^".zO{x2-ըر xJ/Du 4l}$Gn6Zr'tSpͯszѮAO =kPG(@P;:: FNV溔έM~=hw)뺥LV)"ڵ"Pחwv7s.$7eO: ]?(oB6:K ,p̎*DA/C[[B0-xr0ozIѤ`xq"er8SrF'BaFp@;oROgr ʜP۳zg蚪1'@@'=0֏؍=ەԒ=%RyPN6q}h]cHU$(nC jS'Ss:FǺD7n WzquιLVqC57ea "Sj=*YTz[ w}P]\n9~َοpbxYC\wz|{y&y5XRGq1:h*$`zR[o6JeqtAmvQvxTpbj+mukB/i=Gy~@^A#&1 !)q9̰@&\Z \ \%S鶧hF9?tf<;d}C@3~a0I 5U!qgpp?t&?$-XgWcWy %p*w|]ޔF>6VVDmb"G 6xϚLFn^XSurr,]&׋On݃ACP_YC-9[Ҝb&57EF 9^22 %`1#5ݗA\@s9"֬z7}U`0jdykbvzK09LdBg̾Iu!h͌Raୗ3G1EY;,[ؕùޗuړ( f>KKKZ jreli$hX19j^P sa+죗oCxo7̔U7NS9P*ܼ3(fY) LGG.1T֛5$:'`h;;,$ |؇Sń/%$x/OJl@5P}M,"!S$f5Ǭ٬ƮA*jYuT6~cD,|aziE[FƎndtIQ rlB"nL[{t#kIL*YA, ~y$$ޤrjJݹ[y_%´Y :"j(\^W!ʯ&,nݻäP{W#Ч=[.[wc pwbmƘ`fp.C,o#]0kTIX1mZT{pYf`^=-$Ws׉$F팀:ɼV#Y)N 9aGv:]k=1~Q_tɻZjPR9D|m ̈MBj'ں0C IͮpSHo!k&_T`L.OsX }acSf=B91w>vƓkߗ+*mPcFkc8sF/@ڧ ^Kp/!Ri-NWLWpWW={j!4HJrbSmUL! wrq}3NlYeZxPs!|C.Vr8%ƫĦ xoGtĒ w5++J8. Ew?: (69M':JjȜ+UG%>3'3_a$W5"jN~b&Ёer"iht* ʟ[ΗH- 5#ѣc3Byl,:b!T"֩SS'i$Ș }Fͦ?V {!DJhb$֮;b]jm9 2MK=a{Xzi?hWxHnn2C 7(su(©tc JVaZ=N~19h&UI&rU$X mi',qBb~Rfv['g-h jS: ASt  P5$o5]9aҖx? h B7u?QEer.05_9S8a\0bRcѓϗ dYSYT4LlR[p\#R2Vq$RY7|FtIIP` CI:wga+8&ņ%2ڒZUCl&6ZNi1%;yuŠwZ^Wͅ~SqȌu@%Ta}IOf]{ lRgHڔT]3o=+˰ 6$O/r)j] cZgp8w`xAˆ)Z[(ߢX55rP14"Q^7pRt@l /2ܒO0@:TGq亷b7Iyw1H^X[ƟO%1?hEdD!<ttZg:ւ PnV$0j1 .-4fyVպAZTۼ [1qEgF-+z9]}M hd&^ܖ=$9uq|Ae 2q2yoO5`GRJlbR60r.4RnJլ!ɀ|'+V0\ꛌZaW2oSlB+$3=*R5_\b/ iO5_y 1ȩ1^bciǘj1P|hԉApn3<؝#.K0>*W@ɌDrZ ΔJ&I;C&t'Px ) ڞd+KCTᒢUpdܧzj ڱp0{p$f8f J$뜦֊Ci%39Qn9{&`{ ^/C<%D+T ƩrShv!g.xxܯDN#FeWɻEQtWϢu+Y%CE&iG!(w,*DoWcF>ѕ)buUq2jFYdbdNARA]!4+;{U6 j'eU!g^MÑ\A#=`5dC/L[Lpmc:n `0Nh><`XƚagOm*s=obWe*twJݓv&8UUOElC'Ϫް|V8CүuaQmz 54?$k4@'$)az9 |a<.2a՝7ǂ̵)ai6Ap[E1v K  KvSLb%zi#yʴڪ`=¢O<|DV;6ٻkM`!>JyFXG_l3!: 6TܝEG>(mGkшͽZzX&\>bnIp0$X-2(BFbs(uS6h04. H_.ਐB FJ}c( YhLDknAĘVLD5oUU5xGQ??#NDܒvɖ*R͉45M.%/7kag].w7c E)z,~uA!';Cnn8Z6!Y*֨A!vf.NqQ*}pyח#)0v,?>t&mHN9A .?z4 (Ʊ=e&47ĀJrn XX89 JUd&y&i sC>-_!H֟UQG %h*4CD/^]Ní(DampMY%~gmd/HN:l6,U)ơ">)֡+7ز ` =p1$q9EU[iY_.Wq0,=Q.jJćq(+lj֭$o5~-)C<'e [ʶg4m³Μ*Y*{O/J{/Pn)scֆM鍢uPFaXs6Y]uJPǛؑ XJ,o$gu4@M((m5xB%e,U4Kl$o;v?. Y)+ɂc qzf }ۅMRV4kJ$VA|vkQ8JBKMA/$=n( TGA*JS )ПЍ鶩0S:Hg?z-k@lU*C,)Ӛe^KÄ4q٧MUz{|bwɫFfμ~Sʽ)fJ2 t=nkڕC$'ے;gxY&j{2- 8p)h껮>צ;Q歘d}Am Ob-"4)Sj F.>e.1MRb[קo0zEl_@r큻gﲝb$/ L>.[t^&op|:K苗/*՟wl: 阅ޱCt+ *Irc0sN=jkmxvlo⸃שג3h``5j_&?{hUpܪsi[}6ӫώVA(r+^B+jJ2Bʧ2AK XEtޏay)^͆kSD8EMxQt*Tڋ6*gM"ߙSwsB>C)ki3{ L]-j z2g+YPi#\t(ҥč8ptbDx2\Gq=O exc{Ǒ$8|oRo\o,2N΄DB4PV t&a5y\2}O5Xs2xivoRo3|*u,u(?9fk0Hӥ.Pe@նa0Ӱ|gezd;(w;g($Ȳlo4Ɛ*? 1H[cP+^:dHc,䫲3#Թ\q]+j"D$F([2<}% ,{hقw*=ps,+)b4#W9h ̳j<@~@C^Gw;[g+\ ح|s"az*>JnoyusJϻ:΅fbmtek8|"M7+dmyכ2kt{mU!-yvxo{ VқdhkV{>KjfCe OҤr a18.d ʡ% r[?kQ-@6NkStxBK /4mQ#|ׯ[֙fPEbO tMW_ĚyJ+YoIrL+]q\үc !x2p+wZox*د՗1S,P3>soM}v2Ƶgp(Mhk*S#^,i: Y2yTEh\uÌ(Ùnj:Wx_=M|dKl#r?7/EnT]o^(йHL4e_#8W\hV6%%}\4)$ jܜB Z4(KNhooC>il[o#ڰ$Tt5\r2Zε>XXqV~tA{3W-(G^W!z3sSSwd%q% 'vduE-9^pz[o<fMx}"t{=Ib<<鿷b˔2d/vXM}2p602"6?=HW=|8nqH1Le@gRhjHHu6;Z$+ɢ7|Hɺ<Js)vn}W}$&_M:\N0Yt|s85amҎ_Ǐi⑪QyP?y8}ܴte7eᬟfT ZTB1K+KI'!ZD->LX;iIWoSy;mgfe/#+AH0bRgC,N6^EsLYȫm`̻Q]Agr95 6=*h_6Ke Gd1&oqOl0p?*pX@B^"oԃghqݭ~*h6HUy8|EzkB *%!Tol^$8vp,Yn&v:؞'χ} 2 GRi韯*)Үjׇ'U{ju^)\GC7>ԥnRp1lNAg&zᗎYlzw/OƳcȦDJ##o?W:SxP-? f*jp0 [,m<†&2 {d$x]-U~Aܾ(,;탈8p2:֫>Co_fZ=FZ#}#oC`IDDajVhx}HA6}vɔii!SĶ80f_F_)S`mb㐲>v>1S%*ԥ1y ʲyH:O1o jObTi1\`^rZOX&o(؅c`7.ݴ&{ua);▤Y;*{X:_S~q8\2Ő}r*&? RfMFNZ'(G!iGdTCt9Si}J&S0n M91u֪ë|Y]k ꉉ}aS7Uk3ZSnַ̄ z(|LE'af!Q/Q^tzau:kk.~K0@ ouDQm]K}؞i(ӝ@U;pUr`# :v0َR"Hc~\bJ1ߞorzx7byÁ|5P|ynkR X/kDu ubځ+zr\G MDOj!YώYv'Ah1޽k%:'tIк]V=Q!I9y+)fnL% Ojojp_ggQUK9>NW0%9)E\X ?y} 1dqC*&gl[64튬T=4g~rxcg̚AA,S[$ $R";ׅ5'?68:o>6am!ۋ0YEMG>RXO!\˳osJePLe^n)G0֋Tksy DZ"o'+ 9. eVx"'oASC[SΔ)>ٍwEP(3uR؜鴓[t,v+7Ix5ByzjfX"A.WS6Wg)ZJi o&:&Cws~M"u!?2݋ˈ"(Av亓T~EL1]oE[ vW߱Lp0. 5WBqiѨW߾WEGK,zT Sʋ=x q?d` YD-)wȟ1^ 5co$_$;*(߱v_.6".P8{bf0v'Nޚqlx15 }S}LiqVnR3i?Bo}c6R@paSu=׆툂qU.>aTbsC_+M}n *?.xԻwvDƅ(<&p+ެB?2ML,4GHHykSla'ER6X/r}~d #Cd6{%, {<Ay/lѹN phtckQ9DͯwwH,o lG2](y}b߇Da.q2b-D-J&BJSq|n_uObH"2$㪯dӯ8!e}jh5C iiqHYbe83C R3Gl}=9cRjH)i)bB ф{7H7} ~XެV\(9udz m+k2ώ^gR;F!~2gNJYȪh^, _oR!dy~7Q. qp`l) UT_|Π'fbKahh &?u_p^&]1| ?T7ܔvx}¡ zQSRwuHAI:o2Tf#Ga}*:jY!:v; !Ĺ]Rz0ӋD*rnd,Wմ*L.܉[yԍTF`; tbZ{O_UXZQ*e8uOLע͛C=%9GMuo+~-AIuZIc'a8p?|d[& JZGUȶl0[4I2qF|d&$l7GIUcaϰM#qaUt]sFÅ=۝K^3o FڟÒyMfi -6iwle%&k2!Za'[GR ibPs2#`;L1;4<ۗͬ b 8EVlC}X[ҙBN[vHYͽ6)C \CjU7wOEݗ\nM$Fdv.,$A^Dq7u7‡U& 3"UYrȵ$<4Aǥ{F"lVނ0s`++ B|Ubfnhå+dWv~;@SGcXMh H[~=5LWf0O*Vg=cC\mڎ>}P5缝xoes9f^uJXmu*sv~ }@w4If%ęMq{0r H%̹]car/plß2:4ݓO1ز SS#971 26%3x#W &i,-ηhڜCU]+UU~X,U㾪pᇅmZ⣂Ϡrr|,lp*5d[}}ktdn3fwas7wӻq_w.}3Ԑd.D0+XB.627!|NmYuH$tGC4X^9СuQ;L|Vt/(׬mDӛx4YԳ ֕6,G#B,aeTjZi]fc{6 qkĿ݁q <e p%3{ @dUx P ֨@ܛHO-ژsy*N>@xnh@TJBX+(c#\E ֓y4QY5pv$c2*IG?.`FA\Xx\-^ȗ: wFP&ĺb m@Xub>X@ Őt k ZK)?W(xro#CMDhյ" P,}fGVcΎڛGX^NIebH{[!v{4hӇ\yKfLc RR@̺}B1ҍAfoo a\MW~.;XIAPx|I7KiGgV7{ax4ђH Wɏ9|..xD+1Tv4I8[h; w~|ݛe8ՈVg;[Al >j-UGI? sgFU\$l,% ;6&`zDT(= ĝu+ZcV\vtDPywCꋶN d 7xP:ݻ3̚'YS-2"@5@G \6I*!91 ^1m+[ksod|SN[FD|,RSR2߬<HI_0R*\B1#.ӢR\3bBOL+bwFܴ?QFZ6Lkn=sxY.Jkk MbZxI= BVԊJ`1੔kTĈ T~3ʈ>powPu.w\( ^Pӓ9Ҳm?|cFk+ҽ&yr#&AUmkn2o$>aAüY39yiW0J{btO%XCm=/U>vW^K>>Qã̌׋ڐ1H:Ucrrqm Mt~˲hq?/=hGoq]m4f3|]W?ev*go]N׳C[Òh9zI|\w.IY p|v.Wr͢D k9;oW[ oLgܤ]\w=zcWkjPbj˕l=4%epoڲ9԰{8}8hDN{H f.IN R%o <;f"_~Ӕc}XO 3~k/1rREιZ{Y0xߴUEKIDڵ3V}0 7)ʻۉ'ʄlgP| clWFʁBџUVLuҸ3)9&[D%'joOs#V|v\\T#GN8?Ӛ 9 qk35IW6+CPpYWq8?%R^.NrxV&oiK%o{]U3>Ch"|*FVp$ \d_MxtvCS<$.Ⱥ\hqM7 ?4Ƒ b.K\OEu}};d sETMv[Yud,"I#~D(]-ZFu9 4 }xiZj} % +;|s|!1zJ^bk'S+jUZ#CsIRaͫ?Uz Iw6 1W:If6\?if|ulgd)tϳ^u*8'"giC{%5\vJ1ty ' p<0BB4XiEW|*ކz̚$_k#:qV|yNDIš3 X׿Vi:Â|rI}h/o(DY2n`8 z1k~FR0 4VBe*Uvgl5]4!1VB% 5w?qs|+x_|Ǩr%*=1uϽ)KHNXUzwt uzr} f4oŀa`}u"LʗKlL|DC/rXr*.2xUﮅIAǓ(>p~؉bdOզ\KpA1&lc=̀! )&1{OA`0@v Y+u#Q-Xeo>*NSEQС!þC{2>]n+gj㳞*w ".%obŽ\X#})DS$fSG|}R;u5rۥ5պB\LāZZugU3FMN۾(E۝|0ČW'Hd{HյPAoHm^oƬ耋 "zKb6ȭy ~gZS K,-xA((c?H ?L`&656GJz에ܥ-bU2gS0Т&vژLl za=at(*cA~bCck7~V0ts6UMNX6eRyjKLۛ 6 Tu8Q ?rR厔2:6\rѶ[D:E66UlD#NFM<\Yh3ի_ W)ÈOkw.A/Yq ?F|TBWX!p-ɩ'Jd1hx C>e܍6=J{6gmsYIJ G2H}^}3LÙl>,mC2B|gʘ4jM bƁtlAA]{2 X{~ú*(p&:3 1: Na)lx8I}U$cBlQqp/4H{//MJƘ'oBFwV2k/lӗ$DE %Gս іkE&3~;/GQ0IKcU /T.D! - 8݇U׊ARG_ɰn{Y|xqΑ]1;+lMԢFtr:`uރXoZm.uQ!{z$ƒ C#ͨi}` ˪qWmIk"xVL7}=9Z |z~o@y ehZ7^,c<|-A_/ꬵ!ba jxP"^Y}lf lw*saD͹PWg\o nn9KC7AZYP66В3Im`ݸ'40tJfs~pv_om䲄.jVN]ry.F Iw_~s߁URr'͇;"(ͼ-۞V%CGݕ9Ok'JE}R\X6@nѻ͒BPΣ oX=[~id)Kȧ%zF4If+wj]RFD __Y6ϱnIu@:|KMNY@HFݰ飪B7%3zf96ocp)iGuߵ۱^+=FQ]o<0lLLRIN:Z X,h#UJ]5y=4$w-!(a!jH(sSw'Ic&$(ϘZ2]o!VūI.XI9!h;7-Շ*]ӛPsBfLz٧V D6 xIkf'ku"H*I'VsQ544UX2hqǥXLd(zJ6눢>M@4K}ۋpx-3-Fp2ͺ5̆VeV ~7i+5Zm6sl\K)[ku։4jO&B{GjbFߺ lɬAߥh bUp4L漲@RNcYhߘE:l"gdӷ҅r5掘u{GlA'Usr͙ iۨ\X!>IuϤt<Շ3q*H/_w.*dڻ4B}YEf2ڱ#@E 4A+f52 kQ,WUHy\~,`-wĈy_C{QY4Uhk䤛T#}3ڂM&<ʓR8KbFPۚ(%,hhT7˲3;UxDR;<͂l̅ɔjdwyL[o2Z܊{ *kTs] !b <6؛f|sN&pg#7kgEH+Vqټ(m_ЪFm#:Lat琀]cKʛ`.=v=$f-jHV{(Xw}w9P~lIn~o‹UmEi՛y%j YeBaMR2 Q#=OY56*;tGb%w)a#g-ޘnxC#n%'̽Zc4u,bnK \Kon"H=lGPz4F>4*e1!{ٿlQg Z+Yu?WeF]:ʡ2^s :[HX=WyL4̫-=:&%mX4u 2:Jߘ ;JWHR="+\㭆i٭HUj$~*nD^t~Rs>2g8Fͨ!]dpO"Au5[~b:F<5`neP$3o!QzL_P8r~hf|u乷mf3ET]ikօFnMR whF4kF~2ܥ9TPM2QK~d+{^]=0V-82N+hǘ$k.\/xr%|BS<[Qd2!\t13/Ff^,xtEƀInKBL\P#(U2l5z2^^idr^VpA3L&x=z: w5 ?vp.n%V@c8²lxz ߷>@#n=p*QQiY\7Bˡ\{ `H@jt"]O"dX!gvҢ)pHX4M+}wg&E\Ujb#-t<9glFYO˃o\8FhzϕIq]qdD]lyu5u#v*[ Awf³:=R*JGv|Dž63@ׯGW)[t w 6lJq׊|\l?6@WzQi.fL3G 1mO %,A䪎_l2.d<4%3B][mVQ<ƮV#gZaM ZSa-SPmzMYaV_ل<;gK|^$IYg2v4m@tZ{q_=m=&xd]D)6ύe'[6P1ap{%0Ҷ56;s:= ]L}(OϘe0t =Ad/nI3O`WDB/fj.=)q P͵M>YXs!.NE7"YjEy2_yF*c&u7Ï0|+VRq/ X8U |qAHwY+9yCm{ʆ[?NA"b/cӉffȃ+3?slZk 3=tIPKe@Ax IFM>+PU.CʸNSmgkYf }*_ty*͇H0 HCS]e9\oV,5Pu7ot(A#Q0l>#wח>?~d4G!MT9x=<_?u!J{u%UOS&-= ʵ;FQq 9-=>a cdOhpԻNUMP,Ի2ZoG=ZC5O]>h[CKAY?L. \Bq8gгBkќ|??ϟwL.>z@ ,*,Ȫ9T6EN=|Ő'm|k?!{(J]:'<0dX4CFv!:zR<Ν Yf7oc\ w;cݶ*y3Mo[N6dgO8~:S.=~xV;bN[kw$s\2ȏ.T )jI oǻ2")㎬r4&ªv쿾[\ڱ<]X hɾشnT1 h]cG,͌+v;?"~`QvyS4IY <Å6*fB~ѢQNI8#3n.'6ǦKGuX,\w-Ehfx\(Uqnm0I(̋.Ğ5 n}Gos'8\O50;IV`=ubԠ˘}6X<}͛\7ЄvʙÜ56KLOO,w* Te[(䓵<% "?N#ȖeKw%7;;SJudClvt:Tyjn۫d{> DQzl@QٍLej",,!'51h|KG{B i0 8*O ?{[&E1}$m`ϖ~|:賭S+/1jҩ&Y1D0Gyzf]@Z-uSRP/uvqhKOI lP" xzKs%!M]OwBDiJHU=8Ch14=f/Iƫu.πKC-{'y[tz>%1"$_AxbD}7ѪM'"Y~ t3lS2Zr7$M{F1?8:\7i͇mV3\'#~ŀ:zȼUޔ&{(@]*6):-zclwX*͇ݷ8֎q}OM"?<܉ߓGG $(D[_ʟr1Hx8zR#Z*0y9lk}SEmSf 15uO"He*R \ h/y rɚTU=sRd̺wI. 8+v'^k@bԮd"O#ř< DI\&vF!=('w=Eܑ pʈ-R5(\ԭ[_I^/PQ32)LkôW.KNէwyЈՍ SB" T܄D>)|JFBqG4ՀDEЍ Z1#DӢե䢥' ݠOhGأRca SQl9?ȦsE*QdՐD>a2+P;bWJm.}ΐoKp[E =?,8<x#=.I.kI c - ׊o Ί5`1Acx2 {smǽH)E nV!ױ*%KO&keW߿Ɂ#p 'Dl!8rׯh2Wwx:N.fL4T娛-%p^M3\>&JNdUfmNpUq(pQ3?,A\ͯa2ȧ4y2bRwd<$yramHǼ8X /ж\1@˔|:+~O=.܌-sc{,i"Sn2`q-iʮϪf!?<ڲ.$E}7D5Dn-JH2c>2_%7 #L%62&kZqvPG޼CTЖڇ ~HɥlG7r?.l>2*oA&MJ5u)b.l9lg| ,k_cNNC%Q(FP+kxJ&NLݽeK!!]NcC'T.xn<3g W!qf2nKLP^v>)PH`{0y^έEʉ3m\&o? ^qBA եn^Y8€B|*)q7Lk瀯nDTS3ȢSuő R\*Ta>~1kg tA6('ڞ)>g**9j֋)_,{ V3buFaXu1h4: l_xC.K] 5ev_&`U0\XzzXa25@ nbCBv7Hig`ĒnQr!i])d䭖>o@K-<36z:zxb X#NZ]o_pN5m!7ˣC r(?~q#Vo.KiFÏ:6(o3vh?d4G!cmm!=x뛏l:cl>3v6bA7,N6+-RD {//Er7k~aqDŮvvODI2Ë>fLWHȣ}TwoøeC][{"cH=N&ԶC GZ] つu,J彅LX=fc$\b+(hiEnO4t`m%G&er9@J|JYW\ G׏?= WlI됓sGh#]y:XzgTO7Ө:0TW/7l =Rq4IMT}C~ &N ݵ$HICTOiWjc5jaj_V^Z:%qz<#qQ#)suܶGoRpه i&`DC5 {vcG̸#LZKϞ2MDI%sIo^C2|=e#4]B"~>7:ɾG_BŘol)WUn;0w=\&/Ka=e͹~d.C{$pTUѫotx`i(%k2reۻP}}("Hrw4ѧZQ@yĴ9aA:zVliG4JGլs'4z=ݘJRN5PD L,):Ju/YG:4AX &՝! Qbچ@8Q OH02k"cF/?;46e 4.͋usOt((9<2t?xʦoP] <`S6z&M?EG! Z\ ƃhq W"~񻼎U z]Wƛh1ZE]nu_J˧tiCwy>tO%:ZjFe,$Wm= 6sg6N~ s)ǺƄ½,٘%^&oj젴t"l8)]+ &Y{NI'!W1NJQ,ZԾC(i@c= c7Jy'vߺYA-] Ed*$% +He({ayS]#7;Βf77ZakuLW/WgI:T)57`޽o˻9>'$GsuKNT^ڡ {`, ,\;n )gvjO}GffjͷUvp9#0b77]cCxqԍ %t B'o0Eʬ4`nwV«]t%1.g\*2kI/C"R"㎫u&5')Vg&O1[;W) NE[fjY ;^sU.%E{]r@&MI0}|1$W F57ʎ8T)f) ' tr}b)7G@k^\sG(!R <$)Ҿ4\+2AϯR0AzڤW[6WY=5w;U)hzv6`;KSDءO?׋ͤ=Ziv ШAm@g{'A.&.9WΊ!LJ4pZ L[܊Pz0H} qV/UF޳ %* (⩂(*C\4=FT3Ǡa8|w2i.?n'e;s&3+5;yO4iObۜ_Gko~}FgJb:y /R#3/rFn]?z'IlM7DGGfJ nIXd4UN浽'e%?^.&JMK/lCtY4> [:h6F2EOzd֟?LUJ)}Y5E8;Ahi^  ظχ ẨL!ejB B!A(:v0u6j@|Kh?#}R[B2#ILO#?JvT)CQt COK#]wYen<)>On2 ["FYkR#?8,8 RIB3\OC,k<[B? N¶j NF6nxyhx|PݔDZQzT?C劗W:>K nRC_K@i(MU)nnnS`k>PF>)cU=6ijo#KdƂͲ"Zd6Z*amED"Yku_ޜX eu!T\CD6Yw! zL-Z,ʵ%dYZ_tVdIsnsaW=gz֍ȜI7DL8S8h)x>x]z<>ˁ6i$Y$j+WOfu G桮'E[P~dÓ9(B ^¶pa#PO]}jFzWq;Z+>J.V)h@|9$E¤/judv Jm_:-9LXS~۾, =%SL~>Ciq1=:)NU۬)G!i5{S!Et v_)e ;S` 0 QJ.S]:6K˼ O&3"{ÅD\wRi}0%r`. Il75щf.I~e\T!\>]PIHÏ!|[ö(oN6!M;X?yU9ù^rIAJMO;joWgtySHTl={tȼD-V|"LgU xLHcMH=j4;)}n* 6h SKO`[sBQgVy,EbDܛF30`ݫ+jЅov!oJa֬\:K̮W}dSdݧk[M;_sEϢxFp 2%x##*3O}b^hzO .ȤgQ]_Gm$읥WUca[a6$Wf fVXtܞ̩6eFyYd_v ,wD5"TEc8Rjʷ{|P~JduA9ƫfܛi|X 8ƐE&k;GOw7|G|r-ڳ !4]- &y=`nzϙR@J TWD`mm,x,M,)83)LzSebMI)x&X$KpxoP9'=Ye\)OeKT1 TjZ%2^BD,\ Y+K`,s6nGy)GwD̡5th R=P SNP]$)8. dT,˨*<pCcUcZ#Ki(rhОz0 \+h4.Nqd+.G3 !4fߡcM0͑fgx1 8g.D"(.cB'~C}zp>NB9M\!jC6rXpC-*$NimU"Ws|̋+)>Ã0Qw$;4Җ=9|ElZiYxsӸwC@vl#'ZnC̮\nK, m5p'K.Ёa"Bloi͜hK2{I*-?ѴFQK5Z څ07쐪/nJbUY1``gwC4LJA( ~ c -GLO4: ^}M#իa>q`7 c9&Atö|zˀ,\#Vִ.q [u0υ=mGa$֔!lyx$CWf֢o)3stQD?]E}{Ǔsgž\&F̱GrKr]ley 'VX (^t39D/2sO i)J|ɭ>h&#QW?1_B,H>(FQfB|gѥqB ~p06ev2HdGL Z! \~}{}*$}1ďFi6؎§Y/L kͦ*D`S̼뮪2Gv/?f;|48C׺ÅE2GE0ZnjUOM],.^~f,g;w〙j3e07i]Fo~XzSY}$ !9Q.>8^קQkꊬ+"+(Y\!3Q+6a6S3)L}_6h7h0p|~M4?]a __YiՓr3򑐝=]az!n-~="TcIrUOf+@N1T`nV_1{`o55TYBPA FV#(>pd4G =~GÙ}e>l ogD\7cm;n[e|kxw7*|]ss̈99tG`.7I;"s$I#t!E"XuΎ .2n]eeImjtLO'wa3څCX랣1괡3 ye-u3'[c3I8Ü1k4]g%651N8h]aQgWH,}im5!!9`}4`Ҝh}(o4e7(h bW T̚4sZ94#wݱL{mӝ\4m,ۂGM=x'Byg1ؽ&>}dEX06?Yt"Q_ v{A(<er㾚JqJq;4㱊FR#_yʢp:w ,<4Y/˯ң3z;t;;ngG'-Wjk?@RӈfRȘ 8|P :ʌZ.}mM6ҋnRm6q{a ՚63kB7)UH: -Wm%dՇC*ڧYA,E#rs׵gx Q˯'eq% _ן3%K wJbՇo9ϩ Cv" gkf;"UgzKUIzE1qvp'SՌ.P+iS64cҤUGW^@5}4%FoUs%q;V55 Ed<:L7N g5(iԆaKd|7)LIC#kΏQXbx:ehtAzi4{}ZtR~mXbQVK ,sdfb:Wļw-pX.p"Yڒ; x9K&)c[RUCg]JoZy6T3H!-WˈڏUw[ dH;A2P ެJ G \]KX#YĪ6=ZBC VU{t_(Ro0̌6 uOK޺_7 nSkE}JwBfgnCƊwȍ%tIrPfv #̢w:3*b6[cx6SX;&ɷ9|L>wS_{pfnmE `^?ƚk N tɗ;7}XڮI0/uiciG6L Luǀ$ 9H<ƊdkާNzțG?7 p^RnTG܊ Ѵ<8n^ᒒ= \483J0bmFpyfMB"VeW*ēh851=ۆ^Mڕ"^"PfhZN;fY.ʮXEW_"EP'Yz?# ڇ:G~Rr::~5xsysd ^)Ƅk [$zy6&MC+].`} G|F_BMeͦ!X'a_p.cyj|E|#G]I>]2͛ks!_7cL_AK nٚCm& oJ>y$& AkPl^ܘ;]K6?6~g8_K* sՉb rDpcAڮ"'K1@~/:TѼ$qů-#O:.C'`/C;GzxE513K6BʐQft!Ӎ)!Eo]-Wf|~nb-2<ā4*Uy*v'tK[Mcߤf Ie3 |6%}O+[EױGt6jɀm6!Pc; L[;0":,9xwFf`0F.S^Uk uh{)"3-R]y{se$x4s{6/-=S k?\7Z0Dz/lm`r)&EZIȵEQͺ6 :xxMOtS;]~ŃGd!o'{Ȯ<7G?[f`LAG;~TT~ L56vvFPOnң p=K!qإ_ITQ.wLQ*jRu*ݒYU#=Xy儻dS:^o SPѻp{R 7Ӌ (bM$CE=!I&FU8ްARz".֋j0=U+Wo?Z۠qzKP[.(*!G[|A|2PHSSʴn^/#UE6pj<f!zoF$T 0)D8wo<3,eDe:Vi粕&z=\і$nţ 76Q<ׇC-zSi[ILԻʷ8HJ"v66폈 PI2@i^gbp_zigPXcE{ˈsOꉸ/rS69V%I,H5d: 52Ě炽G؟z{op wЪĐ| 0o)xe (8T잒zǤ tmFO'z$Lž&E^1[QUnŶK+2#&:AO~*gsYV= A]l:fuM)"r굮QEtW|!k'1JqV-X2Bn=k4^O=6UˀO]hwER eDnij& [.:0w<=DI;)/)*G/<Џ%YPc%a>oѭwmqڜl{]0VB(3Zg3A2(#AzMZ@8'2 w΀/K>YCz@Rwre `A$߾Xg_^=!y!N/FkYgFQO~ & M&H*j#8fS/l#+O߸ys>H;<" n=={kR=L=a*/;UzTeS#p+5P 40'Pl+1;)ndyH n{ <$2ժ<߇l%m!PUeMȡb)9%! R7DCߝ;|Й4Rx#rK,  ;[gɹ.׺We}yog|0b#.Jӏ:t$ *+09H~cgu"L^ :2-6ʳ*|n^xQMhW 'XnM9YYjW`OZ?!M4OYg=)}MR7@ܜrK2Ayhv%ĥE-Ϩ|i*j׏b>Q*.3a GMQp.c1jy)JhѣLNW^\U1<3U?ҶVۤÉZߔ{FVxMcœUJx7_F~UVi@~уQ⸰+5%@6Y]^*熛$ ̈88^I$ M;j& C'QW=eU}s WZט.o=Z](K"7i7:wJULFs^6OYpha_B%q w&KJz# ϓWo"GQ 73^K6)TeCIMDB[mxzx ^3s59Lʽ 4S3fѬ58EfΒZ`i%m_ yi[\۫خ%^=(s 5Hx#^ı(ep۹1 à8SprήȺFS=7^<7"l:fGCPIy/?ֆkRd;oR?2S^.}xc|bƸk3rm^r 8u"*{C?RdU-kS}}׎M@`m%`\땾m [μ>i䣧_ԼƄԞeބ0' -:!v'CCGd#-~nrP/xтVuÙjd/kCn/]ݲ^U\ęSH̺&)jH#cDTOv}bw!H #. <`t ɽa!.&c_ۖu%+!Ф&QfQx8!mݺS$O>nb0=.6H@ܴ5+f13*zFO4!õb%9knRXy9xK1s+2\O}nS9/(Y}ã̟GglzwN$ LǢCE_BȖVL3nR/-Ux=yVWT'=bM9*Z"hKV\@sb_N2)-1kyFFA'3/:hQnhGyqO7AZTL J,17"?j>/&y{.)փ=l'b90߭j[jX~{W V6qmpj KлFz .d!"mk6M;txSg_ٯb)e<ZiK5.1]6$H*g(]_`>Zd>r/D4w g]wlnyrَ#@O2hrsі ?.3VoIM?#*ʵzR_ѿyĐ_F9G&:1a8S k643[gYw9;zS{ͽݦsPz[j}GD#ɏҬ[? cK0eI]([A͏,< 7vo\ (յJR2TR kaӎ4(]+Km1wԥĀDFU%GIᛓh-h1z:fںڙm,5-[)FϭrE/0pܤ7ia)۞Œi{vzGpw8M,(}3$=%3(NkMMA!ziRV .{?$'Ĭ:04CaaUcGs&ՇkjFD#n6x>@2BNjT!/HH9R Dʹ`jh95BTZw_( [O<7{ۚk7.)q64I5GujOBe S^~%1nє4,vrF8taqv`cD7ª$ʆM4(8Cf)7;+zm 1#߄#xwLT/8[r*lxi ;V<-'O LsS|bǐ4oЕ/s_5Z.Jں4I$ ]Ikx9"v^a&aߛ7h_vz>ݺ^{U~sIb/EjfS~CZ'ӑRR1G[KdS;qJ4XׄaE:aW%@+7g+÷eE?ͻ [NX W2(&: ױsʹ ~=}x0o fDHC3#>N35lp"#Q>oO-6B@"# 2]7Z~ aM1LٰԀ'逦uu,wtOu^ ےyWM}EG ~s^yW D[`7"ɷNS#?-S:r5#( A"1xYPry2ɮۧ}FmzVIoA6M!eH\ 3RCrwB$%ڜM:^x㐢 0>kRk|yg)bZ9F1> rRW)b]3 e_"{tYT;.RQH-Io=:ndkJ73؁D .?+8q;u 6YpZ**i}(83c ʱV=oʺAOˉ\0$Ο_&eOdY OUÿq?_1)&q8;`,5$"\q}ym}ar!(%ɖ dPV^:PiC ݅Č莵c+/MZa}ų%OTТ&neڱ~?O/];|< ѳxUɫ8eSv1G6JZ;̛7?ɣ.40I7&{F~T0:kQT?a~=<m, {1 ]֎0vQ]د( 5.ֲjpWTkCAٸnw&ġ\Ȁga7G`v7lwـih2v#FO|&wԶ iϗi+naSL$Q*;.)k[FY#P}DAҍyot '>j=lwf!fm!7=} }CN"t$eX7>B]LbJ,wF־_&Djdk%٘xf!ܳ 9涞wF13MλF>Ƚ#5[U܉$*]طF7|\ jˌqm#R6n|Eqo_XJwCȹI#P҅ދ~ׯGLp9=.IjU9wdS3zەiz쐻h]$'g{@NH"d Q$#mH5UYpuҁ Y #<#GWنI/x6&f R,dE.mn(j~s>͇S]^0>f]u {V(> PRt-xcc+w:B&ɕiԞ3?N]ff'IvhuU9K gŞ/ b0J~ 71RySf3*8A?N\̌s(#ykFI @cs g'6"[􉦚ײcm?\\N-%GD Z4^_ra(6&eH"Hk^vYm=LR"; )z#5Bs0p /ҷLUԍ[7k!Yed-u3tF2yۚW.04Kf?f'm6AX(xBo'lP@}% lHsD1,xkͪ ts>Zl;mi6- 1jjt\aȢ0|avn1vn^g G\H?LgK+um%-SKBPnCֳP#&XZb2eC`e aϻuhJ@Xw'yM;Ƌ NA7s0٘jNT;T:[ w= ײ zHy2{k111蒰:V'kT{sNuSO-QG >.͹Sm TC 6ba:C*TbQ(/*=0hxvS3%̑57uW-_$2^{$ntN1FE}U5 }:#u7' 9Ӑl@a֤YBLSϜ&}:Q;g э"9<ˆ9M@@lGL(}qq}.t]=ۚZjBhؓ;0r]`ax#a=#7vPpu^mG~_&?x듯GvMWd TޤG6cUtu2"ɴEt$Y/>BATIo:- T-h]HTG_{׃ޫi%;:h 5REPCs%.oX]_cO]}R 7_Ht="Z P1=[|- 8GY}s+6 gx/;g9oLi`R.:8eCJI@h':[ѫ"%m`CJREK uuHx?.[uBKBw\>"SR\k,M/<e\kn􌃳Yx<5n2^0H1oپ^ Ҷ6[oM #nnb`ȊvN"ksd\R&,BFri2%D"CR#^2C,RvzN!JaWDJg(}v2@VnJ_I܊nIK:AJ>?y@jkZFg5)2`{nZ5G@owKuZmѓ5W< {ǃ"~IhoRD;c:zQDiQ~SvP~mӼ2+/p-5](^2ڍ}}An_4h?v8p92ߴmZ1A1T AyVf5Nr喺=݇wco5OG֋$m-8v^p[^#ʉY^U@zŸu&.qxTo h* *3XP9{ܼ h2=5Q*h}PC[ʨ:|Vo AeV_TSk"XH^B-h$!pa{w W{<#CL,eFC"8@|{P"HrN+@o)5i&&a"1%ݛ|Q & V.I*\B[%>?Y ͵p $ea#j g F_ܝO6qR1 YTl*_M}xnVtE\_>6>{*U/u#AF4FHR!*j 0֊[cs㖲(!SCT߬ʸ9lm[x6Xً:Z' ٺYI޴[Lc.?,@-p995XOك )l /3 @a_v]SI[jKb5uz59q}ȍv 8{ɬC2Q-rxGO?);"OXM܉4:{!)&cs1x{dJmiSX EX*b6p=u }&z S\-ͯ41,!۷04yr;d;B[HCE3CRYWGXvщ-H(ھYFYAY]YpԀ`za|L!󛪫謃ګ"TFS?TP:R`,;H/>_ø %J a]}T_Qy ?[4F4 L~ً]*μ6-6'oM 7#$ZMLٻ-wB9 |e"!֖g`ڸK-W򠲷H׏'ޟ2nmcÂ)BΣ$$.Zti^W!J E/-'ǝFBCӹe]ZJz,hXSt(wZ;ac}= }'Y3|\\L+dZQ prPdXj0Lao㚂<}Љ5T9a Ozz{Zi;؞fI]hf7JOD.(+ߊKq> mɗE60P|( c]Yu~RRryb3{:G̤ e!KhvTD&(5Mߍ$7>ToOdV l FSbM$ɛ`2X=@G%FQIy$+p-vms2@o5|g%kjr-Ƞ˂=2wvZsW,PL{'Cn"y-t*Mp>2)`X157yQMGdpZIG$!\(>& N6\m.~`3xaP VeDYvUH1~uwuE 7XIK==[SC7KXFү2ՈF bnd`tɢ4H䈳Hي3'XZhg2B$LTPoz⃯:@DV%[ѯn4HeH> [BMվ줝˓U͊Bw.S=ZnbLb&ԃTeuR":铬^SNVn+ͷrx/fPLs-Ӑk9'iP^v,ϓ}61&0 T; tO¶lDPkyH{tS;:U=X 6aa4Un"a*>M[9[(.ʖS/LÆ]$>y>v [ڱo}M;4y!~Vϡ4n'}HNֆXWw;C x!O?ty|eh܁Pc:!٫7 G,'6f*XQy28\b;؇kk/(1.tcѿO:3Rԗ%w?M ]+&WUQ.ECҺ&01?V@Cf:[L5GC^\LREP\"7`!A# :[mRPԷ)'yw#AIzQ?"ܔ0gH٘!m0:Πndlu=+ӣR\چa-~L?ԫ+kw 8XsVMrerrמ ë kh&5-EuU;ԋIj.[܊8&wJl_ݖhiO~ {GùKCBbQjD#6}\lmlb**IsFݧ=or.E RЄt(B8v8+ #zTD>8)OL7:Fך/*y ш5:`TW8jdICh~|(p-#cv:ѝybdsmidX*rr0F0ΓD2CUfS/hv2o p8פ\H}&f} qݬr%h6KR-:0:Eo_HNj3gj]{OJ0|Z iShF/vR#snBOSPTѪHq?e7tw3m%Td8^$H}R3kF9s=boɧ;wt7j8=ydFOoc, p/)fߍxB2їF }oN 4$3iFy_رK6,=w`H+4tyêCjkxw9 {n)❤"XKgJv3)5`G@Bq1ߌ.4{2r*zO8 ΓǜYaPo-yr"Õ׍ϧr e $YO4G-&bʁg B/CO̗`1`JΆn3Q#o[sBn$egmֳT!\H4Ij "DI/D`tqz{[2K޷Cw&KuV*ymD"ә/7W53o;2}!nYtÁOU6Xe(^cpKN7;Ղkvs5YjalK7SJ\#SUz RY0&i cBՀfP@ƝVLu6oˀNdmPيGn:g3?4)hN.F%Sv)nG vnQd=Cq~nba 3x"l H]G ԽXGRr퍥 _Eb %-ڱY42bG/JنȐ^2S-g^+v "󙝅?Nͺ?n^.!s԰n4L]BiB 4v G@Wcu_-5!6A%9C(5xvp޾]3.;l*WKv=X~ee"k'* do UA%`RBBŠ'0)84C=aT:Nqh9KRLq<=N5VJ^}%j~=|Ϧ5f{PX1FWͫ{O=fEܑ@%P/^_ dY[vo[~){Ʊ2wre3YlpblRfA9Od[u=0/[xglʬ.8nʽ&|36Bgd&=|_Y :##]rW:Qڝp/ał>HɺsOK/Mӣ.Vu渿!FuQ^ F۩s%HĄ?>.>1gN QO×ъ%{4?#/r]G,q{S6)[1衬G>Ӯ0nl?UI$`ȍX #7~dSP .1y# |Lή#>@#NSz \E݃ߴƼ[I&¡Z(_!`)cր5ZkħSmMkqV#BUjU;tmx!S9`=k^/n_<7ʨ(|m٫++RUFDSbNU_z-hÍU$)Fl6%%$hV@Fn3u|Vi7&rן B26n]}=e;s֋64\8OQBҫ,t|ʿwd ]1d势),Yfߜ28LzmǢsi\kzp?'3͍xiYZn4!I5AG;(1^aQ55[!fn:{c&SWD1nc0n/&wb9K:J> ۷I1)Y`K+&w~E^Wlc.g-RtflM*,M/w"cZ(%+ .Dɒ#jŀ55I}4ݬ w孛^z/.xS7!))ۺ[v~^~ _ԪO BXl7O.5}oEBEj]HV%.s,"A0&27ui|&y|PdW|c۴Уmp6dQo ji}ίw?39@h#7 dpK$#S zV[[1k'hxvѝ`kBL [;5ǻ=Y&LvC3yDp_@BZ. p-aU b QO;.&;hIHzc  f rS4ݬĥΘm8 bĀ'g$uz^ QN;$S\걇 "T^%քGMiWTNLu0|mf;ҷdq >^m$PpBm1Á /V|0D4QGorօ])-m-72bt$-ub}Si8gi’)UR9CuWg#Ӑ,b7t``->ߪVUO`U te*DꩫW0gXܗ/"Л *tuS#i)S{RZL_@j[Pӈm&S ЫKYxd_h18&8 {L ݾVC{#9# y(=IsO,ixo/?=Gk!\ Vyk%2I͇)4wop:(cQUir4'õ/ D_]x$砻޺XnO\=r]}2J5C;64Q@"Ѽ rF>$Ը)ԥ$v98-KxJzYG~y]KIg|&BɃ'\{աej dw8@CeF˙n%p4L馢:[$Pg|VA!9T Lg2Z\PC΋~?Uڬ,}e44Eia:RxqRӣPaf"*jA8:gst[1@TV~6CT<؂ꀰLnGp4t S _Du8$XyG&}̓2l)cQA#7k; $5e{$[F|Tc3[oA)}/?6&TM:fA?]H!$GM('i苅>X-]ia6h;"o#igۗHS?=y}YucvQƿn_ö/}}{Mͫ8 -i-ެ<2O5LUWsHYԇy)}v ~=$㐂&X'% QAOEھ-E=lf״j2hM)b%DOI7)c)\N CK(pGHlI2D}6#$8W ?(8p/h*H9l]pZ7.sXpOieԃPāH2-醣9FW pUƫwz^*:EuUza/ d\rLI~l5$ jMOu֋P1i{"b2 v]uSO F1ͷT eSFܓA~L{ᶽ9`%"0tiEst(8b9YtaGVc5 Xd~C%7ɜ/l C]&;$4&)")0v<.9f!g7ϋQަC _OYGQZХ5{8*؋+I?o'uW򷙍˘Șf=Oa@*'ڥ'zpf1z>ß=ca$U5)99}dpsuHe#Dwp54j JCQ]CD&EȐhTaQ|;_\jBZTL/lKd!"ں*1nwj6Z_vxBȯȘθ$e͌…26j_/nS^x-WZ(A'JGԞ_o mP!EQ>@0j>;;2j\5Kp3w9\7;MfZZq@z-, oW97l'KQQQ7dMiume瘵#0uT9@mUu Xˠf!,(x.m' l-1tgI9[:6CdOj#aȴ_Tߣ>,knr¦@~m`&G> ڠv20ɍxg6bɌZ_ɣ5l*f췴#bhMbec6G~, {+)]2X5.^U$x;MGp?Z{I2IGu2pL"k-V\Gt AZ:]MR\u``=~_ghpKs4i@HR_6LJ;5t3},R;4n\X*lT938XJgq~_fItE9=&\1 ,>BMLHaݷ8y1zSìוp *q,qTC|ܷWR/R3evYYJQ_F@w\I;Y#sIC( pO4, a3պ5p4{3ql:HLN$BM'@WNvV!SHvl|F)yغtޣܣ,lVL{͟MwvG_ތU_s.im‚Rڧ<" u"LMѕ$ޤ!K^; 쌘 QR MoJ1Z=LȩSC &8jޯς>KCN4TW`FEw4d#SǣF`2UEeBL+GɋOZ2o"OW~;rHfWU s1+[vvXl/ŵ]&aD;m x~zޕam- :;*;Cۻ&ˏicQU3I%h6J}{*A;'feat3R#x7ȕG&6] rwre%a6IñM4B]Yc2%yvMRQ0nY jۅ dH ;96eWxgPkL{B3~(\L$_h]cwx*k8]w8GÕ3y8n5b-fJҚ PjiQcrW 7y0L<>c{*wzWWo&ztlB"a-ٴ7bS7։\qਆj6~?D螗baU4,m(Ri5nB\@}wTv"[Mir0(#G>^dm.r!9mP5 3=I0ZJp 1f4!]Ô-ZЌ1{9"QEZLRi{괎ҵ )Z1RC5JVl-l6XW lM:˲X9 _6rn. -z5i"ZU.Je5|!bѡJnZe2޶hcKxPSd楯S o&FPf~ČB̐ uv|HZS|\@N"",5Dpcjl$ucIA=C;؆@T[LcJ*Ha7 #v;& w4vDe۷l=| 6rFJT7hCu^xЬ5Nk%2Oo?"UL殨5$lĢ-6JSy w)slY230uD`0&\VܛU1}ܵi>)ILDivBl8 ET9n+^3ȧ$s ć `4}`L:5Z;h1{^NݎƜ}{L)x4ac>Ͷs+R=7Un}5O~I 16w;䉳s֑h7v6Ld}N~ZWO..v(c>~I2R-K(ڃ< )/u#}ETBx;yJD Mz2 Z'z䖼^kg"1aUhDNkޥi)d3Bl=2Lkd:pu2iO!67ʳ)*iô{hԣ#+tFhO*wq4vll&o"vUŒy >s8Y!̄~o$9$cdUʋzo&6H4S!됛fD n] F7 ]S5M nSȲh,ISs.O[X#W1p{ %н',N/+-uqR:A:N)D +FIwL`փԀ8A %B~=L<&vu3ܥ1^؞8!kG-O~ 6\/6DؽfzUȡ ´9F⽰GKبXv׺VHUb';ɦ)XMʟOo9n ^9Lz[uǯ+Rsf`svRyؚKX93L&1:XI@QNgeZ\.~awtA>W8.rÐ̿vTgSwf$ZЖB"J?[n&H4#Cߙ{8/|m *^ wf<Ud霊;:D,l?EE3ӣpWfu(m1Gs&/#SF^Nnc *8Ϊa9ANHvFoW$J0<ӐLhĨv=X0TnQEѧK޺5X[(2’Ц;(4}~z^SbJC静>N|1C}&Da$Ը#G=:WD-ٚdH\n=PP?Oq8i؜?Lעچj wh.M(s`";!ܢpN[4iẇ̲5yڕhNw~'( H}<6pUWvd`-ʼ#TuM՗ĂyV-1BaNo3 \Ӵ":^ 1tc;̍,\]UC\)=[=Y)#$M^m xb"&cZbC8)}/.`M`a} pyy4zؚʂ ̶!F$׆Bocs-AN)C5:j Ey]9㡠ozP-m`)[]J[i}L3&Q岤pюGP$w1-Y^W`w -%2Y`ǫ?\DMZb(rF%]wyrn*ZEu[MJmǙwn6nF;yz;'7XrHE$2Ԭ[yW}xE-Ak5]:Œh6W @`1]KHNnjy/' S*uv7TmHz&/ vla75?v$#{a(T, ꂀkm D$lix5szOꠢ,(e;3e}Kr\/EW}G3Ru!z[x<(½0㍰6Y>F8ͳ9-g--U4C* NCQ2Y .BKF .m6Q>r'r0' Z4霋0H'YnWeg0uIxQ ԒquXeGWn8YE*j}J)5݈q֌Ru.DA_`jt4r{auNV+{1("y3[jUc=٣h|al0#M`af<>ӵq?h:'⚱Jdή:];KUp((8 ڌH"ȉX69NAѕvgU7xY4w'j)+۸̘7UM!*%vڼV.hd6ԟfJE]#'7Hѿ XGM ʳYΒnSyʙt`٭a؋ɲ ,gq ) hj22b[ (㼻Xס|։ja}TIIx<فG%Sft\U6Ao>N`)0jiҧ"!ZC0,6qz8/*gذכ!:Di#qίID>!_t7=~UNJ]=X ~miq( }W~`nf[PnGbtL3<F ] #zl7 Lc'c6{WhSe|"W*ʟ2}NQ-@Efq"]2 h Ivr8W pF44]Ae7Ocv2$]>Dž,z6W6﫹>'-EJ?UH=˕i`bpS=)_ϲI&W1 Ey'nzsJ\޸ \.#qZ5iR9͢B-S;DYksSOa+phקcR֣ku:La9vR!_P6 !sD>[ڣ ",=רݥ%_spwqn{BjE#Bд(UxU}4m/eYC^%sH- ^eO&]VKg] I |2Hxbz0$3\ $y)Pf-{YIqLg=stf c#cXGf S?FXrz1;hv>49hwZoFmĝۨ}I\NAvF)y=j܋V`' 0|b,Y&Oq ,\ 3)Ocuys&kx"4@dש'k7^e &2ehW.&d7 oF+u+̘z}<;s+_iZh7ǥE:㹶gzk RAG2pN>V  *-?CcBx~nv'֣25E$Hiw1W+DF׉,BLC9%krU!a*}t6KWI\ ,I"udc0'}k/d,]=-,u(ym'dvFM:!_).!J3Fy$dW-[̏=fl^ *]>gnP<15-aVq'k?*yKh,ɪG'RJgGEZ+9| 0;37}Hٜ0SJs`R_ :$ezga`wbe"ZxemsErx㐱/P&IZ5WjoL>ԫc2D3sGhRf{_gw/ݏ[e;lN}axqB(Q%@vtj~FJ&8Mu+ ي?Qطq4m`T"3C =zD7?s}FYD-BRAM}c-Mwie\ߧՅ=? AdYM)I2e[gvzgщ[pвxL?" hTO.]2T֑ю4S("1A9c-"r).x~sN3:'E;?~/OHZۼKmuܓJ$h8'؄Mӎ} X/VݡEXns IuJZ \'SkP CIZ~Kȵ6@8Pr<J:QO Zem<}9ʐpru _hƷ,Y*:Ńr$ULr[/Os- k/ }l0D#P I #$Q179Q7ݽDuSs[?GƾVt(*Rگbc]T`^ME̬E0NVUU4ex.XuN k,5DptKzvZ5*-WS3j%tczkB IU󃞭^v}b bŶpV1]VU{DPAq3 L 6l`eyKQi.xtFkӆ˝&Y0,9Y1UsHS0`W5" m.N 96m( 6Z'!Fw۝Dhlf!ޅ,nKPmt&Z9D>2֔-'|ڬS?osc":];xtazYOƚ}6N]RߊиŧT{%ts&Z:xBq@>U՛b2>NS:C}y\KB+LB`=ɧ5=–h+׈^7l%GG \A=ࠧj(^sON#lִK5%,1 BER_W Џ9Yi$ Z:fHuf dĨ|o}UVT,>LXJܶm,xP̙[@UXZWS&ڱ; s) +$KoE뛪'}}U}OC>fQ%\u$0%_] ^0}K2P#q0usKE=YСÕ2ב붸o&o>Ӫ\rYhn$1vݔLߕ SgV.Rm"ڮ.p֦$]B[F5GWj;-CU((۬ 0xݍ`2?L<꽵Ug #Ǫ)IG_jz@`2Du^YT4.bg}ɉ4)qWޘ S(cEM\f\JҨ4޽PL8er- Wة0Tفcr!kabv{b&sNce ( ( n空e&l@E Py1Z옌wŏ]SQ_58xkLE/X}B3[F[vP/vPZadcbzB[:/Z)*5l;mj3EIӿU"W!5D?¸Eⵋ%i`h!GPг~ݦj6)5YrV0cGAٷ+4ث[9%+j/hco2"ry3 OsδHƉ$' $E?J>;gjUAMi:F,rQeieٯouWkaͪV03b"7CV&$lr9pY&[c $qRlqR S{ :u#s=ݘ[@l. d>PQ>4P#5Yr>dA[ d;L@H)l2*HsP/n:dLkhWS8,CjʓhLG|uՊYo4sT%1 ~62lA0xm@l5pYø 3y@-.O1W9[:0O~}] -rM*ћ@vfs &9 =κǕWdگ˻1#y?<%!nҘwwP;8Gs_?aQMZVFz#rjQ'=Cu׬w5y6=#6Eђo}p\iM$Aۺ|dIXC|.:_q(| r7uH[tpv hxWz%yH 8 }p]\Jrw7kQϡ!qv)[Glz,3R)e.&h*OW$\Q_b*=@Qu'9p>uŲ-]nK1B7ҫ8-: +dÚC aYhA#$*@ƹv..TWB!֟TZ`ޚW8kg<,]!oz=,iG$}Z)r|yrT-: [@3BQEX.PGl"5ߧ3#5yGɰ;BEv߿?5-h1'|w}Gzj&ݲ~lѢ%+pӐh|zRpLƮ3n&ɽ wzJ8ʳ *'mvt˫ }<5v=vK xp;)̩SM U_$D[bUp3o"*nfwFJ0mı*p[RլTf{?[2;VL$J* ͆?eDQd"TX.'4Oꃏ;;6ާ85/:Sog,E\ɝIQ&IICfysma\W2jfR. JDA+v G{.rZzv"B$n(k21~,H/2e7 o\N.lvhQK<4VP N^ ٜL?eG5hS;G}r9 БS2 j>)#%XڟO:es<O<-ԟvDء=Uɼ~mz[j]b~cT*ûlRa6[t]6yafYmyئTh޽ù # o%ua^SԛƸy{bRlfw pyE`JÃF݇lѣ۽ɕ&xD;K{Z#;CCxuHCA1"$֚GdKI CEV&zǓ&G|s<i:bрnBlb;B `b J_n5v0Wq l ,u]ڵ0ǽ [4ғ}ThGjYੲ1Ç5x!6Lu2 8trQb}[?w,HՔ,{4nSnH ̱ D92BDӞmOhQ _O N=kwE$A@14w>ECZ$1j y-UgxhΖ.`MW&5$n/&1J>\aQͿ!"恘3nM58 8ȋپů73s4IDvbÕ7JDr·fF)/LCLn^pB <_V_Twg9g0A(>fn40fssFF!4t % FR!|&PoU*\*u-8?|ލlo栽)#Lp׫b̞z#=N"Q2ɴ[v9S_ ZijDø:]o)hs +ԙCʮ*˅Bf! ›t7-ϱ㐢Mfǐ˟)z\(:ǪޝAa9SwNKM˪WЈ>Ń?|&”p #8- M+H~Y+s;E 3+>Ɏ.lV_ڒ5+-u1ɜzwu=4>m_*Kf%^h~*mD q/VeZԇy/ J5q=ΤlZhRLŠ8'RC ]qHek&nJlr-@/]omd5yةd~2FV.X3 lIqݻ*c7MpBڞ9ຽGLF5X7J`W_ ?34t,{rph3gm?iS},#Qoƺtc׊Ц.b*8A'Q… fׄ#XD:H=v!KӾBڹ==%zSOA7fWg&ZHAL[|$=mrj 9^#?w<2&/4䙍j.xD}BOj2ǡ=v5'l_%#Uo+cC䓂YLα ě[|"Lrƴug|d&ucJ==?r2j L3laB"yi ѫclq_.lĥ*%F-7+#nr0zQ˾Cme?[8Rpw'=ɔ1?/P,8cl{3f =ڝ4^> R5ǧ ݲk-Etx0H/?e;:\McTAϙ}4]}wYn}kmq}K#/=`=]õ7eeGHro~KpUӘWs;ZЫրE$ޱkQSl>ؠV1N_Cg.%F<2{IVEjFWޤlI^2`!=> &#$8 Y3z(1O*P4OYk/aHV\A6b؊|`TUB>7, ppe4YWE;Ip^+BunP-&EH]v]ݭ.!aaK=3J~Ԋp;-crElLP63&@9̸leCV2@zN&/$/r[8 ZVףr5CƳTn7쪁z1&v>gH%Fc;}GzߨUب 8 O)O]}kŒQ csw@ӓe:g}ӻĄ(LMnՏFíu܃-}6fYJ]Pn1<ӂa,u}>CU?8+U} 7 D'AsMNKoHSZq$f|4cT#h2{ <@ J6,=$DUy]0zio6F^uv4v *eZ8Ce-[|J (6yK!].h2І6 fĈMwWP |vo춻&{^g|)UR捋4diy^Vn/shމOp|d*r]yaqP[L[QyW\W$|]봓y%&ɍ /lziAǹlLqFVN V|0=,>Ӊ ɹ̞-/P;}^/ܢ7<͝]l`]h7P(,xO oD!賸e'(rkHShW;TSQLsC *N]{YO I8끋EϜ,h\G<"ǙhgV^)`B{Faemv;/IG“j\ZL~ߟ|]} kCV=OSe(e]O43bBKs"*|Z k)K$@E s݁!? KRHqƩgV.yiâi+[¿n >-ŜP OyP17zQH43la jzt".j[;IUU~v5|)`5BmޅЂ$>rg9>KbJ0ך϶/^& A}YL CYnG|ܾlZ(A!E/h޼ڷR&YUԞ}|<~ι7q+FOOsHQ9N=kuJAac@pRŐ~YؔRdiV' :5KbhV#Fd}[p21^յȧ-8"EXjw Nw˾. }*¼~m;]戤ۇݠܿa W86.Vb\`WrљbewY7}4_G1Ryd5ОMrҍ%\ߏ")RA~`$=x L)ںZ7JdJA}(t;7͝i!c:yjF·5hE̟<FH HF4e]vRc$9@rܯ^ O aوfZ\zII.Gچ3(pk Tkwyou;KC2o8ٗyٞᦽD.1k%ǹ)G]0I )o]e@YQg @7#ތ hϷƆ=jj}A˼=tǏL*N)ZNIVH?]Ua2}͈ǿ鋅ЪW[T^-0ա\3s>tջs魪of{/?2`_ g^4jfl_P;L"l{@s:6GuU-L?:7V!Q;0 !&sī&ﵧgP쟥ntNߤv[ߤtNyF7c7qð^$BV5[׻ںca'j3R W%`x=W~_*uxx K<iGO@\@!}%QѡHc0(cI,n|5<,2k"Jy'!a~U>wY_=OOd'{Akȗs.2O"({5xU/AA"PT5?mTa* [aF'xN'劘hCH;c|I{v)O5'a=u> ~"8[v1Z`4ncH#嗉1!S9#`׋\w# mv⊻ eL˴:X=|7(rm\M/l'V9[WqaD_Zo.ZqM`2ԅ@F bz&zC|%g@NlXqb\YxC?;1U y;"|RrFKa}P*8˜~]sq;IOaM0.5F6{ E9x+jgۡ*1py'>exfguBQ2mY?xVQ,;0E!&`9k:wJ$M)ʈ: NaCh%/ .2] ,~^]f :2|}42o7vtzM`~RߐݥcUNWq& &=ygeBi67}Vx05a9xkex[t_@%SqPD'3]Yݱt(oL"gXG#G>?hmsvKZ-, u,1F*Z^T!][zw@6xl1de\wdr; bV!?ĴMW30v`pX;Ǽ8)@HµPˡ9# \Zo~;۱a G0kX4\qt !'TWjpYY4ik")uw :ki9hOKh35.z#JA=. >\Bwd_z'oTO]Fݢ:p&ݏgyHj[.o *|wn#zX9[Z, WԨ4ˋ( MG|MB$:!h"qy*_94ʤ<ÁfׇP[ \?Ek̻p׉JeZ),! 7gRX:G,_IgG޻ࡳ%eQ*رHT:Z&*=t/ co; >In\5(ZBնЖ&t'$EE"ҭ9f \-ȇ O\Ꮬ ʹ1<O,/<uS!e#GMiMc Zz(!ظAT7g2Wf cXoPQgY !ZW7nS].O3+]XCꋋ=)hk9DVd<:ڰ^ʷӞ,vl(2kD8t IHc.px.*=IJmd^4(c Klr) P=Il#n1y{was">֎nCjV[xO UW*FIH/H9:uU2۫) 6ݶXpInź1RFIak(yw fcLqd7t`Nj+3ǒ%DkY<+BիGKl¨<nU&@^<3u NNT4ZcC~_ߘ|Q?Od]h44c*2e<8Wǭ]<#{Jq*WP-2kv+6q;/WaH&Ěo7ZM]zlg95~^מ6| e2>wAq%A(c ;Jcfmf|ѣK[5Z5Y!0){d.Ql|ٙȄI*p;GvXyBtM1t,WF$U5yʠO-6".ԍor`\⤎١LAfcUQ*o"2.SkvL \ѓQ;8?X뙘xꐡd&Hd {c2e.rX\P(G1D vk@,%>×H:G_S0=^ yzS eIVf A@B#crw_AP<jԓϕ $ y 59E/BRjN&/f '>[ R<$Lh2vuq&YlڶQZo2Y{.[xϩx"dT~H 6U|栤`x7nj7E~ ^$Y'uۢy\GI:bıu( |aD4!1T3+/HB&w/G뭱$PQi#ug`zh臛5:0臉C7nfU1%uZ%-ُ<"F^_^\A5cZOV'/|S&1sV&;_dIcYUQ%NQd\W}>8n'))҂=]+b݇kxSV-Hdv?HD$N%p4b*}co(w7첪,cP9HQl5 )b *M{^?⧮RqUB;\,NsdeJ'&EZ9!9WݿƱV]DO.ڼ:Y LWA)~1Dm(|BF=ۭ"=#.!1I6މ Va]Ձb{m199 :SǶU\ags'pJ>lyⒷ*–iVL4%>32S=[=[n>g 1IEu)̤ϖ^*ovJZMƃieoiK$&*LθL1YTͶWvܮ2x|#XncwΨԋ9nH($=_oVc졬T'8 evFi}*5z!ͬE:Q"G1n]8-2{klsތ?Qs:biIǒRa,Wy !2cCY vD9`vijCxƦe>^>th8׌r3s"9v6yJB;Oq9~ee+h;ʆ^*@+iQl[ZVMNNqG~Gυ LD]5v/N+I-ܔf9Z2%([4[-vv2ACFc&R=UH(e&PCcsYu66C4xnNZǹ#*\wח>w4~jqѺsvuێ;ga)h=S6>y>vXі~wlGpZ4v̤B[ڄrO|4c鬁i4(l]V1n0fh~Š6**n%nLܒw8j^5jW{Nۤj nԇ6K:hj< |H8'mڹ;;6o׿WldĚ [^f M[\ΫvfX~ 2M>6Q}x@mwww-0>?K=yL&[mPjfl7pu_۞V0xL.}!~*yQ%,.4Gő5ڴ$Hx8cYW,i(S~/Rm'VPQp"Ͼ3- ˌoiaP8p1?ΐz,If֭VEkɧE|{0yb.'FT}TC#Q =LE2 .=6Ǹƃ|N71OipjNIע:3O~ܬ ZGttRsx 71@ABcʰ$v=> 4tٍՑ]|g:G{Wkݒf:݊";dA!ɣk͇\RC!h6vU%SnW*k6, *s#9mf"Tf!z5RM qx2[PˢH9#<𵬹;eiˊ0,L;ԭ>lE$ol+'xD+uCV|_|pȔ'ڗMw+{}?1@Zl" UK>V:mk|v:c73xͯRIdxU^BOXB;[Cl5KĽ( RE2A6&:/<;lx <Ʀϡ3pF=Ʌ) V%Ԇ?p83 rS9DSkD`E$ kE ­#%ǀ iqJkmV0ߦ$nwݓ#(tC{*@w2x2|hW=dL[z2i[盅?2>8ؤa׻New?C >nxvQ!-2C i hhE8ڭ !e"ǩ`tXQxUGƿS,9kÈ^mW\487 `OSbdF5 ak*i/E=_(?LÎ$+XO3 9(dή J ݅fX%隹x}xׯeDRB*.?UP|ꂠ~,&I"0gWȃ,5 }#_w]?$+t4i q(Ogen4yd$!VFgGmf+'#n Yr7+HqQXw@b2~av~\E UMg$` .>fFO론lϼqJӘ!+&/֒d7!SuJp%DfVęK-rЬͱ4y57H.]55oorE.iJXVPCsq VB1dޡZx+HƸ?2|.X Wх#ꬱ:Jh>Ј*Pz5?M Gvy—ބ$SbgY,za{qt@NzJkYӗdʬz h27 ‚I Ř:jSQ9dCp>ZѪnFr|tRPj8+=%Gx54ǘ?u`fS*]HC._8짞݊ dkDZU$HݳHVK1D!5عcb`Q4ʱAc(En^Ew޸y=IBIø.h~#בBxvoI5 X^ApB 6yWttafQa%߃H(D煽XMMu>'_ otj(ɈC>%4S~"A'Q,Ȇj{0*K=cSI'._m c1y2 wx;k䂏u vk{t9/X5qʧmIn9=|@ESt,Uڌ$R_ չ> F*{fLzsS`9cpEѓucIx`sgDtTUL/دo4ZU =Q5Ģ")0b*Nw!D,!C[KtG4b]7)>l` S5l-V䌇Km-+(SpM>{BV1ơux/̬Bvq-pm΀sF6zv+rngUZ#e${HjiӸ'ITY 3* ~m A5{1}aS rك",a^8c7Rd)"׽VDhM "c;lc~i58>9$};i٦DEپqEQ'to3n% R15E*ƫ@CQ*"ݱ,z֠#;a zI8"$Y%ȚܧU0iT&Kz11?pE &|?&\P(ݗBx[1pvS5MN۲M Nt#]ޮp ùt@fvU N]r,/ѫP쏵M`m~AQw^)4ݽDi;3 8tjyU9Y[ҟI}fmC8:gXvO"B] L4"j' n ʔc7Nz}z`xž|ll{cƃEۣz(rdNfڎkՙq;ܣvTMu#&)TRTś^ב1]-"Ҷ&%qc1̌n8YT)pruWӀMXAJɻ6;el̈IQn&0qux^sS78DJ +(oEpVijNrMvX ?CЀ}@'Dz>d y$5ksjJ#<$Cl/'u| /ȐQh备Bl?Y:6* 3I?dJl\f[Ȧc151\ء=) pgUU W6?ǵ~t_Vړ^/ր%u^'a+NpX w(u9h$߬^gH^74z6 bʡh\`( 钣`G8oaFT^J`a=#󕥟=em VLb?59]ܿOOn^ZL`3S6붹ꏡsn{ 6G/ذ ZS;]}ϭ?Bx/j/Yg j̛`ɭy 1n=Qvv=^FmTCFw@SP|,;%o!tv7l3ƋUg7-^Yo:#-8.:1:WRβgp꽯4P6}b(gj!@2]?PnsA:t5CqSv@ Z؇Sl nU3!Å 2ՠZY@c|VV&/]Gۨc=#7}1~{id `V'c=|: (+s&.') MdGi3D؂0@"V\B("1dQ8f'ᥚ:A&{~O/YaCy\B%rPzO!niYU _It4IUܢ;'e/q1c$l@9 "=SP qO<~I#R͂P~YR,, {#[F{Wlo®d%jq-daM6 fraxjx.l 1eyd|0|}e3Y=ݼo_]Lh5HKyP9޾0#RЊ7܃;9)T;Cj+Gq|0 <'(RvHU'6J)(/XVt7 {U3 _"ss#v( ݾ0Džb߬-y~޾ nfx(sF-j~vHz{fa֠C #e/Ef4?RʑʡpH ?t|*8˂rY=WZ4b`B$u-fq N.@v`ԇrW W1sXl1t,;OFk{UM@5j+e+ ɲyBnv1=3JF_{p4=\~ o<<%5LqYtA4~lHcFf.p']oz-dA0GSni9=iEދF,2+rHBe/ ji>f:)z@8ƅ"SnGλr*]5vm=/ AK84!oG02b[sW5z`G P;K0~Ysˑ+WFQS15tcNRIٲelWF>Vpgjs_>Ym-B3GnN[1h%ev!j_+XGDzvhi5֟-lJIt\sSpf4o@;d {,,.OUDыrDICvh@FPbPg7w4Uq#@|rFFM{NA/RRM oVWQ/޺k2za pU[#n=ԃ5? {Rڮ?e{?M RUF,-F1;lmϳWۧkph4Y4e]>ԳC /v}eIN͑H8\wEL(Ϣf,|kD"(αHw~CNIWMܠ-\ [h -qHTJS#>; !78^ק9'E{z& GJBL钜ox7wdem ;MiM4M:f9.f5q{ 1NDz06pz$6ʹU GH(LHc P=cZD: 1fҤpY]!%xK`Z!{~wCӁ/Ө:H&zJm,RWgOMmp<]GB#:um*kxֳL"ɯ1;뻌d٬{ .9L.vmpYRD&?ܱPWJ ǎmU˹"wdLm6|MrUpr7VUUC3U3`j&|5r:t-vu 7qfTEo.%K&VC>zC)+e ,! 5 Ԕ /0/\Yىz쵹^Jn]uu$>@0T+(0d.N69d&dXMdM<+:XxW {6=*C|i75_QUν Ul$z- <\KCϛY𤾐YU o>!@\Wz9D_뒲UWkUx^A -,I,i膉%Ʊ#_ y+2Pl7ym; .[4",7[x{bmgz'˅FO dCr_ d`f$7( mq8—TYՂ@* \2\9NAuA)ǫaÖcg 6HɕtbnJ6/ ck[@Zh lo{S:D>+?TхcSnD|qLmZAq/hԤYi}dW>4G§l+dNLvq 9 ySPLU-J'F]$ `*6\:M;8sx<yj>C:%)E̫\4@Yf&01R7SG+79xsu`r|(}i T`׷ VE_ w2>7xPnйOCCzIR/<iYy)oہd\G$'h>s"F^ ^D#|1 4v_**mF#[(VdySt0r;Kx]F6>v1 866 i;Т.Mi[)Ꜽ˫8ye֎+$*(fbU*ZLi-Ow !JkjY*Xނ˱=HoUM`b~i_^~$Gӛ^{D8;PS0qsmxu|_}Iz(U ɴYS=4t}RmsFVr8\ꪱ۶;d@P3,Q)Cf/b'Rp9a?&|cF 2jSܑMV RkJ<%h_qzL {c K .qdۼԸׇb͡gGO1#݀}لx6Ĕo+ڏ HCr̼m_|0/J%FH!4wMHH uB*'xZӊC*Zy?w__2NM2;s.SiQ*m0y(EYHsB, gyYXczI :R^،Trw-R~hъYχ+ǂF;`;S0फV9mJ޾'q.=XขeSMsih^Tp}̓OyL~}K.E%.3Θf(pTK'gk%%\C hDi rvۺ$Zklg_:Sʼݤ\vN\Ns./i)O'yXжpCKLZA8P>]'בRPY0]'%qG21q: 䰹Td]Rf7gS فw E3[Tq݇[f_P~567E2]vbF7^p(А~g߼dDvKH6Q PlEřЌ쮠-%ܴ& N9}aӤ 7+n6ܗ[M^SyؾPb b; 7[qa7I/מ]\͉.Z";E,޲K P) ^Ǵ:52$~H1f/a!:E5 6HHCq4*DEd?)I[A!x)9t} ͢`= >@JLほ䶩ÉI2v/nMRe845(l%W7'n~AG8+uaC$'qv|9(f\.ԓ@< iFf !WNJ|-k<Ç^0 FOuE o!}Ls)\\*!Qu$K GJr[ԹNY(S 4܉Bu.\5$c5Rsڭ7zD}7۱'d(ˆVڪϬ"9fsX_nx.kxg{M0s K l#CJcLM{} "TM#~|d&!?XJ䒆ǫK~%[;Je_ׅmг){Aι#Rt<]M6 WnS%Vd;S/ ٘GN^xjxڂ2'n=>E+Y·єiDO8N"֩,^s}.K[8w6ֵ׽ ݰw]޺P*tʓ1(LzGt-EI;VMvt7L7:yVېt BUu/hczW(= e[g֯_yT'<⽘NMBE.'Zm̥H<<@OOyWsȎ QLңŮQp SOny,$uXZhh7/O1"*ԏxs啮uڋ?e3np PCΞ<9[Mwx 5ʍuiQ|@XhȭBLDБ(Ez†[ 9jGN\&)66.lMVTp Q`/XSum1=Ճ [@?\<qt9\h}UN+Urkq ]͈8;JF`7ʱuP@w5u)dn7`,IluijgMttVMffOCH ?%/cZU;Cp蟰a8%B)OGT{Y9t6X IaUp=y9]7ɉ݆x}RY .Nhf"`wA"NݔW 倞lRԤ~ u_i)5 .:EBmzW)^~eR+A@-3U5{~_52pgR|9_A_(a&FIJ3b~5Ju0+=5G&IycY-E~UkÕ6K<ͰfڃKM'N[5ed0ͽ.0 +My<Ɠ%/ og h98%1Z*0qR e/,pݙ&u%|* @qʩv+w7"w"A*k#u밭Wm}6g(w?cی9>d\̇Mvz=FT+2IaHέ4*5;q@J5:LY[r`Ǭ8mIjJ3_4W9lB_BdC<-+]𗦏L*ny}RtNeYEi\C!^#1Q{nHyE+2T[;Я5%0@G.g&&cYJSѾ*$U.';or%_[ rHC99@sxҔ2 #Pw~#>6i1Wb }FSR: 郇xbi|yVw6y?joxzꅭ8HN׽z}.Uc&o G+Ϊjr5)y%`]#7f\QUUڤE%\U9, |Q967 HduPH(񘲕> MDy*S$B3  fs)O?pѹ`jC/j)&Tϵ.2h`"uZj\:_` ^"y[SΈQR8Rl$  gR{4b,_(jn$_NXJ཮,8m4G>&WA9jkmWO 0y跀hӑ}@vއ.B{_>ԩD|KU|#<=zXFB3{ mmc3㯉ٳWc󱁜ƝVZk3HHrjgN|JYF~M̬zJO_6]lO{Re`;C3+56rlui5ʽa~uMi$`W}kIg Pral0yD,<=nVŵVJec][# tE)2gLˤ乸04Tzf{nq87ăޚu~"]Ѐju0ޖG! a'zۏɥ0$ i|3 @-"06"PD{FjB%=Fj[;Mlۿq)'N>-;Lne[\\2⸬x1|>Nx={3][(nۦp3kǸʊDookihwQdp]2{IeC2;' i=ybx-t+ m.nܿHix9ZԬj4JNMxܑxze.ɤ0:&56 ?آĔ,#j7UKo:CnW ܏2bc3\ O!;ة2/,2r[$jB )Ĉn2HbrHy##[vYזU\\r%V%mJ]_ W{ggˬ) v%g󄇴B(z ~ {x~R}\[@fX-Lm%jO]jt =v? p's,9F4?V,=c!й՗IT.[?_>=ttT5 [1SUe/?Lg|%{5\pe,i۪3;*>NS7 B6+7z]ňB.^]@|*r\v*i#Ivgy@A*q_g$IA{'9Zbd 0[gPͷPk~)n\'PkIʴa؄ gTAɑ ݨ*8kypW[651O9(k$%wZC2s& =[Ӽ浝%BBϏA!GÏų>5PKx`7Ug&"ZsAQ{XEJczxa{epG>winN]~W TLcЖW!Ոf&zC\I5/f*d_L"]Zo6؞ T%=}Jsc6PSk >OP( eu0u~(. $܊F j;3̒f#:mW.Y\Nڝ` i}gŭ):E\zwOnW>0:dYv[- R׬}˪#pyWHUSW܆ ڷ(u7 :4JQn&X:v8#rbẒ:j!z?7Ihu1[[j47 ւ#/OsF5hY%mH'ZQ"q}(pzkD#ȳEqG|214"̳?h^Ly(*Zuzۙ޿&c55{fP-1\3cf*yϫYOlwF![\lg[h y%:WӬyp1InJ 6>mp70)u+$MgrEqҤzEc檪AK;F=%l ! kI DXT?=i֢'P)_iNvV9pPgſTeF') ]O)MtJeN3h~uuUpm8}`rCOJHQbhVWd $c􇶞9`QL(]*kHH^w >! ӣ";֝_8J"2i!d1d- Ύ0-{~D`.wOSD8≶jB:bTg[:XGZ>Ku[_AIdɡ8`#Yap\jLsmbYHS6\8n9HrY8U%gtgoƧՔ{;2]!K)INQK\TxU7 QٷݪoYodY{bѧkVN6RS'~xp?_Zhm2n{@ d)#u ksW}f_IkLW:ZĀ3yx^)vWC(':_*..R)#iUlmSV9y,f#KT޴\Fxd4b`sQ|<ݭ`H<yc\ubq:|.>uBt$ܵ4rE;z%g ӏ5 ŏWwdml,gvG,oFc:!lMɈl !xiWF o *u/9MBVΣ\Q6\&p-!i`8>&20tp!NYDM7m^WbK0i>n( yfؓȏ¤lmG|BA2WJ#];ʿ3Si&ף_m1'PSƈ6éP%XFA @vELy}閻Wc[Pp{t4K7( ]$yJ2T)y̓#qip<.t+7XfmA_ OF!rnrw}1J$Q?PCRten>~'aYpDw){ذIx@&E &*3 ' ycO>=v 95^Sc&"ߓM;$,1뉯3aM5t5 6mn{dIޢs>Q&ptO9Yez Pەsm4IKHR&_Y"wKn2 Oά]^uq%,VZ^ܒH^ϺpCo]YrKqcW2/5x+V.Ez֎N !\\672*TyÈq>3eQ}ܗaši%&VWbUgJVBRm1$v{+*u)嵙Ҽ[=?,BBYKpQ:.>0iOa0*ni/CZ!`|miܿ:h1pH>3wT6,=m5r5rln`f]bek:|w2mcv1vM4ڃKKU1}AV,U^qR; _~NA9:2-<-{`@h'qhdθkD0Q~T:iBP[5b*O>>`u ~}WO(MS%^+˔{kdA1d*u'"0 9E2MMWphFů 9txP'L)mnas7e[d}3GзfS+t^}nl$MM%]}A,g`_)wgKS`Z~J,3( BnuhQEYU27:,y[gDџ 8K>1qJ$H/P3,b |SZ%ۏ,w 0F~_BH(T?-=͙ߓ؉5_p+:9. -Z|pd?ʀќ)=21c?uN9C%"CHt>]B`,3DS9 gޜ;K٬W &oFa|;⦔\;[Ij1"ic٨+;CvT6eZtPzY}\)N2`({tK*סy{k#VTzddwsKs@k/Uhźݛfuwgn޳-InLYBfWo}KJ,|/+0g?cr+"(+ߘ&\ev%o{}̫=Y3Cřֺ5$ f]S:qZopجnԣpUŲ ~^&hJ] k7~Ҟs|ńzwx_5v[3- DzO5œf[oc ѡ\`Ej6t*F4WIHƲOA1>`RR- $^`2T,[&iGNTXt-ztINDMp!#)C\]Z$ c"W* ._d8ҀP-(Bk֯GS…tGL}cd>tɚm-!->3dJkg ngM3b!T;M+ WN_k0퀢8as#ZK)% $() F%&|lb#Rgj Y_gm\(huGW$3AALz\ܒ Ɍc_ؖfRZǡ+úv'SYmVzKsl2L5 _Ay3v`BǶd͵tEY* d}r7̂j̪W +j=_gE_/2X@ṷRՋg!HaݧFw괍g/l;MI |sy.y笞m{Tˣ~0| V*v+v j҄N^MZmDCAqtܨUSUԓ%bE7璙=Cq5y41dI7zEpZҀ7Z:g}M1ӈ2zR_b#\ǃEE*oqkP^d#Y,ؘ"GE9#lJ ]vbʁ|<1Tٺ39Y`9sw.DN)3ׅ\ʹ4ތ飧! N +~ch'A Ǔ{ Dy|ʛMtNSn C3=2S6GT!pۧlִsG ܺ#f>tI{vPIVWc4 ϒMs2 2WN|d#Z&^aH0D0F+xA#Oo]LȂ|5}CJ4--IS,4 ?u{y'r=1%bfVs|Ct疈\uӚOp$<$uoAj.W ms'T_MVQeqn,&^joˬ? q@JjgO,79%SFSOx-$DQTקlj"5$bxױECm.Dbk̝.z&(] 7klUv# G?]}6"A|&XEb;"N$Ly]8I^[{{͐jq"i9 #ڈJEYt>Q=1}EAi5KrExOUW;WGJT~R$NO|&Ao} 1˯DyP!Mζ_G^Ȅ]cDko 5"Y& t@lw<=k2&AL~N;qI^{ExIu9lS1&W¶Gp.<%&Px%%e+qLǕaX-O;r2ǔH4[\b畫N.SbDS,Cv.UB[e>B'6%ڒ!z{FJ9<4wcp֐Cs)Xۚȳ]d;b& 4Z18' yi':atLؓ&{|uXzGNm|l˩'DzH~xX&cK&OYCqaef)yտ/ם ?8Lust)u@!Dʡͪ,4T=R)-]!`Ck6J3i:q[bժ)7{q,%k%+w5z_;%Dě*[t[$a<ʹfQ*X~RF\8xV})֫,5*2`sWepG>RJ~D\W:4tSyo"m{(R#4<miH,9YJUgACMA#%NJÑ"6Jp\!*cKBOId׭\ֲJ_?#rKԹ䩐^/miOf6vߪmݓ`ѨP.GS%%?tVn7!g* ;]ݑ!Qi5s BX 9D%PPt;0fG8`PJ`,HXgn~.#{ uN־=h<l'BC7 [z WC`}ȷ<%5[csa1;\VΑAM9֛HsUd0,^O|08s *݊,@&vNy]ƠZ6?kd q}ju͘5||JO a¬r?[J~]]6(lt)KMwXq{팍 (tWQz$;~}mXnH(%erp-Q1`71WƩ0< jr 6:Pz uHK!{Gfx~RaVrӡ3)㐢C Awx,ۄjRdqX˛?_K+߈Wq=xY~"s0__(K)bu<7Pp''U_8A,8 f5e4k?{ 5KeH`mNAږZgv*w)sr঴P>k )iA~=X$wOgd0` jYc0oZ0ܣrMYAh#nП1[!%j O:b|2h}upcx&Bd[⛂TXv0$BԔHɌ`{Cjr˧T05A:mY)NI =)<_Ͼc躻 `:tS֩~#`7KroIizM3TwJԢpoleZ"%pE~ۛPSq;ʂؚNɵQ ׽:krG̟?r4`մzG&sOR#d].#7y1L,ZigUH?[ ̠bg`a#0gՓc>Aީ%93#^v3~F, 10 柶/dHI3AwVGe 넉}}my9+5%2ӆ0C"D+%ICta/m۪!ū3aשSyHļwyzr~sHE<fF,x{6\{g]F{EYIIG!iM eN!,^3p@| { IՍ0EO@BO:VOwQM]d 7\2N|Tc?\gI:0|-tyRW ȶtY~[Ou<().[ )Hv\3 s3v0tu =R6|/>t#%Ãg,k:= l#3?X`:}~ <M:ѳ A7Hyu;`Za9E-C ûfb ]]FC yy)U'ɝ O}ᬁuXF(;]c~y\wԻwo$9SG& vdPbl3&b H6S## :s6x}2,9wo 'l;¶ $f"ca}a_Weiׯua[+Jw55U7RojYN76D #Άu=liHGof@Jo`M֦}:؇w0P*k.V0zIf CMAН Px31ڒ}i])髶Dn">G HfwtpܻAI1rNGXwZhG@Ƭv7UۇT;nĴYUbƀЎLpXtӲYtU#sM>XINܤ'pC%H(V1c`2y}fߐnvti[u&>'C{îڞނq+mرtNuEl&) z)7xOvN5#!73 ;6̃"63/%b)_Wt ro;Vѻm6R7cYr#ԬΌVJ>C$lΗ55lyLMmU!}`*FnCOjMOv#b瓅8Y?0W:[~9dCk]#d\P*auǿ݅:=FX}%puǒM?76.Lwienz;aA~|݈g>DR@|;^¢ҎC9i|Gs'f]5Fz#VYпie?VǝH9R8b%yh& ݡF_؍UPTӠtiˠ&`G͜q63R>I̳]yfx`*Y!ޓ51< U⫎ yNսPhϽLˇ%im&siCwIwDgRe } x LiJr@FйVK_.T~fd@ԊYE8N#fX!q4m1,&D xg:T9@N$(cxAGlwKۨR)X]*=\d2M7͎P|miٍV C/:=YU1h5du!;p^ۛ XH6+jXf+@$!_݋%pyӾkۡVubwHt6Z^?9rv#|F1j| =oM2Ы4KI`xYܝ]] 7\p.BMs#m)8958{EvͰaggJ1Am'uo;ru_t`!FIWn.8:ZT+{z>iyvs.y_T[~czCymќ;c-ބhCI`s-ze,^Le@'~֋_z8vD@0hԙ\F_eW<llY{GTgy ې=x[LIꕵjߐp, 1DY}g#LEuC鐚 8ȴfƨ,Y9r^rF 8S-eU^'+MJg8ҔD~8@ry{E:69\jsp'0gpN .wT=b~ ZJO(ILC dgTfecv8mb$;%/MU uz{F07ZB#tt4Bf[k2 75vȣDnKCݛ\}A3iG$Remi9)/Gr9ḗ{'WegҾ9mofL* ~:[u_M$m|+F]9%NGqY̴CNe'Aim0رz6m *wnV4/6[qt꾟 '#7k~Crexwq2k:-blx,Ku؝ b]Oq>],9-_bqfs#˲Cs:.ԫV5e}oN|=I]nv=|){տNLg3ܥXkAgUEDaiAh^į;5=1FqbgCFI)Ȣ򝟄2J[}390̺DþI=3< ۽ .ĥ;Qv^7=RI{kLyE[bp1"^\g"'[Rh^]CC&6\GcjXo# xp0Wor0רʋBl:H$dH=4v@ո#ϧhGtTAS)wf&l-/T)7TUE/sk?vנ>?yv=uN?L×vg)멂Sa>9l6RpgO42KJ-ܹ^pNK>.J-XI"dj>;m2g?DfYzޔ䠒rV0nlg)} Ϡ5 HH_t%ԧ|[f*Vcϒ©7iƽI1']tS}բL-im|Ź$Od*ζ^6b*٧ge΋T >㜜*7/צeٝ X{G~sj8XxMjg?G>x}iERY[TBMhIaa6G'Xpz_JZ/V4@[i`/A$jmG{y"*0J^ @-D19>VteG׉R >"!(i.7|Ȕ]qd#^5E=ht1\C:դ ' []yaLT8>Ql[Qt8`bh"CEړW>H vO5- n]`CuX H :?;@g`^CF\XO%fig:4^3ͫʡLxu4yWm8jlj59ڢCb4u ׆Pp0!F4yKEjtY#_AaČV >#ߛAT:d< aYDQ#wuՂ|9E_EuE>0_ON q" ~tDK+[[YQoJS.fƞ:vߙԔz)+(ގ\ ftxߗ+Eyp{#H(5mdW7WwFX؂C{bȵN|PsmXNLz(|"e2 ^ h0$ȭT,;^uy0em>b ,ܒ]ee5mW)ׅ 9lkMyQ>5 z;P˴zAN:r@syާZmiey $xe7T/Vh4R*F/h,4IdF "۲FSbw)r9aRH63 EuOI rvwh؊c<^H'e^gѳ*-\݆RC.uJ`9y+\H4g IsNz 9fO|8vFCNv$5{J:ɺ9 u5}?\ѝz[tgrg}746mBxdVG+~-sco<|e!H剏SyS=S2sbrWPSH~c?j&ʪ:fd8ͺ`J~NG$Xud1lP[LkgT:B 2%< 1E+CCi kiTo)cCv'촦 -LIl~4R$kd ;=ivAY`)១wBZ]$L!nI4 Uda)<€>K5eJe}w*M8.Xv@Pcxht!^ڡnx+tMT=9;m7aZYFa;YLͼuLA%ͪ_;aF7|?"2&E-NUvN@4ňeyJAԢKƺĔu8" B*A$Whߌ]lO[OkxŠMe:ZjͱarCN+>1+ma9ek2Sd|JyL=h"yׂtS֭yjG4j蟀lzM2 ؼ/4ZpŠ.yLC!(;3pwlv9u%gJ[Ttɔpo2԰ʣ,\h#cF԰~b#Y?*Elcޱ[ECuoN_sd@H6[MDŞݱly$[t5 Lom7P%{+-!g,CvRAnC3·#N#aRMX *C0m:Jf$:{-۾*˘@̃Z)RāަL,w?uwTijl#>ckCJ;B$)wP ܗu!ݽ5y׫%)Z\!eff7%C[mRAX թnMq we )ѭ ^l- BNF܂b8C,Tfw0Z_=d%`q_Mr..<<*ݼ`g!:= Wa{迯 sn{+N.Awu/Ftb7\ nǩ3b?/yI>s 8OYJ'Ԣ~AXdz0%CUY،]rG4S"F帧iW{2)ӆ6K+ҋCXlpmɉ|?qIثr ݽi22͌$t@ԪS%%V\I7G%܉Xo%Lԝ)isxE;Lk 7ޘUT-snj9rs[X^c'UT=I I0TBp9Sm*C mgLn-F u(r5{kuk~ZWVz4ymA. 2nxQsYqH=fΒ3u-e!a4Ʉ+1lٚQ1>)]ȉt(~`Ӕzy]PB!Ko }N9-Ő|5OZ]Sr:ۉz2-_rU@㵰:X@ V}1F@UZ\7.GM$` t@`AJm@=, cA %ʈeʓ<-5){ɤ=O J}6o.e`aHh7=a}>ă<{]r mHo{plGGp46G0擿L#~Ua(ʉU>\K \vIPyk&=?ʩ`'6o]QzwIIY++T!!:|Yh4#%b C.1q gҮV>tkjnA۹-@\5]~gPϰ^}isw;ݧLr]ÇY$a`Ag`MG |&ux$Wn5/Zbk^0t@awMvKsy_Qr;Tn;S6!+@ږ9 !v)|}ڽѳY XNģ$?ןF=5C6d2:2ӵNR(Ik[ºf.5ݻ6BcB+Ve9O"эg }ALUlbS J`'`aGcuNJ; O+0O sL!> _t=9O 4!IZ,кFwzh1\{4+^:u:-ԭtψ]pzbؕ e+uk8A*n*=oAyxbc{h]2)]?7Hk\bvEj38"y`*.Ii9!┴cN:@沌~ĉ6t ?{VԯU\rH|/R\h)jIrUfI1?e haTXBc]wySvmh.P`麏X?x5ۥ9 ng_zHCimV'p_.cs Or:}_vҢ tL(ٟ*-9\L wyvgT,#zYO3z\rRg}A9Tl[VvS (8 n`W[yJGYOKD]wn8!Cbmq!ܕ88_;2i3r 4qbp}/ynu2DW c)G%s,Q-³t|Lkm\ rs{sudgE z :MU]n:"~n-KΛz޳Wr1ސr|.0~s{^ dJ?g^XuyU$B2z7TTx&E OApu$ Bwd0hSzAckޭA9 ɻMZNG /%)ua xc >R ,=*sxQpf_Zw[ nE/L},WQfKRէu&Hac؋_: >@!OدWߨddIRC7 uQC:aVObd>z3䬙U3(bxz™NUHNy Ifi<ܚe"|xPb_ %? ;`0@ i~J9vde%1ڳ!]m_όlsVj=,3u *ͦ{Ob Z_،U $J|&WZEF~>gw8W ^jN[$J@kHsȬ-ͽͯ$~-ӊ~%:'~.Ga?lD"V/gFLcB205FMA 8hK7}Ni;QiyBJTd]0LOX ؖN#xɛyj\H#$˯7MңW\yAêB謪/')[7:k.fE;Dex=\_ 5LDδgCȜHtu@nV7rc"uj=R'idܞIbw!'k&@bKw:TTBɼu2[76*h,Citn}C - @T>o XP{ZS`b^[zvp<ZHnoNtgkG؜}ĉZ8֪_IT;0Lkd^<+2s>0C]˫YwN^"f'flaS6x;2]6 &n64KHGeuju!M1X3Fا$~/kMs6^cn_Ⱥ&vh'W{; p#)7 K裟 -uJZS,!ՍEPNfݯ}迊gG@A ?+Exe]?3t[Vnp7c6/E κٍF""'!4 ^3:unS.咈\_pZ:ry> N|c1ȑxz(ɟr sQ{']3|-*q\%H$Plhw!7Y+-Y!*c yuS)<@¦#nSхb֝Y.$lYiMUZhV)%zMZ;$<ӽE{]3cI:C0yD*ķ_&2ܤ6J⊽dzxq7n}zS3)z\ 1V÷!xQ;(Q識tz($A3⸭,T"W8Kz;1ςXZTNz槙v)~+nF)>m")PI>*s['zt=(IUWv#-4##Ӊ@ Cۿ}duij i#{:#-^[z1GF?ܷA8kFG9ʱ^UAU縹u6I0M}2Y/QbgS/4JաZz81"r̆uV\4WPWQ^ WUBD8?mV[ YmN>qVU:4Y-9?O74Zy,:.hG J/[r,Rjuv;!^L!֟V7 L"T>=T~A5&ΏR~${L+Xq?VY2j !RiGjYM` nMp!p|;x ɪ,1m}hAiH-7_mmOg]0K |dVL`a]Wν{/L֘in١md_?؎ׂ%OOb?"($H`ҍYSr2oj"D)\FQcՒu2(hRٞWkG Ձ-"3z7g(ND)3_nx7\39tuy-z+6_;IU2VKz}l[YaAd2i:q݇&>ܾ5tCnpr0 2= fI/%Y?VvČ!QONw5cV%S\o)S[/>ƐU=uP&)HɬUPMϏɀ05`ks 3%Lq].WPZlp?[.{֪É>(iq]"RM X;zU!2n{Gq4OW֞T?3k7[@(59o:3bÐ7]9O|pBBr;޽lw`+%m}" \o\qtvZ.Im \hm=Zp󎪅[ֻp+oȳ>3_`,/M:yS\B8h\j~hɈWřa-CH0+#&1^=ns!-(ua iYɣ{9].Su=Hxc)jBaff6uej!#BhB&9 b.ΆY\f >Tsʰ/yTA'!Jk8C _{"0n} }GhD&֍ SwZJ39͙?a?N]|<>^IQ\WY|̔+ lL{;!?LiFH6,U]'Hs<٧wk1z#r1z|kS4)_LLzV^]^zݱ5L\lxp:ĚkAœ W%'ͪ;ȀWH0co06rb,==kw9MMI/$acч{H VH2`;(JJX:ҫ# An"w0&L@ܜ|;T`= lȔ2>WzFf>i$fHgvvuYu| CiM]jń_֡"i&L\!vū00Ţݦ[оuO |tiun:ok tm*GVUKwGʴjU>r\xRp*@)<0[A!drx>9>] ΕyJ /&NAy+ [\/Vҵߌ'33iJP<.:6Tyrjen*m_fwڡo yzvL𙮿f@]0$9,R'pu5.i2Q{0 S%%)7Qh.w g]kTmGDΤM.&?H%8%RUB P\\NMi7ʔ d7(=BP[)rN1Qމݡ/E‰l#!쁜^,Ȟ}"aLk뒥cfm|F5اs*YIKFc~fpPZUXC蓷L+̆XÇ)MLIۘ(Th۬C{S̙U̮4B|Ϫ`NwOU%_zLtA-[ۡ":q~XMs 5SV1vMgejGN{Lpڂߧ bS\n=nUV%fr;s-ۆËpnO;+ۭ-)^ͬsĩúd%Uˍ;>^B~O3ՔȞ^ڥ% DdQVx#d8E=B,=(:P㢐zqrjd4Fĕah{3\yQ{/9$fi@KӻMO!xƽdM@׵E/U3bGoPHx2(zƧWp#Eڡ6u܊> 16U GbjU>u Fr|tBPX5;Yh)463Kw?+MZnW/3ΌKG*)=?!Mm*HxP{ݭe^ކhg@YIUm&M`|ݕLHpBN h{<נW]"Vپ8;g: -hg]ةR6g7Pf$F! nj 3= (OK7a݃&P#O7/  EȤ%XI42͸*{#/DNo!D1,'s7 k܃#\?IH[_k@IE'?e7e.% 犪?QȅW&\Sg<cH\7AlM8m."t#m:PqUV -.MIزAT]x˹h2q$B(%z; R)ZM_)+tfՅQՁw]l0n"$Q{ʤ]H "3 vt@7rm}2.DBzf}M/*4CLIzF}qzM, ~@{o;z ԍ0G|RO&jm;|Js/yH\u/H8I*or!1y/#kR j5gL)klJRA5mB QBE3fw%GD(E `^duF:`+n%AmqCJ !$} +6|{~R,)ʐ4fLmBLnu.;ŷᷝ^3%1^}j4h2Z tS^%XL۲nEmQt٬];݃]b8bƺ)gh 5:;-ŵryXM9}ݎWA=!V*M>N>!cW* "kfgD M}kӊ8kxߺYFo6r~GkeMY(Y&,HpnD{]o 54)J:(7_AS4cr,P0\1>LTLh1 dHT)ڮ֏?cFv] $Uqo^@炽VMw.wxX֌OjppۄYnsvk`&>2(=:Q}\6=LD@+9pQko\Us.]/>Yo((4+&2k)G\A3[$y*>Q(fuztbfD".;*\**Q?nHj2|+.fR |t,fЌW! mFW7ݐt(Gl>m!7`A>Cg}4Uj.e+\Wj,DƬeCsq4dhxӺ ^!f/>5%@Ƚ*+Csc5YfuI_"j/n=ڗh-WΛdsȬuݓc(r5MÙ>ط4^ޗ]T ϧ'e'[y!TE4;ltmz*NmœoCU>BqX]B>9D@˶o?C"Ea%_@VX]9OZ#=_Ӳ,eNUC3K Ld8 >Q-\*{QIڀUl'`h/oUrlK!R 2u .ܣ{{bwztY|Щ'c? N1mT,{[TtU>:ׂBo7L :Qߐ#A|`3A>? 0+d mx*[J%3L>ѯ+GڊDY_ɠu$1 n>leGU8{74O׷sF'dR~…кW,X6}]$+)Hi{S~1%yp6h ?6uGHզ]\j  t'_}/*c}mZzyu.K+~ǕY}/'ߒ&P_5"֛uXE NMԏ)hĽ >݀SӃ5_Žn86A|Dd\ ekw0(=y5_sdvvJ4@Aqp8V_.R/Z 8Wһ7,u*{.L"SM岟1d:2 ci㈠ɹ-?nCQ&sjIu,P]r9p~gGju S$w|:o3NJ8 }bG^B׎,UC~^ބƌ:#%AU^h>+6eqGc2y%ws#U$%f,.*"lҶ$Uaji ؅H+,~. -/_%rG(8] v hbPȥ') Qv𹗬hF"Rm)*">p-1#-ްXp3QƂU>c }FVmL9_7~íwrHR]{ufDs]OcVHl^8ksO_-=ƞ$M7i[ב4%ބda*,hո"E8k^Z$\zӳP}iLG f&ȅ>F>R`08ͫ!*jK!ʭU׵ێTP1iPT [ߴ*FXDT\BV;v;&r4KBs"`pP6z5 5MB#%gNCOPf׬+c<  (˹)6U({~t/a' ROG0|&p\Ef+y2)~Vݻ&re"6kį:>ڄfQ;+GYK$2?ce/c95ҒC8ץA1^7˃#|;fwRxg};CvVU5qZ6[AԺgw;O[Q83|7xK}H53E<1Lh(`GeVnsB@\,g?eʳM|bȈ!ڣMDOL]YQ,Bq;duu}~e47xsJ0b4AW8!vdxMe[lRRe&!:a 89y%Șh=D#qIf3A42IH鞳@עZvIH|9bAR(ƭgUmuJ/YsK8_!A5xr|vJdkej "=1sj0?5S^w.cw贷12[I>H]ˮ 7FZux9t\*)VV;|7f|HieZBiJEWť`={q1K;.ڼ@MɗA qշNԧFj a"0 HZK>.kY3@{w+uE=hm *kUd,/d.Xj\ ˃ř[ܮʾ4OiƔ︐w]p0 g`Ш_Q@5&V 0xWjV*9 ᣦN!tҴ?bR`t_|@]||! !UpXY9OZ516dƨ[ *89;͓^˴ JT_Зvu_4$]枛L=z`!yI09SCakf\aPFI96%!+&GDhH$iG 8&y⫲b=t@;?~\FC*uځ0ܥd`Q#?1=Z-\-$?)eM-M;gZd)WVzs:i+ CBl{/vZEuBP h@^1+;-t㟬\# t0k$fuޑo9Ȅd{A;~_= cFv7 A9Цp%y ?!S6ִS:k&⿫Սi9OO}Z qi3cBܬ=lQֵ #ҼìG̋!L^@1q!٨_nUnE5=z кސYM138y qL]S]P t*͵\M8hf2lSpey&@<ɾ;D(#Î S0* Cw綂uWYJ+q6`>! )2u)߀)h"=hgҀ<z Ery߈62O.k~Y[Uﳄy 8sSU2U!KuϹ;|40qk{B7MHD;PBIC.:DHy%`\uGU^jsrv\Q8X ,yN߾7X%!wU_Z HpsB|(F:e)`цI:h>Kȉhy7X9#ߪXe(6lݪ9d%V xkhVA׌e>iY# vLsp5mc`$efҖ x} qH]w9ۢ>HTIQ?Zhlv&m[cLzE{Ḍ1 #c:$h^h,ְv%r=_WSɽeen-?کVy$e̹>rmox:Fח4of'wnRG&v t07c5+Qf` rB |Eu7pMZ"h&-IB;cp= !}VqK38'nnGb=Z䓢vާfZ0ڂh7*2>Y"IAp7Vd,\jPzvXՆ8 PHho_`%Oy-70>lt@kF0mGek].X~ʦz X(Q(1xG&YP(v6+ГޔQ:W zq/=է/c@m (†:K:U#ۯU1#[-< g}cV5wp.f~cF`&D~pG1&˲Pp2i8iWg݃;lMx8'豛{jգ:_(*Gn< Gx:aUufE嚭ʎ7`W',XǼ-Dn\:q/|hv> *Q8fՒz]8B}uLh)>Flx lۘeu \;E.3BZ7K (~h`@p&:1D7D+v< ֫|Ӄo jjW&*DHcQ90owjM.s6^qcZU*}[!ޑM'2Ve<7yxeכrpt+,uu/RB$P~J.pu F ߈SֆJiR,.S/!VӘ^ۘ{Q02^.qZb`!q8|.0Cn^իS!X7'+ iM5 cbeۡŘoqDwAx9ε `i>'HbO{Xk=ӉDVK}1vݤTġ\ sQ[H޴Es?nC,0sA`@q\3!8*yZ~s)ba^?:LQkxeC }XZ| WzͰƺjjSZH+ܖ?_twɜ۽i?ui<FJ 6 \N[bS+~6K;=̺l`C\npPzckx=*1CA+Uxsև ~+ p^gB"j?b3\;Zj鶯Si8}(p Aw;3AvV8vFc_3P-RSC6uj6ׇS/nO{uHofWn|[ 2V9ުmj}q"]X ln>MLalE\C7`2p4Y֚|dަRT"l8|ز~‰TFh>֬QSqm^2Q ?YL/E_5?$,z5M/y '8RH'LfO$® 2KFs/ЕfBzaߙ^Y w"d GTn>0.EݗfP[n11ndd=;}FN:2 䨽u4sJaf83shZtemy2kV:40,vĭiP64>*rNBBԆ)x:6TTX1&1x攧q/p=b(Of'>\c鸐ic#[ֳJ+'oAv ϴvt٨r]tW-J+beck |>8-|. DM[M_v ěF=ή)#o]ɐpϔX̗Bq#*]uD\wO-E֤wXgn7\lzAI,sM96kwh:hGDxJnhW1_F"AƫJcQxyk0U;^j|vuWb;RC~~Y n.ncZ849+^j'ٴ#8w|n?p^{E8%_mw7 Uc?2v:+kZY5^_ھm,CTuakw ~Z:[l]z"eh6׸XVJݗ'T='OۗT؍!VX~}Jxrju\챌8yk~bLmr gl0Ǖ(AK!C㔞5LTB47No v~V=PN9.hDFfnD<_"qBi<j3N] jT^45'N4؋pBp [Sqݹ,UNVkMˣ@(>m f,e$~k {RŒI4\EC*g}?$WV}!Ӳ>)/Htٝl~.S?v_;Ddܺލ!xĘ.f3TgNg\IwRi4^iz7b#-Z H$4i-W$mݖ82ġc. x^4dŲoo6"=Ebs~f7w gQpy: .ۡS7T?-0^d & "Giz0:K8n.ʹ;ađ z `p T]}n[Iu^-/٧Hᠴ)u0V_dh fzi%hc&0^iM9nh4f, M&|=U1cࠄLnRکr W3C s)3I߱j*lC?}v/j;Sr@^5z-`KZA`R,2 A;=ֳWʱ^6_~]wA7z0 E*G8Q+>wuRokw*=Vg4n>5- '=[2i"YJC5I!739LZDu Yz k H@<}"^4 FȻTKpsmQۙ/٢g>\@붾_??a‰>aid{_Z[ƴ+!ӆ.8M!_JS"R׻ ̣r N/p<`1EsQ ɕX≬\CpgriES\UlY$]/rF|gLMCu1)u@&+,D07M/*P ˖`cb-a$lz8m2Jw"Զ!p_+EFӘh( 4ItX 迓Զe @ugYJd+=ЭU,u8})i& kP̕T/;?;'kKoH;zɒCkټƭG0&zUN[p2WK5|uP]}8a坿6\u|q4眦ߺgAlϛ/̇ڑ 7 ӦVpO a-7mw,[7]h2!OnaW.9OLK>1o:`޾QLH&*i t?=Wu"DHDUoO Ǭ--?xW4axq =e:KMt2(?efN̐JNb{Mk\n1bBPj?H)]cp_NB]K_, zLtOx \SVkI>Yq.BO2+@{_<|X\Rԓ}m?HyAMokWfwK[kQ<%Ba﫚Tcir6YD?"(_M}ƏKH݅sk)~ !1پ/E`@U-(R䟳FMq ?)EvjU G)bjf4A3G)b2Ur^@AjD,(\u.E?32nm*Ƹݳ-ώ=a35vm\>gluTyl^3h -eZߕ  d޺Dey+.𻆓(iʋ[` 鉟?Œ؟`{^]"Fx(t)Xp5?hY;xlA\@xΐ;gg~*u ۀfnrHHZǶYst_X7>ulrF˔p}][S9T JZEEgkՕ\GG9#s]E4iyrHJ#X?>(uIi*׽<.lxZ$$ Džm&6ukemg $%NC0kRca 0,$^KCJ*NQ6Ȑϧt*BSۘd38Q'ct6im䁥0A/|iLmW:UJm[?yQ +N6E]F$>a_T:Mcx~sq8 3<*;/;Ү1em̑m,1ez30FwIzH2YRy"ΐ gvo1gg7W1}5Ofl!r`/*N!w7LЋlt}^`vz#H'xxWԧ˩wIy/p^g' ߞr%ÕƸT6~zwucmvgc :q{B3w  ҅;=!(.KK@.JSlκu!N4;0%Dc V].N[aW㩩)Zu5' P#[R°+/AC%G5bp" ~̗-Hp|%3&gw"&(x_XxSJFk׊uqP;Xpb%v^Tv$GOV|RLeDp[Ln4hl)8S8a.aM4g7߇bYH #$yUlTrVqrqH^ 3M2㒮u,!):}d<=ɛi ##">6#TKM+m|d9pڡ Ѯ, {m&D l5z&pmj'rU ?ʼnqVaualpeVk,|ݾ ϯk@'KDcZnX;eu\ۍsT>}ed>/sM|.jkjpe}xe" ]կ@YNl-Ir(4=rIk81L nfM:Be tFL \܅mbP;- h8LE\n&ձampR nsmk٨_2Vu(9BW_qM|Ȯ y4=GQ,_6uXwaJ_1 FBc~K|E9eˤV Bk>0o_V+d($g?u*ޖ߾uZ7isWQp>,C w$vCV>u!X!$8YQ+8)C ! &>&p}-.{4eא|O8zmoub6S}jFI^FUiBFs }+]8RjfS*? ޤRڇTinENw^y]ewg S'TS LoJF^vsL4 6y׌H^?*]Z7sƓ8]e<^-f>Pbw`=)5z97'Vn7ޫQ%cE\lo&q!^U}'Ӝ #۳C6vx }~š:|d& |r<*.X)`eaYT wTpnL0obMx ^9/̡ 6%~QKШO[VTnˌlݒo@G%翁 F8uľ;*bHcRDž| yַ>6ƅ: XشDs^z]N~[Bxb'q)]F&‡pl72hEe:6j"+T9l1ɟOӴ~+Hڐjր{s$f8 {=O[|2mGw ]ȂVª[ lȺe|bl&wY{C+[CȺCIS0qgWTFfZ|dKA-gŰ\$D2Vi6°uZwpi_fgʩPbbgOqg=>Um+*Aia}MYj;3>ܥv9g6PԁidYCOhC+uJ8&ރn&;'6r!._Iښ6XGv w u"9Dn8/e˦.z:@Y[&bҔy[lpuTh)syL|VL_fzZvnw=enR`57)ʦܧ)So()i&.w?W>OoﲥjWXٿԳ߬~{$jVg\=+}-{A5#U!Z-Pb{tߜlʋ6>Xan?z_sn~D6_/qJ.3s% g3tYM߶̖ Cv)6WC}ټxm^RB]G} +)eCCmT1Tmӷ?":fצkmؿ"y6T?!K )qP۞B+?+EP"rUr"ZF֑R !*+ >J:=!Ϡp&ɉ8ycm!~:qxx0{5Π|`7x`x|cv;~\OS@9H +P\d&Ho\k[6?̙x?gv\S.{KAG}xPO $׻L\]Dol%UhZ$ˡp)o@|rSe <$ ~I_{aw'S3z"( b#jÄJ= !UCh朥Z-}2ш5ajۯN =]vg j,!Oh\N)q׺M:NODrY~K v[Ugu!Ūp |MQHȕۤsH'Z5*&k}N,ؚ[ ^ cA?yU\nTk٤|Gd '(iF$Mx ku'+IS /-R'>+jY4ev!~ucWdg[3T`#M6DRπS*ғ`iz.2sVG`Ies$C@+;`M7Sm̡0 5N!{z.)EdB|C X{ ( Sću.к5Dd gQU{Wd4#z iLX5BW9k~"9UQnbd ]m82C.\7,(`ϟ#>ode2~wvx.dV}ÈNˣ [4F+ u(0.VtU,!52 g%WǵQU@% hO^H9hDmJ69 ByQ}Y~8֛wRyܻ&=\4}CK>Z+3GlNFM!yh -䥇eք fQr1'&k9v9vj5&[딵*:-_15XO 7)E46hbkNAJwʣ'dlL\0K9!tLEU$(oXRc[4Hl@kz.ؓ"òhbZ،Ә"dR# $p*$'~n@{M_ d5IE[{qy(PW9KroUK-k ߍ1Z-.L3Vk֎ld^TCϪ#h!4*C4A+5qV q;Vn.]r[q{4,P>=")P:\%(Daj7CYvԉleG}/B2 閎U'= MAw27kdYRݣCGB$ΡȥvlV^}0(enbLֺ<<<}7]e?'tR%w^q.}ոѪJ/d\ջɬ 6rs#Ͻgyg#ؼ 50U3"@We)fWTΣNj1T_wSĻHuj@Iځk =86uQǒǹ{(cy A 7”_-Z jSM h(n9宛S 1tw1uWOɆr'lU+^9J&.pfZ 'V&u|Sߛx>nI]Ĵkon؄ZR=ڍJ(UEYkaƨau-OX^swBF>/um6)(=>TGXxטw hX8}Yxx4BZLH=2*r陥ԅ>BoT4ut5$a$؄Yghi(Նlq2E"\q\d$Gaz?>ӴMQ|EB{IKA'e:KcwyvФ}Ec<65]by͍'ś!/C(xһ.P..=FVq7c~yFQh7;گe<͕#;kMW! /l׋IK;›nj3ͣjFIIi2[gKìt*-M-Ggc۽I\ ]}(GydxgbikTd>oF_1w%[U< M:J/ ^Xfӕ5ލ8z|lyȧ~y2 74)(PsZJu}(Uv v؍fz\^1ĻAeGW3~7)FP?޺c78o'pJ/:;)6y}И%Krl\^/o?`jCd|\M>׺$8KJ/ɏ-?M/`ym'zӭ`cЀuQVΊv.X:`c~$sa,g_,b{IA/]R uqc̹w "U;?JlOKFѝwmLQGn?nFm*'kbsKj80$EuE93R/'֮jE:C8P Y|3WWoYG\];ҫes$m5K)UBoT\Z'\cOidh|<̘/1byv +P=TSFł{z`;Ũ4O̹fY\zM!.ˆO˪V[Cm-#~905LiO/4g PY&FZYi׏\{8|q_:k{q)URQ8:pzؚߗs{L֪rT GӔNZ뭹;Hg Jvo?CLw!ѷa[ ߣr^loVaMW o\aݵ9GUvt-ed'ޢ1\53=}vI N:T ;d\[8'9^vҺXԃGbZMٴ7+[z{!oCC(v==GUD@?5U759+cYNvrmԆr ظKv+`9ف'ݽ))/-A'L.J0ȿLJPl*7!$nzxF@5(H Gq|ѰGTapi;n%kwPcU*Ao p_IlBUJo qцL)ߦd xvljA>xR6N:1FI"}Jbwϊ.Z;:$ux#Fٷ+[RGYłݏ\: .SXK϶.X8.ՄZ.k%yWb?Ct%Z{nWlN wso§nm+I-@O4x`>5p>c%DCy֝e8=gJJOb%1aOOXzOe{. N|UYp0rې'#ũ}?3P[A4\v+LOsypU& zD|NgKb|ݓfdZ}d'\nrswbL_ g=U-vt !Ӎg ~,$ɛ(liiGLA(yKрpZ B8:R]3ێ&qem.|}(}k毞sXP?u:O[krp֑N鬽j!#q([L^` .>YamULj@[޳ӱ^_[fɜ)T-:?$I0eD]?~\ml@Z59,9+t^]S5Ŏ#Teha報nHΟ_Uw].>> ­H ybrjd+ 4#%mfb*@{cpvژ@eq6'ЙԽ|c2P.럕>D[ ׽A3.?wJޭ(,(O򵶥㽙{Ҧ -[Bfy7o`aڡ%̘z O*&)yz&m<ⷜ&)s>m8ႚAas`KLEK"hW$,(qKСidTi:Ot2+Qby{ 5MtcnY%Ʊ]'^c]El95R7z*JoSNҕc q,[O(M9qX-G )@P^iEE0"LOƶ~5@ ˆutp=y7ӘfX$?&ewjN.彐Z.6f?2Fآ(ğ}ͦMoZ:V1 گ>2 U?WQ|1>6)ؼ1:t0 5%3ڧ2ڜjI1Ě˩'riߨי%6ג» xls&kDR?#|o fژ.VAP>ː61ۍL z$(u"Bw]aH(|`JԧMֆ<Ԇ{P-MGկ0KlѹE3p{tVn}-Hܻk;&&o#\b֛ms(*(W|7b֞aU jFkכ1|,]Zֵ$$>*rF`ٟ}c7z4=IĽ?ܤݗA#zGLQ1K|z-"2͜RQ)۬  Kh<`%Ue{_3^pUFnY.U_p307hrd^az!pE" ~:&5Ӡ8QLi;3 ч'AS3Eciaq$^uHacHwi Mid4}WimԺLP# 7 sݨL"nFd%\rD:6~BXuKJCQ>R 'Gq 6 ]1(磋]<ȋ=d/CNf]5p63XC.&L|ҜOFӍC6o&}N<g) `RM=x5 'KV3 ֪+}n(~i8\@ڛ\R ]% |MBx*8;ElSzS^@6sE4OaJ)@C}5k/ڡH 7ޣ~^[쮓efnZݨ;C%(6)ǩ" .'eQ')cA!ܧ]pWbaL!}R#,dmViTI3$]uIz\$+9#a*0&zdix S!NE=g6dPױs+6M a~EZy%36GNA74w KH{q:W|]|29Y?W; \bex,7 %uؠ(g=1o RM@_+s=Lf憿d"~:АKR^}>+F Td[{I\eޜcAm79ܗ4?g}6(* s~k0F@-J@xtz /-bޮ }3NAf|DNr1"YKĹ -$I '&Cb?4=y銠UVgpĄX tPD)|bWBq*HƻP]>C@۩ I9Nɡ;qP3t5n']s^J]uw*cA%ruݟ麵ks{>nV1;n ONQ s!'vcQ(xQGC1NKRW24u#qӱ5\8Q6ro {g%^ZpIHʥ dʥmQ6ƞ*R@Es;I>^ۃg g6r F|l|q#o7"+ IU*ㅌ]lTbF{ KdЍg2VGj_ydw(} pͼB۪7*n7)5-@:}GG1 %dt%fНI95|S=9zqƐYV1FU\Re+wض楲ϵaR Q[,ƿ^}:ȠXgLrlUxF3yDeMԯikD1v )JA>$>`Wwl(x|n -"(fuQuom5PwÁ"uV0xiϲIǑ:ֽ6<4I!rfgƝZ ZW.(dLa>y "%x=r% ͵^_ w&Hj:d,H+'%0UVWm0K7գ:Lʁb: !G= ǖI<<:gs͈\^/e5[m2kѱ8thor0G#V5R'UytG{8"7Bq=[i;Zw9iDf2RV¼n@ܽ`hu ԔqF *CڏsrL6қ.F[H|0{[ޱQⅬδ L:=5@qgɻmhnbf!+&1 ʢ\f`d7w 2%F궞Sn}ؤo>Xorya7#" *?~d3ѫj t¯?)}i++b[ ?2oq 8QBRo6e~ٛ妎?\n'0Ɉea+hxvq[\؛UN `MB髫׿ ^Ȳuq;Ns ]݉m!z 8ye[oSBЕC:4T"`0c'B| dZO^&F$X8퍆a&ؘvVDp w5TZh; xͫfHJte'ڎz`vnaybm5nbe !q֋x:GQN. :ߩˈ4^ ǔ aYkn,蚋Bg$UbO7~c0)MotlubUmri79?i!}͂(U\+?oKAЩa[֌nM tU]!NdtO@#*d Y% ?4:.~ zEؘt]2V:G` )C St:ډOs*c&Uѐ]n LsƪIvf8lP񦂡} ݆~2|*w"4Phb0Hpw'tG)# Y.!bSC&=5ThF)3QkJVA-5nj; _;gB4-iޮEמj؁SJHu߬]٪f>r P~*a@$F_N!?YiI0 @#jLxdS/Z!TiSSC I;QGƶd,A)'4֚Ah)G#ω"Gb)M {]|hB蕅j.M4?X&}aO\W vt_3tƠ<|Ďhe pi2="pVDޘZŌcY~]!(*).w\46`ح1l͠\\ﮯbR^h Ä?fiM'm^!jUf~0fOtYĽy0 :Yc ? *7J*/d+5I|KUqr,% /JFϡ2cJ1?)xonb6)E֧Q麮׹@ an8wY۠fiO Jnb>?I_ 6fSYh6YDL'6O߾\Ckٶ YB(vS(p1.lY7^Jeao ,Q}U>P6,<WG1nU/KP&.cʵ?ܾxʫtPS(ۗܮ`ۗm8R η7 U.u2Āb,Qn_6>)oe9 ֭Oe(ҝ7A4PF9@8vZ Bsc.rݣfs8ug@rq+ X偧ɕic#w2O{_ϛkfbiGxM34! #KnI!Fl0jb,{r|t&P^\LR\24M:dͳTjfHϨ74<vu*!q d7,S0{ZYJjUv2J>H eM`I qQf$ok[4LPxk L[6Ks7@Ă詙-*+I,Ő;Ӂ~\mi&-1%]oU?̀۔Ti1gLYᚓ tD[CmLUΧoZ袟>R\#ޢw猆Uń7K C UHTfβvacCxV锊 G _qts˅mHqMkRӑ,l;V)]d_xzKzk?ODS[K#]V@ Sza$^sQb@ŵ/L^P:|ݶHTJ@vZ%tOt] ׺ O &Ъ=Gby~llR,ٚiQ`dl ?xWbٙ415 xyS `r -9s}ռnA1Om_MBOiMN&26y|Xڥq j6/\f+kOO4&Tʄ@#D3$]ovjSuQfMFcܳh)MݺdB2g&Đ<a4 6m%uMtP}56 ޾ȡ"G(hG*W a^VNkunlYYۥUK/H-4D)%45`OBg}suwpًWn7FoCuvaMaIf=njjOjCim&7fʎ!D3(9Cˁ߄x^hҸ2]ab:C BףA#r Ϟ@}XΛ1/QUQW)ۈit D<^/&38?|8|ʴPIlqܿ{@Η.[u`928jD4虅Ts逐}mk7#,D2F`3{{_>3xAH[_{_8l5jrQ=\NؚN+c䠒&<$|EsNԵV.Z82u@-!!ѵ7CRf!~,EЯ^(E@Ednj" [@.`<)R ;t[7(E,.90du/K XK=YH,TZe))F\eIHגCJqz:FzaLm kڙr|> f9Zԣ⼶' m`;O6%>ъِmkS,rNz 7/׸o)bxu;^j}X"dѫeJDDqW qX1 {`j-?e|Rpv:hQؓ=k;lJZ_ " jCi>"HeimОpΖAHn -ݭi*Yll~#\uh%J"*\Y# Kl` %x/1v;2N." (7{'Z|Կ]l(v|ׅ]l7F$|ڗC׾/T$(V*t+XR7<7$ჰ y~6qofyoӸ!K@^,% -~[o 3{7ysf!T7,S+Fl<_Ӆt:bQ$o]cmገˇw [OȆ9]Nl%)^.P̟o>7 Ǽ\ _l@*^S N0s}G6D|* 1%Y> V)M`a[,=pakT8 :%_#!eaz@oBxPJDcB A5Vc}݊Mk6 2D۾ wmܾ B *& l4((AbІ :08z7oI(iHO.DVZϸ\N fz-庞 ؁<%D{ vS ˸Z̜hy}hp RO522(}۴0O1ccj%n!u߷/SarzF=Ф}rsfѩf'貣W>\$};ZWc|4Vwhn ܢ&ҧpxՋCҬ3XU7:]^裤x˽ˑj^[1=$<~i;9}J֙}zyz;3me{*\;UienӄmMnnޗoI,}VZ,F6(cܷ6xvߗx4"+ 2h052ݿL,"T~-ZPQMzSʺ}*1Oc?"|2i8/GV[5 2C\; x/ѓꐂ`SJ b -P> 9H' ]go_j]$E}bSu1 GmhL #>7-NIF| $3 z*X7`%V,=4eX_r:g#6ˀuUGuu|‹PֿtgZǕԛԬe)Z'lw( 5El^RB20qݖ`P>F|4ZdCy?8.w7);S|gn!A%L G:BHPf{c\N|'DtGF "G~z~{VfL|5\R_>}GFt%*m*a"qײI6ry?,ld )ɒ~Yض BrpRp?vDp6yLxrZ^(Y-R@o[&NIUhF粕57EPUtM&kA dֱUҢ|@IalGN6BOۂЖwKc>)Њ˴ցV#!EΘH~4/@UYx*Xz*RQRu 2{L{TX˲"ؑ{@;_&j TXgtw:!hĴNu1ܺQK>tݳR5Є|=AEmJ^{kl{Pb$8֏M*CK.J{,dE] oޗZ`ʌݵWve}\bխCչNY+ɱ~p7\d4 ##M!TV2haoȱ\s9)  `+QwEo aHR!G ˠK4Tݵ>wH<xIr?^tQ] -]B)IL!vӠr`PAR{+FJ{[];u#1`:nJ:r=$;Wm"7pӍƅS0<ս4OKzǃn&Wۯi @#C?q; mF"N;YJ'1q;J#*`(9 ±|֍4{1_b+A7r1<$mLcxtw?uW.e8tkwL~5xPELbU=Os[bh 0jzs|~.!!Z\<]nh.o҆mWwPC{sp_F;& pz ͗eU:ByGz_hϹ\u_HW#/<),!ݗޗYn`ϩaf%cCQIJ^_S nBsB/{_ƥT*5 }/әRb\"'N SqqNOs^6=G%S _"4 T) ,ɼѥ?"lt|LKJ~,Ep[_/K[FfPW$uVT}E[@O~!ǨxHͲ6BQf ~1]XkE{qZ \AIswuw#Y5#7w5Wǯǜs݈B:R"$n^+z'krWiC@/F4,B*P3kwACUhQnJ= ]o*< iF`iPrR핆x>' \eNuٽRn׫?")EJ.H(f@YHpaQ@ 2ך+!!W~l\nE*QSRp%HosNdOTp.>Qՠz(ͯ^(~\NM%M!2s)mrVӵ +􍟰KHʔj⍱Pc0\I+tثmq2;h*FJ,U^S<Ik/Plo5֩ s%obF2,͇!:gVAhgx\sbR,cA=a֐ |޻ ij0\hk)* B~Y9;6]"Jtqkǎ5Y[1/@y \lВTgp+uNѼuO ڟ*-]t)`ua%RX!CsTGsǵe043c-- Vs?"U͕b[v.dZk>@LxV1=XLJ[ɌNn2=\ &5 Ğת͡a֋?gRe8UvZ@meS:6n91_M۵߷z%HJT!V3 Mq]ѭT#5.x5^K]!").F>TYsy FO9p}V}ؐ,H9vʛx>=o #7'Zhzm}短Ko6=wg@@\_+8gWhPC_IjC+,?lR K.ӑu폼n^HfAx|:<ѼF~oD^[͸7)7E\5.OD.H9AsƿQ{03(%{K\/CWZ:$S>U#v^_d[;Xc./YۼFJVQ0k? -'NOc #Pl`6۸f ~+Xt-wA#V[L-n$Ec#A7sC*koQg =}~CTߡQBЃ@#bf01ttǒOЬ8݅r,# h$!,ӵnL|}_&Iu$;1|8(#7lCMhqxӿSr ~Dx؏tC6K/Mx,`i-UF}. Q'!-zx' 'H2^'Z=K}y)^5ȩQ;$]>ʅَ8D'=uϹ7: b_CA,4A0H\f .suхB]+_+YzƄiIubb Aa M7%NZ eړ0fj=/Cu%_9F껀=#`q:g2(]D_xp*޸LyW#kN_JikT(Nܜ| /g5 C.ΫL3I]սI; `3O{F"znCM]krԋb`~]G}H nj3~[Av>59kW'$1BSݖplU# *CI<v⡖m?bLT/=ˆm5 d5)? P*hUJ f3 ^Y2Yph_ӭ;fٕ8A&7 !G1IErn[g׉k.$=9(k=<1UVnhZӗͺ3)k-pq%eP\%Ҿظw ]IC rKIaKiUQ1$˪ CTV8j!}iybJ J{팃-uOƵgdH'u@Bñ"<J hj/.z#%378c@-_6)@ע:9hGD óS5* .0]tG۲"}(%=Nsl*lc*WXu"A,Ľqt>ʃY_gV$C7;q`񪆊ZU]e(gtGhvAq2S5m`m7x۬6ot/ly&ɅvNs^[(؜M-["k3'3lvLRl!.{O~剎(2DwP<PT>*mFX,wszAN8%˴lֺ-[~>5 ߜ06 b"z'P5If(RR'.W\|Cκ,9/ ӥx"a$2ͭƾsTNI; *WpTj;K8mUHx4GFe_Փ D ^ >{\ڎ|/@"KN=tO7kQzTmLxxJSIݥ#pJZ|=V2hSٱz[U w!n"nԸ"OKBAYCTgysY3k]wټ6:eWg0F.|hoi^}ru Z֐N$81Ma##AvF5>-)p]+FJ70UHULHi3oF=Q ݛk!6O&Dv>{w_gfw"4]]p\`!N 7MAKk;Iv֊pljμNlpߕO*6]3d:/܊qG,ϾuqQHZnА+[WS8.WӨO TA?8a5+(=Xwp,e^_ U:+?ezG蘫od\cJDaqɟ~`iG!CJd蟬Lfc&u=kw<+jC=`)z qXE@uKh\"meQ[5Mzѫ[2t뮈̸H*hm~,Jqj&I:5Yxg0>IxD'ZQT2L4Y8J'$c]Ck:⪞X,{-tDYcJDJsȢ hoW?yŀᡤUǜAVX#]el5_M܀(?%B|{f|6Y;ߕL'bp=Tm(ڐvUmM37i9tq<ȷtI0(v^p>F|c|p]Ari;J܂ڝ?R~0 av@.1"nRb{q\J2M]f޻jlۙw4+ݱ"v?vDKU>&Jh-mJ13l_:Wޑl+bŽ}U}5a?E[MuJpO3xuwuDM7ca 0ע>#A|supӆ=;xda,rSsչS2T#ݏ8jRx]%QT;n!d^$PC2TG&]DiBB:I|~FXtb8N#uxӼ}^'L1׋1SUAf-sjȈ[%6٩z83s5/;&"QkWya0%"po}ϔ6z*ܬXFjz)5p)y,gT$NsVp!=Ƃل%u[Z2" J\M1r*f4R9 h ̻oL';nVP1ȡ<=$Z1;;{2~0*lpCa*a9v6cPvI0 dʴ%K+Y*C*A7Hߤz!@E+SaPЕ<.xkO(bҏ+u;nGV(IYf҆dR^2w(!\U@rgd^!tJLm^иE9d  V&6A>&j'`硬*"% 7~,Y׳z=Fΐ{`~ Gga.ow<=#DLVt+ĭrmPU)`rDYC:Q5b/;ia]oQ'O i׋[H`9}킎}.W8 Nɖ#1DNLn*&2lYt&#/u~X:Zݐ?CC-SUh PfI}a9g>ysd"K@gģ7z` ^:9jOzg# 'UH.Rn?59J*JbbB4.f>cyJniȦO*Z!yڊ=2ھ<'ߝ[ly#%\dG}'k=0arIʠI]@Y=rƸQ uYʨڳ,ojS'#*:'%aXԴhq/;1ڭbfRM`&D7peCr(~ؚC6%?;ތ CJ]TaP)o$\vuVUяU2@%uݟ1 IijIVyO,ǩ++A!i0 ey)Vɚʔ*< %F܈Eŷd]UdmTxaG*Po(Tcr}NAWv3.,;=+N.aNwU5St;fM|h4,{kʝ6E EͺvaG><eZ}za[Q+4? %Y؟̝jp-ѓΗlҺF9-ZYh `9%ۃNKӎITUsÛi/ jj98+% ɲďM˂[F8^lDc$ޫh WrݔHZ!%a/q <܉ `pB\)]Q BL/\Õi>4ELcW5e*Qs.Y])cy+(ô! A e|tiq.~iCa쳖zO+jUwTU8[#3(s^[:2Ȟ#Ȟ+bd080'lRu& Yȧz/6>ExQmLڡig ǵT[`94R$*M# ~Qd֫Va99"Otr7ڃB<2oݔ xtGD9>o^D[;mEChe'.!e$ٿ./Xjv̢cEPc7OX20@yil2hB@uH.%6V4Z;@ժGC" n\zv~).'?a@n\WCnywP]'꜉t!(7;A^l[Wu B:b3,>&r3`&QnhN_GTfk#Qf9_즙-Ye֍Ȃ[J{,~>4N dCp~\MbINwfGtzS8/2e%.3 wayfLiGWU!vmGE`|ٖ.Og<\#3p={-y~dNLLix}#?.슰Ԫ3a ܪ=L hf3r-Sr 7%!Gk8x}硪Su}@5޾"̞!P,D,dLm_̈\3%m BZ`FVt'0j66t]<ON{>g Ż S`1m @lt <6NIק'p DOk;D^(-$XXSp>2fJZN B>e& AR7x |+O6Sfd_؆MEO! Ү*1gS&xA`tjJƷyʠ340 N@<rMJ vr .:HxrwpȴZ2L(y>2Áۀ4G8,#=4UG6% ",,)>X$u?_ܗ*lO~Z d@ Ió;¶!T`ׅ&ݙN|) !o/&> wbܾh;)CA 틦İt;PKE0ƺ;Wm7FTDiEt- NBTlBwYqAB`f0]!MkmFƃbc]/P`.Op1egRtuId.;7EJu}!T|FE9~)W6n~r_HnVBkjv!p•@'7Ϝ hEc=MNXŃ5v^:F*=(K-ժkA| @fB`p zupw6k%L:P#)WAtk܃\>aӕEFddϏ)r,Ƴ!Ec~Z!$z. "MOT_&I*=?:rLK=ߥ 6,>6AT_U*.s"32"n(dꮪ;VɎAM k{LRa]һpSB[@!Dm L>H,2="ˢG~IGQ sAvZOs /Htu 2TkK 1umrH{hZF }M6$!*HQGyȪ$݈x@eJ^^յeZ4%b2#s3:ͯ+w+غ_GH\_c/~?uMMkx'`_Ha5WftovL &! mLxJF|[ئl>׮4ͩ0L7EqQN҈~Cs8ɚ,^QQAYQq\wb΢ cZDW* xrIjv a׫VW?~dʽF$ ycp|d}yt&h A\#ӷgCKu#OLy;fԌ>,9Cp?+#*+CwdhnzxݐR\)Ga @_P܁4RCZ$;n|Z1֮_,.B)]&&sPO뾐{1nو0@+6LWP'Sk{FfTx.$+ljz{ x4wIuD|83nCK1AA -c} $[^ઘ"s#֫>%-?J5$i{_;!eNG$\U.,g'0oZe$^53S&=J"'NR!"$f`iBCqi*BEaPy9 ͭe*I͡R65@tdu/јWÿ^%NhjX22Jl$8tEȽ2I*h, jF5֡ 'dUR}S@SׄWKw6IP|- zw{jDl[ոO}aܵī?t[H{7!9%6fvr&xN{w7W',0;4g:aT_i_*75)cc?Ѐ19!+":cw8_!Ŝ@q?}pMG[D)ţ+EySyuMJ/O6r钞"d S)w6ԑ 2[g;.=!/弙]yFxşw3ȴw"%'atW*7Eg%1Vޗ |hGrZktn W+W5LYu"e,d76f.W?}Y:Y 2W%m=D R`ӑd/E;0a)bݷ vFWx]MmQ0a@A5 w0ҖJɥ!CS{oʨ\.({?v| % N^,4=ҹDJc?}3D/ = 8 q+ri -WжB(n j8VNcnfZ3)"}n\88#-]p,.Z b a7`Z ͛i?'a̕(>M"k]A>˸R7@ȅpFP ,I1_a'3xȎ8p r2ò#$mvӵrNaB(:K6;} sEr.vjl\tZ݇Bo:0ӪMH\K dl/W!{–N8cŽ{\=CI9 RNu8*tLIWV5C4Xm]A9*uF 7:ԎmEHoyjmYw!j">_SUe{e:kMmnXrs7JzvmhgFRZKt̘m7jL~chv|AY8sKp,ԃ>^iS iW <$(oHNA앵uidž];deţpÜ~ m,+ko3zi]SMpw1>o:)4;(Yw*Tg̗1r&6 8k) tH~H!Ӫ7P~'P֏' ͙@!bU1];BR(9=:]50.Ȕ*3v6Lwx8|dmw7$O$rUN`}Ȏ Iw$?ѽ%.U Vrr 9S~n$)cMhJ6{#@*ۮ&z\⦵vn8׈jPLAaV/ˇ PWŷ7TgqS_7H%y}&P`Hu'ΛbrЬrpr!~|VbE[^ql }@@fͼym7a{oב=?wp_YDƵ_w;̛bejgRce@'{.' =x*JkOF!ܓִ5ޮd{:0tQ r#nϵu̮z6@{()3^"ߏ MUUiGA:(v<ȮZ|![dch%V" Xx])m{6Nht{<B4|~*_%OCH}]o[w^Oj\od+7-"M;mE:#;mڙXcpu7 ePZ|3bT\$d/Uwg3>qޜ w/\UL?ֶC_͸q N>R#p[Q.uItF۹NuDi(iO!Juמ\%ce>PJΙYsXZQRQbZ۪c=(5 {R~ёxfRs_"W\K< r ҃ccmX)M*eC$uvIAPO/mQ;il HʨKpbeh!..#3LB2F|{o{Ͱ ͸}W<_ͽy烫NEy>i&L[[z4F ][hYfĪ9Ņm8dώxl$"#|ZE>ZX02h y'Z늼><ݡة ]޷F Gv$bSt&XŔdЏ'ܼ!e-܏`bj\@~o lQ~k@hpod~sj{l$C(hMKMwDwiOƮ Sj*6}++mR,W'?Q+39hcλ7w2LF'RLEd4g32]HpfڎX}=nU0{ͽn )7^!>Q?z) ӾL9LYaSCZdc;*ySì)LaNe\ݙp,&X~eH=/[L5+ֺ)ٚC*IW; mcC ,$G}lFb)G>-$ H?Imv?ZPϷʊj*sHY{9z @A_6@+sQ0xSxQɓ5P6Nǹj?LBV}mY!hamWLn^F|Kr &L롯tTTsFh;Iu-4{T6_QM %?؁z\Eu#'#3)5T *!ٷ+QKy#-z̩|]&VExV.5)~sԬ L}0Hy&vO_tw9ޜ芧MٽfQ]ZiϤ60E>SM3$ w4Lr V& RfȒ9"s=uT-`ClkPMo|}v݇w2:4Y!7{7q+`$Q7q sZ*!WV'x% P^uv8B@A LJ'"enX'=Bo Fe(˩ {(Q߇ R=6f6*=IG$oR0Lr]I\ՃH GF0׫=d:25_ /$?B6eϱEZߤZ=|".lرŤGL}FϺt(QZzj'Vy^Jx"lj#Ę;ǂ!lx;,i|)(݇_X {/I LqPZZA7-eB{xZDGO*By7rEP<ܸJИ35hfϫ~mLnKꞷ\f?e<=o@=f}o&fE~|zFVۙ+"7Yr,4%ǜHJWUۅ VWRIh9 ??A1Krz0#K"Ҟ @(qs`is73mdtu29M"z:cŁfQ%UZDXzCf0P [ y[HʓjkH!:܅[}H[rx?Rs&%fq_z)UnNRwZ%]Ë @b(v ]YJ MږRN)]~$ר#M|lt* p^'yxR֫-Lxq E"}|c(6ZW$]I{>G2 k)à SZ>ۘ(3<ŘixVUh" Z㰆J2HP}l 3>&sgU:TM~tQ7)vߣGv_3`Im?,k" SDب h $c;sN @m=i%- .$/gh'ήkucUt"EVEpi9 r'uo"u EU,2fYTC^:SCᶶL;S;*F^7qIU%ʚ"XO|!fU?Bhwkmmm !5S1ʵ$z"yx9ׇЈgj;S'h`X%i mG1X6YN+DAY&= 1-ދiFɟc\ꌷˎMmµ߯֞ftW1DW8Alx1xfo0xV&U-vVI;Mֆd_zLuw4 ߬~$`A%dE`Y>{WٍvB,wB N[%yuwGFIGnӟ{X :pj@D@sc_0vno ߡ`\VSw`9FW-qLG517):}G y<1C D#>Iz]f^DY/\r._~)[r Y%svnPҽ `8o֎s]&)[Cۊ.cHo: +\7D9!}bzuz(в7=yr]2oLmj'[ {[;u$ JQࣉ_?],OeP`z?~;,]i#WRt5 c_|1yz #9vE7gDgE\ ]AIHO<-[=Aiዽx.)dtS6@G÷'rZ}𒝩͎ 0>fݦعzV 'oCk^ܴaxo}>`;n A\na$p32a+=,t<Q5& \(KI{[kSj Op*}eJ>Kz;#f-y"eG+1JƑ=ftc4MeO7>tF\Ľ q~fC}RbJj[2c'Oys:,Yc\肌rkf8}1Lq%]wݯü|mpJOLX-:uj$i4)9l0c ] 攷 yLP o#1')}(w i IJ !{ w]q5J)SܕV?%s/\3⌭)YfuOS?jiEwlإh[ ^Uur8@@5!__,'/zA)X zt4um(fdy rz%ki'2 of3] K:>q%> ߙl=du\NQ5~88NL~ndwA}5&)Ɔ';Հ\Z`t[aErq"рɥֻ?ݿJa >uheu)1H')I#^8:Q(uLshm!?w+s=4`s8NX# ^whN:hL& vSOmk*J:P¦|h Db)Ǻ?gQP_Hfdc% UUܗ9z>ϣ%u.`NהON>wvfmziܛǞnjh&\J/W$#sݘKƅ0=y~WJzĵZ>~̀wf0ܴߤHcY[ ¥A/tM;YjhI74y'S_W4Tn颵g^j5! $ƩItAuXi^±ʮX=n!"Q[3tk|{eaݨߝsL@u,} x7W7=mq*`H(dǡrR,>o.p44 qaNc^a.-0#bz1]$T=V;Iyy j ߞlzkAlC")/mC 9AWxFFEH⣪.ld1k{}Qx%7хS:T0>CbbuHQ™iHA^wZݢemN4rw:"/V49[, hYmfd[LkHkBԉk=vWF@Rn\5 Ф_-]#V.g=Z$"!$y+ӐL>ک>ɂ{bSo(_Aܦ)֊:NPE۶߽wHP Rܦ@b`3Tk0?ˆm6Qj8<o6 ͂*ʫVC.u!fmA-l l1O;,fHɴbFXLMM039t@) 3=}"j~z[$JDg=ěkQ^[FW0M @20д‰ƊV5 !V>ЮD+]6A_3ڵiA\SBKla<>dPv,k/ :=CL1T>M4FbQIј.PLI6.d5[Cк<(Hkl@U!^@(QB#fCv;TīG<K촣Vrerȶʮݟx7Ĥq|c'R[ 6(~a{/9PR%iMHd%A_s9ĔDÑ։0c2\65~J1i:Vͽ!cH[fCA2Z7\*ЋW^r .=' ju|=[q{nes!I%Ҩ47U*8힐=҂x͜ABd%mW뤓؛t3 lWWĆsx/̚,C;]eTA%b{FOsXi=Xf|q8X!H2IjNA`*H^d3A| zKkn`wV4pĈwLԇ(лׁK/_ȧyj(@{u<-Vlِf\&u'n#Y!OLHMN>-]6Wdg)-qZLs`5Ѿ9hxiOom3永N&41Fp>=T7Kn@<]nbU1ԪZ L7k<H3Zw8ͱ8[(c cRrpC/Bl`ը nu+Z# d9^rAh?P@f)gаaa4R(|fYۋw=$k];txIP`/J5lv*9veb2x<9mh8eQBϸx]wIyf)iL^{WXu"jGEQcl:3F@-&Sˌ#&u%e_Xjecansspo | eLڵqY63xtFCУYlXfWoz#(=OF/y2)؝:eZ} MER1K˔0АowGI1 tmYFcs/2}"ba1Be= v3xެ;5QIh[EMِ*~8S(W$zYz}5-C&q3LwMڬ.u# 7x4ϟkxvu)g&X|d0(pSth.aKXԮݜ\U6hڣN!;8g/sLă+6{ T!7:ڂvSLCF0ۏEg]KRw *y>r2 gKY4>2(už!6m#@`͑=V'ۻol&\pa[+ydx-lz;s4׌C^4~IV Oh:&}h}#j}Mx6)ٮ//uM.} &d0nҌ}Zz<.Ե#4VG3l2onƨPO'F8.pvrA#Jt-ܵy5 CJns%.) v"7R3%i0/m ~iyJ9lX@\jdouE)5%^фjU rC3/tmW͡yZeʬxZʁѪ̹9/kb9TPob.lx.]D8zzv0dW 2`^v2Kw_Eܚ9V`Yz7#~k2j~ ʐ}[xn[FӍ̩q,kY%%^1J#BW5dv[/]=6m#̠kE`6Fzi ܻ "4Py,'QgLRxʓ JL^-s;;~Z=l.u%y^X.dƖ竂 3n8'؀ozc{窛]aSX)C=؎J,WǐqLxI~ernkь ^RMeKb=EE`;,F@]{x"zO`MP yneP倇1?rhV`LD?,a*g-(Ch&saַ)AIm(oaY qX *Eq=)Yc}Aȣ^&N~"@ ߜ@?9$kWL-#xAi.]cu"(_jyrgGHU ]}v%u1EyD}8Փ]Gl[Ǭḛ%1*pOd2-Jt;'j0Ru~yt/s}Sm8q'cwx@,!GFU>zZ(5nG ѽTcp1؉qu _u|䈌& Ґ#7F_V~/}#U,ND<їS.WrqMSV%2_CIә&N-\1(O ʩ)f֐c9tWּfh"RT<]i@=#1]sY#'}]HUsQ<ެkgJkWhNq]Xo{ VcigD^I] ]؃O ʥz JQ.xCs4pO|HZj@f=&}hG"&By"1mGvِ!*|I+Y b/75;PI}Vo,b1w|ӹ@kª[&w1{|:mpe_6e-7QXx\ݤsw3LP)Sy&)ɺ,ɮmf_2r'fU<ArmA0=oɁ\FP> D\i|&kE#c1[=TݵFM#m_QXaޤL:^BTW+Wՙ^%4n>8JiqV$D[g&D+<~lv:]rTC&7Qu!m{7n:{hw^u\Y tӔEmB2 *! ύ.SfCXܬa2Ɂ??exd OCO`mKnJ 1_]boÃVRq4M].D{*f$G=M'֎kY.->g,rvf]dt VՠJ?}Yu}fsBlG *.zU^-Q2Y(v N-1,-Dߖ"ԓS:A8_uOqrAai3dr3ܥ9q@FUю%9tRcnK>1J~R-r~Y_K$ܦfXƏÉd홎H1,eD$PYd~HAl`]i[UR]pY}Ux,G7ugh@uLr#Jn|8ʔ羋r\ p@7.=}m|tSc9:ok:\ᓙt I RH'h$6LA P^WށT1\0R=N~<ςw8"ӻsJf[\,xE=m!>7Mnxݽ ~ d%^zoI>X 9 (ؿqf"M.ݮ h=L`:]Gof539.Pv?u |ν\O̕s}`!]Wry1>󪅍v\-=$xy)du^?yI:(>7}N׋6$"1GbpJ[,&T4 ]bGoˆ$Ou oY3)vR:zL>o (z$vyѿL.mzuYeol +uٟ+Q_u7~Vi, U7-NYq2kq(:'%eX̖]*֎!怛"p#Kr_o WK ~KMa1WZͧ}n^Ӽg'(9f&!7ܹiߐu.u;EaQd^o"z m)I.#g@|0Q5.bd(ÅeIeDH![,=a}4tDCov Y6 h׮n\ iDbk2)t-L8C!w0P8Ҕ'ߡbH>NɍHeϐ/LNERW4\XQWeJbf?Vuy/`N^CF陉t&[8%pԖFM/< e-cfHv8%nP@G  ($?FR]48,y%2 p?AνaͱEgz튕3&{2K*qPUvg=iŠYO=N,<PɠR\Y]?Xq㻉|M; Qmy9K|Wyy$g54!vi㪇RI=Vu?4/?`{&4߼b2k\Щ3$/i|b1 j\:J1nmiO5ls]&g uMo!]oHfݻ-_hz+@_Do4b/鄫Y=/xLO4Af=iw~{]Oں{ 1`is킓[o 6!1wfP ͥ'Cn ϰ^܃h'|Ƚ vA({LE2e"oqXn۪H#@N̶>WZKА "E1Yh8(^Btjxs\!ۑEe6fR/ =~lT5Zl3{(6_C/ [v-۽:K99"r&O*0lxZ?FDj:Bz!7zoН^f4Q lib͂Qr8zz f6AS$~^O+&:]YA8sʺގ&WA~n[;O^!!>l%%6!LK"ObKLꢨT*=ї/'qrϖ*opNEʀni9=Wq#ݴ7tr,&YL'eXC6dI:k[<@MznfF#ƭYNNn߰LIyWQ0b-丅D"&T!_6rM],גmjMG:D>jƟ0m|~q9a^{mbcb|KhK<0/ zX cH-l7_' M}=5kv{#S.A!. 9=!սvJaFC[}?cs^{'KV!~J ~CilLq{@E324MKeNnنK]㺮lu= IeE8ιY;)T?3ŒH C^o C.4}sPvϻl U]r"D GнB`jZ}9 F~?~]JnFo~|JF;'iEkX%r4kHK̐*NIP,T ?g(?JH➃K.+ /.أ"7JOEJ1O;$!8?!^ո?w{zJ=5НkޤE&|gD$41d]cp7Lkk{ju-C-u hy[Nj;\1瓟5 ŚB䞣+v#&kjZr҅=~LJgm3,#b* a"8~ tVƝ"8-h]UZPza*.jz!. czP{*VFu9a41y$oªC0NV~_x1;Ոx4"7W| JIv J_7t>)K!6)G p* mCiv`0uv5gXjT'vіYUxgkrs0;(eYtekߧT¶AIW}N9C%+یW3Uuy{h by̼mVHzzp(8V￿ e(*P, D++(۷+phb7wC[܃czbRrj{sGhرLp?`ЫƽS+4`YLont9 Qp܉5gΏQK pM \>o]Crj(uEoBj 7&r{yeAF~SV՞&~KMV$٠TW\Zw5mT/RSǎf̧4Cr0;o;n5>v>-isurA;ݵU,^IQ@Uj%#,hl}6txui3aqnAnv86DC6;p mnn Jg?De1rO gg,"BC-ڙH'E3CZ>bavd=EЅ8Cg_ޒm]?*ǖa vΪ=vUZr~xNkAhw~2y=Ѱڢ: ?VSAduPuw&ds0RMA㷇M27Yc 'J96(@I\jʬCzILOɂJE_i']fZ;+RӱK$W|ͬe@lOWOʴrEֈU姕*kKl*H馧RHe⿮Z:]9)!%9>TS}l^XE`Dឯsk[g[׌_Lq,{r&w.J][JT4 SJ6xZ\-S@K'Y®قIK:ImQ,מ$;ZlN5V]%ی~|F69E'u]zCi2+&oٟc Z(kZx@ա &JhMȇ "!қDqf\[t!7RoUtt Io w[\a &_+ۡKtݴx:`,oB!FbXWd6Fk~d|NޭC~y w7]X[ZF6Lм%.5 Bd Kqa,X'{mJuBS<y7 iAYp:Hxռ +•q.>{j' "OjDTDR74uB 4;:PL 47UmM3ΗnӅcPt=glg@b])~yCl!jPƌ{Fw3C7|@TmNiP[HEEϡTp@+>5Uv%f~d okKY np$U 3_ciq|{FbiZ&2:˫ic3f}B TƤkz9h;Ͽvf7sQvX'Yl8TAjғNi. ,vI3D1Cy^fO4cL6uѮ][(HI${3cmxFcC([ZOȑJ+Ne]c%m7&:L/O:\MI&D)J!-GvO9 X4ysg1hf]6G:C呛(7h'[$׻/RxqN{m2ힹ^fYצws^?ލȭ%_V//~:j}JHpF[?Dn nX}5qyszw4h6kby+ׇ4z_ܻn}ໂfʂ~-:ߺ)yVWɕh0ӣ"Ƭ#2ib"0ڙAdixfP!l%%u%mR7.o "@bif{JEr[h0+uI$3ԇTy}aXR˵*/` `whwQO1ui ,odgg0H{w'w?6pQW-%.0c!ciNsU>6u=ߨҼ+c(K%V\[M/C`Yj1MSxMwBͪ0[70 PI-2uDgA 煮,ZWj )fAٙͤ0fc7P0w[̖R3pZ<8g;>"[CůIJhyLNթ>e5."m ~߾@nDU*koYkGxyζOm e6]+ i$>I?n"ksv;łyHP{-fWeECg@ۑ5yDYC03,![`1anE(RҪŚʷx^=++AyL„j8@)AH,z1ɰ<[$; dpƋԚ{|WZ2 / W]Y+Ű$^or> l0?˛ hnSrE=ɱwSLxTWLsۙ+O3^v.D7-qRg}8Q(Q {(p?Q;vNnSjL>I1+|3`]R%fiex*ڛ⾾SAWim=\Dk-Xj8 $#hG_0}Iu#UPs@wdN-C娅6NW|}iE#ڒ7=`z)ck8_&k ˺:8l9' O5eusٝzDMD T)&ޓY| `)]Wfo|ouZcR9kqG \Fc6'W qa Pd U^/WsltWm.7”|fldb=Y 4Õ\BIGSQsߧL /GɊ'2Cj`Jo,ȉ!wʹқfpY6P~ZngNwࣷ޳P:V}4&9}[3lXHK]5ucn9[tD$'eb)1W7$HN{ͼ<Ԗ\MnS޾魷lxErHY $~Vo8vCv؃S :I[i֋4 ʭ(aF3l%$T:Se<⪠CwDcDfim Eʏ1V&]bE9nQIl|Ć"IJV>$#!EPL)iIBq5JĻpQu≫Rfi`b{9R7z [,O813(Z|=ǜ,~A)?{+ޙ=5s pλcϓi%aLB#fs 3T [R A6Kz)d\kn;\Wş';o1_xvËObkݣiLo ch$X#[}f]բ%kH~serRIG.w} !f*=p'[BDA_X <$D P:!y+FӎC|f&)d#o^-[{lZjk440ęHaV(61#А>J  畢 T!)6t['0Ζp(hЮ* !^KO"<ހnVܦ1q,^egЎܼC3sȊ5O ޻l;ˁUW\uoH16ϩ?W֌pn2yԶ1Kvr}|%YHe nhDO4ԕE*t QUHA,$ڤ1>IZ.oב sCă=_{9/* ^'МIPF)W?I=c3k%蓕F1zl^ЅJДNbԢ;4;ĕs?&>TDP#]]tϹ-Iҫ?|I^stIdQכBm5,ӥAUYf)ؕ]UvݯQB E1$yJe3xtV0^ս7;xv-AƶrZy=Ρ,akU=[+mtJa=:?85 LC` I1p[ui`.=*)i&Xטmù-أ(H &ՍF{o:U9EfJAEz]Ҷ193k3ZU{Vw4aMۉ0w F1j)~˼knRtnhDܵ$ <^cDmmo 9"z`8@*9Oj\W2DT`n )\Nqߏ]^Q*? w:amWɮ"=ܟNu$6Tr55y 1a|Z<Q5DpTx*oȠLQM >Qg|ȴXvP[$\Fz ikOA#%(7bQ\昝#Du=,itNvv]' GZKYFNW68}sиl5'"RrƤY,s GV]v^gr^]ИYu;"j"#pmα(4=2o)?Q]m4¶/Fmv 3rVΎ&ź`~%u7@iGSV[=LA >ˍRAWns+qW=Ȓ+{v=ZrAbG$/G$gwF 9\snޒm7p =\;LAH>xzMGF$}Ʈ`1)\Pט]'"lk -N!<"yn꼬A3$~\"'B#sza`*47|Pgx_gc7ӌ1ɶ'0E=}~Q&s+b:QY>ڇfQP߆2?~14%c36 (2s-ӻ"ok1ȘI\l mgt-#J$V+Sp^a`תE߫4z)X{apË3HAeY̛s+~+v K2yUOj/6B~W/ȓ6% |W#[t(B5:b<].Wnm3urY@e@N%K&.i.pmޱZ5C#EhcڧJӿfj,`U HtM4P~il:1F ֨C)XHWcLF8ZȺC'mх&z 'KyM򬺀b!Zrq{J˳sϐ\Ct-,KGl3 ז\ȱZŐItW{Qٜ5e$o"=*"yCinH\BXܠ;#`\tX4df!V>{T$>w$g1c\qr䩠}N5)"v"cz̀n/_<HZMATϡ {]`n8պ_B2c3BR`Du+[_jNh<;GJ *9VDUz;p "P8KσQb״C 3l\;d ɩZ= %2^G?`sihz.z Ulldj~C.X{:ڛ졦X{5ծL֟=;㍮/f"q़JH,LI OMʖR$-wJom*۽3"]G @])Z"uqCw9eH=-PGʬ鎼K*ތY{ҋ!⦛JS2!7z_g}"lE0=t;,$$ds1v۠EnbGX&!OQѫiŃ/ldU#%*ȀAf ]"Sꤼd&{RB 8n|DI2oPWdfRMT u Jq\`xJTc8Czl&ɍxxz]c F[A^CYhr[/ah^Itk쎦vXˤxo 0iPSd~y^xoI?qN:Qu%ϨbUQ7eKK6({pN…wsc(Y dNYV`oGXbÔ".QǹJ ׊ }C\%d4%?kqĄكx_a~VQ~|kc+`d8]-$3:Kuql7c3FDUI(kd0~#|ȟ?}]?\?l_voǏ=>C!!C)oKV|TXdV*tT}{͠#a/f[Zo슫^M N6D`@ Aq6LTZB;xXAOwni< ;\@JYP~_y'Y6LeT'ᲁf WAd3[tB\e]m=؏uذ}1(-C'贄Z'۝Li^ᚡ$[$9Ȏ[0/1*\n}L8.LxuRrˆp  Sft}c A0 t7fdOSld'{xTnkEhfZ܎R#0>ZA3A|[.fe:=t'ysBm8Wq˷wD1䜊Cv>Zu\>}=!ןaPzY%`!R"_ 3'-ҬfP+Ke2$iFRw~#~?}]؟?~Z?m_voOOǿ=>C!!C)oKV|XPp~ۂ.8???]+>V|~V|x F9k-bIL{aHlOu8lkS~h[5QʇKwi#r,1}D @t)Ly_70%Ii| qwiZd|˷͉0B94}汹x)޺+zșR$O Ib=22"Vݱ^pa139GWxU3,|l˶U_OIVc =}z({jLGy2 ˆڸc`0"al`#%!hc3g7dԶ"<)?DW{ǮFWF#wg!#NR?nIٜSۤ  V5,9tS;kK KL[HӅKGNi- W6Z=nĖǴuMU$ 9IybgêNMZc>,H|@Bu4V(QZ bѫ@O)فS8+q0s)ϼUUi/mHrCl!-`+Jk$WZf6qV4G?yɾB㾝?[R(6~&ߜ;s)1A{KW1M;붌J3͔!iUaqfi($3oҴ8ME)ۧ_?oO㧧ӻo]._vc;Ƿsߞ˟\\]}}|>mokVcXc3V %iRXb`o QCꖻ/lmC1E]s<p̨FOP-טݺ>s" rdL֓KBW7)]A ??$ Z.3YV(kKxc-P-c{꾊*M&ngjɰ;{yn̾}u{!yc/&PHR?aޤ_(:ոOcO87h }ӗLպkC$<|5fmD-MڸA'sWf4C@-^  w HẇANuơX/Մdj&U'Ĵwd}TH:wA9D=tbJ߉0iI.K cT8S?SQn,9'LTk*C^_k`A/ [E?!S=.wάR*]z)zKvr@eyRd܆PnՉ2@N^* ʂߐ` )n_lc=^T,cȖ%#jrblw}lEAocŅ}N`XׂHCk!EG+z]BCͻĐcVQ\[]n^ˬEUUW\"F}G^Uyz#`z _ZB!!sQ7@lZ@uȟ#G#?緅6^n7|gMDklPTY>#pypDo݃Q]U_"{:JGS\U5Dj@3`RJvhٵU?|l`3{r qw4V)]:3yzԗˆGRd̶eqݲuzqr^t1"b*RnÿO+*wl 愗{PAe#g>mz~B^s*r\c[xĎoι/̣7W1m YN4xe<ׇ8Fx[pIDZ'^QpX*εѧ@;\7)k)dLC9Ueyd`',f* ]d%K~}%X x/ 4.ra;d0^XƒPWMyS\Upr|;0܊gV[0 _;w$G~#~?}]؟?~Z?m_voǿ=>C!!S)oKV|TCjtqfV/BbCSIlO0=Iv0;N +Ӊ|gP#T=Rߚ_X_cxAj؞C*g˿ȓci" J1-r21Ɣ_/a8#0 . a{T;|eoN_f}"vq+4qz9vvRͿ2&CCۅ/u9ɟRDg;~`p[!uh#u!o };/'|1TCВo.Oy)8e="j4\BJ@:ӶK>ݷ"tr4r$0$q.0lReԬ"ȁe-ѺJ8\bVjg<ւ&+$.rW04־[|rQ~T̶;z{pC'a^ HϤ9 =MG\pJ Q׌:" o(?3 R}F='KiuލEh=H͛ͽNA!pMF',(rcSW\!l3goXk{WS} \7mu>o7&O/5ZJY =,8rٸ;}i8Qi|W[{Zp"7(FUu{0 HޫI-kKL I}mYox"@Ji(MH7\3(8Z~iia]N,3h>9I!P` p\@V;ϧ {jjc5L;2w[/10^Nڝ`G5^@^9FA鮥d $[SyOFZTN<Њ}6mBVP)ׁQl!J} aOήJ/"^yFrU]MеkieAǷ#cam 9l>^fn:#hr[VWruՌ뺨POL ^Z%%kZ%?]쮍666O76JJhhR]؟)_fb\!mї<;.Jx+M)͂g;G+teLk?+oJTeQejXMmrmٕ'%n_`nBUqP @,]oӈaB&<ôGF%k}SAVUߴ2(HTe0PbjZ4buϩ\!d6kc#UI@J$m^CP!ڴ"aUM)!~ U]m=j6T!XN^^j$g>Rz c+ٸr纩n&v.-fÎHR YJ=p"įQ^~L3_~uoAj?[D.—Pn 3v2EgTN#WԕK̳:fshEƅqlDУueS-Qzk)6}r mTnAs$|9#t"LKP/l>4w\|+ULk}| 7O| 3/rüF?/+"̦?wq./bu9IpjIO mmJ6`}Xͬ@F)R*֔Y ѵc+:Kn3εS9$zbOѬD ̰$cy ٕ/r)ڪ|ڣͬF^UZ?1+MMybz|(U|yǥ&+U%X0'݄[0By \&k)Pzov5N&VcӘ5uoEM1LPFi*^VFo ~T:ᶨ^!>_"uTI-Ug.%Ra_KT`KdU3CbKÄS4wO ѡCǚuɲQP^Pl[j1Eʿ֚N"#Oϰ[&̋yIvbT2CŰﳜ`ùJL$:j @:Ӎbm,a&!YF\9 -]14jZ4^,uN ȴΨ2Zdgc3BZ:Y3m^Q[gF"dd-_K_Kגdw-_Kdw-]mlwmlwmlݵݟnlwo+|—————u%)WWWWWrܕUR_JUqW)R_R] NUpW N*8UpZp༮ZkZkVZZk-!FgN6. UW??h}԰pPQ,2n"`9yY=Fh\`35nr6nP2]ŵIMu8 " aX\% TN0 ㅿi nEf ΛbFj~N89,Gh,#* o >UD`/lW9B#}3mާfo9//ː*5v`:ƀmK8GP&yI1d#ZIBu57qTzF.4r!b #bA(==%F?Y36L \\{ ANyoA6(ǣ&"7v#rڴQ" q>@S͖qAۃQYu fVm x d>{ڛ0)`z( ^s-9$ .[° z-a_*٫8Gt*9@;K1b6D4 `$%[9$PN;%jD%dKN%:6 > Je"X/{A"G1ގ2(mnf,:(?3MGF=_\s1>lRt xiPmqǒO~{ZZ?76/ HhGaved2%1WZ%n1P\Xp4#6U ɬ=wP3f-oT_ e(z 1 '⮪7y1r[ӡ3(80Q͒]2sk*Jg6A$ɀQi¾*#f Ψrهb2rRkôLkae˶j &r`\LcŰ>z\yR# mY!I 썍XEQ#aǔL,vE\3g..t%%mlӍ~{ckcO×W?MRLRi)qW)JdyRESO׌ kP(1p$_i|շڣ@#&S4EFWJM Y*$ZHuwOA=0ԫ5NL^ aЧp }.JF0B8o Y^K6%踤žЕ=,U#仸Chp'ef4C$f` T.[勨d"ߧd&\V{DQi4"g (uk;wp$6IB> =t8HhPX61 khwq@$ D$xzd0{4/4ykO[Y7rK^/J"\Ѭ4wHZXUpzL|׷`ڀZn3T ư[ӎYprQ <; >M셌F`u9AAAxd`R<} (HEۏL΀f7ӐzD%3WR=6t&Ů –bR,!P{T< ʫ*I&C| fb C.ѱmU+G4*fݹJ8s[ H}8pxZw**K6ѵ"&R֪"9pӶhGLCAoZ2 _~QGD}P|Apqo0h+3B%4џmIl܏0n $_g3֓}flQYFim*6㯂 _d%^쾖O76W? _ח _I4INRJR+I}"R_,E> Nӂv鯂} kkZ1dFsG6\W$,s-q6~? "c i= 0 # 4 ]h3v8m0J}(NQlW*0bǃ޴I }Б Ib"T'B<-8bUl\ntT.%K1|ˊC hlx9j[bkJc\_lז_S  a.7Z,-4/@[~"t! >{5aR=xe.\&,pL4<Tժ=a2ٟk U%u ˵e6*:˛Ɣ ??oIJRLl|o[[v_o,eg_g寈oGlEl?i^W^O/՗/Y}}5_556svm4Y_@R73ȋD|U/eM!ok|/}~5&Ԑj &J$quhI9KyMyG;4^UI4W䴓*}WoX/noAմ;xREPi)](oAF(+|䋮mcO!թ*/^Tx|$O@ГB[F+2x%: VQ O[l;kF9-\\^BYKiUאu|)/TRfƘBucRm[+ yK[3ti+ԧZtZSjCưq,>o2OfEۢmza?"I d5(Z \oODCP2ig&5aᐥBMRɅ z4)όb-wN#^B+D[yBUsIL7c4 g=nQ*uٰ3ҨJ6,=4dCR>K,Ś)2ʎ3!oؙd+lق_2ImP \*BSGt-UzUJ"Dx *O tn6dssyXGŽb\ŘgWeY2kKT*&EsUU߁M ̕hT MM΅ jZ1bKg9wIU({JA4iN8^1Rٺn?rK,>$Jse.#~ӷIRL6}*TnBԧ?~dKגג6ݵ _vW_+I&)I]I%R]_K{VIː45#jB5E2ڸK]aWlp`ZAA؎.BY2oDl?Lٕ֗4sa:shH,72ލh+fp:aHj$m萿< ͚e_="VI#Y8a$%zjŘ X4h0~Lt@VP'5Ԛx&~ *З8AZ7)QE_B Fc߃cJZ&%'[dLu&'c6F%H귨Y¡RY2$xiWTyS * HmYBLUW*,ǦjV3h,G~c`j (ժ`f[zVg dgלQ) uYBڴWic?TjE'Q[2~dKvגג6ݵ _vW_+I&)I]I%R]_W~Zp.8UpςZ~zp}׵^+ZדaB)owx/|9B^)@ۢ5=&;)lR WY6 aIJ _3)W@r ַiN[6 W /lJ|߃7O&UN&P/39O|kcqG63E3Yo‣˦k|/Pr7TU`Q:.9@pVpbGQUU"gcvw1):b !TC( h~"z0t|/0L#j3+i{f>?SR6_6Q \JxV^⧤)-B|򬖤2&5AsФ(b7^5+Ex@Oj>3W{}{EsHGaev%P,GvW &![;2Jmm] NYǜ}"eCBdpn֥jk=.d}Ԑ.o5MJN8/T)&Ai!ĖK/i||*L-2\KxTSX}pQRDSn|~$"N8\[?}߲޲z_g,>:,Elӈ;b+bψO쮼WZ}߮U}?og7Ybu"k0NȾtRv7IQ)w%G^hj Fa>(L,W(+r2L]('.m$woKO/$pM!Sp#A!Dȹ0- B3 ЋXtDk}P Ԏ&B)q*U 9K>?3I,͠j}e9N%#I!B4uxA7Fq\rf~Gp TT)g(0qڥ,,g+d.v$9]Msюtc0=N= >Hܼ1K4_8ʰ:52z+TY#52H-ic|M-A^o/_Kv_KJO6(7qph\^Ąx=<.8Eٲ\3هp2s;ڦQRFaׅy4"%̶Vj`O <lvF/yE$ēSvy7R[B  U9 es3o̅el;-=j#BHnhУZeC1>^&)_v֙tܘB^ G`aXIϽd04BnՄl4u`=dKj Xy'k[uH@Ie*(;7&AS>:z203J]V+uKIۍ^'C_6IdU C%=iO67u_dͶr !֟`7})\^ '.J՛d˫4גA}f5Ǣl^գpbm|STWёbhQMàj&%Kf=Zq+:JG.S6Ů'ŒO{ZZv?764|_ _3|}$)$;I+I$Q"Kw"Y ҋkr_|z$G2 -*J(9 (۟_H5ٴM-/-36 3m$$:ެ2 VDU"sg4Whrc^gR X^C6{cwjB`y93kB!j'#ks_|9}Q ͳ ׵"Tk_j&oYZS]&o-g5Ty2]v&q.yk`-Y+驙I]N C7Cb _.t%%mlӍ{ckcO×W?MRLRi)qW)>Kt]pt_׵Z~ZkV,0IYG9dNky}z*N,dlvӺg/:j5!bI&-$vg0bM;Ot_s[z ۦot` :RBǮR[4Ue r:G>2[;Z,ad}Ȑ06`z[VոG2A19&-gfĐ0ԒKpM'Ln{i:g>-ᅚBU9ᨺ #YI[`aTNrT)=xfb3(juv x|SzpGҞm$؃`0%-x}U]e6T),"z*"L-=9T7{)؝f4uzBc:J╍^XAeƕơit6l Ibw[yC Zz![c|vFUcG0MGRh/Pt- `aDۖ/L8ž_o-~z_yOϲ쯳>G?#"_y4/+/U_՗_՗jlv{*jrԣnVMޚ͗ 4lk7h2\')Aж0`ED];Zc`زƽb-/77qSn>^k,mVKl>vSJ@5&ޣM:/&f0r& ??VHM Xm+FnC"A;a5v\"#| {lR$œTw#ZS"sv),e7ml/>VGWJU)sF(5hX?oϫ։KD=4<_rV|YnYt$ N$g堂{"RxM+fIO5U!H+vzvJq-=Jy |Ry9 Iطm_ұ͋'Y޸E3-X+֘UZRDw}p#j A8Q ݗHظİ/SV__}b/2Y{c^?%{Zt^vv_]_9WYrH5;jn&+DJrDV4 ȾMxTkΎ詠x`Ӆ7/SkMlG{M/Qr2D.Q[YOX)gI2Sc fPHv3z]?.$=5^Su8yfUo_)sYF:3K)=l))0(Cҷ޷##LU/I ؔMRFV2MiI2AS@i,#6i"2j0=)J{`1icf=K:\u},Ȓr.`F.U->9D:C4'4™!>C ͱW1)p5BR##:X*Ōu\S~&< [m2imQGƑg+mFf`ZRڒŎU -b ԰ . @uQx=ĦWYuc2J Lɪ`\%%UL gQB:CcO(7%%{ZX%kZ%{v]llmlwolwmlml _#|;|+|4|+|+I$$$?$$R".EUR]Kw"*E".Ewx+4 .Gj:}p>P%eXF9^qBh0z) Tz Snlz-b^$j,'46e"6,D=}9W2aq~|dHK+]e)M1lR3@ԓtMGĤnޖ fiFJ\[$WwN. N9hf;C :'~;K1&>11\w/(lsIkm^Me=)L[k| 9x삍񔗼a Tf nE}]#X{HPD\d_?Oel ٦O:um˧87ЍfSsN1JɁ\G|Ӛ$gMmD4`ek,V?` Q{CLC6-abykBJ5F2UFxT\nD6A\P ,,o&ܶq|)61>gYO.QRk`T+Ttތ`*Qe C/X 8Y+JjvfY@ӋU 7S܄;^h\ '> G#淼SCŁ43[GSVն`qm_JgҹM]SmlPg/`EpG,i|̒$R^%%{ZX%kZ%{_}llmlolwmlml _#|;|+|4|+|+I$$$?$$u"w)R"*E]W)qw)rw鯂*8]ptWtwy]+ǵ w]+ǵ] _+up׵׊U5ƹ/j #ۇmjj:@,:`{I/\o=؂4{%vJiLŧDW/vp$8lń=̀c#YQvԳSiԠ160)m\ x^p4vhmFa!S/"~i*XFXˇX^I8b@fM Nh֏ x~U<1-$[@-.|O(]2$5YRjَYH*]@̗RUS1x9W M6.&G&SVOCfTqwB9 >[\Me]`{qu*}A220M6<Ѽd5||Cbmyu1 <[yiJ71pWVE\oeeweeweeq}uYYYYvYvz}>"#"O#?O򲿪/Q}rW?/wU_U}Z}jlQcW?jlUcvZcfC9[L/q[ r0c `+WJFAd#&AIVNvAnou-=CP@RFYN^B mK1? vqI-?C {f 軾ڶL=K݅P o1o:HNK5E.Do P- ȉzȨ,\~^ Wl9~☳}v`zIfs+x%!ZXEMYhPΊD_P~XEꠊQð.$`;yf\OߘVI'eGTkRGJˈV庘 ijj]ѡ>31ڐ:kH W3"B#lUꆈn:ɋ44cgYZJ 0SZ*cȾG\j)4Ws=c^I5ǛmgbԀ+WmHo?YY%&8 2 QꐠI)061Jדq3r0zu[2k]I &M+8b0Đ</h!fiA! _iuaj Zp 88:-_OV@YC+J^r|YYuX%~ާ[D_%p|=Vd%__쿖7?6g? _ח __I0I_ORJR+I}"R]*EQѐL9\mk 2ȵt6/v*d 7"f@s hoĮt5АgG:e_ 6*`k;5aRQүi#齊:x:]e0_lbO#`V%RіPgu=^L|ɻ #gh^~ز릕itPUUl&kHa$:cG̨:~<9)#Ux%S*4 Lj{EG_Di?%Rm$bJ(:sݐd=)a7ydxE[2?=λyiHNs~ώaZN6܎ 41m3նl)XuⓁx+➚pP[FT3d@X)UKT\*Q2{d 3GxVb5}"~e .03E6-#9fIMz0P93Gr_/B{+&]1&D?͠]p&QH(Y:ۍfJ Y]0*DTGهc4 l d|Dc~@`jc@5+ D |"J*GkWty3ŋ&)ZOTMqDjQYyYEm/<#: %.ݵdύolwml—aWJRIzW_I?,E"*EG)Yp NwV^+ܯ_+u_ &q׼%rG pa=ҋKdCiK,&m],~&:oP i< ']Cxɟ$ٺ筒"aMpOΚНde^B%/ws,La陴ԄH_-ٷLV cKۯ[3DW\NH*i ݈=B*[:UhĤ xy`x$xcbG-sx EV ȹt޲[[N@ߥ*a.skRGe(4%PfE``^ژL0:7f*g&STkj "2`CI9z&M]F@|d@Tj%A "(KQ"F4J';8}\֩ ?h1dsKj<%d&x-R &f%jBJ sxf60ZR'c/M& rR}|TQg™9pj&|"&TRNWPL=r8?f<-6Z"gdb]5甐/KEAEdNµзܦ|׊ߑBe]mTwHվǜe&$D:rlm˰& n6|k)бWN bQGi~Q2vP0HTqf98)41<Ĺ)G9ג^bWʻ65@DqصxAvfЋ6ԗ#\- (L]T Sf7տ T4"mN@`cHۺjכ JM:% ,Q `f)78S|y,84: ߷`i<dUȤW<͗%#p_,&;eɼ@0e,Z^ӄ?1 Qu%.d䯍oolwml߁93F+tr(5!+$+c>4 }XCrʀ;_žr+hEs\yкqYul/lTiAeE -*f2,%"0ͳ ٮ/7lt,r2/"wZ-"yvJ܋Ća2?:hAuEɼ}5I XNl-5rHrqc^k RmǗsf$B}M=u9 }1 "53#uH%URE6K% 3_LY[1Z2؆Z,J Pזߒ<2W36H-gsp[r0TgA.zmC}췠䍼b7t{$"g1i'EUm4<#u4|q㙥%jko6N`Ӕ+טH|/KقJͬWՐ\ `z9 ߆a1ƿZo/_Kv_Kvv#|/_$o')w%)>JRv)R"i+8 %O~6 L"@PD$`U4MsbIs38!j( d(?ҷweYom 5^ ioH:IvM/ߊx4MiCJ4`02JOfY9U[ЖL4 C ֺ*4И 9MJ{_Xgq gTI g,2cx c*;[ uZyI$ƿ7Ns2 `=1U.\oY5 ;'#%3,+]g&F@\9.ai"]ڢᾙ^F<UvV&Avڰu}~e(|0wlRӒ;B{.\iD/{Kvdw--kcnl]mo//i򿝤ܕW*EOKۥJU|],8? ]+DQ'<0Նl$Lᯚ?ENf~ M#M{ ņBL_硶nKYy޷H]k^'ΒcR{ mkJNOScu'SK{2VcqTP,)'(- jXBs$? `eJRTUdKPۮa/'MR(?Ea DЍ,FQA4XtpyrjCk:Ic]z7^bRd[z6W[6JqӍ%KٜNUC?KNh/Zy$6RޢZQ܆ɂ ;l`M0z@B?޲[[8gYvY_g+bFl]}F쏼oewe?/vV_5ivWj2ڕ&i|/Of!R4P= ~J z曼ృPrwR0< ewR@D)c^*F+8!_5}l$z{Q*;Ix`(6w}i9)A*يv\L/7z lrIR3t4ġ+8hxЀޯvpO4`Ǖ48-?jl;$vS}a#A&d?Z-|㊑wz\&:̰2Fy]M$Bwy 8N6MT_z~KNX A#YxV Xsꪭ#j>4BYY @rx<#⨇O+n8O#vCO3nBtLdc˝@j`ϰ,ׂ{v@8wL_K}6o幎fU?N+/,\{@O_:6R,'9wp{QWu6m@жeG#%"GQ7]mB#;,N{a0W֥at^dS`m\`zbKvdw-.ccnl]ml%3BU뾍RtJ82@nӱ[^.'7lnWCgϾlR.f(^]?/T}i[[U LGGV|Z˶ 6ﴯCC%YRnQї3).OWχ;ye>ջ226a6?ڋnBb ]bXrl|{ 'oFjy֏ o!u IkcC6F?u@/*kONFhCY6bPGus͘ ~k2p3d-cjߺ-ULAiS7nnس]w^~$h#L̹Jz8Xzcr#,|D򪔧#=:{cm.ۅ{\%fU>CtjyrkZ&D g_T2$~CS-Ӵ$d5K'>ʽ`Svfhbw0aV4j-0r8!'سy/அ|\kٝd%^>O76Wr? _ח __I4INRJR+I}"R]*Eh!5cH׺\ŜzX )xe<ݪJeUS 2c$$-r5PXM\߷&`c@n*= 1mN;RCoq9d .ڣ_y͊]\n 5Ĩ(|ye4 1=enj0^"-*婷&cF6~F}Kl~ "~ÈGv8b6^&7 9FiXR6DPKtM̥Сgj%m %U{syqLݣʥeʹ0T Q uVeXCҊW \Ub ǶvO5ד`xAL@|0HT(9 >y..wXŨmItD_Wc>yxwRGGDc>Gm)rЌ՗HV'#jJ~[ *,BMY벅#>7d ˣuRB>}y!x:T(JB\~0 Js[ T4Ks1@uQBÔO-c0VrZ!\epNM `fR5<N"T9:MH8]n -L^gV~yY0GZDz`brd3 EXʀȦ[DV)CjkUڀ,_-UlVFLaբUtHkxCd%^쾖O7>7G? _ח _I4INRJR+I}"R_*E Nӂv鮂^+OVkEZ8$!ˠ@bՁ 9%֔ :,ޗ$XC%zMsRn#ilJ'.yޟe5J⺞&`GMk}ÄW\K\eEY9%U@35m4zZlA4Zк)NH}p ONq6rr;?ZӍ['E6Ia;`햵0%/!f =3Z uG+DP GzۂDԪ25Њ\'6LYs<v^pi %q||~7ȥdMaw"Q5 08jLWt;&Yp6m/4), 9)tjh" @I!j#HjL"(f3.m?^bG6sNmP'-oaf9bn+P`+q07k5):ѾQh5P;q\!D}|Td6u4%lDoMG WR4QLc6pdMe>aN.9\ j ΥۚTUE)2D`6qyyĹ-)v=+{H7i/9V5L: {SKМ X!ND :-eo_oβYv}uYvvW#/ey]yr]}G~Zc߮Uc v5JRij*̓B *qCv%gMWId7Be6mU!yX'vhX!hHUæx%ݞ!UeZ8"'EP"I7s$: bԯ77{a4xd8Ufubї2%kx(3Ab(Se H< |'cnX6yj_^Xou4>mHՊoO:.21b +A )fā1F72cEihAZPҪ nxY[*oM1f( qH} VW=D٤|!e 7Dib$.K2Ak[YF(A|HD_W=V!|R SE1mZ۔ $__ǗdkOi͵Q "RɣrDת+?,d6j}1qCGs\@%YN01ț&–*ɜ42fIH zU&)+zRvp(Ľ)osvT Tֈ|` Օ|FB?/"-J&\@w^{drY;wd8,UM^E@ę S a]%'_-Qqv֣it#C0DA nmc4%`〚V03zo1/R4U`Zf>> ̈́Gf6ЌpZZw)Cfr(+/8O[o/_KvKvv_{.UU[]1P\8r'J7*3ZTӐiU1UE!`Ͱf*c8-R{dc jrɒ^g[w^ɵӐdZ |rStjv |ɺPr͢!4և ꘺6\gX>1#Iz4* 4+I*9i;?ξ< x2ޖ[V:t1n YSc2nٔZK +sS e_<.9H{KVLfP%oEbBZ7|\jZ"b%5;3j1FOvQ#<Kk[Q{6D?UTͺx/sk Zr/VљKzL.rpʳn;X qYaP@()!պG~/t%%mlӍ{ckcύO×W?MRJR_i)W)J*j?K RRfYT`R&C([`s8j_8C*ÛI,V-^mRd/ ڲeTZw8kւ=TPyij2IotzJ^mU&y%P+['(+$uEYQבgvqT6}p_hJZgHuCӝkl*Ͼ]SQatU$C?rkFD(娦t"$kV^hȾ}Wh?6nSV9YؕARXB.WUiuM>ʻdWذ S&%b=(Ս0j!(+TE2 :P@ m1^<@-Y+ PgIȶDmȶc am5]j>aHR̗?p["Ia.!ONs4O73U0iڐ$+bϴM;W^pQtK& rPCfQW묛]qb#o%o zCoufQ|4z3&t3͏Obj}XQ?$%[h,'"|̸BqɻsF~dAjXr4|@ixY[+7K]e "3[hZ{\,g Ni$4eӷ--ϷqOϲ쯳W?#"_y4/3/T_՗]՗>jlvrc-/gKj/B=7'RKcYOP;syB)I0OM\mQat0HNKaBߨNRlmyȜwK؏}5jԁh>G0lE\ij{⚂58"KG,=o䒁$NFȟ胨;mI)Q_u)#yhE.-&e6x K({4װܪ)mYd:pϗ_&iTclU6ay>f=r/*ؑ׆&rp_#(炍Jf' VRnʠwlD㍎KZC hw}Mk6{ -D0F+~$ъ4gj*>npQ墘bM jPC103Ǟ5߳O~{Z\v?76ثo-5s*EaԃTý@1 ./2(>Hhvlx ]8 b p`zal7'r) a{G#U%4xb:B"eMFrdģG+,SJ2֒ HH?})}r\'B7ɖ("vv-d ¾{c/Yq`<ʦFIe^ ?K,'2bmZ.P8Ecg#܄9xcG]k{HAhu: ͠G,p!^n5ɍLiu~d%^쾖O76Wr? _ח __I4INRJR3I}"R]~z=+D o vh*%G#%Tvh'h-RrI gIDrkŠ}xk"hC.#KDUgXoꨝv1˩S ?2.s4nEAlۍ]I@TD5 zVcl#9[,m{%/tBXR0Wm%pZ޹LRr\ZpSoR|'>ҋ /&0ӖXHr>c:Gf뱫ek(^}F&h_JPrk+ 2L{@r 9u;MOzY&4)Yl2rRC*٧k~HzA/GfsgYu}W6#NEI8\2єMdRUgk[!n׍ J9I#|s6 8Vщq}]h ٚ5# eaBe4 [SB T/lǦ{@WE4}/I4S%И~ܑwtdLApJhۛ]@* $/69}جRժ6]C_A)b~93$z8W؃"ZT|e*S/:jƴ#Ē,k6qTQu.$<<2PÜxk=?ӤZֺ^u}q[ϒWtA:]zH kU/Bi"@6@h0-g%.d䯍~oolwml?—iWJRIvW_I?-Eo"*Eg)Qp NwV^+o_+u_ e]h"& 0-n̴ i۪sJ/I]'sl饳kǡ`A1n䨱MTl%B<އ%⷇kQ 7hS(;uD|uXd 5PʣVm$R4ux3Zh8C50C0;I,tʡBBMIA), &TkVVB힪thb;1}ǀK"B=n)JIx(֒Dˍs.K@vaꯡ>YGPdxijnmTFd,։`vCf@_ Yk<p`p(08oRܵ9ڝ h PیtäaS3gf.ԉJ^ߚ.r#rT'YXô&N1OW[VA`2 eJʘmQNa j[Zue_oԇC25i<TS\F.5%7'ҷ#<%$:Md(l.є\J_Y+X>9ر;iU JķsM XUWd,d.fU>ȶgB@QNk3 ~36buUMQYG ?54* *v;j*º~HX[J o-~z-eӳ,,ϳO#"W^v?_՗i~W循]c56].3t@S:uvψLYBEsTaL{FGU43p'bS}u|7;4yꂺ`/[Gكrnt+-C^c{%~}Y6ζPC>D87OI.W&ͭuӖ @K]-%L͡mFs>R' EPIaCR 1Vc__?s0N;8%|k=)RH;%zɭ$i!h&.ڦZc zT2\LZZJ a2b `K0\-f^Jr~f0vH(@Ā"<Vג2ަ_Dh&i Ai{"wQgD.qMt ظ3z[s;+nsh0ƹ,QE )ɗç! jfwVH}^diʶ0L _:Q&k/\=T'.ŅbbuNZ]˪֖ijgXefKR[Fym ?@!CƤu "K06-9N}<6tM lLUգx:b>4O$qVm-|a1C  ^V ?X N)PGAqn֠!J{#*r%> s!-Ҳ: P #IÆ+v몜n r7?0 . dxM)|b3U7m/՚M]|$$PihGDh~< .CkcIÃxDAyeS#fx`<% >(%^>6Ȼd?&F< pmD 6*nPB8iXfiuHAZ.r eJpXz8ꎣ )|jt ({_LY>2<Tޭr2}0^,iHgb%Ih_υfi<)KY\*i-)oo}eweeݟeeweuuuYvYvYvYYvzuWvWWv_]__]iWvW^_y]y]yeeweweeyyW]՗U}Wi몱W_5UcWiAnbA;sF.ɀ a-b< ={ۏ=ڣFO%A @ݖ8lHx*~'5UXOr4MO4d}ho1+A{auI|,dhe%D6H@r V%4~PVJߧh+RoU>-̠M\&3A m(w<pxӪ)C*A5'VLRyxfx괖La5o΋ 0wK0k7y`V4pxɹ(6V}؜𧒐)I ijRlԤhIdl^9g,R-_aMڑnWt͐NJ`b@Ɯ%˓;H=tM {ДUȀH-'hgG(z-*rSath\[MdMH<ݠp; !J,FY󘰊>56=I*n^Uk "3mL)SM}24ɩ{U_}tH֭ՏrxlZ[T%"iKE1N!/)7ss#ZbȤVUh!yS'Dd\Y"`iQ9pu: uQ0RC1X\# %j.DQN66766Ӎ4vê^@S%yT :Zu,'DX5?eb*UB @IE HtxK A54}3>͔2Ӥaۤ1"SZQa t݌ 2dFE$x2=sM9%CiQβ\$hMJt6F3Hc['/%3a1+#NB2"*r0:О5ŀ:*'#g0 k4WMrۮdd/]KvKגdw-]Kdw-]llwolmlݵݵnlo+|>——×——$?HRJRNRJRJROURߥJQqw)R]Rw)E yIԖR mn@Y+bEF^}Dp1LSF 6'4/9H9Fbt& qsyf0Ws&3M>4u0Fafs+` ̪b||ʣ i"ש0ѶeC۝}C}4#%8bv-&<\+@(?O1!#ȹs",<=4R;v /ɶtvHAOSx+Ȯo,_ uyx` LȺϲr4$(ԷSe=)p/阔L——×——$>HRJRNRJRJROJQW)>Jw".EUqZW> Nw*8G鯂 NO N߮ZkZkVZZk:)E0Eb'׀NUǑnptG#޿#'MLV},ۼcKljU]WC!l4*htVh[Y4A/iqs\oⲄ(0=O'h! ]8@ÓJ+ ,Ld| !FWƜ ? h-쮷?޲޲߲޲޲ӷ쮷쯳>βϲβ8:>::Oϲβ"#b+b;b+b+b?#/;/+/쯼쯼쮼4/;/_՗]}r՗/wW_U}?]}]5]cv5jlwUc?]cK<^PH|&cp_\Ι9&y.ă:]a̔# +RZN6ZkO6]M"qsw[SÂlhuj! 83z%Bl4wCKJĢ wP̌nR Il2GrCi0KC g) hLA8BCF[ܡWsQ.ev)y[;c PBЅOmj Ƨmt)e9:Q܇DUAB<.FAV`͆D`ôRRgT<Ě텃i_.Eۮ Hic<%hU76nu#%Zz!QQh Vc]8Al!;oAJX?QN6AO8R1IRql뢫z4ŗxMjS+%4HmK^_[UOC`}y- cG+RJҢķM܊4уK},nA>{&a!1W7:)5RCyb=>jDQ,/g) k(5YTu%E>J.zF:.(CTɏھf.+ m^μ0'jb/pzl.*nKvd-}.ccnl]}mmg"őP)p3LPQf~BOBuLʾ/@>deƌX^#%[vs2 4~ ҢϾn}X4Z}^<NC# WsR@οA]1b2V\^.ަ9 p\o/_K_Kvv_+|/_$o')%)>JRv)R}" ,O46)@_ `,(/TˋNUt#j{5UtDXq=`( fqlVıGjd y?p7/W3\al6fՐQ#]6Җ_hc§N68Q֐ݦnT9ƩL&"G}2,j8fn^G㺽 ^qKF XD#g[J^:OQЙT6]MỲϽh s\M3^FlL`Q$Ua\۫="K6U )?y1 <$@O3o9 ȡ+zFP-ɶ~PVٺz6ZeX:t@˩l:lGd7LBGYxdM$<(UypSV!=j[d"a2'KDf*8_b%rR=lLLSjX\A5% ˒TI\+Р1_H-%6)FYqE2UtԴJGz k_D$eX~'2yZc'%D$.\;;kZ=Z&`R$+5r=FT.rh[wV~Qtg5]Hգ^x01[ע=aчɂ, s|(fZ^CQ"1fNx][TD~ҬпoayMsKzjH8>,hiNju. ҞkP8Lt5]bI"or8vRDI> @fhԨ=Y %Rxtsݖ # xf3Ŵ}ٷI?ɬrj/`q&ϒ3Li0S<%e6u o/Gzˋw-FUlRL𷷼*9Y$t0I[vdBwR!Ӭ&0%܌Bќ(O: RJA_p7 Zʣ(5oLANh*BwF14,ʶ%2oaʹWuDkSR_K.YN j\2 r-OJ`^iǦfr\TФ&r8utc%h%`|M֪~[(yBxZ0HèSI؆2ScF޶;x ?}%ORkG{,+cM~Y#64.F(K΋*H_ͽ=Zr[ߨE#`^)9آm_mlhUq*cc'~DE'JHبk4Zf?6sTi[3jPԒI11PhP⭗և8M(ĘV+?JxA]rv[/XM*!P؜[z=,$FVr[ƨ>fx^'u@Jclj&’R, %Y2y$~I`aia4g_B6QRз̌sWl"`U`ȧըPiA+h%IRFFМ:2__h-e.]֝#c.ȷYdUPrJP*`Xv[3[̐қ CWD95_ۙtFIS>27QHW2}^Q19z).F1sBn LFOO2oo r<57|XmɩJ*Zo7 0 ܍0wmSkl98S2[BEy?)e*S9,J dg;,^nIpyِ  hRpvj)dKf>mbWuI3$}>Iۥ_svB۽#P  du2)82b96#Vb[Q_,5[BKy?K[^ݻcF7:W2,YȵLGiH[#8/բ^PD$H}FԚ !&JTc_rl3X+0%F[1~,\zB]~Pf$TےRQ|]슈\l NNzR"b43YXN WH>mF֯Ѫ+{Hz̊?l nz3!ع($S{e&kwnex'a]Ay*T~P *fz c=h(+KY!K77? J#:X\2BDҔ5~yN ͑E,%E>IJ[jj07%-5CxP3зaoiGNv!|;HzzMRDC'+!"|< 6uf'M N#PZj{k"ɫuSc/ cm.[3({ 8%GI^!ce'c͆QgSrܖUT(E㪅zx}@rLo!_ P"cUwxnHC"I!-W55/6YPXiZR,QY4I&6 @{xwb/ (Oٚd弌oӱ諔-Q)8r$8;m(ShS&VRK0~ў 'vT{ 욗J@2>,Rc2+e2hR*4z8;yn62aX͙%ɑ՞GDPta@Z)H-Oz%gp3 9qς|Fuec(eKo9u+ꙍFֈ>"žFpdpi)iWv]0 R95FOb]:XΒRݕ%WV͔BTdQhFr]~%ɾ~m>Gi2@Ц{2R,l0W^qf ߗ ?E.([ֶ_U 2dFrWm Ճ0Ʊ_4(hS)ġMh7ڠBIۭ&@cd W0Æk';Mי +4s\JqRmq3KXjh_'/+GelzbtpdY^ǐsYf!?`Xɤ,sTMF1.XRr7ra>fEc2,ụvKaZ9 #%IyFyV3,f5T-QojDqCL9R]#.8*{.6Lؾz5~~ZHny7Ygj0iЮMT2Lg> mjl;LsưAΌzųv}X!/K&\B3v0_@ww?9 іX3 9ַ e˧fb/G6: o8>VrNg-nDjK[ 5mXayxy*maߴslcTIS"Kl8i {7% Nε⟺"f^V'Z5Rf~<9gM8;3KGiHhLy/ ԙ>Ŕ!z -Ej*eɷ}%/<6bP7l%/Fy>%u (%(H4317be>6&V Cc?ERϴXxj1\A,?"l:O&%Kծ g{Tѿ-6-?l^ɛjcsё+Cؽq?vu@.T#j^FKO0_Ue"$-$c7/$+醼"Yя+Ѥziتo_DlT[x`}MYtm0ZKe{j <(8aW|ly'iX$mH&o0,:"1u r'ҦD)0Wc '3X )b3%0V/(-w˹9!j9-`ܣju;r _/^2׎CRsɉeC{kkK^dߖ>Ӌ3{GoπlI7U/x`Z.@MH~ze}`Zm@7LDAN#!e˸O7rSET8J8htt7Wc_ N/'SuP *թVIeV.ES-{D5DYI<58dTlWM@.fG`lTUwo3vE^UQ_o.#Ϻ޲zuwt.y(t5K@gQ ,io/%Cщ7ĬUfeГP Ů%$US@t|D^5 fAJ*%}coIتE֫)BLW{\2ͬKK/k[T&oS.i&x*Jsbn.8eb`gej5Fy,UKˁaj#3ysK1ZR1EIOJ\vAGoF̢lݯ6!-z߹,NFN\"Q!FJE6LXӰR{ٗP,"Wu1mhQ(MfwssuMkX L&JĪʥE fwAUucTv[:fQxxJwjXhĪv.L2$PF2hɝsح*¾%3[֕ŸylͰK›1 mTj9OV׌0߀K3!ϿMDE:z1o[\p[J]mqqʒ;ji{C>p[4 ̀jC Q}8F̈́ZMYRgRG+b89vqeb4`fr4 FR*i%״dH=Fa=3x+|?s2֓8e]d1Mڊ%z|'㾮n _GyiHyZNosRLuB03 {)%vH? -[^/ʕ4JDtպUZ5pW{"6IMhG]Hj&"/%sH-bz˃ W"m/0[-;*Nw{˫.xj WQ:B*@w"T'_iﳼq^{w4Dsy<ьC~nL:ˋ zf-pLD-/تT.%=ocP 1M6Yotf寓}Eg/[=ɏAY<6vd}≶9Y&1)'u4bs>b o 4;{C'H(ſR(ޣ H iOuEM8*~)mw 9{ ʞf4Q ƘlM2Nd%eQ^OKNL"ra%gKs ]\*m%q3yBa+ג%=[8cf Uզ%3Б`KÆK;F s1ŚLc#0O0XsLg:MẐ}5yD=9m{) nm3a>|gUNdhz__}z=k>6:rSrX0I(k!ON⡄#J2bM%YK`#-o"2 \s kAs衔WN 4?> 41 q~ {l~*R3GlxWj&9okRKI;9K!X?G%6kdu]25ko<; ^YOnn]p.qyq|ni I)F2.UxvDݐ\ԉ|M C;)m.$>6V΅%:QraF%/vӢ]Z2߲5Q_%2ߖp{}<-t7e=]Y1.5>:gBYxh,wvbTMnV;p#aiv^FRE˨,@y)ɥ`R{Ӷb}F΢47$n. f,HJcK^D$Zp?% ~2MB-Bo +)jj7%qbʴ$ع}`Rx×*;$}o;K_c =e=YA풣Q[> K6熾'Rq`ԱL [ֵ$.W,#diʡk(~H&'Y9z{ӿƜyALhY-v3~+B3"~` 2`N6!%؟retuyR`Gܱ']W$r͊"%؍l([ 2GѾ -j#fܙxk)6!heGB!b;&?Ð?@b=a1)T3u:U~UX$vj3Q^S3mD/u &-U1(:/\n]iL BGl vC9iĎskR(:_jyaxu2].sv}!i rj9MPb0&Ns(jAg˦XVUS [ 0,`Nxڢ>k:*LK?y (j[-W)$+K09$x'M+<4xUJ[U 4ϒ!M{xTU} 7T6@ghOĐQzoy& vA_ʶm K;U`טL/Qy'+w$xhtC '8l9OP(Ѧz\x@D:JqUgV!hoɊ,SՓш'3eu#0yM|80,Rr*,ߌ`v G pG`ӆ狢XiYm'/%\n6—ףE@$#RlfI|rR0?zZu.9OEL"PXMF' C0fJI&acPTӳ `Ι!Fè!gkVk 6ʤo1N%1%qO֭: f (wCK]H< N[)jqBP,IVkpb`gnV?H_|U_[Q!!KBhE Txq !bWncIsρ`Va8+ibhU.֫1e-s;KqllXh4ߊ<'X0"qPӰ{ڏDx4ͻ[Zf虮pڝ;{W%S0{zT[m*ZFHgyM ND=lpC|n \t }+\U ySf/B |\CHaUt{yAd˴9-O(6irCf\t1I=CG4cv8> *g٦ 6Q2*ade'MXx#*o|9c_"H//oHF*gڐ4iQcÂ@ak nɏ_Nrho%}f1wa7 [1 'zCe>F"1LŊRu`mtz-W|]l0Ǵ=>@EjH0kzYDgiF31fEBl,ѡ H y[y1A1>G~{\%S@3E|@QK rnE+ [uDT7~uZɖGch 1 FD\443?HA[֐(݃Ė9:q$j|ml)i!p+[}Cj (> GwAXjo B!Yq3]ChJ1&Lr.=Ia!w`?dUc.}9@0ۀSFxFv춳T-Y4vSn qdqգ:!d@H'b/Eڊ1$YUEs N.B5|5qCQj K/+M>TǼ//t8[ru|4bb\jZAy(7ʟ풠K[%\f`E8NoAi+ð%]e9 ΉٮZ j0)E٣+R& 謓ڝC)!IYf4Y#KT#@j;SoB1Ov},]:Wev%pAU,**ىAo {DVO{No=d|hAn.VOfq=Pv0 };]籾[BL 4=bo.Q)W1qxP`uM'lSNK`p%^"=Jdz_djO9zk%-ڒ&!mnORߗ믩?%z],)0ѵ.y'\aS%I 4ck~ ;"awӴ.TxeL虔5#ٍiA ${zp{%V됾<>+{ع/|%VTVlgV'kU9Zh?"(W\v)*[gJ^G>.8nj.1PZSPsc7WQs[8lsy!A#]̋Du^-f6>x_-(ꈴԷ!Cp#Aj+\XpbO:R;:U.爉]&G*ao--Yk,n}td]1%cG;)V lx.̌R Y0u/ˍYc~׊NjV!иvMe Z=2 n_ UKD! oۢ~5ah!EjR !{ /|V#f] 9cl>@id=Cq/"w ]m3E3;&G"ۙj)kH>°a6%1ᎇwHM ?!Sx44ZY~1кAWmOvЂ!W`K.#Ǝn"Ǖ?n Py VBUOJd<caP#.~).O !d[nQQB\hҤ1PB!Kcg1B'4;y,S*8XT yG{ u աγv %\RrtynCצn<oJd/oI #XE)GSC؅ ?1,+L*}")\iReL#3Vq鈜nZ5PSo{#,6^˻=|*=w̓W9K/ S~5#0qmo=(mAĶ͡ElKM:~\ Ӌ|]k;?5\EҨa@%g.@+qv.S:HǺl(v.#3;j0(luC-N)Rh<Ux.JF-~ #7ͣ4i2fZSF#VWZTϭAc`=<؛LFxmζH4BbL![HBkU~^u0|S&+Qk<Ƹ5g^,>+M>Jq$o{+~:sD$}ylI*AvoDၫiGj_/uQ< BhME?1}4]nxK~~q&RxRHoI+Ol|$vY34K=b&]ҌZ-뒨ܧ2 Ҳ=WtֽHy6] gmѻK,{\7l˜zLji MZ:{fSon".A9_η6Hv'B1mDmy-6 5$${ZZZ+v x*A㍵>v-͋7a(Ū$5cU[>izOBVU48^}qKaD m,CHKG4wٝ[Q h"<T%vx$X l2@~rBǬ0YW "Uq>6z:sB.h ]ܜ% [%[8,:=M)׸VaԂdvUқ(~z4y ;<`Iu"%,sp6mه+>p &P Çnڃ5@ThUځ]zдRuѣLBk gH}Svka#PWz87XP['"ކ#2&q{j1sG_tX!6c?x^/ iܾ #1cFH`;)|:! Y$1 ٪la8#o6OBe%)[r7[&oKήg|*'/%9V \y)1($C;Ef+MZ+>}y>eV|+TL'X6OϞOl:X#Ũ;=ӱ=A)MRIyJ̖b݁~]E 7 Om*s,$NƑҹMIҿ:)2l N n8zK1o[x sq )I5+`QQcמ/"ݏ'Z}#R<SR޻Յ7Lį /sxx`dݟSL/)$u;)eΈA+?oO5ݶY$î}ؾ֢OeuC|;t$cSNҢm#'&ku,If VCU <+fSV2\L6H3ve\ʨVrKxrB{GDqj]ż{,ti?a\.#x3WTJfGٺ=ƕGz{7<^rX+~^}8.ѧھQǠw?P P]Z֕ 6"f.|9D%*$5,$S4AZIWL y®v((hQ'oʟ؞s69QOR9& DbnQ$gGFZR;/_i,an蛩͏<(ȋEHw9 l4e;^׹8vA>n0lq`@;Z<˜OnYZdI2^UQ< #r+גi),+1Rf>az Iz ANiL^E<} N,#]^3(WEzYqєJ &ڒH\+^Ziv2ȥȐ.qUO#3|CRG7H2&Ƽ_!+bIљauk39G)o~"S |u Bh)D&^YqZaF~?$ڂx@rxDI)ܲ69J~f]T,rAPi $veH RO,8JT{kak,aV@I~]^ōX3!WyDhT=%NNhOl!u(8Lƻc=v{zl3sM˾:5Q{7 kPo5iG)xj;vu| Ny/ر]AzIz﫲JM\PNJCCv^;FQU-"d­03?ͳ'?zQ|}*jœ;(j mÉ):ܕU>xY+]jp-z;畲h3o떉҅k3Z-jعs);%.aSpST'zfqTSy)EނERe, p(`AGĠecH;IlH>`/Uwd[J.qEͦggXNcJ-1'ZU .gbj92vr|P;bZHyA NjgFmqIݟsۃa-%YNvtswr|in+LJ;L/"AZ7o\6gIX[蓔/Jb0_KdySia+NS.gTZTlve+llQީG`<.@Y T)AivσeGXԡvm^ZivxiWR*o :2g'BZfæ.Qhf`2ˬ՛/ UTBŃ550^#ȹvM]Ʉ4$V|N!} .A o@F 6*>+ڰybe|Yhg!:}G4%[EjF.@>h.jUDvmBlg7D"9$>`F)5jq.?c*%6 Ą$׾8@ M{i⒁{}m˺|Ǩڶ44AW-L$CD;՜d7F9҇t$Rw&K hgӄ~-皁8vCap}vnPn xOU+9a/eI;`08'WU=#`x]i`'"Kf_j.!Qvk{UUPpI|;ۖ![b"Vɷ7tޙ⠽"}6^Lb3~ 3_YIw/ȓCi{ s?"n -5xϓFǀ[ Jʁ0<Om*^d11 ^[-FH3g`=@>#ǢB(-w]ܫ0-קRL*d؟-ouƖ}/,JZP_ JB_xڃ0@e1$ >AI/Vue p7М~̿NIܪRsP( #AZ%[x}j&;>k锄40D5#Us>ϔt]~]EAw HX $RqNU;nqlGGڢXI2 ;S|:׽پq{y1/;]ʥD4@Jf`7\H VG& V-3+ޫJvRFq_vBN8S:N)VR@Vf776u7<#=3Yd##\ wބB2Hʣ[Ń%j)"$M= Sr x>V0q%MD'0+NZ>@:Q _AL&8fiSv x~d;w&kO*Z'w9Eq^Oy')OV5m>2~BȎÉ:-nR.+B؏0?zbg[#?$KO9axѰuUkCe~d/+# Ϻ ۏLdl#7ٝ ̀ˏLBD[".78G?"K=s>V1@Et{jqHm.#E HacrTVg ] D V$X3VF졦8w %%F`96jPQ;Ap|ЧxqW^bIu\O ֙hZW݌)R!siOivl0IG dCSOX^y 9µ<s=ua3?g?OtEK[-P[eZjfa+-G:͢,pxaPGzoYt̽qN\؋|GZCca ,7s J}U:#..7hO/#FYt-l_fB1>U4QbAӌ%v2rH+˒=#7Qp@' RaN8żyHe^b8 ãV hΜnZ$s\FX=|D0J2G,UmDž{(k^$췻ɔZ<^{R7zcCӃMH0)2r˩یOM/9!H}s[ dffP'g"?ʘnߟ2vo1\%kuxʾ@2k`S%)8@@n`.+4߽޺b;tHQ]&B`RPEiwe R~w RD&hLPqQGȵhˊP|XK*@ܢ>2y+A/uY e9 ׀[_@Ht+8gBB)vO[D?KX:O==᣻*}1 4gܗ>_}t]aH!)bPfNͨ#jE}yQ1 =BC5 ,˘ SHn _Tw _|Abk`-1BJnfr<BddR<Sd7! eJ9b&RmG ,lmBZpFGdYpW˥ԌB^5,z_'U=yr1ƇS{+?#.9Ȥ=AY)=~|djp[Wo&|vnŻK\UcS~&T->>69]۪2>yCpεµӵNFۋ>C>6xO7}F6h8rc'#66g|!͞/wl/zUScBm=m_/ӳA*lwlGY08]ovE,-OM!ܱ۹r}rA(I IH듅Dy?FTh"BmG]'y&#E8HCK3LlWf!>-,2^ҧb!r:r,U))6҃.7/$"+b^8YG>~P|dpI}za$Qo,@ ȗ#Ϩ@;GP*̟joqlΩ{&-x`DPg~HdAj8ndNLDz<rC`|5JjCI[ Dxj8I7_xzd}Ā+/{vH 's%}@MH+~`)a?M ;J<#vP-3ۊUhw_pnFrx:IX%6bro2YyvדK}s_2UF(-P1SyH_ygS^g;taV!ږfA翈bS tW32@H."?x4)hӸWFM& |t_&Mo@JbTG%8[d.HMD/Mu??2>Oӎ& b|d7#ajS ֛g&F6v34dU?>l#({Ѻԩų֞rV9>屭&>Ikb]%cɭi-ޔeD=щ"pe:ZD2L7a]@gsyLpҌxm?6vht8!}3qM!W55b0oO, fg<2ĮG&\Hk/?_.&Ow.v B3#wfajjO3 #138D](uca{B.[.=υbHejB|sWN{G8i)⦚d'O3Ĩqd$1ewf jfrkd,)[;LkRLFI&ešMm s%`v&m.TFmPJ͋C#¼s3Ͷ~VS,*_i WwlnGVwDfPsHA$bˎ.0YL #T_JQނ*xY q1^sDt;u_@io*KAFdH~G<QEhTa/>e)7@bi۹Ļu+.w$DCΩT֮ƅw][[!b#vcݵO 90Ճ+!AD~S̶lGS{tqbڥo ]Z;6Xbmk 9TE7zE%be `'4{ qaVcW])ձd NJ;뱪K5OYѬņi)MhQt 5)OLŢ{C,i8o.3F]_s邛óGG wT/[fLv~NM ,rYQwuhɧkQO\q$ h/#;8n{}z[S}J^"և2Y:GiD +A?nR'nO RWNS 8vϟtAd(e^AEa=𶫅ӖV:U0pԈJRD1<l{sJ*mm){{:.•:qt&F4ԊnVuhnTK[XX?2#P[cI,]o>$$wHqfxZȔN=Ŏ4R?'k>9A vTta7%s?Xw@̹,jza#G> pnZXosD缒}yD QA*0@pۗoyU 9QtؾNx18c&ɿo_~hmrx+b=c`؋$)T{)C Ѝb>?$5f'y!ŵ?)2FE8JHݚ)_Aΐy61uE; 2 aui2GJlT,㝔IV\+O  su)pSTrq2OI`%t!9@ xwhyed L6PG[l4UrQ -G8_4n(l{{(/?*wi6U)O9n*8YÔK<:Kt`nS.OK ˛ "(!-l{L|6 3&`e Y*S=~I)qoSU0 ]X͡ewJǸo}Ҏ41#z,w0mv+Z/!LQbaW_4rQwp/_y%imh;[+0LMd0‚Cc \| [sygP肉b,۸&Ee_O!d$T8D:]pa-(#| lO;gftyRG~ k=0IcS0֬YάGf I:/G UaR [gPq.ӓʹ =fеչ#j4svݬXc4%B\φ%&2-}īnl#1h9__++{0eI+S-5ej.+ Ǽ@fCC΅vڔ޾c/t |4wzH֞u+MV)̿%貅vv."4nLeOZ+3ՐOYPOݟ k#=qÏ Z?CGz~䀹uW*aNV4.mG C{SΝRLm7Uΰw_[&Tv`Uٷ?Ki vJZa71FAk>6[{D7ZǦtZ[^vYR}luܷ9_9Nl>s>9U~2hOK!S-=zǦT.2~c \Up/n>r8m?ޱpTށ;vi7OGsvP[O"&ش?#5rBϑ?O Wې5{TVczvOB~mYBikhOG ϔKr<)NRCnG^<) lrJEK~dzVxS'Ψ䱮ż 18b&;+I͂}{CtHYLAJVͶyegO؀I%sdo"m?]>b. g{ʠCҎ9$E¨ Tɧ \= i]!N2z^yLJz/5{+!Jv6:`ba=e1I6\Y'd:ó{i+r0/m rx|]*P0HUl:UyHri"Ԇ=gxf=eϫN5&%RTjB[$Iigu)&׮eH.-EFKJ:}X{IOމr q|mU ZSt@FdgU]cݝ êZE4ia]5`*ؾ;3GyO 95LIi}~xUkA<{H9>aKv_YO1^p692Aq_al׳ 'oSsW!s"<=SUcz2oɁܮ{zhb<L 5dD=P+.T6U΅3^6HbB/ Q;5o7e=xCbUuA~*9[q``KoH$9w6䮰t%##!C8-vȫa=ˇ=Z!)d}!$)(Kb[fleBWe w0xR݊^I8Ͻ>=;R\]C}v~Y@V?ײɼ^B|T׭ZiJ~_>9|YV/V.i) ളYY!'˦tFM.^dW-8+JrP VLy3xVj(s K)bsK@\-6n5[f۫58z%H fL)^5+Ȟ7\Jޣśv^>ma~3rj+%eP).Z6\y"'Ǭc5vYڔM>} n;|~9SrLϿ YIq+kL)0;v=A/SߦmVVAϻ[HQMϱ8x+zթy\{HO/[%209shUdNP~A-բ$)U}vѻ1zXzOzl[pbRJl;OږnEƼFq!B=kTh jnn/G} O殚AXgLyDWl?95)v`)5`J>7x9bu+3;;x[JR#(-ZU{0+= H݂ e}۠|nUΖ.2`p`퉌d(GLS2'Mpv5 W9J]Y7EHЍ{( :nwE-r2iNKTD Z0bAZv[lo5qۛ9V*UT.9f/z4zX-.Bq!^3L;xx7.`Dc7C#t;p ;=Kh7U620!޽š#Ls.Ξ;C!Y;k@b)|5!$EU2c3?~'ͣoT7H"k8,fA6&ظ(Uױ*,{Y989o 8s ,s BD "A3//_?L7[i lB/u>)VIĈlO$aΑndJ)G]Tő1+8:w#hP\o(OeZLc.a;z'=ՎM ud\DХ듲u-'p;W 9!R<Ȫ ߽ 5KU{Qu&05#,9KP.X ҎXڎvT c=m1}EQ9x.Lşx!!mJ0i`mwuL 1gӾh;&Ʒb#wH]K+|κOc4ᬨ *}dy/2+2I}|6on9ThC2[̧}&֪[MkKXC@N̿{M'm29,"r}2V94eAsyސp m5GPsR{Q:Yͪ1?\s!i?=XKHA<}ț>1Xʈc!s{;55Os?btR⥙NiBlED0u] I果10~oӿ1[WNU9rR0+/^ 5|BX|=v%g"@ʋ8ЅM'+ XbH?&&VΥbԸ98eal7a>~9vjZU꒏6VTYS4";6٢E@f+qC}r%tsxjlTh|dUNE2UBqN{;ogn2Dž6IK5[ -n<.JH{roW;&!YEGUp`*ʹMh)p{ ;6` C[0ժJK%ɩ*}E96c5 >B(kNƎu:7iUA5כţ~h+ls\ҼDywoB$d1Vr/|(KAَ_yBBm(FZ,!0PA(4TFUI[-ƊcZKqu9#t < xw-nR.1bjz1re4Ь!"U;,MTp|b\9#l{U񦰟JI ~ӂh>,tM6&Zc咦, #b[lV]hF;mgxSӽ2 J+l>@NZ]LI 0}gbC^"vI*V5i׆X4Y 39: IDs+7pl3D W~vlf: f^)apiwOMq;EQ}yh ZڨM>l&yJh;"&H1p/Yf%^݄.gf.O FԧF9"p`φoSc:M);CjWH=T3$Džh#3)heJ#ٸ-R.:/Z]#mE %ٮLT^2tS)+o^ Tq m(M',0K|*c"0$(uũ/o7M¥~X<?f3XW/Qs;<ӨGdВI3yEcOc{nR'zcq+Jd {[;^؏y3"H\^Y7!VMُD=߶E5 'Th] 4p¢;WҮ핤V8:K񎌌J!Gzz+s60Xe[q(8g9s.$'Rd]lM|ڎ20I{L׊$iǴ=4[2v.EC{oF4 Mdt0[].$3Cq+$kDԨi$3QYrۙl8$f(!l44uws@9Zz.}G} SA1]a\ I GTxafv$"`ȃ]$jaCYDϢ"azx\Q٢I=2AmCj9LiHwǻS0U98y>lLFl0cQSf"eU׹r`Rv&*WI|)j{g0J8v|V'Wzl{3pD=U4Uws7d y ٱ3uwowR2̼<&kM)Z%E J{{L#d]e5F(M3^ocWg|DG*Tz(6o*!x"uO+mn1nufR&צ%O:W~x*\҇ JK{c^CCwAZc[$;G\ bS5zulgT_/eqӳb;bBxP}ٞbKt>Ug M%f,OyRMr1bV`_}ߍ];ʉʬKeǪѝ ΒFXS`R+8Z Nk5kR{tAN  C9DIbwՎ>JD x'3WXtL-qvWR`za~ņ42s~b0)=_6 ;trxRJbO@^}H2:5i2Y:ls"$f[J@B6ߚLmkj'`}> \%1Ggd2C֏eحУmk7HW(UE`}ehH$4KV>‹jԢP\M5W눋N?ֈ~OJ"YuN68E.fh%}|DIpz%")EI<P#%NM{H{o ]5C {yh;wUvjw.ޏ=XHA^Q(׽>7)[ju12M;* ϰK^iǪΛ> }h>exo=uy~@(@Bg >"sipaVYY#~b c\[Ȱzv \NVet!{5]Q^׳şrbzBs:<,=ѿ=$҇vy'g\ث ѼW}T؞琉ddW+é!ŀ&p[vx N(2U]]…îB {ҍҷjSԎ=Ǝh!ȦJ#&R˖sՃ!f:&@))zm ImcDE _[RBN֨cP;]Pʔa}7~ȷ4Yyv~ƃqb7Ϲl`~~9<>"e|%4}fI#EHWc{NO906)vS&4l{*@]:_'4Ԑuw.O"䆡t91/fا ΰwEd2CrzҚ~ #(L8Kq$J][^$8tf䲭'e2_M'r`dz]m)`J?D-V;皟m Z9 ]5Y)c2VQVE:Xrht{ʿ2#d LSW,Ew$m5#6>"~9>2/u 3+wV%/3>G@EQ%Ӈt*$PIQ WLJ1knzWϭ )s=Ҥt:`ٷFHfR4~8V~vZ.My:Ԗڪz~iJ+~PJ/&OI |c צĆ$؆do  ka +-bgRky+*%cʑkoo"3 V NC5Rߊ oW~>#ƝkG%Y#WU2CM y^u2~Sa<ENUd̲ 50n_ l0r còo/㵹)a}Rm12[=J9㘟B>Rq2s/]9;Ub\9[8ATp}OڎܖœN,m8]&J 6N.Xsl \j|`fS.!8^2IQƜE^0Z~ELww9~`>sϞ̓OS׏$'8}#ni#0\vv<`WqYX^ЛeVd5m;44h=LKZ~8Mm`0$7! [mgHVӷ8NgI. ._pnd nW&PH5WK , P ~ tFy񁭗9ca`S\C%s\7v̤Xs 0;B[fT;_Szѿ3ze1-^q"YJ?0f9)tC"R(G̎Ybp*E?cUpZ>j^>J%qQIٿ/ Gg'9O?E[82vkQB7,V} ݤ|?s(;:z{~2wrޜC|ƦEA57 q A=r\H7J>P^$qDh e2pttj-YofC5dg5-K)>y$ٍ"s4n>o]ҶY qnxeݥ9C>ݜFJoJ*+>&dZ!( (ҞqUג^uv?_ R1υĩEʴMu),~ yL*.SL\4Ǟ) v{pdMMO .mxIHbxB3IS{=@~ !Cs=23![Ux=khȵ(w4$ `y0N;Vo$B1Β'@Rz:1EaJZ:D/~Gw~/JZIn}Oc.\2B] ??м#uOQn [Jv$fVI\4gh~ "'!"NjI7th1;?Qs;:⓲K-q :KLzξz=D)˞ pjބ\wkV鲓ҳ1f𠺳k\^.\w}ftgz}:ͨ`m'Z;`WICW!0?Ȍp։̜~d5qfɧ(fȌ*9>vciJQ14ժ\:_b╸RmZ ?*& svǠӞx۞~P}/h-S?s sځ؝ }i.o|{I,v#AGvՒF̀_g!M;o=xtFm\/T"=k$Q ޶>J j 4.!6Ghs+@4PT#TPNTC>Iu=-\qF칶}.-hޗ-|s?.@uEGlU5D Cvӈ7Nq~|DWLGw 1u~|SvKB<] ;QzD>KfBGN%>A":0(* ڍk*v6&ֱ& |H7%H{3PaWlPP<6]* }v+*,{9[!s!Fma?#ZS)ɲoYk= wόshId ?P=6]o9tZυ|t_a#NȣĜ1/cOHHZ%)FVnEtD9`%U3!0vfNe&ߘ>Xa!.Ѥf.'z_ns{+0xʩBG󡢦UEGBѹ%p"3*ozfȄ`f?Mc=4ۮfUd 4W(EFIn8UW:b+ghE[NaDt-T)B3,r}E5l Zz@౴$O0̃/,7E$lm·!>!S6S[Q4u- ||]p4eS{ޚg׶EH;#J%o5%5j }wz\F6=z;HxW-c}n@Mh>h\G8˞8GzrDbK}Cu9FPC@tZD@TvhAcs_~ݝfsK=GD&2 ^G=hihz#~dN~p#F'#{Nڂ0I6ҟ/l&W=%vL"fhmaz'0x.xhPWju߷/:V1Þ 2$rMduն?:O[m{ "'|sl!}/-}e`#$u@Vm3\[hN1ZK l +5b3ӕ$.7J]>~@g<}҃j!#)ˢ ~W'PfagX_yS$A˭w[|ƸH;7r4E,c,6w-Gvk9JdY#VmGwFz#{ -5 z#;G ȫR `CI3!֛P8,KG }l,|}lv@2jWI"Ouhڏy HOLrU(OE=N{˼Ke:&qYDQ]cvFL|u };6V?;6 ېp>a;K&:ҙdp7-'^tBu2EWMhU 6Ϙu<@MTe|$g ]>-ӳwC8! ɫ%cP}AOi;ARw v=uB%/~Jr!6 T'rxUg5jfpav߁`):}l3Pqkf>Ŧ.FE΢P|SNoQ&ɫ:묓Қb|,9([J7}6G_;8FJqQF͗XOP_~L[ر0P.}QT>4guxH?AG1[؎b^H9VVm]Z?zʼnF9>K0ٟ| HʠQ1̚OElU !eށ1$B#=:QMﱌ Bͫm:NdPZДn j_OeC_xP"Y&FbYzi2g\l:E+zt[ɟ]&z ڒ=R"9 N^1"'S!:$1P$c`{~&%>?@lo)㾛Gm9E}j[#;.8a1(OqL)|A7Î%lp5>o!-5h|jy} I Mm9:MҭnЃou/cw1ϛ1xlgH/O'<µ,nkl}!Mzߔ _{{LLkפ1a<&u$1@c&z NQZ©l8-JLweRbaԸaJ=mB HN8b6>"`trCїO[7 T5Org w3pz7`%,ʁ6vٟOJ=4_.+2_9s & M{g&شT~ڑ[ʥ8۱ҺS+N1 nUfKvp2"yKIHN\˕OhXv\q* Fti{1!k1`2MXe;^Ld2< .1&wugD YUl`kbu!?M%s<T8P1Z'%.ZUg}!R^!Yv\bz C8 Ql{.)s7n2}~Xj?G6@Fm{s*{IBV189̨pĞy㓔ٱr2\j@31u׳S5 mb[I><ۼKcm+Ԣ`Ȃݸ\Q: qVAG6Qڼ5D7A=Q7m|[ӠG/g+iM!=2Ӹ5'zfrWR&c\bc|;ūF>K91mܡ";fQ%NNޘ[WW)lgBgҌpMrHZ fM ^:WDfk>ʶye|lݰQEV<TwvJ&Cb58CpuL[Pv߉ L;E:F^%/L Z4MjԊ)87h  iFd&_AB>^nӣIy(GA:$Sg~= J-)St^m.ԡ}Uv:-WNj$cW0 ]Z_<=iד O+Smi}DLRK$95vKAs]$MKN•zϗ>~,T$/~mqe?rO};̺yg\_=}IDL BŃb[:YHzYafT`!3gGIJsB?WSq9B>=T\ckA:,-I@#Йgjt-z2E`_Pc"W$} <*(E=^Gx^'`*x_$(,F]*v-{+ *nн1_?vp/L+YU2ѷɧ10ps<&ccJxxbHڛ/{^TVY>7z dOC;JΫy;s<԰* WFf*2hu˸+s$ +BQś=* Gc,ux܏%1wdR 7ڜ.ά2j2O5#9!iߣjIhJ<vx+p®%tJUIiNKCt$=d [`Fw\) P|{MU * \9*;k|e5A%,8qOZ0C ԾM\WDjegC158\hBwK0v{.x\jf7I.^^f45\p9HGtʴD.R,kޖ.ofϐn+/uFJO~+gĝkO,=1NҞ1on̨=vijsI٧?TjS !)f'p<%9%vϱziȥ }?`- ^{:.{t Aj\tp1գr'ߌL7:t -Eͬ E% J9g7"xiW 6Gznmˆ,=+ !//+gjl,U'Сx~_o'ǧY YVW5pΐ^)|Pa[yLabeejzO@A]g[ȫlʁeCuʽ%4P79r}W\L|m}N9"iـ9af=eO{͇;W!w[q/,l&ZxW=f lZxp&o`F){Ht%3<4ﮑ ?/de6JRfCydC'26X&Tf 7o1Uzߑh>5( z du !Xc4ga$Ծ7LE?κAm6>ïWD} ƿ ?3]s Sc'rGS9.=n -V ex1V^cZA&bKӓ`O/Mv[Tr ^*OŊ}L]e6'&4"PWNՇ`zE.e<tJ]o3V[=c/.|⏁̐g7r #M)\gha S y8E(8yf\&5HΡZjlWv VNx͇wJoB!,6ח[5k_1l v.CJWEyg2 on"t_8ї(@4qt}j޹~ދa?ٮelnQ{%C;6\߲o 6b>.q"mׯ2X}-#j@ҝ^pd#5 \'L绰HJkC!&&H-ZSQpas;Dosz ʺ? \ѬtRP.y|T@ ƽJ3=Ý%(`rz|l$CnWxY4ׇD+i e1BufF asa7:vܽg<5/B%X-Cvf7b?s} )~Yv'Vj/bUC+g=Cɱ;q!=,rmA!謀WO=⠧0How T"Dԇ.ھwv~I&`Y Swkz8<-taM2}Eΰ6JYꑤg9ebw+ḷF0!=ؤ)e_ S?p“TW֮ g:]b<1eAiWˌ& vNřv>/!ÎjwKNxlz w|l>7xsF)IS/ @hYR~bҧϱʔ*t_.LJ&CH`JQOUNn =^YatGToh| DPck _å,w3:[ ȴP$x8rnQX'Vg^ɂx]<$ysb==aZViլR;P+Aw\͠(&w~XR4KFj QX)tzS3C ,& k̊7LF3.|4d :\‹6@U7#<pnA(YfTWA#Ek1;[>7OOb]/}w9WE6'<{P̕27RjQ{R}v \D%æEZJ C9|rnevIëDhD O CPABQO?8;ClE> !#e,4|Rj)/' [ڻk/SVd:#tŐ ˪wNMg7 x"Y^oLq9jW|bWEvK` xkDvM՗K 0vFɸE;M\>ks@ڑ&Fj ȿv(7 2|*"+&jhe׌c"NTz5輛is/M[E3Enh->U~Rbܾ4 XgMXhF,͟=7v O]Z7RZ cax5qbW+U2&lFf״V{y73qɶ#=y&Zj\|x-+ ۅ"HnRԗ'tG%/w|&,O"u8eJrS-4-9s%6ЖbB_Ɣ|{M]lh?#P.]2 )-/ӛDi^IW6pcLJ$fa4skcG1ܰ[ Vmޘv޶FbCZeMp&bI<`[.VAVp62Qq>anprDjA8% B;g)TᵫI(ͮ*6mD1ˆl!ӂXC_?GtK=FouŊuVă"iiX'| ˩8-Κ}!)hnjIH,uJD@8*+HOp$r;b9eTeBiǞ VS1!mEpUI?DtFjݔ"f$?!xV)nSB%@56n}Z*fSTI6]&)IOIr ߡW0?qd>{h"#ԥ;i!xlu ' hd>q9y5:,?O*J\ õs~G ĴT? ^k"te.02/_jme`nI {FY,}r}J*$iVƆ!Qd *N)]y Jݶ ,$t*S|n?$@Vҏϑ@)hmЧSF.;cxe`hzm?Y_֏OK5аo Pge e'Qsi&oNҒL3ґs-Akv}"mL?4cs蒻ѫdYn?;?xBC,]ܫ^XpluI}o(>L`vb9#1|;:>;j(P #'=qj~p}M WT96bNPGʆtN)d]i7JOˀB_ʜzqȜ!pP!lW#)ޫ(zH)d=L(\'ܵk$tj:ͰCKh.sƌcIۛw<ݮY(*n`RYO(2^1ĖqƵd[9T"hwZСۥ<}6NfR؋EOTL]O^ /a/ ܘ2VM+kC:eTÄVÕ^wL@|W VJC)N-^^|IqŅh 8s^|zd%6$('^S/=wȼ`O85'zIjtĵ"1,)Y {$~P*i^v,Q9p Y+5.fcII{lI7)4&/[ܟw>:#Cwt h rmD`2WH2 -kśClc>~cR͑)_K@ndOK2Rehiץ҄[3ֈ}gwɐ?t,:Ob>ѭ;Ɋh()154\`7]Syt#`1Y>%0> ֟cp6WVxY#3 K"wVօNBmE-=e: kK]uBaL7K5;V8`}˷g{Dy:!7ּu`/pS9Gp+r@RL-5$>C_j>vz1_)ަII#$L[,*fv`i76Pyk=a ςYR\3 j2.΄|W&,-17 r؎{ۧ2M,?x'Lѭ69Sfإ/ZOo#džKt94(y3:Oxer}RkdG:|eEz*/Vbi@L+Pٗ-94-Hyu^|di. u_@2Yr͊`#LsN!Gv"wܤ[BD/[YEahx6MxxiԶ7MP*pp끐zFaXeSs@`sE$%$Wq2!wˌkUxWe\9iJ:"#tF ;(-Y`;2<Ҵi`[I^}z5ͼV <0Ǯ[BG1a* PMȨG|_y,AQ|ԐF )$}a^zȠ FRy`e! ;#J5l턅MDO;d[vz-0h3xd5#=YdPO.BحEBl6ND=,O 0kT#2p#Lۡ]o- h[Ox8Pe:b# @Xo 2ѪW}q,={>r !MWxǵ~v *UO99(o9a>|սr\w]duWhhZᙆھF݂/j&l&\⫷ Uk>lQ I#O.}5O<>`K.$H-*`X Zftm_Q(<ܩBKACI @k:?=)>]bҋc28W4 B7}Wcq:Q'Q_vS^`IK ]yYJ!Lvl&41=^c1q_Üq;\ ;+9jjQz͞#MPCh6[mĝ ò+"\GU*8 ]36G3O8gܗxGc\1ٹoi eO{:m7R2J@IKHHM3eeI;q傮ѩ'Y7kfvy >6*]'<}" )'Vݶf4374P7O>2Έ&F䨿}d BӌwӓS}r/ ;=kq<:XWD!ޒ>/a|&lsHj}Besv $$ڲؙsQB<0NnLRqGB4yD};ݼJ^G.E/7|ʼh"򔣒M’yc騩:l W cE~~.ؽAݝ$!nˎ wh/+m \?٘D&e~Rgq A?%k!Lp>BZ_O{ sN_D80\?W0X݅#de$Ki3/o+=̓gz7v5_-K'$q೜ g*48O)K*;%2D[^!D ^峰чl{^\3ye%wzZ49_Wi.Jl ~߮(<ʇuZɫO eߏ ѡPJ\\FXq2u."g8("Unbh`b]>Aِ9ew'9O,ggChPɿNg>\;_,>p:痰C$M  (Bk+ ~dex(#iuȈ߯>+:or0?? X^pv -NO?\>K%vLH|e pt+s)q!>kXMH.6)F䕤3"c,U({{ ^P겻RKrb%lǜ`2k-Cd,S;*"~9|VtEv{‰I.ϧąc>4񔆭S x^IءNJ+A}.ӽ[Dw}E{LŊ#҇Iw 5Ww9c# אh&96ˆ]DZ^OCCa9/nv17.syxqz∰sY#di) gMHCӈЭOcء4 :Ap͏';;&}xK lY˱4'!AQqeD`kV#S.a'D j3l%\ٳ|J47rύNPn]zKd<|Pu7|ExWGV i˂l7H1D[h`[ݶJyqFV]ySoO4OǮt&qÖmW~csNɯq5qM'Q~$.a֭'L_Cf>D/y|9ޣG;Dp7V$ٹgS ¼KegBAG~dT'')hޡ.FTlo;iϔ9?>Tdr} c[UrNSi}68Hbd6S}lT#'.7|z&kXeٞ I~Ǯ\T$ 䡴g}v&h?(*8u-۲? d?wlGpI;ɦrYU߱9.S+a~kvl68C}v ;g}>eSBzn|´53~g_jKG[3*N}ԍgֈ1b\42q} ѶV trviLD¹an&D$!ȩo7gy9a%q򄬦ԇ`W,oS_1 @l/3DM#ԨU\6I{Ϡjtš.؋'Rlh;[w<$6zqu|AHW!e2z^7-_)_E;`92pT]?3c⨪5~#|\O-30I©\8-zGĴvMI=BCIv]49X} m?BS7S15(P.Q/kŮ^^)I]iW^#1Oa!pѡզd2RB}yWy.KLp[hU1ڊ%i8YGtP| nJ,S4p 3O4w="o֢Eh,ECq/s#̢2G]פ0u2]lu 2SHƸx{h-?mU6? ȶrv. Z4~R d{TXUVY`II<&ؓ&5jMz6z1"^xU_}[M’p-1 M%K7kzr{Q 5ȮYm];^j7G=2>QlMl>v1(:bl*`"<,STh:3)r)CH5eĎ[I8 T+;B~^*cOKj{˕A RK۱=>,0s%7*{hs[G $eN@.1? }7 ZP3R˕GK√kI(=?[w6Tn{IJ~V=Ze!Pl5#}e%ّ"lxx#< L5L($pxzў%pi!)AaEA6ҳs>\75uψ|bx{WNޒZ5o̵Jت|cR_)8Iح0O7=[;ɨE:؁4tĈA|t/➊#Fp|%QDT_z?K'[QΑXC䉧Uv8j.Áumw&P6O7fT(qJjdwc^Rw!zǬJlS\R ^CpC.QLr)"lA<ڒr>LK~=2OEmԎT}5(srMqL]; vQ|ASbSc ck3L+n)b_9xd4 V/yޮ'IU\C*Tu)) 1NgCEc${KMwәZ,٪_onJUê®Ws8ҋ4fS]KPdG2˹=05?KΦ̸H>}7fǻ)_wϪMg˕?l+ 7'R#h؋Odh T'_jQq :0,Wmhp9V,3Ew GZsJ8h]`]^F>Eա)=蜗V9սCO0i ~e$\a*C BHQB!QFЮsɈ"K!6yH(?oWShj{ScasC+l]pfSv?쀆9ņBSaqK39L=aY2K=gp8_d.<-yNIy9 | emMitiq1>L"rjapJb;u.i0Si8 :V\I56v!jfOMmgUp@:Ztu~M|2|w|SMF'}t!-EjئG4fCU E'&J+![1\uK˕"Hrs +Wnpy(4?M s+C%L"OwOPϷyx*Q4CHh`˷4k Hy`"-p2t"[Bnt|Sl!,&-.Jfl\־JyKTMor*[,zw勒>1{!v=[ +oj{3'ՠdy~lT2 `jGQ[F7*kT7Kze LG}hhWCk{bl71v~;=_ k4?|YAL JH.-![ۀ|<_AQoqM Bk?g}Bo ^pe=2rIG.}Z[Ea!¬g~CzencHyxaMJ() }<ǹlp+\ElW<f9"g޽:`~-cLnn:p;3 57q>S>XL(J&C!ߣ5Iҡ5LqJfhTQ S )*۸K=GIc* `q[AKU {kozXۖ~#$J91Rw&Z~dQbq\HgF8^JdCi|Y-'<\"=_?Pt fb7~\saѾe,DM6#_;cruF@&6z ܚ1$RbDn] B?3(DDGQ;n {6 ~>1+I͖? /Ė FC[z/|<(⟑}Q>L 螂ƽ]J<g~[de~ -T4e.XL.]IxKÔ'G9E6ivwY'0~=z>R -mOMJ)Z<1 ԥMˌ tbIO"[ %#K8oUl7L-7UY kSkY=Rάp,S6HFC琜+M)?ReBJzӒ"6;w1tϟU0%U>`.w9_w@)%aM ݞL=^r9R5H&Ko5y~r>YtbokMFbJ60kh@K%hM4w>/գDd3[=V~YU#C95wV0F7GjuG}i8 5y+'Ґ mpY3&ʈIdi ]q–gΔw8v3?Enq\i'eOe `}{/Mi`N'14=I}G=z ۤ\LE@DgHIĿ2o@;SY՗BovLռ ﳧaaEubͶv$}8MK!ŅP3 &&,3uֈY \:$nqe؞ WTv ; }XjGգ kY@g㣃E8ǃ 1GٕރSRW8 1e9fMMWX9}i$jGWc(-WU~)?vXuAhoV#i.oG5OSN]t80Tƕ Z)kCuHIm 7r;Nm A?%g+\ݍ~z p˙/3#Ƶ3nժHӏ^2ބm]9vh+skd~U.C,uJz2 |#v>"k\KA˼T,x.)`#yņ*%S̶QbOSIHd"T3ˮ Vː]NS4;oŞIoC>,{ YT=~c5%d{na oC'2`{pS^|w\msz$=_;P_ЭyKd+8ݯ7)H4brf`7Tc\Np;on#MQ͠C #!g*;h3-U!ރ_S>(ɅѧZsGZ85k- \Ca!"%Uba/==n)t}r'eqHvM uDvr^xj騵G>r1 19Ic\D$#`\ⶰ+c % =q'=[#/”ryuix`"Tԋ+#MZ-ZdU/e#OA#wx N{z4X{]1Ua],=c7A E{&JihŵTk_˰Xע-ضVO e'5%EKʞ8}#;jo({_da0@}Jo2isYv#0L%ښa2ռg(=R0zKhm+ wq$?f [g $XU{ݹߙ#}pa8<暹}FBV~9:n[] \-zcvc&^i'@6*Ott+MH.OqRe _j-Û;j7G2:#ƐGӆ|#wK|#ZN7eVtz]8bĻ T?=kPm蹵I!W-"8.}CCZ5LW>VMă=/nWu2~Mtaj3F9ze}3mr7a~mfEC0NSxd#cCͭ pP3ѩG4׬ql5۲oG1~82Xu8J*LܟqdO<5vpٓ]1j;0]Ws_F߳HwĚG _r><;>VNjM0+ + :/,laS/Ծ|?ѪG]% Ĵ4WBb^2FP54?qZ6"~O}MrAp9bm:M1UCER6!m)ILuvJˢJQ]%ПʊSd`)>2II{Vd Hm4jnLոWg]r1;{yֻFGN:,xB깶 e~\՚[ pvVCoc6ϲIJQzyL3)$[P҇V77nC[g^ S]oYapG/=h.Gajgiu.ܐ˻w;&0RbYk jfRMqcb\(8QȖuM##مbϻLnWz@# C^q $dg׬AbPQݍ~Y%_HQ>2~ ݣ ^9SibkgOG;0le_.peCِCV=6o._#@%r bE!d[x~׌nR抉xgU{GkEU!?]](qHMsU}a[-3sal ۶eٹywMo[I_x;F\fv)&~$G+-W^UÝlq>=fRTw{CE@oRO\+m f-5KEe i藊,[x9v+y-pufƮ8"'aKh߈{?O)voHQT ~n$NI\&0E@yq]g`^۹8Jm{]搶Up)4?3]=F pr0ِz図Jm!)ͣJHA]=&^'/J|*2զxk s@&I/2B}AkY!e 7Oq `9I$oAYk)F}i帄ǻ\f~;O+>խ{~Njw #Br]]jAR-cZ}lg?3Hoc<Ja7Fm=+zC!N_qTH~<îp.6 Iymv$}vٟ5t,.YdgٟT[iEԫ<|e⍃Jߜy Xr($2@h6[,+Y`5h泾"5|~XKAYL.ބ~WMb eNb6 +'<as DNYh?2ϸv̄Qۛ[:w&Ḙ;{LkRMX=!䁶U>CNC 1IϡI҉ U;P_vJ>ԅ5@RDfrK4A-k>  eUl_8zd zLhF ݗ9##+pǘ+شNj(fqY^ߓϯ ӓ\'3"&xPn,jcIͩݕ 1_^SN'[O(&iW$rx!?x*h@*$;2:M%XQ䅀"I+6衽cP06QK"c/Dp$PbX <}Lgr3eJ5V\[}ۑs# m!a}|,*ϏẐ1T]F[{Cs_={O_5N5 Aþ_g Re ѧi4wQoz8[ 'kVC̷-G%ݯ<,:{#| nDbhtǀ.a(5#ǗtuQ=ݔࠧ쁊t=+s֛;}Cl=7qҩ5dkV C)5h\wߥjɖ;Nsi"N؁Q>~‚[EV"G:*~@soi tI(Ko>zd{ĀfrU̶}ѢǢ" Y?&\^v~M'2W@YA׀{)oF AzÛƫ4(6vHRSl>j~jr,t% v䕦| h ɆDSR__mғ eUrx(ԱpK#?T>oix d䞜2^cw4EW:"Aq]H(p8bdRWTUp ^)n O9uKĈ)MkZnno0>!I ըcSDi^s}'nAhXfwV]Rr_9 RCzU@&R?C9Bp̌hdLZ]! "(:`|2͇Xv60􍷙L`H=l= _ڐfD"4" e<HH KJ oz?%hWe>B X8~AL]+8>k4l#x X,+^!u;I\>=ia7otF靧09pn.17=eҍ_zTJRb)=ʑs{TkNGD*ֹu(i$c8Fw|⿼! ,FHļĨ1 CpPU}%%tR|<"!6.Q|ɼc0f!h*'ۡw\>!PtH F"|۱l!/Ž3QF]d0ĥ,MhF<|]!6`"E HzYYZ;Kpx $$yE3m(6\ZM $@\޵ 2,r CVY0,Gw>2bQĮw~]և!(8r+1Y^v0ACcaiCB2^9p^}ȖXPXď_$2yG kA7Ɵcd!=lbVΣ]~]CU_iVDDO>\v)Pө:Eqp !KPܤZU6uF#h0\.LgFttCЪjT?; B'g ]N/^ȴР-"yDP\o^oL9SnH܊BĽ!אH=CCC>a8vvE|Rhs!W]D$ɟu2I ptktActΛ:fȶ3!GHAݾ I[m NϾ*nF݋rQ:WHpv״FJ"^|Nޱ1뺮 8}[;,!hm#ľr+@їUy{DJo[oW^u@/I1džKg3aN+WTW㗢7UBoPwMkys%Ne}H"pL 6؎Rԃ]I}-)n|kWImS욓U.}TL23Oa}}J14lJeJ^TY5)흷_ʬYZ~zj eIѻ/WxHCb0",Ÿד7Sq2Í^țі\6@d1U}q88*v *OO!z3L/ ݤ*rF~6P#^j/1-iEU?eϖr>E58o=y@?vpzWZ[c1@aUa \io]<}5)CH+,WM||RuEh3om.7uόu krvb(wEq e/sDĈB-MQ‹wsNNuy%OWT5ڐCa)Ube[aE@̮@^EgH 1k^B7,_b)E|-j'Twn /ck"g»PQǴՊq. =aF,rΉ L~W}=ήIW@qhmtÀ%_po Kv?UDUIq5HrVf.Cvd=un5`5j͞kG@.v gƒMz]Kfs5cPyuH$SBa[꾄`!&\zfo b5(%D??jΫ NzK͈|ϜHk{9~h';}h{ac8= Y!b$XH \K:X4C}S! h`ݘUm~1 .TP#G.x$Z y2#)AN_\w=ͥN[GC$y,D\SZۆ=WVOyxjV~hO8iGNpbJ w9G<+<>,gD/ۧϠ2ThȊ`tacaBn&`Xmv"WOQtYGwʈ]@{7\2aOkݼaH>f 0ҦC׵'PuȬ٘DoX}(}kw 3׊.v (zTgW_x/z>I|oYޥ}RF(CT~{y ~ t7ft*/QVV}?8at%qHa' v]t6?>A~? p)aV6L8&a{{.X_wL8n:r_l&h"J!y؉s}8w6:?M gHb@K /|AI ގ7zj-#9i0iO%Ľ}E<Uh@x)J8>b%k+A({|;o4۪UVVeS 9+v"@JXYݗ)CJ~_z=TdѦ Ɋnp^ڒsrDqm% >&hsȫ[Rj]oDQPz|- DxՖMF=~"mP邠[bYRk=?$(! [$ H≆لY.e Zr>R|NX-e0tvpBovܞQ/2P/J.j,ֽviq8 I%ߡä?R"5fl|1Q6bt7Hd!m7/WAUc2C9HI"qS!{7[JR&!LJ/ -bkjqV}z_RB$Gy> e o0j'UmsVe0g\#s\^V4Nk1ݢFD"lmʷ֦x# eyq iWV 'QsMTgIy)pVvuhGn9Fg dG&+b$ `?15`5JaR"K.b7;*|9HiDdYDPi}(J=_[`v!Sx/ӔMhkR8FYzOf{v Zޘ/9͏wB:JT}`ITLr;x"=<Qƺ,̨vnt߬+v')^ga=74a|Ǒzavc`۔^pI1d-"sI1 /S~vO)<>}•K+gD䦢8dWR(X?ڂm'ʍ8'AmAjyzos2אÈS?ҴexGJ׈bW%:LhIS 0F⟲*FLu|ً-]3) +Z +>Y_;6i-.ù3Fʖ~Ꝥ̕ =aphy.S5Ezz܀Q 9W3KEj4-źeJVC2A0jR&jm s+!`)G׼_ܵgf{[]HئP@p!hW6ܢ)  gw P>Mԇ(<{/R.w˱VlՊ wr8I7TDUV*2֚lKHy"ɨ?Bh[q ZT6L]oX:懩Lahs^fO!MPt?7VY@FT )vZ )}&Gjʬt*Ԭ<2-N"nbC˞S:]MW ޔS Ơ)k# ~$<Ꮷl<.c>`mS#`U_Qv=|m qsw쾁(w{z-5|iy![d0wy{+ҽ5JqZR CvFz@SIDwmR̋-S]1}R}2`,ul] U ^oӖچ5l MX}S&nSaՏE]߱ OW$zo9 =P/ w mGo0,{ۥQFR?IO+κTSڦTҥhWE` ch_0lYZkd|2UU᣼]ʔ)tJGt(Og=C׀,CO s] -SLj~5v?ITbTM n - ]hTiQ@yz i?lkj婾L"xAYW ,nb} NpY{A+ёB:Gkyoz&7|xΫ}H0ҋ7c/O3lzט ?hܫzIkSp)C=}l$7|}W$b+ S}똟RŴ $a7tYĘXsŗTX[9"hM]̊xka#V4{d[MOQϋ.n _`3@vS)<-ZL˟OT!>rY΢ `5/!Bߟr5>cs+>G$YgM"',#YH?;<pvezdk;LvEوOǻlS }T@x`_g.klOE)ۢzx Џ;ܱprjPc5YȎ7V sÐ&~w.o$62hO2]\t@]>eArs TV"om]5Oſ3e6xv+7C&@j @l8Agg3Lu8C*b!LRcᑫ N9}:˫ ׂaoɍ +ZSu" lRO8>ɡ*ɜߡ[P?{"@u~d=EOfj}܌Tv^Z쵷a`稑{$5}a O_rsYLXL^. H[^RQDWy-bXe\ݹJU ezR1kk`@O(o޻ȉeݧZb1V>"b62,C/hCyh-IĒ`EB@ă]- rws[f)nk^U eIr3Cdɵ23 4df!|J%I;[2~dP>c8&)Ufև* ̼>aam sݞ{w {[)VU𹰱tODe6"9vRfk!!4p//d ikٶn2gW!_dWl_\&˶^u}n_г3P$"iRfʻNYz o;5K\7RϤ@|sAK7&U)2AE_ѕ&B(EPrxpȹYK(:٫':^`ϖb7ب#~Gn@N_yKQ#ȝua'9@l7b:C"EVLmGsEDJv6:X5ND>6QWO_ VCمbC=_{BzP؄W&Qγ>sw70̵a*";T#ILu3eHг>qW1$s6xXϗ!zu7`2Gq2(=`%t|듯20и*Ҧ!>.< ݹus[l;PhɹD.XR(i8IPC9D+QgdY)o9f/eZ~`PRYtޮu[n&q{př7װ'gNa~~ 2DljS,O>"0Gsk{#i  mvcs2҇Η!?V5O|LbJr${!6T%P)vr-U7Ow^:4]8$_R2k;ݯ,]E+#uv~w9 B^eb<]!d):=@Yu]k6x}|bp_8qMMb?]V vj(q ~!UI~|Kbd̲wFN>Bp/ھ*ڼo zDkK^RiM PSՀ&QO'Y{.Y IB5V^ofvhCb0P .N{~k8h-blg#4Iێz_&RՀL*s:s6# 6ϟji 5=^c!wYSi'BXtEUx)TcSd=e]l6u}[nkH ,0V]\_|dKcbG^CwHRG]t ߤ<ފa AZi(.l YڶB{煍.ʽ46_zmu"guaW\6BJ].%PРp6hH/e]+ZZ4Z=XEGO?; urwTmEDg/^#x(|opv.Wu_Xm9yϕ6$,'~ k-0KrhGH7~1;CnaW$xA^ *|~m *Y4YG^/? `Y5|Hʤ]ͩٱsv_5كvdjI aC%Y=u-bakÓ6k׫X&7OjX/Ss>OOyU>EoC>~m\ O5=?ezǭZ#Xxf)[4lu*cV>|ӻa6u;wS.S9X`LEֿҼBS%eKICw0qo |@R hP =mȇڈ~ 3{y-uuIP]XkwQ~]fJ!/f龐vip w1 0r/#& 8l J]\eBثv>I%ɽ^peX9w`{_y ~c-,$e<0몾*Uԭdcs?|Ӽ) ,qNn_F8dHRp+&$xPtumcE"o3E<805R*uH5uewT=KB* J/E^B{ Nԅ-afoW|Z!d\2JDTP}vJ/O5XWi2Е9#ꥩ1ڜTXU!z^^`)՞M(Mv]P #.Sȳ(Su`2p+Ԕ2t:_؁QCptgPH*H|:B' ܝsI!HE5XIGk> چ:>ubG[LU4yF b\_"YȰ)#-- M_ rka]6z1x+Y%]6 ^y@KjІ]FĴ#6&h(xnwLSJJ_f MAW;ױ5tӣŎrV>\wl168i[;v?egQ w!p.`0YŦ,ٍ9\yA$H7Vɏ˹\τe2n\Hشx[ؓ'(c*$cw472[Hvpbt!!eƌ}Ad B%E0P$o/L6.¬d\} ɺ+iCyQVe} 3πf;M.7}d- Q I|rQfnÆ cI9ɋ#],"}n%ħBuˣYt`Kdi'srκ=RvNzxHC)wש7#LM>$G>ɣ&mr}8U@OI{ lJБ0 L"l?v')MJnCDNla{S9\=ja&Mz45z 5<8o6"̠<\+Q.y jӢ$2RUm=﷯nN"zs*̮,$"~n_kûu1p_/"lڐ FCʾȔN1z.tH١~޽Nq:C{CtfqFb_r2N{ʣǒ p].9p] pñčZD'n -JǟȀq{~`nP.aOq_A,u)jېb2K>/凞l \"(w.kX=(휅fV@Թ5"Cc.㉌AoXX{eCNz~$kӗv襽n(< #mNR^p9,C":姂eQHv!}%L^(c{^H9N 0 vrGw-CQfV9iG'fgz!e"}Vْ&/תCuBdK`-X>T.]5su7-|dAYS*C~t.'jCv!(-LC8"7ܤۜd!u;6?: ovDhVx.i)tt<(]QM}kMClLë-&} J<[*ረuniո2Fµ' t'{3P;IԹ1=oh-9卖khDC ԙM7<7M=(([v T񟴦H]uFS +Ůx6d/ lGe sv_qYS e[*f*=qpm~b>/IK66ic" w]S1z(;[$ ô6nݸmVh"q"D!ك@~) õ{ѧ6 3HK"=HƐи׉p4O+-PRB⓵:Lė֥I 1gؼ1מ,? g?}_e#)#Rڝ)S0vI;G;f30cVe7}ʕ.TtGXDK[~_YWY'eǶM,PC&eIYH:@gKHRy]CźUɊ%^RZCuޮ¤pߣWgeǤzlKH\ ள$n(ޏ{B?J(VWFqy'AAI9tcf;.Jw'dE.]!| GxCߚN<9}dk%lI lzkiQ%{#gL$H۲u"t ]zuL`J¶؈>w!Cz9Y6-RQ~K Ap"/F+˯ib?$X<nqOaQj߷/ZM%be:j>)N&o:Ä]OuF]\#=7}?vuP:fe:M* Ю.3s@mH t`Us'P[SzHU7)8R7P|'tbRmX[Eu7\rV8OOq WxsoJb-yP9n>j$( Qz{tukoj{9:RknT[nvaem%I&! i|]X!;fC)ua"C^i9ES g= <6nW\Z˓=Yj|x#˪(;XV{H!0Tzn'gB\`k >uaL=N[]V%9*i ,TJ^1 ֓WGjL5iLd`7-HD*˘) fQ*WY(z"RvؙIgvM9`z'Sϖ@^b^7G Nz I /; NXo\#`xZTS;b>z7eѼcΠL :d!'B!PJe`h(gR1XʖbZqw &,!ƅ& ?QxzHMQ@DK|~@5;-&bp\g;P,-zD  gs/LX [_|HjeH2( `PUn"d3;8ɑd$$ bd*=&SX8YpMI߉DfxpDX+| 'd1݂al܅w/1rNPu,?-Wr$+#qfXV,UĘ8R`o\>gs)F=h'͸MHx$X܈Jd*c9S;S.b Vq4$&vMlHuʯ"N j|gi#1 ӿ;a(v WަE9b}c5Mߞ0bMh%+ϔOv<E,q֞S}"bp٨G7Az4Ie0#h]Fe{AǛX6nP!뿈塭zۓz[)^hW{2ڄޚGv5֟e<")W{wlJ;2Jb4Mݲp{oXxv0;kp20J],WrY Trjo>5S)ER?Cq5Hsk~gכQ^f(wS` =\1IGH \C6:Ps1*17A4b󿘭3XNLlK*f4$n?k~kl'"+n^L2PbۓTeDTG` '}˭MEע\C4^ \6 J;C2Q*;vy:ݔ&2| ǀ5F% c}QM}oBv$zCFPJs~`kCL~g=&AM BfƵ(/9:z:m[KNƯv5QMn'Ŵ^.ڛB<Ġdݷ]C6ua/& wڤ*9*Ę} 2@3*̉0պ'Q* Vm j]Z֮?aab^\L=/k3$Ac@yAJ hǾoz@rh:E;?@S3 dEA xʋK)d RiCq#ZQG'yaX1F]#Jn>5匆~ O*PC$$kӽY}?U'.yDߑݢ6JSNihIYS3Z :dz60#88=&lI\ zeQW&>ո'Uck_,`HN>8$FnUv0꼟&9׳өZʛV/oИɧ S/SO~t KN7֑T_6׃t1h:IUXYjg1{iE!0F~OnxMٗsպ\_a9#}"+6Rqª7.& i' F'up5*L֞hW-Գ9e' )8ň_y`l(}L#xU#af߻Qm\rLOud;$HУA^%.m .G:A$<}i=${1WA'Kjp/$:#/׬a:/4qsM; %0%xDUDv"cP5zuaYÈn`h'n!9UMYp%Fx w@ 2i؁y{o1^♒?u|WuՎ; x>EO;H{rUU/YΣvrx(68ץshc lF؄4nztERn|[+2`Xc,_Hj^x}pm v8(1gNSVG$kXDXUY>`( B̾1}& }($؏Qǒ^f24뫝U ёc='옪"rTM&ui9}*+ =O}ѝECb:m륰*\vH06f)F_Rf3Y>1i!Bs-nbx$|=>\L=՟2Sw=~UT|Z[ @tֲHdbLI1 ; h0m:S-Z7zVM۹D{\$cgXY[Wkn ˿|hLG͂,<Ճ^3W .c]"(=H{HYʂ"=L9!Qf0?NWbcv1^zWۈ[$Aiu <'5!mQLRv o5L9ͥ^Bpq:3tZT1s] N]]!w?g+`Qt {N,h)Ȇo{?^&0W5972$3H GZ \oկ':L]I<>Hk: %]pmԧJM%{^EuFA69\ltnvhсN].ul~ưyu PoO&TI.ⶓjwhx-s[p4yBbҐJ4G ac#drP>z鱍 5a?HO5A\\kguls 8T8"k) LNS?rczl1`ꚒUNZ|/9SU:}zc(qL#Cgx, ]C)k+ZDzdn]ɥmosN56Ӱ:'YP{9fǩ`U4K1;4b2=3+OÔY2͂QY+s>9xb,Ah<4~4=* s,~ʦ软2Z 8N+ҒDR\ 6m~S-T` `H.C8hPkA1b< d%-f\:au.[Hkf6'g{Λ^55./sDgxɉ=7C*[bẫRQ̴1Ԝ&h= * `dpֳG;65zˡg퇶VABԺ&Eʕ{E" bU HM꾌 =iz @ e]ڑYㆂX_qו^,%'@L_SW0ҷ#oE{LS&g@]"F$L>B3[iQ۠MWV JSz\3h0β `ǍA^&'<U$ZNjq,t(cZW\cUgȕ“JU]MN"ml9Mg[HN 4]b!CC΄Ɉ=l q3ɲܵW:{q( }z\Na Δ|Rx2Џ);c< 'kV#e7g0(R/B_T1Í:UuCaEr% ǷSU^g{t~u拔&76挂)M*W:/z)'I{3z(s8}̮m!yܡCm` h3|\: 6Uk׏bJ"^ϊ.j+ĻK08q?1au dm# TkHȽ۰A`)|TOT<(BZvi{P{B?6%݆LS#ةZkR[a0\?'}50w:[a>Rl_&g!  aU'oQHfGDz{?tmg6,s\$fGgGD5`ŋ| k ƫ9-vǿ,| gԽ9uH_=Djr8OZ[Bw&BrvuD* |~3Q2x{$:=Sg!QNxF4o_5.T *`Gyq2ZVt FvqH=+Q@,.~. 7,H J y0;h9:2E-6Ũy l0N]Dcbc߾0\?!vNL0*j3gM~H't^ةE}>R!)?j1}QoMFd9DB?-^,G*<5J]D=Ren`i1,d|I2֭csE*Wem6W^"ឩ+QlG8KYا~]nφ[Oh3Q*4vpc*;-Rc K5OaoלUu3nX}3YT =!zyNl%$"=O?8Z6к%?nst\.gZ2|U0&]m\勲0V3pդt d|XC{.Gx(! S V@4O1,򍮽ԇ8lgSYўjO 4A.F-_77b4&~c$m JG>m&#_5rJUOGH3?mN v(3ܲ11L\}t9zq3qrr(Vv12J%h ]?ӊD眅}Δ4<}\wpQ:avAln=һmwMc?"yЎ\AiTXвG͌n<^3PYٌ)j,ʹtzU#<yi zZ_{Chzġ yQAGLѿM*wZ󡨹fPǢhpx]oO%23&:HھXGqߠxcmeqJS+!F6-wbsWN١&@YDN2ŷ^C&J{Z$CxD"> BYLUtVCv|᪐[׶;JPZS1pŴ.~CЖzO! yy댝]Uu`1 wq$%)+sn ;ڬ^:yе%-K"W%W\5,Eғ \4O%_z,9].7 z?("yC+Or=TKo,.zJiV\K<-WHCUЄn[-U]SPV&g?O)q7\\bX5dqF@];(u%s؋/P !o Z\*_ZQ`Ka`W0qI2sdeZO+0& hM8?|:c/ĦjG6r&Rr#t4_g:!~Sn.Jw4?Th̗GW]YT7%l[xHt+]_geba\= Ƅ99`)zT3_ ]+P{8åI*_VGa>'wr U&+`,gČ5$ $I,ko=/Bk#ZTUc3Nv1HьV_&'^eX.J,=+wsBBXp($` ّE z 6;^)5Z5?M1:L[foÇ`'Aw6K7a+(a9L~c2CdXjgҸ!RJ2GYG9X4wp.yiikk̛қxW5 o^xgi]VυW+;'H׎zQlSg iǡp)U`,G=ZXf!>b6W:$4V8H)&M+ |=ϞؘF7 1)E~PPPԺA ΀ cTL#z}Ϯ[>:fGwb㥠XЧA1u];Nɾ_ΡQ0}l =*F!q#?R&݇1>D^׆wC`BX-Z |9sټFVX4Gݍ^cI@ 4$Ql 7.lCwǢxf86=VQ"nNZ;u:]$$oٿ;=]G}|-1F-aWT$M%^*x5 >CM|(QQ:TQ1~z>fJݤ8?:CHhmq{ {(ٹLs4Уl8lRk Za4aVa4d {סz6:15'yPOh~)^Ʊmw?׻P̾H=DT{J+lYLOk_^,}Qay+ݦ{;% 8ӌX|^Rzz̓ Ψ;jVCDkL^+itm]1ߔ#lLOBd@yQޝ糰C;]Z_\s%4&aJ%I!<隬!D@T /O񨛩cVf2gZ눍bzR$x P+;3h)_V‡} JZ9ѓŚ:>l$o~Efkwa|jZEW0I!Osv[b{5/(]%}N"d7&Nd$,#R@ >u vMMK |6R:,(pA6;Y6K=hVP}jXj#bȏ0Mq~pEWLL~%ycԯЂtbwZX =f}k!\DؑAXV%ʐ\ E`C͢xܝQVqD)p2t2 xP~G߸RP4eI٨)GZwQ&twOYeWqFFv!/jK#GOjPR?M>ߩu̽yۙ v€FzD4|Uny6T$}h?ju:K1Fd7#"$(cۣ3Z~2YaA<&k8}"IA>@5Q- L9k e8kd@fTd8h\NL (tnLH yjj0>{c{{PgFe;asyK4yb*Yi:9ѿCt5= !xg/B"u˜M`,y7ܔY3h+ȣ%k)@>|[U+Mq?XS\fsF7GP{r: (ݝ NL˂+8gs*dzFׯ -9`K"k:#ς[U'״s/+>D}ݙ]d!%_2Jǘùt}QƄaDEB,\t*@ __U?=e3O2\ W' 0>JzFFStH>$e("fn]Ge@$^yNY,̫z"uZfn7\~7rcFH]SVn!GN+*ֵ Y(lRm2?g!|w͢;쇼 rtSY2%8,P02t5M>aA@<;2b̀mymI~XTS:5j8)+E5í:y ^Bm-q;w=h8KSxr~!FmpshRݯƽKnj. s} sn$Apџ r .+ ڊ0&=J@n8:K $ 0ַӄ%?N.z~cO bh/VKSzl Kq/I3\Uᶲ' e1`?"WfHeP EL OJUAPM7)i.Iv_^>6ߟ2}Mr9OW$2xOMA;4/Mwٺ rdW-pS+:)4:ɣ`ݱ|[CY~dž.@&@;l=xL wfᄛ2OMaI`i;V!?Ah7"1ǹUjy-bWlG2خd)8+}/, 0*0EAQ$%AIh)ż ~_^6Z:Py[ [rpx.M9!o"ًBS`__+ OِG~D{TX{H(-FR8Kɹ9ָK]FrN;= aWR9Tph(ʍd*Ms+ʈjs_7˰[eqOt AC{` `oI`F]d@Cہ-;Ю^^<( {,cگlu,oH_BvVsі0׏l_EW7K؀O)¶VC*8ԝaa^Wׅm.<ŦVuiLB {ge41#ѩ>z_n_xx2d/0or}mthߔz??/Bh .:?xvן)+L3 8>]BYR_Z̮ m^bime ?מTK w&B{ m׿YݹFx ].g6^]EqDO.(xtfRݯVw.XᚋK_&2IYPAp$&e$eb,S,Ca6V,/0c0?ׯ/m*ق*-KTt9rRS>φtH7=+sm8vI 2T#ѯ7 +^%FlRVsHƒ~r4]75${șM9 Eڝp%Hgjv_Ea.Յ"00萂s*0$$:g=,d\f`ҧ! 'vCƆ“764#{F/#*Y#am^ز$BC'Z`/EE}dLl7>`;y06(gD541- ma/,bvYe[:OAl`ICmuKZ!1'Ͻqd2[-QzQ_:m4hetq2pvzD_\v ]rGa P[2%4umKWdƒHK錐"O;[ /,xB~f`$D%Qd#ѳFOGԣ|Ӕ2ͱ0]w?2<us ,=׏ln"&kbGfEqan$%!˅ͩ~{Z @ /s_/TEGzBbmw 7ݞOH,lr]$'ev}Y\1!:׵9n©38t1$GXp#4SDOͥd5Z<R0(?{_mׇ/>ZN-߿R%)T߇?)} O(6vgTOᾼ` vD}qnٕ/k4p7ޗqӥ-Y%:BK}{_f-ֹE{/?ߗO %eZV]j?˃eD|颕r_FjqQ(89ò VoTZW[kl+WSWؖF‚"<5tVF2FNwy6H"}_c#!VO | 韱ץ|ߔ?j΋QOϢ:3gbidXwGoʱַrǨSx_T4}/}Hf1"$ZMvcq%WHAƿ5zǒtů&}FwLiVleszlD'7ԋ8)Hmd;9逛 UgiiJ `7#`-#.K cɠ Vڀ,tu`IS:wҏ>2 ^VDӇ+1Q}(f̧Z#[a%z]NI$ 7ׅ^ئYzש|%,l0B~u9 Wo+&:-k̷ Z&i}Or98n/:A?G& 89!)^>[e:!ݐuUntvYͻF5kpk T3T8:rWF@^Hz2{ڹQ}CB !1s!$JƸE fY e tu;OslރIaQ9y `T` Tˑ#|N(6W—`nlfD\,CPB<=%w3Kv{>( ~jKRa4JɈy7tg%h]$40ڐo4ӋwyqJS=d9? ͦv͗ m(D[9ȩI_ c *##s B %@r~_7T+wk!uġuՃRԺoq[N فU'.ZtǬ]L;4%z:k̋6,+܃'l&d=buuMAD >6%E7fg"Qj] ,3$1R†AJp, d%)&wMD"l[VBZt{HZFvydLoZ$Pd3%'ϛžf\A1,aS=e&r;.^}YHOO-9FT|r}5Z^$1[ݻ |lC΋]ޭړA&vx7ʌ,Aw9ZoN1Jdb;6T$C'clA\ C,||ZgDy m7D(+Fwdȶs ژz{lϘ>ۺ&]q.'9uףR{䵏s@qH=L L@ÌS^qRqHəʠ_;󓘩0vTẲQYvҜޱ@}%p8Edjz>LULw.w EA7ѶGFL (806?6I^Ѩ,B3Fɓ:<31`Z/7 $%S6wjmǩ@T_@v &K("Vй!zՒCrDݞb\LN cs݄& Fk\Jp}]]qͬrhw1Qg =;BqznGLG_G~ ;#%Dac [lFs?'Bm& dͻ mRJzsOT/Va.x5`*:`fu۲"[%e^=`(C%)N/8I[[Mbj^dx$#O)yW3||dpz3J= ,9Z(u,VxMU0raXӯtQ\ ;YDn"bu[7 l]Ss4*w//MDE.ۑ}ٽ(ɘ9YewD+Ɖ ss4Vz> ,SQnRh(⽱)qxy!AZ}ͼ0:]āMUsMHw- ӲO*[<,J A$T>h}7\>Noއ` FMX3(m?XӲ+ό?DZO?4Ø⩝C|U3>ȊFWAf54('м1{$|i2DkR[L1wx~'svn/rn!}mJ,x}H7LU6pW\3)uHQ΅u"X Gś]*s96w0.BC'PH`8)c[EevՃɩE j)Ǿ3Tfl罃>K8ns36/| Ql?y~F;N[c&$o!,=K*AnR%Mi(~A?Sd3@#F@M@Hx<'%m~C~Ѧ:AF#j= u]gS\z38l 'IRu]'v|۟B\E ɫ-$ǥNXXt$Č%1=Op[ജ2C7*?dYS)|p~B'E~ Xxw^t[ ~v$4lko?2G@$}Ym,Bf Dk??z;Z.giݍUa-~d,) 6۪g؝uad\\$t.O2R|_6"0}#xoV}V/d@u@!Ͽ۾,(#$Fޫڗj#Kim{zWÚ{L:C0I4j^YxHu '.]\tӚR3uD~9ްxxt9 q(0ɕgzt{}ق*b,sCeSNKy\L^5j͂w;lMޗMŽ/yoo?G.1J5,pߗv6i;$J]5&a@^Cn*vcwvb5ܰYwOmFa;Ԥԃƶ'cTpeWc[z<Ruf*V{@ 7g`==퀯Qs;f];Ա|eGj?_{s &zU> װHD>-$]BW`FtO4M C@푂f`1}J2( #UY<YVzuB~r<4u"p5b5d_n$(B;(0hVlHBp$#/?r3q,N}꼌uS<ıajD|,⌬3&?~X؜=,_6Y?/hd^zʢm(y?6ͷfC[8A'ȣ:>6Z!OVgZA&u@SkawS0: N;,n(?GѲ֯,zg6'Иq {: 7, 3)Ac#nO)Ϭ}`M9Ot_9A pY@?Ma^5gmvD u9!g**Hq Sf6JU$2^UG T'qIrKb+ܷ-F G΍ހWՋl64EW6CL#Qkܬ8c".  c/M+M=z'>L޻0,L<%2Dxv;?dF͚d I^ /l! ٵYCFӬ58|N#XD,cGE&0gboڱɎ=:VCz7;<8á[VֻLDA;<ټd !!~X!f?t┐PWŎbKLFBm$,}<^\G2J,J|Y!YWq}uS1:L*.].=QQ1\0oګHNLZA@3yZ lkmat1%+ٗYVL4Hw #2Q{Q'xn{6J>Tހ\Tv}#ms7A1=$nÐPDt۵za>u##Be1xz|Tz YepV{5Qe3-2+t{,Ծo6n+{][l(C"Hh.@VХ͵dxSDQ@iS{ )9d߷u*ɼeNgjO$ ?zƙO޷sqGzHJ$@ћsaduY7|">5+CLGQ_J[T@,:)X7މ9/г Y'Hؙfs(3kEٙM_ZG=:j6l# 4`'NtiС.'l@{.3[硺,4IùU-G4!UV]|MQB4g%k@Sy-0+ lMv^=^l_-.Pv1E B^uG|GwԎ5 ӡ͢J ᆱQE)7%7Hhc#^jjqM {6tМ^ҿ^+YSl&^|}W[;n݆hs&ȭlӵ+ka\CZΓb!4Ł> =ڹ94L~ Ɖ_MpEZ@ZnjfPO}]wMT%U6A gk7 nĕ"k,qvC .ɏQSDcC? 4,P)94|9Pɱ*oGD1D"B %tѻu ܗ'M#Efu,;[x(]T2j%IMᑪ2~d LGb*1Ϡb@ 眵<S[!@Mo{;v)WDD11roIR1wM#\P3iL[ 1 ]w~h9'.j÷ANv]8':R To#h)e 2a3iF?Q5>sx†HFٝFs@ArY712DӭQ?d#OǐՂ0s|:Фjq1psiLTΡPʵu%iN|r^Ѵ|jvXge&(1~dx=-1v ^}ҽ/\l4S#Ԭ|HY$}0$׹ڂ+HO9DŃ?Bsxn(XeRbjdtX/7d8\=R+v6׼LҴijͯe4m}E!Irjb UZMUZ9oO5z)bg3F ~m #xAX[mUJBgyk@y#Xe`wj9.#I-_./ƺ_`ʍ7z >,YEqTRY:O 0X0-isz=躶vKi1.zw>u(T> 8 ﺣ纾nCo#]"hyAzòQ j1f5A$ Z~w`V$NeȢAC-(mC)UM_9=쾆ʳ||rMg 8?f(C'>[C‰Fᮮ Kwaڇ6tY(]q/FciZכnnw?2m0qa[w0cBWFZ?ua D1aegM3?z7MSk6o;p[avs>keTd*pAT[{'2X{)}SU}QuIY2VMމUtخl"}&l4RP*m8Rm}QA"zN*%xє "qFavPۓ,9d<6ۖQ\v55HMU1gQlE#*fnRrAjk'I<^0 GZku)g_LGr)[dQE!tOQ+Mۏevu83'I9b^+Oa-#.Y?W2ⶖE@P\ge,ȼu[ '[cʮIΠ XDZD9=STsd ZJ>(OW|-Fnܯod]}y™xeB_hkܫyۥfvH>_ȡ"|D o (Qd5gM}0Qƭ&ܒ{BPI(qO51HZYah c}uLV$3= aDulFð&0.Wo%dw|dԧy =A˱4ynŶρs햡ZQ'^_7U8GSwCN擈_|y}; !CJ+QqZƺ$}6㧲&͓p/oAwۊL2ɱw0G ,uKmL_%'uڑ>/5<%HKMlLsvɹv #~L+x.YH [S'WcZ5|[m=BBA #\VkC"=9 9?g;pipMe&k&[\8#-bZa`&@4w,LHQ}tӔEIS*:n?.55cQ#2[^*ebґy n]YRpy\㎙Xo}ǨPo_Y[2yȮڳ`oU・P\+s̏  WLeZheEKDvD±䇖ėoztIeV&-9c!(I @lY}Ƕ%p.Ѐe8gkVĢS( St0B2DZ~ Hg&ʏʡxЖoCΡ$<6)oɏ|nDW;;Q-줎O+b&Jq aP'UL7zgH8f[(d eeFo]Z,O*9%c@ٝm׆YJAč;-9ݵ!|~l5T;u,̽&7 ھS`pa@ C$RinJ\&G^~.|[}ޛnJ]R7@'tnM g{H1JNǪv!vM5Lŝfρ<;}<yj̓#tBئ/!9 L4C-[Я0+`vQS/FQͤ|u&C&aw?ꖞö['.c{Ќz 17$KʲO%;xE8B8Wf4+gE;y 콗GH'nT7"2s5I؎hCB23 r{31ڪn|&砾D[(xsmvCm3JX4l$oHu+hftpRS?ۯ؎|?]IP:J.A rea* *L{iF?ء6^>!&&ܝ'p\MařR72~!y-N>kTG\oNWt'R;&i }`{.omh/҉T.N8 dǢ=cvO!`˶Kh4UU0:K:ZP^j)=>nXj:ic;<|,aE$SGM9kރX_G[h2$?ZԠ]A̋ھZW)Ո8XtCR";-lZ-]>_C pCKYJP&ℨM+TS\9I.ȥV[SE.3?Xu7D'k`~b|TTNirbȬȻS;Pm}MI~ cVFNDtF=V UnSrœCFJ a=OpVzXŁv ;/qowe!HejWQgӚ/Pt}pik!Jd71Qq-kszi3'vYFZhK \wۓn :!As= |LeĨxC&/㸹|lYnJށz1d>vif5߀-Ύ['εn4_H Zwfc:^|8EǛ4[!ru,");!# W`$95g:3y: f_?4u_$X~nӜgd7,g {h]% f ae$I&CF _mxhiL [ Q{$ԌҼ;ߡ'U"ӴlTzNqm! " +$<004y%%}rl|A@pazK1Y塞'HkkxSqx֢l 좯Z[x*&Uet ӽr éo`cL$(2ڕT"C6J,XZ,@m!n*CM`,e[/O iG9 O+}~5{0R$OEm>2OO|2OJt 򔭩 Sw<,+?P.gw#߽3A,lL&ө&pue:ӣ;>dtЯ/ZbVFo<#0{'N{;8շa?꽝ؼq.BC"@%lM4OAHW+S\g3aZver_=Ai{arm4sݡ9 5!hEIw|ns ң)*f6)I)XkNV>Ff)D  $5R HFD YsbCF#D&xd0M>ؤMK{ڙ yRTc}vMZ;S:v'GџR%D;m[9e,J#J!-ot=qސd2\θ+o'h޼S,'Aj`!#GvXt(Nsmu\31)wWEҝ%p199a2(`<Å`n0Uk>Z_ov^wҮ_EͲ\cнv˭U|mC< V aLCZU =$,WeGS k}tA/ㄽC.z:O0PE {q W56 kUP-=ε{l&nS4=]B}z m~Y iF:xx>;X x:bԔ S]Uqx %nۧl-S>.9kwIݦRvǥcvgXtP㳧 ́+wQPZJP6yvр.6gB(;g]2m͝\ovд.W64fe؋ݎUۙVc1tC Kywrϱzlki>IB1Vw%TZTkG$VY/Sza^w*H7vHI A݈{ 6Ճu727YtP܏Chȁ$ 9ʮ:JG9GK Ahpf"sN'hdYхr2ĉ x5HC~U˘daq*rTH`"Lg)a`Lp6 ;/>OoCZLdSYIZw'4BJz>x;/^jqnV upWd(;2HArQ<7v/FNc5Bg5Díg <PuS3ZI?2#$8Ymjr;6$#sMy76XktQs-0MekW; 9g,9(ba)%1t jX |ů ȿPMUcW0&ISb)S19R˜FFz:UΠp˟צɔfIU:}XQLiC͙p!|R!;6wqH*%\iA ~CNA2J0J\~o!|Spk(6rW#/^.+v-[WsbhLG[c%M@ PŃkIRP*0Z%UE^FXzLTe a|^tcZ jMIZ mH6mD8T_kD=FIiLܟWZlL*xIo2g} )Y|, fawv[|Rp=ѕ4h* EB#А?5~Q!PyG8qJAV8tۅTv̏ |~U3P6g-ڊY}gP@$U}ܱ^msV-)*{RP:n9\ը[wrR%NWdM?EkhJN30ݬ-.wӴq=}Ix~',ً X@yB VJfkݜɖDhO7 [\XeSB#]z+ړ {X%Y *nu:MׇCjA|&QE1R)JQ6kyH^KB)'t_6i:^}yˣI@g רlέ,5 ./'^j}rb|ޗ͜S(f~w_ Qq}9pi+z8SGf]mh>Uo=nC0yLU8qώgm:C 9H) 'o׿^ ?qxHGem&s§R_klCeXwMTS0wW ir{E>{͍֡"ƿE)|~3?0<9Ҽ{x`r;e.㷱]\8rH/\Β gu]x8YF bX*\5nY\2 EzTGxBe?2pT/ӂ+sGHש< LG6T o/=ha??2DF<ߩٙaB[<Sa#dt %0ٌJq gT"&"(ysaW,Jako>.]JbvI4y0E7[%7srJ,;$y̞^C޳"R]dr*򈄜&O-jOݶt~}| >v V UqoޗaN\;鞛cw ިm GC\ +.ǂ~uq:mfpe?U?r޶mbC> ?DKgjy2[qv3vvm*ۓNY{Un 㗕"_:uW 7}Ҳ􄶵r(O9w޶23K;Oy:m[vO<zJvrrn86V v*EoeC6_% }d1ut[1~Cj gsow__j nS2',z$/﵃$>DY5]^h}AW/s6<\/͂jtcW#w2(@¬Y؆ pX*w(=\ M&o\5ecޖP&&rskG[tg[~I|N svMꁒClgJvl*_˄/]G Y>ֻ\JݾֱIxU6qb#DPP71 [L1͐%P1="1{xi#4>_fRt&DNxӨR|~\C>I`S͞:1lq~SPt9fDߗE_2+Cbf@sc#,d'Bz k(nشTO<R"jaCww=6ˣ7D 4 ZO;zaVgIۯ%N5'0X8ݵ 6eƫ:iPfeDžn!+|+#ݛɺޯen E=Ed[ӍW#hh[Pw0#-:F5&V>j~Pw}}-@aG2WocAb߰W|]{mSH"wӌIWboW&GNveWE{vʡ(]>xncYU8ڙɛNRs3W̖l7.k)B~pλlo^_ k,zh"XU ZM+35:2[)I9=a\npI۾Q[sO5tU[t?zU]T>ryIMdV0_Tv JyV5nwti. 43ڏ0vejy,>6 'X71;*$WyJ3zՌ (wB J&V#9c`WoМ1NfwwWqkb4=qu߲ھx2}%w 4p voPy}{Wm|!>/knDZQb"2JðӻvTI"rMoB }KxtoF?x:7z;Ck+c}=$nʋsIVCkU)*w\=YH3y<#Ѕod@A[Ճg<% f'.9ZU]3 ]a=p"ps`е"={ x* @uD!zF,QkvDR͛g5vDªlp0<.-+jH<=0vId0FiVm 9uMV ݂FHb24xF&wm57 QcWLc퇤5.Ӫ%u&m3GJt5~Rp$Eun|r+߬""]|hz)HNJۭ$6 @QS7RAdk,LbiyC3*d P{ByBsb7%=靍D笺zW$N&!,UJBIGܫx'tDZ_U :Q3ʊT۶YU1+|;p !շ +؎! . S_`"VkfG*pYv3F 6 2pdAzY;"^Zwl7ڏ]z i'.̞񜒠뀊w*z+Zk!Xy)RRf6mjd?M޼*WPfE̗ޱߗb?B'  |h`.fOds>BMYCljoΜv*sVt.!Ol@֓ $r~z@GW|LTZ..ݹ"C -J5En3n8}LЃg}t/KȌ)lƨ(z>]qM}Hi1LZEYl1Rn~ۤpw  VqEmgby#NN nՓo)XϵEv81Zj` M3rw9 EՓiz۞{L*BHwf1+Ӎ??9$z0܃#*l1py~cRZvnlI~#fbL<*0fSnf#".apnJ7Yy{ԓ̳z_߱e j9A8L nƒ0E`ZUƒ1)8jVCmuvU߅ ;!^tG;=V%J4Շ$^ͦZ03$E_pI:W n8 5%CX,7$ɢ הBz8L7,5\GΕ0u?J7va^*d~"l/\-;Cs5 Gc6@ĝ2IBJ)[Z|Nj7*zwƓ N:}F~-κfKS0p}%F:Zr 4GQ Ƨ3C1P~'oblCo gYͪ:]eoeS<Ю#I5]1-J veI4_SќQqs7h[;GP׮y-88c8[]nF+Gf~"l:rrp7eS'npulӿfÒLSWl`1AkWq^!}&hgZt4O[}#Bdr;O 1u>fC+W-d1?FY*ĵb'+QoS&nT 8ˌƧx̮# VT߆˲i+{B n#? WdM##[rf](&W!ҹ>/t :=fa׃uԞxs';џ Գ HytC/ҧLAjpF괦7izwtfL?AМS %΄"#3~ݟTsb<%|=Uve>u|:l6@8_Y~U!EXTRnJ9TX4XYr,L損c5Rx=Z^Z7:vO۹n_@iie#ੈjvEPĆ00|f5&mDT`c2i 'NfoЎv%%濟T駧L]&ʵu+ѣ&7Йƶ$IڛO#8srnGF肣&XT2M>{`7Z2:՝ 1^ @O<4r|O_r0QxSWi;Tݒ+LE]:XbC5_eqDд CűDpZ3 |y=t"t::d ϓ?JJЂҋM6֫Y:4 1-IwB ŀXn١l4<_ŒM2uڑȏxFuXҋi3n,iyT2gmvKVlx;Jc֐?Orl@ݺLd?3]$݌[VL YⳀJ}=]vF>ZȈl{1bXڰ{OϐNp`OX/L10Yl<w^X)35cGvCc#8NQ˓:Z+r9 m3wzqZ DrxJ>;:S"3A?;%E|)e*k?`C\tV| zӈ2aۇOk-c˫L15q_{sgv+)O<(ј{[ WB&@6rpNEZc4!=o DWH*iWE mv#(I˘/+4U>& &kGJ\˵5YG0OMzex&z}"<%NNT>Z'˘(DH_Up]uO W_&Dd+&^\.^GN?^TG?,&,gmRzڅG۽9LnUܼ|}F\#˄Fg)ܽψG/Xè.ӣBwAs+f7i 5difGGW0|EE_:*6%96S1"m THG_A  L˄m{ݵSwB'BcQB*~j9lħ=(Gڱv=0 T%vef97Y<ԸCƖ]d}l1D&M݈U_Ekݧ|71e5Ol,nd Kuwu=x6~oDmH 0n78kڡq8|>bqؚz}&Upt2 NpC&G[2wO@xm&!t/M":#lbmxSj/2( Ҩ#n#Ϥm 8yU_=X%{\u4K1=,;F->_T||[݆i(uwIїLy[k9ozO@w)ZpSpn/:iݐ>M3¬p[GZLlg \Â>,@+.z+kهHx*5D&N}a;iLg6ȄUXa57i*vp76]o4w${\G1J]yui S4YN"ssQA@r]RoXPY0]e GҎ3I1JUeArPYYVT.5I\l%f89ꖑ =%3)Gt_ѥlK'l zF= vEQ< ]) PX [_ᣜޮf| b 05̟V`Fq{ⳀB ޜΚ!IRC UL^9j2M̧H4OAVz2|}UimUlوݷYZ}FM"mu>OneKEiWdfwN?Gi#2evV 6˶?~e2\;b{]v*.`GZgܦU/@QRp< DOѧUP|] h؞dtn3;bhe55]46NׯOm0c\fL z#+=sYhh^)0P9mxm_|v\"#v9ǔuRGdN@mEq"~_:hx7TED޲b.D7o)ddͷg2˘=U]y_3z_@̩`"_gRT纶2k9yvNwigN32?ڐUmW7DB"pM;ci{1dVq\Ju6P:=2Ԋ qzRץWY`V4*)im k jVD$[_(iF`^#/7 #͓]jW.dg C'rz\e+LґiHհ% گAШt31Ју"1Ȃmd2.@%; lW7TImٯRQh$ܝviʉ0׃ /.?4NӴl³-= K7'|f`/ lOQYEt)e03Ҙ$P%qNA}ێ="3)yCSIڼAb|UgUYԩJbkr0Gehz1"Bְj%; sfLQLN \3䢲:XC!iUAj@oUT1Jo3ltL7H# ZFk7[VT!V) m)v֙ewE$'$Q=׳zl*-PD gRW]rBI#&&MR7@T?!t*܎X& uN 9O^=Ji]4S%:@Y\N#&wuP.0]:@E%濧f4grSb連dRa[g ه\%˃R!"_N+HtOA^tkVc'>81aZA &zi)o-j^c Z,U!b-˼ "GPL{g}OuR֒r$h8sJZŻsS IM4uRF.YP{ w2A?LEh3%)EqTDf+|F sXaSQG eϳKJ8K =X\?2͂ILua};-'#cX6dNZgaیs3PUe?/6fuo3$>#g ,pt%F5f"Lvĝ[x}bQM A"%*zM߱#)FCɏMrDU+&ҲnQx{ k&V`[x: ̜OvB XƽÏ~#hrÎE$αZnkrVBͮM{*vDISB2XSQAUM,Δe?nB?.^wSB>.IƟ:!Q21#Sfݝ{-29Gy$HmDċM[8ux&QכS(e澀J_l]N/T?U-t6hS:$PV5*&]zX4zUe@Odfuȅ0vXK :…랥s0a km7:>$^AmmM_P \֬FHnW7͗ߚxb47@+9wkrޒvR<|/ W EA]XGVɸZacdG|CY#!?*|&x3 }*᪣#hn}/$4]if9Dׂt1v$)qd{"+-˭tcVt7њ It3F镯B~X v2>چ(KC؈{xKeepqk\)Glr2Bݛ>F\d;zMb6otú̐!Eb@t8~='a`inDu=H|N3V &}= ċ4Zu[ 4ƛ8-6\EY7QZSi0v)o d/X_|"3<偞"7Fϧ /1[ׄn:hcP]Nvlc31`8_D ip:"RSeUnCks53OYe3H\n)XCb,q2 ]"qTzS3us9Tk /VuhaXJtq;Ϋ/gOBͪ2RZϤ}d&շؿCf1sJhdYúө#jx LL(9Uh7$o4>)zsY=9c!5ߦ|(q\ɘHnv DY{_8+#t?X0_"-ZA9h,M ."DI>L:b>2J0{QBBSkl 5Iп].Φ &MQyɱ< P ~4q ۚcw#ڃUGgPCz߾hcEs1n_h dCI#p**. E,}`&r,C=̋KWE~{H# ?VyoR2Q\s}j%/Аeg80RLDܴ9lsߕ"?H3>"R~9jEu+:)E߀;AkUy9ZS;YK2vb,}bq#@lIsi'ƛe80T;&Z?)L[zu=0Ծѣ'v}<<(D / 2cqγ)֛SO~?_sR7'j[k#[fNn'>qQnrTUYc) T3qgSYܐ/5<~zچދ%zEk,ZǿO0*Yu1p7[8116*@)^5?g'/=Zu-v̦km3Wk|~3Td!v} j'ś^)$8PQ2W3ɑ)$7iu}xUA.h9mzZ`=uopBcM`R{qbϻ L)9[$t^5ڪ~ >PlW͝GϛG&LީdWĭ/.ϟɽs *-]ڱ|tоmG;)cx^,W1KLՑ!:Œvf`G;<_Ke;>Pg*)&B Q4%V> vڱ@jfH@qoU>[>mzc&v^SmV'3ǺZO fe.OKBD̘Oiwdg[&o4qbl2tciBrn'"z/H ҋIaq)ׯqwS(8#,G|d3 Q黠RckylwNޮ`=H#[ܖPR& _:rrl,ۘ2Ӎs#AM@˙_|jXy R3|d+8 *Cȸ81kGhTs!|scEba~Ǒ#Ѵ׿,lSf 63k"EKe%Z}}Yc/ۗMgY=5cqefվCݹe"R_p(eJUs-S!egPm\0=w !eKC}l))'<z!@bLʘO@\~u_攜J6R}-g~_ 9z(9q_j`X}:꿻/ކ{ȣ t{_62W#^{}'!#}ق1K 9 {것okl|W`4flSokl"zEo0~K/GSc¬VToO5!=`ͦu\U~xƶ*S[>̎5vǿJk]YlW m%"WR] 7ӕF\C+O,$5刓ï8saW>ھ}_|Z˰ɢYDZ!3n'y3A{ E S l|#) 1Cw31U`}?];JشScLGa~XuŃXA6_6դ@U ֓]K?w=.w3fסI!D-Ā`i,ɷy!؈1=%L ]؆m mGZ^v.C g6vxsas<|?6]n=󗱃4"}CVOLU5NG}K7f<zȰ?t_;:31h3]s$ 7ƛHL uEB]7.Twڒ{HX8)5.o5'th/H oӜ !bDZEL8])֦_@zoR&Wa2۔6whQfb?)z0 EÚ]n7ƅқD|:ƁfƫIiF4dA/jxviP> \=ֹ.b3AlC I Wur_ liEc+(qIl& +(T5V}'_~YNטh=/̂'`VuٽsK$B{^7_ kb ũmjFo$^1}n3= R~8r&I;s$goWhoQsaxufF+K %'d"+yIU?~` J\bulu!Έ"#FqܿX=OXn'`aQ0.ɭ> t8z3ymg@CgXEZl"+Ʊ8"X40`1-?A'{veXw 5#v=Uk[~:)WB3-7Y?I"@/׋=B`mi0ږcdbw!u+ >!_a]D2F10]RFa 9s(TMм6yza$2U,?"%k44$C3(:; b3AdNȫv 9Doe ?dw`0-\.]'ےR4&Tթ"&* |b7 L‡)Vb\j)Bf/Fj+`#psQ_ 禄D-KƏq+s!J\ 22[G+ֹEώ;J׃c5U74jsdWفC?ʳ9]BwˀHVhn~*jK}j)d<5A pD>P[YRfm␍i99Kp#󦐛Oms<*@P`s76!6*y=LZ!Ԝ~;-yUmRsd+^ƺzk97Fi"?er1S.zZSѾbzi'p&?R"e]l)o}R8p]$e2;%/Mu ;MGe=l2}||Ц@la;*ƐI\;~:{{ I2hS0؍.3*OBN@rErTW+KA^v9LКфs]K"A9>-^3*Eܧ`OH͡OM-R$̛Q~\ 1\^awmN=YX_㐁M茏A=}n yB-ñ&F3BŘ7c2'gy>ib=q7AD k$5~Imjg*R}G&dC< 9=>y$c <[SZyWy+tᵆIn\T#[tS- sO`c@4/|B9ZsÕit U3УΐgҬb`FPp=MO%MNQi ; 0s -(\-"S ‰.vTtBrw v~#SG^-b5@;"auڽ``Oo 2_3Tx"U4w#d(V]ͮOɯ![Sl$I%gC<cpF֐f*+#./ ǵ,!:xbQern־Cv IY؎lr7'O|Tڎ2 XR!Fj,O'ӚB둧~ Fj=ب)WH"A0G5Tnp-v=XiZ]K, 棫R#Oc(%Ar1$ y52Gml.' m;I\n0#3?,+G\~:u6|"b<r\Nh4Q)$[CRX&l~]U,vѦD<L LN{̀F/8a U0ڮc$m/${zĚGcDڣʼ 1+ Ա~A?|ܔHސ6yH&Du?3b}hlU'R TsۇB$ykGɻ !w*l60X[wT̕@@#ٞeS%bE'Y"^s=^e ku;Ԏ@3HTYu&3և"bjwbZ7M(2o\ K&I"70]1RÆ[܈q <n6_>S1v]m=rCj`2u$yq7 kss'!t7h"+wQP,h(~,A.,:U+3DQaܜ3}MOqʼnPR<d\g-~6; .~$YwK64"-U̠3.fU6k N`:Z>"x4 W1u孕,ZsR}㑾ErG^P|څn]4}qk)>w-edT߀xAxfd0r;:sIy$H(wr3N6n[pl:&GW3R~G4g&X\|5#>/L_^O`` U>)^.kf/5sh%  ?02w^,]LQN e08V%Ax[{\{t<#&9fh܍Xnq@wD,I g%Rw]Mm#j\%dxOCDܱէLUP_Hbswks(LR.vԤg']4B3bnIza/[B=LUx7'rE3'0u ԇuWS9C֋Tk]oNdf{5Tj#kx6Mo+XYc>B2bR*0r@y.lWyy܆U)N}H<)nk k }|zlyÕ̿R;@'xȔ2k|y5Dyiy77<( 7XW`z-F%`ڦt~;dļeUW>F EoUsr vI [AAyP .;~[qDG[w=B\^Wo{*wYcYa}oGބr H IDi$oV ?nzDignE[z{Cy6NndeZS3_\̼%F8ٞIV3ԧfg+(QO8Bt˹chvǤ<<'5z dmI0z_*ҋX1u]p'@)i-,=ʍxSw) A9[-~k;bd1 bn<`j3sZU RN %(VO6GgAհNw`]H3K:6Q;+%AT[_xA !ȦāEqwYZ/JfFx fQ<&?{pj{ 7`LY%`f5P9F}G-.=q/bGƴ2*(~ZwrTˆ0B֜|)7`W߀ sA$ W%U-b)?Vqe%7Г/T/j-vU~ W>:'}'L2SiI~谻.GPZ{HU/_],= Qo`+$4KOɊ4 f-xIP:޲M^`p*˃%H8.r,X"aw'4A3)rI882t|ao‰>`r2bYK ZLpI!NP;jW8!Tq4D+ɯ֘M $(/ц;5yzrqM _Fԛ$A, LBM1#l&h 7穚-!8>2C "8CjByzE5p(1erϵ>o $6\#O3T͋MVЈ&) D fkMīal&$#J~:1޽hICK+=J^8QgRY-phǫ[?^EmϠ2MG>|-SN0XfP ɼ/cJWX$އ7H # gZN q2& SB١^g.MF@M^ӓ ϕ\Z oJXFbw dPP} 4?1$6Xao}ȯWP's؝ sNkāXM竢F%j89ZC{n.F,~<&"Pxsy̻zKVd[Qt,=94h's/FYyjQȀ jm]X bl_t(c TOѣBZh^w+M[!Di:]}"ε\{W!Ê:>) g} 'D+EXEUcx"A2=qzf="7b}I&bLRaocY AWVABo"7oki +aHEҝ *r,ֆ\C?6?;=)?a qQ;e|thY5>b.C@87!IHr hS=-ٮb4N׋IY+ Rm>Tq sP/e?Uˬc*:VM؞( uJ|Bd -RixCWܙU4?Q˓ޭt!Iz6iP¦| Lǂؐcf[H.OD3<=Э$9__ M#2-&a*AҺ k#+z+#VoÍeN eq} WSђGNjC jE2ˉ F<6_TYCT0 >OqhJbknVFc_&CtDo–>5?hNn *Z2r'KiO͢Eh=*RAl#NWgr2nws"QY]y BB;|H/ݷMQxgsA0mE.>Y:1P;s}# ojrZʵg_7qv^s' KzdW%x$3FpO]λKo?jUMSw_voFVvva/ 7߸I `G|}RFHpc>hGpJBޚ(?}0Bc|DP%(ױ/ ^#M8Ac%*r: MU g6\6pMw= Pe :I/׮PjU%D/ds B 59+x pn}< 4`73N㩾+$-Je ~ǎuSG-L|T' |"0mhRrց:ܥq N7*ZV=NsrE=D8+$#4|D褻Hkh k$ Et\lkRX_NJ2Aeɜ3 Oa2Qݏ?hODMٕQD:)5i:P00/tΐdQm}m FQ[@ua)'-w$bY0H;r:2TSsWM$hQ~=sg+h%6-EZ8""==W\R5\ADq5QHK`mǣhUex4~HT_`G@5S/Qu9HNT*mQOxvpIh5x SU ɵ$KBfCfb.12Z׈̑2E=/Fm^&f)8-!d1<ʲ!PoiIa9Rka"*ƓDQL Z l?#n הUg^܅DjwlKKʛxAyu/!QM.`L MnΏ]Drq/x ]f7ر~c'1 pYpٍq\#wyK+[}SU&&S@A1=\nmٵJu2R@.K Wx\\^e\h,[Vsa1ь[*uA)6$[cFf\M8g/e:G1CYg݌Vބk&}GL|e8EoN9k =u%ڕq8c=":1|68\fpmp.f# dg)z :63ԋmR(~O־9ZM"N莵E F%qKz[.mݗK:Ho)},=ׅIMuerخ̀< P*'X|iS[oY8[ˌ:sUг`r굍ܐ 8GirX`^%ߖK:1 9 :Uy!.(<B/VS;]N b=cڮuME ٤Yq֥WsQ6OlI kza ?ZDgnJD]+ Qzn{Vi"_ E=G¡%Nh5L?<ZyU >_:+hGOʺ]=68j!6A"{4?M,Th=HtbH_+UC{ #&*2ĝ0nB˩}@Ɂ۴EQ먷 T@a|ӕQjy>‰cC&[NW!n,fIZltL.M "Q_>2Z~φ,l3 ?zj&/{{!A M'mN&~O0n N} 0ha$M]HNq'Z&d߮~58@wb(%IJ F!*;pu,ЪX/M(Ttt_P Bb$msMp& '8k5X4a0D,1uZJq o[%P!@G`z]ArNW,wW͓Ť0,f%)MTz}“!gu_9Ƶ "]zy8`7|%$IȢG } $f.cSa]whFP1-SS|tv$j/DLpz`9O5qwiofI8zE;& tv]ALUÀ` D75Q ̓ـ8!–n‘=[ H߼_M`d^ރ59,u|\33M\FAmNC&\vw.ClA$d6vߖ$ͷiG{yvT Qxh$so4;KQ %JeZgJdU %[Xpݾ͜UB4f˺(%;p(Sy3^ϳ-FG/`AFJnrІmt sAbn{PL %NV:@J yhlyUp5^=es>\0;|q( *\@B{x myfRu@~_ݧ$.YdK[b37X7CN}iDyrvgWBtd"Av'=iTGšuG B3Aq3c?g`tkEzm|R$v}X{MU;\eDZ\;Bnjn9ǸVq >ht&o;u8 15u lhb(UR`:#zO%р{P$Lnll#gn[I@g"A9]^ NYӕisU}#)X~4V|`mϜ|hZ)(R~7bou&a>y8Wb2x$)Ap4RØּr~`P/W#w,y.7({Xv=Wd8FpyLgw9#إrȤ!f55 +V%$C$+M Զ+DDvܷy)"{ɪ>?UCg@Rbʰ[kxLYș4qA]9R0uw8_Zy Z^aI{ş{%%ĝe e܏<͋*Dd^7Gp"c}æB!`Ӱ{_ 7SF!1^=x[7o^֡{-̣6\bW`gAdRQ$/Rbu]kL1U?/uWբ/b╤"Ș@ւ&9+W[;I׻;Kgd:Z"DZYZ6:"]\LRV3wB9I79]^/4)@{z7ORĨ>6 3"sQ1i.AG[kNC,z3)uǾ7|@üi w cSř?h ;c|̗sH̓޳4:ƘA(78DPt7`?sP(V-X_< n/l^&ԡ,z M mŻ&P{V WmH~[Pus#W9h.wZA(A~R-F(<9Q6fr1\sNW8uGht%4گ}ͧ!VE_6jo1RSK;YdrP~=CGD$Ň˔{K.z <'eCL:]TWLAbmғc誗/35%cwSt*N8UwvjPEjMC5 Np9(h1Y%/78(3;hIv):~ ,>r$k&PDt{N#oY,мdЧO[ӓ-IuB8=ՖKW}vCN_a]$<4Q \ߡSM=Wi7/:䯑`\ter77g=ౌFAA)IV P @(m?Gj)O^5r=8ORNĭ]I ֮O=fTC \2,m1eZ"N9s2 2qpǞgy œÎ9}+&)RZvҚ KaaI hfAqWՍ\̒Aާbk\5Hogt_yBx@5$=A%t<ܲ -CujuM龫Z૳ä ͘ӹߘ楠g|[Dbkw鬅0"D/.NCcw}$d c!ojzY hHs.l]9X%J;Um3(ʢ"# .e%l>D0<>Μ`c=9u߷;\ob>p*_sv kc۝2<_v@Z2ƪ2htvtn c<ɄM'4OECxՏ8+ڶ*y dscٮg(܏6' +[?v%^h}51k@VT}".„l:ǟg6 P+wj R_q؉q1î-Pʠ/L{mE岚Iځ7KoWR_E& <u>#*-m@Zr|xkQ/>l%حN#znCIb1Mv]E-!d̖4r;݂J8A5pQPM=?"f#Kotvy7l]@)p #8C1Lr+s&tpOc@*B`SJJ蓂2+si": \ocD5?A1<&wzྐྵKjmpS}9]DvH p-EV,kAس ?{lǢ/N/,>,MeR &.Mˆz{e 䯜6n ؜x̞欼}h @m JvTڮOL3b5}rGt&DSIӓ%[hO]_Y-"ו?$Sř04ꗇ=kMC >D25P͇%sA.gZ!I-T,#Q'ږ *9:j,+ GpN&:D{L`ÏnXT\lG;?> & IQB̷mayа݃TF׊M12j#c'in0zsDG+.xd i-ǯ|J y{2^ Uڑ3>2'k$Ē55á7]y! c8GP|)Y 1BE~!-w:&{2b(rAseO `Z]to I-Q: &E#u0s= ֡^eHo|wx4q$l CiA9g}v~JgQF7#Yi@㼞%KF/C1z VsJ0vfkFE[4p!C~wF;61*SntK-HltY2GLX-)) JIjYtę:\8I$ 9 +4xñu7;׭7)Z))O/ι8\\u(9?tj)xn:HFW}K7 וny HT@jFKs$G}FC/xЗC$urcG h"xe1^^z7+U}yb4MgRAJɽрW1շf,Z>}NSFK[³{46Ψ wgi ¤GijM sU@9E-?Q;E Μ.?{S6{ s_w){ (N׊OﲍGvz>0rw:'^KL}L:)ό'߿ :X> ) BL!!֢B,=iGlrTD+pe2Qtŀ2%uE,6PhW23݋B`vJ/؄z εv Ѵp;ɿ-)5<Đ4CPXXkTWpޛqjpAևTZT}lܟv6!XTi*gz穜9;W/5#~(cfm%t_/̜.cczR; }x5;.F r"\N{,o :,OZ4x^u hNEQ63^_>)gc-CY|!6Zj]nT N|bqĤ::$x14͛l+1]EEeѪ׵8(&2X FQB4ߙ tId qإZh7&.*dU.ボ ZMYwSb }d2 &GVOvݐ\2B)Qs 塻Bc%]s𼼶2]6 l[)4HlE $Am"RqG5V=RbS7Xv!wl0zMM)&?vlSK=tiǎMdaK/2Ҕ-c\ LG]px$?# Qn/ra> cz.ˆp)|fu(vsdVizD`ma~$-[ەMɜp몽7 ?"'Stz1W\2Q@=,b=7Լ6= X vx3kIE۱ύ3'FB:SSczBisT8~VK# $XƯ r/(/=+^[%Q+2-Vg9 B(ġxy;(\N^uOY[oyl!E\=a_/Oć;Gu"DA4K!SVXn#2>i aUy* ZG7AgfW9 6jxH$=6}`{>b L6]G4XҟeJlY˴1sMh.3K56Awݾȶ ߢh\l-dDtutcU=V[|}߾f)H? ;Z(o&÷ ƽGF v9]!Zq}eL6^} BX, Zªp/P?l_|ZSo/zaFhFy?;pX}TB4VJ!ձBt})&wc4!͇Jvm\458*RĆX񽕅jwNɸ)Eӄ2›2c_Jm\ÜN|"TCLfV Kb̼v/ӭc3<ӺnGJi!\>6}ډ>ץjug :GWō- M^rQ`ބTB,Z&xP*ޚLX qDVzO_]76 0v뙘uO'Tݵsk PkC)c%Cr)ts8q#ߏ.l&L55v0!Cܯx<ǁgJhIǸMf s1JEQ&ķ%`רI$[b>7ng)(>-.@pƂ$.ߧ ?;cQ ,d6h\dH%xٛlJk,<ŌVvKoOk p!?OUd!,R0=a+]e3|d}9aqC!*ў#S8xdM%I{ 'B)TT%ܝ"E]N"Vi1.x-_֮ D׭F׷XdMdIC6C4615<ֱ:]8QIQ\r9$_EpєyۜaQ2SA7fXsњHh\g`x>*f @M^`CXct͒rxSΧOw ,' w"/JDZW%m[tY!)lqT7pK!ب=yINaf[Mj9ا'r0I]AhYH,GuJS %X/`ۑQuY{m87s;3M1;њ|PUuG 8ϑ vM(NZ#L)6߯,:>Mfe~|6yArA6N򛅍ݮ4'2_6)۹5]y=r6'W5i}!!9<:R^E&~UlJ3IL-=Ai?MZ G!űȻQ!.<,h)fT9yGo3d`kr^)IeK?~//` T†7e%^<%7~v_LGzpr/lE(sf$?0?,S`Uaޗ)y)6rgj5wq4mYqGy56'CR!5v]{ۯ5R-`j fqo:?PXFYm]`p;G0{v^M9Nmme<]U=F.A)BP ^ٶO,i,O|u_1`.f̙C巤HՋUZB4F=$q' YF/c8+&}|^" jث_ŨrQ \Qlt3W{~Wl!n%LID| DF5lM:ؤ"]{k_RQ@ZEg˽-pZcfQ'WPڠ1`ήzuG-ck{Ӣ&G$s2K\E8gQǻ) BSA6"?:})v[x! C/%pA}R QfcSWz֡ kZ#{ ̾N1j2hFM(v~o4gGȡntvn=3i{sBثhѕN:fe'bսihKVizK|$?SVٕ2maG\EtV,)IwKd sܦ3B\mnl'&! lR4qJbDg0VR/lhRrIKJOvm?|ln nUͧrQ2 ۜ[mIwc9YL~g,ɒMTxb5P "m>ɞ9o^.S):@: !>A<ÅX{u5 jOYH뇷pH  5^E,r=&/*$ٞ=ݼǼ/ഉrcFQ*c QzmmSN.㿮sp1TgZr (% ضc~8$A U fnO6QKIuXE=sJ4}+<,al.$Ru-?eS +ETpvl(i >wl<6tnwS.gl(~KfPv_e21 vG=@XE>4Z>e^aq8V U_pa6 QTbڕxpbwM^zw AmP#3>UX$$*PiJ>Hub-J7u+? ,أM?cֻʬ2&p+eߚShI~@(75Xgr%QJv R4u9[lI@~ˆu~]Mu #$⤆0r~sxM}2ToEK)V;Fxl݋t:jSP%&gb˳/Dzc dP>̱6ORX]ϊ'~{Wiӷ/DD^=Ium1@}by ȣA}Oجd\VӨβZ{,/uuQ5Rv/G3zq>j -]j玣l>|>kQhGZC@wL?"Fz?|d;49C'ϖvhPN‹+ׅ9=I UOj(u*Qmc㗅ͫVRUbAPK*)wvԀu?}߸ v_hƽxRP^1\D9G}/2Et.K C[FRffBf8J*!ea #Ub#x-7K!eUn$RUCJDc?QRJ ȯXM#-~)ET@R"xCNR]]]b@kGXM?$7"ےNv?D>j)a-^Ig?F >M,SFt%Qj'Eк߯[]:EOLu)!(Ldr=!% &5x *LJZ.K]u 3Kaޣq/z#[ןNƜѵs@8ntLDZX%;nXxhPX0Ӫ*[k{3ɣd rER3붞P3;?fKbx:i~}p{@~)fЎ*8_Tq"2)95wE6q, \cۄ e>Sw9mDE|@Cz <;z64[JcaB`k !/i4铧^Epi8EHk$;(EYG(Z().]ڠ$q ^jySc=zwݠGù&Uqy{H(~&E9R!LR.x{b8RuCgЃu2S<Ne'aح#>AS.ꛏl]LŪ:d~1 J |n- m׃>?2z*P_yxmp7ÅmlgUo\1LBwu\ToU"%2fbeE:8miD'|}X*Us}ZNSSzA(` QC,-3H?:vaq|?; lݯb$ ?RyAP8Yif1`քlήG^{.SDVֺh+zy_]ԻD8hf96OMٓ3Hp|\}`A@؝F;o ŃCPH88|3Z3=9aiLGk?P"f$\#?xnIrW3n4S)mI(Ԏő(|F.\?<`NS4IYWJz?͵PGMs7/ IdX%|PT6pJNͬi; [ ڡ?}-LHAqkjQ**p1V=ŲvjRb$,HbO}'?`jBlXWI҈~.y>oߘĩ<ZAWs͚0Yef (s@xǪ2֙1sfU`8 Y&>!F7ћ:$<1`ugQ3C~tu7ɽcS_R-%Ku`lnG(|M84$Rf;v|TH|Ҹ9B'WC&us7mJVqKUmVA9P :6TƁ±UHU7 Lj6+aDM|)۶Fzm_{{Lr{ܝ6\ZE^ռt2l1j RRYMR}ygks7MS(MC6ylAرy!.VG^W/'-Zc>"TJݞL e&-׭-~vLIkJͻ= [e6CHLجJ/o7u :w|lsDg HujYfS? J) G"Q;ϙ0?ˠkјaLZ4sv>Ӫ}yVC8Zsy,m݌tM!EL.I r xZS?_E,0y#ۄ{M18m VS)jG3IIAM@P6&|1=Jң{썾ND7U,?zwQ`;J69j ZZm 'eaO 5,>Tj^kN)O 󨑕ǜIf0|-90]!U9$K5ެI1[R`1f9 xPKiWvAyq͙ɦ}VKsU%6=Vze^AG$Ѫ+[-þrI%d 3&c)['Wij-8zDc}g|!zxަ\ï9ECg7{e+v1$N } k25DiFXӚ{ a3_ eWOcNdy#~]/wC!ge0fדt |))?NWH!$5}VL?=rC# |)~9@vKͷj1c)KP{4Dt~5|y}}V>dQ݅#\W&#\mڿris+*3'Bncf5=uWXW#趛LB0Fb`pˉWG:W !{AID=J /Xv:ӑV~Yk|]4^KNFiF_:º|&6Ώ o,~ @e1ٳ;Zy߻Gضp/s取Jv (@D 7T 54 |=zL"I[~@8|bh ڵ -T^I<'Ax:Cs &r5=a'T6gǯܰIRI.>YYqlT^w0񟬟MhxJTKC ZCwa՗+t`Z,Xle䑊iJ8џIb<3&rk׈(jw0W$oLI΄G&U=Й]M+SZCaFj $Z\k0mN?bfm?l!v(~Zn٧\Р~01A1u+4<ք?)I%4F짘o74?h=' 7߃b[z$y* i&~YҎfcyҜVB}ԑ ;J>]pf{}ku4~*8Tpş~k!h U=@ ΋+\y:]4<(jI>6 0w]Ug԰! $("@Y:ŽF4w:JϘj3iHEeN HO^C!>O{%;n&/q2r ( ƃ}sW ܗpTk ATJH3'>vU u)TuwY.Z5&UשG-g54nS0Ya^Q,fjډӎ._'zf$.lto(kx]+γpF|oaլ'v}*z3_2Ӭ&izBt^RכLwwu nxE0.@7"wz\-=V Kg,AX$C7Pt`oAu_vm迖6 1*}!=%'.UM) ,p8%3/;ýL҉/ |)"`|St^!D&9Ga~(F}:^{Ǫﻼ2 @))f} Ju<ֈv{_iwMH<>Lzq m^=SB.5ڵ'!5D%:x-31w7 7灥8. ᎇ!,Xn}dvXu8ѡW_ ~6\ۑ$d΀ZR;Z=D2^Ƨ@Tq;fnwi7#Wwi>"A7Ԇ]}>bܠw˪0㦳epD/ O SVڇS=Sޝ#Jv3m)TvDӦ&Kna\)5jΡ I)Tئpk@)FÙsRLVB1&VcdX] >:@aj(uٮXd8U4NZd&8 }VXB[KچϷEPRThWQ뜹>*Q Q tQRu3gG1?n$z4TsrmtGYDQ`_{du#a 1j02orPGB~H(1:%!!=rEa6G::wF H8D= -|3'BUKK;න #݃=8uo8vOg/Fs:_Ga 쌒ÈCf[n괣 !(TgGpWWKA*bmvw|&ЙU(xjYV(2"Sؚs ƪւZ^xU}6:jTg)ɬtΛtc '_mínzw#sdPǶԎ 1@_;j"EPAVպݳTUk+k)L_0BJr}dM#0m") -7,_hoh\ ^ #3xj~@MRw4,@a^,QXe"\7 RS.@=l#U)S]Fw!Q(O,ʄ)*˓a"~*C_5^[!Ĩv3> S]}S.BNT7PkP됤Hu-So:$d}(C)cp-~#Wtㆻ~66P5d&䒢XM0F.w tg8FV9:yYcb(əAkO<(2 ~_# Hy+jE A8Cl[Пi1U01i"M3(*~X.'dNjGV.2TY@Jkȵv2o"H1v7ZVFG= ƶg>'$#o$RODT6)ސœLnripPN{O7\ۭ{3+Evǝ-T6 Otr]H6}|țfq}wldX$ހ߹z)hZa7ZRѽXJ|g|b*3gO"ebad]Yt.j( oEp}kxw"Tnb-Sx# mAIQqjlBb*cԏEg~wތrf`N\Q4f8oA lVWu`/j=xʳs_晊(a[| u[h[ "kTWd]zhh]ʝk_]oPJeXu*.C5<%ykvaXj5Z>(p>b]3OƄ~}Z"`KuH=:uhqFnvע*xAfrU\~`Zku54/hҨ50 9P̪Ieg /셡>)x49>k{q1Cd)T9Qؐꣲjiұ>J]f仠,kW Ԧo NcӸ1Jwk Y\S WV@6BS]g€CGFd4+(uף4K܄:] nԮ^gvtOgPfmY^U*]1ϵz+^usJc%Q4pWRأC$vE,}{|׏pq@;BX+DW;O I̡Ck|p2\,BPM Wu )Ýc5^P;SӋv{4X oJ0kC\:QcD01I8e4bl}bMo&m sõtF^h i8F>iz9@ ,^l!4z攱*Y2 `#nN#aP2hw+ _ pA.DXj2.xЫ5\oh&}o_܊GH͉Ըw4)Ft8]rm\=>EslZvwTzrO=CSU L+[<"# c27pjh-1A5v1QNHΡU{)tbjOnxUt!k]ѹ3VŃXO&UжN- @6Fh \NZn'K21ٺx[Ku{u-[.h+X.:r~'N:d3}rZc߭ UḠԎ8JU}!s&jԄ/?(XW^=]⁉R,ebh:c@r\ރuY\D+eerOJw,B`m ׉AN#?6O]o>Rn%x?UI:=ݸǢE9_֌3zGbIWKgzs٫DҘ(H0:҉m)Da`UMsv<Ý;{}ѽ][ fت,`Sp`nw`.Btrap^=gϤhL B9d: E2G M /0*dy.]FWF{ۨ e{]9xqm{R-FIk(f h!$J¢+}k36\GJbK3 {;46}uΌ*,acYӊY]! }#> Ivz Hql6Ӵze1!ك ުO0x6Շ%+Ԑ C~@8BRuc,E ZMj^{O&CcIKc,>~&e=15 HVO"MHжs2{Zz5`#X.|iV]YHqF{y,3mp`OYr1IQG)q{%YۅbL:6Z& Lb4Dw.nAoy͊"B'MsOE^D>iֳ" ѡ?3VS3apf#O qիaN߁9}-kn׹iY4Yn JBa[br3[ S&"(uJ[u9?7)NM&!hT;m7A! Jx# )FfX)$1 IkݶUjT^S6ͮA3VQ;*l޺|3NԘ</9;G#M-JHռ'5;~akCFKR.Er$ Pc)r"er:}Sbx63Ť!&ȋas>"ٺfL5&-t v͈U;`iNHU_M5]ILop Xg a4Fi^hJu)ͪv.-{K*OAYXvq]c؛A@T_kѧX; :U?1"5t}_Ҕ +O qYa{NR6kD!vgADl)͇ ?eɲ f~p椐|{;},7LT%$8&ni&d"뱈!M0w/YKrKxDTHocA U݆i"ɑcө7WnWC#|R/vufKs0M.S<*zE7L|Nz]X>\+o-+ և0ѠCtTOH ?RKw'BvS"H@_-M \[9AgڷO F/F$Y$')ol9s^~>eKs?$D]|F}fe.́Roe4f}(˻l,.yD||y9W-)>l4Ik:Gb vɿtnݥo&{O8 /]bԅ?p, q+a| іnJjH+eh6Gb4O!d?.C걌9`vLJDeWuRlkGɒQ)1?ή_@F9 ax#=*º-}ۑ J3(e?0~(ĂkhXc\;*D6G17VKr"h:qa$Czv}4 t/j~{jNeQ-ODfSFVf"$V&t :"yI[E` ^Œ)[`XkIy`vכNͼ`[9,͝_ߞF،{kMhD8QsuG[71HCj&o:?jjYZ#0|/43^o^rw٩;vkFu0QHGOlmk}Qs[茨o&J^]Z5q8Ώl;O] u 9dWu=! - E-]'Zc@Wh#|D$bL\i+fyP^/.OM 8N'"+lSfp7ygP\A5"jR-Ev*2q[\OS?qxwOeILOyUOw͞uȕJ<鈚괹K=qU= 'C'%`.ܑ9mNz/m~O t rsnl(< :UëacpnVdAV }*"Re3dACuz }&UzYx|fHN?Umؗa@0*!l9>qP9}L` zU Ǡ/e{@n~AR=ו49s8rb1%E( g'RJG;@e<)i%gExέ7-VX7hN`6n+hC6D,+~۔|e1JO]|@.5J7U6͊TWǩ9q&Qxb!T,72Dg+FG C*ݖ!z>rt pUDp踁T#@(` -oINDkz|Gbiݷ_ύL# zCzA$ ÅM a5g鈐6i( @'病mpuQuajTg_6qn~MbYz3z?پ>)'#uIO4iƲ)w 5^GRn4_GLP~[iF[\UЮ&*߾PxoA灹.>fpت0UU?ƪohz>a%~7zT PSֽcӡB&ʋ7=25lۄ5]N&:PD ])>V~"7K3Jb4Jl.T\ma"ɯ$O<[l*m此 Lpj l4=mp(tC "4Ƕ $Y(['^qev5KDыЦ{h_%v3 c='Bfi=IMޡu n|F}R!8N7zxth5IJtef_0 -EJW;Ye֪,rtN ِ4᧑ٟV=8,].G'y pQM ao)ﮝ)k`h]Yz(CN7Q"6 NsH# EO~S-v'ؠ U[E.LЩB~BΡZ༌W ?G+@?·6S{"ͬx)(ȞiZR~.ׅš[C\0?r5=5R-CH |xt q4"~Cӑg/Ch+1{")-Jb9 1wq xºr.tNNItZl`xܖ\v;[IDdO9_!Kgp0h,MpЮ!ҎDuj 8O P^uuʿյ2~~$u$v,MY2qOc "+ hz[64kl1Go>R;|e†/ 2u4.%ƶ A ڕ1]mj!jfQNƦ~Ik&JTF.?Řmm=Mbfm}Te͌o_j@/QoRMݵՀ ukW1d~_ftyjۿvôh'bo6vk;v֎xR_pH*X[Ŭ k[R6 N$zF[75m38dɡľ]}Gׂyt"2֦hM$*kAq g; <́}SpOHmk,*P##9_L~[k(Q󃏌.zD̎ %{?5uv!72D ·I!u0]؜ݘhR)Le~]y&|?.2+l M\SpOPY/TRα6ϓд"9 #V R(d\7$T ;DPM3)oe:ROcPU7G,ԇOInQ{ X9QvN2lT"Jq5줻!Ͻ>zȌW z-:tep#ފeZ=|v0-e y}{KzK"WRNG͎3!}NOE"P 7Qw|GF*;"5XR-67|}} (+lv9L[jQu9~@CwT VB 䵤ut΍>Mi5&i:2 %vz|u枣2Gk#TZDOȊ$㧜)'B%Qֿ?eҰfzr'ϧwhjjϧ`RU~&̬\w,3$ZBl?|q`lLk-]֊r!;n&3]^]WEړ)wZOp"ClSlJ1:5* hZ}CQ.QwC hT,$d%٭Bp-azs@u6%9{ `h]F -ٵW&3mM9 0>ꔵwd _%TP)_ɯTN{.tئf P4$q(Sc0ڳ89Fuf$2k<8W>/¥ikO~SLp$`cF5͢6BAnEڜXᷧC~PS"ki hn[d&.'폅H !NWƱ /:*1K®r\.ڰԪ2jZm+M= ӹlya>R4DnMJS:px![+hi=XWS&QяQ.!aӀ~X*r/N!t]ղ$Z[ ޺@K#9PE#L*Xg8_%=-OzۓHwxTkC׌ s@"}$'y^ki7ƽiG8R#u#}"̒\-U;.4 Gea#.Q P"!6m\{xB4*RP.hj`21pcDU󁲁./Y%8YRLoFulLRq=ݮB}+k"cM"Ҙi2/(Q)\;<ׅ]4iܗORd WÄ+jv4/%"Y ooݢC">.&bni3GC7y"UbӼkֻ\te#ǩΠ*jҕ8,Qrۍ/##,r3>Y~CÅ?2q҄m4L#rHBVĖ#i Ȧ2RBC~} ahi#^ I/=tՏͫ*qGK Tq#`0f^Ht2fq(O^^/'y6O"#DT?.XM} ]Ztpg r*@rs\׿\4ۡ^y>&FHߍyΏάu|F-ii'jtW;Ӈp킣`;7$ YÅB[˘5\@gkm4wv`9K> %k+[_c Bǃ1|2lKH.n o # A@B<5{ѧ_H胚mDk>N赠䕸ˌdd;zԷ"X~Ne[%6-{#˪d#g$a ru=m_QىVQnHOɍZk(_U њZGW"=O(igui8PхXC®Kj4??-8C!Gځh'IAR<@ĨڽE_wlj1DGwYFU ALh^vR 52}LbN.dnA#&[̥Gw̖4/؄=*^vl 0xӪ_|&]@D 38yGFx8Ljj13`d7IPbw.{&(t>HUט8ޜHDdKwC9p W-~sГ#TWi1C},]؝?}H+TaIH(a]G$2]o%ƾ(c%t t׶mK".* ?2]d!Q~Ng3 ?>HJkRX xd}yq?[ d&76h"~Ibf/SL\LZ_F@Hxۗ%hpQ~}Е\n_c -.ۗSPK bk]r&M1Rvoc4 ڍ3EA2Z䩊Qzܗ->+Mr5ݗٱz>e }y غgl"ͤ~_7z/5z:.^I@ 7RO¾-S4"/7s&}!* &>kΞ G18jl;Lcݐק6!ZKQL{eAZl'<5kmvc4!P7`JoЁ9Qcn}RuRԃ?k?& }B)0ovYD;HGx ˞TюA:C5)]},!_ NK<`-܏`BUSOV%#BN-.#0ki{g 3xS;x,m=ɌCW\GlS:@<ܴ¾ogs*ymu^VS#7lNO6cGFh;Y?2():3fESϏ Z`WB "qqf!Nςzٝh T AF2?[vYdV_F^'~,lLBϰM T5*8eSxNer%Ǹ_zK7~m2ƭ?\L=p,E@AȏQi~Ӳu]"#LeLW.]N@niO$n1gN"Xm*y#m-zxobΟ0G#vG1 N! TW_CʓiI0U>A|;yV1sLf!8GӾLX4}*+hLB \fX->Ur;T'4w{re;70ZzB/֯͘0#E{qGCA;cJ>Ƹf oWM@@Bq7 ҶLW6ĉR4\+3ڱ]P"5s+jKy$3t)^ $)X&Y,to6v^A⥕ I*encMR fz,0$uCJh6P!bBG%DՇD\]`^}F@?`#<}HUܹnaMj9NgTG0iz5t;kmߤIҌFR=&Ey_o]%a_8Dn\Q\7 41f$=?F*'QLհ}׋ ǯs&Qx$Q%%./q]﭅o۷'cxo/{p1OOxe~:(SXюxs^ݬɝhrOl&a׶%d?QhyN@Am|<O""Tj¦:k''R7| Cv;EYcl#I4ֱZ@z!)ub;}2I^:&5OHUq7#^E ^mEk˞e UBUv׌N?Ӵa il H QOy-4mٳ0c\0 k\ΫhGu/*X<지>zgAbffqt,jtVVޕ#>Zg4Ȁ ɏHjEi9tzZR.&!'r;r\ {:{G#:D ݎB͓V@CUmW-%w\]WZ݅=%oqC6â zZOLg5*?͛蒤E]wNW)^x`'kGu7:fmK-`~\P;i@{E!4]!T1mVD|A-5] 9 #CZZZ+zu 2݁X&\*Kxh*ybFhV^@$DWUMݫa<>g q|MԢ>t915cD?S"A5X=j i3{75Cf6Aͤ *Tl>5^2q)Lͧi.)ɹJaPBW~$3l(1]9.2(jD ~{7t5Waj2"+7agoC曁lEd@Ůĉȏjn? z~z_Z]{W_#kG/?u`.tۭw+lVةovJ{_ !w! )|8+Xc !Z;~=#+UʨPg]tmM[>dE[b*ױSF'&~ӊv{l.mKԵb"sYº~ N>#K1lۉ0E Kp2O;!!ݴ+8 h.8Jx!<بl-7VЏvЩ=IjS905jR@=?<̛M_;U;C`SFבtL4Y Җ>}#0,js%l#U)yM<R̹ E(k6`("/D[BZI7YB6àW!3xWpFN;z)Lx=X\񚌬G, puJe*U6Ns9!5w׍at 6knn9}w] UsE$ ;pqY*3gSRIk4/F'T9k&tmݘshi BX/ȝRo).wG߀!]h`g7 j A]f@:C.(Kh4Ym㷀hZ7Ւvl*iCR_Ưz >.DQIsRd:Iރ_֪)Jُ]G21N+ :eJjfvegXWt A@ g"pg}$Z%Oʿ# ACL@j-a|=L#}k;%1Dҏb2^G_5'5׏ &*g~q.j{}!C8U`|-1"o/>̺=s-&e׎gZrjbYG#=ѽ")}qzx OujTLv gu /Xl@DƖ~NLw/t8a%\ zy.9~X\`ˇ}ya]bn{Z?Z&))]o^" kQq@SMN.`̫O&51_0:93̋8[WZ}5wv4׺2 {Z1kCujlIYmc, ٻKkD@9X:{5B q5D4?3*ʨVٖph11je]I Xn='3%y?~\)8bRP]Ct-X- p?e֕,TpܻKȢ\&_u@tW1./ϫ:.S5]`yMN%9c1ddoW~ 'm%U i8iw~WHHUֺvS'@(խ [.!:+R?I XΕFMQh l?1@PLF$2(ɺw; $Q(g-eGf`ދ.R4n4 }H_AbHր??zBA~G=ojGq\i$GY[tL%9*(s׋3cPw9o╢őf#Wf|d0d=ﲓ𚵝K~Zr~08%n1pW ܏D +t%,VRq;|»ì%Γ F/tYOr@u.s)<źqDL~j<[l<±}p U:;;bɫVC36ݏ`l\'D9?^nGJ6J ~u8_u.Ciϲ@E4jZf]^+]#F2&lK'?; #>)HFs.ڳ7,1CQ vt}c9H շDTgɨ(^h:1bY)v5_7\^e]p98Sx ݻ\Ve>k;4oYM@fم=/;/gE>5\׃p;a()bv%I!zoQ$eУz&!,h`ިJwG9{;rgz棪(ċ2ag%`Ŀu)58bw۞=ZI{O1P}9I`-&>qBЋ2N5!vVIF{tsVJXS,#]Lzu&UeaKӇă1><bm poz=~H9xmNsJ1 p9T^Wszspau=)6h}5j00O y 7\޷A_<<0CpcV5>ַZuߦ otu]l?3MGe'aǰ3;DrE_dgSq{CfsDE}y,}ʖExR`|/GOuGɋ8F趲DŽ{Ke 2 wA fŁ[riu68/>,!T"yYO J6cbW"oV^ic܇MQs\Za_Л Cr#?/ YMWg[\a~8E]YRp`:PjҭQSmq*nj!Bg_W|3=IENޓ&kC6{}0Uq{!-VPҁҕ#1*7EM# QN(9!ekMf gitwp(,TUBR 6Q-& >Θ J]kwCLE eYyX4Rg]wSΈj2Ҋ)қI?7FD,A]qO!+H%!Biu> 9ZY lss"QH50 JIiب0o3#8!`ЀN\NV"̟mi׎ӊJu]z뀫-w]֙ h](ԎiaڀdK @onpۻ 2W@}E[i<dTtٍty] OǾ*=Nn:}6s–p6mH8 Madme7o؈+>e[6^$;.ݻ,9s׆$\M2hT6X)?[w"`OQU#Βk$H%ٱpxͺ cl)Qh&]øcPݍBqS=$vW%&IZdΌ-d.jkR< Qܪ Mśm@nāθK{յ1Yj!@AcOy[c<+8|eRE˛ٮXe[-4C p1 ZUm'kKxs׏{z5K9@|0bٔ+6$JtL ܓA{3 2ōy=03CW rqڭf9έv ,X="(@$:o˲=IJHعJJBR^GL>b'e B$x` Jڂ{oVZJ8`\<fQv#tĠK)&DؤKDӢ;8~/{)ps)Y3uΞޱ'#U:P"Ǫu݌Mh>f\4'fyTȱHA|xW9mNJ*-> b)TF,{|v 2m3DkadB C(= ñ)O-UyK|ua?zuD9BMBO,MLzwND\4'H==VZLηԨȬ\Ǖ VS8YyW4mI_`4+7خ@>9xC; č0Ho>d˼]u1/p=񊏹)Q(KOeM0>{M]8/M:EIw{X?7L;W6S%|`1 sQ_+Pƭr~d"$O))5 uQgbcb[We?EnZ؜pqy<$ "祬0ݟ` gT=dw>QwL3 VB !- *(' !W7 4כ+F䐋\Ť8\l6<]!x7bSbe(W{bjTcw$d,Uojf[b2L(ӈ?SA@Ͳu((Fq$\)E n!k'[P넃.Nz7YΖu1$Ø⒙bü=Pl%l&~S ɻ3'ZU OzǓe8֦\0bhS\Ԁ8 "s}% :;ke8TP #>nKq2lZ Yz&H{޴(hw@M1ЖD̲aQ)1^r m l[׌īlIfUoLS!s&zW ^6N6rdk٨)rDp)5 I[JmS)TyUwNu3MUDCv< oM.a\? K@cm^٭Fs3Gd# zNS8YxM;~yrRW1))O97vW:v()X0 oZ[u ,5eF rpr&}#.㰞Ɛj bqfksǻubEEN[[. hh?vP;3MgP8[Q!LK>H4]^7Bmmf$[IzwqQFegNjK_)( Mowd>E"ZKP{ m"j_֛9(.Cn7?6N*BH٤E_7 ep~GWQa$ DiߓJ9}RLȈ)JLՌkw` EZ7Db|S&uj}$ xի0` = Ũm5^RE/5lDDnOHï#,\F&Q"*Б(4YɅ v!:Zth>Lywn2K( )5ppՕizU_$ph{6w)xCP_$H^<ʭ]r^0+n_,̀9w{uYg ϞUDwXbC>m d_^6&kxaXuІo ]#o : ekb"AX';֩ڮxh&.HL-W 2jG;6m0a2>;\͎MS\t N:So!"玽-ŇC~l7ssOf,ps$Eo!4ɻ>e<;ْs$y.Sma֬]eveUj˩Z9 I㤴o94QѰ#^"8zBHO#.nHVy-:H!@A۞he3<~XK/Hi$2}Ldg# í:OkʰK$' n1D%לvL+ ~QmbO#2H+߾y6QGb m. ,&2[rUv䰫.lerjt#\k&'Oh#$<4_A]}S@uג0 NGϙӭzcXTnosIgy',-FіL7|6`MYu2 ٦.1'UN$>12hx3tOQu.b(2̠8h`Rii lh! x,IQفuOV}|dd{Srd(驾-pBy!׆t>? jgU!$~ if!TNJj}aЦp R?^\6)7\'mv4 oxͲS`ʪ ;K}/잠\k7C1Z@\o_ F=|Ty}+g#yM?ĨϏˮᢲi伖Ƈl!EOTH.Tâ9(yWRFtxzJ/VǬ<쾿"ZEAl‰"f^u@-ch˯]lJӨr䯇ߖ"9G|Fw 9f67TQc!Æ\h ssC8Rp\ؕ;#|`GfȮf^yՉMԜ@L MҨIM NdqɩѻiK5<Ӌjpf$>faI-U(BuHcSv8rۙe+FynI6/'M92WZ^2C2g 7cx)ֺNJ=֑[)oxTd,anc{f=Wubn"[6z^'12 ՝ PB`kQ:Ul`9ItK=Q \KL`s:B[jy.?}%ZZl8JJ\|C 4kJiƦ`U/$9Z75Nh=CxT%NY}JIC2tG蓯LX)pOYV&|ʬ[̝<~eM8(;†=fNX,mk] g5c d^ڮn|ZQJC,*`anQ;mi_tu'i-;@Gm G]LP*~êyyLNV)?}JA /Lh1Z {@N06mŨ!e‰Ec?[xl IJ.;}@ =#םݝKޗm߫ã"/ǫ#\oz~{_612#?Y=-?oC~u6Rc|`~bwج6YXu3 :udb]W9T ^/' W;NE6da%1 OAŠ WBn2OB*!U$O ^Up䷉Sq fIsKM+ia؋ok!Yi<RzGzT09Hꬄȅi*KT8$̭|dXZqS<V?1z`lٰo0 l:.ysySghMҷm 7J<9jAYZ gXZ_ eaI|} JT&Aq$V9b*v; C2gԍބ=ݟ5}f7_Kq!E5 3 TG Ee_a>bnLp\%KȨe󛭵GD߸2N ;y?2n\fg9F(ҽFifE V['? G%yH⼵w==HKL0ڜ@>ԉTVO5$̝ a{oMHf^gn۹0g"=0w|^Cy ,AT'2^N"G?wLh=!6V`E&JU>lgtw f܌_6c=tJkv،{hfo,xM]L WҢ_i?qhfxְܑdp?Fy$yZY-ĘTJi<6i_|a9og0VhZzn5S4^'v/jCAkw|$\-aSJ" N^Ƶ*at,L')1ܙL|b>?z)zraHU,uk`=[™H,c弛H&Y5+cȤr&gDžR9d=E[m? zd#=ݨ&:,*8-GLJ)k6 Yͪ@8;K 2ҋ}wOucna>m&g2 ? U:}y O_r zŢKE]͋kGÆݝyhUy3sQ\EаەEPbYyɮJ^*A ͒5n{>],˄XǞJ괓ttvJyBBU.tּZa-8\Tjf"W@wޑ纏Vg!IRWQix#YV#GIjg{N#֝klg#.q?C8jW+72ď޶r2!ձ]7YAZEX.wla>8Ա֡\w+*%7<%^(xz?*yLjk1c.qgw*;oCɹ6r@6.25]Yƭ8SjDʵ I^ C,Тآcjg3vrP=*["A֯ٝ H p gӥm!_Msa;0ڶMl 㖠ݍzֶ1IpCx[2/݃RX~$;;gU51Mq[:VFyzM42M=U)SNA/RxAb3*1Y \ eL)=av/D1)K4^ӇYuOBwAv >UTr6=.؜͊^X6aܿ!7~әrV 0A T3_vh[ hj?p IGc9$َ{zHþ>G}e5y7%'40՘@7DXz5b}KE <%5VE ۬,U@)IOfPR=4kD7^;`))rVi0x')LzCY5(+SeF; ?vh2#%'vԹ< 6Tdyq^=3k5/ %ns8x#(`,:q(ٻA^Գ+,UGL/&%a ,:suUU`+}zqij6R;Tm(wk 4R$kF%&ƪTLpWyCI1fQ͍o| y=O|ڱA.OhW.3ZNZ~"lAeo,iHtnbH<)K,:!9kXf`1kYCi7.M g$/"AbVMf+)j%ނUqF۝3"x}à.:oZoKCOwŦ^PBf 鄬 8n'h8h؅P?N?xImI;; B#^)|+YJ~١|<7|(lDZh!-N_BR{M捾kJjs8SToKS H|- YYrQl W^pU>q~S}1;p?%v2 u7{ e;୬a VꒀͨRuneF3G0 y]wF$6rt;v9LV:VT YJ9ϋυTMm59GCvzBm, ۽ȸ>҉ٗI1/y;/`'QxNw?LmSÈ q*jaW p^˨)El_\nW:4_sX`TT7AT\gc)oWA;t%e{e<4%{WdݕWֽ?hy-=9fk ܔ05l)xᆰMޮ%IУD0`ݪhbOkB?]Th7%PFAPdOOb`Y'@xnQr4+]/ h|n(}lD+ <2ۓ鮕 K}بj,-CXVd/ünDK.Nx/LpyufuͅD>­pHiNJ6^v;t+=kJE)W /&*"Ъ 6sU;V O8Abo7|B#&zm\M6+F!mv~zG>1sˎ.#=2UΨ>6 q2YW?,?hAx[:En';esvyҚxbzГOg՘~ʭQQ&2`5x~=1QuF]#:vkF!;o cDI};eC\ VqA}#XTls/Yٯq.䆄+| _Cq>2C'o3WK)INWGo2Y.-|Ml1YS ?`i-=7ַUCJ3uR T͊۳@U#L %5ã[6@Zto-q0Z\qڼY%zIoIbFϜ] m|0F70 . %OV3"^Z 9p"m]o@,7VXG RxLk~,wfmm3UG G~|N m'F`aWhz7x#s<ղ9GOu,llT܎̻]Lۼ+PԬ"6 p^Kj&9XqO\hDO0꟝؂^@X7 ч` Eiw"=>a-HIph{l-|CWn<|1z#R?r OM}؟cUj-PxCt0 Uj* qkźkQ=to$>kQCϬ캚 #x5nzkLO"tBoNeq"ut iށq阮9;$r$ιD f+` wzNȏL{֨49czj˓{ ,d1$KtϢ=p 95\N(7Hw Lm%u@MZ%>Z gb֯1~EB)X=I0*6׳(^UH[69guT)ȳ y|ex5o$s(&'%dΒ*-?c01oftk-g\i(i9̜QKHQl^ h %8#>'d"_/trmK0u^#ո'6 8ek>~f<&O 6 N~7-D)KՈ6o d1nA-EF< LKv5rTx`JGn7c*"!.ƣ*(CZc)tz*rLkr6Gdcƺ'e6hybwɳ`? /7kUMf.1\|5K|N;?x7| ik2W/֓kVL˖dI8!..U@3C>92KZHRwT3~"z˷IĸΫn˓wfxwY,EE!o+.a#FF4b%xRcǡ쩙,[3RlմgefV"``ZWg^iL9ꈓG.'(ؤ+(h^ôUPI^[q1. ,! L! VsgRHrz}\bBVojNT (pֻ"%2YNIӸ%U &#@PApݙ6Y,^;hʷu NstD*:_,?Ddg{)YZwݘq,ީsbAݞX+[ZsKp!y5= e%DCnfr|Rۯr=LjzJd]73H lԟWR:|p5nCiw/֥SKCݹ2'v?NQ.QO$¹>6IH #0s/GLΙZhIJڔ-ňH* ?ٖV#?cL~u֮ÁrQI8L=e%|[7֪!"ì^ISDxVi;5Jzכĺegכy*g_d]V1LA.`Ţ~Q ~d$JX/^VI؇$/n,w%nS(l!Ef9f+uBݾd;Y[ qO;{{^b]f!9*Úew{c%`?q\fM8cѽU3LYKu۷0y]m7BI}@ҕOottc*f.X:/vIgcD;ևdmsI |Tgoh›C7_}Xr~"P 1}ΜT3i?ب]Mۄ=h z&JF Fhܭ2+O^Qh0oxu^DV!{~F!=9JpW+ܾbB<'?Lk~0OYw?Z/xg^` /SGkf4Re&7bA)[Lox8mnܭKoV:oQ7138iˍ&7ʝ`Z&mE@U,~DamMsu;qO19A+nQ-%mmw.Z:<.y`qD[%EF+T&Dw|fi젗4awDYT]n6z+P=o*3S8"ѩ;s0$DSUӶ玱'5*; Պ[k),,T~ d#.q} #Xp1nQGsmOC BI[*Z Zi~b3&iAri4Gl9q 1YN)"˪5w-t5|l.Fyk:ό&!9(n,-hGu^C{} "Q~ޅUy_ UŀJj=Dͧ7u>OY#n~EҗT ɻԍ+I *AcyʭW<KMCg.W3L3?iDj? y 8 D:6We~'j{f5k 'BlZi g^H9ez esXVkp)}_vʎ:IUtѯgŇpOp QH=]HaK䏇w:upGzνZd? syzpMip_aY 1e0mύ;FU*!(pӪm+j6OAPvΑH0kNeh--MCzÿ5*B- T]uMC>̢2h@B a8&4m7MY9]#3m 9*֓"t'&4VհaMq;9a:O 2\p#r y8ԣ|, }yك68m⌗SaU!}4Ii ~a]z׎j 8nzXT,b{:%v-{=8vuV"9Ap؄*5-;롒 EOPƏͯ1*H%Hzߤo\|TԵi6*lu o #Bidy cFǹf2R/Fs?Gw $=;L0atz*Ul|õs/ءvdk"ۙ5pO"zUF+wbʣCfABLNAQ$C$ŝZSͺI)JвYU6LM-;IJEsN\UA$PeyHÎ2.e!g$ R<>K)1j Ei$RxF8^&Ld[bk70VU.jQ$$FmPZD¸T5`p]I6 :F[ Ilg4ůz#.:} v 6- J鈐DvFw;_`E%#r?EV5xK!=aC02]ٕX560mYV_y)8i,%ǤENGs")fI21X;  =Sܔkkr;Ni(5w 6u!c)TS6R\i 8 8 aV\kkf!Gd'O8gI58|R\"]'#[zSn?K`5$DI\9%gP.q& Un|_zꥭRIptTaΏ@¨%ۼ,@@0.6%)*W'5k ȀI9䓃f}Qׯ*do*4A8A<!ҕD`BH1R:8x<ZOJzN²L([D;J1۝ew%$j|y8sUHl9(ȠձHh'FYՋ㹫H#AkfowGďغSxsIXh? Uզfk>F n:LjV~h%u8:1I{BQWJ.2OT"`72p/W'Ga3%Ymmۏ w{^W)_z*5"GiE`QzT_Ьn4±l,eIg Ҿͺb0mڙ1S* -lျ4/$导%FM2T'8L0u%:~+5[!jT~. baCΕwٞ;_zMIreOwD.k6c{_)H- ̦Ko. . wye) Ccn7TVw( tGWٗ, p'jznLrYv<\ItB`  hХ" RM}\4F="0OFȘwep_J .6* ]iiG)$|F=33,$bZ3?|WZ6?A%ض®ˏR >[!lC:0WBw2} +^N!3H&\  \X^Oo'sQ.[}?A~.}bw` 7wC]6a" ]fƀ\ǨƄoO=zpۙܿ 8 1ÿ5M XM^3xf.0%ܲs]#5x9uoNsG`<#:g?И4r&(ݱDG[  C̘EI}=U\\j~$gҰzmlzֈB:~y|m8+g]o_c}9?/p a\0JLANxAXZ)J}%Żo\;x=Kv!fɈ>+Uőīˏ %Ey^>!an[j-ڿ,EZX'cJۊar*8GZy˶0T]5yȗeT$HؽӇeu_l3pɺ#Zalfe<$H@gu 'V)CNOVR2ə x$] {>' ӓUa#:' QupjD,&Ft=!ZfIqj 5' R?d6bd J J[g.GnI@;j.;^oZtb-_ЌS*M@1 eW{,hcvnf_8o+'(Mo= f#W)$[iÙlXeϝRrD]ߛFvU "4;/\!|>.#@D#;=ה@p`_: g\m?/.^|aoʏo>BuQzH!Wۀk}0Yh\+WzjOF#.g\96(_mlUS"anZr'yV3«ȡ)bo@FV-#n71i;eė*1+=KUGɴ@x7@RLa$Xσw[*c]Fu-޲汛+GÕ=ï $ì9%^nn9#FLIaTg1ۅxa'6ȱ~=YuV=|P\:ݍeV߈;<0 4j1$SS!Û/d1H#SHcf֘otF"LjK28 Kuu=JpiXL xj>=cY;fY}F:hتڪxjxWq-5EĠ9Wry"{ ˣ_)E _%#@W^mxf($cķ'beZ\J.V^#[` ? ]\iyG*~I`j[Q8,Ͱ< 3}B ϥDܲ8tMm0Urt7 ʰDZw._9AEh$[ߑXM2lT&VS?_ j/PJWĕO'7 #ѫ% FK /)lyhӈ">\Rx A7UE{T;%P/|a>T-`h0c_`NY@7uz=Ssfn`9-/nU2f`,~/[u3ydL!6'ClӁЛCx0QZl(?>CUP$ٯk n=4j3F 1>sp415LqYAٲ@XO2Yco c+]a'56pT ZPw*TcNdfJAAkJYph +MaM44F|0x;|@g+u>2EqnaA$- 4b?knF'pp6v1xp}Su?1˝wu63E q1^A]ZpFCZ;0f<|Eb˪@Rɿ%ԣRYl82mRփm2\U"uGƃm1 W6q*$ͯ SU|WdZ;Ȼꇿtj}Fi38Bt n RoݹtlE&QM)8 J9]h`S9="bI)8;+o+YFg`W 2À_m-UESjVyGK8x##նvg琱Y(8cf&߁;6d^_}f{1쫇OZI ZBnC e$=p>@dyUj "pjoN#+;U{S,ô HZwHp+>Oހ9y˹j7gE"uՠX^'aе_ Z$^sI[| T0nXCGGG #ZK>1Q)JܞK 0(uX`5yG<z" $D#_ yiy]$Eu2^wMk6eN\<; *>Dr~U1]7Z_!]7MN ~Bgܿlنv״۬?):Skcv,Z.%z3gnl:-. Z 2&$ZcYL8frʁDŽ؊t~Uyzm㍐fṖ &1!x3PvF`'e{⮮h_KVq((=zO~XzaK,2t|Nw_TƟBn+{qiFesQS- WhYS+;:cMIԔ`f_Cx)X!3϶&8tqT4W(fXU>ib6m/+FS! FQ+w\{/4oCIˮ+ P @E) P"1f!wh{[*)vhlcO{qK@PV,\Kܑmqo֊UZD} = y^Z;+1 vapʫnb;mm~mqi ebӬ]HUc*|~ןU?N_j?JqHoDK C8K$sK|Tspg@gX^7Jޮ ;m473E8У Yb>xAɁXN*۞-;cNKxoRCvHQhL'bݱHðNY#fI FK(nc:grK5&oy`=}[t; *QFvw[]nZtKV mc,WMs֞)ùUpadtZEa{xsV7v{ 4-Vq2e(+s CEzR=| !P 5Y&E1]fP^Mɽ*q٘fثTAܾ]*@+zcQQr5H=\Y<wT:zO1uzl/0RQpI=i[RwbYZ)[67ҁf7dUgtijA=?Kus\= DӳVuB3RX1ѽMU!<9e[\9oXzFe KN3Ćk@FuejaDn/Pd|bU䬤?W`R۵"D0$h 5x;'$bot Ysxt}BG^sQX!2MFӅfpB:0@k`ܷFªm@)2P^jIiM[b G`Q A/oX6OljM 8ٮ uK>V"7Ebɠ>ֱ`5&I]-iLv^|2~`@DJ\ymNj7!@Əgm;NxdbwP*!HƤڅ[/Kz 5Vޫa0cQ@ ϶gA؀h 綣{(=xٗ\Kdz/z"iEqVaB\$h9櫦֖l5M9jpx` z+%ؤ'ā(=,W`Tx0^9t)~mO!@so՗tgWh50?:CXz= l, <%bkW,.g5JniHXX`KÞ׵Ca89`~H-Z+a=YȡoGy3Hɒ\/vVDe,J_ӉH@{4U? A)C[u/Z~U؏f ᦀ?>&~jXru:?3=A@sm2;i ;: e<( & HEcrKϻ _-ٚ5_uKj!^2ӂ6dOG-J xlm\AEԈ.@A JTAZ}Y)5Ql$Y"fR}*+e: ۀϹf-8>L@ӝ1k_0{H|qU4 qi*&w\Tw/m{u$F#Sp>nt7m+2mTB*ҷ^RTMBuT=#wuoJ[/0{`e\TUJېf\Ex44}rS]NOY\BT0 [t0z-^6?`ڹwfy|>D|F[qb?I:*j;CiClgDkyhXZl9k;uɋb xvQNȁQdX'2\])u$M9&(}>L(҂oȳW QRPɼ*)t>J2`džu/:$h~զmafc3QWgdG4>-Aί gVd:2{-o9L}h@8r}E>]QPT083; S)P%roZu5tfv~T1T*D jh*r\:>aBbҎ'&1Qn'Tb'DXynl#*eT6a[ֺ$b(SYG*Kߢݷ,yunn^Fλ@KE0S%NlRhy le2 wVG֨6:(̆dI7x fڑ1xQ{Z/ጓt>hWկJוzWZr(#A<W-fgGhGFRcv;vӉ46;"Ԟ|~N%>_YMFN@عw_)rOzٞާŜDN۫6ޖ-!"_-‡]RGpC\(~K }5Jv7@'JXEPB)glN ZT8I1 ԎNkL+i N9!}^%IDPuje!erKGP3=Θe#v- Hl`WR7wws}`q.!`3Rc:oPBQ|U{ˎ?'86<Ԉ` <۫)%Y)$+V[ H3|]:*FN/ ) ^~cy6^sPhd?mL$T="sYњ.LM; |Py ;`d󐳰nZr 䛟lg "B~{C+ʸNALo8~Αh" A J#i,_0J)|*!knGʶ/(OV`18aKxp*sziWe5}ɇp}UABKA5a;UJs~ʳcُ 3%؛eNwza۬zمDE 3F c%*c"(RJ)9XA ӽ*͒L嫖Zߢn=x#GֺNB6iUG{EVI=iw߲ - &=tq#$;ͻATr#0C? 1]ioAХ jqHoLn\ѨtU==Lr}`[<%L+q|n(ѰkP7fYggN`RG{TEGv;n8Y2=Gc^eKFwRI;4XΝ= 묱I.םp#Ze4HϥHJ@ף#۟ vd` Q-\Ph6sY-u zBR~(ݺr%4yZ}hԃR1ޫCЗN4HGfse-jT[giE S ܉TDΙGƯ<`t'ad8'ZŏXJ@*nf"Z6su+jl*/Ma wU&a"rhG*#{fklvi<&I cDJbsZΞ\>2n" NS" mͭxs|Hx81*, h R1J.G~>a |ICxx@$e $5].ؙ!5}IFPͅ'kKZ1Y8_1.tKE-5Klpip{jiL,D/VMUK_bV#Mhz4ufdwgNwulB>4_*fP:63?&T!ub&fL/7&$Q.'s2`ߞw޲m1qyaGR%`''"8oJ, 檂S~G?ȑwJ<]դ_Xd9WLEZYGhLZyJAKl3A>b_rު{C߹+b,uڿ#dCW\aHFh'-HkLxdF*ovwQ΁߲P(ڭ:#ƆX6&6eQPZh 3vim8j^:V<,YSV;#=zW `fc,)뒆 :@1THNtsk&aҬ!;n̋P :+ufQc*=ȓwVFr]JRhY+ 8qEhd鹷, Ňzt+! B;n$I#M)smk"3qXY."b5Ǯ;;, Y[5❊%džKAN03iG 炛C =Xwϱ% S5zsn] ҨvuB jL7! Q}KFGA)x#(MH2,[A`Ad~5`͍7fV:.e 7Úh`>1l:61ܵ}l|E\;g<옪})xǑrn- wUlzÍy2iI J@hW0_{K)TČG1%-X7 8!,׸Z/K4[  _㵘6siȀ(w8YI.a ҇ثᮩ[QN]Bhz)b d9=M te1n-sE<]<ǎ̯BjW[SܓIzjǹ GyKAGԁ<3@Ol=fn/`=YO`c0+)H!L:}dEk7 kctc퉑*,gT4h;>)bj.ݠl_q.^GEx/'BM'B6`L7<ޟn{*a>}T> ۃQǵ{kDNW>U6\DtBx0kQUy7J{ܺ AƆr3`q[LbԲvלSaIŒY5=tBP\w:g\a\tX"}N]=< .ty!el<\ـtp%Y|.SLI.L0eZGW1oa4~f-}wVYeop ]F]lbyLAuчt ׸jۍcwt ˜HOk1ՇCX$96aWHyOp`wxpg.9&ʓqKzG_q%*7B)wXOU <)2kŸꀲ|d X^BlJ'hJ;]d?1k冝/gzJVG*цl_;eg 叔ܣ=AϺ2&brR#kw ,Eu΃8 aInN\]}h[T(:3h_νG_8`~Eʰ?r6@_ 1l\!]Z0̖ Ry"`  ~DFrԊ=KUj^a4ѻrxF+`IֿNlj MEUڕ{䝠TGu@;l2ر;lAYzd53N0'-˿̻ۣs(jH.YUmy*fY>A\T,˝\ٜIm2.E*\/_ڑb8*qn-hO;Ћ][1|҄vgtU)QvNlkCgaCOdga u~5Lu܉V} zJ`.ۀ!)y[gg 4qwrCVխ\0?\a÷ns<n&҇ /׻2Ubhz}'%'NgD  $3pu%iuy[ F=.fUF<&/w$*mIIE=9BaTp2D wX3-*lF(3%]sZ57Ɓ+[i$gQFW+xabklSJ]1xf :\bA>hQ|b9?'eS|g]7m*дkj*_, pƔLxb&dWT 8<z;$%s >"Yq-=>ʋ;و6 e{',"L3g!8&Q]q`3:CCP,aQ]uOP~$fݕ >"|l45 \_sOWFǑ1l!8~y+&lS{vbƺ&wg,5H(Q̗k#?((q<ȳ{n#04'gJu iCvc|ɓ C#Lmor/E?% V]o90f9 Q{S0ZQxnYD+5腉i .gy78bJU%< kx!0*;ZtuOc4/&e o)os_/a3Sw?V #F&9H]؁ TI%>ᛦtVZ{(ʩ75'R'}F-gf5K+mG Jd떛<;t(m\v-: ZbU4"U@1.#8"ijށX|M N(l,YQܨ~ZBn؟ }NV@sb+ t,n#z?#r›{OdS)vFY7ݓ!J~ڊYv<7!xZq)y{-,jk4KuTC^@=fUU6BڍW1𼅉 t؆N%G UJI:,ݕ!D $\nBb׃7Rj=43O\oVHk+L/͖9ܼj#&@[sfqLOP t7B]bEk)يAIDӕC +%0=^zL"ˠ2sI<4xO)$SٍkIϡkG"1)Ȫ=l)#ׇ(gf_fC-}EL#K2zríe fU>faWF 9osmp`p"?ڴD1 IoF0N9CC{?:ڱTˑOkw)qs ( c\nHg܏ͽ ѐ4itjvDONѢ@'(LB5C^ɞDߒu73ReFxtEƼ Ǧw~Yf}S46bb$d1U߿6=} Ȓ tLzh2ag:7K)R 5^[E:jބyo|t_([Gy}p+DD:}\/Sc[;@" =_?2YDMU {h\ ,BB5CuS:, U;=8G^]؝;X9z˼1nYј^Su I1F]F`o_5^_j*EKL;nեөN vYnBT0uN5p ` 3dA\=7.mu˜hfzô(tj\ERt %BOp$մI&ظd-I.E[5KAXѕ⚥bq+O)}5 k/ߔFFvpyi1|1TT9te$ nSԯcz Xv2fsjxTnh2^R1;i &dB4^ې91gs2B a,ͯV].$EСTx6pk4{(QېX:{_U~DU2^׃]J}e{ކ Ŧës} MbUR."vgS@H`tDZ~Gw'eK tq<+3T9GU/RZ ;2X%!j&Q(Y7zb&dN)\ob;bCbaURF ~cՓ62A;ȒxGs%p(LD͎UV{;H(4[Y7^J]pBrOOX1<Gk"A^p`)<590{>4TC.Kf#pZۋv$!նܩXZ_9vUTۉ3禁'>#S+n]M#ʹ5g: U;fX4b(dYSh4?mSFU눏vTHSR`0tANm25!B4-3c,K\Z b̎,!w7R :2k/Z,+yV!c8dO9],\ }љ2F䁦\+>eƴD6;%@V1ڿ {myd_FKԎi/ĪL!M&|^c2Y{5fa'_)/G~f7x ŗ> &wN:=2aG`)'hOC{0-^wB|hDix\/g\ $2KX`_q~= P:6so O):jOjcaȊ`#n;zr iwc~ N[Ӂ: `rk-5?*)]UH`lLͪP(`&Et$]Hl4M]]9"a=ls=DMvPz#%2$fZ}5\vlsG{0'e]Zs;I.q~f`w/? Ih/bͽ{}r@2Z1-XrVy72sBa di<)}r Ta; N´-~o1 (Jt&hRŎM 1_Fwe1Z wzp9@:,wiu浈 ϩ@D|?ާ=~]!e4PͱpIQ~emD2H 6PDZ:ĶIihP?mcn$jg !<}x5(Njjqq$uqTY逢RC '+ŦiM UciA l${JÓ PІxkVѴz?B &MftQbAtL+~CB@5iзq`N I漝[Todc#Gn I'A';\᧼FˇMuRjj\ GϏՊb(ў ɽy(EaR;)D?2NAiFi>FƐLؠO_LpaƉ'FEҊwm-Ee;Om?|2ZR,\ҫ/)c"-{PF€TC?~+DP]}ex}jROa0#K+>ىۯGb`GL(hw3M;BdQ͹ ΋XFY%q=vOўǂ|"WCkψϴdGDzLt9hC3_ޠ4+ES0kC`Ĕ?.gnO*7 ه65nVƓf%NXk8eI<_|乮A/-g{f!>IS'cqlD(K6&`f 3|397NlnkrcN Cr2czcpXt@ lC ]{|wP ,V>x/q Fʜ!;|)|#Ϫ/o u$_der3zrqT_l#6OB ,nкCRV'n _̾&\Fg_0(H@/b<\d[XFD:3MC6 g;\/w/ۀ)̍?f_),LR6jό [ovK2m/*ࣟէ"M/0g3vT~<< Q.ͣ-#XZ+HAdWS`mE ~7z x"܇1bHbܻh2f//2_ξm&SK^0;{d;0WΟg_L,jևl~X=Zfm{77DotBHpSuߕR3c{F;)yjc573be>S 2Ɉ7Qw+",K-X?o|dVC߷|$T8Usy-c\#XlDYzy$__'~BCl ]g+ Gk:)k-v ##5ig $zmVocN&WEZ@C=[H9vM{D]<NÌ<)7#M hS6lI?j|ȕ{13ćt~I0b#G&<(⢩OyˈMgf7>y<+|/x?[lCϺ;:P6һRT<8iSK!;pKŒR>}{ݧ Un%WKQ[D-KX3+o!ƪ2S A-_1$XP ܳ68]FW֞?]#;f)~Ҍ,zOk8Igh2IUk򒸂GmQCe‘W#f.[q.lJl%ˣd^*Vo#%]S@? iTŔ:) RDf"%׳)J>?ӈ6nTVݯb(z3qCg]`s}dK2 mlVd9}1 Yn'y|Pd5hGfј%0g*S#Bxt-A8xsQ< :lKsx`7B6!>Og@'Y^99xo3f~:e3=(bMW7{֞Rg{Ҕ |6}V7 h1&a%UVxdigfKE?R\qfa0V'Src[ aL3O;o /kڦ!panlֽ {QTW@0b*/U.Y`U*a~ e_3`^+w3(s;z&x`=x0UwnxG>/\q~\/b<BAɪ!ˑ^ճ Ul!Kk}O,^ F[iڞt'`T"xC5|k#\wZE"ɷ(n"%(5c1>o.6JV g2O\@.ښa)N?)t6܌V//.[Oʼnyl07 j7)#}UE2|[ MԈ@M$&/n3uS!J*;) 2*:ب̭S#C:@eKZ)p/mU@wbzw'U?@u'+|sZk֯Z?_a.}9Ե]@&@Mj|SŒ#V Wjq : y\n)md6Ϩ|Ui~*6O/rWc>&xC=V˹Vm,Ꞇ}#ƫ$6f^(Ab [EO@TDb/J"vӥW!^mȌZX8ed'I .~O'ЪB1]V-<֖$K&"ӉwJLS\2Đ90*6SZ8pGxZ%PD_ Pzf>Z(}' Ι9⓷$%sl'ic1S<#WH^2 YnezW,ܮ` )پyTѼZ >z+j3gVP_+urcӬY ]ފ[JU҆ ZKZ1U7 wAX[W8gჺόVMu!Q|#=ZO}/S/^%[gMRo+62ɺڟC/+1{w :@'N#l|4"LLAXuhd0lހG?[Y175f=4-0z=m "9WtCWHf8tg3b;AĦX2+4ϱ]%zC>3,N?ݘۏ&2^ ,+ûC YI `  )UZ2]~lT!$W'ɲ|RrЃmXu5mSI*glD#GfhOer@|Ma!eHE[plGq#Dc͑dhe[t<۞C1R?)@{S с1qϝ;b7"4޶ 8{>w,cyvi4'.Ȍ`bl9D_% ϙv42yyD`j{:YS0b+tiWw;S@Ŭ>2X/N:Aiy(٠Rfy2)&g1[I!!=9SJے\g_@E}j` jLJ6$buS5W{>gm3V^Jou)'l?ؓZ'6L đTg,6^=Y&wu - ᛶko7ejmF vG䙭U}/g!FLg(#CڝWFE:CXJRb4{O5#9Dҵo},J,?zD1؎gٗHN2J ׳/p3әg_LŃ/І<-I_- D!8#ðVt]Zː~قwK'Kg_) ߌKMBå &>_.>!62Ծv_T^yªU/eǚ+~RNʵM1#C Pt-ܟME ev*S0YVzjDS+5ֿ"_ewN$4@WLT'|("4ʡ y)a,bŘ>Ū$|89GJ楛N*I6OWlhĿqJƵ y_$ v*HP75ԋؒK;|uH W\J?VB7~uӏ (WWKBcD` `rWpM6:'`]:do([cNݾ'+urT/`ylNi#_1Gv{rc=i_NwR Ԡ>#%_ kކ1GފYNiV׳=2>X郬~gЯL6^byWx;BW(EG`ڙQeahVnXgP2ìau"C *FRg 0!dߋ;1kzo6=YG3J7܌\JOSB`~<ggxRVzC&Lpz W{yM^Կ_T ̎Մi gPB/!LI=)z(G.)>Ce+oJ7y8nvi(vAWx|IeR<96 mc3)ĉiEl`IZ\ӊ16Z[Q 㟵"IMRqiI} mgZtx&KHCy6*b+ZoJn 7 mb9!܄c# 0vMؒk u>ϱA|8ƣUm/F'P :J{>2TslO̫/ؖ?K%Dmbm]LުB\ziI!*glS?cr:N w eK=wG{_XboE]vQsIe|y~*Ev`#"dozoނ^rK~U!3ǚ@?УUCWzB}/xU?&yзY#-6cfܹv'MttT8j~8rmQo?fQlsok!:3/ve5o r؃[mmt֙37m+ ;mgYFo3i}ޮJ* gq]+XC_yq-LJ.I 4>nF[/r"T7c罪&U|lnk̞3,_q>˜۟ ݯjkŰ_833n`Ğ!r ́Q*3_9{וsKN_3^a]2jjH>"X:]sR>i>B3D~7=b3#p̐{G^&<*=CܘaH'^O{h2q%j'_ڕ\O97yǯo=QZ5 ؆,~C#/t:# 6kɸW[z2-Ep8a Å?X~:Vdr/D Q:c=Nb5zzN^xp>KF&E]j:Kx6G2kEFחE~r=4ΚYM$q骕>fayy՚]Mv1(ow9[};"d߀|뽪#$Zh4wTq(BQR! *&H =e*ݴc/I?AC?z GyR{a%7:r RWig ^tĿTT'x8E0q{+ 9$%I ,hXޥb*GM*NB@ȎU:RMCfjҘ(C׫ ͂؃ҢEFR_ *<.'%9t֤` MˈM"zNB jRvsi̋$:0c%f㳯l !xN>ĥ^wܽ%C<ލB"Ϩ~!Ʉ_:Itgllw̪Okϛ;-~:o?,7|_XgsO,һΠVK6:Ƽ, t[Qp$27l.UprXtFLDd+k!fRD0rE-^e]|{S+E|}q*h5;Vpg`h,i2.ieܰz@{AMbG//35Fw@gیzD XO鞪e<VIL CyZ?˘;i*b]N! ''Ǎx|ʃU892YkM vdBE\ٗQf¦r<SR| $XK`T_b9y|?c;:7c'`0%*VXS!܍O{v`NC) Zh>ee}C%("k4?QN~l/T]pp(|Pfg{o5.txS}3I*҃mɵZೆ3YXq/[-]nБ( e-Cz]Do_/[-_ -af} ;ƃ? 2y@̢J(vO"݆If4&ko"lg6i4;>"f7|;_A⎮ 'Ҍ"yj ƀl,V\}S,yMxZ#s԰- Z%u iÙֵ?c(l4fƥ|Tc3&eH4#kM̋wmD2:$IZ}k `c9!nssl"~gαw)qyk׻oyM 7(+I+Sz pZBrWcα4(d} {l>FC3֏sdy+뀅>ҐA}-T&E $+b @@R'HC<]Sg+\%C?;G_u3Fb{$?!bwEES4r=6MzN1xGfk륀QmۏwT%O[?kxF?r9NB}hPm (쓧`}-EWt2VV^#Զ{ƞYmsWCfci?ZG7QѼkd=ןԆxe !Y|Tjm;JZk9׺+9Zfdoѧ*gQJC ou[U9lVՎĮyig1qbwE S]?z 4:;Gn$b;jlԓ~.Jxskn'eL!!Gu+eK ]d XmG8kto(zyC!;h_m}e N[]aLt).~PK3ɰH'9 5RqY]ęeldyOlfs|ERH7eE㫱[ uGK^z +r(A 1<69Jl6&;BH3RS݆LRbYL&ca1{$%X{z͌!Q*XB-=PDRS?@ZWzN8;* nҒ6B lur!@lUam`Zh2^81=wBFǐ,*qx%,Tk.@N]qrN e}Z*d$>R h8thn܇5#Fc߳c*+#uV *VR,6TYT=4Z~.a iO3cv^.ITLx7ÕSod>R7͟_p;9؃-L{A<{hHxS6MͣqB)ne8I+.c習U{uXC>: %s%GGUr1qȣVju`NhUÓJZW.jQل~`&K0\?W\RY',P/\𧂱Ln ;M ;Nѕh*hl"NKR kd{WZҝל4NVDsk?Xq1a c)R {Ⱥ74}gXMTCtg<(+VWDcsf!}V_Uz?.aGP WGQhhaAG[h=v?^H/V*n}(UPx C:5@:}o ~+# q N'ɘnzȂh U^B$>.).q^>xee[cD)6>񄺖c`E@𬥈K< ۽Ex:WCwQ| tp.y$3NKAȱ l)X\B 1bA= saQC0w5n}}ݸ2B燥Ae92X>i:&%?3 )>aAC4owQy | {A;ܡ 'kz>~{`|Ϧt} 6sV`zȻO2ƪ=8Y%>k~7BGY4k!ֱw+ F[axTG=U@N4Áy뼁t}H녡VX~+H[' ϵɺ]II߲e=q@'q9BxAf`Bp&7 B];դ*wנ$JPl·2 ë1Dgξ[:/9~0X}E]AUoIS,5e]~+@XLOώ`d⓹sT Pd}5ۏzbҎ$<&Yv^6RUjj֭=vut[v ƃ)o'5'\grS.Zӹ(^>sčcP(uFWu8l7^%az@ Pf! {1oFoV]DsiB&9;D_$XgxtCLkIQm&.FM"wR3;Q@>[Z*=p425ߡ-y|bu4xrqsvKZ\6/ eF۪X/*"A8^ g$6tgkoR$EpF ҝ/2VmsD+>~=^%ˆ؉͚lPW_}l i|"Ai Btj}CJzCl<k;ɶxdZ>΃FK*,AH˝CY4e*$*6_rV_ ?c;<% 5np3z  {\7&<+wTFpS=R4Yg=H)xJbʧKi=$tu4yORl FXv֫z<.бcmນǞiec-JgŷTUź#;AkChPa%I!,j'n$b 3R6_oUIWl~oǥ*B7)Uz`zڄai#SRH hgzqu?!kRYz*|h޺n;05nmp 0r;Gc qE57mHr37؃+ ZHn#T-P!X;0 d|@@r=rJIK2FWUSfEyd,<(i+.N'EeJp<6[+‰ 2G@S4[zJ{ٞf" !whYBzx?rT$>0g>bZ2z}OdI OdkxIu~o'&)5 -^^ 5rخ4xC0%p0G8]1DV@y]DkgPrkcNqH#'1fAoC!F+Иa+ji-/Κ7C r*WL*JFfXA׳e= q]1Y _5ޡFMd]l|Wܓ5S?8O¨G+ 2vxrYnQGJAB[x:gcȘ{I_.PSg3oEqIH#%7^{2K8)oP+ާDDS.Ry(6qujSG'{%4s-8c j٥/MKۃڋ/>a֯pp b7BϼV7\].#~LN!z\Ei i8LO. i~#%.BIS2-҇Os"9R$$OcnHHPhpE3DZtFN ͼ Hcj{-u'jx+ tb]JV6U6Yz5ejӋ=ՊR9"ՐG-imKn'ؽyhqv>2~ABGXLfzr Wh<PdVԢ-4s%2Bzև$ RU5F%:u [+A 8,~ߏ0BsMнeqo2)ɳʵ AnR15ӱ)heB/)ȰkW Mx^OM6=PFbI8Ȁ^忶g7\Yůr·Ք \kYp C ռ!Xp#gqhA1`5<HNή"}Ev8~eko-r:[tu&]k&M_!; &sC]p -c<aC ΫȥgaLXHC9FPRۃ<3g˕W1,; -hLP70F;ir`gq@#=f]Jw݅i>f"Wf+pE#5p馯/B Ğq[`;wm; *c>yfŒ\3B7vR&` &:<dZ/o}/]yI,IEԆ]!/Ы׋ x8PV3\N5Nv$MMֻ} [,l"LXVQixWuDڪ"}vaA[܅./y%F@ eHX13NrG%xƝtp;]VzRdadџRI;j\C(NgCÉ!DЬBE.]S\0hR5YHō1_ӣL Eׂ\O~+&m`dMVЉ ڏ?]GEcEQv3i{*ICH>s8 w<^"ӺWSo;* ˓үFAI%65sltjgA^',RU”B#}tD^_y8{dJZIfɫ~"\2eFz 17g8$[=NdB[3?koDꔨ/tsXqqcڥH!DU$m|1eDeRAS1H 9\IĪzl&GJ |Fn^Tt͹ሢ:GvJ>9GbI;*EZTTpcYdWv..C a戓qp7 Oq%*x`)xl_,9ǁ"3Tcu%&!GxAⲖcj,^1dº0̼ǃ[#3>1Zj)+U%((X#Ys^35Mn`JmHtCt.|X(Fz'ȳs9`J lC. jHG-\K #@v%M0؆,;fn{/e˕Djᖮs{ @3E}d*VQ$^g+q '05*t/C @UAʡy8K$w)7 ݖx\7_(/\K):~DŐ}Mђ;#IGQRoK k۳2 a:ɷE;l>9O)bW{B׋W$Jgɿ)( EbK7È]1IZA)XO Y? 1Vu(qdPobv|Wu V`鞢}=m+}N|`~RGdV<k0A%h !cKAw)Gc暎luQm\V1 @Hߤ?Z FzBNi vq-۽KL&u-m?n^Gu8j4Y]/`"t+l9=mkH\Vx-KII(PK'otX';v{s`jHF{P:qA;+d9xUMU!?삛P[(cC֧%7WSSNf [ȴU?<]=x69ސ^]hrP sTUt 0H*(pr{=CKEgto0om:2 YoRk,[ψĈFם|<;Rrnb}=e>%d$Wi&= N޻!| 'N*|Tȏ8prHu8;hZCqAw[%p"4;JV^[B4hA?y1(ѻd%!=&6ܑ'3v.W2QPm@κt4NK3Y]wNج*6X5>IϮGØ?ؓ1cXAj?W#({_UŽS_1 mtC3K+4])sC>C}Z]OEL`cYcFYǝfeB\(259ŭ 'A&ddn U>mSfjQ@wZgᚽ!6F`Xb-c׹PbU\Sx^u*v=<HS)Us\6s(`gݡD΢NcO'6NL>F;[4v^/Z]2p7Wo}YDa":5ggZrY:>eT&غzm??ˌn ØP|FYw]@CًvPN7,M>?Z$1Zg,?*c \S8;zE :-i9st)1=5[u_< j>*>:)Ϩ]dN*he=]g*$$,ϠܰÈd RRoIJ[xdػR* o*556\5X}~Hu@ uQKUnL9VSHE:!z\}wX_x*a% jj=5tF a'x!"+kG0SyI}(6U2oYdE $mGUx>C\8iLKK` cfn2+\ q쉾Je%$4wa@GGdWG+J\`VCyS\ǯw0R@5ӎ9mL ;+_i>u/[覐,'!p'qO}.r}+;r]5@ }f;)_ZlzU<we\Qq&*-IBɥ}΂vۖh)#^f6ԳpTS#{8e Hu@xvxvQm}( EzwKmD!5J͝^ cDTp0r ._R͞S$ G#'O:brFe*yQ$Ĵ-y7clrMDVU>?"J \jf}gv"?i$M~9]=6&B$}*6|kc:5HMO2¥ll B䤨7jUVUfQ/=xN\ !Z:x6hv2쯈hߠkd^5Ś(`*{vwpu^s&nZQٙUAcGyxr~r_Bw4xmZƃIb*?6Mp S\2V]GZփY(ͫfH4#_ [OC" _Cl״`( fKȎ54sh^]CH Nc18@9=ā7,-HXSK7W"؝ԟ$'~9*i;D7}pN ^ nF=aokA\UjQ8/mN EAS꾃u8<{1ײ3qAqɓ#>\G3];iX; ΣsF>1RltFmD2ռJ)#$,M?1I1d7N͡xw3NEh)} ϶b??OV|7޵ޤ尝_GV-ea/UDΣZKi`7p :3jSU ]şKv)!"Ι h6!aVY05MO@x\n&w~r`횊UOg9.uLH1[<ح/gM[ہ6?>{yb4_Wʢѯ#=:,p:`|pGwwpIgӈNktQgNpʼ{p\J!Dd/9,m?9/q]ߕCa#b'UGRpHv8 ms-W14 )0~mMg04z$(Kֳ]eENSlòU}.1k;Y%qe; 9&WiUDR}rS;X7Dg U6y" .D O]}ﰗ܌6ܿ%dA-ԃ0,ݩq* R$AEy7ԕ@q0a Aݣ9%WI$Df4[:qs34E-K(;l(q!B7:ᙴ `Fҏݯq^f(2f`)/nz.6B=)Sf=0mRO6:e {VRٶwG%,^\:C$l Os\uwcJ*z9WM8b֮3p-ef"Dpڕv*XrqbY /\JxQJj5v$= 2F2G vb(LV)n4˲-wX*rpQHeII[9ϱ[r殶R+0mQ 4 O*z4΍P:?ZF9մ{ʢ~sVIɚb\.0(zГMQGFE KĘx/}o+.39 If4alB ["={,o/faSeu|!M~qT/=,y67LUN,ξzRo`QSO/@be}-"(v[@RqB&Q,:_)$'~=2J #΁q Ïf_7,kVgp_ Fږut'kD2sKUW [o_ˠG|jR>EhσDQR0nr` s8-O"VO6|Wy~]c4If?Mt4ɵş";կiz`.%"~CnuY$dߜ}1U,n4#':a]Kf,ay<l؝'a[ۭkrNek~Z 47xA'}ȒOW_kEg`}` &8$?a}L_jE*C o")-f?"@`NۨB1U7VQV>AtMwZ*5~c(Q)e=a868Cp;1m~Y-N!`Fb)PwslӊL;slq7Uc6!Q N{GFؑwЬ;wG Zj#{]vW8slP%{eTQIITo1^;'Um;jv 6џK{ג!q^|Yyۨ%H4Gi1=ƫ5E^h] i+#6gkQ,#6~ȴdFuV'yHHGfTbǬ=3X/SL40"obMvli=8!$%& ~/5N*rH\MpuZa)/r+( ?[ch$=*ʛQ@|`A*m 938FN hm1P:YҪaT7Hw.0zqQ .Bv6+X7Ts\a[pcofPJFR|p89j(&nQK=fq hs]<ݿY A ݢ_C'*J% P _!.52m tWg5ziHi`3N`1/x &Lmcw vkIEXҔt nt$%Gd>ŌeuޜTV@DSZCw^v< OPPh֒)<\JrJu"(ٯ̲  Ȥʡ kɣ/Ѐc5g\xEVds\ر8Ѣ$˃a/cdi^:neJ>H7Z) F[O[&i|2k6Cu>&QВN*9&viQ}d z;^BdԤmAgoVΰ>$iɬapAx/;=h m$gz]ZiNv>\gz0‘ LSH wtXP4Oe~/[[N }ȴ(dGUR9 =r'ؘlzlu8Amou6C336MƆk1TÝc&*0y)H!N8;n: *T4."3@9yG;y,Jzhfv=%\q0! 9 8Dݩ =fGⲫYqO&G7>#SPg+l!X#^; \yh]gڮҢ)#1gp1hkzUǗ< ~˹'A<Нb(O#^OeӉmlW z~Fl&Smq-eѽ@~:'eNpX3"z?|}ͥ}/3JhPνng'd{LcӇˢQ>l`"՗ ۙoq ::)n5<[z}]p6(5쫑VبSߛ}1i' V_ٶ S>ξ*32kX4Px{zݺ1Wu&Fr 6W$`Y 5u Fb!<']6|w102x-LX֊lzlzMS}}sIuߠcdg#59IHVoͱm'ej!~pl*slu`3C#m:x3xG1WH#slխtI9Y!]W1,f_`Pp.U+u7=wjnmôի)"9vyI4B M܊127 $\Cc$)\50]> XTKm|r s<>({~M +4CB[ TlC`韛S G|?Fׯܟؚ~M[OTOC. 4󆀡J<+ojX~' 9x1JA oR/ 1sYUQ"}+~ȡ{DI* z=smDhz"n{ɘì~ g9V/0IBA4lxl&4nNo*X|3BQ0=t~e8LK}bw v_̭!R|IrX)ߘՅoKV1e`!7"}S{Gߍ~-aUʪy,K=H0Q065cbFelg'{}_k4j)܏ u),;&%#R_I1^w{h=̾›3z01ND0VO{eKv&KDrBR #׾ε9c'&Ͻ(bȳ+6./,du%]ѨQywZy]@`{v8FၶEg,d=}cpݝeꋈUGg~bwNLrQV0E{N+M[U 騶 ͋%*ړ%|4؞n^u HKIk8KJ1E8/VE P; W `胴,%xٻ%YrK[ߏOmFrE *sw{.ϮzT7Oz CT-_@Ehm,kcE-bՉwR|ipgn3?Ch7 iS88|iM* ?mc-C4sn |\еĆWD R=Gv@OyjIN#`L㇝G7LW0\:Uš<:N>d9P/XY&Q;{oLG= r6e۴ W Gh.ی+vl7 !W9/A+;}2p؍-{~w z">ܯx+J_Ciz7bxάxZoں:t~\ Uѱm=lnޚ,,!x[Yw$ny ?O% \ WU:`("Y}y\ƝXQGAvފꋼYPc0 ~)K9ҹʋͫMU+v@k&!} 캥L/]I:#ycIqC엇D8r̪3^M1#;n[6)EIuh]b`}Ҍ;{~'K~ҩw2V<0WE.LP|l[찬'Hi5Fʞq؍ځ4@1%)eÖK C'O.ӄ渾h_'zc@TxUڑ"IMF9Z tJ>*1hK¬XPtQcIoL1< . >rwPà,gsY=*NY i'i*Ul@i+XgѺc)n^,,fF,t. TVئG^gә4mf'C(+a]n7Ę5HśPG$ ߴZ3dZ?6~7Ω~T_$>RP]ci: +M$(5_MPR +Ĵ܊z-2A][t=eT8%G#iP&9[,Lܶ|yiɅp&QDqnc0}10Lo)ȏ5@.ONJ^V7#fiBV.,_OBX .5DR OYpޱ"b(^Ϋ֏GaՕ`was[Jϟh<@ouJڻe rCJ]op/:ʫSbJS3 &H!:Ł:P2} 2i7ES'6qc#A>G8fA,,@9p_ChG] K?O>oNSH&%DϷn<d$ɑGY#b ';` VY$-{ ,Apct xiJoJb@CG|Pqȿu:%~MEh=? $0"L=.>v?'59k"tPOI-++݊a:lU9ڃS/FXXBK_Gs qOsѧ5t`Rg΅p6[㋰+skls/8?4'hdݙ?@ ߰e4 V1SV:v2o%ˉ f}&̤b'YK ^k ':q O>g^ދrJci%pV`{e\7tC UWnWiՏn uƹ{'㋄Zv`L1ba} 9/;%!//lc?*s/Sm#U=x=k=@}$΄\rw}q/A/|lNԤ¢WmX SU?^!}oԢ iwiٛo$q.r׆zUu='d+6LkΡYIN)k-Jpb}M4ar@k,``Grnz9ٵnIc7ʖѴ n h/O7cYN嬅'Y޴EGgMNm|"bz 'ZEG9z:QpPvTMR]ChS SmG͝0D`s.T£gV G!iLN삫F R槽g)88ѳZg\kHKV FTBlޔ[ABA;p"(6=_3ȩ//P'`>p[bo^ -=LO_bfَܬ}3?4z30Dy\c{rv欁<$Cq f]┻e[TicVkHEzmae2y5JWKLEyW9_3.wBPCGY}/ a [4+dNm5nH`dWBQU Iⵗw[}z;|(HV,jgd)ZM>WN\I4ĺvw3M)8 p˟\ղbYnr^3Y} \'sFe5JY/zv4cao^A3$]Q|6xW|"J6@woAD֦@Sc0pƫȉnRz:!?~MiHwa7иVxǎ-mm;EM!9TngBkIw\ -5~vC 'œ5v0]HG`0G9n2@{v VJ%7kߟ_n4R9rvYݶ IcgQ[LkvN2,Gs .z/QNY^.}"YqII?g{&!/=m;W1kx>8T&.b7cW`fKSҎA>qts"UTNB}`K rS?st]p>Cȩiff.Fba0Gew}ѧT?}V 慺FqayFx#E cGi,OdzsP)6UZň}uJ_k_Z;+?#s݁oe^/hxi#a=E ^:=̀78+G/Oڋ,7z.%rOr )[=.o;K 6,e"(D62NMACֽbo|{NyD%{ @A1${rNcïZק^D1 ͏d܋kSX]FLwwXkO}Ր^EpX$[\wE:ė]'Oeo&vY%v_YHrd_ځw7=J& `rXh;%F{mqU7K>K淢aKQN!—*8H&CF{c=Kѻ)I#jnp^Hߝc KF}Rbj=W ޚ5v} T'HGO 6 nې-0y{>;"1kEu)ONC7q9!bt_ eAMAEN]iOK'S;(%1kKU6{Y 5K[p2aBV i%{ACs8'Q[)8"=X^#mI.-JIdpo`9sZ"jQwPTg\NLHw8?$Q}?#f:1G!蜗I%i\O/2HdXEFT 7𨵊bpXrpukQԮ5Z7_1m.+f,s1uvyIԓYTGTWBI36 ='Κ†ֹR{DG?aF%r| $r\r(r…J`#R=Y%q4e+"^ > ecF~_ʄr'\#k%r1s#b7 XnY(CIc)@{u3,T cg0ujAC)!pn9 +ReO_;{ D2>,B\^ ,fdsWխIɓֱ')n#wOPώ~0g~"yyݧT]q<,ka&uKѸNzjڈ~[v#T}7^=FPdj=Jcכda+SfT5VU諠Znr!p YB/G×'%)pĝ#Y&2 #8Klri5*u]R7ɋ8PgY̮߮ȓ18>Fp=nɩhDžCdU {3f e [Cd0 jU(#?|iX8rp8טNT{q%DdO5@Jw׾Ef3?(}ӷQ6s8޴O{K(Z`O+8ۈg3W{kx~Q+ x2n%yaH< vL'KfEspP&- y9/3 iz[wحS'xA -wmy"uַ kO}ZR=I҈9Y4wf2tZ>qeP8>ƫQjJ'UsO<|x$ٿ3VtY0({w"KMPНiYyce4&}gvI1&aik{K78K{~0rYc$ԤAE)+i0vq@Xr ¬R)mݪ>f{RTvR5Sjeؗ{I8<,b>-i`YQAQU(Oy{ UeJڃΤyl9};1ꪱ4?T9 3:kr|Iy;k_-vJe47Ou#81j:r;?0RVeq)HV|lwt:x9]2̭d5 .$Uk BאuԍΌ ee3fCO#B &,XvV| K 0ozHiK3jxsk Q`Y2lH0pR'9_Om?{H$EYzSufǍ&޾'m`glh`Xҝcm`@P:1O{^\w{nb}Qc}X؝LZ;>h==u?@ؾ7í|0^d"'!]Nhѯ mlu 0v-a1NUptR { K-dCǿIᶶ,ظk!6rYz5Icu(mC$1)题܀wa{@F׻/#æNىyJtݙ o5)ؐLWy%h% ܟMp}2->,~ĵCR+1yto1}?k!J R-ٝ&X\;ǹ/QA\qݝu~d䡌;諰XzYJýL%E%ь_ `o,OR{z\ H߃r\w}x>\N)MTdȣ_&`[n5SngqeV ]֫=/԰:r N?0;ZpL\ CdI;RӺQpnVK)U59tK-ʆ60rgJƲ-9>W(j]dm} C:}* ,Nꕁ?~ jgnTZΫY~rij!;r0j"ʺ3N$n4ʹڇabt/ا GOkǨkC&;,fz0|<= IzX_=?Zv`aRȗQ|V{b?eYTƔЖVCAOL+@>)>O~\օ5dXK 2`*'ze2ߚ@v(~*EhDFΞ7,&Bty[[ipffV_v$ˡ} ]Y#vXOh^T E&-Wk=vxm~BX!/ʓcqvn:4(]Q)EjF{eGG x S 4 =Z5J.-e^%No0cchԺ.NWbV NTU0;)Hy'MOf!Ght%U|FXB]UU,Y!F_ (wZ;Y҇;gL-; o JnђjP1%c/sTNj͝BlUK|D_ z{6^8Dʼ1qB3)yIGbA*CNagg\z)?*2?ίB OlF|g,M%} N1>P æn(KA$"Gu9Ŗ<4 -(<EeS$}^[(ʫe7 potfܩ`OޣcyhϕV\ʵ9Δ̱S#Bgȥ;a1m*CO~PP\@lo;;,TvS>;lrK_wN xl!? t9!_BϷ֏N%D3)81ue^N:2)y@PPpyDyL'n)}eh@' N7Y#S(n( yy5*V%Rgl`g|D;9̾щYR*#E1B?=NQWy[R-8)bKL],"p) s߃ZZ#Ft_?c{b%]`4Az}TEVSQrۭ{f3ҷ@udIM; V2k.9-Z6w\-NdGaH{2B޷#vJY쭈[ %zO*e#Yzr}S*Mag{wyu9ӉX)NL& TR og+}a@w+lhoU xNs(Օ]4]Y>H .t>ct5s,9m[&2^3fvZVSܹ BOR@Wi$>f_[qxa"}p%;hS!'^t6sKG@ucZ,dg[8 v'JyQqyǛ轴>mE%;uEu`DS)8!37V0Kg(F~%7 _F6|p.#X>Н -13(;Sc{l۸. G>)fs-iV?k?;jlFrڟϰ÷^PKHRRv\js@˷'"15L, xؚZܪ:)io7H|* (hnEmͪ;%1 ɀ2soTl~=<Z%pO5a ?{Mpw,,jJEY|[mK.G=ˁZC,l#f_Ց"P?:cY()ѿc]c+gb8l[\bR s;/ 2ӧjQzzw"f{ΐxv<_$]VU*>)9hhK5L8:q'uѡFTG;>rp[ i:}C3"Q#TXLr sR\%_# tZu,w+8dx8z##Pέċa1)2xIzHFUկZ34 rB2+x93N@̙4#1_`#K'b>~هeL<|k3Wj EI5T_3Z/,-tr}~\[#g,TݟW`sRQZ iA3$(+7_G|7䈱eYaE@5cDAi8?#OUtn䠙U"(G$0NFXbҝURb_}99^h7?`,, C"`;keћڔ!GCoϸsr+To&Y$T# T̀cj$ѓ}f,#پhfE;"-e(d$S XSS;}j~NAOչw4ICg`饦`E,r0@.ZexI>A'8}A)lA }:~1w {b&1`+wĂ푢6}BTc|@5ʸKV`,Ԕ&. Uuvk9p~\V0`~oTǿ~1w٫Ρ[YM4fm4pOh'k6_ZI/z;@\jAfv)pOk]YCI,nmDޞaI=X/ݢby%DA#p06 k֯lǗ;3T`FrHV.uɒK[yʹ`.@g㋩HqFhX_/[$3]bN]Zq]lE]%`?4~ZáʪUjfZCs =<8ڑqOOƙr)lzbB3>'EEyY.UyZ $cN>5(5I0QՏ.sbR" c[]ٞW4XyT}4̗XPQT[.}$ Ɔq$ &?{S'e\xG-Aqkr tk9F\s (oc%\;ܑ~s,(y#gnGO>5*g^c/)kiw2ɇV_4=b" FKL'}r殏q2-ίXŪ=_ٯUBTcŊW4̇ tՂ+ִӛ)` D\y5p:n&?<55V}M.6_؄ドGrd]Y:be+G!yF TzeO"ZAg2Ubw8g2}WίD3#Euc{ciDiO.T_4/}@%3y43׏Yo0xّ*Wä,ENʻ3f_xv5~}2,#P}'Ku"U޶/42f_6UOg_,9r-|//08ITV=rD)Bp[Kzn7}J؍~bY!;K.U.cP S wSKJƑrb㰼x';ajSqg|fcfi*µhq&OTsh(f~9b#_f_ 0{뽰wg_līR2u;8{|\+JBq*9)Eڲ=WO?okk;\̦EItNŒ9WkoξYb!CrŸ LwvӊcD89O +G0'yeZW6AWxT8)=5z +fdmԀDl20})L3a-rͷvij?V՚[kWcO-ϣ֩Wp)vb/˛؟w;k{B7Oە.͡6D}£(XEA;V5o'\БƯlu9^Vj߆jޏ0 _bբШcv9>O=Ca}NqfP l#Xkłf߾m Z )P pk#h+Z3(ohzs ($1I{;-FCTFdzat_:jJB7VCx%Wys;( gJ(҉!6$"NHqmU6SV+B JD&~_ obpM"% sc &SziBǧiW.j[n\i`z_"6HH 'B^6d^I+!jxy$FXi؄>졎NϺd9ǁ'>s퍋Ԧ`|О4/Ga0;-׸C{)AYbͱJ'<Ȏzͱ{s]ˬ_ϵ8 1,ühߧ&F+Ov fgz[7iCۣM9!T1b iKLyaN=uR;ໄ Fp*`rw3'+wFyn2/ңM|Qoz1g^6?32Jd {W>4~'7Ekb튔+3׍;ǕVW/lޫxv> M8ۃ SkUØpvđnoë26Hҭ`R^3d#CkP#w7 PxW.~a%\@ HvVf3oy}%8O-uJkCqLXs_|:~5wLW Ǖl0^ST kS8{OK/'d# UM]A #94; ,?o ?ޫO'3-|j_Jw+ƨmZH5Ye4:+,Iyŗdߏ|U2ΔK,c5{:AL5λDڞGL0ڷ.%懍[B3S<hVdzkfǵP}ZqWsz~ߌ ҝĔd[RVFa==g|}Ukr: /yi 4 z !>ŪJ r.zNF$֦4͹^TMfzo{FUIF0*wو/F M.O#)uo4U]mmR07uI~ )]Knw@+njѻ}D %|B`;ȽC_v>b&<}ƛ]*J < !)}V7srm~ -oNX9D7j:ӽq>GYp>pLj-)8@Nyj|FLj3Aa@>ce*/WWvKcEؠR#2cvͭOhIP,}Reyk,U#-U*N>R rbxл WУ1vĝ ó]g^xK_-x_otۛBy/ nڀWVAg? mƒ+{0u;g7JBKR۫ݚ~C5w|mE9 i %)Ƈ)L\z;r-8!j >I;sNf=0H떈DԈcʉ踱pYW T\ f'w,x7,*ԇSy[K#Fv9ޤEfڱ,'!f96Qwxk$FU;dZ Yޮ),VR;KɘEyy>7o@`BBD[ 4 D6xxPBgq`>mq'5- :B/<>“L<BHsw20]+9sl0k)<P5\<򒍓ƤǗ|t>BdŞ^5Huin6Շ(_NXҪ\-D*! ]¥|r^5'Ip-<ɓc}l Iudz }+3jS5R*Ev^!E>(fc'"m"(9Pq.{>`~޵9n+K>h &_Z!ۗ~}\mbr@w6 ;.'n4[J GE wpbߘV(1`wD.M [|F=9PFE{P(eV{r}p 5kWZ[Ƚj5BU҃g8moV~-z7LsZrʘh5)4L։Fzsh[j_ 2m]vd|'R /Ga`{6)K0 2f|(HH=^/ۭK =#čW?{9+$uTWX=XenvsӄNP~yr# mPAѯq"^`Wv#1{u:;St_ |\Zt$8]B8 AtТ,(_ ?|f;|-;J1]3@{1C`h{G6AxCr )xjky@=;kEԣKB#8PsΐT"|<3Ca $}B&KiIBi;zu;3gZRZf )pہ_qfD*9f<_8^1xkޟẠY, TL9J V#8,+0o͵zQbl3SIy9?u)O69'{[|y$dnVֳwqok l9,M2s„'b_ȺcC`!$ ȩ vvB&TvPED2:ѱIWؠM[vsq:q)ZgÉ@q.1m=t/yj<萗wq4rj:تAfrl7k9 ~1v G>:yΪz~W b cGD/U&v)О[;V*X %Ԋi[_kzkvT jFtr޿i^)#뎶Ļg@35 V]S:~Y ݧBm"=5 qڲԒF$BQ?Ѓ[7x{o]帧g…4Шi!wˈVm2)|J卒#iiaa ǁ{\#^idjޢ":&STlBW6&K7ʧ1 ܟ|)2vKbk^C;=HM^+wK d]<4-O~iP"t-Gϊ屣B! *ڄZ8,62ozLEҧUf+dڭ9wG0vbCH6qפ^Im_! %C/Zj2.$lt6dlUȉ)f_;7?u6ެ;s=ܾfw 5󋚠*Sk]ZQm9j OӽΨrȻ8*H`Z@C}fH`(-@A畲Nhy D,E1@"@_W< xme1~=;{ c{ԣ.e/TU4F cïsc``~p.zU++0Evm(2iװjfԴQvGx?Et8IKis;9x=fQb'FcQ@E7ID}o;L+! GEOnf=TpBI 2ԥÃzX>ϥp$dhs8"2eF,YcHʾ vEȩ%/R=kƐ}GbҔ=E`1KaugL2aI M#u;i K]kJ 8&C'8Qpeΐ"Lm7G>nvU3dxhok=2X ~fVh @ js"Qk;DRgV_&k[> j\p1ؑɗT|Dt^aB4O¢]?|Nwxhh~0TYP f7Hq$ackg*mL2!]ӹqπF[ T,DfA6+2uHqqL 9YZɵ3]E__}˞|\ 1~BTVv8W.Iu.Nz  sUu#}FWMi2jAQUΟg~IGaMs:3ʭ2{[F]rA`71$(3m3D7'MIVj-_C!);*۴ϲ jgFU=V+O%](~22 ;6{2;+ߢAsX+l DF0&vRȉR$y`r,Y":!c{G@?%ljZ7=!cAz&I>ū I8[?oMKFT#.!OsnWiHH<=6>' ~bH)̮vTp"S֑YabD4RSX绽1߷ Ec& rd15) w HC*?yrb*B*X"22=Gq/LsxClG~YڐCs\Β`}X1`%H' zX@-an<ʙbߋr*]9L 䳗ׂDd^1A9вT,l0vEz^ I/YzY Cv׋vd^Fb{"bES6Q<~1{x. ϒP Q8]]gT18]+&9tĥ}J"P1>"Ԇ1TYV.ӟv(%ЛfA}"}?J"1=_JLU_tl_pwpf;G=‹%P(Iɮ3+=bƕ[&\_93r֮⨑Wh1sh,d_`r }!{f͟h#n3>jgO>_٪03`8ecQM?>Z{ ~F󋦷F[>/-WqxAޜ#vESHd `t -^SDsA'GA;* 24/u~象O13q-:7E'pto]A'<c>F$0q\vWyԝ^ųa>!Tw#ۛ'zsTqzeAip'BtjEC g ~tvCe)VP/švdLv[¹b$` CaPk;Y"UZyhǹ^qH rHI9l!VYRΦnA*,Di3?AcMAJqR59Y^?!=":$uG99DȅMZg{Qţ{m)d۽8x1/ke )&RDK,}L\W, vgf?^2kK˂ӬnI.K\2ж020Abz3yt]]ԗ} +ۛSbHQ9걳ehRz2.\xFFLQ(.0綷Z ؇2"8rWւ) RznbW 'e+7l{RVXBuOTRmY3?zC5D_= Vu09>dceEݗb+rXW>d)\sD[$"pyc Y5YJH.7U=V)`ǕږD#I#jN{}Iځ>H}bF&K8Eq԰؜>,VBI߶Rrh'ى̡hp,׎ܚ] ('sFRBHKE@`|-1 [+&>A"{%}@Zͣ{|)'\EEjmALa23D}]x^κ^&o:ڌ=*lѹ%ܡv X_P: !󉴿ٵrH=p[_W7J|h7֌w92o{kOdjjlIj`JeJ8d*@NH0+8g}6'͆GF+w٣I ] .+haj<,HB1Ψ 'ķ!=$UP6FP!pOEI3G=4Lŝ^帏G!{0&}HJ ͣ?߾956?0ڔ?&m*?sP>Mm=<#/ BUU-= /B\"~'Ee]@83c~4JvmǡcOIR;mKe;zOVf;|r9\cU&,2 nq]`y dhd۽~3:x^ y`-]J+E`q,_^0Z\ SMĊyXT @Yv)i ;82QZW7-~ 0\kjekUIQ<yydfҵAKchZYJUǶw%A)Wj Ċʺjcl#Bj (ތ [WsRJ`mꎱ֚M5yґS7z5ɲJ-dN(0őAi,'Nt"aH|qwbdytc-kW2EndOyR!;t'\ڝ C^ߣkM*Ldhn­MC:+"kmB>R7xkˬ x۠bN_ɥ#[\B<Ӌr洊;8x.ݯv^ҡ\"F~Q\B] ̊>e1wj *{v[fDkWb&s^vy,ccVYG[e: ˍŢZIS;('f͵ I},LҦhpמBRN]Xy qOaږ%$۱0_$+s`/ےY{-\V\U\x;]c|&S4K[2WD?tb=m7 F@|(jE0+(s)D_Uh*8 Ϥm%MBzT7`ƒ>xkJ%6^eI7œ}BS> $:Y+σMPŧhn199?^`~/pv #߆ΈuXڤNiL`~WrN%#sb-g~x-FcNO,t* 1GZ_J=%Qݚ<=qo{)Iyrj|\wvK4Rİ,/Ic'Ff#]_}C-2?B"ӧЮRk .R">dѫ"p{Wgd>W:`fdØaE+^IɉFn& ҙD ܴ+gl̟i!DrA X(Z;'ѳ=(ꀐEYLeI 4Rd^.Hk̡iHYn)bmy [Ĉ%X ݷ#d{<^IW\'ퟂ1+M'<~F0t҄m^pwy ) k$(UbjYJQl5;֜M/Ȧa{/ޅ9G* P`dz3U7 6oK'\bRHgyT%h0=J[ QOrW笏_^P^Ώӵk9u3 YЧdh̤so|TIAQ 4+X< ׯD䚚7*Gecx /ӘWI { SdSI$mZ>al5Jx9VHފ1ō_ ./vJݙ&8)#,!J2Ƥ* ϛ'VWIeZ Z ,'F־bnkČQQ5?7+?޻vzˀֺ*T&SDz5I9\_A i$=>N4Y[v(l&1|rL&@GLilFLb*b`8^apzGL a:r+:϶O(v ;0(Cee~>ϥ[vDornA n6\}v<%UA8>ӻ4uˬW ]˺P3v| P+z't3߿Лe#h?+8ud6z]1#8??H) ۵iOwk2k`3쐚Gb 'S'H;BC/o BHg'ċ3^?;+߶Kn),D䲲0 vV8œiIr]iͮ貂]ug_\v5L}Ƞ%Ʈ4cut:+`˟(6wЌG~A@C6׳|ek)J}Þ0Kljk;ok( # Sq#pac]&Ta, wsfN笟àŜڷRo)Tƀ48ףIuJfӚv 3K4/S^m՞%#*456L1ja`QD>5aNLb1B9l_k &^H9  Zn,h|Tؓ!F-aĵC6$辕g!{؎gda3Cͧ=&dOL-(>{sBX= 7oJykFԻGiK{Pj 5_ph+[sy%H D zjFtz},cz6rHǧ9iF)4Dva|kVz/п,d)n3EǗjf2r־:OulqH|F?v`G5hת~m5$k%=wvHˣ׹gY5¨Ws\e zK:; !^&<k>ׄ~i iZk*<@ 8dj|˘29,GاK45gxÅR'sGc3^=_L) 60a/lX{ɒ]9qg-O,#=w-rQ2?^tu OB,w(eFˡUjQ)xgIFv|Tj'fs|qص9U',n`uw|IHymzsF9݆Rv&tpb f$Է.U'mp`7$>Us;i^o?auf{ GlE6pRnOzsFan>Ϋtqb[3O!di'vT)]')(=1Z0;AH蔛&"+#koDF} A`zjctZ2.-yƐ(깢H4T~`29" y g;QF=ү!p=fՃ#|iA4.ZώQF5J&my(-Me[Ld?MT2IgL\\;+vc*\+xdw8jd܍uoC(`;*/ۙ1^.𮌑Ξ̾5vZQ]rf=; hx 4G~F >BH(W;;0BxM(?!KD H7>qj+ " CXKAE*<<޶ܼ|VܰSQml"2ٖ0Vt$Pz:|XR+e0iêȞZ\S0_ !t1bM}5cچ^aeFvιo6]h݋Q2 ͧ$>7 dc[be|/T>N8>wе!A@A-3\:I 0#[I5yR<%QƖh~RN2eI|j6g]3N\=Fh1eƶ/o9V䋒 wSS89 jS5eITBOתeT݈Ǡ 꺳buҔ 3/s._KkLM~z EaQ9'0snZYBDo]Kĥܾ7YCt Z׊7[KBNu 71:yNK҃f !2~&/#Hj #6yN2WJvaߖ>lS9kzf_5mY7UqP=_h>o>u cN}%HطO^f>VTXyXxXA9 A\ i)%M٩!%jC@-=PV{ VѮr1kR]ܻY1 odb7~nn63G 3IF .=]Q<msLY+`;I$`^a]FDhI+_şJ-B; Ě~ENtlK#eY7ZȘ62WˋH*2ƒj! F3زNg0+@-xJiҗl~Қe.hw=-]#)'YiuF9^vT_gʣփZT_!RicQ,3 CՄ jMoǐ1|Hݼp{щ} -e*!>*'H'<>."ڍk.@;;{(B5/yFFB-uC ,\'dfgt_`Ftݣ+(k}їx+oZLUVNgg w2UQҴfbU# 3zm]aeG=MСR2KMPH']PIDwV5fWJ (kcVҞ_-rr!^IQt ԷiܢIu$(ޗ, X2m}CѕHd DPȼ<%c]݌ևB_~3V1η'\EzYo57lKNToTVp0qO~^ '['o(6m*FL\`dB=պFWG2j=7V?iS! Nxɼyaڞ&y;XjJ].Ϋ]0̱'jT!S{j ~Y$8r1Tݯ Ĵrײ5ٿG}Rq_J+D',}N,9.2N;GM2@w܄8ٝ9 sq)@AnV&?//\{,4MOs7ZϑٯY _7w:DNjLp.]P"qEoP$JÂMN/W4S63lPwzfo5vk@N(p J@6#eUdǫi5=Fԋ!I9mMC@תTTX\a/0}K# 鼲.T^]U&S#m 1suk<[ ,:k.}-dP{F?l]k+TM=#ʒJɬU5A>AX2'K9Cf)ڂHj8srH+BTulʎoP(UW8K)=!M}i[>j Gy1)ƭrA uHt5k%De&{#eE3XTo/p.:XV7gg{r-r8 kzq&5̝::Iz_W0Y닆w˝ Pzdq(rp #e2I@,4zNV.r{*j3ƊKEtָ1cP[0BȾF/NnUzA#$Qn+=&(w+Bбrrk(mvŎP2Nu?|Cz\퍌)aW pA f6g@P\-pn9#,Q=cʪqH.-Z L2v" ?_aٱMwy*mvWhh† ߚ`'I λv-Sn9ؽrOm/VHG+A߇X 8 V?$H~`Aq܌$M6"coBL]* o/gd۽|%Sj3@ORQ]ɻ`Mv1Wm['*-?"%uv:>Ip>+A`NE2Y lsܳvSFIBT{CE=ŪSI޵.Soqs*e(ȸwڈATQd9$6%XO go% 4%AwARIYqfyiD@zjO>dV91_)p#}J᳃G$#y-naثѣ~hZu_j79I؛I_M$mi0 "myc[қFYw?m ~b-AuEtcBڔ%>AimlxZSEN9Wk/R@}=\Aik_|Z?d2+(3)J  ed`?bKad僦ZwKVs=%M>ЃX)Xi+~ f|XU@ĉ& GP[ Q|],ƴWÎD=&ۚ۽8m*0FbٟwyD^RtR>=ˆitXX*2ѫ,xFKGwݘ{,v*0ޮ: /v&=Xh3ɨ 6C!љ c?zTA@]M[WΏ}V)~vE'cRs@|#z{>4U_HEt˧o%<]eVKIdemt͞u+eeXPc-F*I׆E@ggR/>XemxpI1[v>%8^y GgY7AVOY=@N}'KQ X0nc3Q>w8rj #* x=a7'$ FBw;_ 1r'kUK1㆖ Sb 5@ҥ"3??((OSz__rju &(sk.unZԅ~1ޮf ϤHOXU'$١+mroe"gj>to3 ̦5V>qP3`A9cbm1kgK.[`$ q@Nɓ}οK!p.V:pW~*G$@%LC5;VZͽv;S @iK΃ܽ$(6|qhbdpOlOU?,~-/z" / N da33u 3`b؛qL(\urP\rwhZwֲ$'`7>taꄎ=sl<=jwpMN/ReB؎'\fUmpSWPwTI ).ԣF^gnźc9l=BـYۈ8[Cԇ‰ { ]SSظWy+ >U=OǷ|ܟY gs6qZBc?`WW輘_e=`pc}OdlS97 ހ!Iʭd 5'`AClm6))T^-~M^mF=_m"ӑݺ`=l 0}@vd*rd[E'K'+ZeHtmK>S'];o!X"HyKE }ENA;c5dm5Օ ks:&޳ZCW mzcÇeݲD#EJ8!BfW?Nّ%Xʼn\S56e+ PTNLq/ۭyS˝CD{\Gart~X,n{']OW.k {<谞U%`ζ+^ uY R6]pd+}W'lH3{0GHPqt[9߽ۈluB-GStnůXk86M}]54ILtm^>!GUM]}6SK:% ,[~3P1i3O\B ٪-a |3 )/zف[". fh?b_^T0yvo 9"\Z`4kUw*ҟ^L= hYk|!$|p Ss?&!\CJ|̈ggo{`QBf0aIe }o1ZSÆLĸspTE툃?Q!>[' VLCP8z^b[\V bE1?D -/r5`8ec(;>!_`_hBf}R`;-q*fW h{xO4e$37j=פrA GU5{Oq9A[/N[1n J>2x >!W[j_7>ğ؁QXwxd #=ףJy"ǕDîıs-ϲ G=;G_BQn%͠KY˭Q Jy~ؘoӈv=.RYVTji3< gOkr>OCaunː| ;0^)dp4fpju-c49D` ֝ ͤYrgZ= ,>ɋ}  P;ʐ-{D=KpP9S<؉Ѵjw<whLMnPbRze<)βB8QwOpg4#O𲜏} FѦn4X$&k'!8V&)"㳐^\f[Kc|iE;ȴ&Xj4sc7cPz\%k˂|&(JXzh=3 OH>t=i,:POj'>z:2t3}$|_+s 6'Ԟz=(/l0xeCj!y?0lOeSǴb}*,Nt5&ɹvJ&uB/SV(O}ֽ-$'|HILjҮI'/Oʝp=n"c&btKQ 9f̩mL`2jA^kd%nUx#hv<+[YdCEP K/ 7zh|6ւ`:>xwRRb0ԭ(d5[Ǫ T**O7P(ﱀ@k}i40򏨐ZV6gϴ$6@ngk>C "+αn9d~C\!zl[(zٴƈV,P@ Pg(u(\;2ԆF\al+6v!92}V([AcB@b+#Ӊ%]Ȝkn.<9G<&Cyחd}qż22<{.r!<F7s48F8B7(!=O沅^FR'yz C +U<sCKYI.5ɋAE|7 E{5!L_NG/+N8S=L@.G.Z7xQ%fkȯn󐦔86>˾5z9nI: N'~Hޏ.x~b+E%_!8t)&xG/#@oDذ(.7;H&/ `r=_&NG;z&ߝB`9)>8u3i lHFs ۓ'<" ^uz˜Ákj ~;駋1?*HQ xwNC?jVx.B[٘#'t]j#@ț%$ub~{)c.`r.y()ZlЪE;'"$_aif.b} -r5\i6<9nMvLDWX7PJ2mf+W7J;)x07̌}%\gDE3jhnZv|D.%8}/%UiWjv%P:Gk2~k : +s!@(86ERnهHv/KEW'](ŕW#|(ծ?F$Ax+l&Q 5jG.pj-2h / xU'j`?%B1`j;',!LYp ccw4i8<'΂0c|ԃ\_$P; ԏ O|/{`3M{edl R]=egP<>7;>^@>6$֯%ܟot?/.2K`C!nՍ??PIe!yiN.&<+9tPw9.=dcЖSi/ϡ-' "#AOΠfՐ-N1I/v 4(?A/+HPPwx--є,xdfvA7u%b]zԚZaxxO)`׷>)0^qf Ș$3#1.GσQuv+b5"Y2-mOS%2쁘aߘ u|Y\ۋXupsWxɦbĕfO42 麺2,GiLƔú:[33=k6:GtNDDq`7y/&YG8NUqz~%7ns{#&aOXޟ˟iR f?X#FI|{lgV̭) A/|uKR+ӊsRC^`] < >8Wڏiԏ%@Ȍ$Fg] j&pyT=#eAIxI ξإVJ1CiT\!7.^eΉt.[F;o-xT=ƮmBy=s@F?hqV-_S]־h6]8$ۊE% :yPjH2F֪>ܿL ڔ6Cw6LCD,EV{B U}F56$J rmknW Y( TV){\4BPk)] A#"{NdT oF0R׵~b~܈gvi.Js!s Mʚax⟑!s#p\2/w^B)-''*$oph8˕ H Tơa8q^y'YQ(&KH78P4H; qsc*&G=cbT 4hMQ/rw'U,_P4ú3E@vXe^ou;ow ez: -kD`/J][.IdV4.hn/X)Õ:WZ~ihx([\{uo@f=U鴀|҅FƃD!4<˜9;B#]'(@i4p dȊed ] VvK-YQIJ#LV#AU}t?]8 ga+&v?u1quƽN݀ _Gve؛bs^ MPs^$Qctқ4ԝpPoUa9 )JGppfn"r[UbFi-8CG6J ;UVd3G—2̝{sujNCU( ٚ[DcʳOZFL`Xc3_eA#f'GS}{L˅ajya'I-U!8y9z*0fS pɯkBadW|LvOQ/n3⒥Dԍx;e&ۻv۟wٞNR)K4@\nA-KuJsUA^ ද*{neHypCOf pub{c8Ip &o]:L)m]C5$^~[ޙ~{cI6/?FUy6EJ;]@sIyH|QT۰] j4O7pB}ӻw82e<aS_XL8Lƛp~wXާu;).z7'`"kQޤHDϓ%d&[bG<3,~5'4Qŷ-jKX:•8! <J +{va=(R{&7X'ƻ9YFc *۟H'U{NK4JF<?C . Yea5FE>V'5;}1\o:[[.uL?CXlH9`EJ\v%_Jؐ>y!\܇t8ּ·"c+(cxvK=S4Үlt'_ݢ@ɢUD5}~B`=l"s 8*cgyJI1yEpM K!?Ems;:)3H2z*";ckϖp*:w8zfRx=|5 UEw 5Rr(Ydkbˌ>w5_OO!D\|s &;eKʡ:wiZ@5G@!zck yGד8: !YB(%9:g߫/|U;>{@=sܑ.r<28j<ɏZWvpn;Z5Mo7}yͣH|QA|nl.Cn+X sj*_\Wп979WfZa1, &Db4h9TyZVM4>lMsB<"&鳆#{6o`1Is"7cN ץTn}l'{9:e j)1QEw#\{[ctܞԐ]'JYU+؀ͬ2^oKAb>^)aaXXWROd;Ofq^w"ylXQakh:R׎TEtp #vd\0fQL![G;D>Z*xI-MwI'6@Aw~:[uT8; PrM}pd'5\ag`) :2wˬ9yH!eKDXsLIKM-j.FfL@FW>v:/WLؓ6*"_ 3!^v`WhU ^7DhP$jesbFoӊw@Ǟ,ba=R*:VRp*uY?#aDXH[D#Y*Ja/;*gWƬVt(fqu<2 ;G[PDw ci ÛpsTG GXerח1dAƔΪnuH@ Diй>X?5n9x{Y:~R# "Q( rcڶ/#bNVZH(3+AWc$mK*L?+s̀<`-RF1 k&R|?\'~d4>Adb2"\sI4YG.ږx-UzTsfZ&͸?ZLWnH{.n8} +X`Sv/Xo Kユ vBI|L9 IB #3ig5Iѳb%  _n:45J fٮ(ʮ./Gv:6%gb2{=9osV%23YDCJeg8%ǖCQK~h|țرpmĽqE$3y(]IwrT1ϼ]\ɻb3h#Zu^^I;e{cnxn*} 0y<çYbݨ\ײV c'eq$>qeZ* ݺKҏI~rʓb#w/$. C D9>*jp"(J}}l&֎áE9]ymskJ..ScQ|Nw|V[N\҅e^%.$F9 f\Z)O )ǿ\R[YSbZD|l$`nͫ* '` 8!fKot|R8 P,4ȵ3{JhOl*o}4_t^ȕi{yyYBoMVSVҙI1e,w$ܫ;k? Xy&as< 7RT6,bd#rЕeʷf+.x­tVl3/p)P34xƃiΣiIn/x҈r"NzǣD*ƑtM8] R>#֐WPXEy+Wda:Zg .[ j8ekL=q'7cT pVi;r9"v1t՗NG~WI籋+ktolEKȱ"]O{#.'K>$bL+iHACEUp-^S9ݪCi 0&bg[q)I~;y9NpCxO=Xvz\@v$aErj$2k4C$[npH<3;I󲗳I![Je :WïrX,xZ%@-'$v6WKbY]DZNbrϺbE5fYS5LbɔH9eetT% AD~9Vg6tL_jw=c^Y{ y$wgQӺ$?-hJ(0_uLvNTcU;vuGxx3nU$`- TxoΨAk":@6`/#eVrs)Fcp0:$DFR9ZQLч+ˋKvU$QqKp>ۺ3M?1."XFT I;k)qY%CfJwmnT=L'='Ѵ ޑ:rOaFv5lCPQӳlqش2~+18cp v/jEFG r"ԁᢜG֎=KM1!^?6\gs~vfnJNʝ5p `r>0ASSN$,}iC%/;)R`X{;p==EЯ["-)RQL'NͱuEcEy'7-tc.<p<Hux"׿(qNʹrtNcˇ=)yO7js~U҈^ѰY;wW',ZVR/Ep;꺨BRnO+u,9_DDE$9AҢ+ IcAAwS~3"ϗ :}.!FPGo׎Ș39>0vʈ:8AkIqdrdy>dDhe!:CYfzVV$S]wv|->2 |O~4\9_1.)&$"KG@ߌR>:Uz{8Q=rnkbn˲lv 1nfmg/Em 3tRm;C>Խr{1tvF_ę^gGcO=s-WR7\vODsFغGς2Brtg|p/s<Q!|-E5{=Nҟϧmo/jMAGf!Zo"3A;Pi]VS 't0f/}+R"yR9-gof_s#SPFv\*%g)q֋J-=Z Hɒ+.O8R&v0%cW"p”3麤o˜6TBUŠ^6Oգt#7I,hyʫR+K'Evb>;rr&t QLE} B$/3/"5/+/ɩեMmlQ 7(A/M"RBFퟤ wvRni NvOCˆ}B%`;RP񈢌63yGvy(y+?B1jl*T;$ZiX@{S+}>[ Zz?1zpuF4-'"02C7` ~ {o]AY(M6֚Iy*'?9V(gis{ۓ\i.8҆4l_f D97=K{TEYi חC:ϷR4eyR0 ,,*Eq'_1켢C4xr7DiTUnȱO܊7'Ma>ڒye M5RŻP]II[wF'jRE!t$'P<[0?@47ΘA5K|jyZ:Kn΋<`~N' =}Õe}+vGNHQ,!ֻ;l=p/Wb BkQ!9|5-3!m o^iS{,9<SbomC=KZ6`'$Tw[N۝Di0W m|RoGOA!9y*4ai&}"L_~~Zu/O~G#O~X{<#I.?? 0Qn@5Jӫi R]$hK2(YpЂoA)٪nA~uZ|1kFpw akҷNhvꎔUf`y,ѢЁP;%eK9 ]óRMA?9bAS@MMEt-e]3\#=E'TLӮxX62DSMaK 1 =t{j~v]=~B;=%kP{]8BǺ>CLP<1҂繄n-E L_toݫN7Oηiow՗P:4%>X*tӍ\,ү_Jc".!_`]7|[ꕴd ^6%EM$hjyW.‰_/oi'k7Q@QewbӫA}\K2ǸɊ}'L;)4=]9ukQDG|գZx;Yp~IpK֎S𫣽{=Te1I}aUZJ8JUn>m:/>9 :5Ϡ6SYMIy] lșHƝBhAxU-~Bwx{ポ(|wDN㠞}+/ .)'$zkC*zDU[oS *]H?$FFӖJ-z(} dFf$)p$ڈt2DTd>:cyyIO<3%4=I;竮7S f1?olçDmq} DWWp* 睟~^"XUK~] м)NE\N)lER6d1ciUd=\[Oc3-{PUqrd7_P^}m_1= X:G(.@XَTv^rSr"USNP\2YW#,Ҏdy~#cV:];lj'ᎁ9KM5M'v8sk8`!$I'>]]œW!r֌I"Rn+]C݌?eq O4>Fu6e?ϜGDaɯ2i?c{H.YMzd<6HRY\ pHb'a6ҿwkɿ|˧giD}jγ,('a*͏2tJ;Ie0yN}Nr>Cf}EɷV( ah~dZxeq >j]]ɖ/L/BgBlb9f=ʚwܱ!O}DCi-40A/S)?-h!}%{tn,WS~gD\JhGպ`X"3J P"0gIگbMOI1$3~]CBCiu1J|gw#MYpXks(͜%'"8->*Jge"zs“&?,SJr(ӄ3"cr[/@)#B&f|*n>?#~Ba| 2W ZS{bm+􉐛W~)9 &֭-.>%/B\HafcGN <.&CuSpI\IP01+r*SKsj؀J'պDj54rc7W:3:k~Zbkؿ>q,:7z Nͱf yˈ?`W3?:CN;q T}zbIQ9L,8Pユr*y CxxJRV,w+u*{?HOYV_W^*+S3Q8KOe#egk&˜?gM;,-q"bk ~eh?_;JS8}J? .% 80yXG("d Df{:wAƮHXJBj<,|qx<y,@Z:Eء"kXTnSq|Mq j|d ;a:iʮc8O}x&?Ӑ?*Bj}照Y?)byʶ4{_{%N6IBn" tL}z5ʺC 4O?.z~d݈`UNK@%nߏ(,lշ$F|0V<ոP;[(a38+3R)|sգ"3AпN4p3}A3s˿yiBxkޤFjE[aw(J$FCs.DP]pfGTOb yt4vF1 *R0'p*~eO).\)ϨϭN5*`3ۥ3Lw7JKgO5|uPCPffL勇n|nlwVv![[r! ׃ݨgn"\.eXMxc5)%M>;ʢ o6&NJYoGWv}m;!. &ёt#];OE5?[{U )E&J>r'ڥa"ƱF&b=n!9SV9b'"Ǩq?ʟf_5@>7TUN™, ԒX8_R6²Ã]uB;ԡQNGҷ7`*i'L$iWDS})}vc2⒲7Pp\[*G#ح Т')<:.~Ie_rέr~AϬAS O]#j~&Q%k}=\v4Vl~wL+'̑4C-hG ?W~᭸yYvzA#rQJ") [Z0E2J(E(@o4ˣcd[3|^tWbD3tT)s6+o!T<l:`.QzwDw8Rj!9Od. &zNHCXۑڔ?1-}|ɑk6c:U}7$"3TRM+"(Uʵ^_1B?պuzXM9bdY1SHN,I9D;GѴk]ӔrS[]Vưn_YJl/v} CR(8 P&=7N}QU!#hbp9׍sm3+XvkBU;An۟uio#🸬8YbROhOOFQ}ƻ)韩[!Q99v3YZ?`l Rj5uv)'Y32m9ڽؒ "e 0$qEFIr 6G* og =*:׼52%h%ՉֳT,#.)LF9oMW"&KvS+#;NVf^ CC6N>8IH`X{ & lӖLv"|%%봊4쿦ܲV`m|U²^]L5pBGf~GC$ؓ隝H ײxiO_JXܱt/z=I|Gv{H3j3Zݗd(ĩO])YdyX ᰬG0η1jƚ 4K/_ϕ]ʡ m,kަPa\:x (??ޅMiunoXDc̾*ƂPUyJUjg/C t,a?T\+N/\R7G^.'{?zOR^^q.≷`$A}tG>Yÿћ$yyzٓdxr7~ֲam c9)H ])hjQBWlԯyv:\bOz(LCǍ4?쨑 x+JCcĞOo&5Ǭy>s]I3?s +#V ȩZj1!dW3%|_Tj7CVIʊ[ dvePqFh#$kъy{I)Itm[ώF݄t *=KÖfS:Fh'BS`=2}1MJG:/ڝ摅I'2iJkuC EUkK=LC'l*Qs ܾV␻1Y5nOtFW~IW~iu⠶TOp*P4v+8{QNds R:W8#j&5$)b2$,r}Ъ&O%|q ;-JQiFLG=$# ]:<4Pέ&]wZTc|ps_9Ql9_X6ĺS;E=yf}j<)c%4>?9誹^U"Cw TfKcOO)dQ=ϝQBҳ P" i"k 56t9K=ʧ餠[IY2\ހ瓬&i\K;Gb>axc] C٪VJ\ <4}C¨PcP[^XZ"12.˶ynVg}(p[ȱ_haVN6‹kszrz>qaWFszT x̸f}i]&hiߦD`iEF$b"zx8Рş@E;yK?؍+t^O*-s0#yJ՟ A SIg*2<Lj2s{ψr%@=nqj#4mɈOO(MEKRZ, U,f\ n3VV/"lj+b;3D$x;J~`{ޔx1c-I;Gkf &6k]^RpK©\qO1C?\QZD"Kk+NXgp9Ð Dr o?z(%E9 Gccg%byCbLEExmWx4/EO'pY^r!eȜam;p͚!AfKx%0'g? mEÊN![.z괷ϊʚL!*v@Ωꒂ4[ě̅N':Qö9wAM7dUxv0Y!쎛\ò7+4knGC}"yLk58e$ ϵ(J4ُv\v˸a4[ک'%DQ)B$ݝ,ª.1x)Vꃟ?򗭯0-i1״3`8GH~9<<)&IHgע_~'/Ż (*oPO9CZo?b[>Ý+XP5sļymP/[ڼ´1H4GbgGa9sʭ73ᚂˎ쇴._]С˞0{ҍǪ%NmŨg?J~Kx^5>Zt˜v9EUd|8*%aarϭv ktȠ!LTSl[A&~*=ho?# yBN!4Ƴͣ~>io[wHQa' * S/=m~9Z6|+t적&Օvcm'X#\w./J=$Fc-GY^&2mLg>SU7쏌O|>UQ@.C(-Q{mBS SMSct+{œ=%lCHB*C1VT_*#@vثGrfpM v:G.bȜUsk7?4 ^a(f {o/j\,w|ZڝXDHKR^1sK0EËo5C1ZcbZu)lJR_Joe,ЖۧeE~g3fkpb~k9S(v'}#O@sDr^QƇ5F $ex f:ytc`C*o"reƭF il%{> ׭=o\=f%V{zhQ\7U%5S`pLCKʫ3`/;<_8]7Ni+sև, V╋gF8tL71uV{h)/4%RfߴRN]daIځU۹^3gx57lz}Œzw<ږד$f8m_`v{F̧$epDRw2vyGKP Nh#:TcZq|W}Y <_gG|"*<$39mL?κZȘo7:.˚r.+noSJݹ'9`hS[{MM=YCR v^gחY>r ĉ/o$Ψ5K@+neگ0?B%uen̴sOɰ~G^iP"K9EՏ*?N~Tgtȧ2X1u3N,'v+/; j.f8p\c,u<AsKO,D-U⒲MOߐb0j~->*X͑1@`I(stEd XSXUzomT#vKqH(dЬo}'-*GJggMKt!sH i~>I*<1 Rai%K" cp/3pLecyhǛ {.O'c~1wV=6+9>s#nsDl#CK+X%i%}~d'ht 1NJ9WAkX$p7r-Fho3,L0~kt;&E~7r@z#7Mq00fqG\֊AϠ A,vt+(}-DLIZ8`+I(Lw\Ud >q&7oYvG{3M߀3yk9{qIlE w^}]bxНF5GnDҐ*JŻ;F|!BU?;)fIC|qg<9@)ʯf&',ߎfCV|Ļq[=<Ύϡ;ߙB}(bqhɅdO).Jw{&YʓMgR?cI2-ć%rl1 E"Z'S?c*d{'VB90#X鼜AOQ3>y׮݋N`d{d;ne`$3c#'IlUY]-k͙ }x/xs+ֿݓf=xV{6ILU"7od4'}0΋9Otw9/I֤w;oH㖢o?UE"d I]>IZiw9MT1:^ՠ[4R_K K!L>TU>6i1y+0( <tGoqzDI͌d1a}Ɩͱw z%,pvD`z5'(my+ pup.: (_p,'N| 걱{+IB75Aӗa{qa5?<PH2Wˈ5[hz@)hX hO3UOx!RmPR{vϋidZ81ؚ-3pԵ;'<s,DPtr׬Wry $#5-wcia-_h'ϒ]3 LwP9skSIq) :mܝ.tw E 5w.ѧ/wҢ@%췢Qq;ŷҼH Hէ>K^FGއ~>U>>l&̌|[Z ~2A=6SfM&:_#9MyU<ރ$Am}qגҊ9Hʃ|[)-uVH(-K%*H$ #WѠw췣55oT|Ed*2dtS]A'볳軥v֜);ʡex[0[ 1 <5Ń.I,z`$uKA {. dEOIAn`)H#=cJX#p$LVbJdF@FfvՖ`S<6zh:]YWJh/}vR4{FD\wl'1C cYX=IO|3_V&|J]z SbIA>asm#mo[1PUav~ٝ=rw`FgP~g孀r?ֻ8I.US{ӝC1L^̔ ;F2j\A9 >^3zVȱ9,g_ ^6YeB[%&Gus3ppX#~٭@eI-ܶԊ$) u 'vG\;~FnR=vM?[@>l͔P*?.@6` g܃ ri\?3(BI-pɲ/MaP)$lh'OC4r+kڰ(fj!{}V |~lgsDr׸t@Au* {5-&inߛkqpBH򳟶vR]ʰT l)wxP%}_Q=w9:BiLUtƑ?!?.BsznHFlSɠa%dل1TSjFPr."੻8/EaG;waQ03"A}~\~>&vRGú&4KU%ЎQ5*M7{OR/R,-{Xu>+,veF*djEucatٛHW*# P K 4@6)&qRq&iݭKˇ}?'Qv~f܂hXdK Wb.sN($:=23~ tZ _U W{+];$RRź%q$CAӟ؊t% #Ad~GT_KhEiR3oRE(\j9UR llN]jR3ǎ PMI'Jzo"٘WHSwBr.#9~H{ t>s\f_ԡ̏{K3=`N@Gg;cjM~cY܌6n5L2V-wUFm*٦wAQ~jnf9)dvdR9@%jWSEz2h5!qAk/#ۖCNM↳ga\ef^AŤ'8O]"aWvY ~ 7גۅ&!l]jt.%r4-Lj}VŽ*Ka53; 4%Ґf= $g VrF\2&`r1PSs8t*fZjfjf #~b:pmd_䈧7 n,X䫶O9Яn@ͥm }1Nu 6BWpEXD3+Ю@/A`f "烣IWջ<鷗nP}8& //WTp"J~ hu~Öeϻhl=O [z@׼q B hdXЂWIlCS&cQg"2!a<ͮMA0B|13dCZ)EA\Hob!-s[R/s5Yi{qW'կ<ɅNzL [rGV0Pcn<.(t IGRVM}gvswnC rkO B1X4P!kHI!#>4l~{l>ݚ6{Y؅]5`-*z^1&pԋDo^ߜU=Lpڮ:e.k^JzJ07!&9|CtI\]> م 0z-Xc<[JPq.}mq1ݞ?K]M{dXѵpH`Pa[V NKʜf=>9>(O3)HUCif_ǙPW-p4| )V|@9gjГT?KݫvY ȱ?O3&A9^%YKhN?+~k3!m*o.T7gD1F,AM9m);z/\\śGNd`!Y PϵZo|> R'|ƧEFٵ?Nd7"L?DiČad+S:ݼ{ԗ|Q$f$ExNx{p`Sij>Ns"[ī0yͱRWhiz5f+r 98]_"u H'\˙k鲧a2.-: ,~;)HSl\mZ ꧁,Ae[gRŏnbsqA?-iX=ߴ,엸?'nƐf~ٜ2: IKyDY);FV㿒Sj>SP:®_I_yu1{܈UoE%GTgQ*i{\ԍ稄@ߍ>d::uˡIZ-bdeA)snW ={7p$>o! 3#2zMC bboѶ/gqjpWok !j ((tx!r)Vcz^ $Uy*vYov!5-rqFDǙu#}лF:p߱G?Y2]4 !&Mk?%l{ eF}݉XLEǧ/cE E*G?xJ2zY֕ ng8 ͊/ljPwrS2/.~3wo'_AqwX?vBNJVSk@eԍfw?Ҩ/BrftQ]@sQCC]D_MtOZ؉wG\F4ƦծuOX,9 7YdIvZ|_Z@ |WLл[h5~rzz\N} IC ))mε˜,N'eӅCKʳȚMLj%N¦9ÍJ0O+#T!=[!>)U+[:{w&x{uH[a27QZgD])HvJ)ڟ2l:P==Slu{QH1s)e,bvS,P"AȃEoFtRXӊ؈E 2z'4 {rYICfV*A<Є2Wg0!.νD]Q FM~k}hQ;|b&lY]ofS8mA$oLrކE㺪22v dApw<.GkPMzor)U^*fhxr b/q$36ȭiGsmEweUױ~ tUT$rF餼~Z ;1ftכhOnEᎰ\R6"mv=^r> 'K?hZ(YJ~a:z Eu+?,4Fqj8AI3C^^=stͩ׾Ɗ2LNi)sr̴fKƻ|\bS6ɩ\ڈRo%a_c|-$>tcw_=V]I,b\лmъŇ]A6Ku`,Oy1qP4{`#hD^8,K6>wG҇n_M9MGKx>Xz4Aq!?ӵ7I:d%ʭZc-0I1Iб[jqWG7"3:t5/T4eIbyp+S\Ҝkb5gؑH(BfWBN8$?  \lXo$J1uuD"c0p%KZ1 U8_iC=۬(Z(Kw ڭT9__w( pՖQDۛ7"~i}=*Ǿ̻"Hi-W  ttp LpiBVv+Xhf½Kft^ óDPM0+9-<ݽϛBU?3V^.ݫ{d#}H rzkCGdwqge(|j#!^fJnAyfL,:cP ǜ_f MNW5*LPȬu04_ۍ_H VHDN$g֮^qf|w\=~mKN!i#fM AP*|4kLx.=q2+ _CGȸy&cd{GcjB%uok Ŕ>Ar`~*2BG}!1ns:^phHN#aB mɉ(XӍ)\&{n'mӴ8L6L8,)&_B$q=9"?ňPwxvĶ'+.}'ɛɊ Čl`"[b?ᩳOpc&փƊ? FrqFrKeb>m φJF53直;dB%5;b rҡd†~;@ /qn YPxھ=| Da3 [8d}`ŋ99mZA6a"ڟ9g/D亵a ʡn&#)~b%uz`fasF(EoO\F?[UvVLPDΩZTU&+0kg o[zaC% N1 }dEp.3$xm.i݆y iYVŧ5 5TWNEF*$TS@rpڬI{!6hOy- p%-3CbV 5d+zR1嶓;KK1b$2j$4}MԠo wcU4ؾsG"¾WB0,sm*ṯ$T ].Jqd(Rƃej-4e#ɾ~%?ěTCl-+Uv?U*;pqu'5hEZ1$)Xp2;+N+UCrGZA+!YӺ鋼(EPcb,8x/ܾKB[R֚nzn+<$RY,DEZC[\[T$Ξɬh.Sc 7"IT`ǢQD)=5l 0I#"=hRaSTUp<_)dVB 0h(H1"輨: I7A\)aV[|xL__(_(.dl3z5ufzCt_jIZ#"w2]iǓjX}65FNomN'い@^"D U sr9ŨA`RLj0W<~T*SԸ X[".׎gB4+(j$`t eDY"{si^VCIJ'>'?W_K ]J8'6&!pSymĝa-zD6b zT1d#9qfFpWΦ?q#!*}(V_ PWwLdp =\YUFeN\B3B1G&G[ޕǸ`3J z{aU/q(?T8-4R`Ҟ(;c{xkgP^*YU jjk!AV/RȎr:zPe rF-PH#M2]SoI(Y>H;;) )L]>"8uY'|69n!ӽ9!XGk-w\|G.CM)z cbL2|C[\8#zK NXkIȡ~* 3CW;Yr{~Y5'&Po."5BkҨx_̲^7jQsIFL'U rQѶ$&罌bg]qF1*{@wBD?`Pz yRǯOLIENiaOb NLVYT BlȀe:3hʱ }q,h QȳkzWk#h$ɥ@g0)'s`8u|/p=p$O)W 0i$ ->vkMni \ל╫'_崷|c-I8[I}fP YvLtSYD!VF7F*9`o7zRyRr3W{I;j/]mUjyPd%1Mx0q4+i7]eO{"g|Xݴ5sD'hQHٮ|ݼG` ںF+'dfZ&$ 2\?(z#RC-f##jՓ+2г2P۵O ނi$~e`9=)Tk?35g$\BX+mRs-2d폩 z2B[cNiG13Zm_lP+{ī51䨳˯|إaǰd̂ ^?-&Ae^?v4sdWȂ(A-FJR0w'a,_`@֮Ny_҉ XBpG[,[9jtFLXi cciLN?tRT_lOS NCSNSrTH́vgBjF5鼎5K0ṼЖU11&/ &t<['^\ h2mhj)>!3z8 ( پVQ90)g NP?!~o>!$TƃxNwTu_lKtv?ǡjGqfPVH^7:=pYa]a>͢:ʹ GON0%3bydj(gg$n=irϯUC8I]jf>E\V.oa3݄^nNP@Q"UIHFܤUky&lಖ,Vg4'+MQoFV|AA89?bdϘ]toe7_>C3DQ.+zg- :)] L?R$Iy6g0-/?tϊV)k k(\QH2!.Y$G81[<_h8jcR>!`L @R%B"2sgj$^6Sq}T?6@5"X!lgښݮz,ݮSO.i8+3+zٗ0\w0E>)Ǝf_ oL"(bz׬aD޳9Xd08P>[cN>][W_No0D~peS&nbw(H`Ĝ˸Z\DUfbg=n@gA99;4,8.gl-]/̷̠i:(sfNȂISH!ZХ̫{MdF?L|if45B v,~ l\EFL4DՃA }s`Op*LîiKP%P 4akVb3Q(^AWmB;h?<'8]0ermw{,ֿXCG|$݉5~.ՔKAC%vs?dGn]=puc6rLi%2WyE+q ==fh29 ?뒗Uᒌ9 |gK5Ec HS uCbSwjR5)0B=dd&T? +'=ޤ7$HgU9P/G _pBh]0d8+_uIJFg԰5}b5.AϪDM2Uq+$2eɟ: { DzW2 I; =~sž?PvK@UBN- /m,HV]\ vDr8,8Ainf:=[K.3}O+sBb'PfX~ G]`'Še"xtgbC+KHUYҊwW5H9`$9`MC9/a7y;Kۅ}D_B7KN3GYqrQŗ2G!s"ǸIP1s`<2ES<J)RگX$?Ih;52awMͥa t51|L7 M&`j U*#9mEl-<壮%qA8?Qj6ׯeZH}=1:[0L!Omш"VJيVGB F֚Ep¸L%`^6;ƪu>{;\}Ӈ]!9J1GT::'F`qdPQym;| _Ft^5\VE"|ѧ8h HƚF)pesEp1nhm%YE/Gg[g|&9z A3j&i ɥAKv mj$êOXm_oL1NB.zR^](W̑X3'SzQ>I\.&и4^}+Apq]f)fdoz9]7hIyr %Zup#į8N,(ERQ7&!xbDZ 'Yg}h Ur6B6^HMz?3etP,ٯ "? 2Z!{$p8tJ~B}j غA9:2-bVRph&{.WDo JD8,1d4ޥuW.XA>V&cI]M*HV$ R}8| gQҙW.Vۧ+R PAPICBf+Ndsy*!>N1!|8,HGOqtB wmSnaLBX!EOáωMkф{]RI,Ko-uyoac#@h ';) E}#@[IYIwcP iC6"}xR#zǩu0 &SBKo22+COa6_7oi(Ϲ3|OCCW'H!C9G "q)7P=ß\`$, Cc B1pjub#6nǎhP]y+)@6y46g1I ,{hؑ7b)[V􆏥dBx?V q)ܔQy{^%3=POf"}>"vv̒Lgs'iO~`OEFF^"Q58uswDo_ȀHy%b0U?w̡ Vֻ&mQ?~1sÒ 3?OٷTL9*$8?]b]p:]CH8?]SҲP.+)N5JuXQsw]`HC3р#;-ۦVD8*TkQ?"ӝ4INۯsfjo?aə,=z<ýI,LCvA*]H.tL8]f3Ɇmz;)h{*lJSە3أ9?s@ VJYXFB%w2fx:xWdMq#ޙ9 ݚ69'rD toF:oQHG?o~+#A*6H<)7vGNjع<;Ɓ -1$hd] aFT/;i3jkaܿǑU)E[>ݠ72L #͠Sw~F l8 sH{g!^{Y^ 򇂎3Ly[A.Л>q_/S΅}dcb[(7vU.'Zep8K͢OV؆ס4ije;~uӛcSz4h}~|?`iFڐW8~&PQjʽEВVH؉{oaAOj>}/pvgэWÓl:z,/oIvn=/%&YSZވ<%hGMsb)༊8%R\Z8_Dao O>PEB$Z:Fr11> z+4GrU|L4FΥyզWu[Gp4cPn |1GZcɵIy4D^N S^i=[4!, yR RȥyR(Xzj9@&LMryk8ǻnCyRKh>+mCL vZdΜ}JLqYʾ  V'.!ro"%Vs>ހcŲ=9Z\ZCqsr3HkuW҈>Ė S/S :|k fW٧w:u /+10vS5rzD^wE)n;%x|]"*vNM]'%_$s3>(*l-iO H, %2 ՕOk^ft#( Ks[ "5'#ۊ[pD|끕_;<;Zq?%_63(W0Ysxo,'zgΒ!Ps\rΐo/L𝎧UfyJH9BM ',v5(}X 1g_̕I2E;`;'-(9uh̙Fb` cnyRhCE:_զ$7D 2ҿ𧸽޳O'Ȋ#ތA>Z N Zpb`|AF<$}W7>J-ǒ9"[^ܨ/͏c(#MaժC2|࠯)uM`%:|Vd2fN*q+ZR֟pI'㦆 vzD!Ô:x6(kz:YJhPN A+63MtxO9Iby9~Dsi\xUILsX"kDU_-Sɐ9~Ze=.pJ1U]}]>9`c_C ҹqd[umR{܀`2誦}TEџ96iOCq`vMO/DXf}@xؤ Z`caD.8>*6Hl,$1a+ ۃ:q$y+.~]m$(=)N] UEvcUQ`}^.Y#U5Pσt#-սOQ}u- Hw`NE%c9` %rz8H+ؓ7H ~Ay4YMl.OA)矃9@֢zx%B=+Jr7bysgī,VG\Zdpvczs5>x3wm(hٴwkؤ%Fb<ȼxGXoI;U1p&\O1b̂nv}%E #US4@_Be,B90[(wu4| ĎR?]/yb7K!`ot%k`b pvXܞ򍕘yַ8f{-xO;,L+ # -l/0LzzRHҺY3mv2GESePq˼3?=Ɲw" kߌפԸv.A[t ќ_Yl/phKJ`l6E'Ǫ#o?%1L{Q߭CQh`3`Zֈu8 0& ;yW5vDY}SϝR1wd64W IaD51pe31̎;{)Yo_k}Sc¤vOtZO;." JjMONաE .YN{Ih1FFsNGo#U og- _!(3Vz9G7[d.F <&-q:̚,k)ɓZEXRsHB!a`:)#=DP~wiFq49c~E//CIE4Ll} u h*WHBoJ74vi>C2g3Q(%i5R;/Xy\x۶GտO[Mfz(^\Ӈ@ 5'10|N;ur)pF`Ջ/|WouqD}{=IIѯL%QeepȑE@}zL=:>d8֒D>D˾|)^?/* ɲoEےsSɒaK`5)A@]g"raI(B32e}VdxQ'2\)?fz;z_!Jq/B<U48څ~sP,3OZNg_D+fĂ-rm&Kna,98|X 8<'"aA>!aC$˟N em\51.ʭ^Z|~!{ycKyF_uqځ׮H, {0Oau4'ꜿL`eYe8,b^\*Q׬4 9J47bMN;-Enh/0yL!90qJ)Q |5KjAK۬$YO6>cNVƌ-_n>fV?*~0xJd%l%AQ_7g[i0%? Ra}Wu72b>UW'" 8?56߈:$ C7¸nĚtx $ c4-0Ns}酂_zǟ$!8-\@׭I;^NWI mB0UY #?ɥ]B-dsKښUge钪0OKX2لP{9_ CAUկ㽋c@yWdtQ2hBJ㩰>b'Ń 3%i|NU/ZoIFy|)VaT"e{0﯈*\gZ< j@DWB:wwhЪ9?{oh VV }/? G5ѧylGEP{d>&vYGipgg{qGQ~6m{i)"A`ѾbGfWu#_dժ@,0R$"IM'*|ӹ4Qid}?OQX4iU*l)̥WZGߵ+Mp)IUfTW6KV>6-3G-V&Ӑ>_uOC!yd 1}>fC-*.s辠W[}Q'aT'KAp s!y>W1T\L_/l̐[r.њW1y/?[bLZˬQ}da|.ՀW S'Bgc^ BH6?Q>m C׊iŀ)b@_<+M c1jGd}dx!B M\qLyӫ&w1uC4-68 `bi)R u=~ Z&,&dr!e'|.孏 Ribԝ%İHt3SJaB>HƻIP#zlӃfҎ>9>X[ I*DMC 2utҞ/c%F'2+ăb O"e,F :@No+7qMq!o9ǘ" ّBcYF_eswE@|l bĉd&2l+謐 9Be[P7~"zCԢ.97vN-F` 6 pPjQ}t{8qg̱'duZ1UGmH+Դ*Ww+WOlPWWQO(yOmOU#t Rt}kD PUıq*tD2#/\)HxP0% .LeG"[߂ުS6b1=O~Jnf mGoHqZXݯ"B/inZU -A3L6f Zx)E˚rǁDF65 ݅;k"oPOǾ@Z'cm}#-!0s>y1mE),+*ڎF4` Abn@G=̨Xqp$D@ܲA0tpU5=Et*fzV?+XzOB|hK\:\`Irtfo3 dպ"yLBnEA\HLIwFAxU?%R'ҌOk_~LSR P?Z3iܼƇRV5<ؐK&QɬwV)g lrYI>6hNcpSºWIve2u.I轜!]"qҌ.O8v<vaPb‰ا 7\畲nZdV3 TX\+#KP#hOxV脿)>*<^kvqyw^tde?/ i=YcqYN D%zp߫N)*3.p$Ė(哼AwVQ,2}no..d|Ho]a3Fe#.>8^ꤨ}XN8KWLJ40G_@.8)lI 85 9jqTQձ;>)PQܭaxmkosh&kGʉ)>PP/%Q-)%w(ӐvfBsU[~3,9 ",O_H*glO9xe*2`"ףʐy4gsH!?wi_% Wo7 B_mbߊI@,1}@|q- N2?MJ冹%%P`>dZm GJDmxQ|P- a iE迢{RZhW圇8UʧIZCuFP…3 ,mwyTkhBNrGkm,K =,yZ=I/;gpa)Ϙz5WDfrTjv˷g w-J4 ErnV xxww '<'2Ǯ$კ^&ZHt~Pw|wd'ss^ʮ~3ىe[n1E^36Jm2kgcG7%8rfIW5hydV*~'/v(f[,<ځRnFù0'e>3rE Ifa}k@[䑮y>ifzrV#۔W5t\a $_>O{=Ŀ6$DPJаSpEvß8 )/uDJw5i>zI0ˈQ(Pϔ!QVXI.]qwLsVH k#cJ --;웉t>|wqI]"vL.o)1WVۭvn{ݙ3zYp uq =vD?%!/uƗ1Y\ ѓSbA+LFB+#}L䩤r cdE$8<|w~!?k6ͩ6FXW%N '7y]|!tSA[ا*5 x ̴gsKVR(oݾb}`:3r@f"N''^93允zG@/>ǫRoTueAkSd"$bpGK';6 z%q#0"Ko>Y-H•\5nH ҋ)"A߂6k\Y'8akGӯymkBD$b0=M/R.$w1Yed%cC~]wNbv)}`}vsH5"?o+W@ (دڹE,2ϫ:se5d^2KOK{(Kp7D ޕt &&/KDObe%ʇa=:;+$B oQُܼW鐬JPZS~dB CJlz !A_4sHJQv˹r<,va]69L?ߪByV9X=7K,3,aA^ͼu|]!+.ʚI 8k )\8Ws_mʟ9x6ywmVM$!`#>Xw?]!탠LBCX^#Oa?xM 8N ld(uZHVl_YC }}:v,8&o+ 8&2ޱ7_0`./$vƫg<UypZRcH2\C"l}Ț#1Z8 ;k2\SPIiw"pFD{㚷X 8>6"LɡaYf@E 8ەk<&D6f8L.H$lj^zOGv^kYXbyv,7J[i##m4j&FOlR*w\˸av dUup㔠Aࡇoad jS05nIL0߰n";M9JfmpA\-Rr|拌q0и$G\„>!%*A|D4U90/QS#qb $ea~_@\r:J)AKr:}셼U1Q1E86}n`Ez8g ;$C$Oy/3'>e1QƦ縩kQY̥Oըe\ELtFhGŒ4ǐT+_$!: bn NɁdeDyj O^H0c:'(c%+"EĦ_(Ei* _vOp?~qҕ|9Ϙ8H8y#C}-5ܨ[9voʴlN (?'/%vMWp'4Z ɕISx_{8Y<&&Uo^zt oz(GΪֻ:?3r, ?R~?G;DO%TVGϲ6YL/v >lb+J)zx?ޤ.1Kc#PCq?ҷԅjMZ.*#--m+2khm0,Pywٚ ~B\:agJJg¦t-3 1j.DإE1_9,0.Z|$Ja?E XesX"B8V/C='_HbkՃyÕ.~ܬ)>܌?FQl:/w"osQu> / slz4Q5|~Qdj|*{(#Y>_7H\SV2>xA#r>RcWx7E] zܫ`&lkQ廛ZX|DL-aA: s}Q=W6]SYTLU|-Zf)@< 12ƇU9 br6.-I;(&|WbVO_nD'P^WIZg*vPo܉.Bs4r}_U>7I,S,.,/-1Ea}*T]uGk,d«}`/;"-d#uڀ8`9I:Α>V>N2nS&]-JZ8wG"xg UWùsO.NYk&Sr|c3K?#C-w^ަgPp4&ߥjFi({v0I=}]VNȏz(Th7vUbFN; (nht/)$nb6%Rhu~ISzXꒉ?Uį.Rn&=*}MN {;=^Zj~FR N6[pYUQixa  F#OHxN* oT9a-N[#^,][SyeV۵ cfP.~,ց)H˃֌]ZCzw >}Hs|;Uja`) ~l #m\$Ӛsw`??Q7w!N*3Ɓ-)h p{؍}eDG2Ǜ'Nr=|ppomۈ8dŗ Mݺ:0q1H?t8vejVnۏH'aO3KdeaK꟏4H#)-,9ޟjsB[B2j\!u|/p#!Sc] n;FnsyT]y!V.nBe!X\rJd"h2F,g[:0Sb7>>P1Dos'^slRt[HEitlӑiKtiBhߙRa~ۧPf5 kAeq@Bj<>wtװV5V 6*-[3erbH)~"lF3Jr-27ip|Ջ߷WJ>j}^4҉oNK*f@D%PHΤ&˚-XǪ1̦Rg5߲*v\aE lGAz}t)ƺIgnA~s/3wj%|̵/ɺoviίtk%K^/&[(X$W'g׳?{;֭s}U~LF m`WBLZEC! ys .CJw~xA-> uw)#&&1"݊:lv/n$j1"$AOH{O舃o "QIoY3x u*bO3XPW)1p09hg ؾ HAyI>W"8͹?hBGd 7ΥwqebϮv/ζܠ8P$\ q6DSxd a8~VcGAw|F`#2h~{be@q=eNOOp֐c?ȣg0)؃_E+\ A[U |X%7Q MRAŸG3bJ(ok-oO 8rQ3OULB.ڱɘ_ VB$ֆͱ=\fx`_^3;1j9%?FWߘCtfl&+Tꋂd=gG]4@%T<% Wo<#zRoY,[gIMLq)*^-9YW˴aON HPLdkb L[>2-^`m]E,q2(/oo7ѵߡnBœes}`W%#W& ,r+\8ƻ8<|k[ܲ]?%+ݘ?W&tI_[uiUfʗbGUgdHsG( -I 9V M|"V)뙲3C3Dߺ8JQEK*U'f4(@>0݋%v^dlDS1._X\}^%tvA V+]7pyA||o}Hna?GyfLA9Ow3CuAxKƒpKo"L{c_5;O%ʅFE/r6dUcgwpu91 o%&OtfÊLlM%!eZK v~`-F45ŷX('Mq"FtT=Y9n!%b-~CPz1`{PH0 ! gNnX16h 8kI99ͣ8%6'(*mAvl`Z]kG]z{zn0WJXAu)i]| ׍z<'1w/8. g-: 8S b(]ẕ)~1Jmnŀt,M< rk{| *o K=}l.7_ Zb/UH]f̠W{AyyYlOx6vemͼ* ^w >]Wʴ& ЮnSe99@X|MhN1TlXgO!+vl;WR='݋7mm@+7V}!zK]#8aqM (Z<dk=W?]r͡7tk- ؝{WNov8VZr({h>Bt{<# Bawt k*&nZ<Q|O0ؕPWP!\i#PlVV<*[nA:1%2&N1k9fD 'l[GgafNLE^5B4?̎'\Q]yo&onvѦ47ok6gHsiCoXފ܉ݰULv+Eh;t|YwUW krDhX7Igc76xe gS.a];w3X$k kpaɇw2tzB4huoȠa ,-%2(yfwp76~Z>B!dڎ7,^L",ɝ)2y"WDt72?f4vc} M-g*頒ip&qͮbwf(IҘūKB5FlYد')9!xt.1Z3Xx 0 ؠH[}YT=*frk|DJ-%FC45Eݵlq"uTX-y,0ڡiIOǗ?V}cg- ǩ*{xo3$HKBk $7#5]R1#ZNtհXe˖ jM%45$ԑ؃m 'WJ ]+XC@hWe4hD<{ N\QIl熎˦ 쟂^qŬlO)ivݒ]iEL|I<.>*Σ:,'+I8b;, ϜJbUwJ#<<|F|yga t9jjsMZ($Ajvkdٚ}=Sz1?R lIm՘)g[v\KZ{:5%>8ʎP CHݩ'hR1 񚨛Ήr{(51!5AXV,KPbR[˦0Ƃ ih^ "CV ZOp`d;L~*0#+EYP1q]s2 4꧴^z'sj;K]1(-w90!s8h@ʓҍ~e[vν<&|nSU"Д5vs(Vg8]Z}8xZ ]WuB\+Y%@h+@ 5'$54[y|N<襯lS֒wZ^cDd?j`Mպceʸ_Yv8K= m|y?-z~:{b'WZpڕ)KWk7~xpwI~cn\1qE\jŎouпf: ƮC&ӥXF^@nb5).BF,9>Gp+HhBJKDaq8S7uIlXZ[=.MTLYrpnR4QôtD= lr NU ']Hx <8=O):zzx+ b*э Լq8 *ΌG}7ֿ x-T+&3,O(glxps6]wKi.aR$Tԁ˔B!`Dxiܗ?Iݏ_f"Vhup?e-0)Kc>c3QYB^G\:̟sR[eIOqoAs@:BUڒo>avO-7ˏ;)ꗦu έ{t.? YWn¦u.`ڢv5,7<; x92_+: "tfή3ioc7c+"*^:%HDf!.[weoK] 7(1 Q(JӶv8X*u*Rw{6 _d_}(?ls:7ȸS d*Wz#ɯE\k~R1 7s0H.D2>[mz.hJm}BօsN gj}D=+3?8*C@EĀ/^bDŽWo"| 쒗afA= Ь6;{- SfoIx 3|ձ"h9Ɖ`7O|==>}CE(R ڎȀ+Ahm6p Gx>,PJTKActfn-}7"VTc{<6[*(>J(Ϭ9ת7{g.Srq 5>'u{ ãW2}_:Fg؂0ҹ>#6D9)[R ӛPN{S®T]r2|<'i])G6a£ ʯwV'a.b[ }K8h&DźL5Ue|?&R"^S&amN;}P&>{xg@΢%wi/gBzlL[ʰFc߲|i2-F<yg! qS!pgw[*0)G'roQ]5;EB_O O\\W mPUW%l՛! >ͱbEң걠x>L:W1 a]]5'0sgZنD0޺tbvv@}]V[ 8ͦA/DuˠZ @shK"<}r/\V_L qs|!z:XwH2׬z|A!,?M?8|?Con ͦ89ƝەCb6e%aٶANv,6:x|8"$>*YkuVj4TT>W@965>NSr2[M3§0Z-p撚ws˻ƵE(_(2%%>L,JiVFFL=0M1]GC p h΋5dl"珪QZYs':Ca, #KV>'WS!nSZǽd`1Ӱ_L[˘ e))̩)1~ y6puSJp6R7]R]}ܐ~lŒ eӔ ęgev8cd]R1F 2KeeJ&GIc/zn2m3/@uxL/.ޔ4Wi 0@E5^Qg-cJX|hWdi()i&8)}ˮBmem0NNW2};tA8|3L,7}-~ԖˣjT_!-T.~D-ZUQ?@ri:1ū4d*e ΢LǮ|NU֦F1 #a?!SlNQC,M2J܇D^7Y "b0:~|8n3rS53,U̴OcvbyH?njQ$(IfrԬ1tǛ"*= ɋ"wT!}'tgIu@ÜSl#ͬV qn>$ϫvs+K,sˆ` rͺz >ܖH*A%Jغ}LKWF~59c++r[3D9h#% yV[R7$' /XX3L 4ՕN`D"<8TΒ|DQ}q0-M~/_DqN9Y Pg-,b7Ϩc]IN0[<1xr::mqR'0(!ootY d <5֨hy < 3!18 5 }̀:e<I.˾TqfSd4=O' ү@O$+JbWͱ!KG%<5 d+Guvc`33?A LMw2-xsw*_~3h$66"q}}(t\3: foo952)_ۅK EJ'XmXPGu3be\`Q %~ېiZ]b6}B:W8q%e]c?֓8Y#NpuݺRr2o̲ox(k֨j3Z= tqRTrLɴpx{.0:N~hY^T v$.EPStzi'2V[U!_G נ~B9b>3K6{q$2Td3gTձIB|"rͼ")tp%Ypu!·ydF>%ERG}[U3۰2KHjB_t%Fֳ)_<5IGU-#c:6,S9HRw[4FL Use>mQD~4 ;"#OFd<H'_b*E]V1T~W')E`vq[%UKo`P͓d~I,3*7$%?56O*YCǯ f5n 8;Q^Iu}~M2gQ9$) !- 9pfTdsi Y-<_ŲOT w9. ֞\+c:xJsd2^<&,a-Py~ 7^qVDItE*(]Z si٧je!VjIX)=Kx9cpz6Z39hԝxE\iTKB8<45+ItHxqk,A y4]ԮUsW6Fs Bď<":Qk9T |n-?>TB:Ɖ)3r n u.MJ]Ʃeӏ#᪞%9Nr$Ԑr0(S;goB^ a|XYe ))O`d)^8C[`[2Ia9kF|_!NIc|"ͫW«%;Q݅;%+ K1DfHyZ>&y4CaFr+X>Տ0݆$nXv51x:cj.BJ7 E=Dؿ@bY-D]!koPMjdJ _Piȱ(Ip||ڊPY.COȞ<WZ7R.fӓ]CPs]_)K)$Zxo+ȷA}|i]Ἂb!BVBK<0ωĨ ʺْB{m1asjnԚ7ĐKSplщDp ~˟RpÑc+2C$6aW+þaj}4OU7CK..UFZ}<|{#w tHCTêx?>)*`.WX̦{gC4/z..6℄筶d hnF"}gx^)`P0iP'7圾jrru[gC ʊ2:A9/>)d[$F[0Mrʂ`סL#E2P+ngT}\g )ոxKԒÞg-zG)pJ1 F~=R$;VC]/Qv>T='%@ . ǎ~Ɨv&ElsiD^.gTAtJE;s>Xv? IEFF,Yx UcP|=,uyPk1;@ W″Mreš+ fu~өLd -E[ T 9ݿG:emB=p 4{~W Rӊ._w،ӆ֐rn+GBKś~X!пRc_<]ft@GīDg&zz(Ve|{a"Yp$^lA[f_CEw}ͺtaeň{}39>CuL &YTg M'͏.<^ꡈJc'CWL ]}2#LJL͍9'ˇvgvY<.qW8c.hk|+P&eO&;x_?AײdsTL=ލ”]>4BR_jWh3죪ˆJ4fY.lI[A(_#F06 m]Fh,.{ 3Blе"H!hUHR׃ѱ]E|%cG~֕qQ>ҕ)8$}`/=1T/,_k''/F jIJ]v5fAUDK(z6@بZ:.x,M3= rOGy9-Eb|?fc,c k7PHv8ÁxeaC$CFtNG<)GPN`MѕD^TփuJ Ԋlo1R+'b>Ҽ峣g;;ݳ\GVz[XJ{O~EoCN$Xuhb ;\Fly GX;!^~*L~e|*]0m,S]7!y|A(K @YiI&{\d,n:Y,-ax~ʒb(N~WNMbT՘}JiqK9e<&%GdfwEި~ ́R h) 4L,SY౑۲V0Jl'&7H2(Ysʹ=4pIPAv!NBVp`)~'%+LVYbh!h,\)W;r`*+L.Qa Xf&} o+)lU :di3s&d9d&=}QMחDx)绗꼻zi9/5t&ndObgt7Q,eybW'O!S+AFl|#Ͻ/f6O)^0֙+l apAuO5n̥fΫ |g2u4׍䌊L3K9 %w0a0LީFXl`H 8FRRH2&>!OV)!5-X&FYBwn~0ajM*ڧc.[;;>ޤ}s 7ݔ Zx-ЎHzej|C~d*yfa%Fa>LR\8nttW 43٢1ǧ2ڊᮝC\`DnB>}yb[i/Y h3X9X Уs&`[C2 GTCT[C]bA2WjSBW5O#6?F0uMyW.ü4EjŨߏ/إc1j=  0~j›B?R;fdrYأ]F(=Xg{&*]Gէ0-+V,aj4`^Ž+ף5;/]Rԏ0ݤ(2ObSú/nGEAi*Z .bU<]<4@!&)}fR-oTPSKt}7ŷʓmZpS,rg'{>Fqʋ iHsݫ-GU(0 CF%J Rw>~I'6HF8h!}ۯ"* #C<4)3,'ʈ{؞S}QjuO`+<^8U,gKGEtROޝhz;ȩ=1 vS!ڣbe.ICE@1*7)ޚQ/8Mzm#}GYpvPըe*n9RaD?uTGaF%q>W@6]v>CSzȈASmCw<es&9Q.4ڐҕ?JYwy}s'OѪy1'#C1͟5Q%+vV6O8λ0FaWckfjWrf^pE|:N|fn1dSP,8Z Q4m=A'L߃)ijy Lc _chࢷPQ*J=kYvXx֛&p=ኄʂ;UIAU"Of$hj\CiPL)u/Io yvx+_`!|7uJ<泋jCYm$O Q 7i7.2Yp=˼:10i|lL;4#Nw$#7|22o\9l )M*|1?y cבNH\GXr d.ց5RFv QLV'XWd__~3d %'ԣ7WCv'v$'9ŒE`#D#+n"w꾵 K} f'~-"TBUO[n?E TDpT^8I( aCVz`+"66ᛇeE^J(ıpRh|]Z).ωڹke]·.sx)iYf J@EcɔEdݠiECp~~VL/Us'PX__~j9 dj*WâbmkVE54 7ϟC^TЂL[B G{<|eF\k]0OJJGDW(׫ΗU1j]l/<+:GX&Y9\2Qqe@_K:6q3 LhE 5s! !j3ZłSVߓT$q^[ lFث¶!z]JLH;!E'cŬ2,2='-$d G>% 3 UR r#5#=qw3lBbge Hj]#aHiAZe߈8ڊ&zxS{Db9Nʆ>To?N:N{)YdEg/ڪH~g}J_أ5 )@}]\*^N/xHE20 }ALuF%c:nguQK$^-s8!JRt<~(D} '#^ sDZKfFFF}&Q2B_HG _kodqr7ΉPH#v9:$d6!D3K+>r0?|ޗ.x2ZJjN|*QV0giHUI7bUGh9FS×C˅}x} " ԱZ"LN~rҜjplxn>&;1֨`Ѥ~08[7a1āt+_IVktGd0YVbGhOg˯크IJ`&O:꼼?e} i# `"x9LIX/KI&ZPaQiGz$5Kt̗v<"ݔLp1 ~.΄"K! M᫉nI;wˌУ?%oG#s{tQcg"Q_jm#z:zbE;o0H;]lX~PJj}u3Nv(1:y_RC O/ Rz1n9}ij3TE 0%Uy\5sӴk}{Kۉ822nrh\- :$KK%Tr(h_iX|&*͘:wܷ;'I"i1oT):5o眵6I'sp1O2ct>:)#uRݱB]>@o gJ f3ތu 씢5r O>}cߌq,}hGM-cN.CYHeu@zbm(CYP}T >旴Aȕ0sK׃Usk3?4 )'1%VhSO/5p=T hw_(ŋJXÎ/,z 3$H"v_etOpy,$b%FB*C(ɳ%hc{im <@h: jvi(fvЦ xk֥O!CsD{ OsJ*W^CA'E|hLgڲ&ī&vsBD殡 `OlG+{Jf_8>.O qcRm.|~J5aEr+܏eGUQMx3%e .1qx,[E5> U?Ihb[0.[`VNgw`ѧ? qmK$A˱mo'vіrZUy3cFYz3 lq[edTAPI1;| һk{(MA6U yy O3.ʍw p?7n;!.'=VlE&їg%-p I`2*oCh5#K9̤gu]R-,Gaףb,(E6bS#=Aj'/B3+CThgk^#L!Ke]sTCUXqt&1h\"Hf^!zůj#w{?CHfHIg)>&G\ڝHa$Qvϒ>hM0RUDX<$KԠaY$.w$BC4\{2-o{%wZz=@)zc_dm M66MDSo" ƫ $'d䤧u %(aBvT0.ڼ'9IXD#w}2\U_VLNz~0ƕՋD?‰.KҧS:K0-< 9lj^are6h-Y8gчS5dCWvk$>}Zp 9 .3CIHprD&ѽo#q` ʣgE&sҒEbH" ,E=M?v{>bl'YcpmUNdX0n+]Bob1Vp7Ps=A`8e,~5%ޒOjy7J]QL3 ]Ze-<Ѯ1?%^zb_rҮ]Ew\LެqS`dztzJdQ.wrūo6{z-W  H zUg)fX8Oݟ cL}`x!ow.>.{7<|o-DfJZ?.G\}F|mPb0Jo= 9Sl+0QaSfeC%eFE 3LDpCNceO|tڡ=j ׺cbe^rXp2K-ep}1jqx|f4UHixK)ͷ$}#a0İyn?y4?Tarx@5*/ΫXOǬ)UJS%gn+!x*q-0 >YO0vX13xTK~&{%#< Wq-U~P>1aN"${ͮK nV%}[B|Tm;a]aea4Oxp,ϊc/:ӔARLTl[Gj,T-c"!UWKL? HGLq !7ɾ/0_ v3l4^Yt6^l?e\nFE`ӭ5x&/Md7>D-p"05(*\2 xz'V I@h; ߵ~j’M|\ZETۗ\W2d*'`ژה<ƅd ALq#b:ov r5G ՞G}NXO46΄@.̘[OdY a!zVn1!)% q)B}$U9j!lK}m'pT rHL(Bt,g7|懌/_(=O[o Ix~tY .6j! o=C{d~%thЛtNjUZ=;x|άGOl]!DD'-Ub.^bڧջa8.zk7V/Ч ̈hORx;v+x>^^lU- ]$t'l\𳥮(s)!kٿ>l|v ]$io "DxZUK Az̓<1[o@J[=?$9`PL 8u=q<2Ld?Ÿ$qM5‚*zє6~?&Q0VB7x}( _n9lPP9vK,.HC`ƾ9'G-ࠦOgC>p >2xHN2Yl+Ne0Z4h*KȔ1rk㳊Rg&C62V`)$F>cŲ[ a.nRj/V T>$@뙵`5okȲYJD޿ sਸ਼ҵ^eن Pեaʹ2JrU4"=I9<>c߅Mn3YW;r&D{=}"- Rȵ1 (ˏ%޳(kvw8> ciR}R`iسkK?aun IyF1z)2fp|/1Yڧobٹ DNH}s:g$9«WI jfP{޳`4NT-0hf12UF\iᛶ-蔺7o,R(6J|Ƚ|e?6o|P5vW6uޒ.T%w\C1hPHAt ad a7$zJDM>J! bYA3VPyo~4 ¥DqC֮gԝ g1Ç0QL="+`~A,xm^gbl2 Z]X%"b )觚"_~s`Rzϑa*Iaڊ^g|,Ղp\LO(Lks? pfoRw\톛&! e.Zx0IIv˶urrMq8`xpoW5[rwW-6{H죧CM?H /t DaWߠ]8E;}ߪ@?QbyHOb#rf(N+`| !xgɹCL:+p )懪>w/1785 'PzL=g{Qo8'?)X?xy˸%݉yϸd,I*_l]h=6Ι5L=He3(-1 ʎA<qF HPԦ߿+TlZi/#ucv^mvꔰ ٞDӐ,ߦw p@fx2@!^=3|TC}&JCޑ6EZ F4}NC^eZhg yUT)L5zZM* y5?:]q=;goȠ},<,it-8t ʈ 4p]2$O6Rs<oȡ#yJ` R_d*'YOjbu/RzgDyJ n~.);nN3}ewU@Ҿ5^"WOP|`.MQɼ\: zLd_W-=svPw(ƛi(ʚODV aDIѥ6ϋٝY6ĨH_ ˆb1r\$zR4Ba64&E "1ֈL)5ک$6HutFhl=E16ee;H=fz'`pFUKoE=Y K_ˏῖ@9;{M!D@%rp`s%ZkH%!/J}TuНgQ@^!c2ަK8hF/ZxU<#: Z|Q8]U:⮴`A|n6aR,Ӗ:HnUz ^&k6 N`tɼ7=3T1asѥCl\1I")YxSM%E@8L@ J!aklydO=9kB2W zt7Sdb"ι>( (p+q8}jY\i mS?HLMX9>ihSotې7&N%>zoy)y!n 1# z׽ BW}VL5V郰fu1dn)f]č" S#NYpT6Ȕ&Uݛfb?cì} ݜAP_rāOoӻDsG⍌ɃQ\򯵆Rw?mCԱyy"Ͱ?@E[5^gT_Fi1so ƭA5@[+%˽;O&sz/!%Rvv{mPYX3J`OhQh4݌=ct! zj7'bZ(|Ku;]sx+lV"~\Ԋ.<-E"R҇YЄXį諂"2qr`4 ,\Vs gRlJS*ZwWu@ $=CRA󎬐'|@5p;5#Z^>T>l%6_G kz]FC(Ara M98h>+w..p8`7)TϹ}w+^`8-18Op|)vע8ޜq7ޙj|[=-Y ͆H2,w)R<J= Ҝ>pw@}КXM~n%]tkEEɩG](Bge#j(7:GS̪$PyNTiC I E/ dIDox@)Ԣ(إj=B1ߌ~zd!{WX Hڦ%fJy|QEڇ! ܾ%eyk}7 ,1DR?^TUas˜ݮfk{{$v`S,4C[}=hKbVzq]>s4,  _gy2/6R8t(I9g)6<hxMb^#zi8f3"uKY(QŃgw{}dܤE.l^{ pE7I!+? C(~Xawz{4s~Ҳ]Ù2nD C#|1u-4¥nyNZbmhG>! %̓Q^8ye)h=؎W SPoC3`JbKio=Vͭqm`F뱛kԈyL-7f~|ʊ!Uf[v%5d#=[32PHD9?]\96# ($~W !NŊtACg艂hww[xZK<8h+u'FJH_k%f֞/9ci߱ϙa٩]^C=lEf6ZVfv-(knی|cyY̕U֯wѣVax7BZoFQ,jeb;|(h_LAosk>[%sp BXR7a8Ae0\N=aC'TFČ*{؝}=1г1bJfpTo+_g9PO(eҊ6-LʚDuIXԓWU XUBG~e-] ҹp$T>[4`~j7kMq@(`8u0buy$3}ˆ=O!^MTbih3D7Io~_dтl0Ŕ)X"NF7\MaCeQQ alW`/:LI?mY\B̲V@!LEbsg0]U.zs~чY]Ir2J=<8F0F ·ÇsU+<g(ʒfsV FTY 4OgIt!7BᦽnoCZDtqɾ,9Wm~pJSŢ)$l=iAJjhl54 lue&C?4copg'&+ǾIsMe ׃Drsٙcwrb\ozd]~Vn4"L/~Л<ݠǗeO|ܖr+ܹ܍Ж^HfxL\1_ DV,|5NY~.E!O~TZ|= OcԙPJ1sii6r\{W^O @oLJDRk$\틝ăSvaܥz{,KneٲQB] J_P1ch!EaKÈ +Yn"eyJ!I ɣ?.uNPH$/pZ Ȥ!H-tI/)#YL3Hn;2P6)^0S2(2[,lK: k1CQ}\v4R ዚu3hfC 1ׄẃR@!ۧ&9п]L9( itD#*!?hs_fP׷0MA{ѼqBM8@/M U3tXȸMmhv:8z$Vi]M U/܀ ' E З"WSeWBHa-̵WJ-7vMw J 0cGsiMw*Tw%sH2!}m¶"YO ӊm4ĆPn2Ʃõ*A(mURoL`ϡ8'^_)Rz"+s"4~\F^-CfaCkH;e쐔//rY.F?tZ|J:/G٩GG'p,uu]70y:_(%7Ǡer΃0k}K&O{ Nixs`ysj3̞QBr`I^:yE:pwݡǡi%m~Vj7o!~ܚ`9x$Ҷ́=gll+Ԗ+S^\vdA 2 =?_a` -; 9q IAjҀy"sap6b%nKvnˁ nEs$p~$VVIέ֙!//9 gKYwQk3,6;)pIQs!L0i]U>rΓySs?K;}C[KlBqaSmi. ep9ܔQqP]MxiZ8h XO]-(A^ޡۇrO9 3ouH@:L'u{8hrtzj/p~|%4Tȳ|rDܴSlFC1'2k}z~͒^"so#M+[F z*exKU!Z **_/_lrRYj54q|AnL=Jm ?$*NmCZ[$qm_azV/*{34#>4jlEqƌzz1qe|7 `ɶ Ӏo83kNVIhh,8Y<kj> 4LGreViGSb2HWPN@Ԍi.qEVgT C$#Q\E@ܔʞe'KӇ?>FiiB> s#:w&>\uZװ5_()g2hQ#|v#r^W}I Wa=4(SB;3洕{muI׋v J*a?Smo%w+1@I#"oc\IgϷl!^ToeE[}h_~sϢA<]q7MWe .~*^]zcʎ$i.YN_El 5Nj帤9L \mw '8Ջnf/*>1@ӳ\)&˄|q=n6A'w*o Dy5G*SIp.=ݩ), [] ϬBk$UU?7ͣ~J`iQ0/Y8 PU V<}gY29=&6?>/ ^.8D߷kM=Ⱥx+Gd 3^gV>?KT?zf.y'[B뤺UċJ>SA6`_:)ʖ^wnG^GD R摬, 6їOٞk u Ѹ"Hš{ǁ/x7gTC8v0wA~@f|b4X,#O:Ir$dG'W9R}uj=dҲ|W\5h *⚵¸ j>QT0'GQ &mx SC,v+8O^M^ӑXUSU1D24U:A((}Wrd_̦]h1bG50$ˬ*B{%rO0.󸔜³(å)0s Ŷ'~\?&A@˸:DX`;N4 5帧ӉyE+8]3G:s9\8_<ĐW8nV.>ߢ}8_9p`ΠgS+_!Ӟvm1bm΁CVXאXR.ֈ |R[]^u+=n/PV"w[/v~%GF'aPTUWw amlU#R>A?mQݼ9V w~3pݟodn6U f! ܱѴ~wG.E.O)%['o6q*ԛ4tZ5gc~)!;G/XIqx2ΡC~ B Zv dm2^QA^.p9 ya$ڃ>Mu:\;'p%MFaEEN2,L?Y;c2XџR^$(`B{; /(z8Y>+ gWTeCGP-?or(/|!]@#/S˰c웒dܞW.o(^+)0M;qėϾzKO9΢hv|g !*X!Fl o;cz6 3]/ӈMh4rq_ă\*MQa9$lSb}klK~(,sv?căy$J|f쇧~e̫cѾbLgJZ6׃QoYC\{dg+ϒR؀/O|e](z^LI,-6zU WΒ%.1o 'ZLo%0y$0U5a.˲7e4GCחV}_n?'/KRXfwTRU pDc9R+a :م?  E4tXܭ;=YYXk~{aȴhY.6#PQ {W|@ o7/'vZD2Aj-Lcѝ=/q:})\zbؓvnJ69`UgHǷ$:k0&7M-g+戚z>$NfQI@b^f *gjem@K@ґ Tz6(zNKUϚ1O-_3U37?N(vXڭ"K_pNUTu 1H٣~~agMnRs+Gd'Yͽ[Z.3/Vcy!㫴))ֳ;tƐת,$'̘$bKxtOA^DwRs/s{5[r.WZl*w0 alĺjv^ "C%|~Լ\awR7t {u']Q˖>bʰBd*OoG)1z`s߁ ~oI} 6ؽ\;J`rZ^Vҳn90*kxog~e{B'F۷)fjxS|B_A^צ];'ggj7*oDF/Fa}fLӰbN#M|!DQ/x{mӚ5) 2)I`E!JrC;_wR4R֚9= yo1*}ͩNnT=` }L8y g+p/3aNiemӬS`mzg^yx_T5?K-̌rKF2NpWOSGZɘ]‘4Y#eѡmh SB*&91)d'So?g_.&MYU$ 'NUd-k.5xN9"#G"yw_#~xGs7ss6'eaT9EF 3گ3Gx䈏wx~r)qI1ȱ!GjEݺˑȲpg'h)`+-Z^nS[8+FG0Nh2IQceKʴ^)DȃDNaGB`n cUڻ5*@DZ2?!馩 ǎْf_ RJg8॒gKݗiA\e CLu"Y>nzKbrrUolk9oLg +K!:elG?_>2HGο^?5If_VT'6\{x9\[ aS9R  ##|k[oR p~כ+nz,ZLGźMV ,"=݊Kp]O⼽Ak]_<=eS5Nkȩv^FRLdܩq4x!4"Xɟ_ #Ɓ 9_Fu)Z`0IYD"gּ{ۥpx!ڝ9^D{kW(R }ikSq~HQ$Ȓ1vj@q4rw;m~yigh2/毩|45,_u*MGPljSV^I^;_ՊO%3' " UV&A3M$abtBgXQ TI&|&-]C}Ik57~Ba l2 G;gA;pRP~<> 12CEnbPT5 ҳ>aʧG:ߊob )QAGУYsas쏟 B6TMঊW&Њ&V/6Yh[a0*4\r%$]agK QLw7 gg?V&߮]wm`6D.뗐lPTW`PQ L!'[g,TbyWU"\Ҭy\2]i5xXKrEy*lΊHB nc۷IMfnĹevY` $aIΝxssOE^JЏ=tV%b>s@qLsg!>t}vu{3k3+mۊ]2=5C_/mFkkڄ-%.@("ƾ徒Jw))IFnNQђOB4;BCmz9]oW9̽ͣ9ȥtlSmĐ+T_ O}} WY'{}@9?G?ؿ DcRcӭR9=7\R |I  qޡ."VC`W>ӺkEQoF9,dNmǕ`hzίzfW819jAPٔy;&^MGB!x͖"v?V_*c ieGc1m`U J#^Õ3qVoΉb",܅ytRΈ\5w:twCfT%PRV_-4iLyMVvp:)`' YzO[א^x5fG bL2^ǟR}[a<<՗P&&%SP6W$rIIBDZknd(DȝHz~:h[de]t zps|++Z/e *A`oVIžH  Nъz9dYQ|x(u/WR+OՃ(fswI> GTH9š9?u_Esuxڎ9rwi@95 Ks[q&LCNnx؂RA%Swb _C `](Q=A,U9EAA9 '-YeXW]ľY•crvs 3WשwUin5 pZp*)ۤʣB# =(,UR G>D  )Ytdu~%ipCTF96 EH s/.MӍWk\[^_F~_ֲ8ky{8 V#,@ XljP$ x^Lb' -ٚh7|il]rcκ+?Zڈ;E +'>=# nb'U=/+WK _;vSF £]\q9hmql~s*a/VPz AeZ%hdp,s6h_7s+uJj=rĬBڕL#}@2՟-2-Ey8$=bO8Be˯>KZ,7<=?;.J/s\Iߨ{p-x[\Jd wT~'w@!rj c() Y8S0_ԻHOTتM wvuk'#@xg. $r2ױ54`zvwr\vjo+yNtM].Y{$ YА)93ok(0q  kX&5xTOtBKl[$y{əo A>z(U #kgI']S^8 @1K)/3~ 1>{[?c"{cӀ<粤Wyc_NULi6V$"E`nN&:<:M'snNFZas`] ]no60PϔEeO[1Y׎q_"O4B٨N`iyXIv m[@RN"N_".b4/sW ['u=/Fhqi1٧o=?:]`ݶ—(R$J7KKASKW}iĺ(p$g泽[*DỈOBFU2pTH"l( zC dk~Ck2>.y 8k \ 1 5O9g?ͮ 8lw띀7Ԁ5h}ΌF Lp&LAI|cC?"Q RA9V;L?"=pK,VY]FkBhMjxeSJD~ SO-ٚ*ֽ\.HpBEqg1~oD@~3#2VXt-jn{ؕ),%{&T\L)VXnJIOGokň ׬ȡĵ+_vUq'Ehyo9{ ʊEb~ 6ywmJț}_E%SIz1CLPd,W!/dwN2Fu-zBwJqL⭹ᄱKf p=I;rC}fsTI;弪aഷ˅\[2ThA[9 rN;Q#ş+{uB7"[wR[:sDP&(\'H' Bj@1"`^'N-Z?!f~gg0-P":i9d`'e {TܻF=;OGHLl1}vĂ>s$-hù1C }FD /Mq|A5SL|~'2 @30]O4rKosɻI8C *"῞i.4Ag]BB.'ɞNh!ބrmc6OVwx~B@}5)wX-d›vb*B|q8KbԜ[fA{M=`AOo]i|Y+s " jdhh髊 qFkF|\Z̉O9g<} }],Xƣ7Vʺ:ch7 rDZ .K'ƿPԩծ_5@e|ia_w\_nQrO'fPrPb@ `9t[#ӎ,gf͚9Xgbj򅴃Wk9Pm5h8IA=9 V1 %;zܘuWz&ى}iQpB1N'Q|?b- ð-]@}h؝&ŀo .TͱDW}c*:y83J:f 0SzO6dp2 ~(*4gSQY-zf $.(>OL?Obŏ}ҫ/{Jٛ#hDx[ 9l$&6qa\cE .mq0ԠPGΊ҄Acfץ̥*v휬k*0fhF& DN7Ns.a@OV RW%xPҋzXG,=4SZJоNd_0Ig.cVo9Q/Ϭ ]Gdp٥Lv>[ڐ٪L*BReߎ[| lK xq,J^O Jl+l hbO?Rw㊬̲GYuإ50[{&%ZL'y"k#b_35( $ıY;`%o V -@~طs؏ԫ:31`L]Ģk'vycSnT !no^BLCŠ{ ~wcȧMM?^CR{BQG vhsDN61!G+_{ftԜ} DYbboD٭YGGJMgO x)خJWe_ڮkI؝z%G|#ئDs"+j Ea8s'͟CD3 0U^;]|˴X#Gf|rh{{Eupnp·3B@1BeR}A@ۭ+OEX3zi/{ڲh{.z÷.AC^NЎz26vgB @q\8up־ƄFJĬTiD?<ԗ6|]zqqpgi ]dS^(9w۟'@e~r,*_9}d.5]E~$=gՔଂGkh,ž>K0&̩jNZ4~.f@BqJS3CFM-E6PT9pVǫuumή)p9:՘q_;l*gvM14rHM8gOCVZyO5U`=Ϟ" | 4۝4NBTi1kByICM{2/1"pV|_y78籩Ɇ LU:`ogWZKJ7"JZuh# 3BΑ9s65gi%Nle, UT_W ]W :c#{{G:3M< /i^+*u!nIEtP5h|8`&eZ'V{hĎ{gI@ׯ| Ю;rjÊ"D[vJs8r~d#bg59޹ٛ<P^E .5a# b&U|u7h7~)1zJ%kLG^жv1̾7M3XhVW9ոF'`)bB}F<-On`!ӯćӌoFQnEg[RVAIϤz ,v_A+(* ͗+~T6@P6Adj1CBͣLc[NϴzKh.H*v!xZ5s?N_t ($%$mVi3g,5V7`% E+$~oѮ'N %C`AF@p,I5*Ey}18ѐW1!}4y  $Z"&pXqi#ֺrrzz搊H3l-WL?n)A,AXfI0 w߀0n> DOG桫 ="!{F ) vdWY;i$Noi%Q*hLqxSQSV+櫱]m IC \S'mאXZTSf[tϔ.y ' qp*Y.a|یr$F堠W5u_buҤ)I`a#䆑>w;`;g?UiZ|gkoi~2)i/h#}(,hK "qxl ޷;`YgV+i:򑙕45\4}S:{ԃ{z9\CpF;6K"blz-R7Xܟ_4^Bb4pJ~򳉉wHlg?v ߕ܏+egɼ')&Gr XZ0)hFO`w>BM3E'2 h)l)gqRnk'A+@|yOCN;!KD ?O0u9(U!Ë3˟u001eRl1GKtoh~; Sn*UTZϞE\?48jpgLI_>o?YQwQ;j#\UUsoq{Z"GCVJ@ONAT~g7JE܌c9^e@֔}0Q q$Y=r, f%1DZ?+B)%16Ea&iڹ3YdZ<"Kh-bعχe ]83Hl:ž |WMϡݬD셸v'񠌏^[ysQtC Z _LG&Q^.)xbrVgsx,X_ wK/a&%IC2xRKRLwN}}[`EM$boz/PΕ"eZ^:]dV'݈d =y@א*GK}iunk#p㫂4^YT0r bKv.YunUb{ؚM -?pԇ6EGSa sFvm2bK(¹8VkACi_J`>BOG atExq\7g 710: ^S`(J-Y۴y%9)D8v^+!%X?zXvHjTί '3Xzn_ډASB* mV)8UkzW$%c[hpG_˩Z"=rйBf0^ongLzFnɎUɕ>!,5~eEws23]ƦJMY';֯?hIpww'7Q n9h \]$W:]E3$X칉5+͞N sDs ^6}(3a3_ҮW2,}9 #d!X?jwU̱kF}UTM;v>HU򘊁q I֓v!T$Jw_XC(G;)3/V, |_Akiک΃:_ksKqfrXs~ugEhqbg2D#Clrg X% Gac,F$qpUUyC\Ob<($m$w΂!X1Gz )hL P;,amg[a s \J`JVd ˄->WS,Sś+%e6V^~ّ%LKqӸbKk# N!2BM6]Ļ@ IʤnU-H¨6GC dƾrr p92dhbV bb+3l=caIS4¥wq3zKQpԅ{N*05>gNMW;Q>3(N`?N&NebiN^^b1b?\ϐ6P\筃o"'PHFBCFSP)ULynٯEǯJD2 H֡.01lYÏr6=IBovk"=<¸fqƾH*SG C cyGE@ˋ3XA #_ӧj2pڡPMZp_Gn[{f~FxUOsNpװ;lEh=Gq ݻVY/G1cND vQc-[q` NpXuCkz#'P0\1'̤e+XQw-8TO>UЩ^AEpF TZrT!&7ё2$2{8{c DB Rdݸ &Ba+ Oz P6Ё}^^vG 'Yb&- f6 [j=w>X "a 8*ߢOG1.*P/hA8îR¯yPc'R!'v 㻗Q=1 `QV?z?ޙ9`7*~͐ޜV[oAtoe i m5 5'O^"4'qd(uI _ Zq>ȃGQ,q~ 'E5BҚS73V>!N&JՄC //9,zG?g둎&Gul{!֧/y )A#^o sQ댧^9{B~Puѣl[/72+l{-i8›g}cDhS>gg[A,8D΢MFt6>r  Ά.N'Qe{hy1RЂ!%۶%09+%n= kiBr N*dC& QxK1xh43Xf$iiٛmw(^JCE6ʅ>8>| )NW$SMRs&d6ŴnskX?UEQ @lB"y={k!=Ts';+:;2M.=|IR=^G|WG"%ǺA sC\[|_&{QB\m/*Ǿ3*>ez#MNųSb=GF Ucy5!9=gE޷nv+/<p@)M4ٯd>B/gj=C@3Gϰs+CFfbnt ͉"1;lb4Cۿ2$ȁњRd"+*\/bp ^;;MHA jNQfMQa ~UqoGxeM$eǝs͒=$Z!VdC }3RcKK1dr; :gk5!agʮY4 )r\sXbJ4[~`#-prS<#}>)>>YGFP}&)%]iU'3G?HK#luD:Cp|QT yHX=6W+PT-ϼR}8II%jU)~F5cnu#d}<_FU\@j5YaTUEN;BeA5MFG7Og /#@*jC\yylƶږZ:܀ ">G mIm\ƅozSaש V]bCS|RS[EslS`l7":EQ9XQGV]IvWA[^R?=jPh~?d6Gܣi4r?P]2䣷d*v_8,4DTو/́7Rp56.Mz̭ b$sRG_Ã$ޠoW)v`-ֻDg(2:I{2v!~;˩r/ea\k#R>LS.]ԧdTY? "ml\)4Y 1MNTe,hO> P*L=r;T/VNsX:%{YP >,`ho 2c8AcCOjt-AC\]nqsvP\2j RJzΣ2# CSrj] uKmbyϨ*;䱚nqPYý7zm<^?9ceKE|HfbOȮrEvE .?Ii4yM#Ğ 5DM`COlasmUїPrk.*/6Th  YHJ@%)䠘(D>_ .W{F̺n[5mŗ {xK3GTj9V`0xT0 dl |Iv #y-g7iQSbRc3T ݵ2z˃eϡW`7QlbEb%$ϐWs[{b*W:Tr<.faT|U|\R;! (]ٹK ѷQp$8 ׀;Q̖u3̝љ}el 2'jU! mNI|WM<屪KQFg:ܩȵ2RRՔ9HXJkLt|rW*"Q= } r˗uenv:LM֭@,Q'bw 3B6ݵy#x΁*O8-cfjn#/rڭjofT}-9vӵ0bj!d7zhNi)C|٭e mVk̶ 19AgTF}"v%,f.!1:kPKzgs!G\T Wg-u-U[XfPZQGTGYx8[c5Z?s]FcŃ?K郎}8Kэr~WAEV(FI҇C.l$RpF@hK6 eM"F-YІ"owx)Z HlW [K}˃aa~-7c0u>"#BrZ `G5_goT|*aYjK4Q <71 v/.co+%n_9jn{k8zx+Hs։ +`ML$V(_XOJ6:=UK}{c$+Drz}&݀*LiB3wAtCd϶Eb!z2B=~Cue~4 S2 % Ǫ}(qJb=QC<؎gٔ\>mՎPrlDf*#>"rN~>E|i_J +>'De_ЇJpYtb2ƆnUj KAo& &;(Vh]P"!<1~nI;'Un{nl(N̥QT"ރ7^ŏEm8Ʌ9U᪙SG2F="ZUF^3~pC_r(܈P%izVEJ"n(aݐ# u9`չ=L_QNFұp+ qqզ;PNy|ȓ)3ܥUR(8P:!;wFty/=f/S~GYtGʰ0xNtiG[)Z3Dd"7kӝ:90,&rDoNTlT?EگMn30⸲оAy}^B)_7ʽ<DZfYi/r<3~;,>"GMoW_ cFdpfFDv2+Jp +AA"%/, BYT1^ׅ}w2R/$FЅ̩{]\Jv.8(Ѐ\32mwPxqd1w'!N>c}|ҍ;ћ9~@^Ґk={ȳBfb)ibm}8ac tĸu? QFK5`fH̗D#?ۨvl\&]XY1:&]n~wf~Jw?|l+0Ȃ˩H+/y9S ymF.RQ M,?}Dw~|Ƴ7' JkNj{TPy/W8gPdRu.?<1@7ƺ[8`⠨N)b("?1i[yʯ>pѹ/LzKv%Qi lj4up [ ^?a-oC+Pl7l{HQE ,9kvFɗW0n tWDWj宀|S2ғEXxqy rFvMLA,lMryz _١֏(EP؏к6ڙ Ai8@yyf=c09j]a#8-z2iÊ|IvB{ RXr6fsfUy(MѶ~ zza[CrM%9aF?f뱡 /k[6Nq6΋Qi80kUL‡D2=~ڮ-'cͶ<e#M\8Nw(E`MDeG)V:N aQO|#A?2>N-YY{̅b5ojl4,2ꓴ-aa=<,{>H"ER2uAyx,S9?e -}9N=}4+# c#n\}k[*]Nڌ>vS2:[_eeC0Y`~ﮫRƝÄ@+@=  zP\ȊJٜIa"P>Vb׆yWs Yu*'Pd"63xB9cNɟ  䳪.Oa+̍w;KK]p+>S!dfEIPPdhP;:n$Q= s{ fb ,nD`x{̾{cK񬐡aKٮ\5z?KwvuE<#;S.\g* !-t/&2O bXi3>V=d%U]^K#c+xLag\xGbD#f.=.P([9;xkAo{lv+q imFcd5]ED2 Ъz($0ruL;ihD[H7)O~.rݳMT϶DN(C?{'a-fPG}1黴qxKg(\{\RbDn'vڪ]{(64豆3ͥк]#}ۇPnJ%2tj+mm"ޜְ6 d{KQC$jF|`0zI>cP)/7tqEC0. "u0G#(is.%u3a;` ;$=_>YwUF"%yYU,(tnSF֒Ϛjl6=.iCEr/[3S=XZ#Vfz(fẔ-4wKxq{[G[(yX,1ο4&RuEZss9˷?!ۋ>Jlr'G 1͜p0@ aYotioWk!߀/ҵR ~HVؙ⊰ uLH/Jo`W29FW8dң`^6x@#HzWQ!m~tMRe],zitby\ڀ\M^éGV V5l SGկ`ׂupb'$lOB-= PJLMhs|g؋RWeZGۛ(R}esw &A}P*3y\ȬWZg*b} | u7(Rfp7Bg@c]Y3U9K@h@A-2"Wk.]y>~g?C]3 1fEP'vaCe6Dg0n *h7ˡ\s#fBυtSzGx1Ά'ѯ% ' xҏ 4mouvc֌>3 h VNr3--,7RB7!+:xWte~stJjZwx'JyCs?WsE,>J\A 8hYqu0ۑ1][W,NCU kI#\ t~r$1'Jm=[3/M/UD6 _u!ٕH??|JSs7l%|626hX mLv+Wķ9VedJ${)ı^QD~̣xZ|Ŕ{ ײZM=Vr_JOc>YJiͲ+֎]S-DZ\&..{ߝ˳ۧ$F%'; <jrMEqdRa. c(epzs!f9NlGۅ C8jnm6rԯheD" wF$Qnbj֮()t[&+O <1cgXXB K)v+p- dL#0W-ެcbz|ˈ42G㗪КV $dOd}'{aB:Ajq8,"˛P/nT1 *&liǔ] TKYBϗ ʏXӐPKZVLO  za-1o !.em-SŒdnxqzdsA&{02PyNL׼ێ_ԔP `Y&-{na-+DK]x%d /$A=M]=uNBN#i pF GhS_U/K PfWEX$F+m=D`I89ۍj>pVr:).DB?>zهFSr@˘U)݉+f`dkG b&!ɔp]E؉‰I l"{%ƻ|} (s?H2gWʎ|}^E&/3ne)8=1V^cMdv^bv9%P2->:yMj}s|X:R ߵHeOkK4L ,) #B ڼ`n; e+zCbGXͣ`rlLbvHo2Dh;Wr7\@Ep4k39TwH0Dp<S4M:56Upu7Ğ|]JÄe? _;ɳzQ<>y{> $<˩S?Sdh?wR'n=Qu-hP=+׀mYz%DFu a{ SX}QSS-`&1~¯՗OPhp]8K=s". la_NB3/oC,o*IK9eeXսs-Er%3 Jsc?rD}z~oj?U_hZ د|6_/7A%iկ*4F>n3j脼pZ1wI>4\ 2^^Io. :p ׁsh#z'^Rlb'DQ23!+NATO?+֔ԑ+e+dZXx zOoѕ*a",2#B)C3q/o=Z{NwֻqnQQ>G?8K)9+p9ItǛrZ\vR/a:Dȁȍpz\ފ+g8<UI>5a_sx@9W?/eݬzxjۧk>Q60,$O7)HSX5ގކ BKQz O ͮ #cEW58pN}h|K`w+e MEI/Kӑcp `s╺#[ ק*Tt0xrrYy"䍯3/"VqE &$ ֚Ň8k6d&*:XH3S^`N:+g?C7)d8fe?ScZ)u+iS@g7އbG!H &"N.#ZuR( $7O+tR$)oh| tYW^3Ƕ/E,K=Yfp.j#2_V@FOݭoK ;ō^Bkc㾾3 `"oD.苀{>NNg:qW%ݝ]PM>WLH[BTqWP| w,.>ӞQ_Z6K H3? /1j%ԡf_@gU ,,trn q]]9dc-x%N`++vHA4]C]Vx%\L̙y {ܚڨd^0ـi',H<;)i~=OŪ4&G>>FD5F*N$67N5QL!-zl0֊4z vJ:m=ҁl^ /yN;29؝N^_/9b0l-ddޥ昐 gg,y|HFhGE]1η?qfyM9ET$]hp^ŁP?Doa7.͹@t)6.͠+®3s8C] RčGr,:TW]炖[Y7jI5WuiDR)% #c$8*}29^v[b!T|8AsO҈D`5:q 6ED߰p_P[z5ܚIB.ڧLDV8BO>&!* T;Ne3<$Ђi B@Ъ úvc$E?>ԣ:+̌x\aWȗ((@XzyJ5懀{ ogẵ/AvRѭg'baIWΞ%5OK.(b}B4D$[~ea=zꁣ9A'Nm`;]o=̻~8G:1u7aG q>&%Q׶/|OA#]MGb@QYE+u)='B!lڟ[LAeR $U)ۈKLje>B"qOEKF;VTQ'i[˲GҗcxWkA^.ř[eI8I k/ s8qb;=GFgęSICv"%-? Ҷ %2hhۿk߂N*¤[]E69(>W%ʿBp rhi|(ĉN!+ X~rlg֞fYc 6>ph,ۊ C ݢ &z/سc;A`P|,|[.QvRWEds"o/古a xUP(}LBz`?X`׳G**ޔjd[gueZJ 9$v+G'A)ܙ>&K JSlT"X*ڳE]hs*<4 ซo~JzRot.CV3P6la˧Y׫hs!tRL'S m=m]ԥ T*H-q[rO.8.i"Sm֥@SkXZ>Qd$v~G_c7F#Oa'4Q>`FWP{74h~OX%M꼠:XWe~=_8fk8Y.x#΁ YT_ƻ^aP& lh|W +EDd-եd{q$MatӀ3 ͮ^/ቼ/ە?nё?ZbirH6aq-_3p8h ʛ,{] \bҔS'E۞^c7`,DP']>Lr+&"CsI\3hMaXpB.mqs306NАJ\@Oݫ2V&i>^}>Mj@?-P{(BC65}}#f_ϭaQF bEۉwKޠz>Rv/rXpaZPrtS: v̞;BR¡V婏3R^W\]O7.tpV0^qtOoe.b](YG.1fڙlnO|R 8h825!GC< {2V4x9kFv[ʞ,c%^%C8f#`p!AiL(X b rhQًa, Ui?pF X\Ɗ|zoMԜ*E#r[+1yjZ"=|X@JCq( D apɭ1^d wfFuEau@y+8Kxb=cLKQB[PZ*YՇvÝcrV`}:wD j6u╱ hX@w;#zDÒsakiW͠MzV{z iM%FcBga_Lqmv!۱5WsX>Ps^5ϖfuנ"9{Ñk }t"]rC4~sPPiOfz&!qNCL.K; d}xR7r0'^żyMr?@"aim۳ <4 Urs2>o zP÷&n;MLB"Y9mW9s6IN_.ֳWooyw725ӮFWkǁvOW} Nc E%]EGlД /{n:V'wa]$U!G& 5hlLAD揔3ޱ걅PxɎ~Hvp;{s#'[VR9ֱ*eÂ|c2M3Z 0[= LA)Z^8Ph w:xdǃOdnvy y@ l,)tԯe !XrF.V /Owmq>•rwlbMJ2*x GP y%GbĤ>sZ~x(H!S<īr p̫ ||8"#1C|$lCط ,dOjVs. gUnVAqʾߤ&-"͏Ԁe%y zO| 9* Z pnZpp:&#Vj0퀜U0@8NQK#[fi8d^ȃ0\FXxYXojlVr>qdCH8dגɞ⨪ ߜwP,O!~iɴ^x,FCn =sBri_ a't \cB8|YZI CLd#C d+BbXq׌^Qz(ϫ\˙n]Y/L/;(a,P*^,W^B>DA/aSV޺ }i+vyof쮀(F幐31nJq";.׀wtkU՗&5ѮZ=\]<-cImDIk_؝r@Ё=?։=d<גř?2(Ejqa*'19T c!nY&rx j;>H$ /F7\bB:1|Z\Sl++twÆ|Vhxò $9(v쨨I&deګdh +6N؛Zq$-!g/a"Eqk4ǼYS5$G% kX>ŌyJ).|doYt sh`z|pwn7"ҷj>I HzN|dbg?FANߡ湅|xך@ZV5cH[FKm˂{\ n&[#:6/r F#'in{ QcLGO{ IoW'\%$_XO鉭T `BfAtw穨mh*L`UΪ̔IJc:'|S6ġwoy o B/}U#~e>wpcn5romJ.Wާ-omc$@q4hERew3^ރ1wBIчXsh .6 T -[ w | ug˚P=q(䪱yC5KY@c`9קy56'cJ ErWi8WUz~#J3Hp*z3 YlSt;K,U|Fx@E˟cʼK_mT/q" ,~Zr6Pn{s+EΘ_l)JnVB3Q<}XB #Rѫo0>|ئOâzA 3mJ%&SV-kT5fM$ 3WXPK%XߠhB-":ӧLJb~LMSrB>*1#NJ<@3f#]@l?ޤ\@\7t5v6҅/ 08diGh̘_ox&ө/+td5GڣSy^-rbhnk t:hO˞oE? WbɞYCKTqJrf鶻@BY{ ۤGa>]fhj$h2;P/ڣ| q_ H{*[VJ(01Qul-FS.؟FVP{TYr= Y]0`.ֳu:oV'HS`vO>>̊%cxA-r־5婮= Mq\yPx|B`0rX{d^}DӇeʒ{GW1^{?Հ[%lm' ږ3i GasÒ׭Ez{R0v}̟HzjikldqΌ{[Rw9ckFi$Hҝ-r.=GNhoݖp~D#N0wђRGVab|t_[C"[>(pԏaҴOީ:c_*y1a_XyK~*E.u*tC2zr,.IHV?P{~42j?.y<׬QDRƔѴ&7]8Uf DX1fAО\wCϘm#u F)GFDqҁTvqfFo[G[S"KgÌ8Tn)}xSBi3 fi!dX!iQ ~ϼE{?i9mmi㐔^]øc2(5r|)܊e_)4%+zR>QLⷋ*b胞Ń5֌abgIH%n@/%GYmԴJ?jRЙ_r ai>\41߿&yWA+`$f = х3 +hwQ+K1mi mJ[i"D._0=}ppcK'.}!mLgn8HQ6 WS.Lf}׸:}ϊP!Db8Y䘂H5T%M'`47xZ?vr{ Τ«e<چ;&?׬ǥD(l\BE$_ĬĞH^G>}MECfDA@H0•'\=>4;#R/nNrWz>-vNwtQP@L~e.**"ֶBk.(,.nZ>ю:{`B(aﬠ]We:n <$ǫXYy+6#~<t}>Z-Z `" k§m1`[SUˎ&D5Lzn8b" KL῰hAŷʫ 4eYZ{k6%7D;mGj/Z[CEz[::/Z9Xe4%n.#硆q]OfxYBDP?<Oex.m4NZt ?HB(UX%W2E!s=oF[ JwҤͥ]dK19鲣_F|\cB',l8G (=tܕ"H3MX^lH*q0 ^vh(un9s Gw ckb;Ruos]M4kl׭m8mh7jf:/=#"K(#"HA@Giʛ[9뤦rTͪ}fgo8 qh@E0Qybi5/g-8VenCO)KkND1 7x ;z}PQ!5Wc75rWF+Ξ)].4Ur4L]ʇ>vR#Ծ NVJW6+H s7vܯP syy2Gb*YZb-4"ChI}(69%ى=>~sY-~V~9k)IlwY>ѕLkz+Շϳ2Մv7%IM{&g(0IO铚?z7UGMx˲XýK "ήF,xX[;V2_'Dw"#_o J;WBzjχhZH ދsBZւ{*8^&lMI|^u=3uHʝLx;T0zꤨRCy5O| f*#s\fv@*=;*v!(e1%!"(ʃƺ|#j"uhK)hih6FAD͓D]xnR`mg 1콽~D /3!H73Xڪ]@xAe2^dSZՓy>rOp:L}_"a#59%_8eAșO%MZq=~/7ַM2 FT#^+ |h3=RDaivC^G;/k8&xvo94z}4f٧.zF;~!yr0@ } 972f!M"W yq;]yUKeXaAK`?`C~ WAZG#Uػx~K|~Fߎ~}{%Qb#=tdAr N P퍩vٮ.WJTsX2M[!ĦY>E CfM~![#({VM! Ӫ*G9armK`6M KPuIQ0O=e}on9ktpIdOvU-b&G% H/5t,쟹ܓd[uÚ6rBN"(@$RÞeqښP[sp:z!80L{gYx+ ??mCNӑwZka%G ]s/ѴpvB|8^O ]q>f.`ʻW>RU*KzV&F^"[ۗ[ |!+*~0#kܡt7d'%yK` r !q!֡z3^jɤlD(y@ә2;CIj VMFKN>f!Z[AsG閕޴,H3[n95;N*MX̃-lůH.;ݫ`{JCfrWa[xI3 vrMqښ|P`!AkϭW#j+P, P0`cF9&v{,zwjrѠjI=J5|\ﭝ8pQ1]Uv3qosfX!L:YEfYޯ|"eDݨUaHJlLÎ1 zQfp$_vQWUi:LJ*|8L8[!C>okE"@\ U`ImϨX9<9ij~+>ؑI'NӍ:QH`-DTBL"~"omQ=4mY;yժ.uR 3K KBhM6sC]N?)H\5Yɱ㸤zڿ`G8W?TUPIZr>Δ՚T0 bR@D8y3b:Q[w-9X-v]=$j8 IMʫesvs FDJdXgBPGn=)b/zQGz(XX[na=\SRbm<.'g1hWKfFH/g5IN3$蕥zwLg$ST'5IJ /eoz֏ه@K0f |U ?)z]8KjhB$ώ>?FՈj2;!ū=Mnh+*ޤL<{MC\cjw+dԸ֓#xZ#WT>,ӎ^jʊ\ۼp#}+#Kh`g)4a6)9Uor_hOȡ$I"C5dWPXf #?a;:&mgrٯ7r+bSw̱Ruemqqea'a #:bAˉ 6XpPv`Ԑ1= a3> g{:^xMʌ¼1 DL <27g"LmAvR~Bb{׬w ;tNDO$`knI="#A+r,-`'~=!l[6C ; S)b2B +O.~S/K$Q!eޥlE2+%f'٘mnhISXMl2ӱwYǜ4O*,9#6f^2wc+ lah͈ʐ>>>ʡlR5p(eY'4n)PcKṡMrrЗ1y{G!iz b;ɯL2dZLz*јj+a 'vD1<@e*r0pCyl*H- p D4\C+oSJxHRlkUtIᲜ<"/ 5 ng%zח^|,HPdeOu\(9;'휻^՟`l\ k6VCl7HA\#ܿv u0EL]p0v|+ ~i%u.q| j{jz[FG=B+Sr"JKī)>>:2O n_(`?cAwzvR93˅avG]WF'BGaw/{3y敁/{,숱 Yh/NUD<ǎK;*ERJnɒi樊ň<,E8WI'5ii]J:0'I7]ght#\_ͭ5\o|;_ՙ'cj3Y+'sj!*Zd*:IU30e'ܧs߅. e)yH}_ngjjJc&x7U*:'&3ϭ(%‚^Rxm!ΌcN3F,dQlo,zzB`3 .BGzPŠ[ykM0EI|Co =_XP7Y9 zw:;%^UQAJŘI2d-Yh\O ڐQ^`zeW0~45 qಣʂn-sFV$U9ߌs?wPwJs~i ^j9;?gx/# ZNkҞ{ĵض& v$QK oͭ0?$[}xCpڝ?+OШ4RR`iNr , M8cͮV;wʯf`؟(+-/-V(ti>5>DCRǩ`>u:W}*cQҼ3L{fkfcnQda+4ޒ/DH7c_-AGuYgQi:K zVYW/^̡ɺ[꤉~*9ìBÌS_6~n#Z_33k~A>E8i$Egx,.kGH;8X4^43" vA\_CE<K|AVxJvf&nHqq_ ,걃jj$qԄChoÃ$h?v-[ObH&l[Q}ӒZ1ذ(qtK.G]?ԳHDִC8VL %qS60t4!_KOlti7c> VYg–ͫZ]֬W%r(0>V%f;57 `Rjz>y_NQ``pG  >\D:vv<.]z %),V21-0vi{#}¹e&!J.ڙ>O]pOHzVϟD@AE緓,{ MCph$9i;v!{2UL-kq]F?K*'y,>#!R!ǫ;5ick"af%Y\KЪB'WǤ+"!aAU,>ztNyVSӯYr Ŝc nHAa Tx^ V”Rx3œA$W{MNvGyb,JTVc1?9]?m#bW:;/ 1.$ۥe cwMu ZEl?Uk8^ns*?YppF"Tz {"bHfA!G|q*4r_br? -ZεưNǚ2,Zfіņm@v21:5ʤIt%E[)\h7Z `7a!uG58'#AW76/%ך51308-|gpdv3j=._EZ̨#͠O0-4#'=3 S85ڗch5>@RPrHf[nUbKwsE2}YؐI a3?*'R4TKW_\jGjhSxzcCcC6=+B=&l9+md s%XNP*dJCI)Fy#Ӊ}ת5INkqv1b1he&"%q Av|rM巇f?*IR%l}Gl+xZCcjֿ: (C#{xˆTE@N^{)בn aHXiǑ~06|lŊx37ܟ7Z_h9Kr9(ۃ٩oiwɹk=P}%=u)HYw^Ecypcd$A^>E9tyze'$ߧSdރ8$"sLEfyO5>SXK뗐ޙogF=М̇sǺ.\p{!*{,|/KmO>ا+-~#ZqRo('%D[aoxϡgԕ{h=6̭ϹOHZ_kώxE"v>-]Q}SCֲ k!k{38剜u2xgtRխh*l!BMGW9O"k#\n-Óxl⫹ gOA>\f< :57Y%iQt(p@YyQ`T%ڷ9SyMفC//6x72漊VYQa<$f2q|!A&ÓJd oQUK7`N r1`; .LI+>^MYB(W|«|#TMzwudNk=t|1pNw։;AC4BE=2&Nʪg = |w3L nQy FRX $ϽѿK@g;k:ooQP_f4{WrF1!&, hBO3Fa7ҔuƎ1vY-2C Υ3O:Iq>30Zs'lrԙk9w[zI"2^M(r: <ۧ [9k}g{둍|CzI|Otɋ^7wK{(!3Y)^q<=dkmLQV6dzJ O=6$|I2U\O<aګ|ȨOdyU(AC{&\4r׉pI.JIdExHr*:]E$pB/rz->3?([?,ODFac&G.=}4_OS{Zv@OBǢ &4/]׬(.h.k Kpu:z%?NHό4cd/>g@9NsW?⬡-Y4~zk%e>-[y%ǦzI-k9{_qY[yr$l" -_#~c(j%ձ̼hɸ7.ގl 0́;;02d%XgP?EB9.r|F Լ/]#[(|fTa!IkTVbDWs"o:N:;+ŘGM`Q؛.9~KJݦ5>'VHuo# \.%|RΈ$26+pw跷jeA__ѷL6|J/Z+.m~;KLצymr <+x7&-d8׹'zq9K %ܖNŃOT;ҡq?&Krn{>LvNߟ2 '!}1Of64B m)GpIE >4.Bј9: .ɭ7/i`LN Nσ]&ee,$ 卮~ǹMo)tb9;>v`ތAW3 7w?r^ePZQ#ЖD6pG}X^~o6ؿ~K㰾#1Խ2s'ۭ@6.G <ýFæ^%ߙNjȯ xW{N^CGJĎȜwbUO8ۚnVي홊j/ޒ=0vԙn&\NZE6:?F}=ZaZe73yQE-ֿT:\/c7J+rL""ʲGyƗBI^"èϳ=?E:JtRlEƝ~T(70fWh&Aj21;7=`N@OaLf(7.c @b;/Sb;?n)-6TՋw랢;$Njnq|Ueq9 6Pҫb: %jS@~ֆ+4zM85]^_ i3y"TWEj3РV}I )-M~?9d=f pX+Jg{;T#gЦw)).v@QVsZmg|ě'jr+~n{I#Q.o懰;ӳݸY=LSPcrfu3"6;iJȋ UbDn`#vÈ =' >]$&:)0sJ\ئD}e &hdzP4.7;(?Z.|Iذ ( "D '~bwpu >܋ ٕ%xHY? M5GУm)f z r%0w|܍F|l/ 2}ziؔc YLa+ %:)-b[A{끹|} _uOqscSzY'W˜hmbroqߪ9v{щNvd\ꪦݾ0 _9 ͵p}iF[w[lA^y&fl2gˆz9X\Lze#_)ǍG9d>ʧRu|,g&؃= h3PHv%K1fn2R`?&^HG)B^p(S2kD¾q$Pö'ƈD$Ye笏ARk6/S#'f̭zj;# ZMO9])mgQ z ; HGJhT |JIoA3D,DL>%1`w=ߓY,d,h[?\dCܙ@dL^E"7oŷ\5iI-:'U#ŷKu-xf eZY\pINa"H~)|IHsFP%.%m\-x h"qfzF[QdxϑhtMpKq/J@脮 iv+K%"O^ A^,_DQg `gS:G-EY׼i0B<'+NlېKn5ҙGXFVSU a -_A[`>qRluISV/Z^v#W:;9wEy69꒨l14p^){\k9oΙ.ޚ#N{e-P B15gA0 J!1ؿoz%VOmͰF*aw8Hːn>9j]Ocݻשz$t+pLΤWW, ob;5fY4=tտ=32^=1Õ6pS㒘zvx֛uttv4c0'}i.9tkL8>6JS(oU^/KlaO3,uhlRZ~GY YZyۗBw\BȡG q?l~gy.̖,?"` ۧ7BkyVԃf/# I;aW=qI9ۙ_پ:Zέ09A2BMtv줈 -Y): qG>uIN=l쨨Dӗ دsxiEu=xh4Oo{EKf!˄]@;oޛlgς=@ *A܀5:xf6"k|/ ISj>7cJ< RCz++!+ο`OW㲅HVo+uzB휶"BQ5F1wA2B2 '塸@B ;?>Lg}lWV;bR>2a%h<2+Jb}֫8<?h_H mAq}چ ufr:{/PoD+w>@K]謢^΄k/& -\)&2Pݦjcw!\uh֬/n?>8/c*q @,z;>y>X3[O/`0ygUwXr#Rɲy!k'ώ6ր6q;=*E[ g=qߴYMbwVځxǧe8̻d EFeNGtJ0YTvy[F~>ŝpo5KG 4>5Gy;+sR 1p-'H+̝v`Yؗb*|R| xؾ' JQOQA1硳Rt9+ږH9VO>+Jsz < >;N]܌(3Ql9>MPLoaRkd Ճ]I' RIAj" B^2jfDu w*ҋرv)E t0 |]=Wy^iZDxoڜ!R|xN?K|Uo57 s+c3Y&뵵bbN%q:)UDw<~bύ@ EB2:zp0SϨ cBib {m0ˍ=CGXਕ@+|Ã8VD߾liDj8$ԢTa;{B:J]sܔ pC`cQ\ dawF9uO&pۍ|MǕ y?7Zi2p/҇b*I?ɵh=#CGT&y^fFE:S*0eE:8jOڇF併Ǔs\yXPEXx#3%KrYI3Y*Ӆ)s]@?BY5+oʧrUQ_  {HAW_ztR) q :MFaD]o;"'*Szm ,fN :/]p'Í━ZNCwz" ~=88Q%#ǣ*TWT(+GeR73X:i1)Fl+XzwϩwQpR_<%1.%RCMj- sl;O~BK b|rVjnVXtӖE۾("A㠻̚1?75*P%]+Ǽ8`_pz4g,ݭeR }bDRiwEd6b'R72UQfbJK+o~n"W*LSVX5.jْ̿C\0ijمTmu]f5fs2 lqWJWq7:+.V릁$+䁞)20b鹆d 9:#[I1dA楾 PG{ŏUKc gNǚVWah>kԹEK+ nT%DQ˝ts7xg\=z 0Ñ ǵJq'C5}va#/n^5ʩ=d*o%ib WhI,4XOe@ZqatRpn/grO_YoE)RCڱ*#]z wEpw:Kg m;si!E](EYI8H6P} 2QQO/mh%ʞ%Ǒ܎vysڌ|( )Rޙ+~abu>c!5N-5c=E {v{~c+(F<7DQVBT9K.DjBg4 GXmFmCDLlFQia$C8j>r!S/`G:rcF";oZ{V $`r]Wj4S\!?qk3bTp8ķAaG>Wr[NzE<ksR;'W kl⦂}K%衜;؀[Y^kQOTЮp:l`"Bk Ta#˩Xx䑞RK{wǫGh&H<ߤI?{pڴ\V ~ 5DaԦ:+uh>tfCJ6i W01Y yWnNP pΛM?175,#ڂIno#"E90bpIYr2Vv2*$tD ?#Wvc=N+%{qhN! *R9X L&8<ʗyތBX5V}%?pgLIaUhI[?8DNP.01IAI||S_e'е`GVxw)ֱE=>w(1:"stή~E>JE:CdҐon TG"eXh¯bt}S !ژTt/;7 _0N?>|Ы*8+6m̊Zga-hba^[Ű =b O# T.[dB&_{xvzVz@NaVS Cc Β/WK,-84w4yU/ %onɣ43K'ISjQh.0E:1W[s]!SrлOQ߃FcH{N7Pz? 'CE;6S d8d2Y0omĉr;U31GpTPKƛ{9h@/kƷͤ~3(|3< o/K0Ѓx&侩a!m x6xI;LP)h$NenK@c5\^D@ c)vXi27bf)mBLdiJϯԂ2-oe {WAUVdNYL8SsԂbǣZ3FHٝb{]a: TLm+8%>([1ƗF_lؕ?k%SXrTHɍ?&K2b>L#XBׇN/_<, މS]1Z2)"pknvA"@dGZ7bst-baxt:))oɟ*Wn 6ˋw=CopkxL:K^7hLF; d.$o٘DMHz~-lXpCӿ9gvȑf}EJ;5xwTO81+Ϊr\W`A !":2mM W{?!%27P?G^ G.f̂ۺC>Df5` p38F9-E4Kt!y=׽ujw)9iE0Ncc],pm} Y`JlG}S`{sCo訮;܅D{{ei~ rE˯|E}d% Δ;6r&B&‰H1:eG]`x-R7 #Ŗ`IE*RPx/ꓝ ۴l)YUBpr7 )HKQo,ֈT)LE.=%[P$;+IqxgiAO^ !uV|8n)/QC=S(nԃp#`$8P'J*7\84T]#F }!L<N Qz㠶ae%'OcF-;<3 ǀ &鱡4թꌩʟࠊh@.⎙Yt\Va@r$}Nh>g[dV9]м% KLzhO{!4зB-^? ji K\K |)W)bCֺpX=rB6FE=f +/84Y_:h}sݢ#ETZhstchYL3z$5vP=Md7`\Q{GŐQGUcȖFOefO I!CQ~9;0Fp`q;PخurћɈ '|ہhS72cpdh |/ ]s * @jd=[U+D%۠g@N f6DrL٫Zm$ h7>-Sĥ(+iO<2%`|ӂ "Q}9~McwVx602爊 ].0E?'Թ}Rd=T˕ɭw ifIėbwD-e;a? FR0Z#-bMS@B u]][eaY=z g!@3:5ZTe`URMF[7>4St&19.Oo/G H*SjLDDNX75N"t=zAH,Vs8Zw`g0;J # KѳoTszОO8|XtxB؄v{Dbtup?YhR#?dy,]xq?%hY]Fh(mn$j27o˘QpN>@3W9%|Cs~E{&hV5Olr= `FHAUWnh: -pWCJ^gbw ͓5(Q;[i: 8{ZGpPC,U]!/m3P}/6=W-O'qy8I2&ILw|Ẑ Yv=-q~VH ^"u><ӧyΌv_[ l#>! 4طШl%67ǻYx{44D~ap 'Ƭ5d˗S4ύ\pla6a( MM nf{e{Ҍ} t-x qvZ)Ox僸 CۜF%tI]೾4D,C9>6lҵ⪚O5;[/NKc G%'f ] 6d6˴!@jnɏDLA$}]ߍ"x ! :,4Ԯup/FJ~%[>UHZ'X0yA=Xw=&!:#rB@S슙XOEv4\7_3%M!I6]~Zviݱ-L}x|~1`R8Q#dHrJ[\ (Mu43FEJjT}խ{XsyyЛC :/-dX,byܩLlAɸ-/]wBJNA9ZJ){QY WxY4O+-=P!4o/lPX1F2#vVgpOzyy?r{z|,9P x%i 7!|U e`,(sGXxax5!_EO'B+hߡCټnRoH> }hQN4L~b"KQu{WDb'g@xp,R32Y!cժkt]Sn]lh#: }T+~z6ʲ<0.a:v$XQs:zP7OHMѐe냝O#Q c:OcR;P@"sqp#*w@4^nI|}c%LUѸΚ ;Fc@“H1> '}] $oG⊬0q N=uV-j/GK\ {bsM,ހq3G9 aZn <%<).hyo/n{p(k(av/A0 `Ť@D܋Ba1̧yd޽^I˾_6 g?ox9,u&*_MoZsѻԱOUEl2of3؇78dZ!iwWm" wl J-Ui%'UölVrJ[!Ū~Dn:2]ǸюQ?V 8sF@,Zq+CT6+oMN~e_q'g{;N~wR6[ |mTXLu8vFxbmM'G=o1D=6 Q~9e;~%z-s$Qaa{5:͌QRQ\[¥GˏrVM ا[O)AoA;;Y6@vQ+M ՛G*4G5Q}|Mec}fɋ%λu % `d-0'˅L#ϧeڍh_/W0J"}0Z(AA"YU aLn6?smK'J4^~(q3zx7ݛƝ6<̎L^ݧfABukItԭ|-!)?Hi.q7>xֽy"`9uB`9iv|ά#_Gmd=us_hz4^[՛Vܺ_i9'~޳3Yj&#<׻>{J Yu W_˴,ڔ?"v^[你$>C&GC@өjt)$YG';)w3Liz94ɏDQxOrWtNLOQ!d#OZ26Y%{+ֻr^V\Dxcբӊ@<'1)k9MK*̲B */tRMeIMn o1MK5roR# ҂ԤqN7s &iVT j7ڍ)=G|I扴v&CV\ܩ/rz!w`{ޱcP~7C83e+i8LɋߜO#`8h>YL2h:_t(KMt$o ^t![TlH(6)m?Miܘm!%6.+DwF{֪23L$z1SW@d{%V|WUY𫂺YZ {R 8IәݝHyE $nZIC ),⚂"XTK }ogFyӄ2bVW4> I'k$06J?hr`_wɨ4%S̀(?5A8zN7c1[h1Ó\yq1CkEC Bkzp;>T4s׷ydiϨ~f|fO{6P 7~yuͬKBQsG?H- ֲ^`";s52z7Wz`tEh6ח9M~-4RŻN{}%DKı$6% AAfA\:@zćʆ^Bv, ΀ "[fz2({i6ܳ*Pu}_6=^Y|#-I+"N "~DYfg|QxVz2wj5LZɢ+Tjpa4n9IIT$[<-@U}NRe8{eBgJ|ຆq_B)bUq9}qj!7άj?ՉGM+\/`'=w4l|Eߠ ,ܣv3%ؼ#),2AoFeFR]og|~PS?I!8< :KӬdK[Lb53F;jD@u:4 m2GѦ!Up8B2QGv[̒%6Nv%Bz ƞPt\ ԑN:"(ҝztt 0k[ K*}NE$TFpLbu,\'ckw6a{R*|.6wv и G$[$l{>ó21e!M0 y2SSvnEaM@V]xҼX(X>:_)ג#OޡomY.MI*Ye!}JØ! ~X> CбH7^1lˏ^lEjENsCT(5)䁂36|!(?噍coV/-lLhV]iX@( ߾}N{@؎`(|؍ٔ_E@ɺj m(KbHz@`S/bOCA@7 ȑB2UM >Wu:zʀ3_ُ | p8yZ_ȳSb,Aۊ$؊m v1vù y? W4p grHnd]es)ӆegGCԃMjSK<صHw!<Dj'NK!MeK#YPQ:šFty?:>ャ9Wf JY磢8,mUmNfhT"qc?òNUݹ'Hb͘ң"2-Doي2澉V&@a alT45߼C$ˍbQK'I:LW8)S{u7:K)@-[/t93Zrje! RN,Dkۚ9y^6Sc>4Ugs4= i)@}-fa|u^mC,g_0h8UiFA!oy@u;-֙c->;ͳ?Dz#<)2uoFz,jǞaΆBlʚcv=_y;;]ZBG`.+ ]NX2M<Qu>Ұv!,mJ|)%MĝWbvri8ޯp$^q2%n\j!/hLC8.&p{oo!YzcYřC iRZ5,0w]LL~) h;lFu5d=~AWADR%3X]*Lb$'D'3:;OoPUaRELE ^|X i[e@^Z?w>Kw &{;6e=2ɟm k*Eq|u=@p{uk*Z&@)![= [_\7>tN;2Kb)q*~̾&_q][L:Ix8->&Q63#Q=w?ظ Y4`O›f̹/ Ar|oabWfD#*ߪtN"˒ *`7'EX|SHƃ]?CJ&'(v_El 76(Eb5{;?^m#}Sf%hfF)8IR& z:]bfIyI ]oiӿi H`#ugb7:Ϣst ߿lض c $X}S0g)x}Hم^Y!N҂d/mp% 2LEY'\TtihsHU:ytY( @V&KbNKpN]úgF1<2Za> 'MH#>06OllA /-8]31ˈ:ℑz}b]lďX.m^Ư%+]V]9l2}RP`# v)>ٮ 5HXnG!u1S~JavJYP^LqpJcz{f~ PR7IQd[h)`azDȜKll4-zuS)_Џ+16渙nj\2InqReU] dnӽle_9ꃟAX=H`r%sr!z9a}P,̳fu#9I+ c.;fdag6H~Լ\#Ih}Kmo'VmHv S߰lmQ'mXKh Sϫqˮ/ t4xR$@O+~>:;y n^HЩWL;gӊ6>vX]MJHXYիYZSb- r$|eƚ8 ,o E:eD (G?` P\f5vY ѱTvѬdK\HբTh5]\.s=Yʡ)S'Ws ]PN7*!QX4\4V{jyS^^pdR)\^@BTFz^a\+u9#OZ|E]hc j ;<*tg;~3ʛ>"IIރTR-7´ 3f)L]K.B tarwk=|wow}衈ȃ_:cR.C23"I7cǃnQ{ɧ6JE>0)͙r=f5 L8~biMA, 0%F|Iʈɯ.20V $ -ER`>"RRw~!뇋 < F!'mo1@ǚuu;g@ɮv)L .QSP} ^n@t"S/`yRyϱg gr0a3YΚgz&0BQZl&5٘])2t@iJM)0d~oŎ4'o4>.u~o ZPSe4flY5X? LC71BMB`}@^g%O+ftO#TWܛ lluo;9uRxQaT_ %I2"\!&\+ ӊ8H!rhhܼo<+&,zԯ=&1DN9p<ܳv8k?8 #\0$+Uk|&Do7z@.NiHB{}1qLabZSM ]' tEOiA O^$#;\6Jփ;5 W,,D|1=[~`CI\9~EJW'Pwli;|髺4kgv%_^E Ǭ;Q?2X)@L9Ls$9Uq~<ku#E `>N@ Knka1@t^7I+>u>r-b;+\fhO,籅1wx-"WHHϿ3q6IxlVCPz%_T#NUz^&#/=v0zdi< jۣ_}nSjNCEqK j̗dO>ٷ%( -L4#Uܲ3 D}K`d- qXb}{jzo6[ ~M8ts6ggڙoЮq¢lՇ<4ʰBv,q˘|Gqؿ`F)Q=lcEO +.0 (6⑫?u6i;Qi1E7 ۊFP 2!s]_({A0C (uuJH_䵴;5M auHی3nu±u?%ח @zo=3[h3OmoMpHI8Z]VE%4RIi3=' !&szS1+CZ:P ([WǬ.h1ۢ1<g/|#H`jRpdqe0z }`E-Ry72 nԒ'NX %ޭz*"6dU5sX0Vy8o: -+$POMm1Z5Rttd߷sYX].~VE-j  LkӔ'o{)FˣV_vį3wh[i5\şW2u5,=H1ԧ[pL#^%H '^EPlc)(Bԁ^ޗ~*C%lc){]Mr&}L'Cf+wMms~v<ӕDړyRN,T ^&^/z?f'Y> k%I\PǪV4Vv\ } ੰ1*z1S(<"Xd{?"X`7pd3Mn5H2dlg[kn1M@/C=⒊m0Oȍ-lR>\Q6)ИT 'XaXRZ燼hn|(Gɣ%Q-4:"'~[7S"[kkb^H@J: b![ yT$<Nfq(ǯWkϿU#:'Ia:2ՌRMQ)1ՂF` 2AnHqq|e=tn1W[5[v w 2M I&>; l,M;8n1tLb#EϭA/Gl]mLA=EO/P2\H6خ'08“-P&>Z/|^n41!'Mf!'ȥv_7Ui1ÛN0#{6㦢C9gd {Dm=h`I;x]&qqr!:n=n[zZ꽴,LiHEL81'H4n@{C,p2Ή  .RBjd ƪ7.Wt?K.FCA ZK tz%ΦgV 'n'2´WΖ|mŴc/Żu+_=mtQ-V۳O!ҜUii='In7lǙG˛OZ1.->4/≝6:@k7e l=Fg}IK)͆.#v{Š 10y\&MF!Ivҝ".v:'h5kyl޷4Ka}}̾ml"XKw8?6·& 6(9 (w1Z/ /*Qs`Ag(ʑK5Ӄ!YlQ F8{f,GbW Gݳcf=7xh~e&+^]Y8U1O3bt,?, G LT}nA4n5yN؍U-1"7?Bw/sR]:1_O53$.,xlLGf˲WTɫZ%匘eF(9mq!3YKѯ8I )w皌 ,)sv4r5vRhHwgwܚ,G{.!N@SoWnX }S3+iJpqό>=\# +']@r=J|K>À:DADF<=K}'V\0*{$Ѿ= ;f}en [yt^0HU%A.`"B Tt!z-߳>, ,׫Qn S0Day3hl*y싽eS0:# xl m&/8׍J>!& x z Mc3?ȴ6a ۈO`J0Yg7]6KyH*ޮi8.[ `pC `v|]. Q&!bзVT%m؅$^ս"-֒Vix.$`E!C6j^)~~U%bgt%1(ܜe^h67Љm?ðU=icg>7aC3Ij|LotA+ܟJ6FɈڽk|t\4:i&B/\_BkWe+"ӸVɃ^Ku$$€2X v%~5J&aF0%ͽۿ2m(x1f0] 9 $'[#1 z a<56iv*nɅlGKIr6QTgŧ˥>Cj;%9ДJswC[~ͨ3hrYS >j|{,-=&M%NE<~MOE`[vT I5:Jj F4VO劏Xc:Qk&A *:Bk^3U ֌!JcȞ u)\5`ncڬoiҖ[p@}F_<>XNxKZnI^_q=LG\=#a'\}~^WrU'~GU7Xe2D&czhG|lz𨂳f5?zB1ŧ1j'b6狳n2If~A9xdl皜Pap={;'k @/q|F9ƣT# O@N_1da5zAsj|cPjp|ړjhx/OH]1Ȝ(779W62_"($nD:ؔ".tZmaa9?Olò?2ލnmH,hB,Edf*fYd>f2{|S̙B ] Zu0^a>9c3ISrή͍K &PC ;bƛTi!aD\V7]O0b}^PWoE;@g  !pYaSm>VK}{:YKt(i/ A}㾢A9`!'vv"rO=di$3V{1[u(tc3:ds֦v '~M~=ӅUI՜xq :miIOQ؏g@enΣEr! 9)YNY*_WJ GW[)mhj0ʏ$p=t+gl]VrSS_=.i!^=4=ovVifc6wX2s ?&M]`;Fp ֋QX& R7:-aklzeOX/IC]Ɇ<ZNyD;7q ^.ubSJU0V4Gu% uW@Sl3zp0qyN۰ykEA4Ɠd9Omוs[u QrZ..h吐0 d;Ԝ&|+h~̛0j(tKE\jt!89M2Pw\Dm!Ar(Is{zh' A@/J^tjj|@6WOl!w/6Dg Oɹ+vEB&d^/d T5CGցgL1v] (BoQn  Jd>fIvwL]rHYJ܂-'y"EY) Вr}s/In+gQ'`woT0(o Om^X{+aB>$Shd&y]nԖS=jzVmu B !.tU7οclI[m6Ĵ6G`~6+ (ׁX] b`{ژXfۓ?FL78vȩ0s;63,I Zrņ}ʪ24Q@laVUo}@s l7#汰^C9>E&Q09šܥqwcLFѴL!ek%\T.qĚ4L80@`_C mx2tSy51W46U'w ,7bOEx) I[RwBMVuTQɒaTMc*:r3MS(Gzt PvT8(V,@ r2\U; 0LQ` T4I@$'?-ʗREwqd:sV%'.&?JX>éF)W&9Ӻ϶H?Ԋ'U{/_[|a}hя#$= y+in':Re[Jafd(4dc(!I-hgӜ98FՒA5~܉xG% 5%', ٰW 96'8eK'HU`!IJ]×(ʪ_KR#Ӵ/'t&"^Y@_=Af7-cZ=8D11@Q% a\'$i"b|dׯD$d]ȁFf XD_$5c*SX aK/(J[w'hJS8+=^m#:b6D}!QJ9S&}^C5B3E#v3HT`Ne:vB/sGp)A ET2[# x<:b}Wj:G.|\갞Ϝzo|B̽[yz+ JltN;@it_!;Ácֳ,)Y*X eF>ՊTWb՘VZ;Rhjj2z Z:l"ܺq(iuc O|ىp)v͹nɼO1mDG39tj-1$aCuqRjV8CZw;`2mҽbLM8' r0*8lficM?Z@?5u<3X%[ Wc%S=Mf KedCw2׏YVi,|F/EF-!j<i\+%7(זRc7"IpǍg9=RU@MAY*9 ]+52U8Zf@aV_{RR T3o)b3ͩ(I> &+QP3wzk+'G\c֊eJ?&`2qqI[`VU1껉2\=|s}&P`RֽhQ,ؔ| qHFcN'y\ \& ̒A[Nk=}AP^c>fM&++RfߊBċ;N q])tAun`06JrɵU)3IF13ue.h b7~fĬOsXm#oH[CT𮎢6_Lit ' O6_!tj?tlM`Q-g5{ Ci /Ye[@Kذ.zt"G^}@PѱfĿ6f8ϔkO`I ,X:bN\;2;u1/|kTO{f<(=)l$4[ɼBP@UĂYׇ՟%׈M?6y-o> ~I: ۍ7(F8)!-*|>%Q8L 38˅N:]Jj:VkUqnwL4*gcY{8 -)Nx_azx 1 #ѓG)%%q.ſe|c󲝭 98]{ގeIѳ0ϓvl𨐢ڸ@aJt|qBg]n17JW} ;Yox$Gj|21re؆/YR@k,W 4|.CkuF7eW|ݻOZKvqfˮg \OaVVZώnO@{fqN%Dyl.66@`.jV[>]WttI:LUKN'4 ט3"l#pys8vi~s/cѫ|&-kwʋppT <5E0nz%D3Q.ĉ\:mpH,s -W_<|'4l+V/W -&6x'(#;)zۢTYc0wCMC΋TJwz-KʣhԳ&Jhgz$Wj*<]MōX'|dZӂ}vohbEXXN>JaAԫ2|ĸ4D>Nvr],,Œ0̠8njC{ɛQ/}5.̎*VNY=B9Q>g4>BʁgnQ= /"_`YpW${E0Ny1fn= o|kķe;=@3~ %?$D TaA!~ӺP `^(oaѵIXkۗP|RS:JHDv8#/u-'|lJbN%F|O3.:,D]Z'/`iGxي',7x57:d!` vKk :o\e h.}Fًҙ;g!N`9·ȝVŻNX5Kd|j?\WSG.` 2h_J]$(*"XŜQ91F{a,Q$ ^^_{+[Йg468G!s&Q:́cY(wg6]7HYߊp]ՒPT{-d)uY1R3Ji2/P_`ef޽v/`1 [zm8}=GPiurxSdfh=fy=ƮL3G 2rJs3_NB Q$Z̛O wP_y]:X+@anU耂$k$@hōhEUu![l2,8ꏁDŽP츒˯ 1ևt3 *d>Qgu3~Br9";{Я vfq_A鵍)H+1h/oSG<~\|PVk~Y?&N5R!T_a[f}U_I=r$y4:z˶fKzAhfoA3ê1gJT4+2PŇezRihU3>^ 7sJ ?vR9+'_q3'"Zn]2w?#;~򑘺K}* u6Pе;-|C^i./g@^ŕ~q{kpۧ3Ĵ-]| ^V S)G|u,!":⣌D<['/OElp"-tt Z*{ Հpk6L:AxNڊGS;lpioD (҃9xzdMľ &!ŦĂbaCH$-t@M{"q(ZOOnG[av}Sr4Weϗn C^YYtQ(9)u$VoĨ"HǶu3f[=[%B+mw{NOw0RRѻEB׃wcmҠ=TN:ԓ>>$϶¬t*PsVl."-3[sX]T@,J㜺n\ 3!dnI#/(h8AVG5"0xjOj&NO4B-;ɨba]sM6)PxH_L [eOe֬` '*;/ )I_p}$HZCu+VbSmCIb{lC!`&gaC8#8v(0h6 JR쫳n'rBT%sUTH֬~P:T4LȖnACM[o/f[3Y}1uRwR3,ԥk?)xч.V2(^B2 ٌ ў(Ⱦ/"ޱ#KTnQֲmF! n31\y^7k-'KBS{Epn|L^< ,qs˶4.M : Ƃ3,nY%kʈ"Xzz/ `H)klGq !-_1_ONpÕNKV~@f]8ܣbX|t͢$9;C).#Gާl]ES/f /Lk0IXn8`;YMQ^:ѿAj4pJBL&o/iܭuTm?e P%W"JpNc*-#dNۀ-GMʫu wach2xhUCn]:GvY]޴ܻ:n]ٺcekL~wzwH ںt{WAoANE9u>2*LSxcO4pbS1SE0$QJf4M8gX]y65 uN(!n wT{t:J]*+1~x:{9Y,z vöAފeHuA94Rl$z } R}}V_♃k:G_3XЈ$w9+GU[|_%GeZݮY~ϓ~ي%>WWBZ_AQ-yPwN_lT5@ܮcDR/ۢ^qTf^ﲍɻ>Ƙ/U؉@Z1߬2Wf֔hP41 IIîV6<:څrA_"K b*s|e(oABs֬;ep , ކ+<;+l ]Bq,wA#fwCT<.f)!ыE<v7A^s6F T$&ʺQ4T[bv^P/aELM&bZ|/~7h)G%*}nX}fْ p"髛yne'W,,/:*K>ݯG0GܻtRDž~?UiV|Q,5vM20$]xf_s7f{d**UK!ieޜ`$u2%՗%6ic,>-XS"W̲l֮U)U mى/SUac/?IԐ>snpDIJNl۹:@PRCstcTYE-Fd:$aQ>hzcSmwӇe%=!^d Y(uTP̈&RNE_xث)H/Yufѽ-6K}e_1͹ӟej$f(|UرsXXү\%%:\zء2u;u I:%e^MV?ͻ!>u3N}OX@A@l`ۖ,û!O/j"G`Ӡc-5#?^Q8#Ig~>ƉU\9i+0{Rg'g_vdըN$ =Nͥ z€r{ YU}yKx!^6+҈0{}WNf?sch1YrQ\=y"*aU. .A֛5[r h|cz4P7C-_p o0"WLp]G 䰶*OTm`xeŁjI1PUwD"/-i1@oDU+XuWoClYĔ"4wccU@#)6DڲА'Ʈi?:("MX OY{qS9;ݒPC?+I%&6MR#/C*ͭaTf̬ADwtN2G7^%ct/+`=8*-Uply>FlÒKWz|NEnB*UeH\ИRT y ib$zI#'z0[˔<%DZoqOwVc _:`LQiueᰓ/[q2Xgz3gvW̢n#Dfm$NvI5m3yEԹIq!cr[Uu3yO&; `kg?WɞIPIL.{.h4tagoӆ!Xm|z,&c'*~VA1M,)Ь+0%1?A!(̧6>WZoFݻ%6!!kpX|Ӎ A{ /C͍7Ղu~K?pPIb!_=Yl!9he-`\gz/ZcWϾovc\+b]4vomc:;Gtϡ.p,/f/ i4&U>W>hTܱ)p Bs!mQs{5P&3E(bŪˈ[NjOq{ޯ <Ӥ;(5NWr%iQhbB1Sy<LNPyBj>MC'McXcG23E: OLݦ$YwRGǓA^s~szq(%"BF5խ->F&B4(L;* .uXu:Hb'(RS Nlt]hݒCO tw4Tm.wwD! 2fں%&aDQ0#}@swgTyl$a3),\ ;>#yW3jnm")F6Ʌe8\!NQ~njD)CT8<}Q_MC\JJY JS:/E\`X+Jae 0ľ ?@ǩ! ri4h=AkM'|N܅5r~p͡Ƽ4>c}|AjOX fs17 Q"Jt1a`Ua5DXB_ޫУ hcS9y%fc- !soGvOӾ.XO#MLcgO2R`BE-L[s?;ףQUjGq0yft h๋ ל@vVVvJ)ۃ&4k_0Ŋ?&7ӷ<"fW3N> ~z?wR[/6o S6we'-WKWrdZ:"V埯D[듈)"n^pVIx#K3 h6[s/co 섊 t0m.~;7ʬeE(3IiT{9C  |SN,}KNȤvmAȉ,h$>^3x񄱫e\Y-6=;} KL;"OH`tz?f_fD϶bew/84-C= +$&; W TcW3E𥭰&d>e57|vN֧v RHNJgi6GP*56ʩ}x*Kڊ0N^]Z o VP4R/-9S;8 g;F{vLhHEbgUؘY>Wo!K[AVZpc ȳ+3QVА2-cǛdaKs3,\ZcR,#k:1Žo2>SJ{4#~I*ɖ{sC2VCT!y.cͼl/cko4J7&E{FnT0љ>ضP*ʫlhGŇИ_kVʬLlx:Wx6HMJ"z |jt8 8@Eu%+qZgaCGc0}¿Sb0&Do  FY\ ﯞBUɦʻDZ!!EI>lzIѠF+4YSdCړ892L-Kb"{Z4p|yBvǬl4[6=H'ԢMh'y0)#z.)(1%[p=3iՇ8A~;ܔ.bq;ә2MKIm~{,rT#2Ƈ|.^GE=\Noٚxʯί g>0ێ/fWH'[}=p@ɏ}]&7e}#)2ۥ `2, lG얃οeB K2V~{LCmC܀19A=daMBr Dtd?Jհg%N?ok<ӘC﷫_e~%Nv?#ί2^UCɔpX+(2nkfnuĺ| =jtX=Ww {ՅU/l+wPuapO;Ѻ̉Q/j,rZfY! 5=ġ 5 y5wr;%B9D[w%8*%R]` [bNߤGç欪n+!֝ĉ2\@ |:jf4")s?ep֍ܠAPkG.$B=`QR TJX_6݂sM`vb.Gd*\DF[y^o}6P۸so7 fcN8*bX5]Q3rL.y6B~r W/HQ'L9^WP)6#4YrX\/[qH泦"-+_ RJ?#9[ARLկ*&mHy%IzI)O URKI=RXh"Ǫ͗2}KWQiS"]w :uJuCc; g5 U3t]:X$<+tgWʩd`Ki~,sЀKJYZWUUlkr2cpQHy=5wItcw!51yGgjFׅA)==!88ec`p8g N[*YC%^[c(~jxx ,x^Oo˥#˅ao+&}Ⱦi}NyU<}k5 i&Cmw'sEY3)o3hcB+3yDkylBg[n $AD״he7SگfQ+ c U\oɠ)_*2b誰N qO_^ѷ3&Տ#p6+,H>*@[R+%.K@Ȋ*z.JkfV;SQHVzsoYjb $cClz.~3n摕ܩH=nD"`8v)ܫ^}P>J)qm͑('_tyO6UkU!ZDYŠ!;%W#ge8pI&_ av^ԇ>]'ҌANK[/{49?`ՀȻC;?ټSzY##z2쫇٦ ցΞ{,w'$e 5l'`N$l)(Lv6%ro|ּ" u~E'UUj߲UyI.-261,6BE'88d:~&$K~Hdws)-@FwQit$Ȥ]Z96XZ Iٻn=jZ0tl+V{9.>lCh B7k ó}[}R*O]4Wqf$Q& :QCUp}XD&ACqEV z>s8K>qa@[ % ۊutnwD> R!5MKQ|G-k}ܰ>9QKfW;mni%mf5Dy6\Axx)>?P֔k<3 LH9 XMa !: m#gݟjh5@pt8h>q̾`؝N@Rq>jjOQ=Y;z2$qKWz1֘e:fBst#f|H[y*Ͷ[E^Vrn֔,{yULMYC56<᭧!ZȮYo=mNu6ث g FR)9]:P]>Ekx+a}5֦KHO3"e4U Qp5O9hYLP:cUI\@$1z{Qu`rV!g xuIoEuc1? ;JG>A@2a3yD;zx.!Mٳߊyz3ڥn>{d:,X +P{eWX]{w+{eg *տeo5iCnFzE2QЃE"xG wɻ~zLHFC/mDTPl= Om&[ *.'}T?(FǢ+$R7IuKĜ\E:d cr*%67]Ͽ~Dh)\v?P-:tW|1̓Ĺs^bdݷPKQoA7oXzUNp.EIo5^`+SѤ6,Hآr)I'WIB wϼ,\Xyn% Pn&Q~p/c]ᔎ"Y4AU.8ܢ`YF /ϭB0PC?W뤩dMIƧ ߧļ%do1ζ.1.zK"޴h\6| =98fFfZ{8t~$ju\wUm"-pɁ5W(B-sViV}" Q2Ӷ$l:1C)IM7!"XM+;|hY4C6$\I%mc<r(BFh]Z:ȊFcPsw7>z{m}p4x{FuP])U~0pshM6TSp@E,u%vŗ@S w|i MAQ@k$ri.8zvVHRu zX %3>t3k&`OMf$k5,$) ٓ,DG'zK HCrD"ԁ}[Cx$Ӕo.LFmj `FȘ6Ë*V5$@̼GXVٝD-M?K Y31k*u Q~Z[rvAEnu*.u{"!LeeTQݸkH= 湍{.9_ O$( mV0)z+lLB@5=JU":.Atją5|Q=ay6vCm1e1:D90 DRu'\Ϫ$:F@s%$Ot[` 3tc|ˠS w*J'$h9c* BχYZ>( )U\*t$6}2lUbM/36R,&_Pnf,s35е2x lG#gs)!NVa6V_jp'ko=17smL6MDg/`\6g. ?":/SNBGZ`>= }jϏ˸^5pHy8KzɪIbd2.q.;;& *ʳ]c8 -9PwDل-ЬUJ& 5CmRY.1^ZlvEK.L{; {{$ފO lF|yLZ{X~?cҌgWT@e%8csW/R$$% *8VX-3*{.~wR5$иsHDF'$ס@tMP}bUt XzÃF_)fTѷf p5'IYrỬ1kjj4+v%3Rodۇ( bXD߃ѵm)0 J(wPh`\33w;aI*NQOѷ۾N(F:!;jZ ,!^*b9$|>%8Ӻl.f^K&8{m(ȰL-"iz yn*b#KLqPXHr2/w)$ Wř h]4kYPs>Q[eLkǀ} 7 l30 4aġR/aZpȆhLJ.f@X<2fQ/alQt"6d)X%! d`5,9Ξ H;WTjJ4ugVW'r{&IM>%Ezb#v0$ 3;PjQGSff9rA4S`CҮGO5 ٫Ek@mՓuHA^ ]]zpt;Ԇr}KqИcuOyFm/ x|e"_[VR%lpT0e5l5@Ǟ٭/#IB|b ~\F6%^wJX78Khd^w;7:2b?LD#ӭ* eS'{ 5y"<{|n(Goۏo )(Wf*A•&bLC ׵՜n.m֊˫]7BsTS `ݝ%tzbV=8>[v_%d}I9b="ЊϹ' @59>ݳγ96wGOW$eM#`yMA0~#Uiw = &ҳF *cTkObF Nh+wW|=B[ńg7̴IPMc'_ʥe'Xvi,q ;:䆯w42Vơ}Uzㅩ7upCrh5a!6Ibp]Do+C*?B.#aeɹ`.CHT颧szaN{vaYAU #rH;$풷2U5fteў^aJN3qJ-dy2$X(M1<+C\C:8욓ׇLNf`{ӚXQ_8 蘣9C؝\2#&mCUD.gaU:Kg+l3} O|(|AaH:8mUG!-GC2rkSt!FqGTlg?.τVK%0Fg ui$! $9 K]t,s" >2Zք O)[,ZR A gQ>)4#i8 y ·.k,ҊJ0 YU>{Ul,N4%QTnGecO8yu񻰇$V*>"aEՠ"Б ~L\Nv6j )0QT$fdNUDsb~Ce;|uTU=*,XUn`n8􈴓j)F_%o4yc~m8k */ alB4NRay 9wMd±SQ-np$М(1_{R,T {m8Yu:mut"b\}u«v昸f`ᓥu?`&Td3lٝ ӌ53xV{Vul߷a^#VӠXNȃENlI 8 v !^yVoӬG,Ԣ}y-; h*97d-mO]j͟jk˞7X6hVWc54 зXGDgDT6zlAah_$%.|#*mmT&7 eS<8[B2t¨1j?)xP{\!%^ #\i=(.=S^lo!R$f`]q·w%'m'{"&sUc*ɇ ÇReXn Nc &7=b]pB}| 2@:`m@ۀ OׅvVrAYv֥3mc40JQHx!r>5o@2ov {Mt/>+ 1"N4\4O~BX/:jh> /(YFŭ`![q(}ߢ=s(3U(J Nd'Ij0N`ITY.w_$`BMaqubJI, Uof4;&LH [蓳`L gWXMUiʭr:o0Fwo2uK :I?~!XVS"ʤM6lմWu(zX%s>XIY$\g@9F<3Ͼ2J@g MpOEv\UAĦ΃cqvI6yW UPA}ȩ> G-*!xL1|@}YW*Af;'h]:Gq6xJ(w>'2/=ڰ~j$>r,)D!,o\7Vdvސ ~kJ%infRgo0c\)@V<{/ݶK%GR~mz'[G<ܲ'q{,KkAWa=gAV́chb9a}!'W$9"uE]r;_4T5y*(H MY\;IJm7A>ە\sFnؘ9 B8jt AgYgn <}W&N {uoEMS?_QQ0;]~'a@5ֻU' h0"y5#`}SrXbwqaTsiW`^vƽ#7EOg;ϭ]W>~xGQ7>>F᷌z٫Raj3A\Sl֯~ ;DZdV,( @\2j\S/DI#!EXA֬_Ч97Zp84%pE64>2 bgaGi2$m:ho|iv\[P5!^.T~>kIR qw7JW43VX3Qks&#kń@fX fg]_.|4HtUi TJlүקƆ=ūi{y3" &ՀHPlHNlbQճV7;ge\`VEDu$w&iPYF4E}A_")`㨝Ȯyg\MYr4ߨ6ބu=hgXQ XEzGUV_XXdA.%eiG Qǝ0gp;ήD}m33OjU HA 0z:,E~%9#]}\ U^ ܂0([U5&6כ{MX3ibl&G( kP*,qíuoO0눡LW ޥ'6ZEE i[ݛUy6j/Y8u(mZU Hˡٟhio|s| t!W3/-G[c2a3oNSa)Z٧xĻs#V1Z\. [B'T+'mVjJVuEO(-9[nPWPPB?3]͋ڣD3`M W eO^KX[S7 T0or C m2=e]`6s֮ݣD*Wn3>>|NlmW<>^;\"؝X|KMط1c6]jz^h.V<]qtơcDqpEBץ!_p (~N4+ICgJAk'ح>ڹnI)o=3^(O_^7]X[#fSiv̑(z/[⁖[&Cr!v`[&N2D;m#Xj"<"c?s]փ,8<$'\ XQk Gp-Uyy/WW Ԩd6kz9|FشKg@M&ogӞ7w6A(WbF2 VO\@'ܦ"kRy 'FUD f!~mݓC@֮| /,ʭa`Xj.MAx0 tD=> %TYMү*YB#5(u==_1k j4A+/;4~ˤEN@+'@U/Fc!D!&lM瑭"5)NukxQSUjT͖S 8m'^;.I|۪*ㆴݵ\(IhA<ո|[ Icu}x؄o2N+N+1Ⱦp.FA.^IիkDnnY2VJ)ϼv۬=GͲJfRC6h)Op 1pUCK=?tWj1: hZ&2Z>WjlV3ކ̤9 I dQsZivt'*x8K|iJ| i϶w퍎"AgRZT2C!"'&o'YoCP T?RN ]M3.X,HukiqM+'V)XP_UWd! z&˃b= )H38>H#C΍ˣzo/EH,Wa# E~!`_'8B\{C1TFJ2dCz`؆z!..$evaV.K{$ZR:Weo>"=SJ^;TYiw@N{3^j z\5L`*k3w`K;#FhrnXt/% ҳLuɣG(֓ϱq@K Q 'I2%>mDC#ULƺSCYhSv0 leSVz$e G"M<ỵJO6o0>+utģGqgs!1:Q7HuFXA5۰$'bkLI+^Ц'kl7n"'$5:DF\9ManW.'E)R%q!l S,j4muj!Yd@bCu|i](y90OeY4dϗ:-t Q؏0Ii:1ߟC,0y - Foyyh^H+̉^/,̓Rit&)[}u#1?FwcAkgd9z3_~5#];9*vNnG$ P;^*u 7zqb߽.$KXI& ֛eno~1!AR\^"n ҉PS"о="8O[hz±=O@V44YbaValPc%[ 1[E7ԋWOР4 h|[0Wdpr)c0gnMߌ&OB 8 5hnR}8DENXRH JÓ84.Z ܋i~K؎BXzÍ9&{(ZyRIONhE J'PR"НcnҐ{4#)Z5EG}ωnQv$^k/?ϖZ38o;͟ wkM׍΍YBg=cuicfiq-ehpc uaH ģrVbSx}&OYmѧt,1J|&7HҒ6(xss}ѭgO;n^~`.ؾ{j$5656c$IGQN'YC"U܌lS-2rEPqA>Pb9q>*U(I;&iy;)ra0LsޛSe>\UcϪu0d&=f*GO>] ߣNceE~iwNj[ϔ"̏р50}gQ-'s{$K>ZȏjL]E;w~159f,m|T9UaA4U(΄ %~y=jM/L \JCd"HuQ;5#)^UCNZ8.)9Cd34^kfo V@-"TR!¹,QKUI>ynխaV-u&2x齗MI*冇6PYJY9/{P$<6浉rWX/!~5nkV zXYj8]LK{Z\=F^o>0(w _@̕;#֕ ɓ:'^TweSOBՅb+%=n[8D`w,sy"VEI.c%hQVN:Nȗ 1\duh:|Ú #*"b 6ǭ4"Jߩ2-+)xJW@UEqYƴX mkWȺ 9F &EeQV27[5<fyͭ,ە`n ]Z!ͱ k;, (Q*yEKLL(pB[g9ji;TWe#ӥx#rc*aļ1i\z+ٵk}}Oy k l?PB֮Y< w {n-]/1O蕝p?ҁWQIw펅(1WlgMOI?YMGrb8C80 ̠8\ akRw>xn3;uB|㒍jg%,[Wِr,BZ+02;6f.'I[eʽi)7吓--lR7vԓg۱Dޤ zڊ\W)~ڠyʃ<$=>`~cd],_A~.jCE01k8֯}>)xx_V1Wh ɫ~4hP@%c7ˬnjOx͠YFiex4۞>,) @Z%1Ǹ,H>i_ۃk IQ̱켿rg57e1N%Hg=gĸ_LDA\=ktC9ͩt*i}3'}i'= _ GDkͮD(|k{@Rz,ފWXuKi _}v-N,+H< ٟ3TɊe/o iz{KO@nؼ?f[nކCRk"4򦌢0vv6[T!. e2;&{T-[;):#25)o61Zy=ZGGx3hLr90njCdU"RC`UѾ5{+cUg%[G{Mwテ) >5l&R'ݶJK4xAH&%:d bJ<-3 ]rJc8v^ck~qGl6HLxpRla֏O3#gvV|VGVXFu8Ÿ۴3[Fi+Ƈ. >a "hH3VD,[Iۯ<$|49m'oc|RY۹;yLOr)>6`1`pOnŪ+e+4+vBúubc(d^7 lO*]_ NxC X惢e:t{͘$ #,5=pc7 UC,cUC:_MFe+"i XBWz{9Pm*q:e9hX ̮W논 \ͣ-׉nL Ӣ)Y]g Zt)v"G"z*#A*>(etZ֓׃Q $].mro@m᎔INs s}4oAF%еG}C3B{StѪBPYp;k=ؾ [XϺr%ҎtmgQݯx~&X&*?iKAXpR;[.ҷvDI;Ǭv frG1&rl˩e0>V`c="J_++JUXPlP*o"$iZ^h6CP4{03T,zPW+u7B4;2sm"s3W_,99yx{S4w.EnIXLA0S!q:'+[2O0-^pSMYveh Ĕv @~]e?oRQjt}=u.(s;i;y9EWaቊQH}&:fl be~`[^^mr ,ㄕRm&g#b,(h]& 8cDכIΝ'.T}~>N *ppjC=N-w ĹsaZ,3[{.ݼQ"?ؘKZctuX 7wS VL :~sMB=_F/S|k]AVD'WyVeqpSej"4>k5z/d[U*XUCE˕"*"(<h_ZZݜ>$/0h9L|t'ߒ30n|B;;iF}Fגe`Зrpsjׇ@GU7}KvQEF weE5$͠ g&W;O^P82(Ph 2";֧~uϔBLi;74 1vɔO&WCT hOӑ})>YoHO9#%Fg1!c&÷uҀ_H-#k.7kwhZ`0q N^ Ҥp%_kk:v3]ۮmuY2mcY3 |s>cgR+1"TM]( (\o*}NCۊTaU)9.sH^I':m}z$eRG{9gy,d ^8-xpz. [W6ƴw;W7k|2 0o$0T;-?ڊ<#@_ ȞdL5V"6;KЧe yYхOk+ϷC!:ݘFbgt_Ӳ<ȘIgEKfslquH)!l+l̲57a9#E:k &\z#YOeĿ W6t>Q+*NѸAgԭTguӣ㏏jRq9 P VL@q=ko-*෢e>Wq\G.'~;jXʜg{AH\ia2;'20ImG!8>~4iC8I }1f?[uᩔ̕+7 wuM;1ns['f4!&jhй&VGOC DK,Zo =FОԱ=m0)ɒȻ|a6cDF.Y1YJT`V-ݐs`\E+ kҕKm3|+ '?N'v/(QLRI{E;D\vީֈSq'1 m !j4j+cHz+jq[muoJFó KO o4pjNJ1rW' xLEV͜$^ݦ Y=zcCYZLB%{ozx~Y-<$yC3",&s4ӟt4h.:j#}8Y'wgg+$̋D0u6"oRvj@n*umL&ȫ~lM-OJ#[t"aވRRgo7fU-3`_" .E2V1Rנ4E\(!BCt66w ٜ TO*"yUWm᜘ vRr }$:`nSz'WOd)-?oLlkΫ%}DxťoD wMoE#He9ǔ 94_>MG{J"&Z~E&>naHy(׌-\zFQ&!ćbi3ό!< 3;c SZV>=دc! XNT Ξ0%'X4|A.CbpQe'_`7Zti3WbψTfsT4]wnbG?5%Bs1iv@ʞNmx.M`Vd JD\H<m) Xག8'ǡinl<AMl >HJm OBl$6YGr畇 WFB}\g>^ʬd a+c֣LèUBo6B#%c^p{ARy-;GJfP݀v;6DD.a-%@k8gQ6^ 嶎#4;tdH3vY'gFE1oG"W6j4EI(R .L坬Q$5wۄv+i9z3Q<ˠTxNw7:q@'q X;.HCVz[-Xjsӗk ڮT~S?q>eI6ʂnF(<)^5Wk` Plטo]4=_l9~JlQȩw^A'7ЊMZrt$dPd`R|H*zx<%,>LNp>3;T Inq2j ʭ,IOS۴1_y6խxZ G{AuG{]@lFdy ֛g$ۛ bҵp4ҴA#N6E93l;SKו-OpDN5F"XXoVI4렀5~=̈4YȪ噝E 97^^ap-$jM0pt_Lcqtog< DnW0<0=(m휓3c"ŏw'w\-Kz\brmʵwaF =J v³N=LMYS0"+5VUaJ 5Wo2Az_B'Hy&5^ 84Yy0(+Alm3\ON:Ƭs 6cJ*Y; Sxz^Փ=׷ڟ;H)^]I`836ݻ$ZMnT0t1Iw kl֎Ë֠=Q>eXΏ>!UaJ DcMeuR*l.͋&!rxa1)^h[o5Fv(;8濝{r[kX'C;  -^MN‹gr>ijOHʭ  St}2!'X7 ~>Ņ};л7͠fM\dCuܩ .דTlˁRzU0tug4b76V':"u÷;( QԲՇ>*2άY4t fn {uRc:upZnybC Wg:mֿNC;PN)#Rʒæ:mCB@O :;ꐶչ֓w^l&%(4w }( q ;jn1Rb}t_4d^a.I36tY߀٦,$ -^SsMU/E =îu5J췣`8uH~r!YTSc[FD`s4\Un$ \ s6.R3wn$v;J~#5|g`̋Ww]m=*=jMrtE~3Z7k^aܟeҐz(v,q2Qץȩ2'a48ϛ>=svMYLnA Rҽq)䠵ƦYuHp,q7$dj\ j^YO[G=(3)[(EX_Sho@:Sзn]_aLA1];"6g#ɕ'OC,SK&S5>vb;C\@SvxƜ\= ,4*ԞQUjܢj{ȱu—>ó% =N~$ܱk1L;gҦx5ܤ5bi{u"r@^ q9(o4b5іS{+&&ASsu_3ٕfa" Ҭ37\$FpoࠨG.!þ#+"\t.c}/ ! at[q ?A0'V,E%AIWyW{t6K¾hJd [Ë%зey8d mnlGm)!τBKaz%# ',:k;b<|QݛE,$M~)\<1q-NjftxIֈasg^uq0\E `ؼd䬂t_j Y% piZ–&پ-ۃ\CRŨB( Nnb  x<.S!%Ll8Œc})zg]t:I8 /BXGM]cS#Kgk 9vܜpQdnQlffCb/qxH@N;<^ƶqm?۬J?*_JG ˉ\{WD ]7v2un~r``8n%9ca3qL6}4oܜnZc*QvVm; sr$Y-FSw* !o?>!4Pj$լBD/qԨ^hy[ 36=4vݱ:s4[2JQ:P׭6AӐHʘR[HH0YCh]!N~>ǦBfӃTŨ؉@'\S[I 8=ŕX~-L<2Zi{"wp!0KJb(fceU j:-1!Ņgu:fIUҳf:T[T ˋ5=q9ټrVVcN~PW(}ѵ b^-G-1#輂:l!a#$&gߛSz(/G\Ĥ/fB{|Dޤ#j6m=o`gT54V`ドJIWPF]Mмԑ]jeW]m Kșک&tg}+2ĪP]bL 9AW ٓp˄`c'BY0rԒ w` ZU| ./Yl{ l1 HLO~ KsKh]w#_M#>la u?]HD=-G$ΈO%RɒwRK3٦tL+T%EzH-{yŅz"%G mZBfs;ӓq3Ek=YCu,h{bejLi4iK bV4s1`qӌoT2k3;>//֊zLh>#~EP Qw1za% J:ODZxHL/v3i"|dJUFBBvp@|T|h'2JO1%z߯6I-FavZXUp*l?UFqXO?j/+|ABFٌ+z$D[ :LBilgqJS,UHdnSAK'!mTwLroy5n%GV2Т節@fncIJYq- һʼJ{T6BفJKdɿa!w[j;~5M +5#9`;i:}xRLOݝΤ ir|RAQ}=-$P z/bCy#n!̒t4+FUFəG!(o~eOۇs++ 21TLn߯oKD){vZ XWf#m@`3Yw&\irL9Մ&ҍs9ȕ "za-<%##d'0tC:gtZ1ö,n#kl[\ek5> n^F2溅~E_Tr4oxNlkEk KfĥCcmǕ0zv^ 曻SWfMn`E1W`!.*uB{">Z{8?Ѝu)t_ꌶ\H3 8*R{|0{LxJ, 雅ax{a`V74L؍;]AO}ۛS y46>OsIlbJZ8"6h1,̣b|XyLR)9ր]#a\=~ (GM'Q"jHinz3)h@)̮V|Bb˾b1f>ߺyN*88Rg}LdG}Q<>FYhE} scg豌8Q?C + /??bG$TDrv?dw֊Z)(6uZS]$Țhh?FoNs. B&љ,YZTNyxnk4u({|A3GusQX`.P8a% qpn.1BCqspjc?+.~4Lc|0h5 4M(tO1-p.Y[NxrכO;ZL/A䖵!E2RI ;{ ms`wב0"C) T^]zrzN*FP|)4!OC]oZ>  -QڹŗV@aн*>[Zm4x8|0Gss"2NɁ͞hwRm_g%< t𜥫V9~QR'ѐU k.sӵf˖x<]wެKAOW|B 5L}5ҷoL2U4@>vA ·uOdA==,?&U{Ǭk!F#O.jGtYf;o,Uɔ$$m|“(/B j҈`@;ko.F+u{FK>>k^.I~ˀL*Տl~?D!Z(t4 9ZqBYά*r<"5\Gzk}XƵ\N&Rb.I `rdu%Q<+wI1N` u^ |LIaq0%J۰i󈥛kDsQ#t%*<v.l^K J4U94=FO5/8fɹRϼD~VMNld:`qZ* hq4>%֘>śoĝROB2a,ݍ> A[(Y_񣠯v(?Ҝ܋}\#Y(-);[};fU'X5 LQTOH.0:iPuxѦ<f%8*|p a;)(ת/llh〠#Y 8-cQN0HKדx [926]+-;m3 J13 vI^wUJ!a!lf+(N`9χq!s&;u.vl?Vӧ$FFQGF; JKdo^@&p7WQj$$Kh1"GiGV0qO+K>=-ى׍!_Ô#oy$^[,5Te)IfĂG[N)"yͬ& "C4LFlO焐V)0,L8Nfp bxon-†zJ܌5u )RK8b +;7TdXc;zCĀ?3vj.!F4J-DƖ#<6wO5ul"bhBR;KϜj6O^!mPve,XRV=+vT0r~ +0OuG:0iO|"g` $'ā?k-PG7|Y?nr(`"GroX Q#8h-&Did<TUtx$)1W/`^[ņ2҇VRo~>J7 Û(nKf;$,Nl2LYDc!E(\ݼSsS-Q>(}Ef 2,'A'd WA樾&G Yrs@@QzAVOh!噽N4jh.t j7[, !$UR/u>`r{ *="2"?Ϩ_3l 6>q[ڟ%o*٦U?0tynǠ(׃u(e_\Tw3yF)]R#wzFu `GMa_KPϓRodf AcʏJ|Y;yeL!_hJs0¡ "Ŕ "oŬI&_O$uh4pg5ʅ Wxd G͝VSm `(,t`6)HG%>yr$Z*?Vr;O41͈Xį,|u/l<$#bw T!qhWVd Q<INJ)ϏnDL+ BdYmct%eG_z݇m:i'Ū6$h$jMFxul2BDf;KgeЄV瀮-ʹpݹ*Oqr5vP(k߷Tל<+]N ɧoqfȸzFxdˊ?pq,3„ƻ[r~AmFU|b4'J+-]6TgOt/])ӻ`\!s<PQ:qwi1GO<ijCw|,:v o]~(jč.(~DbA*FÑl_&r9<&b#I?]1.#;v3Mp{ԏ.l;)ȡ>1KGĽGΪe8&ܶtCe:}>~]m7"kh](RL=AviF>%lՕeXd hJxk Ioq'"g&3&R'!?pJ_c 4} Ԛ* hH q椺*!3Tyw{뚁 o00-/%\4US/p~[%&^)h+Q=3f9? 0lƯ<  ,Pa'V27IhPb`2J}0uK`HJ޲K2 Z5.Rh Fx^ZRXݿUk\Jo1 ;Y*V{t-6)*Ƭ`#0ۧZ,Nq\CX, u+>bR:{ =}R{ʁW/d 9|*cFrS΁:%o>hcVj9?1T%O^#`qI'#upD_T9CJ.!t?/e-2/)*_9i~(t-9GʂJ^{z:zq2kފk> -mCڃ簋O̮MphRg-CLޖe v-CD<"}~s]Y? 2 j}'ĉ=Vfovi(Ƥ21:S/y|F4N(ά}E1zKgOʳpAM+/vRm)b8r;ۍyxc/Z#.ks4y)YqpԐ3ZZ?K<ףc9>t\?BU}*k<V>pT.hAFYLCgfʍ:%A%ƾd=9W^Zf|I.{NIcd&.1淽Mw6֧ S!& ud{E`#A0hվ6*X8b[!n.yf #ⶐgU[Tu|vuٍR8sг[@\㓍d C7ĺgfFۑg XXfg@gk kt97ecړZ7¡Ile宓p-;TqwOu6B*o*D3‥ eڱKGhwdI!Dj,~ |jbdm ˲ 00c[$$:k'ІwB"R [gs3%\IV2(gϥ+M>(zޝMN\mH>{bD:sKꞚbWL㒔O<D= ?QA,Iz'.*(Ƨg<# 9BV@reV/$4ʄDBgAX/ }zBa?_ *UcG5/?Z׳u<2&YIنl?}׃@vu "L$ܮdF~/`@+ÄEG/r˛*pdIF هU5E=Tuu.D>W|p6 *Cb?~jV-kc*߭GS`^c&<<2ΟҔ$`,cYV?ys|)7b1e~^ ["sC\ac`H0YߦIafImB⹪GQWSOr9RWo?Z3&[-.:0<*FA^?HnE\#)c>e`˴>PuOi Nc?ihIZ}^eATj]Ųk#xs "z2%Hq6ǵv;R5ݟ?̴\PfӂzyH3Vd `|)pp >?~Pq4i}j0Hҍ]ydÒ?zlB * O >,gWQCYiТ+LJ|yl``-E,2^R{sqN-/"tڜ2$C]?ܻ#V&Jz1Kwu -hJ arCڬhkF-1IuǕN֡ݟ'3*Z!j5c6Fc_}GXˬ|.I*ae qy'4UKd'UI%i%3 \܈P"L.a2~WeJdD`_|ÓRQu"8KEP)|"ƨZ]yW r|lOf+:Lky[kwIw)9L߅`ڇ2 Ԯw??=i)~U7n"jr!C[: imzcP?,6a"EeG8AhU1W=YZbfYw/!3 o Ձ %]~2o~E^=.O|i4If5O5e<*B_Rtn jo&X\[N'8?B6*7,9ThxRK yj +]Dڕ9w|foDLcU 5K0vcHA%?M{4W{ 8:UB$O~%_OJVG+iSM@Y2TTc@٠#ѬIô #o4{䢘k%UZ"QSN`3#Ԏ^ *8#$z*\ נ>?CM>ZɅ􂺗YG]+񅵜Nh>6Nt34 ^\B}wAIj%I\znŀT1GQOWE漓x=0u;yX*g0gQĔK%,:'%cΘN=q0MF D7!Fy jl8)#Ǘ,.B |IMN7{Eh NgIr:݇h}-RJv iσ=fN%%hgԂ7y Fy{ؔVM LώtMXCn@7,F|lOU0a`*C4Z[c1zS,RGi}a hqhw~9l *4&bL O->~@!;c3Ofxt ޭ#6sy˵j-Pq~KSp\G0׷pnjv@%N73&IMw*o ‘ut&0 ƽ]gP# -Nt;ʭmP^0x10/ Pb\&ʊo$EFiŮkӥm$Vg}cbRkj2q؉]LRmc(&wȬꗈjp{`K \GI5V .Б IyE !@UNf,tF,O=Ļ̅%XeBRHg :Շ+36W#TvƽcOϾk{ss pnPA)a)/MR-K|awV]*nh3XmNnK TE#\ k ^eN4U#=Jsgua䍨HZKbeZ֤- ` 1}KdRBt&D;>0˛U)&%'Ț[uҴ Ͷ~Êm*ǚxDZFpi~h؉8̦~5iS)ANvfR"OFe%-*V~MzOEzRØ&>(Jrό.TAc5kMfȗp{LD0a]\e\}-[pHS=ٷuA''N,;̨-%)Gqp?pqÈﻋwX\.h1? {H.h@܋GZ&(*@AeRȰ3Wx\Jnvg. ۈ霯ȑZH35KwKN?pBX/rg3Q .CdFǫϹr)ֱ19=ZbzWƹbaӊ K_v5=6Vqd_&c"o~=V(Z,)aoj@15N?;Sz%rE-ڄNNX?q_ri2*Z]fG+i,ULj;[etwӃ’CW?G; 8pzsݵT"d7Mţ|~xb<6VάQdԯ"s6ϩQR%o\Kb[-E0^7>WeQO}Pl,`G:jXz5I6AO0-d&uIA^پgIћ!r1XU yƽ?;&Jt:a)O| y|W h"KZP}e^:!8zCH€t=3/)n'k"̹͟Cc"p+`gyp|>\&y<߈EjKgDMѲ i}~9f1{LF钺 ,_wrv1+!yPyYo]5KL]{O¦kAޥu/<Ӂ=9nl vc\1Rk*.ˮf)Sק%C,"ǥkFGD*0嚕Y=;R/@'KʆxbQHfCW7dI<3I;69L,{^ c6 |[ƨhHuW"JL\]rΧnak͏ś sʪ= erk%%ntk|0gM0ePa [WB~]}%vÌ9hg=tƉ ҩ^Ǹp@^cYL9WI>oX!}YWKܽbpG"Bw\7hz Cjf}EJsgi) e:UqrԗǡkǸ@oYp}"DJ)Oնx (_1Q"5P#II '׬|Q.C’5dap?E)'ӵ9?/O?WJUժ#"^ I?J=Lع3W #J 9>`kɉ:iFZ<~P|i1kTطSD@ ^Azw|yW7"t j%1T&ӉާPy]Z\$ฦ}F\d}G JN;L)|&"W9nǝp, 6R ծWS{-ڭt#t&H/4ZXRTcC`|H5Rtpu_aQNgL9qjWs8jj@DX!Lg`y @S|ߤ^>&"~KY =v6i_gjl ?cyw]3 )\Bvs?.տUPfY_R:Te K]uH,vCwjOү%u@le7NjyՓ% 4>8"ӚC$I]]~fR/^Ι'iRq`at\y#Jw-9LOȆXYV/c {ӧ@?3( m0a/7e?T:ƷX;'s52YvJdGiF@|H-GO@oXYggz_ΰqtb;&~eX]iJr2TٜPDƐקf nVgM]vr5wkq`\+:Rp_ 9#Ez wl|l6c:˩@W+Eˋ"T=/ ܆fA¸_RXkK>]&khТBQ4b;+ ȦrkoJ 0rLK&b,׼{7Y1אOd v9>d@:maJ9:j2Nǃl~{N։99.}LQ!)4Z ?|Jb^-qS Kg*MĜKV/]/Or)u_dL)qRiOzb8c E)+'KGtԛu9%݇߸7۴|72. [4*}ه@6x7i5:\%a?Wb7<&3+ΊܴT>F$UL-0]_ƑI8ikZh7OTt;:%jtA#Sʫ"Vq!U_,7R ,zCޚM,3Emza~ܮֱ¦ͱzoEiA`4:Q7ؿ/'^Z]GD0ode fIqуx˹ ^޿*/#;;ϡ{pzBOC!+T>Sυo[Aؼ0=pyjn=du>:؜h[ ]4ënW ^xn^ SI|JaW5ǂ'@xzX qA԰Y*C>Y8+'؍ bVnwZJά(E Lpre.gC੤<A s#F|!\}Do\v [܆ o%J!v""toJ"'[b1w ɼX"Ȉ̩Fn護j_rz%ݑCCñ MJ|2"c02 tEk8L=;xy ]};r̾wʐv'|O4zܣvъx w9dGNK\us.@x_rOj\ .Fǘ4C7 끮?.9 F93 aK͑*9fxqVQ-߳%jDN n;, UOraN^UnSU"_>FRJJ*Rjm`yW)cW>lܜV18?Ése5'2ER$ϫKõăuX+wt#bp*icKiO.>,h*X7Ql'tn>`=z~\L!Vbhc퀰bطC%A[QS\ Z,%H+FL<\| NFqgm?ATr (#RRB1>. P;tT;]|S>džECTDKO&w".Z?yn8ފvxML%t!uRt]ޱj'7@kڒCLn{EKiW}0S8zw\F'?t$f$t5`c3Ye̕'VR )ro;]{+aŨQ3nSo z1ECjO3^ 8AYQ/֒MnUi F܆L?J_%ݜ(KW㻿B#^DrPs+6i00[LaCmɵ@t AP~<̷Ou"<7\jexC7ƭ/U^ĚGwեf~W4~`lu^03ƯHcV[+{sS(]ʥ]?%@;8~2O)b%|OR^8o鏐5̕DK죘/L$0my Pe4vu0#LgDu.iu~R<8qzVq7>VtF;sbSۙa`:dY ا o>!=޾R F)F_cNÅF7lO ܽPs8y]XyM } qHAO&f( v1Ę / URC}?5C C65:ɬ驦)c} qI= vʩHv/vvZKxoAn(m~9(H;iӔQ}}0׺[" N1o\Y]RT[[1q聪YT@Հá8D/J(Q$I\|3_d,1O!,3s?—~q1]'5ݡ-z3nBL6\̈Hwlav%F(]e]>$ק%m&iBL U &+K|f (]nt#k7e@Dno.B$h9[6f|yF+/$8C|&h(VB"ڏR;S Ůz_%eF0uoybHnH(ʋ˩C51(o$?*A_>~6*=QD4IaL@8RZaF?söTs9|  ܥo 4f4χ8Dx RRjڧdLjdGIo"LhVӃ2z2)wM׌UԝR H;-^H81$uqfK :x2뎛di߳,MU/'>O ̒a?v|Pɞ"150(v{llT iߨӆa2+tG6hF eĩxYaeOj(HJAWmuDR#56\$%~$ aWDf.mits2 erV=,lB2,dzEbj +\1<&+ ל1CÐZb͢ar83!hN뱍y)p&f 7 Β\ht N&4h<"q~Bū=PY% ICjEc.1)j~\3ISEZ\c9_V4,Ky17®W$B)u8? /I}`& F@lb !ņBCa/A֏آqIUlV?dkr?T![Cm8&5r?9&%{hVrwVV~=>bǃL<@{߲;P'KےB' O9-qi}$ WnTP6ň$YLHNP[08o b:,R5 +G3u 2u^t%84sY=NFj[|O_'; &Ә)y"NJ} $*\v5Sg_t]2xcBDfm GsߧKF-ttn `á/2@<΅L>UMX͊]w{S;+~X c<^69=;ߊ<rՀ4G>F`[n`GU0m t]:+9ۙ&Uc?aEqw ]GzAΪ"GM$P}`9M.~M :?x.xAubwY8R?eɰhd'٧%wFLgFPmAzC6KJ9Am~i֬/ms~k~B`ŬBFe3r*#ч,Xyj;=4^Z)Ǚ#i0:%ևAtxW *cY*Fۥk(KHй"Ru>/I|v"_,g?jl_G'ŇvʬՒ]N+esL Z_Yn&Ҏotw5N$#s`BCr yOhXU2IAqǯ8f_x!<{CfAPQtd~d.J$=hkw・C0~⡲FDZm28!b7~h|#Q eڕ>Ückķ ҡ@K-e%z?F0<1hнL2fy\ B<<ᦨrt ݚVzo:gB Rl)>rUߵ-8艰"Hu^эz™ް92b͛ck3 ^<y銕"sq -/^651ReDwv}^)cڐ ?ޘt:#"3UsnL[]]LApqZ5YScv )i2Y+&T|Qܵ2cz+&,*necea$@ f$y}E6TiVGsXS r\(y á4Z?dB5g=d&)[pͮu '*`\-|r (ɠkwc>(=neCa2S%í1 +֊&CW[4J,GR5Ү=ž_iuڒe{͓/=ؘ~EcI>Vl9}=ҟFݓd fpvo,t5Fsޔ{;*i3dpG|=1C1p?+I4k H6!N6(z>b<ݷUewr*OB"}5y*ʌPS˸*|QM6މ*I A|E~KԙYdd9 SG>s} Y*|WOJL֙VPO>,`nyہ[ O D''/J q|2)a1s( /ڍW% ||wACN$^t17!7(Ӛ8$ Ju>Ǥ\\p)jW;WNJX,W4@Qi=.AEy~3bkrKA9/8Uycw$cںK>F^KphZ-)od/aNX!F>`Fя5h |OX>(}( EB| O"*)0>[Mӷ]ۋ;(ZCv*Grl.F09UiCc25[ 'Υ%Yиײ@3VH) } F 'n%f~P>iƤ{1u)ק7t}e5V4UB.(gᰮhTG팭F]e00nWkd}e$4" ve?$Ǐ@@&T]w[p>Ri-|eXΈSNyX]h8̈Qked)*_}S3ԍ < H^Si^Kp9>'4w X8bhYh{ZBχv{fl\5klORjJ%^݋BTg2V`~v]őR2dSX=#w )2(q yKVϖZxJUW*X?{ݕG[v$PdgD-|$Fk93Bw54Nlif_q7ڊDN|A*]0w Gڱkf aD GL6Q7oS*D?]'S6&R$urVӈ W‡t@S;*DI4qG%_LFC-NOtDo Z-~*'zl{9ݚf܀Wq~\K.S^0% #^ywCmQٝ!$4@`_B~{YC]}ibr}#AgbҌiyLA)Sx]#2JϷ{r$ %haa3Ӭ+r%eXb.g_[5Bs҈-\&G2sj@5Q"k231ROH?6ʼnMoua?dzTh{måXhג9|iy XدY%k\8:caʜ!,J|ҿ$=Wy'#Ij)[DwO/Ln/2٘kz[2sx]JFP) 0:٫Jb2r戕[A )kn1sJ \7c)%k@/=QprzsfcH7-;VwBSW6M4Ah%wd;,<!.H=r;>HY@pOV%X3 gq20ʋ b:~k6>Wx$i } 7VMCSdBM !n+ Y;\$ɜ9\9$J0bM2ɏ)iͬiM/͸^@@WELj&ڧifIS5oQ߰f摣$ås|!P*MpjV2y R,0rb_So~͚!G\$I4'Y#u{^!qÒxM-v ;M1sdR/sf`١x>Be c"vz٨E\Aw9.UT5jd'A^ӎ~ T/waWfJ*yf~EIVlXv)9.ձk^(QH)D[9@$Q*Ϗ"mt҅ ONI`/YOE>سFx!1ʽ%{nD*^pS_^.4=K;_d.:vr+Yg!z^ ;qN MVdg` Ug&^̾ˑjhx-GkQ ;+f[R䣸Xͭ{L.HB_bf zU>>AXsh+)8~> xX5twe2НR$?GbW2M?{^'6E$/.R/1A,,ɐ% B9grdi0~K,rjJJK3֙j b5P pPSkBM A3MܵBмy rϸv }YZ jRQ̀_uDP|2]%`3XrbhYS3Y%u|ةG(wd(uQ/BTXJ%@:R!7j\kO|" 8ގ2_N/Kqso Whi[Qغ<^4Y@)xYbTqAJ"|$O-k D$}#q[0ٽ>_(^1Wbi. J4+%ͣߒh[aL#!)pyw3p .g溯Zdvcy&v2qͯ#sa:i- yL.ѐS7οF ^Ө8`< Ej `9L\&a3CkXuvXJH@bJsh8*]KqijVH4:%ǜf+TH} fMbӧ /.zor78fhm=+a%t%E3Y40r벊[Qc3kU cһ?ul`QF8umJ7DRR!BzS'$ 1bǰoaISْ9.ii T1 Eq/y*O-UVԇEq}ִ* p&sS!ch%4>} >{QŒ-[13D3lSblm@_қis:@9g +\sF}>8}iX T zg'bW5TQĀ%A'֫ipjk6=,0k 輋!pL! ߤA$S;yKDSs-|LSqw)mO#!ED2:ĸq4&5͟mD#z&?Z;zS!@y~u7hB5jKusa[cxzDuDCpD&Jփ>nR>e/&*roώ ׹{i zYg 0_ޥ1yC2Cdđ]-W &Nbxd5g,Xhp6o^y._ {^ c&0KjhE#;x'B#mK`T4$FLN"ŭo-f]n~|8sF%Ly%`Km8oM/XK-5K^*Tb|$:tnHY373ýz7E{TR3ͺb7@P11E#w]1^yS?d Mo!eр &]T㹂]ÅԝŲ y*Nmy<&r&,j]s4DNMGj7B2d{r$xQi|C]Қ33)ɑe݊aIjz?N-X+tGhҖyΦo9SCJ$LIGZ~e,=%Uޱ3()HҥjlVZ)=k^kI-<XW@("چXMHըIix~RkCr|u_fWK;=ZxC?tߐ1H`o@[AXZ9zԩHiITh/`SVH 'I'rQL)6wO0#] (8žL@XC˜]Q^ƝgK)>͌:{7:)оv7:T.w0;z{zfq&W1_P9V "Ϸ8!_-L?ys/c-*\C^1dSIs JSP$xꚦ !6jq!x8-涛W️ȤTMKy܏>1cD 0Wr8؍@D}%l~4N@A9ᙐ!dc}K3Sӊʧ6eŬq4IytS,#B=q=Pނ=@a.GRDptP5sv:E<51_\ToT$a=F5l,M:7jc@ &Pp#[D>~wg{%elmOA!{I\]S8Jo_S<1H1K\fy+fat@:RSuŀr%b2eWVC͚ (k~HND6GQ:g8d06^Хv;"/b YU;[j=aODۯ½N ]{yygGJi >X(C/9zP]Y`gz#B.L=<g|&Ww&FjGsp{s̵@ 4. ,IlKKSfqMIm}dTDk Z,ՍMrNhp4ÙA@O/86dx(;,Ww֦0HƑ7^گdVP!X]QQ$J4'fcG8;}E EȬh1L0Fޭi3fY$|TT!OyֽvD@dL ~Eݞ ⑅ nG%& M<9qñp&wXP&l *DpC* |¹:(FtZᓯHDOS.?CƃW%ڽ8_b?Fbrґf3gMo|Wi a1`βr+ ySHڍwǜtqMvMS<8nQ UcLwSHW(BHCnz8m-Kn+=^?\ /ËP 4P5ނ1`L߭as(5ǷfUPߥEC|fCE WG sMvi<Dz#7؍qU*mc@kd.;1eQYs̀tAA 80YX}de/w=~E#{`DBRCE{[4Z ep4cDrMCZv!ir-+P& riζb?U[(\ȝ(@eGu6)j+-f"'^t}^$QVWkLX2H+_wV 4Ck\d?1mIsǵx[)S7Z(uPI(%e] C:}]qIex/? +$4St E:qA5og`;-'N*/KkI`Y)RƓx>Q`;/O|FET/l!EѽOOA5e{+Srӧ%hkbˠ{]ԫ A6gWI+NX 竞_1SIL5%E2v_^iC`T9CKQt{ފX'PAk 왡Qg fQ! dSd\RT`U_m+~|hݷh8с­ 羅@*ERB^'|mМZh dABM+>ɼ8#]"b؅WriR]>چj! 34z|SY%b;r?=:c2k,iz#'N,>zc}$FxÆyFE;)A<gHV ǵJl%΍9iTX9?.Ak O$`2Y؏?T`.ؒ(ޭ E+ @VR?ICt!d$H=-LJ*>iM?mltߋddS*uR"_~UsJ"Z\$AVH ~NjѐyW]qPib`j>gϼ2-dI"%Kw\ jfqћ9x=>9pw y9s/e+u|M(#VrkgJ5 <ܚ"ch[.ѾfsI^8>':%}6:C;W@j)1|ՙ<%l`@}M-LDloC^..zyAi U_BaƲl~gEZYq"-u߬G3N9qvo;DqK'J U_Pk99O~{q׸4 `b|tᛝ!BBݽpM=8h XfR6e@eZjw8k6I鶦9! E].j1$NQa!~f|=Gk9TOY,;WF8зœ\ %дg)XMӧy4&Gx%viò2Is|FAP}ΊÂh}z_zEbU(%]WB_rA29 }ॱi0acX~JDN6 ap-*SXX]ycҨJ̘"NPi[+M }wg3j21#;"2]W[F[\5ڕ:5'wAm0p #w6K#*,sfdk&`̏#+~-Ƣ23}eF̫VGeW]Fߊ4C V^}hܗDU>b*5OKG*ImҟCɼ%>~O>^J3vUC/ ([n06raΰDuA~F..5I *1 M&2|>RmȍfBdl80Ԏ@঄B>?lc6{•4lY;̺Έ5hkWOC\i_vb=P*l*I;-mi ;i /> "s'|t @`3-ϐ|=캳 =3 nW+ ol}j.K.`_*֤0XnVO`\oDB096K/F̱w!3gxHtI1yAv'):,uAΈ lH N`]?jMK}_KC\TcM^7-;KD$TmFbA2bu⻔.󢖒ӧljPn=B+A(!_|!uyʻ}3ˏx Ҵb`|OGB@$K%gjO&ZiǒLE-bsl+m=t wZ+?ιUAHdͪLA]&b(zuE/ D̵xgr]YU09kó-;wؗD碨:,jM2` KJ8de6*Waֱogi HQc05ƯWnMi Q-i~`޹3}wX.،xJ/i^*C8!H0:/З1g9dc z)'H LL&?lE%p%:'y-z}vmlw-9g(PcWʌgan}uy~"ќP># )1Dk;KKȤfY%^HJR0Yaْc2h\F} !!IdZ2kxGX4I,;.đc5YAYsL*Cr6Iz=FH{Gupɜ˕9P`J-~&"gh6}ZǓϒP͆ P|Nl}fWOu EB7Cίsj*ۺXf(bjLm;0/v!c&=j~⵾\c,Qd%E~!7p+IF9ywK08GCpT磋PoU4MQWV A'鈶w_C^ 2C&J]R{t`L8tv^DnUtyH\P>k 'ƍ%FI:UމtY)y al v~3C\;'lMVm}+__GiG^`{pY њ=E.h%ģgtBKcfE0}Uu.+)8f9 .(/(ƀrB]QspeVԁ`wOWDx*Ɣ8B?6@&j"LiÖ/6%'eӔ7YxJz,(Cto*OősE_=+OVXA3\nvY2Ug%tzIj\n J wqmFCiV\ 9+` [:H'^,/ܪA(=i#Ww3o^ӳNĞo=L֓fUT@mgstWXM!}ԅ2 [\VR+ki&Gq6݅tX5+Dj3tQ J/nl 'hOv&wơ@L:qK|<7A&^JگZV}+p[{Y$a{ cy%̑,=M]&r[p&9%DN`;Շs4J _ .jz L25>JH!n=7?{(5 tk2@y2Zv.S:6Y&}K,\:?Т9aziNTQ$O.ɡ6i疳 b.ibݻ0bz?a ͘iG0!u~2FsCtBj ܷVl>cH0@\z6@ja)Cڲ.iq Ζx'xyߏS0O |}b}gt'b`1FK|@3%'e쩏ࡉAiEl>#|M*-}2;8fi/Հ9bj-=kB6Ph%dYBiNc1?j4^b/t1gvR6^fZ#x]HǬFɵ!e?5%"jַnEN(f?Wp? ixkZ,h`DֱҢN{PՊdc=d 0JȀ|^oExrtOH1ޣT,!;WH^0SsP`HڍPeh %FSVI%pf&/9TWX3 \+mV2Hhw{l.Hct"u g7]"р}7%y]"(Ђ($}Ɔ%\EfL+[|$GL( L|+\D- Vtр&Ţ=1)Y+"Ui!B+ޡ.cp s푺ȹ~!E&o=(s8 |nLDbvjS%`EfbG?s2Ǭ9?}v G:n4+uZɒf@p:Ǧd ]b-J}NJ{/ˆ/nWٜHKw9#'vZZ(:!&(#I!me ᓀ |LA,'rtRiwP`zyD>%d6+P^S:;+j]B> <smEU#i~ntDĺ56| pZRjl;:}:0 bӤx^͓ HO♈~r`).Ug791SQ ϡ1Gfxő}JqהdNkIu y8l b+t4Mw i5ǭ 0"JȵIfBVj^U#7"$HӨueN ;r~QT^%N/i<@&丳8oJ&ny.!xO ?藺,DJ6p+)QCWk⹚"ĄcQB`"0TsAdD[ #X> ʽOV>)t0QZoӯ6(r v&rxQՃfZ84p-P4>OjER]|Ǖ?ca hl͘#y0w(TľiͧeiC^q@oQ҃$|bf܄e0o1`o:eNmrEm).Lp~wbsb$;`b*2 ;8 kv$q,)/ <|:r,0>ִRdM H%m,`>wnDQmw<}ϕxwO:ɼ)E"(a5ɼ$n=|sx'b 1LdgBߵjϑoǁ~Cf2'Y*YiIDNr(U^un=e Ll>O;L7>=68ֆ=O ѬAE'2-d{%jBeaЊww2$,,Vb QZ@߉t~X+dzE.=gDGS4}XEd $#dl(tQާ%yLڛrtJat"nBj q|)hHvi0B/I"| 6$?PWQ>7nͼko`b3OĞz"X!OQHw,XZGV )eC JXn`~=e]2~ug > o],2..N9n|p`6՘3NV҉CZQaGd4yh8a÷II}9>U3a3Xjѭg[1Yj JrbQ ߚ GE<́m90CeU~H[ឞkQ4S“"%GA~3qv~ uq )b\V\$(H+T8JL >elHFENzP"* ns``(Wz弊mv\3aHEk1oPGu?'؍ 5 UqH'CJm|H@!PO=*Gx*Իl8'~@cUviޑYuE)Uya2Wf?Km?EYT8"d~D2~_U";}dbMU3>:3's\҃x8'˓3*Y"@N*Uj)Ł<ȅexޥ6 R2;NIEn^_Ge枿yiҗ=C Cܹ`v_&"mk˗^m}'ڕ9E֬)Gwtji:Wwzd05ۑC 1B/a/a]2a4"8r᭠kO VG,|\>J*L _1DeVLSފ6Ō+I1QůlΦ}v#+/aA\l'azUQ}n[l/ l}j;1_) G ?!|pIt}XWi'R+x1 r]7{WGt}I[} AX \' mHq_b!S%mXz4`ؔWkQr  9/V%M&P"*~ȗqFU'j_yNTds_+dK= w.+<[c^rR쪥/9o]R~%@&C&2C+[ʃq3vYS2zv~' usH95 IPyA!$ν>Bm/GN}P3WC_wJ漷QH%SEByh[q瀮_eI&>/biG90|SS\|jm=kD͒4OD أ$+XJ 9PL˾5ox\q&x w0<@$ AI6 {BDeiWKS^ .'9\psf71,zl2уg8ۉeO)K٤LI> ,Ft u Ji4js(q692{oAOqq x=W"Bȱ4 ]!'lw;855JLR1vޟHr=,W?7MiKi |Prr4 @g]:pȰi]Jzwm˳fVLg^|BK >|\BC{R}oMUN>ֈSnHO}'bT;zNw14ڗ&J9 c +S##,#$SzƓq,7? YaA>"gIQV4ZS t3'at9(hy[ޕH)]3g% {ks`z2>x.((gGDD ?z?C $hb %Pi~(Frx?1-/̋ ` +GktԙF(.O2nbhʪ1֨n.D<'vP+3*%^OG59ҍϔ/m|!1Gj{3P~C8 %ǷΛK#_lP_J+b@oE~%ǼƛbUɓ;EhOkdS +}c"i/`f fd>zD#͓(o]?^FIE/ɲ BYOE<Kn >ѫܦ;]d-i ]A)a^,J*ΐ=3pad>Z"t? d- ]CziPC`d-/b %JLöBe<+RTߝxzs'B$J2\ )\G2MB )*1UE&"i+Y񠾻H :kli:(vXNç)l's=P Db Vͪl@WPCð(ݍG1%)});!-]R4OZ}0S^R;Og|?Vij'v%"dKH¯PeW$u3l S $9Vt==.*LG$ ]u|NwĭdsM?m"6d L]kx1"} 6}wspo Tvy(Y 8/P^4Koy\NdZ},BITEX]\ޔ5lW|qB5{a~:僂 z2%HP}_7]՗/ )א| d!e|2Ոe*KV4r^Z,Ig;"A%#Vឞ7(2_֘"$eą2Kx|q_Sf9Y!bv[5d>Zu2>;h\͈B|lEfpBr龪f'9=&u{-O1?"y+8JQԊuW V)GV _T ֕,E$@ήU&z>>ѳ}sv[AyzѽOՖ`fx, ]2[_kjFP`逩r3 xڹ@b~Hߧ=nbVs/^E^ Ϡ2;1Kn")/i m=;BOj")y 'އ&hPcE?c@dÈ} ݫ'ɨ.IZ1I mjCH5>sR^O',Ci%@ڑKʻ`E4_)By4wd6.tV$Scӝ' cPT-lv̧(GґLua7!`kx_;))F/gz}/]Ф_@>=#0Dw hfz'EaDŽ(_|:1ř!κʉ t gB?7=R8SNtpژ7?>$S*~PLW"滚 ' Y.Ji2v'9]of-^Yei]DyYOB)}AT_TgGoĤvah~H$ 56芵qϬ}s=; Fw퓬~ZkL8PiCԘҁ΁OF) y?ctiMrǹ}>ǚ21]!n]Ӳ5?d~3wY + Ko?ֽ,ys÷*oc|k7 mbwXSwoZT0‘CgNI_2#;U+U~f.>Ac0ZOD-=z1\ܝX;'s7 5 7''VeP# 9epqv չxc=tUTMY VǻQ սcMw 9C,X[%|Tj"\V{p7S0f-:aފ傇 R-G'Qa@vVR,]F}c$'hl޾v{*Q-#}ĪpE3$kbՑؤz-ԣ#Uӌ3brUsͯ-4jlw^G8}M*&%FT:#4QDuږKbU~I`ԶQF&= x!)+ǤOTzYQFk ]1ȣ?–:j@8Ky˃ZR&Bcp0hnXxZ9rjV 9}]nxs3yoN^J-O /=ܓ"DQJ4 .x !xI OdqVRqݝý;X2uqM,mC$* ñ?,kz}l!\b21!h"SB }ߛ }8^VM{=N9J%2-pza㫨ԀQ>y,&csl,#OoVyZX8kIMF}r ߴvYtF8'޵!J0Asi#1~bgV+?͞# ,7ٟͣdžu>[$@5һb!sXإL iDF/6AڸS'[ۈr-0D 嵚,ޜ(%Nއ9eJb;Kqyfh_j< -x |4M]yZr2/{CH~BM>JJ޶T/H5eqI :T/J4}G 74pp$iT)OC(gx9~4^ؤ"Am`[ v L[^)FQKQ~1<wʵkͭ+/i]4G1O)@ =:g= Dth o[:[W!ui6\ *+*(4̕'56GO֠]Vv|9-7`F&{ JYoa]?4A(rݑa~ވQ+z1>0=p>ie" ak)EG$Laa#ZY? RڌƲG '>,/8g1̇W[:c?Sw_Aāk|NT (U$j,}d<'v(êՃr\{u,6by ;jn)vP9m|Kjr1?(0V#Xa1]<tZ"<SEEa^ޣ#0}H\ǟslo@ } AVH8MtZ0"ϼw{{Ƿ('6K 7,Z60m!96yv 0^f9^0 ^z}TzCwڐ+D҅84߀gWAcT1˧I_C\gù7A#xBWsÁ,*s%H6mx&DʳX ; IDJ\Z 1UzRW*6Me,)1v!2iA+!v.mDO|pS?Q[%E[n{a9uW^C8'2]F /|jm`?#n-հ0cjze%/R$wPǗV`>#"ɲ$8#@nkwK|hZT] 9k/>B2LDdzWmPQNYI.,6ݗlr/8٤BM )nd%1_CQn#'b/8 <-8GLe˽ֳBBڻ>ٟ.KYLE MUIa- (7mn9'WqQܚlqjbkxiFTQgd^!#[*leuޔeBV=/]O8J/<5l%b9ܥ)^ͣ'*鈞l />h[`q+  4LRH$ّ,v?G?+F)<x_ŷfEy9` =pkrpk<ѥJ7]WwsZzM!V~{b9 'gaGSNyvt\,BKˢ8eW!Gdp zw [HBI߷sbZ)_WLk^璵\}k2E|l7xRFiA/-*Ygxɬ6Ψu;$Mf7^$SI)sqD{ '_2+.%MG#{<_Q(*dm0V:*>VFX]ƅZfFO&CB2j*.LES.4.?ҫŞɥ_?^=@ͮP,Xz p9G(Thts\'| ؕLC&THZYc銘Iiv@6#0?AՠtQ(oDd:\siJ4'ue܆@۽f+1o>SDcdؕI޺Mں`oݞs* = -_enN1*,$2DsxtVxW{aS)uXZ/Q<:DICK8e^fGsZ >7C.'Ƴ>@ dau{o6h[EHZ] >"h;+хe-"<;'qN}7׹[ԏj=ˈV S.3Ŏ HpqP2I@Ye:G?3F@Vtcu܂p_`++듂o4ͧq2s8EMOHY vCT F)׻jOd^ HoyG< sF)ES !{+-3V),qnSϜ6ໍ7+?arn1(ъ4}#;bn8V~lNJ j>rc7W,JREƫ>B-&3\eAI%"-mwT+įo'63bE`iH Ƿh 85ܯmdoRwhmbCxϥv|5bs^kLC*u38f%/D#} W>\+<;'s_!ɨ՟2?Qb,*^dtq|x]!6B5;tk/Np2=*[E,ᙽ]\{L8>dx!$ XJ6#hW"jx,0tbwppR}@'JcTnfCR 95UBor~e3^s)Ð{ĺ sAoS̘OF˽/, O)ۿP&h>/fJn92mn8KӃLAM4\H8")3^(^!fHk3EE8mI%=[.]hXwMZ{ X UԴ_ޯ]_$e].2PCUa[cŘ;'I|ח9dx䯺_oY,xs*8Y ;u 9xr&~ Ǟ\xAh'E>es~j9ՑJpk +v{t`]2ʞδ?$-l64RȰvA~ujg fi੄j'I5~։)=XVķA(͘6<> VP:ORNRE{˘{ޤj,B-ގ*RHHU><(h2֕/@ZgAsY|Q.)QE s[8hc {+%fw n$ Q=* k2ʇ C9:h$Bi14v^R^u"ґy-Q0}Sa` YeG=$1<<L$'K}x$AOo. Kk?!n|7 Xc!Mn Rtsn]56Y>fd̜?_gu؎1n~ e֊@~P8GZv8a%#7Z]wcF?H/V,"#xG<~ Ps(}%ox*giK^!V>I&ʥ+|ryVy_fYi45aSqDq,p9JT *)@ j* lVb"`wdW4~lDch, 0+,L2""ȱIbUyg{KҲ !\D8*}^Xjf/,.~#epC_؝%W+>AisQ:%o96&"TBc} 돛sv6VRPg8j@fV4_"u(α916xʖ5cI|߲ϱv\ŻAt~zV$a4yHᔹǻ^=@it:$x)1W2wȭMC^gx`rgF+UD\U:}%N zGKPD9 ,Ϳ! QkNN5EPxNbv+жBT_?:|-N]k؏!M%'wvd'3BH"LpX%>c ; \}]7?t]w+7TMK~{?ފAs)LjqbI.sz(>"g"r3^\fG}5u!(r*H03Ʀ[ ?ZZnߕV1Ch`9g;>)|2Wc_n 4T> |^`[wΤYJ3Z¹={xФ1È0Z9N}pX( 66ǿꃥ~m!-RH1+' G+ (,a\^6!jCHlעmeL_uƪ}Z'#k%g 5| :gOqvwgUp?~Mq &x,XtR{g 0oxU|vZt&i0 fEhsF7ꈯhBǕ)㽟s|IcY:؂R<Ĵ2p$&=he拭ƴ{5d2j[Dh-U tY #ΓYocюsk=YJw{n75Hz_h/IO%=~>͐Dfn9aA]0̻,FD}/#|v|?NǛPsV:-xݺNˇ㉴t$F7>`L}ˈ$\*2[,2/[y".N$%3iqB>Z\:`*(')5`;c,b#gy+B|teW,Q2Y HDyڇrn({#20!%K73q~c8<$,ŭh|܄UZ4rl]+uL#+|)dycVP~Z[t(`D*XC͗ix9M]r6P뺸)LƔͳ2^kv9#$1~cK+lz[ְI4ɞ2\/پʻd"{B**DL7\KVAQˎ:6欼j7̶GQeXa̴;c]T)$oW([k+ǷH(EyJ>>GKvw8aJҌ+vzg>Ci=$zs+bk'x*OK^JLcV 2&ُq\RD\~wWq 3O[>JR(zG<|sV\B|JAolYA/PgV Ih1Ҹ 遲mwgf:BۗZI]$>1Z_5ТmAS Rw &{IB=!{Eh?ho~1 =ښTUЯWӟ\[ƶ]s.!,Xp#.>wny߃إ[R`J}ɠ]2~>@uٓ|2 H}۠vS8~p\>zF$xꮹ[G@*AHlI|11E;Q$/6ZKگv?]Z&p`>?&LʼnqsoR9ϡ_VsDs z)}:?eUWsj]=w@g?2"H piVҸog}NӳBb:H74pH5f!+4c*onӫH#DW 2K=)P{ڋh=>j> .Qv&?FT R3"GbdgX;IΌ m=n7ښKe;P?u9Il(թbM+jTYavf]S9 =nӬ{Cw8Rp3+UeGmKӂYhMJj;Km1)52U$6"g0T@E &>'zdD؉oB³>q'Y9Lf ( =!MK k b?{rDYyh୎̶#@ς2hMl>qca]x75Z)9:;Yj$ꍠkcxD3vfYvH*un*vI|/$ɞ+OrBah$B %yWf_`RH`WmA'J6y@_Aч  O1mI$EEq`"%gI-? bFLT PW-`csP7a{NOfyxӵl3$Ȱ&g,>r;$C F@,xQ;i8JhwJUR :%GnLO@=j|OqE.N`E<:]9Umڛ {'f"z+ƻ>}fق^3ngp]q:ť؄80г {Dl2L7zzX:AgX},L4#zn47R;x ĆlXJ1ʄFX8Ҽ ,kaCro[QlT` jRMӆga 1p3 #=L$cIMFl]0Y5x{Ͽ'`acT#눰Ϝ,GWKg[Y jtETdx>N6_N.I :Ηp@%`Z>";OsDh|pqb"!OOf 7Buֿ}f\y.V%67%xS@YXim2#2`g`3g<ㄞBv6#=d"F q4P;RcԲ'Bϗ@lX EegsZwx$B3{0.CC3EA9OO* ?8.K Ez4[K('BVA ;} A^ (Lҿ?e_hCWP@ZWQY/C$O/Ӑ/QԊA9G{;, ۯZ/`>"IHF8gXgkEuWk8v,WLvoU2M#vB[xT\om4Fa>_¹SȹM%@kAP滷ôָs̅\nė(~Di /ג-ei M9) h) kDw@ڹREzEOȧJ5e GV]Z/٘'8mpqgk  (5e:Ie6҂G.AH D5`0ບ'W(!;)Jzl0AL`[a-}GT?!B*)sYQY1?B)5G!ZM1ڍ\Sô՟%:_sq/Q i@L ґ3+Y4jB1K^,F %I3Ţ[ ٝěŢ`]5bk_V!>[C9%Kx}VzNl?)ϙ"yJıiӿ=a=/cR<Q,v}O[WxxEr v)!jJYL8+TQM>]@'seA!PޕGϥ2$NHW62bv|J3EM$ZEn:'6V H}x1!nuWSXt+y4xkEHlrxb4D-OD!gE!Y+Oi=ڊC^rh*O`U.g7_)Ch aeϬRD!o c&x6b^b7J\w 8v;) 뜆+qi2W>RHLO|Nh?_bO,BecbI J6/l+8 FhUEcqRo]+ڢA੟,Vj{-y+C"OʲǷK"ZXcpgc̺ۃ69O}=P 2$>㪧Jy٧gJ Mb\)ӼO^,ă^W_G`peV+e`Ӧ %C^ˌA8[ >!Eߒ50;\Ԟ[|e*]CS84_OdQVE-pi0qO񝓕/)\{v;\4^u5;yr4#fc9ZΩLҐ =]<ٚS(<؄>#&{:ݬ#UɤQr7L T-a=);.E=9v?]sjm)@VS<(okׯ`걐ObJ)5$h{&F}Kʞ) ` z yW3\IHv7UOB|FATК|\-f߳B<!_=A"+3 [;[Tu4YO[M:y.X|xܚ mdo$xS#Xe?Eĉ`ӂ[@r^|8ӵ8enX80dSB~3lTLN"P~FQc~jT_͵!#MAxS>,[SipqgI0FC^P6gjw'P%I6{5zn8f"tډ/9 :1 `;O2T7bķ+fVAh2$!kXN`T&M_ޜWΖ~mu1E#^3V.l"=`z3n~' R滤ۍN?%2r]5TB6ncMTDIWrWG5B_D|z*rh+ZF,?Yaܩ#ú>eZny`W E E,i6 |"((!+0WsRemw}|>"Fkipֈ S`*O>*̻Ob!b-,HG, cL:Tb?jfOյT#*ؕxP#I0@#f~,C}HDȿ_FM¸MqZKæ/!aL)&tGܩ%Ӥ :ȏ p+XL2als&}KW?.VIORyV~:"[fRG/ZD"y)oNϟ' d/a4n },1M$/Ю}zJ5fqٞ0@dk wAըۊ 6řQJԶO'Ҩ·Vnr3w}*+T{PiIN(u9[29Y3P9 #u:0$̞,РYlShq;j-Z9b{"+!~<BxOcİbp2J( W}2I"҆[iGXkaZ2O\贈1j#1!#Bl ! x:_Xux'Y-3t,\w6>?pWtVH;&ކr u8 ~VZ7OoX_@MBޥRxyз̿_%X/.䀬_M-l吊zOJIއc2OR =jf5D1ZͲzAMhX_cW凒{  OŤ_Fw0_{.2!>Y@žIiׂ`b=hCSQb:,dǥsjH tIЁXQ~bMC}#ӆXEM<ܿ>"M(Ġ,d,d8T K;fBpzڼj c fⴳr ]f;N8JzsI;͆C}I&2v)W-6"l-9=Rtsf]JMBJQ4K-66\jS{*{$dZ]BM)|3?~!cd> R=V }! C!Y>aC͘7/s fP7͑sʊ5={QF'+QxOi^m.Z;}),C[x[Myhd;U ˖P{X*x?Fs~L ߀#KЗԫEێ3mQi@e}uxdӮ[5b4,*˙LD1cEV[-0ckI6H˻KoYdX,|J~}@6h>CV4w)>y$̀LQ,sFxzsB;HW9ZG"BBn5[7o9>O,srI˿߰6)>-ߖrLE26.W,5(hφ.~:8PϩDba]d 4}TYډFb+Vi0Zxj tƐfa -K "90-{o g²l)S.>Bna krO2y$z"BmD>>[ Yrz.%mr|M,F'7[쳻<~?Ҹ\c¹? 6gw&;}%R3W;|Cs0 ֘&Y/!08ݦ].eZgd3*]PSDC8ㆹwoiIQEGtNQB;Q BMI"!ip"'[op3s+dxy7Wx#`v[p]yÕǏ.3O,bac43?J*%UsM3K6PEYҙȫ0C1PQ뤀8Ωy!|]8oQ]1R 3"0⎧\}@NlB MbZqC,uAf}5'sdX=!`Ӟ=Mwu ,pw?^%4QhL #b gfoek+T7GM]ٚڊHl41#.M^O#,ԡ6X!Tl4ɵh'x(B1je>I <>,Td#a9 緟=@kISC柩c? >H8 O}X=pr޳XuFMYO2@oPȗSlbيKgW.!/+} F))JCICr~|t~_>OMAB8[Xd?}tZ#78պl+PI0bdPΦkx_d%$72O . ZuiLSV> j6o3ɤ~@lڀR#VaWbov9eBT̄~Vיu!O)ܴg,U5plIC75-w1q9-bdi~/iRZև8%25gI$adUcÙ}B, INau\ڿr҄"3uɟ'{G1FkZ*~V lk(Kܪ:GQإf؉25=Xfw)ɬF l>Rs֓ܛB32x k7!$#|D"ik7lQj,X)H6s #y Qz!>=dRz$š̮Ãբ2tϵH9iv>os*z)ca>26T( ψd[N֊$,8%#@M~#ӥ@2{y)v̮URV"VyJWFt$o]9[F;  AvXU|XgMy/XfibV*>$n+"vRªEIMf=VmYLF v]X~i1XH[iC8RNaGޟiE12 cCbKg9i+7GK"q1#Yn=]X{urkg9D#>|xF |!\ILֿ9yi[׌ ۼ6w.e ҹ"ʳaCNKmFܯ`Fŋձ`30 ԬGeAe3nAP UF iHTCsCd]ԅ*/⿪:`J)6޷r?ʑ֔G0? 84N٤~Ҿx0"*tI%t_1A_/(0u/sYr(V MC, +QVt#%[i$|~-g\g$/لF'cRW P]D /R;"H>Nϐz iMLƇYAl'E5٩0<%{\ g2:|+o f\Zھ5[W)Bqe Nil6_3&dp@kS+\H9ٚ0}vL KH7&eZcY=B| ⾓p?T:ok2GG?AX6hLH;KS^F>q'O}ΈYIlJ_Z ,E3zTeѴf,V b* ,xu\'O [1<|%?٪ Ugxlc1@揀‚E|)%KRrO;,oIDJקF Nz!kSuFj ,SX,{/5̼P6ǻ|yXɭ*)$QRQzju>f q|M*aɇFiNe{#M{¦.n e חTV˥mɴa$.Z(6W^# `$囱Ǖ}(գu 6망%+2[gPWD |qV|f%&$a\G,1haNGdta_O|ڎv7moq\#HЀf6<%qjQMC'3 Kj2"41"pDFpR>j> sH˱f)VB8}bxf!ѧ9f4>8^{i-LA6v8 }OHIf{*eD=f !w{}\s,INVQJRh,`Cg~=۪ ȐJ(b;cz\\TcatGX }p,`Qmyr籝N .'˼m,J*A[#K鹐H)WbˇH+$L܀yVA˴pFȣI2'JS%B- Ļb) u-+4YH]ϽP#Mn46yH>==Encr'|)-F,$+$z8SGwGUܦE)% a_"=cB͔p8G1 ^ZԸvgx*\;)2º9yFUӿW [jw=KjmV¥a󚺨7}XQ%PK,$ ~)yrXA$P"*~S#z'cZdN9as7pxDԑJS륣K.(W125Fo9M) w/G7VaOn rI.GU^rP۝LEăNΦeA.1"P+#*h>kAuNb|JlBa p3s07u^VSv0]&/tOZ|Y§A_iŻ%Z+i5y~%:'?@"֣cۘbboxQ,07c*%lJ]x"iCQͦqr5 F%weÂ, ey7h(w!!%_HOlpD>qQt} k"qkUջu?l^q::']*,Яed^J0F)Je{ɾC&NJ"}@Z9ů@c9ӂ;T jB&}v]~oqxiT̕8B4'36UJ %%`}%-ȧR!t#Ya`Y_+Xĵ%%EM )k &Y[oxF2@ Nusoo(xQXRYX0_iFa9z^~L 3Tt^ǻ{W ~l? Qh .ɥKErdn0삥摹z|H[>AiŠ%GυRm;Kj|lƯ4ⱁl&|6#@{W[+ ʴbiI3Ywc-Lf1ӈD51X ;ۋ `J_al%8Zr$%BS/9j G>0nHSӴfDYw'Q0 b ,ף(7qvc0ImK+͙4=i0 $SۑHVLC 2ZS ])؜YC0У3Y)}4pLIJ5+ife 2g%[WZy^b6g^]{]r2#<||6)tmĭFb6em~Hֲ'|?qN''iV?lwh\+k)~ӡɼUm$0W哜<V)K#Bb̲qWwL:IeFpcCKƃ>8 j] ߕ G y8no3b&(F9o滽=^AYG%=v}t<4uZ? `-wz E{t;`Y/N<;;Nv)#~!Bĝ\ߓ4@:FcA*mZG*13}q}@ CMҸ~TqF:kьj/yF mS%'ͽa(:Ȩ,1BR\9bgUe!=1+K`ʺ7d3С:M< (pi`ӻ ˛|wNJt 3zX6X3wDF*EPa׊y fߴ d)fbˆnߣoCtƞz 8Z. Y'ϰN dIydS{Č1L%>s&Uu~,xP6=5WTgC>Q=Ј:ϡYGa`bYNJ!)埽G&ى,A~ <[<\ <u'[lqHEeCʁ-igf*x^)ҍ[9s@ ]+οݟ#{K-$ykb[,ӛBdnK2FpѾ.fK̕!S2nȆClRC7\.൥(EA sOY,ka/iGV?~iu ]+R#㳆9>bF@|gPJpiU!,*UBjdtHi?*3M(_Tƛž}̌q3]`q|ح'v!&\:3'ӯǴG a0f+G  8O5 $(xZyIknflRC`qipQ6Y7v L"p` j aAt}SSH8Q~ 9wq)+%ڪPDMiIn`٥ Ϟ2`C^M;}2W2A؜u{PrJs߅z9#Q"W_%UDF|Eo\z1"HNLrNoB'Q/dqNQ- ?Qн6A.S$XطbK.uȘyx(-,qcB'y#M,$\5.R] 'or ͤ 9YP;xT俛(4FyoLMhZdu^xR5k'C6u|0H%V @K2s 1Yߊ# kGn"vWFf~''YX$cV5jK}lxH*Y jt|k(d*S>_]nb\ކgڨOo s}411|ZGXM# YIAEex5~}ϛјcpQ]B|kЃ2Ƃ[ӄ%*۽X[U;RLhI(EVDwj'2k;W_,u$c(Yx%(o%+d4_%4/kE!oz ֹVt%H9tFS ]yTyVF[׾YaBiW"sIa)_;H xcrrVd?PSo"K;eQ>Nak:ڝ,Ï>˟GD_ok6ms ɾ9g (X3+xsH0@TQ9W Ҡ[G|a'slݿxLAu(ÃUMC OCHTp.1D]W@)d5]a*˹X/ x|6Br2lH{ +RўC\kqSCz)o l9wIqUbP4/)I߬z3 0<-I݈JMx>pHl Tx;)H̢7+jNwJf)}Vdr)cTX,U䯤ml'2%=Jݸ˥W%Jh6Ep}ܭx>+si`h ,\O{xН.c=f_N*Y9>52t! ^.lJڕڿj+6L0nZI#m92;6b*cTҍ53)GqsǒG57ynf.,V?}Vha;XX['@˜d |vwR7<(,RUAv=yo:c0"pD#E#]!8?zh3GJ5l^bW2~\AA{9MB_Utޢ]m |[p8AEkxxބ1 $Fb拌0*/p49 X4&}E.k8췽ĺ#.}4BUtUlݛɪ!9'jo58Kmx0EP^ġwq$QGȠ9.ڞH#y‰c끤eA&uU8#rrLK&o\EǧWYRXrҋ7$jmJ6:ImQj]"M>T}*WYs9i8]E⚜_͟pjJVp}!0r1bphYK RC$s34SLdfu]^} WſǠS#;AbGj[]V&(o㳿G,$^f>ɑ) }&Pt5L;2 !a}릫FUZwxnL:Ӿ#"W3 -:^ zb@#A%H 3+At *Y\$|Τ} (r4L0$#,gA'K1Ǚ9@W'E/h B6PJNaruKO= pME#Q".t 0qk#\QOЩ7Ǯ(/py=X8ْI(ڙ :qdfl|Hߟ)gh/vO2.5?ͱB|[B239#L\RjͰ A"7t ua^%E#Ih9yet`<'/ a *:b>$|%h2X8Nqg=v ")¨hH|| Mf9J_V9}5A˪kJ>MFVyV T}fjSqOJs{*=LȒ3&J(IRgq2_Br>:HxiC p{G0T&{!=IR#G& ֤_00jz?#C*GڶFE֯| (/Tm2mAr=A}e$f+DPO30qY/sRZ7b'b$~i-g9)>h}?P i.wq+Ƈ>y6gt>9RrT*FO)՘+YdLb1u XRV('yj5c&]BShWGx;5rV/$̡q^&M,k]̷p?G>0[$#U)| {(RTWsG]_FWjJ vlCvӃ^z-mNtNuWaPF3$suJy4U%)]D&21d̀G_Ƨs;g1-qb"m#צkMhWL_\Ms՚Vz?qq]%/q)F+4YKa*S+3Kt4MD29O XvIΉX,)E&Ψ S1ip#Pd>Wx؆{\F7AdzPn $IK^ڐb|Z9RXI ZW2 ,jVeT<47yΥc-kC[|W.$zӉT D&<2|u>Vo0?@l ? 1 bEfi]|p 1XpIu۲ڊywtU7' NlNRAI 8?3zl"y,6^ʙ՝jR2A6췯>Jĉ7<՝jA߿c{+QKcֿna'~߇6U2mx(} {凔)>S%tlʥ0rLrRnme4[5/QCI̸%Ň"\57O]~f{w#v.B(C yԥ783/>|X`1M9 a 훊25Ҵ):}1 v+z޹!Hf1%zN qJ+mdhu1QtL@Iz/q/ۻU{QnX=g40,>\rLcqf4ɬ}^U#ɥ.ئ9e+usAW`=~Xja1񜤌[d!QY24!?^;@BQf;zvR1Z 3#r-\JGs}G8((gπ~rwբbNl#'dp~¾.%)lhmX'`bBY2gD^Үg"x66s'׬Ѵ[fNS v׳m}&3/8~@4Kc?&!}eJ[%.`[O͈!I Ɂ?6X}%*idz_ERBbN !VF!yO@it&鱳8jO2cfL~orN9Z%,';*&~ƥz~9)*!j@~Ч5\dPUR x|ɺL̈RY+ @)1\5Cn~DSm`qՃf8J4{S)_+/\IŀIx8ۃ2 ]RSLln;PUºcNϚ-M"49TtykPwl;1ZY$BpBG+/h3M}EC';rq` x6xFo2LW5Zvゞf^ޝ}e+.FTP?mY`S dS6Yt@Huv#=<*>Bӎ>>U<'A?jh ̤4̾N kXCϦtO8դ%=us!rW_Ifר0cҎ,H #StﻌrqE[Շ:x4.?ux֫6@tm-=|FGu<_zC6> j-HRK˷u{Nwb8Lk ~ՉQ.2Gl#\R5fGG?jLD!Pg #'*ԗ8KWܚw jܻL)fEuj1K d\]v=;YD殢>sIzʐkRlC3Tcƫ#I2k9ˆ=D#j^Vx5X$ fi{FWst]r̼s)b(uA)W$FE Ug9\R(Q> ^Ļ\.t 1?r +'Q?5w/$0o+ta,Gu*NgF=:} >GzRF!p|CzWU[;a0qqv-`1J@e1~7%Ke܎<盁`@:ΦD }i)l߳eJH7;w8eD=2qXes v+O{wi@\;.;i/MD|L`]&#;kP>.LNf_(/NvmׯP e[1 I}!DЏ04'y+kOza*'` x%02]A0B{T_S Ĥ[-TGo&,W 4z9Q}$/z1R;E<4cNSV\i1s&M倗xNUB=fh LQ-4[,|C\@&d.?cjq]HLu=*fts\4Rĭ^w8\Uj(qHHVot H$'d%?>mF(MjE}<\5>AQuP~":ևS/YC]p\3mels:O,}\h[lw y1aB E}oQh-cYOY> UfPFɵ|b0IJ3(4`7nrp4fsjYCx.lO8fl3*@>UlYaH#Qt"8 G+rcvFgj =4[cjTά AP㤷v0l]BdLDɉ|a=ͥ9/ҧw_}2ɰ1E:뮃UH!㌘I"w`FB+pe/fo ZxV 8%1,f|mIZyGA_X[ñlŹeK "$C4`:!O(`S01p 3^pGhZ|ψ=0q6#G͍6paъ*Pю#1{Ơ8Uۈ)Z=2%0tݻDwUtֆIIT>U4hG [J2_!3vh bCIuj]*DGGͫ}PQ(nZQ_L[3FTS )rL1.=.(zdqA0÷\4Lk{#`>'Agqyȹ5>.͢mSdW6GiRrF!9q= 'eip4F>@ڐhWiroPf0=$x.+{TLakn1r<ߚH( $59 rؠ $y>tiq ǐφS6^?K6Ea!Y)=EC[CU.#2 Gy:k$R7l]N$ c+-A'<7|.;8K{;A7|0}M^Yhצuu_13.܌CoOBNH,ii*o\*֕ޜǜQ%֊pHEmßRˆ?Q#чt%C܏`a#CsNuHe:q|\FFGvug,"O/)Iie:mȗ.{pe!ߋa9^~_2cY߯ρ0SΑAF<:H1ͯ |e]+3ƐqƋ+'[P~tZ ={/Mar3-Wb.ގn%,,ޛ1:oEx&y>EJƩֺ ?|lܴ5PcÄ C3:bbBi?P>$//<.mzgB8έn_~ĴwCid,-1]i?&΋Aa~mA˺+J6rGM j%!?M &\G$ d ܀D`G]o*瘨 ; Yeӆå Rݾ~ZU6Dyq֒nWoP~|6X}05wE r0}̱SCaCtD-KaYǼFY"a?G}#~C2ǃOjD2RXڢ-MrA5JBj1%JKN eŖ?'QR,;8'"drܰD"Tַ?s/R&Z:Gd\EZJ1y v2B;'2W),SoLIPF2ed]2g؜ԉ?zh.^`Vڒ܊є'UPz8P3nިu,I{/38zWw3kDl+|Dע`qFhAv5k&68}"8$u EPɢ2ItnUQ!>){!C݃O<]{F;}. tp໸sDN8*}4k ] 4)u;&TcE.YYah|k4q uYG.PCtalUI'v`0G eoy+{KZ6G|g t9y*|]$yV+,{CYcYxOQ{ATiů[T! *, g$v$wa|U&SKDVcOU_T&ϋ2xd٧%=ԛNr-t by uf]k$&.?2TPZeU~1>zt%ZoyPDg엝>]Tn6f/YJFh}{ie;-g d1d8[W t/Q,E "nӥߦj 6BX&GHYW0ڮijWyPCyQ<ic5v_ }]?ݿڹI|j5p4g:- 7 ;3)y !C]~0v0N&C`TA.oZThc>Wڥ `$vikHwtl`3P3ٗƨ% D)g&TK#<㸎{_D?VH /cZ^1L:a^4+gzowbU$ά}Gc$>3khBQ'ձļ;hĎN mŗȘ~дI3-8zŗF&mk(Pp.P!=<~Cd1#n sglr]=l\u+DtO&T)wmo+Gb)9 ΋ģ>t#jOXr=h"г"HA =Y[ó4@$"! > 3צYj,<0Z4~s95q@- v[Պp d44܅OnHvаYJ1Id@j@5wXG+s g@\}]| fJjJhG͌u)%̻~8p_. Ynd2bߟ}Õ ^5^yS5=竿]@ ԍ!vV5v`zS\cm `MC|KVα$MYx;T~MnkQj{ IeWR)Xr*h7 ^bsģ4A!~hIFf)a+}.8QfMI}]Wodg4`-6Sʽ1~wSk'yXM$X}*g+L >XyMc EFcڴ/K8w!Yl_Jg⵬o %.w8%ǘ:&~Nxt>* )AtY'5ABM~{zm&zU(Z덓iDۅpgn v~@N1nA5Ә1i&Ѯ(vBXBʂ$aSj8, v2Tp75{ ZGzhCdV&yU_9ǘ saYܴE"|* Pb w"PtfnJB{X!M7̩]shD+؞Cq"p]+t>RAqoEqßAUVPiͺ*XT<cVW5ah&_.}гl^>A#8 (K7Yñ{.9g5M.,3/ԓ)]׺yCUV]{^1-bO {7Qy5)cwri5LkUk6:z )CJS$rIƊܓZt8L@!|PX>a#y*30FX," z!xbt}JһݩKv]a[cק}+Z+RH,S hM+E6HP$1337E|JK=ڏ޲Ǩ2'c[mkUp4& 'sݗ{_ZA+}WE參3v_܋5!V>iף&2wyq]@4KSc bc <)iYSg Wj XU+tŨe"!~5?@i df6pRCwJG#wHA,_"KHW%况="7AzYeɵ:{>䀻*mB\o[&Hf[O#ֱ˥wN$DZ4,dʇ Pj1hn"3{*c`y u1f ($8.,zL'% ꥦh5y&)e_=Bmfn-GȴaFZNDb@@2ͩ`¥wuyF9&O&êb\Dž.apSMԇuO*mMuˆ{-93i/YsP $w>ff6>Zl^wJ@d`uGfL8zKo}Ye/ 'zBAi{?c:Ķw 8ui*q<-őGÇE"rڍVD_8/2/Hr2=~akD@J:ZȫVgX3e&WUGWf4IpiYn83+ ^")2Mir,VfX.2do!޵o;l𬕼fm{/.9g ʑKμb 6.kmG,W<7Jȶ<} 2^X~l1OV]4:+'.o@sU! M݈(6 ~CkƧt̿,kEjmP]~wÃIyP7ȡ(/61I!g֠r r8 o#.;ǂE(I}PbG@!e0 ZZ$W>ӉkT}&|(eIQ-W:$]yVl00۟Z'=Lq{V9Qnd\tC_ft5d-C(51z `D}RN*lZoPcgF_Hz͒g6 S˅\%U*b-c#O.Z*] 1ͨ=ß4>A`e 8YNOȴ!#"Wa(Y>C^TmJ5>NrNjkiuEq^VNxIMK.TRfxw_#6"ܩst1y0jo 6΀a ?-E|bg[.xƊP?ˆFkFj˽F7{;=)-Vr,=jYh@<Θ7̓waOʮD/dEd4p=bUu2^%^~ J: okHIwvrงkal?lC.GbhL%9;"$1F;:bw֯Y6WH%ry=-Ex{\4]/TGyq0BN^)M;(DC8j/j.գw䜗œts2EgEĤL9ΗqN%E(nCt6߀gBѠ⃜ \9ssjL窋2՗XrϤ>'^rlV!ږYb~8+U٠kTQ?>/كXy&/s})8 qvUJ_@?Z WLgjbE2$ʉK_vIIʰfZY#@ H]A"i۵ Ht ZQ|,,B$ r1\fz_'yha 1,:;5"_{A)e9Œ}b'x[Tg"z!'bCiۏ1~)}A8>=J>gLux\R2s.G#٢쮢~߀Uz[J4-(҉ ͳĢ%n8 ~DŽl]e7gF#F]V"7Ā YbHrf^0OI?`KSV8K4 %0Œ+ό8$bDoG@LM*+ڧ_ojiʢ!IcQI! @[-ƻ )B_^3w1OQW[PɝU>9{$oT9N1~Dg]n9M!s%OSMd46۠܋9>㎎,ddU&e3*/eW 2Y3WG9OqlR qa,ht_YJu~<'?'uvXgխmIOwY-$\L쥂B[3B96@Һ\䙯z]jp Sy, ~ƻ.n9X+Y+zR#&;IthAEde©bD1d}t[[;Ѓ߀i?y5-[ADâI t.sm(|-anGej+'d&7%FY Y4FĞy9y_2G@%x!.(g;e.Ȯ$FOYOJb:=%wUHǀhRLLNĥC $[M01j z0lxV|H:ŇqƆ}LAjU HR :[6\ԷᆺKɂUhUt 7û{a׊<!=Kr8`?AϿ~x_Hmx27LwGt|Q rSa~#DTL#ЛP=O`U] nY[2l|~dY+;VC䁙YNI".oQ_z{ B;hBE ]|q~ ʪNbj!զj G3<=n<"g=z'OL}9XD]'hO2%v!=TSh2Zp8;Mf H?*h|ˎދ9:xuDWR n iI3*kjI23?`O!OJ[ (qC`:W@LɅZ;/Q.RvW8+np{1@dSpR?f7ЀĐDgt,2[BD@HSܘw T a#ޙ?y6Yu4L7C56g/,XR5L2bR:S$I-B5u; bQdOPDk8e$}P!aXú/sb<:YZUf0${|A6tYjn<#i]')}mVʩìŽ - iI C8,3UT_$ER;HEĄCݕ{yp\8}oB \#3 j kuٜaL$,XN:|2{̾YerU'\#ӆ)_(#z2:@5;̶c5VB|ˇ򝛲GdÑD9AME7JRF;KQwRqZ?kFY^%?K݈u~gauʧʬOO&JO ?_+69,$.v6/cK?>ُDMH\| 1?Nl]u]'aN4іe6<[+v|O5Ե٘Ϫ!gpJc1uH&S 9d aDӴrC ~~%'fa h+2!.0P;xؿfV6"P;g9sH]7ԛ[b,3cfT"klnC:XݑRTQ=SQ^+G "Y,®Ҏ8GζjMR,0O'ˬ*==Ph;kp# cjެ7hf-ȟNyLV^=-IzhU6#EΆOX]4c!`;!َ|HI,_b7z"vC齟~R_g`oATxp R`F,D'hdDZ\ϣ~_~Rzik!'IL;`[*Orj1zJQ~৬ryRPķ;>%iNRfp6² wsxU" .a}/ҊDU85 g"BpJviSaGQ U8҈3clf/OI j?#[¬mL8S鑂i ִ\cgWzA9{zl#Y˪~3g.E@?9-}ԮD'BG (9}ئf{@_H푞!"_Ԣ?KgHb;LuxjonML$>9p8d>|մ^Z5d'ǮĴQ:$>V?쪜a ڧZ~` !81몈WP_ oӨSijrU>e[ӿ UI4-ʷǦPp}cY2jwi" 9N}mihk#P qE)9S]&Y=F-~}O " XE:0b c YcL릐DG󳓸q^6D_|D=#tU!=ҝZhK|]2-.kl:su3~ѽ~!X$n7M ﮎkkz K*rp<1F1c(۷rT),/"ió}IX[@HQԓ2?`{ޮбXW3_bEIkNuKv8$4GVPpRXP7x 5{}3L@?#Χf3p'sz+VM:=KpY!k=B~ gWǻ<hcBnKfЯ]T1-3-9)BfgH;8qDžkew ŀ"rd2`r^_JnJgT&v ,;AP KTJ+Qb=A)<<xliAJzfz*C܁У`}aYj6'jW+mTqd׌in&X83}V4IHC+*z|0!5c&mic])\9AƟ7xfmp'>mqp;yvݍϰ $ 5s'5"wfgmڪ]iA=#fhNPԺ;!RTٟEʶƦѕK²3' ){l{(ѣ5leI9s#/<눠Pk/ z_Tm.@ ?(~`~E}Z;> $:IT17=2ɯ%٣\R DY)3X7DЁ_ uL?*qɏ|D|@c;Bh#Yz$Uj$b8u{*~|8vsdG>]bIyA^݈!k},d_CP]񟗸7%1,7l9 qK;]tGd^Ijk_ãƛPٯL#!KR촪R!i]u!Ym|Sk! kP}Sgf7(a}p I>>7_<6w~xvA?ˆYqas?$yTZҰsѧ }HMޔhWR X} % ]蚿[h3v*^^|+;vt1p]Z_2tjsJkZv?<uDyG7eSGm^pBMoW\וmw?˝Xu<2@Il*-hL̓ؿ/f0 %pe mc]G{tGh|޳)1*y nn'1oKU/lubZTFSFH[4#I[ ttJt>ZGm*l;Ո>zK$NԎDh BCH}Ir'<*{X %{q[ĎT>HyC TWAt99"&Ej[aۅ^+c7&`;Oh H>!~=_ؚ?r'%cB pĻL7[Ŕ7&O<<Zc/錪bw\_ TwLJ8fh.x`ߪW>2UܠgI MlVp܂KA!u-3qGf mJHkwG[ˤθ݅*6ìe.ZF vL1wXJ^&P'54d73 1ƽe$P9A#Xo0Zq8XT~c<] &~OJa 6Y|?Sgeh!T~Dd{p!#r$1iT hb ɏ]ў 孰fP@/ʵwiF~e}\;3#v /CweNce[9 2+a  |fx>И-({0y"C$c}0,g>JDJ)1v漭?:UT1-'H^3@/ygȈזw؛Xߟ u+cʑq-v#@/=fgz|. j)VKlՊ@w^9t2(Ӂ_,vtVg r6_a,TpRVp$ cAds(%NG³Eq)ť5n'vpE'L.ŅrR,yן>&-Y>x9Yl+LE++roes|LxΨߡ;i'# XAAE8ҵ_h|#kڷF`uDyUCƏebw:͌p>>:݊q_!5 IQo[Eey1s9`k! ?GH݅ A-sIr Bl:1/Yf_"_ёd)׌.Xq4Հj;TR>A&Ga>Aqڙa)i1u3BVz?pzNjYVw]H*=d)MOQ'ۅ>.zik*cB͵8+&g9qKbϲF"fR:X~d.1NNnQYe܎'y"ʞo$:+yɠlM1VpF2ڎM_}ڮFagXx3iVL @-7O#Cl̾|96$a:-~n)+OQ %GuKcbcX)0~[v8wLbWu=7מY V:&~ta}Zɒ')H5Ie )ay{KΦ>|M|;4i3p"<6Ñ}s)f.ɯ8Y'>=8\?Y1ѧiT1|h,6T-,$iOUEǶ?2.?ԷjS[o:'/I^J6V0ɰ0GצPX'7Cࣟ #̱qLmT׊q {;s;YA>|ftF|[z*#Y6 ~)xC%QE3pg{|6Z2ÂPIf)7jn҆5ӷlD}0/c)%87}KBfڀlI_c)+6Ytc_Ec _75cOh^$pLF*Tc>`xqqtV$IRO _etpU2ݕ45a 壠zpxUuzM1^-S m%qA2퐍;`ac8roEE.$yHٞ>w5y+\H\7K\q~66Vg,s^1,t?CD6HE]c5z=`o +VFtz%KS>t&[9YIO|$Ž=ig B ESNo/Ӯ5w7$D3fy Jki's<~:{?#~<+pq\'}l'X0!^~< !-{ȡf㘖Z1@,̝ /{*FId)%1&.nFk8W ڻ d5Ύ(~ƻ< 1AnRwCuzy~DSe쏵`>mi0׶l{ߍZ$,3}22G_}(gEIjN3#LaL}E (%ƀD!5W]1ge_[@vÜCTFRpK<FÏ1Rå̮G$޻RTuĄGnoch 2>85pϘ7 [ W"td~NGp rkHrf܋녯S:**b2ϳj:wnD`KS\ĉ_[k+Vaɘ_ ]J"j[[r %nt?V6c*!moE!.p֦QUNhZ &ږHp)ؾʋvh>rllsx-ӗpijn]{ionCCcCx+ _#η /g:`;xzFH1Qr8%)o=k>n[̕? Bwރ\Y5#ԇD匧๮L is[$XEأ\fѬ艊Oݥ"Q=pOer>Ѝ}M}5rٻx)M*h ޻c_08J ߙoYr킷09C3,F8,+O+:l~Zws/J1r9`otna"w!yK̽-5 j.z"mǼfyk-b`HjaQ ֭K',b.W,$x?vIx2 R`"k]C"'hS.SCu'f]zDX-zg*ޞj_ *: SjxI U>q '3d]8whҏ$JΫ1${>CbĐƞ2:ZI9nYZ=TЦLGzg7gB5o8HoLSWL8%K:Cݹt(2Sa@4B솺>U9CSi3εvc yCӹFB~Cv?DCߌ'J?x_Wu~ewE*ɺ\]CA "] %Ei T0': <Y".jY@FlƜf<`0Sd56`葅F#:µ"(jeeK-?v߸n.,[CfP䛌Nk^i,ԝ#?\3E*G&|L.0 _55Eޕ'1a n{BS㹃VrJsDwMCrFfUyO495Sh!|.` .C _כX(MDteOҷ& Sr[O|—b g ⢹5ԍ i]? KFS|;YӮ}vDLCjm?[Ȍzꇇ| E [S,z@-!cҘZpebCwk_sOp*@0,:z;,])5T>k!QNi Y1[~7#\sw㩲WC4 󲢑҂򍢎}x?:j74zUs4* 6 X%K_=:@.a8'i3c#x.L6F ʝ}_ͳBn,)!B'{" KLx5S}= 孃'唣#d]wI$v)l?s/zx鐟0(Ú0%- BEy o<)nŎy:'\.G*]n23Il1^ϥK.ZBeNj¼a>.;KC Wq@vBC1_QSn#L72"VI~†lxPs (I.h|u:SZd &ڋV >T _I{Ⱥ Szd v8y^a5|fd\nKOeʷ_l1,H1c KZf{ڋkQ.[ifx*W휁Hxxŷܘ7Auѣ'+E_$C#vLr%hP٣, !‡5̚=;k!8tc7mE&sc$=m0 <Bx)6"YBv|$S!ӂ؍_~.VIKm"wSfq?\MX浓P#ha Ln'=!|fqa$Xiz^[\B$ }uv`L9XѷqDZ7""io}Đoܟߍ}f ̳vS<^&`[ltgV2T;@iGyM 7؝܃I$>p~Xx7p`Ɩ_̗k55u~;s螿xպj>D`&) )If~ ?h 4Fr@q 6-f YGO)`ltϢ6]/(xwO$sX&5wEF! F= ][oBO[) ,#s8m W"gn/mX)wi2Ԁaet\CFQ*C?NJzF9\Vp1xeLlDCL50Q5ڽ 듢iEԤ0ǵE' KfRtbdWĶ1Yp0lFɪ`7;6=~+sv0j([L$_ /H%<7v vZ751' L|S(fT^R4KDčR/Ctk?/# LH\[$XMRQl'H?&בSʴ21ӸudE;+@]窝8gTnlGV1tq\U2Z0j3%N@>Ȣmô ˖]@3bt8,aB-5H?8&#vib簮@5I:kr6oq&#g#bq뜇])6\R;S_zHR^뜥}އ]n&98\9f6Er45X'=4L5ͺw"C4CdsBX;{~6Xqtr]'rd2qXCFҳh# P=>3ˏ^#~!)j跔ynC.vGF! `7=a+'v[ |X3YIbpȼV2l+m"ӽ+onϙsi%H0 y jgyw_/4_y-$ Y U1v)nd0CC{>h1W* o@NG6.w4֚'o܀ÂBiq"hg (+G]Ä+\<}]eΧq?@q>lcF:;r>N *G2mߒGQgOclCƃ[1Ѣx eJՖg^\ 6O @RbL[0.@}ͧw d}z=NɁ>eHښbd/ 1C÷R/Bj';nU3HIzU8}t XTT#F|Vbů3XQZǝc(QX(X*5"- BAz\[2#)Iow` ZNk2V[I91b4zdvTh`5Tp6](o$s6S6TN!+٧EVIm} e3!n]dMOrH"q k'י#0L?8KBoEAp1a UkZ{aLg&?]:ۍ{Orh&cwb_' bN ٪GWa2GSqGˤ8qK+1}m)}ݙ8w)v6#ٿPak}.~ͱBsJ2}lMM )pm,c7zzZd( 8oB 鯟$#p%k<)Ty)wzG1<-5IoR{gȱK#/!Ca1u2&HSb{ jlA3 {Ze%7G\yVXTMK(CJLj~ g~fme!*YNR9*be#ŎHU us'UXঃMMVGTEѹ>*Z Ky†aZg3*jއC]8n!Y AJ)m{M^\j\0q@jYMY!ޏyB:ix5F2r4)]s(.Rdռ,d]$N"(:75 ё*/oM&ɾC_cKT[,"b >`Vf*?% -s17iQ_A:X,]jF7Yrꀴ9 tnܲ~*b ψ\JWT*r BѾ8t~)*3}"(75M#e;V D0U8_Jˋ]\_h0h]~>, Ϗ2 7>Ys η:R`Vٞ(<9~DLRG=6-}%OWՋ #QKxutj"s " 'uΐT\͗KbN'vQc?.:b&6@9|~/U0 DېzJ9VF\`+7:`O/^gta) %'hW&:_ Әq<_C S+q^/]8|> b4HNh=ϐFJ-5>ax' oJ jG=ɠ)opƷmj+x>y*hgH~OGA2,kO,RLk:;rt|0+#ݻ應U_VϮEp͟S) _ddȣɾ.gS`:JOŠB(#z]Ln8Bg'ߏA/9m:58[8' CaL}cOj/˰v o%6.5"Xzu_ǯ?ǙQ?3׉bЃ56S];g#н+QӚH=ǪqZb>-)azxs`/gOm-d.SMtC Tp]~QؼEZxp~̲oZ\\\[7^\<]k .':_ǫܥ'vѭ/^/0K9Nl>B43?t&6q'^E>zg\_}h+ρIbdWU&WLs5ҳHd&"1})%]K9즼=gP;[ q+u5:3)"^DKJts! 17^5Z E.>/1Z:3B2_ {X}Um pT֝-Y6i8o3av!BĻa͈851vӟ *}Vנ+;)~nZ$tUb Ѩn7E&|7^+M뷃gEk f =Pb R; ڞyh,UIBtM.6ԣtT笖xT#8zGCvnuvKCBN׬ql ºkDԮ2VD,S080m =瀔%e}*jjjqgSާbi9qDHS[5Z\?^+]f"zWUke|7wnGi fD@cW^ %E=`{sΒkxͫpBl\@նͻwB'QιSlRJ>2(dFv _-;re2ėҝ;f  Iӂи% ѽw{ Zb$yF ޓԆD]!vݐa>T<瞇BB9,/n<<.6>=⾢w! 'lgqbk e]LBpurgGI&#e~n덡y _HAPcɵZqD os*!Z ]_p.jL!eMDVȨRNͧkpZ*#XqB-VI-EvrJ>'X$^e!zf]P#:^svp2`3kӑ3[Ո b W#qJtV%K2UMV쎂@@i]‰Eȧ?@ %dB\#_Օ 666SP豔#1Ԁ=Pܧ#(WCK~J総oglf4W؈nΪScD_:d}ޡFioȕɛF̄I)Bi߯. ;jaKY8}fя;8J]dR'֋.!@ZC˼0M]Ɖ?0XqE2䭠C9b4PGF׀tNxOTKVP~՗C4|>"y*Tk*'< 趗ƽOcCT?Xf̓# Ⱦ҄,5z4jr_g]ULW(x{;cIaJ4L? ;-_ٕIYx|75 akQs#6eo|,TGMaPT\, %ոdm"YsZz{fx&M˵h>wl!b*okG-I0pFKI29͓2jM]8.׊"G/6sŝ FSu>c[QD6O4`*%p[er$GĝtU\1pL9g g\VdYgkȞu} (;/Po4" W[Ή@en9Mmd_1>;BQP"N!;~Ҏ!Rcq{ ) q'}1V쨟 :W!h4 2C|= a-lH(O> fʟ9'/#%~XUtl]9 la> b(iLX(M7"EIv$KCT7c+'8LqEq![x=2zL~..}.tF[J 1e)ȗ7@^ڤaYD L\BH퉜,ݠɌ5>ˆ.d]zhSՖ3bL"LUAr_G@u)~BZOf#duDc uQ |XĨ^iv7lAFd#!z1,Ř:C~RagH<Av ].k׬xZff_2Q+F9G{,#@X[y.-SVTrR`qFPi+X&>eULFUJ "as4ihJx-o5ynzr% SjJY;=+ӻmӸaBRϞUiGn%. DGlGhV4>)P $Ɔ%52=.[U<\k~ģ0Y̬݀ԍ[ymPe[ S5/Jk`zstWG֗C3f) FGZ4vތR{hCC}\'^Cm|lzoBr C c* M<>9Z\D *s,Q"l8VcH!z WI6\vHi%pˤ` g 1o]$z0]J#$/av>8q[j@7P΁_(-P3 5<39 !UL.ߨyg_L8V ~hi|TZS a-V'$$+{|9a6iҾô[ :4w5Q^!E7Lq5cAY: yh%wsѝ%i4 #NbR j#?cr;ꯋ @"' gaMFU04Lܲ~gC ݉jLFT)F7>U&sYcȋgvYD xpi!lQGYR?>{ 7T+匐u8I*r֊|Rolj86-uHCPlOn oLևzY9?%MpP'QtsH֢;c?ԧ#nh+Hm<8㽑N7fz2i{# @rN]y l0I}UӤQ]A-Ǵ|@a3Xhۃ/(o =ϗy8 e߸u%6NIA̔"+}aFe;Ŝ=,e)@]ϥJEhN{!NJ$Sd-Jbpi]qy<}G#,:f}0eܻ9shL| wXW< FagO`C4vb? ])iw`~Tq1]Nrƨ>(QփQo~I)54S/PS*u Z*(h׌^O#K֢/aDYT􈤞+9 @cn%@_F,[k -RxFhrA/KgقiD7&TdV(+4rymqb,1mYw(Zwϑ-EszAX뱭ɢ>iD)d*V?nh ==<^Q ?yC"{,cLKV,.uar8$,Ҙ&@hl ck"Dbŀqُ 5vskh[vR0`LcTE> ?0鼎EFTT'ξX\d@6I(`‰P =w v&|/^U'NolWLC>WʍE ܤO]蠕o}AX&<&2ؒF\MWH]DE`"*MRN¥p/C8Оh}coVG)W9-U ,Np#"t 즍"}s"x9NV Q> Et:a&KYF0 7LN)~1|*Nɺ Aƣ֔C`|0Gzc5TcT cSmcp;9:W?#SBWE#lT<2g6Ey)xtG+ۊKy|mtg)g\Z°CY|o]y`I0^u_g>f!|8[9Ne#yR} d;g8:>dYʑv=ڟf>NCbvwtәXJW9y1xb]I+rF6jV" Qɸv1UP3+?t*=#_U3b cnVY生Ɠ%y@ 骟3ݻw`qͤV=ùq)5|H ,+#2o[DN.ޚ JƝn<i&m& >9P(zPR'2Y҈{(MѴ@”+KM?`WNVO^tݚ  UW eb̿Jp'@nM85\:XY#U*';\̳G?0[X;-v#X{}1sPTtRQ4Bܚ5cʵJnDtiidިRa[^1}-r}6Ƅ "|)eI,X&YmE:C[ LWƻPMUk*w4J?2~:3W8eq,ct 8+K#]Ƀ&{;c5_&,[2M$P-ug}羛$[AYޯ1pڞsb2c8 !?@E#:WQ&+TSu뇩.M")_,"h_-?Ge5QȭX 1|L jZEVLP[&g9onr8}uF1b+M-"Lu;*^>3]x>MAԏ]| n2΃~K0ʵß*z.Ygl+FW})NMuP/T#13!=C HN3"͡[. M#&"ClܒY7DG%bwy"e *Cv kB)2k,@,iɁG0ZSrbE=9o;p$A_L r{pGk9ji)-DW"@) gd4Ms:>6Cz rğ0u80} U){C3} 3Z fp IbeqX~ԇظv Սr5MGֺ}lQP RH.ę4"1 㭐YQ PL ߗPVpkz3P|eaSj,hKRU5){Qjfc?]pGsEz[2С3'ìAms5$vq=kL >ݪ xw}1 qOl ss5 jH11NՀ"m*7L#z&gCɰ)E)(`\tb{QPߔ*!N q\Qm"r5K-vwܦ}zdZbYXUޒ|Ÿ{߽vv7b ƻZga!g C`] O:T7dTlڕ3Ϙ@W1yR2r.zQja[_{jspIU^r ܧOUjx%T28tgnǬس#< lH³ݗX ʻC?Xe%Z3~GЎHO0Kiۃ ٮIhm(κj"FYgD('٭^g׍t<"o~|Bs QSޜ/ڗiBk׊*T6/>VL,V WFNpյ$*sRn uYBhc N8dD` ML\H6l/m訢\1F;Wӵ)kPwuE-֙E ubXw){: *`ϱRQ>VN6z|Rpv :+~HAi"\͈OyG*T|JUӤJ}2{ѿ`Z%~VnxyC&)L7Ӆ[ +=OyL59SR 7_ȳb1^)UƸ~}wdq3 N,3XY3&[h7-8E)r"S٘'Q:@p6qErx ?H%|TD)4ѾNzȂA9ija l k&/@ŷCTF|͡IY`c|:0gY҉hQ8²>F}@6ɧ9JDY"A3"& &t=YN;4U?2:W_"2#3C>сx׏,bV.y+|%ZBń?] דփM1EFT2(-.~JIhgt|x]k.EƐ a KN 8Eק۬xwvtGC_aS Z =2, ?za1La{g?~kd'rGV0CuCxBKboD K#Sv k6ddgNm I<Ҍ?4"twͺ@mxd]gNjN=OxwSDzXr'%|{J!o gkHRy Ryh?qf-Gc]8s^/ː홂\>eI8ke&>d/`3v=\JFWH;"i+*y ]`s÷^mX mFEM nwt⒍ydkT "ԥ ϼ+BdEw| AWJ` iiAZB7LhqP<E飠[,7xĝOn"F Qjo9]>9dVGI*} ]hԔ:WjfxS?p8W) z1?D?+"CI{J:훸rWɳEj +g,; hih*`q?Fxd>p|R kPkƊ-޸Si3k}=AЃ荓/pCַk.5-cǕRs8zG r{vaV jJoejS4m m% *1[NE|Ýɪ2*RP<><Uⷞ5"}ȗbFF{=>DuWXRvl>kM^Qr&hZyʳ`ctF.wI0.V}g=WkU&Q2dǩӪ|&QOQHbeXo[Ss8=|d@Kx֚.hral?;"}ǠihKv1g+U"?E|m\UZ{̍;iZ?Dc*Q=\B͘ElɓMV1߰0zs~fBN@fl9Gw.4eZT!BʨW0;_?Λ&^0瀬p  #ihxgwm r$~c,74J(`:@[ Ssk2# x>eͤDo=+j)mfkC6m>ؐpWJyAcSa6ҋ~T0xL^67ƒ-t3;(Tz*;T>!M}m>ğs1ZwN{LAESa&O}]Q鳏WN bA]v|m^.SgĴojn ] %Sf*ɐ*ffXEqrQ\:qf'/^ISIo$TzƵ Ȭn1 @[xiyv̪%W>jU7tF换9䘝T Gi=3fV0a<GխƖYkjQ14ÂfZ}KٜUJ*F< ፺5rvjbu 'уVэ%3ib0[ĪcЋ>z*EJM=Zg5Sd5_3ɳ̗5吋iJU11im KsZi:4mhҝnS(*uKLNB&qK*ӝRä޳]d,E+&JhÄa 6?KB*ZOnاF. 4SqC]^b*W- Z MgUcӠ+\ Zg"/Uʗ,FRŸ<7a_clo?Cdw?ƅ~{įZ'RLԕğԡ-Ѵ̈Lr.Z~r 6;RT`p#xc7'u 9d8m_b}9r=3=O0a}Z6GV}ScYy|xt#-?+<&/<8Qc:vcH8D? Hʺ_4j2\{SQ'/cs}88|AhՕdad+qB>j=UY(C7">j}__ -Zc~K mvNm&ᾤ\ Z s>UkJJ5d(4a;\\ja":51 Z47wrU!Y d9d+K .sI:&JXNտ fro{X+{F[h:MS߇)f'`2l U! r?>}!ȏ)_N 5XROOLjiŲ`'򮾈u-PH>fisgA8G 6n90,lx֥X攁)`Ly(j;;`ENA ǃfrx\VNTQ El.c GFm$.Wu\@u7H9?peE&@3e9RBHKɈQC~CWH`d0W=YU6& Pj٩.)oJ(ÚofxlE"7=IH"6۾:N%b>6bE2-"c}vZ.֦ibW rV5iO  Sл^g 'b"r3"9]@uSd_Szjk?Gw7 X)/;<|AollYN6Yn `4]wvN)0i/Jccv}o!7-[we)m!uUr&z|]xt98,Vbj_ g[L3sV 6le`mΪ<GtͫW5͜WK+}}Z戊RvF|,؏(Fv9NK簯C& ͚u8*k|sЪAKHjwB;V%9o^u\ûA.!Lݸ| rݲ[7^ 1Z2x7`KS>U3MXp; )2Qu%TpY 9d] H%76W~S^_LZ rWa/.zA>|i z/zXoLn%V_^PrJNz; Y="n6V* v \S Jy]ݷ`zh(}wDwq}f>ݍ󄣶/܌uxbXOƛ@ͳu`O6=-d;LŊAuR$QAz*lKγ0S4dnØc:"lWϪ )V"OR%h5Ao+s\U@.K0bET5-(R3LZ/Ņ) v#o3m)Ist4s4jvy nvyxǷTCQ e [c?&t j ٺ %#%MߧR P?E㱉XhM@2(BF$_T:b\۰s󓋒9j3 N@9-894Ʀ1;㯧JhAiu)\Z^dު׌J)NHesa/+7E[2YcpO<Ęq5 &UiDdJPn*~Ge4{P.8m}։u); 9`-Sb&{TqvkJhYV1c rGFk?쾼,pb3\X|ʛ]ZoxpҌիebr2jBQ1ڧFD,VF 9[YI$[U#4eYMr"6nNUCac$1/nǔP{ҤYDb\F>"H-օW2-8KBBqR{:T2Pn"U~•oI Ӊ>N`0[䬁\rn=Jy~C!IaƑi6@&XB3":8mP!6%%R^3oTխog:6ä8`: j~I-Ӈaij8S2^~ $1 ^֕yÀ sz81IӬ9h:DpD+rvѐbhչq.=hB;(qM/Sl/W0IcY N]KNr/9Pi)8z&<3v+(ѡ:FK5o,vP=Miʻ5碪l0Yr]okm: uS$_Ǝ&ű_S4$|,i!b`eFfK+mN oc@>6Y߭y_Ϝm;/gݠ%Ֆҳ3>e; !u{#";y:4ouw_Iaң0i;r]L&G=br[)6v}QpLJ\0~ k^HB](f>9"(^,]JԴ$:Mp0]: zr)eZc^\EnL=f+{KF$ 1.(!E9tpTu%+dP3,Pb>:vn`MH*1+״{ 5$Ŭ,TBJM"?X\v^^*nGHѳc(꫋ aX\D;XiXX!Xj MCIRC:,h> kl׈¯&!ǀ>UY94%AZLPΜZqEK9izn i1\]OEw,8{2 -VLņX)ۗZMKKXc]2АTq="XŬ&{/=Rd=.d_xAJP&"KHI%o! y($di!aKVB jnm2i:%* sNFe<3[N, Iݤ,dj+I PQi^4|Uv# :K2׸_.90u,IݤaW13C")| { Ӵ (TJHtjkAJ!탰  MN c dߔ2RK(7!n b;p+A1uڐPMۇ9bM&C0Kơa1!-hޖ1K3E}EH~'`-SWHѓK[O!H\bJ]ƴDT=޲)G%4&շ.X\_X H7}C>j&AZSEuH8nV40 {N_B$0 L yiKsv7SIRMN[惇[cϓ5>N|dQY1 tҸ2j|cS'y3u@S v ی`W.y 侲. Veq ـIK -ɺ5R#7%m!jk hVal쉜u. V4d5BU&ʩ;܋}XuP/#;j,#.:q`jϘPtK$?t o b_Ju<F.o" L,HvF0*d%^쿖O76.=+2-%uPUyOطGxF2H1 WVꎽԴ@3[Nr4q:d%XͣaE[=S$Ó!s8U܀`js_ 6<(xJAGbǴ8hw9Ȋ6}4,|@NnSÌ44:t|usMzÅ&-ԏ0Nj򐖭Ev_d蔼M ; *qP1 <#!a @.^2Aے^ȵeMTWLd"Լ}w uWW{g+I,r72ӆEGR+َnΛG+!=ċN7L93@QYG/>~Ja5KLWpw">;o&T(P5,IǒOI (gɢG4nF">x~sypH{iS}1 [**O#GY"z180%4,ՌUMkx$e&b:\{Ĕ5:ܘ<[y|8QQo9fH{ ^Je_U~!Un2:zG)lBWNJxjˏֆ۲%$ɀ0 d$d C12܀u@I HHSpfJR;C0@XT $3i@#|G۾1l7T "dC.BxS'L될 J01xl*(C{h?1`>s@ LmqL5hӞٰZL05AeBz Բ:j1.-B6Xes7 Yo<8ڌF^ه|_hy %ߨ2~ }{A Y4rن>(Dm3D|t@cl{EQEu'A99V1WȗU0roLj0mEy qW"!-ߣRm ?gpi⹔_5#,:}kKdw-}-kcnl]4|_ _3|}$)$~;I+I$Q"Kw"(8O N NYp~\+OVki`G3ߙkQ0p1l"p/:4]1э&4ŴgGyŅ>V))8^A,q}`laoakEkhG6)@eo"N `iJX;݌m~c]")btlLz%~8nb4FHJ0{ ؿar5ўK/A'Ag1oy_帹m"W0'kK>辍f;P1H.8L[H&- 044L#CuJưNnJVsdèwٮSx} =@'Tdڌ%;YsU8oxly&j(<Pɪjz.=Bf}Lcp䬁aG_hA+ݒ(hՍ`|&[OZ !8 NeR`1jcLTUX q#6gDxqe˱ʒf6jm>IKhS^Зxo>&r8 +rxa7xʛ^M.&_x_ 0&MOIk㦰%-r7sMΟ`ܤUdiH7jWć13NDޏ" #?!Feoo-~z-eӳ~,,O#?#G^v?՗i~rWC5ivWC}WX.X-dBUSm(ГmFܤ  D<kF\-ض ۶ٞh*(mfo5k~a[tLg rE}}h0;Am*R^qy;J̡Ƚ~/t%%o,Aw S댱И^5bJm!wC, ժ'W!Q311 jg_dNn3)yCbˈIsyp, P(pc$n|b\  oi 5MԳ42;>g,vlX6]-24QUZs[SŒ&9.;8OF. h\28lxv > ƕYn2O\%S˂xŠQf!m| iYJg^2qv D~ArGخgI-iwv)x_]'&eF)c,!&;֚Yp8UPےO~{ZZv?76@֤Qi򿝤ܕg(EOKۥJYZM %Q\as=Knx%olz \:֑;:#5sF#j=Y%j˪XLLuZI{z%;Y(nb @wc8eZpf;wKAi8I!jǴ(A?} 8%M%Qѳ/F!؊Aovc=FBj/OṊ*.V4|GI02mhҊy.3hgT +c,Z}ez&z6t ϳMCrdz5zЯŧI?jDy&<+b7ߌ[j5lbWNS#%f8 FYt蓡73,9lRfu7^0P{:)+Gk)Uz0yglfLxr [Ůet3LPPIk͢YPV*S>x*#ҴIme>>.y|ʁʑY#=$C0E[:9Pj@͜GsLaU,މ@P)Od}q(%L&0YRN4bvm:kҬAD9s4vp[{fs '5)Πo ,"G7ޣÉ̎sKvd-}-kcnl]}m~o//>i򿝤ܕW*EOKۥJY|_,8? w]+V[\o ZÂ{f_nVNk.Z^ƲK%VnD$ƿ.;@Q85~Q,Jh+)X2. jɈETg||6(6-Q^A:6dK:"v|A1ŭxfD ?t$0%pUo>RA*ChOH*`? -Z%$oVs\fMNh^ ?ICcFYwF@V G\`>` !7!o,!|/OERPGp03b2QK%Pl5ε"RE=ZW= :Ȼn Oޏ 7-/Z6d$%B^Hq6̍$.Z6mD)>MIM[v?}߲޲|g,>:,Elӈ;b+bO쯼>G~Z}߮U}v?og}߸|"W' A^3X|`r zxuE-t0MKRN&d"ߏunR1[EXŷ2&5Я+f6*x:4ilKdI|5LJDDBNW?vy RjEDzGґb܇{**$nեЍ 4,+4&,Y˓1,L1,T{oBl GCD3&CB-UedaNécS&t!g6ljxTe vw81+)iM./?⨻+R1U6"1ZTҪk;^uК3;v3Yg&y!T'#;XiR 's 댈ZY04JR̊siRvMxhs.RS:BAICReh_U m'./75 8L>/p.U#b)eao`T8 _|SAT^UM`Wx;zjrܦg{%jl޲[[8gYvYg#bFl_}F쏼oee?/v԰e4S#рT9XI$8eS̨L qC'vƄEM-Dr,l_ND/\i#K?-t%%0jb~zS_Id\04cQjɩG5WwDOz6~Ksc2U|p$ȟl[,Z2WeA,yQ35: &"ɽK!mt%İYm\;z!^p~4/y3_pr]M ՆfC(rRd KYi[SluJ.j i7h$aRܲ&M})LL% Im;?.T$gW`Z:aZXүC}}J">|MT:c@.ClO>j}XCҳN@o1ړBv^jm>rhbu,xlňx)aAD3KJ0TεBn}Ckc;{9],Iu6AeE<+e%gxoNxӊA[^g#KA iNVi48 ΉU*EtVQ|XM):(֖$d˻8~]hTz=u<ktS\NԻS1ʍ="}9*ilk ԋ8$Ov5vƶ{S39Y>wJ[`{xMnVn0_FjY>"7ő_J045BLvTQfx{fO `w6:7)soz/-_Kvגגdw-]Kגݟ.]Kv__]mlmlmlwmlml _+|+|+|4|;|]I%)%)%)ܕܕ&)%)"qW)R}"*EUqW)qw)9n"j &뭇,9 ]\~\r^?Ϣ#~{;}U'ܡH8àmT5OCy%UOÉxb mց@:mbDfKc[rr;zPsUd.Ƴnv7h-[FcOX#*O{L0'۩uHRE$]z39dGƖ=%U._1="P;_Gb?1KBMYLLH Syei~zn;%i!L|YOڲm,~*:!mM!:2UdCK:HX|}BS0^̀N̒ E882_7XBp -'bЋaRnA]nHehKtO\=OjmfDS{_~lZݴTA**Z.{F;4f(NC:%4jx(;> ;Ov)Fz- XHR p_r(l $5.:`1G8&fleB/Es通AAQNʱ@I*BKʱl RD%~C7l NM`Vo&+.QF m\ma]y਴aWJ4dfnI1FF²Å vˡB!)$,Q1=T5ܠ_4NGU]PE<ÚÕ= >hVpJ6Z6NYC0Qr utg9z-eBG'/O6rcVP|ejWuagL2\X ўS*1v#ܛo@2ml-?7 UDܽ1f6o@l#-eG,? (> Ju۔>joy޷)kz{Fw}5[p8~ESg3jDZf`.s ޼ƿ-Tۧ劫3| %9X "B]@ji%GR8jl9X5Gkvplܑ 6_ LRkE>#tBfL)$$o]WX8 =  F|Gm5-e!:9@qGY:JD*Eq\rlD!DYqFo,XnVިv3\X9Id@RiJToRL نq$ٷ_Δîy9Nl.rU<Տ) rd߭HG_0`Ky)X$qv\,~y`Ĭ=Y+K}dkd<[/hke!MoE2[]9g<,\Ç̰c"=UOQF:bB;,GɌˎTL XS-J.qJVki"48Qbk]KCcsI֗PУ5bK%^o}eweeݟe,쯳쯳βββββӳ쮳쯈"""O#"+/+/+/+/+/?W]՗U}rWi]Q%BPMԬ{(ZU ]$g? u*L|Yba"5MLv** />6&VCHJxi:y* %%kZZ%kZ%kɀH;AR{Q")9Cy$]iZ1+ rlkS-4ˑor6ۓOcEU=j|iB f8 ץVBLhPз 2Z̭C:%$,SƲj;Ɂ3\t ug$9i?RQ)]6M据G7_Ovm@+b4&1c˒S3!t4#τz8>@Tc"6t%冪f+zJ>z3*(>χt,)FݘXGJ0MԝD"v035VIM-t%%mlӍ{ckc(ڲWV5mVT9 @ taz.w73XzCG)~Z.EUR$a3& 1.װރ![W Gs;,@)TCjVaO"_"`V1䥼=Wy\ Ö_> I}#&1TNͷv_6A0`8ޜ艄6e@wWB5=j7n̸oQ-1e@ZB טRTm@cY4Ņ% b=v!"橹q3,1fшuf=IJ8Q&4 Z602Aސ&; :ЖB%p|~`$$]rpO gab?ӌIK41uYXb6m坢L9/eo F Kx2F[f,fHhŴ$IpfG6*va5s݆,zfT쁒 'L3sYA gdTWEK$iv0{HI-o[.8ARԍ/0gElό~)i-1d?dcGsY n3Km9T֩@1GxO4ΔmD`1Ɨq9 GC|a?2[B$)lڥMhy2nRA`e6}A؏yz^#jOhU)CؚjS]e3-4ST|m5yea43 = )* !R/HKSi}0_by/BjuKSr62aF/cʹj3Hf e38 Ş%(l_ve#@#u$ ITzFQA]VJ~jl@Y~ko-~z-eӳ,,ϳO#>#G^v?՗irW?0zz^r혚eSԹenp#0eO [;m|}KAohJkrl *;kZrwl>jPg1>̯t$.ԘE@j.t%%,-yJN5MKv-Ö)9׌N@ a9ؒr+BB}e̅ptւ@0E5Ŝ3pӲ4_[(wI"͗n-ͪ#ӘGWn8+%·6!K9k riݒTSF~i\4u~NQ[1#PX4-sQlը&'inCU(P̩Tl$TdæuXH.g5ɠ<.b->6WSK%]C_NTS:䪈DhɮoQ4 ŬJL16fR%#Z"rnf7‰͂;ڽl74!'̩VDb4*g+Ed|CM0]RGG"IJ Ax%.ݵd䯍oolwml—igHRIvrWr_Iq?-Eo"*EW)p]J 3xB›\q`5)?ޒw2!%yFӣ?*b$xB ׮7sMyRKV` 3Ģ1 LCCdG$Ũ֡e?vN2k4:B+G%ݓ5G,ҋf:F-PFL]Xo/]K_Kv_+|/]}$o')w%)>JRv)R}"i~tW? Ώk_ -p:It΄{&2\`s@SC":?ObEx(vVl?xT|͈A)7 ЃtG1gJT2H& FFŢ%Զ,蚧ZkKg)muIl6!_H]T.Gy}-(6!E9ߌ Qt([5(mH^$8<Xfe"+?Kc6-ٸr׈9c=u6m 'ޙ}119G?dd0 eXLRc X}Q#0+ZHcŶ30[M5=Icۖ8$Ԟo-~z-eӳ~,,ϳO#?#G^v?՗i~rW循]cv56y~ÑG]0QF2r;mM{_˖9soE[(JD; ߓ}k_՛Mc4,₂Br=%K "c6;Es\w?,c2 9Zf~ ?Q:%ŌOJQ܍|y ըxnWRgqĻ‚)VRPU@/BknnOUZmRNj)w>C1Ơ!1ʽnRA&ۭI-@B9jRzTu_*^B[ KdOHTOenQ]y;_[<>f6V?ϥs<~࿾eӷ~--uOϲ쮳?Gv?#"y4/3/T_՗]՗Ox6EvOAanEa[䥛 $^1 [rO'J_0LtMCZ狱2+q'8fA!Y5Uh%kKv?]%kk[3D3PP'zmۓ <KGr[Yo; c՝_1-g{%pq y :֮[ngB_TAͬ00%<"g}]MZ$DsZ c&i*2Cq_o` #5T,9c8s@i MOk )ҎxMa^H1Kc=޵R`#C=,t:VnDi2e$%*re1iP1YYQcӸk8㰌8z-!ؚ݃./Jt%Ðy09M_odP*hp5̵zxEh: j+#aK lT!O$ThN6`Fi$|R9 }C^H;@}%2 L*j*mKvdw--kcnl_}mU]MIӯ ((ڜ[5?w{B"ė!0!1RDGiFTAnK;0+v_()wznR/(e։`<Ͷ%yG62B0drmT&';]/QL=%R)$2F!SSio!:6,BL/YIS|~i?S%| zHIkc F-',;5ؘt||vF%%E ځ#sAis :sfߢK"WCV=g#`xDɗ2\P0Gx"isr.J6^x@#:6؜ d5N D IvnsΐZDSAD[4=@Si)E}eѫ)0⯵ev0̕$<$0Db sz:6%g]⵿|Ov,!, XGDjd5![4LRT8֥['zR!x(*b%\Jig@*72{HG}IU!\0L] {v4W*:}kI< iӗ7ǘPD[ы=]04ecQFq oC8~_Kv?]%kk_tcsc/~;|+|O$$>G)~Z.EUR?-8o*8gq?V߾VZ΅ gV^A1d ?`sוq?9BJ-=lP B6z1S)MF%&3l%&T:BnǽkK'Zz_@!ZQ 8e<΀'b۫m$Ѝ>svY^Xx/]bħ?2K Y_̇AӢ۸W~ܰMA6#bL_lkDGmd fkER8D|zn5̚=%ziW'b#Z?fG MVd^ xm p:RzM^BРELݗ04xwRTP҇)^=@I(oMt0dbRBt_Yw0y6zuQΡ{ d$&FEiu%6պmW iv+N +? $ Kao-~z-eӳ,,ϳO#?#G^?y_/vV_Ĩ=T"p|y&ՠn(b )Hf!l3%䴣HLj[70Aܚ$4EK ypRh:c8;Kd%^><kH'Gōe'J4R)G6V9(d-y"!g|srp?c}OxGr>浜m 6b!CV&Iylvb[c7l!SIЍ%gck_Ǽ.dH+;uӚx3vYSV^cC}+Ʊ$|،AkK|##CrwV[2KsKKI%Z!#1ǼDmKD%כ$M%%{ZX%kZ%kcc{ckctckc/ӳ:hw֦6BUhń!~jI2mHqW%mPQs\&zyXVZ>7F삧Zm—×—_ __ _ _OחHRNRJR#I+I;I+I+I?MRNRW)>Jw"*EG)RݥJw"OK"[WѴ'p\U$&2FkH\IFƿnN!㓋̮2 9xK#?je;]Ұ{ [3SoqK">&yG*Q\ fT(X)OI)eu3%65i,Z[>7wvIaC1l]`<,<`ydV_bÒ$y!좽tbOen"$o귥[ݗ34%s~6Dc"D$DZbn5YVSkELa|pTѻt9j)jAGI=ϡs;٣P ij2P%Ke=4A[y@:{+d`pC Lz~*-(%Y=<N@ؓIAg.ph h89M硟dZ"nK(kCv_k;PV;PXNyr% -5vnp <ִ +e1P}쟨@FSC S1hB=s8IRN_Gvt`8ڌM_- [muA$%,N? yAC{ۨӺrrmFy^ Kx#1Pl ݬ kG +"V\a>n`=.l+`(y>9>-Vl]<͹Ex "/O","m-쮷>޲޲߲޲޲ӷ쯷쮳?βϲβ8:>::OϲgDlGlElݟFlwElweݕG^W^vw^vW^vW^vݝT_U}]՗/U_V_Uc]5klwIx_!,΢rtDj4|s !l#z&g .1KOVm] e7&k. ȩRm9׀9MTHAN)hj3SaR_+T, -C& KfcCWyTJofv7\"s4S2ٶ`&M Ո^b Tȥ C5вmؚ;yJ0l&5K4ڄPWѴ+3jRƴ5rTGJF_]dD\ MRsۀa W˖v n|6 >Uc*]k@z827f*nʶZ)!\2(5=%2}m;s7ó4"%ۗGY¶fnx---쮷쯷쯷--_geewequ}uueeElGvWwvWWݕG^w^W^y_yy_y]yi^vW^W>/wW_G՗/wU_O/wU_S:7z^H/VL(9G -4xC=g ='́BUI8B\Ʋɦ#6hpBD'\mIMע}'-EV>%kcZ%kO%I0I8Gfmy3F̗7 r&ĶlkC]K o`'^ (pPa:9g҃13QMjbۆÛt_u)ƍڗP80W+$AHO?iS1'uQZtjInXmYf<,.ˆV\hgד"iH,-~Pk6Addn-YyQ˗pKB_,R9ԇٿH{ ];h`:|9|D=3؅}X%N+uPϩ5gh[ê!#NdӢGu{TtZ;mL1K@BS: hĮD C-%H:A9(ˬ}q&hΓM$y3[|,4Zg88> 5I"Z%HRQD_KGꋕq]%H](i9/XXP^=JR|Vʆ|b&$q]^Bu J-8%/XftvxԬZ|y3B$SKd 9"Xk :RFπèS8e/z%'3bU.Aޖ{ D:),ʱX2I-pח%%nlÍ}ckc×>g?LRדHRa)~W)JD,UFyF@yir4HL^<  naE>Y_mgz/}$G)̀Bl&R*շ](}viL +\A rGY&#jjxNvF\6:3$rS1X>}VlJT%>ei"%à^'XЛQ#$f c尔J_⑖_7/zcM&c2mb69iD}Ftږ#ܪHԩlkTMF~dՒq;ґj`hNp$O/\h/4Śl&ᕫݺM76BCC>DS-$).kB/M1cBHsot k=S53./!2=M~ա?M~)rJsBL0annlJR><"ini "'H[Iy_"\ ;d +If@ZmZD\h*hCeII(|{) v6ؤBVV9T$hT"ƣp\"yk͐m!O(UȖtZ+f0J6YN76xT1XWDʽ</y+|Dƚe/Y :AONYĀZ+⣾J$L!X{hIM{ rփUP V_%2Tbd9X#$9w}uPK4U7,nzTWD* bitoǙrILt6e9Zw/ t2 SJe}I,+E`u@sh-Dd}ԣf~A)WкaR‘*5jIU?}:7-U,aP݂Yp3э,7M9o@/Űsץ@kb)X Z|jo-_z-eó~,,#"W^?_՗a~rW>v^cv5v_*耠{ VҲAw݉&Ar{ݰ=l,[:B#5u_(?g.9Q}8|w|68/}Vݷq+$q /b$ufuhΗ+VdŞ-y2})_dމoD53Υe/.f ҸQa~B,LV<ƑUcDWmrh桚Bm:f"h1TՃ qdH462N(x\b4uFLxeS+fcOT%y@ʵM"V^(N eq̕\[PU͒sr؋#t9o$ 78ۘj}91|mi=0aMch%Ä\o<6`rاkRl * ۜ3VeW60]Y|ݔ Fڝk}kنGx Dsm'XR\MS8LYEAz rkBu\'~1(ܣFڔo=+EJw3% XI8F%ܰ"nYrcN -HEᚚmwdQ/4Nc(tfU9zO;7!VՌeݒ_s=FT 2LeH\:#k{o] W,ASٺyNF/4Ƃ%F4[4iRj%Qr/ lEy})BU軩.!ymcY7!^^5M EɷXG{jc1R)y Zo/_K_Kv#|/_$o')w%)>JRv)R" .B-@b{tFVPSNf 12Gp&^yg!:BD~{@w˖lW4II 5c|!0+4=PejTk:&SY!F͔g&QbBd n4SMSR9H$z4Ŕ6w~>T> 8k!͂ ّp,YQI%/Am f])9HSR D Nӂv鯂}_ kkZrrSv`2ce.bp?`ݟ'$XhYO> MrҊ9U)9VVl)5cm&(⭚BDj1uIx<%륢gS^ID?hQ|2X7aeTdՍ|%O3/Snl;ҫ8,Ī[$E3L&W(GVA $cH3T@`f'!9o RGۘ[U,E gn^ Kd(S˵<{d2P̖Q~WdYgUQT)o1/tߘ# %K0f +Y+>,ʳ?RF/il?g@kG.0(I nf `jtAJY߮Ip@!|]4^l8HKĢ,O=EP8]PJ)C:IBuㅿ`I5Kt|RHrQB7a׊kJ?GlKGEj~` #BYEQ"3^Mcf7fMOk~.oį\4I^{6ߊ|4@c6G.nZS%V+l[!bMho-~z-eӳ,,ϳO#?#G^v?՗i~W?]cv_5AayMjl1XՀ5 ͌%C7H`RmK3w\5")ʔ9D0r_8@QqmDQ\ҨK0Zgl <` Im`.d c`&6`L}3fl>t3h jDa:k͙fϤ?Z7]y 9?薫rcŮl~RRFQWsl=p$K6#~{*`35w#[?}߲޲o_ϲY}uYvWv!bk^v?՗irW?E}宓 e/v d?:=4"ϜKj0v45T!ZgO/AePo4$qj|"7\_m\RӒO~{Z\2{)k C5#]0 ZO*-mСK| -yr`0`7}$\/QBBQ]b \PzD(54s??dJ^Q6JJBN;X%3YN\NRM.bP=y2 q[u`GgD* 00ϬH€~hXQo2 E*_GgMv:*FIx 88_oxtQ6PElXiFMRMKHr,ϏPz>TAtӆ[U.ibVoUZJԚlawcSmMQ362SjҢ9hc1U_IJv-Y ^mC>־P)Pbb~|?'.ۗRcYgX I >!?L 0cݚ/O{ZZ?76xR#LK{}#GkZSMd:iR06K7d[{;k/y`YO7ƈQGF}%Ѹ z 8 @AII6@(}3E6؟)ʥ]GYAAH-eKu;J%gWgTOk9|lBPI!Ooa @S If2|9ۺ!"K.hgPͧ=hmx p7̡R~,HA*[|):C Ի w sX'}6H_g6nk=䖬+2}9#Z%&6D})z.RV4!)NNfVpyi mLg0Z{!E6X?AA+t%M/3۬ⳳlYR9oU)|ck[zXK[f]:,"VQ5z\ed%^쿖O7>7Gr? _ח _I4INRJR3I}"R]%US- n8N" u0N#b&-ڬM6-MbP;yx5 %X߲He)']"i:U8sG{+q0M6>F}륙6&/l _@NK3xu.;wd- !#qAhA5'&#WbU85RsFPx!s3Ώs./;Q 1;\_h@ 2$T9 ɽ U iYTPv/Q=lc8Yq;{ґ2C74w~/%ÜH;>R.ũp}5G4P-ݶ7\9i%IYjSpMrn@? 2FvzJZpB/je xC &i6i0g v/A~[_zX}!zzilmY9:Iτg 5F}2BI;R0_% Sa-9Cˊ&Pf{Dw @Aw!YGx9PIL3KEmZWɶIVuV ԉj[{s!7L5l.a>0䤍n^+vBeE-y贯mi]IXz yiღ-g=7h}OUGRq}=i_^ .j98t༾/tPS.+ T/=e,Uɢ>TU]`rCKrja_&s ÀFrPs2%IQupO\"vM]:N})/%.ݵd䯍oolwml?—iWJRIvrW_Iq?-Eo"*Eg)Qp NV^+o_+up D9j3y}U_nvȦbT p@Mяf[/AO=B%jHƧOK`%dʽq>}gi!d9Q1.25FqY2m ]rC6p7P -GecFz;bKyg"!S m#WCOSġre-%I45V vecj:#vC<[3>"DL-dN" OYMV4yE356V\ʼn? 3%s.9)X4ǩ!cfi3-aNb;f-&I~ K'?JĞ

l%#\ȡ͟= bTVH"R.1Ted/ ־v"B/-vpda6gi݇.0*Y jTS<`:j;3FFV&MiN+ؒO1ٙ5eze\rtD&ۃFi1CiE[EYqJprƆ<"mn}{o[[o,eg_g寈~oGlEli^ݕg^O/՗/Y}}5]5_J[h$Y+-S%mA}N1>Sg85K6D7%\3m= 72mS(r[4MIgIO䦖d,g8XaQo٨ll7c$>Ty)FXd063+g,aNFdWA_UUQ)S 4XQ3Z6?P%۴d,zY,Tn!gng}P*ĘyQC&F\F)#i]*3re1nK Ƞ* e!i4HM9S/*D FL[U@c )oY` \.C|"eO.4B 8^a)2fYdJhb4@-[@ʟC$?צ'*HnKFx{b(e o7)}ɹm3l`)З,DG| ;h# &\S\W)$TvpHrS -nBa~qŦ~!4kCh!`B^[Z85VQSDM}-Pya$^I3}k$tX3n-*;q٧2(iu[~dz |?]q)ZElQͧ\3z[n1mqlLkB1<,zQ}9J!0-ﵫw"T&M=x0L^ KELRW8lO׈3F尧Dr2]&y@?r+1y&t&@7 %(TR<֘)%`Yy!4Ju'O #O6%z Q8fNP|[K`% oHck 9R}x%ltʧ"=yF:@ vjee3. '_O遙n\þ<0 4&^’ % ΖH5P%\tyYJܵ7RVQ_ۦb6ݷV%d _ $)+'`Q ,bnaU4~`5’&2ʧ_T %v=.8喀PPh[ӌt?,jC,Թw| +fPiab}Կ"O0@#R.vp P5πoұ[[2A{Kdw--kcnl_}mo//irܕg(EOKۥJJ+goVt/? րZR跼t/W6wC,[۴jmC:(&$ģ Ro뎕lOK“,a$8`6Rf|F>K= D(lB^ZTz0ΐэBܨ.xkf:]6Ce0-*?ӆ1ſ0v*C>‼4lK+˳Zk0,=Mh`"Nf0?=[sw{`"<yYᝪSe7%Gwj vDK;2`h~k+l}2k:\(*hf@[e(~Gn!RUE[48W7{o@Hv5 e1 Jhu~4FӔ^FEMx3"j`soL]1VlRAY]7}QH4i bI8fA 9 K(FNRfqϴBRs1h2Ԑ= eeFѪxy˸ę7xoI3NPƌȄF㥜 įv4 ID_ӎYX[5WSRGb$n @RQCɲ7)в ZÒK5F̖?̬FXYI\r *=`^b0 QSKhbU%#f; $2m$CĠ:)NM!-t%%mlӍ{ckc5|/_}$~o')w%)>JRv)R"_iWC kkZ!P3qGR>O2LPy΀iA.3䨺"̏ǎ2S7NV*җTѝ=Fep$EPIJ+{cqC?cS1Sj |{Ч° Wn~۽/q~V\ irjm과kTc1o`4P/D2s c ėJ1U_|ib/6l+ au/.)&nv<1ԓT 9yKTI*@@V|a2nl|nkjH5!k@ހt2-XoTjr)S(ܤ7|eMs %*H"RJYDY^NR#:dCĭӾC 9_;MUN4]ɖT~*E<= a"j,)ǧAs}QXBP;(\vaP4ĩ Ǒ mCrjBϰauӢ2ᯖmƹ@z"@Dδ ਲoRҤ/?2';CIAHEҲ Z0Rj~_9!H\:3HIO[M^k!ovH~o[[_o,eg]g寈~oGlEli^g^O/՗/Y}}5_5je2dYK^@\8 mcðZ1=n#_*-a`\BL]u Ÿ?=@0a %m4ٝ S} T(H a67E v2mJ#ZGq]@p&C9 4wW|ͱy}k@D93*$3&0KgmƝps7dU:޶Q8-j n2iD~T*Pմg\Chz_z7|=Y ۴Qc6t:z0hm+!UI7l0O+jC$zue_F|,M%~@=i ܞO i') pљCƁCeԪ"ZQphq*W. b kUZ&lţ'iGIJRp#:5 GklZ}-M Tb ݺƂ,{SBZ@;)ZП3\J"DKcg*Դ0rtlG0bJ_[-eo]o右~zoewey?"ivgyv^W^vy?oW_g5^R|H@3-#(o :*+^gOrO Ә\Pa j#M51F=cr !d%^쿖8݀NIhiԡL\?fGz|`,-*F u0rϟ#t:^d6yEm9S/{似;d) F `!fsH\vx*ZOBQ,=2|n!KhڒnJzK/m_`WST@=bW R]^`&_޼SrDu%ѫKݸ; UwrUu#s]tyTU1lN!@8-G<̜uza/X+P %E϶%f>ZRk?%FkMc3N;Է6 ifĽ֦5%Ϡ@I͏?A&;Ǡӯ%.ݵd䯍~oolwml>O@KH~{ N1m2qňɋ6GԉZB}+%o#,g +B 躩B(`aHW0׌;4%4~* @E2.ʀl0b[&:r߄:%lr "|9,EY0cu>!War,uTI'i8fW*1yD˗UـKsUp4LQCh$8 ;$֦./!2N/DtN;R)bq(韦B)ôI"h>N$$<.FW҂$͞ ̲^=#NUp eXOzY!RJ]n(I@n-ZBagON R 8l=P, r;^qLPS⪲qįmEhItT.0.-eeixbÃ~e(FpY d_.٩Y$#ݜfLʨ . [,e ˊxGEø`ےw8Cxq]#ťH1JQu4n52r8M_RY~n)`XLeӷ--uOϲ쯳W?#"_y4/3/T_՗_՗>jlv؄+F00c@C 5)B(#!yüt65\hLRxoܗ$I.Ws(.$07i}mcGLI|KJ1sSυ%L3n Mp&PF3GT+eC @\4|P `c2wϊ\֏4gEil6CbRZ|96 ݆ KzGmreFEQvYkLmLUYo'8 :BfE6+P+"uؕ.I%G,SUj_H ;KY6eC×J[#CZﳾ5m DR#v3jP 5E`&[ޛ$~ ר'IGHjN@H_iTH3tKKc#G^v?y_/v}V_H^AUZ֌aE.6 nK¼ُuV)Nj8$K((6B^ck]H&Zpz6e\X:pAfP ! ǿ.t%%C?&IacAmn_/\K8gMX5`~p>@)=.kV 9ʒRtv0%E'+q+/fW X]~!nѺ@0!tluT.-V^R:z}Gn$&fyz] *ўXJt8[qѓ7y-ȊâƱ_ m˸bm(Mm[vO9f#0^2~Ro3OҖz_mXF}J|B^#T%7?DT<ȴyGTj 4!holzd.H7k?(){/Ddܩ4sg?" vZ&JQR&]DZKd=-^!j&^ &2Tv9Ѧd;f=cܻu<ZU斨xc/V)}֢(Ӯ3vK ׬8גݵdw-}-]Kגݵd-dwmlvvvݵ5twR!'۬< I$-z S2;:ifSKf~.9-H.ʯ$.Q~J!X&yF#tM"p7|OlР^ܣ"ı-azHn;CV~gF2 A9xa*[dȍiTEXr9̺-uBnèԓXK2]|Rx`Ʈ9w~.>RA9M T z@9OՃ=Š*IxF5ʋ݆ 傮;coYao108FcEy*[DD5F5:HN\+AQ@]Ռ64ӨL/˱Wdw~< ڿ F*Pb2\bPŲ"O䨤 s֐XS/ \ "\iGe9tϪEИ$<-i?Yc]H,hsFZ|P.QfhKD{m SJ$5f>h)Hz)0U k"V8i჉j+zYYy׫q;3Bbՙ~ABB>?+ʴVFݒl@Rm+9iϰ [<ಛ_cj'm˰WBرYC}Z͈<~RSN!Zi⨨MõXOk쾖%kkZ%kO%kc66666Ӎ}/WrWWWrWrܕWWW_I_I_I]I_IirWrW)J"*EW)R_J"OK"*8W鯂]*8UptW鮂iVkVkVZkk2:~ùb=?xQc=r#" aIJed<&8U xhSM}plkOYC; 3! Ǭ | 3º"KVl+}NF.ҶJ RO_Ă%ݰ<jYEI20爌zU":ddb{ ͮ!Lmdg`qf#Qi AEc&v9V^G+.iwanN9J|ꆺKբ -A#Ya/ɂuFf-#6iFT"S$%VY!ir)@h FCQxɅ"Pzz/q٪©Uv=X2+Y. 4?8Y(;1pgClN!DH-f@Tj7DLOV fSطxeNdH#=|4N`] 9M6Mc$8 k/ZSĵ53*N ~`hu5/F l)-†%X,M)ہ&f !{ M\x0PߗʗϘ72ȋD6׊̕&DLԈU׷ՏE T:\8_/4C4U -e!V Q!S,:~:rp%̒ȍtU1c?:%IO&̈|Ko#J zzB%b/V _y+Ke\_]O:6E}vNRI2[ks\G/:Z[yT;@bj?=ֽ!7|:AZ9x!W+f!t]Jw~QhHwtn݀oNSM1y5Lܟ7=1L8Fx\KS>HR,Zִgf؇Y/;֖Ir y.݃ 1 tChݕ ^ es•=Wl@{k?qhI{h;<] .Aڐ9d1\kW&PN8*&Y%Oͭ)C}S/M[Gw.YX!9,Ʊ]~p*|~9$9D;Jn+|}埯W?__?_.v.v]?_w]؟"W|Eo+b"+b""+/~?_y+/?_y+/|W^yo|U_ߪ|U_?_Z}|U_UӓLY .L:i)CwG Q܃A"+novFg7jQ/5,/Fhn? *z~I#~{##?_ȟ?ߏ@W^tS7 ާ,59m4 FXA܌Vn;;jV}3zl D8=8>&P{*u*A_)mr\^hf3F'@1 mJ'4mTPub9.Xu^u- 3NM`1^Y%׶Cwl0X+5?&c9x#ͮ Hܡsf{:r(dS&nΣX3RgQ'>Ƹ9fJ@KZ`!}e=NKZ:).yi^h8˘ï"z`X.hSsE D6fu >YqCيiM-nKCtzM\>n%piZ/Q&1De[҇,#3{T{0d)z5C1#͸Zv)lz~ Lne߈!_?_>i _?_IK|'W>_I~+II;I}"?"RR|JRU|J|"|&Tor*vK3hM5]H=6 Dmi8tsޔbbLcdsg>fY[i[ӫ?(MXKȀheW; Vo]&+%2(P #b "._j05h((ӝ ٥.9 1qAPQ@ b 4-sϠ6ݔbўESX ̷r)Z.:d`ћSGpH55OkM`iU_ (ԾiD9J=3뭍 |G+bjX]#SbCٜwu&>ty$- `G8Xi7̉Idn-eȔ}5608x ShIY.:A4(Kjs㩝>S?,1KpR 14LxWnU|S@9G|ݣ-0C{]v[ b~%~d)[o, ZVaĦ̙"+ [V@kU[czK&)p_+߈3U+ yr-'򺈡?d"pvpASD-+ǜG? J9]q9qГGDhD7wx)AM]$/< RW|BBBIu#- qgɔJ6hZOK~a )ٶqR\#~yG|=Gz#Gz`|쟯:?`?=؟~~ _?+|~;||WO+|}/I;I}/I+I}W|%4I|'RK).E~J/W).E>_W)OKRUpRp|KUp~ ΟUpj+>V|~i+>_mw[j+~ڊn+Yy;.=IA:gb]e=zYj=jIEJަ8?ܚzՁ(~늬{=x9P-ѷ{7h =ű"ʈw+"IO '3?Oo<gگaXD#ǔ>F,:[qI ?C#H}T/MuqOÐjQDŽ'PFq%#dOA3&lw׬a+L!}& m=3AJPWѲ/"xpY5:#kդՌc(0 &+|4>\+vfs'sԖ[h sN\%&:9c*(uڲGf{XַQ֏}@=d͠.r[mDeFZ]Kg[;)ҒMhœD-?޸ӿ: %$ձv:%L2ȯ0j)?kґ|Gl@+)T u6׈-Pď5K э˃/#Sq7 k"L'SxkNt:L 1,h)% H_ #=̴Q*b#%}U cߌ*LY,BJN "'WW1!OR ] -Uo+}-1džbŭU<3j6xN#ˬm{(dA|6]5LU?1kg9V0+fb T~( {16H[H9aF]2ḙmD8mȆyamm>Mg|k7%)s'UOg2YPcqξj2G3 ~L:CK ^]vU[~z"[]4Vz tA^Se0R+OH!?X-0fCf3Zsu0 @ )NԏכkѴҪ^[6hqn`<7kgzJ//3?|~?__++_痻˟]?wu?˟?D؟_"W|GW|E4b"W^?y~˟?_yӼ?_/wU}R}|U_?>iU}jЈXa {OC 9!c}Bk%M<8c+Jh*1,#z7_y*rpmK48X6Zܙ}_?_#ȟGz?ߏl2 C6ۦ,ZNceּ+ݏ\`^(۶wj4_/ЃkB ˆ@l8MIsOyxA|"XⓍvkM2 ڙ-+=6LUkbY@6f69mR/[hf #RN^z2MN 9[;;̙~F$l8~c*k x;< 7K9j7Tc!Gl6Hg)2߯L":j@Z1+#hd=fzC?]tǒm{}GRHlqі G)=?(SԦB3gi!Jn$ňਹ6HO#Ӭ$lƑq_8\# jZl1 }H%o3VRrG0,o wEYun,\ңk![G?]Pm~IzC9=hz- ?#׏zo>?_緃m(U3(&f7jp}; y:cLAe )MSHyq"}5@?`B=hÏMB淄=V- Vߘj+Y抆[Oa@P$p_?~r> f^"ښՀi׫g~ EܛHnX:}2wc"Z,z ,ZC7 b@;גz=)1atnv?eܡ/Ϝn9;"(}?Gzo>؟`>m_W~IR6I}I~~KR"?m).E~Jomcs^3so=C }#mDsimÖyoOaL cDH0',O :=gg57$(i+v+C.Gd!Y1$+eB]ȐF.$`CPqaU"r &s"zS*!1]K\a+AAafbZUk^d>G{̺`j ƌlē#^1InpƔ-ԩsz`WD/QUbRKhN~+5rߚӶ|e$asNtR6`?7uU_2EZj/}ѫ[o38>w_)NB4ތ7c-Dznrԩ?r_mrqWl6a x%Pe1՗vIFi-ւKr~hF@ڨ+CKpx(~"r>o7BUW7ᧁ ak"fXuh_VQvr=g0GG ϖ.en-]i:JnQA *Jy-'xs|"Nn"KMu04Ci=j._6#\عԓBs×=37Kd wPg"="g s|^MwN=Zd;bw*J\L{?9>#v?߆> _oIMR?$>%J_"?_R䗂-8?UpZpV|۶V|ڊom_u@EUY+ Opǐya$-q찉ɯ/2-Pb>},hƣبIB qSwԛN_.iQ% ZbG5x~} 8 j65`Nis%ANR_[\nm#1qȽ;%}e}3s]Mr1L#iyĹXY 5qPdZ#ďs %M5 n;/~[*X66Uryؿ8L9{3~זrqtY9ߛ9FQ2K~~=?<+$/ 6}|e D y6bbk CƵi;54!^DGj';\f{3[U L>CY%&Z~_Fv%!Jcs9d-5gMWA1 %=g2c pۅpHV^K# `!M3Ҡ Q,okuUcZck Vf g4";+Єew7es0GAڞ_P)6 6?uw|clo1T7"([m\YE7+f7JmΊŷcͲkb`|nMWܿ 79̢66Qq ŝͩϙ } k煖ʌN|)E,v~ :"TE[Cd@4 5]҇_"Mf*Q>A"׵̧2wc?bTEц@pg R=8p1~ŌkO0j\\ +ƒdoAm`^ LBKmJq~V0hV%z vyW>$<`ČhXv(iƺh9$s} W˙8FeS`Sjm0Yq8kNʥ5sĢ<򣉱 "Bc_~ׅ 5CQǴƅ;_}$#7驱3L-UNg%.hdagsʟ+_~ʿ{??_"翍؟u|Eϯo׼Kou>V_KLgˆ)Md \J-.{&{Bu59N~u]33W\Jy}OӰ?#~}dhZJk4}$\pk7 %g+G۹k6FMXӃZ+8yBXiƇꯃ-\s G/($얒(?\jD-m#-SjA^xF;/w vٮ,ωygeħ] ܡVi%g \EFTi\6V"ѐCq# >'^o찝-/qjQnΣ&g{]ff,=`03f8r[ΥBF+GW 񯾡v50j}4}2ÿ;#칣OCަK uG\zz_}Am ""'2ZbҡD9@\H2 ??/Fo)sirFmzWzܻ)r>n pd9[Mq7ې$JW_,7eb屑А|iܬu懕7&~k>mZVĵ0dTC,V: 9xoHrn/X&ĝ~U\~xr2[1^9dN[ 逅鴛 "t?V({*[jJJ(r,A r,Џ5p֊[_14]h7{{5{N,C]e D P`YB>F^BcTL d "*Գ{C,q?*ƽu>>hj jQ(b{n~6<Ϣ!WVu2U[k_!-9@Ywޓ5|?_'`,O\+$+3TЎf`e|LPI=q_em8z}"  Wv9 3I~Xr<&L#:S8pLZn^h~6)\ؖv+z[(LN9eVZNjC̓[iHW(4 43{ȘڒOX顦j rvL#cӨq@@zZDd!%I4xh;M _Ioi}7N{̢UD֌j q;"xIYJxt{&AշAdO>S"Շg%m^)|*b}s߯q&-q'f?B{yzws5ЏY{q ^yV֌Q.1T|nՓ{gj 1XX'F[%J}՜KB>ƿ,ELQgܻOSn)2,i]TB[YtRv{a=}jF&ZEF{Y}[׿Z~ۜ$Dr+nMB>'Fpyk9PGW/!a^1̚ R$ 'qISW I;{ϒxLkEȠF''ϳ m,ݰx`(P#M4ǰtŗc+ MO\l@9a뺝frq,IŻS cswXYZszI`=<KZGfƪM t zTam0H:CB2YjQCIB:ŦO]t~N篬qBST&vM=4:kj@ ԛ]`H^ rպ6LEFuWU,fZ @Q 9=ly6^ )w\HCȭyge]))!\BdӵUdE4/Y 2ZP_j+3ھ/X5ڢH+# xc[k2=\iF jO[ w㣧bd7u nF}}nNjPk謘34` >ꋈ͎[2]a `Cϑ-@]fЬji2wᤱGl*G`f`5}tdR# Aֆ4O4,2&s[o+U|9j6.#?t(꓉v۽G_|xU4!aͤ˾ބ3[".36mSNS@̫N|#]9R+$}u$j(񫥏ô<Wx|>x7,Ӧq$R{x0 s %QF@\lu)<@ʃBOOۗY6}5l \.)6~[w]SD}˞NW,g 8œo;B6p%©~j|b^# U#.ӎ;LzsK;_wR~wNNrvR' T02CərQWWJ]2F@u4vnu_B 9 yh"%}}-1^y!6ečEO<<5iXN. XC6j%f c[b,}K`<>7lqms5-S'#eޱ3ȈϹ>76ֆT2m="?ǂ [C!Eؙ6oeA+F XRpY="9ObmԒON5>Rp+;)]zBt\hv&{;)Z6^PpJuU 7 %l.7ۉ|˝6G?1/B4S76Իqjj늜# 0ͣ!uQ j HXXI:VRQ81ȊCSԲqV_2s=Q no/ D{As.H{ zC^B9G1a(pH5s|莅o(bNc^:I5kGȿ@hYɋy;95^B k#`WH(`[d9XiS:w3R zW fW[}N)ff_՗VF ql#H~okJCUh1/^(R~]X$n%D; T3s SG@e)'9@Pۡpoc +gujߤlc'37hr-MT`OðniFBwA&b A!@ +"5`5KTJmEjM ӱ0×2c K GCJ}AqX^D\yV $6ʬt,%XH1&_ AGSFH3mA7Σ2.x: $H91'/Uʿ.O0lKh@)Ai:O`pܙh/ɏA4ЯJPG -▍]h8GtEX8 Ez bgNb#Tŧ8.A4&fNb+#w=\Ĉwn4T>xljfFqGp@1`5Fk@DtE.?Ip pŒP&P5yD,}a}o+2Ϥo _IqקW=v`P~`)OQ#Zq({a|~/]?<2ԑͨ)t#wMg{=rEI4ɳBœ-ol (:wް;Ot ֨ NZW.wPyüF2`x?=+N/^ÙlUx{ xxdilޱ`r,؞6vIa=c{-Iv^*;C}bm4#=(9H ̿$Ǽ!_S۴%)-܋%1I҂rv;b :f bNdT.sfZun$UIC<9˳זGbJ"<~-TrCPp}iTo#L/ j$3E 9l8%4mCm3"+ymX'rDtJ+L;6*a8W:_:Z]aVFK֫tfRO/@ʶz$sծ4wjI w{.8{8/tU5HӐ^=`fFH][VkMbk]w nׅT=If^4ͻ|;J'c)Pmf cx ?b{4BM˵xi|V0byWQ"|6*6sԯ! ]_`CEAO5n[QU^ă/ZXYB+ Fwn>VzAxn7|AD9H3$M=^YP!tB A.ۈ,RS'`2kj\$߹7D$Z39E_hGFӢM5"`2il%y3 o@)voW_D|qIQxue6 ghe|$ڵ ^Dxcz$uo_>))'ʾ8/uSaDSbUӢBռWT )Vu'f N 7Q贳(Q^zX5IzΐKe g F~'֚!o]tAaׯ x) lmFLPqeˮ"zྒྷ}g(2iD "G@5jjPSƀ-oe%s"B>,NTV T0BHEY[Q0Wb\)=ڰ>b(F1_:Ƭ%Wwu,p1v+Z&Zϭ;9DF8W-sځuWPJBt a'QԌ7Ŕ e[a#{nxPUTXiM#7 5S$zcR_l׆LSB=) et7_Sja{l_n'C иU'EU-SP%Hk/$")_ca}{~(h^ !:r[}K,nwgflblM ?7]bk,f YeVHHOiUl.b.IXAU__wu6MWE79ѭܚ{6/KVZe 1w2N!$7> ji/$X$U&;g*G ['^Y]srA[Bhc=^(FVГ^Ynᇟ _Wٰljq @vtv9ͼoti|Զ6я;%6 rm4KT0ڒ{ɆK^bЄE/-5+hZ\V}ZV&鱏Z@e g^GKx!`~;fY,eL&,{>IWʣm[ BnN7EoLaFil8-Icx pXJyѮ5d=l& U? @CZ{+A.i$\mU(ִlR#a_3+7;&C]}*`r#3W8Y/ᆢuQUo(z8V=Bwq`FW[ܴ2prδ:DVg hHi$Wj7T3j(B`wl$f1@hhwa8Q_ =4z R7R}=o(#'dz:;<ΒcDMW~Һb,rgOc) ,idgvp`ʫ1qj_,E ѕf,yx. rOdbp(c,'@>\Bg{QzI5:ƈڠTbr+~}dUn،w~޼>2*vP/*Pi]WK}vO0 ]JoS"A*|Op}խ,mI4<ܜ;ҝQ\ǖ^=8;T.R>oi  ڼBM/z;|P?ẍ́ST%UӶ+u춡jpVP vܜV@5ҕTXYd*}@zK}hMLml~ceݽ1*d986 jUް??>6%zhHQUAxyۣEj'KpanZ̆V0R@3{W`V>۟l8C à#Bg@}Xk4PW9_STg?0 *gN^ևlp򃪢q͡Q> `;+z>躶S/׿3Ϳ54߾EߟJP]̱P~$9}.Z׀IQ( PIW}O $fvmvQ$V]CMKݞeVgj|C)E\l7׺smp$[6ܝ1X6l[}ZWQ35!yp͟T_3w)f 0t8ʡen'IqsccbSe#HKP&Ӎ[G&zۊ   Q3]ڬ}D]DKt^NI_-jlN^C6Paf<"uRZ%F\kH4pkdtH^-vJAyp[Jhh5wʆ$ MI=UFBK}69qu~"vXOg߳k5i_dw-zު !]l8L^ JYQq?G:@1 % &+HBe%I=ѣSW MҪu~ nd=" v8:M\ٗP./ylne%52$W/7.cZƲ'0JŹ`-?O8ìf*om7:wNL.:].vRaw ^7DyctA v.8=FqdŬG\q+X} iMbZdw$LEN BY AV$fFQtRg<@m7'W\j$m NRHZp|Hno%?fu>(B(kO rvR˘\W5BN (f|ttMp-2& >%z:r2!q (ƁWiDuv%YV1oȺşߑo5bc6[Fh6?lo%\cY-ʁZ^<14Of=c.-c~ ؝9r25A_.vvoF+ cEPN|$Ә1(.:J'ãmt w[_b.gҍ;I"``j#KJGMRv╞#XRBv]k_ H;6\%$J=Jb[ iS/%?)!qM/Ђ5 K'8:{p;cx])Z;AdxgjnC&Vm|I.ht1'SGQ]ZӂB`Dm`a8]ܟNv5 I%.,0KԋIs ѩ]RTc6k{ (SEf-"cp/W+ UUź%>[kKECRm]zN0kYGaWT1ey)Iԭ3EփL[;+!+z uLhtK#ֿIV󊒸;zTQ{s|~Hp,|z%Pt#uz_`נH ,S`y8[yҞz1;G)EhNeW &SDvaiqz}HA&`62e>@͆Nf>KH,{G&'$-=+zЃe? o$&\jԇ ƶXaۓ4L'50Np>.fmPTSlZan[zŒ,y}`[! ƌRD*4\ ż,Gcc̙b$0pԓXaִOTo jQB|ʼn(t5A,sbl.ŸыNGj"`AsYk9KkpeE  -ׅCF a+o1ٛz@p^9RņiW$kiq(~{dl礼3qSVY?=2;Y}iI@-N 8t մXv*9evߠ]_^ۈ\ϭ1bh~'q]cA= `8Ի\Txs\jIσrU6T1V/>޽zg+lmƇU k>qeA!}hr7x.6ޫ9]O氒qFzi Uqˎ9AgMK؅k$%<,˵v+;nQ9w}VmeMO 6etoTT|5ε ^I$|!,"b㻑Gvh/ʨu=zPֺ=@* 9 -&!^;aCL-ت:C(~@9QWsC/p4H@m,i T+ɛǙ 4.#G;/$|b$l` _Q3A"1rv {aA?>t/r%kZxH1 +uŢO*:?YД! +k,0] P{L͂1^5쑱 {(?20H1) &!}ɗ\úe1m$6 u^<@^ӳerdFQ8Y]`,xġQ͸iҰ8!&]d8]jaQT"J.g&g7/k'HJiF isۼH 3j~s`9Egq:߳/ @_j~z2FIjsU7` mR1پv5uL d:`Yy=Q̠6A f9<% 6U5OV; qx1sqjwglHYtKn:<;|a X..l;5$HCC, B("9\yah.E61W̃AFk>2K.K<6vUL fԘRH oװϸf0h;koDG42 0P`z;tupI=ӵ0^##Z3(!:RLڇY _G5ɺMא@ HҺҖ.5ͱH6#E)j9e hh<aƼ 41="h7 lZ.-gnMi+[\ \ޔ<e1E!^Ι; S󚣲0c`E¬XxhYM8zf_5ɄCfh0Wf I\ǧ׍HRMyi&`!@ d왬i3l w۵ .DۃGb# 5iП-*ݔn5wz1JOXoKBE +0\S*n c~ajͰ68 j3559DGA<(:B*XSʝ HmQI|iV#enM6b^!lG`۠guL5 zER9lg.),?٭uŠÆL{t hyxhS6dG^F6jAѤE9Jn\Ѯ|CM7QVҧg]$/NOs+V]@P 7{֓&GSreFz7RGì&XQhBQ$2Neq]g}iAzQMgQ'0B143860j}0C]RJh<. okA"7/&&Ѿ%;ʂQUo-;1 9S% fs0rӣS|a˃" r]K/AN+Ae4{P'Z|Bs?eWZ_Hֲ`eFA5⧸ i;o3-?!Z CNJ֯HeEqu)Lcjݗ~' rCbܒ;3(,{~D1'!͘ #u: -z˘2a3(ٿ^C3@7=(/[3 _bPn94eG۔X? um?zC}uAs |ƺiPlb™~,oͨ#V hPh4$5nB6UXb1/3+xN-'yPT}F z~E> (Pf@$.q3Z}tWYh)Ȍ.Z|6\#y1R< Ҍ0 =gy8!"}B:⪚i GFX;0zmX]ZtAZ<\G*cPl٤TƅhVKս f U`$s *9@՚4~:vN6 @ Qi33?^UXZw9DYZop4X:,D|gxC1W;İ\۱K\0K r1{ WN8mbnyӇ6e1Z|n^patD0$,=t\Юq M]p-{cfRAӚcl^iS;r_hW`(; ÃeS m^bd Vzo6#w.82RI{c@ڊKZi>¹m~&4 ^,ą1]&;CWxǹczV&jFJq;NJ}I$JG m% \3m1Z_uW.ۅm?g3z:,(<2Lz螈݁#xd7XΦf\FlDJ5ˀL43 \LH uo5,w>hSToħiK'p7uxѣYbs=OFȮP?R3q,#M)>۔[0vf`7F}[q9X8la[f5:gjZ̍9:4Z= KW7Vl,p#x}YM򩰶jRb@%Tzexd3id̦q?>mMĻGm |f3uHKKBH(3R嬃β".m6qC[#t2b)w|0nFO{5`WZ.VTnFF.wj #GJOHZ"<:FN+W %:H`ٟy 9BNMFCUvQXgap*IvV 6oCDߒP̉e3V1c{K+wi+v }%Rd; Y͕>CtMz-g>E0ʡ |ޫjtgamw6wX;ɉbe/Ʊș@$~EIzhh-V`PwJfk;P{ y5<칻gJn6U^s+pD gwH7pZ{ʎ{=X,*cfS1r,=/>8 _1;e@lĻUmFs x,rݹ\ߞwf(]R?ahoNyNSD1a難N3DKkΌo_B9|#CǠéẺo͖k1 N0L_X]$t 1fƞ/Kcc? \ΒZ~*ÒcDOgI{ZH| x\jX]\E;XXqR$"WQrorqǫН3+ |QZ^+y=K1%3G˴Rc'"G%fcQcl\h`Oxo^#qmv{)|nAFr7 [AzmBh(~/>xxkn |M3*{gm@ڭRZ(ڊL 74v_дm5ue]G65C}8ی៛a:퓃 B2B,=iIR؂:كx`bK$:]"1n6l;Ác-,K(VS0x00Nj@^5(~zO>Fz7es1_/Ա_=ݧLayvu tSvӹpTB; &!2?瑾C- GQ5qS`#ofD Y YL$2颮 H[(I–kaI`S^3fk쑘mF%Րjm6|6z}nSQYՍ{(՘1;s*B#|f@J{w`H>xwMmd1N?j CBp"F8գ!"Sx1>euJ /o MUJf /9^/LDŽYP5Tԑ)+V(1r(>Rh?RAEPq=ZOo((Sid89I4HljSYطt]U1̶V&R TUAރ_-@+6 x_K;NngEزQXBg i$ JO6ǤĥjIr`CPgZJ|N`kjҪN^.Y4]$&J 3ĢXI茂8mr˺m:jz F]V/ YC}Íƚn!FʑVsm Z| x~mW0(ԁi- )YdהE}P+;u \ISF2qF;XbM;7hxÓr'z8]++ϊƱ5{u[K즦 &%jnP8SA2#C3 >oSڃK 3⎡=u,:7y"L$Hq<"1ƘLzqFa6/:G=R4IU\c6èO:$ftg؃(q<Ln8bh MbzG9NS(9tHuBf Z庻_R!C1 u(,4s(Vͩd>f y:l$tBzc` ."ʵ4(NAg(|0 nD/8 ˆIL thQ[F9obqP!A~vz{؜BV/j%||g;1Y^ FW̡G@8Wu>n`@2&8m0so(57r6(6FCG詗a8g `CF !JxxY[vOOwٙ }P g HHP8꾁w5ƙs1ӹ )?_>oĨ[pL޴WE'mWF$G6ƉE!R0U +ǺH+ @_p{ẕ2}وy&/j:)XHBR xxƴ8\]uC!ç"=R OWcV)9>egGR2/)arӶc)5yEq3X}{=O ŭ~u֯ߨZ 䭗̱=`©c׏U1LnLЃt[fؚxW,3^1r| y00W_LJX;"~WzHE j)-]g,5,ۇeiY-`'kgҞ@bhՉXkG"N@Wb戺B*nW~jl&r9/Z]aOiWԈ-PM$Yz0zϴ] A8RDU &x6n4CilLJ ޙ1qm@x\ю6ZXHI^I =n%5ktriZbH32^(6=W ,\Ȧo`-ᑢ `(C}0,Y:|ҎwD~tc0 ,\{fl&B:H 岐@sAEy<£_8mB=V,b!Hivp2𞜕9G'Uq4iA|,m;z4~ul$о J%r8ZE}L]~,%`~Yr*8WP6A>pZj |6ko2m0=*s<(*eq@)Y@rHX,Jʘr< ~E;ȫ޿۶‹vz۹I&j%lL;3z!q@v1/e+P-?gm4Q!wC 7w %fh1NlU08^3ʖXó$LRFѩs:uzIt߇k tne_B@K9ysQG!`ʈ6Ľ(QK?n蠦(+ݯ2~/ BAu:v&@qmU^puzؖ,Z 8 mjD}li\`_3b0du%(k߾ IYPG]`ftYC]h:Q_OtCRr1xB699#wVLv`]q\qLiTbqej}="38z9JEW4/0w@53GyL4Ry,{f_rܝ@̖eyR ;TC`Cwt}+mZ(u7u`?UgL<;%~&_Pvv"@6J87Le^b[3`„,l bɵ(%iٛCSfZJ.aHӓ!bL ,l!&SS=vdЖ' vO Iў4 U:<pA&} :SђeX$(8 ˎV}Y>Tŗ)ALZMBq:55"lmd;Kᜱ2Q4:$rφۈӌq\PEc0pnR?!sj5tz@^Q{0h5fɔOeNeh5! h<$J"+oSEJ6|d r7h/ !C.^P=%<ks9+~VwxcgDǞ1 ;AžW}i$Sbwb `GTrrmÖb[T Q6mE^x?!`iuv[$8yi`$X`D_ rLע:Yn :(: 9dc?ޘIy<,=^j]X%1l[[ MB.i w{X̀ =JPc!6y%K*+vڔ" kRyta )`0u!gmZY>aeDl`&5=eD%#5uXz̆Fj78;ڎ] Z΂kI6wO`-W*NADc>^)=F--ݨLA @96(zzk.#PZLc7'1-3r&C)!tK_F@N]a Pn6$'dS*rwuU4hik6hȄ_o.izd:0i)FA,9M1bb&P:G?2 %O.p໻5ъܜKv&3'vɂ䀠!Lx/\Q/B:_3ݯ* &4ЀfIw`{te9&`g™Qly^Be5~XiG)]ǝ%^3]Ihfdbj&z!{؆i9D`?bJŅA_vf+x)+HOP`ZAc;tV|9nbzQ>",FrΩsKz<BVc-}3 ҠA{qw{@QFgZ x"qH=dem| _ /jqwfwa} s c54]ҧԨТ@A^F D|24-C\\Rd5 #|?x snU0`IGc KiG[qe @)FP6;d.B1L^iѧG-ln%Bĸ Äւ8''g-\Adє~T.Ez BiQÐ}_=GCہAOL|gjWRrwQs`sa #Tܘ"5G0UN$=cpiY< 6QRᏞG֘K)DJxM$xi#G|bC+fj՛iXA>L-VK7*k~AꋗNMO4$P3>rd=iVC84VĈ9vRͦj0f ORnBY3}Jq`ZJ I4i+$54:ך *1˕\j FP]ݕ&RS%\vEP:gb污sXb(z6w3qq*u> PZUSPEHrE`A UT?"Gt ~";/oWƯJ$z 7p?$WӬjcg׵.ٗe=z7 괥w= ;[( &AhK7|[9Y%`J8`}jAkz< AS~)= af!"3?'Ṁ:+W{;;Ͱ? t;W-αJuD#dVD~ ^m1iBAڂ =S= 95ԴB}J[n`q\wK -ő^c$ `PwZ@us/S3X(:^ 3לsspR`!tR'330BN>0q@dG>;+YFS }pQl,}=k6߄spi' +^zbcAgw*F=Ah(zȧw54*AsOPF)ZWdQS1lѢ}+#-:afR,V;@n{sTǿF`6MO@kE|.Qͣ6g]]/rُqzyShSR|h4ΰv$ZR4zL֕&R'i -2R92;3K8'Լ+i15/_1#,VT@0}I+_SG*)xל=͢`s9JV,C{G@ci@DᚘhË+6FS<8T& [{6$Dm*2 D8Q) !'|2uU4c]|c8P<'^ao.\FL"H׀f*dzvV͖LDRrAؖ`6E_Կf0Ovz5/O=%FjOĊOw^3-qmJioXZI|P@;r%?gz51"R}P>Y$c蜰-C֐R H+YuPLKb^ \:\¼8=5,z$f@4IJ!YLQQPPZ,ڒ56IJqҫBgr&>-:[J&Y6d3N)U9zmS:< &"I3j ÷8!w7ca%>Q! !^t! ed's1US%\B0 h[shPaCEr7^vgç@; P5Jr#zT㑮G6E^syT'*(fdnlFkj >pmރNCL+=x ܢCz`ۏե6C\BA kJw;;Yw~ AQc*L͖(U9, cHbC' ஘٢ f46I!.Jc:jva 1i&8*C][-P4ͮn%I5Y8$` 86{H غD* x0.UBd45 8kl}={0KyI롑f_!;4e;1 Yl?5ѯa2Fí__\17ՒvVehY#q;Δwe9`Yn9jco| cޥ\4m>qs RtQ8EQ?"2!sGf! dH%56d6ff9Dow%%2r+4H[tʬ$ʯYMߍ}e sϊEk,h4aАKxa&z _HQ:!- m-CO` 8l6HpрkK`8ifSJ1) doFөMBJ3%Ĵ֌תM ˰#(}i[Lᪿlxxw#z3l ^NLt Au( *Bzj['bX[ e EQ\!)!n'&HKyGz߈-)C+jh a&n4L;b U2ݤep$8HRg5 _S%(Mt:*[1)X!;oLb‰~Y[}* &X}ܛ|0L:xd?>f5?qb?B#$LmFy/ wn1f1ߛ+kLȔА곸28 NE &vBכk1`P {vG+Ƃat Wd#-Ux'-*×fy<}HϞOjwlHL"9st k j*E)M(>i^ tYGxFb3 :Bvۭ"SiMҪ|i{'{D6 UqlW[Hq,zy/l)U[V'18| eBu ȥT~HPnRTar9nF\j\q\fҧKrZAڹ`p$jXDqGU721OU_]@pWlR(+|͐: _hW+BN0o!D/7`c=XB"*ȶjǃkcN-i:8o}|T'pI`sxEň!l*հЫSKhfsE į9ݲhs6Ғ ij2r,[=hM,MHg!i+)Lq;@π&]gw?DNNKOol!^i𻼌H*-܌\"1'Y|Ù3zq`\ӧts$82 6vF +?6fܞN%iJTp" u*grp6[ҜnjxmK?[y%cC-ߚ-v-cȴ lHKAcGRrZ˶d8Un t4qd<0Kx= ]_jE~j mẁZhבpt3mPUq=r,i`\gZbxbV HQݿlԡ f G` 3ѴsT}#d grUmbr!E ZGT>8:)H W_#eSv*Iu>IbXx$7.MsHu~5+B;^+$3Y'!!i0!ҋ#\3VH;=iUHUU\S .OR|U-DOrcY[43;ïfЊd9nIz4shUB^hdPb`?$s{_]VQz%. F &Q4qL&)X=YGͲSkI@2ar[:2չBº=fDJx檈 Gsf.嗖BMKl ;_8{?j<zUc9e9*ȏ][Z 7u!\}[Ub&ﵰD9B k*zSa<2̋DJ(}rsr&"oe'Z;s=&,B:-v#%9(oJq XH^#/x'擄]- 4 ^!QNsrQ5k( "G!Aɡ+-ƠIICWcyw'Ey̳%}}DM/FH9.wgVT<M:~o=jQh,er#뿈fOm>fB(MRbrMdp)/jXacUE_g5 ue[*NԤ٘.k쫙aA@{`VHO%Tpg0 cj+KfI|yI4\/ M?&o}wGbhr<6-b+d4:R5jQ|= ' +pG֕]h5؇WЬ}-&z!#)DX<eF ~I6e@N}+T5vZhP)g!Xɯ r_uZ0%O[)r[(L(mg="icpaxkIuz*iRaD0Mv<$ G;XH\|2lp"oU8\eE|˕⍗H/Q81&jbuF9R˦Vx/b[ kHj g]WaDx` hsVc;slD6L'צ{CԑN{-)@sH;--A[3DL皡y7$='v:EˑV_}WRB r(~7՗iw TBD+L3WLbd2h`\r!cl Z؄/K ʿ~ʦCh-EhjcZ-ߚ=8tv8w!h^Jgg:K1K۝ $h'r,]7_;)ҖbFYg̲,ΞS$lvTl1Z6yXJN$|7'`?/ft%[ҜwFow&1$xGE.:ʞȨݿbAKHR QM#GImF{hE;qϣxR2WD ՗ zp8XIW4@X4bAq_%Yd{qTCzf:%1?D$V&Ffsɺ1GF:" oqwsl\GSzn0d=l?̱ 1b?az !01,?w(@K ۗ жeր_kr[S"C >(/ėkJFWQT.h-jxeÕeҟ~7vR#*7FAgxLw֚#|}2$9fsh; gs,pB Fah`0P+aWНo^'bXWFbӯl-~ aoZ3$Y'NѬ6+w<͖ :p 0(>i,@1Bם\Otl  =;tMĹzX -#xG 1 { Q˲J f_oAP{zxRf߯]Xe+j pb.#^j?Zc}h|'3Y34S &JKzU<\7F@׹B?"ELi&=J =W2AhB膾Fق&8le< 6}ԏ^-&Knڥ,Zf/cK:|.E/`7AE-7Ug;轺@fstwbAQXI8`qe%瑚o RT{M@[J ,6G*n6rrHJta1SV| rA,1ÿok:o }1k'?\M+F NG1-y摩\5L}`^¦˘栳r>[= , 7宋t/Hdq ƅKƄ@MLUu;"!0q>%?bZrr0Z_ӿ:UqqDĬQSDbN皁[pTNI~N(P[tUXL\js๋̚SYXL72ͷa#whcϸph`J =ƽGb &y%Ag qF=Lxw|^aŢp`ݳuI\lgQz)ؚ4R(1,XLO (V]R)#4Kk|&NwV{D4|סVXJN`3M5_:rȣd W$hʣÉdHPX_#2i.TnĹ-)DrY!1+X6:Rsa+?|=3 2s6fVFMǨ^ ,+{E`3Hpo6ܦۍF fq`Dk92[D&)Y :؂K.ĥWI$P.= +I !|'nYvyhe; H{2.#DِoRc" ݘ4ܤKnȖ;uY؎6  f1?{;fW,=\э`[KK^ `,$t+KtfvvyDzu>;̯\zHS='F ܫ@BJPE$ ?|6"Y2М㈲R+?1RG&,舨X2XWce|e3} r8xokj%̂nH5/-`4Ww6AYǷ%2՗ 6`ȗU9ise7bYg=^p|fϊSN8ԱGrRњXإ\᪭OS\9m85( =l:E,w(iif `_Ozlw_/Z3|bp 0w\ P~rc'/VB]BlxC i3a5  ,ATYNFCHYzF^6u+dJKO|$FWOJiϿ!a{_<*F39!lmP2CeӾn$} I$cØUT0YdmYبA[~F?[Fi>MO#*\p??^kz9v"P#78|7h\r+9mo#uv/Ml*_ %G}^/$q3c\1J}X=i8J3c 7ң0(E/쒙L4ּ™mHg^qZ4ӽXM aSex85ޘ"G+seF"B 016>#]muGT점?亞u-v֨P/iS8d^ W^M'DI~Rq0v?{%W  GY/MGp'`q) hxt<}>,͌$(?mrlyo|px1#2.%/ye31_n.ז.oC㎏n{zM]kbږΦٚ8` yyeB&{Wcqf;XT ,UEJ(ᛣ5%W7u `mt% %9M9*s6i=ۃjm]lhs_0\udGj4ϔk~̇sa&Mm3|?pDiqHBΘ]j!D0].0KN3S.<._ǂD Pc9pa #=\K=X#Y1 8zeevƑȩ+JXFJ'ixԀ-N׈%` @꒹qZ 5;*%(=|e{)n&XSbY&Sz /"{.9zU;q7?b5{4EDJ.÷h$&-liaWBڿ.㳂N´NZүs{X,+Q36lQ ZF<=-T3#BᶗXӻRrz?E[*Ÿ?,mX JmO~M55Qg3 !W5g˘v /$!Ù x(te4f}n;?gŸ.WQ~jW<^saiX5/rMؑ9X\!s<9)67źU_0u_H#9y};06b϶Sgtsi=q6¬;H^@͕eJ^;f6,Hu,•>4VF#G5s '3hInn8F}i3ؖN=f"F?%okp|D8xp bCIu07W-"BNG >h ʙDc/dǵb~rP`A교q ulM-!1i`B z=RaPO!-ozƼ#Pe!MEj5w8nMvL%iX 86/j-WbjTmC~`YV1(S8 X+Y' A!Qb^hns6ZxU2if Wᚹ͞le{` İaO;[ G wO 1W[w5?1 ]o jB$ɦ@p @"CD+M>Dž{ 7:Ø.tlۚvG,hIN,ʌB>/p A$уZlySrz˥o[n!0r6rouP֋1RXMq䮱M!h1ipSCtd5Sʵ=/x}#HDCs> {=55sɻ`չnc4-ш[k@)]Ϗ\dz_C)`*I[LxdQS 3`}ecUsx4Ȧd" 4g;s-Î;?faD삜u~Zbߊ8Qw[< nAOqI(Gȷa_93=zFlI:l` Gvj~M 4"X|3?;{6qKp롹;($#FG=7FaJ@@n \ d}kj`4 ]0ͭ1co i'^}ak ۦNOO TAH d~B~i־LM4ݡ4*Tfm$fPsaFd4#Z{XP2qLWY a1]m]][`}Tb%zGzQJ pśD\F`}`M?WK[@9$I[;)4#YW 댃=RԮ5 Q2dS(fPE7^kl39sG#v Lk,=v)Prr(ER!Yn4iיl:c BebX xYOE#ȼБr`ْSL g {AMҬ62vqk3$~R $ٱ$,6zDtJ.E#ՠArp0GG\fqiEhSq¡u҂ 90ZڎKwfӝ0诙gg3y)6-l NaMi }v'/_?e{F8M#40t/d BP ǰ_r!ZlNX*^H ' wE;؍BQTQpLם" Ó"o({kx!Hv^!1(+^k݆' Gr%}` ޟ96D>5 z<fR.ye=؎Yl|k`nz>vqEh跭 Xccʳ:}t)%oA%R*8ڼkn ss?;KW_C 1a|2$5F.,VZ(%ZZ%Sxܒ;a0khuoa{x,x$Mν*#6hkRcѝÐ #۬_ʼn LDca"Ebm^iJM&G@p9#+16CJ8`9$ yNG:c$("#.lbC(&ǀ wl;az.~ D$ƚCא0O[y&#a5O搹Lustg`Y2Eի!i= dC41 ;9`xlj%G=`< Zp'~Jxɽ?`a.sc0PfVNwI ]:.a][mqVTtNu]7d䩯m؀cTEF\B ̘9`Yӧ$Է1,cɡu0uK.V*_o'7QV2\3w3 BQHR (LXlZꈜO +clT=j<|q. \A .3?'C*_X}3eȲ@O!#ܭRpQR;56Ǟ[x7@=8+2۪iXoXSv˘bfu" W^8k+S/W%Mॗ15@}T4Xt$Nb%e?[#㬘&+3J6ci9Pr;%.!Dn~\LX'VwʼneMSњѬ&!Q$ (잃6̦gkm.P}t5)iI`VrY (#1ku/}?Z4WW̠qF1L]ԥxu0dٝ׭m&W5^O>ypL$0Ac$ImVjÅ@IkY(D BmuI9@R%Hݜ4:%% FS졜z @ӿUCl\9y)p=4${>^rpr16L{#춼v@jSl$j1蔐d)MK]LÐ,~Z5t-41[}P %l OE`0T"0M+kR| H㳾')6\s;\mMj)LՋ15/˔<2n ;Ò{ۘW3+>9vOY6NN{hˠYC#!N5'0wݴ?@^!P8F&7Ug{NjSc)߂=ereeڲe6&wOַ3uy) Y#Ha!X!Mx>REӶ̸Za {VR5Z !BCW ZtR! ˬĒ˴[}2} S3OjFnPP90N,^p0 3FBÊ5feg~4b,AۄMCC l`%!9xaͩ6c a`a"nDT*}8W}pqoLjۜDe$ٮ2܌as#Ҷ#v"@7# i4xtV#-+1CӅxu9jJ_Zd0C7H_8ZtR!/k+ruQ=v?uqҀzvFAI׆,)5ZPS. k[hx66oH!{]/|#Woi/}ϡo#JI.=\P}`g|يTtjB"lt8<Ƹ/@+Ԕ$0sU&g2Ws ZCGHW\nK!JVp DڳG0B5d kyu6ߙ}7cd~NRn0ofOr=7ih$dYUPT|ZX7_v6faB *t1*NaG8w=9:KDS#U@'ԈaZg?TK.ЍDfr4]½8,ۅM ѣ@Vb9; {H`cPO#LZ#sPҠ} ro +&4„E7 {i7/)^Y?%Y59$,לJ/*ls`m8vXKQ6K)H4>a\T$Uwc8㘫EAIH@ K:)@ԗۂ-c^r0 v?1$Ygc*JDB,j]f7+<*aPP* O̲1ezDnEJ%KOV_b+k+T Px6ԾLpT+bBu:#+kzXV+BZHLO4<z%~N{[or,UFQ =i,Dsl6fȓ& \RQUpERIQ^v=s`gSoCڵ4^{C/9oQ ~Cb|du}U!!hOjZ]>\B|*0lA3׶%YwQh8DRh>lv+]M8)RK',ރFA[xLF*VH<TgX=vs'I!иW4z|Q16V@*Iѳ8ӿ3.plr'xPC=~߭3ռ]PaC?7D+Z\jm{p`[w l+,HsU(B ݜ! 윏 厨FC2`mG _3 өemAAxAIY%%{Fu2zrUtGOt (e5ɄY@LT2dzR_yȳJV$.50$(p=jB Ђ *T0 oA.iێڞsW[9w1f:f 䢺B4Lshˠatk?ml:6 jD_;F{M-LK/SMI@D1B`qHp xxpk9-} [O۰  B;H8`6*,!=׬srPh;#3ѣp zPYѧSt7h%{Vq#)֚V|̑Le7$Zc[]ЈoD)H.^HWw@( );ʂ 1ʫr8VL9殲q1I?@SNMi#zBt=YAIdQ|Iے΁$'3ʷ ^ Ymo _#E[oAQucc{$n+-AS%ؽ3".WCrx1$45s@<٭Vȍ!Ggv$#j :}m >a.` SJK7wZ3ow+Z[n[ jmxZ1ȰN#gKQq&rßmEiv SvUb6un[ޱ"'XvvPՠ[1` R(&%a&eo>]6RUBDVOĶ"!H:btVd]Hnݹf(${DݏS#ِ`( H0Ա4>yZ%2t]˗cEmRC*e+AM>cc8! 7O)rey]ꓷѽ ZTxҔEqqk+aHiqf]Lru$} ݣ7xuxR5̽FUy\+*.ǴO!㡠 -9j1ʏꃱ&1|''(>J̮{~g%S_'ăb8&ȝC>w7e"z2Buﳴ{04Kl,/zm$tPUc$Y$í)1i#6$5yK8".A\{&;)vq"fw*E, njҙ4x1kw*ؘ"5TБ)6|ϧyHUMW0cW[amXg"19%l?O|zNF]_3_9N{u_lg#j,BGSS _Q*XͫhJYcP(22`k@H=þP3%lлBbbtg  T/;BC!SaMs#te]$shawMRtC鶴 xZ- \9B\N3Н)gŵ0AX{q HMTB@eoZG_KL)&*fN>/{rf{\R)?- @D9oVWgq|!yXw ޘZX");8 8XTxGJo'=~|'r ~xO6 qswd :KtJNWB0`mPuU%yyJrrP܋21_^W@Ѵ@.4w*B FK%p$lw` ZKvxbUM?XidNsqFG?*3Jo3jS݄h}&`s%2!† s0DoWo9Ϥc9w5F=j L ak棫-Ra:p|<;p+gkc<⋸N1ޤ'b7R.8Jxc?d5=\>sN/ Tk>C%h3#, `DC4>$ڰ.]6po^=OAtgXV,ya [3b}4p#Vcen [BJһrsδW'ؒnjD`Sg7o&P96P6Y&F?lwj~zL=j|W:|[#ϕ1cS6r_=@>wV>ʝ慤O5_ Ԕ}eFo:]/ҟc%kg8^g&9wىWLj.wmt⪧W`׆9~m1\VB0'RtyZJm5o]-n Bf e 5g x~ݯT }KUvo+">5[fh-b]9n5[c#Znp]b4lU?Tq! G0wU9 ]" K:FѶzp@&GvxM^3+]m䚱ct?2! }tVۘ+뤼s"X4V;n#ImQkZ'm ;8i ƷpO/XQ5*X܊ Ux`L13?;/5B_+ȭ~0خ4/qឳH.C)alak"Qz.ݻ*k/Zu4ζ7k q]ez6};=(=p MjPrx7Reǻd9 ȣ BB/sQ A۰BtiX@7<hJ/wC4vf( }C,(odvil@a%߶b1kuڧp? oN-Ys]bD,G`~D >9{솲l)G1 #Cծ$X WSkx_+᪒U5ױ aTzXZ.a/IU+VH]ZS4v'B ~,;يsaA,O5e+QJwgmA.哩8gc'sC ]xdvKSt[Ʃ,u|paBZV#T0AjIh9&ֶ7iI`yX1k'zo+® (85`V5 XedoTee Slv5CHhgwJ@T^"y4O]=ġvރJc!#,JߠܕAd#mSH3FYR d*YȫXB> >63AedËiqښVigv%{RAjBЮG_ e# n)Dn0)B>/U3F' l܌@|00+>wOC0mRr9&3{F+k:kM{ZkrTĚvI4̰5sxWfD/Cٮ '¬dgY3g怍 /toPFoҺ/!k-ڴ/)`Nwzn촮:ATʚS:*|0b%cʼnt,FBx\KZ\ϡ]WtDQvXt*&맼dƦbVSvZΒ eiCKD5((kxBI, h^>JP@ΐ@e}i?ۋ;` dk"KK@-M(x 4== km1J/.^F̎UnjEnf~VCAG?G=|t݅5/#TJע4n=u S$pZR*+=C>d~y~TWս|=~ >ovΈ!hsj55/Iɸ6v1# DM2q96+~vGsM Ia!=qG~ZBN]}"z1g:y VGt%.Y`e 8Ǧ:JJhQV]>cD6ݻrNSk&Ja ΝAqc9gciyQCoٓ#g~#6 OZ0q"z4OX^vՙ$gA1m5}\k1i.Xڔ>cOAMH_ljK;|n4V3˓bC뛆Rb,Sﮰ ,qw= uoL].i&^@sߧ'>tx髶th1F @69K3B!?Gc}S#Vؗ|AvG;,NM Ƭ]ˆ T"'׀ӆl81Jbdp!HKɌ{[ -o) ggO]dԇΧ3D~ŌbUΛjD#,і*zL ս\F$8H?.=|UV ) u@|a&*uG0ksNyD`b4%hVUk^gl*va'ڒr>ž9񡧓bu5@/ i=bon\TtV|~D<ڛzs&WzL' qmIA!Njs=6szXiSXA Hy=_mBfҧ٣~=xVo'3huޤsI^ȳǙs3% Uc1Vt8k.P }'} wj%gmŶ,FhEV>36E/{C m{ŷ̈ׯ5^ڋ2r7I/_u7cRgq-7e*^5fEL!$sOKPV"J#jlLGyHBF=}O G{pd%){2#Gi5ŷLl/-aJsĉM8S8v&\R # YJVXI6bAh u ߫ѻrhƸ$?"RY]. D}NCP; RX +6ncfJ>Jf0/8S<.|4[8mZfIFh'e]'3sIǥ`"?pDkJp^i d(&GNҋ{yLx1eZj6NoJ.'@|f)ǧMQ?7eb5UmC q V2naADpFzN;Fv8QPG{3V内Z#۴4LtV>Ot?[p>@126tjnO4{ X;^M2y wN.;3,wB_nQs_ę7; TUcnSVmMYI 8W"M.xX;e8iu%7@J;KF?硽+KCIiI Q-c 3-@V%Pƭs;W) P5Wi27S9>)Y=jR| [hQ3ʙ:;RJȧ\;?0ѽ iKZ:%E.\[V/2 ,G훈Hh! w.j`x|GH沉`U"rāb.ys3 s6\5|O6HY9}FYM^**; c{DOf+ZX6 uєͺe&hmХa w4= C߇?M[wX࿲Ud汙qS絒]=4AH[cΤWz`"*D?4u k.G oGr0XU<^g{urG7`='W}l;W5*rkO|o`9\4JpwR7މ=ږy&u eGZ>a_8/ۏT氌4RI>؇xykjɞzKtʙ^o8.E3̌%o=Jd~V ZѧY?yՎGfӸձ<;,RorFSΊU̱ofN2~t $1!~:mU JS?- $c\\ʻ&!J!q"~UkJٗ}{p Iz\Nj1r݊>#^G=;@Y]Ȥ2o\>jbKO; x)GoGQ=g$pMa]㡰k+y4AZBv9nŊc2ݥL}>ÃڕZ3{ yǟw5FsdhGՉUU.27/dJb^k}*A01+kBd1bm 6 W }C7~'2?b¦Y~@Ng2 ,3YyвTSp4O$tfHvR6Ȱ3{mqZ-q5K@Z^ҤsD*{Qa)2Q%CUS 0@)}u`%ޅAt Sn) 7;CVb[0qey&z_W^M?6+5>?E$j·:ı˳9!Cǎ ; =Sb+J.x]}LzVH;p#1,tؒj *>NwmZ_tx{;Ƴ5QZ}?9l H{(&ލIh.jL2FB= #O+v3jUlvҏ ^a/:m孨+k&z!~a؊p%b'`ӯcJԯm`1zŒ2h CKփKB哼deI4N(VU{e_CHb;:{jQ+Jy^i+:0W!I#ʻpץ2"HZ+Љ 6X;!@ylI4XUhTY![[? ;vfnFt ]#D-8/I=Px!tXUNԏ+ʷKWiH7,AQb݊Ba:֡q^REO-2E:=tEyB{\T5ſ&͏Xaz]l,}nM;#xo<l=d-k}ilܒYmNOkֳeh<(Ϸ hektQo%]g ET'D:) ՄȾY3-WV];90Pdϗ9kUC;fJyh\gpv9v<ߕoxg.2|+rI{3ƄRt1䲺b]i/:ϯ YnCRnlL|vN|΅l:B&OA5ov7*2O)uy;jfq?.uv=CgZHe84}?uv"D<,*qgo} Qb9A,BibGõ$^B;D o׃0&w'zDq'H'@ m+QyI;A@2)~\2iGg%ޫ@{!!vnn1o1ܥKs+~wstK8Pu!KS+Fm~꘿T;<6ch/z/a%Ԧ_ 3MCS\cN8` `󐈄w^YN~K~}w^|+ _1')ӘܤiuW=mit,-70 \fUW,mYv`ܟiۜYD}8:S@%5TΟѳd Ȕ3>vVI2f?}hkFQa-|%;)͔A6~?xR ?'>ڠ@~A!=#r|ڪZc2[ƷdMSU;fd#-kBZJSȩ9SЎ&*ur94kQo^Hb4=~DvNckݻz;]ޖC̯G LH\0C:΁\{񩹩< K<>6ޢI;:R ԦA2s&sSGl(v^EkFtR$ )YufIu";1N[p_oQey51'[7 Fi@q^VqhvŻoGlJa81WՇ,Sαg#Nê18=.oo`54~? _Ms9IbVC6ċz3y"F.IЙhi#B-HQGSk>9>fFj 7 WYMTgFqtriۊ1Wwg&iFmj3b 5R\J,̡^)$lҁKz!$'W u'7fO-t &a!Ѫ1z#DLq,;Tgʞhxk8~ObqzX+~^1&!>rW7c!lg@*{{q ƷǕi-sjqzk <&57- \1}gƛ9y9uEAlZП4="r6 ̻R_ ~|BҾXȃ_88/k;F0RMTXQ%GU梦)9 7hmM2.ĺEiƳH.7@Xk mG6VC[Oz&I+;iX04j+ Z,%ՠkӧ.,O`~?~{Mݿo\Zz^UzKYM/P82`Ud&'|>S6]3>|C lh RFys\@G$FFmbYKٗNV3D& )iH]b#뽬WYZwŵ3.=5@#R {l:V랫vѼ#}G7llp~G8;|!`ؤ(7c!|[#=z!B[Op1CTZSBJUn^QSbxCLqI=dN6[E{CRehEۉr2Xŕch jkG'r^)8YcCgH|η_a)`w?EMJ킀b6?9[ K}ƽJOJCM*8 3TC틻'ʴIkO,-q*|N\1Y^ ݽQJYn"(EV(wi6=XX:/(|-~[(ݺ\gl 2TmI yɧ3bڃ& 񊍏y'$0Id|;!Z,4N)XΓ'? C>\ECfNuQ,UJ]qj+Jퟠ\{^CxܔTWmqcX²* UHElУrqL(6{`Gͩk۪,;~lP{Hw'>5>+,CcG#1ls= hLലB]gl;Fgx֝HFkCrb?c 2JܾG;H0#;<~/ ]C9,}ϛZI${0+oH;\?./ F7㐞Y8gRZui P'ј=DJpT8 $N2\A2R*}f (]'QW؀RfEXAs,oYCi_D/PxN(K{~kds1Gj)N?aD~ '*F5@,)8}zqc,fDbdݤijoq[9"b{@yӇhwYC 69h"zCԪJu6BkޯL5K[i@wH&WnVcZ? &E%\UP$UQ֏)ˮQA[\59bQc?5Y NѲe͒yH q`5o~=6އ,vTa,$'LSc~ܿ-aNRh>7¼={slj Yo/p*scHW/WTx/Ѽr*㹕Xb J \Nfg|WR1>91?`m>SHEi`3e9KsЩ9q #3}c d8$w( %T_w*0~gcu4돃}s@}lN\PRk|iD{\٦agVeYD*C兞#1@Cꔃa}[E)/A`@@3>zW'<Ӈ=j;]XwvK5%}2Y,J(,l+x^G]Fb3)ǦxYd^"ܱW@:7ሟvO[ieIaؗ5xjU uSM 6㒣7OI k҃)ǽ< u|igIppH-B<^yRx[ Z^u )ǟj  FΜ\sQʔDFDܦ(3<na}6<]$eX/KxvA oqʜQ[-M]LZA壀=~d{=4knW*\ZEzmʀL.B!wځwk:Iw/,ر%J5fD^Sϑ ȮP6Xu"ףּ@_ʃho5_`yWEiyIۀ8twX`K`gz캁$sy!~.8nz( 2J-biS2P;B p6I>="w#Aʇ_z\rR>9qp]S 臹=uǒT: ٷ?!vVc'֖d}ˋh?ʨ<|ҏ/bhƀ)_VM>FUSTI,cا@)ޗ]WOo)F,|>|:V/>,B^m!,M`;6L?lOȂُx!ZLsS#I(ly/T y/߮ oS6Ыh2CchH(oy}r H!xT 4> !fctCoT [Ө\zSWm{jpnB?<2)Bj<|9_aH>MSDN q}@ߟ匏pEƝ9%)B$۴HP4%FI-[yu>us>$xQΏ4\Kq ",6>9W}ovv5Kf b,, :Ek_*d!,v7+kjU+²1ilr 1 )اUVivk ;daDpDٲ!Fi9}B7S  PJ!O-wS\22uO[4×ztZ"?[3#%fDs2TްnIr{zi$.nABaɆBs`?~~W5'7}366);(KMKO%/,jEgņ",&l14Q74f]y P )9kQT] bDr_!pZ54uۄt sソAڀ/6MKC|XBu]5AX2gHYsN9ZnLJgq^nJڌfMJlw9h+sldCξ 5sFb hZZY'c«|>p<NL/8Px UymAѯ>i3b{Н?v%hv؛4$/Y!|]*w}vRJCbaPOAuA^~PTI\rZUkHIz>!R.Ӹ箕S\'um .Oa/pgfVK Ը ʒHO/?jH0'$˰4O?S9, @Zbs;Ơe*'&mPgOXoPYW`"@aJKC_yIBWxĝ6أp,8˚&(Hvk֯׬ό7 NZ?{=LM}!.Z5vqC LvRl+ OO=lGyl>?p[ci|ufӚQR6Rf;#}dEMmwno0y[|rV"#ԳsG#Q, BquH(1`npu?SǚSvs!c+:™p["ז#W:ʺ֡A9;\Ыjc0*-O*+(sΟLl"ϩCk~z0~Q@6P[~3ATtO]NL.h aƏXƉ1&JXEuxBL2Y= y>.3,[ ^7f޴qeȍnqG&ףb8CUZld" D+̓0dzy!Rٛ X_#r1Yᧈuߔ;z$ߪ\" T!^MFt*Z5)ELցw]@C s?#9>bǪc[4b7V_DBOL:wX{ K`; Ѝ`n]&ĵ(ޔENX_[{y  Ce;^w֭흟F޳t]qNԘ^o?Lk5!uKBq`Se j>GH "2I8K6 a#N#OW^f%F (~kġbTF{{mk*ٻJm/.s*ѾZuAkNp6K*7 vtjHg`Cggpt;+XϦ ."UOQ:`?~-ͥD |_p栚}݇MG;/;]}d})=k4PTp:p`, 3a~FE>`ǎEfjP.Ԥi0>sG{]PBKOͥlM*мǑ;vbKx]UКqOrZh+\@>' с$?=cq3ȧqڰbjMٙ:.۝Pzlzj j5 Qzy1C*ڒ-rkÛyN[>{`-Ouh1(+󌄚ȥSeR֦AgrS_^/&%Z@YWUիDg- 4 AP]E;f2!p xstnRh}CoHgm+"'+?4*~R#4D?WE}];뉻Nfz.v|a…t04]'"K8ySgc7~ckc6 ʠ "˂/8*HYڋ<3&S]#3|p]l ESaq;uEhbW! UzҐמ"yz%W:_|$> fo[lg u|H(6ٺBӑP%4ϐf*Y9ͥqYr\4'UhW|~ 2gB s?Qګ7O-S`ht-'?+yA9$mQ3ύ¦ׇrr#=iwAhtܿ]N5}1Ei9=2ӍtOZJ|yXKs\5%\pT_KoS {fv;,hgKAq%V; mY!R{[Jg:*~y4q Fbr=N~hlG^p{_Y{iȯx&JnYNz‭˹Srl v˴BsNL9Q^̖ F<;Rv0Rg\аa{1u4H+D`U7xe!AldDaUL%p;(Ubig[pGU5k|Y}St Yj=xE=LaiovGt&4Dr:[}c3O SP4LނϱANchbƉK.Fzݣ1vVl=~ʧ׊C4}ɯԽ|pmFO)(3wLO i36XFL;AWrWL>--i. __:}#kG\RrI.`ԛ1WqJ@ "oƫ3Jxp>>HKcKM j!#a/H`M#C e4M 5Z-&ʼ iY+Cڷr|`R^Y곐/c^Uk7ɱ#/(X^}qw/nZdñ`G_?3֑s dM^-?}S)(Ex[&x~:/vY=u!;6ej ж]f엫%>W/ϗz3낊ӱn ~qQ3R " c_ZU6nȑ VϼUT%JiA`ϽEƇ,k1(,:CQshmV`:ν~~Bt zc}QV 2?*#|'u 0o9bCP͖*]!G vZd*C;耹iTC[5{ZIA[q+ty0SVBeOΚy}%}N-xmtЛH^EqIP8n]cWu d#L5vfGu.UW%}Y G4FY .t^AfDxa݌V58*cl𤵐IH_%@!wVXݒxqp1r/@zV2-P\W.sAvzeͽAX()=QJz[? lHǟ"yI{Zw˱@) ȪuP?aZSarM Y`<>e/[*ӱ_T)f$6#񀌮6H ['D <~;dFJ]Уvq`+1bpQmtnI7aWr$J1wRRTF[/&yehXU{1_q&&fCE7;bU[圣aNˊ14s\P׏'EK`GXam>v40Ou vasBm.3y$zZiw|rjUsG1N0Ce+{ZB[@6dP0S,)gQI4H+Ew {nS-ʆdhLDYr|Fܞ .(A\{$`CZw*E2\㤸d;gbP-\r3]([jk h~$gjO*ҏ&Wfs nB,2chQioLJ;G7.cv-+[jyDDpDR\)ܸ9 #;nyȜ8eN*a/hM>3QGCQ1UZc 1vheq~f4r08IPʂ,m 8ӬJw^G1MFCD"^gK3>S ͵`7CHPeNW?؜CW]<`Q[iPlb$ff[A5Cߵh=zSN Х?yzn[' 1jurfWh0PѾQ+M%wa}.!Z0e$)}k ;E5F:ea%n.˴n,*ЕCo_1 RPbi> Ƥ(![z-CBacϢ˩pG5;iJU"dT+$cho%=UlER`vjR]3Ybu,A864dry!|åTհ8j<'$ϋ ydyvS^}@r!e[mv| l Mt R dmXzak*÷ɘ"w})P zƵ q ,.`}`p8C\MR U;Cy#Tވ%d#Ո^=TcK]i>Ko9-ֆ|֛92\933"KzWSaI]s r/_ ;ѕ-~AyM̽tTa/jtdȟRsPLLEZᄔ-tvŝM&njzx o跕 "t^jR;LQL ʈh7G9{G:|d|P._(!I!Js]0.J"^5&(\7Lεa $i ԉ{e m\'òQaQm4N Zr,.N$E6A5z1sxG@z RCe׾9vp]9*_@T[@(C!9|h8we|8k@.xo0U_Dv rHp2 'A1~%Iu LjR1!̾N ygh;+] E_D%z4;ȴo]Tr}70qy`J);ΦZ\Rc`gcH$?1K5qUVLZE,1ʨ}^<^rR<xV2_<1mGTh:^4mRѰi||qjRDb~+B:$ ?_Է A] sDKwHg\X>'7_rS 1h-͈KFng[K#NJ |:@앣#W#U굼Ec%Sǵ0?a{vjUJA`O ª#+FS+k "I 0?׍ڋ=r4lo7z`- M[ⰼ^#խ4 51 ǐǰ`ew>bU5w!`$.vVGבwgi6mܸ5cu7SUKxV} ^чQgqi1Ej )86h1A3r5e aD~J-" RSednӞc Y$=:Psޗ'هlTl QSޥ%>"&)tgg߈K-t \ĺ/Vwӟ_(26’nGR=i>)oTzȪlkh'xdR]Zbu"g"Uɮy߈J$̾PTY0YqMcn gz />q*,R D?7ĕHeԯ:]d g*tV8ϒ~nO|)rTS[LB]5&'zM=,8DK{K[,Kn eUUfhtt)̛f$:fk1<0aH풪%.Y 9f޵"Ǥ5GSF!Gx96Q$F[}U'qZ'Z=!o=WU(7נv)8u?ƩgYXI3{-%i=2x-T\$F$C(lTtn9o3 HDԇC?A s+R0gRB SKP_{ # "ɞQ(?{lܵGU/mvevR#RBk\nk#\ue\(1:nNm+v4;tA(2 p=:x]Ý8mCyDD贻%p*( ޛUUs"+Zg[AQm@gƶ lXLװuAnjG'\"…OZ50uchͩ ZH[HWu*;B`sf{oǡSB+"@˭[!!Ym*{~+C١Se`gqM& :'s $v efNEҼt 9")JR=8Zsϼϐ:j1mTQƦ1YBa{tfG^=i$F~l% ChfO~C =!ؕ93q{/<6>G&r(Kd)&WSYԾ5쐝@(t?JZyg`oE2k4IZH6 sxuY!j~!)dCq][S(}v塴w;|L r=kB/Kp~=,@\us}Ӈ$+"do+'( ~,[E6n˹jܙ#)?1rQ-6;+)"à8fCd'yʋ;\<:+ +d#;DaGbditc [)i+sxWg`ͷӑw] ?|.VWݑ˔PZeBlgH dRz {"_ppuk;bG$&]>t=1>iCPȭyHͱw#I:~n%: h}8t\Cڛ9mK\wXQ"h9{IGc#Dr#b i8+u6;oao`>QI9$w4{y}** >f+Bsz" 0o%B{j,g^{Oa06XM*XQ,+ceftgxḏ 4As郣!m*B c츗=3•<b ƀL`= :#i|7/OuiLj҇Л="^W55rjHEn ~5 ~f/B/rH?>vGF!׺?P {ebFI{rYj!D\腳QylP5KK1R$2c֝ʁFiMZ57Ι@N6F[>SUHG)b? c`n{ 8mUZ}(߀yl8 BoJ;HZڼcBXc ۚ;;&$9zgtoV!\ۿ_z{P',MAUu8q(lHyklɣ-9G;ᰩi57)㶷gPU%ULJYվPugےoBƱ>`'{Qя57gl;xh!c8{Q -';^PT;RS b?SQㄽ/>*m+73d:Cl7V򘉄GNW[yB3(,dʏt+dM9拝 tk^LvU$*[N|v$?;GH/RQuGr/VzcFDBkdT[8x|JZ44GZyܲ Ɛ8;礨5c?;)Zߤy:A**P/nDonڲ̠J+ҨTr CnLW sqMBWF9/HM*BG.#j5>Lx.% I+) JvՏ }Ex4'kt$#m]0vUV7_5}jpy|-C[/\WcYz8B߂'y?=6~eĥZ.ʩ<_o 5 #t%.)?"d< 0v淳h7+u#Ƴrv͗Ve:;# \ˢ[kM;/sP.7A/1X. =YHoO ⣔Vr؆ި~%\<) =IoF,!2].t#їؓܫF ;6Ϻfvh0]zCPި; G$O&"f MA^!ױiuK̠ɱ`o ?|ޢ2M +7N,΢5nq1dԳ5…7_RI։iKtBi lkfpw+c_>sb.f'iA/h=Az2Q/",2r-匙+bOWTFw|MQh8̺gEfUqVm{N!v.ف#O1# eQ)ʁd  s$\]!&ίnZ7\g <: Л5Kv\E!Xƈw"7T.zz[q2ԥt9T%ºNƄiϖݞYӼj+znA % >ۉji*}@;Rg+'rxk Dr\j;-)}.zND" `\aVvW"4\;;';L}%aS$cUJ\YIA9`}J~)aCI[z[3_ Xn}mBc`2gh:B諒=OLjQ v<:䎠F1 vazãa@q/W`ygpf7CR]0H׷NkkhZc_52׎#Z5Dݬwt^ \ !Z솥TlS7S=ňX˾< 4gE;O<{^mLB8Z2 ]/dٮ>dץ% `.XVp o?OjaM_cMZm%$.SuF, Oǝր˞C%&b={VpJHNY~dIK\ ly<ŠIXW.23'o*5_>"%l?k+Ji.;MLJGy1]GX#ncc7ZN~M k\{0ȧkV."V$c_>GUP5<úDӲFiD&mʥ,?m)d4)hĕSu!@ΦS/$ 1z 5M 'A_{5CH+Ts J;Ƭ?u1 zLcyIɭa;&M\#:%!'ODUCMc~䏾|od9/:mmpJ'ʭyss<6֌敵ܾPQ4Qi΁"|h3 #xϭ;$#eSB &T> $M摴_f{+5Rbi\o}'Žxf%Z7.`pDN9"-xt{roEӭ<4ÂUf87}j!ꖟ:v*XTYr[%aH;h )۟$|2%!,\希[$5VV\30cPb"-/#k1>/-g"$r)H{'"aueN UDσc,{UO ˤgbsGҒ4V|jvzЧ0Gsw3'Dc,O#9t1)!E<+(S2Q椱c ›?W 4&+( W)2s܍r"d)Ī$G$ϲ#m:@;*VbvAe7Uܖ$>6c+"FWT=b/ڎoh{Aoz,Rrxw ,N9 Wї& Kkxd.T%/y>BpS2I4#c!>YzX]{ŽݥC5Jbjњ}~i\|&#"R1X I^2AԴRm' e:spWQ~0tq^~JctHO] O#lEt?$N,w3h8ڡl&4pP]ܰξ6E[ u=l g)#̊L GauڰZd1?k9rapk <~?!ۂf՗ɳG2qRe٨:켒?n\"L{Tc[>f>Π{KOB#)$h5vkSZz)/uwiHVJ Qb W[Rt9H0aك9Xjm6G<CQ"yZ{st&gCR):3n{nYYW67yŴN%1VcFV=B&5 ʶBԔMe{OY[)pPs#rW?z՚L+zvڸ*8"%.߈-S*1/=9cT>_j҄ "VMjuKo4^#㹥!u=Y%AgDa`lT;&Ǯ]DaYԅ?_9,#*U\`edLI[\6}6jaǒYW}icݼ=,C{{Ji˜? }Fbx{d#]SD QaC:7_ʢ+1 wJ?ں/,# F: 22MkLi~U'#Sy5 ++gFo/f݋Y%|7D-DWezim#{: nMnV g:do9fJECJ.tk_Ńn؍k\*BFhGlkl̫Z;^`ɡ}a5d,Ct/8k{Kŝ?S\٨N#9ޓ3&3!Y6m 㴶rb[nmG&O&R,"EfD(M>D-&M@ :ݫ g x^\|޺ĝ t>%U#c) O@EC<^sJ|Sv"Tr|;؉ .Q]huGbYfA Wx֩22fc&X<%T>aVmbIy!*vPޅbrEcq1mC^tgV4FlsKd.o1(Y AF=)X.ڋa&;ȵXCji t8`ҠoPyN+xP!1yПȮ_[\(z;?xBK`߯>H2:-*X2!l#d LkY1msKmq4!-6ֻ{ޢGK>Ce1QHCj-U ]~Z*K*"vĹ):v\:XOeZOY%S E]2C ܉&`B/9k@V tGt9!NSYV',a:u M`~1y>ډ1"ꀨIE'E//Ta?pZ[<Ϗ=d쯣^8JDsV<=3WZݦP J9 9FLf'^>%j"'[Tdx$L7Vyv#\Y LBL=m~>{_e;lЩB"hb؂UOGo^D(#pԍ%yX< S"SIb3KoB/+0k+3cjGW0A-ovI&.FHEy<'"Z<{ 'XTi L ty5KEt(؃=Ɗ-m1)Fz?ln!gRťGYZӡyõvL4bG?U:{z~8[F[Y Ajdje(;f<Ju--ɯ@n4LClWebT('8 Cۋ@OC+Q ?suPW_QdN'iϽcb'CWRjI*E7b:xx2q_lYkpaI  g]mGV昱'eޔ6vzmfzD7"Ac:gLD K-+NRƝ_9-l+cdpS{} pNv:oCU]JnEpC_xǔU܅ҫ N[q*1׼IA ZDn5evkrM,kdI8]d>UՙyS o '#ʒd@VH!AG$P> r?P@9RfH%ؖ8k| A53E5A5auܖ(ȬW,;FDLex<%W˲]=>UdXA^6lz!_,@(bX"1̌P"<'csJ;j[>)p"c&2<kH[AV@ MC<3ǧȟi%O&YZ(3\ gW*$Xa+Őg;R8>%KHÏ|Dr?1!gIXkͤw}pDHlaINe+֙]1 yǕ MGoQ}]8.i2,WΑ$=I58Վw⬄fC4B"ƒ:y'gÀ?hTt#Mk=_4Ugv|<0ۼTWe{F,9c>B 5ּvg8\d92ǜ3L#`x{ě┤3R8‰n|"k<@MdB1/1t+s/Ë;VP,"vFEg?%.=6y*@qSh!ѯ*Fm{9!<9>-RowANz՗(԰Cc9duQ/yA@~QpKE{+xψE >Z #ڎ  ޴ ]y.WHHN %QBh#*>=gYk3/LH'|s5O޽.ua$s{OFʐ4fS)B^_@+A(vا9W>\$L=(nMSN/ n1A䉟fǷ|~eYWwVް9GS)yte՚>jVe'%ERhp[ a5#vH t{Sk?rC7FۈaXj+}h8 `;`|m,7ub/\Isv,q+H! Фe( :)vShd : y0g/q.z0FGFJׯAb|S|Y VKΠ"5 4^ V~qmvAR󈐇J0@\YӐӂਆ,薞FLX`Ye&g?Ϡ!n)'2ž^k/ЊQW3cD1b8]s0h){d d11CC48lvglz*"i_ b}?kz`,cq֎'NJ^;$H}OyBʷ;*F>Chs ¨N8J{)f[RT+zr@n,GRt#6^ OPM&2 qwpY]s4؟X,Z^+C fGilRj+!`zt-:'R̲U{+R;Wyk7jT3l 4L;(wj3w`ؗ$$qkCn0wf2K q }ƨuD u& >QB)H" w!K9`1w?~s|-X~uWQ).G[u8!v1:Parы9Br@^l҇qR0U5v:?Vb='/5ZAYhjT V\t2ɐUqI.93wIqTh{pát{?nr4eE.\q0 ꩅ+MФ3tVeT! vzyy=C]F|fp l{2[9anIC4m[?M;y0`45 ||qjrP]U˞R0b a(j|XSPu yeU\` 0-HR'v̽O1^9|%Њ4xȄYX1@|t[[ᶗZWDz^Gxǵo}! f{لﴻ'ZY$޼^oyo;]ܒ3(=Tn>-@K%#o`P94Ikdэc7WΜzɼu:ybgHf,B X'~bo(L֒=GQY e%zH $,ow.`/D.£JqE'e?I;-8P 7rK ʧ6)+倽9> Xy4R>EX _ ۊ.yGP΃nU L8y(\~CN '<[2b㹵Y )n{G omM1VJPȯoslLzDIϹ1]بWP7 mF#C>Q*a  )/q-)O,_V$ # 8἗l+xyVo&a='_ 9[F"B.2{Zggm8Y`N}%E8r҆j.6Ec CXO&2^!Ŋnb1t=v`5k؛ܳ#HU"c7P)Kzα=ˍ1f۪"Y󚈼#+/,uP˵@-ifQs/|Vؤu!rcP97CwqqjO$<>{gBh~Yy$qڳoWF;=0" >WV_#'C-wa=9k» t}|h?[yria+ i9Xʟk?jl}|u& ͷAH;[pnWZHE.")Ac@):l "i0bKtR?.m[66>Uw@w }C"%C2MCQ;my"7@oLN'B'UXErB5>P=G(HW/h:ހ_' u8=!/odYw3 H48>՜@zsz8;LI;$F^o&{!X "cV!{h+#fю2qSY.=rDq>4;^_f_NO ]2wTt]S֌ 3X;0` 7[Jo[0&G5*542;O,H;Ύ;-Hq@G"5]aOv& jGdh4qE7:`q7l:ɫ?K菎wG/Ƚ"ܪK]ssܠzGllC"jZuK 2} K9o &ks<(wӘ7u'Gc5g) Ֆ}@%‰=! 2cQ/. #tQ }ݓ"`S5B'>RD{sAC1LTO0B9\|gA(;oYh:*jzuTA1y!ޤ!xYE[Cŷ²>"UO}xMtx}ōJ7?a˪wx9Ғh-%8.FU9#!.zq0:YRkɌ];esa(\~%1c蜦vۛ?%5߉)=KLI5]?FLIəUm9B4La,+('Uv?ճJTd_RK JrS,)r*ZEp"~|0/ lݔdOY]}o5ۯ<`QavUmAQTWv셕Mf~U゙axag9͢=C"#]G_x +Ҵ!rL'ط0/3CPI `~h|0B_p]h1YԶ1CSN8q9 =\e?)m-f,BK4i  P!3:lR0:MiβrYXZh`[,o۷_/`7zvSv"˃hCОivqRxPXWXvv5*^`Uʌ\1i;;)H_pdR7p5\δUIk 5o_=B>C%5+lCb];Hp?ʛ^TNPa+JBлEAEr|yRwaXF~]sDP 9eGLmӌGu(s(H8>rw=@4#^׀g7?V1"1",XzN2KhzT>A6^RB@qK߃sqI*<Kw Z8#0 ɽf 9I!_3}T3]%Jb_ \ݓ > OaL~ %o-UI) ZU0b{dekk"c'bJڐpH[iqܻeVh^OΌa{'3ځVNNnaYx:4^nQ‡#ap1wG"Bk˲7Cݙ:=ŝb ,Z;z4SuFKgsͷ?>nXc䛲z{rcPq]qTggpJ0@_Brd]ߩ^[ ZI{9MظmIt #LXX7@Ϗ+D>+t‘w|)& +\'d{DCn 馧bޛ-zT0;jQc൧h&w؝sa=ھV~F|hs9H;~ g Қf)$wuݭsLSbOYvI"M88L,j[?>Q{CpRauRObT%E [TD@ose!Fb><G+ue#2!dS\ݒa(m4V: Ks1#* {,oꁣ._qhKC;l }iO?A[u3]kmV%I3CC W|Nw*׺'JEw%8 ~<[3|^KaJkVibK>2'܈K<=J{6j0t}#}$_xfF!ƻhr51S]YdANвfYL@0ʊ}K%rlX ^nq篂FGX}6D|zɐ:ksg-XP/`Buq!bF r,!"C*'>1VjeQYO83bߘ*M' ml|df7+% =V+vR@~sL4HdycĒ6ـ3n9qm&J 휯~j4Ed$CR&r\jcxv.v:zs/[boӌqVm2I BkwM רm`gql4Arsjm; z iZʼ)&QJĶ3[\$1sZWo9ॊ,J# uYջpݿ"+؜ ׬yM9CDXTvz5hd]BQp郷YBӏ~sK>N|gwNkM@,g]{Qb<=& )} r+Nc\c{tyubʬ9AyG<> &@rӆ?-g*+=) z̵=]/ș?P37e(Lz.D($V1?>C3#uz0\噴3#h4ab9*5\6 vܮ؝ÚI#ʾ~kN +=8]lgHIKN(ú,@HWufͼ=V>6!N6BJubsֹݻ_JB`+BY~sltv؜zadK=Ӎώޓګ̗" jjL/bz3_s `lKQ^]lޢүsl6#yc6 jI6Xg_I2hō a?]s.`ؿW_z{r`0ÃHKӬ )3^$\ 0X>k)ۋ!c혫F,Eq`P (e[;ojlkuqԸVoOdDmf}؇W+}l/Cf.2^'}ۈEG;ŎOZDuحQm&I"w"zS,;9>ͱ$vvqVybV9=uaI|lO[|vHݩnڄQ/Wj$`z5} m=DORynnpο3le`&ŗ^h*N4(bnhٲYFh ϟH^ ξG dh# w/)Ɲ˴Fsl,"b^0ևˮő1vC z"WS"$[h2"Ëi^u? "@}%9!arh+}'mimk=aw7%f7Dvfpi?_%P?S&x4WҌ9NWֱ!x`Rm91Fh] ܤ)I8ͬIP\mÃ!zQ:*G&Ub%9Y lGQyOMUaDʭ|@,|bm|qIsQ9?ra I7͍/ZK(_IAɗ6fUkc`.׹qW٣}(֮R$z[=V-4DJr'Gxd FFNv61&`<fh/O/W.J kD8rKL2Vo"⪫>4Nj>%nOBhR\8GHHpȮZݑh{e #I([c?edP& grĂyߋ8\/Qߖ ֊"V c]df#?k ̀M!Cn,ЭE9t2^>v6jo!ӓ-USKQC0j]\D9>qY2,/# XA,5*'R@+lu^r9,M(Ւ?E;ZY!!ɴcSR#; 4rqP^|DӳB}0 5T,f 莱_ö&2B B<Pٲ9+؝}^)y71M=wA@,2c:?HzJ^>Y#ބ֕J=6zK.'$q2!\5:R^ЩgJR.$?ciƻOg#ϐ]c4+x |[HVvH,΀l_@ؖjLf"j1JSd!r>(Vi1:ӬOI~$I34fݡD8\GlpgfؿzzQB#]Gϱ8߻kU6|)T9oS`"b=aEec@(Yp50 9y4X]mf~e֜%\Nc%zY1;4EjeCuIhHxΟ٢ͮmϛ;lN:rƯN֣sG .5 h|Opm] mtRD&^ǮVtbBXEnJ ӷO ݁[zuI&\ꤷZl CXW 2 "U^?iB-7$^9OB Ҋ,pJ$q]x!3Y%hd‚6X+NIgBN*0Ʉ%nznZ6ˬ]SWgx!c- eDDg ;<͢ 1~CadG'ZpתkTT_zS f1Wrd ءfCZvYڹ YnܼW9>#aSSрS-@[\}wX8U;ފ9^Wӆ)PZ+Ĕ'3Ê#C p9#C4A<?B[WbyI>8e_,:]&/xzl[lSZ'ٯ[HQf=c!.`7眧ƶÙW3^5V73q]5D\ vӊѾOz&[f\t*+b%hj#zciO݁RKXW\W>?Q#R ԇ})W|fصE~b%H.O ٚ5Vt>GU+\H=w/Ben6JV?aOsFP2);SzƯǪE)ouYIxY%Bղ!QV{ \N@#.g0.O cʋfP ARVRV\5` I^s aH.@~xZ 1V*·ov|C:?Fba4؅oͺt0Md6DMMJo#'6jT#}|D~J?Y'$NК^Me";b{שo ™ E݂%R*#AL`63Hv뾝;"ƽ{h+(XBQ;$i^ {j(u{C1rc\=E;|^ j?GJmugzrhy vCN{0S*c_Fz'esK]gUvgQ1+hnEL`}d>ہB&m?% 3I0DjHbr>8E w)_Y^9tPBFD[ Cø=XYp@cƎU"N{J utckp`.P]ٞrDbO x!n.}xq)TQKچNbN7PfnۍI6" {ZoR}=9gb_Xf- CSL7y4gRTJ4/| EORq;qBGy( oV=qM:m$X>L,-[=݇,dh;gt,D4ڀ>)G^d<['F}pX$ XVH]OGs"\3FLSg]:؀9vu#vc`D2F؉Ĩ+z+FAJ 4K~ Vn/wȽրe`&k [' 8cAF#wOrk8Def?pw@1dMUe =Z-.NA[G3~G -dć̂K,H1J>)a䌍X`Od# 6e>#Q.ܤrZV:ݤ7?t%l+εw kG8K_C{>it^+CJq [۫'2ޛhZ/~L{ė; ſ bD8 Nڈĵڷ-K$&V=d9,߃9ZϠ(@ޚaJTc8%/!YαE^e$u􃱉װe{ v@UFb%b׫ln^ X|$$:$ GW?u)إ~Bzzk"/svbstNPb(WOӨkmpe0H[%r#+蔹|'XJл{"cbY-PeRØ3!ȴ ٽo)DƊ5Murst^nڠzǂ:07rӯI HdmQC3y$+ XҀ7M`'$n>'p[/qWLC2ĨZ--HƾYJkYVJRP-I t vTeDZkXieo_[+dXtlHfR]džWBޞ֝ }LF9,9\Imk@.YwIY^8y0ZU,k&~~p Ye=rmIx z.*'^Bڸc'EtL*R|BTP7!ȴ@!'0/aD]4ԵKh@=|B+}W#g>q68, z B=N&ugAh[{2v?z~?C,6#2\9 } xPwvB%&#p!g|U9]'sD-s>j/_Ͼ.xZ>cTTEeAr~3nM3r>99D]Y'Pf4;k][m^9Gɲ&8F>*tb)1- )c8[ %[E Oڑ]Up[DC_RLx"">KΗ>1 ?CT;z C[<6$\5k|ǹST8A>(ycgoE/~Cf⑤ r 9U9CU:d:B8Śn4A( #v+q:U J1bymۇ@,ijaB-0<f:\Gժ %t /w]#-Hh^%6Qy kk/hG}XE,)h qR/Op-wƠpɻE岬;|4M~_PO歼߱_IQ$M>k{X 0QդUU{>Õ` 6ۗ(fyl M |~e"սc[@#y~zwqA=[CLbի}ˬcCzcReb\vm|cv qBC2"R_ eʀ^Jkڐ%iHc褖725e}$AYXѽLqXOѾ`*&ٍ#O["k5GI fYniy ܌xKx1kH:tۋrvgmg@ѾoJk23#A 6s;P{ּ >fv{/8h `9vzfXo<߉Qcg~6{ Zzk8/|Nc(¦':b;) c_{Zʽkֈ:uAo~.+ď\y̏bP-!9"H>ŽyR>Hl%اV %FCD¨Џso=r,ǖܱ(.()l!f b,Y ~f|LjQ60>\rf8Blk؏ q/>Z [9Ύ6bd'b)ad.樂LR(L ؝-/FTSīh+|[Oʍcc]jRE]]F[紱 v~W|mHE"RwmH2WDZJ?n1Bp55>k<;!0]Cʌ]OEOiQgDf;)8 /fH=_j4 {ħ-Zq<ⶈdUlɆ'6}G1ޗ_d8/ ߝ;V?rZrt^-LGhN*}6Kgސ4vAǑNsAY\CAhg|0V*Imz~Z3̡'̴7Y N{?$=ᒤ'f(g+>5|hE e{WP'wW=z@*)A'([oV ˘xo+XuIkϳRJSE)FrU50ƛc~_c@$9ȯ 舕ȧIZI٫nqGj1{nIR`**#d Gї}?Vث] a)?LlpF f'˟Ob!?Y2VJ[bdr!EZ.hr`tP97c0xJzRL, P~#6!G!/D0$?@+JT + 4$!Yٻrj ~.#v07ϋ]6< Uh!55v Qݥۍy5)1x_U]d &_y(5JHEwv'r]^S 0wQ$1.6ċ) VtFv%DǢ` D =\(b<:ygf&n+bX3-vxUxV_ w6^:w~8Kc^֯V|f;aGÏۗ`k' ZcuH+47C9@9>yjGlWTcd\wU[rr˶/y% eR48ޠO L#H^Qܫ 9mP'}>m*Ō/{Pm&034Ο}NJxv&%'ru LjOh(9WUGViL%Eުx3֔ Vň.?)MfL$]*S$q#4O͢\o.²DRmÀw fǞ zýQA]ތz#}l" 6.۽a+KϕLҔ 6A]w3yփyq(H&lW6!VٿH7 zD,94iR`Xl>Z8=b 18:GԐ C%q!n'\eS ŏ& .6y6Wlj-kʁjLWTU>n}B`I84o,E;޳* 9VsȴV O`{QpsYܶSV;xRRv S`it Ac!i(830>ѐbb؇AZ|G,g%ǡ]@ЭX6^S&o"+N8@Pp$872|zA}JԼ>ua0B$!@%8n=o}J*v N&fɑ-=ͦ< D[H.Z?;D %Ɇ} io+Vf"߾!Qq;x8#Kb$?}O}J-GgidFP=IPN-l֋w v#lNlU%4z4<9|D"$lidœi0N:BdsbCѕiU67S]}qק<AYgTC b䆈/L/DBGط!!Yv]w 'u7tbʈ}erp #=+[/ulh]$aW|!´bf L:+0!A)'wGQ{Xb%Eb asg ;7t^2S24F1ԧIDc ak*+z JN XsOpކlCs͚'Ly?17좮Iƌ<:'t_nk*qͭܖRP=kkܗ ;NJ]Cyw p/}HxPsՊ{g蕙V)5ǦMAڀ\;W,}OR>sy~JV_=!lXr0$72۽eR*Y1O84 vX`s?+ 8eָɲT|bwSo^3lx$*j͠TVBjR9ZI"^ևov%d1t I+Sy-ODx+QC)[72>A 2w + &ВQ-6u 'pytkk ȩ>jtqrXZκuP}q|)T xjcͲ]VJ-eJy W̊H@Z´kP\dDŽoZ^W" /ZY 8 '=CƸ"iv<5*4=G#2\ȟfˮyT3%Ɲ>{{Ri3v~ܑ+̾C q'l Rˣ/I_PMߗ(Ο/e@_#X:[6r9qWI3i$U1ϙj \K(f'ܪM"i6%i\B%TRJܻ>$B1$*ۢ ^j|fWtgm6iԩK D=ט$Hf(1`ƍRE M,+Vh++mC2'\DI5vbZ@8n,qDW5×T;P0.mQ MF'jorԞQ ]ĈDkӊ1YB>M]銠)ce%9h޷0r){ z WO?t3畴֝¾?)!k~OVpH.oS"ږubNz)oU9GDI&jo @ݱcJx 󿫲vŧ&_֐&sۇkhJQ{js;<V?q 3!^J6^޹1ܻlw)8IoOk/J1ǩ@R!G-`0k+33"}6Ӯ/.m  |%LgKoUnQBG~]03^N<r$oL1DӇOnr)n95uEQHN6zЛ0M ?}o`&X3J-3wJ}8W q5j׼Ci meFZXXe5F)ǀkr:W4 :j>'%7>]ۓ!u8QxGٶhā9T7x}Kp$*0bT(j^VEJlFD !Aw›P?˅D}ȭWp{vx޸flUAZˢSrĸNAŐ1||pS7:0uZ ]'K hޑ$q\2ho8N){Õ]7U[Kiz|)Rc=]a륾 { BXlgMJ YϥU,rx]z =[Nt:~H0f]DRA{wN՛BZbp\M7{Y)uP e0a}.۷ëhoGѾfv)9|Fv~Zd'Oz'}3ENrj kSЁc4H@duX~,lGx (L-㼩=i'ƘxcN3g?KF'@ f+[t{0*3/Wc~ހ5K, B|ˆ.})k^m2ía# X tOkhYP=;2ΚmBkY{s}O#6W'ꄀ* TktCx.K;(O+/Y7-Qtc3=P$br QX+lqzK:X^fw%%$Ҙ0frN'z.\f1b`w\Aix(PrѴ~=mZ[LJH8m9#ϙ:e -B[̎VCu<tOQE0eU1ؖbAͻUta0Kp<ɒc(IvxS:|so_w%g)lR U5npGcVMwJI)2<EB48A/켃MI Tۜم}%9~Rr 5c+ʻ)/(ͭv>+􉟔Xp\~8A$n1RpLc,ш|\3ITś7J|fr÷".'qLE3^: dZ2c~Or{ŷP@P'kX͋0fФƬhE*#j, c-IbT>{UpuadY;Gx+-t!;VQ9+;IM|g@Y !D>tрC]8`V桨6ޣq5mr'=2qL[#+*+U#_95:՗#_ҙ<v{1b !lη+@LKd 9I3?> {WPڻ8E> H-HQJl3GE|(enF.; <yӐ-murI+Mks]bd/˜!v!`e}X g!\aaZ:,_"us6_OFYiuIQ:}hkvwucB=g> qaжbkׇȘHc0*44gox[E#ھlP<ֶNR[pH45e`4eFNR?mdMH4GX22Y$ֶ>TV4q$)MTNZWb=اՙC| <;l*R3!/s 9Hlnh:u%gY?RbK CtrGr&?o/GfIerf_Wܦn(ص%,U_{>eEKһ:8ZUɀlkm] 6$!˃k($H+F/WTp݂;ńtlxt-Wo pϤR/iŜzLe՞EE7ؽ,oF/,&N+Y٥_­UOn̉h3إ![K`vxI' 2BIeR|ᚋ|PDvN}uwa6{^ŁZ;wȮ\! w;qfλ5+(tYt]lEyd\o?)Z&]#w?*cy:.6y&գ,u(L0S/?Ώ>oJATs,- e^Bu݈yZmoJ역C chvZbO~mG]EXLxd=`F5?yS|P^N IhYK=,9aCS9(K!0]o4쮲REʜN+tm)nӰ>V<&-~- GOq/`eK7.&i*)L,Ҏ0˲&0J&\+h]max߯P!ojA ޽slPZGKȀI 2#oʵuLiwηPY;*~2 h3},R2^J4I\*>/*YLb+jzCg]U"G ˨b٢A2ߪ͖sՕ4Ev^v]TR@g2{iB'z#,++Y d,U9vTr67HczsieEJ4 )75%&C{EEBm??1 %k~J AY9N-eFgnRԓ S}5f#)} ?*:17Qeа={oeyPR6zaK,$?F 0qYXeKS{W Eō$>UQxP8Ma#Ofsy;\ITJ^b5٥|k= ФC2\1/ Ad yvXk){#N"HP y%A)t/$9]7c%v\8 d JAզ8>[ 5s`R$_}XH/9cdTI Rʖs1.NN?ڎӅaֱ?С,7Ԭpず96w;kqq38J8 &~݃q19ϥ ܆WO*(=|=нcG|[-QZP/޳>8B A8djC^ E$uH;$g]̊jJQSwVpĞ6DbՂ3_{@. ܬOh6I~BFFAte̞C$|_W2pk(a" j f{_&XKi q9YtU3gۄXwR.fޢ͢kaXi[} ޵,%h9x6@w]8+hObv.3||\T`Z|$<.!;*Zwp4=m 7up/&kZdL+JBpkD=wdv؊1j2K|W#>jHp6]yXvqb3kɄ,KZ>?!Zi"l'#o_Q=/#DZRnE#]ȔIuf6:7짜;aCV[?:9-?vcҡ||hkm7T>m,j;d t#˨{ PФ=5x LTDmV.=iȰWj5TX+)M}Cs%Wf$U_TkImf i m`ygCzp9l^ǞH] ,Q5MH0gv'Qr`h[[2"e"ҝx5 n5֝bE)BdLoz V_=Eb.{+r t-k66he=4$v48T>q0{?}#A- 5>Äӧa]$J, dawJ/lGR& [JkᲴk&vlt+%zf~%]J߰L.ڮ #T,a\H/ƏU6L`1!=jx eOfi"/+FMnm]L~'v.OǑQ<m=ȍX=\͛!s ZiK&>@8*3, iER!˗#CLpZ%)C>B.CI-&IvA}~Gu,s3 a*OBnʄy׮ϟ}Ii2yh2L֪4}_lp]oٕ{@aP4Һ9v^E!*WANHE{lgnܷ_{0n`;rnˮ0³@lGkPiIJWԗ W mgqjqU<mgKI_MuBF>ʴ _ˍ cٹƫ.+ޭX\q4xVHBOU/?ߺC`_3} DR Uj ڞuCV]&)G%^L0WR5eԃ`?djO=XI#HxGo0JIN,`-d򅂺+e2fWU:s𙴤[N43^ٯ ~3hw(10+si=bɪ̣Ez7Y, COj ZN7-I@]+vm(:TÑuK(/)EDoN磐lVQ.x:"Tl(9^ԪH;XYiD8N]PQ91wFO`KjhEqYY1 ~@xx [W yO3ukE 1iexNKsWlʌY?p)?qP!YNaE[JgiVs0zu}sx1ꛊYt9k[x5f5Hm槝WH@@)>B,4UG#$l($36">vD{=&0.lU,cϤzrG֝qmp>BQGaBnmzs|H!'BB3{f.@J;%Ȩf(+@ykkq+.F6DJR(`$̑Ճ#U~*:Df 𖋰pcAK3Uվ} [d?+x7`P5>w;?DLV\R;y>_z[f E|rn! ]8Sɀ`;i؅= (aJۤjQ!>kIQaYE(dLFζG)`X˼&*eE}4uN o{.9ߐPER"Ʒ)E2eLYd!R0ֱH_ !UiгDC>T؞X_0zoGVS!>g]?dy{BP/FICTSuGh bhXI5E]=2(()+>wZM֝9.j@6Zi&s%*0r׌V̮ř! ()AHEGe{99eicfhKDTo̸z xH#kle^^iRI1[6v\J BWj95 Xayl>j̱$z߂‘_R94_F SL"ѷ#? %Ődʣ}hg'_egƑmv6f(?3KL%5F#6M3-њī֎G{{n;ȽhORrT[v=cHjPOfrWOzV%T&{L5>I7(t\e`?NlR"!G_Í=JXu9yH&x,{^4GWvc~df>d&hC |{?ξ Ƿ}VY/Q?̾!35 /7 rU'l[Y]㽄a9jj<kUæ,D&H`6W (3pI^a"Rz j@цcQ ?I;3xWLkO!r ,dP4ww$vL&z#3m\Y{~k4wȵO b&p'{ifco /:zUD : Tc[񟸃Q!Vm+k*MJ 7.#$Dߜfػ;zrmSXĤw:a N*iW)}:?Y(#Q~ca*\/i V {dSD96 GO_RU%~enZ">: JDZ]A{f90 @S Pmpaڏvvo<˜bj5LI#i6&QrTZ}*=yRi` 9O3\. ښm-h zmy{ ޗ@qJ;Hq^cBqy$(cGCY!Y`L Y]#>8&XlZy)TL5\99R!=6B϶TP ċp x.[D 7>Ăza7!S.vvGHVt~ba.$C_I>%^ZJ^sPj1^b O&؍kSec9{tRnBĉ 2n3$^`Kg'!/69C3rlU%ȱ;i[!خ#z`[}hЃ jF2 l6>$8>s)P(.%}ԏ=iLvH;Xp Qy%WT&ţmQ6&ی?L8 ޒqgLş8x`wp_I.!{C_2f['?ϱ[U߃<>_\(X%M"?hJ׏"Ozn**5XM Zm[A?\R RIWwH4Ua[A8 Z;y( g0ވ.12滃6ƈzx`hݢBoݧDMKY#qUJUR7H&=0K̠[8f*< Aͣn0wt *c_61_MI={?Ţ4u9<ʤӷ\bJW"R4seҋCe|Fh+(׵[t-=6#ȡ[k*bJ{zM|$PQFSV `,9m/պ|9aw{"۲@· 0ڍP{?[#;iY ۂTzJB\c5]qz a %qDmjL}Q??l_e#jhІT4Uf _iwg~4Έ$]_ċy: 5F̋ PۏO0O'!|V ey?Dh35 ,ސb.AZqOh̯]>=xARcEӻ绥LW8j|V{NRBR)A^RCqGV+Vp3rs}NUg3jrDk%`;\Y`T"9AOg^up#K%2 #oZgHHDO@ y`2oUlԒ߭ }ؼb'ߌ^M*@M?ξv]} AjCN <#jӠ1ODJ #^6^.l'9@mp޷B[TpNKE??mELM!`lvu+↋#gFUZ?F9 ^BDdEr#t]xki&+ܒT芯v0,ʑM_ZWt DF6J#9ݶ&x*pA1'{u]&eġ#\gVM딶dUn>5?\f8o' f)1?4kg[3y'nx#J#V̉JCr0=6^Zbssd;b>,Gڅ@&htP̠Ş}O瘦dV4C݌.c^=]02k*) (ϒ 9n`GEk #;i' Ph~G(NV'uS2 3br,'}(ā"qO!G@lK +!}J ;Gă_WgdJ 'K|@3vT|faY֋n4m;KgMEreQsk,'>"!n⭱yXz䘑WOuy> rNhx~2eh_xDoҮ0-ߒ `ƛKVWNzMgYEh,Mɦ].{R!8܊tZdWF+Yq"ƫGJROݞm>HQJ7NC.+kۧ\JZHw\>Β~zs:** cGMکcszu21ܜ } /Ӑsƒ#m/`.?VƇ.t_ZGWZ4|$&+ڜ1݀]QSBf|N4Σ]*3dYtJ`OP'B?\aVWv]SrkS.Ub[׭kց$*|O!~QQzTmƷ<6sW¶fwi~] $7E–'!㒭RP9 eRؿ-br'"|pbL9g2f!"Lt{z3 uex1s׽Qx݄b PFi!`0X<٧`)Rs\xD[FriP`Ƭ˾ `Mk4Sy{NkG琜35es1;S< l _)ZܥPD8No+(2)dCc ӭ>Ot]/I1|yĘF :[#X〥Ii3wnJnop̽2T&I5$s(;)3RH2^m^QڶeuVUAp9sw=ZhRj{&Fw v+/Χv5rލ>C1x_lHU|A3ohri4JNH&ë4OLZs1_>pf-qެEZ,|cK48Ȗ0b-$pR]#zr4 (\Vd ۃ7FLq!u)EiK0w'FbuO[\*7LGNkJiUY@)k4J︤:ȴT0wA9ߒ+]3Vٵ]ط#)醽'offYwF ֿ5)ۃ}Q`.%4`ZXz S k߲0M bDM 6{0ךtD).52&F†^H'8Dp7#MQQ:\t*zl8?\%TZm`${*8D>_}-zSDv0r'[!*Y!їzS% ˊ?gk<ϼIٿ8Q7Q]ܝTf]# 9\ a+cʑ^O é Z~K)Iar>WM,q|@(w}skI8[ѽn&;o x܀;İή)*rRF zҚa6XQrx0PH7>GKͣ'P׃ѬC#| J­` ԈCH9 D骸ΝÉ'G!?,ޅ,.;6=#g1)h.t:8N|tKTHbc/c9GFϙd@Tַfbk{GPC'q5{VA'^Cm'Z!-9wg76^Eib$v.9TF}CkĻ̤QSfqETkQM|>9<iX52XK2=<.n2jd%WVĎ l<:B\ LPz5C*|NodNDc-7\!kr"T? ў򒇼d&baZř;ms|H)71cC+0oyҧ@:#b>B{47I5$qQ\>=NhUT>"95 bh{rHP|=*\.Y{mB*44z C_Iwi5f݇4:^;O(q 1 ^A \MwJƣzb0y{y$Ru*%=@$n o9ͪ߮EK.+](֚,}K V՗ kGB>ڥNЬ#H}%O_X߲8^JE*DFsnjsbc_3YȣĥxlK$\?-HB䓢~5wxo se0r(?$(:t>)+d`Rr!>UC%5s|+ਕoȾ2Sv{P54ظps+8ehGHRmM+0{5!d7\'^wrsH^c̽%nhР@秝CWEWx#fg$Dע{0BBhR5fqCOW+f^*R.-/ĦOyERfPgyz_XB4+S)9Vz:p- $-R£-S,ͥkVes1s滛[f|8lR׊ 5{qG¤Fcʥ ݪë}R32ӪM%"u.uq7~a7 Aނ'" 벲ܽVH\ U}`=RIW]zI|y2 5%PIl|}M#!3ݷ§Bb MpW{WIR7l5Y#(r:Cn{S2n:L7H*1ܔR2ƆDPpC/҈{|;OԳoǜ"}(G#v9)Y! B/9a}оu1GoӕW.dd&䨾\q2P\9l<>OfE\C{YI=A0G*UB2.wb\DK{=töׇ.4;?f5ތI9R6/I~&vbjpK-|cZ9adS/]>fLvp9{kߴF {7Q-,K<쳄RW'~^tJ1hP.vU.cQ7?rAmyPwcp;;/j  +pbh|?FbTk,uXsXp5(mD n(u96^"ŝ1?#S+pa&u*!9v8V6 WU]gjöNsy\w K-jT`=p 61$v4Ģ]]UnԽYLyF RJ)dFUs 2= R?JT͡`sgj:F;:1(Ⱥe\>vrv,8)a^M5w|2DcѾc纫֨2WY od_ctpeO\R|)@'N#"hrK~xz"]I$z]lo=\UXU. MLFYʼn=dgJ=7}i'g7d\G)*῜YҾ*mf1gJvl[7wZjE;OjҗuJte+ad5? t+g^d,YB уe:Q/3ws}dKeǔ%aC<]>Q$D $S~bg6ù .Yax? 'Ry3q+]Y"^=#= ]ÐW^2 _ L0/-wVRȺOj)1NX?>ĵh7^ / XPco{/Zs^O$!␘%.~^b}5<鑫cpBLZ,-|$ @fvv:԰yI;yU^;|QWM7(@:r|lL .I!T_"F+0fydRd9ʳ !j>oPRu5eZ؛kRY+ٽ=flsXvY?b [/v *mɎedO&aox<>|O5.otnc܂ =?pY8K};ǯj10yzq:‡%,/hŠ ϒ%_r\ج:mxL$JK ߘ0#l5CG;gJpsGV]_3s5>C|;B%~ ":>prr~`G$\ T$v,Kޚ5{$5PUyA@L};"u>}i;ӎH7^/)R@vz+j3F)҂R0cPb;6F]bی'DL8u<jV\ SzlH@^;l'pz} V[ G>$F|ˉoA~yi4Rz ޚ6c~:LF%,c>0% }]T}| {/|~ m`ʐµI=C+g2`frSѤB#Ć[vOQu|T@uU^_, /~2Vk +N!8\)1N=J^H ~=xC9U i Vg\ uŪ2O%R**p{,#[hV^J=`ZfPM^)#\&o7bw\![>p#cpcDZ_v\mNsP0oAHѝt.RWh$$)'?}MXA9">;^5.|MYHX!<; 4Md]Y~_wTJS`~6S)K_3F]a~`Q;$ ?bd_f5JCՌ=Nlwa-<V/ө8:C6c_#GvSnU+ux6{{K޾Å3ptY1Kylkh VYO A5˹x "GM&rԕ>h1[0sDqVitFpJƕDA~_{@@n ϶=UY,~X|QpO ,KW1'oD'ppVV,8 ]J u:TIaB0?Rר'fo Q3OaF]PDl GO1l?IDEQouC\e (C׵ gK+;"zz&>~ f~_ ;p%?wZ~~,01dx_Sl'2rZrN61bQMә$$øw'`.= ,YoVdG4l[%#WQ!YЌ0$$M6ړJfhE&?B ҶVگy6yYVj%NGZ} kIM[E$ñcx6T-!vge#"RScƁH96ImvpI]ЭkYѭc)}0y2 kV׷y#ջa Ϸ?%"wASޣ Ќ/{@MEg,&K|0ab֟nᭀBy9.Ed6{3fi65C@H%E,r-3Zj͡ZaR2iC#{nb\1ceXvJIH2 Nhː6t g[QvI!)_dF;bYܒpNI%:^Plz~(cGzCΒ.R`.fG$OU,CZ#-,`zZ/(M+7Rᦽ}9XZ|F(QKx3LQSd+Is,W^\ü`9*Nop[Bl[QOgd\>%Ut-G w\R͞Iy {LJ2Y65,rM"?}{6.EnÁKJ%tf>Id)OYQRgbi9&BwNo#c93XU997dWkZnjucؗ2c"~<+3zG )O:$A\#0q`S \NN93#̏EB',tBm@}8/¼؂f:~:e .n6[bLzb&|ҤǶטY3*NRZX( ]#cًi—MLy+ސm쬛f%7CE__UyG-e|? mjrDCgaQZ ˘KۊF?cb(\ۅaEX;Cd1,3вbxjSbѠ|[x!|Z& #ә|" /_")#h7x"A1к W(Rִ+u‚>Yxk+^2;q ϮX'G=WȴJW LLJb`t_lRjUiR!ƓhUO l]sJ90v/H ui+PǍ S psp'[P-BPd>9 9KK7g 8Sd4f%z&Y( FoaxZ{W-`yy\JD>-uДc *{OVf^yMv|CY޽}.s ysg _98LVW)| (\#SxH{MȡJk ~[T*#Q ׄRK^q? k?oVU_s xk}/GI,Ӵ+%&\gfQ~r|V1狚?n8/!}3i0 hwsخKqiI3d3L `;*&otdPZ:իwGe51_uwc!o- gz%:ŬPWIzQ@t11϶>(2,(* &A)|#3HwCٹ㈸xG*Lá̠`⦊c6^~n_60hr27)d()$i8/ "1֩&]>=>,̨#Z ]`99|)#n+z)uj)q zc=a"žPZ`eurwh|#F,HoOv4QQr d ,ZYiNQدO5bXck9Yټ^wܩe䯏Ep<5' 9N [RB.t!`fe$upQbO|hLhEP̗kq2hFLlLp[VpRg~+#nIqY^QMqYee&SY"//P; mHGRҳGN&oZ  i] 7bރ tIu-,x y13]<_UxFVNǪRq4_AW{5>Nt_'{9G8~ņ-U4 ŚF.EWx@3uscJ[zs=v*=c7/+`DP.덊'FU>V+{G]lf1%lᶿ7\3VTDʑ-&neK;@8/TZnQෞ"i0%jC^n0 =/[I0q%2bX$xxv{!J9VlT7,<=!ob]͗GRޫ;}2hz*YjSP+Kaz^G2 _ΣY1uXZX8F,JsqM p)xR /}tbYD2$ ,Z"]}r@w'y FtvXDN3Cĕg,WX+Et h]ߵܭ?J!D@M= o(БF0]ݗ=W'_z50r(Qmˎ~'UEуK=rn49PIbŮ@> biyqZT!RwbtZjZB>2W4w{붧v]/3`@+{ZZ'jQZ1*:_49d=OFa)k|9$2Jc * CT a1彝XΏ ,<^x)}>]6N%L!- 6J99԰(kEV0xC|Z9?g[EL^dV՝B26V󈄝{=&UEQRdJk CP0~Eu3ZY>> 5ZNFef;(H+#xy|0,ܜIMsm{f!ک{$^$tABɈi3n|Ref4ּF`ؘ`Rƌfyn%as{wYZ =QO'1"zdxq5Ok sy^ gwNK N)im+ȢOuiacsë 5 |WjQTt-ef9+vs+fo-R'QK?p9D>왟Y㄃ }n^wQ6-+mh*%1\źGuTtcJI5<_ɟNCB!`1}(&5KWzq'B8 !\Gu'nζץ G.<烵P-|{ WRckxQR]}t vBf'וDA9t@d*mb݋0ط~i]bweSף$ӕD8^ZG(ƵYU/U3'bvT6K#,) HKq9yV]ӄ2FWZJxrGs#w1Iz/QY(AT6CrϜc|•niB'(PQZ\ IuOAQ3IUUn7e&$LMIg[1aPh+foՇQIЛ~1Sj8h;}=n !.˚GӎeIUUpzBo-tPvQ *EDBu`Νh^r;uIMknnq.n]$Rvq\X(Snκ4J 1iȼ }A\ Y#!OF?(s{qtaW7${HVm;fr7I%ҥ\-"cQĨ4} Hq| WF<ʼnށaHA,|觱zhPkKi p ]S{#fNiTy{BB8`hO#H*'287>HPR}7ΤdEoS\IBp@YcGಞ [2оE\~:g BB 2?37cU4ڞb"yۄ ;D!`.*e a) ,?Ɛ2wnvRmո#K\:侕B1 3f?iA3o/}̶*&Kp(Z`+CmO2i~_{>Dq%!vPFR6'uʝ9ؗ.@̕(Y!T@Br m|\>X!J;fk5 1)C! #gxmN>C bpHtL4{:`щrᒈ#E;f_q8rlW zD.mZRCLXnu8]ـY6 Mڇj)7۪ E~")D_F[Iٵ9QT^gZ[b/Wf)pVtkeQ͖p \/ޜcH+}:aݑ:GLjKI ^ܲO,ZG{5PAwm1?3G_co\ʏ<$lSQ޷rϤ=Y\Vx}i:y);:!# OΉ>ʱ<@_Rͅcg7Dj19.#9ZCY"K'm b(tû>sp&CLv{+H$I$E~v$8Ǯl[`)Mg*4'USWoQ7X @)&I1&o ~-oVQWI8`']0c@36ebvV jjFH'SbJ_!9ݚ8|O\V#M {W>]!Ǒ|{ vڍ!liO<>n䏣Z. 6X8>3;ĀRӍyi1,o_jpS<ϸk v-LI1VF2oqf/䃟ƒ QZT}QZ|':8.=JWb_e[<{d2mb okw٧)w趯 nCYS 0Wr/N;18w8dл_3$VLeq"wcq*5Py :rj1XqT,UVO7tlM.x>VƐKi3 cCLXvz\ ~h'9VtntZ8Uv*5$=fGfero;]TÉQWH;&5 b}ilaԡ.43c79c,/r (Ky6m9,LXuH5wY(taD,Cwr@$wfp €W~F=]xSih8@Kqag_\ 8)+˶d%DO4Lc)FTҐp W^R,HvE|/Ti,m/<|Ii G 6p+&;r䶔?BpQ\2E52aJhaZ;ՎZތadsFg#݁+tR6XyՖPƷ:&W%i={hɯHC kl}v\2d)_u]MUU/ V^y8p/e5nԸ?r%)vdžٖk2e]^*ö/1!r8oFYvfٺŧ$(~#X OfN)PP8=k+<|}|_ 1:IVp>x=EuK&I;~.N4+aĽps䟡+4[l7TA:5HQG2O(kKk[{&Os+>CH7b/kFBG!;NlQp",rb{M73E#|+\w31}-W掊 B.e39tH.vg꫇f_#F~Tv|,ۖijH6"\w|r|`¯PsW ,X7b#vVǬ]rW^ *$U%ʜ!WhƧe"zLCֲ̻v)|k8:,h1^]A⻣mSBӜ0lJy¸]>M0k6191 ()HiKJ],xV%CFO%z^QmX1Xcl0?& %RCrגܾWJ, "%Jﮒ}7WdG10[ ѧdN2Y.,?yv;† Oάh[k̾ ! DOLa|h1C#oV7ft䐿>}AKT{) &_*fDnń^G\ nY'+|cr+ #߳k9,9T{sҞyQه úڪWCPL" Y YF-)B0S .\p*Pn¶F 'tN k|Zde-j&˹A?[r7O]]Z6m[O K/Rpj?Z FpNRUe} ޲NBADwQ"d7}\ƫNw!b)/qRWUޞ/ L}?˅Y5c+ Š$c$0@}}޽6I@Hb8;vꌁ%qT7ʵh/hY ^\b>=!S;T|?Bs Swޔxť:z̽l֘,1۷2< C窂 ##+{^:X[*܂U_ ְBSwVvN3aڤ7gcLYC.D]wrx2ecq/.<ogQ걡~f֔ߨpڹ%e CHv75)5'NV* anHŞS zJ;)M` M>N"rL@y}&ň) |_p;h+T{oVEo ;5C;" _ jP^)h @;o7}Py2$*9ؗ@ Kٞ͘1f]Xz"^>N}D"4W;huq8k?sX (g( Szl*o.Ѱa͖|&B3'YjNVʾGu=x+aVX ?MeD%6'Dp1Dm+ڭw@˥z_"Y&rzp"틿2S)gR~ JhF0!eM owKV jxN1;[M\U R?9:Ȅإ Tk Z/'"kֈ}-3m: #62cDy5K9XB1'.*Nq ,^sK,dzpS[VVzww HoGdCwG 7wJ`(o،L-'~Ȟa(lqE 56SΣ։{Uy %O@3Oi&e. hԇPGh,wyWtȡd,D"MAZ'4֝b(X!%)`֢+yxܧOadzkg2B1²΋0Et$O*q^gJYV1RcnFd`Fq m5gu֌)Ier\Q#QF:"cdA`xFN9XgD n OC.O10Fg_$ɓq]٭w]jP )3+XsD$MɭTbAhgz <[*!ß`(iM(wNRvjuf_n[2VH5F" Xĵ# kJל+#_<ޑ$Y-V$B8i']xx^쯫Za;9._Vc(T B;>@ ꁟK AQ1-Zl=tĢP}nX'ԋajctv}U[AR􇼚^PV0YZxqlx_'2uZRoE 4mʼnݙؤO}huT_Av^D snΞ?Rc !W"YO]CF r}mTxj҇Me?C Cօڔd{,h$FV,ƪ$Avse^@b4>cV6?'6жXoRQ|l1!2Y-%7ٚX6)Lg!Ʉ>vhzƖj !oT|)̴X6+c9O!ANf u*vѪٚAKjk%Fg `\: R/ z-$$cj``Xg Mp8χ҆}| GSXSC8vzJ[tiT+\& Պ3jv2([`&T,I;(J.ڱHt:zs/^4ʖW¸pmA▊wϰд÷} V9jv|^w6HjZ6v?,!8WCtF: 6OgF٘ck*ſ0LDO]h?1yC#ӕ04p KKz2f[cwd2QKeHK(!mMh{@LE])X-(%^yCY %GRs@Ah|F7"?,@qV`';jo5sH)թP#k^)t]Oʑݞ KDP9wǕc;{vf*h?:xe7>:,D}Et,L8BZ5Ҭ2vk@X$&Yqxw<}2$S֊a\BZc}'^-.oeq'!2%O% Nf4 bWΛcr|,3Y aLW92Ճ;QiX;9]Rkůd=[: AiksO?;g*t9]]BP k' ôBڲ>rBjQǿUyVq(1&eIQ'z+Ш 6Sx|gb Z1*^jbj[[4~%0WKjUsV7bm09Q &d@Z+kN9mFHӸ*;k׷Qc# Nxp;RRˢHB $cJ/Ȭpbb$p<:58җ 2Åe}_8[Grd5jk%̢0Շx2@CD.3q7O(zaVL锣z⹃3 ?%-X&>H8ZW>#ͮY=B wy{3N][BqiJc=yP8CV(;o, x =`K V-ʡB(պ|[7,^{<XZ _߉@p1HÁy1x0SB>Xzp4!z,M'Ǫr'{ېz2[S7c_%j5QHfGx`a%rU{('4JTt u.TDRwNQڿ\#lˋѷlE-:yڎy%a+cؽ.$ \ }ѓ0Bud p@%4PV59rvs||T^pCt8^ƎWHg{qmD9I1,%|r ;<0U U"Dn&m~ݎ;hӇD~g^bqA<>쟟\zPw%׻ؠƖzڪZX#5j`YÁm0ZP3t0\ZEV. e՛%YWIsRr _g}jl+/K7&m,VF?n:AS%i{q?ޚ#vB!i5* |5`FgQ!=F:?GCzVl/.%pX-Eވ nHkKE7ξA".ΕHqIzQ.g0~ ›5,#ٿ:aSZnU%\Q}kn")!rfe!Ѯ}3jCn7&+q[N,Iֈ~T?gl~)WHH~L^z Z܋>ZAUҙM%ڒWv|HTsSV>KέI_ŵ;؍=oXh]xց-J=`F59}+݉%yY/&)tn Y?4 8f}?o.dSG CmkS|BV0Lm֗T'Gms`V?ps sUЫ.tDžNNܯƞ0ʛDoY#K32 ky }Lj:J<,D2ӓK/5Ȑ=3W ǩ|@+̠eD[)jrqFNy[s}vU2W.?{vYU905U[D])H39[1!vm'4n/ʽ]kuNJPr#~b~V=ػ3qͺV}O^{©Y.!^5m OدÃɚ28EME {X3 je=lFs sIUhK,v[YcW80c,\Rk!8gN .]IN}(#v,`]L!L9^w {z.7%~H>Wz-,>Ɉ}Уit24.$M0U{FC b|\EDL;lWٗR2[{SgvB#,mHGZJ=5 X~%###]=ڎ.^;wbB`1"g3Ϗq7q\UWOKx+ x<"Ժ6kQHGkGCn[*+T?{Q)Y Ro/ӥxgeJ" ^jd&B lyJ*{OPl˹FVÐa6>@ں,9]E6 Ğz4#>s5yZ^| kA̪dW5W&*LZd4?ob]* IFͿ@e}OXHx,_4C>޽S s01GsJRum]Т!]eB3^2g0TTf)>$k}L~/څ_4Ag|4"N{wY.pkl8oׄyfQhȿ`#$#*@5˹`G),bCya?y;yؕ4%Ši6"f\a?w-%2 Yj⣭g]艡s٪R Z0;ٍžI:h '\NEGO' R 泭|Қ^Λ}垅4fmlUEmO lb%ZfUs;^;ը="@zoTA%>9GKdžH:Y;=%KxP.ʂ6zz X)ő1 0cuXRWxu=A֞_ڈ Z\d9Gձ$6i9ثi7dJ[L=4't-F!X\[n.iM05|ulxF=8^)jƤ}3+#sK?e˒z:b̀7dگh,ju0Y@"YV$]F)YtD.!`Q!) _*\V>N9ᬡ8ڌV8!+W4FD(; v!ߢxrZF|D zAWL֍% \$]o-q!3VڷV xZn@ĶCnKt\5`bKA؍zf ݗ6WXwwu TX4AG_ms^orG,!dbH|yLbϡOW˴P=:tjd}T,h `AS?yL.%.?B4#O1/ɹgc`Jc2HU ܈H)E ,,ѻE)oh"~Lg8QӽDK$CJ;fp*IPJ.E8k6n&ؤH.KTt0o3E"!`#1=+tfSCI,a7>O~. LHAܝSf: UTc5hf0jqIAYC p^h͖'FFO`1h > .%iH43H߮y+WOBt=xo.u$X(gT uL\b3fv]~" ጮf9[k9C V1"`SiSAO硓]xCw}2ޟkҀ˔{iVx(+ ~x]A aSxn<63 ^٫(,7Gh )}?Vw~[κ9l-_Mo[!Pb4؜b8#XS2MyL='0#.>\\{ ߚݤsf%,Q;1'KL= "KKێĘǃ}lL]cn}ڨDV«^ymDB97%ȣ!p5);6tJ{UȽq 5͔:ʞYd[ٍ;ۥdlY!W&1&}`> 1>2;R2Ov Mg#z߱-o(nbHx+ybJ|$e'ï,A %ٰ歯Rp)ufNQAAa/,UCؚG[$6wGp=M 8*Yn 2&l"Z>Et>V98q|uk1yg {*awr$A%ˁjf^y冂(+9>yl+V {9]'/@-S?X]02EmxC~3hC.u8L#{dzԸ8/sv>&^8-B'4ҍX*+0+3ble|d{lA Z?Pӓ:#99w=tQPͤ#FRT Owʚ|:?O;!#nwҊI}PDf8HpĭG:!`xZ#'_MB(HS {c3p$؅9ReIE `)fĥ֐F\oބslG)H`zB^mQO9gXT47Ja7ǖhКC׀zE ŭn헋'# U4}i~p 5}̮b0Ǣp9{2f4ztӍ6.4bֵ|PԴ*GTώN% 'yȝ.]V= K $6 }W>!61G/v'),c{W^H9ґߧ!"?zr:-O$&87Uͩ)6s2p&I>p /FN[W[ *;(saUS(׍:QN.v^D}(åULڙַL\g f?Bf6JJȄF +` bka 4ŵjL[H!iR(]w줠9)Hwjr޲,(t!KH)KYGg;he!EvL^+d3l{ʎt%l>R{#6>¹-r AfBUEFOhEDc{+eVo9ߕ/MG<}Vd0& qVeyȘySpEdl͢iM"v׈~$6"N4bgHMyF>N։3mOF18(,fU'}7*fݟWU)y$׿ReQlN6> ]jLۉwaXs[*,{q&(x0gspί5%cn(9jX{FVZ]6瑭wIaT{}Qx6㊨LJu{Ğ*{|捒0jAŶq}\z=Yj*z2?n7|lcl{'b5/r(w8dW(`/$ר![B07,[Z ZiZoGOyM6&{=}s>>cv?֝^ϳ΃3}g|9唣Ɓ=CE5K5:#TPfQ6µgT_ w՗壜_qyB;pZ_[ƦPs_q_oŔ.#|C6JȢX=PdXNe,JT1n!^&j* Fpx7cut h&آuf{HZqe1*\©y뒆C|"V‡iXk2^r ']Ds;)߀-|5{hpt5ƃV{I54ི>q a#/,#;EZ#fp~DƭKX\RvLB7L㟙1m %R쌝= / utWu{%ͭ(/H :+˅<*k|/ę#bE4ݩ=\r΀NԬ `OMP=r/ '#ع9kBx\2YnLIk#%!/fSgK4,~WfEXb}m׭"'3[+w|*M?,``w+k֏>!=@:v4|pЫ 96RdO+of5t七6V >Exy}?8[̒ X/kŦ>P8[7՜*<.pT`ۺui#ceڔ4Ht*Ǵ_}F}PTyp C5?ri6;1Ioz3!1\H>⽧/oigiMկ53 MoḤXZ9d=2 ,~;4h]1ŒyX~=cB\Ftc]ZUME:42z:Ua%~Bz{<;m Rai/7G+|!1ɇd=Vt-l;YRo\xTf `n|~xDaʹ3 #)zsѴQB'Iܜ[(f2)@ 2Z3f3oC,EX-_>F˱BtRJRk6za!`:N2<$KjV%A;ĹIUgܮ]4܊ab%K!P$Yg Kmu++ϲSw~l'5eKL#$f.>,/#ѡ]C]4 #4!źQKfD f;C_w۷`JW<+${"-iˋBqL#`ϋPOXe: =etgڰIm0s2guOʟ ihx|ƮןQ=%„Mus߷EԥGj9?}D#^"J!oDg6g&{ fm `Y!c"w|%a' =B210$6Tt |+ 6Z~:/?m5 }ZoCz;Nj|9ݵ,i]?浏AL]5Bo#UfTgtp}.#2"Csӭ2mغ^os$d/wĻ\|Qn'pD)\Vy(ln"X33: Mo_}X|ImOEh; /.hg=C⠻-+B=uS>%SzxF4Uqe\>?1ֽhKqvn *#FA$9 XnFC~C /g%}fTu3_~>Nvcܾhqذj.V^D;gI5`bMcwQ~tc:y>Ob;cwvёɒˮl~~>D*}TNTE2 {C'N7o;NrWڱzqm-؎"R3 H\p&ODZTZ8i\b .,=# U*c=.lGwԝƴyc/)| WB4v咢сYg R\3 ~Sco]!UL",3]M2#NBȗRr-?xz]H}ؤ5ڇ70z?Cr99^"|hklMf9[{/9ȼ'czPiJHo(ƭx0Ǔhi( d׋p2;|cVHgPʖ ~cˏW5ܬ{J/ uSsm \]ʷSH%_ﰬ tE `50f>lܨDE#6NʫKV1V9󤧔JmJK!fo/{6ZiGߊ}OR9 2>}]rj"72ZֈZ"e.V34['1c[f+^Uw0xŃ]VFAA}Iutcq>_BXΖꎏ%\.sod>H8 vүT+?X/Cc=U&KG+Q缾D+hUXpreH;,vO|M+t=qQ] "ȱP%W4 |Sю ~`U%><ϯ|SVTx}%I@4Ӳ늚:F[0[z$ |߰l`I6-jzID?q|?FI|n$N\݂>H`0D>4'u;<=8vĐ9tn\ؓ*FɰS.c?~f2]sW7: {:Lf(7OA3f@*eRs ^qAN+|e2g> 1f,UΡ>f fĜ^& UU.AR`NSKg(G[몾y]-5gT\܉]f 9Lh7ʨ/q+9)mc0/bs_gV{ z xPX)1RzʳU]ʁ4^k9C$ *Sf fiC%2u62.WH ;gswn3xq"̪G]GƐw_62 v:cʘAp]IDsF(x9 Qf8$Jf~9ςnބEs{ vXe)1fO,פK:z((b<>WWQ5dgۡpWjnW ;;ɈDt#+Bv3ᤘjI@ED(Y;(zE&c s1ml'v} |!F*ڼ&%0ھ#CN#Q/޺gA ?V{qVP&[O]5Hy01 GzjE1SŁ.b4\G+7O^;iLk/"rO{~&jXCocFz r\1 +] P$wO0&FBQw9D))sIΩ&L3^=U|7Bo3[ϺOE=3r k,,J^= CpIhS`eU_ lP1Dc42kc1IfBђԾ3 XDn39-uNIm.U]_$gv̻H›_V:^?L*1O($=+T oZО)[HPDNȿ} 5_9L]@j Kz4w1_O!lǜJW{lLn Q(=5Zm扠r.|IZpNhV+?W>kF9 l*N%EB:(A9Sy9󔪘uniI9怛Ken3ڻ?쨆)׭Q=R7@_XFi㪺SXczWƳݕm0H/9"aH`z"µ 3"=3M ":7.5D/O`/~YIqIFyHtk*j<4ӲxdZLy2{0-'By wטoWrj)6L(3,g{+>X$U7 yͥ0R7p.mkvѼm_lP {&>L&& õ{ !9?qskѐ۹=m=&ҖބEBSGwn\Y( c#EF2^\bFسU4>h]przYg: oa\ᣑuA>bJOy|]L6[bR%4}f1x†I-NatVf% fN⍙AvNRbO܂PFgZwɤ rħK|lBU{8IS5K@&D3%8刑'U, x4.6b|ih=&Fha/AhdW턾v0Xp;AU[mAӘq}JsھnM?(ffꬪ; a6?V\D٭F~1|AVJ,b\QKTs%u]Hg{هbw<]_uu·j'BAϲ/$4B-v[! }(ƺIȗο mlo/\b>«Gng,A7=E}!{\RtɾuN~GwSU L:H&z8mGOr7H)[Uk32 )c))9ɼ:ww$n;wIQJ<Ԑ:ilqr|__Jcvӳ*k,񖼃cN[sGOrbG:>ɭV1/끯5G?Lz圇Bڔ1<+C^5+뤘h*-qT\W4Xt bhab ;Jqq!x׈^^5c{9Yøa Yc`Mfxuq|o΃%KhzXT,o t֒h&Iuq)o[=*YBW). kOZ"zd9A׹j&7,? };V*޹C.LW78[WOqZRXYFfM?}3-dK/ 6Kޕ}F]뎻 agVFkEQj{avu}lgy0ރP%x &F|מJbwH&u+P!$EtXhp9s%tLQ /03QYe1%|<ߵ/pह~\3þnda*Nq'Uvx;RmIU{ְU *^ƅ6YhG)5+ݓxrqk'*Ƽws!hz~c!^mӵ/R+W"C0*UĤl~84K[(tfW!о|l90 KKƁ֨3(u ר`0D;)s:S&S@-"8@ح# p̿^2Cb-0.#I6&]!P9+Ƣ5$s2"%Zs~ǘjjf0"械99cJ#>s }h +riB퓊}(?RzwȬ5A՟`d>zC]=l;OŽm?oRQ0q:,eu๪Y[r5#"YMiOR-#fWPɓiGqw*Cܺ!0}gȫi{nS٥%Xel],:6y!t^ܼ* Ǭ1aJ2ˎ7Q!2Ha]z2$F8ea,%k0Oc2x]_خ4C]&vY1͟UgI0dbML6zAuf`l]7_G^ScOK"v g}h҉=3λkm}Eoؑߴ# {o$)2:v^O%E7l+pKqVkML.EzJ* -_5JQ[Cb&I&uȡץƇi m5G<<#҃e)z\pځԅ޷H2ӥ5BR%Y)O B .x5b/@o?]؎q\_Y *oL=OFv;Dhb̌%?-̲Q"POeKA㣦 ݝ Bo_q2-\AG+ؐX+Y-E)'D>bۋ LQtB=;o-MM⒴wczgZ8cQa)B9K0ۘƹD^5ًr=y}ĉ s}WefDn?@6}:1]?r$NwҚDGYHd=M)x_tY'ww־MI(d>ɚM 7id˹:>дSFskFdV2!apn `NN\JAq~&R򨤬pb{ee,l(-5Qkh4a2ub4WQ2b -1d[1-=^,^,A=tW΁g>]:-B ۑNRfwWqҮ>DN؅?l&CuٴR<|}J線\HcH +/j5AGU a` &7+# 8yxb ᎅ ve)u_o1aqZH+5l}a F*<~5R/kT Q|i^V\5  Y,ڵSq/;YFY>)ۛFr29|"ӚfV&!mawk BVy]ZEA9]!Ѡg$6%`NLfƦSAu^>yX\ 'xOJ .qw{̐GƻE uܯfC2.bo,q''4;&5n/x=B1OEB2ԐķsH) .3RB4#Ƕ?qAYERBr{6<8$ǂ5(s8JC\Z?W)K;pO^X%}Yp4 v"J\Ow+q,A ]KNtַCeHx”D5Y `=< b}ֻarzhӜH=i[<3ط+볠 =:g8KCcY*PhLq?fGT,dz{;o7?C|~-lc}ͣj %vS+FM/YJl`)x *"طZ7ƊwvX@PLϯwYy(_Tlp^bJ5 լ5Yqi{((h?}RÓуyNln^c1 `1m9Z1;zAAwKR~x"9f ӧtB#)Z s|Ddz\HZ[aݣHU%3&4yӾ-pn4{`px /֥eߎRzyg肨a'˃İ)vܒ6Bo ˚cpGۺ %\\Ю dcAZiZr b p%6; HE] >p$6Tro?q(c<_B+DNT {p`Xa{4H$4)I7c,eT׋Mjن@-J *#)qXigBw Ʊ<8ꃕwaޅ8ﳉ${ÿV0#S#ȶG2XQ5E5kS Qsg \|FOaw@%̵:afr`Fo2K@ϒԘISQ@kR KcD>7*G_0 #7z'/En]WD V_E`NĵkWzz>`8HPԓOm CRz5=PƛW=B]1LD0/ybȎ]ބ^7JiTaR,yV,ޫ ym#Od<^) E C74uCG8Y>$(f/sJF `·I`f8Q\;`)Ӻ}y&! [Y v- @㺪l(5&?Kb<4m& @4%jl9Û}ӼE*)JĐ?ɓm]|y.,"XUcb9w=kWnkMs#xjE5V}!r\3wQu]u b]Y ڮ 퐊@D7Ř)0#1 LϟIoF!w̾5Kuȯ{9ipJk\'K|i172?jLGS%'>N߹@0lY26E %wem[upy+R9HNs3#eukKAk[ N{ͭq&,a)nj-%jғԒV8R]Ae1zf LpT3N?x\݊ b /ƚkhY>~g9|呒Tt$]T80hhl=ܗBmYC(fGZ*;#(.>XVǷqMFq&(6NkLx#RZoEbH8D0nG!9Se_>tjƌr00G%ezc}k||0ruepe]k{2L|)I>^e(N?B؜pg#2i?w<#{)3lu"_׹#[`Iz݌YP'^sE>qri1LcǨR tXw2D{S,OΣGpDN9MhKZ2WED;.O~K Ba1?kK8u66H Nܸ}& YpL=f(8YnzH~4 aߏt)$K)9#f= k؆dIJ'a1\3.zOb'_'^!(%fSK딃&so 0=f x/]?T1bCMgsh NeAg:D8iʩx_7y̜Z+,zf=,~brl]!Hy|)RzIm8n0;)B[Td[,?_tAD[C)L^:rrY7:Z 7㴏̿$ /|#wRɐvV`1 IOP Oh5zB4ZGiF&Tk8 z'兰 q{z xj a%""H {7Qb'oޢq_E$>siɟ?ɥW_1HS;doZL-d`ZNYDpm\9۷j?H0t=f*=6.?>` h|Ӄ>kWsH@Ђ0/Z{<-گKA?4pЛ(gM܉ǸNՃU;KPk1NuxRǚ(\H+ rAeFeunE Z8\'с~&X$rCzhB#[ԃ- u/똩&E(Թc;N%9mP> LxS w n;]ˮqW^("ߏW ȀdXJHgcezȌ!Âz-Uljs}FP 3aC8gB>|m&E%'4xKew];qV96uAS-{cTS@ sC-~>ގNvɛsHW IUSQ*5\RDr*@º+Jh*,"F[Y*2ybP@7[y'2gƇJB^pv|u N77(aAI/o&nBP}xBQT UCFJS]=D-`WҤO\1^?Dbtib)dWSWL =@'`ZWrd&@XTB$x%u Ap[;s zB[!HOF!({a6PR,KQW@wqB*JtK5S~տi, ]TZW_ux)%~ PQީoq~h[1C8NR@`dxhgۉ΂dTz!Sٮb;C#ʑ$\`1fu k * ZS4YhUњU!n#0@zJEQV͸L>,n񐌖Dzeeb!J|Iڅb01'*"81*9K9n͸)MQɣ=jEojje*p 5nzrdP{iA).@IY`) VOrD|n` .;L*YARUAF YWQ% !wIJ :S։T+Tr^e+4JKH.(z;ޝ-#WI7E,F^6lY:)Cl0 UwˣȀ%{VpxBrNhhAC(-\gAg!k=2 @ ") zr% 8@3*Z頝"1J,qXԃjG8QREQGڙajmUGbY&Xu~A1X4Nm,P:x_U>Xl+o ֝b^pyZNί'EǠώ栘&؋o-نQ A.)G*EqtT:@L"yN=gFn֪*ޝGxOj#P_DM*^4(:˨q1WԯQQ1 PR/ӛ2`mi:;cZS [9u%uA\P%a3Ѡ 9xB Ui рe}{#$w@}}XI;4|Z ĕ6PY9ś Ӡ hѲ`B\ *I2]ċ 赘 0E1<3a@CQjedBȨK֏NW 4b`ZQN.q]5=#I` pjp\ ňF, J!aC"c*YJkT@ Acf(8x#mR9td.M2ȧPF0 **yYx $Yr;} (Mb/*c2p !Q;;+GxW}nbN=qwkd=[c"YcAgk5,(9{ױ1%]H4Jfv+T|ͺUajz\K1TW{Oqr }m)yF^%]CB*j10Jv[`EȻsހ񢔪A\T򲇋, ɹT"sΠΦ(+GSUn oIQF2~]2dLl \<|P3ȻI2#S)˸4RUY6>&jf#)ġaziϿ@&GDȨa5;EVhBp+v9(6a`a <5ABh}"G5HSmlGYwRKZL}2zY8u r23ʴR2 $-c K(U#~EMaX6#EԎ'dcĶ@9-vp&M\ln;% 45F`dh)ɛ롳 u`ScJfuؐ RBm$ |uz"uE pkeJRvrrK tmt/nU2mlWPRѶp8mkǺk=H@@ x@ Pr\!\JYfEDt85VUo@ ”0MCNP -*`!6Z"K&{q;!anC.NӐ?&Ga X"-sS2$%JǸ' -$?"vyʢ;5xH=&|Hj}"@ܴ96cBDQ)pe_%_B$2*X 9=UI`QI7y\Y]/4Ի$u1(Y*,lQ{TheI%՘,w'!)t0:יl?Wr4 ; _eT`>lcga˳P-nOt쏌gaT&1N8&;1֢(?6}RG[xX,xe|CC #dbV輫@V%)@볌:$@xjedOHZ61AM-4G8.IX 2'Cp c.!V"٬ *O1f(Nf@2 H X[gEEZ:j6G:H:EE܂A\ `^BȅT#hhɆP>(kuYKrl&vM<2_K5+8Bw \Hs*ol8XI)Q!4ji7}*c!`Gj+29@=Fu*6!$YRTbU !elQiUZL( jDh(-$ľ"ąQ5tYMmZ~2='6IzX.3AD}eAPS$Yd$&3Ȣی=`$)`Wq'"0t \5pZv)!zv$eOpx^/8N$#܎r$TCQA$ .䤆 AZ `&p+WxJNldEݽ-I@iP&e{?)4@%6KF ~!Bo2AgB*}(8q\2Qyv!i9Ӫg K#rVaמ7,GE]WpLPJG-"=/583Ї9JX*(Jed,&Kc^up͈Vu+pWkbR 丼c+bv6@XѶ c']v\ER"|^`EЂ;IRj.킩^"V[UvAUO@9%dⷛ4ѓcV$^m١@`ΞeQPZpEۃڻrkGf&ّove$[ Lбrk0 )BgG(Cfb(E3jEdJ֌eA*SKi;`v;֪!T1j?~ Jl)x%>X*A\o4pʳ?֠DIQ$ (#y9s2O0#EvCQ7>k$ؗ(+^B~ǛҢhWbr\ޚӰS4 *d, ,rY&~i]Ii~2;,.v9]|8!I9֙wQD|9~Ϲ4Q`h7TjޚV5s9@Rd" EVh<a&@1D6v"ŜXZR˭fSwǗTidm9$L; 2iUiYp2r` f?Ѱ8jy(_X\eR,IP 6uLZ$ i,=t9Q%7E^'Jz>ऩ(Te~e51cUL#dsώq9cllw8ѣ!b D.`8v(ٍX#Yp9BR1s?dzhVoVwꣀ'mra9.0N~ G#)q|ͱޭŮ6Rr&Y՞? 2(+c>Jc/ Jw q(0 e(Ӷ--d]\Scv_FZf Z%Cd' a 1:ctme|!ֽ1:chN :8H%pD&u(7rI{TWptINz iTQJ4u)Ў`]Jю=0L _mBHy!E1z4DY,^~\o[ܾ\o[]뭹]XNQZ,55G :F ATQSD.Da.=8Q݅kV7<e&:\ott֍}9_sGCb5o6/<೾_~SxR؞)< )lܵh#K9S5r8*d+"Enľ?dz{<#7Y/a{&<%_MT n]WC"'ľ.]Ƌ[oo?_?};#J/}qiV&Po E($FQ{z{/LĜ&/h7gw1#6qrL}e.K ͤ`;_z"μ Up)M-6Ci SBѲAyeyS`Ro5s˵RioapC-ߎ1wQ _1˨{d&]Bձ&X&Q2[dD沼Xv!\8J {/Āgc:!]FErB=[ʹL,Oy'cj@Vu=jؒ.`m{*61YXV\F^>gr҅l 2Ixl]5+>/?뗟: ~s×xzߗ~_~yӇO?|x]'kӀ>}?ݧ3V֚_sN7_trZ/k7=녯^z녯^z녯ݿgޗ%'C/b|A30(tR%B3R oߢ}q 3 "; ߉P<D` QR yE`cVkr(JS\]En"8p$C`.v:'W?@שEkK'|t[s]V*_"@2e{"._cP2X Lda~B>soI \ .IX?2iB.{9 -=pEkV{n-hu-{}E[9fNڢekni_ؠ&B*f@Pƕ@­tևEkK'|t[s]` hQ4t$soIh{|jk:˔;u/# cn^~ ڮ[Ac][IY~,q˗?o8Gky\y=c=y,[X'I&Fv\j ViPj5 S6l>榱Ψf"dkk6&n}|-Z]Zt<<:fҶ'%6b|YFZ5,C?4 QhC`4ZT3[Ɲ߳q}ԢCZn~5 $flPuUƲYн,z "8){ ~Ek[[n74 KiuIYޗh_fa7t5tclw3{y,[q|E.cӗw_jPhOkKwr=L,O.ceoxt˝skO_nˤ-q6 :`wm|)/ȱ"z@[]Ճ7)pWn9Ǘ<[j}A/ViL/\͵,I#^R/K%7/'%z&jKoN!CaelÇoˉ7+ p̓=Y}.avogadro-1.1.1/testfiles/methanol.jdx0000644000175000001440000010310612250371054017045 0ustar marcususers##TITLE=METHANOL ##JCAMP-DX=4.24 ##DATA TYPE=INFRARED SPECTRUM ##CLASS=COBLENTZ ##ORIGIN=DOW CHEMICAL COMPANY ##OWNER=COBLENTZ SOCIETY Collection (C) 2007 copyright by the U.S. Secretary of Commerce on behalf of the United States of America. All rights reserved. ##DATE=1964 ##CAS REGISTRY NO=67-56-1 ##MOLFORM=CH4O ##SOURCE REFERENCE=COBLENTZ NO. 8791 ##$NIST SOURCE=COBLENTZ ##$NIST IMAGE=cob-r8791 ##SPECTROMETER/DATA SYSTEM=DOW KBr FOREPRISM-GRATING ##INSTRUMENT PARAMETERS=GRATING CHANGED AT 5.0, 7.5, 15.0 MICRON ##STATE=GAS (70 mmHg, N2 ADDED, TOTAL PRESSURE 600 mmHg) ##PATH LENGTH=5 CM ##SAMPLING PROCEDURE=TRANSMISSION ##RESOLUTION=2 ##DATA PROCESSING=DIGITIZED BY NIST FROM HARD COPY (FROM TWO SEGMENTS) ##XUNITS=1/CM ##YUNITS=TRANSMITTANCE ##XFACTOR=1.000000 ##YFACTOR=1 ##DELTAX=0.937503 ##FIRSTX=463.438 ##LASTX=3806.57 ##FIRSTY=0.939 ##MAXX=3806.57 ##MINX=463.438 ##MAXY=0.998 ##MINY=0.0171553 ##NPOINTS=3567 ##XYDATA=(X++(Y..Y)) 463.438000 0.9390 0.9400 0.9400 0.9400 0.9400 468.125516 0.9400 0.9400 0.9390 0.9390 0.9390 472.813031 0.9370 0.9360 0.9340 0.9330 0.9270 477.500547 0.9260 0.9240 0.9240 0.9270 0.9300 482.188063 0.9330 0.9330 0.9420 0.9420 0.9400 486.875579 0.9400 0.9390 0.9390 0.9390 0.9390 491.563094 0.9370 0.9370 0.9430 0.9450 0.9450 496.250610 0.9430 0.9420 0.9390 0.9370 0.9370 500.938126 0.9370 0.9360 0.9370 0.9370 0.9370 505.625641 0.9360 0.9360 0.9340 0.9340 0.9340 510.313157 0.9300 0.9260 0.9240 0.9290 0.9400 515.000673 0.9450 0.9460 0.9450 0.9420 0.9400 519.688189 0.9370 0.9370 0.9360 0.9360 0.9430 524.375704 0.9470 0.9470 0.9490 0.9490 0.9500 529.063220 0.9520 0.9500 0.9500 0.9460 0.9450 533.750736 0.9450 0.9460 0.9470 0.9490 0.9500 538.438251 0.9520 0.9520 0.9530 0.9520 0.9470 543.125767 0.9290 0.9260 0.9270 0.9360 0.9430 547.813283 0.9490 0.9520 0.9550 0.9520 0.9470 552.500799 0.9141 0.9110 0.9140 0.9339 0.9499 557.188314 0.9550 0.9580 0.9580 0.9580 0.9550 561.875830 0.9550 0.9560 0.9560 0.9580 0.9580 566.563346 0.9590 0.9590 0.9590 0.9590 0.9580 571.250861 0.9580 0.9580 0.9600 0.9600 0.9590 575.938377 0.9560 0.9490 0.9430 0.9420 0.9430 580.625893 0.9520 0.9550 0.9620 0.9680 0.9690 585.313409 0.9660 0.9580 0.9560 0.9580 0.9660 590.000924 0.9690 0.9720 0.9730 0.9760 0.9760 594.688440 0.9710 0.9710 0.9710 0.9710 0.9720 599.375956 0.9730 0.9730 0.9730 0.9710 0.9660 604.063471 0.9630 0.9660 0.9710 0.9780 0.9780 608.750987 0.9790 0.9790 0.9790 0.9810 0.9810 613.438503 0.9760 0.9730 0.9710 0.9730 0.9790 618.126019 0.9810 0.9810 0.9750 0.9730 0.9730 622.813534 0.9790 0.9820 0.9820 0.9810 0.9790 627.501050 0.9790 0.9780 0.9810 0.9820 0.9850 632.188566 0.9880 0.9890 0.9890 0.9860 0.9860 636.876081 0.9860 0.9860 0.9860 0.9860 0.9880 641.563597 0.9880 0.9890 0.9890 0.9880 0.9850 646.251113 0.9850 0.9840 0.9840 0.9820 0.9810 650.938629 0.9810 0.9790 0.9790 0.9810 0.9820 655.626144 0.9790 0.9760 0.9760 0.9780 0.9810 660.313660 0.9810 0.9820 0.9840 0.9840 0.9860 665.001176 0.9880 0.9890 0.9890 0.9890 0.9910 669.688691 0.9910 0.9910 0.9910 0.9910 0.9910 674.376207 0.9920 0.9940 0.9940 0.9940 0.9940 679.063723 0.9940 0.9920 0.9920 0.9910 0.9910 683.751239 0.9910 0.9910 0.9910 0.9910 0.9890 688.438754 0.9890 0.9890 0.9890 0.9910 0.9910 693.126270 0.9910 0.9880 0.9840 0.9810 0.9790 697.813786 0.9780 0.9780 0.9810 0.9810 0.9820 702.501301 0.9840 0.9880 0.9910 0.9920 0.9920 707.188817 0.9920 0.9920 0.9920 0.9920 0.9920 711.876333 0.9950 0.9950 0.9950 0.9950 0.9950 716.563849 0.9940 0.9940 0.9940 0.9940 0.9940 721.251364 0.9940 0.9940 0.9950 0.9970 0.9980 725.938880 0.9980 0.9980 0.9980 0.9980 0.9970 730.626396 0.9940 0.9920 0.9920 0.9950 0.9950 735.313911 0.9950 0.9940 0.9920 0.9890 0.9820 740.001427 0.9790 0.9730 0.9730 0.9760 0.9850 744.688943 0.9890 0.9910 0.9910 0.9920 0.9920 749.376459 0.9920 0.9920 0.9920 0.9920 0.9920 754.063974 0.9920 0.9910 0.9910 0.9910 0.9910 758.751490 0.9910 0.9890 0.9910 0.9910 0.9920 763.439006 0.9910 0.9920 0.9920 0.9920 0.9920 768.126521 0.9920 0.9920 0.9920 0.9920 0.9940 772.814037 0.9940 0.9950 0.9940 0.9940 0.9940 777.501553 0.9920 0.9920 0.9910 0.9890 0.9890 782.189069 0.9860 0.9860 0.9850 0.9880 0.9890 786.876584 0.9910 0.9920 0.9920 0.9940 0.9950 791.564100 0.9950 0.9970 0.9950 0.9950 0.9950 796.251616 0.9940 0.9940 0.9940 0.9920 0.9920 800.939131 0.9920 0.9910 0.9910 0.9910 0.9910 805.626647 0.9910 0.9920 0.9920 0.9940 0.9920 810.314163 0.9920 0.9920 0.9920 0.9920 0.9920 815.001679 0.9920 0.9920 0.9920 0.9920 0.9920 819.689194 0.9920 0.9920 0.9920 0.9910 0.9890 824.376710 0.9880 0.9860 0.9880 0.9890 0.9910 829.064226 0.9910 0.9920 0.9940 0.9940 0.9920 833.751741 0.9910 0.9890 0.9880 0.9860 0.9860 838.439257 0.9850 0.9860 0.9860 0.9860 0.9880 843.126773 0.9910 0.9920 0.9940 0.9940 0.9940 847.814289 0.9920 0.9920 0.9920 0.9920 0.9920 852.501804 0.9940 0.9940 0.9950 0.9950 0.9950 857.189320 0.9950 0.9940 0.9940 0.9920 0.9920 861.876836 0.9920 0.9920 0.9920 0.9920 0.9940 866.564351 0.9940 0.9940 0.9940 0.9940 0.9920 871.251867 0.9910 0.9910 0.9890 0.9890 0.9890 875.939383 0.9890 0.9890 0.9920 0.9920 0.9920 880.626899 0.9940 0.9940 0.9940 0.9950 0.9940 885.314414 0.9940 0.9940 0.9940 0.9920 0.9920 890.001930 0.9910 0.9910 0.9910 0.9910 0.9910 894.689446 0.9910 0.9910 0.9890 0.9890 0.9880 899.376961 0.9880 0.9880 0.9890 0.9880 0.9880 904.064477 0.9880 0.9880 0.9880 0.9880 0.9880 908.751993 0.9880 0.9880 0.9860 0.9860 0.9850 913.439509 0.9840 0.9840 0.9840 0.9840 0.9840 918.127024 0.9840 0.9840 0.9840 0.9820 0.9820 922.814540 0.9810 0.9790 0.9790 0.9790 0.9780 927.502056 0.9780 0.9760 0.9750 0.9730 0.9730 932.189571 0.9720 0.9710 0.9710 0.9710 0.9720 936.877087 0.9720 0.9720 0.9720 0.9720 0.9710 941.564603 0.9690 0.9680 0.9660 0.9650 0.9650 946.252119 0.9630 0.9630 0.9630 0.9630 0.9620 950.939634 0.9600 0.9600 0.9560 0.9500 0.9430 955.627150 0.9370 0.9340 0.9340 0.9340 0.9300 960.314666 0.9240 0.9170 0.9100 0.9030 0.8980 965.002181 0.8940 0.8910 0.8850 0.8760 0.8720 969.689697 0.8680 0.8620 0.8460 0.8290 0.8110 974.377213 0.7970 0.7850 0.7710 0.7531 0.7430 979.064729 0.7330 0.7120 0.6870 0.6590 0.6320 983.752244 0.6170 0.6020 0.5711 0.5411 0.5091 988.439760 0.4930 0.4760 0.4440 0.4120 0.3820 993.127276 0.3660 0.3500 0.3211 0.2931 0.2671 997.814791 0.2430 0.2320 0.2210 0.2010 0.1830 1002.502307 0.1690 0.1600 0.1460 0.1370 0.1360 1007.189823 0.1310 0.1270 0.1240 0.1170 0.1140 1011.877339 0.1140 0.1120 0.1120 0.1120 0.1150 1016.564854 0.1150 0.1200 0.1200 0.1250 0.1310 1021.252370 0.1560 0.1570 0.1750 0.1910 0.2059 1025.939886 0.2380 0.2530 0.2670 0.2820 0.2930 1030.627401 0.3030 0.2241 0.1432 0.0622 0.0172 1035.314917 0.1051 0.1501 0.2380 0.2830 0.4129 1040.002433 0.4090 0.3481 0.2871 0.2541 0.2211 1044.689949 0.1540 0.1380 0.1230 0.1070 0.0990 1049.377464 0.0920 0.0760 0.0600 0.0570 0.0530 1054.064980 0.0500 0.0500 0.0470 0.0470 0.0490 1058.752496 0.0500 0.0500 0.0540 0.0590 0.0620 1063.440011 0.0680 0.0810 0.0850 0.1080 0.1200 1068.127527 0.1460 0.1590 0.1730 0.1959 0.2558 1072.815043 0.2831 0.3060 0.3310 0.3800 0.4100 1077.502559 0.4899 0.5200 0.5390 0.5649 0.6427 1082.190074 0.6781 0.7121 0.7690 0.7970 0.8210 1086.877590 0.8430 0.8720 0.8880 0.8920 0.9000 1091.565106 0.9030 0.9040 0.9040 0.9040 0.9010 1096.252621 0.9030 0.9070 0.9110 0.9140 0.9160 1100.940137 0.9170 0.9200 0.9210 0.9240 0.9240 1105.627653 0.9180 0.9180 0.9200 0.9200 0.9210 1110.315169 0.9230 0.9240 0.9260 0.9260 0.9210 1115.002684 0.9210 0.9230 0.9240 0.9290 0.9330 1119.690200 0.9340 0.9370 0.9370 0.9400 0.9420 1124.377716 0.9430 0.9450 0.9450 0.9460 0.9470 1129.065231 0.9490 0.9500 0.9520 0.9530 0.9550 1133.752747 0.9550 0.9530 0.9500 0.9470 0.9460 1138.440263 0.9460 0.9460 0.9470 0.9490 0.9520 1143.127779 0.9520 0.9490 0.9470 0.9490 0.9500 1147.815294 0.9550 0.9560 0.9560 0.9560 0.9580 1152.502810 0.9580 0.9590 0.9590 0.9590 0.9590 1157.190326 0.9600 0.9600 0.9600 0.9600 0.9600 1161.877841 0.9600 0.9590 0.9590 0.9580 0.9580 1166.565357 0.9580 0.9590 0.9590 0.9600 0.9600 1171.252873 0.9630 0.9630 0.9630 0.9620 0.9620 1175.940389 0.9590 0.9580 0.9560 0.9550 0.9520 1180.627904 0.9490 0.9470 0.9430 0.9400 0.9400 1185.315420 0.9420 0.9420 0.9420 0.9430 0.9420 1190.002936 0.9400 0.9400 0.9400 0.9400 0.9390 1194.690451 0.9370 0.9370 0.9340 0.9330 0.9300 1199.377967 0.9240 0.9230 0.9210 0.9200 0.9180 1204.065483 0.9110 0.9080 0.9080 0.9080 0.9100 1208.752999 0.9080 0.9080 0.9080 0.9080 0.9030 1213.440514 0.9010 0.9000 0.8970 0.8910 0.8910 1218.128030 0.9000 0.9040 0.9110 0.9110 0.9080 1222.815546 0.9040 0.9030 0.9010 0.8980 0.8920 1227.503061 0.8910 0.8940 0.8950 0.8970 0.8980 1232.190577 0.9070 0.9140 0.9040 0.9000 0.8940 1236.878093 0.9000 0.9030 0.8980 0.8940 0.8880 1241.565609 0.8840 0.8740 0.8720 0.8710 0.8790 1246.253124 0.8810 0.8840 0.8850 0.8840 0.8750 1250.940640 0.8740 0.8710 0.8650 0.8620 0.8610 1255.628156 0.8610 0.8590 0.8590 0.8580 0.8560 1260.315671 0.8560 0.8530 0.8530 0.8530 0.8530 1265.003187 0.8520 0.8500 0.8500 0.8500 0.8500 1269.690703 0.8500 0.8500 0.8500 0.8500 0.8500 1274.378219 0.8500 0.8500 0.8500 0.8500 0.8500 1279.065734 0.8520 0.8500 0.8490 0.8490 0.8490 1283.753250 0.8460 0.8420 0.8400 0.8390 0.8370 1288.440766 0.8370 0.8370 0.8360 0.8350 0.8330 1293.128281 0.8290 0.8190 0.8070 0.7980 0.7950 1297.815797 0.7950 0.7950 0.7950 0.7950 0.7910 1302.503313 0.7870 0.7820 0.7770 0.7740 0.7680 1307.190829 0.7650 0.7610 0.7560 0.7520 0.7460 1311.878344 0.7460 0.7520 0.7560 0.7560 0.7560 1316.565860 0.7510 0.7490 0.7430 0.7350 0.7260 1321.253376 0.7170 0.7120 0.7000 0.6940 0.6930 1325.940891 0.6960 0.6970 0.7010 0.7070 0.7120 1330.628407 0.7170 0.7250 0.7190 0.7160 0.7160 1335.315923 0.7138 0.6569 0.6320 0.6571 0.7380 1340.003439 0.7450 0.7430 0.7400 0.7200 0.6971 1344.690954 0.6740 0.6741 0.6940 0.7010 0.7060 1349.378470 0.6580 0.6090 0.6000 0.6429 0.6570 1354.065986 0.6700 0.6810 0.6780 0.6640 0.6520 1358.753501 0.6430 0.6410 0.6290 0.6150 0.6150 1363.441017 0.6130 0.6150 0.6150 0.6150 0.6160 1368.128533 0.6160 0.6170 0.6170 0.6170 0.6190 1372.816049 0.6190 0.6100 0.6020 0.5900 0.6030 1377.503564 0.6160 0.6190 0.6220 0.6250 0.6280 1382.191080 0.6280 0.6290 0.6300 0.6380 0.6430 1386.878596 0.6450 0.6480 0.6490 0.6570 0.6580 1391.566111 0.6650 0.6740 0.6840 0.6930 0.6970 1396.253627 0.7040 0.7070 0.7100 0.7160 0.7200 1400.941143 0.7230 0.7270 0.7360 0.7460 0.7560 1405.628659 0.7590 0.7640 0.7680 0.7740 0.7770 1410.316174 0.7800 0.7820 0.7810 0.7800 0.7750 1415.003690 0.7720 0.7680 0.7680 0.7740 0.7910 1419.691206 0.7940 0.7940 0.7970 0.7980 0.8060 1424.378721 0.8070 0.8080 0.8100 0.8080 0.8060 1429.066237 0.8100 0.8110 0.8140 0.8110 0.8110 1433.753753 0.8100 0.8110 0.8130 0.8140 0.8160 1438.441269 0.8200 0.8210 0.8260 0.8300 0.8360 1443.128784 0.8430 0.8480 0.8490 0.8520 0.8590 1447.816300 0.8620 0.8650 0.8750 0.8880 0.8910 1452.503816 0.8920 0.8840 0.8660 0.8490 0.7682 1457.191331 0.7419 0.7159 0.6802 0.7581 0.7930 1461.878847 0.8170 0.8260 0.8290 0.8260 0.8230 1466.566363 0.8260 0.8290 0.8320 0.8390 0.8450 1471.253879 0.8450 0.8360 0.8210 0.8190 0.8170 1475.941394 0.8160 0.8160 0.8210 0.8200 0.8190 1480.628910 0.8010 0.7980 0.8040 0.8200 0.8370 1485.316426 0.8530 0.8590 0.8590 0.8610 0.8620 1490.003941 0.8620 0.8630 0.8620 0.8660 0.8720 1494.691457 0.8740 0.8780 0.8810 0.8810 0.8810 1499.378973 0.8750 0.8690 0.8680 0.8660 0.8790 1504.066489 0.8850 0.8870 0.8880 0.8880 0.8880 1508.754004 0.8880 0.8880 0.8870 0.8870 0.8870 1513.441520 0.8850 0.8840 0.8840 0.8850 0.8870 1518.129036 0.8870 0.8870 0.8880 0.8880 0.8880 1522.816551 0.8900 0.8900 0.8910 0.8940 0.8940 1527.504067 0.8950 0.8950 0.8950 0.8970 0.8970 1532.191583 0.8980 0.9000 0.9010 0.9010 0.9010 1536.879099 0.9010 0.9030 0.9030 0.9040 0.9050 1541.566614 0.9070 0.9070 0.9080 0.9100 0.9130 1546.254130 0.9140 0.9160 0.9170 0.9180 0.9200 1550.941646 0.9210 0.9230 0.9230 0.9230 0.9230 1555.629161 0.9230 0.9240 0.9260 0.9270 0.9270 1560.316677 0.9290 0.9300 0.9310 0.9330 0.9340 1565.004193 0.9360 0.9370 0.9390 0.9400 0.9420 1569.691709 0.9430 0.9430 0.9450 0.9460 0.9460 1574.379224 0.9470 0.9470 0.9490 0.9490 0.9490 1579.066740 0.9500 0.9500 0.9520 0.9520 0.9530 1583.754256 0.9530 0.9530 0.9550 0.9550 0.9560 1588.441771 0.9560 0.9580 0.9580 0.9590 0.9590 1593.129287 0.9590 0.9590 0.9590 0.9590 0.9600 1597.816803 0.9600 0.9600 0.9600 0.9600 0.9600 1602.504319 0.9600 0.9600 0.9600 0.9620 0.9620 1607.191834 0.9620 0.9620 0.9620 0.9620 0.9620 1611.879350 0.9630 0.9630 0.9630 0.9630 0.9630 1616.566866 0.9630 0.9650 0.9650 0.9650 0.9660 1621.254381 0.9660 0.9660 0.9660 0.9680 0.9680 1625.941897 0.9680 0.9680 0.9690 0.9690 0.9690 1630.629413 0.9690 0.9690 0.9690 0.9710 0.9710 1635.316929 0.9710 0.9710 0.9710 0.9710 0.9720 1640.004444 0.9720 0.9720 0.9720 0.9720 0.9720 1644.691960 0.9720 0.9720 0.9720 0.9720 0.9720 1649.379476 0.9720 0.9720 0.9720 0.9720 0.9720 1654.066991 0.9720 0.9720 0.9720 0.9720 0.9730 1658.754507 0.9730 0.9730 0.9730 0.9730 0.9730 1663.442023 0.9730 0.9730 0.9730 0.9730 0.9730 1668.129539 0.9730 0.9730 0.9730 0.9730 0.9730 1672.817054 0.9730 0.9730 0.9730 0.9730 0.9730 1677.504570 0.9730 0.9730 0.9730 0.9730 0.9730 1682.192086 0.9730 0.9730 0.9730 0.9730 0.9730 1686.879601 0.9730 0.9730 0.9730 0.9730 0.9730 1691.567117 0.9730 0.9720 0.9720 0.9720 0.9720 1696.254633 0.9710 0.9710 0.9710 0.9690 0.9690 1700.942149 0.9680 0.9690 0.9710 0.9710 0.9720 1705.629664 0.9720 0.9720 0.9730 0.9730 0.9730 1710.317180 0.9730 0.9730 0.9730 0.9720 0.9720 1715.004696 0.9720 0.9710 0.9710 0.9720 0.9720 1719.692211 0.9720 0.9710 0.9710 0.9710 0.9710 1724.379727 0.9710 0.9690 0.9690 0.9690 0.9690 1729.067243 0.9680 0.9680 0.9680 0.9680 0.9680 1733.754759 0.9680 0.9680 0.9680 0.9680 0.9680 1738.442274 0.9680 0.9680 0.9680 0.9690 0.9690 1743.129790 0.9710 0.9710 0.9710 0.9710 0.9710 1747.817306 0.9710 0.9720 0.9720 0.9720 0.9720 1752.504821 0.9720 0.9720 0.9720 0.9720 0.9720 1757.192337 0.9720 0.9710 0.9710 0.9690 0.9690 1761.879853 0.9680 0.9680 0.9680 0.9660 0.9660 1766.567369 0.9660 0.9660 0.9660 0.9660 0.9650 1771.254884 0.9660 0.9660 0.9680 0.9680 0.9690 1775.942400 0.9710 0.9710 0.9710 0.9710 0.9720 1780.629916 0.9720 0.9720 0.9720 0.9720 0.9720 1785.317431 0.9720 0.9730 0.9730 0.9730 0.9730 1790.004947 0.9730 0.9730 0.9750 0.9750 0.9750 1794.692463 0.9750 0.9750 0.9750 0.9750 0.9750 1799.379979 0.9750 0.9750 0.9750 0.9760 0.9760 1804.067494 0.9760 0.9760 0.9760 0.9760 0.9760 1808.755010 0.9760 0.9760 0.9760 0.9760 0.9760 1813.442526 0.9760 0.9780 0.9780 0.9780 0.9780 1818.130041 0.9780 0.9780 0.9780 0.9780 0.9780 1822.817557 0.9780 0.9780 0.9780 0.9780 0.9780 1827.505073 0.9780 0.9780 0.9780 0.9780 0.9780 1832.192589 0.9780 0.9780 0.9780 0.9780 0.9780 1836.880104 0.9780 0.9780 0.9780 0.9780 0.9760 1841.567620 0.9760 0.9760 0.9760 0.9750 0.9750 1846.255136 0.9750 0.9750 0.9750 0.9750 0.9750 1850.942651 0.9750 0.9750 0.9750 0.9760 0.9760 1855.630167 0.9760 0.9760 0.9760 0.9760 0.9760 1860.317683 0.9760 0.9760 0.9760 0.9760 0.9760 1865.005199 0.9760 0.9760 0.9760 0.9760 0.9780 1869.692714 0.9780 0.9780 0.9780 0.9780 0.9780 1874.380230 0.9780 0.9780 0.9780 0.9780 0.9780 1879.067746 0.9780 0.9780 0.9780 0.9780 0.9780 1883.755261 0.9760 0.9760 0.9760 0.9760 0.9760 1888.442777 0.9760 0.9760 0.9760 0.9760 0.9760 1893.130293 0.9760 0.9760 0.9760 0.9760 0.9760 1897.817809 0.9760 0.9760 0.9760 0.9760 0.9760 1902.505324 0.9760 0.9760 0.9760 0.9760 0.9760 1907.192840 0.9760 0.9760 0.9760 0.9760 0.9760 1911.880356 0.9760 0.9760 0.9760 0.9760 0.9760 1916.567871 0.9780 0.9780 0.9780 0.9780 0.9780 1921.255387 0.9780 0.9780 0.9780 0.9780 0.9780 1925.942903 0.9780 0.9780 0.9780 0.9780 0.9780 1930.630419 0.9780 0.9780 0.9780 0.9760 0.9760 1935.317934 0.9760 0.9760 0.9760 0.9760 0.9760 1940.005450 0.9760 0.9750 0.9750 0.9750 0.9750 1944.692966 0.9750 0.9750 0.9750 0.9760 0.9760 1949.380481 0.9760 0.9780 0.9790 0.9780 0.9790 1954.067997 0.9790 0.9790 0.9790 0.9790 0.9790 1958.755513 0.9790 0.9790 0.9790 0.9790 0.9790 1963.443029 0.9790 0.9790 0.9790 0.9790 0.9790 1968.130544 0.9790 0.9790 0.9790 0.9790 0.9790 1972.818060 0.9790 0.9790 0.9790 0.9790 0.9790 1977.505576 0.9790 0.9790 0.9790 0.9780 0.9780 1982.193091 0.9780 0.9780 0.9780 0.9780 0.9780 1986.880607 0.9780 0.9780 0.9780 0.9780 0.9760 1991.568123 0.9760 0.9760 0.9760 0.9760 0.9760 1996.255639 0.9750 0.9750 0.9750 0.9750 0.9730 2000.943154 0.9725 0.9720 0.9720 0.9720 0.9720 2005.630670 0.9720 0.9715 0.9710 0.9710 0.9710 2010.318186 0.9710 0.9710 0.9700 0.9690 0.9690 2015.005701 0.9690 0.9685 0.9680 0.9656 0.9630 2019.693217 0.9625 0.9620 0.9610 0.9600 0.9595 2024.380733 0.9590 0.9575 0.9560 0.9545 0.9530 2029.068249 0.9530 0.9530 0.9525 0.9520 0.9510 2033.755764 0.9500 0.9495 0.9490 0.9490 0.9490 2038.443280 0.9480 0.9470 0.9470 0.9470 0.9465 2043.130796 0.9460 0.9460 0.9460 0.9460 0.9460 2047.818311 0.9474 0.9489 0.9495 0.9500 0.9500 2052.505827 0.9500 0.9500 0.9500 0.9495 0.9490 2057.193343 0.9447 0.9402 0.9353 0.9303 0.9253 2061.880859 0.9203 0.9130 0.9055 0.8980 0.8905 2066.568374 0.8998 0.9103 0.9333 0.9572 0.9590 2071.255890 0.9590 0.9562 0.9532 0.9456 0.9375 2075.943406 0.9291 0.9206 0.9154 0.9104 0.9086 2080.630921 0.9071 0.9010 0.8945 0.8926 0.8911 2085.318437 0.8942 0.8977 0.8994 0.9009 0.9019 2090.005953 0.9029 0.9035 0.9040 0.9113 0.9193 2094.693469 0.9246 0.9296 0.9332 0.9367 0.9465 2099.380984 0.9570 0.9585 0.9590 0.9603 0.9618 2104.068500 0.9633 0.9648 0.9668 0.9688 0.9703 2108.756016 0.9718 0.9724 0.9729 0.9730 0.9730 2113.443531 0.9730 0.9730 0.9730 0.9730 0.9730 2118.131047 0.9730 0.9726 0.9721 0.9720 0.9720 2122.818563 0.9716 0.9711 0.9688 0.9663 0.9660 2127.506079 0.9660 0.9660 0.9660 0.9660 0.9660 2132.193594 0.9660 0.9660 0.9673 0.9688 0.9699 2136.881110 0.9709 0.9714 0.9719 0.9724 0.9729 2141.568626 0.9739 0.9749 0.9750 0.9750 0.9750 2146.256141 0.9750 0.9750 0.9750 0.9750 0.9750 2150.943657 0.9750 0.9750 0.9750 0.9750 0.9750 2155.631173 0.9750 0.9750 0.9750 0.9750 0.9750 2160.318689 0.9750 0.9750 0.9750 0.9750 0.9750 2165.006204 0.9750 0.9750 0.9750 0.9754 0.9759 2169.693720 0.9760 0.9760 0.9760 0.9760 0.9760 2174.381236 0.9760 0.9760 0.9760 0.9760 0.9760 2179.068751 0.9760 0.9760 0.9760 0.9760 0.9768 2183.756267 0.9778 0.9780 0.9780 0.9780 0.9780 2188.443783 0.9780 0.9780 0.9780 0.9780 0.9780 2193.131299 0.9780 0.9780 0.9780 0.9784 0.9789 2197.818814 0.9790 0.9790 0.9790 0.9790 0.9790 2202.506330 0.9790 0.9790 0.9790 0.9790 0.9790 2207.193846 0.9790 0.9790 0.9790 0.9790 0.9790 2211.881361 0.9790 0.9790 0.9790 0.9790 0.9790 2216.568877 0.9790 0.9790 0.9790 0.9790 0.9790 2221.256393 0.9790 0.9790 0.9790 0.9790 0.9790 2225.943909 0.9790 0.9790 0.9790 0.9790 0.9790 2230.631424 0.9790 0.9798 0.9808 0.9810 0.9810 2235.318940 0.9810 0.9810 0.9814 0.9819 0.9820 2240.006456 0.9820 0.9820 0.9820 0.9828 0.9838 2244.693971 0.9840 0.9840 0.9840 0.9840 0.9840 2249.381487 0.9840 0.9840 0.9840 0.9840 0.9840 2254.069003 0.9840 0.9840 0.9840 0.9840 0.9840 2258.756519 0.9840 0.9840 0.9840 0.9840 0.9840 2263.444034 0.9840 0.9840 0.9832 0.9823 0.9820 2268.131550 0.9820 0.9820 0.9820 0.9820 0.9820 2272.819066 0.9820 0.9820 0.9820 0.9820 0.9820 2277.506581 0.9820 0.9820 0.9820 0.9820 0.9820 2282.194097 0.9820 0.9820 0.9820 0.9820 0.9820 2286.881613 0.9820 0.9820 0.9820 0.9820 0.9820 2291.569129 0.9827 0.9837 0.9840 0.9840 0.9840 2296.256644 0.9840 0.9840 0.9840 0.9840 0.9840 2300.944160 0.9840 0.9840 0.9840 0.9840 0.9840 2305.631676 0.9840 0.9840 0.9840 0.9840 0.9840 2310.319191 0.9840 0.9840 0.9840 0.9840 0.9840 2315.006707 0.9840 0.9840 0.9840 0.9840 0.9840 2319.694223 0.9840 0.9840 0.9840 0.9840 0.9840 2324.381739 0.9840 0.9840 0.9840 0.9840 0.9840 2329.069254 0.9840 0.9840 0.9840 0.9840 0.9840 2333.756770 0.9840 0.9840 0.9840 0.9840 0.9840 2338.444286 0.9840 0.9840 0.9843 0.9848 0.9850 2343.131801 0.9850 0.9850 0.9850 0.9850 0.9850 2347.819317 0.9853 0.9858 0.9860 0.9860 0.9860 2352.506833 0.9860 0.9860 0.9860 0.9857 0.9852 2357.194349 0.9850 0.9850 0.9850 0.9850 0.9847 2361.881864 0.9842 0.9840 0.9840 0.9840 0.9840 2366.569380 0.9834 0.9824 0.9820 0.9820 0.9817 2371.256896 0.9812 0.9810 0.9810 0.9810 0.9810 2375.944411 0.9810 0.9810 0.9804 0.9794 0.9790 2380.631927 0.9790 0.9790 0.9790 0.9790 0.9790 2385.319443 0.9787 0.9782 0.9780 0.9780 0.9780 2390.006959 0.9780 0.9774 0.9764 0.9760 0.9760 2394.694474 0.9760 0.9760 0.9766 0.9776 0.9780 2399.381990 0.9780 0.9780 0.9780 0.9780 0.9780 2404.069506 0.9780 0.9780 0.9774 0.9764 0.9760 2408.757021 0.9760 0.9760 0.9760 0.9760 0.9760 2413.444537 0.9760 0.9760 0.9760 0.9760 0.9760 2418.132053 0.9760 0.9760 0.9760 0.9760 0.9760 2422.819569 0.9760 0.9760 0.9760 0.9760 0.9760 2427.507084 0.9760 0.9760 0.9760 0.9766 0.9776 2432.194600 0.9780 0.9780 0.9780 0.9780 0.9783 2436.882116 0.9788 0.9790 0.9790 0.9790 0.9790 2441.569631 0.9790 0.9790 0.9790 0.9790 0.9790 2446.257147 0.9790 0.9796 0.9806 0.9810 0.9810 2450.944663 0.9813 0.9818 0.9820 0.9820 0.9826 2455.632179 0.9836 0.9840 0.9840 0.9834 0.9824 2460.319694 0.9820 0.9820 0.9820 0.9820 0.9820 2465.007210 0.9820 0.9820 0.9820 0.9825 0.9836 2469.694726 0.9840 0.9840 0.9840 0.9840 0.9840 2474.382241 0.9840 0.9840 0.9840 0.9840 0.9840 2479.069757 0.9843 0.9848 0.9850 0.9850 0.9850 2483.757273 0.9850 0.9850 0.9850 0.9850 0.9850 2488.444789 0.9850 0.9850 0.9850 0.9850 0.9850 2493.132304 0.9850 0.9853 0.9858 0.9860 0.9860 2497.819820 0.9860 0.9860 0.9860 0.9860 0.9860 2502.507336 0.9860 0.9860 0.9860 0.9860 0.9860 2507.194851 0.9860 0.9860 0.9860 0.9860 0.9860 2511.882367 0.9860 0.9860 0.9860 0.9860 0.9860 2516.569883 0.9857 0.9852 0.9850 0.9850 0.9850 2521.257399 0.9850 0.9850 0.9850 0.9850 0.9850 2525.944914 0.9847 0.9842 0.9840 0.9840 0.9840 2530.632430 0.9840 0.9840 0.9840 0.9840 0.9840 2535.319946 0.9835 0.9825 0.9820 0.9820 0.9820 2540.007461 0.9820 0.9820 0.9820 0.9820 0.9820 2544.694977 0.9818 0.9813 0.9810 0.9810 0.9810 2549.382493 0.9810 0.9805 0.9795 0.9790 0.9790 2554.070009 0.9790 0.9790 0.9790 0.9790 0.9790 2558.757524 0.9790 0.9790 0.9790 0.9795 0.9805 2563.445040 0.9810 0.9810 0.9810 0.9810 0.9805 2568.132556 0.9795 0.9790 0.9790 0.9790 0.9790 2572.820071 0.9790 0.9790 0.9790 0.9790 0.9790 2577.507587 0.9790 0.9790 0.9790 0.9788 0.9783 2582.195103 0.9780 0.9780 0.9780 0.9780 0.9780 2586.882619 0.9780 0.9776 0.9766 0.9760 0.9760 2591.570134 0.9760 0.9760 0.9760 0.9760 0.9758 2596.257650 0.9753 0.9750 0.9750 0.9750 0.9750 2600.945166 0.9746 0.9736 0.9730 0.9730 0.9730 2605.632681 0.9730 0.9730 0.9730 0.9730 0.9730 2610.320197 0.9730 0.9730 0.9730 0.9730 0.9730 2615.007713 0.9730 0.9730 0.9730 0.9730 0.9730 2619.695229 0.9730 0.9730 0.9730 0.9730 0.9730 2624.382744 0.9730 0.9730 0.9730 0.9730 0.9730 2629.070260 0.9730 0.9730 0.9730 0.9730 0.9730 2633.757776 0.9730 0.9730 0.9730 0.9728 0.9723 2638.445291 0.9720 0.9720 0.9720 0.9720 0.9720 2643.132807 0.9720 0.9720 0.9720 0.9720 0.9720 2647.820323 0.9720 0.9720 0.9720 0.9720 0.9720 2652.507839 0.9720 0.9720 0.9720 0.9718 0.9713 2657.195354 0.9710 0.9710 0.9710 0.9710 0.9710 2661.882870 0.9710 0.9710 0.9710 0.9706 0.9696 2666.570386 0.9690 0.9690 0.9690 0.9690 0.9690 2671.257901 0.9690 0.9690 0.9690 0.9690 0.9690 2675.945417 0.9690 0.9690 0.9690 0.9690 0.9694 2680.632933 0.9704 0.9710 0.9710 0.9710 0.9710 2685.320449 0.9712 0.9717 0.9720 0.9720 0.9720 2690.007964 0.9720 0.9720 0.9720 0.9720 0.9720 2694.695480 0.9720 0.9720 0.9720 0.9720 0.9720 2699.382996 0.9720 0.9720 0.9720 0.9720 0.9720 2704.070511 0.9718 0.9713 0.9710 0.9710 0.9710 2708.758027 0.9710 0.9710 0.9710 0.9710 0.9710 2713.445543 0.9707 0.9697 0.9690 0.9690 0.9690 2718.133059 0.9690 0.9688 0.9683 0.9680 0.9680 2722.820574 0.9677 0.9667 0.9658 0.9653 0.9650 2727.508090 0.9650 0.9647 0.9637 0.9630 0.9630 2732.195606 0.9628 0.9623 0.9617 0.9607 0.9598 2736.883121 0.9594 0.9589 0.9584 0.9580 0.9580 2741.570637 0.9577 0.9567 0.9559 0.9554 0.9547 2746.258153 0.9537 0.9526 0.9511 0.9496 0.9481 2750.945669 0.9469 0.9464 0.9456 0.9441 0.9429 2755.633184 0.9424 0.9416 0.9401 0.9387 0.9377 2760.320700 0.9366 0.9351 0.9339 0.9334 0.9326 2765.008216 0.9311 0.9299 0.9294 0.9286 0.9271 2769.695731 0.9257 0.9247 0.9236 0.9221 0.9203 2774.383247 0.9178 0.9156 0.9141 0.9123 0.9099 2779.070763 0.9079 0.9074 0.9061 0.9026 0.8990 2783.758279 0.8950 0.8908 0.8858 0.8813 0.8782 2788.445794 0.8757 0.8747 0.8736 0.8721 0.8706 2793.133310 0.8691 0.8665 0.8605 0.8529 0.8399 2797.820826 0.8283 0.8213 0.8139 0.8049 0.7960 2802.508341 0.7876 0.7788 0.7694 0.7601 0.7515 2807.195857 0.7439 0.7394 0.7349 0.7304 0.7193 2811.883373 0.6864 0.6600 0.6555 0.6505 0.6441 2816.570889 0.6365 0.6250 0.6135 0.6020 0.5881 2821.258404 0.5651 0.5457 0.5398 0.5324 0.5198 2825.945920 0.5097 0.5082 0.5070 0.5070 0.5072 2830.633436 0.5082 0.5097 0.5132 0.5166 0.5196 2835.320951 0.5221 0.5226 0.5242 0.5302 0.5360 2840.008467 0.5410 0.5457 0.5492 0.5532 0.5598 2844.695983 0.5573 0.5199 0.4823 0.4439 0.4055 2849.383499 0.3676 0.3430 0.3739 0.4159 0.5052 2854.071014 0.5736 0.5502 0.5279 0.5110 0.4955 2858.758530 0.4870 0.4785 0.4700 0.4600 0.4424 2863.446046 0.4247 0.4073 0.3898 0.3723 0.3579 2868.133561 0.3574 0.3569 0.3564 0.3571 0.3636 2872.821077 0.3698 0.3748 0.3798 0.3848 0.3893 2877.508593 0.3913 0.3940 0.4005 0.4072 0.4153 2882.196109 0.4233 0.4307 0.4382 0.4451 0.4520 2886.883624 0.4580 0.4634 0.4659 0.4682 0.4692 2891.571140 0.4702 0.4717 0.4726 0.4696 0.4659 2896.258656 0.4585 0.4510 0.4441 0.4372 0.4311 2900.946171 0.4249 0.4180 0.4110 0.4046 0.3965 2905.633687 0.3790 0.3636 0.3606 0.3575 0.3540 2910.321203 0.3504 0.3459 0.3399 0.3234 0.3088 2915.008719 0.3073 0.3060 0.3060 0.3037 0.2840 2919.696234 0.2663 0.2608 0.2544 0.2425 0.2319 2924.383750 0.2309 0.2301 0.2311 0.2324 0.2353 2929.071266 0.2385 0.2430 0.2468 0.2453 0.2435 2933.758781 0.2390 0.2345 0.2295 0.2245 0.2195 2938.446297 0.2149 0.2144 0.2140 0.2140 0.2139 2943.133813 0.2129 0.2120 0.2120 0.2121 0.2131 2947.821329 0.2140 0.2145 0.2150 0.2150 0.2151 2952.508844 0.2161 0.2170 0.2175 0.2180 0.2180 2957.196360 0.2180 0.2185 0.2191 0.2201 0.2210 2961.883876 0.2215 0.2220 0.2220 0.2220 0.2220 2966.571391 0.2214 0.2145 0.2075 0.2016 0.1959 2971.258907 0.1944 0.1930 0.1930 0.1930 0.1925 2975.946423 0.1919 0.1904 0.1890 0.1890 0.1891 2980.633938 0.1901 0.1913 0.1953 0.1992 0.2027 2985.321454 0.2069 0.2224 0.2373 0.2428 0.2483 2990.008970 0.2548 0.2612 0.2657 0.2701 0.2732 2994.696486 0.2766 0.2866 0.2965 0.3055 0.3145 2999.384001 0.3229 0.3319 0.3494 0.3663 0.3733 3004.071517 0.3802 0.3847 0.3892 0.3931 0.3967 3008.759033 0.3882 0.3800 0.3800 0.3803 0.3904 3013.446548 0.4002 0.4047 0.4092 0.4137 0.4182 3018.134064 0.4237 0.4294 0.4403 0.4516 0.4721 3022.821580 0.4922 0.5007 0.5091 0.5136 0.5180 3027.509096 0.5185 0.5191 0.5256 0.5321 0.5437 3032.196611 0.5551 0.5576 0.5601 0.5626 0.5650 3036.884127 0.5675 0.5700 0.5715 0.5733 0.6012 3041.571643 0.6291 0.6391 0.6490 0.6570 0.6650 3046.259158 0.6685 0.6720 0.6670 0.6620 0.6605 3050.946674 0.6590 0.6605 0.6622 0.7077 0.7530 3055.634190 0.7600 0.7670 0.7720 0.7770 0.7834 3060.321706 0.7899 0.7935 0.7970 0.8019 0.8069 3065.009221 0.8119 0.8169 0.8204 0.8239 0.8279 3069.696737 0.8320 0.8355 0.8390 0.8434 0.8479 3074.384253 0.8529 0.8579 0.8668 0.8758 0.8814 3079.071768 0.8868 0.8904 0.8939 0.8959 0.8979 3083.759284 0.9043 0.9107 0.9124 0.9139 0.9183 3088.446800 0.9229 0.9249 0.9269 0.9285 0.9299 3093.134316 0.9319 0.9339 0.9378 0.9418 0.9439 3097.821831 0.9459 0.9479 0.9499 0.9514 0.9529 3102.509347 0.9539 0.9549 0.9564 0.9579 0.9585 3107.196863 0.9590 0.9604 0.9619 0.9634 0.9649 3111.884378 0.9664 0.9679 0.9699 0.9719 0.9725 3116.571894 0.9730 0.9730 0.9730 0.9739 0.9749 3121.259410 0.9750 0.9750 0.9755 0.9760 0.9760 3125.946926 0.9760 0.9769 0.9779 0.9785 0.9790 3130.634441 0.9790 0.9790 0.9799 0.9809 0.9810 3135.321957 0.9810 0.9810 0.9810 0.9810 0.9810 3140.009473 0.9810 0.9810 0.9810 0.9810 0.9810 3144.696988 0.9810 0.9815 0.9820 0.9820 0.9820 3149.384504 0.9820 0.9820 0.9820 0.9820 0.9820 3154.072020 0.9820 0.9820 0.9820 0.9820 0.9820 3158.759536 0.9829 0.9839 0.9840 0.9840 0.9840 3163.447051 0.9840 0.9845 0.9849 0.9850 0.9850 3168.134567 0.9850 0.9850 0.9854 0.9859 0.9860 3172.822083 0.9860 0.9860 0.9860 0.9860 0.9860 3177.509598 0.9860 0.9860 0.9869 0.9879 0.9880 3182.197114 0.9880 0.9880 0.9880 0.9880 0.9880 3186.884630 0.9880 0.9880 0.9880 0.9880 0.9880 3191.572146 0.9880 0.9880 0.9880 0.9880 0.9880 3196.259661 0.9880 0.9880 0.9880 0.9880 0.9880 3200.947177 0.9880 0.9880 0.9880 0.9880 0.9880 3205.634693 0.9880 0.9880 0.9880 0.9880 0.9880 3210.322208 0.9880 0.9880 0.9880 0.9880 0.9880 3215.009724 0.9880 0.9880 0.9880 0.9880 0.9880 3219.697240 0.9880 0.9880 0.9880 0.9884 0.9889 3224.384756 0.9898 0.9908 0.9910 0.9910 0.9910 3229.072271 0.9910 0.9910 0.9910 0.9910 0.9910 3233.759787 0.9910 0.9910 0.9910 0.9910 0.9910 3238.447303 0.9910 0.9910 0.9910 0.9910 0.9910 3243.134818 0.9910 0.9910 0.9910 0.9910 0.9910 3247.822334 0.9910 0.9910 0.9910 0.9910 0.9910 3252.509850 0.9910 0.9910 0.9910 0.9910 0.9910 3257.197366 0.9910 0.9910 0.9910 0.9910 0.9910 3261.884881 0.9910 0.9910 0.9910 0.9910 0.9910 3266.572397 0.9910 0.9910 0.9910 0.9910 0.9910 3271.259913 0.9910 0.9910 0.9910 0.9910 0.9910 3275.947428 0.9910 0.9910 0.9910 0.9910 0.9910 3280.634944 0.9910 0.9910 0.9910 0.9910 0.9910 3285.322460 0.9910 0.9914 0.9919 0.9920 0.9920 3290.009976 0.9920 0.9920 0.9920 0.9920 0.9920 3294.697491 0.9920 0.9920 0.9920 0.9920 0.9920 3299.385007 0.9920 0.9920 0.9920 0.9920 0.9920 3304.072523 0.9920 0.9920 0.9920 0.9920 0.9920 3308.760038 0.9920 0.9920 0.9920 0.9920 0.9920 3313.447554 0.9920 0.9920 0.9920 0.9916 0.9911 3318.135070 0.9910 0.9910 0.9910 0.9910 0.9910 3322.822586 0.9910 0.9910 0.9910 0.9910 0.9910 3327.510101 0.9910 0.9910 0.9910 0.9910 0.9910 3332.197617 0.9910 0.9910 0.9910 0.9910 0.9910 3336.885133 0.9910 0.9910 0.9903 0.9893 0.9890 3341.572648 0.9890 0.9890 0.9890 0.9890 0.9890 3346.260164 0.9890 0.9890 0.9890 0.9890 0.9890 3350.947680 0.9890 0.9890 0.9890 0.9890 0.9890 3355.635196 0.9886 0.9881 0.9880 0.9880 0.9880 3360.322711 0.9880 0.9880 0.9880 0.9880 0.9880 3365.010227 0.9880 0.9880 0.9880 0.9880 0.9880 3369.697743 0.9880 0.9873 0.9863 0.9860 0.9860 3374.385258 0.9860 0.9860 0.9860 0.9860 0.9860 3379.072774 0.9860 0.9860 0.9860 0.9860 0.9860 3383.760290 0.9857 0.9852 0.9850 0.9850 0.9850 3388.447806 0.9850 0.9853 0.9858 0.9860 0.9860 3393.135321 0.9860 0.9860 0.9860 0.9860 0.9860 3397.822837 0.9860 0.9857 0.9852 0.9850 0.9850 3402.510353 0.9850 0.9850 0.9847 0.9842 0.9840 3407.197868 0.9840 0.9840 0.9840 0.9840 0.9840 3411.885384 0.9840 0.9840 0.9840 0.9840 0.9833 3416.572900 0.9823 0.9820 0.9820 0.9820 0.9820 3421.260416 0.9820 0.9820 0.9820 0.9820 0.9817 3425.947931 0.9812 0.9810 0.9810 0.9810 0.9810 3430.635447 0.9810 0.9810 0.9810 0.9810 0.9810 3435.322963 0.9810 0.9810 0.9810 0.9810 0.9810 3440.010478 0.9813 0.9818 0.9817 0.9812 0.9810 3444.697994 0.9810 0.9810 0.9810 0.9810 0.9810 3449.385510 0.9810 0.9810 0.9810 0.9810 0.9810 3454.073026 0.9810 0.9810 0.9810 0.9810 0.9810 3458.760541 0.9810 0.9810 0.9810 0.9810 0.9810 3463.448057 0.9810 0.9810 0.9810 0.9810 0.9810 3468.135573 0.9810 0.9810 0.9810 0.9810 0.9804 3472.823088 0.9794 0.9790 0.9790 0.9790 0.9790 3477.510604 0.9787 0.9782 0.9780 0.9780 0.9774 3482.198120 0.9764 0.9760 0.9760 0.9760 0.9760 3486.885636 0.9760 0.9760 0.9766 0.9776 0.9780 3491.573151 0.9780 0.9780 0.9780 0.9780 0.9780 3496.260667 0.9780 0.9780 0.9783 0.9788 0.9790 3500.948183 0.9790 0.9790 0.9790 0.9790 0.9790 3505.635698 0.9790 0.9790 0.9790 0.9790 0.9790 3510.323214 0.9790 0.9790 0.9790 0.9790 0.9790 3515.010730 0.9790 0.9790 0.9790 0.9790 0.9790 3519.698246 0.9790 0.9790 0.9790 0.9787 0.9782 3524.385761 0.9780 0.9780 0.9774 0.9765 0.9757 3529.073277 0.9752 0.9750 0.9750 0.9750 0.9750 3533.760793 0.9750 0.9750 0.9750 0.9750 0.9750 3538.448308 0.9750 0.9753 0.9758 0.9760 0.9760 3543.135824 0.9760 0.9760 0.9760 0.9760 0.9757 3547.823340 0.9752 0.9745 0.9735 0.9730 0.9730 3552.510856 0.9727 0.9722 0.9720 0.9720 0.9717 3557.198371 0.9712 0.9705 0.9695 0.9682 0.9667 3561.885887 0.9652 0.9637 0.9627 0.9622 0.9612 3566.573403 0.9597 0.9587 0.9582 0.9572 0.9557 3571.260918 0.9545 0.9535 0.9523 0.9508 0.9490 3575.948434 0.9470 0.9452 0.9437 0.9420 0.9400 3580.635950 0.9382 0.9367 0.9353 0.9338 0.9325 3585.323466 0.9315 0.9308 0.9303 0.9293 0.9278 3590.010981 0.9260 0.9240 0.9225 0.9215 0.9210 3594.698497 0.9210 0.9210 0.9210 0.9203 0.9188 3599.386013 0.9168 0.9143 0.9116 0.9086 0.9060 3604.073528 0.9041 0.9018 0.8993 0.8978 0.8973 3608.761044 0.8965 0.8955 0.8948 0.8943 0.8933 3613.448560 0.8918 0.8889 0.8844 0.8811 0.8791 3618.136076 0.8764 0.8729 0.8689 0.8644 0.8611 3622.823591 0.8591 0.8573 0.8558 0.8545 0.8536 3627.511107 0.8501 0.8436 0.8325 0.8155 0.8005 3632.198623 0.7878 0.7803 0.7788 0.7766 0.7736 3636.886138 0.7695 0.7640 0.7583 0.7523 0.7466 3641.573654 0.7411 0.7269 0.7014 0.6851 0.6806 3646.261170 0.6746 0.6666 0.6571 0.6456 0.6375 3650.948686 0.6340 0.6313 0.6298 0.6292 0.6297 3655.636201 0.6317 0.6357 0.6401 0.6451 0.6482 3660.323717 0.6487 0.6509 0.6554 0.6592 0.6622 3665.011233 0.6648 0.6668 0.6680 0.6680 0.6619 3669.698748 0.6468 0.6313 0.6153 0.5995 0.5841 3674.386264 0.5870 0.6159 0.6561 0.7125 0.7359 3679.073780 0.7109 0.6854 0.6589 0.6422 0.6402 3683.761296 0.6378 0.6348 0.6320 0.6295 0.6270 3688.448811 0.6245 0.6228 0.6223 0.6216 0.6206 3693.136327 0.6200 0.6200 0.6200 0.6200 0.6206 3697.823843 0.6221 0.6236 0.6251 0.6271 0.6301 3702.511358 0.6331 0.6361 0.6395 0.6435 0.6480 3707.198874 0.6536 0.6589 0.6639 0.6733 0.6898 3711.886390 0.7109 0.7399 0.7604 0.7669 0.7754 3716.573906 0.7874 0.7972 0.8032 0.8112 0.8226 3721.261421 0.8316 0.8361 0.8418 0.8498 0.8591 3725.948937 0.8707 0.8802 0.8862 0.8920 0.8975 3730.636453 0.9028 0.9078 0.9126 0.9171 0.9202 3735.323968 0.9207 0.9224 0.9264 0.9299 0.9324 3740.011484 0.9345 0.9360 0.9370 0.9370 0.9373 3744.699000 0.9383 0.9395 0.9410 0.9427 0.9447 3749.386516 0.9467 0.9487 0.9505 0.9520 0.9538 3754.074031 0.9563 0.9583 0.9593 0.9610 0.9640 3758.761547 0.9671 0.9706 0.9733 0.9743 0.9756 3763.449063 0.9777 0.9793 0.9803 0.9810 0.9810 3768.136578 0.9812 0.9817 0.9820 0.9820 0.9823 3772.824094 0.9833 0.9840 0.9840 0.9840 0.9840 3777.511610 0.9840 0.9840 0.9837 0.9827 0.9820 3782.199126 0.9820 0.9820 0.9820 0.9818 0.9813 3786.886641 0.9810 0.9810 0.9810 0.9810 0.9807 3791.574157 0.9797 0.9790 0.9790 0.9789 0.9784 3796.261673 0.9784 0.9799 0.9810 0.9810 0.9810 3800.949188 0.9810 0.9807 0.9797 0.9790 0.9790 3805.636704 0.9789 0.9784 ##END= avogadro-1.1.1/testfiles/b2h6.wfn0000644000175000001440000003263712250371054016016 0ustar marcususers b2h6 GAUSSIAN 8 MOL ORBITALS 80 PRIMITIVES 8 NUCLEI H 1 (CENTRE 1) -2.76319545 1.95996261 0.00000000 CHARGE = 1.0 H 2 (CENTRE 2) -2.76319545 -1.95996261 0.00000000 CHARGE = 1.0 B 3 (CENTRE 3) -1.67980851 0.00000000 0.00000000 CHARGE = 5.0 H 4 (CENTRE 4) 0.00000000 0.00000000 1.83199774 CHARGE = 1.0 H 5 (CENTRE 5) 0.00000000 0.00000000 -1.83199774 CHARGE = 1.0 B 6 (CENTRE 6) 1.67980851 0.00000000 0.00000000 CHARGE = 5.0 H 7 (CENTRE 7) 2.76319545 1.95996261 0.00000000 CHARGE = 1.0 H 8 (CENTRE 8) 2.76319545 -1.95996261 0.00000000 CHARGE = 1.0 CENTRE ASSIGNMENTS 1 1 1 1 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 CENTRE ASSIGNMENTS 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 CENTRE ASSIGNMENTS 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 CENTRE ASSIGNMENTS 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 8 8 8 8 TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 TYPE ASSIGNMENTS 3 3 3 4 4 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 TYPE ASSIGNMENTS 4 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 EXPONENTS 0.1873114D+02 0.2825394D+01 0.6401217D+00 0.1612778D+00 0.1873114D+02 EXPONENTS 0.2825394D+01 0.6401217D+00 0.1612778D+00 0.2068882D+04 0.3106496D+03 EXPONENTS 0.7068303D+02 0.1986108D+02 0.6299305D+01 0.2127027D+01 0.4727971D+01 EXPONENTS 0.1190338D+01 0.3594117D+00 0.4727971D+01 0.1190338D+01 0.3594117D+00 EXPONENTS 0.4727971D+01 0.1190338D+01 0.3594117D+00 0.4727971D+01 0.1190338D+01 EXPONENTS 0.3594117D+00 0.1267512D+00 0.1267512D+00 0.1267512D+00 0.1267512D+00 EXPONENTS 0.6000000D+00 0.6000000D+00 0.6000000D+00 0.6000000D+00 0.6000000D+00 EXPONENTS 0.6000000D+00 0.1873114D+02 0.2825394D+01 0.6401217D+00 0.1612778D+00 EXPONENTS 0.1873114D+02 0.2825394D+01 0.6401217D+00 0.1612778D+00 0.2068882D+04 EXPONENTS 0.3106496D+03 0.7068303D+02 0.1986108D+02 0.6299305D+01 0.2127027D+01 EXPONENTS 0.4727971D+01 0.1190338D+01 0.3594117D+00 0.4727971D+01 0.1190338D+01 EXPONENTS 0.3594117D+00 0.4727971D+01 0.1190338D+01 0.3594117D+00 0.4727971D+01 EXPONENTS 0.1190338D+01 0.3594117D+00 0.1267512D+00 0.1267512D+00 0.1267512D+00 EXPONENTS 0.1267512D+00 0.6000000D+00 0.6000000D+00 0.6000000D+00 0.6000000D+00 EXPONENTS 0.6000000D+00 0.6000000D+00 0.1873114D+02 0.2825394D+01 0.6401217D+00 EXPONENTS 0.1612778D+00 0.1873114D+02 0.2825394D+01 0.6401217D+00 0.1612778D+00 MO 1 MO 0.0 OCC NO = 2.0000000 ORB. ENERGY = -7.615026 -0.18698281D-04 -0.31715824D-04 -0.36107345D-04 0.49415819D-03 -0.18698281D-04 -0.31715824D-04 -0.36107345D-04 0.49415819D-03 0.28742715D+00 0.52943604D+00 0.85122436D+00 0.10985295D+01 0.93241652D+00 0.32136802D+00 -0.55130210D-02 -0.19653971D-02 0.69224851D-02 0.80240600D-03 0.59053839D-03 0.31920664D-03 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.19331755D-02 -0.98672547D-04 0.00000000D+00 0.00000000D+00 -0.19090967D-03 0.16552993D-03 -0.22858872D-03 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.59266294D-04 -0.10052685D-03 -0.11444627D-03 0.89692630D-03 -0.59266294D-04 -0.10052685D-03 -0.11444627D-03 0.89692630D-03 0.28742715D+00 0.52943604D+00 0.85122436D+00 0.10985295D+01 0.93241652D+00 0.32136802D+00 -0.55130210D-02 -0.19653971D-02 0.69224851D-02 -0.80240600D-03 -0.59053839D-03 -0.31920664D-03 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.19331755D-02 0.98672547D-04 0.00000000D+00 0.00000000D+00 -0.19090967D-03 0.16552993D-03 -0.22858872D-03 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.18698281D-04 -0.31715824D-04 -0.36107345D-04 0.49415819D-03 -0.18698281D-04 -0.31715824D-04 -0.36107345D-04 0.49415819D-03 MO 2 MO 0.0 OCC NO = 2.0000000 ORB. ENERGY = -7.614466 0.22583618D-04 0.38306090D-04 0.43610130D-04 0.24491046D-03 0.22583618D-04 0.38306090D-04 0.43610130D-04 0.24491046D-03 0.28746200D+00 0.52950023D+00 0.85132755D+00 0.10986627D+01 0.93252956D+00 0.32140698D+00 -0.52340686D-02 -0.18659503D-02 0.65722156D-02 0.12885985D-02 0.94835640D-03 0.51261977D-03 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.18242701D-02 -0.28204702D-03 0.00000000D+00 0.00000000D+00 0.56445117D-03 0.69182918D-04 -0.25521176D-03 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.28746200D+00 -0.52950023D+00 -0.85132755D+00 -0.10986627D+01 -0.93252956D+00 -0.32140698D+00 0.52340686D-02 0.18659503D-02 -0.65722156D-02 0.12885985D-02 0.94835640D-03 0.51261977D-03 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.18242701D-02 -0.28204702D-03 0.00000000D+00 0.00000000D+00 -0.56445117D-03 -0.69182918D-04 0.25521176D-03 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.22583618D-04 -0.38306090D-04 -0.43610130D-04 -0.24491046D-03 -0.22583618D-04 -0.38306090D-04 -0.43610130D-04 -0.24491046D-03 MO 3 MO 0.0 OCC NO = 2.0000000 ORB. ENERGY = -0.886854 0.13716934D-01 0.23266516D-01 0.26488106D-01 0.56513421D-02 0.13716934D-01 0.23266516D-01 0.26488106D-01 0.56513421D-02 -0.53728961D-01 -0.98967854D-01 -0.15911997D+00 -0.20534890D+00 -0.17429728D+00 -0.60073551D-01 -0.61887253D-01 -0.22062863D-01 0.77709407D-01 0.85324251D-01 0.62795201D-01 0.33943000D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.18857601D-01 0.13031391D-02 0.00000000D+00 0.00000000D+00 0.20444890D-01 0.47897208D-02 0.75833132D-02 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.37110363D-01 0.62946200D-01 0.71662024D-01 0.14831580D-01 0.37110363D-01 0.62946200D-01 0.71662024D-01 0.14831580D-01 -0.53728961D-01 -0.98967854D-01 -0.15911997D+00 -0.20534890D+00 -0.17429728D+00 -0.60073551D-01 -0.61887253D-01 -0.22062863D-01 0.77709407D-01 -0.85324251D-01 -0.62795201D-01 -0.33943000D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.18857601D-01 -0.13031391D-02 0.00000000D+00 0.00000000D+00 0.20444890D-01 0.47897208D-02 0.75833132D-02 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.13716934D-01 0.23266516D-01 0.26488106D-01 0.56513421D-02 0.13716934D-01 0.23266516D-01 0.26488106D-01 0.56513421D-02 MO 4 MO 0.0 OCC NO = 2.0000000 ORB. ENERGY = -0.638518 0.31623319D-01 0.53639134D-01 0.61066258D-01 0.22268127D-01 0.31623319D-01 0.53639134D-01 0.61066258D-01 0.22268127D-01 -0.50001758D-01 -0.92102408D-01 -0.14808174D+00 -0.19110375D+00 -0.16220620D+00 -0.55906221D-01 -0.57017655D-01 -0.20326847D-01 0.71594843D-01 -0.94296388D-01 -0.69398331D-01 -0.37512223D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.31019506D-01 -0.19509343D-02 0.00000000D+00 0.00000000D+00 0.26979689D-02 0.24348870D-01 0.10018582D-02 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.50001758D-01 0.92102408D-01 0.14808174D+00 0.19110375D+00 0.16220620D+00 0.55906221D-01 0.57017655D-01 0.20326847D-01 -0.71594843D-01 -0.94296388D-01 -0.69398331D-01 -0.37512223D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.31019506D-01 -0.19509343D-02 0.00000000D+00 0.00000000D+00 -0.26979689D-02 -0.24348870D-01 -0.10018582D-02 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.31623319D-01 -0.53639134D-01 -0.61066258D-01 -0.22268127D-01 -0.31623319D-01 -0.53639134D-01 -0.61066258D-01 -0.22268127D-01 MO 5 MO 0.0 OCC NO = 2.0000000 ORB. ENERGY = -0.555211 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.18434268D+00 0.13566876D+00 0.73333706D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.51034171D-02 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.56669040D-01 0.00000000D+00 0.55535169D-01 0.94198158D-01 0.10724127D+00 0.52678939D-01 -0.55535169D-01 -0.94198158D-01 -0.10724127D+00 -0.52678939D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.18434268D+00 0.13566876D+00 0.73333706D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.51034171D-02 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.56669040D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 MO 6 MO 0.0 OCC NO = 2.0000000 ORB. ENERGY = -0.539729 0.33477819D-01 0.56784717D-01 0.64647393D-01 0.25462359D-01 -0.33477819D-01 -0.56784717D-01 -0.64647393D-01 -0.25462359D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.21677490D+00 0.15953756D+00 0.86235628D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.12305981D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.18898152D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.21677490D+00 0.15953756D+00 0.86235628D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.12305981D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.18898152D-01 0.00000000D+00 0.00000000D+00 0.33477819D-01 0.56784717D-01 0.64647393D-01 0.25462359D-01 -0.33477819D-01 -0.56784717D-01 -0.64647393D-01 -0.25462359D-01 MO 7 MO 0.0 OCC NO = 2.0000000 ORB. ENERGY = -0.518701 -0.29976345D-01 -0.50845555D-01 -0.57885867D-01 -0.28393733D-01 -0.29976345D-01 -0.50845555D-01 -0.57885867D-01 -0.28393733D-01 0.15017123D-01 0.27661291D-01 0.44473671D-01 0.57394553D-01 0.48715695D-01 0.16790422D-01 0.15374462D-01 0.54810102D-02 -0.19305112D-01 0.22083627D+00 0.16252657D+00 0.87851293D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.11250764D-01 0.79097254D-02 0.00000000D+00 0.00000000D+00 0.12780304D-01 -0.27085072D-01 0.11286960D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.26726284D-01 0.45332837D-01 0.51609833D-01 0.19340732D-01 0.26726284D-01 0.45332837D-01 0.51609833D-01 0.19340732D-01 0.15017123D-01 0.27661291D-01 0.44473671D-01 0.57394553D-01 0.48715695D-01 0.16790422D-01 0.15374462D-01 0.54810102D-02 -0.19305112D-01 -0.22083627D+00 -0.16252657D+00 -0.87851293D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.11250764D-01 -0.79097254D-02 0.00000000D+00 0.00000000D+00 0.12780304D-01 -0.27085072D-01 0.11286960D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.29976345D-01 -0.50845555D-01 -0.57885867D-01 -0.28393733D-01 -0.29976345D-01 -0.50845555D-01 -0.57885867D-01 -0.28393733D-01 MO 8 MO 0.0 OCC NO = 2.0000000 ORB. ENERGY = -0.472820 0.37597709D-01 0.63772831D-01 0.72603114D-01 0.32853536D-01 -0.37597709D-01 -0.63772831D-01 -0.72603114D-01 -0.32853536D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.21601920D+00 0.15898140D+00 0.85935002D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.13511272D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.34455310D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.21601920D+00 -0.15898140D+00 -0.85935002D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.13511272D-01 0.00000000D+00 0.00000000D+00 0.00000000D+00 0.00000000D+00 -0.34455310D-01 0.00000000D+00 0.00000000D+00 -0.37597709D-01 -0.63772831D-01 -0.72603114D-01 -0.32853536D-01 0.37597709D-01 0.63772831D-01 0.72603114D-01 0.32853536D-01 END DATA THE HF ENERGY = -52.812402351525 THE VIRIAL(-V/T)= 1.99863500 avogadro-1.1.1/testfiles/basic3.drawlog0000644000175000001440000000614112250371054017255 0ustar marcususers"Avogadro version: 0.9.7 Git: 1e37271 LibAvogadro version: 0.9.7 Git: 1e37271" Locale: "en_US" Libavogadro translations not found. "System has OpenGL support." "About to test OpenGL capabilities." "OpenGL capabilities found: " "Double Buffering." "Direct Rendering." "Antialiasing." Searching for plugins in "/usr/local/bin/../lib/avogadro/colors" Searching for plugins in "/usr/local/bin/../lib/avogadro/engines" Searching for plugins in "/usr/local/bin/../lib/avogadro/extensions" Searching for plugins in "/usr/local/bin/../lib/avogadro/tools" Searching for plugins in "/usr/local/bin/../lib/avogadro/contrib" QStackedLayout::setCurrentWidget: Widget 0x2156350 not contained in stack GLWidget initialisation... GLWidget initialised... createObjects() setOBMol called. Molecule::addAtom( 0 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 15 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 1 ) Molecule::addAtom( 2 ) Molecule::addAtom( 3 ) Molecule::addAtom( 4 ) AddAtomDrawCommand::redo(id = 0 ) Molecule::addAtom( 5 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 0 , end = 5 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 5 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 0 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 6 ) Molecule::addAtom( 7 ) Molecule::addAtom( 8 ) AdjustHydrogensPreCommand(atomId = 5 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 9 ) Molecule::addAtom( 10 ) Molecule::addAtom( 11 ) Molecule::addAtom( 12 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 5 , end = 12 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 12 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 5 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 13 ) Molecule::addAtom( 14 ) AdjustHydrogensPreCommand(atomId = 12 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 15 ) Molecule::addAtom( 16 ) Molecule::addAtom( 17 ) Molecule::addAtom( 18 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 12 , end = 18 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 18 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 12 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 19 ) Molecule::addAtom( 20 ) AdjustHydrogensPreCommand(atomId = 18 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 21 ) Molecule::addAtom( 22 ) Molecule::addAtom( 23 ) avogadro-1.1.1/testfiles/benzene.fchk0000644000175000001440000037044512250371054017026 0ustar marcususersbenzene.g03 FOpt RB3LYP 3-21G Number of atoms I 12 Charge I 0 Multiplicity I 1 Number of electrons I 42 Number of alpha electrons I 21 Number of beta electrons I 21 Number of basis functions I 66 Number of independant functions I 66 Number of point charges in /Mol/ I 0 Number of translation vectors I 0 Info1-9 I N= 9 20 20 0 0 0 100 2 18 -501 Num ILSW I 100 ILSW I N= 100 0 1 0 0 2 0 0 0 0 0 402 200000 0 0 -1 0 0 0 0 800000 1 0 1 0 1 0 0 0 1000000 0 0 0 100000 0 -1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 720000 810000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Number of contracted shells I 30 Highest angular momentum I 1 Largest degree of contraction I 3 Number of primitive shells I 54 Pure/Cartesian d shells I 1 Pure/Cartesian f shells I 0 Virial Ratio R 2.008985628811967E+00 SCF Energy R -2.309757696552876E+02 Total Energy R -2.309757696552876E+02 RMS Force R 9.635150407272098E-05 RMS Density R 5.368824989404551E-09 Atomic numbers I N= 12 6 6 6 6 6 6 1 1 1 1 1 1 Nuclear charges R N= 12 6.00000000E+00 6.00000000E+00 6.00000000E+00 6.00000000E+00 6.00000000E+00 6.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 Current cartesian coordinates R N= 36 -1.47911420E-31 1.32049760E+00 -2.28724320E+00 -1.15013900E-34 2.64067733E+00 -1.73472348E-18 -2.80106506E-16 1.32049760E+00 2.28724320E+00 -1.61714316E-16 -1.32049760E+00 2.28724320E+00 -3.23389704E-16 -2.64067733E+00 1.73472348E-18 -1.61714316E-16 -1.32049760E+00 -2.28724320E+00 -3.94430453E-31 2.34489980E+00 -4.06136910E+00 -2.04242995E-34 4.68934489E+00 3.75188295E-50 -4.97374267E-16 2.34489980E+00 4.06136910E+00 -2.87167404E-16 -2.34489980E+00 4.06136910E+00 -5.74279121E-16 -4.68934489E+00 1.05493363E-31 -2.87167404E-16 -2.34489980E+00 -4.06136910E+00 Int Atom Types I N= 12 0 0 0 0 0 0 0 0 0 0 0 0 Force Field I 0 MM charges R N= 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Integer atomic weights I N= 12 12 12 12 12 12 12 1 1 1 1 1 1 Real atomic weights R N= 12 1.20000000E+01 1.20000000E+01 1.20000000E+01 1.20000000E+01 1.20000000E+01 1.20000000E+01 1.00782504E+00 1.00782504E+00 1.00782504E+00 1.00782504E+00 1.00782504E+00 1.00782504E+00 Atom residue info I N= 12 0 0 0 0 0 0 0 0 0 0 0 0 Atom fragment info I N= 12 0 0 0 0 0 0 0 0 0 0 0 0 Atom residue num I N= 12 0 0 0 0 0 0 0 0 0 0 0 0 Nuclear spins I N= 12 0 0 0 0 0 0 1 1 1 1 1 1 Nuclear ZEff R N= 12 -3.60000000E+00 -3.60000000E+00 -3.60000000E+00 -3.60000000E+00 -3.60000000E+00 -3.60000000E+00 -1.00000000E+00 -1.00000000E+00 -1.00000000E+00 -1.00000000E+00 -1.00000000E+00 -1.00000000E+00 Nuclear QMom R N= 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Nuclear GFac R N= 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.79284600E+00 2.79284600E+00 2.79284600E+00 2.79284600E+00 2.79284600E+00 2.79284600E+00 MicOpt I N= 12 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 Constraint Structure R N= 36 -1.47911420E-31 1.32049760E+00 -2.28724320E+00 -1.15013900E-34 2.64067733E+00 -1.73472348E-18 -2.80106506E-16 1.32049760E+00 2.28724320E+00 -1.61714316E-16 -1.32049760E+00 2.28724320E+00 -3.23389704E-16 -2.64067733E+00 1.73472348E-18 -1.61714316E-16 -1.32049760E+00 -2.28724320E+00 -3.94430453E-31 2.34489980E+00 -4.06136910E+00 -2.04242995E-34 4.68934489E+00 3.75188295E-50 -4.97374267E-16 2.34489980E+00 4.06136910E+00 -2.87167404E-16 -2.34489980E+00 4.06136910E+00 -5.74279121E-16 -4.68934489E+00 1.05493363E-31 -2.87167404E-16 -2.34489980E+00 -4.06136910E+00 ONIOM Charges I N= 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ONIOM Multiplicities I N= 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Atom Layers I N= 12 1 1 1 1 1 1 1 1 1 1 1 1 Atom Modifiers I N= 12 0 0 0 0 0 0 0 0 0 0 0 0 Int Atom Modified Types I N= 12 0 0 0 0 0 0 0 0 0 0 0 0 Link Atoms I N= 12 0 0 0 0 0 0 0 0 0 0 0 0 Atom Modified MM Charges R N= 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Link Distances R N= 48 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 MxBond I 3 NBond I N= 12 3 3 3 3 3 3 1 1 1 1 1 1 IBond I N= 36 2 6 7 1 3 8 2 4 9 3 5 10 4 6 11 1 5 12 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 6 0 0 RBond R N= 36 1.50000000E+00 1.50000000E+00 1.00000000E+00 1.50000000E+00 1.50000000E+00 1.00000000E+00 1.50000000E+00 1.50000000E+00 1.00000000E+00 1.50000000E+00 1.50000000E+00 1.00000000E+00 1.50000000E+00 1.50000000E+00 1.00000000E+00 1.50000000E+00 1.50000000E+00 1.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 Shell types I N= 30 0 -1 -1 0 -1 -1 0 -1 -1 0 -1 -1 0 -1 -1 0 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 Number of primitives per shell I N= 30 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 3 2 1 2 1 2 1 2 1 2 1 2 1 2 1 Shell to atom map I N= 30 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 8 8 9 9 10 10 11 11 12 12 Primitive exponents R N= 54 1.72256000E+02 2.59109000E+01 5.53335000E+00 3.66498000E+00 7.70545000E-01 1.95857000E-01 1.72256000E+02 2.59109000E+01 5.53335000E+00 3.66498000E+00 7.70545000E-01 1.95857000E-01 1.72256000E+02 2.59109000E+01 5.53335000E+00 3.66498000E+00 7.70545000E-01 1.95857000E-01 1.72256000E+02 2.59109000E+01 5.53335000E+00 3.66498000E+00 7.70545000E-01 1.95857000E-01 1.72256000E+02 2.59109000E+01 5.53335000E+00 3.66498000E+00 7.70545000E-01 1.95857000E-01 1.72256000E+02 2.59109000E+01 5.53335000E+00 3.66498000E+00 7.70545000E-01 1.95857000E-01 5.44717800E+00 8.24547240E-01 1.83191580E-01 5.44717800E+00 8.24547240E-01 1.83191580E-01 5.44717800E+00 8.24547240E-01 1.83191580E-01 5.44717800E+00 8.24547240E-01 1.83191580E-01 5.44717800E+00 8.24547240E-01 1.83191580E-01 5.44717800E+00 8.24547240E-01 1.83191580E-01 Contraction coefficients R N= 54 6.17669074E-02 3.58794043E-01 7.00713084E-01 -3.95895162E-01 1.21583436E+00 1.00000000E+00 6.17669074E-02 3.58794043E-01 7.00713084E-01 -3.95895162E-01 1.21583436E+00 1.00000000E+00 6.17669074E-02 3.58794043E-01 7.00713084E-01 -3.95895162E-01 1.21583436E+00 1.00000000E+00 6.17669074E-02 3.58794043E-01 7.00713084E-01 -3.95895162E-01 1.21583436E+00 1.00000000E+00 6.17669074E-02 3.58794043E-01 7.00713084E-01 -3.95895162E-01 1.21583436E+00 1.00000000E+00 6.17669074E-02 3.58794043E-01 7.00713084E-01 -3.95895162E-01 1.21583436E+00 1.00000000E+00 1.56284979E-01 9.04690877E-01 1.00000000E+00 1.56284979E-01 9.04690877E-01 1.00000000E+00 1.56284979E-01 9.04690877E-01 1.00000000E+00 1.56284979E-01 9.04690877E-01 1.00000000E+00 1.56284979E-01 9.04690877E-01 1.00000000E+00 1.56284979E-01 9.04690877E-01 1.00000000E+00 P(S=P) Contraction coefficients R N= 54 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.36459947E-01 8.60618806E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.36459947E-01 8.60618806E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.36459947E-01 8.60618806E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.36459947E-01 8.60618806E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.36459947E-01 8.60618806E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.36459947E-01 8.60618806E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Coordinates of each shell R N= 90 -1.47911420E-31 1.32049760E+00 -2.28724320E+00 -1.47911420E-31 1.32049760E+00 -2.28724320E+00 -1.47911420E-31 1.32049760E+00 -2.28724320E+00 -1.15013900E-34 2.64067733E+00 -1.73472348E-18 -1.15013900E-34 2.64067733E+00 -1.73472348E-18 -1.15013900E-34 2.64067733E+00 -1.73472348E-18 -2.80106506E-16 1.32049760E+00 2.28724320E+00 -2.80106506E-16 1.32049760E+00 2.28724320E+00 -2.80106506E-16 1.32049760E+00 2.28724320E+00 -1.61714316E-16 -1.32049760E+00 2.28724320E+00 -1.61714316E-16 -1.32049760E+00 2.28724320E+00 -1.61714316E-16 -1.32049760E+00 2.28724320E+00 -3.23389704E-16 -2.64067733E+00 1.73472348E-18 -3.23389704E-16 -2.64067733E+00 1.73472348E-18 -3.23389704E-16 -2.64067733E+00 1.73472348E-18 -1.61714316E-16 -1.32049760E+00 -2.28724320E+00 -1.61714316E-16 -1.32049760E+00 -2.28724320E+00 -1.61714316E-16 -1.32049760E+00 -2.28724320E+00 -3.94430453E-31 2.34489980E+00 -4.06136910E+00 -3.94430453E-31 2.34489980E+00 -4.06136910E+00 -2.04242995E-34 4.68934489E+00 3.75188295E-50 -2.04242995E-34 4.68934489E+00 3.75188295E-50 -4.97374267E-16 2.34489980E+00 4.06136910E+00 -4.97374267E-16 2.34489980E+00 4.06136910E+00 -2.87167404E-16 -2.34489980E+00 4.06136910E+00 -2.87167404E-16 -2.34489980E+00 4.06136910E+00 -5.74279121E-16 -4.68934489E+00 1.05493363E-31 -5.74279121E-16 -4.68934489E+00 1.05493363E-31 -2.87167404E-16 -2.34489980E+00 -4.06136910E+00 -2.87167404E-16 -2.34489980E+00 -4.06136910E+00 Alpha Orbital Energies R N= 66 -1.01283837E+01 -1.01277397E+01 -1.01277336E+01 -1.01266035E+01 -1.01265974E+01 -1.01255499E+01 -8.55401589E-01 -7.46162064E-01 -7.46150517E-01 -6.04791107E-01 -6.04766505E-01 -5.28330623E-01 -4.60713711E-01 -4.52651808E-01 -4.26143192E-01 -4.26102623E-01 -3.66134805E-01 -3.46197425E-01 -3.46133483E-01 -2.51036572E-01 -2.51035873E-01 5.19481625E-03 5.22541047E-03 1.06544161E-01 1.64342224E-01 1.64345367E-01 1.65414243E-01 2.06515107E-01 2.06520831E-01 2.12571961E-01 3.24481793E-01 3.24483052E-01 3.37056652E-01 3.37115484E-01 5.76617429E-01 5.77394404E-01 6.67375687E-01 6.89290101E-01 6.95981996E-01 7.38847965E-01 7.38871372E-01 7.87330646E-01 7.87336803E-01 8.04599652E-01 8.04613098E-01 8.32412465E-01 8.32429793E-01 8.84127200E-01 9.06343778E-01 9.71275332E-01 1.01019572E+00 1.01020910E+00 1.10889767E+00 1.11527897E+00 1.11532503E+00 1.30075886E+00 1.30078228E+00 1.32888456E+00 1.45198244E+00 1.46559550E+00 1.46565499E+00 1.54638981E+00 1.54648683E+00 1.88993365E+00 1.89004613E+00 2.47399098E+00 Alpha MO coefficients R N= 4356 4.03758154E-01 4.96978713E-02 0.00000000E+00 -7.13255201E-04 1.22662134E-03 -9.33891496E-02 0.00000000E+00 2.09354782E-02 -3.61989444E-02 -4.01650676E-01 -4.94712784E-02 0.00000000E+00 1.41668304E-03 0.00000000E+00 9.32612455E-02 0.00000000E+00 -4.17991761E-02 0.00000000E+00 4.03758154E-01 4.96978713E-02 0.00000000E+00 -7.13255201E-04 -1.22662134E-03 -9.33891496E-02 0.00000000E+00 2.09354782E-02 3.61989444E-02 -4.03758154E-01 -4.96978713E-02 0.00000000E+00 -7.13255201E-04 1.22662134E-03 9.33891496E-02 0.00000000E+00 2.09354782E-02 -3.61989444E-02 4.01650676E-01 4.94712784E-02 0.00000000E+00 1.41668304E-03 0.00000000E+00 -9.32612455E-02 0.00000000E+00 -4.17991761E-02 0.00000000E+00 -4.03758154E-01 -4.96978713E-02 0.00000000E+00 -7.13255201E-04 -1.22662134E-03 9.33891496E-02 0.00000000E+00 2.09354782E-02 3.61989444E-02 -1.82964677E-03 -3.96807126E-03 1.82264341E-03 3.98704207E-03 -1.82964677E-03 -3.96807126E-03 1.82964677E-03 3.96807126E-03 -1.82264341E-03 -3.98704207E-03 1.82964677E-03 3.96807126E-03 4.93029316E-01 5.66895142E-02 0.00000000E+00 -1.02167626E-03 1.22760873E-03 -5.75057641E-02 0.00000000E+00 1.22808387E-02 -1.09446106E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.42996959E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.03388865E-02 -4.93029316E-01 -5.66895142E-02 0.00000000E+00 1.02167626E-03 1.22760873E-03 5.75057641E-02 0.00000000E+00 -1.22808387E-02 -1.09446106E-02 4.93029316E-01 5.66895142E-02 0.00000000E+00 1.02167626E-03 -1.22760873E-03 -5.75057641E-02 0.00000000E+00 -1.22808387E-02 1.09446106E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.42996959E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.03388865E-02 -4.93029316E-01 -5.66895142E-02 0.00000000E+00 -1.02167626E-03 -1.22760873E-03 5.75057641E-02 0.00000000E+00 1.22808387E-02 1.09446106E-02 -1.12264010E-03 2.38446046E-03 0.00000000E+00 0.00000000E+00 1.12264010E-03 -2.38446046E-03 -1.12264010E-03 2.38446046E-03 0.00000000E+00 0.00000000E+00 1.12264010E-03 -2.38446046E-03 -2.85486053E-01 -3.28149268E-02 0.00000000E+00 4.65034260E-05 -1.01979773E-03 3.32340188E-02 0.00000000E+00 3.24133441E-03 1.22812820E-02 5.68464067E-01 6.53756345E-02 0.00000000E+00 -1.82011825E-03 0.00000000E+00 -6.63731946E-02 0.00000000E+00 1.80414343E-02 0.00000000E+00 -2.85486053E-01 -3.28149268E-02 0.00000000E+00 4.65034260E-05 1.01979773E-03 3.32340188E-02 0.00000000E+00 3.24133441E-03 -1.22812820E-02 -2.85486053E-01 -3.28149268E-02 0.00000000E+00 -4.65034260E-05 1.01979773E-03 3.32340188E-02 0.00000000E+00 -3.24133441E-03 -1.22812820E-02 5.68464067E-01 6.53756345E-02 0.00000000E+00 1.82011825E-03 0.00000000E+00 -6.63731946E-02 0.00000000E+00 -1.80414343E-02 0.00000000E+00 -2.85486053E-01 -3.28149268E-02 0.00000000E+00 -4.65034260E-05 -1.01979773E-03 3.32340188E-02 0.00000000E+00 -3.24133441E-03 1.22812820E-02 6.51784247E-04 -1.38994587E-03 -1.29290637E-03 2.73820063E-03 6.51784247E-04 -1.38994587E-03 6.51784247E-04 -1.38994587E-03 -1.29290637E-03 2.73820063E-03 6.51784247E-04 -1.38994587E-03 4.92880961E-01 5.28996052E-02 0.00000000E+00 7.19055992E-04 1.01231811E-03 -3.08596415E-02 0.00000000E+00 -4.44496429E-03 -4.80410592E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.25858998E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.25049881E-02 -4.92880961E-01 -5.28996052E-02 0.00000000E+00 -7.19055992E-04 1.01231811E-03 3.08596415E-02 0.00000000E+00 4.44496429E-03 -4.80410592E-03 -4.92880961E-01 -5.28996052E-02 0.00000000E+00 7.19055992E-04 1.01231811E-03 3.08596415E-02 0.00000000E+00 -4.44496429E-03 -4.80410592E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.25858998E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.25049881E-02 4.92880961E-01 5.28996052E-02 0.00000000E+00 -7.19055992E-04 1.01231811E-03 -3.08596415E-02 0.00000000E+00 4.44496429E-03 -4.80410592E-03 -1.36652185E-03 5.53651201E-03 0.00000000E+00 0.00000000E+00 1.36652185E-03 -5.53651201E-03 1.36652185E-03 -5.53651201E-03 0.00000000E+00 0.00000000E+00 -1.36652185E-03 5.53651201E-03 2.83569349E-01 3.04195916E-02 0.00000000E+00 -1.84077716E-03 -7.22157827E-04 -1.75897162E-02 0.00000000E+00 9.88454898E-03 4.52825694E-03 5.70123111E-01 6.12056007E-02 0.00000000E+00 -6.01143777E-04 0.00000000E+00 -3.58536474E-02 0.00000000E+00 2.33788282E-03 0.00000000E+00 2.83569349E-01 3.04195916E-02 0.00000000E+00 -1.84077716E-03 7.22157827E-04 -1.75897162E-02 0.00000000E+00 9.88454898E-03 -4.52825694E-03 -2.83569349E-01 -3.04195916E-02 0.00000000E+00 -1.84077716E-03 -7.22157827E-04 1.75897162E-02 0.00000000E+00 9.88454898E-03 4.52825694E-03 -5.70123111E-01 -6.12056007E-02 0.00000000E+00 -6.01143777E-04 0.00000000E+00 3.58536474E-02 0.00000000E+00 2.33788282E-03 0.00000000E+00 -2.83569349E-01 -3.04195916E-02 0.00000000E+00 -1.84077716E-03 7.22157827E-04 1.75897162E-02 0.00000000E+00 9.88454898E-03 -4.52825694E-03 -7.84883516E-04 3.20415154E-03 -1.58234165E-03 6.38239290E-03 -7.84883516E-04 3.20415154E-03 7.84883516E-04 -3.20415154E-03 1.58234165E-03 -6.38239290E-03 7.84883516E-04 -3.20415154E-03 4.01721747E-01 4.03710998E-02 0.00000000E+00 7.45831030E-04 -1.29480057E-03 -1.57707588E-02 0.00000000E+00 -1.74927463E-03 3.06492410E-03 4.03495817E-01 4.05732150E-02 0.00000000E+00 1.48933919E-03 0.00000000E+00 -1.59687323E-02 0.00000000E+00 -3.48342427E-03 0.00000000E+00 4.01721747E-01 4.03710998E-02 0.00000000E+00 7.45831030E-04 1.29480057E-03 -1.57707588E-02 0.00000000E+00 -1.74927463E-03 -3.06492410E-03 4.01721747E-01 4.03710998E-02 0.00000000E+00 -7.45831030E-04 1.29480057E-03 -1.57707588E-02 0.00000000E+00 1.74927463E-03 -3.06492410E-03 4.03495817E-01 4.05732150E-02 0.00000000E+00 -1.48933919E-03 0.00000000E+00 -1.59687323E-02 0.00000000E+00 3.48342427E-03 0.00000000E+00 4.01721747E-01 4.03710998E-02 0.00000000E+00 -7.45831030E-04 -1.29480057E-03 -1.57707588E-02 0.00000000E+00 1.74927463E-03 3.06492410E-03 -1.51147159E-03 7.42156443E-03 -1.51455389E-03 7.43453502E-03 -1.51147159E-03 7.42156443E-03 -1.51147159E-03 7.42156443E-03 -1.51455389E-03 7.43453502E-03 -1.51147159E-03 7.42156443E-03 -9.81903766E-02 1.07534686E-01 0.00000000E+00 -3.05096333E-02 5.28510623E-02 1.82069899E-01 0.00000000E+00 -6.72920195E-03 1.16605404E-02 -9.81985753E-02 1.07547061E-01 0.00000000E+00 -6.10180142E-02 0.00000000E+00 1.82066329E-01 0.00000000E+00 -1.34397643E-02 0.00000000E+00 -9.81903766E-02 1.07534686E-01 0.00000000E+00 -3.05096333E-02 -5.28510623E-02 1.82069899E-01 0.00000000E+00 -6.72920195E-03 -1.16605404E-02 -9.81903766E-02 1.07534686E-01 0.00000000E+00 3.05096333E-02 -5.28510623E-02 1.82069899E-01 0.00000000E+00 6.72920195E-03 -1.16605404E-02 -9.81985753E-02 1.07547061E-01 0.00000000E+00 6.10180142E-02 0.00000000E+00 1.82066329E-01 0.00000000E+00 1.34397643E-02 0.00000000E+00 -9.81903766E-02 1.07534686E-01 0.00000000E+00 3.05096333E-02 5.28510623E-02 1.82069899E-01 0.00000000E+00 6.72920195E-03 1.16605404E-02 3.34280837E-02 -3.51257969E-03 3.34304343E-02 -3.52179890E-03 3.34280837E-02 -3.51257969E-03 3.34280837E-02 -3.51257969E-03 3.34304343E-02 -3.52179890E-03 3.34280837E-02 -3.51257969E-03 -1.19793875E-01 1.27758435E-01 0.00000000E+00 -5.56834081E-02 -6.76119399E-03 2.80044382E-01 0.00000000E+00 -7.02334123E-03 3.08442172E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.03257099E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -9.08840507E-03 1.19793875E-01 -1.27758435E-01 0.00000000E+00 5.56834081E-02 -6.76119399E-03 -2.80044382E-01 0.00000000E+00 7.02334123E-03 3.08442172E-03 1.19793875E-01 -1.27758435E-01 0.00000000E+00 -5.56834081E-02 -6.76119399E-03 -2.80044382E-01 0.00000000E+00 -7.02334123E-03 3.08442172E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.03257099E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -9.08840507E-03 -1.19793875E-01 1.27758435E-01 0.00000000E+00 5.56834081E-02 -6.76119399E-03 2.80044382E-01 0.00000000E+00 7.02334123E-03 3.08442172E-03 6.28821822E-02 1.19718427E-02 0.00000000E+00 0.00000000E+00 -6.28821822E-02 -1.19718427E-02 -6.28821822E-02 -1.19718427E-02 0.00000000E+00 0.00000000E+00 6.28821822E-02 1.19718427E-02 -6.91646554E-02 7.37621264E-02 0.00000000E+00 7.10796646E-02 5.56953656E-02 1.61701187E-01 0.00000000E+00 5.03273862E-03 7.03664950E-03 -1.38327659E-01 1.47526134E-01 0.00000000E+00 -2.53608116E-02 0.00000000E+00 3.23347622E-01 0.00000000E+00 -7.10628595E-03 0.00000000E+00 -6.91646554E-02 7.37621264E-02 0.00000000E+00 7.10796646E-02 -5.56953656E-02 1.61701187E-01 0.00000000E+00 5.03273862E-03 -7.03664950E-03 6.91646554E-02 -7.37621264E-02 0.00000000E+00 7.10796646E-02 5.56953656E-02 -1.61701187E-01 0.00000000E+00 5.03273862E-03 7.03664950E-03 1.38327659E-01 -1.47526134E-01 0.00000000E+00 -2.53608116E-02 0.00000000E+00 -3.23347622E-01 0.00000000E+00 -7.10628595E-03 0.00000000E+00 6.91646554E-02 -7.37621264E-02 0.00000000E+00 7.10796646E-02 -5.56953656E-02 -1.61701187E-01 0.00000000E+00 5.03273862E-03 -7.03664950E-03 3.63089489E-02 6.91602860E-03 7.26160934E-02 1.38195757E-02 3.63089489E-02 6.91602860E-03 -3.63089489E-02 -6.91602860E-03 -7.26160934E-02 -1.38195757E-02 -3.63089489E-02 -6.91602860E-03 -9.42878757E-02 9.81505443E-02 0.00000000E+00 1.04652162E-01 4.21502116E-03 2.93333470E-01 0.00000000E+00 3.26574578E-02 1.00748864E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.85479154E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -6.66567172E-02 9.42878757E-02 -9.81505443E-02 0.00000000E+00 -1.04652162E-01 4.21502116E-03 -2.93333470E-01 0.00000000E+00 -3.26574578E-02 1.00748864E-02 -9.42878757E-02 9.81505443E-02 0.00000000E+00 -1.04652162E-01 -4.21502116E-03 2.93333470E-01 0.00000000E+00 -3.26574578E-02 -1.00748864E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.85479154E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.66567172E-02 9.42878757E-02 -9.81505443E-02 0.00000000E+00 1.04652162E-01 -4.21502116E-03 -2.93333470E-01 0.00000000E+00 3.26574578E-02 -1.00748864E-02 9.13986725E-02 4.55953828E-02 0.00000000E+00 0.00000000E+00 -9.13986725E-02 -4.55953828E-02 9.13986725E-02 4.55953828E-02 0.00000000E+00 0.00000000E+00 -9.13986725E-02 -4.55953828E-02 5.44394025E-02 -5.66675992E-02 0.00000000E+00 1.25033965E-01 1.04672810E-01 -1.69366809E-01 0.00000000E+00 4.77942431E-02 3.26734045E-02 -1.08865745E-01 1.13324306E-01 0.00000000E+00 5.62228110E-02 0.00000000E+00 3.38699495E-01 0.00000000E+00 8.79515230E-03 0.00000000E+00 5.44394025E-02 -5.66675992E-02 0.00000000E+00 1.25033965E-01 -1.04672810E-01 -1.69366809E-01 0.00000000E+00 4.77942431E-02 -3.26734045E-02 5.44394025E-02 -5.66675992E-02 0.00000000E+00 -1.25033965E-01 -1.04672810E-01 -1.69366809E-01 0.00000000E+00 -4.77942431E-02 -3.26734045E-02 -1.08865745E-01 1.13324306E-01 0.00000000E+00 -5.62228110E-02 0.00000000E+00 3.38699495E-01 0.00000000E+00 -8.79515230E-03 0.00000000E+00 5.44394025E-02 -5.66675992E-02 0.00000000E+00 -1.25033965E-01 1.04672810E-01 -1.69366809E-01 0.00000000E+00 -4.77942431E-02 3.26734045E-02 -5.27818138E-02 -2.63363022E-02 1.05533682E-01 5.26465877E-02 -5.27818138E-02 -2.63363022E-02 -5.27818138E-02 -2.63363022E-02 1.05533682E-01 5.26465877E-02 -5.27818138E-02 -2.63363022E-02 -1.25378349E-02 9.39707275E-03 0.00000000E+00 8.65313013E-02 -1.49804987E-01 5.89093199E-02 0.00000000E+00 5.34928833E-02 -9.26162345E-02 -1.25400503E-02 9.39975515E-03 0.00000000E+00 1.73003138E-01 0.00000000E+00 5.89188855E-02 0.00000000E+00 1.06960597E-01 0.00000000E+00 -1.25378349E-02 9.39707275E-03 0.00000000E+00 8.65313013E-02 1.49804987E-01 5.89093199E-02 0.00000000E+00 5.34928833E-02 9.26162345E-02 -1.25378349E-02 9.39707275E-03 0.00000000E+00 -8.65313013E-02 1.49804987E-01 5.89093199E-02 0.00000000E+00 -5.34928833E-02 9.26162345E-02 -1.25400503E-02 9.39975515E-03 0.00000000E+00 -1.73003138E-01 0.00000000E+00 5.89188855E-02 0.00000000E+00 -1.06960597E-01 0.00000000E+00 -1.25378349E-02 9.39707275E-03 0.00000000E+00 -8.65313013E-02 -1.49804987E-01 5.89093199E-02 0.00000000E+00 -5.34928833E-02 -9.26162345E-02 1.01211844E-01 6.31832710E-02 1.01213204E-01 6.31817858E-02 1.01211844E-01 6.31832710E-02 1.01211844E-01 6.31832710E-02 1.01213204E-01 6.31817858E-02 1.01211844E-01 6.31832710E-02 6.34935624E-02 -6.29259833E-02 0.00000000E+00 -5.66535084E-02 9.82019213E-02 -2.68192236E-01 0.00000000E+00 -2.47588885E-02 4.29030317E-02 -6.35098888E-02 6.29474410E-02 0.00000000E+00 1.13123735E-01 0.00000000E+00 2.68241441E-01 0.00000000E+00 4.93933565E-02 0.00000000E+00 6.34935624E-02 -6.29259833E-02 0.00000000E+00 -5.66535084E-02 -9.82019213E-02 -2.68192236E-01 0.00000000E+00 -2.47588885E-02 -4.29030317E-02 -6.34935624E-02 6.29259833E-02 0.00000000E+00 -5.66535084E-02 9.82019213E-02 2.68192236E-01 0.00000000E+00 -2.47588885E-02 4.29030317E-02 6.35098888E-02 -6.29474410E-02 0.00000000E+00 1.13123735E-01 0.00000000E+00 -2.68241441E-01 0.00000000E+00 4.93933565E-02 0.00000000E+00 -6.34935624E-02 6.29259833E-02 0.00000000E+00 -5.66535084E-02 -9.82019213E-02 2.68192236E-01 0.00000000E+00 -2.47588885E-02 -4.29030317E-02 -1.32718416E-01 -9.86825737E-02 1.32569655E-01 9.85502852E-02 -1.32718416E-01 -9.86825737E-02 1.32718416E-01 9.86825737E-02 -1.32569655E-01 -9.85502852E-02 1.32718416E-01 9.86825737E-02 6.09717885E-06 -1.00852759E-05 0.00000000E+00 -2.14830972E-01 -1.24215894E-01 -6.84537991E-06 0.00000000E+00 -1.19392749E-01 -6.90480162E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.48215882E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.37925613E-01 -6.09717885E-06 1.00852759E-05 0.00000000E+00 2.14830972E-01 -1.24215894E-01 6.84537991E-06 0.00000000E+00 1.19392749E-01 -6.90480162E-02 -6.09717885E-06 1.00852759E-05 0.00000000E+00 -2.14830972E-01 -1.24215894E-01 6.84537991E-06 0.00000000E+00 -1.19392749E-01 -6.90480162E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.48215882E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.37925613E-01 6.09717885E-06 -1.00852759E-05 0.00000000E+00 2.14830972E-01 -1.24215894E-01 -6.84537991E-06 0.00000000E+00 1.19392749E-01 -6.90480162E-02 8.60751084E-05 7.23413075E-05 0.00000000E+00 0.00000000E+00 -8.60751084E-05 -7.23413075E-05 -8.60751084E-05 -7.23413075E-05 0.00000000E+00 0.00000000E+00 8.60751084E-05 7.23413075E-05 -2.01675943E-02 2.43366498E-02 0.00000000E+00 -1.48280657E-01 1.82654094E-01 7.18443843E-02 0.00000000E+00 -7.76864336E-02 1.34947514E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.36848903E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.92222992E-04 2.01675943E-02 -2.43366498E-02 0.00000000E+00 1.48280657E-01 1.82654094E-01 -7.18443843E-02 0.00000000E+00 7.76864336E-02 1.34947514E-01 2.01675943E-02 -2.43366498E-02 0.00000000E+00 -1.48280657E-01 1.82654094E-01 -7.18443843E-02 0.00000000E+00 -7.76864336E-02 1.34947514E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.36848903E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.92222992E-04 -2.01675943E-02 2.43366498E-02 0.00000000E+00 1.48280657E-01 1.82654094E-01 7.18443843E-02 0.00000000E+00 7.76864336E-02 1.34947514E-01 -1.33983797E-01 -1.21845557E-01 0.00000000E+00 0.00000000E+00 1.33983797E-01 1.21845557E-01 1.33983797E-01 1.21845557E-01 0.00000000E+00 0.00000000E+00 -1.33983797E-01 -1.21845557E-01 1.16913454E-02 -1.40984860E-02 0.00000000E+00 1.16594967E-02 -1.48077730E-01 -4.16941475E-02 0.00000000E+00 4.53874204E-02 -7.75746609E-02 2.32709449E-02 -2.80902666E-02 0.00000000E+00 2.68344403E-01 0.00000000E+00 -8.28498597E-02 0.00000000E+00 1.79825217E-01 0.00000000E+00 1.16913454E-02 -1.40984860E-02 0.00000000E+00 1.16594967E-02 1.48077730E-01 -4.16941475E-02 0.00000000E+00 4.53874204E-02 7.75746609E-02 -1.16913454E-02 1.40984860E-02 0.00000000E+00 1.16594967E-02 -1.48077730E-01 4.16941475E-02 0.00000000E+00 4.53874204E-02 -7.75746609E-02 -2.32709449E-02 2.80902666E-02 0.00000000E+00 2.68344403E-01 0.00000000E+00 8.28498597E-02 0.00000000E+00 1.79825217E-01 0.00000000E+00 -1.16913454E-02 1.40984860E-02 0.00000000E+00 1.16594967E-02 1.48077730E-01 4.16941475E-02 0.00000000E+00 4.53874204E-02 7.75746609E-02 7.72670078E-02 7.02851622E-02 1.54794651E-01 1.40789158E-01 7.72670078E-02 7.02851622E-02 -7.72670078E-02 -7.02851622E-02 -1.54794651E-01 -1.40789158E-01 -7.72670078E-02 -7.02851622E-02 0.00000000E+00 0.00000000E+00 1.92386357E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67956330E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.92395012E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67976285E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.92386357E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67956330E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.92386357E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67956330E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.92395012E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67976285E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.92386357E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67956330E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.11969276E-03 -6.14758571E-03 0.00000000E+00 -1.71522691E-02 -2.06644405E-01 -6.42440238E-03 0.00000000E+00 8.91034826E-03 -1.62038599E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.36373843E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.46665721E-01 -3.11969276E-03 6.14758571E-03 0.00000000E+00 1.71522691E-02 -2.06644405E-01 6.42440238E-03 0.00000000E+00 -8.91034826E-03 -1.62038599E-01 3.11969276E-03 -6.14758571E-03 0.00000000E+00 1.71522691E-02 2.06644405E-01 -6.42440238E-03 0.00000000E+00 -8.91034826E-03 1.62038599E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.36373843E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.46665721E-01 -3.11969276E-03 6.14758571E-03 0.00000000E+00 -1.71522691E-02 2.06644405E-01 6.42440238E-03 0.00000000E+00 8.91034826E-03 1.62038599E-01 1.38718885E-01 1.39368175E-01 0.00000000E+00 0.00000000E+00 -1.38718885E-01 -1.39368175E-01 1.38718885E-01 1.39368175E-01 0.00000000E+00 0.00000000E+00 -1.38718885E-01 -1.39368175E-01 1.80417308E-03 -3.54997863E-03 0.00000000E+00 2.26465215E-01 1.71909949E-02 -3.72304153E-03 0.00000000E+00 1.51807161E-01 -8.86604575E-03 -3.60797749E-03 7.10515488E-03 0.00000000E+00 -1.96726891E-01 0.00000000E+00 7.43656697E-03 0.00000000E+00 -1.67197101E-01 0.00000000E+00 1.80417308E-03 -3.54997863E-03 0.00000000E+00 2.26465215E-01 -1.71909949E-02 -3.72304153E-03 0.00000000E+00 1.51807161E-01 8.86604575E-03 1.80417308E-03 -3.54997863E-03 0.00000000E+00 -2.26465215E-01 -1.71909949E-02 -3.72304153E-03 0.00000000E+00 -1.51807161E-01 8.86604575E-03 -3.60797749E-03 7.10515488E-03 0.00000000E+00 1.96726891E-01 0.00000000E+00 7.43656697E-03 0.00000000E+00 1.67197101E-01 0.00000000E+00 1.80417308E-03 -3.54997863E-03 0.00000000E+00 -2.26465215E-01 1.71909949E-02 -3.72304153E-03 0.00000000E+00 -1.51807161E-01 -8.86604575E-03 8.00913784E-02 8.04781037E-02 -1.60182980E-01 -1.60956797E-01 8.00913784E-02 8.04781037E-02 8.00913784E-02 8.04781037E-02 -1.60182980E-01 -1.60956797E-01 8.00913784E-02 8.04781037E-02 0.00000000E+00 0.00000000E+00 1.46159253E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.52662273E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.92306743E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.05314892E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.46159253E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.52662273E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.46159253E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.52662273E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.92306743E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.05314892E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.46159253E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.52662273E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.53146655E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.64411317E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.53146655E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.64411317E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.53146655E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.64411317E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.53146655E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.64411317E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.72111710E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.66121361E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.72111710E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.66121361E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.72111710E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.66121361E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.72111710E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.66121361E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.57115569E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.69142436E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.14202515E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.38254841E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.57115569E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.69142436E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.57115569E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.69142436E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.14202515E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.38254841E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.57115569E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.69142436E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.49741594E-02 -2.97769593E-02 0.00000000E+00 -5.28765772E-02 9.15087720E-02 -5.10161731E-01 0.00000000E+00 -1.50561724E-01 2.60641450E-01 4.49460583E-02 -2.97534493E-02 0.00000000E+00 -1.05728892E-01 0.00000000E+00 -5.09891682E-01 0.00000000E+00 -3.01053965E-01 0.00000000E+00 4.49741594E-02 -2.97769593E-02 0.00000000E+00 -5.28765772E-02 -9.15087720E-02 -5.10161731E-01 0.00000000E+00 -1.50561724E-01 -2.60641450E-01 4.49741594E-02 -2.97769593E-02 0.00000000E+00 5.28765772E-02 -9.15087720E-02 -5.10161731E-01 0.00000000E+00 1.50561724E-01 -2.60641450E-01 4.49460583E-02 -2.97534493E-02 0.00000000E+00 1.05728892E-01 0.00000000E+00 -5.09891682E-01 0.00000000E+00 3.01053965E-01 0.00000000E+00 4.49741594E-02 -2.97769593E-02 0.00000000E+00 5.28765772E-02 9.15087720E-02 -5.10161731E-01 0.00000000E+00 1.50561724E-01 2.60641450E-01 6.06150966E-02 7.01899082E-01 6.06217769E-02 7.01865741E-01 6.06150966E-02 7.01899082E-01 6.06150966E-02 7.01899082E-01 6.06217769E-02 7.01865741E-01 6.06150966E-02 7.01899082E-01 3.65717761E-02 -1.15136795E-02 0.00000000E+00 -8.17604165E-02 1.75408681E-01 -6.39539481E-01 0.00000000E+00 -2.78206895E-01 4.49503149E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.38160035E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.22888709E-02 -3.65717761E-02 1.15136795E-02 0.00000000E+00 8.17604165E-02 1.75408681E-01 6.39539481E-01 0.00000000E+00 2.78206895E-01 4.49503149E-01 -3.65717761E-02 1.15136795E-02 0.00000000E+00 -8.17604165E-02 1.75408681E-01 6.39539481E-01 0.00000000E+00 -2.78206895E-01 4.49503149E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.38160035E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.22888709E-02 3.65717761E-02 -1.15136795E-02 0.00000000E+00 8.17604165E-02 1.75408681E-01 -6.39539481E-01 0.00000000E+00 2.78206895E-01 4.49503149E-01 4.46623390E-02 9.71011860E-01 0.00000000E+00 0.00000000E+00 -4.46623390E-02 -9.71011860E-01 -4.46623390E-02 -9.71011860E-01 0.00000000E+00 0.00000000E+00 4.46623390E-02 9.71011860E-01 2.11367035E-02 -6.67798782E-03 0.00000000E+00 -8.10480780E-02 8.17476282E-02 -3.69291923E-01 0.00000000E+00 -1.28469628E-01 2.78389846E-01 4.21901884E-02 -1.32554934E-02 0.00000000E+00 -2.22625546E-01 0.00000000E+00 -7.38260848E-01 0.00000000E+00 -6.09928015E-01 0.00000000E+00 2.11367035E-02 -6.67798782E-03 0.00000000E+00 -8.10480780E-02 -8.17476282E-02 -3.69291923E-01 0.00000000E+00 -1.28469628E-01 -2.78389846E-01 -2.11367035E-02 6.67798782E-03 0.00000000E+00 -8.10480780E-02 8.17476282E-02 3.69291923E-01 0.00000000E+00 -1.28469628E-01 2.78389846E-01 -4.21901884E-02 1.32554934E-02 0.00000000E+00 -2.22625546E-01 0.00000000E+00 7.38260848E-01 0.00000000E+00 -6.09928015E-01 0.00000000E+00 -2.11367035E-02 6.67798782E-03 0.00000000E+00 -8.10480780E-02 -8.17476282E-02 3.69291923E-01 0.00000000E+00 -1.28469628E-01 -2.78389846E-01 2.57982839E-02 5.60905302E-01 5.15499693E-02 1.12090661E+00 2.57982839E-02 5.60905302E-01 -2.57982839E-02 -5.60905302E-01 -5.15499693E-02 -1.12090661E+00 -2.57982839E-02 -5.60905302E-01 0.00000000E+00 0.00000000E+00 -2.51817813E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.39194385E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.51827136E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.39209796E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.51817813E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.39194385E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.51817813E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.39194385E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.51827136E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.39209796E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.51817813E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.39194385E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -9.31521827E-02 4.83034324E-02 0.00000000E+00 7.71624841E-03 -1.00429605E-01 1.31134193E+00 0.00000000E+00 3.28205331E-03 -4.15548866E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.70117832E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.09545165E-01 9.31521827E-02 -4.83034324E-02 0.00000000E+00 -7.71624841E-03 -1.00429605E-01 -1.31134193E+00 0.00000000E+00 -3.28205331E-03 -4.15548866E-01 -9.31521827E-02 4.83034324E-02 0.00000000E+00 -7.71624841E-03 1.00429605E-01 1.31134193E+00 0.00000000E+00 -3.28205331E-03 4.15548866E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -8.70117832E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.09545165E-01 9.31521827E-02 -4.83034324E-02 0.00000000E+00 7.71624841E-03 1.00429605E-01 -1.31134193E+00 0.00000000E+00 3.28205331E-03 4.15548866E-01 -1.64212703E-02 -9.48042374E-01 0.00000000E+00 0.00000000E+00 1.64212703E-02 9.48042374E-01 -1.64212703E-02 -9.48042374E-01 0.00000000E+00 0.00000000E+00 1.64212703E-02 9.48042374E-01 5.37877246E-02 -2.78930839E-02 0.00000000E+00 -9.14701754E-02 7.68855195E-03 -7.57219531E-01 0.00000000E+00 -4.11649480E-01 3.17166082E-03 -1.07583864E-01 5.57845310E-02 0.00000000E+00 1.04847968E-01 0.00000000E+00 1.51452882E+00 0.00000000E+00 4.17318431E-01 0.00000000E+00 5.37877246E-02 -2.78930839E-02 0.00000000E+00 -9.14701754E-02 -7.68855195E-03 -7.57219531E-01 0.00000000E+00 -4.11649480E-01 -3.17166082E-03 5.37877246E-02 -2.78930839E-02 0.00000000E+00 9.14701754E-02 -7.68855195E-03 -7.57219531E-01 0.00000000E+00 4.11649480E-01 -3.17166082E-03 -1.07583864E-01 5.57845310E-02 0.00000000E+00 -1.04847968E-01 0.00000000E+00 1.51452882E+00 0.00000000E+00 -4.17318431E-01 0.00000000E+00 5.37877246E-02 -2.78930839E-02 0.00000000E+00 9.14701754E-02 7.68855195E-03 -7.57219531E-01 0.00000000E+00 4.11649480E-01 3.17166082E-03 9.47658684E-03 5.47238587E-01 -1.89506895E-02 -1.09459565E+00 9.47658684E-03 5.47238587E-01 9.47658684E-03 5.47238587E-01 -1.89506895E-02 -1.09459565E+00 9.47658684E-03 5.47238587E-01 -7.06212318E-02 7.33460058E-02 0.00000000E+00 3.10011611E-02 -5.37121966E-02 4.25807642E-01 0.00000000E+00 3.80888833E-01 -6.59443899E-01 7.06445467E-02 -7.33460667E-02 0.00000000E+00 -6.21517751E-02 0.00000000E+00 -4.26222790E-01 0.00000000E+00 -7.61805837E-01 0.00000000E+00 -7.06212318E-02 7.33460058E-02 0.00000000E+00 3.10011611E-02 5.37121966E-02 4.25807642E-01 0.00000000E+00 3.80888833E-01 6.59443899E-01 7.06212318E-02 -7.33460058E-02 0.00000000E+00 3.10011611E-02 -5.37121966E-02 -4.25807642E-01 0.00000000E+00 3.80888833E-01 -6.59443899E-01 -7.06445467E-02 7.33460667E-02 0.00000000E+00 -6.21517751E-02 0.00000000E+00 4.26222790E-01 0.00000000E+00 -7.61805837E-01 0.00000000E+00 7.06212318E-02 -7.33460058E-02 0.00000000E+00 3.10011611E-02 5.37121966E-02 -4.25807642E-01 0.00000000E+00 3.80888833E-01 6.59443899E-01 -4.51334595E-02 -9.75849840E-01 4.51390466E-02 9.76352906E-01 -4.51334595E-02 -9.75849840E-01 4.51334595E-02 9.75849840E-01 -4.51390466E-02 -9.76352906E-01 4.51334595E-02 9.75849840E-01 -7.67161866E-02 2.33381819E-02 0.00000000E+00 -1.22968435E-01 1.79930497E-01 1.40989622E+00 0.00000000E+00 -9.33211892E-01 8.70685035E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.28314221E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.44511215E-01 7.67161866E-02 -2.33381819E-02 0.00000000E+00 1.22968435E-01 1.79930497E-01 -1.40989622E+00 0.00000000E+00 9.33211892E-01 8.70685035E-01 -7.67161866E-02 2.33381819E-02 0.00000000E+00 1.22968435E-01 -1.79930497E-01 1.40989622E+00 0.00000000E+00 9.33211892E-01 -8.70685035E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.28314221E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.44511215E-01 7.67161866E-02 -2.33381819E-02 0.00000000E+00 -1.22968435E-01 -1.79930497E-01 -1.40989622E+00 0.00000000E+00 -9.33211892E-01 -8.70685035E-01 1.03556209E-02 7.27688440E-01 0.00000000E+00 0.00000000E+00 -1.03556209E-02 -7.27688440E-01 1.03556209E-02 7.27688440E-01 0.00000000E+00 0.00000000E+00 -1.03556209E-02 -7.27688440E-01 4.42852462E-02 -1.34917943E-02 0.00000000E+00 3.81119667E-02 -1.22960436E-01 -8.13559430E-01 0.00000000E+00 -2.05917558E-01 -9.32875379E-01 -8.85654724E-02 2.69411576E-02 0.00000000E+00 -2.50936469E-01 0.00000000E+00 1.62763228E+00 0.00000000E+00 -1.40931673E+00 0.00000000E+00 4.42852462E-02 -1.34917943E-02 0.00000000E+00 3.81119667E-02 1.22960436E-01 -8.13559430E-01 0.00000000E+00 -2.05917558E-01 9.32875379E-01 4.42852462E-02 -1.34917943E-02 0.00000000E+00 -3.81119667E-02 1.22960436E-01 -8.13559430E-01 0.00000000E+00 2.05917558E-01 9.32875379E-01 -8.85654724E-02 2.69411576E-02 0.00000000E+00 2.50936469E-01 0.00000000E+00 1.62763228E+00 0.00000000E+00 1.40931673E+00 0.00000000E+00 4.42852462E-02 -1.34917943E-02 0.00000000E+00 -3.81119667E-02 -1.22960436E-01 -8.13559430E-01 0.00000000E+00 2.05917558E-01 -9.32875379E-01 -5.95213293E-03 -4.20455813E-01 1.19663304E-02 8.40313721E-01 -5.95213293E-03 -4.20455813E-01 -5.95213293E-03 -4.20455813E-01 1.19663304E-02 8.40313721E-01 -5.95213293E-03 -4.20455813E-01 -3.34474414E-02 3.91015663E-03 0.00000000E+00 -2.02874713E-01 -1.11986836E-01 8.32671965E-01 0.00000000E+00 -1.35935990E+00 -6.72913050E-01 -6.69174033E-02 7.83289243E-03 0.00000000E+00 -8.99872718E-03 0.00000000E+00 1.66583094E+00 0.00000000E+00 -1.94212982E-01 0.00000000E+00 -3.34474414E-02 3.91015663E-03 0.00000000E+00 -2.02874713E-01 1.11986836E-01 8.32671965E-01 0.00000000E+00 -1.35935990E+00 6.72913050E-01 3.34474414E-02 -3.91015663E-03 0.00000000E+00 -2.02874713E-01 -1.11986836E-01 -8.32671965E-01 0.00000000E+00 -1.35935990E+00 -6.72913050E-01 6.69174033E-02 -7.83289243E-03 0.00000000E+00 -8.99872718E-03 0.00000000E+00 -1.66583094E+00 0.00000000E+00 -1.94212982E-01 0.00000000E+00 3.34474414E-02 -3.91015663E-03 0.00000000E+00 -2.02874713E-01 1.11986836E-01 -8.32671965E-01 0.00000000E+00 -1.35935990E+00 6.72913050E-01 6.05720838E-02 -9.34709590E-02 1.21144705E-01 -1.86701215E-01 6.05720838E-02 -9.34709590E-02 -6.05720838E-02 9.34709590E-02 -1.21144705E-01 1.86701215E-01 -6.05720838E-02 9.34709590E-02 -5.79444448E-02 6.77347197E-03 0.00000000E+00 1.11894352E-01 7.35756591E-02 1.44291413E+00 0.00000000E+00 6.72860718E-01 5.82965078E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.67516610E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.74842155E+00 5.79444448E-02 -6.77347197E-03 0.00000000E+00 -1.11894352E-01 7.35756591E-02 -1.44291413E+00 0.00000000E+00 -6.72860718E-01 5.82965078E-01 5.79444448E-02 -6.77347197E-03 0.00000000E+00 1.11894352E-01 7.35756591E-02 -1.44291413E+00 0.00000000E+00 6.72860718E-01 5.82965078E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.67516610E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.74842155E+00 -5.79444448E-02 6.77347197E-03 0.00000000E+00 -1.11894352E-01 7.35756591E-02 1.44291413E+00 0.00000000E+00 -6.72860718E-01 5.82965078E-01 1.04950611E-01 -1.61713465E-01 0.00000000E+00 0.00000000E+00 -1.04950611E-01 1.61713465E-01 -1.04950611E-01 1.61713465E-01 0.00000000E+00 0.00000000E+00 1.04950611E-01 -1.61713465E-01 -1.16763922E-01 4.10772982E-02 0.00000000E+00 -1.01817036E-01 1.76271525E-01 2.45892777E+00 0.00000000E+00 -9.86441353E-01 1.70769257E+00 1.16747360E-01 -4.10761531E-02 0.00000000E+00 2.03546073E-01 0.00000000E+00 -2.45883982E+00 0.00000000E+00 1.97170171E+00 0.00000000E+00 -1.16763922E-01 4.10772982E-02 0.00000000E+00 -1.01817036E-01 -1.76271525E-01 2.45892777E+00 0.00000000E+00 -9.86441353E-01 -1.70769257E+00 1.16763922E-01 -4.10772982E-02 0.00000000E+00 -1.01817036E-01 1.76271525E-01 -2.45892777E+00 0.00000000E+00 -9.86441353E-01 1.70769257E+00 -1.16747360E-01 4.10761531E-02 0.00000000E+00 2.03546073E-01 0.00000000E+00 2.45883982E+00 0.00000000E+00 1.97170171E+00 0.00000000E+00 1.16763922E-01 -4.10772982E-02 0.00000000E+00 -1.01817036E-01 -1.76271525E-01 -2.45892777E+00 0.00000000E+00 -9.86441353E-01 -1.70769257E+00 -1.37447127E-01 8.28858052E-01 1.37375279E-01 -8.28474015E-01 -1.37447127E-01 8.28858052E-01 1.37447127E-01 -8.28858052E-01 -1.37375279E-01 8.28474015E-01 1.37447127E-01 -8.28858052E-01 -3.98421679E-05 4.72674030E-06 0.00000000E+00 2.38837637E-01 1.37969058E-01 1.22358184E-03 0.00000000E+00 2.13604111E+00 1.23410090E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.75888002E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.46773811E+00 3.98421679E-05 -4.72674030E-06 0.00000000E+00 -2.38837637E-01 1.37969058E-01 -1.22358184E-03 0.00000000E+00 -2.13604111E+00 1.23410090E+00 -3.98421679E-05 4.72674030E-06 0.00000000E+00 -2.38837637E-01 -1.37969058E-01 1.22358184E-03 0.00000000E+00 -2.13604111E+00 -1.23410090E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.75888002E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.46773811E+00 3.98421679E-05 -4.72674030E-06 0.00000000E+00 2.38837637E-01 -1.37969058E-01 -1.22358184E-03 0.00000000E+00 2.13604111E+00 -1.23410090E+00 -5.78042306E-06 1.83324910E-04 0.00000000E+00 0.00000000E+00 5.78042306E-06 -1.83324910E-04 -5.78042306E-06 1.83324910E-04 0.00000000E+00 0.00000000E+00 5.78042306E-06 -1.83324910E-04 -5.57677356E-06 3.19385878E-05 0.00000000E+00 3.39534419E-01 1.96018963E-01 1.82479923E-04 0.00000000E+00 -4.14139339E-01 -2.39004956E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.91994557E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.78550543E-01 5.57677356E-06 -3.19385878E-05 0.00000000E+00 -3.39534419E-01 1.96018963E-01 -1.82479923E-04 0.00000000E+00 4.14139339E-01 -2.39004956E-01 5.57677356E-06 -3.19385878E-05 0.00000000E+00 3.39534419E-01 1.96018963E-01 -1.82479923E-04 0.00000000E+00 -4.14139339E-01 -2.39004956E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.91994557E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.78550543E-01 -5.57677356E-06 3.19385878E-05 0.00000000E+00 -3.39534419E-01 1.96018963E-01 1.82479923E-04 0.00000000E+00 4.14139339E-01 -2.39004956E-01 7.97648137E-05 -1.76597049E-05 0.00000000E+00 0.00000000E+00 -7.97648137E-05 1.76597049E-05 -7.97648137E-05 1.76597049E-05 0.00000000E+00 0.00000000E+00 7.97648137E-05 -1.76597049E-05 8.61374016E-03 -5.01845842E-02 0.00000000E+00 1.37625105E-01 -2.39541660E-01 -1.11672058E-01 0.00000000E+00 -1.51757334E-01 2.64386837E-01 8.53411318E-03 -5.01864849E-02 0.00000000E+00 2.76016675E-01 0.00000000E+00 -1.12821943E-01 0.00000000E+00 -3.04291878E-01 0.00000000E+00 8.61374016E-03 -5.01845842E-02 0.00000000E+00 1.37625105E-01 2.39541660E-01 -1.11672058E-01 0.00000000E+00 -1.51757334E-01 -2.64386837E-01 8.61374016E-03 -5.01845842E-02 0.00000000E+00 -1.37625105E-01 2.39541660E-01 -1.11672058E-01 0.00000000E+00 1.51757334E-01 -2.64386837E-01 8.53411318E-03 -5.01864849E-02 0.00000000E+00 -2.76016675E-01 0.00000000E+00 -1.12821943E-01 0.00000000E+00 3.04291878E-01 0.00000000E+00 8.61374016E-03 -5.01845842E-02 0.00000000E+00 -1.37625105E-01 -2.39541660E-01 -1.11672058E-01 0.00000000E+00 1.51757334E-01 2.64386837E-01 3.28760262E-01 -8.45414447E-02 3.28315780E-01 -8.45281932E-02 3.28760262E-01 -8.45414447E-02 3.28760262E-01 -8.45414447E-02 3.28315780E-01 -8.45281932E-02 3.28760262E-01 -8.45414447E-02 0.00000000E+00 0.00000000E+00 4.34568526E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.80839805E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.34646437E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.80918720E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.34568526E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.80839805E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.34568526E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.80839805E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.34646437E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.80918720E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.34568526E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.80839805E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.18056399E-02 -2.80751564E-02 0.00000000E+00 3.17747952E-01 -3.13741898E-03 2.93058278E-01 0.00000000E+00 -3.28366224E-01 -1.67929990E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.46978020E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.85106442E-01 -5.18056399E-02 2.80751564E-02 0.00000000E+00 -3.17747952E-01 -3.13741898E-03 -2.93058278E-01 0.00000000E+00 3.28366224E-01 -1.67929990E-02 5.18056399E-02 -2.80751564E-02 0.00000000E+00 -3.17747952E-01 3.13741898E-03 2.93058278E-01 0.00000000E+00 3.28366224E-01 1.67929990E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.46978020E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.85106442E-01 -5.18056399E-02 2.80751564E-02 0.00000000E+00 3.17747952E-01 3.13741898E-03 -2.93058278E-01 0.00000000E+00 -3.28366224E-01 1.67929990E-02 2.47377611E-01 -8.46816454E-02 0.00000000E+00 0.00000000E+00 -2.47377611E-01 8.46816454E-02 2.47377611E-01 -8.46816454E-02 0.00000000E+00 0.00000000E+00 -2.47377611E-01 8.46816454E-02 2.98929405E-02 -1.61772487E-02 0.00000000E+00 -3.63804144E-01 -3.17438695E-01 1.69380265E-01 0.00000000E+00 3.95899934E-01 3.27992145E-01 -5.98312315E-02 3.24707245E-02 0.00000000E+00 -1.86909735E-01 0.00000000E+00 -3.38222755E-01 0.00000000E+00 1.73262288E-01 0.00000000E+00 2.98929405E-02 -1.61772487E-02 0.00000000E+00 -3.63804144E-01 3.17438695E-01 1.69380265E-01 0.00000000E+00 3.95899934E-01 -3.27992145E-01 2.98929405E-02 -1.61772487E-02 0.00000000E+00 3.63804144E-01 3.17438695E-01 1.69380265E-01 0.00000000E+00 -3.95899934E-01 -3.27992145E-01 -5.98312315E-02 3.24707245E-02 0.00000000E+00 1.86909735E-01 0.00000000E+00 -3.38222755E-01 0.00000000E+00 -1.73262288E-01 0.00000000E+00 2.98929405E-02 -1.61772487E-02 0.00000000E+00 3.63804144E-01 -3.17438695E-01 1.69380265E-01 0.00000000E+00 -3.95899934E-01 3.27992145E-01 1.42352330E-01 -4.87224816E-02 -2.86031438E-01 9.76951140E-02 1.42352330E-01 -4.87224816E-02 1.42352330E-01 -4.87224816E-02 -2.86031438E-01 9.76951140E-02 1.42352330E-01 -4.87224816E-02 0.00000000E+00 0.00000000E+00 3.12313476E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.68677107E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.24449518E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.36981330E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.12313476E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.68677107E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.12313476E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.68677107E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -6.24449518E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.36981330E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.12313476E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.68677107E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.40840671E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.65129468E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.40840671E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.65129468E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.40840671E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.65129468E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.40840671E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.65129468E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.03538284E-02 1.13641222E-01 0.00000000E+00 -2.49210516E-01 -1.17314731E-01 2.76987633E-01 0.00000000E+00 3.10308133E-01 2.23536674E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.48877874E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.60984548E-01 -3.03538284E-02 -1.13641222E-01 0.00000000E+00 2.49210516E-01 -1.17314731E-01 -2.76987633E-01 0.00000000E+00 -3.10308133E-01 2.23536674E-01 -3.03538284E-02 -1.13641222E-01 0.00000000E+00 -2.49210516E-01 -1.17314731E-01 -2.76987633E-01 0.00000000E+00 3.10308133E-01 2.23536674E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.48877874E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.60984548E-01 3.03538284E-02 1.13641222E-01 0.00000000E+00 2.49210516E-01 -1.17314731E-01 2.76987633E-01 0.00000000E+00 -3.10308133E-01 2.23536674E-01 3.76200613E-01 -1.89999588E-01 0.00000000E+00 0.00000000E+00 -3.76200613E-01 1.89999588E-01 -3.76200613E-01 1.89999588E-01 0.00000000E+00 0.00000000E+00 3.76200613E-01 -1.89999588E-01 -1.75130864E-02 -6.56206507E-02 0.00000000E+00 -4.04973824E-01 -2.49257373E-01 -1.60124619E-01 0.00000000E+00 5.82034462E-01 3.10474092E-01 -3.50534222E-02 -1.31195406E-01 0.00000000E+00 2.65844343E-02 0.00000000E+00 -3.19967492E-01 0.00000000E+00 4.42674380E-02 0.00000000E+00 -1.75130864E-02 -6.56206507E-02 0.00000000E+00 -4.04973824E-01 2.49257373E-01 -1.60124619E-01 0.00000000E+00 5.82034462E-01 -3.10474092E-01 1.75130864E-02 6.56206507E-02 0.00000000E+00 -4.04973824E-01 -2.49257373E-01 1.60124619E-01 0.00000000E+00 5.82034462E-01 3.10474092E-01 3.50534222E-02 1.31195406E-01 0.00000000E+00 2.65844343E-02 0.00000000E+00 3.19967492E-01 0.00000000E+00 4.42674380E-02 0.00000000E+00 1.75130864E-02 6.56206507E-02 0.00000000E+00 -4.04973824E-01 2.49257373E-01 1.60124619E-01 0.00000000E+00 5.82034462E-01 -3.10474092E-01 -2.17213273E-01 1.09734920E-01 -4.34366445E-01 2.19325985E-01 -2.17213273E-01 1.09734920E-01 2.17213273E-01 -1.09734920E-01 4.34366445E-01 -2.19325985E-01 2.17213273E-01 -1.09734920E-01 0.00000000E+00 0.00000000E+00 -5.42285990E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.68923608E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.42285990E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.68923608E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.42285990E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.68923608E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.42285990E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.68923608E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.13126279E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.44002482E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -6.26143411E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.87899772E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.13126279E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.44002482E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.13126279E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.44002482E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -6.26143411E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.87899772E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.13126279E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.44002482E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.76756004E-04 2.97671479E-01 0.00000000E+00 -1.41648032E-01 2.45264627E-01 -7.75870752E-02 0.00000000E+00 9.19136405E-02 -1.59278220E-01 -3.99883197E-04 2.97707595E-01 0.00000000E+00 -2.83187842E-01 0.00000000E+00 -7.73470581E-02 0.00000000E+00 1.83544536E-01 0.00000000E+00 -3.76756004E-04 2.97671479E-01 0.00000000E+00 -1.41648032E-01 -2.45264627E-01 -7.75870752E-02 0.00000000E+00 9.19136405E-02 1.59278220E-01 -3.76756004E-04 2.97671479E-01 0.00000000E+00 1.41648032E-01 -2.45264627E-01 -7.75870752E-02 0.00000000E+00 -9.19136405E-02 1.59278220E-01 -3.99883197E-04 2.97707595E-01 0.00000000E+00 2.83187842E-01 0.00000000E+00 -7.73470581E-02 0.00000000E+00 -1.83544536E-01 0.00000000E+00 -3.76756004E-04 2.97671479E-01 0.00000000E+00 1.41648032E-01 2.45264627E-01 -7.75870752E-02 0.00000000E+00 -9.19136405E-02 -1.59278220E-01 3.60660277E-01 -3.13269807E-01 3.60485584E-01 -3.12925361E-01 3.60660277E-01 -3.13269807E-01 3.60660277E-01 -3.13269807E-01 3.60485584E-01 -3.12925361E-01 3.60660277E-01 -3.13269807E-01 0.00000000E+00 0.00000000E+00 4.37331583E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -9.79001768E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.37465266E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.79130933E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.37331583E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -9.79001768E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.37331583E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.79001768E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.37465266E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -9.79130933E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.37331583E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.79001768E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.80030781E-02 -1.82201944E-02 0.00000000E+00 2.36076506E-01 -4.08667246E-01 1.51814876E+00 0.00000000E+00 -1.03400138E+00 1.79017060E+00 1.79917069E-02 1.82047703E-02 0.00000000E+00 -4.71735531E-01 0.00000000E+00 -1.51821414E+00 0.00000000E+00 2.06672299E+00 0.00000000E+00 -1.80030781E-02 -1.82201944E-02 0.00000000E+00 2.36076506E-01 4.08667246E-01 1.51814876E+00 0.00000000E+00 -1.03400138E+00 -1.79017060E+00 1.80030781E-02 1.82201944E-02 0.00000000E+00 2.36076506E-01 -4.08667246E-01 -1.51814876E+00 0.00000000E+00 -1.03400138E+00 1.79017060E+00 -1.79917069E-02 -1.82047703E-02 0.00000000E+00 -4.71735531E-01 0.00000000E+00 1.51821414E+00 0.00000000E+00 2.06672299E+00 0.00000000E+00 1.80030781E-02 1.82201944E-02 0.00000000E+00 2.36076506E-01 4.08667246E-01 -1.51814876E+00 0.00000000E+00 -1.03400138E+00 -1.79017060E+00 -2.16115871E-01 1.04020100E+00 2.16026177E-01 -1.03968240E+00 -2.16115871E-01 1.04020100E+00 2.16115871E-01 -1.04020100E+00 -2.16026177E-01 1.03968240E+00 2.16115871E-01 -1.04020100E+00 -1.46324766E-02 2.89267214E-02 0.00000000E+00 1.17480763E-01 -2.70863078E-01 2.12270121E-01 0.00000000E+00 -2.57181562E-01 7.82971618E-01 2.92406163E-02 -5.76626689E-02 0.00000000E+00 -5.86650257E-01 0.00000000E+00 -4.24936667E-01 0.00000000E+00 1.61298405E+00 0.00000000E+00 -1.46324766E-02 2.89267214E-02 0.00000000E+00 1.17480763E-01 2.70863078E-01 2.12270121E-01 0.00000000E+00 -2.57181562E-01 -7.82971618E-01 -1.46324766E-02 2.89267214E-02 0.00000000E+00 -1.17480763E-01 2.70863078E-01 2.12270121E-01 0.00000000E+00 2.57181562E-01 -7.82971618E-01 2.92406163E-02 -5.76626689E-02 0.00000000E+00 5.86650257E-01 0.00000000E+00 -4.24936667E-01 0.00000000E+00 -1.61298405E+00 0.00000000E+00 -1.46324766E-02 2.89267214E-02 0.00000000E+00 -1.17480763E-01 -2.70863078E-01 2.12270121E-01 0.00000000E+00 2.57181562E-01 7.82971618E-01 -2.34223708E-01 6.34502995E-01 4.68551939E-01 -1.26876838E+00 -2.34223708E-01 6.34502995E-01 -2.34223708E-01 6.34502995E-01 4.68551939E-01 -1.26876838E+00 -2.34223708E-01 6.34502995E-01 -2.53216904E-02 4.99925205E-02 0.00000000E+00 2.70970801E-01 -4.30207052E-01 3.67835869E-01 0.00000000E+00 -7.83212669E-01 1.16071766E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.89059009E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.94641209E-01 2.53216904E-02 -4.99925205E-02 0.00000000E+00 -2.70970801E-01 -4.30207052E-01 -3.67835869E-01 0.00000000E+00 7.83212669E-01 1.16071766E+00 -2.53216904E-02 4.99925205E-02 0.00000000E+00 -2.70970801E-01 4.30207052E-01 3.67835869E-01 0.00000000E+00 7.83212669E-01 -1.16071766E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.89059009E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.94641209E-01 2.53216904E-02 -4.99925205E-02 0.00000000E+00 2.70970801E-01 4.30207052E-01 -3.67835869E-01 0.00000000E+00 -7.83212669E-01 -1.16071766E+00 -4.05754460E-01 1.09878131E+00 0.00000000E+00 0.00000000E+00 4.05754460E-01 -1.09878131E+00 -4.05754460E-01 1.09878131E+00 0.00000000E+00 0.00000000E+00 4.05754460E-01 -1.09878131E+00 -8.95935993E-07 4.71698035E-05 0.00000000E+00 -4.29153527E-01 -2.47942712E-01 7.53788457E-04 0.00000000E+00 2.75421800E+00 1.59111148E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -4.95732765E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.18140652E+00 8.95935993E-07 -4.71698035E-05 0.00000000E+00 4.29153527E-01 -2.47942712E-01 -7.53788457E-04 0.00000000E+00 -2.75421800E+00 1.59111148E+00 -8.95935993E-07 4.71698035E-05 0.00000000E+00 4.29153527E-01 2.47942712E-01 7.53788457E-04 0.00000000E+00 -2.75421800E+00 -1.59111148E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.95732765E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.18140652E+00 8.95935993E-07 -4.71698035E-05 0.00000000E+00 -4.29153527E-01 2.47942712E-01 -7.53788457E-04 0.00000000E+00 2.75421800E+00 -1.59111148E+00 5.07727310E-05 2.45357895E-04 0.00000000E+00 0.00000000E+00 -5.07727310E-05 -2.45357895E-04 5.07727310E-05 2.45357895E-04 0.00000000E+00 0.00000000E+00 -5.07727310E-05 -2.45357895E-04 -1.32632247E-02 7.79399378E-02 0.00000000E+00 3.50054165E-01 -9.01265132E-02 9.55466266E-02 0.00000000E+00 -9.47949186E-01 -5.79535704E-02 -2.65343542E-02 1.55999426E-01 0.00000000E+00 5.06436839E-01 0.00000000E+00 1.90440983E-01 0.00000000E+00 -8.47656112E-01 0.00000000E+00 -1.32632247E-02 7.79399378E-02 0.00000000E+00 3.50054165E-01 9.01265132E-02 9.55466266E-02 0.00000000E+00 -9.47949186E-01 5.79535704E-02 1.32632247E-02 -7.79399378E-02 0.00000000E+00 3.50054165E-01 -9.01265132E-02 -9.55466266E-02 0.00000000E+00 -9.47949186E-01 -5.79535704E-02 2.65343542E-02 -1.55999426E-01 0.00000000E+00 5.06436839E-01 0.00000000E+00 -1.90440983E-01 0.00000000E+00 -8.47656112E-01 0.00000000E+00 1.32632247E-02 -7.79399378E-02 0.00000000E+00 3.50054165E-01 9.01265132E-02 -9.55466266E-02 0.00000000E+00 -9.47949186E-01 5.79535704E-02 -2.37219060E-01 5.04530410E-01 -4.74867448E-01 1.00967041E+00 -2.37219060E-01 5.04530410E-01 2.37219060E-01 -5.04530410E-01 4.74867448E-01 -1.00967041E+00 2.37219060E-01 -5.04530410E-01 -2.29722788E-02 1.35103483E-01 0.00000000E+00 9.02816667E-02 -4.54298941E-01 1.64913491E-01 0.00000000E+00 5.76997340E-02 8.81100270E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.98003428E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.81252426E-01 2.29722788E-02 -1.35103483E-01 0.00000000E+00 -9.02816667E-02 -4.54298941E-01 -1.64913491E-01 0.00000000E+00 -5.76997340E-02 8.81100270E-01 2.29722788E-02 -1.35103483E-01 0.00000000E+00 9.02816667E-02 -4.54298941E-01 -1.64913491E-01 0.00000000E+00 5.76997340E-02 8.81100270E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.98003428E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.81252426E-01 -2.29722788E-02 1.35103483E-01 0.00000000E+00 -9.02816667E-02 -4.54298941E-01 1.64913491E-01 0.00000000E+00 -5.76997340E-02 8.81100270E-01 -4.11093059E-01 8.74239458E-01 0.00000000E+00 0.00000000E+00 4.11093059E-01 -8.74239458E-01 4.11093059E-01 -8.74239458E-01 0.00000000E+00 0.00000000E+00 -4.11093059E-01 8.74239458E-01 -3.25278472E-03 -1.45588956E-01 0.00000000E+00 1.23160030E-01 3.32532330E-01 1.26114408E+00 0.00000000E+00 -1.41156388E+00 -1.46461145E+00 -6.53671029E-03 -2.90996580E-01 0.00000000E+00 -4.52815888E-01 0.00000000E+00 2.52351752E+00 0.00000000E+00 1.12407801E+00 0.00000000E+00 -3.25278472E-03 -1.45588956E-01 0.00000000E+00 1.23160030E-01 -3.32532330E-01 1.26114408E+00 0.00000000E+00 -1.41156388E+00 1.46461145E+00 3.25278472E-03 1.45588956E-01 0.00000000E+00 1.23160030E-01 3.32532330E-01 -1.26114408E+00 0.00000000E+00 -1.41156388E+00 -1.46461145E+00 6.53671029E-03 2.90996580E-01 0.00000000E+00 -4.52815888E-01 0.00000000E+00 -2.52351752E+00 0.00000000E+00 1.12407801E+00 0.00000000E+00 3.25278472E-03 1.45588956E-01 0.00000000E+00 1.23160030E-01 -3.32532330E-01 -1.26114408E+00 0.00000000E+00 -1.41156388E+00 1.46461145E+00 -2.26481530E-01 -3.17598917E-01 -4.52784177E-01 -6.34844359E-01 -2.26481530E-01 -3.17598917E-01 2.26481530E-01 3.17598917E-01 4.52784177E-01 6.34844359E-01 2.26481530E-01 3.17598917E-01 -5.67259317E-03 -2.51778051E-01 0.00000000E+00 -3.32525682E-01 2.60828140E-01 2.18535604E+00 0.00000000E+00 1.46425893E+00 -2.78591158E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.15280576E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.25787700E+00 5.67259317E-03 2.51778051E-01 0.00000000E+00 3.32525682E-01 2.60828140E-01 -2.18535604E+00 0.00000000E+00 -1.46425893E+00 -2.78591158E-01 5.67259317E-03 2.51778051E-01 0.00000000E+00 -3.32525682E-01 2.60828140E-01 -2.18535604E+00 0.00000000E+00 1.46425893E+00 -2.78591158E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.15280576E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.25787700E+00 -5.67259317E-03 -2.51778051E-01 0.00000000E+00 3.32525682E-01 2.60828140E-01 2.18535604E+00 0.00000000E+00 -1.46425893E+00 -2.78591158E-01 -3.92215875E-01 -5.49739968E-01 0.00000000E+00 0.00000000E+00 3.92215875E-01 5.49739968E-01 3.92215875E-01 5.49739968E-01 0.00000000E+00 0.00000000E+00 -3.92215875E-01 -5.49739968E-01 1.82777776E-02 -6.31153423E-01 0.00000000E+00 -1.03278783E-01 1.78650041E-01 7.89205536E-01 0.00000000E+00 1.65948284E-01 -2.87035408E-01 1.82781633E-02 -6.31196468E-01 0.00000000E+00 -2.06242445E-01 0.00000000E+00 7.89270872E-01 0.00000000E+00 3.30537729E-01 0.00000000E+00 1.82777776E-02 -6.31153423E-01 0.00000000E+00 -1.03278783E-01 -1.78650041E-01 7.89205536E-01 0.00000000E+00 1.65948284E-01 2.87035408E-01 1.82777776E-02 -6.31153423E-01 0.00000000E+00 1.03278783E-01 -1.78650041E-01 7.89205536E-01 0.00000000E+00 -1.65948284E-01 2.87035408E-01 1.82781633E-02 -6.31196468E-01 0.00000000E+00 2.06242445E-01 0.00000000E+00 7.89270872E-01 0.00000000E+00 -3.30537729E-01 0.00000000E+00 1.82777776E-02 -6.31153423E-01 0.00000000E+00 1.03278783E-01 1.78650041E-01 7.89205536E-01 0.00000000E+00 -1.65948284E-01 -2.87035408E-01 1.81174741E-01 -5.93432875E-01 1.81521763E-01 -5.93214672E-01 1.81174741E-01 -5.93432875E-01 1.81174741E-01 -5.93432875E-01 1.81521763E-01 -5.93214672E-01 1.81174741E-01 -5.93432875E-01 -2.08197235E-02 2.73367013E-01 0.00000000E+00 6.49778948E-02 -1.12584899E-01 1.43700317E+00 0.00000000E+00 -1.26979092E+00 2.19835861E+00 2.08130194E-02 -2.73396093E-01 0.00000000E+00 -1.30223173E-01 0.00000000E+00 -1.43665810E+00 0.00000000E+00 2.53890188E+00 0.00000000E+00 -2.08197235E-02 2.73367013E-01 0.00000000E+00 6.49778948E-02 1.12584899E-01 1.43700317E+00 0.00000000E+00 -1.26979092E+00 -2.19835861E+00 2.08197235E-02 -2.73367013E-01 0.00000000E+00 6.49778948E-02 -1.12584899E-01 -1.43700317E+00 0.00000000E+00 -1.26979092E+00 2.19835861E+00 -2.08130194E-02 2.73396093E-01 0.00000000E+00 -1.30223173E-01 0.00000000E+00 1.43665810E+00 0.00000000E+00 2.53890188E+00 0.00000000E+00 2.08197235E-02 -2.73367013E-01 0.00000000E+00 6.49778948E-02 1.12584899E-01 -1.43700317E+00 0.00000000E+00 -1.26979092E+00 -2.19835861E+00 5.31866184E-01 7.47926202E-01 -5.31901954E-01 -7.47959431E-01 5.31866184E-01 7.47926202E-01 -5.31866184E-01 -7.47926202E-01 5.31901954E-01 7.47959431E-01 -5.31866184E-01 -7.47926202E-01 -2.78816870E-03 3.66267547E-01 0.00000000E+00 -2.45385026E-03 -3.15594589E-01 -8.90177767E-01 0.00000000E+00 -5.90555806E-01 1.70471985E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.20087613E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -6.84173922E-01 2.78816870E-03 -3.66267547E-01 0.00000000E+00 2.45385026E-03 -3.15594589E-01 8.90177767E-01 0.00000000E+00 5.90555806E-01 1.70471985E+00 -2.78816870E-03 3.66267547E-01 0.00000000E+00 2.45385026E-03 3.15594589E-01 -8.90177767E-01 0.00000000E+00 5.90555806E-01 -1.70471985E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.20087613E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.84173922E-01 2.78816870E-03 -3.66267547E-01 0.00000000E+00 -2.45385026E-03 3.15594589E-01 8.90177767E-01 0.00000000E+00 -5.90555806E-01 -1.70471985E+00 5.30359445E-01 7.35795068E-01 0.00000000E+00 0.00000000E+00 -5.30359445E-01 -7.35795068E-01 5.30359445E-01 7.35795068E-01 0.00000000E+00 0.00000000E+00 -5.30359445E-01 -7.35795068E-01 -1.60525775E-03 2.11285955E-01 0.00000000E+00 3.18496467E-01 2.53186686E-03 -5.13904235E-01 0.00000000E+00 -1.02412502E+00 5.89906461E-01 3.22068997E-03 -4.23264306E-01 0.00000000E+00 -3.14161077E-01 0.00000000E+00 1.02809794E+00 0.00000000E+00 2.04575874E+00 0.00000000E+00 -1.60525775E-03 2.11285955E-01 0.00000000E+00 3.18496467E-01 -2.53186686E-03 -5.13904235E-01 0.00000000E+00 -1.02412502E+00 -5.89906461E-01 -1.60525775E-03 2.11285955E-01 0.00000000E+00 -3.18496467E-01 -2.53186686E-03 -5.13904235E-01 0.00000000E+00 1.02412502E+00 -5.89906461E-01 3.22068997E-03 -4.23264306E-01 0.00000000E+00 3.14161077E-01 0.00000000E+00 1.02809794E+00 0.00000000E+00 -2.04575874E+00 0.00000000E+00 -1.60525775E-03 2.11285955E-01 0.00000000E+00 -3.18496467E-01 2.53186686E-03 -5.13904235E-01 0.00000000E+00 1.02412502E+00 5.89906461E-01 3.06292332E-01 4.24784036E-01 -6.12388337E-01 -8.49616973E-01 3.06292332E-01 4.24784036E-01 3.06292332E-01 4.24784036E-01 -6.12388337E-01 -8.49616973E-01 3.06292332E-01 4.24784036E-01 8.93452937E-03 -8.94982456E-01 0.00000000E+00 7.63284844E-02 -2.02723092E-01 1.14309879E+00 0.00000000E+00 4.38746512E-03 5.38669257E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.05746404E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.46409756E-01 -8.93452937E-03 8.94982456E-01 0.00000000E+00 -7.63284844E-02 -2.02723092E-01 -1.14309879E+00 0.00000000E+00 -4.38746512E-03 5.38669257E-01 -8.93452937E-03 8.94982456E-01 0.00000000E+00 7.63284844E-02 -2.02723092E-01 -1.14309879E+00 0.00000000E+00 4.38746512E-03 5.38669257E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -7.05746404E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.46409756E-01 8.93452937E-03 -8.94982456E-01 0.00000000E+00 -7.63284844E-02 -2.02723092E-01 1.14309879E+00 0.00000000E+00 -4.38746512E-03 5.38669257E-01 8.08099800E-02 -3.77783672E-02 0.00000000E+00 0.00000000E+00 -8.08099800E-02 3.77783672E-02 -8.08099800E-02 3.77783672E-02 0.00000000E+00 0.00000000E+00 8.08099800E-02 -3.77783672E-02 5.14304646E-03 -5.16654870E-01 0.00000000E+00 1.14553279E-01 -7.64045980E-02 6.59659010E-01 0.00000000E+00 -5.43312250E-01 -3.61839079E-03 1.03114781E-02 -1.03340781E+00 0.00000000E+00 2.46989434E-01 0.00000000E+00 1.31872287E+00 0.00000000E+00 -5.36499630E-01 0.00000000E+00 5.14304646E-03 -5.16654870E-01 0.00000000E+00 1.14553279E-01 7.64045980E-02 6.59659010E-01 0.00000000E+00 -5.43312250E-01 3.61839079E-03 -5.14304646E-03 5.16654870E-01 0.00000000E+00 1.14553279E-01 -7.64045980E-02 -6.59659010E-01 0.00000000E+00 -5.43312250E-01 -3.61839079E-03 -1.03114781E-02 1.03340781E+00 0.00000000E+00 2.46989434E-01 0.00000000E+00 -1.31872287E+00 0.00000000E+00 -5.36499630E-01 0.00000000E+00 -5.14304646E-03 5.16654870E-01 0.00000000E+00 1.14553279E-01 7.64045980E-02 -6.59659010E-01 0.00000000E+00 -5.43312250E-01 3.61839079E-03 4.67875023E-02 -2.15961214E-02 9.34446386E-02 -4.32987130E-02 4.67875023E-02 -2.15961214E-02 -4.67875023E-02 2.15961214E-02 -9.34446386E-02 4.32987130E-02 -4.67875023E-02 2.15961214E-02 -2.54427279E-02 -9.98759002E-01 0.00000000E+00 2.78614328E-03 -2.24865888E-01 2.86876067E+00 0.00000000E+00 -1.06977218E+00 1.47316397E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.20041370E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.80438664E-01 2.54427279E-02 9.98759002E-01 0.00000000E+00 -2.78614328E-03 -2.24865888E-01 -2.86876067E+00 0.00000000E+00 1.06977218E+00 1.47316397E+00 -2.54427279E-02 -9.98759002E-01 0.00000000E+00 -2.78614328E-03 2.24865888E-01 2.86876067E+00 0.00000000E+00 1.06977218E+00 -1.47316397E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -2.20041370E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.80438664E-01 2.54427279E-02 9.98759002E-01 0.00000000E+00 2.78614328E-03 2.24865888E-01 -2.86876067E+00 0.00000000E+00 -1.06977218E+00 -1.47316397E+00 1.69435649E-01 3.00094334E-01 0.00000000E+00 0.00000000E+00 -1.69435649E-01 -3.00094334E-01 1.69435649E-01 3.00094334E-01 0.00000000E+00 0.00000000E+00 -1.69435649E-01 -3.00094334E-01 1.46939139E-02 5.76778542E-01 0.00000000E+00 -2.21716203E-01 2.81997587E-03 -1.65625357E+00 0.00000000E+00 2.38042578E-01 -1.07027545E+00 -2.93819510E-02 -1.15310402E+00 0.00000000E+00 2.26462592E-01 0.00000000E+00 3.31268062E+00 0.00000000E+00 -2.09098819E+00 0.00000000E+00 1.46939139E-02 5.76778542E-01 0.00000000E+00 -2.21716203E-01 -2.81997587E-03 -1.65625357E+00 0.00000000E+00 2.38042578E-01 1.07027545E+00 1.46939139E-02 5.76778542E-01 0.00000000E+00 2.21716203E-01 -2.81997587E-03 -1.65625357E+00 0.00000000E+00 -2.38042578E-01 1.07027545E+00 -2.93819510E-02 -1.15310402E+00 0.00000000E+00 -2.26462592E-01 0.00000000E+00 3.31268062E+00 0.00000000E+00 2.09098819E+00 0.00000000E+00 1.46939139E-02 5.76778542E-01 0.00000000E+00 2.21716203E-01 2.81997587E-03 -1.65625357E+00 0.00000000E+00 -2.38042578E-01 -1.07027545E+00 -9.79292672E-02 -1.73448051E-01 1.95665607E-01 3.46585567E-01 -9.79292672E-02 -1.73448051E-01 -9.79292672E-02 -1.73448051E-01 1.95665607E-01 3.46585567E-01 -9.79292672E-02 -1.73448051E-01 8.75764583E-02 1.02103928E+00 0.00000000E+00 -4.34540522E-02 7.53780042E-02 -6.89017055E+00 0.00000000E+00 2.19521895E+00 -3.80141384E+00 -8.75630504E-02 -1.02091488E+00 0.00000000E+00 8.70416947E-02 0.00000000E+00 6.89056283E+00 0.00000000E+00 -4.38886188E+00 0.00000000E+00 8.75764583E-02 1.02103928E+00 0.00000000E+00 -4.34540522E-02 -7.53780042E-02 -6.89017055E+00 0.00000000E+00 2.19521895E+00 3.80141384E+00 -8.75764583E-02 -1.02103928E+00 0.00000000E+00 -4.34540522E-02 7.53780042E-02 6.89017055E+00 0.00000000E+00 2.19521895E+00 -3.80141384E+00 8.75630504E-02 1.02091488E+00 0.00000000E+00 8.70416947E-02 0.00000000E+00 -6.89056283E+00 0.00000000E+00 -4.38886188E+00 0.00000000E+00 -8.75764583E-02 -1.02103928E+00 0.00000000E+00 -4.34540522E-02 -7.53780042E-02 6.89017055E+00 0.00000000E+00 2.19521895E+00 3.80141384E+00 -2.78214801E-01 -8.43252261E-01 2.78035714E-01 8.42810335E-01 -2.78214801E-01 -8.43252261E-01 2.78214801E-01 8.43252261E-01 -2.78035714E-01 -8.42810335E-01 2.78214801E-01 8.43252261E-01 Total SCF Density R N= 2211 2.03539796E+00 1.20403721E-01 1.26349776E-01 9.76616022E-21 1.13570032E-19 2.44916533E-01 -3.70032342E-04 -4.27916241E-03 9.29699712E-20 3.32457612E-01 6.37974000E-04 7.41895749E-03 1.23278478E-18 6.07325941E-03 3.25448146E-01 -4.42594721E-01 2.27391105E-01 -4.46216375E-19 1.68249155E-02 -2.91490657E-02 6.98894264E-01 -7.59520604E-19 9.96132820E-21 2.43120702E-01 -3.24957034E-19 -6.44802915E-19 9.26579050E-20 2.42856886E-01 2.86480974E-02 -3.79744806E-04 -3.25019264E-19 1.76506425E-01 -2.12318696E-02 -3.52036211E-03 -4.14320925E-19 1.06280014E-01 -4.96156511E-02 6.50723340E-04 -6.44802915E-19 -2.12278044E-02 2.00998979E-01 6.05287370E-03 -1.61287810E-18 -2.70654968E-02 1.37495693E-01 1.79549089E-02 -3.20268750E-02 -1.04591308E-18 -3.78332289E-02 -6.83242272E-02 6.70784357E-02 4.99873822E-19 -1.09299693E-02 3.26542362E-02 2.03539692E+00 -3.20283025E-02 2.28381857E-02 1.05912055E-18 3.97178529E-02 6.91870045E-02 2.82712773E-02 3.96057358E-19 7.78639897E-03 2.58724300E-02 1.20399386E-01 1.26353406E-01 1.02453667E-18 -1.05611886E-18 1.59475022E-01 -1.84042312E-18 -5.29521208E-18 -2.76276780E-18 1.53876344E-01 -8.30926701E-19 -4.42483958E-18 0.00000000E+00 0.00000000E+00 2.44918145E-01 4.02431229E-02 -4.00476640E-02 -1.73519510E-18 -5.15436490E-02 -1.13351546E-01 -1.11083562E-01 -8.99100324E-19 -1.64923301E-02 -5.87336903E-02 -7.31503376E-04 -8.57265239E-03 -1.54074396E-33 3.21945052E-01 6.69278140E-02 -6.89909194E-02 -5.29521208E-18 -1.20225562E-01 -1.86434482E-01 -1.80477689E-01 -4.42483958E-18 -5.42802514E-02 -1.35176113E-01 1.08654364E-20 1.27334490E-19 1.39377202E-18 2.08264746E-19 3.35966243E-01 6.71130341E-02 2.82590425E-02 2.85416752E-18 1.00763465E-01 1.86448372E-01 -9.40112700E-02 7.18713971E-19 2.37597609E-02 4.69499596E-02 -4.42565060E-01 2.27379133E-01 0.00000000E+00 3.36520194E-02 -4.99852618E-19 6.98814067E-01 -1.05404024E-19 -3.01180865E-19 1.53881884E-01 -1.18536967E-18 -3.81170002E-18 -6.73886679E-19 1.49645491E-01 -5.32679894E-19 -3.32322270E-18 0.00000000E+00 0.00000000E+00 2.43126802E-01 -1.54074396E-33 -1.20759738E-18 0.00000000E+00 2.42866431E-01 -3.37558744E-02 -1.85028252E-02 -1.25304118E-18 -5.65642994E-02 -8.18548617E-02 -2.87796039E-02 -5.64545329E-19 -2.60671619E-02 -3.68788996E-02 5.72537348E-02 -7.45379178E-04 -1.54074396E-33 2.13270932E-01 -7.28276132E-19 -6.96048862E-03 -1.54074396E-33 1.53141996E-01 -6.88551341E-03 -1.96746272E-02 -3.81170002E-18 -7.74342232E-02 -9.51172575E-02 -4.40216186E-02 -3.32322270E-18 -3.47972914E-02 -6.74438899E-02 -8.50422343E-19 1.10715416E-20 -1.20759738E-18 -7.28276132E-19 1.64240555E-01 1.03388103E-19 -2.33017966E-18 -9.28265705E-19 9.06475435E-02 -3.26919100E-03 4.58881762E-03 1.81975654E-19 1.27221427E-03 1.18875518E-02 -1.76486433E-02 -5.70157107E-21 1.57683204E-02 -3.72454887E-04 1.79549089E-02 -3.20283025E-02 -1.02453667E-18 4.02431229E-02 -6.69278140E-02 6.71130341E-02 1.05404024E-19 -3.37558744E-02 6.88551341E-03 2.03539796E+00 4.58881762E-03 -4.04175187E-03 -2.16463494E-19 -2.82603538E-03 -1.41404685E-02 -1.84664205E-02 -2.83301746E-19 -3.67939897E-03 -1.85066745E-02 -3.20268750E-02 2.28381857E-02 1.05611886E-18 -4.00476640E-02 6.89909194E-02 2.82590425E-02 3.01180865E-19 -1.85028252E-02 1.96746272E-02 1.20403721E-01 1.26349776E-01 -1.81975654E-19 2.16463494E-19 -1.14163819E-02 1.49684228E-19 7.99209873E-19 1.28462342E-18 -2.46186603E-02 2.63491339E-19 1.38496408E-18 1.04591308E-18 -1.05912055E-18 1.59475022E-01 1.73519510E-18 -5.29521208E-18 -2.85416752E-18 1.53881884E-01 1.25304118E-18 -3.81170002E-18 -9.76616022E-21 -1.13570032E-19 2.44916533E-01 1.27221427E-03 -2.82603538E-03 -1.49684228E-19 2.50570027E-03 -9.77811580E-03 -1.57208361E-03 -2.32692819E-19 1.32710773E-02 -1.52006485E-02 -3.78332289E-02 3.97178529E-02 1.84042312E-18 -5.15436490E-02 1.20225562E-01 1.00763465E-01 1.18536967E-18 -5.65642994E-02 7.74342232E-02 -3.70032342E-04 -4.27916241E-03 -9.29699712E-20 3.32457612E-01 -1.18875518E-02 1.41404685E-02 7.99209873E-19 9.77811580E-03 4.07919690E-02 8.39179701E-02 1.38496408E-18 1.72125605E-02 6.58540591E-02 6.83242272E-02 -6.91870045E-02 -5.29521208E-18 1.13351546E-01 -1.86434482E-01 -1.86448372E-01 -3.81170002E-18 8.18548617E-02 -9.51172575E-02 -6.37974000E-04 -7.41895749E-03 1.23278478E-18 -6.07325941E-03 3.25448146E-01 -1.76486433E-02 -1.84664205E-02 -1.28462342E-18 -1.57208361E-03 -8.39179701E-02 3.16826748E-03 -8.46242205E-19 -9.14383720E-03 -5.52807360E-02 6.70784357E-02 2.82712773E-02 2.76276780E-18 -1.11083562E-01 1.80477689E-01 -9.40112700E-02 6.73886679E-19 -2.87796039E-02 4.40216186E-02 -4.42594721E-01 2.27391105E-01 4.46216375E-19 1.68249155E-02 2.91490657E-02 6.98894264E-01 5.70157107E-21 2.83301746E-19 -2.46186603E-02 2.32692819E-19 1.38496408E-18 8.46242205E-19 -3.67964929E-02 2.00664352E-19 1.48880608E-18 -4.99873822E-19 -3.96057358E-19 1.53876344E-01 8.99100324E-19 -4.42483958E-18 -7.18713971E-19 1.49645491E-01 5.64545329E-19 -3.32322270E-18 7.59520604E-19 -9.96132820E-21 2.43120702E-01 3.24957034E-19 -6.44802915E-19 -9.26579050E-20 2.42856886E-01 1.57683204E-02 -3.67939897E-03 -2.63491339E-19 1.32710773E-02 -1.72125605E-02 -9.14383720E-03 -2.00664352E-19 1.96575398E-02 -1.31083902E-02 -1.09299693E-02 7.78639897E-03 8.30926701E-19 -1.64923301E-02 5.42802514E-02 2.37597609E-02 5.32679894E-19 -2.60671619E-02 3.47972914E-02 2.86480974E-02 -3.79744806E-04 3.25019264E-19 1.76506425E-01 2.12318696E-02 -3.52036211E-03 4.14320925E-19 1.06280014E-01 3.72454887E-04 1.85066745E-02 1.38496408E-18 1.52006485E-02 6.58540591E-02 5.52807360E-02 1.48880608E-18 1.31083902E-02 6.04597006E-02 -3.26542362E-02 -2.58724300E-02 -4.42483958E-18 5.87336903E-02 -1.35176113E-01 -4.69499596E-02 -3.32322270E-18 3.68788996E-02 -6.74438899E-02 4.96156511E-02 -6.50723340E-04 -6.44802915E-19 2.12278044E-02 2.00998979E-01 -6.05287370E-03 -1.61287810E-18 2.70654968E-02 1.37495693E-01 -4.89419255E-03 1.57273813E-03 9.75281098E-20 -3.67845458E-03 6.37101962E-03 4.38098517E-02 3.09623746E-19 -1.16834347E-02 2.02261580E-02 -3.27184424E-03 4.58629604E-03 1.07867444E-19 -9.65903402E-03 7.04643618E-03 -1.76339434E-02 2.06137231E-19 8.17909989E-03 1.34659058E-02 1.79502220E-02 -3.20204182E-02 2.11832569E-20 7.80765482E-02 1.38379536E-03 6.71026496E-02 -3.94867079E-19 -2.28309276E-02 -2.57946751E-02 2.03539796E+00 1.57273813E-03 -4.47977089E-03 -1.12476120E-19 4.24217514E-03 -7.34749777E-03 -1.30457550E-02 -3.14646546E-20 1.18589408E-03 -2.05542722E-03 4.58623117E-03 -4.04211065E-03 -1.45702122E-19 1.08332155E-02 -9.51798493E-03 -1.84759228E-02 -1.90523374E-19 1.41922797E-02 -1.24459313E-02 -3.20204182E-02 2.28315711E-02 -2.79558395E-21 -7.97644987E-02 -1.82621403E-04 2.82488869E-02 -9.46883705E-20 -2.62885710E-02 -6.18551377E-03 1.20403721E-01 1.26349776E-01 -9.75281098E-20 1.12476120E-19 -9.68664914E-02 -2.98230960E-19 1.61457819E-18 4.42541524E-19 -1.13870676E-01 -1.75229133E-19 1.68157843E-18 -7.41062359E-20 7.07840200E-20 -1.14183199E-02 -1.04051095E-19 3.59582232E-19 6.21337005E-19 -2.46165024E-02 -1.07929306E-19 7.94557791E-19 2.11832569E-20 -2.79558395E-21 1.59466423E-01 -5.29519133E-20 -2.19826454E-18 -9.05146573E-20 1.53868686E-01 -3.20488414E-19 -2.31307019E-18 -9.76616022E-21 -1.13570032E-19 2.44916533E-01 3.67845458E-03 -4.24217514E-03 -2.98230960E-19 -1.38878576E-02 -1.94819247E-02 -1.66934105E-02 -1.75256174E-19 -1.72543720E-02 -1.14486021E-02 1.09296760E-02 -1.36577884E-02 -4.03563593E-19 3.12130983E-02 -2.63627745E-02 -7.34830103E-02 -6.04834644E-19 5.18393478E-02 -3.95107974E-02 -7.80765482E-02 7.97644987E-02 5.29519133E-20 -2.53861217E-01 3.45908148E-03 2.11845007E-01 -3.87868833E-19 -1.54471370E-01 -2.53375150E-02 3.70032342E-04 4.27916241E-03 9.29699712E-20 3.32457612E-01 -6.37101962E-03 7.34749777E-03 1.61457819E-18 -1.94819247E-02 8.60576019E-03 2.89090062E-02 1.68157843E-18 -1.14468356E-02 -4.02163644E-03 -4.84098670E-03 4.62396309E-03 3.59582232E-19 -6.79713332E-03 1.20713741E-02 4.05888134E-02 7.94557791E-19 -7.05047734E-03 2.72879514E-02 1.38379536E-03 -1.82621403E-04 -2.19826454E-18 -3.45908148E-03 1.58648858E-02 -5.91286613E-03 -2.31307019E-18 -2.09358920E-02 2.76747408E-03 -6.37974000E-04 -7.41895749E-03 1.23278478E-18 6.07325941E-03 3.25448146E-01 4.38098517E-02 -1.30457550E-02 -4.42541524E-19 1.66934105E-02 -2.89090062E-02 -7.46356231E-02 -3.28292602E-19 1.23902586E-02 -2.14457003E-02 -1.76270108E-02 -1.84800316E-02 -6.63612075E-19 7.19160415E-02 -4.33504305E-02 3.10535484E-03 -5.44657715E-19 4.33452038E-02 -3.55797420E-02 6.71026496E-02 2.82488869E-02 -9.05146573E-20 -2.11845007E-01 -5.91286613E-03 -9.40513089E-02 -4.41249955E-20 -5.25147681E-02 -2.88246345E-03 -4.42594721E-01 2.27391105E-01 4.46216375E-19 -1.68249155E-02 2.91490657E-02 6.98894264E-01 -3.09623746E-19 3.14646546E-20 -1.13870676E-01 -1.75256174E-19 1.68157843E-18 3.28292602E-19 -1.30019572E-01 -4.49755962E-20 1.86029385E-18 2.11500771E-19 9.29307242E-20 -2.46205040E-02 -9.26085258E-20 7.67694844E-19 3.02175575E-19 -3.67947707E-02 -6.96433651E-20 1.02023070E-18 -3.94867079E-19 -9.46883705E-20 1.53868686E-01 3.87868833E-19 -2.31307019E-18 -4.41249955E-20 1.49633807E-01 1.56969770E-20 -2.37282696E-18 7.59520604E-19 -9.96132820E-21 2.43120702E-01 -3.24957034E-19 -6.44802915E-19 -9.26579050E-20 2.42856886E-01 1.16834347E-02 -1.18589408E-03 -1.75229133E-19 -1.72543720E-02 -1.14468356E-02 -1.23902586E-02 -4.49755962E-20 -1.19070412E-02 -2.93802891E-03 7.56651450E-03 -1.78732312E-02 -5.89399661E-19 5.35912295E-02 -3.85025077E-02 -5.24649835E-02 -4.71633304E-19 5.02717108E-02 -3.08094255E-02 2.28309276E-02 2.62885710E-02 3.20488414E-19 -1.54471370E-01 2.09358920E-02 5.25147681E-02 -1.56969770E-20 -8.81557321E-02 -1.02540435E-03 -2.86480974E-02 3.79744806E-04 -3.25019264E-19 1.76506425E-01 -2.12318696E-02 3.52036211E-03 -4.14320925E-19 1.06280014E-01 -2.02261580E-02 2.05542722E-03 1.68157843E-18 -1.14486021E-02 -4.02163644E-03 2.14457003E-02 1.86029385E-18 -2.93802891E-03 -8.49595535E-03 1.38162788E-02 6.07069560E-03 7.67694844E-19 -6.04964801E-03 2.55291290E-02 1.97396066E-02 1.02023070E-18 -4.54944986E-03 2.98517566E-02 -2.57946751E-02 -6.18551377E-03 -2.31307019E-18 2.53375150E-02 2.76747408E-03 -2.88246345E-03 -2.37282696E-18 1.02540435E-03 -5.37101298E-03 4.96156511E-02 -6.50723340E-04 -6.44802915E-19 -2.12278044E-02 2.00998979E-01 -6.05287370E-03 -1.61287810E-18 -2.70654968E-02 1.37495693E-01 -3.27184424E-03 4.58623117E-03 7.41062359E-20 -1.09296760E-02 4.84098670E-03 -1.76270108E-02 -2.11500771E-19 -7.56651450E-03 -1.38162788E-02 -4.89592047E-03 1.57345317E-03 0.00000000E+00 -7.35756737E-03 1.09286140E-19 4.38002736E-02 0.00000000E+00 -2.33553868E-02 3.46910867E-19 -3.27184424E-03 4.58623117E-03 -7.41062359E-20 -1.09296760E-02 -4.84098670E-03 -1.76270108E-02 2.11500771E-19 -7.56651450E-03 1.38162788E-02 1.79549089E-02 -3.20268750E-02 1.04591308E-18 3.78332289E-02 6.83242272E-02 6.70784357E-02 -4.99873822E-19 1.09299693E-02 -3.26542362E-02 2.03539692E+00 4.58629604E-03 -4.04211065E-03 -7.07840200E-20 1.36577884E-02 -4.62396309E-03 -1.84800316E-02 -9.29307242E-20 1.78732312E-02 -6.07069560E-03 1.57345317E-03 -4.48233973E-03 0.00000000E+00 8.48845625E-03 -1.26083877E-19 -1.30465240E-02 0.00000000E+00 2.37288319E-03 -3.52457861E-20 4.58629604E-03 -4.04211065E-03 7.07840200E-20 1.36577884E-02 4.62396309E-03 -1.84800316E-02 9.29307242E-20 1.78732312E-02 6.07069560E-03 -3.20283025E-02 2.28381857E-02 -1.05912055E-18 -3.97178529E-02 -6.91870045E-02 2.82712773E-02 -3.96057358E-19 -7.78639897E-03 -2.58724300E-02 1.20399386E-01 1.26353406E-01 -1.07867444E-19 1.45702122E-19 -1.14183199E-02 -4.03563593E-19 3.59582232E-19 6.63612075E-19 -2.46205040E-02 -5.89399661E-19 7.67694844E-19 0.00000000E+00 0.00000000E+00 -9.68547832E-02 7.70371978E-34 1.09788679E-18 0.00000000E+00 -1.13855605E-01 7.70371978E-34 1.37762248E-18 1.07867444E-19 -1.45702122E-19 -1.14183199E-02 4.03563593E-19 3.59582232E-19 -6.63612075E-19 -2.46205040E-02 5.89399661E-19 7.67694844E-19 -1.02453667E-18 1.05611886E-18 1.59475022E-01 -1.84042312E-18 -5.29521208E-18 2.76276780E-18 1.53876344E-01 -8.30926701E-19 -4.42483958E-18 0.00000000E+00 0.00000000E+00 2.44918145E-01 9.65903402E-03 -1.08332155E-02 -1.04051095E-19 3.12130983E-02 -6.79713332E-03 -7.19160415E-02 -9.26085258E-20 5.35912295E-02 -6.04964801E-03 7.35756737E-03 -8.48845625E-03 7.70371978E-34 1.98598966E-02 -6.68340408E-19 -3.33900423E-02 7.70371978E-34 2.57807192E-03 -3.92736509E-19 9.65903402E-03 -1.08332155E-02 1.04051095E-19 3.12130983E-02 6.79713332E-03 -7.19160415E-02 9.26085258E-20 5.35912295E-02 6.04964801E-03 -4.02431229E-02 4.00476640E-02 -1.73519510E-18 -5.15436490E-02 -1.13351546E-01 1.11083562E-01 -8.99100324E-19 -1.64923301E-02 -5.87336903E-02 7.31503376E-04 8.57265239E-03 -1.54074396E-33 3.21945052E-01 -7.04643618E-03 9.51798493E-03 3.59582232E-19 -2.63627745E-02 1.20713741E-02 4.33504305E-02 7.67694844E-19 -3.85025077E-02 2.55291290E-02 -1.09286140E-19 1.26083877E-19 1.09788679E-18 -6.68340408E-19 -2.51353752E-02 4.95961322E-19 1.37762248E-18 -3.92736509E-19 -2.38624751E-02 7.04643618E-03 -9.51798493E-03 3.59582232E-19 2.63627745E-02 1.20713741E-02 -4.33504305E-02 7.67694844E-19 3.85025077E-02 2.55291290E-02 -6.69278140E-02 6.89909194E-02 -5.29521208E-18 -1.20225562E-01 -1.86434482E-01 1.80477689E-01 -4.42483958E-18 -5.42802514E-02 -1.35176113E-01 -1.08654364E-20 -1.27334490E-19 1.39377202E-18 2.08264746E-19 3.35966243E-01 -1.76339434E-02 -1.84759228E-02 -6.21337005E-19 7.34830103E-02 -4.05888134E-02 3.10535484E-03 -3.02175575E-19 5.24649835E-02 -1.97396066E-02 4.38002736E-02 -1.30465240E-02 0.00000000E+00 3.33900423E-02 -4.95961322E-19 -7.46035265E-02 0.00000000E+00 2.47555689E-02 -3.67708570E-19 -1.76339434E-02 -1.84759228E-02 6.21337005E-19 7.34830103E-02 4.05888134E-02 3.10535484E-03 3.02175575E-19 5.24649835E-02 1.97396066E-02 6.71130341E-02 2.82590425E-02 -2.85416752E-18 -1.00763465E-01 -1.86448372E-01 -9.40112700E-02 -7.18713971E-19 -2.37597609E-02 -4.69499596E-02 -4.42565060E-01 2.27379133E-01 0.00000000E+00 -3.36520194E-02 4.99852618E-19 6.98814067E-01 -2.06137231E-19 1.90523374E-19 -2.46165024E-02 -6.04834644E-19 7.94557791E-19 5.44657715E-19 -3.67947707E-02 -4.71633304E-19 1.02023070E-18 0.00000000E+00 0.00000000E+00 -1.13855605E-01 7.70371978E-34 1.37762248E-18 0.00000000E+00 -1.30002302E-01 7.70371978E-34 1.78196012E-18 2.06137231E-19 -1.90523374E-19 -2.46165024E-02 6.04834644E-19 7.94557791E-19 -5.44657715E-19 -3.67947707E-02 4.71633304E-19 1.02023070E-18 1.05404024E-19 3.01180865E-19 1.53881884E-01 -1.18536967E-18 -3.81170002E-18 6.73886679E-19 1.49645491E-01 -5.32679894E-19 -3.32322270E-18 0.00000000E+00 0.00000000E+00 2.43126802E-01 -1.54074396E-33 -1.20759738E-18 0.00000000E+00 2.42866431E-01 -8.17909989E-03 -1.41922797E-02 -1.07929306E-19 5.18393478E-02 -7.05047734E-03 -4.33452038E-02 -6.96433651E-20 5.02717108E-02 -4.54944986E-03 2.33553868E-02 -2.37288319E-03 7.70371978E-34 2.57807192E-03 -3.92736509E-19 -2.47555689E-02 7.70371978E-34 -6.82220182E-03 -1.00612605E-19 -8.17909989E-03 -1.41922797E-02 1.07929306E-19 5.18393478E-02 7.05047734E-03 -4.33452038E-02 6.96433651E-20 5.02717108E-02 4.54944986E-03 3.37558744E-02 1.85028252E-02 -1.25304118E-18 -5.65642994E-02 -8.18548617E-02 2.87796039E-02 -5.64545329E-19 -2.60671619E-02 -3.68788996E-02 -5.72537348E-02 7.45379178E-04 -1.54074396E-33 2.13270932E-01 -7.28276132E-19 6.96048862E-03 -1.54074396E-33 1.53141996E-01 -1.34659058E-02 1.24459313E-02 7.94557791E-19 -3.95107974E-02 2.72879514E-02 3.55797420E-02 1.02023070E-18 -3.08094255E-02 2.98517566E-02 -3.46910867E-19 3.52457861E-20 1.37762248E-18 -3.92736509E-19 -2.38624751E-02 3.67708570E-19 1.78196012E-18 -1.00612605E-19 -1.35958331E-02 1.34659058E-02 -1.24459313E-02 7.94557791E-19 3.95107974E-02 2.72879514E-02 -3.55797420E-02 1.02023070E-18 3.08094255E-02 2.98517566E-02 6.88551341E-03 1.96746272E-02 -3.81170002E-18 -7.74342232E-02 -9.51172575E-02 4.40216186E-02 -3.32322270E-18 -3.47972914E-02 -6.74438899E-02 8.50422343E-19 -1.10715416E-20 -1.20759738E-18 -7.28276132E-19 1.64240555E-01 -1.03388103E-19 -2.33017966E-18 -9.28265705E-19 9.06475435E-02 1.79502220E-02 -3.20204182E-02 -2.11832569E-20 7.80765482E-02 -1.38379536E-03 6.71026496E-02 3.94867079E-19 -2.28309276E-02 2.57946751E-02 -3.27184424E-03 4.58629604E-03 -1.07867444E-19 -9.65903402E-03 -7.04643618E-03 -1.76339434E-02 -2.06137231E-19 8.17909989E-03 -1.34659058E-02 -4.89419255E-03 1.57273813E-03 -9.75281098E-20 -3.67845458E-03 -6.37101962E-03 4.38098517E-02 -3.09623746E-19 -1.16834347E-02 -2.02261580E-02 -3.26919100E-03 4.58881762E-03 -1.81975654E-19 -1.27221427E-03 -1.18875518E-02 -1.76486433E-02 5.70157107E-21 -1.57683204E-02 3.72454887E-04 1.79549089E-02 -3.20283025E-02 1.02453667E-18 -4.02431229E-02 6.69278140E-02 6.71130341E-02 -1.05404024E-19 3.37558744E-02 -6.88551341E-03 2.03539796E+00 -3.20204182E-02 2.28315711E-02 2.79558395E-21 -7.97644987E-02 1.82621403E-04 2.82488869E-02 9.46883705E-20 -2.62885710E-02 6.18551377E-03 4.58623117E-03 -4.04211065E-03 1.45702122E-19 1.08332155E-02 9.51798493E-03 -1.84759228E-02 1.90523374E-19 1.41922797E-02 1.24459313E-02 1.57273813E-03 -4.47977089E-03 1.12476120E-19 4.24217514E-03 7.34749777E-03 -1.30457550E-02 3.14646546E-20 1.18589408E-03 2.05542722E-03 4.58881762E-03 -4.04175187E-03 2.16463494E-19 2.82603538E-03 1.41404685E-02 -1.84664205E-02 2.83301746E-19 3.67939897E-03 1.85066745E-02 -3.20268750E-02 2.28381857E-02 -1.05611886E-18 4.00476640E-02 -6.89909194E-02 2.82590425E-02 -3.01180865E-19 1.85028252E-02 -1.96746272E-02 1.20403721E-01 1.26349776E-01 -2.11832569E-20 2.79558395E-21 1.59466423E-01 5.29519133E-20 -2.19826454E-18 9.05146573E-20 1.53868686E-01 3.20488414E-19 -2.31307019E-18 7.41062359E-20 -7.07840200E-20 -1.14183199E-02 1.04051095E-19 3.59582232E-19 -6.21337005E-19 -2.46165024E-02 1.07929306E-19 7.94557791E-19 9.75281098E-20 -1.12476120E-19 -9.68664914E-02 2.98230960E-19 1.61457819E-18 -4.42541524E-19 -1.13870676E-01 1.75229133E-19 1.68157843E-18 1.81975654E-19 -2.16463494E-19 -1.14163819E-02 1.49684228E-19 7.99209873E-19 -1.28462342E-18 -2.46186603E-02 2.63491339E-19 1.38496408E-18 -1.04591308E-18 1.05912055E-18 1.59475022E-01 1.73519510E-18 -5.29521208E-18 2.85416752E-18 1.53881884E-01 1.25304118E-18 -3.81170002E-18 9.76616022E-21 1.13570032E-19 2.44916533E-01 -7.80765482E-02 7.97644987E-02 -5.29519133E-20 -2.53861217E-01 -3.45908148E-03 2.11845007E-01 3.87868833E-19 -1.54471370E-01 2.53375150E-02 1.09296760E-02 -1.36577884E-02 4.03563593E-19 3.12130983E-02 2.63627745E-02 -7.34830103E-02 6.04834644E-19 5.18393478E-02 3.95107974E-02 3.67845458E-03 -4.24217514E-03 2.98230960E-19 -1.38878576E-02 1.94819247E-02 -1.66934105E-02 1.75256174E-19 -1.72543720E-02 1.14486021E-02 -1.27221427E-03 2.82603538E-03 -1.49684228E-19 2.50570027E-03 -9.77811580E-03 1.57208361E-03 -2.32692819E-19 1.32710773E-02 -1.52006485E-02 3.78332289E-02 -3.97178529E-02 1.84042312E-18 -5.15436490E-02 1.20225562E-01 -1.00763465E-01 1.18536967E-18 -5.65642994E-02 7.74342232E-02 3.70032342E-04 4.27916241E-03 -9.29699712E-20 3.32457612E-01 -1.38379536E-03 1.82621403E-04 -2.19826454E-18 3.45908148E-03 1.58648858E-02 5.91286613E-03 -2.31307019E-18 2.09358920E-02 2.76747408E-03 4.84098670E-03 -4.62396309E-03 3.59582232E-19 6.79713332E-03 1.20713741E-02 -4.05888134E-02 7.94557791E-19 7.05047734E-03 2.72879514E-02 6.37101962E-03 -7.34749777E-03 1.61457819E-18 1.94819247E-02 8.60576019E-03 -2.89090062E-02 1.68157843E-18 1.14468356E-02 -4.02163644E-03 1.18875518E-02 -1.41404685E-02 7.99209873E-19 9.77811580E-03 4.07919690E-02 -8.39179701E-02 1.38496408E-18 1.72125605E-02 6.58540591E-02 -6.83242272E-02 6.91870045E-02 -5.29521208E-18 1.13351546E-01 -1.86434482E-01 1.86448372E-01 -3.81170002E-18 8.18548617E-02 -9.51172575E-02 6.37974000E-04 7.41895749E-03 1.23278478E-18 -6.07325941E-03 3.25448146E-01 6.71026496E-02 2.82488869E-02 9.05146573E-20 -2.11845007E-01 5.91286613E-03 -9.40513089E-02 4.41249955E-20 -5.25147681E-02 2.88246345E-03 -1.76270108E-02 -1.84800316E-02 6.63612075E-19 7.19160415E-02 4.33504305E-02 3.10535484E-03 5.44657715E-19 4.33452038E-02 3.55797420E-02 4.38098517E-02 -1.30457550E-02 4.42541524E-19 1.66934105E-02 2.89090062E-02 -7.46356231E-02 3.28292602E-19 1.23902586E-02 2.14457003E-02 -1.76486433E-02 -1.84664205E-02 1.28462342E-18 1.57208361E-03 8.39179701E-02 3.16826748E-03 8.46242205E-19 9.14383720E-03 5.52807360E-02 6.70784357E-02 2.82712773E-02 -2.76276780E-18 1.11083562E-01 -1.80477689E-01 -9.40112700E-02 -6.73886679E-19 2.87796039E-02 -4.40216186E-02 -4.42594721E-01 2.27391105E-01 -4.46216375E-19 -1.68249155E-02 -2.91490657E-02 6.98894264E-01 3.94867079E-19 9.46883705E-20 1.53868686E-01 -3.87868833E-19 -2.31307019E-18 4.41249955E-20 1.49633807E-01 -1.56969770E-20 -2.37282696E-18 -2.11500771E-19 -9.29307242E-20 -2.46205040E-02 9.26085258E-20 7.67694844E-19 -3.02175575E-19 -3.67947707E-02 6.96433651E-20 1.02023070E-18 3.09623746E-19 -3.14646546E-20 -1.13870676E-01 1.75256174E-19 1.68157843E-18 -3.28292602E-19 -1.30019572E-01 4.49755962E-20 1.86029385E-18 -5.70157107E-21 -2.83301746E-19 -2.46186603E-02 2.32692819E-19 1.38496408E-18 -8.46242205E-19 -3.67964929E-02 2.00664352E-19 1.48880608E-18 4.99873822E-19 3.96057358E-19 1.53876344E-01 8.99100324E-19 -4.42483958E-18 7.18713971E-19 1.49645491E-01 5.64545329E-19 -3.32322270E-18 -7.59520604E-19 9.96132820E-21 2.43120702E-01 3.24957034E-19 -6.44802915E-19 9.26579050E-20 2.42856886E-01 2.28309276E-02 2.62885710E-02 -3.20488414E-19 -1.54471370E-01 -2.09358920E-02 5.25147681E-02 1.56969770E-20 -8.81557321E-02 1.02540435E-03 7.56651450E-03 -1.78732312E-02 5.89399661E-19 5.35912295E-02 3.85025077E-02 -5.24649835E-02 4.71633304E-19 5.02717108E-02 3.08094255E-02 1.16834347E-02 -1.18589408E-03 1.75229133E-19 -1.72543720E-02 1.14468356E-02 -1.23902586E-02 4.49755962E-20 -1.19070412E-02 2.93802891E-03 -1.57683204E-02 3.67939897E-03 -2.63491339E-19 1.32710773E-02 -1.72125605E-02 9.14383720E-03 -2.00664352E-19 1.96575398E-02 -1.31083902E-02 1.09299693E-02 -7.78639897E-03 8.30926701E-19 -1.64923301E-02 5.42802514E-02 -2.37597609E-02 5.32679894E-19 -2.60671619E-02 3.47972914E-02 -2.86480974E-02 3.79744806E-04 3.25019264E-19 1.76506425E-01 2.12318696E-02 3.52036211E-03 4.14320925E-19 1.06280014E-01 2.57946751E-02 6.18551377E-03 -2.31307019E-18 -2.53375150E-02 2.76747408E-03 2.88246345E-03 -2.37282696E-18 -1.02540435E-03 -5.37101298E-03 -1.38162788E-02 -6.07069560E-03 7.67694844E-19 6.04964801E-03 2.55291290E-02 -1.97396066E-02 1.02023070E-18 4.54944986E-03 2.98517566E-02 2.02261580E-02 -2.05542722E-03 1.68157843E-18 1.14486021E-02 -4.02163644E-03 -2.14457003E-02 1.86029385E-18 2.93802891E-03 -8.49595535E-03 -3.72454887E-04 -1.85066745E-02 1.38496408E-18 1.52006485E-02 6.58540591E-02 -5.52807360E-02 1.48880608E-18 1.31083902E-02 6.04597006E-02 3.26542362E-02 2.58724300E-02 -4.42483958E-18 5.87336903E-02 -1.35176113E-01 4.69499596E-02 -3.32322270E-18 3.68788996E-02 -6.74438899E-02 -4.96156511E-02 6.50723340E-04 -6.44802915E-19 2.12278044E-02 2.00998979E-01 6.05287370E-03 -1.61287810E-18 2.70654968E-02 1.37495693E-01 -6.66246066E-02 5.95013897E-02 -2.85305066E-18 1.07623908E-01 -1.86375413E-01 1.86346727E-01 -1.90481767E-18 7.18585151E-02 -1.24432133E-01 1.23157803E-02 -1.20207950E-02 5.88877118E-19 3.08153087E-03 3.84683727E-02 -7.13109959E-02 4.17276707E-19 7.38787377E-03 2.72585831E-02 -9.65331724E-03 8.48089205E-03 -4.03991515E-19 1.34914717E-02 -2.63907285E-02 5.03081256E-02 -5.09628554E-19 1.51786247E-02 -3.32914636E-02 -6.23362889E-04 1.39646151E-03 -4.71632129E-20 1.77478453E-03 -3.08093487E-03 5.29405537E-04 1.13403265E-19 -4.28867891E-03 7.40806343E-03 -9.65171929E-03 8.48216889E-03 -3.80820133E-19 1.61089550E-02 -2.48770590E-02 5.03058919E-02 -4.56176700E-19 2.12352037E-02 -2.97997235E-02 1.23135145E-02 -1.20182511E-02 2.53619644E-19 -3.48626755E-02 1.65676924E-02 -7.13012898E-02 1.10614767E-19 -2.73118101E-02 7.22590498E-03 1.89953625E-01 -7.82029126E-03 2.00156544E-02 -2.50125331E-18 9.43582746E-02 -1.63394266E-01 7.76363914E-02 -1.70004204E-18 6.41394408E-02 -1.11055174E-01 2.94011711E-02 -1.75195558E-02 9.87670067E-19 2.72050914E-03 6.45195051E-02 -7.16144837E-02 5.24278554E-19 1.91209784E-03 3.42484742E-02 -1.20735838E-02 9.57294425E-03 -6.18194945E-19 1.52867347E-02 -4.03835584E-02 5.05562020E-02 -6.62740938E-19 1.57052438E-02 -4.32935235E-02 3.63509516E-03 2.07061972E-03 -7.42028661E-20 2.79320907E-03 -4.84729907E-03 5.30398300E-05 1.13099637E-19 -4.27881858E-03 7.38822896E-03 -1.20659598E-02 9.57417180E-03 -5.11744171E-19 2.73368701E-02 -3.34296662E-02 5.05556683E-02 -5.39733936E-19 2.96438492E-02 -3.52580964E-02 2.93979637E-02 -1.75155320E-02 4.57800567E-19 -5.72484205E-02 2.99058025E-02 -7.16041657E-02 2.36679733E-19 -3.06319641E-02 1.54610934E-02 1.46905752E-01 1.25024671E-01 1.23142855E-02 -1.20201081E-02 -3.35388338E-19 -3.17723524E-02 -2.19092289E-02 -7.13119957E-02 -3.06744223E-19 -1.99078176E-02 -2.00380533E-02 -6.66109378E-02 5.94892162E-02 0.00000000E+00 2.15226247E-01 -3.19687808E-18 1.86311669E-01 0.00000000E+00 1.43713838E-01 -2.13466352E-18 1.23142855E-02 -1.20201081E-02 3.35388338E-19 -3.17723524E-02 2.19092289E-02 -7.13119957E-02 3.06744223E-19 -1.99078176E-02 2.00380533E-02 -9.65296991E-03 8.48261723E-03 -2.31446210E-20 2.96020803E-02 -1.51192138E-03 5.03218315E-02 -5.34655185E-20 3.64335280E-02 -3.49263272E-03 -6.25834161E-04 1.39940695E-03 0.00000000E+00 3.56168474E-03 -5.29037328E-20 5.40005869E-04 0.00000000E+00 -8.56133049E-03 1.27166320E-19 -9.65296991E-03 8.48261723E-03 2.31446210E-20 2.96020803E-02 1.51192138E-03 5.03218315E-02 5.34655185E-20 3.64335280E-02 3.49263272E-03 -2.00719838E-02 -2.22302269E-02 1.89953275E-01 2.94026881E-02 -1.75225935E-02 -5.30265361E-19 -5.45243425E-02 -3.46395622E-02 -7.16265491E-02 -2.87818449E-19 -2.87053526E-02 -1.88017279E-02 -7.79535015E-03 1.99982596E-02 0.00000000E+00 1.88711587E-01 -2.80304072E-18 7.75955655E-02 0.00000000E+00 1.28277145E-01 -1.90537352E-18 2.94026881E-02 -1.75225935E-02 5.30265361E-19 -5.45243425E-02 3.46395622E-02 -7.16265491E-02 2.87818449E-19 -2.87053526E-02 1.88017279E-02 -1.20659076E-02 9.57592252E-03 -1.06547535E-19 4.26283816E-02 -6.96021321E-03 5.05753487E-02 -1.23157542E-19 4.53700295E-02 -8.04526121E-03 3.63224547E-03 2.07495574E-03 0.00000000E+00 5.60719272E-03 -8.32868282E-20 6.58059135E-05 0.00000000E+00 -8.53622215E-03 1.26793371E-19 -1.20659076E-02 9.57592252E-03 1.06547535E-19 4.26283816E-02 6.96021321E-03 5.05753487E-02 1.23157542E-19 4.53700295E-02 8.04526121E-03 -2.22281587E-02 -2.00276859E-02 1.46919401E-01 1.25054446E-01 -9.65331724E-03 8.48089205E-03 4.03991515E-19 1.34914717E-02 2.63907285E-02 5.03081256E-02 5.09628554E-19 1.51786247E-02 3.32914636E-02 1.23157803E-02 -1.20207950E-02 -5.88877118E-19 3.08153087E-03 -3.84683727E-02 -7.13109959E-02 -4.17276707E-19 7.38787377E-03 -2.72585831E-02 -6.66246066E-02 5.95013897E-02 2.85305066E-18 1.07623908E-01 1.86375413E-01 1.86346727E-01 1.90481767E-18 7.18585151E-02 1.24432133E-01 1.23135145E-02 -1.20182511E-02 -2.53619644E-19 -3.48626755E-02 -1.65676924E-02 -7.13012898E-02 -1.10614767E-19 -2.73118101E-02 -7.22590498E-03 -9.65171929E-03 8.48216889E-03 3.80820133E-19 1.61089550E-02 2.48770590E-02 5.03058919E-02 4.56176700E-19 2.12352037E-02 2.97997235E-02 -6.23362889E-04 1.39646151E-03 4.71632129E-20 1.77478453E-03 3.08093487E-03 5.29405537E-04 -1.13403265E-19 -4.28867891E-03 -7.40806343E-03 -8.06880798E-03 -1.53673072E-02 -2.00719838E-02 -2.22281587E-02 1.89953625E-01 -1.20735838E-02 9.57294425E-03 6.18194945E-19 1.52867347E-02 4.03835584E-02 5.05562020E-02 6.62740938E-19 1.57052438E-02 4.32935235E-02 2.94011711E-02 -1.75195558E-02 -9.87670067E-19 2.72050914E-03 -6.45195051E-02 -7.16144837E-02 -5.24278554E-19 1.91209784E-03 -3.42484742E-02 -7.82029126E-03 2.00156544E-02 2.50125331E-18 9.43582746E-02 1.63394266E-01 7.76363914E-02 1.70004204E-18 6.41394408E-02 1.11055174E-01 2.93979637E-02 -1.75155320E-02 -4.57800567E-19 -5.72484205E-02 -2.99058025E-02 -7.16041657E-02 -2.36679733E-19 -3.06319641E-02 -1.54610934E-02 -1.20659598E-02 9.57417180E-03 5.11744171E-19 2.73368701E-02 3.34296662E-02 5.05556683E-02 5.39733936E-19 2.96438492E-02 3.52580964E-02 3.63509516E-03 2.07061972E-03 7.42028661E-20 2.79320907E-03 4.84729907E-03 5.30398300E-05 -1.13099637E-19 -4.27881858E-03 -7.38822896E-03 -1.53673072E-02 -2.10890726E-02 -2.22302269E-02 -2.00276859E-02 1.46905752E-01 1.25024671E-01 -6.23362889E-04 1.39646151E-03 4.71632129E-20 -1.77478453E-03 3.08093487E-03 5.29405537E-04 -1.13403265E-19 4.28867891E-03 -7.40806343E-03 -9.65171929E-03 8.48216889E-03 3.80820133E-19 -1.61089550E-02 2.48770590E-02 5.03058919E-02 4.56176700E-19 -2.12352037E-02 2.97997235E-02 1.23135145E-02 -1.20182511E-02 -2.53619644E-19 3.48626755E-02 -1.65676924E-02 -7.13012898E-02 -1.10614767E-19 2.73118101E-02 -7.22590498E-03 -6.66246066E-02 5.95013897E-02 2.85305066E-18 -1.07623908E-01 1.86375413E-01 1.86346727E-01 1.90481767E-18 -7.18585151E-02 1.24432133E-01 1.23157803E-02 -1.20207950E-02 -5.88877118E-19 -3.08153087E-03 -3.84683727E-02 -7.13109959E-02 -4.17276707E-19 -7.38787377E-03 -2.72585831E-02 -9.65331724E-03 8.48089205E-03 4.03991515E-19 -1.34914717E-02 2.63907285E-02 5.03081256E-02 5.09628554E-19 -1.51786247E-02 3.32914636E-02 2.69613107E-03 3.48909412E-03 -8.07440808E-03 -1.53817153E-02 -2.00646902E-02 -2.22192738E-02 1.89953625E-01 3.63509516E-03 2.07061972E-03 7.42028661E-20 -2.79320907E-03 4.84729907E-03 5.30398300E-05 -1.13099637E-19 4.27881858E-03 -7.38822896E-03 -1.20659598E-02 9.57417180E-03 5.11744171E-19 -2.73368701E-02 3.34296662E-02 5.05556683E-02 5.39733936E-19 -2.96438492E-02 3.52580964E-02 2.93979637E-02 -1.75155320E-02 -4.57800567E-19 5.72484205E-02 -2.99058025E-02 -7.16041657E-02 -2.36679733E-19 3.06319641E-02 -1.54610934E-02 -7.82029126E-03 2.00156544E-02 2.50125331E-18 -9.43582746E-02 1.63394266E-01 7.76363914E-02 1.70004204E-18 -6.41394408E-02 1.11055174E-01 2.94011711E-02 -1.75195558E-02 -9.87670067E-19 -2.72050914E-03 -6.45195051E-02 -7.16144837E-02 -5.24278554E-19 -1.91209784E-03 -3.42484742E-02 -1.20735838E-02 9.57294425E-03 6.18194945E-19 -1.52867347E-02 4.03835584E-02 5.05562020E-02 6.62740938E-19 -1.57052438E-02 4.32935235E-02 3.48909412E-03 5.93498654E-03 -1.53796869E-02 -2.11092815E-02 -2.22192738E-02 -2.00161725E-02 1.46905752E-01 1.25024671E-01 -9.65296991E-03 8.48261723E-03 2.31446210E-20 -2.96020803E-02 1.51192138E-03 5.03218315E-02 5.34655185E-20 -3.64335280E-02 3.49263272E-03 -6.25834161E-04 1.39940695E-03 0.00000000E+00 -3.56168474E-03 5.29037328E-20 5.40005869E-04 0.00000000E+00 8.56133049E-03 -1.27166320E-19 -9.65296991E-03 8.48261723E-03 -2.31446210E-20 -2.96020803E-02 -1.51192138E-03 5.03218315E-02 -5.34655185E-20 -3.64335280E-02 -3.49263272E-03 1.23142855E-02 -1.20201081E-02 3.35388338E-19 3.17723524E-02 2.19092289E-02 -7.13119957E-02 3.06744223E-19 1.99078176E-02 2.00380533E-02 -6.66109378E-02 5.94892162E-02 0.00000000E+00 -2.15226247E-01 3.19687808E-18 1.86311669E-01 0.00000000E+00 -1.43713838E-01 2.13466352E-18 1.23142855E-02 -1.20201081E-02 -3.35388338E-19 3.17723524E-02 -2.19092289E-02 -7.13119957E-02 -3.06744223E-19 1.99078176E-02 -2.00380533E-02 -8.07440808E-03 -1.53796869E-02 2.69319390E-03 3.48389163E-03 -8.07440808E-03 -1.53796869E-02 -2.00719838E-02 -2.22302269E-02 1.89953275E-01 -1.20659076E-02 9.57592252E-03 1.06547535E-19 -4.26283816E-02 6.96021321E-03 5.05753487E-02 1.23157542E-19 -4.53700295E-02 8.04526121E-03 3.63224547E-03 2.07495574E-03 0.00000000E+00 -5.60719272E-03 8.32868282E-20 6.58059135E-05 0.00000000E+00 8.53622215E-03 -1.26793371E-19 -1.20659076E-02 9.57592252E-03 -1.06547535E-19 -4.26283816E-02 -6.96021321E-03 5.05753487E-02 -1.23157542E-19 -4.53700295E-02 -8.04526121E-03 2.94026881E-02 -1.75225935E-02 5.30265361E-19 5.45243425E-02 3.46395622E-02 -7.16265491E-02 2.87818449E-19 2.87053526E-02 1.88017279E-02 -7.79535015E-03 1.99982596E-02 0.00000000E+00 -1.88711587E-01 2.80304072E-18 7.75955655E-02 0.00000000E+00 -1.28277145E-01 1.90537352E-18 2.94026881E-02 -1.75225935E-02 -5.30265361E-19 5.45243425E-02 -3.46395622E-02 -7.16265491E-02 -2.87818449E-19 2.87053526E-02 -1.88017279E-02 -1.53817153E-02 -2.11092815E-02 3.48389163E-03 5.92901422E-03 -1.53817153E-02 -2.11092815E-02 -2.22281587E-02 -2.00276859E-02 1.46919401E-01 1.25054446E-01 1.23135145E-02 -1.20182511E-02 2.53619644E-19 3.48626755E-02 1.65676924E-02 -7.13012898E-02 1.10614767E-19 2.73118101E-02 7.22590498E-03 -9.65171929E-03 8.48216889E-03 -3.80820133E-19 -1.61089550E-02 -2.48770590E-02 5.03058919E-02 -4.56176700E-19 -2.12352037E-02 -2.97997235E-02 -6.23362889E-04 1.39646151E-03 -4.71632129E-20 -1.77478453E-03 -3.08093487E-03 5.29405537E-04 1.13403265E-19 4.28867891E-03 7.40806343E-03 -9.65331724E-03 8.48089205E-03 -4.03991515E-19 -1.34914717E-02 -2.63907285E-02 5.03081256E-02 -5.09628554E-19 -1.51786247E-02 -3.32914636E-02 1.23157803E-02 -1.20207950E-02 5.88877118E-19 -3.08153087E-03 3.84683727E-02 -7.13109959E-02 4.17276707E-19 -7.38787377E-03 2.72585831E-02 -6.66246066E-02 5.95013897E-02 -2.85305066E-18 -1.07623908E-01 -1.86375413E-01 1.86346727E-01 -1.90481767E-18 -7.18585151E-02 -1.24432133E-01 -2.00646902E-02 -2.22192738E-02 -8.07440808E-03 -1.53817153E-02 2.69613107E-03 3.48909412E-03 -8.06880798E-03 -1.53673072E-02 -2.00719838E-02 -2.22281587E-02 1.89953625E-01 2.93979637E-02 -1.75155320E-02 4.57800567E-19 5.72484205E-02 2.99058025E-02 -7.16041657E-02 2.36679733E-19 3.06319641E-02 1.54610934E-02 -1.20659598E-02 9.57417180E-03 -5.11744171E-19 -2.73368701E-02 -3.34296662E-02 5.05556683E-02 -5.39733936E-19 -2.96438492E-02 -3.52580964E-02 3.63509516E-03 2.07061972E-03 -7.42028661E-20 -2.79320907E-03 -4.84729907E-03 5.30398300E-05 1.13099637E-19 4.27881858E-03 7.38822896E-03 -1.20735838E-02 9.57294425E-03 -6.18194945E-19 -1.52867347E-02 -4.03835584E-02 5.05562020E-02 -6.62740938E-19 -1.57052438E-02 -4.32935235E-02 2.94011711E-02 -1.75195558E-02 9.87670067E-19 -2.72050914E-03 6.45195051E-02 -7.16144837E-02 5.24278554E-19 -1.91209784E-03 3.42484742E-02 -7.82029126E-03 2.00156544E-02 -2.50125331E-18 -9.43582746E-02 -1.63394266E-01 7.76363914E-02 -1.70004204E-18 -6.41394408E-02 -1.11055174E-01 -2.22192738E-02 -2.00161725E-02 -1.53796869E-02 -2.11092815E-02 3.48909412E-03 5.93498654E-03 -1.53673072E-02 -2.10890726E-02 -2.22302269E-02 -2.00276859E-02 1.46905752E-01 1.25024671E-01 Cartesian Gradient R N= 36 1.94488815E-15 2.26644671E-04 1.39790007E-04 2.26159150E-15 -7.06503913E-15 1.57510979E-04 -1.62650500E-15 -2.26644672E-04 1.39790007E-04 4.30845647E-15 -2.26644672E-04 -1.39790007E-04 -1.78021785E-15 8.31404014E-15 -1.57510979E-04 1.60448891E-15 2.26644672E-04 -1.39790007E-04 -1.82433648E-16 4.43014692E-06 -1.46851968E-05 -5.40549239E-16 3.17040111E-16 -2.57777660E-06 -1.92533726E-15 -4.43014692E-06 -1.46851968E-05 -1.07006339E-15 -4.43014691E-06 1.46851968E-05 -1.96551869E-15 4.16747916E-16 2.57777661E-06 -1.02879995E-15 4.43014692E-06 1.46851968E-05 Dipole Moment R N= 3 -2.99801806E-15 -6.51985403E-15 -1.48144031E-15 QEq coupling tensors R N= 72 -1.54362150E+00 5.05322892E-16 -4.71213653E-01 -4.19217517E-16 -2.15091759E+00 2.01483515E+00 -1.54384555E+00 -3.71239741E-16 3.25766618E+00 2.60143788E-16 1.61069075E-15 -1.71382063E+00 -1.54362150E+00 1.04698485E-16 -4.71213653E-01 2.79904286E-16 2.15091759E+00 2.01483515E+00 -1.54362150E+00 1.77832303E-17 -4.71213653E-01 -2.10659835E-16 -2.15091759E+00 2.01483515E+00 -1.54384555E+00 2.50118765E-16 3.25766618E+00 -3.96254097E-16 1.60592026E-15 -1.71382063E+00 -1.54362150E+00 2.47130519E-16 -4.71213653E-01 -2.95720297E-17 2.15091759E+00 2.01483515E+00 2.13691296E-01 1.14746637E-16 -5.26515837E-01 -1.06647865E-17 -7.27270269E-01 3.12824541E-01 2.13462652E-01 -4.27249602E-17 7.32835943E-01 1.16427277E-16 3.82940207E-16 -9.46298596E-01 2.13691296E-01 -1.05637396E-16 -5.26515837E-01 9.59791441E-17 7.27270269E-01 3.12824541E-01 2.13691296E-01 -1.24127088E-16 -5.26515837E-01 -9.09239205E-17 -7.27270269E-01 3.12824541E-01 2.13462652E-01 2.48283744E-17 7.32835943E-01 -3.77224425E-17 2.74086309E-16 -9.46298596E-01 2.13691296E-01 2.56121418E-17 -5.26515837E-01 -9.46597560E-20 7.27270269E-01 3.12824541E-01 Mulliken Charges R N= 12 -1.86036168E-01 -1.85992013E-01 -1.86036168E-01 -1.86036168E-01 -1.85992013E-01 -1.86036168E-01 1.86023518E-01 1.86017314E-01 1.86023518E-01 1.86023518E-01 1.86017314E-01 1.86023518E-01 Optimization MaxStp I 100 Optimization Job offset I 0 Optimization Num results per geometry I 2 Optimization Num geometry variables I 36 Optimization Number of geometries I N= 1 0 avogadro-1.1.1/testfiles/benzene.mold0000644000175000001440000053066512250371054017050 0ustar marcususers[Molden Format] [Atoms] Angs C 1 6 0.930994 1.038515 0.000010 C 2 6 1.364881 -0.287183 0.000000 C 3 6 0.433896 -1.325522 -0.000010 C 4 6 -0.931154 -1.038429 -0.000010 C 5 6 -1.364890 0.287000 0.000000 C 6 6 -0.433729 1.325619 0.000010 H 7 1 -0.771849 2.358500 0.000020 H 8 1 1.656615 1.847713 0.000010 H 9 1 2.428455 -0.510808 -0.000010 H 10 1 0.771857 -2.358523 -0.000020 H 11 1 -1.656600 -1.847691 -0.000010 H 12 1 -2.428466 0.510811 0.000010 [GTO] 1 0 s 6 1.00 0.3047524880E+04 0.1834737132E-02 0.4573695180E+03 0.1403732281E-01 0.1039486850E+03 0.6884262227E-01 0.2921015530E+02 0.2321844432E+00 0.9286662960E+01 0.4679413484E+00 0.3163926960E+01 0.3623119853E+00 sp 3 1.00 0.7868272350E+01 -0.1193324198E+00 0.6899906659E-01 0.1881288540E+01 -0.1608541517E+00 0.3164239610E+00 0.5442492580E+00 0.1143456438E+01 0.7443082909E+00 sp 1 1.00 0.1687144782E+00 0.1000000000E+01 0.1000000000E+01 d 1 1.00 0.8000000000E+00 0.1000000000E+01 2 0 s 6 1.00 0.3047524880E+04 0.1834737132E-02 0.4573695180E+03 0.1403732281E-01 0.1039486850E+03 0.6884262227E-01 0.2921015530E+02 0.2321844432E+00 0.9286662960E+01 0.4679413484E+00 0.3163926960E+01 0.3623119853E+00 sp 3 1.00 0.7868272350E+01 -0.1193324198E+00 0.6899906659E-01 0.1881288540E+01 -0.1608541517E+00 0.3164239610E+00 0.5442492580E+00 0.1143456438E+01 0.7443082909E+00 sp 1 1.00 0.1687144782E+00 0.1000000000E+01 0.1000000000E+01 d 1 1.00 0.8000000000E+00 0.1000000000E+01 3 0 s 6 1.00 0.3047524880E+04 0.1834737132E-02 0.4573695180E+03 0.1403732281E-01 0.1039486850E+03 0.6884262227E-01 0.2921015530E+02 0.2321844432E+00 0.9286662960E+01 0.4679413484E+00 0.3163926960E+01 0.3623119853E+00 sp 3 1.00 0.7868272350E+01 -0.1193324198E+00 0.6899906659E-01 0.1881288540E+01 -0.1608541517E+00 0.3164239610E+00 0.5442492580E+00 0.1143456438E+01 0.7443082909E+00 sp 1 1.00 0.1687144782E+00 0.1000000000E+01 0.1000000000E+01 d 1 1.00 0.8000000000E+00 0.1000000000E+01 4 0 s 6 1.00 0.3047524880E+04 0.1834737132E-02 0.4573695180E+03 0.1403732281E-01 0.1039486850E+03 0.6884262227E-01 0.2921015530E+02 0.2321844432E+00 0.9286662960E+01 0.4679413484E+00 0.3163926960E+01 0.3623119853E+00 sp 3 1.00 0.7868272350E+01 -0.1193324198E+00 0.6899906659E-01 0.1881288540E+01 -0.1608541517E+00 0.3164239610E+00 0.5442492580E+00 0.1143456438E+01 0.7443082909E+00 sp 1 1.00 0.1687144782E+00 0.1000000000E+01 0.1000000000E+01 d 1 1.00 0.8000000000E+00 0.1000000000E+01 5 0 s 6 1.00 0.3047524880E+04 0.1834737132E-02 0.4573695180E+03 0.1403732281E-01 0.1039486850E+03 0.6884262227E-01 0.2921015530E+02 0.2321844432E+00 0.9286662960E+01 0.4679413484E+00 0.3163926960E+01 0.3623119853E+00 sp 3 1.00 0.7868272350E+01 -0.1193324198E+00 0.6899906659E-01 0.1881288540E+01 -0.1608541517E+00 0.3164239610E+00 0.5442492580E+00 0.1143456438E+01 0.7443082909E+00 sp 1 1.00 0.1687144782E+00 0.1000000000E+01 0.1000000000E+01 d 1 1.00 0.8000000000E+00 0.1000000000E+01 6 0 s 6 1.00 0.3047524880E+04 0.1834737132E-02 0.4573695180E+03 0.1403732281E-01 0.1039486850E+03 0.6884262227E-01 0.2921015530E+02 0.2321844432E+00 0.9286662960E+01 0.4679413484E+00 0.3163926960E+01 0.3623119853E+00 sp 3 1.00 0.7868272350E+01 -0.1193324198E+00 0.6899906659E-01 0.1881288540E+01 -0.1608541517E+00 0.3164239610E+00 0.5442492580E+00 0.1143456438E+01 0.7443082909E+00 sp 1 1.00 0.1687144782E+00 0.1000000000E+01 0.1000000000E+01 d 1 1.00 0.8000000000E+00 0.1000000000E+01 7 0 s 3 1.00 0.1873113696E+02 0.3349460434E-01 0.2825394365E+01 0.2347269535E+00 0.6401216923E+00 0.8137573261E+00 s 1 1.00 0.1612777588E+00 0.1000000000E+01 8 0 s 3 1.00 0.1873113696E+02 0.3349460434E-01 0.2825394365E+01 0.2347269535E+00 0.6401216923E+00 0.8137573261E+00 s 1 1.00 0.1612777588E+00 0.1000000000E+01 9 0 s 3 1.00 0.1873113696E+02 0.3349460434E-01 0.2825394365E+01 0.2347269535E+00 0.6401216923E+00 0.8137573261E+00 s 1 1.00 0.1612777588E+00 0.1000000000E+01 10 0 s 3 1.00 0.1873113696E+02 0.3349460434E-01 0.2825394365E+01 0.2347269535E+00 0.6401216923E+00 0.8137573261E+00 s 1 1.00 0.1612777588E+00 0.1000000000E+01 11 0 s 3 1.00 0.1873113696E+02 0.3349460434E-01 0.2825394365E+01 0.2347269535E+00 0.6401216923E+00 0.8137573261E+00 s 1 1.00 0.1612777588E+00 0.1000000000E+01 12 0 s 3 1.00 0.1873113696E+02 0.3349460434E-01 0.2825394365E+01 0.2347269535E+00 0.6401216923E+00 0.8137573261E+00 s 1 1.00 0.1612777588E+00 0.1000000000E+01 [MO] Ene= -10.1872 Spin= Alpha Occup= 2.000000 1 0.394300 2 0.019230 3 0.000090 4 0.000090 5 0.000000 6 -0.002410 7 -0.000280 8 -0.000260 9 0.000000 10 -0.003890 11 -0.003880 12 -0.003960 13 0.000050 14 0.000000 15 0.000000 16 0.391730 17 0.019100 18 0.000130 19 -0.000020 20 0.000000 21 -0.002430 22 -0.000360 23 0.000060 24 0.000000 25 -0.003810 26 -0.003900 27 -0.003940 28 -0.000020 29 0.000000 30 0.000000 31 0.403390 32 0.019680 33 0.000050 34 -0.000120 35 0.000000 36 -0.002540 37 -0.000140 38 0.000330 39 0.000000 40 -0.004000 41 -0.003930 42 -0.004050 43 -0.000030 44 0.000000 45 0.000000 46 0.412770 47 0.020150 48 -0.000080 49 -0.000100 50 0.000000 51 -0.002640 52 0.000220 53 0.000270 54 0.000000 55 -0.004060 56 -0.004050 57 -0.004140 58 0.000050 59 0.000000 60 0.000000 61 0.415700 62 0.020290 63 -0.000120 64 0.000030 65 0.000000 66 -0.002630 67 0.000360 68 -0.000080 69 0.000000 70 -0.004050 71 -0.004130 72 -0.004170 73 -0.000020 74 0.000000 75 0.000000 76 0.412250 77 0.020120 78 -0.000030 79 0.000120 80 0.000000 81 -0.002680 82 0.000070 83 -0.000330 84 0.000000 85 -0.004090 86 -0.004010 87 -0.004140 88 -0.000030 89 0.000000 90 0.000000 91 -0.000190 92 0.000910 93 -0.000190 94 0.000890 95 -0.000190 96 0.000880 97 -0.000190 98 0.000900 99 -0.000200 100 0.000920 101 -0.000200 102 0.000930 Ene= -10.1870 Spin= Alpha Occup= 2.000000 1 -0.274080 2 -0.013600 3 -0.000180 4 0.000190 5 0.000000 6 0.002690 7 0.000920 8 -0.000990 9 0.000000 10 0.002690 11 0.002620 12 0.002670 13 -0.000010 14 0.000000 15 0.000000 16 0.288720 17 0.014320 18 0.000040 19 0.000250 20 0.000000 21 -0.002850 22 -0.000140 23 -0.001330 24 0.000000 25 -0.002800 26 -0.002790 27 -0.002820 28 -0.000040 29 0.000000 30 0.000000 31 0.575060 32 0.028540 33 -0.000010 34 0.000030 35 0.000000 36 -0.005930 37 0.000120 38 -0.000380 39 0.000000 40 -0.005570 41 -0.005550 42 -0.005600 43 -0.000010 44 0.000000 45 0.000000 46 0.288690 47 0.014320 48 -0.000180 49 0.000190 50 0.000000 51 -0.002910 52 0.000900 53 -0.001010 54 0.000000 55 -0.002820 56 -0.002760 57 -0.002810 58 0.000000 59 0.000000 60 0.000000 61 -0.286590 62 -0.014220 63 0.000030 64 0.000260 65 0.000000 66 0.002880 67 -0.000130 68 -0.001350 69 0.000000 70 0.002780 71 0.002770 72 0.002790 73 0.000040 74 0.000000 75 0.000000 76 -0.574970 77 -0.028540 78 -0.000020 79 0.000040 80 0.000000 81 0.006010 82 0.000150 83 -0.000400 84 0.000000 85 0.005570 86 0.005540 87 0.005600 88 0.000010 89 0.000000 90 0.000000 91 0.000250 92 -0.000920 93 0.000120 94 -0.000450 95 -0.000120 96 0.000480 97 -0.000250 98 0.000920 99 -0.000120 100 0.000470 101 0.000120 102 -0.000470 Ene= -10.1870 Spin= Alpha Occup= 2.000000 1 0.503820 2 0.024990 3 -0.000130 4 0.000080 5 0.000000 6 -0.005100 7 0.000760 8 -0.000280 9 0.000000 10 -0.004860 11 -0.004890 12 -0.004910 13 0.000020 14 0.000000 15 0.000000 16 0.500800 17 0.024850 18 -0.000060 19 -0.000140 20 0.000000 21 -0.005080 22 0.000460 23 0.000690 24 0.000000 25 -0.004830 26 -0.004870 27 -0.004880 28 0.000010 29 0.000000 30 0.000000 31 0.009800 32 0.000480 33 -0.000280 34 -0.000090 35 0.000000 36 -0.000110 37 0.001480 38 0.000470 39 0.000000 40 -0.000070 41 -0.000110 42 -0.000100 43 -0.000030 44 0.000000 45 0.000000 46 -0.491970 47 -0.024420 48 -0.000140 49 0.000070 50 0.000000 51 0.005100 52 0.000800 53 -0.000270 54 0.000000 55 0.004740 56 0.004770 57 0.004790 58 -0.000020 59 0.000000 60 0.000000 61 -0.488040 62 -0.024230 63 -0.000070 64 -0.000140 65 0.000000 66 0.005060 67 0.000490 68 0.000710 69 0.000000 70 0.004700 71 0.004730 72 0.004750 73 -0.000010 74 0.000000 75 0.000000 76 0.017350 77 0.000860 78 -0.000280 79 -0.000090 80 0.000000 81 -0.000200 82 0.001470 83 0.000500 84 0.000000 85 -0.000190 86 -0.000140 87 -0.000170 88 0.000030 89 0.000000 90 0.000000 91 -0.000010 92 0.000030 93 -0.000220 94 0.000820 95 -0.000220 96 0.000810 97 0.000000 98 0.000020 99 0.000210 100 -0.000790 101 0.000210 102 -0.000780 Ene= -10.1864 Spin= Alpha Occup= 2.000000 1 -0.283700 2 -0.014300 3 0.000240 4 -0.000040 5 0.000000 6 0.005700 7 -0.001770 8 -0.000050 9 0.000000 10 0.002460 11 0.002650 12 0.002700 13 0.000050 14 0.000000 15 0.000000 16 -0.301830 17 -0.015210 18 0.000170 19 0.000170 20 0.000000 21 0.005920 22 -0.001440 23 -0.000980 24 0.000000 25 0.002740 26 0.002700 27 0.002870 28 -0.000120 29 0.000000 30 0.000000 31 0.570890 32 0.028780 33 -0.000070 34 0.000250 35 0.000000 36 -0.011380 37 0.000680 38 -0.002260 39 0.000000 40 -0.005040 41 -0.005230 42 -0.005430 43 0.000080 44 0.000000 45 0.000000 46 -0.266850 47 -0.013450 48 -0.000230 49 0.000050 50 0.000000 51 0.005300 52 0.001680 53 -0.000050 54 0.000000 55 0.002300 56 0.002500 57 0.002540 58 0.000050 59 0.000000 60 0.000000 61 -0.301840 62 -0.015220 63 -0.000170 64 -0.000160 65 0.000000 66 0.006150 67 0.001540 68 0.000930 69 0.000000 70 0.002730 71 0.002690 72 0.002870 73 -0.000120 74 0.000000 75 0.000000 76 0.571120 77 0.028800 78 0.000080 79 -0.000250 80 0.000000 81 -0.011610 82 -0.000750 83 0.002360 84 0.000000 85 -0.005040 86 -0.005220 87 -0.005430 88 0.000080 89 0.000000 90 0.000000 91 -0.000220 92 0.000640 93 0.000110 94 -0.000320 95 0.000110 96 -0.000360 97 -0.000210 98 0.000660 99 0.000100 100 -0.000320 101 0.000110 102 -0.000340 Ene= -10.1864 Spin= Alpha Occup= 2.000000 1 0.497220 2 0.025050 3 -0.000060 4 -0.000240 5 0.000000 6 -0.009690 7 0.000770 8 0.001910 9 0.000000 10 -0.004520 11 -0.004440 12 -0.004730 13 -0.000120 14 0.000000 15 0.000000 16 -0.480980 17 -0.024240 18 0.000180 19 -0.000170 20 0.000000 21 0.009370 22 -0.001670 23 0.001140 24 0.000000 25 0.004440 26 0.004220 27 0.004580 28 0.000010 29 0.000000 30 0.000000 31 -0.027790 32 -0.001410 33 0.000230 34 0.000060 35 0.000000 36 0.000790 37 -0.001470 38 -0.000210 39 0.000000 40 0.000180 41 0.000310 42 0.000260 43 0.000090 44 0.000000 45 0.000000 46 0.510740 47 0.025770 48 0.000070 49 0.000250 50 0.000000 51 -0.010540 52 -0.001030 53 -0.002180 54 0.000000 55 -0.004620 56 -0.004550 57 -0.004850 58 -0.000130 59 0.000000 60 0.000000 61 -0.495770 62 -0.025010 63 -0.000200 64 0.000160 65 0.000000 66 0.010240 67 0.002040 68 -0.001200 69 0.000000 70 0.004570 71 0.004340 72 0.004710 73 0.000010 74 0.000000 75 0.000000 76 -0.002800 77 -0.000130 78 -0.000220 79 -0.000070 80 0.000000 81 -0.000170 82 0.001350 83 0.000570 84 0.000000 85 -0.000040 86 0.000090 87 0.000030 88 0.000100 89 0.000000 90 0.000000 91 0.000000 92 -0.000030 93 -0.000180 94 0.000600 95 0.000180 96 -0.000580 97 0.000010 98 0.000000 99 -0.000200 100 0.000550 101 0.000190 102 -0.000540 Ene= -10.1861 Spin= Alpha Occup= 2.000000 1 -0.416590 2 -0.021630 3 0.000180 4 0.000210 5 0.000000 6 0.020640 7 -0.005680 8 -0.006380 9 0.000000 10 0.003520 11 0.003540 12 0.003740 13 0.000120 14 0.000000 15 0.000000 16 0.419080 17 0.021750 18 -0.000270 19 0.000060 20 0.000000 21 -0.020710 22 0.008370 23 -0.001770 24 0.000000 25 -0.003650 26 -0.003460 27 -0.003770 28 0.000050 29 0.000000 30 0.000000 31 -0.406810 32 -0.021140 33 0.000080 34 -0.000260 35 0.000000 36 0.020490 37 -0.002620 38 0.008100 39 0.000000 40 0.003360 41 0.003520 42 0.003650 43 -0.000070 44 0.000000 45 0.000000 46 0.397320 47 0.020660 48 0.000180 49 0.000200 50 0.000000 51 -0.020270 52 -0.005660 53 -0.006290 54 0.000000 55 -0.003350 56 -0.003370 57 -0.003560 58 -0.000120 59 0.000000 60 0.000000 61 -0.394550 62 -0.020510 63 -0.000260 64 0.000060 65 0.000000 66 0.020200 67 0.008270 68 -0.001740 69 0.000000 70 0.003430 71 0.003240 72 0.003530 73 -0.000050 74 0.000000 75 0.000000 76 0.398320 77 0.020710 78 0.000090 79 -0.000260 80 0.000000 81 -0.020340 82 -0.002670 83 0.008050 84 0.000000 85 -0.003280 86 -0.003450 87 -0.003570 88 0.000070 89 0.000000 90 0.000000 91 -0.000310 92 -0.000960 93 0.000320 94 0.000930 95 -0.000320 96 -0.000930 97 0.000310 98 0.000950 99 -0.000310 100 -0.000960 101 0.000310 102 0.000960 Ene= -0.8472 Spin= Alpha Occup= 2.000000 1 -0.094140 2 0.179660 3 -0.040540 4 -0.045170 5 0.000000 6 0.113810 7 -0.004800 8 -0.005350 9 0.000000 10 0.003030 11 0.003030 12 -0.010730 13 0.000010 14 0.000000 15 0.000000 16 -0.094130 17 0.179670 18 -0.059400 19 0.012460 20 0.000000 21 0.113690 22 -0.006930 23 0.001460 24 0.000000 25 0.003030 26 0.003010 27 -0.010720 28 0.000000 29 0.000000 30 0.000000 31 -0.094140 32 0.179660 33 -0.018850 34 0.057700 35 0.000000 36 0.113800 37 -0.002230 38 0.006820 39 0.000000 40 0.003020 41 0.003040 42 -0.010730 43 -0.000010 44 0.000000 45 0.000000 46 -0.094140 47 0.179670 48 0.040490 49 0.045210 50 0.000000 51 0.113800 52 0.004790 53 0.005340 54 0.000000 55 0.003020 56 0.003030 57 -0.010730 58 0.000010 59 0.000000 60 0.000000 61 -0.094140 62 0.179680 63 0.059390 64 -0.012520 65 0.000000 66 0.113710 67 0.006940 68 -0.001460 69 0.000000 70 0.003030 71 0.003020 72 -0.010720 73 0.000000 74 0.000000 75 0.000000 76 -0.094140 77 0.179670 78 0.018900 79 -0.057680 80 0.000000 81 0.113790 82 0.002220 83 -0.006810 84 0.000000 85 0.003020 86 0.003040 87 -0.010730 88 -0.000010 89 0.000000 90 0.000000 91 0.035450 92 0.004110 93 0.035450 94 0.004120 95 0.035450 96 0.004080 97 0.035450 98 0.004110 99 0.035460 100 0.004110 101 0.035450 102 0.004080 Ene= -0.7403 Spin= Alpha Occup= 2.000000 1 -0.089040 2 0.175680 3 -0.072800 4 0.045320 5 0.000000 6 0.131200 7 -0.005370 8 0.013900 9 0.000000 10 0.008080 11 -0.005530 12 -0.008670 13 0.000320 14 0.000000 15 0.000000 16 0.038600 17 -0.076170 18 0.028950 19 0.106350 20 0.000000 21 -0.056870 22 0.000660 23 0.017540 24 0.000000 25 -0.003940 26 0.002830 27 0.003750 28 -0.009460 29 0.000000 30 0.000000 31 0.127570 32 -0.251710 33 0.030900 34 -0.012270 35 0.000000 36 -0.187990 37 0.000820 38 0.010470 39 0.000000 40 -0.003590 41 -0.000080 42 0.012420 43 0.001460 44 0.000000 45 0.000000 46 0.088990 47 -0.175590 48 -0.072690 49 0.045250 50 0.000000 51 -0.131170 52 -0.005400 53 0.013860 54 0.000000 55 -0.008080 56 0.005520 57 0.008660 58 -0.000320 59 0.000000 60 0.000000 61 -0.038530 62 0.076020 63 0.028930 64 0.106330 65 0.000000 66 0.056810 67 0.000720 68 0.017530 69 0.000000 70 0.003940 71 -0.002830 72 -0.003750 73 0.009450 74 0.000000 75 0.000000 76 -0.127590 77 0.251760 78 0.031040 79 -0.012230 80 0.000000 81 0.188020 82 0.000820 83 0.010480 84 0.000000 85 0.003590 86 0.000070 87 -0.012420 88 -0.001470 89 0.000000 90 0.000000 91 0.076230 92 0.013900 93 0.053190 94 0.009700 95 -0.023060 96 -0.004190 97 -0.076210 98 -0.013900 99 -0.053170 100 -0.009720 101 0.023020 102 0.004210 Ene= -0.7403 Spin= Alpha Occup= 2.000000 1 0.095900 2 -0.189220 3 -0.047600 4 0.064150 5 0.000000 6 -0.141320 7 -0.014020 8 0.002790 9 0.000000 10 0.004830 11 -0.007590 12 0.009330 13 0.001370 14 0.000000 15 0.000000 16 0.125040 17 -0.246750 18 0.013440 19 -0.037420 20 0.000000 21 -0.184270 22 -0.010430 23 -0.003250 24 0.000000 25 -0.000100 26 -0.003490 27 0.012160 28 0.002580 29 0.000000 30 0.000000 31 0.029170 32 -0.057560 33 -0.105190 34 -0.039550 35 0.000000 36 -0.042960 37 -0.017480 38 -0.003340 39 0.000000 40 0.004800 41 -0.005640 42 0.002830 43 -0.008520 44 0.000000 45 0.000000 46 -0.095950 47 0.189340 48 -0.047680 49 0.064230 50 0.000000 51 0.141380 52 -0.014050 53 0.002760 54 0.000000 55 -0.004840 56 0.007590 57 -0.009330 58 -0.001370 59 0.000000 60 0.000000 61 -0.125060 62 0.246770 63 0.013410 64 -0.037570 65 0.000000 66 0.184280 67 -0.010450 68 -0.003260 69 0.000000 70 0.000090 71 0.003500 72 -0.012170 73 -0.002590 74 0.000000 75 0.000000 76 -0.029090 77 0.057400 78 -0.105150 79 -0.039510 80 0.000000 81 0.042880 82 -0.017460 83 -0.003400 84 0.000000 85 -0.004800 86 0.005640 87 -0.002830 88 0.008520 89 0.000000 90 0.000000 91 0.017390 92 0.003170 93 -0.057290 94 -0.010450 95 -0.074710 96 -0.013610 97 -0.017420 98 -0.003150 99 0.057330 100 0.010440 101 0.074710 102 0.013600 Ene= -0.5977 Spin= Alpha Occup= 2.000000 1 0.027040 2 -0.055920 3 0.135070 4 -0.146090 5 0.000000 6 -0.042240 7 0.028590 8 -0.046080 9 0.000000 10 -0.006980 11 0.008070 12 0.002150 13 -0.002570 14 0.000000 15 0.000000 16 -0.099140 17 0.205070 18 0.077550 19 0.036940 20 0.000000 21 0.154890 22 0.057460 23 0.001940 24 0.000000 25 0.001890 26 -0.005820 27 -0.007890 28 -0.004520 29 0.000000 30 0.000000 31 0.072090 32 -0.149110 33 0.123370 34 0.092620 35 0.000000 36 -0.112640 37 0.023890 38 0.050520 39 0.000000 40 0.001060 41 0.001800 42 0.005740 43 0.007840 44 0.000000 45 0.000000 46 0.027090 47 -0.056030 48 -0.135050 49 0.146160 50 0.000000 51 -0.042330 52 -0.028600 53 0.046100 54 0.000000 55 -0.006990 56 0.008060 57 0.002160 58 -0.002570 59 0.000000 60 0.000000 61 -0.099130 62 0.205070 63 -0.077520 64 -0.036870 65 0.000000 66 0.154900 67 -0.057440 68 -0.001880 69 0.000000 70 0.001890 71 -0.005820 72 -0.007890 73 -0.004520 74 0.000000 75 0.000000 76 0.072050 77 -0.149030 78 -0.123330 79 -0.092580 80 0.000000 81 -0.112580 82 -0.023850 83 -0.050490 84 0.000000 85 0.001060 86 0.001810 87 0.005740 88 0.007830 89 0.000000 90 0.000000 91 -0.080160 92 -0.026670 93 -0.030060 94 -0.010000 95 0.110320 96 0.036710 97 -0.080220 98 -0.026700 99 -0.030150 100 -0.010050 101 0.110300 102 0.036700 Ene= -0.5977 Spin= Alpha Occup= 2.000000 1 -0.098860 2 0.204490 3 0.085850 4 0.014450 5 0.000000 6 0.154470 7 0.047770 8 0.031890 9 0.000000 10 -0.004620 11 0.000690 12 -0.007870 13 0.005580 14 0.000000 15 0.000000 16 0.025960 17 -0.053690 18 0.023410 19 0.198110 20 0.000000 21 -0.040560 22 -0.003570 23 0.054100 24 0.000000 25 -0.003820 26 0.004860 27 0.002070 28 -0.007570 29 0.000000 30 0.000000 31 0.072850 32 -0.150690 33 -0.152850 34 0.002760 35 0.000000 36 -0.113840 37 -0.048810 38 0.027170 39 0.000000 40 0.007800 41 -0.004910 42 0.005800 43 -0.002680 44 0.000000 45 0.000000 46 -0.098830 47 0.204440 48 -0.085820 49 -0.014500 50 0.000000 51 0.154430 52 -0.047720 53 -0.031930 54 0.000000 55 -0.004620 56 0.000690 57 -0.007870 58 0.005580 59 0.000000 60 0.000000 61 0.026010 62 -0.053800 63 -0.023350 64 -0.198130 65 0.000000 66 -0.040650 67 0.003570 68 -0.054120 69 0.000000 70 -0.003830 71 0.004860 72 0.002070 73 -0.007560 74 0.000000 75 0.000000 76 0.072870 77 -0.150740 78 0.152930 79 -0.002790 80 0.000000 81 -0.113870 82 0.048870 83 -0.027170 84 0.000000 85 0.007800 86 -0.004910 87 0.005800 88 -0.002680 89 0.000000 90 0.000000 91 -0.081110 92 -0.027000 93 0.109990 94 0.036610 95 -0.028870 96 -0.009600 97 -0.081040 98 -0.026970 99 0.109970 100 0.036600 101 -0.028960 102 -0.009640 Ene= -0.5190 Spin= Alpha Occup= 2.000000 1 -0.008630 2 0.018150 3 0.132840 4 0.148150 5 0.000000 6 0.031030 7 0.045490 8 0.050790 9 0.000000 10 0.002070 11 0.001720 12 -0.000140 13 -0.001860 14 0.000000 15 0.000000 16 -0.008660 17 0.018170 18 0.194770 19 -0.040950 20 0.000000 21 0.031300 22 0.066580 23 -0.013990 24 0.000000 25 0.000420 26 0.003370 27 -0.000150 28 0.000750 29 0.000000 30 0.000000 31 -0.008630 32 0.018140 33 0.061890 34 -0.189140 35 0.000000 36 0.031050 37 0.021200 38 -0.064800 39 0.000000 40 0.003200 41 0.000580 42 -0.000140 43 0.001110 44 0.000000 45 0.000000 46 -0.008660 47 0.018200 48 -0.132870 49 -0.148210 50 0.000000 51 0.031130 52 -0.045480 53 -0.050770 54 0.000000 55 0.002070 56 0.001720 57 -0.000140 58 -0.001850 59 0.000000 60 0.000000 61 -0.008630 62 0.018110 63 -0.194730 64 0.040960 65 0.000000 66 0.031180 67 -0.066610 68 0.014000 69 0.000000 70 0.000420 71 0.003380 72 -0.000140 73 0.000750 74 0.000000 75 0.000000 76 -0.008660 77 0.018190 78 -0.061910 79 0.189190 80 0.000000 81 0.031160 82 -0.021190 83 0.064780 84 0.000000 85 0.003190 86 0.000580 87 -0.000140 88 0.001100 89 0.000000 90 0.000000 91 0.108330 92 0.067060 93 0.108260 94 0.067020 95 0.108300 96 0.067100 97 0.108260 98 0.067020 99 0.108320 100 0.067070 101 0.108260 102 0.067060 Ene= -0.4589 Spin= Alpha Occup= 2.000000 1 -0.059170 2 0.121340 3 0.089490 4 0.099780 5 0.000000 6 0.161530 7 0.025980 8 0.028960 9 0.000000 10 -0.003050 11 0.000030 12 -0.004680 13 0.016250 14 0.000000 15 0.000000 16 0.059160 17 -0.121330 18 -0.131100 19 0.027580 20 0.000000 21 -0.161520 22 -0.038060 23 0.008000 24 0.000000 25 -0.011450 26 0.014470 27 0.004680 28 0.006580 29 0.000000 30 0.000000 31 -0.059160 32 0.121330 33 0.041650 34 -0.127430 35 0.000000 36 0.161520 37 0.012100 38 -0.036990 39 0.000000 40 -0.012930 41 0.009910 42 -0.004680 43 -0.009660 44 0.000000 45 0.000000 46 0.059160 47 -0.121330 48 0.089430 49 0.099740 50 0.000000 51 -0.161510 52 0.025960 53 0.028930 54 0.000000 55 0.003050 56 -0.000030 57 0.004680 58 -0.016250 59 0.000000 60 0.000000 61 -0.059160 62 0.121330 63 -0.131180 64 0.027640 65 0.000000 66 0.161540 67 -0.038090 68 0.008010 69 0.000000 70 0.011450 71 -0.014470 72 -0.004680 73 -0.006590 74 0.000000 75 0.000000 76 0.059160 77 -0.121320 78 0.041700 79 -0.127340 80 0.000000 81 -0.161500 82 0.012100 83 -0.036950 84 0.000000 85 0.012930 86 -0.009910 87 0.004680 88 0.009670 89 0.000000 90 0.000000 91 -0.140710 92 -0.098090 93 0.140730 94 0.098100 95 -0.140700 96 -0.098070 97 0.140750 98 0.098120 99 -0.140690 100 -0.098080 101 0.140740 102 0.098110 Ene= -0.4386 Spin= Alpha Occup= 2.000000 1 0.000000 2 -0.000010 3 0.204900 4 -0.183750 5 0.000000 6 0.000050 7 0.068750 8 -0.061680 9 0.000000 10 -0.003300 11 0.003310 12 0.000000 13 -0.000420 14 0.000000 15 0.000000 16 0.000000 17 0.000010 18 0.056650 19 0.269330 20 0.000000 21 0.000020 22 0.019020 23 0.090400 24 0.000000 25 -0.001330 26 0.001340 27 0.000000 28 -0.003520 29 0.000000 30 0.000000 31 0.000010 32 -0.000020 33 -0.261560 34 -0.085600 35 0.000000 36 0.000030 37 -0.087820 38 -0.028720 39 0.000000 40 0.001970 41 -0.001960 42 0.000000 43 -0.003100 44 0.000000 45 0.000000 46 0.000000 47 0.000000 48 0.204900 49 -0.183740 50 0.000000 51 -0.000010 52 0.068780 53 -0.061690 54 0.000000 55 0.003310 56 -0.003310 57 0.000000 58 0.000430 59 0.000000 60 0.000000 61 0.000010 62 -0.000020 63 0.056660 64 0.269330 65 0.000000 66 0.000020 67 0.019040 68 0.090380 69 0.000000 70 0.001340 71 -0.001340 72 0.000000 73 0.003520 74 0.000000 75 0.000000 76 0.000000 77 0.000000 78 -0.261560 79 -0.085610 80 0.000000 81 0.000000 82 -0.087830 83 -0.028750 84 0.000000 85 -0.001970 86 0.001970 87 0.000000 88 0.003100 89 0.000000 90 0.000000 91 0.000010 92 0.000020 93 -0.000010 94 0.000000 95 0.000020 96 0.000020 97 0.000010 98 0.000010 99 0.000030 100 0.000030 101 0.000010 102 0.000010 Ene= -0.4174 Spin= Alpha Occup= 2.000000 1 0.016400 2 -0.037890 3 0.187890 4 0.116110 5 0.000000 6 -0.065550 7 0.033110 8 0.058590 9 0.000000 10 -0.006020 11 0.011930 12 0.000510 13 0.004780 14 0.000000 15 0.000000 16 -0.006610 17 0.015280 18 -0.100740 19 -0.063400 20 0.000000 21 0.026400 22 -0.021960 23 0.024330 24 0.000000 25 0.001460 26 -0.003840 27 -0.000200 28 0.012860 29 0.000000 30 0.000000 31 -0.023020 32 0.053190 33 -0.111900 34 0.275990 35 0.000000 36 0.091960 37 -0.024090 38 0.089050 39 0.000000 40 0.003270 41 -0.011540 42 -0.000710 43 0.002270 44 0.000000 45 0.000000 46 -0.016400 47 0.037900 48 0.187640 49 0.116160 50 0.000000 51 0.065630 52 0.033070 53 0.058630 54 0.000000 55 0.006020 56 -0.011910 57 -0.000510 58 -0.004780 59 0.000000 60 0.000000 61 0.006610 62 -0.015270 63 -0.100480 64 -0.063510 65 0.000000 66 -0.026510 67 -0.021960 68 0.024310 69 0.000000 70 -0.001480 71 0.003850 72 0.000200 73 -0.012860 74 0.000000 75 0.000000 76 0.023020 77 -0.053200 78 -0.112100 79 0.276090 80 0.000000 81 -0.091940 82 -0.024130 83 0.089040 84 0.000000 85 -0.003280 86 0.011560 87 0.000710 88 -0.002270 89 0.000000 90 0.000000 91 0.161470 92 0.153210 93 0.115100 94 0.109190 95 -0.046480 96 -0.044100 97 -0.161370 98 -0.153110 99 -0.115010 100 -0.109100 101 0.046290 102 0.043910 Ene= -0.4174 Spin= Alpha Occup= 2.000000 1 0.017110 2 -0.039540 3 0.102960 4 0.204190 5 0.000000 6 -0.068380 7 0.056010 8 0.041690 9 0.000000 10 0.010570 11 -0.004420 12 0.000530 13 0.007110 14 0.000000 15 0.000000 16 0.022760 17 -0.052630 18 0.282650 19 -0.083910 20 0.000000 21 -0.090970 22 0.090280 23 -0.013220 24 0.000000 25 0.011870 26 -0.003690 27 0.000700 28 0.000170 29 0.000000 30 0.000000 31 0.005650 32 -0.013080 33 -0.056950 34 -0.095590 35 0.000000 36 -0.022490 37 0.025510 38 -0.015420 39 0.000000 40 0.006340 41 -0.004300 42 0.000170 43 -0.011820 44 0.000000 45 0.000000 46 -0.017100 47 0.039550 48 0.103040 49 0.204440 50 0.000000 51 0.068310 52 0.056000 53 0.041700 54 0.000000 55 -0.010580 56 0.004420 57 -0.000530 58 -0.007120 59 0.000000 60 0.000000 61 -0.022760 62 0.052630 63 0.282610 64 -0.084150 65 0.000000 66 0.090950 67 0.090270 68 -0.013280 69 0.000000 70 -0.011880 71 0.003690 72 -0.000700 73 -0.000180 74 0.000000 75 0.000000 76 -0.005650 77 0.013070 78 -0.056900 79 -0.095290 80 0.000000 81 0.022600 82 0.025550 83 -0.015400 84 0.000000 85 -0.006340 86 0.004310 87 -0.000170 88 0.011800 89 0.000000 90 0.000000 91 -0.039560 92 -0.037560 93 0.119900 94 0.113800 95 0.159620 96 0.151500 97 0.039740 98 0.037740 99 -0.120060 100 -0.113970 101 -0.159620 102 -0.151500 Ene= -0.3600 Spin= Alpha Occup= 2.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.222060 6 0.000000 7 0.000000 8 0.000000 9 0.128610 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.006420 15 -0.007150 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.222060 21 0.000000 22 0.000000 23 0.000000 24 0.128570 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 -0.009400 30 0.001970 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.222060 36 0.000000 37 0.000000 38 0.000000 39 0.128610 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.002980 45 0.009130 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.222070 51 0.000000 52 0.000000 53 0.000000 54 0.128620 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.006410 60 0.007160 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 0.222070 66 0.000000 67 0.000000 68 0.000000 69 0.128580 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.009400 75 -0.001980 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.222060 81 0.000000 82 0.000000 83 0.000000 84 0.128610 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 0.002990 90 -0.009130 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= -0.3402 Spin= Alpha Occup= 2.000000 1 0.000510 2 -0.002040 3 -0.184080 4 0.194700 5 0.000000 6 0.002400 7 -0.075340 8 0.072650 9 0.000000 10 0.010160 11 -0.009300 12 -0.000110 13 0.003390 14 0.000000 15 0.000000 16 0.004080 17 -0.016700 18 0.147540 19 -0.190560 20 0.000000 21 0.021020 22 0.018200 23 -0.066320 24 0.000000 25 0.020150 26 -0.012980 27 -0.000910 28 -0.001040 29 0.000000 30 0.000000 31 -0.004570 32 0.018690 33 -0.169400 34 0.160810 35 0.000000 36 -0.023510 37 -0.052310 38 0.019970 39 0.000000 40 0.012450 41 -0.020500 42 0.001010 43 0.007990 44 0.000000 45 0.000000 46 0.000470 47 -0.001950 48 0.184310 49 -0.194470 50 0.000000 51 0.002580 52 0.075420 53 -0.072540 54 0.000000 55 0.010160 56 -0.009310 57 -0.000110 58 0.003380 59 0.000000 60 0.000000 61 0.004070 62 -0.016680 63 -0.147440 64 0.190470 65 0.000000 66 0.021070 67 -0.018160 68 0.066300 69 0.000000 70 0.020140 71 -0.012960 72 -0.000910 73 -0.001060 74 0.000000 75 0.000000 76 -0.004550 77 0.018630 78 0.169300 79 -0.160620 80 0.000000 81 -0.023600 82 0.052250 83 -0.019890 84 0.000000 85 0.012440 86 -0.020480 87 0.001010 88 0.008000 89 0.000000 90 0.000000 91 -0.155560 92 -0.177980 93 0.016680 94 0.019100 95 0.139070 96 0.159120 97 -0.155690 98 -0.178120 99 0.016520 100 0.018930 101 0.139010 102 0.159060 Ene= -0.3402 Spin= Alpha Occup= 2.000000 1 0.004990 2 -0.020410 3 0.169310 4 0.149870 5 0.000000 6 0.025730 7 0.033310 8 0.021870 9 0.000000 10 0.001370 11 0.007420 12 -0.001110 13 0.021680 14 0.000000 15 0.000000 16 -0.002890 17 0.011880 18 -0.173220 19 -0.186570 20 0.000000 21 -0.015110 22 -0.039570 23 -0.079040 24 0.000000 25 -0.009440 26 0.004300 27 0.000650 28 0.013790 29 0.000000 30 0.000000 31 -0.002060 32 0.008460 33 0.203150 34 0.164560 35 0.000000 36 -0.010760 37 0.085980 38 0.044900 39 0.000000 40 -0.000860 41 -0.002790 42 0.000460 43 0.013890 44 0.000000 45 0.000000 46 0.004980 47 -0.020390 48 -0.169290 49 -0.149770 50 0.000000 51 0.025750 52 -0.033300 53 -0.021820 54 0.000000 55 0.001350 56 0.007440 57 -0.001110 58 0.021680 59 0.000000 60 0.000000 61 -0.002930 62 0.011970 63 0.173510 64 0.186520 65 0.000000 66 -0.014950 67 0.039690 68 0.079040 69 0.000000 70 -0.009440 71 0.004300 72 0.000650 73 0.013800 74 0.000000 75 0.000000 76 -0.002080 77 0.008510 78 -0.203130 79 -0.164780 80 0.000000 81 -0.010660 82 -0.085950 83 -0.044990 84 0.000000 85 -0.000860 86 -0.002790 87 0.000460 88 0.013910 89 0.000000 90 0.000000 91 -0.070750 92 -0.080950 93 0.170150 94 0.194680 95 -0.099360 96 -0.113680 97 -0.070640 98 -0.080830 99 0.170100 100 0.194610 101 -0.099510 102 -0.113840 Ene= -0.2465 Spin= Alpha Occup= 2.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.310100 6 0.000000 7 0.000000 8 0.000000 9 0.222410 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.008780 15 0.001800 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.034300 21 0.000000 22 0.000000 23 0.000000 24 0.024630 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.003370 30 0.018450 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 -0.275590 36 0.000000 37 0.000000 38 0.000000 39 -0.197700 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 0.011720 45 -0.000390 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 -0.310030 51 0.000000 52 0.000000 53 0.000000 54 -0.222380 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.008760 60 0.001790 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 -0.034500 66 0.000000 67 0.000000 68 0.000000 69 -0.024740 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.003370 75 0.018460 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.275730 81 0.000000 82 0.000000 83 0.000000 84 0.197780 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 0.011740 90 -0.000390 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= -0.2465 Spin= Alpha Occup= 2.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.139210 6 0.000000 7 0.000000 8 0.000000 9 0.099840 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.011450 15 -0.012990 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.338210 21 0.000000 22 0.000000 23 0.000000 24 0.242560 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 -0.005220 30 -0.000860 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.198970 36 0.000000 37 0.000000 38 0.000000 39 0.142670 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 0.013640 45 0.007510 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 -0.139390 51 0.000000 52 0.000000 53 0.000000 54 -0.099940 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.011450 60 -0.012990 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 -0.338180 66 0.000000 67 0.000000 68 0.000000 69 -0.242540 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 -0.005220 75 -0.000840 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 -0.198810 81 0.000000 82 0.000000 83 0.000000 84 -0.142580 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 0.013630 90 0.007510 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 0.0040 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 -0.149870 6 0.000010 7 0.000000 8 0.000000 9 -0.199690 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.017420 15 -0.021640 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.362860 21 0.000000 22 0.000010 23 -0.000010 24 0.483460 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.011240 30 0.000700 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 -0.212920 36 0.000010 37 0.000000 38 0.000010 39 -0.283770 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 0.021230 45 0.013650 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 -0.150000 51 -0.000010 52 0.000000 53 0.000000 54 -0.199950 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.017420 60 0.021640 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 0.362870 66 0.000000 67 0.000010 68 -0.000010 69 0.483460 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 -0.011240 75 -0.000690 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 -0.212830 81 -0.000010 82 0.000000 83 0.000010 84 -0.283570 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 -0.021220 90 -0.013650 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 -0.000010 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000010 Ene= 0.0040 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.332450 6 0.000000 7 0.000000 8 0.000000 9 0.442930 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.015850 15 -0.000860 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 -0.036270 21 0.000000 22 0.000000 23 0.000000 24 -0.048280 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.005100 30 0.029510 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 -0.296060 36 0.000000 37 0.000000 38 0.000000 39 -0.394390 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.019440 45 0.002960 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.332380 51 0.000000 52 0.000000 53 0.000000 54 0.442820 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.015840 60 0.000850 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 -0.036410 66 0.000000 67 0.000000 68 0.000000 69 -0.048550 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 -0.005100 75 -0.029510 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 -0.296120 81 0.000000 82 0.000000 83 0.000000 84 -0.394520 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 0.019450 90 -0.002960 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 0.0907 Spin= Alpha Occup= 0.000000 1 0.039230 2 -0.067780 3 -0.084480 4 -0.094220 5 0.000000 6 -0.512090 7 -0.187740 8 -0.209390 9 0.000000 10 0.002070 11 0.005550 12 0.000120 13 0.018380 14 0.000000 15 0.000000 16 0.039240 17 -0.067740 18 -0.123800 19 0.026020 20 0.000000 21 -0.512430 22 -0.274890 23 0.057840 24 0.000000 25 0.018460 26 -0.010840 27 0.000120 28 -0.007440 29 0.000000 30 0.000000 31 0.039230 32 -0.067770 33 -0.039330 34 0.120290 35 0.000000 36 -0.512040 37 -0.087340 38 0.267370 39 0.000000 40 -0.009100 41 0.016740 42 0.000120 43 -0.010930 44 0.000000 45 0.000000 46 0.039230 47 -0.067780 48 0.084430 49 0.094230 50 0.000000 51 -0.512020 52 0.187680 53 0.209470 54 0.000000 55 0.002070 56 0.005550 57 0.000110 58 0.018380 59 0.000000 60 0.000000 61 0.039240 62 -0.067740 63 0.123820 64 -0.026070 65 0.000000 66 -0.512510 67 0.274850 68 -0.057940 69 0.000000 70 0.018460 71 -0.010840 72 0.000120 73 -0.007450 74 0.000000 75 0.000000 76 0.039230 77 -0.067760 78 0.039350 79 -0.120260 80 0.000000 81 -0.511960 82 0.087440 83 -0.267350 84 0.000000 85 -0.009100 86 0.016740 87 0.000120 88 -0.010930 89 0.000000 90 0.000000 91 0.060110 92 0.731330 93 0.060110 94 0.731320 95 0.060100 96 0.731130 97 0.060120 98 0.731340 99 0.060100 100 0.731310 101 0.060110 102 0.731150 Ene= 0.1447 Spin= Alpha Occup= 0.000000 1 -0.030510 2 0.030170 3 0.119570 4 0.157670 5 0.000000 6 0.763540 7 0.417070 8 0.267000 9 0.000000 10 -0.005740 11 0.005710 12 -0.002830 13 -0.009270 14 0.000000 15 0.000000 16 0.005200 17 -0.005120 18 -0.027730 19 0.032590 20 0.000000 21 -0.130390 22 -0.124160 23 -0.192650 24 0.000000 25 0.005430 26 -0.005420 27 0.000490 28 0.010610 29 0.000000 30 0.000000 31 0.035790 32 -0.035400 33 -0.062360 34 0.222610 35 0.000000 36 -0.895240 37 -0.251530 38 0.505740 39 0.000010 40 -0.004540 41 0.004580 42 0.003320 43 -0.009630 44 0.000000 45 0.000000 46 0.030550 47 -0.030240 48 0.119560 49 0.157560 50 0.000000 51 -0.764140 52 0.417190 53 0.266760 54 0.000000 55 0.005720 56 -0.005690 57 0.002830 58 0.009260 59 0.000000 60 0.000000 61 -0.005270 62 0.005240 63 -0.027640 64 0.032590 65 0.000000 66 0.131530 67 -0.124130 68 -0.192640 69 0.000000 70 -0.005420 71 0.005410 72 -0.000490 73 -0.010610 74 0.000000 75 0.000000 76 -0.035750 77 0.035340 78 -0.062310 79 0.222620 80 0.000000 81 0.894700 82 -0.251300 83 0.505740 84 0.000010 85 0.004540 86 -0.004570 87 -0.003320 88 0.009660 89 0.000000 90 0.000000 91 -0.041940 92 -1.136000 93 -0.035800 94 -0.969820 95 0.006150 96 0.166140 97 0.041940 98 1.136200 99 0.035790 100 0.969920 101 -0.006130 102 -0.166430 Ene= 0.1447 Spin= Alpha Occup= 0.000000 1 -0.023710 2 0.023450 3 0.117570 4 0.099900 5 0.000000 6 0.592960 7 0.119650 8 0.389490 9 0.000000 10 0.009000 11 -0.009030 12 -0.002200 13 -0.005470 14 0.000000 15 0.000000 16 -0.038280 17 0.037810 18 0.242620 19 -0.047410 20 0.000000 21 0.957820 22 0.579070 23 -0.151940 24 -0.000010 25 -0.007870 26 0.007830 27 -0.003560 28 0.005810 29 0.000000 30 0.000000 31 -0.014580 32 0.014380 33 0.052600 34 -0.082100 35 0.000000 36 0.365060 37 -0.119200 38 -0.279190 39 0.000000 40 0.008690 41 -0.008710 42 -0.001360 43 -0.006820 44 0.000000 45 0.000000 46 0.023650 47 -0.023350 48 0.117620 49 0.099910 50 0.000000 51 -0.592010 52 0.119720 53 0.389400 54 0.000000 55 -0.009020 56 0.009040 57 0.002200 58 0.005480 59 0.000000 60 0.000000 61 0.038280 62 -0.037810 63 0.242690 64 -0.047360 65 0.000000 66 -0.957860 67 0.579270 68 -0.151700 69 -0.000010 70 0.007860 71 -0.007820 72 0.003560 73 -0.005830 74 0.000000 75 0.000000 76 0.014640 77 -0.014480 78 0.052530 79 -0.082020 80 0.000000 81 -0.366040 82 -0.119380 83 -0.279150 84 0.000000 85 -0.008670 86 0.008700 87 0.001360 88 0.006820 89 0.000000 90 0.000000 91 0.017110 92 0.464090 93 -0.027740 94 -0.752100 95 -0.044850 96 -1.215700 97 -0.017130 98 -0.463900 99 0.027740 100 0.751830 101 0.044860 102 1.215880 Ene= 0.1649 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 -0.291730 6 -0.000030 7 -0.000010 8 0.000000 9 -0.542380 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.011300 15 -0.012590 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.291700 21 0.000030 22 0.000020 23 -0.000010 24 0.542410 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.016560 30 -0.003480 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 -0.291710 36 -0.000010 37 -0.000010 38 0.000010 39 -0.542380 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.005260 45 0.016080 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.291720 51 -0.000030 52 0.000010 53 0.000000 54 0.542350 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.011300 60 -0.012600 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 -0.291680 66 0.000030 67 -0.000020 68 0.000010 69 -0.542370 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.016560 75 -0.003490 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.291710 81 -0.000010 82 0.000010 83 -0.000010 84 0.542370 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 -0.005270 90 0.016080 91 0.000000 92 0.000010 93 0.000000 94 0.000020 95 0.000000 96 -0.000030 97 0.000000 98 0.000010 99 0.000000 100 0.000020 101 0.000000 102 -0.000030 Ene= 0.1823 Spin= Alpha Occup= 0.000000 1 -0.088030 2 0.131270 3 0.072450 4 0.097120 5 -0.000010 6 1.569800 7 0.320390 8 0.443340 9 -0.000010 10 -0.006860 11 -0.001760 12 -0.003130 13 0.011160 14 0.000000 15 0.000000 16 0.033760 17 -0.050340 18 -0.060940 19 -0.064900 20 0.000000 21 -0.602310 22 -0.286650 23 -0.349730 24 0.000010 25 -0.005960 26 0.009260 27 0.001200 28 -0.009100 29 0.000000 30 0.000000 31 0.054310 32 -0.080990 33 0.038690 34 0.091030 35 0.000000 36 -0.968530 37 0.221860 38 0.425900 39 -0.000010 40 0.012780 41 -0.007460 42 0.001930 43 -0.004030 44 0.000000 45 0.000000 46 -0.088050 47 0.131300 48 -0.072320 49 -0.097300 50 0.000010 51 1.570190 52 -0.320020 53 -0.444040 54 0.000010 55 -0.006860 56 -0.001760 57 -0.003130 58 0.011160 59 0.000000 60 0.000000 61 0.033730 62 -0.050310 63 0.060850 64 0.064820 65 0.000000 66 -0.601280 67 0.286540 68 0.349500 69 -0.000010 70 -0.005960 71 0.009250 72 0.001200 73 -0.009100 74 0.000000 75 0.000000 76 0.054280 77 -0.080940 78 -0.038590 79 -0.090930 80 0.000000 81 -0.967940 82 -0.221460 83 -0.425500 84 0.000010 85 0.012770 86 -0.007460 87 0.001930 88 -0.004040 89 0.000000 90 0.000000 91 0.009640 92 0.771260 93 -0.015610 94 -1.250520 95 0.005980 96 0.479620 97 0.009630 98 0.771730 99 -0.015610 100 -1.251080 101 0.006000 102 0.479070 Ene= 0.1823 Spin= Alpha Occup= 0.000000 1 0.011880 2 -0.017720 3 -0.071510 4 0.042210 5 0.000010 6 -0.212170 7 -0.368910 8 0.232250 9 0.000020 10 -0.010220 11 0.011380 12 0.000420 13 -0.002920 14 0.000000 15 0.000000 16 -0.082170 17 0.122540 18 0.103850 19 -0.053630 20 -0.000010 21 1.465390 22 0.463150 23 -0.265280 24 -0.000020 25 0.002720 26 -0.010760 27 -0.002920 28 -0.008750 29 0.000000 30 0.000000 31 0.070290 32 -0.104830 33 -0.077600 34 0.075990 35 0.000010 36 -1.253410 37 -0.386610 38 0.330500 39 0.000020 40 0.005790 41 0.001090 42 0.002500 43 0.011710 44 0.000000 45 0.000000 46 0.011850 47 -0.017690 48 0.071470 49 -0.042260 50 -0.000010 51 -0.211160 52 0.368840 53 -0.232220 54 -0.000020 55 -0.010230 56 0.011380 57 0.000420 58 -0.002910 59 0.000000 60 0.000000 61 -0.082180 62 0.122570 63 -0.103800 64 0.053830 65 0.000010 66 1.465590 67 -0.463090 68 0.266020 69 0.000020 70 0.002720 71 -0.010770 72 -0.002920 73 -0.008760 74 0.000000 75 0.000000 76 0.070320 77 -0.104880 78 0.077820 79 -0.076010 80 -0.000010 81 -1.254200 82 0.387350 83 -0.330620 84 -0.000020 85 0.005790 86 0.001090 87 0.002500 88 0.011720 89 0.000000 90 0.000000 91 0.012470 92 0.999320 93 0.002090 94 0.168830 95 -0.014580 96 -1.167500 97 0.012470 98 0.998520 99 0.002110 100 0.168410 101 -0.014570 102 -1.167580 Ene= 0.1907 Spin= Alpha Occup= 0.000000 1 0.054870 2 -0.159850 3 -0.051780 4 -0.057680 5 0.000000 6 0.221920 7 -0.836670 8 -0.932590 9 0.000000 10 0.012470 11 0.010790 12 -0.007590 13 -0.008880 14 0.000000 15 0.000000 16 -0.054870 17 0.159870 18 0.075890 19 -0.015900 20 0.000000 21 -0.221700 22 1.226360 23 -0.257530 24 -0.000010 25 -0.004550 26 -0.018710 27 0.007590 28 -0.003600 29 0.000000 30 0.000000 31 0.054860 32 -0.159840 33 -0.024060 34 0.073690 35 0.000000 36 0.222110 37 -0.389380 38 1.190840 39 0.000010 40 0.017870 41 0.005390 42 -0.007590 43 0.005280 44 0.000000 45 0.000000 46 -0.054860 47 0.159850 48 -0.051680 49 -0.057740 50 0.000000 51 -0.221900 52 -0.836200 53 -0.933080 54 0.000000 55 -0.012470 56 -0.010790 57 0.007590 58 0.008880 59 0.000000 60 0.000000 61 0.054860 62 -0.159840 63 0.075850 64 -0.016010 65 0.000000 66 0.222060 67 1.226000 68 -0.258150 69 -0.000010 70 0.004550 71 0.018710 72 -0.007590 73 0.003600 74 0.000000 75 0.000000 76 -0.054860 77 0.159860 78 -0.024150 79 0.073650 80 0.000000 81 -0.221910 82 -0.389960 83 1.190780 84 0.000010 85 -0.017870 86 -0.005390 87 0.007590 88 -0.005280 89 0.000000 90 0.000000 91 -0.047460 92 -1.221880 93 0.047460 94 1.221700 95 -0.047460 96 -1.222070 97 0.047470 98 1.221650 99 -0.047450 100 -1.221770 101 0.047470 102 1.221660 Ene= 0.3034 Spin= Alpha Occup= 0.000000 1 0.052410 2 -0.058550 3 0.116010 4 0.147790 5 0.000000 6 -1.404550 7 0.283510 8 1.221940 9 0.000000 10 -0.020700 11 0.025500 12 0.000790 13 -0.003230 14 0.000000 15 0.000000 16 -0.070420 17 0.078800 18 -0.246140 19 0.057510 20 0.000000 21 1.885690 22 -1.400100 23 0.537490 24 0.000010 25 0.000620 26 -0.007050 27 -0.001070 28 0.009420 29 0.000000 30 0.000000 31 0.017990 32 -0.020140 33 0.005340 34 -0.066630 35 0.000000 36 -0.480580 37 -0.669270 38 -0.620770 39 -0.000010 40 -0.018210 41 0.019860 42 0.000280 43 0.029870 44 0.000000 45 0.000000 46 0.052080 47 -0.058260 48 -0.116810 49 -0.146790 50 0.000000 51 -1.393350 52 -0.288630 53 -1.216730 54 0.000000 55 -0.020650 56 0.025410 57 0.000800 58 -0.002970 59 0.000000 60 0.000000 61 -0.070400 62 0.078780 63 0.246630 64 -0.055300 65 0.000000 66 1.885100 67 1.402900 68 -0.524560 69 -0.000010 70 0.000540 71 -0.006970 72 -0.001070 73 0.009260 74 0.000000 75 0.000000 76 0.018350 77 -0.020460 78 -0.004460 79 0.067160 80 0.000000 81 -0.492490 82 0.674740 83 0.623160 84 0.000010 85 -0.018040 86 0.019740 87 0.000280 88 0.030100 89 0.000000 90 0.000000 91 -0.005410 92 -0.238260 93 -0.014610 94 -0.687060 95 0.019090 96 0.927070 97 -0.004480 98 -0.240010 99 -0.013750 100 -0.688740 101 0.019010 102 0.927270 Ene= 0.3034 Spin= Alpha Occup= 0.000000 1 0.051020 2 -0.057110 3 0.130670 4 0.129270 5 0.000000 6 -1.365270 7 1.170570 8 0.394550 9 0.000000 10 0.025860 11 -0.021190 12 0.000780 13 0.002880 14 0.000000 15 0.000000 16 0.019470 17 -0.021830 18 0.072260 19 0.001070 20 0.000000 21 -0.519810 22 0.574730 23 0.723860 24 0.000010 25 0.013830 26 -0.012060 27 0.000300 28 0.033750 29 0.000000 30 0.000000 31 -0.070900 32 0.079300 33 -0.084030 34 0.239890 35 0.000000 36 1.898970 37 -0.672060 38 1.347120 39 0.000010 40 -0.008390 41 0.001900 42 -0.001070 43 0.007570 44 0.000000 45 0.000000 46 0.051270 47 -0.057330 48 -0.132160 49 -0.128130 50 0.000000 51 -1.373620 52 -1.179070 53 -0.387500 54 0.000000 55 0.026040 56 -0.021330 57 0.000770 58 0.002710 59 0.000000 60 0.000000 61 0.019880 62 -0.022200 63 -0.072590 64 -0.001330 65 0.000000 66 -0.533700 67 -0.575750 68 -0.725500 69 -0.000010 70 0.013620 71 -0.011800 72 0.000290 73 0.033900 74 0.000000 75 0.000000 76 -0.070740 77 0.079160 78 0.081900 79 -0.240470 80 0.000000 81 1.893440 82 0.659770 83 -1.350900 84 -0.000010 85 -0.008210 86 0.001730 87 -0.001070 88 0.007500 89 0.000000 90 0.000000 91 0.018980 92 0.932730 93 -0.013500 94 -0.673870 95 -0.004790 96 -0.260090 97 0.019390 98 0.931900 99 -0.014160 100 -0.672700 101 -0.005850 102 -0.258090 Ene= 0.3201 Spin= Alpha Occup= 0.000000 1 0.044840 2 -0.037190 3 -0.080430 4 0.126350 5 0.000000 6 -1.703350 7 -0.606970 8 0.772290 9 0.000000 10 -0.006360 11 0.009900 12 -0.000430 13 -0.035890 14 0.000000 15 0.000000 16 0.000610 17 -0.000560 18 0.061180 19 0.285300 20 0.000000 21 -0.021520 22 0.410870 23 1.919000 24 0.000020 25 0.009230 26 -0.009190 27 0.000010 28 0.024790 29 0.000000 30 0.000000 31 -0.044770 32 0.037220 33 0.127420 34 0.084730 35 0.000000 36 1.699080 37 0.892450 38 0.475260 39 0.000010 40 -0.018730 41 0.015210 42 0.000420 43 -0.031450 44 0.000000 45 0.000000 46 -0.045170 47 0.037510 48 -0.079680 49 0.127070 50 0.000000 51 1.714070 52 -0.606540 53 0.781750 54 0.000000 55 0.006540 56 -0.010100 57 0.000410 58 0.035910 59 0.000000 60 0.000000 61 -0.000060 62 0.000020 63 0.059540 64 0.285660 65 0.000000 66 0.003670 67 0.399590 68 1.922410 69 0.000020 70 -0.009230 71 0.009200 72 0.000020 73 -0.024830 74 0.000000 75 0.000000 76 0.044550 77 -0.037000 78 0.127730 79 0.084170 80 0.000000 81 -1.691970 82 0.887410 83 0.468960 84 0.000010 85 0.018860 86 -0.015340 87 -0.000430 88 0.031250 89 0.000000 90 0.000000 91 -0.121480 92 0.141940 93 -0.122390 94 0.143670 95 -0.001020 96 -0.002270 97 0.121570 98 -0.139430 99 0.122510 100 -0.139490 101 0.000820 102 -0.004420 Ene= 0.3202 Spin= Alpha Occup= 0.000000 1 -0.025800 2 0.021490 3 -0.204840 4 0.151500 5 0.000000 6 0.978380 7 -1.341030 8 1.064040 9 0.000010 10 -0.023170 11 0.021140 12 0.000230 13 0.017030 14 0.000000 15 0.000000 16 -0.051820 17 0.043100 18 -0.045910 19 0.011640 20 0.000000 21 1.967050 22 -0.194480 23 0.050210 24 0.000000 25 0.029580 26 -0.033660 27 0.000500 28 -0.016030 29 0.000000 30 0.000000 31 -0.025900 32 0.021510 33 -0.246420 34 -0.056450 35 0.000000 36 0.984870 37 -1.637870 38 -0.436160 39 -0.000010 40 -0.027020 41 0.024970 42 0.000270 43 0.006840 44 0.000000 45 0.000000 46 0.025370 47 -0.021070 48 -0.204020 49 0.152490 50 0.000000 51 -0.964430 52 -1.331250 53 1.067370 54 0.000010 55 0.023000 56 -0.020980 57 -0.000260 58 -0.017050 59 0.000000 60 0.000000 61 0.051700 62 -0.042990 63 -0.045550 64 0.011460 65 0.000000 66 -1.963490 67 -0.190390 68 0.057010 69 0.000000 70 -0.029680 71 0.033760 72 -0.000500 73 0.015770 74 0.000000 75 0.000000 76 0.026450 77 -0.022050 78 -0.246880 79 -0.054840 80 0.000000 81 -1.002360 82 -1.643770 83 -0.425800 84 -0.000010 85 0.027070 86 -0.025010 87 -0.000240 88 -0.006910 89 0.000000 90 0.000000 91 -0.071340 92 0.079090 93 0.069710 94 -0.078010 95 0.140880 96 -0.162210 97 0.071140 98 -0.085740 99 -0.069550 100 0.083140 101 -0.140850 102 0.163690 Ene= 0.4744 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000430 3 -0.244330 4 0.218850 5 0.000000 6 -0.000160 7 0.373530 8 -0.335210 9 0.000000 10 0.041850 11 -0.041770 12 0.000000 13 0.005220 14 0.000000 15 0.000000 16 0.000010 17 0.000400 18 -0.067650 19 -0.320760 20 0.000000 21 -0.000860 22 0.104260 23 0.492980 24 0.000000 25 0.016930 26 -0.016890 27 0.000000 28 0.044480 29 0.000000 30 0.000000 31 -0.000010 32 0.000320 33 0.311760 34 0.102250 35 0.000000 36 0.000350 37 -0.476930 38 -0.155940 39 0.000000 40 -0.024810 41 0.024840 42 0.000000 43 0.039180 44 0.000000 45 0.000000 46 0.000000 47 0.000300 48 -0.243990 49 0.219050 50 0.000000 51 -0.000430 52 0.374680 53 -0.336750 54 0.000000 55 -0.041810 56 0.041800 57 0.000000 58 -0.005310 59 0.000000 60 0.000000 61 -0.000010 62 0.000330 63 -0.067310 64 -0.320970 65 0.000000 66 0.000290 67 0.103510 68 0.491200 69 0.000000 70 -0.016970 71 0.017000 72 0.000000 73 -0.044440 74 0.000000 75 0.000000 76 0.000010 77 0.000420 78 0.311750 79 0.101860 80 0.000000 81 -0.000880 82 -0.478830 83 -0.156190 84 0.000000 85 0.024920 86 -0.024880 87 0.000000 88 -0.039130 89 0.000000 90 0.000000 91 -0.000050 92 0.000030 93 -0.000070 94 0.000350 95 -0.000080 96 0.000000 97 -0.000100 98 0.000180 99 -0.000100 100 -0.000120 101 -0.000080 102 0.000230 Ene= 0.5271 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.424860 6 0.000000 7 0.000000 8 0.000000 9 -0.305260 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.010450 15 -0.011610 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.424640 21 0.000000 22 0.000000 23 0.000000 24 -0.304980 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 -0.015300 30 0.003190 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.424840 36 0.000000 37 0.000000 38 0.000000 39 -0.305230 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.004840 45 0.014860 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.424880 51 0.000000 52 0.000000 53 0.000000 54 -0.305310 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.010420 60 0.011650 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 0.424670 66 0.000000 67 0.000000 68 0.000000 69 -0.304980 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.015280 75 -0.003250 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.424850 81 0.000000 82 0.000000 83 0.000000 84 -0.305270 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 0.004890 90 -0.014840 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 0.5508 Spin= Alpha Occup= 0.000000 1 -0.005740 2 -0.314390 3 0.148170 4 0.165180 5 0.000000 6 0.520200 7 -0.268640 8 -0.302400 9 0.000000 10 -0.029950 11 -0.016590 12 -0.000740 13 0.071000 14 0.000000 15 0.000000 16 0.009980 17 -0.329180 18 0.241810 19 -0.051390 20 0.000000 21 -0.021180 22 0.003730 23 -0.002230 24 0.000000 25 0.035500 26 -0.079460 27 -0.003570 28 -0.029160 29 0.000000 30 0.000000 31 -0.005720 32 -0.314330 33 0.069370 34 -0.210730 35 0.000000 36 0.519690 37 -0.128020 38 0.383210 39 0.000000 40 -0.073190 41 0.026690 42 -0.000740 43 -0.042170 44 0.000000 45 0.000000 46 0.009940 47 -0.329360 48 -0.165580 49 -0.183610 50 0.000000 51 -0.020760 52 -0.003130 53 -0.001920 54 0.000000 55 -0.028890 56 -0.015140 57 -0.003570 58 0.072090 59 0.000000 60 0.000000 61 -0.005700 62 -0.314190 63 -0.217150 64 0.045540 65 0.000000 66 0.519720 67 0.395750 68 -0.080990 69 0.000000 70 0.033330 71 -0.079790 72 -0.000740 73 -0.028810 74 0.000000 75 0.000000 76 0.009960 77 -0.329310 78 -0.076660 79 0.235020 80 0.000000 81 -0.021250 82 0.000370 83 0.004300 84 0.000000 85 -0.072650 86 0.028670 87 -0.003570 88 -0.042910 89 0.000000 90 0.000000 91 0.213180 92 -0.276320 93 0.190060 94 -0.109690 95 0.213280 96 -0.276290 97 0.190110 98 -0.109920 99 0.213140 100 -0.276080 101 0.190220 102 -0.109850 Ene= 0.5511 Spin= Alpha Occup= 0.000000 1 0.109750 2 -0.128030 3 0.127950 4 0.145350 5 0.000000 6 -3.764350 7 1.882840 8 2.125440 9 0.000020 10 0.005830 11 0.008440 12 -0.019940 13 0.012870 14 0.000000 15 0.000000 16 -0.109460 17 0.081740 18 -0.156270 19 0.034620 20 0.000010 21 3.800120 22 -2.803430 23 0.607060 24 0.000000 25 -0.012500 26 -0.008320 27 0.019650 28 0.001180 29 0.000000 30 0.000000 31 0.109750 32 -0.128060 33 0.062040 34 -0.183480 35 0.000000 36 -3.764260 37 0.899040 38 -2.693310 39 -0.000020 40 -0.001860 41 0.016140 42 -0.019940 43 -0.007740 44 0.000000 45 0.000000 46 -0.109470 47 0.081750 48 0.108130 49 0.118070 50 0.000000 51 3.799860 52 1.927390 53 2.124200 54 0.000020 55 -0.010270 56 -0.010570 57 0.019660 58 -0.002680 59 0.000000 60 0.000000 61 0.109760 62 -0.128020 63 -0.189880 64 0.038080 65 0.000010 66 -3.764140 67 -2.782060 68 0.567950 69 0.000000 70 0.017460 71 -0.003150 72 -0.019950 73 -0.005120 74 0.000000 75 0.000000 76 -0.109460 77 0.081780 78 0.048090 79 -0.152740 80 0.000000 81 3.799820 82 0.876030 83 -2.731150 84 -0.000020 85 -0.008490 86 -0.012340 87 0.019660 88 0.001490 89 0.000000 90 0.000000 91 -0.147160 92 1.150670 93 0.175860 94 -1.178050 95 -0.147130 96 1.150740 97 0.175870 98 -1.178040 99 -0.147180 100 1.150720 101 0.175900 102 -1.178090 Ene= 0.5657 Spin= Alpha Occup= 0.000000 1 0.000640 2 -0.000520 3 0.226940 4 -0.202270 5 0.000000 6 -0.023490 7 2.498370 8 -2.217590 9 -0.000010 10 0.016340 11 -0.016210 12 -0.000130 13 0.002080 14 0.000000 15 0.000000 16 -0.000620 17 0.000660 18 -0.063460 19 -0.297270 20 0.000000 21 0.023400 22 -0.703810 23 -3.265500 24 -0.000030 25 -0.006660 26 0.006590 27 0.000110 28 -0.017250 29 0.000000 30 0.000000 31 0.000610 32 -0.000450 33 -0.288630 34 -0.095300 35 0.000000 36 -0.023920 37 -3.169590 38 -1.054800 39 -0.000010 40 -0.009670 41 0.009740 42 -0.000100 43 0.015230 44 0.000000 45 0.000000 46 -0.000610 47 0.000590 48 -0.225920 49 0.203740 50 0.000000 51 0.023690 52 -2.475700 53 2.241990 54 0.000010 55 0.016240 56 -0.016290 57 0.000100 58 0.001990 59 0.000000 60 0.000000 61 0.000630 62 -0.000450 63 0.061690 64 0.297460 65 0.000000 66 -0.023940 67 0.671190 68 3.272430 69 0.000030 70 -0.006510 71 0.006630 72 -0.000120 73 -0.017310 74 0.000000 75 0.000000 76 -0.000640 77 0.000690 78 0.289380 79 0.093670 80 0.000000 81 0.023740 82 3.179530 83 1.022890 84 0.000010 85 -0.009690 86 0.009590 87 0.000130 88 0.015250 89 0.000000 90 0.000000 91 -0.000980 92 0.006760 93 0.000990 94 -0.006640 95 -0.000950 96 0.006660 97 0.000880 98 -0.006550 99 -0.000920 100 0.006660 101 0.000950 102 -0.006650 Ene= 0.5925 Spin= Alpha Occup= 0.000000 1 -0.012030 2 -0.430120 3 0.007040 4 0.006070 5 -0.000020 6 0.533450 7 0.088090 8 0.099920 9 0.000020 10 -0.057150 11 -0.064290 12 0.031450 13 -0.036950 14 0.000000 15 0.000000 16 -0.011800 17 -0.430380 18 0.009680 19 -0.001730 20 -0.000030 21 0.532180 22 0.131700 23 -0.028240 24 0.000030 25 -0.090060 26 -0.031000 27 0.031290 28 0.015050 29 0.000000 30 0.000000 31 -0.012140 32 -0.430020 33 0.003610 34 -0.008150 35 -0.000010 36 0.533310 37 0.040350 38 -0.127180 39 0.000010 40 -0.034890 41 -0.086760 42 0.031540 43 0.021940 44 0.000000 45 0.000000 46 -0.011990 47 -0.430240 48 -0.007240 49 -0.006040 50 0.000020 51 0.532060 52 -0.088790 53 -0.101020 54 -0.000020 55 -0.057180 56 -0.064260 57 0.031440 58 -0.036950 59 0.000000 60 0.000000 61 -0.011850 62 -0.430360 63 -0.009620 64 0.001510 65 0.000030 66 0.533740 67 -0.130450 68 0.028240 69 -0.000030 70 -0.090100 71 -0.031010 72 0.031320 73 0.015020 74 0.000000 75 0.000000 76 -0.012090 77 -0.430130 78 -0.003380 79 0.008330 80 0.000010 81 0.531880 82 -0.041020 83 0.128300 84 -0.000010 85 -0.034870 86 -0.086770 87 0.031520 88 0.021910 89 0.000000 90 0.000000 91 -0.309460 92 -0.022620 93 -0.309180 94 -0.021990 95 -0.308480 96 -0.022910 97 -0.309540 98 -0.021990 99 -0.309110 100 -0.022630 101 -0.308620 102 -0.022340 Ene= 0.6018 Spin= Alpha Occup= 0.000000 1 0.000010 2 -0.000020 3 0.000030 4 0.000000 5 0.559250 6 0.000030 7 -0.000020 8 0.000000 9 -0.558580 10 0.000010 11 0.000000 12 0.000000 13 0.000000 14 -0.038940 15 -0.024680 16 0.000000 17 -0.000010 18 0.000010 19 0.000050 20 0.078500 21 0.000010 22 -0.000010 23 -0.000060 24 -0.078320 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000570 30 0.032920 31 -0.000010 32 0.000000 33 -0.000040 34 0.000010 35 -0.480600 36 0.000000 37 0.000030 38 -0.000010 39 0.480010 40 -0.000010 41 0.000000 42 0.000000 43 0.000000 44 0.030690 45 -0.030060 46 0.000010 47 -0.000020 48 -0.000030 49 0.000000 50 -0.559200 51 0.000030 52 0.000020 53 0.000000 54 0.558450 55 0.000010 56 0.000000 57 0.000000 58 0.000000 59 -0.038900 60 -0.024690 61 0.000000 62 -0.000010 63 -0.000010 64 -0.000050 65 -0.078780 66 0.000010 67 0.000010 68 0.000060 69 0.078900 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.000540 75 0.032930 76 -0.000010 77 0.000000 78 0.000030 79 -0.000010 80 0.480860 81 0.000000 82 -0.000030 83 0.000010 84 -0.480470 85 -0.000010 86 0.000000 87 0.000000 88 0.000000 89 0.030720 90 -0.030080 91 -0.000020 92 0.000000 93 0.000010 94 0.000000 95 -0.000010 96 0.000000 97 -0.000020 98 0.000000 99 0.000010 100 0.000000 101 -0.000010 102 0.000000 Ene= 0.6018 Spin= Alpha Occup= 0.000000 1 0.000000 2 -0.000020 3 0.000030 4 -0.000040 5 0.231960 6 0.000020 7 -0.000040 8 0.000050 9 -0.231510 10 0.000000 11 -0.000010 12 0.000000 13 0.000000 14 0.010140 15 -0.033800 16 0.000010 17 -0.000030 18 0.000030 19 0.000000 20 0.600480 21 0.000050 22 -0.000010 23 0.000000 24 -0.599880 25 0.000000 26 0.000010 27 0.000000 28 0.000000 29 -0.047480 30 0.005650 31 -0.000010 32 -0.000010 33 0.000030 34 0.000020 35 0.368340 36 0.000010 37 -0.000040 38 -0.000030 39 -0.367990 40 -0.000010 41 -0.000010 42 0.000010 43 0.000000 44 0.015520 45 0.035840 46 0.000000 47 -0.000020 48 -0.000030 49 0.000040 50 -0.232220 51 0.000020 52 0.000040 53 -0.000050 54 0.232040 55 0.000000 56 -0.000010 57 0.000000 58 0.000000 59 0.010120 60 -0.033830 61 0.000010 62 -0.000030 63 -0.000030 64 0.000000 65 -0.600420 66 0.000050 67 0.000010 68 0.000000 69 0.599800 70 0.000000 71 0.000010 72 0.000000 73 0.000000 74 -0.047470 75 0.005680 76 -0.000010 77 -0.000010 78 -0.000030 79 -0.000020 80 -0.368080 81 0.000010 82 0.000040 83 0.000030 84 0.367490 85 -0.000010 86 -0.000010 87 0.000010 88 0.000000 89 0.015510 90 0.035800 91 -0.000030 92 0.000000 93 -0.000020 94 0.000000 95 0.000010 96 0.000000 97 -0.000030 98 0.000000 99 -0.000020 100 0.000000 101 0.000010 102 0.000000 Ene= 0.6030 Spin= Alpha Occup= 0.000000 1 -0.042630 2 0.052310 3 0.222470 4 -0.375930 5 -0.000010 6 -0.101900 7 -0.337780 8 0.344340 9 0.000010 10 -0.028920 11 -0.056390 12 0.036440 13 0.023660 14 0.000000 15 0.000000 16 0.069090 17 -0.083750 18 0.193840 19 -0.113600 20 -0.000050 21 0.162090 22 -0.032500 23 0.092330 24 0.000060 25 0.040210 26 0.098260 27 -0.059140 28 0.011310 29 0.000000 30 0.000000 31 -0.026370 32 0.034870 33 0.435250 34 0.228750 35 -0.000050 36 -0.063610 37 -0.524970 38 -0.191700 39 0.000050 40 -0.024670 41 -0.027560 42 0.022450 43 -0.025220 44 0.000000 45 0.000000 46 -0.042400 47 0.054410 48 -0.221060 49 0.374800 50 0.000010 51 -0.102270 52 0.334740 53 -0.342250 54 -0.000010 55 -0.028530 56 -0.055840 57 0.036160 58 0.023610 59 0.000000 60 0.000000 61 0.069040 62 -0.084030 63 -0.194450 64 0.110580 65 0.000050 66 0.163130 67 0.034400 68 -0.086090 69 -0.000060 70 0.040200 71 0.098140 72 -0.059100 73 0.011460 74 0.000000 75 0.000000 76 -0.026590 77 0.032430 78 -0.436500 79 -0.229020 80 0.000050 81 -0.064730 82 0.527390 83 0.193490 84 -0.000050 85 -0.025190 86 -0.028100 87 0.022750 88 -0.025290 89 0.000000 90 0.000000 91 -0.093140 92 0.024950 93 -0.149160 94 0.040420 95 0.242320 96 -0.065290 97 -0.091320 98 0.025470 99 -0.147490 100 0.040340 101 0.242060 102 -0.065090 Ene= 0.6030 Spin= Alpha Occup= 0.000000 1 0.055090 2 -0.068270 3 0.351340 4 -0.086270 5 -0.000060 6 0.130490 7 -0.300980 8 0.215340 9 0.000060 10 0.069790 11 0.040340 12 -0.047110 13 -0.026430 14 0.000000 15 0.000000 16 0.009130 17 -0.012250 18 0.135070 19 0.503080 20 -0.000020 21 0.021270 22 -0.130150 23 -0.584880 24 0.000020 25 0.013320 26 0.004750 27 -0.007780 28 0.022820 29 0.000000 30 0.000000 31 -0.064440 32 0.079270 33 -0.253040 34 0.126440 35 0.000030 36 -0.153940 37 0.237400 38 0.027730 39 -0.000030 40 -0.092030 41 -0.036920 42 0.055120 43 -0.012350 44 0.000000 45 0.000000 46 0.055260 47 -0.066540 48 -0.353140 49 0.087980 50 0.000060 51 0.130540 52 0.305170 53 -0.218690 54 -0.000060 55 0.070270 56 0.040600 57 -0.047330 58 -0.026440 59 0.000000 60 0.000000 61 0.009400 62 -0.009570 63 -0.135050 64 -0.503590 65 0.000020 66 0.021600 67 0.130530 68 0.585550 69 -0.000020 70 0.013880 71 0.005350 72 -0.008130 73 0.022860 74 0.000000 75 0.000000 76 -0.064350 77 0.080230 78 0.250230 79 -0.127430 80 -0.000030 81 -0.153430 82 -0.231580 83 -0.025930 84 0.000030 85 -0.091730 86 -0.036810 87 0.055000 88 -0.012460 89 0.000000 90 0.000000 91 -0.224750 92 0.060990 93 0.192780 94 -0.052380 95 0.031720 96 -0.008800 97 -0.225490 98 0.060920 99 0.194090 100 -0.052130 101 0.033780 102 -0.008560 Ene= 0.6271 Spin= Alpha Occup= 0.000000 1 -0.038680 2 -0.360820 3 0.194990 4 -0.142850 5 -0.000010 6 0.263090 7 -0.233630 8 0.211020 9 0.000010 10 -0.069560 11 -0.096900 12 0.047380 13 0.007980 14 0.000000 15 0.000000 16 0.000770 17 0.009790 18 -0.097210 19 -0.455850 20 0.000000 21 -0.007190 22 0.125570 23 0.596440 24 0.000000 25 -0.009260 26 0.013110 27 -0.001040 28 -0.029260 29 0.000000 30 0.000000 31 0.039950 32 0.370020 33 -0.221630 34 -0.047630 35 0.000000 36 -0.269830 37 0.279230 38 0.092990 39 0.000000 40 0.082350 41 0.089030 42 -0.048840 43 0.016320 44 0.000000 45 0.000000 46 0.038930 47 0.360520 48 0.196820 49 -0.145460 50 -0.000010 51 -0.262900 52 -0.236090 53 0.213700 54 0.000010 55 0.069710 56 0.097280 57 -0.047590 58 -0.008140 59 0.000000 60 0.000000 61 -0.001270 62 -0.009190 63 -0.095800 64 -0.456130 65 0.000000 66 0.006600 67 0.125110 68 0.596780 69 0.000000 70 0.008950 71 -0.013870 72 0.001470 73 0.029140 74 0.000000 75 0.000000 76 -0.039700 77 -0.370360 78 -0.218880 79 -0.045980 80 0.000000 81 0.270280 82 0.276470 83 0.091920 84 0.000000 85 -0.082050 86 -0.088800 87 0.048630 88 -0.016110 89 0.000000 90 0.000000 91 -0.269240 92 -0.029160 93 -0.262320 94 -0.028250 95 0.006060 96 0.000940 97 0.270080 98 0.028950 99 0.263150 100 0.028230 101 -0.007760 102 -0.000710 Ene= 0.6271 Spin= Alpha Occup= 0.000000 1 -0.023790 2 -0.218900 3 -0.288280 4 0.276760 5 0.000000 6 0.159530 7 0.389280 8 -0.347700 9 0.000000 10 -0.074840 11 -0.026940 12 0.029060 13 0.000930 14 0.000000 15 0.000000 16 -0.045410 17 -0.421880 18 0.024120 19 -0.017680 20 -0.000010 21 0.307770 22 0.005270 23 0.015070 24 0.000010 25 -0.091980 26 -0.103090 27 0.055590 28 -0.003700 29 0.000000 30 0.000000 31 -0.021590 32 -0.203000 33 -0.383520 34 -0.139960 35 0.000000 36 0.148350 37 0.507620 38 0.165410 39 0.000000 40 -0.063350 41 -0.029880 42 0.026510 43 0.020600 44 0.000000 45 0.000000 46 0.023370 47 0.219380 48 -0.285980 49 0.276340 50 0.000000 51 -0.160080 52 0.387510 53 -0.346710 54 0.000000 55 0.074280 56 0.026580 57 -0.028700 58 -0.000700 59 0.000000 60 0.000000 61 0.045380 62 0.421850 63 0.024960 64 -0.014130 65 -0.000010 66 -0.307580 67 0.004410 68 0.011240 69 0.000010 70 0.091880 71 0.103110 72 -0.055560 73 0.003540 74 0.000000 75 0.000000 76 0.022030 77 0.202410 78 -0.385500 79 -0.139250 80 0.000000 81 -0.147830 82 0.509380 83 0.165530 84 0.000000 85 0.064050 86 0.030130 87 -0.026890 88 -0.020500 89 0.000000 90 0.000000 91 0.148460 92 0.015880 93 -0.160460 94 -0.016970 95 -0.307520 96 -0.033260 97 -0.146980 98 -0.016070 99 0.158970 100 0.017210 101 0.307370 102 0.033250 Ene= 0.6677 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000010 4 0.000000 5 0.233540 6 0.000010 7 -0.000010 8 0.000000 9 -0.385520 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.021970 15 0.012570 16 0.000000 17 0.000010 18 -0.000010 19 0.000010 20 -0.623630 21 -0.000010 22 0.000020 23 -0.000010 24 1.028990 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.013080 30 -0.006670 31 0.000000 32 0.000000 33 0.000000 34 -0.000010 35 0.389780 36 0.000010 37 -0.000010 38 0.000010 39 -0.643170 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.022670 45 0.001890 46 0.000000 47 0.000000 48 0.000010 49 0.000000 50 0.233950 51 -0.000010 52 -0.000010 53 0.000000 54 -0.386040 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.021980 60 -0.012580 61 0.000000 62 -0.000010 63 -0.000010 64 0.000010 65 -0.623610 66 0.000010 67 0.000020 68 -0.000010 69 1.029010 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 -0.013090 75 0.006620 76 0.000000 77 0.000000 78 0.000000 79 -0.000010 80 0.389490 81 -0.000010 82 -0.000010 83 0.000010 84 -0.642890 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 0.022640 90 -0.001910 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 0.6677 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 -0.585080 6 0.000000 7 0.000010 8 0.000000 9 0.965450 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.001500 15 0.016520 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.089810 21 0.000010 22 -0.000010 23 -0.000010 24 -0.148290 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 -0.007430 30 -0.025390 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.494920 36 -0.000010 37 0.000000 38 0.000000 39 -0.816750 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 0.012150 45 0.015820 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 -0.584870 51 0.000000 52 0.000010 53 0.000000 54 0.965240 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.001530 60 -0.016480 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 0.090240 66 -0.000010 67 -0.000010 68 -0.000010 69 -0.148790 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.007430 75 0.025390 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.495100 81 0.000010 82 0.000000 83 0.000000 84 -0.816940 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 -0.012190 90 -0.015820 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 0.7452 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 -0.447630 6 0.000000 7 0.000010 8 0.000000 9 1.176770 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.000520 15 -0.000560 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.447490 21 0.000000 22 -0.000020 23 0.000010 24 -1.176640 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.000750 30 -0.000150 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 -0.447530 36 0.000000 37 0.000010 38 -0.000010 39 1.176650 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.000230 45 0.000740 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.447580 51 0.000000 52 -0.000010 53 0.000000 54 -1.176710 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.000490 60 -0.000570 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 -0.447440 66 0.000000 67 0.000020 68 -0.000010 69 1.176540 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.000760 75 -0.000180 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.447510 81 0.000000 82 -0.000010 83 0.000010 84 -1.176630 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 -0.000260 90 0.000720 91 0.000000 92 0.000000 93 0.000000 94 -0.000010 95 0.000000 96 0.000010 97 0.000000 98 0.000000 99 0.000000 100 -0.000010 101 0.000000 102 0.000010 Ene= 0.8400 Spin= Alpha Occup= 0.000000 1 0.010790 2 -0.024980 3 -0.149480 4 -0.135400 5 0.000000 6 -0.265590 7 0.411750 8 0.719140 9 0.000000 10 0.054500 11 -0.058720 12 -0.008910 13 0.025760 14 0.000000 15 0.000000 16 -0.033140 17 0.076120 18 0.602130 19 -0.131340 20 -0.000010 21 0.819640 22 -2.447810 23 0.478780 24 0.000020 25 -0.033120 26 0.046320 27 0.027190 28 0.035700 29 0.000000 30 0.000000 31 0.022400 32 -0.051730 33 -0.145480 34 0.390760 35 0.000000 36 -0.553530 37 0.395080 38 -1.644260 39 -0.000020 40 -0.003680 41 -0.005250 42 -0.018390 43 -0.065720 44 0.000000 45 0.000000 46 0.010710 47 -0.024710 48 0.148740 49 0.134540 50 0.000000 51 -0.265510 52 -0.410020 53 -0.717510 54 0.000000 55 0.054480 56 -0.058830 57 -0.008770 58 0.025420 59 0.000000 60 0.000000 61 -0.033200 62 0.076560 63 -0.603060 64 0.131140 65 0.000010 66 0.819700 67 2.450300 68 -0.477090 69 -0.000020 70 -0.033310 71 0.046460 72 0.027280 73 0.035830 74 0.000000 75 0.000000 76 0.022430 77 -0.051560 78 0.145230 79 -0.391200 80 0.000000 81 -0.554060 82 -0.393120 83 1.645880 84 0.000020 85 -0.003700 86 -0.005160 87 -0.018440 88 -0.065840 89 0.000000 90 0.000000 91 0.250330 92 -1.148480 93 0.120520 94 -0.552400 95 -0.369830 96 1.697470 97 0.250110 98 -1.147490 99 0.119610 100 -0.549460 101 -0.370530 102 1.699740 Ene= 0.8400 Spin= Alpha Occup= 0.000000 1 0.032100 2 -0.074190 3 -0.393070 4 -0.449240 5 0.000000 6 -0.792490 7 1.653820 8 1.759490 9 0.000000 10 -0.031060 11 0.018300 12 -0.026370 13 0.051920 14 0.000000 15 0.000000 16 -0.006760 17 0.015450 18 0.127240 19 -0.004810 20 0.000000 21 0.166390 22 -0.458930 23 0.280790 24 0.000010 25 -0.032330 26 0.034930 27 0.005590 28 -0.059480 29 0.000000 30 0.000000 31 -0.025400 32 0.058570 33 0.133100 34 -0.453280 35 -0.000010 36 0.627090 37 -0.709570 38 1.776700 39 0.000010 40 0.059540 41 -0.049510 42 0.020900 43 -0.012560 44 0.000000 45 0.000000 46 0.032080 47 -0.073730 48 0.393200 49 0.448710 50 0.000000 51 -0.793350 52 -1.655690 53 -1.757500 54 0.000000 55 -0.031100 56 0.018350 57 -0.026330 58 0.051830 59 0.000000 60 0.000000 61 -0.006700 62 0.015380 63 -0.126550 64 0.004440 65 0.000000 66 0.166580 67 0.458040 68 -0.278910 69 -0.000010 70 -0.032040 71 0.034770 72 0.005470 73 -0.059550 74 0.000000 75 0.000000 76 -0.025320 77 0.058060 78 -0.132450 79 0.452040 80 0.000010 81 0.626520 82 0.707480 83 -1.773710 84 -0.000010 85 0.059320 86 -0.049220 87 0.020760 88 -0.012760 89 0.000000 90 0.000000 91 -0.282500 92 1.296840 93 0.358400 94 -1.643900 95 -0.075420 96 0.345600 97 -0.283550 98 1.300440 99 0.358040 100 -1.643200 101 -0.074790 102 0.343620 Ene= 0.8420 Spin= Alpha Occup= 0.000000 1 -0.005750 2 -0.022030 3 0.356180 4 0.397390 5 0.000000 6 2.654180 7 -2.170720 8 -2.423150 9 -0.000010 10 0.046660 11 0.045810 12 -0.021340 13 -0.004360 14 0.000000 15 0.000000 16 0.005750 17 0.021940 18 -0.522260 19 0.109960 20 0.000010 21 -2.653530 22 3.183620 23 -0.671150 24 -0.000020 25 -0.042740 26 -0.049720 27 0.021330 28 -0.001790 29 0.000000 30 0.000000 31 -0.005740 32 -0.022020 33 0.166080 34 -0.507120 35 -0.000010 36 2.653860 37 -1.013220 38 3.091230 39 0.000030 40 0.049290 41 0.043170 42 -0.021340 43 0.002610 44 0.000000 45 0.000000 46 0.005750 47 0.022020 48 0.356250 49 0.397130 50 0.000000 51 -2.653660 52 -2.172710 53 -2.421010 54 -0.000010 55 -0.046630 56 -0.045830 57 0.021340 58 0.004360 59 0.000000 60 0.000000 61 -0.005750 62 -0.021970 63 -0.522260 64 0.109740 65 0.000010 66 2.653630 67 3.183830 68 -0.668210 69 -0.000020 70 0.042740 71 0.049710 72 -0.021330 73 0.001770 74 0.000000 75 0.000000 76 0.005760 77 0.021980 78 0.165910 79 -0.507240 80 -0.000010 81 -2.653650 82 -1.010690 83 3.092620 84 0.000030 85 -0.049320 86 -0.043130 87 0.021330 88 -0.002590 89 0.000000 90 0.000000 91 0.105350 92 -1.467840 93 -0.105320 94 1.467410 95 0.105360 96 -1.467850 97 -0.105300 98 1.467350 99 0.105260 100 -1.467370 101 -0.105330 102 1.467500 Ene= 0.8645 Spin= Alpha Occup= 0.000000 1 0.024380 2 -0.273190 3 -0.269170 4 -0.371240 5 0.000000 6 0.164400 7 0.419290 8 1.017740 9 0.000000 10 0.013220 11 0.008580 12 -0.050810 13 0.120310 14 0.000000 15 0.000000 16 0.001830 17 -0.020450 18 -0.055990 19 -0.098030 20 0.000000 21 0.011470 22 0.249140 23 0.796650 24 0.000010 25 -0.004590 26 0.006130 27 -0.003780 28 -0.036210 29 0.000000 30 0.000000 31 -0.022590 32 0.253170 33 0.074540 34 -0.420510 35 0.000000 36 -0.152020 37 0.141430 38 1.059230 39 0.000010 40 0.056880 41 -0.076990 42 0.047070 43 0.081480 44 0.000000 45 0.000000 46 -0.024450 47 0.273460 48 -0.270140 49 -0.372450 50 0.000000 51 -0.162430 52 0.423170 53 1.022580 54 0.000000 55 -0.013230 56 -0.008470 57 0.050860 58 -0.120460 59 0.000000 60 0.000000 61 -0.001790 62 0.020080 63 -0.054530 64 -0.098290 65 0.000000 66 -0.013150 67 0.243720 68 0.798150 69 0.000010 70 0.004640 71 -0.006350 72 0.003760 73 0.036260 74 0.000000 75 0.000000 76 0.022620 77 -0.253080 78 0.074580 79 -0.420570 80 0.000000 81 0.151740 82 0.140750 83 1.059640 84 0.000010 85 -0.056960 86 0.077140 87 -0.047090 88 -0.081320 89 0.000000 90 0.000000 91 0.347750 92 -1.116260 93 0.375140 94 -1.203640 95 0.028190 96 -0.091280 97 -0.347650 98 1.115870 99 -0.375960 100 1.207820 101 -0.027460 102 0.087470 Ene= 0.8646 Spin= Alpha Occup= 0.000000 1 -0.012010 2 0.134670 3 0.221970 4 0.103260 5 0.000000 6 -0.080120 7 -0.898450 8 0.116260 9 0.000000 10 0.027880 11 -0.038500 12 0.025000 13 -0.054880 14 0.000000 15 0.000000 16 -0.027160 17 0.304470 18 0.495880 19 -0.111480 20 0.000000 21 -0.182900 22 -1.122070 23 0.291880 24 0.000010 25 -0.118060 26 0.093940 27 0.056570 28 0.051380 29 0.000000 30 0.000000 31 -0.015110 32 0.169750 33 0.172680 34 -0.240720 35 0.000000 36 -0.103720 37 -0.856780 38 0.395190 39 0.000000 40 0.060080 41 -0.073600 42 0.031530 43 0.019770 44 0.000000 45 0.000000 46 0.012000 47 -0.134370 48 0.221360 49 0.102570 50 0.000000 51 0.080970 52 -0.895950 53 0.118350 54 0.000000 55 -0.027660 56 0.038410 57 -0.025000 58 0.054830 59 0.000000 60 0.000000 61 0.027120 62 -0.304380 63 0.495110 64 -0.111380 65 0.000000 66 0.184010 67 -1.118800 68 0.291730 69 0.000010 70 0.118070 71 -0.093930 72 -0.056530 73 -0.051200 74 0.000000 75 0.000000 76 0.015170 77 -0.170090 78 0.173250 79 -0.242260 80 0.000000 81 0.101660 82 -0.858780 83 0.401270 84 0.000000 85 -0.060260 86 0.073620 87 -0.031570 88 -0.019860 89 0.000000 90 0.000000 91 0.233400 92 -0.750020 93 -0.184900 94 0.593920 95 -0.417820 96 1.341550 97 -0.232570 98 0.745710 99 0.184480 100 -0.591710 101 0.417380 102 -1.339370 Ene= 0.9398 Spin= Alpha Occup= 0.000000 1 -0.014070 2 -0.832860 3 -0.156630 4 0.057570 5 0.000000 6 3.423710 7 0.755660 8 -0.533010 9 -0.000010 10 -0.075630 11 -0.048520 12 0.007860 13 -0.078990 14 0.000000 15 0.000000 16 -0.002860 17 -0.171010 18 0.085160 19 0.465500 20 0.000000 21 0.703970 22 -0.555560 23 -2.746410 24 -0.000020 25 0.000500 26 -0.025930 27 0.001590 28 0.073950 29 0.000000 30 0.000000 31 0.011150 32 0.660990 33 0.317310 34 0.052520 35 0.000000 36 -2.718570 37 -1.815580 38 -0.504720 39 -0.000010 40 0.032010 41 0.066470 42 -0.006220 43 -0.076120 44 0.000000 45 0.000000 46 0.014050 47 0.832620 48 -0.156800 49 0.057850 50 0.000000 51 -3.423630 52 0.757010 53 -0.534540 54 -0.000010 55 0.075690 56 0.048360 57 -0.007840 58 0.079010 59 0.000000 60 0.000000 61 0.002930 62 0.171870 63 0.084800 64 0.465890 65 0.000000 66 -0.704970 67 -0.554980 68 -2.749180 69 -0.000020 70 -0.000420 71 0.026100 72 -0.001650 73 -0.073940 74 0.000000 75 0.000000 76 -0.011190 77 -0.661580 78 0.317610 79 0.052310 80 0.000000 81 2.719400 82 -1.818310 83 -0.504700 84 -0.000010 85 -0.032110 86 -0.066540 87 0.006250 88 0.076080 89 0.000000 90 0.000000 91 -0.051940 92 -0.305150 93 -0.065290 94 -0.383750 95 -0.013360 96 -0.078460 97 0.051900 98 0.304190 99 0.065220 100 0.383610 101 0.013440 102 0.079650 Ene= 0.9399 Spin= Alpha Occup= 0.000000 1 -0.004760 2 -0.282390 3 0.326260 4 -0.320420 5 0.000000 6 1.162630 7 -1.991050 8 1.833690 9 0.000010 10 0.042790 11 -0.084850 12 0.002660 13 -0.018240 14 0.000000 15 0.000000 16 -0.014580 17 -0.862450 18 -0.081770 19 -0.078790 20 0.000000 21 3.547310 22 0.223540 23 0.521900 24 0.000000 25 -0.132520 26 0.003960 27 0.008180 28 0.018710 29 0.000000 30 0.000000 31 -0.009830 32 -0.579930 33 0.331490 34 0.153800 35 0.000000 36 2.384050 37 -2.020540 38 -0.740570 39 -0.000010 40 0.023090 41 -0.109610 42 0.005520 43 -0.013990 44 0.000000 45 0.000000 46 0.004810 47 0.283090 48 0.326120 49 -0.320700 50 0.000000 51 -1.163360 52 -1.991240 53 1.835110 54 0.000010 55 -0.042680 56 0.084960 57 -0.002720 58 0.018210 59 0.000000 60 0.000000 61 0.014580 62 0.862260 63 -0.081640 64 -0.079000 65 0.000000 66 -3.546920 67 0.223340 68 0.522670 69 0.000000 70 0.132570 71 -0.004030 72 -0.008180 73 -0.018630 74 0.000000 75 0.000000 76 0.009770 77 0.579150 78 0.331510 79 0.153360 80 0.000000 81 -2.383100 82 -2.019560 83 -0.739190 84 -0.000010 85 -0.023260 86 0.109550 87 -0.005480 88 0.014000 89 0.000000 90 0.000000 91 0.045660 92 0.266320 93 -0.022250 94 -0.129730 95 -0.067970 96 -0.397180 97 -0.045700 98 -0.267360 99 0.022370 100 0.130700 101 0.068060 102 0.396670 Ene= 0.9406 Spin= Alpha Occup= 0.000000 1 -0.001990 2 -0.364920 3 -0.267050 4 -0.297980 5 0.000000 6 0.884500 7 0.382080 8 0.427460 9 0.000000 10 -0.018530 11 -0.006840 12 -0.032930 13 0.062150 14 0.000000 15 0.000000 16 -0.001980 17 -0.365370 18 -0.391710 19 0.082240 20 0.000000 21 0.884780 22 0.562220 23 -0.116910 24 -0.000010 25 0.036870 26 -0.062270 27 -0.032970 28 -0.025190 29 0.000000 30 0.000000 31 -0.002000 32 -0.365200 33 -0.124660 34 0.380320 35 0.000000 36 0.885510 37 0.179580 38 -0.544660 39 -0.000010 40 -0.056390 41 0.030960 42 -0.032960 43 -0.036920 44 0.000000 45 0.000000 46 -0.001980 47 -0.364930 48 0.267010 49 0.298060 50 0.000000 51 0.883590 52 -0.382210 53 -0.428620 54 0.000000 55 -0.018570 56 -0.006820 57 -0.032930 58 0.062150 59 0.000000 60 0.000000 61 -0.001990 62 -0.365620 63 0.391770 64 -0.082190 65 0.000000 66 0.886760 67 -0.561510 68 0.116580 69 0.000010 70 0.036840 71 -0.062240 72 -0.032990 73 -0.025240 74 0.000000 75 0.000000 76 -0.001990 77 -0.365320 78 0.124580 79 -0.380380 80 0.000000 81 0.885050 82 -0.179490 83 0.545680 84 0.000010 85 -0.056370 86 0.030900 87 -0.032940 88 -0.036970 89 0.000000 90 0.000000 91 0.264780 92 -0.850650 93 0.264820 94 -0.849950 95 0.264870 96 -0.850660 97 0.264860 98 -0.850290 99 0.264750 100 -0.850280 101 0.264950 102 -0.850590 Ene= 0.9595 Spin= Alpha Occup= 0.000000 1 0.000040 2 0.000490 3 0.388990 4 -0.348340 5 0.000000 6 -0.000190 7 -3.225050 8 2.890450 9 0.000020 10 0.065840 11 -0.065680 12 -0.000030 13 0.008300 14 0.000000 15 0.000000 16 -0.000030 17 -0.000050 18 -0.107540 19 -0.510990 20 0.000000 21 -0.001170 22 0.891790 23 4.238210 24 0.000040 25 -0.026720 26 0.026610 27 0.000040 28 -0.069950 29 0.000000 30 0.000000 31 0.000030 32 -0.000120 33 -0.496130 34 -0.162630 35 0.000000 36 0.002390 37 4.115420 38 1.347430 39 0.000020 40 -0.039020 41 0.039090 42 -0.000030 43 0.061630 44 0.000000 45 0.000000 46 -0.000040 47 -0.000070 48 -0.388560 49 0.348450 50 0.000000 51 -0.001060 52 3.223230 53 -2.890350 54 -0.000020 55 0.065690 56 -0.065810 57 0.000050 58 0.008300 59 0.000000 60 0.000000 61 0.000040 62 0.000240 63 0.107150 64 0.510810 65 0.000000 66 0.000930 67 -0.890330 68 -4.236790 69 -0.000040 70 -0.026590 71 0.026730 72 -0.000040 73 -0.069870 74 0.000000 75 0.000000 76 -0.000030 77 0.000200 78 0.496100 79 0.162300 80 0.000000 81 -0.002450 82 -4.115080 83 -1.346160 84 -0.000020 85 -0.039170 86 0.039080 87 0.000040 88 0.061590 89 0.000000 90 0.000000 91 -0.000200 92 -0.000050 93 0.000080 94 0.000690 95 -0.000160 96 -0.000070 97 -0.000030 98 0.000350 99 -0.000160 100 -0.000100 101 0.000060 102 0.000600 Ene= 1.0833 Spin= Alpha Occup= 0.000000 1 0.009410 2 0.268900 3 0.120810 4 -0.089690 5 0.000000 6 -1.013240 7 -0.810680 8 0.707720 9 0.000010 10 0.069600 11 -0.035150 12 -0.001310 13 0.026750 14 0.000000 15 0.000000 16 -0.038210 17 -1.091580 18 -0.046800 19 0.054330 20 0.000000 21 4.123170 22 -0.005050 23 -0.319130 24 -0.000020 25 -0.128360 26 -0.011500 27 0.005240 28 0.049640 29 0.000000 30 0.000000 31 0.028790 32 0.822600 33 0.114780 34 -0.007790 35 0.000000 36 -3.107990 37 -0.743120 38 -0.194550 39 0.000010 40 0.032600 41 0.072820 42 -0.003930 43 -0.072620 44 0.000000 45 0.000000 46 0.009420 47 0.269230 48 -0.121110 49 0.089430 50 0.000000 51 -1.018900 52 0.812110 53 -0.707160 54 -0.000010 55 0.069600 56 -0.035110 57 -0.001260 58 0.026990 59 0.000000 60 0.000000 61 -0.038200 62 -1.091490 63 0.046770 64 -0.053890 65 0.000000 66 4.121150 67 0.004450 68 0.314730 69 0.000020 70 -0.128330 71 -0.011540 72 0.005260 73 0.049550 74 0.000000 75 0.000000 76 0.028790 77 0.822490 78 -0.114340 79 0.007640 80 0.000000 81 -3.104590 82 0.739300 83 0.194190 84 -0.000010 85 0.032660 86 0.072730 87 -0.003970 88 -0.072470 89 0.000000 90 0.000000 91 0.211020 92 0.414820 93 0.068730 94 0.135330 95 -0.280440 96 -0.550700 97 0.211450 98 0.415200 99 0.069380 100 0.136160 101 -0.280270 102 -0.550410 Ene= 1.0833 Spin= Alpha Occup= 0.000000 1 -0.038680 2 -1.105210 3 -0.011250 4 -0.067530 5 0.000000 6 4.174000 7 -0.156020 8 0.222610 9 -0.000010 10 -0.049780 11 -0.091850 12 0.005300 13 -0.080600 14 0.000000 15 0.000000 16 0.011180 17 0.319350 18 0.046480 19 0.141330 20 0.000000 21 -1.204000 22 -0.235210 23 -1.035520 24 0.000000 25 0.061050 26 -0.020130 27 -0.001570 28 0.047380 29 0.000000 30 0.000000 31 0.027490 32 0.785440 33 -0.093210 34 -0.073400 35 0.000000 36 -2.964320 37 0.746990 38 0.289670 39 0.000000 40 -0.014690 41 0.115350 42 -0.003810 43 0.003110 44 0.000000 45 0.000000 46 -0.038680 47 -1.105130 48 0.011520 49 0.067190 50 0.000000 51 4.173030 52 0.152690 53 -0.219370 54 0.000010 55 -0.049830 56 -0.091770 57 0.005320 58 -0.080550 59 0.000000 60 0.000000 61 0.011190 62 0.319630 63 -0.046880 64 -0.141380 65 0.000000 66 -1.209270 67 0.236830 68 1.036800 69 0.000000 70 0.061260 71 -0.020300 72 -0.001520 73 0.047310 74 0.000000 75 0.000000 76 0.027500 77 0.785560 78 0.093390 79 0.073790 80 0.000000 81 -2.968490 82 -0.749550 83 -0.291570 84 0.000000 85 -0.014840 86 0.115500 87 -0.003760 88 0.003050 89 0.000000 90 0.000000 91 0.201980 92 0.396440 93 -0.283820 94 -0.557600 95 0.081830 96 0.160670 97 0.201500 98 0.395790 99 -0.283700 100 -0.557610 101 0.082470 102 0.161400 Ene= 1.1435 Spin= Alpha Occup= 0.000000 1 0.000340 2 -0.316670 3 0.284790 4 0.322010 5 0.000000 6 -1.523240 7 -1.455710 8 -0.589870 9 0.000000 10 -0.063800 11 -0.008920 12 0.044600 13 0.090130 14 0.000000 15 0.000000 16 0.000020 17 -0.035060 18 0.047240 19 -0.002480 20 0.000000 21 -0.163870 22 0.193240 23 1.662310 24 0.000010 25 0.022290 26 -0.030350 27 0.004860 28 0.044070 29 0.000000 30 0.000000 31 -0.000280 32 0.282830 33 -0.115050 34 0.365430 35 0.000000 36 1.355780 37 1.319030 38 -0.890880 39 -0.000010 40 0.106150 41 -0.041220 42 -0.039760 43 0.024100 44 0.000000 45 0.000000 46 -0.000330 47 0.317250 48 0.284640 49 0.322090 50 0.000000 51 1.521670 52 -1.454620 53 -0.590480 54 0.000000 55 0.063960 56 0.008880 57 -0.044610 58 -0.090080 59 0.000000 60 0.000000 61 -0.000050 62 0.033940 63 0.047240 64 -0.002540 65 0.000000 66 0.167290 67 0.192700 68 1.662600 69 0.000010 70 -0.022460 71 0.030300 72 -0.004850 73 -0.044010 74 0.000000 75 0.000000 76 0.000300 77 -0.282280 78 -0.115170 79 0.365370 80 0.000000 81 -1.357640 82 1.320240 83 -0.890830 84 -0.000010 85 -0.106100 86 0.041260 87 0.039750 88 -0.024210 89 0.000000 90 0.000000 91 0.366720 92 0.617150 93 0.411520 94 0.692440 95 0.044480 96 0.074910 97 -0.366420 98 -0.616690 99 -0.411300 100 -0.692210 101 -0.045000 102 -0.075610 Ene= 1.1437 Spin= Alpha Occup= 0.000000 1 -0.000130 2 0.143840 3 -0.134700 4 -0.140060 5 0.000000 6 0.685940 7 -0.710590 8 1.492120 9 0.000010 10 -0.021000 11 0.054060 12 -0.020210 13 -0.046940 14 0.000000 15 0.000010 16 -0.000360 17 0.346190 18 -0.459160 19 0.097290 20 0.000000 21 1.661680 22 1.542140 23 -0.154380 24 -0.000010 25 -0.038920 26 0.118470 27 -0.048840 28 0.045670 29 0.000010 30 0.000000 31 -0.000220 32 0.202780 33 -0.091240 34 0.259750 35 0.000000 36 0.975020 37 -1.011800 38 -1.281260 39 -0.000010 40 0.042960 41 0.003650 42 -0.028650 43 0.069790 44 0.000000 45 -0.000010 46 0.000160 47 -0.142850 48 -0.134660 49 -0.140080 50 0.000000 51 -0.689160 52 -0.710580 53 1.492790 54 0.000010 55 0.021050 56 -0.053920 57 0.020210 58 0.047020 59 0.000000 60 -0.000010 61 0.000350 62 -0.346250 63 -0.459130 64 0.097460 65 0.000000 66 -1.661090 67 1.541860 68 -0.155720 69 -0.000010 70 0.038870 71 -0.118430 72 0.048840 73 -0.045770 74 -0.000010 75 0.000000 76 0.000190 77 -0.203710 78 -0.091360 79 0.259680 80 0.000000 81 -0.972390 82 -1.011110 83 -1.280460 84 -0.000010 85 -0.042960 86 -0.003840 87 0.028650 88 -0.069810 89 0.000000 90 0.000010 91 0.262870 92 0.442840 93 -0.185420 94 -0.312290 95 -0.449200 96 -0.756260 97 -0.263300 98 -0.443370 99 0.185900 100 0.312970 101 0.449140 102 0.756140 Ene= 1.2025 Spin= Alpha Occup= 0.000000 1 0.011150 2 0.580780 3 -0.045870 4 -0.050910 5 0.000000 6 -0.780200 7 -0.847310 8 -0.946880 9 0.000000 10 0.046100 11 0.054820 12 -0.023150 13 0.045910 14 0.000000 15 0.000000 16 -0.011150 17 -0.580760 18 0.067310 19 -0.013980 20 0.000000 21 0.779540 22 1.242770 23 -0.262300 24 -0.000010 25 -0.087040 26 -0.013880 27 0.023160 28 0.018610 29 0.000000 30 0.000000 31 0.011150 32 0.580640 33 -0.021130 34 0.065120 35 0.000000 36 -0.780290 37 -0.395680 38 1.207710 39 0.000010 40 0.018200 41 0.082700 42 -0.023130 43 -0.027350 44 -0.000010 45 0.000000 46 -0.011150 47 -0.580660 48 -0.045650 49 -0.051190 50 0.000000 51 0.780090 52 -0.848440 53 -0.945910 54 0.000000 55 -0.046130 56 -0.054760 57 0.023150 58 -0.045920 59 0.000000 60 0.000000 61 0.011150 62 0.580740 63 0.067200 64 -0.014320 65 0.000000 66 -0.779280 67 1.243010 68 -0.260810 69 -0.000010 70 0.087050 71 0.013880 72 -0.023160 73 -0.018560 74 0.000000 75 0.000000 76 -0.011150 77 -0.580560 78 -0.021490 79 0.065060 80 0.000000 81 0.780310 82 -0.394180 83 1.208230 84 0.000010 85 -0.018160 86 -0.082720 87 0.023130 88 0.027300 89 0.000010 90 0.000000 91 -0.456330 92 -0.581500 93 0.456230 94 0.581330 95 -0.456140 96 -0.581090 97 0.456300 98 0.581430 99 -0.456250 100 -0.581390 101 0.456080 102 0.581000 Ene= 1.2619 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000060 6 0.000000 7 0.000000 8 0.000000 9 -0.000040 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.252030 15 -0.226150 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000060 21 0.000000 22 0.000000 23 0.000000 24 -0.000040 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 0.069570 30 0.331400 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.000070 36 0.000000 37 0.000000 38 0.000000 39 -0.000060 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.321870 45 -0.105190 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.000070 51 0.000000 52 0.000000 53 0.000000 54 -0.000040 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.252230 60 -0.225950 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 0.000070 66 0.000000 67 0.000000 68 0.000000 69 -0.000050 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.069840 75 0.331350 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.000070 81 0.000000 82 0.000000 83 0.000000 84 -0.000050 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 -0.321790 90 -0.105460 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 1.3955 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000010 4 0.000010 5 0.054880 6 -0.000040 7 0.000000 8 -0.000040 9 0.011930 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.247250 15 0.275560 16 0.000000 17 0.000000 18 0.000010 19 0.000000 20 0.054890 21 -0.000050 22 -0.000030 23 0.000020 24 0.011840 25 0.000000 26 0.000000 27 0.000000 28 -0.000010 29 0.362300 30 -0.076070 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.054880 36 -0.000010 37 0.000040 38 0.000020 39 0.011940 40 0.000000 41 0.000010 42 0.000000 43 0.000000 44 0.115050 45 -0.351910 46 0.000000 47 0.000000 48 0.000010 49 0.000010 50 0.054900 51 0.000040 52 0.000000 53 -0.000040 54 0.011840 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.247070 60 -0.275730 61 0.000000 62 0.000000 63 0.000010 64 0.000000 65 0.054880 66 0.000050 67 -0.000040 68 0.000020 69 0.011930 70 0.000000 71 0.000000 72 0.000000 73 0.000010 74 -0.362290 75 0.076310 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.054900 81 0.000010 82 0.000040 83 0.000020 84 0.011850 85 0.000000 86 -0.000010 87 0.000000 88 0.000000 89 -0.115260 90 0.351840 91 0.000000 92 -0.000010 93 0.000010 94 0.000020 95 0.000010 96 0.000020 97 0.000000 98 0.000010 99 -0.000010 100 -0.000020 101 -0.000010 102 -0.000030 Ene= 1.4373 Spin= Alpha Occup= 0.000000 1 0.029110 2 0.605610 3 -0.252490 4 -0.038030 5 0.000000 6 -2.523580 7 2.159380 8 2.379860 9 0.000000 10 0.070400 11 -0.034670 12 -0.018600 13 -0.039310 14 0.000010 15 0.000000 16 -0.032090 17 -0.667670 18 0.237400 19 0.073790 20 -0.000010 21 2.782160 22 -3.470220 23 0.715160 24 0.000030 25 0.005740 26 -0.045150 27 0.020570 28 -0.058510 29 -0.000030 30 0.000000 31 0.002980 32 0.062160 33 -0.275980 34 -0.069060 35 -0.000010 36 -0.259770 37 0.133220 38 -0.303570 39 -0.000020 40 0.055180 41 -0.051480 42 -0.001850 43 -0.076160 44 -0.000010 45 0.000030 46 0.029110 47 0.605720 48 0.252580 49 0.037990 50 0.000000 51 -2.524600 52 -2.159120 53 -2.380850 54 0.000000 55 0.070500 56 -0.034720 57 -0.018560 58 -0.039310 59 0.000010 60 0.000000 61 -0.032090 62 -0.667730 63 -0.237520 64 -0.073860 65 0.000010 66 2.782950 67 3.470420 68 -0.716420 69 -0.000030 70 0.005670 71 -0.045130 72 0.020570 73 -0.058580 74 -0.000030 75 0.000000 76 0.002990 77 0.062010 78 0.275930 79 0.069210 80 0.000010 81 -0.257710 82 -0.133190 83 0.302420 84 0.000020 85 0.055140 86 -0.051530 87 -0.001880 88 -0.076150 89 -0.000010 90 0.000030 91 -0.054950 92 -0.098770 93 -0.535900 94 -0.965550 95 0.590740 96 1.064890 97 -0.055050 98 -0.099060 99 -0.535950 100 -0.965830 101 0.590810 102 1.064930 Ene= 1.4373 Spin= Alpha Occup= 0.000000 1 0.020250 2 0.421360 3 0.082560 4 -0.258160 5 0.000010 6 -1.756600 7 1.473260 8 1.682810 9 0.000010 10 -0.053940 11 0.078870 12 -0.012970 13 -0.040380 14 0.000020 15 0.000030 16 0.015080 17 0.313920 18 -0.046860 19 0.273260 20 0.000010 21 -1.308810 22 1.624070 23 -0.371440 24 -0.000010 25 -0.040490 26 0.059080 27 -0.009650 28 -0.071800 29 0.000020 30 -0.000010 31 -0.035340 32 -0.735130 33 0.051610 34 -0.234650 35 -0.000010 36 3.063610 37 -1.210010 38 3.708790 39 0.000030 40 -0.056260 41 0.012840 42 0.022620 43 -0.039420 44 -0.000010 45 0.000010 46 0.020250 47 0.421240 48 -0.082620 49 0.258010 50 -0.000010 51 -1.754830 52 -1.472020 53 -1.682700 54 -0.000010 55 -0.053940 56 0.078780 57 -0.012980 58 -0.040390 59 0.000020 60 0.000030 61 0.015090 62 0.313770 63 0.046760 64 -0.273190 65 -0.000010 66 -1.306930 67 -1.623030 68 0.371580 69 0.000010 70 -0.040520 71 0.059020 72 -0.009690 73 -0.071750 74 0.000020 75 -0.000010 76 -0.035330 77 -0.735160 78 -0.051500 79 0.234650 80 0.000010 81 3.063630 82 1.211180 83 -3.708460 84 -0.000030 85 -0.056220 86 0.012800 87 0.022590 88 -0.039520 89 -0.000010 90 0.000010 91 0.650500 92 1.172490 93 -0.372890 94 -0.672080 95 -0.277700 96 -0.500590 97 0.650510 98 1.172320 99 -0.372780 100 -0.671940 101 -0.277610 102 -0.500290 Ene= 1.4876 Spin= Alpha Occup= 0.000000 1 0.000000 2 -0.000010 3 0.000000 4 0.000000 5 0.054530 6 0.000020 7 -0.000010 8 -0.000020 9 0.057240 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.188800 15 0.355380 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.043620 21 -0.000040 22 0.000010 23 0.000010 24 0.045690 25 0.000000 26 0.000000 27 -0.000010 28 0.000000 29 0.024860 30 -0.421080 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 -0.098180 36 0.000030 37 0.000010 38 0.000010 39 -0.102880 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.049640 45 0.245870 46 0.000000 47 0.000010 48 0.000000 49 0.000000 50 0.054740 51 -0.000020 52 -0.000010 53 -0.000020 54 0.057120 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.188510 60 -0.355520 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 0.043660 66 0.000040 67 0.000010 68 0.000010 69 0.045630 70 0.000000 71 0.000000 72 0.000010 73 0.000000 74 -0.024430 75 0.421140 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 -0.098360 81 -0.000030 82 0.000010 83 0.000010 84 -0.102800 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 0.049910 90 -0.246540 91 0.000000 92 0.000000 93 0.000000 94 0.000010 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 -0.000010 101 0.000000 102 0.000000 Ene= 1.4876 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000030 3 0.000000 4 0.000000 5 0.081890 6 -0.000190 7 0.000050 8 0.000070 9 0.085760 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.326190 15 -0.013550 16 0.000000 17 -0.000030 18 0.000000 19 0.000000 20 -0.088370 21 0.000200 22 -0.000070 23 0.000020 24 -0.092350 25 0.000000 26 0.000000 27 0.000000 28 0.000000 29 -0.260920 30 -0.150670 31 0.000000 32 0.000030 33 0.000000 34 0.000000 35 0.006300 36 -0.000180 37 0.000030 38 -0.000090 39 0.006690 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 0.435740 45 0.125490 46 0.000000 47 -0.000030 48 0.000000 49 0.000000 50 0.081980 51 0.000190 52 0.000050 53 0.000070 54 0.085730 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.326620 60 0.013010 61 0.000000 62 0.000030 63 0.000000 64 0.000000 65 -0.088190 66 -0.000200 67 -0.000070 68 0.000020 69 -0.092430 70 0.000000 71 0.000000 72 0.000000 73 0.000000 74 0.260560 75 0.150830 76 0.000000 77 -0.000030 78 0.000000 79 0.000000 80 0.006390 81 0.000180 82 0.000030 83 -0.000090 84 0.006600 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 -0.435520 90 -0.125730 91 0.000000 92 0.000020 93 0.000000 94 -0.000010 95 0.000000 96 0.000010 97 0.000000 98 -0.000010 99 0.000000 100 0.000010 101 0.000000 102 -0.000010 Ene= 1.5157 Spin= Alpha Occup= 0.000000 1 0.000000 2 -0.000050 3 0.000010 4 0.000010 5 0.080100 6 0.000190 7 -0.000180 8 -0.000200 9 -0.035710 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.277800 15 0.172970 16 0.000000 17 0.000030 18 -0.000010 19 -0.000010 20 -0.052050 21 -0.000130 22 0.000180 23 -0.000030 24 0.023300 25 0.000000 26 0.000000 27 0.000000 28 0.000010 29 -0.221610 30 -0.061530 31 0.000000 32 0.000020 33 0.000020 34 0.000010 35 -0.132080 36 -0.000060 37 0.000020 38 -0.000090 39 0.058840 40 0.000000 41 -0.000010 42 0.000010 43 0.000010 44 -0.174360 45 0.488360 46 0.000000 47 -0.000050 48 -0.000010 49 -0.000010 50 -0.079910 51 0.000190 52 0.000180 53 0.000200 54 0.035700 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.277850 60 0.172410 61 0.000000 62 0.000030 63 0.000010 64 0.000010 65 0.051980 66 -0.000130 67 -0.000180 68 0.000030 69 -0.023130 70 0.000000 71 0.000000 72 0.000000 73 0.000010 74 -0.221400 75 -0.060910 76 0.000000 77 0.000020 78 -0.000020 79 -0.000010 80 0.131950 81 -0.000060 82 -0.000020 83 0.000090 84 -0.058990 85 0.000000 86 -0.000010 87 0.000010 88 0.000010 89 -0.174470 90 0.487980 91 -0.000020 92 -0.000030 93 0.000050 94 0.000090 95 -0.000030 96 -0.000060 97 -0.000020 98 -0.000030 99 0.000050 100 0.000090 101 -0.000030 102 -0.000060 Ene= 1.5157 Spin= Alpha Occup= 0.000000 1 0.000000 2 -0.000010 3 -0.000010 4 0.000010 5 0.106270 6 0.000040 7 -0.000030 8 -0.000040 9 -0.047320 10 0.000010 11 -0.000010 12 0.000000 13 0.000000 14 0.227230 15 0.356530 16 0.000000 17 -0.000030 18 0.000010 19 -0.000020 20 0.122350 21 0.000150 22 -0.000200 23 0.000050 24 -0.054660 25 0.000010 26 -0.000010 27 0.000000 28 0.000000 29 0.460810 30 -0.142860 31 0.000000 32 0.000040 33 -0.000010 34 0.000010 35 0.016220 36 -0.000180 37 0.000080 38 -0.000250 39 -0.007290 40 0.000000 41 0.000000 42 -0.000010 43 0.000000 44 -0.088130 45 -0.095690 46 0.000000 47 -0.000010 48 0.000010 49 -0.000010 50 -0.106230 51 0.000040 52 0.000030 53 0.000040 54 0.047510 55 0.000010 56 -0.000010 57 0.000000 58 0.000000 59 0.226900 60 0.356590 61 0.000000 62 -0.000030 63 -0.000010 64 0.000020 65 -0.122480 66 0.000150 67 0.000200 68 -0.000050 69 0.054610 70 0.000010 71 -0.000010 72 0.000000 73 0.000000 74 0.461140 75 -0.142690 76 0.000000 77 0.000040 78 0.000010 79 -0.000010 80 -0.016110 81 -0.000180 82 -0.000080 83 0.000250 84 0.007150 85 0.000000 86 0.000000 87 -0.000010 88 0.000000 89 -0.088680 90 -0.095680 91 -0.000050 92 -0.000090 93 0.000010 94 0.000020 95 0.000030 96 0.000070 97 -0.000050 98 -0.000090 99 0.000010 100 0.000020 101 0.000030 102 0.000070 Ene= 1.7570 Spin= Alpha Occup= 0.000000 1 0.015430 2 0.223570 3 -0.052710 4 -0.060530 5 0.000000 6 -0.324740 7 -0.042500 8 -0.045320 9 0.000000 10 -0.155940 11 -0.161940 12 0.428010 13 -0.014660 14 0.000000 15 0.000000 16 0.015370 17 0.222540 18 -0.078300 19 0.017640 20 0.000000 21 -0.315480 22 -0.066380 23 0.012570 24 0.000000 25 -0.170040 26 -0.147730 27 0.427990 28 0.007720 29 0.000000 30 -0.000010 31 0.015430 32 0.223610 33 -0.026060 34 0.075950 35 0.000000 36 -0.324850 37 -0.017950 38 0.059360 39 0.000000 40 -0.149470 41 -0.168420 42 0.428020 43 0.010370 44 0.000000 45 -0.000010 46 0.015360 47 0.222500 48 0.054400 49 0.058990 50 0.000000 51 -0.315190 52 0.044380 53 0.051520 54 0.000000 55 -0.159150 56 -0.158660 57 0.428030 58 -0.015010 59 0.000000 60 0.000000 61 0.015440 62 0.223630 63 0.078800 64 -0.015390 65 0.000000 66 -0.325030 67 0.060040 68 -0.014050 69 0.000000 70 -0.171410 71 -0.146440 72 0.427990 73 0.004280 74 0.000000 75 -0.000010 76 0.015360 77 0.222530 78 0.023850 79 -0.076650 80 0.000000 81 -0.315290 82 0.022430 83 -0.064080 84 0.000000 85 -0.147540 86 -0.170280 87 0.428040 88 0.007300 89 0.000000 90 -0.000010 91 0.152050 92 0.118090 93 0.151670 94 0.116880 95 0.151960 96 0.117980 97 0.151680 98 0.116840 99 0.152040 100 0.118130 101 0.151570 102 0.116730 Ene= 1.7915 Spin= Alpha Occup= 0.000000 1 0.000120 2 0.000710 3 -0.164480 4 0.146810 5 0.000000 6 -0.001060 7 0.197930 8 -0.178790 9 0.000000 10 -0.317530 11 0.315830 12 0.002310 13 -0.040690 14 0.000000 15 0.000000 16 0.000130 17 0.000850 18 -0.045850 19 -0.215620 20 0.000000 21 -0.002360 22 0.054660 23 0.260820 24 0.000000 25 -0.129730 26 0.128040 27 0.002300 28 -0.336450 29 0.000000 30 0.000000 31 0.000120 32 0.000680 33 0.209400 34 0.069020 35 0.000000 36 -0.001030 37 -0.253780 38 -0.081990 39 0.000000 40 0.188030 41 -0.189690 42 0.002280 43 -0.296350 44 0.000000 45 0.000000 46 0.000130 47 0.000850 48 -0.163810 49 0.147500 50 0.000000 51 -0.002330 52 0.198570 53 -0.177720 54 0.000000 55 0.315970 56 -0.317640 57 0.002270 58 0.039330 59 0.000000 60 0.000000 61 0.000120 62 0.000690 63 -0.044910 64 -0.215860 65 0.000000 66 -0.001010 67 0.055890 68 0.260810 69 0.000000 70 0.126980 71 -0.128650 72 0.002280 73 0.337050 74 0.000000 75 0.000000 76 0.000130 77 0.000830 78 0.209660 79 0.068100 80 0.000000 81 -0.002320 82 -0.253180 83 -0.083050 84 0.000000 85 -0.188730 86 0.187050 87 0.002280 88 0.297150 89 0.000000 90 0.000000 91 0.001400 92 0.000430 93 0.001450 94 0.000610 95 0.001390 96 0.000450 97 0.001440 98 0.000630 99 0.001390 100 0.000480 101 0.001450 102 0.000620 Ene= 1.8579 Spin= Alpha Occup= 0.000000 1 -0.008230 2 0.197680 3 -0.001100 4 -0.000620 5 0.000000 6 0.049420 7 0.142300 8 0.157880 9 0.000000 10 -0.010880 11 0.061210 12 -0.004480 13 0.374230 14 0.000000 15 0.000000 16 -0.008220 17 0.197920 18 -0.001260 19 -0.000150 20 0.000000 21 0.047940 22 0.209290 23 -0.043560 24 0.000000 25 0.323440 26 -0.273050 27 -0.004550 28 -0.152300 29 -0.000010 30 0.000000 31 -0.008230 32 0.197820 33 0.000010 34 0.001300 35 0.000000 36 0.049030 37 0.065630 38 -0.202510 39 0.000000 40 -0.237510 41 0.287810 42 -0.004480 43 -0.223110 44 0.000000 45 0.000000 46 -0.008220 47 0.197830 48 0.000490 49 0.001150 50 0.000000 51 0.048370 52 -0.141930 53 -0.158970 54 0.000000 55 -0.009790 56 0.060060 57 -0.004430 58 0.374360 59 0.000000 60 0.000000 61 -0.008230 62 0.197820 63 0.001110 64 -0.000640 65 0.000000 66 0.048840 67 -0.208550 68 0.044480 69 0.000000 70 0.323900 71 -0.273500 72 -0.004560 73 -0.151100 74 -0.000010 75 0.000000 76 -0.008220 77 0.197960 78 0.000750 79 -0.001040 80 0.000000 81 0.047990 82 -0.066890 83 0.202680 84 0.000000 85 -0.238200 86 0.288450 87 -0.004440 88 -0.222040 89 0.000000 90 0.000000 91 -0.341540 92 -0.021400 93 -0.341500 94 -0.021180 95 -0.341690 96 -0.021510 97 -0.341510 98 -0.021290 99 -0.341530 100 -0.021300 101 -0.341640 102 -0.021410 Ene= 1.8976 Spin= Alpha Occup= 0.000000 1 0.074950 2 1.217060 3 -0.050490 4 -0.056260 5 0.000000 6 -10.974370 7 4.650830 8 5.184800 9 0.000030 10 -0.019800 11 -0.023490 12 -0.093720 13 -0.020280 14 -0.000010 15 0.000010 16 -0.074980 17 -1.217390 18 0.074030 19 -0.015580 20 0.000000 21 10.974410 22 -6.816880 23 1.432120 24 0.000030 25 0.038000 26 0.005580 27 0.093290 28 -0.008190 29 0.000000 30 0.000000 31 0.074950 32 1.217060 33 -0.023520 34 0.071850 35 0.000000 36 -10.974220 37 2.164620 38 -6.620160 39 -0.000060 40 -0.007310 41 -0.035960 42 -0.093740 43 0.011980 44 -0.000010 45 0.000000 46 -0.074980 47 -1.217370 48 -0.050560 49 -0.056300 50 0.000000 51 10.973890 52 4.648660 53 5.187450 54 0.000030 55 0.019810 56 0.023760 57 0.093310 58 0.020330 59 0.000010 60 -0.000010 61 0.074950 62 1.217080 63 0.073970 64 -0.015540 65 0.000000 66 -10.974090 67 -6.815520 68 1.435340 69 0.000030 70 -0.037770 71 -0.005530 72 -0.093690 73 0.008310 74 0.000000 75 0.000000 76 -0.074980 77 -1.217370 78 -0.023520 79 0.071930 80 0.000000 81 10.973900 82 2.168090 83 -6.619610 84 -0.000060 85 0.007510 86 0.036040 87 0.093340 88 -0.012170 89 0.000010 90 0.000000 91 0.454610 92 1.548130 93 -0.454680 94 -1.547690 95 0.454630 96 1.548050 97 -0.454660 98 -1.547730 99 0.454620 100 1.548100 101 -0.454680 102 -1.547730 Ene= 1.9745 Spin= Alpha Occup= 0.000000 1 0.007160 2 0.119330 3 0.038450 4 -0.193490 5 0.000000 6 -0.630780 7 -0.452720 8 0.207350 9 0.000010 10 -0.101120 11 -0.127110 12 0.197710 13 -0.357050 14 -0.000010 15 -0.000010 16 -0.002270 17 -0.037840 18 -0.009320 19 -0.226770 20 0.000000 21 0.200010 22 0.184510 23 0.650400 24 0.000000 25 0.137440 26 -0.065080 27 -0.062680 28 -0.014750 29 0.000000 30 -0.000010 31 -0.009430 32 -0.157100 33 -0.014260 34 -0.168690 35 0.000000 36 0.829970 37 0.249510 38 -0.123630 39 0.000000 40 -0.172550 41 0.472950 42 -0.260290 43 -0.285650 44 0.000000 45 0.000010 46 -0.007150 47 -0.119500 48 0.038370 49 -0.193620 50 0.000000 51 0.630580 52 -0.452880 53 0.207170 54 0.000010 55 0.100880 56 0.127190 57 -0.197680 58 0.357050 59 0.000010 60 0.000010 61 0.002270 62 0.037860 63 -0.009370 64 -0.226710 65 0.000000 66 -0.199940 67 0.184580 68 0.650140 69 0.000000 70 -0.137420 71 0.065250 72 0.062580 73 0.014380 74 0.000000 75 0.000010 76 0.009420 77 0.157250 78 -0.014190 79 -0.168900 80 0.000000 81 -0.829850 82 0.249890 83 -0.123630 84 0.000000 85 0.172710 86 -0.473140 87 0.260370 88 0.285540 89 0.000000 90 -0.000010 91 0.538990 92 -0.005720 93 0.409240 94 -0.004500 95 -0.129710 96 0.001480 97 -0.538780 98 0.005770 99 -0.409240 100 0.004350 101 0.129510 102 -0.001370 Ene= 1.9745 Spin= Alpha Occup= 0.000000 1 0.006750 2 0.112510 3 -0.199130 4 0.028590 5 0.000000 6 -0.594250 7 0.281880 8 -0.440530 9 0.000000 10 -0.053980 11 -0.161050 12 0.186320 13 -0.331490 14 -0.000010 15 0.000000 16 0.009570 17 0.159770 18 -0.166080 19 -0.019250 20 0.000000 21 -0.843310 22 -0.160920 23 0.196910 24 0.000010 25 -0.527830 26 0.222760 27 0.264370 28 0.199480 29 0.000000 30 0.000000 31 0.002820 32 0.047020 33 -0.223950 34 -0.024140 35 0.000000 36 -0.248460 37 0.612580 38 0.262030 39 0.000000 40 0.070320 41 -0.160410 42 0.078010 43 0.056230 44 0.000000 45 -0.000010 46 -0.006750 47 -0.112580 48 -0.199250 49 0.028480 50 0.000000 51 0.594270 52 0.282080 53 -0.440710 54 0.000000 55 0.054290 56 0.160890 57 -0.186440 58 0.331640 59 0.000010 60 0.000000 61 -0.009580 62 -0.159560 63 -0.165890 64 -0.019270 65 0.000000 66 0.843340 67 -0.160810 68 0.197090 69 0.000010 70 0.527840 71 -0.222690 72 -0.264370 73 -0.199470 74 0.000000 75 0.000000 76 -0.002820 77 -0.047140 78 -0.224000 79 -0.024110 80 0.000000 81 0.248480 82 0.612650 83 0.262170 84 0.000000 85 -0.070260 86 0.160150 87 -0.077950 88 -0.056450 89 0.000000 90 0.000010 91 -0.161400 92 0.001640 93 0.385820 94 -0.004100 95 0.547410 96 -0.005880 97 0.161510 98 -0.001770 99 -0.386080 100 0.004120 101 -0.547350 102 0.005960 Ene= 2.0690 Spin= Alpha Occup= 0.000000 1 -0.001080 2 0.334190 3 -0.202380 4 -0.112250 5 0.000000 6 -0.348480 7 0.347610 8 0.078240 9 0.000000 10 -0.356520 11 0.307880 12 0.120550 13 -0.157090 14 0.000000 15 0.000000 16 0.001570 17 -0.491730 18 0.318740 19 -0.046290 20 0.000000 21 0.512680 22 -0.430010 23 0.032090 24 0.000000 25 0.206710 26 -0.134730 27 -0.177690 28 0.032470 29 0.000000 30 0.000000 31 -0.000450 32 0.158300 33 -0.124360 34 0.067690 35 0.000000 36 -0.165980 37 0.292210 38 -0.049490 39 0.000000 40 -0.234910 41 0.210910 42 0.057870 43 0.440730 44 0.000000 45 0.000000 46 -0.001030 47 0.335700 48 0.203200 49 0.112100 50 0.000000 51 -0.350190 52 -0.347600 53 -0.080180 54 0.000000 55 -0.357260 56 0.307460 57 0.121870 58 -0.156150 59 0.000000 60 0.000000 61 0.001540 62 -0.492510 63 -0.319240 64 0.045280 65 0.000000 66 0.513640 67 0.430120 68 -0.033500 69 0.000000 70 0.207080 71 -0.134390 72 -0.178460 73 0.032560 74 0.000000 75 0.000000 76 -0.000540 77 0.155810 78 0.123780 79 -0.067100 80 0.000000 81 -0.161660 82 -0.291370 83 0.046750 84 0.000000 85 -0.233290 86 0.211160 87 0.055790 88 0.441300 89 0.000000 90 0.000000 91 0.046600 92 -0.036450 93 0.099290 94 -0.078310 95 -0.145430 96 0.115250 97 0.046360 98 -0.037160 99 0.098930 100 -0.078650 101 -0.145640 102 0.115410 Ene= 2.0690 Spin= Alpha Occup= 0.000000 1 -0.001150 2 0.375720 3 -0.112720 4 -0.228270 5 0.000000 6 -0.392290 7 0.081190 8 0.365730 9 0.000000 10 0.290690 11 -0.346490 12 0.136390 13 -0.087730 14 0.000000 15 0.000000 16 -0.000280 17 0.103870 18 -0.045430 19 0.111730 20 0.000000 21 -0.108850 22 0.032980 23 -0.282850 24 0.000000 25 0.147270 26 -0.163240 27 0.038140 28 0.492660 29 0.000000 30 0.000000 31 0.001520 32 -0.477240 33 0.067170 34 -0.306280 35 0.000000 36 0.497680 37 -0.046140 38 0.421090 39 0.000000 40 -0.164150 41 0.234150 42 -0.172570 43 0.038470 44 0.000000 45 0.000000 46 -0.001220 47 0.373960 48 0.112990 49 0.227280 50 0.000000 51 -0.389370 52 -0.079450 53 -0.364980 54 0.000000 55 0.291370 56 -0.345760 57 0.134860 58 -0.088220 59 0.000000 60 0.000000 61 -0.000370 62 0.101600 63 0.044810 64 -0.111470 65 0.000000 66 -0.105410 67 -0.030460 68 0.283040 69 0.000000 70 0.147270 71 -0.161520 72 0.036220 73 0.493060 74 0.000000 75 0.000000 76 0.001500 77 -0.477730 78 -0.066290 79 0.306680 80 0.000000 81 0.498150 82 0.047820 83 -0.421250 84 0.000000 85 -0.163610 86 0.233920 87 -0.172950 88 0.038870 89 0.000000 90 0.000000 91 -0.141070 92 0.111960 93 0.110870 94 -0.088050 95 0.030210 96 -0.024380 97 -0.141430 98 0.111840 99 0.110830 100 -0.087590 101 0.030540 102 -0.023790 Ene= 2.1530 Spin= Alpha Occup= 0.000000 1 0.000000 2 -0.000010 3 0.000010 4 0.000000 5 0.044300 6 -0.000050 7 0.000040 8 0.000020 9 0.304210 10 0.000010 11 0.000010 12 -0.000030 13 0.000000 14 -0.448300 15 -0.350750 16 0.000000 17 -0.000010 18 0.000000 19 -0.000010 20 -0.009870 21 0.000100 22 -0.000070 23 -0.000010 24 -0.067330 25 0.000000 26 0.000010 27 -0.000010 28 0.000000 29 0.055500 30 -0.338760 31 0.000000 32 0.000030 33 -0.000010 34 0.000010 35 -0.034570 36 -0.000130 37 0.000010 38 -0.000080 39 -0.236980 40 -0.000010 41 0.000000 42 0.000010 43 0.000000 44 0.344860 45 -0.346480 46 0.000000 47 0.000010 48 0.000010 49 0.000000 50 0.044320 51 0.000050 52 0.000040 53 0.000020 54 0.304220 55 -0.000010 56 -0.000010 57 0.000030 58 0.000000 59 0.449250 60 0.349930 61 0.000000 62 0.000010 63 0.000000 64 -0.000010 65 -0.009730 66 -0.000100 67 -0.000070 68 -0.000010 69 -0.067250 70 0.000000 71 -0.000010 72 0.000010 73 0.000000 74 -0.055450 75 0.338280 76 0.000000 77 -0.000030 78 -0.000010 79 0.000010 80 -0.034440 81 0.000130 82 0.000010 83 -0.000080 84 -0.236870 85 0.000010 86 0.000000 87 -0.000010 88 0.000000 89 -0.344050 90 0.346550 91 0.000000 92 0.000020 93 -0.000010 94 -0.000010 95 0.000000 96 0.000020 97 0.000000 98 -0.000020 99 0.000010 100 0.000010 101 0.000000 102 -0.000020 Ene= 2.1531 Spin= Alpha Occup= 0.000000 1 0.000000 2 -0.000030 3 0.000000 4 0.000010 5 -0.014350 6 0.000180 7 -0.000090 8 -0.000070 9 -0.097970 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.111450 15 0.342350 16 0.000000 17 0.000000 18 0.000010 19 0.000000 20 0.045480 21 -0.000120 22 0.000090 23 -0.000020 24 0.312380 25 0.000010 26 0.000010 27 -0.000030 28 0.000010 29 -0.577230 30 0.051610 31 0.000000 32 -0.000030 33 0.000000 34 -0.000010 35 -0.031200 36 0.000190 37 -0.000050 38 0.000110 39 -0.214440 40 0.000010 41 0.000010 42 -0.000020 43 0.000000 44 -0.107160 45 -0.450760 46 0.000000 47 0.000030 48 0.000000 49 0.000010 50 -0.014190 51 -0.000180 52 -0.000090 53 -0.000070 54 -0.097890 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.111450 60 -0.342140 61 0.000000 62 0.000000 63 0.000010 64 0.000000 65 0.045540 66 0.000120 67 0.000090 68 -0.000020 69 0.312460 70 -0.000010 71 -0.000010 72 0.000030 73 -0.000010 74 0.577610 75 -0.050490 76 0.000000 77 0.000030 78 0.000000 79 -0.000010 80 -0.031290 81 -0.000190 82 -0.000050 83 0.000110 84 -0.214520 85 -0.000010 86 -0.000010 87 0.000020 88 0.000000 89 0.108100 90 0.451210 91 0.000000 92 -0.000030 93 0.000010 94 0.000030 95 -0.000020 96 -0.000020 97 0.000000 98 0.000030 99 -0.000010 100 -0.000030 101 0.000020 102 0.000020 Ene= 2.1571 Spin= Alpha Occup= 0.000000 1 -0.036080 2 -0.501580 3 0.213920 4 0.039360 5 0.000000 6 0.713930 7 -0.349500 8 -0.531670 9 -0.000010 10 0.236530 11 0.158010 12 -0.501490 13 -0.262320 14 0.000020 15 0.000020 16 -0.004030 17 -0.055190 18 -0.048340 19 -0.320340 20 0.000000 21 0.079250 22 -0.115750 23 -0.212820 24 0.000000 25 -0.015040 26 0.059330 27 -0.055990 28 -0.022340 29 0.000000 30 0.000010 31 0.032000 32 0.444090 33 -0.228360 34 0.085300 35 0.000000 36 -0.632810 37 0.042830 38 -0.572530 39 0.000000 40 -0.351050 41 0.000960 42 0.444690 43 -0.122380 44 -0.000010 45 0.000010 46 0.036060 47 0.500680 48 0.213320 49 0.039170 50 0.000000 51 -0.713100 52 -0.347970 53 -0.531620 54 -0.000010 55 -0.234850 56 -0.159710 57 0.501230 58 0.262880 59 -0.000020 60 -0.000020 61 0.004090 62 0.057560 63 -0.047000 64 -0.320690 65 0.000000 66 -0.081950 67 -0.118460 68 -0.212140 69 0.000000 70 0.014390 71 -0.058830 72 0.056800 73 0.022940 74 0.000000 75 -0.000010 76 -0.032040 77 -0.445570 78 -0.228830 79 0.086030 80 0.000000 81 0.634700 82 0.044440 83 -0.573850 84 0.000000 85 0.351680 86 -0.001420 87 -0.445250 88 0.120680 89 0.000010 90 -0.000010 91 0.051870 92 0.166440 93 0.058480 94 0.187290 95 0.006820 96 0.020660 97 -0.052210 98 -0.165930 99 -0.058650 100 -0.186980 101 -0.006310 102 -0.021490 Ene= 2.1572 Spin= Alpha Occup= 0.000000 1 -0.016120 2 -0.223260 3 -0.170020 4 0.254910 5 0.000000 6 0.318440 7 -0.345850 8 -0.066520 9 0.000000 10 0.069850 11 0.106650 12 -0.223970 13 -0.122390 14 0.000000 15 -0.000010 16 -0.039310 17 -0.546500 18 0.190380 19 -0.005770 20 0.000000 21 0.777780 22 -0.666090 23 0.163930 24 -0.000010 25 -0.012810 26 0.442870 27 -0.546460 28 0.121220 29 0.000020 30 0.000010 31 -0.023190 32 -0.322910 33 -0.215930 34 -0.187410 35 0.000000 36 0.459740 37 -0.305260 38 0.326620 39 0.000010 40 0.229610 41 0.023840 42 -0.322270 43 0.126250 44 0.000010 45 0.000020 46 0.016170 47 0.225520 48 -0.169200 49 0.255940 50 0.000000 51 -0.321100 52 -0.347260 53 -0.068860 54 0.000000 55 -0.069250 56 -0.107420 57 0.224750 58 0.121660 59 0.000000 60 0.000010 61 0.039300 62 0.546030 63 0.190060 64 -0.006030 65 0.000000 66 -0.777080 67 -0.665320 68 0.165060 69 -0.000010 70 0.013730 71 -0.443690 72 0.546240 73 -0.119320 74 -0.000020 75 -0.000010 76 0.023140 77 0.321090 78 -0.216040 79 -0.186330 80 0.000000 81 -0.457730 82 -0.305340 83 0.324330 84 0.000010 85 -0.230750 86 -0.022610 87 0.321650 88 -0.125470 89 -0.000010 90 -0.000020 91 -0.037860 92 -0.120060 93 0.026470 94 0.083480 95 0.063760 96 0.204170 97 0.037500 98 0.120690 99 -0.025960 100 -0.084280 101 -0.063890 102 -0.204010 Ene= 2.3114 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 -0.091170 6 0.000000 7 0.000000 8 0.000000 9 -0.077250 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 0.326260 15 -0.061810 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 -0.081420 21 0.000000 22 0.000000 23 0.000000 24 -0.069000 25 0.000000 26 -0.000010 27 0.000010 28 0.000000 29 0.232660 30 0.360500 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.009940 36 0.000000 37 0.000000 38 0.000000 39 0.008590 40 0.000000 41 0.000000 42 0.000010 43 -0.000010 44 0.644380 45 0.230840 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.091080 51 0.000000 52 0.000000 53 0.000000 54 0.077040 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 0.325430 60 -0.061470 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 0.081220 66 0.000000 67 0.000000 68 0.000000 69 0.068490 70 0.000000 71 -0.000010 72 0.000010 73 0.000000 74 0.231660 75 0.360080 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 -0.009650 81 0.000000 82 0.000000 83 0.000000 84 -0.007870 85 0.000000 86 0.000000 87 0.000010 88 -0.000010 89 0.644580 90 0.229640 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 2.3114 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 -0.041170 6 0.000000 7 0.000000 8 0.000000 9 -0.034590 10 0.000000 11 -0.000010 12 0.000010 13 0.000000 14 -0.414580 15 0.475350 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.058160 21 0.000000 22 0.000000 23 0.000000 24 0.049040 25 0.000000 26 -0.000010 27 0.000010 28 0.000000 29 0.008020 30 0.569040 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.099530 36 0.000000 37 0.000000 38 0.000000 39 0.084140 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.121860 45 0.157160 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.041430 51 0.000000 52 0.000000 53 0.000000 54 0.035280 55 0.000000 56 -0.000010 57 0.000010 58 0.000000 59 -0.414000 60 0.476390 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 -0.058370 66 0.000000 67 0.000000 68 0.000000 69 -0.049560 70 0.000000 71 -0.000010 72 0.000010 73 0.000000 74 0.007330 75 0.569810 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 -0.099590 81 0.000000 82 0.000000 83 0.000000 84 -0.084310 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 -0.122700 90 0.157230 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 2.3242 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.028750 6 -0.000020 7 0.000010 8 0.000010 9 0.377710 10 0.000000 11 0.000000 12 0.000000 13 0.000000 14 -0.328360 15 -0.366460 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 -0.028770 21 0.000030 22 -0.000020 23 0.000010 24 -0.377740 25 0.000000 26 0.000000 27 0.000000 28 -0.000010 29 0.481580 30 -0.101340 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 0.028770 36 -0.000010 37 0.000000 38 -0.000010 39 0.377720 40 0.000000 41 -0.000010 42 0.000010 43 0.000000 44 -0.153030 45 0.467670 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 -0.028740 51 -0.000020 52 -0.000010 53 -0.000010 54 -0.377700 55 0.000000 56 0.000000 57 0.000000 58 0.000000 59 -0.328510 60 -0.366300 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 0.028780 66 0.000030 67 0.000020 68 -0.000010 69 0.377700 70 0.000000 71 0.000000 72 0.000000 73 -0.000010 74 0.481550 75 -0.101120 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 -0.028750 81 -0.000010 82 0.000000 83 0.000010 84 -0.377720 85 0.000000 86 -0.000010 87 0.000010 88 0.000000 89 -0.152860 90 0.467720 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000010 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000010 Ene= 2.5468 Spin= Alpha Occup= 0.000000 1 0.017970 2 0.056280 3 0.210980 4 -0.147300 5 0.000000 6 -0.642620 7 0.647250 8 -0.169270 9 0.000000 10 -0.363440 11 0.212990 12 0.147190 13 -0.054670 14 0.000000 15 0.000000 16 0.063400 17 0.198010 18 0.144000 19 0.148900 20 0.000000 21 -2.265110 22 1.138690 23 0.177350 24 0.000000 25 -0.396320 26 -0.133970 27 0.518740 28 -0.185650 29 0.000000 30 -0.000010 31 -0.081420 32 -0.254120 33 0.032000 34 0.159580 35 0.000000 36 2.908260 37 -0.253610 38 1.372840 39 0.000010 40 0.229410 41 0.451410 42 -0.666010 43 0.036410 44 0.000000 45 0.000010 46 0.018020 47 0.056190 48 -0.211260 49 0.147190 50 0.000000 51 -0.643140 52 -0.647310 53 0.169660 54 0.000000 55 -0.363860 56 0.213250 57 0.147230 58 -0.054560 59 0.000000 60 0.000000 61 0.063440 62 0.197990 63 -0.144210 64 -0.148880 65 0.000000 66 -2.265750 67 -1.138870 68 -0.178320 69 0.000000 70 -0.396480 71 -0.133980 72 0.518820 73 -0.186380 74 0.000000 75 -0.000010 76 -0.081430 77 -0.254100 78 -0.032140 79 -0.159670 80 0.000000 81 2.908460 82 0.252360 83 -1.373190 84 -0.000010 85 0.228830 86 0.452000 87 -0.666010 88 0.037240 89 0.000000 90 0.000010 91 -0.245880 92 0.400300 93 0.054330 94 -0.088550 95 0.191510 96 -0.311850 97 -0.245800 98 0.400290 99 0.054330 100 -0.088500 101 0.191440 102 -0.311830 Ene= 2.5468 Spin= Alpha Occup= 0.000000 1 -0.083630 2 -0.260990 3 -0.056230 4 -0.145170 5 0.000000 6 2.987110 7 -0.852770 8 -1.143880 9 -0.000010 10 0.278890 11 0.420430 12 -0.684050 13 0.075570 14 0.000000 15 0.000010 16 0.057410 17 0.179120 18 0.057940 19 -0.210280 20 0.000000 21 -2.050350 22 0.861410 23 -0.642770 24 -0.000010 25 -0.196430 26 -0.283610 27 0.469510 28 0.257490 29 0.000010 30 -0.000010 31 0.026250 32 0.081900 33 0.250600 34 0.033870 35 0.000000 36 -0.937180 37 0.689470 38 -0.243290 39 0.000000 40 -0.259410 41 0.039990 42 0.214550 43 0.280200 44 0.000000 45 0.000000 46 -0.083620 47 -0.261000 48 0.056240 49 0.145020 50 0.000000 51 2.987030 52 0.853760 53 1.143100 54 0.000010 55 0.279680 56 0.419560 57 -0.684020 58 0.075840 59 0.000000 60 0.000010 61 0.057390 62 0.179200 63 -0.057810 64 0.210070 65 0.000000 66 -2.050130 67 -0.861850 68 0.641980 69 0.000010 70 -0.196710 71 -0.283240 72 0.469510 73 0.256790 74 0.000010 75 -0.000010 76 0.026200 77 0.081910 78 -0.250580 79 -0.034140 80 0.000000 81 -0.936360 82 -0.689120 83 0.243460 84 0.000000 85 -0.259050 86 0.039830 87 0.214480 88 0.280190 89 0.000000 90 0.000000 91 0.079210 92 -0.128980 93 -0.252460 94 0.411090 95 0.173310 96 -0.282190 97 0.079150 98 -0.128950 99 -0.252560 100 0.411130 101 0.173290 102 -0.282250 Ene= 2.6606 Spin= Alpha Occup= 0.000000 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 -0.000090 6 0.000000 7 0.000000 8 0.000000 9 -0.000130 10 0.000000 11 0.000010 12 0.000000 13 0.000000 14 0.412970 15 -0.370070 16 0.000000 17 0.000000 18 0.000000 19 0.000000 20 0.000090 21 0.000000 22 0.000000 23 -0.000010 24 0.000130 25 0.000000 26 0.000010 27 -0.000010 28 0.000000 29 -0.114290 30 -0.542630 31 0.000000 32 0.000000 33 0.000000 34 0.000000 35 -0.000100 36 -0.000010 37 0.000000 38 0.000000 39 -0.000130 40 0.000000 41 0.000000 42 0.000000 43 0.000000 44 -0.526950 45 -0.172630 46 0.000000 47 0.000000 48 0.000000 49 0.000000 50 0.000100 51 0.000000 52 0.000000 53 0.000000 54 0.000130 55 0.000000 56 -0.000010 57 0.000000 58 0.000000 59 -0.412750 60 0.370270 61 0.000000 62 0.000000 63 0.000000 64 0.000000 65 -0.000100 66 0.000000 67 0.000000 68 -0.000010 69 -0.000130 70 0.000000 71 -0.000010 72 0.000010 73 0.000000 74 0.113980 75 0.542640 76 0.000000 77 0.000000 78 0.000000 79 0.000000 80 0.000100 81 0.000010 82 0.000000 83 0.000000 84 0.000130 85 0.000000 86 0.000000 87 0.000000 88 0.000000 89 0.527040 90 0.172310 91 0.000000 92 0.000000 93 0.000000 94 0.000000 95 0.000000 96 0.000000 97 0.000000 98 0.000000 99 0.000000 100 0.000000 101 0.000000 102 0.000000 Ene= 2.7092 Spin= Alpha Occup= 0.000000 1 0.026290 2 -0.043400 3 0.259690 4 -0.146930 5 0.000000 6 -0.569070 7 0.264980 8 0.248250 9 0.000000 10 -0.066400 11 -0.034290 12 0.163210 13 0.504860 14 0.000000 15 0.000000 16 0.012900 17 -0.021800 18 0.106150 19 0.349010 20 0.000000 21 -0.281630 22 0.179370 23 -0.007680 24 0.000000 25 0.188860 26 -0.238980 27 0.080170 28 -0.051040 29 0.000000 30 0.000000 31 -0.039180 32 0.064430 33 -0.100740 34 0.067090 35 0.000000 36 0.846670 37 -0.174690 38 0.509500 39 0.000000 40 0.593880 41 -0.444170 42 -0.243120 43 0.451360 44 0.000010 45 0.000000 46 0.026470 47 -0.044180 48 -0.258340 49 0.144000 50 0.000000 51 -0.574860 52 -0.258860 53 -0.254400 54 0.000000 55 -0.062160 56 -0.039860 57 0.164170 58 0.505600 59 0.000000 60 0.000000 61 0.012900 62 -0.021070 63 -0.105890 64 -0.352050 65 0.000000 66 -0.277800 67 -0.181150 68 -0.001900 69 0.000000 70 0.186860 71 -0.235840 72 0.079940 73 -0.056970 74 0.000000 75 0.000000 76 -0.039360 77 0.065920 78 0.101440 79 -0.069130 80 0.000000 81 0.856610 82 0.173980 83 -0.510690 84 0.000000 85 0.594990 86 -0.442790 87 -0.244320 88 0.452330 89 0.000010 90 0.000000 91 0.316150 92 -0.005450 93 -0.212760 94 0.003990 95 -0.103840 96 0.001810 97 0.316830 98 -0.005960 99 -0.212300 100 0.003700 101 -0.104060 102 0.001990 Ene= 2.7092 Spin= Alpha Occup= 0.000000 1 0.030060 2 -0.049390 3 -0.141130 4 0.224420 5 0.000000 6 -0.648940 7 0.255190 8 0.325760 9 0.000000 10 -0.139050 11 0.024340 12 0.186510 13 0.568460 14 0.000000 15 0.000000 16 -0.038010 17 0.063660 18 -0.066480 19 0.140090 20 0.000000 21 0.826570 22 -0.507290 23 0.116650 24 0.000000 25 -0.494460 26 0.641310 27 -0.235890 28 0.308370 29 0.000010 30 0.000010 31 0.007710 32 -0.012860 33 -0.355120 34 -0.136060 35 0.000000 36 -0.167410 37 -0.005900 38 -0.113990 39 0.000000 40 -0.143070 41 0.113330 42 0.047970 43 -0.049540 44 0.000000 45 0.000000 46 0.030180 47 -0.050620 48 0.138470 49 -0.224410 50 0.000000 51 -0.657520 52 -0.261200 53 -0.321730 54 0.000000 55 -0.144400 56 0.027560 57 0.187370 58 0.568380 59 0.000000 60 0.000000 61 -0.037790 62 0.062180 63 0.064080 64 -0.141190 65 0.000000 66 0.817250 67 0.505950 68 -0.120420 69 0.000000 70 -0.496230 71 0.640720 72 -0.234530 73 0.305930 74 0.000010 75 0.000010 76 0.007840 77 -0.012930 78 0.351610 79 0.135310 80 0.000000 81 -0.169930 82 -0.004850 83 0.111060 84 0.000000 85 -0.147000 86 0.116930 87 0.048560 88 -0.043500 89 0.000000 90 0.000000 91 -0.062590 92 0.001050 93 -0.242990 94 0.004630 95 0.305050 96 -0.005320 97 -0.062790 98 0.001200 99 -0.242480 100 0.004150 101 0.305800 102 -0.005730 Ene= 2.7241 Spin= Alpha Occup= 0.000000 1 -0.025340 2 0.181840 3 -0.131590 4 -0.224680 5 0.000000 6 1.201900 7 0.055160 8 -0.186280 9 0.000000 10 0.055200 11 0.237940 12 -0.160250 13 -0.064740 14 0.000000 15 0.000000 16 -0.009730 17 0.070410 18 -0.174410 19 -0.349030 20 0.000000 21 0.464540 22 -0.282270 23 -1.155740 24 -0.000010 25 0.323270 26 -0.209620 27 -0.061730 28 0.743310 29 0.000010 30 0.000000 31 0.015550 32 -0.111610 33 -0.257690 34 -0.249040 35 0.000000 36 -0.737180 37 -0.952870 38 -0.377780 39 0.000000 40 0.242050 41 -0.422020 42 0.098470 43 -0.577530 44 0.000000 45 -0.000010 46 0.025040 47 -0.181280 48 -0.130440 49 -0.224770 50 0.000000 51 -1.195970 52 0.058530 53 -0.184010 54 0.000000 55 -0.053500 56 -0.238620 57 0.158460 58 0.058490 59 0.000000 60 0.000000 61 0.009780 62 -0.070360 63 -0.173510 64 -0.346090 65 0.000000 66 -0.463000 67 -0.282130 68 -1.155350 69 -0.000010 70 -0.320760 71 0.207750 72 0.061640 73 -0.744610 74 -0.000010 75 0.000000 76 -0.015290 77 0.110990 78 -0.260070 79 -0.248790 80 0.000000 81 0.729700 82 -0.953830 83 -0.373890 84 0.000000 85 -0.244950 86 0.423260 87 -0.096570 88 0.574860 89 0.000000 90 0.000010 91 -0.056400 92 0.033850 93 -0.089790 94 0.055770 95 -0.036090 96 0.021910 97 0.055230 98 -0.034340 99 0.092540 100 -0.055970 101 0.034520 102 -0.021210 Ene= 2.7241 Spin= Alpha Occup= 0.000000 1 0.003340 2 -0.023790 3 0.321790 4 -0.243580 5 0.000000 6 -0.158310 7 0.960260 8 -0.841910 9 -0.000010 10 -0.764010 11 0.725330 12 0.021310 13 -0.087170 14 0.000000 15 0.000010 16 0.023280 17 -0.168680 18 0.199350 19 -0.202160 20 0.000000 21 -1.111800 22 -0.013300 23 -0.502430 24 0.000000 25 0.015060 26 -0.286690 27 0.147210 28 0.288620 29 0.000000 30 0.000000 31 0.020280 32 -0.145610 33 0.297380 34 -0.117530 35 0.000000 36 -0.961160 37 0.768250 38 0.166320 39 0.000000 40 -0.417870 41 0.183390 42 0.128100 43 0.401570 44 0.000000 45 0.000000 46 -0.003200 47 0.023390 48 0.323670 49 -0.246270 50 0.000000 51 0.152810 52 0.958630 53 -0.843880 54 -0.000010 55 0.762770 56 -0.725460 57 -0.020070 58 0.087880 59 0.000000 60 -0.000010 61 -0.023630 62 0.169400 63 0.200450 64 -0.201710 65 0.000000 66 1.119960 67 -0.008680 68 -0.504230 69 0.000000 70 -0.019480 71 0.292700 72 -0.149490 73 -0.286880 74 0.000000 75 0.000000 76 -0.020070 77 0.145310 78 0.299690 79 -0.116510 80 0.000000 81 0.958500 82 0.768210 83 0.168750 84 0.000000 85 0.414030 86 -0.179790 87 -0.127090 88 -0.404970 89 0.000000 90 0.000000 91 -0.074300 92 0.044950 93 0.011860 94 -0.007580 95 0.086110 96 -0.051920 97 0.071730 98 -0.044420 99 -0.011810 100 0.006920 101 -0.083630 102 0.052060 Ene= 2.7610 Spin= Alpha Occup= 0.000000 1 -0.098630 2 -0.617700 3 -0.086280 4 -0.096030 5 0.000000 6 7.401070 7 -2.751390 8 -3.067740 9 -0.000020 10 0.277270 11 0.308720 12 -0.529610 13 0.166740 14 0.000000 15 0.000010 16 0.098650 17 0.617720 18 0.126350 19 -0.026410 20 0.000000 21 -7.401010 22 4.033160 23 -0.847560 24 -0.000010 25 -0.426060 26 -0.159970 27 0.529730 28 0.067480 29 0.000000 30 -0.000010 31 -0.098630 32 -0.617680 33 -0.040010 34 0.122770 35 0.000000 36 7.401170 37 -1.281020 38 3.916690 39 0.000030 40 0.175820 41 0.410210 42 -0.529640 43 -0.099080 44 0.000000 45 0.000010 46 0.098640 47 0.617770 48 -0.086060 49 -0.096140 50 0.000000 51 -7.400610 52 -2.750670 53 -3.068820 54 -0.000020 55 -0.277190 56 -0.308810 57 0.529690 58 -0.166830 59 0.000000 60 -0.000010 61 -0.098630 62 -0.617640 63 0.126320 64 -0.026660 65 0.000000 66 7.400870 67 4.032390 68 -0.848700 69 -0.000010 70 0.425960 71 0.159990 72 -0.529600 73 -0.067550 74 0.000000 75 0.000010 76 0.098650 77 0.617750 78 -0.040270 79 0.122620 80 0.000000 81 -7.400830 82 -1.282360 83 3.916620 84 0.000030 85 -0.175820 86 -0.410230 87 0.529720 88 0.099220 89 0.000000 90 -0.000010 91 0.115860 92 -0.951030 93 -0.115800 94 0.950690 95 0.115840 96 -0.950990 97 -0.115820 98 0.950730 99 0.115850 100 -0.950990 101 -0.115830 102 0.950710 Ene= 3.0193 Spin= Alpha Occup= 0.000000 1 0.000020 2 0.000380 3 -0.304880 4 0.273050 5 0.000000 6 -0.000250 7 -1.324920 8 1.188590 9 0.000010 10 0.617630 11 -0.617430 12 -0.000050 13 0.077830 14 0.000000 15 -0.000010 16 -0.000020 17 -0.000360 18 0.084470 19 0.400470 20 0.000000 21 0.000210 22 0.365880 23 1.741880 24 0.000010 25 -0.250240 26 0.250020 27 0.000050 28 -0.656620 29 -0.000010 30 0.000000 31 0.000020 32 0.000400 33 0.388900 34 0.127540 35 0.000000 36 -0.000120 37 1.691750 38 0.553140 39 0.000010 40 -0.367020 41 0.367250 42 -0.000060 43 0.578590 44 0.000000 45 0.000000 46 -0.000020 47 -0.000370 48 0.304540 49 -0.273360 50 0.000000 51 0.000210 52 1.325500 53 -1.187720 54 -0.000010 55 0.617370 56 -0.617600 57 0.000040 58 0.078150 59 0.000000 60 -0.000010 61 0.000020 62 0.000400 63 -0.084000 64 -0.400540 65 0.000000 66 -0.000180 67 -0.366860 68 -1.741590 69 -0.000010 70 -0.250240 71 0.250450 72 -0.000050 73 -0.656410 74 -0.000010 75 0.000000 76 -0.000020 77 -0.000380 78 -0.389030 79 -0.127040 80 0.000000 81 0.000120 82 -1.691350 83 -0.554060 84 -0.000010 85 -0.367470 86 0.367230 87 0.000050 88 0.578410 89 0.000000 90 0.000000 91 0.000030 92 0.000110 93 -0.000010 94 -0.000120 95 0.000010 96 0.000110 97 -0.000020 98 -0.000100 99 0.000020 100 0.000110 101 -0.000030 102 -0.000110 Ene= 3.4158 Spin= Alpha Occup= 0.000000 1 -0.075680 2 -0.070940 3 -0.070810 4 -0.078770 5 0.000000 6 4.173210 7 -1.558680 8 -1.738190 9 -0.000010 10 0.168910 11 0.042380 12 -0.315270 13 -0.669190 14 0.000000 15 0.000000 16 0.075670 17 0.071030 18 0.103720 19 -0.021660 20 0.000000 21 -4.173060 22 2.284980 23 -0.480430 24 -0.000010 25 0.427930 26 -0.639310 27 0.315230 28 -0.271050 29 0.000000 30 -0.000010 31 -0.075680 32 -0.070930 33 -0.032770 34 0.100730 35 0.000000 36 4.173160 37 -0.725950 38 2.218940 39 0.000020 40 0.575890 41 -0.364610 42 -0.315260 43 0.397850 44 0.000010 45 0.000000 46 0.075670 47 0.071040 48 -0.070600 49 -0.079000 50 0.000000 51 -4.172880 52 -1.558550 53 -1.738590 54 -0.000010 55 -0.169210 56 -0.042150 57 0.315210 58 0.669110 59 0.000000 60 0.000000 61 -0.075680 62 -0.070970 63 0.103610 64 -0.021970 65 0.000000 66 4.173040 67 2.284640 68 -0.480750 69 -0.000010 70 -0.427860 71 0.639150 72 -0.315240 73 0.271320 74 0.000000 75 0.000010 76 0.075670 77 0.071020 78 -0.033130 79 0.100650 80 0.000000 81 -4.172890 82 -0.726400 83 2.219020 84 0.000020 85 -0.575760 86 0.364400 87 0.315210 88 -0.398070 89 -0.000010 90 0.000000 91 -0.263390 92 -0.396290 93 0.263340 94 0.396100 95 -0.263390 96 -0.396280 97 0.263340 98 0.396110 99 -0.263390 100 -0.396290 101 0.263350 102 0.396130 Ene= 4.0874 Spin= Alpha Occup= 0.000000 1 -0.190020 2 1.304020 3 -0.036600 4 -0.040700 5 0.000000 6 0.365880 7 0.041060 8 0.045700 9 0.000000 10 -0.701990 11 -0.710410 12 -0.735540 13 -0.044550 14 0.000000 15 0.000000 16 -0.189990 17 1.303720 18 -0.053600 19 0.011230 20 0.000000 21 0.366190 22 0.059830 23 -0.012570 24 0.000000 25 -0.741580 26 -0.670440 27 -0.735400 28 0.018040 29 0.000000 30 0.000000 31 -0.190040 32 1.304150 33 -0.017040 34 0.052010 35 0.000000 36 0.365940 37 0.019080 38 -0.058370 39 0.000000 40 -0.674910 41 -0.737640 42 -0.735620 43 0.026430 44 0.000000 45 0.000000 46 -0.190110 47 1.304490 48 0.036500 49 0.040790 50 0.000000 51 0.366500 52 -0.040830 53 -0.045570 54 0.000000 55 -0.702250 56 -0.710750 57 -0.735860 58 -0.044590 59 0.000000 60 0.000000 61 -0.190090 62 1.304410 63 0.053550 64 -0.011320 65 0.000000 66 0.366130 67 -0.059990 68 0.012680 69 0.000000 70 -0.741950 71 -0.670910 72 -0.735820 73 0.018100 74 0.000000 75 0.000000 76 -0.190080 77 1.304330 78 0.017050 79 -0.052020 80 0.000000 81 0.366430 82 -0.019020 83 0.058140 84 0.000000 85 -0.675090 86 -0.737720 87 -0.735760 88 0.026580 89 0.000000 90 0.000000 91 0.087840 92 -0.173090 93 0.087770 94 -0.173090 95 0.087790 96 -0.173000 97 0.087790 98 -0.173100 99 0.087840 100 -0.173120 101 0.087810 102 -0.173100 Ene= 4.1183 Spin= Alpha Occup= 0.000000 1 0.252560 2 -1.551560 3 0.040250 4 -0.078410 5 0.000000 6 -0.734670 7 0.014350 8 0.100010 9 0.000000 10 0.894670 11 1.004190 12 0.981760 13 -0.002050 14 0.000000 15 0.000000 16 0.020210 17 -0.123910 18 -0.041320 19 -0.183520 20 0.000000 21 -0.059390 22 0.033130 23 0.124000 24 0.000000 25 0.126670 26 0.025350 27 0.078510 28 0.131970 29 0.000000 30 0.000000 31 -0.232590 32 1.428640 33 -0.091450 34 -0.060620 35 0.000000 36 0.677240 37 0.044380 38 0.096210 39 0.000000 40 -0.829710 41 -0.919110 42 -0.904110 43 -0.062910 44 0.000000 45 0.000000 46 -0.252640 47 1.551860 48 0.040250 49 -0.078590 50 0.000000 51 0.735440 52 0.014370 53 0.100220 54 0.000000 55 -0.894800 56 -1.004780 57 -0.982050 58 0.002050 59 0.000000 60 0.000000 61 -0.019940 62 0.122740 63 -0.041020 64 -0.183560 65 0.000000 66 0.057510 67 0.032730 68 0.124070 69 0.000000 70 -0.125590 71 -0.024280 72 -0.077550 73 -0.131950 74 0.000000 75 0.000000 76 0.232480 77 -1.428260 78 -0.091410 79 -0.060410 80 0.000000 81 -0.676260 82 0.044320 83 0.095920 84 0.000000 85 0.829340 86 0.918570 87 0.903720 88 0.062680 89 0.000000 90 0.000000 91 -0.094710 92 0.147220 93 -0.102850 94 0.159920 95 -0.008240 96 0.012800 97 0.094740 98 -0.147250 99 0.102930 100 -0.160000 101 0.008110 102 -0.012630 Ene= 4.1183 Spin= Alpha Occup= 0.000000 1 -0.122820 2 0.754260 3 0.136640 4 -0.101720 5 0.000000 6 0.358050 7 -0.113540 8 0.046540 9 0.000000 10 -0.573650 11 -0.349870 12 -0.477390 13 -0.016490 14 0.000000 15 0.000000 16 -0.280110 17 1.720730 18 0.031500 19 -0.020330 20 0.000000 21 0.814930 22 -0.089390 23 0.028100 24 0.000000 25 -1.053760 26 -1.052270 27 -1.088850 28 0.011520 29 0.000000 30 0.000000 31 -0.157380 32 0.966940 33 0.154440 34 0.029950 35 0.000000 36 0.457630 37 -0.117380 38 0.016720 39 0.000000 40 -0.650800 41 -0.532400 42 -0.611790 43 0.098350 44 0.000000 45 0.000000 46 0.122520 47 -0.752820 48 0.136430 49 -0.101880 50 0.000000 51 -0.356240 52 -0.113250 53 0.046760 54 0.000000 55 0.572370 56 0.348780 57 0.476310 58 0.016490 59 0.000000 60 0.000000 61 0.280060 62 -1.720350 63 0.031530 64 -0.020470 65 0.000000 66 -0.814970 67 -0.089440 68 0.028270 69 0.000000 70 1.053450 71 1.052270 72 1.088670 73 -0.011760 74 0.000000 75 0.000000 76 0.157490 77 -0.967220 78 0.154600 79 0.029720 80 0.000000 81 -0.458980 82 -0.117570 83 0.017030 84 0.000000 85 0.651400 86 0.532820 87 0.612190 88 -0.098500 89 0.000000 90 0.000000 91 -0.064180 92 0.099680 93 0.050030 94 -0.077750 95 0.114120 96 -0.177380 97 0.064100 98 -0.099620 99 -0.049910 100 0.077560 101 -0.114080 102 0.177310 Ene= 4.3308 Spin= Alpha Occup= 0.000000 1 0.210480 2 -1.231080 3 -0.174710 4 -0.003190 5 0.000000 6 -1.340420 7 0.276880 8 0.116430 9 0.000000 10 1.017430 11 0.829510 12 0.784500 13 -0.089870 14 0.000000 15 0.000000 16 0.056550 17 -0.330590 18 -0.070220 19 -0.178020 20 0.000000 21 -0.360560 22 0.110490 23 0.170320 24 0.000000 25 0.277060 26 0.219250 27 0.210730 28 0.143360 29 0.000000 30 0.000000 31 -0.267220 32 1.563200 33 0.104590 34 -0.124600 35 0.000000 36 1.701100 37 -0.165120 38 0.308490 39 0.000000 40 -1.285800 41 -1.058890 42 -0.996030 43 -0.038310 44 0.000000 45 0.000000 46 0.210610 47 -1.232140 48 0.174510 49 0.003250 50 0.000000 51 -1.340530 52 -0.276790 53 -0.116460 54 0.000000 55 1.017880 56 0.830070 57 0.785050 58 -0.089830 59 0.000000 60 0.000000 61 0.056740 62 -0.332150 63 0.070070 64 0.177980 65 0.000000 66 -0.360700 67 -0.110420 68 -0.170330 69 0.000000 70 0.277800 71 0.219980 72 0.211550 73 0.143330 74 0.000000 75 0.000000 76 -0.267160 77 1.562690 78 -0.104830 79 0.124570 80 0.000000 81 1.701060 82 0.165210 83 -0.308480 84 0.000000 85 -1.285590 86 -1.058620 87 -0.995770 88 -0.038220 89 0.000000 90 0.000000 91 0.086500 92 -0.162450 93 -0.068130 94 0.127970 95 -0.018310 96 0.034380 97 0.086490 98 -0.162470 99 -0.068190 100 0.128090 101 -0.018360 102 0.034530 Ene= 4.3308 Spin= Alpha Occup= 0.000000 1 0.187020 2 -1.094170 3 0.036660 4 -0.174700 5 0.000000 6 -1.190340 7 0.053270 8 0.276000 9 0.000000 10 0.733920 11 0.907070 12 0.697140 13 -0.101260 14 0.000000 15 0.000000 16 -0.275850 17 1.613700 18 0.144550 19 -0.069880 20 0.000000 21 1.756090 22 -0.340050 23 0.111230 24 0.000000 25 -1.094920 26 -1.325550 27 -1.028210 28 -0.026190 29 0.000000 30 0.000000 31 0.088740 32 -0.518870 33 0.158060 34 0.104630 35 0.000000 36 -0.565550 37 -0.138780 38 -0.166010 39 0.000000 40 0.347460 41 0.431330 42 0.330710 43 0.138260 44 0.000000 45 0.000000 46 0.186880 47 -1.093020 48 -0.036710 49 0.174870 50 0.000000 51 -1.190310 52 -0.053310 53 -0.276070 54 0.000000 55 0.733330 56 0.906590 57 0.696540 58 -0.101260 59 0.000000 60 0.000000 61 -0.275810 62 1.613340 63 -0.144520 64 0.070110 65 0.000000 66 1.756060 67 0.340070 68 -0.111320 69 0.000000 70 -1.094680 71 -1.325420 72 -1.028020 73 -0.026130 74 0.000000 75 0.000000 76 0.088940 77 -0.520490 78 -0.158030 79 -0.104480 80 0.000000 81 -0.565820 82 0.138720 83 0.165960 84 0.000000 85 0.348230 86 0.432120 87 0.331570 88 0.138220 89 0.000000 90 0.000000 91 -0.028800 92 0.054090 93 -0.060530 94 0.113730 95 0.089310 96 -0.167760 97 -0.028730 98 0.053940 99 -0.060510 100 0.113630 101 0.089280 102 -0.167700 Ene= 4.6676 Spin= Alpha Occup= 0.000000 1 -0.215740 2 1.009090 3 0.109290 4 0.121630 5 0.000000 6 3.568220 7 -0.995900 8 -1.110190 9 -0.000010 10 -0.984910 11 -0.948630 12 -0.735680 13 0.191330 14 0.000000 15 0.000000 16 0.215760 17 -1.009110 18 -0.160080 19 0.033480 20 0.000000 21 -3.568200 22 1.459730 23 -0.306630 24 0.000000 25 0.814260 26 1.119350 27 0.735720 28 0.077560 29 0.000000 30 0.000000 31 -0.215730 32 1.009040 33 0.050650 34 -0.155470 35 0.000000 36 3.568130 37 -0.463470 38 1.417560 39 0.000010 40 -1.101140 41 -0.832320 42 -0.735630 43 -0.113810 44 0.000000 45 0.000000 46 0.215740 47 -1.009030 48 0.109010 49 0.121900 50 0.000000 51 -3.568050 52 -0.995380 53 -1.110830 54 -0.000010 55 0.984840 56 0.948650 57 0.735670 58 -0.191310 59 0.000000 60 0.000000 61 -0.215750 62 1.009120 63 -0.159960 64 0.033860 65 0.000000 66 3.568120 67 1.459390 68 -0.307390 69 0.000000 70 -0.814210 71 -1.119330 72 -0.735680 73 -0.077500 74 0.000000 75 0.000000 76 0.215730 77 -1.008990 78 0.051060 79 -0.155350 80 0.000000 81 -3.568020 82 -0.464310 83 1.417430 84 0.000010 85 1.101150 86 0.832280 87 0.735640 88 0.113750 89 0.000000 90 0.000000 91 -0.085280 92 -0.128420 93 0.085260 94 0.128330 95 -0.085290 96 -0.128410 97 0.085260 98 0.128330 99 -0.085280 100 -0.128410 101 0.085270 102 0.128330 [SCFCONV] scf-first 1 THROUGH 5 -232.035996 -232.135505 -232.247697 -232.248628 -232.248646 avogadro-1.1.1/testfiles/ethane.cml0000644000175000001440000000422312250371054016470 0ustar marcususers Ethane 30.0690 30.0469502 -172 -88 avogadro-1.1.1/testfiles/methane.nwo0000644000175000001440000025553412250371054016712 0ustar marcususers nwchem, len=6 methane.nw, len=10 argument 1 = methane.nw ============================== echo of input deck ============================== echo start methane geometry units angstrom C 0.00288864 0.00091914 0.00000000 H 0.19663154 0.62968532 0.93097000 H 0.19663154 0.62968532 -0.93097000 H 0.67319111 -0.92119748 0.00000000 H -1.08378603 -0.34368797 0.00000000 end basis C library 6-31g H library 6-31g end task scf freq ================================================================================ Northwest Computational Chemistry Package (NWChem) 6.0 ------------------------------------------------------ Environmental Molecular Sciences Laboratory Pacific Northwest National Laboratory Richland, WA 99352 Copyright (c) 1994-2010 Pacific Northwest National Laboratory Battelle Memorial Institute NWChem is an open-source computational chemistry package distributed under the terms of the Educational Community License (ECL) 2.0 A copy of the license is included with this distribution in the LICENSE.TXT file ACKNOWLEDGMENT -------------- This software and its documentation were developed at the EMSL at Pacific Northwest National Laboratory, a multiprogram national laboratory, operated for the U.S. Department of Energy by Battelle under Contract Number DE-AC05-76RL01830. Support for this work was provided by the Department of Energy Office of Biological and Environmental Research, Office of Basic Energy Sciences, and the Office of Advanced Scientific Computing. Job information --------------- hostname = nighthawk program = nwchem date = Sat Oct 1 22:37:04 2011 compiled = So_Apr_24_12:17:43_2011 source = /home/mbanck/debian/debichem/nwchem-6.0 nwchem branch = 6.0 input = methane.nw prefix = methane. data base = ./methane.db status = startup nproc = 1 time left = -1s Memory information ------------------ heap = 13107201 doubles = 100.0 Mbytes stack = 13107201 doubles = 100.0 Mbytes global = 26214400 doubles = 200.0 Mbytes (distinct from heap & stack) total = 52428802 doubles = 400.0 Mbytes verify = yes hardfail = no Directory information --------------------- 0 permanent = . 0 scratch = . NWChem Input Module ------------------- Scaling coordinates for geometry "geometry" by 1.889725989 (inverse scale = 0.529177249) CS symmetry detected ------ auto-z ------ Looking for out-of-plane bends Geometry "geometry" -> "" ------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 0.00288864 0.00091914 0.00000000 2 H 1.0000 0.19663103 0.62968548 -0.93097000 3 H 1.0000 0.19663103 0.62968548 0.93097000 4 H 1.0000 0.67319186 -0.92119693 0.00000000 5 H 1.0000 -1.08378575 -0.34368886 0.00000000 Atomic Mass ----------- C 12.000000 H 1.007825 Effective nuclear repulsion energy (a.u.) 12.8462005408 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0000000000 -0.0000000000 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 4 Symmetry unique atoms 1 2 4 5 Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value ----------- -------- ----- ----- ----- ----- ----- ---------- 1 Stretch 1 2 1.13999 2 Stretch 1 3 1.13999 3 Stretch 1 4 1.14000 4 Stretch 1 5 1.14001 5 Bend 2 1 3 109.50049 6 Bend 2 1 4 110.25549 7 Bend 2 1 5 109.19146 8 Bend 3 1 4 110.25549 9 Bend 3 1 5 109.19146 10 Bend 4 1 5 108.41915 XYZ format geometry ------------------- 5 geometry C 0.00288864 0.00091914 0.00000000 H 0.19663103 0.62968548 -0.93097000 H 0.19663103 0.62968548 0.93097000 H 0.67319186 -0.92119693 0.00000000 H -1.08378575 -0.34368886 0.00000000 ============================================================================== internuclear distances ------------------------------------------------------------------------------ center one | center two | atomic units | angstroms ------------------------------------------------------------------------------ 2 H | 1 C | 2.15428 | 1.13999 3 H | 1 C | 2.15428 | 1.13999 4 H | 1 C | 2.15429 | 1.14000 5 H | 1 C | 2.15430 | 1.14001 ------------------------------------------------------------------------------ number of included internuclear distances: 4 ============================================================================== ============================================================================== internuclear angles ------------------------------------------------------------------------------ center 1 | center 2 | center 3 | degrees ------------------------------------------------------------------------------ 2 H | 1 C | 3 H | 109.50 2 H | 1 C | 4 H | 110.26 2 H | 1 C | 5 H | 109.19 3 H | 1 C | 4 H | 110.26 3 H | 1 C | 5 H | 109.19 4 H | 1 C | 5 H | 108.42 ------------------------------------------------------------------------------ number of included internuclear angles: 6 ============================================================================== Basis "ao basis" -> "" (cartesian) ----- C (Carbon) ---------- Exponent Coefficients -------------- --------------------------------------------------------- 1 S 3.04752490E+03 0.001835 1 S 4.57369510E+02 0.014037 1 S 1.03948690E+02 0.068843 1 S 2.92101550E+01 0.232184 1 S 9.28666300E+00 0.467941 1 S 3.16392700E+00 0.362312 2 S 7.86827240E+00 -0.119332 2 S 1.88128850E+00 -0.160854 2 S 5.44249300E-01 1.143456 3 P 7.86827240E+00 0.068999 3 P 1.88128850E+00 0.316424 3 P 5.44249300E-01 0.744308 4 S 1.68714400E-01 1.000000 5 P 1.68714400E-01 1.000000 H (Hydrogen) ------------ Exponent Coefficients -------------- --------------------------------------------------------- 1 S 1.87311370E+01 0.033495 1 S 2.82539370E+00 0.234727 1 S 6.40121700E-01 0.813757 2 S 1.61277800E-01 1.000000 Summary of "ao basis" -> "" (cartesian) ------------------------------------------------------------------------------ Tag Description Shells Functions and Types ---------------- ------------------------------ ------ --------------------- C 6-31g 5 9 3s2p H 6-31g 2 2 2s NWChem Nuclear Hessian and Frequency Analysis --------------------------------------------- NWChem Analytic Hessian ----------------------- NWChem SCF Module ----------------- ao basis = "ao basis" functions = 17 atoms = 5 closed shells = 5 open shells = 0 charge = 0.00 wavefunction = RHF input vectors = atomic output vectors = ./methane.movecs use symmetry = F symmetry adapt = F Summary of "ao basis" -> "ao basis" (cartesian) ------------------------------------------------------------------------------ Tag Description Shells Functions and Types ---------------- ------------------------------ ------ --------------------- C 6-31g 5 9 3s2p H 6-31g 2 2 2s Forming initial guess at 0.1s Superposition of Atomic Density Guess ------------------------------------- Sum of atomic energies: -39.65318430 Non-variational initial energy ------------------------------ Total energy = -40.096409 1-e energy = -77.376805 2-e energy = 24.434195 HOMO = -0.480048 LUMO = 0.147390 Starting SCF solution at 0.3s ---------------------------------------------- Quadratically convergent ROHF Convergence threshold : 1.000E-06 Maximum no. of iterations : 30 Final Fock-matrix accuracy: 1.000E-08 ---------------------------------------------- iter energy gnorm gmax time ----- ------------------- --------- --------- -------- 1 -40.1644288682 3.09D-01 2.43D-01 0.2 2 -40.1716402819 7.54D-02 3.74D-02 0.2 3 -40.1721593107 1.43D-03 8.37D-04 0.4 4 -40.1721595670 7.18D-07 3.47D-07 0.7 Final RHF results ------------------ Total SCF energy = -40.172159566963 One-electron energy = -78.539035423165 Two-electron energy = 25.520675315426 Nuclear repulsion energy = 12.846200540776 Time for solution = 0.6s Final eigenvalues ----------------- 1 1 -11.2312 2 -0.9262 3 -0.5328 4 -0.5306 5 -0.5281 6 0.2431 7 0.3079 8 0.3086 9 0.3096 10 0.7628 11 0.7643 12 0.7660 13 1.1616 14 1.1779 15 1.1800 ROHF Final Molecular Orbital Analysis ------------------------------------- Vector 2 Occ=2.000000D+00 E=-9.261678D-01 MO Center= -2.8D-03, -9.3D-04, 8.4D-16, r^2= 1.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 0.404768 1 C s 2 0.369017 1 C s 1 -0.195144 1 C s Vector 3 Occ=2.000000D+00 E=-5.327789D-01 MO Center= 1.7D-01, -8.7D-02, -1.0D-13, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 4 0.427225 1 C py 14 -0.237011 4 H s 8 0.229779 1 C py 15 -0.204557 4 H s 10 0.161525 2 H s 12 0.161525 3 H s Vector 4 Occ=2.000000D+00 E=-5.305950D-01 MO Center= 9.5D-02, 3.0D-01, 1.1D-13, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 5 0.427269 1 C pz 12 0.240602 3 H s 10 -0.240602 2 H s 9 0.230656 1 C pz 13 0.209178 3 H s 11 -0.209178 2 H s Vector 5 Occ=2.000000D+00 E=-5.281242D-01 MO Center= -2.6D-01, -2.1D-01, -1.0D-14, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 3 0.427260 1 C px 16 -0.281757 5 H s 17 -0.247189 5 H s 7 0.231067 1 C px 14 0.175054 4 H s 15 0.153905 4 H s Vector 6 Occ=0.000000D+00 E= 2.430510D-01 MO Center= -2.5D-03, -1.1D-03, -1.4D-13, r^2= 3.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 2.497638 1 C s 15 -0.966983 4 H s 11 -0.966561 2 H s 13 -0.966561 3 H s 17 -0.960517 5 H s 1 -0.156810 1 C s Vector 7 Occ=0.000000D+00 E= 3.079294D-01 MO Center= -4.2D-01, -4.4D-01, 1.1D-13, r^2= 2.9D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 1.705511 5 H s 7 1.384317 1 C px 15 -1.195903 4 H s 3 0.313570 1 C px 13 -0.239106 3 H s 11 -0.239106 2 H s Vector 8 Occ=0.000000D+00 E= 3.085716D-01 MO Center= 1.7D-01, 5.5D-01, -2.6D-12, r^2= 3.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 11 1.501224 2 H s 13 -1.501224 3 H s 9 1.401339 1 C pz 5 0.314672 1 C pz Vector 9 Occ=0.000000D+00 E= 3.096026D-01 MO Center= 2.4D-01, -1.2D-01, 2.7D-12, r^2= 3.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.408504 1 C py 15 1.396206 4 H s 13 -1.034195 3 H s 11 -1.034195 2 H s 17 0.683706 5 H s 4 0.314760 1 C py Vector 10 Occ=0.000000D+00 E= 7.627653D-01 MO Center= 1.7D-01, 1.2D-01, 4.5D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 7 1.433811 1 C px 3 -0.826115 1 C px 16 0.505417 5 H s 14 -0.326496 4 H s 17 0.156847 5 H s Vector 11 Occ=0.000000D+00 E= 7.643218D-01 MO Center= -5.2D-02, -1.8D-01, 7.0D-14, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 9 1.456016 1 C pz 5 -0.827168 1 C pz 10 0.435848 2 H s 12 -0.435848 3 H s 11 0.150260 2 H s 13 -0.150260 3 H s Vector 12 Occ=0.000000D+00 E= 7.659967D-01 MO Center= -9.7D-02, 6.1D-02, -8.2D-14, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.477645 1 C py 4 -0.827805 1 C py 14 0.423743 4 H s 12 -0.294998 3 H s 10 -0.294998 2 H s 15 0.166444 4 H s 16 0.161732 5 H s Vector 13 Occ=0.000000D+00 E= 1.161622D+00 MO Center= 1.3D-01, 3.2D-02, -8.8D-14, r^2= 2.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 1.199631 1 C s 2 -0.862404 1 C s 14 0.667440 4 H s 10 0.657031 2 H s 12 0.657031 3 H s 15 -0.628426 4 H s 11 -0.612594 2 H s 13 -0.612594 3 H s 16 0.491887 5 H s 17 -0.346495 5 H s Vector 14 Occ=0.000000D+00 E= 1.177885D+00 MO Center= -6.0D-01, -4.0D-01, 9.5D-14, r^2= 1.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 1.514646 5 H s 16 -1.035764 5 H s 7 0.964640 1 C px 15 -0.862979 4 H s 3 -0.815218 1 C px 14 0.561420 4 H s 6 -0.213903 1 C s 13 -0.167267 3 H s 11 -0.167267 2 H s Vector 15 Occ=0.000000D+00 E= 1.179958D+00 MO Center= 1.7D-01, 5.5D-01, -2.6D-13, r^2= 1.9D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 11 1.244213 2 H s 13 -1.244213 3 H s 9 0.970136 1 C pz 10 -0.839786 2 H s 12 0.839786 3 H s 5 -0.822287 1 C pz center of mass -------------- x = 0.00202704 y = 0.00064499 z = -0.00000000 moments of inertia (a.u.) ------------------ 12.571881286175 -0.000000000000 -0.000000000000 -0.000000000000 12.375540207070 -0.000000000000 -0.000000000000 -0.000000000000 12.470306931095 Mulliken analysis of the total density -------------------------------------- Atom Charge Shell Charges ----------- ------ ------------------------------------------------------- 1 C 6 6.61 2.00 0.64 2.00 0.76 1.21 2 H 1 0.85 0.51 0.34 3 H 1 0.85 0.51 0.34 4 H 1 0.85 0.51 0.34 5 H 1 0.85 0.51 0.34 Multipole analysis of the density wrt the origin ------------------------------------------------ L x y z total open nuclear - - - - ----- ---- ------- 0 0 0 0 -0.000000 0.000000 10.000000 1 1 0 0 -0.003911 0.000000 0.000000 1 0 1 0 -0.001270 0.000000 -0.000000 1 0 0 1 -0.000000 0.000000 0.000000 2 2 0 0 -6.433708 0.000000 6.089223 2 1 1 0 -0.002317 0.000000 -0.000035 2 1 0 1 -0.000000 0.000000 -0.000000 2 0 2 0 -6.368524 0.000000 6.284139 2 0 1 1 -0.000000 0.000000 0.000000 2 0 0 2 -6.395848 0.000000 6.190120 stpr_wrt_fd_from_sq: overwrite of existing file:./methane.hess stpr_wrt_fd_dipole: overwrite of existing file./methane.fd_ddipole HESSIAN: the one electron contributions are done in 0.1s HESSIAN: 2-el 1st deriv. term done in 0.2s HESSIAN: 2-el 2nd deriv. term done in 0.6s stpr_wrt_fd_from_sq: overwrite of existing file:./methane.hess stpr_wrt_fd_dipole: overwrite of existing file./methane.fd_ddipole HESSIAN: the two electron contributions are done in 0.8s NWChem CPHF Module ------------------ scftype = RHF nclosed = 5 nopen = 0 variables = 60 # of vectors = 15 tolerance = 0.10D-03 level shift = 0.00D+00 max iterations = 50 max subspace = 150 Iterative solution of linear equations No. of variables 60 No. of equations 15 Maximum subspace 150 Iterations 50 Convergence 1.0D-04 Start time 2.8 iter nsub residual time ---- ------ -------- --------- 1 15 1.15D-01 3.0 2 30 1.39D-02 3.1 3 45 1.40D-03 3.3 4 60 1.23D-04 3.4 5 75 1.08D-05 3.6 HESSIAN: the CPHF contributions are done stpr_wrt_fd_from_sq: overwrite of existing file:./methane.hess stpr_wrt_fd_dipole: overwrite of existing file./methane.fd_ddipole HESSIAN: the Hessian is done Vibrational analysis via the FX method See chapter 2 in "Molecular Vibrations" by Wilson, Decius and Cross Vib: Default input used Nuclear Hessian passed symmetry test ---------------------------- Atom information ---------------------------- atom # X Y Z mass -------------------------------------------------------------------------- C 1 5.4587367D-03 1.7369215D-03 0.0000000D+00 1.2000000D+01 H 2 3.7157876D-01 1.1899330D+00 -1.7592782D+00 1.0078250D+00 H 3 3.7157876D-01 1.1899330D+00 1.7592782D+00 1.0078250D+00 H 4 1.2721482D+00 -1.7408098D+00 0.0000000D+00 1.0078250D+00 H 5 -2.0480581D+00 -6.4947777D-01 0.0000000D+00 1.0078250D+00 -------------------------------------------------------------------------- ---------------------------------------------------- MASS-WEIGHTED NUCLEAR HESSIAN (Hartree/Bohr/Bohr/Kamu) ---------------------------------------------------- 1 2 3 4 5 6 7 8 9 10 ----- ----- ----- ----- ----- 1 4.07641D+01 2 -7.53304D-02 4.13879D+01 3 -2.23449D-10 1.71057D-10 4.12203D+01 4 -2.02410D+01-4.64885D+00 6.99755D+00 6.98511D+01 5 -4.67956D+00-3.40593D+01 2.25019D+01 1.96076D+01 1.25986D+02 6 7.04027D+00 2.24947D+01-5.22324D+01-2.90374D+01-9.20042D+01 2.00776D+02 7 -2.02410D+01-4.64885D+00-6.99755D+00 8.27691D-01 3.78191D+00 5.17581D+00 6.98511D+01 8 -4.67956D+00-3.40593D+01-2.25019D+01 3.78191D+00 1.14034D+01 1.59359D+01 1.96076D+01 1.25986D+02 9 -7.04027D+00-2.24947D+01-5.22324D+01-5.17581D+00-1.59359D+01-2.20631D+01 2.90374D+01 9.20042D+01 2.00776D+02 10 -3.61532D+01 2.38484D+01-9.39996D-11 4.04687D+00-5.89673D+00-3.14487D-01 4.04687D+00-5.89673D+00 3.14487D-01 1.36228D+02 11 2.39286D+01-5.14186D+01 1.38178D-10 1.08436D+01-1.41473D+01-9.23469D-01 1.08436D+01-1.41473D+01 9.23469D-01-9.78870D+01 12 1.58947D-10-1.05294D-10-1.89480D+01-1.77455D+01 2.22540D+01 9.22016D-01 1.77455D+01-2.22540D+01 9.22016D-01-2.58763D-10 13 -6.40265D+01-1.42908D+01-6.69600D-11-4.88171D+00-1.34532D+00-1.17319D-01-4.88171D+00-1.34532D+00 1.17319D-01-1.95702D+01 14 -1.43095D+01-2.32771D+01 4.25935D-12-1.81916D+01-5.71598D+00-6.29197D-01-1.81916D+01-5.71598D+00 6.29197D-01 2.73884D+01 15 1.26469D-10-8.92696D-11-1.88231D+01 2.78127D+01 8.04062D+00 5.99868D-01-2.78127D+01-8.04062D+00 5.99868D-01-1.88578D-10 11 12 13 14 15 ----- ----- ----- ----- ----- 11 1.96602D+02 12 2.37801D-10 6.37614D+01 13 -6.36877D+00 1.43129D-10 2.50265D+02 14 9.11868D+00-1.39582D-11 5.83716D+01 8.26337D+01 15 2.22919D-10-2.23097D-01-1.32967D-10-3.08485D-11 6.39748D+01 ------------------------------------------------- NORMAL MODE EIGENVECTORS IN CARTESIAN COORDINATES ------------------------------------------------- (Frequencies expressed in cm-1) 1 2 3 4 5 6 Frequency -0.19 0.09 0.27 656.10 663.44 670.68 1 -0.00271 -0.02655 -0.24833 -0.00000 -0.00043 0.00000 2 -0.01540 -0.24785 0.02666 -0.00000 0.00056 -0.00000 3 -0.24927 0.01560 0.00105 0.00039 -0.00000 -0.00011 4 -0.00271 -0.02655 -0.24833 0.49850 -0.33500 0.00505 5 -0.01540 -0.24785 0.02666 -0.00388 0.10702 0.49777 6 -0.24927 0.01560 0.00105 0.10290 0.00125 0.33670 7 -0.00271 -0.02655 -0.24833 -0.49850 -0.33500 -0.00505 8 -0.01540 -0.24785 0.02666 0.00388 0.10702 -0.49777 9 -0.24927 0.01560 0.00105 0.10290 -0.00125 0.33670 10 -0.00271 -0.02655 -0.24833 0.00000 0.49164 -0.00000 11 -0.01540 -0.24785 0.02666 0.00000 0.36140 -0.00000 12 -0.24927 0.01560 0.00105 0.37014 -0.00000 -0.48451 13 -0.00271 -0.02655 -0.24833 0.00000 0.18345 -0.00000 14 -0.01540 -0.24785 0.02666 -0.00000 -0.58215 0.00000 15 -0.24927 0.01560 0.00105 -0.58054 -0.00000 -0.18753 7 8 9 10 11 12 Frequency 1575.73 1581.42 1584.19 1718.86 1723.37 2710.60 1 0.11652 -0.00000 -0.01065 0.00000 -0.00061 -0.00198 2 0.01081 0.00000 0.11593 0.00000 0.00199 -0.00056 3 -0.00000 -0.11652 0.00000 -0.00211 -0.00000 0.00000 4 -0.52830 0.08216 0.10823 0.47562 0.12930 0.08720 5 0.02710 0.28381 -0.37800 -0.14742 0.38026 0.27732 6 -0.11275 0.13793 -0.27687 0.00185 0.28232 -0.41378 7 -0.52830 -0.08216 0.10823 -0.47562 0.12930 0.08720 8 0.02710 -0.28381 -0.37800 0.14742 0.38026 0.27732 9 0.11275 0.13793 0.27687 0.00185 -0.28232 0.41378 10 -0.36039 0.00000 -0.26295 -0.00000 -0.40275 0.30132 11 -0.31125 0.00000 -0.11943 -0.00000 -0.29868 -0.40708 12 0.00000 0.56561 -0.00000 -0.48731 0.00000 -0.00000 13 0.02965 0.00000 0.17326 0.00000 0.15142 -0.45210 14 0.12837 -0.00000 -0.50491 -0.00000 -0.48559 -0.14087 15 0.00000 0.54590 -0.00000 0.50873 -0.00000 -0.00000 13 14 15 Frequency 2770.59 2775.44 2778.98 1 0.08518 -0.00000 -0.00254 2 0.00228 0.00000 0.08596 3 -0.00000 -0.08587 0.00000 4 0.00275 -0.12093 -0.07985 5 -0.08131 -0.38216 -0.22484 6 0.12321 0.53922 0.37503 7 0.00275 0.12093 -0.07985 8 -0.08131 0.38216 -0.22484 9 -0.12321 0.53922 -0.37503 10 -0.25324 0.00000 0.41473 11 0.38509 -0.00000 -0.53375 12 -0.00000 -0.02679 0.00000 13 -0.76646 0.00000 -0.22477 14 -0.24958 0.00000 -0.04009 15 -0.00000 -0.02919 0.00000 ---------------------------------------------------------------------------- Normal Eigenvalue || Derivative Dipole Moments (debye/angs) Mode [cm**-1] || [d/dqX] [d/dqY] [d/dqZ] ------ ---------- || ------------------ ------------------ ----------------- 1 -0.188 || 0.000 -0.000 -0.000 2 0.088 || -0.000 0.000 -0.000 3 0.265 || 0.000 -0.000 0.000 4 656.105 || -0.000 0.000 0.005 5 663.444 || -0.005 0.007 -0.000 6 670.681 || 0.000 -0.000 -0.001 7 1575.729 || -0.568 -0.059 0.000 8 1581.424 || 0.000 -0.000 0.540 9 1584.194 || -0.043 0.540 0.000 10 1718.861 || -0.000 -0.000 0.010 11 1723.374 || -0.003 0.010 0.000 12 2710.604 || 0.014 0.003 -0.000 13 2770.589 || -1.108 -0.038 0.000 14 2775.441 || -0.000 0.000 -1.076 15 2778.979 || -0.023 1.073 0.000 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Normal Eigenvalue || Infra Red Intensities Mode [cm**-1] || [atomic units] [(debye/angs)**2] [(KM/mol)] [arbitrary] ------ ---------- || -------------- ----------------- ---------- ----------- 1 -0.188 || 0.000000 0.000 0.000 0.000 2 0.088 || 0.000000 0.000 0.000 0.000 3 0.265 || 0.000000 0.000 0.000 0.000 4 656.105 || 0.000001 0.000 0.001 0.001 5 663.444 || 0.000003 0.000 0.003 0.002 6 670.681 || 0.000000 0.000 0.000 0.000 7 1575.729 || 0.014114 0.326 13.759 10.980 8 1581.424 || 0.012624 0.291 12.307 9.822 9 1584.194 || 0.012726 0.294 12.406 9.901 10 1718.861 || 0.000005 0.000 0.005 0.004 11 1723.374 || 0.000005 0.000 0.005 0.004 12 2710.604 || 0.000009 0.000 0.008 0.007 13 2770.589 || 0.053251 1.229 51.911 41.429 14 2775.441 || 0.050179 1.158 48.917 39.040 15 2778.979 || 0.049884 1.151 48.630 38.810 ---------------------------------------------------------------------------- Vibrational analysis via the FX method --- with translations and rotations projected out --- --- via the Eckart algorithm --- Projected Nuclear Hessian trans-rot subspace norm:1.5032D-33 (should be close to zero!) From the projected analysis The Zero-Point Energy (Kcal/mol) = 27.48345951 center of mass -------------- x = 0.00202704 y = 0.00064499 z = -0.00000000 moments of inertia (a.u.) ------------------ 12.571881286175 -0.000000000000 -0.000000000000 -0.000000000000 12.375540207070 -0.000000000000 -0.000000000000 -0.000000000000 12.470306931095 Rotational Constants -------------------- A= 4.864448 cm-1 ( 6.998700 K) B= 4.827481 cm-1 ( 6.945514 K) C= 4.788478 cm-1 ( 6.889398 K) Temperature = 298.15K frequency scaling parameter = 1.0000 Zero-Point correction to Energy = 27.462 kcal/mol ( 0.043764 au) Thermal correction to Energy = 29.248 kcal/mol ( 0.046609 au) Thermal correction to Enthalpy = 29.840 kcal/mol ( 0.047553 au) Total Entropy = 49.599 cal/mol-K - Translational = 34.246 cal/mol-K (mol. weight = 16.0313) - Rotational = 15.318 cal/mol-K (symmetry # = 1) - Vibrational = 0.034 cal/mol-K Cv (constant volume heat capacity) = 6.198 cal/mol-K - Translational = 2.979 cal/mol-K - Rotational = 2.979 cal/mol-K - Vibrational = 0.239 cal/mol-K ------------------------------------------------- NORMAL MODE EIGENVECTORS IN CARTESIAN COORDINATES ------------------------------------------------- (Projected Frequencies expressed in cm-1) 1 2 3 4 5 6 P.Frequency -0.00 -0.00 -0.00 -0.00 -0.00 0.00 1 -0.05200 -0.00001 -0.00787 -0.01282 -0.01744 -0.24319 2 0.00166 0.00001 0.00936 -0.24920 -0.00487 0.01283 3 0.00192 0.24975 -0.00022 -0.00001 0.00011 -0.00042 4 -0.51699 0.00584 -0.07458 -0.00366 -0.37326 -0.11701 5 0.04704 -0.00021 -0.47830 -0.27023 0.12406 0.01090 6 -0.06419 0.25082 -0.34346 -0.01231 0.01314 0.02454 7 0.45373 -0.00583 0.02777 -0.00518 -0.33129 -0.33082 8 -0.05628 0.00022 0.50659 -0.23335 0.07254 0.00288 9 -0.06419 0.25082 -0.34346 -0.01231 0.01314 0.02454 10 -0.08189 -0.00002 0.01492 -0.02514 0.47362 -0.27147 11 -0.02006 -0.00001 0.02592 -0.25816 0.35208 -0.00772 12 -0.39871 0.25417 0.45070 0.01880 -0.04051 0.07258 13 -0.06317 -0.00001 0.00065 -0.01743 0.16608 -0.25376 14 0.03687 0.00003 -0.01750 -0.23468 -0.58356 0.04615 15 0.54933 0.24302 0.24180 0.00593 0.01507 -0.12669 7 8 9 10 11 12 P.Frequency 1575.72 1581.43 1584.20 1718.85 1723.36 2710.60 1 0.11652 -0.00000 -0.01062 -0.00000 -0.00060 -0.00198 2 0.01078 0.00000 0.11593 0.00000 0.00199 -0.00056 3 -0.00000 -0.11652 0.00000 -0.00211 -0.00000 0.00000 4 -0.52749 0.08423 0.10870 0.47378 0.12800 0.08721 5 0.02690 0.28590 -0.37816 -0.14792 0.38068 0.27732 6 -0.11270 0.13977 -0.27689 0.00112 0.28233 -0.41378 7 -0.52749 -0.08423 0.10870 -0.47378 0.12800 0.08721 8 0.02690 -0.28590 -0.37816 0.14792 0.38068 0.27732 9 0.11270 0.13977 0.27689 0.00112 -0.28233 0.41378 10 -0.36152 -0.00000 -0.26394 -0.00000 -0.40091 0.30130 11 -0.31210 0.00000 -0.12015 -0.00000 -0.29733 -0.40709 12 0.00000 0.56508 -0.00000 -0.48815 0.00000 0.00000 13 0.02915 0.00000 0.17294 0.00000 0.15210 -0.45211 14 0.12998 -0.00000 -0.50388 -0.00000 -0.48775 -0.14085 15 0.00000 0.54272 -0.00000 0.51107 -0.00000 -0.00000 13 14 15 P.Frequency 2770.59 2775.45 2778.99 1 0.08518 -0.00000 -0.00259 2 0.00232 0.00000 0.08596 3 -0.00000 -0.08587 0.00000 4 0.00212 -0.12027 -0.07911 5 -0.08123 -0.38250 -0.22503 6 0.12341 0.53913 0.37496 7 0.00212 0.12027 -0.07911 8 -0.08123 0.38250 -0.22503 9 -0.12341 0.53913 -0.37496 10 -0.25216 0.00000 0.41378 11 0.38545 -0.00000 -0.53474 12 -0.00000 -0.02596 0.00000 13 -0.76626 0.00000 -0.22477 14 -0.25062 0.00000 -0.03870 15 -0.00000 -0.02984 0.00000 ---------------------------------------------------------------------------- Normal Eigenvalue || Projected Derivative Dipole Moments (debye/angs) Mode [cm**-1] || [d/dqX] [d/dqY] [d/dqZ] ------ ---------- || ------------------ ------------------ ----------------- 1 -0.000 || -0.000 0.000 0.005 2 -0.000 || -0.000 0.000 -0.000 3 -0.000 || 0.000 -0.000 0.002 4 -0.000 || -0.000 0.000 0.000 5 -0.000 || 0.002 -0.005 0.000 6 0.000 || 0.000 -0.000 0.001 7 1575.722 || -0.568 -0.059 0.000 8 1581.432 || 0.000 -0.000 0.540 9 1584.204 || -0.043 0.540 0.000 10 1718.850 || 0.000 -0.000 0.010 11 1723.364 || -0.003 0.010 -0.000 12 2710.604 || 0.014 0.003 -0.000 13 2770.589 || -1.108 -0.039 0.000 14 2775.447 || -0.000 0.000 -1.076 15 2778.990 || -0.024 1.073 0.000 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Normal Eigenvalue || Projected Infra Red Intensities Mode [cm**-1] || [atomic units] [(debye/angs)**2] [(KM/mol)] [arbitrary] ------ ---------- || -------------- ----------------- ---------- ----------- 1 -0.000 || 0.000001 0.000 0.001 0.001 2 -0.000 || 0.000000 0.000 0.000 0.000 3 -0.000 || 0.000000 0.000 0.000 0.000 4 -0.000 || 0.000000 0.000 0.000 0.000 5 -0.000 || 0.000001 0.000 0.001 0.001 6 0.000 || 0.000000 0.000 0.000 0.000 7 1575.722 || 0.014114 0.326 13.759 10.981 8 1581.432 || 0.012624 0.291 12.306 9.821 9 1584.204 || 0.012727 0.294 12.407 9.901 10 1718.850 || 0.000005 0.000 0.005 0.004 11 1723.364 || 0.000005 0.000 0.005 0.004 12 2710.604 || 0.000009 0.000 0.008 0.007 13 2770.589 || 0.053252 1.229 51.912 41.430 14 2775.447 || 0.050179 1.158 48.917 39.040 15 2778.990 || 0.049884 1.151 48.630 38.810 ---------------------------------------------------------------------------- vib:animation F Task times cpu: 2.1s wall: 3.6s Summary of allocated global arrays ----------------------------------- No active global arrays GA Statistics for process 0 ------------------------------ create destroy get put acc scatter gather read&inc calls: 1089 1089 3.31e+04 1.57e+04 1.63e+04 361 0 0 number of processes/call 1.00e+00 1.00e+00 1.00e+00 1.00e+00 0.00e+00 bytes total: 1.51e+07 2.98e+06 1.21e+07 7.25e+05 0.00e+00 0.00e+00 bytes remote: 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 Max memory consumed for GA by this process: 332328 bytes MA_summarize_allocated_blocks: starting scan ... MA_summarize_allocated_blocks: scan completed: 0 heap blocks, 0 stack blocks MA usage statistics: allocation statistics: heap stack ---- ----- current number of blocks 0 0 maximum number of blocks 25 36 current total bytes 0 0 maximum total bytes 80068 39337396 maximum total K-bytes 81 39338 maximum total M-bytes 1 40 NWChem Input Module ------------------- CITATION -------- Please cite the following reference when publishing results obtained with NWChem: M. Valiev, E.J. Bylaska, N. Govind, K. Kowalski, T.P. Straatsma, H.J.J. van Dam, D. Wang, J. Nieplocha, E. Apra, T.L. Windus, W.A. de Jong "NWChem: a comprehensive and scalable open-source solution for large scale molecular simulations" Comput. Phys. Commun. 181, 1477 (2010) doi:10.1016/j.cpc.2010.04.018 AUTHORS & CONTRIBUTORS ---------------------- E. J. Bylaska, W. A. de Jong, N. Govind, K. Kowalski, T. P. Straatsma, M. Valiev, H. J. J. van Dam, D. Wang, E. Apra, T. L. Windus, J. Hammond, J. Autschbach, P. Nichols, S. Hirata, M. T. Hackler, Y. Zhao, P.-D. Fan, R. J. Harrison, M. Dupuis, D. M. A. Smith, K. Glaesemann, J. Nieplocha, V. Tipparaju, M. Krishnan, A. Vazquez-Mayagoitia, L. Jensen, M. Swart, Q. Wu, T. Van Voorhis, A. A. Auer, M. Nooijen, L. D. Crosby, E. Brown, G. Cisneros, G. I. Fann, H. Fruchtl, J. Garza, K. Hirao, R. Kendall, J. A. Nichols, K. Tsemekhman, K. Wolinski, J. Anchell, D. Bernholdt, P. Borowski, T. Clark, D. Clerc, H. Dachsel, M. Deegan, K. Dyall, D. Elwood, E. Glendening, M. Gutowski, A. Hess, J. Jaffe, B. Johnson, J. Ju, R. Kobayashi, R. Kutteh, Z. Lin, R. Littlefield, X. Long, B. Meng, T. Nakajima, S. Niu, L. Pollack, M. Rosing, G. Sandrone, M. Stave, H. Taylor, G. Thomas, J. H. van Lenthe, A. Wong, Z. Zhang. Total times cpu: 2.1s wall: 3.7s nwchem, len=6 methane.nw, len=10 argument 1 = methane.nw ============================== echo of input deck ============================== echo start methane geometry units angstrom C 0.00288864 0.00091914 0.00000000 H 0.19663154 0.62968532 0.93097000 H 0.19663154 0.62968532 -0.93097000 H 0.67319111 -0.92119748 0.00000000 H -1.08378603 -0.34368797 0.00000000 end basis C library 6-31g H library 6-31g end task scf freq ================================================================================ Northwest Computational Chemistry Package (NWChem) 6.0 ------------------------------------------------------ Environmental Molecular Sciences Laboratory Pacific Northwest National Laboratory Richland, WA 99352 Copyright (c) 1994-2010 Pacific Northwest National Laboratory Battelle Memorial Institute NWChem is an open-source computational chemistry package distributed under the terms of the Educational Community License (ECL) 2.0 A copy of the license is included with this distribution in the LICENSE.TXT file ACKNOWLEDGMENT -------------- This software and its documentation were developed at the EMSL at Pacific Northwest National Laboratory, a multiprogram national laboratory, operated for the U.S. Department of Energy by Battelle under Contract Number DE-AC05-76RL01830. Support for this work was provided by the Department of Energy Office of Biological and Environmental Research, Office of Basic Energy Sciences, and the Office of Advanced Scientific Computing. Job information --------------- hostname = nighthawk program = nwchem date = Sat Oct 1 22:37:12 2011 compiled = So_Apr_24_12:17:43_2011 source = /home/mbanck/debian/debichem/nwchem-6.0 nwchem branch = 6.0 input = methane.nw prefix = methane. data base = ./methane.db status = startup nproc = 1 time left = -1s Memory information ------------------ heap = 13107201 doubles = 100.0 Mbytes stack = 13107201 doubles = 100.0 Mbytes global = 26214400 doubles = 200.0 Mbytes (distinct from heap & stack) total = 52428802 doubles = 400.0 Mbytes verify = yes hardfail = no Directory information --------------------- 0 permanent = . 0 scratch = . NWChem Input Module ------------------- Scaling coordinates for geometry "geometry" by 1.889725989 (inverse scale = 0.529177249) CS symmetry detected ------ auto-z ------ Looking for out-of-plane bends Geometry "geometry" -> "" ------------------------- Output coordinates in angstroms (scale by 1.889725989 to convert to a.u.) No. Tag Charge X Y Z ---- ---------------- ---------- -------------- -------------- -------------- 1 C 6.0000 0.00288864 0.00091914 0.00000000 2 H 1.0000 0.19663103 0.62968548 -0.93097000 3 H 1.0000 0.19663103 0.62968548 0.93097000 4 H 1.0000 0.67319186 -0.92119693 0.00000000 5 H 1.0000 -1.08378575 -0.34368886 0.00000000 Atomic Mass ----------- C 12.000000 H 1.007825 Effective nuclear repulsion energy (a.u.) 12.8462005408 Nuclear Dipole moment (a.u.) ---------------------------- X Y Z ---------------- ---------------- ---------------- 0.0000000000 -0.0000000000 0.0000000000 Symmetry information -------------------- Group name Cs Group number 2 Group order 2 No. of unique centers 4 Symmetry unique atoms 1 2 4 5 Z-matrix (autoz) -------- Units are Angstrom for bonds and degrees for angles Type Name I J K L M Value ----------- -------- ----- ----- ----- ----- ----- ---------- 1 Stretch 1 2 1.13999 2 Stretch 1 3 1.13999 3 Stretch 1 4 1.14000 4 Stretch 1 5 1.14001 5 Bend 2 1 3 109.50049 6 Bend 2 1 4 110.25549 7 Bend 2 1 5 109.19146 8 Bend 3 1 4 110.25549 9 Bend 3 1 5 109.19146 10 Bend 4 1 5 108.41915 XYZ format geometry ------------------- 5 geometry C 0.00288864 0.00091914 0.00000000 H 0.19663103 0.62968548 -0.93097000 H 0.19663103 0.62968548 0.93097000 H 0.67319186 -0.92119693 0.00000000 H -1.08378575 -0.34368886 0.00000000 ============================================================================== internuclear distances ------------------------------------------------------------------------------ center one | center two | atomic units | angstroms ------------------------------------------------------------------------------ 2 H | 1 C | 2.15428 | 1.13999 3 H | 1 C | 2.15428 | 1.13999 4 H | 1 C | 2.15429 | 1.14000 5 H | 1 C | 2.15430 | 1.14001 ------------------------------------------------------------------------------ number of included internuclear distances: 4 ============================================================================== ============================================================================== internuclear angles ------------------------------------------------------------------------------ center 1 | center 2 | center 3 | degrees ------------------------------------------------------------------------------ 2 H | 1 C | 3 H | 109.50 2 H | 1 C | 4 H | 110.26 2 H | 1 C | 5 H | 109.19 3 H | 1 C | 4 H | 110.26 3 H | 1 C | 5 H | 109.19 4 H | 1 C | 5 H | 108.42 ------------------------------------------------------------------------------ number of included internuclear angles: 6 ============================================================================== Basis "ao basis" -> "" (cartesian) ----- C (Carbon) ---------- Exponent Coefficients -------------- --------------------------------------------------------- 1 S 3.04752490E+03 0.001835 1 S 4.57369510E+02 0.014037 1 S 1.03948690E+02 0.068843 1 S 2.92101550E+01 0.232184 1 S 9.28666300E+00 0.467941 1 S 3.16392700E+00 0.362312 2 S 7.86827240E+00 -0.119332 2 S 1.88128850E+00 -0.160854 2 S 5.44249300E-01 1.143456 3 P 7.86827240E+00 0.068999 3 P 1.88128850E+00 0.316424 3 P 5.44249300E-01 0.744308 4 S 1.68714400E-01 1.000000 5 P 1.68714400E-01 1.000000 H (Hydrogen) ------------ Exponent Coefficients -------------- --------------------------------------------------------- 1 S 1.87311370E+01 0.033495 1 S 2.82539370E+00 0.234727 1 S 6.40121700E-01 0.813757 2 S 1.61277800E-01 1.000000 Summary of "ao basis" -> "" (cartesian) ------------------------------------------------------------------------------ Tag Description Shells Functions and Types ---------------- ------------------------------ ------ --------------------- C 6-31g 5 9 3s2p H 6-31g 2 2 2s NWChem Nuclear Hessian and Frequency Analysis --------------------------------------------- NWChem Analytic Hessian ----------------------- NWChem SCF Module ----------------- ao basis = "ao basis" functions = 17 atoms = 5 closed shells = 5 open shells = 0 charge = 0.00 wavefunction = RHF input vectors = atomic output vectors = ./methane.movecs use symmetry = F symmetry adapt = F Summary of "ao basis" -> "ao basis" (cartesian) ------------------------------------------------------------------------------ Tag Description Shells Functions and Types ---------------- ------------------------------ ------ --------------------- C 6-31g 5 9 3s2p H 6-31g 2 2 2s Forming initial guess at 0.1s Superposition of Atomic Density Guess ------------------------------------- Sum of atomic energies: -39.65318430 Non-variational initial energy ------------------------------ Total energy = -40.096409 1-e energy = -77.376805 2-e energy = 24.434195 HOMO = -0.480048 LUMO = 0.147390 Starting SCF solution at 0.3s ---------------------------------------------- Quadratically convergent ROHF Convergence threshold : 1.000E-06 Maximum no. of iterations : 30 Final Fock-matrix accuracy: 1.000E-08 ---------------------------------------------- iter energy gnorm gmax time ----- ------------------- --------- --------- -------- 1 -40.1644288682 3.09D-01 2.43D-01 0.2 2 -40.1716402819 7.54D-02 3.74D-02 0.2 3 -40.1721593107 1.43D-03 8.37D-04 0.4 4 -40.1721595670 7.18D-07 3.47D-07 0.7 Final RHF results ------------------ Total SCF energy = -40.172159566963 One-electron energy = -78.539035423165 Two-electron energy = 25.520675315426 Nuclear repulsion energy = 12.846200540776 Time for solution = 0.6s Final eigenvalues ----------------- 1 1 -11.2312 2 -0.9262 3 -0.5328 4 -0.5306 5 -0.5281 6 0.2431 7 0.3079 8 0.3086 9 0.3096 10 0.7628 11 0.7643 12 0.7660 13 1.1616 14 1.1779 15 1.1800 ROHF Final Molecular Orbital Analysis ------------------------------------- Vector 2 Occ=2.000000D+00 E=-9.261678D-01 MO Center= -2.8D-03, -9.3D-04, 8.4D-16, r^2= 1.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 0.404768 1 C s 2 0.369017 1 C s 1 -0.195144 1 C s Vector 3 Occ=2.000000D+00 E=-5.327789D-01 MO Center= 1.7D-01, -8.7D-02, -1.0D-13, r^2= 1.4D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 4 0.427225 1 C py 14 -0.237011 4 H s 8 0.229779 1 C py 15 -0.204557 4 H s 10 0.161525 2 H s 12 0.161525 3 H s Vector 4 Occ=2.000000D+00 E=-5.305950D-01 MO Center= 9.5D-02, 3.0D-01, 1.1D-13, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 5 0.427269 1 C pz 12 0.240602 3 H s 10 -0.240602 2 H s 9 0.230656 1 C pz 13 0.209178 3 H s 11 -0.209178 2 H s Vector 5 Occ=2.000000D+00 E=-5.281242D-01 MO Center= -2.6D-01, -2.1D-01, -1.0D-14, r^2= 1.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 3 0.427260 1 C px 16 -0.281757 5 H s 17 -0.247189 5 H s 7 0.231067 1 C px 14 0.175054 4 H s 15 0.153905 4 H s Vector 6 Occ=0.000000D+00 E= 2.430510D-01 MO Center= -2.5D-03, -1.1D-03, -1.4D-13, r^2= 3.8D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 2.497638 1 C s 15 -0.966983 4 H s 11 -0.966561 2 H s 13 -0.966561 3 H s 17 -0.960517 5 H s 1 -0.156810 1 C s Vector 7 Occ=0.000000D+00 E= 3.079294D-01 MO Center= -4.2D-01, -4.4D-01, 1.1D-13, r^2= 2.9D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 1.705511 5 H s 7 1.384317 1 C px 15 -1.195903 4 H s 3 0.313570 1 C px 13 -0.239106 3 H s 11 -0.239106 2 H s Vector 8 Occ=0.000000D+00 E= 3.085716D-01 MO Center= 1.7D-01, 5.5D-01, -2.6D-12, r^2= 3.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 11 1.501224 2 H s 13 -1.501224 3 H s 9 1.401339 1 C pz 5 0.314672 1 C pz Vector 9 Occ=0.000000D+00 E= 3.096026D-01 MO Center= 2.4D-01, -1.2D-01, 2.7D-12, r^2= 3.3D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.408504 1 C py 15 1.396206 4 H s 13 -1.034195 3 H s 11 -1.034195 2 H s 17 0.683706 5 H s 4 0.314760 1 C py Vector 10 Occ=0.000000D+00 E= 7.627653D-01 MO Center= 1.7D-01, 1.2D-01, 4.5D-15, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 7 1.433811 1 C px 3 -0.826115 1 C px 16 0.505417 5 H s 14 -0.326496 4 H s 17 0.156847 5 H s Vector 11 Occ=0.000000D+00 E= 7.643218D-01 MO Center= -5.2D-02, -1.8D-01, 7.0D-14, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 9 1.456016 1 C pz 5 -0.827168 1 C pz 10 0.435848 2 H s 12 -0.435848 3 H s 11 0.150260 2 H s 13 -0.150260 3 H s Vector 12 Occ=0.000000D+00 E= 7.659967D-01 MO Center= -9.7D-02, 6.1D-02, -8.2D-14, r^2= 2.1D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 8 1.477645 1 C py 4 -0.827805 1 C py 14 0.423743 4 H s 12 -0.294998 3 H s 10 -0.294998 2 H s 15 0.166444 4 H s 16 0.161732 5 H s Vector 13 Occ=0.000000D+00 E= 1.161622D+00 MO Center= 1.3D-01, 3.2D-02, -8.8D-14, r^2= 2.0D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 6 1.199631 1 C s 2 -0.862404 1 C s 14 0.667440 4 H s 10 0.657031 2 H s 12 0.657031 3 H s 15 -0.628426 4 H s 11 -0.612594 2 H s 13 -0.612594 3 H s 16 0.491887 5 H s 17 -0.346495 5 H s Vector 14 Occ=0.000000D+00 E= 1.177885D+00 MO Center= -6.0D-01, -4.0D-01, 9.5D-14, r^2= 1.7D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 17 1.514646 5 H s 16 -1.035764 5 H s 7 0.964640 1 C px 15 -0.862979 4 H s 3 -0.815218 1 C px 14 0.561420 4 H s 6 -0.213903 1 C s 13 -0.167267 3 H s 11 -0.167267 2 H s Vector 15 Occ=0.000000D+00 E= 1.179958D+00 MO Center= 1.7D-01, 5.5D-01, -2.6D-13, r^2= 1.9D+00 Bfn. Coefficient Atom+Function Bfn. Coefficient Atom+Function ----- ------------ --------------- ----- ------------ --------------- 11 1.244213 2 H s 13 -1.244213 3 H s 9 0.970136 1 C pz 10 -0.839786 2 H s 12 0.839786 3 H s 5 -0.822287 1 C pz center of mass -------------- x = 0.00202704 y = 0.00064499 z = -0.00000000 moments of inertia (a.u.) ------------------ 12.571881286175 -0.000000000000 -0.000000000000 -0.000000000000 12.375540207070 -0.000000000000 -0.000000000000 -0.000000000000 12.470306931095 Mulliken analysis of the total density -------------------------------------- Atom Charge Shell Charges ----------- ------ ------------------------------------------------------- 1 C 6 6.61 2.00 0.64 2.00 0.76 1.21 2 H 1 0.85 0.51 0.34 3 H 1 0.85 0.51 0.34 4 H 1 0.85 0.51 0.34 5 H 1 0.85 0.51 0.34 Multipole analysis of the density wrt the origin ------------------------------------------------ L x y z total open nuclear - - - - ----- ---- ------- 0 0 0 0 -0.000000 0.000000 10.000000 1 1 0 0 -0.003911 0.000000 0.000000 1 0 1 0 -0.001270 0.000000 -0.000000 1 0 0 1 -0.000000 0.000000 0.000000 2 2 0 0 -6.433708 0.000000 6.089223 2 1 1 0 -0.002317 0.000000 -0.000035 2 1 0 1 -0.000000 0.000000 -0.000000 2 0 2 0 -6.368524 0.000000 6.284139 2 0 1 1 -0.000000 0.000000 0.000000 2 0 0 2 -6.395848 0.000000 6.190120 stpr_wrt_fd_from_sq: overwrite of existing file:./methane.hess stpr_wrt_fd_dipole: overwrite of existing file./methane.fd_ddipole HESSIAN: the one electron contributions are done in 0.2s HESSIAN: 2-el 1st deriv. term done in 0.2s HESSIAN: 2-el 2nd deriv. term done in 0.6s stpr_wrt_fd_from_sq: overwrite of existing file:./methane.hess stpr_wrt_fd_dipole: overwrite of existing file./methane.fd_ddipole HESSIAN: the two electron contributions are done in 0.9s NWChem CPHF Module ------------------ scftype = RHF nclosed = 5 nopen = 0 variables = 60 # of vectors = 15 tolerance = 0.10D-03 level shift = 0.00D+00 max iterations = 50 max subspace = 150 Iterative solution of linear equations No. of variables 60 No. of equations 15 Maximum subspace 150 Iterations 50 Convergence 1.0D-04 Start time 2.9 iter nsub residual time ---- ------ -------- --------- 1 15 1.15D-01 3.1 2 30 1.39D-02 3.2 3 45 1.40D-03 3.4 4 60 1.23D-04 3.5 5 75 1.08D-05 3.7 HESSIAN: the CPHF contributions are done stpr_wrt_fd_from_sq: overwrite of existing file:./methane.hess stpr_wrt_fd_dipole: overwrite of existing file./methane.fd_ddipole HESSIAN: the Hessian is done Vibrational analysis via the FX method See chapter 2 in "Molecular Vibrations" by Wilson, Decius and Cross Vib: Default input used Nuclear Hessian passed symmetry test ---------------------------- Atom information ---------------------------- atom # X Y Z mass -------------------------------------------------------------------------- C 1 5.4587367D-03 1.7369215D-03 0.0000000D+00 1.2000000D+01 H 2 3.7157876D-01 1.1899330D+00 -1.7592782D+00 1.0078250D+00 H 3 3.7157876D-01 1.1899330D+00 1.7592782D+00 1.0078250D+00 H 4 1.2721482D+00 -1.7408098D+00 0.0000000D+00 1.0078250D+00 H 5 -2.0480581D+00 -6.4947777D-01 0.0000000D+00 1.0078250D+00 -------------------------------------------------------------------------- ---------------------------------------------------- MASS-WEIGHTED NUCLEAR HESSIAN (Hartree/Bohr/Bohr/Kamu) ---------------------------------------------------- 1 2 3 4 5 6 7 8 9 10 ----- ----- ----- ----- ----- 1 4.07641D+01 2 -7.53304D-02 4.13879D+01 3 -2.23449D-10 1.71057D-10 4.12203D+01 4 -2.02410D+01-4.64885D+00 6.99755D+00 6.98511D+01 5 -4.67956D+00-3.40593D+01 2.25019D+01 1.96076D+01 1.25986D+02 6 7.04027D+00 2.24947D+01-5.22324D+01-2.90374D+01-9.20042D+01 2.00776D+02 7 -2.02410D+01-4.64885D+00-6.99755D+00 8.27691D-01 3.78191D+00 5.17581D+00 6.98511D+01 8 -4.67956D+00-3.40593D+01-2.25019D+01 3.78191D+00 1.14034D+01 1.59359D+01 1.96076D+01 1.25986D+02 9 -7.04027D+00-2.24947D+01-5.22324D+01-5.17581D+00-1.59359D+01-2.20631D+01 2.90374D+01 9.20042D+01 2.00776D+02 10 -3.61532D+01 2.38484D+01-9.39996D-11 4.04687D+00-5.89673D+00-3.14487D-01 4.04687D+00-5.89673D+00 3.14487D-01 1.36228D+02 11 2.39286D+01-5.14186D+01 1.38178D-10 1.08436D+01-1.41473D+01-9.23469D-01 1.08436D+01-1.41473D+01 9.23469D-01-9.78870D+01 12 1.58947D-10-1.05294D-10-1.89480D+01-1.77455D+01 2.22540D+01 9.22016D-01 1.77455D+01-2.22540D+01 9.22016D-01-2.58763D-10 13 -6.40265D+01-1.42908D+01-6.69600D-11-4.88171D+00-1.34532D+00-1.17319D-01-4.88171D+00-1.34532D+00 1.17319D-01-1.95702D+01 14 -1.43095D+01-2.32771D+01 4.25935D-12-1.81916D+01-5.71598D+00-6.29197D-01-1.81916D+01-5.71598D+00 6.29197D-01 2.73884D+01 15 1.26469D-10-8.92696D-11-1.88231D+01 2.78127D+01 8.04062D+00 5.99868D-01-2.78127D+01-8.04062D+00 5.99868D-01-1.88578D-10 11 12 13 14 15 ----- ----- ----- ----- ----- 11 1.96602D+02 12 2.37801D-10 6.37614D+01 13 -6.36877D+00 1.43129D-10 2.50265D+02 14 9.11868D+00-1.39582D-11 5.83716D+01 8.26337D+01 15 2.22919D-10-2.23097D-01-1.32967D-10-3.08485D-11 6.39748D+01 ------------------------------------------------- NORMAL MODE EIGENVECTORS IN CARTESIAN COORDINATES ------------------------------------------------- (Frequencies expressed in cm-1) 1 2 3 4 5 6 Frequency -0.19 0.09 0.27 656.10 663.44 670.68 1 -0.00271 -0.02655 -0.24833 -0.00000 -0.00043 0.00000 2 -0.01540 -0.24785 0.02666 -0.00000 0.00056 -0.00000 3 -0.24927 0.01560 0.00105 0.00039 -0.00000 -0.00011 4 -0.00271 -0.02655 -0.24833 0.49850 -0.33500 0.00505 5 -0.01540 -0.24785 0.02666 -0.00388 0.10702 0.49777 6 -0.24927 0.01560 0.00105 0.10290 0.00125 0.33670 7 -0.00271 -0.02655 -0.24833 -0.49850 -0.33500 -0.00505 8 -0.01540 -0.24785 0.02666 0.00388 0.10702 -0.49777 9 -0.24927 0.01560 0.00105 0.10290 -0.00125 0.33670 10 -0.00271 -0.02655 -0.24833 0.00000 0.49164 -0.00000 11 -0.01540 -0.24785 0.02666 0.00000 0.36140 -0.00000 12 -0.24927 0.01560 0.00105 0.37014 -0.00000 -0.48451 13 -0.00271 -0.02655 -0.24833 0.00000 0.18345 -0.00000 14 -0.01540 -0.24785 0.02666 -0.00000 -0.58215 0.00000 15 -0.24927 0.01560 0.00105 -0.58054 -0.00000 -0.18753 7 8 9 10 11 12 Frequency 1575.73 1581.42 1584.19 1718.86 1723.37 2710.60 1 0.11652 -0.00000 -0.01065 0.00000 -0.00061 -0.00198 2 0.01081 0.00000 0.11593 0.00000 0.00199 -0.00056 3 -0.00000 -0.11652 0.00000 -0.00211 -0.00000 0.00000 4 -0.52830 0.08216 0.10823 0.47562 0.12930 0.08720 5 0.02710 0.28381 -0.37800 -0.14742 0.38026 0.27732 6 -0.11275 0.13793 -0.27687 0.00185 0.28232 -0.41378 7 -0.52830 -0.08216 0.10823 -0.47562 0.12930 0.08720 8 0.02710 -0.28381 -0.37800 0.14742 0.38026 0.27732 9 0.11275 0.13793 0.27687 0.00185 -0.28232 0.41378 10 -0.36039 0.00000 -0.26295 -0.00000 -0.40275 0.30132 11 -0.31125 0.00000 -0.11943 -0.00000 -0.29868 -0.40708 12 0.00000 0.56561 -0.00000 -0.48731 0.00000 -0.00000 13 0.02965 0.00000 0.17326 0.00000 0.15142 -0.45210 14 0.12837 -0.00000 -0.50491 -0.00000 -0.48559 -0.14087 15 0.00000 0.54590 -0.00000 0.50873 -0.00000 -0.00000 13 14 15 Frequency 2770.59 2775.44 2778.98 1 0.08518 -0.00000 -0.00254 2 0.00228 0.00000 0.08596 3 -0.00000 -0.08587 0.00000 4 0.00275 -0.12093 -0.07985 5 -0.08131 -0.38216 -0.22484 6 0.12321 0.53922 0.37503 7 0.00275 0.12093 -0.07985 8 -0.08131 0.38216 -0.22484 9 -0.12321 0.53922 -0.37503 10 -0.25324 0.00000 0.41473 11 0.38509 -0.00000 -0.53375 12 -0.00000 -0.02679 0.00000 13 -0.76646 0.00000 -0.22477 14 -0.24958 0.00000 -0.04009 15 -0.00000 -0.02919 0.00000 ---------------------------------------------------------------------------- Normal Eigenvalue || Derivative Dipole Moments (debye/angs) Mode [cm**-1] || [d/dqX] [d/dqY] [d/dqZ] ------ ---------- || ------------------ ------------------ ----------------- 1 -0.188 || 0.000 -0.000 -0.000 2 0.088 || -0.000 0.000 -0.000 3 0.265 || 0.000 -0.000 0.000 4 656.105 || -0.000 0.000 0.005 5 663.444 || -0.005 0.007 -0.000 6 670.681 || 0.000 -0.000 -0.001 7 1575.729 || -0.568 -0.059 0.000 8 1581.424 || 0.000 -0.000 0.540 9 1584.194 || -0.043 0.540 0.000 10 1718.861 || -0.000 -0.000 0.010 11 1723.374 || -0.003 0.010 0.000 12 2710.604 || 0.014 0.003 -0.000 13 2770.589 || -1.108 -0.038 0.000 14 2775.441 || -0.000 0.000 -1.076 15 2778.979 || -0.023 1.073 0.000 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Normal Eigenvalue || Infra Red Intensities Mode [cm**-1] || [atomic units] [(debye/angs)**2] [(KM/mol)] [arbitrary] ------ ---------- || -------------- ----------------- ---------- ----------- 1 -0.188 || 0.000000 0.000 0.000 0.000 2 0.088 || 0.000000 0.000 0.000 0.000 3 0.265 || 0.000000 0.000 0.000 0.000 4 656.105 || 0.000001 0.000 0.001 0.001 5 663.444 || 0.000003 0.000 0.003 0.002 6 670.681 || 0.000000 0.000 0.000 0.000 7 1575.729 || 0.014114 0.326 13.759 10.980 8 1581.424 || 0.012624 0.291 12.307 9.822 9 1584.194 || 0.012726 0.294 12.406 9.901 10 1718.861 || 0.000005 0.000 0.005 0.004 11 1723.374 || 0.000005 0.000 0.005 0.004 12 2710.604 || 0.000009 0.000 0.008 0.007 13 2770.589 || 0.053251 1.229 51.911 41.429 14 2775.441 || 0.050179 1.158 48.917 39.040 15 2778.979 || 0.049884 1.151 48.630 38.810 ---------------------------------------------------------------------------- Vibrational analysis via the FX method --- with translations and rotations projected out --- --- via the Eckart algorithm --- Projected Nuclear Hessian trans-rot subspace norm:1.5032D-33 (should be close to zero!) From the projected analysis The Zero-Point Energy (Kcal/mol) = 27.48345951 center of mass -------------- x = 0.00202704 y = 0.00064499 z = -0.00000000 moments of inertia (a.u.) ------------------ 12.571881286175 -0.000000000000 -0.000000000000 -0.000000000000 12.375540207070 -0.000000000000 -0.000000000000 -0.000000000000 12.470306931095 Rotational Constants -------------------- A= 4.864448 cm-1 ( 6.998700 K) B= 4.827481 cm-1 ( 6.945514 K) C= 4.788478 cm-1 ( 6.889398 K) Temperature = 298.15K frequency scaling parameter = 1.0000 Zero-Point correction to Energy = 27.462 kcal/mol ( 0.043764 au) Thermal correction to Energy = 29.248 kcal/mol ( 0.046609 au) Thermal correction to Enthalpy = 29.840 kcal/mol ( 0.047553 au) Total Entropy = 49.599 cal/mol-K - Translational = 34.246 cal/mol-K (mol. weight = 16.0313) - Rotational = 15.318 cal/mol-K (symmetry # = 1) - Vibrational = 0.034 cal/mol-K Cv (constant volume heat capacity) = 6.198 cal/mol-K - Translational = 2.979 cal/mol-K - Rotational = 2.979 cal/mol-K - Vibrational = 0.239 cal/mol-K ------------------------------------------------- NORMAL MODE EIGENVECTORS IN CARTESIAN COORDINATES ------------------------------------------------- (Projected Frequencies expressed in cm-1) 1 2 3 4 5 6 P.Frequency -0.00 -0.00 -0.00 -0.00 -0.00 0.00 1 -0.05200 -0.00001 -0.00787 -0.01282 -0.01744 -0.24319 2 0.00166 0.00001 0.00936 -0.24920 -0.00487 0.01283 3 0.00192 0.24975 -0.00022 -0.00001 0.00011 -0.00042 4 -0.51699 0.00584 -0.07458 -0.00366 -0.37326 -0.11701 5 0.04704 -0.00021 -0.47830 -0.27023 0.12406 0.01090 6 -0.06419 0.25082 -0.34346 -0.01231 0.01314 0.02454 7 0.45373 -0.00583 0.02777 -0.00518 -0.33129 -0.33082 8 -0.05628 0.00022 0.50659 -0.23335 0.07254 0.00288 9 -0.06419 0.25082 -0.34346 -0.01231 0.01314 0.02454 10 -0.08189 -0.00002 0.01492 -0.02514 0.47362 -0.27147 11 -0.02006 -0.00001 0.02592 -0.25816 0.35208 -0.00772 12 -0.39871 0.25417 0.45070 0.01880 -0.04051 0.07258 13 -0.06317 -0.00001 0.00065 -0.01743 0.16608 -0.25376 14 0.03687 0.00003 -0.01750 -0.23468 -0.58356 0.04615 15 0.54933 0.24302 0.24180 0.00593 0.01507 -0.12669 7 8 9 10 11 12 P.Frequency 1575.72 1581.43 1584.20 1718.85 1723.36 2710.60 1 0.11652 -0.00000 -0.01062 -0.00000 -0.00060 -0.00198 2 0.01078 0.00000 0.11593 0.00000 0.00199 -0.00056 3 -0.00000 -0.11652 0.00000 -0.00211 -0.00000 0.00000 4 -0.52749 0.08423 0.10870 0.47378 0.12800 0.08721 5 0.02690 0.28590 -0.37816 -0.14792 0.38068 0.27732 6 -0.11270 0.13977 -0.27689 0.00112 0.28233 -0.41378 7 -0.52749 -0.08423 0.10870 -0.47378 0.12800 0.08721 8 0.02690 -0.28590 -0.37816 0.14792 0.38068 0.27732 9 0.11270 0.13977 0.27689 0.00112 -0.28233 0.41378 10 -0.36152 -0.00000 -0.26394 -0.00000 -0.40091 0.30130 11 -0.31210 0.00000 -0.12015 -0.00000 -0.29733 -0.40709 12 0.00000 0.56508 -0.00000 -0.48815 0.00000 0.00000 13 0.02915 0.00000 0.17294 0.00000 0.15210 -0.45211 14 0.12998 -0.00000 -0.50388 -0.00000 -0.48775 -0.14085 15 0.00000 0.54272 -0.00000 0.51107 -0.00000 -0.00000 13 14 15 P.Frequency 2770.59 2775.45 2778.99 1 0.08518 -0.00000 -0.00259 2 0.00232 0.00000 0.08596 3 -0.00000 -0.08587 0.00000 4 0.00212 -0.12027 -0.07911 5 -0.08123 -0.38250 -0.22503 6 0.12341 0.53913 0.37496 7 0.00212 0.12027 -0.07911 8 -0.08123 0.38250 -0.22503 9 -0.12341 0.53913 -0.37496 10 -0.25216 0.00000 0.41378 11 0.38545 -0.00000 -0.53474 12 -0.00000 -0.02596 0.00000 13 -0.76626 0.00000 -0.22477 14 -0.25062 0.00000 -0.03870 15 -0.00000 -0.02984 0.00000 ---------------------------------------------------------------------------- Normal Eigenvalue || Projected Derivative Dipole Moments (debye/angs) Mode [cm**-1] || [d/dqX] [d/dqY] [d/dqZ] ------ ---------- || ------------------ ------------------ ----------------- 1 -0.000 || -0.000 0.000 0.005 2 -0.000 || -0.000 0.000 -0.000 3 -0.000 || 0.000 -0.000 0.002 4 -0.000 || -0.000 0.000 0.000 5 -0.000 || 0.002 -0.005 0.000 6 0.000 || 0.000 -0.000 0.001 7 1575.722 || -0.568 -0.059 0.000 8 1581.432 || 0.000 -0.000 0.540 9 1584.204 || -0.043 0.540 0.000 10 1718.850 || 0.000 -0.000 0.010 11 1723.364 || -0.003 0.010 -0.000 12 2710.604 || 0.014 0.003 -0.000 13 2770.589 || -1.108 -0.039 0.000 14 2775.447 || -0.000 0.000 -1.076 15 2778.990 || -0.024 1.073 0.000 ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Normal Eigenvalue || Projected Infra Red Intensities Mode [cm**-1] || [atomic units] [(debye/angs)**2] [(KM/mol)] [arbitrary] ------ ---------- || -------------- ----------------- ---------- ----------- 1 -0.000 || 0.000001 0.000 0.001 0.001 2 -0.000 || 0.000000 0.000 0.000 0.000 3 -0.000 || 0.000000 0.000 0.000 0.000 4 -0.000 || 0.000000 0.000 0.000 0.000 5 -0.000 || 0.000001 0.000 0.001 0.001 6 0.000 || 0.000000 0.000 0.000 0.000 7 1575.722 || 0.014114 0.326 13.759 10.981 8 1581.432 || 0.012624 0.291 12.306 9.821 9 1584.204 || 0.012727 0.294 12.407 9.901 10 1718.850 || 0.000005 0.000 0.005 0.004 11 1723.364 || 0.000005 0.000 0.005 0.004 12 2710.604 || 0.000009 0.000 0.008 0.007 13 2770.589 || 0.053252 1.229 51.912 41.430 14 2775.447 || 0.050179 1.158 48.917 39.040 15 2778.990 || 0.049884 1.151 48.630 38.810 ---------------------------------------------------------------------------- vib:animation F Task times cpu: 2.0s wall: 3.6s Summary of allocated global arrays ----------------------------------- No active global arrays GA Statistics for process 0 ------------------------------ create destroy get put acc scatter gather read&inc calls: 1089 1089 3.31e+04 1.57e+04 1.63e+04 361 0 0 number of processes/call 1.00e+00 1.00e+00 1.00e+00 1.00e+00 0.00e+00 bytes total: 1.51e+07 2.98e+06 1.21e+07 7.25e+05 0.00e+00 0.00e+00 bytes remote: 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.00e+00 Max memory consumed for GA by this process: 332328 bytes MA_summarize_allocated_blocks: starting scan ... MA_summarize_allocated_blocks: scan completed: 0 heap blocks, 0 stack blocks MA usage statistics: allocation statistics: heap stack ---- ----- current number of blocks 0 0 maximum number of blocks 25 36 current total bytes 0 0 maximum total bytes 80068 39337396 maximum total K-bytes 81 39338 maximum total M-bytes 1 40 NWChem Input Module ------------------- CITATION -------- Please cite the following reference when publishing results obtained with NWChem: M. Valiev, E.J. Bylaska, N. Govind, K. Kowalski, T.P. Straatsma, H.J.J. van Dam, D. Wang, J. Nieplocha, E. Apra, T.L. Windus, W.A. de Jong "NWChem: a comprehensive and scalable open-source solution for large scale molecular simulations" Comput. Phys. Commun. 181, 1477 (2010) doi:10.1016/j.cpc.2010.04.018 AUTHORS & CONTRIBUTORS ---------------------- E. J. Bylaska, W. A. de Jong, N. Govind, K. Kowalski, T. P. Straatsma, M. Valiev, H. J. J. van Dam, D. Wang, E. Apra, T. L. Windus, J. Hammond, J. Autschbach, P. Nichols, S. Hirata, M. T. Hackler, Y. Zhao, P.-D. Fan, R. J. Harrison, M. Dupuis, D. M. A. Smith, K. Glaesemann, J. Nieplocha, V. Tipparaju, M. Krishnan, A. Vazquez-Mayagoitia, L. Jensen, M. Swart, Q. Wu, T. Van Voorhis, A. A. Auer, M. Nooijen, L. D. Crosby, E. Brown, G. Cisneros, G. I. Fann, H. Fruchtl, J. Garza, K. Hirao, R. Kendall, J. A. Nichols, K. Tsemekhman, K. Wolinski, J. Anchell, D. Bernholdt, P. Borowski, T. Clark, D. Clerc, H. Dachsel, M. Deegan, K. Dyall, D. Elwood, E. Glendening, M. Gutowski, A. Hess, J. Jaffe, B. Johnson, J. Ju, R. Kobayashi, R. Kutteh, Z. Lin, R. Littlefield, X. Long, B. Meng, T. Nakajima, S. Niu, L. Pollack, M. Rosing, G. Sandrone, M. Stave, H. Taylor, G. Thomas, J. H. van Lenthe, A. Wong, Z. Zhang. Total times cpu: 2.1s wall: 3.8s avogadro-1.1.1/testfiles/spc216.xtc0000644000175000001440000157357412250371054016312 0ustar marcususers?W?W?WDzkh8BXF-!|,"0U,$)KrXg/E`(l~WlWX9{h如3#f֋!GN ~X1JW+g‚#$4J/JBυ=$Uk3 iLޞf֣ mΣX"5P#EEo84@+uh~ dϏA0p:3jvGrkrp"v<)v=q??bB(g(&tYt/!;ؔմL[9 &bpQ,i?"Ʈ (FD/-)1{ F.^Ċe{!\ 3:/mE6!E g4$ٶ4LWn)|etTx1޷ _YhPƖEÝ!UWv4Pya6,y lI>r~3f5\s%)>IizZd[r/w)S V% sy}EBLϻFElb̤*(dɤ\3hH0]v!ruBW }?=+ }ӨG}c|OOLFs^[.1>QB\rXyb4/sc)θ!m{ų T ) d!T+u@9,쀲^z-fx~`丝`x'>*` 8rIޯ81)xo69%vhiuA1ʡɎ_mȚWWj]"}zAtf-o)vgGuYPU6Ql` bz0E qNvnҀ] LO3CiےOM!%Ft1-YA1S/}͚JAkQ^AҺp4 `]GSF! me\%W67 tͯVleLv-ߜg*ЌR:s IKl:Co `~k&+E'\TC"n/'t@ bˇH@-Gԛ/( %Sl~ !67ȅ=,/?+Fl.-i$6 1E \(͌Mk~{ky<ӌ۴V> s*]OTfр[Ʊ%nK"գ.QMd:YYxP~Jmj9ӱ(s, > 92<˫꺖r 9fCjNe5Us1gal2]uT"/!y1B Q?n|^Rtm%OƎa=TV{¨-l}o o1U)?*.GੲiH * 224WdH#jkQ_ 9K}ܣVZ 6m9svpg&hZ ,|AUh=$Ţa ³- ƾe>99)0A/ V_"|6ӌ#NS|F=c,tPU7X'fCݑѥhp 4Jw DM1N5${}|mt "ipyP AX7\(.cǦ%.0±k\VāX*jOp }7@QGG0#hEʋa@_"8Y&;sz&̥ 63q[HN+Y3Pv75*.s$ K;M:XXι7*X+2\ ȫJDRAwݢsh'EV :1LX:d34<@[+SR$JRKEugs;۽xrssuqO.t(zG[?8Wd%FiAנi@j?1n 2X. ' ; " O[aX^?q88@ Xoi}wfQJ@ w<'5xm  ⤄t=OQYN՚ր*^u2DŎ,e@\< ;2=???DzXzv*?B8nT=^Brr&bWqnɡI \|) sȑm<&@6w\^#&z+p˷:o}A$C@d@K /?t1f?3c p+28m֔OIb43苎E6&p}Tx,2P' jCn#\Pf|N<@ UfNf8=L2Ӥ]0|5T TID›y퓹5P3"t)#a#r ҭOYL֖]"tѸמƫ9&Ak:ɤ" H>F1GEgXۋFRٚvjY6./DXuH y[hU-;`Ҝ޵C%"dR#ԌC3,ZfA8y^䇨E;^B`my$Z;Ox~.R x} \CXKR&ƠFL? eTOƠwG{] 流t#k.,STT^3V'?嗍 j^Eb]<>?:q^Nj&,$b $L*_0 ~ʂK^L*Έ3D #g+ %)s,=ӒA/74R%vA XmĴr;.}k1-@("ul5i~8 tzfhL^V-v7^ePYG`s'.4']7bFW4`Lhxpf@GS9'M5곅]}ӱ2+dڬgrfcgZB=2/AEG(Z&,yQj2LDo4GݾQm{Ͱ_O/AKt2wsWSSo§ VK52LG"_sCTFƹ\*׮e\+ $g&;#^Y<>Myd.Z1[Or&5d@izmE8if JA  .hGƚ~aAo!o;IAW0j*ʱ F@ A.[@U¤ONۿmÅ"PKffsXKDpqpfG昹a"^mfתi@uZ 6t&sNf bdk+*lOVK=Ynz^DiANex6KnL?3?3?3Dzm}s?0B8_ĵJ"{&{ -do%  ,XZFiH%ڪplGÂg;/e*$PmniحԶ(;wnFm&oC3Yo 5H&[GL:g嗠굖†8bF< dZ'xlNxψz^1+]P/ So9 &T!#Lz"{uےv`'£a h%>YƸpoAo v:G~1EZTlPn<%4zBlCZ(Ĥ*80F_h>ikK\i> HR]dT2ײ~~+˧j7♉S.h2HlwϊR?np6u7l8$۔'c`)s 0HĻÍaK].U ̇ԍ%Nzh6;*Wtf=NDhEő0Bq;dCnEyLMwt,:*־$/UmX+P>9ZY~ nNyOX&Reð~BRˆfP̧)bȬ/j(ItY[9`3*>Xzcۤ1P-̮Qى6t.rC;q 1Š \T0Nʣl=*; ljB -%uyeI5(N:i/r.Pt5dmalˮ= _9V)C+O0iG1c 9Mчk%|[6 PJM&$tܻ6zXhLߗQ%ul0O)M`JpqiA\%L'E@j ;zUC*bb 0itM(dҀVˆjBzPC]iGmf W}ޑFQETnԏ !UR#d2/‰pX 4뢳٨kLO#j#GڌId_<L USps  /cg잂 EV$몤5EbZ̵| /H}sѣD+-CU̿c$.]jľ ͫiTl+"586;W> tX}@n*Q__@} @(.ԝu:7۵g1+=n kDMA"¿*}(nܪ,mJQg;tݛb\kݗq|y5gI[x`H78+ۖ&΀r-JbY<o`h&m36_¬m ^rwc IyJJ]IA P0BG%@3q$P`uŔZ{+0r<ĻR֣dRg,vX: `zPCa>>L=Jv1ǬK(J&Njnlb'V䓌df[?<2_R]+ |~" @eٻ> kՈ+ܙ>`gWE"l5l[v^wǒR"vc-ޱL &)@)}-X6ERCqLd[mSI^iBZ˜f g8x_6oO4קMh, cP7J3 ]= mlߴЏys[yT(Es$qn.5[^fndc5ZK/5 ڊueHmEEhmyϾLfeRllYM;w];'Fu&6 X=&dT8X^G4\>?P{?P{?P{DzweE4C*< B=*qUBiTdEy4zK9;UPN}sNR,REhNW$Ƃ-&6 yhF+Q.}ǺS` +2UjG4ؙ'Y.s2(;,0a0yQwS}m4RQNlu4ltýFTQ2OI^v,;%BmN^UOnU~`*e)e, e"džifD_*' sv$7g#,2 '#>@_ìv1 k;&.k'\i7N$tޭ^>/(dAۿ 𢅗aJh#T4vm@wfgB feS_x.Nd5l!̼]E:d*}$"3DS9$ Xs@^X=ͬ^yp_@vKBDI@.]S,wN}h,݉DEw1@!KxMoPGy@X56ژDsѠZwx'g;p*ʼn#Rq 1AO&(z D"tEm$̃(|߇Zn\m(!BCQ }(ļ 4{dP?~f8Kl_`WF"Uu?*U> <y~ɱ##$e¥3aѴN jExQI`cTy^a|N佑pҾA*  pqKd-YCGv˧Rc>E|_|WQYqv/H$zDE;b0sj_sڭ͝4sB4|Z&@~)ꖮͶDX@NMEQUhWR5Sk0_{0"Biף${Oab:Nk˄VJ-h*7H%$N*<P^eE%[ ' dCAՄq7<GB-R.*ey[}HY]"O`J4Y}At!0i֧L8oW[mk1Sn5FGK^}&?dK(эb<:3U&Eɫ̕{qˋnz."R& Od>%"į69'[ >n~i?]9?]9?]9DzXqo:C/XPf) ::2wF?LOTEnn=U Y'NQ6m›hzwp1eERϡ <|B%>KhyݦF,#to߸C$ &y8kTS`TYeiMgi1|Lj<,0]IƤ_erUGZ9*< ym0T8ؔv@>A5؄i5To؃5iq^F->ʉkPIlA`l.t4*sCmMK+I'-o+FD4 O `OW~SI.ÄZ~rYjlm-0$H\M41_פ4(QEXx2<v}Mc*f394g%G՞"hLr[ Da""DOt5mO 'Lm|bV?JhO3L~vחc ^sSp ^IGKfvEe`(k'$"-C" O YVNGD<4_esIj&c8eR0t6[P ԉӶMa:5z8#dNA('sn,`Ej ,J.!UrSO,E1FB@Yn3s6\(uAeeFTPXL?ܬHd˯x`Y , j*R፲!;4N9@ d!b)}}Pm R 6{|D }ޝtkP/o!Ń܌N% (z&" K}1I狤R%bEH^D1YAOZnݬ}3~V: !F&K֚xRRL8uAB,t;8a:-%FaoR>ySdXdMCsΪdű KvF޹?>ð=RAX|VLν *ȡBBC DwWDz (Db lEV W>T`~IԢ0xӷuPX`eF"9VC%< TO9BXA8ir,Ս'z]zE!nar 76NDdFi6| u*Vqc 0}UVS._SoR-6Lu=kZ-~}tOS)zX{^֏9px F)r TTJ͠ {p-C  ^`~tx#eLj 1C2KlҏF=BuڂG!= $ǧL{ >HlM4&4KE1ęs#ǩu)\u} b;weIv Ѫ42rB{˻VJBHX/ڷzvXÛZUP)КbOOI0 uɐiJMZ|:uH9E* [Gn(r1n \\g\JhmGFN -U6y)?9/<׏+dp]N~G}GVx) (LyHb-WW# hJ {;f3椢G<_J)ߨwo-,J~8 Z'MFel'9ЃՆQI4^P)(, _T бbui%+(zS-I۫=l;Q_OgBd Ĩ`.CekI$Hlq Ѳr$=F,Oi\рo 臂b *\޷P܇86&BCF_RՇ4è1s 1uiC>%:0~+IrK_݈T,˜˟~C P|"Fdz'|lYm 4@+t\.tCs̩JR4 % gNb`M3$SG#y tеS1H Qآ/vBBa h)TzοRԈ:VF`xkI4+z*ˌ:śå<@G4˜YV= VYEBN/B65+:"q 6ة.&|0bP071X  ޏڍʭun iV7n&5sz9XwSEuIR%Xhyzq@I*H'2'D6]ʧx f_o\\v|5?Al*Xi!v\wLG cG\nrRBF6Ug_El /)ҵxJi;O𚾔YĨ;3$w>?@*UI{-Cc@xĵĨlˆy$ғ"˹Gm.t. FP6q'&._º,/_ %1|ʆQhwP0ʅͷ+ HB+N=}[(_L+ÞDAY*{om6[0ƜeV\S*?b-;]zgd7"~:aÌ[ŭgm'  EF͛q.ĦbYItX@|(< .D޾m(.Jfwҿj,qV% LS)u6VBӬcLӹeXLj*)刂m9S0'z:09"|,تH;,9o? f yHC~aoVЦ/e[ͱxr 1FGVi{"4R.T Z:N4N]S=A @}3+Y_|=I" tMԊkF)A@N_{2Y0,(D2"D&EKΙ^]IJrcb#n)D`AFpV}m*N i+Bf&+Š냰 XܪzBI[\s/t~ejF);PI=*`+9V./5elH/ESkGY>E+ ]ti }ÇRu Oc0MD)uWKeKv ͉|vk_WPS3„' '-d~ܺ:DxHwz%k@n}v|;PAH4pGi3 ^t'h%8aj;I%= }T8f!+E>ׇ~VsZψe6|ū=fb0BJhi\/MMm,ڎ]#Ó걚,ЭZ᫐.Vf͝qJV%٨#U=#u3 7JŊ䃠sמTb^mh36swD4P EbaG^Z(k.eT2IE"a%E:>rLwAH¾BXgo=yCG7h}l*f6v3p1l:< Ka6Vc2Ï秐g_cT9=Ao[n'$Z+c1 ^hY]䢐,??C?C?CDzOg?CJ@2^!g~*oE2zÔ df8·a3Q`JkJgfK68DF*TBrZ @3S] l d}(W8bzׁtn(fol 76A-4_789" "7l߁N@m/x{,0i:wl7h&蹺w99g B ߺdGiuo+ǃҬCa'T:o#ha[\8x抙FUe":dc$TH&`D]CMoL~v/ |fh@!XN8(Sˎ<4z-<%o˝Fn֥(Y+G6Z :I8s[ڢ\ ua4=XN6 KƩDyӅ,`YÄ{ѫ %5(  ,f˜꬚>l ԩ+8I'dnOV vh%ި%uw@-Qǡ)BԽ *A"J97bAH!I-4Ya8y? >+RFW6ja jΙaWG:-Z-BJFԕYV Q}~ CvA0g[A@ ;k|'d^̇D5d,dT,D-̖ke/RiOї..mXU_F((-T * GКP¢aslq֪b]~u"YOKPB7J7Qb'#^ni^aۍxJy}LZ`VexV\.t_i f2eS3F*_\x@nɨ?B=6؆}[}_X@sUR&/Y}t%ΝO삋v`.RY7x,M{zFcBBk4Ǽ,>K(oin'R%%i- ?Qu +95Wz7/ 3v<¶,)nGk֊H|ԕbڎPE>Hg'E%d-X[|C`7UYkԎ#\Y6]9 v=C)$)9Y:@2)4@V4$HK9(r.34odܼ+-3FhlF cXjɃ^?334?EN?EN?ENDzdlW>eqmR[1shzh_UQ}İLGaXEhtixn.„2/iLE½(׉kwEW$:<́x-Iv ve[G>猩MDJŜ#E :u|zwRLbPtB0\(dl p`|n`tPu> u]5+ʒX:?421kPp5e1B"&e8dg]W&P%hm>;10p#L3(mXIU蓠ԍ 6A8kQDc$A7"DZOԞ"/Lګ5dQԏqܾ-ΐ[G+E;;C:/] @e \n-6f0;xjAϋw#M_\UǦ2aNv,,T|޾-X`(i|'k(x^otL45:Uz@R1{vVohrK3R[[^V=>7^ Kv6=dng6;nuyCgTx^;fGԭVj `ǃvB^B}n=?Vgyߞa}F _HG}@jI2t("l-JϯrDBz z2U[?{2D vJ>S?"!ܲDݵl2vT ji0Ɠ4J]O( T},_Gbr `[9e ~cW` @bEUu8{XdLsItBf>"dZwb'\Z"$Q>p%,Q $Rm{@+[`SD~%UGoWJɚPM iecԭtC%ѷ^Eld9(!%-G/p艥\R9С+KV*WF'[-=OaCQ.kjoY-DS?)XVP:=JNw>/*/E -kTC {Tow0J!8%*`2) 4 |hwU H6V-QUb䡐Pg?>7+:,7=X{,P1mSaf(;ěoKjL ~.P>;AD8J'6Ab'cy.pϩHeG~mɔP+*TEoV I)n|%FlG?dȯJ"Yӓ2_O qa$'#G?wg+0y["6*.ˆl=᫇sဗ=PV9G|=V_gTaϓԱy1ցJUq E}:Y4` 2}} P@4ޞ7⦸Ǽ[?L???Dzs|#CCnhb:w#5ӏdjO5V[1 heRUDŽRmt AъЋүg0T-% kc`gW91(|Y>{JE0 r#'nFS*1Xя NE W*'tl 'ږbN=LI&҃' F()a҇LF(@FEY+?NFA(XFmjL3C#.`P|0'Ztp&|j4|˕ZFqZ̵r4w$e.*ˀM2S9G8D䎧Unl|[0&Ӣ5RLQPF_6i&猨?1rk9/Cw P E&F6oA~rMS$:֏`lyy5mݢcby]?хEVg\V%g !+JڑU<5Ji(,És,I2੘x m:M[&H=mjAQSތl5- z͝3¥|0=B VfZT,I&CHw/j8#Fr#Z>!rc$) &*jn(glb]m CKj @x_׎ #h4xWL'eb };ȋe[G;ƼDFT2y8;wOEn{)Q0"HF(S&_}À*XnZCJu SB$.5n 7h>p3a{ ƚ1c\*II4PYR5y{J&5|A>OqtbYeBLliսܘԄuID,Z'QZIY*L{2"9"W FkƢ캔&)rOl|ѫdž@ն.},ʗ+|0T.ӷ" c*k}Ƣ\HMn^pz .0vxFR14۟a,Kl55/-t&RLt%ڰ}#@e8&\1Ԕ#o-4퀪ٰNfeɲdDk36F1TVG{$[TUYXgDc19{x̻R"Η$R2zk^Hu=c̬f6ᮾDyϔ7Z*"<2T/ #]IJ!}l5+pFN_Sx[\cEz acX֍O[(ɞ%m6@3 ҋլF*?Ufb1G?nF|^Ԙ%ʽ!D.4p#S,",okM9!e|觇0/??'S>eHt#lZrf$07'0a !Wnj|NpVl(.L07eӵ|Nn|PQaۈr./r׾Mѯ?] ]mp\/| MDE< m0]!1ǃwV]A]Ex6o POb/oL3#䍦!~(}oeܹ'yc'ʒr)kǵE bh"ʥb~0Wk.q8 @?6UF:zյu=h'֤6nmlqr@os^Vmk 3&i ,z*F,Z\INV Es!tֈM$ v3\o8\a闦WK]CߺpњUK&DKp?$n\tB[2 ϧ D$waO30r?ffg?W?W?WDzI6BBTZ PۙbuNY,#LC NIoyJDDr& H2M Ggc|da[e;-b6(̹?!Li =`Z*=!؁gmOrئW XN8~n7:` 3}D%Pa*d^}~ aǮh/ogN;J?5k<?\Ϧ>qEV.(L=9ϊܡV3m;AsHp/E ɂWw~ isIƇEZR2: \LS:$F .#ꑱiNF>ZVlǡ, h,L5ZXnl`X%&ddPn(⵹ݩ $gwؕMP"=Ig 8jlX&0Y{@9T8Uu Um˸Yρ[ٱj SFE cq-wT~ dý 6_]Mۜ̈́AQμ*D _ӏi=0Y.\NbnG:]qδt߆dBf)*nQ9Fe$"y"J|#Fĭ`@WZTIKԵ(8T cndL\0FY#A"e2~[z@SteukuZZ$向hrpZy#섫yo,wG%ζD6XH+((Qwa!EY"to IuBv[(" YՐ-1&g  92] ZTڛLfz٤#Ǘ'j|[yP|_b*ߺbWy"H dnUBSƓĒɐv$U|F9zy, 2KSb!kN,V'Bgr X蘘ЦP7P'NUl&)t#Aj]T$Vܙ &.p6_Fx%ǩ seZ:Ұ$8&3cfkO ap# %%c)Ti$EJO> m b)`-[ ؑPP<;ބU@ngX,6]JL"^ Z}]vB>Hmu)YhƄ6™ٮH}IE5➂ضWvJ-Kw FNg@aU{bEn7ʯ M*< Y)f;H[iޕ@_w5a! B:fC/O+tAV^#>"$2։ZoRu2ڜ7΢Lp3E JB'醪QJE҃d p{ 3nU@ohWciNimE9_}]5oE 5Cfɹ 3!/E#WF4_$^!:Hȱ 2%2DهZnU0$؊ j THߪ}2mRG[@8pvؕiFں2kUF]A፦{"%n6G=????Dzt?F?CmuRW!Y%pʋ]opú nTHhMhT$gH0(d 'mߍ!Hՙ6lh&k$|ei'ǯoyJybpF\p₦B6mBx?Thh~LP٧9 J}L9|+olwnM_=UUpOR[ 8t\bSDo}B^sZ jv:k~lP]M2\#FJ#:/!ql"Vhe))<* L] :TU罾NWBׇl79Iq43> frc 5j޶WbN1pN$BĠЎW.Š%I5i"] .d\4Lסf_ȑ[#vjk;<گz~(@" !n+kCH ewBVoCޚ#A z 6Bs P=4tS=?,r!(+GEM,2jĪ BS y f8vS#}yUiBwax`!(03R'+^vTal}=!qv EYZ_`4SbY.,ױR:ȋڞ( GeтHBn'g߿Lt˕4qRFҮ+م;DDqk^!CGE(+ `l(` N霻pMI) Z Z )Qq@ΩoF ŖPEJ{󙰛GiăCD?1Fl!3'䘭5~Ldy@cuHֺlp'¹sgx2WNs[?ȕQ0sU9Pw$R"чb&^tF0n=kK"ℋHn܏,΋<[GM$$]x ,Z9beO}!RJ ȈQ)YDžH;&uo t$xr+d'ȨmD BP <|o2Ŝ+F7нOa -k;X3idR-v%KnPDL&L( aTe8oo*7@5:bwI3L >mi.@n!엉fH>c]ϥOmRz*A/7튏wcEk'k{-$5oi+x.o=s\4#=]zbHvɊcx,XV&??Tp?Tp?TpDz;2BS69B!ÁuݞvȆM0#f7EsPmE*?)Klw5M|gk.*)Cg˧GYb]z>/T-̐17u5=].Ng(J4{j;MYX>t&MR/g)*!6bK JCĀȢz *IF\~`?;ދ?w^Jzz-,\HvY ԍiDnp7JEƋC6tj;(?|4=f7N|LyvG9M@2J*6 l15B,9q8f|}QBU"Yw_%ubEئՒ]$d?ZhU!UWa'A_8֭mf hApjZ$h]SB-o25[լ! j]*W%!k*;:ś' eDPU/lRؽԹVsn܋#jN*CҗxK6g+'y!D BG )6G$HEkXn.AA0D oj6JTaaJ_k[+7e &h9Vt@3>X^CyXqLO:ԫ-•KkV#jյOx/ [=ї \VVK#})H鼆lV.dռAJCN2y`_IMIJ+:TzeFYژQw !X2ٖD3tj$} %I]\ HCv6t0A"8y{E[hǢ4o?0o%~$6x$sX}(ʴhB |ٮv, jIϦvy/ERO,Y^UXjr>{$vxLw8ŽV EUy;q.T%kI?oy7[@RLz {뛧ϛ*Ū'b3=g5hzevGyA?˅OFC>q>:fFO^"]g)wˑW,:dj\;ŝVi\39@JXl^wmvI0Hr0,m[+EбabuB,=10pS/{P*z|b,1t5l_By^i+Eoxq2jgmvy~Pnl(` (CY4#KT8;#Dz|q詗> *,$,%#?}L~URF98 v#)"([D(anPҋ2 E㇗3HgAt]<]Gp% EŒ`',^t ({{T0LNlppG-O9k>J`B|` #Ye걗a<y/ƍ`2FZ{5YF'#N rof#uEErQkx`*FpY!$v ⎌pq:,Mr+[̎o8Ճ.Yf ~Ұ$JHN 9:Xv.}y6"İ$ K}vDi+ppEӈ&ۓ,μDr`B{ Mdeh[g\ٻ=Rp!^*+M^Ip\6NopBE_FOiFɸ G^+8 *dpjE&ЕU}f0D4.?sxt_*TH2LnGnAYKm }<4Qa|{(Heopy Ff6SZܻXn78B}d`'j钻pEDpѷ+vD;h\\"dNH9Ũ[%{y; a9(6ŵ?WPCS%yqf轆Vh6PzP}C ]!.6PIΖHw(_H%H+vz+'56w"? vmC BCV\ϋ6R\ ?YJeNG̬^1 ׌rb>{t4zqZ> ,Ƨ7LMcO[0anL8'i] yJS^1\X$` CS2(dz*`*ɨ >2e ~ uXVD0[HhL޲ }4:Ӣ`ND3~z0k0jcDJc\h30 edK!^)&ܗ.9c{05UՈʲ"s)%057].c!sEYrJAݰ .dm LtS-nc0<$ˇN69[*°XaԒVeB-x ~k0[3ź0DHS|6ˀ/:+WOڌe0aם*=aGKUz갇>FQcvR:ȵʛ`k~a6@@JR{uI*V2u羙dU-bVeQWX*F8Y$v*\^-ưrhlk5VqP,n':BFAԗS<cagCj4VJlE>6gajPÁtc 6XEM$ܤ1;@ժ{y!lLVK7Ml΀?34?˕?˕?˕DzBCEl@d@o 2ua lvNÝ tAZzgۑEX){ آ|+9x4g铒#)u w4?tJA@}CG|@Cǭ"fXq~ORy@ݮh}v G79Z+hȝPi$BvLin¯:ch('E%!'\l .8"JF&v|!ӫ 9j7  Q2-‹St൳j_K#S6ND6_dUFtE uGiVO2cAl3c8nSXN.l[%5C6^HQFhymif0ʼn݂Dm fs"J߽rh|mis˺zF[尗Xܦ3D9"2. 㼅䓃|BMb;NeӋוsxKͶppe,rQۮd]KO >3:| '!SM4bFBCnj XvA{N12P9+?S ?] 񚤊voWQaD4kI9obd C ZC$é#i{$j\|}nWI!7KoXm@D-tjN2g>& tgʑF$}J?U8Ӏxjo:0Z6vK#;|& tky>bݚ@ʯ*PtUÁ:5h]RȩnzX"7rNiDqmmFU:KD;~{jdp!2>5(:cz]nxq%6 UQ+K9=^bCp=$E:_nހ8Y5W*[r)"$ , m4UokdAWM+W}'~lqDk%DFp,%Y>#+@l[Ox8:+._H?:(m%'[e ns)H1y˼A(6$q 23Nhܽ'D5wb y x6Rˏ'|үZ\ww qp'EQ*oZu-xZJkJvh#W͞5k(xk}a┄M"juK#6./۶[y+뽢ߐW)uR?ȃ%3;NJR?ʺO/L9hnS ňYDH:XwgadȫHZcCe^X#g',]R%E.~˦9yqfd_;/BF A|=DJ6<`(-$|tE yڵMs# ȪW]9BTegۣ~9 gsno@QODU |`N` g\ȦISc? }S| |SCvݹo`㜓P4pA Kw,f4'.ıŏ轄G~Qd 1tz5`$X0*ǩJLU[yY:c%@ш_/ WvF,*r.f@J*ex!1 R=sS[&2h؍$Cea_ xWPȮNc*?QHN 5l#l).j|Ah/*: Q .NlyE\%KިjYȚ~lmqP1pj'^aȜAt>sW vjyP[82YfD*$#`^QEDˁח>kqPa Ӻ n=<ٮAJ#;<|gS_Fvv6=|GcZ+ߦn4zO>%<Bk[fU}=~89kٛ"nا;1(Q"ECf-~u5,eWh̼4Hv ߟZf1KlhBoRx2FPPbN@Hko0̏쨶kxl?TMWP].`JeV%-倲SanĚEExJPt 8&>dܨVG؏i9_Q+kŘ a;!x.;m6sj(߸WMՁs2PJJ, ?طͬS 35#AXI}Kg(ʍ#<7$,@+1"N4#4%Ԛ[aJݰ=#⓱:d)/v#y*) eTЏ݊lĀ)»ؔvzAɐXę;43 `>O`bjDȧ/}>BrU~In&ST1O`Spzq /dO7n(yi.| p0&#t6Nw ӛYCū䂦f+R =丢&Xe`Xgnhl fĚd0&/B1Iy, *z'[NE+DJ ????DzeCk0B<6Ҋ6 TlG8=I,hG]@OԩEMdiRd(91cqpc@, ah_ C6ǟoRs`S B3a#iK"”6~snnififOjqgݮ~ FXN ӽ@$ 2AP­oYv-[" ep[a/R4hΉܿW2&-aDL"Vj-d d Deރ;x>EU|w4@JUO0J\YmhLY?dBGeYɸ@kTA< S('9ߦVRNa7^ Ϯ'T2b .-sNZ"z t|E隽պTv5kɿ.9K8\c.O(ڈ"ד~0!ݰ̛r#/Nr䫼ݼ wOd%Y.C&,^(TNdJe PvWhZTH=#ujz%YlM >Ʀ "JC%uBB2pblv!\^H;]al>4M"!`X(-*)vmb˔O$#_j &VR܅Ut,"Q=6yTe)r):P>ze~v}R ChN~|$Q";;BqO݌OLc7DZkKрEWvh06sgHB'>5BT>\6 6`hurp/?\cڷo$\˟#g%]y鯫zhoidlYx'aw>ګ*h N嚇n*AX?&!u%9Grzժ2nY(YIzdt+FNE׻z~e:G__A z0ie#w`n2ɛ ry{]IO=49iIy\A,sRQ&DaSC~gxe8:Y_h'`fh~3^9 5xU&>":{v{7^֛Yw\ub,:jd \hZP8?Q̍krA'ŷ6ytkٻH 䚞qF,gnv2@|{kR*R d{i&շ(g@[ OcV U)lb1#HtCuާ/inx}4hwjpB`[" Tg&xS= Q@gQP>(~&iZqp%("[ DV,M@t`uB\u+DiHƢ@v,^([H h7Я؇0ye8daؾV|'NKVIxχҴ$"ȸg3t͑8ޢiڥ6 : krؘu?= i6R>1Yw(#s/2B_n?tv~V7.$zB4r:RC!8-sb*aOr"g-Esr4L mI85zL8)xdV x(bOŧ]Od!Y}dSx ꇼuPWlpY,)r<}tf p9.lnXtcĩ*iZȎ0:J~p|ն.9m @9;lVپ5b*1A:P1{# \"F/ _SUesTl?ZЍB𘋾HNc5cHO|@`/&L @} ;̱uq*EV (jud vފ7XCoHe!"=8ʾ4 kFJo6~yhكN @R?ٙ?'(?'(?'(Dzw%4B]@pz\]1mGTia GYB)r[&c6d f!{bj` qZ8c .Fg?].To@wM-qH9k;l!JwHdb6P3yNk,> |'OX"OyVʟҔK{à= ?F+X&R ˋ°C){I$b, "`DEYO-t5< wO Fw@}1~_MɩTgEoef4vvOgrB΀J*SRhG#c!~*79έWXc^BBM7k򕄨glBzrP.uZǡR7p.墄 LT޻Nl醾Z-[`ͥPtCF'H @=5mrB7AZ0+e1=慃av.^aqcCqa<>P eX IT f(]GJK;paGwϑ$uoܐK3GncAɃ,ÎCHvYXrO~g fB.lO#DLɝ5(D8l2&kU`hnRHڠ/PT)7Ūđr`kK;T%w cY_ % WdCl=ѧ7d[̷9R\w׶O9 #G3qУH0C/g?3dmi,F!giiG9#W&fQrqFg.jlÿ<:H *Kŏmԙa"m}e.cXy8GW#캘rݰ!MGq%]Z%&A_6L+,ʒPru{%@v-ҖfoNDF_fho.6.Fa- =E$ ,|J2dClOLC*L2)3p'J4Ԋ' a ln,-LہڋfC3%ILyZhʩorF  ?N }v^gPld^H*֋ MJG_U2xq^n1O&Jc|p-();$MEoQȡɢ`sݾq όBwѐEL3ٓ}D7 $h'?~*P#S}ǃIdOQF(pԃeQ4tJRbzПH+Zi^bd*;$[:L_h9&6?A3iҷavWM*<9\o _)؁fJ$kg+C30` xeMA˛k3V8cI) B,v8|5bƬY]RjnWJarf;PV%.#QBp]sőBM@#w^Ssfto1Cwg[IQ!?ro 6!`fgMCX%=)ݣfKn#2ٳ& rU:C%dlF$-6bJ9-˨$4_#ۈDDpW?fg?"z?"z?"zDz. 3CU8DmLaYqrg꧖ͼ%0FNy2f5跶,("$H k^=`%ܢL(@BewÍSDB1hLlϬ Hxj ޓLG ܕ9n/f, ^OT)g+Yg˼PH2eUGHSΦkH]L濜ZrN D0A  ?l6څeV'&CnfA6qLфNm=TY^'J`?hmЊ62˲LVY;h FON F)6Њux"K$@;6@m O_vionPXityJ2_dǃN A Njm>njGFYO=I Mk[ ?{ʆrL湔jh,: ZAџ¯.,NpnCΞݧ*7=?)[=܆x~٘&9:,;RiqdV~M5dW{f^k4fEΡDzI^5*d8FNEjS!RZW7"۽lLqicq9M<Źod/lА蒥N)*Nп/aBԲ|! nX$ky jŁMNX곏ҾVa/ pDx2ؽЭ{鯨UI.bX¶oݣPHV)oeгktWC[hqmd`T05@t=P `= S7H̙[rZ;_(@4g׻+]G@|xwܩWvms vh,_zϭ#bYFY(( MսZ!OP7+uv,`'k Âg6ٍ[b#yC\9cQtm+,qv/ IeezKApi ~Y״ ? OLN_a= q"jЙɿS< @2 u^i/K)Jm_bVtCݕ$f.p%)U L.3t ̓E asOoj1 |WO6[6Aa5g_/a(]k@bU:nǀeD_V%@؋ { @GaEgwCA/3e&w)YP$F" a=S5?^F0I}s慴rWVts[uIG X_Wd@AS4/g!cfܝF?0?xuJ77S\"ny5 J63YP>NʨW/XuD]C$;_'2oTQ7v 'L=jlvjȭ)=zA9X_ !c-Bɑ%Kf:=Q ? 0QܦݙEF< qަ_" g ؜$QR|+{Z{kz%c1帖*gR~PFwb)YR)B@dq0CZht: YBFYY79tAV9t'gҏ`T82qZ {ȔπZ2ѹW*/#Rk!p ud}b!鄘'Ы}<+ ?kTe];H>,H.+RDF;P*3 p.™١3~m֘?e>[)mD<'b in@`7<&7/wRPc,Gp1:(e_>&WEL0(W}̜Z|5P(()g&0<İgdV 5x)\ NsY 0z$ PE,N[$5fms8 ?JY>!Ё8ѾStPgD7 ­X d;Udp~˃o*Ae֗bI ' r("( # cx@ou̻8'z:np},BCYyrA> @3%nc.mY&fhlӻX6a4$3/Nx[MWd[w@ohs֧w;;RҦV/!G}".Pcy!W_U-ĆQ:O!j^ =yV^Mr=yىK-^S/Lƭ,Ӳ[@3*qXy4;͠ljKJD ^=Ey#=2,5ր]LV /"S'qh@$]+ZU4ȥ+m0Gp4 OP5O 9=KLڏcj(/W#d1V܃oI e}vi|#Y+-*^moeg,Q j-"PX-1ZmӾR;E ڈ`c,O"-yNquMII:b֖l#( >;~Rfqoz$>j@NV$A[-v;g3Ajٶn|"yKc^cyOwa'wZm lrX.:M쬼|U%D`(5韉?O$w M.U/U0҂wcc'H,<^aTZ[gaδBLIpSRE@ewoӏ¨ۻ=ZTY $ǕDZGlڡ9El߼N cT'6Hi.Ⱥ2s&,oWMV~qD\ez nM,iMnެ'/r1 Ɨ9$ W\Ka(*cl4. 퍵ߗizTb) -5& E(FL4@Uop֔W:hgi_QfIlJ @f%𸙇_ܛ5fo M>y9iK!6Mcĵdg*-J!2I4u>c&zX/󎰻Hh@lFxvka"n+L4;%*vd|΂xK\?@+_/S̶ BG%)K.dRO0$s=5$7 @Z\{SEQ)x4Qcq&L,sˆXTaװ mK h=mh uAᬢֻe d.ŭ}$W"u!%[:rR%gVM_S-Qu Z'iMtꩁwI8ybJ jbt*r*0*lؒF"R"/btDdi∘J*-Ygʃ"/9#T 搁|E'."\n1+6M "n~lޠT]@ӿ/Ȋ;q/vzmp_AT%q7ތL596DZђJE#kG})4aQgT[/hOj0%Ӑ]Xlצ D'\DLQx @fg? V? V? VDz~.Ch(2>_:p-{ sidyk ^E,->kUuMǚ9="`VjҦ$Ǟ#SbYky'$Upš⡣jK ǛY !{kV? O ?RkckA W*XOL?Ei bbn%EL؈V` J|؝;4Xg2W<;.2I6ϠQ̸ׅL3P8áF(mVOBT(cXPtpLӇ4~Ur )JjP c+v 3h2-GiPW -y-I)p0@$e|po+&&jq^/:'DΘY !ӇkEg"&[3#޸~QiK?ʃ6Ϧttn;NY: ѭBzz-z\B'|rUm苳O-vQQql>eUdOV[$kZrl a@v nq0{"ą:>ph쁘aƖOi wc+aM>sF#D{=ۼ!JN4d0^ ;FWnDR6&2~,AAj:~$#ifntc~K2Jd)398( b{43,Էq 48z ~{ dMnw# > MX]A&V!ΖT7V,S3^6[9NP?h6:@ ŠIi@ݥ>Kigi[ATTT^ģrȼ'.wLv_oA vzY(θ 7M{- r %R7XX(9y RD>x¶WxsGC͸VhX `e9fcgͤS+X;\/JաLK-NO@YEBb|,t#w\;Ahg=61qE@@z B_ܭCNx F ŕC{[KmK`kY7qo'FJ݄UizS& W5csfG0ηL_Qyz}G&䀮<$Q}PMiVa݆ t$=%!Ro CsY4hgr/"%!]/[X x')H TKjr2JF-M>!5-*󀽙nKDÏd!%%݋b5LzM,l x/dqFDzlp)F[`_ j 0]_bo)\WNfP" *aPpo˫]}oOwt_Κ}^;hl0aMw1]%IyzdRrDAVnxXmr L@ ???Dz^4BvV$BvQDZ Vq0y(bΣ KF$E,fi+CGOyd9,N'+O6egz*|Gh:f%Ҽ\n«Q(쪮@x>:F YC5i[J^J'au%`nUF`\x2>!z; $cV`qYjAںJ)9أԬ "]p)" PB4Ttga_cb%Kn!4 {V%{m-, 2}ƛz׽du<~u 4G6:+~{8>p+ldHU>E1d`c?m_,}?\vk3M-d,$̟Ai&+YsMZ'Jc@;5 Jrڷgsgq_#RӨ5*tʀx1=nʢLQfÛ0]r'-&y9A9|i2TAήVXLinCH1rMbvT^J.DҔ Xg<j vbfj&P\>H`rq[nZJ 0NI%z7J9K8T(sC~jСˑ+'sx6xcnv \KsK(9`2tirPm$-Y?Am.$ArpJC uZ8ٺhDlhv3~u(LKup8*T@6]s;A|"dkyݤ4ORGgvz>,,="@^!:oxx^2LnmeS=1|\'bU.C>Sﳭ7|\>U  P2L,\V/fݕB(y4@j,62R1XGUhg v˽loʖS_:qWrsz?'AE][amP5 zz= 73qd1-ڍLw2i&T}K|9 80?· ѝĖv AE/7\שONʩ6.ȿ=Hep揗e=j¢nWaS=<G(u ;v"ޅO='}lf:MDV/x< oiDbD j,GƺBVMMb)WW1[meM&.o|2:[;J7#٢6OZ[AzA*x[\H6*+&EjEf딈ZmyM?k\4\~q=S({4i(/pI@Ja_`35)B  "LG̱gHoK 1|njӯ2 .)v~[Ah)i S ׷\͑Kv}N`n#+,`g4 7\"Vsnz [C5ט|CJUgR"W=D1 > KhB!N}ӈE\E:XBroy'D,JK>rkF=c#H't'C^gPmimb,~ƙ:O Ȱ^Rѯ}ekZ3KW0Um o敬߯[Չhkݔ*j쉀@"~-Fk|`}6d˒ F^ZcVl;YNñՎ:heu~ D@%'>j"&h{A&_P΁'E9#J>-~@34???DzaC8CǸHAF`rJxi@#ɋ:0`q :ULm_\tFƢ2lvfꦝ}r d<䷊@t2Q7=v}Kj/17OihQ?KȆʾ{ ׾RGjU>H g APMd4kC dmY~Qe㎶Cŏ[@Yw*0;E& pY~S[Hrw$q<@ӍfG |/l@|'LFN]^&X@ Q4ڶ#.O/R\&#3@~d=%o-)$І- r <*/7@2@]jhvNyȿ: mP01]Z~,U6J!oMn.c)fm= u?g}i K:{9 1&XoSUdkxGǚ%G6ǟs :7:5hV1%uc!$4NB0"ą@%4  a';%kCknM?| ^H/XUACu]$ rD,ỰB-K>$+ gR`%kpf)x[yjjMc\uJPW(vm;A$fWqZۖϋ=%j--'m @} `O_bYFÅZo軇ysyuaSj~$ Ir5.o.EEnV4yn`ͨ_ѴeIFR鵵seQx,kͫ7.t,yFZ18qF ͤmADy.I% ([c{zCЋ?}vaw @W1[)2pezHh{!p B9<[>1ŧcY?+g{E:a *j޸Cn,̏SA&t?,\"E%8d HNQRnflez\ԝjnbL]wMUy{`W+=(S䛀豖Yfɴz4>z#G ; ]PDИ^y#<U(eZ J)Q%{D.y B-~.V Fv !ژӺ5elw xPeiEx0ԝ8}ݗl~!%+jHx@vt戧`[XX3S!)t巔;W†0]}l%TmϖNtk{RÂ8wN(I#wjH 31 )'sR<7q bhh-nyc:ʔV6帨̘+.8phMlL~57$/{LYz=jF#4-̇9O^dZZ$Q?@H360b7LQz1YS,CPѵC۩QX0sIL뢦9wEz._:RP/Gw0vx &J녙qhJE*LS0T ETgcϛT Ж7dHh@?:?:?:Dzgd@BXfdn[xJ^S=>UH HJc!\ul(~Di$⊆v$F1_b"8b0\g5\RGDKBcڸ(C$Uhd t%)LG:Q$}-s<t$=TQ)a4tE@j<.W0[Ux>ӃI&$?t JNu$[BSvscx^$__=:x^c|#siV.í?.,W?x?ȐxC$`DN^'jD23O- (mQOJaDԏecO1ekΥm X voȾ1ʻ0But킗 BE ZcɰgIpն;vVNCNpcqɖ4*6]mVO \Ncn;´rPfַo2ެq sPbл vg\x8Rk#R{Yڂ=4Zd"lUSoS҄1*m`AǙjjxDtZR~/FV ^Vx-2lL7xLF)y5M}^΀f|&'hW{XHxr8T,'*6c,f 9"E^jo\ sꅷ +@@,d?ÞTKy^NdS]l\):>/9 [1R .d<(,P%%T¦|,pp(7F ZGBbeOޥ~ǣΤYeEQ:,b{x~y7AI,&7BF;&T6:VVjBM9'fv(Ka,!+`n3^A$UGz0N/yuE4&[dxY!EQ$&jL@Įkҥ>ھ&?J_I7lDOa>%@u Q 0Z5|Du!ES66m\',`$F׊hn"X߭.CV+~W., f),ЛOO(Sc]6ai':KuCґdU'/%, [c&o.zhU pI<&19o†RxְW@)\_m9!4^ndr }V.4TT!}șVR"bЮytpmXIݫ,08y3-B ?^[QMr.tl[7Y-)v ʬ cDW̟*oaR5,/$u)u,E. al`pƙ9^*q4^$UlR N9ʗ4} r/Qdfxxt[Tr @Z[#ѵYj9Nt <\̖x'qYД |ݿԉԯTkRfK*ō8P{XVԞ$g9kf|N+kTV"]Ն/lӝѡ8̭ڙn. vZjb3:xP+%;OۚmP5yd~հ ~OH޼EdU-:r`xpiDJKd~Tϵw+YspקIhGU+)?. xc^4U41CE|Jв(ʛWOD%@ ???Dzyfd*b0C~ >\tfV2nC:k ~N1ah-+EfkC&[!e9*ZuzgЪ\+|G2i7{7 iNq瀯7@EbVjqP6W2} ęŝFngNi2jQWPʛA{z0>BZ _S9e EyBHR_UB`FS-m M Lv/ s'>'2UCphɜkCvTsul0Ť p84Z( WDnnhA41!(]n%qq4݅k|* ̚9&m Z6hL^dN2:o> BJv}WgpBi{JyuhfEOԇ23zlG {{Ǡ'Zb\~9dH^4 Kli7BELf孞xm`PɨD~ _Q- XbD[:~V{+s͢{ o,5tBI5N mTAIb^v |Xlu5U&i &`"kPiárK|U)pgѲ &ul N!& =RSsFBI0o:N@`pOvJ?kz\Q9=:lvbs}Ez̛Y'c" p j<"Dk[YfJT lN­4OwMeTH-E|a'FOiE &JIF=@+?WaҢD$؈JXn"\h۫SP4-[斍 hS\_,f̛)XF5-"Qs~.Ky Ԍl*言yQ<٠;Gac CL_~ LB=qM*'\ #rg>MD򥣢bb}ͅ9V[e`iD;ۣ.lu㦝 >kX4䠢 ͦK [)($lЅN2$$gmIȗPf[gQJ\dVd/]K݂9ՙ)K6u6$ig@ |՞z|+QD-F.t䁧q,LiB,RI7̯ؤ8s/a/]&kDKoGcrTJ/MsyO*Ү**8S{mhα!f"%k( ZD z‚2DŽg4(K-窨eF*;̳%t~ wqW,L1Ѓ@^rfhH 6%kCY呞\و֕VF>L:B-5 zY8Ɩ&ǧ:uJ SL ?MJHoei&k)Cԁz.LY+' Iэ%M -vI>XQW|/^͙BTD<rLԡl'Q9+9x*}F Fè@%Qk̝W>w ߄EY=Ev422$=K#jՒFǀoUm>>ɊvuQA<52g D_{7U a^LPL纍!v3`g1/ YQ(C&B9zgàh*Qi bĂ8)Ric!oF98Sx 8Cn j8l:`@6I"N $2KDŒ;\H \ Q~k_e Z^77V Y׺( mlG-B} 6j|Ljj0]!WGXܿ/nɌNfp_ @&fg?L]?L]?L]Dzvw}1C@=/OϙIVn=ˊq(CM0R_oD2^7)V" *|зwM]I N/OIs_hNEG>ؘFH3 |^Y*4ǣzO><ҲB,9'y=4ٴaÉz{@Q~`]$+,:<$buI@\(6AGׇ llD^x!|UV?e/s6!Ъ>:?!זpW%~V2cQ\?1`-co#SdrS\::Kê{//ev\) ^ z9@b(f*҉|2T9oxVu0: +OQCp\\YiWbOG/`_vX B{Pm(SR}ti],ܡbRQ[RClܡ=LFn%dD͎+sN>7VhAU, =!}(Z1(WG#j=NM |Je}\%\ᓮԕ 4K,#/> _).+6>w `^ap¸k\c(Y輩]z(M) jC.g^=0=;dʼn֢ޥ B!kl'}BQdtjI:h}FJլ:;& _$w^unF@,???Dzsgu/Bzr4NuB~R’ӣ//(8nʶ,Ռ UH kd]iZ X@z_keyZ~/Pg K@"<_0·@3M}I {9N%cp۱kSN ?mC:ofk E]3 V3|іeβ@@xOb Ge"#&d]aeӻ_r=3Cpw(,g/SS4)(}2fQ^76Ф aXȩ(,,;]9MhI}uUCh jTAFnf%1<-Z*T<1) D=r@ InxLs~FRR .&dn)3*nGS|ɦ=qSoJ~YfꩶVifƸYl%97DBHtX3n@ .<Pf[(| ;Eqm]r>'Oٮ_KI8tru,0r :jFcsec$Vߥ(36q.Nn]`0ÄnL.Q&dS sQひr4f՝RL%W36S'Fؐsڮ&R\:IHufhNVs9A!c@w[Xvmh^" 8:D\?r[хѨ  U *m'!z6OrP?J=K!e (NL"ŊU[B]m4 bIJ &|CHf /1JK?{ Wl΄ptpiq튫$G$qNByɫ'5X&y?e,m' ciYʲ;CIP5 罥A"ְh853Zn ^$nۧG68Er) `KÅvQc \ A 6ma%P~HEԑ≇Y:bC+(;ZnMm6Oډ~Y}XgwPg"ELUYO lj ɭ O .ikV3`2y/nْllJv-q5dBD Lmz4 Gg%m̅kyOxGCkI59WF/;HW H٨n3.\ĄSt阛XOO1 ,aѨjc*(ՆjO;Qd\7F*3%@Ϭ0d}+$`mL[&>yǴ1R.@YA4YъX=XOԛ|Jmp@=GBd|\N̈ |5%5L,F^%kA,N!).rWtW0x@334???Dzzwȱ4BB'|n/H]x!y Y-4=l bvYÈX*zKqɑeg/%kʁ㖇!zAQ ~iaj@*!DpT8B\q6F:3 |Ų y"FCw1ܰG/w[Q7' VS4"AHBObԸe#]AT/ʪ"_~B l7ϚN^ǩkyI'8Y$bє5ecU-w4Ճ)ȏkQ <xKheJZ|8"QPl2WBj9XNkeJVr R^B {Ac^" i Mt/Iasr21c!nj BnQ,tһ$ySO|+L3`Tm\ap=(d;MP V̤z M@X-qTL3 |z:L1lzߡӅӉP+ 覢ݩ Q3$2У*V)uW_!U"qln}P"3viN.Y{gl75yǼ.xm'-ܮ]MvlP5k^t'{@(UhρUd2b9rhi(txO<2޽t3 ’=x wQ09%lxK0ba걟}x0|ύb2 x Tt "󩋞}A\>#lFTl[g*ԡoD,Oކ@rpJ%5R꾏`֔j%hP;BpUZ*Ķ B8cZR7;:p`AxVo gi ۲ZpAvg (q=r2` nԌ$O$ua7 3.n RL uە~kF?\^vfbi95j :]F}̑޺MNBeiKCD^fWZ 4֠R *@:e<@ ѯѳzEnƄ[CĨ6,(m~,AY['g8fǏ 2YMI9](d]#_J$ԁa of + s*TwSsfV!v Z$_+\vD^{m9:,殝ZvMCki+ 0/'&@9?h?h?hDz D7C0N$8vvc[Q;Z x.SK|T#[5&\ܷ)Jwv܇t>MAê l&Ƀ^K^{kRk 4$ K}F3zn)_[-FrLh"԰0-IMh'>I]-.fxq~VJS(D{A4c5cѢٔXcTiN< oхJj"NUj%w3Vqx&k[^xU4X[/HGeز,r􊩑0WGv*['R@[3%U(6"-F8DQ:6“R0viE0Lzfȡ+җ"Z:„A"ס&~:LAo1p]i7IzVj.EؑSݿܣcGtcR\X+;Ty :FhQkZ`o\J ݌'+8Мp ѡ3<}Ol`kƓo/Q2( "%bֱ"A,2[s+ n9T>Xe:ArH<=э B5zz,.T-S 8|H Hkܼ;J\ܯ!AJ*hW0բk'h2l0ƐN(`e/)~+muxSd g}jpaW۪T$}EPWCLݘjAK=v}gJR+VM`Z  =vB&6J>y0 }HXf e0fr5O>ꉢ > ZFHc%\xo<"#kHˎ:AB|`"i6фiaGD9oŀ1C 'Y1qȽ0IUgrK+'9&PmO҇i2 s Ԥ)ܣ`)^-b2פ[$׋? cr]F%b7 KnŢ6k^QߞWIFq9aadQDh5:èWgH i O;Q i+V޾* H[5 Nܬ.+?{ѣSѫK1iMh 4MhE%et.?g"Y #hATͨ,r zvⳀz9==P21!Cx^k=cԪ2k#x3y gUM\saEN`X:˂|G.a("A4Qוp@6& }Lٟ"̰:o"΂ 0ޥEnQFfc!ڮA"BUXE̥\((>-OpbUL >ĵp< Li`RϤZa4UsZno^Bi; ',@Y+w 4Z*`[n@I9x;|%^bͰ^`FNd4DS|a'x*(:!BC:&˸a)*sv~;Ĝ=f$~ưB`}.2Oy;P)ɒ>UtbްIF™{|wP MGx=JEDF$ڞky0 ɄWt{no8*^d4=D2(Zs? iP 9߳`TnsMG%=$jZovDP< zm` :"V\v> @3FX"zD|:= DAxhCL `1UtV 7?"',[QIz^.T]뮨y s}cl(@~9q6y *{`؊GDށ,[vlѓ ]kjN? PLTd3X4[f`5U3NTpy(܆ՏY4IZUy+MrIDR AY.-S5Ƌ,+@@?|x?|x?|xDzM!@C1ZKr~O< Rs_XJ(TEIXj]L,'bR2V~S9~EⱔmTJժYnF+f D|J7&}uD lR0ReN vjS]agI*^]b`fkmeUme8$-_h}N7+jÔ!f~ѧWWbxXiS6MꭆNF dtMXX6iY~Sd'{QTsa[+]= aϑC𦈯M顓_BJ:qd6!_<9>ۚ1ڎ]-v݀/yTcL˯y;kzA>F[ 1Β6hYtk QQl=͕G^ TIY])ڳ9h #om3߶d_y\ǰ~"76w50k}"aBj~wXrfځ&Ѝh(˵gݷ @Od!9%'kY'b(@Lyў NKaհ}a攽hE|'QV>2:-lbj)sbdL#Y"1³5(@k_L5t2 4aV{*pf4-=|49Twއ2`qr$YK8]t{yX#XN-Zlw}g.Ά8lAUb;)T)};vϜL :Njbu)\w~< umNV\p,=0O3;>\QdO5 7,7 `v?f"J;!nIۯk6DOH_}Xq>􄈄-Vf@N@Yp[wޓjG @ <\!b8 z.zOI%)}hFON^hAѦV ,xi%ȂhZ87S`̨}U\-ޑ_g- <r՞. :%_ /!U^f>]|V,kEf۹1>2IU0<^Fw֍Թ'cf0eFG=`ܤnbxpwΗ֠)DD&K| k1X7d)Ğ'? T;cj$ m5ie>]|-Dakщa.a')r /Uᎍ#4@)r`hMkC?lHaj?>eN\yD1=FLA2~]OrП(,uG8gfT0/ZPqrAAR]:sE@$00 0`d"d;H쓨ko6`mypG48Sw}ɞN5sSMUK:Vzh! b_𴱃mc#Tl6dP:b+&<48Ou\r6`𶓎>V4|zg 14hXh\rlk)dߗdAɌp#%-_6q`5pv9sCSLg<جQ.H5P;(~8S:  |OJKj٩qq5YPi3n@ m|4 .ޔU/btjwlC)v4^"4Ns* WvNXT9̅OQןXbβg=έd@OePZ&{{dS](gr9LB;+'Q]FxxF?=7<5Zp)Tl^Aȉ:"OiT,)w7tJSq6Ey c8c>ƿI~DxIGCªخj}18< JK@:v66E 햳-4v0@@Ffg???Dzu99BVB~`p#:yR4 qDڗHI"+df*-͸ }H:N+)JaJ2sF]‚&L?$E+6YU͂m飶]tE@b9ꨡ gprNI` ׏dWd?^, Ns׎TŠWc%vCz"̽/MKXIǕ#]R`kc"2+أbn^:ި쒿,t `Vl H]LO  vP@@˔+qX'hj9R}F{~y-p<`Spv'ǟ'fVyE (_־s_3 .(b)'@1[Addt]/H; STpGۨS4NcrwB j|˜\p=1)xa9z2aY<7R{I j)p6uvrkf*WvEbu v%ǐm-Og/>: 8Ӥu(u%[ZB{֕r*u9:P_nsBh!E+EpJ.0lD(gbN2Tlxɕ?L7~ChvjBaBV:9ҦCf/ivw$%ЩĎ e,&KoVfNbqhEuۈ7ΕAqʤI'r>l˳X܈fb}͈I6w:Ɍ?P8vhRxrb dd7I^-(w+h~_߯k4O 'gcfLqi2e))"eP4.Ȋp';cr5_8@z㾸b}0fF""{dc 46x< ! xf8oa/ր." g 8Wðlyz ^S?V :;?,ԊU9Rx\K͖/kA ZWr`ڗ@dM.gB<' ψc"?E*&g֮&I`h\!l8Cs.gi\3/^4armA+xHQn OAPr(*^KJjΓ<@.4`/5U&AńJyk J󔦇8&jZ[Xp+rh1#OG=TllW&fAxѕȏD\_fL[+ >=_qԲPIN8T恟Nf(97U  d~Ԫ EJxu-cKs’VqN=%}1P)Vx (G.JwB,Hi/TMD; 6e2תK<yBoc*7&OXLQAUe'xR{щqlhFEׅFL lC+j ݄ak+}j ,D. NljF%U67C'iz y($8[paJX~(RV`~;#cБ_hpZbJs.gg+Sm_S<`fwDVi֫%>> HTa[ D^%U`nґKh d6f*0"5ЅIpeNg^k!͜ӦNȨv[(D*y\]BJC Sn 5(pA* ,z֐B&CěRƙ /*lϭ'f!fc%]+C@I  wlA-r.2(k=۟ea ~x  cp'R`L2 z8^HHUH*`_~0ΪNUῈk)%s'Hg2j ~/fg&:\;zn'Y>ab91Agf@h\qCSklZ- G1!!6cj·~Uwl#l85m`[g? Etlk)NUeV#qcXBPhzg4}7pPH>_B76@eBH k2Go@r@S34???Dzu46BE(Bw::pYZbB ;P֏;E`[BoZ!//i gO|!SŇe,1@bz. B|zRf/ {8ă"< ;4ddDr}/{J &~`PQNz/[(˱vsjb^5jtd"[g͆'*pR]hb57c."gYLX(#7Mp-ja^iMV0^2(O,z =w!paM jbUKW8]ߛ5&"v+cO_I?b;v wQģԔPupw+i0pWI4Lb֝}aȐ&. Ѩ"90Rͤ1[|FyK}O7BV:mS9!̌CȨ*I0VW0iODK@B~t 1DS1ؔ4:tzhRgS0zzpK`+UtE5R^[T%6-]tbUnlf\AV-L~s'O$A%Ifw-)mtM*=!Hd8rYp4M .[Vu+9)'"|#QpB Y%8*&xH{j>O]жU|7{j, ޺K$'ҪTRu(N,I|kُAL򸁠yb,>tvP"Cp6&JCD19R}U:`G/,b/f XДE(r?S;PZC;.xGf@a q@^}!Uӏf6yoa#r qGEՒ)-{iMCd6S"SvFU{|*.Kz?#M h gl-.\g/n%s.-y1LSU的&kHCi͟RfXYAM@Mf"0ŵNGRuP~de'A<~).>Y_ f4NK `p^IN0ԜXJʻljK;!8#4>^Wg> -#ȺV8Z9=J*DE_EtH<#Ic@"1I-~+evE{NhqY#7qWL:K3y1gB"-?m0"Dݪ A 'P v-"GPJ7y.tCtkĐ<57|t D_:fNZL'm.ͽiۿ־-x;}54gH>_gkޘN7C kzoPe;}D;LvmSg Ѩ1$C).<3A:YrC`iJS!!W/Q`Y+#[Ay%l ]i'9A3.19vu.*פ? ;kKZ1fܺC<0VA@ l)AC9!H-~X{ &d(2c"nC4_2Q3 g *FNJo/Q^?ip< &[>Yz xd yv#I ^V+ ԫ䍂a4E`B ]Hslj30ua1l,D 93I8C1>Yu,djv,Ju~@ ܃I rk=H DOcvP鞮Cy{MSD7ϝbkֱ9-sԻp1& Z<4*ă3>v0! AAŷ>On\:S`n- 13jBk=,p?&=  XR _rE0#'CFOvԆK 0Wc{nŃzvl.+4HnyVEcj$#d8{X;8y7Q5+RaeIn㠒$/|j8 HS$Ø6m"d8pFQY7[bY+mp$^ _lQ4W*pUڹL1mYۛ 1-2&.VPh59 3E}Y,E`=lH_T|7ϳuZ`$gB>C)Y~qW%E.zrU, o>fP[TV@ ā -W#)FEx3h',}d=QxF6G|$0izаFd4;'1VX*&!j{QRbT~Me `!MyӠCCBE2)/M ncCnvt?L^T=wsDs\ZrCC>QKdЎLYQep%d*vTzrf$dfd/3wi%(oX =V֏Vq ]یS@<=~5BpRSޥ*Dƈ;Wد4o0## ϶}+ArB !^'cda) *,!7830J@L| :D²WH;31)oAoSGI$uD73tV\ڗ16⬣Dk!㼙!_<hr Mhi~ȇ2Ʈ)vmc`GǛO&@?,! xnqkE޻mGo)bB4cTY*;uu$@a|U!J`P; (Iy?Ke&"߳FbT;-fzCzd~TT!G4n j,D  Oq%Gm(K :"L(مA@cXZy*6kr^){TZÙ2@`?&?&?&Dz BǤ:H:x6PHQ -fBсmz2s] \fVf7۰n1[nw%#e/%~BZMHpDe^~l$G&p덙ZH5.𯋓^ )D/^/h am(Mj,_1$ oECKǫsTbQB )Xmθ1%H_ÈWJPROuyPvHJBCRӅd~86B%^/2=]JAfLgXĘ6'~iO-*jADiI9]6ltpX;T&2J,QO\_BpƁMF;/N[d?l< sl gV*)z)gPؼ[6UEkӐnTxP SZJek;mvDˣ 5ړxoTJ왟+ѳ d%gטT }PdBvq-5B)oM`|=WW .)(eb@jP5扜 Ȍ)ڨ~y+dW'׵%ݼ &GP]6\_= %R;hj4C< f<Q}>0n-K%ơckpQH\9ڟ֪UBkGޏpNp܇h1^5kـnU7U["^?iSTT5)-_Lz#<p`%biՋN]Ų6=5z:o7E~54<?*0@}CvB0ӹ1gImkc8n:^( &f kjN< 3E *K?4FMǽ[0d,+UgwExg^EGm|)٫ LIʣ*$W"%?h |cK2anGZ`^Q-tdO~*&_ųy̓RǨpdc9H00/񐋄z+ 1\~{Z6 f'cD:irmy$P"pyR..kJmQpMa%K`b?c4T5qf'&*Bz@?@7H`=rv4,@>䛜HcY[L| =Y,aN#dLgm]t?0)^*moT^<~寱>.)aWSrhzKHzPĿ{u$2 Өb^mZ4JG[#D/3s{0-j|5pHڞoSH#9 ̅:ZNu[tRwp\=$U~A6EQHɝ'PN .-8f2Xudu\6./PFb+_ZR5&zOvI }weG0K jipw'޵:5q28N?Qe}C~_/nֲ ˜K@ffg?8)?8)?8)DzՅJB}?z}33Zn5k|I-vUvJB&k@lD7e@4oEmT# ˣIPMAh٫J>;wg`R2T\s(nbK>Nf'M" [S2:IC[{fτ>xEx)7(K#I^\` &K 0ap15{~q iD"<_uk^%7k\)IGJDm78W,oȭ|l6W 7!D “:h*2y!! tS0"k6A-l>Wշ~N~ 8ت9T.!by]UNu >G2q*D`^;!r`UVD0#Ux6Q_`H8|?g,Ți,d C@#SLNϮd9@5tPO _~KDMq [YqIt)j0f8wTTh2؈5T^BiiCn<}=+jaUsHCJ+\`C> I=G%<+_45s-r>of+] Oз+ v^ΩG]֛p卾*h,li @,xA;cK,(r5S W4hqgUb[oLs{( @^Ŋ(}ؼ9U1!T0`Jʜa٫yӴV!L%J`sWZj#xSv:b-fB|Hw]tqƯdt$w@}>eTC{%Vm*2|]d`bOuykAؽ2Pɴ]ɕ'>, c#DGZL}q;C rz'ë1^d>|S`ԕ+ÊޭޔBf=gN50UİU1!<:DϲPAu7Hp*綴rjX|؁-$ym1[E)'MnJ7MU~"R}gFb6Ya2qkbRzKO v .qSw=ܼI+Hnu&&A gPbAVCMΧɆN^h̉O>"3Jt2u~o^m(6E{ PǑ>UccEt~$9>͌f lLC-z`5UzWws@4\]fzf>,w#7jm b%ÑN{-"m~Hie2ijՋEHF&SQ7u0$,*\Γ۶ piẊgʩya?΍2pN 4ݧ- tT͉X;"KO>Cd|U(H0%05 ^Gn#[/8P+ ʳ A:pN qۿ<&n2_IXѓvCxܚ:7P\aixK1*4N3'j t ,kx,6z:hJ}ӷJ bgod]X=T^>.$$Ią$(5Y15z })l@|yi}\.V׀/ r젫Ԟl{s6:h$D6F)`y J# Wm9yIb<^-)SiaZ%1Ke)e^]29{Tnj:@l?$?$?$DzBgPcź?܁lDt(=#nn3MQنU„U;~y عLqmZ,)!ϢQ:yX MB7AK&8zρºorpAz{x$mݓYkaQձ^ՇI X osP6ҭ`xvnsȌA5#v*<}]kb̼"+N8N¡b{a $?;BPxIdk ŪI.DP#F$CGҬpPңc6 X̘~5z1+s 223m&/hp 7*~KAuh@c |u[H$m+=Qb#)O/a{a0x(!@HK@ILuVRdm؞عǼwc n"p.0nBDhfM>UөArˡ8㴩Y:p?o=50c¬pX&Rʹgh0]V"11*g.,R=:Bi hȨ')oiXy6(y = l{3(OG"pe>^ zk].G\HPK0j&{AZ~\h 8d^ e K7sÂ֘:u޵s"0yB < 8{t$ZȻR+={ IR9WKIm}.c`\*nY,c3PМ$YЖ[bgGdIjZrEʉJl=g핾Mzo21;T|%vdzkq+Lg0(8 *7>cqn-%n%U:h|Q 1kAw%y+i9xGY%>吉> ]PFLIAfB4QYn=20`6s;,坞i/#4e7ko[SYd_%,pW_*)M~:U|,R4bz~l+ZR`pt`֪bfwKݵͧeyGe^<{jKU$.ԟ(jxB:)}ze8}'bҚ3Ou'Ȉ!}୩{"/`?d#]ॾMV1 hjYZY$ITG\_3Ne'!l[-B6)#ceGZܼW8W>Y^\bL^rK56Eg} QnOnLE ~XMaG+NA0 Z{`Hvyz]lܩ*-? AW2VF^x&gt5q֢,@o7Q*5\ߊ,{@*{A!`!L ABG@=='3:s Mv *ct0ΎE(!bV/Jk>HvUݶ \W|C7HrL#κ>V,Ǝ? i?@^̩Np[ݖ#eSVL h02SqZ&84wecK]~ШY.47.[`@L҇T{`nBBn<\q­^C\:ZAbDLGz@3!Y#Fce+פ:씺lSղN34bx6Bk<ηjC@y???Dz}f#C0s{ Yyt~tlYҀSM$0 ,F"2K2J7ʭKDɶcdjIH$cTK|FwUx);\رM;T/FP.Q#[væRψοx-n`9͝4ɪv@绑AHE4N6K]Hc\7X~ ; kYm#2%KjQ1qya&4{SB)(o60 _9ڙ9# tIt+nύ )iWԹ̘㳢i^ OUbbP.I/xH`sa13PU_vt %vTҖSf`~bԛiH4=\:X˜ (6dK|x>sz&x ߮Q02P2I5*nJ+b]pf"Y.O\N` `aE Œ7>;:2_NYLdx,bp%Nn` Y9*|6)@ ?=Dh}VBY!) hJ2=5f/߇^h.ne }ZJa訁@dvE@Nt!!:Q#;]rﰾV6?P6F(@<^uQXđ$g/6v @O[z5NTt9Tkf^Ӿ>EA"7"# ސ)/ #פך"UFdlhj|' bʹWXbR" /B^LuLT7?WP^ cPZhfexe&环ěXUcb VÚz]H==TeaqTPvMMyI1duz۠Euh/zlq(vMDZܻVDr+)*̥:!h%ȍ Kb $܈c?Q$d4lPŢ/V &2 _B勸% xԪfcP 8;ZxӞkj0%K{e"O~ӭ'gp] A Aͺ_T$KhR c f0t}1V^7TÙk'OE m9 +&C9!^GmlYTSqf*FdD+ ʓNEQ~=}>8K%Cmϰx0ZbC2́^-IM,s0c Z9'ͬ(c%'[MIʕf́kdHt*`ɳ ^Bjb>R?jŀ?B[FB;w sFV$UN7  ɯލ::Ѐ oRv'(Y˒6{F)zdx oȉ%8Lp(r]MF"\FI9᝜KAl=|ŃToڎ *|׸̖K_+R^טC '!:Kn!U ^1X؄A:7!&yy‰!_T:LXXhlLdԐ$`QpEzWw3|ϖ u9Nc1PͳEfyYz`gje}AƤj ЦEv0/}УZD=(oJ6q£l5XH\dMլNҟ2 qhjQ85#v4e=DWpfTDwíW^v^ ]b`BlyN;J(NX"J&]Jx4+T<感Je u2 4cC>RXy0ᙒ / #CGqC֩NSƕ/WUs?(B[_,y5e HO ѡj@?p?p?pDzyuuCMPoÒzYY/??p(btHzUa'ge.Tܪc㷾gT Ϫ<.^D`!8}-*ݧa +ߕǔ/;" elNx➖NJ5V1+{?"鋠/I΂`}16=a73P͉@]Omn5j٦9"Gh R h }q:iZnEIF|SjGsI!?N-b#~4;Ft\j \%^24+ʁBڙ,_oJV&PZw6e)=&1R9ed܀hgT7jo;!­v9C1d \jgv6gg"|%Z)6֗Θqח;l8 3Y@40qܶ?ϰO} ?.K#)f$|dX 5 vU Ћmf |[ÍLq^ ȰوC(c ߽2S$/ Z@Z`V{q%UnZ*7z7 sOBv!bcX@&fȞU7Q.`H+{~𓈸 WFE4KE8N\c\L3O%xB#,tEn\ٻ֣uǃm}T4*ySdÈҀVxM2wlQQ "-o_٣w8 GUQs:B:_G;SN?sԚ$"Ħs{/?c-k77{c߁E\Pε3Asr {4Q5n`5\:TқFpcnr'm+jJ #'rb4q4Vլ(i"qq'Wq#-PEItL _ WZdcE:t:`"a_Es%^jH|) [?0Ӈ'mGFfٻ='Y8x>Oxهȧ5u'>9Hy'_;(}mxVB[O; ˎ{ i? f:OgbFn.T(.}Kp!4?6ޣP~Y4jQY8ܵ"HI"ڠx u.дG+xH-g =)+ E<;oy(!+J)?T(~I_S~bD~jN̤qlc F6Am μ2 G(u1DUyMQhJԷ + !ٲba&@C?L-Cc3fx.QEk-aT.0qn3nNoޔ΍Gh9:v%II^@Spk,/$&jDSL?kImꖊN6KY?v(p`tqE&qiv( 2U)%QM D[wFrB8, -v@Mv$<*-3f>b;ͱw1 ٤9y)5]'R|bL-Ιh|lKQȰNZn(g22t431{lʝQK%pII( /)*LԎAP#.U =€R|A|J 7 Ͳ(ڪaW-r@&Qvvgf/223#JG3)_ao&2um ܟ>0&p8AoLR2CLH%2 {FL'tMd'F{l= Aosn-  ynb'o,B+_prdBotpI@Hq! `" d{K+ PxE̹2zV ,=/UDZ]]!U:NBY]= l3hoknĦ )R#{:nP@WWx~x?( &,i]  hCG{奂TG$"Zy)(eEOD"#ILoc& '͸.j@m`,ܥg17ة"bLNx [vI*){3X#P_muw QzTrp `QXb?~ Jƒ+_Vȟ4d < kI_WSAm(ƞ(KrA4Ej+IsiFݶ=؁f(l:Fq'6`iq@'ov+&¾M4@fg???Dz{B1Fp/ws!X]фbD<5cRHo|K|䣳a'0qw%]AS?iSI9.G^7J7^} #$dY%Cj]ȴ&!9mO \[9 L UNONzB2#\Q\,e[eޫ{LhTYK+FOb )4>"=DcFpMTʖw}Qk$q+8и,lõW{A<%AoܰI["Cu$9ϥ(d U.Dpi}4EU%os}Ē(gৈz|M]u#g㳫Ei[YP0kmqǥi׍B2(FQX1e'}(Uqew:a\zpsD~$2=b#Mnk@ҠiE.1/%grxr,0K'WH{\G)6?_vYfu2#k2fjWXdsJ# 7&`S$)$1,Oac G{w J!D#[ (ժ%M{0Σ{XB9w9xSu; AY6O2A/qN)^Cyω`Sqs g?By`>fz˦OZc?a@є ' H}Ǒ(5Vr PNq˼&3 ~ ^ *KPZk+uOUmmgU&`IR1F&FJL=T[VHmBAhO."j3=7sX_uO-b`ôI3LWHx$j)478?ˤ7~@+j+GB0i!ꧫWޚa\*b^=H[ M dmin"q*;xD d\φ0Νyit-'I.CEn0O|K*-f>AhcmRXJ(( /m2U;s9T^ކP<4Nt Q&]p)q,z>fjt_w΋t ki^tN.3D03i`jB ,23I12{ˍbTl[pfH4P(ܑgk|(mNHz{ pzpsb]THȆ4f]qʪQ"  Dܳ" Xy=ND=F7gƌ+>7!+ą%l~{ R[L5^hoq?uO" k!D́;~t^&eS^yʼn{f/i*۟(RVHړnVL&]!& Iܐ,rfu'd& hĉ|DIYdfCodx?"GlN@+r[_UoОhdh_&TKU?LKP# .{e-+`Η{ {Uh bdDDcw~|[)(X9ܻ/AʙC@d_K]eJ~8 "Y#;?d ݨMB!ɽ>ό/ҀtךGcjN*d \*en tO 0HfȸNdֿX/-_DX.h0֧'F @0E5tD, *^yFdFՅX$WI #`f^WkI>aO٥X9Ψo9BçA C% @A 0i)l+A. 1@%Oz fJhV:֑'%TG'IۻbG(C.Pa|wcsBPgF PN:d @3DXwWo0 G*.TM㒵$.*ܫhm)}bkAu&? be.v4Zf v!otJiŀPie½t?.SCKt+~5Ug#$$R=FǿUEQDi5Rqb mgAmBD c̥X&) rUL/iQbAeӚ:.6&h Snϑڄ2r}tMZP²l&h&t BJ;fhg^Bf6pi%mSE]As}D9&$QTh=^,|C[v$t&iHD qi`׺d[!DoQZS3oZ l & 曢]$nE0;v%Kr^̨Tm,/$JU I/L>>_k(;ŏ!TZ(|I iVu`{2Y):42kmׂaq,{^RV-͊RĶ@V^Gnc0#3y;Law wϤGz2, lrI1Ҟ HqT_) h:30uTw E]=܁#ފ{9uup^q?r4W," ]H5؃ZM 86^:JdkۥlR^pol:m!S24K&ہݤ>eRP}=2Cqrh2*b8Sl>[M wW'Qm0k6aNHπQ簄5wEuo)6,?xsK¾Cd oN_|>0?|љ[T92A{uO>]1Ǵ/T4tTdVZ_-v]3TK# xHPfbfM&UF`KMZX }rT U]L1s( ï+Mr&1+ G,ĔHVtPm'z_i\TuhDCuWF'H4gFMÛN1k^Te]J&*KZc^0[8{yN g2I6{!Dք-怾N{u+⹎FYhO=l?S?;oC ŞY,Q >o zw%L` T /oC aYE-bi9OD"#1XQ61N c?s]qܿpY2@N{`HQ"@^WHwiʜo$ql~4^2sDF-s?3bg@Bj=\~B \X =.LqNb8t{1D! 2Drah|~5`39;GvqgAH:KaF{M9 {$yQчVP5ׯL25 )-L:c?눸ܤxxvFBX]22D'bSץI֢BrM%4u *pPэ3wG3{H|__s8ֹjndcnuϛMe! U8=ݞrgHK_Zb-g Il2Ӄ.k4ȐE.oΕdpUw30!a~|=w+qaTw[5vP} .d@Gڐ߭g/YYx"I$dڢ=o66!Pc)n: B* q8&ldD)y$ӣj~v 7&ftڣ;˯O;hBTA"3$fb&9bSa/Ƈ끅D{([;U rc;jzYvXwFܡN@fmwF'p,= 1̄sÛ_rL^uW fÃz%@ub; KsPj59,|y<2EQ˭K_1Ғh.?ջ8WGhd:Jo~;N˜WPqI{=K͆7˙du0*QεJz EIVA~:1XES lMk0AHۧhვ:TIbp%44$s_"Pyj5Z"6|8&{.BuG-̕0ّvͅn1TP=ҹH"BMڵ}Sj&dG^]LD+;inMtAH* v(P#ieϐb4Zv8v"KTi^խAL5eX( ^"ǫw/}mp֏FMqc*4&7”ٖ6O1byl 3r xFLd S([ӲHP\:qXp!jS}B ׁml΁֕ HglH l8ͧ=*=G P:xA&Pg5Xy~B1GyHDWS#m03 ly׼emqS#>db+!1ΐ lF2 35{|n3ľ25O*"$E[$ AY7Iv\n*!%^v?^*QvK[7Sd2\Lqխ(w=jbf*fKP_?%e V{@vBiφ]@XyDK1q1967䩰5H!|<7>Φ|ҰL<V?6i13e3~$ ?+`oHO*:B<Ȳ BC'ayESݹPq 畋.@$䟵;#"2* ,bq<\j;^l%. USB3rItd}; u:s(@? ? ? Dz~]I{F҄N :)"4T-#)wXevUo)aq("Cu{V|N:vN6!-Bő&d2<8ZGY|B@, -hTO=%qgFI{/(EֺG}qFhh8X6M&qIea}N~54RN=| !}6ц-_q"΄_Lk+e S-[΀{`FHr)6R0E=A^Bxw]X;xW.MGS:=+~^*e܄7hDbv^6ZЏwT@#0|os̻фI)KG%c#W@ِ%܌wPa nOnSOij":T#*4}^Bm{psXXf d%D*nUO15 r&q+(Knv28IC0"!+ k! ,B\eN"'K݅uz.ه'/jC Je ER"7cCdk(qbMUÙgN[z[׍f:WN깞]$;?TDRk`FfrXFeﰉh{Uo0Ѧkj:"EQLQ{%ګ~HV%o$ÓwsCLmF'N`|kC~|©vcxNGCa.\p@saU~L_03,2$Ǵ! ev-#_Ó;eǃͪD*8dnJ a(2ͪ4Fv_ugz!ΐ/&f<ǟq4f:GQuǙxonC䂡K!ւڣS"|Elct'7\Gv?V $lO26̀E4ɉ+Y'D2ʘeᨊIț3.U'E32k6ast-J1%]{,iXS#ݕBV@9LZGPeY'vm87)7aGhi3s4+.`AEŽnU.zF^:䝔]{e3ZA"]~}؅;*g2  l@O_)B9K&8r!ix<TsyNr:97 rI?#KROf- m~v/o'&r M}d҈lO@HC<>FVoMa\ B̛aq%،+?.rC)E08Z,{R M^כ֜:-eDY Yxz5|trYY}j(zJܶ|`ӶB&c>`5=қOB(t6͌>1M#)a K\M ;l2L]%]tRp5wE':88ҭPJ f~:3H'ƹ4aS"O^нMY11ZUAې~{[`YF=d}k# ٳfvdKtEr# .@18}Wu}2=""> VJ~$f ڬQ#3nk3K؀i-J3~=.|33ͧ,T0UWáPU;HG'݋dFD~8MڑЛ ؍e߳q, N]0 mj>rz#d| BP0ƥvU-BJx4vM¶҆&Tɑ}3M-X^#N;lv82fm`„Db$sgg`G.|j@W_@: yф]@Qg*(cmuL4 -gtQgͦg zUP STU)-n ۞ip<^ ]g"a:i@}C3; %ܚ-Sf u/ϧ %T U% T?:So y^XzpGP_}(Q~2үW&q8';2oGn6< &H?%\akt?Э,&"I!y̴!K(ۗ@5&9cYN)˫pdM&6ú]A! BW}RA0:#G?4\$Ip=7ґjR±/3|Ұ 0)MB-c 3iG&SZaQYΎ,Mƌ\+Zrm XtXU` 6Y-V7ɅSA5Sw~-$.$.48&ʲ@tv%|h[kIkǾ;#=$/B!¤lShG}F-Y[8g3ͯ13 -JUDK/1 ؜$/^NBdc^q]MO𧓈-O3gउ6ԗsmLxE1#)F|1J{oyHM~J]Ȓt^l'k@*0IC)ԛ"w7B<|_s5 vӒdVԾw!$ityC+K-}tuқaTr)Yӻk8ãƃܷ+n xgHRqZj|0Oz{I0e 9D] Q{1V˧ܒVkVt"8$ؼզh4_!G|n0a>@: _WpIK&Z$%]JqwRga0prK'ϗCj Z}<΁ĀP 8> U/"!&P>xETERUϳfgmf'zBZ?F/i+ʕhSgx7O9SOaE󍁙,C.Q/ph:ceL.W#ǐÚ[I> q$7oDžFz g|Zbm÷.* 3&%" ؚD\p}eI45hL;1ę (t2ݦ 0g4<ƉG<0xώ˿ΏHn`׽̊ࠑ9ܟ6kݢK(x(}ONG|vl=E,3鎓 Սgt8;2 5̘WXxѢ5*~H,ن"(ԮxP:Q:^/nfၳ$"Շ2Txܨɬh]N(( md/+:@eYP&XŴG #@Z] ;2QeѸDw*[F6/h Ap~(! eP2.Ps9xHɢ91FTgĖt,T*`A5mg 9d8zLL{BS .@fg? ? ? Dzpr}\w'B~zB4@zpԱ g0T bFChȓj9ʕah!VCsq#M?l4;!emi! we9B*`}ǯTV(< @v4Rp!<gY!Xƀ)}ndj"3m,wɫ`7L?:z,DWa \/eQ~!-@-U5o>-Xӵ}3q ;/ TMk u3n0#8E=$ʐ,:=,ȑo&2eWB)4)y$qɘL}$rw- ݊΂GF>KpU;fGi R"Bu$ASuངY,/H9v1}+iTez!ŀo;ֹyԴP6g8,*EDѳ^aí1vX,$oYF? NeѤ#NTbn:=b %g&WUBm0=AQ>4~”Ӥ.l=rdH@:V:gGn?tMe~$(`ڸ`4ː ux{7j鉬ؓNrZ^Abl플$F,UsyiL^KeB]! 9sӏm.E9,HqXixIv%-9"FBF뚉o$ A`Ou},lfUhcAWYJ󙢗w^Ga /YGdrMM@P5Tbs VUE[:w"u͹.ʗ. JDfsli8PEkumxk/גAJcM7nDœcimq`="?9 {2z.n~#1 i~4'0ti$DZ|YrJ ɕ" :{RVKR e\!_#%K[s?3E"ލ}}#*m̃ɃмvYzʐCw"\gfێDS/V1h¦-E&ް!MW2Ar1pRO N2ẳA%Nx;hU~\ Ard:]2( KřIFcM8ي qN:*ɟ@l/] ALjwK# , Y_4YSB@s[7i '6V@z9954k*Q9 e#?gXjo֙g"`!ŅH"K/!o2έ q*Db56djWSF)8Hh WQH˞{ֳOvNNBqe2PjHwi,oSPvME#7!SavxF*W>jWS˔<vI] i*XU ' Boa5&tV)fiĴ_4k]bL# ]&mK*&~4Z `@?k?k?kDzmV(!0B`(4LD;*BvxWO!@FUբ [e6?U}]ѷv;wZ!=uEzu* n?U MLw՗g'\y n %ds/ZAL=3t@ҦGyM>F^{ o;03 I0BÔUau<@>8_q5٧%ɧ%?Lh3Mskq<yr%DM %g*v 5oDe1 iꨖdu-hרDX v{XR[\?ZEoL%Vfr%r; \pNe/;-'WnFh@ڲ ܋Y4F EP@}+kCĪw&:A>7S}(v>_5ʈͤyIdj0en}+$ќl%*OE}+00 QQ&){D*JFFk*˚Ҧl)ѷ \CRMgQmly{,gvEBo9lqE#'k:/z *'@F/̮VD`=b ƙ6]z;>L3 P qQJM ̴mApgRQHUc͘kRҿmRuD~~'wZ8)aJA|l"[IS Yt7U憉{9E޷w|Ӳt@V nV3,l^8L˜8sTXcLu@Vd&zLk\ѾKOUi6 ?;I,O@%2ն1T{8ckuHA̕I~|o*H%cշwZdNjTkq倖pjwǃbw4jWy&j& I!q~H~N/jn&*[U"dIf5նTsCC}.WP7lu{V ڨf]rKMN% Q䢺e(vM|ѣ(j@[ B ()e~݌-ԑK#LmbSO-)Ѝ!! އ WS QŪ0-rJVCf 5vXw쫙BifY*ȚکT?0PXM/eVCۣj!q#KH( XI7~etqiφYCG=\~(*q޿u!.)xv  cBmv}~ɐ{k ΣdԎbyk$n>B@F{\&*1)GȜ }mr/ tL8Z݀I]Dtʳl}w 1ra6s,UfA7eH!.q}r11E)3~ѮDtv+3XtY|&X>as.@Πd/:ݗ'2^pi^\eѱs0>.D(G5qyeeay뗨U{~Ĥ+c2>VPU8[. z.21D;'a @Z5:G( 02U ;TVdćLK #,P|n[D*XA(O7ABy|jXu+RB8~b|=O_W3I @?o?o?oDzzDB̟\+o {Z~GĔN ̮fR: Ɂ&‚[pBDk5|Y Mw4e3wtvO|œ$~>KA,U oqp˥y7ؓSgTҨIS=vBQܛڒغWr[ Zw|XaC5aZjnW}K3;?%_QBYs`,2{J>ڢA%.iKl/<|1Ic*56  x˻R- tnM8V6= gľœi,wLjk'^pmzrł[M䛴F5 b_#H~XX _WP"UuvURtNC%RAĸKeǰY. < 9)ԇ`s:Wū͛4xºjrFW^p,%!PØ: >ד&(2Z[7"b֟4 JNYQ EM ~TPƺ^e"Vâ ^[/|E"c\&G2_eKEnM7R\@=]JAĺ0t6"eV *Vp 9 Q=P;lEv!|<ᗚ!Ț]60z!IAZ)$@WD=\BYv]&U fT-:n%*6jc ;|Ag;dJ%W]DܾX Hݷ h3>#gĖ3kc\/IïlNY!#ÕV$cqԨd;`n<W:8KZ~ @~yJzDҟ]C#o()/ү/_ H;`B$'q FFR!TK+ S@0 Ek3 Ӡ&`Q!_m@ךo0},Y|+bQ]'4b%ITvk>- X.E5HNËPBYf_x丯iZk\xDʄv'8&Ug9B>f7ï (xHi2\_l[or\wF%Hh,Б^--0 JKi7>}28?+wа~LIb- "uyI%YSjnաC F @?*?*?*Dzyn-ZC֧ Yqa*{2 Z ~$rmٗMFoxj8lX]pIf8y?PvD6j\9^$߳V* eFVfo |3RX|tgU> |`'l:m( {S>$+~slbN>rHy^ JBΎ-v^pRwh@c7))L|p,H}U^]DH}>mPPj-G-fބ O<+~#ꨨGnլw9/C-66mTi@Fi6::?\eV V)fّ`i6غ2\Xiu#x0M7n!kxL&wz_bA3c<BT8-/>f@5 XUdI"S@:z;R9Iy`Ӂ)xn :龚J-(MjzNn2Wy!ڴ?-A!d(M;]8W[+ '^O;tȟQEo~)*L0G@w"fQTi"Nx' >0qPǧ^sVhQIЌ(Nۓr*"vD*T^5 v61:&@(/)c6. ,M4ŵw d= !Htb?A,âЃM*^fL~MF Ӄ$Rm)s UV4xH$qF-]N 5 dPǾFL;(xq S#Yg 2 )/G8y-+$9 GNR"v|O׃4D6.NK4Jj3Qt 6RҒf$Ct|@#z>iZש Srtp(l,.F%yH~L>[Bi/VƁC.]_fz<[&wz:0e0jba?#y_ h>†S$zٟ0\MG$߿Ӝ%'Ҵ @Z8Ģh$R ԢLQ jԦ[Q&<-V-z'Y/ȗ"z~=_ r"V\H§6򆾙 Z:vV02r\|Ni^OFPc[z">`@YhETÙTO,iKV&qU*/]8fa.D0k\-O彃Ib2EtrV@K*ǠPZx 38@?/|P>EA1F<( K)!9Dp4I~)1~l0|ƃt2RLN٬}1sIwVǸn>` @34?*m?*m?*mDzyfejBgpW !1WBXe7!@R LO- [c>[Hco*gcxv%@?]Xynײ'~RVblz":>1,/FC eh,u"O4Y{N {q*NǬ=OV )37+XpbIc-ƒShBD 1̙XXϤhȵ$9jg})=+t\ qXJF4t+;v~pdcUJ mo*Khk8(Sqe  0k*=ZsXl7~}՟t2?GSUs.\ FX&g_L7aػza/4Me~a\EtRC/W}ҏNuW\vv|%$+f;f, ?׈ehUjnTn j:^ XL/H怏Pe_W;lcV#\tO+Xbv=xnݦW5V 換FJz6~v(v\4ÿ zD0E6uތYqZxDEX CC)dHMbD, Ƃ?!~,А+Q5R"UYmB G"U";]Q\LY4(TUpteAeK HN/`W-Vଗz&d:(yReF3&|OəY~4H'`*e h^/gĖxք&B*2TJDLPv~ r90 dF|"IYJY'O|oxDŽ=oDATfsDo8gfI`Yg5Bm'sin(AR,ET\Y'$<ͩ (t; 5];mzvB& vȢ::EXD';(F+PƕGx'@iy S*|hL飡yJ8IAưgj"^40UTѰ)qh>7 Լ@B.[E硍* US`F1]aFtֺLm_cDq+("h-㜤xd6ҤW^>b}VE^-Ei.pޒ.YM֜6G1TIHβPO5J`amUԗ= 'rre[sg^jd*~9)o\EzmmƓ( ૡؾ`r{5#uwyUg,XPYnʾ TԒPˌ{sD3w̒a?>@ȶ9-V(i5ͳ x9>욼< fa<l>n|_ֈxeio(F1W{\t"ɮJ^CCxYZ)hy %t.!"Mꆙ.g+kF"|,8|w'ٞ?rCg<ƸIMAɮgc^7.,& Ia( OF0=At4dfu9L͟( &[ɥiT8V}Vv⚡ HS Q, -,f0RG"91\ůno8)0ЙƋWhtN!iP!7! j-NLUNԧn ^xs\-2@"ye 뉿X7ӽ߸ (@fg?^?^?^Dz}$?lBy؊E} zb~rV/@l/B3UDXҡixrR^5Hjg/'C+in<\,J= j@Y$ռMo<آw$s`\Z꓅VҼq n7Xd{9S ٦?OBWTA&~"5(+Ã~0 D5'##?'gwIc)i6Z͔:Qz= !lte ,8dj=POqdD9l 2 j~=(l' -b[lgŗٔ+GTDh3W`5FSx,S C+Rm?U%֑+0PI9cgDٽ{ہl*Ry"Nr1.o k$;ز$v˜6|YZ}\&fՆMs1xR Oܣ)RTe )-O|yyry'=:`T\0` 9᷇4eIpl󣀈egJ&EUgW|KqU߳D!SX+=D(I272Δ㛬WgGفx30dAŬ7|WRfJQK㝝hbo0U8PCAvrB֜#ؼGyHK ZrtV)Oc Bly~\i5f1hPBttC~۫Ȋ C$t9lmJ;HB/A~g0(Ygnxuޥ'CPDm]~š?G:fЪ'0ݓ }?·fNac6U`qb @kљ|a|ɐ^tHɎ#+X-u@|q5Ercȋ4 .+H擆a$Tf:? C>NJre6J3H壅_!&.,@4M!&Vn>TМfޚwkC\|9"|<*,nmSmDͫ'ǩsQeYx1KuPVVQd%4 r/ybvyn[Q"͕΀%A x%g?^^d?ZA/!LV)gxS cF9ۖIMb_K+l/Y0"xiH)ݸL(Ar %vV iy- ;}}LbKPB Ş$D6P"L-ipP $m :/CQN<*LwxIɡ{ՒlkP3 n}X]DwAG'6Y-)&8V!4t-1F9+΁ ">RZ^B0z=hbtr n4zwܯ \{L 0 7%$k 檩7JoU- @moDtʨi6yY ]|eOK|?d|7w9$LN0>>Yf07ٷUщGnlϩ_@NN%얯hrC=kYЩ&V$jQlXՈg)UH&?扈CNJŇ[(Zݗ @O8;pb_ @oɄ7dP{e,q6?p5(vv<.o!UPDԪꆓr#> @-LL"mF~_.~̱o9Cp?C7GIlD*jnٹ)2`ʴiα$[E);RxvH ZJ%&AaiC3xp2 .)ԉ%UGh?*!ilI/`IhzL M)  qY Mneۢpf2!: %>4΋ >`0(">H{` X9~ |x`, 5_TB]š]p/<:gP,F%zKl| lj=}%oE:gL2L0`cyOOlYzr\e'h(U0Ͼ G4^N׫ǡAB# UWUّ4gamh,N[ Kmjᢏs'`8!-*#= J1\PE MmDnw\-y7;@9Y*DM y++y'3C[w3~J.Cy-'Nzѫn#բBX{D jrANYOAvx'rN uHщk 4sbLDH!Y@qWcթSaYkO^0ٺPDVQE-͢6|M:Gy4 JyW#YSݏ0ͰY| (qnBfoHW?mE_x tA,J8/`3j9̲4WN5ȇAgF+C$߀'⸇涘D_OBߴ_\MϤUXɱ o|ECa4)~0mfK2yĚh@#9X-C.]`sK:{N[0azLLo&©s;K+CJ1gEE)!r1 ga!vk6}#X,bS._0Њb鑨t0ª& U,i׾H&N;g:FY!}ZOD˳&j!d]E8uZƹ2LlzDaڵ~UKzQ!Pd񵘔{DkQ6GN cl, S ~(++hRz5lSg ٠|] m=a <0UiaN pܠO8Q_5V*1cmDހQ8lH`H nQ+]$Z.i(ks]ᇣ"4G?C=ӡ X+gsfsZ3lJ52<˧'tR"W\s< Ax#%Ih=%r&3yQ{ht砪0P~5ZrD&'>jGr8=5DEg3&IbQ.ޜA~D[pL[bF ,]ro8Տn@OM%efqJ쬎U/O5! i<٫O-4Al-: yrpZ;ڮfBp濃t({^Gvm|5H~Ê#1J X~ WRƏS&ĶS4иL)iZ\zc 5KFqYy۰`/uG%&ص px. OVruxTpn}q誈]pPQg(J< fK'pGVHuv )!I(HRzn=Hj0[={;;ƼyHI&,W HC!VZ&GUb;p'sݟtTdGl0{x,.W:u<0k莟Yn^HKRe&B"gݿԛ*?9}_  @?Z?Z?ZDzolCuĒJrvR qPð÷,0Nt\C ,Z?En<;e3jn'EݏS?<) Z4ǽY%*vf:Upmg+7dW3zfBg} $"xثK?#\|M"]j)Q5w˕ǔ*Zq5u1ՋgڧdE^qGD冔2噁!i+LCEF& oa'>iW2dH154Qd$3\,@oLEp7+&M#h}Ftwկf0Hr듌ʹlRj" 6Y)*h{֪fh˅s`LפtKW+N\}9lg%Jǜ< E;A5yBQJ3k-4|Lm .UܫB.3eE:H֢ІbxLYvʾt R[:,wK*: " ~[ZaR Sae.ꉦHᄆ+.k ))6Z ~K9K!a oէuoCӍJwv_ĩ-z"<ʴ*s6W̞C^eej \ܦ؍pw ­-xdcc;]44nHVSbs*`%eM{r[a"5u[x[*Tb3]"x a]A{P̩C֯viN[qh9kj;7qA ]]&%?ckCIS{3 ^uPG̔T 'R!djϽZ&u؋]ENJ^B]@@\>|Evά@ @???Dz}~}1aB3qTa-yپɡThpFh]dndEYBY],$ܰ3UNiJ?qD "<ѭ<~A-f`~3VQBԆ #jsC P̹xpi8CŃMj(wfBsGӈ~/-[Q;̻;n=z$guFy} QL@7* %Lzݲ`?!6R04lԸ& l;}8H[H ) 2+(ehrWYL[ VX*V=LijWfw7.f0/@fdީ%l Kԕz8)!e7%_^bK>ٺȿP r"J0:ʈ(*TpRk+e qV4&JePkėH'0xYsd0MW +` !/Q;/ gC U a{=~"Wf @˴L+(Zk9Ҧ1W:!RB;c01W;r~rYlrd92JP!F9nD=l (8uNt'!Tjq%.Mʢ=߉Z\!BȢ9;I~t-  fhO!nR} O(mUHۛµQ\}2+X0CG+'O@{$tNƠ[9x`vO. H/Qڝ@ɷ?{0 k?yc~`݇`S`@,!3vG n%nvcc5)d3a&?yXP9"lkra/j 1UMG1E;QϮA;5=γ7/i+I2`  Ʃr|Ng J#S SVEf&á >>x#%f!r%D&щtY0s tddJT2Z'5M>9Kb_*e2=P=o~dm+-U?;>Nv 9?E#KhVst-Ynֱg$CK;y0 %Zi@倍$Ma}0!n"[ $:A[Hm[0&D4fjs1f C4>l?8 S$ jjG;VД}y~\fNz=AۑV#IJ !_Y+ s7Rm|Đ3wu[«. Y`IIgH-[#7lW✯5X ~ JDYg^ؠ (N Jf1$W!T%LﱄgĔTY\!"f2rXN?b&k4DhBd4dJhPswܗ%"v{KptbyQ[P]hKʼ|fȤK-ɛ{Rx9^]Ҥ;ʡӟc? bTY\e:7IXwMbD.t*AkFQ֞@X  TgBvOa :WLbċ0VFZE9me 9Rp$K|?D/4P(-'1~(B苞"=2ޜ.֎ p6eHwĶ5h^y؈*+{Yd^)OlWMݳ+P%rDc8Ԕ|Y 7bC*kM1Au#v Ɯe=zV܁GDw4ߏ Krs/a%%Iь&AQf`ɡO'Sẁ`-eŽ#3̖ FP.@Zzp5#}|Y~H<<w :g<8Z'p2T^ɰV>Fi ?[ ׆^⢺ K.=Fg @34? ? ? Dzxz-'bC u{Yy{`uMϥ$mlUk꩐DjKjln DᕴYbJXf&&4֟hmkXSD2ykR[{ChAhx8m= \n'?Q`-LVg%AEPQHܚYKŕ ᅉHPORՍAvTsկ66>vIK!~n<bj툌Nz7)lt4O POU"-T\*)X{v4pp{'8"y]3n$DG餜:g ĞXU `v 5@ejKZɞ L b%N’b, >Ѱ*(f&󎊹 3S+AkuyCD@%dp—CBG!j#i{%;'O.ϬD((mVqF]64$ %TX89ט O@갼*:ïp:o>D#%OtƶCԽ&0qɧ+L̉q /P!h !'E> >MMOD, < 0ö!0n(gl#H-}ٔ@Gq1,fm66Nxʄ9؎`&"+s2X*SU ɛ3EF,-p, ϧZ(}tAX☍FkdL lCSNRZ2p+>\F/@pGn*}t2V48Q6!d(T57%Tŀ[dsBȆ AQ *썒OGpj kɜF2 B~(bxa<T( UWB%G jҘĬZowiZ+m)z0^vwafjiݻt[eDzy/hgЯARl)4nHB=4X:fM7ড়C(DH-ře4Re;zJ6?p P"B⠱Ħz)Q"8iaxl6)>b$ܽ'{}RiC=R2ПD^]4ԁu02a8/C"0˙–J&S6zFe-n Ey7/YJ xE:ɢ9Ɔ" >Ud4r-، oGW| ܥM1PSZq[Le`_> CӹZ{7"loҌ]aգԾ ?LM"}B}qKboBR.X`?쉪w <~ilK w+mkekM)郾Y}@Tv\&YiX)]8d1n; ?I q qś =uRBwG+Y +mpebL刌tGpl ޭ G<4&yfB2yƊ5RZM Wiifꫠ)mDۈ3 WIȄPܖmMFiA#hBjaEZWȴO>%q aǽ"-F* nK'TXN2$MI.{c:%9 M99/%Ƙ+b$ȆTv!+HK2CڝDL+M;N&mY:q9dMWWs΢= l.QZ %õoW@ "@fg?5"?5"?5"Dz3[CԖ\ii@1{OÑP-& SU忋ӝm.6@'[Hd٠~l|زafbDQnCXCPTks-q-}hT{OrD`<ࢉzIPRa҄ݎu>zM7ETQjυdy0$j _.Vj FakzU!\v*ikjc08( $s,~o&1|497 sRI$/'L9j;e x@+JZƉu ^Q?VZ}R*D =h50`P^p |,MGsWjh7ZɠK7Z jdn/6̤?>A8 !}ƣm F-yQӒv>L0$j?%]6"k'&^<Ȁ/lk_cO=dƹaӤeli M"AwB G0+y &zR)JeޡJa.1 [\$Q#sK_[2-p!8F8 Wh&}hƦMvWH6=!%}cr3(![u뉬ˑٙH B"3o#O_+۪2 u1C֫X/իzwהT6Jd}?dP.FoBn ~Vo01B\ʋ{Tnqߌ2l[&vGD*A>",ʌAFH#҆t}C0t2-ګ<טo>Y@?zr*Y75,3<$ Se2< $gyKGoYԚVi̓$Ӊ334͋Tyj/iطf;!wh558f] [UUk@xNYD(Y'K ⵢKpAI/=D}cc(U:`Go)R'UPiID̢;DPHh9T~8Ιӊ;bKCfx1 c!=©+,|S@]I0Ѻu)"y&  s2Z RMǫ.aE"גD7Z_ӧQQֿr(-|Z#"%-zNQ1 yP{d}Pc@A$g$lh R%җ.b{$)^W/{ G vRE'TzI9܁*{ kCN&bj {ZWGs)nB1ayEkbwDV*i4T(Y!E('*ԦQdUi4#ECXh+M&nնb[]N|&^-]@`6fÇ.D^?_m9Ct.hY:9{ dlI{'N ,*kABYfkg7 =$*k Wn,%PNN8[iDzyg`*7KDi H՗ f0n !}l$oUdoYOݖwm@*LuNǥ}2fk6Ԃ$FU-S4zIt5Fwd̪:TOдM(7ur{ @h's6Pl}\L:FȐ4ʒ.=*5XХY'',̋ c(S),3T sej|nߥE^uk+DtJpx !)\ mXx10GYw\ e T@?6?6?6Dzfy2_C"3beW:*roPțMŇwaFY7c\TT@ `RŊ>z\%FOg.!Nouh l 3NԘ)n"kBV2 P'R: UB ޢ94aJ+F}q:ݔ#U aSC`(M7NeHI@driEΚOUyFDiws$(8q)azl326nê7p  f2xͲQ{M\nB3{u@_\v0IQt*Y1Zl=%y}Ȼ;⩬̀bGFx'6t4@K-MCqB`K>b˓2TL?]F;{@t*NԈp2[ȈH:5RNoM 0>۴ A.Eq~glPTR~\8lEjMjzhp5Ez+-c﵋yC&&m¬_6^4EA7-i)>56ePOBͷűLOVY& =oݎ:q;q̖NKeJ֠`$4PF uh ,tGpg}{2GdwG\>L;ZOfLfL%l:"l ):s|) 'F|f 6*ƽoO0y:毢FL{?ު,T1kbjP Kfv`^NSrfC *gL u^z25vjVߴCJf)rRx**Kn~Hj**~L@bR=^-ٛdZ[+oB5MvSSq(dWAXk4)p>-yن8{VwS7chIDz8luHk$&TjO $NPw!dp(מap~9N{| JPMtBִ'{6 `{QKKƄ_4|GlD?j5e f, j7yp]a+ 7LϪ`טj}BRI֮X1y̧) "w+N/l3e4 (;e 2!j@3>_~.ݳ7`{aS;VѹƬ_Xx'Nv:+Ÿ L6X=}?@pF'ŕrp皸6, 2^罷} w6!4H:a-ԠTܕڛr<+-bZd T"ҥLj^B2arOӠcwH`Tm9#+wҎ뢮wyPfeysh?$"gng/>=P=ap^srL:$D>h* )QE* \';-d,6KwOtꄪl~2<Ϙ@D‘ ~.LmQϏ? ]g܌ۮh0I^]m%ah}ŪLd+62SmJK\ݗ>N"Ƴ{܅m)i8֩ʼnF˼묝=GGB5r=`쳅G`I, _I[6w)X&8YI5vnnY=IGVD[`g{!ᰜ)Hg6p昺IMUffsmwNJSf+)@k>:B5.F۫ ypj ^kƗP-`# ]!t Ą! f OEM>o^^uzS=^m;I(ԙ~X#Ǿl ND(J٬$7xb'%^hԊ KWϾJRGX A%_}u OF-L!hS:^̙#j̐T%=<}>eC!^<_G &NyطLS%h/M G b JuhB{G, Yi@N *5Kb#QbMr~©قbSҙ)iwan1rJ5#Ά]C/)4FG՚[| F9I(9Qu%Ews3taTr䔤C 4i3=O{[vX,: -;^a5=,i~0rlQqHLJjvەe/Ţc\(&{E1LjB.-nՒ P,!^GI! yْZ+azn=ZfZzD.(|GJ^L{ZWCMZF(!Dd9K~+38QI¡$Iz9p.AĐ$gȊ4{=rfEǵ:ҨNgϣE~z>sj7ksJ&bv $޷^0W2U[ 4Ž)lmCQO\OmM4h((c-/96{>wn 3'` JK{<+^n^2Kb0NP zgVsmm$^,t;'lS)Q>Ĩ-Zn`JUk [0 XSnHIԩf#$* ϽI}g-31G lmz.s  dnjŜ6sZ*smP+0&* (:sXH%+R'"+ܑbG},?10%@{Ix@ @?W?W?WDz~a+GBx ycHA< vC_9mdeLX PNəbvwoyBS!eM>4@h\ ΰ fUݬ&LVsαKPV*"Sήbr6/9ݩ-^NAm[XtD^YLD\4 G:*&OR~l?Krߨ-x\y(p%. N:lK P'ICO/*4"R@plJ9.AR*ޖcE| 8=AO a- l BU!쩽IjWOy Ʒ⤇IAݑ __yc64p)kMԻPn u LkUUn&cdH$bwKSb*F;hI&:{&{7NG%@_'hC'WvXY5Z,{0.^$عpͦĻOƇ{0q 3h[fxVVpL d)ۍP1PwEޜg >w)I5燠m`/ԟ yF ˼C7K3zq i ]maQ%aNh 'A^jc>I}e 8]% .v V  KG:@^RKwTkqeԦЉbwz5!~@8rS EЖʊgo?vnRm9X+.Ԏl-EEhH]'ŔNٰ,嬟E04$Ϸ(՚ճI"\0H0Ra10Ebgh72ܔ$1HLv@φJNrZevI[5:=H -Ijĩ уGB)gaL_ )]ZBn*K B; P莆QB|ja$&6?} AB1ьEAջo[@#tڦYfS {`Ӈh7( h^akFg'h\VpVfy A²3U哰 oERMEKTHOt`ƙˉZ_X&{UE C1oWDW49Tu#7#)t <ƯOYTƄJ 65X1yj |/i H?ܩNm#3{B\]('(KT2jyOĥWf,">*PPMSKyQ"kK8>opG L_4HilaqchT/ӷk4!%'etqZRDlƐrZA|qHjr\  oyzTHozT2g}]YҿDB{& H+r,j[r>RtgJgCAȡٳPZ=&+lg&kKYy \b9/ ֮WFу&c{"gsچESJ$_ xpdæ̮B"P_J>t3} ]>Z0%#E~t ^ z8e&B^fnGMttHEde0A-zHԵr~U豭U&NgoÀ+FeS8l_'f~ĎsZjZkC_qQ1ࠠsZl qH-IIݜ @34???DzdvdLCHBj!5b:zo&Bs`N6ـ,9@)dYt\0&i)*Lxݟ$/0=GX^eTyh\ _r@PGAn!* `[$;[,!" oI.(GcLx5F7ʱ#TFӋI #O~z|9l ]'qCd %#*xʛb凿Dޢ.LãEdY3pp/bg?g!q*w:!YxG%P'D} RbQ 8K1+%e@0$CeO3 e(jl ax8/9v>qU$5XR\t$ʍ7I:7nah,- ktƗVڵ2E|l*;#yc)hjPF9\j鶿.({΋3&!7a`ܣv VJĦ@1ΕVb ϭ:^"}o!{5f5y#[CH_Mnl|0A(ky8QCMilnk(."z1Rw!v0Uh4eN D}K]\SQeҔF+*L?T73dJx:@/޾ %XdQ8EeM!DIb_BW]$bwILfZeVP o' 4)Ш+Uz\m`^lk ʒ|7Uf1t"ꎡ@4ʄwjN;AUaPkv-mic]̶QƊN֊E%PaCDXXM?xCfBʔh $R[O=oI5N"$_xzLiN@'3RfWCd8V'd]2}z(x[&BuumgNǤLjߌwfȮ<2 /2r]H™^LVcx1Νƃ \~G#C-5 ۧ *y;oz^H 0dnֿ3 @0~2c8(t,SEByB;]M! E5#!-b`yǢ$\MOU<7ěj陳=z1#d,HI1^CB$Vus(.pJa~˧$sYŸByRΠFOL^|RSkj &dm$%_> (d7W_V4YzgEOKpfPqGo,B^a,&M1y8a WKəV*c!4B| {{4:#4|3@FˬTm<間.;0'.( AuցXi`EZj@ J@IjO` }.sE'#h>^Ȫp,tk~nnafZ{Ԩkţe_P ;u 6FZ݂Cޯ?J(Nio^{m_rWw BX3ZrB:reC\>_,9㨴a ܵa/ai2\B'!)7| WG)ea~_E6ƥ JϜ9yP'zߥԫIKCbLì#ߥMȦOצL7/n"؝k,uCb=mT1sG'/l<Ȍa+bԫDӚ[EukF283=SE(nD[ݖ =~f߈W3'zbW*.ۤ4IFkPS_4RGD@p? t)"f9{8,vXN A?x1&Bmhc?h'?J@Ti5,JHgᠢ0ZUWKg=B\gy"q,̨xgvaYW!ĨdAL3ȾyNڃ@}lbjdAO(-pTHl=;ʆP Wα/@-Z&(ULW ,}%Md*zDc!&?~ <ҜP I*;]eݸ$<#tS!81DРT:>ł̌NO^:agqz&@@C*GAL#:TMjo cAeWKYx{}ڿ&>``(A[i>Ǚ0NnEu^ Z\h!+E:TBRSPB$j9~eЯVf(s֯IAqr]EWZ ("]B뜋t,&pQvVsGt奓?T/Oă*@L) @bV~qp:\g-!ajĵquYC$EvI2NZpΎHB4^͂|tɾWB wowٸ %u/Ea_&VV äo(V+(-3ON ^NXa5-%2ljV_M7⃯` Ni_bԪcUHʊG˯fdKra:? K@]Qʃ ¶ϧ= N> 0%"N$et|Rpb:p"6esE+LMǀսzxif'?SZݗLќ|k/ CN1dL DOʯ  /V0 ։]j^͋X#Ȥ$MGM,d R-ja UBЖ(2d>^>2 N@ə?P?P?PDz\kOCve =m2sNDChAj<'ӡ>f`N(O_ڝ @(5g )ŦhsG+JOD#}1W~]J Q8w # L˨(qxYgDSBm ;7y|ۖORdυŖRZa 4ha ]']iY`[shB L `\mPK5"T(^p!AvZ.rKnAJ ǿxĔceMCۮxNwVPbDAiT|JRX!>~}MnsDqH*< sM񨌋&DyC*oOb-;vo98c=. ᥸T~*f4JAlh:^dّ{HI?Θ|% Y"xIԹEcm&TDo_澜?y OH)j(WH##tոL<0D g #5f WKj&o4*ةŋ>`aVTHj`)&Si joړ.Bl "N9\[Cg%YcPIt1wSVCLM-Ayڀv L H/Qh9VjM̺w60< 5o>x("/a$̂rۖؑLymق[T%$e,yjFF EZ4$()e`ٸ %Ze+YDl},iK\fbzStIY‹*Krv3`͵Pz..a-Tkv>^ /B8`jh/ QӳGIn{gS)&iC\. I Ɣ(ʛfBީnW`!4]n$|1PYMu5mLr5/Mm!䄡Ԃ̐q9lk׃7wt-āRGsQ*KMmU 0984ZN"쓨Z8P'OP%: ָdkD0\lv}XMH`<DE. 6&n<}~XŠ`fxP S%=Y[Dl̜ pglu#Q'<kqt¥b4U+~sjJdQsOεZTmFV.t{ ΍ @?{f?{f?{fDzwi#WBH©8{nP26PiBzfg JXOG*ӆ-fN~ct%|\r,еb;pN)ʰӋJr"l",Tyׄq~b{x8hHJa-5$XMb$AGQik Iӵ s <@k}h+bz{hlrڒ!gת)lNf7b#ol(:/ӓ,j=O{rWwM"ϺE5z+ȫh4H5tCt2RBB.[ aճ @/ +JK-#O p?'\T,?'Bկ6uS)6E3h ro;/ϡv:]t]6+q4Tr"XtƖk jC4X3? ឲ-|׵ IGl̽Pqcs07ȹa`O-]X48FEz`#Of-[.Q,hҺaF冡l-6٫skp2@&p+ l@d|2bkwXj27Tw X[TdɣFhdzhu)}T\~`F+ g y3W2  A[JB[&ll&F TCl"z"s}ǒX'LX#M̒M]i 7I7`cbk =Җ!bD́/U'6 M +K]~WJ`pVd;: -3 ܞT9EZ mX\ޕ;҅8=\#6_-, ?H4.t8UR;*7o=jPcnd=HweILyK?wY9;Iq/$(-hIJ{r'aG47/Pk~ t V-*02FeUA`ϞVX^؇xh5e>`!.߃Ak꼕phS[aA1)k gܖ C6OUpay5'{v%(/ryV2h_qܶ\ ;lX:4%5GQ-$`Ws[`P5i)a;eFn/s -?T"?4, @?Y?Y?YDzb`WtaBֶo#wEдNX`/D.n2h(i%Mm7ED&CĭrefhvO\ hԵ@" L-Z-ߣm(V,PFPxchMiNmOBh$Y{̄΃],n$_̑ |8h @_Ȇ0{Sk׮iK11@[T!˥WW@$ňɄ Oᰆ@ۭumd6UbA6Dܰ|')3e5< xCf+&; #z' \"sk@څn9A$^a|X=";+¡K&h(Ӫ,0~i@jRs4fӷQ)Ҽf T"y,qLaV$֜%Z}} E:s뛰)}ls$a@dT1ʩF?Db-Z%E:.ǧ$˙v`vޢ c ߌxG o܉qGleꘗu(?25JƛP5JV}  =rlP'Q/Kg{kdh]U}v/èzd3vǯ1Xawfz@UG9y~\FDkCpng>O0∷DtuLT/AMiXyBu_QxH`'5#' u($:*!AmCyEܼtPX+偊 i׆HyAPjԕ ib]/Y5 Hl2iWA'o ǨY!(d6bVR$rD  GGU% ~#[ &5ӣ -p =\DV|R o..}׳A"7R m15K uZA7ʍS 3M't[`F=\7ſs'ۡ<[WV!zy)\)gdreHKZNH?p MMƁSRk 2fzIpNKvΚu~-cV+JrEHѫ`4gBuKqWh OSL R| ozB@E.‰̂Ht_Ǩ!g*QOKD] "\o,6".уlSd pqw(DuA oGD:Tƣ).V$V! +[&ϫ+c":2UMH ik{lX (Sd)`a y#-dQ?Ù/ga @3OofqoY,_UHx톧+WB:KB*qngEnr;J؆ۻ@~x’np]Gv68(ZIqFw"uYD C.tăʲ < 9mH#LBΎW= ˊ_4L~f Zωb7B }bMݜZlܠ,>%>qAR} jX:džJc':&M oQ+\8yt~O.ba5^^i|_mV'=ܺ ~ڀn &= =Yv2^s- h&6䃭,*!Xh>WR< uvYJŠ.a p J!gL W#\5Kʅԣ.޴iX)q!+пP5vLk [zU%ɧ2 aE1QoG7xm< @34? ? ? Dzd^{WCWxA]{ߧ)JFĚD2;z#Ģ T\ph( HM8Q`*:Z ;fq, >UfT6Z *%v͊}(` JH^')U]B l4m0\2M: DތdG8bex #cn̓Ykd"f`~Z4s45Gx@"hYMC ഹpٕȏ\`FBnW$" =h{qE br!@^+=VsŐ^n8c>#4  t3G҃|; "Bvms,Q4&R/Ҕ)da9.0r( b x\vFo>bRv 8~(/ F'<2x֜a[8Ć1ضE5dkJfzK-_nm eHr<..~Hqx*νַt ~ܨGn P}3rMB F]ϧoQ T9k.6/wlj`^ᢖc^ ĩ7(\qݚAf w E@V5wB2τN*!\䐡'k DV؇9e"vdOh׎mH3ddx[#tn9f]6vlMa`qi7~o@6tˋ$ LSLFW̍-_#'LVǠ%zfs͉SCϗ<;SN >کNHݭ5k))D`/+4TZz V>ɯƍ'm9?PTOu^xy[QO/&͎Pv nTi b5g}$~SlhzzkLV0o/X"cD7`v!Pz VB ȠDORP3Ɇ3n fY|~=FL#mYk"MEIWQȔD*bHW-DZ`m6A60ϐ8@y@A$K5m"z ,ba3HPIh,݉dB/=y/'MyTa 4sEHzܺÙԳR W sS _~ {ge_i򹦭cXk^0FțH_֋FAњ W#ǭemL3"׉ҨXEgiSc楳ep@'P:!{/ʿ-@XϨUu7_ı9,$7W۩qNx S_wmV3 r !Řl/iK;BS9f0Z[Tw5+{7!R] =,cK>bY8E?g ß_Ur`D$qj$5U Bt (Z!0 N ! _Ba k!Nq)"}^s j5k7lvʛBg!BI+ 3TR2 Иm%īJo~ܪL }Bj-Gcy0ڦ 6jG+ʲyᗗGIRSz C34}c/9+K 1-~sk=|MۖamI׻7d;rȃȖOL'˪2Q^'1'w_ؕʲn `Ömp啃h\nc">&JsRw0qN3T+a1`%`2yMƏ.L(_>$8ۺ+#,qX.47?w˴?%7l񐌊qt66 lT/]t~")؍h0Fc-/11|c4-]`49+oP[;ӛty7LA$'79+_M:vs @fg???DzsdXBUmrQIi;&@ KƒA5h]n7F՚( ͯa9%s`[3,2B,^w# w_qgL7e2M9&d$>;ky#AOMtCRMƘ`!/ֱ F\G M$Kpy`pcᒇgo`> p7/r814֒3ßoHC2g]jgGlWK dH'a@h4V]-46L`Dc[1-ㅃDh<G ᩃ:pa9bc!禽R{ql8^Gpc c/]rQ6P,eFUXHs/tXri_!AQүô`4jyV@s\+IlF3bX͆x* d=~Ȥ:OʞY@Xb֬3@F^3UrIS|%Ɵq;8 :x^٩Ԝwz5)I@EbK|ՂbN0SpgX[>x!}]"ج!Li}B*v! ݂ el]ʄF-{*1=1SD\LG& 2 ?ɂI@RcJH^4PC>v`lڙo@sDuV16a,!˸¾T}) 2ōi_(HK&I㐒H*[pI"\zGG썝qnhf[h #.0P]d`O  ClE(īZCU8. zj&nq`NNRhwK԰G9'w#KJ0 W UbZ*q&iMaN3VJǀF ] 6"]NyZ]kH)vZ7N9ҪtǛ˳ ^kfB aZ~̯%&h>rz zgyhkf\\.J8bċ9j LrM(}fو jU,`-+E R͝'q|3ʬ0 ' DnoϮY"hhմI ˅ð>3>\tj4[aVj |`>u)PT7'|`.W q>r4ӷ7χ߰_AIxu8Z_h.9}Q^zIIA{J]0K].sMKe׏ V'禳9pqbctfVv%\&  H@ٙ?>?>?>DzہTBېFI24J1uwy.oUͷbOfm]a~^hJSn( CI;Ȫ&;(R39|wAi;2J;O|j$ЙKe$he׻z9 L}i9LBؚq,7,/FΑñUԂ{V`N8@"P7Wgc;._)ˉɀbąW_]u[Ac ۣGa!ЊrFD ѵfJ.- HҢҡ(bAC/|I ikRE4~=BnNTOpokvl~& p%@bj*o8-bhM#-" ^;bTi^J-nĢRғw)J4'\Қ\ؾpmYU"3'-yPO#a5B|2}> SL, l"?` -3h:VW.%Tƕͪ9 ,&Yy}_؈x^G$#)\:F9a8Vw3ɉ+"'MA&ODSG\ʓ]*>;҇ N.4e85bk$,!EF.qN$itLzϽabG;$}"rC^rOvϪߘ˙ͧؿi&G" l-dwQF@r=zf x1B(Fe%)9s:Tt0FeoԔRɚώWSm@VR;++,Kjkc*OAk6O㌻(]= ^ i{vESSo^ŢHbļD++K`;2tNbHBֽ ?̴lC;9iw6"'(MR-u[@BnYn߃i&)yknL%1NtNo\hr0± \Ηzɤ?Bq6}b|h᧣x⃮MM FN#aO"YHs<>D;Um%Fi :/Y)7#))R'1'PMMU[sUd 3 c{=Zm)_tMzUVrh 'zn% sȑx$fTU9&ra8)Wa .qA~׈rٻ%3rVu燼UQNN76xW/œ]dWT ү(0dMx]43V<&f6>.g2C dOהshLO C%ۍ̕} ltf&%i>J9)|P(5w102:egL޲bBDqŚHS#,:.cUG?3|_"fxLl!lj? :j\iW:\Q!^ԫ;vAΘ,G-VA RN ˆ+'~(9}26Ȋ6YXnlt zK `PT TDcévlea LU[frt'ѷ2-Ŋ*GzBUU~ 6~p~|s͠`P{]$ku3e5.|XF&(iB:=A'l~;%R j^LS;.:SP z@???DzzY9WBƉnE!v~Q)sYGU}&sٛ@ņIdZ$ I5-?ؑ&'FhrҮEε *VFH4ek25}Ye¦mXwzK~GexFɯ%diy ?Pr뢦- [jZvq[gP/gB <(vo3ZzNlRzQaBJWIL8]:=AS D讦Gi=ŬC_u2xI/GK 2'AiR!QEozHNR,"`4%a*fC4d2A-Ak+y)BXآ"oMƩ &~ÁV#m^ kE5QTo )F⽬]t82EIR6X8leCHl\FڼWgz}Ie0 Nf2UqC( +5c\ 8at c_2T{ס1v ~$8Gv}+$劾c8K߇mP] &s]dGɇeĠBE8vW&#.'R::l w nhVh¢|p?:;*6OM0Xy#ˀص)aP\l?z!A >;G~,ZŁg't|iܰ_9pdVD }#A`vel8QheIAeG!U~1N& eF)[O\ Oǿfy^h9JK\H<=$<Bކ?-6v*rCDFZ% ل-@{3Z4 0N:T RnG .h82tmjJ+FwAkA҄N@3o5Zsh3A?u`ʔ2Uby:?-"Qu>tlZ.h(zhd|2< hgUm~JVj{K2zdC0)TedY$*E?i)D}^ I3Wι\dQo`؊ɱ؉1V%ީo?ɥD&"w/It, 2&+X*aWiq𪄴*W}nYkWD]moU@0$3\y >Iڂ]R4%SJ{7K,*eiپ']4VoS/^_q8mm(\GmcL;[b*G ^h}#̱z΂ ^q™?C?52 QFsQ;fbg&`Y2qZGh`5PveSEuJaVOyCPe1oiI6eyOe%:l$p`Qaw>O_n!_ة4tOj;~T¦A0b2A/XU_o[؈^ߔsmHj~Rc@nbс%ݑDH \bYs$1ca./ (\?< O Ml{zAМCY,7{+%װN{pccgt]S`NxB7J{盢do5M{‚?ۡ-blݐQO* Җ\8$-Dbo֝EKtIׂGGi$Y[)Jc(3CSzR{rÔەM YB֮^B Mk\V4FӅH~=.&IYE\?kxR6 gPG_s &JDVZ\r-PpBoǨV% | «;fl+ԸW43٬.xlȮ5NZJ8n X-,$& oM` @ @?C?C?CDzc} \B"Ĉ5A 2wuWee@x{Db0A`p}WNFѴk|n8)B%'F sh[M$gcwļ(\g1g:f{۝  a̍y!gvQ jO)۱mUg\ˌӤD!mA8F`\ V?#?O8}Mh5)0cZNM]5JvzHۂoS jcXGo5˪-Qh1V3+ u1ezyٲ&L͌4HiE IIX0l&p Ը=/n>_pf."0@ C t` T0n„lO jf1-abk-H/*]H'g1KroPi>Dv‰s9 8,I^ Y+,@2g Wi,I-shwktcz6 |B* '`Mu al/2f^SSѢwk-\qϣPW q,(%ї %Yl(UN۹efnq!;kPy}#z=. B"Nk YUI7g*'h75% CqFaC[#5݆ EeCύ#AL'h'gWbGӪkwR̖Nvjs7qeC2ݸ/c J.uN?kb H!~?M>E6G8gh͌#IPn(K48@!z3܌™>OaiŽoRq$uMʿX"B ?iV$VQx܀MhΚ.y<&uzUO;d4XJfe3O*{>+G' dxW=(cυ0|3FIhSFΩ%w!MDQB~h"t]C֘W!2PբLT" ^]'G>j0!K SY'Pt.zDB,նBuj B pLj\$%9 X Y5͙(LBc{jlFlgZhFzҡ (VJW&M'I* iOdޡG*} p!1NN39ĆHGVbVwf\A5tv-J)Cz?S3U;rydn՛EPҾ#N ф4xɢ.2 1NY^ϱ5i2R#?sMG'ű$;ڍ6r gQgacW<˃B@ZI[A'؉(_~r{ „ ژcФ& Nd3)/yL/#Fn:nJއ( '%b-G" T&ɞ7z󼧊SO|b/EI? #I@ma&/!!H,ǡ\GS64CiGiIqeV7>$#{"Z%n3/-`=Ǽ@vwgKxz.oo/*N\)d.{!Gzz쎐noV|c "BqV7mVl=$dЖ.Oe蜂T> 0?rsnYXÊ^"uD%>laLʞhB6 nDRGYsj&c9CVv̞48jlgKPF {Q%"ۅ fHx5L<^l abWG!*H6na/DUkUH jרx̂,:|xNkܥ!Y9 1HhwC ]ZrCHD.D\~`4SoT1==f*) @34???DzZq[Hz@mc MU^ 6_XЦų˦>Zɲ%+HA5U WjI.àiGB|HP!Y`k 9'0w=-QquʋB2I}4dY!Z+ eW: B"jJv}vI&OjLKZXy[q<؝e;䎈ui#+l@kƥ՗ !S2 S% FX wdغN55M~S gHۓgqMLd@|xGNMqݒ3ƪŵw:͠ Bx@Sb }GF]LO;geeL$7E/~2+loK k# +/2K i%P"'cA%4"WQ?T gdh2!i,/1~J4*Kw3&`A6|8'.(h0Gya#dno9\FEM9QN>Qڿ B3v ^bVia| CmJ L Tawgpqluv+ޔ ,.&L (diŦ \ƠA^5{ s䩔"W虭w}.`} CŗacZupF+Q@iWNHE)N(;ق޿5J]r&WK]fI4Nb-%nC[{KHp3k:F *5(fw%G7r4 iU\<3睳2SDWOdA^|9_.58G4H:l,a܌GYj:)PO\ `4u\SVp>FQZ!TF랥EDZxK0xȖ'3\+nLa,յ@I0Ω. cjݝeXM0Bde)`-Éᗟxw9ͱ "jx֯62 d/6eJzj'"P 9ae;&7k?Hr-KiFZ IMRx&/,z{epxL Y ?FI` _w4:NȢKXԯP +FI8QA<OAB X٦) ?3w(?jaoVfNJ#7$VWZp*.kΕjbQ:+ӭQB6A.(ClG\U=25 :8w"<2`=rčJ/8پʲ+=+T .I/چ3R `etAp Вd qPǫUauMϧSkWrqa %8+IƏ7#a'{篱/:ۊ_o @@fg?xW?xW?xWDzcl}CiEB(Tp|4,I [$v`b 5rUePFJ)Ujvg4`ίkL]̡cJgw@\?7ܫjLpEOژk懡ܯ>JMfTM~$SkޏІRHTt2 zPw yƱr~ tKnUA[{%O#kѣ\*7#y ,S+Y2HeL^LݙTJD?z#^#Ruj'. ˏa:fJ B'n&kZ[X LyoE,[Q$P;0չ b]-[]!v1Q*8gaTd]TxAQ[)\` P];ol:z:AG#m5fER߂Roki&EDj3|4igOmҡRu{c`| QX=k `x%jZ/mmM?훱 Zkނ(a]H_}>qZ,SjUH:W*.z-АF4n# :gaazAޒκ=l6GHQCF .OiO<6F:.GjL;h GOEZlb4f7 |TM4,F)UXH^b:4ɴ"4ëԱVD3wxd(3[b$spg<\/h?W P3}̆aȑMQ.ê>hŅA|'+oa$Fs<\<;r/3$*.sGyu3QՍuz+xgCJn$VRh/z̹z- F5{);^:)X.I6E ,֕M/lj"V\fjbcdgiV.;&Ta5 Z9't.0"[Yv1GʖX=5!j44:&jp,jČgQ2<<: AmD؂"<[ZVnqzR#\dk{!ŃGݎiFBS x'"ZTC3y.r7POyc`|O聪'~j$JG %FP*ΐ.߸"L 3t tB@陚?S?S?SDzu}or9BNͬ]Ljy3{S\&&$'Yr OW6F?eцgKw"3VLL-N7Ӹvgr<࿈H֩ q ȂI~aƒWD& {DDs^y_QbK c}ڛrndc0MJmM#C dCyls0lQJIG>s)d^)K֥(G4H4ʃŝC텎v4EtLUnӥw!V쀒20_1VR`19*Di|;`=g>M nXBQu;n/k3Ybq?v2iՇr?ICH8%$J1 *M腛iϯau|D[ Q),VYkCeQ!cA/+QrpH#eli!BOoBuVgrR]X:RNSӠԤM =ڥÍ辩q6eS &< m⋪K'>B-b`@,Fnj)N8E xˏ^ "Ż_@=@v65U6|`E &P&-c$3=xC@tNy&+ɇڎ3PT*VCK̦nϗ΅q N2V RL$O(ك^aKxH^$VD?x 3ZmH!]jM&H.Borw z`Mw_D*kKKb$)JB:闊% {#,WC,;:7=O'x@cllvV/StmBu1 KJK6y&PCY2[i)0Tm=̶%Ԣ7. OJP#ٿ?fFP Be8^fꄁ&2]@!7X{R18i܀ XQ zY9~\>@9_Y$ԧ_ ^uW7J ΊDɲIi mj&ܵDcpcDd^j!LHatdj ӸW͗E++E3&&ȗYvf桚HN+4e^+#;Yi 7*\R`Pc-~sm>kgwA'gc%ARcKrkp%qq1`rlO<sɧL P2'ѾĘLi|yY?~__3 *Eo;uH'b2iO+!o0"h!cX-WZ  BUts (` >>ghh]b~/zz8'`j:Ll<%l.qrmW:D/Qp|A5oHi"yYzͯ0eП>\HnP/ pKVF!'ۙn'Fbc*mjicU R.@+}GЈ3DbNj%|RB}>c x^_>{~N~qq#B] PmYZ~eeNXtj${PtUFӵzE jNX$bB5a* ,גG:2p} BOt@?&'?&'?&'Dzel*("C3R7H9l*u|D8\z=FFS$k`f\Nwd1QZB`U].E}디UՕ<z.?;!Hq>8p2t~p6HxNH=MͶ#NhQ ̀2KPd2hًu,8R-(+Ӽ@ZJi}X4IJGn )Ԍ Vpt*eC5G\4 DBITy\G`p^[ YގNbQ~2I"&퓅ڿYξ(AαEy@Ɇns5Ymkyz% {aPZ'Dի! T)ٙql+QC=mZQVߊPb(.dmvvlnۇ:b]ǒ9r*'DɰTdl/b=RqscpE%i}fs~dG&{~ȹFF ¾OuI,G+ & cf^<=LA؀[oǛ3ψ`aR2MPŦ5 >caC ]jo*d;V^̮BJ'oL)gU0QOgܥewG/iK:Oh. v9҇p& N`t@00*ʘF8L ;.M# {s_,o"mΝ>uLk5Dt&@ .ŒI$j( ydN?D `󆏒|r|I Լړ Cޖ9Zz\/0$A?|N*O*kd~6O;soTEmWuTZ45zGC_o)VBEFw!aN,P aYW`ZܯȐV9RRe/5 {%˼~JW>^dO0p$D|?ɗ`Ȳ*mC%`8Ӟgj1(GKhÃT^gJ(-cȢUe 3gjh7ˡT^)&AԮp4{SiA kb @fX]Gk%vWC8I*<qnG,A4V*32TFs('O3 \dtr6voYBVQ@kQcQ|v|iɚt@???Dzzh0CjxtxqdZ{25ᇀCۣtY!ԯ Ɵq4G@泒7เ pilj.&: 51-x(' 6ܢKm&'ohAWQҵx=ɳAJ H*CةAߜ"8㤯J_RgxתqG -yP mۮDAȅn:\m0**{j'R/qy[F D0/ECަjaHRfʰߊW(A23#gNcՒe|RQqXG}4& |il~}ɧ,sSu$CiC"kg`)N;ؗ[*BSAYsVh.FqQ+$0tMYO7q!T45E3/E?1RV 8~hpl=)Yܪf*&A|afDE 7VF| .31'ɠPHA7R/iՎSJCl֤T?J~P3Պ qR*Idmÿu(͉'9+_$õoF[k8GskObuRn1պKIC)ʬU鷕*O DԴQe#p(Fi8q.mEѦh$JKˠ<0>%Jm?<*3 *%}(EkZ$9Yh!')$V,I,M#l\ω{'G}]LD$ @>DT0@i)-N(olZ i$Frzg)TêB?][װ]]MbD"xՔ{D$6M YL1k<8ۆݽzEVӞ- r'Rto.Sr2,;py-B[\BA;]kiܐD)_K:'dN[[L񧻪bcUN R(Di)܊mxǝpx"D[##eo<BՂr>HSLnI*Ϣlz4Z _MG2_wȠm=lE dW&Wن8a,~WՏ 'i4oSQ=l A`t)sΉw)jU=;80gARM'}2e0bteNj6oڠ:/J@ / pdK}˥FSD)rm L)ɁqB+l#08LvOOD!G͠YT& P" lDaD]~jjc`SLiD׍џ7>+W9Ռ!>'jڨ!}M-I`]"0Fѵ$XA#.Hs*D׸p j4pȬnb2 HmIQTäy7=?A $RU^IXة6:2(ə2eL9gLU?"so=ADLV@E>"6Q *%[}j(ʾV I~*O`F.C{BR*:O 4O[(G~~H#?p畉wt}J H!-lN@0XUR:NKg 0٨F{0NSMPH50$`@ aBh[VR{vd.Vl0^5]‚|{et*m 2`VQ>"^ uV,Ǘp'𖛖Џ!RJ̝Uy`!.$'J|&`qsKb tȖR'*q,ni?GtIt˒+$V`xJhA%^{lrb}?+cxSAM׷] apNO#/EhH ̳wkw󠬢̯@؀5}7̆ ;;O{Y(*vؙOkG8E%ouSXsjZlV QG)D *T4Y:e0L^joTwy+(Hv6$I} 6ܘPG~l@<BgEo8(~hG:  3i#fA| \&c@Gߟټ>~kieg΍S]P"68t1 ޭmygMuk4X\t}μ3^ֳBhѬQ)1qP^(8n8dٽ/)HU!8/Ia(S80J5|a1%Rc Q+btXPGsϯQgk[nO(hPϠ] {Q)ZНP" b5cN:w7A!G%Ҍ4ǦB M @Q!B1Bhw,~s<3 Iҕ(IoB03k@a^T7wHr#s$br pf6E7Y?߉~K6сFX*o[C7@5zggAopb~ȅy#5B|/@NXD= ]YƧm޹Ɇw!U=@ 38MGH)u[3PəG~4ZZ'؉~lyyI͘&CZiGH4%M޷ӫZ֧@>8 x]Ѻ$rF`FDDs F\H8 )#CrpOm )]r5';,+nO6W 0ӥMĠ@,,d_iD.:#@Ԑ{[I,pNKɱTʽ~Uy=#ƕ@LkĎ􆳅KMz`u)^`f|٪@>s4w ;S*m&BlYKOm&~߯26NV+VQATY2Dzx0{ 3`+&-ت| f\:\#fm-ݔઠ6-fB\[k-R-_E`n!U0G?dD1w; 69  @fg?)?)?)Dz}zϾI8B$|dڝrp|Ȇ{q-C Ve_ETklk)z۴eЂf>q@IPH=cX\pIfn] MF*rLNi{tBDCFn1a"`|a:BW`_yƥr@MVWEHZ~*"n6ePnkĨ`3FtH8acCut4mIos9 ^I!NYsi e-~DlIDtJ«/UD7ciYj&Y `#(fMY^K|+ S{ fZ:tZDru$ Td ϊL7/AQvD"5u*Ɉ&^P,U@b{ B"v\,>bj8!u1d`f`ɑajAiu}Z/'SHW$.FKUtR !mџZ\ b8֗nϢ^I\_N/(ska{A)P ^pnilm|#@)5Fo2+c挗̲*u ~LeܣZ4Wa ׿,^=\"mv(Դ5N}Ί\n %!=Xl!E_sTID=Λe,uӁL2z$莠LvDGb2@qJw}솅fe%prKɂ|zL_ᔑ\{\ْg$`c,Bt ؈4^Q %ʟd;w:=,w 3q$a% V5xb>vk/Su3 \6u֎Z$d+z!.fczM~ID-^gF/թ %謔̃ \gԆ2ø^ɵ"20\M]Mν&~.nB_fj@~4U8!o#烦iRƅ+R*Cp+GY/+sȎ%$545 E:j{U|eXT ]3tdF4K!G~a|!T<1J 1ET  ~i6Yc.Np>Ey곘_>{V2DJۂ5R&  D3KI'20<"TDui>O:tu4Wp ijKvDܳ JU 蠾08:c8z=Tr3mGdҬ(عpq(XrB>ݛsR0up:yzZ1!AظW4Mt}Vƅ<&6D!54w/lr%lnh@Iţ2y^G)]W' F Z rIufGY& 19Y,HG>)SVcd;@Muu/d:ٹM .tz~ `ZtH?9MedyMX’ԍJc&cV=d2 \Np+o;ﲥ`+{׏sֲ،;~WOl4 9T$/(b.eҐՄ/q@\<+KAbߡb@5}ys!{!&.Nr-c$DixKR&Ul$OO:%s%S䪯?bbDKiuI!`zdG Bg/F4!^Dƥ$e9 w]쑴mTo=? . kQƒM RC8MVrϘl|*W%1iDm.NKJ83Dj/+)@pAS0\S Ŀr|%^U z>[0LpN\dz'T9&PC2*G֚f̕}KﶭCoY >p/GmFк5I z)tJa<d1LC?:R0+gXR ݱIl(pz?NE/=-̮ 67c!vL3`PJ * 7l' r)Jnʢ WpE>Nn_sGp=LWf(?WIbzׯft2lU~H/˵'ȢGPo;o͕kbm{eE !T E}>@4䭤H6}4<q.R*RT4w ޶tf$e 0`P #gTg$8x>>bC8(},\H7!ja6U|TTI 7RPC 7 j3^9'ӓ}ּzq_V m>56ηqM=ljc|VoޚGn'W(EչWW1&b v_]4 5(Ӟ\DB4r晭DaR >+5cYݲշ24wShr1x/j)[m4i࿁JT*:e(SHjBpK%3DNBMHiX{խȳp & t<*N (Et޾ bn֯D8f|#j?2Oܰ vur;T\CAx<.K\qv\FqR4[a~X*'A835Chr{-WeF [GdWW.c?ȚRg j|~hEO*R:$(rY]ʜ@2Ͻ_#;rפG Lnl8#B&`H6N䀠+(N #eyQ$Y`!a+ %N27>T&jx(/ĺi91Z:S&Ә taeW{6N7omĻK|SյB ejg nRi^tf8Hd0~\:ฌto:Mhκ>Z`h)9j{3%dn30 @X$ZKvYPO+ki-LyJ-80e}S˴^LzjKh 2_GKNb%t} t%ӂ ,K($SB 2>1Seq⥶)\1bC5<†k+M_qb#^ܱ1-JZs;*߲ąbԊ~s-=gӈA0muoH O(^%X1SY6ѥ87扈'`%MaGh`0•3F9=CLGK;7%("tV!@sʅqpχe`TS//[pXSU:^QeƚôЬ;e2jAdy*z(V7f*{}d0^Ÿ/>i-gG|HBj$2M2m'wLN]+r0ET.X L=j9](@rFjQϨeepa66J!JLHmٮ K0w %ʹymHN02G2?'KY/2`045PIP љTXK7݊ecй4 4 |`XjpoX_oMsLBt:d/rW$yKש硒hZo@bwDaͭ b""diJlDi}7>0UTVl@֚r<%h5û\ fh?ϤGIHFt"$bzdEu`M&!4T0 Ꮈt[ lDme:څZ>? pot>*ԃB| !8h~ճMUJiE9~N{,Όh>黟 ~UhIڵ%lNZa&j7dnḄiiCND{Ml4rr>[4s͹ s5`iYuJӍŶV' F|`92cx^n?6td80%i8ܞ4~\2DUxm {$L&6m4FDI&y_958,,.v3Xy1w tb Z${hTT98z,Ui~u{P3wbY=ی$K8z o +@V$ݴaH\’"\9 ~QJ!NtĿQJR-=BN )+;[ q*%@CT_Jnίτ샣UTv06;T8n\[w*W6ࠆ#nVk:{YxNo {~2yH\ۃ|n`WhL:uTɩ+y2hJ)Pi 9VtVG5E-I_M:$g@YPأd( aq4c&ب3'd%.UV+ýL |o+lZl*biҧ Mz೭] `tNQ]V/ݾTeg}C̤BZd~BvNl{݁ H_ nxw5wظYnuVV6&q%%k$Q]ebeI~~dNm dd~9D?x%EoR :vee9TP1fk$bK¹UV&PVB6銕^b^;_q%|h!ң2T3h1"*=4ĶzA?Z?Z?ZDzcn|Ԋ0C*X |W0uT>g ^qN҃4g'{,^~$f,N~P!)W\3;+EO\70GGm;wy0Jӻg SЁ Iu~g@ C}QR˦Zfdhz@ ՛{_ay-ؒA(k~mUfՀ}:~Ǧ̦cCE^% gF y"v i84Ce"ݙSj .z0t0$ܕzH[Rx.IcЉJ D^, ,` ֩qr{B Th\U$Lz%)CQxE%A#ZVT%RzPZP` 6HhR9bH AL"^fpsU[$2rG$d:_HAe$.0U戠h8^K 4L0-Orr";Ϝk;SWOM|vٹgT*E(R I$kӓ *ހd)PilƆq |zh( ͏"ZJcL d>ʮ1c%DTWѧ@nLph )B & / 壽{94:)s򆵄/4"z6H+ֶ!̗q藍^c1}Uip[uE]u"XU/8tOd;ʣzy57ĔfQ2K0"FŴ"J.B{#=Ȣ$~SL2TQHB"?)Gt!i/qj}[#8Hl3_X:MлV@h,| }|f0ph}Vs \< TaOmqf7E@o[MV쀊*<Smnqi{[Oo֊0:3| $9R$$&p(J!DHS H5}C[Ex 6b'CS _x=q<(Ӝ>#t˂&,(_*J&c>j+p mNlA䃤 Kc&)`FC ۘr^zRBwAixD%')f@+_ʍ3?i#Ut:m 6\Bg;[!{MCOLr)ߐ/څޤ7;ɛNjΨ]Y aNNqO+$[S ЁX,H ŗWV٣C13%3}Ngjcx!ڔD'ė빈/& vk`#4&dob]!?= 8ʡkv$ś;J{‰Dw\24E^gt|q< s͕,SO#-5)JˍN3oJFJ8ܮB[NպoLڄmaLKa?!lq(#8p7 D镵a5E޽(15YW /l=i|ץD\aOC%# X؟*&AM]fGΜ/bC=c׳MŸr\c2Sii>4BM`P2HL_S>Hw/% Ո}nBDI4K'ZÀ/ YfD`NE:Ŋ,GNV2)MY~JlHd<(!^pZD+NoneC mE$G5a:;{)б=YXʀA?8?8?8Dzzy}(CBfJrp|R?1J׃e9'Km˥&NEJ|W-el hsICǰķ#l!8Ix7مtǩ)CpNS! 4P@\Btq-H/""RM|,SUZO ¤~x,(|Brox|1#A'.%ф,r D,WfEHW4[\X bIeš[[6+K:+!'.򩹓nrxNDt7)P!Mzѣ&~33+2.t1I^ IhB11rN?+Zv^l?U+I4iWФY77s q&;姷j܁%8\v~j aVP?11 2"(Į#cTF| K~RBhBH>Ecy[Sqבh)tDɛd+ Oʔz_fbO,'/5 \.j6zd?BgSBLlt=,ۜaƕhs,v)>1-JOO)I):T,ަd!Q p.2OqL:Ԥ_bl`F<)- 5zG|& n7}}$PʤAkFG4OHaGR3 10 ϊ$'}0EieŊ& b'iuc!g% i/d h#=Ae&c@.QQtL|7 +&#{LUSӫ#0Ƿ " ح @^D*v=Wx~<$5gVD'惨r@wR3&+[. 7\;QQ4#@&轏.4~&#U2=p;tnզ~*zFק ϼ۰x&&#=؄됦p:V><_W}U@$,(&ޝbJ@g %=I{|}㋫rrU7*ևj 8T@nȐ^*l6 '5j0b! $/X FiC G^\dt A34???Dzxz}(,B9: }ittMWJ\Te(~n$`*MqBˣk`-<|c

d8@r{KQҀ=Hz$)1qb&MhCAϠbw wΚF^$8[">LjnOTy8;_r@N # ,=C.v><+a ڶrt‚,͋}+Գ,ʢ{ҿ5>kB%Q.F.=tbEF,Qo_J'|y4W\XB7AԣP;jռ*ֆDqd ě:3 #o[h״{n02M"7>ʲUK( :Ql=),̉WnfC0'9ݲ*cgO4P~@49vWT0hP8^.Gi:f*/,Ng/d7l! H> h\{‚pGFC>=/f4x2vƼ/$iF4'e%|t;-$8orf9@WPEifCQL!P2- cE5q^ $χ?kS~7:Yhjad-ya0}Wf,@+IhA )&\Z=F=u&:MCQNA].q*&b?:h8v+񉮸,TSQX0昮%|5ǯo~4-#KT <rA euz+<xۅDu<}v? 2 |CL<7zMfׂpʹhj"WD^@3zX頚ĵ|O;!惁qdsR1$ܞ;gY'|c,}D áp !:qῲ ejv(Zf IB5jkŮ|m*@ݏ]g䖤Z:H/~;R4tP@RE֮`Ki-MI%;w[*=tL')`gĚQIp5Bݱ3X{,j&ݾAetN;>ś&đ|Λ b3ʠ,^ް*$61تH[Fs$?B+Il:h'd ʯc$wXA$/bvN'Ǭk"=:Gő`(SN&0lH̺uff|KfC }"k@؍ư/ Kԏ5 TK&6J&*}e(n0Nr,^ᆸ fǓTuPKpr̷!"If(GK i-L}Amv; \|ЗGyckO"5B dt4 LWL!(2˫zuDHٞhě-1jTF),TF36!PȢW(IJj*RV<#GR6A?mi?mi?miDzyw!Bjp*HPy:3_փ?E̜= feL, fKxPAh*-XIm,"Fg!aOl*$&͜Kn,ӨǁDKU Gpq ?l4ndņTfZ)$MxY4K1#@yIt>_uLa*1=^^o*iY F}"$*f| r[K$l@)mk%?J*B<HOE 3-a+ II46hB"_[\tUdu7 BxFiJch>u:5 i/+oͅ@B "|㍭څqf\Y3ٌ;9慷jicޏ%L, ʵVρ-Lg؂x I{ oDo н-OO){#+?&2pP :QP)Kffbb>Ȑ;H̩K ?b*N_j1c[uhU b.JƦx 12 kVdRW̟HH2EF17\ C㻹l0W;UH«><$5,N.E R>E2,.Jt(f0Y(eFyX1mԈI%Q_Q-8dn UDU$?D^I0n/ VkfŔ^`#gwţ|G ¯n!~폎>UNyhUAHo0[+ ,rq'i&F.' XpfkD-Rm#織ߛfIǬ*}y„vkhglЕǔb#Ŧ‘_TąK -H%#Í"Z>=_g7Y he:azH\L F Guɱ>߉Loڝ@[ 8QKR!T=^me+7X<"hr6 A$`9D2זp /¨MUj=F Ʈ_ yIjlTev '6B Q,n]^ Ox;J=Ag#[! rXI0$n-o%("3 "@(tC5zʪDD{ NrxЌ$wL@_xwD{Pdټ .|9VPE'z_0BOyHp@s:sgQݯ` ]bV^{2ڲvJYσx>O*ixT:D"Iv RDTh<]G_ia6ٓ4uݘLk Txl촫~[wXVK;ǀ8Uf$)v-Fb/r\&혒 e(%\U\-"$AE_QeZr54`+@U hAfg?6?6?6DzxkuB4PBuFl֋y2eIU5!:pFL>mNflxyRY .ͅAEON-@ȦAK8b9T97uvho+$.F#}0']3jn&*dkN84op/PPHSM} gqQ㷎H+_ ,֏@)|ri}I[MNy ,hH1CtAbBşWU!u 1ViyH[B &֡<4cDw0>Imw֯-`I>/-EˉrJaW\u9/挋?wf7!Pa)b ;:#N21(7+^(%]1 k Uv$iè!6a#&I0V{=ޮRl7̉1HȉwLQ֫b%X^c5UFu":*d= E"f:Ț\yUB #- 8{:~^'S,ƸۉRLq(}Ȝ{Sb|$0׫%Tk <4 6ghw߄әljȈC;` aEUK9 ѫN|.]nA?v?v?vDzu|nCbo8m6j}epj~QϵQ&gŽ{2ܺyW, -O8: M $IM-q[k\mir8:r%4z#.N" \"]SXyduEP\ꈎ4c\ӽ%Vw)gd$t^@pE-{V 蛞Pn[@-EFHzXgs_HXs`nΗѬup"f^krr̛*ȑbDj?AC^Aea4Y/X0؂ G k=G-#@PpGbAHR7TƲ.qSJFX'Z@R/gct;9tgd:SeYEja hO[A+`[E:=}C6/Kr:''FÒf~QIt~xW[,FLOAb/:P}[e-\:#8)v=s}:쑆OK0+mՐٴGGZx-4bmvr2:c}*pr8PO1l|q>L78rxIE@EHM:u_6~UNN$t5Q+Hyug6!H/ ǃZn2 m/o +(e lJx؆Yԇܕ%(*}RZId4&iR%ZLI̠bbϞ Œ3JfЉbO'oJt$?]IhޏS,uDOݫ|reHB-Z< ;4nwcR :1hRX]Oxbًވ M‡0,{0E:HJ_ū7%݅qaIrqSzG ĦxRbCqx &\p'6HɆ-_5]ߙi8 BB;;>XeL3Q~U/:a_MΈQM7I=4g9qO/J/q2sNg" XOepyTQlC8pr$( {}>6(VG{ 27g~(lOAP-+:PqR,hlLj&4\t]d!kvG8$HR "ɞb ' &WSșW'el`Hs$rKWӷ@|8c*EVFoYd.f7Ȧ?f\"p%B=HeqBZ~k U,;Jلelؿg4sq/iFbY](g "DKC{qq.7dsQ)#aS,,M$Z?bnLP:Va!n= Ia1Bh(:2Eo~o) M&@VeW2ŨO[&Þ񘵶YǵM mBBz/|D Lǻa - &ʔϸoq\x.]@5S2mtNiFJxhvO$<ӭP yY҆A)KMly~zvX}ʆ͸IG(ArH ?w^c_OnDK- :lGtop|}4W*VnVɽLH'l@q@4;~dRkKn&0N_hu%b$䋦L;NԮ *Bӟh@S֕f{B ȽY[N[U7+ yA`7H 'aS1+]D/?1* hY@ 2bcBF{"CHPx\S"M%daZIZܯUp ƖUFz~JV;sLIH>CͿ& ֫F= VeM>jpY ͜YLaNLjL]s⷇`IL~kv)Z߮qgփD<9u3Z㰏an H0྘I+wELxH-zC}$BɭJ05-S,nO+cK tO>I#f;aA#CȡJ.KUe8:qǚC@G LkTs~0.2QIs:Jp<.̦b#z>ɧFW# ЮE )k?$\a+760YNuKEL4q/)D̫}$v5\E-Y Kْrsݖdn1raSZ(lk+SR9*Y0B,p+}$A!R}B/ TxLNd̜'lJ*[l.4-v3r:;y''6[pc ɟ`Pd )NdB-uTZ3=0pC<%-! &V]㥔hĉG>x.8 O(a:v%+?"2<)+cB$Fftq/@D-Mw-w<EMt3;}!;fݦGa'0gّU)dCR:)|`pd)0gqMw&.Z|tA,EY\n,b[7 2:ju|xlHQ *bh{e&<[FʹAos؄^6./ٴ!C7jӐKgstLx&Kj,xLSt&Z:+OōMMiO!̘ha)7ޞ|:mU0 pdVDZD#GK#iۑL 7-?kb=sA 34?3?3?3Dzr/B5m^2utoOI5~%K(Ůwʓ9yɫY1VAUS:Z]M-gb)ږsDž UM5".g*@ts$.4c_uҸU8zD'n*ɋ `VX?rUVD v5r,&E*l $K$09`;)̧k(7hN1 )ҝp"OqUH (}EA>Xv,'`mK7ƂmԴcC/ʜ`_m+f[Ǧ> c[ǹz) @6JdPb&9GH,>@ird|'͵hgE9&2UF㼦]Le"F 5魇u^5f; rбޡ00 |%H~" KF#SV>\SB(2~-(mV ԁ ȏaud9C┪r4GtcU߭}dbI :}ӫޛwOfZCHy7y!]&:IJ{!G "& ssY?l7: `( 79n.X (~ƥnVMQ{9z O;%A3Q{=%7 =o-C!.QelτpnL[s VX:k>(}`{{Mv]Ȗ*,:6A0~ ,{1zJ \T-⺪ƞCL.p A">Yc BjNNg +q<<8(H8NCI8!B(sEDT% K\K⯎>}ㆀD6Q?e轜OKsMYUeېGt[Jcap͍ZV0͹͞룑>*5|M1qS{Ê'F <%:<)tFԏh؜F=_tFV]d5ʙgشGؠhw4!ԅz|~߼cŊJ>eib$FD<!Vb=BCZ2E5e ?¸蔆%-!j@c\6RN%uD$$)^ ufٗؒ!>Y% o>+$~'hIƠr/r;Mbe^~VE0h]cgS]8z9`6Jʖ;t<,wc)0OlK _ _XK#X8zh؄70U4Ӏ irL­&Rlɼe{n@W]癴ڹYqU=ůJh&T*h: t&n$LQGQuQ:{XM|nVǬ9pkWYhKW!7՛z!3$V9o7n|H\X[]~;)qEc2[_C);\$5Ƙ 0vܣ p&12Ӟp|ltJwf,9׋U5ԘI5T;)r}_U֖<2{dV([4mŅk:GN3pnĜ~=gcn~=6,0i-Pu}ԑAzo!ܶ@{@:i@0A ?=?=?=DzYx@5Ba,ngdpIej}9&g͈t?DӳVXʤk,ȇ9o!Bb,fᵗ$銁},SY[ֵ};G aHcYNJ2@/9زFm˂%lb7X:=L̲WE}c$߾4wo8|@ztFW֣┆]eV$ 30<^P<;jWuBs` 7Ca5޽=$qeDO}Xs0G]`~}wf7MͮwNh|aQ?Sκ7TZtd %T  rdōc'xGHMmFnpN ٰCwܚUe!c >݀g!23V,{ r XB8#%1;9g/6 ¸O[1H0Ib|, gmb txdiҽQfC+A5e~pIfԴ7 `n{osI-W^< Wa0uc.ZLXN;$C |ԈPJJ|3+"Z,Rւ(S]k-=i0;<XA͢GrΕ굃oF>VM;Sga{f)- ),4g`u- -m5Ԍyri-&A) `+piLz#'k*qkqJMsҠ(?5cXW^Lc "+%B|lf-_}uT&HioqvxzF~o=!kAza-u;B('R| 4<܉LٙB#^ iL,pE']8cawrbԋwx0_k:贇Մejjd :1 d) ?kFeagBPWQQ_g7uE#6dRE!37^{&$pCafH 33Ձ"A.yA+-"eN9Ӌ4o9ˆ0t֣B=FK߷xtʬx͌j'8A'N5V迊X14+nbœs}*F1`ڌ/D Q]^RxA~ҘC'n+me6?Re?r2lJIdvH κX6h)C省ä<9N~A̔JKgq'wݭpdZSsتĠ%ibe*("_]8_"o5ϗP@0mNLD %-8%!OUC? I졘p6\K]v GZU$웿NЍfn]B)nPGmEAKq1CGqXNbF-d犌h b(`W;=t]N7zEQxH-cdD*xX6J3FզO(p-mR˿D$!ncH!7l*b62"Y+Ddb@Nw@_$]#nb6&@k)z[xS,BRg%xC&&8(3D-󔆇fWSͮW[`q!ŤQ10>u㵐JQzvdL28.OJÙGMq}3)DHU'6Si\{%iH6ʷ@'8`M6Igk w7ɃdH ^ c'2!>ӜUoTSXԺ '$80VLEn5ǡ<8P bz&nA3_Z|0gX]E?އYjM{1)c]W8+p~.ei 5&愯>5$2z #^De|F+/ tvsٙNFM$&l# E9E&Ǧi_*)̒%~ %)9(+tB C+Zjڟm˯+k1O==n}ps9szP?u}YI1g%,h"nF[Uѝ(t`S-=X، (Vȩ֮ޣQ<)Kl@RWJGFxsO[k,liuiFCWl@j -j[upؓU.:9jf 9@bgz)0Y~t5BuViڈbia'w&[yX*wՂH3DbʴiHQ:G"f"Ч Wm3@q =@n)Tsf%V6*do 7di6Fc 0#Yu.V3Beɮ w $Mdj(Oˠ Ԕs pgriOyE?`[pg:&w;K ZfwuӁ*RTq_/aF0qDav 4:|STS%㭊 =euDBn9 b;t iQŴ!'$ P4&K%W@SYU䖱'Kb9]ȘJ,0y{g6:fx}OܦŽClИtJ@CDA dD6D&x/!ہ\?2G263`Loؗ}>aE"`߽sѶMZT;k~pj 'enTD0%z/ nH'n++hZRtg|m}446վ[A?5?5?5DzkZ5%BLuHp6 CDħb0!1օ H`jF.]4E^sˬInR^I.0t FfS2|p< emF+{8GH}O TJ.?dk!aZ^ۺ9,։UЧnRa,@ 6cH#=C7:= v?y@,LenG[٠)# "Dب?Z!'F RHX9pn:umC7R<Osα$l bwC{@A)hgrk6THk=Bz{ftDJBm"L)XnhCR2Lҵ;o*8֩Q_zljg#?`陎$* O>ePy(dV:N)/ra펖sfhIYDq۔" mO+*lof<6ϼH_ib` 9-45ERAyR]M3K'!ՒM6}:m՝a{*Q\)Ge|ӝ["_ܛ\.`e[eg`\g4qY:RځtLwH2zДNç/f<*Դǟ~wŨ f!F|)ܾg8q0@j[!b8ЬBKMcJTW'SL$!y(G$CT[~Fy@>IlO߳Y#CnNlϞA IB2yzNt]yBq磊1Q>>w hnFX/7FәgRKeT9]p&qL1D.rlFǩ[&ozgHЬgewinRm6eu™ |878 ̆s ~wD-ȩ&b5q.B!C<^ `P) )}A]j\ɋDl+L} MnUP >?+UelO(I𖀤* DH<xf l,H4l@KE${HI9S )h Ƶ ##BLq.xs~''"EGVla nKa !t%Wt7 " 5gP»n$r^*8^>&<-)nZ]Q"s1>5H8 iq@TW>SnhnL$R#C8(}HG0!ٙ,42[$Xy^oˉP gٛiְ gEA=I`*zˆ.͙&^HC Hcxy$RmCPC=R \D#A&{W~g+,4͛)&{Ts[H&4gҨ씫'cgd.L#! }")BC#)6p;sg( b<~2fi"bC z=SL4jlB,R=-aŒ(mھ lŤHh?.])/Y5)' 7DIiP3bLy }4(I*Q T1+Ϥ=z6sSgHǍjZŅQH.jϤ[Gp:bLm MN!pƯjpD#:s<62iZ 0~0̣F}KlK^ >$gxA???DzPnD1B>-` GʨiŬ/'jGz(ltD\9@4 'V_3T4Q6,4q$ԦKw֎Gb#L)ԟ΍ZVqdJL5vH"bD.{Li@W)MXaBa>`Aɥѯ3:hI U:}e>=6"DMrEO߮I ![aE . AE*QR7)M_x^ţxkJXAzfÚ\·b"^;ˮ%ڢz͢vsjhېF*aogXO#XQF ַ:$'E6*; ޺,9dtc1u qrT$\wyYA\:>շyzl+A?Zh,XKrH]hy_ac[/.fot9ZbeMJ I=/O*,ZVvkoLG(] B.zV9~d Gan71ׄ| S(~o˲G]ˡ-%D,N x6kxH InqOE | x"{ :f*2!npem[Zv`Ĭ$mUJ;Luu[N8eEBO-/z[tPVp6_Ljϙ7FsdmM]?ӭ^(Rߕ4bFI:)HH&j.k FA@/Ioh` y':*h@ȸrQ =g)ETA[!T9S1A`IbeiWvބ*|ª+;7#KTggl2D7ۜc윳g5'mW4RֹPs(0|dB$ NC}@7HL1cg2ڐ)a8L|ʼn}bj ]4fkW.kndzoW 50hacu Bkᯗ҄ E^zolKyɴwUʶZ sN7ڇ* G|F2L)%l"0q0A켏-#n1 N+=*ѺMB Eg6uNa Dj< "b˘ؓsO@cd\lǡ2AmqR"j쏽)-RjoUYF5}3Z냠n0$pB0~\7bNj#Gv̒ c+6b)(FԒt-uM5' ܜC|渭+!pi7jĺgPЬQa&p Q锧!|boעun87.KN{?|1GBKIFf~&28(. U ^C)mf7;fnUq ]YN1~_f@K7ImxJc&V2`e6襃]Qqr@1QrCxQC gjgNIM0CA34?B?B?BDz[wC1hJcbrq E5.P(Ҋ/ p:,ݘkH8eSp"5ɀQvZI LCž@H6a~i0,ctK..2y͓LL>p!lbɁ↌ AT7aѤ)^N%p:2d;'YDuiD]$)su~a'=SrQl3!`.loz8v  3;z:B. < $3" @`C_ٓlUD+kYopZh9ѦEmv8#y~&N0FMĝ#"k.gcj mRUgu?$E :}g=`29H#*WGoD ȋq.ȇ4&Ľ -OA5Э- \P Tl n0$zVj'd/VJiஹ ٧6@Raux՗abjy]O,qg4M*a0$RD!{*g/ҝݏP&VV({DȜDZK[4{j eBK5:P c ZC"4T}c]GUX DHoQʦ ,ru_Gc vB~/YF'޻!Xp\LSC*榷R<v苟նB>݀ecEqz[KJaR-%XviK?G]϶ndn>٫ -i,o&t e0ʱ!Oۗ$KM(j{A*MWܣxF.e;Jjf1 Yx;]x7,^!aX.|eESCh,qZƥ Ď\܅פj֫n).6hs:Ov SP*q1eEEЇLF`=Ʃ7eaQotk᡼BTNxk j. qi/Rcm!qHD5iytԛ 5)FwgGvm4=*MI.٪NuTE;I2cClfDpB;Iٷ{ "yD᷃`K1"!dIí0ݧ3c0m0q94)8T >;t/Q>m6D:.X*&`OezejPC%~RVȆ WT~dryO<\ QNXA/kH#OhYiY!Ox?:_D_D Yr#Zaw乄;0)XUk潒}AEckiXwܾg6ރV>Ǝ($i 4;t&gR\늰RK8 O K`ő˴.ւ5Fyn4!R| m2Co ܡ:n+*H,9\)Cz)gK߾w[>b~y;O2BT!ޤ3f,-h"[$.E(s tLՏЕGA&*Q#Mʓu84ރ;058 qVŎNe"4@}}b4j,̮|,2",C^_Bψ̬koUH aa# " eoR@,K̟ ?DʶOM '.+2繁.>#F/FPԙdub%<͍DR"lqeF<FZ@NiJo'hH$vyahNĴI1I-0nNsR9`C&)t>vrEE *'hb+<3 NLj>[|) Ek:ZZ6 7H?S0bRF$=S(#"jJAs@*aPvF~4 -x(kACHn<1*īHjB ۉm:=ut.m0",?AQ3$*`/ , (R.I;i[gʣIń o(`q5L{؇@ Ee.x^CI^b섭ED",S/LQoae@,W,4_ _*Oxɘ΂KpׅtD[ZWAr?e^a{2q8ԓ3$vee_ m.) ԛM΢,+='/&6Q#/ T"fRDFLjH)&ay,lm.ZSsyZi7) '"/Va("!0Ӧ">۩V.n$j[a Uƣ|iDẹt,*ۘF#V"mJj*07:.E4 A;_)͘ڥ)T%(DM V{TaDVAt9"AVx;3<`Tn<^e.}bF!q._ſ9η_\X5^F bUT}<+b|LklX\Ӛr^TA3} S yt¿a3yHB aw*S7Atca t P)Qkpqv85Xb*E@Eb@ I./.sŬJK y(@ȁb뙨7UAߜG)Gbo j3oYz@Fz*.iDR'^e"P^/^n׉nG:x `AC< X[L^j$i˫Yƣ?vSl;{y'&ٺ0>mL):~02B͵D㑶G~s\>n;N̟"Pz7$4++!VT7XLU:l$^lEJ$Eκ҄B6hv gˠz2 Ɲ($sAܙApH39ɧ xǍ݉ ӥ^S[^[#녙6u6E o`poijnϐ "hG%lī9̘ P0``mXoW=.C-')DyJJEbg#"r7GC׈]i_9 GkˠI /dnFPAt?l X[ՙz'z\Te#=ɨ-[Y$b@SÂ"[{(DJwiFN~!蒲EޢQg0(Ctj62b`  '5-R?jAmq Q4u&xC藖.0(zƏr @ ΫՓ 2H`o1hmؤ)$Ĵ^żVTi O\q`]~oEYH`vѷH- ;/hŽnGX dea2DX^喃?˄w hWH=6(ڰܫQ )>j2pvHg>0Yxn 4U; Th]&or{v:{+؆^ۓˁ @ByMl SC(]pa l-hEYҫٞv激;.T(ޖhҎQh@$7)?IO2x"8>gJˣk.ׅ: 7,8}iPpT$tt#FX1 $/eIgm$ ʿL15[I '^ؔ 5PJfO-:1rRMϱFEH+%)&o]w_F_4ƈ6 rŴb=QB(^@O8f-hr/XRn2͡IPkXӹS$i4.-FI~nC*yLU__)mdq G`ʂ5< 73c:fD8ŁW]`F- g&Ĉ)zΉRNkH~Z5t[ٜsig0lt1Ks sA???Dz,B:C!Q$ Vxψ? r }J%zj`7bCsgiI\yvD_0Q[b;9p\=Ӫ1aJe IWOXcc53;<;+p=y a{cxF :j"]㣽JъaFi Uԥ!GBÀxm>Tƹ&MQR>X6F:)wji?N-g=-o9-Ωjo;۪Ț0/ДsQlsTvx6u~M*vBDzp|!jz$u6%Ix_BK%rDhU2Y/_7ۭUlZL | Jӆ49 Z+/3a5ۧUtkGWɗ.ysf9t-T}9OHXɪ@&E4DB)?0U! ˨7Vd՞9Oi@7@{k\ior7֗Y8f)eË+sㄯF#͏LXřE~]իKw.7B8<5O"(ZVGo.l]1$npw`JSQ-USu68̘W04=X*[:J"p cok?YovV^x,*J>,3 G)pqike{@ؓ[bCcܸd]ev]n͉ѦԻ?K+ iIpQJ&6TևGw`ʜ.Y`h4Eh5*/|0Ox3!Ѷ)S4vrg8czz5G,">.z>QE eE<ۦ)m17 ^j | +j*ӊ/U31'*\E寮Dԕ<.6%&(wp|,vїne>MrX;Kh=lMB̂"w_yC$VL8RqPkjEQ>Ax*{-s߅0y8°"'$^+l`z0HJB9.-Lg_aOt`FRK!މt@N_iS ;e'~@R\'V.!/A5VdhW_,G'R*ܑڪ/H'?!1ɕ0G!mD.^]k)G- ȇ7Y~kS z@3=|`ÄF"ivp~t4$z);}`j haҭ"ZG|U9O(EwU~ri#!Hyo[p"ƙSDaTKL*6p3X %"]Ģ_ay䫔n/*sM#"y+7C*Oi;8A?dE?dE?dEDzcz6 *C#P8T"P\(Q6V#t!IB-> @H=䖲dNCkRήHk9@)llL{V_T/k_!%-\Q&`n1Ō##׻OOrnԢtZg.p (~,q$Gpt6q5᡼UJd8`?':S{2WR;SDGTe^9I"& a/PpN(a &a q_M+C9FrT獨DcP|KCĥhL%vЇ=|ҫE & ]8N٪NCGJia+R|K[ E[D.zN*L1̝fwˣ7!5"X׬٤. :4άb#g]l*B )h̙&\ejP= z{tsa*fq`vmd\)t*0EtsesoՔ=!TlP)8c]a+Cxo(y=-kp^&+1efhT_S !Yspk!PQ= 8H?V SfeHwjD-'- {6 C/}m^gRyɶ67|JuNMls ?\d]a#a5NNX t^vfDLKIvF){4Vj/zH( lA4?FxIM, 7`zSIVId>NǏͲ6N6qQ+632h3a z#rBnj ;tQƹA%%B<<ɘ_VM0+4OHh*尙˞C<-OSk!X϶ToM"C!(CaI9,C_t)EIsE]DO[ J+LdC3qm8c\th,1@MID~hE4eMqeDK8G3U "&*wŹKS0mN˻RomޜlF}4rHNa14D< [NT|bCq^5J.wDG خzyEqW4W4reX-h^HWyvg9LZZb?DlyxX"L|FK9l"A9ߩDl_sJ@E_F[VX|3`մ!uIbY@ʞ%yg15IU1f+G X>60yxqN4 " Sia; fAXkzX׼}f#-؈&U\2zIB:_vTJq:4eNNd(ac| u( y,QI8!E?Gj(/=L.zrp<NVe^Nh#2B$eN IHs9.SU,+ϽQYZD+`r|T*K|nC{A6HW'M].Wӊ ]82ȞzLjPd,ld `k,gz*_+P "<w0F 0Y fAHɼg?v|iS,Gmʂ<}@OUЧ$ ~EsJ0)EJ͢ rO&O٥ QauO;Ь&<aw"2,FuyhFm{ "39T  A76 "Zǫ4y'W5-šT됂fk/HddG2vnHm 6&Kͯu?Gi{E_^͡=^XP3c`HȎUgo*D6f̰[hG>sԒJDo}EflptcY#o-{TxRR걸H5Stv >~)x?kpT?8}A "<3k=ھ9P FfLCb >K7{J@@ʲhQx˫iȴE7Ϻcfۙ"e}]/ėMt THcGͤYڃS A"r^m^j.YTFcM)TPHVT" *}=\0^2'G-;IC^?eoo]vy]Ra C [}YCKX,%y{BH!oPgZ ۘVDZKW6ɌXB;]NZb偂vJQ9d%;miEkmW& *Gt>@[shoO,m[qx]2kBԇtI(|j""XX.!c􌹹\`,wa0m#UA/?Qjħfm5FdvKjmpRE( )X]iJi|\`cWYEMo/byb8Q3]=jF_NxKޫ;WVuf`DuwYC)gg` {M%BOsOS`9ZT[»+T,ݙq-DԬ[m>ĺjADjϤ q7aƬ3;y,K^_%6O:E_G F3,6|u@A,6GXw޸[ ~-*; G~KdmRSWƙ⫤]|QE{rgRdTHq $&Ŏ@$Tbيc}M{,4gxKd7AiX@ BҴ SAݚT"+Pi),u*gpY3vNa=kA" `>GZcÁ $^4 ~&{$C]FMaJS8 ɓ6A]˳Q#A.s^{ܛT1 Z@=z+# #n,wǓG%[k+Ğ#&v?Sk2[dd?1V) \~6~x#%RinPs #ʳ&3^ k\IXبS!jf%)]?ԪѪVD9+Ȗ#_+CͶ"+h]Rh:IpΔ wEi"znnR=iF*: PWeUQnqiǙj]0m lGxJibNhMuQ `lLکlpvŲ}rCzᶱ&1Pm ~7`d8^ Q'~(5A,0+GZSt2`5h/eOEM ZmXP c[xW)5o^ Q I=L!MXs;]b9 -lLB d*2-C,ńN`Ÿgϡ?M %8& 瓦BN kq V$/rƒ)0a j ų]SmN3OOm֘}gY?徚{֘L'Oj"~>XStA|4\j4ѸO *÷ "'/`;{t\Z%4*hp~}.JdRSTbO-ЖDȂV !K@:LA~>.J4^ `nY&78nS]ܗL yno D"5%#pAm .+V,3.暊Rx' U9s/nyxicZE\?Kc%*rM4:F$m@&Y* 0IY`bPaI'[E7H-:^0Xi1, I5ûZOE +h22c"U3TGJ.Z1'6 qgzv GRݐI1>,L`'F!kW34FIg4a2k-Q#$LӃ.#Ëft!b)[ߙzR<tBPvd!x8B+#0PR 3UWo5&M!"Hv=OȰ))i Dŝp/a錦OJ,TVHX'{́D3;z++} haϰٍI0F蜭}GVT 4w-@uIa =Wz.tJ,N p0#5EqV[={D\ހi߃YDb̙ARǖEFGB^,i3SyHC $v#Nf N!sw eD7n ΋q8rP5 ϴ:e&]<#[3:`8At0D_q ڇ [PjLў o>AʓV~?B'V>tsΑ%PI+!Fr&LĴ氥ptѴuLԨә;ZaIBه#rY$RxC$IbY[u jdTh ;~fW˞OGp=u&2o0i-"ssTl@+r*X0KRBȑxLơ3*/րA ?)?)?)DzZwdBz(parp`lf߭ OVđ,;C* {c]M>zg ¶WqN! ]AzJAQ81z տ%5.AXg6sumlrˁ4Bp9햆)(x-헀[v- Pz!HUUz0߫yͤ*(:9ꚛ"M^Adz:H')?e@Gꃯɣ G[ЅB/bAϖU VAê'IGM37~{xC?V;B;cu}Dr" GZy H7ͺ EГ* לBGYЉטŀTb,߁'x'Gشzd dijȻ= `v".#!g+!w‹9O?|K %OkD,;9#khE1F? Y&&*Mb`(9n)aqV% \-OzƮk[YYJRBe&o0n' ? <]ʊ' Aad(01b@WgT^NLQu-S}̺f-Y7""G͝ډeo X_+lBV2`W &?xt:"Eg{xs7JЗm"dIDKtbI?}wK8{>æM %4:-}SH嶎0Nk KE/HaBNlQM{~*t,; 41q'ʸǙ󅲾'rb_@lBF4/܆! IJ2$OvZUjczyzḚƵS`CDh'w t_nv[3t2EpcuZ갽B= DQM*G7f wD-Cjԅ 1-W ep6,HI=YjPök?!G@wk]!k *?z0zIӠn,+D6qF-u![)T|3X "ʜA"Oݰ;džtcRr`Z/1jrRƹpx&d#J.dcY_(rb>̌r"“]ܜRp [U.`Yka$VeDtc=WVҎylX[8y#dT|4q+(AAd#P;Q(qh[Ұ HʈRut ؙ |60iˊdhJ^1PBEC[r Bkɥm`~xea)|T,^*`ӚCM:`Мw)O<\icYe s=ldAdRL!^UJ?˃ ;2~8.yb Jq1,r7|Dzғf(Tso@uPk[cD"!@UFRʍ)ܓ#*AQ-Pt}d9}V3ERA+p&exD۲\nICPP&߰:vPm ̈ՙ(T{UD x!.5guiC n32s} J:%~z}lBfYQ}206#^ aXh+w{輡Sގѭj5i<9InS@A!???Dzhb~:HCx ^=|ZǓWN_]`*DŽ1Phz{0_@J8Mlh>Y+H@^R nAK=l pn5W瀴5964@i™4D]d Xiqn?R=__|,<% $bv6)*O $JhcOX(!bV 0/1Y!,8uB#R NgHϳzfW[#p؃\ .D֬x5?OTv߂*!c u=EzmTVoW҅JE{7Apm 懶G" ,k %.wRz}`4"2]g{*CQ*57kI 8&a _?^NU _ӯO s)&ž !#M~4" )"sj3w`$2}=.;|#ҡe4[2$8!%hGib |k~Hd\ t %{ MB1B焠E?UY#m3 &F\-N]_뉀F/]Fte2@;x|tt{bD ( .^7 2W֘6^x>oyt+@, NjO@LK"{ < JN?'`KmBtz2s@Pc0O4yثp_Lq/M]/T"m\&UQc HTN+b M+|;9Aw]׽u}k5moLXLI# ߛ17̇5[~GJ¥t IK{]B 9IʖpN_9V(d<ŦJI㗂7ó:!MU{N5ujֈ|^R,ªylWՔo'2 <@A#34?H?H?HDzPv?B0rF&۰KK*,WJbY6P98B~G [3ԅtsCh%1I al։tZr^ME$s.͛o!B.D3Ko*ΙLД9s%<=C^}}UIނ+&!v;A6^u431c !U5M\Qof )ޅo7K$!Qߠ$5B /uL*2P7{@J}eéKRҪEReu)RƼS=.ozLìn~WpYuTxL#VĂj&mWD!NXWu膺H؈}ZEA-ZS`ѱ2p+a-ꏨ11$x8wETÛfx՗WEJӨ;ΩRЊ80AP d)2Sx؋{ú(2&l G`;>_^ ,:%[N"q]+C, Erj f3R5EHЭ[r4U'Rϟ:+ZQF~A6rQ/AO)= iS#gMeoOEYx(čȝN9C㞄$&BGm`ϒi`Iß84ڸo}q훦aCh/%Spp"- yұdK"F ,)\ٷ2O_GmqMy&;)4 "t@{z' v? T@2+ҿAmQɎ^xEr{yWJ{)ޡ({M4=s$ } 7XcFOTqI@3>gY8& q1Tj@T/f6  ?aQRMtr" 9]$:a.$Li2`m6UB;~sMk" >5x#*Gv ۔$>EZqPbYL!>_e@%XVvqo`\b > |!zw"~k\7f+*E<`"QNjh^ SAhoF6hOj)a,@\+y:etf+iUCN n%=4 1'AV6*RX]PDůјVHm?Ԥ2ovEDRUE}QGɴicJaܯ PNĦ=>֖;X)l)(Xq >;s?HOqa0\8~G0&1u!|X7gmYӟ\DeX&d&ey1 j"xǃLNI h$cM(ECRV5u.۬&dzkE4(/Q'E9[گ}zqÜjFY~59-Ul;fTjLPܩQ"B~T:26*w<,Z6@Z0"S WvғDʭPE":=vx?xk^LJez{F ; m/T2 H]woqV`ZUp$j>Vxx7[PJb*xL]!oZۍVE!.k=i.76B@TDdL ױx9w5L. DߧD- azePJ̅Z6pVR }Q;SnnJ_C8H>|.ڠef-aRLL_; p1s`J# dY_\@4GY7C+sA (J r~tLZmH<|lV'%!Mi5.X &<_)h/ `A[LxA$?XP?XP?XPDzuwuBc/zV]wJ0 Ű)Ei爄4jMr%0[}}iJkb|P6U@K7fz!PlJ&zQ)}~sclqzș)lڋԮ*ΝzhP.uJ!/J:aΙ_?C"_(‰[0Q8U;3+kY`~46y0ElJ*%$c?`j},)J&8 ƌ첤"inC* eIs>AȪ5dh~A3Ϙ+1ꂐM:bNN:E7Z$@l0od:'f:Yׅ8o,o&ap[E.ӑ$@/ 3P G*rDv̸;S3B*Ų KGeQ:l5gJ=(aUoC#MŮnsʑOE[v3<+ JεѪG lР8Ϫ@tAsΧ DTnl` K@(s&3MŝK%~ /-CKk;sE ㌟U*˟@0c"課NT̄v*L2<7?QܝQmJd=הwxaV8 FCj}ha4,xqNQ9F>Lt2;VG̟=BIZG\4+̸N_Ԣ34#>A0*ٯt{n@k{!U%iz]i CKFP ѮK-j-w"<]%H-ξ᱕|Fȇ6,噂D1kD?V'"rOjGn [K ,aoUd|Ȅ.3ɾ|2kRhJF.2..q؂:t@>v\EWp̈́,/@署) \T,pdSw ;AADןZ bQdd5(oK6?kHVb7 oprZ*&?8_*1p$|yyg5=tkQBC? Ci|{qƛ %C*XqwC!*N8,ef+M PI\:f-j?$i\Z]GS.S~xڌ/Qb1?r2eG) zxpp2-dG?~B3m*']:XU;=)gNZ,]‡R(ШojzbZO&D1ʖB)佹%Yp7Ij G`p֖]qgDP"ßC'pPjtg[DY[J(y*u.0=!!࿠ޮN4Rڭ:J=sHQ7gz dgN·XxjmKSŔp !d$])mD xQDHۜ1 NEK0eyۆ8.Y~Цp'&K4xe,Bᾍ Bۋ!XxTTpٰmb<]_Q0 !W?@͎}-R=)M|Z*4bFB<(x@>m(~G<}Ӹ%Pٮ.w) Si˝;ڥH儅Zrhȿ~/}%_b0 4%ͲL6T:c`X65 7vt,r)$r>\@ }2X~A5!%z%vq܀D1/Eo^b3CGЬ:VPA&fg??????DzsB l~&x鰑֪͖>D'@hI*Ba;ahHUxơ00N%#UQϴl#a空 ;u̾´>\X$/ʚ{Ƹ@bitt_>v-O5rS"hjksD9Ny 0 #ղ-!CQ例|5F,(]|'0[|ދn&!FU>j a KZa~gRIOKU5Mi=Y9kO|}g0OL$ *á/?r,kOZF dT9nrf"SݜL'q)3=(b D)Mڮ@w"J3`cvJ02ׁ*UHoM/"5Bj(7>!1F/澺2IqrjTAe>EH.Cxlsm3x ~b3erFaw 1nu.&d*d|Ɯ'w8~RE3z15jޟlέ  s?h7M3fdf [ J{p7䥛;5lF~~n񨍹kqЇYQ-`eF+-gLťGAb6|h.Lm,T޼W%AY] jdE[_poj̖R-wUZ+P&/qDJb6oB)-H>=j{*Gq4ctvdLC~ /q5 @'@=.7SQ]%36& \߆M4<1Ԏ? V~-,-_K E L+gDS7Af浅﹑b- [ ͖aQh3{x@Pqgi!a ŔX`Dz^fƪڊf`ٷZ<.B]-êꕍJ\8sFqT`h M~iߎ8|hwI߶HVIM()oYyká24~z3 l[JY= $N%ވxŸΧ/-idvRBh Kx{Q M$opmg&-AḇL{y!Uv+Nv*D!bsj,ѕC(s{ -J.B…قv•7  u"x:`zlbP|P~~2ܭدk^hߛLjm_Jת~Uݵ^a`N<@πgm4QkR=dX / .е.hDt `o-(~B,Le c6OApCr2f@n# ɤ[~ B\*ǔ@1CZ+D&Iz$¦VG_p-Ie>ea oA(?o?o?oDzqyk//B"ЭŶBy!Ly9yF>߇k&zA A_X[sl":Otr2O%]JЀ: 8Xk BsjuOg:=4ֶRZ uD״*~]Hh.Rm;-/ MW+_Ǯ\%(P涯L-^{KOvn,pTDoz9eʣWN!G/+?oNfsY۴n,f1 2=K!+ uoW0Cšca90@2U:ϒFďW5\wFψ:#.Bym_ e4 BWOjඊiDF:2%809)( :Ǡ!M;X.dIo@ ,iy5ZKe&;J~dzF jhQ?iHoiib+8V Y\kC%O󻃪j ځHg7gokpGjfJ=p% ݠ0@f᫠0ⴸ8%b҉IhZɭSDYgyclD!LU|+Kŀ*v/Qs$HfJ9=+:0m<ų !$ R\J(z|޹?la7 {3Nd~Q9 GyJb@ _QTEYÑ ]{uW h}3$;KO_r)Yߏ{ .;-ꆸ=F\u,G$r* `٘B?7-hQ ^Hހ:TJZŰsQ/ A<#E 9*hC~tPTAN\-gZ ɧU-LG;OS9@y+: ,sq0|0:ajaH ZU u4Wb>}ר\_0JהKF$G5=`QZ-$2Qg7bÄƫP;!+׹?(H'-̧݂ H7/Qtv[,M"Dq`pnْ^^ G_7֞@U;P骏 %m4+„wl iMxp^]ީF-[#?I9T `0>by}^)MN~@KWZ"sL; ¼e/%P̦9pʶ c<"F "do_S߫jjJyT/A=C< `NW -Ckq[#:Zl3Ұ(@ӀmT4g=BJ^oL]Q[rh(GZUP~ n _+`-qDKfA(*.d;RYlGۋ>@\h(b+J ?N-E[]ɯó`vvJv̿̈́Aւ5 ϯ]lR+ UU* fLgUԒUjrp 2esdu]A]ΐC9 df'jvp_~> LTHPP-w9,>)?Nv1gF_lx0 7:8'4o3j}Y2@7GHPH2 v (q+@R*S#G4GɁ\̩ ~.6mNI$Èlp"q.X^txuޏE)JQH wHj xɄy[5(|wns"7I2S5w 88\{J߉B%xxNI+ ^^ LjDu'lQw. dtr'h5sb3su h:8k*aS? GC3Gy|Jw?hzGtX "ȰiG{kejEy6wPf,"Ye3BITk;C .Ⱥu\,i ҝXa]DžJ_migּ3bɹ6 ,al.GnW|xW bztzص'{!l9 zEpTs~(,ȇȓwN%e?aV.C"z-?E ) .ꥅ$h:릔᧒!,%)Vob_V=&1'ŠԵ0 GUi1 'FiXK>Mch*LmmCNk^u) $ug66Oyf|zVq%,>[8Da!Ɓxvh֫>$Q{p` dZ@G[M`yx#{fj{L%Y!./nCG`ӻA`6sG_U]e p  B0&ɽQ-&p(-/fgJA$R^NҥɶZ `q`IMg,%WliY$ +wp% 7ۨ y705`%q0i5i8?ApD^5cJe%<|)z;7tG/*s$|ރlݙp!70 B YIW[T\E]Cr|{ RuAFgBQߋC^#RH0Q]ͯk'_])4!bo2ŝ:d6I\^S4hV3Xo]j+~ȡϜB)4<F 2Z{Lb0l\ ?<āZȅ qWLIY[Z|Cf`ٌ^߾4ܪ'Bw@C0F@ˮih ò-<D2EP4ch6xi\,x*_x{F_n U.hh wK .s9Y[ k%f/rB.pnӔ 艶Z>(>ufv3Ҁʕ}dZk!8@å-+)Û&;[\)<]x@Ė#Iւ^ŲA`u "L Yo۲&(nl1NI@>a = מ`ͮʔ^c@^FU@yn r662bB1n7m#?ˆ8h824tؐFp I>X pkESHEȡNfʹ񝎾}v$'htu[_֍'2rT滹y.tW} `Td|/%@66:Od,2)+Ge}ƾ:[b;rnޒMJTR /u3O{GxڸٸePtojXC)Ϸdb`8=FcA+34???DznPC$"$i|0GM+oY_y1@R(tlaf*3 i\8%IC)rvY$rjF:~?6Ԭzހ\t ?OcḓI6ДG6YDH@} I6  F8AF{Sќ'ZJc`rbDio ~އ}IR/.$}T WU5rdL\> @txn 0J!Qeh!wyX Q[p +3"c h FLߢ\rBHc6ina#oU>KG3`0J$~=&9>[GK-LGQ sK:$B }m$uiQ\⡱]agJq?nɎWǚpwbb}D$o!46 sZ,4 TWѠ&޿e3qj@waT^'X&I rb`݆PY[?9/ I?F9椨N@&+gtZkTJtӡHCIs PPAScÖi~m.+ _Bh=)jg#9~icB,~_},1ATn*BtpRi~b IDbC'WQ pb"jHѻ 'GaRDvrN걸6w'iz$@t!/d ጊe(`MR&ҺL t) l/gL2/E>G QcG4IA XiЏ`+xTNF |5+>8L۫Y4{@K>CM4i,XCbN㹶C) SK*4+܄!\t!M2K=>MUXrJM9ʶ3 =%wTl2 4;mTH!*qDo?MC# \Ӻ,n$w Qdum7VNY) | h2 sNZ 6uCOx ruLhE:Xlis ޵*"4]iF?^$G( Ko=[dsW+yB&Ĥ͞"}0u@O/PƗ=B!K[h ] R[NRi.Eoӯ#ً۲~~wT'$T-;=N1OjPxOeG>S*ǀBעiWb-ؗT1,tP_!w3b(ppw+la\4si^~;>6XH6:r,Ī~W9Ͼ @bV,( iToo{Ar1Y0$C7(3V<H]r[3H 4΋>J›21,T3Ԛ\xbjWhlbT"~ =+}?ohr 0YMg,j9?cj1r\A [@v [t_4 ԸAP,j,B|4IUHiz`'^!y~oG(-^/oéKpf[Cj݀c&THNrXt@R$"9$J{O<9 sʻLb|vdqn^D?Nꃹ̀A,?朗?朗?朗Dz|tBh\Y=^ qkPLm@WERXnxG-#yiH8(xC-qK;GKE&!@2 bwt:R=O?sj#B´g WH#9mvԦ)+_ɠ'ufIK,(&k;|:ip ɮypt%gX>abe Q+q.v8*qJF&I+Z$$FC$+&`1!Yy$9E{8^6pFCWLNlWpj |A<Lct~ce]٭诫nXC|)7+&Wӫ(K^nkVoq-Q {Or]չ(7g+dbKM| y~wFe6^Op3gήc$/Z솿KMX)!I#Jm;-OY2\m JX4:\֪Z$v<'{ڑ5v)d&z#iyVdvove"cfWr;7S:^D)>"󭰏 ,&]F0jd!!,*U q:st!vHfٓb" Dn.}t+#1.Y`:zOgT VTW }V'_`LITZ 9i= ))5:($A$u`5z.AL/3'¡USW=At%IW;97EՓܢ,&ѯ^!6y)\1 E[rY3RddWye|3b:+ޱX{kW0.fLpG1xK?%ߒd!rDG;PRV921y:p<2MiyHQd2CoVcH"h_S@zz閖`Zf#O? c(:cr.PdۛrFĴI$8 'c_DuBNCYYBn`/IV0 jU{*?J%;x/+oVt~q >΃j1`$],rSz0A9DqQ}O-Jb8VuV.]dsJD$jp%\V{\|7ӺdPJ:_9xJ0'iz kطXPCH$}0P.ѻb5Bb9_Q̉m&;\׭Co ɹ֟)*<ˍaV(&9T22]oNzQ^]zR TVwB'TWцC[BhbHi3߽W C_q4 Falޞ6+z5YfbՓsyڇT]JGE'$3õH Yj'p*.Z"WT*77;&Ŧ'@ZH~[icqwNHe"]bV>\O}ÌpPuБ ศ m `d[InOnrr,Bw]QNu ((.zfkYҮfhfmN-90b+"NH,JSDQN}QՑJA.fg?Ky?Ky?KyDzseC6J(~"xI}WaTϿ I5w2HI3MqHp\Ɩ ѐ]C 7PMan"xc4+FMCas(&8]Y=$iwQOaLjv!ꁒyOKh` JUI㜐< 㚛"}b?Ï&*߂ C gn nBуoޙR?U` B`Aؔ( IFA&hF-iQˎN-ol݀!AP.:F@bs֐ZqM'K]NdGvE&}R I`ѷu$??!\kLΡmL}YxtZj]cH :mVY{Vx}EEԀ¢qq#Ôx1*'/teO~$>+)}J.%+_3MudF#yAUW`Tc{S%~3=:W-wp n[ ,D!&+L{|Li-w *cٕXɂJ5 hR 8?Z "?CYù-X%gVlcU|I@/z\{4A I eKu8ϰMIP-ZDjYw y+? ܄bX]^=XܠQ ZEkƝnJړWn.dK$àkU]<[}lr Q g0gĮGWv8r'g/- Y7 ;m:L; A.Ӄk fM^M԰0 uR;<9x̴ON ˙#I2Ď\a"5dw?0_&4 #X\gF-f<0+̌9a[^Gu &? z' ZИyϮ24Jo.BjA^TqH22ڈL4DFV؛;|gL eQl>sϼǔAkPT$Fd%آ[e5(FmZ[ \#8=`$((}$C.x1%`D$-fm"^]GVJo;e΅49:?hv)DxIcOIE ʋH(!r2B\E=tdWXFEv̕``L@كT"@df@Fx jΖjcx, |tҟk Zp| "w [uTA99/itU&m$OXhT/Ge?ŰLv9Apxusb,2B^TVm?vo@G5|,`m%6:kJ \\~) rָUM]pI(6)c6)b BG;<6`GC,$uyLtRIfיUrۦ&0Y8UۈaO,οybCx"? Z s/聅 "tA=^48}>+jBZE>gf59v }!CrL6#LojB? P)@;FEF77U3`ÒՈY?\"dp4>BsyY`t&f@X2-nDHo^LTl:c]Go*.򘙘1(; Jq8'#-R!Q+8syL\PΔ6[]>޶f:lVcl2e0uAIDxĀ_4.D)o,=PDu/=@"O|d2y#fU;-wց}m;N+Y<}"\r rnGwqV9cpBOi,ӟzrME[Д,B"wوi > #/|Z]11Soޭ!^cn2 g<`^qBd7*#ykGzjy^a>KP[`ʉr7;Aq:DHێ!F]zA;'T"#Qs$mcb2b\>ŪS06DXQ9k]O\}Fsϣ.޻?4 ,X]m짡'[>(rw=BA!br1rbP$Ƥ}? wa3!u{1+@4)YiZ iB&DAah"f W0 7)$d6mx+PfjDmX1uڬkr'>nir=%x(7T""Xێ/>Ė4ub |& EZHYFEVD},7Q G2q *?Gl5[\9It' _,KVAz_qOd|R|"pBl¶cf#DRV]HF* "[wal+HlTV :ˮV!}Z MIWK$6 ݋ݰ:lGhmJ1@!嫡}‚ -IR:w_NLmP+CV_|T^ff k{et @ۥuJi2F6)joWM@j 鷄2JϚDT Z`&6Wo .0bڶa*&ӳI+wF "6g;cP :>j2>*:dT ~*F3",^BmwC^ :#au\c2E)wTzS;I2PB 4L6vL0K׽l˳Pp2%# XvxlGHRV ~8n:hV}(wx͡:aSQ̥7*-zOଢJd4ilKH3lXRO*vx+{4W-66JQy:Hu<,oVLY?ۗ_E9 3CI@/¼RQi#;Pi:jVHF" 8ĕr)$X,ҬBRŢ,K[rMX*xԿ͔ʔE[2|`9epP͠$2KI>8*cHU|Vϒ}V蔥0qh"a(7\T%4\W$u'e@ sƹk Bh[ޞUU>e 9>kfcRA1?b?b?bDz{-䉑YzJ}҅A`MaO7цNW;gǣ۸  5FF\>|r뇐ĆQhim6˃A)׫>ՠB "kTdj$#tܩ5WDOf̆"/eMRٸ6OjCqs؅8ή֌}/!S>g[ϝ0V(y-rkFӤќk{؍~`i"~a˂y0rS2Z6ٍL:Wj`xSAE(6b]7oǔr[PjkF`f'aLL^Xh Eqgt^grT*wξWFBX`CYq`% OhBޢhs͗{X2ԤDg9bD9ԑӶFg Ȃ]+P]PHJAmeD~hE.vrShSXeB; c_IJehp ){1a.JzLCdcUSWt11=[rέ .9/JzL^ %[[ bڎ9z|iƫ1/Bv+as ]k+ŌNfCTXe'13D\H9$$8VsɔtwHgyZEiGu$:nUR+ah3q ۢuթc&ų_l@?X!u"\6 n+({ڣo.Mbu y 1 ftN+7y].25UT7;X&3o.rlGt>KsM$ t?T oq&(/޲3=.Ώm,e/\ra9Q }sN.{#+ Ԍ9c2U4?K]$OA6({ӱ^!l(xݿː_y7jl Y),ڜ!oJYVgomU?Т-l w%],*L3ߐ>n5,AR11O/e mc AY FW+æ4-W MtGA)uP''_})D #Ks4bp^M$PYPT~(0pاrPP%!_tۛiL=/ `/qCi@/jE~S#+䧵{ ޺~ZNx, 秆ڀ}x7iY^*o΋D(/MOЩ$?H;'byblyk?"I49ÜS\X ?J 42O0]E ـEʦBjʰ70XU#'Q,4dUJ; Ж~G51Cs\r@(;Qq`Ce&Oy`R˰c3Hn ʞD͌kZRܟ.nrԢA#YpI>%$T|TY']ХoFq hA"ۆ{~қQ)hd UB66kt`U,_cAwK6A334?Cm?Cm?CmDzfd矈LڧLFz|Wbl@/W)AE#Њ+|w*ο .I !H :@O QBYnzA3%Vk TkhG47R.&ºR^2rK1 ZD䯮 fw>q1Q7`x. vZyXjE(ٔr +-l q'ByD_N,9DԎ֌4U(aOi]UOȤJBEIG7O)  ]>Aj5n}1rLbWvy' &z!`Etz5U+V;8T~`"-uNbmqhlDĪq.[pМqk'gjJb#(ix|KfzЌ_*͟JyBgtu&ۤ1_O*E/]?/?un)lEel ϣĦTIjn Rvg(Ox+ˇO ,S#ȉ'lls&,V֥'hF2ۧS\SK/[aC0M;vT;UXy7g%}ˎr0m,dcCmDWJ#fSvY& U eHlVhpKaYQsH"e!v-F$qIfe)jθ9u Di =O`>8?LB><=R=/BƘ?ԃ{?"+ PnR7hAXM)^Bj@%FD3RƵ?<$=@L_kЋ=@W_{Fyw_'H׮+[Ssd_׳@(W2EY.Tݫ@A4???Dz~&BF9Xx`R&~CY2 twno'7bq33`L!N#wu}lPWkwHtͷضΤM^ z??,~SM5z|M^ ] R/&eDVMŤ| Ԟ<SuR t~j\6޹v Na "%6p7~Hu`;L0TEʧA2 ٶO1p]BV(!4n/ M/vh2wV{Û5-miw  &>Om Ʌ`:!+t2J#ީu5(~8  zeua6~"s#gSA- I؇;-WUg.z w4!m&ð!lMdŘ q %H^Q!f}K{^ҍ!f '{Vx;.6OB8-,F!x:\$I:/A* lG)*VF$ SJnɎM3Kƻx.{nbMzX}.wצ?kTe H'Eڋj|?;Ÿ +Zڬ Iĩ04`f꽓3|~Q"6XT7W,b#ŜI+!Pקookcͦ  q(=khn/vugʈ Cڊ"jrYIȼ< 2~Rn?1-xBq rf\=x -n;sea336fݛ6Yh*}TPy!݃ԁPpMY[h׏@ӋSO(9üyĩ)T2`T}~4w6)*aEy/. ݿ'\p@o!osT<m/S¡Nc2_v0LY)m} V ,Rmx'hxΰĮJmOB; ,K r}Ju1x]plPL;ԙFanjE< <2p}&IwVh-%=n(}LtГj_7t#E%UۂV'C8 fh~n)OtPhcʭ=Ebb_C`/yNzt> pwBݚXvNj|wd5#;ͱY5LJ}')HO (aڪWuv:ٶ ZnƢcnqDymӜ 5RڋKg~˫RțO^n>&_>J<,b6lcdڶä{h69M(f9'_irZLHeaɆّņжDjuwwe׆%vZGd!J.\fGU6摧PW)+[P`K9-=.|/};."A0c\M9_Td,^+/xt%6DTU(I2ʙ (lT#fޣ/D`sMвLDA6fg?P?P?PDzx:WCQfN[U y1ʑ%chʆuE}DXRT86YAA̳=4tom{p뇈kd\K΃8mzHy~tr@Mk ;_+M{HtNI,.WM1ȃXr^z9ZejR+5u@[9rTKXY +bc$ˣ3}]ә$KT=@~J3}1 iYM5[Az,0 44 GϹX1fo$m7I(`41Og+<;* u, m޿1USΑK|8AfJk'S4=Ľ 0? 㼴:W_β7p 1DQZ$ACY$`|಴~X'IeB>ndAE >Vgl7#81)hm1^s^H!_L }bpgzOiF%iE~*<\/2)86X+H?h4c׺UHQuq)m@}[u5%CժdZWWG6෕mQsg@Đ/dcCS&Kq/MͥW/7[YTi8Q9HtA'O Bq(/R!jjvf۬ITm/v|ί[|P\CTU3A]bVv"ilZ$>zxN3V$=ϚXC ~+>37A&oY9m:XϭEي59K26pa᲋S;SslP$mUIawI͝9D#Wem ֕Ps +M5T"onp¿1 T8f,aDp}~߭/tU._97.by:_(0xMxBge3R&u<8ig<*3|r.[u: -$!N ID8 > |~. 5 ln9"4EԳԬ4@r_«SQ{ܡX?'e}s$ឩxbAa$v[B; DV`Y *MKl-QK ;\3r@2aR0?!_="}ٔWuCa䚔7l kAEh©y,]rb*gr@vBiv̀Ie ( RPZ(IOc>/&4%aa*,es-MN,9XLy)2xx̰*)&ZLؠZ1t~ѧC)+Nw@<`6@'G:,:J& kݓ/7EZfZ:YjL@X|%To ˱*%EB `\Yq7B,b Ȩ5;UL 1 X%1; ]|B5B'L5țT |_h&?PF@ j$e2Uie7ygVL젊OCJI1CcQDP8YR~F9ޞfd$fj&#Wr  5\>L8WM017$L F{t`a+̚M<ӫHd@`|wNQ@R(!amEg= .^8*@B5O}*_"% 캶 fA׃D@ HasvF=v,Bܻ u㽠CEYrL} hF=͡@ke=e? ^esB.3!(H _k2WO?lcliCeœN%7ƴM{`—}~0V;#g[gr)G *l+/0^{1"-7vw8eU"%T{f5/)DZ~q\S5Ɣ!uqFˢebJ@ I$jvA8???Dzoxk^C(ϠRUGL>zq2DYNItAE14OidL, V#`KCp}8QO1S/'\ KG?3\ෳ)G{ScIj-8 ܂{̘ɞ8뀁jڃp26=P83O%COE5O\M,B` ֲg,JUA qK@8{{,WN/AEGp6'OFĈDT;"jς[ -<ۃFsMnQDۥ/*Ddh`!;gqTޥ+ˎrPO oA1`CîHͱ zK% -ϖqoSVVl"cs JgsݧDB1:j>_}LK,ӟ`"l.R7@AY abHyX +: ιJdFBx)v^cCA)gM}Նwy5ʖx '̵P dnthJ>|~d4g2aϰ61ŏ׸Y¯>7:aAg$jDʙެ)A`Y Jvɴσf-iaQéГnѧ([Mf8ȕQ ZL=&$YbثӀhP>fammaD+WBh&nHBH1THf9xu}Pf٠8a`E}ώ5ER "G*rPJ .JW}o}>]KBAjmӎOaƣ&4AʄO#xm1tiYQiEͯ*Q^ъq*GoهΦۓ5}8֨AfLځ"$* ivx ؍O B>rho~Ql&q0 ;XẁRs@hXFH ٪ڧ{[%ۿZ $Z. $Zp㧏6{H4l`bsJJ:\7$i4voϻ9#?]ܝYEA˿Q&NcK ^]~, >4͉1#Lj,=C'/yw\!`_\F;Wܛ l/Ko"uUMb1(*-G WnPjMu|$΅Ãm_!= &( -bAlR;aΎW`D5Ķ+?#+\*X?,pA?`bDib_.7LM }$Gd@-&%"6M_AD.\\0@>ɯm?r۬>RI}C2邜|fN(-e.sޡK&#M\]u:H> /1!"PXd.#RN\ft0#MJ+LA@2yʌXVUh%00`wv~~ͥ:xp׸vQ|U5܏4N\jNEiY*idⲸL/{3Y+OK-lpj}y:B㇄пe<%uerh0\xM8 s:)u pMRY fv)^)5p"NvSj'K9eM2J$R#nxdk? feͬ~7zQ$Di>h.qX@i:ڗ%^E/-QAP,iFdbH8j#^4# SMV*& UU肅p$ԘniC:rƿ$%g 0${TF!<K#': [HOnBf;` ̩~~JiX} b$H̟62"é9׬7UQb(]E4)u%1ڹ#~q堔BloӾJM6]h%Wckߞ6o,h!&ACY1}efVCtjB٨zixfGm'Ҋ.EZu~a _vJ(EsCm|wҀ``etļ0Ȃ?^Hˤ|{Prb:[D4ңB^NO`O.걵tHJD"Φo )Aӆr%o,EuiSnolJJg)ZZ8+.(LMb< .)-!]`8J h[rZ H&S b|W 2X,o"`7lIkyRMХ, K~2 (AomuI.Ex"kOXSGCBR)#WZtUE yrv D9̛ $/B9gwqS,}:qA MJ 39;a.@MGÑώ RM')_ɫ,h_$yF{fVkr:W{{ɱ^YMG`a8Eh7N]#S5,!@s14#?{㯐%򔃛N$(;󣌦Hʏ%o.R$E[!OBsI9?@Z?Nt_ ;Ar zqeISd㆗`0m[j>Hrb3niR`y\P V?N oD [c2u<Q op~->_&ْzi k(.(1b$A*w­IjreFH*E:Gr X&u8nFyk,XȧA;34?E?E?EDzay+BexYuLv~qEn$8+ ǰDK%a ڴBw]QҒM |]r؍̍UBBmgROWFn:dOl\Ay3-~oicytMɃxqw䥨~x!0heڼ~e{m#Ɗ!Pՙ8TKnȬ M6k/cEEUϚs '|q䱓܆G,v8Ϗߦ )`Zh|$JD p^-YN-uϓ\ld,-1R o1ΟGɴ 60iK;ĸDIRC+a_(L]&p$e}H< N&Y#hgnHhkx"tjHҮ7cO,lAU`gHaz8B.k.N!EhiE~ ?޼TbG؅8BrvlEdB MѳbG6 {E\ߕS3eXG:FbFQ6'ۣʳJ0؛0ogB m跹:7BQH킫ެ)p^uwjr>'³-qvJ![\~J0p0AzyVyTmltہXb'vɨ q)VVv-Ό9"@&D>z`B rTm_In\&w"$hV){(6=Mx`wWb60Cl;G$)QYG }pggGbw F"|lЭ9b"g2b"D&.bZgcۭ'u&Dfe[Aobgyܶ6S-Sa]EG~CGN>F % :2MMm?UK$yIxL7&sDz1fm8_L-jz1_~^PJvI WJХn ! 8h;9*N{ȗ;µbj ! ΚmNOUM6ND6byW| 'WS"X`Wħ'FT-I Ѭ=uWCR f'IMO rj(s9nEH7ɠh_bMʳs+YL* ^2}6Bqu@S#?&/^`',Sj 53(ըbpT #ʗrI0͙G\R[ޙv!;c & Zj.c3…= 2D]CG r_^~ʋ`T\"6,Zb!yVm񍍢FY1+aG کL%;K15x̆(F-G7@nnH\@d@ڈ-S6ɰS]OK.}JqMx”B/nHaИ2m+HO18e*Q5%f䧣a ОRJW1Cped1˔s?(=Rv_ iU/m<0CIWЙäqU2N|m'o<]gƮיwN`5C hZ+J,fyf]/@@a1`U@Ot]e 8 Px17ZW!G膜 eCJn BRGƸVaɚdl k0k"?Wxp2w,H6D,8yi A) zR:k\/@#&5bҕU@;#%D6Qb(R|1O"G-Y`4zP"U-A`8T5XUg1vn;^Ψ׵s$15|0 Ŷ.# 0M"cNF)lx\=D:}or/{-k4fVZj޶i+%c*^ƚ2v,gMRCniѱ1қ&+%oE{Y81tie\mǤ54s|T>G oWtʦgo>Ȅ1ٯϞF{Ł20TwX>LX⻶>kL19ѥq儆Җ K3#I7. $UAmDA9ȵE#0h}7ߕa^6sx`"qhniɷJùAS uxL!g`BH"ı߯[,G8 M,A+Ȑ%i;+ bˍ$lٓE'RƄp{:8iu/yt (#OOf\-t`3.Ԍd%& Y!8d,aɢ x-TTߗPƚA~^bxA>fg???Dz~}JC.Z`h5Nőzku=jiD"oaO7 +roG+Ѭ>q(mxat $VE \toVCD7SKbz^ aNliْqgF'@a#:Ԛa.C,-Xj#yQ-9Ty)8X=_)2iDOIrHCFhv!aϬX=g%0D+/pz%Ʌ@) k: &6[ս,B yHL ;}k;uimK~7kۦ+Ag~Y>ĆO;M!=ͤqIj4BPs> ې.(m@T Mu*x1#1𬊁m#HQt(Yab/ÅX}z(г4B n+q5Ld6[ywdN?5t{.Ź-ba>`OT{ ԍQkdTU@ђ+MOj,enHa뱰s~$#7'5C3m)&K[Fskփbiq…(eK uS4X|Ù 9y+0Y0v΋:зpuz1y҈#Ph$~y?^EjYMf U+7Tz^$%dO$ ѹE}P3BCpj4z)7+ybQeRu"/5vQz[}1AFH _h@婎NMIԵ)~Ez0J^)uT¹c->oÚN*E=CPFPC@&/)a{^ڝ|)4a 2|Y{]^-"Jk8N pqudr&AI>% κ-%=Ԙx́\ S1N^wK Ha<98NEn}I4{ڣjA>%3`|{3_2(!'jf e5o>i&>wEķ˥K $)\%w"*!뢑3:|1Lx\ S= 7|pc>6LI  Hi'Ιdt،BW7:0LYWuB - P!:dc=Vq%-&Q,k.8+6,U=y3yH q$ p#`rShYA8w2;qc$҄հq8 15v"G`4P҂ "vE_u[uWs0b^SED\6S#_[<ē7 &o!%:Gm&8o@#?3&Tu)/d!427,&9-C Ad܆j=WCέc- ua$aW*:8&zҏٚ s_wYrzRKs3~.d؂F&VTE5E`c(<]V:N-;/xVC*ۘ%L-8q0V=E@"I(em{3w?|Op"%RhyιCH8GavkS!:S~~` QJ$W%33|R+m2, zjJQ4BDY(0G+N;K7Y5 aN1|r]QB[5l  x}0'}C_Pֶ-9n'×9{FyQc 6bChy {ib}4S51@| >9ߛj\+ԖpPdW" J~]aWlb66mp۝fsuM h-l#jpCOdh{B+% &\ڙtnkwW>0h0"ETsaApA@?o?o?oDz}vCvO\X%3Xs54ŲD=WzM`2QpHLMoWCJ[2r겧OIY;S.h>e-r Fv 5 4{ /-JPnGc d.Cl<8=AT*H)NvX .&ș7V4zD)#f]v^lMfj,(QF"dKtM%:GUvY?jpb:,fX{k?7D<šWn)pU.T)~\{`g tAB_j eu62 ٧L$WcHۗBʟehOXH ,ve1ڳiQ9UBg_x(R;}'JV"l?eo: A21t :6N7q8=,-& ~@P͞J: qef-@ωfzni=QN XJ;d~O7Ҳh_uPzD|٢Zj 3X}7f̛9AyꨱKP͊<3G׶b:}9Orfؤ/__ChnOX(K>! >le%Ui.ߠG, WI!rTNi͓ 3ld(U__4f殹HTu]-Rnm)ci ʮlrxZJ𫰝 h0(rˑFTqi se,FXWYߵٝLʟSqؿ{_FWAsq<ZrJS@倇Ҍ hEYRZ|EL/@/PX%bYA1D,P@X^a<F fC"4BȏuvpKe\P?`^N_G((0ϜiohwcB˓|Ϥΐ1 hk%*Ѐ0ׅ˲U=0TDկL8|WԴ%5hIo2Y8 }ouڿT*".mJVnV?Rc m=n P ц@xvjbiLw~րS<&*;A922# 7QϣwW u-6y: Sf(sw@|#1]%ۉѪE,ڝ[m' dYBv4 2ijAZKeCqbK}QC1b2*P*T?K:H5ɏyIb|z+w29B*Б"6#\c;^/ӥqϣ%8aX텲<o~y4gcFdSgYve*CɷvĬk9y=os(J AA?8?8?8DzuviB"<^Lj%SW:prshr=F~7z@Ife]ϴl8.X& l ,n@oJԖ`?Ŀy]cع3c9L4AlQ 9hoEpn == q)\^ BγԲO5O$-`(+0IM˼iDI݆wb-!BI),^{ƽ̙97RQl$DZ=ROZa9B5Av'-~ !˪=&s\i!E1 <)#FKxZyF%n;$4OGN~ʳ j UOB$ (tXHrҶ"Yj= mh[v}A/ @MEɽ MV$+`*s:!$+؍"1uQv@Omp󟮴]5ȝ3d色ϻlz +Ұ(M:dY{0Jk~v%<'&Gv\RIaTו)ܗf +lUnVTFe(:Y?aaZXBHWlfy&˨vHQnMnRBUT"eBOxS]R=&o|k&HrY=#N*6oA?"й`Rp;mvϹ2~_z)Ġg_1Қ/UL-2YM$͡' [qI_b2KH n j{eJnA Zr'@X3Lɦa/@< e3l ii%>)G.gg-(fDQ}2Tx/c)~Z%#) cR1:.%v5_F0BUﳂ9*# <,GwE'0iFe˭69#$G>YT@tWxpnPÐ:2>w)UC(`ŞyZ`֍8]PL8;:=FՓD~QaB-iy8$hL]&j40An4A}q".lYC&|ꉦM$#xK'ߌz t3,XcLXOduUlh~r3XbfC%-3N>{NW#hs_INNn"(Gڧe,H._yAb#)m mɻzЇb(M -ep(͡rk/6f݆nWQ*2y3s]>r)2ȁ&5:`k\ml46lâ|d*4< v!'i?Sa{3v!u\̐*0 af30)`Z.tChwRWoAT'td4;NUځԬC >J*t"њқn{ FsG*E&hxO~͂AC34?s?s?sDzu}@B(tdx|5~KC8G= 7l.c;ɴN-L BD zoH8FV,>Az Ub0˧^gs:'aT|fvco*O\BswB (S^z¸v9+/wtҶσ0hl: @+ʢG zv`D8 BJ`Y/7GKۗ$l ~񭡁 : #)Ӂ,q5d~7yg~NfW.z-؂^VbAaoI|Cat10?~-kXPt"50NsGV6$B} %CFz0<= 0dwveЗtݾ ĠOVgr~B_0;!8g ` =$~8WH4#>ؤA//"nL_&DCGYXd8F:3[*v,c=stãQ\l#b}g_YAtoP[[ARO*N=Up\w|!/ dBƫiLjCzmD 5eMmUJVl1?0]$处dQ˴m#)a3qWk@m=>!+il ihcE$f戠ywWϐֲ v,7k9LF.e֒\1iMZ^DWS6ikFUbI*cjvCqPL^ #ӘE7JGL=p6v=p60\TtPwo%fS eŦL$amj' :OU·݇gGII7`̀׵ԡg5ЏOK$eՂr]nޫse] f%nb!)J#*X7bNf*)~D\B|h?霞e)Eikct5D9ǎ!b4&oX!c.> g]p=J&C ETn;230p+j4ZMsP#}FHKk*-&v("@|ݔo(^|VRbߪ)0󁾰/',v]s1ֱo][|P QK:b Ši;2j^dmEfLLM p!S_eݨ2< ]dFF͞ bjs *Y[HԎO`fв b'{3rdQP| [6Č-޲jA)dkf ZT؛)) +BdNW%ҷ9@;HBhV& rd!wzKmū <7J&r:y7zz0\$lel|d8ζ#ХkaL$,SO}`|ojiSZs0l"|ZG *-'-)\jߖ5!T-F$tc&iP&4NHOhHۑE? Jnjs:N+.Vr zO0d^ tr!]׫Rtz}1M@LiC5 ywd:$3q Rj-jZI> 5\a Xf}.a~p Aj, !64+1y{Kgpo xy4cR#䲵OC|p J{ڙULK˺+ ZX4ؔt3+BiY$j +g)6@HW0F4^:%nSȫ`lnvsQ>-MeҶ1Vm1щ o6 b-MM4SflZpL` qSvJɗ?6t]>l!H`ܖ wt,HaSvA4ӫ&4_aƧ>"mgl#gR ʚx=m%:gj4 'yPsf ?3[F~uHh2mO)ILCjh$bܟ'OPB**D2ȷZs9"_fU=WbݧIl2z%u2cZt."7ґͫ[(Q,W/w`u=htE=ܣ#}bבYg DU^c:Af,( n_ ^rZʥZ`OE+2EeupݢA"01 HGĠJ ?-.Bi JWNiab*ߙ=}Ӱ4X9Xzf3ta[O]>씟x@L4­a?Xl@saFD.9F%am:A a.^cTȡfiFIE2h,RVQd't4[,6wy؀|T fȥL' "XN$D؆ﰺD4^X{Ԉ nq<͂ 4!ȞfriMFꅀI@¶28Y"dQP MNv HpjEɍ|PQBS[8xa2@X"єE?Z F3;\2n=1'Jq:]D_'\bm<=ɺյ$d*&;q Zp>Z:eZ2 TE_^㕸|ђGܐ,p1]Òz.2Lmo{:NcȕndB4@VBoOdYr<ulCX;WiN&YgrX8AFfg???DznqC_^hyI7 r6kF Y^ #ז\:DׯN4n7&بBgDO&@$tU2.\2P #fyIiPI#l* n5r}/l] pv.)Kë8+2@KR.qw:  3Wv@՗Zaιjt/B.+})]䀲̹L~)]oYɾ'ܽge|>0O8d!K5pPz:$;(m%m4^%ENi%`//T=tn~f6Rҋ:ؒGJ %npo(hu=wR"-3w@VFx %=xaC2JpJk~j/Tvε[,EЋ,*X AtdxE܊.nwʊS94ZZHgrҗ H3c,X܉˱AQҽ~5H&F6#Oc*tAZ"즚 > OθpTޅ+ϓ| JxEB4<pa<(O$:Jm^,S*!%qH[NR;b&I AVvs;tHc];b&աѦĊ}L{;L'Hnb^6'N߲@T_1ns Oh,L >gAc.]gr]PR]+ %%%h=g*Ѥ@g|u$٭A<Ix%f>]}W?Kh#XarYnUL􉴾nb%,lRF5E3ew2љcȁ kgŕá~(ТIƼcШZ=)c<n`zGUn!}|Gj!0Z=()6rJL.]axp{CJQ`&#m~EHJ:(\u1Ҡ^ܨdVdJ#*qoPY4WG?$^ʱ8ڕKDiBˍ`L)*fb UnǡRJΨ.$RU%G)=ײ7lΪfB_Uӫr }`;SjAH?m ?m ?m DzU$h,C'jΔKsBy>f6ڏ=?}ZDê)28EDžL!n Qݼ t\S{̖w}ь f Qz bL%R?a'$`ˡIJ etԋLvj DQGxwPSE7y~K#EotG2n{ٕ`~7)"ɣ.Sk1k`M3@VǢKACb'Nx8h..!a&ֺiyqRKP{y_Y$G@%>I_@_p?c *h{A9~.TWP; FQfoU^y D/"3\\0B^!=vrO O"ml֗_1Mjk网F^E_௻ f +iDsȱ%ϥJmAШ1etc,zmu 9 *esʏ~+,pe-V ̠T)0 ׶y(XM vG'l=n(IǿIޚ!\G2 مkw[+) Y 7H-%j,ڍt`S'|TFxϱ X飋qF/Xrr.1`p eɶ["Iu1 i| RTјz\ $7I 'EDDZPb2 A=p,Z&Q0c%,w(32[D u8^x?jPPI#<0SRHC]Q+쩚GkWK򘒦`l ;"zTYj-νZK~d4u`VɴB4Y|9S]{T]̍ u w,|ոKhv^I{H# j@QZgsMgDIcxԝWjwe;HoO. al Z7Ktl _ %?QC_}sq-(y/EL.W ¦WB9;cgی!4gL4FcTۘ(' 4aڏ9t-2ev. !_Tns%[\^$[R롏@t@X$i˼ܶyJ–4ԋƾ QzE5KX󬺓p y?<9~n!B'o'*,pXB%`$#ݺS F<m,?uweumi[4U t1@qQK *➻6.cm74&88.<3|*0$]@G>?QRMjNN 0QB l*fYy}6(d' X'H;昛{Jf*Ïi\@!>6ڈ{.ȜscIJ %(Fc7{*"ĢL,:T*d Th2<02A+E/b>I2DU+ϰD7Q&8 &\AI?B?B?BDzyrBT`~=~BX_<,3+6fNekew[ܶMH G([^K36. *|EIY8 U0ҫn ~ʛ7 deLG-~- d0 ]*pG7G ղ]Hnq&lԡA;Z$7I.ZjoU+1UǤuׄdY 4ѧ%=~S tV|<7οW ē*9@h@?0H?LhʔL&%rI ;Je nJjeyI ^9J߀(wW_q)zTO1:t nM\ƜVٞ~5;+e#@LP0TU/函`)!mRj oYP}4x63-wGTQ*F`^uRZN鰎sAAi5ۘt>\`ܫu`L_.(4;Nl{R{Zd4ڶjG98:_(N*;(> GnNZT>e쏽  _#3ob1[l[ʖe~92[$EƕmaVؖ7ֈF X Q?'TF|fͬDVT &ɈĘhAܵV%, @UBCɈt-4ed "5zc+r}%A=dW1F~t]I(MvǼ k!.wͳTxRn[% ' W"EEİ"-LA"r,3>1+Ol"rX۽z>^9OFh k ZT*X<[cbg_pT"p|T ̲K}3-X@ìG@%Kb~M~iJ̓Ac , S t$t ּ7K83_a|4h{sw,K+D[ \؞$v7>Vp]sie;\B^Oum[e-TrЏᯤTFGd{UPrZm,OQU$%7ϱ˴[IJ^`UwbbiDԥb5wFLڅS CQl f5bBAK34???Dz}.I|*Iu%8}8*7Gyx*)lB+IVƫTKfpBڅ:~, / 0glIz״B/KZQq:Y,[EN SxQo)%ٱsطPƟ]qqך]nlf'#E p*tX`1x԰YkWk<*G)o\./cDw{$S"Gꠚ˽gTY'+ڍiP"59cNR̐bY Kja⿾Be]l)vp/-?FE~ң=,oK6ΕYB ~ZQjm)d'OU<~kU!>CUR!cUETO& h^7ޫAùwczɘHQ4ƠAQ!H 4^|}pՏPX˔Bkx.{U$*>|j$^~ٗ} :.'Sl>Лu+s@^`#㋏*&î{V19 F +H$YEB="CrSk}%&p~c-ł!e^vٽ?nTJ:gRGoUg7;#fہ+8)Tdn@Y#Ehk5}&@'C) Phmu8٪6ϐM0lDy|MT6 eWBCGCgsVG} agzS5Ҫ6!C&ԷUGd^ZBnx`ګ)NHi4տS!DJZBq&<(rRYqc\ OQY KɿDL#RҮ?BM&Tcu+$L6$p*~Kerᴥ5^ ` Ym-Y8`-7Mqؑ+H@tJ./}$ooi`]E8*%\U 'ƽ-1Qߪ2~E FFQàˈmf% tFͲ|]1l mQ"rG{)z&Bi.+" v+i֛AL?0?0?0Dz{,@AHt&"]5 H~ ck-  ˭maX,b`eϕ 3Fá#`)0EJ evܲ͝FMmklIF0 8]!dr,qyGja KjrH"[[&yW5-Cs}@*3{wuҠngK`(FK#Ca-=Fh5-.t|YP6O}Ӭ+j@7Yd!ڈd2TVqք@ӔM%<2.]?f}{V)!<5V;a1=9E >@G_Fm2.9V* +DF7VPyqÇslC& O}6khss11L}xUiX'!f Ukk!__t'E~M# VURi kT0&<]l\YL &It}V3[[;b!0V&RՇ-/Do-1j ,6|m ?3/!!fՊ?x&;{c!5iX^мIvEcdB6‰1GV飗Z::z lD:F4 \qbQ9e}X=|EbB[sW'")}Br1m &լ~!M8&Ш۸>{,6"l Yf PF9ˠM{섷I9i}! ":iPzـ9w#jdv ǁǠ4+kTAN#-&r r-)l*:fVG25/Qɟ:ahG q_hS) 7OMK0Ax{Z-$.fu#P%Vr& jݏ.ɁNTh[=QD1;<<;g )Z|s qdW3#j@ Rx]8K=-fò{RyP*Y_4fJl Pׇ&.I Qhv y%!MF:s^IRGdwc=-i+ou:CLi%IDSOo‰2[a9J6@ٍ-Ow}]In(Wm:; "dd[;JI@a[Y&-QiZIKΡLbXex#n3/njP)dQE )I%&E%G0oU &-/nJ]Ep"?癦AWč 8p>tJe+]`Q29KOBaetVZ`)hKq j_z~^n_R uiڊvsFs;ÕirYQ<p̣!cY4 PF;8PsŘScoM{# 2nL R22ANfg?p?p?pDzw=; HCg%hlvvTlUƜҘDtbh|ߘ NxhWET?c"PQU9JA0~ӰYzDc\15QNY|hȼ:2rG߬+M Jⓞ๨}F3G* [1iQQB(#NNZnjm6EKPСe_e/n8+ +}M;־km rʻ2?!-,Ws LKU|ej4 N"vW"+ g&֍b×ar΀L{uh\V\ZJRa"vޔAg6HLh^`=G\/{E8[ɲ$PhBZ;B⊓<<M̤Ȍ)i2T!,ާ^lt )ˊ}FthTM :# J#IT[/;)iZ^ 35بO ӕPDȠ ?@qm JeHsU'RhNʷ@vj 囻O @<> oc3jLV,PnZL=­os(u,fH O͖1O6C:j9e|[[@h'tb_h=7WfN9hP&ݬNC\+b:l@_0`Kb!qjG9x(GѺs#?a?cʌ @ -i= o0=,D\g2]=M4ԡּ 2Z"C*ZLΰNp7\ow?\]}5gPpK#O6s;v1pXZBK,eBPR\#3.Y5Ҁ[8y8Q0wxfxPaO"i ƖŅh9*YrnVb/k4_O>Aaq !rif~r(\fH4?>'< ubg +U쐿73{}܍ }7n}=nzuh2p +)>LNCFBxwt̔dAP???DzSFBZhjE1҇b~BJAa2Uށ.~cRHBIȚڏ`k˭P.oĬ 3DuI(\SB_V1qCա*ܱ\ݰK3{PKrbK! ޿io(+P,Q) ; }Fq|^[%A).`^L#~ s`q&;e3k!Ǡu(ILZoqW?ɸAW?ɱ=d"`z#Sn\I9< EHVj y>T.1p*0L`D_N^[O\,dqr8 ~#C+JokM*5 bNeK{V)7C" A?f*2fMr*h'QJh)Vn, %VT'ee-# i'<p 9s!!Q(/`xLO$8˽0D> uw &8H aG/]JlLcE_Dm?p,+R B-g,D@I(b4_•ѭ yMۖWSrf2;G[Ő73 !وtvc20엤# 8GIռCiN&yaK(zpqw+Sq^3Ј y-ׅcՐSOdT'ptդ-:Hfy 1 ÕsC@/H@B]݋Ț/R6:w0T_F:vDJ{f J6v.6QsEYs*ҝ̠SBxg 4S׎EN %IU wd' 'C_L1+bJ̭α]O(e$-ߝ^2 O@s#c$29-7dm 8eMbCRq=\iGFvySŐ/,ڤ,fD՝&,Gτ@M{u)xI 2&/{[v)`9c!!36ъW%=b>A-D1 wJwSE}$~A,\.X}X沭$'T殴R]p4{k#Ed3N澛Kh[r)M"+J9Sӣ2ĵSvE1SWҬY>8<웑{Hl!B$ݽ Ʒ!ᴅkNM$ MkѪezO+ \#BpL'ʮ^/N\jo>v4J s!7e9_KfS0keWj+P<>3H  QK= N<.QȽ !.``)Vu]O^OE$wljd ^o.1ե F'ęmUg8ʔ̃7 VA/ҙ6+JƛnyD1(,u( 7VY˗#>¨b+|l$3T~g9eN,[/^<4$lD$:rf<ٸLS'A\MhFd`$qkF-0&}uY?xb7Jp fM;n8U7j*|YWbN jbs=%iћy,{K?Z۞Mh/h,)?7l]m;ܚ)kMCtI,ŞH8;N\.ؙ]Et޴M8GscJׇ#8K^`h̷rl2+\xkklAQ???DzfQ~NCeL=wWBw"HMc dbHbgMFr >]h{'l72Ɂn_@uOD=QJn8$pvG*}Ik@* pks1R+ !uU V3DC;L" >TJ9|-}qSnb=bZg(ڸcY\N=ڴ8 :, @nnG\Q7Re@׉,ן `".:JSs%3bJL }$eT~锦̢8V4ё31Hk-ݞ*S#dRTD"S- hpq QV[̇,QM4=rxZ)>]ϝ<Ƽ5X5 @\c\U,]GdPA~͕LXD`Na# ,rANBzWĤ&D I |=ox+!`ܔWYF [aNuxd8JPM;@ z e zXJAh {("j*H|)K3. 8.200g 7~l`cm _JpDqGqN-w;); A<,8rV*BκhI4w JJC9a8|uU2A>o(x k*z7;B~#f aHL@H): ԬȖ.N`He(fHِW*ŪBe:*eͧ݊<$B; pTL0p9! /jQf"BSӽ~xW: lI>ׅduB1>ӚhTXALZU\k}ӑw1-K.&ogWC@d5 MBj+xbeͶ{9(ܥ ѫD xÁׂ;esȬ@*neF զn7w Nw%E䙽AQf];8DHquC ꚧI\ WO(6ƴO~;5O/f~ez : \Yt"ٛ1I3_KxkMX&=+kĜq>чT9r>6N*F~"H%;e%l5 *zhm ҝH BTً߯>E8SX>6XaRd&5rWEgJtI@`QtfV t'O ;)Mn9x-hDD*cuA#?Ѡe4x =eIHwmE-줏vA~$NcGYE0X dC`N7!8twX]c u/ q+Dn%bf7v;J8ɒh+?nȋZm 7O-$v D85Iꊠ03!sZ7uC?3 &'m6Gb$\QƜc&ۣݨ:1b5ߦRl"Tit(CļFA\Vd{zd5D&QPNK;'Ѥ8."y2zc\o1W_?9|fsQZ>dZNV# {QƓVm+춂UcOf 7X 00p;>*&O"‚\no xAS34?{p?{p?{pDz~,"vQC@‰_EdA"zU"O[HӾXLD`$>gRgLL)Wh h=2D:.b }]#Y@iA]%Օtg>r43InY}Nq+?Ѕ1Hh֬JQlMge,+q Aw/v{G6ANK4{)mdejuzv*XJk#+}RU-x6:̇B2Gޕu,nw ޵R؋G.IMBÑ$Hs7R^D)ͮX~[򵫵^FsESU8n S?TJEI\~j6NW,Yblr}P (qp _]R%bfIzx)j0N-EV\A2"_jvS^McԒ\ӌ{e/Iaa qnj@Xj[4 f7O}R;E3e|0|и^IF8$*Xh䈯]!:XwY\jm2@mP|~EY'+UveR\+WpV.[vZ,t-YkqSU$Ķw  ySL|~tH4HB?Cf79m`([t] $".,Tig'JHk =:dܘ&uڂ\/3eFSIdAOT@U4dD}ȔYvb!08 ldL-3< ~}X;nrR2@,g~]:nvPag>8$?d|6)`ؖujNFH= y?I@)>*)Hb((ugNW4`n Q 7 CWu3xv)D EeҶX8J.OȨDzf*-)S MUx)DvLK՛œl:0zw]"\ ]`9BuYH\~=|ޘ ?\AT???Dzp}QC!Ƌ+ M=NIZvSvc2 c7;H֝g S 籄',jvTuK{_0JCc{7Fc_4N`Mt$mR#hdiRR[' 8.L+3̣hz̥l9tA P{u 0{@Lbbt׶HԖ ^`}UDHlS'3jNH\EjH\l{KKZIhġH#d2:*9& BM0zx ذf!Id5"^Rxさx$y$$€8MʅFW5S7)~;0Qurj9M}dM@;?GG)l7$jzwtIrCjb{$D3I'I(oyR|H0@#qk"L UhWԪ KgeY"FlGe_"X/(}\U.jvܣMƉ`DNj >0kКl~Vxl TN|Y3@iQ܈Щ?YalclRC eZӐ o;y %-W ^8H^B)c gn < OVP4-˅ax\׀uTZ mKY .m%Byڈ6H}X/Hx$ (ydLfC!Vi"=H+S!M~c0)sr>R}Dah 7o`&nŖK jA"}fG6o,hQ,_.L,5K7/./9)f@*ٰT7³GcbZ=q-!nƷP|G,UvbLbȽ(xgF34>y<PWBpbfq; Z}XcR҈kDV{ WN/״,V?B_ʹa)nIg.]H~MS0B2".w3FaXWUDJc6GF5*Zܖjü ȹ"I%2GE)յ+hJAhIĮԛ @D|j@O؉/Xz9LP[Ab@yDndv 8Iåb7S7w:6aܧ ᯕ' (,6cDkQ/ ߵ--s.E9G%87 |WY LrΗ CO(:"B멋xJZא,S#@*\ǒ+Eق)nw'ݓ/MZ?uR..wֈDW5٬Ϙq(NFu4jGlibvߓk ]{$B6J^[v}t -*10%}`L’Uvw)C Cכu&"C^+x0h,dmkt<,¾9mN0Sy礤PkB%:'AEcDyoa$sT6e$>9ZW˸WIFA.Kݻ3,tZ\ءTVOcTµl4T |TZkSgA!Ar uEƽxŕI pF#}ӎb\--N #EO.P\΅gA)Ꝇ׊v,e@XM*P2)pV.g (.7H6{G*a<# LxFAc/,dsFVQ '-8,C3uVE&,7i y9^{܎FXpMp4? lZD8܎j:c->Vܪ= &u4R5QVXhzs0,/ j>&.Μ}|ΠccjѴD`Dd( k`wBCZpi yE̦'M6t'\r2d$_IL5 ȍ~B7"mySX#*L,AVfg???Dzgr@TBΊqmA~.r@B6h CS W'Β-qji*;p1D7M}@yDd;iFNƌ9k EVouQ8gW_K|݆V}5ܠ@_Rn4҇ycT!~f|邏dA[>H ` (y9Qf XgN7H` x26vLҨMӽP#0qxIɏB98铹#>F!g8i6I-ˏ~`b: ȱJ'HK?杖IM)/p6eF̡o%&/ Hk0SC'W:Hnoo[ 32g,̭<* 揞nj*gUVsT |폷撽ɻ_I4\څo,"- " cyp2/[j*@f?ĔYl]kE7pc9[+Ҕ}9<%&AN= :QhcA?KrQ4|HN .bEqϞ&mC'f|ɊZUUtaIHx=L.>Y cf" CP[Rl RJ]脄ot[[jDK>;75<z*8w0SmtHf.VrtLlvbY?e(ݼʟ9t"KH8@n}NȜdWMdѲ_#0ndm"覈(q7қMdkg}&:ZB[2FdޔKEN;d!=ʴFbAņߧ gyzFXLm6zԏl[OkH{ %aDZ<$Ct&8bnәKY2wdÑtr<'!D UDKAjJ<`{ˬu| BtI}ua|Q8f]$~V EJf $DLs(4 Btt^`Vs 8ĵE9!*iTq~ d)1bmɍfJsTsM2gY-EИO/ I*[s2hF+.u!(9}#r;j* ^PE7+ {INI-k`}_vB|5oa.닙h_{.O_+g^AX?G?G?GDzN3XCn‹rmbϺvJ0Gt  8~Y'' $: /k1]Q;L C8aMvB4xKlyw@s$“toxuʾk$ta:N<6y01150xbCSBuw ;>l%ٷٳ$vQYth a9a>(J*{^ mo 8tA9xFY^\75ÜSk?zص'\Zg*|=*nбӿ}F#4!5L;Z.F i/͸P`iKز^LFz83|X+f/D n(9[8f+mۍl;`ʢbHu@f- =JiH shr%5:s ll}0bp6Q ;g}rK6Nu4.y>ϧRVr R /]b2ىS61o!PQpʭn^Sm@=޵䦖J_'10 ľ'H0R7 UN.بnFkj2L6鯠"PGvY{DS1W[/37NBJVYшŖe8d- 3-7Bf 2--3}y-:L/ B{ŬcPܕO|' |S*^2` RQѹcn# !j!):(c͈op;NF&$ğ|IC Ngg}SRu^ 3&%*{nJ fpi:-t%2?96Co8EoH tАvalvPz ōX AРP_#e 5ѝ9҉\^-,YDcbzevNE YiBmٖNbW)I z)ү&#vS RCؔhJ SznH(زtUj^JsG<;Dx([ Y3A< 2cUHc&BV\4Då] 1%7 /S[LAO~Nqt (1Qv_ Q"IDI}IE%0[o^WSh͉Q1do`^ Ɂ$;Z`}эl&m{'vt1D;UL})WaR!F~&v -t.O$NTSb w MF #)oMEH+j sdGSeG-ލqv8Fۅj7OK{3BlrP&Oc ޽Slέ}*6NӊmM`7*HD-Hma,[G7.1v E\ѪB/VUK.JR=D;gDL<4s̩sG؋xmʘZh]E$6Bk%^lخU 2e|QJD; )tF_h-=fa|mY F"]2m. b;]5 ҫW#\&ʝK!z5!vǺNGdM\֍0A`yjkX ';]V, 2 khixL%\e2K}r>mT ~GnVјJ̆& j HT@@i0@ӥJ g,|Dmjm[ }Ѳ`%fk_|=AbT=H3WXH_Թ f(7PcuzcP% o9\gˑϷd}K`)A4K̮L*v?tqߦkVBxѪiE;sCa_B"ϭD&`9`"6;$6dȴ*p=CձKvC'e+,C?WIu(.G 4D$] Di>POʧXMx#Q,i00jfp~'n<RgTl+F_e-i&i~ O<%4q*>R$Y)\]&1 |fw~8hHH ][ EP_y>E\G)x 86/^FhOsoEwO} 5Q̡v2$\yTg JNHLʀBE^^듙wk83X]@9ƮŜ/eǎ1ҋKA(>囘um ݽ~\].Nu2Ril2zX<n.XH3;tJZ𒈢ۡNɜuJMꅵ0C+UPf׻.y0昹6:5) cĞШX;ҷ ĸDHFE(]Vy$|ҐqzWJdJQF~'9eܢp~H|ȷ[xlsxAbDÛRZ:roId橁N€zFm"X巕{ȩGDό ?k9gﮭMwBGP*`΢*[DPgêd.FdGlBAᴤ~G-/(UrZKz٥M}bMS#-Ԉ3 Q$4z<]#݈ :Vh0B@HZ-n()i o!iDPGB(po>7P:@F|=*24Y,ͨĴM-$aH>6#. q&-US)!NT!vS} e:@d!E{H[r/;;ủHt{OUog8hRJgEx(BDu,KB4s4.MeiZhHWG7> ֝~ 1 J2C^N\oYbozT^\w_$ eZaDY4U R^=hH<}y^ ܉=Xr7YR6 He` IuEYޭ I_Uq@ ă4zϤͥl#pӘF%IX+Ont"~Ԥ6i"{ S& "-x,ޤ@$^Wf=?J_00CYt8dBZ&*gUNpVhwΗ 9_inSܷ5V2( Y֣G2U0g0r_Er:R}ũ~7GHFR=aY7 !`7+o@ұجGyT圡|7vf`hJLM4r1l"k6}d_=.W:M=y&TOL/K9ʙ+ӇoaKR*bsS,rۉOxpfŨq//ŮԋHuJ<~Ɵvā@a0=M.qjb3uB=Y ؕh6h3ѧr \5x4pSa@E Kzp~#~UtTbSrȴ"^B!\f#\u>R T내\ej#L\8<`寈4|%h|*Ii܈\.Ԯ2|s9sz|MG*@6C2,hTҺZ5>kH Up)i/# P.1~UW2*/RB@lPK`I+Bjh&0+΋+t 6,)>^B/!Ir`lxDPrGneʠ6Ce AMpNx^.8C?"9jJec^-^DΚH}iiV`Iԩb"E^U 'BION DlLo?hc)?F8~]Ȭ R W٧;4>6 [c./ά, c!*(J9}:e~bϣg]-}NV 4'zM<4iXE\+H4_h42Wֈ@,0 &eK)wSWKzw=`~Yo@3#*U -ص>^;[{wH9Q -gq0?ڇ=QD”IEmKe%jɋF#b[jɳ~}d<1nTY8uv?ڠtw5:ɧ҆?AD¡}2Wy[ 3EKHс>Ӿշ_&H]RgM\Sʶ!޽Z~GEz{̉ 7fչ>5a4̈́%OM ݂);n">Sr'fY3S)eX_!lF_@}y?$f`__Q=Rnd(Y<ŋ,![{uY k[M $sh7a\MQbJnHr)A#(3Fo q`۲TgBb*+.1&Y2iG ^q e@  n;L.8Ȧ;W* o>YwI>0F"胜uGeOrǽa5MG_bV u*tGhbN*{Ma!h'JF6FMGHcg3Ņ:^F6As{TXbҰ/dBURW1 -1fN$M־NP~nĀFq پP˿WhE_̭0`$1-b);^y$Y;w!5O?ܵa# ԡQ"% IҗTQ 5;Je;:K:1.Z&(sCĈGT7.ѸDUd~'L ԷL,R+ha! ՁIt,kƕ -␜|:erH^owVDP6 [tC^ :1ãꔱƼϾ L6+8vhb"7ph9LV_ 3rHV)r[ ֢^FT1*_j{x(_\ZbusuRoUzC)ٟyH8LT&A^fg?|?|?|Dzpcn)nC t 'qMg*ih& s:ag4fB|lM m.XF6F=PKi!5#Dƨוޤ\7y{C#59osݽb~D۔5").%8VZTmIdNkUt)qde6%&Vb6n4ي*.ir&}G<> 9$vֆ Mz*YDŽ`M$^ԛ F$)JHr<7HeEfbAj 8fK#oJ@ȝm0]R#gͫCJBxc-zfCQŸN6ɬYh;b0GޱJ* _ Kz[S#m@Q¶a?R&g hm#:{oԆ9穖;vi51;ք^G H8+#&QB d*bp8qW^DGApG0 N{f--tMq녾:壘?_p4nty2e20 -%"hBO{ܦև##|+umaŊ*?T@YuN?~K/}'?EQ5 rtH%6-/$5!G!.<@΃߬$>`|8hZI";ԑiӴS]NK~F9VfZ4Ĝ.yF(3FsDڛx(6 1LIM9|NbM:R)xu枡H-v(,!קSWtqJeÐI'ç"ɯ.kLK2Ŕˁ=|;MA '~~alR+ ǟ8[融 c9I@,//|oӿiːe;+tXI(Cw7a׆3$myU=Do%7үJF%]K ux1%8\p?z3Iv%Z]:p'HOb4CYEBnG ̢ C ilawĆ6f*rWRgE)SGæoE;VńQ=2 C-a.q庹Tac _ rx/Jʛ"sjz뢓 MNd޾8YI {Hdh;ͲdAObՑnR &^[\jn`Ex-UGf{ ʻxp%do/M+ T8;K?%2Dz{RD{M6_HBRPn[wmYjWO0cg,[ . }vop1Fɓ phDŃms)oc>?-C7i6l!R|[,AB2 WLv#a A5 LΟ@H ` $n>&>%å tE3ﱥ}!'xilQ>#Ď˔(&eBXA`?d?d?dDzg4_C TiM{0AH'L9X [X \D?۝73o1:ql'/~LB? 19tȆu; A Mjt[?;,(AEh$P'0ZU[ :'az+yM 珼3E HxEnX}܆饗Sk 9%iT h xx27$Cv4<OBέfAMOfʋDjdtn g-e$c/KTKdaSЏ_G,`m%!I1[ g l-h 2 fp>;2J#RT2]&q^đ [ -&yқ+gd9/foKTJMRh,)OLeêlXf 2SFܬZtuN l -3@.i[j`bX5|?+Di,GB"` kBf!z=ANKoc9TZ awy$}tVC XHeSaFnD> M3?Lat}h'Uo,9ll9 -6JR|'[#$i!/t.4cF߿JOwJEΫj+""X^7y-s|V >G&CT,]f遢^I3A$ R4&{N軛q:kZpuKS 걼%U.a"4K<"h%qr$4 $SItR0Vܛ{M>u3+K,8} B9!fC)7򫐃JB8Fa'usn,|_g1(pDT6|bAdQs)Vd0Q'=t0'e࢙2_?ogtEQ\<7Xd·X7r{}>լ V7^w=}X^aN )@ [I_][y;6xk7HZŬdl ʰ5Wd߮BGF:1P`g4e~YW\}? +5`)XK8>!ub=y=o j$Me6_>tӟ^h $;B|?8EZ=M9]*Rj1wUtw:ru o5!ZI9;6d\[:|;47K\2e{_0U)6~EM(jWqrTz|nm3D*o+M^B SWϬ6 ;*x6 pu!yN[5gx!8SPeo}$,v!?8UlR2;ȩJIDn%muNP̭Ñrm(JYK<Ѣ&XTZ3[ Fb֠R3˵:Ƅ<| DvF܌d^A atKݠt" l,pB̞-]H.x 9U3є 1`kl_^ \AˊXb ^},I~ZM_ZpAEp1@oU/Q3hF):f M<6X/h$O^_&M e<=l 8ǻHa$'BԐucAa???Dz5\BЈ-yA`'Z~Eq2i àey éZli ϒ1@ro뼌n>@͍ Y-wnmGku@U .&tFf(*Ю 33ȨSdADOٸBKwi;WBF{-=Ȧ Llb E Ծšk G$'p֧ОZyZɅ6W!'\qèH_Im6Y8 INcpq " דZٻԘAK,_-QygC9+>,#c; pCk~L$ϨA.!Jwz VNM] UQʿx`Ͻ6 `^ij@Y2HT`HsC;fLyt/mԸ|%1&Ը]nr@O@hL{$ d[+s{uz}mos^3md΍0Xx*'_л%'9rw>m!~W 7*`Gcaj އʢp7(m(tXg/Mme}lKZhL3S?&vaLiq*&J])"q ;5aCB T;> "2vkVV"WIф iOM un:VR:@G xudYtr~nV%BzD&c(0-_-RjJDh!e \ҭsUf>OQm=Ӆ tCdk6ػQI:yS.8@Han({|h\Ytl* Pg|8"T^"~&+{+fr `0AFгO%XGx۵(#Xy7AOQ?ɣ8 Ƭicji j3Uו&S։lH&J 2c իE46)YLo*AҭtRpifB&*&4שTʺS=D{DKK*Vyx*蕔+L)Rr4QE!5[GKn5g!*kKA*+[6eRy 1\i5_e"\&|f`v|[-_ $C8U S5X}0@~6&ͶPD\MڔP1*v1ETaYD=fW@v)a^鐡 3# NUJ͸iB~!/DO̮;2:i(";;B0?>c( ofؖh )gd/WHԞ/QR3"Ng_aaHӥr,Ac34?h?h?hDzqvJTCcЉ5J wk'술D ͶI,Г&zmVo©tS/M.> Ic l|8}q[+eq Υ5`;qEW0*c`YOǧۢ ,gSvz_)Z.&3Y NAG;/GԤ&yxU^Ca\CgJbaz؞{h@dq%O}, qu& Kq qM{dPuϜN(1PF^M!p $-&cq*ꍡNb^ڰL-N8ѥ#[UxQ !ɹ 4"J8[!sP*]!-&2?WJP|%6](d>-Zq`Ԟ& 8{[l.6x5іU5-h7?'#eɨebTȻ9(fN5G0u mՈl#_Gf{BopkΙtd#1ҍ.[[sH +-~Q..g,O‘v* t}k(o·1Q* PO (XXMe~?7Tn`B4oPVQ #}L?zVwXYZp~֐b`&^HXٞFK;,Iˌ^%+D%Co}LqlQ@Ӭ Ӓ$yYEB:CDU{:6|Xf@-JHu,Z"dhDF"OQ%|2{7:_(U[y#Py 0/A$Jx* 9 0)rXyETM_𴊕gF&68kD bkU2BmUSW`}]w)kg%7R6a/k.8sS_h$քi|u6E9 `X %+.)&`aU# \HOC  > tf`>_nx~MASAMqoybZ5+̤ڧ{ XqoML7"7+qY2mfxl7~,"̂)7v3<6 >d*7i#Rw8lw]#)DRUg`2*: 3(aNoX/~sV$;g[㧟44lrf瀪;J&% 'Nr&O,QE}tٛީ5+XLHS;eqULt;g~Ecr^\&@; C_%W̓/B6e|S&*xĆ$(!}f'|v(S΁Ǽ*s_Zhel[ML-~e&RP d-{ANuX j mH$@X16_ tnREa]O!l伪f(r\թch偵Wοx_ =,9} HGxqłz @@qL6KuJ3uQg DK2br_uJ*Y  _d~ۢ鹅-WbTX>&[4{]4xJN-ϑLgHUҼ`Gf4dy$ƍ'msr6~_,+[86qXo|Ø]QfjHI، RbcL rg$ϝ./s=.e%< =bAd???DzusWC5֊#EQRs3'_=HsD3Z]LMwO">[꽗G1ǫa(CAo'G CpK`͌"cq odG 8E%Tk[!N^ qeetFuǹF5# Qy}Jd$$`}IOZoaW\@PKW) Sl rasR ,UY>!5<{2bH^*lټ)1!dg|IcZ_DmGVځoTfX`#UhC9Q~xtx0>ĒA; N =ȇ`EAE7 $bP"/G Ͻ?\W.*b?q@(4.)4:B\«D~5N$_T5f7-#\7+-qesB0xbMkq#ux>'H& %h[ֽu61\ dD q[&:XVƀO9G>DwO*ɏ< O}c_-p(b:Ç꾰q.2>UGsWǷJ TMj(fDxdŰ$8lvvkCJf"BYۄ 1E'] H''l{KRJ'Fɍ~[c&O0JXUikXo(>WxT썲 9幱cxaZEq@mqRO[jǭSpU_; cѠ8`"&~Đ;BFwDBE[{ÅnMJF1t jEA#Ո ~*݂Vn;{/ʞj:5 ?6dMD-fJ~ uhXl.kUSLb[:eif$܂Rօ(bQV BE۞ȵu۹?PI pT鯒g8Ӈd24y2?bg=pP4 xKP ,&PˣRb&¤OEO9,OQ/=֐diZj0SL S>IpG-N"?@xycy!Bjw?t+L?T4+ϸ[Iay#j_c/P&'#o""p/BBS뿱@ Affg???Dzln|'kRC[ƊqI{2v2#B" HG=Џ&C(DKŪD7]|)<Fh/IOUw/Mlq6ૢ^?glR" ~) ͏] Hy:aVxHrTZz"5X1ȼѤeK9I>e!C?/ ]ZkS2N1P8Ɉ SwcT&|`5FZ+Z|xqD@`<>,t:!Ĥ^dCBoqz%ToCu Cý[Y q'O/Z|K'7іRnwn@c H:̺N!{.-H7%9`f?^l{PjZ} 6*- z4rKr'; r$N7uGK?HMpWr'XW!voj2^ڦ)LYګˌxBkir(ؠ!ހ[Na8fIB慚VOA@K SC,zLYat䦐V~'x ~Я%$B,`ߑLVc`gd+P·n)tI5+*)!0t8$c^ke$%lGO_ a՝ܟom^k⥘xFb+0K,":qmvd{BP Os"C(n>-ϊ{_ʆਈtG b;ZO eAz{jޙX w] w|clߣL%tMN{Kr{~|d!2܉g5D&mydWm~Fë2]%I`6,Mnbk!N>$< ȧgN 9CXٟpo.q)Fi̶␉Du=0nzǯ ԥȆcsZxk{zl*ͧ)asLsaWj +!Jf֪%phlt \ fc<: $vD&˳,6GB;9YtyAD8>w)룚840fhwUKONuVo8f7"|90+0h?0_E^.0g"+ smF21DQ~C, C^%T=k@ʶݤg3rf0]R!sԁ\J(KNR NV 5'yC g+Xnީ2SHRUX :#++M z;TS(N8:i^yrJ&LhW(reIaF=v1{z'F{flD^-%d^>)z6J LY9DƒDAb39@maP]L*glƜwͺdK CĜkR*$d&v bؔ)cQլ q[HmѨ ψcYDG?;9SXL 1$t܄T6%Bߑ3+ xaEpOVi!c*0{SϷMrhDgǡXf-N =\/w5a/ KpN;6H(u'<EgtRAh?#?#?#Dz}DOBlʊdzuRyu1Y cocBZq^D4 %4Iծgpb >D@: ʀ-= [M|7Yӯx͙:AD nx1dT{gzV@. >, 9y水xc' "~Lʍ$Eޅbi9!7i,V#q\_ sXH1D}V+q%gT$&I<@LNb{tPZTUxe= jfS`IǷap hÇ""d@!tqzq@zI?aNWm6xk@QJ{% Z.: {Q~sY 4(~uviVr7,q22N/(jZqN!Hݡw詴m/rf3Fz WjMjD/ZBQG?D;atRY2Ͻіnk1wL0 iT $e%/,(,\7l~"V|:C _˳6]+"ENc_>|f pXs=Js77{G|oJ9C0nN3fsLiz~#J=З@Cܚ&$½KY,TUbUt2O7|Ƈr_% `^G[7 ѣiּ2՗yn,(%ٽ!pm8,.,#X&{ڊcE"aq#jn|ą~'W jyE>r$* v)HJhUD 4oa 6umO9Ȇ $չ)`~5tZ~45"_Jx_fJl)~9.\B}bUH#WcmU1OSBܡ`FE)ӳJ4ٞyh;jN09K|m!KߥqRLوn QE/x]+Q.62ej 2L\Wa(8R:Zp(9փ#xt+ECPfDIapm_}\oؘJN|jlםYe\emvčybpb򧉮eRt XiZsBZȵÆ^=0C^fuD’]-$ya@9n&1qM| K:Sԏ!FSc8}R7۰^=A[-Ϋ:Ebf0.7 t`Xu&q2KkBdp튐l9'>[0%]J]{lV࠵M!0XFmF2$!xEޢ5|>ǀ>(#%D Ǯmfk򒀋щ ˆ46FL*\ȒЂj3 u-j ~qD,ONhE1qY0.FMmf1+G {eZAi?t0?t0?t0Dzzu~r.FC0-7q Bq`]^PlM݁D] g%Ro\)SrN Ϭn3zݴuFˎ۶b?wQ-ZHG*x`wp9(Ahw W]{8hFo؍ 6bJzsWĦ7 <[4|:@Rh0ug߆f. b. m2=Ҡ16 v,mF;]=Kxx9P2R,,ѱ԰0\ÄᅿWܾX7VlsI2nKH$RRt󴾿AQ*RL~7Ml㱍 +,MV,Bhoa^1$NWv:4ld2'K)H9XG:8P&[iE5$ a-8TSljrue0UfL lbkv @7UED9vvpA6 QiXj7p ,(>2L<"S Ju if?vD5O-ܬ H+]81!ËFHz&'h䱦ïߴ/N\A1[vLiI1 3 nɟlHU[+.Ua#r@U)_Inпƨ6 Wn*+<PSɪǃy_\z R $/ |SOZTd p1Y燂܊ `;'ًNe_n|tͬ6w:ˇw'ځԫ7Λ97H$کzĪ_}RFfA T+"<% ~J5iFMNtσT=~kPElH$. f5}^^Yr[ěsVlR_g~BQ{PA!s"8bKK5bڼnʠ_ Xg8ӫףã4|(U#g~bjWrYE}4V^FG@ Ȍˁft@I<&E#ǟYhV#=aV\ˬ>xP 1EϪV"ji@M>@N2n6%؍"*6'QN{G!#`$gWF!4ژ>VŔI 8>7<0 ﳺ47u@r"$p Ǭ@'XXcOڴ&lW|C2D. Dzݮ%BSW+SQ*4s3Bڼ'8}|×S$rȚQʫR-rT̥۠^(zJ?옏Լ*f;(~ u**U/ٓɗ]cF# B Z (CI9 Rmn<4R@QD{Ye 9b%wy¿XC*e(LD!m[[}I6 NڪԫB`pc\iqq 8ǻe`u<3-5m)]E$S*~50Y؄彻^ԾS-oL41yhͺ`R7!qMf]Dyy\6qpu)uu 3o N_N+:(]KV(RfèC4Jн}/Ο0Boꩡ2N/! k@R.vN)5W%tB$Ͼrx@l8;ġWiP8b$A-ϲMR/E!j`3Z[@wAuV.2LeɂBxhGܰXzf0`u``ȧZ$u1( tY )7/|Xx,g(V/AL?ՋeאC?#ox(>TTe{/H,՘3K5_$;H0G8RGQXa#t7"˄HG JR\{G$I6*+VL=֮D ];m4veZ:>A=.?/+6`~nډ2=%8[ʗ_F@"IyK˧bf^jޞHƳbNkhƹ^%*g-ê0zilZ6ILj?/V^*B!yTav%Z6UDphPAl???Dz~g|ACpv s{12z%5@)S*aA*0巤b;p:L}> (`_ lCY/Bg/wf$uxdL\U䪰]oqglv6u&A/CwdDm\ D~Ì3lH5ϲ$/IVs,џ*1(8ӔI)1!b'^({bwA21BO!gNhAe|'k͂`+xYxL~T $O!@ JbDbYs~Si֬+=(IPq=|7Z/Q_hiE [| [q*0է #Exg>xkHUKR5w[b''clޜ_\ [ o[L5x~4畉]=[Xd]?pOz[x=V0´>ٝwaT޳?-u:ھ_b1Rẇ7(u~M\ڵTvCfJJ:44椰~v:bȞT*R;%!\C"dUWag|IͥR(xd13tֻ; 0Գ(.EknL鰃ܠ3Aj/z7>Diq tXR_N f~PmnDĸKlW`( KKQƮ2M hu+p!qW<9l}.j/]MA58RN7]kp&ygG& t[ K&vhТ \ @y!y>D٧w\wCeVJ.kM'!k(' 5oARɬ}I93UBCeQ -NˑWo4A̧~蠔cc (Ύb?aQQN1s1uݯ~Мrj(єH E{{EQpBV;V&$;*f$}ĥ|R7.fdxbfFVkq,?˲H$3 ެ~(3-RL/Z0B"}ьLmA?Mbx3;2Q36_(km39dV"5 ?A%xCJTRުΪ$ks> #-L#0謎/b'k L}Ƃb(7kOsm {DB':.$q Ó񍴄OP+ˠع]A얐5<~L- %l^=V 8;$e؍E(HɄ1qH6Ve;xqu) âo?mdAOW/6XE҃.PjVk @tTHKZnɤߤDw.Q]Vr (N\@Xl)C28Ⴢ`OTJ^%:!Ņivq׫ámIuADn7 2rف)h'}tJ"ÈD}?zAQ5^t ^{!rE,梒i];ش) T6qF~ p]B4_?.cQ,J\$SVlx8uYAPV5U<asy9U@R0zJ/J$졔jZ|vV-R05h}<,6NX0_E=.&J W'b.<;z֡s#L[pAǥPEPnƆ׏+|x!yQF2?*rr^kZDX̖U䪭^7 9 :o9rYY X8f1tTW՜O2lTN90U㴡hyWb)|̀j{.Y[rǥV~$5U &抳ec)[zF_bWT?Ώ.wkSNz^>F?.$YWIi4jMl؃{J]g;m18I$b EyImӆTj5'PcA"|=46Z-RFF:Mm3!Wobz¿Vg](J'^5)Oӧ!.of (B\H|qgn+iuNS5|DKo.eۣS̱ 0y mc G焿еrh:Z<I}yalCY` X:K;οg҉ 䦅-LtOa%= `WY"pLŖҤj,؊xB,F0ϙƊ1B(Qf,Nߞ(Y 2y!C}X/@l>> R [al ب4p |Ÿ}n΢@b(mcĦ/Ԓဳ^/ y_ D\6lsBvF}[=o;. T4Bhh"ZRxkd%xR-^/DtRBh]oy\*DDCf7Luw`Wꢝa[癐Sp,0FYkyɃqk]HNOBA*,a-\02]E`nm' vz㑥DFOHVh׉)QSpJSJԡ>-ȽR[+׫N/C(n%=V~W*:BB"#m6qaw+!c4dG$d߯\{bW"ӂt%THTOչ^`zةv}sIܻ|kS$_0™aB`T֜E׬ze;b&&D\[!sC PU֊1#CF(o;7 DgORnLdT,$)TfMaaՊ W_ x}Z~!Z pg'AGR쫖(0疗}A #rIw1,3"Q;uy=5&$ja$%#`ʯx3* x1rWK6;"iP1Ƙnk}r6s ڕ:Ɓܳ:& DxI !0L)=2٢ƶ|BRD)84m$2iz|?[-5W5c/Ravz|#XrHQ#UPYVS=*$|㸵GBƌy*/rr=Ed//71~}ȋs|e#uR~ڦ ޷:MQntp56_z bB*}(L'?;Hxأ xyɵ] OLn)+ -!91BxXɵnUZx^65 f]>tŘsMiv5,6FnV̂lN͢r*MiF Z}hD9q@:5ě5S<\ A"m>>#:^L< Uz sR/J*Gc1b 0ԿZUg*0Xs˯<6HTJ~qkӑyjŽV 'Q$/EmSOPNNK u5͘hX67WiWE—xgGZȚЧMɉ.2vT)C=($ p > 4x4+ߤ>3ƻ!CeQ0PdT>üD|j',ٱ|~N&]y|b"wI(9̐Gƒ7_.OHW=!c/|BABpW<]G M+:>V=2Mբ̄̆7{Lp=n1%NuG/ST,Z ]WL y:Bao@uKrʄ@y>Is}i'q.&kze Rq`ndqZzx+L'].#-w)RS~Aq???Dz"gUI\tR8dnz)9DH \GۭC̈>ȴt:bBg8tlBccPK+.=vʋ$$^8IZuy>I+fϤ,~`$xҫ~9h%L;xIx Hu?Z6ETP,J'˼fa;ks CVzkuEZDZ'O:No$.[[3(z9Z R{\}1\\s*=U 6`3h&\:ox9p0JXUƊQ9r,ūn)Q( x~FP!Ni~N#Xe ѸDVX!i6By&*g-IxUE6PGx0egέlwah}e"AِxY<0Z>^e2jχ8ks;,b w~\ ]nDY@<\>+4cN\sN|J@ٽ,4XzV'y7QBb!.1jؖ lSx~t9J*Kk`K4ø,pI{u\A6רʹWoatGT81ЌH62,'"xRDqwX%)AZ&X\gj 鳰+f_@fR{Si& .[ ;hB;4o{|*,1Ь,MTpQxd1HJ@a769MZPz2\i(@tv&=5auBf'(* MIOR9K ?bt &64Fc}OG#'mSϔA PԘ {_ t e(.]<4^ʲ|bҺ|M G\FdV46z4a?6d:?9Y8󒺴,H5EqKEi4\*$׾X?\LqQѰᔜ x[:N VGGx-#K  2[V X?GKoV<+^ TS0,tZn" 0lDM5h ר_x`0;_4AлyE&jA+XׯתZV"2ҪR+FcA>R Y5~ܶafǰoǓf+)}m9N+u9 eV."- :{NR"ȣ_H;?~ckBIO8As34?o?o?oDz|ՉLBuTIuϰt(lڋH^WGƣ8$u#v`w?Ñi6[X!+ ܀!ӖڑЄf\oy 5ʰn;~@eHAQ8LBdͷ{@"!dv̓:x$8V"i!I40I"{Dt]aC! j5ht"'7qґvtr1x` Ht]/A:@c7zzvҩs#_Lx 0R `ٕ4vCRnn^R;a)vr iz4d+g`i`mv7|q;mf0^t_E\4}3pk>)ݽƪN6j,~G z~ 8S yՁRjAYj15t@R`H+TkMs(hL0 ]Wp2l뒙xYΪ;J$pAdueI莻LSߚ5`a+Vvi&So @ [ǮS)4s H4 Q<>_IYu2ggrt)u[ ՘\>w⸨viO~|Eqb7}㥮p aܕxYZ XqNT~'k)|S84XOMw\ҹ7 C7ZlUF$,Ͱe@VoHӎ7B_" {L8CNBJXTj!}3xXяݙ*=CSKk),q%7giEf2'Y @A#v5ԃGl:?)z4 c_,z3i(x ^ 1"2c/BBLFߪܐ3ɩP̴38&"(;Cء#_4ak ʀ#_,)@[F)HcZ6m57@3:/k!QR̚L6\4H )EFGjIa -9'AtN\QjTג-ivX9&le&1IS$BFd0&o֝f0]!շAt.eH.4t=9qEępY NA\Jړ6őj6Ewƈќ!Q)♠xr@hބW$e@SuKT=f9vŜ.A^AZ73[e$B$E.ʕ_hLj,3.:-QԕO۫XU&|^1T[ gjNt2t Yȳ+@3pa'ݲJ@yyp5$.sPExd_IA2Ѵᓿ7CUQ1HfKݔ%Au')-\)%1MAG[.!OSD&҃ rHː/~n0#҈ÒPjdEa--lj~X9G`IK$g)"aq;&e9͊}wPr$jSc9_f45є'H*uP>4OR/X^jE1 %\9#'>592L1'RT#{hP xu?{OuGq"Fyun*Nw8ko j=DR"⥋˄$#k?rp aNn^ƑܼTPp2bc d{aiְȦ5F*2k(^M{;F.j`ӌYc^YbemX&[ݷ9Z+x\|֢X,W7R1&%'tFOM?H e!~iЮ;TľcyۉL3)M B@U"ӳY;pX(˽lyc崙Ⱥ<K.J(B zÌ韀KaC\RHOH6+`?v)w$쌴]ƭDЦ}-+}kFfl)lkQҦS%J;Nq_jHs{mz$]{ƒyڴ?ʂejF@g4dk#)aex'|)) %J@xvvWǽ/fxNI;HBVw(kp! u>\77 Ll78vJ}<*L.cꞫX_$)Aˍj@&u%_|E ^3F=Yl uqƘ v>!P3j؈RY( L~Y7.6׈ĊD2YQ]qZ0D%[~\f#OφFfA4阖Y$t13CB9I}=w?vv!E ANU݁Hm6GdJ֔8~u}֮L݌i&{9L:8+Hڦj?h`؛bSJbk,xjv69?iD[9c\ޢ/j>e)M*o+<Avfg???Dz|KLHBVa6v4SO"&JrL ]0܆D@,MS+ 儿AiR_2Ijt/GWQ@@|C[|:4:n7߆9MP짛j̃9?Y1H熏VN@i @a|) xΥ?3ArE\hJxpD`S"Ƹ /2ӂzfHШ,.( "m@9m8J7EIjEw,e^݌='[d:%\)ʋI+ Ǧa-þu5zpHL,LC*$^|ؒRs|w5FE;|*m(+y; ;䄳`bhEݑۧO XF]DsO< 2j68.D[z٘qUiI#U~PJޯ\d}q%γ.]铿Bx L:r2g>Ė/NH5 ƣ*9G.ԇ~̾%` 'NL)i(/CdEmmyL|'% \B߆ڭN|bZ!+"LZtR[YVu~n6 6#nQPelc6n"SXB{䉧˥Ҵ;˹+NЈF黟~yDtx 6ؠRiw~)jf&#oMz dZx,^lK-\~ǒeJ X~e cp3BZq:·Х4'c}lޗ0Vw)\VFtNÜ$hT[^g//ϲ\]|\Xb+!ĥ}!r5|M|mR¥DK+Ҭ̤K;,/: ݉:Ҳ̝ R ϱ6pkmN>MrWYV܅|3D[E$3k3&DRƯw|Az3ٕ0 meֺdH!8fi/&28[vĥU3-'J[k@iA[#̯1C8X8׃ N lbL[WGbhB X 5Dkz|X@G;ՃI%e`UTkQt>&Qk4MJDn) T_ #"H0 5ݗ][?cx a# Iݺ $u,5"ڲXbw(Ed.%)N(NU;N+.`W=)gpH_HFmmA~td_.`QH)2'BY'1v4E]fG₽ލ0Z݀钀,.kxY&KA7:ɬ6ryT:=ގ/,UC<͋P)vddV a5oaH.c"txQ`BLp րb99]d IMlU%vAWڅ;]S mAI5H蚏yi8z`HOUuп oqZ]V;YK\?RZ>I*B&/XC5AĜ4N V=N̑ I0(qa1 S.r@n el*@ O[5#Ba=ƂWdC9k\z' ,Iɴ#`!A({_IH&,>1|\]fmh'Nyy $G1$=Tu0 NhZFcl#aQ1I e-ן! F(&ΛƤC%ş =v y`z~G|hW+Ig&hS\ %Y r8 +#L#'fau@FAx?(%?(%?(%Dz}ȏKBsݩ) tr͐#KYqaO2;%Z=Ƅ-֦a,ysȀׁʹkuFuNaNW߰)u€sJӼy @h "!.K kZ l#jOd=)uGhK${7,){Jmk6,lvlJpŐ݊"n"Y z|[}GFlڢB +D+9&j$M,x H6LeV1P曁ŲP)KEXNәIEȓ(kNc+A=z В#ffᇋ4]8.):KѧW%Jȍs5ɸJj$|MXsY-a(o,VMIiL8E4g~FmӘ)0ʊq]yus%ۤs\v|RIʄ9qHx:*(n .>>Nb` WOrZjm-_ !xz}*{Yy.:d #|;"QN z!광J\B`*a%ro7u-*/M^VipU3bvkRHIf[taH8!{_z-e x_ [m6ng^- ɯj$RMg'Ư&f[B9MfsidСj pym#f̀2@߬Ʋ3O~Sm{xF`'CT)s6H,j'v~*'KenZOU5/4Tmִ/LpP,оNү)9~|T— >zǏ%I*8$'G~}K{̙$PMP4.`6F)08z"ȭXu`.$\*$dͼlM/nҒtiYczIhq$\ƈ5(޵-q[-P2jʲz ?f1*Cfwo4}̎a=EjfrЗ,7N.SP:dRIil|r8@xPj"$VJא0V^|.?fHb_H2h$7jΑU}A6{'\)qR:/Aq@X1O NNLL/ۂ{alQRn5|hkETX5jqXqV$ɩp4g{]t bd)Uld tD=U:eҚsn `ޯ)D;5hL^~nU`*#4  qW5lVT KY<̤L@Z=Kl@F~Q=5R:1D3GߧX%bYetg I#40>y<3 YK{B XԙgVK &16߃_ք(ڿy i>$d&iMK,7`C_*=36q+ 8TALnC4cV2yrEJU"`ؚU3eo yH&6icy$Χ 'ap *!$<ѐҭ"29* DQHF˻7 c3yr㎽ }e/CaF@ 9>q{?܂>{j͑p&˜n=NZM'.ۦ >΍:.yW i4W xAy?|?|?|DzogwHCBt)!|ptR@+%CyTݝk,F#laj!~n"1&~=Jz Ja4}]ʑ=:zH -} - wkx@/ǿ/̔>bi.W){)Լb8>']El q- , EI5rxirgH'D4`+Z< |:Α.(ҎR3m*CJڭa3Z!L:Y t'b~+4Ɔ-O\d7Ql'05<2V{M籠2_v$(:d]f,jJG)GF*q)`5k,2+XVkHAXW3Yb.ۆdE \dG'A"cZNk ůʜ"@'֎GPD.m\6WUA ^g܂My/{HH)|"JCzhnR犫b$kDPÏ8\ m>j+.-T쎗DQ1z3DMES鷚^x˚:2~ïhOV~9?%|]Ȟ.lGcvB+QjF8)ڼ6n#y k_j?I*ȩhBlh&uej[jvp \|S '4ϋElB†.|XUkEN΋~[h#QaDعȨ妢KA"8=դs %hôxAu։ѯP105@ʵV <_S˒h&ǙT)2x?.bx' *[#%,L_8idЬ :Yb4 :ȥ J׹f#>45ܫFJ#'uB. ^5X.?DtsKaYe^nN &]kلҳ wϔ@Ѱ9D@T9]\|KxaہĐ:&*O-A'n$F :)mЦy5:ՀgvLn&p$>gb1+xS.Fp# \5Tj% N@],|WQ20)\|!V7[˜ Zbnl* 8t47 toűy/I^ t0`;9^ OXg8p$q/:ЛGEqYd Sm ۸LG%s0UMʪGŶXpi`)'G]*9% M טFrpB۷td@S'C9;C蠕`;?/ A6ߒnq1ƄOKP#L6LlEкK`*K;O:R5+NKLiV}("g#$Ng'ysA{34??????Dzz{iWAC^Ȓ&!tu޵`"ekbA7ʋL)Or`#,D{NM:t IVxz,.;MvZ&] W<6/PaO $S_%{p' HT8_c&:5h_`!I9&#-lH$0avPIBf缼t2:4 HLSXbUrMΘ\up*%uRz`ݨ¦ˇ8p-7#R*TA5`Ry=4Sum{ R/P# ӪP~`޲Z%pe&j/B30}ȓBLϜqRI2@:R4tOj$#9pvi$]ن&^en'}OEMҾ>)"?w [T'>΋nduc&:\8j'dƊ7NΎ|^E'gUu|/Z8).iŚA1ڡI8XYʼ|4)jZV @ژ*BFCyE.fmLYV^94,~&0+K&$+юk{!X|gV!մxW⬆M0ԆXCcDLN qf/DT]bcE+zc$3j D`'XKdHVu"LPǣ5mqQNEpSv/Ś3I"XZFmN?T)GQe-'3Mg&\5% NgN5LF7VvtHp#a'ˢ]"T>߀*pOO+L}WZA[m$1N*L<+n`O(8Anj`e|V[uЮ!4e-/L00NHlш]!T)~2z(FvϞ@ϓufM} #'#S dWoDakGkѧbVŗ `RtX12 ?F|Tq:DƠX"Zsu}t>;GA]& 2RFd7I-\9?if *k38{+2F.:nlէ$q( Se `?ZV;0t4rѹi6Zh,A1=Hl#GpP*) + Upj3~Jw!(΄ t8Po`k1={x\Ha:GH?lk攚EWAUPiB N\R ~XRv]C@'hFY^0o:AoO áGD8z "A(vL bKTߥq8?>.01HVIt*'D~![Qy ϝNa>Zڂ?VO`/ABh$8Sd'D6F-ւ`pi cЀCJNە˅ du]+QxXyT<(_('S u!$,Ԥewt2^YtC> OSO$M@bkɰr&F[SG0N%_" L 7nki[`lw9KS9oG2w̎@yQIqEl>rz)G(2"!6ǫH&&'lBoiD_bѨ!A|???Dz{dL>Bto ]{`.Nu>9 ^gpa}Q j+^/Z}gM,"Ta٘',Ċ(w)R Mbvb_x㈢'$NߚZ/--H5PvZjI)Jai^2x"!jSs>R6ιm3{HEad͘xQ)EQaX0A\YЙX^/8~JGYLXݯ ozfrMNֳҢ=~@eg&^6$(4 ,FmQFjsQxj&x̲7^,oT (k%'|R 10C%ꞎmm̼׆!&u뻇a—1c@xg S )Fތ OtMI#1|h+ejk(E"P}Cr )A h2$ v)AϢad/ʼ,xgFe*|+u4ʓ߉j!֏Uh)R5JI QϯTh췓?vwT݋Qb'ف^AvUt B׸[:"Ǚ$j-d>>F׫K3Z$}LsJb]EePwC 9,Ѳ\ p"־Ai+\-@"Б}K҂ͶqXo>[n3[Π.YcÑ'$WuPRĪ[ŊMx*ʍ-a3A q g7E}J_ uȏHM4g3f'} 95s>sKdvF5xc|5&h&>K c0yR&]S2#_~<>h1VUa ̤uI;*n>a'gKAŴ:"@|[+kPɸf'MvUx$>xy8p/Y1@Zy\ɫ,fD҄PQ Lϛv-?Ҳi<3o@pq^KaА7H!3tFtM c&`*  6rʎbCfo7Ή UqihEz ~/f`,}SPO~p5Uf 3) ZS~:L!]]yRaPjqm 5xߓJ6*-AY-4Z PY#: JmvJ-/pp;Ю&M{'ax2Ԋȓps-=LȄdKr|d8E~5ᦨס$f)ULI<ajϢԶ?MrǕrpyF@SJ.Êgn2,. H1?> P9q;ŬǻL6B%d[sExaR+뎷N*HRB 'L7{)"7 ܤLϤn8 >2# 2GDtv\ 5ֺYq@Maɰ"`YA)xSPJSlWہM O`yG#FKDWV%[qHS~T3yf|n;rɴa*uHGJߥm̉O)ϛ&:HR>>sHl}#`XN>lWZ?d"ekCtϨ'19CM*[~".m~0d)% 67 /QEr.;ulC>;gyE[ǣnyteZt 4y(oV͋!౴@A~fg???DzsxQ4MBʴ)6xsL!pl9g3Lm摉KЌ/Z4(JG̅pL} vg@xwC] {1GF g]j?a$Е+y9m!3YAdLbh;s V=K`T7*ݼ | RLMQh5S)ơ)C^uЅo(@$a `owL^`X >u/3-@:wŋ6RQ8(hf x9 aJ8J'ԣ!\̛U\kwH/A)e b SwreܚҚ}݂f /ZgMQQC~$d/z+ڒDaa( e'?"Ni`hKy*hw l 0pԼlz\_k%.Jz`x$>8ݞR&MX;k M*LiMNr^?Hns\†S.\fڬ5 LEos*DJFDmvzY7ޮt6 WYy֊R!i(M?rr *VxEvv.YP%k#jQUάBGV\8Q FJ~ڴ@IDX\܁çY M4cX9HE eijx*"1dVݶQf_>l]d:< lcpb>N1|iBe4Ψe=P |mK/WTc嘔" Ȯ@o9:noCA|q8F&:U })]Md[ΔbS`bQ̊mKD2Hs1in:wnE+XAGC B< yʌPgAq̔Pepx5 51@8LX Ћvj/@)[t18tJ#o=J5gFKFxOWˬXXsp0Ge"n yhxtBjTRG(Zɤq8` tc  --ݣ9d?~}d +`5£ `9mcaZ"6u#Ja..J|NqڏF)~_G!7Neb T ɤN.ɰiwYLάU)+͔ LSՌd,^kt ;'5bvO6aG%b-;]>Y Pç^qQ/1pbᤃt1梃a|P#!4˷$a.*O@Gcj8I9X bF|4bV9@ȍӵ.Z#^0A)NW4o(Y(@A?o?o?oDz\knVC$ב Oqncӊjf6gn/PC2R`Ӣ9ϕ B"rdHLU B+134HK,ᡮ؂V_K#ȮLc@̦̩jc!E>^.bK-LPws$b+߄E?O S` x:ZZM[^،,d@q*# WuZDX24}Rs 8J_>iX[N[*0aY H}IHKBdd0,At%oo:} &YV9.oD Sj&R^K>&CU΃P|ki2R}2=RJ3aiC8Kj|e|d%@UQ R[$n%1YG1)(H=Rat0)H/q#%oj$qI@!cLKc(1QlFlGa`"}{nu%%*.zY(u$8 [r@%|@)^ btbPܕ.yUœT@PXggKExۑ Q)S0uV|%:O;J i'r˖JF+~;儎 @*Fۢ%"W{#,Dc;9s;ȂKOK_ pɴj9>u(Bm6pH3f{xLF};T=T _KVbJ=XQ$WO0R:FMFfQ }/ҍg7d,c6;Qt<ч>Bi,dLeɢ3upa0HMEz.V0AItE!R{rP?Ja w !_S*6<<5q#9@ǒ|](R(TEGg(SeEq)]T? eLs/[>D$|#tk7dׅ+=H RX0Jeʑc1S pRr!!"Y]o$M./UJ֤'{; 8=m}ʪpPvtVf"EK*48Л5 müzGᕐOh8|L>'Ql>% b~gpϼ?x:(!`úpln2bئm*9zIdo-֋֌5>BX^&Ȅ &3t<)y={DtsT1vOPiu"X*DSPdK^V<~kҎtSirA???Dzo/ZBͨ3sgk­S$H-Nm&Ё%R _d^sizN̰~Dw[mxL}–v1vH&LCq+v fj)]O]ÒYNW*% #HdC"('IDr/87hHW!2RW?Q]Dn TC3.Rl[lA?1 8cMȊW;Hbh)(yr~}*I"-}lU_$θʮ` tT18slI_`BFynp5WM5t#hEljmtJ-vBٗcO@ bm2M-F)cG Qw ƂnZnwΫ.|UڛVN ,h1jlLǩAg*Wo r`•@\o.b6E?Z`aX|ȣ}#I.=H|@G 9C)Zi֯ f,x ̡cM} ;e.rtdi4mօ%KOTH$X-1J\v 9T9NAkSup~? HЪ`h\v0'Ycd?˖6.'ZC͖̎!Nb ن\Fʎ@nzNc.bpG<F}ϐ.oM,XV$%֪rj [Tᐡ4?_SuPi,#yG*+U2vL>4 m&8S@+*.0ݯ43sҲz Ԫk<姝kEJzMqN`5oz<^X? Qj'*oZHkEU$B>DA;cCeB0KoC{,OJE7L Pfh=O>#"a bϰlH+L(Kj ָHh㤯"=J1JW"XEpaZ/R0Y{>^ovJqDCJ&;.vՙ{LDH=X3 Vg",R'.ߋ+ L/|C&+Z 5#ً"KŻLgȚJ[s!$ev t6XWCJO)O3@8%'c~bR1O[WT1&"MihMO^CLygErYjxZcCzOC  $QwkRiֆ{IRXL1hxDb/I:dEw8G9HAS^FD(*8$ M1#4ة8 Ͼn"⎩zgű._o1^@$zo /ДG`ȟ5†*PnKY o!(#$ᦣ6~&N邱ֆNcJ鬏i5e%H\8@ְ316N`th5ZƉSVRC*TM+lhć+pn:n882rERw0tsDhX cZܐ LB}X+q?d3'\%2D.B4M|Vxkpo5 f1 VnyWźtxCw8$݊і܏ȆAKpw4(jV8@|NE0frJ8ڗ#kё,vEQ{}gM9 Qj, t^`< ÅMQr4шb=H|Vp-vmކԼJvJKI罊guՍ==~EQ T3>m=%oL1Z\jH6X̰*JXB-E1ۦVFpgXZ):sk4ž;EVAHVfaaz$K LLmāC4B=þ:ÉB*Ak)e`l=0p6igԼ1PXL[+ 6p=?\K݄=zpow-oD*qV=PElB"[Ac:8fkuSC\0m; o/>l'*=i-o@mq6+ 5 MkG?'vϢ͜3T+ͰWÃZLŤ&}9->Pap5/9MHѭ/Հ 5aN%ơ씁T`ӧ9$2`O@/f c]T$l4j$4>'G:),1i1\HfD NKHcVH-s"Iݬh7d32@QR۹Afg???DzRR_Bv 9yFHEI. v|Ndv2? yTpG/bA VN]>'ItpcP UZ p/?wuiBTAiM%9d =g\[lKfFa;uMsaU J.K/ۜh[I p}RoWQnU\4`=Kn|5Br$myk(nИFJrҀyexf%RxhԳn2ES1 ӵwHmOͯDKhs%E eV鮵Ü(:" uw.CYO րd_[6Ro*5ZhfK y47GC}{>sHS$\ݺt}, kɍ C9f 9f_D#޺Ȑ] F# )QRM|{[w] yBO1 @3'PSa]vQFܯօ#rNYeZ^ThW`;aaGQi+[iNp"GpkDRgfVZ*0:`pO֛Y[N7 ~/o[ibPJM͓$0i'ZJAtg+_pՈ6GJp '%G1t-C$sNLѩfX s%NbU,fr2ҴA ,ޔ3WAp|p<~vԶZQ@.f 9C|Т6s,DRSkC)$3\)Fua6pE@RJzjTQk,^ _Ⱥ]_F٪=g^ky, Vb_kL]¾`}zΖ;+Hjp8Raa}̔=$d4޲H$dNjWD9pV$Qr (1Ӑ=I&&i](5k[y>{-4#'QV:6ɲlREO X|Hh? jbedV}c(&]̩1?xS+-/.T&_KA[X=H5P]j{O?1~lhl©ʨB˵ZH> NI$eyE(: ^H@a0:@ kX)3'oMVHV/"6j|$=1Ebbb(cD+BuaiMʇ5ɺ܇Q|ʨR!aV`(p$L}mT_*Vs\uGl0"ˑh,B?`U *zk9֎%4&cBhuP(./]9aNJ>BNkxEIQo`nfB(8tD?O*XMpRSwQ+:N$6\.`t -Ϊ`Lpw4G} œ&Q-}Ry,Ѩ0K3'.OC SRҏn(:vHͲ&ؔr=H@u+ ']]HP @Q\ RRj~PД_\;9n‚O{jg&(Kr(.v)p3F5+ sh w<$;7_˚9;?ϛku-F,5<V+bRQe2E~s4erVyBLPM9Sau(tArݚҝa9ZK{izzψ`Jr{σ`M<=p|8PXBpDQpcz|>S'l5+I $_.O W\Y|d-|),Q|f!E?D?.iln'[SK-BXaMGFܻ3mF?8 x*,Z'L|OeFշ)ȗk=22 u{tUf3B9!#:L}AerS® ZTb6Oe_]VŔH k6P"|KGܭJɞ2 2KA~ƿ ,'f'rK5NA~4SWnʾffeY SqBHgZTh>;NUa'| A%~xw&s;)2y)3WE֜Yzov`zb97a=Ks(cKD dr駽U!|/$=K*P2e଩ablUPWP IL#SL7PHm 4(ʦ'\)ݪF;ɐjG99 tDmj)i]@4>0qB*FUݠչZ8b)W =K@QW;e֪6j,qW:ť{utU H"ؗyReN}7*MYl"rl%V0}+l#ʰ' 5J0/~y[V8 }i j&f8y+T( DUdI,J aվdJeRye3ײ z$5lr'6>Fhc/8w#V<ҏ. :A?a?a?aDz}vibCG/fE0ֺyrvaZ`F.Ek Ě65e@)wb+-ﶉuzjNb HC$P Z_^Dl6Gn H BWM LcȽ O$UI%֞OG^$\w&{ҷo ͅ(y@%(\#9\{X`m&0_PH1>(k'Makذ0; 9]J3玀t;ڃWE@TEbGN9#CBurO'Oki,:B%j`j.]D;)H°LVԊB!SMzB$uO %llA7o`ŕiQu}h_N"lNNbe~~i٣oO>7<]+ftHBnZ=5b p4- h4f:'u")]w]h_m'WYت"PQ$Oth؏m ډAx= Gi=hhAe>](bæM=ӊC5(K_)(’J4JJ;cU.̊&@Ǡ d/6m5a'q4Hv1.~"O()yJ)W,UH]2-UHV^*aDkr\ēh,kG ^,9ƴ@s̈́fA!)+G(W@6'C*eK(;];H r0sx:lS %k固ɐla_0WN,1[WP/5ڿ,da~~Tt}]!fϚaD^ gr0N ,\Z$ˎF}&ccV철P"HÑwdLl$* Px$sD~.r~Jk{?Σ4p;FzO42 OlRtQo>'*O#iM9!-B"Sɾw? J-$o&4V\elFID\;p@VFSFũx޶ Vo9DG=" z6o(IhU;vv৊Da*(CjQtJu^XFtоE!B*X#U>XrBmXw+ 2MHR7(f@a2MTPw0"Z]08w-ev5XyHg?fc7M:vp*1tz &'C|x%'""nhJsR+ {yfZnCCقki#RVL$np->}qLf~Xrs@],=*RDxppLlw/DQ ̛ysP_{uQXk=.ӊ; ̮]ktxji{bNn+PS>eYB(c$vq;ϗϦt LJ DD4-ԅN*Vr̎\F=`ϨZjGVnub5PKhq^֮^R~.Qyr^ ųu*؜ߟCKULyx+KCxJ!d[}K*2U)AYZ?:xD/޸bpr)Qpf3Űj 0R0Y"h99 41F8,61Y {2{1f4L#;ؗI"k8x`c "tL@u$Pe0P;bm,ƼvP5A{b;>Z8SyK.9,Ncy~l\"\vEp՟w`bu=5m\TOidhDYIB"o5eJ!cLsVs)֦|$&vO1ɘ gA^ ͉ и,LJvr֝pL|G<̎*Nw"* ~Ė1J GzQpDLؾ<|V2 %*ؾHC"wog4 ,czma QJ!t&uOÌ[r2tU nE契ahWXJԫ8x΃hI,* d 4l7g"ޠ$ؙrJZtK)Z6%qfB2 KFsj^I9:>Cnݹ(:s@PIM. ((cv퀄{/SGDvSnߥ1Z) l.'@E_zmJFC3g'% !8dr誤U%_ԧ\_m}KԕvK;oJrBm0GAHK亗fnV/g ,wg5njݡQ'k\vPi\ 5"l砜a$o?U" *JV9*6uLY~oܿMi`{2!%'d^>_Y$&KĶ~FAG5lj#g[BWM'<V|bc{{&*)rJ}&M|3:>SMlr/exP!fh&_hk uKcǻCHp9hP[۷VXIY7Wdl.!^b*K &T1ZvDb e3Co9 XL~S:a-NQ)KnW1~z;Jr We p/ %GtLl=˚PiR~ֱ *iob[d7P˙qژ`kCp)!HSh^?L%xf?TKj b v`?J4s^3y4ơysEL9.2seVDU{1B{FQlp)nSi[7Js_ɓų㷓`_*{ǙNNR431?, !5%O,y)#@<NQF@@/Akjq$V8|Wa.Li9KU-p/kF ~:^B,Z0aSc5~+qtl*JY<l0TW6dfRRm9p ] 63D.je.(]ɬL(EIۮaghx$-(NKh4 w$` X^֤.ioqo!m$NA`d Org/`!v+e^w!eɋzG\- jRwgܢSmYv"+kjg]{-zj*#'8XG-ާ P3r% je! ^J2yݛc"k8Ȱu9ŗ%i)0=n5bgw*} } -!wcR$jNpf%~vx#XJD}9OhJQ! 5F*vZ^ze('p%p 4(x{∭"zIJ[{e` Afg???DzjuYB8lCeɮԉiAzw/JȍYH#CNR?yҽEDܮWJbfJ4 76RF.Ƚf#&2`*J<ù~fg4^ %k [lOQ9ΥHO`ph _Ɠ6pG$*0=l qNF-N Gn.z;$l||xqZ؍BøPh)W5 QO!xv JߑLhU'AMd<}3[_l9QNHBm(#UPi 1@!E%'8hKft܀0^ڍۣ)EIX'%n>*+ٛGO((ɔv=B`B"){ԅztQh`%1o^ Je{@nqFG<"5qy&.cű#&}.aίlwF:%A2&R JJI Ud!TҶPie_ q@U0{7YyH sBkQɯN7MwK^ٚLB`!(%_*pߓmi8Tafr162?9{BЏ:c<Ύ8s↘0'D_@Em6Y@na~ܻ[r `Xl5<:ox~K7\M.dp.a`i6EWfB\ɛvMvґIوP+E Xdt,fADR:8rC׆w}BIsEt |>.H- !FD7Eˊ$_%u6s2S  (VEBЬ'|sP&oZ%S91j{#GbV 3U˨|{&HASR\Rթ)X*6 ^e ܙ7tF׊D' Y̢AhW1^̙4bcOl:\TNH\:h\ʊEprp깣n?p`D]DI]B@c[(WtPja/j."ޥNԶ|뇏?4nl NSyQUO(C|%^оȀiU,p |of"TLj^Xsaջ$@NVe]m!f%>n~?J"^}rG%$K@>~@R/0b!#ZP~-xD cJe36p Nfonss|$=7Ay"rK%[Ͱ5[< m]vl  r~|w,cGX\*w2j2:3MȨ{`|[ `~ׇW4VJ52|:G'7; y|GA԰BZ 4:$w)ȥ g<1=N+:!A34?ʼn?ʼn?ʼnDzvTu.*mCFҊEPigx[JY>@3{ $-caԇ͇"5E.=,Dgv" ;Z3jc)OO {͗ڏsip=\jp̫@hWd_ A_0 -0^gh ,p|NƕbVd&,xFˠ^BL<(Q?}Uqe%2>[$'-GpovL)WW*ߌ +=,sӶArSR_ॼװ$ẅzzs=ewDA!!o`)0 H8!a&GY9L>Unك/%D;!r=x \GjjŏRtK$훺tZY}lĈRBKC+-S\ RO 6~(aJ$7]! w.1DMhRZdVA-F{O8Jhn۾ (Cl#u5@&)=MX~y5KIR.ox$axxXte?`d$B,[}G]1f?KRU, ab D2&OY8(wb(N>C}UnAj?jTo^`6)x>a7f+{̲Qp e$vp2ζLE  P1'̼Gk4NeG/ x $wI n/ mm!*(r9@/kkAD/NQ{4_]cmf(Xes 'ӿ]VDqo[ԪWx8\g*56Ʒ xAi֍?YtFT'zؑ=%Jp -/8 IjoF|N_t#ҘcM` I.LiCEI^GiTUE,7Ѐ+. :}X 6jX# ߑ\'CL$6,i)*rǮuIC_@e4)p/9șBAvNeSy 9A] ^G.\~?3X㥡 LU^B,G akk<TV3+zTexy^;?MlY3D|}-=M݁ѳ5$1^1A=%p!îIyc=!ݑjrf!5 4ҴarRd`qn1JNЇw"YdH܉M6D*:SQPR#h㮀شEɁqॉQ~;m,naۤk=V%-Hv %aZ{E!Huym]oh-M@.Tд7 I:k8 >VUCn99P'1c+}яlEM|kJKs!z(wrH'B/a`{ڿA`[vD $ ɒռwn1Y[YoBԺfDەQXkvаEUt2|l[jLT @O Q|1:;1-Xg 9(Z1&^AFkco Y'RƠ"z0̙Q3!2򹆬' +y:Bh"X ݠ2H؞Ef9LզWPriӃڑ> XqW̔ !SA'[=K[Ŷ>I)C;r0YjrZ͢?zz6Ğ{:aK&6\IN_Ot`鯥wO\x9EL 7^zmQDIa[ҽ/ڛA GmnT&7Qlދr&qkt8߮uF1|ݖtalI{-.t0q,_v U T\DF`=y7ب! jv5#@-+Z+IA~oIHd=hL)f_8FjX\_8VNbf_W2SЖA$k Ц<\jiЕ/rȼ Bָ64p#@;0L;"0BAb@:d2j!PyC^͠tN:U7X*"[Jܪ88.}Yb*oD}*N+iI%v!k;:3呮Vu ɲJ\ka0dw}f_IXtLfW3 5DVZގN07O8T %2֍z)ݸ%c6lo61xna2ߟj!<~eG.cֵPkSlkITD{_ƈn*VDhb2 < gQyi~]_eT+*c{YjG=ο = ri)!ZwZM `*Nq|od qܞ~$@E-~^2f~"xj)) b !zyBY~P)E] Tm/!>huuIZ nX5)8b'泐l3 VC^ >mjNLvHiW"1 Jl}m#;̈́Ql;4Qf>n~;X'*Ll=L^k JVu.Đ \w[+g(/T_ovį'v;)Ӌ)i[܆kPӈnEԈ˧·V'2 B FJaRip͝эQ-F vVq}O.ox >&(%~Fv D4b+v$ˆ?p;Q~On6"X"B5'+H5ND}^ }(ʈ qNףq Q롹Fq`jlF,UT7}MFnc_HTqTl(eas:C~REl wJ _ Ȳ.ez* r{V׶2X!Ln2h(}#@j`qEjPd ȯxUFd(_q Dv.e&f- ul@6) $jd-Qj5!vY{вҤK1J7%=K01J7` 04#x 6nRs` &uU6K1.’X ߌ()(YFʮeQH&$~]e]uXΊbtf"X\^ŃJ$ˮȖ2m+@dˀ֟*7OILG:|~O$9'$rtE@"rԹ%kņuMaZk*L-L|#Tq#QeLNnܘ>@Tűm%h3H'TmR18`+sxi߸R yB4edpSYqkwS>*cх|: :1!x{Ò`>H~c܂=[<aY=^g.(e5ljl^y*P:.Lַ[OjNah4ق~p\vr(3A>"eHp` ގr+gz5~VM[z8S( AXZS #6jو^WH+K{h$}30lԚ=n"= @ >>Ht|>Z]eCY]!A?t?t?tDzytcfB]x#{ii2~O/YcM;#XZCjkjFxME+6. VK"oA@ 闈Nې <_d ˰(Rb]h/p寠Y^罝Q/:"7y8@eAbځf=_`c[J;ٜ9pn l/@6ⲍ\b`g([(Wehk}Vqx.iӺ%0%IVF\ɜܾV -F^@zLC32N!;f4W5s|EҀ?uvw"*>aM~< ߠD wfuy%}슨RAzJ-s#:@dL€:τy,(b L#1p XQۛl0iK_qzRՅwѨrX"4F)9^A:$ EL+Ǯ~0nD7KeB!jg7h2N6 l,.~ύ aop(:[!"']d]}HQQ]|9[5^@+~Ge7]!N̽'eh??~b%T\Ke7)a١s(+ -fv_F}`u0p UGv>sf-KVPd!+ߗo(hHEw"ȰD~j2hҎ٠" $3Il)njbO5YŽ&CNia^oI乓AaPE>NHs+zGxdNɎo+eSaS!o 7UNeQXkA 1ƥjgjZdt vGp rSo({F.,#Q >MF$\AKuz+p,hي ̆J8 VoJh&xI?ypn)  q)d/?YJd3R)yuۑt6e:Y-hFjRV2? 5Vv P{psBr /C9#ί_I%zgi{ lͲWM_JJ#҈#R; ,?a}TW5fE#B(ZsTQPaĊ  :Ib6TM1> eR.rǷ\|hh0'g1D(i$D#4+P$Yjfx_6'Rڛ\ъWj8nxpId^12|!Afg?'?'?'Dzdk,XBo iKuQEF@|e܌גּXGyNJ6”aC)%;` d;`[\0s 4TmU6L |MMے/PAUZL}Y9?ٿY$OȢZ(ZRdpˁÏ Th4xtl!T>n[󓷽È0eiSF?=/ V$d G1|'BՎĜ$DM@TN bj9|('q@<)wRu6Briua01UB>!۬ ֚=\ˑ6db53< CF-"ihoUJ%*.8Imr:()Ų&7< OU@4'l|5gu~ueqMʨ:̍Lqg4@~YO;FceZ٘r[tmF[sڔ@sQ2(F,Pwd?|WI&[ Bre_cf]ܤ r4Ě"}-21LjB{|˹Ohe>=?dXIx,>Y|fhcr@f~V) dfg3QanME.g"sZyD 83 yѧ1wFkUvuz ǸV.X6,3H%3ԓ.6ٖ te"n)dPʓ_ _= J]AN&P̡wjj-JS#ŽxDc$n"t鰍W;I0E=t ~.ZE?.4dZ\HʢMs޳%eu8dl\kƬySk^dV\|sG-z&qH]H ;`}'ܻ!A34?M?M?MDzxͬ^BE‹/=-vk䛽X Twؙ=舘zYiNFgiC6uVjfl/vwkyTM-ˇ^TrN5]s=- w"+l?.Wy܎K6XOp.A:celXd: [0PhU_W."Xkf%g9{-nb!U *lܘK 7}[ ]^ ,8m`(qo|Ro-aFCTV_n w² oFq3nVIalӀ-yIΘU"Km3dq?Ȃ(^GlN^1SU0wg򈢕r5kcH {;hnB<|R18I_ǔ#%-3q"u5M'+klFbR`M+HF%G#^"tڪjPfň fZKDy:!6~@Ǝ VSHv8Zu6<ܗݽXN#i0LEיwؕPUM{s~B2}Ys) w` g`E/BiM#]'O܀"\Bd#sq}*;?z d֊։`+*EbZsm=¾V}ޅW6y׉aAYljp#PN1RO2KUShin/֧,UItxp8^7d^Jgmj@5}AS˂.@N0ü7<:tƑdĺW{ByPwv9RqѩJ9[^0SA٬c&vU&%Ct.]5*o?ӊx-ATэ9 m- U-RO8\q,OCiBlVHGP4eUHDN0iA)j#hVvj3HLDk_0Dk4nyxc(4?hоk**a߰`^y3*ڗF#Fs؄3Q՛[Ȳ +/CB/_"Za"idG5a|2&\ĔNkCUf{ޮJpfCH~AwQrDb@63 8{@b ZhyzbuS&'z6Ԇ%y wڂK!s5ȼ49C3oNiGLL6a ƛ2Ԍ֕p_f|ƌCCA0(%A:@>n$Z*Q7^+ikh DW0'3cʏ¿}!],_ڈ4DN>4wM(=@S\#gd?,9 hW|=Me#gL~ *S RzF! "[fb1QNz`D潟ZX ~TC.XbRְ50y-%j4zdƍh%-o)֥m@A)@^-YR$YE`IKnj˦J-=".A???DztA'~`C@ĉ -5]v*rgd˧Fd|FU. #Q/:{]{Hu05o+pG{&o$fl0\x:JzHߺͻːWI{=ʩ D+ݧvyLэB=D@Օ%^"j}3'GĶa-#yAr*wn(֋$+Y !ջ@#GUSZ V#WA;;č]fq_+X5,#-h8#b4cIl;M[R"pgQرf::M > ![[E]'^3G~U I_ Gyy#XShqanɔGl.=9g,۪Lo|GzŲR>OMLAj rK׈*!=,!yV?t;0P-i;_0[Z$nz ݜaI⃃lnREԻk/챎/Mtt=٭TY@[*%,F̐S\У!idf3"M.GCD-ߢjT&:+EoН*yϻN;u: YJ*^%UMR\d"ІMX uq@2g˰I'6@eIL;nۥ`8,*~FZIybcZ//:L H ŜśY2J>.-΂i,%D]=Zx~#"| K|""OX0R ϼ|F+H{ BZ޺.+vt") ߸ S$%WV -AN,?3z,~i_vqg.~j ADV15f3)}W*ELt抭H ʒZa W+ĭ 2;kB?=+aYDCG:`g뤨 ڭOÃ8[!F j'b5EHM%`\ Asʪ.c,95wD$}hqH ;/MLXtdL0LNs"Dh~(|-7GRQ:r EifjrGA `LakD`.?*;]bҴS*T/FZۗUn}+iLPet'8QYW%1qr #`}DcEK"`A???Dzl>ccBW,ЋQ5v3:SN@ųnP ̈'L†[5SNh,2hY}V_zOܖ &bQ(:,Jv\T?ZBݝN*AVȅ= ɛH8 s3mYlT ^G+DWشLO C "+.EF!(L:ߘE ?_bn7bkDcDp EoJJX7x]6nBxnc,CbS0&QXNC 5uUK0vpoͺc9GXLe;bz2g+oZ 5}e-Þ;Ee+Qī']xT+.=]fJ~VaY-NF C(!kN."kT5"u9SO?`ogG2h)똈K7ݢ4&>tuC[u~ sn/Ax20蕧ٓffVNJ"iїBnLwCyKx s9B+w} JYf(f}*EK廝I-JU搟iiI4>Kμ q~F=,+ZةmyrD$E Suuu*/߳ݸc˪0m`.8Jl)Ϥ/ٜv9x`FMq2%>ꮛmt1{$vFyjDBlwCЭB~\+}H 4lA}j)e뫷"ytz c Nt Og&ޥ;v '}B)<)jLiokDbM M°̮̆X쾭DJtY 2y)lZ1B1^ccR2 qnDP价4XbŻ5mBdi:Ot6*6ᦈD[W NFd'ΆcËKè4]2TRL#BLpw+2MqʋghX(NuφBK3̙9/Cr/T$Eɟxkԍ>v5xD JIܿkahN1˫EЍuh䇆V#*Ta$Cy.DPF߰s 9bȴƵ.7&D7b/NT׏;B"5EUB9!~^sjd\m2un CfAjkڤ?H]uCJbwK$j&ֳV 2WHdg3& .di~OgGEܔC{4Kϕc& 1"&?2**qr3>J"z%&l. ER1DoE ztIzҾ{r[ߤl䒊URlP-l4 Z<* V1ƺ@EC蚌AO">X_%궱ڂlͰbzcˆZ.W _$ғtfG+*(Y4)+㾌撑qUDMp7,)V0Sծv 2+~4,ux?WQ]#=[gBLČhG96EA0+Yg\sERghov{ex*>}>pF k) @wpNj^mګ$Z\HSpMw=6^6mDi(ra28毘iORLMH~}j߄H <Փ 9645ӝ4Y0J B,$Ĺ*!jh8 a`6H|^| vNҖd5r;8-jAgv*l埫>!PAɕFFVr%|Kݧ:r)icq, ٬nGoƟt" 3TEL[T,u8T ̠x2f6c[4 qpD ׌X#Q?fNi+e(3hf D>}K W*PO/RtR^>\ks6bI6BН j]U%◕gt5d=q:8;UFBaNV"2ѲqvB6~j?aBO,DK<,8٩%,=|<<׎e[@iQCQ)_d8*kQ5lHCCFZ<֊uUKx:d7eͤEivzYuYokC0 ΟT?DI1 TqD>%ofrꩴI<v{kqڢCTg+:A R aaZ?eN {Lɱ<~_5nԘKS"5v_ CZp5T xOZF6"e 3HO]c]7 hzvCf @} :1Q gc <&;\ϧ|b7js]?zD.pJCM< [/GG;kk(>:, m %c7p{!@) SKH4;q|(OH)JO$C#945Tjcȝ>Z2LLLIHl|w\]è1&:I}dHOmFh4[q>d(a,koaw!AE- ׏"ʁgօwyO|;PHr mf0iFsdt%A Hj<3D8/1@f(efPPǜ GLtpC9}Vĝ44=,-T8ytAmzD=S/jיv1(!t1ϨDӂ쬙`DǴ{S|"=X@g[x:ºUh+ߐ)E-(9ZoDOAj2=uBM.|5g*=&~RtEG胙UÝGH7Nt2_a?niR ֢d2,)}4"Nڥi7~E:nl}c^l%ЉbX,ZL Spn{p$\ȒmO Œ5]M!>r-˜z !K`"z8^ezA[Q\w]A~$"ɬl*OAfOYUՠ6dZ!τ/inO*4$4MR Ϣ{Na-! w2l.)#431XDN|0ze2rt J~Ei(SFCj9_ʂߠԗ-{,XW28f? f Zp;ē2G)FzoX| &8"=PUxW\g .%.L&6l2V# P+YB7Z∳K.ױKPa۫ŸQ^wS "A34?`?`?`Dzht6VlC"gicjsOBcͶJ& @4H~ļt+ L>cGvM`Ԗo}k0^ȥ"+`:cs@eo)g ^- b1f5^`X4$=wtDbm0˭JjWs,Vjmn Q2 !ݙM9Jh"3$z}ώSq NZX>9lJSiZI+!LjRd F YlŰGMuFr#gQ OYc ŷRJfC9^3a|NI+3Ot((IE{} ۘǗm7*TwXWz^PZa @v& Jb&&]#YHIf9iŀaܳ)sEt* ljXiG9b3/rr@S8y:? !^̀ad >ϨҩH@UA_%rq⺌yr%XpUv؀ɜV;sV2`n W66O3P+"Z7b EIփF 굚m^:B-hGh[vU)j*W6Î֫=Whx4vsUb|_ gm()(=*#u Gk&φx͝X@$\yǠ$VDe^#/ށ|v8,-~ A sHL=GB{Ѻ%nak#MsQ05h:K'xu{Og_3r ꝲ8׳Ko4r({(]x81'VFB\gs'A;D&l0a ʅ 8 {Owhy~H m0:|H_}< m˲lb.LԸ)o%jpq"eU&yY4;b-eҪ%D3[y@Ztն4&D"\V񡵉{xķWNqITY *?D F}iO* #.ק-j6͞t?2!zm3Ͼjpaj5% QU|ܶwCrBBǯN J9ltHĬv02ƘW Ytn.KMƒ%Ģ[›Zknؓud6"Ä(i'+z+CYdu,<:{\Fޠ5ɉ+-z(IMB }!epr+K8jHW$aT -goI^t]ѮuRxw3B4(N\} 5l23A@8Mǎdlh[M;6}23[EX*lOa5@#(A?ww?ww?wwDzm`QGWBIIŠ%,u-ݪ}$cU,_+g0&W!Fk<HxI]/y( -P'mdSǢFp}W="lx]ǥK0=]Y,D!z0b'<-wtו>7pan)\KNxT\Uo B)/u^{u쑎+%, ;țڊ7ec;s"ga]TO-kK_>VjǪ!2%aFz%\&KD2N\6 (He;iEXlMTV,x3G(T\%:NC Y/D}X<e pZ ]_iɱҩ=(qhJe42q1fHa'1rGJ]M/WJJX,jWD ͫ+9T֪)|kJz(M1ZPE>Jd'F{@e,hвS“p+%w?Kg*K@ڻW&]& i,Os`\琟xb㠸f9*4 6dk'$:iށ];,K-P/6^D;$9RRe! 1NcusEaO(tu[O+0OskYY-B _l!;Xyd>f(>]c/kvMXh |DIl {ȓə%&dhD PiPI(C=+{k Toӗo}Қ BF4Xi,\" DA%a/Ѵ7fj̸ӕEBSQCbuleX]qh3hY\fD-F:^NdZfÝAa!D@S먧 4'H)mvvCW10E B#(ԑ4Eiɬ*Rk CĈ Pۛ!8ro5[sbO#3#=P]F42JF[z9Bk0ʬ#N8^R |yBi#,ɮL%pMV(bil[Fmn;te` È8p; a-DtzlzZ$bu|rlF2N TpqcDoWo. ǡW @[* zuV4Aygh͑ˑeX#% ЉIwXTkjhRpK6ZКτ[w5-mS}YL bɐXnK 11V>` g RcEA2թGajQ]΋sG!Ű4"fuTPj.˲IF3[ՊA5e;^pwkmPx !D4CdKҽeԀ8Gåwkaޏ%Ztܯ=1)or ayKb$[N I!oOdWUhC+Y@,(ƿw13CtelTE4Ϙ;\腄(dh!Zdx@oxOxۥgn5j@u! *9_4+a.}APHlxLz%A ];sD{,ԫ7방TJN4@dJO[sAE6%E8{ŰQt$VYz`}B2RN/z==КS5!5ְ"GAZʘh>~-#ZA?"?"?"Dzyij?vPBc0lPFvb{xTmr Gc<LL6hK̀y.j[%qxF'j咋ەh!gߪh5ٶ`= ̑(^wC9gW'flQEZh[JVX{Fn Ea^#;:!O)A,ufO-`G Lb#Oo`mܓ K,#_ U5 q JL&y$WYcXf $g-aUөȤeG<:4\ǺJP ;M=J:k3Ec#Zaf 8"ȑ~ ?uHb$I;9hrT V]nfLϷhl4zx7C"OP"N*gNfE!`lɪ.Zd_F?Yb 3Siª.JGMCz[GblR-B4o,W|coIx:+"O9GHmdCg˛e>HmFbqB zRZn")iYJ7mprOմr7k6Q^ASa_ϖ#ctV\ ^aPF9N1V"e&Hb6xT\j-rˍ`Yguq0br>P*Ն.q+D yB_KG줅JOF9IdN䞍1;hT݊yϐ?эeQW qyecU~+k:'q:"ڍ<ar8T)lS[īzx@RעP: WN }?rtv5rv6v=ӀwCw$M|b/L@ങ4d:mQ, C7Bqzͅ>B*IѩLF-&/xh)ZKD+T4ٍ@~m@R,W:Jb+ D>|Thmnb*ql`uXnb S'~lZϧxDNgn OnKa$͖c!U~`*@|ty#R?N!PƶNQ뉩]EJ'D\@tf^BtN-=8BבJn[ؑWRГx,&_@}V8Kt HqUdtcLm1eZN{'t~>QK/iSLtLƚJaK[wJƓ_ӱK02ӻP JBL.ΓRr(Xgx .%44q3QCߵfJyB#fi>Nx|\=~z'sZ;Ŗ$Vxx ^L$O or’nvQ[5Lk,ʬ;'W3 PW]I X(P$:%I& Rʏ9eٻ-AXY9I`a3Cocji#'MdQ&ޭk_Йzy'%uL|1_Xp{ȅ0O@n2!F bn{7`6ݾ^ 0ηcrd 9z~"ѬgI k˾_,ƝZv î^qW־hLr_ <L|M tfɲMATKj7D7yA{/jY.4YfIjMٍ9Q #SǾm}dMtWsN!n*fG '`3:1 杮&xU ƥ~#׫G|*\VaF)=TɘD4yNVAw F"yvn*YΆ]*5vocTLz'\fyD"8va[}:5jb9d\RMp Q>DZݕI7k{!=z߈H{pmy,aSxWeOt@@Z+PҒk-b)خ /h$F4:Њ˟f3 "ۍ v+Jݏ42\̅x+dK:xަ<:DgF$bZH=2Hr랥S?D.w+?ɰMp {O.O t:snG!GSS, i>'$悴p7^9 _n-`v::J~"!#""2Id{'x0t L՞-BQ-G/0GX$"!CAne$% LWZ6$9N`8V.Lɴ[9q.dexy=BL\gVs 2G1n]j/xvkQan纞PKm鵘BPoDJXAl(@U,zӲm>?3칸A¡dg".}4-KRudF}.u3Bd]~lCD d5 䭻4&r=[uę"f"0Y> !p[(LkO/1O0XoSjDĜ<^Ӳ/Os t?I^ *çJLX ~e?n#Afg???Dz`fGB78>fy=~3£Ƀٴ(؛P`bт`H'B,݁oc,3Cc:- }ׂQUy*lҲ}*NGx#OcE7䨛e91ރ>nPT@չ/.Gnf t={0 Vtx2'̪?.RCMq`ĤjTL>3 ],t$v@| E7iM ]JRBzeLJv@d$?[؎>psۯ2PD(j"\$%5E{FRDPl{#0!`uq[t)[|9dk1 4#l+_ Ȯ` g^+f,*-8++`G]% ׾Q[1YE[0Nh]X/Dc]gaQ]YX܏54/;'uskuko%u6VC!@؅Z1 'P6982.UNtv YtX//w]/*p/(:DaN{JCuP҆Pw]cBfQ;io1~,*Ol-e CWfD$!D-!:T Ebl}}qw m0kU|ue *r%tg9ە·rnCEr]_x ѡίX;;vIϙWFVF>0Wɮ0SSub{D1UnNDΩ{h(e/u1:T%rw{aDx$sHy5ת KmϡnqӋ61/J#VШ :ヲ/YܦYK[S֡^K%[j9{iПImtȏx(6h_z;;ӆǕރໂ,L"ߎt\ReI3 5ͷ@={)lK -bl16)Z]E^#j0,PYQ.gpGå Z댄m \LJ;@;OUxpAog`z)Mܩ,dh!X]֟ i]bp$oR%r*SP-傟D9Ԗ쀲0M-fiIQDU gI}dD@ɺKaLݽ $Fj񩙘C<ȇ)>܆d|oҔU 8KkN`:h$YyDo'"ڪlj9]cvIH;x D?ha]q3%6@pa6zIĂ8em$~zt{r;eG0lús %hbǍKX}oJ'tLu*4fvy$(be"gvhb bܚmL[k! Ad/}8g[Aښ̼_ )QNV sZ&pZdz \-JI @FKw"9tr^cҚDrn_taD1vJ qup5WZ'p'GPŽ| dN0f,SG V+ϼYiM &}P E jbٿ"~wHfg@e5KoVBbHVd@-qCH\:ߔ.b]BT54tC&Τݑ@"KiKDZ:Fy5pp9g~7&~W8xn tbn% n{:?+*qۀYNx2Y~ a;%:55D hx~觓}z0j9^=Lb"Г Je'%X[Ed0eLBס_QWd#A34?j?j?jDzqjMB[h0Q>}=;FaW\[S?ZA)AfbA*ic#JQW.۴׈K7V]bo:Cvy"+SIJw봜Bm,Hc_Kݡȸj4+$Wp)`cj)), a]r9j_InjɖX4ӾkcgLEZ|F2>5j5"ׁEaO,9:.bzW]kW7E ufCXU8mS;]xd&Sm<-(\m" f{SWwDIHÃF%w0rx)Fʍ~At'_^KjX)n_K(/3F{ iڷ p4iqyp.Ӫ/LwA‰2Г iJgBCR$VuHgb?j9稳[/t>| zͅ)Hjյ|[xur,3 zM@idɲpNT5 ϝR1b$APMVlE&([伢l^(nt%h3^i׬djaʬ [Ky1LB.2Y_AmQq\{. fB|=Y韅]N9dL14CՏ=slfTr IWU |4J/"T9mĢP"lwA/6<{8Hyt_}YZz#DMoo2?c,u$ Q]CrPjW |HuEe4LУ2Brn-DU􁙈*L1M|+uaI4;n̗t3gI>νy8+ :[y-szgrP.8GncB B3F?&}`'L=iIiɃaI*(ZQ1&3 ޲I*˰bx;ɜ (h@gFJE"oB ~zTEF\dܗb{Y/IԖ c@?Vz%}l):\7v5{aUll>p2ֿV`"Ki9 ޑHZQeg6ph}"NRP*…JЫX4Ɓ: tf+ց mHna#wybx[_<փ2|f.{tO?yjZH_ 0\9*N*=HyZv)ݭSh_ QS$"A?0?0?0Dznyz!7WCjC!T#A-0sQ:Axc䥔6jq ZP6״ 5+k^Tl6DtғBr~~yg~ϼ=0Z{(uZ7=gzZSR qP 6V/^p_u%hQ;J#2آ|XLTYS\gK8 Voݚ\-z< xlݞu+SN=%pZ/⍔p.\> M@8 :~'S V}0|^Lig$O";a\B*LZ6"/ n<;\ >WA "ktü8_xkmпmf5HFٿKN|Yծn,Q1L/>3S!=Y²ڥcz5Ӎz(ݑun@-^JpwpNI0e>UF>>V2.lF:e+ac& v"[5|@!|R\TjBA<=Fߞ!IV,/nhh}6FK~jtѷ7P\\@ M̽ƽ*ODWF7 1 C7(Ӗ?H5?,3ݱ 6;ZmvKYP v4/zY Po`eCHw4vOR@<+z G,P$0UP [?,%FM @丬@0o[ O}-%pauzY+EGI)a;xPp0zlj+A4vIOpEY`s.򄾑y X< QgU@P,0 >쨝^V ź:W# G؊83ddM?0of)bX}O@= fS>V $:P0颾V0cƕ@+)ڣ)pyۑH*|3oVk^{  0-WPdhX ]W Dv:[1T(>W% \5!>y6WNR ʊo[ U 3Wx"1!A5At?Hns N sЏp3+>!\N0qхc9)'**wTJaN}@dc* #w S(+ʖ"ggT'`$K8 Vz= _ =q!,geT_BjRo޿yoΓ]oX^4$FpT<O$> 51sFAȏaQIO#1EIDd{Hl0֡}aqCHg]2 $Kb#^LWZ:sFGa2`8#Dk>FZNbg.}.3ȽK#EarzpJd2g϶AAQ3\KO<@EҷlkJpS*09 ro)3'^>TO )d9݆h*% 2K]B()'GɕG}gɿMe].h-O1,<:wOT#\|$j1#~ih8+}e&%gRt7:JM٩3v3x%k"ͧb7~ n=LPۤ=N)ܚgJk1~+2˘(Ѡ y}e,0W!'#6Gl2WJj9X j ׾IbhV(@$TA???DzuvV}VGBfVYEutҧ!<|>[ܵdOA"c~˫AtYPyR{A%GGꗁQy`#|G`fa9C?1P-Wnʁ^@wĈҷ Hjk]ax̼哒EmRߖrw8{ Xq^B|sM9&aqURKECOy]Xy{8 cUD |+S9ɕ7:RX{,;׋uR`fc-G&p+ⷂ)YVpj:D'-Wԩs9=le=8 ws&7e-d?.`,ާ~ h=pF&/83o+TDq̛l}((#5AJ,y"kFR8kM'|"rj3PB EGji"ji׉IcZBPH<'}|gɹd&!hEcr,meIir5fn?':}ȯa'lrx5&; LeC)HDP{VTQ*?we"J$7!zFNL,8`Chq VJP\ 6%J* Y_j>Ci_Qi~=Q^mXԍ8,LfB[ilꣾK b>Fd+7 &t8oI8aE焹NmAtsxÌI[$ىe'ne?a:&0ѥZ2 y}-ARy{E)># *ϮucO [j+m1f,Uo]Ғm"5\:|"m0\<+A6"{lOj 2@-bwL3UfWe\v5D-X譂Dtip#6a9u(*}C:ף)%V qΞN&]꒴ 8 `8GyOӓXdb\0w)"`0Z+.JjV/)!ԢG&K_JKgOؕ"ܩJRm=9*T@wɚ^P y m8!&!CMƝL( po{oOT`ʅV/ng栨=(;#F{ ?aPI@9Tbl|eWqM֟ien8c 8*Mw^jF960c 3ԔTzG!˺n+ ObzKnm%avSi $uRʡx-"(W\#D\sN,%{ɐc1V o ԸCV=- wyxhIj&šj-;ƭzHxn[ͦEЈwU$ZM* AB@s k_hS\e GHO&|ڥ[kLM6+tgQpneXhhbF+`&#K #Xc ]ȚN /Pvnh)lf=уE˸`R;rлl1bR0po) ",Z> J׋ZB,Mo~~0G X6>ٴo)7ohBbR_h!" ĕ(*4Gq/DwNztTP(DZm_|v8J4\DDQ Ner2~}G*N'U͸9hrP#at}Д*m<5^HL!xH@4c%ʅˣ"f,tU'k# '[U(^ocJzD.fw9l@2hv7@xUF o89*ؑw5tB.9RN<HѢaȏ/$EVd#TZA>t:CXk;fiJ<'j֋-[̚^`B!jt` ngNv]Ρ?x?^A[GQ< Ѯc!&&^:^{[Sg{}K`|=Fi5gkn՚<@DY>=>j$F.ԌZKl8r]1:MzG,vo3ւ@M@fh?diɢӉL[?ԫ7C18mlGDo2iT_m? V͔#2ߜ  0_v/fQl`$OЭKXenUhÁC%j/^A|q-IHNS I ~HKb(<EVlcw M`B5S]yF+_+UC9NIZFj^2 Eg"ipxQrkP s-fZ1Rra\t @, $פ׽FiB2Va,+5OBǎ~{iZyR,f4\gUlNƓYl=g{QYZ2Вg 8ObHH~m&iqGB+9ߊ~reCG{9RFEH%/ܦ%Pt*nd!fp)4P1yVM%etXȠZ\-zNBSN fINws\ZM3{4pS 0QPmC;r $fՖin̷OzwK'i2UdU$.gңEˏ^nN#p@WUOy*q]"jd>*FZworwi76uSޞRFMzdFpt:4))ć~?GLPΡz, JfmyV:ٵc⡪ 8|_5cQNfK<9Jc<ҌJD"XsE{i ]_.rKk1 [G:wx1:-ՠձ"*2,13BөK " ,dC`::xs?\B^B10p)ha=iꗚ6ך ~-~-jiE5_P 0w\ /Beَ?j'l{6ph4O(Y~urmb.aS^\o.:)_y]S `֯SP.G} ٭4Ro ]mC, kj'!|Ӻ34Ya Mbtɣ^-@ YgdB꨹r4F8^EeLl$3<Xb -/l,9Z@nZ.Ձ6,ORz@bXGa)sdg+Qp|?WO"P+~ _ 9^蚁ׯ jJơ 87+lG-ّDL ̦¡Ӑ&ER|n'tPO2R8*J?t9E,h'#E#&,,_3{Rё(`U%FĽ֐ W`9:(4 ב6 M)1iy[[={n1Pzh7$R{ [*rW8Gtft:NP]Pܞh9]d~4/ 󣎈}]RN kJ/&]bEn&镡%2Lŧ1)H!ം&Ub41`'!hkU | (^!B q*d:CCП8pNlL,.Y#+ Kʢ ն0\'4/d (L1$Afg?s?s?sDzrm`MB`$p qɏ~"}twϬV(m)]YnS`s3))7"#nQ2ON)~ T(㱍f)} B8}ڋ/ vhS!JH1hH~?R ܃1Ej"AD2bbn^+҆n^A̓*JAbu ?!׏%G=^1\jK8h=6+UIw%rlve bDP74Mn9(-cTl\CH[AHKv mOݕ`;v PZ`{NN4;[)nn4!'lDҲ)\ Up"870@: X|W89p^-5@Qtݎl B~boLx~0%UnCp8ĩH` 7o=A}e뗋& gR@l`ˠӾwt\)[I3Cb<,hAڒ2m$HHAu-$?;)OXY 56JEG M,+(9 `~I 8ߝ4ɥvReCY+P.M$q^w'8 tt tt[o=Rc`S`fvW& YA$BͮQxFd*K, #t _`^SD0nFQRg1ؓk+)UEEd`.K pҷ` >fP #L24Qb'CAP4Am♀n7yM`(Jp֎E%D7ʠhR:0e ?`׼ /V ,JR]2F|+]Uā TWdEaGYؽNV9鯋` 뀌(Nj c=zLr;9?1!DVҪm֡ d49O7Q"HWHj' GKgwǯ ]ã1Z3 c_ک4jl^zG$'"6(l<ա]D=[Ve@ϗ>,OQ*~ہei%+rz\Vzb}h+ap|x-HQ~URXfuXEr67 $mI \ O& ZgbzE}aaI`"IcacKE[3&VV4A/iKN/Dx^tg2F{QЕu5ti-4I+(>G i!d&6Kɺi>5TfL0jƪjp HВ U :l7-(k9(cC^ RGc;nk(])VkWmٞ]K0GZ80LF~R۰# MZƭSU Z6~j3Y3D9ɲpJ5VK]MOIta>%OoӤ,1&aǎOjeHCK l Z,ÕbX͇]jq6 {5ߚ0dSGRfN",$vh3IpŭUDzz }[ :72B$`d0w]D:|X<9*c!- K3.Z`0I-W K)RiDeF*y(҆9D>)d`Cw@X }XzM1zu/E,miL'*m^sU%Je@Ѐ jV0?|#k Yn|0M5Bw1fb`h=xI o_@٪ϢNiT ] QnMI{y{~Uhf$oB_8'`shn.eAAO__WQrH,Tj_Xtp h^EEb\:'ډK(7ܴ)a[' bTt0%sLXPN/hi]ku镤,Q6!GHZ7TRB T厪07''xOsLa287IXϭPQ`61@֬@e(arԌMng"F$Δ×!ǭ<ז[.Dt83q/ BfqfE|,V,m&^WP fKsӑXʞ-Er;W ."1 <M pb~M(Ns䲆-6ec=M{PJ9j֢201 /V+kKzW4Գcr#עRd> >NA>,ቨe2HHƧa#o߂E8S}7;-P־SXR86` u $zI+v=ɲ%0}lk_,L(d jА&v/:PzryՑp,]%mxbP~RQAW+QzĀ_:i**yb,{02 "}ٺk9հ3Q-Ypaֹ{.uZ9k;J%7Zڍ`.!&r~|Cߛ!"5#1y"̀H\nݳ/Mg}7y$8 o,SbF(` -]0: [蟪ӫ\ +ՆR}M4d_sS%ot 87p'(/B]NX.xשIXkheW48PIkN:Y""TG>&;td; GzH=Ȼ|N>lؐߪ0Ҫu#c'bx&߉ABǽ;էر^ Ct'- uHtGi#8'5W)As# J"xMBm))M۩' ,RVgnr}_i#Ag^uUSrF} _Q{,蘊4+r)ɷwߔX d=oisg K 2_DͶw̰".Kv7V)O.k}&Ĭe44q:DvM3IUs4M~Z`FMV;׿bJ.WSx~=ΜX` :L|wn "5"iFr1!ÀmTxj 7C)`}^!R jE.+*([ ɚ،B3`gard12nD:D+x &:hG*/ZX.F$ߏe!FexϓOw>-NIhX#?vD]KEZ+nҽic(io/ăGs4EFdWh@XA#u"4Ek<nHe*"bn]5!B QmJ¾tyl7N`Y'@Ha|Di~e 5eP#{WwD\؆D$ ֔D{IJK~g}F-ޣrҙ\W_QyP5pzŋɐ& 0qWx'rb$7f}:8Xy/}lФY=xSGsKw)Mwڙnmnx5G),X!$Dk]uX+tV2Q ti$.M%z:.@섏X@ ^~Za\w))ڱ6L=HۆPo`B"_Y:Jۥ'4lgN247F[}f{3 ƗBKɮGMw8FR8Ւؚ%:''|g2ΞmӳnHД"o=D*6E3E2;?r2:EX7L&5x2xЋUBRf_o8ͬԻi >gz`I)LA|3Iީ~Zs%A?q2?q2?q2DzpzzÙiBLI`N~L8-lTrX϶!?M#,R Cku#͑^.4ӵ a ]Ak;뫪n t@.K&$B`~+`T7E}hAϜtPs7LuiN,j"|( zBF C7j"=%5 ?B&E9<8^uG ɷ5JWe1a . -#!? aR;(rލ%Q X%7k%$D6JNl̞EQ6 m1BULQ$2bWe'Ujs&c~B:Z`Ha(&AN3IˌjMVlR]R!-EqHped<@(돯C EzmL 7OFiFQJ=7N~jǡ-˒JFAMJql8bD,'xT cUkg*H)-ʜk.mDDdNML%(cC+ZJC qPC |t4:F]"Tf>ȭmxŅ(GA(7NPOϘD:-ڻKTHe*۽ӅIJMHJH0DJ_8}(Xy"I^dJsY]@6bۼ,U7 \H=E+#f`̧!$~ܱ۹'.0 rˣ ; U6#4oŰr.o\g4>ȸ^t l)8^=zJŊ0|:9|"m4ޚW,%'G"S(g;~~HDI{[19|nX']TuL.%LB f@C0/7G5Q\J5Rniȳ#U3}9l҈YG4 hVp藄Rh/SfW聾5`DɓzWV>Ys{K?QF v sW>%Am.@A #y[ RX }̯ڇFM .:+T̼Ik+-%&us[ l{V<0M= "╔Qa[D=d.gj)?At,nhQ3-Hx*H7nçd 4윉[V!/ww S]"Me.ߪX+ J+"ɰF4;=Kb[C KO 2\T- cY&2[½霤ʯkbFLoƝ3&kz11 J%H2\/`>YnG(zʹ( l*C뻚M xB1f6Ќ'zkgw9s}R8Kw?73Ak>{j킡 >Hd.8lS֏!-<$GTY@ S/ddCEӡ|{ sF:& ߃NQvZSr=r b$*XVz1gO?E-UwDn(^ub)! c!x\2Oh ikYi#D㯾iy-V9NJ"Xr ކLYZ8c!Ą53[ÂpN{FmHeNbK _gh^H L̍1!}ݕU|&aTk//*24}1ʔ?zoe>2{:"Gt.HuE^ ' #UvL(X~|Po0,5 ~Zt֕"H!fE  4jɒ@f>(-/}q<2S@ Ib%Sxّt_d7Z#u<#ۈ/~!34]sThƒPfjڝu|("AY>깳E $*,fEY8jb伢PXBHL5i$[c/.#)Ρv9? "c@fՆKl`ņC7cwBźp%j@fpp0\FFCA\!z芝uՈ輻<"1lA&PQP  s"LmggB.ĭ_ɚK(NAB05BZEg3l?T%ǽt x_|:'^ SS= j%Fݲ/@FojݰƎc^\FflSmھ]he:aۨ3?p\ t|*$ /GShi6p1W8N˽A=wm/7 ɜHGqb(Z'q9x-N\Bg9vjfjNpß^kٚUU;}tc7P(?@юhx*]}oqn>`g ;A-&3]G`]Pvh@؎%|~_D 9`y7i!n큮 ` ďTlA |q$EYKo@$?FCê_yP1$2*;@1b4 YŚ D;&M"6+ӁkXoyC_KvO[W kk$mNH|̽DL-YړTnڳܴvv9̚: `r8b;V:؝7 B.ZF6>>xAB.F) ?HffqH8FHbh܇jWBDoPQ闉e(P˛puXl.C/KVoc;WUK[s؃U(*% Go7rx83Fu,!Xw[e<Vϋ+c_YH Ywr-nrm`L3eǸpXwͧq>ޚ_[q FggP;N>½!2l*(: C;awDp@m^˫ح ,2/~=Cs:"jq_Rw; 2w9"r } _&J'H-eDm0!D0 'VI@Zx݀vuqVD&B?ThM}t3'`0{x9îh<-i jOBstp/(<ͺ/0aǍAu $<̗ex\mkMt*K8En.^ z!@سDQh%oD%A34?(0?(0?(0DzEBJl >J1u^J3^F\V!q4GG~k,Jrrk^ܱ-<&0 fу˅F@=]5iW,.c⠬iaBHN? T۷M1msQEks0ᣫeHgS:T|p _iqC.>8=ͯv>_`ǔЇ=E%s? V]X&Ǩm@ex&{d'9\ƛ{4Qv$|Cf\uzq`T1HZ1 h4cY-dJEἀ4X 춫F0M<i\JVP` 2J? t00T]"|ɒdK)TTLhABVv!|1Z-+nX,fyS LDfS*)LWN}uAFDŽ>6/@:W" ш7z2Cנ Ps#;?ŊF5LלÊ^,mP0IQp:N' ) P53 T8(.LڧLY6qfMFL^!*,|0,ʌW|du+TbhY0brbr$r\B hf7֤I5.>:RC5 sv2cHu/{LWR40$C#E/" MZFh%u cN LET* +HX@&<^` ߥA}؜xFӽDM%҃ @zǁbvkzQC$oYܡR{V ÞEAK^pj/7(f4DoνWIJ4SKioF$n+}q[jj[l> r>5'I4xp̃ M7v{:u tԳ!Uӄ5`o8HGHM+*(J'^h7+F$̀[_a mJ*<+}we! <4c`[}dՆmԊ_AUL=ibeci,_k~:3].;D,e&HA? ? ? Dzd/?B$vt\Ю|iJ'D ݉¹ Xjcw"-U+$Za?x:ݧ=G+ 8:vs[T|ǙvQBi啷h.Ew''Mo`2izZ~#M9f3}(CJ Bw2Bc`:Kj~o^s!V%Bײ P }٤EuEڗo)f0 zJ ~JKaϿ{ h EZ"9&9jKq MYH` 1Ny|Y51Q*!\o] q19`5:{渕BҌXB TLgoBraRm;mP/, V_u bȒT:,D1{)]}+e[mUK]-?59R׈טTuwjȺT>8<^h1bl4a2w %Oa qp@͒gu+y`bXۊʪJ'PnI@ Iݴh  -* FIa_cĄ3z/\Ww1 D. `̰_e]c49_>Tzi<1U9(D{itlֱlq T4{RhGp"uk X0΀R^j陡lqg7OڧX{ԧ8@SXA`^c2+oo'6/ ptłά.qρ/˔PfNMkZzi>tD|MmJ49Gbc @U,ȄQ#zu6,Z1.דãtŠ A*/^Hb,g* tƬ+l?@RbG iM)e.1q %Ӆbkke1F5K Pƃ33zKm<]TqX J>jozz6R"(*LNH0SzƻffK U`sJ1a>lsp~Ȃ6??rQV1lʕ\f- sԿM1Ξ9D=џ!tVq&+(orcԋ&% ʼnX J z ĽU+Q~O杬FcIūGVԋMaNn%"Ӯۿ U]gNDy`(&{o%h$1K`0Ʉ %H"a7.ɕn-0dPǑדtL)z4nq@y_ ɽ1ASN*F(O3x|maV$hW- H)8̤NPTpWΑޗK$Ks?TVOsW&Y ?[g1ǂidwZLm|XGY pm!Juk[9-F6]|0!jYHIv34!>ݨYӢƀ?hlfūLFKP'wkrK o4qښe==YǠeF͚bJ<ƯF|CR;& 1t \ .q _aF(ΐt fbuYW;Yd&zA?g?g?gDzb{EFCѴQ:|3hL YęsFSi,Д {GvZ& 㑧;mza_@JQDz9O;& @}A%j8jkihe %Kt/9+0V^{G%&9_⁚*ڟ G+*Ϙ埨rz$zB}P/oҒ`%y~ S'd7bE)v&tfB10q"vl;Lz@n\ˣ;颁<d%vm\0fRE6"OFC=kpꦻ A6+yTLU)Jg`W\wl(!3敌k4FDv?㗚P RFD{,Hb!Qu{oT+mfEltfՒxT4̵Uг-V5$IjVYY0CYbsJ9*j+ȟDlYe->~0u߷wSվxxEHrh'="3z)C%lT`%kC88%A`( lj"S>F+- xnVnnx1r\xI)`٠u)^}ުM#,;CF+i|Cϩ yD/ j$58S@xE(`w!B${ I)x95aa$Zr6S_v~RcS2^\w*UP Vs[F0~ƨhtOǶtK/+'@ʧ_|R<0HFftek69 ALs{nni;2 NVP܍VNߑ)YQZ:dvL bJm?* = "Dj+~hG` ~sw 2>Ab::3Fj[`)eG\/ k;2LTZUz`X+pcSOr JrEt|CN=^/٫,g،š :Q<_Ub@7hj)&}!LAL4'hd}/,WWr[+&svK$0>)YX梨z9xbCߝPN"njl  _ v""N*Xhur |G j26c̓cN|_$=ف_zGw!e6͉crl4Bߑ\edۆgf|E0Ͷ )K6 ĊG$}T9jz 4P>zkړ^HfTߑ؜>Üf`p&Afg???DzcpFBJn삈:<GXтjJդ"bKg< )aYX君\ jITd+p*99ر*64 6'9WjQQkJ>>9ifk\ BrBv.P?PC8ն(ż(O8j5]&Ǝ q*U\NM cCFxb'ヨ̭8xa1&7QWj gP-Adp9cuKsU[inQp~&,ӏ6`!/|=.&"e nLq2)r^HqQR Gwի0pjE'9 )n9g.3,nUDI'`=p)N#s1K[gfXoɛK iERĈ%o'_t(oj4WX\@ƒs"c$0Q7(&?31}PtwEľ^gH9}+U ynw1$";$(mm]ׯG?3uZ!@ Xtus y1A̳),Q8QINQmoߛ1FeK>3^wvuk oGpfsN_c} N)je❁!H*Kyn#Wqm%n3تg (*RZh!h bt}?܉@*{ < 23CYPJTv/H+WVd*b@Xo2LV:;[<X rACTytjo:#U$pQ>ZǨŚZAKJzk {Xu᫅OrEPz]/ F >JԲjA>$Q@4 $\÷D:?zwi,1[V3қ7ǧK O/4B=Cf.~ji- BcCV-s@|dOv[f}>[1 -ؔEZ2z-Ǝ(0Bj?߳a\cu H&'A4{o0HvEF4m-f-+B% OeZp'┙i`Q9Y-k+ rѽ=~ҧcr 'FȨDcW_1U/=^&A34???Dz~fV/?Bmdݢvh$*twM@[׃_5XƲo/kJJ w(3hO1%ͩ^8wP[}X꧆<(mH[zCHjniLٰqci9)NXfsYK7&2zvMf.W+C.IۼAn ai횭uR(*5ϼA}uG[";"I品폊+TN(FISPlC[<JY ^ @辫bHN>mo>LZi*Hzdeɪ[#re#PJS%N~0e]Wch],TP=Qbw W͐QF(* ;!,J_A$:iY(ݡ*3LJ'Ojeȴ9PnF*fL>Om(3;j:8X.kp|#LR"Xn%0z(G' DMw4 CFK&݀ڊPf/f^c@u1iscVT!$rb+tg6 J9ڳ&{X֥ZaaȄ9)%S/:6Ʋ7 c p>ܿs.s,rތf: G3 =]]πq G{m2$灄}v.[g-2e{L<Θ_+(>L\Mx04%̶ciF7Ⱥ O:" TD2\&cWAphAQVYoAmFԢɽji#$]~x3uR&#%Bvltq 243PRkYkjQGaR@8v CF{z<|.j.^* L0` Il`,J.h:m"璦*Bάc y׬K| Tg;sauRhy}:o{?t hIb cF+9SU)@N $(wBZ.X}*D,D[0x*ta6BBGvJ.,3zD>d?62гkܧi }/E pLuװmP$=))z7Kn\ͷSj۶I_L8 w ^ D⵹F뢨I$N ޓx~vmJ{$q7d$*\XZlK*I<]ΧSCԼu'+7E]_a5X_ÈG".|7vBwuCX-E i&WI᡺w3d٥a9:2Rjfe "ƠiJ+jtݵdG4h+H3F4:}ΥΛ=Ù,#Yd4@=݆0cFԧԁW%b6pA+sppmg8@`ؼʵ6k$oV}neqzji6:h6  Z!k?AGf Zf 鑑QBT1z ,Q !_&=sCiGNq2q߭[.{P&VHx*TMҲaZ6/آWMm)cςۼƻ x ]L#3NL6KsEkvif'zS)~gMr}=W3'im4ڏwӤߚr^,=i bx:r ߏ@ԖJ|ҏEh.%=F'ths`(_Ul7vazF+ӼPKdu_Nطfl}k}A)&`bp|j$h*DnY(6V]=ᮖலX^Y}gJГ₷ όƓ:xz )GQV&CnAq+5l;|ؘ AiX*tnt3g/nqMv򩻈p[G}KC~sp:꾧)=E@/3LNh^T'A?53?53?53DzsrFBD2x\'n"9zQ@,ļM&,QUnWm7M<K+h#ub!dƝ(]iU ;ȮًNbfGJC1k5GWjɨ0[c HH؂AG衢$0afg"H AMr0eȘ_mֺB %cLYYQC"NH?"1LXYAU72mZ=5rKO\"k>i5'-Xt":{"*IFnK0x_!䄸XW6YsV=Bnц&In|v<@-lRԱ4c6%yȓzZ1O<^NlnU!Z5i&KA)>Wpٹ \٭F:m6SgkUlڂR@-5-Ꙋ_&d} Uoӌ.^&Rw3h M^nD[RQep֢5҄k'4?q>R;%9n{S$y[F6d BJatA2uX*.̿5I:Eq۟dd危sm Αqib٨Ǚl]|̩փucDqyR /T4cWIy;KЯ6{5;J66Ztފw_Vf'0ߡ[Ƣxp%O|mGtS|veO|*es$Sr'*0 cT ܪ:{n[ >17!i@$DB7; o]f>AͭLCq'P$#3U#1(ӄtC J N m1DH15hԺlp/neQ@^_ ͜(D83 "oz!r:lZp5Z%yenؿ߹\CфWKbcc-SN5jB<8jO(,h!wݴJʺV ސȮ9R:|3DH AwVRDΝ$FqյU}wIgӘefqI@O3RZ@w``2 802nlҬwb\.gi=pe`0G JJ̔/v錶EDaFA>G^_g P?{_sN(^GV Y %Fe=eY薱 ,A.띵TDR]z-uqjSs0Ik<}ݜS3iC*Crt +2Lm'֥$#&[ytOE/sҚƺ939 68m),x,8brH2e=jf) p&vY,pJ_njq?5zQ`2誂|bhBќ<^V9D1ki!QO4̙9%ƒ[9+AV;.ƕvM>6u0],n+knU MePhj讀F,ik7wqY%JifQx c2uȊ;CjE Y7Lg^锖ͰopK𪘢a7lFgv RM̖5 xЀ#dl2t,2cK #'wjzFkG٠b eMƮGC1\hCJ昉B)e U;F"8_<PYtT<Iat:) SvbiJ57QѦ~xu)bQ=Cavogadro-1.1.1/testfiles/basic6.drawlog0000644000175000001440000001040512250371054017256 0ustar marcususers"Avogadro version: 0.9.7 Git: 1e37271 LibAvogadro version: 0.9.7 Git: 1e37271" Locale: "en_US" Libavogadro translations not found. "System has OpenGL support." "About to test OpenGL capabilities." "OpenGL capabilities found: " "Double Buffering." "Direct Rendering." "Antialiasing." Searching for plugins in "/usr/local/bin/../lib/avogadro/colors" Searching for plugins in "/usr/local/bin/../lib/avogadro/engines" Searching for plugins in "/usr/local/bin/../lib/avogadro/extensions" Searching for plugins in "/usr/local/bin/../lib/avogadro/tools" Searching for plugins in "/usr/local/bin/../lib/avogadro/contrib" QStackedLayout::setCurrentWidget: Widget 0x1d63e50 not contained in stack GLWidget initialisation... GLWidget initialised... createObjects() setOBMol called. Molecule::addAtom( 0 ) Molecule::addAtom( 1 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 0 , end = 1 , order = 1 , adjBegin = 6 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 0 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 0 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 2 ) Molecule::addAtom( 3 ) Molecule::addAtom( 4 ) AdjustHydrogensPreCommand(atomId = 1 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 5 ) Molecule::addAtom( 6 ) Molecule::addAtom( 7 ) ChangeBondOrderDrawCommand(id = 0 , old = 1 , new = 2 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 0 1 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 8 ) Molecule::addAtom( 9 ) Molecule::addAtom( 10 ) Molecule::addAtom( 11 ) ChangeBondOrderDrawCommand(id = 0 , old = 2 , new = 3 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 0 1 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 12 ) Molecule::addAtom( 13 ) ChangeBondOrderDrawCommand(id = 0 , old = 3 , new = 1 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 0 1 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 14 ) Molecule::addAtom( 15 ) Molecule::addAtom( 16 ) Molecule::addAtom( 17 ) Molecule::addAtom( 18 ) Molecule::addAtom( 19 ) Molecule::addAtom( 20 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 1 , end = 20 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 1 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 21 ) Molecule::addAtom( 22 ) AdjustHydrogensPreCommand(atomId = 20 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 23 ) Molecule::addAtom( 24 ) Molecule::addAtom( 25 ) ChangeBondOrderDrawCommand(id = 19 , old = 1 , new = 2 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 1 20 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 26 ) Molecule::addAtom( 27 ) Molecule::addAtom( 28 ) ChangeBondOrderDrawCommand(id = 19 , old = 2 , new = 3 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 1 20 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 29 ) ChangeBondOrderDrawCommand(id = 19 , old = 3 , new = 1 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 1 20 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 30 ) Molecule::addAtom( 31 ) Molecule::addAtom( 32 ) Molecule::addAtom( 33 ) Molecule::addAtom( 34 ) avogadro-1.1.1/testfiles/2-aminoethanol.cml0000644000175000001440000000455612250371054020052 0ustar marcususers 2-Aminoethanol 61.0831 61.0527638 10 avogadro-1.1.1/testfiles/ch3oh-nmr.qcout0000644000175000001440000011430712250371054017407 0ustar marcususers Welcome to Q-Chem A Quantum Leap Into The Future Of Chemistry Y. Shao, L. Fusti-Molnar, Y. Jung, J. Kussmann, C. Ochsenfeld, S. T. Brown, A. T. B. Gilbert, L. V. Slipchenko,S. V. Levchenko, D. P. O'Neill, R. A. DiStasio Jr., R. C. Lochan, T. Wang, G. J. O. Beran, N. A. Besley, J. M. Herbert, C. Y. Lin, T. Van Voorhis, S. H. Chien, A. Sodt, R. P. Steele, V. A. Rassolov, P. E. Maslen, P. P. Korambath, R. D. Adamson, B. Austin, J. Baker, E. F. C. Byrd, H. Dachsel, R. J. Doerksen, A. Dreuw, B. D. Dunietz, A. D. Dutoi, T. R. Furlani, S. R. Gwaltney, A. Heyden, S. Hirata, C.-P. Hsu, G. Kedziora, R. Z. Khaliullin, P. Klunzinger, A. M. Lee, M. S. Lee, W. Liang, I. Lotan, N. Nair, B. Peters, E. I. Proynov, P. A. Pieniazek, Y. M. Rhee, J. Ritchie, E. Rosta, C. D. Sherrill, A. C. Simmonett, J. E. Subotnik, H. L. Woodcock III, W. Zhang, A. T. Bell, A. K. Chakraborty, D. M. Chipman, F. J. Keil, A. Warshel, W. J. Hehre, H. F. Schaefer III, J. Kong, A. I. Krylov, P. M. W. Gill, M. Head-Gordon, Q-Chem, Version 3.1, Q-Chem, Inc., Pittsburgh, PA (2007). Additional authors for Version 3.1: Z. Gan, Y. Zhao, N. E. Schultz, D. Truhlar, E. Epifanovsky and M. Oana. MAC (Intel) OSX Version Q-chem begins on Tue Jan 20 17:28:01 2009 theFileMan(): MAXOPENFILES=206 MAX_SUB_FILE_NUM=16 Maximum size of a physical file is 2.0 GB, maximum size of a tmp-file is 32.0 GB Total Memory Limit in MB = 2000 Mega-Array Size in MB = 128 -------------------------------------------------------------- User input: -------------------------------------------------------------- $molecule 0 1 C -4.65592 -0.74617 0.00237 O -3.24135 -0.72185 0.05048 H -5.03898 0.27689 -0.00745 H -5.04204 -1.28327 0.87192 H -4.97128 -1.25963 -0.90962 H -2.99147 -0.26049 0.86983 $end $rem jobtype nmr exchange b3lyp basis 6-31+G* thresh 14 mem_static 128 mem_total 2000 $end -------------------------------------------------------------- Writing REM_CC_EA 0 ---------------------------------------------------- Standard Nuclear Orientation (Angstroms) I Atom X Y Z ---------------------------------------------------- 1 C 0.664955 -0.020102 -0.000019 2 O -0.742623 0.130359 0.000006 3 H 0.974407 -0.564133 -0.895426 4 H 0.974415 -0.564132 0.895496 5 H 1.127776 0.970158 0.000016 6 H -1.125338 -0.764156 -0.000019 ---------------------------------------------------- Molecular Point Group C1 NOp = 1 Largest Abelian Subgroup C1 NOp = 1 Nuclear Repulsion Energy = 40.3666036986 hartrees There are 9 alpha and 9 beta electrons Requested basis set is 6-31+G(d) There are 18 shells and 46 basis functions Total QAlloc Memory Limit 2000 MB Mega-Array Size 126 MB MEM_STATIC part 128 MB finished with qalloc call Distance Matrix (Angstroms) C ( 1) O ( 2) H ( 3) H ( 4) H ( 5) O ( 2) 1.415597 H ( 3) 1.092467 2.057258 H ( 4) 1.092558 2.057290 1.790922 H ( 5) 1.093078 2.050282 1.783084 1.783101 H ( 6) 1.938754 0.972948 2.291439 2.291489 2.843303 Job number = 2, Threshold = 1.00E-14 Symmetry turned off temporarily Using the largest function pair in Schwarz integrals Total number of integrals generated = 17911 Symmetry turned back on Evaluating contribution to one-electron hamiltonian from nuclear Job number = 11, Threshold = 1.00E-14 Total number of integrals generated = 6882 Smallest overlap matrix eigenvalue = 6.03E-03 Multipole matrices computed through 2nd order Scale SEOQF with 1.000000e-01/1.000000e-01/1.000000e-01 Standard Electronic Orientation quadrupole field applied Nucleus-field energy = 0.0000000004 hartrees Guess from superposition of atomic densities Warning: Energy on first SCF cycle will be non-variational A restricted hybrid HF-DFT SCF calculation will be performed using Pulay DIIS extrapolation Exchange: 0.2000 Hartree-Fock + 0.0800 Slater + 0.7200 Becke Correlation: 0.8100 LYP + 0.1900 VWN1RPA Using SG-0 standard quadrature grid for H to Cl, except Group VIII elements Using SG-1 standard quadrature grid for other elements SCF converges when DIIS error is below 1.0E-07 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Total number of integrals generated = 666759 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: -1.000E+00 The incDFT Threshold for Density Matrix is: -1.000E+00 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.22 s wall 0.26 s Total DFTman time = 0.22 CPUs 0.26 Wall Fock build time: 0.61 s (CPU) 0.66 s (wall) DIIS Errors: Max 7.53E-01 RMS 9.98E-02 Current DIIS subspace size = 1 REM_GRID_RESTART_DIIS = 0 --------------------------------------- Cycle Energy DIIS Error --------------------------------------- 1 -115.8553963760 9.98E-02 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.19 s wall 0.19 s Total DFTman time = 0.19 CPUs 0.19 Wall Fock build time: 0.28 s (CPU) 0.28 s (wall) DIIS Errors: Max 1.93E-01 RMS 1.57E-02 Current DIIS subspace size = 2 REM_GRID_RESTART_DIIS = 0 2 -115.6668897205 1.57E-02 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.19 s wall 0.19 s Total DFTman time = 0.19 CPUs 0.19 Wall Fock build time: 0.28 s (CPU) 0.28 s (wall) DIIS Errors: Max 3.03E-01 RMS 2.31E-02 Current DIIS subspace size = 3 REM_GRID_RESTART_DIIS = 0 3 -115.6128068963 2.31E-02 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.19 s wall 0.19 s Total DFTman time = 0.19 CPUs 0.19 Wall Fock build time: 0.28 s (CPU) 0.28 s (wall) DIIS Errors: Max 2.81E-02 RMS 2.29E-03 Current DIIS subspace size = 4 REM_GRID_RESTART_DIIS = 0 4 -115.7229417699 2.29E-03 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.19 s wall 0.19 s Total DFTman time = 0.19 CPUs 0.19 Wall Fock build time: 0.28 s (CPU) 0.28 s (wall) DIIS Errors: Max 8.33E-03 RMS 7.90E-04 Current DIIS subspace size = 5 REM_GRID_RESTART_DIIS = 0 5 -115.7239632841 7.90E-04 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.19 s wall 0.19 s Total DFTman time = 0.19 CPUs 0.19 Wall Fock build time: 0.28 s (CPU) 0.28 s (wall) DIIS Errors: Max 7.27E-04 RMS 9.99E-05 Current DIIS subspace size = 6 REM_GRID_RESTART_DIIS = 0 6 -115.7241050451 9.99E-05 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.19 s wall 0.19 s Total DFTman time = 0.19 CPUs 0.19 Wall Fock build time: 0.28 s (CPU) 0.28 s (wall) DIIS Errors: Max 7.46E-05 RMS 7.53E-06 Current DIIS subspace size = 7 REM_GRID_RESTART_DIIS = 0 7 -115.7241073380 7.53E-06 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.18 s wall 0.18 s Total DFTman time = 0.18 CPUs 0.18 Wall Fock build time: 0.27 s (CPU) 0.27 s (wall) DIIS Errors: Max 9.36E-06 RMS 1.26E-06 Current DIIS subspace size = 8 REM_GRID_RESTART_DIIS = 0 8 -115.7241073519 1.26E-06 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.18 s wall 0.18 s Total DFTman time = 0.18 CPUs 0.18 Wall Fock build time: 0.27 s (CPU) 0.27 s (wall) DIIS Errors: Max 1.35E-06 RMS 1.71E-07 Current DIIS subspace size = 9 REM_GRID_RESTART_DIIS = 0 9 -115.7241073527 1.71E-07 00000 Finding J and K together Job number = 22, Threshold = 1.00E-14 Approximate symmetry reduction factor = 1.000000 Reusing in-core integrals buffer for job 22 Target Grid is being used XC job = XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 1.000E-14 IncDFT is : ON The incDFT Threshold for XC Quadrature is: 1.000E-10 The incDFT Threshold for Density Matrix is: 1.000E-10 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.16 s wall 0.16 s Total DFTman time = 0.16 CPUs 0.16 Wall Fock build time: 0.25 s (CPU) 0.25 s (wall) DIIS Errors: Max 2.52E-07 RMS 2.82E-08 Current DIIS subspace size = 10 REM_GRID_RESTART_DIIS = 0 10 -115.7241073533 2.82E-08 00000 Convergence criterion met --------------------------------------- SCF time: CPU 3.13 s wall 3.17 s WARNING! The DFT part of the D-SCF code is not yet well tested WARNING: SYMMETRY USAGE disabled in D-CPSCF for now... ==================================================== === === === D-GIAO-SCF === === === === J.Kussmann and C.Ochsenfeld === === === === === ==================================================== Job number = 82, Threshold = 1.00E-14 Total number of integrals generated = 6882 MakeEFS time: CPU 0.01 s wall 0.01 s ============================================= === === === Let's do D-CPSCF === === === ============================================= Using standard thresholds as set in input file LEQS: solver= 40 itmax= 100 lev2max= 75 tol= 0e+00 lev2tol= 1e-02 itol= 2 dodiis = 5 Sinv time: CPU 0.00 s wall 0.00 s There are 3 perturbations to be evaluated (Bx, By, Bz) GIAO-D-CPSCF will evaluate 3 perturbation(s) at once ============================================================ NEXT PERTURBATION(S).... 0 --> 2 Build one-electron first derivatives... (d/dB) Job number = 80, Threshold = 1.00E-14 Symmetry turned off temporarily Symmetry turned back on getshB time: CPU 0.01 s wall 0.02 s getPSxP time: CPU 0.00 s wall 0.00 s Calculating d/dB J and d/dB K Job number = 185, Threshold = 1.00E-14 Total number of integrals generated = 666759 MakeJKB time: CPU 1.30 s wall 1.32 s XC job = EXPLICIT_BFIELD_1STDRV_OF_XCMTRX Do we need the first derivatives of the weights? no Do we need the second derivatives of the weights? no Do the becke weights directly? no The Small Product Threshold is : 1.000E-11 The SigS2 Reduction Threshold is : 0.000E+00 CPU 0.00 s wall 0.00 s Total Number of Grid Points = 8168 CPU 0.53 s wall 0.54 s Total DFTman time = 0.53 CPUs 0.54 Wall getderivB time: CPU 1.83 s wall 1.86 s RHS time: CPU 1.85 s wall 1.88 s Job number = 81, Threshold = 1.00E-14 Total number of integrals generated = 6882 MakeSOI time: CPU 0.01 s wall 0.02 s Level-2 iteration 0 max. difference = 1.000000e+10 Now solving A1x=b via cg ... Level-1 loop converged --- 10 iterations Final A1x residuum = 9.056025e-03 max_element = 5.743904e-02 CG time: CPU 0.02 s wall 0.02 s Done with level 1 ... and now level 3 Job number = 32, Threshold = 1.00E-14 Total number of integrals generated = 666759 getnfock time: CPU 0.40 s wall 0.40 s Fock in Hess time: CPU 0.40 s wall 0.40 s Job number = 81, Threshold = 1.00E-14 Total number of integrals generated = 6882 MakeSOI time: CPU 0.01 s wall 0.01 s ====================================================== Intermediate isotropic shifts ====================================================== ATOM ISOTROPIC DIFF ------------------------------------------------ Atom C 1 155.37251154 -169.66220093 Atom O 2 337.92397933 -192.30566886 Atom H 3 28.87525152 -0.98727831 Atom H 4 28.87358137 -0.98667001 Atom H 5 28.78013532 -0.19122107 Atom H 6 31.51573319 1.44936524 max. difference: -192.30566886 (Nuc. 2) ====================================================== Level-2 iteration 1 max. difference = 1.923057e+02 Now solving A1x=b via cg ... Level-1 loop converged --- 10 iterations Final A1x residuum = 3.926965e-02 max_element = 2.468833e-01 CG time: CPU 0.02 s wall 0.02 s Done with level 1 ... and now level 3 Job number = 32, Threshold = 1.00E-14 Total number of integrals generated = 673641 getnfock time: CPU 0.40 s wall 0.40 s Fock in Hess time: CPU 0.40 s wall 0.40 s Job number = 81, Threshold = 1.00E-14 Total number of integrals generated = 6882 MakeSOI time: CPU 0.01 s wall 0.01 s ====================================================== Intermediate isotropic shifts ====================================================== ATOM ISOTROPIC DIFF ------------------------------------------------ Atom C 1 140.69356589 -14.67894564 Atom O 2 318.36179324 -19.56218608 Atom H 3 28.61600312 -0.25924840 Atom H 4 28.61442367 -0.25915770 Atom H 5 28.65134506 -0.12879026 Atom H 6 32.02868934 0.51295615 max. difference: -19.56218608 (Nuc. 2) ====================================================== Level-2 iteration 2 max. difference = 1.956219e+01 Now solving A1x=b via cg ... Level-1 loop converged --- 10 iterations Final A1x residuum = 4.284896e-02 max_element = 2.694381e-01 CG time: CPU 0.02 s wall 0.02 s Done with level 1 ... and now level 3 Job number = 32, Threshold = 1.00E-14 Total number of integrals generated = 673641 getnfock time: CPU 0.40 s wall 0.40 s Fock in Hess time: CPU 0.40 s wall 0.40 s Job number = 81, Threshold = 1.00E-14 Total number of integrals generated = 6882 MakeSOI time: CPU 0.01 s wall 0.01 s ====================================================== Intermediate isotropic shifts ====================================================== ATOM ISOTROPIC DIFF ------------------------------------------------ Atom C 1 139.51481212 -1.17875377 Atom O 2 314.70788806 -3.65390518 Atom H 3 28.55273306 -0.06327006 Atom H 4 28.55116482 -0.06325885 Atom H 5 28.63611231 -0.01523276 Atom H 6 32.21861715 0.18992781 max. difference: -3.65390518 (Nuc. 2) ====================================================== Level-2 iteration 3 max. difference = 3.653905e+00 Now solving A1x=b via cg ... Level-1 loop converged --- 10 iterations Final A1x residuum = 4.341979e-02 max_element = 2.729502e-01 CG time: CPU 0.02 s wall 0.02 s Done with level 1 ... and now level 3 Job number = 32, Threshold = 1.00E-14 Total number of integrals generated = 673641 getnfock time: CPU 0.39 s wall 0.39 s Fock in Hess time: CPU 0.39 s wall 0.39 s Job number = 81, Threshold = 1.00E-14 Total number of integrals generated = 6882 MakeSOI time: CPU 0.01 s wall 0.01 s ====================================================== Intermediate isotropic shifts ====================================================== ATOM ISOTROPIC DIFF ------------------------------------------------ Atom C 1 139.54988219 0.03507007 Atom O 2 314.12083213 -0.58705594 Atom H 3 28.54661702 -0.00611604 Atom H 4 28.54505115 -0.00611367 Atom H 5 28.63419261 -0.00191970 Atom H 6 32.25228636 0.03366921 max. difference: -0.58705594 (Nuc. 2) ====================================================== Level-2 iteration 4 max. difference = 5.870559e-01 Now solving A1x=b via cg ... Level-1 loop converged --- 10 iterations Final A1x residuum = 4.347522e-02 max_element = 2.732452e-01 CG time: CPU 0.02 s wall 0.02 s Done with level 1 ... and now level 3 Job number = 32, Threshold = 1.00E-14 Total number of integrals generated = 673641 getnfock time: CPU 0.39 s wall 0.39 s Fock in Hess time: CPU 0.39 s wall 0.39 s Job number = 81, Threshold = 1.00E-14 Total number of integrals generated = 6882 MakeSOI time: CPU 0.01 s wall 0.01 s ====================================================== Intermediate isotropic shifts ====================================================== ATOM ISOTROPIC DIFF ------------------------------------------------ Atom C 1 139.54950329 -0.00037891 Atom O 2 314.10970993 -0.01112220 Atom H 3 28.54636683 -0.00025019 Atom H 4 28.54480115 -0.00025001 Atom H 5 28.63368481 -0.00050780 Atom H 6 32.25376174 0.00147538 max. difference: -0.01112220 (Nuc. 2) ====================================================== Level-2 iteration 5 max. difference = 1.112220e-02 Now solving A1x=b via cg ... Level-1 loop converged --- 10 iterations Final A1x residuum = 4.347035e-02 max_element = 2.732140e-01 CG time: CPU 0.02 s wall 0.02 s Done with level 1 ... and now level 3 Job number = 32, Threshold = 1.00E-14 Total number of integrals generated = 673641 getnfock time: CPU 0.39 s wall 0.40 s Fock in Hess time: CPU 0.39 s wall 0.40 s Job number = 81, Threshold = 1.00E-14 Total number of integrals generated = 6882 MakeSOI time: CPU 0.01 s wall 0.01 s ====================================================== Intermediate isotropic shifts ====================================================== ATOM ISOTROPIC DIFF ------------------------------------------------ Atom C 1 139.54974364 0.00024035 Atom O 2 314.11692792 0.00721800 Atom H 3 28.54643103 0.00006420 Atom H 4 28.54486538 0.00006423 Atom H 5 28.63364455 -0.00004026 Atom H 6 32.25366963 -0.00009212 max. difference: 0.00721800 (Nuc. 2) ====================================================== Level-2 iteration 6 max. difference = 7.217996e-03 D-CPSCF converged!!! Level-2 loop converged!!! ========================= Job number = 81, Threshold = 1.00E-14 MakeSOI time: CPU 0.01 s wall 0.01 s A miracle has come to pass --- everything converged!!! D-CPSCF terminated its mission successfully ============================================= === === === Ciao D-CPSCF ... === === === ============================================= WARNING: no symmetry was used (preliminary integrals) ============================================= === === === NMR-SHIELDING TENSORS (SCF) === === === ============================================= ------------------- -- ATOM C 1 -- ------------------- ISOTROPIC: 139.54974364 ANISOTROPIC: 74.34978117 diamagnetic (undisturbed density) part of shielding tensor (EFS) Trace = 254.41638756 Full Tensor: 263.40828024 -2.39849207 -0.00032720 -0.91479292 249.75418494 0.00020988 -0.00013997 0.00028050 250.08669749 paramagnetic (undisturbed density) part of shielding tensor (SOILP) Trace = -10.90092326 Full Tensor: -7.88828187 -1.41904686 -0.00017382 -1.05140186 -12.95153575 -0.00008344 0.00083011 -0.00002845 -11.86295217 paramagnetic (disturbed density) part of shielding tensor (SOI) Trace = -103.96572065 Full Tensor: -67.49377300 -3.65993353 0.00112300 -7.66565399 -124.13137328 -0.00337769 -0.00083811 -0.00306505 -120.27201568 total shielding tensor Trace = 139.54974364 Full Tensor: 188.02622538 -7.47747246 0.00062198 -9.63184878 112.67127590 -0.00325125 -0.00014797 -0.00281300 117.95172965 ------------------- -- ATOM O 2 -- ------------------- ISOTROPIC: 314.11692792 ANISOTROPIC: 113.60317660 diamagnetic (undisturbed density) part of shielding tensor (EFS) Trace = 395.18194127 Full Tensor: 409.45047546 1.96532436 -0.00033457 1.34935474 394.24182516 0.00039764 -0.00045226 0.00041347 381.85352318 paramagnetic (undisturbed density) part of shielding tensor (SOILP) Trace = -9.27802888 Full Tensor: -3.44663365 0.16967355 0.00000450 -0.14134062 -8.74029969 0.00009959 -0.00015766 0.00017025 -15.64715328 paramagnetic (disturbed density) part of shielding tensor (SOI) Trace = -71.78698447 Full Tensor: -116.82377857 25.18370075 0.00173668 65.66662186 -18.69909912 -0.00013761 0.00816923 -0.00119914 -79.83807571 total shielding tensor Trace = 314.11692792 Full Tensor: 289.18006324 27.31869866 0.00140662 66.87463597 366.80242634 0.00035961 0.00755930 -0.00061542 286.36829419 ------------------- -- ATOM H 3 -- ------------------- ISOTROPIC: 28.54643103 ANISOTROPIC: 8.14208193 diamagnetic (undisturbed density) part of shielding tensor (EFS) Trace = 25.84461495 Full Tensor: 22.69348703 -4.31657493 -6.35557451 -4.02153744 22.88851646 8.92097173 -6.44721371 9.31191875 31.95184135 paramagnetic (undisturbed density) part of shielding tensor (SOILP) Trace = 2.77681597 Full Tensor: 5.62367572 0.72223627 1.41154597 0.92880190 2.78307980 -3.31511627 2.08965056 -3.37770993 -0.07630760 paramagnetic (disturbed density) part of shielding tensor (SOI) Trace = -0.07499989 Full Tensor: 3.53798203 1.26741908 1.03927323 1.76397478 0.20083772 -3.65666401 3.38920649 -4.10468525 -3.96381941 total shielding tensor Trace = 28.54643103 Full Tensor: 31.85514478 -2.32691958 -3.90475532 -1.32876076 25.87243398 1.94919145 -0.96835666 1.82952357 27.91171434 ------------------- -- ATOM H 4 -- ------------------- ISOTROPIC: 28.54486538 ANISOTROPIC: 8.14220142 diamagnetic (undisturbed density) part of shielding tensor (EFS) Trace = 25.84267465 Full Tensor: 22.69159516 -4.31582462 6.35502729 -4.02079936 22.88599854 -8.91985159 6.44673943 -9.31084652 31.95043025 paramagnetic (undisturbed density) part of shielding tensor (SOILP) Trace = 2.77671792 Full Tensor: 5.62355634 0.72205879 -1.41147190 0.92841841 2.78350450 3.31475412 -2.08903327 3.37722487 -0.07690707 paramagnetic (disturbed density) part of shielding tensor (SOI) Trace = -0.07452720 Full Tensor: 3.53800561 1.26716429 -1.03906853 1.76331101 0.20134079 3.65514051 -3.38906560 4.10367752 -3.96292798 total shielding tensor Trace = 28.54486538 Full Tensor: 31.85315710 -2.32660155 3.90448686 -1.32906994 25.87084383 -1.94995696 0.96864056 -1.82994413 27.91059520 ------------------- -- ATOM H 5 -- ------------------- ISOTROPIC: 28.63364455 ANISOTROPIC: 6.70543506 diamagnetic (undisturbed density) part of shielding tensor (EFS) Trace = 25.46388860 Full Tensor: 24.63908113 8.97446968 0.00025693 9.52010218 34.78072665 0.00054083 0.00031381 0.00061929 16.97185802 paramagnetic (undisturbed density) part of shielding tensor (SOILP) Trace = 2.98621262 Full Tensor: 4.86704458 -3.26926475 -0.00017455 -3.43188946 -1.63699811 -0.00050584 0.00002946 -0.00034194 5.72859141 paramagnetic (disturbed density) part of shielding tensor (SOI) Trace = 0.18354332 Full Tensor: 2.09518845 -1.57294690 0.00003791 -4.91512035 -4.83390293 -0.00005477 -0.00045514 -0.00059105 3.28934445 total shielding tensor Trace = 28.63364455 Full Tensor: 31.60131416 4.13225803 0.00012029 1.17309237 28.30982561 -0.00001978 -0.00011187 -0.00031370 25.98979387 ------------------- -- ATOM H 6 -- ------------------- ISOTROPIC: 32.25366963 ANISOTROPIC: 17.31907530 diamagnetic (undisturbed density) part of shielding tensor (EFS) Trace = 24.35464645 Full Tensor: 23.06592562 12.70442946 0.00028027 11.45397867 37.84207571 0.00070281 0.00024469 0.00070940 12.15593801 paramagnetic (undisturbed density) part of shielding tensor (SOILP) Trace = 3.45469460 Full Tensor: 4.83353485 -2.69491711 -0.00001927 -3.35782050 -0.50253740 -0.00010963 -0.00009638 -0.00021931 6.03308636 paramagnetic (disturbed density) part of shielding tensor (SOI) Trace = 4.44432858 Full Tensor: 6.12536095 -2.95752891 -0.00017558 -3.34692241 1.95405406 -0.00025744 -0.00039082 -0.00003665 5.25357072 total shielding tensor Trace = 32.25366963 Full Tensor: 34.02482142 7.05198344 0.00008542 4.74923576 39.29359237 0.00033574 -0.00024252 0.00045344 23.44259509 Summary of detailed contributions =================================== ATOM DIAMAGNETIC PARAMAGNETIC (P) PARAMAGNETIC (d/dB P) -------------------------------------------------------------------------- C 1 254.41638756 -10.90092326 -103.96572065 O 2 395.18194127 -9.27802888 -71.78698447 H 3 25.84461495 2.77681597 -0.07499989 H 4 25.84267465 2.77671792 -0.07452720 H 5 25.46388860 2.98621262 0.18354332 H 6 24.35464645 3.45469460 4.44432858 Summary ========= ATOM ISOTROPIC ANISOTROPIC REL. SHIFTS ------------------------------------------------------------------------ Atom C 1 139.54974364 74.34978117 Atom O 2 314.11692792 113.60317660 Atom H 3 28.54643103 8.14208193 Atom H 4 28.54486538 8.14220142 Atom H 5 28.63364455 6.70543506 Atom H 6 32.25366963 17.31907530 --- SHIFTS DONE --- ======================================================== = cite: - C. Ochsenfeld, J. Kussmann, F. Koziol, = = Angew. Chem. Int. Ed. 43, 4485 (2004) = = - J. Kussmann and C. Ochsenfeld, = = J. Chem. Phys. 127, 054103 (2007) = ======================================================== WARNING: no symmetry was used (preliminary integrals) D-SCF time: CPU 4.49 s wall 4.53 s Symmetry turned off temporarily A cutoff of 1.0D-14 yielded 171 shell pairs There are 1147 function pairs Analysis of SCF Wavefunction -------------------------------------------------------------- Orbital Energies (a.u.) -------------------------------------------------------------- Alpha MOs -- Occupied -- -19.159 -10.232 -1.028 -0.688 -0.514 -0.450 -0.435 -0.343 -0.280 -- Virtual -- -0.001 0.025 0.052 0.054 0.147 0.174 0.188 0.195 0.207 0.209 0.246 0.283 0.330 0.640 0.646 0.658 0.891 0.896 1.012 1.039 1.153 1.185 1.213 1.267 1.495 1.512 1.619 1.732 2.071 2.116 2.189 2.351 2.379 2.478 2.848 4.003 4.262 -------------------------------------------------------------- Ground-State Mulliken Net Atomic Charges Atom Charge (a.u.) ---------------------------------------- 1 C -0.354488 2 O -0.641386 3 H 0.175161 4 H 0.175139 5 H 0.198570 6 H 0.447004 ---------------------------------------- Sum of atomic charges = 0.000000 ----------------------------------------------------------------- Cartesian Multipole Moments ----------------------------------------------------------------- Charge (ESU x 10^10) 0.0000 Dipole Moment (Debye) X 0.9887 Y -1.7028 Z -0.0001 Tot 1.9690 Quadrupole Moments (Debye-Ang) XX -13.3323 XY 2.5633 YY -12.3220 XZ 0.0000 YZ 0.0002 ZZ -14.0621 Octapole Moments (Debye-Ang^2) XXX -3.7880 XXY -2.3966 XYY -1.5829 YYY -0.8503 XXZ -0.0002 XYZ 0.0001 YYZ -0.0001 XZZ -0.1728 YZZ -0.7885 ZZZ -0.0003 Hexadecapole Moments (Debye-Ang^3) XXXX -63.4677 XXXY 4.7782 XXYY -13.0479 XYYY 3.3843 YYYY -21.2781 XXXZ -0.0004 XXYZ 0.0003 XYYZ -0.0001 YYYZ 0.0004 XXZZ -15.2090 XYZZ 0.1850 YYZZ -7.2378 XZZZ -0.0003 YZZZ 0.0002 ZZZZ -21.4365 ----------------------------------------------------------------- JobOver = TRUE Total job time: 8.39s(wall), 8.09s(cpu) Tue Jan 20 17:28:10 2009 ************************************************************* * * * Thank you very much for using Q-Chem. Have a nice day. * * * ************************************************************* *** MISSION COMPLETED -- STARFLEET OUT *** avogadro-1.1.1/testfiles/methanol.cml0000644000175000001440000000365212250371054017040 0ustar marcususers Methanol 32.0419 32.0262147 -98 64 avogadro-1.1.1/testfiles/untitled01.gpr0000644000175000001440000000234712250371054017237 0ustar marcususers!Header gpr 111 !Info 1 allmm 80 !Atoms 14 0 6 0 0 1 6 0 0 2 6 0 0 3 1 0 0 4 1 0 0 5 1 0 0 6 1 0 0 7 1 0 0 8 1 0 0 9 1 0 0 10 1 0 0 11 8 0 0 12 1 0 0 13 1 0 0 !Bonds 12 0 1 S 1 2 S 0 3 S 0 4 S 0 5 S 1 6 S 1 7 S 2 8 S 2 9 S 2 10 S 11 12 S 11 13 S !Coord 0 +0.11802726238966 +0.0752129405736923 -0.00883992202579975 1 +0.112236581742764 -0.0789823159575462 -0.00468448316678405 2 -0.0341450311243534 -0.12753164768219 +0.00180736707989126 3 +0.222996324300766 +0.107847929000854 -0.0137977255508304 4 +0.0716076120734215 +0.11690579354763 +0.0817857533693314 5 +0.0645227059721947 +0.11236334592104 -0.0975194945931435 6 +0.166533678770065 -0.115054793655872 +0.0840253084897995 7 +0.160067677497864 -0.119654186069965 -0.0951102152466774 8 -0.0362064726650715 -0.237505152821541 +0.00491532124578953 9 -0.0890282914042473 -0.0929905995726585 -0.087078757584095 10 -0.0827861502766609 -0.0880236849188805 +0.0922482684254646 11 -0.200527355074883 +0.168387651443481 -0.0055553182028234 12 -0.204749271273613 +0.166345566511154 +0.0893248170614243 13 -0.26854932308197 +0.112679116427898 -0.041520930826664 !PartialCharges 0 +0 1 +0 2 +0 3 +0 4 +0 5 +0 6 +0 7 +0 8 +0 9 +0 10 +0 11 -0.5 12 +0.25 13 +0.25 !GAMESS !End avogadro-1.1.1/testfiles/porphyrin.cml0000644000175000001440000001257312250371054017265 0ustar marcususers 1/C20H14N4/c1-2-14-10-16-5-6-18(23-16)12-20-8-7-19(24-20)11-17-4-3-15(22-17)9-13(1)21-14/h1-12,21,24H/b13-9-,14-10-,15-9-,16-10-,17-11-,18-12-,19-11-,20-12- Porphyrin 310.3520 310.1218465 avogadro-1.1.1/testfiles/methane-gaussian.fchk0000644000175000001440000005227712250371054020631 0ustar marcususersMethane test molecule FOpt RHF 6-31G Number of atoms I 5 Charge I 0 Multiplicity I 1 Number of electrons I 10 Number of alpha electrons I 5 Number of beta electrons I 5 Number of basis functions I 17 Number of independant functions I 17 Number of point charges in /Mol/ I 0 Number of translation vectors I 0 Number of symbols in /Mol/ I 0 Info1-9 I N= 9 12 12 0 0 0 110 2 1 1 Num ILSW I 100 ILSW I N= 100 0 1 0 0 2 0 0 0 0 0 0 1000000 0 0 -1 0 0 0 0 1000000 0 0 1 0 1 0 0 0 1000000 0 0 0 100000 0 -1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1000000 1000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Number of contracted shells I 11 Highest angular momentum I 1 Largest degree of contraction I 6 Number of primitive shells I 26 Pure/Cartesian d shells I 1 Pure/Cartesian f shells I 0 Virial Ratio R 1.998171631903149E+00 SCF Energy R -4.018055416048613E+01 Total Energy R -4.018055416048613E+01 RMS Force R 1.618806479813367E-05 RMS Density R 2.756412753795195E-09 Atomic numbers I N= 5 6 1 1 1 1 Nuclear charges R N= 5 6.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 Current cartesian coordinates R N= 15 -5.05474725E-08 1.77798861E-05 -5.79203578E-05 1.67020056E+00 -8.03639846E-01 -8.63975982E-01 -1.66938951E+00 -8.05066934E-01 -8.64214352E-01 -8.46534857E-04 2.02663365E+00 -2.73038842E-01 3.57969963E-05 -4.18033550E-01 2.00157670E+00 Atom Types C N= 5 Int Atom Types I N= 5 0 0 0 0 0 Force Field I 0 MM charges R N= 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Integer atomic weights I N= 5 12 1 1 1 1 Real atomic weights R N= 5 1.20000000E+01 1.00782504E+00 1.00782504E+00 1.00782504E+00 1.00782504E+00 Atom residue info I N= 5 0 0 0 0 0 Atom fragment info I N= 5 0 0 0 0 0 Atom residue num I N= 5 0 0 0 0 0 Nuclear spins I N= 5 0 1 1 1 1 Nuclear ZEff R N= 5 -3.60000000E+00 -1.00000000E+00 -1.00000000E+00 -1.00000000E+00 -1.00000000E+00 Nuclear QMom R N= 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Nuclear GFac R N= 5 0.00000000E+00 2.79284600E+00 2.79284600E+00 2.79284600E+00 2.79284600E+00 MicOpt I N= 5 -1 -1 -1 -1 -1 Constraint Structure R N= 15 -1.73476858E-03 0.00000000E+00 -5.45941880E-03 -1.19015794E+00 -1.75911724E+00 -3.71650549E-01 -1.18941542E+00 1.75943938E+00 -3.72444234E-01 1.74131076E+00 -6.52854396E-04 -1.27146254E+00 6.48671210E-01 3.29631561E-04 2.04831384E+00 ONIOM Charges I N= 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ONIOM Multiplicities I N= 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Atom Layers I N= 5 1 1 1 1 1 Atom Modifiers I N= 5 0 0 0 0 0 Atom Modified Types C N= 5 Int Atom Modified Types I N= 5 0 0 0 0 0 Link Atoms I N= 5 0 0 0 0 0 Atom Modified MM Charges R N= 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Link Distances R N= 20 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 MxBond I 4 NBond I N= 5 4 1 1 1 1 IBond I N= 20 2 3 4 5 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 RBond R N= 20 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Shell types I N= 11 0 -1 -1 0 0 0 0 0 0 0 0 Number of primitives per shell I N= 11 6 3 1 3 1 3 1 3 1 3 1 Shell to atom map I N= 11 1 1 1 2 2 3 3 4 4 5 5 Primitive exponents R N= 26 3.04752488E+03 4.57369518E+02 1.03948685E+02 2.92101553E+01 9.28666296E+00 3.16392696E+00 7.86827235E+00 1.88128854E+00 5.44249258E-01 1.68714478E-01 1.87311370E+01 2.82539436E+00 6.40121692E-01 1.61277759E-01 1.87311370E+01 2.82539436E+00 6.40121692E-01 1.61277759E-01 1.87311370E+01 2.82539436E+00 6.40121692E-01 1.61277759E-01 1.87311370E+01 2.82539436E+00 6.40121692E-01 1.61277759E-01 Contraction coefficients R N= 26 1.83473713E-03 1.40373228E-02 6.88426223E-02 2.32184443E-01 4.67941348E-01 3.62311985E-01 -1.19332420E-01 -1.60854152E-01 1.14345644E+00 1.00000000E+00 3.34946043E-02 2.34726953E-01 8.13757326E-01 1.00000000E+00 3.34946043E-02 2.34726953E-01 8.13757326E-01 1.00000000E+00 3.34946043E-02 2.34726953E-01 8.13757326E-01 1.00000000E+00 3.34946043E-02 2.34726953E-01 8.13757326E-01 1.00000000E+00 P(S=P) Contraction coefficients R N= 26 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.89990666E-02 3.16423961E-01 7.44308291E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Coordinates of each shell R N= 33 -5.05474725E-08 1.77798861E-05 -5.79203578E-05 -5.05474725E-08 1.77798861E-05 -5.79203578E-05 -5.05474725E-08 1.77798861E-05 -5.79203578E-05 1.67020056E+00 -8.03639846E-01 -8.63975982E-01 1.67020056E+00 -8.03639846E-01 -8.63975982E-01 -1.66938951E+00 -8.05066934E-01 -8.64214352E-01 -1.66938951E+00 -8.05066934E-01 -8.64214352E-01 -8.46534857E-04 2.02663365E+00 -2.73038842E-01 -8.46534857E-04 2.02663365E+00 -2.73038842E-01 3.57969963E-05 -4.18033550E-01 2.00157670E+00 3.57969963E-05 -4.18033550E-01 2.00157670E+00 Alpha Orbital Energies R N= 17 -1.12037256E+01 -9.49073882E-01 -5.45049755E-01 -5.45045093E-01 -5.45012685E-01 2.56252685E-01 3.25411194E-01 3.25416630E-01 3.25421844E-01 7.40406448E-01 7.40446249E-01 7.40457595E-01 1.23322507E+00 1.23325226E+00 1.23325808E+00 1.25260063E+00 1.32928955E+00 Alpha MO coefficients R N= 289 9.96141229E-01 2.55552316E-02 -1.80788335E-11 -9.53870095E-08 4.47764848E-07 -1.65978170E-02 -3.38424481E-11 2.71417681E-07 -1.23134493E-06 -1.08789864E-04 3.14819005E-03 -1.08789996E-04 3.14819074E-03 -1.08802500E-04 3.14824260E-03 -1.08750282E-04 3.14913947E-03 -1.97195269E-01 3.73898692E-01 -2.08109180E-08 -7.75958494E-06 4.54107213E-05 3.82478164E-01 2.64986529E-09 -4.33422183E-06 1.87782869E-05 1.35003802E-01 3.29635464E-02 1.35003844E-01 3.29635527E-02 1.35007228E-01 3.29640910E-02 1.35031907E-01 3.29631757E-02 -9.33303972E-09 1.14251458E-08 4.37357529E-01 1.32541453E-03 6.97470807E-05 5.27714726E-08 2.21308236E-01 6.70661825E-04 3.52950635E-05 2.45962366E-01 1.99660156E-01 -2.46602477E-01 -2.00179740E-01 7.74619110E-04 6.28799993E-04 -1.34487059E-04 -1.09170473E-04 -7.05375834E-06 1.48818407E-05 -1.28306070E-03 4.28101296E-01 -8.95235169E-02 1.52953597E-05 -6.49254779E-04 2.16622791E-01 -4.52918393E-02 -9.06531665E-02 -7.35843436E-02 -8.94069895E-02 -7.25727408E-02 3.00851574E-01 2.44222502E-01 -1.20787662E-01 -9.80512933E-02 1.60368508E-05 -3.13072401E-05 -3.39538856E-04 8.95168436E-02 4.28109654E-01 -4.47143809E-05 -1.71832156E-04 4.53036023E-02 2.16624814E-01 -1.49228188E-01 -1.21159051E-01 -1.48923293E-01 -1.20911516E-01 2.17404794E-02 1.76395762E-02 2.76397497E-01 2.24391038E-01 -1.53494116E-01 9.15498736E-02 6.77933606E-08 -2.54171124E-06 -2.00678438E-05 2.79867068E+00 2.49681092E-07 -4.19555892E-05 7.58980587E-05 3.69032073E-03 -1.04533535E+00 3.69035307E-03 -1.04533507E+00 3.69285940E-03 -1.04531091E+00 3.72515568E-03 -1.04526242E+00 6.47241943E-06 1.26758114E-05 9.80396381E-04 -2.19928779E-01 -2.02420207E-01 -3.25967423E-04 4.94237109E-03 -1.10873724E+00 -1.02040075E+00 -4.77466290E-02 -1.17393010E+00 -4.73533580E-02 -1.16425443E+00 5.27233769E-02 1.29750775E+00 4.23324506E-02 1.04113747E+00 6.49594381E-09 -3.51051493E-08 2.98916155E-01 8.24672181E-04 5.51610241E-04 9.54495510E-08 1.50695903E+00 4.15761256E-03 2.78081576E-03 -6.72663524E-02 -1.65515578E+00 6.75416971E-02 1.66192756E+00 -1.71181374E-04 -4.21247926E-03 -1.04075935E-04 -2.55954342E-03 6.22696525E-06 2.26666494E-05 -1.52612619E-04 2.02431235E-01 -2.19922592E-01 -4.05724933E-04 -7.69415198E-04 1.02056147E+00 -1.10866879E+00 -3.69394845E-03 -8.99970862E-02 -3.73083827E-03 -9.09049316E-02 -6.35427612E-02 -1.56284844E+00 7.08962395E-02 1.74434803E+00 -7.38716885E-06 7.70213243E-05 -1.91677481E-04 6.22675747E-02 -7.66558942E-01 1.59184144E-04 3.64958642E-04 -1.18551706E-01 1.45846469E+00 2.14277083E-01 7.61085237E-02 2.14534012E-01 7.62003259E-02 1.17502789E-01 4.17755455E-02 -5.46189490E-01 -1.94485966E-01 -2.60703226E-08 -2.08443654E-05 -7.99792792E-04 -7.66601039E-01 -6.22852338E-02 2.10817714E-05 1.52223466E-03 1.45882590E+00 1.18446874E-01 2.33977914E-01 8.34032041E-02 2.35300832E-01 8.38752706E-02 -5.37822866E-01 -1.91765359E-01 6.85146441E-02 2.45112641E-02 1.19973941E-08 1.06909720E-07 -7.69136982E-01 7.81692425E-04 2.55871589E-04 -4.83606581E-07 1.46372632E+00 -1.48737609E-03 -4.86569216E-04 -4.49883052E-01 -1.60491390E-01 4.49069959E-01 1.60201972E-01 7.57913720E-04 2.70277947E-04 5.53059864E-05 1.95076932E-05 2.86474379E-04 -2.38205422E-03 -2.12009165E-03 4.30798001E-01 7.89854461E-01 2.81869435E-03 2.44608679E-03 -4.97041437E-01 -9.11344203E-01 5.80614257E-01 -8.84980945E-01 5.77094004E-01 -8.79608337E-01 -3.66960020E-01 5.61288469E-01 -7.84004393E-01 1.19795719E+00 -8.25383430E-07 5.36181868E-06 -8.99688789E-01 4.89059842E-04 -2.68190893E-03 -4.89859401E-06 1.03800975E+00 -5.64259341E-04 3.09436711E-03 8.41597757E-01 -1.28445027E+00 -8.43356770E-01 1.28712699E+00 -1.39860977E-03 2.13048532E-03 3.13849664E-03 -4.79473511E-03 -2.14388320E-04 1.62454766E-03 1.71348605E-03 7.89857482E-01 -4.30826850E-01 -1.77003407E-03 -1.97691449E-03 -9.11296570E-01 4.97084433E-01 1.44320128E-01 -2.21224746E-01 1.48103700E-01 -2.26999240E-01 -9.64970671E-01 1.47179379E+00 6.67531943E-01 -1.01987825E+00 1.02620315E-01 -1.09996403E+00 2.48091394E-06 3.89685902E-04 -2.94257098E-03 1.52885211E+00 -2.84299028E-06 -4.08423528E-04 3.19718016E-03 6.16119683E-01 -5.89836122E-01 6.16124189E-01 -5.89843009E-01 6.16473769E-01 -5.90380869E-01 6.20744120E-01 -5.96604139E-01 -8.28170327E-02 -2.13225463E+00 8.53971714E-08 -5.63477151E-05 2.18162650E-04 5.20648035E+00 -6.79637382E-08 -6.48051792E-05 3.29945104E-04 -3.70703180E-01 -9.49303477E-01 -3.70702741E-01 -9.49304191E-01 -3.70656931E-01 -9.49370361E-01 -3.71227072E-01 -9.49172173E-01 Total SCF Density R N= 153 2.06236664E+00 -9.65488677E-02 2.80906606E-01 7.21839289E-09 -2.24980879E-08 3.82566740E-01 -2.98065372E-07 1.32937762E-06 1.12630433E-08 3.82571483E-01 -2.02347025E-06 4.51049278E-06 1.73082453E-08 -4.03309678E-06 3.82584685E-01 -1.83913310E-01 2.85167851E-01 2.13559482E-08 -8.41891188E-07 -6.30154286E-06 2.93130071E-01 -1.59538330E-09 -1.52824089E-09 1.93583429E-01 -7.06375706E-09 -7.66046224E-09 2.08912439E-08 9.79555727E-02 6.47148827E-07 3.83598079E-07 -7.04788605E-09 1.93585644E-01 4.24396736E-06 -7.49227575E-07 -1.00248210E-08 9.79565994E-02 -2.27225121E-06 -9.32481973E-07 -7.60192001E-09 4.24222663E-06 1.93587724E-01 -6.35255040E-06 -1.21548133E-08 5.32670601E-06 9.79553243E-02 -5.34644742E-02 1.00956581E-01 2.15480944E-01 -1.03684440E-01 -1.11494304E-01 1.03286222E-01 1.09035994E-01 -5.24674880E-02 -5.64189264E-02 2.18421145E-01 -6.73127865E-03 2.48163600E-02 1.74916846E-01 -8.41659045E-02 -9.05328119E-02 2.51197725E-02 8.85100618E-02 -4.25904498E-02 -4.58112487E-02 1.56619490E-01 1.22109711E-01 -5.34644894E-02 1.00956619E-01 -2.15376346E-01 -1.03868579E-01 -1.11525081E-01 1.03286213E-01 -1.08983042E-01 -5.25606506E-02 -5.64344844E-02 -2.42006095E-02 -4.03289329E-02 2.18421176E-01 -6.73127862E-03 2.48163702E-02 -1.74831895E-01 -8.43153577E-02 -9.05577679E-02 2.51197439E-02 -8.84670607E-02 -4.26660636E-02 -4.58238639E-02 -4.03289297E-02 -3.77633386E-02 1.56619470E-01 1.22109665E-01 -5.34658854E-02 1.00960084E-01 -1.09219757E-04 2.61482134E-01 -3.52395943E-02 1.03285504E-01 -5.52701787E-05 1.32312328E-01 -1.78280624E-02 -2.42008243E-02 -4.03347728E-02 -2.42008277E-02 -4.03347707E-02 2.18423764E-01 -6.73141669E-03 2.48175336E-02 -8.86637812E-05 2.12263172E-01 -2.86208845E-02 2.51174756E-02 -4.48699371E-05 1.07407152E-01 -1.44789582E-02 -4.03345377E-02 -3.77721518E-02 -4.03345392E-02 -3.77721449E-02 1.56617504E-01 1.22105447E-01 -5.34613985E-02 1.00950047E-01 4.61694894E-06 -5.39366984E-02 2.58295791E-01 1.03268709E-01 2.33050611E-06 -2.72884674E-02 1.30695565E-01 -2.41995193E-02 -4.03520821E-02 -2.41995223E-02 -4.03520762E-02 -2.41999063E-02 -4.03455065E-02 2.18437763E-01 -6.71780894E-03 2.47937620E-02 3.73814013E-06 -4.37790180E-02 2.09686714E-01 2.50877857E-02 1.88487439E-06 -2.21492754E-02 1.06100403E-01 -4.03476964E-02 -3.77945297E-02 -4.03476938E-02 -3.77945167E-02 -4.03413549E-02 -3.77834453E-02 1.56630521E-01 1.22123788E-01 Cartesian Gradient R N= 15 -9.73227962E-08 1.02283527E-05 -1.30443748E-06 3.01224968E-05 -1.31752244E-05 1.14725609E-05 -3.00278569E-05 -1.31629243E-05 1.15072092E-05 -4.96545449E-09 1.78321211E-05 9.76195407E-06 7.64835052E-09 -1.72232514E-06 -3.14372867E-05 Dipole Moment R N= 3 -1.83851944E-08 -1.56532451E-05 8.02012586E-05 QEq coupling tensors R N= 30 -3.95504000E-05 3.38861929E-08 -1.51167773E-05 5.46585013E-08 -1.04528209E-05 5.46671773E-05 -1.76583466E-01 1.69835048E-01 9.46543527E-02 1.82583649E-01 -8.78541513E-02 8.19291130E-02 -1.76240947E-01 -1.70054181E-01 9.43639188E-02 -1.82545518E-01 -8.80345315E-02 8.18770282E-02 1.76385382E-01 2.17083274E-04 -3.43344452E-01 -2.92457349E-05 7.00152549E-02 1.66959070E-01 1.76435681E-01 1.89464737E-06 1.54315674E-01 -9.08068083E-06 1.05924782E-01 -3.30751355E-01 Mulliken Charges R N= 5 -6.21819838E-01 1.55454454E-01 1.55454482E-01 1.55457083E-01 1.55453819E-01 Optimization MaxStp I 100 Optimization Job offset I 0 Optimization Num results per geometry I 2 Optimization Num geometry variables I 15 Opt point 1 Results for each geome R N= 6 0.00000000E+00 0.00000000E+00 -4.01805224E+01 0.00000000E+00 -4.01805542E+01 0.00000000E+00 Opt point 1 Geometries R N= 45 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.53298641E-04 -2.02054365E-07 -1.06135478E-03 1.15553861E+00 1.66445831E+00 -2.22435761E-01 1.15659561E+00 -1.66374289E+00 -2.22302712E-01 -1.47473723E+00 -5.22939324E-04 -1.40734921E+00 -8.40116790E-01 -1.91268746E-04 1.85845581E+00 -5.05474725E-08 1.77798861E-05 -5.79203578E-05 1.67020056E+00 -8.03639846E-01 -8.63975982E-01 -1.66938951E+00 -8.05066934E-01 -8.64214352E-01 -8.46534857E-04 2.02663365E+00 -2.73038842E-01 3.57969963E-05 -4.18033550E-01 2.00157670E+00 Opt point 1 Gradient at each geome R N= 45 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.87481183E-04 5.95246903E-08 -1.30382692E-03 -1.40174020E-03 -2.18156117E-03 4.54060045E-04 -1.40290395E-03 2.18059010E-03 4.53867589E-04 1.63343025E-03 7.08491980E-07 2.06005790E-03 5.83732718E-04 2.03047548E-07 -1.66415861E-03 -9.73227963E-08 1.02283527E-05 -1.30443748E-06 3.01224968E-05 -1.31752244E-05 1.14725609E-05 -3.00278569E-05 -1.31629243E-05 1.15072092E-05 -4.96545470E-09 1.78321211E-05 9.76195407E-06 7.64835056E-09 -1.72232514E-06 -3.14372867E-05 Optimization Number of geometries I N= 1 3 avogadro-1.1.1/testfiles/co.fchk0000644000175000001440000004054012250371054015767 0ustar marcususersco optimized SP RHF 3-21G Number of atoms I 2 Charge I 0 Multiplicity I 1 Number of electrons I 14 Number of alpha electrons I 7 Number of beta electrons I 7 Number of basis functions I 18 Number of independant functions I 18 Number of point charges in /Mol/ I 0 Number of translation vectors I 0 Info1-9 I N= 9 12 11 0 0 0 111 1 1 2 Num ILSW I 100 ILSW I N= 100 0 1 0 0 2 0 0 0 0 0 0 1000000 0 0 0 0 0 0 0 1000000 0 0 0 0 1 0 0 0 1000000 0 0 0 100000 0 -1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1000000 1000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Number of contracted shells I 6 Highest angular momentum I 1 Largest degree of contraction I 3 Number of primitive shells I 12 Pure/Cartesian d shells I 1 Pure/Cartesian f shells I 0 Virial Ratio R 2.003393627816254E+00 SCF Energy R -1.120932976164837E+02 Total Energy R -1.120932976164837E+02 RMS Density R 9.659656086868543E-05 Atomic numbers I N= 2 6 8 Nuclear charges R N= 2 6.00000000E+00 8.00000000E+00 Current cartesian coordinates R N= 6 0.00000000E+00 0.00000000E+00 -1.21908825E+00 0.00000000E+00 0.00000000E+00 9.14316184E-01 Int Atom Types I N= 2 0 0 Force Field I 0 MM charges R N= 2 0.00000000E+00 0.00000000E+00 Integer atomic weights I N= 2 12 16 Real atomic weights R N= 2 1.20000000E+01 1.59949146E+01 Atom residue info I N= 2 0 0 Atom fragment info I N= 2 0 0 Atom residue num I N= 2 0 0 Nuclear spins I N= 2 0 0 Nuclear ZEff R N= 2 -3.60000000E+00 -5.60000000E+00 Nuclear QMom R N= 2 0.00000000E+00 0.00000000E+00 Nuclear GFac R N= 2 0.00000000E+00 0.00000000E+00 MicOpt I N= 2 -1 -1 Constraint Structure R N= 6 0.00000000E+00 0.00000000E+00 -1.21908825E+00 0.00000000E+00 0.00000000E+00 9.14316184E-01 ONIOM Charges I N= 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ONIOM Multiplicities I N= 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Atom Layers I N= 2 1 1 Atom Modifiers I N= 2 0 0 Int Atom Modified Types I N= 2 0 0 Link Atoms I N= 2 0 0 Atom Modified MM Charges R N= 2 0.00000000E+00 0.00000000E+00 Link Distances R N= 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 MxBond I 1 NBond I N= 2 1 1 IBond I N= 2 2 1 RBond R N= 2 2.00000000E+00 2.00000000E+00 Shell types I N= 6 0 -1 -1 0 -1 -1 Number of primitives per shell I N= 6 3 2 1 3 2 1 Shell to atom map I N= 6 1 1 1 2 2 2 Primitive exponents R N= 12 1.72256000E+02 2.59109000E+01 5.53335000E+00 3.66498000E+00 7.70545000E-01 1.95857000E-01 3.22037000E+02 4.84308000E+01 1.04206000E+01 7.40294000E+00 1.57620000E+00 3.73684000E-01 Contraction coefficients R N= 12 6.17669074E-02 3.58794043E-01 7.00713084E-01 -3.95895162E-01 1.21583436E+00 1.00000000E+00 5.92393934E-02 3.51499961E-01 7.07657921E-01 -4.04453583E-01 1.22156176E+00 1.00000000E+00 P(S=P) Contraction coefficients R N= 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.36459947E-01 8.60618806E-01 1.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.44586107E-01 8.53955373E-01 1.00000000E+00 Coordinates of each shell R N= 18 0.00000000E+00 0.00000000E+00 -1.21908825E+00 0.00000000E+00 0.00000000E+00 -1.21908825E+00 0.00000000E+00 0.00000000E+00 -1.21908825E+00 0.00000000E+00 0.00000000E+00 9.14316184E-01 0.00000000E+00 0.00000000E+00 9.14316184E-01 0.00000000E+00 0.00000000E+00 9.14316184E-01 Alpha Orbital Energies R N= 18 -2.05791114E+01 -1.13176745E+01 -1.54771070E+00 -7.85452697E-01 -6.34781071E-01 -6.34781071E-01 -5.43235251E-01 1.61717763E-01 1.61717763E-01 4.92218413E-01 9.26349223E-01 9.26349223E-01 1.09483218E+00 1.34832809E+00 1.78398283E+00 1.79839384E+00 1.79839384E+00 3.31205758E+00 Alpha MO coefficients R N= 324 6.49915550E-04 1.27529341E-03 0.00000000E+00 0.00000000E+00 2.44698902E-03 2.08540715E-02 0.00000000E+00 0.00000000E+00 1.54138371E-02 9.83610726E-01 9.89868009E-02 0.00000000E+00 0.00000000E+00 -4.53357867E-03 -5.19279484E-02 0.00000000E+00 0.00000000E+00 1.40615561E-02 9.86175848E-01 8.81135023E-02 0.00000000E+00 0.00000000E+00 7.24815483E-03 -2.30330167E-02 0.00000000E+00 0.00000000E+00 -6.20892927E-04 -2.07507289E-04 2.09273934E-04 0.00000000E+00 0.00000000E+00 1.17361975E-03 -2.00630907E-03 0.00000000E+00 0.00000000E+00 7.43301215E-03 -1.22050108E-01 1.41831535E-01 0.00000000E+00 0.00000000E+00 1.85273195E-01 4.20711972E-02 0.00000000E+00 0.00000000E+00 -4.96486950E-02 -2.16969226E-01 2.12410332E-01 0.00000000E+00 0.00000000E+00 -1.57151833E-01 6.66727326E-01 0.00000000E+00 0.00000000E+00 -1.45011494E-01 1.34445975E-01 -1.91343660E-01 0.00000000E+00 0.00000000E+00 -1.23932885E-01 -2.52643560E-01 0.00000000E+00 0.00000000E+00 5.00085569E-02 -1.26764921E-01 1.21169982E-01 0.00000000E+00 0.00000000E+00 4.04012449E-01 5.04690533E-01 0.00000000E+00 0.00000000E+00 3.63916679E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.52177924E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.99528022E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.45882348E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.86112052E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.52177924E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.99528022E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.45882348E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.86112052E-01 0.00000000E+00 0.00000000E+00 -1.50888262E-01 1.34508889E-01 0.00000000E+00 0.00000000E+00 -3.83997049E-01 7.75969815E-01 0.00000000E+00 0.00000000E+00 -1.73489841E-01 1.26296139E-02 -1.55832747E-02 0.00000000E+00 0.00000000E+00 2.21159315E-01 -9.38999638E-02 0.00000000E+00 0.00000000E+00 2.42022932E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.98496685E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.50446466E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.02132134E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.20394572E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.98496685E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.50446466E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.02132134E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 -5.20394572E-01 0.00000000E+00 0.00000000E+00 5.90347418E-02 9.19756290E-02 0.00000000E+00 0.00000000E+00 -6.93755906E-02 -1.45100228E+00 0.00000000E+00 0.00000000E+00 -1.67754373E+00 -1.22732591E-01 4.02354650E-02 0.00000000E+00 0.00000000E+00 -1.28321042E-01 1.72443527E+00 0.00000000E+00 0.00000000E+00 -6.56632991E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.08002990E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.01217245E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.09491037E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.34650256E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.08002990E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.01217245E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.09491037E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.34650256E-02 0.00000000E+00 0.00000000E+00 2.92532489E-02 -4.72561632E-01 0.00000000E+00 0.00000000E+00 1.12478300E+00 1.02141762E+00 0.00000000E+00 0.00000000E+00 -4.79648712E-01 6.29523349E-02 -6.65164513E-02 0.00000000E+00 0.00000000E+00 1.28277381E-01 -4.18567008E-01 0.00000000E+00 0.00000000E+00 6.08808438E-01 -1.00471341E-01 1.47197349E+00 0.00000000E+00 0.00000000E+00 5.06615368E-01 -9.79281143E-01 0.00000000E+00 0.00000000E+00 -1.83230637E-01 4.69323920E-02 -4.17448871E-02 0.00000000E+00 0.00000000E+00 3.43652570E-01 -2.41304023E-02 0.00000000E+00 0.00000000E+00 3.35065971E-01 5.50991305E-02 4.45931382E-01 0.00000000E+00 0.00000000E+00 9.58455208E-02 2.78056357E-01 0.00000000E+00 0.00000000E+00 2.09617696E-01 5.41210703E-02 -1.55401127E-01 0.00000000E+00 0.00000000E+00 -9.90648748E-01 -2.88909298E-01 0.00000000E+00 0.00000000E+00 1.33390091E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.06236079E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.52325123E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.03655136E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.11902358E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.06236079E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 -3.52325123E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 -1.03655136E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.11902358E+00 0.00000000E+00 0.00000000E+00 -2.65791930E-02 -1.85985173E-01 0.00000000E+00 0.00000000E+00 -2.86719898E-01 -1.26762473E+00 0.00000000E+00 0.00000000E+00 -9.11992879E-01 5.28561939E-02 -1.75089225E+00 0.00000000E+00 0.00000000E+00 2.10114005E-01 2.81378230E+00 0.00000000E+00 0.00000000E+00 -9.93454180E-01 Total SCF Density R N= 171 2.05656488E+00 4.71289704E-02 1.65173674E-01 0.00000000E+00 0.00000000E+00 1.27187410E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.27187410E-01 5.16306040E-02 -2.03576451E-03 0.00000000E+00 0.00000000E+00 3.94395548E-01 -3.57774984E-01 3.13361358E-01 0.00000000E+00 0.00000000E+00 -5.17961052E-01 1.33738664E+00 0.00000000E+00 0.00000000E+00 1.00633125E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.96228631E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.00633125E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.96228631E-02 7.67167330E-02 -7.99630972E-02 0.00000000E+00 0.00000000E+00 1.02513054E-01 -2.98020515E-01 0.00000000E+00 0.00000000E+00 7.06050912E-02 1.59340978E-02 -7.16502204E-03 0.00000000E+00 0.00000000E+00 -5.38651867E-02 1.06430906E-01 0.00000000E+00 0.00000000E+00 3.48062856E-02 2.06158920E+00 -1.40236810E-02 9.97992752E-03 0.00000000E+00 0.00000000E+00 6.11293270E-02 -6.34183034E-02 0.00000000E+00 0.00000000E+00 -5.14367107E-04 7.14420330E-02 1.39683165E-01 0.00000000E+00 0.00000000E+00 2.24883370E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.77932046E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.97622137E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.24883370E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.77932046E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.97622137E-01 8.25647000E-02 -1.39497565E-01 0.00000000E+00 0.00000000E+00 -3.28227124E-01 1.25617337E-01 0.00000000E+00 0.00000000E+00 -2.08660801E-02 -3.75677153E-02 2.33572052E-02 0.00000000E+00 0.00000000E+00 4.73712262E-01 -2.72890318E-03 -2.97595197E-02 0.00000000E+00 0.00000000E+00 1.93789296E-01 -3.46714063E-01 0.00000000E+00 0.00000000E+00 1.52564602E-02 -5.21797517E-01 3.98191566E-01 0.00000000E+00 0.00000000E+00 1.57180098E-01 1.42151120E+00 0.00000000E+00 0.00000000E+00 2.45173456E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.93985952E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.33497566E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.72609854E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.45173456E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.93985952E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.33497566E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.72609854E-01 7.48935548E-02 -1.13946470E-01 0.00000000E+00 0.00000000E+00 -3.29631589E-01 1.79765027E-01 0.00000000E+00 0.00000000E+00 -3.27556265E-02 4.43474738E-03 2.18315840E-02 0.00000000E+00 0.00000000E+00 4.46572582E-01 1.27022264E-01 0.00000000E+00 0.00000000E+00 4.24583519E-01 Cartesian Gradient R N= 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 Dipole Moment R N= 3 0.00000000E+00 0.00000000E+00 -1.56346787E-01 QEq coupling tensors R N= 12 -4.02187715E-01 0.00000000E+00 -4.02187715E-01 0.00000000E+00 0.00000000E+00 8.04375429E-01 -2.66180952E-01 0.00000000E+00 -2.66180952E-01 0.00000000E+00 0.00000000E+00 5.32361905E-01 Mulliken Charges R N= 2 4.37364976E-01 -4.37364976E-01 avogadro-1.1.1/testfiles/benzene.g030000644000175000001440000013250512250371054016475 0ustar marcususers Entering Gaussian System, Link 0=g03 Input=benzene.com Output=benzene.g03 Initial command: /usr/local/g03/l1.exe /Users/ghutchis/Desktop/Gau-68457.inp -scrdir=/Users/ghutchis/Desktop/ Entering Link 1 = /usr/local/g03/l1.exe PID= 68458. Copyright (c) 1988,1990,1992,1993,1995,1998,2003,2004,2007, Gaussian, Inc. All Rights Reserved. This is the Gaussian(R) 03 program. It is based on the the Gaussian(R) 98 system (copyright 1998, Gaussian, Inc.), the Gaussian(R) 94 system (copyright 1995, Gaussian, Inc.), the Gaussian 92(TM) system (copyright 1992, Gaussian, Inc.), the Gaussian 90(TM) system (copyright 1990, Gaussian, Inc.), the Gaussian 88(TM) system (copyright 1988, Gaussian, Inc.), the Gaussian 86(TM) system (copyright 1986, Carnegie Mellon University), and the Gaussian 82(TM) system (copyright 1983, Carnegie Mellon University). Gaussian is a federally registered trademark of Gaussian, Inc. This software contains proprietary and confidential information, including trade secrets, belonging to Gaussian, Inc. This software is provided under written license and may be used, copied, transmitted, or stored only in accord with that written license. The following legend is applicable only to US Government contracts under FAR: RESTRICTED RIGHTS LEGEND Use, reproduction and disclosure by the US Government is subject to restrictions as set forth in subparagraphs (a) and (c) of the Commercial Computer Software - Restricted Rights clause in FAR 52.227-19. Gaussian, Inc. 340 Quinnipiac St., Bldg. 40, Wallingford CT 06492 --------------------------------------------------------------- Warning -- This program may not be used in any manner that competes with the business of Gaussian, Inc. or will provide assistance to any competitor of Gaussian, Inc. The licensee of this program is prohibited from giving any competitor of Gaussian, Inc. access to this program. By using this program, the user acknowledges that Gaussian, Inc. is engaged in the business of creating and licensing software in the field of computational chemistry and represents and warrants to the licensee that it is not a competitor of Gaussian, Inc. and that it will not use this program in any manner prohibited above. --------------------------------------------------------------- Cite this work as: Gaussian 03, Revision E.01, M. J. Frisch, G. W. Trucks, H. B. Schlegel, G. E. Scuseria, M. A. Robb, J. R. Cheeseman, J. A. Montgomery, Jr., T. Vreven, K. N. Kudin, J. C. Burant, J. M. Millam, S. S. Iyengar, J. Tomasi, V. Barone, B. Mennucci, M. Cossi, G. Scalmani, N. Rega, G. A. Petersson, H. Nakatsuji, M. Hada, M. Ehara, K. Toyota, R. Fukuda, J. Hasegawa, M. Ishida, T. Nakajima, Y. Honda, O. Kitao, H. Nakai, M. Klene, X. Li, J. E. Knox, H. P. Hratchian, J. B. Cross, V. Bakken, C. Adamo, J. Jaramillo, R. Gomperts, R. E. Stratmann, O. Yazyev, A. J. Austin, R. Cammi, C. Pomelli, J. W. Ochterski, P. Y. Ayala, K. Morokuma, G. A. Voth, P. Salvador, J. J. Dannenberg, V. G. Zakrzewski, S. Dapprich, A. D. Daniels, M. C. Strain, O. Farkas, D. K. Malick, A. D. Rabuck, K. Raghavachari, J. B. Foresman, J. V. Ortiz, Q. Cui, A. G. Baboul, S. Clifford, J. Cioslowski, B. B. Stefanov, G. Liu, A. Liashenko, P. Piskorz, I. Komaromi, R. L. Martin, D. J. Fox, T. Keith, M. A. Al-Laham, C. Y. Peng, A. Nanayakkara, M. Challacombe, P. M. W. Gill, B. Johnson, W. Chen, M. W. Wong, C. Gonzalez, and J. A. Pople, Gaussian, Inc., Wallingford CT, 2004. ****************************************** Gaussian 03: EM64M-G03RevE.01 11-Sep-2007 13-May-2011 ****************************************** %chk=benzene %nprocshared=2 Will use up to 2 processors via shared memory. ------------------------------ #n B3LYP/3-21G* Opt Symm=Loose ------------------------------ 1/14=-1,18=20,26=3,38=1/1,3; 2/9=110,17=4,18=3,40=1/2; 3/5=5,7=1,11=2,16=1,25=1,30=1,74=-5/1,2,3; 4//1; 5/5=2,38=5/2; 6/7=2,8=2,9=2,10=2,28=1/1; 7//1,2,3,16; 1/14=-1,18=20/3(3); 2/9=110/2; 6/7=2,8=2,9=2,10=2,19=2,28=1/1; 99//99; 2/9=110/2; 3/5=5,7=1,11=2,16=1,25=1,30=1,74=-5/1,2,3; 4/5=5,16=3/1; 5/5=2,38=5/2; 7//1,2,3,16; 1/14=-1,18=20/3(-5); 2/9=110/2; 6/7=2,8=2,9=2,10=2,19=2,28=1/1; 99/9=1/99; ----------- benzene.g03 ----------- Symbolic Z-matrix: Charge = 0 Multiplicity = 1 C 0. 0.69878 -1.21036 C 0. 1.39739 0. C 0. 0.69878 1.21036 C 0. -0.69878 1.21036 C 0. -1.39739 0. C 0. -0.69878 -1.21036 H 0. 1.24087 -2.14918 H 0. 2.48149 0. H 0. 1.24087 2.14918 H 0. -1.24087 2.14918 H 0. -2.48149 0. H 0. -1.24087 -2.14918 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Initialization pass. ---------------------------- ! Initial Parameters ! ! (Angstroms and Degrees) ! -------------------------- -------------------------- ! Name Definition Value Derivative Info. ! -------------------------------------------------------------------------------- ! R1 R(1,2) 1.3975 estimate D2E/DX2 ! ! R2 R(1,6) 1.3976 estimate D2E/DX2 ! ! R3 R(1,7) 1.0841 estimate D2E/DX2 ! ! R4 R(2,3) 1.3975 estimate D2E/DX2 ! ! R5 R(2,8) 1.0841 estimate D2E/DX2 ! ! R6 R(3,4) 1.3976 estimate D2E/DX2 ! ! R7 R(3,9) 1.0841 estimate D2E/DX2 ! ! R8 R(4,5) 1.3975 estimate D2E/DX2 ! ! R9 R(4,10) 1.0841 estimate D2E/DX2 ! ! R10 R(5,6) 1.3975 estimate D2E/DX2 ! ! R11 R(5,11) 1.0841 estimate D2E/DX2 ! ! R12 R(6,12) 1.0841 estimate D2E/DX2 ! ! A1 A(2,1,6) 119.9932 estimate D2E/DX2 ! ! A2 A(2,1,7) 120.004 estimate D2E/DX2 ! ! A3 A(6,1,7) 120.0028 estimate D2E/DX2 ! ! A4 A(1,2,3) 120.0136 estimate D2E/DX2 ! ! A5 A(1,2,8) 119.9932 estimate D2E/DX2 ! ! A6 A(3,2,8) 119.9932 estimate D2E/DX2 ! ! A7 A(2,3,4) 119.9932 estimate D2E/DX2 ! ! A8 A(2,3,9) 120.004 estimate D2E/DX2 ! ! A9 A(4,3,9) 120.0028 estimate D2E/DX2 ! ! A10 A(3,4,5) 119.9932 estimate D2E/DX2 ! ! A11 A(3,4,10) 120.0028 estimate D2E/DX2 ! ! A12 A(5,4,10) 120.004 estimate D2E/DX2 ! ! A13 A(4,5,6) 120.0136 estimate D2E/DX2 ! ! A14 A(4,5,11) 119.9932 estimate D2E/DX2 ! ! A15 A(6,5,11) 119.9932 estimate D2E/DX2 ! ! A16 A(1,6,5) 119.9932 estimate D2E/DX2 ! ! A17 A(1,6,12) 120.0028 estimate D2E/DX2 ! ! A18 A(5,6,12) 120.004 estimate D2E/DX2 ! ! D1 D(6,1,2,3) 0.0 estimate D2E/DX2 ! ! D2 D(6,1,2,8) 180.0 estimate D2E/DX2 ! ! D3 D(7,1,2,3) 180.0 estimate D2E/DX2 ! ! D4 D(7,1,2,8) 0.0 estimate D2E/DX2 ! ! D5 D(2,1,6,5) 0.0 estimate D2E/DX2 ! ! D6 D(2,1,6,12) 180.0 estimate D2E/DX2 ! ! D7 D(7,1,6,5) 180.0 estimate D2E/DX2 ! ! D8 D(7,1,6,12) 0.0 estimate D2E/DX2 ! ! D9 D(1,2,3,4) 0.0 estimate D2E/DX2 ! ! D10 D(1,2,3,9) 180.0 estimate D2E/DX2 ! ! D11 D(8,2,3,4) 180.0 estimate D2E/DX2 ! ! D12 D(8,2,3,9) 0.0 estimate D2E/DX2 ! ! D13 D(2,3,4,5) 0.0 estimate D2E/DX2 ! ! D14 D(2,3,4,10) 180.0 estimate D2E/DX2 ! ! D15 D(9,3,4,5) 180.0 estimate D2E/DX2 ! ! D16 D(9,3,4,10) 0.0 estimate D2E/DX2 ! ! D17 D(3,4,5,6) 0.0 estimate D2E/DX2 ! ! D18 D(3,4,5,11) 180.0 estimate D2E/DX2 ! ! D19 D(10,4,5,6) 180.0 estimate D2E/DX2 ! ! D20 D(10,4,5,11) 0.0 estimate D2E/DX2 ! ! D21 D(4,5,6,1) 0.0 estimate D2E/DX2 ! ! D22 D(4,5,6,12) 180.0 estimate D2E/DX2 ! ! D23 D(11,5,6,1) 180.0 estimate D2E/DX2 ! ! D24 D(11,5,6,12) 0.0 estimate D2E/DX2 ! -------------------------------------------------------------------------------- Trust Radius=3.00D-01 FncErr=1.00D-07 GrdErr=1.00D-06 Number of steps in this run= 64 maximum allowed number of steps= 100. GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 6 0 0.000000 0.698780 -1.210360 2 6 0 0.000000 1.397390 0.000000 3 6 0 0.000000 0.698780 1.210360 4 6 0 0.000000 -0.698780 1.210360 5 6 0 0.000000 -1.397390 0.000000 6 6 0 0.000000 -0.698780 -1.210360 7 1 0 0.000000 1.240870 -2.149180 8 1 0 0.000000 2.481490 0.000000 9 1 0 0.000000 1.240870 2.149180 10 1 0 0.000000 -1.240870 2.149180 11 1 0 0.000000 -2.481490 0.000000 12 1 0 0.000000 -1.240870 -2.149180 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 C 0.000000 2 C 1.397508 0.000000 3 C 2.420720 1.397508 0.000000 4 C 2.795185 2.420516 1.397560 0.000000 5 C 2.420516 2.794780 2.420516 1.397508 0.000000 6 C 1.397560 2.420516 2.795185 2.420720 1.397508 7 H 1.084087 2.154872 3.402994 3.879272 3.402850 8 H 2.154768 1.084100 2.154768 3.402806 3.878880 9 H 3.402994 2.154872 1.084087 2.154907 3.402850 10 H 3.879272 3.402850 2.154907 1.084087 2.154872 11 H 3.402806 3.878880 3.402806 2.154768 1.084100 12 H 2.154907 3.402850 3.879272 3.402994 2.154872 6 7 8 9 10 6 C 0.000000 7 H 2.154907 0.000000 8 H 3.402806 2.481554 0.000000 9 H 3.879272 4.298360 2.481554 0.000000 10 H 3.402994 4.963359 4.298248 2.481740 0.000000 11 H 2.154768 4.298248 4.962980 4.298248 2.481554 12 H 1.084087 2.481740 4.298248 4.963359 4.298360 11 12 11 H 0.000000 12 H 2.481554 0.000000 Stoichiometry C6H6 Framework group D2H[C2"(HC.CH),SG(C4H4)] Deg. of freedom 6 Full point group D2H Largest Abelian subgroup D2H NOp 8 Largest concise Abelian subgroup D2 NOp 4 Standard orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 6 0 0.000000 1.210360 0.698780 2 6 0 0.000000 0.000000 1.397390 3 6 0 0.000000 -1.210360 0.698780 4 6 0 0.000000 -1.210360 -0.698780 5 6 0 0.000000 0.000000 -1.397390 6 6 0 0.000000 1.210360 -0.698780 7 1 0 0.000000 2.149180 1.240870 8 1 0 0.000000 0.000000 2.481490 9 1 0 0.000000 -2.149180 1.240870 10 1 0 0.000000 -2.149180 -1.240870 11 1 0 0.000000 0.000000 -2.481490 12 1 0 0.000000 2.149180 -1.240870 --------------------------------------------------------------------- Rotational constants (GHZ): 5.6833941 5.6823042 2.8414245 Standard basis: 3-21G* (6D, 7F) There are 16 symmetry adapted basis functions of AG symmetry. There are 2 symmetry adapted basis functions of B1G symmetry. There are 4 symmetry adapted basis functions of B2G symmetry. There are 11 symmetry adapted basis functions of B3G symmetry. There are 2 symmetry adapted basis functions of AU symmetry. There are 16 symmetry adapted basis functions of B1U symmetry. There are 11 symmetry adapted basis functions of B2U symmetry. There are 4 symmetry adapted basis functions of B3U symmetry. Integral buffers will be 131072 words long. Raffenetti 2 integral format. Two-electron integral symmetry is turned on. 66 basis functions, 108 primitive gaussians, 66 cartesian basis functions 21 alpha electrons 21 beta electrons nuclear repulsion energy 203.1569236728 Hartrees. NAtoms= 12 NActive= 12 NUniq= 4 SFac= 3.00D+00 NAtFMM= 80 NAOKFM=F Big=F One-electron integrals computed using PRISM. NBasis= 66 RedAO= T NBF= 16 2 4 11 2 16 11 4 NBsUse= 66 1.00D-06 NBFU= 16 2 4 11 2 16 11 4 Harris functional with IExCor= 402 diagonalized for initial guess. ExpMin= 1.83D-01 ExpMax= 1.72D+02 ExpMxC= 1.72D+02 IAcc=1 IRadAn= 1 AccDes= 1.00D-06 HarFok: IExCor= 402 AccDes= 1.00D-06 IRadAn= 1 IDoV=1 ScaDFX= 1.000000 1.000000 1.000000 1.000000 Initial guess orbital symmetries: Occupied (B1U) (AG) (B3G) (B2U) (B1U) (AG) (AG) (B2U) (B1U) (B3G) (AG) (AG) (B2U) (B1U) (B2U) (B1U) (B3U) (B3G) (AG) (B2G) (B1G) Virtual (AU) (B3U) (B2G) (AG) (B1U) (B2U) (AG) (B3G) (B1U) (B3G) (AG) (B1U) (B2U) (B1U) (B3G) (B2U) (B3U) (AG) (B3G) (AG) (B2U) (B1U) (B2G) (B1G) (AU) (B3U) (AG) (B2G) (B1U) (AG) (B3G) (B3G) (B1U) (B2U) (B1U) (B2U) (AG) (B1U) (B3G) (AG) (B2U) (B1U) (B3G) (AG) (B1U) The electronic state of the initial guess is 1-AG. Requested convergence on RMS density matrix=1.00D-08 within 128 cycles. Requested convergence on MAX density matrix=1.00D-06. Requested convergence on energy=1.00D-06. No special actions if energy rises. Keep R1 integrals in memory in canonical form, NReq= 4261887. Integral accuracy reduced to 1.0D-05 until final iterations. Initial convergence to 1.0D-05 achieved. Increase integral accuracy. SCF Done: E(RB+HF-LYP) = -230.975769645 A.U. after 10 cycles Convg = 0.5400D-08 -V/T = 2.0090 S**2 = 0.0000 ********************************************************************** Population analysis using the SCF density. ********************************************************************** Orbital symmetries: Occupied (B1U) (B3G) (AG) (B2U) (B1U) (AG) (AG) (B2U) (B1U) (B3G) (AG) (AG) (B1U) (B2U) (B2U) (B1U) (B3U) (B3G) (AG) (B2G) (B1G) Virtual (AU) (B3U) (AG) (B2U) (B1U) (B2G) (B3G) (AG) (B1U) (B3G) (AG) (B1U) (B2U) (B1U) (B3G) (B2U) (AG) (B3U) (B3G) (AG) (B2G) (B1G) (B2U) (B1U) (AU) (B3U) (AG) (B2G) (B1U) (AG) (B3G) (B3G) (B1U) (B2U) (B1U) (B2U) (AG) (B1U) (B3G) (AG) (B2U) (B1U) (B3G) (AG) (B1U) The electronic state is 1-AG. Alpha occ. eigenvalues -- -10.12838 -10.12774 -10.12773 -10.12660 -10.12660 Alpha occ. eigenvalues -- -10.12555 -0.85540 -0.74616 -0.74615 -0.60479 Alpha occ. eigenvalues -- -0.60477 -0.52833 -0.46072 -0.45265 -0.42614 Alpha occ. eigenvalues -- -0.42610 -0.36613 -0.34620 -0.34613 -0.25104 Alpha occ. eigenvalues -- -0.25103 Alpha virt. eigenvalues -- 0.00519 0.00523 0.10655 0.16434 0.16435 Alpha virt. eigenvalues -- 0.16541 0.20652 0.20652 0.21257 0.32448 Alpha virt. eigenvalues -- 0.32448 0.33705 0.33711 0.57661 0.57739 Alpha virt. eigenvalues -- 0.66738 0.68929 0.69598 0.73885 0.73887 Alpha virt. eigenvalues -- 0.78733 0.78734 0.80460 0.80461 0.83241 Alpha virt. eigenvalues -- 0.83243 0.88413 0.90634 0.97128 1.01020 Alpha virt. eigenvalues -- 1.01021 1.10890 1.11528 1.11533 1.30075 Alpha virt. eigenvalues -- 1.30078 1.32889 1.45198 1.46559 1.46565 Alpha virt. eigenvalues -- 1.54639 1.54649 1.88993 1.89005 2.47399 Condensed to atoms (all electrons): 1 2 3 4 5 6 1 C 5.139408 0.457936 -0.081396 -0.023056 -0.081460 0.457872 2 C 0.457936 5.139366 0.457936 -0.081460 -0.023062 -0.081460 3 C -0.081396 0.457936 5.139408 0.457872 -0.081460 -0.023056 4 C -0.023056 -0.081460 0.457872 5.139408 0.457936 -0.081396 5 C -0.081460 -0.023062 -0.081460 0.457936 5.139366 0.457936 6 C 0.457872 -0.081460 -0.023056 -0.081396 0.457936 5.139408 7 H 0.390014 -0.040375 0.003825 -0.000167 0.003827 -0.040376 8 H -0.040391 0.390002 -0.040391 0.003828 -0.000167 0.003828 9 H 0.003825 -0.040375 0.390014 -0.040376 0.003827 -0.000167 10 H -0.000167 0.003827 -0.040376 0.390014 -0.040375 0.003825 11 H 0.003828 -0.000167 0.003828 -0.040391 0.390002 -0.040391 12 H -0.040376 0.003827 -0.000167 0.003825 -0.040375 0.390014 7 8 9 10 11 12 1 C 0.390014 -0.040391 0.003825 -0.000167 0.003828 -0.040376 2 C -0.040375 0.390002 -0.040375 0.003827 -0.000167 0.003827 3 C 0.003825 -0.040391 0.390014 -0.040376 0.003828 -0.000167 4 C -0.000167 0.003828 -0.040376 0.390014 -0.040391 0.003825 5 C 0.003827 -0.000167 0.003827 -0.040375 0.390002 -0.040375 6 C -0.040376 0.003828 -0.000167 0.003825 -0.040391 0.390014 7 H 0.504750 -0.003712 -0.000051 0.000002 -0.000051 -0.003709 8 H -0.003712 0.504797 -0.003712 -0.000051 0.000002 -0.000051 9 H -0.000051 -0.003712 0.504750 -0.003709 -0.000051 0.000002 10 H 0.000002 -0.000051 -0.003709 0.504750 -0.003712 -0.000051 11 H -0.000051 0.000002 -0.000051 -0.003712 0.504797 -0.003712 12 H -0.003709 -0.000051 0.000002 -0.000051 -0.003712 0.504750 Mulliken atomic charges: 1 1 C -0.186037 2 C -0.185993 3 C -0.186037 4 C -0.186037 5 C -0.185993 6 C -0.186037 7 H 0.186024 8 H 0.186018 9 H 0.186024 10 H 0.186024 11 H 0.186018 12 H 0.186024 Sum of Mulliken charges= 0.00000 Atomic charges with hydrogens summed into heavy atoms: 1 1 C -0.000013 2 C 0.000026 3 C -0.000013 4 C -0.000013 5 C 0.000026 6 C -0.000013 7 H 0.000000 8 H 0.000000 9 H 0.000000 10 H 0.000000 11 H 0.000000 12 H 0.000000 Sum of Mulliken charges= 0.00000 Electronic spatial extent (au): = 459.0757 Charge= 0.0000 electrons Dipole moment (field-independent basis, Debye): X= 0.0000 Y= 0.0000 Z= 0.0000 Tot= 0.0000 Quadrupole moment (field-independent basis, Debye-Ang): XX= -39.9017 YY= -31.1852 ZZ= -31.1879 XY= 0.0000 XZ= 0.0000 YZ= 0.0000 Traceless Quadrupole moment (field-independent basis, Debye-Ang): XX= -5.8101 YY= 2.9064 ZZ= 2.9037 XY= 0.0000 XZ= 0.0000 YZ= 0.0000 Octapole moment (field-independent basis, Debye-Ang**2): XXX= 0.0000 YYY= 0.0000 ZZZ= 0.0000 XYY= 0.0000 XXY= 0.0000 XXZ= 0.0000 XZZ= 0.0000 YZZ= 0.0000 YYZ= 0.0000 XYZ= 0.0000 Hexadecapole moment (field-independent basis, Debye-Ang**3): XXXX= -41.4540 YYYY= -262.2347 ZZZZ= -262.2168 XXXY= 0.0000 XXXZ= 0.0000 YYYX= 0.0000 YYYZ= 0.0000 ZZZX= 0.0000 ZZZY= 0.0000 XXYY= -61.2560 XXZZ= -61.2484 YYZZ= -87.4032 XXYZ= 0.0000 YYXZ= 0.0000 ZZXY= 0.0000 N-N= 2.031569236728D+02 E-N=-9.406641795522D+02 KE= 2.289187876528D+02 Symmetry AG KE= 7.373895033402D+01 Symmetry B1G KE= 2.229234330631D+00 Symmetry B2G KE= 2.229284658807D+00 Symmetry B3G KE= 3.728407836195D+01 Symmetry AU KE= 3.671007231651D-17 Symmetry B1U KE= 7.144056607192D+01 Symmetry B2U KE= 4.013259525765D+01 Symmetry B3U KE= 1.864078637831D+00 ***** Axes restored to original set ***** ------------------------------------------------------------------- Center Atomic Forces (Hartrees/Bohr) Number Number X Y Z ------------------------------------------------------------------- 1 6 0.000000000 -0.000145136 0.000232915 2 6 0.000000000 -0.000166239 0.000000000 3 6 0.000000000 -0.000145136 -0.000232915 4 6 0.000000000 0.000145136 -0.000232915 5 6 0.000000000 0.000166239 0.000000000 6 6 0.000000000 0.000145136 0.000232915 7 1 0.000000000 0.000016421 0.000000597 8 1 0.000000000 0.000008154 0.000000000 9 1 0.000000000 0.000016421 -0.000000597 10 1 0.000000000 -0.000016421 -0.000000597 11 1 0.000000000 -0.000008154 0.000000000 12 1 0.000000000 -0.000016421 0.000000597 ------------------------------------------------------------------- Cartesian Forces: Max 0.000232915 RMS 0.000099686 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Internal Forces: Max 0.000241754 RMS 0.000078589 Search for a local minimum. Step number 1 out of a maximum of 64 All quantities printed in internal units (Hartrees-Bohrs-Radians) Second derivative matrix not updated -- first step. Eigenvalues --- 0.02121 0.02121 0.02121 0.02121 0.02121 Eigenvalues --- 0.02121 0.02122 0.02122 0.02122 0.16000 Eigenvalues --- 0.16000 0.16000 0.16000 0.16000 0.16000 Eigenvalues --- 0.22000 0.22000 0.22000 0.35503 0.35503 Eigenvalues --- 0.35505 0.35505 0.35505 0.35505 0.41778 Eigenvalues --- 0.41781 0.46027 0.46033 0.46036 0.46036 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.00000 RFO step: Lambda=-7.58717875D-07. Linear search not attempted -- first point. Iteration 1 RMS(Cart)= 0.00025460 RMS(Int)= 0.00000001 Iteration 2 RMS(Cart)= 0.00000002 RMS(Int)= 0.00000000 Variable Old X -DE/DX Delta X Delta X Delta X New X (Linear) (Quad) (Total) R1 2.64091 -0.00024 0.00000 -0.00053 -0.00053 2.64038 R2 2.64101 -0.00021 0.00000 -0.00045 -0.00045 2.64055 R3 2.04863 0.00001 0.00000 0.00002 0.00002 2.04865 R4 2.64091 -0.00024 0.00000 -0.00053 -0.00053 2.64038 R5 2.04865 0.00001 0.00000 0.00002 0.00002 2.04868 R6 2.64101 -0.00021 0.00000 -0.00045 -0.00045 2.64055 R7 2.04863 0.00001 0.00000 0.00002 0.00002 2.04865 R8 2.64091 -0.00024 0.00000 -0.00053 -0.00053 2.64038 R9 2.04863 0.00001 0.00000 0.00002 0.00002 2.04865 R10 2.64091 -0.00024 0.00000 -0.00053 -0.00053 2.64038 R11 2.04865 0.00001 0.00000 0.00002 0.00002 2.04868 R12 2.04863 0.00001 0.00000 0.00002 0.00002 2.04865 A1 2.09428 0.00003 0.00000 0.00011 0.00011 2.09439 A2 2.09446 -0.00003 0.00000 -0.00015 -0.00015 2.09431 A3 2.09444 0.00000 0.00000 0.00004 0.00004 2.09448 A4 2.09463 -0.00005 0.00000 -0.00023 -0.00023 2.09441 A5 2.09428 0.00003 0.00000 0.00011 0.00011 2.09439 A6 2.09428 0.00003 0.00000 0.00011 0.00011 2.09439 A7 2.09428 0.00003 0.00000 0.00011 0.00011 2.09439 A8 2.09446 -0.00003 0.00000 -0.00015 -0.00015 2.09431 A9 2.09444 0.00000 0.00000 0.00004 0.00004 2.09448 A10 2.09428 0.00003 0.00000 0.00011 0.00011 2.09439 A11 2.09444 0.00000 0.00000 0.00004 0.00004 2.09448 A12 2.09446 -0.00003 0.00000 -0.00015 -0.00015 2.09431 A13 2.09463 -0.00005 0.00000 -0.00023 -0.00023 2.09441 A14 2.09428 0.00003 0.00000 0.00011 0.00011 2.09439 A15 2.09428 0.00003 0.00000 0.00011 0.00011 2.09439 A16 2.09428 0.00003 0.00000 0.00011 0.00011 2.09439 A17 2.09444 0.00000 0.00000 0.00004 0.00004 2.09448 A18 2.09446 -0.00003 0.00000 -0.00015 -0.00015 2.09431 D1 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D2 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D3 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D4 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D5 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D6 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D7 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D8 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D9 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D10 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D11 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D12 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D13 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D14 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D15 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D16 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D17 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D18 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D19 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D20 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D21 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 D22 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D23 3.14159 0.00000 0.00000 0.00000 0.00000 3.14159 D24 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 Item Value Threshold Converged? Maximum Force 0.000242 0.000450 YES RMS Force 0.000079 0.000300 YES Maximum Displacement 0.000623 0.001800 YES RMS Displacement 0.000255 0.001200 YES Predicted change in Energy=-3.793589D-07 Optimization completed. -- Stationary point found. ---------------------------- ! Optimized Parameters ! ! (Angstroms and Degrees) ! -------------------------- -------------------------- ! Name Definition Value Derivative Info. ! -------------------------------------------------------------------------------- ! R1 R(1,2) 1.3975 -DE/DX = -0.0002 ! ! R2 R(1,6) 1.3976 -DE/DX = -0.0002 ! ! R3 R(1,7) 1.0841 -DE/DX = 0.0 ! ! R4 R(2,3) 1.3975 -DE/DX = -0.0002 ! ! R5 R(2,8) 1.0841 -DE/DX = 0.0 ! ! R6 R(3,4) 1.3976 -DE/DX = -0.0002 ! ! R7 R(3,9) 1.0841 -DE/DX = 0.0 ! ! R8 R(4,5) 1.3975 -DE/DX = -0.0002 ! ! R9 R(4,10) 1.0841 -DE/DX = 0.0 ! ! R10 R(5,6) 1.3975 -DE/DX = -0.0002 ! ! R11 R(5,11) 1.0841 -DE/DX = 0.0 ! ! R12 R(6,12) 1.0841 -DE/DX = 0.0 ! ! A1 A(2,1,6) 119.9932 -DE/DX = 0.0 ! ! A2 A(2,1,7) 120.004 -DE/DX = 0.0 ! ! A3 A(6,1,7) 120.0028 -DE/DX = 0.0 ! ! A4 A(1,2,3) 120.0136 -DE/DX = -0.0001 ! ! A5 A(1,2,8) 119.9932 -DE/DX = 0.0 ! ! A6 A(3,2,8) 119.9932 -DE/DX = 0.0 ! ! A7 A(2,3,4) 119.9932 -DE/DX = 0.0 ! ! A8 A(2,3,9) 120.004 -DE/DX = 0.0 ! ! A9 A(4,3,9) 120.0028 -DE/DX = 0.0 ! ! A10 A(3,4,5) 119.9932 -DE/DX = 0.0 ! ! A11 A(3,4,10) 120.0028 -DE/DX = 0.0 ! ! A12 A(5,4,10) 120.004 -DE/DX = 0.0 ! ! A13 A(4,5,6) 120.0136 -DE/DX = -0.0001 ! ! A14 A(4,5,11) 119.9932 -DE/DX = 0.0 ! ! A15 A(6,5,11) 119.9932 -DE/DX = 0.0 ! ! A16 A(1,6,5) 119.9932 -DE/DX = 0.0 ! ! A17 A(1,6,12) 120.0028 -DE/DX = 0.0 ! ! A18 A(5,6,12) 120.004 -DE/DX = 0.0 ! ! D1 D(6,1,2,3) 0.0 -DE/DX = 0.0 ! ! D2 D(6,1,2,8) 180.0 -DE/DX = 0.0 ! ! D3 D(7,1,2,3) 180.0 -DE/DX = 0.0 ! ! D4 D(7,1,2,8) 0.0 -DE/DX = 0.0 ! ! D5 D(2,1,6,5) 0.0 -DE/DX = 0.0 ! ! D6 D(2,1,6,12) 180.0 -DE/DX = 0.0 ! ! D7 D(7,1,6,5) 180.0 -DE/DX = 0.0 ! ! D8 D(7,1,6,12) 0.0 -DE/DX = 0.0 ! ! D9 D(1,2,3,4) 0.0 -DE/DX = 0.0 ! ! D10 D(1,2,3,9) 180.0 -DE/DX = 0.0 ! ! D11 D(8,2,3,4) 180.0 -DE/DX = 0.0 ! ! D12 D(8,2,3,9) 0.0 -DE/DX = 0.0 ! ! D13 D(2,3,4,5) 0.0 -DE/DX = 0.0 ! ! D14 D(2,3,4,10) 180.0 -DE/DX = 0.0 ! ! D15 D(9,3,4,5) 180.0 -DE/DX = 0.0 ! ! D16 D(9,3,4,10) 0.0 -DE/DX = 0.0 ! ! D17 D(3,4,5,6) 0.0 -DE/DX = 0.0 ! ! D18 D(3,4,5,11) 180.0 -DE/DX = 0.0 ! ! D19 D(10,4,5,6) 180.0 -DE/DX = 0.0 ! ! D20 D(10,4,5,11) 0.0 -DE/DX = 0.0 ! ! D21 D(4,5,6,1) 0.0 -DE/DX = 0.0 ! ! D22 D(4,5,6,12) 180.0 -DE/DX = 0.0 ! ! D23 D(11,5,6,1) 180.0 -DE/DX = 0.0 ! ! D24 D(11,5,6,12) 0.0 -DE/DX = 0.0 ! -------------------------------------------------------------------------------- GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 6 0 0.000000 0.698780 -1.210360 2 6 0 0.000000 1.397390 0.000000 3 6 0 0.000000 0.698780 1.210360 4 6 0 0.000000 -0.698780 1.210360 5 6 0 0.000000 -1.397390 0.000000 6 6 0 0.000000 -0.698780 -1.210360 7 1 0 0.000000 1.240870 -2.149180 8 1 0 0.000000 2.481490 0.000000 9 1 0 0.000000 1.240870 2.149180 10 1 0 0.000000 -1.240870 2.149180 11 1 0 0.000000 -2.481490 0.000000 12 1 0 0.000000 -1.240870 -2.149180 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 C 0.000000 2 C 1.397508 0.000000 3 C 2.420720 1.397508 0.000000 4 C 2.795185 2.420516 1.397560 0.000000 5 C 2.420516 2.794780 2.420516 1.397508 0.000000 6 C 1.397560 2.420516 2.795185 2.420720 1.397508 7 H 1.084087 2.154872 3.402994 3.879272 3.402850 8 H 2.154768 1.084100 2.154768 3.402806 3.878880 9 H 3.402994 2.154872 1.084087 2.154907 3.402850 10 H 3.879272 3.402850 2.154907 1.084087 2.154872 11 H 3.402806 3.878880 3.402806 2.154768 1.084100 12 H 2.154907 3.402850 3.879272 3.402994 2.154872 6 7 8 9 10 6 C 0.000000 7 H 2.154907 0.000000 8 H 3.402806 2.481554 0.000000 9 H 3.879272 4.298360 2.481554 0.000000 10 H 3.402994 4.963359 4.298248 2.481740 0.000000 11 H 2.154768 4.298248 4.962980 4.298248 2.481554 12 H 1.084087 2.481740 4.298248 4.963359 4.298360 11 12 11 H 0.000000 12 H 2.481554 0.000000 Stoichiometry C6H6 Framework group D2H[C2"(HC.CH),SG(C4H4)] Deg. of freedom 6 Full point group D2H Largest Abelian subgroup D2H NOp 8 Largest concise Abelian subgroup D2 NOp 4 Standard orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 6 0 0.000000 1.210360 0.698780 2 6 0 0.000000 0.000000 1.397390 3 6 0 0.000000 -1.210360 0.698780 4 6 0 0.000000 -1.210360 -0.698780 5 6 0 0.000000 0.000000 -1.397390 6 6 0 0.000000 1.210360 -0.698780 7 1 0 0.000000 2.149180 1.240870 8 1 0 0.000000 0.000000 2.481490 9 1 0 0.000000 -2.149180 1.240870 10 1 0 0.000000 -2.149180 -1.240870 11 1 0 0.000000 0.000000 -2.481490 12 1 0 0.000000 2.149180 -1.240870 --------------------------------------------------------------------- Rotational constants (GHZ): 5.6833941 5.6823042 2.8414245 ********************************************************************** Population analysis using the SCF density. ********************************************************************** Orbital symmetries: Occupied (B1U) (B3G) (AG) (B2U) (B1U) (AG) (AG) (B2U) (B1U) (B3G) (AG) (AG) (B1U) (B2U) (B2U) (B1U) (B3U) (B3G) (AG) (B2G) (B1G) Virtual (AU) (B3U) (AG) (B2U) (B1U) (B2G) (B3G) (AG) (B1U) (B3G) (AG) (B1U) (B2U) (B1U) (B3G) (B2U) (AG) (B3U) (B3G) (AG) (B2G) (B1G) (B2U) (B1U) (AU) (B3U) (AG) (B2G) (B1U) (AG) (B3G) (B3G) (B1U) (B2U) (B1U) (B2U) (AG) (B1U) (B3G) (AG) (B2U) (B1U) (B3G) (AG) (B1U) The electronic state is 1-AG. Alpha occ. eigenvalues -- -10.12838 -10.12774 -10.12773 -10.12660 -10.12660 Alpha occ. eigenvalues -- -10.12555 -0.85540 -0.74616 -0.74615 -0.60479 Alpha occ. eigenvalues -- -0.60477 -0.52833 -0.46072 -0.45265 -0.42614 Alpha occ. eigenvalues -- -0.42610 -0.36613 -0.34620 -0.34613 -0.25104 Alpha occ. eigenvalues -- -0.25103 Alpha virt. eigenvalues -- 0.00519 0.00523 0.10655 0.16434 0.16435 Alpha virt. eigenvalues -- 0.16541 0.20652 0.20652 0.21257 0.32448 Alpha virt. eigenvalues -- 0.32448 0.33705 0.33711 0.57661 0.57739 Alpha virt. eigenvalues -- 0.66738 0.68929 0.69598 0.73885 0.73887 Alpha virt. eigenvalues -- 0.78733 0.78734 0.80460 0.80461 0.83241 Alpha virt. eigenvalues -- 0.83243 0.88413 0.90634 0.97128 1.01020 Alpha virt. eigenvalues -- 1.01021 1.10890 1.11528 1.11533 1.30075 Alpha virt. eigenvalues -- 1.30078 1.32889 1.45198 1.46559 1.46565 Alpha virt. eigenvalues -- 1.54639 1.54649 1.88993 1.89005 2.47399 Condensed to atoms (all electrons): 1 2 3 4 5 6 1 C 5.139408 0.457936 -0.081396 -0.023056 -0.081460 0.457872 2 C 0.457936 5.139366 0.457936 -0.081460 -0.023062 -0.081460 3 C -0.081396 0.457936 5.139408 0.457872 -0.081460 -0.023056 4 C -0.023056 -0.081460 0.457872 5.139408 0.457936 -0.081396 5 C -0.081460 -0.023062 -0.081460 0.457936 5.139366 0.457936 6 C 0.457872 -0.081460 -0.023056 -0.081396 0.457936 5.139408 7 H 0.390014 -0.040375 0.003825 -0.000167 0.003827 -0.040376 8 H -0.040391 0.390002 -0.040391 0.003828 -0.000167 0.003828 9 H 0.003825 -0.040375 0.390014 -0.040376 0.003827 -0.000167 10 H -0.000167 0.003827 -0.040376 0.390014 -0.040375 0.003825 11 H 0.003828 -0.000167 0.003828 -0.040391 0.390002 -0.040391 12 H -0.040376 0.003827 -0.000167 0.003825 -0.040375 0.390014 7 8 9 10 11 12 1 C 0.390014 -0.040391 0.003825 -0.000167 0.003828 -0.040376 2 C -0.040375 0.390002 -0.040375 0.003827 -0.000167 0.003827 3 C 0.003825 -0.040391 0.390014 -0.040376 0.003828 -0.000167 4 C -0.000167 0.003828 -0.040376 0.390014 -0.040391 0.003825 5 C 0.003827 -0.000167 0.003827 -0.040375 0.390002 -0.040375 6 C -0.040376 0.003828 -0.000167 0.003825 -0.040391 0.390014 7 H 0.504750 -0.003712 -0.000051 0.000002 -0.000051 -0.003709 8 H -0.003712 0.504797 -0.003712 -0.000051 0.000002 -0.000051 9 H -0.000051 -0.003712 0.504750 -0.003709 -0.000051 0.000002 10 H 0.000002 -0.000051 -0.003709 0.504750 -0.003712 -0.000051 11 H -0.000051 0.000002 -0.000051 -0.003712 0.504797 -0.003712 12 H -0.003709 -0.000051 0.000002 -0.000051 -0.003712 0.504750 Mulliken atomic charges: 1 1 C -0.186037 2 C -0.185993 3 C -0.186037 4 C -0.186037 5 C -0.185993 6 C -0.186037 7 H 0.186024 8 H 0.186018 9 H 0.186024 10 H 0.186024 11 H 0.186018 12 H 0.186024 Sum of Mulliken charges= 0.00000 Atomic charges with hydrogens summed into heavy atoms: 1 1 C -0.000013 2 C 0.000026 3 C -0.000013 4 C -0.000013 5 C 0.000026 6 C -0.000013 7 H 0.000000 8 H 0.000000 9 H 0.000000 10 H 0.000000 11 H 0.000000 12 H 0.000000 Sum of Mulliken charges= 0.00000 Electronic spatial extent (au): = 459.0757 Charge= 0.0000 electrons Dipole moment (field-independent basis, Debye): X= 0.0000 Y= 0.0000 Z= 0.0000 Tot= 0.0000 Quadrupole moment (field-independent basis, Debye-Ang): XX= -39.9017 YY= -31.1852 ZZ= -31.1879 XY= 0.0000 XZ= 0.0000 YZ= 0.0000 Traceless Quadrupole moment (field-independent basis, Debye-Ang): XX= -5.8101 YY= 2.9064 ZZ= 2.9037 XY= 0.0000 XZ= 0.0000 YZ= 0.0000 Octapole moment (field-independent basis, Debye-Ang**2): XXX= 0.0000 YYY= 0.0000 ZZZ= 0.0000 XYY= 0.0000 XXY= 0.0000 XXZ= 0.0000 XZZ= 0.0000 YZZ= 0.0000 YYZ= 0.0000 XYZ= 0.0000 Hexadecapole moment (field-independent basis, Debye-Ang**3): XXXX= -41.4540 YYYY= -262.2347 ZZZZ= -262.2168 XXXY= 0.0000 XXXZ= 0.0000 YYYX= 0.0000 YYYZ= 0.0000 ZZZX= 0.0000 ZZZY= 0.0000 XXYY= -61.2560 XXZZ= -61.2484 YYZZ= -87.4032 XXYZ= 0.0000 YYXZ= 0.0000 ZZXY= 0.0000 N-N= 2.031569236728D+02 E-N=-9.406641795522D+02 KE= 2.289187876528D+02 Symmetry AG KE= 7.373895033402D+01 Symmetry B1G KE= 2.229234330631D+00 Symmetry B2G KE= 2.229284658807D+00 Symmetry B3G KE= 3.728407836195D+01 Symmetry AU KE= 3.671007231651D-17 Symmetry B1U KE= 7.144056607192D+01 Symmetry B2U KE= 4.013259525765D+01 Symmetry B3U KE= 1.864078637831D+00 1\1\GINC-IRIDIUM-2\FOpt\RB3LYP\3-21G*\C6H6\GHUTCHIS\13-May-2011\0\\#n B3LYP/3-21G* Opt Symm=Loose\\benzene.g03\\0,1\C,0.,0.69878,-1.21036\C, 0.,1.39739,0.\C,0.,0.69878,1.21036\C,0.,-0.69878,1.21036\C,0.,-1.39739 ,0.\C,0.,-0.69878,-1.21036\H,0.,1.24087,-2.14918\H,0.,2.48149,0.\H,0., 1.24087,2.14918\H,0.,-1.24087,2.14918\H,0.,-2.48149,0.\H,0.,-1.24087,- 2.14918\\Version=EM64M-G03RevE.01\State=1-AG\HF=-230.9757696\RMSD=5.40 0e-09\RMSF=9.969e-05\Thermal=0.\Dipole=0.,0.,0.\PG=D02H [C2"(H1C1.C1H1 ),SG(C4H4)]\\@ TIME IS IN FACT THE HERO OF THE PLOT. THE TIME WITH WHICH WE HAVE TO DEAL IS OF THE ORDER OF TWO BILLION YEARS...GIVEN SO MUCH TIME, THE "IMPOSSIBLE" BECOMES POSSIBLE, THE POSSIBLE PROBABLE, THE PROBABLE VIRTUALLY CERTAIN. ONE HAS ONLY TO WAIT, TIME ITSELF PERFORMS THE MIRACLES. "ORIGIN OF LIFE" LECTURES, GEORGE WALD, 1954 Job cpu time: 0 days 0 hours 0 minutes 20.8 seconds. File lengths (MBytes): RWF= 17 Int= 0 D2E= 0 Chk= 13 Scr= 1 Normal termination of Gaussian 03 at Fri May 13 23:19:04 2011. avogadro-1.1.1/testfiles/edos.g030000644000175000001440000041102012250371054015771 0ustar marcususers Entering Gaussian System, Link 0=g03 Input=se3.com Output=se3.g03 Initial command: /usr/local/g03/l1.exe /Users/ghutchis/Desktop/Se/g03/Gau-32516.inp -scrdir=/Users/ghutchis/Desktop/Se/g03/ Entering Link 1 = /usr/local/g03/l1.exe PID= 32517. Copyright (c) 1988,1990,1992,1993,1995,1998,2003,2004,2007, Gaussian, Inc. All Rights Reserved. This is the Gaussian(R) 03 program. It is based on the the Gaussian(R) 98 system (copyright 1998, Gaussian, Inc.), the Gaussian(R) 94 system (copyright 1995, Gaussian, Inc.), the Gaussian 92(TM) system (copyright 1992, Gaussian, Inc.), the Gaussian 90(TM) system (copyright 1990, Gaussian, Inc.), the Gaussian 88(TM) system (copyright 1988, Gaussian, Inc.), the Gaussian 86(TM) system (copyright 1986, Carnegie Mellon University), and the Gaussian 82(TM) system (copyright 1983, Carnegie Mellon University). Gaussian is a federally registered trademark of Gaussian, Inc. This software contains proprietary and confidential information, including trade secrets, belonging to Gaussian, Inc. This software is provided under written license and may be used, copied, transmitted, or stored only in accord with that written license. The following legend is applicable only to US Government contracts under FAR: RESTRICTED RIGHTS LEGEND Use, reproduction and disclosure by the US Government is subject to restrictions as set forth in subparagraphs (a) and (c) of the Commercial Computer Software - Restricted Rights clause in FAR 52.227-19. Gaussian, Inc. 340 Quinnipiac St., Bldg. 40, Wallingford CT 06492 --------------------------------------------------------------- Warning -- This program may not be used in any manner that competes with the business of Gaussian, Inc. or will provide assistance to any competitor of Gaussian, Inc. The licensee of this program is prohibited from giving any competitor of Gaussian, Inc. access to this program. By using this program, the user acknowledges that Gaussian, Inc. is engaged in the business of creating and licensing software in the field of computational chemistry and represents and warrants to the licensee that it is not a competitor of Gaussian, Inc. and that it will not use this program in any manner prohibited above. --------------------------------------------------------------- Cite this work as: Gaussian 03, Revision E.01, M. J. Frisch, G. W. Trucks, H. B. Schlegel, G. E. Scuseria, M. A. Robb, J. R. Cheeseman, J. A. Montgomery, Jr., T. Vreven, K. N. Kudin, J. C. Burant, J. M. Millam, S. S. Iyengar, J. Tomasi, V. Barone, B. Mennucci, M. Cossi, G. Scalmani, N. Rega, G. A. Petersson, H. Nakatsuji, M. Hada, M. Ehara, K. Toyota, R. Fukuda, J. Hasegawa, M. Ishida, T. Nakajima, Y. Honda, O. Kitao, H. Nakai, M. Klene, X. Li, J. E. Knox, H. P. Hratchian, J. B. Cross, V. Bakken, C. Adamo, J. Jaramillo, R. Gomperts, R. E. Stratmann, O. Yazyev, A. J. Austin, R. Cammi, C. Pomelli, J. W. Ochterski, P. Y. Ayala, K. Morokuma, G. A. Voth, P. Salvador, J. J. Dannenberg, V. G. Zakrzewski, S. Dapprich, A. D. Daniels, M. C. Strain, O. Farkas, D. K. Malick, A. D. Rabuck, K. Raghavachari, J. B. Foresman, J. V. Ortiz, Q. Cui, A. G. Baboul, S. Clifford, J. Cioslowski, B. B. Stefanov, G. Liu, A. Liashenko, P. Piskorz, I. Komaromi, R. L. Martin, D. J. Fox, T. Keith, M. A. Al-Laham, C. Y. Peng, A. Nanayakkara, M. Challacombe, P. M. W. Gill, B. Johnson, W. Chen, M. W. Wong, C. Gonzalez, and J. A. Pople, Gaussian, Inc., Wallingford CT, 2004. ****************************************** Gaussian 03: EM64M-G03RevE.01 11-Sep-2007 18-Feb-2010 ****************************************** %NProcShared=2 Will use up to 2 processors via shared memory. ------------------- #n B3LYP/6-31G* Opt ------------------- 1/14=-1,18=20,26=3,38=1/1,3; 2/9=110,17=6,18=5,40=1/2; 3/5=1,6=6,7=1,11=2,16=1,25=1,30=1,74=-5/1,2,3; 4//1; 5/5=2,38=5/2; 6/7=2,8=2,9=2,10=2,28=1/1; 7//1,2,3,16; 1/14=-1,18=20/3(3); 2/9=110/2; 6/7=2,8=2,9=2,10=2,19=2,28=1/1; 99//99; 2/9=110/2; 3/5=1,6=6,7=1,11=2,16=1,25=1,30=1,74=-5/1,2,3; 4/5=5,16=3/1; 5/5=2,38=5/2; 7//1,2,3,16; 1/14=-1,18=20/3(-5); 2/9=110/2; 6/7=2,8=2,9=2,10=2,19=2,28=1/1; 99/9=1/99; Symbolic Z-matrix: Charge = 0 Multiplicity = 1 0 1 C -2.2322 1.89825 0.00831 C -0.89924 1.62554 -0.10876 C -3.0276 0.78235 0.08076 Se -2.08416 -0.78314 -0.0292 C -0.60386 0.28668 -0.16095 O -2.66967 3.18041 0.04379 H -4.10432 0.82707 0.17493 H 0.40422 -0.09488 -0.25231 O 0.00486 2.63398 -0.16312 C -0.38721 3.9193 0.20243 C -1.8072 4.20417 -0.34068 H 0.34934 4.6675 -0.15787 H -0.42903 3.97176 1.31249 H -1.75178 4.21863 -1.45128 H -2.19124 5.18638 0.00551 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Initialization pass. ---------------------------- ! Initial Parameters ! ! (Angstroms and Degrees) ! -------------------------- -------------------------- ! Name Definition Value Derivative Info. ! -------------------------------------------------------------------------------- ! R1 R(1,6) 0.6876 estimate D2E/DX2 ! ! R2 R(2,3) 1.3656 estimate D2E/DX2 ! ! R3 R(2,4) 1.3723 estimate D2E/DX2 ! ! R4 R(2,7) 1.3552 estimate D2E/DX2 ! ! R5 R(3,6) 1.372 estimate D2E/DX2 ! ! R6 R(3,10) 1.3555 estimate D2E/DX2 ! ! R7 R(4,5) 1.8311 estimate D2E/DX2 ! ! R8 R(4,8) 1.0818 estimate D2E/DX2 ! ! R9 R(5,6) 1.8312 estimate D2E/DX2 ! ! R10 R(6,9) 1.0817 estimate D2E/DX2 ! ! R11 R(7,12) 1.3928 estimate D2E/DX2 ! ! R12 R(10,11) 1.3926 estimate D2E/DX2 ! ! R13 R(11,12) 1.5468 estimate D2E/DX2 ! ! R14 R(11,13) 1.11 estimate D2E/DX2 ! ! R15 R(11,14) 1.1121 estimate D2E/DX2 ! ! R16 R(12,15) 1.1121 estimate D2E/DX2 ! ! R17 R(12,16) 1.11 estimate D2E/DX2 ! ! A1 A(3,2,4) 114.0732 estimate D2E/DX2 ! ! A2 A(3,2,7) 120.4159 estimate D2E/DX2 ! ! A3 A(4,2,7) 125.5109 estimate D2E/DX2 ! ! A4 A(2,3,6) 114.0961 estimate D2E/DX2 ! ! A5 A(2,3,10) 120.3927 estimate D2E/DX2 ! ! A6 A(6,3,10) 125.5111 estimate D2E/DX2 ! ! A7 A(2,4,5) 113.1669 estimate D2E/DX2 ! ! A8 A(2,4,8) 123.2232 estimate D2E/DX2 ! ! A9 A(5,4,8) 123.6009 estimate D2E/DX2 ! ! A10 A(4,5,6) 85.4888 estimate D2E/DX2 ! ! A11 A(1,6,3) 125.9472 estimate D2E/DX2 ! ! A12 A(1,6,5) 116.7145 estimate D2E/DX2 ! ! A13 A(1,6,9) 18.9569 estimate D2E/DX2 ! ! A14 A(3,6,5) 113.1616 estimate D2E/DX2 ! ! A15 A(3,6,9) 123.2322 estimate D2E/DX2 ! ! A16 A(5,6,9) 123.5971 estimate D2E/DX2 ! ! A17 A(2,7,12) 119.23 estimate D2E/DX2 ! ! A18 A(3,10,11) 119.2318 estimate D2E/DX2 ! ! A19 A(10,11,12) 109.6499 estimate D2E/DX2 ! ! A20 A(10,11,13) 110.4933 estimate D2E/DX2 ! ! A21 A(10,11,14) 108.4295 estimate D2E/DX2 ! ! A22 A(12,11,13) 111.7805 estimate D2E/DX2 ! ! A23 A(12,11,14) 107.8951 estimate D2E/DX2 ! ! A24 A(13,11,14) 108.491 estimate D2E/DX2 ! ! A25 A(7,12,11) 109.6452 estimate D2E/DX2 ! ! A26 A(7,12,15) 108.4274 estimate D2E/DX2 ! ! A27 A(7,12,16) 110.4931 estimate D2E/DX2 ! ! A28 A(11,12,15) 107.8969 estimate D2E/DX2 ! ! A29 A(11,12,16) 111.7827 estimate D2E/DX2 ! ! A30 A(15,12,16) 108.4942 estimate D2E/DX2 ! ! D1 D(4,2,3,6) 1.3143 estimate D2E/DX2 ! ! D2 D(4,2,3,10) -178.6592 estimate D2E/DX2 ! ! D3 D(7,2,3,6) -178.6601 estimate D2E/DX2 ! ! D4 D(7,2,3,10) 1.3663 estimate D2E/DX2 ! ! D5 D(3,2,4,5) -1.0132 estimate D2E/DX2 ! ! D6 D(3,2,4,8) -179.9526 estimate D2E/DX2 ! ! D7 D(7,2,4,5) 178.9597 estimate D2E/DX2 ! ! D8 D(7,2,4,8) 0.0203 estimate D2E/DX2 ! ! D9 D(3,2,7,12) 14.5127 estimate D2E/DX2 ! ! D10 D(4,2,7,12) -165.4586 estimate D2E/DX2 ! ! D11 D(2,3,6,1) -157.1067 estimate D2E/DX2 ! ! D12 D(2,3,6,5) -1.0146 estimate D2E/DX2 ! ! D13 D(2,3,6,9) -179.951 estimate D2E/DX2 ! ! D14 D(10,3,6,1) 22.8652 estimate D2E/DX2 ! ! D15 D(10,3,6,5) 178.9573 estimate D2E/DX2 ! ! D16 D(10,3,6,9) 0.0209 estimate D2E/DX2 ! ! D17 D(2,3,10,11) 14.5203 estimate D2E/DX2 ! ! D18 D(6,3,10,11) -165.45 estimate D2E/DX2 ! ! D19 D(2,4,5,6) 0.3578 estimate D2E/DX2 ! ! D20 D(8,4,5,6) 179.2926 estimate D2E/DX2 ! ! D21 D(4,5,6,1) 158.8104 estimate D2E/DX2 ! ! D22 D(4,5,6,3) 0.3592 estimate D2E/DX2 ! ! D23 D(4,5,6,9) 179.2912 estimate D2E/DX2 ! ! D24 D(2,7,12,11) -40.4339 estimate D2E/DX2 ! ! D25 D(2,7,12,15) 77.1386 estimate D2E/DX2 ! ! D26 D(2,7,12,16) -164.0799 estimate D2E/DX2 ! ! D27 D(3,10,11,12) -40.4441 estimate D2E/DX2 ! ! D28 D(3,10,11,13) -164.0908 estimate D2E/DX2 ! ! D29 D(3,10,11,14) 77.1302 estimate D2E/DX2 ! ! D30 D(10,11,12,7) 52.1132 estimate D2E/DX2 ! ! D31 D(10,11,12,15) -65.7903 estimate D2E/DX2 ! ! D32 D(10,11,12,16) 174.9992 estimate D2E/DX2 ! ! D33 D(13,11,12,7) 175.0013 estimate D2E/DX2 ! ! D34 D(13,11,12,15) 57.0978 estimate D2E/DX2 ! ! D35 D(13,11,12,16) -62.1126 estimate D2E/DX2 ! ! D36 D(14,11,12,7) -65.7944 estimate D2E/DX2 ! ! D37 D(14,11,12,15) 176.3021 estimate D2E/DX2 ! ! D38 D(14,11,12,16) 57.0916 estimate D2E/DX2 ! -------------------------------------------------------------------------------- Trust Radius=3.00D-01 FncErr=1.00D-07 GrdErr=1.00D-06 Number of steps in this run= 95 maximum allowed number of steps= 100. GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 0 0 0.000000 0.000000 0.000000 2 6 0 -2.232200 1.898250 0.008310 3 6 0 -0.899240 1.625540 -0.108760 4 6 0 -3.027600 0.782350 0.080760 5 34 0 -2.084160 -0.783140 -0.029200 6 6 0 -0.603860 0.286680 -0.160950 7 8 0 -2.669670 3.180410 0.043790 8 1 0 -4.104320 0.827070 0.174930 9 1 0 0.404220 -0.094880 -0.252310 10 8 0 0.004860 2.633980 -0.163120 11 6 0 -0.387210 3.919300 0.202430 12 6 0 -1.807200 4.204170 -0.340680 13 1 0 0.349340 4.667500 -0.157870 14 1 0 -0.429030 3.971760 1.312490 15 1 0 -1.751780 4.218630 -1.451280 16 1 0 -2.191240 5.186380 0.005510 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 Bq 0.000000 2 C 2.930211 0.000000 3 C 1.860871 1.365598 0.000000 4 C 3.128091 1.372277 2.297129 0.000000 5 Se 2.226631 2.685735 2.685536 1.831101 0.000000 6 C 0.687559 2.297237 1.372049 2.485685 1.831164 7 O 4.152597 1.355202 2.361210 2.424907 4.007228 8 H 4.190476 2.163336 3.315203 1.081755 2.591427 9 H 0.485856 3.315298 2.163206 3.557788 2.591431 10 O 2.639031 2.361170 1.355472 3.561436 4.007324 11 C 3.943580 2.743413 2.370727 4.102063 5.004621 12 C 4.588799 2.370588 2.743631 3.657300 5.004697 13 H 4.683217 3.789553 3.288599 5.153160 5.970591 14 H 4.204946 3.041669 2.783127 4.294422 5.210438 15 H 4.792889 2.783050 3.041924 3.972768 5.210613 16 H 5.630284 3.288386 3.789710 4.483374 5.970581 6 7 8 9 10 6 C 0.000000 7 O 3.561343 0.000000 8 H 3.557816 2.759280 0.000000 9 H 1.081739 4.501555 4.621629 0.000000 10 O 2.424946 2.737610 4.501618 2.759370 0.000000 11 C 3.657172 2.404319 4.835240 4.116648 1.392621 12 C 4.102080 1.392751 4.116724 4.835289 2.404285 13 H 4.483323 3.371428 5.890225 4.763632 2.062498 14 H 3.972582 2.693752 4.968991 4.436267 2.038465 15 H 4.294520 2.038543 4.436404 4.969128 2.693744 16 H 5.153110 2.062590 4.763629 5.890211 3.371355 11 12 13 14 15 11 C 0.000000 12 C 1.546768 0.000000 13 H 1.110011 2.213314 0.000000 14 H 1.112086 2.164795 1.803295 0.000000 15 H 2.164811 1.112076 2.507808 3.073929 0.000000 16 H 2.213322 1.109987 2.598168 2.507764 1.803303 16 16 H 0.000000 Symmetry turned off: Cannot cope with ghost atoms or with translation vectors. Stoichiometry C6H6O2Se Framework group C1[X(C6H6O2Se)] NUMDOF-- NAT= 15 NAtoms= 16 Deg. of freedom 0 Full point group C1 Rotational constants (GHZ): 3.5721054 0.7229415 0.6105466 Standard basis: 6-31G(d) (6D, 7F) Warning: center 1 has no basis functions! Integral buffers will be 131072 words long. Raffenetti 2 integral format. Two-electron integral symmetry is turned off. 162 basis functions, 331 primitive gaussians, 162 cartesian basis functions 46 alpha electrons 46 beta electrons nuclear repulsion energy 699.7456621536 Hartrees. NAtoms= 16 NActive= 16 NUniq= 16 SFac= 7.50D-01 NAtFMM= 80 NAOKFM=F Big=F One-electron integrals computed using PRISM. NBasis= 162 RedAO= T NBF= 162 NBsUse= 162 1.00D-06 NBFU= 162 Harris functional with IExCor= 402 diagonalized for initial guess. ExpMin= 1.23D-01 ExpMax= 5.61D+05 ExpMxC= 5.42D+03 IAcc=2 IRadAn= 4 AccDes= 0.00D+00 HarFok: IExCor= 402 AccDes= 0.00D+00 IRadAn= 4 IDoV=1 ScaDFX= 1.000000 1.000000 1.000000 1.000000 Requested convergence on RMS density matrix=1.00D-08 within 128 cycles. Requested convergence on MAX density matrix=1.00D-06. Requested convergence on energy=1.00D-06. No special actions if energy rises. Integral accuracy reduced to 1.0D-05 until final iterations. Initial convergence to 1.0D-05 achieved. Increase integral accuracy. SCF Done: E(RB+HF-LYP) = -2782.01030277 A.U. after 15 cycles Convg = 0.4184D-08 -V/T = 2.0047 S**2 = 0.0000 ********************************************************************** Population analysis using the SCF density. ********************************************************************** Alpha occ. eigenvalues -- -453.87218 -57.47124 -52.15598 -52.15533 -52.15246 Alpha occ. eigenvalues -- -19.17813 -19.17809 -10.25508 -10.25488 -10.23818 Alpha occ. eigenvalues -- -10.23750 -10.19736 -10.19735 -7.72839 -5.77320 Alpha occ. eigenvalues -- -5.76977 -5.76352 -2.13030 -2.12942 -2.12392 Alpha occ. eigenvalues -- -2.12116 -2.12059 -1.09859 -1.05808 -0.86544 Alpha occ. eigenvalues -- -0.77113 -0.72976 -0.69759 -0.64691 -0.58990 Alpha occ. eigenvalues -- -0.54999 -0.53823 -0.49628 -0.48323 -0.44068 Alpha occ. eigenvalues -- -0.43619 -0.42316 -0.39872 -0.38905 -0.37218 Alpha occ. eigenvalues -- -0.34852 -0.32471 -0.30933 -0.29239 -0.20960 Alpha occ. eigenvalues -- -0.20582 Alpha virt. eigenvalues -- -0.00639 0.01840 0.07526 0.08819 0.11602 Alpha virt. eigenvalues -- 0.11663 0.12910 0.14313 0.15457 0.16821 Alpha virt. eigenvalues -- 0.17286 0.19587 0.21729 0.24221 0.26935 Alpha virt. eigenvalues -- 0.27759 0.33601 0.35092 0.42283 0.43275 Alpha virt. eigenvalues -- 0.43290 0.46387 0.48398 0.48870 0.49240 Alpha virt. eigenvalues -- 0.52122 0.54429 0.54960 0.56210 0.57639 Alpha virt. eigenvalues -- 0.58693 0.60385 0.61264 0.62722 0.64348 Alpha virt. eigenvalues -- 0.70600 0.74045 0.74985 0.76564 0.76593 Alpha virt. eigenvalues -- 0.80616 0.82117 0.83679 0.84222 0.86546 Alpha virt. eigenvalues -- 0.88602 0.89365 0.90051 0.91055 0.96471 Alpha virt. eigenvalues -- 0.97526 1.04068 1.04402 1.09250 1.10146 Alpha virt. eigenvalues -- 1.16666 1.21416 1.22537 1.25774 1.29595 Alpha virt. eigenvalues -- 1.37315 1.38372 1.41770 1.45240 1.47088 Alpha virt. eigenvalues -- 1.48583 1.49855 1.51118 1.68880 1.72752 Alpha virt. eigenvalues -- 1.73088 1.74469 1.78033 1.81422 1.83132 Alpha virt. eigenvalues -- 1.84443 1.85193 1.93294 1.95057 1.96610 Alpha virt. eigenvalues -- 1.96791 2.05166 2.10128 2.10729 2.13081 Alpha virt. eigenvalues -- 2.14702 2.15987 2.27603 2.30454 2.32370 Alpha virt. eigenvalues -- 2.36274 2.37854 2.39608 2.40260 2.47110 Alpha virt. eigenvalues -- 2.51816 2.55619 2.64224 2.65778 2.73787 Alpha virt. eigenvalues -- 2.76930 2.86239 2.86285 2.99190 3.20051 Alpha virt. eigenvalues -- 3.32343 4.02895 4.07286 4.20174 4.25634 Alpha virt. eigenvalues -- 4.34465 4.44082 4.49646 4.81066 7.92621 Alpha virt. eigenvalues -- 70.37315 Condensed to atoms (all electrons): 1 2 3 4 5 6 1 Bq 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2 C 0.000000 4.622640 0.405450 0.563982 -0.047865 -0.061547 3 C 0.000000 0.405450 4.622579 -0.061557 -0.047856 0.564041 4 C 0.000000 0.563982 -0.061557 5.252860 0.342326 -0.076231 5 Se 0.000000 -0.047865 -0.047856 0.342326 33.386667 0.342258 6 C 0.000000 -0.061547 0.564041 -0.076231 0.342258 5.252883 7 O 0.000000 0.263503 -0.050105 -0.067569 0.004155 0.006247 8 H 0.000000 -0.019221 0.007084 0.339628 -0.043715 0.002254 9 H 0.000000 0.007083 -0.019217 0.002253 -0.043712 0.339633 10 O 0.000000 -0.050098 0.263420 0.006245 0.004155 -0.067561 11 C 0.000000 -0.015857 -0.031208 0.000410 -0.000170 0.002778 12 C 0.000000 -0.031259 -0.015865 0.002778 -0.000170 0.000412 13 H 0.000000 0.000493 0.001730 0.000027 0.000006 -0.000117 14 H 0.000000 0.002583 0.000767 -0.000282 -0.000028 0.000485 15 H 0.000000 0.000755 0.002593 0.000484 -0.000028 -0.000281 16 H 0.000000 0.001731 0.000492 -0.000117 0.000006 0.000027 7 8 9 10 11 12 1 Bq 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2 C 0.263503 -0.019221 0.007083 -0.050098 -0.015857 -0.031259 3 C -0.050105 0.007084 -0.019217 0.263420 -0.031208 -0.015865 4 C -0.067569 0.339628 0.002253 0.006245 0.000410 0.002778 5 Se 0.004155 -0.043715 -0.043712 0.004155 -0.000170 -0.000170 6 C 0.006247 0.002254 0.339633 -0.067561 0.002778 0.000412 7 O 8.220760 -0.000967 -0.000066 -0.008103 -0.040590 0.261914 8 H -0.000967 0.556569 -0.000045 -0.000066 0.000018 -0.000087 9 H -0.000066 -0.000045 0.556537 -0.000970 -0.000087 0.000018 10 O -0.008103 -0.000066 -0.000970 8.220862 0.261943 -0.040591 11 C -0.040590 0.000018 -0.000087 0.261943 4.895911 0.335224 12 C 0.261914 -0.000087 0.000018 -0.040591 0.335224 4.896135 13 H 0.002887 0.000000 -0.000015 -0.034179 0.366080 -0.027923 14 H -0.001846 0.000000 0.000013 -0.047718 0.356204 -0.045511 15 H -0.047700 0.000013 0.000000 -0.001845 -0.045498 0.356197 16 H -0.034166 -0.000015 0.000000 0.002888 -0.027907 0.366063 13 14 15 16 1 Bq 0.000000 0.000000 0.000000 0.000000 2 C 0.000493 0.002583 0.000755 0.001731 3 C 0.001730 0.000767 0.002593 0.000492 4 C 0.000027 -0.000282 0.000484 -0.000117 5 Se 0.000006 -0.000028 -0.000028 0.000006 6 C -0.000117 0.000485 -0.000281 0.000027 7 O 0.002887 -0.001846 -0.047700 -0.034166 8 H 0.000000 0.000000 0.000013 -0.000015 9 H -0.000015 0.000013 0.000000 0.000000 10 O -0.034179 -0.047718 -0.001845 0.002888 11 C 0.366080 0.356204 -0.045498 -0.027907 12 C -0.027923 -0.045511 0.356197 0.366063 13 H 0.576416 -0.041374 -0.001801 0.001128 14 H -0.041374 0.626192 0.006260 -0.001800 15 H -0.001801 0.006260 0.626109 -0.041362 16 H 0.001128 -0.001800 -0.041362 0.576370 Mulliken atomic charges: 1 1 Bq 0.000000 2 C 0.357626 3 C 0.357654 4 C -0.305238 5 Se 0.103971 6 C -0.305281 7 O -0.508352 8 H 0.158551 9 H 0.158575 10 O -0.508382 11 C -0.057253 12 C -0.057336 13 H 0.156643 14 H 0.146054 15 H 0.146104 16 H 0.156663 Sum of Mulliken charges= 0.00000 Atomic charges with hydrogens summed into heavy atoms: 1 1 Bq 0.158575 2 C 0.357626 3 C 0.357654 4 C -0.146687 5 Se 0.103971 6 C -0.305281 7 O -0.508352 8 H 0.000000 9 H 0.000000 10 O -0.508382 11 C 0.245444 12 C 0.245432 13 H 0.000000 14 H 0.000000 15 H 0.000000 16 H 0.000000 Sum of Mulliken charges= 0.00000 Electronic spatial extent (au): = 3088.7080 Charge= 0.0000 electrons Dipole moment (field-independent basis, Debye): X= 0.3382 Y= 1.6614 Z= -0.0136 Tot= 1.6955 Quadrupole moment (field-independent basis, Debye-Ang): XX= -64.2895 YY= -48.4068 ZZ= -65.5715 XY= -0.0994 XZ= 0.2210 YZ= -0.2482 Traceless Quadrupole moment (field-independent basis, Debye-Ang): XX= -4.8669 YY= 11.0158 ZZ= -6.1489 XY= -0.0994 XZ= 0.2210 YZ= -0.2482 Octapole moment (field-independent basis, Debye-Ang**2): XXX= 303.5742 YYY= -201.0542 ZZZ= 9.3194 XYY= 95.4866 XXY= -107.0253 XXZ= 3.4140 XZZ= 107.1728 YZZ= -93.0863 YYZ= 0.7158 XYZ= 2.8555 Hexadecapole moment (field-independent basis, Debye-Ang**3): XXXX= -1384.4936 YYYY= -1788.0003 ZZZZ= -92.7189 XXXY= 412.0821 XXXZ= -17.3613 YYYX= 301.4051 YYYZ= 7.8207 ZZZX= -9.9674 ZZZY= 17.7767 XXYY= -634.2732 XXZZ= -268.1840 YYZZ= -383.2134 XXYZ= -0.5609 YYXZ= 5.1532 ZZXY= 118.3278 N-N= 6.997456621536D+02 E-N=-8.021481879021D+03 KE= 2.769115935160D+03 ------------------------------------------------------------------- Center Atomic Forces (Hartrees/Bohr) Number Number X Y Z ------------------------------------------------------------------- 1 0 0.000000000 0.000000000 0.000000000 2 6 -0.039680400 -0.001562547 0.001479214 3 6 0.035956203 -0.016588267 -0.001294463 4 6 -0.027700675 0.020991574 0.002029687 5 34 -0.000982604 -0.004865663 0.000033012 6 6 0.033674551 0.008281000 -0.002277366 7 8 -0.037962572 0.002458947 0.016197312 8 1 0.000030428 -0.002691983 -0.000153688 9 1 -0.001061886 -0.002466262 0.000203681 10 8 0.035756995 -0.013107067 -0.016174326 11 6 -0.022338070 0.018540391 0.018473903 12 6 0.027800690 0.008036100 -0.018664464 13 1 -0.004808761 -0.011450353 0.000322206 14 1 0.001561638 0.003222649 -0.005680834 15 1 -0.000169706 0.003610951 0.005634683 16 1 -0.000075831 -0.012409467 -0.000128557 ------------------------------------------------------------------- Cartesian Forces: Max 0.039680400 RMS 0.015677402 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Internal Forces: Max 0.062092823 RMS 0.009943233 Search for a local minimum. Step number 1 out of a maximum of 95 All quantities printed in internal units (Hartrees-Bohrs-Radians) Second derivative matrix not updated -- first step. Eigenvalues --- 0.00865 0.02144 0.02250 0.02320 0.02389 Eigenvalues --- 0.02435 0.02444 0.02780 0.04752 0.04950 Eigenvalues --- 0.05947 0.06487 0.06560 0.10619 0.11470 Eigenvalues --- 0.11559 0.12816 0.15997 0.15997 0.20673 Eigenvalues --- 0.20899 0.22109 0.22285 0.23216 0.23366 Eigenvalues --- 0.24396 0.24978 0.27237 0.32380 0.32381 Eigenvalues --- 0.32599 0.32601 0.35783 0.35785 0.44244 Eigenvalues --- 0.44562 0.46535 0.47749 0.50412 0.52164 Eigenvalues --- 0.53330 2.039811000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 RFO step: Lambda=-2.50475055D-02. Linear search not attempted -- first point. Maximum step size ( 0.300) exceeded in Quadratic search. -- Step size scaled by 0.935 Iteration 1 RMS(Cart)= 0.03783818 RMS(Int)= 0.00083636 Iteration 2 RMS(Cart)= 0.00113355 RMS(Int)= 0.00041783 Iteration 3 RMS(Cart)= 0.00000038 RMS(Int)= 0.00041783 Variable Old X -DE/DX Delta X Delta X Delta X New X (Linear) (Quad) (Total) R1 1.29930 0.00000 0.00000 0.00000 0.00000 1.29930 R2 2.58061 0.06209 0.00000 0.11988 0.11969 2.70030 R3 2.59323 -0.00362 0.00000 -0.00455 -0.00452 2.58870 R4 2.56096 0.00579 0.00000 0.01373 0.01363 2.57459 R5 2.59280 -0.00500 0.00000 -0.00691 -0.00693 2.58587 R6 2.56147 0.00549 0.00000 0.01326 0.01315 2.57462 R7 3.46028 0.01562 0.00000 0.05266 0.05267 3.51295 R8 2.04422 -0.00016 0.00000 -0.00039 -0.00039 2.04383 R9 3.46040 0.01437 0.00000 0.04802 0.04799 3.50838 R10 2.04419 -0.00013 0.00000 -0.00032 -0.00032 2.04387 R11 2.63192 0.01935 0.00000 0.03197 0.03219 2.66411 R12 2.63167 0.01933 0.00000 0.03194 0.03215 2.66382 R13 2.92297 -0.00100 0.00000 -0.01636 -0.01638 2.90659 R14 2.09762 -0.01102 0.00000 -0.02934 -0.02934 2.06828 R15 2.10154 -0.00557 0.00000 -0.01494 -0.01494 2.08660 R16 2.10152 -0.00559 0.00000 -0.01499 -0.01499 2.08653 R17 2.09757 -0.01099 0.00000 -0.02928 -0.02928 2.06829 A1 1.99095 0.00421 0.00000 0.02356 0.02371 2.01466 A2 2.10165 0.00260 0.00000 0.01839 0.01809 2.11974 A3 2.19058 -0.00680 0.00000 -0.04196 -0.04179 2.14878 A4 1.99135 0.00282 0.00000 0.01891 0.01902 2.01037 A5 2.10125 0.00332 0.00000 0.02084 0.02055 2.12180 A6 2.19058 -0.00614 0.00000 -0.03975 -0.03957 2.15102 A7 1.97513 -0.01513 0.00000 -0.05258 -0.05261 1.92252 A8 2.15065 0.01032 0.00000 0.04027 0.04028 2.19093 A9 2.15724 0.00483 0.00000 0.01243 0.01243 2.16968 A10 1.49206 0.02157 0.00000 0.05794 0.05779 1.54985 A11 2.19819 0.00614 0.00000 0.01949 0.01943 2.21763 A12 2.03705 0.00676 0.00000 0.02075 0.02076 2.05781 A13 0.33086 -0.00109 0.00000 0.00047 0.00057 0.33143 A14 1.97504 -0.01345 0.00000 -0.04772 -0.04784 1.92720 A15 2.15081 0.00932 0.00000 0.03769 0.03776 2.18856 A16 2.15718 0.00414 0.00000 0.00993 0.00997 2.16715 A17 2.08096 -0.01633 0.00000 -0.07388 -0.07330 2.00766 A18 2.08099 -0.01653 0.00000 -0.07458 -0.07402 2.00697 A19 1.91375 0.01207 0.00000 0.02581 0.02469 1.93844 A20 1.92847 -0.01225 0.00000 -0.06204 -0.06219 1.86628 A21 1.89245 0.00285 0.00000 0.03523 0.03475 1.92720 A22 1.95094 -0.00118 0.00000 -0.01238 -0.01196 1.93898 A23 1.88313 -0.00200 0.00000 0.01840 0.01716 1.90028 A24 1.89353 0.00074 0.00000 -0.00174 -0.00136 1.89216 A25 1.91367 0.01213 0.00000 0.02625 0.02510 1.93877 A26 1.89241 0.00280 0.00000 0.03480 0.03431 1.92673 A27 1.92847 -0.01228 0.00000 -0.06225 -0.06240 1.86607 A28 1.88316 -0.00194 0.00000 0.01847 0.01726 1.90041 A29 1.95098 -0.00122 0.00000 -0.01234 -0.01193 1.93905 A30 1.89358 0.00075 0.00000 -0.00165 -0.00128 1.89230 D1 0.02294 -0.00082 0.00000 -0.00504 -0.00518 0.01776 D2 -3.11819 -0.00170 0.00000 -0.00301 -0.00320 -3.12140 D3 -3.11821 -0.00205 0.00000 -0.00391 -0.00425 -3.12245 D4 0.02385 -0.00293 0.00000 -0.00188 -0.00227 0.02157 D5 -0.01768 0.00114 0.00000 0.01053 0.01033 -0.00735 D6 -3.14077 -0.00009 0.00000 0.00310 0.00291 -3.13785 D7 3.12344 0.00245 0.00000 0.00936 0.00940 3.13284 D8 0.00035 0.00122 0.00000 0.00193 0.00198 0.00234 D9 0.25329 -0.00189 0.00000 0.00401 0.00411 0.25740 D10 -2.88780 -0.00327 0.00000 0.00525 0.00509 -2.88271 D11 -2.74203 0.00114 0.00000 0.01649 0.01644 -2.72559 D12 -0.01771 0.00065 0.00000 -0.00106 -0.00111 -0.01881 D13 -3.14074 -0.00022 0.00000 0.00479 0.00482 -3.13592 D14 0.39907 0.00208 0.00000 0.01436 0.01445 0.41352 D15 3.12339 0.00159 0.00000 -0.00319 -0.00310 3.12030 D16 0.00036 0.00072 0.00000 0.00266 0.00283 0.00319 D17 0.25343 -0.00197 0.00000 0.00365 0.00374 0.25717 D18 -2.88765 -0.00296 0.00000 0.00591 0.00585 -2.88179 D19 0.00624 -0.00053 0.00000 -0.00879 -0.00880 -0.00255 D20 3.12925 0.00077 0.00000 -0.00099 -0.00113 3.12812 D21 2.77177 0.00007 0.00000 -0.00852 -0.00839 2.76338 D22 0.00627 0.00009 0.00000 0.00566 0.00572 0.01199 D23 3.12922 0.00102 0.00000 0.00012 0.00023 3.12945 D24 -0.70570 -0.00079 0.00000 -0.03993 -0.03958 -0.74528 D25 1.34632 0.00532 0.00000 0.01709 0.01836 1.36469 D26 -2.86373 0.00074 0.00000 -0.00016 0.00018 -2.86356 D27 -0.70588 -0.00066 0.00000 -0.03927 -0.03887 -0.74475 D28 -2.86392 0.00085 0.00000 0.00070 0.00105 -2.86287 D29 1.34618 0.00538 0.00000 0.01768 0.01898 1.36516 D30 0.90955 0.01359 0.00000 0.10228 0.10343 1.01298 D31 -1.14826 0.00462 0.00000 0.03543 0.03584 -1.11242 D32 3.05431 0.00567 0.00000 0.03299 0.03360 3.08792 D33 3.05435 0.00570 0.00000 0.03293 0.03356 3.08791 D34 0.99655 -0.00327 0.00000 -0.03392 -0.03403 0.96252 D35 -1.08407 -0.00223 0.00000 -0.03636 -0.03627 -1.12034 D36 -1.14833 0.00463 0.00000 0.03519 0.03562 -1.11271 D37 3.07705 -0.00434 0.00000 -0.03167 -0.03198 3.04508 D38 0.99644 -0.00330 0.00000 -0.03410 -0.03421 0.96222 Item Value Threshold Converged? Maximum Force 0.062093 0.000450 NO RMS Force 0.009943 0.000300 NO Maximum Displacement 0.109074 0.001800 NO RMS Displacement 0.038257 0.001200 NO Predicted change in Energy=-1.365154D-02 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 0 0 0.050488 0.011279 -0.008680 2 6 0 -2.264428 1.915963 0.014492 3 6 0 -0.870637 1.629638 -0.116760 4 6 0 -3.085265 0.821789 0.089257 5 34 0 -2.082618 -0.739738 -0.020764 6 6 0 -0.551920 0.300010 -0.171400 7 8 0 -2.725903 3.197080 0.058722 8 1 0 -4.162039 0.849337 0.186962 9 1 0 0.448184 -0.101162 -0.264370 10 8 0 0.059038 2.623684 -0.178385 11 6 0 -0.402081 3.895689 0.217132 12 6 0 -1.801871 4.178508 -0.354144 13 1 0 0.326961 4.626364 -0.146884 14 1 0 -0.444986 3.964675 1.318319 15 1 0 -1.738838 4.208285 -1.456088 16 1 0 -2.183176 5.142600 -0.003360 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 Bq 0.000000 2 C 2.997865 0.000000 3 C 1.865271 1.428937 0.000000 4 C 3.240288 1.369883 2.366356 0.000000 5 Se 2.261484 2.662150 2.663091 1.858971 0.000000 6 C 0.687560 2.361894 1.368384 2.599622 1.856556 7 O 4.226371 1.362415 2.435093 2.402516 3.989820 8 H 4.299535 2.183659 3.396240 1.081549 2.625320 9 H 0.485986 3.391875 2.180996 3.669080 2.621465 10 O 2.617925 2.436507 1.362432 3.633882 3.990506 11 C 3.917199 2.725567 2.337951 4.082241 4.936393 12 C 4.573442 2.338581 2.724020 3.620949 4.937520 13 H 4.625424 3.753347 3.227308 5.116038 5.883624 14 H 4.199495 3.034395 2.773631 4.284787 5.158147 15 H 4.786599 2.773733 3.032655 3.958448 5.163455 16 H 5.596403 3.227709 3.751869 4.414946 5.883223 6 7 8 9 10 6 C 0.000000 7 O 3.629348 0.000000 8 H 3.669216 2.755146 0.000000 9 H 1.081568 4.588857 4.728774 0.000000 10 O 2.402660 2.853226 4.593395 2.753836 0.000000 11 C 3.619712 2.431727 4.839262 4.114561 1.409632 12 C 4.079034 1.409786 4.116621 4.835947 2.431328 13 H 4.414790 3.377145 5.876097 4.730539 2.020768 14 H 3.957330 2.716315 4.980139 4.453502 2.071815 15 H 4.281800 2.071590 4.455788 4.977408 2.715851 16 H 5.112720 2.020756 4.731197 5.872752 3.376847 11 12 13 14 15 11 C 0.000000 12 C 1.538101 0.000000 13 H 1.094485 2.185282 0.000000 14 H 1.104179 2.164254 1.783411 0.000000 15 H 2.164324 1.104146 2.481195 3.070949 0.000000 16 H 2.185338 1.094493 2.566688 2.481058 1.783479 16 16 H 0.000000 Symmetry turned off by external request. Symmetry turned off: Cannot cope with ghost atoms or with translation vectors. Stoichiometry C6H6O2Se Framework group C1[X(C6H6O2Se)] NUMDOF-- NAT= 15 NAtoms= 16 Deg. of freedom 0 Full point group C1 Rotational constants (GHZ): 3.3371107 0.7408325 0.6161891 Standard basis: 6-31G(d) (6D, 7F) Warning: center 1 has no basis functions! Integral buffers will be 131072 words long. Raffenetti 2 integral format. Two-electron integral symmetry is turned off. 162 basis functions, 331 primitive gaussians, 162 cartesian basis functions 46 alpha electrons 46 beta electrons nuclear repulsion energy 696.8157670149 Hartrees. NAtoms= 16 NActive= 16 NUniq= 16 SFac= 7.50D-01 NAtFMM= 80 NAOKFM=F Big=F One-electron integrals computed using PRISM. NBasis= 162 RedAO= T NBF= 162 NBsUse= 162 1.00D-06 NBFU= 162 Initial guess read from the read-write file: Harris functional with IExCor= 402 diagonalized for initial guess. ExpMin= 1.23D-01 ExpMax= 5.61D+05 ExpMxC= 5.42D+03 IAcc=2 IRadAn= 4 AccDes= 0.00D+00 HarFok: IExCor= 402 AccDes= 0.00D+00 IRadAn= 4 IDoV=1 ScaDFX= 1.000000 1.000000 1.000000 1.000000 Requested convergence on RMS density matrix=1.00D-08 within 128 cycles. Requested convergence on MAX density matrix=1.00D-06. Requested convergence on energy=1.00D-06. No special actions if energy rises. Integral accuracy reduced to 1.0D-05 until final iterations. Initial convergence to 1.0D-05 achieved. Increase integral accuracy. SCF Done: E(RB+HF-LYP) = -2782.02331792 A.U. after 14 cycles Convg = 0.4552D-08 -V/T = 2.0047 S**2 = 0.0000 ------------------------------------------------------------------- Center Atomic Forces (Hartrees/Bohr) Number Number X Y Z ------------------------------------------------------------------- 1 0 0.000000000 0.000000000 0.000000000 2 6 -0.007454010 -0.006313016 -0.001246006 3 6 0.003078024 -0.008427150 0.001426116 4 6 0.003090927 0.009318768 -0.000171126 5 34 -0.002457168 -0.008222914 -0.000415935 6 6 0.002842574 0.008698893 0.000635821 7 8 -0.012112321 0.000613700 0.006286517 8 1 0.001196045 -0.001976009 -0.000212921 9 1 -0.001791613 -0.001424466 0.000304708 10 8 0.011138089 -0.004586121 -0.006449393 11 6 -0.011701751 0.010766017 0.006907852 12 6 0.014883367 0.005152260 -0.007062851 13 1 -0.000792465 -0.000677799 -0.000497196 14 1 0.000737845 -0.001216149 -0.001941664 15 1 -0.001115714 -0.000784672 0.001941403 16 1 0.000458172 -0.000921342 0.000494676 ------------------------------------------------------------------- Cartesian Forces: Max 0.014883367 RMS 0.005459057 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Internal Forces: Max 0.010385693 RMS 0.002485399 Search for a local minimum. Step number 2 out of a maximum of 95 All quantities printed in internal units (Hartrees-Bohrs-Radians) Update second derivatives using D2CorX and points 1 2 Trust test= 9.53D-01 RLast= 3.00D-01 DXMaxT set to 4.24D-01 Eigenvalues --- 0.00860 0.02162 0.02248 0.02324 0.02393 Eigenvalues --- 0.02437 0.02446 0.02832 0.04713 0.05260 Eigenvalues --- 0.05799 0.06514 0.06622 0.10586 0.11633 Eigenvalues --- 0.11695 0.12938 0.15791 0.15997 0.20035 Eigenvalues --- 0.20419 0.21857 0.22121 0.22986 0.24378 Eigenvalues --- 0.24977 0.25829 0.27575 0.32182 0.32381 Eigenvalues --- 0.32600 0.32741 0.35784 0.35790 0.42417 Eigenvalues --- 0.44842 0.46241 0.47007 0.49989 0.52232 Eigenvalues --- 0.54850 2.039811000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 RFO step: Lambda=-1.83844910D-03. Quartic linear search produced a step of 0.16853. Iteration 1 RMS(Cart)= 0.01585446 RMS(Int)= 0.00034559 Iteration 2 RMS(Cart)= 0.00030768 RMS(Int)= 0.00020992 Iteration 3 RMS(Cart)= 0.00000009 RMS(Int)= 0.00020992 Variable Old X -DE/DX Delta X Delta X Delta X New X (Linear) (Quad) (Total) R1 1.29930 0.00000 0.00000 0.00000 0.00000 1.29930 R2 2.70030 0.00676 0.02017 0.00486 0.02499 2.72529 R3 2.58870 -0.00498 -0.00076 -0.01084 -0.01161 2.57709 R4 2.57459 0.00591 0.00230 0.01250 0.01480 2.58939 R5 2.58587 -0.00349 -0.00117 -0.00709 -0.00828 2.57759 R6 2.57462 0.00567 0.00222 0.01205 0.01427 2.58890 R7 3.51295 0.00346 0.00888 0.01152 0.02043 3.53338 R8 2.04383 -0.00126 -0.00007 -0.00406 -0.00413 2.03970 R9 3.50838 0.00409 0.00809 0.01549 0.02360 3.53199 R10 2.04387 -0.00115 -0.00005 -0.00370 -0.00375 2.04012 R11 2.66411 0.01021 0.00542 0.02036 0.02580 2.68991 R12 2.66382 0.01039 0.00542 0.02078 0.02622 2.69004 R13 2.90659 -0.00487 -0.00276 -0.02262 -0.02541 2.88118 R14 2.06828 -0.00082 -0.00494 0.00038 -0.00457 2.06371 R15 2.08660 -0.00204 -0.00252 -0.00565 -0.00816 2.07843 R16 2.08653 -0.00203 -0.00253 -0.00558 -0.00811 2.07842 R17 2.06829 -0.00081 -0.00493 0.00039 -0.00455 2.06375 A1 2.01466 -0.00131 0.00399 -0.00884 -0.00486 2.00980 A2 2.11974 0.00094 0.00305 0.00366 0.00653 2.12628 A3 2.14878 0.00037 -0.00704 0.00518 -0.00168 2.14711 A4 2.01037 -0.00043 0.00321 -0.00410 -0.00092 2.00945 A5 2.12180 0.00043 0.00346 0.00097 0.00427 2.12606 A6 2.15102 -0.00001 -0.00667 0.00314 -0.00335 2.14767 A7 1.92252 0.00271 -0.00887 0.01950 0.01057 1.93309 A8 2.19093 0.00064 0.00679 0.00299 0.00979 2.20072 A9 2.16968 -0.00335 0.00210 -0.02259 -0.02048 2.14919 A10 1.54985 -0.00247 0.00974 -0.02079 -0.01104 1.53882 A11 2.21763 -0.00060 0.00328 -0.00276 0.00048 2.21810 A12 2.05781 -0.00057 0.00350 -0.00289 0.00064 2.05845 A13 0.33143 -0.00029 0.00010 -0.00180 -0.00147 0.32995 A14 1.92720 0.00151 -0.00806 0.01456 0.00633 1.93353 A15 2.18856 0.00125 0.00636 0.00585 0.01221 2.20077 A16 2.16715 -0.00274 0.00168 -0.01990 -0.01827 2.14888 A17 2.00766 -0.00307 -0.01235 -0.01852 -0.03085 1.97681 A18 2.00697 -0.00286 -0.01247 -0.01743 -0.02987 1.97710 A19 1.93844 0.00179 0.00416 -0.00454 -0.00122 1.93722 A20 1.86628 -0.00143 -0.01048 -0.00099 -0.01153 1.85475 A21 1.92720 -0.00053 0.00586 -0.00778 -0.00175 1.92545 A22 1.93898 -0.00132 -0.00202 -0.00926 -0.01101 1.92797 A23 1.90028 0.00096 0.00289 0.01493 0.01763 1.91792 A24 1.89216 0.00045 -0.00023 0.00740 0.00721 1.89937 A25 1.93877 0.00165 0.00423 -0.00548 -0.00209 1.93668 A26 1.92673 -0.00046 0.00578 -0.00730 -0.00134 1.92539 A27 1.86607 -0.00139 -0.01052 -0.00091 -0.01148 1.85459 A28 1.90041 0.00096 0.00291 0.01495 0.01767 1.91808 A29 1.93905 -0.00125 -0.00201 -0.00892 -0.01066 1.92838 A30 1.89230 0.00043 -0.00022 0.00744 0.00726 1.89956 D1 0.01776 -0.00048 -0.00087 -0.00915 -0.01012 0.00764 D2 -3.12140 -0.00088 -0.00054 -0.01414 -0.01492 -3.13631 D3 -3.12245 -0.00092 -0.00072 -0.01322 -0.01419 -3.13664 D4 0.02157 -0.00132 -0.00038 -0.01822 -0.01898 0.00259 D5 -0.00735 0.00003 0.00174 -0.00732 -0.00557 -0.01292 D6 -3.13785 0.00001 0.00049 0.00279 0.00326 -3.13460 D7 3.13284 0.00049 0.00158 -0.00317 -0.00145 3.13139 D8 0.00234 0.00047 0.00033 0.00694 0.00738 0.00972 D9 0.25740 -0.00022 0.00069 0.02027 0.02076 0.27816 D10 -2.88271 -0.00070 0.00086 0.01589 0.01638 -2.86633 D11 -2.72559 -0.00014 0.00277 -0.00216 0.00054 -2.72506 D12 -0.01881 0.00066 -0.00019 0.02060 0.02048 0.00166 D13 -3.13592 -0.00007 0.00081 -0.00130 -0.00057 -3.13649 D14 0.41352 0.00027 0.00243 0.00293 0.00541 0.41893 D15 3.12030 0.00107 -0.00052 0.02568 0.02535 -3.13754 D16 0.00319 0.00034 0.00048 0.00379 0.00430 0.00749 D17 0.25717 -0.00030 0.00063 0.01911 0.01951 0.27667 D18 -2.88179 -0.00074 0.00099 0.01371 0.01433 -2.86747 D19 -0.00255 0.00030 -0.00148 0.01536 0.01379 0.01124 D20 3.12812 0.00035 -0.00019 0.00559 0.00549 3.13361 D21 2.76338 0.00013 -0.00141 -0.00020 -0.00144 2.76193 D22 0.01199 -0.00052 0.00096 -0.02012 -0.01913 -0.00714 D23 3.12945 0.00027 0.00004 0.00188 0.00168 3.13114 D24 -0.74528 -0.00110 -0.00667 -0.03477 -0.04104 -0.78632 D25 1.36469 0.00089 0.00309 -0.02446 -0.02102 1.34367 D26 -2.86356 0.00035 0.00003 -0.02003 -0.01970 -2.88325 D27 -0.74475 -0.00112 -0.00655 -0.03423 -0.04039 -0.78514 D28 -2.86287 0.00034 0.00018 -0.01958 -0.01910 -2.88197 D29 1.36516 0.00092 0.00320 -0.02365 -0.02011 1.34504 D30 1.01298 0.00250 0.01743 0.04771 0.06548 1.07846 D31 -1.11242 0.00138 0.00604 0.05039 0.05664 -1.05578 D32 3.08792 0.00101 0.00566 0.03716 0.04301 3.13092 D33 3.08791 0.00102 0.00566 0.03745 0.04329 3.13120 D34 0.96252 -0.00010 -0.00573 0.04014 0.03444 0.99695 D35 -1.12034 -0.00047 -0.00611 0.02691 0.02081 -1.09953 D36 -1.11271 0.00138 0.00600 0.05041 0.05661 -1.05611 D37 3.04508 0.00026 -0.00539 0.05309 0.04776 3.09283 D38 0.96222 -0.00011 -0.00577 0.03986 0.03413 0.99635 Item Value Threshold Converged? Maximum Force 0.010386 0.000450 NO RMS Force 0.002485 0.000300 NO Maximum Displacement 0.054908 0.001800 NO RMS Displacement 0.015894 0.001200 NO Predicted change in Energy=-1.150685D-03 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 0 0 0.054138 0.018301 -0.008609 2 6 0 -2.269389 1.924361 0.022516 3 6 0 -0.863872 1.633709 -0.118449 4 6 0 -3.082746 0.832121 0.094935 5 34 0 -2.087484 -0.745217 -0.037550 6 6 0 -0.548721 0.307564 -0.168694 7 8 0 -2.739007 3.210272 0.081395 8 1 0 -4.157378 0.845115 0.195061 9 1 0 0.443185 -0.107160 -0.266803 10 8 0 0.074896 2.628332 -0.197790 11 6 0 -0.412798 3.897237 0.224592 12 6 0 -1.791906 4.175553 -0.362919 13 1 0 0.309313 4.635926 -0.129678 14 1 0 -0.457668 3.942982 1.322583 15 1 0 -1.737041 4.179229 -1.461398 16 1 0 -2.162612 5.145676 -0.025141 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 Bq 0.000000 2 C 3.005464 0.000000 3 C 1.861276 1.442161 0.000000 4 C 3.242386 1.363739 2.368856 0.000000 5 Se 2.273838 2.676442 2.676388 1.869784 0.000000 6 C 0.687561 2.368816 1.364003 2.601142 1.869046 7 O 4.242457 1.370246 2.457971 2.402903 4.010551 8 H 4.296740 2.181524 3.401081 1.079365 2.620635 9 H 0.483489 3.401300 2.181979 3.666782 2.619915 10 O 2.616961 2.457598 1.369985 3.644554 4.010286 11 C 3.913893 2.716617 2.333390 4.066986 4.942233 12 C 4.562472 2.333327 2.716980 3.613092 4.940364 13 H 4.626255 3.745057 3.223321 5.101515 5.891504 14 H 4.175780 3.007879 2.752147 4.251542 5.146403 15 H 4.757335 2.751332 3.007592 3.928897 5.138124 16 H 5.586075 3.223437 3.745577 4.412236 5.891385 6 7 8 9 10 6 C 0.000000 7 O 3.644943 0.000000 8 H 3.666563 2.760192 0.000000 9 H 1.079583 4.610091 4.720734 0.000000 10 O 2.403271 2.886979 4.609376 2.761036 0.000000 11 C 3.613711 2.429748 4.830963 4.124242 1.423507 12 C 4.067501 1.423440 4.122938 4.831821 2.430249 13 H 4.412762 3.371839 5.867455 4.746956 2.022381 14 H 3.930453 2.698503 4.955395 4.443122 2.079294 15 H 4.251233 2.079188 4.440519 4.955156 2.699093 16 H 5.102213 2.022219 4.745777 5.868634 3.372428 11 12 13 14 15 11 C 0.000000 12 C 1.524653 0.000000 13 H 1.092068 2.163669 0.000000 14 H 1.099859 2.162220 1.782552 0.000000 15 H 2.162337 1.099855 2.483871 3.072972 0.000000 16 H 2.163982 1.092088 2.526101 2.483882 1.782685 16 16 H 0.000000 Symmetry turned off by external request. Symmetry turned off: Cannot cope with ghost atoms or with translation vectors. Stoichiometry C6H6O2Se Framework group C1[X(C6H6O2Se)] NUMDOF-- NAT= 15 NAtoms= 16 Deg. of freedom 0 Full point group C1 Rotational constants (GHZ): 3.3056332 0.7377572 0.6133619 Standard basis: 6-31G(d) (6D, 7F) Warning: center 1 has no basis functions! Integral buffers will be 131072 words long. Raffenetti 2 integral format. Two-electron integral symmetry is turned off. 162 basis functions, 331 primitive gaussians, 162 cartesian basis functions 46 alpha electrons 46 beta electrons nuclear repulsion energy 694.7024505249 Hartrees. NAtoms= 16 NActive= 16 NUniq= 16 SFac= 7.50D-01 NAtFMM= 80 NAOKFM=F Big=F One-electron integrals computed using PRISM. NBasis= 162 RedAO= T NBF= 162 NBsUse= 162 1.00D-06 NBFU= 162 Initial guess read from the read-write file: Harris functional with IExCor= 402 diagonalized for initial guess. ExpMin= 1.23D-01 ExpMax= 5.61D+05 ExpMxC= 5.42D+03 IAcc=2 IRadAn= 4 AccDes= 0.00D+00 HarFok: IExCor= 402 AccDes= 0.00D+00 IRadAn= 4 IDoV=1 ScaDFX= 1.000000 1.000000 1.000000 1.000000 Requested convergence on RMS density matrix=1.00D-08 within 128 cycles. Requested convergence on MAX density matrix=1.00D-06. Requested convergence on energy=1.00D-06. No special actions if energy rises. Integral accuracy reduced to 1.0D-05 until final iterations. Initial convergence to 1.0D-05 achieved. Increase integral accuracy. SCF Done: E(RB+HF-LYP) = -2782.02468797 A.U. after 13 cycles Convg = 0.3273D-08 -V/T = 2.0047 S**2 = 0.0000 ------------------------------------------------------------------- Center Atomic Forces (Hartrees/Bohr) Number Number X Y Z ------------------------------------------------------------------- 1 0 0.000000000 0.000000000 0.000000000 2 6 -0.001885572 -0.002283423 -0.001275856 3 6 0.000758213 -0.003005594 0.001552729 4 6 0.002376801 0.002017218 -0.000800592 5 34 -0.000348367 -0.000857270 0.000698342 6 6 -0.001128593 0.003131363 -0.000326927 7 8 -0.002439909 -0.001267347 0.001988254 8 1 -0.000422940 -0.000747506 -0.000046864 9 1 -0.000032879 -0.000770054 0.000000214 10 8 0.001764078 -0.002117274 -0.001817072 11 6 -0.002826900 0.003835453 0.000491316 12 6 0.004178546 0.002252963 -0.000443279 13 1 0.000873788 0.000551972 -0.000038210 14 1 -0.000134806 -0.000804080 -0.000218680 15 1 -0.000197611 -0.000794803 0.000222193 16 1 -0.000533849 0.000858383 0.000014431 ------------------------------------------------------------------- Cartesian Forces: Max 0.004178546 RMS 0.001569563 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Internal Forces: Max 0.003569518 RMS 0.000749216 Search for a local minimum. Step number 3 out of a maximum of 95 All quantities printed in internal units (Hartrees-Bohrs-Radians) Update second derivatives using D2CorX and points 1 2 3 Trust test= 1.19D+00 RLast= 1.93D-01 DXMaxT set to 5.79D-01 Eigenvalues --- 0.00851 0.02186 0.02248 0.02292 0.02349 Eigenvalues --- 0.02439 0.02446 0.02857 0.04754 0.05362 Eigenvalues --- 0.05744 0.06637 0.06715 0.10775 0.11615 Eigenvalues --- 0.11641 0.12910 0.14959 0.15999 0.19895 Eigenvalues --- 0.20111 0.21841 0.22140 0.23178 0.24378 Eigenvalues --- 0.24973 0.25760 0.27249 0.32028 0.32381 Eigenvalues --- 0.32600 0.33127 0.35783 0.35896 0.37617 Eigenvalues --- 0.44931 0.46758 0.47135 0.49930 0.52240 Eigenvalues --- 0.54816 2.039811000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 RFO step: Lambda=-2.09808199D-04. Quartic linear search produced a step of 0.22044. Iteration 1 RMS(Cart)= 0.00781223 RMS(Int)= 0.00009111 Iteration 2 RMS(Cart)= 0.00006777 RMS(Int)= 0.00005617 Iteration 3 RMS(Cart)= 0.00000000 RMS(Int)= 0.00005617 Variable Old X -DE/DX Delta X Delta X Delta X New X (Linear) (Quad) (Total) R1 1.29930 0.00000 0.00000 0.00000 0.00000 1.29930 R2 2.72529 0.00071 0.00551 0.00164 0.00713 2.73242 R3 2.57709 -0.00163 -0.00256 -0.00253 -0.00508 2.57201 R4 2.58939 0.00135 0.00326 0.00136 0.00462 2.59401 R5 2.57759 -0.00181 -0.00182 -0.00333 -0.00517 2.57243 R6 2.58890 0.00143 0.00315 0.00159 0.00474 2.59363 R7 3.53338 -0.00027 0.00450 -0.00260 0.00192 3.53530 R8 2.03970 0.00040 -0.00091 0.00191 0.00100 2.04071 R9 3.53199 0.00010 0.00520 -0.00094 0.00427 3.53626 R10 2.04012 0.00027 -0.00083 0.00141 0.00058 2.04070 R11 2.68991 0.00357 0.00569 0.00664 0.01233 2.70224 R12 2.69004 0.00351 0.00578 0.00643 0.01220 2.70224 R13 2.88118 -0.00125 -0.00560 -0.00269 -0.00829 2.87289 R14 2.06371 0.00096 -0.00101 0.00328 0.00227 2.06598 R15 2.07843 -0.00025 -0.00180 -0.00024 -0.00204 2.07639 R16 2.07842 -0.00024 -0.00179 -0.00021 -0.00200 2.07643 R17 2.06375 0.00095 -0.00100 0.00323 0.00222 2.06597 A1 2.00980 -0.00032 -0.00107 -0.00025 -0.00135 2.00845 A2 2.12628 -0.00002 0.00144 -0.00119 0.00016 2.12644 A3 2.14711 0.00035 -0.00037 0.00142 0.00110 2.14820 A4 2.00945 -0.00023 -0.00020 -0.00023 -0.00047 2.00898 A5 2.12606 0.00006 0.00094 -0.00052 0.00034 2.12641 A6 2.14767 0.00017 -0.00074 0.00073 0.00006 2.14772 A7 1.93309 0.00071 0.00233 0.00041 0.00266 1.93575 A8 2.20072 0.00042 0.00216 0.00410 0.00622 2.20695 A9 2.14919 -0.00112 -0.00452 -0.00416 -0.00871 2.14048 A10 1.53882 -0.00076 -0.00243 0.00019 -0.00227 1.53654 A11 2.21810 -0.00035 0.00010 -0.00243 -0.00232 2.21579 A12 2.05845 -0.00030 0.00014 -0.00224 -0.00208 2.05637 A13 0.32995 -0.00007 -0.00032 -0.00063 -0.00085 0.32911 A14 1.93353 0.00061 0.00140 0.00015 0.00147 1.93500 A15 2.20077 0.00042 0.00269 0.00364 0.00634 2.20710 A16 2.14888 -0.00103 -0.00403 -0.00382 -0.00786 2.14102 A17 1.97681 0.00004 -0.00680 0.00089 -0.00597 1.97084 A18 1.97710 0.00008 -0.00658 0.00090 -0.00574 1.97135 A19 1.93722 -0.00009 -0.00027 -0.00142 -0.00188 1.93533 A20 1.85475 0.00003 -0.00254 0.00204 -0.00050 1.85425 A21 1.92545 -0.00045 -0.00039 -0.00724 -0.00756 1.91789 A22 1.92797 0.00033 -0.00243 0.00766 0.00529 1.93326 A23 1.91792 0.00013 0.00389 -0.00277 0.00110 1.91902 A24 1.89937 0.00004 0.00159 0.00198 0.00354 1.90291 A25 1.93668 0.00007 -0.00046 -0.00018 -0.00083 1.93585 A26 1.92539 -0.00052 -0.00030 -0.00780 -0.00802 1.91737 A27 1.85459 0.00001 -0.00253 0.00226 -0.00027 1.85432 A28 1.91808 0.00011 0.00389 -0.00305 0.00083 1.91891 A29 1.92838 0.00025 -0.00235 0.00724 0.00494 1.93332 A30 1.89956 0.00006 0.00160 0.00176 0.00334 1.90290 D1 0.00764 -0.00007 -0.00223 0.00088 -0.00138 0.00626 D2 -3.13631 -0.00030 -0.00329 -0.00838 -0.01172 3.13515 D3 -3.13664 -0.00034 -0.00313 -0.00994 -0.01313 3.13341 D4 0.00259 -0.00057 -0.00418 -0.01920 -0.02348 -0.02088 D5 -0.01292 0.00033 -0.00123 0.01521 0.01400 0.00108 D6 -3.13460 -0.00007 0.00072 -0.00374 -0.00308 -3.13767 D7 3.13139 0.00060 -0.00032 0.02618 0.02592 -3.12587 D8 0.00972 0.00021 0.00163 0.00722 0.00884 0.01856 D9 0.27816 0.00003 0.00458 0.01215 0.01666 0.29482 D10 -2.86633 -0.00026 0.00361 0.00047 0.00395 -2.86238 D11 -2.72506 -0.00008 0.00012 -0.00388 -0.00379 -2.72885 D12 0.00166 -0.00022 0.00451 -0.01652 -0.01197 -0.01030 D13 -3.13649 -0.00006 -0.00013 -0.00367 -0.00377 -3.14026 D14 0.41893 0.00015 0.00119 0.00551 0.00669 0.42562 D15 -3.13754 0.00001 0.00559 -0.00713 -0.00149 -3.13902 D16 0.00749 0.00018 0.00095 0.00572 0.00671 0.01420 D17 0.27667 0.00009 0.00430 0.01368 0.01790 0.29457 D18 -2.86747 -0.00016 0.00316 0.00368 0.00672 -2.86074 D19 0.01124 -0.00037 0.00304 -0.01975 -0.01672 -0.00548 D20 3.13361 0.00003 0.00121 -0.00135 -0.00021 3.13340 D21 2.76193 0.00016 -0.00032 0.00876 0.00848 2.77042 D22 -0.00714 0.00033 -0.00422 0.02023 0.01599 0.00885 D23 3.13114 0.00017 0.00037 0.00785 0.00819 3.13933 D24 -0.78632 -0.00016 -0.00905 -0.00400 -0.01296 -0.79929 D25 1.34367 -0.00032 -0.00463 -0.01332 -0.01791 1.32576 D26 -2.88325 -0.00051 -0.00434 -0.01403 -0.01830 -2.90155 D27 -0.78514 -0.00012 -0.00890 -0.00482 -0.01364 -0.79878 D28 -2.88197 -0.00049 -0.00421 -0.01454 -0.01868 -2.90065 D29 1.34504 -0.00032 -0.00443 -0.01426 -0.01864 1.32640 D30 1.07846 -0.00045 0.01444 -0.00211 0.01237 1.09083 D31 -1.05578 0.00008 0.01248 0.00995 0.02247 -1.03331 D32 3.13092 -0.00023 0.00948 0.00512 0.01462 -3.13765 D33 3.13120 -0.00026 0.00954 0.00434 0.01390 -3.13809 D34 0.99695 0.00027 0.00759 0.01640 0.02401 1.02096 D35 -1.09953 -0.00004 0.00459 0.01158 0.01615 -1.08338 D36 -1.05611 0.00009 0.01248 0.00989 0.02241 -1.03370 D37 3.09283 0.00062 0.01053 0.02194 0.03252 3.12535 D38 0.99635 0.00031 0.00752 0.01712 0.02466 1.02101 Item Value Threshold Converged? Maximum Force 0.003570 0.000450 NO RMS Force 0.000749 0.000300 NO Maximum Displacement 0.034185 0.001800 NO RMS Displacement 0.007815 0.001200 NO Predicted change in Energy=-1.506621D-04 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 0 0 0.055013 0.022330 -0.009704 2 6 0 -2.272000 1.925371 0.018533 3 6 0 -0.862581 1.633838 -0.120310 4 6 0 -3.082619 0.834263 0.088055 5 34 0 -2.086419 -0.745584 -0.019460 6 6 0 -0.548655 0.310168 -0.169314 7 8 0 -2.741255 3.213301 0.091450 8 1 0 -4.157797 0.839170 0.188767 9 1 0 0.440533 -0.111483 -0.268717 10 8 0 0.077255 2.629968 -0.210671 11 6 0 -0.413594 3.900766 0.224001 12 6 0 -1.788949 4.179436 -0.360764 13 1 0 0.311687 4.642774 -0.120423 14 1 0 -0.460260 3.927946 1.321452 15 1 0 -1.738786 4.168663 -1.458362 16 1 0 -2.160661 5.153074 -0.030482 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 Bq 0.000000 2 C 3.006219 0.000000 3 C 1.857732 1.445936 0.000000 4 C 3.242457 1.361048 2.368819 0.000000 5 Se 2.274976 2.677664 2.677611 1.870800 0.000000 6 C 0.687561 2.369407 1.361269 2.600363 1.871306 7 O 4.244013 1.372691 2.463526 2.403406 4.014210 8 H 4.295857 2.182897 3.403744 1.079896 2.616374 9 H 0.483342 3.404280 2.183180 3.665286 2.617193 10 O 2.615465 2.463329 1.372491 3.646723 4.014025 11 C 3.913627 2.719941 2.336473 4.067630 4.944309 12 C 4.561246 2.336239 2.719567 3.614581 4.945786 13 H 4.628892 3.752204 3.229954 5.105833 5.898772 14 H 4.158284 2.998385 2.739247 4.238975 5.126824 15 H 4.744302 2.738229 2.997242 3.913504 5.132360 16 H 5.588755 3.229995 3.752080 4.417713 5.899136 6 7 8 9 10 6 C 0.000000 7 O 3.647421 0.000000 8 H 3.665238 2.766326 0.000000 9 H 1.079890 4.616025 4.717803 0.000000 10 O 2.403112 2.894055 4.615427 2.766025 0.000000 11 C 3.614601 2.430675 4.836700 4.131640 1.429966 12 C 4.067704 1.429965 4.131683 4.836429 2.430246 13 H 4.417472 3.377683 5.877014 4.758314 2.028422 14 H 3.913888 2.688227 4.949272 4.433628 2.078719 15 H 4.238637 2.078360 4.432852 4.948165 2.687438 16 H 5.106034 2.028467 4.758823 5.876949 3.377396 11 12 13 14 15 11 C 0.000000 12 C 1.520265 0.000000 13 H 1.093269 2.164514 0.000000 14 H 1.098780 2.158359 1.784905 0.000000 15 H 2.158297 1.098797 2.493853 3.069193 0.000000 16 H 2.164551 1.093265 2.526065 2.493999 1.784905 16 16 H 0.000000 Symmetry turned off by external request. Symmetry turned off: Cannot cope with ghost atoms or with translation vectors. Stoichiometry C6H6O2Se Framework group C1[X(C6H6O2Se)] NUMDOF-- NAT= 15 NAtoms= 16 Deg. of freedom 0 Full point group C1 Rotational constants (GHZ): 3.2999842 0.7368345 0.6125425 Standard basis: 6-31G(d) (6D, 7F) Warning: center 1 has no basis functions! Integral buffers will be 131072 words long. Raffenetti 2 integral format. Two-electron integral symmetry is turned off. 162 basis functions, 331 primitive gaussians, 162 cartesian basis functions 46 alpha electrons 46 beta electrons nuclear repulsion energy 694.1909738010 Hartrees. NAtoms= 16 NActive= 16 NUniq= 16 SFac= 7.50D-01 NAtFMM= 80 NAOKFM=F Big=F One-electron integrals computed using PRISM. NBasis= 162 RedAO= T NBF= 162 NBsUse= 162 1.00D-06 NBFU= 162 Initial guess read from the read-write file: Harris functional with IExCor= 402 diagonalized for initial guess. ExpMin= 1.23D-01 ExpMax= 5.61D+05 ExpMxC= 5.42D+03 IAcc=2 IRadAn= 4 AccDes= 0.00D+00 HarFok: IExCor= 402 AccDes= 0.00D+00 IRadAn= 4 IDoV=1 ScaDFX= 1.000000 1.000000 1.000000 1.000000 Requested convergence on RMS density matrix=1.00D-08 within 128 cycles. Requested convergence on MAX density matrix=1.00D-06. Requested convergence on energy=1.00D-06. No special actions if energy rises. Integral accuracy reduced to 1.0D-05 until final iterations. Initial convergence to 1.0D-05 achieved. Increase integral accuracy. SCF Done: E(RB+HF-LYP) = -2782.02483615 A.U. after 12 cycles Convg = 0.2579D-08 -V/T = 2.0048 S**2 = 0.0000 ------------------------------------------------------------------- Center Atomic Forces (Hartrees/Bohr) Number Number X Y Z ------------------------------------------------------------------- 1 0 0.000000000 0.000000000 0.000000000 2 6 0.000418531 0.000405125 -0.000483970 3 6 -0.000084382 0.000384930 0.000561129 4 6 0.000453146 -0.000321969 0.000207945 5 34 0.000059622 0.000012324 -0.000646034 6 6 -0.000824087 0.000041973 0.000512703 7 8 0.000626157 -0.000727019 0.000461778 8 1 -0.000034895 -0.000106553 0.000120190 9 1 -0.000002283 -0.000129620 0.000102498 10 8 -0.000717043 -0.000335708 -0.000709685 11 6 -0.000018531 0.000509926 0.000196032 12 6 0.000192440 0.000590140 -0.000338211 13 1 0.000216144 -0.000172791 0.000086637 14 1 -0.000036499 -0.000048808 0.000246940 15 1 0.000043873 -0.000030643 -0.000240095 16 1 -0.000292194 -0.000071308 -0.000077856 ------------------------------------------------------------------- Cartesian Forces: Max 0.000824087 RMS 0.000358926 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Internal Forces: Max 0.000946199 RMS 0.000232523 Search for a local minimum. Step number 4 out of a maximum of 95 All quantities printed in internal units (Hartrees-Bohrs-Radians) Update second derivatives using D2CorX and points 1 2 3 4 Trust test= 9.83D-01 RLast= 1.01D-01 DXMaxT set to 5.79D-01 Eigenvalues --- 0.00813 0.01997 0.02198 0.02329 0.02368 Eigenvalues --- 0.02441 0.02542 0.03119 0.04767 0.05234 Eigenvalues --- 0.05712 0.06697 0.06740 0.10929 0.11394 Eigenvalues --- 0.11658 0.12890 0.14992 0.16000 0.19992 Eigenvalues --- 0.20448 0.22073 0.22130 0.23127 0.24393 Eigenvalues --- 0.24961 0.25885 0.26770 0.32269 0.32381 Eigenvalues --- 0.32600 0.32893 0.35783 0.35924 0.37099 Eigenvalues --- 0.44950 0.46596 0.47047 0.49984 0.52243 Eigenvalues --- 0.54393 2.039811000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 RFO step: Lambda=-4.49555704D-05. Quartic linear search produced a step of -0.01318. Iteration 1 RMS(Cart)= 0.00376255 RMS(Int)= 0.00002254 Iteration 2 RMS(Cart)= 0.00001969 RMS(Int)= 0.00000688 Iteration 3 RMS(Cart)= 0.00000000 RMS(Int)= 0.00000688 Variable Old X -DE/DX Delta X Delta X Delta X New X (Linear) (Quad) (Total) R1 1.29930 0.00000 0.00000 0.00000 0.00000 1.29930 R2 2.73242 -0.00095 -0.00009 -0.00060 -0.00069 2.73173 R3 2.57201 0.00026 0.00007 -0.00011 -0.00005 2.57196 R4 2.59401 -0.00042 -0.00006 -0.00024 -0.00030 2.59371 R5 2.57243 0.00008 0.00007 -0.00075 -0.00067 2.57175 R6 2.59363 -0.00029 -0.00006 0.00002 -0.00005 2.59359 R7 3.53530 -0.00028 -0.00003 -0.00036 -0.00039 3.53491 R8 2.04071 0.00004 -0.00001 0.00029 0.00028 2.04099 R9 3.53626 -0.00037 -0.00006 -0.00085 -0.00091 3.53535 R10 2.04070 0.00004 -0.00001 0.00023 0.00022 2.04092 R11 2.70224 0.00029 -0.00016 0.00258 0.00242 2.70466 R12 2.70224 0.00027 -0.00016 0.00252 0.00236 2.70460 R13 2.87289 0.00005 0.00011 -0.00070 -0.00059 2.87229 R14 2.06598 0.00000 -0.00003 0.00017 0.00014 2.06612 R15 2.07639 0.00025 0.00003 0.00041 0.00044 2.07683 R16 2.07643 0.00024 0.00003 0.00040 0.00043 2.07685 R17 2.06597 0.00001 -0.00003 0.00021 0.00018 2.06615 A1 2.00845 -0.00011 0.00002 -0.00042 -0.00041 2.00804 A2 2.12644 -0.00003 0.00000 -0.00097 -0.00097 2.12547 A3 2.14820 0.00014 -0.00001 0.00133 0.00133 2.14953 A4 2.00898 -0.00018 0.00001 -0.00110 -0.00110 2.00789 A5 2.12641 -0.00002 0.00000 -0.00064 -0.00065 2.12576 A6 2.14772 0.00020 0.00000 0.00167 0.00167 2.14940 A7 1.93575 0.00028 -0.00004 0.00114 0.00108 1.93683 A8 2.20695 -0.00003 -0.00008 0.00119 0.00112 2.20806 A9 2.14048 -0.00025 0.00011 -0.00235 -0.00223 2.13826 A10 1.53654 -0.00040 0.00003 -0.00143 -0.00142 1.53512 A11 2.21579 -0.00012 0.00003 0.00087 0.00089 2.21668 A12 2.05637 -0.00016 0.00003 0.00090 0.00092 2.05729 A13 0.32911 -0.00003 0.00001 -0.00029 -0.00028 0.32883 A14 1.93500 0.00041 -0.00002 0.00192 0.00187 1.93687 A15 2.20710 -0.00009 -0.00008 0.00083 0.00074 2.20784 A16 2.14102 -0.00032 0.00010 -0.00265 -0.00255 2.13847 A17 1.97084 0.00038 0.00008 0.00034 0.00040 1.97124 A18 1.97135 0.00028 0.00008 0.00003 0.00009 1.97145 A19 1.93533 -0.00035 0.00002 -0.00233 -0.00231 1.93303 A20 1.85425 0.00004 0.00001 -0.00180 -0.00179 1.85246 A21 1.91789 -0.00001 0.00010 -0.00064 -0.00054 1.91735 A22 1.93326 0.00024 -0.00007 0.00321 0.00314 1.93640 A23 1.91902 0.00016 -0.00001 0.00075 0.00074 1.91975 A24 1.90291 -0.00008 -0.00005 0.00076 0.00071 1.90362 A25 1.93585 -0.00048 0.00001 -0.00290 -0.00289 1.93296 A26 1.91737 0.00007 0.00011 -0.00010 0.00000 1.91737 A27 1.85432 0.00005 0.00000 -0.00204 -0.00203 1.85229 A28 1.91891 0.00016 -0.00001 0.00091 0.00089 1.91981 A29 1.93332 0.00030 -0.00007 0.00333 0.00326 1.93658 A30 1.90290 -0.00010 -0.00004 0.00077 0.00072 1.90362 D1 0.00626 0.00000 0.00002 0.00000 0.00002 0.00627 D2 3.13515 -0.00005 0.00015 -0.00538 -0.00523 3.12992 D3 3.13341 0.00001 0.00017 -0.00402 -0.00385 3.12956 D4 -0.02088 -0.00004 0.00031 -0.00940 -0.00909 -0.02997 D5 0.00108 -0.00028 -0.00018 -0.00896 -0.00914 -0.00806 D6 -3.13767 -0.00004 0.00004 -0.00327 -0.00323 -3.14090 D7 -3.12587 -0.00029 -0.00034 -0.00486 -0.00519 -3.13107 D8 0.01856 -0.00005 -0.00012 0.00082 0.00071 0.01927 D9 0.29482 0.00018 -0.00022 0.00846 0.00824 0.30305 D10 -2.86238 0.00019 -0.00005 0.00409 0.00404 -2.85834 D11 -2.72885 -0.00006 0.00005 -0.00108 -0.00104 -2.72988 D12 -0.01030 0.00028 0.00016 0.00894 0.00910 -0.00120 D13 -3.14026 0.00000 0.00005 -0.00098 -0.00093 -3.14120 D14 0.42562 -0.00001 -0.00009 0.00439 0.00431 0.42992 D15 -3.13902 0.00033 0.00002 0.01441 0.01444 -3.12458 D16 0.01420 0.00005 -0.00009 0.00450 0.00441 0.01861 D17 0.29457 0.00014 -0.00024 0.00751 0.00727 0.30184 D18 -2.86074 0.00008 -0.00009 0.00167 0.00158 -2.85917 D19 -0.00548 0.00035 0.00022 0.01128 0.01149 0.00601 D20 3.13340 0.00012 0.00000 0.00586 0.00587 3.13926 D21 2.77042 -0.00005 -0.00011 -0.00230 -0.00240 2.76801 D22 0.00885 -0.00035 -0.00021 -0.01126 -0.01147 -0.00262 D23 3.13933 -0.00009 -0.00011 -0.00176 -0.00188 3.13745 D24 -0.79929 -0.00021 0.00017 -0.00649 -0.00632 -0.80561 D25 1.32576 -0.00027 0.00024 -0.00734 -0.00711 1.31865 D26 -2.90155 -0.00033 0.00024 -0.00763 -0.00740 -2.90895 D27 -0.79878 -0.00023 0.00018 -0.00579 -0.00561 -0.80440 D28 -2.90065 -0.00034 0.00025 -0.00726 -0.00702 -2.90766 D29 1.32640 -0.00026 0.00025 -0.00681 -0.00657 1.31983 D30 1.09083 -0.00015 -0.00016 0.00396 0.00379 1.09462 D31 -1.03331 -0.00003 -0.00030 0.00540 0.00510 -1.02821 D32 -3.13765 -0.00020 -0.00019 0.00170 0.00150 -3.13614 D33 -3.13809 -0.00016 -0.00018 0.00228 0.00210 -3.13599 D34 1.02096 -0.00004 -0.00032 0.00372 0.00341 1.02437 D35 -1.08338 -0.00021 -0.00021 0.00002 -0.00020 -1.08357 D36 -1.03370 -0.00001 -0.00030 0.00580 0.00550 -1.02819 D37 3.12535 0.00011 -0.00043 0.00724 0.00682 3.13217 D38 1.02101 -0.00006 -0.00032 0.00354 0.00321 1.02423 Item Value Threshold Converged? Maximum Force 0.000946 0.000450 NO RMS Force 0.000233 0.000300 YES Maximum Displacement 0.025669 0.001800 NO RMS Displacement 0.003762 0.001200 NO Predicted change in Energy=-2.255676D-05 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 0 0 0.053738 0.021855 -0.006771 2 6 0 -2.271317 1.925626 0.019883 3 6 0 -0.862119 1.634336 -0.117913 4 6 0 -3.081359 0.834103 0.089139 5 34 0 -2.087588 -0.745964 -0.033044 6 6 0 -0.549496 0.310698 -0.166205 7 8 0 -2.739088 3.213712 0.096492 8 1 0 -4.156495 0.837212 0.191937 9 1 0 0.439074 -0.112694 -0.265610 10 8 0 0.076373 2.631168 -0.213944 11 6 0 -0.413332 3.902887 0.223428 12 6 0 -1.788461 4.180687 -0.361469 13 1 0 0.314316 4.643189 -0.119919 14 1 0 -0.459927 3.927513 1.321175 15 1 0 -1.739959 4.165609 -1.459318 16 1 0 -2.163451 5.154064 -0.033811 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 Bq 0.000000 2 C 3.005151 0.000000 3 C 1.857751 1.445571 0.000000 4 C 3.240028 1.361024 2.368178 0.000000 5 Se 2.274976 2.678423 2.678582 1.870594 0.000000 6 C 0.687562 2.367971 1.360912 2.597976 1.870826 7 O 4.242463 1.372532 2.462399 2.404109 4.015004 8 H 4.293059 2.183608 3.403575 1.080044 2.614850 9 H 0.483306 3.403303 2.183353 3.662748 2.615175 10 O 2.617622 2.462542 1.372466 3.645898 4.015031 11 C 3.915808 2.720864 2.337574 4.068641 4.947800 12 C 4.562388 2.337494 2.720539 3.615834 4.946638 13 H 4.630057 3.753690 3.230666 5.107196 5.900818 14 H 4.157097 2.997006 2.737041 4.237806 5.130748 15 H 4.743199 2.736403 2.996217 3.911010 5.126270 16 H 5.590726 3.230686 3.753535 4.418114 5.900515 6 7 8 9 10 6 C 0.000000 7 O 3.645656 0.000000 8 H 3.662775 2.768737 0.000000 9 H 1.080006 4.614846 4.714968 0.000000 10 O 2.403866 2.891807 4.615213 2.768213 0.000000 11 C 3.615823 2.429036 4.838453 4.134083 1.431214 12 C 4.068166 1.431245 4.134328 4.837791 2.429069 13 H 4.418007 3.378389 5.879699 4.759749 2.028222 14 H 3.911735 2.684015 4.948712 4.432760 2.079595 15 H 4.236706 2.079642 4.432213 4.947424 2.684125 16 H 5.106914 2.028128 4.760083 5.879252 3.378500 11 12 13 14 15 11 C 0.000000 12 C 1.519953 0.000000 13 H 1.093346 2.166547 0.000000 14 H 1.099011 2.158794 1.785608 0.000000 15 H 2.158842 1.099023 2.498423 3.070230 0.000000 16 H 2.166687 1.093362 2.531351 2.498481 1.785625 16 16 H 0.000000 Symmetry turned off by external request. Symmetry turned off: Cannot cope with ghost atoms or with translation vectors. Stoichiometry C6H6O2Se Framework group C1[X(C6H6O2Se)] NUMDOF-- NAT= 15 NAtoms= 16 Deg. of freedom 0 Full point group C1 Rotational constants (GHZ): 3.3040482 0.7362637 0.6123187 Standard basis: 6-31G(d) (6D, 7F) Warning: center 1 has no basis functions! Integral buffers will be 131072 words long. Raffenetti 2 integral format. Two-electron integral symmetry is turned off. 162 basis functions, 331 primitive gaussians, 162 cartesian basis functions 46 alpha electrons 46 beta electrons nuclear repulsion energy 694.1585721389 Hartrees. NAtoms= 16 NActive= 16 NUniq= 16 SFac= 7.50D-01 NAtFMM= 80 NAOKFM=F Big=F One-electron integrals computed using PRISM. NBasis= 162 RedAO= T NBF= 162 NBsUse= 162 1.00D-06 NBFU= 162 Initial guess read from the read-write file: Harris functional with IExCor= 402 diagonalized for initial guess. ExpMin= 1.23D-01 ExpMax= 5.61D+05 ExpMxC= 5.42D+03 IAcc=2 IRadAn= 4 AccDes= 0.00D+00 HarFok: IExCor= 402 AccDes= 0.00D+00 IRadAn= 4 IDoV=1 ScaDFX= 1.000000 1.000000 1.000000 1.000000 Requested convergence on RMS density matrix=1.00D-08 within 128 cycles. Requested convergence on MAX density matrix=1.00D-06. Requested convergence on energy=1.00D-06. No special actions if energy rises. Integral accuracy reduced to 1.0D-05 until final iterations. Initial convergence to 1.0D-05 achieved. Increase integral accuracy. SCF Done: E(RB+HF-LYP) = -2782.02485662 A.U. after 11 cycles Convg = 0.3494D-08 -V/T = 2.0048 S**2 = 0.0000 ------------------------------------------------------------------- Center Atomic Forces (Hartrees/Bohr) Number Number X Y Z ------------------------------------------------------------------- 1 0 0.000000000 0.000000000 0.000000000 2 6 0.000407698 0.000412443 -0.000060542 3 6 -0.000248035 0.000578922 0.000178964 4 6 -0.000204300 -0.000315155 -0.000314052 5 34 0.000124600 0.000262562 0.000292043 6 6 -0.000007605 -0.000480231 -0.000146097 7 8 0.000561134 -0.000309221 0.000122861 8 1 0.000046836 0.000061680 -0.000017507 9 1 -0.000001247 0.000032818 -0.000032456 10 8 -0.000681828 -0.000105469 -0.000086079 11 6 0.000423389 -0.000060528 0.000064438 12 6 -0.000401646 0.000095004 0.000000765 13 1 0.000021329 -0.000120456 0.000089599 14 1 -0.000062465 0.000052500 0.000028801 15 1 0.000068125 -0.000000545 -0.000029408 16 1 -0.000045983 -0.000104324 -0.000091330 ------------------------------------------------------------------- Cartesian Forces: Max 0.000681828 RMS 0.000239894 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Internal Forces: Max 0.000509229 RMS 0.000128221 Search for a local minimum. Step number 5 out of a maximum of 95 All quantities printed in internal units (Hartrees-Bohrs-Radians) Update second derivatives using D2CorX and points 1 2 3 4 5 Trust test= 9.07D-01 RLast= 3.91D-02 DXMaxT set to 5.79D-01 Eigenvalues --- 0.00777 0.01741 0.02203 0.02330 0.02389 Eigenvalues --- 0.02444 0.02613 0.04081 0.04792 0.05234 Eigenvalues --- 0.05696 0.06721 0.06795 0.10319 0.11482 Eigenvalues --- 0.11656 0.12876 0.15293 0.16002 0.19587 Eigenvalues --- 0.19999 0.21796 0.22132 0.23210 0.24445 Eigenvalues --- 0.24962 0.25980 0.27499 0.32133 0.32381 Eigenvalues --- 0.32601 0.33042 0.35786 0.35905 0.38433 Eigenvalues --- 0.44873 0.45020 0.47053 0.50237 0.52259 Eigenvalues --- 0.55528 2.039811000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 RFO step: Lambda=-8.49376120D-06. Quartic linear search produced a step of -0.08312. Iteration 1 RMS(Cart)= 0.00123427 RMS(Int)= 0.00000237 Iteration 2 RMS(Cart)= 0.00000223 RMS(Int)= 0.00000081 Iteration 3 RMS(Cart)= 0.00000000 RMS(Int)= 0.00000081 Variable Old X -DE/DX Delta X Delta X Delta X New X (Linear) (Quad) (Total) R1 1.29930 0.00000 0.00000 0.00000 0.00000 1.29930 R2 2.73173 -0.00051 0.00006 -0.00151 -0.00146 2.73028 R3 2.57196 0.00021 0.00000 0.00036 0.00037 2.57233 R4 2.59371 -0.00039 0.00002 -0.00082 -0.00080 2.59291 R5 2.57175 0.00031 0.00006 0.00049 0.00054 2.57229 R6 2.59359 -0.00042 0.00000 -0.00083 -0.00083 2.59276 R7 3.53491 -0.00010 0.00003 -0.00058 -0.00054 3.53437 R8 2.04099 -0.00005 -0.00002 -0.00009 -0.00012 2.04087 R9 3.53535 -0.00019 0.00008 -0.00092 -0.00085 3.53450 R10 2.04092 -0.00001 -0.00002 0.00001 -0.00001 2.04091 R11 2.70466 -0.00022 -0.00020 0.00003 -0.00017 2.70449 R12 2.70460 -0.00019 -0.00020 0.00008 -0.00012 2.70449 R13 2.87229 0.00012 0.00005 0.00045 0.00050 2.87279 R14 2.06612 -0.00010 -0.00001 -0.00022 -0.00023 2.06589 R15 2.07683 0.00003 -0.00004 0.00024 0.00020 2.07703 R16 2.07685 0.00003 -0.00004 0.00023 0.00019 2.07705 R17 2.06615 -0.00010 -0.00002 -0.00023 -0.00025 2.06591 A1 2.00804 0.00002 0.00003 -0.00009 -0.00005 2.00798 A2 2.12547 0.00000 0.00008 -0.00057 -0.00049 2.12498 A3 2.14953 -0.00002 -0.00011 0.00064 0.00053 2.15006 A4 2.00789 0.00006 0.00009 0.00006 0.00015 2.00803 A5 2.12576 -0.00004 0.00005 -0.00073 -0.00068 2.12508 A6 2.14940 -0.00003 -0.00014 0.00065 0.00051 2.14990 A7 1.93683 -0.00004 -0.00009 0.00008 -0.00001 1.93682 A8 2.20806 -0.00004 -0.00009 -0.00004 -0.00014 2.20793 A9 2.13826 0.00008 0.00019 -0.00001 0.00018 2.13843 A10 1.53512 0.00004 0.00012 -0.00007 0.00004 1.53517 A11 2.21668 0.00000 -0.00007 -0.00024 -0.00031 2.21636 A12 2.05729 0.00002 -0.00008 -0.00017 -0.00025 2.05704 A13 0.32883 0.00001 0.00002 -0.00001 0.00002 0.32884 A14 1.93687 -0.00008 -0.00016 0.00005 -0.00011 1.93677 A15 2.20784 0.00000 -0.00006 0.00008 0.00002 2.20786 A16 2.13847 0.00008 0.00021 -0.00013 0.00009 2.13856 A17 1.97124 0.00016 -0.00003 0.00098 0.00095 1.97219 A18 1.97145 0.00020 -0.00001 0.00096 0.00095 1.97240 A19 1.93303 -0.00022 0.00019 -0.00174 -0.00155 1.93148 A20 1.85246 0.00006 0.00015 -0.00056 -0.00041 1.85205 A21 1.91735 0.00008 0.00004 0.00064 0.00068 1.91803 A22 1.93640 0.00012 -0.00026 0.00160 0.00134 1.93774 A23 1.91975 0.00001 -0.00006 -0.00002 -0.00008 1.91967 A24 1.90362 -0.00004 -0.00006 0.00010 0.00004 1.90367 A25 1.93296 -0.00018 0.00024 -0.00170 -0.00146 1.93150 A26 1.91737 0.00004 0.00000 0.00041 0.00041 1.91778 A27 1.85229 0.00006 0.00017 -0.00049 -0.00032 1.85196 A28 1.91981 0.00001 -0.00007 -0.00005 -0.00013 1.91968 A29 1.93658 0.00011 -0.00027 0.00170 0.00143 1.93801 A30 1.90362 -0.00004 -0.00006 0.00015 0.00009 1.90371 D1 0.00627 -0.00001 0.00000 -0.00111 -0.00111 0.00516 D2 3.12992 0.00000 0.00043 -0.00277 -0.00233 3.12759 D3 3.12956 0.00001 0.00032 -0.00194 -0.00162 3.12795 D4 -0.02997 0.00002 0.00076 -0.00359 -0.00283 -0.03280 D5 -0.00806 0.00015 0.00076 0.00320 0.00396 -0.00410 D6 -3.14090 0.00000 0.00027 -0.00092 -0.00065 -3.14156 D7 -3.13107 0.00012 0.00043 0.00405 0.00448 -3.12659 D8 0.01927 -0.00003 -0.00006 -0.00007 -0.00013 0.01914 D9 0.30305 0.00006 -0.00068 0.00322 0.00254 0.30559 D10 -2.85834 0.00009 -0.00034 0.00232 0.00199 -2.85636 D11 -2.72988 0.00002 0.00009 -0.00053 -0.00045 -2.73033 D12 -0.00120 -0.00013 -0.00076 -0.00156 -0.00231 -0.00352 D13 -3.14120 0.00000 0.00008 -0.00051 -0.00043 3.14156 D14 0.42992 0.00000 -0.00036 0.00116 0.00080 0.43073 D15 -3.12458 -0.00014 -0.00120 0.00014 -0.00107 -3.12565 D16 0.01861 -0.00001 -0.00037 0.00119 0.00082 0.01943 D17 0.30184 0.00009 -0.00060 0.00364 0.00304 0.30488 D18 -2.85917 0.00010 -0.00013 0.00185 0.00172 -2.85745 D19 0.00601 -0.00017 -0.00096 -0.00329 -0.00425 0.00176 D20 3.13926 -0.00004 -0.00049 0.00063 0.00014 3.13941 D21 2.76801 0.00004 0.00020 0.00175 0.00195 2.76996 D22 -0.00262 0.00017 0.00095 0.00269 0.00365 0.00102 D23 3.13745 0.00005 0.00016 0.00169 0.00185 3.13930 D24 -0.80561 -0.00007 0.00053 -0.00244 -0.00192 -0.80753 D25 1.31865 -0.00014 0.00059 -0.00335 -0.00276 1.31588 D26 -2.90895 -0.00013 0.00061 -0.00324 -0.00263 -2.91157 D27 -0.80440 -0.00008 0.00047 -0.00287 -0.00240 -0.80679 D28 -2.90766 -0.00013 0.00058 -0.00348 -0.00290 -2.91056 D29 1.31983 -0.00015 0.00055 -0.00361 -0.00307 1.31676 D30 1.09462 -0.00009 -0.00032 0.00116 0.00085 1.09547 D31 -1.02821 -0.00003 -0.00042 0.00180 0.00138 -1.02683 D32 -3.13614 -0.00006 -0.00012 0.00054 0.00042 -3.13573 D33 -3.13599 -0.00008 -0.00017 0.00037 0.00020 -3.13580 D34 1.02437 -0.00002 -0.00028 0.00101 0.00073 1.02510 D35 -1.08357 -0.00005 0.00002 -0.00025 -0.00023 -1.08380 D36 -1.02819 -0.00005 -0.00046 0.00153 0.00107 -1.02712 D37 3.13217 0.00001 -0.00057 0.00217 0.00160 3.13377 D38 1.02423 -0.00002 -0.00027 0.00091 0.00064 1.02487 Item Value Threshold Converged? Maximum Force 0.000509 0.000450 NO RMS Force 0.000128 0.000300 YES Maximum Displacement 0.007360 0.001800 NO RMS Displacement 0.001234 0.001200 NO Predicted change in Energy=-4.417596D-06 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 0 0 0.053695 0.022019 -0.007174 2 6 0 -2.270972 1.925676 0.019477 3 6 0 -0.862544 1.634459 -0.118246 4 6 0 -3.081256 0.834013 0.087498 5 34 0 -2.087063 -0.745867 -0.029149 6 6 0 -0.549726 0.310568 -0.166437 7 8 0 -2.737740 3.213575 0.097769 8 1 0 -4.156296 0.837275 0.190639 9 1 0 0.438838 -0.112744 -0.266194 10 8 0 0.074886 2.631548 -0.215716 11 6 0 -0.413171 3.903143 0.223656 12 6 0 -1.788493 4.181229 -0.361333 13 1 0 0.315532 4.642655 -0.118759 14 1 0 -0.460062 3.926764 1.321518 15 1 0 -1.739981 4.165527 -1.459276 16 1 0 -2.164737 5.154160 -0.034224 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 Bq 0.000000 2 C 3.004779 0.000000 3 C 1.857900 1.444800 0.000000 4 C 3.239786 1.361218 2.367642 0.000000 5 Se 2.274418 2.678307 2.678309 1.870306 0.000000 6 C 0.687562 2.367663 1.361200 2.597522 1.870377 7 O 4.241362 1.372110 2.461023 2.404252 4.014557 8 H 4.292762 2.183657 3.402899 1.079982 2.614646 9 H 0.483309 3.402915 2.183620 3.662309 2.614806 10 O 2.617935 2.461021 1.372029 3.644764 4.014445 11 C 3.915912 2.720936 2.337897 4.069002 4.947638 12 C 4.562687 2.337803 2.720756 3.616150 4.947299 13 H 4.629394 3.753810 3.230652 5.107491 5.900565 14 H 4.156489 2.996508 2.736709 4.237755 5.128831 15 H 4.742840 2.735982 2.995758 3.910309 5.127136 16 H 5.591157 3.230678 3.753807 4.417974 5.900540 6 7 8 9 10 6 C 0.000000 7 O 3.644813 0.000000 8 H 3.662277 2.769067 0.000000 9 H 1.080001 4.613839 4.714498 0.000000 10 O 2.404063 2.889272 4.613832 2.768781 0.000000 11 C 3.616271 2.427957 4.838557 4.134394 1.431153 12 C 4.068728 1.431153 4.134392 4.838208 2.427941 13 H 4.417910 3.378109 5.879957 4.759281 2.027773 14 H 3.911384 2.682166 4.948330 4.432434 2.080106 15 H 4.236609 2.079933 4.431486 4.947150 2.682028 16 H 5.107458 2.027714 4.759450 5.879854 3.378227 11 12 13 14 15 11 C 0.000000 12 C 1.520216 0.000000 13 H 1.093221 2.167643 0.000000 14 H 1.099117 2.159043 1.785621 0.000000 15 H 2.159057 1.099126 2.499954 3.070506 0.000000 16 H 2.167840 1.093231 2.533874 2.500091 1.785660 16 16 H 0.000000 Symmetry turned off by external request. Symmetry turned off: Cannot cope with ghost atoms or with translation vectors. Stoichiometry C6H6O2Se Framework group C1[X(C6H6O2Se)] NUMDOF-- NAT= 15 NAtoms= 16 Deg. of freedom 0 Full point group C1 Rotational constants (GHZ): 3.3069749 0.7362372 0.6124122 Standard basis: 6-31G(d) (6D, 7F) Warning: center 1 has no basis functions! Integral buffers will be 131072 words long. Raffenetti 2 integral format. Two-electron integral symmetry is turned off. 162 basis functions, 331 primitive gaussians, 162 cartesian basis functions 46 alpha electrons 46 beta electrons nuclear repulsion energy 694.2447513967 Hartrees. NAtoms= 16 NActive= 16 NUniq= 16 SFac= 7.50D-01 NAtFMM= 80 NAOKFM=F Big=F One-electron integrals computed using PRISM. NBasis= 162 RedAO= T NBF= 162 NBsUse= 162 1.00D-06 NBFU= 162 Initial guess read from the read-write file: Requested convergence on RMS density matrix=1.00D-08 within 128 cycles. Requested convergence on MAX density matrix=1.00D-06. Requested convergence on energy=1.00D-06. No special actions if energy rises. SCF Done: E(RB+HF-LYP) = -2782.02486177 A.U. after 8 cycles Convg = 0.6309D-08 -V/T = 2.0048 S**2 = 0.0000 ------------------------------------------------------------------- Center Atomic Forces (Hartrees/Bohr) Number Number X Y Z ------------------------------------------------------------------- 1 0 0.000000000 0.000000000 0.000000000 2 6 0.000134763 0.000146624 -0.000065877 3 6 -0.000059506 0.000197919 0.000068146 4 6 -0.000206051 -0.000120065 -0.000028619 5 34 0.000022234 0.000144985 0.000000208 6 6 0.000125251 -0.000201823 0.000028312 7 8 0.000149937 -0.000089821 0.000012045 8 1 0.000001219 0.000047898 0.000008649 9 1 0.000005947 0.000036433 -0.000009771 10 8 -0.000181305 -0.000018477 -0.000012982 11 6 0.000214973 -0.000084897 -0.000034538 12 6 -0.000220953 -0.000005263 0.000033161 13 1 0.000011291 -0.000035944 0.000044512 14 1 -0.000045924 0.000012553 -0.000042085 15 1 0.000055008 -0.000001678 0.000040296 16 1 -0.000006884 -0.000028443 -0.000041455 ------------------------------------------------------------------- Cartesian Forces: Max 0.000220953 RMS 0.000092974 GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Berny optimization. Internal Forces: Max 0.000147569 RMS 0.000046687 Search for a local minimum. Step number 6 out of a maximum of 95 All quantities printed in internal units (Hartrees-Bohrs-Radians) Update second derivatives using D2CorX and points 1 2 3 4 5 6 Trust test= 1.17D+00 RLast= 1.38D-02 DXMaxT set to 5.79D-01 Eigenvalues --- 0.00758 0.01647 0.02205 0.02332 0.02387 Eigenvalues --- 0.02449 0.02618 0.04322 0.04822 0.05365 Eigenvalues --- 0.05693 0.06721 0.06923 0.09483 0.11535 Eigenvalues --- 0.11651 0.12868 0.14924 0.16002 0.19232 Eigenvalues --- 0.19989 0.21846 0.22140 0.23196 0.24460 Eigenvalues --- 0.24961 0.26358 0.27826 0.32381 0.32463 Eigenvalues --- 0.32601 0.33246 0.35788 0.35947 0.37740 Eigenvalues --- 0.44677 0.45008 0.47043 0.49996 0.52261 Eigenvalues --- 0.55312 2.039811000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 Eigenvalues --- 1000.000001000.000001000.000001000.000001000.00000 RFO step: Lambda=-7.78118172D-07. Quartic linear search produced a step of 0.19930. Iteration 1 RMS(Cart)= 0.00038513 RMS(Int)= 0.00000033 Iteration 2 RMS(Cart)= 0.00000023 RMS(Int)= 0.00000029 Variable Old X -DE/DX Delta X Delta X Delta X New X (Linear) (Quad) (Total) R1 1.29930 0.00000 0.00000 0.00000 0.00000 1.29931 R2 2.73028 -0.00006 -0.00029 -0.00016 -0.00045 2.72982 R3 2.57233 0.00010 0.00007 0.00020 0.00027 2.57260 R4 2.59291 -0.00015 -0.00016 -0.00026 -0.00042 2.59249 R5 2.57229 0.00009 0.00011 0.00015 0.00026 2.57255 R6 2.59276 -0.00014 -0.00016 -0.00025 -0.00041 2.59235 R7 3.53437 -0.00001 -0.00011 -0.00005 -0.00016 3.53420 R8 2.04087 0.00000 -0.00002 0.00000 -0.00002 2.04085 R9 3.53450 -0.00002 -0.00017 -0.00006 -0.00023 3.53427 R10 2.04091 0.00000 0.00000 -0.00002 -0.00002 2.04089 R11 2.70449 -0.00010 -0.00003 -0.00022 -0.00026 2.70423 R12 2.70449 -0.00011 -0.00002 -0.00026 -0.00028 2.70421 R13 2.87279 0.00008 0.00010 0.00030 0.00040 2.87319 R14 2.06589 -0.00003 -0.00005 -0.00005 -0.00010 2.06579 R15 2.07703 -0.00004 0.00004 -0.00015 -0.00011 2.07692 R16 2.07705 -0.00004 0.00004 -0.00014 -0.00010 2.07694 R17 2.06591 -0.00003 -0.00005 -0.00006 -0.00011 2.06580 A1 2.00798 0.00006 -0.00001 0.00027 0.00026 2.00824 A2 2.12498 0.00000 -0.00010 -0.00006 -0.00016 2.12482 A3 2.15006 -0.00006 0.00011 -0.00021 -0.00011 2.14995 A4 2.00803 0.00004 0.00003 0.00013 0.00016 2.00819 A5 2.12508 0.00001 -0.00013 0.00001 -0.00013 2.12495 A6 2.14990 -0.00005 0.00010 -0.00015 -0.00004 2.14986 A7 1.93682 -0.00011 0.00000 -0.00044 -0.00045 1.93637 A8 2.20793 0.00001 -0.00003 -0.00007 -0.00010 2.20783 A9 2.13843 0.00010 0.00004 0.00051 0.00055 2.13898 A10 1.53517 0.00010 0.00001 0.00039 0.00040 1.53557 A11 2.21636 0.00004 -0.00006 0.00027 0.00021 2.21657 A12 2.05704 0.00005 -0.00005 0.00031 0.00026 2.05731 A13 0.32884 0.00000 0.00000 0.00011 0.00012 0.32896 A14 1.93677 -0.00009 -0.00002 -0.00035 -0.00037 1.93640 A15 2.20786 0.00000 0.00000 -0.00011 -0.00011 2.20775 A16 2.13856 0.00009 0.00002 0.00046 0.00048 2.13904 A17 1.97219 0.00002 0.00019 0.00011 0.00030 1.97249 A18 1.97240 0.00002 0.00019 0.00012 0.00031 1.97271 A19 1.93148 -0.00003 -0.00031 -0.00008 -0.00039 1.93109 A20 1.85205 0.00000 -0.00008 0.00022 0.00014 1.85219 A21 1.91803 0.00003 0.00014 0.00000 0.00013 1.91816 A22 1.93774 0.00005 0.00027 0.00049 0.00075 1.93850 A23 1.91967 -0.00005 -0.00002 -0.00058 -0.00060 1.91907 A24 1.90367 0.00000 0.00001 -0.00001 0.00000 1.90367 A25 1.93150 -0.00002 -0.00029 -0.00004 -0.00034 1.93116 A26 1.91778 0.00003 0.00008 0.00008 0.00016 1.91794 A27 1.85196 0.00000 -0.00006 0.00020 0.00013 1.85210 A28 1.91968 -0.00005 -0.00003 -0.00056 -0.00058 1.91909 A29 1.93801 0.00004 0.00028 0.00039 0.00067 1.93868 A30 1.90371 0.00000 0.00002 -0.00003 -0.00001 1.90370 D1 0.00516 0.00000 -0.00022 0.00002 -0.00020 0.00496 D2 3.12759 -0.00001 -0.00046 -0.00039 -0.00086 3.12674 D3 3.12795 0.00000 -0.00032 -0.00045 -0.00077 3.12718 D4 -0.03280 -0.00001 -0.00056 -0.00086 -0.00142 -0.03423 D5 -0.00410 0.00000 0.00079 -0.00057 0.00022 -0.00388 D6 -3.14156 -0.00001 -0.00013 -0.00061 -0.00074 3.14089 D7 -3.12659 0.00001 0.00089 -0.00009 0.00080 -3.12579 D8 0.01914 -0.00001 -0.00003 -0.00014 -0.00017 0.01898 D9 0.30559 0.00002 0.00051 0.00065 0.00115 0.30675 D10 -2.85636 0.00002 0.00040 0.00015 0.00054 -2.85581 D11 -2.73033 0.00000 -0.00009 -0.00015 -0.00024 -2.73057 D12 -0.00352 0.00000 -0.00046 0.00054 0.00007 -0.00344 D13 3.14156 -0.00001 -0.00009 -0.00031 -0.00039 3.14117 D14 0.43073 0.00001 0.00016 0.00027 0.00043 0.43115 D15 -3.12565 0.00000 -0.00021 0.00095 0.00074 -3.12491 D16 0.01943 0.00000 0.00016 0.00011 0.00027 0.01970 D17 0.30488 0.00002 0.00061 0.00059 0.00119 0.30608 D18 -2.85745 0.00002 0.00034 0.00015 0.00049 -2.85696 D19 0.00176 0.00000 -0.00085 0.00070 -0.00015 0.00161 D20 3.13941 0.00001 0.00003 0.00074 0.00077 3.14018 D21 2.76996 0.00000 0.00039 -0.00006 0.00033 2.77029 D22 0.00102 0.00000 0.00073 -0.00069 0.00004 0.00106 D23 3.13930 0.00001 0.00037 0.00011 0.00048 3.13978 D24 -0.80753 0.00001 -0.00038 -0.00012 -0.00050 -0.80803 D25 1.31588 -0.00005 -0.00055 -0.00080 -0.00135 1.31454 D26 -2.91157 -0.00004 -0.00052 -0.00068 -0.00120 -2.91277 D27 -0.80679 0.00001 -0.00048 -0.00003 -0.00051 -0.80730 D28 -2.91056 -0.00004 -0.00058 -0.00071 -0.00129 -2.91185 D29 1.31676 -0.00005 -0.00061 -0.00082 -0.00143 1.31533 D30 1.09547 -0.00003 0.00017 -0.00027 -0.00010 1.09536 D31 -1.02683 -0.00002 0.00027 0.00003 0.00031 -1.02652 D32 -3.13573 -0.00001 0.00008 0.00019 0.00027 -3.13546 D33 -3.13580 -0.00001 0.00004 0.00026 0.00030 -3.13550 D34 1.02510 0.00000 0.00015 0.00057 0.00071 1.02581 D35 -1.08380 0.00001 -0.00005 0.00072 0.00067 -1.08313 D36 -1.02712 -0.00001 0.00021 0.00018 0.00039 -1.02674 D37 3.13377 0.00000 0.00032 0.00048 0.00080 3.13457 D38 1.02487 0.00000 0.00013 0.00064 0.00076 1.02563 Item Value Threshold Converged? Maximum Force 0.000148 0.000450 YES RMS Force 0.000047 0.000300 YES Maximum Displacement 0.001149 0.001800 YES RMS Displacement 0.000385 0.001200 YES Predicted change in Energy=-5.353928D-07 Optimization completed. -- Stationary point found. ---------------------------- ! Optimized Parameters ! ! (Angstroms and Degrees) ! -------------------------- -------------------------- ! Name Definition Value Derivative Info. ! -------------------------------------------------------------------------------- ! R1 R(1,6) 0.6876 -DE/DX = 0.0 ! ! R2 R(2,3) 1.4448 -DE/DX = -0.0001 ! ! R3 R(2,4) 1.3612 -DE/DX = 0.0001 ! ! R4 R(2,7) 1.3721 -DE/DX = -0.0001 ! ! R5 R(3,6) 1.3612 -DE/DX = 0.0001 ! ! R6 R(3,10) 1.372 -DE/DX = -0.0001 ! ! R7 R(4,5) 1.8703 -DE/DX = 0.0 ! ! R8 R(4,8) 1.08 -DE/DX = 0.0 ! ! R9 R(5,6) 1.8704 -DE/DX = 0.0 ! ! R10 R(6,9) 1.08 -DE/DX = 0.0 ! ! R11 R(7,12) 1.4312 -DE/DX = -0.0001 ! ! R12 R(10,11) 1.4312 -DE/DX = -0.0001 ! ! R13 R(11,12) 1.5202 -DE/DX = 0.0001 ! ! R14 R(11,13) 1.0932 -DE/DX = 0.0 ! ! R15 R(11,14) 1.0991 -DE/DX = 0.0 ! ! R16 R(12,15) 1.0991 -DE/DX = 0.0 ! ! R17 R(12,16) 1.0932 -DE/DX = 0.0 ! ! A1 A(3,2,4) 115.0491 -DE/DX = 0.0001 ! ! A2 A(3,2,7) 121.7524 -DE/DX = 0.0 ! ! A3 A(4,2,7) 123.1892 -DE/DX = -0.0001 ! ! A4 A(2,3,6) 115.0518 -DE/DX = 0.0 ! ! A5 A(2,3,10) 121.7582 -DE/DX = 0.0 ! ! A6 A(6,3,10) 123.1804 -DE/DX = 0.0 ! ! A7 A(2,4,5) 110.9715 -DE/DX = -0.0001 ! ! A8 A(2,4,8) 126.5048 -DE/DX = 0.0 ! ! A9 A(5,4,8) 122.5233 -DE/DX = 0.0001 ! ! A10 A(4,5,6) 87.9585 -DE/DX = 0.0001 ! ! A11 A(1,6,3) 126.9884 -DE/DX = 0.0 ! ! A12 A(1,6,5) 117.86 -DE/DX = 0.0 ! ! A13 A(1,6,9) 18.8414 -DE/DX = 0.0 ! ! A14 A(3,6,5) 110.9685 -DE/DX = -0.0001 ! ! A15 A(3,6,9) 126.5009 -DE/DX = 0.0 ! ! A16 A(5,6,9) 122.5303 -DE/DX = 0.0001 ! ! A17 A(2,7,12) 112.9981 -DE/DX = 0.0 ! ! A18 A(3,10,11) 113.01 -DE/DX = 0.0 ! ! A19 A(10,11,12) 110.6656 -DE/DX = 0.0 ! ! A20 A(10,11,13) 106.1147 -DE/DX = 0.0 ! ! A21 A(10,11,14) 109.8951 -DE/DX = 0.0 ! ! A22 A(12,11,13) 111.0244 -DE/DX = 0.0001 ! ! A23 A(12,11,14) 109.989 -DE/DX = 0.0 ! ! A24 A(13,11,14) 109.0722 -DE/DX = 0.0 ! ! A25 A(7,12,11) 110.6667 -DE/DX = 0.0 ! ! A26 A(7,12,15) 109.8807 -DE/DX = 0.0 ! ! A27 A(7,12,16) 106.1097 -DE/DX = 0.0 ! ! A28 A(11,12,15) 109.9895 -DE/DX = 0.0 ! ! A29 A(11,12,16) 111.0396 -DE/DX = 0.0 ! ! A30 A(15,12,16) 109.0744 -DE/DX = 0.0 ! ! D1 D(4,2,3,6) 0.2955 -DE/DX = 0.0 ! ! D2 D(4,2,3,10) 179.1979 -DE/DX = 0.0 ! ! D3 D(7,2,3,6) 179.2181 -DE/DX = 0.0 ! ! D4 D(7,2,3,10) -1.8795 -DE/DX = 0.0 ! ! D5 D(3,2,4,5) -0.2349 -DE/DX = 0.0 ! ! D6 D(3,2,4,8) 180.0021 -DE/DX = 0.0 ! ! D7 D(7,2,4,5) -179.1402 -DE/DX = 0.0 ! ! D8 D(7,2,4,8) 1.0968 -DE/DX = 0.0 ! ! D9 D(3,2,7,12) 17.5091 -DE/DX = 0.0 ! ! D10 D(4,2,7,12) -163.6572 -DE/DX = 0.0 ! ! D11 D(2,3,6,1) -156.4364 -DE/DX = 0.0 ! ! D12 D(2,3,6,5) -0.2015 -DE/DX = 0.0 ! ! D13 D(2,3,6,9) 179.998 -DE/DX = 0.0 ! ! D14 D(10,3,6,1) 24.6787 -DE/DX = 0.0 ! ! D15 D(10,3,6,5) -179.0864 -DE/DX = 0.0 ! ! D16 D(10,3,6,9) 1.1131 -DE/DX = 0.0 ! ! D17 D(2,3,10,11) 17.4684 -DE/DX = 0.0 ! ! D18 D(6,3,10,11) -163.7197 -DE/DX = 0.0 ! ! D19 D(2,4,5,6) 0.1007 -DE/DX = 0.0 ! ! D20 D(8,4,5,6) 179.8749 -DE/DX = 0.0 ! ! D21 D(4,5,6,1) 158.7071 -DE/DX = 0.0 ! ! D22 D(4,5,6,3) 0.0587 -DE/DX = 0.0 ! ! D23 D(4,5,6,9) 179.8685 -DE/DX = 0.0 ! ! D24 D(2,7,12,11) -46.268 -DE/DX = 0.0 ! ! D25 D(2,7,12,15) 75.3946 -DE/DX = 0.0 ! ! D26 D(2,7,12,16) -166.8207 -DE/DX = 0.0 ! ! D27 D(3,10,11,12) -46.2259 -DE/DX = 0.0 ! ! D28 D(3,10,11,13) -166.7628 -DE/DX = 0.0 ! ! D29 D(3,10,11,14) 75.4448 -DE/DX = 0.0 ! ! D30 D(10,11,12,7) 62.7656 -DE/DX = 0.0 ! ! D31 D(10,11,12,15) -58.8329 -DE/DX = 0.0 ! ! D32 D(10,11,12,16) -179.6639 -DE/DX = 0.0 ! ! D33 D(13,11,12,7) -179.6679 -DE/DX = 0.0 ! ! D34 D(13,11,12,15) 58.7336 -DE/DX = 0.0 ! ! D35 D(13,11,12,16) -62.0974 -DE/DX = 0.0 ! ! D36 D(14,11,12,7) -58.8499 -DE/DX = 0.0 ! ! D37 D(14,11,12,15) 179.5516 -DE/DX = 0.0 ! ! D38 D(14,11,12,16) 58.7206 -DE/DX = 0.0 ! -------------------------------------------------------------------------------- GradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGradGrad Input orientation: --------------------------------------------------------------------- Center Atomic Atomic Coordinates (Angstroms) Number Number Type X Y Z --------------------------------------------------------------------- 1 0 0 0.053695 0.022019 -0.007174 2 6 0 -2.270972 1.925676 0.019477 3 6 0 -0.862544 1.634459 -0.118246 4 6 0 -3.081256 0.834013 0.087498 5 34 0 -2.087063 -0.745867 -0.029149 6 6 0 -0.549726 0.310568 -0.166437 7 8 0 -2.737740 3.213575 0.097769 8 1 0 -4.156296 0.837275 0.190639 9 1 0 0.438838 -0.112744 -0.266194 10 8 0 0.074886 2.631548 -0.215716 11 6 0 -0.413171 3.903143 0.223656 12 6 0 -1.788493 4.181229 -0.361333 13 1 0 0.315532 4.642655 -0.118759 14 1 0 -0.460062 3.926764 1.321518 15 1 0 -1.739981 4.165527 -1.459276 16 1 0 -2.164737 5.154160 -0.034224 --------------------------------------------------------------------- Distance matrix (angstroms): 1 2 3 4 5 1 Bq 0.000000 2 C 3.004779 0.000000 3 C 1.857900 1.444800 0.000000 4 C 3.239786 1.361218 2.367642 0.000000 5 Se 2.274418 2.678307 2.678309 1.870306 0.000000 6 C 0.687562 2.367663 1.361200 2.597522 1.870377 7 O 4.241362 1.372110 2.461023 2.404252 4.014557 8 H 4.292762 2.183657 3.402899 1.079982 2.614646 9 H 0.483309 3.402915 2.183620 3.662309 2.614806 10 O 2.617935 2.461021 1.372029 3.644764 4.014445 11 C 3.915912 2.720936 2.337897 4.069002 4.947638 12 C 4.562687 2.337803 2.720756 3.616150 4.947299 13 H 4.629394 3.753810 3.230652 5.107491 5.900565 14 H 4.156489 2.996508 2.736709 4.237755 5.128831 15 H 4.742840 2.735982 2.995758 3.910309 5.127136 16 H 5.591157 3.230678 3.753807 4.417974 5.900540 6 7 8 9 10 6 C 0.000000 7 O 3.644813 0.000000 8 H 3.662277 2.769067 0.000000 9 H 1.080001 4.613839 4.714498 0.000000 10 O 2.404063 2.889272 4.613832 2.768781 0.000000 11 C 3.616271 2.427957 4.838557 4.134394 1.431153 12 C 4.068728 1.431153 4.134392 4.838208 2.427941 13 H 4.417910 3.378109 5.879957 4.759281 2.027773 14 H 3.911384 2.682166 4.948330 4.432434 2.080106 15 H 4.236609 2.079933 4.431486 4.947150 2.682028 16 H 5.107458 2.027714 4.759450 5.879854 3.378227 11 12 13 14 15 11 C 0.000000 12 C 1.520216 0.000000 13 H 1.093221 2.167643 0.000000 14 H 1.099117 2.159043 1.785621 0.000000 15 H 2.159057 1.099126 2.499954 3.070506 0.000000 16 H 2.167840 1.093231 2.533874 2.500091 1.785660 16 16 H 0.000000 Symmetry turned off by external request. Symmetry turned off: Cannot cope with ghost atoms or with translation vectors. Stoichiometry C6H6O2Se Framework group C1[X(C6H6O2Se)] NUMDOF-- NAT= 15 NAtoms= 16 Deg. of freedom 0 Full point group C1 Rotational constants (GHZ): 3.3069749 0.7362372 0.6124122 ********************************************************************** Population analysis using the SCF density. ********************************************************************** Alpha occ. eigenvalues -- -453.86711 -57.46647 -52.15124 -52.15040 -52.14759 Alpha occ. eigenvalues -- -19.18079 -19.18077 -10.25319 -10.25295 -10.24597 Alpha occ. eigenvalues -- -10.24558 -10.20239 -10.20238 -7.72338 -5.76844 Alpha occ. eigenvalues -- -5.76485 -5.75811 -2.12534 -2.12467 -2.11878 Alpha occ. eigenvalues -- -2.11590 -2.11513 -1.08406 -1.04996 -0.85233 Alpha occ. eigenvalues -- -0.76862 -0.73069 -0.68817 -0.64446 -0.58664 Alpha occ. eigenvalues -- -0.54172 -0.53558 -0.49606 -0.48119 -0.44188 Alpha occ. eigenvalues -- -0.43527 -0.42185 -0.39925 -0.39182 -0.36964 Alpha occ. eigenvalues -- -0.33890 -0.33386 -0.30489 -0.30255 -0.21303 Alpha occ. eigenvalues -- -0.20696 Alpha virt. eigenvalues -- -0.00578 0.01776 0.06562 0.08411 0.10352 Alpha virt. eigenvalues -- 0.11499 0.12791 0.14292 0.14744 0.15880 Alpha virt. eigenvalues -- 0.17366 0.18334 0.21607 0.24758 0.26836 Alpha virt. eigenvalues -- 0.28037 0.29778 0.34499 0.42736 0.42782 Alpha virt. eigenvalues -- 0.43408 0.45984 0.48176 0.48259 0.49776 Alpha virt. eigenvalues -- 0.50558 0.54159 0.54471 0.54557 0.58093 Alpha virt. eigenvalues -- 0.58919 0.59524 0.61188 0.62352 0.64114 Alpha virt. eigenvalues -- 0.70158 0.74486 0.74791 0.76459 0.76876 Alpha virt. eigenvalues -- 0.80630 0.81962 0.83285 0.83464 0.86910 Alpha virt. eigenvalues -- 0.88096 0.89636 0.90769 0.90847 0.96851 Alpha virt. eigenvalues -- 0.97177 1.02592 1.05334 1.08006 1.09728 Alpha virt. eigenvalues -- 1.14837 1.19368 1.22885 1.24352 1.29323 Alpha virt. eigenvalues -- 1.37806 1.38544 1.39134 1.43050 1.45459 Alpha virt. eigenvalues -- 1.45781 1.51802 1.51975 1.65584 1.72061 Alpha virt. eigenvalues -- 1.74250 1.75440 1.78949 1.81650 1.83627 Alpha virt. eigenvalues -- 1.84143 1.84213 1.90294 1.94058 1.96337 Alpha virt. eigenvalues -- 1.96481 2.00620 2.07041 2.10325 2.11537 Alpha virt. eigenvalues -- 2.12839 2.13431 2.23454 2.28161 2.34019 Alpha virt. eigenvalues -- 2.34403 2.38573 2.40724 2.40842 2.50107 Alpha virt. eigenvalues -- 2.50231 2.51076 2.59517 2.65047 2.73995 Alpha virt. eigenvalues -- 2.76119 2.81791 2.83455 2.97078 3.17200 Alpha virt. eigenvalues -- 3.20348 4.01909 4.06979 4.18923 4.26914 Alpha virt. eigenvalues -- 4.31425 4.40139 4.45686 4.77539 7.92794 Alpha virt. eigenvalues -- 70.26524 Condensed to atoms (all electrons): 1 2 3 4 5 6 1 Bq 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2 C 0.000000 4.640857 0.388006 0.571916 -0.047089 -0.054689 3 C 0.000000 0.388006 4.640648 -0.054688 -0.047090 0.571909 4 C 0.000000 0.571916 -0.054688 5.234094 0.325881 -0.057364 5 Se 0.000000 -0.047089 -0.047090 0.325881 33.427672 0.325866 6 C 0.000000 -0.054689 0.571909 -0.057364 0.325866 5.234194 7 O 0.000000 0.252685 -0.046183 -0.069024 0.004179 0.004997 8 H 0.000000 -0.020418 0.005422 0.346219 -0.040341 0.001560 9 H 0.000000 0.005423 -0.020418 0.001560 -0.040325 0.346210 10 O 0.000000 -0.046185 0.252720 0.004996 0.004179 -0.069034 11 C 0.000000 -0.018574 -0.030768 0.000530 -0.000206 0.003146 12 C 0.000000 -0.030774 -0.018547 0.003137 -0.000206 0.000530 13 H 0.000000 0.000666 0.002828 0.000022 0.000008 -0.000203 14 H 0.000000 0.001757 -0.000096 -0.000330 -0.000035 0.000573 15 H 0.000000 -0.000105 0.001765 0.000577 -0.000036 -0.000332 16 H 0.000000 0.002832 0.000665 -0.000203 0.000007 0.000022 7 8 9 10 11 12 1 Bq 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2 C 0.252685 -0.020418 0.005423 -0.046185 -0.018574 -0.030774 3 C -0.046183 0.005422 -0.020418 0.252720 -0.030768 -0.018547 4 C -0.069024 0.346219 0.001560 0.004996 0.000530 0.003137 5 Se 0.004179 -0.040341 -0.040325 0.004179 -0.000206 -0.000206 6 C 0.004997 0.001560 0.346210 -0.069034 0.003146 0.000530 7 O 8.240277 -0.001588 -0.000042 -0.004527 -0.040553 0.248978 8 H -0.001588 0.541904 -0.000025 -0.000042 0.000010 -0.000048 9 H -0.000042 -0.000025 0.541904 -0.001588 -0.000048 0.000010 10 O -0.004527 -0.000042 -0.001588 8.240200 0.249011 -0.040564 11 C -0.040553 0.000010 -0.000048 0.249011 4.907700 0.342082 12 C 0.248978 -0.000048 0.000010 -0.040564 0.342082 4.907843 13 H 0.002911 0.000000 -0.000011 -0.034377 0.366384 -0.027825 14 H -0.001168 0.000000 0.000011 -0.041074 0.356248 -0.046182 15 H -0.041095 0.000011 0.000000 -0.001170 -0.046191 0.356253 16 H -0.034372 -0.000011 0.000000 0.002910 -0.027814 0.366396 13 14 15 16 1 Bq 0.000000 0.000000 0.000000 0.000000 2 C 0.000666 0.001757 -0.000105 0.002832 3 C 0.002828 -0.000096 0.001765 0.000665 4 C 0.000022 -0.000330 0.000577 -0.000203 5 Se 0.000008 -0.000035 -0.000036 0.000007 6 C -0.000203 0.000573 -0.000332 0.000022 7 O 0.002911 -0.001168 -0.041095 -0.034372 8 H 0.000000 0.000000 0.000011 -0.000011 9 H -0.000011 0.000011 0.000000 0.000000 10 O -0.034377 -0.041074 -0.001170 0.002910 11 C 0.366384 0.356248 -0.046191 -0.027814 12 C -0.027825 -0.046182 0.356253 0.366396 13 H 0.568249 -0.037456 -0.001431 0.000165 14 H -0.037456 0.604070 0.006229 -0.001432 15 H -0.001431 0.006229 0.604058 -0.037435 16 H 0.000165 -0.001432 -0.037435 0.568186 Mulliken atomic charges: 1 1 Bq 0.000000 2 C 0.353692 3 C 0.353827 4 C -0.307322 5 Se 0.087535 6 C -0.307386 7 O -0.515475 8 H 0.167348 9 H 0.167339 10 O -0.515455 11 C -0.060956 12 C -0.061085 13 H 0.160070 14 H 0.158886 15 H 0.158901 16 H 0.160083 Sum of Mulliken charges= 0.00000 Atomic charges with hydrogens summed into heavy atoms: 1 1 Bq 0.167339 2 C 0.353692 3 C 0.353827 4 C -0.139974 5 Se 0.087535 6 C -0.307386 7 O -0.515475 8 H 0.000000 9 H 0.000000 10 O -0.515455 11 C 0.258000 12 C 0.257899 13 H 0.000000 14 H 0.000000 15 H 0.000000 16 H 0.000000 Sum of Mulliken charges= 0.00000 Electronic spatial extent (au): = 3102.8020 Charge= 0.0000 electrons Dipole moment (field-independent basis, Debye): X= 0.3829 Y= 1.8595 Z= -0.0168 Tot= 1.8986 Quadrupole moment (field-independent basis, Debye-Ang): XX= -64.2990 YY= -48.4714 ZZ= -65.6502 XY= -0.5047 XZ= 0.4322 YZ= -0.3014 Traceless Quadrupole moment (field-independent basis, Debye-Ang): XX= -4.8255 YY= 11.0022 ZZ= -6.1767 XY= -0.5047 XZ= 0.4322 YZ= -0.3014 Octapole moment (field-independent basis, Debye-Ang**2): XXX= 302.4877 YYY= -202.5924 ZZZ= 9.2171 XYY= 96.8913 XXY= -108.5598 XXZ= 3.0915 XZZ= 107.6136 YZZ= -93.2871 YYZ= 0.1664 XYZ= 4.1089 Hexadecapole moment (field-independent basis, Debye-Ang**3): XXXX= -1396.5530 YYYY= -1774.1128 ZZZZ= -94.1037 XXXY= 424.2107 XXXZ= -14.2003 YYYX= 313.1643 YYYZ= 4.1895 ZZZX= -6.2994 ZZZY= 16.7754 XXYY= -645.4863 XXZZ= -273.3779 YYZZ= -378.2005 XXYZ= -3.5447 YYXZ= 11.3534 ZZXY= 120.6053 N-N= 6.942447513967D+02 E-N=-8.010496585829D+03 KE= 2.768866825632D+03 1\1\GINC-IRIDIUM-2\FOpt\RB3LYP\6-31G(d)\C6H6O2Se1\GHUTCHIS\18-Feb-2010 \0\\#n B3LYP/6-31G* Opt\\\0,1\Bq,0.0536951489,0.0220192626,-0.00717358 96\C,-2.270972178,1.9256755624,0.0194773302\C,-0.862543639,1.634458627 4,-0.1182462562\C,-3.0812557767,0.8340127082,0.0874982124\Se,-2.087063 2121,-0.7458671296,-0.0291487523\C,-0.5497258928,0.3105677029,-0.16643 68081\O,-2.73773975,3.2135751816,0.0977686874\H,-4.1562964763,0.837274 9492,0.1906394008\H,0.4388379531,-0.1127436449,-0.266193761\O,0.074886 1285,2.6315484056,-0.2157158969\C,-0.4131705172,3.903143096,0.22365577 86\C,-1.7884931834,4.1812291866,-0.3613333199\H,0.3155319466,4.6426552 439,-0.118758669\H,-0.4600623932,3.9267639393,1.3215175952\H,-1.739980 8468,4.165527213,-1.4592756043\H,-2.1647373116,5.1541596957,-0.0342243 475\\Version=EM64M-G03RevE.01\HF=-2782.0248618\RMSD=6.309e-09\RMSF=9.2 97e-05\Thermal=0.\Dipole=0.1506319,0.7315981,-0.0066169\PG=C01 [X(C6H6 O2Se1)]\\@ THE CHYMISTS ARE A STRANGE CLASS OF MORTALS IMPELLED BY AN ALMOST INSANE IMPULSE TO SEEK THEIR PLEASURE AMONG SMOKE AND VAPOR, SOOT AND FLAME, POISONS AND POVERTY; YET AMONG ALL THESE EVILS I SEEM TO LIVE SO SWEETLY, THAT I MAY DIE IF I WOULD CHANGE PLACES WITH THE PERSIAN KING. -- JOHANN JOACHIM BECHER, 1635-1682 ACTA LABORATORII CHYMICA MONACENSIS, 1669 Job cpu time: 0 days 0 hours 15 minutes 18.5 seconds. File lengths (MBytes): RWF= 26 Int= 0 D2E= 0 Chk= 6 Scr= 1 Normal termination of Gaussian 03 at Thu Feb 18 07:18:18 2010. avogadro-1.1.1/testfiles/nanotube.xyz0000644000175000001440000002603412250371054017122 0ustar marcususers244 (5,4) Nanotube -- TubeGen 3.3, J T Frey, University of Delaware C 3.078414 0.000000 -16.657470 C 3.074387 0.157409 -14.199811 C 2.677646 1.518830 -14.291292 C 2.312608 2.031866 -15.565177 C 1.156446 2.852940 -15.656659 C 3.062317 0.314405 -11.742151 C 2.596481 1.653759 -11.833633 C 2.205687 2.147458 -13.107518 C 1.009054 2.908340 -13.198999 C 0.396203 3.052811 -14.472884 C -1.014283 2.906521 -14.564366 C -1.584441 2.639352 -15.838250 C -2.599451 1.649087 -15.929732 C 3.042234 0.470579 -9.284492 C 2.508523 1.784362 -9.375974 C 2.092996 2.257433 -10.649858 C 0.859022 2.956132 -10.741340 C 0.239585 3.069077 -12.015225 C -1.161576 2.850855 -12.106706 C -1.717326 2.554883 -13.380591 C -2.680374 1.514012 -13.472073 C -2.932354 0.936981 -14.745957 C -3.041252 -0.476884 -14.837439 C -2.880608 -1.085695 -16.111324 C -2.088313 -2.261766 -16.202805 C 3.078414 -0.000844 -5.552948 C 3.014192 0.625522 -6.826833 C 2.414002 1.910296 -6.918314 C 1.974829 2.361501 -8.192199 C 0.706743 2.996189 -8.283681 C 0.082341 3.077313 -9.557565 C -1.305829 2.787731 -9.649047 C -1.845718 2.463728 -10.922932 C -2.754283 1.374976 -11.014413 C -2.976429 0.785815 -12.288298 C -3.012890 -0.631768 -12.379779 C -2.821324 -1.231569 -13.653664 C -1.969930 -2.365589 -13.745146 C -1.447410 -2.716917 -15.019030 C -0.075963 -3.077477 -15.110512 C 0.551784 -3.028559 -16.384397 C 1.850821 -2.459898 -16.475878 C 3.074430 0.156566 -3.095289 C 2.978265 0.778829 -4.369174 C 2.313165 2.031232 -4.460655 C 1.851495 2.459390 -5.734540 C 0.552614 3.028408 -5.826021 C -0.075119 3.077498 -7.099906 C -1.446666 2.717314 -7.191388 C -1.969282 2.366128 -8.465272 C -2.820987 1.232342 -8.556754 C -3.012716 0.632594 -9.830639 C -2.976644 -0.785000 -9.922120 C -2.754660 -1.374221 -11.196005 C -1.846394 -2.463222 -11.287486 C -1.306593 -2.787373 -12.561371 C 0.081497 -3.077335 -12.652853 C 0.705921 -2.996383 -13.926737 C 1.974182 -2.362042 -14.018219 C 2.413478 -1.910957 -15.292104 C 3.014021 -0.626348 -15.383585 C 3.062403 0.313566 -0.637630 C 2.934545 0.930097 -1.911514 C 2.206276 2.146854 -2.002996 C 1.723317 2.550846 -3.276881 C 0.397039 3.052703 -3.368362 C -0.232383 3.069631 -4.642247 C -1.583718 2.639787 -4.733728 C -2.087693 2.262338 -6.007613 C -2.880310 1.086485 -6.099095 C -3.041122 0.477717 -7.372979 C -2.932611 -0.936177 -7.464461 C -2.680788 -1.513277 -8.738346 C -1.718026 -2.554412 -8.829827 C -1.162357 -2.850537 -10.103712 C 0.238744 -3.069142 -10.195193 C 0.858212 -2.956367 -11.469078 C 2.092377 -2.258006 -11.560560 C 2.508034 -1.785049 -12.834444 C 3.042105 -0.471413 -12.925926 C 3.042363 0.469746 1.820030 C 2.883147 1.078933 0.546145 C 2.093615 2.256859 0.454663 C 1.590630 2.635627 -0.819221 C 0.240426 3.069011 -0.910703 C -0.389038 3.053733 -2.184588 C -1.716626 2.555353 -2.276069 C -2.200642 2.152628 -3.549954 C -2.932097 0.937785 -3.641435 C -3.061570 0.321590 -4.915320 C -2.880905 -1.084906 -5.006802 C -2.599903 -1.648374 -6.280686 C -1.585164 -2.638918 -6.372168 C -1.015080 -2.906243 -7.646053 C 0.395366 -3.052920 -7.737534 C 1.008257 -2.908617 -9.011419 C 2.205099 -2.148063 -9.102900 C 2.596028 -1.654471 -10.376785 C 3.062230 -0.315244 -10.468267 C 3.014364 0.624696 4.277689 C 2.824207 1.224945 3.003804 C 1.975476 2.360959 2.912323 C 1.453782 2.713513 1.638438 C 0.083184 3.077290 1.546956 C -0.544676 3.029845 0.273072 C -1.845043 2.464234 0.181590 C -2.307834 2.037287 -1.092295 C -2.976213 0.786631 -1.183776 C -3.074009 0.164622 -2.457661 C -2.821662 -1.230796 -2.549142 C -2.512216 -1.779159 -3.823027 C -1.448155 -2.716520 -3.914509 C -0.865147 -2.954345 -5.188393 C 0.550954 -3.028710 -5.279875 C 1.155664 -2.853257 -6.553760 C 2.312051 -2.032500 -6.645241 C 2.677230 -1.519564 -7.919126 C 3.074344 -0.158251 -8.010607 C 2.978478 0.778012 6.735348 C 2.757877 1.367753 5.461463 C 1.852169 2.458883 5.369982 C 1.313130 2.784300 4.096097 C -0.074276 3.077518 4.004616 C -0.698888 2.998031 2.730731 C -1.968633 2.366668 2.639249 C -2.408987 1.916616 1.365365 C -3.012543 0.633419 1.273883 C -3.078406 0.007224 -0.000002 C -2.755036 -1.373466 -0.091483 C -2.417956 -1.905289 -1.365368 C -1.307357 -2.787015 -1.456849 C -0.712951 -2.994718 -2.730734 C 0.705100 -2.996576 -2.822216 C 1.300048 -2.790432 -4.096100 C 2.412954 -1.911619 -4.187582 C 2.751428 -1.380681 -5.461467 C 2.934800 0.929293 9.193008 C 2.684332 1.506982 7.919123 C 1.724016 2.550373 7.827641 C 1.169043 2.847802 6.553757 C -0.231541 3.069694 6.462275 C -0.851272 2.958373 5.188390 C -2.087073 2.262910 5.096909 C -2.503838 1.790930 3.823024 C -3.040991 0.478550 3.731542 C -3.074748 -0.150194 2.457658 C -2.681203 -1.512543 2.366176 C -2.317370 -2.026433 1.092291 C -1.163138 -2.850218 1.000810 C -0.558889 -3.027256 -0.273075 C 0.857402 -2.956602 -0.364556 C 1.441031 -2.720306 -1.638441 C 2.507545 -1.785736 -1.729923 C 2.818427 -1.238186 -3.003807 C 2.883443 1.078143 11.650667 C 2.603764 1.642269 10.376782 C 1.591352 2.635191 10.285301 C 1.021897 2.903853 9.011416 C -0.388201 3.053839 8.919934 C -1.001429 2.910975 7.646050 C -2.200052 2.153231 7.554568 C -2.592138 1.660558 6.280683 C -3.061482 0.322429 6.189202 C -3.063046 -0.307218 4.915317 C -2.600355 -1.647662 4.823835 C -2.210721 -2.142277 3.549951 C -1.015876 -2.905965 3.458469 C -0.403366 -3.051873 2.184584 C 1.007460 -2.908893 2.093103 C 1.578243 -2.643063 0.819218 C 2.595574 -1.655182 0.727737 C 2.878052 -1.092452 -0.546148 C 2.824542 1.224171 14.108326 C 2.516384 1.773259 12.834441 C 1.454525 2.713114 12.742960 C 0.872077 2.952307 11.469075 C -0.543845 3.029994 11.377594 C -1.148966 2.855961 10.103709 C -2.307275 2.037919 10.012227 C -2.673657 1.525842 8.738343 C -3.073964 0.165465 8.646861 C -3.043330 -0.463439 7.372976 C -2.512703 -1.778470 7.281495 C -2.098288 -2.252515 6.007610 C -0.865957 -2.954108 5.916128 C -0.246786 -3.068506 4.642244 C 1.154883 -2.853573 4.550762 C 1.711326 -2.558905 3.276877 C 2.676813 -1.520297 3.185396 C 2.930147 -0.943860 1.911511 C 2.758252 1.366997 16.565985 C 2.422420 1.899609 15.292101 C 1.313893 2.783940 15.200619 C 0.719976 2.993037 13.926734 C -0.698066 2.998222 13.835253 C -1.293497 2.793475 12.561368 C -2.408462 1.917276 12.469887 C -2.748180 1.387134 11.196002 C -3.078404 0.008067 11.104520 C -3.015652 -0.618447 9.830636 C -2.418478 -1.904626 9.739154 C -1.980365 -2.356860 8.465269 C -0.713771 -2.994522 8.373788 C -0.089562 -3.077111 7.099903 C 1.299283 -2.790788 7.008421 C 1.839932 -2.468053 5.734537 C 2.751049 -1.381435 5.643055 C 2.974577 -0.792798 4.369170 C 0.565992 3.025936 16.384394 C -0.850461 2.958606 16.292912 C -1.434643 2.723680 15.019027 C -2.503347 1.791616 14.927546 C -2.815513 1.244797 13.653661 C -3.074789 -0.149351 13.562180 C -2.980084 -0.771838 12.288295 C -2.317925 -2.025798 12.196813 C -1.857261 -2.455039 10.922929 C -0.559719 -3.027102 10.831447 C 0.067897 -3.077665 9.557562 C 1.440285 -2.720701 9.466081 C 1.963724 -2.370743 8.192196 C 2.818087 -1.238959 8.100714 C 3.011224 -0.639662 6.826830 C -2.875480 1.099203 16.111320 C -3.063130 -0.306379 16.019839 C -2.936719 -0.923209 14.745954 C -2.211307 -2.141671 14.654473 C -1.729298 -2.546795 13.380588 C -0.404202 -3.051763 13.289106 C 0.225179 -3.070168 12.015222 C 1.577519 -2.643496 11.923740 C 2.082378 -2.267231 10.649855 C 2.877752 -1.093241 10.558374 C 3.039992 -0.484852 9.284489 C -1.596811 -2.631887 15.838247 C -0.247627 -3.068439 15.746766 C 0.381871 -3.054637 14.472881 C 1.710625 -2.559374 14.381399 C 2.195585 -2.157787 13.107515 C 2.929889 -0.944663 13.016033 C 3.060807 -0.328774 11.742148 C 2.303046 -2.042697 15.565174 C 2.974359 -0.793613 15.473692 C 3.073615 -0.171836 14.199808 avogadro-1.1.1/testfiles/fail2.drawlog.ignore0000644000175000001440000037310712250371054020401 0ustar marcususers"Avogadro version: 0.9.7 Git: 1e37271 LibAvogadro version: 0.9.7 Git: 1e37271" Locale: "en_US" Libavogadro translations not found. "System has OpenGL support." "About to test OpenGL capabilities." "OpenGL capabilities found: " "Double Buffering." "Direct Rendering." "Antialiasing." Searching for plugins in "/usr/local/bin/../lib/avogadro/colors" Searching for plugins in "/usr/local/bin/../lib/avogadro/engines" Searching for plugins in "/usr/local/bin/../lib/avogadro/extensions" Searching for plugins in "/usr/local/bin/../lib/avogadro/tools" Searching for plugins in "/usr/local/bin/../lib/avogadro/contrib" QStackedLayout::setCurrentWidget: Widget 0x1594e50 not contained in stack GLWidget initialisation... GLWidget initialised... createObjects() setOBMol called. Molecule::addAtom( 0 ) Molecule::addAtom( 1 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 0 , end = 1 , order = 1 , adjBegin = 6 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 0 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 0 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 2 ) Molecule::addAtom( 3 ) Molecule::addAtom( 4 ) AdjustHydrogensPreCommand(atomId = 1 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 5 ) Molecule::addAtom( 6 ) Molecule::addAtom( 7 ) Molecule::addAtom( 8 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 1 , end = 8 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 1 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 9 ) Molecule::addAtom( 10 ) AdjustHydrogensPreCommand(atomId = 8 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 11 ) Molecule::addAtom( 12 ) Molecule::addAtom( 13 ) Molecule::addAtom( 14 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 8 , end = 14 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 8 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 15 ) Molecule::addAtom( 16 ) AdjustHydrogensPreCommand(atomId = 14 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 17 ) Molecule::addAtom( 18 ) Molecule::addAtom( 19 ) Molecule::addAtom( 20 ) Molecule::addAtom( 21 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 20 , end = 14 , order = 1 , adjBegin = 6 , adjEnd = 15 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 20 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 22 ) Molecule::addAtom( 23 ) Molecule::addAtom( 24 ) AdjustHydrogensPreCommand(atomId = 14 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 25 ) Molecule::addAtom( 26 ) Molecule::addAtom( 27 ) Molecule::addAtom( 28 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 27 , end = 20 , order = 1 , adjBegin = 6 , adjEnd = 15 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 27 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 29 ) Molecule::addAtom( 30 ) Molecule::addAtom( 31 ) AdjustHydrogensPreCommand(atomId = 20 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 32 ) Molecule::addAtom( 33 ) Molecule::addAtom( 34 ) Molecule::addAtom( 35 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 0 , end = 27 , order = 1 , adjBegin = 15 , adjEnd = 15 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 0 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 36 ) Molecule::addAtom( 37 ) AdjustHydrogensPreCommand(atomId = 27 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 38 ) Molecule::addAtom( 39 ) ChangeBondOrderDrawCommand(id = 0 , old = 1 , new = 2 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 0 1 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 40 ) Molecule::addAtom( 41 ) ChangeBondOrderDrawCommand(id = 13 , old = 1 , new = 2 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 8 14 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 42 ) Molecule::addAtom( 43 ) ChangeBondOrderDrawCommand(id = 25 , old = 1 , new = 2 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 27 20 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 44 ) Molecule::addAtom( 45 ) Molecule::addAtom( 46 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 20 , end = 46 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 46 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 20 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() AdjustHydrogensPreCommand(atomId = 46 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 47 ) Molecule::addAtom( 48 ) Molecule::addAtom( 49 ) ChangeElementDrawCommand(id = 47 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 50 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 47 , end = 50 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 50 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 47 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 51 ) Molecule::addAtom( 52 ) AdjustHydrogensPreCommand(atomId = 50 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 53 ) Molecule::addAtom( 54 ) Molecule::addAtom( 55 ) Molecule::addAtom( 56 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 50 , end = 56 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 56 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 50 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 57 ) Molecule::addAtom( 58 ) AdjustHydrogensPreCommand(atomId = 56 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 59 ) Molecule::addAtom( 60 ) Molecule::addAtom( 61 ) Molecule::addAtom( 62 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 56 , end = 62 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 62 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 56 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 63 ) Molecule::addAtom( 64 ) AdjustHydrogensPreCommand(atomId = 62 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 65 ) Molecule::addAtom( 66 ) Molecule::addAtom( 67 ) Molecule::addAtom( 68 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 62 , end = 68 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 68 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 62 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 69 ) Molecule::addAtom( 70 ) AdjustHydrogensPreCommand(atomId = 68 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 71 ) Molecule::addAtom( 72 ) Molecule::addAtom( 73 ) Molecule::addAtom( 74 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 68 , end = 74 , order = 1 , adjBegin = 15 , adjEnd = 6 ) AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 74 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 68 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 75 ) Molecule::addAtom( 76 ) AdjustHydrogensPreCommand(atomId = 74 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 77 ) Molecule::addAtom( 78 ) Molecule::addAtom( 79 ) Molecule::addAtom( 80 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 74 , end = 47 , order = 1 , adjBegin = 15 , adjEnd = 15 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 74 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 81 ) Molecule::addAtom( 82 ) AdjustHydrogensPreCommand(atomId = 47 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 83 ) ChangeBondOrderDrawCommand(id = 76 , old = 1 , new = 2 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 74 47 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 84 ) ChangeBondOrderDrawCommand(id = 52 , old = 1 , new = 2 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 50 56 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 85 ) Molecule::addAtom( 86 ) ChangeBondOrderDrawCommand(id = 64 , old = 1 , new = 2 , adj= 2 ) ChangeBondOrderDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 62 68 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 87 ) Molecule::addAtom( 88 ) ChangeElementDrawCommand(id = 8 , old = 6 , new = 7 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 8 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand(id = 41 , old = 1 , new = 7 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 41 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 89 ) Molecule::addAtom( 90 ) ChangeElementDrawCommand(id = 0 , old = 6 , new = 7 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 0 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand(id = 44 , old = 1 , new = 7 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 44 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 91 ) Molecule::addAtom( 92 ) ChangeElementDrawCommand(id = 86 , old = 1 , new = 8 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 86 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 93 ) ChangeElementDrawCommand(id = 87 , old = 1 , new = 8 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 87 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 94 ) ChangeElementDrawCommand(id = 88 , old = 1 , new = 8 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 88 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 95 ) ChangeElementDrawCommand(id = 93 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 96 ) HEEEEEEEEEEEEERRRRRRRRRREEEEEEEEEEEEEEE ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 93 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 97 ) Molecule::addAtom( 98 ) Molecule::addAtom( 99 ) ChangeElementDrawCommand(id = 94 , old = 1 , new = 6 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 94 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 100 ) Molecule::addAtom( 101 ) Molecule::addAtom( 102 ) ChangeElementDrawCommand(id = 95 , old = 1 , new = 6 , adj= 2 ) ChangeElementDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 95 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 103 ) Molecule::addAtom( 104 ) Molecule::addAtom( 105 ) ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 74 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 68 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 62 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 56 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 50 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 46 ) AdjustHydrogensPostCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 46 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 50 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 56 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 62 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 68 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 74 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 74 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 68 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 62 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 56 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 50 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 46 ) AdjustHydrogensPostCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 46 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 50 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 56 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 62 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 68 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 74 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 74 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 68 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 62 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 62 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 68 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 74 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 74 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 68 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 62 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 56 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 50 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 46 ) AdjustHydrogensPostCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 46 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 50 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 56 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 62 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 68 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 74 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() DeleteAtomDrawCommand(id = 20 , adj = 2 ) DeleteAtomDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 14 27 46 20 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 106 ) Molecule::addAtom( 107 ) Molecule::addAtom( 108 ) Molecule::addAtom( 109 ) Molecule::addAtom( 110 ) Molecule::addAtom( 111 ) Molecule::addAtom( 112 ) DeleteAtomDrawCommand(id = 1 , adj = 2 ) DeleteAtomDrawCommand::redo() "AdjustHydrogensPreCommand(atomIds = [ 0 8 41 1 ])" AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 113 ) Molecule::addAtom( 114 ) Molecule::addAtom( 115 ) Molecule::addAtom( 116 ) Molecule::addAtom( 117 ) Molecule::addAtom( 118 ) Molecule::addAtom( 119 ) Molecule::addAtom( 120 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 41 , end = 0 , order = 1 , adjBegin = 15 , adjEnd = 15 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 41 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 121 ) Molecule::addAtom( 122 ) AdjustHydrogensPreCommand(atomId = 0 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 123 ) Molecule::addAtom( 124 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 41 , end = 8 , order = 1 , adjBegin = 15 , adjEnd = 15 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 41 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 125 ) AdjustHydrogensPreCommand(atomId = 8 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 126 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 14 , end = 50 , order = 1 , adjBegin = 15 , adjEnd = 15 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 14 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 127 ) AdjustHydrogensPreCommand(atomId = 50 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() DeleteAtomDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() DeleteAtomDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 74 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 68 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 62 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 56 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 50 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 46 ) AdjustHydrogensPostCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 46 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 50 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 56 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 62 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 68 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 74 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() DeleteAtomDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() DeleteAtomDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() DeleteAtomDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() DeleteAtomDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 74 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 68 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 62 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 56 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 50 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 46 ) AdjustHydrogensPostCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 46 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 50 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 56 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 62 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 68 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 74 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom AdjustHydrogensPostCommand::redo() DeleteAtomDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() DeleteAtomDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() DeleteAtomDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() DeleteAtomDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom ChangeElementDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 74 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 68 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 62 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 56 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 50 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 46 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand(id = 45 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 128 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 45 , end = 128 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 45 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 129 ) Molecule::addAtom( 130 ) AdjustHydrogensPreCommand(atomId = 128 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 131 ) Molecule::addAtom( 132 ) Molecule::addAtom( 133 ) ChangeElementDrawCommand(id = 132 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 134 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 132 , end = 134 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 132 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 135 ) Molecule::addAtom( 136 ) AdjustHydrogensPreCommand(atomId = 134 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 137 ) Molecule::addAtom( 138 ) Molecule::addAtom( 139 ) ChangeElementDrawCommand(id = 138 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 140 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 138 , end = 140 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 138 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 141 ) Molecule::addAtom( 142 ) AdjustHydrogensPreCommand(atomId = 140 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 143 ) Molecule::addAtom( 144 ) Molecule::addAtom( 145 ) ChangeElementDrawCommand(id = 139 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 146 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 139 , end = 146 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 139 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 147 ) Molecule::addAtom( 148 ) AdjustHydrogensPreCommand(atomId = 146 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 149 ) Molecule::addAtom( 150 ) Molecule::addAtom( 151 ) ChangeElementDrawCommand(id = 151 , old = 1 , new = 6 , adj= 0 ) Molecule::addAtom( 152 ) AddAtomDrawCommand_ctor2(element = 6 , adj = 12 ) XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX AddBondDrawCommand_ctor2(begin = 151 , end = 152 , order = 1 , adjBegin = 6 , adjEnd = 6 ) ChangeElementDrawCommand::redo() AdjustHydrogensPostCommand() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 151 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 153 ) Molecule::addAtom( 154 ) AdjustHydrogensPreCommand(atomId = 152 ) AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 155 ) Molecule::addAtom( 156 ) Molecule::addAtom( 157 ) Molecule::addAtom( 158 ) YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY AddBondDrawCommand_ctor2(begin = 152 , end = 14 , order = 1 , adjBegin = 15 , adjEnd = 15 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand(atomId = 152 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() Molecule::addAtom( 159 ) Molecule::addAtom( 160 ) AdjustHydrogensPreCommand(atomId = 14 ) AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 152 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 146 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 140 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 134 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 128 ) AdjustHydrogensPostCommand::undo() ChangeElementDrawCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() ChangeBondOrderDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AdjustHydrogensPreCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 27 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 20 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 14 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPreCommand::undo() AddAtomDrawCommand::undo(id = 8 ) AdjustHydrogensPostCommand::undo() AddBondDrawCommand::undo() AdjustHydrogensPostCommand::undo() AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 1 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::undo(id = 0 ) AdjustHydrogensPostCommand::undo() AddAtomDrawCommand::redo(id = 0 ) AddAtomDrawCommand::redo(id = 1 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 8 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 14 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 20 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddAtomDrawCommand::redo(id = 27 ) AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeBondOrderDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 128 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 134 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 140 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 146 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() ChangeElementDrawCommand::redo() AddAtomDrawCommand::redo(id = 152 ) AddBondDrawCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() AddBondDrawCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPreCommand::redo() AdjustHydrogensPostCommand::redo() AdjustHydrogensPostCommand::redo() avogadro-1.1.1/testfiles/2_2_2-trifluoroethanol.cml0000644000175000001440000000447612250371054021437 0ustar marcususers 2,2,2-Trifluoroethanol 100.0398 100.0135994 -45 76 avogadro-1.1.1/testfiles/amines.smi0000644000175000001440000000010212250371054016505 0ustar marcususersCN methylamine CCN ethylamine CCCNC propylamine c1ccccc1N aniline avogadro-1.1.1/COPYING0000644000175000001440000004310312250371054013560 0ustar marcususers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. avogadro-1.1.1/README0000644000175000001440000000304112250371054013402 0ustar marcususers Avogadro is an advanced molecular editor designed for cross-platform use in computational chemistry, molecular modeling, bioinformatics, materials science, and related areas. It offers flexible rendering and a powerful plugin architecture. * Cross-Platform: Molecular builder/editor for Windows, Linux, and Mac OS X. * Free, Open Source: Easy to install and all source code is available under the GNU GPL. * International: Translations into Chinese, French, German, Italian, Russian, and Spanish, with more languages to come. * Intuitive: Built to work easily for students and advanced researchers both. * Fast: Supports multi-threaded rendering and computation. * Extensible: Plugin architecture for developers, including rendering, interactive tools, commands, and Python scripts. * Flexible: Features include Open Babel import of chemical files, input generation for multiple computational chemistry packages, crystallography, and biomolecules. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. See INSTALL file for installation instructions.avogadro-1.1.1/cmake/0000755000175000001440000000000012250371054013604 5ustar marcususersavogadro-1.1.1/cmake/modules/0000755000175000001440000000000012250371054015254 5ustar marcususersavogadro-1.1.1/cmake/modules/COPYING-CMAKE-SCRIPTS0000644000175000001440000000245612250371054020261 0ustar marcususersRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. avogadro-1.1.1/cmake/modules/FindLinguist.cmake0000644000175000001440000001227712250371054020666 0ustar marcususers# check for lupdate and lrelease: we can't # do it using qmake as it doesn't have # QMAKE_LUPDATE and QMAKE_LRELEASE variables :( # # I18N_LANGUAGE - if not empty, wraps only chosen language # # One problem is that FindQt4.cmake will look for these and cache the results # If users have lrelease from Qt3 (e.g., Debian, Ubuntu) # then we will fail. # First remove these from cache set(QT_LUPDATE_EXECUTABLE NOTFOUND CACHE FILEPATH "" FORCE) set(QT_LRELEASE_EXECUTABLE NOTFOUND CACHE FILEPATH "" FORCE) set(QT_LCONVERT_EXECUTABLE NOTFOUND CACHE FILEPATH "" FORCE) FIND_PROGRAM(QT_LUPDATE_EXECUTABLE NAMES lupdate-qt4 lupdate PATHS "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" $ENV{QTDIR}/bin ) if(QT_LUPDATE_EXECUTABLE) message(STATUS "Found lupdate: ${QT_LUPDATE_EXECUTABLE}") else(QT_LUPDATE_EXECUTABLE) if(Linguist_FIND_REQUIRED) message(FATAL_ERROR "Could NOT find lupdate") endif(Linguist_FIND_REQUIRED) endif(QT_LUPDATE_EXECUTABLE) FIND_PROGRAM(QT_LRELEASE_EXECUTABLE NAMES lrelease-qt4 lrelease PATHS "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" $ENV{QTDIR}/bin ) if(QT_LRELEASE_EXECUTABLE) message(STATUS "Found lrelease: ${QT_LRELEASE_EXECUTABLE}") else(QT_LRELEASE_EXECUTABLE) if(Linguist_FIND_REQUIRED) message(FATAL_ERROR "Could NOT find lrelease") endif(Linguist_FIND_REQUIRED) endif(QT_LRELEASE_EXECUTABLE) FIND_PROGRAM(QT_LCONVERT_EXECUTABLE NAMES lconvert-qt4 lconvert PATHS "[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\4.0.0;InstallDir]/bin" "[HKEY_CURRENT_USER\\Software\\Trolltech\\Versions\\4.0.0;InstallDir]/bin" $ENV{QTDIR}/bin ) if(QT_LCONVERT_EXECUTABLE) message(STATUS "Found lconvert: ${QT_LCONVERT_EXECUTABLE}") else(QT_LCONVERT_EXECUTABLE) if(Linguist_FIND_REQUIRED) message(FATAL_ERROR "Could NOT find lconvert") endif(Linguist_FIND_REQUIRED) endif(QT_LCONVERT_EXECUTABLE) mark_as_advanced(QT_LUPDATE_EXECUTABLE QT_LRELEASE_EXECUTABLE QT_LCONVERT_EXECUTABLE) if(QT_LUPDATE_EXECUTABLE AND QT_LRELEASE_EXECUTABLE AND QT_LCONVERT_EXECUTABLE) set(Linguist_FOUND TRUE) # QT4_WRAP_TS(outfiles infiles ...) # outfiles receives .qm generated files from # .ts files in arguments # a target lupdate is created for you # update/generate your translations files # example: QT4_WRAP_TS(foo_QM ${foo_TS}) MACRO (QT4_WRAP_TS outfiles) # a target to manually run lupdate #ADD_CUSTOM_TARGET(lupdate #COMMAND ${QT_LUPDATE_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} -ts ${ARGN} #WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} #) FOREACH (it ${ARGN}) GET_FILENAME_COMPONENT(it ${it} ABSOLUTE) GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.qm) ADD_CUSTOM_COMMAND(OUTPUT ${outfile} COMMAND ${QT_LRELEASE_EXECUTABLE} ARGS -compress -removeidentical -silent ${it} -qm ${outfile} DEPENDS ${it} ) SET(${outfiles} ${${outfiles}} ${outfile}) ENDFOREACH (it) ENDMACRO (QT4_WRAP_TS) # QT_WRAP_PO(outfiles infiles ...) # outfiles receives .qm generated files from # .po files in arguments # example: QT4_WRAP_PO(foo_TS ${foo_PO}) MACRO (QT4_WRAP_PO outfiles) FOREACH (it ${ARGN}) GET_FILENAME_COMPONENT(it ${it} ABSOLUTE) # PO files are foo-en_GB.po not foo_en_GB.po like Qt expects GET_FILENAME_COMPONENT(fileWithDash ${it} NAME_WE) if(NOT I18N_LANGUAGE) set(do_wrap ON) else(NOT I18N_LANGUAGE) string(REGEX MATCH "${I18N_LANGUAGE}" ln ${fileWithDash}) if(ln) set(do_wrap ON) else(ln) set(do_wrap OFF) endif(ln) endif(NOT I18N_LANGUAGE) if(do_wrap) STRING(REPLACE "-" "_" filenameBase "${fileWithDash}") SET(tsfile ${CMAKE_CURRENT_BINARY_DIR}/${filenameBase}.ts) SET(qmfile ${CMAKE_CURRENT_BINARY_DIR}/${filenameBase}.qm) if (NOT EXISTS "${it}") GET_FILENAME_COMPONENT(path ${it} PATH) STRING(REGEX MATCH "[^-]+$" lang "${fileWithDash}") set (it "${path}/${lang}.po") endif (NOT EXISTS "${it}") # lconvert from PO to TS and then run lupdate to generate the correct strings # finally run lrelease as used above ADD_CUSTOM_COMMAND(OUTPUT ${qmfile} COMMAND ${QT_LCONVERT_EXECUTABLE} ARGS -i ${it} -o ${tsfile} COMMAND ${QT_LUPDATE_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR} -silent -noobsolete -ts ${tsfile} COMMAND ${QT_LRELEASE_EXECUTABLE} ARGS -compress -removeidentical -silent ${tsfile} -qm ${qmfile} DEPENDS ${it} ) SET(${outfiles} ${${outfiles}} ${qmfile}) endif(do_wrap) ENDFOREACH (it) ENDMACRO (QT4_WRAP_PO) else(QT_LUPDATE_EXECUTABLE AND QT_LRELEASE_EXECUTABLE AND QT_LCONVERT_EXECUTABLE) set(Linguist_FOUND FALSE) endif(QT_LUPDATE_EXECUTABLE AND QT_LRELEASE_EXECUTABLE AND QT_LCONVERT_EXECUTABLE) avogadro-1.1.1/cmake/modules/AvogadroConfig.cmake.in0000644000175000001440000000206012250371054021551 0ustar marcususers# Avogadro CMake configuration file - http://avogadro.openmolecules.net/ # If this file was found, then Avogadro has been found set(Avogadro_FOUND 1) set(Avogadro_VERSION_MAJOR "@Avogadro_VERSION_MAJOR@") set(Avogadro_VERSION_MINOR "@Avogadro_VERSION_MINOR@") set(Avogadro_VERSION_PATCH "@Avogadro_VERSION_PATCH@") set(Avogadro_VERSION "${Avogadro_VERSION_MAJOR}.${Avogadro_VERSION_MINOR}.${Avogadro_VERSION_PATCH}") set(Avogadro_ENABLE_PYTHON "@ENABLE_PYTHON@") set(Avogadro_ENABLE_GLSL "@ENABLE_GLSL@") set(Avogadro_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@") set(Avogadro_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include") set(Avogadro_LIBRARY_DIRS "@CMAKE_INSTALL_PREFIX@/@LIB_INSTALL_DIR@") set(Avogadro_LIB_SUFFIX "@LIB_SUFFIX@") set(Avogadro_PLUGIN_DIR "@CMAKE_INSTALL_PREFIX@/@Avogadro_PLUGIN_INSTALL_DIR@") set(Avogadro_BIN_DIRS "@CMAKE_INSTALL_PREFIX@/@BIN_INSTALL_DIR@") # Now for the use file, which contains useful functions, sets up the project set(Avogadro_USE_FILE "${Avogadro_PLUGIN_DIR}/AvogadroUse.cmake") avogadro-1.1.1/cmake/modules/FindNumpy.cmake0000644000175000001440000000217012250371054020167 0ustar marcususers# - Find numpy # Find the native numpy includes # This module defines # NUMPY_INCLUDE_DIR, where to find numpy/arrayobject.h, etc. # NUMPY_FOUND, If false, do not try to use numpy headers. #if (NUMPY_INCLUDE_DIR) # in cache already # set (NUMPY_FIND_QUIETLY TRUE) #endif (NUMPY_INCLUDE_DIR) EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import numpy; print numpy.get_include()" OUTPUT_VARIABLE NUMPY_INCLUDE_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) if (NUMPY_INCLUDE_DIR) if(EXISTS ${NUMPY_INCLUDE_DIR}/numpy/arrayobject.h) # successful set (NUMPY_FOUND TRUE) set (NUMPY_INCLUDE_DIR ${NUMPY_INCLUDE_DIR} CACHE STRING "Numpy include path") else() set(NUMPY_FOUND FALSE) endif() else (NUMPY_INCLUDE_DIR) # Did not successfully include numpy set(NUMPY_FOUND FALSE) endif (NUMPY_INCLUDE_DIR) if (NUMPY_FOUND) if (NOT NUMPY_FIND_QUIETLY) message (STATUS "Numpy headers found") endif (NOT NUMPY_FIND_QUIETLY) else (NUMPY_FOUND) if (NUMPY_FIND_REQUIRED) message (FATAL_ERROR "Numpy headers missing") endif (NUMPY_FIND_REQUIRED) endif (NUMPY_FOUND) MARK_AS_ADVANCED (NUMPY_INCLUDE_DIR) avogadro-1.1.1/cmake/modules/AvogadroUse.cmake0000644000175000001440000000446312250371054020504 0ustar marcususers# Set up the include directories and link directories include_directories(${Avogadro_INCLUDE_DIRS}) link_directories(${Avogadro_LIBRARY_DIRS}) # Set up the deps needed to compile an Avogadro plugin find_package(Qt4 REQUIRED) set(QT_USE_QTOPENGL true) include(${QT_USE_FILE}) add_definitions(${QT_DEFINITIONS}) add_definitions(-DQT_PLUGIN) add_definitions(-DQT_SHARED) # Add the Avogadro modules directory to the CMake module path set(CMAKE_MODULE_PATH ${Avogadro_PLUGIN_DIR}/cmake ${CMAKE_MODULE_PATH}) find_package(Eigen2 REQUIRED) include_directories(${EIGEN2_INCLUDE_DIR}) if(Avogadro_ENABLE_GLSL) find_package(GLEW) if(GLEW_FOUND) include_directories(${GLEW_INCLUDE_DIR}) add_definitions(-DENABLE_GLSL) endif(GLEW_FOUND) endif(Avogadro_ENABLE_GLSL) # Use this function to add a new plugin. It also uses the global variables # LINK_LIBS to determine what libraries the plugin should link to and # DESTINATION_DIR to determine where the plugin will be installed. # Optional ARGV2 - UI list # Optional ARGV3 - RC files function(avogadro_plugin plugin_name src_list) qt4_automoc(${src_list}) if(NOT "${ARGV2}" STREQUAL "") # Process the UI file for this plugin qt4_wrap_ui(plugin_UIS_H ${ARGV2}) endif(NOT "${ARGV2}" STREQUAL "") if(NOT "${ARGV3}" STREQUAL "") # Process the RC file and add it to the plugin qt4_add_resources(plugin_RC_SRCS ${ARGV3}) endif(NOT "${ARGV3}" STREQUAL "") add_library(${plugin_name} SHARED ${src_list} ${plugin_UIS_H} ${plugin_RC_SRCS}) target_link_libraries(${plugin_name} avogadro) if(UNIX) add_custom_target("${plugin_name}.mf" COMMAND avopkg -wizard "${plugin_name}" ) add_custom_target("${plugin_name}.manifest" DEPENDS "${plugin_name}.mf" ) add_custom_target("${plugin_name}.avo" COMMAND avopkg -pack "${plugin_name}.mf" ) add_custom_target("${plugin_name}.package" DEPENDS "${plugin_name}.avo" ) add_custom_target("${plugin_name}.install_package" COMMAND avopkg "${plugin_name}.avo" DEPENDS "${plugin_name}.avo" ) endif(UNIX) install(TARGETS ${plugin_name} DESTINATION "${Avogadro_PLUGIN_DIR}/contrib") set_target_properties(${plugin_name} PROPERTIES OUTPUT_NAME ${plugin_name} PREFIX "") endfunction(avogadro_plugin) avogadro-1.1.1/cmake/modules/FindSIP.cmake0000644000175000001440000000235212250371054017514 0ustar marcususers# - Find sip # Find the python sip includes making sure it is loadable from python # This module defines # SIP_INCLUDE_DIR, where to find sip.h, etc. # SIP_FOUND, If false, do not try to use numpy headers. # be certain sip is available from python. this part might be unnecessary. execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sip; print sip.SIP_VERSION" OUTPUT_VARIABLE SIP_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) if(SIP_VERSION) set(SIP_PYTHON_FOUND TRUE) message(STATUS "SIP version ${SIP_VERSION} found") else() message(STATUS "SIP module not available in Python." ) set(SIP_PYTHON_FOUND FALSE) endif() if(SIP_PYTHON_FOUND) # search for sip.h if(SIP_INCLUDE_DIR) set(SIP_FOUND TRUE) elseif(EXISTS ${PYTHON_INCLUDE_PATH}/sip.h) # The SIP headers are often packaged in the Python include directory set(SIP_INCLUDE_DIR ${PYTHON_INCLUDE_PATH}) else() # Attempt to find the SIP headers in the normal system path find_path(SIP_INCLUDE_DIR NAMES sip.h PATHS PATH_SUFFIXES SIP ) endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(SIP DEFAULT_MSG SIP_INCLUDE_DIR) else() # give up set(SIP_FOUND FALSE) endif() mark_as_advanced(SIP_INCLUDE_DIR) avogadro-1.1.1/cmake/modules/PythonDeps.cmake0000644000175000001440000000447012250371054020360 0ustar marcususers# Find All python dependencies # This CMake file defines # ALL_PYTHON_FOUND, if false, do not try to use python. if(Boost_PYTHON_FOUND AND PYTHONLIBS_FOUND AND NUMPY_FOUND) # In cache already set(ALL_PYTHON_FOUND TRUE) else() message(STATUS "Searching for python dependencies...") # Boost Python message(STATUS "[1/5] Boost Python") # CMake's new FindBoost has an option to look for additional versions set(Boost_ADDITIONAL_VERSIONS "1.45" "1.44" "1.43" "1.42" "1.41" "1.40" "1.40.0" "1.39" "1.39.0" "1.38" "1.38.0" "1.37" "1.37.0") find_package(Boost COMPONENTS python) if (Boost_PYTHON_FOUND) message(STATUS "Boost Python found...") else() message(STATUS "Boost Python NOT found - Python support disabled.") # message(STATUS "debian/ubuntu: install the libboost-python-dev package.") set(ALL_PYTHON_FOUND FALSE) return() endif() # Python Libraries message(STATUS "[2/5] Python Libraries") find_package(PythonLibs) if (NOT PYTHONLIBS_FOUND) message(STATUS "Python libraries NOT found - Python support disabled.") # message(STATUS "debian/ubuntu: install the python-dev package. Correct?????") set(ALL_PYTHON_FOUND FALSE) return() endif() # Python Interpreter message(STATUS "[3/5] Python Interpreter") find_package(PythonInterp) if (NOT PYTHONINTERP_FOUND) message(STATUS "Python interpreter NOT found - Python support disabled.") # message(STATUS "debian/ubuntu: install the python package.") set(ALL_PYTHON_FOUND FALSE) return() endif() # Numpy message(STATUS "[4/5] Numpy Module") find_package(Numpy) if (NOT NUMPY_FOUND) message(STATUS "Numpy NOT found - Python support disabled.") # message(STATUS "debian/ubuntu: install the python-numpy package.") set(ALL_PYTHON_FOUND FALSE) return() endif() # SIP message(STATUS "[5/5] SIP Module") find_package(SIP) if(NOT SIP_FOUND) message(STATUS "sip.h header NOT found - Python support disabled") # message(STATUS "debian/ubuntu: install the python-sip4-dev package.") set(ALL_PYTHON_FOUND FALSE) return() endif() # Everything was found, define ENABLE_PYTHON. This can be used in code: # # #ifdef ENABLE_PYTHON # ... # #endif add_definitions( -DENABLE_PYTHON ) # to be used in subdir CMakeLists.txt files set(ALL_PYTHON_FOUND TRUE) endif() avogadro-1.1.1/cmake/modules/AvoCPackOptions.cmake.in0000644000175000001440000000351512250371054021672 0ustar marcususers# This file is configured at cmake time, loaded at cpack time. # NSIS specific settings if(CPACK_GENERATOR MATCHES "NSIS") set(CPACK_NSIS_MUI_ICON "@CMAKE_SOURCE_DIR@/avogadro/src/icons\\\\avogadro.ico") # set(CPACK_PACKAGE_ICON "@CMAKE_SOURCE_DIR@/avogadro/src/icons\\\\avogadro.bmp") set(CPACK_NSIS_HELP_LINK "http:\\\\avogadro.openmolecules.net") set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\avogadro.openmolecules.net") set(CPACK_PACKAGE_EXECUTABLES "avogadro" "Avogadro") set(CPACK_CREATE_DESKTOP_LINKS "avogadro") SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\Avogadro.exe") SET(CPACK_NSIS_MENU_LINKS "http://avogadro.openmolecules.net/wiki/Avogadro_@CPACK_PACKAGE_VERSION@" "Release Notes" "http://avogadro.openmolecules.net/" "Avogadro Web Site") SET(CPACK_NSIS_MODIFY_PATH ON) # Associate Avogadro with some file extensions set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " WriteRegStr HKCR '.cml' '' 'CML' WriteRegStr HKCR 'CML' '' 'Chemical Markup Language' WriteRegStr HKCR 'CML\\shell' '' 'open' WriteRegStr HKCR 'CML\\DefaultIcon' '' '$INSTDIR\\bin\\avogadro.exe,0' WriteRegStr HKCR 'CML\\shell\\open\\command' '' '$INSTDIR\\bin\\avogadro.exe \"%1\"' WriteRegStr HKCR 'CML\\shell\\edit' '' 'Edit CML File With Avogadro' WriteRegStr HKCR 'CML\\shell\\edit\\command' '' '$INSTDIR\\bin\\avogadro.exe \"%1\"' System::Call \\ 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)' ") set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " DeleteRegKey HKCR '.cml' DeleteRegKey HKCR 'CML' ") endif(CPACK_GENERATOR MATCHES "NSIS") # New apple packaging stuff set(APPLE @APPLE@) if(APPLE) set(CPACK_PACKAGE_EXECUTABLES "avogadro" "Avogadro") set(CPACK_SET_DESTDIR TRUE) endif(APPLE) if("${CPACK_GENERATOR}" STREQUAL "PackageMaker") set(CPACK_PACKAGE_DEFAULT_LOCATION "/Applications") endif("${CPACK_GENERATOR}" STREQUAL "PackageMaker") avogadro-1.1.1/cmake/modules/AvoCPack.cmake0000644000175000001440000001641712250371054017716 0ustar marcususers# Set up CPack with the correct version, external libraries etc set (CPACK_PACKAGE_NAME "Avogadro") set (CPACK_PACKAGE_VERSION_MAJOR ${Avogadro_VERSION_MAJOR}) set (CPACK_PACKAGE_VERSION_MINOR ${Avogadro_VERSION_MINOR}) set (CPACK_PACKAGE_VERSION_PATCH ${Avogadro_VERSION_PATCH}) set (CPACK_PACKAGE_VERSION ${Avogadro_VERSION_MAJOR}.${Avogadro_VERSION_MINOR}.${Avogadro_VERSION_PATCH}) set (CPACK_PACKAGE_INSTALL_DIRECTORY "Avogadro") set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") set (CPACK_PACKAGE_EXECUTABLES "avogadro" "Avogadro") set (CPACK_CREATE_DESKTOP_LINKS "avogadro") if(WIN32) option(ENABLE_DEPRECATED_INSTALL_RULES "Should deprecated, Windows specific, install rules be enabled?" OFF) endif() if (WIN32 AND ENABLE_DEPRECATED_INSTALL_RULES) # Set the directories to defaults if not set ############################################## # Zlib # ############################################## find_file(zlib_DLL "zlib1.dll" PATHS ${CMAKE_PREFIX_PATH}/bin ${zlib_DIR} ) install(FILES ${zlib_DLL} DESTINATION bin) ############################################## # libxml2 # ############################################## find_path(libxml2_DIR "libxml-2.0.pc.in" PATHS "C:/src/libxml2" "C:/src/libxml2-2.7.3" "C:/src/libxml2-2-7-3" ) find_file(libxml2_DLL "libxml2.dll" PATHS "${libxml2_DIR}/win32/bin.msvc" "${libxml2_DIR}/bin" "${libxml2_DIR}/lib" ${CMAKE_PREFIX_PATH}/lib ) install(FILES ${libxml2_DLL} DESTINATION bin) ############################################## # OpenBabel # ############################################## find_path(openbabel_SRCDIR "openbabel-2.0.pc.in" PATHS "C:/src/openbabel" ) find_path(openbabel_BINDIR "openbabel-2.dll" PATHS "${CMAKE_PREFIX_PATH}/bin" "${openbabel_SRCDIR}/output/Release" "${openbabel_SRCDIR}/build/src/Release" "${openbabel_SRCDIR}/src/Release" "${openbabel_SRCDIR}/Release" "${openbabel_SRCDIR}" ) # Data files needed by OpenBabel if(openbabel_SRCDIR) file(GLOB openbabel_FILES "${openbabel_SRCDIR}/data/*.txt") install(FILES ${openbabel_FILES} DESTINATION bin) file(GLOB openbabel_FILES "${openbabel_SRCDIR}/data/*.par") install(FILES ${openbabel_FILES} DESTINATION bin) file(GLOB openbabel_FILES "${openbabel_SRCDIR}/data/*.prm") install(FILES ${openbabel_FILES} DESTINATION bin) file(GLOB openbabel_FILES "${openbabel_SRCDIR}/data/*.ff") install(FILES ${openbabel_FILES} DESTINATION bin) else() # Should be able to find them in the installed tree too file(GLOB openbabel_FILES "${openbabel_BINDIR}/data/*.txt") install(FILES ${openbabel_FILES} DESTINATION bin) file(GLOB openbabel_FILES "${openbabel_BINDIR}/data/*.par") install(FILES ${openbabel_FILES} DESTINATION bin) file(GLOB openbabel_FILES "${openbabel_BINDIR}/data/*.prm") install(FILES ${openbabel_FILES} DESTINATION bin) file(GLOB openbabel_FILES "${openbabel_BINDIR}/data/*.ff") install(FILES ${openbabel_FILES} DESTINATION bin) endif() set(openbabel_DLLs "${openbabel_BINDIR}/openbabel-2.dll" "${openbabel_BINDIR}/inchi.dll") install(FILES ${openbabel_DLLs} DESTINATION bin) file(GLOB openbabel_FORMATS "${openbabel_BINDIR}/*.obf") install(FILES ${openbabel_FORMATS} DESTINATION bin) ############################################## # Qt # ############################################## get_filename_component(QT_BIN_DIR ${QT_QMAKE_EXECUTABLE} PATH) find_path(qt_BINDIR "QtCore4.dll" PATH ${QT_BIN_DIR}) set(qt_DEPS "${qt_BINDIR}/QtCore4.dll" "${qt_BINDIR}/QtGui4.dll" "${qt_BINDIR}/QtOpenGL4.dll" "${qt_BINDIR}/QtNetwork4.dll") install(FILES ${qt_DEPS} DESTINATION bin) ############################################## # GLSL shaders (Optional) # ############################################## if(ENABLE_GLSL AND GLEW_FOUND) find_file(glew_DLL "glew32.dll" PATHS "C:/src/glew/bin" ) install(FILES ${glew_DLL} DESTINATION bin) endif() ############################################## # Python (Optional) # ############################################## if(ENABLE_PYTHON AND ALL_PYTHON_FOUND) # Python support - optionally enabled and installed # # python library # find_path(python_DIR "pyconfig.h.in" PATHS "C:/src/Python-2.6.2" "C:/src/Python-2.6.1" ) find_file(python_DLL "python26.dll" PATHS "${python_DIR}/Libs" "${python_DIR}/DLLs" "${python_DIR}/bin" "${python_DIR}/PCbuild" ) install(FILES ${python_DLL} DESTINATION bin) # # boost python # find_path(boost_DIR "boost.png" PATHS "C:/src/boost_1_38_0" "C:/src/boost_1_37_0" "C:/src/boost_1_36_0" ) find_file(boost_python_DLL "boost_python-vc90-mt-1_38.dll" PATHS "${boost_DIR}/lib/" "${boost_DIR}/bin/" ) install(FILES ${boost_python_DLL} DESTINATION bin) # lib/*: (includes all sip & numpy runtime files needed) file(GLOB python_lib_FILES "${python_DIR}/lib/*.py") install(FILES ${python_lib_FILES} DESTINATION bin/lib) # lib/encodings/*.py file(GLOB python_lib_encodings_FILES "${python_DIR}/lib/encodings/*.py") install(FILES ${python_lib_encodings_FILES} DESTINATION bin/lib/encodings) # # sip # set(python_lib_sip_FILES "${python_DIR}/lib/site-packages/sip.pyd" "${python_DIR}/lib/site-packages/sipconfig.py" ) install(FILES ${python_lib_sip_FILES} DESTINATION bin/lib/site-packages) # # numpy # install(DIRECTORY ${python_DIR}/lib/site-packages/numpy DESTINATION bin/lib/site-packages) # # PyQt4 # find_path(pyqt_DIR "pyqtconfig.py.in" PATHS "C:/src/PyQt-win-gpl-4.4.4" ) set(pyqt_DEPS "${pyqt_DIR}/__init__.py" "${pyqt_DIR}/Qt/Qt.pyd" "${pyqt_DIR}/QtCore/QtCore.pyd" "${pyqt_DIR}/QtGui/QtGui.pyd" "${pyqt_DIR}/QtOpenGL/QtOpenGL.pyd" "${pyqt_DIR}/QtCore/QtCore.pyd") install(FILES ${pyqt_DEPS} DESTINATION bin/lib/site-packages/PyQt4) # # Avogadro python module # install(FILES ${Avogadro_BINARY_DIR}/lib/_Avogadro.pyd DESTINATION bin/lib/site-packages) install(FILES ${Avogadro_SOURCE_DIR}/libavogadro/src/python/Avogadro.py DESTINATION bin/lib/site-packages) # # Avogadro plugin scripts # file(GLOB toolScripts "${Avogadro_SOURCE_DIR}/libavogadro/src/tools/python/*.py") install(FILES ${toolScripts} DESTINATION bin/toolScripts) file(GLOB engineScripts "${Avogadro_SOURCE_DIR}/libavogadro/src/engines/python/*.py") install(FILES ${engineScripts} DESTINATION bin/engineScripts) file(GLOB extensionScripts "${Avogadro_SOURCE_DIR}/libavogadro/src/extensions/python/*.py") install(FILES ${extensionScripts} DESTINATION bin/extensionScripts) endif() endif() if(APPLE) set(CMAKE_OSX_ARCHITECTURES "ppc;i386") endif(APPLE) configure_file("${CMAKE_MODULE_PATH}/AvoCPackOptions.cmake.in" "${CMAKE_BINARY_DIR}/AvoCPackOptions.cmake" @ONLY) set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/AvoCPackOptions.cmake") include(CPack) include(InstallRequiredSystemLibraries) avogadro-1.1.1/cmake/modules/MacroEnsureVersion.cmake0000644000175000001440000001173512250371054022056 0ustar marcususers# This file defines the following macros for developers to use in ensuring # that installed software is of the right version: # # MACRO_ENSURE_VERSION - test that a version number is greater than # or equal to some minimum # MACRO_ENSURE_VERSION_RANGE - test that a version number is greater than # or equal to some minimum and less than some # maximum # MACRO_ENSURE_VERSION2 - deprecated, do not use in new code # # MACRO_ENSURE_VERSION # This macro compares version numbers of the form "x.y.z" or "x.y" # MACRO_ENSURE_VERSION( FOO_MIN_VERSION FOO_VERSION_FOUND FOO_VERSION_OK) # will set FOO_VERSION_OK to true if FOO_VERSION_FOUND >= FOO_MIN_VERSION # Leading and trailing text is ok, e.g. # MACRO_ENSURE_VERSION( "2.5.31" "flex 2.5.4a" VERSION_OK) # which means 2.5.31 is required and "flex 2.5.4a" is what was found on the system # Copyright (c) 2006, David Faure, # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # MACRO_ENSURE_VERSION_RANGE # This macro ensures that a version number of the form # "x.y.z" or "x.y" falls within a range defined by # min_version <= found_version < max_version. # If this expression holds, FOO_VERSION_OK will be set TRUE # # Example: MACRO_ENSURE_VERSION_RANGE3( "0.1.0" ${FOOCODE_VERSION} "0.7.0" FOO_VERSION_OK ) # # This macro will break silently if any of x,y,z are greater than 100. # # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # NORMALIZE_VERSION # Helper macro to convert version numbers of the form "x.y.z" # to an integer equal to 10^4 * x + 10^2 * y + z # # This macro will break silently if any of x,y,z are greater than 100. # # Copyright (c) 2006, David Faure, # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # CHECK_RANGE_INCLUSIVE_LOWER # Helper macro to check whether x <= y < z # # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. MACRO(NORMALIZE_VERSION _requested_version _normalized_version) STRING(REGEX MATCH "[^0-9]*[0-9]+\\.[0-9]+\\.[0-9]+.*" _threePartMatch "${_requested_version}") if (_threePartMatch) # parse the parts of the version string STRING(REGEX REPLACE "[^0-9]*([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" _major_vers "${_requested_version}") STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" _minor_vers "${_requested_version}") STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" _patch_vers "${_requested_version}") else (_threePartMatch) STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+" "\\1" _major_vers "${_requested_version}") STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)" "\\1" _minor_vers "${_requested_version}") set(_patch_vers "0") endif (_threePartMatch) # compute an overall version number which can be compared at once MATH(EXPR ${_normalized_version} "${_major_vers}*10000 + ${_minor_vers}*100 + ${_patch_vers}") ENDMACRO(NORMALIZE_VERSION) MACRO(MACRO_CHECK_RANGE_INCLUSIVE_LOWER _lower_limit _value _upper_limit _ok) if (${_value} LESS ${_lower_limit}) set( ${_ok} FALSE ) elseif (${_value} EQUAL ${_lower_limit}) set( ${_ok} TRUE ) elseif (${_value} EQUAL ${_upper_limit}) set( ${_ok} FALSE ) elseif (${_value} GREATER ${_upper_limit}) set( ${_ok} FALSE ) else (${_value} LESS ${_lower_limit}) set( ${_ok} TRUE ) endif (${_value} LESS ${_lower_limit}) ENDMACRO(MACRO_CHECK_RANGE_INCLUSIVE_LOWER) MACRO(MACRO_ENSURE_VERSION requested_version found_version var_too_old) NORMALIZE_VERSION( ${requested_version} req_vers_num ) NORMALIZE_VERSION( ${found_version} found_vers_num ) if (found_vers_num LESS req_vers_num) set( ${var_too_old} FALSE ) else (found_vers_num LESS req_vers_num) set( ${var_too_old} TRUE ) endif (found_vers_num LESS req_vers_num) ENDMACRO(MACRO_ENSURE_VERSION) MACRO(MACRO_ENSURE_VERSION2 requested_version2 found_version2 var_too_old2) MACRO_ENSURE_VERSION( ${requested_version2} ${found_version2} ${var_too_old2}) ENDMACRO(MACRO_ENSURE_VERSION2) MACRO(MACRO_ENSURE_VERSION_RANGE min_version found_version max_version var_ok) NORMALIZE_VERSION( ${min_version} req_vers_num ) NORMALIZE_VERSION( ${found_version} found_vers_num ) NORMALIZE_VERSION( ${max_version} max_vers_num ) MACRO_CHECK_RANGE_INCLUSIVE_LOWER( ${req_vers_num} ${found_vers_num} ${max_vers_num} ${var_ok}) ENDMACRO(MACRO_ENSURE_VERSION_RANGE) avogadro-1.1.1/cmake/modules/FindOpenBabel2.cmake0000644000175000001440000000542112250371054020772 0ustar marcususers# - Try to find OpenBabel2 # Once done this will define # # OPENBABEL2_FOUND - system has OpenBabel2 # OPENBABEL2_INCLUDE_DIR - the OpenBabel2 include directory # OPENBABEL2_LIBRARIES - Link these to use OpenBabel2 # Copyright (c) 2006, 2007 Carsten Niehaus, # Copyright (C) 2008 Marcus D. Hanwell # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. include(MacroEnsureVersion) if(OPENBABEL2_INCLUDE_DIR AND OPENBABEL2_LIBRARIES AND OPENBABEL2_VERSION_MET) # in cache already set(OPENBABEL2_FOUND TRUE) else() if(NOT WIN32) # Use the newer PkgConfig stuff find_package(PkgConfig REQUIRED) pkg_check_modules(OPENBABEL2 openbabel-2.0>=2.3.0) # Maintain backwards compatibility with previous version of module if(OPENBABEL2_FOUND STREQUAL "1") set(OPENBABEL2_VERSION_MET TRUE) set(OPENBABEL2_INCLUDE_DIR ${OPENBABEL2_INCLUDE_DIRS}) endif() else(NOT WIN32) set(OPENBABEL2_VERSION_MET TRUE) endif() if(OPENBABEL2_VERSION_MET) if(WIN32) if(NOT OPENBABEL2_INCLUDE_DIR) find_path(OPENBABEL2_INCLUDE_DIR openbabel-2.0/openbabel/obconversion.h PATHS ${_obIncDir} ${GNUWIN32_DIR}/include $ENV{OPENBABEL2_INCLUDE_DIR} ) if(OPENBABEL2_INCLUDE_DIR) set(OPENBABEL2_INCLUDE_DIR ${OPENBABEL2_INCLUDE_DIR}/openbabel-2.0) endif(OPENBABEL2_INCLUDE_DIR) endif(NOT OPENBABEL2_INCLUDE_DIR) endif() find_library(OPENBABEL2_LIBRARIES NAMES openbabel openbabel-2 PATHS ${_obLinkDir} ${GNUWIN32_DIR}/lib $ENV{OPENBABEL2_LIBRARIES} ) endif() if(OPENBABEL2_INCLUDE_DIR AND OPENBABEL2_LIBRARIES AND OPENBABEL2_VERSION_MET) set(OPENBABEL2_FOUND TRUE) endif(OPENBABEL2_INCLUDE_DIR AND OPENBABEL2_LIBRARIES AND OPENBABEL2_VERSION_MET) if(OPENBABEL2_FOUND) if(NOT OpenBabel2_FIND_QUIETLY) message(STATUS "Found OpenBabel 2.3 or later: ${OPENBABEL2_LIBRARIES}") endif() else() if(OpenBabel2_FIND_REQUIRED) message(FATAL_ERROR "Could NOT find OpenBabel 2.3 or later ") endif() endif() mark_as_advanced(OPENBABEL2_INCLUDE_DIR OPENBABEL2_LIBRARIES) endif() # Search for Open Babel2 executable if(OPENBABEL2_EXECUTABLE) # in cache already set(OPENBABEL2_EXECUTABLE_FOUND TRUE) else() find_program(OPENBABEL2_EXECUTABLE NAMES babel PATHS [HKEY_CURRENT_USER\\SOFTWARE\\OpenBabel\ 2.3.0] $ENV{OPENBABEL2_EXECUTABLE} ) if(OPENBABEL2_EXECUTABLE) set(OPENBABEL2_EXECUTABLE_FOUND TRUE) endif(OPENBABEL2_EXECUTABLE) if(OPENBABEL2_EXECUTABLE_FOUND) message(STATUS "Found OpenBabel2 executable: ${OPENBABEL2_EXECUTABLE}") endif(OPENBABEL2_EXECUTABLE_FOUND) endif() avogadro-1.1.1/cmake/modules/FindEigen3.cmake0000644000175000001440000000566312250371054020203 0ustar marcususers# - Try to find Eigen3 lib # # This module supports requiring a minimum version, e.g. you can do # find_package(Eigen3 3.1.2) # to require version 3.1.2 or newer of Eigen3. # # Once done this will define # # EIGEN3_FOUND - system has eigen lib with correct version # EIGEN3_INCLUDE_DIR - the eigen include directory # EIGEN3_VERSION - eigen version # Copyright (c) 2006, 2007 Montel Laurent, # Copyright (c) 2008, 2009 Gael Guennebaud, # Copyright (c) 2009 Benoit Jacob # Redistribution and use is allowed according to the terms of the 2-clause BSD license. if(NOT Eigen3_FIND_VERSION) if(NOT Eigen3_FIND_VERSION_MAJOR) set(Eigen3_FIND_VERSION_MAJOR 2) endif(NOT Eigen3_FIND_VERSION_MAJOR) if(NOT Eigen3_FIND_VERSION_MINOR) set(Eigen3_FIND_VERSION_MINOR 91) endif(NOT Eigen3_FIND_VERSION_MINOR) if(NOT Eigen3_FIND_VERSION_PATCH) set(Eigen3_FIND_VERSION_PATCH 0) endif(NOT Eigen3_FIND_VERSION_PATCH) set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}") endif(NOT Eigen3_FIND_VERSION) macro(_eigen3_check_version) file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}") set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}") string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}") set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}") string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}") set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}") set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION}) if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) set(EIGEN3_VERSION_OK FALSE) else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) set(EIGEN3_VERSION_OK TRUE) endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) if(NOT EIGEN3_VERSION_OK) message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, " "but at least version ${Eigen3_FIND_VERSION} is required") endif(NOT EIGEN3_VERSION_OK) endmacro(_eigen3_check_version) if (EIGEN3_INCLUDE_DIR) # in cache already _eigen3_check_version() set(EIGEN3_FOUND ${EIGEN3_VERSION_OK}) else (EIGEN3_INCLUDE_DIR) find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library PATHS ${CMAKE_INSTALL_PREFIX}/include ${KDE4_INCLUDE_DIR} PATH_SUFFIXES eigen3 eigen ) if(EIGEN3_INCLUDE_DIR) _eigen3_check_version() endif(EIGEN3_INCLUDE_DIR) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) mark_as_advanced(EIGEN3_INCLUDE_DIR) endif(EIGEN3_INCLUDE_DIR) avogadro-1.1.1/cmake/modules/FindPythonLibs.cmake0000644000175000001440000001747212250371054021165 0ustar marcususers# - Find python libraries # This module finds if Python is installed and determines where the # include files and libraries are. It also determines what the name of # the library is. This code sets the following variables: # # PYTHONLIBS_FOUND - have the Python libs been found # PYTHON_LIBRARIES - path to the python library # PYTHON_INCLUDE_PATH - path to where Python.h is found (deprecated) # PYTHON_INCLUDE_DIRS - path to where Python.h is found # PYTHON_DEBUG_LIBRARIES - path to the debug library # Python_ADDITIONAL_VERSIONS - list of additional Python versions to search for #============================================================================= # Copyright 2001-2009 Kitware, Inc. # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) INCLUDE(CMakeFindFrameworks) # Search for the python framework on Apple. CMAKE_FIND_FRAMEWORKS(Python) # Set up the versions we know about, in the order we will search. Always add # the user supplied additional versions to the front. set(_Python_VERSIONS ${Python_ADDITIONAL_VERSIONS} 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0 1.6 1.5) FOREACH(_CURRENT_VERSION ${_Python_VERSIONS}) STRING(REPLACE "." "" _CURRENT_VERSION_NO_DOTS ${_CURRENT_VERSION}) IF(WIN32) FIND_LIBRARY(PYTHON_DEBUG_LIBRARY NAMES python${_CURRENT_VERSION_NO_DOTS}_d python PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs ) ENDIF(WIN32) FIND_LIBRARY(PYTHON_LIBRARY NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION} PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs # Avoid finding the .dll in the PATH. We want the .lib. NO_SYSTEM_ENVIRONMENT_PATH ) # Look for the static library in the Python config directory FIND_LIBRARY(PYTHON_LIBRARY NAMES python${_CURRENT_VERSION_NO_DOTS} python${_CURRENT_VERSION} # Avoid finding the .dll in the PATH. We want the .lib. NO_SYSTEM_ENVIRONMENT_PATH # This is where the static library is usually located PATH_SUFFIXES python${_CURRENT_VERSION}/config ) # For backward compatibility, honour value of PYTHON_INCLUDE_PATH, if # PYTHON_INCLUDE_DIR is not set. IF(DEFINED PYTHON_INCLUDE_PATH AND NOT DEFINED PYTHON_INCLUDE_DIR) SET(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_PATH}" CACHE PATH "Path to where Python.h is found" FORCE) ENDIF(DEFINED PYTHON_INCLUDE_PATH AND NOT DEFINED PYTHON_INCLUDE_DIR) SET(PYTHON_FRAMEWORK_INCLUDES) IF(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR) FOREACH(dir ${Python_FRAMEWORKS}) SET(PYTHON_FRAMEWORK_INCLUDES ${PYTHON_FRAMEWORK_INCLUDES} ${dir}/Versions/${_CURRENT_VERSION}/include/python${_CURRENT_VERSION}) ENDFOREACH(dir) ENDIF(Python_FRAMEWORKS AND NOT PYTHON_INCLUDE_DIR) FIND_PATH(PYTHON_INCLUDE_DIR NAMES Python.h PATHS ${PYTHON_FRAMEWORK_INCLUDES} [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include PATH_SUFFIXES python${_CURRENT_VERSION} ) # For backward compatibility, set PYTHON_INCLUDE_PATH, but make it internal. SET(PYTHON_INCLUDE_PATH "${PYTHON_INCLUDE_DIR}" CACHE INTERNAL "Path to where Python.h is found (deprecated)") ENDFOREACH(_CURRENT_VERSION) MARK_AS_ADVANCED( PYTHON_DEBUG_LIBRARY PYTHON_LIBRARY PYTHON_INCLUDE_DIR ) # We use PYTHON_INCLUDE_DIR, PYTHON_LIBRARY and PYTHON_DEBUG_LIBRARY for the # cache entries because they are meant to specify the location of a single # library. We now set the variables listed by the documentation for this # module. SET(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}") SET(PYTHON_LIBRARIES "${PYTHON_LIBRARY}") SET(PYTHON_DEBUG_LIBRARIES "${PYTHON_DEBUG_LIBRARY}") INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibs DEFAULT_MSG PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) # PYTHON_ADD_MODULE( src1 src2 ... srcN) is used to build modules for python. # PYTHON_WRITE_MODULES_HEADER() writes a header file you can include # in your sources to initialize the static python modules FUNCTION(PYTHON_ADD_MODULE _NAME ) GET_PROPERTY(_TARGET_SUPPORTS_SHARED_LIBS GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) OPTION(PYTHON_ENABLE_MODULE_${_NAME} "Add module ${_NAME}" TRUE) OPTION(PYTHON_MODULE_${_NAME}_BUILD_SHARED "Add module ${_NAME} shared" ${_TARGET_SUPPORTS_SHARED_LIBS}) # Mark these options as advanced MARK_AS_ADVANCED(PYTHON_ENABLE_MODULE_${_NAME} PYTHON_MODULE_${_NAME}_BUILD_SHARED) IF(PYTHON_ENABLE_MODULE_${_NAME}) IF(PYTHON_MODULE_${_NAME}_BUILD_SHARED) SET(PY_MODULE_TYPE MODULE) ELSE(PYTHON_MODULE_${_NAME}_BUILD_SHARED) SET(PY_MODULE_TYPE STATIC) SET_PROPERTY(GLOBAL APPEND PROPERTY PY_STATIC_MODULES_LIST ${_NAME}) ENDIF(PYTHON_MODULE_${_NAME}_BUILD_SHARED) SET_PROPERTY(GLOBAL APPEND PROPERTY PY_MODULES_LIST ${_NAME}) ADD_LIBRARY(${_NAME} ${PY_MODULE_TYPE} ${ARGN}) # TARGET_LINK_LIBRARIES(${_NAME} ${PYTHON_LIBRARIES}) IF(PYTHON_MODULE_${_NAME}_BUILD_SHARED) SET_TARGET_PROPERTIES(${_NAME} PROPERTIES PREFIX "${PYTHON_MODULE_PREFIX}") IF(WIN32 AND NOT CYGWIN) SET_TARGET_PROPERTIES(${_NAME} PROPERTIES SUFFIX ".pyd") ENDIF(WIN32 AND NOT CYGWIN) ENDIF(PYTHON_MODULE_${_NAME}_BUILD_SHARED) ENDIF(PYTHON_ENABLE_MODULE_${_NAME}) ENDFUNCTION(PYTHON_ADD_MODULE) FUNCTION(PYTHON_WRITE_MODULES_HEADER _filename) GET_PROPERTY(PY_STATIC_MODULES_LIST GLOBAL PROPERTY PY_STATIC_MODULES_LIST) GET_FILENAME_COMPONENT(_name "${_filename}" NAME) STRING(REPLACE "." "_" _name "${_name}") STRING(TOUPPER ${_name} _nameUpper) SET(_filename ${CMAKE_CURRENT_BINARY_DIR}/${_filename}) SET(_filenameTmp "${_filename}.in") FILE(WRITE ${_filenameTmp} "/*Created by cmake, do not edit, changes will be lost*/\n") FILE(APPEND ${_filenameTmp} "#ifndef ${_nameUpper} #define ${_nameUpper} #include #ifdef __cplusplus extern \"C\" { #endif /* __cplusplus */ ") FOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) FILE(APPEND ${_filenameTmp} "extern void init${PYTHON_MODULE_PREFIX}${_currentModule}(void);\n\n") ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) FILE(APPEND ${_filenameTmp} "#ifdef __cplusplus } #endif /* __cplusplus */ ") FOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) FILE(APPEND ${_filenameTmp} "int ${_name}_${_currentModule}(void) \n{\n static char name[]=\"${PYTHON_MODULE_PREFIX}${_currentModule}\"; return PyImport_AppendInittab(name, init${PYTHON_MODULE_PREFIX}${_currentModule});\n}\n\n") ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) FILE(APPEND ${_filenameTmp} "void ${_name}_LoadAllPythonModules(void)\n{\n") FOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) FILE(APPEND ${_filenameTmp} " ${_name}_${_currentModule}();\n") ENDFOREACH(_currentModule ${PY_STATIC_MODULES_LIST}) FILE(APPEND ${_filenameTmp} "}\n\n") FILE(APPEND ${_filenameTmp} "#ifndef EXCLUDE_LOAD_ALL_FUNCTION\nvoid CMakeLoadAllPythonModules(void)\n{\n ${_name}_LoadAllPythonModules();\n}\n#endif\n\n#endif\n") # with CONFIGURE_FILE() cmake complains that you may not use a file created using FILE(WRITE) as input file for CONFIGURE_FILE() EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${_filenameTmp}" "${_filename}" OUTPUT_QUIET ERROR_QUIET) ENDFUNCTION(PYTHON_WRITE_MODULES_HEADER) avogadro-1.1.1/cmake/modules/TestIfWeNeedFPermissive.cmake0000644000175000001440000000246112250371054022724 0ustar marcususersinclude (CheckCXXSourceCompiles) macro (TEST_IF_WE_NEED_FPERMISSIVE) SET(_TEST_IF_WE_NEED_FPERMISSIVE_SOURCE_CODE #This checks if we need -fpermissive to work around a problem with Boost/Python and GCC >= GCC 4.3.1 #See: http://gcc.gnu.org/gcc-4.3/porting_to.html #GCC by default no longer accepts code such as " template class auto_ptr {}; template struct counted_ptr { auto_ptr<_Tp> auto_ptr(); }; int main() {return 0;} " # # # ) CHECK_CXX_SOURCE_COMPILES("${_TEST_IF_WE_NEED_FPERMISSIVE_SOURCE_CODE}" COMPILES_WITHOUT_FPERMISSIVE) set (NEED_FPERMISSIVE NOT COMPILES_WITHOUT_FPERMISSIVE) endmacro (TEST_IF_WE_NEED_FPERMISSIVE) #but will issue the diagnostic # #error: declaration of 'auto_ptr<_Tp> counted_ptr<_Tp>::auto_ptr()' #error: changes meaning of 'auto_ptr' from 'class auto_ptr<_Tp>' # #The reference to struct auto_ptr needs to be qualified here, or the name of the member function changed to be unambiguous. # #template class auto_ptr {}; #template #struct counted_ptr #{ # ::auto_ptr<_Tp> auto_ptr(); #}; # #In addition, -fpermissive can be used as a temporary workaround to convert the error into a warning until the code is fixed. #Note that then in some case name lookup will not be standard conforming. avogadro-1.1.1/cmake/modules/FindGLEW.cmake0000644000175000001440000000316312250371054017620 0ustar marcususers# Taken from www.openlibraries.org/browser/trunk/FindGLEW.cmake - LGPL? # Taken on 1 December 2008, works well on Linux at least, Marcus. # # - Try to find GLEW # Once done this will define # # GLEW_FOUND - system has GLEW # GLEW_INCLUDE_DIR - the GLEW include directory # GLEW_LIBRARY_DIR - where the libraries are # GLEW_LIBRARY - Link these to use GLEW # IF (GLEW_INCLUDE_DIR) # Already in cache, be silent SET(GLEW_FIND_QUIETLY TRUE) ENDIF (GLEW_INCLUDE_DIR) if( WIN32 ) if( MSVC80 ) set( COMPILER_PATH "C:/Program\ Files/Microsoft\ Visual\ Studio\ 8/VC" ) endif( MSVC80 ) if( MSVC71 ) set( COMPILER_PATH "C:/Program\ Files/Microsoft\ Visual\ Studio\ .NET\ 2003/Vc7" ) endif( MSVC71 ) FIND_PATH( GLEW_INCLUDE_DIR gl/glew.h gl/wglew.h PATHS c:/glew/include ${COMPILER_PATH}/PlatformSDK/Include ) SET( GLEW_NAMES glew32 ) FIND_LIBRARY( GLEW_LIBRARY NAMES ${GLEW_NAMES} PATHS c:/glew/lib ${COMPILER_PATH}/PlatformSDK/Lib ) else( WIN32 ) FIND_PATH( GLEW_INCLUDE_DIR glew.h wglew.h NAMES gl/glew.h GL/glew.h PATHS /usr/local/include /opt/local/include /usr/include ) SET( GLEW_NAMES glew GLEW ) FIND_LIBRARY( GLEW_LIBRARY NAMES ${GLEW_NAMES} PATHS /usr/lib /usr/local/lib /opt/local/lib ) endif( WIN32 ) GET_FILENAME_COMPONENT( GLEW_LIBRARY_DIR ${GLEW_LIBRARY} PATH ) IF (GLEW_INCLUDE_DIR AND GLEW_LIBRARY) SET(GLEW_FOUND TRUE) ELSE (GLEW_INCLUDE_DIR AND GLEW_LIBRARY) SET( GLEW_FOUND FALSE ) SET( GLEW_LIBRARY_DIR ) ENDIF (GLEW_INCLUDE_DIR AND GLEW_LIBRARY) avogadro-1.1.1/cmake/modules/CTestCustom.cmake.in0000644000175000001440000000076012250371054021103 0ustar marcususerslist(APPEND CTEST_CUSTOM_WARNING_EXCEPTION ${CTEST_CUSTOM_WARNING_EXCEPTION} # "python" # Our Python bindings are too noisy to be useful right now # This one may need more attention - can eigen.cpp be improved? "libavogadro/src/python/eigen.cpp" # Lots of compiler warnings "libavogadro/gl2ps/gl2ps.c" "eigen2/Eigen" "C4305:" # Truncation from double to float "C4291:" # Eigen errors - no matching delete found ) list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE ".moc" "ui_*.h" ) avogadro-1.1.1/cmake/modules/FindEigen2.cmake0000644000175000001440000000543212250371054020174 0ustar marcususers# - Try to find Eigen2 lib # # This module supports requiring a minimum version, e.g. you can do # find_package(Eigen2 2.0.3) # to require version 2.0.3 to newer of Eigen2. # # Once done this will define # # EIGEN2_FOUND - system has eigen lib with correct version # EIGEN2_INCLUDE_DIR - the eigen include directory # EIGEN2_VERSION - eigen version # Copyright (c) 2006, 2007 Montel Laurent, # Copyright (c) 2008, 2009 Gael Guennebaud, # Redistribution and use is allowed according to the terms of the BSD license. if(NOT Eigen2_FIND_VERSION) if(NOT Eigen2_FIND_VERSION_MAJOR) set(Eigen2_FIND_VERSION_MAJOR 2) endif(NOT Eigen2_FIND_VERSION_MAJOR) if(NOT Eigen2_FIND_VERSION_MINOR) set(Eigen2_FIND_VERSION_MINOR 0) endif(NOT Eigen2_FIND_VERSION_MINOR) if(NOT Eigen2_FIND_VERSION_PATCH) set(Eigen2_FIND_VERSION_PATCH 0) endif(NOT Eigen2_FIND_VERSION_PATCH) set(Eigen2_FIND_VERSION "${Eigen2_FIND_VERSION_MAJOR}.${Eigen2_FIND_VERSION_MINOR}.${Eigen2_FIND_VERSION_PATCH}") endif(NOT Eigen2_FIND_VERSION) macro(_eigen2_check_version) file(READ "${EIGEN2_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen2_version_header) string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen2_world_version_match "${_eigen2_version_header}") set(EIGEN2_WORLD_VERSION "${CMAKE_MATCH_1}") string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen2_major_version_match "${_eigen2_version_header}") set(EIGEN2_MAJOR_VERSION "${CMAKE_MATCH_1}") string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen2_minor_version_match "${_eigen2_version_header}") set(EIGEN2_MINOR_VERSION "${CMAKE_MATCH_1}") set(EIGEN2_VERSION ${EIGEN2_WORLD_VERSION}.${EIGEN2_MAJOR_VERSION}.${EIGEN2_MINOR_VERSION}) if((${EIGEN2_WORLD_VERSION} NOTEQUAL 2) OR (${EIGEN2_MAJOR_VERSION} GREATER 10) OR (${EIGEN2_VERSION} VERSION_LESS ${Eigen2_FIND_VERSION})) set(EIGEN2_VERSION_OK FALSE) else() set(EIGEN2_VERSION_OK TRUE) endif() if(NOT EIGEN2_VERSION_OK) message(STATUS "Eigen2 version ${EIGEN2_VERSION} found in ${EIGEN2_INCLUDE_DIR}, " "but at least version ${Eigen2_FIND_VERSION} is required") endif(NOT EIGEN2_VERSION_OK) endmacro(_eigen2_check_version) if (EIGEN2_INCLUDE_DIR) # in cache already _eigen2_check_version() set(EIGEN2_FOUND ${EIGEN2_VERSION_OK}) else (EIGEN2_INCLUDE_DIR) find_path(EIGEN2_INCLUDE_DIR NAMES Eigen/Core PATHS ${INCLUDE_INSTALL_DIR} ${KDE4_INCLUDE_DIR} PATH_SUFFIXES eigen2 ) if(EIGEN2_INCLUDE_DIR) _eigen2_check_version() endif(EIGEN2_INCLUDE_DIR) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Eigen2 DEFAULT_MSG EIGEN2_INCLUDE_DIR EIGEN2_VERSION_OK) mark_as_advanced(EIGEN2_INCLUDE_DIR) endif(EIGEN2_INCLUDE_DIR) avogadro-1.1.1/cmake/modules/AvogadroConfigVersion.cmake.in0000644000175000001440000000113512250371054023121 0ustar marcususers# Avogadro CMake version file - http://avogadro.openmolecules.net/ set(PACKAGE_VERSION @Avogadro_VERSION_MAJOR@.@Avogadro_VERSION_MINOR@.@Avogadro_VERSION_PATCH@) if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_COMPATIBLE FALSE) else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") set(PACKAGE_VERSION_COMPATIBLE TRUE) if("${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif("${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") avogadro-1.1.1/cmake/modules/cmake_uninstall.cmake.in0000644000175000001440000000155512250371054022042 0ustar marcususersIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"${file}\"") IF(EXISTS "${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF("${rm_retval}" STREQUAL 0) ELSE("${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"") ENDIF("${rm_retval}" STREQUAL 0) ELSE(EXISTS "${file}") MESSAGE(STATUS "File \"${file}\" does not exist.") ENDIF(EXISTS "${file}") ENDFOREACH(file) avogadro-1.1.1/CTestConfig.cmake0000644000175000001440000000051512250371054015677 0ustar marcususersset(CTEST_PROJECT_NAME "Avogadro") set(CTEST_NIGHTLY_START_TIME "21:00:00 EST") set(CTEST_DROP_METHOD "http") set(CTEST_DROP_SITE "my.cdash.org") set(CTEST_DROP_LOCATION "/submit.php?project=Avogadro") set(CTEST_DROP_SITE_CDASH TRUE) set(CTEST_PROJECT_SUBPROJECTS avogadro engines tools extensions colors avogadro-app) avogadro-1.1.1/doc/0000755000175000001440000000000012250371171013271 5ustar marcususersavogadro-1.1.1/doc/generate_handbook.sh0000755000175000001440000000026712250371054017274 0ustar marcususers#/bin/sh echo "Generating PDF in the subdirectory 'pdf'" docbook2pdf -o pdf index.docbook echo "Generating HTML in the subdirectory 'html'" docbook2html --output html index.docbook avogadro-1.1.1/doc/avogadro.10000644000175000001440000000235212250371054015157 0ustar marcususers.Dd January 11, 2011 .Os "Avogadro" 1.1 .Dt avogadro 1 URM .Sh NAME .Nm avogadro .Nd "Advanced molecular editor" .Sh SYNOPSIS .Nm .Op Fl Fl erase-config .Ar file1 .Op file2 ... .Sh DESCRIPTION Avogadro is an advanced molecular editor designed for cross-platform use in computational chemistry, molecular modeling, bioinformatics, materials science, and related areas. It offers flexible rendering and a powerful plugin architecture. .Sh OPTIONS .Bl -tag -width flag .It Fl Fl erase-config Overwrite settings with default values for the current user .El .Sh EXAMPLES .Bl -tag -width flag .It Nm Ar file1 file2 Open chemical files \fIfile1\fR and \fIfile2\fR .El .Sh SEE ALSO .Xr avopkg 1 . .br For more information about Avogadro, see \%<\fBhttp://avogadro.openmolecules.net/\fR> .Pp Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. .Pp Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. avogadro-1.1.1/doc/avopkg.10000644000175000001440000000260212250371054014642 0ustar marcususers.Dd March 15, 2010 .Os "Avopkg" 1.0 .Dt avopkg 1 URM .Sh NAME .Nm avopkg .Nd "Avogadro Package Manager" .Sh SYNOPSIS .Nm .Op Fl info | Fl query | Fl pack | Fl f .Ar filename .br .Nm .Fl wizard Op package_name .Sh DESCRIPTION Avopkg is a command-line tool for easy packaging and installation of Avogadro plugins on Unix platforms .Sh OPTIONS .Bl -tag -width flag .It Fl pack Ar manifest Create package using manifest as package description file .It Ar filename Install plugin from chosen package "filename" .It Fl -f Ar filename Force installation of plugin, disregarding OS/CPU architecture, possible file overwrites, etc. .It Fl -wizard Op package_name Interactively create manifest for new package. Specifying package_name disables some interactivity of the wizard (e.g., for use in scripts). .It Fl -info Op filename Show information about package in file "filename" .It Fl -query Op package_name Show information about installed package "package_name" .El .Sh ERROR CODES .Bl -tag -width flag .It 1 Specified file is not a plugin .It 2 Manifest is missing in package .It 3 Trying to install Python plugin on Avogadro compiled without Python .It 4 OS mismatch .It 5 CPU architecture mismatch .It 6 Package overwrites existing file .It 255 Incorrect usage .El .Sh SEE ALSO .Xr avogadro 1 . For more information about Avogadro, see \%<\fBhttp://avogadro.openmolecules.net/\fR> .Sh AUTHOR Konstantin Tokarev avogadro-1.1.1/doc/figures/0000755000175000001440000000000012250371054014735 5ustar marcususersavogadro-1.1.1/doc/figures/screenshot1.png0000644000175000001440000015613112250371054017710 0ustar marcususersPNG  IHDR+zsRGBbKGD pHYs  tIME$ gB; IDATxuEӣrb$,t uY|qŲ-!H $@q;6>u>~{>$'gz=Gl{4˕p4Z5Z5/i9-9]VXe; نQhhh8KlOP9?~;EB6I5Z5Z-plbqw_'r\ӣ6rX$.oΥ7XYĥtc\&G^ڴ<ޞ':-ecf AWO)CԵC/ؖ-l[3GKS li5~~'qln;jΞ }HJ>SGStXc6N<~ "Q/`xJ )/-HAz)}4NiF>P,T$t}zG첅YeA2ɍXmHGߎM{؁A}w8\O|FΚi,O/ekg2jpNh>!neq (r..[*{:mFsdC:=ν+esa:Cy9j0y C/N爽Fث3b7Am!eC|4U;ي%fӿO  `lwV'-ɕ)2v[P@}3eilVD.ߍ, ƈZ18x؍9jXbضE٫b-A\AXV%(%EF _.ېΎ?U2Ŷ@zQ]@ZBP,{Dlbmە˞!;f[! Xԓ}`Y{R"CUBX8X|IH]X&kߖ nXыH@4̀!"<l+%bdF?Q<+ Q0/</z 낡5<~?Wk>>y<>"+fW ߨ'331 vSBI-^cp<@ZƎ%ߙ4tQ"8^s/,S!hv/ -$X\%gzR̤%ݔ#< H?y0$gMf2yKY{烰z" r~RJkD9}_|'`Mh^_(=ww]֗ޟi0D>}'zNʼnod"D)3`'..ۧfxϹ7-|8eW?7ݙhڱJ8mgqAaظy휍E!t<8O]uom>Ynu_.^fb Ⱦt)p;Ws1/r=鮬ęÜ&8?:n=_=[M2gɼzQ( Χ_MƀS"cT:J\wݜyO9lL^yvغ_G܌ObqضLZ)\=/ ngx;˵{)gO_eyWs ;^~E^'ny)nrE+#i -j{ѫ9|?Y{[lp\;9fG!4X6}9|ؼ?+p}OvO{߸Ak؜9_Yӯ{Ow nejDe,Āa2|p{Ng>inpN;v_¤SoDRƣS9b|7h,W{w=0?iqp5~8XJev\ǭU=ƟWrף&3pm- m[% bwRqZާH6_Uvyg> ]{K?b EZh?l5fXr{n H&]ʥ{l7 Fk_Dm^G}#ᦌj'ت)/fxvZ[Nvh(-qLu:SUބCN9`6BZ4 ul5؉x~1[zCxgz'[l;{ E;o1#(Tu/_9mR@'h׎@lǰUbaeTY5uƘ(.Xn*{?Z~FsC;~SנN?_Ihc%B-mPi7rOoJ{ռzx؄F]յZ ʟBFfs'psQ;Λk! 1"n{r21+fdY@GB L2ɛ8CK93f}\ƛäZ.M3/g1Q\xi8ym8 ץ ݮ9WkI ɗ-|ҽ*\|"J4@xJxcZv$>t/2~f]O.Ov-3 YtdĶَ;/e䖼7 louhq [}8^ޫ>,A9JÅ\zeXF@[Xm} ;{p=..aZ.\ywV~"G+G5wzPNr4@>qݯkۜٷdAC#K6_eNe 9ϸOqguGIǥ} Mn3Kc|B{+n{!o,~zn}~ÐC6f>?|_,o VV6reP lǠU0|a)Zn RU_Qo_ڿ2pgeֱ~JBy/g޷_{T#w}vokɐ~b:cG8}?=O*Voo㯏0Ɣ0M&BK,^RJ_1[~+G6B>e :;:x'b9zvm5bY╊D#dBiBчw3ȧ{hӟ+(cL )CDX^lD"+d(GD.ٞl7J1_ ` -;n'Dz^sM~ q( ēI(ArI,zz8G %A&v품E(r|$9; r#R Wb= \'<| 'bS,*}W-J)qBfrll7W1g\^yu"\te,_A̱ȕ<$|A` 8xUQ3k%n,cU|7p̈́ki;H9 P"W(XqpNVXm0PgYxHCpF`z Ev (w[&BV-}"nT \*7 \%Wx$h/Y3aeP;EZ* RL> –e/X5n%s9/˚0 Fj($Nmutc)H(BA^8 Y Ք@N{ h;|Xv]R$ԭ9۶b,^[ 8KNQ7BǓ+.UjjH{q~N(5x0 !A8'à (ci?ӂGȤgQax5L 뷉jB&zmgCV֞Ug/4)=]b"l¢5-k;^ŧOʲ1BAyjG SzX,&I|>@piHDȦ8q#}5VN$Z G(/UGnoe!w>py88H)) XPfԨ͛Z0YYujeT4QR{8,]пVד$@z^%:CREߚ ߹l'vQQj j)c<( FԙD`>j"ң({Gax:2JQYc?ԮϽ96WzmUeV;W`NdYK\p!hxqjd6ȂrX Xb1~n|?|qa߻CHE.Y,'L8w_a_0e/uީ>@[*X=\7Œ3)KIıe %Jx2|岂eQv6ԕ*}P[a?XhpU'ȶmO>3E)Ÿǰ5d3UF^mJ_R랬m:a"j$vGbP%nƐH˱/hם@:uA9SAM UjRDe5Ezm I%v b\]%F芗 &U*H.x4V}hWB"F@h ๪e9Js&MRrhxUpN>fB]yR[&@(/#HUn&TQR9+0cO|7{?_H<|=m/O׍ԱUMԿrhV}&[VWy|lǺkᦇcfьf4cߔk ᲋&U<ꖞ:q4ew ̓q_Z[JIuxa3o9GyOiI=/վl*~ɺSn %R=}ˊfz:9%r =m:ӿfz&p}Tp;R"vB]UJ}:pg 5Qg_u@ c>QCg?Z JS<׏Ppេ+B"!LT'TW}TeM",Ú@_ͿB玠XXT',nI_׸ IDATXXtB  )˚J 02pKkK+}3elۮH>)I6'p-(-4$T@;F"Mijh΋?س3lpb#Vc?ਅ$ǓlWD];'FhjMMޑ +XLBL /[I:y<7b)"JqmƷ/7\IpFlT&'u Ǐ}YLh*/<pNWweN8vq{x$ 'qhm&%v4F?,q7ȰR &*4#U%y®k3wŎ.ŸT_~4s`"坈?P,xUm&8Mɘ~n(O RXKnU.5%F^"a({BV*%UWb-$. Zۺ1$ 3PaCkH*뻾fT^*P:uGnUeB, QsOpߋRsM&ҰdC }}'D0 C[xz.TY"rYguX}t.[mjx;ɝ(n4 Rsr@ZfbO' s!ޖ 1x&}>ʄ8qy~=_0/ΖLd68xsb.n4&qcqlX ȠGʞ$ۓŎ8\ǃpi-Ohi3M'F63yǢb1ۍU-1ΚJƳq]Mp"DasmH.xzaNRǸ}׿5 fɤ*0zz<1W)7Ǹ#y9H"D#N,'KKDvp,\eqʵpL&D,x|6^%e+(ΜZǟSOщa}`I'] \rb\}́<+=$ \ƉDq".%K4#Oxa8 #* *ٰw~(.ځ&Gq( e7BEE; '=56Rc"ĥRs *!8I@7 WQRnH Vfh+?+%SAUPFoXN ~BiFǵ%zܭNl)ڃ { h J_jeE>P⑸fI)i[}; /JȝLfDgͥI>-G#'D?S`[ A)~Vȣ/kd/?6[KSBp pOb=FQKiŶpy,vi~o%Ml2XJ"ESa?u\B{]q7E0Ww禧O6}*K/- q=i.=F8ix\{X^W2*-OrԺ`=>k{dO'd1Q;Kɫo82^QD;k_d%e}x2? <v=e)[$'c؋}x}ߞ<;sߵ/pEPw6J3#J#6j,%!)kY1TPRL ?,D̷D a;=Nkh1պ +O2NZHw?AQCdHI?RNitԵ.J4  u I<(WIŒeI.K.¿ʑg6CmFڑ;oJxP%k E 3[0J%?1G<3̚4gYTaP bgm̛m/<4I.ny+Oľc2@#yxtaNR,˗U"MKyL m\: -7).qVнǧcws[ְYSD'ɍ807kY+>dԦ6u{]qvߎ!sR[ B\\:Iӷ;{Kn'SL&FXU?m|p]᎜M r^cvt,ѿ+/9o8dݡ\c<تl?n-Fm c*@I(E/6|ͅPC"j$1$hhn%jdG8M~vO?[X宋gСJM'sf}N-'wsW}5E+|,מw.~ͭm,y%yo9k= ӧo;`ӯOj6nGr,=ޤiSHi19t8 g0 婤b.xXL:N<:ڇn.Cru @}tTka>0_$ iD˵,ĺPd"<0?tД]8h õ.<7H:Zp_JB1ɰw2;)PHue $eL 0|.,۪ ꢅp18N)̆6 _ȇD/& BhƎ TkJ|b3j^F?ʛs>fI|yYd2ҋs%N>j y2M),::'"LkΣ5ݝƉ%g2ē R>rw>N[E.+O.["ɐfx &>OyL_GSK}p39r%Aks\&Kr9,7I* y"A ĚX2ݙ"1עPGxxRRuP*7-&2K<<,qu1d..N^~CP,(XJ jMc& Ik R4=XBJT֟XyaMw=KG~B@T FJLn>aZܲȧ䤁~1IX{$=%۝氍l=l+ceAжIwg+BP,*RJe,KH: aQ9iIlf s+=-[NgG ll6OOO\&K'OT0?rWX£,+ Y:;(lw υ|4إ>/sߜSOND Y}AH W\y7S>…C+++d*ԑ.l y$|e 2 HE@rYrrio>K"@e妛3߳mA$BŗXt  9 UPmWe[tgցX ϛ4 :01$T`/tunP ?/I\Ӳ+0l}E|c&I-<) ĢQ<xbfΙ5ɫ& X,xxb7“ EVtd`.d!˷sA%kt;A@_a$)!@^+!2G6RY}aYeT,*z.48 jpQ!~YwyvG οlwxb?(6b4s_ILPo֚Jk & w^Dx-$$حI~F]>_eu:H+1(wQFM ^H Y|X08 HtԲ NɀjT77QJ6"5fR0SJběPjauQiB3:j0`RLB;X Euk.kS^ɒ q(mNs&s@JA"TiA2^̯~A@ЍS܈CemJF#`ӕ/Ō AZa/ :nHMdW;}YPf!H!kJ E\"|%ˌqְp [ ϙ9熳Ai5 ~rw.*DJ;xBc B` 8D5kT*H?,M?&XH#dUAzFpKs@=*kJeT,mG-өs+ S -d#B,BvдsaUH-l8}0Qu\K=>ЬLI"zOM6] ?r.pqFPJ. a"Au 4 I(]I{1LDЗzFC݂Q`Ad BCPH0]ݟaٕ2T?J`aIЪz:g|۶zU N7VkA+#=FkF&8ZPʲqbhcd?]dd*ѫ+MT->|0v",/[mۍbhQjN&D+ۜܕ$I-q:IqRMq͏ݝx! ĵjh WdJhRE5Q>zO0F#vbYEp$F@Am*E. ®+!Vija*N `+֎3yV*})8C[bHnJq63^ ш%jhf`?W* Rk!LO+/Ԛ/A x GqK-] R\viT;~~ ɦ9\^xtve%6d7"<ۥNoIԒ@Jg D.6V8 hK==U"~xTl7QHVRy T*i°aY58Ls>TK np7kISK+7Gr^$\bdPpU=MϮ6 9'YB fS1CK{kFIX&rMA#,CP):ļߠBc_# ͷ8 `=Bj5zR !شJ&hD%YVԪgx+bQh*^z. O]1O ipjuMua$۱Ïӱۓ,uO\p6- śnu/}9쩿q%wsֱ[?|s؏[_~}=Qb.edz|= O$ Lt:aE-VV6v d%h$$a7.Z$@ \F& @Jk+G&4 ꅎ"˻y5W^nOs*{CWg'[n7/:O8׵17 8oEq#P`2h U5t s^}vX5ccPu*G-l`~K/ʍ fE0N´"le|$ 8Đý*TubTYG#5M oS:"5QkR8y,Y1P4%pRJ9":S\֭>/ hSQPwIYep1p|-x '~5݇5[ *vaH4‚ջ\V_iL3ܒd'A67z JMkU ҅05i l!CJ6ke>5* -( S %5,Yjjq9~8ضOu9?rܑL4.&Xogp¿ɔx7nrIAE'>jўPRj{)u-+[(uhjBM(S!ZgXjF*wQ:*o))91fn;`y~ fyFiB/T׏R Q0"WakKCu΍TՋ!k3"A&XwF/"f0"@oȖxe-ܗ=}ѡa.n.ȦWymuۻl=~on0v]|2"}l{gd7&ނwޞBCj8xܛֈ9MݲR$*gMة(HǚkF"kTjnPItMN'W rL"eO2`@~q.9g|hbK.8>? N,Z8y葧p#yl$mV-N#2%B{C`T6J!5d'5EB}ցLɎZXHi۫ڳᓒIҀ]xn_\]$OTy^Va {Sn7WI'e CiE[&4$TX/q/,ًI_dpiV4PJKVsO6+Y,$d;Ӥtuehj.@L'3]%!ΐSJ 7^v?e O IDAT\zE4OٓՂ1VEpJ89d=A =\2z=I#@SEyP}Re5|BDy>b5-_XXu[Ggu y>~-=u< ,9@5",'&WvScf`hu!.O:X@k!aQkHx~MrY0_o1|1~"G]!/<|)ٜoԵx'8UO H#J >b5jȨ֜͂`2Aբ -IHFv z [Pߧ !xFyUmJ)}!0ACH3х*u2! R#U h< k,*^X/Z¨#:!P/q{DXE>E Ͱ\V>KX6^' 仳WtW\ ,oGVFbׅF+ djjAE\ "_B]ePf~J1εq!(tt`АaX`$IУƱmJw"l6CB@NrǴ{dSsc9s\y,ƳBV]{*f2g.W>`vDri"oɉңhPjt@%ƭLV"Tff%fA٠d5mۨR%!04WN 1e*Z;RCi>7> [ HEIW-ӈ)ʡ1k%vF1 {$]"$D9j0+x%!$"8ÏCUyod{*I`gG3&Rg~h5Ctmzb;"Hwp/CN@%B 0;X-'E!L&c+l;D7BFj6?x ܭ|/͙l_+ֈ~̲F*p,ko_{ o w]=Ůk $ߕ%S$EeP-z~uſ(TPBnVRQPV0<ƞ=ѻ#MYS(&JfpIhujUTM. mT&zt[Ȱ 92Jek]#r:5.H4HtDZz)Sh¨bZYUP*T8U!Z0 ^bJCTbS̽qH5'% u4V`6˲5(ӱڛ۷ G\}:(r}=L'>O+ v@.Bl~0n KwȪxerv'OGKoN%YE aV2RV\/![ VANIS7۫՞Pk2(zh@"R(-.؛2BIBw%d rH MWkB,&7`fJ8JuG57QL@ ) I&jFe 05%0 X X5}֧ {_䮧f`[*%N$BP'6/=Ѓ3[9֍+~X`ɌtU sҒ`EGŠВTʖ ,ٙ'ɔlRT,ͩ(ya Ě$l(Jd F<3x2yJ @^4Uh: Fc ^4"_Xv]&T9nRAaj^0 4֗@2+2j3Zi[Q^N(֟,˰J!{1Qͺ!#0hԚSF\ } AViTy} $JHTfuV/,DHlaԓzb1,Ʋ,>Mo"ʘ B8ݱ--NӿEX6hnigiT[Hĩ*){U)E= EXvVwIe84Fy$ } K/^K0w<\a hzmw^{-,+m™ƞ$[Ny8e΢o2]O!wipmaˏQ(ȗqY߳jh[|`6o/^t%JVXO^~%.I K<*N8L4?ܿ{Ǝ*o{~ܶk8dƌY,XM>'r٤p\WMTƺ0 +ևvḂܛSN; >c ǚEo$lʫMn9W+]Nkl y?]?zOm< 6&gezy37ߙ./AJ/0\qX7xzdshN$_±Ĝ},Ϭ pt Fdj=Ha]m44 "l5-|'y( OFy2vӊۂ]a<&Th HԸ!ksl`3w8j۩VT*A]!$.nO=6GL.M3u֣2Z/g}?VFYjkz"}ܜ-foo 1wΛ9X\am7dtXq޳z5 ۄQaDn>wzu=J0Փ-3{2xNxݤ+YIzK xrk~vg0Z-[ȵGq6y77]'tT66gtp iX1e;_lb&yyz{o12<±>vlpy3k7U}]5viXc #m,k^j e88(ӌZ\4 oEfo]"cGlonR  'J<nu|٬$ƪ(KJG: heʤt9䐃Jec6A')K4;f*AQix)4+V핑4ʣoyhӒ֎Y@*NUIB;ho'pP~K`:Bij~!5JxT܇X2aWzE2E^b,YaZ󉺺֎cgV!]CCl")˔-5Sq0n@'a%A[[jY;yal kBS^YѮ_qIBF,5I}y5442C v"}|pV'lA΄5&L)Q)sm2 5y}خ 2UK$ydNްP,*gC""WOH("5(Ew<2oA۪&բӥ1JR9劺KWj;TXLq@Qǥ$D!6a{MKAOI"z*JpnWy:> ,y Zd z!=|W XU+ Wn7PwB%ײ Je筰*ºo n[$a jE$̜H֕PiR$,NaU:괂(%xQ5*B*tA6[2&*d#kLSjh#lu BШViT7[ #`PIO-ڑsm.h- a܈aȠQIQdLGB",!.xSRdt]T"4Nˤ-vyES IʈT:wUub.ݫ같HD'JD ̡91d&ĨD.(|u%\P=p1?  Z'o- ] %~ ~J)fXCCC#A;)p k<*SmeBR%*kI%qHޝaUJN kIJejc2H,'ZkZk!\V)oS9'H.Te&&*8F4/L(B O#X:J?zL'ERަ?r)由e Zѱqe1 IDATHYk"SiL1q"iajhhhe.$ <0V.W=DZjm( `y%2KCC?+j.^!0R*lZhhheWMuaI)Yzh-e#!gxc k o 4 aIO o; yX>Mӛz6ãvww_iBF +^-~b!/p] iv/0sy`kuV{3ȵ_Kk#gзx)zoFθ5pAyzC:o+ǹ I#!bENجy/1NstpefZ1 ʬ^AnBn`geoȑ}ha OӳOī|Q?.'_'Upgdik+ǜȒןas  si3<s+c) M}9s[^U9#bD{*st Gty$j'R<( }Sr,[u] b+\+.CCCC#)o3c !@rpΕpmWqfzx>G'(|o Ko. lѼ[q_cN7#9 ;2Yo +ꬫ߰:kffڐY Ù$=,IGEƎI{i}B"lX"I1mӊ]tM_C&La|=n{2VA?v. 1*FѤ^3ǞA9Iۼ׫Ys]/H`Hϩ2c ^vܔu X 8&'ٓG)YYcwx`Z6WP (Nn%img-d89ج8W4G ۼz S_44448qa&B@Tbv Z 3SR*0]46i.a MYƶ-+!0FM6Z!Cx*$i˗;_]Ìz?5Y`ZtTo_pJly4 Aწ\֏z1Mraj\XraҸ"{[Fxm'O`Hðp.݅nC$mp]Q$'%US`3-8 CnS(t5V0F&[tjU+qU\(jN`hG\ Wxc̚5nviIXR ہXM?G,^8|"$kSm:Zj=er#Y9̫o.2:Jn#ݠϏ4/HK_؎CZVc7mMk##$uexW}w3 )5444!,f}>H>oU{u]vaw @5444m@llb!F+[+g^U" S"dJ *l{zaW? h$H!ӮcUVٰ?IGJ3>aE2h7ځ8_ӿFY]*mNZBihvALjߥPȐJiy+}HF4 9:Şi?_y2F(ߧneMB$t939(L{=^>DR*[\w9Tf+Fmož/z^r?) Q~G9V-++79҂,VKE]g6.5q.=r>\z͟kkx Q53Ipqj?mٳcӊ*֎]D;*HҰGdnz#sQi :/_>2zYaօ,8ixgPz!]FKI(aoJݒ|/ ke*M>cٵ8o_=vǃ5{]F]+] `ضr71̪>yzz=&uuQXMRAX00Jp7[+~ qXC龮6nQ B|) v[Z!Sh!sfҥ1+L+cx d(CңPs}{bm`dRN2{ y%t7x;<9}M֟%xeXꋼolȻ<\Yffы/ֆkbX+k`w`õgNW]3d֬dywdF/$@ [8sy[`?+SYWַ ϶C,"Qf%T+"Z=wc'n?k iF"nQ. dadhra CD4ʅd8ele=:z %t sa˴LE 1Lvq 3 p]!]Ӳqm|YVu0LKhu'iHabXy/xwFKl&49M2\4@ y*_"K%JUq*nq%>ZKbyJM SMe544:(e03rO6j K0PP l}g=f-RV Dqit&LN:+mv} Y%3Kv`<&յ"hm؉Y]JPR-"UCnEqE҃3l;i"*dY'%d3etʉ!KX afw+KH⍪9-V>K<S607$2+4m ҋ! rI בBBh!xr0Ns"y<`\-0ˡѺÍ >ɗD7#a{``>w^FZey,^`pŷB{\Nϰd;[4 BZ/mJҁYpT!cguPk'sʜQ{gdF_G4Oh`ۍk|JA@將Y̮?92~) Ǎg88i<֘6-܊^xU#5z[<`!S4h., `5)=^[p9^Q8"W9&G69ۍc?;qc_JA؞􋯲Y>Xuϡ`Mf|k@4442 h5ԅv%Mz0sTVh###tg*,LCCC#+MIRV;²L-Um Rz.M ϜDCCC#SudBS=_ZRbWHp@Z.TnZY4o1Νv?1Ʊfɟ\ʰ(2>h )Qs:"-z X '2I*RPxwD46r}F[0J2vO21]R$z5;>2'$ڧW9k u9H4}"? ya#UuP 5"惯B?o*McUZ4Y*`\4xO/Qթ"]8ҟP2BW v a\~E("ϟjqa aJ[. @*D-d<0-Qi|KG%IJZ=֥"\A!#_,V!},@Q 9 RjgV.(+%jE"3+JʊuLHe)JE*tFV'"aYh ^t0.5粰Ţ~Kxx/*].yrOrAwwR̗)aHID*.+{k)aS`Y8wprtu*A Vm,#GOO K@PUX*]!<==%rfM/JtwRb̚^Wœݍ](ϙ2 2=y/w܊UDXu73 >.yޑo/abmg ~nxS+nJ?R]se{号ϹUo/+.pWZx;' zgMo g `8}xW W ͲEolNbR6a/C|搣ycg|,k F ͏μ e}O=Kś/&W \~ KKN4D?q W(HQ>UX; mhhht@4*6lpNv27ڃ7`xuݿe~.z?r(ow~;__o%oj8vfKi~]Z+ wѷAV\~r#zFo[ЪQAF˫݆jp=]œ5kɼ;#u\y'xqi"fq{k/Fl>lhVF6o7`6+W5m_n׸D{;@.U!#L$dGi1Nk$NhYfgIJrx7ܐ^|'w ҷr!dY뀑F ^Pٴ^W(Xl0rerVw(ML]!<^JXqѷ_JiTas%{J2T |Du/UK%-HVK9A魍"? Y> X5TZ#A)x|JYJ+ JaBDv!buI (F"S7~R+ՀPQ)/Ơ)(:WCC3LTeEqBDviDl'W2I\#N!ɘKF-6E9;0 62HPAFI&(2aE"㉈ +E$@. V9.K=H[ DD"2H (!AفKE=v)0ɡծGږ+O$H. $bIn% [D2tm)kɄ|DunFFG"5" a "EJZ@B  #"N$vmKG%>T",~!\V*1R:XяE*o3$ЂKamFB" NS4",ZJ7jhhhjT2 ]%L)1uJ ݕP8"ƒ%ELTs%S=<JaQhbLZf '6DьI(tʏW'؂Х 1JF7"|[P~lH~BBϜPXʄ#e ){q ({+P:KCC#Vm乜w IDAT1Wr [~ l&/WĩR>T,sw_>+riy 9*KeZ1g`!|^=-߾[2cf7J9Nmf;O/K߾Uot}e3ƋJ"kgL wj\F{%"Yϑhe5WZ"H5444ƊHťyXXz9!.)R^b鋙'9f3̧es+5k|r>ɣ1R^w+)\{#ZTgrCwϴY3}mY5"k>V-gwΤY[LbWP?'sOnf}:Hyk4lێ%S"֛C JZ I7_V""N1WfFP=OĬzT&B544ҼS*s:|33O&YLvޜ7pG+Qm /'+.WL6QixK|8F O?s?O%={| N:y>IE5#g>2Y_g>:)m/| vaWo/q[ouM.|?!c!#=8Jjv .#"Ѣ*5"DzJuJ$Ketj?oi%rrKE Ӌx ]bxBׄ.,v1e/ԪxQd@ 'uQkHZrWa71V AooKU Wix%KV:PwM&Olѥ)``(n=PkBc|N/hhaڌ&9D:"ZA%zxN-j6D>W+E RLWaM/,QS|\XFH1/\X.,\XaZYnG+5 à6R.հ`Ŋi02TkӃ@ޗ煕+Jk9PeD@ W7K)8boLh[ॵ]*MvD:ID@FfF?H5^+ZO;WY)Cuit_9|u8{nZbR?~}T;{MjMldt; ,y/ǠWΝQ;)RRUXwkqPr9rV?ס \/d;豄h+X׍W@d NHb,0G9W ˖,aŻF4444Z> DJi9;K`zZ~U^T҉[ccds1̺xXoY V?*G:)!R+2]/뢊 4Y]5.~4"MDž}'"k>q6 f5ra 6- buLҝ |Y &ˊR 癦$:G:㮧NBY,7U|YNZ Q!xTQnc&: NJ"+cknXi?rees]Tc)nu-9gYxR&FJ+>Lhhغ=e?^dͷqDUDVCC#m=/GA~vx8\uSXp;WWmOpӹs>Y@֣` ss gB@䠜o=q3SηO=mmdqc^vfTR[ O@ZrDQ1NȌi{օe{i wU+.;]I B:.#up`o~ 60j:7\w==yI6(+9 1fqه>W`2K'~_=?.gqλ!]{ܵ~~]n|v:Ǽqh1gx;n>TȎJ](dcl5peDG'Ohhht2@2k;~봇,:6t#?ރ71ۖ \Ƃ7fRൎu]麔J' yypqn<84Eح,Co22Z2Z崳.е#8S000N+qOrevOϽR$x4G9G3 Wo:8q[!j4oc]CCC2,_4v,qzr d<۝;'\#4,7ֳtS\#O>6guqYw4BwGG #Cuǯ`auw>Eg|nu0Ƙ/ Rhx!V \]&THa:g_&˗QeR}=v%Vx)Ӗ "vT|dB.U4(vqwzPc7YEU>ߔZc}.t0juhDCCcu\X~&^hu*a* BJ(F3544VG7T*U6b{nDR繼o `X46bK1j)_{83Uz@Z=UyDUrDvT  Zҹ< 2r~\ "9Av5X㝂cKs|{)[#YDk 02AV\R@&e4XmSty$ ַ±R)S88"ZE֢Ui|d~_kΧI+vvDX!Tؼede@JQvʚ߷t r 񟌱 )2E#"~$.i0ҪeLY26x"] "j7B Bέi%~o7oiFB  f7XD~`  ĉ1$1LbI !6ef4뛷:[Fc̛nݪ:=RZe:  in*d!aqR1'nr A*"& $C~h~ǹ](m2 Pu. xzU]I+qP2L3sٵY$5q1܉{F=&pH P UƅKbb쳤i^rX. $pAK(?HL6wNa94ܠɫEDi_}saT Aɀdh*ZAFBR= ;蓻KP(6?^ wC6J75}G~*򔷓@Xrud{g 1% CXZzYr%YFQ9g5T.7p{(ҵgv0$*r3 zHɽSj@A0W A!,.t(lJISVbJ*Z2Hh(H-7lb&"WﰎX>(݃ _*vcCK,lz_ȲոvY\4 vh3亁a~W.Vpc`eQ[5=aW$> A$l HD])lsva׮}״a %H D ̌臈診(ՔGqefY5SO;i V$H CɩO=.RCnX]09~)9E N5JM!LNPfjA€7q#g<"!py$E" /ϢC$ l{jr:1m dGT>o݋W= YFPEx )皽ѽѣȨY;ʹ XdKmvJN(\44uD!=&6d٥zhc(_&8\EŹ^{{ 䗱bJu^k1Rad iLNMarl _$ "YZJ~X/&-9oМo j/ 1IuS1Ő %my؋ilEu9f5̔hcU4&aû-u|K_׿O6:/~qW_qES7|'k^+Qk } A&qZO}}x>k1ߩoIju~l?{1"p٧ɧ]_gjw܄kq1de/ ^̉I+s)f9 Tyc2PqrV\]rtLE)!Fe ̆ 5r%5Z_19cq'bՊqs簰7} KJWv 7Xt,|_Y@` ԰|_,ʼnڭ"N2?aYPųx5(m c bs+{! 91K/MóXz #:~v?c$vLSD Os NEPcvvh~s Kffp9';9hMgpU1!D$g##%A0<=L cGY \t" . (ĸ---uo|3ny3LO:2<24MTGخ{n]s-$H~Q],@ΒXD"HU.2 ڸ= oݚ$Vh"JM%N6OY?/`aǔ^&ʢ"*$%#^-[miZC)&&&pɧf)-cB O*ҪTbQ#~Sҿŕ]D3,H Al Hv9Gy< OUwHA1" +;f?o/My@Z<lG AHO)5MA2rF[?El0t9cG21/;Ͼ 2z}Ģ$H Aʂw[3s>><ȘJ%#\)oy=te+Q%@A)9@|{2*@9LyG 8 2D>ˊDy) $HC/(AZE60ȓ -gO"~ְGeœ?Ar2X !q䱇|PYYBA}f1*eQ]13%1A >߆ SdDQSk]g3 AIRC9$H2e?P|) c RˍstU\D?#TwCXfc^G Aʤr^b!aޡ~mCYװkX1;o(A $kAQ/g1+E<A ~I_65Hȅ $J a`E_ )3ض zPb Vw seFhg|E5eG2\fܖØ;{yAyJ9 42֧CN胍l3 ֠H ӯRoKEA ;naJ$H # GgI H3T662{ pPIy~{^ WY1A r2 2gA1H 5Ô)&cT=f?aq pom6 U ˫E'/)߹%—AUYC|gW3Y7zޕB A m@bP"{9Po?>6#>,'rU Yi}4 Ľ^$z A<3o'z<>;P S 'Ì1Gpρ)f I +Q'YV-U(FuC>L?E%V2P=^QVěE4!Y[F_ AX2XRd| r ڕ2:CYߠ /eÍ.r)y0qP" ABJc<,foc?唩A ^*t̒2ܯx&Cc$)ywT99r_W0P /_ Gurѡ8ˍ. t7P.Ǡ>42'@;pAЕrH5VI.gJ|XyWE=vY%A  r4C6/᰽N9,>h$_1Amo/1~(o5Sƻ`w$xAmRњfRZnur;Ko-e\Nyr=Pi] H I$X A2,gCQ5B o G0牶;LᶻBI9ũ'm"N֧Hæ r4:64Maw *qg[@ AW|d#Ȼ ?SKm=6~'_Il̑w-]y, s ?i.ג](,/D³XW֋{rqLC|\Z_qX>|<[?_>uA92|\=#>F}x.qi )2AR{sSjRػ^$UfbI\r_ǠY@z?5XX|O"[ Lxo³@"V~ v*>Qxh:se d(3u]'T~!)Rl2pILf9~ > V y.elguʤԅ"zOxAD^8 A q8Svw=7 QNԫq }8_ I2aFk$I" "-v2*ej N=98;{f0:6=17c#;fz- KD7;JO4K]f AVazNpR7$R v婜bqYt:~@mQ}E>DrEĄ416V.'qkDm\+. xS`}c WFs\?ٜ)CaE$ĀH#yhU~a,x"l߾f} +OI* i@,' 'Z4YWG|@}|xuxl>tZM1a5T"bA&+yZS뒶W?}98.&&Wam8qI ݐ?yX2n$P(R3yo @h4Jt& V^Yu(Ik^ruFlwh,hwn\ :jU6;nmT5M Yhb^L?9I>g83p̱v)*=a6:8O9h--ؘs sFz,x C]0Dhz $B+VL"I:E#Ir\HfQ(hxq%p6E^f1dA aQs}FfG^&S͡Khã}\.,Lg؞}˜1*cY}^;݈b$QL\Ln%*zԯmVE~%|ERŹ}Y=+(HԼ ,^A:)cc)#I\yh?IxRAd"=94ܽզOOcϞRBI(xqa4:4P"uiOcF }`1)/-\qdYJ2{ bς}C;k!9xnPR\Y2h{.)_0۷!;( oDD<^"nŋh=!$õ6#Hx?̷f@uFx&jXC"j-%@1Qv < mOr.Sb$+HQ)GKO!ʊ/ 0G5ݿYZjʕ% 'jn+e0G?bʾ_KPTu*JȧHV&뭸DLJ J+2(ɓJD}AI(ţdCc$~HV!N03ޅ=c⬵ gAecwm=wbڭ.DŽ#Ə;sL 3MNSV#Ȥh[h6[y.$2*.qX/&CNT5q,*F0y5JLr J'L9^XZӜCv3J<_[)YPo\T@`@VǠ+cYs* 4u{yU3y1x>d 90;αZU~Vj(r!`%O5&:F%TcDP|Ss8qOٿս{,߹LRoqW叿 _v<էSM{jn3^]/8o=w}_k_r<ٿÊz+pM?~]_;v.\GQ ^ S߻Pe?N{lOq#_:B3SB+̲|IIDDp& 4 SnŦȞ&h`2XIrG(+VaU+|+7bÆut&Tt(/G8ܳd_tu?RciN?@0`$zbb|f π;Ƨ$g 5Ļ^s&n *݇hezOy!ּ.W]߾x 9G0'#s=mӘ=*ƺpwO{~WIDAT[7 gMگϽO00c_&z-k`v}˾*a5tZ(5rMP <]1yjŐdp"xms,dp]'UbTUŚ<3Rm/`gi sq ϓlj*tKݏzm䗦 8On zoKE8Ѥilvs=h;cJRi+L{S 7ع.Nd'yeRTGL/ڗ6t,hs}1MB4&z8`z/Gc<㜓N 8VV1;\x harm'jW NXUO޸\ubjq}0z 齻ШLa \؎_0oMϠJRS+Qc܇$ʉ$iF+ꘛ>" N88J=Q0>o}o?' ?XXl'VZi*Fb5õw[)&L"Z3Pi/gCP59}aLc ^; ځR@ # DV>!j\ .xU(DԌpg"#L[A#=<\6OEXu%(NA ~Y1 p }PQV8!8ECR739LFj8r=n+0k~NEW_=x˿LO.7\'#::nA\rͻb?^gl! Vjk?E<տ\w5bƛ^>l^=o>u߮~hnkgNqq h5<8Ň>*Uxk߀DcˎO %qS~_bGc{\GL]1gu:.{xo!~I8կ;?y ?ΜfOg xœ]D/|ǰ8Sekrxل}nAF ^BV5=K8#f}ݲS\U/H*77F1ZA'!;H#_=dUTr~E :4ڮueR&^JJ|Uoy*T>X=(1D⥪|o']&WxI5WU4:@FO}o}[g O~xpC8Z]&jWEqQu QG?U#);s^XAp}+ԎA:z 6yV]x U b?~ -7ޅ֗/^&|Y^G݋~S=׀kA (zЂ)Wpƙgabص#|@@}gtrv4C6ѕfbvx;/xO$4[!ǁE[&9}7g7lX_?v Y$DGށ/ӌCI[py& @]j+8uQ 2l2ɤYsQ`O UE@lr=\{oGa]k ĂKΥdC(R2@z5Auj.zQKㇳ `413?; ÛfXĎ1.<8x$7}s_};~W}0(Riclb7#,ffQIE}YhY̞2׾h=;OybH2~7Ո>DzJ+(L#zx')enuSPA'C.e clVrRUlȆ 8$ cBT|zVLZC%Q""fʩH: 8M(<&Va/݉?On$&*:fo%Z%FsqTG5K R\+cqqQ+'tRIQ%F;MTch-.b|rҤ6FG81P1Hј_@}6G>޽-]#cha|rUvǸw+.|(nuyz\Cr%$=(q4e $3Z"i]wVC+h I"I87=WWјb+ZCtPCA}lT)G|+2yysjf,"/wsY{ *'Ȧ4Pe, #J!pb ea9Oqi9/.#-D3[}QjM+ʗ"*g$=ԔNb?9NQوln Y+=:G$Tb\6j>%L)/ lgؾ &xXDSȭ*쭙L`4kW9 **LG9}p ة#J|L<_l7dĎZV0}PTNPL7=“-Mv2|e:MKV_2Cn),l486@*?/-"4Mr)άfmвoQ2J 5CN* =YO^`CZ7?zN>G2Sq?`͸,/(U342wvI~'$:3cuxы_<^ʗQ}#p>g9f_{Vo@& ՝+6s$1k7YwPREmSW sRS<`"ƉuQR| oh* 1F(GUϐ-("MKoEGARyFR;]% ,sAVI;{)Iv_B< 6F9@fqLRZ|GgX'fKU]%#p3AfIFkxsX̗rȁd3eU@zn EG氘PO4#cP^7ѿ16VG-k%ۼXa;Ca3뜳P^y,nmb3N7r`l#@TB0ض$S ]J`=X77mb d AEcX}B* mIM˄h"yfzi =S}F3;d64*{U$Gn3: 3;Z:HLwƓϩC(^;V>P-qe~+0YL`}"'!W̳i{RU. 3 XBC7OάăDFeX`Jm1cC-+BHI§E&]'bjug9k{O:J!Dffbk?҃JrDVMtR`MٻD{[YHک8 lssK*Rң_!yU*Jdg0QD=)1(޸ެ%= )LblsHs{ yYe;C5c+8h5۠Bmc=\h+#1K-ʁ)&̸eb}<*BH}Q?`"BTjٽ99$KȈ[UnIWH ; SZsJ?nЀJ6!/`lR/,Rqheޢ!;^J컎1\Ibvp ;t4N1fo= QcOpewV7 r>\b+/f4 or۲-e*حhbQeyFƹ!}Cɖd+#kVP>%[r} mliKzSI9c!rWܻ4e׫xx.lZ;ӏ~,qy;l\܄ -8Xbŗ=xlcxܗ/&PN,3$-@zx0Qz`}ψ(s)`1Q}Rlsx3+$4b;CV/y잫kdjv,'Xϊ| 爵 [ ,#PABa=L-#32OhBAYEk Qh(:Q9sH 'y=(\#*}*`&.`u瘐s0Tt৊χ\+#BZ'`#f)S55؅6!Чn5_S\hH_~ ρ,I 7Se EaD&ɷ1Tl>v{W*OžKj yIF=ͦJIzlQ^ "s^ ښyɲ[樋X\dG|ze!G&y2DxQ*KECc$,i$A!˖LW!: ȍzhSRP& #{|$80cT=C#DԝZDV%K"'2+JSx0`^)ID$5-{H].v2;Kf2D:J(l,l"8 ıX^K,_lwpte#]2zY#kW %7 ;.)6rp")E4v$-Bp"fdo#Pd#u<gV,1%F{H'`*$5ϬCLrg pu`vNbJ,\&J{DpՅY;QioaV*ܡ1k#XپgUf<:=ƍ[ LJ' KCAceeNuN⁵Ƥ?:KHV6Pe}\N1@81 5L>EEf"3<Â2h'߆8FOiMZxa-Vx~jxԦH egqr$'xdxj%ے*Ce ;TU93 $;?(NWɇ)2=%kx_oRͮ:%mNUUYGVzˆJѭwI!ʖ嵏^19VC3:F:{|ƉPYA pH%{ijYxbtZ V Mj%N;I,H A,6^cl|.Ul<:4MPk{zmIENDB`avogadro-1.1.1/doc/mainpage.dox0000644000175000001440000000401212250371054015563 0ustar marcususersnamespace Avogadro { /** \mainpage Avogadro API Documentation \section avogadro Introduction Avogadro is a molecular modeling / viewing / editing tool. More importantly, it is a platform for developing chemical and molecular visualization and interactive simulations. The core design allows every feature to be extended via a plugin. This allows new features and tools to be easily added and removed and extension into new applications. Almost every feature in Avogadro is developed as a plugin, so the source code itself serves as examples for other developers. \subsection main Main Classes Plugins for extending Avogadro: - Color : Interface for coloring atoms, bonds, etc. - Engine : Interface for display types: graphical styles for rendering molecules and other data - Extension : Interface for user menu commands - DockExtension : Interface for dock widgets - Painter : General interface for graphical output: OpenGL, POVRay, etc. - Tool : Interface for mouse tools libavogadro classes: Main classes - GLWidget : Widget for rendering 3d representations of a molecule. - Navigate : Class for manipulating the 3d viewpoint - Primitive : Base class for all model components - Molecule : Class for representing molecules - Atom : Class for representing atoms - Bond : Class for representing bonds - Residue : Class for representing residues \subsection tutorial Tutorial In many cases, if you want to add features to Avogadro, you wish to add an Extension or DockExtension. We have set up a series of tutorials for third-party extensions (i.e., building outside the main Avogadro source). \link tpe-toc Third-Party Extensions\endlink More information can also be found on the Avogadro Developer website. \subsection links Useful Links APIs: - Qt: http://doc.qt.nokia.com/classes.html - OpenBabel: http://openbabel.org/api/ - Eigen Tutorial: http://eigen.tuxfamily.org/dox/GettingStarted.html - CMake: http://www.cmake.org/cmake/help/documentation.html **/ }avogadro-1.1.1/doc/CMakeLists.txt0000644000175000001440000000441212250371054016032 0ustar marcususers# Doxygen related code find_package(Doxygen) if(DOXYGEN_FOUND) set(TAGFILES "${QT_DOC_DIR}/html/qt.tags=http://doc.qt.nokia.com/4.${QT_VERSION_MINOR}") set(TAGFILES "${TAGFILES} ${CMAKE_CURRENT_BINARY_DIR}/openbabel.tags=http://openbabel.org/api") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) # Write out a cmake script to download the Open Babel tag file file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/DownloadOBTag.cmake "file(DOWNLOAD http://openbabel.org/api/openbabel.tags ${CMAKE_CURRENT_BINARY_DIR}/openbabel.tags SHOW_PROGRESS)") add_custom_target(download_ob_tagfile COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/DownloadOBTag.cmake) add_custom_target(doxygen COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/api COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile DEPENDS download_ob_tagfile) endif() # find the required tools find_program(DOCBOOK2PDF_EXECUTABLE docbook2pdf) find_program(DOCBOOK2HTML_EXECUTABLE docbook2html) if( DOCBOOK2PDF_EXECUTABLE AND DOCBOOK2HTML_EXECUTABLE ) # create a target to build pdf docs add_custom_target(pdfdocs COMMAND ${DOCBOOK2PDF_EXECUTABLE} -o pdf ${CMAKE_CURRENT_SOURCE_DIR}/index.docbook ) # create a target to build html docs add_custom_target(htmldocs COMMAND ${DOCBOOK2HTML_EXECUTABLE} -o html ${CMAKE_CURRENT_SOURCE_DIR}/index.docbook ) # create a helper target to build both # if this is always wanted, the two custom targets above # can also be combined into one custom target with two COMMANDs #add_custom_target(alldocs ALL) add_custom_target(alldocs) add_dependencies(alldocs pdfdocs htmldocs) #FILE(GLOB avogadro_HTML RELATIVE ${CMAKE_CURRENT_BINARY_DIR}/html/ "*.html") #INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/pdf/index.pdf DESTINATION share/doc/avogadro/pdf/ OPTIONAL) #INSTALL(FILES ${avogadro_HTML} DESTINATION share/doc/avogadro/html/ OPTIONAL) else( DOCBOOK2PDF_EXECUTABLE AND DOCBOOK2HTML_EXECUTABLE ) message(STATUS "docbook tools not found, doc targets disabled") endif( DOCBOOK2PDF_EXECUTABLE AND DOCBOOK2HTML_EXECUTABLE ) # Manpages if(UNIX) file(GLOB man_1 *.1) install(FILES ${man_1} DESTINATION share/man/man1) endif(UNIX) avogadro-1.1.1/doc/Doxyfile.in0000644000175000001440000002422212250371054015406 0ustar marcususers# Doxyfile 1.5.1 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = Avogadro PROJECT_NUMBER = @Avogadro_VERSION_FULL@ OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@/api CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 2 ALIASES = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO DISTRIBUTE_GROUP_DOC = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = NO EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = NO EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = YES HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = NO FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = @Avogadro_SOURCE_DIR@/libavogadro/src/ \ @Avogadro_SOURCE_DIR@/libavogadro/examples/thirdPartyExtensions/ \ @Avogadro_SOURCE_DIR@/doc/ INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.dox \ *.py \ *.C \ *.CC \ *.C++ \ *.II \ *.I++ \ *.H \ *.HH \ *.H++ \ *.CS \ *.PHP \ *.PHP3 \ *.M \ *.MM \ *.PY RECURSIVE = NO EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = ui* */engines/* */extensions/* */tools/* EXCLUDE_SYMBOLS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES REFERENCES_LINK_SOURCE = YES USE_HTAGS = NO VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = @TAGFILES@ GENERATE_TAGFILE = @CMAKE_CURRENT_BINARY_DIR@/api/html/avogadro.tag ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = NO MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES CLASS_GRAPH = YES COLLABORATION_GRAPH = NO GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO CALLER_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = DOT_GRAPH_MAX_NODES = 50 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO avogadro-1.1.1/doc/index.docbook0000644000175000001440000001456712250371054015757 0ustar marcususers ]> The Avogadro Handbook Carsten Niehaus

cniehaus@kde.org
Marcus Hanwell
marcus@cryos.org
2008-2009 Carsten Niehaus Marcus Hanwell 2009-01-05 0.9-beta1 Avogadro is an advanced molecular editor designed for cross-platform use in computational chemistry, molecular modeling, bioinformatics, materials science, and related areas. It offers flexible rendering and a powerful plugin architecture. The main concept behind Avogadro is to enable a strong framework for molecular visualization and editing. Each community has their own needs and goals for an ideal tool. So Avogadro seeks to allow users to easily provide their own plugins and scripts for rendering, tools, commands... etc. Avogadro is based on top of existing chemistry software, including Open Babel. In the future, it will offer strong scripting abilities to allow for automated demos, submission of calculations to local computational resources, and user-defined customization. chemistry education unit cell Introduction Avogadro is free, cross-platform and licensed under the GNU Public License. For more information, see the homepage. Avogadro quick start guide This is what Avogadro looks like the first time it is run. Avogadro main window Getting Involved Avogadro has a very open and active development community. Currently there are more than 10 active developers and other various contributors. If you are interested in working on or with Avogadro please look at the developer information that is available on the wiki and subscribe to the mailing list. You could also join the IRC channel (#avogadro on irc.freenode.net) and talk with other developers. For information on the internals of Avogadro and LibAvogadro, review the avogadro developer API. Credits and License Program Copyright, 2006-2008 The Avogadro Team Contributors: Shahzad Ali saky.org@gmail.com Ross Braithwaite dark.nz@gmail.com James Bunt james.bunt@gmail.com Donald Ephraim Curtis dcurtis3@sourceforge.net Naomi Fox naomi.fox@gmail.com Marcus D. Hanwell marcus@cryos.org Geoffrey Hutchison geoff@geoffhutchison.net Benoît Jacob jacob.benoit.1@gmail.com Jordan Mantha jordan.mantha@gmail.com Carsten Niehaus cniehaus@kde.org Simon Ochsenreither simon@ochsenreither.de Tim Vandermeersch tim.vandermeersch@gmail.com Installation How to obtain Avogadro Avogadro can be found on the Avogadro home page. Requirements Although Avogadro can work without any 3D-acceleration, an OpenGL capable card will vastly improve the user experience. At a minimum Avogadro requires a system capable of providing OpenGL software rendering. It is currently ported and tested on GNU/Linux, Apple Mac OS X and Microsoft Windows. Building Avogadro from source If you decide to build Avogadro from source, the following resources will be necessary: Git, to access certain code repositories CMake (>=2.6.0), the open-source build system Qt4 (>=4.4.0), the open-source application framework Eigen2, a library for linear algebra as a compile-time dependency of Avogadro OpenBabel (>=2.2.0), the chemistry toolbox All of these programs and libraries are likely to be available through your distribution's repository. Further information can be found on the Avogadro home page. avogadro-1.1.1/crystals/0000755000175000001440000000000012250371054014370 5ustar marcususersavogadro-1.1.1/crystals/arsenides/0000755000175000001440000000000012250371054016345 5ustar marcususersavogadro-1.1.1/crystals/arsenides/GaAs.cif0000644000175000001440000000626012250371054017647 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008845.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008845 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'As Ga' _chemical_name_mineral GaAs _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.6537 _cell_length_b 5.6537 _cell_length_c 5.6537 _cell_volume 180.717 _exptl_crystal_density_diffrn 5.316 _[local]_cod_chemical_formula_sum_orig 'Ga As' _cod_database_code 9008845 _amcsd_database_code AMCSD#0011176 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ga 0.00000 0.00000 0.00000 As 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/arsenides/Co.87Fe.11Ni.13As3-Skutterudite.cif0000644000175000001440000000603412250371054024076 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/75/9007544.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9007544 loop_ _publ_author_name 'Mandel, N.' 'Donohue, J.' _publ_section_title ; The refinement of the crystal structure of skutterudite, CoAs3 Locality: Bou-Azzer, Morocco ; _journal_name_full 'Acta Crystallographica, Section B' _journal_page_first 2288 _journal_page_last 2289 _journal_volume 27 _journal_year 1971 _chemical_formula_sum 'As3 Co0.87 Fe0.11 Ni0.13' _chemical_name_mineral Skutterudite _space_group_IT_number 204 _symmetry_space_group_name_Hall '-I 2 2 3' _symmetry_space_group_name_H-M 'I m -3' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.195 _cell_length_b 8.195 _cell_length_c 8.195 _cell_volume 550.360 _exptl_crystal_density_diffrn 6.995 _[local]_cod_cif_authors_sg_H-M 'I m 3' _[local]_cod_chemical_formula_sum_orig 'Co.87 Fe.11 Ni.13 As3' _cod_database_code 9007544 _amcsd_database_code AMCSD#0009341 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,x,-y 1/2+z,1/2+x,1/2-y z,-x,y 1/2+z,1/2-x,1/2+y -z,x,y 1/2-z,1/2+x,1/2+y -z,-x,-y 1/2-z,1/2-x,1/2-y y,-z,-x 1/2+y,1/2-z,1/2-x -y,-z,x 1/2-y,1/2-z,1/2+x -y,z,-x 1/2-y,1/2+z,1/2-x y,z,x 1/2+y,1/2+z,1/2+x x,-y,z 1/2+x,1/2-y,1/2+z -x,y,z 1/2-x,1/2+y,1/2+z x,y,-z 1/2+x,1/2+y,1/2-z -x,-y,-z 1/2-x,1/2-y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y -z,x,-y 1/2-z,1/2+x,1/2-y z,-x,-y 1/2+z,1/2-x,1/2-y z,x,y 1/2+z,1/2+x,1/2+y -y,z,x 1/2-y,1/2+z,1/2+x y,z,-x 1/2+y,1/2+z,1/2-x y,-z,x 1/2+y,1/2-z,1/2+x -y,-z,-x 1/2-y,1/2-z,1/2-x -x,y,-z 1/2-x,1/2+y,1/2-z x,-y,-z 1/2+x,1/2-y,1/2-z -x,-y,z 1/2-x,1/2-y,1/2+z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Co 0.01531 0.01531 0.01531 0.00136 0.00136 0.00136 Fe 0.01531 0.01531 0.01531 0.00136 0.00136 0.00136 Ni 0.01531 0.01531 0.01531 0.00136 0.00136 0.00136 As 0.00919 0.01191 0.01089 0.00000 0.00000 0.00068 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy Co 0.25000 0.25000 0.25000 0.87000 Fe 0.25000 0.25000 0.25000 0.11000 Ni 0.25000 0.25000 0.25000 0.13000 As 0.00000 0.34310 0.15030 1.00000 avogadro-1.1.1/crystals/arsenides/BAs.cif0000644000175000001440000000625112250371054017501 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008833.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008833 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'As B' _chemical_name_mineral BAs _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.777 _cell_length_b 4.777 _cell_length_c 4.777 _cell_volume 109.010 _exptl_crystal_density_diffrn 5.224 _[local]_cod_chemical_formula_sum_orig 'B As' _cod_database_code 9008833 _amcsd_database_code AMCSD#0011164 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z B 0.00000 0.00000 0.00000 As 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/arsenides/InAs.cif0000644000175000001440000000625512250371054017672 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008851.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008851 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'As In' _chemical_name_mineral InAs _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.036 _cell_length_b 6.036 _cell_length_c 6.036 _cell_volume 219.911 _exptl_crystal_density_diffrn 5.731 _[local]_cod_chemical_formula_sum_orig 'In As' _cod_database_code 9008851 _amcsd_database_code AMCSD#0011182 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z In 0.00000 0.00000 0.00000 As 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/arsenides/CoAs3-Skutterudite.cif0000644000175000001440000000540412250371054022435 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1011231.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1011231 _chemical_name_systematic 'Cobalt arsenide (1/3)' _chemical_name_mineral 'Skutterudite' _chemical_formula_structural 'Co As3' _chemical_formula_sum 'As3 Co' _publ_section_title ; The crystal structure of skutterudite and related minerals ; loop_ _publ_author_name 'Oftedal, I' _journal_name_full 'Norsk Geologisk Tidsskrift' _journal_coden_ASTM NOGTAO _journal_volume 8 _journal_year 1926 _journal_page_first 250 _journal_page_last 257 _cell_length_a 8.17 _cell_length_b 8.17 _cell_length_c 8.17 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 545.3 _cell_formula_units_Z 8 _exptl_crystal_density_meas 6.8 _symmetry_space_group_name_H-M 'I m -3' _symmetry_Int_Tables_number 204 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'x,-y,-z' '-x,y,-z' '-x,-y,z' 'y,z,x' '-y,-z,x' 'y,-z,-x' '-y,z,-x' 'z,x,y' '-z,x,-y' '-z,-x,y' 'z,-x,-y' '-x,-y,-z' '-x,y,z' 'x,-y,z' 'x,y,-z' '-y,-z,-x' 'y,z,-x' '-y,z,x' 'y,-z,x' '-z,-x,-y' 'z,-x,y' 'z,x,-y' '-z,x,y' '1/2+x,1/2+y,1/2+z' '1/2+x,1/2-y,1/2-z' '1/2-x,1/2+y,1/2-z' '1/2-x,1/2-y,1/2+z' '1/2+y,1/2+z,1/2+x' '1/2-y,1/2-z,1/2+x' '1/2+y,1/2-z,1/2-x' '1/2-y,1/2+z,1/2-x' '1/2+z,1/2+x,1/2+y' '1/2-z,1/2+x,1/2-y' '1/2-z,1/2-x,1/2+y' '1/2+z,1/2-x,1/2-y' '1/2-x,1/2-y,1/2-z' '1/2-x,1/2+y,1/2+z' '1/2+x,1/2-y,1/2+z' '1/2+x,1/2+y,1/2-z' '1/2-y,1/2-z,1/2-x' '1/2+y,1/2+z,1/2-x' '1/2-y,1/2+z,1/2+x' '1/2+y,1/2-z,1/2+x' '1/2-z,1/2-x,1/2-y' '1/2+z,1/2-x,1/2+y' '1/2+z,1/2+x,1/2-y' '1/2-z,1/2+x,1/2+y' loop_ _atom_type_symbol _atom_type_oxidation_number Co0 0.000 As0 0.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Co1 Co0 8 c 0.25 0.25 0.25 1. 0 d As1 As0 24 g 0. 0.35 0.15 1. 0 d _cod_database_code 1011231 avogadro-1.1.1/crystals/arsenides/NiAs-Nickeline.cif0000644000175000001440000000414212250371054021562 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008902.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008902 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ideal nickel arsenide structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'As Ni' _chemical_name_mineral Nickeline _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.602 _cell_length_b 3.602 _cell_length_c 5.009 _cell_volume 56.282 _exptl_crystal_density_diffrn 7.884 _[local]_cod_chemical_formula_sum_orig 'Ni As' _cod_database_code 9008902 _amcsd_database_code AMCSD#0011233 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ni 0.00000 0.00000 0.00000 As 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/arsenides/AlAs.cif0000644000175000001440000000617312250371054017657 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008830.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008830 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Al As' _chemical_name_mineral AlAs _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.62 _cell_length_b 5.62 _cell_length_c 5.62 _cell_volume 177.504 _exptl_crystal_density_diffrn 3.813 _cod_database_code 9008830 _amcsd_database_code AMCSD#0011161 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al 0.00000 0.00000 0.00000 As 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/sulfates/0000755000175000001440000000000012250371054016216 5ustar marcususersavogadro-1.1.1/crystals/sulfates/BaSO4-Barite.cif0000644000175000001440000000410112250371054020751 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004485.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_9004485 loop_ _publ_author_name 'Jacobsen S D' 'Smyth J R' 'Swope R J' 'Downs R T' _publ_section_title ; Rigid-body character of the SO4 groups in celestine, anglesite and barite ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 1053 _journal_page_last 1060 _journal_volume 36 _journal_year 1998 _chemical_formula_sum 'Ba O4 S' _[local]_cod_chemical_formula_sum_orig 'Ba S O4' _chemical_name_mineral Barite _symmetry_space_group_name_H-M 'P b n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 7.1540 _cell_length_b 8.8790 _cell_length_c 5.4540 _cell_volume 346.440 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,y,1/2-z -x,-y,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ba 0.15842 0.18453 0.25000 S 0.19082 0.43749 0.75000 O1 0.10720 0.58700 0.75000 O2 0.04980 0.31760 0.75000 O3 0.31180 0.41940 0.97040 loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Ba 0.01025 0.00843 0.01298 -0.00048 0.00000 0.00000 S 0.00910 0.00840 0.00930 0.00033 0.00000 0.00000 O1 0.02660 0.01310 0.02800 0.01050 0.00000 0.00000 O2 0.01170 0.02090 0.02020 -0.00670 0.00000 0.00000 O3 0.01490 0.01490 0.01030 -0.00200 -0.00280 0.00080 _cod_database_code 9004485 avogadro-1.1.1/crystals/sulfates/CoSO4.cif0000644000175000001440000000477312250371054017603 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910314 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Pages 40 & 41 from the Structure of Crystals, vol. 3 by Wyckoff R W G. published by Interscience Publishers, Inc. in 1951 ; _journal_name_full 'The Structure of Crystals' _journal_page_first 40 _journal_page_last 41 _journal_volume 3 _journal_year 1951 _chemical_formula_structural CoSO4 _chemical_formula_sum 'Co O4 S' _space_group_IT_number 62 _symmetry_cell_setting orthorhombic _symmetry_Int_Tables_number 62 _symmetry_space_group_name_Hall '-P 2ac 2n' _symmetry_space_group_name_H-M 'P n m a' _audit_creation_date 2006-02-07 _audit_creation_method ; Pages 40 & 41 from the Structure of Crystals, vol. 3 by Wyckoff R W G. published by Interscience Publishers, Inc. in 1951 ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.624 _cell_length_b 6.715 _cell_length_c 4.744 _cell_volume 274.726 _[local]_cod_chemical_formula_sum_orig 'Co S O4' _cod_database_code 5910314 loop_ _symmetry_equiv_pos_as_xyz x,y,z x+1/2,-y+1/2,-z+1/2 -x,y+1/2,-z -x+1/2,-y,z+1/2 -x,-y,-z -x+1/2,y+1/2,z+1/2 x,-y+1/2,z x+1/2,y,-z+1/2 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 Co1 0.00000 0.50000 0.00000 Co2 0.50000 0.00000 0.50000 Co3 0.50000 0.50000 0.50000 Co4 0.18600 0.25000 0.45800 S1 0.68600 0.25000 0.04200 S2 -0.18600 -0.25000 -0.45800 S3 -0.68600 -0.25000 -0.04200 S4 0.13000 0.25000 0.75000 O1 0.63000 0.25000 -0.25000 O2 -0.13000 -0.25000 -0.75000 O3 -0.63000 -0.25000 0.25000 O4 0.36700 0.25000 0.45800 O5 0.86700 0.25000 0.04200 O6 -0.36700 -0.25000 -0.45800 O7 -0.86700 -0.25000 -0.04200 O8 0.13000 0.06100 0.31900 O9 0.63000 0.43900 0.18100 O10 0.13000 0.43900 0.31900 O11 0.63000 0.06100 0.18100 O12 -0.13000 -0.06100 -0.31900 O13 -0.63000 -0.43900 -0.18100 O14 -0.13000 -0.43900 -0.31900 O15 -0.63000 -0.06100 -0.18100 O16 avogadro-1.1.1/crystals/sulfates/PbSO4-Anglesite.cif0000644000175000001440000000514212250371054021503 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004484.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004484 loop_ _publ_author_name 'Jacobsen, S. D.' 'Smyth, J. R.' 'Swope, R. J.' 'Downs, R. T.' _publ_section_title ; Rigid-body character of the SO4 groups in celestine, anglesite and barite ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 1053 _journal_page_last 1060 _journal_volume 36 _journal_year 1998 _chemical_formula_sum 'O4 Pb S' _chemical_name_mineral Anglesite _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2c 2ab' _symmetry_space_group_name_H-M 'P b n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.9549 _cell_length_b 8.472 _cell_length_c 5.3973 _cell_volume 318.019 _exptl_crystal_density_diffrn 6.334 _[local]_cod_chemical_formula_sum_orig 'Pb S O4' _cod_database_code 9004484 _amcsd_database_code AMCSD#0005518 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,y,1/2-z -x,-y,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z -x,-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Pb 0.02194 0.01293 0.02321 0.00110 0.00000 0.00000 S 0.01240 0.00960 0.00880 -0.00030 0.00000 0.00000 O1 0.02500 0.01400 0.03500 0.00800 0.00000 0.00000 O2 0.01500 0.02200 0.02500 -0.00800 0.00000 0.00000 O3 0.01950 0.01920 0.01290 -0.00240 -0.00570 0.00160 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pb 0.16716 0.18798 0.25000 S 0.18490 0.43580 0.75000 O1 0.09460 0.59150 0.75000 O2 0.04240 0.30720 0.75000 O3 0.30900 0.41890 0.97260 avogadro-1.1.1/crystals/sulfates/CaSO4-2(H2O)-Gypsum.cif0000644000175000001440000002000512250371054021622 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2011-01-02 20:00:31 +0000 (Sun, 02 Jan 2011) $ #$Revision: 5310 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2300259.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided by IUCr Journals, http://journals.iucr.org/. # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_2300259 loop_ _publ_author_name 'Henry, Paul F.' 'Weller, Mark T.' 'Wilson, Chick C.' _publ_section_title ; Neutron powder diffraction in materials with incoherent scattering: an illustration of Rietveld refinement quality from nondeuterated gypsum ; _journal_issue 6 _journal_name_full 'Journal of Applied Crystallography' _journal_page_first 1176 _journal_page_last 1188 _journal_volume 42 _journal_year 2009 _chemical_formula_sum 'Ca H4 O6 S' _chemical_formula_weight 172.17 _chemical_name_systematic ' ?' _space_group_IT_number 15 _symmetry_cell_setting monoclinic _symmetry_space_group_name_Hall '-I 2yc' _symmetry_space_group_name_H-M 'I 1 2/c 1' _cell_angle_alpha 90.0 _cell_angle_beta 118.4837(12) _cell_angle_gamma 90.0 _cell_formula_units_Z 4 _cell_length_a 5.68021(13) _cell_length_b 15.2139(4) _cell_length_c 6.53032(15) _cell_volume 496.025(22) _pd_block_id 2009-10-13T15:29|I2A_phase1|Paul_Henry|| _pd_phase_name gypsum _[local]_cod_data_source_file cg5117.cif _[local]_cod_data_source_block I2A_phase_1 _cod_depositor_comments ; The following automatic conversions were performed: '_geom_bond_publ_flag' value 'N' changed to 'n' according to '/home/saulius/struct/CIF-dictionaries/cif_core.dic' dictionary named 'cif_core.dic' version 2.4.1 from 2010-06-29 (40 times). '_geom_angle_publ_flag' value 'N' changed to 'n' according to '/home/saulius/struct/CIF-dictionaries/cif_core.dic' dictionary named 'cif_core.dic' version 2.4.1 from 2010-06-29 (67 times). Automatic conversion script Id: cif_fix_enum 1527 2010-12-29 10:47:43Z saulius ; _cod_database_code 2300259 loop_ _symmetry_equiv_pos_site_id _symmetry_equiv_pos_as_xyz 1 +x,+y,+z 2 -x,+y,-z+1/2 -1 -x,-y,-z -2 +x,-y,+z+1/2 101 +x+1/2,+y+1/2,+z+1/2 102 -x+1/2,+y+1/2,-z -101 -x+1/2,-y+1/2,-z+1/2 -102 +x+1/2,-y+1/2,+z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_22 _atom_site_aniso_U_23 _atom_site_aniso_U_33 CA1 0.0138(22) 0.0 0.0038(19) 0.0126(24) 0.0 0.0005(23) S2 0.0034(35) 0.0 0.0010(29) 0.007(4) 0.0 0.011(4) O3 0.0094(10) -0.0005(11) 0.0022(10) 0.0206(14) 0.0082(11) 0.0087(11) O4 0.0053(11) -0.0037(13) -0.0003(10) 0.0223(14) 0.0027(12) 0.0115(12) O5 0.0219(15) -0.0077(15) 0.0176(13) 0.0243(20) -0.0058(15) 0.0267(16) H6 0.0317(27) -0.0016(24) 0.0352(24) 0.039(4) 0.0008(23) 0.0510(31) H7 0.0381(30) 0.0016(35) 0.0233(31) 0.039(4) -0.0103(33) 0.050(4) loop_ _atom_site_type_symbol _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_thermal_displace_type _atom_site_U_iso_or_equiv _atom_site_symmetry_multiplicity Ca CA1 0.5 0.07872(29) 0.25 1.0 Uani 0.00883 4 S S2 0.0 0.0775(4) 0.75 1.0 Uani 0.00836 4 O O3 0.9649(4) 0.13261(16) 0.5519(4) 1.0 Uani 0.01377 8 O O4 0.7572(4) 0.02286(17) 0.6674(4) 1.0 Uani 0.01478 8 O O5 0.3808(6) 0.18264(20) 0.4569(5) 1.0 Uani 0.02183 8 H H6 0.2486(9) 0.15985(28) 0.5068(9) 1.0 Uani 0.03425 8 H H7 0.4067(10) 0.2419(4) 0.4937(10) 1.0 Uani 0.04127 8 loop_ _atom_type_symbol _atom_type_number_in_cell Ca 4.0 S 4.0 O 24.0 H 16.0 loop_ _geom_angle_atom_site_label_1 _geom_angle_atom_site_label_2 _geom_angle_atom_site_label_3 _geom_angle _geom_angle_site_symmetry_1 _geom_angle_site_symmetry_2 _geom_angle_site_symmetry_3 _geom_angle_publ_flag S2 CA1 S2 179.3187(32) 1_554 . 1_655 n S2 CA1 O3 152.88(15) 1_554 . 1_555 n S2 CA1 O3 27.60(9) 1_554 . 2_655 n S2 CA1 O4 151.95(15) 1_554 . 1_555 n S2 CA1 O4 27.57(10) 1_554 . 2_655 n S2 CA1 O4 83.24(10) 1_554 . -1_656 n S2 CA1 O4 96.31(11) 1_554 . -2_444 n S2 CA1 O5 103.48(12) 1_554 . 1_555 n S2 CA1 O5 76.98(11) 1_554 . 2_655 n S2 CA1 O3 27.60(9) 1_655 . 1_555 n S2 CA1 O3 152.88(15) 1_655 . 2_655 n S2 CA1 O4 27.57(10) 1_655 . 1_555 n S2 CA1 O4 151.95(15) 1_655 . 2_655 n S2 CA1 O4 96.31(11) 1_655 . -1_656 n S2 CA1 O4 83.24(10) 1_655 . -2_444 n S2 CA1 O5 76.98(11) 1_655 . 1_555 n S2 CA1 O5 103.48(12) 1_655 . 2_655 n O3 CA1 O3 142.68(23) 1_555 . 2_655 n O3 CA1 O4 55.16(7) 1_555 . 1_555 n O3 CA1 O4 141.70(8) 1_555 . 2_655 n O3 CA1 O4 123.85(10) 1_555 . -1_656 n O3 CA1 O4 82.08(8) 1_555 . -2_444 n O3 CA1 O5 79.53(12) 1_555 . 1_555 n O3 CA1 O5 75.89(11) 1_555 . 2_655 n O3 CA1 O4 141.70(8) 2_655 . 1_555 n O3 CA1 O4 55.16(7) 2_655 . 2_655 n O3 CA1 O4 82.08(8) 2_655 . -1_656 n O3 CA1 O4 123.85(10) 2_655 . -2_444 n O3 CA1 O5 75.89(11) 2_655 . 1_555 n O3 CA1 O5 79.53(12) 2_655 . 2_655 n O4 CA1 O4 141.02(23) 1_555 . 2_655 n O4 CA1 O4 68.81(11) 1_555 . -1_656 n O4 CA1 O4 85.66(10) 1_555 . -2_444 n O4 CA1 O5 77.71(10) 1_555 . 1_555 n O4 CA1 O5 131.02(11) 1_555 . 2_655 n O4 CA1 O4 85.66(10) 2_655 . -1_656 n O4 CA1 O4 68.81(11) 2_655 . -2_444 n O4 CA1 O5 131.02(11) 2_655 . 1_555 n O4 CA1 O5 77.71(10) 2_655 . 2_655 n O4 CA1 O4 98.15(20) -1_656 . -2_444 n O4 CA1 O5 86.00(9) -1_656 . 1_555 n O4 CA1 O5 160.14(9) -1_656 . 2_655 n O4 CA1 O5 160.14(9) -2_555 . 1_555 n O4 CA1 O5 86.00(9) -2_555 . 2_655 n O5 CA1 O5 96.68(21) 1_555 . 2_655 n CA1 S2 CA1 179.3187(32) 1_455 . 1_556 n CA1 S2 O3 53.67(12) 1_455 . 1_455 n CA1 S2 O3 125.85(21) 1_455 . 2_656 n CA1 S2 O4 53.08(10) 1_455 . 1_455 n CA1 S2 O4 127.41(20) 1_455 . 2_656 n CA1 S2 O3 125.85(21) 1_556 . 1_455 n CA1 S2 O3 53.67(12) 1_556 . 2_656 n CA1 S2 O4 127.41(20) 1_556 . 1_455 n CA1 S2 O4 53.08(10) 1_556 . 2_656 n O3 S2 O3 110.6(4) 1_455 . 2_656 n O3 S2 O4 106.75(12) 1_455 . 1_455 n O3 S2 O4 110.70(14) 1_455 . 2_656 n O3 S2 O4 110.70(14) 2_656 . 1_455 n O3 S2 O4 106.75(12) 2_656 . 2_656 n O4 S2 O4 111.4(4) 1_455 . 2_656 n CA1 O3 S2 98.73(18) 1_555 . 1_655 n CA1 O4 CA1 111.19(11) 1_555 . -1_656 n CA1 O4 S2 99.36(16) 1_555 . 1_655 n CA1 O4 S2 149.17(15) -1_656 . 1_655 n CA1 O5 H6 114.28(34) 1_555 . 1_555 n CA1 O5 H7 137.8(4) 1_555 . 1_555 n H6 O5 H7 107.5(5) 1_555 . 1_555 n loop_ _geom_bond_atom_site_label_1 _geom_bond_atom_site_label_2 _geom_bond_distance _geom_bond_site_symmetry_1 _geom_bond_site_symmetry_2 _geom_bond_publ_flag CA1 CA1 4.049(5) . -1_655 n CA1 CA1 4.049(5) . -1_656 n CA1 S2 3.14368(9) . 1_554 n CA1 S2 3.14368(9) . 1_655 n CA1 O3 2.5624(30) . 1_555 n CA1 O3 2.5624(30) . 2_655 n CA1 O4 2.5471(24) . 1_555 n CA1 O4 2.5471(24) . 2_655 n CA1 O4 2.359(4) . -1_656 n CA1 O4 2.359(4) . -2_554 n CA1 O5 2.378(5) . 1_555 n CA1 O5 2.378(5) . 2_655 n CA1 H6 2.942(5) . 1_555 n CA1 H6 2.942(5) . 2_655 n CA1 H7 3.127(7) . 1_555 n CA1 H7 3.127(7) . 2_655 n S2 CA1 3.14368(9) . 1_455 n S2 CA1 3.14368(9) . 1_556 n S2 O3 1.473(4) . 1_455 n S2 O3 1.473(4) . 2_656 n S2 O4 1.474(4) . 1_455 n S2 O4 1.474(4) . 2_656 n O3 CA1 2.5624(30) . 1_555 n O3 S2 1.473(4) . 1_655 n O3 H6 1.819(5) . 1_655 n O3 H7 1.945(6) . -102_444 n O4 CA1 2.5471(24) . 1_555 n O4 CA1 2.359(4) . -1_656 n O4 S2 1.474(4) . 1_655 n O5 CA1 2.378(5) . 1_555 n O5 H6 1.011(6) . 1_555 n O5 H7 0.926(8) . 1_555 n H6 CA1 2.942(5) . 1_555 n H6 O3 1.819(5) . 1_455 n H6 O5 1.011(6) . 1_555 n H6 H7 1.563(7) . 1_555 n H7 CA1 3.127(7) . 1_555 n H7 O3 1.945(6) . -102_344 n H7 O5 0.926(8) . 1_555 n H7 H6 1.563(7) . 1_555 n loop_ _pd_block_diffractogram_id 2009-10-13T15:29|I2A_H_01|Paul_Henry|D20_Ge115_1.87Ang 2009-10-13T15:29|I2A_H_02|Paul_Henry|D20_Ge117_1.36Ang avogadro-1.1.1/crystals/sulfates/SrSO4-Celestine.cif0000644000175000001440000000514312250371054021527 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004483.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004483 loop_ _publ_author_name 'Jacobsen, S. D.' 'Smyth, J. R.' 'Swope, R. J.' 'Downs, R. T.' _publ_section_title ; Rigid-body character of the SO4 groups in celestine, anglesite and barite ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 1053 _journal_page_last 1060 _journal_volume 36 _journal_year 1998 _chemical_formula_sum 'O4 S Sr' _chemical_name_mineral Celestine _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2c 2ab' _symmetry_space_group_name_H-M 'P b n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.8671 _cell_length_b 8.3545 _cell_length_c 5.3458 _cell_volume 306.695 _exptl_crystal_density_diffrn 3.978 _[local]_cod_chemical_formula_sum_orig 'Sr S O4' _cod_database_code 9004483 _amcsd_database_code AMCSD#0005517 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,y,1/2-z -x,-y,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z -x,-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Sr 0.01005 0.00757 0.01681 0.00026 0.00000 0.00000 S 0.00797 0.00762 0.00896 -0.00014 0.00000 0.00000 O1 0.01950 0.01190 0.02990 0.00840 0.00000 0.00000 O2 0.01260 0.01610 0.02100 -0.00660 0.00000 0.00000 O3 0.01380 0.01560 0.01160 -0.00110 -0.00400 0.00060 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sr 0.15818 0.18395 0.25000 S 0.18505 0.43797 0.75000 O1 0.09230 0.59520 0.75000 O2 0.04180 0.30710 0.75000 O3 0.31070 0.42220 0.97440 avogadro-1.1.1/crystals/sulfates/CuSO4.cif0000644000175000001440000000476212250371054017607 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910168 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 40 from the Structure of Crystals, vol. 3 by Wyckoff R W G. published by Interscience Publishers, Inc. in 1951 ; _journal_name_full 'The Structure of Crystals' _journal_page_first 40 _journal_page_last 40 _journal_volume 3 _journal_year 1951 _chemical_formula_structural CuSO4 _chemical_formula_sum 'Cu O4 S' _space_group_IT_number 62 _symmetry_cell_setting orthorhombic _symmetry_Int_Tables_number 62 _symmetry_space_group_name_Hall '-P 2ac 2n' _symmetry_space_group_name_H-M 'P n m a' _audit_creation_date 2006-02-07 _audit_creation_method ; Page 40 from the Structure of Crystals, vol. 3 by Wyckoff R W G. published by Interscience Publishers, Inc. in 1951 ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.3956 _cell_length_b 6.6982 _cell_length_c 4.8291 _cell_volume 271.566 _[local]_cod_chemical_formula_sum_orig 'Cu S O4' _cod_database_code 5910168 loop_ _symmetry_equiv_pos_as_xyz x,y,z x+1/2,-y+1/2,-z+1/2 -x,y+1/2,-z -x+1/2,-y,z+1/2 -x,-y,-z -x+1/2,y+1/2,z+1/2 x,-y+1/2,z x+1/2,y,-z+1/2 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 Cu1 0.00000 0.50000 0.00000 Cu2 0.50000 0.00000 0.50000 Cu3 0.50000 0.50000 0.50000 Cu4 0.18600 0.25000 0.44400 S1 0.68600 0.25000 0.05600 S2 -0.18600 -0.25000 -0.44400 S3 -0.68600 -0.25000 -0.05600 S4 0.14100 0.25000 0.75500 O1 0.64100 0.25000 -0.25500 O2 -0.14100 -0.25000 -0.75500 O3 -0.64100 -0.25000 0.25500 O4 0.37500 0.25000 0.43900 O5 0.87500 0.25000 0.06100 O6 -0.37500 -0.25000 -0.43900 O7 -0.87500 -0.25000 -0.06100 O8 0.12900 0.06900 0.30700 O9 0.62900 0.43100 0.19300 O10 0.12900 0.43100 0.30700 O11 0.62900 0.06900 0.19300 O12 -0.12900 -0.06900 -0.30700 O13 -0.62900 -0.43100 -0.19300 O14 -0.12900 -0.43100 -0.30700 O15 -0.62900 -0.06900 -0.19300 O16 avogadro-1.1.1/crystals/sulfates/MgSO4.cif0000644000175000001440000000417312250371054017577 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1000027.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1000027 loop_ _publ_author_name 'Rentzeperis, P J' 'Soldatos, C T' _publ_section_title ; The Crystal Structure of the Anhydrous Magnesium Sulfate ; _journal_coden_ASTM ACCRA9 _journal_name_full 'Acta Crystallographica (1,1948-23,1967)' _journal_page_first 686 _journal_page_last 688 _journal_volume 11 _journal_year 1958 _chemical_formula_structural 'Mg S O4' _chemical_formula_sum 'Mg O4 S' _chemical_name_systematic 'Magnesium sulfate' _symmetry_cell_setting orthorhombic _symmetry_Int_Tables_number 63 _symmetry_space_group_name_H-M 'C m c m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_formula_units_Z 4 _cell_length_a 5.182(15) _cell_length_b 7.893(2) _cell_length_c 6.506(16) _cell_volume 266.1 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,-y,-z x,y,1/2-z x,-y,1/2+z -x,-y,-z -x,y,z -x,-y,1/2+z -x,y,1/2-z 1/2+x,1/2+y,z 1/2+x,1/2-y,-z 1/2+x,1/2+y,1/2-z 1/2+x,1/2-y,1/2+z 1/2-x,1/2-y,-z 1/2-x,1/2+y,z 1/2-x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Mg1 Mg2+ 4 a 0. 0. 0. 1. 0 d S1 S6+ 4 c 0. 0.37 0.25 1. 0 d O1 O2- 8 f 0. 0.25 0.06 1. 0 d O2 O2- 8 g 0.25 0.47 0.25 1. 0 d loop_ _atom_type_symbol _atom_type_oxidation_number Mg2+ 2.000 S6+ 6.000 O2- -2.000 _cod_database_code 1000027 avogadro-1.1.1/crystals/sulfates/CaSO4-Anhydrite.cif0000644000175000001440000000512612250371054021503 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004096.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004096 loop_ _publ_author_name 'Hawthorne, F. C.' 'Ferguson, R. B.' _publ_section_title ; Anhydrous sulphates. II. Refinement of the crystal structure of anhydrite ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 289 _journal_page_last 292 _journal_volume 13 _journal_year 1975 _chemical_formula_sum 'Ca O4 S' _chemical_name_mineral Anhydrite _space_group_IT_number 63 _symmetry_space_group_name_Hall '-A 2a 2a' _symmetry_space_group_name_H-M 'A m m a' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.993 _cell_length_b 6.995 _cell_length_c 6.245 _cell_volume 305.481 _exptl_crystal_density_diffrn 2.960 _[local]_cod_chemical_formula_sum_orig 'Ca S O4' _cod_database_code 9004096 _amcsd_database_code AMCSD#0005077 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,-z 1/2+x,1/2+y,1/2-z 1/2-x,-y,z 1/2-x,1/2-y,1/2+z x,-y,z x,1/2-y,1/2+z -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,z 1/2-x,1/2+y,1/2+z 1/2+x,-y,-z 1/2+x,1/2-y,1/2-z -x,-y,-z -x,1/2-y,1/2-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Ca 0.00850 0.00935 0.00699 0.00000 0.00000 0.00000 S 0.00837 0.00669 0.00585 0.00000 0.00000 0.00000 O1 0.01947 0.00835 0.00960 0.00000 0.00000 0.00000 O2 0.00870 0.01683 0.01014 0.00000 0.00268 0.00000 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ca 0.75000 0.00000 0.34760 S 0.25000 0.00000 0.15556 O1 0.25000 0.16990 0.01620 O2 0.08190 0.00000 0.29750 avogadro-1.1.1/crystals/intermetallics/0000755000175000001440000000000012250371054017407 5ustar marcususersavogadro-1.1.1/crystals/intermetallics/(Ni0.5Fe0.5)Pt-Ferronickelplatinum.cif0000644000175000001440000000427312250371054026027 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004220.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004220 loop_ _publ_author_name 'Bayliss, P.' _publ_section_title ; Revised unit cell dimensions, space group, and chemical formua of some metallic minerals ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 751 _journal_page_last 755 _journal_volume 28 _journal_year 1990 _chemical_formula_sum 'Fe0.5 Ni0.5 Pt' _chemical_name_mineral Ferronickelplatinum _space_group_IT_number 123 _symmetry_space_group_name_Hall '-P 4 2' _symmetry_space_group_name_H-M 'P 4/m m m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.731 _cell_length_b 2.731 _cell_length_c 3.641 _cell_volume 27.156 _exptl_crystal_density_diffrn 15.431 _[local]_cod_chemical_formula_sum_orig '(Ni.5 Fe.5) Pt' _cod_database_code 9004220 _amcsd_database_code AMCSD#0005205 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z y,-x,-z -y,x,z x,-y,z -x,y,-z x,y,-z -x,-y,z y,x,z -y,-x,-z -y,x,-z y,-x,z -x,y,z x,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy Ni 0.50000 0.50000 0.50000 0.50000 Fe 0.50000 0.50000 0.50000 0.50000 Pt 0.00000 0.00000 0.00000 1.00000 avogadro-1.1.1/crystals/intermetallics/PtBi.cif0000644000175000001440000000413612250371054020734 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008911.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008911 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ideal nickel arsenide structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Bi Pt' _chemical_name_mineral PtBi _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.315 _cell_length_b 4.315 _cell_length_c 5.490 _cell_volume 88.525 _exptl_crystal_density_diffrn 15.159 _[local]_cod_chemical_formula_sum_orig 'Pt Bi' _cod_database_code 9008911 _amcsd_database_code AMCSD#0011242 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pt 0.00000 0.00000 0.00000 Bi 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/intermetallics/BiPd-Sobolevskite.cif0000644000175000001440000000434612250371054023366 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004224.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004224 loop_ _publ_author_name 'Bayliss, P.' _publ_section_title ; Revised unit cell dimensions, space group, and chemical formua of some metallic minerals Note: cell edges taken from Handbook of Mineralogy ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 751 _journal_page_last 755 _journal_volume 28 _journal_year 1990 _chemical_formula_sum 'Bi Pd' _chemical_name_mineral Sobolevskite _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.23 _cell_length_b 4.23 _cell_length_c 5.69 _cell_volume 88.171 _exptl_crystal_density_diffrn 11.880 _cod_database_code 9004224 _amcsd_database_code AMCSD#0005209 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Bi 0.33333 0.66667 0.25000 Pd 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/intermetallics/Cu2MnAl-Heusler.cif0000644000175000001440000001057312250371054022706 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910083 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 260 from the second edition of Structure of Crystals by Wyckoff published by The Chemical Catalog Company, INC, New York in 1931 & http://cimesg1.epfl.ch/CIOLS/crystal2.pl ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 260 _journal_page_last 260 _journal_year 1931 _chemical_formula_structural AlCu2Mn _chemical_formula_sum 'Al Cu2 Mn' _space_group_IT_number 225 _symmetry_cell_setting cubic _symmetry_Int_Tables_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _audit_creation_date 2005-28-12 _audit_creation_method ; Page 260 from the second edition of Structure of Crystals by Wyckoff published by The Chemical Catalog Company, INC, New York in 1931 & http://cimesg1.epfl.ch/CIOLS/crystal2.pl ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.95 _cell_length_b 5.95 _cell_length_c 5.95 _cell_volume 210.645 _cod_database_code 5910083 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,-z,y x,z,-y z,y,-x -z,y,x -y,x,z y,-x,z z,x,y y,z,x -y,-z,x z,-x,-y -y,z,-x -z,-x,y -z,x,-y y,-z,-x x,-y,-z -x,y,-z -x,-y,z y,x,-z -y,-x,-z z,-y,x -z,-y,-x -x,z,y -x,-z,-y -x,-y,-z -x,z,-y -x,-z,y -z,-y,x z,-y,-x y,-x,-z -y,x,-z -z,-x,-y -y,-z,-x y,z,-x -z,x,y y,-z,x z,x,-y z,-x,y -y,z,x -x,y,z x,-y,z x,y,-z -y,-x,z y,x,z -z,y,-x z,y,x x,-z,-y x,z,y x,y+1/2,z+1/2 x,-z+1/2,y+1/2 x,z+1/2,-y+1/2 z,y+1/2,-x+1/2 -z,y+1/2,x+1/2 -y,x+1/2,z+1/2 y,-x+1/2,z+1/2 z,x+1/2,y+1/2 y,z+1/2,x+1/2 -y,-z+1/2,x+1/2 z,-x+1/2,-y+1/2 -y,z+1/2,-x+1/2 -z,-x+1/2,y+1/2 -z,x+1/2,-y+1/2 y,-z+1/2,-x+1/2 x,-y+1/2,-z+1/2 -x,y+1/2,-z+1/2 -x,-y+1/2,z+1/2 y,x+1/2,-z+1/2 -y,-x+1/2,-z+1/2 z,-y+1/2,x+1/2 -z,-y+1/2,-x+1/2 -x,z+1/2,y+1/2 -x,-z+1/2,-y+1/2 -x,-y+1/2,-z+1/2 -x,z+1/2,-y+1/2 -x,-z+1/2,y+1/2 -z,-y+1/2,x+1/2 z,-y+1/2,-x+1/2 y,-x+1/2,-z+1/2 -y,x+1/2,-z+1/2 -z,-x+1/2,-y+1/2 -y,-z+1/2,-x+1/2 y,z+1/2,-x+1/2 -z,x+1/2,y+1/2 y,-z+1/2,x+1/2 z,x+1/2,-y+1/2 z,-x+1/2,y+1/2 -y,z+1/2,x+1/2 -x,y+1/2,z+1/2 x,-y+1/2,z+1/2 x,y+1/2,-z+1/2 -y,-x+1/2,z+1/2 y,x+1/2,z+1/2 -z,y+1/2,-x+1/2 z,y+1/2,x+1/2 x,-z+1/2,-y+1/2 x,z+1/2,y+1/2 x+1/2,y,z+1/2 x+1/2,-z,y+1/2 x+1/2,z,-y+1/2 z+1/2,y,-x+1/2 -z+1/2,y,x+1/2 -y+1/2,x,z+1/2 y+1/2,-x,z+1/2 z+1/2,x,y+1/2 y+1/2,z,x+1/2 -y+1/2,-z,x+1/2 z+1/2,-x,-y+1/2 -y+1/2,z,-x+1/2 -z+1/2,-x,y+1/2 -z+1/2,x,-y+1/2 y+1/2,-z,-x+1/2 x+1/2,-y,-z+1/2 -x+1/2,y,-z+1/2 -x+1/2,-y,z+1/2 y+1/2,x,-z+1/2 -y+1/2,-x,-z+1/2 z+1/2,-y,x+1/2 -z+1/2,-y,-x+1/2 -x+1/2,z,y+1/2 -x+1/2,-z,-y+1/2 -x+1/2,-y,-z+1/2 -x+1/2,z,-y+1/2 -x+1/2,-z,y+1/2 -z+1/2,-y,x+1/2 z+1/2,-y,-x+1/2 y+1/2,-x,-z+1/2 -y+1/2,x,-z+1/2 -z+1/2,-x,-y+1/2 -y+1/2,-z,-x+1/2 y+1/2,z,-x+1/2 -z+1/2,x,y+1/2 y+1/2,-z,x+1/2 z+1/2,x,-y+1/2 z+1/2,-x,y+1/2 -y+1/2,z,x+1/2 -x+1/2,y,z+1/2 x+1/2,-y,z+1/2 x+1/2,y,-z+1/2 -y+1/2,-x,z+1/2 y+1/2,x,z+1/2 -z+1/2,y,-x+1/2 z+1/2,y,x+1/2 x+1/2,-z,-y+1/2 x+1/2,z,y+1/2 x+1/2,y+1/2,z x+1/2,-z+1/2,y x+1/2,z+1/2,-y z+1/2,y+1/2,-x -z+1/2,y+1/2,x -y+1/2,x+1/2,z y+1/2,-x+1/2,z z+1/2,x+1/2,y y+1/2,z+1/2,x -y+1/2,-z+1/2,x z+1/2,-x+1/2,-y -y+1/2,z+1/2,-x -z+1/2,-x+1/2,y -z+1/2,x+1/2,-y y+1/2,-z+1/2,-x x+1/2,-y+1/2,-z -x+1/2,y+1/2,-z -x+1/2,-y+1/2,z y+1/2,x+1/2,-z -y+1/2,-x+1/2,-z z+1/2,-y+1/2,x -z+1/2,-y+1/2,-x -x+1/2,z+1/2,y -x+1/2,-z+1/2,-y -x+1/2,-y+1/2,-z -x+1/2,z+1/2,-y -x+1/2,-z+1/2,y -z+1/2,-y+1/2,x z+1/2,-y+1/2,-x y+1/2,-x+1/2,-z -y+1/2,x+1/2,-z -z+1/2,-x+1/2,-y -y+1/2,-z+1/2,-x y+1/2,z+1/2,-x -z+1/2,x+1/2,y y+1/2,-z+1/2,x z+1/2,x+1/2,-y z+1/2,-x+1/2,y -y+1/2,z+1/2,x -x+1/2,y+1/2,z x+1/2,-y+1/2,z x+1/2,y+1/2,-z -y+1/2,-x+1/2,z y+1/2,x+1/2,z -z+1/2,y+1/2,-x z+1/2,y+1/2,x x+1/2,-z+1/2,-y x+1/2,z+1/2,y loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 Al 0.25000 0.25000 0.25000 Cu 0.50000 0.50000 0.50000 Mn avogadro-1.1.1/crystals/intermetallics/(Cu0.5Fe0.5)Pt-Tulameenite.cif0000644000175000001440000000426612250371054024271 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004219.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004219 loop_ _publ_author_name 'Bayliss, P.' _publ_section_title ; Revised unit cell dimensions, space group, and chemical formua of some metallic minerals ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 751 _journal_page_last 755 _journal_volume 28 _journal_year 1990 _chemical_formula_sum 'Cu0.5 Fe0.5 Pt' _chemical_name_mineral Tulameenite _space_group_IT_number 123 _symmetry_space_group_name_Hall '-P 4 2' _symmetry_space_group_name_H-M 'P 4/m m m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.7477 _cell_length_b 2.7477 _cell_length_c 3.5870 _cell_volume 27.081 _exptl_crystal_density_diffrn 15.622 _[local]_cod_chemical_formula_sum_orig '(Cu.5 Fe.5) Pt' _cod_database_code 9004219 _amcsd_database_code AMCSD#0005204 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z y,-x,-z -y,x,z x,-y,z -x,y,-z x,y,-z -x,-y,z y,x,z -y,-x,-z -y,x,-z y,-x,z -x,y,z x,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy Cu 0.50000 0.50000 0.50000 0.50000 Fe 0.50000 0.50000 0.50000 0.50000 Pt 0.00000 0.00000 0.00000 1.00000 avogadro-1.1.1/crystals/intermetallics/AuCu-Tetraauricupride.cif0000644000175000001440000000405712250371054024247 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004223.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004223 loop_ _publ_author_name 'Bayliss, P.' _publ_section_title ; Revised unit cell dimensions, space group, and chemical formua of some metallic minerals ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 751 _journal_page_last 755 _journal_volume 28 _journal_year 1990 _chemical_formula_sum 'Au Cu' _chemical_name_mineral Tetraauricupride _space_group_IT_number 123 _symmetry_space_group_name_Hall '-P 4 2' _symmetry_space_group_name_H-M 'P 4/m m m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.800 _cell_length_b 2.800 _cell_length_c 3.670 _cell_volume 28.773 _exptl_crystal_density_diffrn 15.035 _cod_database_code 9004223 _amcsd_database_code AMCSD#0005208 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z y,-x,-z -y,x,z x,-y,z -x,y,-z x,y,-z -x,-y,z y,x,z -y,-x,-z -y,x,-z y,-x,z -x,y,z x,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Au 0.00000 0.00000 0.00000 Cu 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/intermetallics/CoFe-Wairauite.cif0000644000175000001440000000443012250371054022637 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004229.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004229 loop_ _publ_author_name 'Bayliss, P.' _publ_section_title ; Revised unit cell dimensions, space group, and chemical formua of some metallic minerals ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 751 _journal_page_last 755 _journal_volume 28 _journal_year 1990 _chemical_formula_sum 'Co Fe' _chemical_name_mineral Wairauite _space_group_IT_number 221 _symmetry_space_group_name_Hall '-P 4 2 3' _symmetry_space_group_name_H-M 'P m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.857 _cell_length_b 2.857 _cell_length_c 2.857 _cell_volume 23.320 _exptl_crystal_density_diffrn 8.173 _cod_database_code 9004229 _amcsd_database_code AMCSD#0005214 loop_ _symmetry_equiv_pos_as_xyz x,y,z z,-x,y -y,z,-x x,-y,z -z,x,-y y,-z,x -x,y,-z x,-z,-y -z,y,x y,-x,-z -x,z,y z,-y,-x -y,x,z x,z,y -z,-y,-x y,x,z -x,-z,-y z,y,x -y,-x,-z z,x,-y -y,-z,x x,y,-z -z,-x,y y,z,-x -x,-y,z -z,x,y y,-z,-x -x,y,z z,-x,-y -y,z,x x,-y,-z -x,z,-y z,-y,x -y,x,-z x,-z,y -z,y,-x y,-x,z -x,-z,y z,y,-x -y,-x,z x,z,-y -z,-y,x y,x,-z -z,-x,-y y,z,x -x,-y,-z z,x,y -y,-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Co 0.00000 0.00000 0.00000 Fe 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/intermetallics/FePt-Tetraferroplatinum.cif0000644000175000001440000000406312250371054024620 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004222.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004222 loop_ _publ_author_name 'Bayliss, P.' _publ_section_title ; Revised unit cell dimensions, space group, and chemical formua of some metallic minerals ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 751 _journal_page_last 755 _journal_volume 28 _journal_year 1990 _chemical_formula_sum 'Fe Pt' _chemical_name_mineral Tetraferroplatinum _space_group_IT_number 123 _symmetry_space_group_name_Hall '-P 4 2' _symmetry_space_group_name_H-M 'P 4/m m m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.7235 _cell_length_b 2.7235 _cell_length_c 3.720 _cell_volume 27.593 _exptl_crystal_density_diffrn 15.101 _cod_database_code 9004222 _amcsd_database_code AMCSD#0005207 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z y,-x,-z -y,x,z x,-y,z -x,y,-z x,y,-z -x,-y,z y,x,z -y,-x,-z -y,x,-z y,-x,z -x,y,z x,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Fe 0.00000 0.00000 0.00000 Pt 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/intermetallics/Au3Cu-Bogdanovite.cif0000644000175000001440000000443712250371054023261 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004228.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004228 loop_ _publ_author_name 'Bayliss, P.' _publ_section_title ; Revised unit cell dimensions, space group, and chemical formua of some metallic minerals ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 751 _journal_page_last 755 _journal_volume 28 _journal_year 1990 _chemical_formula_sum 'Au3 Cu' _chemical_name_mineral Bogdanovite _space_group_IT_number 221 _symmetry_space_group_name_Hall '-P 4 2 3' _symmetry_space_group_name_H-M 'P m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.0876 _cell_length_b 4.0876 _cell_length_c 4.0876 _cell_volume 68.298 _exptl_crystal_density_diffrn 15.912 _cod_database_code 9004228 _amcsd_database_code AMCSD#0005213 loop_ _symmetry_equiv_pos_as_xyz x,y,z z,-x,y -y,z,-x x,-y,z -z,x,-y y,-z,x -x,y,-z x,-z,-y -z,y,x y,-x,-z -x,z,y z,-y,-x -y,x,z x,z,y -z,-y,-x y,x,z -x,-z,-y z,y,x -y,-x,-z z,x,-y -y,-z,x x,y,-z -z,-x,y y,z,-x -x,-y,z -z,x,y y,-z,-x -x,y,z z,-x,-y -y,z,x x,-y,-z -x,z,-y z,-y,x -y,x,-z x,-z,y -z,y,-x y,-x,z -x,-z,y z,y,-x -y,-x,z x,z,-y -z,-y,x y,x,-z -z,-x,-y y,z,x -x,-y,-z z,x,y -y,-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Au 0.00000 0.50000 0.50000 Cu 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/nitrides/0000755000175000001440000000000012250371054016211 5ustar marcususersavogadro-1.1.1/crystals/nitrides/GaN.cif0000644000175000001440000000366712250371054017355 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/88/9008868.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008868 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ga N' _chemical_name_mineral GaN _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.180 _cell_length_b 3.180 _cell_length_c 5.166 _cell_volume 45.242 _exptl_crystal_density_diffrn 6.146 _cod_database_code 9008868 _amcsd_database_code AMCSD#0011199 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ga 0.33333 0.66667 0.00000 N 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/nitrides/InN.cif0000644000175000001440000000366712250371054017374 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/88/9008869.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008869 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'In N' _chemical_name_mineral InN _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.533 _cell_length_b 3.533 _cell_length_c 5.693 _cell_volume 61.540 _exptl_crystal_density_diffrn 6.952 _cod_database_code 9008869 _amcsd_database_code AMCSD#0011200 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z In 0.33333 0.66667 0.00000 N 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/nitrides/BN.cif0000644000175000001440000000441212250371054017174 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910079 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Pages 224 from the second edition of Structure of Crystals by Wyckoff R W G.published by The Chemical Catalog Company, INC, New York in 1931 and http://cst-www.nrl.navy.mil/lattice. ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 224 _journal_page_last 224 _journal_year 1931 _chemical_formula_structural 'Boron Nitride' _chemical_formula_sum 'B N' _chemical_name_systematic 'Boron Nitride' _space_group_IT_number 194 _symmetry_cell_setting hexagonal _symmetry_Int_Tables_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _audit_creation_date 2005-26-10 _audit_creation_method ; Pages 224 from the second edition of Structure of Crystals by Wyckoff R W G.published by The Chemical Catalog Company, INC, New York in 1931 and http://cst-www.nrl.navy.mil/lattice. ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.51 _cell_length_b 2.51 _cell_length_c 6.69 _cell_volume 36.501 _[local]_cod_cif_authors_sg_H-M 'P63/m m c' _cod_database_code 5910079 loop_ _symmetry_equiv_pos_as_xyz x,y,z x-y,x,z+1/2 y,-x+y,z+1/2 -y,x-y,z -x+y,-x,z x-y,-y,-z -x,-x+y,-z -x,-y,z+1/2 y,x,-z -y,-x,-z+1/2 -x+y,y,-z+1/2 x,x-y,-z+1/2 -x,-y,-z -x+y,-x,-z+1/2 -y,x-y,-z+1/2 y,-x+y,-z x-y,x,-z -x+y,y,z x,x-y,z x,y,-z+1/2 -y,-x,z y,x,z+1/2 x-y,-y,z+1/2 -x,-x+y,z+1/2 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000000 0.00000000 0.00000000 N1 0.00000000 0.00000000 0.50000000 N2 0.33333333 0.66666667 0.10000000 B1 0.66666667 0.33333333 0.60000000 B2 avogadro-1.1.1/crystals/nitrides/Si3N4-beta.cif0000644000175000001440000000426312250371054020452 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1001248.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1001248 _chemical_name_systematic 'Silicon nitride - $-beta' _chemical_formula_structural 'Si3 N4' _chemical_formula_sum 'N4 Si3' _publ_section_title ; Modifications structurales du nitrure de silicium en fonction de la temperature ; loop_ _publ_author_name 'Billy, M' 'Labbe, J C' 'Selvaraj, A' 'Roult, G' _journal_name_full 'Materials Research Bulletin' _journal_coden_ASTM MRBUAC _journal_volume 18 _journal_year 1983 _journal_page_first 921 _journal_page_last 934 _cell_length_a 7.6322(6) _cell_length_b 7.6322(6) _cell_length_c 2.9191(4) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 147.3 _cell_formula_units_Z 2 _symmetry_space_group_name_H-M 'P 63/m' _symmetry_Int_Tables_number 176 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-y,x-y,z' 'y-x,-x,z' '-x,-y,1/2+z' 'y,y-x,1/2+z' 'x-y,x,1/2+z' '-x,-y,-z' 'y,y-x,-z' 'x-y,x,-z' 'x,y,1/2-z' '-y,x-y,1/2-z' 'y-x,-x,1/2-z' loop_ _atom_type_symbol _atom_type_oxidation_number N3- -3.000 Si4+ 4.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag N1 N3- 2 c 0.3333 0.6667 0.25 1. 0 d N2 N3- 6 h 0.3394 0.0362 0.25 1. 0 d Si1 Si4+ 6 h 0.1952 0.7656 0.25 1. 0 d _cod_database_code 1001248 avogadro-1.1.1/crystals/nitrides/AlN.cif0000644000175000001440000000366712250371054017362 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/88/9008860.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008860 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Al N' _chemical_name_mineral AlN _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.111 _cell_length_b 3.111 _cell_length_c 4.978 _cell_volume 41.724 _exptl_crystal_density_diffrn 3.263 _cod_database_code 9008860 _amcsd_database_code AMCSD#0011191 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al 0.33333 0.66667 0.00000 N 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/sulfides/0000755000175000001440000000000012250371054016206 5ustar marcususersavogadro-1.1.1/crystals/sulfides/FeS.cif0000644000175000001440000000405012250371054017345 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008893.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008893 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ideal nickel arsenide structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Fe S' _chemical_name_mineral FeS _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.43 _cell_length_b 3.43 _cell_length_c 5.68 _cell_volume 57.872 _exptl_crystal_density_diffrn 5.045 _cod_database_code 9008893 _amcsd_database_code AMCSD#0011224 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Fe 0.00000 0.00000 0.00000 S 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/sulfides/ZnS-Wurtzite-2H.cif0000644000175000001440000000412412250371054021506 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008878.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008878 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'S Zn' _chemical_name_mineral Wurtzite-2H _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.811 _cell_length_b 3.811 _cell_length_c 6.234 _cell_volume 78.411 _exptl_crystal_density_diffrn 4.128 _[local]_cod_chemical_formula_sum_orig 'Zn S' _cod_database_code 9008878 _amcsd_database_code AMCSD#0011209 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zn 0.33333 0.66667 0.00000 S 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/sulfides/Sb2S3-Stibnite.cif0000644000175000001440000000417712250371054021315 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/01/14/9011416.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9011416 loop_ _publ_author_name 'Scavnicar, S.' _publ_section_title ; The crystal structure of stibnite. A redetermination of atomic positions Locality: synthetic ; _journal_name_full 'Zeitschrift fur Kristallographie' _journal_page_first 85 _journal_page_last 97 _journal_volume 114 _journal_year 1960 _chemical_formula_sum 'S3 Sb2' _chemical_name_mineral Stibnite _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2c 2ab' _symmetry_space_group_name_H-M 'P b n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 11.25 _cell_length_b 11.33 _cell_length_c 3.83 _cell_volume 488.181 _exptl_crystal_density_diffrn 4.622 _[local]_cod_chemical_formula_sum_orig 'Sb2 S3' _cod_database_code 9011416 _amcsd_database_code AMCSD#0010265 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,y,1/2-z -x,-y,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Sb1 0.32600 0.03000 0.25000 0.01862 Sb2 0.03600 0.14900 0.75000 0.01862 S1 0.87900 0.05400 0.25000 0.01862 S2 0.44000 0.13000 0.75000 0.01862 S3 0.19000 0.21300 0.25000 0.01862 avogadro-1.1.1/crystals/sulfides/Bi2S3-Bismuthinite.cif0000644000175000001440000000505412250371054022161 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/73/9007375.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9007375 loop_ _publ_author_name 'Caracas, R.' 'Gonze, X.' _publ_section_title ; First-principles study of the electronic properties of A2B3 minerals, with A=Bi,Sb and B=S,Se Note: Hypothetical sulphosalt structure derived from density functional theory ; _journal_name_full 'Physics and Chemistry of Minerals' _journal_page_first 295 _journal_page_last 300 _journal_volume 32 _journal_year 2005 _chemical_formula_sum 'Bi2 S3' _chemical_name_mineral Bismuthinite _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2ac 2n' _symmetry_space_group_name_H-M 'P n m a' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 11.305 _cell_length_b 3.981 _cell_length_c 11.147 _cell_volume 501.673 _exptl_crystal_density_diffrn 6.807 _cod_database_code 9007375 _amcsd_database_code AMCSD#0008907 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,z -x,1/2+y,-z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z 1/2+x,y,1/2-z 1/2-x,-y,1/2+z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Bi1 0.51650 0.25000 0.17480 Bi2 0.65960 0.75000 0.46550 S1 0.62300 0.75000 0.05750 S2 0.71530 0.25000 0.30630 S3 0.45080 0.75000 0.37300 0000 S1 0.01600 0.01300 0.01300 0.00000 -0.00200 0.00000 S2 0.01800 0.01900 0.01400 0.00000 0.00100 0.00000 S3 0.01700 0.01800 0.01300 0.00000 -0.00200 0.00000 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Bi1 0.48339 0.25000 0.32581 0.01849 Bi2 0.34069 0.75000 0.03429 0.02001 S1 0.28540 0.25000 0.19410 0.01418 S2 0.55000 0.75000 0.12840 0.01672 S3 0.37560 0.75000 0.44230 0.01608 avogadro-1.1.1/crystals/sulfides/CdS-Greenockite.cif0000644000175000001440000000405112250371054021577 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008862.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008862 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cd S' _chemical_name_mineral Greenockite _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.1348 _cell_length_b 4.1348 _cell_length_c 6.7490 _cell_volume 99.926 _exptl_crystal_density_diffrn 4.802 _cod_database_code 9008862 _amcsd_database_code AMCSD#0011193 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cd 0.33333 0.66667 0.00000 S 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/sulfides/FeS2-Pyrite.cif0000644000175000001440000000460212250371054020704 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/5/5000115.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_5000115 _chemical_name_systematic 'Iron persulfide' _chemical_name_mineral 'Pyrite' _chemical_formula_structural 'Fe S2' _chemical_formula_sum 'Fe S2' _publ_section_title ; Redetermined crystal structure of Fe S2 (pyrite) ; loop_ _publ_author_name 'Brostigen, G' 'Kjekshus, A' _journal_name_full ; Acta Chemica Scandinavica (1-27,1973-42,1988) ; _journal_volume 23 _journal_year 1969 _journal_page_first 2186 _journal_page_last 2188 _cell_length_a 5.4179(11) _cell_length_b 5.4179(11) _cell_length_c 5.4179(11) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 159.0 _cell_formula_units_Z 4 _exptl_crystal_density_meas 5.02 _symmetry_space_group_name_H-M 'P a -3' _symmetry_Int_Tables_number 205 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,-y,1/2+z' 'y,z,x' '1/2-y,-z,1/2+x' '1/2+y,1/2-z,-x' '-y,1/2+z,1/2-x' 'z,x,y' '-z,1/2+x,1/2-y' '1/2-z,-x,1/2+y' '1/2+z,1/2-x,-y' '-x,-y,-z' '1/2-x,1/2+y,z' 'x,1/2-y,1/2+z' '1/2+x,y,1/2-z' '-y,-z,-x' '1/2+y,z,1/2-x' '1/2-y,1/2+z,x' 'y,1/2-z,1/2+x' '-z,-x,-y' 'z,1/2-x,1/2+y' '1/2+z,x,1/2-y' '1/2-z,1/2+x,y' loop_ _atom_type_symbol _atom_type_oxidation_number Fe2+ 2.000 S1- -1.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Fe1 Fe2+ 4 a 0. 0. 0. 1. 0 d S1 S1- 8 c 0.3840(5) 0.3840(5) 0.3840(5) 1. 0 d _refine_ls_R_factor_all 0.075 _cod_database_code 5000115 avogadro-1.1.1/crystals/sulfides/ZnS-Sphalerite.cif0000644000175000001440000000623212250371054021504 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9000107.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9000107 loop_ _publ_author_name 'Skinner, B. J.' _publ_section_title ; Unit-cell edges of natural and synthetic sphalerites Locality: synthetic ; _journal_name_full 'American Mineralogist' _journal_page_first 1399 _journal_page_last 1411 _journal_volume 46 _journal_year 1961 _chemical_formula_sum 'S Zn' _chemical_name_mineral Sphalerite _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.4093 _cell_length_b 5.4093 _cell_length_c 5.4093 _cell_volume 158.279 _exptl_crystal_density_diffrn 4.090 _[local]_cod_chemical_formula_sum_orig 'Zn S' _cod_database_code 9000107 _amcsd_database_code AMCSD#0000109 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zn 0.00000 0.00000 0.00000 S 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/sulfides/HgS-Metacinnabar.cif0000644000175000001440000000620712250371054021741 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008848.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008848 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Hg S' _chemical_name_mineral Metacinnabar _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.8517 _cell_length_b 5.8517 _cell_length_c 5.8517 _cell_volume 200.376 _exptl_crystal_density_diffrn 7.712 _cod_database_code 9008848 _amcsd_database_code AMCSD#0011179 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Hg 0.00000 0.00000 0.00000 S 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/sulfides/ZnS-Zincblende.cif0000644000175000001440000000623212250371054021461 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9000107.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9000107 loop_ _publ_author_name 'Skinner, B. J.' _publ_section_title ; Unit-cell edges of natural and synthetic sphalerites Locality: synthetic ; _journal_name_full 'American Mineralogist' _journal_page_first 1399 _journal_page_last 1411 _journal_volume 46 _journal_year 1961 _chemical_formula_sum 'S Zn' _chemical_name_mineral Sphalerite _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.4093 _cell_length_b 5.4093 _cell_length_c 5.4093 _cell_volume 158.279 _exptl_crystal_density_diffrn 4.090 _[local]_cod_chemical_formula_sum_orig 'Zn S' _cod_database_code 9000107 _amcsd_database_code AMCSD#0000109 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zn 0.00000 0.00000 0.00000 S 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/sulfides/PbS-Galena.cif0000644000175000001440000001053512250371054020546 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008694.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008694 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Pb S' _chemical_name_mineral Galena _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.9362 _cell_length_b 5.9362 _cell_length_c 5.9362 _cell_volume 209.183 _exptl_crystal_density_diffrn 7.597 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008694 _amcsd_database_code AMCSD#0011025 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pb 0.00000 0.00000 0.00000 S 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/sulfides/CdS-Hawleyite.cif0000644000175000001440000000620112250371054021272 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008839.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008839 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cd S' _chemical_name_mineral Hawleyite _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.818 _cell_length_b 5.818 _cell_length_c 5.818 _cell_volume 196.934 _exptl_crystal_density_diffrn 4.873 _cod_database_code 9008839 _amcsd_database_code AMCSD#0011170 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cd 0.00000 0.00000 0.00000 S 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/sulfides/SnS-Herzenbergite.cif0000644000175000001440000000404412250371054022171 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008785.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008785 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'S Sn' _chemical_name_mineral Herzenbergite _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2c 2ab' _symmetry_space_group_name_H-M 'P b n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.33 _cell_length_b 11.18 _cell_length_c 3.98 _cell_volume 192.669 _exptl_crystal_density_diffrn 5.198 _[local]_cod_chemical_formula_sum_orig 'Sn S' _cod_database_code 9008785 _amcsd_database_code AMCSD#0011116 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,y,1/2-z -x,-y,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sn 0.11500 0.11800 0.25000 S 0.47800 -0.15000 0.25000 avogadro-1.1.1/crystals/carbonates/0000755000175000001440000000000012250371054016511 5ustar marcususersavogadro-1.1.1/crystals/carbonates/Li2CO3-Zabuyelite.cif0000644000175000001440000000476312250371054022254 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008283.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008283 loop_ _publ_author_name 'Effenberger, H.' 'Zemann, J.' _publ_section_title ; Verfeinerung der kristallstruktur des lithiumkarbonates, Li2CO3 ; _journal_name_full 'Zeitschrift fur Kristallographie' _journal_page_first 133 _journal_page_last 138 _journal_volume 150 _journal_year 1979 _chemical_formula_sum 'C Li2 O3' _chemical_name_mineral Zabuyelite _space_group_IT_number 15 _symmetry_space_group_name_Hall '-C 2yc' _symmetry_space_group_name_H-M 'C 1 2/c 1' _cell_angle_alpha 90 _cell_angle_beta 114.83 _cell_angle_gamma 90 _cell_length_a 8.3593 _cell_length_b 4.9725 _cell_length_c 6.1975 _cell_volume 233.795 _exptl_crystal_density_diffrn 2.099 _[local]_cod_chemical_formula_sum_orig 'Li2 C O3' _cod_database_code 9008283 _amcsd_database_code AMCSD#0010487 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,z x,-y,1/2+z 1/2+x,1/2-y,1/2+z -x,y,1/2-z 1/2-x,1/2+y,1/2-z -x,-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Li 0.01545 0.01741 0.01779 0.00134 0.00735 0.00156 C 0.01021 0.01177 0.00817 0.00000 0.00411 0.00000 O1 0.01370 0.00752 0.03109 0.00000 0.00800 0.00000 O2 0.01079 0.01215 0.01635 0.00306 0.00519 0.00142 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Li 0.19650 0.44840 0.83440 C 0.00000 0.06570 0.25000 O1 0.00000 0.32130 0.25000 O2 0.14590 -0.06350 0.31270 avogadro-1.1.1/crystals/carbonates/Na2CO3-Natrite.cif0000644000175000001440000000542512250371054021533 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9011304.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9011304 loop_ _publ_author_name 'Dusek, M.' 'Chapuis, G.' 'Meyer, M.' 'Petricek, V.' _publ_section_title ; Sodium carbonate revisited Locality: synthetic Sample: Gamma phase, T = 295 K ; _journal_name_full 'Acta Crystallographica, Section B' _journal_page_first 337 _journal_page_last 352 _journal_volume 59 _journal_year 2003 _chemical_formula_sum 'C Na2 O3' _chemical_name_mineral Natrite _space_group_IT_number 12 _symmetry_space_group_name_Hall '-C 2y' _symmetry_space_group_name_H-M 'C 1 2/m 1' _cell_angle_alpha 90 _cell_angle_beta 101.35 _cell_angle_gamma 90 _cell_length_a 8.920 _cell_length_b 5.245 _cell_length_c 6.050 _cell_volume 277.516 _diffrn_ambient_temperature 295 _exptl_crystal_density_diffrn 2.537 _[local]_cod_chemical_formula_sum_orig 'Na2 C O3' _cod_database_code 9011304 _amcsd_database_code AMCSD#0009711 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,z x,-y,z 1/2+x,1/2-y,z -x,y,-z 1/2-x,1/2+y,-z -x,-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Na1 0.01757 0.01860 0.01713 0.00000 0.00672 0.00000 Na2 0.01919 0.01561 0.01686 0.00000 0.00714 0.00000 Na3 0.02174 0.02568 0.03070 0.00000 0.00888 0.00000 C 0.01110 0.01219 0.01190 0.00000 0.00370 0.00000 O1 0.03180 0.01881 0.02990 -0.00956 0.01172 0.00055 O2 0.01480 0.03240 0.02370 0.00000 0.01040 0.00000 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Na1 0.00000 0.00000 0.00000 0.01731 Na2 0.00000 0.00000 0.50000 0.01673 Na3 0.17055 0.50000 0.74801 0.02554 C 0.16446 0.50000 0.24914 0.01155 O1 0.10159 0.29384 0.28535 0.02607 O2 0.28987 0.50000 0.17757 0.02274 avogadro-1.1.1/crystals/carbonates/CaMgC2O6-Dolomite.cif0000644000175000001440000000542612250371054022156 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9001004.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9001004 loop_ _publ_author_name 'Reeder, R. J.' 'Markgraf, S. A.' _publ_section_title ; High-temperature crystal chemistry of dolomite Sample: Anisotropic refinement, Temperature = 24 deg C ; _journal_name_full 'American Mineralogist' _journal_page_first 795 _journal_page_last 804 _journal_volume 71 _journal_year 1986 _chemical_formula_sum 'C2 Ca Mg O6' _chemical_name_mineral Dolomite _space_group_IT_number 148 _symmetry_space_group_name_Hall '-R 3' _symmetry_space_group_name_H-M 'R -3 :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.8069 _cell_length_b 4.8069 _cell_length_c 16.002 _cell_volume 320.210 _diffrn_ambient_temperature 297.15 _exptl_crystal_density_diffrn 2.869 _[local]_cod_cif_authors_sg_H-M 'R -3' _[local]_cod_chemical_formula_sum_orig 'Ca Mg C2 O6' _cod_database_code 9001004 _amcsd_database_code AMCSD#0001025 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Ca 0.00975 0.00975 0.00986 0.00487 0.00000 0.00000 Mg 0.00711 0.00711 0.00960 0.00356 0.00000 0.00000 C 0.00860 0.00860 0.00895 0.00430 0.00000 0.00000 O 0.00939 0.01299 0.01531 0.00729 -0.00199 -0.00331 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ca 0.00000 0.00000 0.00000 Mg 0.00000 0.00000 0.50000 C 0.00000 0.00000 0.24289 O 0.24800 -0.03540 0.24393 avogadro-1.1.1/crystals/carbonates/CaCO3-Calcite.cif0000644000175000001440000000547412250371054021400 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009668.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009668 loop_ _publ_author_name 'Sitepu, H.' 'O'Connor B H' 'Li, D.' _publ_section_title ; Comparative evaluation of the March and generalized spherical harmonic preferred orientation models using X-ray diffraction data for molybdite and calcite powders Note: GSH model Locality: synthetic ; _journal_name_full 'Journal of Applied Crystallography' _journal_page_first 158 _journal_page_last 167 _journal_volume 38 _journal_year 2005 _chemical_formula_sum 'C Ca O3' _chemical_name_mineral Calcite _space_group_IT_number 167 _symmetry_space_group_name_Hall '-R 3 2"c' _symmetry_space_group_name_H-M 'R -3 c :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.9920 _cell_length_b 4.9920 _cell_length_c 17.069 _cell_volume 368.373 _exptl_crystal_density_diffrn 2.707 _[local]_cod_cif_authors_sg_H-M 'R -3 c' _[local]_cod_chemical_formula_sum_orig 'Ca C O3' _cod_database_code 9009668 _amcsd_database_code AMCSD#0012500 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z x,x-y,1/2+z 2/3+x,1/3+x-y,5/6+z 1/3+x,2/3+x-y,1/6+z y,x,1/2-z 2/3+y,1/3+x,5/6-z 1/3+y,2/3+x,1/6-z -x+y,y,1/2+z 2/3-x+y,1/3+y,5/6+z 1/3-x+y,2/3+y,1/6+z -x,-x+y,1/2-z 2/3-x,1/3-x+y,5/6-z 1/3-x,2/3-x+y,1/6-z -y,-x,1/2+z 2/3-y,1/3-x,5/6+z 1/3-y,2/3-x,1/6+z x-y,-y,1/2-z 2/3+x-y,1/3-y,5/6-z 1/3+x-y,2/3-y,1/6-z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Ca 0.00000 0.00000 0.00000 0.01525 C 0.00000 0.00000 0.25000 0.02084 O 0.25000 0.00000 0.25000 0.02084 avogadro-1.1.1/crystals/carbonates/MgCO3-Magnesite.cif0000644000175000001440000000311612250371054021757 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. data_5910029 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 275 from the second edition of Structure of Crystals by Wyckoff published by The Chemical Catalog Company, INC, New York in 1931 & http://www.crystallography.net/ ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 275 _journal_page_last 275 _journal_year 1931 _chemical_formula_structural MgCO3 _chemical_formula_sum 'C Mg O3' _symmetry_cell_setting trigonal _symmetry_Int_Tables_number 167 _symmetry_space_group_name_H-M 'R -3 c' _audit_creation_date 2005-28-12 _audit_creation_method ; Page 275 from the second edition of Structure of Crystals by Wyckoff published by The Chemical Catalog Company, INC, New York in 1931 & http://www.crystallography.net/ ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 47.36 _cell_angle_beta 47.36 _cell_angle_gamma 47.36 _cell_length_a 5.87 _cell_length_b 5.87 _cell_length_c 5.87 _cell_volume 100.131 _[local]_cod_chemical_formula_sum_orig 'Mg C O3' _cod_database_code 5910029 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.25000 0.25000 0.25000 Mg 0.00000 0.00000 0.00000 C 0.23940 -0.23940 0.00000 O avogadro-1.1.1/crystals/carbides/0000755000175000001440000000000012250371054016144 5ustar marcususersavogadro-1.1.1/crystals/carbides/SiC-3C-beta.cif0000644000175000001440000000625012250371054020464 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008856.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008856 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'C Si' _chemical_name_mineral SiC _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.348 _cell_length_b 4.348 _cell_length_c 4.348 _cell_volume 82.199 _exptl_crystal_density_diffrn 3.240 _[local]_cod_chemical_formula_sum_orig 'Si C' _cod_database_code 9008856 _amcsd_database_code AMCSD#0011187 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si 0.00000 0.00000 0.00000 C 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/carbides/SiC-Moissanite.cif0000644000175000001440000000412312250371054021416 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008875.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008875 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'C Si' _chemical_name_mineral Moissanite _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.076 _cell_length_b 3.076 _cell_length_c 5.048 _cell_volume 41.364 _exptl_crystal_density_diffrn 3.219 _[local]_cod_chemical_formula_sum_orig 'Si C' _cod_database_code 9008875 _amcsd_database_code AMCSD#0011206 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si 0.33333 0.66667 0.00000 C 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/carbides/SiC.cif0000644000175000001440000000625012250371054017310 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008856.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008856 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'C Si' _chemical_name_mineral SiC _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.348 _cell_length_b 4.348 _cell_length_c 4.348 _cell_volume 82.199 _exptl_crystal_density_diffrn 3.240 _[local]_cod_chemical_formula_sum_orig 'Si C' _cod_database_code 9008856 _amcsd_database_code AMCSD#0011187 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si 0.00000 0.00000 0.00000 C 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/carbides/SiC-2H-Moissanite.cif0000644000175000001440000000412312250371054021665 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008875.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008875 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'C Si' _chemical_name_mineral Moissanite _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.076 _cell_length_b 3.076 _cell_length_c 5.048 _cell_volume 41.364 _exptl_crystal_density_diffrn 3.219 _[local]_cod_chemical_formula_sum_orig 'Si C' _cod_database_code 9008875 _amcsd_database_code AMCSD#0011206 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si 0.33333 0.66667 0.00000 C 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/carbides/W2C.cif0000644000175000001440000000342312250371054017224 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910041 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 239 from the second edition of Structure of Crystals by Wyckoff. published by The Chemical Catalog Company, INC, New York in 1931 & www.mse.berkeley.edu/classes/matsci102/W2C.pdf ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 239 _journal_page_last 239 _journal_year 1931 _chemical_formula_structural W2C _chemical_formula_sum 'C W2' _symmetry_cell_setting trigonal _symmetry_Int_Tables_number 147 _symmetry_space_group_name_H-M 'P -3' _audit_creation_date 2005-11-12 _audit_creation_method ; Page 239 from the second edition of Structure of Crystals by Wyckoff. published by The Chemical Catalog Company, INC, New York in 1931 & www.mse.berkeley.edu/classes/matsci102/W2C.pdf ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.99 _cell_length_b 2.99 _cell_length_c 4.72 _cell_volume 42.197 _[local]_cod_chemical_formula_sum_orig 'W2 C' _cod_database_code 5910041 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 C 0.33333 0.66667 0.25000 W1 0.66667 0.33333 0.75000 W2 avogadro-1.1.1/crystals/carbides/SiC-6H-alpha.cif0000644000175000001440000000445612250371054020654 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2011-06-11 06:04:15 +0000 (Sat, 11 Jun 2011) $ #$Revision: 20519 $ #$URL: file:///home/coder/svn-repositories/cod/cif/1/1011053.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1011053 _chemical_name_systematic 'Silicon carbide - II.' _chemical_name_mineral 'Moissanite 6H' _chemical_formula_structural 'Si C' _chemical_formula_sum 'Si C' _publ_section_title ; Die Gitterstruktur des Karborunds ( Si C ) I. ; loop_ _publ_author_name 'Ott, H' _journal_name_full ; Zeitschrift fuer Kristallographie, Kristallgeometrie, Kristallphysik, Kristallchemie (-144,1977) ; _journal_coden_ASTM ZEKGAX _journal_volume 61 _journal_year 1925 _journal_page_first 515 _journal_page_last 531 _cell_length_a 3.095 _cell_length_b 3.095 _cell_length_c 15.17 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 125.8 _cell_formula_units_Z 6 _exptl_crystal_density_meas 3.12 _symmetry_space_group_name_H-M 'P 63' _symmetry_Int_Tables_number 173 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-y,x-y,z' 'y-x,-x,z' '-x,-y,1/2+z' 'y,y-x,1/2+z' 'x-y,x,1/2+z' loop_ _atom_type_symbol _atom_type_oxidation_number C4- -4.000 Si4+ 4.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag C1 C4- 2 a 0. 0. 0. 1. 0 d C2 C4- 2 b 0.3333 0.6667 0.1667 1. 0 d C3 C4- 2 b 0.3333 0.6667 0.8333 1. 0 d Si1 Si4+ 2 a 0. 0. 0.125 1. 0 d Si2 Si4+ 2 b 0.3333 0.6667 0.2917 1. 0 d Si3 Si4+ 2 b 0.3333 0.6667 0.9583 1. 0 d _cod_database_code 1011053 avogadro-1.1.1/crystals/carbides/WC.cif0000644000175000001440000000407412250371054017145 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9007456.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9007456 loop_ _publ_author_name 'Leciejewicz, J.' _publ_section_title ; A note on the structure of tungsten carbide ; _journal_name_full 'Acta Crystallographica' _journal_page_first 200 _journal_page_last 200 _journal_volume 14 _journal_year 1961 _chemical_formula_sum 'C W' _chemical_name_mineral WC _space_group_IT_number 187 _symmetry_space_group_name_Hall 'P -6 2' _symmetry_space_group_name_H-M 'P -6 m 2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.9065 _cell_length_b 2.9065 _cell_length_c 2.8366 _cell_volume 20.752 _exptl_crystal_density_diffrn 15.672 _[local]_cod_chemical_formula_sum_orig 'W C' _cod_database_code 9007456 _amcsd_database_code AMCSD#0009183 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,x-y,-z -x+y,-x,-z -y,-x,z -y,x-y,z -x+y,y,-z x,y,-z x,x-y,z -x+y,-x,z -y,-x,-z -y,x-y,-z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv W 0.00000 0.00000 0.00000 0.01406 C 0.66667 0.33333 0.50000 0.01406 avogadro-1.1.1/crystals/phosphides/0000755000175000001440000000000012250371054016536 5ustar marcususersavogadro-1.1.1/crystals/phosphides/GaP.cif0000644000175000001440000000617612250371054017702 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008846.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008846 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ga P' _chemical_name_mineral GaP _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.4505 _cell_length_b 5.4505 _cell_length_c 5.4505 _cell_volume 161.923 _exptl_crystal_density_diffrn 4.131 _cod_database_code 9008846 _amcsd_database_code AMCSD#0011177 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ga 0.00000 0.00000 0.00000 P 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/phosphides/BP.cif0000644000175000001440000000616712250371054017534 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008835.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008835 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'B P' _chemical_name_mineral BP _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.538 _cell_length_b 4.538 _cell_length_c 4.538 _cell_volume 93.453 _exptl_crystal_density_diffrn 2.970 _cod_database_code 9008835 _amcsd_database_code AMCSD#0011166 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z B 0.00000 0.00000 0.00000 P 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/phosphides/AlP.cif0000644000175000001440000000617312250371054017704 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008831.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008831 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Al P' _chemical_name_mineral AlP _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.451 _cell_length_b 5.451 _cell_length_c 5.451 _cell_volume 161.968 _exptl_crystal_density_diffrn 2.377 _cod_database_code 9008831 _amcsd_database_code AMCSD#0011162 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al 0.00000 0.00000 0.00000 P 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/phosphides/InP.cif0000644000175000001440000000617612250371054017721 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008852.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008852 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'In P' _chemical_name_mineral InP _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.8687 _cell_length_b 5.8687 _cell_length_c 5.8687 _cell_volume 202.128 _exptl_crystal_density_diffrn 4.791 _cod_database_code 9008852 _amcsd_database_code AMCSD#0011183 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z In 0.00000 0.00000 0.00000 P 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/clays/0000755000175000001440000000000012250371054015503 5ustar marcususersavogadro-1.1.1/crystals/clays/Al2Si2O9H4-Kaolinite.cif0000644000175000001440000000237212250371054021507 0ustar marcususersdata_global _chemical_name_mineral 'Kaolinite' loop_ _publ_author_name 'Bish D L' 'Von Dreele R B' _journal_name_full 'Clays and Clay Minerals' _journal_volume 37 _journal_year 1989 _journal_page_first 289 _journal_page_last 296 _publ_section_title ; Rietveld refinement of non-hydrogen atomic positions in kaolinite Note: clay ; _database_code_amcsd 0012232 _chemical_compound_source 'Keokuk, Iowa, USA' _chemical_formula_sum 'Al2 Si2 O9 H4' _cell_length_a 5.1554 _cell_length_b 8.9448 _cell_length_c 7.4048 _cell_angle_alpha 91.700 _cell_angle_beta 104.862 _cell_angle_gamma 89.822 _cell_volume 329.893 _exptl_crystal_density_diffrn 2.599 _symmetry_space_group_name_H-M 'C 1' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al1 0.29710 0.49570 0.47210 Al2 0.79260 0.33000 0.46990 Si1 0.99420 0.33930 0.09090 Si2 0.50640 0.16650 0.09130 O1 0.05010 0.35390 0.31700 O2 0.12140 0.66040 0.31750 O3 0.00000 0.50000 0.00000 O4 0.20850 0.23050 0.02470 O5 0.20120 0.76570 0.00320 O-H1 0.05100 0.96980 0.32200 O-H2 0.96490 0.16650 0.60510 O-H3 0.03480 0.47690 0.60800 O-H4 0.03340 0.85700 0.60940 avogadro-1.1.1/crystals/clays/Mg2Al2SiO9H4-Amesite.cif0000644000175000001440000001305312250371054021441 0ustar marcususersdata_global _chemical_name_mineral 'Amesite' loop_ _publ_author_name 'Zheng H' 'Bailey S W' _journal_name_full 'Clays and Clay Minerals' _journal_volume 45 _journal_year 1997 _journal_page_first 301 _journal_page_last 310 _publ_section_title ; Refinement of an amesite-2H1 polytype from Postmasburg, South Africa Note: polytype 2H1 ; _database_code_amcsd 0018811 _chemical_compound_source 'Postmasburg, South Africa' _chemical_formula_sum 'Mg2 Al2 Si O9 H4' _cell_length_a 5.299 _cell_length_b 9.181 _cell_length_c 14.050 _cell_angle_alpha 90.06 _cell_angle_beta 90.30 _cell_angle_gamma 90.00 _cell_volume 683.524 _exptl_crystal_density_diffrn 2.708 _symmetry_space_group_name_H-M 'C 1' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv MgM1 0.16990 0.16950 0.23410 0.87000 0.00760 AlM1 0.16990 0.16950 0.23410 0.13000 0.00760 AlM2 0.66630 0.00070 0.23410 0.62000 0.00920 MgM2 0.66630 0.00070 0.23410 0.38000 0.00920 MgM3 0.66970 0.33220 0.23450 0.85000 0.00820 AlM3 0.66970 0.33220 0.23450 0.15000 0.00820 SiT1 0.50000 0.16670 0.03830 0.72000 0.00840 AlT1 0.50000 0.16670 0.03830 0.28000 0.00840 AlT2 0.00120 0.33600 0.03880 0.72000 0.01100 SiT2 0.00120 0.33600 0.03880 0.28000 0.01100 O1 0.49700 0.16320 0.15820 1.00000 0.00800 O2 -0.00300 0.33750 0.16140 1.00000 0.01100 O3 0.58400 0.00360 -0.00230 1.00000 0.01600 O4 0.21500 0.21200 -0.00360 1.00000 0.01600 O5 0.70700 0.29200 0.00170 1.00000 0.02000 O-h1 -0.01100 -0.00100 0.16150 1.00000 0.01100 O-h2 0.33000 -0.00300 0.30300 1.00000 0.02400 O-h3 0.32600 0.33600 0.30290 1.00000 0.02200 O-h4 -0.17300 0.15900 0.30300 1.00000 0.01800 AlM11 0.34060 0.33480 0.73420 0.50000 0.00810 MgM11 0.34060 0.33480 0.73420 0.50000 0.00810 MgM22 0.34300 0.00300 0.73450 0.90000 0.00890 AlM22 0.34300 0.00300 0.73450 0.10000 0.00890 AlM33 0.84090 0.17060 0.73430 0.50000 0.00810 MgM33 0.84090 0.17060 0.73430 0.50000 0.00810 AlT11 0.50970 0.17060 0.53900 0.72000 0.01200 SiT11 0.50970 0.17060 0.53900 0.28000 0.01200 SiT22 0.00830 0.33440 0.53860 0.72000 0.01000 AlT22 0.00830 0.33440 0.53860 0.28000 0.01000 Oll 0.51900 0.17800 0.66200 1.00000 0.01200 O22 0.01800 0.33300 0.65810 1.00000 0.01400 O33 0.42900 0.00030 0.50010 1.00000 0.01400 O44 0.29000 0.29000 0.49600 1.00000 0.01500 O55 0.79900 0.21300 0.49720 1.00000 0.02200 O-hll 0.00700 0.00400 0.66270 1.00000 0.01300 O-h22 0.17900 0.17700 0.80370 1.00000 0.01900 O-h33 0.19100 0.50500 0.80400 1.00000 0.01500 O-h44 0.67700 0.33300 0.80470 1.00000 0.01800 H1 0.98400 0.99800 0.08900 1.00000 ? H2 0.35300 0.96900 0.37100 1.00000 ? H3 0.30800 0.32500 0.37400 1.00000 ? H4 0.84600 0.16900 0.37800 1.00000 ? H11 0.00600 0.00400 0.58800 1.00000 ? H22 0.19000 0.19700 0.87600 1.00000 ? H33 0.16200 0.50500 0.87800 1.00000 ? H44 0.68500 0.31500 0.87600 1.00000 ? loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 MgM1 0.00700 0.00700 0.00900 -0.00120 0.00050 0.00060 AlM1 0.00700 0.00700 0.00900 -0.00120 0.00050 0.00060 AlM2 0.00800 0.00800 0.01100 -0.00170 0.00040 0.00070 MgM2 0.00800 0.00800 0.01100 -0.00170 0.00040 0.00070 MgM3 0.00700 0.00700 0.01000 -0.00130 0.00060 0.00070 AlM3 0.00700 0.00700 0.01000 -0.00130 0.00060 0.00070 SiT1 0.00700 0.00700 0.01100 -0.00310 0.00120 0.00080 AlT1 0.00700 0.00700 0.01100 -0.00310 0.00120 0.00080 AlT2 0.00900 0.01000 0.01300 -0.00350 0.00100 0.00100 SiT2 0.00900 0.01000 0.01300 -0.00350 0.00100 0.00100 O1 0.00700 0.00700 0.00800 -0.00100 0.00000 0.00000 O2 0.01000 0.01100 0.01100 0.00000 0.00000 0.00000 O3 0.01600 0.01600 0.01700 0.00000 0.00100 0.00000 O4 0.01600 0.01600 0.01700 -0.00100 0.00000 0.00100 O5 0.02000 0.02000 0.02100 -0.00100 0.00000 0.00100 O-h1 0.01100 0.01100 0.01200 0.00000 0.00000 0.00000 O-h2 0.02420 0.02450 0.02390 0.00000 0.00000 0.00000 O-h3 0.02200 0.02300 0.02200 0.00000 0.00000 0.00000 O-h4 0.01800 0.01800 0.01700 0.00000 0.00000 0.00000 AlM11 0.00800 0.00700 0.01000 -0.00190 0.00040 0.00050 MgM11 0.00800 0.00700 0.01000 -0.00190 0.00040 0.00050 MgM22 0.00700 0.00900 0.01000 -0.00150 -0.00020 0.00070 AlM22 0.00700 0.00900 0.01000 -0.00150 -0.00020 0.00070 AlM33 0.00700 0.00700 0.01000 -0.00220 0.00040 0.00030 MgM33 0.00700 0.00700 0.01000 -0.00220 0.00040 0.00030 AlT11 0.01200 0.01100 0.01400 -0.00320 0.00100 0.00100 SiT11 0.01200 0.01100 0.01400 -0.00320 0.00100 0.00100 SiT22 0.01000 0.01000 0.01200 -0.00210 0.00060 0.00050 AlT22 0.01000 0.01000 0.01200 -0.00210 0.00060 0.00050 Oll 0.01200 0.01100 0.01200 -0.00200 0.00000 0.00100 O22 0.01300 0.01400 0.01400 0.00000 0.00000 0.00000 O33 0.01400 0.01400 0.01500 0.00000 0.00000 0.00100 O44 0.01500 0.01500 0.01600 0.00000 0.00000 0.00000 O55 0.02200 0.02200 0.02200 0.00000 0.00000 0.00000 O-hll 0.01300 0.01400 0.01400 0.00000 0.00000 0.00000 O-h22 0.01900 0.01900 0.01900 0.00000 0.00000 0.00000 O-h33 0.01500 0.01500 0.01500 -0.00100 0.00000 0.00000 O-h44 0.01800 0.01800 0.01700 -0.00100 0.00000 0.00000 avogadro-1.1.1/crystals/clays/Al2Si4O12Ca0.5-Montmorillonite.cif0000644000175000001440000000700312250371054023326 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/27/9002779.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9002779 loop_ _publ_author_name 'Viani, A.' 'Gualtieri, A.' 'Artioli, G.' _publ_section_title ; The nature of disorder in montmorillonite by simulation of X-ray powder patterns Note: Structural simulation model ; _journal_name_full 'American Mineralogist' _journal_page_first 966 _journal_page_last 975 _journal_volume 87 _journal_year 2002 _chemical_formula_sum 'Al2 Ca0.5 O12 Si4' _chemical_name_mineral Montmorillonite _space_group_IT_number 1 _symmetry_space_group_name_Hall 'P 1' _symmetry_space_group_name_H-M 'P 1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.18 _cell_length_b 8.98 _cell_length_c 15.00 _cell_volume 697.746 _exptl_crystal_density_diffrn 1.801 _[local]_cod_chemical_formula_sum_orig 'Al2 Si4 O12 Ca.5' _cod_database_code 9002779 _amcsd_database_code AMCSD#0002867 loop_ _symmetry_equiv_pos_as_xyz x,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv Al 0.87530 0.33300 0.22140 1.00000 0.02000 Al 0.87530 0.66700 0.22140 1.00000 0.02000 Al 0.37530 0.83300 0.22140 1.00000 0.02000 Al 0.37530 0.16700 0.22140 1.00000 0.02000 Si 0.55880 0.32900 0.04300 1.00000 0.02000 Si 0.55880 0.67100 0.04300 1.00000 0.02000 Si 0.69190 0.82900 0.39990 1.00000 0.02000 Si 0.69190 0.17100 0.39990 1.00000 0.02000 Si 0.05880 0.82900 0.04300 1.00000 0.02000 Si 0.05880 0.17100 0.04300 1.00000 0.02000 Si 0.19190 0.32900 0.39990 1.00000 0.02000 Si 0.19190 0.67100 0.39990 1.00000 0.02000 O 0.51340 0.50000 0.00990 1.00000 0.02000 O 0.82800 0.72800 0.00000 1.00000 0.02000 O 0.82800 0.27200 0.00000 1.00000 0.02000 O 0.49540 0.00000 0.15200 1.00000 0.02000 O 0.56820 0.69100 0.14870 1.00000 0.02000 O 0.57220 0.30900 0.14870 1.00000 0.02000 O 0.73730 0.00000 0.43290 1.00000 0.02000 O 0.42270 0.22800 0.44280 1.00000 0.02000 O 0.42270 0.77200 0.44280 1.00000 0.02000 O 0.75530 0.50000 0.29080 1.00000 0.02000 O 0.68240 0.19100 0.29410 1.00000 0.02000 O 0.67840 0.80900 0.29410 1.00000 0.02000 O 0.01340 0.00000 0.00990 1.00000 0.02000 O 0.32800 0.22800 0.00000 1.00000 0.02000 O 0.32800 0.77200 0.00000 1.00000 0.02000 O 0.99540 0.50000 0.15200 1.00000 0.02000 O 0.06820 0.19100 0.14870 1.00000 0.02000 O 0.07220 0.80900 0.14870 1.00000 0.02000 O 0.23730 0.50000 0.43290 1.00000 0.02000 O 0.92270 0.72800 0.44280 1.00000 0.02000 O 0.92270 0.27200 0.44280 1.00000 0.02000 O 0.25530 0.00000 0.29080 1.00000 0.02000 O 0.18240 0.69100 0.29410 1.00000 0.02000 O 0.17840 0.30900 0.29410 1.00000 0.02000 Ca 0.18930 0.00000 0.72150 0.50000 0.02000 Ca 0.68930 0.50000 0.72150 0.50000 0.02000 avogadro-1.1.1/crystals/clays/Al2Si2O9H4-Dickite.cif0000644000175000001440000000225712250371054021146 0ustar marcususersdata_global _chemical_name_mineral 'Dickite' loop_ _publ_author_name 'Bailey S W' _journal_name_full 'American Mineralogist' _journal_volume 48 _journal_year 1963 _journal_page_first 1196 _journal_page_last 1209 _publ_section_title ; Polymorphism of the kaolin minerals ; _database_code_amcsd 0000126 _chemical_formula_sum 'Si2 Al2 O9 H4' _cell_length_a 5.150 _cell_length_b 8.940 _cell_length_c 14.736 _cell_angle_alpha 90 _cell_angle_beta 103.58 _cell_angle_gamma 90 _cell_volume 659.492 _exptl_crystal_density_diffrn 2.600 _symmetry_space_group_name_H-M 'C 1 c 1' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' 'x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si1 0.02880 0.34990 0.04050 Si2 0.54000 0.17680 0.04020 Al1 0.31660 0.49660 0.23200 Al2 0.81160 0.33300 0.23060 O1 0.03850 0.51270 -0.00610 O2 0.73550 0.27760 -0.00580 O3 0.24120 0.23950 0.00580 O4 0.07200 0.36240 0.15230 O5 0.64160 0.16870 0.15260 O-H1 0.57560 0.47420 0.15740 O-H2 0.05090 0.47670 0.29480 O-H3 0.55090 0.35510 0.29810 O-H4 0.96350 0.16680 0.29630 avogadro-1.1.1/crystals/clays/Mg4Si6O22.82H13.64-Sepiolite.cif0000644000175000001440000000434112250371054022353 0ustar marcususersdata_global _chemical_name_mineral 'Sepiolite' loop_ _publ_author_name 'Giustetto R' 'Levy D' 'Wahyudi O' 'Ricchiardi G' 'Vitillo J G' _journal_name_full 'European Journal of Mineralogy' _journal_volume 23 _journal_year 2011 _journal_page_first 449 _journal_page_last 466 _publ_section_title ; Crystal structure refinement of a sepiolite/indigo Maya Blue pigment using molecular modelling and synchrotron diffraction ; _database_code_amcsd 0018363 _chemical_compound_source 'Germany' _chemical_formula_sum 'Mg4 Si6 O22.82 H13.64' _cell_length_a 13.395 _cell_length_b 27.016 _cell_length_c 5.2765 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 1909.456 _exptl_crystal_density_diffrn 2.242 _symmetry_space_group_name_H-M 'P n c n' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2-x,1/2+y,1/2+z' '1/2+x,1/2-y,1/2-z' '1/2+x,1/2+y,-z' '1/2-x,1/2-y,z' 'x,-y,1/2+z' '-x,y,1/2-z' '-x,-y,-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv Mg1 0.00000 0.02900 0.25000 1.00000 0.02900 Mg2 0.00000 0.08400 0.75000 1.00000 0.02900 Mg3 0.00000 0.14590 0.25000 1.00000 0.02900 Mg4 0.00000 0.20400 0.75000 1.00000 0.02900 Si1 0.20000 0.02740 0.59100 1.00000 0.01100 Si2 0.21100 0.14070 0.57700 1.00000 0.01100 Si3 0.20400 0.19480 0.06200 1.00000 0.01100 O1 0.07600 0.03000 0.60200 1.00000 0.01400 O-H2 0.07600 0.08900 0.05500 1.00000 0.01400 O3 0.09000 0.14530 0.55500 1.00000 0.01400 O4 0.07800 0.19300 0.06700 1.00000 0.01400 O5 0.24800 0.00260 0.33300 1.00000 0.01400 O6 0.24400 0.08330 0.60000 1.00000 0.01400 O7 0.24300 0.16500 0.30800 1.00000 0.01400 O8 0.25500 0.17200 0.80600 1.00000 0.01400 O9 0.25000 0.25000 0.07600 1.00000 0.01400 Wat10 0.10600 0.25270 0.58100 0.98000 0.02600 Wat11 0.56300 -0.10200 0.03200 0.73000 0.08000 Wat12 0.50000 0.18600 0.25000 0.92000 0.08000 Wat13 0.50000 0.04000 0.25000 0.96000 0.08000 Wat14 0.53000 0.16800 0.66000 0.26000 0.08000 avogadro-1.1.1/crystals/clays/Fe2.25Cl0.5H2.75-Fougerite.cif0000644000175000001440000000410412250371054022103 0ustar marcususersdata_global _chemical_name_mineral 'Fougerite' loop_ _publ_author_name 'Trolard F' 'Bourrie G' 'Abdelmoula M' 'Refait P' 'Feder F' _journal_name_full 'Clays and Clay Minerals' _journal_volume 55 _journal_year 2007 _journal_page_first 323 _journal_page_last 334 _publ_section_title ; Fougerite, a new mineral of the pyroaurite-iowaite group: Description and crystal structure ; _database_code_amcsd 0012240 _chemical_compound_source 'Synthetic' _chemical_formula_sum 'Fe O2.25 Cl.5 H2.75' _cell_length_a 3.190 _cell_length_b 3.190 _cell_length_c 23.85 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 210.184 _exptl_crystal_density_diffrn 2.663 _symmetry_space_group_name_H-M 'R -3 m' loop_ _space_group_symop_operation_xyz 'x,y,z' '2/3+x,1/3+y,1/3+z' '1/3+x,2/3+y,2/3+z' 'x,x-y,z' '2/3+x,1/3+x-y,1/3+z' '1/3+x,2/3+x-y,2/3+z' 'y,x,-z' '2/3+y,1/3+x,1/3-z' '1/3+y,2/3+x,2/3-z' '-x+y,y,z' '2/3-x+y,1/3+y,1/3+z' '1/3-x+y,2/3+y,2/3+z' '-x,-x+y,-z' '2/3-x,1/3-x+y,1/3-z' '1/3-x,2/3-x+y,2/3-z' '-y,-x,z' '2/3-y,1/3-x,1/3+z' '1/3-y,2/3-x,2/3+z' 'x-y,-y,-z' '2/3+x-y,1/3-y,1/3-z' '1/3+x-y,2/3-y,2/3-z' 'y,-x+y,-z' '2/3+y,1/3-x+y,1/3-z' '1/3+y,2/3-x+y,2/3-z' '-x+y,-x,z' '2/3-x+y,1/3-x,1/3+z' '1/3-x+y,2/3-x,2/3+z' '-x,-y,-z' '2/3-x,1/3-y,1/3-z' '1/3-x,2/3-y,2/3-z' '-y,x-y,z' '2/3-y,1/3+x-y,1/3+z' '1/3-y,2/3+x-y,2/3+z' 'x-y,x,-z' '2/3+x-y,1/3+x,1/3-z' '1/3+x-y,2/3+x,2/3-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy Fe 0.00000 0.00000 0.00000 1.00000 O-H 0.00000 0.00000 0.37500 0.87500 Wat 0.10000 0.10000 0.50000 0.08333 Cl 0.25000 0.25000 0.50000 0.08333 loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Fe 0.00900 0.00900 0.02500 0.00450 0.00000 0.00000 O-H 0.01400 0.01400 0.06000 0.00700 0.00000 0.00000 Wat 0.15000 0.15000 0.08000 0.10000 -0.02000 0.02000 Cl 0.30000 0.30000 0.08000 0.10000 -0.02000 0.02000 avogadro-1.1.1/crystals/clays/Al2Si2O9H4-Nacrite.cif0000644000175000001440000000456212250371054021160 0ustar marcususersdata_global _chemical_name_mineral 'Nacrite' loop_ _publ_author_name 'Zhukhlistov A P' _journal_name_full 'Crystallography Reports' _journal_volume 53 _journal_year 2008 _journal_page_first 76 _journal_page_last 82 _publ_section_title ; Crystal structure of nacrite from the electron diffraction data ; _database_code_amcsd 0012394 _chemical_formula_sum 'Al2 Si2 O9 H4' _cell_length_a 8.910 _cell_length_b 5.144 _cell_length_c 14.593 _cell_angle_alpha 90 _cell_angle_beta 100.50 _cell_angle_gamma 90 _cell_volume 657.642 _exptl_crystal_density_diffrn 2.607 _symmetry_space_group_name_H-M 'C 1 c 1' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' 'x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al1 0.32750 -0.07030 -0.00020 Al2 0.16280 0.42450 0.00040 Si1 0.06320 0.27960 0.18970 Si2 0.23420 -0.23440 0.19070 O1 0.13490 0.00110 0.22150 O2 0.18090 0.50270 0.23620 O3 0.41190 -0.19250 0.23710 O4 0.02140 0.31110 0.07880 O5 0.21430 -0.26200 0.07940 O-h1 0.32710 0.23790 0.07480 O-h2 0.16400 0.11530 -0.06600 O-h3 0.28530 -0.37930 -0.06500 O-h4 0.47720 0.04320 -0.06510 H1 0.42600 0.31800 0.09600 H2 0.59900 0.41000 0.37800 H3 0.30000 0.34600 0.38000 H4 0.49900 -0.11400 0.38000 loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Al1 0.00817 0.00643 0.00939 -0.00114 0.00064 0.00075 Al2 0.00778 0.00630 0.00834 -0.00068 0.00064 0.00150 Si1 0.00778 0.00617 0.01043 -0.00183 0.00446 -0.00075 Si2 0.00817 0.00885 0.00834 -0.00091 0.00255 0.00037 O1 0.01011 0.00858 0.01565 -0.00023 0.00764 -0.00112 O2 0.00933 0.00858 0.01043 0.00183 0.00127 -0.00224 O3 0.01166 0.01019 0.01565 0.00411 0.00637 0.00037 O4 0.01089 0.00871 0.01043 -0.00479 0.00446 -0.00112 O5 0.01089 0.01099 0.00939 0.00320 0.00318 0.00523 O-h1 0.01011 0.00818 0.01147 0.00023 0.00637 0.00187 O-h2 0.01283 0.01059 0.01460 -0.00297 0.00573 -0.00486 O-h3 0.00855 0.00938 0.01252 0.00114 0.00446 -0.00075 O-h4 0.01089 0.01206 0.01460 0.00068 0.00573 0.00000 H1 0.04899 0.03928 0.04589 0.01027 0.03057 0.02580 H2 0.03849 0.04424 0.04381 -0.02146 -0.00255 0.01533 H3 0.03577 0.03820 0.03442 0.02009 0.01401 -0.01421 H4 0.03499 0.03740 0.04172 0.02762 0.03184 0.00897 avogadro-1.1.1/crystals/clays/FeSi2O6H-Nontronite.cif0000644000175000001440000000225012250371054021547 0ustar marcususersdata_global _chemical_name_mineral 'Nontronite' loop_ _publ_author_name 'Dainyak L G' 'Zviagina B B' 'Rusakov V S' 'Drits V A' _journal_name_full 'European Journal of Mineralogy' _journal_volume 18 _journal_year 2006 _journal_page_first 753 _journal_page_last 764 _publ_section_title ; Interpretation of the nontonite-dehydroxylate Mossbauer spectrum using EFG calculations Sample: tv structure ; _database_code_amcsd 0007180 _chemical_compound_source 'Garfield, Washington, USA' _chemical_formula_sum 'Fe Si2 O6 H' _cell_length_a 5.277 _cell_length_b 9.140 _cell_length_c 9.780 _cell_angle_alpha 90 _cell_angle_beta 101.0 _cell_angle_gamma 90 _cell_volume 463.040 _exptl_crystal_density_diffrn 2.998 _symmetry_space_group_name_H-M 'C 1 2/m 1' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' 'x,-y,z' '1/2+x,1/2-y,z' '-x,y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z FeM 0.50000 0.16670 0.00000 SiT 0.31010 0.32910 0.28410 O1 0.30940 0.31220 0.11480 O2 0.30940 0.50000 0.32930 O3 0.05930 0.75000 0.34800 O-H 0.37410 0.00000 0.10750 avogadro-1.1.1/crystals/clays/Mn1.854Fe1.656Mg0.537Si0.953O9H4-Guidottiite.cif0000644000175000001440000000461112250371054024465 0ustar marcususersdata_global _chemical_name_mineral 'Guidottiite' loop_ _publ_author_name 'Wahle M W' 'Bujnowski T J' 'Guggenheim S' 'Kogure T' _journal_name_full 'Clays and Clay Minerals' _journal_volume 58 _journal_year 2010 _journal_page_first 364 _journal_page_last 376 _publ_section_title ; Guidottiite, the Mn-analogue of cronstedtite: A new serpentine-group mineral from South Africa ; _database_code_amcsd 0018323 _chemical_compound_source 'N'chwaning 2 mine, Kalahari manganese field, South Africa' _chemical_formula_sum 'Mn1.854 Fe1.656 Mg.537 Si.953 O9 H4' _cell_length_a 5.5472 _cell_length_b 5.5472 _cell_length_c 14.296 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 380.972 _exptl_crystal_density_diffrn 3.332 _symmetry_space_group_name_H-M 'P 63' loop_ _space_group_symop_operation_xyz 'x,y,z' 'x-y,x,1/2+z' '-y,x-y,z' '-x,-y,1/2+z' '-x+y,-x,z' 'y,-x+y,1/2+z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv MnM1 0.66700 -0.00080 0.23750 0.61800 0.01390 Fe3+M1 0.66700 -0.00080 0.23750 0.20300 0.01390 MgM1 0.66700 -0.00080 0.23750 0.17900 0.01390 SiT1 0.00000 0.00000 0.03820 0.32200 0.00900 Fe3+T1 0.00000 0.00000 0.03820 0.67800 0.00900 SiT2 0.33333 0.66667 0.03660 0.63100 0.00950 Fe3+T2 0.33333 0.66667 0.03660 0.36900 0.00950 O1 0.19100 0.33200 0.00000 1.00000 0.01900 O4 0.00000 0.00000 0.15700 1.00000 0.00670 O5 0.33333 0.66667 0.15770 1.00000 0.00730 O-H1 0.66667 0.33333 0.15920 1.00000 0.00520 O-H2 0.33500 0.00100 0.30810 1.00000 0.00870 loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 MnM1 0.01380 0.01380 0.01410 0.00700 0.00010 0.00030 Fe3+M1 0.01380 0.01380 0.01410 0.00700 0.00010 0.00030 MgM1 0.01380 0.01380 0.01410 0.00700 0.00010 0.00030 SiT1 0.00860 0.00860 0.00970 0.00430 0.00000 0.00000 Fe3+T1 0.00860 0.00860 0.00970 0.00430 0.00000 0.00000 SiT2 0.00880 0.00880 0.01100 0.00440 0.00000 0.00000 Fe3+T2 0.00880 0.00880 0.01100 0.00440 0.00000 0.00000 O4 0.00960 0.00960 0.00100 0.00480 0.00000 0.00000 O5 0.00740 0.00740 0.00700 0.00370 0.00000 0.00000 O-H1 0.00680 0.00680 0.00200 0.00340 0.00000 0.00000 O-H2 0.01000 0.01300 0.00200 0.00500 0.00200 0.00100 avogadro-1.1.1/crystals/clays/Lepidolite.cif0000644000175000001440000000342012250371054020257 0ustar marcususersdata_global _chemical_name_mineral 'Lepidolite 1M' loop_ _publ_author_name 'Sartori F' _journal_name_full 'Tschermaks Mineralogische und Petrographische Mitteilungen' _journal_volume 23 _journal_year 1976 _journal_page_first 65 _journal_page_last 75 _publ_section_title ; The crystal structure of a 1M lepidolite ; _database_code_amcsd 0015659 _chemical_compound_source 'Elba, Tuscany, Italy' _chemical_formula_sum '(K.88 Na.06 Rb.05 Ca.01) Li1.57 Al2.07 Si3.36 O10.47 (F1.53 H.47)' _cell_length_a 5.20 _cell_length_b 9.01 _cell_length_c 10.09 _cell_angle_alpha 90 _cell_angle_beta 99.38 _cell_angle_gamma 90 _cell_volume 466.416 _exptl_crystal_density_diffrn 2.838 _symmetry_space_group_name_H-M 'C 1 2/m 1' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' 'x,-y,z' '1/2+x,1/2-y,z' '-x,y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv K 0.00000 0.50000 0.00000 0.88000 0.02128 Na 0.00000 0.50000 0.00000 0.06000 0.02128 Rb 0.00000 0.50000 0.00000 0.05000 0.02128 Ca 0.00000 0.50000 0.00000 0.01000 0.02128 LiM2 0.00000 0.00000 0.50000 0.97000 0.01406 AlM2 0.00000 0.00000 0.50000 0.03000 0.01406 LiM1 0.00000 0.32830 0.50000 0.30000 0.01216 AlM1 0.00000 0.32830 0.50000 0.70000 0.01216 AlT 0.08100 0.16850 0.23200 0.16000 0.01089 SiT 0.08100 0.16850 0.23200 0.84000 0.01089 O1 0.02140 0.00000 0.17420 1.00000 0.01976 O2 0.32510 0.23100 0.16800 1.00000 0.02001 O3 0.14210 0.17680 0.39410 1.00000 0.01748 F4 0.11070 0.50000 0.40150 0.76500 0.02938 O-H4 0.11070 0.50000 0.40150 0.23500 0.02938 avogadro-1.1.1/crystals/clays/Al4KSi2O12-Illite.cif0000644000175000001440000000252712250371054021007 0ustar marcususersdata_global _chemical_name_mineral 'Illite' loop_ _publ_author_name 'Gualtieri A F' _journal_name_full 'Journal of Applied Crystallography' _journal_volume 33 _journal_year 2000 _journal_page_first 267 _journal_page_last 278 _publ_section_title ; Accuracy of XRPD QPA using the combined Rietveld-RIR method ; _database_code_amcsd 0012865 _chemical_compound_source 'Napoli, Italy' _chemical_formula_sum 'K Al4 Si2 O12' _cell_length_a 5.2226 _cell_length_b 9.0183 _cell_length_c 20.143 _cell_angle_alpha 90 _cell_angle_beta 95.665 _cell_angle_gamma 90 _cell_volume 944.081 _exptl_crystal_density_diffrn 2.780 _symmetry_space_group_name_H-M 'C 1 2/c 1' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' 'x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,y,1/2-z' '1/2-x,1/2+y,1/2-z' '-x,-y,-z' '1/2-x,1/2-y,-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv K 0.00000 0.09010 0.25000 0.07500 Al1 0.44320 0.26350 0.13650 0.01100 Al2 0.25860 0.08280 0.00680 0.02700 Si 0.48250 0.92970 0.13700 0.02200 O1 0.46230 0.91940 0.05050 0.01500 O2 0.38350 0.26650 0.06630 0.04700 O3 0.42590 0.10390 0.15300 0.01200 O4 0.22260 0.83680 0.16850 0.04100 O5 0.27350 0.37220 0.16780 0.08000 O6 0.40800 0.56710 0.04540 0.05300 avogadro-1.1.1/crystals/clays/AlSi2O6H-Pyrophyllite.cif0000644000175000001440000000327612250371054022127 0ustar marcususersdata_global _chemical_name_mineral 'Pyrophyllite' loop_ _publ_author_name 'Lee J H' 'Guggenheim S' _journal_name_full 'American Mineralogist' _journal_volume 66 _journal_year 1981 _journal_page_first 350 _journal_page_last 357 _publ_section_title ; Single crystal X-ray refinement of pyrophyllite-1Tc ; _database_code_amcsd 0000823 _chemical_formula_sum 'Al Si2 O6 H' _cell_length_a 5.160 _cell_length_b 8.966 _cell_length_c 9.347 _cell_angle_alpha 91.18 _cell_angle_beta 100.46 _cell_angle_gamma 89.64 _cell_volume 425.157 _exptl_crystal_density_diffrn 2.815 _symmetry_space_group_name_H-M 'C -1' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' '-x,-y,-z' '1/2-x,1/2-y,-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al 0.49950 0.16705 -0.00008 Si1 0.74490 -0.00303 0.29169 Si2 0.75950 0.32577 0.29230 O1 0.64950 0.00180 0.11550 O2 0.73140 0.30790 0.11580 O-H 0.22630 0.19270 0.10810 Ob1 0.04980 0.38910 0.35890 Ob2 0.72510 0.16370 0.35840 Ob3 0.54520 0.44260 0.33250 loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Al 0.00691 0.00672 0.01275 -0.00115 0.00142 -0.00025 Si1 0.00744 0.00651 0.01236 -0.00207 0.00142 0.00004 Si2 0.00744 0.00659 0.01322 -0.00184 0.00213 -0.00033 O1 0.01070 0.00936 0.01326 -0.00092 0.00047 -0.00042 O2 0.00887 0.01058 0.01284 -0.00184 0.00142 -0.00083 O-H 0.01044 0.01181 0.01626 0.00115 0.00283 0.00209 Ob1 0.01017 0.01099 0.01669 -0.00484 0.00142 0.00083 Ob2 0.01474 0.00692 0.01669 -0.00184 0.00402 -0.00042 Ob3 0.00796 0.01262 0.01797 0.00046 0.00165 -0.00292 avogadro-1.1.1/crystals/clays/Zn2SiO5H2-Hemimorphite.cif0000644000175000001440000000535012250371054022164 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/81/9008122.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008122 loop_ _publ_author_name 'McDonald, W. S.' 'Cruickshank, D. W. J.' _publ_section_title ; Refinement of the structure of hemimorphite Locality: sample is from the same batch of crystals used by Barclay and Cox (1960) Note: Photographic Data ; _journal_name_full 'Zeitschrift fur Kristallographie' _journal_page_first 180 _journal_page_last 191 _journal_volume 124 _journal_year 1967 _chemical_formula_sum 'H2 O5 Si Zn2' _chemical_name_mineral Hemimorphite _space_group_IT_number 44 _symmetry_space_group_name_Hall 'I 2 -2' _symmetry_space_group_name_H-M 'I m m 2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.373 _cell_length_b 10.718 _cell_length_c 5.12 _cell_volume 459.478 _exptl_crystal_density_diffrn 3.482 _[local]_cod_chemical_formula_sum_orig 'Zn2 Si O5 H2' _cod_database_code 9008122 _amcsd_database_code AMCSD#0010313 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z x,-y,z 1/2+x,1/2-y,1/2+z -x,y,z 1/2-x,1/2+y,1/2+z -x,-y,z 1/2-x,1/2-y,1/2+z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Zn 0.01300 0.01600 0.01600 -0.00250 -0.00200 -0.00100 Si 0.01200 0.01400 0.00900 0.00000 0.00000 0.00000 O1 0.01300 0.02000 0.02100 -0.01200 -0.00600 -0.00850 O2 0.01200 0.01700 0.01500 0.00000 0.00000 0.00150 OH3 0.02900 0.01400 0.05000 0.00000 0.00000 0.00000 O4 0.02200 0.01800 0.03100 0.00000 0.00000 0.00000 Wat5 0.07000 0.19100 0.00900 0.00000 0.00000 0.00000 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zn 0.20440 0.16110 0.00000 Si 0.00000 0.14740 0.50830 O1 0.15850 0.20890 0.63700 O2 0.00000 0.16870 0.19090 O-H3 0.30880 0.00000 0.03960 O4 0.00000 0.00000 0.58160 Wat5 0.50000 0.00000 0.50510 avogadro-1.1.1/crystals/clays/Mg3(O12Si4)H2-Vermiculite.cif0000644000175000001440000000464012250371054022263 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/00/9000016.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9000016 loop_ _publ_author_name 'Hendricks, S. B.' 'Jefferson, M. E.' _publ_section_title ; Crystal structure of vermiculites and mixed vermiculite-chlorites ; _journal_name_full 'American Mineralogist' _journal_page_first 851 _journal_page_last 862 _journal_volume 23 _journal_year 1938 _chemical_formula_sum 'H2 Mg3 O12 Si4' _chemical_name_mineral Vermiculite _space_group_IT_number 9 _symmetry_space_group_name_Hall 'C -2yc' _symmetry_space_group_name_H-M 'C 1 c 1' _cell_angle_alpha 90 _cell_angle_beta 93.25 _cell_angle_gamma 90 _cell_length_a 5.33 _cell_length_b 9.18 _cell_length_c 28.85 _cell_volume 1409.343 _exptl_crystal_density_diffrn 1.787 _[local]_cod_chemical_formula_sum_orig 'Mg3 (O12 Si4) H2' _cod_database_code 9000016 _amcsd_database_code AMCSD#0000018 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,z x,-y,1/2+z 1/2+x,1/2-y,1/2+z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mg1 0.00000 0.00000 0.00000 Mg2 0.00000 0.33333 0.00000 Mg3 0.00000 0.66667 0.00000 O-H1 0.18000 0.50000 0.04000 O-H2 -0.18000 0.83333 -0.04000 O1 0.18000 0.83333 0.04000 O2 -0.18000 0.50000 -0.04000 O3 0.18000 0.16667 0.04000 O4 -0.18000 0.16667 -0.04000 O5 -0.04800 0.75000 0.11500 O6 0.04800 0.58330 -0.11500 O7 0.45200 0.75000 0.11500 O8 -0.45200 0.58330 -0.11500 O9 0.20200 0.00000 0.11500 O10 -0.20200 0.33333 -0.11500 Si1 0.19600 0.83333 0.09500 Si2 -0.19600 0.50000 -0.09500 Si3 -0.30400 0.66667 0.09500 Si4 0.30400 0.66667 -0.09500 avogadro-1.1.1/crystals/elements/0000755000175000001440000000000012250371054016204 5ustar marcususersavogadro-1.1.1/crystals/elements/Ti-Titanium-alpha.cif0000644000175000001440000000422712250371054022123 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008517.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008517 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ti _chemical_name_mineral Titanium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.950 _cell_length_b 2.950 _cell_length_c 4.686 _cell_volume 35.316 _exptl_crystal_density_diffrn 4.503 _cod_database_code 9008517 _amcsd_database_code AMCSD#0010848 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ti 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Re-Rhenium.cif0000644000175000001440000000423212250371054020643 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008512.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008512 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Re _chemical_name_mineral Rhenium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.7608 _cell_length_b 2.7608 _cell_length_c 4.4582 _cell_volume 29.428 _exptl_crystal_density_diffrn 21.014 _cod_database_code 9008512 _amcsd_database_code AMCSD#0010843 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Re 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/C-Graphite.cif0000644000175000001440000000400312250371054020607 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008569.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008569 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum C _chemical_name_mineral Graphite _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.456 _cell_length_b 2.456 _cell_length_c 6.696 _cell_volume 34.979 _exptl_crystal_density_diffrn 2.281 _cod_database_code 9008569 _amcsd_database_code AMCSD#0010900 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z C1 0.00000 0.00000 0.00000 C2 0.33333 0.66667 0.00000 avogadro-1.1.1/crystals/elements/Na-Sodium.cif0000644000175000001440000000627712250371054020477 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008545.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008545 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 293 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Na _chemical_name_mineral Sodium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.2906 _cell_length_b 4.2906 _cell_length_c 4.2906 _cell_volume 78.987 _diffrn_ambient_temperature 293 _exptl_crystal_density_diffrn 0.967 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008545 _amcsd_database_code AMCSD#0010876 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Na 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Os-Osmium.cif0000644000175000001440000000423112250371054020517 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008510.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008510 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Os _chemical_name_mineral Osmium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.7352 _cell_length_b 2.7352 _cell_length_c 4.3190 _cell_volume 27.983 _exptl_crystal_density_diffrn 22.573 _cod_database_code 9008510 _amcsd_database_code AMCSD#0010841 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Os 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Eu-Europium.cif0000644000175000001440000000627212250371054021052 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008535.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008535 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Eu _chemical_name_mineral Europium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.606 _cell_length_b 4.606 _cell_length_c 4.606 _cell_volume 97.717 _exptl_crystal_density_diffrn 5.165 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008535 _amcsd_database_code AMCSD#0010866 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Eu 0.00000 0.00000 0.00000 fract_y _atom_site_fract_z Eu 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/I-Iodine.cif0000644000175000001440000000407312250371054020270 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008595.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008595 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum I _chemical_name_mineral Iodine _space_group_IT_number 64 _symmetry_space_group_name_Hall '-B 2ab 2' _symmetry_space_group_name_H-M 'B m a b' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 7.27007 _cell_length_b 9.79344 _cell_length_c 4.79004 _cell_volume 341.046 _exptl_crystal_density_diffrn 4.943 _cod_database_code 9008595 _amcsd_database_code AMCSD#0010926 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,y,1/2+z x,1/2+y,1/2-z 1/2+x,1/2+y,-z -x,1/2-y,1/2+z 1/2-x,1/2-y,+z -x,y,z 1/2-x,y,1/2+z x,-y,-z 1/2+x,-y,1/2-z x,1/2-y,1/2+z 1/2+x,1/2-y,+z -x,1/2+y,1/2-z 1/2-x,1/2+y,-z -x,-y,-z 1/2-x,-y,1/2-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z I 0.00000 0.11560 0.14930 avogadro-1.1.1/crystals/elements/Ir-Iridium.cif0000644000175000001440000001052012250371054020637 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008470.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008470 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ir _chemical_name_mineral Iridium _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.8394 _cell_length_b 3.8394 _cell_length_c 3.8394 _cell_volume 56.597 _exptl_crystal_density_diffrn 22.559 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008470 _amcsd_database_code AMCSD#0010800 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ir 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ti-Titanium-beta.cif0000644000175000001440000000631012250371054021744 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008554.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008554 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 1173 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ti _chemical_name_mineral Titanium-beta _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.3065 _cell_length_b 3.3065 _cell_length_c 3.3065 _cell_volume 36.150 _diffrn_ambient_temperature 1173 _exptl_crystal_density_diffrn 4.399 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008554 _amcsd_database_code AMCSD#0010885 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ti 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/C-Diamond.cif0000644000175000001440000001151512250371054020425 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008564.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008564 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum C _chemical_name_mineral Diamond _space_group_IT_number 227 _symmetry_space_group_name_Hall 'F 4d 2 3 -1d' _symmetry_space_group_name_H-M 'F d -3 m :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.56679 _cell_length_b 3.56679 _cell_length_c 3.56679 _cell_volume 45.377 _exptl_crystal_density_diffrn 3.516 _[local]_cod_cif_authors_sg_H-M 'F d 3 m' _cod_database_code 9008564 _amcsd_database_code AMCSD#0010895 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+z,3/4-x,1/4+y 3/4+z,1/4-x,3/4+y 1/4+z,3/4-x,3/4+y 1/4+z,1/4-x,1/4+y -y,1/2+z,1/2-x -y,+z,-x 1/2-y,1/2+z,-x 1/2-y,+z,1/2-x 3/4+x,3/4-y,1/4+z 3/4+x,1/4-y,3/4+z 1/4+x,3/4-y,3/4+z 1/4+x,1/4-y,1/4+z -z,1/2+x,1/2-y -z,+x,-y 1/2-z,1/2+x,-y 1/2-z,+x,1/2-y 3/4+y,3/4-z,1/4+x 3/4+y,1/4-z,3/4+x 1/4+y,3/4-z,3/4+x 1/4+y,1/4-z,1/4+x -x,1/2+y,1/2-z -x,+y,-z 1/2-x,1/2+y,-z 1/2-x,+y,1/2-z 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y +x,-z,-y +x,1/2-z,1/2-y 3/4-z,3/4+y,1/4+x 3/4-z,1/4+y,3/4+x 1/4-z,3/4+y,3/4+x 1/4-z,1/4+y,1/4+x 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z +y,-x,-z +y,1/2-x,1/2-z 3/4-x,3/4+z,1/4+y 3/4-x,1/4+z,3/4+y 1/4-x,3/4+z,3/4+y 1/4-x,1/4+z,1/4+y 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x +z,-y,-x +z,1/2-y,1/2-x 3/4-y,3/4+x,1/4+z 3/4-y,1/4+x,3/4+z 1/4-y,3/4+x,3/4+z 1/4-y,1/4+x,1/4+z x,1/2+z,1/2+y x,+z,+y 1/2+x,1/2+z,+y 1/2+x,+z,1/2+y 1/4-z,3/4-y,3/4-x 1/4-z,1/4-y,1/4-x 3/4-z,3/4-y,1/4-x 3/4-z,1/4-y,3/4-x y,1/2+x,1/2+z y,+x,+z 1/2+y,1/2+x,+z 1/2+y,+x,1/2+z 1/4-x,3/4-z,3/4-y 1/4-x,1/4-z,1/4-y 3/4-x,3/4-z,1/4-y 3/4-x,1/4-z,3/4-y z,1/2+y,1/2+x z,+y,+x 1/2+z,1/2+y,+x 1/2+z,+y,1/2+x 1/4-y,3/4-x,3/4-z 1/4-y,1/4-x,1/4-z 3/4-y,3/4-x,1/4-z 3/4-y,1/4-x,3/4-z 3/4+z,1/4+x,3/4-y 3/4+z,3/4+x,1/4-y 1/4+z,1/4+x,1/4-y 1/4+z,3/4+x,3/4-y -y,1/2-z,1/2+x -y,-z,+x 1/2-y,1/2-z,+x 1/2-y,-z,1/2+x 3/4+x,1/4+y,3/4-z 3/4+x,3/4+y,1/4-z 1/4+x,1/4+y,1/4-z 1/4+x,3/4+y,3/4-z -z,1/2-x,1/2+y -z,-x,+y 1/2-z,1/2-x,+y 1/2-z,-x,1/2+y 3/4+y,1/4+z,3/4-x 3/4+y,3/4+z,1/4-x 1/4+y,1/4+z,1/4-x 1/4+y,3/4+z,3/4-x -x,1/2-y,1/2+z -x,-y,+z 1/2-x,1/2-y,+z 1/2-x,-y,1/2+z 1/4-z,3/4+x,3/4+y 1/4-z,1/4+x,1/4+y 3/4-z,3/4+x,1/4+y 3/4-z,1/4+x,3/4+y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x 1/4-x,3/4+y,3/4+z 1/4-x,1/4+y,1/4+z 3/4-x,3/4+y,1/4+z 3/4-x,1/4+y,3/4+z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y 1/4-y,3/4+z,3/4+x 1/4-y,1/4+z,1/4+x 3/4-y,3/4+z,1/4+x 3/4-y,1/4+z,3/4+x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z 1/2-x,1/2+z,-y 1/2-x,+z,1/2-y -x,1/2+z,1/2-y -x,+z,-y 1/4+z,3/4-y,3/4+x 1/4+z,1/4-y,1/4+x 3/4+z,3/4-y,1/4+x 3/4+z,1/4-y,3/4+x 1/2-y,1/2+x,-z 1/2-y,+x,1/2-z -y,1/2+x,1/2-z -y,+x,-z 1/4+x,3/4-z,3/4+y 1/4+x,1/4-z,1/4+y 3/4+x,3/4-z,1/4+y 3/4+x,1/4-z,3/4+y 1/2-z,1/2+y,-x 1/2-z,+y,1/2-x -z,1/2+y,1/2-x -z,+y,-x 1/4+y,3/4-x,3/4+z 1/4+y,1/4-x,1/4+z 3/4+y,3/4-x,1/4+z 3/4+y,1/4-x,3/4+z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y 3/4+z,3/4+y,1/4-x 3/4+z,1/4+y,3/4-x 1/4+z,3/4+y,3/4-x 1/4+z,1/4+y,1/4-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z 3/4+x,3/4+z,1/4-y 3/4+x,1/4+z,3/4-y 1/4+x,3/4+z,3/4-y 1/4+x,1/4+z,1/4-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x 3/4+y,3/4+x,1/4-z 3/4+y,1/4+x,3/4-z 1/4+y,3/4+x,3/4-z 1/4+y,1/4+x,1/4-z 1/4-z,1/4-x,1/4-y 1/4-z,3/4-x,3/4-y 3/4-z,1/4-x,3/4-y 3/4-z,3/4-x,1/4-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x 1/4-x,1/4-y,1/4-z 1/4-x,3/4-y,3/4-z 3/4-x,1/4-y,3/4-z 3/4-x,3/4-y,1/4-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y 1/4-y,1/4-z,1/4-x 1/4-y,3/4-z,3/4-x 3/4-y,1/4-z,3/4-x 3/4-y,3/4-z,1/4-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z C 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Zr-Zirconium.cif0000644000175000001440000000622412250371054021243 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008559.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008559 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at 1123 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Zr _chemical_name_mineral Zirconium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.62 _cell_length_b 3.62 _cell_length_c 3.62 _cell_volume 47.438 _exptl_crystal_density_diffrn 6.386 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008559 _amcsd_database_code AMCSD#0010890 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zr 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Cr-Chromium.cif0000644000175000001440000000620712250371054021021 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008531.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008531 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Cr _chemical_name_mineral Chromium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.8839 _cell_length_b 2.8839 _cell_length_c 2.8839 _cell_volume 23.985 _exptl_crystal_density_diffrn 7.200 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008531 _amcsd_database_code AMCSD#0010862 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cr 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Br-Bromine.cif0000644000175000001440000000415712250371054020632 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008594.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008594 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 123 K ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Br _chemical_name_mineral Bromine _space_group_IT_number 64 _symmetry_space_group_name_Hall '-B 2ab 2' _symmetry_space_group_name_H-M 'B m a b' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.67 _cell_length_b 8.72 _cell_length_c 4.48 _cell_volume 260.568 _diffrn_ambient_temperature 123 _exptl_crystal_density_diffrn 4.074 _cod_database_code 9008594 _amcsd_database_code AMCSD#0010925 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,y,1/2+z x,1/2+y,1/2-z 1/2+x,1/2+y,-z -x,1/2-y,1/2+z 1/2-x,1/2-y,+z -x,y,z 1/2-x,y,1/2+z x,-y,-z 1/2+x,-y,1/2-z x,1/2-y,1/2+z 1/2+x,1/2-y,+z -x,1/2+y,1/2-z 1/2-x,1/2+y,-z -x,-y,-z 1/2-x,-y,1/2-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Br 0.00000 0.11000 0.13500 avogadro-1.1.1/crystals/elements/U-Uranium-gamma.cif0000644000175000001440000000621012250371054021570 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008556.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008556 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum U _chemical_name_mineral Uranium-gamma _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.474 _cell_length_b 3.474 _cell_length_c 3.474 _cell_volume 41.927 _exptl_crystal_density_diffrn 18.855 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008556 _amcsd_database_code AMCSD#0010887 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z U 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Fe-Iron-gamma.cif0000644000175000001440000001051412250371054021207 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008469.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008469 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Fe _chemical_name_mineral Iron _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.5910 _cell_length_b 3.5910 _cell_length_c 3.5910 _cell_volume 46.307 _exptl_crystal_density_diffrn 8.011 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008469 _amcsd_database_code AMCSD#0010799 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Fe 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Tm-Thulium.cif0000644000175000001440000000423112250371054020674 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008520.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008520 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Tm _chemical_name_mineral Thulium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.5375 _cell_length_b 3.5375 _cell_length_c 5.5546 _cell_volume 60.197 _exptl_crystal_density_diffrn 9.320 _cod_database_code 9008520 _amcsd_database_code AMCSD#0010851 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Tm 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Xe-Xenon.cif0000644000175000001440000001060312250371054020330 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008486.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008486 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 58 K Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Xe _chemical_name_mineral Xenon _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.197 _cell_length_b 6.197 _cell_length_c 6.197 _cell_volume 237.982 _diffrn_ambient_temperature 58 _exptl_crystal_density_diffrn 3.664 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008486 _amcsd_database_code AMCSD#0010816 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Xe 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/S8-Sulfur-gamma.cif0000644000175000001440000001472612250371054021531 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2002079.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided by IUCr Journals, http://journals.iucr.org/. # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_2002079 loop_ _publ_author_name 'Gallacher, A. C.' 'Pinkerton, A. A.' _publ_section_title ; A redetermination of monclinic \g-sulfur ; _journal_issue 1 _journal_name_full 'Acta Crystallographica Section C' _journal_page_first 125 _journal_page_last 126 _journal_volume 49 _journal_year 1993 _chemical_formula_sum S8 _chemical_formula_weight 256.51 _chemical_name_systematic ' gamma sulfur' _symmetry_cell_setting monoclinic _symmetry_space_group_name_H-M 'P 1 2/c 1' _atom_type_scat_source ; International Tables for X-ray Crystallography (1974, Vol. IV) ; _cell_angle_alpha 90.00 _cell_angle_beta 124.89(3) _cell_angle_gamma 90.00 _cell_formula_units_Z 4.00 _cell_length_a 8.455(3) _cell_length_b 13.052(2) _cell_length_c 9.267(3) _cell_measurement_reflns_used 25 _cell_measurement_temperature 294 _cell_measurement_theta_max 14 _cell_measurement_theta_min 12 _cell_volume 838.8(9) _computing_cell_refinement CAD4_(Enraf-Nonius,_1977) _computing_data_collection CAD4_(Enraf-Nonius,_1977) _computing_data_reduction process_MolEN_(Fair,_1990) _computing_molecular_graphics ORTEPII_(Johnson,_1976) _computing_publication_material CIF_MolEN_(Fair,_1990) _computing_structure_refinement LSFM_MolEN_(Fair,_1990) _diffrn_measurement_device Enraf_Nonius_CAD4 _diffrn_measurement_method ; 3\q/1\q (\w/\q motor coupling ration 1:0.33) ; _diffrn_radiation_type Mo_K\a _diffrn_radiation_wavelength 0.71073 _diffrn_reflns_av_R_equivalents 0.046 _diffrn_reflns_limit_h_max 10 _diffrn_reflns_limit_h_min 0 _diffrn_reflns_limit_k_max 16 _diffrn_reflns_limit_k_min 0 _diffrn_reflns_limit_l_max 9 _diffrn_reflns_limit_l_min -10 _diffrn_reflns_number 1845 _diffrn_reflns_theta_max 25.99 _diffrn_standards_decay_% -1.12 _diffrn_standards_interval_time 50 _diffrn_standards_number 3 _exptl_absorpt_coefficient_mu 1.955 _exptl_absorpt_correction_T_max 1.0998 _exptl_absorpt_correction_T_min 0.7652 _exptl_absorpt_correction_type refined_empirical_(Walker_&_Stuart,_1983) _exptl_crystal_colour pale_yellow _exptl_crystal_density_diffrn 2.03 _exptl_crystal_description needle _exptl_crystal_F_000 512 _exptl_crystal_size_max 0.32 _exptl_crystal_size_mid 0.14 _exptl_crystal_size_min 0.12 _refine_diff_density_max 0.3117 _refine_diff_density_min -0.3842 _refine_ls_abs_structure_details ; ? ; _refine_ls_extinction_coef 0.56E-6 _refine_ls_extinction_method isotropic_(Zachariasen,_1963) _refine_ls_goodness_of_fit_obs 1.222 _refine_ls_hydrogen_treatment not_included _refine_ls_number_parameters 74 _refine_ls_number_reflns 939 _refine_ls_R_factor_obs 0.036 _refine_ls_shift/esd_max 0.004 _refine_ls_structure_factor_coef F _refine_ls_weighting_scheme '4F~o~^2^/ [\s^2^(F~o~^2^) + 0.0011F~o~^4^]' _refine_ls_wR_factor_obs 0.041 _reflns_number_observed 939 _reflns_number_total 1727 _reflns_observed_criterion I>3.0\s(I) _[local]_cod_data_source_file ab1021.cif _[local]_cod_data_source_block ab1021_structure_1_of_1 _[local]_cod_cif_authors_sg_H-M 'P 1 2/c 1 ' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv _atom_site_thermal_displace_type S1 0.6485(2) 0.34570(10) 0.3247(2) 0.0671(7) Uani S2 0.81100(10) 0.57920(10) 0.47080(10) 0.0522(6) Uani S3 0.7446(2) 0.44300(10) 0.53190(10) 0.0534(6) Uani S4 0.5836(2) 0.67680(10) 0.38400(10) 0.0511(5) Uani S5 0.0799(2) 0.79790(10) 0.1993(2) 0.0614(6) Uani S6 0.2427(2) 1.03100(10) 0.2201(2) 0.0787(7) Uani S7 0.3074(2) 0.89380(10) 0.3501(2) 0.0640(7) Uani S8 0.1483(2) 1.12710(10) 0.3294(2) 0.0744(7) Uani loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 S1 0.0797(6) 0.0562(8) 0.0675(6) 0.0211(6) 0.0413(4) 0.0063(6) S2 0.0365(4) 0.0697(8) 0.0559(5) -0.0037(5) 0.0239(3) 0.0058(6) S3 0.0530(5) 0.0669(9) 0.0430(4) 0.0066(6) 0.0249(3) 0.0133(5) S4 0.0536(4) 0.0487(7) 0.0511(5) -0.0067(5) 0.0317(3) -0.0092(5) S5 0.0754(6) 0.0472(7) 0.0651(5) 0.0031(6) 0.0438(4) -0.0095(5) S6 0.0760(5) 0.0880(10) 0.0731(5) -0.0369(6) 0.0533(3) -0.0208(6) S7 0.0421(5) 0.0930(10) 0.0674(7) 0.0069(7) 0.0246(4) -0.0128(7) S8 0.1215(8) 0.0496(8) 0.0682(6) -0.0331(7) 0.0571(5) -0.0219(6) loop_ _geom_bond_atom_site_label_1 _geom_bond_atom_site_label_2 _geom_bond_distance _geom_bond_publ_flag S1 S1 2.060(2) yes S1 S3 2.043(2) yes S2 S3 2.040(2) yes S2 S4 2.049(2) yes S4 S4 2.0370(10) yes S5 S5 2.039(3) yes S5 S7 2.035(2) yes S6 S7 2.051(2) yes S6 S8 2.040(3) yes S8 S8 2.058(2) yes loop_ _geom_angle_atom_site_label_1 _geom_angle_atom_site_label_2 _geom_angle_atom_site_label_3 _geom_angle _geom_angle_publ_flag S1 S1 S3 107.90(10) yes S3 S2 S4 107.78(9) yes S1 S3 S2 107.75(9) yes S2 S4 S4 108.62(9) yes S5 S5 S7 107.38(9) yes S7 S6 S8 107.10(10) yes S5 S7 S6 107.71(7) yes S6 S8 S8 107.95(8) yes loop_ _geom_torsion_atom_site_label_1 _geom_torsion_atom_site_label_2 _geom_torsion_atom_site_label_3 _geom_torsion_atom_site_label_4 _geom_torsion _geom_torsion_publ_flag S1' S1 S3 S2 -99.10(10) yes S3 S1 S1' S3' 98.50(10) yes S4 S2 S3 S1 99.20(10) yes S3 S2 S4 S4' -98.40(10) yes S2 S4 S4' S2' 98.00(10) yes S5' S5 S7 S6 -99.90(10) yes S7 S5 S5' S7' 99.80(10) yes S8 S6 S7 S5 99.20(10) yes S7 S6 S8 S8' -98.60(10) yes S6 S8 S8' S6' 99.50(10) yes _cod_database_code 2002079 avogadro-1.1.1/crystals/elements/Am-Americium.cif0000644000175000001440000000427712250371054021147 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008524.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008524 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Double hexagonal closest packed, dhcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Am _chemical_name_mineral Americium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.474 _cell_length_b 3.474 _cell_length_c 11.25 _cell_volume 117.583 _exptl_crystal_density_diffrn 13.727 _cod_database_code 9008524 _amcsd_database_code AMCSD#0010855 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Am1 0.00000 0.00000 0.00000 Am2 0.33333 0.66667 0.75000 avogadro-1.1.1/crystals/elements/Te-Tellurium.cif0000644000175000001440000000366712250371054021233 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008580.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008580 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Te _chemical_name_mineral Tellurium _space_group_IT_number 154 _symmetry_space_group_name_Hall 'P 32 2"' _symmetry_space_group_name_H-M 'P 32 2 1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.44693 _cell_length_b 4.44693 _cell_length_c 5.91492 _cell_volume 101.298 _exptl_crystal_density_diffrn 3.883 _cod_database_code 9008580 _amcsd_database_code AMCSD#0010911 loop_ _symmetry_equiv_pos_as_xyz x,y,z y,x,-z -y,x-y,2/3+z -x,-x+y,2/3-z -x+y,-x,1/3+z x-y,-y,1/3-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Te 0.26900 0.00000 0.16667 avogadro-1.1.1/crystals/elements/Ga-Gallium.cif0000644000175000001440000000417412250371054020614 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008563.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008563 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample supercooled to T = -16.3 C ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ga _chemical_name_mineral Gallium _space_group_IT_number 63 _symmetry_space_group_name_Hall '-C 2c 2' _symmetry_space_group_name_H-M 'C m c m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.90 _cell_length_b 8.13 _cell_length_c 3.17 _cell_volume 74.739 _diffrn_ambient_temperature 256.85 _exptl_crystal_density_diffrn 6.196 _cod_database_code 9008563 _amcsd_database_code AMCSD#0010894 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,z x,-y,1/2+z 1/2+x,1/2-y,1/2+z -x,y,1/2-z 1/2-x,1/2+y,1/2-z -x,y,z 1/2-x,1/2+y,z x,-y,-z 1/2+x,1/2-y,-z x,y,1/2-z 1/2+x,1/2+y,1/2-z -x,-y,1/2+z 1/2-x,1/2-y,1/2+z -x,-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ga 0.00000 0.13300 0.25000 avogadro-1.1.1/crystals/elements/Al-Aluminum.cif0000644000175000001440000000761512250371054021021 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008460.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_9008460 _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _[local]_cod_cif_authors_sg_H-M 'F m 3 m' loop_ _publ_author_name 'Wyckoff R W G' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Al _chemical_name_mineral Aluminum _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.04958 _cell_length_b 4.04958 _cell_length_c 4.04958 _cell_volume 66.409 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al 0.00000 0.00000 0.00000 _cod_database_code 9008460 avogadro-1.1.1/crystals/elements/Nd-Neodymium.cif0000644000175000001440000000430212250371054021173 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008526.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008526 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Double hexagonal closest packed, dhcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Nd _chemical_name_mineral Neodymium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.6579 _cell_length_b 3.6579 _cell_length_c 11.7992 _cell_volume 136.725 _exptl_crystal_density_diffrn 7.007 _cod_database_code 9008526 _amcsd_database_code AMCSD#0010857 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Nd1 0.00000 0.00000 0.00000 Nd2 0.33333 0.66667 0.75000 avogadro-1.1.1/crystals/elements/Y-Yttrium.cif0000644000175000001440000000422712250371054020557 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008521.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008521 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Y _chemical_name_mineral Yttrium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.6474 _cell_length_b 3.6474 _cell_length_c 5.7306 _cell_volume 66.023 _exptl_crystal_density_diffrn 4.472 _cod_database_code 9008521 _amcsd_database_code AMCSD#0010852 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Y 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Np-Neptunium-beta.cif0000644000175000001440000000411112250371054022134 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008586.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008586 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample is stable between 551 K and 843 K Note: T = 586 K ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Np _chemical_name_mineral Neptunium-beta _space_group_IT_number 90 _symmetry_space_group_name_Hall 'P 4ab 2ab' _symmetry_space_group_name_H-M 'P 4 21 2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.897 _cell_length_b 4.897 _cell_length_c 3.388 _cell_volume 81.246 _diffrn_ambient_temperature 586 _exptl_crystal_density_diffrn 19.376 _cod_database_code 9008586 _amcsd_database_code AMCSD#0010917 loop_ _symmetry_equiv_pos_as_xyz x,y,z y,x,-z 1/2-y,1/2+x,z 1/2-x,1/2+y,-z -x,-y,z -y,-x,-z 1/2+y,1/2-x,z 1/2+x,1/2-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Np1 0.00000 0.00000 0.00000 Np2 0.00000 0.50000 -0.37500 avogadro-1.1.1/crystals/elements/Tl-Thallium.cif0000644000175000001440000000620512250371054021026 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008555.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008555 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Tl _chemical_name_mineral Thallium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.882 _cell_length_b 3.882 _cell_length_c 3.882 _cell_volume 58.501 _exptl_crystal_density_diffrn 11.603 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008555 _amcsd_database_code AMCSD#0010886 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Tl 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Pb-Lead.cif0000644000175000001440000001051612250371054020076 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008477.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008477 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Pb _chemical_name_mineral Lead _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.9505 _cell_length_b 4.9505 _cell_length_c 4.9505 _cell_volume 121.324 _exptl_crystal_density_diffrn 11.344 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008477 _amcsd_database_code AMCSD#0010807 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pb 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Cl-Chlorine.cif0000644000175000001440000000416012250371054020767 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008593.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008593 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 113 K ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Cl _chemical_name_mineral Chlorine _space_group_IT_number 64 _symmetry_space_group_name_Hall '-B 2ab 2' _symmetry_space_group_name_H-M 'B m a b' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.24 _cell_length_b 8.26 _cell_length_c 4.48 _cell_volume 230.910 _diffrn_ambient_temperature 113 _exptl_crystal_density_diffrn 2.040 _cod_database_code 9008593 _amcsd_database_code AMCSD#0010924 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,y,1/2+z x,1/2+y,1/2-z 1/2+x,1/2+y,-z -x,1/2-y,1/2+z 1/2-x,1/2-y,+z -x,y,z 1/2-x,y,1/2+z x,-y,-z 1/2+x,-y,1/2-z x,1/2-y,1/2+z 1/2+x,1/2-y,+z -x,1/2+y,1/2-z 1/2-x,1/2+y,-z -x,-y,-z 1/2-x,-y,1/2-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cl 0.00000 0.10000 0.13000 avogadro-1.1.1/crystals/elements/La-Lanthanum.cif0000644000175000001440000000427712250371054021162 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008525.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008525 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Double hexagonal closest packed, dhcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum La _chemical_name_mineral Lanthanum _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.770 _cell_length_b 3.770 _cell_length_c 12.159 _cell_volume 149.662 _exptl_crystal_density_diffrn 6.165 _cod_database_code 9008525 _amcsd_database_code AMCSD#0010856 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z La1 0.00000 0.00000 0.00000 La2 0.33333 0.66667 0.75000 avogadro-1.1.1/crystals/elements/Au-Gold.cif0000644000175000001440000001052012250371054020115 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008463.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008463 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Au _chemical_name_mineral Gold _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.07825 _cell_length_b 4.07825 _cell_length_c 4.07825 _cell_volume 67.830 _exptl_crystal_density_diffrn 19.288 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008463 _amcsd_database_code AMCSD#0010793 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Au 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/P-Phosphorus.cif0000644000175000001440000000413112250371054021235 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008572.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008572 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample known as black phosphorus ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum P _chemical_name_mineral Phosphorus _space_group_IT_number 64 _symmetry_space_group_name_Hall '-B 2ab 2' _symmetry_space_group_name_H-M 'B m a b' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.31 _cell_length_b 4.38 _cell_length_c 10.50 _cell_volume 152.227 _exptl_crystal_density_diffrn 2.703 _cod_database_code 9008572 _amcsd_database_code AMCSD#0010903 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,y,1/2+z x,1/2+y,1/2-z 1/2+x,1/2+y,-z -x,1/2-y,1/2+z 1/2-x,1/2-y,+z -x,y,z 1/2-x,y,1/2+z x,-y,-z 1/2+x,-y,1/2-z x,1/2-y,1/2+z 1/2+x,1/2-y,+z -x,1/2+y,1/2-z 1/2-x,1/2+y,-z -x,-y,-z 1/2-x,-y,1/2-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z P 0.00000 0.09000 0.09800 avogadro-1.1.1/crystals/elements/Hf-Hafnium.cif0000644000175000001440000000423212250371054020612 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008501.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008501 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Hf _chemical_name_mineral Hafnium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.1967 _cell_length_b 3.1967 _cell_length_c 5.0578 _cell_volume 44.761 _exptl_crystal_density_diffrn 13.243 _cod_database_code 9008501 _amcsd_database_code AMCSD#0010831 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Hf 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Ce-Cerium.cif0000644000175000001440000000422212250371054020440 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008491.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008491 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ce _chemical_name_mineral Cerium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.65 _cell_length_b 3.65 _cell_length_c 5.96 _cell_volume 68.764 _exptl_crystal_density_diffrn 6.767 _cod_database_code 9008491 _amcsd_database_code AMCSD#0010821 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ce 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Kr-Krypton.cif0000644000175000001440000001060512250371054020711 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008471.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008471 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 58 K Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Kr _chemical_name_mineral Krypton _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.721 _cell_length_b 5.721 _cell_length_c 5.721 _cell_volume 187.247 _diffrn_ambient_temperature 58 _exptl_crystal_density_diffrn 2.973 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008471 _amcsd_database_code AMCSD#0010801 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Kr 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Fe-Iron-beta.cif0000644000175000001440000000627612250371054021052 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008537.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008537 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 1073 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Fe _chemical_name_mineral Iron-beta _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.91 _cell_length_b 2.91 _cell_length_c 2.91 _cell_volume 24.642 _diffrn_ambient_temperature 1073 _exptl_crystal_density_diffrn 7.527 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008537 _amcsd_database_code AMCSD#0010868 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Fe 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/V-Vanadium.cif0000644000175000001440000000620512250371054020641 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008557.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008557 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum V _chemical_name_mineral Vanadium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.0240 _cell_length_b 3.0240 _cell_length_c 3.0240 _cell_volume 27.653 _exptl_crystal_density_diffrn 6.118 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008557 _amcsd_database_code AMCSD#0010888 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z V 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Co-Cobalt.cif0000644000175000001440000000423012250371054020431 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008492.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008492 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Co _chemical_name_mineral Cobalt _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.5071 _cell_length_b 2.5071 _cell_length_c 4.0686 _cell_volume 22.147 _exptl_crystal_density_diffrn 8.837 _cod_database_code 9008492 _amcsd_database_code AMCSD#0010822 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Co 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Rb-Rubidium.cif0000644000175000001440000000627512250371054021022 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008550.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008550 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 78 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Rb _chemical_name_mineral Rubidium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.605 _cell_length_b 5.605 _cell_length_c 5.605 _cell_volume 176.087 _diffrn_ambient_temperature 78 _exptl_crystal_density_diffrn 1.612 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008550 _amcsd_database_code AMCSD#0010881 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Rb 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/C-Lonsdaleite.cif0000644000175000001440000000266712250371054021325 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_global _chemical_name_mineral 'Lonsdaleite' loop_ _publ_author_name 'Bundy F P' 'Kasper J S' _journal_name_full 'Journal of Chemical Physics' _journal_volume 46 _journal_year 1967 _journal_page_first 3437 _journal_page_last 3446 _publ_section_title ; Hexagonal diamond-a new form of carbon ; _database_code_amcsd 0012989 _chemical_formula_sum 'C' _cell_length_a 2.52 _cell_length_b 2.52 _cell_length_c 4.12 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 22.658 _exptl_crystal_density_diffrn 3.521 _symmetry_space_group_name_H-M 'P 63/m m c' loop_ _space_group_symop_operation_xyz 'x,y,z' '-x,-x+y,1/2+z' 'x,x-y,1/2-z' '-x+y,-x,1/2-z' 'x-y,x,1/2+z' '-y,-x,z' 'y,x,-z' 'y,-x+y,-z' '-y,x-y,z' 'x-y,-y,1/2+z' '-x+y,y,1/2-z' 'x,y,1/2-z' '-x,-y,1/2+z' 'x,x-y,z' '-x,-x+y,-z' 'x-y,x,-z' '-x+y,-x,z' 'y,x,1/2+z' '-y,-x,1/2-z' '-y,x-y,1/2-z' 'y,-x+y,1/2+z' '-x+y,y,z' 'x-y,-y,-z' '-x,-y,-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z C 0.33333 0.66667 0.06250 avogadro-1.1.1/crystals/elements/Tb-Terbium.cif0000644000175000001440000000423112250371054020641 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008516.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008516 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Tb _chemical_name_mineral Terbium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.6010 _cell_length_b 3.6010 _cell_length_c 5.6936 _cell_volume 63.939 _exptl_crystal_density_diffrn 8.255 _cod_database_code 9008516 _amcsd_database_code AMCSD#0010847 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Tb 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Sn-Tin-alpha.cif0000644000175000001440000001151712250371054021067 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008568.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008568 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Sn _chemical_name_mineral Tin-alpha _space_group_IT_number 227 _symmetry_space_group_name_Hall 'F 4d 2 3 -1d' _symmetry_space_group_name_H-M 'F d -3 m :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.4912 _cell_length_b 6.4912 _cell_length_c 6.4912 _cell_volume 273.511 _exptl_crystal_density_diffrn 5.766 _[local]_cod_cif_authors_sg_H-M 'F d 3 m' _cod_database_code 9008568 _amcsd_database_code AMCSD#0010899 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+z,3/4-x,1/4+y 3/4+z,1/4-x,3/4+y 1/4+z,3/4-x,3/4+y 1/4+z,1/4-x,1/4+y -y,1/2+z,1/2-x -y,+z,-x 1/2-y,1/2+z,-x 1/2-y,+z,1/2-x 3/4+x,3/4-y,1/4+z 3/4+x,1/4-y,3/4+z 1/4+x,3/4-y,3/4+z 1/4+x,1/4-y,1/4+z -z,1/2+x,1/2-y -z,+x,-y 1/2-z,1/2+x,-y 1/2-z,+x,1/2-y 3/4+y,3/4-z,1/4+x 3/4+y,1/4-z,3/4+x 1/4+y,3/4-z,3/4+x 1/4+y,1/4-z,1/4+x -x,1/2+y,1/2-z -x,+y,-z 1/2-x,1/2+y,-z 1/2-x,+y,1/2-z 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y +x,-z,-y +x,1/2-z,1/2-y 3/4-z,3/4+y,1/4+x 3/4-z,1/4+y,3/4+x 1/4-z,3/4+y,3/4+x 1/4-z,1/4+y,1/4+x 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z +y,-x,-z +y,1/2-x,1/2-z 3/4-x,3/4+z,1/4+y 3/4-x,1/4+z,3/4+y 1/4-x,3/4+z,3/4+y 1/4-x,1/4+z,1/4+y 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x +z,-y,-x +z,1/2-y,1/2-x 3/4-y,3/4+x,1/4+z 3/4-y,1/4+x,3/4+z 1/4-y,3/4+x,3/4+z 1/4-y,1/4+x,1/4+z x,1/2+z,1/2+y x,+z,+y 1/2+x,1/2+z,+y 1/2+x,+z,1/2+y 1/4-z,3/4-y,3/4-x 1/4-z,1/4-y,1/4-x 3/4-z,3/4-y,1/4-x 3/4-z,1/4-y,3/4-x y,1/2+x,1/2+z y,+x,+z 1/2+y,1/2+x,+z 1/2+y,+x,1/2+z 1/4-x,3/4-z,3/4-y 1/4-x,1/4-z,1/4-y 3/4-x,3/4-z,1/4-y 3/4-x,1/4-z,3/4-y z,1/2+y,1/2+x z,+y,+x 1/2+z,1/2+y,+x 1/2+z,+y,1/2+x 1/4-y,3/4-x,3/4-z 1/4-y,1/4-x,1/4-z 3/4-y,3/4-x,1/4-z 3/4-y,1/4-x,3/4-z 3/4+z,1/4+x,3/4-y 3/4+z,3/4+x,1/4-y 1/4+z,1/4+x,1/4-y 1/4+z,3/4+x,3/4-y -y,1/2-z,1/2+x -y,-z,+x 1/2-y,1/2-z,+x 1/2-y,-z,1/2+x 3/4+x,1/4+y,3/4-z 3/4+x,3/4+y,1/4-z 1/4+x,1/4+y,1/4-z 1/4+x,3/4+y,3/4-z -z,1/2-x,1/2+y -z,-x,+y 1/2-z,1/2-x,+y 1/2-z,-x,1/2+y 3/4+y,1/4+z,3/4-x 3/4+y,3/4+z,1/4-x 1/4+y,1/4+z,1/4-x 1/4+y,3/4+z,3/4-x -x,1/2-y,1/2+z -x,-y,+z 1/2-x,1/2-y,+z 1/2-x,-y,1/2+z 1/4-z,3/4+x,3/4+y 1/4-z,1/4+x,1/4+y 3/4-z,3/4+x,1/4+y 3/4-z,1/4+x,3/4+y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x 1/4-x,3/4+y,3/4+z 1/4-x,1/4+y,1/4+z 3/4-x,3/4+y,1/4+z 3/4-x,1/4+y,3/4+z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y 1/4-y,3/4+z,3/4+x 1/4-y,1/4+z,1/4+x 3/4-y,3/4+z,1/4+x 3/4-y,1/4+z,3/4+x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z 1/2-x,1/2+z,-y 1/2-x,+z,1/2-y -x,1/2+z,1/2-y -x,+z,-y 1/4+z,3/4-y,3/4+x 1/4+z,1/4-y,1/4+x 3/4+z,3/4-y,1/4+x 3/4+z,1/4-y,3/4+x 1/2-y,1/2+x,-z 1/2-y,+x,1/2-z -y,1/2+x,1/2-z -y,+x,-z 1/4+x,3/4-z,3/4+y 1/4+x,1/4-z,1/4+y 3/4+x,3/4-z,1/4+y 3/4+x,1/4-z,3/4+y 1/2-z,1/2+y,-x 1/2-z,+y,1/2-x -z,1/2+y,1/2-x -z,+y,-x 1/4+y,3/4-x,3/4+z 1/4+y,1/4-x,1/4+z 3/4+y,3/4-x,1/4+z 3/4+y,1/4-x,3/4+z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y 3/4+z,3/4+y,1/4-x 3/4+z,1/4+y,3/4-x 1/4+z,3/4+y,3/4-x 1/4+z,1/4+y,1/4-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z 3/4+x,3/4+z,1/4-y 3/4+x,1/4+z,3/4-y 1/4+x,3/4+z,3/4-y 1/4+x,1/4+z,1/4-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x 3/4+y,3/4+x,1/4-z 3/4+y,1/4+x,3/4-z 1/4+y,3/4+x,3/4-z 1/4+y,1/4+x,1/4-z 1/4-z,1/4-x,1/4-y 1/4-z,3/4-x,3/4-y 3/4-z,1/4-x,3/4-y 3/4-z,3/4-x,1/4-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x 1/4-x,1/4-y,1/4-z 1/4-x,3/4-y,3/4-z 3/4-x,1/4-y,3/4-z 3/4-x,3/4-y,1/4-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y 1/4-y,1/4-z,1/4-x 1/4-y,3/4-z,3/4-x 3/4-y,1/4-z,3/4-x 3/4-y,3/4-z,1/4-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sn 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Lu-Lutetium.cif0000644000175000001440000000423212250371054021056 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008505.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008505 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Lu _chemical_name_mineral Lutetium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.5031 _cell_length_b 3.5031 _cell_length_c 5.5509 _cell_volume 58.993 _exptl_crystal_density_diffrn 9.850 _cod_database_code 9008505 _amcsd_database_code AMCSD#0010835 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Lu 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Pd-Palladium.cif0000644000175000001440000001052212250371054021140 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008478.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008478 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Pd _chemical_name_mineral Palladium _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.8898 _cell_length_b 3.8898 _cell_length_c 3.8898 _cell_volume 58.855 _exptl_crystal_density_diffrn 12.010 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008478 _amcsd_database_code AMCSD#0010808 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pd 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Pu-Plutonium-gamma.cif0000644000175000001440000000471312250371054022332 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008588.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008588 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 508 K ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Pu _chemical_name_mineral Plutonium-gamma _space_group_IT_number 70 _symmetry_space_group_name_Hall 'F 2 2 -1d' _symmetry_space_group_name_H-M 'F d d d :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.1587 _cell_length_b 5.7682 _cell_length_c 10.162 _cell_volume 185.152 _diffrn_ambient_temperature 508 _exptl_crystal_density_diffrn 17.507 _[local]_cod_cif_authors_sg_H-M 'F d d d' _cod_database_code 9008588 _amcsd_database_code AMCSD#0010919 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+x,1/4-y,3/4+z 3/4+x,3/4-y,1/4+z 1/4+x,1/4-y,1/4+z 1/4+x,3/4-y,3/4+z -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z 1/4-x,3/4+y,3/4+z 1/4-x,1/4+y,1/4+z 3/4-x,3/4+y,1/4+z 3/4-x,1/4+y,3/4+z x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z 3/4+x,3/4+y,1/4-z 3/4+x,1/4+y,3/4-z 1/4+x,3/4+y,3/4-z 1/4+x,1/4+y,1/4-z -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z 1/4-x,1/4-y,1/4-z 1/4-x,3/4-y,3/4-z 3/4-x,1/4-y,3/4-z 3/4-x,3/4-y,1/4-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pu 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Fe-Iron-alpha.cif0000644000175000001440000000630312250371054021213 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008536.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008536 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 298 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Fe _chemical_name_mineral Iron-alpha _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.8665 _cell_length_b 2.8665 _cell_length_c 2.8665 _cell_volume 23.554 _diffrn_ambient_temperature 298 _exptl_crystal_density_diffrn 7.875 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008536 _amcsd_database_code AMCSD#0010867 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Fe 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ar-Argon.cif0000644000175000001440000001060512250371054020277 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008462.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008462 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 4.2 K Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ar _chemical_name_mineral Argon _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.256 _cell_length_b 5.256 _cell_length_c 5.256 _cell_volume 145.200 _diffrn_ambient_temperature 4.2 _exptl_crystal_density_diffrn 1.827 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008462 _amcsd_database_code AMCSD#0010792 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ar 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Fe-Iron-delta.cif0000644000175000001440000000627712250371054021231 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008538.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008538 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 1700 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Fe _chemical_name_mineral Iron-delta _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.94 _cell_length_b 2.94 _cell_length_c 2.94 _cell_volume 25.412 _diffrn_ambient_temperature 1700 _exptl_crystal_density_diffrn 7.299 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008538 _amcsd_database_code AMCSD#0010869 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Fe 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Th-Thorium.cif0000644000175000001440000000622312250371054020672 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008553.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008553 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at 1723 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Th _chemical_name_mineral Thorium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.11 _cell_length_b 4.11 _cell_length_c 4.11 _cell_volume 69.427 _exptl_crystal_density_diffrn 11.100 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008553 _amcsd_database_code AMCSD#0010884 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Th 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Bi-Bismuth.cif0000644000175000001440000000377612250371054020647 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008576.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008576 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Bi _chemical_name_mineral Bismuth _space_group_IT_number 166 _symmetry_space_group_name_Hall '-P 3* 2' _symmetry_space_group_name_H-M 'R -3 m :R' _cell_angle_alpha 57.237 _cell_angle_beta 57.237 _cell_angle_gamma 57.237 _cell_length_a 4.7459 _cell_length_b 4.7459 _cell_length_c 4.7459 _cell_volume 70.776 _exptl_crystal_density_diffrn 9.806 _[local]_cod_cif_authors_sg_H-M 'R -3 m' _cod_database_code 9008576 _amcsd_database_code AMCSD#0010907 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-z,-y -z,-x,-y y,x,z y,z,x -z,-y,-x -x,-y,-z x,z,y z,x,y -y,-x,-z -y,-z,-x z,y,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Bi 0.23700 0.23700 0.23700 avogadro-1.1.1/crystals/elements/S8-Sulfur-alpha.cif0000644000175000001440000000604212250371054021524 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2011-06-11 06:04:15 +0000 (Sat, 11 Jun 2011) $ #$Revision: 20519 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/9011362.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9011362 loop_ _publ_author_name 'Rettig, S. J.' 'Trotter, J.' _publ_section_title ; Refinement of the structure of orthorhombic sulfur, alpha-S8 Locality: synthetic Sample: at T = 298 K Note: alpha phase ; _journal_name_full 'Acta Crystallographica, Section C' _journal_page_first 2260 _journal_page_last 2262 _journal_volume 43 _journal_year 1987 _chemical_formula_sum S8 _chemical_name_mineral Sulfur _space_group_IT_number 70 _symmetry_space_group_name_Hall '-F 2uv 2vw' _symmetry_space_group_name_H-M 'F d d d :2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 10.4646 _cell_length_b 12.8660 _cell_length_c 24.4860 _cell_volume 3296.735 _diffrn_ambient_temperature 298 _exptl_crystal_density_diffrn 2.067 _[local]_cod_cif_authors_sg_H-M 'F d d d' _cod_database_code 9011362 _amcsd_database_code AMCSD#0009802 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+x,-y,3/4+z 3/4+x,1/2-y,1/4+z 1/4+x,-y,1/4+z 1/4+x,1/2-y,3/4+z 3/4-x,y,3/4-z 3/4-x,1/2+y,1/4-z 1/4-x,y,1/4-z 1/4-x,1/2+y,3/4-z -x,3/4+y,3/4+z -x,1/4+y,1/4+z 1/2-x,3/4+y,1/4+z 1/2-x,1/4+y,3/4+z x,3/4-y,3/4-z x,1/4-y,1/4-z 1/2+x,3/4-y,1/4-z 1/2+x,1/4-y,3/4-z 3/4+x,3/4+y,-z 3/4+x,1/4+y,1/2-z 1/4+x,3/4+y,1/2-z 1/4+x,1/4+y,-z 3/4-x,3/4-y,z 3/4-x,1/4-y,1/2+z 1/4-x,3/4-y,1/2+z 1/4-x,1/4-y,z -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 S1 0.06080 0.03960 0.03330 0.00320 0.00520 0.00800 S2 0.04410 0.04860 0.04140 0.00990 -0.00530 0.00170 S3 0.05800 0.03700 0.04260 0.00100 0.00410 -0.00900 S4 0.03360 0.06230 0.03380 -0.00180 0.00610 0.00290 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv S1 0.85584 -0.04733 -0.04854 0.04500 S2 0.70733 -0.02023 0.00409 0.04500 S3 0.78415 0.03022 0.07623 0.04600 S4 0.78596 -0.09232 0.12947 0.04300 avogadro-1.1.1/crystals/elements/Mo-Molybdenum.cif0000644000175000001440000000621212250371054021354 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008543.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008543 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Mo _chemical_name_mineral Molybdenum _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.1473 _cell_length_b 3.1473 _cell_length_c 3.1473 _cell_volume 31.176 _exptl_crystal_density_diffrn 10.220 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008543 _amcsd_database_code AMCSD#0010874 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mo 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/S8-Sulfur-beta.cif0000644000175000001440000000714412250371054021356 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2011-06-11 06:04:15 +0000 (Sat, 11 Jun 2011) $ #$Revision: 20519 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/9009891.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009891 loop_ _publ_author_name 'Templeton, L. K.' 'Templeton, D. H.' 'Zalkin, A.' _publ_section_title ; Crystal structure of monoclinic sulfur Locality: synthetic Note: this is known as the beta phase of sulfur ; _journal_name_full 'Inorganic Chemistry' _journal_page_first 1999 _journal_page_last 2001 _journal_volume 15 _journal_year 1976 _chemical_formula_sum S8 _chemical_name_mineral Sulphur _space_group_IT_number 14 _symmetry_space_group_name_Hall '-P 2ybc' _symmetry_space_group_name_H-M 'P 1 21/c 1' _cell_angle_alpha 90 _cell_angle_beta 95.92 _cell_angle_gamma 90 _cell_length_a 10.926 _cell_length_b 10.855 _cell_length_c 10.790 _cell_volume 1272.888 _exptl_crystal_density_diffrn 2.008 _[local]_cod_chemical_formula_sum_orig S.75 _cod_database_code 9009891 _amcsd_database_code AMCSD#0013275 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,1/2+z -x,1/2+y,1/2-z -x,-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 S1 0.05953 0.04876 0.06193 0.00722 0.00215 0.00798 S2 0.04357 0.07447 0.07662 -0.01266 -0.00392 0.00785 S3 0.07460 0.05839 0.05142 -0.00874 -0.02267 -0.00405 S4 0.07701 0.03673 0.06358 -0.01039 -0.01469 0.00102 S5 0.05383 0.04901 0.04382 0.00544 0.00253 -0.00292 S6 0.05889 0.05167 0.03660 -0.00076 -0.01000 0.00304 S7 0.05725 0.04306 0.05307 -0.01190 0.00025 -0.00785 S8 0.06776 0.05674 0.04800 0.00063 0.01165 -0.01406 S9 0.04559 0.07092 0.11272 0.00380 -0.01900 0.00886 S10 0.09625 0.08485 0.06839 -0.00760 -0.01646 0.03547 S11 0.10259 0.07346 0.04813 -0.00253 -0.02280 -0.01013 S12 0.05826 0.07979 0.05826 0.00886 0.01520 -0.00127 S13 0.06459 0.05700 0.05446 0.00507 -0.00380 0.01520 S14 0.06206 0.09879 0.05193 0.00253 -0.01266 -0.01900 S15 0.06966 0.10259 0.07219 0.00000 0.02660 -0.01647 S16 0.05953 0.05319 0.12032 0.00253 0.00380 -0.01647 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy S1 0.23330 0.52510 0.02990 1.00000 S2 0.15380 0.35550 0.00700 1.00000 S3 0.25720 0.25230 -0.10220 1.00000 S4 0.37200 0.14390 0.01340 1.00000 S5 0.53980 0.22830 0.03810 1.00000 S6 0.55310 0.31540 0.20750 1.00000 S7 0.51330 0.49790 0.17800 1.00000 S8 0.33170 0.52460 0.20230 1.00000 S9 0.17830 -0.10830 0.08230 0.50000 S10 0.05050 -0.07100 0.20390 0.50000 S11 0.00740 0.11250 0.18800 0.50000 S12 -0.15530 0.12730 0.07900 0.50000 S13 -0.11990 0.17090 -0.09810 0.50000 S14 -0.12660 0.01050 -0.19660 0.50000 S15 0.05100 -0.04660 -0.20300 0.50000 S16 0.08990 -0.18220 -0.07430 0.50000 avogadro-1.1.1/crystals/elements/Li-Lithium.cif0000644000175000001440000000630012250371054020643 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008542.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008542 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 293 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Li _chemical_name_mineral Lithium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.5093 _cell_length_b 3.5093 _cell_length_c 3.5093 _cell_volume 43.218 _diffrn_ambient_temperature 293 _exptl_crystal_density_diffrn 0.533 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008542 _amcsd_database_code AMCSD#0010873 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Li 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/In-Indium.cif0000644000175000001440000000354412250371054020466 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910133 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Pages 8 & 10 from the second edition supplement of The Structure of Crystals by Wyckoff R W G. published by Reinhold Publishing Corporation, INC,Camden,N. J. in 1935 & http://database.iem.ac.ru/mincryst ; _journal_name_full 'The second edition supplement of The Structure of Crystals' _journal_page_first 8 _journal_page_last 10 _journal_year 1935 _chemical_formula_structural In _chemical_formula_sum In _chemical_name_systematic Indium _symmetry_cell_setting tetragonal _symmetry_Int_Tables_number 139 _symmetry_space_group_name_H-M 'I 4/m m m' _audit_creation_date 2005-07-11 _audit_creation_method ; Pages 8 & 10 from the second edition supplement of The Structure of Crystals by Wyckoff R W G. published by Reinhold Publishing Corporation, INC,Camden,N. J. in 1935 & http://database.iem.ac.ru/mincryst ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 4.583 _cell_angle_beta 4.583 _cell_angle_gamma 4.936 _cell_length_a 90 _cell_length_b 90 _cell_length_c 90 _cell_volume 4225.771 _cod_database_code 5910133 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.000000 0.000000 0.000000 In1 0.500000 0.500000 0.000000 In2 0.500000 0.000000 0.500000 In3 0.000000 0.500000 0.500000 In4 avogadro-1.1.1/crystals/elements/Be-Beryllium.cif0000644000175000001440000000423312250371054021161 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008488.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008488 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Be _chemical_name_mineral Beryllium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.2866 _cell_length_b 2.2866 _cell_length_c 3.5833 _cell_volume 16.225 _exptl_crystal_density_diffrn 1.845 _cod_database_code 9008488 _amcsd_database_code AMCSD#0010818 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Be 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Gd-Gadolinium.cif0000644000175000001440000000432612250371054021314 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008499.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008499 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 293 K Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Gd _chemical_name_mineral Gadolinium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.6360 _cell_length_b 3.6360 _cell_length_c 5.7826 _cell_volume 66.207 _diffrn_ambient_temperature 293 _exptl_crystal_density_diffrn 7.888 _cod_database_code 9008499 _amcsd_database_code AMCSD#0010829 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Gd 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Ag-Silver.cif0000644000175000001440000001051712250371054020464 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008459.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008459 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ag _chemical_name_mineral Silver _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.0862 _cell_length_b 4.0862 _cell_length_c 4.0862 _cell_volume 68.227 _exptl_crystal_density_diffrn 10.501 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008459 _amcsd_database_code AMCSD#0010788 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ag 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ca-Calcium-beta.cif0000644000175000001440000000432512250371054021502 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008489.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008489 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 450 C Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ca _chemical_name_mineral Calcium-beta _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.98 _cell_length_b 3.98 _cell_length_c 6.52 _cell_volume 89.443 _diffrn_ambient_temperature 723.15 _exptl_crystal_density_diffrn 1.488 _cod_database_code 9008489 _amcsd_database_code AMCSD#0010819 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ca 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/K-Potassium.cif0000644000175000001440000000627412250371054021054 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008540.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008540 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 78 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum K _chemical_name_mineral Potassium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.247 _cell_length_b 5.247 _cell_length_c 5.247 _cell_volume 144.455 _diffrn_ambient_temperature 78 _exptl_crystal_density_diffrn 0.899 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008540 _amcsd_database_code AMCSD#0010871 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z K 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ru-Ruthenium.cif0000644000175000001440000000423712250371054021241 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008513.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008513 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ru _chemical_name_mineral Ruthenium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.70389 _cell_length_b 2.70389 _cell_length_c 4.28168 _cell_volume 27.110 _exptl_crystal_density_diffrn 12.382 _cod_database_code 9008513 _amcsd_database_code AMCSD#0010844 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ru 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Ac-Actinium.cif0000644000175000001440000001051712250371054020765 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008458.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008458 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ac _chemical_name_mineral Actinium _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.311 _cell_length_b 5.311 _cell_length_c 5.311 _cell_volume 149.806 _exptl_crystal_density_diffrn 10.065 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008458 _amcsd_database_code AMCSD#0010787 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ac 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Zn-Zinc.cif0000644000175000001440000000422612250371054020163 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008522.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008522 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Zn _chemical_name_mineral Zinc _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.6648 _cell_length_b 2.6648 _cell_length_c 4.9467 _cell_volume 30.421 _exptl_crystal_density_diffrn 7.139 _cod_database_code 9008522 _amcsd_database_code AMCSD#0010853 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zn 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Mg-Magnesium.cif0000644000175000001440000000423612250371054021162 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008506.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008506 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Mg _chemical_name_mineral Magnesium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.20927 _cell_length_b 3.20927 _cell_length_c 5.21033 _cell_volume 46.474 _exptl_crystal_density_diffrn 1.737 _cod_database_code 9008506 _amcsd_database_code AMCSD#0010836 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mg 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Ge-Germanium.cif0000644000175000001440000001152212250371054021145 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008567.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008567 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ge _chemical_name_mineral Germanium _space_group_IT_number 227 _symmetry_space_group_name_Hall 'F 4d 2 3 -1d' _symmetry_space_group_name_H-M 'F d -3 m :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.65735 _cell_length_b 5.65735 _cell_length_c 5.65735 _cell_volume 181.067 _exptl_crystal_density_diffrn 5.327 _[local]_cod_cif_authors_sg_H-M 'F d 3 m' _cod_database_code 9008567 _amcsd_database_code AMCSD#0010898 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+z,3/4-x,1/4+y 3/4+z,1/4-x,3/4+y 1/4+z,3/4-x,3/4+y 1/4+z,1/4-x,1/4+y -y,1/2+z,1/2-x -y,+z,-x 1/2-y,1/2+z,-x 1/2-y,+z,1/2-x 3/4+x,3/4-y,1/4+z 3/4+x,1/4-y,3/4+z 1/4+x,3/4-y,3/4+z 1/4+x,1/4-y,1/4+z -z,1/2+x,1/2-y -z,+x,-y 1/2-z,1/2+x,-y 1/2-z,+x,1/2-y 3/4+y,3/4-z,1/4+x 3/4+y,1/4-z,3/4+x 1/4+y,3/4-z,3/4+x 1/4+y,1/4-z,1/4+x -x,1/2+y,1/2-z -x,+y,-z 1/2-x,1/2+y,-z 1/2-x,+y,1/2-z 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y +x,-z,-y +x,1/2-z,1/2-y 3/4-z,3/4+y,1/4+x 3/4-z,1/4+y,3/4+x 1/4-z,3/4+y,3/4+x 1/4-z,1/4+y,1/4+x 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z +y,-x,-z +y,1/2-x,1/2-z 3/4-x,3/4+z,1/4+y 3/4-x,1/4+z,3/4+y 1/4-x,3/4+z,3/4+y 1/4-x,1/4+z,1/4+y 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x +z,-y,-x +z,1/2-y,1/2-x 3/4-y,3/4+x,1/4+z 3/4-y,1/4+x,3/4+z 1/4-y,3/4+x,3/4+z 1/4-y,1/4+x,1/4+z x,1/2+z,1/2+y x,+z,+y 1/2+x,1/2+z,+y 1/2+x,+z,1/2+y 1/4-z,3/4-y,3/4-x 1/4-z,1/4-y,1/4-x 3/4-z,3/4-y,1/4-x 3/4-z,1/4-y,3/4-x y,1/2+x,1/2+z y,+x,+z 1/2+y,1/2+x,+z 1/2+y,+x,1/2+z 1/4-x,3/4-z,3/4-y 1/4-x,1/4-z,1/4-y 3/4-x,3/4-z,1/4-y 3/4-x,1/4-z,3/4-y z,1/2+y,1/2+x z,+y,+x 1/2+z,1/2+y,+x 1/2+z,+y,1/2+x 1/4-y,3/4-x,3/4-z 1/4-y,1/4-x,1/4-z 3/4-y,3/4-x,1/4-z 3/4-y,1/4-x,3/4-z 3/4+z,1/4+x,3/4-y 3/4+z,3/4+x,1/4-y 1/4+z,1/4+x,1/4-y 1/4+z,3/4+x,3/4-y -y,1/2-z,1/2+x -y,-z,+x 1/2-y,1/2-z,+x 1/2-y,-z,1/2+x 3/4+x,1/4+y,3/4-z 3/4+x,3/4+y,1/4-z 1/4+x,1/4+y,1/4-z 1/4+x,3/4+y,3/4-z -z,1/2-x,1/2+y -z,-x,+y 1/2-z,1/2-x,+y 1/2-z,-x,1/2+y 3/4+y,1/4+z,3/4-x 3/4+y,3/4+z,1/4-x 1/4+y,1/4+z,1/4-x 1/4+y,3/4+z,3/4-x -x,1/2-y,1/2+z -x,-y,+z 1/2-x,1/2-y,+z 1/2-x,-y,1/2+z 1/4-z,3/4+x,3/4+y 1/4-z,1/4+x,1/4+y 3/4-z,3/4+x,1/4+y 3/4-z,1/4+x,3/4+y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x 1/4-x,3/4+y,3/4+z 1/4-x,1/4+y,1/4+z 3/4-x,3/4+y,1/4+z 3/4-x,1/4+y,3/4+z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y 1/4-y,3/4+z,3/4+x 1/4-y,1/4+z,1/4+x 3/4-y,3/4+z,1/4+x 3/4-y,1/4+z,3/4+x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z 1/2-x,1/2+z,-y 1/2-x,+z,1/2-y -x,1/2+z,1/2-y -x,+z,-y 1/4+z,3/4-y,3/4+x 1/4+z,1/4-y,1/4+x 3/4+z,3/4-y,1/4+x 3/4+z,1/4-y,3/4+x 1/2-y,1/2+x,-z 1/2-y,+x,1/2-z -y,1/2+x,1/2-z -y,+x,-z 1/4+x,3/4-z,3/4+y 1/4+x,1/4-z,1/4+y 3/4+x,3/4-z,1/4+y 3/4+x,1/4-z,3/4+y 1/2-z,1/2+y,-x 1/2-z,+y,1/2-x -z,1/2+y,1/2-x -z,+y,-x 1/4+y,3/4-x,3/4+z 1/4+y,1/4-x,1/4+z 3/4+y,3/4-x,1/4+z 3/4+y,1/4-x,3/4+z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y 3/4+z,3/4+y,1/4-x 3/4+z,1/4+y,3/4-x 1/4+z,3/4+y,3/4-x 1/4+z,1/4+y,1/4-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z 3/4+x,3/4+z,1/4-y 3/4+x,1/4+z,3/4-y 1/4+x,3/4+z,3/4-y 1/4+x,1/4+z,1/4-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x 3/4+y,3/4+x,1/4-z 3/4+y,1/4+x,3/4-z 1/4+y,3/4+x,3/4-z 1/4+y,1/4+x,1/4-z 1/4-z,1/4-x,1/4-y 1/4-z,3/4-x,3/4-y 3/4-z,1/4-x,3/4-y 3/4-z,3/4-x,1/4-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x 1/4-x,1/4-y,1/4-z 1/4-x,3/4-y,3/4-z 3/4-x,1/4-y,3/4-z 3/4-x,3/4-y,1/4-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y 1/4-y,1/4-z,1/4-x 1/4-y,3/4-z,3/4-x 3/4-y,1/4-z,3/4-x 3/4-y,3/4-z,1/4-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ge 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/As-Arsenolamprite.cif0000644000175000001440000000410012250371054022210 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008573.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008573 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum As _chemical_name_mineral Arsenolamprite _space_group_IT_number 64 _symmetry_space_group_name_Hall '-B 2ab 2' _symmetry_space_group_name_H-M 'B m a b' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.63 _cell_length_b 4.45 _cell_length_c 10.96 _cell_volume 177.042 _exptl_crystal_density_diffrn 5.622 _cod_database_code 9008573 _amcsd_database_code AMCSD#0010904 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,y,1/2+z x,1/2+y,1/2-z 1/2+x,1/2+y,-z -x,1/2-y,1/2+z 1/2-x,1/2-y,+z -x,y,z 1/2-x,y,1/2+z x,-y,-z 1/2+x,-y,1/2-z x,1/2-y,1/2+z 1/2+x,1/2-y,+z -x,1/2+y,1/2-z 1/2-x,1/2+y,-z -x,-y,-z 1/2-x,-y,1/2-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z As 0.00000 0.09000 0.09800 avogadro-1.1.1/crystals/elements/Ne-Neon.cif0000644000175000001440000001060312250371054020126 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008475.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008475 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 4.2 K Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ne _chemical_name_mineral Neon _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.429 _cell_length_b 4.429 _cell_length_c 4.429 _cell_volume 86.879 _diffrn_ambient_temperature 4.2 _exptl_crystal_density_diffrn 1.543 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008475 _amcsd_database_code AMCSD#0010805 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ne 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Sn-Tin-beta.cif0000644000175000001440000000457612250371054020724 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008570.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008570 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample known as white tin ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Sn _chemical_name_mineral Tin _space_group_IT_number 141 _symmetry_space_group_name_Hall 'I 4bw 2bw -1bw' _symmetry_space_group_name_H-M 'I 41/a m d :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.8197 _cell_length_b 5.8197 _cell_length_c 3.17488 _cell_volume 107.530 _exptl_crystal_density_diffrn 7.333 _[local]_cod_cif_authors_sg_H-M 'I 41/a m d' _cod_database_code 9008570 _amcsd_database_code AMCSD#0010901 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z -y,1/2-x,1/4+z 1/2-y,-x,3/4+z 1/2+y,1/2+x,1/2-z +y,+x,-z 1/2+y,1/2-x,1/2-z +y,-x,-z -y,1/2+x,1/4+z 1/2-y,+x,3/4+z 1/2+x,1/2-y,1/2+z +x,-y,+z 1/2-x,y,3/4-z -x,1/2+y,1/4-z 1/2+x,y,3/4-z +x,1/2+y,1/4-z 1/2-x,1/2-y,1/2+z -x,-y,+z 1/2+y,x,3/4+z +y,1/2+x,1/4+z -y,-x,-z 1/2-y,1/2-x,1/2-z -y,x,-z 1/2-y,1/2+x,1/2-z 1/2+y,-x,3/4+z +y,1/2-x,1/4+z -x,y,z 1/2-x,1/2+y,1/2+z x,1/2-y,1/4-z 1/2+x,-y,3/4-z -x,1/2-y,1/4-z 1/2-x,-y,3/4-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sn 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ca-Calcium-gamma.cif0000644000175000001440000000630012250371054021644 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008530.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008530 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 773 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ca _chemical_name_mineral Calcium-gamma _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.38 _cell_length_b 4.38 _cell_length_c 4.38 _cell_volume 84.028 _diffrn_ambient_temperature 773 _exptl_crystal_density_diffrn 1.584 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008530 _amcsd_database_code AMCSD#0010861 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ca 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/U-Uranium-alpha.cif0000644000175000001440000000407112250371054021576 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008584.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008584 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum U _chemical_name_mineral Uranium-alpha _space_group_IT_number 63 _symmetry_space_group_name_Hall '-C 2c 2' _symmetry_space_group_name_H-M 'C m c m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 2.854 _cell_length_b 5.869 _cell_length_c 4.955 _cell_volume 82.997 _exptl_crystal_density_diffrn 19.049 _cod_database_code 9008584 _amcsd_database_code AMCSD#0010915 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,z x,-y,1/2+z 1/2+x,1/2-y,1/2+z -x,y,1/2-z 1/2-x,1/2+y,1/2-z -x,y,z 1/2-x,1/2+y,z x,-y,-z 1/2+x,1/2-y,-z x,y,1/2-z 1/2+x,1/2+y,1/2-z -x,-y,1/2+z 1/2-x,1/2-y,1/2+z -x,-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z U 0.00000 0.10250 0.25000 avogadro-1.1.1/crystals/elements/Se-Selenium.cif0000644000175000001440000000423312250371054021017 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008582.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008582 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample is the beta form of the monoclinic phase ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Se _chemical_name_mineral Selenium _space_group_IT_number 14 _symmetry_space_group_name_Hall '-P 2yab' _symmetry_space_group_name_H-M 'P 1 21/a 1' _cell_angle_alpha 90 _cell_angle_beta 93.133 _cell_angle_gamma 90 _cell_length_a 12.85 _cell_length_b 8.07 _cell_length_c 9.31 _cell_volume 963.999 _exptl_crystal_density_diffrn 4.352 _cod_database_code 9008582 _amcsd_database_code AMCSD#0010913 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2-y,z 1/2-x,1/2+y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Se1 0.58400 0.31500 0.43700 Se2 0.47700 0.22700 0.24600 Se3 0.32800 0.39800 0.24000 Se4 0.35200 0.58000 0.05000 Se5 0.41000 0.83100 0.15700 Se6 0.59000 0.84000 0.14200 Se7 0.66000 0.75400 0.36800 Se8 0.71000 0.47900 0.33400 0 0.13400 avogadro-1.1.1/crystals/elements/Dy-Dysprosium.cif0000644000175000001440000000432612250371054021424 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008495.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008495 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 293 K Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Dy _chemical_name_mineral Dysprosium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.5903 _cell_length_b 3.5903 _cell_length_c 5.6475 _cell_volume 63.045 _diffrn_ambient_temperature 293 _exptl_crystal_density_diffrn 8.560 _cod_database_code 9008495 _amcsd_database_code AMCSD#0010825 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Dy 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Ba-Barium.cif0000644000175000001440000000627512250371054020440 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008529.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008529 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 300 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ba _chemical_name_mineral Barium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.025 _cell_length_b 5.025 _cell_length_c 5.025 _cell_volume 126.884 _diffrn_ambient_temperature 300 _exptl_crystal_density_diffrn 3.594 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008529 _amcsd_database_code AMCSD#0010860 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ba 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Cu-Copper.cif0000644000175000001440000001052112250371054020463 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008468.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008468 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Cu _chemical_name_mineral Copper _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.61496 _cell_length_b 3.61496 _cell_length_c 3.61496 _cell_volume 47.240 _exptl_crystal_density_diffrn 8.935 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008468 _amcsd_database_code AMCSD#0010798 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cu 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ho-Holmium.cif0000644000175000001440000000423112250371054020645 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008502.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008502 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ho _chemical_name_mineral Holmium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.5773 _cell_length_b 3.5773 _cell_length_c 5.6158 _cell_volume 62.238 _exptl_crystal_density_diffrn 8.801 _cod_database_code 9008502 _amcsd_database_code AMCSD#0010832 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ho 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/P-Phosphorus-black.cif0000644000175000001440000000413112250371054022307 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008572.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008572 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample known as black phosphorus ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum P _chemical_name_mineral Phosphorus _space_group_IT_number 64 _symmetry_space_group_name_Hall '-B 2ab 2' _symmetry_space_group_name_H-M 'B m a b' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.31 _cell_length_b 4.38 _cell_length_c 10.50 _cell_volume 152.227 _exptl_crystal_density_diffrn 2.703 _cod_database_code 9008572 _amcsd_database_code AMCSD#0010903 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,y,1/2+z x,1/2+y,1/2-z 1/2+x,1/2+y,-z -x,1/2-y,1/2+z 1/2-x,1/2-y,+z -x,y,z 1/2-x,y,1/2+z x,-y,-z 1/2+x,-y,1/2-z x,1/2-y,1/2+z 1/2+x,1/2-y,+z -x,1/2+y,1/2-z 1/2-x,1/2+y,-z -x,-y,-z 1/2-x,-y,1/2-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z P 0.00000 0.09000 0.09800 avogadro-1.1.1/crystals/elements/Sc-Scandium.cif0000644000175000001440000000423212250371054020776 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008514.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008514 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Sc _chemical_name_mineral Scandium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.3090 _cell_length_b 3.3090 _cell_length_c 5.2733 _cell_volume 50.004 _exptl_crystal_density_diffrn 2.986 _cod_database_code 9008514 _amcsd_database_code AMCSD#0010845 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sc 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Nb-Niobium.cif0000644000175000001440000000620612250371054020632 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008546.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008546 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Nb _chemical_name_mineral Niobium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.3004 _cell_length_b 3.3004 _cell_length_c 3.3004 _cell_volume 35.950 _exptl_crystal_density_diffrn 8.583 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008546 _amcsd_database_code AMCSD#0010877 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Nb 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Mn-Manganese-delta.cif0000644000175000001440000000631212250371054022226 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008592.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008592 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 1240 C, stable till melting point at 1245 C ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Mn _chemical_name_mineral Manganese-delta _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.093 _cell_length_b 3.093 _cell_length_c 3.093 _cell_volume 29.590 _diffrn_ambient_temperature 1513.15 _exptl_crystal_density_diffrn 6.166 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008592 _amcsd_database_code AMCSD#0010923 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mn 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Cd-Cadmium.cif0000644000175000001440000000423412250371054020575 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008490.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008490 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Cd _chemical_name_mineral Cadmium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.97887 _cell_length_b 2.97887 _cell_length_c 5.61765 _cell_volume 43.171 _exptl_crystal_density_diffrn 8.648 _cod_database_code 9008490 _amcsd_database_code AMCSD#0010820 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cd 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Sr-Strontium.cif0000644000175000001440000000632712250371054021265 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008551.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008551 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 887 K Body centered cubic, bcc, structure, known as the gamma phase ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Sr _chemical_name_mineral Strontium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.85 _cell_length_b 4.85 _cell_length_c 4.85 _cell_volume 114.084 _diffrn_ambient_temperature 887 _exptl_crystal_density_diffrn 2.551 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008551 _amcsd_database_code AMCSD#0010882 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sr 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Cs-Cesium.cif0000644000175000001440000000627312250371054020467 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008533.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008533 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 78 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Cs _chemical_name_mineral Cesium _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.067 _cell_length_b 6.067 _cell_length_c 6.067 _cell_volume 223.317 _diffrn_ambient_temperature 78 _exptl_crystal_density_diffrn 1.977 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008533 _amcsd_database_code AMCSD#0010864 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cs 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ta-Tantalum.cif0000644000175000001440000000621012250371054021015 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008552.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008552 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ta _chemical_name_mineral Tantalum _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.3058 _cell_length_b 3.3058 _cell_length_c 3.3058 _cell_volume 36.127 _exptl_crystal_density_diffrn 16.634 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008552 _amcsd_database_code AMCSD#0010883 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ta 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ca-Calcium-alpha.cif0000644000175000001440000001051512250371054021652 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008464.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008464 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ca _chemical_name_mineral Calcium _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.576 _cell_length_b 5.576 _cell_length_c 5.576 _cell_volume 173.368 _exptl_crystal_density_diffrn 1.535 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008464 _amcsd_database_code AMCSD#0010794 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ca 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Pu-Plutonium-epsilon.cif0000644000175000001440000000631012250371054022714 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008548.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008548 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 773 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Pu _chemical_name_mineral Plutonium-epsilon _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.638 _cell_length_b 3.638 _cell_length_c 3.638 _cell_volume 48.149 _diffrn_ambient_temperature 773 _exptl_crystal_density_diffrn 16.830 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008548 _amcsd_database_code AMCSD#0010879 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pu 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Yb-Ytterbium.cif0000644000175000001440000001052212250371054021223 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008487.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008487 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Yb _chemical_name_mineral Ytterbium _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.4862 _cell_length_b 5.4862 _cell_length_c 5.4862 _cell_volume 165.126 _exptl_crystal_density_diffrn 6.961 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008487 _amcsd_database_code AMCSD#0010817 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Yb 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/B-Boron.cif0000644000175000001440000000475512250371054020140 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008561.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008561 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum B _chemical_name_mineral Boron _space_group_IT_number 166 _symmetry_space_group_name_Hall '-R 3 2"' _symmetry_space_group_name_H-M 'R -3 m :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.908 _cell_length_b 4.908 _cell_length_c 12.567 _cell_volume 262.163 _exptl_crystal_density_diffrn 2.465 _[local]_cod_cif_authors_sg_H-M 'R -3 m' _cod_database_code 9008561 _amcsd_database_code AMCSD#0010892 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z x,x-y,z 2/3+x,1/3+x-y,1/3+z 1/3+x,2/3+x-y,2/3+z y,x,-z 2/3+y,1/3+x,1/3-z 1/3+y,2/3+x,2/3-z -x+y,y,z 2/3-x+y,1/3+y,1/3+z 1/3-x+y,2/3+y,2/3+z -x,-x+y,-z 2/3-x,1/3-x+y,1/3-z 1/3-x,2/3-x+y,2/3-z -y,-x,z 2/3-y,1/3-x,1/3+z 1/3-y,2/3-x,2/3+z x-y,-y,-z 2/3+x-y,1/3-y,1/3-z 1/3+x-y,2/3-y,2/3-z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z B1 0.11770 -0.11770 -0.10730 B2 0.19610 -0.19610 0.02450 avogadro-1.1.1/crystals/elements/Mn-Manganese-gamma.cif0000644000175000001440000001055512250371054022223 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008590.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008590 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 1100 C ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Mn _chemical_name_mineral Manganese-gamma _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.863 _cell_length_b 3.863 _cell_length_c 3.863 _cell_volume 57.647 _diffrn_ambient_temperature 1373.15 _exptl_crystal_density_diffrn 6.330 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008590 _amcsd_database_code AMCSD#0010921 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mn 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/As-Arsenic.cif0000644000175000001440000000377312250371054020626 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008574.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008574 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum As _chemical_name_mineral Arsenic _space_group_IT_number 166 _symmetry_space_group_name_Hall '-P 3* 2' _symmetry_space_group_name_H-M 'R -3 m :R' _cell_angle_alpha 54.167 _cell_angle_beta 54.167 _cell_angle_gamma 54.167 _cell_length_a 4.131 _cell_length_b 4.131 _cell_length_c 4.131 _cell_volume 43.061 _exptl_crystal_density_diffrn 5.778 _[local]_cod_cif_authors_sg_H-M 'R -3 m' _cod_database_code 9008574 _amcsd_database_code AMCSD#0010905 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-z,-y -z,-x,-y y,x,z y,z,x -z,-y,-x -x,-y,-z x,z,y z,x,y -y,-x,-z -y,-z,-x z,y,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z As 0.22600 0.22600 0.22600 avogadro-1.1.1/crystals/elements/Er-Erbium.cif0000644000175000001440000000431512250371054020461 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008497.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008497 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at 293 K Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Er _chemical_name_mineral Erbium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.5588 _cell_length_b 3.5588 _cell_length_c 5.5874 _cell_volume 61.284 _exptl_crystal_density_diffrn 9.064 _cod_database_code 9008497 _amcsd_database_code AMCSD#0010827 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Er 0.33333 0.66667 0.25000 _fract_z Er 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Si-Silicon.cif0000644000175000001440000001161412250371054020643 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008566.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008566 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 1573 K ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Si _chemical_name_mineral Silicon _space_group_IT_number 227 _symmetry_space_group_name_Hall 'F 4d 2 3 -1d' _symmetry_space_group_name_H-M 'F d -3 m :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.43070 _cell_length_b 5.43070 _cell_length_c 5.43070 _cell_volume 160.165 _diffrn_ambient_temperature 1573 _exptl_crystal_density_diffrn 2.329 _[local]_cod_cif_authors_sg_H-M 'F d 3 m' _cod_database_code 9008566 _amcsd_database_code AMCSD#0010897 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+z,3/4-x,1/4+y 3/4+z,1/4-x,3/4+y 1/4+z,3/4-x,3/4+y 1/4+z,1/4-x,1/4+y -y,1/2+z,1/2-x -y,+z,-x 1/2-y,1/2+z,-x 1/2-y,+z,1/2-x 3/4+x,3/4-y,1/4+z 3/4+x,1/4-y,3/4+z 1/4+x,3/4-y,3/4+z 1/4+x,1/4-y,1/4+z -z,1/2+x,1/2-y -z,+x,-y 1/2-z,1/2+x,-y 1/2-z,+x,1/2-y 3/4+y,3/4-z,1/4+x 3/4+y,1/4-z,3/4+x 1/4+y,3/4-z,3/4+x 1/4+y,1/4-z,1/4+x -x,1/2+y,1/2-z -x,+y,-z 1/2-x,1/2+y,-z 1/2-x,+y,1/2-z 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y +x,-z,-y +x,1/2-z,1/2-y 3/4-z,3/4+y,1/4+x 3/4-z,1/4+y,3/4+x 1/4-z,3/4+y,3/4+x 1/4-z,1/4+y,1/4+x 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z +y,-x,-z +y,1/2-x,1/2-z 3/4-x,3/4+z,1/4+y 3/4-x,1/4+z,3/4+y 1/4-x,3/4+z,3/4+y 1/4-x,1/4+z,1/4+y 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x +z,-y,-x +z,1/2-y,1/2-x 3/4-y,3/4+x,1/4+z 3/4-y,1/4+x,3/4+z 1/4-y,3/4+x,3/4+z 1/4-y,1/4+x,1/4+z x,1/2+z,1/2+y x,+z,+y 1/2+x,1/2+z,+y 1/2+x,+z,1/2+y 1/4-z,3/4-y,3/4-x 1/4-z,1/4-y,1/4-x 3/4-z,3/4-y,1/4-x 3/4-z,1/4-y,3/4-x y,1/2+x,1/2+z y,+x,+z 1/2+y,1/2+x,+z 1/2+y,+x,1/2+z 1/4-x,3/4-z,3/4-y 1/4-x,1/4-z,1/4-y 3/4-x,3/4-z,1/4-y 3/4-x,1/4-z,3/4-y z,1/2+y,1/2+x z,+y,+x 1/2+z,1/2+y,+x 1/2+z,+y,1/2+x 1/4-y,3/4-x,3/4-z 1/4-y,1/4-x,1/4-z 3/4-y,3/4-x,1/4-z 3/4-y,1/4-x,3/4-z 3/4+z,1/4+x,3/4-y 3/4+z,3/4+x,1/4-y 1/4+z,1/4+x,1/4-y 1/4+z,3/4+x,3/4-y -y,1/2-z,1/2+x -y,-z,+x 1/2-y,1/2-z,+x 1/2-y,-z,1/2+x 3/4+x,1/4+y,3/4-z 3/4+x,3/4+y,1/4-z 1/4+x,1/4+y,1/4-z 1/4+x,3/4+y,3/4-z -z,1/2-x,1/2+y -z,-x,+y 1/2-z,1/2-x,+y 1/2-z,-x,1/2+y 3/4+y,1/4+z,3/4-x 3/4+y,3/4+z,1/4-x 1/4+y,1/4+z,1/4-x 1/4+y,3/4+z,3/4-x -x,1/2-y,1/2+z -x,-y,+z 1/2-x,1/2-y,+z 1/2-x,-y,1/2+z 1/4-z,3/4+x,3/4+y 1/4-z,1/4+x,1/4+y 3/4-z,3/4+x,1/4+y 3/4-z,1/4+x,3/4+y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x 1/4-x,3/4+y,3/4+z 1/4-x,1/4+y,1/4+z 3/4-x,3/4+y,1/4+z 3/4-x,1/4+y,3/4+z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y 1/4-y,3/4+z,3/4+x 1/4-y,1/4+z,1/4+x 3/4-y,3/4+z,1/4+x 3/4-y,1/4+z,3/4+x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z 1/2-x,1/2+z,-y 1/2-x,+z,1/2-y -x,1/2+z,1/2-y -x,+z,-y 1/4+z,3/4-y,3/4+x 1/4+z,1/4-y,1/4+x 3/4+z,3/4-y,1/4+x 3/4+z,1/4-y,3/4+x 1/2-y,1/2+x,-z 1/2-y,+x,1/2-z -y,1/2+x,1/2-z -y,+x,-z 1/4+x,3/4-z,3/4+y 1/4+x,1/4-z,1/4+y 3/4+x,3/4-z,1/4+y 3/4+x,1/4-z,3/4+y 1/2-z,1/2+y,-x 1/2-z,+y,1/2-x -z,1/2+y,1/2-x -z,+y,-x 1/4+y,3/4-x,3/4+z 1/4+y,1/4-x,1/4+z 3/4+y,3/4-x,1/4+z 3/4+y,1/4-x,3/4+z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y 3/4+z,3/4+y,1/4-x 3/4+z,1/4+y,3/4-x 1/4+z,3/4+y,3/4-x 1/4+z,1/4+y,1/4-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z 3/4+x,3/4+z,1/4-y 3/4+x,1/4+z,3/4-y 1/4+x,3/4+z,3/4-y 1/4+x,1/4+z,1/4-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x 3/4+y,3/4+x,1/4-z 3/4+y,1/4+x,3/4-z 1/4+y,3/4+x,3/4-z 1/4+y,1/4+x,1/4-z 1/4-z,1/4-x,1/4-y 1/4-z,3/4-x,3/4-y 3/4-z,1/4-x,3/4-y 3/4-z,3/4-x,1/4-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x 1/4-x,1/4-y,1/4-z 1/4-x,3/4-y,3/4-z 3/4-x,1/4-y,3/4-z 3/4-x,3/4-y,1/4-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y 1/4-y,1/4-z,1/4-x 1/4-y,3/4-z,3/4-x 3/4-y,1/4-z,3/4-x 3/4-y,3/4-z,1/4-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Sm-Samarium.cif0000644000175000001440000000435612250371054021032 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9010999.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9010999 loop_ _publ_author_name 'Spedding, F. H.' 'Daane, A. H.' 'Herrmann, K. W.' _publ_section_title ; The crystal structures and lattice parameters of high-purity scandium, yttrium and the rare earth metals Locality: synthetic Note: sample 99% pure ; _journal_name_full 'Acta Crystallographica' _journal_page_first 559 _journal_page_last 563 _journal_volume 9 _journal_year 1956 _chemical_formula_sum Sm _chemical_name_mineral Samarium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.621 _cell_length_b 3.621 _cell_length_c 26.25 _cell_volume 298.069 _exptl_crystal_density_diffrn 1.675 _cod_database_code 9010999 _amcsd_database_code AMCSD#0009118 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sm 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Mn-Manganese-alpha.cif0000644000175000001440000000516012250371054022222 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008589.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008589 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample is formed by fusing or distilling electrolytic manganese ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Mn29 _chemical_name_mineral Manganese-alpha _space_group_IT_number 217 _symmetry_space_group_name_Hall 'I -4 2 3' _symmetry_space_group_name_H-M 'I -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.894 _cell_length_b 8.894 _cell_length_c 8.894 _cell_volume 703.544 _exptl_crystal_density_diffrn 7.521 _cod_database_code 9008589 _amcsd_database_code AMCSD#0010920 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y -y,z,-x 1/2-y,1/2+z,1/2-x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y z,-y,-x 1/2+z,1/2-y,1/2-x y,-x,-z 1/2+y,1/2-x,1/2-z x,z,y 1/2+x,1/2+z,1/2+y z,y,x 1/2+z,1/2+y,1/2+x y,x,z 1/2+y,1/2+x,1/2+z -z,-x,y 1/2-z,1/2-x,1/2+y -y,-z,x 1/2-y,1/2-z,1/2+x -x,-y,z 1/2-x,1/2-y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y y,-z,-x 1/2+y,1/2-z,1/2-x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y -z,y,-x 1/2-z,1/2+y,1/2-x -y,x,-z 1/2-y,1/2+x,1/2-z -x,-z,y 1/2-x,1/2-z,1/2+y -z,-y,x 1/2-z,1/2-y,1/2+x -y,-x,z 1/2-y,1/2-x,1/2+z z,x,y 1/2+z,1/2+x,1/2+y y,z,x 1/2+y,1/2+z,1/2+x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mn1 0.00000 0.00000 0.00000 Mn2 0.31700 0.31700 0.31700 Mn3 0.35600 0.35600 0.04200 Mn4 0.08900 0.08900 0.27800 avogadro-1.1.1/crystals/elements/Pr-Praseodymium.cif0000644000175000001440000000430512250371054021726 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008527.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008527 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Double hexagonal closest packed, dhcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Pr _chemical_name_mineral Praseodymium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.6725 _cell_length_b 3.6725 _cell_length_c 11.8354 _cell_volume 138.241 _exptl_crystal_density_diffrn 6.770 _cod_database_code 9008527 _amcsd_database_code AMCSD#0010858 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pr1 0.00000 0.00000 0.00000 Pr2 0.33333 0.66667 0.75000 avogadro-1.1.1/crystals/elements/He-Helium.cif0000644000175000001440000000431012250371054020442 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008500.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008500 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 2 K Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum He _chemical_name_mineral Helium _space_group_IT_number 194 _symmetry_space_group_name_Hall '-P 6c 2c' _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.57 _cell_length_b 3.57 _cell_length_c 5.83 _cell_volume 64.348 _diffrn_ambient_temperature 2 _exptl_crystal_density_diffrn 0.207 _cod_database_code 9008500 _amcsd_database_code AMCSD#0010830 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z He 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/elements/Sb-Antimony.cif0000644000175000001440000000400212250371054021023 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008575.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008575 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Sb _chemical_name_mineral Antimony _space_group_IT_number 166 _symmetry_space_group_name_Hall '-P 3* 2' _symmetry_space_group_name_H-M 'R -3 m :R' _cell_angle_alpha 57.108 _cell_angle_beta 57.108 _cell_angle_gamma 57.108 _cell_length_a 4.50661 _cell_length_b 4.50661 _cell_length_c 4.50661 _cell_volume 60.406 _exptl_crystal_density_diffrn 6.694 _[local]_cod_cif_authors_sg_H-M 'R -3 m' _cod_database_code 9008575 _amcsd_database_code AMCSD#0010906 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-z,-y -z,-x,-y y,x,z y,z,x -z,-y,-x -x,-y,-z x,z,y z,x,y -y,-x,-z -y,-z,-x z,y,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sb 0.23300 0.23300 0.23300 avogadro-1.1.1/crystals/elements/Pt-Platinum.cif0000644000175000001440000001052112250371054021040 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008480.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008480 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Pt _chemical_name_mineral Platinum _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.9231 _cell_length_b 3.9231 _cell_length_c 3.9231 _cell_volume 60.379 _exptl_crystal_density_diffrn 21.460 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008480 _amcsd_database_code AMCSD#0010810 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pt 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/N-Nitrogen.cif0000644000175000001440000000440312250371054020650 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008571.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008571 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 4.2 K ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum N _chemical_name_mineral Nitrogen _space_group_IT_number 205 _symmetry_space_group_name_Hall '-P 2ac 2ab 3' _symmetry_space_group_name_H-M 'P a -3' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.644 _cell_length_b 5.644 _cell_length_c 5.644 _cell_volume 179.788 _diffrn_ambient_temperature 4.2 _exptl_crystal_density_diffrn 1.035 _[local]_cod_cif_authors_sg_H-M 'P a 3' _cod_database_code 9008571 _amcsd_database_code AMCSD#0010902 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+z,x,1/2-y z,1/2-x,1/2+y 1/2-z,1/2+x,y -z,-x,-y 1/2+y,1/2-z,-x 1/2-y,-z,1/2+x -y,1/2+z,1/2-x y,z,x x,1/2-y,1/2+z 1/2-x,1/2+y,z 1/2+x,y,1/2-z -x,-y,-z 1/2-z,-x,1/2+y -z,1/2+x,1/2-y 1/2+z,1/2-x,-y z,x,y 1/2-y,1/2+z,x 1/2+y,z,1/2-x y,1/2-z,1/2+x -y,-z,-x -x,1/2+y,1/2-z 1/2+x,1/2-y,-z 1/2-x,-y,1/2+z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z N2 0.05400 0.05400 0.05400 avogadro-1.1.1/crystals/elements/Pu-Plutonium-alpha.cif0000644000175000001440000000422012250371054022326 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008587.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008587 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample is stable room conditions to 110 C ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Pu _chemical_name_mineral Plutonium-alpha _space_group_IT_number 11 _symmetry_space_group_name_Hall '-P 2yb' _symmetry_space_group_name_H-M 'P 1 21/m 1' _cell_angle_alpha 90 _cell_angle_beta 101.80 _cell_angle_gamma 90 _cell_length_a 6.1835 _cell_length_b 4.8244 _cell_length_c 10.973 _cell_volume 320.425 _exptl_crystal_density_diffrn 20.232 _cod_database_code 9008587 _amcsd_database_code AMCSD#0010918 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,z -x,1/2+y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pu1 0.33200 0.25000 0.15500 Pu2 0.77400 0.25000 0.17500 Pu3 0.14400 0.25000 0.34100 Pu4 0.65800 0.25000 0.45700 Pu5 0.01600 0.25000 0.62100 Pu6 0.46500 0.25000 0.64400 Pu7 0.33700 0.25000 0.92600 Pu8 0.89200 0.25000 0.89700 avogadro-1.1.1/crystals/elements/S6-Sulfur.cif0000644000175000001440000000504112250371054020435 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2011-06-11 06:04:15 +0000 (Sat, 11 Jun 2011) $ #$Revision: 20519 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/9012361.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9012361 loop_ _publ_author_name 'Steidel, J.' 'Pickardt, J.' 'Steudel, R.' _publ_section_title ; Redetermination of the crystal and molecular structure of cyclohexasulfur, S6 Locality: synthetic Sample: at T = 183 K ; _journal_name_full 'Zeitschrift fur Naturforschung B' _journal_page_first 1554 _journal_page_last 1555 _journal_volume 33 _journal_year 1978 _chemical_formula_sum S6 _chemical_name_mineral Sulfur _space_group_IT_number 148 _symmetry_space_group_name_Hall '-R 3' _symmetry_space_group_name_H-M 'R -3 :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 10.766 _cell_length_b 10.766 _cell_length_c 4.225 _cell_volume 424.098 _diffrn_ambient_temperature 183 _exptl_crystal_density_diffrn 2.260 _[local]_cod_cif_authors_sg_H-M 'R -3' _cod_database_code 9012361 _amcsd_database_code AMCSD#0013030 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 S 0.01060 0.01150 0.03130 0.00490 0.00220 0.00200 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z S 0.19050 0.14750 0.39400 avogadro-1.1.1/crystals/elements/Np-Neptunium-gamma.cif0000644000175000001440000000630312250371054022310 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008547.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008547 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample at T = 873 K Body centered cubic, bcc, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Np _chemical_name_mineral Neptunium-gamma _space_group_IT_number 229 _symmetry_space_group_name_Hall '-I 4 2 3' _symmetry_space_group_name_H-M 'I m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.52 _cell_length_b 3.52 _cell_length_c 3.52 _cell_volume 43.614 _diffrn_ambient_temperature 873 _exptl_crystal_density_diffrn 18.047 _[local]_cod_cif_authors_sg_H-M 'I m 3 m' _cod_database_code 9008547 _amcsd_database_code AMCSD#0010878 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z z,-x,y 1/2+z,1/2-x,1/2+y -y,z,-x 1/2-y,1/2+z,1/2-x x,-y,z 1/2+x,1/2-y,1/2+z -z,x,-y 1/2-z,1/2+x,1/2-y y,-z,x 1/2+y,1/2-z,1/2+x -x,y,-z 1/2-x,1/2+y,1/2-z x,-z,-y 1/2+x,1/2-z,1/2-y -z,y,x 1/2-z,1/2+y,1/2+x y,-x,-z 1/2+y,1/2-x,1/2-z -x,z,y 1/2-x,1/2+z,1/2+y z,-y,-x 1/2+z,1/2-y,1/2-x -y,x,z 1/2-y,1/2+x,1/2+z x,z,y 1/2+x,1/2+z,1/2+y -z,-y,-x 1/2-z,1/2-y,1/2-x y,x,z 1/2+y,1/2+x,1/2+z -x,-z,-y 1/2-x,1/2-z,1/2-y z,y,x 1/2+z,1/2+y,1/2+x -y,-x,-z 1/2-y,1/2-x,1/2-z z,x,-y 1/2+z,1/2+x,1/2-y -y,-z,x 1/2-y,1/2-z,1/2+x x,y,-z 1/2+x,1/2+y,1/2-z -z,-x,y 1/2-z,1/2-x,1/2+y y,z,-x 1/2+y,1/2+z,1/2-x -x,-y,z 1/2-x,1/2-y,1/2+z -z,x,y 1/2-z,1/2+x,1/2+y y,-z,-x 1/2+y,1/2-z,1/2-x -x,y,z 1/2-x,1/2+y,1/2+z z,-x,-y 1/2+z,1/2-x,1/2-y -y,z,x 1/2-y,1/2+z,1/2+x x,-y,-z 1/2+x,1/2-y,1/2-z -x,z,-y 1/2-x,1/2+z,1/2-y z,-y,x 1/2+z,1/2-y,1/2+x -y,x,-z 1/2-y,1/2+x,1/2-z x,-z,y 1/2+x,1/2-z,1/2+y -z,y,-x 1/2-z,1/2+y,1/2-x y,-x,z 1/2+y,1/2-x,1/2+z -x,-z,y 1/2-x,1/2-z,1/2+y z,y,-x 1/2+z,1/2+y,1/2-x -y,-x,z 1/2-y,1/2-x,1/2+z x,z,-y 1/2+x,1/2+z,1/2-y -z,-y,x 1/2-z,1/2-y,1/2+x y,x,-z 1/2+y,1/2+x,1/2-z -z,-x,-y 1/2-z,1/2-x,1/2-y y,z,x 1/2+y,1/2+z,1/2+x -x,-y,-z 1/2-x,1/2-y,1/2-z z,x,y 1/2+z,1/2+x,1/2+y -y,-z,-x 1/2-y,1/2-z,1/2-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Np 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/W-Tungsten.cif0000644000175000001440000000512312250371054020703 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008583.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008583 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample is formed when certain tungstates are electrolyzed ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum W _chemical_name_mineral Tungsten _space_group_IT_number 223 _symmetry_space_group_name_Hall '-P 4n 2 3' _symmetry_space_group_name_H-M 'P m -3 n' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.083 _cell_length_b 5.083 _cell_length_c 5.083 _cell_volume 131.329 _exptl_crystal_density_diffrn 18.597 _[local]_cod_cif_authors_sg_H-M 'P m 3 n' _cod_database_code 9008583 _amcsd_database_code AMCSD#0010914 loop_ _symmetry_equiv_pos_as_xyz x,y,z z,-x,y -y,z,-x x,-y,z -z,x,-y y,-z,x -x,y,-z 1/2+x,1/2-z,1/2-y 1/2-z,1/2+y,1/2+x 1/2+y,1/2-x,1/2-z 1/2-x,1/2+z,1/2+y 1/2+z,1/2-y,1/2-x 1/2-y,1/2+x,1/2+z 1/2+x,1/2+z,1/2+y 1/2-z,1/2-y,1/2-x 1/2+y,1/2+x,1/2+z 1/2-x,1/2-z,1/2-y 1/2+z,1/2+y,1/2+x 1/2-y,1/2-x,1/2-z z,x,-y -y,-z,x x,y,-z -z,-x,y y,z,-x -x,-y,z -z,x,y y,-z,-x -x,y,z z,-x,-y -y,z,x x,-y,-z 1/2-x,1/2+z,1/2-y 1/2+z,1/2-y,1/2+x 1/2-y,1/2+x,1/2-z 1/2+x,1/2-z,1/2+y 1/2-z,1/2+y,1/2-x 1/2+y,1/2-x,1/2+z 1/2-x,1/2-z,1/2+y 1/2+z,1/2+y,1/2-x 1/2-y,1/2-x,1/2+z 1/2+x,1/2+z,1/2-y 1/2-z,1/2-y,1/2+x 1/2+y,1/2+x,1/2-z -z,-x,-y y,z,x -x,-y,-z z,x,y -y,-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z W1 0.00000 0.00000 0.00000 W2 0.00000 0.50000 0.25000 avogadro-1.1.1/crystals/elements/Rh-Rhodium.cif0000644000175000001440000001052012250371054020643 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008482.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008482 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Cubic closest packed, ccp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Rh _chemical_name_mineral Rhodium _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.8031 _cell_length_b 3.8031 _cell_length_c 3.8031 _cell_volume 55.006 _exptl_crystal_density_diffrn 12.426 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008482 _amcsd_database_code AMCSD#0010812 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Rh 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/elements/Ni-Nickel.cif0000644000175000001440000000317312250371054020444 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008509.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_9008509 loop_ _publ_author_name 'Wyckoff R W G' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Hexagonal closest packed, hcp, structure ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Ni _chemical_name_mineral Nickel _symmetry_space_group_name_H-M 'P 63/m m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 2.65 _cell_length_b 2.65 _cell_length_c 4.33 _cell_volume 26.334 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x,x-y,1/2-z -x+y,-x,1/2-z x-y,x,1/2+z -y,-x,z y,x,-z y,-x+y,-z -y,x-y,z x-y,-y,1/2+z -x+y,y,1/2-z x,y,1/2-z -x,-y,1/2+z x,x-y,z -x,-x+y,-z x-y,x,-z -x+y,-x,z y,x,1/2+z -y,-x,1/2-z -y,x-y,1/2-z y,-x+y,1/2+z -x+y,y,z x-y,-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ni 0.33333 0.66667 0.25000 _cod_database_code 9008509 avogadro-1.1.1/crystals/elements/Np-Neptunium-alpha.cif0000644000175000001440000000403312250371054022311 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008585.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008585 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample is stable at room conditions ; _journal_name_full 'Crystal Structures' _journal_page_first 7 _journal_page_last 83 _journal_volume 1 _journal_year 1963 _chemical_formula_sum Np _chemical_name_mineral Neptunium-alpha _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2n 2a' _symmetry_space_group_name_H-M 'P m c n' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.723 _cell_length_b 4.887 _cell_length_c 6.663 _cell_volume 153.791 _exptl_crystal_density_diffrn 20.472 _cod_database_code 9008585 _amcsd_database_code AMCSD#0010916 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2-x,y,z 1/2+x,-y,-z 1/2+x,1/2+y,1/2-z 1/2-x,1/2-y,1/2+z x,1/2-y,1/2+z -x,1/2+y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Np1 0.25000 0.20800 0.03600 Np2 0.25000 0.84200 0.31900 avogadro-1.1.1/crystals/zeolites/0000755000175000001440000000000012250371054016226 5ustar marcususersavogadro-1.1.1/crystals/zeolites/FER.cif0000644000175000001440000000355112250371054017331 0ustar marcususersdata_FER #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 19.0180(0) _cell_length_b 14.3030(0) _cell_length_c 7.5410(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m m m' _symmetry_Int_Tables_number 71 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3201 0.0918 0.2501 O2 O 0.3848 0.2493 0.3257 O3 O 0.3429 0.2162 0.0000 O4 O 0.2500 0.2500 0.2500 O5 O 0.1063 0.0918 0.0000 O6 O 0.0000 0.2094 0.0000 O7 O 0.2041 0.0000 0.1743 O8 O 0.2529 0.0000 0.5000 T1 Si 0.3244 0.2018 0.2064 T2 Si 0.0843 0.2004 0.0000 T3 Si 0.2743 0.0000 0.2935 T4 Si 0.1553 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/AFY.cif0000644000175000001440000000305412250371054017332 0ustar marcususersdata_AFY #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.3300(0) _cell_length_b 12.3300(0) _cell_length_c 8.6030(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P -3 1 m' _symmetry_Int_Tables_number 162 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3087 0.7757 0.2491 O2 O 0.3532 0.0000 0.3368 O3 O 0.2000 0.8000 0.5000 O4 O 0.4410 0.8820 0.5000 O5 O 0.6667 0.3333 0.0000 T1 Si 0.3251 0.8641 0.3952 T2 Si 0.6667 0.3333 0.1868 avogadro-1.1.1/crystals/zeolites/SAF.cif0000644000175000001440000000403312250371054017322 0ustar marcususersdata_SAF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.7090(0) _cell_length_b 27.5360(0) _cell_length_c 8.3170(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 2/b 2/a 2/m' _symmetry_Int_Tables_number 72 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '1/2-x,1/2+y,-z' '-x,+y,1/2-z' '1/2+x,1/2-y,-z' '+x,-y,1/2-z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '1/2+x,1/2-y,+z' '+x,-y,1/2+z' '1/2-x,1/2+y,+z' '-x,+y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.7972 0.7500 O2 O 0.8271 0.8167 0.7007 O3 O 0.8787 0.7290 0.7915 O4 O 0.9157 0.7600 0.5000 O5 O 0.8254 0.6415 0.2879 O6 O 0.0000 0.6593 0.2500 O7 O 0.8911 0.6574 0.0000 O8 O 0.6953 0.6553 0.5000 O9 O 0.6746 0.5901 0.7280 O10 O 0.5000 0.5707 0.7500 O11 O 0.3928 0.5582 0.5000 O12 O 0.3795 0.5000 0.7500 T1 Si 0.9048 0.7759 0.6852 T2 Si 0.8994 0.6720 0.1868 T3 Si 0.7169 0.6424 0.6848 T4 Si 0.4000 0.5547 0.6924 avogadro-1.1.1/crystals/zeolites/OBW.cif0000644000175000001440000000427012250371054017343 0ustar marcususersdata_OBW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.9140(0) _cell_length_b 13.9140(0) _cell_length_c 30.8440(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5000 0.0000 0.3530 O2 O 0.1340 0.0000 0.0000 O3 O 0.1615 0.1615 0.0424 O4 O 0.3362 0.0944 0.3482 O5 O 0.4057 0.0000 0.2804 O6 O 0.2249 0.0000 0.4008 O7 O 0.3342 0.2008 0.0740 O8 O 0.1642 0.1642 0.3675 O9 O 0.2754 0.2754 0.0000 T1 Si 0.2563 0.1063 0.3856 T2 Si 0.0000 0.3935 0.3323 T3 Si 0.2430 0.2430 0.0480 T4 Si 0.1137 0.1137 0.0000 T5 Si 0.0000 0.5000 0.2500 avogadro-1.1.1/crystals/zeolites/PUN.cif0000644000175000001440000000350312250371054017354 0ustar marcususersdata_PUN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.6890(0) _cell_length_b 8.6450(0) _cell_length_c 18.9410(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P b c n' _symmetry_Int_Tables_number 60 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,1/2-y,1/2+z' '-x,+y,1/2-z' '1/2+x,1/2-y,-z' '-x,-y,-z' '1/2+x,1/2+y,1/2-z' '+x,-y,1/2+z' '1/2-x,1/2+y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5601 0.7267 0.5917 O2 O 0.4016 0.6069 0.5561 O3 O 0.2869 0.5063 0.4598 O4 O 0.2772 0.3075 0.3545 O5 O 0.5841 0.7787 0.7253 O6 O 0.4694 0.5656 0.6843 O7 O 0.4557 0.5732 0.4250 O8 O 0.6537 0.9730 0.6323 O9 O 0.1582 0.2964 0.4579 T1 Si 0.6312 0.7946 0.6487 T2 Si 0.4929 0.5808 0.6015 T3 Si 0.2192 0.4094 0.4097 T4 Si 0.3711 0.6208 0.4746 T5 Si 0.0000 0.8280 0.2500 avogadro-1.1.1/crystals/zeolites/IWV.cif0000644000175000001440000000502712250371054017362 0ustar marcususersdata_IWV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 27.8260(250) _cell_length_b 26.0810(170) _cell_length_c 13.9440(120) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(700) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F m m m' _symmetry_Int_Tables_number 69 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '-x,+y,+z' '-x,1/2+y,1/2+z' '1/2-x,1/2+y,+z' '1/2-x,+y,1/2+z' '+x,-y,+z' '+x,1/2-y,1/2+z' '1/2+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,-y,+z' '-x,1/2-y,1/2+z' '1/2-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '+x,-y,-z' '+x,1/2-y,1/2-z' '1/2+x,1/2-y,-z' '1/2+x,-y,1/2-z' '-x,+y,-z' '-x,1/2+y,1/2-z' '1/2-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,+y,-z' '+x,1/2+y,1/2-z' '1/2+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0887 0.0920 0.1824 O2 O 0.1699 0.0979 0.0936 O3 O 0.1587 0.1524 0.2479 O4 O 0.1671 0.0506 0.2570 O5 O 0.2500 0.0000 0.2500 O6 O 0.3047 0.0000 0.0946 O7 O 0.0603 0.0000 0.1337 O8 O 0.0708 0.0703 0.0000 O9 O 0.0000 0.0773 0.1239 O10 O 0.3068 0.1910 0.9033 O11 O 0.2345 0.1513 0.0000 O12 O 0.2500 0.2500 0.0000 O13 O 0.2500 0.1795 0.2500 O14 O 0.3170 0.2500 0.2500 O15 O 0.2386 0.0505 0.0000 T1 Si 0.1457 0.0985 0.1983 T2 Si 0.0551 0.0601 0.1095 T3 Si 0.3030 0.1936 0.2120 T4 Si 0.2755 0.1948 0.0000 T5 Si 0.2034 0.0994 0.0000 T6 Si 0.3042 0.0000 0.2101 T7 Si 0.2716 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/MTT.cif0000644000175000001440000000367012250371054017363 0ustar marcususersdata_MTT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 5.2560(0) _cell_length_b 22.0310(0) _cell_length_c 11.3840(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m n' _symmetry_Int_Tables_number 59 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,-y,+z' '1/2-x,1/2+y,-z' '1/2+x,1/2-y,-z' '1/2-x,1/2-y,-z' '1/2+x,1/2+y,-z' '+x,-y,+z' '-x,+y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.1739 0.8651 O2 O 0.7500 0.2500 0.0000 O3 O 0.0000 0.1587 0.0938 O4 O 0.7500 0.1385 0.6775 O5 O 0.0000 0.2418 0.6750 O6 O 0.0000 0.0597 0.2225 O7 O 0.7500 0.1561 0.2938 O8 O 0.5000 0.1751 0.4903 O9 O 0.5000 0.0596 0.5488 O10 O 0.2500 0.0000 0.3856 T1 Si 0.0000 0.2083 0.9899 T2 Si 0.0000 0.1733 0.7237 T3 Si 0.0000 0.1328 0.2259 T4 Si 0.5000 0.1864 0.3506 T5 Si 0.5000 0.1280 0.5984 T6 Si 0.5000 0.0000 0.4671 T7 Si 0.0000 0.0000 0.3041 avogadro-1.1.1/crystals/zeolites/SVR.cif0000644000175000001440000001022112250371054017357 0ustar marcususersdata_SVR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.4080(0) _cell_length_b 13.3040(0) _cell_length_c 20.1660(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 102.3330(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C c' _symmetry_Int_Tables_number 9 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1223 0.3344 0.0735 O2 O 0.1067 0.5296 0.0823 O3 O 0.0082 0.4187 0.0141 O4 O 0.1169 0.4501 0.9665 O5 O 0.2545 0.3316 0.1006 O6 O 0.1863 0.1630 0.0944 O7 O 0.1899 0.2892 0.1960 O8 O 0.3812 0.3652 0.1017 O9 O 0.2869 0.4577 0.0134 O10 O 0.3093 0.5063 0.1431 O11 O 0.4297 0.1807 0.1161 O12 O 0.5065 0.3333 0.1652 O13 O 0.4074 0.2787 0.2218 O14 O 0.3075 0.1091 0.0850 O15 O 0.3988 0.0148 0.1743 O16 O 0.4054 0.0135 0.0454 O17 O 0.2046 0.0457 0.9941 O18 O 0.2249 0.9761 0.1191 O19 O 0.6313 0.3637 0.1540 O20 O 0.6067 0.2910 0.2674 O21 O 0.5853 0.1791 0.1585 O22 O 0.7581 0.3253 0.2031 O23 O 0.7021 0.4858 0.2434 O24 O 0.8308 0.1623 0.2262 O25 O 0.8895 0.3397 0.2323 O26 O 0.8250 0.2869 0.3267 O27 O 0.7078 0.1087 0.1695 O28 O 0.7802 0.9962 0.2642 O29 O 0.6176 0.0009 0.2133 O30 O 0.9226 0.5016 0.3070 O31 O 0.0074 0.4227 0.2394 O32 O 0.8868 0.5524 0.4199 O33 O 0.8816 0.3495 0.4493 O34 O 0.7508 0.3255 0.4159 O35 O 0.8299 0.1679 0.4315 O36 O 0.6268 0.3921 0.3813 O37 O 0.7279 0.5123 0.3761 O38 O 0.5952 0.2005 0.3805 O39 O 0.5049 0.3328 0.3233 O40 O 0.7076 0.0969 0.3974 O41 O 0.5932 0.0146 0.3357 O42 O 0.8099 0.9778 0.3974 O43 O 0.3807 0.3810 0.3239 O44 O 0.4196 0.1922 0.3411 O45 O 0.2561 0.3267 0.3205 O46 O 0.1845 0.1626 0.2945 O47 O 0.1245 0.3399 0.2897 O48 O 0.3067 0.0921 0.3027 T1 Si 0.0883 0.4328 0.0341 T2 Si 0.1883 0.2796 0.1162 T3 Si 0.3079 0.4158 0.0900 T4 Si 0.4311 0.2898 0.1509 T5 Si 0.3857 0.0792 0.1053 T6 Si 0.2306 0.0732 0.0731 T7 Si 0.5823 0.2922 0.1860 T8 Si 0.7042 0.4137 0.1798 T9 Si 0.8262 0.2784 0.2474 T10 Si 0.7824 0.0682 0.2005 T11 Si 0.6295 0.0795 0.1564 T12 Si 0.9296 0.4446 0.2384 T13 Si 0.8218 0.2827 0.4056 T14 Si 0.7028 0.4212 0.4170 T15 Si 0.5833 0.3038 0.3382 T16 Si 0.6283 0.0907 0.3947 T17 Si 0.7835 0.0711 0.4352 T18 Si 0.4282 0.2957 0.3026 T19 Si 0.3067 0.4206 0.3264 T20 Si 0.1885 0.2796 0.2752 T21 Si 0.2304 0.0630 0.3042 T22 Si 0.3839 0.0845 0.3424 T23 Si 0.0857 0.4445 0.2695 avogadro-1.1.1/crystals/zeolites/AFO.cif0000644000175000001440000000362412250371054017323 0ustar marcususersdata_AFO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.7640(0) _cell_length_b 25.6140(0) _cell_length_c 8.3270(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1806 0.3464 0.2500 O2 O 0.3655 0.3588 0.0233 O3 O 0.1347 0.3100 0.9604 O4 O 0.1346 0.4113 0.0113 O5 O 0.5000 0.0000 0.0000 O6 O 0.5000 0.0628 0.2500 O7 O 0.5000 0.2464 0.2500 O8 O 0.5000 0.2736 0.9453 O9 O 0.0000 0.1457 0.2500 T1 Si 0.2040 0.3567 0.0614 T2 Si 0.5000 0.0599 0.0571 T3 Si 0.5000 0.2250 0.0681 T4 Si 0.0000 0.1636 0.0647 avogadro-1.1.1/crystals/zeolites/DFT.cif0000644000175000001440000000274312250371054017334 0ustar marcususersdata_DFT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.0750(0) _cell_length_b 7.0750(0) _cell_length_c 9.0230(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 42/m m c' _symmetry_Int_Tables_number 131 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x,1/2+z' '-x,-y,+z' '+y,-x,1/2+z' '-x,+y,+z' '+y,+x,1/2+z' '+x,-y,+z' '-y,-x,1/2+z' '-x,-y,-z' '+y,-x,1/2-z' '+x,+y,-z' '-y,+x,1/2-z' '+x,-y,-z' '-y,-x,1/2-z' '-x,+y,-z' '+y,+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6857 0.3143 0.2500 O2 O 0.7258 0.5000 0.0000 O3 O 0.0000 0.5000 0.1976 T1 Si 0.7749 0.5000 0.1740 avogadro-1.1.1/crystals/zeolites/SSY.cif0000644000175000001440000000407212250371054017372 0ustar marcususersdata_SSY #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 5.2580(0) _cell_length_b 22.5790(0) _cell_length_c 13.9770(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m n' _symmetry_Int_Tables_number 59 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,+z' '+x,1/2-y,+z' '1/2-x,1/2-y,+z' '-x,-y,-z' '1/2+x,-y,-z' '-x,1/2+y,-z' '1/2+x,1/2+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.7500 0.8081 0.2104 O2 O 0.0000 0.7500 0.0774 O3 O 0.2500 0.6917 0.9448 O4 O 0.7500 0.6085 0.3407 O5 O 0.0000 0.5925 0.1803 O6 O 0.7500 0.5664 0.5176 O7 O 0.9999 0.5117 0.3801 O8 O 0.7500 0.4161 0.9815 O9 O 0.5000 0.3938 0.1401 O10 O 0.2500 0.4270 0.2930 O11 O 0.2500 0.4948 0.1393 T1 Si 0.7500 0.7500 0.1437 T2 Si 0.2500 0.7500 0.0111 T3 Si 0.7500 0.6214 0.2273 T4 Si 0.7500 0.5496 0.4057 T5 Si 0.7500 0.3780 0.0787 T6 Si 0.2500 0.4707 0.3840 T7 Si 0.2500 0.4276 0.1778 T8 Si 0.2500 0.5658 0.1299 avogadro-1.1.1/crystals/zeolites/SZR.cif0000644000175000001440000000353112250371054017371 0ustar marcususersdata_SZR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.8700(250) _cell_length_b 14.4010(170) _cell_length_c 7.5140(120) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(700) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m m m' _symmetry_Int_Tables_number 65 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,+z' '1/2+x,1/2-y,+z' '-x,-y,+z' '1/2-x,1/2-y,+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,-z' '1/2-x,1/2+y,-z' '+x,+y,-z' '1/2+x,1/2+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.2145 0.2464 O2 O 0.1029 0.0912 0.2474 O3 O 0.2201 0.0000 0.1751 O4 O 0.2500 0.2500 0.0000 O5 O 0.3186 0.0911 0.0000 O6 O 0.1302 0.2663 0.1751 O7 O 0.1699 0.0000 0.5000 O8 O 0.0962 0.2176 0.5000 T1 Si 0.0822 0.1971 0.2925 T2 Si 0.1730 0.2977 0.0000 T3 Si 0.1488 0.0000 0.2925 T4 Si 0.2692 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/MVY.cif0000644000175000001440000000302612250371054017365 0ustar marcususersdata_MVY #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 5.0210(0) _cell_length_b 8.1510(0) _cell_length_c 13.9770(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P n n m' _symmetry_Int_Tables_number 58 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,-y,+z' '1/2-x,1/2+y,1/2-z' '1/2+x,1/2-y,1/2-z' '-x,-y,-z' '+x,+y,-z' '1/2+x,1/2-y,1/2+z' '1/2-x,1/2+y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1370 0.2998 0.2713 O2 O 0.2777 0.2676 0.0952 O3 O 0.5000 0.5000 0.1981 O4 O 0.0000 0.0000 0.5000 O5 O 0.5000 0.0000 0.5000 T1 Si 0.3882 0.3151 0.2000 T3 Si 0.2501 0.8772 0.5000 avogadro-1.1.1/crystals/zeolites/MTW.cif0000644000175000001440000000373712250371054017372 0ustar marcususersdata_MTW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 25.5520(0) _cell_length_b 5.2560(0) _cell_length_c 12.1170(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 109.3120(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0045 0.0000 0.1313 O2 O 0.0958 0.7501 0.2421 O3 O 0.0876 0.0000 0.0490 O4 O 0.0826 0.2500 0.8576 O5 O 0.3440 0.0000 0.5710 O6 O 0.3153 0.0000 0.7595 O7 O 0.3434 0.0000 0.2079 O8 O 0.3374 0.0000 0.9870 O9 O 0.2508 0.7499 0.8515 O10 O 0.2838 0.0000 0.3478 O11 O 0.2500 0.7500 0.5000 T1 Si 0.0710 0.0000 0.1660 T2 Si 0.0621 0.0000 0.9083 T3 Si 0.3671 0.0000 0.7119 T4 Si 0.3789 0.0000 0.1199 T5 Si 0.2885 0.0000 0.8625 T6 Si 0.2813 0.0000 0.2134 T7 Si 0.2818 0.0000 0.4791 avogadro-1.1.1/crystals/zeolites/NES.cif0000644000175000001440000000474412250371054017347 0ustar marcususersdata_NES #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 26.0600(0) _cell_length_b 13.8840(0) _cell_length_c 22.8600(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F m m m' _symmetry_Int_Tables_number 69 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '-x,+y,+z' '-x,1/2+y,1/2+z' '1/2-x,1/2+y,+z' '1/2-x,+y,1/2+z' '+x,-y,+z' '+x,1/2-y,1/2+z' '1/2+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,-y,+z' '-x,1/2-y,1/2+z' '1/2-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '+x,-y,-z' '+x,1/2-y,1/2-z' '1/2+x,1/2-y,-z' '1/2+x,-y,1/2-z' '-x,+y,-z' '-x,1/2+y,1/2-z' '1/2-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,+y,-z' '+x,1/2+y,1/2-z' '1/2+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3479 0.2541 0.8627 O2 O 0.3201 0.2500 0.7500 O3 O 0.2500 0.2500 0.8320 O4 O 0.3081 0.0975 0.8218 O5 O 0.5988 0.4058 0.8420 O6 O 0.5869 0.3342 0.9437 O7 O 0.5506 0.2450 0.8510 O8 O 0.3489 0.5000 0.7633 O9 O 0.2500 0.5000 0.7500 O10 O 0.5504 0.5000 0.7598 O11 O 0.5000 0.6317 0.0000 O12 O 0.5725 0.5000 0.0000 O13 O 0.5000 0.4045 0.6800 O14 O 0.5000 0.2500 0.7500 T1 Si 0.3070 0.2135 0.8155 T2 Si 0.5982 0.3053 0.8768 T3 Si 0.3037 0.5000 0.7156 T4 Si 0.5997 0.5000 0.8018 T5 Si 0.5612 0.6142 0.0000 T6 Si 0.5000 0.2887 0.6837 T7 Si 0.5000 0.5000 0.7196 avogadro-1.1.1/crystals/zeolites/GIS.cif0000644000175000001440000000352412250371054017337 0ustar marcususersdata_GIS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.8010(0) _cell_length_b 9.8010(0) _cell_length_c 10.1580(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 41/a m d' _symmetry_Int_Tables_number 141 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '3/4-y,1/4+x,3/4+z' '1/4-y,3/4+x,1/4+z' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '3/4+y,3/4-x,1/4+z' '1/4+y,1/4-x,3/4+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '1/4+y,1/4+x,3/4+z' '3/4+y,3/4+x,1/4+z' '1/2+x,-y,1/2+z' '+x,1/2-y,+z' '1/4-y,3/4-x,1/4+z' '3/4-y,1/4-x,3/4+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '1/4+y,3/4-x,1/4-z' '3/4+y,1/4-x,3/4-z' '1/2+x,+y,1/2-z' '+x,1/2+y,-z' '1/4-y,1/4+x,3/4-z' '3/4-y,3/4+x,1/4-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '3/4-y,3/4-x,1/4-z' '1/4-y,1/4-x,3/4-z' '1/2-x,+y,1/2-z' '-x,1/2+y,-z' '3/4+y,1/4+x,3/4-z' '1/4+y,3/4+x,1/4-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.5667 0.1585 O2 O 0.2500 0.5486 0.2500 T1 Si 0.1586 0.5914 0.1250 avogadro-1.1.1/crystals/zeolites/SIV.cif0000644000175000001440000000376212250371054017362 0ustar marcususersdata_SIV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.8770(250) _cell_length_b 14.0750(170) _cell_length_c 28.1310(120) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(700) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1780 0.0726 0.4144 O2 O 0.1982 0.2414 0.3752 O3 O 0.0000 0.1271 0.3503 O4 O 0.2492 0.0887 0.3246 O5 O 0.6798 0.9098 0.3356 O6 O 0.6937 0.9837 0.2500 O7 O 0.5000 0.0365 0.3084 O8 O 0.0000 0.9466 0.4441 O9 O 0.7502 0.8941 0.4254 O10 O 0.8003 0.0000 0.5000 O11 O 0.5000 0.8567 0.3994 T1 Si 0.1564 0.1323 0.3662 T2 Si 0.6561 0.0046 0.3047 T3 Si 0.8435 0.9784 0.4459 T4 Si 0.3434 0.8506 0.3839 avogadro-1.1.1/crystals/zeolites/CGF.cif0000644000175000001440000000353612250371054017317 0ustar marcususersdata_CGF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 15.5010(0) _cell_length_b 16.9020(0) _cell_length_c 7.2730(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 96.0700(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0449 0.7411 0.3570 O2 O 0.5727 0.3515 0.6110 O3 O 0.2817 0.6051 0.1917 O4 O 0.2838 0.6326 0.5481 O5 O 0.3013 0.7503 0.3179 O6 O 0.6545 0.2989 0.1408 O7 O 0.1176 0.6472 0.1286 O8 O 0.0000 0.7516 0.0000 O9 O 0.2064 0.6118 0.8508 O10 O 0.1634 0.5000 0.0753 T1 Si 0.8077 0.4089 0.9383 T2 Si 0.0791 0.7344 0.1561 T3 Si 0.3233 0.6587 0.3612 T4 Si 0.2585 0.6735 0.7351 T5 Si 0.0000 0.7964 0.5000 avogadro-1.1.1/crystals/zeolites/IRR.cif0000644000175000001440000000372212250371054017351 0ustar marcususersdata_IRR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 19.0310(0) _cell_length_b 19.0310(0) _cell_length_c 14.1010(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 6/m m m' _symmetry_Int_Tables_number 191 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,+z' '+y,-x+y,+z' '+x-y,+x,+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4403 0.1502 0.3336 O2 O 0.5600 0.1200 0.3695 O3 O 0.4101 0.0000 0.3530 O4 O 0.4517 0.0969 0.5000 O5 O 0.4940 0.2470 0.1850 O6 O 0.5751 0.2875 0.3468 O7 O 0.5267 0.2634 0.0000 O8 O 0.6210 0.2421 0.1176 O9 O 0.6667 0.3333 0.5000 T1 Si 0.4662 0.0922 0.3883 T2 Si 0.4865 0.2433 0.2989 T3 Si 0.5641 0.2820 0.1056 T4 Si 0.6667 0.3333 0.3861 avogadro-1.1.1/crystals/zeolites/CHI.cif0000644000175000001440000000343012250371054017314 0ustar marcususersdata_CHI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 5.0100(0) _cell_length_b 31.2340(0) _cell_length_c 9.0120(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P b c n' _symmetry_Int_Tables_number 60 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2112 0.7623 0.0158 O2 O 0.8450 0.8176 0.9326 O3 O 0.0000 0.7567 0.7500 O4 O 0.3078 0.1029 0.0243 O5 O 0.5000 0.1471 0.2500 O6 O 0.0000 0.1218 0.2500 O7 O 0.3198 0.0336 0.8560 O8 O 0.3144 0.0262 0.1472 O9 O 0.7401 0.0556 0.0119 T1 Si 0.9420 0.7686 0.9207 T2 Si 0.2423 0.1386 0.1479 T3 Si 0.4185 0.0547 0.0098 T4 Si 0.5000 0.9962 0.2500 avogadro-1.1.1/crystals/zeolites/EUO.cif0000644000175000001440000000520212250371054017340 0ustar marcususersdata_EUO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.9010(0) _cell_length_b 22.8610(0) _cell_length_c 20.5820(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m m a' _symmetry_Int_Tables_number 67 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,1/2-y,+z' '1/2+x,-y,+z' '-x,1/2-y,+z' '1/2-x,-y,+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,1/2+y,-z' '1/2-x,+y,-z' '+x,1/2+y,-z' '1/2+x,+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2500 0.4149 0.5000 O2 O 0.2431 0.3917 0.3742 O3 O 0.4032 0.4303 0.4248 O4 O 0.2500 0.5000 0.4153 O5 O 0.2500 0.3624 0.0000 O6 O 0.1612 0.3078 0.0938 O7 O 0.0932 0.4076 0.0443 O8 O 0.2433 0.4081 0.1193 O9 O 0.4044 0.4336 0.1730 O10 O 0.2500 0.5000 0.1959 O11 O 0.2636 0.3937 0.2459 O12 O 0.1675 0.3070 0.3031 O13 O 0.0949 0.4107 0.2980 O14 O 0.0000 0.4996 0.2507 O15 O 0.0000 0.4808 0.3760 O16 O 0.0000 0.5000 0.5000 O17 O 0.0000 0.4760 0.1252 O18 O 0.0000 0.5000 0.0000 O19 O 0.1126 0.2500 0.1996 O20 O 0.0000 0.2500 0.0969 O21 O 0.0000 0.2500 0.3018 T1 Si 0.2874 0.4344 0.4290 T2 Si 0.1872 0.3711 0.0648 T3 Si 0.2898 0.4346 0.1847 T4 Si 0.1946 0.3755 0.3054 T5 Si 0.0000 0.4499 0.3059 T6 Si 0.0000 0.5314 0.4302 T7 Si 0.0000 0.4486 0.0532 T8 Si 0.0000 0.5272 0.1788 T9 Si 0.1098 0.2500 0.1216 T10 Si 0.1104 0.2500 0.2778 avogadro-1.1.1/crystals/zeolites/GIU.cif0000644000175000001440000000430012250371054017332 0ustar marcususersdata_GIU #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.5590(0) _cell_length_b 12.5590(0) _cell_length_c 41.0260(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.7011 0.0410 0.9700 O2 O 0.7720 0.8860 0.9893 O3 O 0.4304 0.8607 0.7500 O4 O 0.6358 0.9958 0.7821 O5 O 0.6061 0.8031 0.7500 O6 O 0.6447 0.6280 0.0904 O7 O 0.5746 0.7873 0.0750 O8 O 0.4430 0.5570 0.0561 O9 O 0.4344 0.8688 0.8716 O10 O 0.6529 0.0112 0.8461 O11 O 0.6023 0.8012 0.8725 O12 O 0.4335 0.5665 0.1861 O13 O 0.6020 0.8010 0.1903 T1 Si 0.5802 0.6681 0.0630 T2 Si 0.5790 0.9156 0.8750 T3 Si 0.5788 0.6635 0.1870 T4 Si 0.5766 0.9137 0.7500 T5 Si 0.7550 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/MER.cif0000644000175000001440000000346512250371054017344 0ustar marcususersdata_MER #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.0120(0) _cell_length_b 14.0120(0) _cell_length_c 9.9540(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1726 0.1726 0.1840 O2 O 0.1223 0.2976 0.0000 O3 O 0.0000 0.2457 0.1866 O4 O 0.1475 0.3525 0.2500 T1 Si 0.1106 0.2671 0.1550 avogadro-1.1.1/crystals/zeolites/SGT.cif0000644000175000001440000000425412250371054017353 0ustar marcususersdata_SGT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 10.3290(0) _cell_length_b 10.3290(0) _cell_length_c 34.3640(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 41/a m d' _symmetry_Int_Tables_number 141 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '3/4-y,1/4+x,3/4+z' '1/4-y,3/4+x,1/4+z' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '3/4+y,3/4-x,1/4+z' '1/4+y,1/4-x,3/4+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '1/4+y,1/4+x,3/4+z' '3/4+y,3/4+x,1/4+z' '1/2+x,-y,1/2+z' '+x,1/2-y,+z' '1/4-y,3/4-x,1/4+z' '3/4-y,1/4-x,3/4+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '1/4+y,3/4-x,1/4-z' '3/4+y,1/4-x,3/4-z' '1/2+x,+y,1/2-z' '+x,1/2+y,-z' '1/4-y,1/4+x,3/4-z' '3/4-y,3/4+x,1/4-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '3/4-y,3/4-x,1/4-z' '1/4-y,1/4-x,3/4-z' '1/2-x,+y,1/2-z' '-x,1/2+y,-z' '3/4+y,1/4+x,3/4-z' '1/4+y,3/4+x,1/4-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1673 0.2500 0.1486 O2 O 0.3726 0.1226 0.1250 O3 O 0.2308 0.2500 0.0744 O4 O 0.0000 0.2500 0.2065 O5 O 0.2192 0.1226 0.2129 O6 O 0.1919 0.8770 0.9907 O7 O 0.0000 0.2500 0.0424 T1 Si 0.2860 0.2500 0.1182 T2 Si 0.1512 0.2500 0.1953 T3 Si 0.2824 0.0000 0.0000 T4 Si 0.1531 0.2500 0.0338 avogadro-1.1.1/crystals/zeolites/IHW.cif0000644000175000001440000000475612250371054017354 0ustar marcususersdata_IHW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.7470(0) _cell_length_b 24.0690(0) _cell_length_c 18.3290(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c a' _symmetry_Int_Tables_number 64 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,1/2-y,1/2+z' '1/2+x,-y,1/2+z' '-x,1/2-y,1/2+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,+y,1/2-z' '+x,1/2+y,1/2-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6473 0.5000 0.5000 O2 O 0.5000 0.4547 0.4308 O3 O 0.6320 0.5099 0.3563 O4 O 0.6751 0.4139 0.4133 O5 O 0.7500 0.5425 0.2500 O6 O 0.7415 0.5975 0.3749 O7 O 0.5958 0.6011 0.2831 O8 O 0.7738 0.6504 0.4989 O9 O 0.7427 0.7074 0.3786 O10 O 0.9046 0.6503 0.3970 O11 O 0.7356 0.6845 0.6320 O12 O 0.5955 0.6767 0.5334 O13 O 0.7500 0.7545 0.2500 O14 O 0.5962 0.7685 0.3366 O15 O 0.5000 0.7535 0.4602 O16 O 0.5000 0.7543 0.6037 O17 O 0.5000 0.6763 0.3607 O18 O 0.5000 0.6816 0.2194 T1 Si 0.6137 0.4701 0.4256 T2 Si 0.6807 0.5624 0.3158 T3 Si 0.7893 0.6516 0.4119 T4 Si 0.6947 0.6497 0.5636 T5 Si 0.7128 0.7618 0.3326 T6 Si 0.5000 0.7153 0.5324 T7 Si 0.5000 0.7426 0.3735 T8 Si 0.5000 0.6393 0.2874 T9 Si 0.0000 0.6823 0.3684 avogadro-1.1.1/crystals/zeolites/RRO.cif0000644000175000001440000000344012250371054017354 0ustar marcususersdata_RRO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.4120(0) _cell_length_b 8.6410(0) _cell_length_c 17.1800(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 113.6780(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 2/c' _symmetry_Int_Tables_number 13 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,+y,1/2-z' '-x,-y,-z' '+x,-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1272 0.7139 0.0198 O2 O 0.0000 0.0000 0.0000 O3 O 0.8328 0.7927 0.0598 O4 O 0.7814 0.7790 0.8992 O5 O 0.6829 0.5180 0.0122 O6 O 0.4834 0.2945 0.9157 O7 O 0.6796 0.4881 0.8598 O8 O 0.1313 0.6380 0.7167 O9 O 0.5000 0.7077 0.7500 O10 O 0.1412 0.4209 0.8258 T1 Si 0.9348 0.8216 0.9940 T2 Si 0.6819 0.3955 0.9415 T3 Si 0.2934 0.6540 0.6768 T4 Si 0.2769 0.3495 0.9171 T5 Si 0.0000 0.4698 0.2500 avogadro-1.1.1/crystals/zeolites/MTF.cif0000644000175000001440000000401212250371054017334 0ustar marcususersdata_MTF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.6290(0) _cell_length_b 30.3940(0) _cell_length_c 7.2490(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.4500(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2723 0.1441 0.1397 O2 O 0.0472 0.1861 0.2399 O3 O 0.2673 0.1856 0.4571 O4 O 0.1190 0.1135 0.4109 O5 O 0.0000 0.3890 0.0000 O6 O 0.1649 0.3405 0.2077 O7 O 0.2420 0.4196 0.1056 O8 O 0.1585 0.0000 0.9193 O9 O 0.0000 0.0676 0.0000 O10 O 0.0692 0.0526 0.6568 O11 O 0.0529 0.2690 0.3450 O12 O 0.3153 0.2689 0.2551 O13 O 0.0000 0.2492 0.0000 T1 Si 0.1220 0.0503 0.8678 T2 Si 0.1767 0.1572 0.3123 T3 Si 0.1590 0.3760 0.0433 T4 Si 0.1918 0.2985 0.3379 T5 Si 0.9785 0.2339 0.2104 T6 Si 0.0000 0.0833 0.5000 avogadro-1.1.1/crystals/zeolites/SAV.cif0000644000175000001440000000357612250371054017355 0ustar marcususersdata_SAV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.6530(0) _cell_length_b 18.6530(0) _cell_length_c 9.4410(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 4/n m m' _symmetry_Int_Tables_number 129 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-y,+x,+z' '1/2-x,1/2-y,+z' '+y,1/2-x,+z' '1/2-x,+y,+z' '+y,+x,+z' '+x,1/2-y,+z' '1/2-y,1/2-x,+z' '-x,-y,-z' '1/2+y,-x,-z' '1/2+x,1/2+y,-z' '-y,1/2+x,-z' '1/2+x,-y,-z' '-y,-x,-z' '-x,1/2+y,-z' '1/2+y,1/2+x,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O4 O 0.1314 0.6314 0.0000 O5 O 0.0803 0.7500 0.1158 O6 O 0.8778 0.8778 0.8376 O7 O 0.9909 0.8428 0.9943 O8 O 0.9386 0.7500 0.8070 O9 O 0.9204 0.4204 0.5000 O10 O 0.9934 0.3670 0.2812 O11 O 0.8751 0.4440 0.2378 O12 O 0.9924 0.5076 0.3300 T1 Si 0.0658 0.5544 0.3372 T2 Si 0.9535 0.6656 0.8395 T3 Si 0.0642 0.8344 0.0863 avogadro-1.1.1/crystals/zeolites/PHI.cif0000644000175000001440000000327512250371054017340 0ustar marcususersdata_PHI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.8900(0) _cell_length_b 14.0640(0) _cell_length_c 14.0460(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.1115 0.9516 O2 O 0.1793 0.1694 0.0773 O3 O 0.2021 0.0000 0.0000 O4 O 0.2473 0.1527 0.8971 O5 O 0.1891 0.2408 0.2500 O6 O 0.0000 0.2966 0.1309 T1 Si 0.1570 0.1084 0.9816 T2 Si 0.1553 0.2635 0.1402 avogadro-1.1.1/crystals/zeolites/FAR.cif0000644000175000001440000000416212250371054017324 0ustar marcususersdata_FAR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.6010(250) _cell_length_b 12.6010(170) _cell_length_c 35.7430(120) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(700) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5441 0.0883 0.4542 O2 O 0.7103 0.0377 0.4297 O3 O 0.7747 0.2253 0.4744 O4 O 0.6450 0.0000 0.5000 O5 O 0.2358 0.1179 0.3783 O6 O 0.1111 0.8889 0.4008 O7 O 0.3110 0.9640 0.3602 O8 O 0.5296 0.7648 0.3198 O9 O 0.6710 0.9760 0.2868 O10 O 0.4685 0.9369 0.3192 O11 O 0.0988 0.9012 0.2500 O12 O 0.2701 0.1350 0.2500 T1 Si 0.6681 0.0880 0.4647 T2 Si 0.2460 0.0017 0.3922 T3 Si 0.5803 0.9101 0.3216 T4 Si 0.2440 0.9965 0.2500 avogadro-1.1.1/crystals/zeolites/SFS.cif0000644000175000001440000000605312250371054017350 0ustar marcususersdata_SFS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.0130(0) _cell_length_b 20.0270(0) _cell_length_c 12.4880(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 106.0800(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 21/m' _symmetry_Int_Tables_number 11 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,1/2+y,-z' '-x,-y,-z' '+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4759 0.6411 0.6868 O2 O 0.3565 0.1679 0.5031 O3 O 0.4477 0.2500 0.6613 O4 O 0.3234 0.1614 0.6993 O5 O 0.1778 0.1440 0.3690 O6 O 0.3029 0.0453 0.4410 O7 O 0.3342 0.1316 0.2952 O8 O 0.1566 0.1426 0.7520 O9 O 0.3264 0.1461 0.9092 O10 O 0.2856 0.0442 0.7732 O11 O 0.4956 0.1217 0.6751 O12 O 0.3236 0.5755 0.7134 O13 O 0.4801 0.5090 0.6934 O14 O 0.3650 0.5727 0.5205 O15 O 0.4153 0.2500 0.2934 O16 O 0.3943 0.1689 0.1225 O17 O 0.3498 0.5448 0.3109 O18 O 0.4161 0.5618 0.1362 O19 O 0.4407 0.2500 0.9790 O20 O 0.5179 0.1301 0.0090 O21 O 0.1096 0.1715 0.5396 O22 O 0.9714 0.1301 0.6292 O23 O 0.0503 0.2500 0.6768 O24 O 0.0663 0.2500 0.3641 O25 O 0.9875 0.1302 0.3506 O26 O 0.1560 0.5521 0.7613 O27 O 0.3243 0.5535 0.9215 O28 O 0.1882 0.5593 0.3787 O29 O 0.5000 0.5000 0.0000 O30 O 0.9846 0.5004 0.6527 O31 O 0.1038 0.5510 0.5423 T1 Si 0.0841 0.5602 0.4099 T2 Si 0.2929 0.1223 0.4024 T3 Si 0.2727 0.1236 0.7832 T4 Si 0.4117 0.5738 0.6536 T5 Si 0.4169 0.1732 0.2558 T6 Si 0.4482 0.5547 0.2699 T7 Si 0.4203 0.1734 0.0050 T8 Si 0.0714 0.1736 0.6499 T9 Si 0.0852 0.1738 0.4059 T10 Si 0.2726 0.5342 0.7935 T11 Si 0.3012 0.5330 0.4120 T12 Si 0.4304 0.5615 0.0127 T13 Si 0.0639 0.5582 0.6509 T14 Si 0.4067 0.1748 0.6353 avogadro-1.1.1/crystals/zeolites/STF.cif0000644000175000001440000000353612250371054017354 0ustar marcususersdata_STF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.1040(0) _cell_length_b 18.2050(0) _cell_length_c 7.4770(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 98.9890(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6460 0.0000 0.6122 O2 O 0.6923 0.9279 0.3329 O3 O 0.5289 0.0000 0.3038 O4 O 0.6090 0.0722 0.8976 O5 O 0.3255 0.6748 0.3772 O6 O 0.3892 0.7950 0.2424 O7 O 0.3509 0.7945 0.5749 O8 O 0.5000 0.7218 0.5000 O9 O 0.3132 0.8194 0.9019 O10 O 0.5000 0.8234 0.0000 T1 Si 0.3984 0.8413 0.0627 T2 Si 0.3918 0.7466 0.4229 T3 Si 0.2864 0.8420 0.6917 T4 Si 0.6400 0.0000 0.3954 T5 Si 0.5838 0.0000 0.7754 avogadro-1.1.1/crystals/zeolites/STW.cif0000644000175000001440000000377112250371054017376 0ustar marcususersdata_STW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 11.8870(0) _cell_length_b 11.8870(0) _cell_length_c 29.9150(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 61 2 2' _symmetry_Int_Tables_number 178 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,1/3+z' '-x+y,-x,2/3+z' '-x,-y,1/2+z' '+y,-x+y,5/6+z' '+x-y,+x,1/6+z' '+y,+x,1/3-z' '+x-y,-y,-z' '-x,-x+y,2/3-z' '-y,-x,5/6-z' '-x+y,+y,1/2-z' '+x,+x-y,1/6-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.9128 0.0000 0.0000 O2 O 0.3328 0.5726 0.3337 O3 O 0.1216 0.2129 0.9728 O4 O 0.9344 0.0656 0.9167 O5 O 0.8998 0.2081 0.9768 O6 O 0.6402 0.3201 0.0833 O7 O 0.3758 0.3446 0.9664 O8 O 0.7797 0.3169 0.0154 O9 O 0.7752 0.5310 0.0348 O10 O 0.2311 0.3246 0.8971 O11 O 0.5937 0.5594 0.9858 O12 O 0.5837 0.4163 0.9167 T1 Si 0.6917 0.3748 0.0338 T2 Si 0.5318 0.4138 0.9667 T3 Si 0.2997 0.3942 0.8508 T4 Si 0.2432 0.3380 0.9506 T5 Si 0.9670 0.1221 0.9666 avogadro-1.1.1/crystals/zeolites/TON.cif0000644000175000001440000000342312250371054017353 0ustar marcususersdata_TON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.1050(0) _cell_length_b 17.8420(0) _cell_length_c 5.2560(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2724 0.0000 0.0000 O2 O 0.4069 0.0707 0.2500 O3 O 0.2325 0.1233 0.2500 O4 O 0.0931 0.2209 0.2500 O5 O 0.2500 0.2500 0.0000 O6 O 0.0000 0.3251 0.5000 T1 Si 0.2963 0.0485 0.2500 T2 Si 0.2066 0.2111 0.2500 T3 Si 0.0000 0.2731 0.2500 T4 Si 0.5000 0.1229 0.2500 avogadro-1.1.1/crystals/zeolites/MSO.cif0000644000175000001440000000425312250371054017353 0ustar marcususersdata_MSO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 17.1650(0) _cell_length_b 17.1650(0) _cell_length_c 19.7850(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'R -3 m' _symmetry_Int_Tables_number 166 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '2/3+x,1/3+y,1/3+z' '1/3+x,2/3+y,2/3+z' '-y,+x-y,+z' '2/3-y,1/3+x-y,1/3+z' '1/3-y,2/3+x-y,2/3+z' '-x+y,-x,+z' '2/3-x+y,1/3-x,1/3+z' '1/3-x+y,2/3-x,2/3+z' '-y,-x,+z' '2/3-y,1/3-x,1/3+z' '1/3-y,2/3-x,2/3+z' '-x+y,+y,+z' '2/3-x+y,1/3+y,1/3+z' '1/3-x+y,2/3+y,2/3+z' '+x,+x-y,+z' '2/3+x,1/3+x-y,1/3+z' '1/3+x,2/3+x-y,2/3+z' '-x,-y,-z' '2/3-x,1/3-y,1/3-z' '1/3-x,2/3-y,2/3-z' '+y,-x+y,-z' '2/3+y,1/3-x+y,1/3-z' '1/3+y,2/3-x+y,2/3-z' '+x-y,+x,-z' '2/3+x-y,1/3+x,1/3-z' '1/3+x-y,2/3+x,2/3-z' '+y,+x,-z' '2/3+y,1/3+x,1/3-z' '1/3+y,2/3+x,2/3-z' '+x-y,-y,-z' '2/3+x-y,1/3-y,1/3-z' '1/3+x-y,2/3-y,2/3-z' '-x,-x+y,-z' '2/3-x,1/3-x+y,1/3-z' '1/3-x,2/3-x+y,2/3-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O4 O 0.0953 0.1905 0.2854 O5 O 0.9208 0.0792 0.2808 O6 O 0.9839 0.2484 0.3146 O7 O 0.9982 0.2064 0.1892 O8 O 0.0743 0.1486 0.1028 O9 O 0.0254 0.2642 0.0637 O10 O 0.9027 0.0973 0.0909 T1 Si 0.9995 0.1811 0.2674 T2 Si 0.0002 0.1791 0.1117 T3 Si 0.0000 0.3056 0.0000 avogadro-1.1.1/crystals/zeolites/ITW.cif0000644000175000001440000000326212250371054017357 0ustar marcususersdata_ITW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 10.4500(0) _cell_length_b 15.0280(0) _cell_length_c 8.9540(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 105.6400(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5000 0.2266 0.0000 O2 O 0.3094 0.1641 0.7715 O3 O 0.3467 0.3367 0.8011 O4 O 0.2500 0.2500 0.0000 O5 O 0.4367 0.3895 0.2686 O6 O 0.3423 0.3661 0.5098 O7 O 0.2581 0.5000 0.3196 O8 O 0.3632 0.5000 0.7035 T1 Si 0.3516 0.2445 0.8939 T2 Si 0.3067 0.3979 0.3317 T3 Si 0.4039 0.3979 0.6863 avogadro-1.1.1/crystals/zeolites/SOD.cif0000644000175000001440000000521512250371054017341 0ustar marcususersdata_SOD #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.9650(0) _cell_length_b 8.9650(0) _cell_length_c 8.9650(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m 3 m' _symmetry_Int_Tables_number 229 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '+z,+x,+y' '1/2+z,1/2+x,1/2+y' '+y,+z,+x' '1/2+y,1/2+z,1/2+x' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '+z,+x,-y' '1/2+z,1/2+x,1/2-y' '+y,+z,-x' '1/2+y,1/2+z,1/2-x' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '-z,+x,+y' '1/2-z,1/2+x,1/2+y' '-y,+z,+x' '1/2-y,1/2+z,1/2+x' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '-z,+x,-y' '1/2-z,1/2+x,1/2-y' '-y,+z,-x' '1/2-y,1/2+z,1/2-x' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,+z,+y' '1/2+x,1/2+z,1/2+y' '+z,+y,+x' '1/2+z,1/2+y,1/2+x' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '+x,+z,-y' '1/2+x,1/2+z,1/2-y' '+z,+y,-x' '1/2+z,1/2+y,1/2-x' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '+x,-z,+y' '1/2+x,1/2-z,1/2+y' '+z,-y,+x' '1/2+z,1/2-y,1/2+x' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,-z,-y' '1/2+x,1/2-z,1/2-y' '+z,-y,-x' '1/2+z,1/2-y,1/2-x' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '-z,-x,-y' '1/2-z,1/2-x,1/2-y' '-y,-z,-x' '1/2-y,1/2-z,1/2-x' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '-z,-x,+y' '1/2-z,1/2-x,1/2+y' '-y,-z,+x' '1/2-y,1/2-z,1/2+x' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '+z,-x,-y' '1/2+z,1/2-x,1/2-y' '+y,-z,-x' '1/2+y,1/2-z,1/2-x' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '+z,-x,+y' '1/2+z,1/2-x,1/2+y' '+y,-z,+x' '1/2+y,1/2-z,1/2+x' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,-z,-y' '1/2-x,1/2-z,1/2-y' '-z,-y,-x' '1/2-z,1/2-y,1/2-x' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-z,+y' '1/2-x,1/2-z,1/2+y' '-z,-y,+x' '1/2-z,1/2-y,1/2+x' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,+z,-y' '1/2-x,1/2+z,1/2-y' '-z,+y,-x' '1/2-z,1/2+y,1/2-x' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,+z,+y' '1/2-x,1/2+z,1/2+y' '-z,+y,+x' '1/2-z,1/2+y,1/2+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1467 0.5000 0.8533 T1 Si 0.2500 0.5000 0.0000 avogadro-1.1.1/crystals/zeolites/AWO.cif0000644000175000001440000000355112250371054017343 0ustar marcususersdata_AWO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.1010(0) _cell_length_b 15.0350(0) _cell_length_c 19.2410(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c a' _symmetry_Int_Tables_number 64 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,1/2-y,1/2+z' '1/2+x,-y,1/2+z' '-x,1/2-y,1/2+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,+y,1/2-z' '+x,1/2+y,1/2-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2500 0.8898 0.2500 O2 O 0.0000 0.8607 0.3149 O3 O 0.2274 0.7560 0.3368 O4 O 0.2299 0.9196 0.3842 O5 O 0.2192 0.0913 0.1158 O6 O 0.1957 0.0000 0.0000 O7 O 0.0000 0.9789 0.0993 O8 O 0.2500 0.1211 0.2500 O9 O 0.5000 0.1546 0.3108 T1 Si 0.1760 0.8567 0.3215 T2 Si 0.1706 0.9973 0.0827 T3 Si 0.3248 0.1558 0.3208 avogadro-1.1.1/crystals/zeolites/LTA.cif0000644000175000001440000000344312250371054017335 0ustar marcususersdata_LTA #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 11.9190(0) _cell_length_b 11.9190(0) _cell_length_c 11.9190(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m 3 m' _symmetry_Int_Tables_number 221 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+z,+x,+y' '+y,+z,+x' '+x,+y,-z' '+z,+x,-y' '+y,+z,-x' '-x,+y,+z' '-z,+x,+y' '-y,+z,+x' '-x,+y,-z' '-z,+x,-y' '-y,+z,-x' '+y,+x,+z' '+x,+z,+y' '+z,+y,+x' '+y,+x,-z' '+x,+z,-y' '+z,+y,-x' '+y,-x,+z' '+x,-z,+y' '+z,-y,+x' '+y,-x,-z' '+x,-z,-y' '+z,-y,-x' '-x,-y,-z' '-z,-x,-y' '-y,-z,-x' '-x,-y,+z' '-z,-x,+y' '-y,-z,+x' '+x,-y,-z' '+z,-x,-y' '+y,-z,-x' '+x,-y,+z' '+z,-x,+y' '+y,-z,+x' '-y,-x,-z' '-x,-z,-y' '-z,-y,-x' '-y,-x,+z' '-x,-z,+y' '-z,-y,+x' '-y,+x,-z' '-x,+z,-y' '-z,+y,-x' '-y,+x,+z' '-x,+z,+y' '-z,+y,+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.2122 0.5000 O2 O 0.1103 0.1103 0.3384 O3 O 0.0000 0.2967 0.2967 T1 Si 0.0000 0.1823 0.3684 avogadro-1.1.1/crystals/zeolites/ITR.cif0000644000175000001440000000510412250371054017347 0ustar marcususersdata_ITR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 11.6730(0) _cell_length_b 21.9690(0) _cell_length_c 25.1700(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3058 0.1201 0.1980 O2 O 0.1127 0.0769 0.1590 O3 O 0.2821 0.1125 0.0956 O4 O 0.1617 0.1929 0.1503 O5 O 0.2898 0.1130 0.5977 O6 O 0.3054 0.0780 0.6976 O7 O 0.1121 0.1208 0.6598 O8 O 0.2859 0.1945 0.6748 O9 O 0.1503 0.2295 0.2500 O10 O 0.0000 0.2688 0.1802 O11 O 0.0000 0.4096 0.5706 O12 O 0.1476 0.4994 0.5799 O13 O 0.1648 0.4235 0.5000 O14 O 0.0000 0.4110 0.0699 O15 O 0.0000 0.3847 0.7500 O16 O 0.1378 0.4795 0.7500 O17 O 0.0000 0.4257 0.2500 O18 O 0.0000 0.9789 0.1861 O19 O 0.0000 0.0735 0.2500 O20 O 0.0000 0.1159 0.7500 T1 Si 0.2146 0.1253 0.1502 T2 Si 0.2494 0.1267 0.6576 T3 Si 0.1315 0.2491 0.1890 T4 Si 0.1314 0.4295 0.5618 T5 Si 0.1315 0.4309 0.0617 T6 Si 0.1317 0.4064 0.7500 T7 Si 0.1317 0.4474 0.2500 T8 Si 0.0000 0.0521 0.1888 T9 Si 0.0000 0.0942 0.6889 avogadro-1.1.1/crystals/zeolites/ANA.cif0000644000175000001440000000554512250371054017321 0ustar marcususersdata_ANA #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.5670(0) _cell_length_b 13.5670(0) _cell_length_c 13.5670(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I a 3 d' _symmetry_Int_Tables_number 230 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '+z,+x,+y' '1/2+z,1/2+x,1/2+y' '+y,+z,+x' '1/2+y,1/2+z,1/2+x' '1/2+x,+y,1/2-z' '+x,1/2+y,-z' '1/2+z,+x,1/2-y' '+z,1/2+x,-y' '1/2+y,+z,1/2-x' '+y,1/2+z,-x' '1/2-x,1/2+y,+z' '-x,+y,1/2+z' '1/2-z,1/2+x,+y' '-z,+x,1/2+y' '1/2-y,1/2+z,+x' '-y,+z,1/2+x' '-x,1/2+y,1/2-z' '1/2-x,+y,-z' '-z,1/2+x,1/2-y' '1/2-z,+x,-y' '-y,1/2+z,1/2-x' '1/2-y,+z,-x' '1/4+y,1/4+x,1/4+z' '3/4+y,3/4+x,3/4+z' '1/4+x,1/4+z,1/4+y' '3/4+x,3/4+z,3/4+y' '1/4+z,1/4+y,1/4+x' '3/4+z,3/4+y,3/4+x' '1/4+y,3/4+x,3/4-z' '3/4+y,1/4+x,1/4-z' '1/4+x,3/4+z,3/4-y' '3/4+x,1/4+z,1/4-y' '1/4+z,3/4+y,3/4-x' '3/4+z,1/4+y,1/4-x' '3/4+y,3/4-x,1/4+z' '1/4+y,1/4-x,3/4+z' '3/4+x,3/4-z,1/4+y' '1/4+x,1/4-z,3/4+y' '3/4+z,3/4-y,1/4+x' '1/4+z,1/4-y,3/4+x' '3/4+y,1/4-x,3/4-z' '1/4+y,3/4-x,1/4-z' '3/4+x,1/4-z,3/4-y' '1/4+x,3/4-z,1/4-y' '3/4+z,1/4-y,3/4-x' '1/4+z,3/4-y,1/4-x' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '-z,-x,-y' '1/2-z,1/2-x,1/2-y' '-y,-z,-x' '1/2-y,1/2-z,1/2-x' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '1/2-z,-x,1/2+y' '-z,1/2-x,+y' '1/2-y,-z,1/2+x' '-y,1/2-z,+x' '1/2+x,1/2-y,-z' '+x,-y,1/2-z' '1/2+z,1/2-x,-y' '+z,-x,1/2-y' '1/2+y,1/2-z,-x' '+y,-z,1/2-x' '+x,1/2-y,1/2+z' '1/2+x,-y,+z' '+z,1/2-x,1/2+y' '1/2+z,-x,+y' '+y,1/2-z,1/2+x' '1/2+y,-z,+x' '3/4-y,3/4-x,3/4-z' '1/4-y,1/4-x,1/4-z' '3/4-x,3/4-z,3/4-y' '1/4-x,1/4-z,1/4-y' '3/4-z,3/4-y,3/4-x' '1/4-z,1/4-y,1/4-x' '3/4-y,1/4-x,1/4+z' '1/4-y,3/4-x,3/4+z' '3/4-x,1/4-z,1/4+y' '1/4-x,3/4-z,3/4+y' '3/4-z,1/4-y,1/4+x' '1/4-z,3/4-y,3/4+x' '1/4-y,1/4+x,3/4-z' '3/4-y,3/4+x,1/4-z' '1/4-x,1/4+z,3/4-y' '3/4-x,3/4+z,1/4-y' '1/4-z,1/4+y,3/4-x' '3/4-z,3/4+y,1/4-x' '1/4-y,3/4+x,1/4+z' '3/4-y,1/4+x,3/4+z' '1/4-x,3/4+z,1/4+y' '3/4-x,1/4+z,3/4+y' '1/4-z,3/4+y,1/4+x' '3/4-z,1/4+y,3/4+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6417 0.4716 0.1180 T1 Si 0.6616 0.5884 0.1250 avogadro-1.1.1/crystals/zeolites/ABW.cif0000644000175000001440000000302112250371054017316 0ustar marcususersdata_ABW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.8730(0) _cell_length_b 5.2540(0) _cell_length_c 8.7700(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m m a' _symmetry_Int_Tables_number 74 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5000 0.2500 0.3523 O2 O 0.3100 0.0000 0.5000 O3 O 0.2500 0.2500 0.2500 T1 Si 0.3428 0.2500 0.4007 avogadro-1.1.1/crystals/zeolites/DDR.cif0000644000175000001440000000500312250371054017320 0ustar marcususersdata_DDR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.7950(0) _cell_length_b 13.7950(0) _cell_length_c 40.7500(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'R -3 m' _symmetry_Int_Tables_number 166 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '2/3+x,1/3+y,1/3+z' '1/3+x,2/3+y,2/3+z' '-y,+x-y,+z' '2/3-y,1/3+x-y,1/3+z' '1/3-y,2/3+x-y,2/3+z' '-x+y,-x,+z' '2/3-x+y,1/3-x,1/3+z' '1/3-x+y,2/3-x,2/3+z' '-y,-x,+z' '2/3-y,1/3-x,1/3+z' '1/3-y,2/3-x,2/3+z' '-x+y,+y,+z' '2/3-x+y,1/3+y,1/3+z' '1/3-x+y,2/3+y,2/3+z' '+x,+x-y,+z' '2/3+x,1/3+x-y,1/3+z' '1/3+x,2/3+x-y,2/3+z' '-x,-y,-z' '2/3-x,1/3-y,1/3-z' '1/3-x,2/3-y,2/3-z' '+y,-x+y,-z' '2/3+y,1/3-x+y,1/3-z' '1/3+y,2/3-x+y,2/3-z' '+x-y,+x,-z' '2/3+x-y,1/3+x,1/3-z' '1/3+x-y,2/3+x,2/3-z' '+y,+x,-z' '2/3+y,1/3+x,1/3-z' '1/3+y,2/3+x,2/3-z' '+x-y,-y,-z' '2/3+x-y,1/3-y,1/3-z' '1/3+x-y,2/3-y,2/3-z' '-x,-x+y,-z' '2/3-x,1/3-x+y,1/3-z' '1/3-x,2/3-x+y,2/3-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6889 0.9394 0.0896 O2 O 0.6439 0.0984 0.0793 O3 O 0.8539 0.1461 0.0799 O4 O 0.7223 0.0308 0.0310 O5 O 0.1495 0.2991 0.1455 O6 O 0.0638 0.1276 0.1041 O7 O 0.1738 0.3477 0.2083 O8 O 0.1423 0.4756 0.1667 O9 O 0.0638 0.1275 0.2081 O10 O 0.1055 0.8945 0.0091 O11 O 0.0000 0.0000 0.1561 T1 Si 0.7281 0.0539 0.0698 T2 Si 0.1309 0.2618 0.1075 T3 Si 0.1999 0.3999 0.1718 T4 Si 0.1187 0.2374 0.2309 T5 Si 0.2256 0.0000 0.0000 T6 Si 0.0000 0.0000 0.1956 T7 Si 0.0000 0.0000 0.1166 avogadro-1.1.1/crystals/zeolites/ATT.cif0000644000175000001440000000305112250371054017340 0ustar marcususersdata_ATT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.9800(0) _cell_length_b 7.5140(0) _cell_length_c 9.3690(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m a' _symmetry_Int_Tables_number 51 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,+z' '+x,-y,+z' '1/2-x,-y,+z' '-x,-y,-z' '1/2+x,-y,-z' '-x,+y,-z' '1/2+x,+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0665 0.3251 0.2322 O2 O 0.2500 0.2281 0.4180 O3 O 0.0658 0.0000 0.3355 O4 O 0.0000 0.2696 0.5000 O5 O 0.0000 0.5000 0.0000 O6 O 0.2500 0.5000 0.0879 T1 Si 0.0957 0.2057 0.3715 T2 Si 0.0957 0.5000 0.1380 avogadro-1.1.1/crystals/zeolites/ERI.cif0000644000175000001440000000342212250371054017331 0ustar marcususersdata_ERI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.0540(0) _cell_length_b 13.0540(0) _cell_length_c 15.1750(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8711 0.1289 0.1281 O2 O 0.0360 0.3474 0.1634 O3 O 0.0957 0.1914 0.1139 O4 O 0.0000 0.2705 0.0000 O5 O 0.2356 0.4712 0.2500 O6 O 0.0757 0.5378 0.2500 T1 Si 0.0006 0.2345 0.1014 T2 Si 0.0961 0.4261 0.2500 avogadro-1.1.1/crystals/zeolites/CAN.cif0000644000175000001440000000314612250371054017316 0ustar marcususersdata_CAN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.4940(0) _cell_length_b 12.4940(0) _cell_length_c 5.2540(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.3565 0.5000 O2 O 0.1986 0.3972 0.7500 O3 O 0.1299 0.5650 0.7500 T1 Si 0.0822 0.4190 0.7500 avogadro-1.1.1/crystals/zeolites/UOZ.cif0000644000175000001440000000342512250371054017372 0ustar marcususersdata_UOZ #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.6210(0) _cell_length_b 8.6210(0) _cell_length_c 27.5440(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 4/n n c' _symmetry_Int_Tables_number 126 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-y,+x,+z' '1/2-x,1/2-y,+z' '+y,1/2-x,+z' '-x,1/2+y,1/2+z' '1/2+y,1/2+x,1/2+z' '1/2+x,-y,1/2+z' '-y,-x,1/2+z' '-x,-y,-z' '1/2+y,-x,-z' '1/2+x,1/2+y,-z' '-y,1/2+x,-z' '+x,1/2-y,1/2-z' '1/2-y,1/2-x,1/2-z' '1/2-x,+y,1/2-z' '+y,+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1387 0.8537 0.0340 O2 O 0.9374 0.6429 0.0596 O3 O 0.0507 0.8325 0.1256 O4 O 0.3591 0.8565 0.2838 O5 O 0.9377 0.6436 0.1916 T1 Si 0.9959 0.8170 0.0699 T2 Si 0.8180 0.5041 0.1812 T3 Si 0.2500 0.7500 0.0000 T4 Si 0.2500 0.7500 0.2500 avogadro-1.1.1/crystals/zeolites/AHT.cif0000644000175000001440000000327512250371054017334 0ustar marcususersdata_AHT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 15.7940(0) _cell_length_b 9.2060(0) _cell_length_c 8.5890(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0836 0.7446 0.4985 O2 O 0.1696 0.5000 0.5000 O3 O 0.1684 0.6642 0.2500 O4 O 0.2500 0.7500 0.5000 O5 O 0.0000 0.3346 0.2500 O6 O 0.0000 0.5000 0.5000 T1 Si 0.1681 0.6646 0.4372 T2 Si 0.0000 0.3356 0.4371 avogadro-1.1.1/crystals/zeolites/SFN.cif0000644000175000001440000000406512250371054017344 0ustar marcususersdata_SFN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 25.2210(0) _cell_length_b 5.2560(0) _cell_length_c 15.0220(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 103.8900(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4868 0.5000 0.5978 O2 O 0.5677 0.2499 0.7049 O3 O 0.5840 0.5000 0.5623 O4 O 0.6054 0.7500 0.4233 O5 O 0.6701 0.0000 0.3414 O6 O 0.7592 0.2500 0.3320 O7 O 0.7038 0.0000 0.1889 O8 O 0.6351 0.0000 0.8357 O9 O 0.6502 0.0000 0.6680 O10 O 0.6899 0.0000 0.5215 O11 O 0.6916 0.0000 0.0088 O12 O 0.7274 0.7499 0.8835 T1 Si 0.5515 0.5000 0.6424 T2 Si 0.5770 0.5000 0.4529 T3 Si 0.7230 0.0000 0.2993 T4 Si 0.6054 0.0000 0.7282 T5 Si 0.6428 0.0000 0.4278 T6 Si 0.7053 0.0000 0.6319 T7 Si 0.6953 0.0000 0.9032 T8 Si 0.7348 0.0000 0.1069 avogadro-1.1.1/crystals/zeolites/BEA.cif0000644000175000001440000000446412250371054017310 0ustar marcususersdata_BEA #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.6320(0) _cell_length_b 12.6320(0) _cell_length_c 26.1860(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 41 2 2' _symmetry_Int_Tables_number 91 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x,1/4+z' '-x,-y,1/2+z' '+y,-x,3/4+z' '-x,+y,-z' '+y,+x,3/4-z' '+x,-y,1/2-z' '-y,-x,1/4-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8331 0.8389 0.0594 O2 O 0.0000 0.8266 0.0000 O3 O 0.0240 0.8499 0.0991 O4 O 0.9540 0.6695 0.0621 O5 O 0.8343 0.4990 0.0603 O6 O 0.0000 0.5123 0.0000 O7 O 0.0260 0.4894 0.0988 O8 O 0.6418 0.8549 0.0987 O9 O 0.7181 0.6688 0.0738 O10 O 0.6658 0.8034 0.0019 O11 O 0.6434 0.4838 0.1001 O12 O 0.6662 0.5298 0.0029 O13 O 0.4369 0.8404 0.0832 O14 O 0.3280 0.6644 0.0733 O15 O 0.2290 0.8469 0.0820 O16 O 0.4388 0.4885 0.0814 O17 O 0.2309 0.4809 0.0812 T1 Si 0.9529 0.7960 0.0552 T2 Si 0.9536 0.5429 0.0553 T3 Si 0.7146 0.7921 0.0584 T4 Si 0.7155 0.5451 0.0590 T5 Si 0.3318 0.7884 0.0591 T6 Si 0.3329 0.5409 0.0584 T7 Si 0.5272 0.8594 0.1256 T8 Si 0.5272 0.4728 0.1250 T9 Si 0.1391 0.8609 0.1250 avogadro-1.1.1/crystals/zeolites/MFI.cif0000644000175000001440000000551312250371054017330 0ustar marcususersdata_MFI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.0900(0) _cell_length_b 19.7380(0) _cell_length_c 13.1420(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P n m a' _symmetry_Int_Tables_number 62 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5012 0.0699 0.7018 O2 O 0.3875 0.0743 0.8008 O3 O 0.3995 0.1366 0.6251 O4 O 0.3972 0.0034 0.6326 O5 O 0.3290 0.0385 0.9722 O6 O 0.3297 0.9555 0.8155 O7 O 0.2571 0.0663 0.8106 O8 O 0.2910 0.1296 0.1060 O9 O 0.2034 0.0455 0.0275 O10 O 0.2936 0.0010 0.1564 O11 O 0.1075 0.1265 0.0883 O12 O 0.0846 0.0370 0.9443 O13 O 0.1301 0.0781 0.7670 O14 O 0.0728 0.9589 0.7832 O15 O 0.2201 0.1313 0.6456 O16 O 0.4911 0.8548 0.7169 O17 O 0.3681 0.8311 0.7743 O18 O 0.4263 0.7500 0.6431 O19 O 0.3217 0.8611 0.9561 O20 O 0.2410 0.8582 0.7990 O21 O 0.2943 0.7500 0.0579 O22 O 0.1976 0.8313 0.0003 O23 O 0.0948 0.7500 0.0205 O24 O 0.0809 0.8670 0.9275 O25 O 0.1177 0.8370 0.7406 O26 O 0.2116 0.7500 0.6913 T1 Si 0.4214 0.0711 0.6898 T2 Si 0.3259 0.0336 0.8500 T3 Si 0.2792 0.0536 0.0655 T4 Si 0.1246 0.0514 0.0481 T5 Si 0.0721 0.0360 0.8233 T6 Si 0.2034 0.0687 0.7197 T7 Si 0.4195 0.8274 0.6805 T8 Si 0.3152 0.8765 0.8361 T9 Si 0.2733 0.8278 0.0402 T10 Si 0.1185 0.8279 0.0183 T11 Si 0.0657 0.8794 0.8087 T12 Si 0.1947 0.8288 0.7092 avogadro-1.1.1/crystals/zeolites/OFF.cif0000644000175000001440000000313012250371054017320 0ustar marcususersdata_OFF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.0630(0) _cell_length_b 13.0630(0) _cell_length_c 7.5650(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P -6 m 2' _symmetry_Int_Tables_number 187 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0961 0.1921 0.2244 O2 O 0.8718 0.1282 0.2618 O3 O 0.0365 0.3477 0.3263 O4 O 0.9950 0.2679 0.0000 O5 O 0.2359 0.4718 0.5000 O6 O 0.0756 0.5378 0.5000 T1 Si 0.9998 0.2340 0.2032 T2 Si 0.0964 0.4264 0.5000 avogadro-1.1.1/crystals/zeolites/RWY.cif0000644000175000001440000000377412250371054017405 0ustar marcususersdata_RWY #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 17.7620(0) _cell_length_b 17.7620(0) _cell_length_c 17.7620(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I -4 3 m' _symmetry_Int_Tables_number 217 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '+z,+x,+y' '1/2+z,1/2+x,1/2+y' '+y,+z,+x' '1/2+y,1/2+z,1/2+x' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,+z,-y' '1/2-x,1/2+z,1/2-y' '-z,+y,-x' '1/2-z,1/2+y,1/2-x' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '+z,-x,-y' '1/2+z,1/2-x,1/2-y' '+y,-z,-x' '1/2+y,1/2-z,1/2-x' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-z,+y' '1/2-x,1/2-z,1/2+y' '-z,-y,+x' '1/2-z,1/2-y,1/2+x' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '-z,+x,-y' '1/2-z,1/2+x,1/2-y' '-y,+z,-x' '1/2-y,1/2+z,1/2-x' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,+z,+y' '1/2+x,1/2+z,1/2+y' '+z,+y,+x' '1/2+z,1/2+y,1/2+x' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '-z,-x,+y' '1/2-z,1/2-x,1/2+y' '-y,-z,+x' '1/2-y,1/2-z,1/2+x' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,-z,-y' '1/2+x,1/2-z,1/2-y' '+z,-y,-x' '1/2+z,1/2-y,1/2-x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O2 O 0.1429 0.1429 0.4509 O3 O 0.0454 0.2500 0.4070 O4 O 0.0000 0.1495 0.5000 T1 Si 0.0740 0.1962 0.4746 avogadro-1.1.1/crystals/zeolites/MWW.cif0000644000175000001440000000443412250371054017370 0ustar marcususersdata_MWW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.3900(0) _cell_length_b 14.3900(0) _cell_length_c 25.1980(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 6/m m m' _symmetry_Int_Tables_number 191 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,+z' '+y,-x+y,+z' '+x-y,+x,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6667 0.3333 0.0000 O2 O 0.5448 0.2724 0.0850 O3 O 0.3953 0.1060 0.1374 O4 O 0.5447 0.2724 0.1890 O5 O 0.6667 0.3333 0.2739 O6 O 0.3869 0.0000 0.2238 O7 O 0.5000 0.0000 0.1419 O8 O 0.5000 0.0000 0.3058 O9 O 0.3935 0.1052 0.3101 O10 O 0.5453 0.2726 0.3593 O11 O 0.3520 0.1760 0.3986 O12 O 0.1821 0.0000 0.4302 O13 O 0.2989 0.1495 0.5000 T1 Si 0.4696 0.2348 0.1370 T2 Si 0.4198 0.2099 0.3443 T3 Si 0.2540 0.1270 0.4401 T4 Si 0.3927 0.0000 0.1601 T5 Si 0.3927 0.0000 0.2876 T6 Si 0.6667 0.3333 0.0637 T7 Si 0.6667 0.3333 0.2101 T8 Si 0.6667 0.3333 0.3377 avogadro-1.1.1/crystals/zeolites/LTL.cif0000644000175000001440000000335512250371054017352 0ustar marcususersdata_LTL #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.1260(0) _cell_length_b 18.1260(0) _cell_length_c 7.5670(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 6/m m m' _symmetry_Int_Tables_number 191 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,+z' '+y,-x+y,+z' '+x-y,+x,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2645 0.5289 0.2231 O2 O 0.1099 0.4162 0.3263 O3 O 0.1484 0.5742 0.2620 O4 O 0.1365 0.4736 0.0000 O5 O 0.0000 0.2797 0.5000 O6 O 0.1628 0.3256 0.5000 T1 Si 0.1648 0.4982 0.2030 T2 Si 0.0959 0.3594 0.5000 avogadro-1.1.1/crystals/zeolites/DON.cif0000644000175000001440000000410012250371054017324 0ustar marcususersdata_DON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.8900(0) _cell_length_b 23.3650(0) _cell_length_c 8.4690(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5000 0.3133 0.4506 O2 O 0.5696 0.2217 0.5410 O3 O 0.5000 0.2829 0.7500 O4 O 0.0695 0.0926 0.4815 O5 O 0.2070 0.1013 0.5219 O6 O 0.1479 0.0000 0.5000 O7 O 0.1565 0.0663 0.2500 O8 O 0.8840 0.7297 0.2500 O9 O 0.8227 0.7887 0.4761 O10 O 0.8070 0.6769 0.4639 O11 O 0.7555 0.6669 0.7500 O12 O 0.0000 0.8994 0.2500 T1 Si 0.8608 0.7291 0.4328 T2 Si 0.7365 0.6640 0.5650 T3 Si 0.1451 0.0650 0.4381 T4 Si 0.5000 0.2599 0.5707 T5 Si 0.0000 0.8820 0.4338 avogadro-1.1.1/crystals/zeolites/WEN.cif0000644000175000001440000000320312250371054017340 0ustar marcususersdata_WEN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.5870(0) _cell_length_b 13.5870(0) _cell_length_c 7.5570(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P -6 2 m' _symmetry_Int_Tables_number 189 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2999 0.1468 0.0000 O2 O 0.3693 0.2112 0.3260 O3 O 0.2122 0.0000 0.2610 O4 O 0.1643 0.1643 0.2303 O5 O 0.3871 0.3871 0.5000 O6 O 0.5567 0.3463 0.5000 T1 Si 0.2613 0.1306 0.2043 T2 Si 0.4204 0.2889 0.5000 T3 Si 0.6667 0.3333 0.5000 avogadro-1.1.1/crystals/zeolites/DAC.cif0000644000175000001440000000341012250371054017276 0ustar marcususersdata_DAC #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.5740(0) _cell_length_b 7.5420(0) _cell_length_c 10.3770(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 108.9170(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1382 0.1743 0.7765 O2 O 0.2500 0.2500 0.0000 O3 O 0.2741 0.2492 0.7642 O4 O 0.1905 0.5000 0.8204 O5 O 0.1662 0.5000 0.3465 O6 O 0.2500 0.2500 0.5000 O7 O 0.1143 0.1742 0.3300 O8 O 0.0096 0.0000 0.6777 O9 O 0.1091 0.0000 0.5460 T1 Si 0.2133 0.2935 0.8404 T2 Si 0.1894 0.2938 0.3533 T3 Si 0.0987 0.0000 0.6940 T4 Si 0.0819 0.0000 0.3821 avogadro-1.1.1/crystals/zeolites/BPH.cif0000644000175000001440000000325612250371054017330 0ustar marcususersdata_BPH #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.0570(0) _cell_length_b 13.0570(0) _cell_length_c 12.9690(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P -6 2 m' _symmetry_Int_Tables_number 189 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4180 0.2216 0.3073 O2 O 0.4016 0.4016 0.2364 O3 O 0.5664 0.3605 0.1655 O4 O 0.5805 0.4387 0.3548 O5 O 0.6686 0.6686 0.3647 O6 O 0.5620 0.7335 0.5000 O7 O 0.3333 0.6667 0.0000 T1 Si 0.4916 0.3557 0.2659 T2 Si 0.5629 0.6967 0.3817 T3 Si 0.3333 0.6667 0.1239 avogadro-1.1.1/crystals/zeolites/CZP.cif0000644000175000001440000000311312250371054017343 0ustar marcususersdata_CZP #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.3550(0) _cell_length_b 9.3550(0) _cell_length_c 14.8620(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 61 2 2' _symmetry_Int_Tables_number 178 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,1/3+z' '-x+y,-x,2/3+z' '+y,+x,1/3-z' '+x-y,-y,-z' '-x,-x+y,2/3-z' '-x,-y,1/2+z' '+y,-x+y,5/6+z' '+x-y,+x,1/6+z' '-y,-x,5/6-z' '-x+y,+y,1/2-z' '+x,+x-y,1/6-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8353 0.5511 0.3299 O2 O 0.0164 0.7833 0.2105 O3 O 0.6575 0.6064 0.4467 O4 O 0.8201 0.4562 0.4999 T1 Si 0.8210 0.5928 0.4337 T2 Si 0.4678 0.5322 0.4167 T3 Si 0.8333 0.6667 0.2500 avogadro-1.1.1/crystals/zeolites/STI.cif0000644000175000001440000000406612250371054017356 0ustar marcususersdata_STI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.5020(0) _cell_length_b 17.8020(0) _cell_length_c 17.9420(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F m m m' _symmetry_Int_Tables_number 69 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '-x,+y,+z' '-x,1/2+y,1/2+z' '1/2-x,1/2+y,+z' '1/2-x,+y,1/2+z' '+x,-y,+z' '+x,1/2-y,1/2+z' '1/2+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,-y,+z' '-x,1/2-y,1/2+z' '1/2-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '+x,-y,-z' '+x,1/2-y,1/2-z' '1/2+x,1/2-y,-z' '1/2+x,-y,1/2-z' '-x,+y,-z' '-x,1/2+y,1/2-z' '1/2-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,+y,-z' '+x,1/2+y,1/2-z' '1/2+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.1449 0.1897 O2 O 0.1338 0.0738 0.2696 O3 O 0.1812 0.1978 0.1982 O4 O 0.1461 0.0738 0.1233 O5 O 0.3138 0.0000 0.1099 O6 O 0.1846 0.0000 0.0000 O7 O 0.0000 0.0000 0.3469 T1 Si 0.1152 0.1225 0.1953 T2 Si 0.1978 0.0000 0.0890 T3 Si 0.1134 0.0000 0.3190 T4 Si 0.2500 0.2500 0.2500 avogadro-1.1.1/crystals/zeolites/STT.cif0000644000175000001440000000634412250371054017372 0ustar marcususersdata_STT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.0500(0) _cell_length_b 21.8530(0) _cell_length_c 13.5730(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 102.9050(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 21/n' _symmetry_Int_Tables_number 14 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,1/2+y,1/2-z' '-x,-y,-z' '1/2+x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6215 0.5346 0.0155 O2 O 0.6032 0.1588 0.3277 O3 O 0.8680 0.4022 0.2639 O4 O 0.6675 0.2380 0.4763 O5 O 0.5604 0.1412 0.5059 O6 O 0.7304 0.3291 0.1483 O7 O 0.7422 0.4441 0.0985 O8 O 0.6218 0.2329 0.1808 O9 O 0.4368 0.4177 0.4743 O10 O 0.9389 0.4019 0.4607 O11 O 0.3944 0.1319 0.5850 O12 O 0.5540 0.4577 0.1368 O13 O 0.6251 0.5902 0.8447 O14 O 0.7542 0.1292 0.4842 O15 O 0.5222 0.4334 0.3178 O16 O 0.4011 0.0718 0.4182 O17 O 0.7050 0.5358 0.2099 O18 O 0.6798 0.1180 0.1760 O19 O 0.4805 0.1453 0.1455 O20 O 0.6007 0.3519 0.4561 O21 O 0.5214 0.0384 0.5913 O22 O 0.2377 0.4488 0.4155 O23 O 0.7872 0.5246 0.9372 O24 O 0.6759 0.5581 0.3912 O25 O 0.1630 0.5602 0.4053 O26 O 0.7092 0.3056 0.3315 O27 O 0.5465 0.3435 0.1951 O28 O 0.8476 0.5006 0.3692 O29 O 0.0345 0.4675 0.3457 O30 O 0.3284 0.0013 0.2605 O31 O 0.8026 0.3290 0.5194 O32 O 0.6221 0.4693 0.4991 T1 Si 0.5962 0.1637 0.2081 T2 Si 0.6463 0.1669 0.4476 T3 Si 0.6951 0.5699 0.9531 T4 Si 0.6551 0.4928 0.1153 T5 Si 0.6516 0.3025 0.2137 T6 Si 0.6948 0.3063 0.4462 T7 Si 0.4998 0.4112 0.2019 T8 Si 0.4694 0.0961 0.5248 T9 Si 0.7630 0.5527 0.3241 T10 Si 0.3735 0.0026 0.3809 T11 Si 0.1505 0.4942 0.3513 T12 Si 0.8093 0.3859 0.1496 T13 Si 0.5454 0.4180 0.4367 T14 Si 0.8904 0.3812 0.5547 T15 Si 0.3446 0.4597 0.4997 T16 Si 0.9223 0.4432 0.3600 avogadro-1.1.1/crystals/zeolites/RTE.cif0000644000175000001440000000326212250371054017346 0ustar marcususersdata_RTE #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.0980(0) _cell_length_b 13.6700(0) _cell_length_c 7.4310(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 102.4210(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6879 0.1236 0.6245 O2 O 0.5000 0.1456 0.5000 O3 O 0.6211 0.1807 0.2835 O4 O 0.5918 0.0000 0.3808 O5 O 0.6411 0.1434 0.9466 O6 O 0.8193 0.1812 0.9123 O7 O 0.7559 0.0000 0.8921 O8 O 0.5000 0.2579 0.0000 T1 Si 0.6001 0.1124 0.4471 T2 Si 0.7261 0.1122 0.8437 T3 Si 0.6107 0.2251 0.0797 avogadro-1.1.1/crystals/zeolites/SBS.cif0000644000175000001440000000415212250371054017342 0ustar marcususersdata_SBS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 17.1930(0) _cell_length_b 17.1930(0) _cell_length_c 27.3330(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0029 0.2880 0.5920 O2 O 0.0000 0.2430 0.5000 O3 O 0.1409 0.2819 0.5547 O4 O 0.1077 0.4095 0.5279 O5 O 0.6934 0.0970 0.6587 O6 O 0.6681 0.1170 0.5657 O7 O 0.8308 0.1692 0.5983 O8 O 0.4314 0.5686 0.5006 O9 O 0.2625 0.5249 0.4886 O10 O 0.8612 0.4306 0.6791 O11 O 0.8759 0.3354 0.7500 O12 O 0.7402 0.2598 0.6887 T1 Si 0.0632 0.3057 0.5436 T2 Si 0.7261 0.0951 0.6037 T3 Si 0.8451 0.3331 0.6941 T4 Si 0.3321 0.4880 0.4879 avogadro-1.1.1/crystals/zeolites/MAR.cif0000644000175000001440000000402412250371054017330 0ustar marcususersdata_MAR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.3920(0) _cell_length_b 12.3920(0) _cell_length_c 30.4690(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1163 0.8837 0.0136 O2 O 0.0245 0.6526 0.1227 O3 O 0.8832 0.4416 0.0809 O4 O 0.7929 0.5859 0.1030 O5 O 0.4525 0.5475 0.1827 O6 O 0.5813 0.7906 0.1765 O7 O 0.6870 0.6679 0.2067 O8 O 0.4695 0.9390 0.7500 O9 O 0.5387 0.7693 0.7500 O10 O 0.9613 0.6559 0.0408 T1 Si 0.9156 0.5837 0.0869 T2 Si 0.5876 0.6647 0.1718 T3 Si 0.9163 0.5864 0.2500 T4 Si 0.2494 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/SSF.cif0000644000175000001440000000370412250371054017350 0ustar marcususersdata_SSF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 17.2100(0) _cell_length_b 17.2100(0) _cell_length_c 12.7920(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 6/m m m' _symmetry_Int_Tables_number 191 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,+z' '+y,-x+y,+z' '+x-y,+x,+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5131 0.2566 0.1394 O2 O 0.4004 0.3121 0.1891 O3 O 0.4667 0.3386 0.0000 O4 O 0.5709 0.4291 0.1575 O5 O 0.2594 0.0000 0.3074 O6 O 0.2397 0.0000 0.1029 O7 O 0.0880 0.9120 0.3520 O8 O 0.2069 0.0000 0.5000 O9 O 0.0880 0.9120 0.0000 T1 Si 0.4880 0.3339 0.1216 T2 Si 0.3027 0.0000 0.1958 T3 Si 0.1823 0.0000 0.3786 T4 Si 0.1860 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/MFS.cif0000644000175000001440000000423312250371054017340 0ustar marcususersdata_MFS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.5430(0) _cell_length_b 14.3880(0) _cell_length_c 19.0160(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m m 2' _symmetry_Int_Tables_number 44 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3258 0.2230 0.2521 O2 O 0.2506 0.2668 0.1212 O3 O 0.0000 0.2057 0.2054 O4 O 0.2489 0.0915 0.1619 O5 O 0.2510 0.5914 0.0332 O6 O 0.1744 0.7591 0.9877 O7 O 0.5000 0.7187 0.0253 O8 O 0.0000 0.0913 0.9489 O9 O 0.0000 0.2383 0.8679 O10 O 0.0000 0.5911 0.8191 O11 O 0.5000 0.0000 0.0953 O12 O 0.1746 0.0000 0.0463 O13 O 0.5000 0.5000 0.9657 O14 O 0.1742 0.5000 0.9172 T1 Si 0.2063 0.1968 0.1848 T2 Si 0.2937 0.7004 0.0421 T3 Si 0.0000 0.2032 0.9482 T4 Si 0.0000 0.6993 0.7977 T5 Si 0.2935 0.0000 0.1166 T6 Si 0.2936 0.5000 0.9873 T7 Si 0.0000 0.5000 0.8683 T8 Si 0.0000 0.0000 0.9978 avogadro-1.1.1/crystals/zeolites/PON.cif0000644000175000001440000000365412250371054017355 0ustar marcususersdata_PON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.9140(0) _cell_length_b 9.2090(0) _cell_length_c 16.0870(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P c a 21' _symmetry_Int_Tables_number 29 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,1/2+z' '1/2+x,-y,+z' '-x,-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3352 0.8557 0.3875 O2 O 0.0931 0.7455 0.4572 O3 O 0.0902 0.8130 0.2995 O4 O 0.0976 0.0198 0.4127 O5 O 0.1414 0.3621 0.8084 O6 O 0.8711 0.4663 0.7784 O7 O 0.0118 0.3151 0.6641 O8 O 0.9860 0.7625 0.0068 O9 O 0.2260 0.6406 0.0700 O10 O 0.9861 0.4845 0.0464 O11 O 0.0855 0.2830 0.3511 O12 O 0.2225 0.4934 0.4320 T1 Si 0.1548 0.8593 0.3892 T2 Si 0.0453 0.6434 0.0722 T3 Si 0.1992 0.4181 0.3426 T11 Si 0.9841 0.3328 0.7624 T12 Si 0.1502 0.5985 0.5012 T13 Si 0.0069 0.1709 0.4144 avogadro-1.1.1/crystals/zeolites/BRE.cif0000644000175000001440000000331312250371054017321 0ustar marcususersdata_BRE #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 6.7600(0) _cell_length_b 17.0930(0) _cell_length_c 7.6030(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 95.8270(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 21/m' _symmetry_Int_Tables_number 11 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,1/2+y,-z' '-x,-y,-z' '+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3807 0.1011 0.0303 O2 O 0.0981 0.0951 0.7660 O3 O 0.4051 0.0003 0.7723 O4 O 0.4506 0.1505 0.7148 O5 O 0.2059 0.0002 0.2248 O6 O 0.4169 0.1155 0.3765 O7 O 0.7700 0.1194 0.5567 O8 O 0.5730 0.2500 0.4848 O9 O 0.0000 0.0000 0.5000 T1 Si 0.3336 0.0868 0.8209 T2 Si 0.3997 0.0542 0.2150 T3 Si 0.5527 0.1589 0.5333 T4 Si 0.9155 0.0535 0.6493 avogadro-1.1.1/crystals/zeolites/ZON.cif0000644000175000001440000000341412250371054017361 0ustar marcususersdata_ZON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 6.9180(0) _cell_length_b 14.8700(0) _cell_length_c 17.2360(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P b c m' _symmetry_Int_Tables_number 57 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,1/2+y,+z' '+x,1/2-y,1/2+z' '-x,-y,1/2+z' '-x,-y,-z' '+x,1/2-y,-z' '-x,1/2+y,1/2-z' '+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.9169 0.6789 0.3694 O2 O 0.2937 0.6822 0.3876 O3 O 0.1063 0.8324 0.3597 O4 O 0.1434 0.7105 0.2500 O5 O 0.0821 0.0043 0.3957 O6 O 0.3080 0.8980 0.4765 O7 O 0.9307 0.8821 0.4877 O8 O 0.6118 0.6004 0.4311 O9 O 0.5059 0.7500 0.5000 T1 Si 0.1146 0.7262 0.3416 T2 Si 0.1069 0.9040 0.4297 T3 Si 0.8443 0.6005 0.4268 T4 Si 0.4297 0.8415 0.5395 avogadro-1.1.1/crystals/zeolites/EMT.cif0000644000175000001440000000415212250371054017340 0ustar marcususersdata_EMT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 17.2150(0) _cell_length_b 17.2150(0) _cell_length_c 28.0820(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0574 0.5287 0.0931 O2 O 0.0706 0.4310 0.1611 O3 O 0.9303 0.3610 0.1044 O4 O 0.0882 0.3978 0.0716 O5 O 0.0000 0.2914 0.0000 O6 O 0.1300 0.4560 0.9836 O7 O 0.1678 0.3356 0.0162 O8 O 0.2368 0.4736 0.9124 O9 O 0.1861 0.5931 0.9251 O10 O 0.1868 0.5934 0.1905 O11 O 0.2361 0.4723 0.1810 O12 O 0.1264 0.4576 0.2500 T1 Si 0.0366 0.4296 0.1075 T2 Si 0.0964 0.3701 0.0179 T3 Si 0.1556 0.4884 0.9292 T4 Si 0.1550 0.4885 0.1957 avogadro-1.1.1/crystals/zeolites/EON.cif0000644000175000001440000000513212250371054017333 0ustar marcususersdata_EON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.5710(0) _cell_length_b 18.1480(0) _cell_length_c 25.9320(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m n' _symmetry_Int_Tables_number 59 _space_group.IT_coordinate_system_code '2' loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,+z' '+x,1/2-y,+z' '1/2-x,1/2-y,+z' '-x,-y,-z' '1/2+x,-y,-z' '-x,1/2+y,-z' '1/2+x,1/2+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5767 0.1495 0.9614 O2 O 0.7500 0.1112 0.0446 O3 O 0.7500 0.2500 0.0145 O4 O 0.5767 0.0288 0.1106 O5 O 0.7500 0.1457 0.1432 O6 O 0.5759 0.1275 0.2299 O7 O 0.7500 0.2500 0.2142 O8 O 0.2500 0.1570 0.9291 O9 O 0.0025 0.1095 0.8666 O10 O 0.0142 0.2500 0.8934 O11 O 0.0217 0.9935 0.2048 O12 O 0.2500 0.9893 0.1286 O13 O 0.2500 0.0836 0.2481 O14 O 0.9856 0.0302 0.3024 O15 O 0.0761 0.1255 0.3738 O16 O 0.2500 0.2500 0.3811 O17 O 0.2500 0.1564 0.4588 O18 O 0.0764 0.1260 0.5442 O19 O 0.2500 0.2500 0.5366 O20 O 0.0095 0.9879 0.3988 O21 O 0.7500 0.0754 0.3701 O22 O 0.2500 0.9221 0.4556 O23 O 0.0000 0.0000 0.5000 T1 Si 0.0466 0.1666 0.9123 T2 Si 0.0471 0.9754 0.1445 T3 Si 0.0460 0.0587 0.2463 T4 Si 0.9547 0.0549 0.3614 T5 Si 0.0459 0.9465 0.4525 T6 Si 0.7500 0.1655 0.9956 T7 Si 0.7500 0.0788 0.1024 T8 Si 0.7500 0.1626 0.2041 T9 Si 0.2500 0.1643 0.3970 T10 Si 0.2500 0.1644 0.5205 avogadro-1.1.1/crystals/zeolites/RSN.cif0000644000175000001440000000366412250371054017364 0ustar marcususersdata_RSN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.1550(0) _cell_length_b 41.8260(0) _cell_length_c 7.1580(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0030(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8164 0.1027 0.0000 O2 O 0.6834 0.0532 0.1844 O3 O 0.0000 0.0486 0.0000 O4 O 0.6833 0.0532 0.8157 O5 O 0.5000 0.0463 0.5000 O6 O 0.5001 0.0000 0.2510 O7 O 0.0000 0.1473 0.1835 O8 O 0.8156 0.1968 0.3167 O9 O 0.0000 0.2014 0.0000 O10 O 0.1843 0.1968 0.3167 O11 O 0.5000 0.2038 0.5000 O12 O 0.2500 0.2500 0.5000 T1 Si 0.7943 0.0643 0.0000 T2 Si 0.5000 0.0381 0.2804 T3 Si 0.0000 0.1857 0.2057 T4 Si 0.2801 0.2119 0.5000 T5 Si 0.0000 0.1250 0.0000 avogadro-1.1.1/crystals/zeolites/MAZ.cif0000644000175000001440000000342212250371054017341 0ustar marcususersdata_MAZ #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.1020(0) _cell_length_b 18.1020(0) _cell_length_c 7.6180(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.2801 0.0000 O2 O 0.1193 0.4365 0.9225 O3 O 0.1620 0.3239 0.0227 O4 O 0.0959 0.3839 0.2500 O5 O 0.5263 0.2631 0.2500 O6 O 0.5736 0.1473 0.2500 T1 Si 0.0943 0.3561 0.0487 T2 Si 0.4934 0.1624 0.2500 avogadro-1.1.1/crystals/zeolites/UTL.cif0000644000175000001440000000527212250371054017363 0ustar marcususersdata_UTL #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 28.9960(0) _cell_length_b 13.9680(0) _cell_length_c 12.4490(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 104.9100(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4194 0.6797 0.7411 O2 O 0.5076 0.6290 0.8415 O3 O 0.4394 0.5000 0.7988 O4 O 0.4414 0.6310 0.9514 O5 O 0.4023 0.6809 0.1112 O6 O 0.4252 0.5000 0.0890 O7 O 0.2173 0.0000 0.8244 O8 O 0.2957 0.9060 0.8355 O9 O 0.2546 0.0000 0.6512 O10 O 0.1941 0.4048 0.7853 O11 O 0.2708 0.5000 0.7776 O12 O 0.2418 0.5000 0.9608 O13 O 0.2736 0.5000 0.5664 O14 O 0.3379 0.4062 0.7161 O15 O 0.1967 0.4055 0.4670 O16 O 0.3288 0.7254 0.1919 O17 O 0.2401 0.7693 0.1902 O18 O 0.3085 0.7830 0.3751 O19 O 0.3434 0.7376 0.5837 O20 O 0.2500 0.7500 0.5000 O21 O 0.3479 0.7670 0.7951 O22 O 0.3281 0.7753 0.9881 O23 O 0.3212 0.5943 0.0364 T1 Si 0.4521 0.6099 0.8330 T2 Si 0.4401 0.6099 0.0777 T3 Si 0.2954 0.7954 0.2422 T4 Si 0.3010 0.7941 0.4982 T5 Si 0.3072 0.7938 0.8569 T6 Si 0.3453 0.6950 0.0827 T7 Si 0.3624 0.6957 0.7076 T8 Si 0.2660 0.0000 0.7847 T9 Si 0.2247 0.5000 0.8270 T10 Si 0.3046 0.5000 0.6936 T11 Si 0.2278 0.5000 0.4612 T12 Si 0.2921 0.5000 0.0536 avogadro-1.1.1/crystals/zeolites/LTF.cif0000644000175000001440000000450112250371054017336 0ustar marcususersdata_LTF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 31.1670(0) _cell_length_b 31.1670(0) _cell_length_c 7.6010(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.4177 0.5000 O2 O 0.0941 0.4870 0.4785 O3 O 0.0700 0.3969 0.5771 O4 O 0.0562 0.4140 0.2500 O5 O 0.1845 0.5121 0.5770 O6 O 0.2486 0.4972 0.7500 O7 O 0.1538 0.4288 0.7500 O8 O 0.1671 0.5266 0.2500 O9 O 0.1621 0.5810 0.5045 O10 O 0.0000 0.1626 0.5000 O11 O 0.0560 0.2229 0.2500 O12 O 0.0945 0.1891 0.4812 O13 O 0.0684 0.2538 0.5770 O14 O 0.0864 0.3339 0.7500 O15 O 0.1523 0.3046 0.7500 T1 Si 0.0550 0.4290 0.4519 T2 Si 0.1520 0.5267 0.4525 T3 Si 0.0547 0.2070 0.4523 T4 Si 0.1928 0.4873 0.7500 T5 Si 0.0953 0.3894 0.7500 T6 Si 0.0940 0.2865 0.7500 avogadro-1.1.1/crystals/zeolites/HEU.cif0000644000175000001440000000353612250371054017341 0ustar marcususersdata_HEU #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 17.5230(0) _cell_length_b 17.6440(0) _cell_length_c 7.4010(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 116.1040(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0830 0.1625 0.0651 O2 O 0.2354 0.1039 0.2626 O3 O 0.1875 0.1572 0.8968 O4 O 0.2176 0.2507 0.1974 O5 O 0.1245 0.3665 0.4113 O6 O 0.1969 0.5000 0.4560 O7 O 0.2697 0.3799 0.3898 O8 O 0.1212 0.2303 0.5521 O9 O 0.0000 0.3280 0.5000 O10 O 0.0099 0.2678 0.1866 T1 Si 0.1809 0.1686 0.1054 T2 Si 0.2140 0.4107 0.4988 T3 Si 0.2053 0.1893 0.7155 T4 Si 0.0641 0.2981 0.4128 T5 Si 0.0000 0.2151 0.0000 avogadro-1.1.1/crystals/zeolites/LOV.cif0000644000175000001440000000321712250371054017354 0ustar marcususersdata_LOV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.1630(0) _cell_length_b 7.1630(0) _cell_length_c 20.8760(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 42/m m c' _symmetry_Int_Tables_number 131 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x,1/2+z' '-x,-y,+z' '+y,-x,1/2+z' '-x,+y,+z' '+y,+x,1/2+z' '+x,-y,+z' '-y,-x,1/2+z' '-x,-y,-z' '+y,-x,1/2-z' '+x,+y,-z' '-y,+x,1/2-z' '+x,-y,-z' '-y,-x,1/2-z' '-x,+y,-z' '+y,+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2558 0.5000 0.0000 O2 O 0.1840 0.6833 0.1061 O3 O 0.5000 0.5000 0.0943 O4 O 0.0000 0.0000 0.0970 O5 O 0.0000 0.8166 0.2053 T1 Si 0.2814 0.5000 0.0765 T2 Si 0.0000 0.7944 0.1285 T3 Si 0.0000 0.0000 0.7500 avogadro-1.1.1/crystals/zeolites/MTN.cif0000644000175000001440000001142012250371054017345 0ustar marcususersdata_MTN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 19.9330(0) _cell_length_b 19.9330(0) _cell_length_c 19.9330(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F d 3 m' _symmetry_Int_Tables_number 227 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '+z,+x,+y' '+z,1/2+x,1/2+y' '1/2+z,1/2+x,+y' '1/2+z,+x,1/2+y' '+y,+z,+x' '+y,1/2+z,1/2+x' '1/2+y,1/2+z,+x' '1/2+y,+z,1/2+x' '-x,1/4+y,1/4+z' '-x,3/4+y,3/4+z' '1/2-x,3/4+y,1/4+z' '1/2-x,1/4+y,3/4+z' '-z,1/4+x,1/4+y' '-z,3/4+x,3/4+y' '1/2-z,3/4+x,1/4+y' '1/2-z,1/4+x,3/4+y' '-y,1/4+z,1/4+x' '-y,3/4+z,3/4+x' '1/2-y,3/4+z,1/4+x' '1/2-y,1/4+z,3/4+x' '1/4+x,-y,1/4+z' '1/4+x,1/2-y,3/4+z' '3/4+x,1/2-y,1/4+z' '3/4+x,-y,3/4+z' '1/4+z,-x,1/4+y' '1/4+z,1/2-x,3/4+y' '3/4+z,1/2-x,1/4+y' '3/4+z,-x,3/4+y' '1/4+y,-z,1/4+x' '1/4+y,1/2-z,3/4+x' '3/4+y,1/2-z,1/4+x' '3/4+y,-z,3/4+x' '1/4-x,3/4-y,1/2+z' '1/4-x,1/4-y,+z' '3/4-x,1/4-y,1/2+z' '3/4-x,3/4-y,+z' '1/4-z,3/4-x,1/2+y' '1/4-z,1/4-x,+y' '3/4-z,1/4-x,1/2+y' '3/4-z,3/4-x,+y' '1/4-y,3/4-z,1/2+x' '1/4-y,1/4-z,+x' '3/4-y,1/4-z,1/2+x' '3/4-y,3/4-z,+x' '+y,+x,+z' '+y,1/2+x,1/2+z' '1/2+y,1/2+x,+z' '1/2+y,+x,1/2+z' '+x,+z,+y' '+x,1/2+z,1/2+y' '1/2+x,1/2+z,+y' '1/2+x,+z,1/2+y' '+z,+y,+x' '+z,1/2+y,1/2+x' '1/2+z,1/2+y,+x' '1/2+z,+y,1/2+x' '1/4+y,-x,1/4+z' '1/4+y,1/2-x,3/4+z' '3/4+y,1/2-x,1/4+z' '3/4+y,-x,3/4+z' '1/4+x,-z,1/4+y' '1/4+x,1/2-z,3/4+y' '3/4+x,1/2-z,1/4+y' '3/4+x,-z,3/4+y' '1/4+z,-y,1/4+x' '1/4+z,1/2-y,3/4+x' '3/4+z,1/2-y,1/4+x' '3/4+z,-y,3/4+x' '-y,1/4+x,1/4+z' '-y,3/4+x,3/4+z' '1/2-y,3/4+x,1/4+z' '1/2-y,1/4+x,3/4+z' '-x,1/4+z,1/4+y' '-x,3/4+z,3/4+y' '1/2-x,3/4+z,1/4+y' '1/2-x,1/4+z,3/4+y' '-z,1/4+y,1/4+x' '-z,3/4+y,3/4+x' '1/2-z,3/4+y,1/4+x' '1/2-z,1/4+y,3/4+x' '3/4-y,1/4-x,1/2+z' '3/4-y,3/4-x,+z' '1/4-y,3/4-x,1/2+z' '1/4-y,1/4-x,+z' '3/4-x,1/4-z,1/2+y' '3/4-x,3/4-z,+y' '1/4-x,3/4-z,1/2+y' '1/4-x,1/4-z,+y' '3/4-z,1/4-y,1/2+x' '3/4-z,3/4-y,+x' '1/4-z,3/4-y,1/2+x' '1/4-z,1/4-y,+x' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '-z,-x,-y' '-z,1/2-x,1/2-y' '1/2-z,1/2-x,-y' '1/2-z,-x,1/2-y' '-y,-z,-x' '-y,1/2-z,1/2-x' '1/2-y,1/2-z,-x' '1/2-y,-z,1/2-x' '+x,3/4-y,3/4-z' '+x,1/4-y,1/4-z' '1/2+x,1/4-y,3/4-z' '1/2+x,3/4-y,1/4-z' '+z,3/4-x,3/4-y' '+z,1/4-x,1/4-y' '1/2+z,1/4-x,3/4-y' '1/2+z,3/4-x,1/4-y' '+y,3/4-z,3/4-x' '+y,1/4-z,1/4-x' '1/2+y,1/4-z,3/4-x' '1/2+y,3/4-z,1/4-x' '3/4-x,+y,3/4-z' '3/4-x,1/2+y,1/4-z' '1/4-x,1/2+y,3/4-z' '1/4-x,+y,1/4-z' '3/4-z,+x,3/4-y' '3/4-z,1/2+x,1/4-y' '1/4-z,1/2+x,3/4-y' '1/4-z,+x,1/4-y' '3/4-y,+z,3/4-x' '3/4-y,1/2+z,1/4-x' '1/4-y,1/2+z,3/4-x' '1/4-y,+z,1/4-x' '3/4+x,1/4+y,1/2-z' '3/4+x,3/4+y,-z' '1/4+x,3/4+y,1/2-z' '1/4+x,1/4+y,-z' '3/4+z,1/4+x,1/2-y' '3/4+z,3/4+x,-y' '1/4+z,3/4+x,1/2-y' '1/4+z,1/4+x,-y' '3/4+y,1/4+z,1/2-x' '3/4+y,3/4+z,-x' '1/4+y,3/4+z,1/2-x' '1/4+y,1/4+z,-x' '-y,-x,-z' '-y,1/2-x,1/2-z' '1/2-y,1/2-x,-z' '1/2-y,-x,1/2-z' '-x,-z,-y' '-x,1/2-z,1/2-y' '1/2-x,1/2-z,-y' '1/2-x,-z,1/2-y' '-z,-y,-x' '-z,1/2-y,1/2-x' '1/2-z,1/2-y,-x' '1/2-z,-y,1/2-x' '3/4-y,+x,3/4-z' '3/4-y,1/2+x,1/4-z' '1/4-y,1/2+x,3/4-z' '1/4-y,+x,1/4-z' '3/4-x,+z,3/4-y' '3/4-x,1/2+z,1/4-y' '1/4-x,1/2+z,3/4-y' '1/4-x,+z,1/4-y' '3/4-z,+y,3/4-x' '3/4-z,1/2+y,1/4-x' '1/4-z,1/2+y,3/4-x' '1/4-z,+y,1/4-x' '+y,3/4-x,3/4-z' '+y,1/4-x,1/4-z' '1/2+y,1/4-x,3/4-z' '1/2+y,3/4-x,1/4-z' '+x,3/4-z,3/4-y' '+x,1/4-z,1/4-y' '1/2+x,1/4-z,3/4-y' '1/2+x,3/4-z,1/4-y' '+z,3/4-y,3/4-x' '+z,1/4-y,1/4-x' '1/2+z,1/4-y,3/4-x' '1/2+z,3/4-y,1/4-x' '1/4+y,3/4+x,1/2-z' '1/4+y,1/4+x,-z' '3/4+y,1/4+x,1/2-z' '3/4+y,3/4+x,-z' '1/4+x,3/4+z,1/2-y' '1/4+x,1/4+z,-y' '3/4+x,1/4+z,1/2-y' '3/4+x,3/4+z,-y' '1/4+z,3/4+y,1/2-x' '1/4+z,1/4+y,-x' '3/4+z,1/4+y,1/2-x' '3/4+z,3/4+y,-x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0485 0.0485 0.2952 O2 O 0.0931 0.0000 0.4069 O3 O 0.1250 0.1250 0.3721 O4 O 0.1716 0.1716 0.1716 T1 Si 0.0680 0.0680 0.3712 T2 Si 0.2181 0.2181 0.2181 T3 Si 0.1250 0.1250 0.1250 avogadro-1.1.1/crystals/zeolites/LIT.cif0000644000175000001440000000321012250371054017335 0ustar marcususersdata_LIT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.8440(0) _cell_length_b 8.5940(0) _cell_length_c 9.7840(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P n m a' _symmetry_Int_Tables_number 62 loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0555 0.9595 0.0990 O2 O 0.0393 0.2500 0.1795 O3 O 0.9406 0.0316 0.2935 O4 O 0.1147 0.0433 0.3413 O5 O 0.2156 0.4599 0.8165 O6 O 0.1799 0.7500 0.7513 O7 O 0.2068 0.5424 0.5581 O8 O 0.1613 0.7500 0.3734 T1 Si 0.0375 0.0711 0.2283 T2 Si 0.1654 0.5710 0.7081 T3 Si 0.1918 0.5722 0.3972 avogadro-1.1.1/crystals/zeolites/LAU.cif0000644000175000001440000000320712250371054017334 0ustar marcususersdata_LAU #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.5870(0) _cell_length_b 12.8770(0) _cell_length_c 7.6130(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 111.1590(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3514 0.3446 0.2784 O2 O 0.2360 0.5000 0.2857 O3 O 0.1698 0.3082 0.2537 O4 O 0.3011 0.3723 0.5736 O5 O 0.3631 0.3646 0.9433 O6 O 0.4809 0.3097 0.7674 O7 O 0.4507 0.5000 0.2099 T1 Si 0.2646 0.3813 0.3478 T2 Si 0.3688 0.3096 0.7576 T3 Si 0.4210 0.3798 0.1660 avogadro-1.1.1/crystals/zeolites/AFN.cif0000644000175000001440000000346312250371054017323 0ustar marcususersdata_AFN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.0200(0) _cell_length_b 13.4660(0) _cell_length_c 10.2020(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 107.2390(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8183 0.8419 0.3262 O2 O 0.7644 0.6824 0.1755 O3 O 0.6257 0.7886 0.2325 O4 O 0.7189 0.8605 0.0664 O5 O 0.4412 0.8552 0.1487 O6 O 0.3105 0.0000 0.1225 O7 O 0.5000 0.3574 0.5000 O8 O 0.5725 0.5000 0.6776 O9 O 0.5241 0.3281 0.7623 O10 O 0.5000 0.2759 0.0000 T1 Si 0.5113 0.2407 0.1549 T2 Si 0.7318 0.7936 0.2014 T3 Si 0.3246 0.8840 0.0951 T4 Si 0.5696 0.3818 0.6529 avogadro-1.1.1/crystals/zeolites/SOF.cif0000644000175000001440000000362512250371054017346 0ustar marcususersdata_SOF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.3320(0) _cell_length_b 12.0850(0) _cell_length_c 10.2750(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 105.2540(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/c' _symmetry_Int_Tables_number 15 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3489 0.8008 0.3861 O2 O 0.2262 0.8861 0.3094 O3 O 0.2269 0.1218 0.1735 O4 O 0.4045 0.3962 0.3178 O5 O 0.3495 0.2062 0.2189 O6 O 0.3668 0.3652 0.0570 O7 O 0.5000 0.5000 0.0000 O8 O 0.4031 0.3864 0.8321 O9 O 0.3113 0.0493 0.0372 O10 O 0.5000 0.4857 0.7500 O11 O 0.3321 0.0049 0.2993 T1 Si 0.3054 0.0945 0.1811 T2 Si 0.3047 0.9117 0.3843 T3 Si 0.3484 0.3381 0.1968 T4 Si 0.3478 0.3319 0.8998 T5 Si 0.4511 0.4943 0.8494 avogadro-1.1.1/crystals/zeolites/UEI.cif0000644000175000001440000000355112250371054017337 0ustar marcususersdata_UEI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 19.4600(0) _cell_length_b 9.3510(0) _cell_length_c 15.1070(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F m m 2' _symmetry_Int_Tables_number 42 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '-x,+y,+z' '-x,1/2+y,1/2+z' '1/2-x,1/2+y,+z' '1/2-x,+y,1/2+z' '+x,-y,+z' '+x,1/2-y,1/2+z' '1/2+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,-y,+z' '-x,1/2-y,1/2+z' '1/2-x,1/2-y,+z' '1/2-x,-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.7500 0.7500 0.1040 O2 O 0.6642 0.7164 0.2384 O3 O 0.6161 0.7933 0.9045 O4 O 0.6160 0.7702 0.5752 O5 O 0.7500 0.7500 0.8751 O6 O 0.6963 0.0000 0.8430 O7 O 0.5000 0.8025 0.9956 O8 O 0.6867 0.0000 0.6268 O9 O 0.5963 0.0000 0.0233 T1 Si 0.6793 0.8275 0.6360 T2 Si 0.6807 0.6706 0.3401 T3 Si 0.5822 0.8327 0.0000 avogadro-1.1.1/crystals/zeolites/ATO.cif0000644000175000001440000000372412250371054017342 0ustar marcususersdata_ATO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.9140(0) _cell_length_b 20.9140(0) _cell_length_c 5.0610(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'R -3 m' _symmetry_Int_Tables_number 166 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '2/3+x,1/3+y,1/3+z' '1/3+x,2/3+y,2/3+z' '-y,+x-y,+z' '2/3-y,1/3+x-y,1/3+z' '1/3-y,2/3+x-y,2/3+z' '-x+y,-x,+z' '2/3-x+y,1/3-x,1/3+z' '1/3-x+y,2/3-x,2/3+z' '-y,-x,+z' '2/3-y,1/3-x,1/3+z' '1/3-y,2/3-x,2/3+z' '-x+y,+y,+z' '2/3-x+y,1/3+y,1/3+z' '1/3-x+y,2/3+y,2/3+z' '+x,+x-y,+z' '2/3+x,1/3+x-y,1/3+z' '1/3+x,2/3+x-y,2/3+z' '-x,-y,-z' '2/3-x,1/3-y,1/3-z' '1/3-x,2/3-y,2/3-z' '+y,-x+y,-z' '2/3+y,1/3-x+y,1/3-z' '1/3+y,2/3-x+y,2/3-z' '+x-y,+x,-z' '2/3+x-y,1/3+x,1/3-z' '1/3+x-y,2/3+x,2/3-z' '+y,+x,-z' '2/3+y,1/3+x,1/3-z' '1/3+y,2/3+x,2/3-z' '+x-y,-y,-z' '2/3+x-y,1/3-y,1/3-z' '1/3+x-y,2/3-y,2/3-z' '-x,-x+y,-z' '2/3-x,1/3-x+y,1/3-z' '1/3-x,2/3-x+y,2/3-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6667 0.1347 0.8333 O2 O 0.5760 0.0000 0.0000 O3 O 0.5544 0.1089 0.1382 O4 O 0.6667 0.1006 0.3333 T1 Si 0.6160 0.0861 0.0763 avogadro-1.1.1/crystals/zeolites/BOG.cif0000644000175000001440000000435412250371054017326 0ustar marcususersdata_BOG #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.0140(0) _cell_length_b 23.5800(0) _cell_length_c 12.6690(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m m a' _symmetry_Int_Tables_number 74 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2002 0.1449 0.5630 O2 O 0.1209 0.1762 0.7179 O3 O 0.2033 0.2500 0.6322 O4 O 0.2500 0.1671 0.7500 O5 O 0.1038 0.1441 0.9152 O6 O 0.0000 0.1696 0.7975 O7 O 0.0817 0.2500 0.8607 O8 O 0.2090 0.0705 0.4088 O9 O 0.1762 0.9629 0.4000 O10 O 0.1229 0.0354 0.2665 O11 O 0.2500 0.0076 0.2500 O12 O 0.1011 0.0720 0.0737 O13 O 0.0825 0.9643 0.1201 O14 O 0.0000 0.0415 0.1935 O15 O 0.2986 0.0708 0.5605 T1 Si 0.1935 0.1847 0.6657 T2 Si 0.0767 0.1849 0.8229 T3 Si 0.1896 0.0192 0.3308 T4 Si 0.0766 0.0283 0.1634 T5 Si 0.2210 0.0809 0.5330 T6 Si 0.1222 0.0806 0.9521 avogadro-1.1.1/crystals/zeolites/VET.cif0000644000175000001440000000335612250371054017356 0ustar marcususersdata_VET #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.0480(0) _cell_length_b 13.0480(0) _cell_length_c 4.9480(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P -4' _symmetry_Int_Tables_number 81 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x,-z' '-x,-y,+z' '+y,-x,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0941 0.0355 0.6889 O2 O 0.2560 0.1424 0.5485 O3 O 0.2384 0.0791 0.0473 O4 O 0.2742 0.9461 0.6582 O5 O 0.7233 0.2426 0.8430 O6 O 0.8330 0.4100 0.7859 O7 O 0.5781 0.1792 0.5119 O8 O 0.5867 0.1098 0.0117 O9 O 0.5000 0.0000 0.3922 T1 Si 0.2152 0.0503 0.7368 T2 Si 0.8341 0.2870 0.7603 T3 Si 0.6532 0.1466 0.7557 T4 Si 0.5186 0.1147 0.2826 T5 Si 0.0000 0.0000 0.5000 avogadro-1.1.1/crystals/zeolites/TOL.cif0000644000175000001440000000446212250371054017355 0ustar marcususersdata_TOL #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.2790(0) _cell_length_b 12.2790(0) _cell_length_c 30.8690(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P -3 m 1' _symmetry_Int_Tables_number 164 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6902 0.9956 0.6242 O2 O 0.8875 0.1125 0.6753 O3 O 0.6590 0.0214 0.7070 O4 O 0.7377 0.8689 0.6827 O5 O 0.4012 0.2006 0.7618 O6 O 0.5562 0.1124 0.7604 O7 O 0.3267 0.9758 0.7913 O8 O 0.2708 0.1354 0.8256 O9 O 0.1062 0.2125 0.8288 O10 O 0.3117 0.3229 0.8765 O11 O 0.4465 0.2233 0.9028 O12 O 0.5335 0.0671 0.9108 O13 O 0.3469 0.0402 0.9598 O14 O 0.2337 0.1168 0.0139 O15 O 0.4598 0.2299 0.4073 O16 O 0.5290 0.0581 0.4081 O17 O 0.3475 0.0357 0.4595 O18 O 0.8816 0.1184 0.5123 T1 Si 0.7440 0.0001 0.6721 T2 Si 0.4118 0.0765 0.7548 T3 Si 0.2534 0.2561 0.8307 T4 Si 0.4098 0.0801 0.9125 T5 Si 0.4124 0.0823 0.4127 T6 Si 0.7467 0.0000 0.5000 T7 Si 0.2509 0.2509 0.0000 avogadro-1.1.1/crystals/zeolites/ETR.cif0000644000175000001440000000355412250371054017352 0ustar marcususersdata_ETR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.6340(0) _cell_length_b 20.6340(0) _cell_length_c 8.4260(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63 m c' _symmetry_Int_Tables_number 186 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.7345 0.0750 0.8383 O2 O 0.8326 0.1674 0.0470 O3 O 0.6969 0.1479 0.0370 O4 O 0.7154 0.0390 0.1408 O5 O 0.7238 0.2762 0.1582 O6 O 0.5854 0.1708 0.1019 O7 O 0.6611 0.1553 0.3351 O8 O 0.5827 0.9209 0.0844 O9 O 0.5988 0.0099 0.3195 O10 O 0.5353 0.0707 0.4887 T1 Si 0.7457 0.1073 0.0165 T2 Si 0.6668 0.1872 0.1581 T3 Si 0.6396 0.9739 0.2199 T4 Si 0.6137 0.0787 0.4335 avogadro-1.1.1/crystals/zeolites/SFG.cif0000644000175000001440000000546312250371054017340 0ustar marcususersdata_SFG #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 25.5320(0) _cell_length_b 12.5750(0) _cell_length_c 13.0660(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m a' _symmetry_Int_Tables_number 51 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,+z' '+x,-y,+z' '1/2-x,-y,+z' '-x,-y,-z' '1/2+x,-y,-z' '-x,+y,-z' '1/2+x,+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1603 0.1048 0.4309 O2 O 0.0719 0.1905 0.3704 O3 O 0.1579 0.3037 0.3707 O4 O 0.1452 0.1466 0.2367 O5 O 0.1982 0.2006 0.0751 O6 O 0.1694 0.0000 0.1010 O7 O 0.0989 0.1456 0.0570 O8 O 0.0760 0.1892 0.8655 O9 O 0.0247 0.1715 0.6921 O10 O 0.1217 0.1047 0.7027 O11 O 0.1016 0.3090 0.7082 O12 O 0.1416 0.5000 0.6868 O13 O 0.1729 0.3435 0.5674 O14 O 0.1986 0.3441 0.7630 O15 O 0.1912 0.0000 0.5923 O16 O 0.2500 0.0000 0.4277 O17 O 0.1981 0.0000 0.7913 O18 O 0.0000 0.1299 0.5000 O19 O 0.0298 0.0000 0.3531 O20 O 0.2500 0.3640 0.4352 O21 O 0.1718 0.5000 0.4341 O22 O 0.2500 0.3128 0.9360 O23 O 0.2500 0.1046 0.9313 O24 O 0.0000 0.1623 0.0000 O25 O 0.0564 0.0000 0.9386 O26 O 0.2500 0.5000 0.8510 T1 Si 0.1341 0.1869 0.3514 T2 Si 0.1529 0.1226 0.1167 T3 Si 0.0811 0.1933 0.7427 T4 Si 0.1540 0.3747 0.6810 T5 Si 0.1906 0.0000 0.4691 T6 Si 0.1577 0.0000 0.6967 T7 Si 0.0189 0.1222 0.3830 T8 Si 0.1880 0.3777 0.4524 T9 Si 0.2500 0.2069 0.0052 T10 Si 0.2500 0.0000 0.8608 T11 Si 0.0577 0.1247 0.9659 T12 Si 0.2500 0.3744 0.8280 avogadro-1.1.1/crystals/zeolites/LIO.cif0000644000175000001440000000360512250371054017340 0ustar marcususersdata_LIO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.2810(0) _cell_length_b 12.2810(0) _cell_length_c 15.6320(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P -6 m 2' _symmetry_Int_Tables_number 187 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3166 0.9770 0.0840 O2 O 0.2314 0.7686 0.1732 O3 O 0.3004 0.9830 0.2512 O4 O 0.4708 0.9416 0.1813 O5 O 0.2588 0.1294 0.3521 O6 O 0.1158 0.8842 0.3632 O7 O 0.3503 0.9941 0.4159 O8 O 0.3929 0.1964 0.5000 O9 O 0.5627 0.1255 0.5000 O10 O 0.2736 0.1368 0.0000 O11 O 0.1043 0.8957 0.0000 T1 Si 0.3299 0.9174 0.1724 T2 Si 0.2563 0.9975 0.3453 T3 Si 0.4145 0.0777 0.5000 T4 Si 0.2525 0.9966 0.0000 avogadro-1.1.1/crystals/zeolites/ITE.cif0000644000175000001440000000367712250371054017347 0ustar marcususersdata_ITE #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.7530(0) _cell_length_b 9.8040(0) _cell_length_c 20.0090(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2614 0.8673 0.1438 O2 O 0.3314 0.9350 0.2500 O3 O 0.2941 0.1262 0.1640 O4 O 0.3833 0.9457 0.1288 O5 O 0.0987 0.5000 0.0000 O6 O 0.0000 0.4222 0.0758 O7 O 0.0920 0.2447 0.0436 O8 O 0.3270 0.2763 0.0588 O9 O 0.2118 0.1581 0.0637 O10 O 0.1278 0.0000 0.0000 T1 Si 0.3175 0.9685 0.1717 T2 Si 0.0767 0.4032 0.0620 T3 Si 0.2677 0.2322 0.1076 T4 Si 0.1512 0.1565 0.0121 avogadro-1.1.1/crystals/zeolites/SFO.cif0000644000175000001440000000346312250371054017346 0ustar marcususersdata_SFO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 22.5850(0) _cell_length_b 13.5680(0) _cell_length_c 6.9710(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 99.0160(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O5 O 0.9282 0.0000 0.0467 O6 O 0.7841 0.1297 0.0825 O7 O 0.0000 0.1477 0.0000 O8 O 0.7208 0.0000 0.8562 O9 O 0.8410 0.1855 0.4239 O10 O 0.8145 0.6849 0.1437 O11 O 0.8975 0.1813 0.1215 O12 O 0.7810 0.8620 0.7044 O13 O 0.8987 0.1260 0.7607 O14 O 0.8344 0.0000 0.5295 T1 Si 0.8344 0.2028 0.1931 T2 Si 0.9311 0.8864 0.9822 T3 Si 0.7428 0.8870 0.8748 T4 Si 0.8388 0.1124 0.6046 avogadro-1.1.1/crystals/zeolites/YUG.cif0000644000175000001440000000306112250371054017355 0ustar marcususersdata_YUG #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 10.2480(0) _cell_length_b 13.7880(0) _cell_length_c 6.7820(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 111.5450(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2500 0.2500 0.5000 O2 O 0.3399 0.1685 0.2237 O3 O 0.2742 0.3535 0.1898 O4 O 0.5000 0.2935 0.5000 O5 O 0.3542 0.0000 0.0525 O6 O 0.5000 0.1481 0.0000 T1 Si 0.3411 0.2663 0.3538 T2 Si 0.3549 0.1156 0.0214 avogadro-1.1.1/crystals/zeolites/RTH.cif0000644000175000001440000000346312250371054017354 0ustar marcususersdata_RTH #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.7620(0) _cell_length_b 20.5300(0) _cell_length_c 9.9960(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 96.8970(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1595 0.2940 0.3234 O2 O 0.0000 0.3349 0.5000 O3 O 0.9706 0.3830 0.2551 O4 O 0.8967 0.2621 0.2959 O5 O 0.2541 0.0915 0.0804 O6 O 0.4379 0.0000 0.1501 O7 O 0.5000 0.0984 0.0000 O8 O 0.2949 0.3262 0.1211 O9 O 0.1767 0.2113 0.1257 O10 O 0.0000 0.1286 0.0000 T1 Si 0.0066 0.3183 0.3436 T2 Si 0.4157 0.0766 0.1214 T3 Si 0.2571 0.2673 0.2165 T4 Si 0.1589 0.1514 0.0212 avogadro-1.1.1/crystals/zeolites/JRY.cif0000644000175000001440000000336012250371054017357 0ustar marcususersdata_JRY #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.1650(0) _cell_length_b 9.2000(0) _cell_length_c 17.2940(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 21 21 21' _symmetry_Int_Tables_number 24 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '-x,1/2+y,1/2-z' '1/2-x,+y,-z' '1/2+x,1/2-y,-z' '+x,-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.7500 0.1914 0.0000 O2 O 0.5468 0.9834 0.0393 O3 O 0.7479 0.0923 0.1419 O4 O 0.5000 0.2500 0.0916 O5 O 0.0478 0.0099 0.1050 O6 O 0.2500 0.9055 0.0000 O7 O 0.0000 0.7500 0.0470 O8 O 0.0000 0.7500 0.3160 O9 O 0.9498 0.0000 0.2500 T1 Si 0.6348 0.1303 0.0683 T2 Si 0.0626 0.9119 0.0281 T3 Si 0.9360 0.9130 0.3303 avogadro-1.1.1/crystals/zeolites/SFF.cif0000644000175000001440000000431712250371054017334 0ustar marcususersdata_SFF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 11.4540(0) _cell_length_b 21.6950(0) _cell_length_c 7.2270(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 93.1540(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 21/m' _symmetry_Int_Tables_number 11 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,1/2+y,-z' '-x,-y,-z' '+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2250 0.9248 0.0097 O2 O 0.3203 0.9758 0.7250 O3 O 0.3589 0.0218 0.0614 O4 O 0.1523 0.0334 0.8902 O5 O 0.0286 0.6079 0.1544 O6 O 0.2241 0.6673 0.2451 O7 O 0.1226 0.6790 0.9101 O8 O 0.2735 0.7500 0.5031 O9 O 0.3266 0.6334 0.5650 O10 O 0.1071 0.6688 0.5473 O11 O 0.3857 0.5344 0.3834 O12 O 0.5221 0.5751 0.6608 O13 O 0.9341 0.6309 0.7423 O14 O 0.9785 0.7500 0.7128 O15 O 0.9475 0.9899 0.7722 O16 O 0.0677 0.0613 0.5559 O17 O 0.2495 0.0627 0.3482 T1 Si 0.2643 0.9890 0.9205 T2 Si 0.1502 0.6324 0.0804 T3 Si 0.2333 0.6798 0.4650 T4 Si 0.3882 0.5669 0.5839 T5 Si 0.0350 0.6820 0.7282 T6 Si 0.0347 0.0480 0.7656 T7 Si 0.1092 0.0663 0.3473 T8 Si 0.3679 0.0315 0.2828 avogadro-1.1.1/crystals/zeolites/VFI.cif0000644000175000001440000000342212250371054017336 0ustar marcususersdata_VFI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.2840(0) _cell_length_b 18.2840(0) _cell_length_c 8.5890(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m c m' _symmetry_Int_Tables_number 193 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,1/2+z' '-x+y,+y,1/2+z' '+x,+x-y,1/2+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,1/2-z' '+x-y,-y,1/2-z' '-x,-x+y,1/2-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1693 0.5847 0.0000 O2 O 0.2493 0.7507 0.0000 O3 O 0.0834 0.6648 0.9984 O4 O 0.1681 0.6667 0.7500 O5 O 0.5000 0.0000 0.0000 O6 O 0.5833 0.0000 0.2500 T1 Si 0.1677 0.6667 0.9372 T2 Si 0.5828 0.0000 0.0629 avogadro-1.1.1/crystals/zeolites/MSE.cif0000644000175000001440000000477012250371054017345 0ustar marcususersdata_MSE #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.2460(250) _cell_length_b 18.2460(170) _cell_length_c 20.5570(120) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(700) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 42/m n m' _symmetry_Int_Tables_number 136 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2+y,1/2-x,1/2+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '-x,-y,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2-y,1/2+x,1/2-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1287 0.7229 0.1941 O2 O 0.0553 0.7515 0.0873 O3 O 0.1800 0.6805 0.0811 O4 O 0.1792 0.8208 0.1113 O5 O 0.0538 0.7507 0.3005 O6 O 0.1844 0.6913 0.3088 O7 O 0.1716 0.8284 0.2723 O8 O 0.0831 0.2612 0.1230 O9 O 0.0493 0.2384 0.0000 O10 O 0.0318 0.1337 0.0862 O11 O 0.1728 0.1728 0.1859 O12 O 0.0789 0.2553 0.2504 O13 O 0.0333 0.1350 0.3085 O14 O 0.0609 0.2539 0.3771 O15 O 0.0000 0.0000 0.1210 O16 O 0.0813 0.0813 0.1978 O17 O 0.0000 0.0000 0.2754 O18 O 0.1765 0.1765 0.4087 O19 O 0.1006 0.2428 0.5000 T1 Si 0.1359 0.7444 0.1184 T2 Si 0.1344 0.7485 0.2689 T3 Si 0.0271 0.2208 0.0742 T4 Si 0.1316 0.2508 0.1877 T5 Si 0.0299 0.2232 0.3090 T6 Si 0.1295 0.2485 0.4261 T7 Si 0.0622 0.0622 0.1232 T8 Si 0.0622 0.0622 0.2724 avogadro-1.1.1/crystals/zeolites/AFG.cif0000644000175000001440000000355012250371054017311 0ustar marcususersdata_AFG #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.5480(0) _cell_length_b 12.5480(0) _cell_length_c 20.7890(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6608 0.6953 0.0606 O2 O 0.6680 0.6912 0.1868 O3 O 0.5303 0.7652 0.1288 O4 O 0.4685 0.5314 0.1253 O5 O 0.1013 0.8987 0.2500 O6 O 0.2684 0.1342 0.2500 O7 O 0.1159 0.8842 0.9819 T1 Si 0.5817 0.6706 0.1254 T2 Si 0.2466 0.9965 0.2500 T3 Si 0.2478 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/BIK.cif0000644000175000001440000000314712250371054017323 0ustar marcususersdata_BIK #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.5400(0) _cell_length_b 16.2220(0) _cell_length_c 5.2560(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2500 0.2500 0.5000 O2 O 0.3256 0.1143 0.2500 O3 O 0.0000 0.1714 0.2500 O4 O 0.5000 0.0000 0.0000 T1 Si 0.2065 0.1966 0.2500 T2 Si 0.5000 0.0571 0.2500 avogadro-1.1.1/crystals/zeolites/RHO.cif0000644000175000001440000000527012250371054017345 0ustar marcususersdata_RHO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.9190(0) _cell_length_b 14.9190(0) _cell_length_c 14.9190(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m 3 m' _symmetry_Int_Tables_number 229 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '+z,+x,+y' '1/2+z,1/2+x,1/2+y' '+y,+z,+x' '1/2+y,1/2+z,1/2+x' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '+z,+x,-y' '1/2+z,1/2+x,1/2-y' '+y,+z,-x' '1/2+y,1/2+z,1/2-x' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '-z,+x,+y' '1/2-z,1/2+x,1/2+y' '-y,+z,+x' '1/2-y,1/2+z,1/2+x' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '-z,+x,-y' '1/2-z,1/2+x,1/2-y' '-y,+z,-x' '1/2-y,1/2+z,1/2-x' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,+z,+y' '1/2+x,1/2+z,1/2+y' '+z,+y,+x' '1/2+z,1/2+y,1/2+x' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '+x,+z,-y' '1/2+x,1/2+z,1/2-y' '+z,+y,-x' '1/2+z,1/2+y,1/2-x' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '+x,-z,+y' '1/2+x,1/2-z,1/2+y' '+z,-y,+x' '1/2+z,1/2-y,1/2+x' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,-z,-y' '1/2+x,1/2-z,1/2-y' '+z,-y,-x' '1/2+z,1/2-y,1/2-x' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '-z,-x,-y' '1/2-z,1/2-x,1/2-y' '-y,-z,-x' '1/2-y,1/2-z,1/2-x' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '-z,-x,+y' '1/2-z,1/2-x,1/2+y' '-y,-z,+x' '1/2-y,1/2-z,1/2+x' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '+z,-x,-y' '1/2+z,1/2-x,1/2-y' '+y,-z,-x' '1/2+y,1/2-z,1/2-x' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '+z,-x,+y' '1/2+z,1/2-x,1/2+y' '+y,-z,+x' '1/2+y,1/2-z,1/2+x' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,-z,-y' '1/2-x,1/2-z,1/2-y' '-z,-y,-x' '1/2-z,1/2-y,1/2-x' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-z,+y' '1/2-x,1/2-z,1/2+y' '-z,-y,+x' '1/2-z,1/2-y,1/2+x' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,+z,-y' '1/2-x,1/2+z,1/2-y' '-z,+y,-x' '1/2-z,1/2+y,1/2-x' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,+z,+y' '1/2-x,1/2+z,1/2+y' '-z,+y,+x' '1/2-z,1/2+y,1/2+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3344 0.1298 0.3344 O2 O 0.2754 0.1193 0.5000 T1 Si 0.2500 0.1037 0.3963 avogadro-1.1.1/crystals/zeolites/PAR.cif0000644000175000001440000000342412250371054017336 0ustar marcususersdata_PAR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 21.5550(0) _cell_length_b 8.7610(0) _cell_length_c 9.3040(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 91.5500(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/c' _symmetry_Int_Tables_number 15 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0695 0.0181 0.2162 O2 O 0.0725 0.1719 0.4626 O3 O 0.1222 0.2883 0.2295 O4 O 0.1722 0.0363 0.0250 O5 O 0.2081 0.4669 0.4096 O6 O 0.2345 0.1550 0.3605 O7 O 0.2340 0.3599 0.1221 O8 O 0.0000 0.2632 0.2500 OH O 0.3523 0.2673 0.2918 T1 Si 0.0673 0.1832 0.2896 T2 Si 0.2398 0.0077 0.4621 T3 Si 0.1999 0.3162 0.2858 T4 Si 0.1161 0.0844 0.6006 avogadro-1.1.1/crystals/zeolites/APC.cif0000644000175000001440000000335012250371054017315 0ustar marcususersdata_APC #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.9920(0) _cell_length_b 19.3560(0) _cell_length_c 10.3920(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c a' _symmetry_Int_Tables_number 64 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,1/2-y,1/2+z' '1/2+x,-y,1/2+z' '-x,1/2-y,1/2+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,+y,1/2-z' '+x,1/2+y,1/2-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2462 0.5000 0.5000 O2 O 0.2500 0.4790 0.2500 O3 O 0.2067 0.3745 0.4079 O4 O 0.0000 0.4692 0.3780 O5 O 0.2500 0.2705 0.2500 O6 O 0.2500 0.2500 0.0000 O7 O 0.5000 0.2793 0.1196 T1 Si 0.1762 0.4553 0.3840 T2 Si 0.3238 0.2935 0.1154 avogadro-1.1.1/crystals/zeolites/AST.cif0000644000175000001440000001026312250371054017342 0ustar marcususersdata_AST #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.6240(0) _cell_length_b 13.6240(0) _cell_length_c 13.6240(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F m 3 m' _symmetry_Int_Tables_number 225 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '+z,+x,+y' '+z,1/2+x,1/2+y' '1/2+z,1/2+x,+y' '1/2+z,+x,1/2+y' '+y,+z,+x' '+y,1/2+z,1/2+x' '1/2+y,1/2+z,+x' '1/2+y,+z,1/2+x' '+x,+y,-z' '+x,1/2+y,1/2-z' '1/2+x,1/2+y,-z' '1/2+x,+y,1/2-z' '+z,+x,-y' '+z,1/2+x,1/2-y' '1/2+z,1/2+x,-y' '1/2+z,+x,1/2-y' '+y,+z,-x' '+y,1/2+z,1/2-x' '1/2+y,1/2+z,-x' '1/2+y,+z,1/2-x' '-x,+y,+z' '-x,1/2+y,1/2+z' '1/2-x,1/2+y,+z' '1/2-x,+y,1/2+z' '-z,+x,+y' '-z,1/2+x,1/2+y' '1/2-z,1/2+x,+y' '1/2-z,+x,1/2+y' '-y,+z,+x' '-y,1/2+z,1/2+x' '1/2-y,1/2+z,+x' '1/2-y,+z,1/2+x' '-x,+y,-z' '-x,1/2+y,1/2-z' '1/2-x,1/2+y,-z' '1/2-x,+y,1/2-z' '-z,+x,-y' '-z,1/2+x,1/2-y' '1/2-z,1/2+x,-y' '1/2-z,+x,1/2-y' '-y,+z,-x' '-y,1/2+z,1/2-x' '1/2-y,1/2+z,-x' '1/2-y,+z,1/2-x' '+y,+x,+z' '+y,1/2+x,1/2+z' '1/2+y,1/2+x,+z' '1/2+y,+x,1/2+z' '+x,+z,+y' '+x,1/2+z,1/2+y' '1/2+x,1/2+z,+y' '1/2+x,+z,1/2+y' '+z,+y,+x' '+z,1/2+y,1/2+x' '1/2+z,1/2+y,+x' '1/2+z,+y,1/2+x' '+y,+x,-z' '+y,1/2+x,1/2-z' '1/2+y,1/2+x,-z' '1/2+y,+x,1/2-z' '+x,+z,-y' '+x,1/2+z,1/2-y' '1/2+x,1/2+z,-y' '1/2+x,+z,1/2-y' '+z,+y,-x' '+z,1/2+y,1/2-x' '1/2+z,1/2+y,-x' '1/2+z,+y,1/2-x' '+y,-x,+z' '+y,1/2-x,1/2+z' '1/2+y,1/2-x,+z' '1/2+y,-x,1/2+z' '+x,-z,+y' '+x,1/2-z,1/2+y' '1/2+x,1/2-z,+y' '1/2+x,-z,1/2+y' '+z,-y,+x' '+z,1/2-y,1/2+x' '1/2+z,1/2-y,+x' '1/2+z,-y,1/2+x' '+y,-x,-z' '+y,1/2-x,1/2-z' '1/2+y,1/2-x,-z' '1/2+y,-x,1/2-z' '+x,-z,-y' '+x,1/2-z,1/2-y' '1/2+x,1/2-z,-y' '1/2+x,-z,1/2-y' '+z,-y,-x' '+z,1/2-y,1/2-x' '1/2+z,1/2-y,-x' '1/2+z,-y,1/2-x' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '-z,-x,-y' '-z,1/2-x,1/2-y' '1/2-z,1/2-x,-y' '1/2-z,-x,1/2-y' '-y,-z,-x' '-y,1/2-z,1/2-x' '1/2-y,1/2-z,-x' '1/2-y,-z,1/2-x' '-x,-y,+z' '-x,1/2-y,1/2+z' '1/2-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-z,-x,+y' '-z,1/2-x,1/2+y' '1/2-z,1/2-x,+y' '1/2-z,-x,1/2+y' '-y,-z,+x' '-y,1/2-z,1/2+x' '1/2-y,1/2-z,+x' '1/2-y,-z,1/2+x' '+x,-y,-z' '+x,1/2-y,1/2-z' '1/2+x,1/2-y,-z' '1/2+x,-y,1/2-z' '+z,-x,-y' '+z,1/2-x,1/2-y' '1/2+z,1/2-x,-y' '1/2+z,-x,1/2-y' '+y,-z,-x' '+y,1/2-z,1/2-x' '1/2+y,1/2-z,-x' '1/2+y,-z,1/2-x' '+x,-y,+z' '+x,1/2-y,1/2+z' '1/2+x,1/2-y,+z' '1/2+x,-y,1/2+z' '+z,-x,+y' '+z,1/2-x,1/2+y' '1/2+z,1/2-x,+y' '1/2+z,-x,1/2+y' '+y,-z,+x' '+y,1/2-z,1/2+x' '1/2+y,1/2-z,+x' '1/2+y,-z,1/2+x' '-y,-x,-z' '-y,1/2-x,1/2-z' '1/2-y,1/2-x,-z' '1/2-y,-x,1/2-z' '-x,-z,-y' '-x,1/2-z,1/2-y' '1/2-x,1/2-z,-y' '1/2-x,-z,1/2-y' '-z,-y,-x' '-z,1/2-y,1/2-x' '1/2-z,1/2-y,-x' '1/2-z,-y,1/2-x' '-y,-x,+z' '-y,1/2-x,1/2+z' '1/2-y,1/2-x,+z' '1/2-y,-x,1/2+z' '-x,-z,+y' '-x,1/2-z,1/2+y' '1/2-x,1/2-z,+y' '1/2-x,-z,1/2+y' '-z,-y,+x' '-z,1/2-y,1/2+x' '1/2-z,1/2-y,+x' '1/2-z,-y,1/2+x' '-y,+x,-z' '-y,1/2+x,1/2-z' '1/2-y,1/2+x,-z' '1/2-y,+x,1/2-z' '-x,+z,-y' '-x,1/2+z,1/2-y' '1/2-x,1/2+z,-y' '1/2-x,+z,1/2-y' '-z,+y,-x' '-z,1/2+y,1/2-x' '1/2-z,1/2+y,-x' '1/2-z,+y,1/2-x' '-y,+x,+z' '-y,1/2+x,1/2+z' '1/2-y,1/2+x,+z' '1/2-y,+x,1/2+z' '-x,+z,+y' '-x,1/2+z,1/2+y' '1/2-x,1/2+z,+y' '1/2-x,+z,1/2+y' '-z,+y,+x' '-z,1/2+y,1/2+x' '1/2-z,1/2+y,+x' '1/2-z,+y,1/2+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1365 0.1365 0.0000 O2 O 0.1818 0.1818 0.1818 T1 Si 0.1137 0.1137 0.1137 T2 Si 0.7500 0.2500 0.2500 avogadro-1.1.1/crystals/zeolites/BCT.cif0000644000175000001440000000333712250371054017327 0ustar marcususersdata_BCT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.9520(0) _cell_length_b 8.9520(0) _cell_length_c 5.2550(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2500 0.2500 0.2500 O2 O 0.0000 0.2079 0.0000 T1 Si 0.1769 0.1769 0.0000 avogadro-1.1.1/crystals/zeolites/SBN.cif0000644000175000001440000000322112250371054017331 0ustar marcususersdata_SBN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.1870(0) _cell_length_b 7.1870(0) _cell_length_c 13.8460(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8781 0.7563 0.3450 O2 O 0.5458 0.0916 0.2500 O3 O 0.0000 0.0000 0.0000 T1 Si 0.8036 0.6073 0.2500 T2 Si 0.0000 0.0000 0.3840 avogadro-1.1.1/crystals/zeolites/IWS.cif0000644000175000001440000000502012250371054017350 0ustar marcususersdata_IWS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 26.6890(0) _cell_length_b 26.6890(0) _cell_length_c 12.9080(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O11 O 0.0789 0.3234 0.0000 O12 O 0.0000 0.3341 0.1186 O13 O 0.0632 0.2603 0.1533 O14 O 0.0886 0.3536 0.1942 O15 O 0.0987 0.1701 0.1824 O16 O 0.0654 0.1958 0.0000 O17 O 0.0000 0.1852 0.1501 O18 O 0.0704 0.0704 0.5000 O19 O 0.0000 0.0697 0.3571 O20 O 0.0923 0.0923 0.3067 O21 O 0.0830 0.0830 0.1030 O22 O 0.0864 0.4509 0.1646 O23 O 0.0000 0.0700 0.0000 O24 O 0.0000 0.5000 0.3354 O25 O 0.0000 0.4424 0.5000 T1 Si 0.0580 0.3177 0.1165 T2 Si 0.0565 0.2022 0.1226 T3 Si 0.0000 0.4428 0.3755 T4 Si 0.0580 0.0580 0.3807 T5 Si 0.1115 0.1115 0.1954 T6 Si 0.0926 0.4074 0.2500 T7 Si 0.0591 0.0591 0.0000 avogadro-1.1.1/crystals/zeolites/AFX.cif0000644000175000001440000000347512250371054017340 0ustar marcususersdata_AFX #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.6740(0) _cell_length_b 13.6740(0) _cell_length_c 19.6950(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0980 0.1960 0.0920 O2 O 0.8797 0.1203 0.0986 O3 O 0.0000 0.2577 0.0000 O4 O 0.0232 0.3334 0.1250 O5 O 0.2354 0.4709 0.1577 O6 O 0.3325 0.4085 0.2500 O7 O 0.4537 0.5463 0.1518 T1 Si 0.0003 0.2268 0.0788 T2 Si 0.3329 0.4398 0.1712 avogadro-1.1.1/crystals/zeolites/LEV.cif0000644000175000001440000000405212250371054017340 0ustar marcususersdata_LEV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.1680(0) _cell_length_b 13.1680(0) _cell_length_c 22.5780(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'R -3 m' _symmetry_Int_Tables_number 166 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '2/3+x,1/3+y,1/3+z' '1/3+x,2/3+y,2/3+z' '-y,+x-y,+z' '2/3-y,1/3+x-y,1/3+z' '1/3-y,2/3+x-y,2/3+z' '-x+y,-x,+z' '2/3-x+y,1/3-x,1/3+z' '1/3-x+y,2/3-x,2/3+z' '-y,-x,+z' '2/3-y,1/3-x,1/3+z' '1/3-y,2/3-x,2/3+z' '-x+y,+y,+z' '2/3-x+y,1/3+y,1/3+z' '1/3-x+y,2/3+y,2/3+z' '+x,+x-y,+z' '2/3+x,1/3+x-y,1/3+z' '1/3+x,2/3+x-y,2/3+z' '-x,-y,-z' '2/3-x,1/3-y,1/3-z' '1/3-x,2/3-y,2/3-z' '+y,-x+y,-z' '2/3+y,1/3-x+y,1/3-z' '1/3+y,2/3-x+y,2/3-z' '+x-y,+x,-z' '2/3+x-y,1/3+x,1/3-z' '1/3+x-y,2/3+x,2/3-z' '+y,+x,-z' '2/3+y,1/3+x,1/3-z' '1/3+y,2/3+x,2/3-z' '+x-y,-y,-z' '2/3+x-y,1/3-y,1/3-z' '1/3+x-y,2/3-y,2/3-z' '-x,-x+y,-z' '2/3-x,1/3-x+y,1/3-z' '1/3-x,2/3-x+y,2/3-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0955 0.1910 0.0771 O2 O 0.0347 0.3448 0.1097 O3 O 0.8724 0.1276 0.0862 O4 O 0.0000 0.2678 0.0000 O5 O 0.1127 0.8873 0.4881 T1 Si 0.0005 0.2327 0.0683 T2 Si 0.2397 0.0000 0.5000 avogadro-1.1.1/crystals/zeolites/NAT.cif0000644000175000001440000000365212250371054017341 0ustar marcususersdata_NAT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.8500(0) _cell_length_b 13.8500(0) _cell_length_c 6.4200(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 41/a m d' _symmetry_Int_Tables_number 141 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '3/4-y,1/4+x,3/4+z' '1/4-y,3/4+x,1/4+z' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '3/4+y,3/4-x,1/4+z' '1/4+y,1/4-x,3/4+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '1/4+y,1/4+x,3/4+z' '3/4+y,3/4+x,1/4+z' '1/2+x,-y,1/2+z' '+x,1/2-y,+z' '1/4-y,3/4-x,1/4+z' '3/4-y,1/4-x,3/4+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '1/4+y,3/4-x,1/4-z' '3/4+y,1/4-x,3/4-z' '1/2+x,+y,1/2-z' '+x,1/2+y,-z' '1/4-y,1/4+x,3/4-z' '3/4-y,3/4+x,1/4-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '3/4-y,3/4-x,1/4-z' '1/4-y,1/4-x,3/4-z' '1/2-x,+y,1/2-z' '-x,1/2+y,-z' '3/4+y,1/4+x,3/4-z' '1/4+y,3/4+x,1/4-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.0000 0.0000 O2 O 0.0948 0.1552 0.8750 O3 O 0.0000 0.1552 0.2299 T1 Si 0.0000 0.1160 0.9938 T2 Si 0.0000 0.2500 0.3750 avogadro-1.1.1/crystals/zeolites/SFE.cif0000644000175000001440000000364112250371054017332 0ustar marcususersdata_SFE #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 11.4570(0) _cell_length_b 5.2550(0) _cell_length_c 13.9940(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 100.9600(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 21/m' _symmetry_Int_Tables_number 11 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,1/2+y,-z' '-x,-y,-z' '+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2847 0.2500 0.3040 O2 O 0.3056 0.5000 0.1455 O3 O 0.1087 0.2500 0.1536 O4 O 0.3674 0.2500 0.4940 O5 O 0.4792 0.0000 0.3757 O6 O 0.3475 0.2500 0.6794 O7 O 0.6564 0.2500 0.0081 O8 O 0.4940 0.2500 0.8485 O9 O 0.2915 0.5001 0.8265 O10 O 0.8757 0.2500 0.1090 O11 O 0.0000 0.0000 0.0000 T1 Si 0.2512 0.2500 0.1869 T2 Si 0.4024 0.2500 0.3878 T3 Si 0.4387 0.2500 0.6049 T4 Si 0.6347 0.2500 0.8910 T5 Si 0.3564 0.2500 0.7957 T6 Si 0.7370 0.2500 0.1156 T7 Si 0.9958 0.2500 0.0653 avogadro-1.1.1/crystals/zeolites/TSC.cif0000644000175000001440000001061212250371054017342 0ustar marcususersdata_TSC #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 30.7420(0) _cell_length_b 30.7420(0) _cell_length_c 30.7420(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F m 3 m' _symmetry_Int_Tables_number 225 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '+z,+x,+y' '+z,1/2+x,1/2+y' '1/2+z,1/2+x,+y' '1/2+z,+x,1/2+y' '+y,+z,+x' '+y,1/2+z,1/2+x' '1/2+y,1/2+z,+x' '1/2+y,+z,1/2+x' '+x,+y,-z' '+x,1/2+y,1/2-z' '1/2+x,1/2+y,-z' '1/2+x,+y,1/2-z' '+z,+x,-y' '+z,1/2+x,1/2-y' '1/2+z,1/2+x,-y' '1/2+z,+x,1/2-y' '+y,+z,-x' '+y,1/2+z,1/2-x' '1/2+y,1/2+z,-x' '1/2+y,+z,1/2-x' '-x,+y,+z' '-x,1/2+y,1/2+z' '1/2-x,1/2+y,+z' '1/2-x,+y,1/2+z' '-z,+x,+y' '-z,1/2+x,1/2+y' '1/2-z,1/2+x,+y' '1/2-z,+x,1/2+y' '-y,+z,+x' '-y,1/2+z,1/2+x' '1/2-y,1/2+z,+x' '1/2-y,+z,1/2+x' '-x,+y,-z' '-x,1/2+y,1/2-z' '1/2-x,1/2+y,-z' '1/2-x,+y,1/2-z' '-z,+x,-y' '-z,1/2+x,1/2-y' '1/2-z,1/2+x,-y' '1/2-z,+x,1/2-y' '-y,+z,-x' '-y,1/2+z,1/2-x' '1/2-y,1/2+z,-x' '1/2-y,+z,1/2-x' '+y,+x,+z' '+y,1/2+x,1/2+z' '1/2+y,1/2+x,+z' '1/2+y,+x,1/2+z' '+x,+z,+y' '+x,1/2+z,1/2+y' '1/2+x,1/2+z,+y' '1/2+x,+z,1/2+y' '+z,+y,+x' '+z,1/2+y,1/2+x' '1/2+z,1/2+y,+x' '1/2+z,+y,1/2+x' '+y,+x,-z' '+y,1/2+x,1/2-z' '1/2+y,1/2+x,-z' '1/2+y,+x,1/2-z' '+x,+z,-y' '+x,1/2+z,1/2-y' '1/2+x,1/2+z,-y' '1/2+x,+z,1/2-y' '+z,+y,-x' '+z,1/2+y,1/2-x' '1/2+z,1/2+y,-x' '1/2+z,+y,1/2-x' '+y,-x,+z' '+y,1/2-x,1/2+z' '1/2+y,1/2-x,+z' '1/2+y,-x,1/2+z' '+x,-z,+y' '+x,1/2-z,1/2+y' '1/2+x,1/2-z,+y' '1/2+x,-z,1/2+y' '+z,-y,+x' '+z,1/2-y,1/2+x' '1/2+z,1/2-y,+x' '1/2+z,-y,1/2+x' '+y,-x,-z' '+y,1/2-x,1/2-z' '1/2+y,1/2-x,-z' '1/2+y,-x,1/2-z' '+x,-z,-y' '+x,1/2-z,1/2-y' '1/2+x,1/2-z,-y' '1/2+x,-z,1/2-y' '+z,-y,-x' '+z,1/2-y,1/2-x' '1/2+z,1/2-y,-x' '1/2+z,-y,1/2-x' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '-z,-x,-y' '-z,1/2-x,1/2-y' '1/2-z,1/2-x,-y' '1/2-z,-x,1/2-y' '-y,-z,-x' '-y,1/2-z,1/2-x' '1/2-y,1/2-z,-x' '1/2-y,-z,1/2-x' '-x,-y,+z' '-x,1/2-y,1/2+z' '1/2-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-z,-x,+y' '-z,1/2-x,1/2+y' '1/2-z,1/2-x,+y' '1/2-z,-x,1/2+y' '-y,-z,+x' '-y,1/2-z,1/2+x' '1/2-y,1/2-z,+x' '1/2-y,-z,1/2+x' '+x,-y,-z' '+x,1/2-y,1/2-z' '1/2+x,1/2-y,-z' '1/2+x,-y,1/2-z' '+z,-x,-y' '+z,1/2-x,1/2-y' '1/2+z,1/2-x,-y' '1/2+z,-x,1/2-y' '+y,-z,-x' '+y,1/2-z,1/2-x' '1/2+y,1/2-z,-x' '1/2+y,-z,1/2-x' '+x,-y,+z' '+x,1/2-y,1/2+z' '1/2+x,1/2-y,+z' '1/2+x,-y,1/2+z' '+z,-x,+y' '+z,1/2-x,1/2+y' '1/2+z,1/2-x,+y' '1/2+z,-x,1/2+y' '+y,-z,+x' '+y,1/2-z,1/2+x' '1/2+y,1/2-z,+x' '1/2+y,-z,1/2+x' '-y,-x,-z' '-y,1/2-x,1/2-z' '1/2-y,1/2-x,-z' '1/2-y,-x,1/2-z' '-x,-z,-y' '-x,1/2-z,1/2-y' '1/2-x,1/2-z,-y' '1/2-x,-z,1/2-y' '-z,-y,-x' '-z,1/2-y,1/2-x' '1/2-z,1/2-y,-x' '1/2-z,-y,1/2-x' '-y,-x,+z' '-y,1/2-x,1/2+z' '1/2-y,1/2-x,+z' '1/2-y,-x,1/2+z' '-x,-z,+y' '-x,1/2-z,1/2+y' '1/2-x,1/2-z,+y' '1/2-x,-z,1/2+y' '-z,-y,+x' '-z,1/2-y,1/2+x' '1/2-z,1/2-y,+x' '1/2-z,-y,1/2+x' '-y,+x,-z' '-y,1/2+x,1/2-z' '1/2-y,1/2+x,-z' '1/2-y,+x,1/2-z' '-x,+z,-y' '-x,1/2+z,1/2-y' '1/2-x,1/2+z,-y' '1/2-x,+z,1/2-y' '-z,+y,-x' '-z,1/2+y,1/2-x' '1/2-z,1/2+y,-x' '1/2-z,+y,1/2-x' '-y,+x,+z' '-y,1/2+x,1/2+z' '1/2-y,1/2+x,+z' '1/2-y,+x,1/2+z' '-x,+z,+y' '-x,1/2+z,1/2+y' '1/2-x,1/2+z,+y' '1/2-x,+z,1/2+y' '-z,+y,+x' '-z,1/2+y,1/2+x' '1/2-z,1/2+y,+x' '1/2-z,+y,1/2+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0691 0.1508 0.2334 O2 O 0.2112 0.2112 0.1253 O3 O 0.2092 0.2092 0.4058 O4 O 0.1487 0.1487 0.2647 O5 O 0.1489 0.1489 0.0558 O6 O 0.0773 0.0773 0.1904 O7 O 0.1116 0.2019 0.0000 T1 Si 0.1093 0.1799 0.2501 T2 Si 0.0506 0.1222 0.1936 avogadro-1.1.1/crystals/zeolites/GME.cif0000644000175000001440000000322112250371054017317 0ustar marcususersdata_GME #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.6720(0) _cell_length_b 13.6720(0) _cell_length_c 9.8500(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5688 0.1375 0.0656 O2 O 0.3565 0.0000 0.0000 O3 O 0.4094 0.0752 0.2500 O4 O 0.4259 0.2129 0.0536 T1 Si 0.4403 0.1064 0.0924 avogadro-1.1.1/crystals/zeolites/CLO.cif0000644000175000001440000000465012250371054017333 0ustar marcususersdata_CLO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 25.8400(0) _cell_length_b 25.8400(0) _cell_length_c 25.8400(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m 3 m' _symmetry_Int_Tables_number 221 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+z,+x,+y' '+y,+z,+x' '+x,+y,-z' '+z,+x,-y' '+y,+z,-x' '-x,+y,+z' '-z,+x,+y' '-y,+z,+x' '-x,+y,-z' '-z,+x,-y' '-y,+z,-x' '+y,+x,+z' '+x,+z,+y' '+z,+y,+x' '+y,+x,-z' '+x,+z,-y' '+z,+y,-x' '+y,-x,+z' '+x,-z,+y' '+z,-y,+x' '+y,-x,-z' '+x,-z,-y' '+z,-y,-x' '-x,-y,-z' '-z,-x,-y' '-y,-z,-x' '-x,-y,+z' '-z,-x,+y' '-y,-z,+x' '+x,-y,-z' '+z,-x,-y' '+y,-z,-x' '+x,-y,+z' '+z,-x,+y' '+y,-z,+x' '-y,-x,-z' '-x,-z,-y' '-z,-y,-x' '-y,-x,+z' '-x,-z,+y' '-z,-y,+x' '-y,+x,-z' '-x,+z,-y' '-z,+y,-x' '-y,+x,+z' '-x,+z,+y' '-z,+y,+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1692 0.7355 0.5000 O2 O 0.2251 0.7749 0.4246 O3 O 0.2151 0.6740 0.4330 O4 O 0.1359 0.7311 0.4040 O5 O 0.3155 0.6845 0.5793 O6 O 0.2716 0.5937 0.5937 O7 O 0.2792 0.6322 0.5000 O8 O 0.1012 0.6609 0.6609 O9 O 0.0509 0.7487 0.6491 O10 O 0.0509 0.6797 0.5744 O11 O 0.0000 0.5937 0.4063 O12 O 0.0000 0.6325 0.5000 O13 O 0.0000 0.7363 0.7363 O14 O 0.0000 0.6898 0.8268 T1 Si 0.1863 0.7288 0.4405 T2 Si 0.2703 0.6461 0.5601 T3 Si 0.0847 0.7051 0.6202 T4 Si 0.0000 0.6465 0.4393 T5 Si 0.0000 0.6811 0.7651 avogadro-1.1.1/crystals/zeolites/DFO.cif0000644000175000001440000000456212250371054017330 0ustar marcususersdata_DFO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 21.9950(0) _cell_length_b 21.9950(0) _cell_length_c 21.1590(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 6/m m m' _symmetry_Int_Tables_number 191 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,+z' '+y,-x+y,+z' '+x-y,+x,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1290 0.2579 0.7404 O2 O 0.1067 0.3577 0.6988 O3 O 0.0000 0.2324 0.7236 O4 O 0.0764 0.3142 0.8166 O5 O 0.6490 0.5190 0.2628 O6 O 0.6762 0.5437 0.3841 O7 O 0.7664 0.5328 0.3097 O8 O 0.1042 0.4388 0.8552 O9 O 0.0000 0.4168 0.7799 O10 O 0.0897 0.5449 0.8178 O11 O 0.0875 0.4516 0.5000 O12 O 0.0992 0.5496 0.5783 O13 O 0.0000 0.4185 0.5954 O14 O 0.7990 0.5981 0.1369 O15 O 0.7473 0.6565 0.0620 O16 O 0.0000 0.2310 0.0000 O17 O 0.1343 0.2686 0.0000 T1 Si 0.0780 0.2907 0.7449 T2 Si 0.7102 0.5592 0.3144 T3 Si 0.0808 0.4703 0.7975 T4 Si 0.0797 0.4689 0.5725 T5 Si 0.7435 0.6253 0.1316 T6 Si 0.0791 0.2965 0.0000 avogadro-1.1.1/crystals/zeolites/SAS.cif0000644000175000001440000000354012250371054017341 0ustar marcususersdata_SAS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.3490(0) _cell_length_b 14.3490(0) _cell_length_c 10.3980(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O3 O 0.2418 0.0000 0.0000 O4 O 0.1690 0.1690 0.0000 O5 O 0.5000 0.8745 0.7865 O6 O 0.3261 0.8629 0.8723 T1 Si 0.2662 0.8893 0.0000 T2 Si 0.6090 0.8910 0.7500 avogadro-1.1.1/crystals/zeolites/OWE.cif0000644000175000001440000000310512250371054017342 0ustar marcususersdata_OWE #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.3550(0) _cell_length_b 7.1660(0) _cell_length_c 9.0800(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m a' _symmetry_Int_Tables_number 51 loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,+z' '+x,-y,+z' '1/2-x,-y,+z' '-x,-y,-z' '1/2+x,-y,-z' '-x,+y,-z' '1/2+x,+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0794 0.3166 0.2168 O2 O 0.1122 0.0000 0.3528 O3 O 0.1234 0.3165 0.4974 O4 O 0.2500 0.2324 0.2979 O5 O 0.0766 0.5000 0.7378 O6 O 0.2500 0.5000 0.6474 O7 O 0.0000 0.5000 0.0000 T1 Si 0.1416 0.2162 0.3413 T2 Si 0.1429 0.5000 0.5949 T3 Si 0.0206 0.5000 0.1739 avogadro-1.1.1/crystals/zeolites/SBE.cif0000644000175000001440000000441612250371054017327 0ustar marcususersdata_SBE #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.5340(0) _cell_length_b 18.5340(0) _cell_length_c 27.1340(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2682 0.6024 0.1851 O2 O 0.2353 0.5959 0.2793 O3 O 0.3232 0.5000 0.2406 O4 O 0.3659 0.6341 0.2521 O5 O 0.0979 0.2688 0.4083 O6 O 0.1348 0.1348 0.4277 O7 O 0.0000 0.1760 0.4385 O8 O 0.0992 0.2224 0.5000 O9 O 0.3181 0.0000 0.3468 O10 O 0.3647 0.1335 0.3410 O11 O 0.3574 0.0000 0.1878 O12 O 0.3999 0.1001 0.2500 T1 Si 0.2982 0.5832 0.2393 T2 Si 0.0830 0.2005 0.4437 T3 Si 0.2958 0.0835 0.3528 T4 Si 0.3471 0.0828 0.2044 avogadro-1.1.1/crystals/zeolites/CDO.cif0000644000175000001440000000355112250371054017322 0ustar marcususersdata_CDO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.5570(0) _cell_length_b 18.7150(0) _cell_length_c 14.0990(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2500 0.2500 0.0000 O2 O 0.1744 0.1157 0.0016 O3 O 0.5000 0.1555 0.0428 O4 O 0.2390 0.1903 0.1600 O5 O 0.3277 0.3118 0.2500 O6 O 0.0000 0.2654 0.2500 O7 O 0.0000 0.0000 0.5000 O8 O 0.0000 0.0875 0.6565 T1 Si 0.2941 0.1758 0.0516 T2 Si 0.2048 0.2415 0.2500 T3 Si 0.0000 0.0795 0.5429 T4 Si 0.0000 0.8626 0.2500 avogadro-1.1.1/crystals/zeolites/ITV.cif0000644000175000001440000000522212250371054017354 0ustar marcususersdata_ITV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 26.3100(0) _cell_length_b 26.3100(0) _cell_length_c 26.3100(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 41 3 2' _symmetry_Int_Tables_number 213 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+z,+x,+y' '+y,+z,+x' '1/4-y,3/4+x,1/4+z' '1/4-x,3/4+z,1/4+y' '1/4-z,3/4+y,1/4+x' '1/2+x,1/2-y,-z' '1/2+z,1/2-x,-y' '1/2+y,1/2-z,-x' '3/4-y,3/4-x,3/4-z' '3/4-x,3/4-z,3/4-y' '3/4-z,3/4-y,3/4-x' '-x,1/2+y,1/2-z' '-z,1/2+x,1/2-y' '-y,1/2+z,1/2-x' '3/4+y,1/4+x,1/4-z' '3/4+x,1/4+z,1/4-y' '3/4+z,1/4+y,1/4-x' '1/2-x,-y,1/2+z' '1/2-z,-x,1/2+y' '1/2-y,-z,1/2+x' '1/4+y,1/4-x,3/4+z' '1/4+x,1/4-z,3/4+y' '1/4+z,1/4-y,3/4+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0188 0.2026 0.0105 O2 O 0.0304 0.1734 0.1055 O3 O 0.0430 0.1073 0.0316 O4 O 0.1095 0.1808 0.0453 O5 O 0.1861 0.1673 0.1080 O6 O 0.2023 0.2001 0.0149 O7 O 0.2305 0.2954 0.0267 O8 O 0.2943 0.2212 0.0474 O9 O 0.2090 0.3896 0.0530 O10 O 0.1378 0.3194 0.0553 O11 O 0.2117 0.3183 0.1223 O12 O 0.0660 0.3160 0.1250 O13 O 0.0671 0.3899 0.0580 O14 O 0.0441 0.4838 0.0336 O15 O 0.1382 0.4602 0.0556 O16 O 0.2097 0.4597 0.1250 O17 O 0.2010 0.2010 0.2010 O18 O 0.0110 0.0110 0.0110 O19 O 0.2344 0.4870 0.0282 T1 Si 0.0502 0.1658 0.0480 T2 Si 0.1679 0.1633 0.0497 T3 Si 0.2490 0.2394 0.0105 T4 Si 0.1973 0.3306 0.0641 T5 Si 0.0787 0.3305 0.0669 T6 Si 0.0796 0.4487 0.0690 T7 Si 0.1973 0.4482 0.0662 T8 Si 0.0490 0.0490 0.0490 T9 Si 0.1657 0.1657 0.1657 T10 Si 0.2362 0.2362 0.2362 avogadro-1.1.1/crystals/zeolites/MEI.cif0000644000175000001440000000335112250371054017325 0ustar marcususersdata_MEI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.1140(0) _cell_length_b 13.1140(0) _cell_length_c 15.5630(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m' _symmetry_Int_Tables_number 176 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8030 0.2269 0.5039 O2 O 0.6496 0.2101 0.3881 O3 O 0.6461 0.0192 0.4444 O4 O 0.5800 0.1358 0.5458 O5 O 0.4498 0.1563 0.6655 O6 O 0.5645 0.3563 0.7500 O7 O 0.6667 0.3333 0.2500 T1 Si 0.6696 0.1479 0.4705 T2 Si 0.4519 0.1174 0.5677 T3 Si 0.5265 0.2189 0.7500 T4 Si 0.6667 0.3333 0.3533 avogadro-1.1.1/crystals/zeolites/OSO.cif0000644000175000001440000000270412250371054017354 0ustar marcususersdata_OSO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 10.1010(0) _cell_length_b 10.1010(0) _cell_length_c 7.6470(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 62 2 2' _symmetry_Int_Tables_number 180 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,2/3+z' '-x+y,-x,1/3+z' '+y,+x,2/3-z' '+x-y,-y,-z' '-x,-x+y,1/3-z' '-x,-y,+z' '+y,-x+y,2/3+z' '+x-y,+x,1/3+z' '-y,-x,2/3-z' '-x+y,+y,-z' '+x,+x-y,1/3-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3171 0.6829 0.8333 O2 O 0.4643 0.3570 0.7095 T1 Si 0.2865 0.5731 0.0000 T2 Si 0.0000 0.5000 0.1667 avogadro-1.1.1/crystals/zeolites/ESV.cif0000644000175000001440000000410512250371054017346 0ustar marcususersdata_ESV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.6860(0) _cell_length_b 12.2260(0) _cell_length_c 22.8360(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P n m a' _symmetry_Int_Tables_number 62 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2957 0.7500 0.8502 O2 O 0.2484 0.9183 0.9190 O3 O 0.4970 0.8856 0.8764 O4 O 0.2966 0.9492 0.8068 O5 O 0.6831 0.7500 0.5149 O6 O 0.6848 0.9480 0.4702 O7 O 0.4925 0.8921 0.5457 O8 O 0.9625 0.4563 0.8735 O9 O 0.7653 0.6003 0.8918 O10 O 0.1628 0.7500 0.6783 O11 O 0.1549 0.5425 0.7088 O12 O 0.9584 0.2500 0.8408 O13 O 0.3545 0.4011 0.7280 O14 O 0.1231 0.3891 0.7881 T1 Si 0.3342 0.8758 0.8630 T2 Si 0.6522 0.8770 0.5279 T3 Si 0.8839 0.5279 0.9223 T4 Si 0.1453 0.8735 0.6548 T5 Si 0.9744 0.1256 0.8186 T6 Si 0.2325 0.4708 0.7580 avogadro-1.1.1/crystals/zeolites/BEC.cif0000644000175000001440000000334512250371054017307 0ustar marcususersdata_BEC #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.7700(0) _cell_length_b 12.7700(0) _cell_length_c 12.9770(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 42/m m c' _symmetry_Int_Tables_number 131 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x,1/2+z' '-x,-y,+z' '+y,-x,1/2+z' '-x,+y,+z' '+y,+x,1/2+z' '+x,-y,+z' '-y,-x,1/2+z' '-x,-y,-z' '+y,-x,1/2-z' '+x,+y,-z' '-y,+x,1/2-z' '+x,-y,-z' '-y,-x,1/2-z' '-x,+y,-z' '+y,+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.6199 0.3564 O2 O 0.8593 0.6567 0.5000 O3 O 0.8339 0.5000 0.3710 O4 O 0.8163 0.6942 0.6954 O5 O 0.0000 0.8804 0.0000 O6 O 0.0000 0.0000 0.1645 O7 O 0.8973 0.1797 0.1644 T1 Si 0.8770 0.6180 0.6168 T2 Si 0.8070 0.8070 0.2500 T3 Si 0.0000 0.1192 0.1238 avogadro-1.1.1/crystals/zeolites/AFS.cif0000644000175000001440000000355012250371054017325 0ustar marcususersdata_AFS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.0580(0) _cell_length_b 13.0580(0) _cell_length_c 25.9190(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m c m' _symmetry_Int_Tables_number 193 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,1/2+z' '-x+y,+y,1/2+z' '+x,+x-y,1/2+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,1/2-z' '+x-y,-y,1/2-z' '-x,-x+y,1/2-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5804 0.4387 0.1776 O2 O 0.4184 0.2217 0.1535 O3 O 0.5670 0.3613 0.0828 O4 O 0.4017 0.4017 0.1183 O5 O 0.3313 0.0000 0.1822 O6 O 0.4373 0.1713 0.2500 O7 O 0.6667 0.3333 0.0000 T1 Si 0.4918 0.3559 0.1330 T2 Si 0.4370 0.1337 0.1908 T3 Si 0.6667 0.3333 0.0620 avogadro-1.1.1/crystals/zeolites/CAS.cif0000644000175000001440000000335012250371054017320 0ustar marcususersdata_CAS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 5.2560(0) _cell_length_b 14.1320(0) _cell_length_c 17.2270(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.1730 0.1159 O2 O 0.2500 0.2500 0.0000 O3 O 0.0000 0.3576 0.0981 O4 O 0.7500 0.0131 0.1318 O5 O 0.0000 0.0851 0.2500 O6 O 0.5000 0.0000 0.0000 T1 Si 0.0000 0.2576 0.0534 T2 Si 0.0000 0.0709 0.1574 T3 Si 0.5000 0.9711 0.0903 avogadro-1.1.1/crystals/zeolites/MRE.cif0000644000175000001440000000367712250371054017351 0ustar marcususersdata_MRE #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.2570(0) _cell_length_b 14.5620(0) _cell_length_c 20.3140(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m m a' _symmetry_Int_Tables_number 74 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,1/2+y,-z' '1/2+x,+y,1/2-z' '+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5000 0.7500 0.0119 O2 O 0.0000 0.7500 0.1502 O3 O 0.5000 0.9674 0.1698 O4 O 0.0000 0.9133 0.9539 O5 O 0.1942 0.7500 0.0476 O6 O 0.2765 0.8400 0.1546 O7 O 0.2500 0.9615 0.2500 O8 O 0.2102 0.0126 0.1279 O9 O 0.2543 0.0000 0.0000 O10 O 0.2875 0.8402 0.9414 T1 Si 0.3098 0.9448 0.1756 T2 Si 0.1884 0.9355 0.9414 T3 Si 0.3159 0.7500 0.9857 T4 Si 0.1863 0.7500 0.1268 avogadro-1.1.1/crystals/zeolites/EPI.cif0000644000175000001440000000333512250371054017332 0ustar marcususersdata_EPI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.1270(0) _cell_length_b 17.4800(0) _cell_length_c 10.3770(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 124.9390(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8184 0.1141 0.1264 O2 O 0.0390 0.0000 0.1921 O3 O 0.1647 0.1376 0.3007 O4 O 0.0000 0.1091 0.0000 O5 O 0.2784 0.2692 0.2641 O6 O 0.2500 0.2500 0.5000 O7 O 0.5000 0.1777 0.5000 O8 O 0.5000 0.1749 0.0000 O9 O 0.7500 0.2500 0.0000 T1 Si 0.0049 0.0900 0.1541 T2 Si 0.2976 0.2087 0.3899 T3 Si 0.7107 0.1925 0.0977 avogadro-1.1.1/crystals/zeolites/CFI.cif0000644000175000001440000000362412250371054017317 0ustar marcususersdata_CFI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.9610(0) _cell_length_b 5.2640(0) _cell_length_c 25.9670(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m m a' _symmetry_Int_Tables_number 74 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O6 O 0.0000 0.2500 0.0571 O7 O 0.0940 0.2500 0.1679 O8 O 0.0000 0.5001 0.2389 O9 O 0.1233 0.0000 0.0000 O10 O 0.1851 0.2500 0.0806 O11 O 0.2500 0.7500 0.2500 O12 O 0.0950 0.7500 0.3093 O13 O 0.2542 0.5006 0.1613 T1 Si 0.1076 0.2500 0.0346 T2 Si 0.0000 0.7500 0.2743 T3 Si 0.2896 0.7500 0.1919 T4 Si 0.0000 0.2500 0.2035 T5 Si 0.1987 0.2500 0.1421 avogadro-1.1.1/crystals/zeolites/JBW.cif0000644000175000001440000000272312250371054017337 0ustar marcususersdata_JBW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 5.2560(0) _cell_length_b 7.4500(0) _cell_length_c 8.1590(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m a' _symmetry_Int_Tables_number 51 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,+z' '+x,-y,+z' '1/2-x,-y,+z' '-x,-y,-z' '1/2+x,-y,-z' '-x,+y,-z' '1/2+x,+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.2612 0.0000 O2 O 0.2500 0.0000 0.1455 O3 O 0.2500 0.3235 0.2728 O4 O 0.5000 0.5000 0.5000 T1 Si 0.2500 0.2111 0.1042 T2 Si 0.2500 0.5000 0.3865 avogadro-1.1.1/crystals/zeolites/EDI.cif0000644000175000001440000000263412250371054017317 0ustar marcususersdata_EDI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 6.9260(0) _cell_length_b 6.9260(0) _cell_length_c 6.4100(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P -4 m 2' _symmetry_Int_Tables_number 115 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x,-z' '-x,-y,+z' '+y,-x,-z' '-x,+y,+z' '+y,+x,-z' '+x,-y,+z' '-y,-x,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1898 0.0000 0.3550 O2 O 0.1897 0.1897 0.0000 O3 O 0.5000 0.0000 0.1183 T1 Si 0.2679 0.0000 0.1184 T2 Si 0.0000 0.0000 0.5000 avogadro-1.1.1/crystals/zeolites/FRA.cif0000644000175000001440000000420612250371054017323 0ustar marcususersdata_FRA #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.9160(0) _cell_length_b 12.9160(0) _cell_length_c 26.5430(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P -3 m 1' _symmetry_Int_Tables_number 164 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O7 O 0.4275 0.2138 0.1064 O8 O 0.8806 0.7613 0.2932 O9 O 0.2367 0.1183 0.5068 O10 O 0.6654 0.9760 0.6504 O11 O 0.3347 0.3108 0.4507 O12 O 0.3569 0.3568 0.8503 O13 O 0.4449 0.2224 0.4001 O14 O 0.3339 0.3104 0.0495 O15 O 0.4528 0.5472 0.2066 O16 O 0.5394 0.0788 0.4001 O17 O 0.3331 0.3095 0.7503 O18 O 0.8803 0.7607 0.6931 O19 O 0.4279 0.2140 0.8071 O20 O 0.9052 0.4526 0.0930 O21 O 0.1182 0.2364 0.0068 T1 Si 0.4160 0.3334 0.0997 T2 Si 0.4160 0.3333 0.8003 T3 Si 0.4152 0.3314 0.4001 T4 Si 0.2500 0.2500 0.0000 T5 Si 0.2508 0.2508 0.7001 T6 Si 0.2502 0.2502 0.5000 avogadro-1.1.1/crystals/zeolites/AEN.cif0000644000175000001440000000355112250371054017320 0ustar marcususersdata_AEN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.5310(0) _cell_length_b 13.3550(0) _cell_length_c 9.6360(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c a' _symmetry_Int_Tables_number 64 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,1/2-y,1/2+z' '1/2+x,-y,1/2+z' '-x,1/2-y,1/2+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,+y,1/2-z' '+x,1/2+y,1/2-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1102 0.5230 0.2274 O2 O 0.1000 0.5000 0.5000 O3 O 0.0000 0.5990 0.3630 O4 O 0.1292 0.6758 0.3951 O5 O 0.1765 0.6467 0.8176 O6 O 0.2500 0.4873 0.7500 O7 O 0.1894 0.5000 0.0000 O8 O 0.2500 0.7500 0.0000 O9 O 0.2500 0.6897 0.2500 T1 Si 0.0847 0.5736 0.3712 T2 Si 0.1817 0.5271 0.8380 T3 Si 0.3004 0.7424 0.1349 avogadro-1.1.1/crystals/zeolites/AFT.cif0000644000175000001440000000375112250371054017331 0ustar marcususersdata_AFT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.6910(0) _cell_length_b 13.6910(0) _cell_length_c 29.4490(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2582 0.0012 0.2500 O2 O 0.2415 0.1207 0.1837 O3 O 0.3070 0.9741 0.1664 O4 O 0.0965 0.9035 0.1893 O5 O 0.3347 0.4121 0.4168 O6 O 0.2132 0.4263 0.4828 O7 O 0.3559 0.3559 0.5000 O8 O 0.4313 0.5687 0.4795 O9 O 0.4742 0.2371 0.6446 O10 O 0.5458 0.4542 0.6501 T1 Si 0.2257 0.9998 0.1974 T2 Si 0.3339 0.4409 0.4697 T3 Si 0.4413 0.3332 0.6361 avogadro-1.1.1/crystals/zeolites/ACO.cif0000644000175000001440000000527012250371054017317 0ustar marcususersdata_ACO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.9050(0) _cell_length_b 9.9050(0) _cell_length_c 9.9050(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m 3 m' _symmetry_Int_Tables_number 229 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '+z,+x,+y' '1/2+z,1/2+x,1/2+y' '+y,+z,+x' '1/2+y,1/2+z,1/2+x' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '+z,+x,-y' '1/2+z,1/2+x,1/2-y' '+y,+z,-x' '1/2+y,1/2+z,1/2-x' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '-z,+x,+y' '1/2-z,1/2+x,1/2+y' '-y,+z,+x' '1/2-y,1/2+z,1/2+x' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '-z,+x,-y' '1/2-z,1/2+x,1/2-y' '-y,+z,-x' '1/2-y,1/2+z,1/2-x' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,+z,+y' '1/2+x,1/2+z,1/2+y' '+z,+y,+x' '1/2+z,1/2+y,1/2+x' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '+x,+z,-y' '1/2+x,1/2+z,1/2-y' '+z,+y,-x' '1/2+z,1/2+y,1/2-x' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '+x,-z,+y' '1/2+x,1/2-z,1/2+y' '+z,-y,+x' '1/2+z,1/2-y,1/2+x' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,-z,-y' '1/2+x,1/2-z,1/2-y' '+z,-y,-x' '1/2+z,1/2-y,1/2-x' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '-z,-x,-y' '1/2-z,1/2-x,1/2-y' '-y,-z,-x' '1/2-y,1/2-z,1/2-x' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '-z,-x,+y' '1/2-z,1/2-x,1/2+y' '-y,-z,+x' '1/2-y,1/2-z,1/2+x' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '+z,-x,-y' '1/2+z,1/2-x,1/2-y' '+y,-z,-x' '1/2+y,1/2-z,1/2-x' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '+z,-x,+y' '1/2+z,1/2-x,1/2+y' '+y,-z,+x' '1/2+y,1/2-z,1/2+x' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,-z,-y' '1/2-x,1/2-z,1/2-y' '-z,-y,-x' '1/2-z,1/2-y,1/2-x' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-z,+y' '1/2-x,1/2-z,1/2+y' '-z,-y,+x' '1/2-z,1/2-y,1/2+x' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,+z,-y' '1/2-x,1/2+z,1/2-y' '-z,+y,-x' '1/2-z,1/2+y,1/2-x' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,+z,+y' '1/2-x,1/2+z,1/2+y' '-z,+y,+x' '1/2-z,1/2+y,1/2+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2500 0.2500 0.2500 O2 O 0.1877 0.1877 0.0000 T1 Si 0.1564 0.1564 0.1564 avogadro-1.1.1/crystals/zeolites/DOH.cif0000644000175000001440000000355612250371054017334 0ustar marcususersdata_DOH #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.1900(0) _cell_length_b 14.1900(0) _cell_length_c 11.4990(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 6/m m m' _symmetry_Int_Tables_number 191 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,+z' '+y,-x+y,+z' '+x-y,+x,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3952 0.2893 0.3035 O2 O 0.3372 0.1686 0.1140 O3 O 0.5427 0.2714 0.1849 O4 O 0.3659 0.0000 0.5000 O5 O 0.5000 0.0000 0.3414 O6 O 0.1854 0.0000 0.0000 O7 O 0.3333 0.6667 0.0000 T1 Si 0.4173 0.2087 0.2246 T2 Si 0.3881 0.0000 0.3629 T3 Si 0.2609 0.1304 0.0000 T4 Si 0.3333 0.6667 0.1398 avogadro-1.1.1/crystals/zeolites/STO.cif0000644000175000001440000001241312250371054017357 0ustar marcususersdata_STO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 29.8860(0) _cell_length_b 8.3900(0) _cell_length_c 24.7310(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 105.0480(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 2/m' _symmetry_Int_Tables_number 10 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,+y,-z' '-x,-y,-z' '+x,-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1272 0.0000 0.1995 O2 O 0.0072 0.2693 0.1761 O3 O 0.0534 0.5000 0.2384 O4 O 0.2061 0.0000 0.0239 O5 O 0.7588 0.2305 0.1632 O6 O 0.8296 0.2066 0.2515 O7 O 0.8424 0.2966 0.1545 O8 O 0.8196 0.0000 0.1691 O9 O 0.9446 0.2047 0.2303 O10 O 0.9610 0.0000 0.1567 O11 O 0.8393 0.2023 0.0519 O12 O 0.8599 0.5000 0.0818 O13 O 0.1929 0.5000 0.1338 O14 O 0.9191 0.2710 0.1226 O15 O 0.7508 0.2455 0.0052 O16 O 0.1646 0.2094 0.1453 O17 O 0.0972 0.2948 0.1900 O18 O 0.1886 0.2890 0.0538 O19 O 0.7505 0.2138 0.3366 O20 O 0.1793 0.2293 0.2551 O21 O 0.1697 0.2975 0.3556 O22 O 0.1797 0.0000 0.3275 O23 O 0.0641 0.2034 0.2738 O24 O 0.0458 0.0000 0.3465 O25 O 0.1682 0.2056 0.4570 O26 O 0.1466 0.5000 0.4247 O27 O 0.2126 0.0000 0.5321 O28 O 0.7867 0.5000 0.3551 O29 O 0.8777 0.0000 0.3240 O30 O 0.0017 0.2734 0.3277 O31 O 0.9521 0.5000 0.2668 O32 O 0.8408 0.2512 0.3592 O33 O 0.9115 0.2847 0.3152 O34 O 0.7418 0.2316 0.5015 O35 O 0.7979 0.2955 0.4382 O36 O 0.0901 0.2663 0.3815 O37 O 0.6706 0.1971 0.1589 O38 O 0.5944 0.2877 0.1842 O39 O 0.6570 0.5000 0.1773 O40 O 0.5591 0.0000 0.1816 O41 O 0.6956 0.2985 0.0704 O42 O 0.6975 0.5000 0.9893 O43 O 0.3256 0.2047 0.2321 O44 O 0.3043 0.5000 0.1990 O45 O 0.4149 0.2142 0.1179 O46 O 0.4494 0.5000 0.1440 O47 O 0.3498 0.0000 0.1140 O48 O 0.7105 0.0000 0.1032 O49 O 0.2521 0.2619 0.1495 O50 O 0.3354 0.3011 0.1350 O51 O 0.4446 0.2969 0.2235 O52 O 0.3393 0.2158 0.0345 O53 O 0.5042 0.2499 0.1629 O54 O 0.2500 0.1976 0.3431 O55 O 0.6745 0.2978 0.2609 O56 O 0.6705 0.2184 0.3622 O57 O 0.6871 0.0000 0.2939 O58 O 0.5572 0.1958 0.2640 O59 O 0.5565 0.0000 0.3467 O60 O 0.6516 0.2400 0.4594 O61 O 0.6549 0.5000 0.4008 O62 O 0.6896 0.0000 0.5239 O63 O 0.2728 0.5000 0.3600 O64 O 0.3479 0.0000 0.3150 O65 O 0.4976 0.2393 0.3245 O66 O 0.4473 0.5000 0.3056 O67 O 0.3316 0.2988 0.3351 O68 O 0.4072 0.2218 0.3052 O69 O 0.3134 0.2846 0.4334 O70 O 0.5864 0.2949 0.3676 T1 Si 0.8651 0.3174 0.1026 T2 Si 0.7989 0.1842 0.9949 T3 Si 0.1437 0.3168 0.4046 T4 Si 0.7940 0.3150 0.3724 T5 Si 0.6492 0.3198 0.1954 T6 Si 0.7012 0.3154 0.0076 T7 Si 0.3599 0.1822 0.1004 T8 Si 0.6957 0.1830 0.3134 T9 Si 0.6408 0.3145 0.3973 T10 Si 0.3532 0.1819 0.2968 T11 Si 0.2919 0.3197 0.3677 T12 Si 0.0555 0.3171 0.2196 T13 Si 0.9579 0.1857 0.1716 T14 Si 0.1996 0.3151 0.1204 T15 Si 0.1423 0.1836 0.1973 T16 Si 0.1946 0.1817 0.3204 T17 Si 0.9525 0.3157 0.2851 T18 Si 0.8649 0.1854 0.3124 T19 Si 0.7898 0.1833 0.4877 T20 Si 0.0505 0.1855 0.3324 T21 Si 0.7089 0.1815 0.1238 T22 Si 0.3043 0.3174 0.1790 T23 Si 0.3074 0.1880 0.4873 T24 Si 0.8128 0.1831 0.1847 T25 Si 0.4534 0.3154 0.1623 T26 Si 0.5536 0.1832 0.1982 T27 Si 0.4492 0.3147 0.2894 T28 Si 0.5493 0.1822 0.3258 avogadro-1.1.1/crystals/zeolites/UOS.cif0000644000175000001440000000340012250371054017354 0ustar marcususersdata_UOS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 19.9050(0) _cell_length_b 7.5460(0) _cell_length_c 9.0680(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m a' _symmetry_Int_Tables_number 51 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,-y,+z' '-x,+y,-z' '1/2+x,-y,-z' '-x,-y,-z' '1/2+x,+y,-z' '+x,-y,+z' '1/2-x,+y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.9767 0.2657 0.3196 O2 O 0.0535 0.0000 0.2379 O3 O 0.0957 0.2228 0.4408 O4 O 0.0860 0.3259 0.1648 O5 O 0.1536 0.3258 0.6868 O6 O 0.1083 0.0000 0.6619 O7 O 0.0000 0.5000 0.0000 O8 O 0.1283 0.5000 0.9316 O9 O 0.7500 0.5000 0.1772 T1 Si 0.0529 0.2036 0.2909 T2 Si 0.0952 0.2037 0.6176 T3 Si 0.0751 0.5000 0.0650 T4 Si 0.6714 0.5000 0.2184 avogadro-1.1.1/crystals/zeolites/BOF.cif0000644000175000001440000000322712250371054017323 0ustar marcususersdata_BOF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.5030(0) _cell_length_b 12.7730(0) _cell_length_c 13.7060(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P n m a' _symmetry_Int_Tables_number 62 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,-y,1/2+z' '-x,1/2+y,-z' '1/2+x,1/2-y,1/2-z' '-x,-y,-z' '1/2+x,+y,1/2-z' '+x,1/2-y,+z' '1/2-x,1/2+y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5247 0.6218 0.5536 O2 O 0.0710 0.5587 0.7656 O3 O 0.8457 0.6197 0.6296 O4 O 0.1836 0.5910 0.5864 O5 O 0.3160 0.5576 0.4116 O6 O 0.0880 0.7500 0.6962 O7 O 0.2875 0.7500 0.4786 T1 Si 0.0468 0.6296 0.6694 T2 Si 0.6564 0.5605 0.6266 T3 Si 0.3279 0.6301 0.5075 avogadro-1.1.1/crystals/zeolites/GON.cif0000644000175000001440000000346712250371054017346 0ustar marcususersdata_GON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 16.5000(0) _cell_length_b 20.1850(0) _cell_length_c 5.0800(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2 2 2' _symmetry_Int_Tables_number 21 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,+z' '1/2-x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3458 0.1838 0.8706 O2 O 0.3869 0.1992 0.3697 O3 O 0.2500 0.2500 0.5459 O4 O 0.2650 0.1202 0.5028 O5 O 0.1546 0.0869 0.8609 O6 O 0.2032 0.0000 0.5000 O7 O 0.1131 0.1021 0.3623 O8 O 0.0000 0.0967 0.0000 O9 O 0.0959 0.2015 0.0304 O10 O 0.0000 0.3061 0.0000 T1 Si 0.3121 0.1884 0.5715 T2 Si 0.1840 0.0772 0.5591 T3 Si 0.0913 0.1217 0.0613 T4 Si 0.0907 0.2810 0.0693 avogadro-1.1.1/crystals/zeolites/ASV.cif0000644000175000001440000000301512250371054017341 0ustar marcususersdata_ASV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.6740(0) _cell_length_b 8.6740(0) _cell_length_c 13.9190(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 4/m c c' _symmetry_Int_Tables_number 124 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x,+z' '-x,-y,+z' '+y,-x,+z' '-x,+y,1/2+z' '+y,+x,1/2+z' '+x,-y,1/2+z' '-y,-x,1/2+z' '-x,-y,-z' '+y,-x,-z' '+x,+y,-z' '-y,+x,-z' '+x,-y,1/2-z' '-y,-x,1/2-z' '-x,+y,1/2-z' '+y,+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1089 0.6074 0.3178 O2 O 0.1985 0.4155 0.0000 O3 O 0.3938 0.3110 0.1321 T1 Si 0.2534 0.4308 0.1114 T2 Si 0.0000 0.5000 0.2500 avogadro-1.1.1/crystals/zeolites/IWW.cif0000644000175000001440000000650312250371054017363 0ustar marcususersdata_IWW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 41.6910(0) _cell_length_b 12.7130(0) _cell_length_c 12.7110(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P b a m' _symmetry_Int_Tables_number 55 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,1/2+y,+z' '1/2+x,1/2-y,+z' '-x,-y,+z' '-x,-y,-z' '1/2+x,1/2-y,-z' '1/2-x,1/2+y,-z' '+x,+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4099 0.8123 0.1382 O2 O 0.3794 0.9296 0.0000 O3 O 0.3477 0.8398 0.1547 O4 O 0.3864 0.9973 0.1941 O5 O 0.4264 0.6680 0.0000 O6 O 0.3880 0.6196 0.1568 O7 O 0.4487 0.6575 0.1931 O8 O 0.3575 0.5296 0.0000 O9 O 0.3258 0.6469 0.1353 O10 O 0.3485 0.4621 0.1925 O11 O 0.3084 0.7928 0.0000 O12 O 0.2870 0.7998 0.1939 O13 O 0.3971 0.7856 0.5000 O14 O 0.3406 0.8759 0.5000 O15 O 0.3891 0.9618 0.3967 O16 O 0.3955 0.5796 0.5000 O17 O 0.4410 0.6806 0.3965 O18 O 0.3390 0.6700 0.5000 O19 O 0.3472 0.4941 0.3965 O20 O 0.2950 0.7750 0.3968 O21 O 0.3233 0.3201 0.3177 O22 O 0.3856 0.3504 0.3175 O23 O 0.3426 0.0780 0.3209 O24 O 0.4017 0.1507 0.3238 O25 O 0.2394 0.8406 0.3235 O26 O 0.2898 0.9651 0.3183 O27 O 0.4545 0.4939 0.3204 O28 O 0.4983 0.6426 0.3206 O29 O 0.2934 0.3280 0.5000 O30 O 0.2877 0.1617 0.3789 O31 O 0.3154 0.0215 0.5000 O32 O 0.3952 0.2575 0.5000 O33 O 0.4438 0.2966 0.3741 O34 O 0.4766 0.4202 0.5000 T1 Si 0.3810 0.8948 0.1217 T2 Si 0.4183 0.6898 0.1219 T3 Si 0.3549 0.5647 0.1214 T4 Si 0.3172 0.7696 0.1210 T5 Si 0.3787 0.8969 0.5000 T6 Si 0.4187 0.6809 0.5000 T7 Si 0.3574 0.5587 0.5000 T8 Si 0.3174 0.7747 0.5000 T9 Si 0.3512 0.4067 0.3060 T10 Si 0.3798 0.0474 0.3084 T11 Si 0.2777 0.8453 0.3081 T12 Si 0.4606 0.6183 0.3071 T13 Si 0.2911 0.2879 0.3801 T14 Si 0.3090 0.0561 0.3799 T15 Si 0.4065 0.2635 0.3791 T16 Si 0.4691 0.3922 0.3790 avogadro-1.1.1/crystals/zeolites/ATS.cif0000644000175000001440000000335012250371054017341 0ustar marcususersdata_ATS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.1640(0) _cell_length_b 21.5840(0) _cell_length_c 5.2570(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6886 0.1012 0.7500 O2 O 0.6411 0.0000 0.5000 O3 O 0.5000 0.0612 0.7500 O4 O 0.3645 0.2015 0.0000 O5 O 0.1915 0.1986 0.7500 O6 O 0.5000 0.2668 0.2500 T1 Si 0.6174 0.0405 0.7500 T2 Si 0.3079 0.1758 0.7500 T3 Si 0.6159 0.2428 0.2500 avogadro-1.1.1/crystals/zeolites/SAO.cif0000644000175000001440000000367712250371054017350 0ustar marcususersdata_SAO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.4390(0) _cell_length_b 13.4390(0) _cell_length_c 21.8600(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I -4 m 2' _symmetry_Int_Tables_number 119 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3139 0.6499 0.3343 O2 O 0.3766 0.6843 0.4461 O3 O 0.6412 0.5000 0.4067 O4 O 0.5000 0.6151 0.3630 O5 O 0.7924 0.5000 0.2934 O6 O 0.1253 0.6357 0.3639 O7 O 0.8210 0.6790 0.2500 O8 O 0.1862 0.6883 0.4735 O9 O 0.8572 0.5000 0.4498 O12 O 0.0000 0.6333 0.4559 T1 Si 0.3873 0.6122 0.3877 T2 Si 0.1140 0.6143 0.4361 T3 Si 0.2055 0.3837 0.3105 T4 Si 0.7030 0.2970 0.5000 avogadro-1.1.1/crystals/zeolites/MOR.cif0000644000175000001440000000367712250371054017363 0ustar marcususersdata_MOR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.2560(0) _cell_length_b 20.5340(0) _cell_length_c 7.5420(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2811 0.0000 0.0000 O2 O 0.3268 0.0795 0.2500 O3 O 0.3757 0.0924 0.9243 O4 O 0.2391 0.1223 0.9992 O5 O 0.3253 0.3089 0.2500 O6 O 0.2500 0.2500 0.0000 O7 O 0.3757 0.3058 0.9242 O8 O 0.0000 0.4005 0.2500 O9 O 0.0906 0.3009 0.2500 O10 O 0.0000 0.2013 0.2500 T1 Si 0.3057 0.0736 0.0435 T2 Si 0.3028 0.3106 0.0437 T3 Si 0.0848 0.3791 0.2500 T4 Si 0.0848 0.2227 0.2500 avogadro-1.1.1/crystals/zeolites/MON.cif0000644000175000001440000000357712250371054017356 0ustar marcususersdata_MON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.1350(0) _cell_length_b 7.1350(0) _cell_length_c 17.8090(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 41/a m d' _symmetry_Int_Tables_number 141 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '3/4-y,1/4+x,3/4+z' '1/4-y,3/4+x,1/4+z' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '3/4+y,3/4-x,1/4+z' '1/4+y,1/4-x,3/4+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '1/4+y,1/4+x,3/4+z' '3/4+y,3/4+x,1/4+z' '1/2+x,-y,1/2+z' '+x,1/2-y,+z' '1/4-y,3/4-x,1/4+z' '3/4-y,1/4-x,3/4+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '1/4+y,3/4-x,1/4-z' '3/4+y,1/4-x,3/4-z' '1/2+x,+y,1/2-z' '+x,1/2+y,-z' '1/4-y,1/4+x,3/4-z' '3/4-y,3/4+x,1/4-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '3/4-y,3/4-x,1/4-z' '1/4-y,1/4-x,3/4-z' '1/2-x,+y,1/2-z' '-x,1/2+y,-z' '3/4+y,1/4+x,3/4-z' '1/4+y,3/4+x,1/4-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.2500 0.1087 O2 O 0.8158 0.5658 0.1250 O3 O 0.0000 0.5000 0.0000 T1 Si 0.0000 0.4703 0.0895 avogadro-1.1.1/crystals/zeolites/RWR.cif0000644000175000001440000000372512250371054017372 0ustar marcususersdata_RWR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.8060(0) _cell_length_b 7.8060(0) _cell_length_c 27.3500(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 41/a m d' _symmetry_Int_Tables_number 141 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '3/4-y,1/4+x,3/4+z' '1/4-y,3/4+x,1/4+z' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '3/4+y,3/4-x,1/4+z' '1/4+y,1/4-x,3/4+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '1/4+y,1/4+x,3/4+z' '3/4+y,3/4+x,1/4+z' '1/2+x,-y,1/2+z' '+x,1/2-y,+z' '1/4-y,3/4-x,1/4+z' '3/4-y,1/4-x,3/4+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '1/4+y,3/4-x,1/4-z' '3/4+y,1/4-x,3/4-z' '1/2+x,+y,1/2-z' '+x,1/2+y,-z' '1/4-y,1/4+x,3/4-z' '3/4-y,3/4+x,1/4-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '3/4-y,3/4-x,1/4-z' '1/4-y,1/4-x,3/4-z' '1/2-x,+y,1/2-z' '-x,1/2+y,-z' '3/4+y,1/4+x,3/4-z' '1/4+y,3/4+x,1/4-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1690 0.0322 0.0825 O2 O 0.0000 0.0382 0.3966 O3 O 0.0000 0.7500 0.0650 O4 O 0.0000 0.5000 0.0000 T1 Si 0.0000 0.5459 0.0572 T2 Si 0.6911 0.9411 0.8750 avogadro-1.1.1/crystals/zeolites/VNI.cif0000644000175000001440000000430412250371054017346 0ustar marcususersdata_VNI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 10.0020(0) _cell_length_b 10.0020(0) _cell_length_c 34.1410(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 42/n c m' _symmetry_Int_Tables_number 138 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-y,+x,1/2+z' '1/2-x,1/2-y,+z' '+y,1/2-x,1/2+z' '1/2-x,+y,1/2+z' '+y,+x,+z' '+x,1/2-y,1/2+z' '1/2-y,1/2-x,+z' '-x,-y,-z' '1/2+y,-x,1/2-z' '1/2+x,1/2+y,-z' '-y,1/2+x,1/2-z' '1/2+x,-y,1/2-z' '-y,-x,-z' '-x,1/2+y,1/2-z' '1/2+y,1/2+x,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0045 0.8183 0.9212 O2 O 0.0345 0.6515 0.8626 O3 O 0.1056 0.5802 0.9336 O4 O 0.2500 0.7500 0.8954 O5 O 0.1585 0.1585 0.4623 O6 O 0.0000 0.0000 0.5000 O7 O 0.0030 0.0030 0.2442 O8 O 0.0640 0.2500 0.2640 O9 O 0.0598 0.0598 0.3172 O10 O 0.1212 0.1212 0.6989 O11 O 0.1574 0.1574 0.0180 O12 O 0.2500 0.2500 0.0839 T1 Si 0.0985 0.7029 0.9032 T2 Si 0.0455 0.0455 0.4569 T3 Si 0.0946 0.0946 0.2723 T4 Si 0.1084 0.1084 0.7458 T5 Si 0.9554 0.9554 0.3361 T6 Si 0.1454 0.1454 0.0650 T7 Si 0.2500 0.2500 0.4904 avogadro-1.1.1/crystals/zeolites/TER.cif0000644000175000001440000000450212250371054017344 0ustar marcususersdata_TER #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 9.8070(0) _cell_length_b 23.6460(0) _cell_length_c 20.2420(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6342 0.3607 0.3450 O2 O 0.8659 0.3049 0.3430 O3 O 0.8659 0.4162 0.3430 O4 O 0.7931 0.3608 0.4497 O5 O 0.6340 0.6391 0.4456 O6 O 0.8658 0.5830 0.4436 O7 O 0.8659 0.6941 0.4430 O8 O 0.0000 0.4702 0.2500 O9 O 0.0000 0.5097 0.3708 O10 O 0.0000 0.5000 0.5000 O11 O 0.0000 0.7670 0.3700 O12 O 0.0000 0.7771 0.4995 O13 O 0.0000 0.2508 0.2500 O14 O 0.0000 0.2116 0.3712 O15 O 0.0000 0.8086 0.2500 T1 Si 0.7899 0.3606 0.3703 T2 Si 0.7898 0.6387 0.4708 T3 Si 0.0000 0.4529 0.3269 T4 Si 0.0000 0.5440 0.4395 T5 Si 0.0000 0.7332 0.4390 T6 Si 0.0000 0.2682 0.3269 T7 Si 0.0000 0.1783 0.4405 T8 Si 0.0000 0.8245 0.3273 avogadro-1.1.1/crystals/zeolites/CGS.cif0000644000175000001440000000343012250371054017325 0ustar marcususersdata_CGS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.4440(0) _cell_length_b 14.0830(0) _cell_length_c 15.9290(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P n m a' _symmetry_Int_Tables_number 62 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8839 0.2500 0.1674 O2 O 0.7298 0.1283 0.0727 O3 O 0.9750 0.0715 0.1615 O4 O 0.7086 0.1173 0.2370 O5 O 0.5601 0.3873 0.9350 O6 O 0.4330 0.4270 0.0815 O7 O 0.5008 0.2500 0.0424 O8 O 0.0352 0.5335 0.2942 O9 O 0.2330 0.5330 0.1664 T1 Si 0.8245 0.1417 0.1596 T2 Si 0.5558 0.3589 0.0329 T3 Si 0.1128 0.4695 0.2212 T4 Si 0.4104 0.9734 0.1296 avogadro-1.1.1/crystals/zeolites/UWY.cif0000644000175000001440000000506712250371054017405 0ustar marcususersdata_UWY #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 25.1100(0) _cell_length_b 12.7330(0) _cell_length_c 11.5100(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m m' _symmetry_Int_Tables_number 47 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,-y,+z' '-x,+y,-z' '+x,-y,-z' '-x,-y,-z' '+x,+y,-z' '+x,-y,+z' '-x,+y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.1622 0.3515 O2 O 0.0786 0.1370 0.5000 O3 O 0.0994 0.1879 0.2826 O4 O 0.0638 0.0000 0.3318 O5 O 0.3787 0.3063 0.2817 O6 O 0.2825 0.3427 0.3582 O7 O 0.3493 0.5000 0.3307 O8 O 0.3635 0.3640 0.5000 O9 O 0.1845 0.3074 0.2860 O10 O 0.2016 0.3709 0.5000 O11 O 0.2166 0.5000 0.3248 O12 O 0.3741 0.1034 0.3195 O13 O 0.3476 0.1781 0.1141 O14 O 0.4477 0.1803 0.1833 O15 O 0.1705 0.1767 0.1135 O16 O 0.1930 0.1036 0.3212 O17 O 0.1802 0.0000 0.0000 O18 O 0.2596 0.1353 0.0000 O19 O 0.3391 0.0000 0.0000 O20 O 0.3374 0.0000 0.5000 O21 O 0.2836 0.0000 0.3053 O22 O 0.2304 0.0000 0.5000 O23 O 0.5000 0.1168 0.0000 O24 O 0.5000 0.0000 0.1872 T1 Si 0.0604 0.1222 0.3668 T2 Si 0.3438 0.3785 0.3677 T3 Si 0.2213 0.3799 0.3673 T4 Si 0.3866 0.1922 0.2238 T5 Si 0.1618 0.1936 0.2507 T6 Si 0.1959 0.1225 0.0000 T7 Si 0.3234 0.1225 0.0000 T8 Si 0.3425 0.0000 0.3608 T9 Si 0.2247 0.0000 0.3609 T10 Si 0.5000 0.1190 0.1396 avogadro-1.1.1/crystals/zeolites/MOZ.cif0000644000175000001440000000443412250371054017363 0ustar marcususersdata_MOZ #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 31.2020(0) _cell_length_b 31.2020(0) _cell_length_c 7.5510(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 6/m m m' _symmetry_Int_Tables_number 191 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,+z' '+y,-x+y,+z' '+x-y,+x,+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,+z' '+x-y,-y,+z' '-x,-x+y,+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,-z' '-x+y,+y,-z' '+x,+x-y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O7 O 0.1631 0.1631 0.5000 O8 O 0.1896 0.0948 0.5000 O9 O 0.2421 0.1783 0.3259 O10 O 0.3075 0.1538 0.2241 O11 O 0.2761 0.1965 0.0000 O12 O 0.3341 0.2476 0.2639 O13 O 0.3854 0.3055 0.0000 O14 O 0.4037 0.3395 0.3259 O15 O 0.4278 0.2737 0.2244 O16 O 0.4183 0.4183 0.5000 O17 O 0.4871 0.3926 0.5000 O18 O 0.5816 0.4184 0.5000 O19 O 0.5176 0.3396 0.3260 O20 O 0.4954 0.2477 0.2627 O21 O 0.5019 0.3059 0.0000 T1 Si 0.2900 0.1940 0.2037 T2 Si 0.3877 0.2916 0.2038 T3 Si 0.4857 0.2917 0.2037 T4 Si 0.2092 0.1533 0.5000 T5 Si 0.4285 0.3725 0.5000 T6 Si 0.5258 0.3727 0.5000 avogadro-1.1.1/crystals/zeolites/EZT.cif0000644000175000001440000000370712250371054017362 0ustar marcususersdata_EZT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 10.2330(250) _cell_length_b 12.5580(170) _cell_length_c 21.7170(120) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(700) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m m a' _symmetry_Int_Tables_number 74 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1930 0.4507 0.0542 O2 O 0.3713 0.3780 0.1314 O3 O 0.1285 0.4027 0.1680 O4 O 0.1890 0.2500 0.0905 O5 O 0.0000 0.4418 0.6293 O6 O 0.0000 0.5569 0.7298 O7 O 0.0000 0.7500 0.7749 O8 O 0.1283 0.9059 0.4729 O9 O 0.0000 0.7500 0.4179 T1 Si 0.2204 0.3708 0.1108 T2 Si 0.0000 0.5616 0.6558 T3 Si 0.0000 0.8744 0.7925 T4 Si 0.0000 0.8750 0.4340 T5 Si 0.2182 0.5000 0.5000 avogadro-1.1.1/crystals/zeolites/IMF.cif0000644000175000001440000001052212250371054017324 0ustar marcususersdata_IMF #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.2960(0) _cell_length_b 56.7880(0) _cell_length_c 20.2900(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5922 0.4345 0.5556 O2 O 0.5000 0.4000 0.4984 O3 O 0.5000 0.4041 0.6277 O4 O 0.4081 0.3656 0.6601 O5 O 0.5000 0.3895 0.7500 O6 O 0.5000 0.2837 0.7500 O7 O 0.5921 0.3068 0.6587 O8 O 0.5000 0.2682 0.6283 O9 O 0.5000 0.2727 0.0007 O10 O 0.5915 0.2378 0.9451 O11 O 0.5000 0.0719 0.6317 O12 O 0.4081 0.1106 0.6636 O13 O 0.5000 0.1086 0.5524 O14 O 0.5000 0.0358 0.5500 O15 O 0.5915 0.0331 0.6619 O16 O 0.2271 0.0346 0.0483 O17 O 0.1969 0.0637 0.9494 O18 O 0.2682 0.0798 0.0597 O19 O 0.2329 0.1635 0.1480 O20 O 0.2587 0.1179 0.1320 O21 O 0.2252 0.1348 0.2500 O22 O 0.2666 0.2084 0.1611 O23 O 0.1938 0.1923 0.0509 O24 O 0.2354 0.2912 0.0588 O25 O 0.2500 0.2500 0.0000 O26 O 0.2367 0.2525 0.1291 O27 O 0.2273 0.3851 0.2500 O28 O 0.2571 0.3735 0.1258 O29 O 0.2344 0.4181 0.1595 O30 O 0.2733 0.4635 0.1535 O31 O 0.1929 0.5040 0.1286 O32 O 0.1978 0.4879 0.2500 O33 O 0.4084 0.0346 0.0634 O34 O 0.3284 0.0000 0.0000 O35 O 0.4074 0.1106 0.0595 O36 O 0.2471 0.1209 0.0028 O37 O 0.4080 0.2383 0.1562 O38 O 0.2823 0.2418 0.2500 O39 O 0.4079 0.3075 0.0567 O40 O 0.2644 0.3365 0.0469 O41 O 0.4076 0.3646 0.0542 O42 O 0.4083 0.4327 0.1566 O43 O 0.5000 0.0725 0.0286 O44 O 0.5000 0.2604 0.2500 O45 O 0.5000 0.2772 0.1297 O46 O 0.5000 0.3936 0.1300 O47 O 0.5000 0.4103 0.2500 T1 Si 0.1964 0.0610 0.0283 T2 Si 0.1958 0.1894 0.1297 T3 Si 0.2036 0.2640 0.0605 T4 Si 0.3170 0.0181 0.0603 T5 Si 0.3038 0.3108 0.0279 T6 Si 0.2951 0.3636 0.0565 T7 Si 0.3042 0.4376 0.1297 T8 Si 0.2032 0.3913 0.1744 T9 Si 0.1884 0.4807 0.1736 T10 Si 0.2956 0.1072 0.0633 T11 Si 0.2989 0.2351 0.1738 T12 Si 0.2023 0.1376 0.1728 T13 Si 0.5000 0.4183 0.5590 T14 Si 0.5000 0.2542 0.9407 T15 Si 0.5000 0.2912 0.4392 T16 Si 0.5000 0.3807 0.0595 T17 Si 0.5000 0.4174 0.1733 T18 Si 0.5000 0.2914 0.6737 T19 Si 0.5000 0.3812 0.6742 T20 Si 0.5000 0.1002 0.6282 T21 Si 0.5000 0.0436 0.6262 T22 Si 0.5000 0.0442 0.0258 T23 Si 0.5000 0.1007 0.0238 T24 Si 0.5000 0.2535 0.1731 avogadro-1.1.1/crystals/zeolites/SFH.cif0000644000175000001440000000435112250371054017334 0ustar marcususersdata_SFH #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 5.2550(0) _cell_length_b 34.3190(0) _cell_length_c 21.5180(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.0509 0.9468 O2 O 0.2499 0.0890 0.0336 O3 O 0.0000 0.0254 0.0623 O4 O 0.2500 0.2055 0.9651 O5 O 0.5000 0.2303 0.0630 O6 O 0.5000 0.1553 0.0336 O7 O 0.0000 0.4206 0.1777 O8 O 0.2499 0.3557 0.1581 O9 O 0.0000 0.3892 0.0663 O10 O 0.5000 0.2906 0.1395 O11 O 0.2499 0.0165 0.6441 O12 O 0.5000 0.3222 0.2500 O13 O 0.0000 0.4821 0.2500 T1 Si 0.0000 0.0635 0.0189 T2 Si 0.5000 0.1991 0.0070 T3 Si 0.0000 0.3802 0.1397 T4 Si 0.5000 0.2771 0.0678 T5 Si 0.0000 0.0148 0.6010 T6 Si 0.0000 0.3889 0.9916 T7 Si 0.5000 0.3313 0.1767 T8 Si 0.0000 0.4675 0.1788 avogadro-1.1.1/crystals/zeolites/RON.cif0000644000175000001440000000406712250371054017356 0ustar marcususersdata_RON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.3300(0) _cell_length_b 18.3300(0) _cell_length_c 9.1600(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m c m' _symmetry_Int_Tables_number 140 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,1/2+z' '1/2-x,1/2+y,+z' '+y,+x,1/2+z' '1/2+y,1/2+x,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,+z' '-y,-x,1/2+z' '1/2-y,1/2-x,+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,1/2-z' '1/2+x,1/2-y,-z' '-y,-x,1/2-z' '1/2-y,1/2-x,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,-z' '+y,+x,1/2-z' '1/2+y,1/2+x,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z H1 H 0.3240 0.1760 0.1450 O1 O 0.1353 0.3647 0.0000 O2 O 0.1641 0.0579 0.1457 O3 O 0.0579 0.2673 0.1461 O4 O 0.0451 0.0936 0.0000 O5 O 0.1725 0.2246 0.0000 O6 O 0.2935 0.2065 0.1512 T1 Si 0.2177 0.0000 0.2500 T1 Si 0.2619 0.2381 0.0000 T1 Si 0.1044 0.2810 0.0000 T2 Si 0.1159 0.0408 0.0000 avogadro-1.1.1/crystals/zeolites/ITH.cif0000644000175000001440000000474712250371054017351 0ustar marcususersdata_ITH #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.5660(0) _cell_length_b 11.6620(0) _cell_length_c 21.9300(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'A m m 2' _symmetry_Int_Tables_number 38 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '-x,+y,+z' '-x,1/2+y,1/2+z' '+x,-y,+z' '+x,1/2-y,1/2+z' '-x,-y,+z' '-x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6821 0.3872 0.3423 O2 O 0.6402 0.5000 0.5349 O3 O 0.7005 0.3387 0.4586 O4 O 0.6049 0.3051 0.6880 O5 O 0.8531 0.5000 0.8558 O6 O 0.0000 0.3415 0.8417 O7 O 0.6475 0.2850 0.5708 O8 O 0.8038 0.2935 0.6511 O9 O 0.6814 0.1123 0.6449 O10 O 0.8394 0.3532 0.7654 O11 O 0.5000 0.3519 0.4937 O12 O 0.8098 0.2191 0.3776 O13 O 0.5000 0.5000 0.8817 O14 O 0.0000 0.3236 0.6902 O15 O 0.3956 0.3057 0.8862 O16 O 0.6269 0.5000 0.2441 O17 O 0.5000 0.5000 0.6913 O18 O 0.5000 0.3627 0.7865 O19 O 0.8726 0.5000 0.6762 O20 O 0.5000 0.5000 0.1487 O21 O 0.5000 0.5000 0.3394 T1 Si 0.5000 0.3683 0.8598 T2 Si 0.8788 0.3672 0.6959 T3 Si 0.6843 0.2497 0.6385 T4 Si 0.5000 0.3683 0.7133 T5 Si 0.8751 0.3694 0.8354 T6 Si 0.7000 0.2856 0.3909 T7 Si 0.6219 0.3688 0.5144 T8 Si 0.6222 0.5000 0.1708 T9 Si 0.6223 0.5000 0.3174 avogadro-1.1.1/crystals/zeolites/NON.cif0000644000175000001440000000434212250371054017346 0ustar marcususersdata_NON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 22.8620(0) _cell_length_b 15.6560(0) _cell_length_c 13.9350(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F m m m' _symmetry_Int_Tables_number 69 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '-x,+y,+z' '-x,1/2+y,1/2+z' '1/2-x,1/2+y,+z' '1/2-x,+y,1/2+z' '+x,-y,+z' '+x,1/2-y,1/2+z' '1/2+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,-y,+z' '-x,1/2-y,1/2+z' '1/2-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '+x,-y,-z' '+x,1/2-y,1/2-z' '1/2+x,1/2-y,-z' '1/2+x,-y,1/2-z' '-x,+y,-z' '-x,1/2+y,1/2-z' '1/2-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,+y,-z' '+x,1/2+y,1/2-z' '1/2+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3492 0.0842 0.2495 O2 O 0.4425 0.1420 0.3385 O3 O 0.3737 0.2500 0.2500 O4 O 0.3376 0.1775 0.4060 O5 O 0.2500 0.2500 0.0000 O6 O 0.2628 0.4162 0.0000 O7 O 0.5000 0.1239 0.5000 O8 O 0.5000 0.0000 0.6279 O9 O 0.3176 0.5000 0.4048 O10 O 0.2500 0.5000 0.2500 T1 Si 0.3757 0.1625 0.3103 T2 Si 0.2969 0.3264 0.0000 T3 Si 0.5000 0.1018 0.6127 T4 Si 0.3162 0.5000 0.2892 T5 Si 0.2778 0.5000 0.5000 avogadro-1.1.1/crystals/zeolites/OSI.cif0000644000175000001440000000366612250371054017356 0ustar marcususersdata_OSI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.5060(0) _cell_length_b 18.5060(0) _cell_length_c 5.2680(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1923 0.1923 0.5000 O2 O 0.3148 0.1852 0.7500 O3 O 0.2698 0.0715 0.5000 O4 O 0.1706 0.0000 0.2500 O5 O 0.0711 0.0711 0.0000 T1 Si 0.2726 0.1585 0.5000 T2 Si 0.1209 0.0000 0.0000 T3 Si 0.2204 0.0000 0.5000 avogadro-1.1.1/crystals/zeolites/CON.cif0000644000175000001440000000434112250371054017332 0ustar marcususersdata_CON #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 22.6840(0) _cell_length_b 13.3730(0) _cell_length_c 12.5530(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 69.4790(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.1506 0.5000 O2 O 0.0796 0.0000 0.4485 O3 O 0.1196 0.1818 0.3823 O4 O 0.0846 0.1341 0.5984 O5 O 0.2219 0.1292 0.2129 O6 O 0.1805 0.3139 0.2277 O7 O 0.1177 0.1690 0.1745 O8 O 0.1177 0.1867 0.7715 O9 O 0.0002 0.1388 0.8051 O10 O 0.0878 0.0000 0.7495 O11 O 0.3070 0.0000 0.0941 O12 O 0.2695 0.1444 0.9903 O13 O 0.3393 0.1863 0.1132 O14 O 0.2928 0.0000 0.8390 O15 O 0.2016 0.1280 0.8592 O16 O 0.0850 0.0000 0.1035 O17 O 0.0857 0.1671 0.9928 T1 Si 0.0709 0.1165 0.4825 T2 Si 0.1598 0.1983 0.2496 T3 Si 0.0725 0.1149 0.7310 T4 Si 0.2845 0.1148 0.1026 T5 Si 0.2708 0.1146 0.8653 T6 Si 0.0719 0.1184 0.1166 T7 Si 0.1415 0.1990 0.8776 avogadro-1.1.1/crystals/zeolites/GOO.cif0000644000175000001440000000343112250371054017336 0ustar marcususersdata_GOO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.7480(0) _cell_length_b 11.0390(0) _cell_length_c 17.4750(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2 2 21' _symmetry_Int_Tables_number 20 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.7172 0.9940 0.8431 O2 O 0.8382 0.0543 0.7080 O3 O 0.6420 0.1945 0.7754 O4 O 0.9181 0.1741 0.8320 O5 O 0.8607 0.1012 0.0391 O6 O 0.6926 0.2419 0.1301 O7 O 0.9518 0.1407 0.1782 O8 O 0.5759 0.4371 0.0635 T1 Si 0.7811 0.1023 0.7903 T2 Si 0.8023 0.1253 0.1252 T3 Si 0.5893 0.3612 0.1420 T4 Si 0.5000 0.2770 0.7500 T5 Si 0.9685 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/APD.cif0000644000175000001440000000335012250371054017316 0ustar marcususersdata_APD #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.7240(0) _cell_length_b 20.0600(0) _cell_length_c 10.1660(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c a' _symmetry_Int_Tables_number 64 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,1/2-y,1/2+z' '1/2+x,-y,1/2+z' '-x,1/2-y,1/2+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,+y,1/2-z' '+x,1/2+y,1/2-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2137 0.0000 0.0000 O2 O 0.0000 0.0673 0.8742 O3 O 0.2500 0.0302 0.7500 O4 O 0.2634 0.1240 0.9299 O5 O 0.5000 0.2027 0.8906 O6 O 0.2500 0.2180 0.7500 O7 O 0.2500 0.2500 0.0000 T1 Si 0.1815 0.0552 0.8886 T2 Si 0.3160 0.1986 0.8927 avogadro-1.1.1/crystals/zeolites/CHA.cif0000644000175000001440000000372412250371054017312 0ustar marcususersdata_CHA #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.6750(0) _cell_length_b 13.6750(0) _cell_length_c 14.7670(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'R -3 m' _symmetry_Int_Tables_number 166 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '2/3+x,1/3+y,1/3+z' '1/3+x,2/3+y,2/3+z' '-y,+x-y,+z' '2/3-y,1/3+x-y,1/3+z' '1/3-y,2/3+x-y,2/3+z' '-x+y,-x,+z' '2/3-x+y,1/3-x,1/3+z' '1/3-x+y,2/3-x,2/3+z' '-y,-x,+z' '2/3-y,1/3-x,1/3+z' '1/3-y,2/3-x,2/3+z' '-x+y,+y,+z' '2/3-x+y,1/3+y,1/3+z' '1/3-x+y,2/3+y,2/3+z' '+x,+x-y,+z' '2/3+x,1/3+x-y,1/3+z' '1/3+x,2/3+x-y,2/3+z' '-x,-y,-z' '2/3-x,1/3-y,1/3-z' '1/3-x,2/3-y,2/3-z' '+y,-x+y,-z' '2/3+y,1/3-x+y,1/3-z' '1/3+y,2/3-x+y,2/3-z' '+x-y,+x,-z' '2/3+x-y,1/3+x,1/3-z' '1/3+x-y,2/3+x,2/3-z' '+y,+x,-z' '2/3+y,1/3+x,1/3-z' '1/3+y,2/3+x,2/3-z' '+x-y,-y,-z' '2/3+x-y,1/3-y,1/3-z' '1/3+x-y,2/3-y,2/3-z' '-x,-x+y,-z' '2/3-x,1/3-x+y,1/3-z' '1/3-x,2/3-x+y,2/3-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.9020 0.0980 0.1227 O2 O 0.9767 0.3101 0.1667 O3 O 0.1203 0.2405 0.1315 O4 O 0.0000 0.2577 0.0000 T1 Si 0.9997 0.2264 0.1051 avogadro-1.1.1/crystals/zeolites/ISV.cif0000644000175000001440000000415012250371054017352 0ustar marcususersdata_ISV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.8740(0) _cell_length_b 12.8740(0) _cell_length_c 25.6740(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 42/m m c' _symmetry_Int_Tables_number 131 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x,1/2+z' '-x,-y,+z' '+y,-x,1/2+z' '-x,+y,+z' '+y,+x,1/2+z' '+x,-y,+z' '-y,-x,1/2+z' '-x,-y,-z' '+y,-x,1/2-z' '+x,+y,-z' '-y,+x,1/2-z' '+x,-y,-z' '-y,-x,1/2-z' '-x,+y,-z' '+y,+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O6 O 0.1451 0.1195 0.0000 O7 O 0.1337 0.0000 0.0825 O8 O 0.0000 0.1524 0.0702 O9 O 0.1959 0.1945 0.0913 O10 O 0.3980 0.1637 0.9106 O11 O 0.3216 0.3355 0.9489 O12 O 0.3164 0.3040 0.8478 O13 O 0.5000 0.0000 0.0573 O14 O 0.5000 0.1685 0.0000 O15 O 0.5000 0.3326 0.0000 O16 O 0.3841 0.5000 0.0000 O17 O 0.3530 0.3530 0.2500 O18 O 0.5000 0.3726 0.1795 O19 O 0.3407 0.5000 0.1792 T1 Si 0.3079 0.2494 0.9040 T2 Si 0.1185 0.1168 0.0612 T3 Si 0.3774 0.3824 0.1903 T4 Si 0.5000 0.1248 0.0588 T5 Si 0.3823 0.3752 0.0000 avogadro-1.1.1/crystals/zeolites/SBT.cif0000644000175000001440000000465512250371054017353 0ustar marcususersdata_SBT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 17.1910(0) _cell_length_b 17.1910(0) _cell_length_c 41.0300(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'R -3 m' _symmetry_Int_Tables_number 166 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '2/3+x,1/3+y,1/3+z' '1/3+x,2/3+y,2/3+z' '-y,+x-y,+z' '2/3-y,1/3+x-y,1/3+z' '1/3-y,2/3+x-y,2/3+z' '-x+y,-x,+z' '2/3-x+y,1/3-x,1/3+z' '1/3-x+y,2/3-x,2/3+z' '-y,-x,+z' '2/3-y,1/3-x,1/3+z' '1/3-y,2/3-x,2/3+z' '-x+y,+y,+z' '2/3-x+y,1/3+y,1/3+z' '1/3-x+y,2/3+y,2/3+z' '+x,+x-y,+z' '2/3+x,1/3+x-y,1/3+z' '1/3+x,2/3+x-y,2/3+z' '-x,-y,-z' '2/3-x,1/3-y,1/3-z' '1/3-x,2/3-y,2/3-z' '+y,-x+y,-z' '2/3+y,1/3-x+y,1/3-z' '1/3+y,2/3-x+y,2/3-z' '+x-y,+x,-z' '2/3+x-y,1/3+x,1/3-z' '1/3+x-y,2/3+x,2/3-z' '+y,+x,-z' '2/3+y,1/3+x,1/3-z' '1/3+y,2/3+x,2/3-z' '+x-y,-y,-z' '2/3+x-y,1/3-y,1/3-z' '1/3+x-y,2/3-y,2/3-z' '-x,-x+y,-z' '2/3-x,1/3-x+y,1/3-z' '1/3-x,2/3-x+y,2/3-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1382 0.5691 0.1199 O2 O 0.2600 0.5199 0.1254 O3 O 0.0968 0.4037 0.1057 O4 O 0.1252 0.4585 0.1667 O5 O 0.8628 0.4314 0.0004 O6 O 0.8830 0.5511 0.9563 O7 O 0.7375 0.4750 0.9925 O8 O 0.8923 0.5905 0.0186 O9 O 0.9971 0.2851 0.0613 O10 O 0.0000 0.2429 0.0000 O11 O 0.8591 0.1409 0.0364 O12 O 0.6614 0.8307 0.0655 T1 Si 0.1550 0.4878 0.1294 T2 Si 0.9368 0.2424 0.0291 T3 Si 0.6309 0.9049 0.0691 T4 Si 0.8441 0.5120 0.9919 avogadro-1.1.1/crystals/zeolites/NSI.cif0000644000175000001440000000304412250371054017343 0ustar marcususersdata_NSI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.1290(0) _cell_length_b 5.2530(0) _cell_length_c 8.9280(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 105.3680(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6752 0.0000 0.1961 O2 O 0.5311 0.2500 0.2636 O3 O 0.5000 0.0000 0.0000 O4 O 0.0000 0.0000 0.5000 O5 O 0.1345 0.0000 0.7668 O6 O 0.2500 0.2500 0.0000 T1 Si 0.5590 0.0000 0.1805 T2 Si 0.0184 0.0000 0.6855 T3 Si 0.2396 0.0000 0.8932 avogadro-1.1.1/crystals/zeolites/BSV.cif0000644000175000001440000000562112250371054017347 0ustar marcususersdata_BSV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 17.2520(0) _cell_length_b 17.2520(0) _cell_length_c 17.2520(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I a -3 d' _symmetry_Int_Tables_number 230 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '+z,+x,+y' '1/2+z,1/2+x,1/2+y' '+y,+z,+x' '1/2+y,1/2+z,1/2+x' '1/2+x,+y,1/2-z' '+x,1/2+y,-z' '1/2+z,+x,1/2-y' '+z,1/2+x,-y' '1/2+y,+z,1/2-x' '+y,1/2+z,-x' '1/2-x,1/2+y,+z' '-x,+y,1/2+z' '1/2-z,1/2+x,+y' '-z,+x,1/2+y' '1/2-y,1/2+z,+x' '-y,+z,1/2+x' '-x,1/2+y,1/2-z' '1/2-x,+y,-z' '-z,1/2+x,1/2-y' '1/2-z,+x,-y' '-y,1/2+z,1/2-x' '1/2-y,+z,-x' '1/4+y,1/4+x,1/4+z' '3/4+y,3/4+x,3/4+z' '1/4+x,1/4+z,1/4+y' '3/4+x,3/4+z,3/4+y' '1/4+z,1/4+y,1/4+x' '3/4+z,3/4+y,3/4+x' '1/4+y,3/4+x,3/4-z' '3/4+y,1/4+x,1/4-z' '1/4+x,3/4+z,3/4-y' '3/4+x,1/4+z,1/4-y' '1/4+z,3/4+y,3/4-x' '3/4+z,1/4+y,1/4-x' '3/4+y,3/4-x,1/4+z' '1/4+y,1/4-x,3/4+z' '3/4+x,3/4-z,1/4+y' '1/4+x,1/4-z,3/4+y' '3/4+z,3/4-y,1/4+x' '1/4+z,1/4-y,3/4+x' '3/4+y,1/4-x,3/4-z' '1/4+y,3/4-x,1/4-z' '3/4+x,1/4-z,3/4-y' '1/4+x,3/4-z,1/4-y' '3/4+z,1/4-y,3/4-x' '1/4+z,3/4-y,1/4-x' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '-z,-x,-y' '1/2-z,1/2-x,1/2-y' '-y,-z,-x' '1/2-y,1/2-z,1/2-x' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '1/2-z,-x,1/2+y' '-z,1/2-x,+y' '1/2-y,-z,1/2+x' '-y,1/2-z,+x' '1/2+x,1/2-y,-z' '+x,-y,1/2-z' '1/2+z,1/2-x,-y' '+z,-x,1/2-y' '1/2+y,1/2-z,-x' '+y,-z,1/2-x' '+x,1/2-y,1/2+z' '1/2+x,-y,+z' '+z,1/2-x,1/2+y' '1/2+z,-x,+y' '+y,1/2-z,1/2+x' '1/2+y,-z,+x' '3/4-y,3/4-x,3/4-z' '1/4-y,1/4-x,1/4-z' '3/4-x,3/4-z,3/4-y' '1/4-x,1/4-z,1/4-y' '3/4-z,3/4-y,3/4-x' '1/4-z,1/4-y,1/4-x' '3/4-y,1/4-x,1/4+z' '1/4-y,3/4-x,3/4+z' '3/4-x,1/4-z,1/4+y' '1/4-x,3/4-z,3/4+y' '3/4-z,1/4-y,1/4+x' '1/4-z,3/4-y,3/4+x' '1/4-y,1/4+x,3/4-z' '3/4-y,3/4+x,1/4-z' '1/4-x,1/4+z,3/4-y' '3/4-x,3/4+z,1/4-y' '1/4-z,1/4+y,3/4-x' '3/4-z,3/4+y,1/4-x' '1/4-y,3/4+x,1/4+z' '3/4-y,1/4+x,3/4+z' '1/4-x,3/4+z,1/4+y' '3/4-x,1/4+z,3/4+y' '1/4-z,3/4+y,1/4+x' '3/4-z,1/4+y,3/4+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1786 0.3398 0.0624 O2 O 0.3010 0.2674 0.1208 T1 Si 0.2560 0.3490 0.1138 avogadro-1.1.1/crystals/zeolites/USI.cif0000644000175000001440000000366412250371054017362 0ustar marcususersdata_USI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 21.1190(0) _cell_length_b 12.9710(0) _cell_length_c 9.6720(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 108.3670(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6601 0.1356 0.1896 O2 O 0.7375 0.0000 0.1195 O3 O 0.7790 0.1900 0.1810 O4 O 0.6825 0.1494 0.9378 O5 O 0.8401 0.2008 0.6507 O6 O 0.7471 0.1236 0.7477 O7 O 0.8128 0.0000 0.6277 O8 O 0.7284 0.1341 0.4662 O9 O 0.5978 0.8689 0.3888 O10 O 0.6237 0.1903 0.6608 O11 O 0.5000 0.1542 0.5000 O12 O 0.5843 0.0000 0.5852 T1 Si 0.7147 0.1190 0.1068 T2 Si 0.7827 0.1145 0.6233 T3 Si 0.6610 0.8250 0.3481 T4 Si 0.5764 0.1187 0.5339 T5 Si 0.6934 0.8064 0.7914 avogadro-1.1.1/crystals/zeolites/LTN.cif0000644000175000001440000001227712250371054017357 0ustar marcususersdata_LTN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 35.6220(0) _cell_length_b 35.6220(0) _cell_length_c 35.6220(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F d -3 m' _symmetry_Int_Tables_number 227 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '+z,+x,+y' '+z,1/2+x,1/2+y' '1/2+z,1/2+x,+y' '1/2+z,+x,1/2+y' '+y,+z,+x' '+y,1/2+z,1/2+x' '1/2+y,1/2+z,+x' '1/2+y,+z,1/2+x' '-x,1/4+y,1/4+z' '-x,3/4+y,3/4+z' '1/2-x,3/4+y,1/4+z' '1/2-x,1/4+y,3/4+z' '-z,1/4+x,1/4+y' '-z,3/4+x,3/4+y' '1/2-z,3/4+x,1/4+y' '1/2-z,1/4+x,3/4+y' '-y,1/4+z,1/4+x' '-y,3/4+z,3/4+x' '1/2-y,3/4+z,1/4+x' '1/2-y,1/4+z,3/4+x' '1/4+x,-y,1/4+z' '1/4+x,1/2-y,3/4+z' '3/4+x,1/2-y,1/4+z' '3/4+x,-y,3/4+z' '1/4+z,-x,1/4+y' '1/4+z,1/2-x,3/4+y' '3/4+z,1/2-x,1/4+y' '3/4+z,-x,3/4+y' '1/4+y,-z,1/4+x' '1/4+y,1/2-z,3/4+x' '3/4+y,1/2-z,1/4+x' '3/4+y,-z,3/4+x' '1/4-x,3/4-y,1/2+z' '1/4-x,1/4-y,+z' '3/4-x,1/4-y,1/2+z' '3/4-x,3/4-y,+z' '1/4-z,3/4-x,1/2+y' '1/4-z,1/4-x,+y' '3/4-z,1/4-x,1/2+y' '3/4-z,3/4-x,+y' '1/4-y,3/4-z,1/2+x' '1/4-y,1/4-z,+x' '3/4-y,1/4-z,1/2+x' '3/4-y,3/4-z,+x' '+y,+x,+z' '+y,1/2+x,1/2+z' '1/2+y,1/2+x,+z' '1/2+y,+x,1/2+z' '+x,+z,+y' '+x,1/2+z,1/2+y' '1/2+x,1/2+z,+y' '1/2+x,+z,1/2+y' '+z,+y,+x' '+z,1/2+y,1/2+x' '1/2+z,1/2+y,+x' '1/2+z,+y,1/2+x' '1/4+y,-x,1/4+z' '1/4+y,1/2-x,3/4+z' '3/4+y,1/2-x,1/4+z' '3/4+y,-x,3/4+z' '1/4+x,-z,1/4+y' '1/4+x,1/2-z,3/4+y' '3/4+x,1/2-z,1/4+y' '3/4+x,-z,3/4+y' '1/4+z,-y,1/4+x' '1/4+z,1/2-y,3/4+x' '3/4+z,1/2-y,1/4+x' '3/4+z,-y,3/4+x' '-y,1/4+x,1/4+z' '-y,3/4+x,3/4+z' '1/2-y,3/4+x,1/4+z' '1/2-y,1/4+x,3/4+z' '-x,1/4+z,1/4+y' '-x,3/4+z,3/4+y' '1/2-x,3/4+z,1/4+y' '1/2-x,1/4+z,3/4+y' '-z,1/4+y,1/4+x' '-z,3/4+y,3/4+x' '1/2-z,3/4+y,1/4+x' '1/2-z,1/4+y,3/4+x' '3/4-y,1/4-x,1/2+z' '3/4-y,3/4-x,+z' '1/4-y,3/4-x,1/2+z' '1/4-y,1/4-x,+z' '3/4-x,1/4-z,1/2+y' '3/4-x,3/4-z,+y' '1/4-x,3/4-z,1/2+y' '1/4-x,1/4-z,+y' '3/4-z,1/4-y,1/2+x' '3/4-z,3/4-y,+x' '1/4-z,3/4-y,1/2+x' '1/4-z,1/4-y,+x' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '-z,-x,-y' '-z,1/2-x,1/2-y' '1/2-z,1/2-x,-y' '1/2-z,-x,1/2-y' '-y,-z,-x' '-y,1/2-z,1/2-x' '1/2-y,1/2-z,-x' '1/2-y,-z,1/2-x' '+x,3/4-y,3/4-z' '+x,1/4-y,1/4-z' '1/2+x,1/4-y,3/4-z' '1/2+x,3/4-y,1/4-z' '+z,3/4-x,3/4-y' '+z,1/4-x,1/4-y' '1/2+z,1/4-x,3/4-y' '1/2+z,3/4-x,1/4-y' '+y,3/4-z,3/4-x' '+y,1/4-z,1/4-x' '1/2+y,1/4-z,3/4-x' '1/2+y,3/4-z,1/4-x' '3/4-x,+y,3/4-z' '3/4-x,1/2+y,1/4-z' '1/4-x,1/2+y,3/4-z' '1/4-x,+y,1/4-z' '3/4-z,+x,3/4-y' '3/4-z,1/2+x,1/4-y' '1/4-z,1/2+x,3/4-y' '1/4-z,+x,1/4-y' '3/4-y,+z,3/4-x' '3/4-y,1/2+z,1/4-x' '1/4-y,1/2+z,3/4-x' '1/4-y,+z,1/4-x' '3/4+x,1/4+y,1/2-z' '3/4+x,3/4+y,-z' '1/4+x,3/4+y,1/2-z' '1/4+x,1/4+y,-z' '3/4+z,1/4+x,1/2-y' '3/4+z,3/4+x,-y' '1/4+z,3/4+x,1/2-y' '1/4+z,1/4+x,-y' '3/4+y,1/4+z,1/2-x' '3/4+y,3/4+z,-x' '1/4+y,3/4+z,1/2-x' '1/4+y,1/4+z,-x' '-y,-x,-z' '-y,1/2-x,1/2-z' '1/2-y,1/2-x,-z' '1/2-y,-x,1/2-z' '-x,-z,-y' '-x,1/2-z,1/2-y' '1/2-x,1/2-z,-y' '1/2-x,-z,1/2-y' '-z,-y,-x' '-z,1/2-y,1/2-x' '1/2-z,1/2-y,-x' '1/2-z,-y,1/2-x' '3/4-y,+x,3/4-z' '3/4-y,1/2+x,1/4-z' '1/4-y,1/2+x,3/4-z' '1/4-y,+x,1/4-z' '3/4-x,+z,3/4-y' '3/4-x,1/2+z,1/4-y' '1/4-x,1/2+z,3/4-y' '1/4-x,+z,1/4-y' '3/4-z,+y,3/4-x' '3/4-z,1/2+y,1/4-x' '1/4-z,1/2+y,3/4-x' '1/4-z,+y,1/4-x' '+y,3/4-x,3/4-z' '+y,1/4-x,1/4-z' '1/2+y,1/4-x,3/4-z' '1/2+y,3/4-x,1/4-z' '+x,3/4-z,3/4-y' '+x,1/4-z,1/4-y' '1/2+x,1/4-z,3/4-y' '1/2+x,3/4-z,1/4-y' '+z,3/4-y,3/4-x' '+z,1/4-y,1/4-x' '1/2+z,1/4-y,3/4-x' '1/2+z,3/4-y,1/4-x' '1/4+y,3/4+x,1/2-z' '1/4+y,1/4+x,-z' '3/4+y,1/4+x,1/2-z' '3/4+y,3/4+x,-z' '1/4+x,3/4+z,1/2-y' '1/4+x,1/4+z,-y' '3/4+x,1/4+z,1/2-y' '3/4+x,3/4+z,-y' '1/4+z,3/4+y,1/2-x' '1/4+z,1/4+y,-x' '3/4+z,1/4+y,1/2-x' '3/4+z,3/4+y,-x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2129 0.1360 0.2129 O2 O 0.1598 0.0902 0.2360 O3 O 0.2118 0.1133 0.2831 O4 O 0.1604 0.1604 0.2587 O5 O 0.3430 0.0930 0.2500 O6 O 0.2851 0.1220 0.2851 O7 O 0.3270 0.1645 0.2418 O8 O 0.2804 0.2106 0.3699 O9 O 0.2995 0.2012 0.2995 O10 O 0.2374 0.2374 0.3162 O11 O 0.4351 0.2143 0.3149 O12 O 0.4237 0.2530 0.2530 O13 O 0.4295 0.1796 0.2500 T1 Si 0.1862 0.1250 0.2477 T2 Si 0.3095 0.1231 0.2471 T3 Si 0.2647 0.2035 0.3282 T4 Si 0.4146 0.2144 0.2746 avogadro-1.1.1/crystals/zeolites/MEP.cif0000644000175000001440000000417412250371054017340 0ustar marcususersdata_MEP #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.7050(0) _cell_length_b 13.7050(0) _cell_length_c 13.7050(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m 3 n' _symmetry_Int_Tables_number 223 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+z,+x,+y' '+y,+z,+x' '+x,+y,-z' '+z,+x,-y' '+y,+z,-x' '-x,+y,+z' '-z,+x,+y' '-y,+z,+x' '-x,+y,-z' '-z,+x,-y' '-y,+z,-x' '1/2+y,1/2+x,1/2+z' '1/2+x,1/2+z,1/2+y' '1/2+z,1/2+y,1/2+x' '1/2+y,1/2+x,1/2-z' '1/2+x,1/2+z,1/2-y' '1/2+z,1/2+y,1/2-x' '1/2+y,1/2-x,1/2+z' '1/2+x,1/2-z,1/2+y' '1/2+z,1/2-y,1/2+x' '1/2+y,1/2-x,1/2-z' '1/2+x,1/2-z,1/2-y' '1/2+z,1/2-y,1/2-x' '-x,-y,-z' '-z,-x,-y' '-y,-z,-x' '-x,-y,+z' '-z,-x,+y' '-y,-z,+x' '+x,-y,-z' '+z,-x,-y' '+y,-z,-x' '+x,-y,+z' '+z,-x,+y' '+y,-z,+x' '1/2-y,1/2-x,1/2-z' '1/2-x,1/2-z,1/2-y' '1/2-z,1/2-y,1/2-x' '1/2-y,1/2-x,1/2+z' '1/2-x,1/2-z,1/2+y' '1/2-z,1/2-y,1/2+x' '1/2-y,1/2+x,1/2-z' '1/2-x,1/2+z,1/2-y' '1/2-z,1/2+y,1/2-x' '1/2-y,1/2+x,1/2+z' '1/2-x,1/2+z,1/2+y' '1/2-z,1/2+y,1/2+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.3439 0.0000 O2 O 0.0962 0.2462 0.1344 O3 O 0.0000 0.4042 0.1822 O4 O 0.2500 0.2500 0.2500 T1 Si 0.0000 0.3098 0.1124 T2 Si 0.1823 0.1823 0.1823 T3 Si 0.2500 0.0000 0.5000 avogadro-1.1.1/crystals/zeolites/LOS.cif0000644000175000001440000000327412250371054017354 0ustar marcususersdata_LOS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.6070(0) _cell_length_b 12.6070(0) _cell_length_c 10.3400(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4711 0.2355 0.2500 O2 O 0.3372 0.0304 0.1229 O3 O 0.5319 0.0637 0.2500 O4 O 0.1163 0.8837 0.0326 T1 Si 0.4195 0.0900 0.2500 T2 Si 0.2482 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/SOS.cif0000644000175000001440000000326612250371054017364 0ustar marcususersdata_SOS #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.4370(0) _cell_length_b 7.1160(0) _cell_length_c 9.7260(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m n a' _symmetry_Int_Tables_number 53 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-x,+y,+z' '1/2+x,-y,1/2+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '+x,-y,-z' '1/2-x,+y,1/2-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O4 O 0.2046 0.5000 0.0000 O5 O 0.1245 0.6037 0.8003 O6 O 0.1726 0.0000 0.0000 O7 O 0.1751 0.7358 0.1966 O8 O 0.2500 0.5550 0.7500 O9 O 0.0939 0.9639 0.7960 O10 O 0.0779 0.2328 0.9796 O11 O 0.0000 0.2901 0.1907 T1 Si 0.1884 0.5177 0.1614 T2 Si 0.0737 0.2402 0.1452 T3 Si 0.1307 0.8811 0.1112 avogadro-1.1.1/crystals/zeolites/ATV.cif0000644000175000001440000000324512250371054017347 0ustar marcususersdata_ATV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.5790(0) _cell_length_b 15.3110(0) _cell_length_c 9.6610(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m m a' _symmetry_Int_Tables_number 67 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,1/2-y,+z' '1/2+x,-y,+z' '-x,1/2-y,+z' '1/2-x,-y,+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,1/2+y,-z' '1/2-x,+y,-z' '+x,1/2+y,-z' '1/2+x,+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2500 0.1251 0.5000 O2 O 0.2498 0.1642 0.2351 O3 O 0.2500 0.0000 0.3133 O4 O 0.0000 0.0963 0.3498 O5 O 0.5000 0.2500 0.1572 O6 O 0.2500 0.2500 0.0000 T1 Si 0.1874 0.0963 0.3497 T2 Si 0.3126 0.2500 0.1568 avogadro-1.1.1/crystals/zeolites/ATN.cif0000644000175000001440000000341212250371054017333 0ustar marcususersdata_ATN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.0710(0) _cell_length_b 13.0710(0) _cell_length_c 5.2560(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3567 0.1433 0.7500 O2 O 0.5000 0.2419 0.0000 O3 O 0.3118 0.3118 0.0000 T1 Si 0.3810 0.2101 0.0000 avogadro-1.1.1/crystals/zeolites/AEI.cif0000644000175000001440000000347612250371054017321 0ustar marcususersdata_AEI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.6770(0) _cell_length_b 12.6070(0) _cell_length_c 18.4970(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.0004 0.1614 O2 O 0.1449 0.0438 0.2500 O3 O 0.1252 0.1515 0.1293 O4 O 0.1804 0.9517 0.1253 O5 O 0.1465 0.8322 0.0116 O6 O 0.0000 0.7364 0.9468 O7 O 0.1794 0.6672 0.9281 O8 O 0.7404 0.0000 0.0000 T1 Si 0.1126 0.0369 0.1664 T2 Si 0.1128 0.7711 0.9394 T3 Si 0.7733 0.9042 0.0521 avogadro-1.1.1/crystals/zeolites/IFR.cif0000644000175000001440000000346312250371054017337 0ustar marcususersdata_IFR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.6280(0) _cell_length_b 13.4360(0) _cell_length_c 7.6290(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 102.3220(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0609 0.6257 0.8418 O2 O 0.9591 0.5000 0.6849 O3 O 0.9237 0.6848 0.7445 O4 O 0.0000 0.6468 0.5000 O5 O 0.1800 0.6834 0.0700 O6 O 0.1695 0.5000 0.9488 O7 O 0.1850 0.6472 0.7334 O8 O 0.6836 0.6841 0.3252 O9 O 0.7900 0.6277 0.5914 O10 O 0.7328 0.5000 0.3388 T1 Si 0.8375 0.7030 0.7351 T2 Si 0.9859 0.6141 0.6928 T3 Si 0.1488 0.6143 0.8981 T4 Si 0.7553 0.6146 0.3805 avogadro-1.1.1/crystals/zeolites/NPO.cif0000644000175000001440000000262312250371054017350 0ustar marcususersdata_NPO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.3910(0) _cell_length_b 8.3910(0) _cell_length_c 5.2590(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P -6 2 c' _symmetry_Int_Tables_number 190 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1691 0.6934 0.7500 O2 O 0.0000 0.3782 0.5000 T1 Si 0.1169 0.4806 0.7500 avogadro-1.1.1/crystals/zeolites/PAU.cif0000644000175000001440000000735312250371054017346 0ustar marcususersdata_PAU #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 34.8380(0) _cell_length_b 34.8380(0) _cell_length_c 34.8380(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m 3 m' _symmetry_Int_Tables_number 229 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '+z,+x,+y' '1/2+z,1/2+x,1/2+y' '+y,+z,+x' '1/2+y,1/2+z,1/2+x' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '+z,+x,-y' '1/2+z,1/2+x,1/2-y' '+y,+z,-x' '1/2+y,1/2+z,1/2-x' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '-z,+x,+y' '1/2-z,1/2+x,1/2+y' '-y,+z,+x' '1/2-y,1/2+z,1/2+x' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '-z,+x,-y' '1/2-z,1/2+x,1/2-y' '-y,+z,-x' '1/2-y,1/2+z,1/2-x' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,+z,+y' '1/2+x,1/2+z,1/2+y' '+z,+y,+x' '1/2+z,1/2+y,1/2+x' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '+x,+z,-y' '1/2+x,1/2+z,1/2-y' '+z,+y,-x' '1/2+z,1/2+y,1/2-x' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '+x,-z,+y' '1/2+x,1/2-z,1/2+y' '+z,-y,+x' '1/2+z,1/2-y,1/2+x' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,-z,-y' '1/2+x,1/2-z,1/2-y' '+z,-y,-x' '1/2+z,1/2-y,1/2-x' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '-z,-x,-y' '1/2-z,1/2-x,1/2-y' '-y,-z,-x' '1/2-y,1/2-z,1/2-x' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '-z,-x,+y' '1/2-z,1/2-x,1/2+y' '-y,-z,+x' '1/2-y,1/2-z,1/2+x' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '+z,-x,-y' '1/2+z,1/2-x,1/2-y' '+y,-z,-x' '1/2+y,1/2-z,1/2-x' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '+z,-x,+y' '1/2+z,1/2-x,1/2+y' '+y,-z,+x' '1/2+y,1/2-z,1/2+x' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,-z,-y' '1/2-x,1/2-z,1/2-y' '-z,-y,-x' '1/2-z,1/2-y,1/2-x' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-z,+y' '1/2-x,1/2-z,1/2+y' '-z,-y,+x' '1/2-z,1/2-y,1/2+x' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,+z,-y' '1/2-x,1/2+z,1/2-y' '-z,+y,-x' '1/2-z,1/2+y,1/2-x' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,+z,+y' '1/2-x,1/2+z,1/2+y' '-z,+y,+x' '1/2-z,1/2+y,1/2+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3064 0.2386 0.1427 O2 O 0.3024 0.2146 0.0713 O3 O 0.3574 0.2619 0.0920 O4 O 0.2863 0.2863 0.0878 O5 O 0.5000 0.1200 0.0512 O6 O 0.4464 0.0705 0.0705 O7 O 0.4497 0.0968 0.0000 O8 O 0.4280 0.1422 0.0562 O9 O 0.3570 0.1670 0.0499 O10 O 0.4092 0.1889 0.0000 O11 O 0.4120 0.2143 0.0711 O12 O 0.2857 0.1428 0.0558 O13 O 0.3052 0.1898 0.0000 O14 O 0.2142 0.1189 0.0509 O15 O 0.2651 0.0963 0.0000 O16 O 0.2689 0.0708 0.0708 O17 O 0.1632 0.0966 0.0000 O18 O 0.1595 0.0708 0.0708 O19 O 0.1429 0.1429 0.0560 O20 O 0.3022 0.2140 0.2140 T1 Si 0.3131 0.2503 0.0985 T2 Si 0.4561 0.1075 0.0445 T3 Si 0.4015 0.1781 0.0443 T4 Si 0.3126 0.1785 0.0442 T5 Si 0.2585 0.1072 0.0444 T6 Si 0.1700 0.1073 0.0444 T7 Si 0.3129 0.2500 0.1871 T8 Si 0.4016 0.2500 0.0984 avogadro-1.1.1/crystals/zeolites/AET.cif0000644000175000001440000000422612250371054017326 0ustar marcususersdata_AET #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 32.8290(0) _cell_length_b 14.3800(0) _cell_length_c 8.3740(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m c m' _symmetry_Int_Tables_number 63 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,1/2-z' '1/2+x,1/2+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0880 0.1095 0.7500 O2 O 0.0402 0.1564 0.5111 O3 O 0.0816 0.0000 0.5000 O4 O 0.1197 0.1603 0.4760 O5 O 0.2141 0.1107 0.7500 O6 O 0.2730 0.1208 0.5376 O7 O 0.2136 0.0000 0.5000 O8 O 0.1994 0.1783 0.4641 O9 O 0.1991 0.4151 0.7500 O10 O 0.1680 0.5000 0.5000 O11 O 0.1542 0.3212 0.5454 O12 O 0.1534 0.2609 0.2500 O13 O 0.0000 0.8888 0.7500 O14 O 0.0000 0.0000 0.5000 T1 Si 0.0824 0.1064 0.5593 T2 Si 0.2251 0.1023 0.5633 T3 Si 0.1869 0.4038 0.5649 T4 Si 0.1566 0.2299 0.0657 T5 Si 0.0000 0.8935 0.5583 avogadro-1.1.1/crystals/zeolites/SAT.cif0000644000175000001440000000420012250371054017334 0ustar marcususersdata_SAT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.8710(0) _cell_length_b 12.8710(0) _cell_length_c 30.5770(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'R -3 m' _symmetry_Int_Tables_number 166 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '2/3+x,1/3+y,1/3+z' '1/3+x,2/3+y,2/3+z' '-y,+x-y,+z' '2/3-y,1/3+x-y,1/3+z' '1/3-y,2/3+x-y,2/3+z' '-x+y,-x,+z' '2/3-x+y,1/3-x,1/3+z' '1/3-x+y,2/3-x,2/3+z' '-y,-x,+z' '2/3-y,1/3-x,1/3+z' '1/3-y,2/3-x,2/3+z' '-x+y,+y,+z' '2/3-x+y,1/3+y,1/3+z' '1/3-x+y,2/3+y,2/3+z' '+x,+x-y,+z' '2/3+x,1/3+x-y,1/3+z' '1/3+x,2/3+x-y,2/3+z' '-x,-y,-z' '2/3-x,1/3-y,1/3-z' '1/3-x,2/3-y,2/3-z' '+y,-x+y,-z' '2/3+y,1/3-x+y,1/3-z' '1/3+y,2/3-x+y,2/3-z' '+x-y,+x,-z' '2/3+x-y,1/3+x,1/3-z' '1/3+x-y,2/3+x,2/3-z' '+y,+x,-z' '2/3+y,1/3+x,1/3-z' '1/3+y,2/3+x,2/3-z' '+x-y,-y,-z' '2/3+x-y,1/3-y,1/3-z' '1/3+x-y,2/3-y,2/3-z' '-x,-x+y,-z' '2/3-x,1/3-x+y,1/3-z' '1/3-x,2/3-x+y,2/3-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.6667 0.6853 0.3333 O2 O 0.8712 0.7423 0.2955 O3 O 0.6856 0.7037 0.2478 O4 O 0.7947 0.8974 0.2967 O5 O 0.6079 0.9412 0.1667 O6 O 0.4642 0.9283 0.2302 O7 O 0.5271 0.7635 0.2230 T1 Si 0.7546 0.7574 0.2933 T2 Si 0.5711 0.9039 0.2169 avogadro-1.1.1/crystals/zeolites/RUT.cif0000644000175000001440000000361112250371054017364 0ustar marcususersdata_RUT #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.2240(0) _cell_length_b 13.2860(0) _cell_length_c 12.4540(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 114.8420(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1619 0.1440 0.0040 O2 O 0.3031 0.0000 0.1171 O3 O 0.3765 0.1822 0.1081 O4 O 0.2654 0.1475 0.2364 O5 O 0.3386 0.0000 0.3906 O6 O 0.3908 0.1870 0.4606 O7 O 0.1851 0.1232 0.3953 O8 O 0.0182 0.1685 0.1935 O9 O 0.0144 0.0000 0.3022 O10 O 0.9905 0.1733 0.3906 O11 O 0.0000 0.2609 0.0000 T1 Si 0.2766 0.1183 0.1164 T2 Si 0.2951 0.1147 0.3708 T3 Si 0.0520 0.1163 0.3206 T4 Si 0.9328 0.2228 0.0743 T5 Si 0.0000 0.2432 0.5000 avogadro-1.1.1/crystals/zeolites/AEL.cif0000644000175000001440000000347612250371054017324 0ustar marcususersdata_AEL #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 8.3120(0) _cell_length_b 18.7290(0) _cell_length_c 13.3920(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m m a' _symmetry_Int_Tables_number 74 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+x,1/2-y,+z' '1/2+x,-y,1/2+z' '-x,1/2-y,+z' '1/2-x,-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-x,1/2+y,-z' '1/2-x,+y,1/2-z' '+x,1/2+y,-z' '1/2+x,+y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.7956 0.9547 0.1245 O2 O 0.7500 0.0609 0.2500 O3 O 0.7090 0.0808 0.0576 O4 O 0.0000 0.0619 0.1297 O5 O 0.2615 0.1799 0.9198 O6 O 0.5000 0.0880 0.9105 O7 O 0.7500 0.2500 0.7500 O8 O 0.0000 0.2500 0.8703 T1 Si 0.8138 0.0395 0.1406 T2 Si 0.3141 0.0986 0.9408 T3 Si 0.8068 0.2500 0.8647 avogadro-1.1.1/crystals/zeolites/KFI.cif0000644000175000001440000000541612250371054017330 0ustar marcususersdata_KFI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 18.5780(0) _cell_length_b 18.5780(0) _cell_length_c 18.5780(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I m 3 m' _symmetry_Int_Tables_number 229 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '+z,+x,+y' '1/2+z,1/2+x,1/2+y' '+y,+z,+x' '1/2+y,1/2+z,1/2+x' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '+z,+x,-y' '1/2+z,1/2+x,1/2-y' '+y,+z,-x' '1/2+y,1/2+z,1/2-x' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '-z,+x,+y' '1/2-z,1/2+x,1/2+y' '-y,+z,+x' '1/2-y,1/2+z,1/2+x' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '-z,+x,-y' '1/2-z,1/2+x,1/2-y' '-y,+z,-x' '1/2-y,1/2+z,1/2-x' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,+z,+y' '1/2+x,1/2+z,1/2+y' '+z,+y,+x' '1/2+z,1/2+y,1/2+x' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '+x,+z,-y' '1/2+x,1/2+z,1/2-y' '+z,+y,-x' '1/2+z,1/2+y,1/2-x' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '+x,-z,+y' '1/2+x,1/2-z,1/2+y' '+z,-y,+x' '1/2+z,1/2-y,1/2+x' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,-z,-y' '1/2+x,1/2-z,1/2-y' '+z,-y,-x' '1/2+z,1/2-y,1/2-x' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '-z,-x,-y' '1/2-z,1/2-x,1/2-y' '-y,-z,-x' '1/2-y,1/2-z,1/2-x' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '-z,-x,+y' '1/2-z,1/2-x,1/2+y' '-y,-z,+x' '1/2-y,1/2-z,1/2+x' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '+z,-x,-y' '1/2+z,1/2-x,1/2-y' '+y,-z,-x' '1/2+y,1/2-z,1/2-x' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '+z,-x,+y' '1/2+z,1/2-x,1/2+y' '+y,-z,+x' '1/2+y,1/2-z,1/2+x' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,-z,-y' '1/2-x,1/2-z,1/2-y' '-z,-y,-x' '1/2-z,1/2-y,1/2-x' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-z,+y' '1/2-x,1/2-z,1/2+y' '-z,-y,+x' '1/2-z,1/2-y,1/2+x' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,+z,-y' '1/2-x,1/2+z,1/2-y' '-z,+y,-x' '1/2-z,1/2+y,1/2-x' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,+z,+y' '1/2-x,1/2+z,1/2+y' '-z,+y,+x' '1/2-z,1/2+y,1/2+x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.1856 0.3348 O2 O 0.0918 0.2448 0.2448 O3 O 0.1158 0.2500 0.3842 O4 O 0.1271 0.1271 0.3149 T1 Si 0.0837 0.2020 0.3197 avogadro-1.1.1/crystals/zeolites/EAB.cif0000644000175000001440000000334712250371054017307 0ustar marcususersdata_EAB #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.1780(0) _cell_length_b 13.1780(0) _cell_length_c 15.0050(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,1/2+z' '+y,-x+y,1/2+z' '+x-y,+x,1/2+z' '-y,-x,+z' '-x+y,+y,+z' '+x,+x-y,+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,1/2-z' '-y,+x-y,1/2-z' '-x+y,-x,1/2-z' '+y,+x,-z' '+x-y,-y,-z' '-x,-x+y,-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3217 0.0238 0.0857 O2 O 0.4754 0.2377 0.1362 O3 O 0.4014 0.0633 0.2500 O4 O 0.5397 0.0794 0.1179 O5 O 0.1125 0.8875 0.0185 T1 Si 0.4345 0.1010 0.1474 T2 Si 0.2393 0.0000 0.0000 avogadro-1.1.1/crystals/zeolites/AWW.cif0000644000175000001440000000324712250371054017355 0ustar marcususersdata_AWW #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.6340(0) _cell_length_b 13.6340(0) _cell_length_c 7.6270(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P 4/n m m' _symmetry_Int_Tables_number 129 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-y,+x,+z' '1/2-x,1/2-y,+z' '+y,1/2-x,+z' '1/2-x,+y,+z' '+y,+x,+z' '+x,1/2-y,+z' '1/2-y,1/2-x,+z' '-x,-y,-z' '1/2+y,-x,-z' '1/2+x,1/2+y,-z' '-y,1/2+x,-z' '1/2+x,-y,-z' '-y,-x,-z' '-x,1/2+y,-z' '1/2+y,1/2+x,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.5004 0.7500 0.8699 O2 O 0.4330 0.8889 0.6630 O3 O 0.3922 0.8922 0.0000 O4 O 0.5716 0.9284 0.8921 O5 O 0.1210 0.7500 0.4442 T1 Si 0.4742 0.8648 0.8560 T2 Si 0.1373 0.8627 0.5000 avogadro-1.1.1/crystals/zeolites/NAB.cif0000644000175000001440000000307412250371054017315 0ustar marcususersdata_NAB #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.1840(0) _cell_length_b 7.1840(0) _cell_length_c 12.0430(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I -4 m 2' _symmetry_Int_Tables_number 119 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.1825 0.0778 O2 O 0.0000 0.0000 0.7364 O3 O 0.3163 0.8163 0.7500 T1 Si 0.0000 0.0000 0.0000 T2 Si 0.2066 0.0000 0.7890 avogadro-1.1.1/crystals/zeolites/FAU.cif0000644000175000001440000001127212250371054017327 0ustar marcususersdata_FAU #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 24.3450(0) _cell_length_b 24.3450(0) _cell_length_c 24.3450(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'F d 3 m' _symmetry_Int_Tables_number 227 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '+x,1/2+y,1/2+z' '1/2+x,1/2+y,+z' '1/2+x,+y,1/2+z' '+z,+x,+y' '+z,1/2+x,1/2+y' '1/2+z,1/2+x,+y' '1/2+z,+x,1/2+y' '+y,+z,+x' '+y,1/2+z,1/2+x' '1/2+y,1/2+z,+x' '1/2+y,+z,1/2+x' '-x,1/4+y,1/4+z' '-x,3/4+y,3/4+z' '1/2-x,3/4+y,1/4+z' '1/2-x,1/4+y,3/4+z' '-z,1/4+x,1/4+y' '-z,3/4+x,3/4+y' '1/2-z,3/4+x,1/4+y' '1/2-z,1/4+x,3/4+y' '-y,1/4+z,1/4+x' '-y,3/4+z,3/4+x' '1/2-y,3/4+z,1/4+x' '1/2-y,1/4+z,3/4+x' '1/4+x,-y,1/4+z' '1/4+x,1/2-y,3/4+z' '3/4+x,1/2-y,1/4+z' '3/4+x,-y,3/4+z' '1/4+z,-x,1/4+y' '1/4+z,1/2-x,3/4+y' '3/4+z,1/2-x,1/4+y' '3/4+z,-x,3/4+y' '1/4+y,-z,1/4+x' '1/4+y,1/2-z,3/4+x' '3/4+y,1/2-z,1/4+x' '3/4+y,-z,3/4+x' '1/4-x,3/4-y,1/2+z' '1/4-x,1/4-y,+z' '3/4-x,1/4-y,1/2+z' '3/4-x,3/4-y,+z' '1/4-z,3/4-x,1/2+y' '1/4-z,1/4-x,+y' '3/4-z,1/4-x,1/2+y' '3/4-z,3/4-x,+y' '1/4-y,3/4-z,1/2+x' '1/4-y,1/4-z,+x' '3/4-y,1/4-z,1/2+x' '3/4-y,3/4-z,+x' '+y,+x,+z' '+y,1/2+x,1/2+z' '1/2+y,1/2+x,+z' '1/2+y,+x,1/2+z' '+x,+z,+y' '+x,1/2+z,1/2+y' '1/2+x,1/2+z,+y' '1/2+x,+z,1/2+y' '+z,+y,+x' '+z,1/2+y,1/2+x' '1/2+z,1/2+y,+x' '1/2+z,+y,1/2+x' '1/4+y,-x,1/4+z' '1/4+y,1/2-x,3/4+z' '3/4+y,1/2-x,1/4+z' '3/4+y,-x,3/4+z' '1/4+x,-z,1/4+y' '1/4+x,1/2-z,3/4+y' '3/4+x,1/2-z,1/4+y' '3/4+x,-z,3/4+y' '1/4+z,-y,1/4+x' '1/4+z,1/2-y,3/4+x' '3/4+z,1/2-y,1/4+x' '3/4+z,-y,3/4+x' '-y,1/4+x,1/4+z' '-y,3/4+x,3/4+z' '1/2-y,3/4+x,1/4+z' '1/2-y,1/4+x,3/4+z' '-x,1/4+z,1/4+y' '-x,3/4+z,3/4+y' '1/2-x,3/4+z,1/4+y' '1/2-x,1/4+z,3/4+y' '-z,1/4+y,1/4+x' '-z,3/4+y,3/4+x' '1/2-z,3/4+y,1/4+x' '1/2-z,1/4+y,3/4+x' '3/4-y,1/4-x,1/2+z' '3/4-y,3/4-x,+z' '1/4-y,3/4-x,1/2+z' '1/4-y,1/4-x,+z' '3/4-x,1/4-z,1/2+y' '3/4-x,3/4-z,+y' '1/4-x,3/4-z,1/2+y' '1/4-x,1/4-z,+y' '3/4-z,1/4-y,1/2+x' '3/4-z,3/4-y,+x' '1/4-z,3/4-y,1/2+x' '1/4-z,1/4-y,+x' '-x,-y,-z' '-x,1/2-y,1/2-z' '1/2-x,1/2-y,-z' '1/2-x,-y,1/2-z' '-z,-x,-y' '-z,1/2-x,1/2-y' '1/2-z,1/2-x,-y' '1/2-z,-x,1/2-y' '-y,-z,-x' '-y,1/2-z,1/2-x' '1/2-y,1/2-z,-x' '1/2-y,-z,1/2-x' '+x,3/4-y,3/4-z' '+x,1/4-y,1/4-z' '1/2+x,1/4-y,3/4-z' '1/2+x,3/4-y,1/4-z' '+z,3/4-x,3/4-y' '+z,1/4-x,1/4-y' '1/2+z,1/4-x,3/4-y' '1/2+z,3/4-x,1/4-y' '+y,3/4-z,3/4-x' '+y,1/4-z,1/4-x' '1/2+y,1/4-z,3/4-x' '1/2+y,3/4-z,1/4-x' '3/4-x,+y,3/4-z' '3/4-x,1/2+y,1/4-z' '1/4-x,1/2+y,3/4-z' '1/4-x,+y,1/4-z' '3/4-z,+x,3/4-y' '3/4-z,1/2+x,1/4-y' '1/4-z,1/2+x,3/4-y' '1/4-z,+x,1/4-y' '3/4-y,+z,3/4-x' '3/4-y,1/2+z,1/4-x' '1/4-y,1/2+z,3/4-x' '1/4-y,+z,1/4-x' '3/4+x,1/4+y,1/2-z' '3/4+x,3/4+y,-z' '1/4+x,3/4+y,1/2-z' '1/4+x,1/4+y,-z' '3/4+z,1/4+x,1/2-y' '3/4+z,3/4+x,-y' '1/4+z,3/4+x,1/2-y' '1/4+z,1/4+x,-y' '3/4+y,1/4+z,1/2-x' '3/4+y,3/4+z,-x' '1/4+y,3/4+z,1/2-x' '1/4+y,1/4+z,-x' '-y,-x,-z' '-y,1/2-x,1/2-z' '1/2-y,1/2-x,-z' '1/2-y,-x,1/2-z' '-x,-z,-y' '-x,1/2-z,1/2-y' '1/2-x,1/2-z,-y' '1/2-x,-z,1/2-y' '-z,-y,-x' '-z,1/2-y,1/2-x' '1/2-z,1/2-y,-x' '1/2-z,-y,1/2-x' '3/4-y,+x,3/4-z' '3/4-y,1/2+x,1/4-z' '1/4-y,1/2+x,3/4-z' '1/4-y,+x,1/4-z' '3/4-x,+z,3/4-y' '3/4-x,1/2+z,1/4-y' '1/4-x,1/2+z,3/4-y' '1/4-x,+z,1/4-y' '3/4-z,+y,3/4-x' '3/4-z,1/2+y,1/4-x' '1/4-z,1/2+y,3/4-x' '1/4-z,+y,1/4-x' '+y,3/4-x,3/4-z' '+y,1/4-x,1/4-z' '1/2+y,1/4-x,3/4-z' '1/2+y,3/4-x,1/4-z' '+x,3/4-z,3/4-y' '+x,1/4-z,1/4-y' '1/2+x,1/4-z,3/4-y' '1/2+x,3/4-z,1/4-y' '+z,3/4-y,3/4-x' '+z,1/4-y,1/4-x' '1/2+z,1/4-y,3/4-x' '1/2+z,3/4-y,1/4-x' '1/4+y,3/4+x,1/2-z' '1/4+y,1/4+x,-z' '3/4+y,1/4+x,1/2-z' '3/4+y,3/4+x,-z' '1/4+x,3/4+z,1/2-y' '1/4+x,1/4+z,-y' '3/4+x,1/4+z,1/2-y' '3/4+x,3/4+z,-y' '1/4+z,3/4+y,1/2-x' '1/4+z,1/4+y,-x' '3/4+z,1/4+y,1/2-x' '3/4+z,3/4+y,-x' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.8958 0.1042 0.0000 O2 O 0.9669 0.0762 0.0762 O3 O 0.9966 0.1429 0.9966 O4 O 0.9283 0.1770 0.0730 T1 Si 0.9469 0.1251 0.0364 avogadro-1.1.1/crystals/zeolites/THO.cif0000644000175000001440000000305112250371054017342 0ustar marcususersdata_THO #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 14.0000(0) _cell_length_b 7.0000(0) _cell_length_c 6.4820(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m a' _symmetry_Int_Tables_number 51 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,+z' '+x,-y,+z' '1/2-x,-y,+z' '-x,-y,-z' '1/2+x,-y,-z' '-x,+y,-z' '1/2+x,+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0000 0.0000 0.5000 O2 O 0.1551 0.1898 0.3818 O3 O 0.1550 0.0000 0.7368 O4 O 0.2500 0.5000 0.2635 O5 O 0.2500 0.1899 0.0268 T1 Si 0.1161 0.0000 0.5001 T2 Si 0.2500 0.2679 0.2634 T3 Si 0.2500 0.0000 0.8818 avogadro-1.1.1/crystals/zeolites/TUN.cif0000644000175000001440000001064512250371054017365 0ustar marcususersdata_TUN #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 27.8450(250) _cell_length_b 20.0150(170) _cell_length_c 19.5960(120) _cell_angle_alpha 90.0000(0) _cell_angle_beta 93.2000(700) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C 2/m' _symmetry_Int_Tables_number 12 _symmetry_cell_setting monoclinic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,-z' '1/2-x,1/2+y,-z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,+z' '1/2+x,1/2-y,+z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0447 0.0912 0.8988 O2 O 0.0874 0.2044 0.9346 O3 O 0.1355 0.1103 0.8747 O4 O 0.1102 0.0934 0.0006 O5 O 0.1222 0.1990 0.6381 O6 O 0.1272 0.2458 0.7628 O7 O 0.1172 0.1169 0.7419 O8 O 0.0450 0.1979 0.7104 O9 O 0.0493 0.0942 0.0989 O10 O 0.1150 0.0000 0.0952 O11 O 0.1405 0.1228 0.1263 O12 O 0.2026 0.0780 0.7914 O13 O 0.1275 0.0000 0.8022 O14 O 0.1399 0.3006 0.8834 O15 O 0.1160 0.3068 0.0111 O16 O 0.0507 0.3234 0.9102 O17 O 0.2072 0.2066 0.1736 O18 O 0.2975 0.1773 0.2085 O19 O 0.2372 0.2024 0.3031 O20 O 0.2664 0.2994 0.2250 O21 O 0.0423 0.3109 0.0893 O22 O 0.9955 0.2512 0.1850 O23 O 0.0038 0.3824 0.1854 O24 O 0.1219 0.2515 0.1330 O25 O 0.1322 0.1813 0.2455 O26 O 0.1189 0.3826 0.1211 O27 O 0.0073 0.0000 0.1676 O28 O 0.0077 0.1239 0.2122 O29 O 0.1216 0.4027 0.6434 O30 O 0.0401 0.4170 0.7039 O31 O 0.1167 0.3760 0.7753 O32 O 0.1115 0.5000 0.7313 O33 O 0.1338 0.4228 0.2487 O34 O 0.1572 0.5000 0.1475 O35 O 0.2071 0.3914 0.1756 O36 O 0.2377 0.3960 0.3045 O37 O 0.1694 0.2989 0.4458 O38 O 0.2206 0.4082 0.4345 O39 O 0.1483 0.4060 0.5157 O40 O 0.1320 0.4023 0.3813 O41 O 0.0526 0.3921 0.3036 O42 O 0.1201 0.3017 0.2946 O43 O 0.1918 0.1187 0.6027 O44 O 0.2288 0.0000 0.6261 O45 O 0.0199 0.5000 0.2408 O46 O 0.0492 0.2142 0.2936 O47 O 0.2112 0.3790 0.6169 O48 O 0.2840 0.3128 0.5702 O49 O 0.2044 0.2489 0.5992 O50 O 0.1442 0.1910 0.5103 O51 O 0.1266 0.1996 0.3774 O52 O 0.1765 0.5000 0.6027 T1 Si 0.1026 0.1900 0.7133 T2 Si 0.9978 0.3169 0.1381 T3 Si 0.1505 0.1902 0.1695 T4 Si 0.0943 0.1250 0.9273 T5 Si 0.1000 0.3129 0.0885 T6 Si 0.0048 0.0774 0.1451 T7 Si 0.0977 0.4236 0.7133 T8 Si 0.1541 0.4239 0.1734 T9 Si 0.1036 0.0776 0.0801 T10 Si 0.2523 0.3772 0.2285 T11 Si 0.1457 0.0764 0.8025 T12 Si 0.1675 0.3792 0.4447 T13 Si 0.1098 0.3797 0.3073 T14 Si 0.2408 0.0785 0.6221 T15 Si 0.0088 0.4227 0.2564 T16 Si 0.0021 0.1969 0.2454 T17 Si 0.2402 0.3094 0.6204 T18 Si 0.1463 0.3115 0.8030 T19 Si 0.1638 0.2191 0.4400 T20 Si 0.1065 0.2240 0.3029 T21 Si 0.1640 0.4218 0.5943 T22 Si 0.0987 0.2833 0.9351 T23 Si 0.1658 0.1896 0.5884 T24 Si 0.2518 0.2217 0.2272 avogadro-1.1.1/crystals/zeolites/VSV.cif0000644000175000001440000000377712250371054017405 0ustar marcususersdata_VSV #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 7.1560(0) _cell_length_b 7.1560(0) _cell_length_c 41.8420(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 41/a m d' _symmetry_Int_Tables_number 141 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '3/4-y,1/4+x,3/4+z' '1/4-y,3/4+x,1/4+z' '1/2-x,-y,1/2+z' '-x,1/2-y,+z' '3/4+y,3/4-x,1/4+z' '1/4+y,1/4-x,3/4+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '1/4+y,1/4+x,3/4+z' '3/4+y,3/4+x,1/4+z' '1/2+x,-y,1/2+z' '+x,1/2-y,+z' '1/4-y,3/4-x,1/4+z' '3/4-y,1/4-x,3/4+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '1/4+y,3/4-x,1/4-z' '3/4+y,1/4-x,3/4-z' '1/2+x,+y,1/2-z' '+x,1/2+y,-z' '1/4-y,1/4+x,3/4-z' '3/4-y,3/4+x,1/4-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '3/4-y,3/4-x,1/4-z' '1/4-y,1/4-x,3/4-z' '1/2-x,+y,1/2-z' '-x,1/2+y,-z' '3/4+y,1/4+x,3/4-z' '1/4+y,3/4+x,1/4-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.3164 0.0000 0.2277 O2 O 0.1834 0.8158 0.1782 O3 O 0.5000 0.0000 0.1736 O4 O 0.0000 0.0000 0.0788 O5 O 0.0000 0.2500 0.1250 T1 Si 0.2942 0.0000 0.1894 T2 Si 0.0000 0.2198 0.0869 T3 Si 0.5000 0.0000 0.2500 avogadro-1.1.1/crystals/zeolites/MEL.cif0000644000175000001440000000442712250371054017335 0ustar marcususersdata_MEL #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 20.2700(0) _cell_length_b 20.2700(0) _cell_length_c 13.4590(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I -4 m 2' _symmetry_Int_Tables_number 119 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0950 0.1220 0.0935 O2 O 0.0976 0.2516 0.0962 O3 O 0.0888 0.1856 0.2634 O4 O 0.1994 0.1840 0.1615 O5 O 0.1207 0.2002 0.4514 O6 O 0.0983 0.3044 0.3405 O7 O 0.0000 0.2267 0.3919 O8 O 0.3001 0.1219 0.0812 O9 O 0.3148 0.1852 0.2500 O10 O 0.2976 0.2517 0.0846 O11 O 0.2952 0.0000 0.0145 O12 O 0.3786 0.0847 0.9362 O13 O 0.0000 0.3818 0.3912 O14 O 0.0818 0.4182 0.2500 O15 O 0.0000 0.0876 0.9710 T1 Si 0.1203 0.1858 0.1536 T2 Si 0.0768 0.2292 0.3618 T3 Si 0.2779 0.1857 0.1439 T4 Si 0.3063 0.0760 0.9840 T5 Si 0.0756 0.3799 0.3544 T6 Si 0.0762 0.0762 0.0000 T7 Si 0.1930 0.1930 0.5000 avogadro-1.1.1/crystals/zeolites/AFI.cif0000644000175000001440000000322712250371054017314 0ustar marcususersdata_AFI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 13.8270(0) _cell_length_b 13.8270(0) _cell_length_c 8.5800(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 120.0000(0) _symmetry_space_group_name_H-M 'P 6/m c c' _symmetry_Int_Tables_number 192 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '-y,+x-y,+z' '-x+y,-x,+z' '-x,-y,+z' '+y,-x+y,+z' '+x-y,+x,+z' '-y,-x,1/2+z' '-x+y,+y,1/2+z' '+x,+x-y,1/2+z' '+y,+x,1/2+z' '+x-y,-y,1/2+z' '-x,-x+y,1/2+z' '-x,-y,-z' '+y,-x+y,-z' '+x-y,+x,-z' '+x,+y,-z' '-y,+x-y,-z' '-x+y,-x,-z' '+y,+x,1/2-z' '+x-y,-y,1/2-z' '-x,-x+y,1/2-z' '-y,-x,1/2-z' '-x+y,+y,1/2-z' '+x,+x-y,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4565 0.3333 0.0000 O2 O 0.3693 0.3693 0.2500 O3 O 0.4200 0.2100 0.2500 O4 O 0.5798 0.4202 0.2500 T1 Si 0.4565 0.3334 0.1874 avogadro-1.1.1/crystals/zeolites/AFR.cif0000644000175000001440000000354312250371054017326 0ustar marcususersdata_AFR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 22.3050(0) _cell_length_b 13.5670(0) _cell_length_c 6.9720(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'P m m n' _symmetry_Int_Tables_number 59 _space_group.IT_coordinate_system_code '2' _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2-x,+y,+z' '+x,1/2-y,+z' '1/2-x,1/2-y,+z' '-x,-y,-z' '1/2+x,-y,-z' '-x,1/2+y,-z' '1/2+x,1/2+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.1485 0.1237 0.3146 O2 O 0.0308 0.1123 0.3118 O3 O 0.0909 0.0646 0.6227 O4 O 0.0845 0.2500 0.5139 O5 O 0.1476 0.0684 0.9533 O6 O 0.1775 0.2500 0.0439 O7 O 0.2500 0.1033 0.1271 O8 O 0.9708 0.2500 0.1287 O9 O 0.0342 0.1204 0.9353 O10 O 0.9354 0.0653 0.1106 T1 Si 0.0887 0.1376 0.4408 T2 Si 0.1809 0.1364 0.1098 T3 Si 0.9928 0.1371 0.1216 T4 Si 0.0844 0.0471 0.8501 avogadro-1.1.1/crystals/zeolites/UFI.cif0000644000175000001440000000406712250371054017343 0ustar marcususersdata_UFI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 12.1250(0) _cell_length_b 12.1250(0) _cell_length_c 28.6360(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'I 4/m m m' _symmetry_Int_Tables_number 139 _symmetry_cell_setting tetragonal loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,1/2+z' '-y,+x,+z' '1/2-y,1/2+x,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,1/2+z' '+y,-x,+z' '1/2+y,1/2-x,1/2+z' '-x,+y,+z' '1/2-x,1/2+y,1/2+z' '+y,+x,+z' '1/2+y,1/2+x,1/2+z' '+x,-y,+z' '1/2+x,1/2-y,1/2+z' '-y,-x,+z' '1/2-y,1/2-x,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' '+y,-x,-z' '1/2+y,1/2-x,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,1/2-z' '-y,+x,-z' '1/2-y,1/2+x,1/2-z' '+x,-y,-z' '1/2+x,1/2-y,1/2-z' '-y,-x,-z' '1/2-y,1/2-x,1/2-z' '-x,+y,-z' '1/2-x,1/2+y,1/2-z' '+y,+x,-z' '1/2+y,1/2+x,1/2-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.2947 0.0000 0.0826 O2 O 0.2039 0.0000 0.0000 O3 O 0.1084 0.1084 0.0682 O4 O 0.3722 0.1278 0.2500 O5 O 0.3429 0.1080 0.1587 O6 O 0.5000 0.2339 0.1916 O7 O 0.2946 0.2946 0.2014 O8 O 0.5000 0.0000 0.1138 T1 Si 0.1788 0.0000 0.0552 T2 Si 0.3762 0.1903 0.2005 T3 Si 0.3718 0.0000 0.1284 avogadro-1.1.1/crystals/zeolites/WEI.cif0000644000175000001440000000314712250371054017342 0ustar marcususersdata_WEI #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 11.8030(0) _cell_length_b 10.2780(0) _cell_length_c 9.9890(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C c c m' _symmetry_Int_Tables_number 66 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,1/2+z' '1/2-x,1/2+y,1/2+z' '+x,-y,1/2+z' '1/2+x,1/2-y,1/2+z' '-x,-y,+z' '1/2-x,1/2-y,+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,1/2-z' '1/2+x,1/2-y,1/2-z' '-x,+y,1/2-z' '1/2-x,1/2+y,1/2-z' '+x,+y,-z' '1/2+x,1/2+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.4210 0.0905 0.1571 O2 O 0.2425 0.0813 0.0000 O3 O 0.2293 0.0000 0.2500 O4 O 0.2500 0.2500 0.1982 T1 Si 0.2852 0.1059 0.1509 T2 Si 0.0000 0.5000 0.2500 avogadro-1.1.1/crystals/zeolites/IWR.cif0000644000175000001440000000372212250371054017356 0ustar marcususersdata_IWR #************************************************************************** # # CIF taken from the IZA-SC Database of Zeolite Structures # Ch. Baerlocher and L.B. McCusker # Database of Zeolite Structures: http://www.iza-structure.org/databases/ # # All data on this site have been placed in the public domain. # If you use this work in a scientific publication, you are obligated to # cite its origin. # # The atom coordinates and the cell parameters were optimized with DLS76 # assuming a pure SiO2 composition. # #************************************************************************** _cell_length_a 21.2330(0) _cell_length_b 13.3020(0) _cell_length_c 12.6760(0) _cell_angle_alpha 90.0000(0) _cell_angle_beta 90.0000(0) _cell_angle_gamma 90.0000(0) _symmetry_space_group_name_H-M 'C m m m' _symmetry_Int_Tables_number 65 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz '+x,+y,+z' '1/2+x,1/2+y,+z' '-x,+y,+z' '1/2-x,1/2+y,+z' '+x,-y,+z' '1/2+x,1/2-y,+z' '-x,-y,+z' '1/2-x,1/2-y,+z' '-x,-y,-z' '1/2-x,1/2-y,-z' '+x,-y,-z' '1/2+x,1/2-y,-z' '-x,+y,-z' '1/2-x,1/2+y,-z' '+x,+y,-z' '1/2+x,1/2+y,-z' loop_ _atom_site_label _atom_site_type_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 O 0.0990 0.1723 0.1037 O2 O 0.0000 0.1100 0.0000 O3 O 0.1022 0.0000 0.0000 O4 O 0.0913 0.1268 0.5000 O5 O 0.0795 0.0000 0.3423 O6 O 0.1181 0.1847 0.3075 O7 O 0.0000 0.1503 0.3618 O8 O 0.2100 0.1263 0.1812 O9 O 0.1722 0.3143 0.1788 O10 O 0.2994 0.0000 0.1262 O11 O 0.2689 0.1491 0.0000 T1 Si 0.0720 0.1156 0.3777 T2 Si 0.1500 0.1994 0.1933 T3 Si 0.2765 0.1153 0.1213 T4 Si 0.0756 0.1135 0.0000 avogadro-1.1.1/crystals/zeolites/ZSM-5.cif0000644000175000001440000001525312250371054017532 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9012419.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9012419 loop_ _publ_author_name 'Vezzalini, G.' 'Quartieri, S.' 'Galli, E.' 'Alberti, A.' 'Cruciani, G.' 'Kvick, A.' _publ_section_title ; Crystal structure of the zeolite mutinaite, the natural analog of ZSM-5 Locality: Mt. Adamson, Northern Victoria Land, Antarctica Note: reported occupancies do not match reported chemistry ; _journal_name_full Zeolites _journal_page_first 323 _journal_page_last 325 _journal_volume 19 _journal_year 1997 _chemical_formula_sum 'Al2.808 Ca0.685 H44.28 Na0.444 O56.971 Si21.192' _chemical_name_mineral Mutinaite _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2ac 2n' _symmetry_space_group_name_H-M 'P n m a' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 20.201 _cell_length_b 19.991 _cell_length_c 13.469 _cell_volume 5439.297 _exptl_crystal_density_diffrn 2.033 _[local]_cod_chemical_formula_sum_orig '(Si21.192 Al2.808) O56.971 Ca.685 Na.444 H44.28' _cod_original_cell_volume 5439.296 _cod_database_code 9012419 _amcsd_database_code AMCSD#0013149 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,z -x,1/2+y,-z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z 1/2+x,y,1/2-z 1/2-x,-y,1/2+z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv Si1 0.42540 0.05710 0.67880 0.88300 0.01800 Al1 0.42540 0.05710 0.67880 0.11700 0.01800 Si2 0.31770 0.02980 0.83330 0.88300 0.02200 Al2 0.31770 0.02980 0.83330 0.11700 0.02200 Si3 0.27830 0.06260 0.04950 0.88300 0.02300 Al3 0.27830 0.06260 0.04950 0.11700 0.02300 Si4 0.12260 0.06290 0.04430 0.88300 0.01800 Al4 0.12260 0.06290 0.04430 0.11700 0.01800 Si5 0.07570 0.02990 0.83120 0.88300 0.01600 Al5 0.07570 0.02990 0.83120 0.11700 0.01600 Si6 0.19640 0.05830 0.69360 0.88300 0.02100 Al6 0.19640 0.05830 0.69360 0.11700 0.02100 Si7 0.42770 0.82920 0.69110 0.88300 0.01800 Al7 0.42770 0.82920 0.69110 0.11700 0.01800 Si8 0.31770 0.87180 0.83690 0.88300 0.02000 Al8 0.31770 0.87180 0.83690 0.11700 0.02000 Si9 0.27120 0.82740 0.04520 0.88300 0.01900 Al9 0.27120 0.82740 0.04520 0.11700 0.01900 Si10 0.11750 0.82690 0.03930 0.88300 0.01800 Al10 0.11750 0.82690 0.03930 0.11700 0.01800 Si11 0.07390 0.87160 0.83040 0.88300 0.01900 Al11 0.07390 0.87160 0.83040 0.11700 0.01900 Si12 0.19730 0.82740 0.70410 0.88300 0.02000 Al12 0.19730 0.82740 0.70410 0.11700 0.02000 O1 0.38650 0.05610 0.78480 1.00000 0.04300 O2 0.31760 0.06170 -0.05590 1.00000 0.04400 O3 0.20180 0.06040 0.02920 1.00000 0.05400 O4 0.08820 0.06210 -0.06410 1.00000 0.05100 O5 0.12660 0.05970 0.75060 1.00000 0.04600 O6 0.25600 0.05720 0.76970 1.00000 0.06300 O7 0.38500 0.84380 0.79060 1.00000 0.04000 O8 0.31460 0.84350 -0.05450 1.00000 0.05200 O9 0.19410 0.84510 0.02830 1.00000 0.03400 O10 0.08080 0.84040 -0.06290 1.00000 0.05000 O11 0.12730 0.84000 0.75530 1.00000 0.05700 O12 0.25530 0.84890 0.77160 1.00000 0.05900 O13 0.31820 -0.04930 0.83800 1.00000 0.10300 O14 0.08370 -0.05030 0.83670 1.00000 0.05700 O15 0.41460 0.12970 0.62670 1.00000 0.04600 O16 0.40110 -0.00060 0.60840 1.00000 0.04800 O17 0.39920 0.86690 0.59600 1.00000 0.04000 O18 0.19860 0.13030 0.63540 1.00000 0.05000 O19 0.19850 -0.00080 0.61430 1.00000 0.05900 O20 0.19990 0.86870 0.60000 1.00000 0.05200 O21 0.00300 0.05000 0.79370 1.00000 0.03500 O22 0.00260 0.85210 0.78470 1.00000 0.03500 O23 0.42720 0.75000 0.66600 1.00000 0.04800 O24 0.20310 0.75000 0.67500 1.00000 0.06100 O25 0.28110 0.75000 0.07700 1.00000 0.04100 O26 0.10820 0.75000 0.07000 1.00000 0.03100 Ca 0.48400 0.25000 0.92300 0.21000 0.02300 CaX1 0.45800 0.03500 0.09100 0.01600 0.07200 NaX1 0.45800 0.03500 0.09100 0.01500 0.07200 WatX1 0.45800 0.03500 0.09100 0.29900 0.07200 CaX2 0.07000 0.25000 0.45900 0.04700 0.08200 NaX2 0.07000 0.25000 0.45900 0.04400 0.08200 WatX2 0.07000 0.25000 0.45900 0.88900 0.08200 CaX3 0.45700 0.25000 0.11300 0.02500 0.05100 NaX3 0.45700 0.25000 0.11300 0.02400 0.05100 WatX3 0.45700 0.25000 0.11300 0.48100 0.05100 CaX4 0.19100 0.25000 0.01000 0.02200 0.11100 NaX4 0.19100 0.25000 0.01000 0.02100 0.11100 WatX4 0.19100 0.25000 0.01000 0.41700 0.11100 CaX5 0.04700 0.16300 0.64800 0.03400 0.17600 NaX5 0.04700 0.16300 0.64800 0.03200 0.17600 WatX5 0.04700 0.16300 0.64800 0.64400 0.17600 CaX7 0.06000 0.05600 0.51900 0.01900 0.21900 NaX6 0.06000 0.05600 0.51900 0.01700 0.21900 WatX6 0.06000 0.05600 0.51900 0.35400 0.21900 CaX7 0.01000 0.05900 0.40000 0.01600 0.09900 NaX7 0.01000 0.05900 0.40000 0.01500 0.09900 WatX7 0.01000 0.05900 0.40000 0.29900 0.09900 CaX8 0.41900 0.15400 0.95500 0.02000 0.12100 NaX8 0.41900 0.15400 0.95500 0.01900 0.12100 WatX8 0.41900 0.15400 0.95500 0.38100 0.12100 CaX9 0.99900 0.13800 0.42400 0.01000 0.10000 NaX9 0.99900 0.13800 0.42400 0.00900 0.10000 WatX9 0.99900 0.13800 0.42400 0.19100 0.10000 CaX10 0.48600 0.07600 0.90400 0.01100 0.09300 NaX10 0.48600 0.07600 0.90400 0.01000 0.09300 WatX10 0.48600 0.07600 0.90400 0.19900 0.09300 CaX11 0.29100 0.25000 0.94900 0.01000 0.03100 NaX11 0.29100 0.25000 0.94900 0.00900 0.03100 WatX11 0.29100 0.25000 0.94900 0.18100 0.03100 CaX12 0.43500 0.18300 0.03800 0.01000 0.04100 NaX12 0.43500 0.18300 0.03800 0.00900 0.04100 WatX12 0.43500 0.18300 0.03800 0.19100 0.04100 CaX13 0.42500 0.25000 0.81800 0.01500 0.16600 NaX13 0.42500 0.25000 0.81800 0.01400 0.16600 WatX13 0.42500 0.25000 0.81800 0.28100 0.16600 CaX14 0.15700 0.25000 0.78600 0.02400 0.17400 NaX14 0.15700 0.25000 0.78600 0.02200 0.17400 WatX14 0.15700 0.25000 0.78600 0.44400 0.17400 CaX15 0.27800 0.21800 0.81800 0.01600 0.08700 NaX15 0.27800 0.21800 0.81800 0.01500 0.08700 WatX15 0.27800 0.21800 0.81800 0.30900 0.08700 CaX16 0.05800 0.22000 0.92200 0.01400 0.12500 NaX16 0.05800 0.22000 0.92200 0.01400 0.12500 WatX16 0.05800 0.22000 0.92200 0.27200 0.12500 avogadro-1.1.1/crystals/oxides/0000755000175000001440000000000012250371054015663 5ustar marcususersavogadro-1.1.1/crystals/oxides/SrO.cif0000644000175000001440000001061012250371054017047 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008727.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008727 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Sr' _chemical_name_mineral SrO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.1602 _cell_length_b 5.1602 _cell_length_c 5.1602 _cell_volume 137.404 _exptl_crystal_density_diffrn 5.009 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Sr O' _cod_database_code 9008727 _amcsd_database_code AMCSD#0011058 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sr 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/In2O3.cif0000644000175000001440000000500012250371054017173 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010588.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010588 _chemical_name_systematic 'Indium oxide' _chemical_formula_structural 'In2 O3' _chemical_formula_sum 'In2 O3' _publ_section_title ; Untersuchungen ueber die Kristallstruktur von Sesquioxyden und Verbindungen ABO~3~ ; loop_ _publ_author_name 'Zachariasen, W H' _journal_name_full ; Skrifter utgitt av det Norske Videnskaps-Akademi i Oslo 1: Matematisk- Naturvidenskapelig Klasse ; _journal_coden_ASTM SUNVAQ _journal_volume 1928 _journal_year 1928 _journal_page_first 1 _journal_page_last 165 _cell_length_a 10.12(3) _cell_length_b 10.12(3) _cell_length_c 10.12(3) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 1036.4 _cell_formula_units_Z 16 _symmetry_space_group_name_H-M 'I 21 3' _symmetry_Int_Tables_number 199 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'y,z,x' 'z,x,y' '1/2+x,1/2-y,-z' '1/2+y,1/2-z,-x' '1/2+z,1/2-x,-y' '-x,1/2+y,1/2-z' '-y,1/2+z,1/2-x' '-z,1/2+x,1/2-y' '1/2-x,-y,1/2+z' '1/2-y,-z,1/2+x' '1/2-z,-x,1/2+y' '1/2+x,1/2+y,1/2+z' '1/2+y,1/2+z,1/2+x' '1/2+z,1/2+x,1/2+y' 'x,-y,1/2-z' 'y,-z,1/2-x' 'z,-x,1/2-y' '1/2-x,y,-z' '1/2-y,z,-x' '1/2-z,x,-y' '-x,1/2-y,z' '-y,1/2-z,x' '-z,1/2-x,y' loop_ _atom_type_symbol _atom_type_oxidation_number In3+ 3.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag In1 In3+ 8 a 0.25 0.25 0.25 1. 0 d In2 In3+ 12 b 0.021(7) 0. 0.25 1. 0 d In3 In3+ 12 b 0.542(14) 0. 0.25 1. 0 d O1 O2- 24 c 0.125 0.125 0.375 1. 0 d O2 O2- 24 c 0.125 0.375 0.375 1. 0 d _cod_database_code 1010588 avogadro-1.1.1/crystals/oxides/Cu2O-Cuprite.cif0000644000175000001440000000553212250371054020534 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010941.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010941 _chemical_name_systematic 'Copper(I) oxide' _chemical_name_mineral 'Cuprite' _chemical_formula_structural 'Cu2 O' _chemical_formula_sum 'Cu2 O' _publ_section_title 'Die Kristallstruktur einiger Oxyde I.' _space_group_IT_number 224 _symmetry_space_group_name_Hall 'P 4n 2 3 -1n' _symmetry_space_group_name_H-M 'P n -3 m :1' _[local]_cod_cif_authors_sg_H-M 'P n -3 m S' loop_ _publ_author_name 'Niggli, P' _journal_name_full ; Zeitschrift fuer Kristallographie, Kristallgeometrie, Kristallphysik, Kristallchemie (-144,1977) ; _journal_coden_ASTM ZEKGAX _journal_volume 57 _journal_year 1922 _journal_page_first 253 _journal_page_last 299 _cell_length_a 4.26 _cell_length_b 4.26 _cell_length_c 4.26 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 77.3 _cell_formula_units_Z 2 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'x,z,y' 'y,z,x' 'z,y,x' 'z,x,y' 'y,x,z' 'x,-y,-z' 'x,-z,-y' 'y,-z,-x' 'z,-y,-x' 'z,-x,-y' 'y,-x,-z' '-x,y,-z' '-x,z,-y' '-y,z,-x' '-z,y,-x' '-z,x,-y' '-y,x,-z' '-x,-y,z' '-x,-z,y' '-y,-z,x' '-z,-y,x' '-z,-x,y' '-y,-x,z' '1/2-x,1/2-y,1/2-z' '1/2-x,1/2-z,1/2-y' '1/2-y,1/2-z,1/2-x' '1/2-z,1/2-y,1/2-x' '1/2-z,1/2-x,1/2-y' '1/2-y,1/2-x,1/2-z' '1/2-x,1/2+y,1/2+z' '1/2-x,1/2+z,1/2+y' '1/2-y,1/2+z,1/2+x' '1/2-z,1/2+y,1/2+x' '1/2-z,1/2+x,1/2+y' '1/2-y,1/2+x,1/2+z' '1/2+x,1/2-y,1/2+z' '1/2+x,1/2-z,1/2+y' '1/2+y,1/2-z,1/2+x' '1/2+z,1/2-y,1/2+x' '1/2+z,1/2-x,1/2+y' '1/2+y,1/2-x,1/2+z' '1/2+x,1/2+y,1/2-z' '1/2+x,1/2+z,1/2-y' '1/2+y,1/2+z,1/2-x' '1/2+z,1/2+y,1/2-x' '1/2+z,1/2+x,1/2-y' '1/2+y,1/2+x,1/2-z' loop_ _atom_type_symbol _atom_type_oxidation_number Cu1+ 1.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Cu1 Cu1+ 4 b 0.25 0.25 0.25 1. 0 d O1 O2- 2 a 0. 0. 0. 1. 0 d _cod_database_code 1010941 avogadro-1.1.1/crystals/oxides/CaO-Lime.cif0000644000175000001440000001053312250371054017676 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008605.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008605 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ca O' _chemical_name_mineral Lime _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.8105 _cell_length_b 4.8105 _cell_length_c 4.8105 _cell_volume 111.319 _exptl_crystal_density_diffrn 3.346 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008605 _amcsd_database_code AMCSD#0010936 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ca 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/ZnO-Zincite.cif0000644000175000001440000000412512250371054020461 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008877.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008877 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Zn' _chemical_name_mineral Zincite _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.24950 _cell_length_b 3.24950 _cell_length_c 5.2069 _cell_volume 47.615 _exptl_crystal_density_diffrn 5.677 _[local]_cod_chemical_formula_sum_orig 'Zn O' _cod_database_code 9008877 _amcsd_database_code AMCSD#0011208 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zn 0.33333 0.66667 0.00000 O 0.33333 0.66667 0.34500 avogadro-1.1.1/crystals/oxides/SiO2-Quartz-alpha.cif0000644000175000001440000000422512250371054021474 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/5/5000035.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_5000035 _chemical_name_systematic 'Silicon oxide' _chemical_name_mineral 'Quartz' _chemical_formula_structural 'Si O2' _chemical_formula_sum 'O2 Si' _publ_section_title ; Crystal structures of quartz and magnesium germanate by profile analysis of synchrotron-radiation high-resolution powder data. ; loop_ _publ_author_name 'Will, G' 'Bellotto, M' 'Parrish, W' 'Hart, M' _journal_name_full 'Journal of Applied Crystallography' _journal_volume 21 _journal_year 1988 _journal_page_first 182 _journal_page_last 191 _cell_length_a 4.91239(4) _cell_length_b 4.91239(4) _cell_length_c 5.40385(7) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 112.9 _cell_formula_units_Z 3 _symmetry_space_group_name_H-M 'P 32 2 1' _symmetry_Int_Tables_number 154 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-y,x-y,2/3+z' 'y-x,-x,1/3+z' 'y,x,-z' 'x-y,-y,1/3-z' '-x,y-x,2/3-z' loop_ _atom_type_symbol _atom_type_oxidation_number Si4+ 4.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Si1 Si4+ 3 a 0.4701(4) 0. 0.6667 1. 0 d O1 O2- 6 c 0.4139(7) 0.2674(7) 0.7856(6) 1. 0 d _refine_ls_R_factor_all 0.022 _cod_database_code 5000035 avogadro-1.1.1/crystals/oxides/Li2O.cif0000644000175000001440000001053612250371054017120 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009059.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009059 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Anti-fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Li2 O' _chemical_name_mineral Li2O _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.619 _cell_length_b 4.619 _cell_length_c 4.619 _cell_volume 98.547 _exptl_crystal_density_diffrn 2.014 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9009059 _amcsd_database_code AMCSD#0011391 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Li 0.25000 0.25000 0.25000 O 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/oxides/UO.cif0000644000175000001440000001057712250371054016703 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008758.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008758 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O U' _chemical_name_mineral UO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.92 _cell_length_b 4.92 _cell_length_c 4.92 _cell_volume 119.095 _exptl_crystal_density_diffrn 14.168 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'U O' _cod_database_code 9008758 _amcsd_database_code AMCSD#0011089 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z U 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/Fe3O4-Magnetite.cif0000644000175000001440000001226712250371054021111 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9007644.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9007644 loop_ _publ_author_name 'Fleet, M. E.' _publ_section_title ; The structure of magnetite ; _journal_name_full 'Acta Crystallographica, Section B' _journal_page_first 917 _journal_page_last 920 _journal_volume 37 _journal_year 1981 _chemical_formula_sum 'Fe3 O4' _chemical_name_mineral Magnetite _space_group_IT_number 227 _symmetry_space_group_name_Hall '-F 4vw 2vw 3' _symmetry_space_group_name_H-M 'F d -3 m :2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.3941 _cell_length_b 8.3941 _cell_length_c 8.3941 _cell_volume 591.456 _exptl_crystal_density_diffrn 5.200 _[local]_cod_cif_authors_sg_H-M 'F d 3 m' _cod_database_code 9007644 _amcsd_database_code AMCSD#0009558 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+z,1/2-x,1/4+y 3/4+z,-x,3/4+y 1/4+z,1/2-x,3/4+y 1/4+z,-x,1/4+y 3/4-y,1/2+z,1/4-x 3/4-y,+z,3/4-x 1/4-y,1/2+z,3/4-x 1/4-y,+z,1/4-x 3/4+x,1/2-y,1/4+z 3/4+x,-y,3/4+z 1/4+x,1/2-y,3/4+z 1/4+x,-y,1/4+z 3/4-z,1/2+x,1/4-y 3/4-z,+x,3/4-y 1/4-z,1/2+x,3/4-y 1/4-z,+x,1/4-y 3/4+y,1/2-z,1/4+x 3/4+y,-z,3/4+x 1/4+y,1/2-z,3/4+x 1/4+y,-z,1/4+x 3/4-x,1/2+y,1/4-z 3/4-x,+y,3/4-z 1/4-x,1/2+y,3/4-z 1/4-x,+y,1/4-z 1/2+x,3/4-z,1/4-y 1/2+x,1/4-z,3/4-y +x,3/4-z,3/4-y +x,1/4-z,1/4-y 1/2-z,3/4+y,1/4+x 1/2-z,1/4+y,3/4+x -z,3/4+y,3/4+x -z,1/4+y,1/4+x 1/2+y,3/4-x,1/4-z 1/2+y,1/4-x,3/4-z +y,3/4-x,3/4-z +y,1/4-x,1/4-z 1/2-x,3/4+z,1/4+y 1/2-x,1/4+z,3/4+y -x,3/4+z,3/4+y -x,1/4+z,1/4+y 1/2+z,3/4-y,1/4-x 1/2+z,1/4-y,3/4-x +z,3/4-y,3/4-x +z,1/4-y,1/4-x 1/2-y,3/4+x,1/4+z 1/2-y,1/4+x,3/4+z -y,3/4+x,3/4+z -y,1/4+x,1/4+z x,1/2+z,1/2+y x,+z,+y 1/2+x,1/2+z,+y 1/2+x,+z,1/2+y -z,1/2-y,1/2-x -z,-y,-x 1/2-z,1/2-y,-x 1/2-z,-y,1/2-x y,1/2+x,1/2+z y,+x,+z 1/2+y,1/2+x,+z 1/2+y,+x,1/2+z -x,1/2-z,1/2-y -x,-z,-y 1/2-x,1/2-z,-y 1/2-x,-z,1/2-y z,1/2+y,1/2+x z,+y,+x 1/2+z,1/2+y,+x 1/2+z,+y,1/2+x -y,1/2-x,1/2-z -y,-x,-z 1/2-y,1/2-x,-z 1/2-y,-x,1/2-z 3/4+z,1/4+x,1/2-y 3/4+z,3/4+x,-y 1/4+z,1/4+x,-y 1/4+z,3/4+x,1/2-y 3/4-y,1/4-z,1/2+x 3/4-y,3/4-z,+x 1/4-y,1/4-z,+x 1/4-y,3/4-z,1/2+x 3/4+x,1/4+y,1/2-z 3/4+x,3/4+y,-z 1/4+x,1/4+y,-z 1/4+x,3/4+y,1/2-z 3/4-z,1/4-x,1/2+y 3/4-z,3/4-x,+y 1/4-z,1/4-x,+y 1/4-z,3/4-x,1/2+y 3/4+y,1/4+z,1/2-x 3/4+y,3/4+z,-x 1/4+y,1/4+z,-x 1/4+y,3/4+z,1/2-x 3/4-x,1/4-y,1/2+z 3/4-x,3/4-y,+z 1/4-x,1/4-y,+z 1/4-x,3/4-y,1/2+z -z,3/4+x,3/4+y -z,1/4+x,1/4+y 1/2-z,3/4+x,1/4+y 1/2-z,1/4+x,3/4+y y,3/4-z,3/4-x y,1/4-z,1/4-x 1/2+y,3/4-z,1/4-x 1/2+y,1/4-z,3/4-x -x,3/4+y,3/4+z -x,1/4+y,1/4+z 1/2-x,3/4+y,1/4+z 1/2-x,1/4+y,3/4+z z,3/4-x,3/4-y z,1/4-x,1/4-y 1/2+z,3/4-x,1/4-y 1/2+z,1/4-x,3/4-y -y,3/4+z,3/4+x -y,1/4+z,1/4+x 1/2-y,3/4+z,1/4+x 1/2-y,1/4+z,3/4+x x,3/4-y,3/4-z x,1/4-y,1/4-z 1/2+x,3/4-y,1/4-z 1/2+x,1/4-y,3/4-z 1/4-x,1/2+z,3/4-y 1/4-x,+z,1/4-y 3/4-x,1/2+z,1/4-y 3/4-x,+z,3/4-y 1/4+z,1/2-y,3/4+x 1/4+z,-y,1/4+x 3/4+z,1/2-y,1/4+x 3/4+z,-y,3/4+x 1/4-y,1/2+x,3/4-z 1/4-y,+x,1/4-z 3/4-y,1/2+x,1/4-z 3/4-y,+x,3/4-z 1/4+x,1/2-z,3/4+y 1/4+x,-z,1/4+y 3/4+x,1/2-z,1/4+y 3/4+x,-z,3/4+y 1/4-z,1/2+y,3/4-x 1/4-z,+y,1/4-x 3/4-z,1/2+y,1/4-x 3/4-z,+y,3/4-x 1/4+y,1/2-x,3/4+z 1/4+y,-x,1/4+z 3/4+y,1/2-x,1/4+z 3/4+y,-x,3/4+z 3/4-x,3/4-z,y 3/4-x,1/4-z,1/2+y 1/4-x,3/4-z,1/2+y 1/4-x,1/4-z,y 3/4+z,3/4+y,-x 3/4+z,1/4+y,1/2-x 1/4+z,3/4+y,1/2-x 1/4+z,1/4+y,-x 3/4-y,3/4-x,z 3/4-y,1/4-x,1/2+z 1/4-y,3/4-x,1/2+z 1/4-y,1/4-x,z 3/4+x,3/4+z,-y 3/4+x,1/4+z,1/2-y 1/4+x,3/4+z,1/2-y 1/4+x,1/4+z,-y 3/4-z,3/4-y,x 3/4-z,1/4-y,1/2+x 1/4-z,3/4-y,1/2+x 1/4-z,1/4-y,x 3/4+y,3/4+x,-z 3/4+y,1/4+x,1/2-z 1/4+y,3/4+x,1/2-z 1/4+y,1/4+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 FeT 0.00443 0.00443 0.00443 0.00000 0.00000 0.00000 FeM 0.00585 0.00585 0.00585 0.00057 0.00057 0.00057 O 0.00685 0.00685 0.00685 -0.00004 -0.00004 -0.00004 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z FeT 0.12500 0.12500 0.12500 FeM 0.50000 0.50000 0.50000 O 0.25490 0.25490 0.25490 avogadro-1.1.1/crystals/oxides/NbO2.cif0000644000175000001440000000440612250371054017112 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009093.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009093 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Nb O2' _chemical_name_mineral NbO2 _space_group_IT_number 88 _symmetry_space_group_name_Hall 'I 4bw -1bw' _symmetry_space_group_name_H-M 'I 41/a :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 13.71 _cell_length_b 13.71 _cell_length_c 5.985 _cell_volume 1124.965 _exptl_crystal_density_diffrn 5.900 _[local]_cod_cif_authors_sg_H-M 'I 41/a' _cod_database_code 9009093 _amcsd_database_code AMCSD#0011425 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z 1/2+y,1/2-x,1/2-z +y,-x,-z -y,1/2+x,1/4+z 1/2-y,+x,3/4+z 1/2+x,y,3/4-z +x,1/2+y,1/4-z 1/2-x,1/2-y,1/2+z -x,-y,+z -y,x,-z 1/2-y,1/2+x,1/2-z 1/2+y,-x,3/4+z +y,1/2-x,1/4+z -x,1/2-y,1/4-z 1/2-x,-y,3/4-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Nb1 0.11000 8.12000 5.48000 Nb2 0.13000 3.12000 5.01000 O1 0.98000 6.13000 0.00000 O2 0.97000 1.12000 5.50000 O3 0.28000 0.12000 6.99000 O4 0.26000 6.11000 8.50000 avogadro-1.1.1/crystals/oxides/SiO2-Quartz-beta.cif0000644000175000001440000000463212250371054021324 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9005025.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9005025 loop_ _publ_author_name 'Kihara, K.' _publ_section_title ; An X-ray study of the temperature dependence of the quartz structure Sample: at T = 848 K ; _journal_name_full 'European Journal of Mineralogy' _journal_page_first 63 _journal_page_last 77 _journal_volume 2 _journal_year 1990 _chemical_formula_sum 'O2 Si' _chemical_name_mineral Quartz _space_group_IT_number 180 _symmetry_space_group_name_Hall 'P 62 2 (0 0 4)' _symmetry_space_group_name_H-M 'P 62 2 2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.9965 _cell_length_b 4.9965 _cell_length_c 5.4570 _cell_volume 117.982 _diffrn_ambient_temperature 848 _exptl_crystal_density_diffrn 2.537 _[local]_cod_chemical_formula_sum_orig 'Si O2' _cod_database_code 9005025 _amcsd_database_code AMCSD#0006312 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,x-y,1/3-z x-y,x,1/3+z y,x,2/3-z -y,x-y,2/3+z -x+y,y,-z -x,-y,z -x,-x+y,1/3-z -x+y,-x,1/3+z -y,-x,2/3-z y,-x+y,2/3+z x-y,-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Si 0.02646 0.02011 0.01991 0.01005 0.00000 0.00000 O 0.04942 0.05464 0.05853 0.02471 0.00000 -0.03218 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si 0.50000 0.00000 0.00000 O 0.41520 0.20760 0.16667 avogadro-1.1.1/crystals/oxides/(MgAl2)O4-Spinel.cif0000644000175000001440000001254612250371054021034 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9002044.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9002044 loop_ _publ_author_name 'Redfern, S. A. T.' 'Harrison, R. J.' 'O'Neill H St C' 'Wood, D. R. R.' _publ_section_title ; Thermodynamics and kinetics of cation ordering in MgAl2O4 spinel up to 1600 C from in situ neutron diffraction Data collected at IPNS, Argonne National Laboratory, T = 299 K on heating cycle, MgAl2O4 ; _journal_name_full 'American Mineralogist' _journal_page_first 299 _journal_page_last 310 _journal_volume 84 _journal_year 1999 _chemical_formula_sum 'Al2 Mg O4' _chemical_name_mineral Spinel _space_group_IT_number 227 _symmetry_space_group_name_Hall '-F 4vw 2vw 3' _symmetry_space_group_name_H-M 'F d -3 m :2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.08360 _cell_length_b 8.08360 _cell_length_c 8.08360 _cell_volume 528.220 _diffrn_ambient_temperature 299 _exptl_crystal_density_diffrn 3.578 _[local]_cod_cif_authors_sg_H-M 'F d 3 m' _[local]_cod_chemical_formula_sum_orig '(Mg Al2) O4' _cod_database_code 9002044 _amcsd_database_code AMCSD#0002105 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+z,1/2-x,1/4+y 3/4+z,-x,3/4+y 1/4+z,1/2-x,3/4+y 1/4+z,-x,1/4+y 3/4-y,1/2+z,1/4-x 3/4-y,+z,3/4-x 1/4-y,1/2+z,3/4-x 1/4-y,+z,1/4-x 3/4+x,1/2-y,1/4+z 3/4+x,-y,3/4+z 1/4+x,1/2-y,3/4+z 1/4+x,-y,1/4+z 3/4-z,1/2+x,1/4-y 3/4-z,+x,3/4-y 1/4-z,1/2+x,3/4-y 1/4-z,+x,1/4-y 3/4+y,1/2-z,1/4+x 3/4+y,-z,3/4+x 1/4+y,1/2-z,3/4+x 1/4+y,-z,1/4+x 3/4-x,1/2+y,1/4-z 3/4-x,+y,3/4-z 1/4-x,1/2+y,3/4-z 1/4-x,+y,1/4-z 1/2+x,3/4-z,1/4-y 1/2+x,1/4-z,3/4-y +x,3/4-z,3/4-y +x,1/4-z,1/4-y 1/2-z,3/4+y,1/4+x 1/2-z,1/4+y,3/4+x -z,3/4+y,3/4+x -z,1/4+y,1/4+x 1/2+y,3/4-x,1/4-z 1/2+y,1/4-x,3/4-z +y,3/4-x,3/4-z +y,1/4-x,1/4-z 1/2-x,3/4+z,1/4+y 1/2-x,1/4+z,3/4+y -x,3/4+z,3/4+y -x,1/4+z,1/4+y 1/2+z,3/4-y,1/4-x 1/2+z,1/4-y,3/4-x +z,3/4-y,3/4-x +z,1/4-y,1/4-x 1/2-y,3/4+x,1/4+z 1/2-y,1/4+x,3/4+z -y,3/4+x,3/4+z -y,1/4+x,1/4+z x,1/2+z,1/2+y x,+z,+y 1/2+x,1/2+z,+y 1/2+x,+z,1/2+y -z,1/2-y,1/2-x -z,-y,-x 1/2-z,1/2-y,-x 1/2-z,-y,1/2-x y,1/2+x,1/2+z y,+x,+z 1/2+y,1/2+x,+z 1/2+y,+x,1/2+z -x,1/2-z,1/2-y -x,-z,-y 1/2-x,1/2-z,-y 1/2-x,-z,1/2-y z,1/2+y,1/2+x z,+y,+x 1/2+z,1/2+y,+x 1/2+z,+y,1/2+x -y,1/2-x,1/2-z -y,-x,-z 1/2-y,1/2-x,-z 1/2-y,-x,1/2-z 3/4+z,1/4+x,1/2-y 3/4+z,3/4+x,-y 1/4+z,1/4+x,-y 1/4+z,3/4+x,1/2-y 3/4-y,1/4-z,1/2+x 3/4-y,3/4-z,+x 1/4-y,1/4-z,+x 1/4-y,3/4-z,1/2+x 3/4+x,1/4+y,1/2-z 3/4+x,3/4+y,-z 1/4+x,1/4+y,-z 1/4+x,3/4+y,1/2-z 3/4-z,1/4-x,1/2+y 3/4-z,3/4-x,+y 1/4-z,1/4-x,+y 1/4-z,3/4-x,1/2+y 3/4+y,1/4+z,1/2-x 3/4+y,3/4+z,-x 1/4+y,1/4+z,-x 1/4+y,3/4+z,1/2-x 3/4-x,1/4-y,1/2+z 3/4-x,3/4-y,+z 1/4-x,1/4-y,+z 1/4-x,3/4-y,1/2+z -z,3/4+x,3/4+y -z,1/4+x,1/4+y 1/2-z,3/4+x,1/4+y 1/2-z,1/4+x,3/4+y y,3/4-z,3/4-x y,1/4-z,1/4-x 1/2+y,3/4-z,1/4-x 1/2+y,1/4-z,3/4-x -x,3/4+y,3/4+z -x,1/4+y,1/4+z 1/2-x,3/4+y,1/4+z 1/2-x,1/4+y,3/4+z z,3/4-x,3/4-y z,1/4-x,1/4-y 1/2+z,3/4-x,1/4-y 1/2+z,1/4-x,3/4-y -y,3/4+z,3/4+x -y,1/4+z,1/4+x 1/2-y,3/4+z,1/4+x 1/2-y,1/4+z,3/4+x x,3/4-y,3/4-z x,1/4-y,1/4-z 1/2+x,3/4-y,1/4-z 1/2+x,1/4-y,3/4-z 1/4-x,1/2+z,3/4-y 1/4-x,+z,1/4-y 3/4-x,1/2+z,1/4-y 3/4-x,+z,3/4-y 1/4+z,1/2-y,3/4+x 1/4+z,-y,1/4+x 3/4+z,1/2-y,1/4+x 3/4+z,-y,3/4+x 1/4-y,1/2+x,3/4-z 1/4-y,+x,1/4-z 3/4-y,1/2+x,1/4-z 3/4-y,+x,3/4-z 1/4+x,1/2-z,3/4+y 1/4+x,-z,1/4+y 3/4+x,1/2-z,1/4+y 3/4+x,-z,3/4+y 1/4-z,1/2+y,3/4-x 1/4-z,+y,1/4-x 3/4-z,1/2+y,1/4-x 3/4-z,+y,3/4-x 1/4+y,1/2-x,3/4+z 1/4+y,-x,1/4+z 3/4+y,1/2-x,1/4+z 3/4+y,-x,3/4+z 3/4-x,3/4-z,y 3/4-x,1/4-z,1/2+y 1/4-x,3/4-z,1/2+y 1/4-x,1/4-z,y 3/4+z,3/4+y,-x 3/4+z,1/4+y,1/2-x 1/4+z,3/4+y,1/2-x 1/4+z,1/4+y,-x 3/4-y,3/4-x,z 3/4-y,1/4-x,1/2+z 1/4-y,3/4-x,1/2+z 1/4-y,1/4-x,z 3/4+x,3/4+z,-y 3/4+x,1/4+z,1/2-y 1/4+x,3/4+z,1/2-y 1/4+x,1/4+z,-y 3/4-z,3/4-y,x 3/4-z,1/4-y,1/2+x 1/4-z,3/4-y,1/2+x 1/4-z,1/4-y,x 3/4+y,3/4+x,-z 3/4+y,1/4+x,1/2-z 1/4+y,3/4+x,1/2-z 1/4+y,1/4+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv Mg 0.12500 0.12500 0.12500 0.78200 0.00277 Al 0.12500 0.12500 0.12500 0.21800 0.00277 Al 0.50000 0.50000 0.50000 0.89100 0.00365 Mg 0.50000 0.50000 0.50000 0.10900 0.00365 O 0.26171 0.26171 0.26171 1.00000 0.00640 avogadro-1.1.1/crystals/oxides/PtO2-beta.cif0000644000175000001440000000421612250371054020046 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1008935.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1008935 _chemical_name_systematic 'Platinum(IV) oxide - $-beta' _chemical_formula_structural 'Pt O2' _chemical_formula_sum 'O2 Pt' _publ_section_title ; Formation and stability of the platinum and rhodium oxides at high oxygen pressures and the structures of Pt3 O4, $-beta-Pt O2 and Rh O2 ; loop_ _publ_author_name 'Muller, O' 'Roy, R' _journal_name_full 'Journal of the Less-Common Metals' _journal_coden_ASTM JCOMAH _journal_volume 16 _journal_year 1968 _journal_page_first 129 _journal_page_last 146 _cell_length_a 4.486 _cell_length_b 4.537 _cell_length_c 3.138 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 63.9 _cell_formula_units_Z 2 _symmetry_space_group_name_H-M 'P n n m' _symmetry_Int_Tables_number 58 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-x,-y,z' '1/2+x,1/2-y,1/2-z' '1/2-x,1/2+y,1/2-z' '-x,-y,-z' 'x,y,-z' '1/2-x,1/2+y,1/2+z' '1/2+x,1/2-y,1/2+z' loop_ _atom_type_symbol _atom_type_oxidation_number Pt4+ 4.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Pt1 Pt4+ 2 a 0. 0. 0. 1. 0 d O1 O2- 4 g 0.29 0.31 0. 1. 0 d _refine_ls_R_factor_all 0.122 _cod_database_code 1008935 avogadro-1.1.1/crystals/oxides/SnO2-Cassiterite.cif0000644000175000001440000000424712250371054021413 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009082.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009082 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Rutile structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O2 Sn' _chemical_name_mineral Cassiterite _space_group_IT_number 136 _symmetry_space_group_name_Hall '-P 4n 2n' _symmetry_space_group_name_H-M 'P 42/m n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.73727 _cell_length_b 4.73727 _cell_length_c 3.186383 _cell_volume 71.508 _exptl_crystal_density_diffrn 6.999 _[local]_cod_chemical_formula_sum_orig 'Sn O2' _cod_database_code 9009082 _amcsd_database_code AMCSD#0011414 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z 1/2+y,1/2-x,1/2-z 1/2-y,1/2+x,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z x,y,-z -x,-y,z y,x,z -y,-x,-z 1/2-y,1/2+x,1/2-z 1/2+y,1/2-x,1/2+z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sn 0.00000 0.00000 0.00000 O 0.30700 0.30700 0.00000 avogadro-1.1.1/crystals/oxides/CdO-Monteponite.cif0000644000175000001440000001054212250371054021314 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008609.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008609 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cd O' _chemical_name_mineral Monteponite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.6953 _cell_length_b 4.6953 _cell_length_c 4.6953 _cell_volume 103.512 _exptl_crystal_density_diffrn 8.240 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008609 _amcsd_database_code AMCSD#0010940 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cd 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/Y2O3.cif0000644000175000001440000000544712250371054017054 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1009014.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1009014 _chemical_name_systematic 'Yttrium oxide' _chemical_formula_structural 'Y2 O3' _chemical_formula_sum 'O3 Y2' _publ_section_title ; Rietveld refinement of two-phase Zr-doped Y2 O3 ; loop_ _publ_author_name 'Baldinozzi, G' 'Berar, J-F' 'Calvarin, G' _journal_name_full 'Materials Science Forum' _journal_coden_ASTM MSFOEP _journal_volume 278 _journal_year 1998 _journal_page_first 680 _journal_page_last 685 _cell_length_a 10.5961(3) _cell_length_b 10.5961(3) _cell_length_c 10.5961(3) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 1189.7 _cell_formula_units_Z 16 _symmetry_space_group_name_H-M 'I a -3' _symmetry_Int_Tables_number 206 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'x,-y,1/2-z' '1/2-x,y,-z' '-x,1/2-y,z' 'y,z,x' '-y,1/2-z,x' 'y,-z,1/2-x' '1/2-y,z,-x' 'z,x,y' '1/2-z,x,-y' '-z,1/2-x,y' 'z,-x,1/2-y' '-x,-y,-z' '-x,y,1/2+z' '1/2+x,-y,z' 'x,1/2+y,-z' '-y,-z,-x' 'y,1/2+z,-x' '-y,z,1/2+x' '1/2+y,-z,x' '-z,-x,-y' '1/2+z,-x,y' 'z,1/2+x,-y' '-z,x,1/2+y' '1/2+x,1/2+y,1/2+z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,-y,1/2+z' '1/2+y,1/2+z,1/2+x' '1/2-y,-z,1/2+x' '1/2+y,1/2-z,-x' '-y,1/2+z,1/2-x' '1/2+z,1/2+x,1/2+y' '-z,1/2+x,1/2-y' '1/2-z,-x,1/2+y' '1/2+z,1/2-x,-y' '1/2-x,1/2-y,1/2-z' '1/2-x,1/2+y,z' 'x,1/2-y,1/2+z' '1/2+x,y,1/2-z' '1/2-y,1/2-z,1/2-x' '1/2+y,z,1/2-x' '1/2-y,1/2+z,x' 'y,1/2-z,1/2+x' '1/2-z,1/2-x,1/2-y' 'z,1/2-x,1/2+y' '1/2+z,x,1/2-y' '1/2-z,1/2+x,y' loop_ _atom_type_symbol _atom_type_oxidation_number Y3+ 3.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Y1 Y3+ 24 d 0.96739(5) 0. 0.25 1. 0 d Y2 Y3+ 8 b 0.25 0.25 0.25 1. 0 d O1 O2- 48 e 0.39075(7) 0.15189(7) 0.38012(6) 1. 0 d _refine_ls_R_factor_all 0.011 _cod_database_code 1009014 avogadro-1.1.1/crystals/oxides/WO2.cif0000644000175000001440000000336412250371054016763 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910153 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Pages 231 & 239 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931. ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 231 _journal_page_last 239 _journal_year 1931 _chemical_formula_structural WO2 _chemical_formula_sum 'O2 W' _chemical_name_systematic 'Tungsten dioxide' _symmetry_cell_setting tetragonal _symmetry_Int_Tables_number 136 _symmetry_space_group_name_H-M 'P 42/m n m' _audit_creation_date 2005-03-11 _audit_creation_method ; Pages 231 & 239 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931. ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.86 _cell_length_b 4.86 _cell_length_c 2.77 _cell_volume 56.661 _[local]_cod_chemical_formula_sum_orig 'W O2' _cod_database_code 5910153 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.000000 0.000000 0.000000 W 0.300000 0.300000 0.000000 O avogadro-1.1.1/crystals/oxides/V2O3-Karelianite.cif0000644000175000001440000000516312250371054021272 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008083.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008083 loop_ _publ_author_name 'Newnham, R. E.' 'de Haan, Y. M.' _publ_section_title ; Refinement of the alpha Al2O3, Ti2O3, V2O3 and Cr2O3 structures Locality: synthetic ; _journal_name_full 'Zeitschrift fur Kristallographie' _journal_page_first 235 _journal_page_last 237 _journal_volume 117 _journal_year 1962 _chemical_formula_sum 'O3 V2' _chemical_name_mineral Karelianite _space_group_IT_number 167 _symmetry_space_group_name_Hall '-R 3 2"c' _symmetry_space_group_name_H-M 'R -3 c :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.952 _cell_length_b 4.952 _cell_length_c 14.002 _cell_volume 297.360 _exptl_crystal_density_diffrn 5.022 _[local]_cod_cif_authors_sg_H-M 'R -3 c' _[local]_cod_chemical_formula_sum_orig 'V2 O3' _cod_database_code 9008083 _amcsd_database_code AMCSD#0010273 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z x,x-y,1/2+z 2/3+x,1/3+x-y,5/6+z 1/3+x,2/3+x-y,1/6+z y,x,1/2-z 2/3+y,1/3+x,5/6-z 1/3+y,2/3+x,1/6-z -x+y,y,1/2+z 2/3-x+y,1/3+y,5/6+z 1/3-x+y,2/3+y,1/6+z -x,-x+y,1/2-z 2/3-x,1/3-x+y,5/6-z 1/3-x,2/3-x+y,1/6-z -y,-x,1/2+z 2/3-y,1/3-x,5/6+z 1/3-y,2/3-x,1/6+z x-y,-y,1/2-z 2/3+x-y,1/3-y,5/6-z 1/3+x-y,2/3-y,1/6-z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z V 0.00000 0.00000 0.34630 O 0.31500 0.00000 0.25000 avogadro-1.1.1/crystals/oxides/PbO2-Scrutinyite.cif0000644000175000001440000000410112250371054021424 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009091.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009091 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: known as alpha-PbO2 ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O2 Pb' _chemical_name_mineral Scrutinyite _space_group_IT_number 60 _symmetry_space_group_name_Hall '-P 2n 2ab' _symmetry_space_group_name_H-M 'P b c n' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.947 _cell_length_b 5.951 _cell_length_c 5.497 _cell_volume 161.829 _exptl_crystal_density_diffrn 9.818 _[local]_cod_chemical_formula_sum_orig 'Pb O2' _cod_database_code 9009091 _amcsd_database_code AMCSD#0011423 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,-y,1/2+z -x,y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z 1/2+x,1/2+y,1/2-z 1/2-x,1/2-y,1/2+z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pb 0.00000 0.17800 0.25000 O 0.27600 0.41000 0.42500 avogadro-1.1.1/crystals/oxides/MoO3-Molybdite.cif0000644000175000001440000000443412250371054021056 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009670.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009670 loop_ _publ_author_name 'Sitepu, H.' 'O'Connor B H' 'Li, D.' _publ_section_title ; Comparative evaluation of the March and generalized spherical harmonic preferred orientation models using X-ray diffraction data for molybdite and calcite powders Note: March model Locality: synthetic ; _journal_name_full 'Journal of Applied Crystallography' _journal_page_first 158 _journal_page_last 167 _journal_volume 38 _journal_year 2005 _chemical_formula_sum 'Mo O3' _chemical_name_mineral Molybdite _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2c 2ab' _symmetry_space_group_name_H-M 'P b n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.9621 _cell_length_b 13.855 _cell_length_c 3.6986 _cell_volume 203.034 _exptl_crystal_density_diffrn 4.709 _cod_database_code 9009670 _amcsd_database_code AMCSD#0012502 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,y,1/2-z -x,-y,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Mo 0.07500 0.10200 0.25000 0.01563 O1 0.52600 0.42600 0.25000 0.01012 O2 0.56600 0.08600 0.25000 0.01112 O3 0.01000 0.22400 0.25000 0.01495 avogadro-1.1.1/crystals/oxides/CoFe2O4.cif0000644000175000001440000001211612250371054017450 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910063 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 290 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931 & http://jcrystal.com/steffenweber/gallery/StructureTypes/st4.html ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 290 _journal_page_last 290 _journal_year 1931 _chemical_formula_structural CoFe2O4 _chemical_formula_sum 'Co Fe2 O4' _chemical_name_systematic CoFe2O4 _space_group_IT_number 227 _symmetry_cell_setting cubic _symmetry_Int_Tables_number 227 _symmetry_space_group_name_Hall '-F 4vw 2vw 3' _symmetry_space_group_name_H-M 'F d -3 m :2' _audit_creation_date 2005-04-11 _audit_creation_method ; Page 290 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931 & http://jcrystal.com/steffenweber/gallery/StructureTypes/st4.html ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.35 _cell_length_b 8.35 _cell_length_c 8.35 _cell_volume 582.183 _[local]_cod_cif_authors_sg_H-M 'F d -3 m' _cod_database_code 5910063 loop_ _symmetry_equiv_pos_as_xyz x,y,z x+1/4,-z,y+1/4 x+1/4,z+1/4,-y z+1/4,y+1/4,-x -z,y+1/4,x+1/4 -y,x+1/4,z+1/4 y+1/4,-x,z+1/4 z,x,y y,z,x -y+1/4,-z+1/4,x z,-x+1/4,-y+1/4 -y+1/4,z,-x+1/4 -z+1/4,-x+1/4,y -z+1/4,x,-y+1/4 y,-z+1/4,-x+1/4 x,-y+1/4,-z+1/4 -x+1/4,y,-z+1/4 -x+1/4,-y+1/4,z y+1/4,x+1/4,-z -y,-x,-z z+1/4,-y,x+1/4 -z,-y,-x -x,z+1/4,y+1/4 -x,-z,-y -x,-y,-z -x+3/4,z,-y+3/4 -x+3/4,-z+3/4,y -z+3/4,-y+3/4,x z,-y+3/4,-x+3/4 y,-x+3/4,-z+3/4 -y+3/4,x,-z+3/4 -z,-x,-y -y,-z,-x y+3/4,z+3/4,-x -z,x+3/4,y+3/4 y+3/4,-z,x+3/4 z+3/4,x+3/4,-y z+3/4,-x,y+3/4 -y,z+3/4,x+3/4 -x,y+3/4,z+3/4 x+3/4,-y,z+3/4 x+3/4,y+3/4,-z -y+3/4,-x+3/4,z y,x,z -z+3/4,y,-x+3/4 z,y,x x,-z+3/4,-y+3/4 x,z,y x,y+1/2,z+1/2 x+1/4,-z+1/2,y+3/4 x+1/4,z+3/4,-y+1/2 z+1/4,y+3/4,-x+1/2 -z,y+3/4,x+3/4 -y,x+3/4,z+3/4 y+1/4,-x+1/2,z+3/4 z,x+1/2,y+1/2 y,z+1/2,x+1/2 -y+1/4,-z+3/4,x+1/2 z,-x+3/4,-y+3/4 -y+1/4,z+1/2,-x+3/4 -z+1/4,-x+3/4,y+1/2 -z+1/4,x+1/2,-y+3/4 y,-z+3/4,-x+3/4 x,-y+3/4,-z+3/4 -x+1/4,y+1/2,-z+3/4 -x+1/4,-y+3/4,z+1/2 y+1/4,x+3/4,-z+1/2 -y,-x+1/2,-z+1/2 z+1/4,-y+1/2,x+3/4 -z,-y+1/2,-x+1/2 -x,z+3/4,y+3/4 -x,-z+1/2,-y+1/2 -x,-y+1/2,-z+1/2 -x+3/4,z+1/2,-y+1/4 -x+3/4,-z+1/4,y+1/2 -z+3/4,-y+1/4,x+1/2 z,-y+1/4,-x+1/4 y,-x+1/4,-z+1/4 -y+3/4,x+1/2,-z+1/4 -z,-x+1/2,-y+1/2 -y,-z+1/2,-x+1/2 y+3/4,z+1/4,-x+1/2 -z,x+1/4,y+1/4 y+3/4,-z+1/2,x+1/4 z+3/4,x+1/4,-y+1/2 z+3/4,-x+1/2,y+1/4 -y,z+1/4,x+1/4 -x,y+1/4,z+1/4 x+3/4,-y+1/2,z+1/4 x+3/4,y+1/4,-z+1/2 -y+3/4,-x+1/4,z+1/2 y,x+1/2,z+1/2 -z+3/4,y+1/2,-x+1/4 z,y+1/2,x+1/2 x,-z+1/4,-y+1/4 x,z+1/2,y+1/2 x+1/2,y,z+1/2 x+3/4,-z,y+3/4 x+3/4,z+1/4,-y+1/2 z+3/4,y+1/4,-x+1/2 -z+1/2,y+1/4,x+3/4 -y+1/2,x+1/4,z+3/4 y+3/4,-x,z+3/4 z+1/2,x,y+1/2 y+1/2,z,x+1/2 -y+3/4,-z+1/4,x+1/2 z+1/2,-x+1/4,-y+3/4 -y+3/4,z,-x+3/4 -z+3/4,-x+1/4,y+1/2 -z+3/4,x,-y+3/4 y+1/2,-z+1/4,-x+3/4 x+1/2,-y+1/4,-z+3/4 -x+3/4,y,-z+3/4 -x+3/4,-y+1/4,z+1/2 y+3/4,x+1/4,-z+1/2 -y+1/2,-x,-z+1/2 z+3/4,-y,x+3/4 -z+1/2,-y,-x+1/2 -x+1/2,z+1/4,y+3/4 -x+1/2,-z,-y+1/2 -x+1/2,-y,-z+1/2 -x+1/4,z,-y+1/4 -x+1/4,-z+3/4,y+1/2 -z+1/4,-y+3/4,x+1/2 z+1/2,-y+3/4,-x+1/4 y+1/2,-x+3/4,-z+1/4 -y+1/4,x,-z+1/4 -z+1/2,-x,-y+1/2 -y+1/2,-z,-x+1/2 y+1/4,z+3/4,-x+1/2 -z+1/2,x+3/4,y+1/4 y+1/4,-z,x+1/4 z+1/4,x+3/4,-y+1/2 z+1/4,-x,y+1/4 -y+1/2,z+3/4,x+1/4 -x+1/2,y+3/4,z+1/4 x+1/4,-y,z+1/4 x+1/4,y+3/4,-z+1/2 -y+1/4,-x+3/4,z+1/2 y+1/2,x,z+1/2 -z+1/4,y,-x+1/4 z+1/2,y,x+1/2 x+1/2,-z+3/4,-y+1/4 x+1/2,z,y+1/2 x+1/2,y+1/2,z x+3/4,-z+1/2,y+1/4 x+3/4,z+3/4,-y z+3/4,y+3/4,-x -z+1/2,y+3/4,x+1/4 -y+1/2,x+3/4,z+1/4 y+3/4,-x+1/2,z+1/4 z+1/2,x+1/2,y y+1/2,z+1/2,x -y+3/4,-z+3/4,x z+1/2,-x+3/4,-y+1/4 -y+3/4,z+1/2,-x+1/4 -z+3/4,-x+3/4,y -z+3/4,x+1/2,-y+1/4 y+1/2,-z+3/4,-x+1/4 x+1/2,-y+3/4,-z+1/4 -x+3/4,y+1/2,-z+1/4 -x+3/4,-y+3/4,z y+3/4,x+3/4,-z -y+1/2,-x+1/2,-z z+3/4,-y+1/2,x+1/4 -z+1/2,-y+1/2,-x -x+1/2,z+3/4,y+1/4 -x+1/2,-z+1/2,-y -x+1/2,-y+1/2,-z -x+1/4,z+1/2,-y+3/4 -x+1/4,-z+1/4,y -z+1/4,-y+1/4,x z+1/2,-y+1/4,-x+3/4 y+1/2,-x+1/4,-z+3/4 -y+1/4,x+1/2,-z+3/4 -z+1/2,-x+1/2,-y -y+1/2,-z+1/2,-x y+1/4,z+1/4,-x -z+1/2,x+1/4,y+3/4 y+1/4,-z+1/2,x+3/4 z+1/4,x+1/4,-y z+1/4,-x+1/2,y+3/4 -y+1/2,z+1/4,x+3/4 -x+1/2,y+1/4,z+3/4 x+1/4,-y+1/2,z+3/4 x+1/4,y+1/4,-z -y+1/4,-x+1/4,z y+1/2,x+1/2,z -z+1/4,y+1/2,-x+3/4 z+1/2,y+1/2,x x+1/2,-z+1/4,-y+3/4 x+1/2,z+1/2,y loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 Co 0.62500 0.62500 0.62500 Fe 0.38700 0.38700 0.38700 O avogadro-1.1.1/crystals/oxides/AgO.cif0000644000175000001440000000372512250371054017023 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008962.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008962 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ag O' _chemical_name_mineral AgO _space_group_IT_number 14 _symmetry_space_group_name_Hall '-P 2ybc' _symmetry_space_group_name_H-M 'P 1 21/c 1' _cell_angle_alpha 90 _cell_angle_beta 107.50 _cell_angle_gamma 90 _cell_length_a 5.852 _cell_length_b 3.478 _cell_length_c 5.495 _cell_volume 106.665 _exptl_crystal_density_diffrn 7.713 _cod_database_code 9008962 _amcsd_database_code AMCSD#0011293 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,1/2+z -x,1/2+y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ag1 0.00000 0.00000 0.00000 Ag2 0.50000 0.00000 0.50000 O 0.29500 0.35000 0.23000 avogadro-1.1.1/crystals/oxides/Ag2O.cif0000644000175000001440000000454612250371054017107 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010604.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010604 _chemical_name_systematic 'Silver oxide' _chemical_formula_structural 'Ag2 O' _chemical_formula_sum 'Ag2 O' _publ_section_title ; The Crystal Structure of Silver Oxide (Ag~2~ O) ; _space_group_IT_number 201 _symmetry_space_group_name_Hall 'P 2 2 3 -1n' _symmetry_space_group_name_H-M 'P n -3 :1' _[local]_cod_cif_authors_sg_H-M 'P n -3 S' loop_ _publ_author_name 'Wyckoff, R W G' _journal_name_full ; American Journal of Science, Serie 5(1,1921-1938) ; _journal_coden_ASTM AJSC5L _journal_volume 3 _journal_year 1922 _journal_page_first 184 _journal_page_last 188 _cell_length_a 4.76 _cell_length_b 4.76 _cell_length_c 4.76 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 107.9 _cell_formula_units_Z 2 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'x,-y,-z' '-x,y,-z' '-x,-y,z' 'y,z,x' '-y,-z,x' 'y,-z,-x' '-y,z,-x' 'z,x,y' '-z,x,-y' '-z,-x,y' 'z,-x,-y' '1/2-x,1/2-y,1/2-z' '1/2-x,1/2+y,1/2+z' '1/2+x,1/2-y,1/2+z' '1/2+x,1/2+y,1/2-z' '1/2-y,1/2-z,1/2-x' '1/2+y,1/2+z,1/2-x' '1/2-y,1/2+z,1/2+x' '1/2+y,1/2-z,1/2+x' '1/2-z,1/2-x,1/2-y' '1/2+z,1/2-x,1/2+y' '1/2+z,1/2+x,1/2-y' '1/2-z,1/2+x,1/2+y' loop_ _atom_type_symbol _atom_type_oxidation_number O2- -2.000 Ag1+ 1.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag O1 O2- 2 a 0. 0. 0. 1. 0 d Ag1 Ag1+ 4 b 0.25 0.25 0.25 1. 0 d _cod_database_code 1010604 avogadro-1.1.1/crystals/oxides/MoO2-Tugarinovite.cif0000644000175000001440000000374012250371054021604 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009090.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009090 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Mo O2' _chemical_name_mineral Tugarinovite _space_group_IT_number 14 _symmetry_space_group_name_Hall '-P 2ybc' _symmetry_space_group_name_H-M 'P 1 21/c 1' _cell_angle_alpha 90 _cell_angle_beta 120.983 _cell_angle_gamma 90 _cell_length_a 5.584 _cell_length_b 4.842 _cell_length_c 5.608 _cell_volume 129.993 _exptl_crystal_density_diffrn 6.537 _cod_database_code 9009090 _amcsd_database_code AMCSD#0011422 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,1/2+z -x,1/2+y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mo 0.23200 0.00000 0.01700 O1 0.11000 0.21000 0.24000 O2 0.39000 0.70000 0.30000 avogadro-1.1.1/crystals/oxides/Na2O.cif0000644000175000001440000001053412250371054017110 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009063.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009063 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Anti-fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Na2 O' _chemical_name_mineral Na2O _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.55 _cell_length_b 5.55 _cell_length_c 5.55 _cell_volume 170.954 _exptl_crystal_density_diffrn 2.408 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9009063 _amcsd_database_code AMCSD#0011395 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Na 0.25000 0.25000 0.25000 O 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/oxides/V2O5-Shcherbinaite.cif0000644000175000001440000000445212250371054021614 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9012221.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9012221 loop_ _publ_author_name 'Shklover, V.' 'Haibach, T.' 'Ried, F.' 'Nesper, R.' 'Novak, P.' _publ_section_title ; Crystal structure of the product of Mg2+ insertion into V2O5 single crystals Locality: synthetic Sample: IIb ; _journal_name_full 'Journal of Solid State Chemistry' _journal_page_first 317 _journal_page_last 323 _journal_volume 123 _journal_year 1996 _chemical_formula_sum 'O5 V2' _chemical_name_mineral Shcherbinaite _space_group_IT_number 59 _symmetry_space_group_name_Hall '-P 2ab 2a' _symmetry_space_group_name_H-M 'P m m n :2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 11.544 _cell_length_b 3.571 _cell_length_c 4.383 _cell_volume 180.683 _exptl_crystal_density_diffrn 3.343 _[local]_cod_cif_authors_sg_H-M 'P m m n' _[local]_cod_chemical_formula_sum_orig 'V2 O5' _cod_database_code 9012221 _amcsd_database_code AMCSD#0012838 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,z -x,1/2+y,-z 1/2-x,y,z 1/2+x,-y,-z 1/2+x,1/2+y,-z 1/2-x,1/2-y,z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv V 0.60123 0.25000 0.10860 0.00750 O1 0.43090 0.25000 -0.00280 0.00990 O2 0.60450 0.25000 0.46970 0.01740 O3 0.75000 0.25000 0.00080 0.01270 avogadro-1.1.1/crystals/oxides/In2O3-IndiumOxide.cif0000644000175000001440000000500012250371054021407 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010588.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010588 _chemical_name_systematic 'Indium oxide' _chemical_formula_structural 'In2 O3' _chemical_formula_sum 'In2 O3' _publ_section_title ; Untersuchungen ueber die Kristallstruktur von Sesquioxyden und Verbindungen ABO~3~ ; loop_ _publ_author_name 'Zachariasen, W H' _journal_name_full ; Skrifter utgitt av det Norske Videnskaps-Akademi i Oslo 1: Matematisk- Naturvidenskapelig Klasse ; _journal_coden_ASTM SUNVAQ _journal_volume 1928 _journal_year 1928 _journal_page_first 1 _journal_page_last 165 _cell_length_a 10.12(3) _cell_length_b 10.12(3) _cell_length_c 10.12(3) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 1036.4 _cell_formula_units_Z 16 _symmetry_space_group_name_H-M 'I 21 3' _symmetry_Int_Tables_number 199 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'y,z,x' 'z,x,y' '1/2+x,1/2-y,-z' '1/2+y,1/2-z,-x' '1/2+z,1/2-x,-y' '-x,1/2+y,1/2-z' '-y,1/2+z,1/2-x' '-z,1/2+x,1/2-y' '1/2-x,-y,1/2+z' '1/2-y,-z,1/2+x' '1/2-z,-x,1/2+y' '1/2+x,1/2+y,1/2+z' '1/2+y,1/2+z,1/2+x' '1/2+z,1/2+x,1/2+y' 'x,-y,1/2-z' 'y,-z,1/2-x' 'z,-x,1/2-y' '1/2-x,y,-z' '1/2-y,z,-x' '1/2-z,x,-y' '-x,1/2-y,z' '-y,1/2-z,x' '-z,1/2-x,y' loop_ _atom_type_symbol _atom_type_oxidation_number In3+ 3.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag In1 In3+ 8 a 0.25 0.25 0.25 1. 0 d In2 In3+ 12 b 0.021(7) 0. 0.25 1. 0 d In3 In3+ 12 b 0.542(14) 0. 0.25 1. 0 d O1 O2- 24 c 0.125 0.125 0.375 1. 0 d O2 O2- 24 c 0.125 0.375 0.375 1. 0 d _cod_database_code 1010588 avogadro-1.1.1/crystals/oxides/CuO-Tenorite.cif0000644000175000001440000000376412250371054020635 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008961.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008961 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cu O' _chemical_name_mineral Tenorite _space_group_IT_number 15 _symmetry_space_group_name_Hall '-C 2yc' _symmetry_space_group_name_H-M 'C 1 2/c 1' _cell_angle_alpha 90 _cell_angle_beta 99.48 _cell_angle_gamma 90 _cell_length_a 4.653 _cell_length_b 3.410 _cell_length_c 5.108 _cell_volume 79.940 _exptl_crystal_density_diffrn 6.609 _cod_database_code 9008961 _amcsd_database_code AMCSD#0011292 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,z x,-y,1/2+z 1/2+x,1/2-y,1/2+z -x,y,1/2-z 1/2-x,1/2+y,1/2-z -x,-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cu 0.25000 0.25000 0.00000 O 0.00000 -0.58400 0.25000 avogadro-1.1.1/crystals/oxides/RuO2.cif0000644000175000001440000000365512250371054017146 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2101852.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided by IUCr Journals, http://journals.iucr.org/. # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_2101852 loop_ _publ_author_name 'Bolzan, A. A.' 'Fong, C.' 'Kennedy, B. J.' 'Howard, C. J.' _publ_section_title ; Structural Studies of Rutile-Type Metal Dioxides ; _journal_issue 3 _journal_name_full 'Acta Crystallographica Section B' _journal_page_first 373 _journal_page_last 380 _journal_volume 53 _journal_year 1997 _chemical_formula_sum 'O2 Ru' _[local]_cod_chemical_formula_sum_orig 'O2 Ru1' _symmetry_cell_setting tetragonal _symmetry_space_group_name_Hall '-P 4n 2n' _symmetry_space_group_name_H-M 'P 42/m n m' _cell_angle_alpha 90.0 _cell_angle_beta 90.0 _cell_angle_gamma 90.0 _cell_formula_units_Z 2 _cell_length_a 4.4968(2) _cell_length_b 4.4968(2) _cell_length_c 3.10490(10) _diffrn_radiation_type neutron _diffrn_radiation_wavelength 1.377 _[local]_cod_data_source_file br0044.cif loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ru .0 .0 .0 O .30530(10) .30530(10) .0 _cod_database_code 2101852 avogadro-1.1.1/crystals/oxides/PbO.cif0000644000175000001440000000406612250371054017034 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008960.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008960 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample known as yellow plumbous oxide ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Pb' _chemical_name_mineral PbO _space_group_IT_number 57 _symmetry_space_group_name_Hall '-P 2a 2ab' _symmetry_space_group_name_H-M 'P b m a' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.891 _cell_length_b 4.775 _cell_length_c 5.489 _cell_volume 154.403 _exptl_crystal_density_diffrn 9.602 _[local]_cod_chemical_formula_sum_orig 'Pb O' _cod_database_code 9008960 _amcsd_database_code AMCSD#0011291 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z 1/2+x,y,-z 1/2-x,-y,z x,1/2-y,z -x,1/2+y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pb -0.02080 0.25000 0.23090 O 0.08860 0.25000 -0.13090 avogadro-1.1.1/crystals/oxides/NiFe2O4.cif0000644000175000001440000001220112250371054017450 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910064 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 292 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931 & http://jcrystal.com/steffenweber/gallery/StructureTypes/st4.html ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 292 _journal_page_last 292 _journal_year 1931 _chemical_formula_structural NiFe2O4 _chemical_formula_sum 'Fe2 Ni O4' _chemical_name_systematic NiFe2O4 _space_group_IT_number 227 _symmetry_cell_setting cubic _symmetry_Int_Tables_number 227 _symmetry_space_group_name_Hall '-F 4vw 2vw 3' _symmetry_space_group_name_H-M 'F d -3 m :2' _audit_creation_date 2005-04-11 _audit_creation_method ; Page 292 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931 & http://jcrystal.com/steffenweber/gallery/StructureTypes/st4.html ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.34 _cell_length_b 8.34 _cell_length_c 8.34 _cell_volume 580.094 _[local]_cod_cif_authors_sg_H-M 'F d -3 m' _[local]_cod_chemical_formula_sum_orig 'Ni Fe2 O4' _cod_database_code 5910064 loop_ _symmetry_equiv_pos_as_xyz x,y,z x+1/4,-z,y+1/4 x+1/4,z+1/4,-y z+1/4,y+1/4,-x -z,y+1/4,x+1/4 -y,x+1/4,z+1/4 y+1/4,-x,z+1/4 z,x,y y,z,x -y+1/4,-z+1/4,x z,-x+1/4,-y+1/4 -y+1/4,z,-x+1/4 -z+1/4,-x+1/4,y -z+1/4,x,-y+1/4 y,-z+1/4,-x+1/4 x,-y+1/4,-z+1/4 -x+1/4,y,-z+1/4 -x+1/4,-y+1/4,z y+1/4,x+1/4,-z -y,-x,-z z+1/4,-y,x+1/4 -z,-y,-x -x,z+1/4,y+1/4 -x,-z,-y -x,-y,-z -x+3/4,z,-y+3/4 -x+3/4,-z+3/4,y -z+3/4,-y+3/4,x z,-y+3/4,-x+3/4 y,-x+3/4,-z+3/4 -y+3/4,x,-z+3/4 -z,-x,-y -y,-z,-x y+3/4,z+3/4,-x -z,x+3/4,y+3/4 y+3/4,-z,x+3/4 z+3/4,x+3/4,-y z+3/4,-x,y+3/4 -y,z+3/4,x+3/4 -x,y+3/4,z+3/4 x+3/4,-y,z+3/4 x+3/4,y+3/4,-z -y+3/4,-x+3/4,z y,x,z -z+3/4,y,-x+3/4 z,y,x x,-z+3/4,-y+3/4 x,z,y x,y+1/2,z+1/2 x+1/4,-z+1/2,y+3/4 x+1/4,z+3/4,-y+1/2 z+1/4,y+3/4,-x+1/2 -z,y+3/4,x+3/4 -y,x+3/4,z+3/4 y+1/4,-x+1/2,z+3/4 z,x+1/2,y+1/2 y,z+1/2,x+1/2 -y+1/4,-z+3/4,x+1/2 z,-x+3/4,-y+3/4 -y+1/4,z+1/2,-x+3/4 -z+1/4,-x+3/4,y+1/2 -z+1/4,x+1/2,-y+3/4 y,-z+3/4,-x+3/4 x,-y+3/4,-z+3/4 -x+1/4,y+1/2,-z+3/4 -x+1/4,-y+3/4,z+1/2 y+1/4,x+3/4,-z+1/2 -y,-x+1/2,-z+1/2 z+1/4,-y+1/2,x+3/4 -z,-y+1/2,-x+1/2 -x,z+3/4,y+3/4 -x,-z+1/2,-y+1/2 -x,-y+1/2,-z+1/2 -x+3/4,z+1/2,-y+1/4 -x+3/4,-z+1/4,y+1/2 -z+3/4,-y+1/4,x+1/2 z,-y+1/4,-x+1/4 y,-x+1/4,-z+1/4 -y+3/4,x+1/2,-z+1/4 -z,-x+1/2,-y+1/2 -y,-z+1/2,-x+1/2 y+3/4,z+1/4,-x+1/2 -z,x+1/4,y+1/4 y+3/4,-z+1/2,x+1/4 z+3/4,x+1/4,-y+1/2 z+3/4,-x+1/2,y+1/4 -y,z+1/4,x+1/4 -x,y+1/4,z+1/4 x+3/4,-y+1/2,z+1/4 x+3/4,y+1/4,-z+1/2 -y+3/4,-x+1/4,z+1/2 y,x+1/2,z+1/2 -z+3/4,y+1/2,-x+1/4 z,y+1/2,x+1/2 x,-z+1/4,-y+1/4 x,z+1/2,y+1/2 x+1/2,y,z+1/2 x+3/4,-z,y+3/4 x+3/4,z+1/4,-y+1/2 z+3/4,y+1/4,-x+1/2 -z+1/2,y+1/4,x+3/4 -y+1/2,x+1/4,z+3/4 y+3/4,-x,z+3/4 z+1/2,x,y+1/2 y+1/2,z,x+1/2 -y+3/4,-z+1/4,x+1/2 z+1/2,-x+1/4,-y+3/4 -y+3/4,z,-x+3/4 -z+3/4,-x+1/4,y+1/2 -z+3/4,x,-y+3/4 y+1/2,-z+1/4,-x+3/4 x+1/2,-y+1/4,-z+3/4 -x+3/4,y,-z+3/4 -x+3/4,-y+1/4,z+1/2 y+3/4,x+1/4,-z+1/2 -y+1/2,-x,-z+1/2 z+3/4,-y,x+3/4 -z+1/2,-y,-x+1/2 -x+1/2,z+1/4,y+3/4 -x+1/2,-z,-y+1/2 -x+1/2,-y,-z+1/2 -x+1/4,z,-y+1/4 -x+1/4,-z+3/4,y+1/2 -z+1/4,-y+3/4,x+1/2 z+1/2,-y+3/4,-x+1/4 y+1/2,-x+3/4,-z+1/4 -y+1/4,x,-z+1/4 -z+1/2,-x,-y+1/2 -y+1/2,-z,-x+1/2 y+1/4,z+3/4,-x+1/2 -z+1/2,x+3/4,y+1/4 y+1/4,-z,x+1/4 z+1/4,x+3/4,-y+1/2 z+1/4,-x,y+1/4 -y+1/2,z+3/4,x+1/4 -x+1/2,y+3/4,z+1/4 x+1/4,-y,z+1/4 x+1/4,y+3/4,-z+1/2 -y+1/4,-x+3/4,z+1/2 y+1/2,x,z+1/2 -z+1/4,y,-x+1/4 z+1/2,y,x+1/2 x+1/2,-z+3/4,-y+1/4 x+1/2,z,y+1/2 x+1/2,y+1/2,z x+3/4,-z+1/2,y+1/4 x+3/4,z+3/4,-y z+3/4,y+3/4,-x -z+1/2,y+3/4,x+1/4 -y+1/2,x+3/4,z+1/4 y+3/4,-x+1/2,z+1/4 z+1/2,x+1/2,y y+1/2,z+1/2,x -y+3/4,-z+3/4,x z+1/2,-x+3/4,-y+1/4 -y+3/4,z+1/2,-x+1/4 -z+3/4,-x+3/4,y -z+3/4,x+1/2,-y+1/4 y+1/2,-z+3/4,-x+1/4 x+1/2,-y+3/4,-z+1/4 -x+3/4,y+1/2,-z+1/4 -x+3/4,-y+3/4,z y+3/4,x+3/4,-z -y+1/2,-x+1/2,-z z+3/4,-y+1/2,x+1/4 -z+1/2,-y+1/2,-x -x+1/2,z+3/4,y+1/4 -x+1/2,-z+1/2,-y -x+1/2,-y+1/2,-z -x+1/4,z+1/2,-y+3/4 -x+1/4,-z+1/4,y -z+1/4,-y+1/4,x z+1/2,-y+1/4,-x+3/4 y+1/2,-x+1/4,-z+3/4 -y+1/4,x+1/2,-z+3/4 -z+1/2,-x+1/2,-y -y+1/2,-z+1/2,-x y+1/4,z+1/4,-x -z+1/2,x+1/4,y+3/4 y+1/4,-z+1/2,x+3/4 z+1/4,x+1/4,-y z+1/4,-x+1/2,y+3/4 -y+1/2,z+1/4,x+3/4 -x+1/2,y+1/4,z+3/4 x+1/4,-y+1/2,z+3/4 x+1/4,y+1/4,-z -y+1/4,-x+1/4,z y+1/2,x+1/2,z -z+1/4,y+1/2,-x+3/4 z+1/2,y+1/2,x x+1/2,-z+1/4,-y+3/4 x+1/2,z+1/2,y loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 Ni 0.62500 0.62500 0.62500 Fe 0.38700 0.38700 0.38700 O avogadro-1.1.1/crystals/oxides/VO.cif0000644000175000001440000001060012250371054016667 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008766.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008766 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O V' _chemical_name_mineral VO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.062 _cell_length_b 4.062 _cell_length_c 4.062 _cell_volume 67.022 _exptl_crystal_density_diffrn 6.634 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'V O' _cod_database_code 9008766 _amcsd_database_code AMCSD#0011097 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z V 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/SmO.cif0000644000175000001440000001061012250371054017042 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008717.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008717 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Sm' _chemical_name_mineral SmO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.9883 _cell_length_b 4.9883 _cell_length_c 4.9883 _cell_volume 124.125 _exptl_crystal_density_diffrn 8.902 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Sm O' _cod_database_code 9008717 _amcsd_database_code AMCSD#0011048 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sm 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/La2O3-LanthanumOxide-A.cif0000644000175000001440000000445612250371054022273 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2002286.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_2002286 _chemical_name_systematic 'Lanthanum oxide - A' _chemical_formula_structural 'La2 O3' _chemical_formula_sum 'La2 O3' _publ_section_title 'Strukturuntersuchungen an La2 O3' loop_ _publ_author_name 'Mueller-Buschbaum, Hk' 'Schnering, H G von' _journal_name_full ; Zeitschrift fuer Anorganische und Allgemeine Chemie ; _journal_volume 340 _journal_year 1965 _journal_page_first 232 _journal_page_last 245 _cell_length_a 3.9373 _cell_length_b 3.9373 _cell_length_c 6.1299 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 82.3 _cell_formula_units_Z 1 _symmetry_space_group_name_H-M 'P 63/m m c' _symmetry_Int_Tables_number 194 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-y,x-y,z' 'y-x,-x,z' '-y,-x,z' 'y-x,y,z' 'x,x-y,z' '-x,-y,-z' 'y,y-x,-z' 'x-y,x,-z' 'y,x,-z' 'x-y,-y,-z' '-x,y-x,-z' '-x,-y,1/2+z' 'y,y-x,1/2+z' 'x-y,x,1/2+z' 'y,x,1/2+z' 'x-y,-y,1/2+z' '-x,y-x,1/2+z' 'x,y,1/2-z' '-y,x-y,1/2-z' 'y-x,-x,1/2-z' '-y,-x,1/2-z' 'y-x,y,1/2-z' 'x,x-y,1/2-z' loop_ _atom_type_symbol _atom_type_oxidation_number La3+ 3.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag La1 La3+ 4 f 0.3333 0.6667 0.234 0.5 0 d O1 O2- 2 a 0. 0. 0. 0.5 0 d O2 O2- 4 f 0.3333 0.6667 0.639 0.5 0 d _refine_ls_R_factor_all 0.075 _cod_database_code 2002286 avogadro-1.1.1/crystals/oxides/TiO2-Brookite.cif0000644000175000001440000000410212250371054020674 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009087.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009087 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O2 Ti' _chemical_name_mineral Brookite _space_group_IT_number 61 _symmetry_space_group_name_Hall '-P 2ac 2ab' _symmetry_space_group_name_H-M 'P b c a' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 9.184 _cell_length_b 5.447 _cell_length_c 5.145 _cell_volume 257.380 _exptl_crystal_density_diffrn 4.123 _[local]_cod_chemical_formula_sum_orig 'Ti O2' _cod_database_code 9009087 _amcsd_database_code AMCSD#0011419 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,1/2+z -x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z 1/2+x,y,1/2-z 1/2-x,-y,1/2+z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ti 0.12900 0.09720 -0.13710 O1 0.01010 0.14860 0.18240 O2 0.23040 0.11300 -0.46290 avogadro-1.1.1/crystals/oxides/HfO2.cif0000644000175000001440000001053312250371054017106 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009016.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009016 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Hf O2' _chemical_name_mineral HfO2 _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.115 _cell_length_b 5.115 _cell_length_c 5.115 _cell_volume 133.825 _exptl_crystal_density_diffrn 10.447 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9009016 _amcsd_database_code AMCSD#0011347 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Hf 0.00000 0.00000 0.00000 O 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/oxides/MnO2-Pyrolusite.cif0000644000175000001440000000421212250371054021275 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009081.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009081 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: beta phase of MnO2, rutile structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Mn O2' _chemical_name_mineral Pyrolusite _space_group_IT_number 136 _symmetry_space_group_name_Hall '-P 4n 2n' _symmetry_space_group_name_H-M 'P 42/m n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.396 _cell_length_b 4.396 _cell_length_c 2.871 _cell_volume 55.482 _exptl_crystal_density_diffrn 5.204 _cod_database_code 9009081 _amcsd_database_code AMCSD#0011413 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z 1/2+y,1/2-x,1/2-z 1/2-y,1/2+x,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z x,y,-z -x,-y,z y,x,z -y,-x,-z 1/2-y,1/2+x,1/2-z 1/2+y,1/2-x,1/2+z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mn 0.00000 0.00000 0.00000 O 0.30200 0.30200 0.00000 avogadro-1.1.1/crystals/oxides/SnO.cif0000644000175000001440000000423412250371054017050 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008956.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008956 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Sn' _chemical_name_mineral SnO _space_group_IT_number 129 _symmetry_space_group_name_Hall 'P 4ab 2ab -1ab' _symmetry_space_group_name_H-M 'P 4/n m m :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.802 _cell_length_b 3.802 _cell_length_c 4.836 _cell_volume 69.905 _exptl_crystal_density_diffrn 6.400 _[local]_cod_cif_authors_sg_H-M 'P 4/n m m' _[local]_cod_chemical_formula_sum_orig 'Sn O' _cod_database_code 9008956 _amcsd_database_code AMCSD#0011287 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2-y,1/2-x,z y,x,-z y,-x,-z 1/2-y,1/2+x,z x,-y,z 1/2-x,1/2+y,-z 1/2+x,1/2+y,-z -x,-y,z 1/2+y,1/2+x,z -y,-x,-z -y,x,-z 1/2+y,1/2-x,z -x,y,z 1/2+x,1/2-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Sn 0.00000 0.50000 0.23850 O 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/oxides/GeO2-Argutite-tetrag.cif0000644000175000001440000000415612250371054022156 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009080.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009080 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Rutile structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ge O2' _chemical_name_mineral Argutite _space_group_IT_number 136 _symmetry_space_group_name_Hall '-P 4n 2n' _symmetry_space_group_name_H-M 'P 42/m n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.395 _cell_length_b 4.395 _cell_length_c 2.859 _cell_volume 55.225 _exptl_crystal_density_diffrn 6.291 _cod_database_code 9009080 _amcsd_database_code AMCSD#0011412 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z 1/2+y,1/2-x,1/2-z 1/2-y,1/2+x,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z x,y,-z -x,-y,z y,x,z -y,-x,-z 1/2-y,1/2+x,1/2-z 1/2+y,1/2-x,1/2+z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ge 0.00000 0.00000 0.00000 O 0.30700 0.30700 0.00000 avogadro-1.1.1/crystals/oxides/UO2-Uraninite.cif0000644000175000001440000001061712250371054020714 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009049.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009049 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O2 U' _chemical_name_mineral Uraninite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.4682 _cell_length_b 5.4682 _cell_length_c 5.4682 _cell_volume 163.506 _exptl_crystal_density_diffrn 10.969 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'U O2' _cod_database_code 9009049 _amcsd_database_code AMCSD#0011381 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z U 0.00000 0.00000 0.00000 O 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/oxides/NbO.cif0000644000175000001440000000450312250371054017026 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008782.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008782 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Sample: defective rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Nb O' _chemical_name_mineral NbO _space_group_IT_number 221 _symmetry_space_group_name_Hall '-P 4 2 3' _symmetry_space_group_name_H-M 'P m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.2103 _cell_length_b 4.2103 _cell_length_c 4.2103 _cell_volume 74.634 _exptl_crystal_density_diffrn 7.269 _[local]_cod_cif_authors_sg_H-M 'P m 3 m' _cod_database_code 9008782 _amcsd_database_code AMCSD#0011113 loop_ _symmetry_equiv_pos_as_xyz x,y,z z,-x,y -y,z,-x x,-y,z -z,x,-y y,-z,x -x,y,-z x,-z,-y -z,y,x y,-x,-z -x,z,y z,-y,-x -y,x,z x,z,y -z,-y,-x y,x,z -x,-z,-y z,y,x -y,-x,-z z,x,-y -y,-z,x x,y,-z -z,-x,y y,z,-x -x,-y,z -z,x,y y,-z,-x -x,y,z z,-x,-y -y,z,x x,-y,-z -x,z,-y z,-y,x -y,x,-z x,-z,y -z,y,-x y,-x,z -x,-z,y z,y,-x -y,-x,z x,z,-y -z,-y,x y,x,-z -z,-x,-y y,z,x -x,-y,-z z,x,y -y,-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Nb 0.00000 0.50000 0.50000 O 0.50000 0.00000 0.00000 avogadro-1.1.1/crystals/oxides/TiO2-Anatase.cif0000644000175000001440000000466412250371054020507 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009086.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009086 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O2 Ti' _chemical_name_mineral Anatase _space_group_IT_number 141 _symmetry_space_group_name_Hall 'I 4bw 2bw -1bw' _symmetry_space_group_name_H-M 'I 41/a m d :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.785 _cell_length_b 3.785 _cell_length_c 9.514 _cell_volume 136.300 _exptl_crystal_density_diffrn 3.893 _[local]_cod_cif_authors_sg_H-M 'I 41/a m d' _[local]_cod_chemical_formula_sum_orig 'Ti O2' _cod_database_code 9009086 _amcsd_database_code AMCSD#0011418 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z -y,1/2-x,1/4+z 1/2-y,-x,3/4+z 1/2+y,1/2+x,1/2-z +y,+x,-z 1/2+y,1/2-x,1/2-z +y,-x,-z -y,1/2+x,1/4+z 1/2-y,+x,3/4+z 1/2+x,1/2-y,1/2+z +x,-y,+z 1/2-x,y,3/4-z -x,1/2+y,1/4-z 1/2+x,y,3/4-z +x,1/2+y,1/4-z 1/2-x,1/2-y,1/2+z -x,-y,+z 1/2+y,x,3/4+z +y,1/2+x,1/4+z -y,-x,-z 1/2-y,1/2-x,1/2-z -y,x,-z 1/2-y,1/2+x,1/2-z 1/2+y,-x,3/4+z +y,1/2-x,1/4+z -x,y,z 1/2-x,1/2+y,1/2+z x,1/2-y,1/4-z 1/2+x,-y,3/4-z -x,1/2-y,1/4-z 1/2-x,-y,3/4-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ti 0.00000 0.00000 0.00000 O 0.00000 0.00000 0.20660 avogadro-1.1.1/crystals/oxides/SiO2-Coesite.cif0000644000175000001440000000453312250371054020520 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9000802.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9000802 loop_ _publ_author_name 'Levien, L.' 'Prewitt, C. T.' _publ_section_title ; High-pressure crystal structure and compressibility of coesite P = 1 atm isotropic refinement ; _journal_name_full 'American Mineralogist' _journal_page_first 324 _journal_page_last 333 _journal_volume 66 _journal_year 1981 _chemical_formula_sum 'O2 Si' _chemical_name_mineral Coesite _space_group_IT_number 15 _symmetry_space_group_name_Hall '-C 2yc' _symmetry_space_group_name_H-M 'C 1 2/c 1' _cell_angle_alpha 90 _cell_angle_beta 120.34 _cell_angle_gamma 90 _cell_length_a 7.1356 _cell_length_b 12.3692 _cell_length_c 7.1736 _cell_volume 546.439 _diffrn_ambient_pressure 100 _exptl_crystal_density_diffrn 2.921 _[local]_cod_chemical_formula_sum_orig 'Si O2' _cod_database_code 9000802 _amcsd_database_code AMCSD#0000815 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,z x,-y,1/2+z 1/2+x,1/2-y,1/2+z -x,y,1/2-z 1/2-x,1/2+y,1/2-z -x,-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Si1 0.14033 0.10833 0.07227 0.00519 Si2 0.50682 0.15799 0.54077 0.00507 O1 0.00000 0.00000 0.00000 0.00899 O2 0.50000 0.11630 0.75000 0.00861 O3 0.26600 0.12340 0.94010 0.01001 O4 0.31140 0.10380 0.32820 0.01026 O5 0.01720 0.21170 0.47820 0.00950 avogadro-1.1.1/crystals/oxides/Rb2O.cif0000644000175000001440000001061312250371054017113 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009067.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009067 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Anti-fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Rb2' _chemical_name_mineral Rb2O _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.74 _cell_length_b 6.74 _cell_length_c 6.74 _cell_volume 306.182 _exptl_crystal_density_diffrn 4.055 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Rb2 O' _cod_database_code 9009067 _amcsd_database_code AMCSD#0011399 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Rb 0.25000 0.25000 0.25000 O 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/oxides/MnO-Manganosite.cif0000644000175000001440000001054112250371054021303 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008674.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008674 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Mn O' _chemical_name_mineral Manganosite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.4448 _cell_length_b 4.4448 _cell_length_c 4.4448 _cell_volume 87.813 _exptl_crystal_density_diffrn 5.366 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008674 _amcsd_database_code AMCSD#0011005 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mn 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/TiO2-Rutile.cif0000644000175000001440000000421712250371054020371 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009083.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009083 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O2 Ti' _chemical_name_mineral Rutile _space_group_IT_number 136 _symmetry_space_group_name_Hall '-P 4n 2n' _symmetry_space_group_name_H-M 'P 42/m n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.59373 _cell_length_b 4.59373 _cell_length_c 2.95812 _cell_volume 62.423 _exptl_crystal_density_diffrn 4.250 _[local]_cod_chemical_formula_sum_orig 'Ti O2' _cod_database_code 9009083 _amcsd_database_code AMCSD#0011415 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z 1/2+y,1/2-x,1/2-z 1/2-y,1/2+x,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z x,y,-z -x,-y,z y,x,z -y,-x,-z 1/2-y,1/2+x,1/2-z 1/2+y,1/2-x,1/2+z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ti 0.00000 0.00000 0.00000 O 0.30530 0.30530 0.00000 avogadro-1.1.1/crystals/oxides/NiO-Bunsenite.cif0000644000175000001440000001053712250371054020773 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008693.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008693 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ni O' _chemical_name_mineral Bunsenite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.1684 _cell_length_b 4.1684 _cell_length_c 4.1684 _cell_volume 72.428 _exptl_crystal_density_diffrn 6.850 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008693 _amcsd_database_code AMCSD#0011024 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ni 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/ZrO.cif0000644000175000001440000001060112250371054017056 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008779.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008779 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Zr' _chemical_name_mineral ZrO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.62 _cell_length_b 4.62 _cell_length_c 4.62 _cell_volume 98.611 _exptl_crystal_density_diffrn 7.222 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Zr O' _cod_database_code 9008779 _amcsd_database_code AMCSD#0011110 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zr 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/Fe2O3-Hematite.cif0000644000175000001440000000443312250371054020726 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1011240.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1011240 _chemical_name_systematic 'Iron(III) oxide' _chemical_name_mineral 'Hematite' _chemical_formula_structural 'Fe2 O3' _chemical_formula_sum 'Fe2 O3' _publ_section_title 'The Structure of Hematite' _space_group_IT_number 167 _symmetry_space_group_name_Hall '-P 3* 2n' _symmetry_space_group_name_H-M 'R -3 c :R' _[local]_cod_cif_authors_sg_H-M 'R -3 c R' loop_ _publ_author_name 'Pauling, L' 'Hendricks, S B' _journal_name_full 'Journal of the American Chemical Society' _journal_coden_ASTM JACSAT _journal_volume 47 _journal_year 1925 _journal_page_first 781 _journal_page_last 790 _cell_length_a 5.43 _cell_length_b 5.43 _cell_length_c 5.43 _cell_angle_alpha 55.28 _cell_angle_beta 55.28 _cell_angle_gamma 55.28 _cell_volume 100.8 _cell_formula_units_Z 2 _exptl_crystal_density_meas 5.26(4) _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'y,z,x' 'z,x,y' '-x,-y,-z' '-y,-z,-x' '-z,-x,-y' '1/2+y,1/2+x,1/2+z' '1/2+z,1/2+y,1/2+x' '1/2+x,1/2+z,1/2+y' '1/2-y,1/2-x,1/2-z' '1/2-z,1/2-y,1/2-x' '1/2-x,1/2-z,1/2-y' loop_ _atom_type_symbol _atom_type_oxidation_number Fe3+ 3.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Fe1 Fe3+ 4 c 0.105(1) 0.105(1) 0.105(1) 1. 0 d O1 O2- 12 f 0.292(7) -0.292(7) 0. 0.5 0 d _cod_database_code 1011240 avogadro-1.1.1/crystals/oxides/Al2O3-Corundum.cif0000644000175000001440000000446312250371054020767 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010914.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010914 _chemical_name_systematic 'Aluminium oxide' _chemical_name_mineral 'Corundum' _chemical_formula_structural 'Al2 O3' _chemical_formula_sum 'Al2 O3' _publ_section_title 'Crystal Structures of Hematite and Corundum' _space_group_IT_number 167 _symmetry_space_group_name_Hall '-P 3* 2n' _symmetry_space_group_name_H-M 'R -3 c :R' _[local]_cod_cif_authors_sg_H-M 'R -3 c R' loop_ _publ_author_name 'Pauling, L' 'Hendricks, S B' _journal_name_full 'Journal of the American Chemical Society' _journal_coden_ASTM JACSAT _journal_volume 47 _journal_year 1925 _journal_page_first 781 _journal_page_last 790 _cell_length_a 5.12(1) _cell_length_b 5.12(1) _cell_length_c 5.12(1) _cell_angle_alpha 55.28 _cell_angle_beta 55.28 _cell_angle_gamma 55.28 _cell_volume 84.5 _cell_formula_units_Z 2 _exptl_crystal_density_meas 3.99 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'y,z,x' 'z,x,y' '-x,-y,-z' '-y,-z,-x' '-z,-x,-y' '1/2+y,1/2+x,1/2+z' '1/2+z,1/2+y,1/2+x' '1/2+x,1/2+z,1/2+y' '1/2-y,1/2-x,1/2-z' '1/2-z,1/2-y,1/2-x' '1/2-x,1/2-z,1/2-y' loop_ _atom_type_symbol _atom_type_oxidation_number Al3+ 3.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Al1 Al3+ 4 c 0.355(1) 0.355(1) 0.355(1) 1. 0 d O1 O2- 6 e 0.553(3) -0.053(3) 0.25 1. 0 d _cod_database_code 1010914 avogadro-1.1.1/crystals/oxides/VO2.cif0000644000175000001440000000400212250371054016750 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009089.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009089 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O2 V' _chemical_name_mineral VO2 _space_group_IT_number 14 _symmetry_space_group_name_Hall '-P 2ybc' _symmetry_space_group_name_H-M 'P 1 21/c 1' _cell_angle_alpha 90 _cell_angle_beta 122.60 _cell_angle_gamma 90 _cell_length_a 5.743 _cell_length_b 4.517 _cell_length_c 5.375 _cell_volume 117.466 _exptl_crystal_density_diffrn 4.690 _[local]_cod_chemical_formula_sum_orig 'V O2' _cod_database_code 9009089 _amcsd_database_code AMCSD#0011421 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,1/2+z -x,1/2+y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z V 0.24200 0.97500 0.02500 O1 0.10000 0.21000 0.20000 O2 0.39000 0.69000 0.29000 avogadro-1.1.1/crystals/oxides/YbO.cif0000644000175000001440000001060312250371054017037 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008772.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008772 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Yb' _chemical_name_mineral YbO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.86 _cell_length_b 4.86 _cell_length_c 4.86 _cell_volume 114.791 _exptl_crystal_density_diffrn 10.938 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Yb O' _cod_database_code 9008772 _amcsd_database_code AMCSD#0011103 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Yb 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/PdO.cif0000644000175000001440000000424412250371054017034 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-06-10 16:46:06 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1213 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1009031.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1009031 loop_ _publ_author_name 'Waser, J.' 'Levy, H. A.' 'Peterson, S. W.' _publ_section_title ; The structure of PdO Locality: synthetic ; _journal_name_full 'Acta Crystallographica' _journal_page_first 661 _journal_page_last 663 _journal_volume 6 _journal_year 1953 _chemical_compound_source synthetic _chemical_formula_structural 'Pd O' _chemical_formula_sum 'O Pd' _chemical_name_mineral Palladinite _chemical_name_systematic 'Palladium oxide' _symmetry_cell_setting tetragonal _symmetry_Int_Tables_number 131 _symmetry_space_group_name_H-M 'P 42/m m c S' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_formula_units_Z 2 _cell_length_a 3.03(1) _cell_length_b 3.03(1) _cell_length_c 5.33(2) _cell_volume 48.9 _cod_database_code 1009031 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-y,z 1/2-y,1/2+x,1/2+z 1/2+y,1/2-x,1/2+z -x,y,-z x,-y,-z 1/2+y,1/2+x,1/2-z 1/2-y,1/2-x,1/2-z -x,-y,-z x,y,-z 1/2+y,1/2-x,1/2-z 1/2-y,1/2+x,1/2-z x,-y,z -x,y,z 1/2-y,1/2-x,1/2+z 1/2+y,1/2+x,1/2+z loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Pd1 Pd2+ 2 a 0. 0. 0. 1. 0 d O1 O2- 2 f 0.5 0. 0.25 1. 0 d loop_ _atom_type_symbol _atom_type_oxidation_number Pd2+ 2.000 O2- -2.000 _amcsd_database_code AMCSD#0009095 _exptl_crystal_density_diffrn 8.308 avogadro-1.1.1/crystals/oxides/CoO.cif0000644000175000001440000001053112250371054017026 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008618.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008618 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Co O' _chemical_name_mineral CoO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.2667 _cell_length_b 4.2667 _cell_length_c 4.2667 _cell_volume 77.674 _exptl_crystal_density_diffrn 6.408 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008618 _amcsd_database_code AMCSD#0010949 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Co 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/MgO-Periclase.cif0000644000175000001440000001053712250371054020743 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008671.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008671 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Mg O' _chemical_name_mineral Periclase _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.2112 _cell_length_b 4.2112 _cell_length_c 4.2112 _cell_volume 74.682 _exptl_crystal_density_diffrn 3.585 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008671 _amcsd_database_code AMCSD#0011002 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mg 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/FeO-Wustite.cif0000644000175000001440000001053512250371054020465 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008636.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008636 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Fe O' _chemical_name_mineral Wustite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.3108 _cell_length_b 4.3108 _cell_length_c 4.3108 _cell_volume 80.108 _exptl_crystal_density_diffrn 5.957 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008636 _amcsd_database_code AMCSD#0010967 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Fe 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/K2O.cif0000644000175000001440000001053412250371054016744 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009055.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009055 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Anti-fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'K2 O' _chemical_name_mineral K2O _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.436 _cell_length_b 6.436 _cell_length_c 6.436 _cell_volume 266.593 _exptl_crystal_density_diffrn 2.347 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9009055 _amcsd_database_code AMCSD#0011387 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z K 0.25000 0.25000 0.25000 O 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/oxides/TaO.cif0000644000175000001440000001060512250371054017033 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008732.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008732 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O Ta' _chemical_name_mineral TaO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.422 _cell_length_b 4.422 _cell_length_c 4.422 _cell_volume 86.468 _exptl_crystal_density_diffrn 15.129 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Ta O' _cod_database_code 9008732 _amcsd_database_code AMCSD#0011063 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ta 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/oxides/ZrO2-Cubic.cif0000644000175000001440000001062212250371054020166 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009051.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009051 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'O2 Zr' _chemical_name_mineral 'Cubic zirconia' _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.07 _cell_length_b 5.07 _cell_length_c 5.07 _cell_volume 130.324 _exptl_crystal_density_diffrn 6.280 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Zr O2' _cod_database_code 9009051 _amcsd_database_code AMCSD#0011383 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zr 0.00000 0.00000 0.00000 O 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/oxides/Sc2O3.cif0000644000175000001440000000541312250371054017202 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1008928.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1008928 _chemical_name_systematic 'Scandium oxide' _chemical_formula_structural 'Sc2 O3' _chemical_formula_sum 'O3 Sc2' _publ_section_title ; Neutron diffraction studies on scandium orthovanadate and scandium oxide ; loop_ _publ_author_name 'Milligan, W O' 'Vernon, L W' 'Levy, H A' 'Peterson, S W' _journal_name_full 'Journal of Physical Chemistry' _journal_coden_ASTM JPCHAX _journal_volume 57 _journal_year 1953 _journal_page_first 535 _journal_page_last 537 _cell_length_a 9.79 _cell_length_b 9.79 _cell_length_c 9.79 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 938.3 _cell_formula_units_Z 16 _symmetry_space_group_name_H-M 'I a -3' _symmetry_Int_Tables_number 206 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'x,-y,1/2-z' '1/2-x,y,-z' '-x,1/2-y,z' 'y,z,x' '-y,1/2-z,x' 'y,-z,1/2-x' '1/2-y,z,-x' 'z,x,y' '1/2-z,x,-y' '-z,1/2-x,y' 'z,-x,1/2-y' '-x,-y,-z' '-x,y,1/2+z' '1/2+x,-y,z' 'x,1/2+y,-z' '-y,-z,-x' 'y,1/2+z,-x' '-y,z,1/2+x' '1/2+y,-z,x' '-z,-x,-y' '1/2+z,-x,y' 'z,1/2+x,-y' '-z,x,1/2+y' '1/2+x,1/2+y,1/2+z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,-y,1/2+z' '1/2+y,1/2+z,1/2+x' '1/2-y,-z,1/2+x' '1/2+y,1/2-z,-x' '-y,1/2+z,1/2-x' '1/2+z,1/2+x,1/2+y' '-z,1/2+x,1/2-y' '1/2-z,-x,1/2+y' '1/2+z,1/2-x,-y' '1/2-x,1/2-y,1/2-z' '1/2-x,1/2+y,z' 'x,1/2-y,1/2+z' '1/2+x,y,1/2-z' '1/2-y,1/2-z,1/2-x' '1/2+y,z,1/2-x' '1/2-y,1/2+z,x' 'y,1/2-z,1/2+x' '1/2-z,1/2-x,1/2-y' 'z,1/2-x,1/2+y' '1/2+z,x,1/2-y' '1/2-z,1/2+x,y' loop_ _atom_type_symbol _atom_type_oxidation_number Sc3+ 3.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Sc1 Sc3+ 8 b 0.25 0.25 0.25 1. 0 d Sc2 Sc3+ 24 d -0.03(1) 0. 0.25 1. 0 d O1 O2- 48 e 0.385 0.145 0.38 1. 0 d _cod_database_code 1008928 avogadro-1.1.1/crystals/oxides/Cr2O3-Eskolaite.cif0000644000175000001440000000510612250371054021116 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008084.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008084 loop_ _publ_author_name 'Newnham, R. E.' 'de Haan, Y. M.' _publ_section_title ; Refinement of the alpha Al2O3, Ti2O3, V2O3 and Cr2O3 structures Locality: synthetic ; _journal_name_full 'Zeitschrift fur Kristallographie' _journal_page_first 235 _journal_page_last 237 _journal_volume 117 _journal_year 1962 _chemical_formula_sum 'Cr2 O3' _chemical_name_mineral Eskolaite _space_group_IT_number 167 _symmetry_space_group_name_Hall '-R 3 2"c' _symmetry_space_group_name_H-M 'R -3 c :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.9607 _cell_length_b 4.9607 _cell_length_c 13.599 _cell_volume 289.817 _exptl_crystal_density_diffrn 5.225 _[local]_cod_cif_authors_sg_H-M 'R -3 c' _cod_database_code 9008084 _amcsd_database_code AMCSD#0010274 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z x,x-y,1/2+z 2/3+x,1/3+x-y,5/6+z 1/3+x,2/3+x-y,1/6+z y,x,1/2-z 2/3+y,1/3+x,5/6-z 1/3+y,2/3+x,1/6-z -x+y,y,1/2+z 2/3-x+y,1/3+y,5/6+z 1/3-x+y,2/3+y,1/6+z -x,-x+y,1/2-z 2/3-x,1/3-x+y,5/6-z 1/3-x,2/3-x+y,1/6-z -y,-x,1/2+z 2/3-y,1/3-x,5/6+z 1/3-y,2/3-x,1/6+z x-y,-y,1/2-z 2/3+x-y,1/3-y,5/6-z 1/3+x-y,2/3-y,1/6-z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cr 0.00000 0.00000 0.34750 O 0.30600 0.00000 0.25000 avogadro-1.1.1/crystals/oxides/GeO2-Argutite.cif0000644000175000001440000000415612250371054020672 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009080.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009080 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Rutile structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ge O2' _chemical_name_mineral Argutite _space_group_IT_number 136 _symmetry_space_group_name_Hall '-P 4n 2n' _symmetry_space_group_name_H-M 'P 42/m n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.395 _cell_length_b 4.395 _cell_length_c 2.859 _cell_volume 55.225 _exptl_crystal_density_diffrn 6.291 _cod_database_code 9009080 _amcsd_database_code AMCSD#0011412 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z 1/2+y,1/2-x,1/2-z 1/2-y,1/2+x,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z x,y,-z -x,-y,z y,x,z -y,-x,-z 1/2-y,1/2+x,1/2-z 1/2+y,1/2-x,1/2+z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ge 0.00000 0.00000 0.00000 O 0.30700 0.30700 0.00000 avogadro-1.1.1/crystals/oxides/SiO2-Cristobalite.cif0000644000175000001440000000451412250371054021550 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9001578.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9001578 loop_ _publ_author_name 'Downs, R. T.' 'Palmer, D. C.' _publ_section_title ; The pressure behavior of alpha cristobalite P = room pressure ; _journal_name_full 'American Mineralogist' _journal_page_first 9 _journal_page_last 14 _journal_volume 79 _journal_year 1994 _chemical_formula_sum 'O2 Si' _chemical_name_mineral Cristobalite _space_group_IT_number 92 _symmetry_space_group_name_Hall 'P 4abw 2nw' _symmetry_space_group_name_H-M 'P 41 21 2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.9717 _cell_length_b 4.9717 _cell_length_c 6.9223 _cell_volume 171.104 _exptl_crystal_density_diffrn 2.332 _[local]_cod_chemical_formula_sum_orig 'Si O2' _cod_database_code 9001578 _amcsd_database_code AMCSD#0001628 loop_ _symmetry_equiv_pos_as_xyz x,y,z y,x,-z 1/2-y,1/2+x,1/4+z 1/2-x,1/2+y,1/4-z -x,-y,1/2+z -y,-x,1/2-z 1/2+y,1/2-x,3/4+z 1/2+x,1/2-y,3/4-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Si 0.00964 0.00964 0.00973 -0.00038 0.00139 -0.00139 O 0.03055 0.01077 0.01505 -0.00163 0.00471 0.00087 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si 0.30028 0.30028 0.00000 O 0.23920 0.10440 0.17870 avogadro-1.1.1/crystals/oxides/GeO2.cif0000644000175000001440000000424112250371054017103 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9007477.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9007477 loop_ _publ_author_name 'Smith, G. S.' 'Isaacs, P. B.' _publ_section_title ; The crystal structure of quartz-like GeO2 Note: polymorph of argutite ; _journal_name_full 'Acta Crystallographica' _journal_page_first 842 _journal_page_last 846 _journal_volume 17 _journal_year 1964 _chemical_formula_sum 'Ge O2' _chemical_name_mineral GeO2 _symmetry_space_group_name_H-M 'P 32 2 1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.987 _cell_length_b 4.987 _cell_length_c 5.652 _cell_volume 121.734 _exptl_crystal_density_diffrn 4.281 _cod_database_code 9007477 _amcsd_database_code AMCSD#0009217 loop_ _symmetry_equiv_pos_as_xyz x,y,z y,x,2/3-z -y,x-y,2/3+z -x,-x+y,1/3-z -x+y,-x,1/3+z x-y,-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Ge 0.00718 0.00633 0.00680 0.00321 0.00000 0.00000 O 0.01814 0.01342 0.01343 0.01115 -0.00495 -0.00371 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ge 0.45130 0.00000 0.00000 O 0.39690 0.30210 0.09090 avogadro-1.1.1/crystals/oxides/Rh2O3.cif0000644000175000001440000000444012250371054017205 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010584.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010584 _chemical_name_systematic 'Rhodium(III) oxide' _chemical_formula_structural 'Rh2 O3' _chemical_formula_sum 'O3 Rh2' _publ_section_title ; Untersuchungen ueber die Kristallstruktur von Sesquioxyden und Verbindungen ABO~3~ ; _space_group_IT_number 167 _symmetry_space_group_name_Hall '-P 3* 2n' _symmetry_space_group_name_H-M 'R -3 c :R' _[local]_cod_cif_authors_sg_H-M 'R -3 c R' loop_ _publ_author_name 'Zachariasen, W H' _journal_name_full ; Skrifter utgitt av det Norske Videnskaps-Akademi i Oslo 1: Matematisk- Naturvidenskapelig Klasse ; _journal_coden_ASTM SUNVAQ _journal_volume 1928 _journal_year 1928 _journal_page_first 1 _journal_page_last 165 _cell_length_a 5.45(3) _cell_length_b 5.45(3) _cell_length_c 5.45(3) _cell_angle_alpha 55.7(1) _cell_angle_beta 55.7(1) _cell_angle_gamma 55.7(1) _cell_volume 103.0 _cell_formula_units_Z 2 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'y,z,x' 'z,x,y' '-x,-y,-z' '-y,-z,-x' '-z,-x,-y' '1/2+y,1/2+x,1/2+z' '1/2+z,1/2+y,1/2+x' '1/2+x,1/2+z,1/2+y' '1/2-y,1/2-x,1/2-z' '1/2-z,1/2-y,1/2-x' '1/2-x,1/2-z,1/2-y' loop_ _atom_type_symbol _atom_type_oxidation_number Rh3+ 3.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Rh1 Rh3+ 4 c 0.10(1) 0.10(1) 0.10(1) 1. 0 d O1 O2- 6 e -0.3 0.8 0.25 1. 0 d _cod_database_code 1010584 avogadro-1.1.1/crystals/oxides/SiO2-Stishovite.cif0000644000175000001440000000467712250371054021277 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9012691.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9012691 loop_ _publ_author_name 'Hill, R. J.' 'Newton, M. D.' 'Gibbs, G. V.' _publ_section_title ; A crystal chemical study of stishovite Locality: synthetic ; _journal_name_full 'Journal of Solid State Chemistry' _journal_page_first 185 _journal_page_last 200 _journal_volume 47 _journal_year 1983 _chemical_formula_sum 'O2 Si' _chemical_name_mineral Stishovite _space_group_IT_number 136 _symmetry_space_group_name_Hall '-P 4n 2n' _symmetry_space_group_name_H-M 'P 42/m n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.1773 _cell_length_b 4.1773 _cell_length_c 2.6655 _cell_volume 46.513 _exptl_crystal_density_diffrn 4.290 _[local]_cod_chemical_formula_sum_orig 'Si O2' _cod_database_code 9012691 _amcsd_database_code AMCSD#0013555 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,x,-z 1/2+y,1/2-x,1/2-z 1/2-y,1/2+x,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z x,y,-z -x,-y,z y,x,z -y,-x,-z 1/2-y,1/2+x,1/2-z 1/2+y,1/2-x,1/2+z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z -x,-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Si 0.00235 0.00235 0.00177 0.00014 0.00000 0.00000 O 0.00306 0.00306 0.00231 -0.00095 0.00000 0.00000 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Si 0.00000 0.00000 0.00000 O 0.30608 0.30608 0.00000 avogadro-1.1.1/crystals/oxides/IrO2.cif0000644000175000001440000000406412250371054017125 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910069 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 237 from the second edition of Structure of Crystals by Wyckoff. published by The Chemical Catalog Company, INC, New York in 1931 & http://database.iem.ac.ru/mincryst/ ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 237 _journal_page_last 237 _journal_year 1931 _chemical_formula_structural IrO2 _chemical_formula_sum 'Ir O2' _space_group_IT_number 136 _symmetry_cell_setting tetragonal _symmetry_Int_Tables_number 136 _symmetry_space_group_name_Hall '-P 4n 2n' _symmetry_space_group_name_H-M 'P 42/m n m' _audit_creation_date 2005-11-12 _audit_creation_method ; Page 237 from the second edition of Structure of Crystals by Wyckoff. published by The Chemical Catalog Company, INC, New York in 1931 & http://database.iem.ac.ru/mincryst/ ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.49 _cell_length_b 4.49 _cell_length_c 3.14 _cell_volume 63.303 _[local]_cod_cif_authors_sg_H-M 'P 42/mnm' _cod_database_code 5910069 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y+1/2,x+1/2,z+1/2 y+1/2,-x+1/2,z+1/2 x+1/2,-y+1/2,-z+1/2 -x+1/2,y+1/2,-z+1/2 -x,-y,z y,x,-z -y,-x,-z -x,-y,-z y+1/2,-x+1/2,-z+1/2 -y+1/2,x+1/2,-z+1/2 -x+1/2,y+1/2,z+1/2 x+1/2,-y+1/2,z+1/2 x,y,-z -y,-x,z y,x,z loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 Ir 0.30770 0.30770 0.00000 O avogadro-1.1.1/crystals/oxides/CeO2-Cerianite.cif0000644000175000001440000001054712250371054021006 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009008.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009008 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ce O2' _chemical_name_mineral Cerianite-(Ce) _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.4110 _cell_length_b 5.4110 _cell_length_c 5.4110 _cell_volume 158.428 _exptl_crystal_density_diffrn 7.216 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9009008 _amcsd_database_code AMCSD#0011339 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ce 0.00000 0.00000 0.00000 O 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/oxides/BaO.cif0000644000175000001440000001052712250371054017014 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008599.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008599 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ba O' _chemical_name_mineral BaO _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.523 _cell_length_b 5.523 _cell_length_c 5.523 _cell_volume 168.471 _exptl_crystal_density_diffrn 6.045 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008599 _amcsd_database_code AMCSD#0010930 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ba 0.00000 0.00000 0.00000 O 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/other/0000755000175000001440000000000012250371054015511 5ustar marcususersavogadro-1.1.1/crystals/other/Pb1Ti0.35Zr0.65O3-PZT-rhomb.cif0000644000175000001440000000760612250371054022241 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2102945.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided by IUCr Journals, http://journals.iucr.org/. # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_2102945 _space_group_IT_number 161 _symmetry_space_group_name_Hall 'R 3 -2"c' _symmetry_space_group_name_H-M 'R 3 c :H' _[local]_cod_cif_authors_sg_H-M 'R 3c' loop_ _publ_author_name 'Mir, M.' 'Mascarenhas, Y.P.' 'Mastelaro, V.R.' 'Neves, P.P.' 'Doriguetto, A.C.' 'Garcia, D.' 'Lente, M.H.' 'Eiras, J.A.' _publ_section_title ; X-ray powder difraction structural characterization of Pb(1-x)Ba(x)Zr(0.65)Ti(0.35)O3 ceramic. ; _journal_coeditor_code KD5005 _journal_issue 5 _journal_name_full 'Acta Crystallographica, Section B' _journal_page_first 713 _journal_page_last 718 _journal_volume 63 _journal_year 2007 _chemical_formula_analytical 'Pb (Zr0.65 Ti0.35) O3' _chemical_formula_moiety 'Pb Zi0.65 Ti0.35 O3' _chemical_formula_structural 'Pb (Zr0.65 Ti0.35) O3' _chemical_formula_sum 'O3 Pb Ti0.35 Zr0.65' _[local]_cod_chemical_formula_sum_orig 'O3 Pb1 Ti0.35 Zr0.65' _chemical_name_common 'Lead Zirconium Titanium Oxide' _chemical_name_systematic ' Lead Zirconium Titanium Oxide' _symmetry_cell_setting rhombohedral _cell_angle_alpha 90.00000 _cell_angle_beta 90.00000 _cell_angle_gamma 120.00000 _cell_formula_units_Z 6 _cell_length_a 5.7779174(9) _cell_length_b 5.7779174(9) _cell_length_c 14.26920510(15) _cell_measurement_temperature 300 _cell_volume 412.547(9) _computing_structure_refinement FULLPROF _diffrn_ambient_temperature 298 _diffrn_measurement_method 'theta/2theta step scans' _diffrn_radiation_monochromator Si _diffrn_radiation_type X-ray _refine_ls_number_parameters 13 _refine_ls_number_reflns 46 _refine_ls_number_restraints 0 _[local]_cod_data_source_file kd5005.cif loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,x-y,z -x+y,-x,z -y,-x,z+1/2 -x+y,y,z+1/2 x,x-y,z+1/2 x+2/3,y+1/3,z+1/3 -y+2/3,x-y+1/3,z+1/3 -x+y+2/3,-x+1/3,z+1/3 -y+2/3,-x+1/3,z+5/6 -x+y+2/3,y+1/3,z+5/6 x+2/3,x-y+1/3,z+5/6 x+1/3,y+2/3,z+2/3 -y+1/3,x-y+2/3,z+2/3 -x+y+1/3,-x+2/3,z+2/3 -y+1/3,-x+2/3,z+1/6 -x+y+1/3,y+2/3,z+1/6 x+1/3,x-y+2/3,z+1/6 loop_ _atom_type_symbol _atom_type_scat_dispersion_real _atom_type_scat_dispersion_imag _atom_type_scat_source pb -4.81800 8.50500 International_Tables_for_Crystallography_Vol.C(1991)_Tables_6.1.1.4_and_6.1.1.5 ti 0.18900 1.80700 International_Tables_for_Crystallography_Vol.C(1991)_Tables_6.1.1.4_and_6.1.1.5 zr -0.31400 2.24500 International_Tables_for_Crystallography_Vol.C(1991)_Tables_6.1.1.4_and_6.1.1.5 o 0.04700 0.03200 International_Tables_for_Crystallography_Vol.C(1991)_Tables_6.1.1.4_and_6.1.1.5 loop_ _atom_site_type_symbol _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv _atom_site_adp_type _atom_site_occupancy Pb Pb1 0.00000 0.00000 0.00000 0.00000 Uiso 1.00000 Ti Ti1 0.00000 0.00000 -0.252(3) 0.00000 Uiso 0.65000 Zr Zr1 0.00000 0.00000 -0.252(3) 0.00000 Uiso 0.35000 O O1 0.16324 0.34281 -0.1990(13) 0.00000 Uiso 1.00000 _cod_database_code 2102945 avogadro-1.1.1/crystals/other/Ca2C4O10H2.57-Oxalate-Whewellite.cif0000644000175000001440000000772012250371054023404 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9000763.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9000763 loop_ _publ_author_name 'Tazzoli, V.' 'Domeneghetti, M. C.' _publ_section_title ; The crystal structures of whewellite and weddellite: re-examination and comparison ; _journal_name_full 'American Mineralogist' _journal_page_first 327 _journal_page_last 334 _journal_volume 65 _journal_year 1980 _chemical_formula_sum 'C4 H2.57 Ca2 O10' _chemical_name_mineral Whewellite _space_group_IT_number 14 _symmetry_space_group_name_Hall '-P 2ybc' _symmetry_space_group_name_H-M 'P 1 21/c 1' _cell_angle_alpha 90 _cell_angle_beta 109.46 _cell_angle_gamma 90 _cell_length_a 6.290 _cell_length_b 14.583 _cell_length_c 10.116 _cell_volume 874.903 _exptl_crystal_density_diffrn 2.208 _[local]_cod_chemical_formula_sum_orig 'Ca2 C4 O10 H2.57' _cod_original_cell_volume 874.904 _cod_database_code 9000763 _amcsd_database_code AMCSD#0000775 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2-y,1/2+z -x,1/2+y,1/2-z -x,-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Ca1 0.01096 0.00862 0.00696 0.00066 0.00470 0.00028 Ca2 0.01069 0.00905 0.00668 -0.00004 0.00461 -0.00007 C1 0.01559 0.00409 0.01157 -0.00101 0.00602 0.00049 C2 0.01347 0.01056 0.00659 -0.00004 0.00533 -0.00078 C3 0.01055 0.01907 0.01180 -0.00044 0.00487 -0.00028 C4 0.01123 0.02047 0.01092 -0.00044 0.00593 -0.00014 O1 0.02705 0.00980 0.00972 -0.00123 0.00957 -0.00190 O2 0.02621 0.00927 0.01065 -0.00074 0.01035 0.00106 O3 0.02844 0.00948 0.00982 -0.00175 0.00997 0.00028 O4 0.02805 0.00980 0.01115 -0.00175 0.01043 -0.00261 O5 0.01197 0.05958 0.01208 0.00294 0.00393 0.00662 O6 0.01071 0.02359 0.01194 0.00110 0.00613 0.00099 O7 0.00873 0.02887 0.01350 0.00009 0.00544 -0.00099 O8 0.01178 0.06216 0.01171 0.00381 0.00459 0.00373 OW1 0.02003 0.03415 0.01650 0.00228 0.00854 0.00698 OW2 0.01486 0.14351 0.01290 -0.00083 0.00562 -0.00641 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv Ca1 0.96760 0.12430 0.05460 1.00000 0.00849 Ca2 0.99680 0.12360 0.43570 1.00000 0.00836 C1 0.98320 0.32010 0.24520 1.00000 0.01013 C2 0.00090 0.42700 0.24920 1.00000 0.00975 C3 0.51890 0.12660 0.18120 1.00000 0.01355 C4 0.45050 0.11730 0.31310 1.00000 0.01368 O1 0.97560 0.28260 0.13220 1.00000 0.01469 O2 0.00660 0.46590 0.13950 1.00000 0.01444 O3 0.97990 0.28190 0.35500 1.00000 0.01482 O4 0.00730 0.46580 0.36140 1.00000 0.01532 O5 0.36140 0.14180 0.06900 1.00000 0.02786 O6 0.72450 0.12270 0.19740 1.00000 0.01469 O7 0.24380 0.12290 0.29570 1.00000 0.01659 O8 0.60730 0.10680 0.42640 1.00000 0.02837 H11 0.48700 0.37200 0.05100 0.85000 0.06333 H21 0.51000 0.36400 0.42600 0.86000 0.06333 H22 0.53000 0.36700 0.32000 0.86000 0.06333 OW1 0.39320 0.34590 0.10220 0.85000 0.02292 OW2 0.59130 0.38290 0.39080 0.86000 0.05674 OW10 0.38800 0.39600 0.09900 0.15000 0.02280 OW20 0.58400 0.40900 0.39200 0.14000 0.05699 avogadro-1.1.1/crystals/other/YBa2Cu3O6.9-YBCO.cif0000644000175000001440000000613212250371054020414 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1000030.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1000030 _chemical_name_systematic 'Yttrium barium copper oxide (1/2/3/6.9)' _chemical_formula_structural 'Y Ba2 Cu3 O6.9' _chemical_formula_sum 'Ba2 Cu3 O6.9 Y' _publ_section_title ; Joint X-ray and neutron refinement of the structure of superconducting YBa~2~Cu~3~O~7-x~: precision structure, anisotropic thermal parameters, strain and cation disorder ; loop_ _publ_author_name 'Williams, A' 'Kwei, G H' 'Dreele, R B von' 'Larson, A C' 'Raistrick, I D' 'Bish, D L' _journal_name_full ; Physical Review, Serie 3. B - Condensed Matter (18,1978-) ; _journal_coden_ASTM PRBMDO _journal_volume 37 _journal_year 1988 _journal_page_first 7960 _journal_page_last 7962 _cell_length_a 3.82030(8) _cell_length_b 3.88548(10) _cell_length_c 11.68349(23) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 173.4 _cell_formula_units_Z 1 _symmetry_space_group_name_H-M 'P m m m' _symmetry_Int_Tables_number 47 _symmetry_cell_setting orthorhombic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-x,-y,z' 'x,-y,-z' '-x,y,-z' '-x,-y,-z' 'x,y,-z' '-x,y,z' 'x,-y,z' loop_ _atom_type_symbol _atom_type_oxidation_number Y3+ 3.000 Ba2+ 2.000 Cu2+ 2.270 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Y1 Y3+ 1 h 0.5 0.5 0.5 1. 0 d Ba1 Ba2+ 2 t 0.5 0.5 0.18393(6) 1. 0 d Cu1 Cu2+ 1 a 0. 0. 0. 1. 0 d Cu2 Cu2+ 2 q 0. 0. 0.35501(8) 1. 0 d O1 O2- 1 e 0. 0.5 0. 0.910(8) 0 d O2 O2- 2 s 0.5 0. 0.37819(15) 1. 0 d O3 O2- 2 r 0. 0.5 0.37693(16) 1. 0 d O4 O2- 2 q 0. 0. 0.15840(13) 1. 0 d loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Y1 0.0085(8) 0.0106(8) 0.0085(6) 0. 0. 0. Ba1 0.0078(6) 0.0096(7) 0.0198(5) 0. 0. 0. Cu1 0.0080(9) 0.0115(9) 0.0150(7) 0. 0. 0. Cu2 0.0033(5) 0.0036(5) 0.0207(5) 0. 0. 0. O1 0.0161(16) 0.0104(11) 0.0080(14) 0. 0. 0. O2 0.0039(6) 0.0068(7) 0.0203(11) 0. 0. 0. O3 0.0109(8) 0.0084(7) 0.0056(11) 0. 0. 0. O4 0.0162(11) 0.0123(9) 0.0097(7) 0. 0. 0. _refine_ls_R_factor_all 0.0524 _cod_database_code 1000030 avogadro-1.1.1/crystals/other/H3N-Ammonia.cif0000644000175000001440000000424612250371054020151 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 12:14:52 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35911 $ #$URL: file:///home/coder/svn-repositories/cod/cif/1/01/04/1010490.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010490 _chemical_name_systematic 'Ammonia' _chemical_formula_structural 'N H3' _chemical_formula_sum 'H3 N' _publ_section_title 'Das Gitter des Ammoniaks.' loop_ _publ_author_name 'Mark, H' 'Pohland, E' _journal_name_full ; Zeitschrift fuer Kristallographie, Kristallgeometrie, Kristallphysik, Kristallchemie (-144,1977) ; _journal_coden_ASTM ZEKGAX _journal_volume 61 _journal_year 1925 _journal_page_first 532 _journal_page_last 537 _cell_length_a 5.193 _cell_length_b 5.193 _cell_length_c 5.193 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 140.0 _cell_formula_units_Z 4 _exptl_crystal_density_meas 0.8 _symmetry_space_group_name_H-M 'P 21 3' _symmetry_Int_Tables_number 198 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'y,z,x' 'z,x,y' '1/2+x,1/2-y,-z' '1/2+y,1/2-z,-x' '1/2+z,1/2-x,-y' '-x,1/2+y,1/2-z' '-y,1/2+z,1/2-x' '-z,1/2+x,1/2-y' '1/2-x,-y,1/2+z' '1/2-y,-z,1/2+x' '1/2-z,-x,1/2+y' loop_ _atom_type_symbol _atom_type_oxidation_number N3- -3.000 H1+ 1.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag N1 N3- 4 a 0.22 0.22 0.22 1. 3 d H1 H1+ 4 a -1. -1. -1. 3. 0 dum _cod_database_code 1010490 avogadro-1.1.1/crystals/other/LaAlO3.cif0000644000175000001440000000401512250371054017207 0ustar marcususersdata_5910090 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 274 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931 http://jcrystal.com/steffenweber/gallery/StructureTypes/st4.html ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 274 _journal_page_last 274 _journal_year 1931 _chemical_formula_structural LaAlO3 _chemical_formula_sum 'Al La O3' _chemical_name_systematic LaAlO3 _space_group_IT_number 221 _symmetry_cell_setting cubic _symmetry_Int_Tables_number 221 _symmetry_space_group_name_Hall '-P 4 2 3' _symmetry_space_group_name_H-M 'P m -3 m' _audit_creation_date 2005-04-11 _audit_creation_method ; Page 274 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931 http://jcrystal.com/steffenweber/gallery/StructureTypes/st4.html ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.78 _cell_length_b 3.78 _cell_length_c 3.78 _cell_volume 54.010 _[local]_cod_chemical_formula_sum_orig 'La Al O3' _cod_database_code 5910090 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,-z,y x,z,-y z,y,-x -z,y,x -y,x,z y,-x,z z,x,y y,z,x -y,-z,x z,-x,-y -y,z,-x -z,-x,y -z,x,-y y,-z,-x x,-y,-z -x,y,-z -x,-y,z y,x,-z -y,-x,-z z,-y,x -z,-y,-x -x,z,y -x,-z,-y -x,-y,-z -x,z,-y -x,-z,y -z,-y,x z,-y,-x y,-x,-z -y,x,-z -z,-x,-y -y,-z,-x y,z,-x -z,x,y y,-z,x z,x,-y z,-x,y -y,z,x -x,y,z x,-y,z x,y,-z -y,-x,z y,x,z -z,y,-x z,y,x x,-z,-y x,z,y loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 La 0.50000 0.50000 0.50000 Al 0.50000 0.50000 0.00000 O avogadro-1.1.1/crystals/other/LiNbO3-LithiumNiobate.cif0000644000175000001440000000350512250371054022140 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2101182.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided by IUCr Journals, http://journals.iucr.org/. # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_2101182 loop_ _publ_author_name 'Boysen, H.' 'Altorfer, F.' _publ_section_title ; A neutron powder investigation of the high-temperature structure and phase transition in LiNbO~3~ ; _journal_issue 4 _journal_name_full 'Acta Crystallographica Section B' _journal_page_first 405 _journal_page_last 414 _journal_volume 50 _journal_year 1994 _chemical_formula_sum 'Li Nb O3' _symmetry_cell_setting trigonal _symmetry_space_group_name_H-M 'R 3 c {rhombohedral axes}' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_formula_units_Z 6 _cell_length_a 5.2719(8) _cell_length_b 5.2719(8) _cell_length_c 13.8601(8) _[local]_cod_data_source_file se0126.cif loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Li .0000 .0000 .2762(13) Nb .0000 .0000 .0093(7) O(1) .0569(9) .3297(15) .0833 _cod_database_code 2101182 avogadro-1.1.1/crystals/other/Pb1Ti0.35Zr0.65O3-PZT-cub.cif0000644000175000001440000000746512250371054021706 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2102946.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided by IUCr Journals, http://journals.iucr.org/. # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_2102946 loop_ _publ_author_name 'Mir, M.' 'Mascarenhas, Y.P.' 'Mastelaro, V.R.' 'Neves, P.P.' 'Doriguetto, A.C.' 'Garcia, D.' 'Lente, M.H.' 'Eiras, J.A.' _publ_section_title ; X-ray powder difraction structural characterization of Pb(1-x)Ba(x)Zr(0.65)Ti(0.35)O3 ceramic. ; _journal_coeditor_code KD5005 _journal_issue 5 _journal_name_full 'Acta Crystallographica, Section B' _journal_page_first 713 _journal_page_last 718 _journal_volume 63 _journal_year 2007 _chemical_formula_analytical 'Pb (Zr0.65 Ti0.35) O3' _chemical_formula_moiety 'Pb Zi0.65 Ti0.35 O3' _chemical_formula_structural 'Pb (Zr0.65 Ti0.35) O3' _chemical_formula_sum 'O3 Pb Ti0.35 Zr0.65' _[local]_cod_chemical_formula_sum_orig 'O3 Pb1 Ti0.35 Zr0.65' _chemical_name_common 'Lead Zirconium Titanium Oxide' _chemical_name_systematic ' Lead Zirconium Titanium Oxide' _symmetry_cell_setting cubic _symmetry_space_group_name_Hall '-P 4 2 3' _symmetry_space_group_name_H-M 'P m -3m' _cell_angle_alpha 90.00000 _cell_angle_beta 90.00000 _cell_angle_gamma 90.00000 _cell_length_a 4.09836(3) _cell_length_b 4.09836(3) _cell_length_c 4.09836(3) _cell_measurement_temperature 650 _cell_volume 68.8383(7) _computing_structure_refinement FULLPROF _diffrn_ambient_temperature 298 _diffrn_measurement_method 'theta/2theta step scans' _diffrn_radiation_monochromator Si _diffrn_radiation_type X-ray _refine_ls_number_parameters 11 _refine_ls_number_reflns 23 _refine_ls_number_restraints 0 _[local]_cod_data_source_file kd5005.cif loop_ _symmetry_equiv_pos_as_xyz x,y,z x,-y,-z -x,y,-z -x,-y,z y,z,x -y,-z,x y,-z,-x -y,z,-x z,x,y -z,x,-y -z,-x,y z,-x,-y y,x,z -y,x,-z y,-x,-z -y,-x,z z,y,x -z,-y,x -z,y,-x z,-y,-x x,z,y x,-z,-y -x,-z,y -x,z,-y -x,-y,-z -x,y,z x,-y,z x,y,-z -y,-z,-x y,z,-x -y,z,x y,-z,x -z,-x,-y z,-x,y z,x,-y -z,x,y -y,-x,-z y,-x,z -y,x,z y,x,-z -z,-y,-x z,y,-x z,-y,x -z,y,x -x,-z,-y -x,z,y x,z,-y x,-z,y loop_ _atom_type_symbol _atom_type_scat_dispersion_real _atom_type_scat_dispersion_imag _atom_type_scat_source pb -4.81800 8.50500 International_Tables_for_Crystallography_Vol.C(1991)_Tables_6.1.1.4_and_6.1.1.5 zr -0.31400 2.24500 International_Tables_for_Crystallography_Vol.C(1991)_Tables_6.1.1.4_and_6.1.1.5 ti 0.18900 1.80700 International_Tables_for_Crystallography_Vol.C(1991)_Tables_6.1.1.4_and_6.1.1.5 o 0.04700 0.03200 International_Tables_for_Crystallography_Vol.C(1991)_Tables_6.1.1.4_and_6.1.1.5 loop_ _atom_site_type_symbol _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv _atom_site_adp_type _atom_site_occupancy Pb Pb1 0.00000 0.00000 0.00000 0.0217(5) Uiso 1.00000 Zr Zr1 0.50000 0.50000 0.50000 0.00000 Uiso 0.65000 Ti Ti1 0.50000 0.50000 0.50000 0.00000 Uiso 0.35000 O O1 0.50000 0.50000 0.00000 0.026(3) Uiso 1.00000 _cod_database_code 2102946 avogadro-1.1.1/crystals/other/CaC2O6.375H6-Oxalate-Weddellite.cif0000644000175000001440000000620212250371054023277 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9000764.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9000764 loop_ _publ_author_name 'Tazzoli, V.' 'Domeneghetti, M. C.' _publ_section_title ; The crystal structures of whewellite and weddellite: re-examination and comparison ; _journal_name_full 'American Mineralogist' _journal_page_first 327 _journal_page_last 334 _journal_volume 65 _journal_year 1980 _chemical_formula_sum 'C2 H6 Ca O6.375' _chemical_name_mineral Weddellite _space_group_IT_number 87 _symmetry_space_group_name_Hall '-I 4' _symmetry_space_group_name_H-M 'I 4/m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 12.371 _cell_length_b 12.371 _cell_length_c 7.357 _cell_volume 1125.927 _exptl_crystal_density_diffrn 2.031 _[local]_cod_chemical_formula_sum_orig 'C2 Ca O6.375 H6' _cod_database_code 9000764 _amcsd_database_code AMCSD#0000776 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z y,-x,-z 1/2+y,1/2-x,1/2-z -y,x,z 1/2-y,1/2+x,1/2+z x,y,-z 1/2+x,1/2+y,1/2-z -x,-y,z 1/2-x,1/2-y,1/2+z -y,x,-z 1/2-y,1/2+x,1/2-z y,-x,z 1/2+y,1/2-x,1/2+z -x,-y,-z 1/2-x,1/2-y,1/2-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 C 0.01411 0.02039 0.01206 0.00140 0.00028 -0.00088 Ca 0.01357 0.01233 0.01083 0.00085 0.00000 0.00000 O1 0.01427 0.02845 0.01308 0.00318 0.00221 0.00092 O2 0.07606 0.01450 0.01547 -0.00271 -0.00613 0.00309 OW1 0.06047 0.02093 0.02312 -0.00457 0.00000 0.00000 OW2 0.02931 0.04908 0.03348 0.01233 0.00000 0.00000 Wat3 0.08234 0.08234 0.10891 0.00000 0.00000 0.00000 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv C 0.44640 0.24150 0.10530 1.00000 0.01558 Ca 0.19930 0.30110 0.00000 1.00000 0.01229 O1 0.35640 0.24580 0.18290 1.00000 0.01849 O2 0.23550 0.46340 0.17990 1.00000 0.03534 OW1 0.14900 0.11450 0.00000 1.00000 0.03483 OW2 0.01920 0.38410 0.00000 1.00000 0.03762 Wat3 0.00000 0.00000 0.68300 0.58000 0.09119 Wat30 0.00000 0.00000 0.24000 0.17000 0.08866 H1 0.16600 0.07100 0.10500 1.00000 0.06333 H2 0.35000 0.01800 0.11500 1.00000 0.06333 avogadro-1.1.1/crystals/other/C10H10Fe-Ferrocene.cif0000644000175000001440000000441112250371054021151 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2101932.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided by IUCr Journals, http://journals.iucr.org/. # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_2101932 loop_ _publ_author_name 'Brock, C. P.' 'Fu, Y.' _publ_section_title ; Rigid-Body Disorder Models for the High-Temperature Phase of Ferrocene ; _journal_issue 6 _journal_name_full 'Acta Crystallographica Section B' _journal_page_first 928 _journal_page_last 938 _journal_volume 53 _journal_year 1997 _chemical_formula_sum 'C10 H10 Fe' _[local]_cod_chemical_formula_sum_orig 'C10 H10 Fe1' _chemical_formula_weight 186.04 _symmetry_cell_setting monoclinic _symmetry_space_group_name_Hall '-P 2yab' _symmetry_space_group_name_H-M 'P 1 21/a 1' _cell_angle_alpha 90.0 _cell_angle_beta 120.95(8) _cell_angle_gamma 90.0 _cell_formula_units_Z 2 _cell_length_a 10.443(5) _cell_length_b 7.572(4) _cell_length_c 5.824(4) _cell_volume 395.0(5) _diffrn_radiation_type neutron _diffrn_radiation_wavelength 1.0399 _[local]_cod_data_source_file cr0517.cif loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Fe .0 .0 .0 C(11) .0227(4) .2623(4) -.0218(10) C(12) .0395(3) .1790(5) -.2170(6) C(13) .1593(4) .0635(4) -.0900(8) C(14) .2165(4) .0753(5) .1836(7) C(15) .1322(5) .1982(5) .2258(7) H(11) -.0624 .3567 -.0567 H(12) -.0304 .1975 -.4297 H(13) .1985 -.0233 -.1871 H(14) .3079 -.0006 .3359 H(15) .1467 .2342 .4165 _cod_database_code 2101932 avogadro-1.1.1/crystals/other/(NH4)MgPO4-6(H2O)-Struvite.cif0000644000175000001440000000540712250371054022143 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9007674.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9007674 loop_ _publ_author_name 'Ferraris, G.' 'Fuess, H.' 'Joswig, W.' _publ_section_title ; Neutron diffraction study of MgNH4PO4*6H2O (struvite) and survey of water molecules donating short hydrogen bonds ; _journal_name_full 'Acta Crystallographica, Section B' _journal_page_first 253 _journal_page_last 258 _journal_volume 42 _journal_year 1986 _chemical_formula_sum 'H16 Mg N O10 P' _chemical_name_mineral Struvite _space_group_IT_number 31 _symmetry_space_group_name_Hall 'P 2ac -2' _symmetry_space_group_name_H-M 'P m n 21' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.955 _cell_length_b 6.142 _cell_length_c 11.218 _cell_volume 479.206 _exptl_crystal_density_diffrn 1.701 _[local]_cod_chemical_formula_sum_orig 'Mg N H16 P O10' _cod_database_code 9007674 _amcsd_database_code AMCSD#0009609 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,-y,1/2+z -x,y,z 1/2-x,-y,1/2+z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Mg 0.00000 0.37660 0.37410 0.01621 N 0.00000 0.36570 0.73510 0.03293 HN1 0.00000 0.21860 0.78320 0.04179 HN2 0.00000 0.33110 0.64730 0.07802 HN3 0.11480 0.45570 0.75350 0.06497 P 0.00000 -0.00690 0.00190 0.01381 O1 0.00000 -0.02360 -0.13510 0.02115 O2 0.00000 -0.23820 0.05580 0.02153 O3 0.18230 0.11390 0.04360 0.01874 OW1 0.00000 0.68290 0.28780 0.03369 OW2 0.00000 0.07680 0.46640 0.03812 OW3 0.21790 0.26180 0.26430 0.02432 OW4 0.21150 0.48520 0.48740 0.03040 H11 0.00000 0.71920 0.20170 0.03559 H12 0.00000 0.81740 0.32990 0.05117 H21 0.11570 0.00700 0.49990 0.03179 H31 0.19890 0.20070 0.18240 0.03116 H32 0.31690 0.17020 0.30200 0.03318 H41 0.32000 0.39040 0.51200 0.03331 H42 0.25110 0.63540 0.50270 0.03394 avogadro-1.1.1/crystals/other/FeMnO3-Bixbyite.cif0000644000175000001440000000603312250371054021002 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1011266.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1011266 _chemical_name_systematic 'Iron manganese(IV) oxide' _chemical_name_mineral 'Bixbyite' _chemical_compound_source 'from Simpson, Utah' _chemical_formula_structural 'Fe Mn O3' _chemical_formula_sum 'Fe Mn O3' _publ_section_title ; The Crystal Structure of Bixbyite and the C-Modification of the Sesquioxides ; loop_ _publ_author_name 'Pauling, L' 'Shappell, M D' _journal_name_full ; Zeitschrift fuer Kristallographie, Kristallgeometrie, Kristallphysik, Kristallchemie (-144,1977) ; _journal_coden_ASTM ZEKGAX _journal_volume 75 _journal_year 1930 _journal_page_first 128 _journal_page_last 142 _cell_length_a 9.365(20) _cell_length_b 9.365(20) _cell_length_c 9.365(20) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 821.3 _cell_formula_units_Z 16 _symmetry_space_group_name_H-M 'I a -3' _symmetry_Int_Tables_number 206 _symmetry_cell_setting cubic loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' 'x,-y,1/2-z' '1/2-x,y,-z' '-x,1/2-y,z' 'y,z,x' '-y,1/2-z,x' 'y,-z,1/2-x' '1/2-y,z,-x' 'z,x,y' '1/2-z,x,-y' '-z,1/2-x,y' 'z,-x,1/2-y' '-x,-y,-z' '-x,y,1/2+z' '1/2+x,-y,z' 'x,1/2+y,-z' '-y,-z,-x' 'y,1/2+z,-x' '-y,z,1/2+x' '1/2+y,-z,x' '-z,-x,-y' '1/2+z,-x,y' 'z,1/2+x,-y' '-z,x,1/2+y' '1/2+x,1/2+y,1/2+z' '1/2+x,1/2-y,-z' '-x,1/2+y,1/2-z' '1/2-x,-y,1/2+z' '1/2+y,1/2+z,1/2+x' '1/2-y,-z,1/2+x' '1/2+y,1/2-z,-x' '-y,1/2+z,1/2-x' '1/2+z,1/2+x,1/2+y' '-z,1/2+x,1/2-y' '1/2-z,-x,1/2+y' '1/2+z,1/2-x,-y' '1/2-x,1/2-y,1/2-z' '1/2-x,1/2+y,z' 'x,1/2-y,1/2+z' '1/2+x,y,1/2-z' '1/2-y,1/2-z,1/2-x' '1/2+y,z,1/2-x' '1/2-y,1/2+z,x' 'y,1/2-z,1/2+x' '1/2-z,1/2-x,1/2-y' 'z,1/2-x,1/2+y' '1/2+z,x,1/2-y' '1/2-z,1/2+x,y' loop_ _atom_type_symbol _atom_type_oxidation_number Fe2+ 2.000 Mn4+ 4.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Fe1 Fe2+ 8 b 0.25 0.25 0.25 0.5 0 d Mn1 Mn4+ 8 b 0.25 0.25 0.25 0.5 0 d Fe2 Fe2+ 24 d -0.030(5) 0. 0.25 0.5 0 d Mn2 Mn4+ 24 d -0.030(5) 0. 0.25 0.5 0 d O1 O2- 48 e 0.385(5) 0.145(5) 0.380(5) 1. 0 d _cod_database_code 1011266 avogadro-1.1.1/crystals/antimonides/0000755000175000001440000000000012250371054016702 5ustar marcususersavogadro-1.1.1/crystals/antimonides/AlSb.cif0000644000175000001440000000620112250371054020205 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008832.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008832 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Al Sb' _chemical_name_mineral AlSb _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.1347 _cell_length_b 6.1347 _cell_length_c 6.1347 _cell_volume 230.877 _exptl_crystal_density_diffrn 4.279 _cod_database_code 9008832 _amcsd_database_code AMCSD#0011163 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al 0.00000 0.00000 0.00000 Sb 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/antimonides/InSb.cif0000644000175000001440000000620112250371054020217 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008853.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008853 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'In Sb' _chemical_name_mineral InSb _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.4782 _cell_length_b 6.4782 _cell_length_c 6.4782 _cell_volume 271.871 _exptl_crystal_density_diffrn 5.780 _cod_database_code 9008853 _amcsd_database_code AMCSD#0011184 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z In 0.00000 0.00000 0.00000 Sb 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/antimonides/GaSb.cif0000644000175000001440000000617612250371054020213 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008847.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008847 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ga Sb' _chemical_name_mineral GaSb _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.118 _cell_length_b 6.118 _cell_length_c 6.118 _cell_volume 228.996 _exptl_crystal_density_diffrn 5.554 _cod_database_code 9008847 _amcsd_database_code AMCSD#0011178 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ga 0.00000 0.00000 0.00000 Sb 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/hydrides/0000755000175000001440000000000012250371054016203 5ustar marcususersavogadro-1.1.1/crystals/hydrides/PdH.cif0000644000175000001440000001060212250371054017340 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008697.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008697 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'H Pd' _chemical_name_mineral PdH _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.02 _cell_length_b 4.02 _cell_length_c 4.02 _cell_volume 64.965 _exptl_crystal_density_diffrn 10.984 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Pd H' _cod_database_code 9008697 _amcsd_database_code AMCSD#0011028 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pd 0.00000 0.00000 0.00000 H 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/hydrides/LiH.cif0000644000175000001440000001060712250371054017346 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008668.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008668 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'H Li' _chemical_name_mineral LiH _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.0271 _cell_length_b 4.0271 _cell_length_c 4.0271 _cell_volume 65.310 _exptl_crystal_density_diffrn 0.808 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Li H' _cod_database_code 9008668 _amcsd_database_code AMCSD#0010999 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Li 0.00000 0.00000 0.00000 H 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/hydrides/KH.cif0000644000175000001440000001060112250371054017166 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008653.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008653 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'H K' _chemical_name_mineral KH _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.700 _cell_length_b 5.700 _cell_length_c 5.700 _cell_volume 185.193 _exptl_crystal_density_diffrn 1.438 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'K H' _cod_database_code 9008653 _amcsd_database_code AMCSD#0010984 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z K 0.00000 0.00000 0.00000 H 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/hydrides/NaH.cif0000644000175000001440000001060512250371054017336 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008680.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008680 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'H Na' _chemical_name_mineral NaH _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.880 _cell_length_b 4.880 _cell_length_c 4.880 _cell_volume 116.214 _exptl_crystal_density_diffrn 1.372 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Na H' _cod_database_code 9008680 _amcsd_database_code AMCSD#0011011 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Na 0.00000 0.00000 0.00000 H 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/titanates/0000755000175000001440000000000012250371054016364 5ustar marcususersavogadro-1.1.1/crystals/titanates/MgTiO3.cif0000644000175000001440000000401412250371054020110 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910000 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Pages 55 & 61 from the second edition supplement of The Structure of Crystals by Wyckoff R W G. published by Reinhold Publishing Corporation, INC,Camden,N. J. in 1935 ; _journal_name_full 'The second edition supplement of The Structure of Crystals' _journal_page_first 55 _journal_page_last 61 _journal_year 1935 _chemical_formula_structural MgTiO3 _chemical_formula_sum 'Mg O3 Ti' _chemical_name_systematic 'Magnesium titanate' _symmetry_cell_setting trigonal _symmetry_Int_Tables_number 148 _symmetry_space_group_name_H-M 'R -3' _audit_creation_date 2005-06-11 _audit_creation_method ; Pages 55 & 61 from the second edition supplement of The Structure of Crystals by Wyckoff R W G. published by Reinhold Publishing Corporation, INC,Camden,N. J. in 1935 ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 54.39 _cell_angle_beta 54.39 _cell_angle_gamma 54.39 _cell_length_a 5.54 _cell_length_b 5.54 _cell_length_c 5.54 _cell_volume 104.499 _[local]_cod_chemical_formula_sum_orig 'Mg Ti O3' _cod_database_code 5910000 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.35800 0.35800 0.35800 Mg1 -0.35800 -0.35800 -0.35800 Mg2 0.14200 0.14200 0.14200 Ti1 -0.14200 -0.14200 -0.14200 Ti2 0.55500 -0.05500 0.25000 O1 -0.55500 0.05500 -0.25000 O2 -0.05500 0.25000 0.55500 O3 0.05500 -0.25000 -0.55500 O4 0.25000 0.55500 -0.05500 O5 -0.25000 -0.55500 0.05500 O6 avogadro-1.1.1/crystals/titanates/SrTiO3-Tausonite.cif0000644000175000001440000000453212250371054022107 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/68/9006864.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9006864 loop_ _publ_author_name 'Mitchell, R. H.' 'Chakhmouradian, A. R.' 'Woodward, P. M.' _publ_section_title ; Crystal chemistry of perovskite-type compounds in the tausonite-loparite series, (Sr1-2xNaxLax)TiO3 Sample: x = 0.00 ; _journal_name_full 'Physics and Chemistry of Minerals' _journal_page_first 583 _journal_page_last 589 _journal_volume 27 _journal_year 2000 _chemical_formula_sum 'O3 Sr Ti' _chemical_name_mineral Tausonite _space_group_IT_number 221 _symmetry_space_group_name_Hall '-P 4 2 3' _symmetry_space_group_name_H-M 'P m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.90528 _cell_length_b 3.90528 _cell_length_c 3.90528 _cell_volume 59.560 _exptl_crystal_density_diffrn 5.116 _[local]_cod_chemical_formula_sum_orig 'Sr Ti O3' _cod_database_code 9006864 _amcsd_database_code AMCSD#0008385 loop_ _symmetry_equiv_pos_as_xyz x,y,z z,-x,y -y,z,-x x,-y,z -z,x,-y y,-z,x -x,y,-z x,-z,-y -z,y,x y,-x,-z -x,z,y z,-y,-x -y,x,z x,z,y -z,-y,-x y,x,z -x,-z,-y z,y,x -y,-x,-z z,x,-y -y,-z,x x,y,-z -z,-x,y y,z,-x -x,-y,z -z,x,y y,-z,-x -x,y,z z,-x,-y -y,z,x x,-y,-z -x,z,-y z,-y,x -y,x,-z x,-z,y -z,y,-x y,-x,z -x,-z,y z,y,-x -y,-x,z x,z,-y -z,-y,x y,x,-z -z,-x,-y y,z,x -x,-y,-z z,x,y -y,-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z SrA 0.50000 0.50000 0.50000 Ti 0.00000 0.00000 0.00000 O 0.50000 0.00000 0.00000 avogadro-1.1.1/crystals/titanates/Mg2TiO4-Qandilite-cubic.cif0000644000175000001440000001242212250371054023170 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9001690.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9001690 loop_ _publ_author_name 'Millard, R. L.' 'Peterson, R. C.' 'Hunter, B. K.' _publ_section_title ; Study of the cubic to tetragonal transition in Mg2TiO4 and Zn2TiO4 spinels by 17O MAS NMR and Rietveld refinement of X-ray diffraction data Sample: RLM445, 1405 C, Mg2TiO4 ; _journal_name_full 'American Mineralogist' _journal_page_first 885 _journal_page_last 896 _journal_volume 80 _journal_year 1995 _chemical_formula_sum 'Mg2 O4 Ti' _chemical_name_mineral Qandilite _space_group_IT_number 227 _symmetry_space_group_name_Hall '-F 4vw 2vw 3' _symmetry_space_group_name_H-M 'F d -3 m :2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 8.44183 _cell_length_b 8.44183 _cell_length_c 8.44183 _cell_volume 601.603 _exptl_crystal_density_diffrn 3.544 _[local]_cod_cif_authors_sg_H-M 'F d 3 m' _[local]_cod_chemical_formula_sum_orig '(Ti Mg2) O4' _cod_database_code 9001690 _amcsd_database_code AMCSD#0001745 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z 3/4+z,1/2-x,1/4+y 3/4+z,-x,3/4+y 1/4+z,1/2-x,3/4+y 1/4+z,-x,1/4+y 3/4-y,1/2+z,1/4-x 3/4-y,+z,3/4-x 1/4-y,1/2+z,3/4-x 1/4-y,+z,1/4-x 3/4+x,1/2-y,1/4+z 3/4+x,-y,3/4+z 1/4+x,1/2-y,3/4+z 1/4+x,-y,1/4+z 3/4-z,1/2+x,1/4-y 3/4-z,+x,3/4-y 1/4-z,1/2+x,3/4-y 1/4-z,+x,1/4-y 3/4+y,1/2-z,1/4+x 3/4+y,-z,3/4+x 1/4+y,1/2-z,3/4+x 1/4+y,-z,1/4+x 3/4-x,1/2+y,1/4-z 3/4-x,+y,3/4-z 1/4-x,1/2+y,3/4-z 1/4-x,+y,1/4-z 1/2+x,3/4-z,1/4-y 1/2+x,1/4-z,3/4-y +x,3/4-z,3/4-y +x,1/4-z,1/4-y 1/2-z,3/4+y,1/4+x 1/2-z,1/4+y,3/4+x -z,3/4+y,3/4+x -z,1/4+y,1/4+x 1/2+y,3/4-x,1/4-z 1/2+y,1/4-x,3/4-z +y,3/4-x,3/4-z +y,1/4-x,1/4-z 1/2-x,3/4+z,1/4+y 1/2-x,1/4+z,3/4+y -x,3/4+z,3/4+y -x,1/4+z,1/4+y 1/2+z,3/4-y,1/4-x 1/2+z,1/4-y,3/4-x +z,3/4-y,3/4-x +z,1/4-y,1/4-x 1/2-y,3/4+x,1/4+z 1/2-y,1/4+x,3/4+z -y,3/4+x,3/4+z -y,1/4+x,1/4+z x,1/2+z,1/2+y x,+z,+y 1/2+x,1/2+z,+y 1/2+x,+z,1/2+y -z,1/2-y,1/2-x -z,-y,-x 1/2-z,1/2-y,-x 1/2-z,-y,1/2-x y,1/2+x,1/2+z y,+x,+z 1/2+y,1/2+x,+z 1/2+y,+x,1/2+z -x,1/2-z,1/2-y -x,-z,-y 1/2-x,1/2-z,-y 1/2-x,-z,1/2-y z,1/2+y,1/2+x z,+y,+x 1/2+z,1/2+y,+x 1/2+z,+y,1/2+x -y,1/2-x,1/2-z -y,-x,-z 1/2-y,1/2-x,-z 1/2-y,-x,1/2-z 3/4+z,1/4+x,1/2-y 3/4+z,3/4+x,-y 1/4+z,1/4+x,-y 1/4+z,3/4+x,1/2-y 3/4-y,1/4-z,1/2+x 3/4-y,3/4-z,+x 1/4-y,1/4-z,+x 1/4-y,3/4-z,1/2+x 3/4+x,1/4+y,1/2-z 3/4+x,3/4+y,-z 1/4+x,1/4+y,-z 1/4+x,3/4+y,1/2-z 3/4-z,1/4-x,1/2+y 3/4-z,3/4-x,+y 1/4-z,1/4-x,+y 1/4-z,3/4-x,1/2+y 3/4+y,1/4+z,1/2-x 3/4+y,3/4+z,-x 1/4+y,1/4+z,-x 1/4+y,3/4+z,1/2-x 3/4-x,1/4-y,1/2+z 3/4-x,3/4-y,+z 1/4-x,1/4-y,+z 1/4-x,3/4-y,1/2+z -z,3/4+x,3/4+y -z,1/4+x,1/4+y 1/2-z,3/4+x,1/4+y 1/2-z,1/4+x,3/4+y y,3/4-z,3/4-x y,1/4-z,1/4-x 1/2+y,3/4-z,1/4-x 1/2+y,1/4-z,3/4-x -x,3/4+y,3/4+z -x,1/4+y,1/4+z 1/2-x,3/4+y,1/4+z 1/2-x,1/4+y,3/4+z z,3/4-x,3/4-y z,1/4-x,1/4-y 1/2+z,3/4-x,1/4-y 1/2+z,1/4-x,3/4-y -y,3/4+z,3/4+x -y,1/4+z,1/4+x 1/2-y,3/4+z,1/4+x 1/2-y,1/4+z,3/4+x x,3/4-y,3/4-z x,1/4-y,1/4-z 1/2+x,3/4-y,1/4-z 1/2+x,1/4-y,3/4-z 1/4-x,1/2+z,3/4-y 1/4-x,+z,1/4-y 3/4-x,1/2+z,1/4-y 3/4-x,+z,3/4-y 1/4+z,1/2-y,3/4+x 1/4+z,-y,1/4+x 3/4+z,1/2-y,1/4+x 3/4+z,-y,3/4+x 1/4-y,1/2+x,3/4-z 1/4-y,+x,1/4-z 3/4-y,1/2+x,1/4-z 3/4-y,+x,3/4-z 1/4+x,1/2-z,3/4+y 1/4+x,-z,1/4+y 3/4+x,1/2-z,1/4+y 3/4+x,-z,3/4+y 1/4-z,1/2+y,3/4-x 1/4-z,+y,1/4-x 3/4-z,1/2+y,1/4-x 3/4-z,+y,3/4-x 1/4+y,1/2-x,3/4+z 1/4+y,-x,1/4+z 3/4+y,1/2-x,1/4+z 3/4+y,-x,3/4+z 3/4-x,3/4-z,y 3/4-x,1/4-z,1/2+y 1/4-x,3/4-z,1/2+y 1/4-x,1/4-z,y 3/4+z,3/4+y,-x 3/4+z,1/4+y,1/2-x 1/4+z,3/4+y,1/2-x 1/4+z,1/4+y,-x 3/4-y,3/4-x,z 3/4-y,1/4-x,1/2+z 1/4-y,3/4-x,1/2+z 1/4-y,1/4-x,z 3/4+x,3/4+z,-y 3/4+x,1/4+z,1/2-y 1/4+x,3/4+z,1/2-y 1/4+x,1/4+z,-y 3/4-z,3/4-y,x 3/4-z,1/4-y,1/2+x 1/4-z,3/4-y,1/2+x 1/4-z,1/4-y,x 3/4+y,3/4+x,-z 3/4+y,1/4+x,1/2-z 1/4+y,3/4+x,1/2-z 1/4+y,1/4+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv Ti 0.12500 0.12500 0.12500 0.03600 0.00671 Mg 0.12500 0.12500 0.12500 0.96400 0.00671 Ti 0.50000 0.50000 0.50000 0.48200 0.00519 Mg 0.50000 0.50000 0.50000 0.51800 0.00519 O 0.26160 0.26160 0.26160 1.00000 0.00785 avogadro-1.1.1/crystals/titanates/CaTiO3-Perovskite.cif0000644000175000001440000000437712250371054022235 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9006172.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9006172 loop_ _publ_author_name 'Liu, X.' 'Liebermann, R. C.' _publ_section_title ; X-ray powder diffraction study of CaTiO3 perovskite at high temperatures Sample: T = 298 K ; _journal_name_full 'Physics and Chemistry of Minerals' _journal_page_first 171 _journal_page_last 175 _journal_volume 20 _journal_year 1993 _chemical_formula_sum 'Ca O3 Ti' _chemical_name_mineral Perovskite _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2c 2ab' _symmetry_space_group_name_H-M 'P b n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.3785 _cell_length_b 5.4419 _cell_length_c 7.6400 _cell_volume 223.617 _diffrn_ambient_temperature 298 _exptl_crystal_density_diffrn 4.038 _[local]_cod_chemical_formula_sum_orig 'Ca Ti O3' _cod_database_code 9006172 _amcsd_database_code AMCSD#0007693 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,y,1/2-z -x,-y,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Ca 0.99280 0.03300 0.25000 0.01646 Ti 0.00000 0.50000 0.00000 0.00760 O1 0.07220 0.48930 0.25000 0.00760 O2 0.71740 0.28420 0.03460 0.00887 avogadro-1.1.1/crystals/titanates/Mg2TiO4-Qandilite-tetrag.cif0000644000175000001440000000472412250371054023377 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9001694.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9001694 loop_ _publ_author_name 'Millard, R. L.' 'Peterson, R. C.' 'Hunter, B. K.' _publ_section_title ; Study of the cubic to tetragonal transition in Mg2TiO4 and Zn2TiO4 spinels by 17O MAS NMR and Rietveld refinement of X-ray diffraction data Sample: RLM446, Mg2TiO4 ; _journal_name_full 'American Mineralogist' _journal_page_first 885 _journal_page_last 896 _journal_volume 80 _journal_year 1995 _chemical_formula_sum 'Mg2 O4 Ti' _chemical_name_mineral Qandilite _space_group_IT_number 91 _symmetry_space_group_name_Hall 'P 4w 2c' _symmetry_space_group_name_H-M 'P 41 2 2' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.97705 _cell_length_b 5.97705 _cell_length_c 8.4161 _cell_volume 300.666 _exptl_crystal_density_diffrn 3.545 _[local]_cod_chemical_formula_sum_orig 'Mg2 Ti O4' _cod_database_code 9001694 _amcsd_database_code AMCSD#0001749 loop_ _symmetry_equiv_pos_as_xyz x,y,z y,x,3/4-z -y,x,1/4+z -x,y,-z -x,-y,1/2+z -y,-x,1/4-z y,-x,3/4+z x,-y,1/2-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv Mg 0.25180 0.25180 0.37500 1.00000 0.00431 Ti1 0.00000 0.25020 0.00000 0.07400 0.00405 Mg1 0.00000 0.25020 0.00000 0.92600 0.00405 Ti2 0.50000 0.23910 0.00000 0.92600 0.00431 Mg2 0.50000 0.23910 0.00000 0.07400 0.00431 O1 -0.02640 0.73680 0.25260 1.00000 0.00367 O2 0.51880 0.26100 0.23290 1.00000 0.00393 avogadro-1.1.1/crystals/titanates/BaTiO3.cif0000644000175000001440000000446412250371054020100 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. # # All data on this site have been placed in the public domain by the # contributors. data_5910149 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; http://jcrystal.com/steffenweber/gallery/StructureTypes/st4.html and page 273 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931 ; _journal_name_full 'The second edition of Structure of Crystals' _journal_page_first 273 _journal_page_last 273 _journal_year 1931 _chemical_formula_structural 'Ba (Ti O3)' _chemical_formula_sum 'Ba O3 Ti' _chemical_name_systematic 'Barium titanate' _space_group_IT_number 221 _symmetry_cell_setting cubic _symmetry_Int_Tables_number 221 _symmetry_space_group_name_Hall '-P 4 2 3' _symmetry_space_group_name_H-M 'P m -3 m' _audit_creation_date 2005-02-08 _audit_creation_method ; http://jcrystal.com/steffenweber/gallery/StructureTypes/st4.html and page 273 from the second edition of Structure of Crystals by Wyckoff R W G. Published by The Chemical Catalog Company, INC, New York in 1931 ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.97 _cell_length_b 3.97 _cell_length_c 3.97 _cell_volume 62.571 _cod_database_code 5910149 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,-z,y x,z,-y z,y,-x -z,y,x -y,x,z y,-x,z z,x,y y,z,x -y,-z,x z,-x,-y -y,z,-x -z,-x,y -z,x,-y y,-z,-x x,-y,-z -x,y,-z -x,-y,z y,x,-z -y,-x,-z z,-y,x -z,-y,-x -x,z,y -x,-z,-y -x,-y,-z -x,z,-y -x,-z,y -z,-y,x z,-y,-x y,-x,-z -y,x,-z -z,-x,-y -y,-z,-x y,z,-x -z,x,y y,-z,x z,x,-y z,-x,y -y,z,x -x,y,z x,-y,z x,y,-z -y,-x,z y,x,z -z,y,-x z,y,x x,-z,-y x,z,y loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.00000 0.00000 0.00000 Ba 0.50000 0.50000 0.50000 Ti 0.50000 0.50000 0.00000 O avogadro-1.1.1/crystals/halides/0000755000175000001440000000000012250371054016001 5ustar marcususersavogadro-1.1.1/crystals/halides/HgCl-Calomel.cif0000644000175000001440000000452412250371054020660 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008978.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008978 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cl Hg' _chemical_name_mineral Calomel _space_group_IT_number 139 _symmetry_space_group_name_Hall '-I 4 2' _symmetry_space_group_name_H-M 'I 4/m m m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.478 _cell_length_b 4.478 _cell_length_c 10.91 _cell_volume 218.773 _exptl_crystal_density_diffrn 7.166 _[local]_cod_chemical_formula_sum_orig 'Hg Cl' _cod_database_code 9008978 _amcsd_database_code AMCSD#0011309 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2+y,1/2+z -y,-x,z 1/2-y,1/2-x,1/2+z y,x,-z 1/2+y,1/2+x,1/2-z y,-x,-z 1/2+y,1/2-x,1/2-z -y,x,z 1/2-y,1/2+x,1/2+z x,-y,z 1/2+x,1/2-y,1/2+z -x,y,-z 1/2-x,1/2+y,1/2-z x,y,-z 1/2+x,1/2+y,1/2-z -x,-y,z 1/2-x,1/2-y,1/2+z y,x,z 1/2+y,1/2+x,1/2+z -y,-x,-z 1/2-y,1/2-x,1/2-z -y,x,-z 1/2-y,1/2+x,1/2-z y,-x,z 1/2+y,1/2-x,1/2+z -x,y,z 1/2-x,1/2+y,1/2+z x,-y,-z 1/2+x,1/2-y,1/2-z -x,-y,-z 1/2-x,1/2-y,1/2-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Hg 0.00000 0.00000 0.11600 Cl 0.00000 0.00000 0.34700 avogadro-1.1.1/crystals/halides/CrCl2.cif0000644000175000001440000000410312250371054017367 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009085.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009085 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: distorted rutile structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cl2 Cr' _chemical_name_mineral CrCl2 _space_group_IT_number 58 _symmetry_space_group_name_Hall '-P 2 2n' _symmetry_space_group_name_H-M 'P n n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.974 _cell_length_b 6.624 _cell_length_c 3.488 _cell_volume 138.026 _exptl_crystal_density_diffrn 2.957 _[local]_cod_chemical_formula_sum_orig 'Cr Cl2' _cod_database_code 9009085 _amcsd_database_code AMCSD#0011417 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,1/2+z 1/2+x,1/2-y,1/2-z x,y,-z -x,-y,z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cr 0.00000 0.00000 0.00000 Cl 0.27800 0.36200 0.00000 avogadro-1.1.1/crystals/halides/AlNa3F6-Cryolite.cif0000644000175000001440000000513112250371054021346 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9004097.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9004097 loop_ _publ_author_name 'Hawthorne, F. C.' 'Ferguson, R. B.' _publ_section_title ; Refinement of the crystal structure of cryolite ; _journal_name_full 'The Canadian Mineralogist' _journal_page_first 377 _journal_page_last 382 _journal_volume 13 _journal_year 1975 _chemical_formula_sum 'Al F6 Na3' _chemical_name_mineral Cryolite _space_group_IT_number 14 _symmetry_space_group_name_Hall '-P 2yn' _symmetry_space_group_name_H-M 'P 1 21/n 1' _cell_angle_alpha 90 _cell_angle_beta 90.278 _cell_angle_gamma 90 _cell_length_a 5.4024 _cell_length_b 5.5959 _cell_length_c 7.7564 _cell_volume 234.483 _exptl_crystal_density_diffrn 2.973 _[local]_cod_chemical_formula_sum_orig 'Al Na3 F6' _cod_database_code 9004097 _amcsd_database_code AMCSD#0005078 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z -x,-y,-z loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 Al 0.00825 0.00827 0.00872 0.00000 0.00004 0.00000 Na1 0.01359 0.01356 0.01365 0.00000 -0.00053 0.00000 Na2 0.01825 0.01767 0.02310 -0.00268 0.00004 0.00033 F1 0.01931 0.02023 0.01033 0.00055 -0.00344 -0.00169 F2 0.01382 0.01731 0.01972 0.00671 0.00376 0.00183 F3 0.01684 0.01344 0.02246 -0.00513 -0.00134 0.00526 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Al 0.00000 0.00000 0.00000 Na1 0.00000 0.00000 0.50000 Na2 0.51330 -0.05190 0.24740 F1 0.10260 0.04550 0.21940 F2 -0.27320 0.17370 0.04620 F3 0.16340 0.26900 -0.06300 avogadro-1.1.1/crystals/halides/FeCl3-Molysite.cif0000644000175000001440000000322412250371054021164 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. data_5910097 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Page 38 from the second edition supplement of The Structure of Crystals by Wyckoff R W G. published by Reinhold PublishingCorporation, INC, Camden,N. J. in 1935 & http://database.iem.ac.ru/mincryst/ ; _journal_name_full 'The second edition supplement of The Structure of Crystals' _journal_page_first 38 _journal_page_last 38 _journal_year 1935 _chemical_formula_structural FeCl3 _chemical_formula_sum 'Cl3 Fe' _chemical_name_systematic molysite _symmetry_cell_setting trigonal _symmetry_Int_Tables_number 148 _symmetry_space_group_name_H-M 'R -3' _audit_creation_date 2005-10-12 _audit_creation_method ; Page 38 from the second edition supplement of The Structure of Crystals by Wyckoff R W G. published by Reinhold PublishingCorporation, INC, Camden,N. J. in 1935 & http://database.iem.ac.ru/mincryst/ ; _audit_update_record 'created by Girish Upreti, Portland State University' _cell_angle_alpha 52.30 _cell_angle_beta 52.30 _cell_angle_gamma 52.30 _cell_length_a 6.69 _cell_length_b 6.69 _cell_length_c 6.69 _cell_volume 173.426 _[local]_cod_chemical_formula_sum_orig 'Fe Cl3' _cod_database_code 5910097 loop_ _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_label 0.33330 0.33330 0.33330 Fe -0.25600 0.41000 0.07700 Cl avogadro-1.1.1/crystals/halides/AgCl-Chlorargyrite.cif0000644000175000001440000001054012250371054022106 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008597.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008597 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ag Cl' _chemical_name_mineral Chlorargyrite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.47 _cell_length_b 5.47 _cell_length_c 5.47 _cell_volume 163.667 _exptl_crystal_density_diffrn 5.816 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008597 _amcsd_database_code AMCSD#0010928 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ag 0.00000 0.00000 0.00000 Cl 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/halides/CdCl2.cif0000644000175000001440000000502312250371054017353 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009125.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009125 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: cadmium chloride structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cd Cl2' _chemical_name_mineral CdCl2 _space_group_IT_number 166 _symmetry_space_group_name_Hall '-R 3 2"' _symmetry_space_group_name_H-M 'R -3 m :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.85 _cell_length_b 3.85 _cell_length_c 17.46 _cell_volume 224.128 _exptl_crystal_density_diffrn 4.075 _[local]_cod_cif_authors_sg_H-M 'R -3 m' _cod_database_code 9009125 _amcsd_database_code AMCSD#0011457 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z x,x-y,z 2/3+x,1/3+x-y,1/3+z 1/3+x,2/3+x-y,2/3+z y,x,-z 2/3+y,1/3+x,1/3-z 1/3+y,2/3+x,2/3-z -x+y,y,z 2/3-x+y,1/3+y,1/3+z 1/3-x+y,2/3+y,2/3+z -x,-x+y,-z 2/3-x,1/3-x+y,1/3-z 1/3-x,2/3-x+y,2/3-z -y,-x,z 2/3-y,1/3-x,1/3+z 1/3-y,2/3-x,2/3+z x-y,-y,-z 2/3+x-y,1/3-y,1/3-z 1/3+x-y,2/3-y,2/3-z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cd 0.00000 0.00000 0.00000 Cl 0.00000 0.00000 0.25000 avogadro-1.1.1/crystals/halides/CdI2.cif0000644000175000001440000000404212250371054017205 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009138.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009138 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cd I2' _chemical_name_mineral CdI2 _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.24 _cell_length_b 4.24 _cell_length_c 13.67 _cell_volume 212.829 _exptl_crystal_density_diffrn 5.715 _cod_database_code 9009138 _amcsd_database_code AMCSD#0011470 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cd 0.33333 0.66667 0.00000 I1 0.33333 0.66667 0.37500 I2 0.00000 0.00000 0.62500 avogadro-1.1.1/crystals/halides/AgBr-Bromargyrite.cif0000644000175000001440000001054512250371054021750 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008596.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008596 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ag Br' _chemical_name_mineral Bromargyrite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.7745 _cell_length_b 5.7745 _cell_length_c 5.7745 _cell_volume 192.550 _exptl_crystal_density_diffrn 6.477 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008596 _amcsd_database_code AMCSD#0010927 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ag 0.00000 0.00000 0.00000 Br 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/halides/CaF2-Fluorite.cif0000644000175000001440000001054412250371054020772 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009005.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009005 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Fluorite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ca F2' _chemical_name_mineral Fluorite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.46295 _cell_length_b 5.46295 _cell_length_c 5.46295 _cell_volume 163.035 _exptl_crystal_density_diffrn 3.181 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9009005 _amcsd_database_code AMCSD#0011336 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ca 0.00000 0.00000 0.00000 F 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/halides/PbFCl-Matlockite.cif0000644000175000001440000000434712250371054021514 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009176.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009176 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: tetragonal PbFCl structure ; _journal_name_full 'Crystal Structures' _journal_page_first 294 _journal_page_last 296 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cl F Pb' _chemical_name_mineral Matlockite _space_group_IT_number 129 _symmetry_space_group_name_Hall 'P 4ab 2ab -1ab' _symmetry_space_group_name_H-M 'P 4/n m m :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 4.106 _cell_length_b 4.106 _cell_length_c 7.23 _cell_volume 121.892 _exptl_crystal_density_diffrn 7.129 _[local]_cod_cif_authors_sg_H-M 'P 4/n m m' _[local]_cod_chemical_formula_sum_orig 'Pb F Cl' _cod_database_code 9009176 _amcsd_database_code AMCSD#0011508 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2-y,1/2-x,z y,x,-z y,-x,-z 1/2-y,1/2+x,z x,-y,z 1/2-x,1/2+y,-z 1/2+x,1/2+y,-z -x,-y,z 1/2+y,1/2+x,z -y,-x,-z -y,x,-z 1/2+y,1/2-x,z -x,y,z 1/2+x,1/2-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pb 0.00000 0.50000 0.20000 F 0.00000 0.00000 0.00000 Cl 0.00000 0.50000 0.65000 avogadro-1.1.1/crystals/halides/CrCl3.cif0000644000175000001440000000433012250371054017372 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010575.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010575 _chemical_name_systematic 'Chromium chloride' _chemical_formula_structural 'Cr Cl3' _chemical_formula_sum 'Cl3 Cr' _publ_section_title ; The Structure of Chromium Trichloride Cr Cl~3~ ; loop_ _publ_author_name 'Wooster, N' _journal_name_full ; Zeitschrift fuer Kristallographie, Kristallgeometrie, Kristallphysik, Kristallchemie (-144,1977) ; _journal_coden_ASTM ZEKGAX _journal_volume 74 _journal_year 1930 _journal_page_first 363 _journal_page_last 374 _cell_length_a 6.017(1) _cell_length_b 6.017(1) _cell_length_c 17.3(1) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 542.4 _cell_formula_units_Z 6 _exptl_crystal_density_meas 2.87 _symmetry_space_group_name_H-M 'P 32 1 2' _symmetry_Int_Tables_number 153 _symmetry_cell_setting trigonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-y,x-y,2/3+z' 'y-x,-x,1/3+z' '-y,-x,1/3-z' 'y-x,y,2/3-z' 'x,x-y,-z' loop_ _atom_type_symbol _atom_type_oxidation_number Cr3+ 3.000 Cl1- -1.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Cr1 Cr3+ 3 b 0.2222 0.1111 0. 1. 0 d Cr2 Cr3+ 3 b 0.8889 0.4444 0. 1. 0 d Cl1 Cl1- 6 c 0.8889 0.1111 0.0731 1. 0 d Cl2 Cl1- 6 c 0.5556 0.4444 0.0731 1. 0 d Cl3 Cl1- 6 c 0.2222 0.7778 0.0731 1. 0 d _cod_database_code 1010575 avogadro-1.1.1/crystals/halides/AlCl3.cif0000644000175000001440000000273212250371054017366 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010563.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010563 _chemical_name_systematic 'Aluminium chloride' _chemical_formula_structural 'Al Cl3' _chemical_formula_sum 'Al Cl3' _publ_section_title 'Zur Struktur Al Cl~3~' loop_ _publ_author_name 'Laschkarew, W E' _journal_name_full ; Zeitschrift fuer Anorganische und Allgemeine Chemie ; _journal_coden_ASTM ZAACAB _journal_volume 193 _journal_year 1930 _journal_page_first 270 _journal_page_last 276 _cell_length_a 3.475(1) _cell_length_b 3.475(1) _cell_length_c 8.51 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 89.0 _cell_formula_units_Z 1 _exptl_crystal_density_meas 2.4 loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z ? ? ? ? _cod_database_code 1010563 avogadro-1.1.1/crystals/halides/CsCl.cif0000644000175000001440000001060612250371054017313 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008620.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008620 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cl Cs' _chemical_name_mineral CsCl _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 7.02 _cell_length_b 7.02 _cell_length_c 7.02 _cell_volume 345.948 _exptl_crystal_density_diffrn 3.232 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Cs Cl' _cod_database_code 9008620 _amcsd_database_code AMCSD#0010951 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cs 0.00000 0.00000 0.00000 Cl 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/halides/KCl-Sylvite.cif0000644000175000001440000001061712250371054020577 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008651.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008651 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cl K' _chemical_name_mineral Sylvite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.29294 _cell_length_b 6.29294 _cell_length_c 6.29294 _cell_volume 249.207 _exptl_crystal_density_diffrn 1.987 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'K Cl' _cod_database_code 9008651 _amcsd_database_code AMCSD#0010982 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z K 0.00000 0.00000 0.00000 Cl 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/halides/NaCl-Halite.cif0000644000175000001440000001062112250371054020505 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008678.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008678 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cl Na' _chemical_name_mineral Halite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.64056 _cell_length_b 5.64056 _cell_length_c 5.64056 _cell_volume 179.460 _exptl_crystal_density_diffrn 2.163 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'Na Cl' _cod_database_code 9008678 _amcsd_database_code AMCSD#0011009 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Na 0.00000 0.00000 0.00000 Cl 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/halides/KBr.cif0000644000175000001440000001061012250371054017140 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008650.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008650 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Br K' _chemical_name_mineral KBr _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.6000 _cell_length_b 6.6000 _cell_length_c 6.6000 _cell_volume 287.496 _exptl_crystal_density_diffrn 2.749 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'K Br' _cod_database_code 9008650 _amcsd_database_code AMCSD#0010981 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z K 0.00000 0.00000 0.00000 Br 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/hydroxides/0000755000175000001440000000000012250371054016552 5ustar marcususersavogadro-1.1.1/crystals/hydroxides/Ni(OH)2-Theophrastite.cif0000644000175000001440000000412612250371054023061 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009112.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009112 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: cadmium iodide structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'H2 Ni O2' _chemical_name_mineral Theophrastite _space_group_IT_number 164 _symmetry_space_group_name_Hall '-P 3 2"' _symmetry_space_group_name_H-M 'P -3 m 1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.117 _cell_length_b 3.117 _cell_length_c 4.595 _cell_volume 38.662 _exptl_crystal_density_diffrn 3.982 _[local]_cod_chemical_formula_sum_orig 'Ni (O2 H2)' _cod_database_code 9009112 _amcsd_database_code AMCSD#0011444 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,-x+y,-z -x,-x+y,-z -x+y,-x,z -x+y,y,z -x,-y,-z y,x,-z -y,x-y,z x,x-y,z x-y,x,-z x-y,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ni 0.00000 0.00000 0.00000 O-H 0.33333 0.66667 0.25000 avogadro-1.1.1/crystals/hydroxides/LiOH.cif0000644000175000001440000000427312250371054020036 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008958.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008958 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'H Li O' _chemical_name_mineral LiOH _space_group_IT_number 129 _symmetry_space_group_name_Hall 'P 4ab 2ab -1ab' _symmetry_space_group_name_H-M 'P 4/n m m :1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 3.546 _cell_length_b 3.546 _cell_length_c 4.334 _cell_volume 54.496 _exptl_crystal_density_diffrn 1.459 _[local]_cod_cif_authors_sg_H-M 'P 4/n m m' _[local]_cod_chemical_formula_sum_orig 'O H Li' _cod_database_code 9008958 _amcsd_database_code AMCSD#0011289 loop_ _symmetry_equiv_pos_as_xyz x,y,z 1/2-y,1/2-x,z y,x,-z y,-x,-z 1/2-y,1/2+x,z x,-y,z 1/2-x,1/2+y,-z 1/2+x,1/2+y,-z -x,-y,z 1/2+y,1/2+x,z -y,-x,-z -y,x,-z 1/2+y,1/2-x,z -x,y,z 1/2+x,1/2-y,-z 1/2-x,1/2-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O 0.00000 0.50000 0.19410 H 0.00000 0.50000 0.40720 Li 0.00000 0.00000 0.00000 avogadro-1.1.1/crystals/hydroxides/Ca(OH)2-Portlandite.cif0000644000175000001440000000412712250371054022501 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9009098.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9009098 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: cadmium iodide structure ; _journal_name_full 'Crystal Structures' _journal_page_first 239 _journal_page_last 444 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Ca H2 O2' _chemical_name_mineral Portlandite _space_group_IT_number 164 _symmetry_space_group_name_Hall '-P 3 2"' _symmetry_space_group_name_H-M 'P -3 m 1' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.5844 _cell_length_b 3.5844 _cell_length_c 4.8962 _cell_volume 54.478 _exptl_crystal_density_diffrn 2.258 _[local]_cod_chemical_formula_sum_orig 'Ca (O2 H2)' _cod_database_code 9009098 _amcsd_database_code AMCSD#0011430 loop_ _symmetry_equiv_pos_as_xyz x,y,z -y,-x,z y,-x+y,-z -x,-x+y,-z -x+y,-x,z -x+y,y,z -x,-y,-z y,x,-z -y,x-y,z x,x-y,z x-y,x,-z x-y,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Ca 0.00000 0.00000 0.00000 O-H 0.33333 0.66667 0.23300 avogadro-1.1.1/crystals/hydroxides/KOH.cif0000644000175000001440000001060712250371054017662 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008655.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008655 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'H K O' _chemical_name_mineral KOH _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.78 _cell_length_b 5.78 _cell_length_c 5.78 _cell_volume 193.101 _exptl_crystal_density_diffrn 1.930 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _[local]_cod_chemical_formula_sum_orig 'K (O H)' _cod_database_code 9008655 _amcsd_database_code AMCSD#0010986 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z K 0.00000 0.00000 0.00000 O-H 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/hydroxides/Mg(OH)2-Brucite.cif0000644000175000001440000000733612250371054021636 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/2/2101439.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided by IUCr Journals, http://journals.iucr.org/. # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_2101439 loop_ _publ_author_name 'Desgranges, L.' 'Calvarin, G.' 'Chevrier, G.' _publ_section_title ; Interlayer interactions in M(OH)~2~: a neutron diffraction study of Mg(OH)~2~ ; _journal_issue 1 _journal_name_full 'Acta Crystallographica Section B' _journal_page_first 82 _journal_page_last 86 _journal_volume 52 _journal_year 1996 _chemical_formula_sum 'H2 Mg O2' _[local]_cod_chemical_formula_sum_orig 'H2 Mg1 O2' _chemical_formula_weight 58.3 _symmetry_cell_setting trigonal _symmetry_space_group_name_Hall '-P 3 2"' _symmetry_space_group_name_H-M 'P -3 m 1' _atom_type_scat_source 'Delapalme (1985)' _cell_angle_alpha 90.0 _cell_angle_beta 90.0 _cell_angle_gamma 120.0 _cell_formula_units_Z 1 _cell_length_a 3.1450(10) _cell_length_b 3.1450(10) _cell_length_c 4.740(2) _cell_measurement_reflns_used 20 _cell_measurement_temperature 70 _cell_measurement_theta_max 30 _cell_measurement_theta_min 12 _cell_volume 40.602 _diffrn_measurement_device 'P110 Canal 5C2' _diffrn_measurement_method \w-2\q _diffrn_radiation_type neutron _diffrn_radiation_wavelength 0.8330(5) _diffrn_reflns_av_R_equivalents 0.046 _diffrn_reflns_limit_h_max 4 _diffrn_reflns_limit_h_min 0 _diffrn_reflns_limit_k_max 4 _diffrn_reflns_limit_k_min 0 _diffrn_reflns_limit_l_max 7 _diffrn_reflns_limit_l_min 0 _diffrn_reflns_number 202 _diffrn_reflns_theta_max 36.61 _diffrn_standards_decay_% 1 _diffrn_standards_interval_time 120 _diffrn_standards_number 2 _exptl_absorpt_coefficient_mu 0.178 _exptl_absorpt_correction_T_max 0.8979 _exptl_absorpt_correction_T_min 0.5414 _exptl_absorpt_correction_type empirical _exptl_crystal_colour colorless _exptl_crystal_density_diffrn 2.39 _exptl_crystal_description platelet _exptl_crystal_size_max 5.6 _exptl_crystal_size_mid 5.4 _exptl_crystal_size_min 0.6 _refine_diff_density_max 0.447 _refine_diff_density_min -0.423 _refine_ls_extinction_method none _refine_ls_goodness_of_fit_all 2.54 _refine_ls_hydrogen_treatment 'see text' _refine_ls_number_parameters 12 _refine_ls_number_reflns 81 _refine_ls_R_factor_obs 0.0184 _refine_ls_shift/esd_max 0.0 _refine_ls_structure_factor_coef F _refine_ls_weighting_scheme 'w = 1/\s^2^(F)' _refine_ls_wR_factor_obs 0.0182 _reflns_number_observed 57 _reflns_number_total 81 _reflns_observed_criterion F^2^>2.5\s(F^2^) _[local]_cod_data_source_file du0401.cif loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Mg .0 .0 .0 O .3333 .6667 -.2194(2) H .3569(9) .6431(9) -.4195(6) _cod_database_code 2101439 avogadro-1.1.1/crystals/telurides/0000755000175000001440000000000012250371054016370 5ustar marcususersavogadro-1.1.1/crystals/telurides/BiTe.cif0000644000175000001440000001052712250371054017703 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008604.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008604 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Bi Te' _chemical_name_mineral BiTe _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.47 _cell_length_b 6.47 _cell_length_c 6.47 _cell_volume 270.840 _exptl_crystal_density_diffrn 8.254 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008604 _amcsd_database_code AMCSD#0010935 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Bi 0.00000 0.00000 0.00000 Te 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/telurides/CdTe.cif0000644000175000001440000000617612250371054017704 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008840.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008840 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cd Te' _chemical_name_mineral CdTe _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.480 _cell_length_b 6.480 _cell_length_c 6.480 _cell_volume 272.098 _exptl_crystal_density_diffrn 5.859 _cod_database_code 9008840 _amcsd_database_code AMCSD#0011171 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cd 0.00000 0.00000 0.00000 Te 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/telurides/Bi2Te3.cif0000644000175000001440000000514212250371054020045 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9011962.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9011962 loop_ _publ_author_name 'Nakajima, S.' _publ_section_title ; The crystal structure of Bi2Te3-xSex Locality: synthetic ; _journal_name_full 'Journal of Physics and Chemistry of Solids' _journal_page_first 479 _journal_page_last 485 _journal_volume 24 _journal_year 1963 _chemical_formula_sum 'Bi2 Te3' _chemical_name_mineral Tellurobismuthite _space_group_IT_number 166 _symmetry_space_group_name_Hall '-R 3 2"' _symmetry_space_group_name_H-M 'R -3 m :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.386 _cell_length_b 4.386 _cell_length_c 30.497 _cell_volume 508.072 _exptl_crystal_density_diffrn 7.851 _[local]_cod_cif_authors_sg_H-M 'R -3 m' _cod_database_code 9011962 _amcsd_database_code AMCSD#0012422 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z x,x-y,z 2/3+x,1/3+x-y,1/3+z 1/3+x,2/3+x-y,2/3+z y,x,-z 2/3+y,1/3+x,1/3-z 1/3+y,2/3+x,2/3-z -x+y,y,z 2/3-x+y,1/3+y,1/3+z 1/3-x+y,2/3+y,2/3+z -x,-x+y,-z 2/3-x,1/3-x+y,1/3-z 1/3-x,2/3-x+y,2/3-z -y,-x,z 2/3-y,1/3-x,1/3+z 1/3-y,2/3-x,2/3+z x-y,-y,-z 2/3+x-y,1/3-y,1/3-z 1/3+x-y,2/3-y,2/3-z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Bi 0.00000 0.00000 0.40000 0.01900 Te1 0.00000 0.00000 0.00000 0.01900 Te2 0.00000 0.00000 0.20950 0.01900 avogadro-1.1.1/crystals/telurides/PbTe-Altaite.cif0000644000175000001440000001053512250371054021272 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008696.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008696 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Pb Te' _chemical_name_mineral Altaite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.454 _cell_length_b 6.454 _cell_length_c 6.454 _cell_volume 268.836 _exptl_crystal_density_diffrn 8.272 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008696 _amcsd_database_code AMCSD#0011027 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pb 0.00000 0.00000 0.00000 Te 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/telurides/ZnTe.cif0000644000175000001440000000411612250371054017735 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008880.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008880 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Te Zn' _chemical_name_mineral ZnTe _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.27 _cell_length_b 4.27 _cell_length_c 6.99 _cell_volume 110.373 _exptl_crystal_density_diffrn 5.807 _[local]_cod_chemical_formula_sum_orig 'Zn Te' _cod_database_code 9008880 _amcsd_database_code AMCSD#0011211 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zn 0.33333 0.66667 0.00000 Te 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/ice/0000755000175000001440000000000012250371054015130 5ustar marcususersavogadro-1.1.1/crystals/ice/H2O-Ice-II.cif0000644000175000001440000000167512250371054017211 0ustar marcususersdata_global _chemical_name_mineral 'Ice II' loop_ _publ_author_name 'McFarlan R' _journal_name_full 'Journal of Chemical Physics' _journal_volume 4 _journal_year 1936 _journal_page_first 60 _journal_page_last 64 _publ_section_title ; The Structure of Ice II _cod_database_code 1011063 ; _database_code_amcsd 0017962 _chemical_formula_sum 'O H2' _cell_length_a 7.8 _cell_length_b 4.5 _cell_length_c 5.56 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 195.156 _exptl_crystal_density_diffrn 1.226 _symmetry_space_group_name_H-M 'C 2 2 21' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,z' '-x,y,1/2-z' '1/2-x,1/2+y,1/2-z' 'x,-y,-z' '1/2+x,1/2-y,-z' '-x,-y,1/2+z' '1/2-x,1/2-y,1/2+z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 0.16700 0.20500 0.17800 H1 0.16700 0.00000 0.00000 H2 0.00000 0.25000 0.25000 H3 0.25000 0.45500 0.25000 avogadro-1.1.1/crystals/ice/H2O-Ice-VII.cif0000644000175000001440000000322312250371054017326 0ustar marcususersdata_global _chemical_name_mineral 'Ice VII' loop_ _publ_author_name 'Kamb B' 'Davis B L' _journal_name_full 'Proceedings of the National Academy of Sciences' _journal_volume 52 _journal_year 1964 _journal_page_first 1433 _journal_page_last 1439 _publ_section_title ; Ice VII, the densest form of ice Note: T = 223 K, P = 2.5 GPa ; _database_code_amcsd 0018369 _chemical_compound_source 'Synthetic' _chemical_formula_sum 'O H2' _cell_length_a 3.30 _cell_length_b 3.30 _cell_length_c 3.30 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 35.937 _exptl_crystal_density_diffrn 1.665 _symmetry_space_group_name_H-M 'P n 3 m' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+z,1/2-x,1/2+y' '-y,z,-x' '1/2+x,1/2-y,1/2+z' '-z,x,-y' '1/2+y,1/2-z,1/2+x' '-x,y,-z' 'x,-z,-y' '1/2-z,1/2+y,1/2+x' 'y,-x,-z' '1/2-x,1/2+z,1/2+y' 'z,-y,-x' '1/2-y,1/2+x,1/2+z' 'x,z,y' '1/2-z,1/2-y,1/2-x' 'y,x,z' '1/2-x,1/2-z,1/2-y' 'z,y,x' '1/2-y,1/2-x,1/2-z' '1/2+z,1/2+x,1/2-y' '-y,-z,x' '1/2+x,1/2+y,1/2-z' '-z,-x,y' '1/2+y,1/2+z,1/2-x' '-x,-y,z' '1/2-z,1/2+x,1/2+y' 'y,-z,-x' '1/2-x,1/2+y,1/2+z' 'z,-x,-y' '1/2-y,1/2+z,1/2+x' 'x,-y,-z' '-x,z,-y' '1/2+z,1/2-y,1/2+x' '-y,x,-z' '1/2+x,1/2-z,1/2+y' '-z,y,-x' '1/2+y,1/2-x,1/2+z' '-x,-z,y' '1/2+z,1/2+y,1/2-x' '-y,-x,z' '1/2+x,1/2+z,1/2-y' '-z,-y,x' '1/2+y,1/2+x,1/2-z' '1/2-z,1/2-x,1/2-y' 'y,z,x' '1/2-x,1/2-y,1/2-z' 'z,x,y' '1/2-y,1/2-z,1/2-x' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy O 0.00000 0.00000 0.00000 1.00000 H 0.17000 0.17000 0.17000 0.50000 avogadro-1.1.1/crystals/ice/H2O-Ice.cif0000644000175000001440000000451312250371054016704 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 12:14:52 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35911 $ #$URL: file:///home/coder/svn-repositories/cod/cif/1/01/10/1011023.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1011023 _chemical_name_systematic 'Dihydrogen oxide' _chemical_name_mineral 'Ice Ih' _chemical_formula_structural 'H2 O' _chemical_formula_sum 'H2 O' _publ_section_title ; A Theory of Water and Ionic Solution, with Particular Reference to Hydrogen and Hydroxyl Ions ; loop_ _publ_author_name 'Bernal, J D' 'Fowler, R H' _journal_name_full 'Journal of Chemical Physics' _journal_coden_ASTM JCPSA6 _journal_volume 1 _journal_year 1933 _journal_page_first 515 _journal_page_last 548 _cell_length_a 7.82 _cell_length_b 7.82 _cell_length_c 7.36 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 389.8 _cell_formula_units_Z 12 _exptl_crystal_density_meas 0.92 _symmetry_space_group_name_H-M 'P 63 c m' _symmetry_Int_Tables_number 185 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-y,x-y,z' 'y-x,-x,z' 'y,x,z' 'x-y,-y,z' '-x,y-x,z' '-x,-y,1/2+z' 'y,y-x,1/2+z' 'x-y,x,1/2+z' '-y,-x,1/2+z' 'y-x,y,1/2+z' 'x,x-y,1/2+z' loop_ _atom_type_symbol _atom_type_oxidation_number O2- -2.000 H1+ 1.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag O1 O2- 6 c 0.3333 0. 0.0625 1. 0 d O2 O2- 6 c 0.6667 0. 0.9375 1. 0 d H1 H1+ 6 c 0.3333 0. 0.174 1. 0 d H2 H1+ 6 c 0.438 0. 0.026 1. 0 d H3 H1+ 12 d 0.772 0.105 0.975 1. 0 d _cod_database_code 1011023 avogadro-1.1.1/crystals/ice/H2O-Ice-VI.cif0000644000175000001440000000177212250371054017224 0ustar marcususersdata_global _chemical_name_mineral 'Ice VI' loop_ _publ_author_name 'Kamb B' _journal_name_full 'Science' _journal_volume 150 _journal_year 1965 _journal_page_first 205 _journal_page_last 209 _publ_section_title ; Structure of ice VI ; _database_code_amcsd 0015417 _chemical_formula_sum '(O H2)' _cell_length_a 6.27 _cell_length_b 6.27 _cell_length_c 5.79 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 227.622 _exptl_crystal_density_diffrn 1.577 _symmetry_space_group_name_H-M 'P 42/n m c' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2-y,1/2-x,1/2+z' 'y,x,-z' 'y,-x,-z' '1/2-y,1/2+x,1/2+z' 'x,-y,z' '1/2-x,1/2+y,1/2-z' '1/2+x,1/2+y,1/2-z' '-x,-y,z' '1/2+y,1/2+x,1/2+z' '-y,-x,-z' '-y,x,-z' '1/2+y,1/2-x,1/2+z' '-x,y,z' '1/2+x,1/2-y,1/2-z' '1/2-x,1/2-y,1/2-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Wat1 0.00000 0.27600 0.38200 Wat2 0.00000 0.00000 0.00000 Wat3 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/ice/H2O-Ice-III.cif0000644000175000001440000000215412250371054017313 0ustar marcususersdata_global _chemical_name_mineral 'Ice III' loop_ _publ_author_name 'McFarlan R' _journal_name_full 'Journal of Chemical Physics' _journal_volume 4 _journal_year 1936 _journal_page_first 253 _journal_page_last 259 _publ_section_title ; The Structure of Ice III _cod_database_code 1011024 ; _database_code_amcsd 0017931 _chemical_formula_sum 'O4 H7' _cell_length_a 10.2 _cell_length_b 5.87 _cell_length_c 7.17 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_volume 429.297 _exptl_crystal_density_diffrn 1.099 _symmetry_space_group_name_H-M 'I b a m' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2+x,1/2+y,1/2+z' 'x,-y,1/2+z' '1/2+x,1/2-y,+z' '-x,y,1/2-z' '1/2-x,1/2+y,-z' '-x,y,1/2+z' '1/2-x,1/2+y,+z' 'x,-y,1/2-z' '1/2+x,1/2-y,-z' 'x,y,-z' '1/2+x,1/2+y,1/2-z' '-x,-y,z' '1/2-x,1/2-y,1/2+z' '-x,-y,-z' '1/2-x,1/2-y,1/2-z' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z O1 0.12600 0.21800 0.06250 H1 0.25000 0.25000 0.00000 H2 0.12600 0.00000 0.00000 H3 0.00000 0.21800 0.00000 H4 0.00000 0.50000 0.25000 avogadro-1.1.1/crystals/ice/H2O-Ice-Ih.cif0000644000175000001440000000451312250371054017242 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 12:14:52 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35911 $ #$URL: file:///home/coder/svn-repositories/cod/cif/1/01/10/1011023.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1011023 _chemical_name_systematic 'Dihydrogen oxide' _chemical_name_mineral 'Ice Ih' _chemical_formula_structural 'H2 O' _chemical_formula_sum 'H2 O' _publ_section_title ; A Theory of Water and Ionic Solution, with Particular Reference to Hydrogen and Hydroxyl Ions ; loop_ _publ_author_name 'Bernal, J D' 'Fowler, R H' _journal_name_full 'Journal of Chemical Physics' _journal_coden_ASTM JCPSA6 _journal_volume 1 _journal_year 1933 _journal_page_first 515 _journal_page_last 548 _cell_length_a 7.82 _cell_length_b 7.82 _cell_length_c 7.36 _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 389.8 _cell_formula_units_Z 12 _exptl_crystal_density_meas 0.92 _symmetry_space_group_name_H-M 'P 63 c m' _symmetry_Int_Tables_number 185 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-y,x-y,z' 'y-x,-x,z' 'y,x,z' 'x-y,-y,z' '-x,y-x,z' '-x,-y,1/2+z' 'y,y-x,1/2+z' 'x-y,x,1/2+z' '-y,-x,1/2+z' 'y-x,y,1/2+z' 'x,x-y,1/2+z' loop_ _atom_type_symbol _atom_type_oxidation_number O2- -2.000 H1+ 1.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag O1 O2- 6 c 0.3333 0. 0.0625 1. 0 d O2 O2- 6 c 0.6667 0. 0.9375 1. 0 d H1 H1+ 6 c 0.3333 0. 0.174 1. 0 d H2 H1+ 6 c 0.438 0. 0.026 1. 0 d H3 H1+ 12 d 0.772 0.105 0.975 1. 0 d _cod_database_code 1011023 avogadro-1.1.1/crystals/ice/H2O-Ice-IV.cif0000644000175000001440000000327012250371054017217 0ustar marcususersdata_global _chemical_name_mineral 'Ice IV' loop_ _publ_author_name 'Engelhardt H' 'Kamb B' _journal_name_full 'Journal of Chemical Physics' _journal_volume 75 _journal_year 1981 _journal_page_first 5887 _journal_page_last 5899 _publ_section_title ; Structure of ice IV, a metastable high-pressure phase Note: T = 110 K, synthesized at 4-5.5 kb ; _database_code_amcsd 0018368 _chemical_compound_source 'Synthetic' _chemical_formula_sum 'O H2' _cell_length_a 7.60 _cell_length_b 7.60 _cell_length_c 7.60 _cell_angle_alpha 70.1 _cell_angle_beta 70.1 _cell_angle_gamma 70.1 _cell_volume 375.394 _exptl_crystal_density_diffrn 1.275 _symmetry_space_group_name_H-M 'R -3 c' loop_ _space_group_symop_operation_xyz 'x,y,z' '1/2-x,1/2-z,1/2-y' '-z,-x,-y' '1/2+y,1/2+x,1/2+z' 'y,z,x' '1/2-z,1/2-y,1/2-x' '-x,-y,-z' '1/2+x,1/2+z,1/2+y' 'z,x,y' '1/2-y,1/2-x,1/2-z' '-y,-z,-x' '1/2+z,1/2+y,1/2+x' loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_U_iso_or_equiv O1 0.38040 -0.11090 -0.23960 1.00000 ? O2 0.08550 0.08550 0.08550 1.00000 ? H1 0.03000 0.03000 0.03000 0.50000 0.02406 H2 0.14000 0.18000 0.01000 0.50000 0.02406 H3 0.21000 0.33000 -0.10000 0.50000 0.02406 H4 0.30000 -0.01000 -0.28000 0.50000 0.02406 H5 0.22000 0.11000 -0.34000 0.50000 0.02406 H6 0.28000 0.41000 -0.02000 0.50000 0.02406 loop_ _atom_site_aniso_label _atom_site_aniso_U_11 _atom_site_aniso_U_22 _atom_site_aniso_U_33 _atom_site_aniso_U_12 _atom_site_aniso_U_13 _atom_site_aniso_U_23 O1 0.02493 0.01767 0.02275 -0.00508 -0.00944 -0.02227 O2 0.01815 0.01815 0.01815 -0.01017 -0.01017 -0.01017 avogadro-1.1.1/crystals/silicates/0000755000175000001440000000000012250371054016350 5ustar marcususersavogadro-1.1.1/crystals/silicates/Be3Al2(SiO3)6-Beryl.cif0000644000175000001440000000474012250371054021770 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2010-01-30 13:59:17 +0000 (Sat, 30 Jan 2010) $ #$Revision: 966 $ #$URL: svn://cod.ibt.lt/cod/cif/1/1010541.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/ # # All data on this site have been placed in the public domain by the # contributors. # data_1010541 _chemical_name_systematic 'Triberyllium dialuminium catena-silicate' _chemical_formula_structural 'Be3 Al2 Si6 O18' _chemical_formula_sum 'Al2 Be3 O18 Si6' _publ_section_title ; The Structure of Beryl, Be~3~ Al~2~ Si~6~ O~18~ ; loop_ _publ_author_name 'Bragg, W L' _journal_name_full ; Proceedings of the Royal Society of London, Series A: Mathematical and Physical Sciences (76,1906-) ; _journal_coden_ASTM PRLAAZ _journal_volume 111 _journal_year 1926 _journal_page_first 691 _journal_page_last 714 _cell_length_a 9.21(1) _cell_length_b 9.21(1) _cell_length_c 9.17(1) _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_volume 673.6 _cell_formula_units_Z 2 _symmetry_space_group_name_H-M 'P 6/m c c S' _symmetry_Int_Tables_number 192 _symmetry_cell_setting hexagonal loop_ _symmetry_equiv_pos_as_xyz 'x,y,z' '-x,-y,z' 'y-x,-x,z' 'x-y,x,z' '-y,x-y,z' 'y,y-x,z' 'y,x,-z' '-y,-x,-z' '-x,y-x,-z' 'x,x-y,-z' 'x-y,-y,-z' 'y-x,y,-z' 'x,y,1/2-z' '-x,-y,1/2-z' 'y-x,-x,1/2-z' 'x-y,x,1/2-z' '-y,x-y,1/2-z' 'y,y-x,1/2-z' 'y,x,1/2+z' '-y,-x,1/2+z' '-x,y-x,1/2+z' 'x,x-y,1/2+z' 'x-y,-y,1/2+z' 'y-x,y,1/2+z' loop_ _atom_type_symbol _atom_type_oxidation_number Al3+ 3.000 Be2+ 2.000 Si4+ 4.000 O2- -2.000 loop_ _atom_site_label _atom_site_type_symbol _atom_site_symmetry_multiplicity _atom_site_Wyckoff_symbol _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy _atom_site_attached_hydrogens _atom_site_calc_flag Al1 Al3+ 4 d 0.6667 0.3333 0. 1. 0 d Be1 Be2+ 6 g 0.5 0. 0. 1. 0 d Si1 Si4+ 12 l 0.39 0.12 0.25 1. 0 d O1 O2- 24 m 0.48 0.15 0.1 1. 0 d O2 O2- 12 l 0.3 0.24 0.25 1. 0 d _cod_database_code 1010541 avogadro-1.1.1/crystals/selenides/0000755000175000001440000000000012250371054016343 5ustar marcususersavogadro-1.1.1/crystals/selenides/BiSe.cif0000644000175000001440000001052712250371054017655 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008603.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008603 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Bi Se' _chemical_name_mineral BiSe _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 5.99 _cell_length_b 5.99 _cell_length_c 5.99 _cell_volume 214.922 _exptl_crystal_density_diffrn 8.899 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008603 _amcsd_database_code AMCSD#0010934 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Bi 0.00000 0.00000 0.00000 Se 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/selenides/HgSe-Tiemannite.cif0000644000175000001440000000620412250371054021751 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008849.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008849 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: ZnS structure, sphalerite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Hg Se' _chemical_name_mineral Tiemannite _space_group_IT_number 216 _symmetry_space_group_name_Hall 'F -4 2 3' _symmetry_space_group_name_H-M 'F -4 3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.084 _cell_length_b 6.084 _cell_length_c 6.084 _cell_volume 225.200 _exptl_crystal_density_diffrn 8.245 _cod_database_code 9008849 _amcsd_database_code AMCSD#0011180 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Hg 0.00000 0.00000 0.00000 Se 0.25000 0.25000 0.25000 avogadro-1.1.1/crystals/selenides/PbSe-Clausthalite.cif0000644000175000001440000001054512250371054022304 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008695.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008695 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York rocksalt structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Pb Se' _chemical_name_mineral Clausthalite _space_group_IT_number 225 _symmetry_space_group_name_Hall '-F 4 2 3' _symmetry_space_group_name_H-M 'F m -3 m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 6.1243 _cell_length_b 6.1243 _cell_length_c 6.1243 _cell_volume 229.704 _exptl_crystal_density_diffrn 8.275 _[local]_cod_cif_authors_sg_H-M 'F m 3 m' _cod_database_code 9008695 _amcsd_database_code AMCSD#0011026 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,1/2+y,1/2+z 1/2+x,y,1/2+z 1/2+x,1/2+y,z z,-x,y z,1/2-x,1/2+y 1/2+z,-x,1/2+y 1/2+z,1/2-x,y -y,z,-x -y,1/2+z,1/2-x 1/2-y,z,1/2-x 1/2-y,1/2+z,-x x,-y,z x,1/2-y,1/2+z 1/2+x,-y,1/2+z 1/2+x,1/2-y,z -z,x,-y -z,1/2+x,1/2-y 1/2-z,x,1/2-y 1/2-z,1/2+x,-y y,-z,x y,1/2-z,1/2+x 1/2+y,-z,1/2+x 1/2+y,1/2-z,x -x,y,-z -x,1/2+y,1/2-z 1/2-x,y,1/2-z 1/2-x,1/2+y,-z x,-z,-y x,1/2-z,1/2-y 1/2+x,-z,1/2-y 1/2+x,1/2-z,-y -z,y,x -z,1/2+y,1/2+x 1/2-z,y,1/2+x 1/2-z,1/2+y,x y,-x,-z y,1/2-x,1/2-z 1/2+y,-x,1/2-z 1/2+y,1/2-x,-z -x,z,y -x,1/2+z,1/2+y 1/2-x,z,1/2+y 1/2-x,1/2+z,y z,-y,-x z,1/2-y,1/2-x 1/2+z,-y,1/2-x 1/2+z,1/2-y,-x -y,x,z -y,1/2+x,1/2+z 1/2-y,x,1/2+z 1/2-y,1/2+x,z x,z,y x,1/2+z,1/2+y 1/2+x,z,1/2+y 1/2+x,1/2+z,y -z,-y,-x -z,1/2-y,1/2-x 1/2-z,-y,1/2-x 1/2-z,1/2-y,-x y,x,z y,1/2+x,1/2+z 1/2+y,x,1/2+z 1/2+y,1/2+x,z -x,-z,-y -x,1/2-z,1/2-y 1/2-x,-z,1/2-y 1/2-x,1/2-z,-y z,y,x z,1/2+y,1/2+x 1/2+z,y,1/2+x 1/2+z,1/2+y,x -y,-x,-z -y,1/2-x,1/2-z 1/2-y,-x,1/2-z 1/2-y,1/2-x,-z z,x,-y z,1/2+x,1/2-y 1/2+z,x,1/2-y 1/2+z,1/2+x,-y -y,-z,x -y,1/2-z,1/2+x 1/2-y,-z,1/2+x 1/2-y,1/2-z,x x,y,-z x,1/2+y,1/2-z 1/2+x,y,1/2-z 1/2+x,1/2+y,-z -z,-x,y -z,1/2-x,1/2+y 1/2-z,-x,1/2+y 1/2-z,1/2-x,y y,z,-x y,1/2+z,1/2-x 1/2+y,z,1/2-x 1/2+y,1/2+z,-x -x,-y,z -x,1/2-y,1/2+z 1/2-x,-y,1/2+z 1/2-x,1/2-y,z -z,x,y -z,1/2+x,1/2+y 1/2-z,x,1/2+y 1/2-z,1/2+x,y y,-z,-x y,1/2-z,1/2-x 1/2+y,-z,1/2-x 1/2+y,1/2-z,-x -x,y,z -x,1/2+y,1/2+z 1/2-x,y,1/2+z 1/2-x,1/2+y,z z,-x,-y z,1/2-x,1/2-y 1/2+z,-x,1/2-y 1/2+z,1/2-x,-y -y,z,x -y,1/2+z,1/2+x 1/2-y,z,1/2+x 1/2-y,1/2+z,x x,-y,-z x,1/2-y,1/2-z 1/2+x,-y,1/2-z 1/2+x,1/2-y,-z -x,z,-y -x,1/2+z,1/2-y 1/2-x,z,1/2-y 1/2-x,1/2+z,-y z,-y,x z,1/2-y,1/2+x 1/2+z,-y,1/2+x 1/2+z,1/2-y,x -y,x,-z -y,1/2+x,1/2-z 1/2-y,x,1/2-z 1/2-y,1/2+x,-z x,-z,y x,1/2-z,1/2+y 1/2+x,-z,1/2+y 1/2+x,1/2-z,y -z,y,-x -z,1/2+y,1/2-x 1/2-z,y,1/2-x 1/2-z,1/2+y,-x y,-x,z y,1/2-x,1/2+z 1/2+y,-x,1/2+z 1/2+y,1/2-x,z -x,-z,y -x,1/2-z,1/2+y 1/2-x,-z,1/2+y 1/2-x,1/2-z,y z,y,-x z,1/2+y,1/2-x 1/2+z,y,1/2-x 1/2+z,1/2+y,-x -y,-x,z -y,1/2-x,1/2+z 1/2-y,-x,1/2+z 1/2-y,1/2-x,z x,z,-y x,1/2+z,1/2-y 1/2+x,z,1/2-y 1/2+x,1/2+z,-y -z,-y,x -z,1/2-y,1/2+x 1/2-z,-y,1/2+x 1/2-z,1/2-y,x y,x,-z y,1/2+x,1/2-z 1/2+y,x,1/2-z 1/2+y,1/2+x,-z -z,-x,-y -z,1/2-x,1/2-y 1/2-z,-x,1/2-y 1/2-z,1/2-x,-y y,z,x y,1/2+z,1/2+x 1/2+y,z,1/2+x 1/2+y,1/2+z,x -x,-y,-z -x,1/2-y,1/2-z 1/2-x,-y,1/2-z 1/2-x,1/2-y,-z z,x,y z,1/2+x,1/2+y 1/2+z,x,1/2+y 1/2+z,1/2+x,y -y,-z,-x -y,1/2-z,1/2-x 1/2-y,-z,1/2-x 1/2-y,1/2-z,-x loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Pb 0.00000 0.00000 0.00000 Se 0.50000 0.50000 0.50000 avogadro-1.1.1/crystals/selenides/Sb2Se3-Antimonselite.cif0000644000175000001440000000413712250371054022645 0ustar marcususers#------------------------------------------------------------------------------ #$Date: 2012-02-28 15:44:07 +0000 (Tue, 28 Feb 2012) $ #$Revision: 35913 $ #$URL: file:///home/coder/svn-repositories/cod/cif/9/00/74/9007437.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9007437 loop_ _publ_author_name 'Tideswell, N. W.' 'Kruse, F. H.' 'McCullough, J. D.' _publ_section_title ; The crystal structure of antimony selenide, Sb2Se3 Locality: synthetic ; _journal_name_full 'Acta Crystallographica' _journal_page_first 99 _journal_page_last 102 _journal_volume 10 _journal_year 1957 _chemical_formula_sum 'Sb2 Se3' _chemical_name_mineral Antimonselite _space_group_IT_number 62 _symmetry_space_group_name_Hall '-P 2c 2ab' _symmetry_space_group_name_H-M 'P b n m' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 90 _cell_length_a 11.62 _cell_length_b 11.77 _cell_length_c 3.962 _cell_volume 541.872 _exptl_crystal_density_diffrn 5.888 _cod_database_code 9007437 _amcsd_database_code AMCSD#0009133 loop_ _symmetry_equiv_pos_as_xyz x,y,z x,y,1/2-z -x,-y,1/2+z 1/2+x,1/2-y,1/2+z 1/2-x,1/2+y,1/2-z 1/2-x,1/2+y,z 1/2+x,1/2-y,-z -x,-y,-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Sb1 0.32800 0.03050 0.25000 0.01393 Sb2 0.03970 0.14780 0.75000 0.01393 Se1 0.87320 0.05340 0.25000 0.01393 Se2 0.44340 0.13020 0.75000 0.01393 Se3 0.19350 0.21320 0.25000 0.01393 avogadro-1.1.1/crystals/selenides/Bi2Se3.cif0000644000175000001440000000514112250371054020016 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9011965.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9011965 loop_ _publ_author_name 'Nakajima, S.' _publ_section_title ; The crystal structure of Bi2Te3-xSex Locality: synthetic ; _journal_name_full 'Journal of Physics and Chemistry of Solids' _journal_page_first 479 _journal_page_last 485 _journal_volume 24 _journal_year 1963 _chemical_formula_sum 'Bi2 Se3' _chemical_name_mineral Paraguanajuatite _space_group_IT_number 166 _symmetry_space_group_name_Hall '-R 3 2"' _symmetry_space_group_name_H-M 'R -3 m :H' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.143 _cell_length_b 4.143 _cell_length_c 28.636 _cell_volume 425.670 _exptl_crystal_density_diffrn 7.664 _[local]_cod_cif_authors_sg_H-M 'R -3 m' _cod_database_code 9011965 _amcsd_database_code AMCSD#0012425 loop_ _symmetry_equiv_pos_as_xyz x,y,z 2/3+x,1/3+y,1/3+z 1/3+x,2/3+y,2/3+z x,x-y,z 2/3+x,1/3+x-y,1/3+z 1/3+x,2/3+x-y,2/3+z y,x,-z 2/3+y,1/3+x,1/3-z 1/3+y,2/3+x,2/3-z -x+y,y,z 2/3-x+y,1/3+y,1/3+z 1/3-x+y,2/3+y,2/3+z -x,-x+y,-z 2/3-x,1/3-x+y,1/3-z 1/3-x,2/3-x+y,2/3-z -y,-x,z 2/3-y,1/3-x,1/3+z 1/3-y,2/3-x,2/3+z x-y,-y,-z 2/3+x-y,1/3-y,1/3-z 1/3+x-y,2/3-y,2/3-z y,-x+y,-z 2/3+y,1/3-x+y,1/3-z 1/3+y,2/3-x+y,2/3-z -x+y,-x,z 2/3-x+y,1/3-x,1/3+z 1/3-x+y,2/3-x,2/3+z -x,-y,-z 2/3-x,1/3-y,1/3-z 1/3-x,2/3-y,2/3-z -y,x-y,z 2/3-y,1/3+x-y,1/3+z 1/3-y,2/3+x-y,2/3+z x-y,x,-z 2/3+x-y,1/3+x,1/3-z 1/3+x-y,2/3+x,2/3-z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_U_iso_or_equiv Bi 0.00000 0.00000 0.40080 0.01900 Se1 0.00000 0.00000 0.00000 0.01900 Se2 0.00000 0.00000 0.21170 0.01900 avogadro-1.1.1/crystals/selenides/CdSe-Cadmoselite.cif0000644000175000001440000000404612250371054022077 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008863.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008863 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Cd Se' _chemical_name_mineral Cadmoselite _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 4.30 _cell_length_b 4.30 _cell_length_c 7.02 _cell_volume 112.410 _exptl_crystal_density_diffrn 5.654 _cod_database_code 9008863 _amcsd_database_code AMCSD#0011194 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Cd 0.33333 0.66667 0.00000 Se 0.33333 0.66667 0.38500 avogadro-1.1.1/crystals/selenides/ZnSe.cif0000644000175000001440000000411512250371054017706 0ustar marcususers# Part of the Crystallography Open Database # All data on this site have been placed in the public domain by the # contributors. #------------------------------------------------------------------------------ #$Date: 2010-06-10 15:11:07 +0000 (Thu, 10 Jun 2010) $ #$Revision: 1210 $ #$URL: svn://cod.ibt.lt/cod/cif/9/9008879.cif $ #------------------------------------------------------------------------------ # # This file is available in the Crystallography Open Database (COD), # http://www.crystallography.net/. The original data for this entry # were provided the American Mineralogist Crystal Structure Database, # http://rruff.geo.arizona.edu/AMS/amcsd.php # # The file may be used within the scientific community so long as # proper attribution is given to the journal article from which the # data were obtained. # data_9008879 loop_ _publ_author_name 'Wyckoff, R. W. G.' _publ_section_title ; Second edition. Interscience Publishers, New York, New York Note: wurtzite structure ; _journal_name_full 'Crystal Structures' _journal_page_first 85 _journal_page_last 237 _journal_volume 1 _journal_year 1963 _chemical_formula_sum 'Se Zn' _chemical_name_mineral ZnSe _space_group_IT_number 186 _symmetry_space_group_name_Hall 'P 6c -2c' _symmetry_space_group_name_H-M 'P 63 m c' _cell_angle_alpha 90 _cell_angle_beta 90 _cell_angle_gamma 120 _cell_length_a 3.98 _cell_length_b 3.98 _cell_length_c 6.53 _cell_volume 89.580 _exptl_crystal_density_diffrn 5.352 _[local]_cod_chemical_formula_sum_orig 'Zn Se' _cod_database_code 9008879 _amcsd_database_code AMCSD#0011210 loop_ _symmetry_equiv_pos_as_xyz x,y,z -x,-x+y,1/2+z x-y,x,1/2+z -y,-x,z -y,x-y,z x-y,-y,1/2+z -x,-y,1/2+z x,x-y,z -x+y,-x,z y,x,1/2+z y,-x+y,1/2+z -x+y,y,z loop_ _atom_site_label _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z Zn 0.33333 0.66667 0.00000 Se 0.33333 0.66667 0.38500 avogadro-1.1.1/INSTALL0000644000175000001440000000352412250371054013561 0ustar marcususersRequirements ============ -- CMake 2.8.9 or later (2.8.11 recommended) -- Qt 4.6.0 or later (4.8.5 recommended) -- OpenBabel 2.3.x or later (development version from http://github.org/openbabel/openbabel is recommended) -- Eigen 2.0.x or later (3.x also supported) Basic Installation ================== These instructions give a very basic overview of how to configure, compile and install Avogadro on most systems. If you are using unique install locations and/or libraries are not automatically detected please consult the 'Advanced' section. 1. Create a 'build' directory in the package source directory. mkdir build cd build 2. Configure the build system cmake ../ 3. Compile make -j2 4. Install sudo make install Advanced ======== The build system (CMake) provides mechanisms for specifying non-standard installation locations. -DCMAKE_INSTALL_PREFIX : specify the installation prefix (default /usr/local) -DLIB_INSTALL_DIR : specify the install location for libraries (default ${CMAKE_INSTALL_PREFIX}/lib) -DOPENBABEL2_LIBRARIES : specify the OpenBabel2 libraries -DOPENBABEL2_INCLUDE_DIR : specify the OpenBabel2 include directory -DEIGEN2_INCLUDE_DIR : specify the Eigen include directory -DENABLE_PYTHON : specify whether to build Boost.Python interpreter (default = TRUE) -DENABLE_UPDATE_CHECKER : Enable checking for new Avogadro versions over the network - Linux distributions may want to disable. For more information please consult the CMake documentation. Avogadro uses a few environment variables to find things at runtime. If Avogadro is installed to the location specified at compile time none of these variables need to be set. AVOGADRO_TRANSLATIONS - the location of the translation files. avogadro-1.1.1/avogadro/0000755000175000001440000000000012250371054014326 5ustar marcususersavogadro-1.1.1/avogadro/src/0000755000175000001440000000000012250371140015111 5ustar marcususersavogadro-1.1.1/avogadro/src/engineitemmodel.cpp0000644000175000001440000001346412250371054020776 0ustar marcususers/********************************************************************** EngineItemModel - List Model for Engines Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "engineitemmodel.h" #include #include #include #include namespace Avogadro { EngineItemModel::EngineItemModel( GLWidget *widget, QObject *parent ) : QAbstractItemModel(parent), m_glwidget(widget) { connect(m_glwidget, SIGNAL(engineAdded(Engine *)), this, SLOT(addEngine(Engine *))); connect(m_glwidget, SIGNAL(engineRemoved(Engine *)), this, SLOT(removeEngine(Engine *))); } void EngineItemModel::addEngine(Engine *engine) { QList list = m_glwidget->engines(); int row = list.indexOf(engine); beginInsertRows(QModelIndex(), row, row); endInsertRows(); // We need to indicate that the data has changed to re-sort the list // (Honestly, the dataChanged signal should come from endInsertRows) // But at least in Qt 4.4, we need to signal manually QModelIndex begin = createIndex(0, 0); QModelIndex end = createIndex(list.size() - 1, 0); emit dataChanged(begin, end); connect(engine, SIGNAL(changed()), this, SLOT(engineChanged())); } void EngineItemModel::removeEngine(Engine *engine) { disconnect(engine, SIGNAL(changed()), this, SLOT(engineChanged())); // FIXME: hack to get remove working reset(); } void EngineItemModel::engineChanged() { Engine *engine = qobject_cast(sender()); if(!engine) return; QList list = m_glwidget->engines(); int row = list.indexOf(engine); QModelIndex begin = createIndex(row, 0); QModelIndex end = createIndex(row, 0); emit dataChanged(begin, end); } QModelIndex EngineItemModel::parent( const QModelIndex & ) const { return QModelIndex(); } int EngineItemModel::columnCount( const QModelIndex & ) const { return 2; } int EngineItemModel::rowCount(const QModelIndex & parent) const { if(!parent.isValid()) return m_glwidget->engines().size(); else return 0; } QVariant EngineItemModel::data(const QModelIndex & index, int role) const { if(!index.isValid() || index.column() > 1) return QVariant(); Engine *engine = qobject_cast(static_cast(index.internalPointer())); if(engine) { if(index.column() == 1) { if (role == Qt::DisplayRole) return QVariant(); if (role == Qt::ToolTipRole) { if (engine->hasSettings()) return tr("Settings"); else return QVariant(); } else if (role == EngineItemModel::EngineRole) return qVariantFromValue(engine); else return QVariant(); } if(role == Qt::DisplayRole || role == Qt::EditRole) return engine->alias(); else if (role == Qt::CheckStateRole) { if(engine->isEnabled()) return Qt::Checked; else return Qt::Unchecked; } else if (role == Qt::ToolTipRole || role == Qt::WhatsThisRole) return engine->description(); else if (role == EngineItemModel::EngineRole) return qVariantFromValue(engine); } return QVariant(); } bool EngineItemModel::setData (const QModelIndex & index, const QVariant & value, int role) { if(!index.isValid() || !index.internalPointer()) return false; Engine *engine = qobject_cast(static_cast(index.internalPointer())); if(role == Qt::CheckStateRole) { if(value == Qt::Checked) engine->setEnabled(true); else engine->setEnabled(false); emit dataChanged(index, index); return true; } else if (role == Qt::DisplayRole || role == Qt::EditRole) { engine->setAlias(value.toString()); emit dataChanged(index, index); return true; } return false; } Qt::ItemFlags EngineItemModel::flags(const QModelIndex & index) const { if (index.column() == 0) return Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled; else return Qt::ItemIsSelectable | Qt::ItemIsEnabled; } QModelIndex EngineItemModel::index(int row, int column, const QModelIndex & parent) const { //FIXME: (bjacob) I added the "&& row >=0" condition below because I had to //fix a failed assert. It'd be cleaner to fix the cause of the problem, which is that //this function is being called with row=-1. if(!parent.isValid() && row >=0 && row < m_glwidget->engines().count()) { Engine *engine = m_glwidget->engines().at(row); return createIndex(row,column,engine); } return QModelIndex(); } void EngineItemModel::clear() { reset(); } } // end namespace Avogadro #include "engineitemmodel.moc" avogadro-1.1.1/avogadro/src/addenginedialog.cpp0000644000175000001440000000622312250371054020722 0ustar marcususers/********************************************************************** AddEngineDialog - Dialog to add an engine Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "addenginedialog.h" #include #include #include #include #include namespace Avogadro { AddEngineDialog::AddEngineDialog(QWidget *parent) : QDialog(parent) { ui.setupUi(this); connect( ui.typeCombo, SIGNAL(currentIndexChanged (const QString)), this, SLOT(typeChanged(const QString)) ); } Engine * AddEngineDialog::getEngine(QWidget *parent, const QList &engineFactories) { QPointer dialog = new AddEngineDialog(parent); QStringList types; // We get the list from the PluginFactories in rendering order // So we re-sort alphabetically for users foreach(PluginFactory *factory, engineFactories) types.append(factory->name()); qSort(types); foreach(const QString &type, types) dialog->addType(type); int accepted = dialog->exec(); if(accepted) { // Find the engine in the list and instantiate it - needed now we sort the list Engine *engine = 0; foreach(PluginFactory *factory, engineFactories) if (factory->name() == types.at(dialog->typeIndex())) engine = (Engine *) factory->createInstance(); // We should always be able to find the engine requested if (engine) { engine->setAlias(dialog->nameText()); engine->setEnabled(true); engine->setDescription(dialog->descriptionText()); } else qDebug() << "Error - engine not found in engineFactories."; delete dialog; return engine; } delete dialog; return 0; } void AddEngineDialog::addType(const QString &type) { ui.typeCombo->addItem(type); } int AddEngineDialog::typeIndex() { return ui.typeCombo->currentIndex(); } QString AddEngineDialog::nameText() { return ui.nameEdit->text(); } QString AddEngineDialog::descriptionText() { return ui.descriptionEdit->text(); } void AddEngineDialog::typeChanged(const QString type) { ui.nameEdit->setText(type); } } // end namespace Avogadro #include "addenginedialog.moc" avogadro-1.1.1/avogadro/src/main.cpp0000644000175000001440000002411012250371054016543 0ustar marcususers/********************************************************************** main.cpp - main program, initialization and launching Copyright (C) 2006-2009 by Geoffrey R. Hutchison Copyright (C) 2006-2008 by Donald Ephraim Curtis Copyright (C) 2008-2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #ifdef ENABLE_GLSL #include #endif // Qt Includes #include #include #include #include #include #include #include #include #include // get the SVN revision string #include "config.h" // krazy:exclude=includes // Avogadro Includes #include "mainwindow.h" #include "application.h" #ifdef Q_WS_X11 #include #endif #ifdef WIN32 #include #endif #ifdef AVO_APP_BUNDLE #include #endif using namespace Avogadro; void printVersion(const QString &appName); void printHelp(const QString &appName); int main(int argc, char *argv[]) { #ifdef Q_WS_X11 if(Library::threadedGL()) { std::cout << "Enabling Threads" << std::endl; XInitThreads(); } #endif // set up groups for QSettings QCoreApplication::setOrganizationName("SourceForge"); QCoreApplication::setOrganizationDomain("sourceforge.net"); QCoreApplication::setApplicationName("Avogadro"); Application app(argc, argv); // Output the untranslated application and library version - bug reports QString versionInfo = "Avogadro version:\t" + QString(VERSION) + "\tGit:\t" + QString(SCM_REVISION) + "\nLibAvogadro version:\t" + Library::version() + "\tGit:\t" + Library::scmRevision(); qDebug() << versionInfo; #ifdef WIN32 #ifndef AVO_APP_BUNDLE // Need to add an environment variable to the current process in order // to load the forcefield parameters in OpenBabel. QString babelDataDir = "BABEL_DATADIR=" + QCoreApplication::applicationDirPath(); qDebug() << babelDataDir; _putenv(babelDataDir.toStdString().c_str()); #endif #endif #ifdef AVO_APP_BUNDLE // Set up the babel data and plugin directories for Mac - relocatable // This also works for the Windows package, but BABEL_LIBDIR is ignored // Make sure to enclose the environment variable in quotes, or spaces will cause problems QString escapedAppPath = QCoreApplication::applicationDirPath().replace(' ', "\ "); QByteArray babelDataDir((QCoreApplication::applicationDirPath() + "/../share/openbabel/").toAscii()); QByteArray babelLibDir((QCoreApplication::applicationDirPath() + "/../lib/openbabel").toAscii()); int res1 = setenv("BABEL_DATADIR", babelDataDir.data(), 1); int res2 = setenv("BABEL_LIBDIR", babelLibDir.data(), 1); qDebug() << "BABEL_LIBDIR" << babelLibDir.data(); if (res1 != 0 || res2 != 0) qDebug() << "Error: setenv failed." << res1 << res2; // Override the Qt plugin search path too QStringList pluginSearchPaths; pluginSearchPaths << QCoreApplication::applicationDirPath() + "/../plugins"; QCoreApplication::setLibraryPaths(pluginSearchPaths); #endif // Before we do much else, load translations // This ensures help messages and debugging info will be translated QStringList translationPaths; foreach (const QString &variable, QProcess::systemEnvironment()) { QStringList split1 = variable.split('='); if (split1[0] == "AVOGADRO_TRANSLATIONS") { foreach (const QString &path, split1[1].split(':')) translationPaths << path; } } translationPaths << QCoreApplication::applicationDirPath() + "/../share/avogadro/i18n/"; #ifdef Q_WS_MAC translationPaths << QString(INSTALL_PREFIX) + "/share/avogadro/i18n/"; #endif // Get the locale for translations QString translationCode = QLocale::system().name(); // The QLocale::system() call on Mac doesn't reflect the default language -- only the default locale formatting // so we'll fine-tune the respone with QSystemLocale // This only applies to Qt/Mac 4.6.x and later, which added the appropriate Carbon magic to QSystemLocale. #if (QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)) #ifdef Q_WS_MAC QSystemLocale sysLocale; QLocale::Language sysLanguage = static_cast(sysLocale.query(QSystemLocale::LanguageId, QVariant()).toInt()); QLocale::Country sysCountry = static_cast(sysLocale.query(QSystemLocale::CountryId, QVariant()).toInt()); QLocale macSystemPrefsLanguage(sysLanguage, sysCountry); translationCode = macSystemPrefsLanguage.name(); #endif #endif qDebug() << "Locale: " << translationCode; // Load Qt translations first bool tryLoadingQtTranslations = false; QString qtFilename = "qt_" + translationCode + ".qm"; QTranslator qtTranslator(0); if (qtTranslator.load(qtFilename, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) app.installTranslator(&qtTranslator); else tryLoadingQtTranslations = true; // Load the libavogadro translations QPointer libTranslator = Library::createTranslator(); if (libTranslator) app.installTranslator(libTranslator); // Load the Avogadro translations QTranslator avoTranslator(0); QString avoFilename = "avogadro_" + translationCode + ".qm"; foreach (const QString &translationPath, translationPaths) { // We can't find the normal Qt translations (maybe we're in a "bundle"?) if (tryLoadingQtTranslations) { if (qtTranslator.load(qtFilename, translationPath)) { app.installTranslator(&qtTranslator); tryLoadingQtTranslations = false; // already loaded } } if (avoTranslator.load(avoFilename, translationPath)) { app.installTranslator(&avoTranslator); qDebug() << "Translation successfully loaded."; } } // Check if we just need a version or help message QStringList arguments = app.arguments(); if(arguments.contains("-v") || arguments.contains("--version")) { printVersion(arguments[0]); return 0; } else if(arguments.contains("-h") || arguments.contains("-help") || arguments.contains("--help")) { printHelp(arguments[0]); return 0; } if (!QGLFormat::hasOpenGL()) { // QMessageBox::information(0, QCoreApplication::translate("main.cpp", "Avogadro"), // QCoreApplication::translate("main.cpp", "This system does not support OpenGL.")); QMessageBox::information(0, "Avogadro", "This system does not support OpenGL."); return -1; } qDebug() << /*QCoreApplication::translate("main.cpp", */"System has OpenGL support."/*)*/; // Extra debug messages to check out where some init segfaults are happening qDebug() << /*QCoreApplication::translate("main.cpp", */"About to test OpenGL capabilities."/*)*/; // use multi-sample (anti-aliased) OpenGL if available QGLFormat defFormat = QGLFormat::defaultFormat(); defFormat.setSampleBuffers(true); QGLFormat::setDefaultFormat(defFormat); // Test what capabilities we have //qDebug() << /*QCoreApplication::translate("main.cpp", */"OpenGL capabilities found: "/*)*/; std::cout << "OpenGL capabilities found: " << std::endl; if (defFormat.doubleBuffer()) std::cout << "\t" << "Double Buffering." << std::endl; if (defFormat.directRendering()) std::cout << "\t" << "Direct Rendering." << std::endl; if (defFormat.sampleBuffers()) std::cout << "\t" << "Antialiasing." << std::endl; // Now load any files supplied on the command-line or via launching a file. // Additionally, process and remove any command line arguments. MainWindow *window = new MainWindow(); if (arguments.size() > 1) { QPoint p(100, 100), offset(40,40); QList::const_iterator i = arguments.constBegin(); for (++i; i != arguments.constEnd(); ++i) { if (i->startsWith("--erase-config")) { window->setIgnoreConfig(true); } else { window->openFile(*i); // this costs us a few more function calls // but makes our loading look nicer window->show(); app.processEvents(); } } } window->show(); return app.exec(); } void printVersion(const QString &) { #ifdef WIN32 std::cout << "Avogadro: " << VERSION << std::endl; std::cout << "Qt: \t\t" << qVersion() << std::endl; #else std::wcout << QCoreApplication::translate("main.cpp", "Avogadro: \t%1 (Hash %2)\n" "LibAvogadro: \t%3 (Hash %4)\n" "Qt: \t\t%5\n").arg(VERSION, SCM_REVISION, Library::version(), Library::scmRevision(), qVersion()).toStdWString(); std::wcout << "OpenBabel: \t" << BABEL_VERSION << std::endl; #endif } void printHelp(const QString &appName) { #ifdef WIN32 std::cout << "Usage: avogadro [options] [files]" << std::endl << std::endl; std::cout << "Avogadro - Advanced Molecular Editor (version " << VERSION << ')' << std::endl << std::endl; std::cout << "Options:" << std::endl; std::cout << " -h, --help\t\tShow help options (this)" << std::endl; std::cout << " -v, --version\t\tShow version information" << std::endl; #else std::wcout << QCoreApplication::translate("main.cpp", "Usage: %1 [options] [files]\n\n" "Avogadro - Advanced Molecular Editor (version %2)\n\n" "Options:\n" " -h, --help\t\tShow help options (this)\n" " -v, --version\t\tShow version information\n" ).arg(appName, VERSION).toStdWString(); #endif } avogadro-1.1.1/avogadro/src/enginelistview.h0000644000175000001440000000377012250371054020331 0ustar marcususers/********************************************************************** EngineListView - View for listing engines Copyright (C) 2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef ENGINELISTVIEW_H #define ENGINELISTVIEW_H #include class QAbstractButton; class QStandardItem; namespace Avogadro { class GLWidget; class EngineItemModel; class Engine; /** * @class EngineListView * @brief Widget for listing and editing widgets * * This widget is provided to list the available engines of a * GLWidget and allow them to be modified. Thus allowing * us to select what features are rendered. */ class EngineListView : public QListView { Q_OBJECT public: explicit EngineListView( GLWidget *glWidget, QWidget *parent = 0 ); ~EngineListView(); GLWidget *glWidget() const; Engine *selectedEngine() const; // void setSettingsButton( QAbstractButton *button ); // QAbstractButton *settingsButton() const; void clear(); private: GLWidget *m_glWidget; EngineItemModel *m_model; private Q_SLOTS: void selectEngine( const QModelIndex &index ); // void showEngineSettings(); Q_SIGNALS: void itemChanged( QStandardItem * ); void clicked( Engine * ); }; } #endif avogadro-1.1.1/avogadro/src/engineprimitiveswidget.ui0000644000175000001440000000642512250371054022250 0ustar marcususers EnginePrimitivesWidget 0 0 600 335 QFrame::StyledPanel QFrame::Plain QAbstractItemView::NoSelection true QFrame::NoFrame QFrame::Raised Add Selected Primitives Add Selected Primitives :/icons/edit-add.png:/icons/edit-add.png Remove Selected Primitives Remove Selected Primitives :/icons/edit-remove.png:/icons/edit-remove.png Add All Primitives Add All Primitives :/icons/edit-undo.png:/icons/edit-undo.png Display Only Selected Primitives Assign to Selection :/icons/selecttable.png:/icons/selecttable.png Avogadro::PrimitiveTreeView QTreeView
primitivetreeview.h
avogadro-1.1.1/avogadro/src/savedialog.h0000644000175000001440000000662712250371054017417 0ustar marcususers/********************************************************************** SaveDialog - an improved file-save dialog Copyright (C) 2008 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef SAVEDIALOG_H #define SAVEDIALOG_H #include namespace Avogadro { class MainWindow; /** \class SaveDialog * * A generic save-dialog. Compared to the standard save-dialog provided by QFileDialog, * this class's main benefit is that it automatically sets the default filename suffix * based on the currently selected filter. For that, it was necessary to subclass * QFileDialog, because we want the default suffix to be updated as soon as the user * selects a different filter inside the dialog, for instance so that the confirmation * "do you really want to overwrite filename.xyz?" shows the correct completed filename. * * If a filter specifies more than one suffix, the first one is taken. */ class SaveDialog : public QFileDialog { Q_OBJECT public slots: void updateDefaultSuffix(); public: /** \param widget the parent window * \param windowTitle the title of the window * \param defaultDirectory the directory the dialog defaults to, if non-empty. * \param defaultFileName the filename the dialog preselects, if non-empty. * \param filters the list of filters. For an explanation look at QFileDialog documentation. * \param defaultSuffix the suffix to use when a filter doesn't specify any suffix * (such as "All Files (*.*)"). */ SaveDialog(MainWindow *parent, const QString& windowTitle, const QString& defaultDirectory, const QString& defaultFileName, const QStringList& filters, const QString& defaultSuffix); virtual ~SaveDialog() {} /** For documentation on parameters, see the constructor's documentation: SaveDialog(). * * \param selectedFilter the selected filter chosen by the user (e.g. for saving across sessions) * \returns the selected filename, or an empty string if the saving was canceled or * otherwise failed. */ static const QString run(MainWindow *parent, const QString& windowTitle, const QString& defaultDirectory, const QString& defaultFileName, const QStringList& filters, const QString &defaultSuffix, QString &selectedFilter); private: const QString m_defaultSuffix; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/engineitemmodel.h0000644000175000001440000000437512250371054020444 0ustar marcususers/********************************************************************** EngineItemModel - List Model for Engines Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ENGINEITEMMODEL_H #define ENGINEITEMMODEL_H #include namespace Avogadro { class GLWidget; class Engine; class EngineItemModel : public QAbstractItemModel { Q_OBJECT public: enum Role { EngineRole = Qt::UserRole + 1 }; public: explicit EngineItemModel( GLWidget *widget, QObject *parent = 0 ); QModelIndex parent( const QModelIndex & index ) const; int rowCount( const QModelIndex & parent = QModelIndex() ) const; int columnCount( const QModelIndex & parent = QModelIndex() ) const; QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ); Qt::ItemFlags flags ( const QModelIndex & index ) const; QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const; void clear(); private: GLWidget *m_glwidget; private Q_SLOTS: void addEngine(Engine *engine); void removeEngine(Engine *engine); void engineChanged(); }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/projecttreeeditor.ui0000644000175000001440000001661612250371054021223 0ustar marcususers ProjectTreeEditor 0 0 659 426 Tree Items 8 0 0 Type New Item &New Item :/icons/edit-add.png:/icons/edit-add.png New Subitem New &Subitem :/icons/edit-add-child.png:/icons/edit-add-child.png Delete Item &Delete Item :/icons/edit-remove.png:/icons/edit-remove.png Qt::Horizontal 16 10 Move Item Left (before Parent Item) L :/icons/arrow-left.png:/icons/arrow-left.png Move Item Right (as a First Subitem of the Next Sibling Item) R :/icons/arrow-right.png:/icons/arrow-right.png Move Item Up U :/icons/arrow-up.png:/icons/arrow-up.png Move Item Down D :/icons/arrow-down.png:/icons/arrow-down.png Qt::TabFocus Tree Items Item Settings Alias Type true Settings... Qt::Vertical 145 111 treeWidget newItemButton newSubItemButton deleteItemButton moveItemLeftButton moveItemRightButton moveItemUpButton moveItemDownButton avogadro-1.1.1/avogadro/src/addenginedialog.h0000644000175000001440000000377412250371054020377 0ustar marcususers/********************************************************************** AddEngineDialog - Settings Dialog Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ADDENGINEDIALOG_H #define ADDENGINEDIALOG_H #include "ui_addenginedialog.h" class QAbstractButton; namespace Avogadro { class Engine; class PluginFactory; class AddEngineDialog : public QDialog { Q_OBJECT public: AddEngineDialog(QWidget *parent=0); /** * \return a new engine object or 0 */ static Engine * getEngine(QWidget *parent, const QList &engineFactories); //! Add a new Engine type to the list void addType(const QString &type); int typeIndex(); //! \return the name of the engine (e.g., picked by the user) QString nameText(); //! \return the description of the engine (picked by the user) QString descriptionText(); public Q_SLOTS: //! If the user picks a new type, change the default name void typeChanged(const QString); private: Ui::AddEngineDialog ui; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/pluginlistview.cpp0000644000175000001440000000365612250371054020720 0ustar marcususers/********************************************************************** PluginListView - View for listing plugins Copyright (C) 2007 by Geoffrey R. Hutchison Some portions Copyright (C) 2009 Konstantin L. Tokarev This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "pluginlistview.h" #include "pluginitemmodel.h" #include namespace Avogadro { PluginListView::PluginListView( QWidget *parent ) : QListView(parent) { } PluginListView::~PluginListView() { } void PluginListView::selectPlugin( const QModelIndex &index ) { PluginItemModel *m = (PluginItemModel*) model(); PluginItem *plugin = m->plugin(index); if(plugin) { emit selectionChanged(plugin); } } void PluginListView::currentChanged ( const QModelIndex & current, const QModelIndex & previous ) { QAbstractItemView::currentChanged(current,previous); selectPlugin(current); } PluginItem* PluginListView::selectedPlugin() const { const QModelIndex idx = currentIndex(); if(idx.isValid()) { PluginItemModel *m = (PluginItemModel*) model(); PluginItem *plugin = m->plugin(idx); return plugin; } return 0; } } // end namespace Avogadro #include "pluginlistview.moc" avogadro-1.1.1/avogadro/src/pluginitemmodel.h0000644000175000001440000000421512250371054020466 0ustar marcususers/********************************************************************** PluginItemModel - List Model for Plugins Copyright (C) 2007 Donald Ephraim Curtis Some portions Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PLUGINITEMMODEL_H #define PLUGINITEMMODEL_H #include #include namespace Avogadro { class PluginItemModelPrivate; class PluginItemModel : public QAbstractItemModel { Q_OBJECT public: explicit PluginItemModel( Plugin::Type type, QObject *parent = 0 ); QModelIndex parent( const QModelIndex & ) const { return QModelIndex(); } int rowCount( const QModelIndex & parent = QModelIndex() ) const; int columnCount( const QModelIndex & parent = QModelIndex() ) const; QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; Qt::ItemFlags flags ( const QModelIndex & index ) const; bool setData ( const QModelIndex & index, const QVariant & value, int role ); QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const; PluginItem *plugin ( const QModelIndex & index ) const; bool changed() const; private: PluginItemModelPrivate * const d; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/updatecheck.cpp0000644000175000001440000001155112250371054020104 0ustar marcususers/********************************************************************** UpdateCheck - Check for Avogadro updates Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "updatecheck.h" #include "updatedialog.h" #include #include #include #include #include #include namespace Avogadro { UpdateCheck * UpdateCheck::instance = NULL; UpdateCheck * UpdateCheck::getInstance(QObject* parent) { if (!instance) { instance = new UpdateCheck(parent); return instance; } else return instance; } UpdateCheck::UpdateCheck(QObject* parent) : QObject(parent), m_network(0), m_versionPrompted(0) { } UpdateCheck::~UpdateCheck() { delete m_versionPrompted; } void UpdateCheck::writeSettings(QSettings &settings) const { if (m_versionPrompted) settings.setValue("updateVersionPrompted", *m_versionPrompted); } void UpdateCheck::readSettings(QSettings &settings) { if (!m_versionPrompted) m_versionPrompted = new QString; *m_versionPrompted = settings.value("updateVersionPrompted", Library::version()).toString(); } void UpdateCheck::checkForUpdates() { if (!m_network) { m_network = new QNetworkAccessManager(this); connect(m_network, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); } // Check the URL for the latest release version of Avogadro m_network->get(QNetworkRequest(QUrl("http://avogadro.openmolecules.net/version.txt"))); } void UpdateCheck::replyFinished(QNetworkReply *reply) { // Read in all the data if (!reply->isReadable()) { QMessageBox::warning(qobject_cast(parent()), tr("Network Update Check Failed"), tr("Network timeout or other error.")); reply->deleteLater(); return; } QString version, releaseNotes; bool newVersionAvailable = false; // reply->canReadLine() always returns false, so this seems to best approach QStringList lines = QString(reply->readAll()).split('\n'); for(int i = 0; i < lines.size(); ++i) { if (lines[i] == "[Version]" && lines.size() > ++i) { version = lines[i]; if (versionCompare(version)) newVersionAvailable = true; } if (lines[i] == "[Release Notes]" && lines.size() > ++i) { // Right now just reading in the rest of the file as release notes for (int j = i-1; j >=0; --j) lines.removeAt(j); releaseNotes = lines.join("\n"); } } if (newVersionAvailable) { QPointer info = new UpdateDialog(qobject_cast(parent()), releaseNotes); info->exec(); delete info; } // Now we have warned the user, set this version as the prompted version *m_versionPrompted = version; // We are responsible for deleting the reply object reply->deleteLater(); } bool UpdateCheck::versionCompare(const QString& newVersion) { QStringList newParts = newVersion.split('.'); if (!m_versionPrompted) m_versionPrompted = new QString(Library::version()); QStringList oldParts = m_versionPrompted->split('.'); if (newParts.size() < 3 || oldParts.size() < 3) { qDebug() << "Error size of new or old version strings is too small:" << Library::version() << newVersion; } int parts = newParts.size() < oldParts.size() ? newParts.size() : oldParts.size(); // Now compare each part of the version - return on the first that is bigger for (int i = 0; i < parts; ++i) { if (newParts[i] > oldParts[i]) return true; else if (newParts[i] < oldParts[i]) // Should never happen, good to check though return false; } return false; } } // End namespace Avogadro #include "updatecheck.moc" avogadro-1.1.1/avogadro/src/updatedialog.h0000644000175000001440000000251712250371054017735 0ustar marcususers/********************************************************************** UpdateDialog - Dialog to display available Avogadro updates Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef UPDATEDIALOG_H #define UPDATEDIALOG_H #include namespace Avogadro { class UpdateDialog : public QDialog { Q_OBJECT public: UpdateDialog(QWidget *parent, const QString &updateText); ~UpdateDialog(); }; } #endif // UPDATEDIALOG_H avogadro-1.1.1/avogadro/src/projectdelegates/0000755000175000001440000000000012250371054020441 5ustar marcususersavogadro-1.1.1/avogadro/src/projectdelegates/labeldelegate.cpp0000644000175000001440000000326612250371054023726 0ustar marcususers/********************************************************************** LabelDelegate - Project Tree Items for labels. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "labeldelegate.h" #include #include #include #include using namespace std; namespace Avogadro { LabelDelegate::LabelDelegate(ProjectTreeModel *model) : ProjectTreeModelDelegate(model), m_label(0) { } LabelDelegate::~LabelDelegate() { } void LabelDelegate::initStructure(GLWidget *, ProjectTreeItem *parent) { // add the label m_label = insertExpandableItem(parent); m_label->setData(0, alias()); } void LabelDelegate::writeSettings(QSettings &settings) const { ProjectTreeModelDelegate::writeSettings(settings); } void LabelDelegate::readSettings(QSettings &settings) { ProjectTreeModelDelegate::readSettings(settings); } } // end namespace Avogadro #include "labeldelegate.moc" avogadro-1.1.1/avogadro/src/projectdelegates/atomdelegate.h0000644000175000001440000000354412250371054023253 0ustar marcususers/********************************************************************** AtomDelegate - Project Tree Item for atoms. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef ATOMDELEGATE_H #define ATOMDELEGATE_H #include #include "../projecttreemodeldelegate.h" #include "../projecttreemodel.h" #include namespace Avogadro { class Primitive; class AtomDelegate : public ProjectTreeModelDelegate { Q_OBJECT public: AtomDelegate(ProjectTreeModel *model); ~AtomDelegate(); QString name() const { return QObject::tr("Atoms"); } void initStructure(GLWidget *widget, ProjectTreeItem *parent); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); void fetchMore(ProjectTreeItem *parent); public slots: void primitiveAdded(Primitive*); void primitiveUpdated(Primitive*); void primitiveRemoved(Primitive*); private: void initialize(); ProjectTreeItem *m_label; ProjectTreeModel *m_model; GLWidget *m_widget; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/projectdelegates/residuedelegate.cpp0000644000175000001440000001377712250371054024317 0ustar marcususers/********************************************************************** ResidueDelegate - Project Tree Item for residues. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "residuedelegate.h" #include #include #include #include #include #include #include #include #include using namespace std; namespace Avogadro { ResidueDelegate::ResidueDelegate(ProjectTreeModel *model) : ProjectTreeModelDelegate(model), m_label(0), m_widget(0) { } ResidueDelegate::~ResidueDelegate() { } void ResidueDelegate::initStructure(GLWidget *widget, ProjectTreeItem *parent) { // save the widget m_widget = widget; // add the labels m_label = insertExpandableItem(parent); m_label->setData(0, alias()); } void ResidueDelegate::fetchMore(ProjectTreeItem *) { // the user has expanded our label, we now initialize the bond items // and keep track of the using the signals... Molecule *molecule = m_widget->molecule(); disconnect(molecule, 0, this, 0); // connect some signals to keep track of changes connect(molecule, SIGNAL(primitiveAdded(Primitive*)), this, SLOT(primitiveAdded(Primitive*))); connect(molecule, SIGNAL(primitiveUpdated(Primitive*)), this, SLOT(primitiveUpdated(Primitive*))); connect(molecule, SIGNAL(primitiveRemoved(Primitive*)), this, SLOT(primitiveRemoved(Primitive*))); initialize(); } void ResidueDelegate::initialize() { Molecule *molecule = m_widget->molecule(); // remove any existing rows if (m_label->childCount()) model()->removeRows(m_label, 0, m_label->childCount()); QList residues(molecule->residues()); // add the residues... model()->insertRows(m_label, 0, molecule->numResidues()); for (int i = 0; i < m_label->childCount(); ++i) { ProjectTreeItem *item = m_label->child(i); item->setData(0, residues.at(i)->name()); item->setData(1, QString("%1").arg(i)); // set the primitive PrimitiveList primitives; primitives.append(residues.at(i)); foreach (unsigned long id, residues.at(i)->atoms()) { Atom *atom = molecule->atomById(id); if (atom) primitives.append(atom); } foreach (unsigned long id, residues.at(i)->bonds()) { Bond *bond = molecule->bondById(id); if (bond) primitives.append(bond); } item->setPrimitives(primitives); } } void ResidueDelegate::primitiveAdded(Primitive *primitive) { if (primitive->type() != Primitive::ResidueType) return; Molecule *molecule = m_widget->molecule(); Residue *residue = static_cast(primitive); // add the new primitive to the end model()->insertRows(m_label, m_label->childCount(), 1); ProjectTreeItem *item = m_label->child(m_label->childCount() - 1); item->setData(0, residue->name()); item->setData(1, QString("%1").arg(primitive->index())); // set the primitive PrimitiveList primitives; primitives.append(residue); foreach (unsigned long id, residue->atoms()) { Atom *atom = molecule->atomById(id); if (atom) primitives.append(atom); } foreach (unsigned long id, residue->bonds()) { Bond *bond = molecule->bondById(id); if (bond) primitives.append(bond); } item->setPrimitives(primitives); } void ResidueDelegate::primitiveUpdated(Primitive *primitive) { if (primitive->type() == Primitive::MoleculeType) { initialize(); return; } if (primitive->type() != Primitive::ResidueType) return; Molecule *molecule = m_widget->molecule(); Residue *residue = static_cast(primitive); ProjectTreeItem *item = m_label->child(primitive->index()); item->setData(0, residue->name()); item->setData(1, QString("%1").arg(primitive->index())); // set the primitive PrimitiveList primitives; primitives.append(residue); foreach (unsigned long id, residue->atoms()) { Atom *atom = molecule->atomById(id); if (atom) primitives.append(atom); } foreach (unsigned long id, residue->bonds()) { Bond *bond = molecule->bondById(id); if (bond) primitives.append(bond); } item->setPrimitives(primitives); model()->emitDataChanged(m_label, primitive->index()); } void ResidueDelegate::primitiveRemoved(Primitive *primitive) { if (primitive->type() != Primitive::ResidueType) return; // remove the row model()->removeRows(m_label, primitive->index(), 1); // loop over residues below to fix their index if needed if ((primitive->index() + 1) < (unsigned long) m_label->childCount()) { for (int i = primitive->index(); i < m_label->childCount(); ++i) { ProjectTreeItem *item = m_label->child(i); item->setData(1, QString("%1").arg(i)); } } } void ResidueDelegate::writeSettings(QSettings &settings) const { ProjectTreeModelDelegate::writeSettings(settings); } void ResidueDelegate::readSettings(QSettings &settings) { ProjectTreeModelDelegate::readSettings(settings); } } // end namespace Avogadro #include "residuedelegate.moc" avogadro-1.1.1/avogadro/src/projectdelegates/selectiondelegate.h0000644000175000001440000000343412250371054024276 0ustar marcususers/********************************************************************** SelectionDelegate - Project Tree Item for user selections. Copyright (C) 2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef SELECTIONDELEGATE_H #define SELECTIONDELEGATE_H #include #include "../projecttreemodeldelegate.h" #include "../projecttreemodel.h" #include namespace Avogadro { class Primitive; class SelectionDelegate : public ProjectTreeModelDelegate { Q_OBJECT public: SelectionDelegate(ProjectTreeModel *model); ~SelectionDelegate(); QString name() const { return QObject::tr("User Selections"); } void initStructure(GLWidget *widget, ProjectTreeItem *parent); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); void fetchMore(ProjectTreeItem *parent); public slots: void initialize(); private: ProjectTreeItem *m_label; ProjectTreeModel *m_model; GLWidget *m_widget; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/projectdelegates/residuedelegate.h0000644000175000001440000000356612250371054023757 0ustar marcususers/********************************************************************** AtomDelegate - Project Tree Item for atoms. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef RESIDUEDELEGATE_H #define RESIDUEDELEGATE_H #include #include "../projecttreemodeldelegate.h" #include "../projecttreemodel.h" #include namespace Avogadro { class Primitive; class ResidueDelegate : public ProjectTreeModelDelegate { Q_OBJECT public: ResidueDelegate(ProjectTreeModel *model); ~ResidueDelegate(); QString name() const { return QObject::tr("Residues"); } void initStructure(GLWidget *widget, ProjectTreeItem *parent); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); void fetchMore(ProjectTreeItem *parent); public slots: void primitiveAdded(Primitive*); void primitiveUpdated(Primitive*); void primitiveRemoved(Primitive*); private: void initialize(); ProjectTreeItem *m_label; ProjectTreeModel *m_model; GLWidget *m_widget; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/projectdelegates/moleculedelegate.h0000644000175000001440000000310312250371054024107 0ustar marcususers/********************************************************************** MoleculeDelegate - Project Tree Items for molecule (atoms, bonds, ...). Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef MOLECULEDELEGATE_H #define MOLECULEDELEGATE_H #include #include "../projecttreemodeldelegate.h" #include "../projecttreemodel.h" #include namespace Avogadro { class Primitive; class MoleculeDelegate : public ProjectTreeModelDelegate { Q_OBJECT public: MoleculeDelegate(ProjectTreeModel *model); ~MoleculeDelegate(); QString name() const { return QObject::tr("Molecule"); } void initStructure(GLWidget *, ProjectTreeItem *parent); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/projectdelegates/bonddelegate.h0000644000175000001440000000350212250371054023227 0ustar marcususers/********************************************************************** BondDelegate - Project Tree Items for bonds. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef BONDDELEGATE_H #define BONDDELEGATE_H #include #include "../projecttreemodeldelegate.h" #include "../projecttreemodel.h" #include namespace Avogadro { class Primitive; class BondDelegate : public ProjectTreeModelDelegate { Q_OBJECT public: BondDelegate(ProjectTreeModel *model); ~BondDelegate(); QString name() const { return QObject::tr("Bonds"); } void initStructure(GLWidget *, ProjectTreeItem *parent); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); void fetchMore(ProjectTreeItem *parent); public slots: void primitiveAdded(Primitive*); void primitiveUpdated(Primitive*); void primitiveRemoved(Primitive*); private: void initialize(); ProjectTreeItem *m_label; GLWidget *m_widget; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/projectdelegates/moleculedelegate.cpp0000644000175000001440000000474212250371054024454 0ustar marcususers/********************************************************************** MoleculeDelegate - Project Tree Items for molecule (atoms, bonds, ...). Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "moleculedelegate.h" #include "atomdelegate.h" #include "bonddelegate.h" #include "residuedelegate.h" #include #include #include #include #include #include using namespace std; namespace Avogadro { MoleculeDelegate::MoleculeDelegate(ProjectTreeModel *model) : ProjectTreeModelDelegate(model) { } MoleculeDelegate::~MoleculeDelegate() { } void MoleculeDelegate::initStructure(GLWidget *widget, ProjectTreeItem *parent) { // add the "Molecule" label ProjectTreeItem *moleculeLabel = insertExpandableItem(parent); moleculeLabel->setData(0, alias()); // delegate the atoms ProjectTreeModelDelegate *atomDelegate = new AtomDelegate(model()); atomDelegate->initStructure(widget, moleculeLabel); exportDelegate(atomDelegate); // delegate the bonds ProjectTreeModelDelegate *bondDelegate = new BondDelegate(model()); bondDelegate->initStructure(widget, moleculeLabel); exportDelegate(bondDelegate); // delegate the residues ProjectTreeModelDelegate *residueDelegate = new ResidueDelegate(model()); residueDelegate->initStructure(widget, moleculeLabel); exportDelegate(residueDelegate); } void MoleculeDelegate::writeSettings(QSettings &settings) const { ProjectTreeModelDelegate::writeSettings(settings); } void MoleculeDelegate::readSettings(QSettings &settings) { ProjectTreeModelDelegate::readSettings(settings); } } // end namespace Avogadro #include "moleculedelegate.moc" avogadro-1.1.1/avogadro/src/projectdelegates/labeldelegate.h0000644000175000001440000000311412250371054023363 0ustar marcususers/********************************************************************** LabelDelegate - Project Tree Items for labels. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef LABELDELEGATE_H #define LABELDELEGATE_H #include #include "../projecttreemodeldelegate.h" #include "../projecttreemodel.h" #include namespace Avogadro { class Primitive; class LabelDelegate : public ProjectTreeModelDelegate { Q_OBJECT public: LabelDelegate(ProjectTreeModel *model); ~LabelDelegate(); QString name() const { return QObject::tr("Label"); } void initStructure(GLWidget *widget, ProjectTreeItem *parent); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); private: ProjectTreeItem *m_label; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/projectdelegates/atomdelegate.cpp0000644000175000001440000001147212250371054023605 0ustar marcususers/********************************************************************** AtomDelegate - Project Tree Item for atoms. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "atomdelegate.h" #include #include #include #include #include #include #include using namespace std; namespace Avogadro { AtomDelegate::AtomDelegate(ProjectTreeModel *model) : ProjectTreeModelDelegate(model), m_label(0), m_widget(0) { } AtomDelegate::~AtomDelegate() { } void AtomDelegate::initStructure(GLWidget *widget, ProjectTreeItem *parent) { // save the widget m_widget = widget; // add the labels m_label = insertExpandableItem(parent); m_label->setData(0, alias()); } void AtomDelegate::fetchMore(ProjectTreeItem *) { // the user has expanded our label, we now initialize the bond items // and keep track of the using the signals... Molecule *molecule = m_widget->molecule(); disconnect(molecule, 0, this, 0); // connect some signals to keep track of changes connect(molecule, SIGNAL(primitiveAdded(Primitive*)), this, SLOT(primitiveAdded(Primitive*))); connect(molecule, SIGNAL(primitiveUpdated(Primitive*)), this, SLOT(primitiveUpdated(Primitive*))); connect(molecule, SIGNAL(primitiveRemoved(Primitive*)), this, SLOT(primitiveRemoved(Primitive*))); initialize(); } void AtomDelegate::initialize() { Molecule *molecule = m_widget->molecule(); // remove any existing rows if (m_label->childCount()) model()->removeRows(m_label, 0, m_label->childCount()); // add the atoms... model()->insertRows(m_label, 0, molecule->numAtoms()); for (int i = 0; i < m_label->childCount(); ++i) { ProjectTreeItem *item = m_label->child(i); item->setData(0, QString(OpenBabel::etab.GetSymbol(molecule->atom(i)->atomicNumber()))); item->setData(1, QString("%1").arg(i)); // set the primitive PrimitiveList primitives; primitives.append(molecule->atom(i)); item->setPrimitives(primitives); } } void AtomDelegate::primitiveAdded(Primitive *primitive) { if (primitive->type() != Primitive::AtomType) return; Atom *atom = static_cast(primitive); // add the new primitive to the end model()->insertRows(m_label, m_label->childCount(), 1); ProjectTreeItem *item = m_label->child(m_label->childCount() - 1); item->setData(0, QString(OpenBabel::etab.GetSymbol(atom->atomicNumber()))); item->setData(1, QString("%1").arg(primitive->index())); // set the primitive PrimitiveList primitives; primitives.append(primitive); item->setPrimitives(primitives); } void AtomDelegate::primitiveUpdated(Primitive *primitive) { if (primitive->type() == Primitive::MoleculeType) { initialize(); return; } if (primitive->type() != Primitive::AtomType) return; Atom *atom = static_cast(primitive); ProjectTreeItem *item = m_label->child(primitive->index()); item->setData(0, QString(OpenBabel::etab.GetSymbol(atom->atomicNumber()))); item->setData(1, QString("%1").arg(primitive->index())); model()->emitDataChanged(m_label, primitive->index()); } void AtomDelegate::primitiveRemoved(Primitive *primitive) { if (primitive->type() != Primitive::AtomType) return; // remove the row model()->removeRows(m_label, primitive->index(), 1); // loop over atoms below to fix their index if needed if ((primitive->index() + 1) < (unsigned long) m_label->childCount()) { for (int i = primitive->index(); i < m_label->childCount(); ++i) { ProjectTreeItem *item = m_label->child(i); item->setData(1, QString("%1").arg(i)); } } } void AtomDelegate::writeSettings(QSettings &settings) const { ProjectTreeModelDelegate::writeSettings(settings); } void AtomDelegate::readSettings(QSettings &settings) { ProjectTreeModelDelegate::readSettings(settings); } } // end namespace Avogadro #include "atomdelegate.moc" avogadro-1.1.1/avogadro/src/projectdelegates/selectiondelegate.cpp0000644000175000001440000000561112250371054024630 0ustar marcususers/********************************************************************** SelectionDelegate - Project Tree Item for user selections. Copyright (C) 2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "selectiondelegate.h" #include #include #include #include #include #include #include using namespace std; namespace Avogadro { SelectionDelegate::SelectionDelegate(ProjectTreeModel *model) : ProjectTreeModelDelegate(model), m_label(0), m_widget(0) { } SelectionDelegate::~SelectionDelegate() { } void SelectionDelegate::initStructure(GLWidget *widget, ProjectTreeItem *parent) { // save the widget m_widget = widget; // add the labels m_label = insertExpandableItem(parent); m_label->setData(0, alias()); } void SelectionDelegate::fetchMore(ProjectTreeItem *) { // the user has expanded our label, we now initialize the bond items // and keep track of the using the signals... disconnect(m_widget, 0, this, 0); // connect some signals to keep track of changes connect(m_widget, SIGNAL(namedSelectionsChanged()), this, SLOT(initialize())); initialize(); } void SelectionDelegate::initialize() { // remove any existing rows if (m_label->childCount()) model()->removeRows(m_label, 0, m_label->childCount()); QList names = m_widget->namedSelections(); // add the selectionss... model()->insertRows(m_label, 0, names.size()); for (int i = 0; i < m_label->childCount(); ++i) { ProjectTreeItem *item = m_label->child(i); item->setData(0, names.at(i)); item->setData(1, QString("%1").arg(i)); // set the primitive PrimitiveList primitives = m_widget->namedSelectionPrimitives(i); item->setPrimitives(primitives); } } void SelectionDelegate::writeSettings(QSettings &settings) const { ProjectTreeModelDelegate::writeSettings(settings); } void SelectionDelegate::readSettings(QSettings &settings) { ProjectTreeModelDelegate::readSettings(settings); } } // end namespace Avogadro #include "selectiondelegate.moc" avogadro-1.1.1/avogadro/src/projectdelegates/bonddelegate.cpp0000644000175000001440000001065612250371054023572 0ustar marcususers/********************************************************************** BondDelegate - Project Tree Items for bonds. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "bonddelegate.h" #include #include #include #include #include #include using namespace std; namespace Avogadro { BondDelegate::BondDelegate(ProjectTreeModel *model) : ProjectTreeModelDelegate(model), m_label(0), m_widget(0) { } BondDelegate::~BondDelegate() { } void BondDelegate::initStructure(GLWidget *widget, ProjectTreeItem *parent) { // save the widget m_widget = widget; // add the labels m_label = insertExpandableItem(parent); m_label->setData(0, alias()); } void BondDelegate::fetchMore(ProjectTreeItem *parent) { Q_UNUSED(parent); // the user has expanded our label, we now initialize the bond items // and keep track of the using the signals... Molecule *molecule = m_widget->molecule(); disconnect(molecule, 0, this, 0); // connect some signals to keep track of changes connect(molecule, SIGNAL(primitiveAdded(Primitive*)), this, SLOT(primitiveAdded(Primitive*))); connect(molecule, SIGNAL(primitiveUpdated(Primitive*)), this, SLOT(primitiveUpdated(Primitive*))); connect(molecule, SIGNAL(primitiveRemoved(Primitive*)), this, SLOT(primitiveRemoved(Primitive*))); initialize(); } void BondDelegate::initialize() { Molecule *molecule = m_widget->molecule(); // remove any existing rows if (m_label->childCount()) model()->removeRows(m_label, 0, m_label->childCount()); // add the bonds... model()->insertRows(m_label, 0, molecule->numBonds()); for (int i = 0; i < m_label->childCount(); ++i) { ProjectTreeItem *item = m_label->child(i); item->setData(0, tr("bond %1").arg(i)); // set the primitive PrimitiveList primitives; primitives.append(molecule->bond(i)); item->setPrimitives(primitives); } } void BondDelegate::primitiveAdded(Primitive *primitive) { if (primitive->type() != Primitive::BondType) return; // add the new primitive to the end model()->insertRows(m_label, m_label->childCount(), 1); // get the item ProjectTreeItem *item = m_label->child(m_label->childCount() - 1); item->setData(0, tr("bond %1").arg(primitive->index())); // set the primitive PrimitiveList primitives; primitives.append(primitive); item->setPrimitives(primitives); } void BondDelegate::primitiveUpdated(Primitive *primitive) { if (primitive->type() == Primitive::MoleculeType) { initialize(); return; } if (primitive->type() != Primitive::BondType) return; ProjectTreeItem *item = m_label->child(primitive->index()); item->setData(0, tr("bond %1").arg(primitive->index())); } void BondDelegate::primitiveRemoved(Primitive *primitive) { if (primitive->type() != Primitive::BondType) return; // remove the row model()->removeRows(m_label, primitive->index(), 1); // loop over all atoms to fix their index if needed if ((primitive->index() + 1) < (unsigned long) m_label->childCount()) { for (int i = primitive->index(); i < m_label->childCount(); ++i) { ProjectTreeItem *item = m_label->child(i); item->setData(0, tr("bond %1").arg(i)); } } } void BondDelegate::writeSettings(QSettings &settings) const { ProjectTreeModelDelegate::writeSettings(settings); } void BondDelegate::readSettings(QSettings &settings) { ProjectTreeModelDelegate::readSettings(settings); } } // end namespace Avogadro #include "bonddelegate.moc" avogadro-1.1.1/avogadro/src/engineprimitiveswidget.cpp0000644000175000001440000001001512250371054022403 0ustar marcususers/********************************************************************** EnginePrimitivesWidget - View for listing engines Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "engineprimitiveswidget.h" #include "primitivetreeview.h" #include "primitiveitemmodel.h" #include #include #include #include #include #include #include #include #include namespace Avogadro { class EnginePrimitivesWidgetPrivate { public: EnginePrimitivesWidgetPrivate() : glWidget(0), engine(0) {}; GLWidget *glWidget; Engine *engine; QStackedLayout *settingsStacked; PrimitiveTreeView *primitiveTree; QWidget *blankWidget; }; EnginePrimitivesWidget::EnginePrimitivesWidget( GLWidget *glWidget, QWidget *parent ) : QWidget(parent), d(new EnginePrimitivesWidgetPrivate) { ui.setupUi(this); d->glWidget = glWidget; d->blankWidget = new QWidget(); ui.enginePrimitivesTree->header()->hide(); ui.addSelectionButton->setEnabled(false); ui.removeSelectionButton->setEnabled(false); ui.resetButton->setEnabled(false); ui.fromSelectionButton->setEnabled(false); connect(ui.addSelectionButton, SIGNAL(clicked()), this, SLOT(addSelection())); connect(ui.removeSelectionButton, SIGNAL(clicked()), this, SLOT(removeSelection())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(addAll())); connect(ui.fromSelectionButton, SIGNAL(clicked()), this, SLOT(fromSelection())); } EnginePrimitivesWidget::~EnginePrimitivesWidget() { delete d; } void EnginePrimitivesWidget::addSelection() { PrimitiveList selectedPrimitives = d->glWidget->selectedPrimitives(); PrimitiveList list = d->engine->primitives(); foreach(Primitive *p, selectedPrimitives) { if(!list.contains(p)) { d->engine->addPrimitive(p); } } } void EnginePrimitivesWidget::removeSelection() { PrimitiveList selectedPrimitives = d->glWidget->selectedPrimitives(); foreach(Primitive *p, selectedPrimitives) d->engine->removePrimitive(p); } void EnginePrimitivesWidget::addAll() { d->engine->clearPrimitives(); } void EnginePrimitivesWidget::fromSelection() { PrimitiveList pl = d->glWidget->selectedPrimitives(); if(pl.size()) d->engine->setPrimitives(pl); else d->engine->clearPrimitives(); } GLWidget *EnginePrimitivesWidget::glWidget() const { return d->glWidget; } void EnginePrimitivesWidget::setEngine( Engine *engine ) { d->engine = engine; QAbstractItemModel *model = ui.enginePrimitivesTree->model(); if(model) delete model; model = new PrimitiveItemModel(engine, this); ui.enginePrimitivesTree->setModel(model); ui.enginePrimitivesTree->expandAll(); ui.addSelectionButton->setEnabled(true); ui.removeSelectionButton->setEnabled(true); ui.resetButton->setEnabled(true); ui.fromSelectionButton->setEnabled(true); } } // end namespace Avogadro #include "engineprimitiveswidget.moc" avogadro-1.1.1/avogadro/src/detachedview.h0000644000175000001440000000347512250371054017733 0ustar marcususers/********************************************************************** DetachedView - a widget to display a GLWidget detached view Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef DETACHEDVIEW_H #define DETACHEDVIEW_H #include namespace Avogadro { class MainWindow; class GLWidget; /** * @class DetachedView * @brief QWidget derived class to manage a detached GLWidget view. * @author Marcus D. Hanwell * * This class is derived from QWidget and manages a detached GLWidget view. * Right now it just displays a GLWidget and listens for the MainWindow parent * getting closed. */ class DetachedView : public QWidget { Q_OBJECT public: DetachedView(GLWidget *glWidget, QWidget *parent = 0, Qt::WindowFlags f = 0); ~DetachedView(); public slots: void mainWindowClosed(); private: GLWidget *m_glWidget; }; } // End namespace Avogadro #endif // DETACHEDVIEW_H avogadro-1.1.1/avogadro/src/flattabwidget.cpp0000644000175000001440000003701412250371054020447 0ustar marcususers/********************************************************************** FlatTabBar - Flat Tab Bar Design Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "flattabwidget.h" #include #include #include #include #include #include #include #include #include #include #include namespace Avogadro { FlatTabWidget::FlatTabWidget(QWidget *parent) : QWidget(parent), m_stack(new QStackedWidget(this)), m_handle(new FlatHandle(this)), m_tabBar(new FlatTabBar(this)) { currentIndex = 0; m_tabBar->setShape(QTabBar::RoundedSouth); m_stack->hide(); connect(m_tabBar, SIGNAL(tabPressed(int)), this, SLOT(tabPressEvent(int))); connect(m_tabBar, SIGNAL(currentChanged(int)), m_stack, SLOT(setCurrentIndex(int))); } int FlatTabWidget::addTab(QWidget *widget, const QString& title) { m_tabBar->addTab(title); return m_stack->addWidget(widget); } QSize FlatTabWidget::sizeHint () const { QSize sizeHint; int &heightHint = sizeHint.rheight(); int &widthHint = sizeHint.rwidth(); QSize hSizeHint = m_handle->sizeHint(); QSize tbSizeHint = m_tabBar->sizeHint(); QSize stackSizeHint = m_stack->sizeHint(); heightHint = tbSizeHint.height() + hSizeHint.height(); widthHint = tbSizeHint.width() + hSizeHint.width(); if(!m_stack->isHidden()) { heightHint += stackSizeHint.height(); widthHint += stackSizeHint.width(); } return sizeHint; } QSize FlatTabWidget::minimumSize() const { QSize minimumSize; QSize h = m_handle->sizeHint(); QSize s = m_stack->minimumSize(); QSize t = m_tabBar->minimumSize(); minimumSize.setWidth(qMax(t.width(), s.width())); if(!m_stack->isHidden()) { minimumSize.setHeight(h.height() + t.height() + s.height()); } else { minimumSize.setHeight(h.height() + t.height()); } return minimumSize; } QSize FlatTabWidget::minimumSizeHint() const { QSize minimumSizeHint; QSize s = m_stack->minimumSizeHint(); QSize t = m_tabBar->minimumSizeHint(); minimumSizeHint.setWidth(qMax(t.width(), s.width())); if(!m_stack->isHidden()) { minimumSizeHint.setHeight(t.height() + s.height()); } else { minimumSizeHint.setHeight(t.height()); } return minimumSizeHint; } QSize FlatTabWidget::maximumSize() const { QSize maximumSize; QSize s = m_stack->maximumSize(); QSize t = m_tabBar->sizeHint(); maximumSize.setWidth(qMax(t.width(), s.width())); if(!m_stack->isHidden()) { maximumSize.setHeight(t.height() + s.height()); } else { maximumSize.setHeight(t.height()); } return maximumSize; } void FlatTabWidget::resizeEvent(QResizeEvent *event) { QSize s = event->size(); int handleHeight = m_handle->sizeHint().height(); int tabHeight = m_tabBar->sizeHint().height(); int stackHeight = 0; if(!m_stack->isHidden()) { stackHeight = s.height() - tabHeight - handleHeight; } int width = s.width(); QRect rh(0,0, width, handleHeight); m_handle->setGeometry(rh); QRect rs(0,handleHeight, s.width(), stackHeight); m_stack->setGeometry(rs); QRect rt(0,handleHeight + stackHeight, width, tabHeight); m_tabBar->setGeometry(rt); } void FlatTabWidget::tabPressEvent(int index) { if(index == currentIndex) { m_stack->setHidden(!m_stack->isHidden()); emit tabToggled(index); updateGeometry(); } else { if(m_stack->isHidden()) { m_stack->show(); emit tabToggled(index); updateGeometry(); } currentIndex = index; } } FlatTabBar::FlatTabBar(QWidget *parent) : QTabBar(parent) { } void FlatTabBar::mousePressEvent(QMouseEvent *event) { QTabBar::mousePressEvent(event); emit tabPressed(currentIndex()); } FlatHandle::FlatHandle(QWidget *parent) : QWidget(parent), hover(false) { setAttribute(Qt::WA_Hover, true); setCursor(Qt::SplitVCursor); } QSize FlatHandle::sizeHint() const { QStyleOption opt(0); int hw = parentWidget()->style()->pixelMetric(QStyle::PM_SplitterWidth, 0, parentWidget()); opt.init(parentWidget()); opt.state = QStyle::State_None; return parentWidget()->style()->sizeFromContents(QStyle::CT_Splitter, &opt, QSize(hw, hw), parentWidget()); // .expandedTo(QApplication::globalStrut()); } bool FlatHandle::event(QEvent *event) { switch(event->type()) { case QEvent::HoverEnter: hover = true; update(); break; case QEvent::HoverLeave: hover = false; update(); break; default: break; } return QWidget::event(event); } void FlatHandle::mouseMoveEvent(QMouseEvent *) { // if (!(e->buttons() & Qt::LeftButton)) // return; // int pos = d->pick(parentWidget()->mapFromGlobal(e->globalPos())) // - d->mouseOffset; // moveSplitter(pos); } void FlatHandle::mousePressEvent(QMouseEvent *) { // Q_D(QSplitterHandle); // if (e->button() == Qt::LeftButton) // d->mouseOffset = d->pick(e->pos()); } /*! \reimp */ void FlatHandle::mouseReleaseEvent(QMouseEvent *) { // Q_D(QSplitterHandle); // if (!opaqueResize() && e->button() == Qt::LeftButton) { // int pos = d->pick(parentWidget()->mapFromGlobal(e->globalPos())) // - d->mouseOffset; // d->s->setRubberBand(-1); // moveSplitter(pos); // } } /*! \reimp */ void FlatHandle::paintEvent(QPaintEvent *) { QPainter p(this); QStyleOption opt(0); opt.rect = rect(); opt.palette = palette(); opt.state = 0; // opt.state = QStyle::State_Horizontal; if (hover) opt.state |= QStyle::State_MouseOver; if (isEnabled()) opt.state |= QStyle::State_Enabled; parentWidget()->style()->drawControl(QStyle::CE_Splitter, &opt, &p, parentWidget()); } // void FlatTabWidget::paintEvent(QPaintEvent *) // { // QStylePainter p(this); // QStyleOptionTabWidgetFrame opt; // // opt = getStyleOption(); // // opt.rect = d->panelRect; // // p.drawPrimitive(QStyle::PE_FrameTabWidget, opt); // } // // QStyleOptionTabWidgetFrame FlatTabWidget::getStyleOption() const // { // QStyleOptionTabWidgetFrame option; // option.init(this); // // int exth = style()->pixelMetric(QStyle::PM_TabBarBaseHeight, 0, this); // QSize t(0, stack->frameWidth()); // if (tabs->isVisibleTo(const_cast(this))) // t = tabs->sizeHint(); // // if (rightCornerWidget) // option.rightCornerWidgetSize // = rightCornerWidget->sizeHint().boundedTo(t - QSize(exth, exth)); // else // option.rightCornerWidgetSize = QSize(0, 0); // // if (leftCornerWidget) // option.leftCornerWidgetSize // = leftCornerWidget->sizeHint().boundedTo(t - QSize(exth, exth)); // else // option.leftCornerWidgetSize = QSize(0, 0); // // switch (pos) { // case QTabWidget::North: // option.shape = shape == QTabWidget::Rounded ? QTabBar::RoundedNorth : QTabBar::TriangularNorth; // break; // case QTabWidget::South: // option.shape = shape == QTabWidget::Rounded ? QTabBar::RoundedSouth : QTabBar::TriangularSouth; // break; // case QTabWidget::West: // option.shape = shape == QTabWidget::Rounded ? QTabBar::RoundedWest : QTabBar::TriangularWest; // break; // case QTabWidget::East: // option.shape = shape == QTabWidget::Rounded ? QTabBar::RoundedEast : QTabBar::TriangularEast; // break; // } // option.tabBarSize = t; // // return option; // } // QStyleOptionTabV2 FlatTabBar::getStyleOption(int tab) const // { // QStyleOptionTabV2 opt; // opt.init(this); // opt.state &= ~(QStyle::State_HasFocus | QStyle::State_MouseOver); // opt.rect = tabRect(tab); // bool isCurrent = tab == currentIndex(); // opt.row = 0; // // if (tab == pressedIndex) // // opt.state |= QStyle::State_Sunken; // if (isCurrent) // opt.state |= QStyle::State_Selected; // if (isCurrent && hasFocus()) // opt.state |= QStyle::State_HasFocus; // if (!isTabEnabled(tab)) // opt.state &= ~QStyle::State_Enabled; // if (isActiveWindow()) // opt.state |= QStyle::State_Active; // // if (opt.rect == hoverRect) // // opt.state |= QStyle::State_MouseOver; // opt.shape = shape(); // opt.text = tabText(tab); // // if (tabTextColor(tab).isValid()) // opt.palette.setColor(foregroundRole(), tabTextColor(tab)); // // // opt.icon = tabIcon(tab); // // opt.iconSize = iconSize(); // Will get the default value then. // // int totalTabs = count(); // // if (tab > 0 && tab - 1 == currentIndex()) // opt.selectedPosition = QStyleOptionTab::PreviousIsSelected; // else if (tab < totalTabs - 1 && tab + 1 == currentIndex()) // opt.selectedPosition = QStyleOptionTab::NextIsSelected; // else // opt.selectedPosition = QStyleOptionTab::NotAdjacent; // // if (tab == 0) { // if (totalTabs > 1) // opt.position = QStyleOptionTab::Beginning; // else // opt.position = QStyleOptionTab::OnlyOneTab; // } else if (tab == totalTabs - 1) { // opt.position = QStyleOptionTab::End; // } else { // opt.position = QStyleOptionTab::Middle; // } // if (const QTabWidget *tw = qobject_cast(parentWidget())) { // if (tw->cornerWidget(Qt::TopLeftCorner) || tw->cornerWidget(Qt::BottomLeftCorner)) // opt.cornerWidgets |= QStyleOptionTab::LeftCornerWidget; // if (tw->cornerWidget(Qt::TopRightCorner) || tw->cornerWidget(Qt::BottomRightCorner)) // opt.cornerWidgets |= QStyleOptionTab::RightCornerWidget; // } // int hframe = style()->pixelMetric(QStyle::PM_TabBarTabHSpace, &opt, this); // // opt.text = fontMetrics().elidedText(opt.text, elideMode(), 1 + (verticalTabs(shape()) ? tabRect(tab).height() : tabRect(tab).width()) - hframe, // Qt::TextShowMnemonic); // return opt; // } // // void FlatTabBar::paintEvent(QPaintEvent *event) // { // QStyleOptionTab tabOverlap; // tabOverlap.shape = shape(); // int overlap = style()->pixelMetric(QStyle::PM_TabBarBaseOverlap, &tabOverlap, this); // QWidget *theParent = parentWidget(); // QStyleOptionTabBarBase optTabBase; // optTabBase.init(this); // optTabBase.shape = shape(); // if (theParent && overlap > 0) { // QRect rect; // switch (tabOverlap.shape) { // case QTabBar::RoundedNorth: // case QTabBar::TriangularNorth: // rect.setRect(0, height()-overlap, width(), overlap); // break; // case QTabBar::RoundedSouth: // case QTabBar::TriangularSouth: // rect.setRect(0, 0, width(), overlap); // break; // case QTabBar::RoundedEast: // case QTabBar::TriangularEast: // rect.setRect(0, 0, overlap, height()); // break; // case QTabBar::RoundedWest: // case QTabBar::TriangularWest: // rect.setRect(width()-overlap, 0, overlap, height()); // break; // } // optTabBase.rect = rect; // } // QStylePainter p(this); // QPainter pt(this); // int selected = -1; // int cut = -1; // bool rtl = optTabBase.direction == Qt::RightToLeft; // bool verticalTabs = (shape() == QTabBar::RoundedWest || shape() == QTabBar::RoundedEast // || shape() == QTabBar::TriangularWest // || shape() == QTabBar::TriangularEast); // QStyleOptionTab cutTab; // QStyleOptionTab selectedTab; // for (int i = 0; i < count(); ++i) { // QStyleOptionTabV2 tab = getStyleOption(i); // if (!(tab.state & QStyle::State_Enabled)) { // tab.palette.setCurrentColorGroup(QPalette::Disabled); // } // // If this tab is partially obscured, make a note of it so that we can pass the information // // along when we draw the tear. // if ((!verticalTabs && (!rtl && tab.rect.left() < 0) || (rtl && tab.rect.right() > width())) // || (verticalTabs && tab.rect.top() < 0)) { // cut = i; // cutTab = tab; // } // // Don't bother drawing a tab if the entire tab is outside of the visible tab bar. // if ((!verticalTabs && (tab.rect.right() < 0 || tab.rect.left() > width())) // || (verticalTabs && (tab.rect.bottom() < 0 || tab.rect.top() > height()))) // continue; // // optTabBase.tabBarRect |= tab.rect; // if (i == currentIndex()) { // selected = i; // selectedTab = tab; // optTabBase.selectedTabRect = tab.rect; // continue; // } // // p.drawControl(QStyle::CE_TabBarTab, tab); // pt.drawRect(tab.rect); // pt.drawText(tab.rect, Qt::AlignCenter | Qt::AlignVCenter, tab.text); // // p.drawControl(QStyle::CE_ToolBoxTab, tab); // // p.drawControl(QStyle::CE_TabBarTabLabel, tab); // // p.drawItemText(tab.rect, 0, tab.palette, true, tr("Test")); // } // // // Draw the selected tab last to get it "on top" // if (selected >= 0) { // QStyleOptionTabV2 tab = getStyleOption(selected); // // p.drawControl(QStyle::CE_TabBarTab, tab); // pt.drawRect(tab.rect); // pt.drawText(tab.rect, Qt::AlignCenter | Qt::AlignVCenter, tab.text); // // // p.drawControl(QStyle::CE_ToolBoxTab, tab); // // p.drawControl(QStyle::CE_TabBarTabLabel, tab); // // p.drawItemText(tab.rect, 0, tab.palette, true, tr("Test")); // } // // if (drawBase()) // // p.drawPrimitive(QStyle::PE_FrameTabBarBase, optTabBase); // // // Only draw the tear indicator if necessary. Most of the time we don't need too. // // if (d->leftB->isVisible() && cut >= 0) { // // cutTab.rect = rect(); // // cutTab.rect = style()->subElementRect(QStyle::SE_TabBarTearIndicator, &cutTab, this); // // p.drawPrimitive(QStyle::PE_IndicatorTabTear, cutTab); // // } // } // } #include "flattabwidget.moc" avogadro-1.1.1/avogadro/src/primitivetreeview.h0000644000175000001440000000516712250371054021062 0ustar marcususers/********************************************************************** PrimitiveTreeView - Specialize QTreeView for PrimitiveItemModels Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #ifndef PRIMITIVETREEVIEW_H #define PRIMITIVETREEVIEW_H namespace Avogadro { class Engine; class Molecule; /** * @class PrimitiveTreeView * @author * @brief * */ class PrimitiveTreeViewPrivate; class PrimitiveTreeView : public QTreeView { Q_OBJECT public: /** * Constructor(s) */ PrimitiveTreeView(QWidget *parent = 0); explicit PrimitiveTreeView(Molecule *molecule, QWidget *parent = 0); explicit PrimitiveTreeView(Engine *engine, QWidget *parent = 0); /** * Deconstructor */ ~PrimitiveTreeView (); private: PrimitiveTreeViewPrivate * const d; /** * Common constructor operations */ void initialize(); private Q_SLOTS: void itemPressed(const QModelIndex & index); }; /** * @class MoleculeItemDelegate * @author Donald Ephraim Curtis * * Special delegate provided to jazz up a TreeView * when looking at PrimitiveItemModel's. */ class PrimitiveItemDelegatePrivate; class PrimitiveItemDelegate : public QItemDelegate { Q_OBJECT public: PrimitiveItemDelegate(QTreeView *view, QWidget *parent); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; QSize sizeHint(const QStyleOptionViewItem &opt, const QModelIndex &index) const; private: PrimitiveItemDelegatePrivate * const d; }; } #endif // __PRIMITIVETREEVIEW_H avogadro-1.1.1/avogadro/src/importdialog.ui0000644000175000001440000000737112250371054020156 0ustar marcususers ImportFileDialog 0 0 363 204 Import Molecule File true Filename: Select... Format: Automatically detect from extension Perceive bonding true Perceive bond orders true Coordinates are in Ångstroms Qt::Horizontal 40 20 Qt::LeftToRight Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Open dialogButtonBox accepted() ImportFileDialog accept() 248 254 157 274 dialogButtonBox rejected() ImportFileDialog reject() 316 260 286 274 avogadro-1.1.1/avogadro/src/settingsdialog.cpp0000644000175000001440000001047612250371054020651 0ustar marcususers/********************************************************************** SettingsDialog - Settings Dialog Copyright (C) 2007-2008 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "settingsdialog.h" #include "pluginsettings.h" #include "projecttreeeditor.h" #include "mainwindow.h" #include #include #include namespace Avogadro { SettingsDialog::SettingsDialog(MainWindow *mainWindow) : QDialog(mainWindow) { m_mainWindow = mainWindow; ui.setupUi(this); loadValues(); connect(ui.dialogButtonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); connect(ui.qualitySlider, SIGNAL(valueChanged(int)), this, SLOT(qualityChanged(int))); connect(ui.fogSlider, SIGNAL(valueChanged(int)), this, SLOT(fogChanged(int))); } void SettingsDialog::insertWidget(int index, QWidget *widget) { ui.stackedWidget->insertWidget(index, widget); } void SettingsDialog::buttonClicked(QAbstractButton *button) { QDialogButtonBox::ButtonRole role = ui.dialogButtonBox->buttonRole(button); if(role == QDialogButtonBox::ApplyRole || role == QDialogButtonBox::AcceptRole) { // general saveValues(); // plugins PluginSettings *plugins = qobject_cast(ui.stackedWidget->widget(1)); if (plugins) plugins->saveValues(); // project tree ProjectTreeEditor *editor = qobject_cast(ui.stackedWidget->widget(2)); if (editor) editor->saveValues(); } else if (role == QDialogButtonBox::RejectRole) { // general loadValues(); // plugins // FIXME // project tree ProjectTreeEditor *editor = qobject_cast(ui.stackedWidget->widget(2)); if (editor) editor->loadValues(); } } void SettingsDialog::saveValues() { m_mainWindow->setPainterQuality(ui.qualitySlider->value()); m_mainWindow->setFogLevel(ui.fogSlider->value()); } void SettingsDialog::loadValues() { ui.qualitySlider->setValue(m_mainWindow->painterQuality()); fogChanged(m_mainWindow->fogLevel()); qualityChanged(m_mainWindow->painterQuality()); } void SettingsDialog::qualityChanged(int value) { switch (value) { case 0: case 1: ui.qualityValueLabel->setText(tr("Low", "Display quality setting")); break; case 2: ui.qualityValueLabel->setText(tr("Medium", "Display quality setting")); break; case 3: case 4: ui.qualityValueLabel->setText(tr("High", "Display quality setting")); break; default: ui.qualityValueLabel->setText(tr("Undefined", "Display quality setting")); } } void SettingsDialog::fogChanged(int value) { switch (value) { case 0: ui.fogValueLabel->setText(tr("None", "Level of fog in the scene")); break; case 1: case 2: case 3: ui.fogValueLabel->setText(tr("Some", "Level of fog in the scene")); break; case 4: case 5: case 6: ui.fogValueLabel->setText(tr("Mid", "Level of fog in the scene")); break; case 7: case 8: case 9: ui.fogValueLabel->setText(tr("Lots", "Level of fog in the scene")); break; default: ui.fogValueLabel->setText(tr("Undefined", "Level of fog in the scene")); } } } // end namespace Avogadro #include "settingsdialog.moc" avogadro-1.1.1/avogadro/src/engineprimitiveswidget.h0000644000175000001440000000411612250371054022055 0ustar marcususers#ifndef ENGINEPRIMITIVESWIDGET_H #define ENGINEPRIMITIVESWIDGET_H /********************************************************************** EnginePrimitivesWidget - View for listing engines Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "ui_engineprimitiveswidget.h" class QAbstractButton; class QStandardItem; namespace Avogadro { class GLWidget; class Engine; /** * @class EnginePrimitivesWidget * @brief Widget for change engine settings and members of engines. * * This widget allows us to modify engine settings and select which objects * are to be rendered by this engine when partially rendering. */ class EnginePrimitivesWidgetPrivate; class EnginePrimitivesWidget : public QWidget { Q_OBJECT public: explicit EnginePrimitivesWidget ( GLWidget *glWidget, QWidget *parent = 0 ); ~EnginePrimitivesWidget(); GLWidget *glWidget() const; public Q_SLOTS: void setEngine ( Engine *engine ); void addSelection(); void removeSelection(); void fromSelection(); void addAll(); private: EnginePrimitivesWidgetPrivate *const d; Ui::EnginePrimitivesWidget ui; }; } #endif // ENGINEPRIMITIVESWIDGET_H avogadro-1.1.1/avogadro/src/primitiveitemmodel.h0000644000175000001440000000473112250371054021203 0ustar marcususers/********************************************************************** PrimitiveItemModel - Model for representing primitives. Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PRIMITIVEITEMMODEL_H #define PRIMITIVEITEMMODEL_H #include class QTreeView; namespace Avogadro { class Engine; class Primitive; class Molecule; class PrimitiveItemModelPrivate; class PrimitiveItemModel : public QAbstractItemModel { Q_OBJECT public: enum Role { PrimitiveRole = Qt::UserRole + 1, PrimitiveTypeRole }; public: explicit PrimitiveItemModel( Engine *engine, QObject *parent = 0 ); explicit PrimitiveItemModel( Molecule *molecule, QObject *parent = 0 ); ~PrimitiveItemModel(); QModelIndex parent( const QModelIndex & index ) const; int rowCount( const QModelIndex & parent = QModelIndex() ) const; int columnCount( const QModelIndex & parent = QModelIndex() ) const; QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; Qt::ItemFlags flags ( const QModelIndex & index ) const; QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const; private Q_SLOTS: void engineChanged(); void addPrimitive(Primitive *primitive); void updatePrimitive(Primitive *primitive); void removePrimitive(Primitive *primitive); private: PrimitiveItemModelPrivate * const d; int primitiveIndex(Primitive *primitive); }; } // end namespace Avogadro #endif // __PRIMITIVEITEMMODEL_H avogadro-1.1.1/avogadro/src/config.h.in0000644000175000001440000000266612250371054017152 0ustar marcususers/********************************************************************** config.h - This file is automatically generated by the build script. Copyright (C) 2006 by Geoffrey R. Hutchison Copyright (C) 2006 by Donald E. Curtis Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef AVOCONFIG_H #define AVOCONFIG_H #define INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@" #define INSTALL_LIBDIR "lib@LIB_SUFFIX@" #define INSTALL_PLUGIN_DIR "avogadro@Plugin_Version@" #define SCM_REVISION "@SCM_REVISION@" #define VERSION "@Avogadro_VERSION_FULL@" #endif // AVOCONFIG_H avogadro-1.1.1/avogadro/src/projecttreeitem.cpp0000644000175000001440000000770012250371054021032 0ustar marcususers/********************************************************************** ProjectTreeItem - Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "projecttreeitem.h" #include #include namespace Avogadro { ProjectTreeItem::ProjectTreeItem(const QVector &data, ProjectTreeItem *parent) { m_parentItem = parent; m_itemData = data; m_terminal = true; } ProjectTreeItem::~ProjectTreeItem() { qDeleteAll(m_childItems); } ProjectTreeItem *ProjectTreeItem::child(int number) { return m_childItems.value(number); } int ProjectTreeItem::childCount() const { return m_childItems.count(); } int ProjectTreeItem::childNumber() const { if (m_parentItem) return m_parentItem->m_childItems.indexOf(const_cast(this)); return 0; } int ProjectTreeItem::columnCount() const { return m_itemData.count(); } QVariant ProjectTreeItem::data(int column) const { return m_itemData.value(column); } bool ProjectTreeItem::insertChildren(int position, int count, int columns) { if (position < 0 || position > m_childItems.size()) return false; for (int row = 0; row < count; ++row) { QVector data(columns); ProjectTreeItem *item = new ProjectTreeItem(data, this); m_childItems.insert(position, item); } return true; } bool ProjectTreeItem::insertColumns(int position, int columns) { if (position < 0 || position > m_itemData.size()) return false; for (int column = 0; column < columns; ++column) m_itemData.insert(position, QVariant()); foreach (ProjectTreeItem *child, m_childItems) child->insertColumns(position, columns); return true; } ProjectTreeItem *ProjectTreeItem::parent() { return m_parentItem; } bool ProjectTreeItem::removeChildren(int position, int count) { if (position < 0 || position + count > m_childItems.size()) return false; for (int row = 0; row < count; ++row) { ProjectTreeItem *childItem = m_childItems.takeAt(position); delete childItem; childItem = 0; } return true; } bool ProjectTreeItem::removeColumns(int position, int columns) { if (position < 0 || position + columns > m_itemData.size()) return false; for (int column = 0; column < columns; ++column) m_itemData.remove(position); foreach (ProjectTreeItem *child, m_childItems) child->removeColumns(position, columns); return true; } bool ProjectTreeItem::setData(int column, const QVariant &value) { if (column < 0 || column >= m_itemData.size()) return false; m_itemData[column] = value; return true; } PrimitiveList ProjectTreeItem::primitives() const { return m_primitives; } void ProjectTreeItem::setPrimitives(const PrimitiveList& primitives) { m_primitives = primitives; } bool ProjectTreeItem::isTerminal() const { return m_terminal; } void ProjectTreeItem::setTerminal(bool terminal) { m_terminal = terminal; } } // end namespace Avogadro avogadro-1.1.1/avogadro/src/avogadro.desktop0000644000175000001440000000074512250371054020320 0ustar marcususers[Desktop Entry] Version=1.0 Name=Avogadro Comment=Advanced molecular editor Exec=avogadro %f Icon=avogadro-icon Terminal=false Type=Application Categories=Qt;Science;Chemistry;Physics;Education; StartupNotify=true MimeType=chemical/x-cif;chemical/x-cml;chemical/x-daylight-smiles;chemical/x-gamess-input;chemical/x-gamess-output;chemical/x-gaussian-log;chemical/x-mopac-out;chemical/x-pdb;chemical/x-xyz;chemical/x-gaussian-checkpoint;chemical/x-gaussian-cube;chemical/x-qchem-output; avogadro-1.1.1/avogadro/src/pluginsettings.h0000644000175000001440000000310412250371054020343 0ustar marcususers/********************************************************************** PluginSettings - Settings widget for Plugin Manager Copyright (C) 2008,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef PLUGINSETTINGS_H #define PLUGINSETTINGS_H #include "pluginlistview.h" #include "ui_pluginsettings.h" #include #include namespace Avogadro { class PluginSettingsPrivate; class PluginSettings : public QWidget { Q_OBJECT public: //! Constructor explicit PluginSettings( QWidget *parent = 0, Qt::WindowFlags f = 0 ); //! Desconstructor ~PluginSettings(); public Q_SLOTS: void loadValues(); void saveValues(); void selectPluginType( int index ); void selectPlugin( PluginItem * ); Q_SIGNALS: void reloadPlugins(); private: Ui::PluginSettings ui; }; } #endif avogadro-1.1.1/avogadro/src/importdialog.h0000644000175000001440000000347412250371054017770 0ustar marcususers/********************************************************************** ImportDialog - Import File Dialog Copyright (C) 2008 Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef IMPORTDIALOG_H #define IMPORTDIALOG_H #include "ui_importdialog.h" class QAbstractButton; namespace OpenBabel{ class OBFormat; } namespace Avogadro { class MainWindow; class ImportDialog : public QDialog { Q_OBJECT public: ImportDialog(MainWindow *mainWindow); private Q_SLOTS: void updateFilename(bool); void changedFormat(int); void changedOptions(int); void accepted(); void rejected(); void buttonClicked(QAbstractButton *button); private: Ui::ImportFileDialog ui; MainWindow *m_mainWindow; QString m_filename; int m_currentFormat; // format pointers and descriptions QList m_formatList; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/glgraphicsview.h0000644000175000001440000000364212250371054020311 0ustar marcususers/********************************************************************** GLGraphicsView - a custom GL Graphics View - not finished yet... Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef GLGRAPHICSVIEW_H #define GLGRAPHICSVIEW_H #include namespace Avogadro { class GLWidget; class GLGraphicsView : public QGraphicsView { Q_OBJECT public: GLGraphicsView(QWidget *parent = 0); explicit GLGraphicsView(GLWidget *widget, QWidget *parent = 0); explicit GLGraphicsView(QGraphicsScene *scene, QWidget *parent = 0); void constructor(); void resizeEvent(QResizeEvent *event); GLWidget * glWidget(); protected: virtual void drawBackground(QPainter *painter, const QRectF &rect); virtual bool event(QEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMouseEvent *event); virtual void wheelEvent(QWheelEvent * event); private: GLWidget *m_glwidget; }; } #endif avogadro-1.1.1/avogadro/src/settingsdialog.ui0000644000175000001440000002247212250371054020503 0ustar marcususers SettingsDialog 0 0 556 414 Settings :/icons/tool.png:/icons/tool.png true 0 General Quality: Set the global rendering quality. 4 1 2 Qt::Horizontal QSlider::TicksBelow 1 50 0 50 0 Medium Qt::AlignCenter Fog: Set the global rendering quality. 9 1 0 Qt::Horizontal QSlider::TicksBelow 1 50 0 50 0 None Qt::AlignCenter Qt::Vertical 20 40 Qt::LeftToRight Qt::Horizontal QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok 0 0 0 350 110 16777215 32 32 Qt::ElideMiddle QListView::LeftToRight true 12 QListView::IconMode true true General :/icons/tool.png:/icons/tool.png Plugins :/icons/preferences-plugin.png:/icons/preferences-plugin.png Project Tree :/icons/view-list-tree.png:/icons/view-list-tree.png dialogButtonBox accepted() SettingsDialog accept() 252 382 157 274 dialogButtonBox rejected() SettingsDialog reject() 320 382 286 274 listWidget currentRowChanged(int) stackedWidget setCurrentIndex(int) 84 13 125 4 avogadro-1.1.1/avogadro/src/projecttreemodel.h0000644000175000001440000001405512250371054020642 0ustar marcususers/********************************************************************** PrimitiveItemModel - Model for representing primitives. Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PROJECTTREEMODEL_H #define PROJECTTREEMODEL_H #include #include "projecttreeitem.h" #include class QTreeView; namespace Avogadro { class GLWidget; class Primitive; class ProjectTreeModelDelegate; class ProjectTreeModelPrivate; class ProjectTreeModel : public QAbstractItemModel { Q_OBJECT public: explicit ProjectTreeModel( GLWidget *widget, QObject *parent = 0 ); ~ProjectTreeModel(); /********************************************************************** * The following functions are used by the QTreeView to get the data. **********************************************************************/ /** * @return The data at position @p index. */ QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const; /** * @return The header data at position @p index. */ QVariant headerData( int section, Qt::Orientation orientation, int role ) const; /** * @return A global model QModelIndex based on a parent, row and column */ QModelIndex index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const; /** * @return A QModelIndex for the parent of @p index. */ QModelIndex parent( const QModelIndex & index ) const; /** * @return The number of rows for @p parent. */ int rowCount( const QModelIndex & parent = QModelIndex() ) const; /** * @return The number of columns in the model. * * This is always the same values as d->rootItem->columnCount(), you * can add more columns by adding more data items to d->rootItem in * the constructor. */ int columnCount( const QModelIndex & parent = QModelIndex() ) const; /** * @return The flags for item with index @p index. */ Qt::ItemFlags flags ( const QModelIndex & index ) const; /********************************************************************** * The following functions are used by the various ProjectItems to * add, remove and update the ProjectTreeItems. **********************************************************************/ /* * Add @p rows rows at position @p position to parent @p parentItem. */ bool insertRows(ProjectTreeItem *parentItem, int position, int rows); /* * Remove @p rows rows at position @p position in parent @p parentItem. */ bool removeRows(ProjectTreeItem *parentItem, int position, int rows); /** * Use this function in the ProjectItems classes to make the associated * QTreeView aware that some data has changed. For example, you can call * this after responding to a primitiveUpdated(...) signal. */ void emitDataChanged(ProjectTreeItem *parentItem, int row); /** * @return The ProjectTreeItem for @p index */ ProjectTreeItem* item(const QModelIndex& index) const; /********************************************************************** * These functions are used to handle dynamic model creation as needed. * In other words, create items when the parent is expaneded. **********************************************************************/ /** * @return true if the item with index @p parent has children. * * QTreeView uses this (and not rowCount()) to determine whether it * should draw a expandable item (with the plus/triangle) */ bool hasChildren(const QModelIndex &parent = QModelIndex()) const; /** * @return true if there is more data available for parent, * otherwise false. * * If a user expands an item, Qt will call: * if (canFetchMore(parent)) fetchMore() * * So we can delay the initialization of the model (and connecting the * signal) until the user actually expands an item.) * * The default Qt implementation always returns false, we return true * for non-terminal items. */ bool canFetchMore(const QModelIndex& parent) const; /** * Initialize more model data, see canFetchMore(). This function does * the actual updating of the model. */ void fetchMore(const QModelIndex& parent); /** * Some delegates may delegate their work to other delegates. However, to keep the * model informed about all the delegates, these delegates will export thier delegates * using ProjectTreeModelDelegate::exportDelegate(...). This function will then call * importDelegate(...). This will also steal the pointer, you don't need to delete them. * * See MoleculeDelegate for example. */ void importDelegate(ProjectTreeModelDelegate *delegate); private Q_SLOTS: void init(); private: ProjectTreeModelPrivate * const d; }; } // end namespace Avogadro #endif // __PRIMITIVEITEMMODEL_H avogadro-1.1.1/avogadro/src/updatecheck.h0000644000175000001440000000462212250371054017552 0ustar marcususers/********************************************************************** UpdateCheck - Check for Avogadro updates - only prompt once for a new version Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef UPDATECHECK_H #define UPDATECHECK_H #include class QNetworkAccessManager; class QNetworkReply; class QString; class QSettings; namespace Avogadro { class UpdateCheck : public QObject { Q_OBJECT public: static UpdateCheck * getInstance(QObject* parent = 0); ~UpdateCheck(); /** * Save settings. */ void writeSettings(QSettings &settings) const; /** * Read settings. */ void readSettings(QSettings &settings); public slots: /** * Check for available application updates. */ void checkForUpdates(); private: UpdateCheck(QObject* parent = 0); // Private constructor - singleton UpdateCheck(UpdateCheck const&); // Private copy constructor UpdateCheck& operator=(UpdateCheck const&); // Private assignment operator static UpdateCheck *instance; QNetworkAccessManager *m_network; QString *m_versionPrompted; /** * Compare the two versions, passed in the form of x.y.z. * @param newVersion The new version to compare to the library version. * @return True if the new version is greater than the library version. */ bool versionCompare(const QString& newVersion); private slots: void replyFinished(QNetworkReply*); }; } // End namespace Avogadro #endif // UPDATECHECK_H avogadro-1.1.1/avogadro/src/engineitemdelegate.cpp0000644000175000001440000000421112250371054021436 0ustar marcususers/********************************************************************** EngineItemDelegate - custom item delegate for engine items Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "engineitemdelegate.h" #include #include #include namespace Avogadro { EngineItemDelegate::EngineItemDelegate(QObject *parent) : QStyledItemDelegate(parent) { } void EngineItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter, option, index); if (index.isValid() && index.column() == 1) { bool hasSettings = (index.data(Qt::ToolTipRole).toString() == tr("Settings")); if (!hasSettings) return; QIcon icon(":/icons/configure.png"); QRect iconRect(option.rect.right() - option.rect.height(), option.rect.top(), option.rect.height(), option.rect.height()); icon.paint(painter, iconRect, Qt::AlignRight | Qt::AlignVCenter, hasSettings ? QIcon::Normal : QIcon::Disabled); } } } // End namespace Avogadro #include "engineitemdelegate.moc" avogadro-1.1.1/avogadro/src/projecttreemodel.cpp0000644000175000001440000002131112250371054021166 0ustar marcususers/********************************************************************** PrimitiveItemModel - Model for representing primitives. Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "projecttreemodel.h" #include "projecttreemodeldelegate.h" #include #include #include #include #include #include #include #include "projectdelegates/labeldelegate.h" #include "projectdelegates/moleculedelegate.h" #include "projectdelegates/atomdelegate.h" #include "projectdelegates/bonddelegate.h" #include "projectdelegates/residuedelegate.h" #include "projectdelegates/selectiondelegate.h" namespace Avogadro { class ProjectTreeModelPrivate { public: ProjectTreeModelPrivate() : glWidget(0), rootItem(0) { } GLWidget *glWidget; ProjectTreeItem *rootItem; QList delegates; }; ProjectTreeModel::ProjectTreeModel(GLWidget *widget, QObject *parent) : QAbstractItemModel(parent), d(new ProjectTreeModelPrivate) { d->glWidget = widget; QVector rootData; rootData << tr("Item"); rootData << tr("Index"); d->rootItem = new ProjectTreeItem(rootData); d->rootItem->setTerminal(false); init(); } ProjectTreeModel::~ProjectTreeModel() { foreach (ProjectTreeModelDelegate *delegate, d->delegates) delete delegate; delete d->rootItem; delete d; } ProjectTreeItem* ProjectTreeModel::item(const QModelIndex& index) const { if (index.isValid()) { ProjectTreeItem *item = static_cast(index.internalPointer()); if (item) return item; } return d->rootItem; } QModelIndex ProjectTreeModel::parent( const QModelIndex & index ) const { if(!index.isValid()) return QModelIndex(); ProjectTreeItem *childItem = item(index); ProjectTreeItem *parentItem = childItem->parent(); if (parentItem == d->rootItem) return QModelIndex(); return createIndex(parentItem->childNumber(), 0, parentItem); } int ProjectTreeModel::rowCount( const QModelIndex & parent ) const { ProjectTreeItem *parentItem = item(parent); return parentItem->childCount(); } int ProjectTreeModel::columnCount( const QModelIndex & ) const { return d->rootItem->columnCount(); } QVariant ProjectTreeModel::data (const QModelIndex & index, int role) const { if (!index.isValid()) return QVariant(); if (role != Qt::DisplayRole) return QVariant(); ProjectTreeItem *projectItem = item(index); if (projectItem) if (index.column() < projectItem->columnCount()) return projectItem->data(index.column()); return QVariant(); } QVariant ProjectTreeModel::headerData( int section, Qt::Orientation orientation, int role ) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) return d->rootItem->data(section); return QVariant(); } Qt::ItemFlags ProjectTreeModel::flags ( const QModelIndex & index ) const { if(!index.isValid()) return 0; return Qt::ItemIsSelectable | Qt::ItemIsEnabled; } QModelIndex ProjectTreeModel::index ( int row, int column, const QModelIndex & parent ) const { if(parent.isValid() && parent.column() != 0) return QModelIndex(); ProjectTreeItem *parentItem = item(parent); ProjectTreeItem *childItem = parentItem->child(row); if (childItem) return createIndex(row, column, childItem); else return QModelIndex(); } void ProjectTreeModel::init() { QList parents; QList indentations; parents << d->rootItem; indentations << 0; QSettings settings; settings.beginGroup("projectTree"); int size = settings.beginReadArray("items"); if (size == 0) { // default (i.e., never started a project tree) // Start with a molecule delegate ProjectTreeModelDelegate *delegate = (ProjectTreeModelDelegate*) new MoleculeDelegate(this); delegate->initStructure(d->glWidget, parents.last()); d->delegates.append(delegate); } else { for (int i = 0; i < size; ++i) { settings.setArrayIndex( i ); int position = settings.value("indent").toInt(); if (position > indentations.last()) { // The last child of the current parent is now the new parent // unless the current parent has no children. if (parents.last()->childCount() > 0) { parents << parents.last()->child(parents.last()->childCount()-1); indentations << position; } } else { while (position < indentations.last() && parents.count() > 0) { parents.pop_back(); indentations.pop_back(); } } ProjectTreeModelDelegate *delegate = 0; if (settings.value("name").toString() == tr("Label")) { delegate = (ProjectTreeModelDelegate*) new LabelDelegate(this); } else if (settings.value("name").toString() == tr("Molecule")) { delegate = (ProjectTreeModelDelegate*) new MoleculeDelegate(this); } else if (settings.value("name").toString() == tr("Bonds")) { delegate = (ProjectTreeModelDelegate*) new BondDelegate(this); } else if (settings.value("name").toString() == tr("Atoms")) { delegate = (ProjectTreeModelDelegate*) new AtomDelegate(this); } else if (settings.value("name").toString() == tr("Residues")) { delegate = (ProjectTreeModelDelegate*) new ResidueDelegate(this); } else if (settings.value("name").toString() == tr("User Selections")) { delegate = (ProjectTreeModelDelegate*) new SelectionDelegate(this); } if (delegate) { delegate->readSettings(settings); delegate->initStructure(d->glWidget, parents.last()); d->delegates.append(delegate); } } } settings.endArray(); settings.endGroup(); } bool ProjectTreeModel::insertRows(ProjectTreeItem *parentItem, int position, int rows) { bool success; assert(position > -1); beginInsertRows(createIndex(parentItem->childNumber(), 0, parentItem), position, position + rows - 1); success = parentItem->insertChildren(position, rows, d->rootItem->columnCount()); endInsertRows(); return success; } bool ProjectTreeModel::removeRows(ProjectTreeItem *parentItem, int position, int rows) { bool success; assert(position > -1); beginRemoveRows(createIndex(parentItem->childNumber(),0,parentItem), position, position + rows - 1); success = parentItem->removeChildren(position, rows); endRemoveRows(); return success; } void ProjectTreeModel::emitDataChanged(ProjectTreeItem *parentItem, int row) { QModelIndex left = createIndex(row, 0, parentItem->child(row)); QModelIndex right = createIndex(row, d->rootItem->columnCount(), parentItem->child(row)); emit dataChanged( left, right ); } bool ProjectTreeModel::hasChildren(const QModelIndex &parent) const { ProjectTreeItem *parentItem = item(parent); return !parentItem->isTerminal(); } bool ProjectTreeModel::canFetchMore(const QModelIndex& parent) const { // if we might have children, more data could possibly be fetched... return hasChildren(parent); } void ProjectTreeModel::fetchMore(const QModelIndex& parent) { if(!parent.isValid()) return; ProjectTreeItem *parentItem = item(parent); if (!parentItem) return; foreach (ProjectTreeModelDelegate *delegate, d->delegates) { if (delegate->hasExpandableItem(parentItem)) { delegate->fetchMore(parentItem); } } } void ProjectTreeModel::importDelegate(ProjectTreeModelDelegate *delegate) { d->delegates.append(delegate); } } // end namespace Avogadro #include "projecttreemodel.moc" avogadro-1.1.1/avogadro/src/windows/0000755000175000001440000000000012250371054016607 5ustar marcususersavogadro-1.1.1/avogadro/src/windows/avogadro.rc0000644000175000001440000000011312250371054020732 0ustar marcususersIDI_ICON1 ICON "..\\icons\\avogadro.ico" avogadro-1.1.1/avogadro/src/mac/0000755000175000001440000000000012250371054015655 5ustar marcususersavogadro-1.1.1/avogadro/src/mac/avogadro.icns0000644000175000001440000104672712250371054020356 0ustar marcususersicnsMis32ڂD73ն٭ث l`4mic`',&'!fD KL/\ZTC!Ub]i04%X2..Q.۸̩ Do´^nOKN(5`g"" #%" il32ݘ䪒 ||cfI=̆l"B " Mp;4 |ƃ[9  X } h[[@bc1(Ze4B́ j !,^3&]' 3?] ^ d|)\zE *4'lG $)3-OW|(DaZ,{gD 9[iL_6Z>#^i>B 2kS2 +t-.z!9g'\}>4uk>"!e==Z&A7UzFmb' 0eefKGRPii)gd"Ga$ =x34nS!-|0"df)2~^=r& `ROK\a-&vI9y:5( o@@oCX8-T5UP KU ><$OP%JR QW$@W PM 2w! aA \= *v.{oL-30 Od3 M| W,'2.* $  #""#   $!"#   "$"## !    #$$  ""# !##              "$   l8mk$[I)t1xd2% )\B1%qV[&ćV d`9jt qvƸP +Y-:ijúajdtSȇ> K`YR@;.! ~ZO ^ T[Jn*/b ; *sȟUi[_ IP,ͩ:Db N8ZQOOLMPOL  !(.6#~ (6 ) #0Q & ] !V l 1) < >  z  h = Ql!J`D"  SH_~ + ? r XW T D *4 V @ "  HoG3  }O19 \   ^  F 'I( rf C$ - X~ dJ O(3 '    wiN\TQ~p\\m~?@8),9 `  a   @   B y  ) z *XY9 ;o J}rutsx>   E   r `W" z ,Z DG _8XQ3fNlX ){$&$qlXY42~:7D3op %OEU -2k+яɎڿlghglV,0/0* *0/0,Vlghhiewիfhd6-0-  -0,Ajgg|eD.!  !.De} N, 0Y&+7 HV' 3cϩY6$ )>aȝs]V,.$ ++3][ԯq\``Z5/001. 10.<`_`[ǨЋDtv#A T|(tuvr׈B&"$#$1^0[|,",/+)*.0'$[L 2/'7Tkxzq]A**3&,h,(4'?xW)/1: ,-1(h:*4 L(1.D*2)Cs߰voqm{"3*:.)H #ʠmqqm[2$"%$$%$#!'3&k ,4 }ϚqN3(##$%$%%$#,O\ (/-*)*12+? a'+J)Q Ҝc?*#%*-.,+),0*!OH!5).E]kuwqf]60&v 00( !ăT,"',.,)*0U((+.2&e *2'L$%1-'7`kN8-))*+"((HK'9:+5o!3(!'1(Q |&10)H*%)1**GzvQ5*(,.-)$"#&&"&3"Z>*7X(+V*+^--8 \'1+24,J)32/(0XnF.(,/,%"+8Qxg.,F-,A#*^b*#;-(|8,2='(14.",32*&8jrI.(-/)#(Bi$%+Pk(%k%12),@$-Cr'+HH('04/ `-41(&@vU1',/(!.T%R)(q=/#J*(a;0!+2'u>4/)R+'/40 < -41((Ij=(+1+"-W(#20t'.;$2.s&05m!3-CL*.=V,&/40T.40()LV/'00$'HH,(`80!\',M=.%^;,/7;U'3./?rY-&/4/-40'*PyD)*1+!4ov"12_(.8(3&t)4 %0-3=E(4)01*%6f\-&041P+,41()Qm;&*1%&M!4&v(4"[!3.b%4"&/1(Vf0+3!L'&43-%0[W,'133gG!62)(Mb4%,32.dvI-%'%0=j:.'N9/$fXJ)->E*00,'5*+HjtU1'3,%14/&,VS)(0!88)2)&I]/&.42( r,#+/-+-%/-=M)/6U*1(Q4/)FZ!'0-)*++*)+1- ?G !04/'+SN(./.1+IZ-&/41$q@ 2.(1AHD7)*1.8d%5 '!5&f+2&G[,#%%*.'%"%B! /40')PC'-2,PX,&/40! #1(4'DzV*--,w&5$w5&r~'4%GӢpeJ;Zk~.40(+Tx:&/+*e]-'/40  7*2,q:+-7r-3#_d$4'}t%4%G).20(,Yk1(0)+'/20 Q r"4+>,/'2&B"D'3*l%4%G$112(.aZ++220) '3&v 1/3*CB(2*k%5%F]-1.&*0(3mH&,1.s#-Jp&3'B'2*k%5%G+41&3o_)).&;z{9&04-1?.(6/(B'2*n&3(9""22*)ZU.2,&Ef,(13&  &/7U+"B'2)|y)1*->#/4.%Aa-210,)VK&,31 h&,Ip($rC'3't-/..8 '31'0ns2'3&+1$3)0jy6&04+"+Tz*$vC&4&j3,1!l913+'RB%1. Pa%*3';]**22 &+Pw)$qUD$5&\;)5i!*40&8[(-1";J //'Q@%/4,D%-Be)$/e!6&LF&6!I13+([w4(4',#8$2'/mh,(22" 3..G-!/h5)?[&4)3S+4/%=H%./ ^"j*4.$@G%.4-~/1&i*01,2,2s)0-*|13**di,(4.:"\52*(]q/(22!)*-2.3M+&^)+/0)p4*4 )30%>@%/4+!*30%9H%/4,P+.-'1)K o'4$'+*4%XC)13+)``)*22#N")14+'Vm-)234%A}1/(Pp(5k$D#6&AT%31&:<%03+0 (31&4D%03/,Xu)2)>R&5&H#f4+/~i$5-'Yb)*31 /04,'Wh*+3+pc'3-)Bg~qO-)5 H!!00&b^'3(1}?%03)o-G &41%89'2%L~50/&0.))*))+1+g+&1)4*0%Jh**31,04,(]V&1)3,-',_1!$(+($$(MR+10-*kH%/3+1" (31&>y/+01,Eסy]EXtW*3(8{0(22\03*+oB'2+H0&2%MX&-3- +4/%N\&0*& 0/)k=&13%G(!32'5z.,2"vo5*5x-*31q.3,)j>(4"SK"5&FZ&.3+  (30%NS%5&91)3%ZA&13#&P\22'7i'2+.(.0)r2)21!4(&w-)$/3+,x/-1 "1,2n)-3- /p++3"= B!1,,  )3.&`;)5qp5)*7-,>L'(,**+,' - =L# +(+,**,)'CK'9/,= gRMIL^* PB NnUMILPd J'8A+/   A9+7d')g{EG  z()S 4,=b22V#3+e  o/0+C@$5(0Kesw|ypdX-XQ'AOalw|xthO3(3)(ǀ Q */,*()/+*))*)(),0, EQ,#$'&&'$%%,#"%'&&'%#'Fӣccd`ulX]v`dd`} 1y$&$qlXY42~:7D3op %OEU -2k+яɎڿlghglV,0/0* *0/0,Vlghhiewիfhd6-0-  -0,Ajgg|eD.!  !.De} N, 0Y&+7 HV' 3cϩY6$ )>aȝs]V,.$ ++3][ԯq\``Z5/001. 10.<`_`[ǨЋDtv#A T|(\]^Yxv" D0[iA0   h $ " : "$""!""$$ 3$"!"!$CsܦaWZUok%!" #/ #”oUZZUzB %!" !$} ȍY03B" $-)Q̏I3-  $!" # q7 €J "$%!#"$ uXp(  #$#&%#""!""!# #" !$K/؄5#$$#"!""#%P%"!$$!"$5I #$$"!"!" !%7$#"$#'$!"#$6gw" $$#!##%$#$" !#" ## $!"#&S#$#!!#$%#  ##" #!" ! $!"$0"$#!"#$$ #" ##"$ #"!$ $#"!#$#  $" !8$" $ B "$  #$"!#$# 2bzL" $ n %" $y$!" $#!"$$!Q$ #""!%O#"!$t#"!$"` $#!#$!  6r&2$!""!*%""#! %" #$## < "$""$$:(#"!$$"!$[$!"!"# !%"!$# T #$""$" )|&$""# ~F #" !D%!"!#" $#!#$  #$!"$ Y^#"!$$!"$v$$"!!"!"#% $#!#$ K. #$!#$.˶$!"$x$""% #$ 4 $#!#$  P2 $#!#$Ka) S $""# S(1!#!#"  | ##!#$ #$!#$ [ "#  #"!#)A!G ##!## "$!#$ q!$!$$!!$*B" $#!$# $#$ #"#"  &s$e$!"%*ΗYK+>T~~ $#!$"  "$#"#$$KP%""$*)  $#"$ Q _%"!"!$'"*%"!%* $""$  %!" !$&'%""$*] $"#$ `#"!%'%!"$* "$!$#1$!"#($!"$ $# $#!$  "$ w($!"$ >$""$  %""$ h#"!$Z($"!% "$!$"  $!## } $"!$^($"!%}l $!"$3H##!$  #"!$Y) ""!$R!##!$ + $""$ D"!$rO $!#-" $!## z"$!$"  #"S$!#" S$""$DV$""$ ~$!"# }$!"$k!$!$"W $!## (#!"!# F$"!%%""$ $#"%< "#"%  "$!$!$!$ P) $!## !$"!!""!"##[ (%!#! $""%$""$ &"$ # - O$"% $!$!  $!$"$"& - | $""%oG$""% P %!#" !$!$  A /3##!$1$!"$#ғb@$<[~9%""$\##!%' $!$!   $!$" ##!%F'%""$aY%""$q ##!%5 .$!#"  $!#!  "#!$3<%!"# $"!%av  $""$ |%!"$ ! ##!$] [$!#" &I R  #!$7 R $!$""#" u !% $!#" / / "#!%$'!#* &%$$%!"$. .#"!% 9a`L $!"$.$"!%@$"!$/$"!$8&$!!%/$!"$5m+ #"!$/$!"$#D]K ##!$/$!"$7K ##!$2$!"$K_K #"!%-[%!"%J@J$""$/o$!"%FJ$"!$V$!"$"AyI%""%~ #"!#")1$!!$8 #!#" z" #!""o$""%*X #""#]%!!$y"$!"$H#" @Y*c#""$ $"!$ 9) %""#1$!""!(#"!$ #""$;p(+$!"" s $""!$w  =t sxJ ق #""!$S:$" $ Nɜw) Fc  BeÚY#" $"#"$  b e $" !!" #  r.#" #!" ##  04   "#" #!#"$##$#  &#$" # J&!"!"$FG"!"!%4%#""!"$ %!"!"#%?#$%!#$#&% XQ  4&4'͗uIIJD`lXW`DJJEi 2y$&$qlXY42~:7D3op %OEU -2k+яɎڿlghglV,0/0* *0/0,Vlghhiewիfhd6-0-  -0,Ajgg|eD.!  !.De} N, 0Y&+7 HV' 3cϩY6$ )>aȝs]V,.$ ++3][ԯq\``Z5/001. 10.<`_`[t8mk@1-..............-~VZ,.Z *Y{f:N(hܓ/|e DpE#ZL:f7btoc;u %B\l}viA7AY0#RDN +*$gk~Of0WQ;"6qe,C?K\ҭfOCFQoaČS$:(rcd%BWU34yR]T 4*p#X'L '306Bj/=+n1Z0s  1i8C2IcmOe)]1 {*! ~Ow!  (H"!c%r;5I Ui <B~@.6p5dO L+ ["bS;CD*++8b ^t5%Hߔ4 M}Y" [.1EUr8mW"%":BPGsdw UjhhhhhhhhhhhhhiYZihhhhhhhhhhhhhiF    !!"#$%&&'(()**++,,,--.------------,,,++*))(('&%%%$#"!   !"$%'(*+-./12356789:;;<=>>???@@@@A@@@@@???>>=<<;:99876543210/.-,+*)'&%$#"    "$&')+-.023579;<>@ACDFHIKLMNPRRSSTTTTTSSQQPONMLKJIHGFDCBA@?=<;987643210.-,+)(&%$"!    !$%')+-.024689;=?ACDFHJLMOQRTVWXZ[\\[[ZYXWVUSRQPNMLKIHGFDCBA?><;:98653210.-,*)(&%$"!    "$%')*,-/124578:;<>?@ACDDFGGHHIIIIIIIIIHHGGFEDDCBA@?>=<;:987643210/.-+*)(&%$#!    !#$%&()*+,-./01123445566677777777766655444321100/.--++*)('&%$#"!    !"""#$#$$%%%%%%%%%$$$$$###""!!    ic08 jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 (<0R礱8Edqu|sX r5ʐ\j]g|TպD:71m*FOj#- Wy/^⶟eDI\}8am]U붘LP^©Fߦe7۩Pkk=NRC/:0v __{N=:]:*d2Wl`#Є7gbvQl[VyD?4aeE+Y5`R v + \/xE1SfLⰴMClukgmP=5}#@&,r %t ja-bHǤ}lSA% *.t2`5nIN4{ZL /.;Gd_y_YCL"ߴʷ-n ou{q?8f?WZʷ]ht4b;_[&??S5#:Z ydO#|/K>B! |6c^5h[>*P_bX9 jlI2KhQ|vM4+K a wOH{L"ZTCyvQ]HћDO:AF7$\[VXf5dBe쇵LJ/rHFWE\<McOPIJ3ɫͭ.Ŋ0GW^Nм4pl–!=Cq mޖ5!6&-5\RFz̉M1 퀲-K4.Ȫ:" snj6Py[܂fh ?j,_ЊOΙ?l1?C)oKUV;.MGRs|a]p.߃0zk;D;r]I$Fﱵ\n@@XC u1jG w~FQ30FS/m99h&{'N~QSFmdk\[ˁL퉎oR%+mCBM,;+8K#bp:B1vb~a]3)vYPϖาYXp%tJHSkTCP]곌f9Lt$_?_c  8yf&ʰأIBNDr])'fF|#&m)/kl|_}h1 txJ\Qib]l(j!~Y(@y됤Q|pVKey@4BY4UN>VQ"OMW{`]ڷ.hF"\a3VH*F x(uV&L0_Gbk/z'wm[PB~p῱61mk}LY0cE%gM7!:6lh4@ڟWFɋ@}!7)#3ԟZ?;%`ye/J~#dDޢ4 &tzG|@wC)/Rtb>k.a|/ea-QrSwpB7n; L'L#,fPAfnh;hRؒ g3,쁄h HyIye= Y"MN1QsuNS^VHNv$9]u dN8 Y% Kc_)#<1xn4DX3IRSbK ͐ !̹0<ɘ%ĬѧpԓpKWØ-l!y t] t7?Tmzü{Lc6e0l/bh;oTh9Y+myWf$N;F@jڤ .ez Z[n?bArg@9crL7ƞ AՉEܩ(N2ɴ JD:jY79g8dW/Z- ̝AWƌIJ7.DuHKTmLyG;xϮ ։].!_kq [ JfXwshhgգEf~'Y#%]žds$s ϩìpYE?zY-FŀWpj8}LkG"=9}+i&{%3,hfRn+Q@\ 2CL!n(I.DK~u-k&uHw{T7,]!$Mxq*MM([,'B-7xDž7Oe=3fb^+ N IҺg]Ff= ~}:t/f{ vpY(gEMEE3V#'Tjr!!beW c| K^%eBE KwrXXRmˮWнis᮳ 'BfwgrB f闚Ȳ]%K5QtAsduE}1YSbnXgMnŖ 2HNTAcq0HCy㵋"?;x--vOUzjn+ARRWˊLEշ~Kr9 BSZV5 P+U.90>f#f]N[Q7 q3n{EoU7 p<xIwIef) uL~k4mIy{ 5]{W ,,\VIt#hEA)4Gd_?;8$?KҪ's9n-#4f? K2;x֍=ɨ t'::V_2~װ$~P{nzK~}ЫZټ 멊+y]Ή#:&a{L1sƭXNT9n&:,C6^}W7~֞v19PEP'v(C*{~6m2–YȬ8 P:]Aed2ݓ?Znz ctg/)e\;F@Qϙ ød$Ǥd kqg-)xD\"V>0F)HiR\Rj]׿ۀ4Y7tY"y& NJn&(jW͍Z&4smPfqK|jױײdv x1yNl; >7.t_7U55rCe{# v)>o k*j|cvٰGAY ~HsvXs+ "酧m;w ѥiFC.c9fc>,`["  _0KX@qd:Ey!w׬ȹo1mPI?+lb0kɔ3ʜ -3ӽn͠b@Zp0 8:8q1.]PXըwXّVJ熜M3(!5*gtxR8 u T; ?T"Ա,:/{t1E|[dWPPCLͦRRESX_9̥2h5*36-~jӤꨁPhz]Z[ 5x\3'?~`SJ+X}>lX'4%Kf[{l7X6VkؖWPC49\SĊS9]3[S=&2QI=Iu[Au_g:R"\U\ϗfagR7BY^>19(n ;z}ۻ`ѝNđݡIF$s=UyTa瑔ւ_LZásoÉ7Uʠo*ȇ˝ )ݹp3ڑm_$kic[ɗdX'@8H(yv_ve}>HCP.Z"@Yd1Pbϋ~RX[ޝ8EZvݛ[6_[FeZdQA$b2-Õ jOg*+CEdZ$sq+nJz9g/OIngZطa /LX썳N]0H7"ZO F2+`e>V]\U CАOYK5c/'ilU~гb\ـxX)Dۡhc*40B"1ageր4 R+iv0@~!JbV~8בÓs3p6wWP* VIHْ! c",k犯 V?klj\uإ\:59[Né/ `?vjCa}Pp+o6}fj پlN7" nr ==9ِ!* ((<(- @O\wԅXOJ2(i0|yStSzBi|GxԎ*f;^ӌ(VFm>/3dЄ~aј&ϸ,>?˘s*Mtk"s/Ӷ8::6^)%S=~#i$4PJ8슺qcsC:3Ϧvj6&/MRu\;2eXY$d˨ )SQ%_yZ?q-e./D_Ug Fkscْ[kj֚ ۹7R=-ŜY?GہiS@kpkix4azؼZpRv́fk/'Vm1Dxk}@^7#\RM|Ϭw\AYܵ HtG(׸ F#Eì Jk8 jɮ^HKUc~v}`JŀtOϰ_vէ3x)%A8>݆ճܯ%;"vrHI`Z٧H>=ʎlCefgTA\_=mVN)s;VX_ `ƅydb,;eA ;cRtQl퀰vt}*@>$c4AlIA)°8‰;l.{eJz[j^5zg?(pFNK:5ps<9IL|Y}d6"cLB,?䡐]yjfՐo>$ZK4i=񂨉7v`RN0uBs,ѿݧ̼(ՖLlf(^Mal4\T$/H&B߼`P&q#~6*nB:><$=- EP)EL8E"v'9(]"h$y0^+ZgA Ԑ? Ҧ&P3+)r;<7c54 ZV!<= FpY=w3A_DZyumUvt>F3wN.c4~!ў11|q(e ^~.⥬)##& (Qg-ҜH!T! jB`ѹ e {^tF0a|PͪQ1/ AV+bfr#`y/wtŖ\ 2GAS[c [i|)JC%" }o7W E"uiRm1 4Olve"ՂfݱQpք$=6<':cӖP~b.֬%{r'A*{mwD:.7&m`+b@i$X}B@ϣ:ϥc!Nf /ŝV C=7ʠA7۵BGcQ9675;@TP`6U_βԔr@0liS%*O/ ZMQ9ttSqОI=$8`@n{MRCCn!CRTc|M@7_P:Oܙ|DRm?ӏis*+ [l-O'=~̧1-tR2t>oT/ 2aOH;KLpoHzJ`qPMbyB%?KqFG| ľ#wU aiqy?BF%o,LUS^Ba&<}rg Kn$iX3>'z QI669?UlF.dJpe^Vp ETJ cEr8C@ld6|Y*s mu~kjڳĩjH>D?]{>P*ׯ:?nf;xkx!&T{.27$6 \u5N.gձAH$eORIbF*@S*Tr˥wHQM@^I]s~ϟķĭ +t*a˭-AUf>-n0|`́xSi( 20qAZv v9떞z:~x"kc=N<7WeozuhfUpLC^#޲Q4L .dA設b°~bN hWe¡f*%[;l<(v%%<+f,n#\==;;v\ܷ 3s&Yؖzye0D>6 0|zLZ#-=ʼѮlldu/"ơ'Rh*`921uOs)./ L jBdA58 8coa)!׽.L+8EfDYhKHo$ Ûd!QLЋ|"&PUO4'mzwmrMıt0KWz&v:?-sY_W] 'lw!(x!CSGvh X80džKY-ժ?VǙy엄(jMGgB@oñ?IID.Rp~Nޡo&L>)]t(?[;rShJ(tY !] ?8Fk2l8;SQvlggr3^!3vڨG n݃~ms~uzHuxi[|Ñfa'axl& so.Ǿ$xnUOywOYLũ/ݵѮ{X#ү~% 3]`Żxݳ IL_}@PG%o/Z܌_ERE7eH3=Ham3?6X %9+_] T ε/MUj H r'Zu}mZ5Uv_XQ8+kZ[|+*ڵ@}B>F43. j Ijau?cp??Z'E%Tx`u/驏)a߫ F V>QlM-%ÜUx>F"waƌagq:dgrHHѱNa1_ {G !RJ8!MAu??z=@-(Ɣ2WzEؚDlk9t߶E#dĜKbM~KZ:RRhU(@|\$N0C*:xfj+,Gq@-W+t>_aړZ@׼١d[9 ڝ׀E4$!zM~lࠛ2Qf}Z0g8\]Xy(N-6ՉX,"ou10a  @ ɽ+d"4fdlS`yy'A,xm5Bt݉:> q@NX4}{!y`gj Gz:tچ'ؼ k|ǍXR2$DVS)ț'ި[}Ǽ =B]-s+,Gc#G)|YO*&U:o|YDD~t[@RDĉ#ݙFjUT p%!bp򮸺l/]V]j: טA51osg l>q@{ "*iٖϳc+Cǁ A<jk%L9V!aToЪ[UB5\R/9nE)g_^0]YQc|ǚ7s#oʨ;ơXhoΣ߀YZ(|y*m ?0Dt*cJ8θ{.ѸC2j F)[¬+{X4&f׍?x8_TLYLh(mtI䬺*Pd7os{|n֋T!pT"{qϥB'6JԎh |C+:jp3Dxt7@Η>͐0_ϩ` #xyԋy7yf_(JoB|y6׋ equ sUǬPТXmJ2 oM] KXꁒVA#8ՎadPB2=e%aAՎcYŤ('v:U6tZu|_JŖǠIu jWIIGZʄc.]KqAS[]^a 鑺]s+6Öpb\2HZ e]v `ވª~Xlz 6@:_Gs-=fImaP;lьl' *P'Xj>_o7S±AaIźvC^*cہDP,2P>.6AIɗ퐜 fZ7,@RwjaN?@Li%*1AI;7 Q }S;w/w}_•OܧiLNx_Hކ:R@#a֏xmq~>o˹Gw vw,A%߿yK}')(r `$[J"bFVJsgyUUF:OMZ⯁AԞ&YKÐ1cO=Οɶ <-c6*q=@XYS SӍAVv< ۸@aO~,[8Ȍs^WcP+LFJÕsU<^a_z9瘩T۷ȾYpz$FlduwW"E^BKȍT+,)uJc[ۨ< pǶvQl13@ֻN*u52+_7u2oaQ>0tHW X$ =\> kVk;,1\ɝ>(oSwioX0y4MoY=S.7,nZHwi:^hFyu>*]Н[%yN!J 7T]BЛP0: ' }tu6))}>D+7+@993|.5Fcܽe,N@7g`aq-.0"[j+FG%I kzS 9Yhc0!0v/ipv!ïZ1_vz`9<Cx6FA&lH PIx ,o iSw,\ Ka]{f9ՌSa#zO) SvKzzePKcILiX:B}Nޥc'W;(E8J﬒o9>J%uw ySО[|F0&XGppHF@1'i& <[gM^>mfc`Hg*?`ERMA-4bSIėE+'^n9D=Nq|!,zpg-ˤ&#DžGFĪWsMSHh8쭌bgMCѻL;OVFd0:f*Ja]8dQ uS+B׶!h]~0U@ZBpHe2z)e(ݽLU>95ږ&$Us:A]u-Qݚ$$I@@&>!c&BOiu64Z6 I} D ;^ &z#-`7Oq-4h!Qc7ƐdN:2j .yY] i>ɊɜՊ*"l=yo%?Xڞ1VDi"VC>E }FLjMLͦe'ыf5vp!!PQV=9 YS ` ^@ޭDxxLӘ0ë52<֒QҐ$yiHp8X#AoYYy: F'Z Phᩭ&ԉ1Z0\n A> $zI< IBS gtdoc%=Í6 _'Jث LMH4m;SvO6SlDZY>ҎNPٺmz*nERbL{ $NAdEƞRqEmޝO!<"zTp 꽋·>^<6JUw;X+fc_t)B|@ٗ} * &F (q,qH4eήeSl.2Ɉ*{ !%MNy-#+Nq@8Ar!aVGg:\vX ("gV◷;cc00YX*CMkbVFUY대/|7:̦!{n-5FՒpҫRwW_,"I8_l+m 2~qfNiEqj}GyiWY+'d[V*}Om\y,N 82@esVrwK~jPG@hatf,60m&Ut%AbN)L` Rxqdt[NC($9-v_ 1JAF dqt511pJ#x1(zµS=9LqEm!&xtgXbħ/ώz$Qp3Jw<3 h[Z/&R}&S+Nz(nxnCf~5 MP]T>$(ڼOEp 67gxĶ1C*ebJ{`4gSw{XA ll['\(}6hA*H_{5Z.9QnPX:@hczԴO ' {U_$oڴccƇSv/+l2_"́,q9&z(RvQsgp Cf~@ ''Z܆U٥3Ixy[>z9(+M'D6ad1׎]NhY{FIfcMgvetp7/H͞B. \#C6.i)~#?:U\^1ǝ ^9H1W ޖfHKg{pT o׶=chC|K|H!7[J~619?;KA䧇~t IK|z-0=UivLϚg+{O|^S[ǻH;JM7k<:R6C}~~z ?׻ϻX`IIǘ_4C!+`?y'P,=PBEhuLo[(? CƱF%q۫5x{GP rC6񑕁ϫ%S$ Aq2mU 4_ggzogr?2^  գt}8cԙ8B`LiM40!Z**\yp MkmmV/%FQ 3g?4ATj(ѰY!?'8[%Gfphn{'џsqQ Vr0?^)M{[9 k5pp|瀱R=?F$=Q-6Pg+5<} yR]^4UX&tH >>|f){Isi0=<`W&=.o;(wR*9{3ya-ռbZaQ;MQX[8No 3p% BjKlR a5Ӑ mjY<Z€'V-s@]Ѩ}$*#yʃ=5߽gJ XqTOspe]Xg;}9x KXQRTC~~޺8}'9TݜOz|Ím ݄dO9vB%I#:/j"t9nj#_)W,<$uԹ]=>HEAwƪScVu͙`f06V)Ĭ>+p {VK6-&U (`D!U u£O|X1k[NGWؒG֖{a[s(q]n@ĊE, =l rN" N0xh%–W}nZwyuNZ`JYXHJ=) PSQ0͡Ce] (L;}Qb9nolU:ih9Mz06ߡw 8h͢!eԶ=7@0gvh'ʿ sӴ_ڵ"vO}j;^gqb*\Wtfab歖^j0~[(.+cP g|NKÙǯnTQzTe]_3erc7HW֣L~ݐfElEJY_xk~On|Ra$b'pfG.h֯'X$* ~'fy#9yPGLE 7&@$ #;԰Fh*-Yxִ,+bQ -{paOV/"}C Vyh RB>H2PX[)K˘F_gdX7|:TpA+Tv{'ཥ2BkR]C F+~c+߳rcGBjf]d 1F8`T ?IxLXɨ!Z5]_4xC;F;%qK gRݰ]{WRtQ$p8Tci.&CcUf&!ˁd82oY F/6QcF&vyDpϗ=1+f6|:Gt =Z3˙MKG|GO82D `&DiJTp|Y^R3Pͦ~}6V@12R&9SbFuTX1,P6N<|Y&&hNA,t+|o\Hu@v=6+z'(M;`uCwWm_NgPH>T˰N@)_(Zwøc5WgnC篾9wGS3LDa,^9F ?qߨqnj+RŹV_"; jCs^b\,o1wV,#/)'d3|:M<VO*d!/Ӟd|g*jgnxRakEND}as|x5P+!H^c@+N_/ľʖQ65Lsk0Td*[YаJxUd Or}W#|ب ľ8]Ls5jM5cz^ɓ~uS?Ueٴ72ٰ?\ Hql[I܌tY`}`2‚!0ث9$.|` vRs>@<4/,ΌfmmS,kq raJk&c-V6gp-؁"vPQYoH⍱=tIݜ_<ځ`pFmQ7K+I<,tx3N p 8ifPKuReľ]{wp$m\"T%U'mJ.y/C% ONPd6z6c#Qr(WD)ܭB:LO]TedIGRsByTς0g6 68!˔X4M*IccݠBz,qN6^jͧ!{p) pPKi~7 lua T=M_KkѺ`m}vtdG)}/P\tJKk2i%XKխJ&pv 6Ǧ'7uw#R* 9)f yQ fB+>O}-JFn4F8 m}d+]JhYI Źv#wzp KK WDcİcBi'juiwז< 'ގDM~\.-**/MЌ \" }fkf3F Zi@,gD4|ť:ΉBYcjx g110c/Lud4K!ܹF{TjxLsҷ'4s|"=[2ɐHҚ/ w\聭æ">̀bHH"_:9uqt.=H1 mٻ1C[bwoI2;ݺ"kiv2;DGNjӆ?Wx=?`0o,DoVMzaٟwXnYXR]]3G*jһ9k\#.ZuQ)en''K *ۢ5SF7Mgg+,OdcF 8<ָ:;mttۣ :mݰE)V@ܻ=^2Rnƒ{=lk\]CtcDIj 'y:MޘeDN:$+ҁm_Z #O[' i!ʺF:#%%HN#HălE#]Ǐw9PJelӪX~8w^ޙx~߷78 βֵI 2ŧXTX`$iԵFDy`-J"bTjLv2)- (Q瘗m?A)ŘVoj`ra@qs%F ,#ba`G{p1MJa3ct_vl @htfzȦFxּvg^ Zޥ$71 vÍY.Y(U" O[먕}>w )z[M'9u>$Yr30R((f*/Jhuw\(~eoDmE+ 5s6X+z~@4]}O o\Iv?kFv-u_7xK< حui`Z0[یB7Zܙ2Fq%]˫QxR՛Ȋ+\p*B@‡Iƿ+}fq9zOkqjKC-+ "no% RR{>Җp<-x4ql ...>ݱ_/K_NaiV:+U`%Ϻ8 6n KiDq5]M8n.AmpMY)~/I;!Kz!|hxJ>jDK5YkLLiCY _Dc r7=.2̼ y2u pugу2^q$ n˅p/a{w{Ȟ,>vd"!чOcѮ4ua y-S*چ`ߺSfYJ7eč}ḥ`Qѫu2,+qD-,.U.!nNMkJX&7%2#;B׵TqTX{d[ :wdY{'k %v>VҩRF5ܝoa@߃Jl-1bg89Q>ipTDŲJ'c?#vCȼ.#K9SB`/CjR]%dɟ#Nn'`M)3uzV+-立u+$6x}_4ang3G?E((4B^ KN+7؟2k.!'LHp(hM2v-<<7KJ%Ekl``__ Is䍩,|KG9<)h'` W(GSoQi>B.JX<]q%^Cbc8\|=ǀtr̮e\/),&FNW@[ڈ14+>O3L a- Qu٩zµ%(.MWa!8Z#Z=(aᘧˋ˻ ϲ8Y`OjXQ> Bc.qՂp$q^rYMJ }SHy(i&}z7 )`#h/'YƔӪ sl*a(P6!d<;(<`-= 3 )Y9ᜑmaV7FgiNsQE&^~Wi{ <:NI\rK.oTrw \{MR\b'Y,C0+dkPuKO<_g^gl)e{u~I0L5btF&Mٵմ-ͫ$*^rL#4?J|_=Pb~*{* Q 0y>ų»fpo{ȈG!NK//^YG ?Jda<.F^#Ϡ #Sw$ Q #kA]ëJvqAxTl_&sڐ*msIyQ;i L sc}q;@ 6auϧ "KC*1S{Ӄ, -:Oj]}WW Lm {,Hf039:0MrdGqy:a = j8C_@9B]{s v6iF>f.d J4@oSmSvFTWZƛw>IJ?q&aY(dCQx,ni/q8vʤ,m~dTޢl8KzB]'g񽖻1Z/#MO{`ilnB\dJ7>79ΥQzP|X J!G!t,r8 [,6UL},P ۹dftz)Jlكf ob&I/A!G> P^X|eBkM$ƚпq\^a0N!oc6UQU}#AߊnM3|\Smf*Sg64-WAZUf޹8ç4y5Z_QsX Ph1<|vbN{ߥpe:}ݽ:fFzy5Q 1yA/wYxYC0E}9pfH @i`J 4DMd-s n ZڛPE/X+pd-0qhnosUw40 Alj0r/:-T'SPG ,RuhHuGؑN½]T0 뛩ջ q:xDʲY&RJiagaĕsK2jQ oIԶKf'N\ε4Kjr6ѣH|3`I^b9jӬ(/1LY ;A`i9b_cc2kl6Ka_}A|kWKw̭fQWeZi8nI(oJcqvg wxX!rZ4 +@V#.j ӔCK{UCI$=\6U=]5bJ-ZV9ڨR&21iϒ7dnc!D}ՁF.8H2Ha!1}WάS%v $3ea<`y&+oz3?hHc" _ ДG1XnI lGI#i`b((Z}K%NM db|#:73 +(oo #/;s՜*x ɻPFĺfg#2ٕVZ2C1} ,G8u? d2~1nѿ<,<}1Byg-W*@:7|a'7L ]vHac\Cm2tf"&Z=y~G;P^,HGDQc:5(<*FNP/r(`u[Xe{(2w̔o[CIx[P+t}IKe/Uo2]x~դK :4윝+/=ݣm$Q UY%˕˃QX}$r3**I='|$E [a!m}qvvҶcж52 R @Q>km0jwOd|C/Q;(<HP|Oxo %‘ b^ m( e`v9)/Gcj'}U{P*w ϻZey=E ̻E^N9BXYkbU,F-S|'5 r삉 !~7]7oet;اd%o쬜N Evg˶VjA5tOqRZ9cS~[ 푁gRE%螒GSB#{ۤ{+VHSbgoiX/)k);:+p1OI@sMGԄnVT.)6@Yr*z!)h8vN>s8j(a'[.eZ݁ҤREbKZg5qӳQ#$}bM*'(nE,0TU:I%- կXZzT 9/$md3|_yU".낱Xw ;~){bX?cXg#RfJk$1*?69)]_lNc}@E!๗s9xΨ?RK5q=_t?^1uFD3I"#tH= Q޽wt9T3ϵuDA(5W,wGF{b&k/"%~$֒C3PsN&E:F;K{%:BȥH~Q9#|#k{uIQؤ'/HJ,CΜIS|z ~v[9gQ -Ug_$hr#)Gfe%f,͗.GO)`l8Lѩ(0һl[rufz6<7Bư%%ifl)VEwȕ^}`y_!} C1vY}w)B"4ỉ{C;fZbUSg}Eاs$r6S=9[iɇ?`J`EBl3Kү=Հ Th۴^$1kE_<:Y~hy:|kV65'FWZ`2 ןaC56$=삀etV^^e3Ѻ75{td'9,qix9y!D܇> X#ѱnV$j bnW" <ڧ=iPh FhW!C47Ԣ*]+}h?LF%x8AxՁ g ZtSU0ȌރYAW;J_s)גOTclvx1N5fgx_tsid@9mzsOMw 5Muuci@I3 rsB:O$P> 6:;ά\Hu`Cuu"=ߛhzB:n۠iAH@n^Jeǻ73ņ`[U)g{F} Z#2mA"Vj;:)apڑy#@' [ko{&TނSfGd6y0C{ _5[%})iU[1熎؅mf3(Vr~Kxq[ĉdya""x܏d ų(sd3d Z66&Lhc&ݰhTɱ0؀9s6$˫ :𠷗M܉i#gjDS].Ⱥ[K,srXpFO+hDjs)7Z?.mwLykllP`u|Q\{"/OJXIDL=NzCy1Mnh'sI D󆫋#P}z9cm2sQg|mBzRpia5v;yq. w"0Y/P &$*J9&)iZZ)ձW/YM93B-r]_}n(55n#( 쿧qC@ǿ{xdP?w+T+q-;, frZ,JgY66*7VەegĕsQP5tHHTnN 1* @pbROV,(NC]LZ Wz{@ pSj]XWEVҔ֕:; @!U*dp)io7*79Nt6 @<\|`+# (YZ)p5S͒evp$LRl6N< Vƭ!oxG)'q&πʲdSƩFr8zIfP8Ͱ\+G  HW|6E;`ނ*,հzoXѷ/n€*}02u,f5QKxgڀOz+2ǭV:@7BjO(~xia/Kfl{Tay=5%i XH6پmΏDw,m%ۋť64Jݠ@N((bI1reZD=%[q(u2[ebF[^= 1^}y;̬"(ל(G^km/DS$U>]\_ l㤮F~U🋹JEmXZX ҳk =5dBe^35-a"nx+:WA[Q^?D FṚjY{A0)EEa'@10f7S!+_ .%u*ZZX pY{RcLˢג%@$E8~1W%~OFLl%CX9ɀæJ<*~&wNmhY}hHvr)*6IQLIͰԴGޥ#U$8̱ &EV1o'5:1B^b;&Yb#T{[mDO@Яu2|SU) cG?R/`Ieݺ-<=s2Nvś"S&9,8qFG)) m4ߕ_{N2o4m((h54o]eAR>sVc2Aeay (=l'M a.jdە&~Dɂxztg[oFqrF{:pU>h|m$O<>Zm/T80_v,`PҍT nQOs֧~i5kA S3_N^թYgS8.&FLKDk!ri dK]YsK"Ay'@,ưVI\NWm'!:㫮y0F^.l%ѐ]&Eǟ έ=6!^V=3A% Jߌ aO+s8gc<^CqśY.L oR2:N- _XMmM|l#w}1þH<~VzGJPJCM[j}:<]QAVwh'$[Lp+T|ըmpnIBV0Jq[(*d韶 CHGn.jJ''\n hGauc_H5lSKT1,[i K@ Oh%[$d][G{⋈#]Vs zgEWiv/ʨ `T_Y6V``M . 7!"sj%a~_]onK<_%` O'mIJGZW?r[M8G]ul`,(2B=\v$Q:-˙̜ճa?{xΰƖGVmٿ?-U4nnBQ7|DRpk۽O$xl/qZh 1 P0x + \D?GXh:24-f"Ŗ褖c-P)W(r!RK`12cf54#3`(=?n$FSW6j^K=? ShQyyBImZdn>,ؘpߗ#|VEAֈ!~%OƟaeFMC.'kzX~YM^6! ،-fX:X+ ׳ZU^) 8G#C%YD ֔&JOK|_hbAʄ~\~C%PP5YC ]sS`~}T`KY+'Tu`Ym<"r"e)t~ BeoUJ|a_W{iKc,x-2K ;[4 fHY\۔˂\vܴ13ɩˮ`偐eAi]P+&!Vj hj 2JaA<¡ Yu +2n]*>b)(щIS%5'ze~?oh+^E"{{~gӓE,KBvPvD00H(L%.b0F8-- 2Dwf3R\;L=&Bߟ^" |$;ۥi %>dSR.+0ge _T6+w-H}mƕH/ztV_$TyuBt} =TA ؞r 򹞐ONVh<[sjSݫ5tF1>ӓ^yzI͖`ū5H/KG D~xj;y$% !ʛزBK`$"h_/3+k"Yk֭@8<,#-k=`ɗ+NjhJ DXt9v8gub3(^% 㯆Bes*twy󱭒1#ܭQ$7͞˞P|n/?Ξˤ.f+BܚkeS`%i*~lcf3)lGZn BHt R}O<c;z0lq%L!:oǜ/P5ק]{.G-ICCt?B((k uZ5P'Ƚd|wW̒]2D8 U8i5 r{6/~ Ya\.֫%9WcwiZ=`rO<,˴J59{FAl}'{^fhvxl870x:^,Sm`9ugn;8jLD#o-кwG(0Tؐ T& 2h\b[_uD>ƈ6mY^ fȜ2[pΊVY,&Ol,SNGtE>o5Jϖ+&x\&>9G1E~.T`*lZh)N&$#D*3fƓ{ٴs:i17NZniȖ'PW\чt_hr(ܺ#GIֺιTm_[)1HbF83F^T}XrۛtC̽h`hWDڟK 3J`;t@?y=ooL~iR.]ddZS7ҊY'%sct嗏[{xY(8D&-e ]sNV[`{ӜyVoۼwչXW7w.?V~Ӕd'M:@"m ƜoKws0^@Qh^!5:SwD \w屝gʷ·hU+t2+nLW'.v"$G/c%4ϖ {.6 )7K[v|?3Q+X Q,RN%y:Pp DmhҤ_qܫoxAQù|@Чt|!fOC"LU5[stYF\OX`dxl]?w7ќVcė{L$򜞳izp`" `(Mߙ,q֚Cu>w$i-frhn#?G3BEw-!z6T ,k[WZfz9%Hrrr"ܴlT hA^P1qs MeD_6rYxT'$"*QI"y7Etbix]IpF ^pedH_WA>}OÁzn'f?I [,:q~(fUW1&%*N6r"ay',x93<,/= S '=Uj 3 etllGuYrm,k}'jʛ-!1ý1ligkjq-(Z)j)7E%WLIaG?vÓ7x;˒`VYm:F󬃱oz>` r{NzOU,(:c)Ì,GYA,>1n-oAHUKN@g`jtԔ'FgA?չAHyJx)Eqbw$>1J3ڔMf̫2j'z[;ֹm*N*}(j1s^5&OY(3 xB87ڡ,Re:v^55MCvKY壈MC^gO܌InPE)ݗv6V 7e&M¦L^4Ӱ$oCk2[.λPr8]K/B)~wg_upWNqY˅&tQ#$iXHɝr,:hJ_-<Ca-w'WwVw6Ty,O ؽF}~og:][v>`\ɘMcFb\d"I:lG/'!:-*Uq<œlS*Vm9q%Xd˟w]2e`zK&кסHA4ʳCxG#[x(v[TXk6r˞JWee~F%ԎxFI0ױ'][`h"[%lNH}07Rӆ_|o9|AJYX@_]⏟ybi{cĬH6ԢFׇG;g sGԜ=:#B>]Y<;D&}ub#E$z;_")8;D}re]Ƌu rΚcr Ԣ{E#ݪ@~Uols))45?nLiB!Bp܈#M[O/q h[h V` ?Qdą.S3)I{GGp .Xkâ9,1f]џ%.d$<;.rGrSkxݣuΓi,EӇpC=S[HXsn9y <6e-4}Mĵ`o&=dFwOR}7wS-D`jF~&}bd$b\B;(|U]ƩөT%5Rl7/p / ÑqQ5 Zl]*i$\4k+Q[B>7#_+.aMʡU{Z@LmdCx!G*'J9Qr\j|Ju4Y3:9B.E Nqp':QFh2~Vk5z2"?5^=m`L!?H?W@~{*w!_omXK= >Y, _Z"܁CE1p !28 bjtYzQ00ͧMמ۳?ᗷ{lY >q<]ͤdj}M0 j̖kAsFhYM$)|X Ck]]M] {{q{(wRS4}5[!R}fϓ#&n <)e2^PF҈Lֳ錢3Dž8K;QhVdB9Zʈ&.TXâhMYa!Ʒo=`+q8O ӝ`лS r8hfoߦai d:]PO]bޢF_ӎW(;%͹#Dk8X]shqLV5>xź&# #D`ZxnΛ qXEHSc:.ykBz+me#oO 4y5Zf͖rC>)i_D3&H1$]4~,о WhaC"h ~J0zp;Hykk30U11 !o# ֪ľđ"v B ,=R ❐@^:!ۢKĸ_?Z!ms䇖'VmvL@FմyiG>7(+BƤ>fZ,Rq([kM$tWBDڧgedv"oJ ˬTb5]L"}bx|K%oW0n%1t{K,#߅RM)+ݞakw1F:-(:ly 'Q5Ua\mĝZ`S#>4YiN`ԙI ',4Õ,&fb'Ŀe:ݤAt$fpz즏rt ?@| fdK*(i%$T!]oBGwl&Wk_r2)3P R.^N z{[EZWdi_zKLHVЊ*v,{՗a#mg]7sS(|1\ RñbOB+R"c?6yHE_3p~5J/:EocP͸["6n^$dҀ` 3[7{xo 2$Ci c L-O*h f_\`sfrɈkj()I 7WJ˅ Lnw( ^>/ŮiN _5iom W(D.D;fNdW4L£7ru'/:7cT6层 2A+$ƈ]:Q*yٍ9BT mnCIǂ]Nu 'K&֘ I9r~_N^LRew [fZ v:"ʇj9Os%eGy;Kl$;Fpy’Xpt?,t^EdpSOhBZsݝq, !Ա8;|HeDmދS׈o_,Dy".8 }dUQ=bÂ{jk}<4Թ֍5imI%*bʲ-l# fyc:=#cH{WyYluDAs"KQ1u B1#!רh/laRbyk)<R].UPl=$i}O(Dȍ .ȋ`#Jr[{8'RM)fAV#i[6E /]J/D1@lYzE,wן$F ?eݩ% }N7׾uBܜYތ^ndAlJI8̜yvGrEڕ7Q|ҕ -eĂ!{W$uٯWq|! x^8"Š8!gT4x:f)uGyOÝWTlaOnPe 0"Ճ޽v:Ef,^)Hmy #~ ]Qy jۋncb^AR{55rdqK^s>Շ=gZZM^d) }v#ai1̃(}QstGw"?L!΅SU?ΥPj|]DG0UJu+\ME&Y ܲþN $-lxĂn2 6 C8a.ьMHP~G/"2aY LXw;v3N$2cqƽA3 1%H Oj\msI&z{WWmeN'lIfqr4 H}6uIjxc'V('}{WZZŔa&JB~7㾧/}o)9܊}'RGW "%  c8~A , ֙IeYCJ$ix?8xe{=_x#i=167o>Xg~i6aָoXז D Yy%;O#3/ӴR'Z v#=vg*-D{yT]J](ΨMJASjҐ+gȂG(Jq` ~:mI >;ʨjKQY^G2o]^y*dlipDS2f<׎M3vg-ISsUBwSM_ ;Xn:VXhzWSq6p۝VݽrwENLЁ 0J6 ND2lvtH3U:pŮXvs$hhϦq,E*6;\[?=WAe[}MeMP80-L5lMQPmVҊZfW)+9qX̶՞asޠ ~(pe;$@ѸOr <@ȔyҚ}\d FUG K0ך4WrU F&I]gH]6=hc,C1oU|\m]okl2Bho}5@i=Y;痣oM}+<i߾KM@_9ҬDt2a94Q? +2 `'}6QC ^tz%Vš,>=_,7 pd6Ȏp<,pQul"+-8?1#D火PmhLlͲn I,螲!HTg*+v9GK:䘲RJ"r*c7kcj+6YI+۱=Zc.`!>+#;IAO~ t ) ^PИ2:̰nBwl8 $@B.󍁬LĸVzRJ'M@J W׃[FCEgQTHԵ5XI-hU"@ }&t0ly l)Htf؝a^HyC7G0 %r4IFQ9PLz4 )rK^_2V)Jp8$l1QL-6DXxQ,\(5J 0̡W%+jKk jL$l<- YwbbS4lpvP3gz$N @+(pp\xWCC%\;1Anr&WIJ>,RڄvꈏR<]_I.d*|.4ױ޻5xm+L ʴ(O05>Jj9r~tc[Zk.|6Ac̤h TD||q&G2B=ׁxҭ.H*K*!R,NlUN$>c#WA s9aO{ &sX,GUH0GnQA"nvӀ]urU}Oԉ3,I(퉑~ѫ4x4~1!&<ӿUM@/2 k5)-a6)IV6Ϋ cfJ`K}1|.:f?r;o~CSԩ뤅HO!8 PF) @*}BVt}ν%{J 6`QFzZ¹y11J5ξmB#EWIB/?(^YgȔ}DyCrQ BjVT{OYzd7]=)eiNNA7^h-L36*dԂ 0bXYbW,Ǝ~7Md-Fw 83xQ:qXp]jxCr*Gqs3^@tiA;7 oZ gi.X!^N%@ Uj폡 -Vւ9yٝ0" fxZw_R+bCyv)XQI Wk9 4~1rPy|Z}a9+&Q9&e8cB@KfkˤE Bjֻl|%QaJTM v /ʅ҇x]'ѭY6"-_lhq$⩩7]U&/.LHJ&W6Nq) l>JH숦6jusO]|{EVYj5 gGZ.RB ǃL!ltfdZpnJ(3zLV_/[L~MlY-mkc+b&p-C q] GfrNrz= !foPbdҷr\H=.B1XZ^U{CÏU1 at?x4NJO˩z(^G 1UW5ĭ@C{o"@Jjë1ȦA9Qj^R輸_DFzX %jl||PJB/Lw%<@zmW;tj]0[Ǔ"'~#n;pAwrf9,2:%Ru_xx~@ֱ K@'Ï:84=Ƙ ,{3T!ԞjiZyV-0RPIck;he.p[jV )M᧭ŒxӽHG3=.w!~ P!1`dU=(+3ɣՙ1flF<HUVCME̢ѷ}ϪnAPqSp[ S2"W5,uL>z['-O!z ER3P"FeW !kEڈ40)rQWxh*euں)ʖ)!%BDΖ$8 ˣ=q:YTfQR2ǫ.{* `I`KV򚝢 yL?1M4F; Jf|uߣ҇~epL@=Sw=fIHD# EʰBD1t$;Ek0:~3uhƒ,Lv*.k֜sZ%;4ٸ]auókp(ZN*ҕwu#$;+,@Z /v[țhq| myY&[2ݗolqU `"4dT`#OVOPQa B?&ֱ@g%lsη΁{MwcMlg3YNc'Fo`[9Rre'ݞ9OWkѽc6*捠k!'7n#>) ko,»fvZ(EN*Kk|a|  !UbD>?]3*@ }F}Ϗߩ7MX\+ߖʵ b.;u0 P>6Gg"h ,AsB6-s@0ojfUo_"$eWbARVft^(2*5G^NegWLxPc<9X'/~vOEӰzN!r>|yeyCZ6_L0Jt󱜋v(g3g \;~Q7# 6Ú@8%fvjMVyE1ٻw댻 ;EE~♢䔽!2N1?lbGTLٳ0P'=PGY J "؞E[@Q>6 uc-3YW\Mewb0KWjhʔ78L}( p{%TkHC@1ܖuqY9nwOi&L/@볬~߻3ŧ+TDMn!5Dk'Hxx#WΪ}q?D`r>FX#up`yܗg"$ B$"q05TId_,u|,_qO恒efxQs&c",n+$} 8 o9A=Ck%|6c]:C&` E2ɲIA*5oyL1njL5.U %m&_{Dx3lŞ]a@_&2/OZ]T.S~Jk^{氳{&EBgʍ)p ٸmOfbM"Vb/w{J44SC'r- ~I_j8REe'ZIތ6$/xf7 [N轓agq8+lw --ų/ӯ,mJ-[bdXh`,7L'gqqF車h&XC zJ#9AT%&[O&2&ux6{ !wrz6'~`ۭ&4]ʺnI4XFYUeV{d'^nA'{}&M{nbMS?=ҊA2#Kk/bcYTGV/ØҜ Z"?ѧ!H+F!cM[ #d@DZsǷpp x 믈Itci]aAm)/ї u)&HS$qҽΨi(5+E{yM$$' קB$`-4O<#y A\=.A'N:w"fIୱ5 m,+UzU.>Wb1SBAdXU=z"?!̲̔=>캹gJ6 di+Qj˴@2Ȑ"i8嵁>O,ZTTűhVۢ78cslIlgт,JF92S/@caJ͏0iP|l*bjfI 6|sE4Y26>r3j7zb.kOrA(2 񁪁t0!Hq U}3+xa^FRr97=7 ‰AB;} zcWҟFpm w+A#CjUWw7@8{xY`3pR o U__Z!魎 ri<ې7a <۴&^2Fs(#'>"'݅c8:mzNߌ~CeUs=>,Ɩ_ER[̀:Y}~#hæ PY Ia/NroTmD'ts 5LjW+S8 7Wyju_GnT `G=l}]]r[#}eoGxT B]Cat\b@y)Ab(ȓqA4Gigw5u!t7Y30zj]<Ib%5)BU~{}ӿiF! Rܒ(t FktȁZ݅uh5ml]K02J*LC?45d E/)My2z>&H "#(0;y˦js\=oGk: h}Os*lPCIWDO}h[0=+,E4YϦeD0Xeg_b^4&dGgfsN5F`+OTu num AD';ݚh.oeF3rjl.a ^sLցLw4Bzq v.42l'?[*Xɻu$T#i>d(H+lp׬<.T.paWB=W QZ Λ/h3;{=${(KW2";/U' !BH%JgHGx2xi $J˒.Q{D6j`ԩuݦ1Sl 13ƩQZnWx꦳kKR{ˬL;GZ\ Q]{E$o@}ؼ82g895H=R xWshI`~hjw+z[j3p%gH\*9rfn ߡ.IIwOE1?7K pUի!O4Rh`)SR(c$!QTl O2ֳw0.rt^e.i}ynӉB8 XY|t(7W$j0E) Sd `VȩL@BB*^HED=e.yhF䯲*Q/PUR {9D%O 6zc{vh綉p `d4G<V|ny^ۄ!̒2 $ukcA Vճ?jR^p5% z=BT.3(/r9j5ܠ_j=fZ wנ>/) '\sl1Eב$rlE& Sdo;Kgy-SO4w #Rc| ^VN!i ̓Ks^Dž-@R j!Hw6_.aa*gxxN\l-ﹳ]RDa Ze^- ɮ춥rctQx_ khEdZeu5Y]!|,Ï7nTD.B%@v*oǜAg>=!+6:^C{WO_oC-zwP@yXvL@;*A6?:VӶɞ2#5$Bv}N“Ӥniou60(k[o4fX~մGXG3,J ։Iv'b!o29%%l}39kT"l=uo_㩆n J͏Yʟ ?P Z/ ndވ)WA++F>X܂ X"9?Dõx`h9TYaJò{5 8 {%>휧 df~bCL5\E[PC>SXYD'QP!|$ADrì[ -4DbϨTKT i DPϷ1I2'ڼjrjc]%9!JJebCFu5$  /ϋ] ay&L0g4wW?LV* /tP Am}x}\cPg*sZ;`8UI&>k0a*5'ùAX :'܇U4ꧺpɝ,7IktQ*/f~ ҔGӰo0I<*6h'. O"9V2bNM +VSF!5'Q{È,U`UTPw_ɠ>]8mQӾ::? =_aj 8SOe)9bJuD=4r3a$+~|6ou4e ZGZSʏ)jBV" ۵K _=~kMu_Pm1^K&36,2${L\"=*c'˾&paܧlM1X]ΑO&w-f1&`71ʅxT1jk\tvCw2zsXI`Rd"AP`U*ƛpCR_00 Ĕ 7Nr, &XRNeSuBfhUh`*OIgMdeF>m% ((J 4M%2G\ԝ6@Nh'f;@aܗ[}A 58t9-P`ލKz݉uZoM-6d7 _CHV $/RwHQaɢ#ad$~kuCV5ak+ B-kh`IAEî~II^"W! qrZhȮa(F8 [lTD8ׄ9n(Jr&6kb?ǘ&;r)73dV (cO6NWd8Wz' w<̼]-_yAcSiF <Q;]0`2&^&}֊j@#9% l~{n2NJ;\,|ȦDa?HWI\2# ;mxmÅ #%I%X%a1`Ii lFwfÏPd2ZvFRoEIf5VcpO dR7evcٻh\e3{Z5]TӞQ7T j"*Rqk;04Vd3`tTo9A˷L@Ԑ<ϙ=Ґg]GȳEF=! Ysr$^ ~W|Qi]]Gz' dO[4m b? #r<›hEm(?vhljٯNuRh)laM,b))$ ˃ V Qa~)M̏ޞTmµhٷe2{UkڄLAZHqa>E#'y(E!epr\;+}s޸u#Djܑ-J:舛7c;:1p;DŽ7U߹/ # S߅*8s8z9D4u]_/2 d>MZ aR`nOzX.<)j/8L"܌LE|%J`%.W&Y[1&qƭB5ٟkPB #o5htoAKf}mqNʄvYs4 aVFw0܏`?Laj;DwgD3[^D짒KK9ok<}7,nfhҦʲLYtUc71]0 YJtx+~4!$Q^`KP3RRd@sȹ3)p.^ʨçE-NXnpwtX؁D':e i)]L˯X?/+Z5hl"TTL#X9Oĝ.`7Fw iw!Maz)aIPU-!:$E1 3szmP&SJb4f׊?Gv|<_ 6`9{n'89ЖfUbcyh7I;,@}+[6'(N<>t4'Ϲ Zš@o?{j&d)CDxWH=/!D@'fyVT*D M@\@a R&)XZ߹$:l aMc4@ v HM(]MRPtnF-}.bYUZ1Dv-KBH!lpQH<;'jŞ XD;H(/4fd^$`\C=zGn};ށpwZ<}ԆRjsHF'@.A_:" jg(sBGvȤ;U 1dKE`x[ϝ9s;p75ћzd}(:}\>*JF]vx,p d*U݁|0HY Z8$Wi80רCs[1ܣHlx7Nin鱠>qDnu2򕖻}yΥv[ʎAsQxQSY6 R=E~-9VPeʒ y1E|׉8.`Q9]+`?Mu[[5 ^vm^*?eO_1:l17,5d^=w8B#8| 2bdRlUS HbTk):|(dTBfK~yF?WQ);a*Z@i]$ịyM?s|^娍4E#c9{bڜAerSR=Eq b\u# 0H6sśRk2znܢA+OH-Y9l?/On7յ_wR%lM o~= 958xL|w^ȶ"-!đBȌ AL_bԯL-^̀塌$[Vypгz.LB 3yϦXIw--Hubqɗ(aN7bytv@m.s w9Fx08/Q,~_ yYdRT2j1[+I*rysK٦ٜ0>vl@.ObCsG)U/gRN^? ۋThwVR}FCç0H4sA DjQt tp6< CtOfP-!3ldi.H )g668C/BB kcXUAá=:jyN,g]&ls޻\y2Vȋ%zHY@$4E \_zT=<׬.u"$\eq$lBULRʮ ڱgJq D=#|+=~oK^Od:Ds'S\ ʽQ0 NAG"Z)ߟ]x=6(^ydT&1[cE"x@h]l4J^8wU+ y>/W+fP^㚍)ɔZQ+FՐ*Zqq=diWNs^A7ލ]ZKX(8(MQ⿿}]Myfb;CՎQuS6J 5fdV[Į:RȮvL'E/T`A.dKK\?e/D$_VYc#q,T`oo(\ [<щ 5NϽ\vkw!Lg0=:{t9Ur[xgAұesUSl7cZ12#lϲ'j|>AB3-ۖхu1nz9tsltj уħ'HjcLl9& k.`€b_"Aw197jD2'{#n8:MxKzWKyhv3PA8D_ 2{pO{8bkqxX&gT E2,eki/t|WW vjZ6Hշh>6[G€o6X:-[G3{&̌?h5H*8}.^CYƥ'|Hw~OQw+ q9Zt2#CeJ'NYmӼ$pd6eZ%NrэIc .!:샔NdNJFvƋw#i'}jĄ!xpGm% ^a'AGh0w. u wH/YW7A7e[Q-ʆc\>kXqNXJvBDm&#}] Yhw]2ȼeٛdujkka[ZW?@ĶSɥ3 ԃmC ^t{7ٺq*F3{[ uX5m0F r]j~l-D_ui.:dkSjX*upg ='NeύՇr}קH;h{Ao0J [9Y]hic09 jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 F ӚL&9N*wH4OD`!>"-2^JꖀfWN7V ? %Q`λy1Uk{O9}F8c}ة3(B+ʆLm ϵ[J(WH㰩4kɊd$y]]S$Nc 7@#P]rH'R 891kb`8?LpH%v:k!>?4[MZ|{X&~[3~ dw;7f NxqͩLses]±RHP2,֜ġp6 g:r5eEpmU\H=Pᖓ&>Q{PmӜ-}ps% >Q-7O09kpWCJfgN]̱E@ǕJ\E _kB ]x#oҲV ZM~KUCz¡.ubv7?;#= kon??UK&ˆH~+"y]تWŤ6ZZ/##ߐrsM3+ z}VKKPeC2Md#_,i$0wm۫3G57.G+N.O5!.Fկnui{VHsmɸO,Fr<+N4HӨ#Ep$o"ʰ/``;DEA?\Z '˕$@5+;Tk\El#*+%@܄ з`A'i=&oYCj@L熟AtiWN) ,XSY)L=Κe4d;Io.ȟ`+_r5  m1 N%DL}7/^(mm;mn)pyvlx$}3zkp#ӔoU2-$xuP}!'@#my#z`O].G KLɞQ?J`FF&ž YXv3˞wz1U_VtE$U&owt4ng i Fxݲow+4U=G7vR %cG\śЛ9ù)K""W5NuV|9MsE?\;XξD87LC|N]Ƙ}'k~Ҧ\D^ v3&/E[#}˪eyE{~>l 6Ѻ,n,ˇ)\e^(ϭU;^r߆ ȈVcv,kSD^/C\MGTCs|a]p.߃0zk;D;r]LJIo o!cjNkc2w9 >_s7/ޅ {Jg{~s֟hfϾqY5 ^/ h>~CkNg]s$ץ1R|UM,L]d&_ḂwNs2"x\[).뷲n 촿9lt gy|$NYC! ;jU!4AfXׁ3!)S+}h'hHd{ݽ^(kޕѵ弙fMXT`GaGl/z'wm[PB~p῱61u%z./\0.mѻWfe7q9E߀=̚NӐBKY&2_\5hǓ^NV14ϩB Hby-=*v )~!z Kw@5W67PGd&ɕIc 7u< GCX H5WDQk$E`["?JoMNXoB*| r_ëcc4Ar;8Nڵ ͸.J) ϕ/k.gf} 9cd ,Z>~mV +{Jy{pG O;$RA R~ wx,T xRh91 J58>~cL1Xx<])Rަ^.m?*rr_]qJmh%A~QNSv</ db']TH'1vy֜f[j~o0ZYμ>0 ]/dZyJHXq LZ@>=Q`{tx%]$Bs+ OƇ ?] Oo 2 pϪíPYE?zY-FŀWpj8d߹ۖ9!2&; fak_]I嚢1r!v'¼W xV9yƫ=|"QuZƥ蚃v;BkUiB*Tbs{UߵYDN%NMS)`0o;W+VgFEvK-I<32:0MB6VaV1s5>8)xCvP-rUq̈=ľ܋ Yr[&pV9xw6S"޸Sf.6zs'.9`UXTNcyEJCjzta@߮RxMA-eG.LQc^cA[BԌoSd7̛fwi^"sDy:@xIFE"K>0pCc-7U^uBz;Zj;$ ȋgaʐ?%c  &63fAYuQ]X?p.i Sd%2ت/o_g">zh]=["lso"v!<Ōj%W7iᐨ7o~ÞakbfA@Q+H!4BHKNi}7֒IpD\GS/Q| ;CT,Ka|ҬqcϚ}aD.Ԗn6JZ$ x+8{ħG0!=s83T=//}񵺮,Y'wܬҬ7 C5R;,"i,Xߐ44n=HnI8Q_9U؅ hfX~k]2Oq=&)/ag^zF1C@;"Yյ+H)S8 SQT"3)32CȌ'7$ǖۉڀBx,?>uI)I }'.2(C-Gx~6.;5HtT` K|u$Q 'E/JD,a[ M;d1;ߔ~=dɼhdց0kIu@363*C.}% Sg2pz/m1Nf8bvBN&n5Ten#PJo4 4Ǯ}jsyL4 Uoy KW@ V ; L1}25 ;J1S'Sots-џ5S:AS`YgAب$5׋fDg왤$^瞲;|,lbw*R{s$bm[tQ:+1g `]췄!U ^!twFʦ/'1EW0p]1ƃp&rH w4cDLtœlKtRJk ~?cb*y #T;$ # ;|!j)tCmeQjQ-1s|rq %E'#FG@Wn[ q*Tc+4KQ= eFL,#my†|gOD5Ռ#NJ7g8XMʾ]Zv8z!+(֢& qyl'3zd1;۝4TƤc|;l@Lj{Ĉ+ߛahNjӕB2.("ngUJ' x"HTjrϮdi83Ӹ*]58AOfESZ%c*x[_졵L9]~=f5̵zI'D7r0'.%\/1+jyl$}Iav5Y'? tr1LiqjN$ >.Dlا?o ?o'OZG}<'^3a'*G4y'0?ަ$<5w`sjX}ۼѝ_r$JQ"u[;.@ٻ YbS{_=D7tX*w9P=ޗ__ލI2d)Fn\̓d7ݡGkY-EJZ81O{翉 e9!k s{4(s+P*yhA .+Y٧9† څn 1~>|׾hܥ =78$ Fh*nsZ M]@7'DhW5M.u7K`ژ}6 (6^Tpp53i򺪉ֆԞ ׹1 Br}ŭuLJq[Yǔ s* S;rUK!ݾ4߳T{3-n`Uv1z|kZef'osr4Ey #AU"`\&J9kù8w%`JpFm1KAI'a>x 2IMI@"(+>H?݋$-s;Af*bZͧτViN iõm.8j[*F^!ŵ>£dY=3X<~o8!\g c!h]OOVҧBGzU(ppsZ>{+Ū>OW?1w*rUb(i cq =Q];X ^ RnBxo˲Ú0 .!v^Ks.hyX6ѠCUңݝ/yH*(TNtv ) \r2YB_Hjd!%A-hDx {K`PMϹn_psBdՎLRxU([1 v[Fװ;JzQcD.wrbRͣZ1CL3( !]:˵fƂJMˊ }׍#7 uK g!}Xb,XzldIt qfoDI"+<%~ 14V)?`&vw|2'?Ha)+nHF-|P=̮HҀ0}5 `+\[oփtf4 v,NqeVFw}hs5.*g[«GкӆYG[/`㱸Niʈ;JքK?kw"dtn46ͭe\x]̰0QLE][j\f4\֚ 03`ФDw\RsBBiIGv#8|W4{ Pš"OdA5f:IY_҆@=-ŷ馊<`~:m]t/!ۜAgȅ`3WKDݍc(쇩՜`0j|Wfr.o.J?rAJswŶiA2lXo2yApr`z\PJH!@/8I5cj'$xMRQ|u1NLhr F`\G1;V,?^83ș.Wt vυL]yUrGRV(BR9B!&O]b"30"F}[MgoZk#6ޠ4A+6)+T1\7ҋX^F+esDǯAf$Ѯ o)ldW8mŇ1sajg=5p{KϤ:ϧc5ژ>3(C#d]YcsBۆN@老9Dp hh6 b$nt"m׾))q0w:VSB$S *b ±)FXs "je$$v}] ߧnn~@M`).?: WWo2, 8˜^-#~90ڨޝfX~Ht.1qOy%Cz_7ԶWKb!˜cY,gC4 Hg UJ3pJr *(i%pQF६砻뭊S12^g%|Q _ ?QU1$:u?u57^tc=D U^Lv̳U+XЅ:O1D>Q&xl qտ>9@o5̋I}CjȄ'A{R(N6ɑ? * 9۶a0m-ٮu134.Eͮ[w59=):x"aI ,+jJHXjJD27zs0@k<> ٚ7BZ=!/{a,7YDZq$@pjz̧\%o 7՞= eIwb p2u!\`W~:fULOU]IN)|AYY Ji,0D< Zza"s%T}ڟVn<dD2n1=\sȹK-qBoTI0n[BB xfJ\y#FGV{8ww ҝf\ BN ق pCMDcF7E.W$;fN"^y)tkO }z,XR [5N A:>6 +{7\ cfN ~ as"#?bgXBZj<7MT\) 樹XC9,6HL_. l97JXIȒ9e2GtcnϬћ9 :MCU>^UaKZuĨ'I,6 eH`_ae"sW &q=p3jId?]c0?!sҕuF\jմƪ!3 CF|q>KWOF0 򧅾0à j,y[HI͇)c#?>:߱ܮOp38>2a .嶅H C:C m`^̗Be\Q-kExc1B](fOJ ca a|ʑWO~Ǯ./9d4C\}Ebμo@jKتyQu-78>Sd[G~RTt^rkm]#A^28d-l4Z|Hg6:bN@}[ ͊V׉7I M|8-8)bD.2|jw+ýuE#;uڬe4 Ӄ 3se4t+0GB/+Q 1lj9}HvKJo 灦egů_@o^zC'n1nljMdSiϸ!Cњgwo+`frI!/ǜBŢ8|01$7- h`&X++벊tY C^~gv^k-E=s~`-Ľw½fYٕBD>.)UOt?>HA{φ%T L g"ݝ<#rgQ扊npR_1܉i6JV$fUbym;BXuO` DXRVYzi0q= %n|X$CB0sRTқ$ s]aCCTHɶ},P+ZVjjD_߇\=KRs2\^xQXkdSyfDd#ץF%3=VqR 9JwëxW/F ju4}7-V,NMK{W-NQ5C'ʴ%X O$ɴs *T2V TRH( ]zi4;54%q@n .L4cTףA=v 8Xa}PʳCzy:칠/x?36+S_#ݾ)zt0 k {*1~X9 }K%+LN:nm߱=e0Q~-#FOtT!Rƚ%gum`QLu#?%skk57j?Qu) Ֆ9Koy},s$SBnQQs#{'!@~6G7\3Iha ދ?Zk:Ng%_'U\ yR+ ["9P= zP*)]0ՌžӺIS80M[UPÞwt lh(}TA ؈YX^. O2q'S>( 3<7[ͳOՕ?;?u+۬hiy̐^'W@3u*5[n44&e$ ;X b#x\AwL+*?;YV@DVo";¡h9.)^M/&PFPqp9s+_vS ͖*,Wu!u"jC-a}sJɃF;s޴Ӯ .۰ 0(LRKMd1sD*GP=lӰ4SXbm6@z i:BkYC+e ߓfϏ|e76?%y{wha28&GaHȤVMUrj`.3!A٘tN{3Ǵgx$"h0;Њ.ؽ3/(k>Ba6uS-o)DѯSn7ρv{189V@⎓k~"͹53ܑh8`7QlURzE⢾ 5^@'j'&ֻa>P퐙fbT`\JF?"Z/ZgLSe4#~0m26 IPyO-kĜ J4?SH`B&@`yK `MWd饌h8;KI+Edkbm!WQWjN6*8o7Co՟)»S+Z9vZ71,xy wvd1,\q[:hCu"`BM1{ = n QSW"޻g5N,ގtq 40sT7HA=o6\/:.f.Zm2VUp`hCT4؛UVX1rNSb悶oM"#ncO)F>鼹Knvo,aJYK*$s:4Ϯ#vؘ}3CoHnB̎hBcũ~'i-FOAطO:z7-eDn*)Gfa, AY<Kr+ƻ ~|1?a;7@Jb!Ku~9Iސp8?) gN:4[-!F pc QUd1#=ۜުA7@# | !~/| wx ˺) 7 2ӄ;?q>o;h-csFE'$_Gʔv.8{|52_ëEf]`}Zv*PWѠu+i'{Uf \lIrbt_1ԐCQJ~v2R.VIpeE]ޒf -ϖs,e|I ` ˙Lھ-^/k2=U'(@;NWc'_滟2F$mɌ R:gDSQ*q'r'>I TL8%7nԱfat'vR$ }>HYK^2@vYpA F5-uv֐}},Λ =<-|B#^ ~黊H\'6[~yNL[ CZ{&(܆45#qT%T-]at$DV|=^9tT2bOu|"m&AE0 nSHުZQdZdôu·.=vyMR;4JvvW-xqM9댳* ֡c`!j֝Ir-Tij,x/+lzTOUwT ZCrkvz|`=A/{.Aw2/[6,tvY KaM*j%jqz<{D+( "LO>@ IbVޕ<O̕7[krXXI"X; P6 h?g0ܑͼxp j{4?\ f`MSYo!jÏY'lr*)D2 r:}֯iAYТˈ;"^ :j'J d1~wZW7&WØ1 Pyt&a쮈5̧i RMÓ"d:}yCUQ $Vr9a^7ox P/ \>;$G"Hc$ٺwBr)ϻs6}1upjaHWhjfvTQƻLI>Clg3NY'\دqiTMMq98cUUC/vTeԘlߊήW2j"JsjW["ڒ*Z.Nj*s :zEA#HJ[Ƚbf+_B2QA1c3cF+ڪ[2z))\Ϸ~ua iDq @xw,&)]-Ԑa w%LBJԄ> RyOǶ/2x%iڱMj1y,H:u;sK6ߦls1 |?/G_79 S4PK _AѶJ|}'y!J=UT**@ry,@p<Ĝ{^'mOW}԰EfM+p/vКnf]uF1 V&ttWL ~-d<ߙ%` VP$XY!1p( 'QՆ@ڣU=+.u$kQuOa7~'SwYf׾Ɛm(_Q;(MȎ}ZV #N~XX;BKךp"ZQ~m\'#¢dʛuVZ>L d姾U(9q2Y,,M>}ʀ7]*D#7a%1D$S8GOvlGLΏB9v-$R'3Q܆ YXWj!E.n*ڙٹ\{Ifޠoׅ6W53m}O4QZmCSjrfN7I#_~Ljl'bRO/~[rG@h0ݡ:rM c-J݇ :'GkGK0I>*eb<ʑf+jXUj*Q2e]4h;#إ.X˱z/kk[E'ÔzPM#%Ԗl\tVxe B\MϸHi#Do#=D ίv]$dҊ]OMPisQ8%)%#ߘ/(* JKV<薔oH0d]ƅvku`ᔳ1{ [:DPO4f9~᫑q F$lEFYnP0AQnrӢk':L pD?~Ÿf!X@z2k W1%|л-O0KjP[ ,G4fz _[FXN03$7gj*ڱQAIxh%%] T/T@>FSԒqYHnuE-2b# (>liȫ3來YC% ZᅟN2-5rdI? BV@zg5۸rr\_Z}͖rRd#J痷P:?'adD/BIL), G;5 jMxj.(LJQjY]0'YT0HZ|lː-W,ME C|oz-NcH?/>A{CRi[hh ݟ[K[fuos4e MN~).uFl&Nس,]{%.kzNW8ôGVy?$`S+^l:,,SzϜ/`kߚŸlܔEz˽5ͦh]P ~=zUgv 2% SV&+H~l4'>t~gL]9oͲ9kT!]S)s)M(҉BL^諐V%Ck=H]QQI| fĂ|4=Ӥ]GWJyg{ a7zx=.hպT{JL|*˲ 2>X609n? x`^Fƣױ%P=j13nL wf 5I9,*Y\xxFktkO1?KQDlж=,Ë54R7(uk2=y ԰УGs(_Zec*~נlGBp 6@Ά4f)7Vxb>oug"Ba__[ּd<4:@a*5T 5jM^lioyՙoI.^v9熚>nSϑr'{aV^ʈHRNc(. oƲQ<[TJ!?+|&Qwm9"&>v"QpϬDn ]Ig6w`5}b!~ Mj7'(NV e:(bWYs]4y-_@?Pisy?epqc1j@2ࡗ!V̀wƚzQ8VrL10$;p-]އnR@A_[stBȫ_EHyk_K a0-O'ʊ\>eejX^Qݟm,`g;0[֊/x;KL(m /^P["gpdAƣ >HJ`T.SCr+}A|9[δlK0mt$3De5R"Qky;Z͏eثPFc>Z(3dPO vMS uB>a~5Y-9cVeI!IuOphA+iPcn&~k T0Z8fiBs5N%;%'!GB_^tn6ny 9DRPX'g/]w/ۧ'38M((^@U/u iTngJRa-09m:a"Y\}~QIjvXj٫5%l3ti$ا.ZAmU:34+HgצൊXXKI0\œB[FSO]k'lCT%Vo\&$rLwwĔAĀXe|v導 W4..]:೻-rj{61ᬫ. 1#'?i98a 䎘xex|^ K4 w/"38E k`Gq) Iʹ ]?3") Dյ*Jʳr>G3>yL$o vF 24Dn͓zо;|wŌv&~ >O{OIl5:2]oHW4I&Bgq|;E}5 *I72R8UYQߍ%?g0 Iñ`ɛE\f}`&S؀퀪,R9hS|WI$'%I˧RORPEQVa4*eQ,`[mƹ] sO\LOLC%"#1zC%z[$0K)gDNѴ$Iv `RyO\ZѼe [Ù̽tQDU3NR0h/™[uoB_-?|™6T&]W,tX+[+5X4=+`~V贱 :^g khTma[-D^N{fʭ_@e-k|0lq^WdwŞçvF˦(N"rWo|!N"oTGR:Z kБǡg&]n/\F$\%Tirq ̤I ʾ6XB"P"9~e}qRոHJ,L`mroh =ľ;7)8^h}2.%q'b">j8!.zD*S=} g @|mUwN66BGXd\dQ%~,[9l'OUNJL/@w"М 0hT<>6@Iu!wICmPhpB7f&\ , \=}hx~h-yWr~"2wO9R(M B ewv>E)ShR҉}c1&eÃ_ HɴB@&1|5QKU.AQ&ݱdNZJqT%{:tH$cJBhΚmCn,Ok%zewa8c3 F<ӭgj'O^xQ*B WcN%"t.OyYBc]j/_SSe/АzY ALI #Kݩ$hwRlޕIgM+) rr#pň*G nK< ނ5IkrAßt*0v|bD䍫,5}<)\W1,GΛ΀B9֏EG̔UICmFS!1gq_lq s]K]/-'M˒xOň h:L_a@|Swį `Wby)۔~Tج7k~/&ßPnGtzh+3c/R/wM7$i$s+ [w"hVẊV%Ud`vF}Z22氒>َ&f+/:7\F֫*3㬱`̡DIC@]!ތJʁZX7|d0oML,A9H ˎk<#d,|l8Fۺæ Tn?<|ݛF S* ňze'$Dz33ʰ#/ j~V,1)͑g ¥;b}5~=kA阄cpS5vvyn)I;8b02$/FNʝo$ =bg*zF3>Zl[`-mN -^u,xe^၍s*O`(%Rb V7ݓ]so -k{g_|w+:H\F8F q)ߘwf9/քD\wL-wW/+;8hiwl=rZC<۞V4Z)]!$+ l"9WA9j~ yADpsdBm#`͘3ѫ9ssC%H8,Ha h@n|1&]y9L*)19ͳbQ>ZBosDYSG}x ^6vDP$J =_54(}806;/Uj7.ܯ PΠ}>9٭9ZzwPx{2M7KԮts62#Oh/0\Ui_;Lr$OGBe [M;FF`ԡͼau^ELdy#lUF{55jgCmqSa.KV8h׬^Lnb$ߝCY gO=;LU48 {${058QuOmrG58|,^J 2ц? 8'BOX}"pRS:bn޵lt<ɘEtº%.L%᭨w$5/\d u[}KݧuMwҙmxfOA%/Fyz{^Q%qQlv <7_Hfh'M3Uܮˠ",O6a!e_ QyJy93Q$F^Igc_u:jqxE 5O͸ %ͅCƛĊ~^b ȖɳYdV @B}dX_~DI=F\eVKŗjSvQV򩡁'wRn>.q=6 KoڝIserz=+}pPj u <PLbY|w-,QAHF=b]TYHzO[ ͚ϊ]!]6ո֥9HffE ?,H2"^y>z1Qn*7+NLgD >ɭu䬦E5:Rm~T{\3^WĐJanYu|ic5F<~*|>Y%)>BwZE4%R?]hTH62peqUJL f=pTr&I)B3&wh\4pE]@cw˯RT 1?+bxH|Kyqt ýv]"M1+ۓ ~-}.1nWB\ߌʶ=yO$gV9 ϿA?>Q6@V#:y(zҒ]!uzY YC[8]#%}PJ7y[֎^1m)UuJe)]᳧x/6:O99!KzGןm1PtB2oK,5 Υ5;RKHHhLbs'wesqIOh>1o(ix(8&ĄvNt+l.:BEAw<)[%c[FJL˳Q4 DDVI|]yz##{vgrؿ`_$6>ABjO-!?QpQ BbhU!'Mx ѣFWmid] /x`]_-LCO?9 dvDk!Um{ -2#Nj|'MI!@s2(+jWN58_7b=2]fRA`3wiH(ޢ9)f8lXVa?Ls[fnVF1Z==`MVtFnoe㴑~^BaOC8LX:P"oNz:RČ:7FZ k]ǜ(v?KQ9$/g~&~Aa[lt'cNV8G##1ӌō:Am _.y%cϥ w~;®#Vu2B(>uT!5Jq}=ޱk3Cè*u Ad&h(‰a,4{E)@.S$uz$* qu0[O VioԈ PL  Hy ^^d^\ڴ{[EX9MAC #10ۂ!h8B y(r⸘VXv*CU( $DHV4 )sz*Ƒ NQ[LX%پCP`Ag,jG}}Y$aA&;<قAGCݚT"]OLpt$s(M9Hc|3 xDm}(9p;vh9KeC'bJ(5=ґc<(Ž-Qtޜ?6 ,l"̱BSuђo sG.*V zdbk,]o`̄0 ɚo>ª:.%&/DP_ȧz h =!Q/m"stv-y T @}Q5'KvX JEsmQDx5mZ_㊊/laC4Zi\/MX\v||9\rs5o[ 'Ģaf,E'H?e*cт@0TݸWg|WMEf\CzAe8ˇEHyn'TsieL$ ^E~L}o_H5٫g W-Z_GZ/Kut$hw1{G< ε.h2$fr U01/r|8wXrv@`f;JR] U% ?ClMv ^KrM{-ԦiZ/1Hp` <) W=(6 pτ~ M[ͼڞȴql6ƢZm]n82(M1֌-Gj!Ӯcp%pP;_'[Sz7?Ԍ:)RY -ORn8A hX,CZX[7c5Ѩel.3\8WR ")4_ySV 5sŮEi%m$z_vo~x֯v;{HBVl2C ea\UXL[8q 9f Ml^dshG'x?` 87EGثK1,8{:[ԡtOͬHrq|rj3 KH]JfQ^T:Wd/ 4w=p}tg(Jݚ6rzRb-U,9W-х5$ErWltm OףO`d;g|d0VU s֎]# $WGXɸmϗ.hkm+]w7Ar)ÇAK_ER<Ą64MFZD!:x^L/*hhO O'uDЬ軘oR QkۃOccRd͉F;,KƠBٯ=9TQjj"_T ӅʈDq_Μɬ]s߶ՠi8s7!* Yd#naz3jgUCˏva ͠kef]řppyR؍΍LpLB}CP2.I4d=)l[\4}:O!!*?"w[sO˕l6^iEJIv|8֖xvOFnB?*4Fל˦i \5]3A_ܢ2(51kl[wc&+H c{nǡu@km,(O[$Bbk 5q*-qܞe;6v Ƭd HiA‚Dy,Y|:d*c 同/UCgê}ùcP0`}c5 ֥7AA?ap-LJɤ (0 wR4rs4-ayb֛ޭ6m8+#*hJ/RX1Q9n%$xK@p]jC6A%G4)v6Um߁c 1 $̫LӲUBλd Df?Gi$E;~F-loz<E^}'>tY~aD=oTChxLnh)Og$NE{x9r, Ð0b |i쪥1H˄S/9ɄmmiQ |L%ijrU]^ Į˸{ɪIN=YCK *6/}aׯ<Ns&q͛x ,O/'[w聻gu-ԭJf=(&N6]1\+"BIg(6֪KȀd^Uvh`t2ygFĥ{ƨґ42|ɸwWR:U}d&JMR{6rAQJ<5hzo"]+~t׎5TGSV  -$Nj73. nհ.A9?'s8^$qZM##|4}#H!#I0s̀(bKv`8.}y!N*Y~Ո5l}Y 7.}ՓR7˛[صw׿aQ<ujj0r`i5kF0c  wd/w8/ ;?KjTFErE2}zxdOjp a`W!BT!}ZZy;iA훠Zx_VSa_B!>CkJnrg(!W0sjUjmEW}i㞋ѝ(v!lM A25:߃&oNQ;vy_FJuc. @|Hwo*aLpܪ '2cfj %r$[NjPc:;|L%V@-~[S;W>WrqVy]=FQJU.%I`@ڝQ8r) OKkUow]oqTiEU%yjrދg{a]  } .ؚG >f#mgi+Z $h^ g@^fkFS$#Li_Zx4uF==k}?&i5Q[AJeJ#"!ZS;{ PEpܨHuJ SN$yYD;,ňL%ġwR;";Ŕz&VB78zUdˢPz/>{=8TB 0*@M]J$hKzTBIhxm'7IeC~q~0 inj>juwor<|G&޵Q,%aA:`F8eD-աH!ɝĻ T#k݆k5T(з:_]]EI7j̕^yt^͟X}*Y'sAgI5MT3/Aך@~[+=H?>Uf h5{I</VGC}DR*̶u]$2:/i7t=}5'dcEEAm sOpiV_4ˀ6+Zw}nf'/0ѣ#+O)៷Q:h [r9ɴHW68|hDuj^'8pi;_祩adT Zf@lP`, iMf9HIu@3RZX r:2q7.9KE|~% (N#ZƋz7újj1G~/ő^D [_.j?X|Z55 g>`?*5 o?Y*tv~uX ms,.^(=LO>EE5[J+?$ygyIءeomA%x@e['EG5W ܟhT. )_BٔVt$Xs,#asStS266U(c9țU9g1I$y'EtX[_H> i 0 (ˀύHFSZf}m/Z cI?9[ynv#sRQX$k49)a' *eijjquk;ը2g7csQ@XMPil2*_m|ّK8-JtFt^M,M>0Bs*u=.X98HTjVlLLq>neX> wvq%QERv݉ ^ *7m] wNPԽ$j< _$jhQ9(q ϒs+պ'i;Sy|(׋K}6S~w&{|'JGdfLn reCCtd;~A+iׁjQ~*\Ant"`]'.b,5aU ;F9ڃ*) )ortQNI ##P8SW E1 c WSr\3M_tAUʁzh| YOn3\_RRr" e,+T/`!S6}Vw@_"*3%4!{f^T,:s,(,:h+&OP%<3tM'yz#{Pe/ DK o+Я.:yN$R"¬}E:ھz*R:MFAjn+:jອr+Of|^(<2}yi+JN{B>jyӅs+[1яq#T[bǜ=N%̦X {͢FU ﭩ's;Q%hYm{ځtl{ r'ֳc%Sϱr%C$n3m>: :-XK !t_uV\7hvB7#xw~B,42779x >#X7W>|#X /D:`-=' Rm¾ ]wmeВιaW R`?LNm\%Yo1Fy{)Ih[ZN03 g=nfcLZRe]Xm!; :mغCƸX'Vեbb7ĭ ]zgT:/Yq^Qh`Ez( #ph..ޓW wxS @ZɺC!2lģVpֈR#^}zqY5?_r+"`j lpڃ7rena/5٪l$Lojb^tЧZ AN  ~k"#-e6&AFelhD44s%$+t~"Php9*!WGuw[ _|fO=g5@Lvh a}]~w))Elq.GI&6+V\c̺~s^YMB66Sʮ72V8 K1ʢV-.5VJڳ&Ljs+]5aA]Ga'eC{]͟. Rc.~n2T@GTbKJLO˳iز-țԥDCm,BXS{_D3~R)bg&zkxÜ9c  N:Mz0*a:{n 'O;dA[Q[Ppg8HۈC_}fCR⨌k /ݱP/dioglӗϮeZ$1`@8H@ۃR텎|כ4|ص$\Giſnjc 27xs-տ/f3PVUXEt&ЕӾY&0򫥶6O`^ݜLf&(p,X+-PNCvP-:~/k'iAIrV܎rH4_Mf:r}Te]UR eX4%HbVɿ)<;U\-KS .-cANXw7xp>i/:AAT3ޘ5NֶoY3@)F< Fr% sة=^,sT;E86R6v.hxX?U4Jgar`AzQx"*¢ E';i ]}F*5orfKOPу~sz'q9K nro~ؚ}x-:k6=1'^>GH._KƓouSnfYHkP^>0A6Ə'.n+"9,4 ;Y5V0/*WNq%o I-&f i(3&P :wx]3ׂ ]#krWv{F4Kh1g|1dk.; ƫZ13BŠ56;i!7fD/0yech RiJHd4@^sxH|Q$Z#76=1;ga*ϣ!nyVKJb)X&WV|H1|b/vB|/ƱLR}IxiYfnd3Pȃ)p d /hZeͮT"Q HZE!'_&#Ikd#_Ч7V`j!ޕ_gwOHˆP<gtmf@44ߩ uBɍ̩|ŬHMtN@2>&C5;^n4VҸf;=8ĝ׊?͈-J} i-=2x;ϧ#6U'Zu.pf iD0{oo^FUNbx*PqL.k2`XµΔkI-z ($bnИy< n,=p%]tocesh^L0ۙc;y.wzl 'xݖZ)P]=7 t!r\”O;s+C <!%kko#.d\2&w?tjE! } Bt6 bx%>6 2]c+%"LvuMү LM؉ P|WIdlk):61Ck ,xAw# W/r-_odz|yr|J]҇Qs秅?&> ^\}<?nPJ>qmH!$'\"v}Ir͔Q`MlU@xk٢aM  e#./eu;s9~^7k!J}!~5.L':☨+ xm/LOH]/̖ޫaY>灈 ̽t>W,f*! s.F֯eo4۝U g; mikX$I k#k2GY$CE{XT[[6+Jd~=5ɞȒNE|WVQZqYn:LF![!d0r!ü*U z:VWCiMڰR)דB1[:+k G~蹪TgY_?"z*nr57kⱷU??ÅZ++fs5֐PG@"@;@RXMO4 sfKXG>m?dz2m[H?$X3`>[`} j ljƇPw^Q]ZS?3_Sivr/2‘rBt(YNeBx$]L#9m5ėhg1b$ nB{yOǁ8AO?^!4-C 3RX@K7)EB5:ls{đ[mqAS͞ 3Z.º(Eg\s׀!Pƛ7NLJ7nmbzÐCܱ3#v}l*.Ku1f|1 )u4;iHj>gH3Lovu 0#`CN%kx;^]Qqf җf^:{%F˅uM Ef&`T0(èv$1*ȥ~=N"miuCbܱtX-U ,yJY wޮ&_f0^D?{QCIEpa& (R8g!3 mу I5`%@'tB6&ye#Eoر\; jc 뙇FQb֮$ˏ^鱘f)5F߯F7icimņu!PI}No[\Bڕx4W"naIDh^BfC ̍R~3_ Z5BBk|(HVWXc_RQcd&lF PNMgWw $z9r9i090@ɑىJ{U>$'wrGXC6Q<귷fsZan~1|sv6vg[e٨!OT烙ekRal`9z=n^d|5Wշ"E{N⦴ILٳ"YO) AL>o46h$=MC 2NK̈@YaP^b$yq(N^~^e‚o1\L{]\4o:2|P>͗*BPuށSlKBq:x8EyJ,bY+-`i,lx\ʇg&R`(qA9"a686-q&|`-lxp؞^{#%ΗIqԷ (ZAKH+ڑISAjwhk6 X"=2$a:JDޓчO.KOdhUKxv.$$Y7`nj&FRB@pz]_xޮh, K)l}^(_̤1U4g8׼'aQ \.Dm):GrI)P5MDND{uC'Z=\MsƂۺd,7k6Uӎu/,1`GXxd7Uk^H\ >߮ ( otaGo,.}@UQ-ZխKhG0.]@uAᴐ^u 87D R ~SK}`}F X^[ %i ,`O=Dݧoꌷ _:PS9A:NQ?Z6}M2tmR]BF74OiI^䪨:mS.3ZY ̼i8< nOKeD4:-K aG3c O5K?:si5 _(+g Fq5p +\&:ǥ썿o@'@lbGՔE ?Ց& 6?|4u8։}0H?xZWAPr\_ӆe+Yܜ #!`Y[ 1p?Bl+߲ ( , UU2oٸz4jW`Z҉PGhJ #P klM΋wywMBh!1Q R ^lx0-1vAIގmtuNQOVll~!Cr,Vys|遂w9%z ؅#Ɓ_LS.@HR^ ^Zk h'8ݸ4,6$mb\4NWp/E|Mg2`~Lc  Pj1Y@4NP <*&jU{]D{S F?XvdSYU)M %Ow3Twvx 0u]\*8 U M4E0xxToPX)!dA`?O29<$M1Kq'sL`EeMnl*\ oU}%QF0kR/z߄K>MgQd?hQvNrN&CcލLDM w{TOʄ&r}ց>A|TQrAZ X6K]\V_&j̱qF&h$2 LKd ctW'k2&_֐z57~->hY6z}~F@daE$ F'FX]؛rJ<,rlr>\ͼ bm&&$^al߯\l,>>5@_-4(xք]xLDTJ $#o06޾藛zwBӈIZTι):QA)^32B8`\؀>{=Rn-2h™SÐXgFfsW?xoAun7gy;B"q//Ms1*0ˀM \ca;Sk/X0E/Lr$׏gtlgq*?Fd#"i?A8MbWg$ ڃ*Bm ,hPCz72H2vϲ"8?& (Q`| Qɼ,4C1,lnN?;Byu 7;t^GUNGx9B jIC2>Ʃ-dI86H>^9ڞ,I .mG%ĖLsG/UH`e=Ҹ'(v_Os s\M"Ls / $ O#RXL~<#/'h;D˨zR6i^JE!1[` ၓ:jX٢[i:).KP( %2҇;&i8gSjPf7v-Оz;ۤ=5楁&uokΊV}ŝx-yhK'\;]Pg@o"Bj0Q,@ٷxθ12N]d7֎{z10똙i=CUYz QoÛ+tȆakJ}CX)G6<2_xe4HtZQgS44ss' ywǑE6:Л4wQM!ܒ^@pLRs8jt\_ʡEtQi?L͐-m~1"p>W$ɽ{er5]0:K D˵+tB\b #%Y t-ME|o Tu[fJͰ.jlC$(V9 DH{AUFh^oO4ZMhj: OH-?B|£ ::~7+ɗ/+m!NMx} G!U#Xom}Hw:9v1\q5 BԒz^&ĄaOt rm#N{pF.G]׏v9`V^J_7n2!T}I"}^߇ۼx~H1zOۿ`RVJb~: *JwT0 ,X#~*Lh3m= (v5ly S~_WO\)@@ r쿾0FpHUeoao*7i˺&99a M7.^`ހE:ʹ7 ̅sNujganJzCh1{P0G2^%Vӊr؏jAH?>-B-J0̤#|\oQE,MϮ}'ۇyv"=5n~dwSy}j-!ʳ4lуrN*3mSޒgVP YU6CFMya|1JzllFLPX`ʿ u` m4Ǹb !Y˝Lw'9igM+@k0L1wzq*7A?CL,@]s͂*e}7l78z ϰ뮲F xcD&\OF=,g*.dž_g4Z| P Z'P2wdLI_*IoXx^p*9mflu1k)1In{X.  &nzJwbcm!˽I@&ff\Li~Y>t(9ubYs33 ;ȳ溢qm(n^ߴp;nI 2 ފ6ΫFxX{qW _OT&Ey'w-)w)FwY @:' k%:18.>Ar\e!̈2|K>8{!~M,ȕ,Y ,U*_WkO1N@Bu0q<DCXizOAJ=@Ӄ~ ^I3!a٭b6:gjq7;w@k|A[\! <NG"·n:Rmn5TtmtykZ{0 #f,Fh颇^ i!zjإٝ2iGF)ߜ,H D Sy0mSf|Ȩ&(\,:6i{./]s=2;7C9^Hо"ϕnlg^ᓉU^`|(n7tMICa^㳭4*F!懄^jrI v-Q RauRmHuAC#V7_H" iCߝ +'}Jj̠H|J6;f"On dͱ 7g r uiz 8+>LԸh&T\T^$K{Jzi W4ZEZҬ~]y#CL4w``7|<>IkoxգOJ7 d }}'g)uOr{J+MZ`oMVq4Ҕdpy 5^E/uW2!ВF0ɑ 5-1Ë醐ėq;x" q~ T_6/b#dŚfPKqfydO8pR4N*Ӻ^`ny}dp*ߢ0[?VP\dwfK$mEV_P'2эZʜ-"Y0|sNV@mjKQҸAIaZLq^vgp`]`jxZü+J砇1&HXuܗ"N5Wާ=Tk:y(V~ y c7Lc 1YzOEf))$_kl2<5N\҅HEt$aY",4@78 L{U&f7UB*jb:7# I!ܳ(~䙕D|Ato8Hޢ(v>>O|ܠL-i-LS]նJ|ypd-]r3f6jsIBN-6&1%⁒*AzƉ#HQx ɐd)3?t7&U/)wH*ʽ/jT<7 1 )nXJ#Bm/RMΘޅG*0ZO2Z7IKvrϓ.DB@uk~]%7s7-%,y>8}6bI};TPt tK!_fs= j9,E,(O+.a=s/@V-DI`褸 +lh|Fr*k~_w%7=-O@`JAh>"4)s6OٻkԼ VsfMh1M ?SCvOBa=oWzXi"P/onSJ_23ͿbSg7T abEJhX5 GJIy*}M;彴 &? - Zj@-0mA X{7EцB֑''ƮeUm@ YQ՜ J;10-Ѱ y&E?jq W KB@hWw7T(M*0&H!ˈzz uZ# RM&84HᣴN;?d(j}~}+c[f/P|"7~WbCYΚPkCԔK)s8[׎1$a f^;2E%XRmhxz// SvrPv%,:7^E B 6F74Q?yκO]H:y J^jsL:R>|Zh|~ĬЙs:0gy0cBJ֫%B"=cJ3s5 ]SUraIړD;o!{jc_Ug¹ЋaS+jy#=نTp\J&مyX!݈\+I8N\ 17JP<*){ψ?U}iϽgӃXHօˇ3@\> UN_/G# pvSLWxwESk!r *7쳺|HsJ:/B}ji=h0ӥi;WYXL)%dG[JT`bTF wi.}_GF-];\PuOBB\:t'ұD9Q)v!'`r FoXsV,%ġk=$`.[y@3)=.@cMClND@U }"~fF1t@ۙzI5d;MT-:2Ac$ޣ7[ySʖpy)o^OH贿-[OMoy(rc?s$0s\J[V%v4;K>qHA~+, )8(_Ň >ӧ <ԯ ^UX半. E6M,SN|"RӄVĪ]a/'@L'2>S"lY LQ:`DClxi^v(r(ȧ 'ljE5.y/Z|'}B쌶ΛZrWs/뉚܂?syāES:#';CƅI/1n ވӒ ťTf>_KsRq#2ٍF#3%>Ɓ޿,&\[SF4w?2g~7-UaAEPɺ)nܺ.Q˶:Eo;`T[~E_F(1epɠo7L<Y 7@cWYDW1 LaH͝H1xڡ9M)?!V^qd@- $k>k4g╪֏B{o,wPhH;vOӪ[w&ֽQ~*R͛uzsrhC GM=eκ,S@[G'jP:0RiXF4wt:D98p &XGs($p;z&9t7 碹K̗2قتv-ҫN%XV1ԳLJT\,.zGc\l;fН도9t{ #/O?ft@.: ~Adi# 6bv8A앉JxޗX.ڼxWGn>Uʇj:S $d=-b 6t.ESa>y!\0HRzu3zM-HLR Kk)Q*FXyr$c`(&|Ẉn›4>lp&zg׭Cg95vVȦF,yz8ۅ-j_=I͢?~!GСB7sD[${)@ANEM}aԋ1M!N9哱h[/KdIxd+'> 뾡ɲIkѦS:氥(0)b0 /I#yC 4Wv@'xd|sW7Ϭ%c6>9W-ۤq1BptI@x jw␠LE9~JQtoJmFM&"Y{g aE1ZBviKwMM0j$_siҟ*\#WwIB43n0)4)?"cc=<2gz,h42 FR| hVS%_ o b\h8.>RhR=D1"Vq̷8Ec@/ck.%DTiw|fx fԦ˄0qddcwNwzW,_ձfʔQ!_<اɦVPqu=,+%! 94{<ީ*O+Z^1nT8@7fj}~fl_$/g z;$:ޒ7H{P> DE=m@& 0 MH2WZ €EZ5;nsIQ@_Mwu@;f6oѭ<0 )%Wn[B˽k7$0d:C r˿B & bMi)VI=}.{%DtwK${@c$KrI#d+>hT.X8rO"@~+r~[ Y~$8J5c 0@,P#˵M.jNQ4ej(>8SIW}Fw&c,@*b;sz7i4Ȯm=r677qss yg]SV"ȾL tН2Ƙ"B)a?'GdN2=*m7sAdHΒ64%NA6^  e&ȃ"p>ĭj4BQ"~Iz'L@,0H[ * 椔y1%/x%;|)% S6Q>Wcw,FQ|' Qyq9XEtx@һMr9ݩ"[DGP" pػ> J |ݩ%LND|I_ q ȴAqHddn a]f8}j>ъ>zq dom]NwM ,`O/ϯUİKL&V(rΑ)~ ŋP WI0"H)_d,m WT!_΅!$%/iiD&[Qd<煈d*Y` y@ip!tBm0|=_QD?߿9lM;mdm){{3NK+`$I--Ӵ?Cj"y vA8F%PcLN-5.Ws8H,U: `J 3(XM: .=Ij[&F⽍aX"aDϏ?#k Na6I{o[dWfyIN%=ζud1x4dջop)V#1Nj$׀9ԕ2=j靘)&P'TS6ەu*K =|8dtB.!b}CBe_E0lok* /OztiCK*@f5T7&ǍXd]|(~&TsZN ܪүZ&'ސ{RD8*\(^eJFhe>Ag&"-[5*^h,;e'e" [e킀h_p Ot$s~UoN9akhNEߚTX_OϹzE ߞJJq|Ήmƈ#IW0Å9OpZ=+g-O}|nM1ep}=kD&k2M٪ţ_ Ԑ ƺ*NDZhU__ékMe^ ܼ%̹)?*!^CSne_7`r[%r_Ԩ3~˄0q|Am81:':1q!Nz7B2ެfL~6:ul{B` :\|Og:XP|j 6eOܗ|^[mlJ~As[И:B) : CUH.ۇFc:!<kv, Eq`9EȷH/GM-"/}J#So0j}ܵGSZ1=Hѷ FMd".~*<(I^44`=Ck'tw)ݨ2Ånp ٞyʊYK&{4Ul1K{fc)?UTa;.w8JP0gxZatv?͹A|9Α’8͏4/psB"~cş9Oդ=qi[jp#CVy J5Wèm, _s޶0_Q"De!NVnA|>/bCBm/[˲5QM!neز+krzP֋zPæ]o:u7B(+h0.Kвes'"Y`׷[OVj*nQT4}|\-M{ q& R2X8M&Jg0*aB/8K ތb,/f+0,׾m17UsBLtHA0/.O `KKZ+3 w-2cZ\<|B]-ewB󐣌ҋ .$ρQ;- ΋&\h8|hZHi}x&` %k:MoS&-]Hyܚ{&jtN{Eء )pl ei6nC) [H6,8FuiNRS,^r'6Y/*BqJ fg٪Po#Mc a=|(?ň@ XmU*ިWU )[ W->SLrKDxµu7wLGQ/x=&%Ni=6<OƲ\&2Yһ,?ܺd_ ǎiEAݔh@wSoɏMy. gT.px-º&w-}?4t![qSe ˩HHrKd1j`EE!0wD=б!Mqկ^Bg)pFVq-4qNw!֒q9pҬBphK%Ȋ.3({Ӿ[\,|BjSlm؍>޻R.䝑ՉuuHBlG]oR:}X4澬Η!Tx)Eis_p@ca|zY;I>'IeBVY.;a6՞\AX߶DZ{\5Ba#e$VrQ`b=ԺKmtgcbчc)KA;n_'2ChE6)~ ^i-q8qſ9 hc4M@4SCD؎WPv.ĹP3=bДz&8O[7}лUa JCNPx}xy+=0? al‚ZO;- A'UZ S)A:nZ)7. ȍ1h<2%g,n*ҀnKpܗXEdt'|r٫{U0uܻE,"Ye>%?^@y#2D>›Bu},|Kn\+5?5/$X.v"[1_$wfF_ҹ뻺8=U MΦ#X& Dy8o['8W"d%Χ{Y-/h7Ѷy7~;J!7z sy7^ M XwޭE}Z8¾S9sbVTxlW~C72LW /l[b41qisJsĠ2j-a^r upf"'|bQ|;|MDCͬL[guOGE*)%XU)"C*D#pd'F*5H"]?a LX0'~M8o/J9LK?2gVoR+8N\f,B-T䁠̱ާΕ I6XT|T@ D|`52:^F:piJ(]2~:1`g)*Fcо)DXf^OR3u#>T^DJd`]25r#og7 ` wt>0 {J !3[ݳH0=x!^*>_'k%8x 柮Z`F6ɗc6N-/^k@t$;OK3sjM=Nځ=t6%eh؇UgE&>:d9P_=>R 5ѯ  )N(3pU#PuJEr!ȐGQATD =;6'KnbШLz6؟HNoG;0@xaR%?CTKm͓^J C UAeoPޞqS[)Aj1$e(R&M39!ij^lVrzL,]\c#YAez^Z|BG;+:M1X[=LwC{QW;ì#g2w=_VNi6ƬWk0/Wf[ȚKeRo):a-w?VG9TV? Czo,UЙv 0߃e`R\J+/#힤)֟>1.7,v :%WrIT|1ItZ`&m>|%';Be¹QuK;[T* !o~Lº,nO'\gj#ɇ#۰F ٹ_Y՘Ȩ#r82+ޗ8oՂ2/ZS?öM#k"DK}9r0@8-Y)2tbУ1࠮hMt}|^%}z1Pn`bHY[mplMނO%rmg>;GfVT۪9*~._JxOL}geTnIs:h6(ا蘕h>n, ]|پ|_Wpg ~}Mܒeyk V eX`$$e eXJX{Y Cq .7!dֺPOؾ>sRF7w;szݘS; <?؛rȰag{q-Mo/S,^q/2hKi(#ߑ FJ,^,K4/~U&؋Uf'Bk}nq{gMwE wÉɪz#._G8Bju@J*#geH{UVi>"0zD Y>E@dAR/mu!;q_&a8nXCN/Ͼ# èe*Cdad)t@swӋ$]50ѢӉ;s|f?)H>XdV xg:$| LBa_@ C1BϱZ0j^IFh5EuQڦI,j4KyQ}Ak=b=LJT La+~-´i1ݒ9AsZ9=hD¹[\"Z=*x;> 4 w H{>eWG_kH,gӍ F1 - o^"")^rd[ ,"tC igb/ Qp&Cy\l\+}'i%^\Q)MɎ(M~Ej?]Ћỉ[P:I!Yqy~ 㗫,e(='"ޥ(\slf'@{ 32xI˜2Zxca+iIgh'59GW)cOGy>MDPF!g7*ԇ@tf=jl :$bDh#Ea (oEIGi\P ]d`ѫSBQVp L6XBY&im[':5Yx5'm 7U@OɃBf2*0G蝛.!ԍ@ΓȨ%d"RV$Q}iďIPOl ~|~_8 ByO䍊6F(hkr2Wǒx[ֽ: R9e%I]' n;9= J)_r+仚>lRSt߆;fj-#ljKPTJCx_tf N$tPV(r&PMƏ!@ d.saLA^ >7(t ,Y,q.&URJ \_NwlPRBxisIx2h^fŽuB.t[ʄD_pٺ?*V&Y( fh;%hߖ K9AB?nW+LPd³SRKE= glL rC_ |v&""n} tF{a.J|9QYH;P]vLP dBgu ~C׌Ē)w2fN eHPʘ8dcҠK6QOVF0 )CP٭}#ހ5(u]ǻxiy=lE@G!r Dl oOcn ]9oBHOstח za\CC;]+OQȞA&3T"'hf*PF磈1D0:SVd^۠5c-Z{Cw& rw斠Du eǤ-1So" 62e/6R,f2qJ!u cf@5N<VzO|N« R{ST v%m{ӀVEdCS%W^ZE5׶Mkidhrt.+ng5 B8S-% jr T qezePz hVxKvq<_cӌU HbNRBre>Hay>MǼUI#y<6Ryevhdft^eAz].:S?{O s5HAMWh&j>񷿽 ]YQS/ ggZwqfg|GO>x 5͙y< ń#<_0hp-Z(L!K/ !/4\ꚚV hLs'w#c32)\2Sc4OE7RVtMCki#4\&zƏ)LtoiP@0J惃.n"T4$qz讬sIo]$7 %:r"G-'J !vETjh*Y"VKT)v^z {"+"G ̥{p+l"„K78o`56 :[* qr2&࠴-7>DهUD~#3-~C왣jH>K'+Rz&9Ͻ݉6#ٙB܌AwU8W!n\ܒ%c`{#3f/zr$@ f$z w M=ZU&c֊iOֵSm$)!3\]7{Bu\ӽdHQͺåp|ɞ -SɸǺ q $ ~/ /G6fCbDq9. o0pvQPMby|OL~FJR/›EUh3siY6_VOӵY]T`2 ]58F#Zg`KPl msjGM)Dd!]9+ΗsE>SՠE!Z kf[rY4a@h֎Gن0|5&8wp j p{:' c'm础rZ0D4#Nst]\! ;C4+C F=pbKt[ 47Bz`~+Vl=yMdRT^GVf_Lӏ\ISOC<Àa u3x% X&։7%Vq7%ܨhf@<= e~tKʢB wPǙr%? Ymƒk"k(lO 'NⓏm"/AR gYqFqN~# )x -P'IEb0\߮haQ 1VMe?^"Qk֭ǍCzc65爫 Du.I8lۆڝ xp$_Ue[G)?PJ V&hEn$g+X [HXPFob[LJgw12_F:?3GbEʺ`خ"#l|vHx R鯐~ ^U)S:tf0l &Ɓ_Oߍ/7\+N"_U*z&X>&aAʈDL<99<<TS0 yL0$= ~Pe#-%FrGÀ>.R:kA]k zʭ*7*·nAN~8KA 7ڜ8/%$^%C1|BSMbBzrd95'i<( 6-FF@f HBܕ[cM*u \7Ҝ Z"p_2#v੘E. M\, |O'{Gp9s @YFD5|됲ʻ>BUA`ޜ{{a0tȡkP7[|3w]d<#"oS  *o) =0;l=v8^1zh&\Xx=\3cX @=* ꅠz T֖B"F}BNFh|y9:]GЌ3^F4v)JNlz)k/gLo& *[vaPS7O-T`c+VPjl͔?$CpTIؑؿYv1A3fTF$D(_#S?81:YV>!R7QyWM7wd%-&Wߓ÷E;qV>m\oّZ eWlv 169'cdq'WLb oڞ D>7aeC]w1yߪO^AH=2wNjo@&7lsŢL)2jnqC4ڬmԧzۼ$fW3ĂŠDh}߷(l.ݽg2ݼ[^&sVC+"Xi7x#.ͫk 'im8xBd?j|{EH3J"lU5/8W XVOX:?B5x+#(<`aG*t34O 7Ç=HZ2+>|{d5CPRݘOKu>6jv7HK\m߲фǦm,%VKn@c f dLwY2ĥ/Y*PnNH2+{QgI-l:{,]W C &zKrs7U^^fuz 6#eLuj|Os+{^vD) KR’=!p13&f8`J<*3{GLO.gGAA$;0ye:h}@e'7ea: *J| y,/BO'1ͽkYW#c[Z\ȭu-Fv ݧKJ.;*["Q5-scx"&/}b lG:<󵿞RupPģ'EZ6f 6:'ÚS9'/WF84lzf,3$3g[%h2'y*C=l^F_+rC0'˄ dq4vZ;3栒kAmf~D*8~^؊LϽv҈2>K]oIiM^`$UYt ]N:\Ƶ <a2r ye:3 dGdf(n5< 6'-/tvsf%012(]KJ[06F 7"Uj,gc?sżՙDWtK,N}v8kdZjD's q .|N̤ࠫB,psU[M03Ui ɘlL[1)޹W `p?r!kE9ʻrIO8eM2KB`nAS[mb ״#SL] 2뒅Ā;:w&Gƻ](հ\7q(T`{O|?D'8KGՋWigA#[1"L2ddRA@XR# ,2 3> ᵃ\O1}r|,_2ă ,AL̈q;e~;j|%n^҉2v[Rq^ո+E:ɿ:hq%qn+i!Bd2ihJim| ñdo[d)z. C'LQAY?m rnޚL!ʸh/٠g=c&2.}v+5Oџ kd$1_Υk~6T; 6@ҷX4 2dyMNJꪐpN)bLYta4DNMQS %.&hP( <%RaŷolW@҇Q9蹎0mS\<OD[F)LQBNC3ivq7@̽*ajxvsyLbX|/[3(_X*NiOƱ],#` "A4C 5iB0&c;#ZyCaz5/}]]6`Wtf02| jmt'JCM8mO8FܶfZ[/#W oP^OY*s 2XJxAWÖ́8(F7lC8˟ˈ27{xLmq6rqhV8釳R5D4t*`4M~SZ(` m'@\ga/d,xڡ#=_$"r.'>MƊ|/%D\:ɢ|s{t\Ų ]Y4HJ`Ub,frC~zbqO持fK 5Ш ǐ kŅ/49Eɇ҆ЫFuo偉'mL }t9Ы4 5kƝ7eFj(cZuCAE4`%MD 9z 7|).ɫf_NQ;רioutmABlcDn}l֩G& cI[_< Eqc0%kJ X'^ޥG5}c>iiq~=_g#䦕hVC ">U1ϼxdjp `2YlG `"p,1LR@<r2 _zʾx~e\,7SS1,4:}zV T\znӧo&!_)oD s:|@D X|1Zz6@ֱVC5hmr_T+& ڷeҨ\bD|RۀUz OPH ~tjTu.6`w | XZz?Bk\;Rm1u1-Fos1@6n)t*k:AqIR!YA|8qxVȓ=eL2nڴW+c0V9,\*;J.f7ڤ*u,9 3*tG]X;%/: t2}YӁ?3"} tֺ SdQ-'*μco͗)tރ}g?]Zh4{*У )KdnJR*ks20-"y{,3suZ2G J2?? *^grۮ"qq5+*.h-ZI5(i 4.26p@ k7og9J>N؀G x3IqGRY])}N@ea`ĊF }^Js?&=rhu6_PoST9-pnGEyqOU =1'%b&gRhLq_m*Tm WٌI|b)yV2c,JJ:   ! Ӄ\a9Tom Aaqtƾ ֐S;2P7~ebq) "ѭF)D4YIvt4({yQ"rW-)9Q9hg0ZR+֑!jM&sTCHk;+!)=~I|,-O0rpXN zӞ1F b% xj չ/EU*f"ö~243oLId;ԇz7M+ld={u,lb62݊m:Sao)Nޛ,9RDDr@K[A+i$:}2clzxr4۷[o.>KT|,_/\/C#d4W<~W. L>`lS9jtE 7I NΑoH ,M(e0d-Ζut>ʥg%Z 28c;{z$ X+\ȾFBt z$ːጞ~0S_v]uSKϐ>nb*KPSc8SKƬ=Mo];wL@Q,0Q` . *:9߻.Y4%&Qc{\A>rֹ&`!>h&pyxﱎ}7c!=CL?p0 Py0ArӚBUDr97GUi UbǷ/#B<&:i&VNF.4smWS jz\F2Y-H͒H?kٷ޶rg3pe)\}ky~uHpA{ʯl:12ޔZ6X42v]<=aaHsQwº8a CxTէ?7FтcFQ<76 K;B'HA=Jε7{ >ckOA#wV/(]|jT!e<$$FԥDK PcE0SNr`JCms'nIѣGMRS])̠>z*!`5ԀSEG54}頰I${` 72+=IƂsQH#|ubyҔT|HAy6妑Yk7Sv0V?)rU\?B2@a8}oX((P|$Υ&ԃ,b%sG IɭUEhqrќо򘥱D#"]"%ӞzQP7y$h΀9,ߋ5ϖ^mgw6KG\DQ휯0xZIV ɽwi =c:~ +'CшV <\iE+^*D<]\'Y Y>%B8 h{Ѩ!E˿kўD+ {|c0K' *T/Zf׼}x{V F>JM1;? /)teᝯ~z-% ՅOP穧`L_^]fIy@fLL>n{?]-M7n?Q܄-\KY@Fc K;_7'E C:}gz*IYvn4ܮ'rZ^u͚][@Qß<"BGK34LL-+r"OSVJ;CzvL;CC_, GCBzcDy{6a0H1[ /,?uQ(”2Fp/N.rI4gA%pR_J%Y&Rxdv MC*"B0_[N_EMUx}n%/u#8/ [pgx@_ .Z( m,ן~0v; Ż0TtqS?jO|O\`5GɲxHK5DbM64U A~Θ૛84~K}'l,y5av L%cEAw`=j^lS5qnd4֖z\9S Htd%I3:"PN!?6?0w dmsKa߬p~1ո6l>ǘVqN讴+etT q6rv|Ly%j^wl0C^]40YjKh.jjKYr#4 #Z^thxxz Y'"Ve+݀i[OEސD/_Dt?AL@Q)keˤk%$ ?o5_UiS|e>c}7Vf>X_$_Z|$ZgDT^K@.Ffow[|/njf,#$5d RAK\x^!݅aeD_d,"ja|i}'*4 A929g _pdf;H·,Í;G~dGbouz^ؗ>nZ!=$΀wpc@$ ֏RԮKxJ/TWR5%V*ʣQ.I]K>Z߄7gkpl|ġDp7cpA;oM4yE Z27Jf>Y*@_\b0@k-@ fnkD ˠHx~z."zޘ$@P:ٜNפݐL<2U:u<Ī|8S]T4B봍ӏI22gQ$Nj=Y 0٩u䑶juȍ-VI 9.La6ځXLQ x @U2Ub. -yFJXQn dK@FtQ$a6GxI|`CGal3ƵO3lf^fȚP$)#W*|8V$|ƚoI!n;V(jzV4?_l~F%ɕ"s `>K2a޻\uQJF84ag{ecAu ߟq=ClQӚ$nEU[ߺ+%>lO^%Ck:5IXZ- 2/(US MNfoe[ ^_?5ȷN%aNlVU YFL޿=_=҆Gh4D?(㹐&eJtg us&B&`͊w0ʞoBD}eqwe/i)*plKhez0oq;$# pP_At7U6mb8.Z g8 8Q`ilF`^DxX ;!2Gvp*#z42HsE>r ]"R(,l7jQ]Mz-@#D˥Bc[N䈣e{1e_fi'%>Zaں`4o ®!0&8*v04:Y'&?Cie/;« dwPg3)-+\#y3#WjQ8U?աAd˯qC5seبZ_S]0Gtg3/;qp{M{]oS_g򈑐%\UDZ/uOi=&%H]Po* 7K"IiBDž c̭>]6>ccxz2 en E|B(vI8@րtCHV[$=Vqvؚ[iξܥ%00wk1F"UƋxB,&S$T0B>:ȷ!cdW2D(>Jd |`+dWfsd@ixYYJuy5.zZ0(מa!az6maB1F4wN;=h}d1RCX_ )\be1 I"BRzo1MYQ}.i޷lk߰,YMyl!i"3P۸"*Bo^mkԠ>\7`"VZ3 mGI" ϣX, z+lx9džs?fwOߧ_(@#gH O]A3Tuuin&,]3zYQTԯ ,{7+gLai`xU#ilKNB &ѽ|-5Vvߌ\V'O`Kzz Y-޻ɖ h7ںez \bbʾ(OC(/\!ݾh;:ne [-:$oqZΚip͗C0@*&]xŭxC^B_шx[+;)ث oI 5 soM)c:< Z&>Py,FqU ʅ\?˕@C6la#J/p0JybmqOcS0t.y1!,*%qR@TkE"h%ԭ!^k=Q ׼;qqY-qMJՕW9Hn 9Ji"&ɩ2yjf6=fTx%x2}Z#(8[ qn3`ej;/rFIz2Y2эn% (GxӞՊk|H].۸}TZ( PZxg=O&n^\ӦW 6hcZFX Mſ|]⏮;ͥzYItZUUT|Hz`*1cE0~j$Y5"XP6pk>-SC""U*I=1Vh.tAvcbU-3 yoϥ(εZ[/ukeʷq(!0} Vi&u,,wM&t6pXs2KyxdDMEGgɂb_:"/~p*'M$7n8ze>s X-ƍwv%b$Zr+` D(_G`ڙۊ+'b>&Q*T^-LL <c՟\|*ac|aZ+FW`8]v'̟yQVDy{=jh5cB[kBՂ$^crD;4#ڌD/n2oPun3'&rNxwt3?|tp w/ dڦ,kA=>Ҟ'6A3d "9~ؐȕc²zԝiIg0t 8I몢e>ј|noqgoGO-d0'+/o5r숁ߓD\^br B|cc8\>%sF{’A*&'C8Xz4`w#P*{lpB]^/}etP[=}D~a5}G};|}]fzޓC:%ޭﷳFßop\u}_BgB/ãN7OW}oi}'}_n}oo\oskڢ荼N)Z||Qҁہi?/s*'{F u~[o%꼇(MG޸4\"  0GNߕ΋CKbPՀ`sQ["h][_ݷR4-7oO6mZ)8I _SLaq=/`fX#+N!2xO1yTEh˛ [ޑ^>Ä?IﴉþBNj߮3rَMjcW?O;0l%~C=w J7(bZshFD5f=%h$_gZxȏα<_PMA IVssjp'-TZ^/5@]UA1AeI قPA5ӭ5Mssei.t?yРk%[' H&ܜ'8FoM=VT_Q[aRPJ[3%R6Y>Ń@F}WLP#Vor6> k=€l9i`GE=8MEzucG#/M}CyR2 jq# >NxAP[WU{C p%XXzlM7_e"(%Zr`K0*ꃖh-O*6l *uY0N'CAV!{e1k3\K.}_ TkiNmQsq^Vtu da2b+jcB:V6 z*%zT(ߐ,JkZapJJiW.$Qݔ@7&f5nCC.  Ӿt"ɊƷP4=14|8t& DC(Vڼ%pBO3`mo&*`q +2 ~m?ռ߼: rCG#[SzE<o#KNxfc+:޳ hI3b ڻذǘ\A}sMM9$@i>=H9=[?bHst"Bө5Zx՚D]Fm֋wsĊ^)}%()?cK *#zʔ߶ttOKB 'S 'FcK SH8c^l,biLKn.erͥEk(Y#|N}Wm-$bdN9679 NDžp.RE4;C4vYFnخ>"B:<:s! -x+Qg5"q&Qz^v-8Q )6` L b@V~č{ =WbU`ǭý\p DsD&}%W 1+$y a._8tP1#+nE$_JC3gˢk(:)_![GfUTI N940+RUXx(o ,M}?gr9Q[ĕx %$ġ] Nv.^nPjYk>^sx3?*G(-Ɠ A=AZc˨f9.%7Y;KfL .i\:Z8f*0b>t)YpECkx~obdo2Hvqk?hnj+Wjt#i}NzTӭL<"wN㳛C|)1h >OLF}{9ƫqz{@{- W^mV67.}od:F/Dr5=O7|@~N4C9%H=ͫ$}/!mof ڹƧFɗI@$aY~ .Ev7"?PCaw@PwBT;1ЗpU$ "/~N9 #1ƨ 4C<&Wt{hX:72Pئ8rqlJU3RТSQ!%5g!wC9Y#I t Νѽ-dfVTU pZOfv{:j٠VɎ2hZlJڥ"\ XŹ.Hf[l$z^6y; ޏwer=L9WeEqMasfylٳPXC+.;~Ƶ1נNZvx=khx"Wk{*~aYKF )MGߜR+'%[*O~ ݠ %͘ kE'. ub*Ϋ ,kLatHqSQcTUhCx]O({n{#a3 hfĭ7/ X2(lTLM)2GtyF GR/j 6.\%} eLDװUgW4#wM+YW^1ZpwM^n);fkN+a0v"rWpTJ8 C&+q-yXmk1e=k-$<8턣/oX 4kV2 vahX<7O &W~J̒2{H75;e{t]:±o &QWl!P-hp'qc'mUQ׶ܮV[Bz3jL,2yI |2L 2m4- \#or? 7dDGE@;J}CMq4l@k=%@Fإ}dn{Jyl= 2A#3_g;Y,`M]LlKE^ 4"7µgZ'Mc/8Z`'D: j.gȒסea򢘆Sֽ\mqY2̟*(&Qp47-'hrE ^M;[h3 IP&5>f}@fpDk#aKw//#3+:J(9}HCv[ھ/+>F"[)z>ɧˬrȐ[a?y%O˗oSn&g`% y0tJGU2k AJm_! N}sL 4NzEzQf&5]gDTxI&>-O>46 uԒ,ZtFTo .e狻jF@>4Cf %+Jju~.&-D$0@0G<̚'z=Pi`sj=X-R?It^҈d~j=Z#hU:$5r@NM1۶y`ҚMN<,qԳ=q$^Sڅv]N1ߚ]̚$=y_uDo:}XV^3 uQ92iIgziRN&x8` S|X7#t|'aGFnڳn* _bD{"(_nR3  1 T"oVd╳xW% '4?[>(`O+G%uIVݚ0x3ٳJ e<Q%mVJf%B# n;}-s?d4n6,R\gP\11ⵣ~Әia?tIjm[82e 2P!%&~SLm]^7xvYk^fY3~g9D.X>pWhZ&؟m#1k|WAlpDs;;؀kţ ^f{n XI Fނ\1n&qߝދ?,%+b ڰiIaju30 8B H{Fm[*Kb}E~ =n7悙Rb#'n{8'5K+@NPQjC<yܞ@)\ޒv"+G>v cDQh,V '\NtiA= ~x&:k CQƆ4;f>OHGL;Ў]/6 o8O@B`3>1QEj&k)~ FJʰFԲC 8qf˧@Nոڥ%rwn*.0D_lHtu ә PwV|VG;X nzsan\b:2(aq խH o\"j#B4ai:$ 9X=B=}pͱCgm@&P"Z߳4Ҧ8Cy+v+Rq_2uU)Ysz̓S@nqD)S%'_Aurb& 4wM_M2#P+I lٍ*BԇIKn Cj7- >IS(D߭G·6$֟L+[vzЖ7>̱75\xsE+}B3dj#"iQpizYքJxmݮO&9 iu1DَD9*2m]Ku֐ɼC2@p+v Gc.IIѣvQ*G*NH?~QSGzr\#ْhr \ʇȚCF}!-L_;WMZ:xY{ tfH͛eQ@q>o. (g:T<f"E}Pd#9tIz::_8Dؤy- s\TxG5>B\؃JM|j"j뱁oKDb9orERgӴ֚ շA:dڳTC{C@-Gutd E89p}s@Fqhzscy1mh5ZT!81rWuQK!Grd(Ѳٸᮔ_d9  r!)W-VA,֗VӔ/l7A Bwc* I$E}d6!5Qł qV%.oV>6_FF&hyoZ8?N[&\iFJ˽6#/>*4@Rwx)1Rq{K:Z; ŤZ >Tjќu9z L-?%7\h,/aĚ`\Z~KA=cvחY~ &? kU3#}dy aʜ <a45`X^T2:&`4<˂ Os8]G%ѬAeuv)A"[@Oa#ˊ3xu29 Vdq_R:Ȩ_&gP{֖` N_y ڤ*H82lI9_B3Ŵ.Aq^+ ZnǐAa:jN䶱7`K7[:Fg?ӠJS,GDl3v?6Dr8>r0';5ռPɦ^>P~%dDSFj“(hdOڄ0> !,9*h1tCMͭ ikDd%}]]Ĵ "EMey(]v>έ@p .#0G@[%g47i] 7Ubɂ|;LjK@b cY:mb]-{ =cNBhvg3itE^&AsDZR# qnZ}N\xo)W, bO"Vxvʜ_ޤmG1"6Pjyҟg2F!\]9>;?0u%"G hF)VX9Wiٓj]Mj.31 ~;yEKaxՌ+Vgi5$D3FUuNa$Cm'""cNg*n8Trn+< ;8-Ǹ:x耘۾xO8pkU~)1)),۴rD3ϼmW_Ej%&B]v]pF a]C,Al X8[K3R+'=LvG8ŵO)k; [6[ڡHkjJy|L5. +tyM-ChJ|FU>1 vM?^l8a<Ѯzl>J)d,Ib!%7*D©hq#|9rRWp!wѐC;Rh E@ )]{P9B-b?6 musulɲj:%u5e*os)0iy #*+EdžzBX03n O.MRXwX̸e,"HdPjwNLEdo.6,hۈO^?l9ot]t_U>͏%v&Ow3Apjkq9zS6~W"%5/ aWw5o4P0Z WUF[\`:̞7tV1`StwNs5v} #y|ˇ@"Cec:thʰ5FtQ|N6pɡ!O_QHG1|;G{6tρ~{ҠiΣWubU!5rz/d'5YMt]ӥ/ݷLBYxWwJ5aFyұ}48ZjDkS>( @!)[D.FxQՎÖ|İ _/&-מGW]ޑ &2|" {:ƽӬgD{V~iL((,NXSaT1'P&a'0T]shOc^֑9٘zK"c, 9/Ws :Ԋhҥb̤EntuÖih 9!~,V4[40ѯz*_:(ØL蔧|-jn/Ob:VY`^q`D.-"7Wc&n~7Nd} F{uމR K`NLW}Em["VU{}+4WEtMr"5q:Er*B yHJx*6$__u7<@#?{3_⽯Ȁ,.5=m[0Ǟ~XuwP:Tܵ,ڠeTZc_ԁ; K* VzkJk5YFm?%^E*;g=߬aBy; MXlTDfo" V j!h ^(J} Κ6 Tlyi:AlЉ-/`ߠ/h|Jc<gݞC9q0t4C6Kw5V P@yY/P7\5Iݔ˄_?xUh΁e?b ϣGMnDiz$iG/tgT"iŁd n) a3ӧĻ> D@>)FK!ўC suH f]\REy#cbB%bNؔa'Z0(|!ˁόʭ (/*QRY;6;B=:Yx-iZ| DbFtCj]дԲڌVn+Vчa4@6ڤv7in1kNfN|UU%D٩Z- KWRRY5YxL!52feQ{6ߚA(q1\cna,4= ڿF:M[=&kdg Ǩ Dw^} U@Q۠/֥rB8 o(نpG%%r -_FTwoɊo_axH1=5 Q,WOTfڊv7+i`6A@GX[aTpK#, 'nd !HX1Y~`S9S]Xzm#ǩ y`=x-KR8н3Bаķ̱ƕx q4o7xѿ@qaJΥٛ'LRk 17mjE&An#8 > YlK $oѨK˛61l6* Y:(~R<6~$x~M%ι|e:bѴ#3,a~}Llյz/_ pbyl+QBVpv1̓Upcs{kr00≸D24@&aO8sP(ڀ\919C.&섖;[D6/jLh&‚у9\Kp %43V%{|ihyk{[9B4m^|5u×"ݨi4F 3Sֈ'xh:t8`,C$;kg/i5E31e)*©-d`^?ST=ױcAAbYǚX(S\F#ϩ!f$0}y4,"6|%ꍴGbf^=}ܩ+w~Im]H;Mt)h-_hWnwY9'4SԊwծs;qĞz]`ȭLC>0 c4nE]B"jG-Ln}頟u׀_WQGT=߯쮥 5{opbZ651WTUNt &N儹K ?,,cн|兝ĪVt'v::2Mb%,/&֚A#26E-O'Mܽhp#Q4iLȿQSs/9$pv 芟+d<5i4JW;m' y 9m+u@Nul2"SA.ZVϯ)HE}Cvj<@l*FG~{Z靠Vܲj¬bt߾чל ʿ/Sq"eC/hX %߸]}V⦽WYsȉ%tweA!45Gt\WbM$ ۈ(:klYMZ;9xJ9DWD\>[#Smx!+1Qࣣz䣰"V x5`q3)71w]juyd~ɒXi@̋g.Rk +֥S=42]>1KF\A/z[螉b-RԅeJ##9Hn왢<,8t5)n8`b_HBxveزͿ)BN f[QڻQ-f#ZI+Br돈lQ0AUSF)SH: 䵧7tt"W^,ػ,ΣaG i<߹lccz9*qG]PPUQX5 Mw!sMAҲbӐ)k|kUO"``'N.g sG籍J1zi돦AATl'^:iqU`[4`ߓdC(!Lo$7)E"MČN6hjU9$ӖA8D7`^9WOPF+@@ccF>3DDž &M%ϡ']]:NŲJ/._{]-ؚ1Jp!W|̀ٵ#AclŅ^xb,0ֵ:g\rTGCi3FJmeu6E1sAsݙajԷ\ E!/\JՊY2Wp (Sa'h!Jab:֕,gt~O=TETb U{۞x:OmtV.ƯXD*ND9y [R~XJz_%T  iLOB9ʏFgI>H^>u_p}s)ik@iM˺A\ oa)Φp1 ` Fj(n 2Plb)y u1KMhN:8s 븛lJkR"vPM Ϥ ,naW9'R{!?Qh(*i}xZ?˅ K!uu 2Ö]2hea|-sӕFW!Eė3%- dYݦ̥sh.7TږRW1\UOE`l}[da'Ld[KGi"91" 2X*o)[a!?8 >k,1t.%cD~Щs PKL"^Pz\,o1W *=]rH߉w]ay~xzM>)rAs 1Y U\O7#tyuN3WϔM)R<#C{%C`ښ1~V3cJ;̮R9j\` 9[b\KMV̪ܵ*00miVF֣g&q |ǐRQ\e VŻfyr0)2AjcըN*RC|sgtvf bŴϪ u.Uth%-7Xkd87;`Q+FSci5׻K9#GxQL ~%$l=S䝙3DI$Ȋ51A] @{Fvf]mYpwրGd,xkj焲*^{\r{P0vnH)C_eHP.loS[[b`-?.oe1NIJ8sT\hŮ"u,L-[8ʹn h U 1^0ftim T1AixR2Mt˘Eݤ4I9Os[5m ?&oӑv?»_6Uc;tkar^ pq[TZޑ&*;N<(u܊43ꜿ^bxB.RޤX Zs;' T_։ FxjY'`T( :uTn{ծbo* z[r;\(:Jm<؝31b2Wك:?sSӟ ,U X ˬbg 7'0$gRb s(}K2M& j9vjvQ{W]^!7= @|\k5 @sZ>f pZ 9#lµhl׏ =5MdLm К^C7֒2ΗSm;WͼVn F5tM; E6 10|b>/YX\iilcTe=H9%*h_%,6cD-%ȓ<[Pr1 S:d WJPcۛr@_$3a.&J+|teٓ׌}30EbZ!,FO] ū3AE"S+J`l 4R@aćo(QoZұŠ{lc "Kշ'Lgʙqpg4~_//[-wBх0"LE6{zϘ nq٫WDuQr>əd/)]@<T_,d79n)~f-&,Œ;Sh9 ]:N)3Nu-pC@sW+\O`s`؄m&WK8eBZq Ti6 jxuҶˣi()@`KS'4H_4>:c6eĠ_Dd0Jj6lW?1o]@=њAEP2J&J@,a YE\财K{RzE 2) ãhkLůb!5} `uN$v_E|4Z!fzߒNopæо`5@Xf PI=/@:0T%.$ʦGڌg"˹plV?ώ-x$?ݟ_#Xч"`U1(57~Vv=?JJpj ` w\y_(r g^WVĔ;)pcD2Oi_o31dƩ&96i##rFﶓ_6M-Kg_i~pN@VX% Fbg1`t}vo֙nYcߘd,k`#6T_5lT,(MT7S)+/vAIVK [Mpo>Ø:JjUB-:o&yN*x՛M3) orf۵Ծ-\ O7`e)>w'oo;3aK_kY5kE/sW<҇km#J3NNC{_"i voH^pav:qd?۹atUW}.TH gNpӹ0pCt}_e[[r)U^iC W_XwGX"s!'޸NPqvv9e@!9Pd8&^# $`K]%3Pn3]{',|jKMWY얎mV.(,B@O?])8dK6['u_u^u6Y,2'-i#ZK;:P|ŒZCVbk}>p+Ta.sͥ0Ym,RfoHмNm"RP@(֨ȴ5&f\\FI;8o(%mT4l[4)ۮ=e8mALܮheL!lkǒ5 TEqu%xİN7-~JR +/޻r*^Zm^b4/` 'ѧsh\AO.^F=Ivnwfx6m_:D7%-."LiQp%߻, 56QĶ%aL*4٥wKBb.H'Yv4xJ[Yg+ "ZvL`,}0jA`eho]xKe5Qud}sӚcFd˄gzt5OqƤ?N)d˹3! A6֓6|Aˇ`ERy-Ż-GPW1;&lGӽc.AM3Yц-{'X; >%>r 1GZ ŊŐ?chzsDo&+D \&斅D6J&fh RV@+"#G" ZGUbj?c4{!+8))HE=Χc2#!5xY v~\xD̃OzW%&Z=E ?JV` hML ^29ę-cDm KA|.fP^~8h?P^mpJα׍:$x6Ӿ0Ԁ1Zi(0YXXH}P^lт˅kwuԻ|}9kFWorBcѫ| BZrÉp6%4Ijm_[aF_Vvc?Z(xs֛V Kc@Df `o zX1^qV<ފF8^Dɦ9fewQ!xgKXJb2< "t~SsA:E Xy/ Exփ:Zv ` xEv S:Ot4Nw`ZW&>Lv 3t%摲["m58:bD䐉4H;5R~.y yca=-BrLÌ.FN6 n[l'g)ѳaT0&Վ[J5CQ;#_Arws'zFJOAo)PIut3_[psySfBXU[:7Z66H\-֬ʿo%)nsdύaXMa>"qis)ά3'om/x(\|<pa#0ӣ"}5v4kl_ ݓ\y,8gPڲuRDܳ@"}yswv TPZ-H0 _>Q$b)($rSP+ 4uX5!<%5 h-c0j2Q:2EwWKJR#BLA(kڥ|hM҂Uuˈ'I4F6~ ӏ >"n''%DD\{N(O ZP%eb݋ٻܠn`{u!:WEJZ.+48GC)iheeB:Db8dk 6{uK O_g`\c .8 OHnzbd[,_08g1pF}HyY`ܰ"[b$+6F  fs<{=icѨ%"`2]9q=*ZȉljpG4u6Os[ڎ Uh6XN#n .ʟ!ψdQ25O1BX^܆Q|+塐sYVpzܞ\yy/hWzL JiO4ZuK`û,[6 nws@1ş  T:!F2Еbp0x.Kxcg}WBÜ jLqXEvXNRm06 %瘗@`ro"R}JCm1)t MĵJH=ƪ #k= z`~wT*udsf`X%-R"#K`)1wcn#)1W7ɢ1}^┤)3ATĤ'9a{/ΩӇ3<Fysן&\~߉ZIoӶ¨h>yy뺟己4O٤T=1Y&}k{42%o3+x.ĐКSN,x(B?)7vw4/B: NA>l$l#CXf ۑ\IY 박sEfpuK{)w/+Bo rb^Wob '!%D4p%.AyNJHH\atM3cΕU Vh,- $,^5=&~~碹֪#Q|e%wfyWlJo-Հ|Y{,6opJm\|IVO:+oAOç>@km+-凭F44U jbwo4%H?PeYt֎g?Rb@d)&xFc:+HdY3grX@% ܒO:.g@[Ӊq t @⏢}p[TU~DU8= 0\t ߮>IM̛Dl+kj#d7`!\>i,p'N H ňkނwXhS*?8UCzy[Ⳛ$R/3$̬  ]a&MEM@2Jį;GHj !z#Y:UpC!MHO\?m*TzD7 8ޜ 1gxA"-UвBEgL? rJE~%7OZo%u#c%76$xR?ՙ> KwbeEw10F9w7 1 D=~" rzaueIrzA:*Ġ%'c  >.7- ԉy1({.(C"F^{-[!繄lPjq vQ,+?ZÌ SF9&eN$T:Bghq.ĠZM𒳾 ЉN:ڲH۵=IBs4-ZMRYفH+$܆{v<jQ%i j2r(.ݎ=.(okM |(&yBДqQ%Ң5?7;gNd(C|U2D C˯ sCKq(4–( ! "XZKA Y%0X KPDŒH, v:KG3 ʨwj+ c&ܡJ]eIIb5Ho띆!L2ؠfY7r.T{Ьc5b y2׎|gt?/$%ɝ$jn'zY 9'!&{ Ml?#isU݈ZC27OTc_]dbj3Wo.E?BDS3|qʲB(.?vrֆăyL>v){/}XY:JDȾ$`΅/>1U$9Wګqc(3ݵ8fWVWM 67Q"mWh" cA\fa%kӪ˭Fk=!ۢt{}-%"?<`EEblO dkjMn3EY"eugYNWhe3'(l/7*nݖ,ŹI()VlV 'VTgE-lsN/oƺq-vGà.I,W?2ɻcz-^1,OO$Z?Կo^PzB'=YJ*{/ 5nXuߓfB& ((=*`K3Ѝ ]A%@JX0#m=K9X#5b_  ! ֫԰yV|z̗+C z"KP Y t5?ϡ"`@jk o*Lj9A5. %D8%x].>\ρ`w!UجI`s8jI]H1Z!na^.=Spd4\*b:ms/x7z >gbd7=S] ] vԕ`ʵa:@W Q`,7*XXJʼn8dVW]d!\4W0椫D7NSƎř٩ԧ \p/g"ͮI4k5 u͇4X΍@,Sv+߮Ρ dzrq&}qvKEҒ1 {F{HI;KAtGa.5(j+$J<,Xm* aNhT ZN+}Em0־@'ZSoT?YaYe>><25ƩWνP̰gꠍyB(a;=R6/Tu!Яy#*4]a>9=Q@j&rE AmݙU{s>\eJ5lpOB9+ESn{ |inYp(@2\M+L6)qawF)%#ws*=qU>qjNum%jUrfNx;%9sK[?9H̼" 琇(Af|X kq|n'j:Cõ^2Yx/q|fj^8fwsJc_'/Dp-^;p#[lV`1@DcR]h+9@r׈/2%~xW=eB8}HFØ?$h;^!U/}T_1*Uyq0JXlpo,!&D|Rz,GR)7:.MTgU$h: 감Sk3|7j v<ʼnJ#@i4jPI0nܼv*gƞ^ [TL.p  []V8 Pv5/>ulyW N yjj_o8?SXVE[>)Z>[]??V KpZB]3~+ܷW]d~*]j3pV?U_+u]j7[_WZQ/0#< ˣNZLȊF:Hj͂]Bb6]wS,NFGta5Q3MFxOJuKb2<g>豌e .ܔe#3%Lu|hSPsɿe/1"͉NѶUcb|VќJ. Vku#/Vd>C%ez/5ۃej/X˕@Y}i 쩢a$/GYعr;N9(5DFD_YRqFg=w܎@{YXWc3DAB_q /9Mc|K/}Qv/t?33>$L sC2ęitE_XOUi;;3-,hy&qΙ/țe+RƜ .yl_] S%=1HL=k/xo4yKk^ on#ݗ *#j |*ExlVNiD'6s 7cTD2X#DXX;ޤeH, 3KX~`G()̛)F/ƭSuK Y%nք+k|VϢa{ Nuɨ"SfP'#Hd`-Pq' Xa&\C&U.jDI:zvhGtVfKfa5,}ui8<Kי0KSpXc#X1}>(h@PBNkߓ.lsC\dE~Cj~wR,lTv*к̼94D2 Hۀ`CmR gY鱾qLj_{FL!o/vN[d2Y\>z? @mv,e/}j`h6"; L:8&O7 g쑺xk<@`ni~Ǝi wBό,5%INȇuԣ|'[/h%'Gx/ ba4G=B [&ed%8YKsBZ` 2PU;hf6X[)U!2y :d\ Zղp#;۩]D`Եٽ¾%=6:1b ,s#OIjXk:seX)!+S ~c1"1!7'eI"_C= av3ln W*GN_/4fӇa L/I%#z3!G4`P=X%Q<BEAK@^,3b+nw] od^CfRxw|ޠR1,^e,̍!biQPJ8i 񹢵f lܡG] &[p+jSbaӫ㾎ǯizvZn_=݅ӃuSOKGVaP 6EciܙڳZ17Kŋ6iʩP~*򨵇;⬺&n6ə&lI`4$.s4b҈֠a\2zkޭ{m}yjA%.*v2r2R(uP+W ZHiwȥˀgCi2O\/:J y]s5L-9$BnIL56΅^txM<˳'6݁G/yg ,$G;F"<) No̱?3ů42+T1_:*'DV)ZBcc7N]Ү+#Ӿ%C#F 9,p =TӶ{` X|=!ыD *=7Gj;!D`%hM|i+BګU?9JI>Ӂ_ydlrp"9>&+|_|%(ҘVVSLi8&#W:6GV}TIZv{cCckMGtU:"fP(H K/u5Y~ub)ҡ\%WC0 9VjE;?x-s<4n'c~ggebK:[Cri_P@vk4;Do 1 g7Bh@R8%Y xb:D}vuM-ֵEx+ڇpb<ؤ$j)6( D<7Nc$K1ӄj,({1@ oOL0t/ T% %qUU򈟓 !EQ΢Xu[]Py9a 3GEh_E}=?$sb@ IUWZ6 ̅lK]y11ɬ&&NUv<11T`2G~yNᶹ Տ3<-4Ŋs?=4 R9GFEg0.֑H1Ǩ,2Zt8GPچn(8\\p j 0DOCmXXv8  'I/sϨ6`bAMݰ_<[wDoL4lLM4 : Lz&CU_ ݼ _Ÿ x,( VvGQIyY̒=íca)JIdBs>aG;,<FuUtupOBO|E>4^G-!quw,RUA59#S2ʍQn Ƅ,}mJ-[Sx,fٺ>'t~$U9 EGhbNDAaA@>;*~I:kq+'-^Uq Mng%S zu7m2f5K[ d0~گn- $Ÿs4ODJDv\ۢ Gu窘T)_cuSHwـ(=7ڥpA6:.~*\^zK4\K(1wc :Drl+LlNр8ʜWj)@(@d)d^6{^k&/H_DƗ͆}2YModN'} `8hÛ[U5+bWUjS롇&8ӹ*1\"VVKtW Rg!p4ܛ,PHDzǐW{ qDa չԋU6^&\B'qwg{қI_yAѮ3jT0"ALD25`'GAUjJGj*eJ3|t/AbRX-؍6.dӫoIFS(CK ׾cjk$pgx }ep4C06 wsz$9@,<bJ6). )S;9xgfbt#!?ȝ~x71eH<=N%Q@qS+2)~QE;2M51V뫭˄!EITp\s]ǰr\;"W'6" ]ୋ95 _Hb͏׌!F@/䁵;h=ZSvzĸN@l9@+\{NE ɹuA,xGfF+ĀR:jig7HǶ.Z tY׎Z"zx4J٪f"a :,h#].Ãц,Iٸ5Bl<\ߜ&B#!;1-8!Y1P`Ȉm`̇Gj*Y}ʌK"x=YfPry&U %m~'(}SjaU`0@5=,4ʻ/a=IZ{jѦ~=a[̏,*d'Az݊QL\ٜz=>̥Dzg7& OH:DsB5UG~[a`+*Bc\Dq0-t-JLq3 ӊĚ9ÐA$LEB\3&>)7߽yq9ys 6gb{iUu ZI-v7Ԉ1gPۂ8} Kב-G;{frP"m ]P3{5XA$ͰQ葻b"8Ϭ BFӛ.VR\rct$eּͭ=G%%\6{UObuo"_<^p6I`Z] ,x(W nlЂ;zL) n⁏Խ!ՔȲm$"P(B]_*!mbgl4H.-kfM<̟$&Iy<Ub5QmR1֑nJaEz7uT(q!ۻ_>Q25rȏև[p-UY(&?kwd#svkŰ66g"WaDQ:oj`Q@_JXnL \ROWH<R`he:bTE&-!wWdu_pqnװǯ3O{w: ] bE*}!ЅUcAOn?:833: %#8Mk{ J0-l~b}7S mi, qkN{C~3 V'}hTv B۫㔳i#B~|*NZV+O%c8vQWG4gJ TsX Z쇓GS%l,bQd?r c7OeeE$!+\ngZ$ vJ\QLVQOʾF <5a71Fǜ._PBv !.Bz9Jt7wV6t ߦF7[KA;5n2~ :35,ިw*v"U0*{NSYm360YZ|xȺgxũ$Rdu?B`Yg:PV9Mt #v\IR?b"W##E0`]M' [/FdETPz؜ɇٳ*#l;߷~G WL6`lHws(\o = HFlfwnjB#o7J NeftK}E.rh$~ &&YiJB)R %|enN}xӊrO?4Aџg*cfGa $?oNS.\֘2VtW7ބ{zvʱ&Z0V9P9%ǟxS?Wm§lYϣgܾwf:V$#L”9ힳ5hy&-bS<Únq9=86i<\vsJ!0G>KN=}LYdIѨ`JZXGϞYŪ;i{zߢTw afYWq{5?n/&ɳW+䵌0/ّ@`T[ІS{9ĭ:S@q]JI6;R؏U0,ƨmW&E3Fݾ['dRLYZMխ&SniÑW$Y4ۧY1Q"ʢ.ž$sꁥ:5*nK`b4EL Axl.Wf>Ñc9f"y`+ɒuxQ\'r#RހQ~s>,mXm\n6 {r*u Rf-n;#:Q7vn6m-oQn;eB—qXc@dIx)5.Uɋ_Iu-ʁ=63~ 5jЌ>; Aj%yaUJCK/wz;qފJ-T ޺Qޑ?JO\ȲvbLN7in^ ^$.pOx([Zd5})ldYXx̕8zR?dܓEu |!Cż;:~QY(,(Zwx.[NoxD, Q1޺O5;6%V/R=6lQ^ T rI@ 6w&ݛbc/q?V8RmXLQ[@0ia. V{O /$i1] ɩw%AiJ2I@-@$nc@Ӂ5LOf+a~|/zP1J ⏦|GPC }EJ=.y^^3/i?QS6dP ڛDM>>ǕRbtJ)xϨ}8f[~W͚А`Pܽ%7M$ήx:L%ECVh5!dMԺs;171~ o! L"={ 3Ӗu`z0@1u^fj\HmG%̿ Tc՛ YmExwwڸ77ݷ>% Kٜ}sef M.d"gp{ra[~goNm:$0iٹnI ịN6y6')668mtAo`Łc Zaأ4>C5c$h)Xke$Pcr.pJ/t],k+8oqq~:95+Bu mW6Mf-|Y lp:c""AYaR!ɤOa5*[ DkNpY:u/HENY`` TIX8)F,P29I=_JAkF]T >?ѬoϢbcO}xI;jH7\Es6c,={*$ H-󮽿 cAڶG^!rNGt_Z6O; mgb5L@ ~FRC5 UR)F1HG=.n]ҷ#=@ԗq&sx"҉G$;Q/9!-1Պc`FP |by͔zl[>AG*\m\Z+ Fh!TA57܈cGJ4$j0@od=fOi&IAF0dpFDxGZ&0Q?dWk~tinCW #^e zx*?Ѯ]^>gj9I`ZN[]P 8HB*xfi-Fc6 /%ۙ:PK.1 e+FpyBUT1;?ثޮKUي5e::>kk:ЈP0 Ңo;ʽV1r 7rl^KV2XcOD'֌nyY!o,b-ײt|hoBwF U7j%6"QE@szo y X v,T&$MA@W"JĤn2wAl~ w,6lY]:SSsM詷a9$hnl? Q]4q"@&y\ױT^wI)VGc(_N$"o ֻl$HeMzKN@6aeZxGU^a2dIeɷGsfG@|)?\%@laffom,[']`@< J砝е$~QoLK?[@6X*v,c ړ!13¬ ɪGg2/mTCkg7Eoʢ*k'R=6𠙶ns )'&!@0Y*l2V&~6\ƭ{'g.,D* kBJX7+d.HiPK:1z(3x55!)#@CYH:FRlJYw\x3^L'8$X+vgs-<Ԉ/UXE)T@&9 :e\xKSu&s7cͲH$5  ?OEz S}O #0fևL]U4v]>gֹ괜F|Kc`"dWpGCx"nRw7%mzr[rl S>r0#AvgNDxȳ2̡fݮEYJia ,Sz +q؇bW*Z&> \q,*r"mfG$ /`G dD6jiuD#W^x|" 8a.`5VVodŖEJ{Ea\v5ia_6ԚБ"Q1M` Ɗ _|Mх2DVR>Z]X/EdEо]~7+h*iĿ eiyM{,e!N{f࿣~<;*|15b"RTXVW ܻ.ޝ,7a؆Cv %WHVX)WR= pwfؐ¼|2%wHӒW3 ÚPeI +!6;M(bdo>,`}PzzXTAzKRj 7Q8TCD {p)W4ON pONxԪY)!w#v( XT,ܖw`FWvDž_wN44$ulۛ./š&}Խ&G$wLH&$z5$!4*xDdR)41뇥(6dѸ&83(OHNJ5`ddU(&rV{`,*rKJ|^Ŧ+,ofge>i_-$dLBMޮ ӥ7Sᡎ*G|epzC-adbK`qNW7a y-!&xky7L\Œڷu 쁓"p.6 0Z6yxf%jc~c[!A[{*F$jbQn>㐯Klx"F|"ݩCY Є E4UR1CGL y{%iJhDQՓh{#uCfKsXRw^$?g̙ i>o\eRjziuY}8/׷]᰻IQnTL^>kjPן,`1Xlxv!dϦ^c=U @OI9A؞.ܚų!SA+sYCJ*(tVy)/ĭ^ZV͊Q"95{5\E\Q nӫ{* ] ![ sdܝDfqgIho$`"lD蹦#X ( ڑch .X~UiNlkh`ax0).ЋX@&s!KC٪L y W0s|ڹsP&ֵ3wsLjcMSqƔ2Bg Vko72\Nm6T~t74tΖӴP0v i#09hjhKbYcX;n YD:#O7簂'"TSDy3e>yN{ gu&ΈWiq_& 6?XFy  ~z5/i4:)mXK̅)A4UQTI{}C2QdmdHicΞgPf |Q4Id=+&9fWY[Rm^}%, 4LiW7y6J#-&Tkv +qSD 6"ы{Ug;waʏa"Kڿ[BaKyɷ_U=AMrI$4U H Pd?s)"/ >}C$7AYcQ8r0dN!'C2NYlZ+}e{P $YΰU櫳52.dƹ0R7(B+k.ⴅ"!(̎dA[H>JDE5'kuCu픱n^ԗfO|ZF2OJrulōQЉb$+C3Ac Sj7DJXk#,栗7x ,W`dF0_iq䁶7]ljx Mb*oK_E\ Flb(No.!)aFT6@PrEry iiz3*7vZ(rO+ 33').mKE~Njjj yiA.̲_5D<8l Htl-g $ IKC"5O64w1OXйci[`ljaJ&ROqK I"(k-i~,RPjv"8~WV: qX APGJs |; Rbt,ח a&o^OC% U.幘UI00$*E`>rR/EG Y.x(oڱ5Ukv3&t JR=Foq[AH!a`]-QÃ@Kgt Xrc))LI@5g)N(T'*9j䱈3!A;}>۟B2]XG8Pc!h.uhWRHSrLI 6HŜR,)CIəYOmkEku/"Y we-*gﵝ?qoEr C]u줿sL3YV߽aFeAKm%q4]`wc+:_A9 ų5ʾK1g \: [ˢ0"ګ1E#>ƻ'e;wޒ6P썰hS[R//Lzni޸b#yUP6ю>2J9s,>#]ЯHה>$/Cpa  1B\$OQH uSb lr;qlX}pn#1aD'u3)@3wXt%( 6N&k|N d3ObkYaGXu^_ N1F\ vRX]WT PsW 3NΏ5kp鷝 8~9@9̪Ֆ41MoOU~`ވZWA6=Bsrǔ~ƛOQ~LgoٓJ'JJSi)+/Ctw_g] x1Fi BJK(il<8uiRx~)< ,R Mٳ\Uu Ź=|vREynI/4ImEg*)Np|%~aZ4SW/dJ&4#&v.=t kk0Pdo%Ө;b!%];L&VP&I?^$*J{Vu G2mJH@$$j;Cj:sw] :g;i ޱRXfx |r:k{mKeԾІgrB 8 :;~1K8̉/nei=MS͢FόeH=&a@y٨-o! <,W<ꈒdcF.S? c98mfpM1'1{?Tpmat_/L3SeX]Pj!;?HYTG 0ԳᰘX6Dŗ #Mp%r$^DN]z Xa}4eX!ۭ(cV7]wnt@SOiis)!gW~Ө%!*U4철b?@~\NZW) LQS\CGܩ,v) kt;l׽-CrA/_5G!Ѹ,*턝GDN3ϽEQ䠁H᧦axFJ$KÊĿ_I/!F]GObFF@1{5B[M.""2l軕$]:+` }kPf˝ {}D!A T6= t)!kܢflE,m8?*$F7=KC+vzWVa ґ{c4>REjg:`Z(r)}*ñЖjeКSS0} 42ΡZrU0A0}DC-OJSnĭD& ?W«ԏXA!ViNY6 _HTT.'_/q #r _.OW~J*3}S4Geb(Ҏs\!o~B-~Įj@$4Lϧ5|:h#4wm/?]*+-@v:׭].zrXDN(Vm\ۥlFIUa:1s|Yjѿ#A[70':KN㐒ཕbyrlؼnHϧx;pkgZ* -1vF4e;_NFR Z/}@m=s:c{jQ-T|C|@ NvsHG]-YY&[& .sƷR`G(T6].Cb{;b@2)QPbvLpEVzĬ抙/TQƢ=$\32\*yɻDzgP,>#Z3~p{|>Q2cِ]Ks'κ]m+W t$moiLсvc 4Ykt~j#X FRP95 f2AG?NEs]lì AfV4dnwר {'2UАjyZΌQj j 5FR#k\4`zr@[$c$Һ8;ud|j*6 :Ij(8Oƴk1VVE/<Ѐ~rvsCGƸ<ԃ7ϒQ)hъM#4 H~ ڹB3 zw`j?8?n&ߊV B-ٕ@aawicĀ:ʟE|YE4-M-y)kv yn@ R:ϡ(u/(\ݫ҅7U:5Tԃյ@i:QKλE ^ ߉SS?ZcG׶yb]wR J֜V ^.ATQ4{?W(aGq\ %!afjH$ڢ7#b#o$/]lAXaa2қ3 '?A&Grfٺa ']]hHEd!Wǧ'"N;|p 1d_xm3rφLZO{lﮕ#~㿁$pHL.I7{VݡN/)? ^&M6 ZMR'c  ġ j.ޚFpL>4U^]> %X@4^W~khI*nZtL2N$.R:Ef˄=tS4.TF ˢQVG1ᮊ{59rxC x .ݩզå_g6@/~/@C_kw?çu{z/҇)~ۻkW4{h+ vk[5op?zhi/b+:W獄 k$EUF{/ 0Pg8G_[My0X e/UH:)aN6? {Kbͦ&>uCxD ϵL൉QdXA#&x6o0f>o_;,8WC Dc:w<{fD"KԣQ9n;G?E5[KĖx>>-OZUenHٞ:<7s@Oj!>S5fI (M(u mwepS\]ˉ13^ n|L дG rw6m-?[&FaiJC^ƱfrV'hIzbMkz[!J)H൏_sd_tD9P8b8->??@GE_|ջ \r0;-G[LTU@Zm񎮼!Ӹb @/-nEiAcp`LMp5=828QAN稊{'<5|ba#Z}Xd66U oWlti=q9㈢uLGT]9)Xi Ȩ.vBEe9G~º*x0܃SD ?\JI3ce:忛M0iIc&B3L"kݴ8NouH ܀…%V8AS^ʍuU 50"h]TAvMwtaԟ)v&: / X(&*_v>$=;[Pʰ z!\Z^mU7346TO7vW{M95jTXX@c` 3B(ߵ#:*?/LIA'=^m,!>S4n3βS; nQ2ϗ7%KNZms#H9z$kš8qQ ffKR̜vⳲv g`X9O#-ɽ%v]'B{;m077J.% : Zz AlkJ!>>>{Aqd FRUq@ONʔ\zlJ V >1] 2ÝD|07䛅*Ig' 䝈4ļ;.WcU>r5"j7MovN1!CwUUҦ6#qeu_C>}J'hc}Uo4-7J>ɢ'=\$X΂pj!>`:gsYFs!cvd yćru >'Vc7~2/>YQ7GH{pB?n9RU!6 ?x# oBJ$%Hd/aKjWܯkK|Y>,լL W`tw]r/φY׹?߿ Ԍ}(*0U2D~pX䎲F8-amP0Y;; (yDRtP-zd3a=paV %*zX3$֥:%NCqiI$U(l"!]Ԑk| 3@?`=$f Z6 *(uKJAIjtMD~(寺 DG/j˨z Nǯ3xTǫƌt j.?D5 hP" ~ZTWڿ[Q9Ɵi3!}D#ecm" Xek2*hό)+B>ZLKUE7&YSoYǢo$r(%"tj WX 9t2q&Z:dC^Tvi2Kt<^\jttrS0bZ1u+L-U)[~=o=Yb-Ji'lez2aX RwwزIpLL,X@!ģ#n/Z8:PׯlҸBr"˹Ah- Do L=IXe]w383z2 [S_J2,4)= #?db٠یYUw edۖeߡI 9c"XAS[!\[Lxup $C z!W;f%;kl\)1W6v9CσUuFD(Rxj?Jsѳ"ٷVY&eM3)Y}aćݶI~NvvIpNXRژȝ 'rBY޽] +Az݌)~y2Bmsq9iA[[vd5=֙O;ߋP. cS#MH_6C.4E+NVov i<۹$kfȖf[zXZg&sV~J؄)?ḅ8_$O8BӺ~ 0 ׵h+a#5x>CbR؝ vbԿT:yxbW\$]i:;@g<[РGR;Ɠ*~DɖPRTH􌾬%í_@c2'XI#-ec>UF~}8? OY]-Gºg5T!v&'BP{e%azS]:?j;˜-im16>KurHn褚VOܢ8ZiM:f^6YŶ 7eX(6-;*MNowf rf;'>qG6FԅS`{ᦀND Lp] V+W'@(u{-P,Y.o*#\!4W|ʾxA2ƅIX\p9 ֙?oecˏ{2GBj?>ymÞǷuwt--j(6rWbDh!44ZDsE9Frun? lbo2͹vӭgRa//$#A WA9Ϝ;ā{S(jZ{*]XɾBh~^<ʄL?q VAFŠOȽO;M,x 2Q@l6$Oj'6bGmViQD3`#%C͔ThS.z炳 `JIeį7.t}vՃX|C.^g*'A;jMﴣ ޵Y' y%5ua=}V_&T(;.|)>x+&tGד Z^هq,6 =j#_WM[y8?zn57VoH&h"oƢo U}h2sKh7mq5}&Kcy xLpdЄ8˺.J_ h|c#Zuw ]vx"Jţ!XS0=6ODcW3ף)=(=E~џR'ݘPt81A!@9l:JVBG3mKYVPUyYG^6.-U>&f#PNn1'%ao~*9fU£XsXⱸbWq֫.q,7H_Y+ "Bƅ_J'PBåU8v|Π@D_|Ż45NPWլm70 eFؐb25.Ӿ[vJViCd*7uv.$]LVVȘ?*vQgf iq\sR[|0JkOv\X=(/FZV&D5*.`0s Z2s -iսosEB`.B#J G SD9) ^#E7(QE1Z$2U}k-:AgyCe)q`oKt''ēӯk\i:PBP`aN'>lD5@XxjGX1:L* lVMb!|>14lHM?͵=F\"?_~qvWXlR^!u a XܭSb Id9;EsͿjBKgf.cpS]!5a(ҼYWi5ȶª}MLK5ՒdAi?\MrjKEQq Kآ6CZp;~@ڽyHd*.De*o]a/bCLB3( =)9q4R! uSǶj}BWW&/lJX?+Kʕ'qB|ܐ{0=x̃߁^nl Yʿ CR?\S`\w+oUIojVo3ɟr_O/5&ܖwc `_܌A#~ ?./f"ZFQЇ:w4|nSr}Hݢ>C O`ʱg-AqBRIm@t_t)\ Eq?:]4)C1[ bIF(C~.-[bpÓU&94H1E7f(#R1bM+~RP!]J5T,o &:M(rHǥ*eà['`+W }]䋡)S(݇ϏW %~ L\mWYh8Ej4 W./#P`y" 2Wq93RU'ړ[Mu?r^H0uay,8W?(-DTYPG&D,XysR8=v{Ri{wp,L$I}KY|'K8Q5$^9ZU֕M}쇲ׇ5SW^@vHmj>ȶ\~qܪ,t,:M_B=r[+.oM֤. ]ĺ::>Ab3'\[cI'IK w5C,0Yxuث: .^0d=vc'wYբL{3!yB$n`8*YN2"Vђ=wz=w*khE*&?s*s>A&1ݬ1 #1fD!iӣ mv \τi)@z>Cg`zu_0q.J.oGbI|r[Uߠ eFƼ.HVB?/U@NRڒ4T|`gy^|Oܙ"°QQ v}1l%tKWz /_~y&_Th,uE\;?%0I%בE?I@yI) s*QQ٩/qt_2(ezɃL?=vw:nr X}eA^Tߪ#[9j.MԬ":kDNIIC΅{Ob_h5?*eTYuGhE 6N{RsOALԜ(G܆%3D3mN=O.!ʅSʊ ~̭wv-Ztn bfaVhc}VN ?[p.VmxI=/fбjA#LUb5m>(?Mpl;V3{nm~{S ]<~H vsMcށ:'{]cAk1Kx ͼ7sC;8eKG}I6P0Umpt m&ڮ. oD0 䧂Lv)дC_JO? )kX-vca-p7Gת 4=.$I'<9@jHrm/ի$p1+9|r\za@ّy`Ӭ7 td9uC/xً}'t.ᤢzX(= &d]` (W찬NZ5hU󦟎6 'ޤJO :]$v h魡 tjB4@Ph;yƸ2S 9Ix݊2x2Jt@,_iE?Y)ÆVrߖ xLP޼GWt?qxjux'0] nTQ TqLdXynH4Ϻ/9tA5:.@ efuXfqW`1dwgc1?tIZb7|}+bGM_p͸Lq7^㖃:*yS`aCX l/+!'{ %evt }e6|^$^ jnxzzI2F=R*KʏxhI^j؎v*)& N#^E9mkcDͽjؐ4y#{'9] ڻWiMAӃ'"{eHI1NMx݅-1s=@1Fru~$8Rs{no4?/_9+j|qs6Qt| r}wvE0 r #EY8VyȃkLrVJh/r'rں,?m&?ڮ5"<[:8 =\ldgdϷ2JZͣdh,Pq&9_Fcbbcbt3YPHlM^ @d>99k5φ{ %ƚuVj>Yvɵ=!}aƊ>pУ׎%%wTpW\3L9ޒpT|%MO=+Wh_N Vx8T[Bz":âA8\Ǫ{̄ڢ|aPz! }!(e;0ZPpCQbSNaaī:K>ٍ"mps;ER p园߽x! !S;*7h1v- NxTvsUr=W^e8Ev@))u'6QzҌAp~|v9I)JOko&RG8ANՂh7V=gCiaA!ejM0Eytnq˵!JvD@8D,pےZP >&mP4:6hL/\A.ljt֣ 3-wFISvNIQ~7[q1VP չ:qks jrjXMZ aw|+%2Ԩ5' LaB~29<ܠзx@‘J9Nexv+KM8Wk.`W^]  $Qbr KiT@j'f1PgߊgÙQ]JmZ-|ObΙO2yr}!b ~OW Zu%͉J7|D`q~|bG`D9f)<~2<+[*)^\ X.)rZJ!l3H2y6?Cfx@aޤQ$ꠍ9LkMd__b>.ve x&- {CAʎ^BPs'1@{XZJeE_!" =fG2xM>(kŠH,em$aIW*o}JǮy`=x-KR5q{d-mIdXm0\BPKd4F ->B9:fx/H [\-9TpoK[`z`+x?4mCt- #nBFAmXAd!ʪ)B`ln=%ttlU ^Hnx;BͨGpT?-fq 1ۧU\Z39q3]BZuS0!Đ/Q(\$/K}kIFt3_h( u2+A9/ig bӣO#k.N02x/“6㶘Oev$S'N{2~)*)\ D3-ݿ!4,*b>][wv0$fu6%uL!Lʏv, c:n;C+Tp붡aŨΘEa&[LEŠM2E4'/,+%Q5Fč3hk5^!MP"NCj7IM5fU$/{ '* r&#ǃKqrb[603(9]S+l]sMEg_ib[fA h;l,]鉾g[#,0b"S@&U\WF 8Y@HJ g̏POl(eŪb6{ЂncVTl_ q.ZߙH/`\ C5֠Yv8{ *኉d3='/pߠSWޥ#[7YӰ F=P".A' Vk9Q=bE"j;܅Ԋ벶wRN;m>M\9uE~dJ~wúO_C#6" `eEW=EϩJ0gUwcӋ$4^'ǕCɁo(4ȏΚnf9yCNvr =-/ODݏْbb!u#xWIum&V1LjQ1E(Rrymcwiڱh?b0C1XyLq%+²U<7DG< .Ǘ(Z3Hwi\Nu H«"dKܙ"4sy=Y u2}*f"%Nr%5!5mE{K;#(X$Kg1k1un6"N-H|y^ŽI_6)rJd>]N qL "Lrsb4#KK+όUsaMi ,{ېЉpQã9BDKOJsUot6؀-Rq vWyOSÈ)E:fS[Lct'=tLR_ɮVVf/ mr—lJŕ`9Ƞ^ÅZ8a QWzy~/z(!t61i6k{x *GᩖGyYJ>=h=|I`W7.vm e|T%sEߟ m:§wdjTZe"dxu9ȣE0YVQ=9qi #d -x{еcd~?YYi驪 ddY͌I`Ya

&<;R7H\sBGr-V*SNY* _c,^)]@ec$W B&}ܜ4A0Q2rÃǓR0dRzdt&L {a)*G&f){IfV'\;,U?5+ A9سt9:!#um:8I1enxha ߡ"?p::?%[\7 x@&olOkeG_6ZzP/6yL<\67MYjЊ|UQCeƟf=u37M+i+dsu ; kqzb~)BMĞ}r+]z´h<`LŨ`/x7Xa*xb៩KDa4ctm_IlΰAhH+#nʎu-A5H7U*7@#u6J&~gщC/,S:fy~ i1#f6@R$ 歴qq֒YWuس߅9#Pse /Ği)~ Y~L|9DgRC__ ²8oZPwZ|+ܭ{NQ O{G~ '*H{0+6fjb=!$cc`1{0pslZ : 3R1IoY]G7{0:n3ȶYDEWfh*$MWvN!!̔zKL[Z;5* B--*2۔5c88VLO3GyZ5 ^~bO߻,5ۑS97PZ!|hZ R \^װ"?D~z8&ft+G;#V^;T 2P`MLnh9//)":)&l0}h)2&@-3t!TumF#CڹOOݙ T_ \^OyLPzOqJl8lQ.3`;nhLw|@G rA>MRdQq xߧ:즬Ϩjbt  % d/P1kНBkC2-?ٜR- מPwgリ&kq4c^u-2#w;~&D63A.Ýd&Pt̊kO |쉞`XO`oxiGx! \ R+鹑޽*\rNJZ7o&r/۝f8:er^ * cFG(7|[Jiq~?F$ _r%i$bjgY"E/Y="srtcjuAoCM::a4-&ړRVYdJ?eaEfyA\phjqev[|jaPFn%Wxm02=Ps92_@Akɳg&ˬN6ube5 {R ׯUm_0?rn>Y~zR3ԕφvB7+]FĈ3 ?O6;.É 5qz$Crd*YLtw.iɑGc րCKUV){Y{ifUM/-ztYRahT20XX糱Cc,}Ej0k6T<5;qfӤU՞M/ O3eH\h:fW.eO#--0Ztݭl[}J1'qDjfN@K qTlg|^6W-iYΠ7 ZѠNBL{,]LJJ+XD^\CC''hsEױhWQjݹ WL{rjZdb۬? i52MkD,cz,M @YІk{6´E`̠PKI0 k]22D#ILf@j3>+NY/![ng,y)5慩kӻ&|ugu"VR,?a1WQBF0/mŗ; X3A!"gm2vEwt'Q%|^Ȧ_g3wmnOP!mKw4Rӊڐ޵UQ;Î)o"۷9}>L](Ź3ʿG_#'M>{ 7$ג$Q_ʞ"ͤ{iWoAR7LRҧV◴M~4u1Y-%ţ]6GBpL)W\\o^2@ĖZ\b3%ZSk"je,'$}\nQuRTGV]'_MeOS(j0E +@bEyyRfɻF† _U"]gKχ ʌV43":@k_ZP2sØg;2Dq&i4m5+jC^GT5:aGćz'MA4X"LƀUB%eNJ5YKF,Yw g(~w x_ L|m-9| 7smGlxđ;i.{DE^Ԭ)a+8~2ʩB]0jH/PU-OMi9h:®`#-Dg\YN Z^dntXn\JF >:Iݼ)6gm2%-t[zDɊ[-jRbHћEΓ[//I[ӀSGY>wA&ϟecXʼnu-|m[u`ۊKD:FNpUMY5i:QH$*e×z3;rj fHrXD.߿aA_1 nReojo׉.7@`ި )>R+z[A½:Wjf0¯F7AЂYkh*C0r}A]D0?-aX,cDvNHn,>Wa^\=( f*\yFi,y@g _ػ`0c:İUER!˹d*|V2KV ,BK@)zFΝ&U&6ӟ u])r>,<SBvfd@Z1a#xcZL %8ZUf.Cb kO1 }A|IF*Fn<3T5\i߾vSc6Eau9R_Kdx@5EP"}bK7"_O&jA/6b L|L;!=9Q1nF,ts:6Q|$Z f@l(QRb9yO!lNd!F&~&j`խʂmRˮ{SeA9);l £]{h~Вsc@ZQ[H!x#il0,^2Q(WSk-'2/!&M{g59\Pd%_TXV՜hlyySD9~>kR﷉74x5 *?i9U pJG vX{yq"F=Oz sCTN1M5|5/c̬}0I)&W[rdВ;$ηЌ}I9NyA< {tFmEtvG޹R.wM>~ PN=Eb gT#4sߧwʯPsڶeyOlȃ>Lw&>ǫVQ2B/S_|=ޅM Xa2kT l:WļafVo4XG94{#M"67( g,ָLõ;쏲W,N&p|U z !+S]<&6OOYȢ!ymZŋXXid*ibh?901H`wyIxsno-H'GPuPQقtsQ1Od[i-%у1Sr8ߺ"Siz6WuFMv8 m 1$ӀnN[n dk0L'4M8OVIꝏnuV6eUTjE1Oш(%Hש3e\ @ub\΅wOƒ#O<:fF;12~dБ)]hS$|VʡWP f%VG -ާh;:LBT\hpzDh3 q^:ELskްW+ gi`Z(N6eP[m̘|JvscEFbRFD'(9=aC鳘Yc9ӀIW.BI֌Mbn5!AY7xJ1ZHmbC`X56XYj.L Y¯ 7;RAJy{Y.T]$ zG^[lYޢDo@uS8z:+\0ItmV.(P}e/wQzciM μX٘%#8 o0O(yr4 vբ}~B9x:F[oK!X}QIbvϻ>4/ A kinOЦA.vP$i:zbaLّ#rp{VwlQE =Vֵ^x|3ѯi fxcd&&M`5#*0q?)װڵ d%7_b 3銾6  Z] -ȫzFCʴJ^Xt읆%4NhFpc2sqAOk p!ߡ!7}Gٙ-8'eUU\;p/v8'%q7)٢؃ 2CfXGl}hmdHVُ.P;hy\3J/B_K 5M18.; fx8;[Ά'HYc,W8w@PBcUCN9 b ך.*fQ,4 _1jH`-x^ȏu^ = /O pu*(a9!˯@|K!LYa| ia^v'%2qW?8D\Dwk6Ml!q':iXwQN͎젞]|w5 qXN+xhš՗!b;" Lbj1oC(1>hD3Yz)=oIas rţwլ~+olq庉qG cyrZ: 5scdGb Mw QA_m~"_g ɤ!E2FPli.J&*@G7`;o:=6u]]VڼUCO}KZuQ0z$M=8Ԇ҄XN#oNIɧ{NR7ѽiN^MhY"~ ^ [ieٯE~Cr6]s˂q.#8@ .V ]c;Y.z(25lEB.pݲǗy^iЌ^4=]ŀ܄I!KOata鯩l+{jbSkO_ (,xI.&tq3= đ1f&riܱHP(+̠"o8L>G]_ߗ\IR@jGdRPO]4fQ?eb.LyN\RK/şn~?#,߶ڥ+裯7(g1אpυc1g2WTVL }”a8gљѴ$2.:XBۼ#'PЁk^!tD wu/8WK& "&*|{֞,b$f̜!lE@>64 Y5;H|; M}Fzzǽ_0Cyc_beu@c rJZe0xYmRitYrnJ#?E4%[I /\3nɈ(9j?] Xa{x޿N"|h,V2k[ bGK'7N> STK{3Acv: W}BHmb nt;#^~QYy- 6HeˮYQbUxQZ벉Wo_c⊄Y2݌T"豜G)k 93H/)NC>AsvʟH0"wU L*/=8 p8Hz9 m_7/zQђdr#uK;4 6ƫ9[_F ~Vur" GQu 2y /%9+lBf"8TGiq& /jWrhZ oh\Nr%]1>Zu\ >t)U#=1c.k Zb=Ƕ*[;X2I s:x,^ىůe3e9q@(;%Do`GM}: |}nzWmD7L%ϯYR%Gʲ#KUm*aӚ_"^]3}tQ>el@D:fڥ5PH,qQ_'U%dDj MtRn=f?mHExVt#Aal *aJpXcTTHǁT a(s=tABQԏ!~ߝoj _O:Wa22 8yɀ֫:u09 YP:1؏Pz"YA8 ` C%0!j9"{ QIk8bs6\,FF,?rCܜbMY4~\YlO%*${ `q9ݵ i**40xF< {)Ɲ1;St V,x/ऻ}I;&ӃP,H Aow!{D{ dT6oWHƋ!4tC$ICp^>#i:pܭ=:P(>F䢞<`p/˂zcGJhc&>{c QCƁ4rHHÊA5M+4 3 Yd je{Fyͬz$5$8Lj?hO랷ؤ2ʤzgV"ZMG21}IP.kncͫ/ϩ?g֠rOdF% dh-rdV KOZ5,}{]:M^>=+r'M!e|)rMl r@iF XC/sGSíY\' ;QXz X"DKEn  le 0JSv0b6ZnOF7PIAjs2AC'h9%&[S;}DnoL {$i^ pZpKZ؍c 2"6}.zȥD3Dj1"ފ w\(KPi@IsbM$\n~@ $x05dZ6]~|~d}z߂HDNYS#|(ˮ՟>I+-q輬gf8ybt`S)\ckY 1NOK]}#V"$f yF@>zGCå w<~8sq1*0óI3i; 07SAmxwuKʵ'S %, sE*Hmf \O?AQ)5 0E$?kA4,y?:ա-3,M@E3.W?_G"Gl<p%&ԨD50,[8kcC ?lR83,VPo'w: ȷ?rr [No >OMq|-6848Ψ5F p5 ~WL?1 ϚٸoSu2+= fi`S%" =(g9/@@\-Ȇ wc ŚN tlpEȄ̴9&5~?Zp޴h2f2'WUTz:Ȧ_Rb+l!`*;#;DaMu< 2e<>-!URrB(=D d."3ᙱ څBPS!VUԴGDpp;\¾yMtL q׌jTb_;՝ә28ܳ]pw<'T;;>FX_eZcq@sn8NG`6ؽ 0c 0 y#E^\ӣ$.:ʯ|^y5'æi>6a5=m?(bCmK=joR%q݃H]8_tKYUꥠSnl:v-l;< -P%x+Ł^ i<1-BYVz}˺ly-@ n@:eWq;r@:nvtE~I(f2~@dd{?8m//â( %BcfjLJL{ktc]igoo5X?9,BQ4`o7T@cZzh-+:QPs^"Tmw]pJ ܝr ۼ3BȾ6u,[ymSY"h=U初49WL|5gKFqļDztЩ깙y,vw$ҼD̈XJP/B=ްteAE&siW zreH9l!v{u fKzv3/ۅ:*1`VӥpcWGy@6.ߜY&.=S>Ff]T.3ӿ@REZp`j0Zx?5-|ɬ`/.XEg\j1{0K/{չ!V9 ܻ wo~݌YcjծRFY(kulj& ˽aL ҲPW>wVw߽v2;i/,92L'z ]Q1dv'b.φ{qHCNZ  6re+:ĵC۟4ߟhmfH3=Xsly j0pxe5Xa.oyל1 IA_ƈ =Ѝ y0?u#B&Yo⌘8wf@CQUu;6* 4%Y)^jVzg@U02X?UmCpY+ᰂ2OLoQB&q#V@Ѯo2Odyx Q[jn-#VvJ/4VXmdS"P*JWYy3:'2u2d ~a+w !L7ko3)q6K u [RbO7'*j`tpk`%Qxkg流z:7QKk:nMޚX ֏ !iזg% 5ubʞ!Հj%+l<@7<HĖ<9i*QFfNjG?1~&Nf~6*t]d_Mp#xICm32 DIiU0hsQXyjd]o@ S[[b[A}zfk4.MՆy_HV& 4٫vF=g&~ !?</XФ٨u=rdg9}輑jNxODc||~Y=-6no$xnYp&B^}ĜA~ބ'$׽Ғ4%B-*K!QS*/!F7.YQ[^`Kos8m:*2g s Ip?6aYN LSKt!+vギD E޿>rGq 7Q S!1'W֋AmXB1s|Uٷ.ۉV <*I`y|12Q9\@.BW>~/> ngGZo2ĝQ%QףС/| L6'c-M* Y"z_xى&"g5kz(8jOXE>*_DaDlsTHky nN`fScj!s-W䃇U[*5G7+˜N;Mu&lW-b^wmaK#1Q=c!n6=FN p8ՍC#{ͫ~;T;2!I}ݼlʀg)u:)+BBߓ("0GoCwW u(1It 8(7nAmtxPt{0{MUq/.#DP :PNɗe sZO^ufspEwŪ"^~w ᇽ:TW^!Ҏ#Zbr@6* \ޡX8lO\^ y咸7 Pw5ʤ6&0hr5'Ng>e/7 ȡ+$xOwgp? 3^Nè*~O WIjy3q?yfP![ɜ0*%KiI QQ2)s $o7& uM/uU0bO~MmEftfX/"L\,|HGo)#*{WO.XKΐQ!xPj=?9!9Qpx4_.شIyj]'lGX}#M!d[%cD姽ACt|07 O\<<>8GCV>}N÷cy$AV5]R Vq%3` eWo=RAsqըo4ޭi!!JnWj7W%Ă :`GFEDǵvRЋ漡it\'*1g'l<j6hZœֵ"*"\~<}ߢ"N'8X)(d#oj,JO};\rt v}K{'b)]zt?3_UTz!u5P3Lv3sAP1lA P4Dk$IN$œ*ڗĚ#Ps86?Ran| pΩ qۅK6,҅@Q rdCrBBS'<8p0̔M|:G~7b囖MQ1sF6gA_d v o^FOyοt1`- ̳+Qcg&JCrF{h~VMeݿz2 a]P:$7u{DIAygFmhᤚI̤,jK:|oA.{Uў/\?kkˇ?A)苕ai~{xp!z6FgS\%M{kμHTuW)ia;Ok1g^ORdR޽rZGP*o: `.AͿ熌ޢda7NEQy"8K^LԑR#uH35зJ R{;;k3&gJ1cUɮ,umoBtT_Nit <Ǯ$H6'yxj7%qGNAl)j #*'_ nsI)8¦&-/U7ڞhmyǷ$0u~Z' =#ZMڑI Y@.K !Cnw;*BJLczyV˭IDf5hUIr}tQCˑjn)[ٖ{h=""޲ 6S-vcO}a[fB_[ K//:.NBT >'a!ߠ} y(,Nx,!I5k/lz>Xs3Gۖ6P}hüy5պwr1O.W|QW;+2Fw=+'6^b;&:Q*'VjM_cP#+nx[Yp/O(_`d㦗.: $#<4ruJ]$il"Fd1ĶZ{SF\)Q;WΜRWݥ[w#bdZQ_Su@MN:uPp$Ztݟyܥ:pCr(IYy^KdT'c5c. Dm`ZIhS}Yi5J~tU7{wZ,3 l-*|q[eu>t3=~C(Dޤܖä]xaϴt.Gs>uBrc N$/)9A Ha2J$F[;ޫF3V+&Sm41q,؇5ooSCS.*IKfi;RJslz;2;wd(c8s|e jCZ*j5ocm=Nl( OXW.fŖ+`:4V/\ ݑ 2.E³8bP[%}/l8O|c4x;=zŞr}5ݸ}`t&QrYFj47M%$\j]_ c * rIu:Ly>ul>c 9 /oP05 F2|6mqD{f`ҽ1(I\z8l<@˭6Gxy-q E$N?٦S; s7fBq*1i 1U~44|J)Iy+GL^ȡK^IJBفHbS}gР;.\MQb E?>5{'J>tAZ! $t-CKB#~#<_Afzp̖;!\,xܠ.ђ 2`g_%. _TWMA>4cN{ODx~c%kn3F\ۥRݿ"Q93{l[&DnjCr0 jR${x[*Z+0`;ke%BhJXOv*s%Hļb7Eqk9Cq&.* q?D_˱dSRF@7G?f̈nR.!+s=4}G/" yȵ$?Z)'Dd* u-h!Dj "8kbgk75P/!_r;wiyj~<} jy0#)ݼˈǰr8!et=M>L5di ,Ga/87Z1@i+X{K*2<ɇR~DaH~vʫkuca",{)PTM7Z|~LD^kS}*t/FF%HUa)=[JC5 طZ^2\ (kgyS.\.J2 Ð|s/ALYP`zD+G;Ɣ$Dn/OIU" ]UK1? @ o,Nxjj(S\΍ڊC1>뻹KXXu]|KBHbvvqׯXP ܴ9q6ZN 3EwWɯcuuܯ# 8Hp/qS\1z]ވ hzzkx゚$a5A?], 5bߢȗFMO¦9G(u>|^a91 X WlZR.LedY=VA#k }tdU o}h¦naa\X8W>-dy* ǭai| .in}{҈1u~~/vlLmfwgDܗՋylC(H`:tJ=̨⹰/FȖ:p*ͪKȏൈ^T o=FA\ N6x (s\` ʹT|7xY" <am7اֿ]o!Bѽ0 Lx4r6nN&MYׯ,:_"r&RKO{}RPձ_"Mh5Tr]QwiϔA BR!pvg&΢7/ L)X檚1jߢ8f/s7-JO4Et'?`xbp} E~Q`UFfdO)㑴py6m-c*۹A<:8+HJ#Uek2M]!vt[IJMj!"U! 0J{Qv,h·䁩l&~!zn+9 ш]-/ܔߒ p!x0wֱvovю+~P Vp>Y KSLٽgv/mǕbR:T->6 Y{X!HqX\vO4 <S#$SkkhU^- ˃4$ bVE{vLT :<®BՉ/ZH\j +jD>C飜 uSC*O!3X-_ԗ, I׮IPfɬdV a٬UנQ^+W>uJgy&!![|0-!Y:bI!yN(z;xqUO@Z>D U抰N~RX`GpezDsR <e)D9Z[ݢWZZkR- y1w*)ӿvX9?]k7H!?9~r+tn6)#/lXM=  AKJ>f}bYg|jeiۛld0,E:`B˗mS VСH%7U]YsMdqD5*=+s`GmHUm=ȉ|v^]@}a-eӅP2 V#7$_7StlEx'-Rm[G |?`(IPǻxAi-҃?A20ɒYA#a%# G nBhǡStW$Pk݁\^hf7㢲d( d?L%p1:~>໗KROoS(af p2Ȇh~ H:!Xж]0Ks$0.%)ίF ̴)s#"0x~Yݍy4&G2KFa>~ɡtq4UsJTvc`&vBDdk72O^=fQk2V+({Z#~7<5Be"Ixp\c UlAh7Upmg#>4 6#3ȫg~6(7llnEw PD*.v<7H!KxQC JGD{3V}8̵1{VpT1%;ȅۿ3(ƒB uЯV&| ukŌ;+[uihB Nȇq"ꌹ]!҃_;cA_x\Fd:+d3G*8ޛ,%lF0u(Z(Rs=sn.yQfHYVL0ᖻTV pbc!'"!rJ6@t Ÿ(hu:jUt,D}XŸ⤳ߺkH5bg" r+O>ۣl%fnuExAK5B?wĘ2JVM.zŠ+߁N>OGKGMG$@QzϏ44AfDS8A*IEo)ÖT7`\a IL~l&PFGdžoPm4FG(ĸ~&`6\aψ,t:/i"9_6㍒FR(@eZ8 o3l2w |<,=?=. Cau&B?&{ xdbpR3nc>IVQiTʡJpva`gFjWOG=LM-;UefN6^<2@-MUUϫ%9K}vƌ.i~DZ^r4E$1~*J&tBu|rq+;uk\IOMܡs9?OYvvd\L d: r"2 ]RIQp>w1cGNr^K;v2փͶ$8LLd" ,_[m)eǓj E)3OT=㎊P^M0t{8VYubb@@#S]iL3vR*4!_ 2)3%y.`]-cГ͸۬s`ECĐEݱܙԦ*5(jfmZo`fs;hd5^L"N~.kn`4#_%Bl6dfX V5]JrBS}k8LjPsXkyY -}Q")Y\0gz!zrB uY=Zƀ149N^5<,w gb0LDh-5}HZK->}mIsH9{p@Dp[Thj (,|_iG\ >[7)Gs: |?++P3|Q/.|EprE3t1b!$'j|wWAQߞyZF$P !6}iJ)ޖlѥ @$'^bR܁%V.S "6.Ƅr_m9eD߮'= 77 8EJ!|A4k),U# U:=e(ԇtJE0a"lGDK8f (0T {= OR4 Ŗk~bVtY'pZ';)J8{ј`|ms]QIEaʈ<陞<J$NcPk Hä=I)ÐdL L=ۮR\R`;"ù؏'B3Fj Wc0!o0/H$ƀ7Χ}ikʠ~ 7;oSֶͧYl+8[xc*+B'i2kP|ҝ45+$b)jWw#*!бea.nFIH6v07 RJ@e#Ѥ/hĞyS誌͑  uG8l}Oc1O-1:02pX|!~B)Cz6u]+yBk4UnґT0XJ|Ď&<2Éh>橢Pny58s0ЕN:d_@aA܎}`1*@iJ>nPs{ ug#Z0jGpm gC4Oӳmj]Y$$XRрͶ(\z,-{?L3&[*96C|]Y3 i̘nuQ( yܖ3# -@ r>pc(9,H7WcFu|e]яT4i !y|0Ktm+tOicnV avogadro-1.1.1/avogadro/src/mac/locversion.plist.in0000644000175000001440000000061612250371054021525 0ustar marcususers LprojCompatibleVersion VERSION LprojLocale LANG LprojRevisionLevel 1 LprojVersion VERSION avogadro-1.1.1/avogadro/src/mac/MacOSXBundleInfo.plist.in0000644000175000001440000003556312250371054022413 0ustar marcususers LSMinimumSystemVersion 10.6.0 CFBundleDevelopmentRegion English CFBundleDisplayName Avogadro NSPrincipalClass NSApplication NSHighResolutionCapable True CFBundleDocumentTypes CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeExtensions * CFBundleTypeOSTypes **** CFBundleTypeExtensions ins res CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName SHELX file LSTypeIsPackage CFBundleTypeExtensions xyz CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName XYZ molecule file LSTypeIsPackage CFBundleTypeExtensions mdl mol CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName MDL Molfile LSTypeIsPackage CFBundleTypeExtensions sd sdf CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName MDL SD file LSTypeIsPackage CFBundleTypeExtensions cdx CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeMIMETypes chemical/x-cdx CFBundleTypeName CS ChemDraw Drawing CFBundleTypeOSTypes CHMS LSTypeIsPackage CFBundleTypeExtensions pdb ent CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Protein Databank file LSTypeIsPackage CFBundleTypeExtensions mol2 ml2 CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Sybyl Mol2 file LSTypeIsPackage CFBundleTypeExtensions hin CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName HyperChem file LSTypeIsPackage CFBundleTypeExtensions msi CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Accelrys/MSI Cerius II file LSTypeIsPackage CFBundleTypeExtensions g09 g03 g98 CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Gaussian output LSTypeIsPackage CFBundleTypeExtensions cube cub CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Gaussian Cube LSTypeIsPackage CFBundleTypeExtensions fchk CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Gaussian formatted checkpoint LSTypeIsPackage CFBundleTypeExtensions gjf gzmat CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Gaussian input LSTypeIsPackage CFBundleTypeExtensions gamess gamout CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName GAMESS output LSTypeIsPackage CFBundleTypeExtensions gpr CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Ghemical project LSTypeIsPackage CFBundleTypeExtensions cml CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Chemical Markup Language file LSTypeIsPackage CFBundleTypeExtensions cif CFBundleTypeRole Editor CFBundleTypeIconFile AvogadroDocument.icns CFBundleTypeName Crystallographic Information file LSTypeIsPackage CFBundleTypeMIMETypes text/cif CFBundleExecutable ${MACOSX_BUNDLE_EXECUTABLE_NAME} CFBundleGetInfoString ${MACOSX_BUNDLE_INFO_STRING} CFBundleIconFile ${MACOSX_BUNDLE_ICON_FILE} CFBundleIdentifier ${MACOSX_BUNDLE_GUI_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString ${MACOSX_BUNDLE_LONG_VERSION_STRING} CFBundleName ${MACOSX_BUNDLE_BUNDLE_NAME} CFBundlePackageType APPL CFBundleShortVersionString ${MACOSX_BUNDLE_SHORT_VERSION_STRING} CFBundleSignature @vog CFBundleVersion ${MACOSX_BUNDLE_BUNDLE_VERSION} CSResourcesFileMapped LSRequiresCarbon NSHumanReadableCopyright ${MACOSX_BUNDLE_COPYRIGHT} LSHasLocalizedDisplayName NSAppleScriptEnabled UTExportedTypeDeclarations UTTypeConformsTo public.data UTTypeDescription Gaussian CUBE File UTTypeIdentifier com.gaussian.cube UTTypeTagSpecification public.filename-extension cub cube UTTypeConformsTo public.plain-text public.text UTTypeDescription Gaussian03 Output UTTypeIdentifier com.gaussian.output UTTypeTagSpecification public.filename-extension g98 g03 g09 UTTypeConformsTo public.plain-text public.text UTTypeDescription Gaussian FCHK file UTTypeIdentifier com.gaussian.fchk UTTypeTagSpecification public.filename-extension fchk UTTypeConformsTo public.plain-text public.text UTTypeDescription Gaussian03 Input UTTypeIdentifier com.gaussian.input UTTypeTagSpecification public.filename-extension gjf gzmat UTTypeConformsTo public.plain-text public.text UTTypeDescription GAMESS Output UTTypeIdentifier net.sourceforge.openbabel.gamout UTTypeTagSpecification public.filename-extension gamess gamout UTTypeConformsTo public.data public.text UTTypeDescription Ghemical project UTTypeIdentifier net.sourceforge.openbabel.gpr UTTypeTagSpecification public.filename-extension gpr public.mime-type chemical/x-ghemical-project UTTypeConformsTo public.data public.text UTTypeDescription Sybyl Mol2 document UTTypeIdentifier net.sourceforge.openbabel.mol2 UTTypeTagSpecification public.filename-extension mol2 ml2 public.mime-type chemical/x-mol2 UTTypeConformsTo public.data public.text UTTypeDescription XYZ molecule document UTTypeIdentifier net.sourceforge.openbabel.xyz UTTypeTagSpecification public.filename-extension xyz public.mime-type chemical/x-xyz UTTypeConformsTo public.data public.text UTTypeDescription Protein Databank document UTTypeIdentifier net.sourceforge.openbabel.pdb UTTypeTagSpecification public.filename-extension pdb ent public.mime-type chemical/x-pdb UTTypeConformsTo public.data public.text UTTypeDescription MDL Molfile document UTTypeIdentifier net.sourceforge.openbabel.mdl UTTypeTagSpecification public.filename-extension mdl mol sdf sd com.apple.ostype mMOL m300 MDL~ public.mime-type chemical/x-molfile UTTypeConformsTo public.data public.xml UTTypeDescription Chemical Markup Language document UTTypeIdentifier net.sourceforge.openbabel.cml UTTypeTagSpecification public.filename-extension cml public.mime-type chemical/x-cml UTTypeConformsTo public.xml UTTypeDescription CS ChemDraw XML Drawing UTTypeIconFile AvogadroDocument.icns UTTypeIdentifier com.cambridgesoft.cdxml UTTypeTagSpecification com.apple.ostype CdxM public.filename-extension cdxml UTTypeConformsTo public.data UTTypeDescription CS ChemDraw Drawing UTTypeIconFile AvogadroDocument.icns UTTypeIdentifier com.cambridgesoft.cdx UTTypeTagSpecification com.apple.ostype CHMS public.filename-extension cdx public.mime-type chemical/x-cdx avogadro-1.1.1/avogadro/src/mac/AvogadroDocument.icns0000644000175000001440000043034312250371054022003 0ustar marcususersicns0is32A{!CU@AT؛boACFAàCACB>CA0fNCAYDLK#)BAcCBCCCBCC C3p~{|{m6A {!CU@A֟R⠱ao? "#~JD?0V0k2BB[&CAp*a'C?~- ?K!)=AAf<gBBCCCBCC C3p~{|{m6s8mk GHHHHHF,....&.(.(.(.(.(.(.(-'/)il32 ZĆœ!= .!x޽ ܦd#<-@н% *+ٴc9E\h#tUf&(|p4 }v.:'8668&ftXP%YRwy wJĆœ!= .!x޽ ܦd#<-@м% *+ط~cة>Dȭ¶\pwes~{[.'ksq$Hl^L1㬊ffGpM rO]_M[_Xm]lfVrzG8mu6M}v*Cʫ¶\b#8AI<$6 f7&Uhj=,7 1"0'[%uEhd&( am""U1DsZ+*77.>A?  + WOYߺRwy wJl8mk>CA@@??)ypit32X ҥݸ-Rz|G 113( ** n Lypπ'޳Px ' &Sw x'$Bw `'Ʒ!Nu a'ľ"P `'ſ"F `'ǿ׸ ׻ `'ӵlwuwl `'ûԲyy `'ǽӯww `'Ӭww `(&ùӪww `(-żөu~w `(,ǽӨw `(ʿӧ' # "\w `(ԧPw `(²ԧQw `(ôԧPw `(ĵԨPw `(ŷըPw `( ǹ ֨Pw `( Ⱥ ֩Qw `( ɼשK~x `(*ʾթ hu `(*}}~ۨ s} `(*¹|zxuspkhhlyp `(*Ż~}}{zyywtomvͭ* `(IPORɿ{pk  `(#úkq! `(sxD `(%2O* `( Z `(T¿i `(2ƀ 0 `(ЁȬ `(5 f ւ Բ `(݂ ޸ `(g   `(*@ `( r@  `)  /J  `) +L  `) k{48  `)*fɣ  `)+/]  `) "^%T  `)!s;  `) $]  `)*=q'q  `))1q$  `)u |/  `)'bJ  `)b;X  `)NzK  `)Q  `)N>  `)bd  `)s-  `)>]/  `) l  `) ܯ D  `* {   `*  +  `*    `* * ]  `*    `* \   `*  <  `*   `* <&GAABA@BA@G t  `* %  `*v&   `*'pKZ  `*  `* W.   `* }Z 6  `*  `*2:i  `*j  `*g   `*G*I  `*y  `* "  `*ʟР  `*  `*  `*΃  `*>¾  `*>  `*ރ  `*  `*  `* `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+  `* `+  `edcgV``````` ҥݸ-Rz|G 113( ** n Lypπ'޳Px ' &Sw x'$Bw `'Ʒ!Nu a'ľ"P `'ſ"F `'ǿ׸ ׻ `'ӵlwuwl `'ûԲyy `'ǽӯww `'Ӭww `(&ùӪww `(-żөu~w `(,ǽӨw `(ʿӧ' # "\w `(ԧPw `(²ԧQw `(ôԧPw `(ĵԨPw `(ŷըPw `( ǹ ֨Pw `( Ⱥ ֩Qw `( ɼשK~x `(*ʾթ hu `(*}}~ۨ s} `(*¹|zxuspkhhlyp `(*Ż~}}{zyywtomvͭ* `(IPORɿ{pk  `(#úkq! `(sxD `(⾭%2O* `(4"#"'U Z `(: ^v9T1i `(/8h2ƀ 0 `(Ƃ\PSlI/]$1̧eSKN`Ȭ `( +DOL7{)u3f辄M,")8FNK:Eց Բ `( kt,WIǃC!'Gm/Mނ ޸ `( SHY;o>VQ"&O¾"  `( =gv>)Du+Ez2AziM;46V' `( KT!aW/ a!# %&[vG' 0Kfvq-S#  `) * | 3M[-$#0 (>p°G"%LBZd1  `)%mFB],0g!Ė[1$*!)C|a+ I&|  `)A{")>k!4Bq^2(p:#)ES+-t*VV.  `)@<@l-&h}=3(8g[, \P#m.!#"#M %5dMUE*!PLruU)5n  `)=lA*۸] "3hH&OL% W$861K  `)s<-%*+o}2!);*>  `)0s=( &Ib':h.%b;WF  `)/lG!=&6wn%3 BN)! qDXw+  `).aT #+Y/!}@\}9&"ITt.  `).Pfgv'=QY*7{Y+# _6NF  `)6$=~O!$,`p4-N;) P#"s  `)7).(@?C*s?`[8  `* ROrk5-9X-h5N"  `*?ff0'/ Hh*1'*G&  `* PNcIB!  `* {À 8E  `* u7V^ZT". ,HU_[H 7  `* kI>DF}Z ]F>CW  `*   `*1:h  `*j  `*g   `*G*I  `*y  `* "  `*ʟР  `*  `*  `*΃  `*>¾  `*>  `*ރ  `*  `*  `* `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+  `* `+  `edcgV``````` ҥݸ-Rz|G 113( ** n Lypπ'޳Px ' &Sw x'$Bw `'Ʒ!Nu a'ľ"P `'ſ"F `'ǿ׸ ׻ `'ӵlwuwl `'ûԲyy `'ǽӯww `'Ӭww `(&ùӪww `(-żөu~w `(,ǽӨw `(ʿӧ' # "\w `(ԧPw `(²ԧQw `(ôԧPw `(ĵԨPw `(ŷըPw `( ǹ ֨Pw `( Ⱥ ֩Qw `( ɼשK~x `(*ʾթ hu `(*}}~ۨ s} `(*¹|zxuspkhhlyp `(*Ż~}}{zyywtomvͭ* `(IPORɿ{pk  `(#úkq! `(sxD `(ݱ%2O* `(c3 Z `( lT1i `( !&$#$%%{2( 0 `( i?15O'"$!" !"&1ŘnJ5-0D~Ȭ `(m%!"##^2fm- Ձ Բ `( %&%)#"!&)j"%&%.ۀ ޸ `( 8(""#( "!% P܊/#()('%%$"!&߁  `(  &!""!% F_$)($  #"! `( .&#C8 #"!$ ((" +J]U%#  `) i#$%!"! 0$)%*n%%   `)%$"A#$!"!"&( *#' &x%"d  `)Ab %u"%$##%&!' k<$% W $%  `)@$% !c& ' 6%%0~& %"%  `)>%$ N* ' $%-Q  `)%" ԩ\!( 8'%%',  `)p&!  $& ;%!$  `)c&" (#G&"!'$  `)d&# = %& (q#&!"!%  `).o%$ u '`ܤ !&!)&!"!%  `), $%Hv' 7v&! >%"!&)  `)6!'/  #% 'Qu&"!!"%~  `)''*%" %&-  `)4' "%{H'1  `)k'&+O$"B  `) '< !&0  `)J$# h '  `)&'k&"  `)' U #%a  `)"' P !'E  `) $%!!ɰ:" '4  `* ~%$  [4'(  `* }%# { 35''  `* %# ?&/  `* %# &[B&A  `*  $$4&h  `*+#%\"%  `*u%\<$%  `* %$x%!w  `*w"$ ;  =A@?C#s %%  `* 6&#UzUj0Jlz%$  `* &"!#L##!  `*5(""#% _I'"#!%  `*'&(!''&#'  `* W .   `* N(!*}Z  >%!8{  `*    `*1:h  `*j  `*g   `*G*I  `*y  `* "  `*ʟР  `*  `*  `*΃  `*>¾  `*>  `*ރ  `*  `*  `* `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+ `+  `* `+  `edcgV```````t8mk@+U  G  N1V<  \?  `@  b?  d?   d>   d=   d;   d:   d9   d7   d7   d6   d6   d5   d5   d5   d5   d5   d5   d5   d5   d4   d4   d3   d+   d    d   ds   d2   d   d   d0   d6  d:  d=  d>  d?    d@    d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!   d@!  c?   a=  _:E/$,:DKNPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPNIB6)"  (28=@AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAA?<70&   $()*******************************************************************************)'#    ic08sx jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 r$Kg48+#-}ŷsH2*7߯Jϐﯪ-^jЧLRp -׎yu>$Rᵜ>-$I X(dCiso$"[OHܜ [DaW5B } E춾;f=Mg7Rb%J ?>׺ y_{oؔs{/uA~gq8~) hp~S fx1{O^qQةe2emN 1 N]ӛ!k$Oxe&?K]' &(h>mv<gluh^ilNb+O: S:ٜYjVgɳXE{ D|ae|H ;>/Y'hsx6Ԛ% V.΢";`3FlPΓp N[#/gy1|/Mk|rCVAk&hfJ$C"AF8 R(9/d̬ v(ѵMӗf~U#~xVʋ d{;Ac<d;=Y( "ȠW7FeӴ_f =I~b?T̵s 碯?o$&Et<䢩DcZ3#Mݎ> ,t_Ns;A3u`GXCG9kAB߾ 62?i-njìW;HEɩ dq:wUH0*rY~/(7aI 'nSa8YWB!B | %D{t$)l?^UNͥ,:/Cob uf3v<մ7(7 lo)\JA Ц_ˏUr<[\C1`FMOzQX{Djq0Rx<8?PGF :H翿%)$ 3*tDZ-)x1٭F-X}2s'C:Pzy(e¬}7cTb1<t4~K|ޗ1~GtQV{=6鶨88e+F!J&zkE1_zzGx&ܞG,-"iKךBK?xzߊ@,$tlEI(\zWA{n hZջ%ٻ#&UM–>3';g]QN^Ɣ;TzG 6&0 5ŖVqޑډ8(OS.oĜtu fAylաF3p^Ul2AGn8Ywd+.^J?9EJ>(Chp$609}˪XKR7ҽ~˕8uM[^b c9Me0.sk&qnk˲P iBnZ>O,*b!T`Gh q&]ӔfBoe X29=!)׵V(2ԓ4Q?,,,ev!w="cRn.'ı`$G\qJFkAװ=̹M"sE,2%ϰAd6&383^|*H/x}B D+MiЄ~a!^Lx^cŻ =n.jiQ}SW*թ W̹ r5h犸E >.C E|MOTixClCoq~b\mf?mAw'.uFJ[/jIPù1n[g|RVt@4]] eɻU!cji ۈ2ܻ1(69fb.4)_Xk"##A/'6i<葓I KrnGǩ. }]OU SKK>S̠>._-f|@%Ypz}//^Z\iPj"<.bnAydim481Ú0;ߢp@v6g@B+Oxn*Ue̕=?u0{]|^+`"m y *ᰎIvpИHrwwq%p9E$FF_&-#,xà~ ɫLX+]˵)*SL#GUȽF4ZЖy%?VNA۳/.x4<AEBlQ s7ㄛ\X1pCz%hғ=gX7CցEӥ3ؓ"9'jt|f&(H m+T{ 'FTOR2]A6"n,[0D1bwx I- z+6LYZԗha e/1Ǝ.5.bMg+5Zbk޹ )iP ̔h@fJUt,?n @m$IT G^*H{JR{I$I%tw`oe\,ݡJ%#g%Tm" [!OI h݊ EZjh$#{+߆en\A8 E=A[LI3h8 JjPn1`9ׅjUA N_i4N WMz(w7/V͌r6ISq9XR)/jf{AvvV=p Zwzeq+FH 75lے7|qu#xB7VE>20Kă3N7Пw_`x  I>>noc>q;X?@^,m3k'2 ZI(i&DU!fc_9;O$ o?bM_6/dSpf>Z\WD540^yNDRwFgkNޞ o8h4RT*}i͍eYRP)>f@cp^Pg*J ԟҭ}q@,tJrpn:\< P>l9?m K9H?lw'>LEb֣hQHއAkE<Yq1$7Qr.vnu;kï9|"dCRk<7p6 g 9}ft@u w&&ѿ$GHh%.'~!* j=TL%WLex,tg:` GEȘ#tlck?;iNp(F'xBnWkU[EY>[^Se@Iޢ$c wHLۖ#HT)TkPvu("cM# Q FdzƆfáUS?!6mV~ LX(y8/On4)Fan 2F3K ?W9o@o[-(].YuQWѽ «:WX"~-=+#LVحI9{Ek  92`0$.@үkQcl"q䚞52 vM||gw{e}{ƒ{O:`v-q'_ Ă9c ::НfPҼv"-$H>h7~/uU{M pn 510ԕBu>Re=6 C 4mCeDX:7Pb\rAq: 8+lhB>'% V7;\kA1=%"8cf-oƉ;B2bHUSƍ O(f&#ΖD^"SеD.=Y>P<K7- 5e5W[ g[=R&hMhvU.4a$v/F3(eCѬH[{j$|ءy3d3m[X^Ա'GE]V~;)~!ŵXk@;tP~45Ay![v|SDH\,$Sq7ny%Cv+O_^hWZ>Rђu!_򾚏d.ێU 9~⸿|K'Z<~'sﴋ^BJ΀x,TTeeW K$\0jFZ.f1``#I.=G:0jb%_kOPI@5RmbbXO}҈r$'m)2 |̍!}v"LB*WstG{B"QAز5맲e7<{pɠ [(WhUj6zLrL *m3T^\Q">Tv3ǝ^4L,gh\.縓T{w,!\$ rI #7'^Pe)iX,x%`Vk||cm䟙)!VV!*x}*3LfM\}ԺPpꊌ( &71mX%KI)!sa*|G.{ID/sai7DKp/Bl~ڥDUKey; xl|H=;㷞G&O&4g>[lqxJBm{Kcd&9&EZ{Ilh^s rFm,nϷX*S2bEr76*Av`Dt?~ym1W*+,+Z"AOyøSuT8Ӟw,tr!>F=~_?"y"2@bC9,<;fpOgEv+0'YR@_@M\z5( {l] W`$%C^.=1zx}"Z1b=<.N*2h ^qᰉt6irЄaӧ((y <=Bꏕ'W aŸ,iY>pOwRr^` @{BGjHd9Cм~$GѸ[ @ $ 1ߚv78#l)Ủ M(27?+*S1TyoG\-2CD`똺.,(#H֣*67h S"l8{ev.."[A (fBnykax6,i@ZrY7ClE2#QDkEuP1J=q4\2MsϢ$A's>lb kSãL4K}r5]Sv<͗]";ZxcT1~ixw\c=Tې"ycM=(FwCnnJ{s5eZhkdBf^)tЗ 뗾>wJGd2_6$ٳq[>,xqlDZh/nsN/Z!oH%NV{7mc3]J}^R\''6`-"V/w]QJm_B}tp-Pmu{HNǕv -sOjhnH7&[lkCCgܾ:J)&9⏜0hY"]5"VXLΈ<В7ZC9`F Ip]mH>Y}C`̅3Mor_G\CŞ0r<|Գ%*)n`ԓ{exAN&Ye=#w1Z5]{JHI]DAcyTws=-V ~ 5 MDžN@0鵵gJ; ǬޏlgRD24`O`onCµiX$pr=-ejZ(~M={i+!j'ҁ*F7UR;+J*f>Y' 2dkx-|7щ`#fmYxx90 <:Qi*+hη(VѸ Lcj oez–k INB4W`g!eY=C4.G;Y.Iͼ¬fpL9\foj0B>bV&E#R/ c7#Y3os60[x U]Nu3<4Uur:Ćݳ]߈\]ة w+.+-( >3F~Kra`? ۯol;j"p7J?AҠ'`B8Sh&ynL9irv%(v [o߶Y=W}eh|VЁG~ Z%850CE %a"mV HAWd?N EKXq_krE}?O?yTV[w_.4~f?8>lE!$Y,<)cɲ#B~pt\PL i)֥3X^,~J6v Mߤ-9ԏ$ft m'K6ݖQ/4 &[uw0EO6j #'q8b LO':k!G!/=úSB"Yj{tZ[[8f8;&mmmͲ!A}M#*t -"tFd<y 5Irj[as$e+NYGl84hκc#3IūX,ҵw.׮,."ms;.d)~,-@Y ؍-a{ 3$6O z'-cŮO4ҹ#9oJzk/RKH^j$r(*7JJ &Oo ˻$/L+4g'f4Q`|UM]e?q{-R㣢xN ѡ?`u ܐ8 -$5=]zo 䤖Rx@m~J<koce[6 V67W)nV Z?H#/)yKfln)o0Oy 9q!&0ZRBt-+A6v<7KT7?oN!oGsyzٽUW̱jzlf 9E !+ӹ -|?7.>oFM7?RaPpmElQ^of^ NJy|Q7agL0E |hZGr< 7"%aYqIa[fʈӎUHhV {Ld~5[ *ak9YNN-p0,⩪%-/1W`b/;b*C"ȼ |1sNb^Ml؜ki<或l0G vQRA+O fݼ?)2`fty'f8Y.k!Tsaq>@+fmfO}\m^t~lͲ +űq #%{T7fVܖUJlBrBpOls/X=ۼy.ByJ7\/Hqܿq$4M}Z?X uHI6S1a ,x14d6r !dIS>O{u8ueK0Trfɛބp< X;Cb$h6*I/!s&|G [p "NBUKS85[ Q/VHIt'~^UÏC>|ѮQ թ[Qzd#<:S$16rUWj'SAl*wcCVbW ړ=" ǃ&1PtClD7D2'-3-=Y~Ü{$z$]]7NNvvM J$\z:-!ǙZ 0HpL_7:3_Id Saw!/i$I 5r~ ?{ʔ;X.I8dACV`rhNMQwiՙt{  ېS?YgZ򙋯@zn LXvbr0ߙrkllXuLC#0Ott 863KOe"~ 9m$|߳MsZ3 =~$uw} x%ɻ_C(kՙGh/jZ[I^6h/0bU τe2=򇢁K] $'NHN@\uKIKšgVRX D[s)bsøs9 l{yR)cadgk?)qw[ Zs(1!$aǶհ9l.#45Gr'6JSR|~)klY#tLaDe vyLG;[]MmdzXb e($e!" B72q;OmLs .1InmEK({~̍{ETlEG/=q3+,V~n r!]7/df$({sXu_1 )z\"^//MLW lG=ra^t ]Ӊ VVqٯP!}vͺqbPk2exȰhLZ?rg.Mǭ-\ 4@pc}n^8ΧƩ#.#c+W#9alBpK!d;MZE$x ;[,dW,â mjRcCQ֩xTÂFC Ł -4 Vή0e[֨۴C6Y~ nA,ٞC0$R.u+?y94g~'zJqe[)h*LLR7RHe$I$I$I$EAe"AgN20(Fv<9u9Q@E=1,"??lVB= CnI$I$I$I$Ŕ'Y[IPv7X-rx}oȭ9 (z6"CwoJY%Vr.`a2yidp5N QH "omC^,sz9j}$ѯUP>z6 *d<1=ތBձ@|=(Q%^EdLmx<7p$bj,s;Πy{ 1M(h.]ƴ> םAr6>9)MI@X)d430 ;X*X~,;#ָd po^*j{6EijSeVqb.΅L"͙^Ԕ_$6Hʺ=%Y:BɳC\Q* #PP`a_Mwֺ;XTd!g,j/=n亼BgsIhlv6ѣ;a~lbMs&-i,>6HoDg$ aȈCl_DxގYvMMxI>+O(%:5tiBίd@,*X9) }€m{G X2$4"TVb@|a|&5BI#e}R5tu.~"aGUi̟Z4 !N05K- vP$uxɔ+"mTǜT2s1$@@v;gDžMqE7AAAs<,\ tFX;VS|ǮGx~_[ɛAPbJVi)8fJL,b&;(| Gň~B`!12 ݥf=[ $N5&&;f(TAOUk"u.Mfł=ܔ)2'#WWHwkpf n-X-#Ϋ7TR BJgzN8kH!\^c@Jm#{[^IL{)pS# {n\1p\h}}o9sކ{ ϻ_~iQ5L0#J=&~g'Yӷ? ' .i? 1- ТY}rJE-Pˆkp/bPa"%;WMlqJKZ2ϑ;e\ rWh^a9r ڇDgRҰU#Q!'JH?[!fm[KG5{֑UB5 e<^ޗ0A>ɃC/oa5՞QHK _BQaDΞýRBrKE rWGH Aׁ jݷ!k~{8Cgz8HoSѦU%ACB.YΖO#3^.'G/kI4!8L6Auuj_pdm:4|q%)Gjf ɟ\ujEIh^W6dZ|#/A`1j}I{ z4D91aC+S*jFoK[;b1A; ː䶠rw 8&Q !fF^]Ύ~ѯ)ܫX`-oQ[` ecP-idw3 9+Mz}Y>(v7րÌ| aU@K ]?|>8(=r勸J x7r=Ҡm|w-٥Da GpT:_`Gԋ® ^cx:/yoHhL]p9,j' 2i!9ڮ͑zRхxPcp*nﻁ t  ,hヮ5~Bh<@g:o/| `>ᄃ+ߧM<JR>yC$Ic$A#Xh6JyFΓs^ ?5p_hx9*sof0բl1ts֊;_JH7gHef nl(;%)[+w!›PN2h(W e7iVx A$]/pj?YZ ){'3S@}@[VQ]p*=.ų329IIaT秵e<IܦLd]or4-[C /-s7`PV<$H܂a-uM.)}b~ {ǤPۙ2gZn%DX _D91v%\/B]BJs86Ō騇$_^DrJ,Kb*i륣/B( Hm*Zo~XYwY dab u4O|rwň-φt KQZ:eƄkl3x3(1^}@ǃxmYW ss]LvJUe6 B]~c#E <> ntgYzcṌ R4ұQpgmDZrKEV3fG{_x.I?{xozӑ=x6D .5ғYe2(yu Y^M5m9}mdiCqa9+ @_S{Biu_aP7z-`5e@@07S0${Ĕ ]9op*W|MTn_?#"܊wu>F^vSUdE0P8H'pk-6U!3ZPj%TB;/=Fb^PJx봤/s$w/N9V{~7 6X] 1d h۝8+\ZX75t~h_B*B/̳ĝ|Jĸw h "C{36v=|%qpt112+C63hۢ7^+[ ⇇[Dӳe@0,W:(@jxSt/7c-0KȔR+hcGB!'^Rc=/e ^Nr2fRDWuwϝ2zcoՍ< ku%ʾaw h=L)5`9٦Ŋй h;:2qy 8g9Tfl+{ >9]sK4-+[RH~LX Kk9fivҐz9rψND[@oo포 si/% oFc8,WLoVRC^a/!s ]dq0@kĂ&*Y d7\O5?42:@0E_"\G{1Edf񞑷 ⬟fַʑRwwL6hڥ@#`}v/#vʓvuR̃٧nvTl#r /D EvCn-gwyk7?Usۯ۹?ն_d*UINxQ"B1H '&>:׭.ȟ_{:%׎L kǒޕL@k6Zs~+GKUiF38{'2=G:mڷ>n^I0ZuF^'򐳅υ-?i;կJ_w6K] 'iZRY˕`✴^"~߫P5cDI> GUO ĹCa{6.+-rj=m,sś q@ޝzr\*]QׯSNm=s+-u]}rvܓj6yS{߁`\ f8U'{G& eYu(MSC@ĆYzS ɴbV+; cHNmԑ\Bej[bxՐqv:{>?17w1e:Ϳ@Zv)\Ļ'7;89jTco&:fW67/%Ԉ!!Ε5wnsɑR@.raKa ֒;eA >vz<ƧH>vۍj\VaX]*~/|$у\!kF9ӤvJO13$;.%k8_#a?ʇ10{T@ɧD"b`qsqO[+0pxc|D[VM-HI8u3$ 9h>r j8KOD "~8*):6q0$_Emd3bm*]}`re OFr?}[ X/S֣ݪg;JI0 Ty#|$n>UB Y>B:ea ^0:tdmAOfd&r &ٵ^﫸&e_x/K6f|-µ[ خA .,#%0a%wP$V`E[)nzB5 ޾ZG8Q2n!TFGZæD#/MBx왰!ƠS4XrȊҸ~LۍE-n+Q-PzB2t ̰4MiR"K|*|7ﴢ:+< D嗤=.%+]+ûYT<$B֩x^`es|;_3o8$mBc}X~je3\n| ާMJ~n^ iѿk<N1Xb3cY&ՇvP'-\/-]GG`LO%`B!W(< H/lO <(a'ȝk6H՛!Vt)w+A3}QKvc)oz{;q8(5h{wo]$()oL-yؐ5d#3E. }@BKąZ'J81AhHn V_pC~Ъ6WAI9qʀlz­1hR'M營T0*9oL6N1:LD_^ c&őY \Gw|64d50mZfCA8n3sI縘'ֶ(3t{EI>B:'F# e{ F)/R$b~2"y;2akW9jpOlcNT2j(P9W{>WTZ `&oXVx̥Y3+wH>o]Jƶe8[;L/N.Q5a&z;^MNJ^;<\-uNmGo^#s G-cygEm&tIXh=_@=f9>•ҲFjF31h4։Q$#ӱla>j ,KT5=^JB^'F'Qb ayaO`x-N9lQ҆,M$4~wHxB9b'1m}z(c`JG ׯs0Ŏ돩qIyg)gri d%-#|ޭ%}͓UZ%8å0+e}GH`LQd.N:htYyטcKZ&Rկ:Hؖjdu([- ]re:i";r]MN-uW FvyGI;|es}w6 ] >fu;~]nf'P;i*shQٓ\<ƓW{#1"of! tXKtM3xKb7٠ zG>-P^ȎY;&m#ROUJmG%Ÿ*]&"S?:2ogQ hR]f.>BrD7d;;O?* 3Čl28L~ʰsGBcn6b^/Reĝ@s\̨XU>{JWNn_DL(|fԄIHS{쨛;?޺cǘ~l#B`5ųbl19?qқuo b +l & pJyERɏNNmN0H%&ڬqM3 *t{*nPE+}!jFNbj7 L˱԰b"1*`KDӲ? l7Os]tp+Lyp>nn;4tTP~#dì;  *(SA};/%XX< aw97`@[U Phh6 0n=чBApP?bRI#gTZ@moqrgY}GF{۝߹zTϽŁ;[, Ӗjr?!ħStq+M7đC>M-E(_ۚz DZBxM:rǨb6bOBg/?u~۫/{]wܟ,;d P*ʛ'eiNWrmƼc^iPȊx+xspRGL]iVT:c@?TVrrƘ~ҭiGnnzk ."Ǚ,^B20k LEhJ>Rs0;H \ꅇ9o* X&UconyH[mš "5uՉF_KMhL"GY&9Bs_:i*QysEЕ\Yfo~c,5N G'Y^~FFT!q:G)B\f4al[&qiY' }]O@5\յzxV],2onw7 6ݻ*O˶nMR` aLeCkA^R[z<\ iճ+l#zJ12yS#CmPNX9 T0?&:"?(5W jW*>8<~vY_qfPݡ1&Wxϻ :a:|(*Kwi7;IzԕͳSyD*͡X<+ާFsRlu)'K6d4v< 9@@܌5UKogf6_ Y~l#IϠ>7v޷~GÿAAM5Tv Ig_ ޷$W:HX~c4-y*sE0lkoTԙ !qfvb@<i߹L2/ q1! vjmhFު!"#&}O0Ih[?+VuYΗiej7I~&?76ΐϥRv!)-tNWGJgR9^|`U5P369yM0~E֜  6SIbSw$Ǡ"$3'aޘǥe;M$pekn+͉R<jMȉm6yF2,If4 99倸G 7MnuK6xvMދNŗ`aFPÿ!P]eM {7L&jQ _ASS :"oE=ÆZSh:’ŝ1${xƳ%D:p|_}y1I[-ʈ)&֓Ts-uP}5Sп>*X,xyf?[> ,5{bIX0OC5)tICi{Msm'$d.ݟSlBH%P[, Y쏆?eI(2 ^SitK9,,FLJ._Soo<w;|y"ْ1g.*csX_\:RLz0H'TaUԂib>幒ҭ7j1*+{t  =_D=[üg!3v<5{%a<.]F.Uk^%wauh,`.kciz^>5yUl[De8.eCO- `Rzj 8vZK/XQB4_pwF-Yp3tM)ѡyT{o)]oDn\Gkӟ"JH.N6%iAT9]9\fP Dͥ'SvHņ!.NzZυ6a=oLA D@9e[b& vSCn q=u٥ 97iZ?{K|L1s)1p{{Ⱥ1tEGp [md//$7J$%w41@$?G;0 qG/5Ocj=}wIDQ?dz lIa=hQ{%fcdzd$2Z1Q0JvFk0Eyb">:t3?T}hnu(s8sAWcyu{mT`M~NP!bԎR-vKTpfhȞ!.ŔU/B5[Z'nPmB~XVH ߣRcc GsHf=P+C .o+TSU/sY)c0\Ckʧ/C8lA6Xt!aPHcOg\=hec|޹ՄY͙;]c,&~eɢno$Y. fڡ>s,IalzBS}$pg1Q,'dd'CrxqQRYE*0hWqB ;\#8p̱~%`ȸ+X)u7G(d*2 a%: ی"6\&@xw960ᖼs /-t -@xTǒ>A$ʮ!'R Yʈ(^RƋeԭDz_튐:''! d$@V#d4XC@ xqwhҶ|HGH(FKG]yd'ғc/~]>4Ƙ6^>,!-̟WSj~-$`檨rčn(h>5<{DP4]Bi`e:#vB?Pۖu`aAeL\*PɈ$I4sL*)6qd,P7uͦjSVl!ďZaqg/1Mg\i]hg9by-Bx ;7Bwqom@01պS|vT\# ;|r4d!R{ApQqDt/Z+m;58e/%ӬQʹɗn%?}Ӝ>U0D_oY`.GEivc1Eo[l8> O2N4QoC7i2mǰU܍i|0$Hq>=eSV,flOmм4UkB w42n١w~Iysգs7GCҩ?A:iz虏|0ܲGWs03\WRI17Ԩtj&/CO@)ŊF\pd)s`)44B;8iGm GoGw: dHorWzBx;kmtfIO5lĉ$ F5O,  >㜬^_5W_SHP64QbT2Hr9e ρoHS F[IP*ɂMᬨd̳}%Mt)"oR @}فWTNoOr$:z `V4J1hx yL^ s7aڴ^*0}A~%6Kl~%s^[_Zʣ)`0}5m-A<, ͺO)#~:NDw㙓[ O /ꯔ*HE^>+8*}CO8UugdΗKa[mF&Qwc,](֔Q# wH̯vu#8~NoQA]) xLQk7_eKAkqZ_Hhyazmvf b\knl&W1.ts١C97GƋ RoP1{#L4q_~ ow)#^ ԕ`KO Rơ|Rc& (Pp)\6 שyC@6+.cGܯA0P02|* VnSDT4NF.~Yt b*hڼd&pp0p @ $ AF h?tߴ Rn((|+UPFa7-qb,rWTC_.0%tI$h=q&wWu;Bߌ TNa zA>Gzd `%a0β*pY$VYL(Ju9.%[D,uG& ^ĢLSlI$6@%%!f- є4*uNR9c;Sq>b [@&6b!ic09S jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 f@4Dʩ\ |T># 6h b8Ɗ,S0OO fr |/Bcpey,-irѩUHN{gkd~͉3.HqL'=%z_&E"P#D,Q*~ͺQ!$siVϹ(,D?kr͐důgL]Żd9m mTS߳3B(}QTF%?T(LV@Snn)݊3c6kYȐI.̎D|C#n>ŗsm4dZHΌ3c @t )+CaM҂l||Ŏ:BJº^1A (6`KdԪfh)dN$bR E^8Fef*Uսp9LY9x)Iq DXf~c~@֡"ItKI6EIZNs/[s!;45 d"u18(G(Y}d $V_YG9kABm9ihT&)I 5BȰ\X#jL"- aaTgDX ,\jH@V ?O|ݯ&kUAժqlA ~d&@c7Cf_2vf>EYc :G@ EOcky>T2AbtN[(4pPؑgTfq|KE|O)Pe(mr/dF:Pzy(e¬}2XOtIu܇3e٤-FAdǻ %BS#:c6鶨88e+F!6sf?ݯoܼ֑bPCPIrǭn45{$Pzߊ@,$tlC`bN=lƂFz8*:%iMT?Ԕ×dhOk.%) RN^Ɣ9ʝYVIrmfpehVru=jί׮6+]K0-`Y [)ZрCX q&]&)^&2|e7} s!K\/Cy; ^G,CW)"cRn.'ıg[Ӯ8hFq͋e3Ƚ UQy> $/զ}YAd6ܾ-j'o#0X tRS`d~a!^ Wj}])ɭ9l쯘M.MjӤŨbӥJetT37+b١@vAp1 9"tLePD@Q!o-_wl[eBéHYt 9ҚmDuwsM9eHϵaR/4ƔNêP@SE,9![ 9\d, ~;4kJ(f#8F#seo̓a2)q VV0| ,B%̤wzR 3oA衃 , r5۸EHqi-ޡTslbC!~CfͫZ/r36 0yz $lMBmm _jx~.݈Fr)@ۢpg:\~OA?l'|oZ<,FE@$ڂxE ;.idM. {FoI h^GFG?|e->ndmPCNAGe%"?oPpoqPa;=qJ /  qUyXw ts *t$Ӊ_ _orAXpuI70x"@cшq@$|n6^E ت7O/I̚g2y[pxe^ \. CDI;DHW΁u pS GgK 5 eP{CFqTaVO$ \ m$Gp?d[L/rdUxɐ(e?VBp8ڙ HLSӉzAB!IOLG2- sn[ŎC(w{O\]l'H.[GTYwLO$} =ɷ}9Zz5CH%? %hғ*4IlgV1cXe!2>4B$ԌwrhQW6͞ aSd V:$ b @.-@.)@Us #> R)-@T= YFG+P0aC$[5N_ĭuR=HI-|?QrCRI$I$m5dAj$c[d· B"mk6w`oe\,Y 9V7;CA|`:X"]<*;>FHקgvq+X.vst~}3~ď"YٟxRp9L8Cjg3,BvMpxX3ѽ9aNe]VRĝn\Xxԧ{qO ]w((7bᐆ{wmͻoXVWK1/3xU{ Bc~J1T`'O 82lMuu֥-o %l U*QD z{[&Ī?T/{h6}es2ϰ<RU- Tu'1L@\<-3$!`l$TQB[Tg0[|P\wyUN3dl~o9vg}ͭl3UֵtCԜFQTcɬNi }DZO#+n8WJ RiRΌL04?cYO"D &G/њ h[ N/|/>AOy" . '];#ـ`kBOˡl9N]`u`UcsY#bD54AW˜f |qa):g[8`:bk4/3O])mם4A=YwhSNxg 1"VH19gĆZMgdLL g _JUQd_mO8dj>dp2ҺtJq}3\N[) H7Lȗ`e _Ff(M[sy=n([Y=ic= ]Rd5APWLg$y%]#9XgyO'8 !?J_KrnXʱƿpag՘E[yQ4Q)Ҟ;ܱ‹ҋI*9PPmC'6،t 3Z5vtfDUH#ZffתƋ QsRV>InTM=Mқ 5V^j+K+L{:]OՃ^b_iBaT1#;6HaJdZ@WgUnfmdTZD. 2([^oPăIk$.; mw6 (c*GߤG՛iy{'ỾPI{9^q,h]|ueE zQS돀FBPD7{H1VYȲ4fk]剭Is0(\4?.bE욦}K`5ΪЋNēuk|ڟ'Pf<2.DN[ TF.\\PP|qd/Mt~Ꮺ;':wU^hGd'znv#psO0:VȼhG$NZ7 2yRmWl'gp@s^hOmrs6# ۖcoDǸ{ObXl[4RIlFlPޓg辔Fz&Lsnn -^WُhcnJiJSz?Vj`X#S2_dtҗ'ݚlw3~FZ"rwx4?P/ ͩpk!H暲tR+{ˋ&Wb?s\*!F0 QRꊵE] )/x faF _gZA46P Y`Ͻq{?:Ki#$&2;KݾYF5> K{zVKG]#UV<'Ǯ-gLޝtl/`~T L,^m8D{fs{Xqp|WuĥjY+4s_O/}~ܢ2Ǝ98=Tȹ{."[ YBB ,NJ;ǮYrdL*;&YA:<9/޳dL]`U_Q飌_svKi%3@@:J?K}w0;]בU6 _D) _|ZȸY6cѡ7 }nSMӌ(0tfj1],863C|Mϡ`U 㸒xW<{]Dq -fZB^ Q>F$i B!]\{ V~} ߥT !ꬋskAYUr Jzab8V9!"nnTn,eD!UwKPDM*<Ȗ-92Z¥2vrbmE0CWv/JE@)P4(٘'u56M" ܒ*?̈4yf'`.3$Yl9~am0!bp9M|2,dYӅhAzG\WJ%mw{ oe n4#øaauq*@(8 X0)kF_[~nbq~mph7Rto ˾'5,gL u쑬Q"NifiRu*S^wFg{HDK`*\GHb'e99_y΋ݩ \xz%Aϭߣ{=]qF>[2 X>áSyY1[e ,*)z8_H6AIz!x~5帪Xdu|TgI 9#x:K0v߆&nNuh@KY^?o >1:3O=<7⮐BW:GY0µdZ/ZkHi 1RӅwqENEpU2z__"z3F~?)`Bom:lQRo7h[?[MZY|7O̐3!ū'=rcoo])d#X/v0|1K:48>"z:ʑdԴ*7f|yטZxM@[< P娘cе{uA맹9}!=}Ru\ #=mR [{ /|> E9OD`,e:G]v@%  <Ӑ}Y0.z( 拡)6ۦLBh`+aB}Chv0FNj' %2ukd$1JTܿy+oK_ 揝MdP28cK$nwjĈSni M5Z2ɯng%@#MT @by6mm+;9y -A}6s慨۲LmW6KrXa ळ6YE:kTES0p̔-ꠣsitHVe/eަ~Z Hj`}}EQ u=2?q:ubzyZ?WH|;=YW#F- \ d\6K!IL+,)c>^ݍhA|%TcC :c_QAS;% X}ogf [ cQHRM5+FIl $0Vs5>0P+F7+]1ۘhgI4lbl7$jL%_K <m#5KKB:?B7!eM:tj_ܬ g<){ v{jrir:FjR8Zs9Bc:k|HMs[/G| c&aijVN>Q\ _#7KљtCM\u b`m ;]Ȋ YktF`2Aa6D.0K%Kb]/+uL䵒yѠ){{Xis&.Es@2W"aQhTAc^~ "[e¡\@Q25=|˰+u"Lz H^<"ϨTEw{+~4nkUׄh.eںEXP8|dFN1˹@]6Q,a'g03"x/[Ã՚L) ILDŒeΛqY^.rVr@[OVz)Po Oe7'-x̀s/ksXUj&0IaǟmuqƤ]BYfȅ֭l#[̖uٔ,Y'<ϧ zP\,ɪ eXzlt-l'j'5P*$0)\l)h4IΞ Qk[qiVZ(*p^toa6r) ZƌW%軼V[y<յ(G ͫx:rݲLJgjm$1K ݏ7EJZ1\^b¼(]սOO޻BZO׽ϖlxAw`4b)?\| ,]o,eI2s.Mgg\0:$;ݺɛJνVī[#*SOWbsl7C+I 5!95O6 45-;h,H ExA#Z?BI&6;@r 㻿fpFu,=$4-٭%ř=|΂xtC VEkiӄOKlYs~8 \sUeE{}ޏHGp__ދ+Zm{~awB6$hvn"=&vkV¤,ZkHQIќi-1h`cX7Ȓh[xE#9#ܠYOhbD{߹Wwʲ3m;sjw}h]XWl)"vY,R2!EXCgҩީַ) 'FD`A\oFVIx甪jA@J,T= CYs#1=s,XK1w! wdk_ 8LbˠTs )*'6@Y\Π `R(X߁pW4`TzUTtPjȝ]̃A^?ly?(f%DKg &7B!L9QA#u J BWFr (HXAx ~F((kUl9L#1:[Kium.3 _6F5 W{ vqbSNdiÌ( W[d sd7q|p00䗹&i*qIWR>3__oOfX7f70m=.0ZKskQ, =7Q *>t:C ˜ȅb͵IɣY Qr>;q/;7BgVn^ џr Q6 $k>X-Ϝ>A!̐ZXd7aCs"-n},܅hh8.HĖ=׶|1Kd^q C`> ڟe-0: ܣ7c-Rż2ݝH5&($InMw '"&ei%[ ?U~yͣZ5RWSdWu+$dh\|[Nfp1; * Jl Ti? 03~:!o|Fa@Kч^IzοWsq qMI,<# +׮4^w Wa|R{+-6>lo5&o>1&RNpWoB} śMz^>RwR"Rވ~@z,`t0@dW5H:k~bN]\G$ͱx 29f9p$ }"40MlBx]eha`ZGGV{^ewFe'-rbk믰,PJbI+69:Bm,Wݍj┤s R33לw},k#{[=Sav?o-ȯ "WP-F X/5ّb7Cy6Ono'9P쑢K p /l4W1UJlǕAT;-K솗)[d0'yk~4~;&7&?!Fz:DqVtdhY2RW<CDkB#z"8+0(=j+UJȌ}"h59IVՈcsA9ו|z6Q5L񼲣сlڳ9>Qc8 Mɀ=pL)?-EN@nlAV.ur*Z60} ȅQn[ލFf{ָ܏A!}/vW9:J0C dQPtilp"A8ѫxsK {Hh==-۰cjQQ(ev`A^V}Gcr%;D䋶jmUFJŘTlfEZ1dgk_4Wd ,N.җ:6Cr8Swǣ~7\%(ct' 0WM0[skœo,CET_RJw!/|޳(V/ܢiaVްhQ2XI&szcåzZ{䠄c3MˈU}W7]kRgaQ`9C1dLΏu;ȳ`0ɖ;VaJsOw 8]ez.x#~K0&Rʼnt8l*!d^q-b=ƣ Y gIf1VgAa3"dOd lOr/[.vk;Di>E56zJ㲄rdK7wITLI6&a-eRf;@u`%X @tJ!n5L#nxn1ͿPXO&$v>~܃00θ#ϗ:Vkm8.5xXBo Kȸ22t9u}I.m8ڙZ l&G&bֽS0^cLOZV WhH^.wz sN7IPs,n }3_6~P4aM:ApF@[yHyVr:Klf^{Ԍ[ '29 H@ #LnS+QZaɽAف,bGN},4zT`&j/f;U]eN5z-qNOR^nkv@(H $U/6  o_{7s\x,OzHi?4GL$ϭ/,v ?]>Ӏ]$f氍y(j/:{4Lj8ݩD 9 'Jzo,_=moHJ|PR,Qm*P8Yg"ׯa!@-w ] 묷_7L* _nZgXt h~zWG8Q~+[?p}Bg-\xPot~B=E'-kYFQ_-F=4p 2\"$cu=`.R De!?I}e,*)ݒs宗O*?\F,"J %,w6Ż5{61 ?!36楡Aܱpl&de>C.|U&R2@7 FwV݌x1Ԑ`Ǟ\ϛiU_!xzPB WGw0S߾L޿iX#%.Nkf:dLS/kVh˱f}ކtUcϏ"G/"x9g|HK:r ʠ"0v֪>ۖaZ֒ bƹaмJ;U_DBU>(z-32mwqmtT[|RjΞ^hlVjlaitE&4\*}G{4gdrA3N|:In"Džk"O"Xq>x>{C d\#' ݥjXGP<ɡx,d2QEo?z*ifntl,6}hf*?v]0=Ue"=$$lW:Rkw Szrsog{f3:?t ӹG(B19寑||~ˇhQ7nR|~4cK̼B1wZ8ؐ+,.1wʊ݊U:#rI$!pd' -9•ϠQ,JxC, QuRJAZgX^jsk"YLb gEF~26sAlXb<[4 DJԨy5\\ P-D"CjvŦ)8W{ D-Y ;C"Asu<?&C aĚj2 V'Tv+,r((Ur'{8k0,%B=ܯjG_TCHY)ۏiKa}sY9$|\VK‰fv/_mY$.# [d?Lq[R;0ƪ"uԝiw=͕I &HjK}=,'ϱ3Z1|ˠ۝}%K8 ܴR1.|> SRWQJf,L?3ի_,=gAOiybŽ R֋JS_ڰ'tro}Lаy7M`Vk]>B:` WTq; fBSy3^:mTWE8-a_/;oDPdj^&Sn|{E)WSE޼LfR QTib0 T(}8jch.Lj%Uė$89/E6Sʍn@XѰ`#= IKeaWEt[ܨ.nY=A֡n/.٢&4'%"x@d_Ki۠EVJxDt[MW=0SW17ALF% WO93 S1&D/bӸ>L]mͤK޽'}>E 9z\8YTun?ݔ!x+ d6K]I5[xA*!4Ҡ&gke鄇ʄ=<P$ZoMD% cCg} y߆_CKmDiY &۞>J: mJXL[ %̧U]% M*Oea$Is 7!`ݍk#Ne+f _"ӞFT>g,Ȯ6ą@և>cZ'#x>:WƮm|l|͝`-bT|RVV1ܕO[{:4kyM.Rnܸ%}-wV ZMUW"2[QYx3g ^ 7jev;W98 _QANp.M5~jUۧyZpbOfl$c>sg6,%LW!/@޵r^΂yLt<ҁXLϫ[d/):5GWFy3`U1Ucyϟu< F$Pw38v:@W4qz“a3e06i-L0[WX]^:E/`ӾddZ:ē@KC-1Jo8DHњ%'8+n8 M"[dU9wXvgF f@K RK*~ L:}qDU؃\,\dV%tY0sR".F 7\'JxS9Ξ Z(^H9cp qr2ƲItP4HSZG# gc&:Gӻ4% {~:7q=U΂+fGc$l-mhoi^#UN}{ [<׊&0͎P$Λy7p+!jb$??tE8_\'n>z_S/s( t lc^8=IXo}g5wŦHmh7t?Q,RF1Ⱦ\dsE6nV&AmTZ&jԭ]ۤQû@ˬy+&4tk*1}:$t-&lqG&>Xc\6"D:pO%6j$~9b_ݽCvN\QX 4Ha?8)gwsx wUP"ra ͆{})&rv/kJcSh0d@ :23 z~:A I\We ]Oy&J` ka ^-4: iiD7uK8Fۘ7J>T=?,0r=Enf߷.ުΨK(T{I0f.~j,_ IʀU KVKϔ+#}ٵB-eU=n':ޓ̢m$QpBUl޼[v)VqдuL+ѡx=SBXw?GEg(kL[gxp6"*ajFxoF*(Ŀ Y@l*42p~;\!_="BlUi(O!k0Ig ?]\O@9NPW 3'/b^: ֍ ^'Lcv3Y hTÑB}Pd/3t!uaiHyU;ܵY__a7mP{. ̓Y7 @JhqFTRlP_Vt#H VvclDB2 K}26S1!t U! Le=b_* LFNJpR[C(SHi\:%R}{ITZؐh{)A {w/XiV"r HCBAl9]D:6uiaLWSDDlgI! IK9ÊKvCQ_ ⽠j}O|n^쏊·^Ab{ &+7P֮,fϠE=X{P%m=A 2-e6$9瓄.rem+3Ax6:K>$EBhE-/M xMat4v "s&CbL*&)cD="mTvQ 3mU]wOVޛ' sV$ ]U27Jh I=<+2Вi)\ ()^owx40)Pk'[TXerhnWc`gh YQQ[&󍤎X7k5SƢp^X׬BG2$S|0ñY-D }_FtcXܜls)7+0UFA'kg\tmX6e"<63dmNE%2 hAq)猫W6]wo$Iɯw(mw_C "4ŀS[/OEJpw= Cp(-c6: 3g$TDr-|-1(4q)a*sLo'Rǣx&\d_akcR+Tqwo^k1K:_ & OZ cB*Utpzy%2n ˫K܍M^`wLm93oۨ)eȥoKTlin/`r ~ťvc8hcǕԒ3Vd%w|fC \׫U֮Ư;0 k )xYoQ me$$o6-bjVۺn] zv[ho#[0etw@d7ь8; *A @uղk( P?Ozd2ʫMSRp{Qa"~@SbEϏcv2W}p$sžy㲇OY)XdAz]F,ɇ LqZ. 8֥[)&%Mr-*yqW, >^@e|qsEA3S9-".Mf<9A iwT22C&uٿQwu0λ:ŀ8Ę6ClpwYfb9gU52G*x2d5bՁ#r{>}'yW,nBڪbfNAgq.^ ml &}SRS#z92㌣P.tn:pwޔ ])Uj2//43Ai&Dz '`.c>Kb =VNRCc`O-!ɐGP2,z^:+lla26٢ cDɪ,(ql&{*aT֐gp"U;bT۹[ܼ235a`("Ic8=yO\[LF@ {P܉[-^%s4b7-]JdUy0NSӋ&IF,aA6It~ʱOЙqFTr .d{NZ+rNxy2=sڽ/-;뤢'3F&_v?rN[8}qCrhmPB0 ͢{䨥,dM:w6Y Ng().WW>ay ΋ȣg׽~aniR uR_VVf}AHѳ1BK5Ͻ9.P{CMzp>f{Ț.>UBUNlwOɧCRGǝkʮAv>t\})U<1>S%(ojßl+2 $nUJ";f'-c8K7d WxL,(U٘V$0Ls']s{H.h9tptE@ _$ hzKvTEBbC609]RpCsݡ=rXD to*3G: -O0n=m9M3]s=`㯄`yvʐ'C?3| te*|@CbO߭(> 2\ C ab !?qiYZ>$YB >F? L [Vrq7t ܳxd(x=Uʒikb/k•mj/Nױ( 1T06- >:~?8ѥ0gD+2ŝ㗥>Hmt[o hwv.Sƈ2QW9ZpAe[2IhuZ+"%u" }ѥ<ڏ8dmcg'BR8/''L@?,a N6v| 1^#\8a/ [9`RBNafJx*w: E=NiI#r#]OwB[Qm`au<:6<':fr!OWsHIʥ7mzzW&IqQ3 !e =B>=2P%ur/[7)̄VO7ǿ|֌#oƏ'{ ` iڸh5*?B|< PwɪUh5z4ňM9Ch5\%Y-#Z<=pz` Zj1±3}G\Cw!暸Jzɲ:Rϗ$Ȉ hE/ffM# _.y,R s\bΙsӨUcbϭtWH5K @%< u9 1}!uCDWb=žɄ\DIr|dɥ́i6d#&o|Ed~(  |T4QVHj h#.فQT5U<9S?xNEff$efuf3]s{}8F6Om Fpu8)q[ҊJΘG b+1 X2`9Zh2);^@\2 M; ͮ<'!T^B{+:x< 'pK=sԬKICuQ \< λ;[ƞDP$z/aBa,X@w2a7@;pz|5*ʩ'ۤ4 eš^%#qjd̓SеzL̸j` uS%ɠ/8Aah;m˗jY7{wrdxɀĿ57(,yCE9 Q6Է,Ntuq%g :9YNt$/pN L@$BmB y3ԏ&7SSp@7# 3NF/` t*{[+#X;%UOL^ߞS1Z# N"y(CyLM)GPٙy>Ih<\`Q;sşZI rDAuH4]^۴K!Trk,ޞ/װ$;\v>Z쏜~Y*@6<|O /Є4rKhZG|E6GV9Kt*wR@&)P $! FִnS<ۏšOZMq䲮? v$ B00 SX#3vy O+*ὊN". Z%dX}TNq^>&up 2_7|7|7Ɯ޼ _C/UwxYnx*/ +wIf3.$$ipu*inrw ՠcۇȠ7'DL324D\!:% @9_^*w74wN\޻rG5Lov[ˊZ#t291[dB"a ヾ@7;\jX].l$㣒 M7?Y0In~HV+Il0j5d3h*3P51\\ZwjCUl?K|1*rc=>?&nABUSG^mX dx )Ce AQq7E@`'\>Gi Gv m0=-+ϡ9N $窾t-nǭ85 NrWKLh 1d\ Tm3Jz0Y1zUr"MUBJ=!+רx!ETрR]((s޻pܾP᥿L޵6XA4 ]TOo$eϷ}V@_J??iQYM}#a /$w6sC?z<׽4lK2ǨX[^\7Xm)bf/dKg#//Usb}85ok? 7|7j{Z܎Wqh2ֶsY9a<3h%r\аT$??"6WX3d꽻95OjS^fWM_Jɬ>ɷͧjEn6Z.8iJ|Ǵ|:() ,a7zIVdcdSv\vS&fs| A*SJĉbn݈\rl}x,$63PeL\Ӹ׽G'K\TU;5LLn }SiXu !̞C8i ]9\;}\5hjh}޺I]߱54ہmt*qoWƎ^j-E x»@z!myB,LeOMԈʾ4{ QeC)0*4tpǁl }$նCSVƋ %P{qAuS͎xE+<ס 1E\3Tny罦tHx34hWFnŽP&ra] PHAw\iu t΍ QA)@k)OՉ#T G,e I]9'9+$9,/ZJ4/0tz/dYtyIed>E:n`^EsqTjU[0':/JG̤UT۲ JȨaP"Â͉dJGD=tZ'6<|Z7')<*R}HrdlYݸƃc:7lh4cHW[ XN\]@|O0jC/vU~H@Lȱ.Po!l1n+0tD6!'clo&Pi. ЕNJXpZ3o@G߃Gs fd0 .8@m^Kw`3f_4܄1)ձpܯ'U'V|7|8 e21=C$ n!ͮ{,6$ B 0i)q#QvM*jS p /Ƚ,\?Qx3\$r0Yf8r`[Q^oZ+Qwu@\4|I]!6b<@]4Ŕ1^2m+pڰ ^]_oN eh&D.6E#e:!kJG~=qt9+7a3A өzc_)SJUe^z\"[@&v_Z< rhφJ^IbZ=L*,xzC3Q<8I ws28!2xWkww- @jz^_ΐzR+Q]P`KL~PR~JZ n Q#Oе9C4ms 5oT /لZ+:ui+9iohJANM.նIPM[z/U<0 h.&֠zAȰVT` z%w$'h?~V8fΎ0aRkj xR2,0 ¯`/VUK*H_ |Kr~,eJ[fHȺ  mXM+HZTȕse"y`@]+I ifa:X5hֻ1pnD1(A~gVջ(᰺] CG^Z!@Rv@fgm*  %uփ2^/vy@vCOܬS8(h߶BpS|/Izt I">ɉO B*>w8 hbt^H}0RLw|+[!i]w"~}>)lSUS+uƭ# Y[!4,>gwv`S^ bel V& qW4E?X,C/oSF!?fn xNL%]HAn-g!an,k7bq}X OWzxoUv5i.(kv/4H`n^?V9N!aRŠޖþu]]7}طbXQGgr(i_h_8ӎcդ2lv˔s߉d`{+rS $l&[$xC9/12܍!W7S'H@xK?W<6J,#liĊZc*.j; 2Y 7.FAAdc'lH}:(QG7^0Z'Tq2\ͪ1%bmRz>HBbL{flLmIN&YًEuiԱbu޵5'tWs̖>Ң$g%@U]>Or, l԰~)`O-B6Ûw:ܹ¢fV 2\G\W:^Ϙlw+-t];l®%QX a+$rM_N y9"[a^܏2[r.nolM񗲝A@UّsG,umњ&Lf9g2YUœ 36 q2Wl3E=(CYM踅QiL$E!N*!X/!A>j~)3GK2Uq(-CIێX(Cȑ*h~`OL,SzhoErƽߛ%4: 0Nb~ gr n$5D*N9/Z] quJ#`æ*D?[YVg˶0*ܩ{=clnKZ<N~\Ә\y/Jߩr;J;`D/Gy\ys%Z{4LՁYpaJgh%TF3Fյ΁I;Dr:@tei#4ZnZ8P81-yѦ 2b۴D;"yΓ9mR!0GWz:wϕ,E{ճ{~~,ԋoiއ9;#'{ +@t/I+NOJ:XBRGڿa@P% a7"娃+1 ru_Q$R*e |{fj.oo[22UCrkc; yeIpA 7`0@S\, *&Ez*Y{ u!ِECu JkTaD04WhM8iH eµbBVtߊ 1^~i?B˦?lzyCb¡N,k‰C]jDKvqÏ1)ձpP,ooF9h0ŭ!Z|ڸ BIVjQD´ «uAը/< Ke2e6P Bې$X{q{Q?7ڐ y&_- ş/f?UZp\L74o}jM.j^w:~˪[a&3`g `u#B'v]@ оPP%+v.ӱ&~/'I@m*&+`[Ww7bn|;zwù4d ֓&reJm<Mĭ T&+ĖwC7s*WTKWk|1@.R+"7=FW`[FKxfsjWN]M @ rS vj2-YbCSF >e[117\=& pphd1;jP}2:ܬ2ýXf TFɝޫy[tbb(ܲzdIIG]B$0$7IRء V֝KqbgOe={M#L[C؈ {Pqwo]$@Rh +zLbOz5f=F5$Z0 ZMj%lB]JbaxM3J}8y4Şoki]12{qҊRaE \w̯q O]K}k*(rayUճhF.:.Ay пi,!k_7%GY}ac8a@_wc\,ՃOeɁz7@Vq6@ʛ&Aj_a/=nF#Q#fpWZzc׫7a)?u^3υH2ptkk7KM!i4B~>JG' ?w@bz_7|7BV|7|7ϣ+VW0yo|b GrNr?-FooTᙓUN</0P 1V> 6JN|,@:!` Hθue|mFD <gD'{Ǽ[A2MqU9u{(y$ffsf~KusQ D]><)@;?1u-6ZԌ~Y kAyeoDDanp}Df+kטzgŠ,_ms1@3Z(>=aR\ 3,V5bYVy q~x-ZKyQf@ǠwugɁ.^S \ Mb!'^E!':ҏF ~.$\Am] `U[ Ɠqt։:^B_ޮ:5(8ޙ|*(HR|KE^o07d;V#rs;bJ e̡((>pkhW~5`P%2:iR6𐴲Y0Er~WN/H,DGPsﴝ\w:{$ tgH5p2zCft;L]$5~}qa_ ܮUf#x(E'4 3=s}ͷm&/mTBl }3# LZp @Eˊ˚~44T%rEyˡq5Lb-4L/}3 ))mCyR纶M#Ճm?Ȋ90N5Ru'@rT E&ظ뿽5& ;;J&w0^-7d' A_ OK:t꼝&H2}|!9>/d_mCΆ'DUc:'XIjtKu6^|YSa}XrF:f͈<۾6US۷bo@ӯB5T?D,kWO5#!h *fW'V*_*‹ ꈔHs'u=ܥ-hsW[4-$@缅:K}nWBy:L_\09[x`0.,;O5K}?)5 $ 7pG])| aO*u_ @q(*b{U|A'0?zRNly. [uV=Jc"ab50e4`~x{!/""* "W*KƔAqh/g)Ug%KgJ` зAF/Da${6˨=GX\BsMХ@j%]gf7`)ov[5 %6mThnJn 1zt$.Z:0ׯKPR ikvFh]+$-hb?(]gHwZisӈ^/f A8Ut FI Leڸ54 aO;EW6wV[qDy% F^.3梓e<ǝ0ᇍ Ȩ _ E欯睗EY2j9%skΖKzH] mdl3s:SO6כ2]|jE 1o+*n1WJ>z"V{ ޅpm`Ӵ;A/';p8OBv8T&;\=dS-{s7=w WՈ( :U,fǞtk q;HX(5[9_3Dk`"LlhLam9eCy\ Y!7pJT;_Q7LKoNjѷ[y z O"$rhZ(9%7 }g!ࡑyS껬lH02D>Tď*+6qBȼ? >lpʵf2MuF 崆2o:ھ({ʧiU/GĨ nUDF8J!ځ=h)yڡ 1A"~! #uPSyL6&3MYm}%~ƺOAEFz@|h#sqN&b4Y@S2K_[m=SMt=Ev3(]G^bࣚ}F}{ay7%yIS<0nmQy ܾej'A@hf`VW&Ul˫;]#rg;}=D`2ٸyaAD< a|cO^>щSP:_kOJmLuQz!b֚Z W3w-'\z';9D1г餦r^A48$sԫ `ͽT&!$BuhWYxTh:--9ZnK@u}N! RvߛVidjI̘;0DTJ')]>C3Z=ewsv$A^9 8QG DУZ|ʴHyǫ!ab27@w-U,{ 8mΉ(5 uͰw_껄}*.0Z ܆51E-!\nlbd)&*&aJ`6B02N )nߪwSUÝ.я0GuCCͿc\̢zą3kKo TR@4=UD?C-NY(S;/G /T@^q2$cZSvh /|5[}5%_1KU(I{iwlWTQPГU+WC0Cܵ>fd sX`pShl'=:Y١ 12Z  C5Ul栍y 3A8횜=PcɃSˋVYe1Qddy&:h Ҥ8U"KOHOk5Mja\*kSl5(a%d؍=`9so`"IEnJ!։c {$3\PQzORlrw"q<$oPu-j "kϋX8O;TQGdgK56-%<&=h"9br)_"i2@ N{Za  ?/;A G=IfͲhF Bxu․8T'ᦣ*3r7W.>vVR$`!pl b?!>g.p78LXҼ9f̣S \#yJ n1w8uMs-Jic`P@__cƼ]t;J!ĻXfW3`)%S^58nj<(<-jwRPaoQbEHwq41%7g̍>{p.Mxmd:V 49c6wiy6 $M ˋpFHB 4Qz~84`C$ج8Ou>*)E@=q51.^|9*^Dp^$V7T%`N~jϹ[L:xGPOˢr~o4{?78iBK!n^YP ;H 9X .`'hN$ )EF:ȕyL!s۰oqܡ6>eԹ\anQ[L=(1w&U7Zܴ "N5ȧ1~hA'+3UxcA;i']/5|ãq qw5vCuð) mM~S4Fe? LJZ|=(^ (`k߂O<ԣ*NM ojiJ^J{;DxPC՞^ W MG}HQ"N(r ~~3qYՠo=wv93d87X uqZjTք!~Blp(U1|ժ> ++fަa ,pf:Op 9¯RSiFBR0Bs"!ݞ/-zJִɐUzx+73֙jTom.Юݙ>EfU?2vez"l/w/ܷF uPZ"R]yk> +|Ok4#*Q~ws__"'v+s#P#Pxd@kMծ?G T,com\<# "9#ןrR*0cHD߆:cuU8BD{xܽv`iú F/"jT5@ĬF_d*Ud~Աi4l  $_$/@2. inJp=нwIyk znm(AY G;@n$\8t$cnHs&N m` v^N؜UNFs ]P Zb-2Uuwa'?7֔IISu@Va3jC L @sx6TlzI1}U>ת b̳bgzgc5kM8+8_hqDpk`M9 &bԋfb+jE_rieis$iaS6k!O p*?N9M}$A kiv|9|e"/x {O(2p'dD45[{lTȝ6۽Ŧ*JmhR^fb3)oA/bLjMc0k6aRnQMREj7bpo/ )oAY-.8Cܾ\J#?Q$B l; T`D냋Qs1a^54y~|<I̍RR{QQ\ VT ]# A h^+hx>2ͮǻu]3bP\MoQ8䴑1C}@00Cc:/R;HJ^0 *$%:/R;HJ^0 *$% ̈BR5a 9G8vb05"X dxܶ~,=\ݦT:14o8`+.@6Ez C`?ҩr~pkC1&J ؎aPԚ0 {%0#TT*m gUi"ⱕUΤf!]Dq,%m2!Tɓ=3g3 yΥ-iQsc8sFp0AGhj)s3trFl`hqds(t[w/KgsC~+(8m疂Cᓯ P2'],J1,N6xUgMC2]7#B)y7mm$h]w報}pt 4.4"8`(x$TK1_#Dk>Hjeח8umSkSGɼ;w2ѱ}nj cN?uBL E/!p6&vm 7 YCs ˜|ct-g\fp(fͯP;D3Ƀ0*j'{;\.w3n9O?@WF)АsO@[N/5-hEѰ> 9%r9lrE r8O{ E']d2&lW7W_NAF/8#faﵻ>&Ghl̤gZP642 '~VJ3?"yyұQJ9za迚A1cr!o0]N)Z&=Q1<_7ny%0u%`O@MclO^3{Qdg$d`5QVw_0qNUQmxL;J+IL0n*_"ɤv$0s\<9XڷFg-2_R]2\6JDO2H1sOܺ`wհ{f ܿ+,!m K,y:ʠmy%jW—40C ~_fW*Gk Cu sv[yA'xՉG7H g^5D0jR /O8[tk*,_bdMJ#UFTBGh s{OwZ&_Hgk)~Pȑ nJP%X޺ZhG/EM ?P*B^H'I&ctպcݪZL::htCl=/\7R=Ca J4!*K}4!j ޯݴc Owtj7/*5vC9!N$-G5 h*rE7pcH5gUuXw5'J:o=_<5q:Q ^ Eȕa:r-I<^ Y6v0Pe ; :%C@ġa•% !t:.?_':Mh? ڸ䅜6ZD>J>S $KP{4Û hLHImЛ֫"{K='RMYԦt\{&$UFHqfS7K&9~|ަxGT+e3SQ.2D8 fexe>A7xɃlg";u΄tWYwJ<V?7V+Tf4}\ ?k(4`:ՀuW8BYrY1E}^ޅʃ6kF^#C֙06EV8-]l1p@{_T=@٬(᩹]"rg?ȓl7.Z|2*u~~"u 1할Ky|J $j4EuZ&k?W% 3`$Ӳ2q2xk fD }^?VI|t_ʎw|u':+ :OSw*`(̋:[?mMH. #xu[OW Z$'}]+5H5K> :#: a5شurġԫ$#|<V3Mb9"y43K=uKT\fgќ8@6%4c]p,ulV cq x\J+%F2NbT='dj8mS - q󙻦)x&`,Ϟ|`KJ϶1%vϕ!cf0D$dۿK2&{g?'s7qz{5"xe٤!R!x)߳?IY" Bq7K7>X1ÀG_.Ʉi_ X=“@3Iwg]o;~YPmƅk6iIݤ3ٟ w`E T?[ج}oB]4uKŅ7>;,#E{p;M;;pE{j[Y+&6sԓ0.`G) h!`Zĕxf_ɇR+q˺ӿOo)-&Wa^&+%tvm޲?-9T)%ǞM[ #-oQ [# ,XZXBWc ^Dnz3u OA[K4aT7ĨK x]AC\ufmdU_y~oj=wBhn [ꮡʕĽ EVxwzK aG! G>Pdhl&l ( :tryQ7SwW5}#!W?u@:QeAx#quY(x\|C8]U@שz?g.#cSaÈ-vd2tE5t5a^Yv㢨gt0ơ[W~Y2)`vQ?;BWd8b^SxX eăȆ[ |*s[@ލ|8s/PL!ɵ H(#&txO#e h0|SՏ~ LU+F~빰{ڇкcUEHؓTX/ضnmjQO +v8_ " Jw ovtb|} 81*XЛL3`N~͗9JJO <6rQ"X',f:O=%{#:{Kci%ZH_~Y{~۰w %`StЫ/??]d`{iJX|ARЙFItj)@U*Qa~Aߕ:>mmtiSnߖ"/<Ӣ _"x,,WCiTtY|3A7m#A(Ϟ].c }vfa[ӣ`\]/ܩ8+ebܓG6VJYhɉ"/(蝚Rz(@=(%`OȞemlfB7̷f{԰ag5kGpNHhQ%_㎒g7!e]L9u/ C/1v :4m}ӊj;t;pV]1 A9,x%-팮yM:%%9']6|!ˈ`SveJ % տvUsq,:`Q%m2yRwvyx-!熲]wzh2 Qh< K_f2iO05?Mɨ#Apn%.=4@c}KzOl9Ų/o'mbղGЎ魟:sH dcrO@**(Fv󕊜"`Cۉ/Cá&5n#5I 5\eqNoS8%'q4X)q}pf.@gN^o8VwE]Aq9* l AOPKm%T$ҷ%GgYZ͵K,.N\HXe߇jVFPj ԭ,ޗ.ymOiȒB_9xmM1 -,C[UD_j^ [ݯDs]OlϜKa5QҘT/)HXI ᶹĢ7tTqM;hB+"-#?ٕeŌ~UD-)tBx*S `H @oG 4y!1]]jKUW\M,RH-mWrQipk^pn+m0D~Frp״ZP4&EwF%V.|_SYd~QF֒sOt&I ŠTi;fdJX|*͎x8[`~3TQ7)an^Vlp\;!s9Ӥ&;s>PuIA A/TM&:zCz5<JHK%0BU /s/՗";p"J}Ox9F3瞑4E+z'eX=p/}/!חMmqm#)d) *N-JnW1w@]7t[E%+- &ӎG9of@u#%|οT|}JM;^2$\N]u x5ncnhdy` VMW:hn Ky[7sm9-yD@؉/ۯ&=_#%@H ZPJ١-,K LX3|&p5R|떒.~DZ#諾R 8hĻG$*u~̠Mϊ^eT KuET<\iM7IjiPT2[-$c.5}gӉE-EYa 9\|Lo=oy-ʍ3CvO|BRbBʊߠZ417i=Q??nvkFTgvP49kyv2᛾@>mw8E#M2aN5Ùf:r$,֞4ޔL9VW?(N3Dp79CT?.Mŀb*7IԠŤet o3I>|Y1C=Ѳдtsg k; 7^cp[ro7"qU6鞌q_ xL!mbP,lFux YF5|!Yߝ;NqKSdy >)pYMqXA<:.8*KeiRm{mfQ ($fgU\͐Y?EN<;Ǝs?|ۘjz mBPhb4k93K8yv9 ?GA(f3g!x$Rϴ%.hL(E~QUh{Q>j2XK" ]8-UcAB7곸$NaPCw]<.~k gB^P䝼-+"+;7tGK3G#(Is',DK2l?ÃN 4b3LLD,mz9Ң5ֻ~G ?YD;vaes`.ByMzqH k!ʺ>Y;֐`2{#52`YZC,%^i0F ; d2`.t &5 X89giމĊ,|bS`*Y%v>8LX,򇮨3NVyHI\7tp^\97di'JG.uٺn:$}gi’by$Ms^E٣^,5Xyo9ZU.*gxOD+)9Co72$QD% (y9~kVԱ?d i|7/YPEG_<>,ρHCV_򢒘*՚Q9)'^R=-If͙SfƱd[,nM z1AJhEss_0(iF22%N 𘈎k<aO}kPZ=G7teNX g_QM=[شS/Qa( hFg*[]D(H}%^kbxzޠAŒ:/wS"~f*דWIVL'Ļ\ h%Jz==EP-ͯG9@O}'?53X.p VypSr1.tS\X'&qDZ~F*eb0D<(ZeR=~L{o?Uvce8e6wRGmPѮdm"~)X\uPRH,b*!8qNؤˠS\R2kO֘Hj䡋ۯMdkQލ'yѲU$gy"52# \xA9 wc?3x]^E Y wuRMuuS>MKp(TGSWOlo*X8IxAu_&$sTI LMkuKwO-;VT! v! äJ0IlשlN s5ٍ&k|n3dq$B, iqWd֞[%}.Ͽ-2g3ױr}nJE Ss?ȢdQؕ2&z*KLHr~yV@Ч`CDWnϚњG@Vv3@z'n'kQ=TxG@o $X!X1VR6f+|DJЁ]"'vЪR,'? fa G:HlܜJ)"aRNcdv}(e+|#=j-qhp7~LAAU bRdcLY+2nKmeuQZF>;."ñVG> ɲE.&ebE*o]!s>&G[k~jB{GPFTəQM,W9!4MT\ӂQf3QbX"fٴYojH` x9ՈuD='͖o.6k7S ŧX6>=MqD(\ *azH9u!z=t*~Hl_I7 15mtI$f `r=r!G$8WD&ᗧ d3᠂hw&åS( EY5qk+0Le󥭆9'3ĄQrp7z)4*ÓuIG+ց/ 0KzM0_O#lukAE8Cz9&+f+'D^2zW3쏞N;ovʻ槛v/%mn}w?fHvD7ϹQE벤kHvXM%N37x Ij7tmb ׌1 Bgp9Ҫt!!DNPp+Y݅z`QUo-{ѻ6^E;ե{ j:\E= s8kQxJ1ZHk>Δ˺S 8:׊1*^[Voe MS ZcON5pãgmBybtQ2nS#Ҍ>[CCi 5znu Lc6Y2֍YL-9[n۩!)0cJ@P?hn|N=tIzaaH9]])]w|T0Lь1 zQ:` Q ZLKjU;ȥۄ0srSYkT{01:Rta-՚26L)D έ : D t#8 ܽ!w WBi6 &>o87kI [XgPPέ Go7J.sxz\h4~&Jt̍|RShӸ34 d>؉MV^f竿R.xP윑Qİl[ $×aàkJބ0Ü 0с zȶ,*(jK{Gy##Q A}GCFM|^VMY`:awإ@WP۬ϞѳK=Ulې$(Y^6#IR=*%9z|e.lp"8e+@nW(lΉ| G6YӻS*#zKepic+OP&HV.[pp\>ZBI_8r̺jג p "=i7 ]۫yڛ#EZ+9(xnq\UM2ν@Ԧz,$N}-̫.ic3ϑ; q{tyJ63C:iKѦȦ^+ }ܴ|6R|pOXHp_uQSINW y݂00 [ee-ät|+1:̫|\A:DXB5"y1r)kڟ#qLnbpi#[M 's! 5=1r|_ Sv+X)+VnGj-TE-0(=/ >?L #ςy 8uVr%3a mʊ :) 9}2Dڸ|çeɕZ-7EG"uϋ"ۺ;{EG=Ib¤X'p[shMBRʸ,;W@8h^txs=)%Utp2П@o'4<ްxmjvLb)oq)0iګ ~uF1! o^R#4s)ȗ^G"Viۏ?R.XkEԞ50'eۑ4H3lE8j@;&+Ej.|[HC1$VW(L:5g jd6N?NsJZ8c;?s{ Ep]g_Rb$Cm~HuɷGT(opS͉'p&hkGSRoLAb4;_NJ~;wӯJ;{?EF;8*. {_V=>{ܒAW=%Q]:T/>uv^YNQ| ZXQk;+s1V|s9ף̪2ĎO A6x61GqoނmdGoކmJK3si+} cZK}v+}'36C.xnn 3l+Tm#x>V͓}J'p$ع\>,~mSoO0f_cn<ipHyj]a\ƲMeI8. Q'MC@"xIr@v"?I\-NT g;R#i !;7R] z*|eڲmVa9̺Wݓ41uX2ֽ6cu2#Nm&ɊٗrvjTМ*Tz.#( WKg7X~k;ai]h.?APvБ%-WczH4`FKѳzU(Gd\jV&jPh-M kk@H04(g+둺,mGȣdW9{$Q߅x."7Gx^Of%̟T) XWnZzżt=SM r^t0Qz! ֮<^'bT77:0</<ō?% 9TcWJu sҘpP4w;Mp.q5(G@ۄlYU>J?͋L2ZG gT`ݪEU={MU>5ڮ]?*aF1F+'J;0mg3xLVhE/"} D "○&NRm!^N|ي5Ը:?-2}8H1:v:q+wP)krR;.֢# cw2ߵ#:8*;f+1检nN^2 1 jQ"-=I \#fH$.4MRw!1ḾQ&51R;6lydD&V|| 7j&,W%^ pidW)LWk_Jwˆ#"2W}f'f-L22-&-V1t0|iӎ}'=?b5VHΰ6)DQiE$F&F̿Uu{z%h C;i8F`]h1Cj{[A4myD 9Q;0 knЭ I3-Ӑ5#ɴEez+ǭVDn ӾK*tp[&2%^|Br{doyU׿Ăg Hf0mё W/Ծ;YY~S"W~$eW)  ?ĎE" 皋DUxꑲ@Qk^_FqHett/܎F6*8B k' LJc &h"',?S cGp-8}R:"tV|rsh5β܋DiILmJ*J;1%>;CCQ"Z[l$篚Nid#Uׁ+M#nkd ͊,gwk!&iewyY]^R2n!l?rl(He+D l罸YO܏z%2E =^TX׃&t%A%wstS3H!zM7騇eO2T_^%6,T%aݼ{ƪ=7^xoW3'~WG/8)pQ1;UQYtzۋ:eb~$W/sY%<Ƚ ;;fڔxuyUl#ʙ(] Oѱ_:L[IZyύe|)Nr]rwڳ eP6ZNjp\M'+ C'Eƣ~+楍253PirQNmL|.l2Hqbؽ[=}hS 7pd(t܌]`F$ o-V ]X|l 4~:K=y>oe;7s˟y2^mr0&Mn[@R[E{5$cQ?͈?HCEl kQ"XL(=v @"߀T-|ײl\.թ8#YgՃ$Omb0dzz խVc8o"j; eyKki@[Xw-(%4zܙ8ppc{#ʌsx )_c2sAQU fDq)n_`C.K8 24"}:cy yS/-q~ƞ",Ӷ7hFP훥b{a KH]ɔ/Ք2~G`Y"VHK9\SlDWۍ3nݥO޼]lerמ\bW3،Zug4 Ч,j x9#uZ+-hv^]e)'D   q74֙JH ?@`̼e0.TA&[ f{bO l~>=&'iۘaAs0u`S.V+>R6'R[oÏdK P%eBޠi!hqpR[0UXK} zQ>zY4cVߩ.=C!&(oH zi}PL3Qve[ms| dO3INM:-rcBQ+SNIqrHdh;K[L/akle|}ش ռӔ~|Pv v-ѯ+2+PL)\/I:cLx4[woR=0ԪExf'nvUwKJ"oxqtp ;2v_ 2SA [,#<÷i[gaa :ןVT9ӒF9(ȧ  V(d)E@TPb<#Bosɴ1*E>eB](em"/vbJu/OE8);ҷq:)?+ n?>Oÿ6/I DidBtRwЈKFGr6_7z8q==]f@ͻOgSbbω@2_&U39yr{7;Nŋ?(`+\5—cI"[}:D!kd fBY1{F-U szdI5DG=A|#еncuY#i*lb%I,Ȭ5` U F2?h<));i),!!fop]_Q3y@*pORhGl57P'nTe0F )0CR+D50!m&:<tx_tz3/ d9ڬӔemuv Od44snaK',iۉSjLՓ Q~Lտ|W`k}IWS+@H[t~S1=ElƅxWszd" 3,1S췶5s8s͖ޅ}h9pa>IjM``+EB22C/>PkLװcgaԱ:Jg Y Խ/W c+~j-'6|P⺪s>΄eG.ɫ!N%EZFv q=cnX?q53&|g6W"u8S8UyP;I2dVߴ8%>kLwFDZy^pV k=$D ,6AăHy4Ee" S%$GZ|0-~mͺ9[7ӭƓ亸*.[vlzp D3qi Uݍ@RdZSu\\Vy}B!ҫ;!.F`1qa뤦ѷ3°Ӈ[/OyUoZ>GnQDjU[smbU.MPݲa|3٣oK]g*?X`d5 YO[>js*HdYKw7nrAy5%8pu2Ex|ILe^9o IW&^,lYrk0z ܄|(BD1lC]7B;8s! ї(gt d'd`Uם=L$av(3bQATcü'']P Dql:+KEXxas.!x6nC\G2K)4٤R9nc[[r";ClsR|#1H1KҌpT32&C 8M(˴#q%z\C @)G4FTks9 *mH>U]t?W` rX]Øx@0E|tsv .PʥF%9`L5 xQOQR'y~ d|3t>% * D')| EN= dwGkn/!Ps-Hٷe5fr5W:Pפ#^P`6tk|hc菦lh [GPVd PtS_l)q f(@Xߛ ^ak ߕHWOB T2(#glk7R ̗YS579&R_gFݻꑸriSn̪2gZ<ZN}ʿ%0ʗC>pmJܹ]ɥf*|= MKw7<Nj^tJu[+? <O$b*]Ƀ9 '>3CK7^]=xs!o);fIyLjfਢ.d- `*hoVi޵)WE)[WH)}r͆_B?@p.f-$i uT / g)Ğp҅'\swvb$?{Ģ"@h.) h#)o7KuϹlwB-Ev;B6i}\(ۓwI̟ΐ>Rsi 2Gȣ>, dwԄKSM "!ϙ1n؉qLPɽclB1'PX?sN_'n HB}g#k,jh,zH޿SAFx6,mظly^Ll&\!vcBL*PvE|u] IVAO#Z +#"pu̒N+ ޿ݤ`#ƴFtK4{K l%uVD'RQYC̔sO˩)SG H(qhwGSTAR,9;rųB* #@ hƒ#ܹЋI|a%%6Ry :yDɝDS>!R_0il~sKXUΐ&nAw ?ZЮk>+lyCv w@8bȜKt[ޏ? I85A-]zގL8\O;W:I0!Gnɗ)gwa%.BZ&ӟӃd7K2; ܬ/!tu~-Toctl`o0A@eڟ/?;~hɈ Wk\W{ 6ߧ՟F +#S^.zueuo=i9 ]>m"~ 8 ɜIK /@v!@Wr"!U;'-iUQ󥲠@)7Jl: =S|@1?XeL'{EA:~>"0Ɠt5?gdȼOM^Җfh>*9_@6Iw]ET˯>;dKT{nmV ξa& (Gˋh]$Qiu`a3\u"M- ZUʦw[\(Qv.] ZqXfNF+&c=%GQ┎\% ^p$>_`!Ym}>P3'>CD,CW>s;E¦q><'zC3aq獍tYL$ ,nOUX;ڸ ŢSkޡojes|ZCD%P͇͝LGDNsg$Nc !5!W4hV>g mDE>Pl!S_, qv@*d:z~ m f1B'y@^-) % 6Y=I-H^ҵ+J̡ ;q4vOSFS[Kwo&lm_zZaB=dSU̗|f&%sD.c/hO6+\2nL2u,/N*V[:n";'}@a.Tƀ__A%`GhqЯD4|| DY򷆟5ˉ[KJbsO7?l|S[##BcIC2>wdZ3mU6㛠Q>`HU|cg4,4PH&d-u1H#2ҌE'xp7y/\l  w9ToDbπu:`lt4zL$L0 )Ш?W~|WϞIMbUGe$$cE~U{mDŊ `فzHTbQc |~'{%;C^aX.7 ( 3>~pK'F''4`l"mQ7{b6]8Kvfw#q+d]G+oX;I4?ߟhu!j8W7T_x >Xǟ|"1\=.t <әVIqJ^1Eա̎\?+ut0ᩦ!AeTXzm{['=_gk])-+'JNE k\X.']#;<0辠!N V?օg+﩮Po48T47 MNߨ}E_e}IRON/ԚŸ]_>@~g &RMu ׁQB;=ˏaMU*NS^iɋ%7/XfC`UTܥy/D܋,$=f?,(E5s4-e!#>$#iefF0`iޕ02Xic /6˞F SZsrO9u!U.WU&31?w"0pF~ovb0rFޢ7C`޼dVv(7<>B;_1A¢e{z^'ZM^hJ>aXPme5RK&,i-;+/('qq+Q#YYl!M+ۚ[LSjkYGƅsxcٯDВOgBJN Ja5~{y\z(  ݧjp`0*]ek.T1)+{4?~$(Mlmw/P#[ |/hlNI$DL_)qh=i| XqͺL܆z{uAhyDpG}G|p5K4$ZN'ȸOadz5Wq3 p6CIJ;Y^85Ԡu2]+V 1;Jp}Er͛):ԍgeY,']cgό<{+)r~H\VQ6yؾ ]lh e(uu)&vߝϲYTm:艊niY@Y,JWi =Y]80V}ƕU):#Nw508BB@tkަwix'>:#Nw508BB@tkަwix'> ̈BsK ]Mb!^dP!TQƜd?4&coH%MK'_ :A-M Ĵyށ/:&uyc UD7d6͑%M BAbߍV۠#7|T =*IUʙyT3toxoadGlPWqhxꥃ)exre=D,5[ |&bũɩoѰNHo&J|Hv湟&FЬ{6 ?KѐC zgT+uT7j) i>dA6Bz :lmžWvoh ^ia!{ 3Lޓ=5ef`¦> KfGQ Lv.% e;CVD.~#DCo4Ƌe QnQWa:XJiC+>#'e >?Z:0i-Yg8-Ehxx/v ;Yop.K]goLǴ{ DhlLbT8a+^o4uD/M<s`,o)FZ3ZRvatth#H'ѣҺl\*Qt=zw`}+WG@${MAC_LANG_DIR}/locversion.plistavogadro-1.1.1/avogadro/src/mac/CompleteBundle.cmake.in0000644000175000001440000001621012250371054022166 0ustar marcususers#-- Need this for link line stuff? if(COMMAND cmake_policy) cmake_policy(SET CMP0009 NEW) endif(COMMAND cmake_policy) set(OSX_App "Avogadro.app") # gp_item_default_embedded_path item default_embedded_path_var # # Return the path that others should refer to the item by when the item # is embedded inside a bundle. # # Override on a per-project basis by providing a project-specific # gp_item_default_embedded_path_override function. # function(gp_item_default_embedded_path_override item default_embedded_path_var) # # The assumption here is that all executables in the bundle will be # in same-level-directories inside the bundle. The parent directory # of an executable inside the bundle should be MacOS or a sibling of # MacOS and all embedded paths returned from here will begin with # "@loader_path/../" and will work from all executables in all # such same-level-directories inside the bundle. # # By default, embed things right next to the main bundle executable: # set(install_name_prefix "@executable_path") # ------------------------------------------------------------------- # If your application uses plugins then you should consider using the following # instead but will limit your deployment to OS X 10.4. There is also a patch # needed for CMake that as of Sept 30, 2008 has NOT been applied to CMake. # set (install_name_prefix "@loader_path") set(path "${install_name_prefix}/../MacOS") set(overridden 0) # Embed .dylibs in the Libraries Directory # if(item MATCHES "\\.dylib$") # Don't override the Qt plugins if(NOT item MATCHES "libq[a-zA-Z0-9]*\\.dylib$|libphonon_qt7.dylib$") set(path "${install_name_prefix}/../lib") set(overridden 1) endif(NOT item MATCHES "libq[a-zA-Z0-9]*\\.dylib$|libphonon_qt7.dylib$") # Now for the various Qt plugins - I think this is very hackish... if(item MATCHES "plugins/accessible/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/accessible") set(overridden 1) endif(item MATCHES "plugins/accessible/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/bearer/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/bearer") set(overridden 1) endif(item MATCHES "plugins/bearer/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/designer/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/designer") set(overridden 1) endif(item MATCHES "plugins/designer/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/codecs/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/codecs") set(overridden 1) endif(item MATCHES "plugins/codecs/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/graphicssystems/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/graphicssystems") set(overridden 1) endif(item MATCHES "plugins/graphicssystems/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/iconengines/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/iconengines") set(overridden 1) endif(item MATCHES "plugins/iconengines/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/imageformats/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/imageformats") set(overridden 1) endif(item MATCHES "plugins/imageformats/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/mediaservices/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/mediaservices") set(overridden 1) endif(item MATCHES "plugins/mediaservices/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/phonon_backend/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/phonon_backend") set(overridden 1) endif(item MATCHES "plugins/phonon_backend/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/script/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/script") set(overridden 1) endif(item MATCHES "plugins/script/[a-zA-Z]*\\.dylib$") if(item MATCHES "plugins/sqldrivers/[a-zA-Z]*\\.dylib$") set(path "${install_name_prefix}/../plugins/sqldrivers") set(overridden 1) endif(item MATCHES "plugins/sqldrivers/[a-zA-Z]*\\.dylib$") endif(item MATCHES "\\.dylib$") # Embed .so plugin files in their directories # if(item MATCHES "tool\\.so$") set(path "${install_name_prefix}/../lib/avogadro/tools") set(overridden 1) endif(item MATCHES "tool\\.so$") if(item MATCHES "engine\\.so$") set(path "${install_name_prefix}/../lib/avogadro/engines") set(overridden 1) endif(item MATCHES "engine\\.so$") if(item MATCHES "extension\\.so$") set(path "${install_name_prefix}/../lib/avogadro/extensions") set(overridden 1) endif(item MATCHES "extension\\.so$") if(item MATCHES "color\\.so$") set(path "${install_name_prefix}/../lib/avogadro/colors") set(overridden 1) endif(item MATCHES "color\\.so$") if(item MATCHES "format\\.so$") set(path "${install_name_prefix}/../lib/openbabel") set(overridden 1) endif(item MATCHES "format\\.so$") if(item MATCHES "Interface\\.so$") set(path "${install_name_prefix}/../lib/openbabel") set(overridden 1) endif(item MATCHES "Interface\\.so$") if(item MATCHES "chemdrawcdx.so$|chemdrawct.so$|molreport.so$|pubchem.so") set(path "${install_name_prefix}/../lib/openbabel") set(overridden 1) endif(item MATCHES "chemdrawcdx.so$|chemdrawct.so$|molreport.so$|pubchem.so") # Embed frameworks in the embedded "Frameworks" directory (sibling of MacOS): # if(NOT overridden) if(item MATCHES "[^/]+\\.framework/") set(path "${install_name_prefix}/../Frameworks") set(overridden 1) endif(item MATCHES "[^/]+\\.framework/") endif(NOT overridden) message(STATUS "Item: ${item}, new path ${path}") set(${default_embedded_path_var} "${path}" PARENT_SCOPE) endfunction(gp_item_default_embedded_path_override) # -- Copy the App bundle to the installation location first EXECUTE_PROCESS(COMMAND "@OSX_MAKE_STANDALONE_BUNDLE_BASH_SCRIPT@") file(GLOB_RECURSE pluginList "$ENV{DESTDIR}/Applications/${OSX_App}/Contents/lib/avogadro/*.so") file(GLOB obList "$ENV{DESTDIR}/Applications/${OSX_App}/Contents/lib/openbabel/*") file(GLOB_RECURSE qtPluginList "$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/*.dylib") message(STATUS "PluginList: ${qtPluginList}") # -- Run the BundleUtilities cmake code include(BundleUtilities) fixup_bundle("$ENV{DESTDIR}/Applications/${OSX_App}" "${pluginList};${obList};${qtPluginList}" "@LIB_INSTALL_DIR@;@LIB_INSTALL_DIR@/avogadro/tools;@LIB_INSTALL_DIR@/avogadro/engines;@LIB_INSTALL_DIR@/avogadro/colors;@LIB_INSTALL_DIR@/avogadro/extensions;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/accessible;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/designer;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/iconengines;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/phonon_backend;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/sqldrivers;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/codecs;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/graphicssystems;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/imageformats;$ENV{DESTDIR}/Applications/${OSX_App}/Contents/plugins/script") avogadro-1.1.1/avogadro/src/enginecolorswidget.h0000644000175000001440000000353012250371054021162 0ustar marcususers/********************************************************************** EngineColorsWidget - Widget for setting the engine color map. Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ENGINECOLORSWIDGET_H #define ENGINECOLORSWIDGET_H #include "ui_enginecolorswidget.h" namespace Avogadro { class PluginManager; class Engine; /** * @class EngineColorsWidget * @brief Widget for changing engine color map. * * This widget allows us to modify the engine color map. */ class EngineColorsWidgetPrivate; class EngineColorsWidget : public QWidget { Q_OBJECT public: explicit EngineColorsWidget ( PluginManager *pluginManager, QWidget *parent = 0 ); ~EngineColorsWidget(); public Q_SLOTS: void setEngine ( Engine *engine ); void colorChanged( int ); private: EngineColorsWidgetPrivate *const d; Ui::EngineColorsWidget ui; }; } #endif // ENGINECOLORSWIDGET_H avogadro-1.1.1/avogadro/src/projecttreemodeldelegate.cpp0000644000175000001440000000554512250371054022674 0ustar marcususers/********************************************************************** selectionitem.h - Base class for ProjectItem plugins. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "projecttreemodeldelegate.h" #include #include #include #include using namespace std; namespace Avogadro { class ProjectTreeModelDelegatePrivate { public: ProjectTreeModel *model; QString alias; QVector expandableItems; }; ProjectTreeModelDelegate::ProjectTreeModelDelegate(ProjectTreeModel *model) : d(new ProjectTreeModelDelegatePrivate) { d->model = model; } QWidget *ProjectTreeModelDelegate::settingsWidget() { return 0; } void ProjectTreeModelDelegate::setAlias(const QString &alias) { d->alias = alias; } QString ProjectTreeModelDelegate::alias() const { if(d->alias.isEmpty()) { return name(); } return d->alias; } void ProjectTreeModelDelegate::writeSettings(QSettings &settings) const { settings.setValue("name", name()); settings.setValue("alias", alias()); } void ProjectTreeModelDelegate::readSettings(QSettings &settings) { setAlias(settings.value("alias", name()).toString()); } ProjectTreeItem* ProjectTreeModelDelegate::insertExpandableItem(ProjectTreeItem *parent) { // insert at the end int position = parent->childCount(); d->model->insertRows(parent, position, 1); // retrieve the item ProjectTreeItem *item = parent->child(position); // set it to non-terminal item->setTerminal(false); // store it (for hasExpandableItem & fetchMore) d->expandableItems.append(item); return item; } bool ProjectTreeModelDelegate::hasExpandableItem(ProjectTreeItem *parent) const { return d->expandableItems.contains(parent); } ProjectTreeModel* ProjectTreeModelDelegate::model() const { return d->model; } void ProjectTreeModelDelegate::exportDelegate(ProjectTreeModelDelegate *delegate) { d->model->importDelegate(delegate); } } // end namespace Avogadro #include "projecttreemodeldelegate.moc" avogadro-1.1.1/avogadro/src/enginelistview.cpp0000644000175000001440000000571412250371054020664 0ustar marcususers/********************************************************************** EngineListView - View for listing engines Copyright (C) 2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "enginelistview.h" #include "engineitemmodel.h" #include #include #include #include #include #include #include #include namespace Avogadro { EngineListView::EngineListView( GLWidget *glWidget, QWidget *parent ) : QListView(parent), m_glWidget(glWidget) { m_model = new EngineItemModel(m_glWidget, this); // This should sort the engine names for user views // It should also update dynamically as people edit names // Somehow it doesn't work right from the start! QSortFilterProxyModel *sortModel = new QSortFilterProxyModel(this); sortModel->setSourceModel(m_model); setModel(sortModel); sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); sortModel->setSortLocaleAware(true); sortModel->setDynamicSortFilter(true); sortModel->sort(0, Qt::AscendingOrder); connect(this, SIGNAL(clicked(QModelIndex)), this, SLOT(selectEngine(QModelIndex))); // This might work for having the proxy model emit the signal, but let's keep it as-is connect(m_model, SIGNAL(dataChanged(QModelIndex, QModelIndex)), glWidget, SLOT(update())); // improves display performance setUniformItemSizes(true); setAlternatingRowColors(true); // looks better } EngineListView::~EngineListView() { } GLWidget *EngineListView::glWidget() const { return m_glWidget; } void EngineListView::selectEngine( const QModelIndex &index ) { Engine *engine = model()->data(index, EngineItemModel::EngineRole).value(); if(engine) { emit clicked(engine); } } Engine *EngineListView::selectedEngine() const { QModelIndex idx = currentIndex(); if(idx.isValid()) { Engine *engine = model()->data(idx, EngineItemModel::EngineRole).value(); return engine; } return 0; } void EngineListView::clear() { m_model->clear(); } } // end namespace Avogadro #include "enginelistview.moc" avogadro-1.1.1/avogadro/src/flattabwidget.h0000644000175000001440000000462412250371054020115 0ustar marcususers/********************************************************************** FlatTabBar - Flat Tab Bar Design Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef FLATTABWIDGET_H #define FLATTABWIDGET_H #include #include #include #include #include #include namespace Avogadro { class FlatTabBar; class FlatHandle; class FlatTabWidget : public QWidget { Q_OBJECT public: FlatTabWidget(QWidget *parent = 0); int addTab(QWidget *widget, const QString& title); QSize sizeHint() const; QSize minimumSize() const; QSize minimumSizeHint() const; QSize maximumSize() const; protected: void resizeEvent(QResizeEvent *event); private: QVBoxLayout *m_layout; QStackedWidget *m_stack; FlatHandle *m_handle; FlatTabBar *m_tabBar; int currentIndex; Q_SIGNALS: void tabToggled(int index); public Q_SLOTS: void tabPressEvent(int index); }; class FlatTabBar : public QTabBar { Q_OBJECT public: FlatTabBar(QWidget *parent = 0); protected: void mousePressEvent(QMouseEvent *event); Q_SIGNALS: void tabPressed(int); }; class FlatHandle : public QWidget { Q_OBJECT public: FlatHandle(QWidget *parent = 0); QSize sizeHint() const; protected: void paintEvent(QPaintEvent *event); bool event(QEvent *event); void mouseMoveEvent(QMouseEvent *e); void mousePressEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e); private: bool hover; }; } #endif avogadro-1.1.1/avogadro/src/application.cpp0000644000175000001440000000526612250371054020135 0ustar marcususers/********************************************************************** Application - main application events Copyright (C) 2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "application.h" #include "mainwindow.h" // The Krazy checker doesn't like this, but it's correct // krazy:excludeall=cpp #ifdef Q_OS_UNIX # include "locale.h" #endif // Q_OS_UNIX using namespace std; namespace Avogadro { Application::Application(int &argc, char **argv): QApplication(argc, argv) { #ifdef Q_OS_UNIX // work around a bug in OpenBabel: the chemical data files parsing // is dependent on the LC_NUMERIC locale. // Note that similar code currently exists in Qt (as of 4.3.1) in // src/corelib/kernel/qcoreapplication.cpp, so the code here is // not currently needed, but the following link indicates that the // fix might be removed from Qt in a future version: // http://trolltech.com/developer/task-tracker/index_html?method=entry&id=132859 // So we prefer to have this fix here preventively. setlocale(LC_NUMERIC, "C"); #endif // Q_OS_UNIX } // Handle open events (e.g., Mac OS X open files) bool Application::event(QEvent *event) { switch (event->type()) { case QEvent::FileOpen: return loadFile(static_cast(event)->file()); default: return QApplication::event(event); } } bool Application::loadFile(const QString &fileName) { if (fileName.isEmpty()) { return false; } // check to see if we already have an open window // (we'll let MainWindow handle the real work) MainWindow *window = NULL; foreach (QWidget *widget, topLevelWidgets()) { window = qobject_cast(widget); if (window) break; } // if not, need to make this spawn a new instance if (!window) window = new MainWindow; window->openFile(fileName); window->show(); return true; } } // end namespace Avogadro #include "application.moc" avogadro-1.1.1/avogadro/src/importdialog.cpp0000644000175000001440000001343712250371054020323 0ustar marcususers/********************************************************************** ImportDialog - Import Dialog Copyright (C) 2007-2008 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "importdialog.h" #include "mainwindow.h" #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { bool formatCompare(OBFormat *first, OBFormat *second) { return first->Description() < second->Description(); } ImportDialog::ImportDialog(MainWindow *mainWindow) : QDialog(mainWindow), m_mainWindow(mainWindow), m_filename(""), m_currentFormat(0) { ui.setupUi(this); // Set up list of codes and descriptions OBConversion conv; OBFormat *pFormat; Formatpos pos; const char* str=NULL; // This loops through by unique extension // The catch is that some formats have multiple extensions // So some formats, we'll see them a few times while(OBConversion::GetNextFormat(pos,str,pFormat)) { if(!pFormat || (pFormat->Flags() & NOTREADABLE)) continue; // obviously we only care about readable formats if (!m_formatList.contains(pFormat)) { m_formatList.append(pFormat); } } qSort(m_formatList.begin(), m_formatList.end(), formatCompare); foreach(OBFormat *pFormat, m_formatList) { QString description(pFormat->Description()); // There can be multiple lines in the description -- we only want one int lineEnding = description.indexOf('\n'); if (lineEnding != -1) description.truncate(lineEnding); // remove any remaining initial or ending whitespace description = description.trimmed(); ui.formatComboBox->addItem(description); } // reset the checkboxes to defaults ui.checkBoxBonding->setChecked(true); ui.checkBoxBondOrders->setChecked(true); ui.checkBoxAngstroms->setChecked(true); connect(ui.formatComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(changedFormat(int))); connect(ui.checkBoxBonding, SIGNAL(stateChanged(int)), this, SLOT(changedOptions(int))); connect(ui.selectButton, SIGNAL(clicked(bool)), this, SLOT(updateFilename(bool))); connect(ui.dialogButtonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(buttonClicked(QAbstractButton *))); } void ImportDialog::buttonClicked(QAbstractButton *button) { QDialogButtonBox::ButtonRole role = ui.dialogButtonBox->buttonRole(button); if(role == QDialogButtonBox::ApplyRole || role == QDialogButtonBox::AcceptRole) accepted(); else if (role == QDialogButtonBox::RejectRole) rejected(); } void ImportDialog::accepted() { if (!m_mainWindow) return; // nothing we can do OBFormat *pFormat = NULL; int currentFormat = ui.formatComboBox->currentIndex() - 1; if (currentFormat >= 0) { pFormat = m_formatList[currentFormat]; } QString options; if (ui.checkBoxBonding->isEnabled() && !ui.checkBoxBonding->isChecked()) options = "b\n"; else if ((ui.checkBoxBonding->isEnabled() && ui.checkBoxBonding->isChecked()) && (ui.checkBoxBondOrders->isEnabled() && !ui.checkBoxBondOrders->isChecked())) options = "s\n"; if (ui.checkBoxAngstroms->isEnabled() && ui.checkBoxAngstroms->isChecked()) options += "a\n"; m_mainWindow->loadFile(ui.fileName->text(), pFormat, options); } void ImportDialog::rejected() { // qDebug() << "close"; } void ImportDialog::changedFormat(int formatIndex) { m_currentFormat = formatIndex; // reset the checkboxes to defaults ui.checkBoxBonding->setEnabled(true); ui.checkBoxBonding->setChecked(true); ui.checkBoxBondOrders->setEnabled(true); ui.checkBoxBondOrders->setChecked(true); ui.checkBoxAngstroms->setEnabled(true); ui.checkBoxAngstroms->setChecked(true); // need to hide a bunch of stuff for auto-detection if (formatIndex >= 1) // not automatic detection { QString description = m_formatList[formatIndex - 1]->Description(); // Don't translate these search strings -- they are literals from Open Babel ui.checkBoxBonding->setEnabled(description.contains("Disable bonding entirely")); ui.checkBoxBondOrders->setEnabled(description.contains("Output single bonds only")); ui.checkBoxAngstroms->setEnabled(description.contains("Input in Angstroms")); } } void ImportDialog::changedOptions(int state) { Q_UNUSED(state); // if the bonding checkbox is set, we can set or unset bond orders ui.checkBoxBondOrders->setEnabled(ui.checkBoxBonding->isChecked()); } void ImportDialog::updateFilename(bool) { m_filename = QFileDialog::getOpenFileName( this, tr("Open File") ); ui.fileName->setText(m_filename); } } // end namespace Avogadro #include "importdialog.moc" avogadro-1.1.1/avogadro/src/engineitemdelegate.h0000644000175000001440000000345412250371054021113 0ustar marcususers/********************************************************************** EngineItemDelegate - custom item delegate for engine items Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ENGINEITEMDELEGATE_H #define ENGINEITEMDELEGATE_H #include namespace Avogadro { /** * @class EngineItemDelegate * @brief Item delegate for Engine objects. * * This item delegate does some limited custom painting for engine items * used in the EngineViewWidget. Mainly to allow inline clicking of the * configuration dialog, although it could be extended for further functions. */ class EngineItemDelegate : public QStyledItemDelegate { Q_OBJECT public: EngineItemDelegate(QObject *parent = 0); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; }; } // End namespace Avogadro #endif // ENGINEITEMDELEGATE_H avogadro-1.1.1/avogadro/src/projecttreeeditor.cpp0000644000175000001440000004100712250371054021360 0ustar marcususers/********************************************************************** ProjectTreeEditor - Class for handling color changes in OpenGL Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "projecttreeeditor.h" #include "projectdelegates/labeldelegate.h" #include "projectdelegates/moleculedelegate.h" #include "projectdelegates/atomdelegate.h" #include "projectdelegates/bonddelegate.h" #include "projectdelegates/residuedelegate.h" #include "projectdelegates/selectiondelegate.h" #include #include #include #include #include namespace Avogadro { enum Index { LabelIndex, MoleculeIndex, AtomIndex, BondIndex, ResidueIndex, SelectionIndex }; ProjectTreeEditor::ProjectTreeEditor(QWidget *parent) : QWidget(parent), m_updating(false) { ui.setupUi(this); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); ui.treeWidget->header()->setMovable(false); ui.itemTypeCombo->addItem(tr("Label")); ui.itemTypeCombo->addItem(tr("Molecule")); ui.itemTypeCombo->addItem(tr("Atoms")); ui.itemTypeCombo->addItem(tr("Bonds")); ui.itemTypeCombo->addItem(tr("Residues")); ui.itemTypeCombo->addItem(tr("User Selections")); loadValues(); } ProjectTreeEditor::~ProjectTreeEditor() { } void ProjectTreeEditor::on_newItemButton_clicked() { m_updating = true; // create a new QTreeWidgetItem QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); QTreeWidgetItem *newItem = 0; if (curItem) { if (curItem->parent()) newItem = new QTreeWidgetItem(curItem->parent(), curItem); else newItem = new QTreeWidgetItem(ui.treeWidget, curItem); } else newItem = new QTreeWidgetItem(ui.treeWidget); newItem->setText(0, ui.itemTypeCombo->currentText()); // create a new ProjectTreeModelDelegate for this QTreeWidgetItem switch (ui.itemTypeCombo->currentIndex()) { default: case LabelIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new LabelDelegate(0); break; case MoleculeIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new MoleculeDelegate(0); break; case AtomIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new AtomDelegate(0); break; case BondIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new BondDelegate(0); break; case ResidueIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new ResidueDelegate(0); break; case SelectionIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new SelectionDelegate(0); break; } ui.treeWidget->setCurrentItem(newItem, 0); m_updating = false; updateEditor(); } void ProjectTreeEditor::on_newSubItemButton_clicked() { QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); if (!curItem) return; if (m_hash[curItem]->name() != tr("Label")) { QMessageBox::information(this, tr("Error"), tr("only labels can have sub items")); return; } m_updating = true; // create a new QTreeWidgetItem QTreeWidgetItem *newItem = new QTreeWidgetItem(curItem); newItem->setText(0, ui.itemTypeCombo->currentText()); // create a new ProjectTreeModelDelegate for this QTreeWidgetItem switch (ui.itemTypeCombo->currentIndex()) { default: case LabelIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new LabelDelegate(0); break; case MoleculeIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new MoleculeDelegate(0); break; case AtomIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new AtomDelegate(0); break; case BondIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new BondDelegate(0); break; case ResidueIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new ResidueDelegate(0); break; case SelectionIndex: m_hash[newItem] = (ProjectTreeModelDelegate*) new SelectionDelegate(0); break; } ui.treeWidget->setCurrentItem(newItem, 0); m_updating = false; updateEditor(); } void ProjectTreeEditor::on_deleteItemButton_clicked() { QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); if (!curItem) return; m_updating = true; QTreeWidgetItem *nextCurrent = 0; if (curItem->parent()) { int idx = curItem->parent()->indexOfChild(curItem); if (idx == curItem->parent()->childCount() - 1) idx--; else idx++; if (idx < 0) nextCurrent = curItem->parent(); else nextCurrent = curItem->parent()->child(idx); } else { int idx = ui.treeWidget->indexOfTopLevelItem(curItem); if (idx == ui.treeWidget->topLevelItemCount() - 1) idx--; else idx++; if (idx >= 0) nextCurrent = ui.treeWidget->topLevelItem(idx); } closeEditors(); delete curItem; if (nextCurrent) ui.treeWidget->setCurrentItem(nextCurrent, 0); m_updating = false; updateEditor(); } void ProjectTreeEditor::on_moveItemUpButton_clicked() { QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); if (!curItem) return; int idx; if (curItem->parent()) idx = curItem->parent()->indexOfChild(curItem); else idx = ui.treeWidget->indexOfTopLevelItem(curItem); if (idx == 0) return; m_updating = true; QTreeWidgetItem *takenItem = 0; if (curItem->parent()) { QTreeWidgetItem *parentItem = curItem->parent(); takenItem = parentItem->takeChild(idx); parentItem->insertChild(idx - 1, takenItem); } else { takenItem = ui.treeWidget->takeTopLevelItem(idx); ui.treeWidget->insertTopLevelItem(idx - 1, takenItem); } ui.treeWidget->setCurrentItem(takenItem, 0); m_updating = false; updateEditor(); } void ProjectTreeEditor::on_moveItemDownButton_clicked() { QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); if (!curItem) return; int idx, idxCount; if (curItem->parent()) { idx = curItem->parent()->indexOfChild(curItem); idxCount = curItem->parent()->childCount(); } else { idx = ui.treeWidget->indexOfTopLevelItem(curItem); idxCount = ui.treeWidget->topLevelItemCount(); } if (idx == idxCount - 1) return; m_updating = true; QTreeWidgetItem *takenItem = 0; if (curItem->parent()) { QTreeWidgetItem *parentItem = curItem->parent(); takenItem = parentItem->takeChild(idx); parentItem->insertChild(idx + 1, takenItem); } else { takenItem = ui.treeWidget->takeTopLevelItem(idx); ui.treeWidget->insertTopLevelItem(idx + 1, takenItem); } ui.treeWidget->setCurrentItem(takenItem, 0); m_updating = false; updateEditor(); } void ProjectTreeEditor::on_moveItemLeftButton_clicked() { QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); if (!curItem) return; QTreeWidgetItem *parentItem = curItem->parent(); if (!parentItem) return; m_updating = true; QTreeWidgetItem *takenItem = parentItem->takeChild(parentItem->indexOfChild(curItem)); if (parentItem->parent()) { int idx = parentItem->parent()->indexOfChild(parentItem); parentItem->parent()->insertChild(idx, takenItem); } else { int idx = ui.treeWidget->indexOfTopLevelItem(parentItem); ui.treeWidget->insertTopLevelItem(idx, takenItem); } ui.treeWidget->setCurrentItem(takenItem, 0); m_updating = false; updateEditor(); } void ProjectTreeEditor::on_moveItemRightButton_clicked() { QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); if (!curItem) return; int idx, idxCount; if (curItem->parent()) { idx = curItem->parent()->indexOfChild(curItem); idxCount = curItem->parent()->childCount(); } else { idx = ui.treeWidget->indexOfTopLevelItem(curItem); idxCount = ui.treeWidget->topLevelItemCount(); } if (idx == idxCount - 1) return; m_updating = true; QTreeWidgetItem *takenItem = 0; if (curItem->parent()) { QTreeWidgetItem *parentItem = curItem->parent()->child(idx + 1); takenItem = curItem->parent()->takeChild(idx); parentItem->insertChild(0, takenItem); } else { QTreeWidgetItem *parentItem = ui.treeWidget->topLevelItem(idx + 1); takenItem = ui.treeWidget->takeTopLevelItem(idx); parentItem->insertChild(0, takenItem); } ui.treeWidget->setCurrentItem(takenItem, 0); m_updating = false; updateEditor(); } void ProjectTreeEditor::on_treeWidget_currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *) { if (m_updating) return; updateEditor(); } void ProjectTreeEditor::on_aliasEdit_textEdited(const QString &) { QTreeWidgetItem *current = ui.treeWidget->currentItem(); if (current) m_hash.value(current)->setAlias( ui.aliasEdit->text() ); } void ProjectTreeEditor::on_settingsButton_clicked() { QTreeWidgetItem *current = ui.treeWidget->currentItem(); if (current) m_hash.value(current)->settingsWidget()->show(); } void ProjectTreeEditor::updateEditor() { QTreeWidgetItem *current = ui.treeWidget->currentItem(); if (!current) return; bool itemsEnabled = true; bool currentItemEnabled = false; bool moveItemUpEnabled = false; bool moveItemDownEnabled = false; bool moveItemRightEnabled = false; bool moveItemLeftEnabled = false; bool settingsButtonEnabled = false; QString aliasText, typeText; if (current) { int idx; int idxCount; currentItemEnabled = true; if (current->parent()) { moveItemLeftEnabled = true; idx = current->parent()->indexOfChild(current); idxCount = current->parent()->childCount(); } else { idx = ui.treeWidget->indexOfTopLevelItem(current); idxCount = ui.treeWidget->topLevelItemCount(); } if (idx > 0) moveItemUpEnabled = true; if (idx < idxCount - 1) { moveItemDownEnabled = true; moveItemRightEnabled = true; } ProjectTreeModelDelegate *plugin = m_hash.value(current); if (plugin) { aliasText = plugin->alias(); typeText = plugin->name(); if (plugin->settingsWidget()) settingsButtonEnabled = true; } } ui.itemsBox->setEnabled(itemsEnabled); ui.textLabel->setEnabled(currentItemEnabled); //ui.itemTypeCombo->setEnabled(currentItemEnabled); ui.newSubItemButton->setEnabled(currentItemEnabled); ui.deleteItemButton->setEnabled(currentItemEnabled); ui.moveItemUpButton->setEnabled(moveItemUpEnabled); ui.moveItemDownButton->setEnabled(moveItemDownEnabled); ui.moveItemRightButton->setEnabled(moveItemRightEnabled); ui.moveItemLeftButton->setEnabled(moveItemLeftEnabled); ui.settingsButton->setEnabled(settingsButtonEnabled); ui.aliasEdit->setText( aliasText ); ui.typeEdit->setText( typeText ); } void ProjectTreeEditor::on_itemTypeCombo_currentIndexChanged(int) { /* if (m_updating) return; QTreeWidgetItem *curItem = ui.treeWidget->currentItem(); if (!curItem) return; m_updating = true; curItem->setText(0, ui.itemTypeCombo->currentText()); ProjectTreeModelDelegate *oldPlugin = m_hash.value(curItem); delete oldPlugin; m_hash.remove(curItem); PluginFactory *factory = pluginManager.projectItemClassFactory().value(ui.itemTypeCombo->currentText()); if (factory) { ProjectTreeModelDelegate *plugin = factory->createInstance(); m_hash[curItem] = plugin; } m_updating = false; updateEditor(); */ } void ProjectTreeEditor::closeEditors() { if (QTreeWidgetItem *cur = ui.treeWidget->currentItem() ) { const int numCols = cur->columnCount (); for (int i = 0; i < numCols; i++) { ui.treeWidget->closePersistentEditor (cur, i); } } } void ProjectTreeEditor::loadValues() { ui.treeWidget->clear(); QTreeWidgetItem *newItem; QList parents; QList indentations; parents << ui.treeWidget->invisibleRootItem(); indentations << 0; QSettings settings; settings.beginGroup("projectTree"); int size = settings.beginReadArray("items"); if (size == 0) { // default (i.e., never started a project tree) // Start with a molecule delegate newItem = new QTreeWidgetItem(parents.last()); newItem->setText(0, tr("Molecule")); m_hash[newItem] = (ProjectTreeModelDelegate*) new MoleculeDelegate(0); } else { for (int i = 0; i < size; ++i) { settings.setArrayIndex( i ); int position = settings.value("indent").toInt(); if (position > indentations.last()) { // The last child of the current parent is now the new parent // unless the current parent has no children. if (parents.last()->childCount() > 0) { parents << parents.last()->child(parents.last()->childCount()-1); indentations << position; } } else { while (position < indentations.last() && parents.count() > 0) { parents.pop_back(); indentations.pop_back(); } } // Append a new item to the current parent's list of children. newItem = new QTreeWidgetItem(parents.last()); newItem->setText(0, settings.value("alias").toString()); // create a new ProjectTreeModelDelegate for this QTreeWidgetItem if (settings.value("name").toString() == tr("Label")) { m_hash[newItem] = (ProjectTreeModelDelegate*) new LabelDelegate(0); } else if (settings.value("name").toString() == tr("Molecule")) { m_hash[newItem] = (ProjectTreeModelDelegate*) new MoleculeDelegate(0); } else if (settings.value("name").toString() == tr("Atoms")) { m_hash[newItem] = (ProjectTreeModelDelegate*) new AtomDelegate(0); } else if (settings.value("name").toString() == tr("Bonds")) { m_hash[newItem] = (ProjectTreeModelDelegate*) new BondDelegate(0); } else if (settings.value("name").toString() == tr("Residues")) { m_hash[newItem] = (ProjectTreeModelDelegate*) new ResidueDelegate(0); } else if (settings.value("name").toString() == tr("User Selections")) { m_hash[newItem] = (ProjectTreeModelDelegate*) new SelectionDelegate(0); } if (!m_hash[newItem]) continue; m_hash[newItem]->readSettings(settings); } } settings.endArray(); settings.endGroup(); } void ProjectTreeEditor::writeItem(QSettings &settings, QTreeWidgetItem *cur, int indent, int &idx) { if (!cur) return; settings.setArrayIndex(idx); settings.setValue("indent", indent); if (!m_hash.value(cur)) return; m_hash.value(cur)->writeSettings(settings); indent++; idx++; for (int j = 0; j < cur->childCount(); ++j) { QTreeWidgetItem *child = cur->child( j ); writeItem(settings, child, indent, idx); } } void ProjectTreeEditor::saveValues() { int indent = 0; int idx = 0; QSettings settings; settings.beginGroup("projectTree"); settings.beginWriteArray("items"); for (int i = 0; i < ui.treeWidget->topLevelItemCount(); ++i) { // for each top item QTreeWidgetItem *cur = ui.treeWidget->topLevelItem( i ); writeItem(settings, cur, indent, idx); } settings.endArray(); settings.endGroup(); emit structureChanged(); } } #include "projecttreeeditor.moc" avogadro-1.1.1/avogadro/src/mainwindow.cpp0000644000175000001440000037071212250371054020007 0ustar marcususers/********************************************************************** MainWindow - main window, menus, main actions Copyright (C) 2006-2007 by Geoffrey R. Hutchison Copyright (C) 2006-2008 by Donald E. Curtis Copyright (C) 2007-2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include #include #include "mainwindow.h" #include "config.h" // krazy:exclude=includes #include "aboutdialog.h" #include "addenginedialog.h" #include "editcommands.h" #include "importdialog.h" #include "settingsdialog.h" #include "pluginsettings.h" #include "savedialog.h" #include "engineitemmodel.h" #include "engineviewwidget.h" #include "engineprimitiveswidget.h" #include "primitiveitemmodel.h" #include "enginecolorswidget.h" #include "glgraphicsview.h" #include "detachedview.h" #ifdef ENABLE_UPDATE_CHECKER #include "updatecheck.h" #endif //#ifdef Q_WS_MAC //#include "macchempasteboard.h" //#endif #include // Does not work for me with out of source builds at least - ui_projecttreeeditor.h // can't be found and avogadro should be able to build without libavogadro #include "projecttreeeditor.h" #include "projecttreemodel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef ENABLE_PYTHON #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define USEQUAT // This is a "hidden" exported Qt function on the Mac for Qt-4.x. #ifdef Q_WS_MAC void qt_mac_set_menubar_icons(bool enable); #endif #ifdef QTTESTING #include #include #include #include #endif using namespace std; using namespace OpenBabel; using namespace Eigen; namespace Avogadro { #ifdef QTTESTING class XMLEventObserver : public pqEventObserver { QXmlStreamWriter* XMLStream; QString XMLString; public: XMLEventObserver(QObject* p) : pqEventObserver(p) { this->XMLStream = NULL; } ~XMLEventObserver() { delete this->XMLStream; } protected: virtual void setStream(QTextStream* stream) { if (this->XMLStream) { this->XMLStream->writeEndElement(); this->XMLStream->writeEndDocument(); delete this->XMLStream; this->XMLStream = NULL; } if (this->Stream) *this->Stream << this->XMLString; this->XMLString = QString(); pqEventObserver::setStream(stream); if (this->Stream) { this->XMLStream = new QXmlStreamWriter(&this->XMLString); this->XMLStream->setAutoFormatting(true); this->XMLStream->writeStartDocument(); this->XMLStream->writeStartElement("events"); } } virtual void onRecordEvent(const QString& widget, const QString& command, const QString& arguments) { if(this->XMLStream) { this->XMLStream->writeStartElement("event"); this->XMLStream->writeAttribute("widget", widget); this->XMLStream->writeAttribute("command", command); this->XMLStream->writeAttribute("arguments", arguments); this->XMLStream->writeEndElement(); } } }; class XMLEventSource : public pqEventSource { typedef pqEventSource Superclass; QXmlStreamReader *XMLStream; public: XMLEventSource(QObject* p): Superclass(p) { this->XMLStream = NULL;} ~XMLEventSource() { delete this->XMLStream; } protected: virtual void setContent(const QString& xmlfilename) { delete this->XMLStream; this->XMLStream = NULL; QFile xml(xmlfilename); if (!xml.open(QIODevice::ReadOnly)) { qDebug() << "Failed to load " << xmlfilename; return; } QByteArray data = xml.readAll(); this->XMLStream = new QXmlStreamReader(data); } int getNextEvent(QString& widget, QString& command, QString& arguments) { if (this->XMLStream->atEnd()) return DONE; while (!this->XMLStream->atEnd()) { QXmlStreamReader::TokenType token = this->XMLStream->readNext(); if (token == QXmlStreamReader::StartElement) { if (this->XMLStream->name() == "event") break; } } if (this->XMLStream->atEnd()) return DONE; widget = this->XMLStream->attributes().value("widget").toString(); command = this->XMLStream->attributes().value("command").toString(); arguments = this->XMLStream->attributes().value("arguments").toString(); return SUCCESS; } }; #endif enum BuilderOption { AskUser = 0, AlwaysBuild = 1, NeverBuild = 2 }; class MainWindowPrivate { public: EIGEN_MAKE_ALIGNED_OPERATOR_NEW MainWindowPrivate() : molecule( 0 ), undoStack( 0 ), toolsLayout( 0 ), toolSettingsStacked(0), toolSettingsWidget(0), toolSettingsDock(0), currentSelectedEngine(0), messagesText( 0 ), glWidget(0), centralLayout(0), centralTab(0), bottomFlat(0), toolGroup( 0 ), settingsDialog( 0 ), importFile(0), initialized( false ), centerTimer(0), centerTime(0), build3D(AskUser), moleculeFile(0), currentIndex(0), progressDialog(0), allMoleculesTable(0), allMoleculesDialog(0) {} Molecule *molecule; QString fileName; QString fileDialogPath; QUndoStack *undoStack; QVBoxLayout *toolsLayout; // we must manage this if we want it to be dynamic QStackedLayout *toolSettingsStacked; QWidget *toolSettingsWidget; QDockWidget *toolSettingsDock; QStackedLayout *enginesStacked; Engine *currentSelectedEngine; // for settings widget title, etc. QTextEdit *messagesText; QList glWidgets; GLWidget *glWidget; QVBoxLayout *centralLayout; QTabWidget *centralTab; FlatTabWidget *bottomFlat; // Pointer to an action group for "View > Projection" QActionGroup *projectionGroup; ToolGroup *toolGroup; QAction *actionRecentFile[MainWindow::maxRecentFiles]; SettingsDialog *settingsDialog; ImportDialog *importFile; // used for hideMainWindowMac() / showMainWindowMac() // save enable/disable status of every menu item QVector< QVector > menuItemStatus; bool initialized; bool fileToolbar; bool statusBar; Quaterniond startOrientation, endOrientation; Vector3d deltaTrans, startTrans; double rotationAcceleration; long rotationStart; int rotationTime; QTimer *centerTimer; int centerTime; PluginManager pluginManager; BuilderOption build3D; // Track all the molecules in a file MoleculeFile *moleculeFile; unsigned int currentIndex; QProgressDialog *progressDialog; QTableWidget *allMoleculesTable; QDialog *allMoleculesDialog; QMap engineSettingsWindows; }; const int MainWindow::m_configFileVersion = 3; unsigned int getMainWindowCount() { unsigned int mainWindowCount = 0; foreach( QWidget *widget, qApp->topLevelWidgets() ) { if ( qobject_cast( widget ) ) mainWindowCount++; } return mainWindowCount; } MainWindow::MainWindow() : QMainWindow( 0 ), d( new MainWindowPrivate ) { constructor(); } MainWindow::MainWindow( const QString &fileName) : QMainWindow( 0 ), d( new MainWindowPrivate ) { constructor(); d->fileName = fileName; } MainWindow::~MainWindow() { delete(d); } void MainWindow::constructor() { ui.setupUi( this ); QSettings settings; d->centralLayout = new QVBoxLayout(ui.centralWidget); // settings relies on the centralTab widget d->centralTab = new QTabWidget(ui.centralWidget); d->centralTab->setObjectName("centralTab"); d->centralTab->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); d->centralTab->setDocumentMode(true); d->centralTab->setTabsClosable(false); // by default, we just have one tab d->centralLayout->addWidget(d->centralTab); // Set up the signal/slot for closing tabs from the tab widget connect(d->centralTab, SIGNAL(tabCloseRequested(int)), this, SLOT(closeView(int))); setAttribute( Qt::WA_DeleteOnClose ); setAcceptDrops(true); // add our bottom flat tabs d->bottomFlat = new FlatTabWidget(this); d->centralLayout->addWidget(d->bottomFlat); d->undoStack = new QUndoStack( this ); d->toolGroup = new ToolGroup( this ); connect(&(d->pluginManager), SIGNAL(reloadPlugins()), this, SLOT(reloadPlugins())); ui.enginesWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); d->enginesStacked = new QStackedLayout( ui.enginesWidget ); // create messages widget QWidget *messagesWidget = new QWidget(this); QVBoxLayout *messagesVBox = new QVBoxLayout( messagesWidget ); d->messagesText = new QTextEdit(this); d->messagesText->setReadOnly( true ); #ifdef ENABLE_PYTHON connect(PythonError::instance(), SIGNAL(message(const QString&)), d->messagesText, SLOT(append(const QString&))); d->messagesText->append( PythonError::instance()->string() ); PythonError::instance()->setListening(true); // switch to 'listening mode' #endif messagesVBox->setMargin( 3 ); messagesVBox->addWidget( d->messagesText ); d->bottomFlat->addTab( messagesWidget, tr( "Messages" ) ); // put in the recent files for ( int i = 0; i < maxRecentFiles; ++i ) { d->actionRecentFile[i] = new QAction( this ); d->actionRecentFile[i]->setVisible( false ); ui.menuOpenRecent->addAction( d->actionRecentFile[i] ); connect( d->actionRecentFile[i], SIGNAL( triggered() ), this, SLOT( openRecentFile() ) ); } ui.menuOpenRecent->addSeparator(); ui.menuOpenRecent->addAction( ui.actionClearRecent ); QAction *undoAction = d->undoStack->createUndoAction( this ); QAction *redoAction = d->undoStack->createRedoAction( this ); #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) // Load icons from desktop theme // File const QIcon newIcon = QIcon::fromTheme("document-new", QIcon(":/icons/document-new.png")); const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/icons/document-open.png")); const QIcon saveIcon = QIcon::fromTheme("document-save", QIcon(":/icons/document-save.png")); const QIcon saveAsIcon = QIcon::fromTheme("document-save-as", QIcon(":/icons/document-save-as.png")); const QIcon revertIcon = QIcon::fromTheme("document-revert", QIcon(":/icons/document-revert.png")); const QIcon closeIcon = QIcon::fromTheme("document-close", QIcon(":/icons/document-close.png")); const QIcon importIcon = QIcon::fromTheme("document-import", QIcon(":/icons/document-import.png")); const QIcon exportIcon = QIcon::fromTheme("document-export", QIcon(":/icons/document-export.png")); const QIcon quitIcon = QIcon::fromTheme("application-exit", QIcon(":/icons/application-exit.png")); // Edit const QIcon undoIcon = QIcon::fromTheme("edit-undo", QIcon(":/icons/edit-undo.png")); const QIcon redoIcon = QIcon::fromTheme("edit-redo", QIcon(":/icons/edit-redo.png")); const QIcon cutIcon = QIcon::fromTheme("edit-cut", QIcon(":/icons/edit-cut.png")); const QIcon copyIcon = QIcon::fromTheme("edit-copy", QIcon(":/icons/edit-copy.png")); const QIcon pasteIcon = QIcon::fromTheme("edit-paste", QIcon(":/icons/edit-paste.png")); const QIcon clearIcon = QIcon::fromTheme("edit-clear", QIcon(":/icons/edit-clear.png")); #else // Load icons // File const QIcon newIcon = QIcon(":/icons/document-new.png"); const QIcon openIcon = QIcon(":/icons/document-open.png"); const QIcon saveIcon = QIcon(":/icons/document-save.png"); const QIcon saveAsIcon = QIcon(":/icons/document-save-as.png"); const QIcon revertIcon = QIcon(":/icons/document-revert.png"); const QIcon closeIcon = QIcon(":/icons/document-close.png"); const QIcon importIcon = QIcon(":/icons/document-import.png"); const QIcon exportIcon = QIcon(":/icons/document-export.png"); const QIcon quitIcon = QIcon(":/icons/application-exit.png"); // Edit const QIcon undoIcon = QIcon(":/icons/edit-undo.png"); const QIcon redoIcon = QIcon(":/icons/edit-redo.png"); const QIcon cutIcon = QIcon(":/icons/edit-cut.png"); const QIcon copyIcon = QIcon(":/icons/edit-copy.png"); const QIcon pasteIcon = QIcon(":/icons/edit-paste.png"); const QIcon clearIcon = QIcon(":/icons/edit-clear.png"); #endif // Set toolbar icons ui.actionNewTool->setIcon(newIcon); ui.actionOpenTool->setIcon(openIcon); ui.actionSaveTool->setIcon(saveIcon); ui.actionCloseTool->setIcon(closeIcon); ui.actionQuitTool->setIcon(quitIcon); // Set file menu icons ui.actionNew->setIcon(newIcon); ui.actionOpen->setIcon(openIcon); ui.actionClose->setIcon(closeIcon); ui.actionSave->setIcon(saveIcon); ui.actionSaveAs->setIcon(saveAsIcon); ui.actionRevert->setIcon(revertIcon); ui.actionImport_File->setIcon(importIcon); ui.actionExportGraphics->setIcon(exportIcon); ui.actionExportGL2PS->setIcon(exportIcon); // Set edit menu icons undoAction->setIcon(undoIcon); redoAction->setIcon(redoIcon); ui.actionCut->setIcon(cutIcon); ui.actionCopy->setIcon(copyIcon); ui.actionPaste->setIcon(pasteIcon); ui.actionClear->setIcon(clearIcon); undoAction->setShortcuts( QKeySequence::Undo ); redoAction->setShortcuts( QKeySequence::Redo ); ui.actionClear->setShortcuts( QList() << QKeySequence("Backspace") << QKeySequence("Del")); if ( ui.menuEdit->actions().count() ) { QAction *firstAction = ui.menuEdit->actions().at( 0 ); ui.menuEdit->insertAction( firstAction, redoAction ); ui.menuEdit->insertAction( redoAction, undoAction ); } else { ui.menuEdit->addAction( undoAction ); ui.menuEdit->addAction( redoAction ); } ui.menuToolbars->addAction( ui.projectDock->toggleViewAction() ); ui.menuToolbars->addAction( ui.enginesDock->toggleViewAction() ); ui.menuToolbars->addAction( ui.fileToolBar->toggleViewAction() ); ui.menuToolbars->addAction( ui.toolBar->toggleViewAction() ); // Disable the "Revert" and "Save" actions -- we haven't modified anything // This will be enabled when the document is modified ui.actionRevert->setEnabled(false); ui.actionSave->setEnabled(false); // Create and assign an action group for "View > Projection" d->projectionGroup = new QActionGroup(this); d->projectionGroup->addAction(ui.actionPerspective); d->projectionGroup->addAction(ui.actionOrthographic); #ifdef Q_WS_MAC // Find the Avogadro global preferences action // and make sure it ends up in the Mac Application menu ui.configureAvogadroAction->setMenuRole(QAction::PreferencesRole); // Remove the last separator in the File menu QList actions = ui.menuFile->actions(); QAction *lastAction; if (actions.last()->isSeparator()) { lastAction = actions.last(); ui.menuFile->removeAction(lastAction); } else if (actions[actions.size() - 2]->isSeparator()) { // "Quit" menu item hasn't moved yet lastAction = actions[actions.size() - 2]; ui.menuFile->removeAction(lastAction); } // Remove the first separator in the help menu (this remains even though the "About" item moves). QAction *firstAction = ui.menuHelp->actions().first(); if (firstAction->isSeparator()) ui.menuHelp->removeAction(firstAction); else { // the "About" menu item hasn't moved yet. firstAction = ui.menuHelp->actions()[1]; if (firstAction->isSeparator()) ui.menuHelp->removeAction(firstAction); } // Turn off the file toolbar (not really Mac-native) // Fixes PR#1965004 ui.menuToolbars->removeAction( ui.fileToolBar->toggleViewAction() ); ui.fileToolBar->hide(); // Change the "Settings" menu to be Window ui.menuSettings->setTitle(tr("Window")); firstAction = ui.menuSettings->actions().first(); QAction *minimizeAction = new QAction(this); minimizeAction->setText(tr("&Minimize")); minimizeAction->setShortcut(QKeySequence(tr("Ctrl+M"))); connect(minimizeAction, SIGNAL(triggered()), this, SLOT(showMinimized())); ui.menuSettings->insertAction(firstAction, minimizeAction); QAction *zoomAction = new QAction(this); zoomAction->setText(tr("&Zoom")); connect(zoomAction, SIGNAL(triggered()), this, SLOT(zoom())); ui.menuSettings->insertAction(firstAction, zoomAction); ui.menuSettings->insertSeparator(firstAction); // ui.menuSettings->addSeparator(); QAction *raiseAction = new QAction(this); raiseAction->setText(tr("Bring All to Front")); connect(raiseAction, SIGNAL(triggered()), this, SLOT(bringAllToFront())); ui.menuSettings->addAction(raiseAction); ui.menuSettings->addSeparator(); updateWindowMenu(); // Remove all menu icons (violates Apple interface guidelines) // This is a not-quite-hidden Qt call on the Mac // http://doc.trolltech.com/exportedfunctions.html qt_mac_set_menubar_icons(false); #endif setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); connectUi(); ui.projectDock->close(); ui.enginesDock->close(); #ifdef ENABLE_UPDATE_CHECKER m_updateCheck = UpdateCheck::getInstance(this); #endif m_ignoreConfig = false; #ifdef QTTESTING QAction *actionRecord = new QAction(this); actionRecord->setText(tr("Record Test...")); ui.menuSettings->addAction(actionRecord); QAction *actionPlay = new QAction(this); actionPlay->setText(tr("Play Test...")); ui.menuSettings->addAction(actionPlay); connect(actionRecord, SIGNAL(triggered()), this, SLOT(record())); connect(actionPlay, SIGNAL(triggered()), this, SLOT(play())); this->TestUtility = new pqTestUtility(this); this->TestUtility->addEventObserver("xml", new XMLEventObserver(this)); this->TestUtility->addEventSource("xml", new XMLEventSource(this)); #endif static const QStringList searchDirs = pluginSearchDirs(); d->pluginManager.setPluginPath(searchDirs); } #ifdef QTTESTING void MainWindow::record() { QString filename = QFileDialog::getSaveFileName (this, "Test File Name", QString(), "XML Files (*.xml)"); if (!filename.isEmpty()) { this->TestUtility->recordTests(filename); } } void MainWindow::play() { QString filename = QFileDialog::getOpenFileName (this, "Test File Name", QString(), "XML Files (*.xml)"); if (!filename.isEmpty()) { this->TestUtility->playTests(filename); } } void MainWindow::popup() { QDialog dialog; QHBoxLayout* hbox = new QHBoxLayout(&dialog); QPushButton button("Click to Close", &dialog); hbox->addWidget(&button); QObject::connect(&button, SIGNAL(clicked()), &dialog, SLOT(accept())); dialog.exec(); } #endif bool MainWindow::event(QEvent *event) { // delayed initialization if(event->type() == QEvent::Polish) { // read settings readSettings(); reloadTools(); //if (d->toolSettingsDock) // d->toolSettingsDock->hide(); loadExtensions(); // Check every menu for "extra" separators QList removeThese; foreach( QAction *menu, menuBar()->actions() ) { if (menu->menu()->actions().isEmpty()) continue; menu->menu()->setSeparatorsCollapsible(true); removeThese.clear(); QAction *firstAction = menu->menu()->actions().first(); if (firstAction->isSeparator()) removeThese.append( firstAction ); QAction *lastAction = menu->menu()->actions().last(); if (lastAction->isSeparator()) removeThese.append( lastAction ); int multipleSeparatorCount = 0; foreach( QAction *menuItem, menu->menu()->actions() ) { if (menuItem->isSeparator()) { if (multipleSeparatorCount) removeThese.append(menuItem); multipleSeparatorCount++; } else multipleSeparatorCount = 0; } // end foreach (menuItems) foreach (QAction *separator, removeThese) { menu->menu()->removeAction(separator); } } if(!molecule()) loadFile(); // if we don't have a molecule then load a blank file d->initialized = true; } #ifdef Q_WS_MAC else if(event->type() == QEvent::ActivationChange || event->type() == QEvent::WindowActivate) { updateWindowMenu(); } #endif return QMainWindow::event(event); } void MainWindow::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasUrls()) event->acceptProposedAction(); else event->ignore(); } void MainWindow::dropEvent(QDropEvent *event) { if (event->mimeData()->hasUrls()) { foreach(const QUrl& url, event->mimeData()->urls() ) { loadFile(url.toLocalFile()); } event->acceptProposedAction(); } else event->ignore(); } void MainWindow::show() { QMainWindow::show(); } GLWidget::ProjectionType MainWindow::projection() const { return d->glWidget->projection(); } void MainWindow::setPerspective() { d->glWidget->setProjection(GLWidget::Perspective); } void MainWindow::setOrthographic() { d->glWidget->setProjection(GLWidget::Orthographic); } bool MainWindow::renderAxes() const { return d->glWidget->renderAxes(); } void MainWindow::setRenderAxes(bool render) { d->glWidget->setRenderAxes(render); } bool MainWindow::renderDebug() const { return d->glWidget->renderDebug(); } void MainWindow::setRenderDebug(bool render) { ui.actionDebugInformation->setChecked(render); if (d->glWidget && d->glWidget->renderDebug() != render) d->glWidget->setRenderDebug(render); } bool MainWindow::quickRender() const { // Is the current widget using quick render? return d->glWidget->quickRender(); } void MainWindow::setQuickRender(bool quick) { ui.actionQuickRender->setChecked(quick); if (d->glWidget && d->glWidget->quickRender() != quick) d->glWidget->setQuickRender(quick); } void MainWindow::showAllMolecules(bool) { if (!d->allMoleculesDialog) return; if (d->allMoleculesDialog->isVisible()) { d->allMoleculesDialog->hide(); } else { d->allMoleculesDialog->show(); d->allMoleculesDialog->raise(); } } void MainWindow::reloadPlugins() { qDebug() << "MainWindow::reloadPlugins"; /** * Extensions: instances are deleted by the PluginManager after writing the * settings. The QActions are removed from the menus when they are deleted. * So we only have to load new extensions. */ loadExtensions(); /** * Engines: Clear all the EngineListViews and call GLWidget::reloadEngines() * for each GLWidget. gl->setExtensions(d->pluginManager.extensions(this)); */ foreach (GLWidget *glwidget, d->glWidgets) { glwidget->reloadEngines(); glwidget->setExtensions(d->pluginManager.extensions(this)); } int count = d->enginesStacked->count(); for (int i = 0; i < count; ++i) { QWidget *widget = d->enginesStacked->widget(i); foreach(QObject *object, widget->children()) { if (!object->isWidgetType()) continue; EngineViewWidget *engineView = qobject_cast(object); if (engineView) engineView->clear(); } } /** * Tools: see reloadTools(). */ reloadTools(); qDebug() << "end MainWindow::reloadPlugins"; } void MainWindow::reloadTools() { if(d->toolSettingsDock) { delete d->toolSettingsDock; d->toolSettingsDock = 0; d->toolSettingsWidget = 0; d->toolSettingsStacked = 0; } ui.toolBar->clear(); d->toolSettingsDock = new QDockWidget(this); d->toolSettingsDock->setObjectName(QString::fromUtf8("toolSettingsDock")); d->toolSettingsDock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::NoDockWidgetArea|Qt::RightDockWidgetArea); d->toolSettingsWidget = new QWidget(d->toolSettingsDock); d->toolSettingsWidget->setObjectName(QString::fromUtf8("toolSettingsWidget")); d->toolSettingsDock->setWidget(d->toolSettingsWidget); addDockWidget(static_cast(1), d->toolSettingsDock); ui.menuToolbars->addAction( d->toolSettingsDock->toggleViewAction() ); // Make sure to do this first, or we'll crash d->toolSettingsStacked = new QStackedLayout( d->toolSettingsWidget ); // Add a blank widget for those tools with no settings widget // (slot 0) QWidget* blankWidget = new QWidget; blankWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); d->toolSettingsStacked->addWidget(blankWidget); d->toolGroup->removeAllTools(); d->toolGroup->append(d->pluginManager.tools(this)); const QList tools = d->toolGroup->tools(); int toolCount = tools.size(); for ( int i = 0; i < toolCount; i++ ) { Tool *tool = tools.at(i); connect(tool, SIGNAL(message(QString)), d->messagesText, SLOT(append(QString))); QAction *action = tool->activateAction(); // Add Ctrl + tool number as an added shortcut int toolNumber = i+1; if (toolNumber == 10) toolNumber = 0; if (toolNumber <= 9) { // If we have 11 or more tools, we can only do this for the first 10 QList shortcuts = action->shortcuts(); shortcuts.append(QKeySequence(QString("Ctrl+%1").arg(toolNumber))); action->setShortcuts(shortcuts); } ui.toolBar->addAction( action ); QWidget *widget = tools.at( i )->settingsWidget(); if(widget){ d->toolSettingsStacked->addWidget( widget ); if ( i == 0 ) { d->toolSettingsStacked->setCurrentIndex( 1 ); } } } // end for loop // Add buttons to toggle the tool and engine settings docks ui.toolBar->addSeparator(); QPushButton* toolSettings = new QPushButton(tr("&Tool Settings..."), ui.toolBar); toolSettings->setCheckable(true); toolSettings->setChecked(d->toolSettingsDock->isVisible()); toolSettings->setShortcut(tr("Ctrl+T", "Tool Settings shortcut")); connect(d->toolSettingsDock, SIGNAL(visibilityChanged(bool)), toolSettings, SLOT(setChecked(bool))); connect(toolSettings, SIGNAL(released()), this, SLOT(toggleToolSettingsDock())); ui.toolBar->addWidget(toolSettings); QPushButton* displaySettings = new QPushButton(tr("&Display Settings..."), ui.toolBar); displaySettings->setCheckable(true); displaySettings->setChecked(ui.enginesDock->isVisible()); displaySettings->setShortcut(tr("Ctrl+D", "Display Settings shortcut")); connect(ui.enginesDock, SIGNAL(visibilityChanged(bool)), displaySettings, SLOT(setChecked(bool))); connect(displaySettings, SIGNAL(released()), this, SLOT(toggleEngineSettingsDock())); ui.toolBar->addWidget(displaySettings); // Call GLWidget::setToolGroup which will store a pointer to the navigate tool foreach(GLWidget *glWidget, d->glWidgets) glWidget->setToolGroup(d->toolGroup); // Now, set the active tool if (d->molecule) d->toolGroup->setActiveTool("Navigate"); } // end reloadTools void MainWindow::newFile() { #ifdef Q_WS_MAC unsigned int mainWindowCount = getMainWindowCount(); if ( mainWindowCount == 1 && !isVisible() ) { showMainWindowMac(); return; } #endif writeSettings(); MainWindow *other = new MainWindow; #ifdef Q_WS_MAC other->move( x() + 25, y() + 25 ); #endif other->show(); } void MainWindow::openFile( QString fileName ) { // no parameter give create dialog if ( fileName.isEmpty() ) { QSettings settings; QString selectedFilter = settings.value("Open Molecule Filter").toString(); QStringList filters; filters << tr("Common molecule formats") + " (*.cml *.xyz *.pdb *.alc *.cdx *.cdxml *.ent" " *.gpr *.mdl *.mol *.sdf *.sd *.dmol" " *.inp *.gamin *.gamout *.fract *.gjf *.gzmat" " *.mol2 *.nwo *.out *.log *.pqr)" << tr("All files") + " (* *.*)" << tr("CML") + " (*.cml)" << tr("Computational Chemistry Output") + " (*.out *.log *.dat *.output *.gamout *.g98 *.g03 *.nwo)" << tr("Crystallographic Interchange CIF") + " (*.cif)" << tr("GAMESS-US Output") + " (*.gamout)" << tr("Gaussian 98/03 Output") + " (*.g98 *.g03)" << tr("Gaussian Formatted Checkpoint") + " (*.fchk)" << tr("HyperChem") + " (*.hin)" << tr("MDL Mol") + " (*.mdl *.mol *.sd *.sdf)" << tr("NWChem Output") + " (*.nwo)" << tr("PDB") + " (*.pdb *.ent)" << tr("Sybyl Mol2") + " (*.mol2)" << tr("XYZ") + " (*.xyz)"; fileName = QFileDialog::getOpenFileName( this, tr( "Open File" ), d->fileDialogPath, filters.join(";;"), &selectedFilter); settings.setValue("Open Molecule Filter", selectedFilter); } if ( !fileName.isEmpty() ) { d->fileDialogPath = QFileInfo(fileName).absolutePath(); // First check if we closed all the windows on Mac // if so, show the hidden window #ifdef Q_WS_MAC unsigned int mainWindowCount = getMainWindowCount(); if ( mainWindowCount == 1 && isHidden() ) { showMainWindowMac(); } #endif // If current window is not empty or has non-default file name, // check if we already have an open window with this file if ( !isDefaultFileName(d->fileName) || (d->molecule && d->molecule->numAtoms()) ) { MainWindow *existing = findMainWindow( fileName ); if ( existing ) { existing->show(); existing->raise(); existing->activateWindow(); return; } } // if we have nothing open or modified bool loadInNewWindow = isWindowModified(); #ifdef Q_WS_MAC loadInNewWindow = !isDefaultFileName(d->fileName); // always load into a new window on Mac PR#2945916 #endif if ( !loadInNewWindow ) { loadFile( fileName ); } else { // ONLY if we have loaded settings then we can write them if(d->initialized) { writeSettings(); } MainWindow *other = new MainWindow(); if ( !other->loadFile( fileName ) ) { delete other; return; } #if defined (Q_WS_MAC) || defined (Q_WS_WIN) other->move( x() + 25, y() + 25 ); #endif other->show(); } // if (loadInNewWindow) } } void MainWindow::openRecentFile() { QAction *action = qobject_cast( sender() ); if ( action ) { openFile( action->data().toString() ); } } bool MainWindow::isDefaultFileName(const QString fileName) { if (fileName.isEmpty()) return true; QFileInfo fileInfo(fileName); return (fileInfo.baseName() == tr("untitled")); } QString MainWindow::defaultFileName() { return (tr("untitled") + ".cml"); } bool MainWindow::loadFile(const QString &fileName, OBFormat *format, const QString &options) { // Now also sets the window icon on Mac // http://labs.trolltech.com/blogs/2007/12/28/spotlight-on-little-things/ QString shownName = fileName; if(fileName.isEmpty()) { setMolecule(new Molecule(this)); ui.actionAllMolecules->setEnabled(false); // only one molecule -- the blank slate return true; } statusBar()->showMessage(tr("Loading %1...", "%1 is a filename").arg(fileName), 5000 ); QApplication::setOverrideCursor( Qt::WaitCursor ); statusBar()->showMessage( tr("Loading %1...").arg(fileName), 5000 ); QString formatType; if (format != NULL) formatType = format->GetID(); #ifdef WIN32 // CML loading does not work on Windows with the new threaded code QFileInfo info(fileName); QString completeSuffix = info.completeSuffix(); if (completeSuffix.contains("cml", Qt::CaseInsensitive) || formatType.contains("cml", Qt::CaseInsensitive)) { Molecule *mol = MoleculeFile::readMolecule(fileName, formatType.trimmed()); QApplication::restoreOverrideCursor(); if (mol) { setFileName(fileName); setMolecule(mol); } else { QMessageBox::warning(this, tr("Avogadro"), tr("Reading molecular file failed, file %1.").arg(fileName)); return false; } ui.actionAllMolecules->setEnabled(false); return true; } // Other file types appear to work correctly - this should be fixed properly #endif // This will work in a background thread -- we want to wait until the firstMolReady() signal appears d->moleculeFile = MoleculeFile::readFile(fileName, formatType.trimmed(), options, false); if (!d->moleculeFile) return false; if (!d->moleculeFile->isReady()) { // TODO: split into first molecule vs. whole file connect(d->moleculeFile, SIGNAL(ready()), this, SLOT(firstMolReady())); connect(d->moleculeFile, SIGNAL(ready()), this, SLOT(finishLoadFile())); if (!d->progressDialog) { d->progressDialog = new QProgressDialog(this); d->progressDialog->setRange(0,0); // indeterminate progress d->progressDialog->setLabelText(tr("Reading multi-molecule file. This may take a while...")); d->progressDialog->setWindowModality(Qt::WindowModal); d->progressDialog->setCancelButtonText(QString()); // no cancel button } d->progressDialog->show(); } else { firstMolReady(); finishLoadFile(); } return true; } void MainWindow::check3DCoords(OBMol *obMolecule) { bool build = false; if (obMolecule->GetDimension() != 3) { // we may want to check with the user if (d->build3D == AskUser) { QMessageBox::StandardButtons buttons = QMessageBox::Yes | QMessageBox::No; if (d->moleculeFile != NULL && d->moleculeFile->numMolecules() > 1) buttons = QMessageBox::YesToAll | QMessageBox::NoToAll | buttons; QPointer msgBox = new QMessageBox(QMessageBox::Warning, tr( "Avogadro" ), tr("This file does not contain 3D coordinates."), buttons, this); msgBox->setInformativeText(tr("Do you want Avogadro to build a rough geometry?")); msgBox->setDefaultButton(QMessageBox::Yes); int retval = msgBox->exec(); switch(retval) { case (QMessageBox::YesToAll): d->build3D = AlwaysBuild; case (QMessageBox::Yes): build = true; break; case (QMessageBox::NoToAll): d->build3D = NeverBuild; build = false; break; case (QMessageBox::No): default: QMessageBox::warning( this, tr( "Avogadro" ), tr( "This file does not contain 3D coordinates.\n" "You may not be able to edit or view properly." )); build = false; break; } delete msgBox; } if (build || d->build3D == AlwaysBuild) { // In OB-2.2.2 and later, builder will use 2D coordinates if present OBBuilder builder; builder.Build(*obMolecule); obMolecule->AddHydrogens(); // Add some hydrogens before running force field OBForceField* pFF = OBForceField::FindForceField("MMFF94")->MakeNewInstance(); if (pFF && !pFF->Setup(*obMolecule)) { pFF = OBForceField::FindForceField("UFF")->MakeNewInstance(); if (!pFF || !pFF->Setup(*obMolecule)) return; // can't do anything more } if (pFF) { pFF->ConjugateGradients(250, 1.0e-4); pFF->UpdateCoordinates(*obMolecule); delete pFF; } } // building geometry } // check 3D coordinates } void MainWindow::selectMolecule(int index, int) { if (!d->moleculeFile) return; // nothing to do qDebug() << " selectMolecule " << index; OBMol *obMolecule = d->moleculeFile->OBMol(index); if (!obMolecule) return; // bad index check3DCoords(obMolecule); Molecule *mol = new Molecule; mol->setOBMol(obMolecule); mol->setFileName(d->molecule->fileName()); // copy the same filename setMolecule(mol); } void MainWindow::finishLoadFile() { if (!d->moleculeFile) return; if (d->moleculeFile->numMolecules() > 1) ui.actionAllMolecules->setEnabled(true); // only one molecule -- the blank slate if (!d->allMoleculesTable) { d->allMoleculesDialog = new QDialog(this); d->allMoleculesDialog->setWindowTitle(tr("Select Molecule to View")); QVBoxLayout *layout = new QVBoxLayout( d->allMoleculesDialog ); layout->setMargin( 0 ); layout->setSpacing( 6 ); d->allMoleculesTable = new QTableWidget( d->allMoleculesDialog ); d->allMoleculesTable->setAlternatingRowColors(true); d->allMoleculesTable->setSelectionMode(QAbstractItemView::SingleSelection); layout->addWidget(d->allMoleculesTable); // make sure the table stretches across the dialog as it resizes QHeaderView *horizontal = d->allMoleculesTable->horizontalHeader(); horizontal->setResizeMode(QHeaderView::Stretch); QHeaderView *vertical = d->allMoleculesTable->verticalHeader(); vertical->setResizeMode(QHeaderView::Stretch); } disconnect(d->allMoleculesTable, 0, this, 0); d->allMoleculesTable->clear(); d->allMoleculesTable->setRowCount(d->moleculeFile->numMolecules()); d->allMoleculesTable->setColumnCount(1); QStringList columnLabels, rowLabels; columnLabels << tr("Molecule Title"); d->allMoleculesTable->setHorizontalHeaderLabels(columnLabels); int molecule = 0; foreach(const QString &title, d->moleculeFile->titles()) { QTableWidgetItem* newItem = new QTableWidgetItem(title); d->allMoleculesTable->setItem(molecule, 0, newItem); // qDebug() << " molecule: " << molecule << title; rowLabels << QString("%L1").arg(++molecule); } d->allMoleculesTable->setCurrentCell(0, 0, QItemSelectionModel::ClearAndSelect); connect(d->allMoleculesTable, SIGNAL(currentCellChanged(int, int, int, int)), this, SLOT(selectMolecule(int, int))); } void MainWindow::firstMolReady() { if (d->moleculeFile == NULL) return; if (d->progressDialog) { d->progressDialog->reset(); #ifdef Q_WS_MAC d->progressDialog->deleteLater(); d->progressDialog = 0; #endif } ui.actionAllMolecules->setEnabled(false); // only one molecule right now QString errors = d->moleculeFile->errors(); OBMol *obMolecule = d->moleculeFile->OBMol(); if (errors.isEmpty() && obMolecule != NULL) { // successful read qDebug() << " read " << d->moleculeFile->numMolecules() << " molecules."; // e.g. SMILES or MDL molfile, etc. check3DCoords(obMolecule); Molecule *mol = new Molecule; mol->setOBMol(obMolecule); mol->setFileName(d->moleculeFile->fileName()); if (d->moleculeFile->isConformerFile()) { // add in the conformers mol->setAllConformers(d->moleculeFile->conformers()); qDebug() << " # of conformers " << mol->numConformers(); } setMolecule(mol); // Now unroll any settings we saved in the file // This is disabled for version 1.0-release /* if (obMolecule->HasData(OBGenericDataType::PairData)) { QSettings settings; // We've saved the settings with key Avogadro:blah as an OBPairData. std::vector pairDataVector = obMolecule->GetAllData(OBGenericDataType::PairData); OBPairData *savedSetting; OBDataIterator i; QString attribute; for (i = pairDataVector.begin(); i != pairDataVector.end(); ++i) { savedSetting = dynamic_cast(*i); // Check to see if this is an Avogadro setting attribute = savedSetting->GetAttribute().c_str(); if (attribute.startsWith(QLatin1String("Avogadro:"))) { attribute.remove(QLatin1String("Avogadro:")); settings.setValue(attribute, savedSetting->GetValue().c_str()); // TODO: we should probably delete the entry now, but I'm going to play it safe first } } } // end reading OBPairData */ QApplication::restoreOverrideCursor(); QString status; QTextStream( &status ) << tr("Atoms: ") << d->molecule->numAtoms() << tr(" Bonds: ") << d->molecule->numBonds(); statusBar()->showMessage( status, 5000 ); } else { // errors // @TODO: show errors in Messages Tab QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Avogadro"), tr("Reading molecular file failed, file %1.").arg(d->moleculeFile->fileName())); return; } setFileName( d->moleculeFile->fileName() ); setWindowFilePath(d->moleculeFile->fileName()); // for MacOS X #ifdef Q_WS_MAC updateWindowMenu(); #endif statusBar()->showMessage( tr("File Loaded..."), 5000 ); d->toolGroup->setActiveTool("Navigate"); } bool MainWindow::maybeSave() { if ( isWindowModified() ) { // We're using the property interface to QMessageBox, rather than // the static functions. This is more work, but gives us some nice // fine-grain control. This helps both on Windows and Mac // look more "native." QPointer msgBox = new QMessageBox(QMessageBox::Warning, tr( "Avogadro" ), tr( "Do you want to save the changes you made in the document?" ), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, this); // On Mac, this will make a sheet relative to the window // Unfortunately, it also closes the window when the box disappears! // msgBox->setWindowModality(Qt::WindowModal); // second line of text msgBox->setInformativeText(tr("Your changes will be lost if you don't save them." )); msgBox->setDefaultButton(QMessageBox::Save); // OK, now add shortcuts for save and discard msgBox->button(QMessageBox::Save)->setShortcut(QKeySequence(tr("Ctrl+S", "Save"))); msgBox->button(QMessageBox::Discard)->setShortcut(QKeySequence(tr("Ctrl+D", "Discard"))); msgBox->setButtonText(QMessageBox::Save, isDefaultFileName(d->fileName) ? tr("Save...") : tr("Save")); int ret = msgBox->exec(); if ( ret == QMessageBox::Save ) { delete msgBox; return save(); } else if ( ret == QMessageBox::Cancel ) { delete msgBox; return false; } delete msgBox; } return true; } // Close the current file -- leave an empty window // Not used on Mac: the window is closed via closeEvent() instead void MainWindow::closeFile() { if (maybeSave()) loadFile(); } void MainWindow::closeEvent( QCloseEvent *event ) { raise(); #ifdef Q_WS_MAC // qDebug() << " close event "; unsigned int mainWindowCount = getMainWindowCount(); if ( mainWindowCount == 1 && isVisible() ) { if ( maybeSave() ) { writeSettings(); // Clear the undo stack first (or we'll have an enabled Undo command) d->undoStack->clear(); hideMainWindowMac(); } event->ignore(); return; } #endif if ( maybeSave() ) { emit(windowClosed()); writeSettings(); event->accept(); } else { event->ignore(); } } bool MainWindow::save() { // we can't safely save to a gzipped file if ( !QFileInfo(d->fileName).isReadable() || isDefaultFileName(d->fileName) || d->fileName.endsWith(".gz", Qt::CaseInsensitive)) { return saveAs(); } else return saveFile( d->fileName ); } bool MainWindow::saveAs() { QSettings settings; QString selectedFilter = settings.value("Save Molecule Filter", tr("CML") + " (*.cml)").toString(); QStringList filters; filters << tr("All files") + " (* *.*)" // Omit these on Mac, since it doesn't match "native" save dialogs #ifndef Q_WS_MAC << tr("Common molecule formats") + " (*.cml *.xyz *.ent *.pdb *.alc *.chm *.cdx *.cdxml *.c3d1 *.c3d2" " *.gpr *.mdl *.mol *.sdf *.sd *.crk3d *.cht *.dmol *.bgf" " *.gam *.inp *.gamin *.gamout *.tmol *.fract *.gau *.gzmat" " *.mpd *.mol2 *.nwo)" #endif << tr("CML") + " (*.cml)" << tr("GAMESS Input") + " (*.gamin)" << tr("Gaussian Cartesian Input") + " (*.gau)" << tr("Gaussian Z-matrix Input") + " (*.gzmat)" << tr("MDL SDfile") + "(*.mol)" << tr("PDB") + " (*.pdb)" << tr("NWChem Input") + " (*.nw)" << tr("Sybyl Mol2") + " (*.mol2)" << tr("XYZ") + " (*.xyz)"; QString fileName = SaveDialog::run(this, tr("Save Molecule As"), d->fileDialogPath, d->fileName, filters, "cml", selectedFilter); settings.setValue("Save Molecule Filter", selectedFilter); if(fileName.isEmpty()) { return false; } // delete the MoleculeFile before calling saveFile. // We don't want to replace the molecule but save it // to another file. if (d->moleculeFile) { delete d->moleculeFile; d->moleculeFile = 0; } // we must save the file before we can set the fileName bool result = saveFile( fileName ); setFileName( fileName ); return result; } bool MainWindow::saveFile( const QString &fileName, OBFormat *format ) { QString formatType; if (format) { formatType = format->GetID(); } if (!d->moleculeFile) { // just save this one molecule QString error; bool result = MoleculeFile::writeMolecule(d->molecule, fileName, formatType.trimmed(), "", &error); if (!result) { // There was an error saving the file - inform the user QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Avogadro"), error); return false; } else { QApplication::restoreOverrideCursor(); setWindowModified(false); return true; } } else { /// FIXME Add error checking if (d->moleculeFile->isConformerFile()) { MoleculeFile::writeConformers(d->molecule, fileName, formatType.trimmed()); QApplication::restoreOverrideCursor(); setWindowModified(false); return true; } else { /// FIXME Add error checking // use MoleculeFile to save just the current slice of the file d->moleculeFile->replaceMolecule(d->currentIndex, d->molecule, fileName); QApplication::restoreOverrideCursor(); setWindowModified(false); return true; } } /* QFile file(fileName); bool replaceExistingFile = file.exists(); // We'll save to a new file and then rename it to the requested file name // This way, if an error occurs, we won't destroy the old file QString newFileName(fileName); if (replaceExistingFile) newFileName += ".new"; QFile newFile( newFileName ); if ( !newFile.open( QFile::WriteOnly | QFile::Text ) ) { QMessageBox::warning( this, tr( "Avogadro" ), tr( "Cannot write to the file %1:\n%2." ) .arg( fileName ) .arg( newFile.errorString() ) ); return false; } newFile.close(); // Pass of an ofstream to Open Babel ofstream ofs; ofs.open( QFile::encodeName(newFileName) ); if ( !ofs ) { // shouldn't happen, already checked file above QMessageBox::warning( this, tr( "Avogadro" ), tr( "Cannot write to the file %1." ) .arg( fileName ) ); return false; } QApplication::setOverrideCursor( Qt::WaitCursor ); statusBar()->showMessage( tr( "Saving file." ), 2000 ); OBMol obmol = d->molecule->OBMol(); // We're going to wrap up the QSettings and save them to the CML file if (QString(outFormat->GetID()).compare("cml", Qt::CaseInsensitive) == 0) { // First off, let's set some CML options conv.AddOption("p"); // add properties -- including OBPairData conv.AddOption("m"); // Dublin Core metadata conv.AddOption("a"); // array format for atoms & bonds QSettings settings; OBPairData *savedSetting; QString attribute, value; // Walk through all our settings (is there a more efficient way to do this?) foreach(const QString &key, settings.allKeys()) { // Ignore this key -- there are definitely some on Mac with Apple... or com/ // There may be others to ignore on Linux and Windows, but I haven't tested those yet. if (key.startsWith(QLatin1String("Apple")) || key.startsWith(QLatin1String("com/")) || key.startsWith(QLatin1String("NS"))) continue; if (key.startsWith(QLatin1String("enginesDock"))) { continue; // TODO: this seems to kill the CML } // We're going to save all our settings as Avogadro:blah savedSetting = new OBPairData; attribute = "Avogadro:" + key; // Convert from QString to char* savedSetting->SetAttribute(attribute.toAscii().constData()); value = settings.value(key).toString(); // Convert from QString to char* savedSetting->SetValue(value.toAscii().constData()); savedSetting->SetOrigin(userInput); obmol.SetData(savedSetting); } } // end saving settings for CML files if ( conv.Write( &obmol, &ofs ) ) { ofs.close(); if (replaceExistingFile) { bool success; success = file.rename(fileName + ".old"); if (success) { file.setFileName(fileName + ".old"); success = newFile.rename(fileName); } else { QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Avogadro"), tr("Saving molecular file failed - could not rename original file")); return false; } if (success) // renaming worked success = file.remove(); // remove the old file: WARNING -- would much prefer to just rename, but Qt won't let you else { QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Avogadro"), tr("Saving molecular file failed - could not rename new file")); return false; } if (success) { statusBar()->showMessage( tr("Save succeeded."), 5000 ); setWindowModified( false ); } else { QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Avogadro"), tr("Saving molecular file failed - could not remove old file")); return false; } } else statusBar()->showMessage( tr("Save succeeded."), 5000 ); } else { statusBar()->showMessage( tr("Saving molecular file failed."), 5000 ); QApplication::restoreOverrideCursor(); QMessageBox::warning(this, tr("Avogadro"), tr("Saving molecular file failed - could not rename original file")); newFile.remove(); // remove the temporary file -- we'll leave the old file in place } */ QApplication::restoreOverrideCursor(); return false; } void MainWindow::setIgnoreConfig(bool noConfig) { m_ignoreConfig = noConfig; } void MainWindow::undoStackClean( bool clean ) { ui.actionRevert->setEnabled(!clean); ui.actionSave->setEnabled(!clean); setWindowModified( !clean ); } void MainWindow::exportGraphics() { QSettings settings; QString selectedFilter = settings.value("Export Graphics Filter", tr("PNG") + " (*.png)").toString(); QStringList filters; // Omit "common image formats" on Mac #ifdef Q_WS_MAC filters #else filters << tr("Common image formats") + " (*.png *.jpg *.jpeg)" #endif << tr("All files") + " (* *.*)" << tr("BMP") + " (*.bmp)" << tr("PNG") + " (*.png)" << tr("JPEG") + " (*.jpg *.jpeg)"; // Use QFileInfo to get the parts of the path we want QFileInfo info(d->molecule->fileName()); QString fileName = SaveDialog::run(this, tr("Export Bitmap Graphics"), info.absolutePath(), info.baseName(), filters, "png", selectedFilter); settings.setValue("Export Graphics Filter", selectedFilter); if(fileName.isEmpty()) return; qDebug() << "Exported filename:" << fileName; // render it (with alpha channel) QImage exportImage; d->glWidget->raise(); d->glWidget->repaint(); if (QGLFramebufferObject::hasOpenGLFramebufferObjects()) { exportImage = d->glWidget->grabFrameBuffer( true ); } else { QPixmap pixmap = QPixmap::grabWindow( d->glWidget->winId() ); exportImage = pixmap.toImage(); } // now we embed molecular information into the file, if possible OBConversion conv; // MDL format is used for main copy -- atoms, bonds, chirality // supports either 2D or 3D, generic data OBFormat *mdlFormat = conv.FindFormat( "mdl" ); QByteArray copyData; OBMol obmol = d->molecule->OBMol(); string output; if ( mdlFormat && conv.SetOutFormat( mdlFormat ) ) { output = conv.WriteString(&obmol); copyData = output.c_str(); // we embed the molfile into the image // e.g. http://baoilleach.blogspot.com/2007/08/access-embedded-molecular-information.html exportImage.setText("molfile", copyData); } // save a canonical SMILES too OBFormat *canFormat = conv.FindFormat( "can" ); if ( canFormat && conv.SetOutFormat( canFormat ) ) { output = conv.WriteString(&obmol); if (output.size()) { // might be empty (e.g., large protein) copyData = output.c_str(); exportImage.setText("SMILES", copyData); } } if ( !exportImage.save( fileName ) ) { QMessageBox::warning( this, tr( "Avogadro" ), tr( "Cannot save file %1." ).arg( fileName ) ); return; } } void MainWindow::revert() { if ( !isDefaultFileName(d->fileName) ) { loadFile( d->fileName ); } } void MainWindow::documentWasModified() { // Now that the document was modified, enable save/revert ui.actionRevert->setEnabled(true); ui.actionSave->setEnabled(true); setWindowModified( true ); } // For the Mac, we need to do a little work when quitting // Basically, we try to close every window. If successful, // then we quit void MainWindow::macQuit() { QCloseEvent ev; QApplication::sendEvent(qApp, &ev); if(ev.isAccepted()) qApp->quit(); } void MainWindow::clearRecentFiles() { QSettings settings; // already set up properly via main.cpp QStringList files; settings.setValue("recentFileList", files); updateRecentFileActions(); } void MainWindow::zoom() { setWindowState(windowState() ^ Qt::WindowMaximized); } void MainWindow::bringAllToFront() { foreach(QWidget *widget, qApp->topLevelWidgets()) { MainWindow *window = qobject_cast( widget ); if (window) raise(); } } bool windowComparison(const MainWindow *first, const MainWindow *second) { return first->windowTitle() > second->windowTitle(); } void MainWindow::updateWindowMenu() { // first remove actions at end of Window menu bool removeItem = false; QList removeThese; foreach (QAction *menuItem, ui.menuSettings->actions()) { if (menuItem->text() == tr("Bring All to Front")) { removeItem = true; continue; } if (removeItem) removeThese.append(menuItem); } foreach (QAction *action, removeThese) { ui.menuSettings->removeAction(action); } QList mainWindowList; foreach(QWidget *widget, qApp->topLevelWidgets()) { MainWindow *window = qobject_cast( widget ); if (window && window->isVisible()) mainWindowList.append(window); } if (mainWindowList.isEmpty()) return; qSort(mainWindowList.begin(), mainWindowList.end(), windowComparison); unsigned int untitledCount = 0; ui.menuSettings->addSeparator(); foreach (MainWindow *widget, mainWindowList) { QAction *windowAction = new QAction(widget); if (! isDefaultFileName(widget->d->fileName) ) windowAction->setText(QFileInfo(widget->d->fileName).fileName()); else windowAction->setText(tr("Untitled %1").arg(++untitledCount)); if (widget == this) { windowAction->setCheckable(true); windowAction->setChecked(true); } connect(windowAction, SIGNAL(triggered()), widget, SLOT(showAndActivate())); ui.menuSettings->addAction(windowAction); } } void MainWindow::about() { AboutDialog * about = new AboutDialog( this ); about->show(); } void MainWindow::importFile() { if (!d->importFile) { d->importFile = new ImportDialog(this); } d->importFile->show(); } // Unfortunately Qt signals/slots doesn't let us pass an arbitrary URL to a slot // or we'd have one openURL("string") // Instead, we've got a bunch of one-line actions... void MainWindow::openTutorialURL() const { QDesktopServices::openUrl(QUrl("http://avogadro.openmolecules.net/wiki/Tutorials")); } void MainWindow::openFAQURL() const { QDesktopServices::openUrl(QUrl("http://avogadro.openmolecules.net/wiki/Avogadro:FAQ")); } void MainWindow::openWebsiteURL() const { QDesktopServices::openUrl(QUrl("http://avogadro.openmolecules.net/wiki/")); } void MainWindow::openReleaseNotesURL() const { QDesktopServices::openUrl(QUrl( "http://avogadro.openmolecules.net/wiki/Avogadro_" + QString(VERSION) )); } void MainWindow::openBugURL() const { QDesktopServices::openUrl(QUrl("http://sourceforge.net/tracker/?group_id=165310&atid=835077")); } void MainWindow::setView(int index) { QWidget *widget = d->centralTab->widget(index); foreach(QObject *object, widget->children()) { GLWidget *glWidget = qobject_cast(object); if (glWidget) { d->glWidget = glWidget; int idx =d->glWidgets.indexOf(glWidget); d->enginesStacked->setCurrentIndex(idx); ui.actionDisplayAxes->setChecked(renderAxes()); ui.actionDebugInformation->setChecked(renderDebug()); ui.actionQuickRender->setChecked(quickRender()); break; } } } void MainWindow::glWidgetActivated(GLWidget *glWidget) { if (d->glWidget == glWidget) return; d->glWidget = glWidget; int index = d->glWidgets.indexOf(glWidget); d->enginesStacked->setCurrentIndex(index); ui.actionDisplayAxes->setChecked(renderAxes()); ui.actionDebugInformation->setChecked(renderDebug()); ui.actionQuickRender->setChecked(quickRender()); } void MainWindow::paste() { QClipboard *clipboard = QApplication::clipboard(); const QMimeData *mimeData = NULL; bool supportsSelection = clipboard->supportsSelection(); if ( supportsSelection ) { mimeData = clipboard->mimeData( QClipboard::Selection ); } // if we don't support selection, or we failed pasting the selection // try from the clipboard if ( !supportsSelection || !pasteMimeData(mimeData) ) { mimeData = clipboard->mimeData(); if(!pasteMimeData(mimeData)) { statusBar()->showMessage( tr( "Unable to paste molecule." ) ); } } } bool MainWindow::pasteMimeData(const QMimeData *mimeData) { OBConversion conv; OBFormat *pasteFormat = NULL; QByteArray text; OBMol newMol; if ( mimeData->hasFormat( "chemical/x-mdl-molfile" ) ) { pasteFormat = conv.FindFormat( "mdl" ); text = mimeData->data( "chemical/x-mdl-molfile" ); } else if ( mimeData->hasFormat( "chemical/x-cdx" ) ) { pasteFormat = conv.FindFormat( "cdx" ); text = mimeData->data( "chemical/x-cdx" ); } else if ( mimeData->hasText() ) { pasteFormat = conv.FindFormat( "xyz" ); text = mimeData->text().toAscii(); } if ( text.length() == 0 ) return false; if ( !pasteFormat || !conv.SetInFormat( pasteFormat ) ) { statusBar()->showMessage( tr( "Paste failed (format unavailable)." ), 5000 ); return false; } bool validMol = false; if ( conv.ReadString( &newMol, text.constData() ) // Can we read with OB formats? && newMol.NumAtoms() != 0 ) { validMol = true; } if (!validMol) { // We failed as an authentic format, try annulen's heuristics validMol = parseText(&newMol, QString(text)); } if (validMol && newMol.NumAtoms() == 0) return false; // We've got something we can paste /* vector3 offset; // small offset so that pasted mols don't fall on top offset.randomUnitVector(); offset *= 0.1; newMol.Translate(offset); */ Molecule newMolecule; newMolecule.setOBMol(&newMol); PasteCommand *command = new PasteCommand(d->molecule, newMolecule, d->glWidget); d->undoStack->push(command); d->toolGroup->setActiveTool("Manipulate"); // set the tool to manipulate, so we can immediate move the selection return true; } int GetAtomicNum(string name, int &iso) { int n = OpenBabel::etab.GetAtomicNum(name.c_str(), iso); if (iso != 0) return 0; // "D" ot "T" if (n != 0) return n; // other element symbols // not match => we've got IUPAC name /*vector::iterator i; for (i = _element.begin();i != _element.end();++i) if (name == (*i)->GetSymbol()) return((*i)->GetAtomicNum());*/ for (unsigned int i=0; i // Format definition, will be used for parsing int NameCol=-1, Xcol=-1, Ycol=-1, Zcol=-1; QString format(""); double b; bool ok; for (int i=0; iBeginModify(); for (int N=0; NNewAtom(); QStringList s_data = coordStrings.at(N).trimmed().split(QRegExp("\\s+|,|;")); if (s_data.size() != data.size()) return false; for (int i=0; iSetAtomicNum(_n); atom->SetVector(x*k,y*k,z*k); //set coordinates } } mol->EndModify(); mol->ConnectTheDots(); mol->PerceiveBondOrders(); //qDebug() << "molecule updated"; return true; } /// @todo this should live in a UnitCell class eventually // Stable sort both ids and coords together to group all entries in // ids together. Entries are not sorted in any particular order, // just grouped. uniqIds and idCounts will contain a unique list of // all ids in same order as in the sorted ids and a list containing // how many of each id is in ids, respectively. void poscarSort(QList *ids, QList *coords, QList *uniqueIds, QList *idCounts) { Q_ASSERT(ids->size() == coords->size()); // Get unique list of ids and count them uniqueIds->clear(); idCounts->clear(); for (QStringList::const_iterator it = ids->constBegin(), it_end = ids->constEnd(); it != it_end; ++it) { int ind = uniqueIds->indexOf(*it); if (ind != -1) { ++((*idCounts)[ind]); } else { uniqueIds->append(*it); idCounts->append(1); } } // Sort lists QString curId; QStringList::iterator idit; QList::iterator coordit; unsigned int sorted = 0; for (int uniqInd = 0; uniqInd < uniqueIds->size(); ++uniqInd) { curId = (*uniqueIds)[uniqInd]; unsigned int found = 0; unsigned int count = idCounts->at(uniqInd); idit = ids->begin() + sorted; coordit = coords->begin() + sorted; while (found < count) { // Should never reach the end Q_ASSERT(idit != ids->end()); Q_ASSERT(coordit != coords->end()); if (idit->compare(curId) == 0) { qSwap(*idit, (*ids)[sorted]); qSwap(*coordit, (*coords)[sorted]); ++found; ++sorted; } ++idit; ++coordit; } } } /// @todo this should live in a UnitCell class eventually QString getPOSCAR(Molecule *mol) { OBUnitCell *cell = mol->OBUnitCell(); if (!cell) { return ""; } QList atoms = mol->atoms(); // Atomic symbols: QStringList ids; for (QList::const_iterator it = atoms.constBegin(), it_end = atoms.constEnd(); it != it_end; ++it) { ids << OpenBabel::etab.GetSymbol((*it)->atomicNumber()); } // Fractional coordinates QList fcoords; const Vector3d *eigenptr; vector3 obtmp; for (QList::const_iterator it = atoms.begin(), it_end = atoms.end(); it != it_end; ++it) { // Convert eigen to OB eigenptr = (*it)->pos(); obtmp.x() = eigenptr->x(); obtmp.y() = eigenptr->y(); obtmp.z() = eigenptr->z(); // Convert cartesian -> fractional obtmp = cell->CartesianToFractional(obtmp); // Back to eigen fcoords << Vector3d(obtmp.x(), obtmp.y(), obtmp.z()); } // For sorting QStringList uniqueIds; QList idCounts; Q_ASSERT(fcoords.size() == ids.size()); poscarSort(&ids, &fcoords, &uniqueIds, &idCounts); Q_ASSERT(uniqueIds.size() == idCounts.size()); QString poscar; // Comment line: composition for (unsigned int i = 0; i < static_cast(uniqueIds.size()); ++i) { poscar += QString("%1%2 ").arg(uniqueIds[i]).arg(idCounts[i]); } poscar += "\n"; // Scaling factor. Just 1.0 poscar += QString::number(1.0); poscar += "\n"; // Unit Cell Vectors std::vector< OpenBabel::vector3 > vecs = cell->GetCellVectors(); for (unsigned int i = 0; i < vecs.size(); i++) { OpenBabel::vector3 &vec = vecs[i]; // Remove negative zeros if (fabs(vec.x()) < 1e-10) { vec.x() = 0.0; } if (fabs(vec.y()) < 1e-10) { vec.y() = 0.0; } if (fabs(vec.z()) < 1e-10) { vec.z() = 0.0; } poscar += QString(" %1 %2 %3\n") .arg(vec.x(), 12, 'f', 8) .arg(vec.y(), 12, 'f', 8) .arg(vec.z(), 12, 'f', 8); } // Number of each type of atom for (int i = 0; i < idCounts.size(); i++) { poscar += QString::number(idCounts.at(i)) + " "; } poscar += "\n"; // Use fractional coordinates: poscar += "Direct\n"; // Coordinates of each atom for (int i = 0; i < fcoords.size(); i++) { Eigen::Vector3d &fcoord = fcoords[i]; // Remove negative zeros if (fabs(fcoord.x()) < 1e-10) { fcoord.x() = 0.0; } if (fabs(fcoord.y()) < 1e-10) { fcoord.y() = 0.0; } if (fabs(fcoord.z()) < 1e-10) { fcoord.z() = 0.0; } poscar += QString(" %1 %2 %3\n") .arg(fcoord.x(), 12, 'f', 8) .arg(fcoord.y(), 12, 'f', 8) .arg(fcoord.z(), 12, 'f', 8); } return poscar; } // Helper function -- works for "cut" or "copy" // FIXME add parameter to set "Copy" or "Cut" in messages QMimeData* MainWindow::prepareClipboardData(PrimitiveList selectedItems, const char* format) { QMimeData *mimeData = new QMimeData; QImage clipboardImage; Molecule *moleculeCopy = d->molecule; if (!selectedItems.isEmpty()) { // we only want to copy the selected items moleculeCopy = new Molecule; std::map AtomMap; // key is from old, value from new // copy atoms and create a map of atom indices foreach(Primitive *item, selectedItems.subList(Primitive::AtomType)) { Atom *selected = moleculeCopy->addAtom(); *selected = *(static_cast(item)); AtomMap[item->id()] = selected->id(); } // use the atom map to map bonds map::iterator posBegin, posEnd; QList bonds = d->molecule->bonds(); foreach(const Bond *bond, bonds) { posBegin = AtomMap.find(bond->beginAtomId()); posEnd = AtomMap.find(bond->endAtomId()); // make sure both bonds are in the map (i.e. selected) if ( posBegin != AtomMap.end() && posEnd != AtomMap.end() ) { Bond *bondCopy = moleculeCopy->addBond(); bondCopy->setAtoms(posBegin->second, posEnd->second, bond->order()); } } // end looping over bonds // Copy unit cell, if available if (d->molecule->OBUnitCell()) { moleculeCopy->setOBUnitCell (new OBUnitCell(*(d->molecule->OBUnitCell()))); } } // should now have a copy of our selected fragment if (!format) { // Default: // we also save an image for copy/paste to office programs, presentations, etc. // we do this first, so we can embed the molecular data too d->glWidget->raise(); d->glWidget->repaint(); if (QGLFramebufferObject::hasOpenGLFramebufferObjects()) { clipboardImage = d->glWidget->grabFrameBuffer( true ); } else { QPixmap pixmap = QPixmap::grabWindow( d->glWidget->winId() ); clipboardImage = pixmap.toImage(); } } OBConversion conv; if (format) { // The user specified a format (e.g., SMILES) so use it OBFormat *pFormat = conv.FindFormat(format); if (!pFormat || !conv.SetOutFormat(pFormat)) { statusBar()->showMessage( tr( "Copy failed (format unavailable)." ), 5000 ); return NULL; // nothing in it yet } OBMol obmol = moleculeCopy->OBMol(); string output = conv.WriteString(&obmol); QString copyData(output.c_str()); mimeData->setText(copyData.trimmed()); // remove any newlines or whitespace } else { // MDL format is used for main copy -- atoms, bonds, chirality // supports either 2D or 3D, generic data // CML is another option, but not as well tested in Open Babel OBFormat *mdlFormat = conv.FindFormat("mdl"); if (!mdlFormat || !conv.SetOutFormat(mdlFormat)) { statusBar()->showMessage( tr( "Copy failed (mdl unavailable)." ), 5000 ); return NULL; // nothing in it yet } // write an MDL file first (with bond orders, radicals, etc.) // (CML might be better in the future, but this works well now) OBMol obmol = moleculeCopy->OBMol(); string output = conv.WriteString(&obmol); QByteArray copyData(output.c_str(), output.length()); mimeData->setData("chemical/x-mdl-molfile", copyData); // we embed the molfile into the image // e.g. http://baoilleach.blogspot.com/2007/08/access-embedded-molecular-information.html clipboardImage.setText("molfile", copyData); // save a canonical SMILES too OBFormat *canFormat = conv.FindFormat("can"); if ( canFormat && conv.SetOutFormat( canFormat ) ) { output = conv.WriteString(&obmol); copyData = output.c_str(); clipboardImage.setText("SMILES", copyData); } // Copy XYZ coordinates to the text selection buffer for finite // systems, or POSCAR if a unit cell is available OBUnitCell *cell = moleculeCopy->OBUnitCell(); if (!cell) { OBFormat *xyzFormat = conv.FindFormat("xyz"); if ( xyzFormat && conv.SetOutFormat(xyzFormat)) { output = conv.WriteString(&obmol); copyData = output.c_str(); mimeData->setText(QString(copyData)); } } else { QString poscar = getPOSCAR(moleculeCopy); mimeData->setText(poscar); } // save the image to the clipboard too mimeData->setImageData(clipboardImage); } // need to free our temporary moleculeCopy if (!selectedItems.isEmpty()) { delete moleculeCopy; } return mimeData; } void MainWindow::cut() { QMimeData *mimeData = prepareClipboardData( d->glWidget->selectedPrimitives() ); if ( mimeData ) { CutCommand *command = new CutCommand( d->molecule, mimeData, d->glWidget->selectedPrimitives() ); d->undoStack->push( command ); } } void MainWindow::copy() { QMimeData *mimeData = prepareClipboardData( d->glWidget->selectedPrimitives() ); if ( mimeData ) { QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); // For X11 middle click if (QApplication::clipboard()->supportsSelection()) { QApplication::clipboard()->setMimeData(mimeData, QClipboard::Selection); } } } void MainWindow::copyAsSMILES() { QMimeData *mimeData = prepareClipboardData(d->glWidget->selectedPrimitives(), "smi"); if ( mimeData ) { QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); // For X11 middle click if (QApplication::clipboard()->supportsSelection()) { QApplication::clipboard()->setMimeData(mimeData, QClipboard::Selection); } } } void MainWindow::copyAsInChI() { QMimeData *mimeData = prepareClipboardData(d->glWidget->selectedPrimitives(), "inchi"); if ( mimeData ) { QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); // For X11 middle click if (QApplication::clipboard()->supportsSelection()) { QApplication::clipboard()->setMimeData(mimeData, QClipboard::Selection); } } } void MainWindow::clear() { // clear the molecule or a set of atoms // has the inteligence to figure out based on the number of selected items ClearCommand *command = new ClearCommand( d->molecule, d->glWidget->selectedPrimitives() ); d->undoStack->push( command ); } void MainWindow::selectAll() { QList selection; QList atoms = d->molecule->atoms(); foreach(Atom* atom, atoms) { selection.append(const_cast(atom)); } QList bonds = d->molecule->bonds(); foreach(Bond* bond, bonds) { selection.append(const_cast(bond)); } d->glWidget->setSelected(selection, true); d->glWidget->update(); } void MainWindow::selectNone() { d->glWidget->clearSelected(); d->glWidget->update(); } void MainWindow::setPainterQuality( int quality ) { d->glWidget->setQuality( quality ); d->glWidget->update(); } int MainWindow::painterQuality() const { return d->glWidget->quality(); } void MainWindow::setFogLevel(int level) { d->glWidget->setFogLevel(level); d->glWidget->update(); } int MainWindow::fogLevel() const { return d->glWidget->fogLevel(); } void MainWindow::newView() { QWidget *widget = new QWidget(); QVBoxLayout *layout = new QVBoxLayout( widget ); layout->setMargin( 0 ); layout->setSpacing( 6 ); GLWidget *gl = newGLWidget(); gl->loadDefaultEngines(); layout->addWidget(gl); QString tabName = tr("View %1").arg( d->centralTab->count()+1 ); d->centralTab->addTab(widget, tabName); d->centralTab->setTabsClosable(d->centralTab->count() > 1); ui.actionCloseView->setEnabled(true); ui.actionDetachView->setEnabled(true); ui.actionDisplayAxes->setChecked(gl->renderAxes()); ui.actionDebugInformation->setChecked(gl->renderDebug()); ui.actionQuickRender->setChecked(gl->quickRender()); writeSettings(); } void MainWindow::duplicateView() { QWidget *widget = new QWidget(); QVBoxLayout *layout = new QVBoxLayout( widget ); layout->setMargin( 0 ); layout->setSpacing( 6 ); GLWidget *gl = newGLWidget(); layout->addWidget(gl); // store current settings writeSettings(); // load settings from current widget int currentIndex = d->centralTab->currentIndex(); QSettings settings; settings.beginReadArray("view"); settings.setArrayIndex(currentIndex); gl->readSettings(settings); settings.endArray(); QString tabName = tr("View %1").arg( d->centralTab->count()+1 ); d->centralTab->addTab( widget, tabName ); d->centralTab->setTabsClosable(d->centralTab->count() > 1); ui.actionCloseView->setEnabled(true); ui.actionDetachView->setEnabled(true); ui.actionDisplayAxes->setChecked(gl->renderAxes()); ui.actionDebugInformation->setChecked(gl->renderDebug()); ui.actionQuickRender->setChecked(gl->quickRender()); writeSettings(); } void MainWindow::detachView() { if (d->centralLayout->count() == 1) // Don't close/detach the final view return; // Get the GLWidget of the current view, close in in the tabs QWidget *widget = d->centralTab->currentWidget(); foreach(QObject *object, widget->children()) { GLWidget *glWidget = qobject_cast(object); if (glWidget) { int index = d->centralTab->currentIndex(); d->centralTab->removeTab(index); for (int count=d->centralTab->count(); index < count; ++index) { d->centralTab->setTabText(index, tr("View %1", "View number (from 1 on)") .arg(index +1)); } // Ensure that actions are enabled/disabled appropriately. ui.actionCloseView->setEnabled(d->centralTab->count() != 1); ui.actionDetachView->setEnabled(d->centralTab->count() != 1); d->centralTab->setTabsClosable(d->centralTab->count() != 1); // Set up the detached viwe DetachedView *view = new DetachedView(glWidget); view->setWindowTitle(tr("Avogadro: Detached View")); view->resize(glWidget->size()); view->show(); connect(this, SIGNAL(windowClosed()), view, SLOT(mainWindowClosed())); } } } void MainWindow::closeView() { closeView(d->centralTab->currentIndex()); } void MainWindow::closeView(int index) { if (d->centralLayout->count() == 1) // Don't close the final view return; QWidget *widget = d->centralTab->widget(index); foreach( QObject *object, widget->children() ) { GLWidget *glWidget = qobject_cast(object); if (glWidget) { d->centralTab->removeTab(index); // delete the engines list for this GLWidget QWidget *widget = d->enginesStacked->widget( index ); d->enginesStacked->removeWidget( widget ); delete widget; for (int count=d->centralTab->count(); index < count; ++index) d->centralTab->setTabText(index, tr("View %1").arg(index + 1)); d->glWidgets.removeAll( glWidget ); delete glWidget; ui.actionCloseView->setEnabled(d->centralTab->count() != 1); ui.actionDetachView->setEnabled(d->centralTab->count() != 1); d->centralTab->setTabsClosable(d->centralTab->count() != 1); } } setView( d->centralTab->currentIndex()); writeSettings(); } void MainWindow::centerStep() { Camera *camera = d->glWidget->camera(); if(!camera) { d->centerTimer->deleteLater(); d->centerTimer = 0; d->centerTime = 0; return; } // calculate elapsed time d->centerTime += 10; int elapsedTime = d->centerTime; if(elapsedTime > d->rotationTime) elapsedTime = d->rotationTime; // make sure we don't divide by zero (0) if(d->rotationTime != 0) { double x = (elapsedTime * (M_PI) / d->rotationTime); double r = (cos(x-M_PI)+1)/2; camera->modelview().linear() = d->startOrientation.slerp(r,d->endOrientation).toRotationMatrix(); camera->modelview().translation() = d->startTrans + d->deltaTrans * r; } if(elapsedTime >= d->rotationTime) { d->centerTimer->deleteLater(); d->centerTimer = 0; d->centerTime = 0; //cout << "Final Translation: " << camera->modelview().translationVector() << endl; //cout << "Final Linear: " << camera->modelview().linearComponent() << endl << endl; } d->glWidget->update(); } void MainWindow::centerView() { // do nothing if there is a timer running if(d->centerTimer) return; Camera * camera = d->glWidget->camera(); if(!camera) return; // no need to animate when there are no atoms if(d->molecule->numAtoms() == 0) { camera->translate( d->glWidget->center() - Vector3d( 0.0, 0.0, 20.0 ) ); d->glWidget->update(); return; } // determine our goal matrix Matrix3d linearGoal; linearGoal.row(2) = d->glWidget->normalVector(); linearGoal.row(0) = linearGoal.row(2).unitOrthogonal(); linearGoal.row(1) = linearGoal.row(2).cross(linearGoal.row(0)); // calculate the translation matrix Transform3d goal(linearGoal); goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) * Vector3d::UnitZ()); // Support centering on a selection QList selectedAtoms = d->glWidget->selectedPrimitives().subList(Primitive::AtomType); if (selectedAtoms.isEmpty()) { // no selected atoms, we want the global center goal.translate( - d->glWidget->center() ); } else { // Calculate the centroid of the selection Vector3d selectedCenter(0.0, 0.0, 0.0); foreach(Primitive *item, selectedAtoms) { // Atom::pos() returns a pointer to the position selectedCenter += *(static_cast(item)->pos()); } selectedCenter /= double(selectedAtoms.size()); goal.translate( -selectedCenter); } // if smooth transitions are disabled, center now and return if( !d->molecule || d->molecule->numAtoms() >= 1000 ) { camera->setModelview(goal); d->glWidget->update(); return; } d->startTrans = camera->modelview().translation(); d->deltaTrans = goal.translation() - d->startTrans; d->startOrientation = camera->modelview().linear(); d->endOrientation = goal.linear(); // Use QTimer for smooth transitions d->centerTime = 0; // use the rotation angle between the two orientations to calculate our animation time double m = AngleAxisd(d->startOrientation.inverse() * d->endOrientation).angle(); d->rotationTime = int(m*300.0); if(d->rotationTime < 300 && d->deltaTrans.squaredNorm() > 1) d->rotationTime = 500; // make sure we need to rotate if(d->rotationTime > 0) { d->centerTimer = new QTimer(); connect(d->centerTimer, SIGNAL(timeout()), this, SLOT(centerStep())); d->centerTimer->start(10); } } void MainWindow::alignViewToAxes() { // do nothing if there is a timer running if(d->centerTimer) return; Camera * camera = d->glWidget->camera(); if(!camera) return; // determine our goal matrix Matrix3d linearGoal = Matrix3d::Identity(); // calculate the translation matrix Transform3d goal(linearGoal); goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) * Vector3d::UnitZ()); // Support centering on a selection QList selectedAtoms = d->glWidget->selectedPrimitives().subList(Primitive::AtomType); if (selectedAtoms.isEmpty()) { // no selected atoms, center on 0,0,0 goal.translate( Vector3d::Zero() ); } else { // Calculate the centroid of the selection Vector3d selectedCenter(0.0, 0.0, 0.0); foreach(Primitive *item, selectedAtoms) { // Atom::pos() returns a pointer to the position selectedCenter += *(static_cast(item)->pos()); } selectedCenter /= double(selectedAtoms.size()); goal.translate( -selectedCenter); } // if smooth transitions are disabled, center now and return if( !d->molecule || d->molecule->numAtoms() >= 1000 ) { camera->setModelview(goal); d->glWidget->update(); return; } d->startTrans = camera->modelview().translation(); d->deltaTrans = goal.translation() - d->startTrans; d->startOrientation = camera->modelview().linear(); d->endOrientation = goal.linear(); // Use QTimer for smooth transitions d->centerTime = 0; // use the rotation angle between the two orientations to calculate our animation time double m = AngleAxisd(d->startOrientation.inverse() * d->endOrientation).angle(); d->rotationTime = int(m*300.0); if(d->rotationTime < 300 && d->deltaTrans.squaredNorm() > 1) d->rotationTime = 500; // make sure we need to rotate if(d->rotationTime > 0) { d->centerTimer = new QTimer(); connect(d->centerTimer, SIGNAL(timeout()), this, SLOT(centerStep())); d->centerTimer->start(10); } } void MainWindow::showAndActivate() { setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); raise(); } void MainWindow::fullScreen() { if ( !this->isFullScreen() ) { ui.actionFullScreen->setText( tr( "Normal Size" ) ); #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) ui.actionFullScreen->setIcon( QIcon::fromTheme("view-restore", QIcon( ":/icons/view-restore.png" )) ); #else ui.actionFullScreen->setIcon( QIcon( ":/icons/view-restore.png" ) ); #endif d->fileToolbar = ui.fileToolBar->isVisible(); d->statusBar = statusBar()->isVisible(); ui.fileToolBar->hide(); statusBar()->hide(); // From KDE: avoid Full Screen // this->showFullScreen(); this->setWindowState(this->windowState() | Qt::WindowFullScreen); } else { // From KDE: Krazy -- showNormal() is not the inverse of Full Screen // this->showNormal(); this->setWindowState(this->windowState() & ~Qt::WindowFullScreen); ui.actionFullScreen->setText( tr( "Full Screen" ) ); #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) ui.actionFullScreen->setIcon( QIcon::fromTheme("view-fullscreen", QIcon( ":/icons/view-fullscreen.png" )) ); #else ui.actionFullScreen->setIcon( QIcon( ":/icons/view-fullscreen.png" ) ); #endif ui.fileToolBar->setVisible(d->fileToolbar); statusBar()->setVisible(d->statusBar); } } void MainWindow::resetDisplayTypes() { d->glWidget->loadDefaultEngines(); } void MainWindow::showSettingsDialog() { if ( !d->settingsDialog ) { d->settingsDialog = new SettingsDialog( this ); // Add the Plugin settings //QWidget *pluginSettings = d->pluginManager.settingsWidget(); QWidget *pluginSettings = new PluginSettings; connect(pluginSettings, SIGNAL(reloadPlugins()), &d->pluginManager, SLOT(reload())); connect(&d->pluginManager, SIGNAL(reloadPlugins()), pluginSettings, SLOT(loadValues())); d->settingsDialog->insertWidget(1, pluginSettings); // Add the Project Tree Editor ProjectTreeEditor *projectTreeEditor = new ProjectTreeEditor; connect( projectTreeEditor, SIGNAL( structureChanged() ), this, SLOT( setupProjectTree() ) ); d->settingsDialog->insertWidget(2, projectTreeEditor); } d->settingsDialog->show(); } void MainWindow::setBackgroundColor() { QColor color = QColorDialog::getColor(d->glWidget->background(), this); if (color.isValid()) { d->glWidget->setBackground(color); d->glWidget->update(); } } void MainWindow::setTool( Tool *tool ) { d->toolSettingsDock->setWindowTitle(tool->settingsTitle()); if ( tool->settingsWidget() ) { d->toolSettingsStacked->setCurrentWidget( tool->settingsWidget() ); } else { d->toolSettingsStacked->setCurrentIndex( 0 ); } } void MainWindow::connectUi() { // We have duplicate actions for the menus and the toolbars for Mac // This way we can disable the menus when all windows are closed // and disable menu icons (without disabling the toolbar icons) connect( ui.actionNew, SIGNAL( triggered() ), this, SLOT( newFile() ) ); connect( ui.actionNewTool, SIGNAL( triggered() ), this, SLOT( newFile() ) ); connect( ui.actionOpen, SIGNAL( triggered() ), this, SLOT( openFile() ) ); connect( ui.actionOpenTool, SIGNAL( triggered() ), this, SLOT( openFile() ) ); #ifdef Q_WS_MAC connect( ui.actionClose, SIGNAL( triggered() ), this, SLOT( close() ) ); connect( ui.actionCloseTool, SIGNAL( triggered() ), this, SLOT( close() ) ); #else connect( ui.actionClose, SIGNAL( triggered() ), this, SLOT( closeFile() ) ); connect( ui.actionCloseTool, SIGNAL( triggered() ), this, SLOT( closeFile() ) ); #endif connect( ui.actionSave, SIGNAL( triggered() ), this, SLOT( save() ) ); connect( ui.actionSaveTool, SIGNAL( triggered() ), this, SLOT( save() ) ); connect( ui.actionSaveAs, SIGNAL( triggered() ), this, SLOT( saveAs() ) ); connect( ui.actionRevert, SIGNAL( triggered() ), this, SLOT( revert() ) ); connect( ui.actionImport_File, SIGNAL( triggered() ), this, SLOT( importFile() ) ); connect( ui.actionExportGraphics, SIGNAL( triggered() ), this, SLOT( exportGraphics() ) ); #ifdef Q_WS_MAC connect( ui.actionQuit, SIGNAL( triggered() ), this, SLOT( macQuit() ) ); connect( ui.actionQuitTool, SIGNAL( triggered() ), this, SLOT( macQuit() ) ); #else connect( ui.actionQuit, SIGNAL( triggered() ), this, SLOT( close() ) ); connect( ui.actionQuitTool, SIGNAL( triggered() ), this, SLOT( close() ) ); #endif connect( ui.actionClearRecent, SIGNAL( triggered() ), this, SLOT( clearRecentFiles() ) ); connect( d->undoStack, SIGNAL( cleanChanged( bool ) ), this, SLOT( undoStackClean( bool ) ) ); connect( ui.actionCut, SIGNAL( triggered() ), this, SLOT( cut() ) ); connect( ui.actionCopy, SIGNAL( triggered() ), this, SLOT( copy() ) ); connect( ui.actionSMILES, SIGNAL( triggered() ), this, SLOT( copyAsSMILES() ) ); connect( ui.actionInChI, SIGNAL( triggered() ), this, SLOT( copyAsInChI() ) ); connect( ui.actionPaste, SIGNAL( triggered() ), this, SLOT( paste() ) ); connect( ui.actionClear, SIGNAL( triggered() ), this, SLOT( clear() ) ); // By default, the UI template defines backspace as the shortcut // We'll add control-backspace (which was the default in prev. versions) QList clearShortcuts = ui.actionClear->shortcuts(); clearShortcuts << QKeySequence(tr("Ctrl+Backspace")); ui.actionClear->setShortcuts(clearShortcuts); connect( ui.actionSelect_All, SIGNAL( triggered() ), this, SLOT( selectAll() ) ); connect( ui.actionSelect_None, SIGNAL( triggered() ), this, SLOT( selectNone() ) ); connect( ui.actionNewView, SIGNAL( triggered() ), this, SLOT( newView() ) ); connect( ui.actionDuplicateView, SIGNAL( triggered() ), this, SLOT( duplicateView() ) ); connect(ui.actionDetachView, SIGNAL(triggered()), this, SLOT(detachView())); connect( ui.actionCloseView, SIGNAL( triggered() ), this, SLOT( closeView() ) ); connect( ui.actionCenter, SIGNAL( triggered() ), this, SLOT( centerView() ) ); connect( ui.actionAlignViewToAxes, SIGNAL( triggered() ), this, SLOT( alignViewToAxes() ) ); connect( ui.actionFullScreen, SIGNAL( triggered() ), this, SLOT( fullScreen() ) ); connect( ui.actionResetDisplayTypes, SIGNAL( triggered() ), this, SLOT( resetDisplayTypes() ) ); connect( ui.actionSetBackgroundColor, SIGNAL( triggered() ), this, SLOT( setBackgroundColor() ) ); connect( ui.actionPerspective, SIGNAL( triggered() ), this, SLOT( setPerspective() ) ); connect( ui.actionOrthographic , SIGNAL( triggered() ), this, SLOT( setOrthographic() ) ); connect(ui.actionDisplayAxes, SIGNAL(triggered(bool)), this, SLOT(setRenderAxes(bool))); connect(ui.actionDebugInformation, SIGNAL(triggered(bool)), this, SLOT(setRenderDebug(bool))); connect(ui.actionQuickRender, SIGNAL(triggered(bool)), this, SLOT(setQuickRender(bool))); connect(ui.actionAllMolecules, SIGNAL(triggered(bool)), this, SLOT(showAllMolecules(bool))); connect( ui.actionAbout, SIGNAL( triggered() ), this, SLOT( about() ) ); connect( d->centralTab, SIGNAL( currentChanged( int ) ), this, SLOT( setView( int ) ) ); connect( ui.configureAvogadroAction, SIGNAL( triggered() ), this, SLOT( showSettingsDialog() ) ); connect( ui.projectTreeView, SIGNAL(activated(const QModelIndex&)), this, SLOT(projectItemActivated(const QModelIndex&))); connect( ui.actionTutorials, SIGNAL( triggered() ), this, SLOT( openTutorialURL() )); connect( ui.actionFAQ, SIGNAL( triggered() ), this, SLOT( openFAQURL() ) ); connect( ui.actionRelease_Notes, SIGNAL( triggered() ), this, SLOT( openReleaseNotesURL() )); connect( ui.actionAvogadro_Website, SIGNAL( triggered() ), this, SLOT( openWebsiteURL() ) ); connect( ui.actionReport_a_Bug, SIGNAL( triggered() ), this, SLOT( openBugURL() ) ); connect( d->toolGroup, SIGNAL( toolActivated( Tool * ) ), this, SLOT( setTool( Tool * ) ) ); connect( this, SIGNAL( moleculeChanged( Molecule * ) ), d->toolGroup, SLOT( setMolecule( Molecule * ) ) ); } void MainWindow::setMolecule(Molecule *molecule, int options) { if (d->molecule && options & Extension::DeleteOld) { disconnect(d->molecule, 0); d->molecule->deleteLater(); qDebug() << "Old molecule deleted..."; } else if (d->molecule) { disconnect(d->molecule, 0, this, 0); qDebug() << "Old molecule replaced..."; } d->undoStack->clear(); d->molecule = molecule; QString newFileName = molecule->fileName(); setFileName(newFileName); if (newFileName.isEmpty()) setWindowFilePath(defaultFileName()); emit moleculeChanged(molecule); connect(d->molecule, SIGNAL(primitiveAdded(Primitive *)), this, SLOT(documentWasModified())); connect(d->molecule, SIGNAL(primitiveUpdated(Primitive *)), this, SLOT(documentWasModified() ) ); connect(d->molecule, SIGNAL(primitiveRemoved(Primitive *)), this, SLOT(documentWasModified())); connect(d->molecule, SIGNAL(updated()), this, SLOT(documentWasModified())); setWindowModified(false); } void MainWindow::setupProjectTree() { ProjectTreeModel *model = qobject_cast(ui.projectTreeView->model()); ui.projectTreeView->setModel(new ProjectTreeModel( d->glWidget, this )); if (model) delete model; } void MainWindow::projectItemActivated(const QModelIndex& index) { // select the new primitives ProjectTreeModel *model = qobject_cast(ui.projectTreeView->model()); if (!model) return; ProjectTreeItem *projectItem = model->item(index); if (projectItem) { d->glWidget->clearSelected(); d->glWidget->setSelected(projectItem->primitives(), true); d->glWidget->update(); } } Molecule *MainWindow::molecule() const { return d->molecule; } void MainWindow::setFileName(const QString &fileName) { if ( fileName.isEmpty() ) { d->fileName.clear(); setWindowTitle( tr( "[*]Avogadro" , "[*] indicates that this is a modified view...." ) ); } else { QFileInfo fileInfo(fileName); d->fileName = fileInfo.canonicalFilePath(); d->fileDialogPath = fileInfo.absolutePath(); setWindowTitle( tr( "%1[*] - %2", "Window title: %1 is file name, %2 is Avogadro" ).arg( fileInfo.fileName() ) .arg( tr( "Avogadro" ) ) ); // Check that the canonical file path exists - only update recent files // if it does. Should prevent empty list items on initial open etc. if (! isDefaultFileName(d->fileName) ) { QSettings settings; // already set up properly via main.cpp QStringList files = settings.value("recentFileList").toStringList(); files.removeAll(d->fileName); files.prepend(d->fileName); while (files.size() > maxRecentFiles) files.removeLast(); settings.setValue("recentFileList", files); } // Set the fileName for the actual molecule too if (d->molecule) d->molecule->setFileName(d->fileName); } foreach( QWidget *widget, QApplication::topLevelWidgets() ) { MainWindow *mainWin = qobject_cast( widget ); if (mainWin) mainWin->updateRecentFileActions(); } } void MainWindow::updateRecentFileActions() { QSettings settings; // set up project and program properly in main.cpp QStringList files = settings.value("recentFileList").toStringList(); int originalNumRecentFiles = files.size(); // Remove any duplicate or empty entries from the list files.removeDuplicates(); files.removeAll(QString()); // Now remove any entries which do not exist for(int i = files.size()-1; i >= 0; --i) { QFileInfo fileInfo(files[i]); if (!QFile(fileInfo.absoluteFilePath()).exists()) files.removeAt(i); } int numRecentFiles = qMin(files.size(), static_cast(maxRecentFiles)); for (int i = 0; i < numRecentFiles; ++i) { d->actionRecentFile[i]->setText(QFileInfo(files[i]).fileName()); d->actionRecentFile[i]->setData(files[i]); d->actionRecentFile[i]->setVisible(true); } for (int j = numRecentFiles; j < maxRecentFiles; ++j) d->actionRecentFile[j]->setVisible(false); // If we had to prune the list, then save the cleaned list if (originalNumRecentFiles != numRecentFiles) settings.setValue("recentFileList", files); } MainWindow *MainWindow::findMainWindow( const QString &fileName ) { QString canonicalFilePath = QFileInfo( fileName ).canonicalFilePath(); // If the canonical file path is empty then the file doesn't exist if (canonicalFilePath.isEmpty()) return 0; foreach(QWidget *widget, qApp->topLevelWidgets()) { MainWindow *window = qobject_cast( widget ); if (window && window->d->fileName == canonicalFilePath) return window; } return 0; } void MainWindow::readSettings() { QSettings settings; // Check if the config file version exists and whether to the saved settings if (settings.value("ConfigVersion", 0) != m_configFileVersion) { settings.clear(); } if (m_ignoreConfig) settings.clear(); // Only remember a window if it is the first one - others will be offset if (getMainWindowCount() == 1) { QPoint originalPosition = pos(); QPoint newPosition = settings.value("pos", QPoint(200, 200)).toPoint(); // We'll try moving the window. If it moves off-screen, we'll move it back // This solves PR#1903437 move(newPosition); QDesktopWidget desktop; if (desktop.screenNumber(this) == -1) // it's not on a screen move(originalPosition); } QSize size = settings.value( "size", QSize(720,540) ).toSize(); resize( size ); d->fileDialogPath = settings.value("openDialogPath").toString(); QByteArray ba = settings.value( "state" ).toByteArray(); if(!ba.isEmpty()) { restoreState(ba); } else { // tabifyDockWidget(ui.enginesDock, ui.engineConfigurationDock); // tabifyDockWidget(ui.enginesDock, ui.enginePrimitivesDock); ui.enginesDock->raise(); } settings.beginGroup("tools"); d->toolGroup->readSettings(settings); settings.endGroup(); settings.beginGroup("extensions"); foreach(Extension *extension, d->pluginManager.extensions(this)) { extension->readSettings(settings); } settings.endGroup(); settings.beginGroup("colors"); foreach(Color *color, d->pluginManager.colors(this)) { color->readSettings(settings); } settings.endGroup(); int count = settings.beginReadArray("view"); if(count < 1) count = 1; for(int i = 0; i < count; i++) { settings.setArrayIndex(i); QWidget *widget = new QWidget(); QVBoxLayout *layout = new QVBoxLayout( widget ); layout->setMargin( 0 ); layout->setSpacing( 6 ); GLWidget *gl = newGLWidget(); layout->addWidget(gl); setupProjectTree(); QString tabName = tr("View %1").arg( i+1 ); d->centralTab->addTab(widget, tabName); gl->readSettings(settings); } settings.endArray(); // Set the view conditions for the initial view ui.actionDisplayAxes->setChecked(renderAxes()); ui.actionDebugInformation->setChecked(renderDebug()); ui.actionQuickRender->setChecked(quickRender()); // Set the initial state of the action group for "View > Projection" switch(projection()) { case GLWidget::Perspective: ui.actionPerspective->setChecked(true); break; case GLWidget::Orthographic: ui.actionOrthographic->setChecked(true); break; } ui.actionCloseView->setEnabled(count > 1); ui.actionDetachView->setEnabled(count > 1); d->centralTab->setTabsClosable(count > 1); #ifdef ENABLE_UPDATE_CHECKER // Load the updated version configuration settings and then run it if (m_updateCheck) { m_updateCheck->readSettings(settings); m_updateCheck->checkForUpdates(); } #endif } void MainWindow::writeSettings() { QSettings settings; // Save the version of the config file - bump if necessary settings.setValue("ConfigVersion", m_configFileVersion); settings.setValue( "pos", pos() ); settings.setValue( "size", size() ); settings.setValue( "state", saveState() ); settings.setValue("openDialogPath", d->fileDialogPath); settings.setValue( "enginesDock", ui.enginesDock->saveGeometry()); // save the views settings.beginWriteArray("view"); int count = d->glWidgets.size(); for(int i=0; iglWidgets.at(i)->writeSettings(settings); } settings.endArray(); // write the settings for every tool settings.beginGroup("tools"); d->toolGroup->writeSettings(settings); settings.endGroup(); settings.beginGroup("extensions"); foreach(Extension *extension, d->pluginManager.extensions(this)) { extension->writeSettings(settings); } settings.endGroup(); settings.beginGroup("colors"); foreach(Color *color, d->pluginManager.colors(this)) { color->writeSettings(settings); } settings.endGroup(); #ifdef ENABLE_UPDATE_CHECKER // Write the updated version configuration settings if (m_updateCheck) m_updateCheck->writeSettings(settings); #endif } void MainWindow::addActionsToMenu(Extension *extension) { QList actions = extension->actions(); foreach(QAction *action, actions) { // Here's the fun part, we go customize our menus // Add these actions to the menu described by the menuPath QString menuPathString = extension->menuPath(action); QMenu *path = NULL; if ( menuPathString.size() ) { QStringList menuPath = menuPathString.split( '>' ); // Root menus are a special case, we need to check menuBar() foreach( QAction *menu, menuBar()->actions() ) { if ( menu->text() == menuPath.at( 0 ) ) { path = menu->menu(); break; } } if ( !path ) { // Gotta add a new root menu path = new QMenu(menuPath.at( 0 )); menuBar()->insertMenu( ui.menuSettings->menuAction(), path); } // Now handle submenus if ( menuPath.size() > 1 ) { QMenu *nextPath = NULL; // Go through each submenu level, find the match // and update the "path" pointer for ( int i = 1; i < menuPath.size(); ++i ) { bool found = false; foreach( QAction *menu, path->actions() ) { if ( menu->text() == menuPath.at( i ) ) { nextPath = menu->menu(); found = true; break; } } // end checking menu items if ( !found ) { // add a new submenu nextPath = path->addMenu( menuPath.at( i ) ); } path = nextPath; } // end looping through menuPath } // endif } if(!path) { path = ui.menuExtensions; } path->addAction( action ); connect( action, SIGNAL( triggered() ), this, SLOT( actionTriggered() ) ); } } void MainWindow::loadExtensions() { foreach(Extension *extension, d->pluginManager.extensions(this)) { addActionsToMenu(extension); // This is the preferred method for adding a dockwidget to the main // window if (extension->numDockWidgets() != 0) { QList widgets = extension->dockWidgets(); for (QList::const_iterator it = widgets.constBegin(), it_end = widgets.constEnd(); it != it_end; ++it) { if (!this->restoreDockWidget(*it)) { // No restore state -- use the preferred area this->removeDockWidget((*it)); this->addDockWidget((*it)->preferredWidgetDockArea(), *it); } (*it)->hide(); ui.menuToolbars->addAction((*it)->toggleViewAction()); } } else { // These are deprecated methods for adding dock widgets. QDockWidget *dockWidget = extension->dockWidget(); if(dockWidget) { Qt::DockWidgetArea area = Qt::RightDockWidgetArea; DockExtension *dock = qobject_cast(extension); if (dock) { area = dock->preferredDockArea(); } qDebug() << "dev warning: Extension" << extension->name() << "is using a deprecated DockWidget loading method. " "See Extension::dockWidgets() documentation."; if (!restoreDockWidget(dockWidget)) { // No restore state -- use the preferred area removeDockWidget(dockWidget); addDockWidget(area, dockWidget); } dockWidget->hide(); ui.menuToolbars->addAction(dockWidget->toggleViewAction()); } } connect(this, SIGNAL(moleculeChanged(Molecule*)), extension, SLOT(setMolecule(Molecule*))); // When loading a molecule with an already open window with another // molecule this signal is never triggered. If we already have a // molecule at the point of loading then set it for the extension if (d->molecule) extension->setMolecule(d->molecule); connect(extension, SIGNAL( message(QString)), d->messagesText, SLOT(append(QString))); connect(extension, SIGNAL( actionsChanged(Extension*) ), this, SLOT(addActionsToMenu(Extension*))); connect(extension, SIGNAL(moleculeChanged(Molecule *, int)), this, SLOT(setMolecule(Molecule *, int))); connect(extension, SIGNAL(performCommand(QUndoCommand *)), this, SLOT(performCommand(QUndoCommand *))); } } void MainWindow::actionTriggered() { QAction *action = qobject_cast( sender() ); if ( action ) { Extension *extension = qobject_cast( action->parent() ); QUndoCommand *command = 0; command = extension->performAction( action, d->glWidget); if ( command ) { d->undoStack->push( command ); } } } void MainWindow::performCommand(QUndoCommand *command) { if ( command ) d->undoStack->push( command ); } void MainWindow::hideMainWindowMac() { // First remove the last menu item on the "Window" menu // i.e., the action which refers to this window QAction *lastAction = ui.menuSettings->actions().last(); ui.menuSettings->removeAction(lastAction); ui.menuSettings->actions().last(); // and last separator ui.menuSettings->removeAction(lastAction); d->menuItemStatus.clear(); QVector status; // Save the enabled state of every menu item foreach( QAction *menu, menuBar()->actions() ) { status.clear(); foreach( QAction *menuItem, menu->menu()->actions() ) { status.append( menuItem->isEnabled() ); } d->menuItemStatus.append( status ); } // Now disable them -- do this after saving status, since some actions may be // in multiple menus, e.g. "Select All" foreach( QAction *menu, menuBar()->actions() ) { foreach( QAction *menuItem, menu->menu()->actions() ) { if (menuItem->menu() == 0) { // ignore submenus menuItem->setEnabled(false); } else { // submenu items // Don't modify the "open recent" sub-menu if (menuItem->menu() == ui.menuOpenRecent) continue; foreach( QAction *subMenuItem, menuItem->menu()->actions() ) { subMenuItem->setEnabled(false); // disable submenus } } } } // Now enable key menu items -- new, open, open recent, quit, etc. ui.actionAbout->setEnabled( true ); ui.actionNew->setEnabled( true ); ui.actionOpen->setEnabled( true ); ui.actionQuit->setEnabled( true ); // Clear the molecule loadFile(); hide(); updateWindowMenu(); } void MainWindow::showMainWindowMac() { if (d->menuItemStatus.empty()) return; // we're initializing the application, not showing after a hide calls // Set the status of menu items to what we saved with hideMainWindowMac() unsigned int menuIndex = 0; unsigned int itemIndex = 0; foreach( QAction *menu, menuBar()->actions() ) { itemIndex = 0; foreach( QAction *menuItem, menu->menu()->actions() ) { menuItem->setEnabled( d->menuItemStatus[menuIndex][itemIndex] ); if (menuItem->menu() != 0) { // submenu foreach( QAction *subMenuItem, menuItem->menu()->actions() ) { subMenuItem->setEnabled(true); // re-enable submenus } } itemIndex++; } menuIndex++; } // make sure the camera is set to the default -- reported by Ian Davis centerView(); // Now show the window and raise it show(); raise(); activateWindow(); } GLWidget *MainWindow::newGLWidget() { GLWidget *gl = 0; if(!d->glWidget) { gl = new GLWidget(this); d->glWidget = gl; } else gl = new GLWidget( d->glWidget->format(), this, d->glWidget ); // Connect up a few signals and slots we need connect( this, SIGNAL( moleculeChanged( Molecule * ) ), gl, SLOT( setMolecule( Molecule * ) ) ); connect(gl, SIGNAL(activated(GLWidget *)), this, SLOT(glWidgetActivated(GLWidget *))); gl->setMolecule(d->molecule); gl->setObjectName(QString::fromUtf8("glWidget")); gl->setUndoStack( d->undoStack ); gl->setToolGroup( d->toolGroup ); d->glWidgets.append(gl); // Set the extensions (needed for Extension::paint) gl->setExtensions(d->pluginManager.extensions(this)); // engine list wiget contains all the buttons too QWidget *engineListWidget = new QWidget(ui.enginesWidget); QVBoxLayout *vlayout = new QVBoxLayout(engineListWidget); EngineViewWidget *engineView = new EngineViewWidget(gl, engineListWidget); vlayout->addWidget(engineView); connect(engineView, SIGNAL(settings(Engine *)), this, SLOT(engineSettingsClicked(Engine *))); // Then a row of add, duplicate, remove QHBoxLayout *hlayout = new QHBoxLayout(); // add QPushButton *addEngineButton = new QPushButton(tr("Add"), engineListWidget); hlayout->addWidget(addEngineButton); connect(addEngineButton, SIGNAL(clicked()), this, SLOT(addEngineClicked())); // duplicate QPushButton *duplicateEngineButton = new QPushButton(tr("Duplicate"), engineListWidget); hlayout->addWidget(duplicateEngineButton); connect(duplicateEngineButton, SIGNAL(clicked()), this, SLOT(duplicateEngineClicked())); // remove QPushButton *removeEngineButton = new QPushButton(tr("Remove"), engineListWidget); hlayout->addWidget(removeEngineButton); connect(removeEngineButton, SIGNAL(clicked()), this, SLOT(removeEngineClicked())); vlayout->addLayout(hlayout); d->enginesStacked->addWidget( engineListWidget ); // stacked configurations // QStackedWidget *stacked = new QStackedWidget(ui.engineConfigurationWidget); // 0 position is a blank configuration // stacked->addWidget(new QWidget()); // d->engineConfigurationStacked->addWidget(stacked); // EnginePrimitivesWidget *primitivesWidget = // new EnginePrimitivesWidget(gl, ui.enginePrimitivesWidget); // d->enginePrimitivesStacked->addWidget(primitivesWidget); connect(engineView, SIGNAL(clicked(Engine *)), this, SLOT(engineClicked(Engine *))); // connect( engineListView, SIGNAL( clicked( Engine * ) ), // primitivesWidget, SLOT( setEngine( Engine * ) ) ); // Warn the user if no engines or tools are loaded int nEngines = d->pluginManager.factories(Plugin::EngineType).size() - 1; int nTools = d->pluginManager.factories(Plugin::ToolType).size(); QString error; if(!nEngines && !nTools) error = tr("No tools or engines loaded."); else if(!nEngines) error = tr("No engines loaded."); else if(!nTools) error = tr("No tools loaded."); error += tr(" It is unlikely this application will function correctly. Please correct this error."); // Display a warning dialog if we haven't loaded any tools or engines if(!nEngines || !nTools) QMessageBox::warning(this, tr("Avogadro"), error); return gl; } void MainWindow::engineSettingsClicked(Engine *engine) { if (!engine) return; Engine *selectedEngine = engine; QWidget *settingsWindow = d->engineSettingsWindows.value(selectedEngine); if(settingsWindow) { settingsWindow->show(); return; } settingsWindow = new QWidget(this, Qt::Dialog); settingsWindow->setWindowTitle(selectedEngine->name() + ' ' + tr("Settings")); QVBoxLayout *layout = new QVBoxLayout(settingsWindow); QWidget *settingsWidget = selectedEngine->settingsWidget(); QTabWidget *settingsTabs; // may be unused //Check to see what tabs are needed (if any) bool objectsTab = (selectedEngine->primitiveTypes() & (Engine::Atoms | Engine::Bonds)); bool colorsTab = (selectedEngine->colorTypes() & Engine::ColorPlugins); // do we even need tabs for the window (e.g., axes engine with no objects or colors) bool multipleTabsNeeded = (objectsTab || colorsTab); if (!multipleTabsNeeded) { layout->addWidget(settingsWidget); } else { settingsTabs = new QTabWidget(settingsWindow); settingsTabs->addTab(settingsWidget, tr("Settings")); if (objectsTab) { EnginePrimitivesWidget *primitivesWidget = new EnginePrimitivesWidget(d->glWidget, settingsWindow); primitivesWidget->setEngine(selectedEngine); settingsTabs->addTab(primitivesWidget, tr("Objects")); } if (colorsTab) { EngineColorsWidget *colorsWidget = new EngineColorsWidget(&(d->pluginManager), settingsWindow); colorsWidget->setEngine(selectedEngine); settingsTabs->addTab(colorsWidget, tr("Colors")); } layout->addWidget(settingsTabs); } connect(settingsWidget, SIGNAL(destroyed()), settingsWindow, SLOT(deleteLater())); d->engineSettingsWindows[selectedEngine] = settingsWindow; settingsWindow->setLayout(layout); settingsWindow->show(); } void MainWindow::addEngineClicked() { Engine *engine = AddEngineDialog::getEngine(this, d->pluginManager.factories(Plugin::EngineType)); if(engine) { PrimitiveList p = d->glWidget->selectedPrimitives(); if(p.size()) engine->setPrimitives(p); d->glWidget->addEngine(engine); } } void MainWindow::duplicateEngineClicked() { Engine *engine = d->currentSelectedEngine; if(engine) { Engine *newEngine = engine->clone(); PrimitiveList list = d->glWidget->selectedPrimitives(); if(list.size()) { newEngine->setPrimitives(list); } newEngine->setAlias(newEngine->alias() + tr(" copy")); d->glWidget->addEngine(newEngine); } } void MainWindow::removeEngineClicked() { Engine *engine = d->currentSelectedEngine; if(engine) { d->glWidget->removeEngine(engine); d->engineSettingsWindows.remove(engine); } } void MainWindow::engineClicked(Engine *engine) { if (!engine) return; d->currentSelectedEngine = engine; } void MainWindow::toggleToolSettingsDock() { d->toolSettingsDock->setVisible(! d->toolSettingsDock->isVisible()); } void MainWindow::toggleEngineSettingsDock() { ui.enginesDock->setVisible(! ui.enginesDock->isVisible() ); } QStringList MainWindow::pluginSearchDirs() { // This is where we compile a list of directories that will be searched // for plugins. This is quite dependent up on operating system // Environment variables can override default paths foreach (const QString &variable, QProcess::systemEnvironment()) { if(variable.startsWith("AVOGADRO_PLUGINS=")) { QString path(variable); path.remove(QRegExp("^AVOGADRO_PLUGINS=")); const QStringList searchDirs = path.split(':'); if(!searchDirs.isEmpty()) return searchDirs; } } // Check if we are running in a build directory #ifndef Q_WS_MAC if (QFile::exists(QCoreApplication::applicationDirPath() + "/../CMakeCache.txt")) { qDebug() << "In a build directory - loading alternative..."; return QStringList(QCoreApplication::applicationDirPath() + "/../lib"); } #else // If we are in a Mac build dir things are a little different - if the // expected relative path does not exist try the build dir path if (QFile::exists(QCoreApplication::applicationDirPath() + "/../../../../CMakeCache.txt")) { return QStringList(QCoreApplication::applicationDirPath() + "/../../../../lib"); } #endif else { QStringList searchDirs; // If no environment variables are set then find the plugins if (!searchDirs.size()) { // Make it relative searchDirs << QCoreApplication::applicationDirPath() + "/../" + QString(INSTALL_LIBDIR) + "/" + QString(INSTALL_PLUGIN_DIR); } // Now search for the plugins in home directories #if defined(Q_WS_X11) searchDirs << QDir::homePath() + "/." + QString(INSTALL_PLUGIN_DIR) + "/plugins"; #elif defined(Q_WS_MAC) searchDirs << QDir::homePath() + "/Library/Application Support/" + QString(INSTALL_PLUGIN_DIR) + "/Plugins"; #elif defined(WIN32) const QString appdata = qgetenv("APPDATA"); searchDirs << appdata + "/" + QString(INSTALL_PLUGIN_DIR); #endif return searchDirs; } } } // end namespace Avogadro #include "mainwindow.moc" avogadro-1.1.1/avogadro/src/aboutdialog.h0000644000175000001440000000214612250371054017563 0ustar marcususers/********************************************************************** Copyright (C) 2007 Carsten Niehaus This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef ABOUTDIALOG_H #define ABOUTDIALOG_H #include namespace Avogadro { class AboutDialog : public QDialog { Q_OBJECT public: AboutDialog( QWidget *parent ); ~AboutDialog(); }; } #endif // ABOUTDIALOG_H avogadro-1.1.1/avogadro/src/mainwindow.h0000644000175000001440000002151012250371054017441 0ustar marcususers/********************************************************************** MainWindow.h - main window, menus, main actions Copyright (C) 2006-2007 by Geoffrey R. Hutchison Copyright (C) 2006-2008 by Donald E. Curtis Copyright (C) 2007-2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include "ui_mainwindow.h" #include "flattabwidget.h" #include #include #include #include #include #include class QUndoStack; class QUndoCommand; class QStackedLayout; class QStandardItem; #ifdef QTTESTING class pqTestUtility; #endif namespace OpenBabel{ class OBFormat; class OBMol; } namespace Avogadro { class Tool; class Primitive; class GLWidget; class Molecule; class Engine; class Extension; #ifdef ENABLE_UPDATE_CHECKER class UpdateCheck; #endif class MainWindowPrivate; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); MainWindow(const QString &fileName); ~MainWindow(); int painterQuality() const; int fogLevel() const; bool renderAxes() const; bool renderDebug() const; bool quickRender() const; /** * Return projection type in GLWiget * @return projection type **/ GLWidget::ProjectionType projection() const; /** * @param fileName fileName to load (defaults to loading a blank file) * @return whether the loading process was successful */ bool loadFile(const QString &fileName = QString(), OpenBabel::OBFormat *format = NULL, const QString &options = QString()); /** * @param fileName the filename to save the currently loaded file to */ bool saveFile(const QString &fileName, OpenBabel::OBFormat *format = NULL); /** * @param noConfig Ignore any configuration options on open. */ void setIgnoreConfig(bool noConfig); /** * @return true if the config file will be ignored, false otherwise. */ bool ignoreConfig() const; protected: void closeEvent(QCloseEvent *event); bool event(QEvent *event); // Handle drag and drop -- accept files dragged on the window void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event); public Q_SLOTS: void newFile(); /** * @param fileName file to load. if no filename is given, present a dialog */ void openFile(QString fileName = QString()); void openRecentFile(); bool save(); bool saveAs(); void revert(); void importFile(); void exportGraphics(); void closeFile(); void cut(); void copy(); void copyAsSMILES(); void copyAsInChI(); void paste(); void clear(); void selectAll(); void selectNone(); void show(); void showAndActivate(); void newView(); void duplicateView(); void detachView(); void closeView(); void closeView(int index); void centerView(); void alignViewToAxes(); void setView(int index); void fullScreen(); void resetDisplayTypes(); void showSettingsDialog(); void setBackgroundColor(); void setPainterQuality(int quality); void setFogLevel(int level); /** * Slot to switch glWidget to the perspective projection mode */ void setPerspective(); /** * Slot to switch glWidget to the orthographic projection mode */ void setOrthographic(); void setRenderAxes(bool render); void setRenderDebug(bool render); void setQuickRender(bool quick); void showAllMolecules(bool show); void undoStackClean(bool clean); void updateWindowMenu(); void bringAllToFront(); void zoom(); void clearRecentFiles(); void about(); void openTutorialURL() const; void openReleaseNotesURL() const; void openWebsiteURL() const; void openBugURL() const; void openFAQURL() const; void actionTriggered(); // A QAction from an Extension (e.g., a direct menu command) void performCommand(QUndoCommand *); // Delayed action from an Extension void documentWasModified(); void setTool(Tool *tool); // Mac helper void macQuit(); //void projectTreeItemClicked(QTreeWidgetItem *item, int column); void setupProjectTree(); void projectItemActivated(const QModelIndex& index); void reloadTools(); void reloadPlugins(); /** * Add an extension's actions to the menu */ void addActionsToMenu(Extension *extension); /** * @param molecule set the current molecule and take ownership * @param options Enum found in Extension with options for new Molecule */ void setMolecule(Molecule *molecule, int options = Extension::DeleteOld); /** * Slot to check we have the correct active GLWidget. */ void glWidgetActivated(GLWidget *glWidget); Q_SIGNALS: void moleculeChanged(Molecule *); /** * Currently used by the detached views to detect when the parent window * is closed. */ void windowClosed(); #ifdef QTTESTING protected Q_SLOTS: void record(); void play(); void popup(); #endif private: friend class MainWindowPrivate; MainWindowPrivate * const d; static const int m_configFileVersion; bool m_ignoreConfig; #ifdef QTTESTING pqTestUtility *TestUtility; #endif #ifdef ENABLE_UPDATE_CHECKER UpdateCheck *m_updateCheck; #endif Ui::MainWindow ui; enum { maxRecentFiles = 10 }; void constructor(); void readSettings(); void writeSettings(); void connectUi(); bool maybeSave(); void setFileName(const QString &fileName); void updateRecentFileActions(); bool isDefaultFileName(const QString fileName); QString defaultFileName(); /*** * Function for creating new GLWidgets * \return a pointer to a new GLWidget which has been added to the * internal list of all glwidgets, had it's UndoStack and ToolGroup * setup correctly, connects the correct signals, sets it to the * current widget if there is no other currently, and if there is a * pre-existing GLWidget it shares the GL context. */ GLWidget *newGLWidget(); //! Find an existing main window by filename //! \return a pointer to the appropriate window, or NULL if none exists MainWindow* findMainWindow(const QString &fileName); /** * @return the current molecule for this window */ Molecule* molecule() const; /** * load all available extensions */ void loadExtensions(); //! Helper function for cut or copy -- prepare a clipboard QMimeData* prepareClipboardData(PrimitiveList selectedItems, const char* format = NULL); //! Helper function to paste data from mime data bool pasteMimeData(const QMimeData *mimeData); //! Helper function to check for 3D coordinates from files void check3DCoords(OpenBabel::OBMol *molecule); //! Helper function to guess text format for pasting bool parseText(OpenBabel::OBMol *mol, const QString coord); //! Helper function for Mac -- hide main window and disable menus void hideMainWindowMac(); //! Helper function for Mac -- show main window and re-enable menus void showMainWindowMac(); static QStringList pluginSearchDirs(); private Q_SLOTS: void firstMolReady(); void finishLoadFile(); // select a molecule out of a multi-molecule file void selectMolecule(int index, int column); void engineSettingsClicked(Engine *engine); void addEngineClicked(); void duplicateEngineClicked(); void removeEngineClicked(); void engineClicked(Engine *engine); void toggleToolSettingsDock(); void toggleEngineSettingsDock(); void centerStep(); }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/pluginsettings.ui0000644000175000001440000000355512250371054020543 0ustar marcususers PluginSettings 0 0 523 300 Plugins Display Types Tools Extensions Colors Details true Avogadro::PluginListView QListView

pluginlistview.h
avogadro-1.1.1/avogadro/src/pluginitemmodel.cpp0000644000175000001440000000713012250371054021020 0ustar marcususers/********************************************************************** PluginItemModel - List Model for Plugins Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "pluginitemmodel.h" #include #include namespace Avogadro { class PluginItemModelPrivate { public: bool changed; int type; QList pluginItems; }; PluginItemModel::PluginItemModel( Plugin::Type type, QObject *parent ) : QAbstractItemModel(parent), d(new PluginItemModelPrivate) { d->changed = false; d->type = type; d->pluginItems = PluginManager::instance()->pluginItems(type); } bool PluginItemModel::changed() const { return d->changed; } int PluginItemModel::columnCount( const QModelIndex & ) const { return 1; } int PluginItemModel::rowCount( const QModelIndex & parent ) const { Q_UNUSED(parent); return d->pluginItems.size(); } QVariant PluginItemModel::data ( const QModelIndex & index, int role ) const { if(!index.isValid() || !index.internalPointer()) { return false; } PluginItem *plugin = static_cast(index.internalPointer()); if(role == Qt::DisplayRole) { return plugin->name(); } else if ( role == Qt::CheckStateRole) { if (plugin->isEnabled()) { return Qt::Checked; } else { return Qt::Unchecked; } } return QVariant(); } bool PluginItemModel::setData ( const QModelIndex & index, const QVariant & value, int role ) { if(!index.isValid() || !index.internalPointer()) { return false; } PluginItem *plugin = static_cast(index.internalPointer()); if(role == Qt::CheckStateRole) { if(value == Qt::Checked) { plugin->setEnabled(true); } else { plugin->setEnabled(false); } emit dataChanged(index, index); d->changed = true; return true; } return false; } Qt::ItemFlags PluginItemModel::flags ( const QModelIndex & ) const { return (Qt::ItemIsSelectable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled); } QModelIndex PluginItemModel::index ( int row, int column, const QModelIndex & parent ) const { if(!parent.isValid() && row >=0 && row < d->pluginItems.size()) { PluginItem *plugin = d->pluginItems.at(row); return createIndex(row, column, plugin); } return QModelIndex(); } PluginItem *PluginItemModel::plugin ( const QModelIndex & index ) const { if(!index.isValid() || !index.internalPointer()) { return 0; } PluginItem *plugin = static_cast(index.internalPointer()); return plugin; } } // end namespace Avogadro #include "pluginitemmodel.moc" avogadro-1.1.1/avogadro/src/detachedview.cpp0000644000175000001440000000326112250371054020257 0ustar marcususers/********************************************************************** DetachedView - a widget to display a GLWidget detached view Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "detachedview.h" #include #include #include namespace Avogadro { DetachedView::DetachedView(GLWidget *glWidget, QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), m_glWidget(glWidget) { setContentsMargins(0, 0, 0, 0); QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(m_glWidget); layout->setMargin(0); } DetachedView::~DetachedView() { } void DetachedView::mainWindowClosed() { hide(); deleteLater(); } } // End namespace Avogadro #include "detachedview.moc" avogadro-1.1.1/avogadro/src/primitivetreeview.cpp0000644000175000001440000001242412250371054021407 0ustar marcususers/********************************************************************** PrimitiveTreeView - Specialize QTreeView for PrimitiveItemModels Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "primitivetreeview.h" #include "primitiveitemmodel.h" #include #include #include #include #include namespace Avogadro { class PrimitiveTreeViewPrivate { public: PrimitiveTreeViewPrivate() : delegate(0) {} PrimitiveItemDelegate *delegate; }; PrimitiveTreeView::PrimitiveTreeView(QWidget *parent) : QTreeView(parent), d(new PrimitiveTreeViewPrivate) { initialize(); } PrimitiveTreeView::PrimitiveTreeView(Molecule *molecule, QWidget *parent) : QTreeView(parent), d(new PrimitiveTreeViewPrivate) { initialize(); setModel(new PrimitiveItemModel(molecule, this)); } PrimitiveTreeView::PrimitiveTreeView(Engine *engine, QWidget *parent) : QTreeView(parent), d(new PrimitiveTreeViewPrivate) { initialize(); setModel(new PrimitiveItemModel(engine, this)); } void PrimitiveTreeView::initialize() { d->delegate = new PrimitiveItemDelegate(this, this); setItemDelegate(d->delegate); setRootIsDecorated(false); header()->hide(); setUniformRowHeights(true); connect(this, SIGNAL(pressed(QModelIndex)), this, SLOT(itemPressed(QModelIndex))); } PrimitiveTreeView::~PrimitiveTreeView () { delete d->delegate; delete d; } void PrimitiveTreeView::itemPressed(const QModelIndex & index) { QModelIndex parent = model()->parent(index); if(!parent.isValid()) { setExpanded(index, !isExpanded(index)); } } class PrimitiveItemDelegatePrivate { public: PrimitiveItemDelegatePrivate() : view(0) {} QTreeView *view; }; PrimitiveItemDelegate::PrimitiveItemDelegate(QTreeView *view, QWidget *parent) : QItemDelegate(parent), d(new PrimitiveItemDelegatePrivate) { d->view = view; } void PrimitiveItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { const QAbstractItemModel *model = index.model(); Q_ASSERT(model); if (!model->parent(index).isValid()) { // if we ever want to change up the style a bit. //dc: QStyleOptionHeader headerOption; //dc: headerOption.state = option.state; //dc: headerOption.rect = option.rect; //dc: headerOption.palette = option.palette; //dc: d->view->style()->drawControl(QStyle::CE_HeaderSection, &dockOption, painter, d->view); QPen pen = painter->pen(); // this is a top-level item. QStyleOptionButton buttonOption; buttonOption.state = option.state; #ifdef Q_WS_MAC buttonOption.state |= QStyle::State_Raised; #endif buttonOption.state &= ~QStyle::State_HasFocus; buttonOption.rect = option.rect; buttonOption.palette = option.palette; buttonOption.features = QStyleOptionButton::None; d->view->style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter, d->view); QStyleOption branchOption; static const int i = 9; // ### hardcoded in qcommonstyle.cpp QRect r = option.rect; branchOption.rect = QRect(r.left() + i/2, r.top() + (r.height() - i)/2, i, i); branchOption.palette = option.palette; branchOption.state = QStyle::State_Children; if (d->view->isExpanded(index)) { branchOption.state |= QStyle::State_Open; } else { painter->setPen(Qt::darkGray); } d->view->style()->drawPrimitive(QStyle::PE_IndicatorBranch, &branchOption, painter, d->view); // draw text QRect textrect = QRect(r.left() + i*2, r.top(), r.width() - ((5*i)/2), r.height()); QString text = elidedText(option.fontMetrics, textrect.width(), Qt::ElideMiddle, model->data(index, Qt::DisplayRole).toString()); d->view->style()->drawItemText(painter, textrect, Qt::AlignCenter, option.palette, d->view->isEnabled(), text); painter->setPen(pen); } else { QItemDelegate::paint(painter, option, index); } } QSize PrimitiveItemDelegate::sizeHint(const QStyleOptionViewItem &opt, const QModelIndex &index) const { QStyleOptionViewItem option = opt; QSize sz = QItemDelegate::sizeHint(opt, index) + QSize(2, 2); return sz; } } #include "primitivetreeview.moc" avogadro-1.1.1/avogadro/src/engineviewwidget.h0000644000175000001440000000460612250371054020640 0ustar marcususers/********************************************************************** EngineTableView - custom engine table view for engine items Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ENGINEVIEWWIDGET_H #define ENGINEVIEWWIDGET_H #include class QModelIndex; class QTreeView; namespace Avogadro { class GLWidget; class EngineItemModel; class Engine; /** * @class EngineViewWidget * @brief Widget for listing and editing Engines * * This widget lists the available engines of a GLWidget, allows for the * engines to be enabled or disabled, and emits a signal if the settings * dialog should be displayed for the engine. */ class EngineViewWidget : public QWidget { Q_OBJECT public: explicit EngineViewWidget(GLWidget *glWidget, QWidget *parent = 0); ~EngineViewWidget(); GLWidget * glWidget() const; /** * Clear function provided primarily for reloading plugins, i.e. engines. */ void clear(); private: GLWidget *m_glWidget; EngineItemModel *m_model; QTreeView *m_view; private slots: /** * Used to handle the mouse clicks on the view and to emit the right signal. */ void selectEngine(const QModelIndex &index); signals: /** * Signal that the checkbox has been clicked - enable or disable it. */ void clicked(Engine *); /** * Signal that the settings button has been clicked - the settings dialog * should be shown. */ void settings(Engine *); }; } #endif avogadro-1.1.1/avogadro/src/editcommands.h0000644000175000001440000000477412250371054017751 0ustar marcususers/********************************************************************** EditCommands - Commands for undo/redo support for cut, copy, paste, etc. Copyright (C) 2007 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef EDITCOMMANDS_H #define EDITCOMMANDS_H #include #include #include #include // forward declaratin class QMimeData; namespace Avogadro { class CutCommand : public QUndoCommand { public: CutCommand(Molecule *molecule, QMimeData *copyData, PrimitiveList selectedList); virtual void undo(); virtual void redo(); private: Molecule *m_molecule; //!< parent (active molecule in widget) Molecule m_originalMolecule; //!< original (unmodified molecule) QMimeData *m_copiedData; //!< fragment to be copied to the clipboard IDList m_selectedList; //!< any selected atoms }; class PasteCommand : public QUndoCommand { public: PasteCommand(Molecule *molecule, Molecule pasteData, GLWidget *widget); virtual void undo(); virtual void redo(); private: Molecule *m_molecule; Molecule m_pastedMolecule; //!< pasted fragment from the clipboard Molecule m_originalMolecule; GLWidget *m_widget; }; class ClearCommand : public QUndoCommand { public: ClearCommand(Molecule *molecule, PrimitiveList selectedList); virtual void undo(); virtual void redo(); private: Molecule *m_molecule; //!< active widget molecule IDList m_selectedList; //!< any selected atoms Molecule m_originalMolecule; //!< save original molecule }; } #endif avogadro-1.1.1/avogadro/src/glgraphicsview.cpp0000644000175000001440000000565212250371054020647 0ustar marcususers/********************************************************************** GLGraphicsView - a custom GL Graphics View - not finished yet... Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "glgraphicsview.h" #include #include namespace Avogadro { GLGraphicsView::GLGraphicsView(QWidget *parent) : QGraphicsView(parent) { m_glwidget = new GLWidget(); constructor(); } GLGraphicsView::GLGraphicsView(GLWidget *widget, QWidget *parent) : QGraphicsView(parent) { m_glwidget = widget; constructor(); } GLGraphicsView::GLGraphicsView(QGraphicsScene *scene, QWidget *parent) : QGraphicsView(scene, parent) { m_glwidget = new GLWidget(); constructor(); } void GLGraphicsView::constructor() { setViewport(m_glwidget); m_glwidget->setAutoBufferSwap(true); setFrameStyle(QFrame::NoFrame); } void GLGraphicsView::drawBackground(QPainter *painter, const QRectF& rect) { // m_glwidget->initializeGL(); m_glwidget->paintGL2(); QGraphicsView::drawBackground(painter, rect); } void GLGraphicsView::resizeEvent(QResizeEvent *event) { m_glwidget->resizeEvent(event); QGraphicsView::resizeEvent(event); } bool GLGraphicsView::event(QEvent *event) { //m_glwidget->event(event); return QGraphicsView::event(event); } void GLGraphicsView::mouseMoveEvent(QMouseEvent *event) { m_glwidget->mouseMoveEvent(event); QGraphicsView::mouseMoveEvent(event); } void GLGraphicsView::mousePressEvent(QMouseEvent *event) { m_glwidget->mousePressEvent(event); QGraphicsView::mousePressEvent(event); } void GLGraphicsView::mouseReleaseEvent(QMouseEvent *event) { m_glwidget->mouseReleaseEvent(event); QGraphicsView::mouseReleaseEvent(event); } void GLGraphicsView::wheelEvent(QWheelEvent *event) { m_glwidget->wheelEvent(event); QGraphicsView::wheelEvent(event); } GLWidget * GLGraphicsView::glWidget() { return m_glwidget; } } // End namespace Avogadro #include "glgraphicsview.moc" avogadro-1.1.1/avogadro/src/projecttreeeditor.h0000644000175000001440000000673312250371054021034 0ustar marcususers/**************************************************************************** ** ** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. ** ** This file is part of the Qt Designer of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License versions 2.0 or 3.0 as published by the Free Software ** Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Alternatively you may (at ** your option) use any later version of the GNU General Public ** License if such license has been publicly approved by Trolltech ASA ** (or its successors, if any) and the KDE Free Qt Foundation. In ** addition, as a special exception, Trolltech gives you certain ** additional rights. These rights are described in the Trolltech GPL ** Exception version 1.1, which can be found at ** http://www.trolltech.com/products/qt/gplexception/ and in the file ** GPL_EXCEPTION.txt in this package. ** ** Please review the following information to ensure GNU General ** Public Licensing requirements will be met: ** http://trolltech.com/products/qt/licenses/licensing/opensource/. If ** you are unsure which license is appropriate for your use, please ** review the following information: ** http://trolltech.com/products/qt/licenses/licensing/licensingoverview ** or contact the sales department at sales@trolltech.com. ** ** In addition, as a special exception, Trolltech, as the sole ** copyright holder for Qt Designer, grants users of the Qt/Eclipse ** Integration plug-in the right for the Qt/Eclipse Integration to ** link to functionality provided by Qt Designer and its related ** libraries. ** ** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, ** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE. Trolltech reserves all rights not expressly ** granted herein. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef PROJECTTREEEDITOR_H #define PROJECTTREEEDITOR_H #include #include "projecttreemodeldelegate.h" #include #include #include "ui_projecttreeeditor.h" class QTreeWidget; namespace Avogadro { class ProjectTreeEditor: public QWidget { Q_OBJECT public: ProjectTreeEditor(QWidget *parent = 0); ~ProjectTreeEditor(); public Q_SLOTS: void loadValues(); void saveValues(); private Q_SLOTS: void on_newItemButton_clicked(); void on_newSubItemButton_clicked(); void on_deleteItemButton_clicked(); void on_moveItemUpButton_clicked(); void on_moveItemDownButton_clicked(); void on_moveItemRightButton_clicked(); void on_moveItemLeftButton_clicked(); void on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_itemTypeCombo_currentIndexChanged(int index); void on_aliasEdit_textEdited(const QString &text); void on_settingsButton_clicked(); signals: void structureChanged(); private: void updateEditor(); void closeEditors(); void writeItem(QSettings &settings, QTreeWidgetItem *cur, int indent, int &idx); Ui::ProjectTreeEditor ui; bool m_updating; QHash m_hash; }; } // namespace #endif // TREEWIDGETEDITOR_H avogadro-1.1.1/avogadro/src/savedialog.cpp0000644000175000001440000001006112250371054017735 0ustar marcususers/********************************************************************** SaveDialog - an improved file-save dialog Copyright (C) 2008 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "savedialog.h" #include "mainwindow.h" #include namespace Avogadro { void SaveDialog::updateDefaultSuffix() { const QString filter = selectedFilter(); QString suffix; int i = filter.indexOf("*."); if(i != -1) { // FIXME somebody who knows regexps should make this use a QRegExp. int j; const QString separators(" )"); for(j = i; j < filter.size() && !separators.contains(filter[j]); j++) {} if(j < filter.size()) { suffix = filter.mid(i+2, j-i-2); } } if(suffix.isEmpty()) suffix = m_defaultSuffix; setDefaultSuffix(suffix); emit currentChanged(selectedFiles().first()); } SaveDialog::SaveDialog(MainWindow *widget, const QString& windowTitle, const QString& defaultDirectory, const QString& defaultFileName, const QStringList& filters, const QString& defaultSuffix) : QFileDialog(widget), m_defaultSuffix(defaultSuffix) { setWindowTitle(windowTitle); if(!(defaultDirectory.isEmpty())) setDirectory(defaultDirectory); if(!(defaultFileName.isEmpty())) selectFile(defaultFileName); setFilters(filters); setFileMode(QFileDialog::AnyFile); setAcceptMode(QFileDialog::AcceptSave); setConfirmOverwrite(true); setLabelText(QFileDialog::Accept, tr("Save")); connect(this, SIGNAL(filterSelected(const QString &)), this, SLOT(updateDefaultSuffix())); updateDefaultSuffix(); } const QString SaveDialog::run(MainWindow *widget, const QString& windowTitle, const QString& defaultDirectory, const QString& defaultFileName, const QStringList& filters, const QString& defaultSuffix, QString &defaultFilter) { QString result; // Make sure we always have something for a file name QString fileName(defaultFileName); if (fileName.isEmpty()) fileName = tr("untitled"); // we cannot current save to a .gz file, so remove that suffix int gzipIndex = fileName.lastIndexOf(QLatin1String(".gz"), -1, Qt::CaseInsensitive); if (gzipIndex != -1) { fileName.remove(gzipIndex, 3); } #if defined (Q_WS_MAC) || defined (Q_WS_WIN) // The Mac and Windows Qt/Native dialog already update extensions for us. // So we'll call the static version. result = QFileDialog::getSaveFileName(widget, windowTitle, defaultDirectory + '/' + fileName, filters.join(";;"), &defaultFilter); #else QPointer dialog = new SaveDialog(widget, windowTitle, defaultDirectory, fileName, filters, defaultSuffix); dialog->selectFilter(defaultFilter); dialog->updateDefaultSuffix(); if(dialog->exec()) { result = dialog->selectedFiles().first(); defaultFilter = dialog->selectedFilter(); } delete dialog; #endif return result; } } // end namespace Avogadro #include "savedialog.moc" avogadro-1.1.1/avogadro/src/engineviewwidget.cpp0000644000175000001440000000654512250371054021177 0ustar marcususers/********************************************************************** EngineViewWidget - custom engine table view for engine items Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "engineviewwidget.h" #include "engineitemmodel.h" #include "engineitemdelegate.h" #include #include #include #include #include #include namespace Avogadro { EngineViewWidget::EngineViewWidget(GLWidget *glWidget, QWidget *parent) : QWidget(parent), m_glWidget(glWidget) { m_view = new QTreeView(this); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(m_view); layout->setMargin( 0 ); layout->setSpacing( 0 ); setLayout(layout); m_model = new EngineItemModel(m_glWidget, m_view); // Sort the engines alphabetically QSortFilterProxyModel *sortModel = new QSortFilterProxyModel(m_view); sortModel->setSourceModel(m_model); m_view->setModel(sortModel); sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); sortModel->setSortLocaleAware(true); sortModel->setDynamicSortFilter(true); sortModel->sort(0, Qt::AscendingOrder); connect(m_view, SIGNAL(clicked(QModelIndex)), this, SLOT(selectEngine(QModelIndex))); // Set up the tree view m_view->setAlternatingRowColors(true); m_view->header()->hide(); m_view->setIndentation(0); m_view->setTextElideMode(Qt::ElideMiddle); m_view->setSelectionBehavior(QAbstractItemView::SelectRows); m_view->header()->setStretchLastSection(false); m_view->header()->setResizeMode(0, QHeaderView::Stretch); m_view->header()->setResizeMode(1, QHeaderView::Fixed); m_view->header()->resizeSection(1, 25); // Use the engine item delegate to display EngineItemDelegate *eid = new EngineItemDelegate(parent); m_view->setItemDelegate(eid); } EngineViewWidget::~EngineViewWidget() { } GLWidget *EngineViewWidget::glWidget() const { return m_glWidget; } void EngineViewWidget::selectEngine(const QModelIndex &index) { Engine *engine = index.data(EngineItemModel::EngineRole).value(); if(engine) { if(index.column() == 0) emit clicked(engine); else if(index.column() == 1 && engine->hasSettings()) emit settings(engine); } } void EngineViewWidget::clear() { m_model->clear(); } } // end namespace Avogadro #include "engineviewwidget.moc" avogadro-1.1.1/avogadro/src/settingsdialog.h0000644000175000001440000000322712250371054020312 0ustar marcususers/********************************************************************** SettingsDialog - Settings Dialog Copyright (C) 2007-2008 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SETTINGSDIALOG_H #define SETTINGSDIALOG_H #include "ui_settingsdialog.h" class QAbstractButton; namespace Avogadro { class MainWindow; class SettingsDialog : public QDialog { Q_OBJECT public: SettingsDialog(MainWindow *mainWindow); void insertWidget(int index, QWidget *widget); private: Ui::SettingsDialog ui; MainWindow *m_mainWindow; private Q_SLOTS: void buttonClicked(QAbstractButton *button); void saveValues(); void loadValues(); void qualityChanged(int value); void fogChanged(int value); }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/enginecolorswidget.cpp0000644000175000001440000000603512250371054021520 0ustar marcususers/********************************************************************** EngineColorsWidget - Widget for setting the engine color map. Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "enginecolorswidget.h" #include #include #include #include #include namespace Avogadro { class EngineColorsWidgetPrivate { public: EngineColorsWidgetPrivate() : engine(0), currentSettingsWidget(0) {}; Engine *engine; PluginManager *pluginManager; QWidget *currentSettingsWidget; }; EngineColorsWidget::EngineColorsWidget( PluginManager *pluginManager, QWidget *parent ) : QWidget(parent), d(new EngineColorsWidgetPrivate) { ui.setupUi(this); d->pluginManager = pluginManager; foreach(Color *color, pluginManager->colors()) { ui.colorCombo->addItem(color->name()); } connect(ui.colorCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(colorChanged(int))); // we should actually check the engine settings for the current color choice } EngineColorsWidget::~EngineColorsWidget() { d->currentSettingsWidget = NULL; delete d; } void EngineColorsWidget::colorChanged(int index) { Color *color = d->pluginManager->colors().at(index); if (!color) return; d->engine->setColorMap(color); if (d->currentSettingsWidget) { d->currentSettingsWidget->hide(); ui.verticalLayout->removeWidget(d->currentSettingsWidget); // Remove the bottom spacer QLayoutItem *space; space = ui.verticalLayout->takeAt(-1); ui.verticalLayout->removeItem(space); d->currentSettingsWidget = NULL; } if (color->settingsWidget()) { d->currentSettingsWidget = color->settingsWidget(); ui.verticalLayout->addWidget(d->currentSettingsWidget); ui.verticalLayout->addStretch(); d->currentSettingsWidget->show(); } } void EngineColorsWidget::setEngine( Engine *engine ) { d->engine = engine; //ui.colorCombo->setEnabled(true); } } // end namespace Avogadro #include "enginecolorswidget.moc" avogadro-1.1.1/avogadro/src/application.h0000644000175000001440000000235412250371054017575 0ustar marcususers/********************************************************************** Application.h - main application events Copyright (C) 2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef APPLICATION_H #define APPLICATION_H #include namespace Avogadro { class Application : public QApplication { Q_OBJECT public: Application(int &argc, char **argv); bool loadFile(const QString &fileName); protected: bool event(QEvent *event); private: }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/addenginedialog.ui0000644000175000001440000000504712250371054020560 0ustar marcususers AddEngineDialog 0 0 362 168 Add Display Type Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Description: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() AddEngineDialog accept() 248 254 157 274 buttonBox rejected() AddEngineDialog reject() 316 260 286 274 avogadro-1.1.1/avogadro/src/CMakeLists.txt0000644000175000001440000001547512250371054017671 0ustar marcususersset(QT_USE_QTOPENGL true) set(QT_USE_QTNETWORK true) if(WIN32) set(QT_USE_QTMAIN true) endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h ) link_directories(${OPENBABEL2_LIBRARY_DIRS}) # Ensure the Avogadro include directory is always first get_directory_property(tmp_include_dirs INCLUDE_DIRECTORIES) set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${libavogadro_BINARY_DIR}/include;${tmp_include_dirs}") include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${OPENBABEL2_INCLUDE_DIR} ${EIGEN2_INCLUDE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) if(GLEW_FOUND) include_directories(${GLEW_INCLUDE_DIR}) endif() include(${QT_USE_FILE}) option(QtTesting "Enable Qt Testing framework?" OFF) if(QtTesting) find_package(QtTesting REQUIRED) include_directories(${QtTesting_INCLUDE_DIRS}) link_directories(${QtTesting_LIBRARY_DIR}) add_definitions(-DQTTESTING) endif() FILE(GLOB avogadro_SRCS "*.cpp") # Should we build the update checking code? Currently causes segfaults with Qt # 4.5.3 on both Arch and Gentoo 64 bit platforms (may be more) option(ENABLE_UPDATE_CHECKER "Should the Avogadro update checking code be compiled?" OFF) if(ENABLE_UPDATE_CHECKER) add_definitions(-DENABLE_UPDATE_CHECKER) else() list(REMOVE_ITEM avogadro_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/updatecheck.cpp") list(REMOVE_ITEM avogadro_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/updatedialog.cpp") endif() FILE(GLOB projectDelegates_SRCS "projectdelegates/*.cpp") set(avogadro_SRCS ${avogadro_SRCS} ${projectDelegates_SRCS}) if(WIN32) set(avogadro_SRCS ${avogadro_SRCS} windows/avogadro.rc) endif() file(GLOB avogadro_RCS "*.qrc") file(GLOB avogadro_UIS "*.ui") # designer has some flaws. qt4_automoc(${avogadro_SRCS}) qt4_add_resources(avogadro_RC_SRCS ${avogadro_RCS}) qt4_wrap_ui(avogadro_UIS_H ${avogadro_UIS}) if(NOT WIN32) if(Linguist_FOUND) file(GLOB_RECURSE lang_PO "${Avogadro_SOURCE_DIR}/i18n/avogadro/*.po") foreach(po ${lang_PO}) string(REGEX REPLACE "(.*)/([^.]+)\\.po" "\\1/avogadro-\\2.po" po ${po}) list(APPEND avogadro_PO ${po}) endforeach() QT4_WRAP_PO(avogadro_QM ${avogadro_PO}) endif() else() # don't attempt to create QM files on windows -- copy them from a linux build! file(GLOB_RECURSE avogadro_QM "${Avogadro_SOURCE_DIR}/avogadro/src/avogadro*.qm") endif() # Some relative rpath handling for Linux if(UNIX AND ENABLE_RPATH AND NOT APPLE) # Set a relative rpath on Linux - just testing right now... set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib${LIB_SUFFIX}") endif() add_executable(avogadro-app WIN32 MACOSX_BUNDLE ${avogadro_SRCS} ${avogadro_UIS_H} ${avogadro_RC_SRCS} ${avogadro_QM} ) set_target_properties(avogadro-app PROPERTIES OUTPUT_NAME avogadro LABELS avogadro-app) set_source_files_properties(${avogadro_SRCS} PROPERTIES LABELS avogadro) target_link_libraries(avogadro-app ${QT_LIBRARIES} ${OPENBABEL2_LIBRARIES} avogadro) if(QtTesting) target_link_libraries(avogadro-app QtTesting) endif() if(Q_WS_X11) target_link_libraries(avogadro-app ${X11_X11_LIB}) endif() if(ENABLE_PYTHON) target_link_libraries(avogadro-app ${Boost_LIBRARIES}) endif() if(ENABLE_UPDATE_CHECKER) target_link_libraries(avogadro-app ${QT_QTNETWORK_LIBRARY}) endif() if(APPLE) set(MACOSX_BUNDLE_INFO_STRING "Avogadro - version ${Avogadro_VERSION_FULL}") set(MACOSX_BUNDLE_BUNDLE_VERSION ${Avogadro_VERSION_FULL}) # Change following line to point to actual icns file in bundle. set(MACOSX_BUNDLE_ICON_FILE "avogadro.icns") # means bundle is set to be net.sourceforge.Avogadro set(MACOSX_BUNDLE_GUI_IDENTIFIER "net.sourceforge") set(MACOSX_BUNDLE_BUNDLE_NAME "Avogadro") set(CMAKE_INSTALL_DESTINATION_ARGS BUNDLE DESTINATION "${CMAKE_BUNDLE_LOCATION}") # This also sets the bundle name correctly set_target_properties(avogadro-app PROPERTIES OUTPUT_NAME "${CMAKE_BUNDLE_NAME}") # Use relative paths for the executable to link to its libraries set_target_properties(avogadro-app PROPERTIES CMAKE_INSTALL_NAME_DIR "@executable_path/../lib") set(MACOSX_SRC_DIR ${avogadro_SOURCE_DIR}/src/mac) # Overload the Info.plist default set(CMAKE_MODULE_PATH ${avogadro_SOURCE_DIR}/src/mac ${CMAKE_MODULE_PATH}) # Do not install the bundle into the prefix - just everything else set(Avogadro_INSTALL_DESTINATIONS_ARGS BUNDLE DESTINATION "${CMAKE_BUNDLE_LOCATION}") install(FILES "mac/avogadro.icns" DESTINATION Resources) install(FILES "mac/AvogadroDocument.icns" DESTINATION Resources) # install .nib file set(QT_COCOA_NIB /Library/Frameworks/QtGui.framework/Versions/Current/Resources/qt_menu.nib) if(EXISTS ${QT_COCOA_NIB}) install(DIRECTORY ${QT_COCOA_NIB} DESTINATION Resources USE_SOURCE_PERMISSIONS) endif() # Install a .lproj directory for each translation # We're assuming that there will never be an libavogadro translation # without a corresponding avogadro one. # (Fairly safe assumption) # This regex gives us translations with just two characters # (e.g., avogadro_fr.ts) string(REGEX MATCHALL "-[a-z]+\\.po" langresult "${avogadro_PO}") string(REGEX REPLACE "-([^.]+)\\.po" "\\1" languages "${langresult}") # This one gives us languages for country codes (e.g., avogadro_zh_CN.ts) string(REGEX MATCHALL "-[a-z]+_[A-Z]+\\.po" langresult "${avogadro_PO}") string(REGEX REPLACE "-([^_]+_[^.]+)\\.po" "\\1" fulllangs "${langresult}") set (LANGUAGES "${languages};${fulllangs};en;en_US") foreach(lang ${LANGUAGES}) set( MAC_LANG_DIR "${CMAKE_INSTALL_PREFIX}/Resources/${lang}.lproj" ) install(CODE "EXECUTE_PROCESS(COMMAND mkdir ${MAC_LANG_DIR} ERROR_QUIET)") install(CODE "EXECUTE_PROCESS(COMMAND ${MACOSX_SRC_DIR}/lang.sh ${MACOSX_SRC_DIR} ${MAC_LANG_DIR} ${Avogadro_VERSION_FULL} ${lang} OUTPUT_QUIET)") endforeach() endif() install(TARGETS avogadro-app RUNTIME DESTINATION ${BIN_INSTALL_DIR} ${Avogadro_INSTALL_DESTINATIONS_ARGS}) install(FILES ${avogadro_QM} DESTINATION ${I18N_INSTALL_DIR}) if(APPLE AND ENABLE_AVO_PACKAGE) set(OSX_MAKE_STANDALONE_BUNDLE_CMAKE_SCRIPT "${CMAKE_BINARY_DIR}/Avogadro_OSX_MakeStandAloneBundle.cmake") set(OSX_MAKE_STANDALONE_BUNDLE_BASH_SCRIPT "${CMAKE_BINARY_DIR}/Avogadro_OSX_MakeStandAloneBundle.sh") # Configure the cmake file and the shell script configure_file("${MACOSX_SRC_DIR}/CompleteBundle.cmake.in" "${OSX_MAKE_STANDALONE_BUNDLE_CMAKE_SCRIPT}" @ONLY IMMEDIATE) configure_file("${MACOSX_SRC_DIR}/CreateBundle.sh.in" "${OSX_MAKE_STANDALONE_BUNDLE_BASH_SCRIPT}" @ONLY IMMEDIATE) install(SCRIPT "${OSX_MAKE_STANDALONE_BUNDLE_CMAKE_SCRIPT}") endif() # Install a .desktop file and icon for users of XDG-aware OSes if(XDG_APPS_INSTALL_DIR AND XDG_ICON_INSTALL_DIR) install(FILES "avogadro.desktop" DESTINATION "${XDG_APPS_INSTALL_DIR}") install(FILES "icons/avogadro-icon.png" DESTINATION "${XDG_ICON_INSTALL_DIR}") endif() avogadro-1.1.1/avogadro/src/projecttreemodeldelegate.h0000644000175000001440000000763612250371054022344 0ustar marcususers/********************************************************************** selectionitem.h - ProjectItem for named selections. Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef PROJECTTREEMODELDELEGATE_H #define PROJECTTREEMODELDELEGATE_H #include #include "projecttreemodel.h" #include namespace Avogadro { class GLWidget; class ProjectTreeModelDelegatePrivate; class ProjectTreeModelDelegate : public QObject { Q_OBJECT public: ProjectTreeModelDelegate(ProjectTreeModel *model); /** * The name for this project tree model delegate */ virtual QString name() const = 0; /** * Add the tree items for this project tree model delegate to parent */ // virtual void setupModelData(ProjectTreeModel *model, GLWidget *widget, ProjectTreeItem *parent) = 0; virtual void initStructure(GLWidget *widget, ProjectTreeItem *parent) = 0; /** * @return a QWidget containing the settings or 0 * if no settings widget is available. */ virtual QWidget *settingsWidget(); /** * Set the alias for this project plugin */ void setAlias(const QString &alias); /** * @return The alias for this project plugin. */ QString alias() const; /** * Write the engine settings so that they can be saved between sessions. */ virtual void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ virtual void readSettings(QSettings &settings); /** * @return The ProjectTreeModel for this delegate. */ ProjectTreeModel* model() const; /** * Insert a new expandable item at the end of parent. This item is also stored * so that it can be retrieved by the ProjectTreeModel to if determine the user * just expanded this item. If so, the model will call * ProjectTreeModelDelegate::fetchMore(ProjectTreeItem*) and we can further * initialize the data and connect signals if needed. * * Note: these are never removed, if a new tree structure is set in the editor, * the current model is deleted (along with all its delegates and expandable items) * and a new model is created. */ ProjectTreeItem* insertExpandableItem(ProjectTreeItem *parent); /** * @return true if this delegate has inserted expandable item @p parent. */ bool hasExpandableItem(ProjectTreeItem *parent) const; /** * Do the actual model initialization for parent (create the children) */ virtual void fetchMore(ProjectTreeItem *) {} /** * Some delegates may delegate their work to other delegates. However, to keep the * model informed about all the delegates, you need to call exportDelegate once you * created them. This will also steal the pointer, you don't need to delete them. * * See MoleculeDelegate for example. */ void exportDelegate(ProjectTreeModelDelegate *delegate); private: ProjectTreeModelDelegatePrivate * const d; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/enginecolorswidget.ui0000644000175000001440000000217512250371054021354 0ustar marcususers EngineColorsWidget 0 0 400 300 Form Color by: Qt::Vertical 20 40 avogadro-1.1.1/avogadro/src/mainwindow.ui0000644000175000001440000004442512250371054017641 0ustar marcususers MainWindow 0 0 621 553 Avogadro :/icons/avogadro.png:/icons/avogadro.png 0 0 621 22 &Help &File Open &Recent Export Import Se&ttings Toolbars &Build &View Projection &Edit Copy As E&xtensions &Select Main Toolbar Qt::Horizontal 16 16 Qt::ToolButtonTextBesideIcon TopToolBarArea false 120 135 Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Project Tree 2 6 2 0 2 2 Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea Display Types 1 Tools 16 16 TopToolBarArea false &Open Ctrl+O &Open &Quit Ctrl+Q QAction::QuitRole &Quit Recent &Clear Recent &New Ctrl+N &New &Close Ctrl+W &Close &Save Ctrl+S &Save Save &As... Ctrl+Shift+S Revert To Saved &Graphics... :/icons/view-fullscreen.png:/icons/view-fullscreen.png &Full Screen Mode Esc :/icons/fill-color.png:/icons/fill-color.png Set &Background Color... &About QAction::AboutRole :/icons/edit-undo.png:/icons/edit-undo.png &Undo Ctrl+Z :/icons/edit-redo.png:/icons/edit-redo.png &Redo Ctrl+Shift+Z :/icons/tab-new.png:/icons/tab-new.png New View false :/icons/tab-close.png:/icons/tab-close.png Close View :/icons/navigate.png:/icons/navigate.png Center :/icons/navigateN.png:/icons/navigateN.png Align View To Axes &Paste Ctrl+V Copy Ctrl+C Cut Ctrl+X Clear Select All Ctrl+A Select None Ctrl+Shift+A :/icons/configure.png:/icons/configure.png Configure Avogadro... QAction::PreferencesRole true Tutorials :/icons/tab-duplicate.png:/icons/tab-duplicate.png Duplicate View true Display Axes true Debug Information false Avogadro Help Release Notes Report a Bug FAQ Avogadro Website :/icons/preferences-plugin.png:/icons/preferences-plugin.png Plugin Manager... :/icons/view-list-tree.png:/icons/view-list-tree.png Project Tree Editor... :/icons/tab-detach.png:/icons/tab-detach.png Detach View Molecule File... true true Use Quick Render &Vector Graphics... true Display Unit Cell Axes false All Molecules in File... Reset Display Types true false Perspective true Orthographic SMILES InChI IUPAC InChI identifier avogadro-1.1.1/avogadro/src/primitiveitemmodel.cpp0000644000175000001440000002673212250371054021543 0ustar marcususers/********************************************************************** PrimitiveItemModel - Model for representing primitives. Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "primitiveitemmodel.h" #include #include #include #include #include #include #include #include namespace Avogadro { class PrimitiveItemModelPrivate { public: PrimitiveItemModelPrivate() : engine(0), molecule(0) {} Engine *engine; Molecule *molecule; // use this to optimize insert / delete QMap rowTypeMap; // keep track of the model sizes for each parent QVector size; /* * for Molecules we have to cache additions / subtractions * because when we get the signal we haven't actually added * the atom to the molecule, rather it's been created but not * yet added. */ QVector > moleculeCache; }; PrimitiveItemModel::PrimitiveItemModel( Engine *engine, QObject *parent) : QAbstractItemModel(parent), d(new PrimitiveItemModelPrivate) { d->engine = engine; d->rowTypeMap.insert(0, Primitive::AtomType); d->rowTypeMap.insert(1, Primitive::BondType); d->rowTypeMap.insert(2, Primitive::ResidueType); d->size.resize(d->rowTypeMap.size()); connect(engine, SIGNAL(changed()), this, SLOT(engineChanged())); d->size[0] = engine->atoms().size(); d->size[1] = engine->bonds().size(); d->size[2] = engine->primitives().subList(Primitive::ResidueType).size(); } PrimitiveItemModel::PrimitiveItemModel(Molecule *molecule, QObject *parent) : QAbstractItemModel(parent), d(new PrimitiveItemModelPrivate) { d->molecule = molecule; d->rowTypeMap.insert(0, Primitive::AtomType); d->rowTypeMap.insert(1, Primitive::BondType); d->rowTypeMap.insert(2, Primitive::ResidueType); d->size.resize(d->rowTypeMap.size()); d->moleculeCache.resize(d->rowTypeMap.size()); d->size[0] = molecule->numAtoms(); d->size[1] = molecule->numBonds(); d->size[2] = molecule->numResidues(); connect(molecule, SIGNAL(primitiveAdded(Primitive *)), this, SLOT(addPrimitive(Primitive *))); connect(molecule, SIGNAL(primitiveUpdated(Primitive *)), this, SLOT(updatePrimitive(Primitive *))); connect(molecule, SIGNAL(primitiveRemoved(Primitive *)), this, SLOT(removePrimitive(Primitive *))); } PrimitiveItemModel::~PrimitiveItemModel() { delete d; } void PrimitiveItemModel::addPrimitive(Primitive *primitive) { int parentRow = d->rowTypeMap.key(primitive->type()); if(parentRow < d->size.size()) { emit layoutAboutToBeChanged(); // we need to tell the view that the data is going to change int last = d->size[parentRow]++; beginInsertRows(createIndex(parentRow, 0, 0), last, last); if(d->molecule) d->moleculeCache[parentRow].append(primitive); endInsertRows(); emit layoutChanged(); // we need to tell the view to refresh } } void PrimitiveItemModel::updatePrimitive(Primitive *primitive) { int parentRow = d->rowTypeMap.key(primitive->type()); if(parentRow < d->size.size()) { int row = primitiveIndex(primitive); emit dataChanged(createIndex(row, 0, primitive), createIndex(row, 0, primitive)); } } void PrimitiveItemModel::removePrimitive(Primitive *primitive) { int parentRow = d->rowTypeMap.key(primitive->type()); if(parentRow < d->size.size()) { int row = primitiveIndex(primitive); //assert(row > -1); if (row < 0) return; emit layoutAboutToBeChanged(); // we need to tell the view that the data is going to change beginRemoveRows(createIndex(parentRow, 0, 0), row, row); if(d->molecule) d->moleculeCache[parentRow].remove(row); d->size[parentRow]--; endRemoveRows(); emit layoutChanged(); // we need to tell the view to refresh } } int PrimitiveItemModel::primitiveIndex(Primitive *primitive) { if(d->molecule) { int parentRow = d->rowTypeMap.key(primitive->type()); return d->moleculeCache[parentRow].indexOf(primitive); } else if (d->engine) { switch(primitive->type()) { case Primitive::AtomType: return d->engine->atoms().indexOf(static_cast(primitive)); case Primitive::BondType: return d->engine->bonds().indexOf(static_cast(primitive)); case Primitive::ResidueType: return d->engine->primitives().subList(Primitive::ResidueType).indexOf(static_cast(primitive)); default: return -1; } } return -1; } void PrimitiveItemModel::engineChanged() { foreach(int row, d->rowTypeMap.keys()) { Primitive::Type type = d->rowTypeMap[row]; int newSize = 0; switch(type) { case Primitive::AtomType: newSize = d->engine->atoms().size(); break; case Primitive::BondType: newSize = d->engine->bonds().size(); break; case Primitive::ResidueType: newSize = d->engine->primitives().subList(Primitive::ResidueType).size(); break; default: newSize = 0; } int oldSize = d->size.at(row); if(newSize < oldSize) { d->size[row] = newSize; emit layoutAboutToBeChanged(); // we need to tell the view that the data is going to change beginRemoveRows(createIndex(row,0,0), newSize, oldSize-1); // this is a minor hack to simplify things although it doesn't currently update the view endRemoveRows(); emit layoutChanged(); } else if(newSize > oldSize) { d->size[row] = newSize; emit layoutAboutToBeChanged(); // we need to tell the view that the data is going to change beginInsertRows(createIndex(row,0,0), oldSize, newSize-1); endInsertRows(); emit layoutChanged(); // we need to tell the view that the data is going to change } } } QModelIndex PrimitiveItemModel::parent(const QModelIndex & index) const { if(!index.isValid()) return QModelIndex(); Primitive *primitive = static_cast(index.internalPointer()); if(primitive) { int row = d->rowTypeMap.key(primitive->type()); return createIndex(row, 0, 0); } return QModelIndex(); } int PrimitiveItemModel::rowCount(const QModelIndex & parent) const { if(!parent.isValid()) return d->rowTypeMap.size(); Primitive *primitive = static_cast(parent.internalPointer()); if(!primitive) return d->size[parent.row()]; return 0; } int PrimitiveItemModel::columnCount(const QModelIndex &) const { return 1; } QVariant PrimitiveItemModel::data(const QModelIndex & index, int role) const { if(!index.isValid() || index.column() != 0) return QVariant(); Primitive *primitive = static_cast(index.internalPointer()); if(primitive) { if(role == Qt::DisplayRole) { Primitive::Type type = primitive->type(); QString str; if(type == Primitive::MoleculeType) { str = tr("Molecule"); } else if(type == Primitive::AtomType) { Atom *atom = static_cast(primitive); str = QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) + ' ' + QString::number(atom->index()+1); } else if(type == Primitive::BondType){ Bond *bond = static_cast(primitive); str = QString::number(bond->index()+1) + " (" + QString::number(bond->beginAtom()->index()+1) + "->" + QString::number(bond->endAtom()->index()+1) + ')'; } // end bond else if(type == Primitive::ResidueType) { Residue *residue = static_cast(primitive); str = residue->name() + ' ' + residue->number(); } return str; } else if ( role == PrimitiveItemModel::PrimitiveRole ) { return qVariantFromValue(primitive); } } if(role == Qt::DisplayRole && index.row() < d->rowTypeMap.size()) { Primitive::Type type = d->rowTypeMap[index.row()]; if(type == Primitive::AtomType) return tr("Atoms"); else if (type == Primitive::BondType) return tr("Bonds"); else if (type == Primitive::ResidueType) return tr("Residues"); } return QVariant(); } Qt::ItemFlags PrimitiveItemModel::flags ( const QModelIndex & index ) const { if(!index.isValid()) return 0; Primitive *primitive = static_cast(index.internalPointer()); if(primitive) return Qt::ItemIsSelectable | Qt::ItemIsEnabled; return Qt::ItemIsEnabled; } QModelIndex PrimitiveItemModel::index (int row, int column, const QModelIndex & parent ) const { if(!parent.isValid()) return createIndex(row, column); Primitive *primitive = static_cast(parent.internalPointer()); if(primitive) return QModelIndex(); if(d->engine) { // Figure out the type and return the correct element switch (d->rowTypeMap[parent.row()]) { case Primitive::AtomType: if (row < d->engine->atoms().size()) return createIndex(row, column, d->engine->atoms().at(row)); case Primitive::BondType: if (row < d->engine->bonds().size()) return createIndex(row, column, d->engine->bonds().at(row)); case Primitive::ResidueType: if (row < d->engine->primitives().subList(Primitive::ResidueType).size()) return createIndex(row, column, d->engine->primitives().subList(Primitive::ResidueType).at(row)); default: return QModelIndex(); } } else if (d->molecule) { switch (d->rowTypeMap[parent.row()]) { case Primitive::AtomType: if (row < d->molecule->atoms().size()) return createIndex(row, column, d->engine->atoms().at(row)); case Primitive::BondType: if (row < d->molecule->bonds().size()) return createIndex(row, column, d->engine->bonds().at(row)); case Primitive::ResidueType: if (row < d->molecule->residues().size()) return createIndex(row, column, d->molecule->residues().at(row)); default: return QModelIndex(); } } return QModelIndex(); } } // end namespace Avogadro #include "primitiveitemmodel.moc" avogadro-1.1.1/avogadro/src/editcommands.cpp0000644000175000001440000001253112250371054020272 0ustar marcususers/********************************************************************** EditCommands - Commands for undo/redo support for cut, copy, paste, etc. Copyright (C) 2007 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "editcommands.h" #include #include #include #include using namespace OpenBabel; namespace Avogadro { CutCommand::CutCommand(Molecule *molecule, QMimeData *copyData, PrimitiveList selectedList) : m_molecule(molecule), m_copiedData(copyData), m_selectedList(selectedList) { m_originalMolecule = *molecule; if (selectedList.size() == 0) setText(QObject::tr("Cut Molecule")); else setText(QObject::tr("Cut Atoms")); } void CutCommand::redo() { QApplication::clipboard()->setMimeData(m_copiedData, QClipboard::Clipboard); // For X11 middle click if (QApplication::clipboard()->supportsSelection()) { QApplication::clipboard()->setMimeData(m_copiedData, QClipboard::Selection); } if (m_selectedList.size() == 0) { m_molecule->clear(); } else { // Make sure any selection is an atom // FIXME: Do we need to do bonds or other primitives? foreach(unsigned long atomid, m_selectedList.subList(Primitive::AtomType)) { Atom *atom = m_molecule->atomById(atomid); if(atom) { m_molecule->removeAtom(atom); } } foreach(unsigned long bondid, m_selectedList.subList(Primitive::BondType)) { Bond *bond = m_molecule->bondById(bondid); if(bond) { m_molecule->removeBond(bond); } } foreach(unsigned long residueid, m_selectedList.subList(Primitive::ResidueType)) { Residue *residue = m_molecule->residueById(residueid); if(residue) { m_molecule->removeResidue(residue); } } } m_molecule->update(); } void CutCommand::undo() { // restore the molecule *m_molecule = m_originalMolecule; m_molecule->update(); } PasteCommand::PasteCommand(Molecule *molecule, Molecule pastedMolecule, GLWidget *widget) : m_molecule(molecule), m_pastedMolecule(pastedMolecule), m_originalMolecule(*molecule), m_widget(widget) { setText(QObject::tr("Paste")); } void PasteCommand::redo() { m_widget->clearSelected(); // save the current number of atoms -- we'll select all new ones unsigned int currentNumAtoms = m_molecule->numAtoms() - 1; *m_molecule += m_pastedMolecule; QList newSelection; QList atoms = m_widget->molecule()->atoms(); foreach (Atom *atom, atoms) { if (atom->index() > currentNumAtoms) newSelection.append(const_cast(atom)); } m_widget->setSelected(newSelection, true); m_molecule->update(); } void PasteCommand::undo() { // We can't easily save the previous selection, but it would be nice m_widget->clearSelected(); *m_molecule = m_originalMolecule; m_molecule->update(); } ClearCommand::ClearCommand(Molecule *molecule, PrimitiveList selectedList): m_molecule(molecule), m_selectedList(selectedList), m_originalMolecule(*molecule) { if (selectedList.size() == 0) setText(QObject::tr("Clear Molecule")); else setText(QObject::tr("Clear Atoms")); } void ClearCommand::redo() { if (m_selectedList.size() == 0) { m_molecule->clear(); } else { // Make sure any selection is an atom // FIXME: Do we need to do bonds or other primitives? foreach(unsigned long atomid, m_selectedList.subList(Primitive::AtomType)) { Atom *atom = m_molecule->atomById(atomid); if(atom) { m_molecule->removeAtom(atom); } } foreach(unsigned long bondid, m_selectedList.subList(Primitive::BondType)) { Bond *bond = m_molecule->bondById(bondid); if(bond) { m_molecule->removeBond(bond); } } foreach(unsigned long residueid, m_selectedList.subList(Primitive::ResidueType)) { Residue *residue = m_molecule->residueById(residueid); if(residue) { m_molecule->removeResidue(residue); } } } m_molecule->update(); } void ClearCommand::undo() { // we should restore the selectedPrimitives when we undo *m_molecule = m_originalMolecule; m_molecule->update(); } } // end namespace Avogadro avogadro-1.1.1/avogadro/src/projecttreeitem.h0000644000175000001440000000705712250371054020504 0ustar marcususers/********************************************************************** ProjectTreeItem - Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PROJECTTREEITEM_H #define PROJECTTREEITEM_H #include #include #include class QTreeView; namespace Avogadro { class ProjectTreeItem { friend class ProjectTreeModel; public: explicit ProjectTreeItem(const QVector &data, ProjectTreeItem *parent = 0); ~ProjectTreeItem(); /** * @return Child @p number. */ ProjectTreeItem *child(int number); /** * @return The number of children. */ int childCount() const; /** * @return The number of columns. (Set to data.size in constructor) */ int columnCount() const; /** * @return The data for @p column. */ QVariant data(int column) const; /** * @return The parent for this item. */ ProjectTreeItem *parent(); /** * @return The row number for this item with it's parent. */ int childNumber() const; /** * Set the data for @p column. */ bool setData(int column, const QVariant &value); /** * @return The primitives for this item. */ PrimitiveList primitives() const; /** * Set the primitives for this item. */ void setPrimitives(const PrimitiveList& primitives); /** * @return true if this item is terminal and will never have * children. This is used in ProjectTreeModel::hasChildren(...) * to handle the dynamic model initializatyion. */ bool isTerminal() const; /** * Set the terminal flag for this item. (Default, set by constructor, is true) */ void setTerminal(bool terminal); protected: /** * Insert @p count children starting at @p position. All items * have @p columns columns. */ bool insertChildren(int position, int count, int columns); /** * Insert columns... (not used at the moment) */ bool insertColumns(int position, int columns); /** * Remove @p count columns starting at @p position. */ bool removeChildren(int position, int count); /** * Remove columns... (not used at the moment) */ bool removeColumns(int position, int columns); private: QList m_childItems; QVector m_itemData; PrimitiveList m_primitives; ProjectTreeItem *m_parentItem; bool m_terminal; }; } // end namespace Avogadro #endif avogadro-1.1.1/avogadro/src/updatedialog.cpp0000644000175000001440000000442712250371054020272 0ustar marcususers/********************************************************************** UpdateDialog - Dialog to display available Avogadro updates Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "updatedialog.h" #include #include #include #include namespace Avogadro { UpdateDialog::UpdateDialog(QWidget *parent, const QString &updateText) : QDialog(parent) { this->setWindowTitle(tr("Updated Version of Avogadro Available", "Indicates an updated Avogadro version is available")); QLabel *mainText = new QLabel(this); QPushButton *okButton = new QPushButton(tr("OK"), this); // The main label displaying update information mainText->setWordWrap(true); // Want to have links opened if they are in the release notes mainText->setOpenExternalLinks(true); // Set the supplied text mainText->setText(updateText); okButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); okButton->setDefault(true); connect(okButton, SIGNAL(clicked()), this, SLOT(reject())); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(mainText); QHBoxLayout *okLayout = new QHBoxLayout(); okLayout->addStretch(); okLayout->addWidget(okButton); layout->addLayout(okLayout); } UpdateDialog::~UpdateDialog() { } } #include "updatedialog.moc" avogadro-1.1.1/avogadro/src/avogadro.qrc0000644000175000001440000000366712250371054017442 0ustar marcususers icons/application-exit.png icons/arrow-down.png icons/arrow-left.png icons/arrow-right.png icons/arrow-up.png icons/avogadro.png icons/configure.png icons/document-close.png icons/document-export.png icons/document-import.png icons/document-new.png icons/document-open.png icons/document-open-recent.png icons/document-open-remote.png icons/document-print.png icons/document-revert.png icons/document-save-as.png icons/document-save.png icons/edit-add.png icons/edit-add-child.png icons/edit-clear.png icons/edit-copy.png icons/edit-cut.png icons/edit-paste.png icons/edit-redo.png icons/edit-remove.png icons/edit-select-all.png icons/edit-undo.png icons/fill-color.png icons/help.png icons/navigate.png icons/navigateN.png icons/preferences-plugin.png icons/rebuild.png icons/selecttable.png icons/tab-close.png icons/tab-detach.png icons/tab-duplicate.png icons/tab-new.png icons/tool.png icons/tools-report-bug.png icons/view-fullscreen.png icons/view-list-tree.png icons/view-restore.png avogadro-1.1.1/avogadro/src/pluginsettings.cpp0000644000175000001440000000531612250371054020705 0ustar marcususers/********************************************************************** PluginSettings - Settings for Plugin Manager Copyright (C) 2008,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "pluginsettings.h" #include "pluginitemmodel.h" #include "pluginlistview.h" #include #include #include namespace Avogadro { PluginSettings::PluginSettings( QWidget *parent, Qt::WindowFlags f ) : QWidget( parent, f ) { ui.setupUi(this); PluginItemModel *model = new PluginItemModel(Plugin::EngineType); ui.listView->setModel(model); connect(ui.listView, SIGNAL(selectionChanged(PluginItem*)), this, SLOT(selectPlugin(PluginItem*))); connect(ui.comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(selectPluginType(int))); } PluginSettings::~PluginSettings() { } void PluginSettings::selectPlugin( PluginItem *plugin ) { QString text; text = tr("Name: ") + plugin->name() + '\n'; text += tr("Identifier: ") + plugin->identifier() + '\n'; text += tr("File: ") + plugin->fileName() + "\n\n"; text += tr("Description:\n") + plugin->description() + '\n'; ui.textEdit->setText(text); } void PluginSettings::selectPluginType( int index ) { if (ui.listView->model()) delete ui.listView->model(); PluginItemModel *model = new PluginItemModel((Plugin::Type)index); ui.listView->setModel(model); ui.textEdit->setText(""); } void PluginSettings::loadValues() { PluginItemModel *model = qobject_cast(ui.listView->model()); if (model) delete model; model = new PluginItemModel((Plugin::Type) ui.comboBox->currentIndex()); ui.listView->setModel(model); ui.textEdit->setText(""); } void PluginSettings::saveValues() { PluginItemModel *model = qobject_cast(ui.listView->model()); if (!model) return; if (!model->changed()) return; emit reloadPlugins(); } } #include "pluginsettings.moc" avogadro-1.1.1/avogadro/src/aboutdialog.cpp0000644000175000001440000000656612250371054020130 0ustar marcususers/********************************************************************** Copyright (C) 2007 Carsten Niehaus This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "aboutdialog.h" #include "config.h" // krazy:exclude=includes #include #include #include #include #include #include #include #include #include #include #include namespace Avogadro { AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent #ifdef Q_WS_MAC , Qt::Tool #endif ) { QGridLayout *layout = new QGridLayout(this); QLabel *label = new QLabel(this); QLabel *lbl = new QLabel(this); QPushButton *cmd = new QPushButton(tr("OK"), this); QPixmap logo = QPixmap(":/icons/avogadro.png"); label->setPixmap(logo.scaled(256, 256, Qt::KeepAspectRatio, Qt::SmoothTransformation)); lbl->setWordWrap(true); lbl->setOpenExternalLinks(true); // Build up the SCM revision numbers if present QString scmVersion(SCM_REVISION); QString appVersion(VERSION); QLatin1String obVersion(BABEL_VERSION); QLatin1String qtVersion(QT_VERSION_STR); if (scmVersion.length()) appVersion += ' ' + QString(tr("(Git revision: %1)", "%1 is the Git revision number.")).arg(scmVersion); QString libVersion(Library::version()); if (Library::scmRevision().length()) libVersion += ' ' + QString(tr("(Git revision: %1)", "%1 is the Git revision number.")).arg(Library::scmRevision()); lbl->setText( tr("

%1

" "

Application Version: %2" "

Library Version: %3" "

Open Babel Version: %4").arg(tr("Avogadro")).arg(appVersion).arg(libVersion).arg(obVersion) + tr("

Qt Version: %1" "

For more information check the Avogadro homepage." "

The program is provided AS IS with NO WARRANTY OF ANY KIND," " INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A" " PARTICULAR PURPOSE.
" ).arg(qtVersion)); cmd->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); cmd->setDefault(true); connect(cmd, SIGNAL(clicked()), this, SLOT(reject())); layout->addWidget(label, 0, 0, 1, 1); layout->addWidget(lbl, 0, 1, 4, 4); layout->addWidget(cmd, 4, 2, 1, 1); } AboutDialog::~AboutDialog() { } } #include "aboutdialog.moc" avogadro-1.1.1/avogadro/src/icons/0000755000175000001440000000000012250371054016230 5ustar marcususersavogadro-1.1.1/avogadro/src/icons/tab-detach.png0000644000175000001440000000063612250371054020737 0ustar marcususersPNG  IHDR ssBITUF pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڥMjP 7WѽdiGb:8vk4?OB/6+ G'y=RR^i:G_ .Nv7b -@6d\eWsت"^ 5p#?ʎ2PR*5PMj@#>@pH}3 L8siIENDB`avogadro-1.1.1/avogadro/src/icons/avogadro.svg0000644000175000001440000006716312250371054020570 0ustar marcususers image/svg+xml Oxygen team avogadro-1.1.1/avogadro/src/icons/edit-paste.png0000644000175000001440000000165112250371054021000 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<&IDATxڥWKkQ>Լ@ Zlt}@ܺP(kXJj hCBnٝuҮ-Xɫ;9w8vr/\Ν{ι37eYi6 c/8Jarrrhn:t@0\y`ii7r{-L XXXDt5pyt:ijߪ2̻!F|>P C8a{~\|ݎvvvkLL˯l6 `'g>66vMLB"}jM*vm~ j#/۵1BZ? b1hZZ4VQ\Vyw"uS ζjU\.?#U4{gzAe3X*X,0 j I߅ 8s+u&Dkp O' 8 px gY'rc!ȵ )):oyqYť6!&1d3Rt1}I.BLu?єi؀9l;R,Rhbgc }\q.2:t2߇p( WH&ZY^Nu3 Z=>;pp`‹gVⰺ!Nm6n6o;VzPt?%\{ fc o߃ϟPwEMtݥS r+ݤnGdjD,/K@ݱVo?Ew[p;QBR$N^2E,-K J%ׅIENDB`avogadro-1.1.1/avogadro/src/icons/configure.png0000644000175000001440000000131512250371054020717 0ustar marcususersPNG  IHDRasRGBbKGD pHYs^tIME7WMIDATxڍ]HqƏFldEGaBY]Uaز.jЖԄH؇5c.f`F_LPY cn6vkms<AL$b++H>>h1B>ԍC edydNkuRYM +_?Q2|NamʶAnXp8 T ܝL&X0t)<@*c(B!pUU~7%k9h[Ys/ۢ_y3ss's-D>`? W70ذ>tW)mVuFIXOA`Lhtpp[{k1s߇\.d=^k8MY_gr7@4x3$Wȑw‹8R`^N[REDly#O8ChWXSM᠖bL mu߂t:-"IΨ1HĚAD[|5tjdP*멁=SSq.`Xs(=&6Wwq`,.hxٗ_m_ BNIENDB`avogadro-1.1.1/avogadro/src/icons/fill-color.png0000644000175000001440000000502212250371054020777 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org< IDATX{pT?>lv]I%`xZSGb?Ӊejcj{*uZSgENRA(U@XMv}ݻ{=#4ޙߜsϽRJ>#V>pԷb` P9,{*K% V.~"pgv鯼/T톺Aòz>tO-ϖ:Ϋ35_> u'Yw`ŀяV!zhB  L̹+'&D)2BMS b1KEVoW>~WGܣiD;YXg@aLsRM#o\9+C8r\.G>gttT*EXT*xbOQX_>mZ|ls3YF48ݎ/D--mq#]Ji(TssS nIc|4!S-[a-HPq]q<p]χyJGGH _}m3fpݽ?Zt]q]ZFZqI8!V"]]30ıkI@npzGg߯1yJUVXEXIJ,,¶m*z}#ҥKQUMӈ' W蓈gTg9|* EX$wwy墯RRfk"FiHSq]-BuE<({sǾ;w/ P )%W|7!a!apOʧo]QU)>Nj?q{[ǁiW@ϔK<7EhVr8 Y{,[EQR8!*C_w+ߚ{8z쒶.;r43tBU2X* +Xe2:aZ[ڌY 0G_wY_78.2cj'|*E@Sq‚ė,as'?ISS:NfG ZR|-'iS~ej`:1 @vmW;}rɢEGA·EWގi!4팍;HF[ТqT-0eM\9xKMK>;+mӴq#֭###?p F -ZO1B1R\rdo7g`;Bm -xV+x{Ba0! St91!T#BEC:j|c\6lMVN&`k.V~zСW,a3*ni&ULS+ Xx6TD>5uۭ~Qe;"|qj\eF0nڴL&B>g i$ `N$Pze2LJy#k}"%@ƙuT߿%U"mA  9)(Q- R أxnz]y_;q mJR?4׶n]JI"PKJԬ4N5H<5D%x=V2{#ӿ]y\>)|'rL>P( #ɞF&C!Tfs5+MRYԽE9T,*RNL/=zGbصk YP܆4ΟWTpR!0b ۶bYV_1JRb2qƟOLLfr9(儎8{躉(P )vݥ`j8qԇp!*' @**?d2d2$ո+PT(iri1 ˆm۶Y6&J!.8 eؽ{k+mmmATUESwRUƪ8hs\OTȑ#mٲe}__t"gH)kǏߒNt:M:2 gd2}~ߦM4|%%,\%ýCC IB?h4V'W>ub6}|.Co qk֬U+L3 4ERz,JֻO?у_:'yXX,GJ9UTs7ܳ{;vA`+`?:Bb #^^ @HC tT#<ߏ2)IQ0 EǕm]=RG%+٣l=eb=da'^vqq3I!a<D4u+ܓ^M{HhAqE8 b1SIQ Բ]@ jՉ40 d{8I L}G_?e+2))̀E[pDS }߃2"`1ín`ESVF0$IENDB`avogadro-1.1.1/avogadro/src/icons/help.png0000644000175000001440000000322312250371054017666 0ustar marcususersPNG  IHDR szzgAMA7tEXtSoftwareAdobe ImageReadyqe<%IDATxb?@bDk81081 5 ybpAhxВx mn9} >r@ta@C@\@̡V bwC>D?~| 8 ~ApD7/V]g˗30Pp  @-%]]de?}bx$ßo7W_BC1 t>\A5 bg nd`g!ww3p3p @B n##Bd7@a8A. dKϞ w> ^\L8y-dxb #Ą%]"'IZg910=*YY ܠP0X('AgZ yypEo.^d0ӗNh830BիG0l7(D  !b@60} **f͛^i~@J< LoPo n ϝH ܀ r@X@`gaa`%lDZ۬ K0B>C#1znD   7(?>pZ+WbXё앢 R (t02hC  -Q8PB`G[ X  ,:YdC h93C8@xr>vZ f$>X |N$ *WPFH-P1f4!<߸Cq"ޘ6cd D5`,~-b`z>: abĂ2dM-|2  XD]S Z`i,J{`9B AA)Tn 5aKףJ 2h  0$ c` Ͼ~eUT>UUہ)Pܗ5HK! '=l^)a L'T(- akIv#<@am6JA`SWY[6B\ҵk v`3(Y^Q @8ˀ6˹u0jC"GUhG vLA&c lIK3Hsa!!H ?10sG`2"k6k= hBkVFD r2i;0C;E$vNqHIENDB`avogadro-1.1.1/avogadro/src/icons/arrow-up.png0000644000175000001440000000163712250371054020521 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxkU;wfvfi6 6!Ulc#QeAJ#VcSܴO m)AķB,IP HZ{#K(4Asv>9 si `~v78=Xjmp75%G߾,4^ .v2@?".rC Plvbd~~g`Bkp>*Pك]ݣ\>q$.Ɇw7'ыn *@IPqT~{n]),z k-5$KEP xe2·:RgݣXsZjGK@Ee~=K,~  $Cw-+U;nCGajc HB,`@4߳[詾.Sahl}P׸z>L`WDndIENDB`avogadro-1.1.1/avogadro/src/icons/arrow-right.png0000644000175000001440000000175612250371054021214 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<kIDATxkWǿdwݴb$ZJhaڤ kb_RPPTȫUЗ>KKT)&̽wn/wFtw>,|?s΁KZklg1_.C:Oģo\3T` W>}-;c,~XޤYP(GWiyԠ Mb46pb4"#1K@CX( d{@[%l7 <&ҽE`Sm&XZRaO>LYT 5Wd"pd.jb>흀KhS~[x*I148co-U7hݵ{ыpmBȄ9HnX( 0A l`VC?RpX@ Hh(8a:ڛƷt^ww.a_T @bC87v"6BFk13nen:@@Š"JhXlP)໵z>gpipV;T!K|uɣ'qW;`+ a }v:00!Xz⦾\GV](S,G6'/eu/T#HAvBbVP`;ԭzYS  aāVk:A B VX_k\ҷgT 𭀥(#x^R_T~T ^5R?WESR:<Fؒz}r6wTi?Zqz\ҋ|x3_OC}E__RS2s;˴!IENDB`avogadro-1.1.1/avogadro/src/icons/tab-close.png0000644000175000001440000000250512250371054020611 0ustar marcususersPNG  IHDR szz pHYs B(xtIME $bKGDIDATxmlE;{{m^i-J \HAB"C`JbbB( ~DV!ė I kZIzo{7{dnnwv?gf/᠑qƉ&L1!u`Mwv`D"ozhn־ !FCϟߝ-jvpLv\WD&C`0f-Z4ΧF^7 k+  bg E4 PJ d2IݫO\-F@ p$e)'F}P,dpUh<' Hpg88bii D*"Ԏ%πۇ[1YӍzzb~Vfw7<ͷ6#sl\լF( t윳Yn˄+" T\f*t[ApOVr5--mS' (a8Bd>VsO;Kdp`83lUR~kٷ!^ ^ ,! F 63t9 s>I9j``~X09F_[ZEkϜ(x=%sQUn9 #@h豩y֩(oLS0^NxX {w`^V:n7D #3L¥ߡd[ hQcU`ӔOM AE=VGz/YwLJ  g*473-kfڗͣ@tj:۠oqpjV_0zࡅc_H%@%J,sc1] |kuu.!zq3<˵yKgI}7~k i|- ֥LDuY1OC/m,]Q6 VaOofFZʂQXʝtQRxζTç̴B\;,IENDB`avogadro-1.1.1/avogadro/src/icons/edit-add-child.png0000644000175000001440000000745212250371054021502 0ustar marcususersPNG  IHDR D pHYs B(x OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FPLTE``` IR[$d$.v.777777?66A!j')t+ IV`"/}/7497TTTrrrSSSqqqTTTqqq FO[!d&-y.4486%n* ELWa"$k&,u,2196<886JOUZ!S_#d%"^"i'%n*)s,,y..m/~03w 336n6586D/GO9TTTU UVZC]]H^^^_abde.ffghhhjknn>n o pqrrru$uv"w%x'xy)yyz{ ~    U  A  ;GC=J@MNkQQUWb[^_bdgkouxx{؀ڌۄ܉݋H<0tRNS@f %{KPH ԄEI ^1&^pFziAB A8s}ygz.Zc>3=_QӍϼt̛g楩|_}nI*Mή]{cO1D)Z˨s,´%Ҕm$+$O3!Jq5>JE׹Z OSa0`Us~ʔ"6vsiʹɓyp:(`z>YF{ $i݈ٝ(A#\5 eyಌ3gtָS"~y#f ] z۰Sa8ZhjC-w.}=֚<=p1W7"50[qA"+q"6ElV@D:gwV+MF̖ӧ+?8T4l8o}v'M9aβ~Ωb~BGyK0<ı_7ŵ-͙$iQմVȞC-&ܱ~f,\U߿7^Y"s k`Z'7+$5ݍ:Z&i#|9$lOҚG~yt|  @5*\);%rR!,G@©}͟gb 8HswwYaBHA)/Yc)JJorwL*\9ÿ֛xo?Ʀ94$ЀE-0EP9Z^*GtpvNa+`Ӛ n#o1/"I!>5JQ)ۆPYZh  @7<-;(M 4dv.IiSt1 Q TT4Ъ1@C RLgbh\ӄi%SXRX|c *h&2mXeR֚럒> (nzcs:.N ('N2J)RhvtJbm)Y {8 c ad<:47ӂD)VbƳ{Yy;qw/gbB(Ek /L4AA@E,cdO1*s7p,Q𷾿u6G?f!y"8ld,ɮzF>%׬D NJӴv;7 _8͹mȳ !`sOCe =ѕsaX:'76 SJZ/ cMc:|i)y"`Amsi?ZF~AZ薇z:dW R VT|_MA`L X gpU$]%atpl<,΀"aA& oo2 o -`AYTRCsSO`?lSWݺZc\yB#!DAQCSTfuTPu ,d9X zR+8IOUzx ,4f"",56xWOD Z>o  3ԱQ6| 콐5p lB{|lYވIENDB`avogadro-1.1.1/avogadro/src/icons/navigateN.png0000644000175000001440000000217112250371054020653 0ustar marcususersPNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org< IDATX[hU治$ں+IC|FAi "D}"TBkBK%U*_H UiZcd4&%9>,A2lp`ߏÜs0ưx\oh>)|{"*&/!;lTh&t$f77*29 KB9JbcvN-;ɨi`f^K11 e'6aQv%.($^Un7Gbqe4Ns"8.钓=j~bz\I)I{V( `³u~SYkM]moo;{aJ=H~ ީ4˳]a}?-OnS5-j|p`StphA|RlqY'.)HG䞖dE*@?R@\ DA>,@vK`Q 8YS~\]Q$5@`. s[b#w}~a_Q9Idmdn&9==khƏ]0@80(g=v⑼ L耚fXY4JPFd`ifX57%X4u_[JL 2\#P@&@eiZ6kE}+Wh, 1d`.Ƞ[h@*H>.򩥯13܁DEx<%ޝM {d`er<\3Shjp|vn0g ܗ/2otmކ:T Q\@|CВúTAzF ̫/d҂wHRV)fO_$Ѹ9x:UTO'Gucc77cGbm&k}|m"Խ%`C8!zH[IENDB`avogadro-1.1.1/avogadro/src/icons/navigate.png0000644000175000001440000000267312250371054020544 0ustar marcususersPNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<MIDATXKl盹wf0~5q )"E*DInI#UhlMf.Mt$|1s_i-V>}ZSo\e@Goի_z}+"-?xCwn9=]']J|O2$کaliuh-^Ie[ IW2m? ܖ5̮P3*W%dE9g)C\pX_nk2+з Ggk0˾FBMsw˫&Ds/f\0~3-|>i(ihokn&(,˖ܐwo/WMNFn>% j1.~wG 9lӮKxoh2 Jy<ؙ914;ˀ9ƪ҆=`=<'\S2|s{۩><5nQ锅b]U<9p8 v ;ЖSBr\4V ¿Y([z#'_lݙVwGqHJx>a8 ! # ]ДJ%xhݫV nمB~Gzr/D8ڷAz{">d2h2 yUOEjZ7>~, XɁRZKӕZ4ɁG4㝻^*4*kw&`:Y,\.H'ӧU_>yV&.?0 o;˗k.=3t1#2,MwV3OK:1=ٯhw.|=O^~ >ScD|z>QMU}Aϝ\Z7I ςz5DZ#wIENDB`avogadro-1.1.1/avogadro/src/icons/edit-select-all.png0000644000175000001440000000237512250371054021715 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<zIDATxWKoU川8mBHhKXlزB,٤KT$ E) `*6U5 +Dòft:8͂o*̳@LF<Amt|i$rUsoop6JՄLT2ʺe@DSa ihQ %*@WfEȃx >3JTM M-[u yPH{B4_ xD(H~/#7{jXx+VJzE{-AHғpzJj)3! ` v=_,H44ḭ3vb:FhGNJ]1˲PP(X@~q~ V!8nn5pp0N+WMVuz*@١,Yq\wfEGWa8B~:sOϵ9w@B#Ld5"Zo GiqE4wW] n2tcp9}xIppީ|';Etm68Z)ۀ۴T?V:3^6?N _?I UadX'׬T_-~tp7kV47ㇳ+Ϧ )82s,{x[&4/RIENDB`avogadro-1.1.1/avogadro/src/icons/document-new.png0000644000175000001440000000260212250371054021343 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڽ[hTW=sIc TBH̓V)B<ߤD)"ڂK DQZO-ATm!7zb.9gfw8=Lp_kuFR_"z2*؍A &8)Cc$KnP@BzGc7(g]kmkËhhӃ5\8,~W2c1uB*%jd3Fn&q1eͬ[+zy[__'r44,<b8!}U65m1=6z TSҾmyF,B@AdUg onEns9˂ht &䙊⩎|e "6A³*`yXq$Ȓ@]~X @/?l&!c<C[FK ЭDa& IXO0R dxX Z)d2DQH#ߕ>Y^8$%`-Mjq i hむ07{AIØ& 8I,*xj`gcƘH ~?,gXdI7zQn.4r-u 3k_,3L(i%Nڭ@QcV^Y PaQ2S0h wG~.RkJee%՝lnn]R)? ~ugtTx ;ИnկJ7{&pc N 8Msv`rHm ›崶r!|`tl [PY&,Sȉ0( +*  |h6}n=2(a,(t:aO*i3$Vhu]M@$ɭ {UƗ;{%PYI*"fddҚ8Nٹo_LJ-ex 2WY ~:2S{7'm]Bw?>>?sޣgGzUX,4`pFpwE^ K d%;bCTr3?߷طyqgTM>:pv}qS˅|C9Y8 "n׀&g$jH+IENDB`avogadro-1.1.1/avogadro/src/icons/document-open-remote.png0000644000175000001440000000415412250371054023010 0ustar marcususersPNG  IHDR szz pHYs7\7\ǤbKGDIDATYe3sft)]BEE ȍ$c /L jDMHL = A,DQB%Z错g-8DhJq j>/e9vJw=߹)S?rVZÿ~<$Ŕ1|ᬮ>xɗe|lm/>x]?>>pH ݐmCUӂ콜co5<G|<†so¯];{Ͷ..ZhSt^ux߷{\+== e}I>Ya~?xB]&7 ZhQ=wH[m9o<;UHh(:\V(tCoPTGJrmӇn%r飵pT)Qd6o mQ#j&+eWV+;syV{g4izW\#(p݀ytf5f;Tudc-9:v^ՕJN[+)Y!Yff23rk-Ϲ1ܹ[{W_>Sʫ/(UH*ޫDHw? Daѫ4/gRo{HJLWcYN ZYZ휴an 8Vk߼~lr0߂p KeNxONԘZΤ+[0>1?^[Tֲ-C` OG? #"A!)<4 (3F0 |@l`fSb3M9I3D+te5-tÒ7+Sy55yr4߶՞h# "J2̿E?>}st҂NF[158–K$&Xd\ U (kDYF@CAi,̜\&%Gpޘb} (R5@SxĈ,-ueP, FĀ(@R)Zbzi'F?_Jy[Z]i(r+ojD; iQHGRe\>5ʞU#+B=q9"={ }lL[|AQU& *-~؀3t~e^5ɦ;8H}*hZ>fO0_0<1BC^؛Ll# ]@9M#d}@/)N4X96V&:gZlaeab1.!62|!"W_|-}e猩=*"DGc@yJ[`D0Z.kM@Ya$QZZFxUE bTYk*XC/{bbZ. eB O@P-FJiѠY 1fyluإna|,ġޣ^kP1d""U" ^9VfAsvVqYp! &Jc Rpj(v"뚱VvRAD?PTYcP-" "&('*q$vκs6b'l ^ N8SPH"CӉu6ފD$sbu 攳FzFB)P. qΝrucR$R ưB)cD8(RQ qYP5>ZeAhl]3ӌ""rFX 6mct:LclEK+␁KEz#m;t)@|[J</ /i_:>Cšr,NpIt]._Ͽq)ft8T]?sYUW_ M"zTXtSoftwarex+//.NN,H/J6XS\IENDB`avogadro-1.1.1/avogadro/src/icons/document-import.png0000644000175000001440000000233412250371054022066 0ustar marcususersPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTETYYW\ZX]]Z^_[``\a`~~~agfbgg~~~xxO;tRNS !"$%&')+,-13569<>BDFIJR2IDATxmkAًˆ i ENQH%R ; oHacq 6BSSbP0Grs/wpwv;|w]x]I33gOX03ȭ<+= &!!qz[r~J ?ErD$6~|%"α7 %I\7'pm=^a6Y{v K_@,B&e4]#$/*&'(aT$ t! bO(NL3˹#G PWUx4QA[]?90/u{;|uҢ~p/ ;шkS߬~/q:*J{ qw%tz[ڒƊ1B&kf@Œ7#~wD|.8WVx=JC U}qOjaNZ_&: hضaYB*pg"[V-WV=T=,Fn\dD{:ynĴH D5{/l\Y ӟ\}#2xJ!lMsVÝ瀹<_lZꄖJw qjϛնnb? u<|*%!Am8Cen[ )v9pU AM[nuAߢi|)"| M,L& jl`eanV3֟}d8ГCG oC(*,41@L*}=yvCס4E8Z2vj4ѳ-V0ztׂdʟ{/9ŵ#-+W % H% wp CV4%A]{CR2YǠt!)sa NS3 EU9{6 \BQF~At8k"E,x xzhp}Īarvk9`!A8ݎff],[p/ Y c >^˦ :WbfQ7nr-|0j#Ac*NS_`Cssu3ٌ_/R=%0X A5 ۍ8Q%] #0Xwt'm#.g"EqΈݎKfD"kK~<<_?C#GT)WfZ\ ^iCuQCtvE 4Q#N 4 nh Iӑs#"*Z2SWV؅Fy~޾S,ܫ#7[{^ΝDF`Ll9“ie!jyԢ $0tJ8h)L;Cn㘦$ʹmjQAo>L41S?ڰr%=*ϻ# 9õZDO*|BF?ȓKќBFJ̀tf0&Ɔ{`A]VRY^ql4@ss37v=7g%EqN YNeV'oʃ@ӥ,M T'z_J?7@Nur\Q EMMXF9nmj$k3` %2%5*Ld:PU=Ɍ] 145cK48lHl;&M %]Uu:xq_1;IENDB`avogadro-1.1.1/avogadro/src/icons/document-print.png0000644000175000001440000000234712250371054021714 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<dIDATxWOW]{B@D $J#9 P/9p)K#9RJ%˯Rb|OoeeDz#},}͛7lxGfƗԂl"ZkET &1u#Z}Rk]㔚Z &&46]fճU/Ϟ}m:qr9/R>v{{B#Jm77&eY0B& ڥrUSېD"lpkWs9mEEy%vt @4Vx/G$\XXb,V֦A+H[:mcK"w;Y]]E4;;;7pW]:??gQFŹ$")8mll$tw5"(a0خ8z[ '131QSSS4?? E7W^ر(˔Jz5}\ىؕdv* t1LPMW\N-H;6O1á/~pW_]]{AhP ϩnFUqYb (gQ5ϊxJP>=;w:վ@܈[Շ S{{+ڱd> m֓"nCOc״/g1OhUPOF癹Vn*%UY/~m*E;8t;j~o,t87H&S477g|ݧQ`e֎o )%zyQÐiېs~)_ٞ#E8e_ X76¼{7[OYW~:IN.Ӭ  0?6]_f*0Rt*0Bt}&y@^l v^|mbjo=}|EsD>˵[:P03=}" KA[ѼV M?8LsͅeJsعJYo˔Uжeoǩ6 .X>/bDtGb+\p/|̋ |oD◫=wvuz)V2t#/0?߹N]CAmS&<`i>hg7bC^={M>?Wn%@k[7HhOyo\W" ֝ 42\ABߕSKGYfarB2v5O]#M>Shw\fs`xh`OKDc+7imFYΗ޼} ZP? Tk;q$H,S Ձ퍍h8;*,Ks(Kzg*2dMa<3H$OL8S"Gݡ."S9lQP31J@lw9}vn1ZhHe5 I@7.c.IENDB`avogadro-1.1.1/avogadro/src/icons/arrow-down.png0000644000175000001440000000175612250371054021046 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<kIDATxkUƟs&iS )ExOHۛ"6BlIAŏ@Y&M;33g9z2g[fIp 4Y9\w4Kaڑ:dQ*9ط#QFً2Oe^8+q(getzʕ+^0c,g'MC~jS3o=<@UЅ]p^ yp=\s@E\>4MnǃE'&"t& C?zHS1HZ x~BMA~:fBJ磗F* sF+F'Y" :fζ5;6rEeh/%TdJtPVUp=C1yM[+6&;/F,c9p=Jx_(!0oеg`m(5|F*x B fHdp Y,]15NEJ^&2!snC4LGcyV1%Ux %Q:i?{:[&"xWaď)|(x@3m~awA]ňქ;c=\ϨccCYQDtgIENDB`avogadro-1.1.1/avogadro/src/icons/edit-undo.png0000644000175000001440000000374412250371054020636 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<aIDATxŗklb0&HEM|HVQ6<6`5k5;3wea>'ts 13n "?dl-wztvb]H{~yp_mycÆY]~LyqφpG;Um0H=X2 ;o! ЁBP|Uʫ^ŌwFX+ؽrwA۫$hj^;a `3Bŋ|kX~w٦Wf pť=G"3OXw~u-F5 ! ;}гwb8~h]1=o}xؙۛY5S8uoR ;W`17 a4F` 3LtSc/:5@ THMmы3,d9 ,D{`΁۵6I3[~zі_]zf yU CD)`|sA׫@AF6KAg9kA fQx.ύ۾Pf %%TD%*#?Xo81b|)Z+Pƻ I> ?;6Z.!ݗn>r^ 2 C$1|+Zџ8o-l;vBW0u g:F=f-5ŽK,kxݗt#ZAN^13D F]hkC0ؘF-0!zEwUh׭Ot7?r07눈=s_ȀC@`*ÁUuV/ OQz8m-(ŰU(](ESDg2f%Pۣ1B+RI@*ejBJz;s%y/'`"pIu'-ݚ7 q. ꚬ8&-  E C6eVW3~i*_-2?N `i-tA(I!E̵y?j30L;3%M`4ZBIBlFH,ay&>M62I+ 191$G'cy85Zsa~`jwViN0^Ӝ"NlU"x¯<ͯ-rp̨D̎%H+zkiIg[yD濒r*A9rIENDB`avogadro-1.1.1/avogadro/src/icons/avogadro-icon.png0000644000175000001440000006352112250371054021475 0ustar marcususersPNG  IHDR00W7zTXtRaw profile type exifxڝir9Fs.A 17CIv-Y2IېJ/>Dm{C̺ekUs.PGHÿHv>rro,_oq!+~^`c}&ٽ[o[|Z}6ы8tn{_/H"-Ej :_?SsM@=ϯ|AK:]mۉO;l?+s9ʧ8a,*"U^ϓa]R?k=ñѬzlUk6Zmj6Xg)%};?;ep[8.Vxɿ~,%X`|%it"i4^wẽ .|5`>MoB|/D[kb1 {VB! Z,6zYd:5n[pj*j:鄶ތ̶h6Uj:t hd$زZ7ahC>l1ǚu6Fg6ǜs-͋Jes|=gtrkwyJ.|LX{ן[?VϿѵݵT~vf?.QB5EXB-Zk,"Rsѳ<+"5zsKtѻ?:˾տ۹o'}ݰ >^wVsyZIo<^S-~滚Cע{s[qoP9ctKۻ%}xkNێM:Kk^pdyߖci՝Cdr_{F2e4]񺯾stWZKe d6_ssugӖϵ|Z,HqcL'fmn` 4**WƉ/.xÊb9u,gR.,nBf`s$upv~hUw:M=E;-n/rD])zT9OK@c:}`P)Ӽ˭]EB[6i -292~v}munf7K{+T@}>ﺷ-0yB23 !8eZD`Dz݇),L Զ t Kg' o=T=iW K It&]\[Z! zW vE==lq4tXP*=$ZZ1AR[t|mA`&%W#PNp%`(l"AhF4v[ѻ6c]es9vx2Yԛ6\r%a4ճ5Yo0rp(d#,W5}CnxLpx'Q-/7s#gv+"]uQaHJ[Y^V: 2EѺPђu{`AVπD?ݲXA }}WzgmFU'cz6L> `w|T8Pq\A2aHx2Nв`e9>'3hՌ)3" (x@saYFGzYP%f= tmjuz rs)ʡ0~9J-5 h J%cgh -'I׻mZ>a7܄Zkݣ:{ώy!4*,= 91{bm[`\퇂>#Xd2ܘjY þPM9nbox:1  S8&p .tG/8F(=h˷33'v.aEq&ZFktshPa"L5\e}EypPAZ2`!H\x=aULe_CxC`0U].I[0ޮZ>r(`AD!m( p Ev$pf7+Ġ+ K'[H.?(wZ#蹦5Qh4x#4bB3x؄+ʜ!T{ ;L?\{K MQ"E5N%O%:1#@/I=V: XT&Ã=0qIvFL#L nֿDRD<ߟ< &LLkP\- v@VB QxM `ɉa9+܌$]LD3S^ ;d'047AiMT5LT>kdMx= ggbjMX$%Xpyq42Bq(w)W^ -=;&Gf8 T4#8@h{IM( i̓6m()<^.VPx/De"ӌɰԛRBqgj$1&`Џ٘"8~LG,G/"@e]/0Τ0Ij%1̺0e4Ęy I N;BH %1p#Rڄ# 7ƈČ 7b,ʂ&z]pTG*@JteԆ rfZ<^| W6^K$Lo`( $q%жamhK-•x` FLV!5YAK ѕT# & zN+"ٔdpƌc &o&r?4U9S#qW_+j%DfgDD gGfZ܃(h#isx54ɏӘBؘj%w> _B[f<$bV؟#)ϒKO!rѸ:1a&Qr"y@[8BX?=@agpO"!xXS KX ѬG*>h2*3 ik@H@>xj`0`8,E!&e}|XxnM"CQ*˘q?:,-a, eV!qHU3c+jǝ1J 3]ǗawܵZy~iLHET(;zTXtRaw profile type iptcxڭ, D|? 9Aw^Çz3yo}ou5 BT;2sm%笣 :(#Kr=R\CӽޓS%Fks.g s0+TZ3vRVr+S*߽)Znے4iV)U6G?b)߾md(̬ F\U8}~ɑ[j0P+LH\OɕE^'\,^Yh-@ػLȣH/dUK!|WI:kem"pf}{-V@t@cFj&Z]z뽏}vkc@ Q6:Tu2sLs\ɪ56LmZlXy57xէ }v}{n+E =Fh̰Xtg=Y];y?P{9'V~C ҇Ycq[%"3A\>,Շ\zeTED8Qb N?7r?ᖨg҃\zqj~uW/Y(;**93F)M`/wǍG[I-$@_ 9ga%8> _0ëaΘeguGEw{*{Yss+Gz;z7NSռã}A2=v^Nfe0μi58]F$.~tScBҧ;Pu ^WCsu8{H'-׻+;5Yʍr-ͼ~ȼ3N);=6S>N6|ћc= m)`"Ӆc)g+$dҵ+v(5mRBI%G1wSȍ|v eZD;{arP`FsZl`ȓY yJ"O>1Ȭs-ih K硢1% lsݬvz%pSȃ6잣>0gYB9hS7cjV .",n$ۈ텺cdޛ@m9}-*N, QAe eutn:_dTD@۴R橃2\DQ;v>PNVdH O(~6cX#z%8rԳ(~΋zq i2_Ci>#鏠o9:G@M(vc~+GNKV^!S??,"kc4V^:K#nKwIVpn 2QAgҁ|NRϯuѯZXs~>U6GM8RN ÚR{iSghͲ`BAX;*$שBEɬc͉-Sos_ #dGomھS1c`zՍx5N @`ރŶDzJeܧ&0LI6"ɍ}9WX ‘g6ϝ(_;`JZo'@1%!gDjÐL-ppTDNecz g5޲,"tUpipBYf;p/_ʄS<>h6V[:~i GxF{1Z%8I&[ÕY^m'<^8h['''5]~ m zT_.cC?:*8u=G߲ *\`Q^MxPBW4VXL)R<IyM[̙ U*7~Rmd^jth8U>s>J5+nUjjjs[Ni4QF QF  6sy27˒he E%X0sW?r#S@jn FT`}ʛU/p;j( ((((((1EPEP$>@!"  !23(OS.mr*n!f W 0 )`( 9JPRSQ Paz c8-7@ei2Bsx JRn!!!~vsrjM0xK ) (J%NyH]@D 36&(    "# .15D;Z9x  J0w Mkrrsvz b8.3;\`/=joE Mi Y1_7 !),;h!$/> = 43\[ _ : 1&+>@#-OR6 @ Yy U$B! "C#  *z  $@S ~jU?9 !35'2 Ie~ Q~&  re # Kz f PJ+D/B "_e,?Tfszi zH4CUjK׃.K00A*E9R]U8m2v3ޏʣq%D"p)Zvؔ.ya;tPaÆ9)WѣTZҀ57%K 5V{pEiS Ύ; Ż:e/|·@fhGqQ*A^pHNAf\5L`U^QJ`x=O􅙺*x*^,[`Z\,*}46HE}= ໞzK t7npXTu; WNelZ#B/̩һ|sLrICha'w)l#ß@7;(v_vT-»{Ge\:pDTWũq8[O`U nO΄-+[39-cTXJt'gZ}p8=$]yLe6&NxL+ܭڧ4xR]&Vs#׉Z)NRFyc\Wddt4 p9d\xEKwdZ}P~_ߍ&6kA@c6s_#ڙOm)ވBܴ9$%:H_(:40Ϳ{s@ jdu 5T"O#FRȂX xZ{뭷}^u_tZ<=q>wK((z[M/W !Џ1ĺO( f1P 9JYYǘ( hNgR4D >;jyץ,e+xݳk\n]ߧA:8EX~ĊkRPް\.{@+(V*yV{_Z8gqZ|K:WK3dii8)$ȫ~2_I tr؝w\([+J7<V^9uڮ: L3Ai_oMo6&"l^浅l{>8L| }*`D xȺu릆ƍqbWX7ȹ\Bui1AK8¿HlCQ Mdq4hF^*nMh35EːϮxeh0lm4PGUfwW$?7(滣A;Ќ|Nef %U^=&SdiK5G|֜2CF"OO)@tMPYn|h]O,\z"nJ'pTד*-^7 ޝmL~L~drv eWQ@z'?_I#XtTRU$2DjJ".=}Y~mrV$q##GIS+xYYudžN,99x/*j9%?7~h}A܏>;Vh>,9H6U>h (:@+qXڄ ~$'^Z9I 1E6 P:C@.󸙐h E_ \ɷa@5vȫKA/r*gw۸N߹4-_#\`sMU JT}fV1h7/OOs nd3*?:VOJ'&Jrg䒝4WB r`Lćr̳oo#&K f7Q|a szXhARKVfS8g![6'u;힍2|Ϣ]& k;YCUJe>VMo[F 9s Y[̌xԩpj"CWP;!>ry .OF"~^`I{9@#hX V^BqL'9cC:0-kƪ+{\Jzk6 ]mC|+C0z_oJ ,7(L^J-Ld+z~,C7\ <(Kf5?.U>FM,K;jm_/ ?[=]&u+2cYjqzjqsZߗqrF)H7d)HޱQ&4Iy<'63ӿ^=jR! >jl1 ;:͔<}$(&Y6e =D?iJ$9^?h*F4Xm:ҾvZ[… [h9VHqjVv2@ nߴ5݉7_1m<, vvɒ%/)צ;ײdeYP_v=?c贡|]JCثϝ;w[X/Lѭò,ue"#%\&b#ph)s732ÇGBV#FќklJh%L.[C˷"?k֬iGyZjŗ;NaxH&KEC,y*2Ζ`0Pq!H2r||<!GEH Rff& FA]PIENDB`avogadro-1.1.1/avogadro/src/icons/tool.png0000644000175000001440000000414412250371054017716 0ustar marcususersPNG  IHDR szzgAMAܲIDATx{TƟ7o qQ: LMѣǞhON\le)(-NQk,A2pI yIB?Lb8n׮]Ǚ9{ڵkee2٤Ç2%"NS'NMM]RKHxxx&""㨯\.]tI/֭+uv@c>SQQ~2 p8̙3]aaa"o7Xb/JrX0UUUX8r/;V,5k\X,h/"@zFFF @SRQIII#x&¥޽+߶mOCBB^~E1˖-{W*n7aN'x<t:aQSSw+#*VcD2H$EqqhxOXaTww7GP<ޮX,q[l˲+ӧO_NKKރVx,X ͆v矫`@ԩRTqUnӣS:h4B!F#;rE"```ʕ+5M1bvDݻOIՒZ׫0G$ ( ;KVTnllZjmm%NG.Z}?%%99y~aaQQQRIN'f3aT9=vqDE<_-zٳAȵ̘t8=x)Ngkk/Xf_|}:J͊O/!rV Z;s~K,YZRRrN$tCL0|n],C|eLd\|kǞ/U ##cՉş0 ߣ"X> ~~Bx/zB^:+iRh_Դk+ y}q*MJJ+2 ^>Ё+Z.4Y87t;0׏A+_ԟ#ɢ%IX,NRm)))oٳ]j5\]&IH(@3 ges^W( aDGGx^eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/%ҟ3gAMA|Q cHRMz%u0`:o_FIDATxw%Y ߫ҮN-Zɒhɖs- yޙ cc16 gY[-ʭΧOS?v=uΪ}NR[u]uw[w B)b(7Db(]b(]bQbQbt1Qbt1Qbt1Qb~aw~eaQZEՂlencR [eXG03ɡ!\45J5kJxؿf 8F/9u Bmu#(8Fq0b.F1tԧlY[[R>X]V.{˰\q]DJZ Wl0 I><7gH OQ3T϶_wm|eU*Rp R;v@(9FU}}WIӭ݈%RNx1 @+R`Y*~;W.<؎˶a6lY˲8lۆ² Xm;kVW9Ӎ;5Om/Fb0 Xɶm{cC90R뗅{!eêZ;rD1 @m5W97yi-{,b2ݾܨy߹eO\3>9ߪΰHO_lY7ٞױ14ULVzpc}֬uk27SxQ(?dZ!8NRVJe]gjb(;N߿[(r Q/J8K!5A_o?gJmX :u([9anl""Xv饿m0,7X1(̲b\XC(!u33ڶ2KY))e]^gΜ 155fz$I$ **FG墋~Zm{) ǣqY8O]ElA* u2ϚӧOc8|pV8MUULiʲETq^в'Zg)/[Y ub I9$II|߇عs'كǏh@)q.lۆpR[!HK)07W߾R;B-v(FbOK!R 7HA@Ø.۶]yqaݻ\c2㫡<-)!!Ho+Wu>#WQ8/Z-PAOL˅,Qܲ g\EEؿ?{1ٳFe\. : u~ SDjϲ^ѧR>HY>%;(Fb<0nm-0:=߿D1/8Q*88c=G}Rtjs0:/"T5JZR BgY7_ |bLNN2\5%5+ZZ rr9+$ Z @^<0m{l0$ENj_K1 @)7ۃ]rVe|KqIi)%>}azzeT*u.UlJ^)0IZqa``jrR MKR<˲1&&''qQ>}SSSm :O^>?+]/qNǴ=k6qT{Ronn[izmMCqQ: !~VδCdoPX85k022ZdS<۶3H>Z W^y%0đ#GSOСChY2ԯ(9@ӶqM''$Io{caMBQLJ)aɓhZm b%s8` Xz5FGGQTy^.7uVlݺgcΝZ'VS}v(]b%E(ƹX.',CRnwT Z cbbH7OZ1{yV`f@ -Jڵk<2Xٱ~oz> |崔@Qףt1\RQAɠR*)=:A`vvftz sug"VU\. bM3g k֬s?܁oN8b.]b1kx,^PmmvKEȕ8n177ץ{ ]!ܐRR?M+Mձ5k+O_uW #gY(Ɗ)+O.,aQU[)RSje\%mPVf=.Q 5K~]zҗzDתU$S[xG(n& E[QT(oMKayWS*睍^;w|tz/.ݲ UXQr<Q>CP B s8Sy*vn#7:zyM9wt۱cwݾ_8?GQ,h]XJ2s+]].s3Lʜ+e]E~6ǚ_|+?\uK(]b,7H, *=B`l)- @lYǤѴ,nu p+H#8$A4p|1GUxa꾲ҭפoߴoR0"8WyCt]EYsb#׬^{z. DbiۡCaa)QmBK0n `T[J>Τ,NY2yWt=)h>aY0Dp_Gm5\W_lYNB>m*t1^&'g/FW,8)eJpavl!*@$88' <-S/qoY㶇)P)fՒLpU|#uL:]Ljaq%5V7l?ƒsպd?ێ{}-2,Al :%P6J) 8qeX{&Or],M~sfɒ~N f8*֟$I).R}|P*%xxY(u|M^9N_fp6Y]Mg"hTg;6m_^qx8v܉}e 4oOWvV R) kq ܇5oyl7z!sպsˁ>W j9ϺZ4тeuLT9kz5(Ԫ:;@BY7p!\6t(s[A%v˲,[lyy#.s.ƅgۆoݾs_DѰEpf0b#zͤ-!:3-Zv7m{|㱱1BMJԆm7|3Jvޝ)Qn[ 3R,N_#0yk+ɃΫ͓a H[q^G? qa+gټaO~? mlPy,4 lYt8- }1_*OJ($%w% u@(|QÙ#6LaD5;_}xv-;NT @(x+˂mXqi`=.\ce0x9Ō<mh<]7t۲W8Y*aDsH)8nfX{fJW z8RKl34_EtMMiK(JXMJ @u/lt-@밄\u, +oSNkT=;o8"K%uJ%|`yVItMBz&/Z?Qu2^ݺfje*ʁ꥿)z- Ȧ,8I0}7s,tӆ!Q0vԛ-5z)fm2ݲ딂ҡL\vr6>$(+%rf\&Ip7#9rjhw5IQ=js[͡dkEȕ|$uLMʳGJDIR~brr?_,mx33;pW=%LהA8ˎ>P.w @zj4I-pmaǎ8~8*ʊjp5=Aiَt:0u5}7գEuNJqA2N>2|RYP+$WЎ@h8@T*daoau?.˸qɓT*]T({T95xr Yo$+L;̭?=Zo\K)DES_|BA_@b`ׯE C3$qB@+zò:VG=O(Pz:0 Q.WsΜ9rlT'@v\-̕nkԲ0\X$I27SiTݺ I$j*RE/hv547i`[<AF,-)E:>h`6I0a<}k^s=8}ṱSYRtŸR]պX@/ T5Tԩ7 T٢r\:pWw}72[fҶm# Еr/gqy;ER*j_V"ql,;>be}e->@)($3&bPM!o6:Ҕ7887WIT.X6)Xaf0 wdUmYMR\=uSW1֬ZufsC=m @\_,xOU*A0!29OE'X 㗓1I9($Ip_aB-v^#cMoz>czzZxIMKiར5y/D*osOhIZm<>yz}[_#` (=A }rN [kD)$J!R ml4"J8mZxhZe!Q8Ğ y=?;NJ;ۤGmW9FV=`jF U0M}TyBH<33-hmx,<+iitL<ԵhgΜARcۈ3Vtq^aŤE?B{N:}04SщR֜eZm$0y$-)USA~=E[EY(l61==w8~8>a`` +I ͭgjq)ݔm8t@7:>99/㝇!A05j"̮ ~]хV5do+%#Nñt0JuuNtkCآIU_*2;[PE{LpAdsE<K|Է]I$ |^W e :9zjaF5;W$,6يpҬyGd4 y̾5 [ܗeV JjR^S$7> )($x)噙X?A8~&l2ݮґ}苃$IpqX!m6sS? .4J) ]J!Nxy+B+UG0N:T`+YQz!˦)fR0D\ݎ~!Z.L4)hy(h]9S$I=tDAX?%p]fv}^uلWX_?rmÙV. L vjc kVgNĔ*pIit:+-+g] &1?󘛛Ã>rr9jUB`/M`[eק hbbf[lA[-Oo. g\X;lYpk58a^K~[cW*@GѱREJ*@Z໕5qY*j000ӧqȑ>J mJU'AA]S\5vו34WύF'O(FGGQ!m{EB=~Q|@  + }P>-ԖuaMSX[)L6v>$,mUs@nq3Ej??~Jy`+f=晠Mx7tkcfff\r Aр d. @ Аx2N(ְS)Ez? EB!*J IA9]4w^.P_H4ޤ 0Zaqv10>яbjj$rLj+hw@MM^9",,,hZb͘Gnt\ܻ}_VcHsitg`h)˱\.gyظq#Z&vxi7# uXʲ wffTbay(аH#9xݡR7%VLA%y)Q%>M/Ļ$ Z$Izh4ZWz:(o`;44-&AR ssv:mYߣr(QГ :+rvJeV$ :<B@IwkфHS jfOCv}QkAO<W# a^ߟ5 Xn[GrB(/^`Q ڳ4f@&`=uR888#l)!-+ 3Up-!yz ?jYޚ u]Y=zR^9u[u] Rd6GERb˖-hQ=emz./}uSJ99<9R^ް9 ]bpҲV:S, ~a}q4[W¦:J]Pn6|_ǩSbTM=&jjY͛Q*077nmι/I M_pgυӝ&Oryj6רiŅCbEgK#7xZB 7SuC./*C+fvh݃ q=`bb"[{@mY* |2)NJ 0<<!i0!G *FF2 { .5=J!J- b0LY u!p|mtR)δ`!-L zwprx+կ~333}Xhx< fz &G_p ,_C9G,+MMiJcpL-H\dYXn,&1NSr,SJM|V[q=^T*e+ >S9QS[-B`xxV axkpֲ;Jg-Xa!qѻOϊ$\W(lq.S7p@S$ 3E;a/Wzeڢv%&Ho7 mJ֟C~@DX?mJԟI@lYPBd5) P 214|cA&GyZxd`sԏz : ,H:LT^+ӖP ]^r^BfSLtouV 6[oߟ^ҟG#^Gzr( 1l]ytsdY- R- hvf-Dډw˯ ƍX?03&<~;0cY8Y @Ф?heYaÇw+ ާ>M@`8M%E< 1yjW;&t-m4m%0ķR, vN }27-$c1=8):2bY>̼lVe ^΢e *iV MEQ!mJH3ϦCw涊V cѡ;P^B^M -X7>'NR"J >u)8e=٬V< ~)v(!0nC W: P)wcلEjz. 8Furĩ6:"[-Agyb,#YOBaP33MĮJZ$,!`Ȇm773?+, ^^ie,u U C_YIQ?&̑ J(ja 1X??хcpJ ?1e۶Q^VJA& TC8* ?,Bbg3CP VZJ!ifmYe.=I =2Uglu|,@hj'#%;y$7"NbBBۆ*|x6jLjDlYذv-֌FFƎcۘav[;(%gHB)Dt_â^ =t?dQ$ I@00;.ױeaI߲ ay(GQ֔$DP w$ & >dYG ^:3m Jj?o'I&}}g@dH@91z68?ZaVˬb.s8(oۨ>.իaY߻O8$YWBISKyԤ#,Sܓ/&&!eA1ډmw&B_a \YlNC\sJ.Z)9:i!x3Ż OJ߷,sOEG7۟Qs< ^*a,M]?`00Yy(:.9J)$R"Ic]!oڧe |>jRr+VYJݡbhuJJtۆ, h`, JفvI1n~ Z)FЦ$ uHz_$\ 1>}UqNLW_ )Dfc@R;7X;>m^۶{w|afJYlRәՁNJ(XtMeDrzqZ9 )\==FpX 麝VͥPj؎Ӂ0ffgk43J8Ʈ02Y)m81fW?Oƾ #P1 @(FB)8纲^z۶;3'O]xĮ'ze~P @ȭe MJ,ViQ!i؟m#H/!.>;u&ʔ 8h%˂=f6RѵZmw J @fLfÚP o L8QCg20v4n޳m(E8ƅb.󤘥R:Z.mVeU#ŵjrvz_RИǓ=K>[s maiPu\5;K籾B- 2Uzq,RŴ9΢A[QҞ,̭fdу6Xٰ,lzck.QqcjnR)S*|ӝBWY,.3ҢEn^[.}oC\pK%8Jg۝D0^uxwgO?$ \=!xg[D$YRW@Z&.q<66Hk=HFq`$b"F }gEj-zRv5߹bDG$wTȲ&lZPmJ%Dq3o 4eI"A;I^Ag(]I1J&X\DڵE@]./7#-2nֶGöqeۦ~p8)x@Ŷ`ja:ۆS`7:6ִZh@yb.]`;/\60Sc×WQTP}J%iy8U%;no>9|wߍD)TU@SꬽN;`$hYEc{6Hr)2Щ'YlDǃe~<溋P&;NAg[QԻFeI+~5k/}Mr,)1&y=s[7ԉ(FϷ:`P<⏷hZmȥ<2zl+~~qW?!%iIj%&,4 Q+qIbQBa( q؊ﵩڱ?KN"ٱ*hѪ" ʮh( ~3Kgg_r#J>/ R8:7KJTb~я&$+%ۆcYpۯp?X2V[*u.eALE⩋V:Uj56|/NZr)48 1E)J)RXh3k+eJ,މRE͡^T7M^q0sS!/ mw<>:ug1R)[X@3 @cq? /JxAf~~UxRj_M];m=?xk_O#< ;ITj=ԒJFEX @^g); -ɞ@YTvs+gPzJ~sb՟t|F၁<8 !?c}/~~ !}\weiؚ 0Ġp, T-yRHȔ^RzVB})*Q N P;J&HQIRi4S z t# !^_?S*]~zd>Wu?ǁu(dXxU$ ćjy@6˼;835Fw݅))Ν851˲ԦP CSq/_9Ao_ [V)#A `dY2Ÿ0lrwBJQ*Cgj q|J徲FS,:aRe> @#O<dκxlZ$sR}l}*%T_ذgM8 SP\Yfs[P9 ԴI)M-?~sy4 J%T*Ddނ$Bj6^9$P[n/GA 8\^=wy&@6Aj)-m$P3 с0/*vZQ,Z{ׯ&U8ijbo0P 2#ި<~WuV 8$q(nɓ'c| rfg(Fv:;c(cp*xQL=$ cY- ڰjN4k4R$:'I\ _d!J 7L c d `NRPRK^:sjireyѧ,0$+ EQA?J+*.;*YW&5j̙3}}}}Knp(sm668FTz2 a..z˰z6w:t(t0:"4{7MV2B@_,%|) y. @^iiM:qzZ"1nS vGqzӦ% \]c!,57W XJ UpEk8Bv5 'JQ$ ~S@3زT/Q=l`7[Qi LmT}Z-|W8qVu7%iZ%zncDZ;1yassr?3()iA0l =0"#֡kYӪx6&A߯Gp(%!h`=ĶZuU)]7=}wߪ0cs Dzभ"vc}&eo zPmPdY'1J[@6'OZ)N-?˴iM~s ۶eS4F^)qnޗNEm_R _z)4wBE'c4-2Kbg1 ([kPi[;cP.@P m»~x{#Puxĝ>);mSC6nGvd`l61)0ur~?{䡧?b)ж:E8?Ue۰ͫESi{)gngxxGl6>|3x 4ȫaϔr}"Xͨ]}B8?߁ͬ (ؤjBtb.@>T mFCo1o$Ϯ9s8v}BIxIa2X; t;LƁӟF0<|.t?}zYX.Lp!;v }㢜 ֹԒ,B2u7գBT*e .QX%a"JAjvW\|޽uy] *R7EawZY*-%Uwg3o& °mgN(_M9>3 [RO=n<04e=TPy39,lʒaz}GvOm @OHEGQ(055Iqeu(Ꭓn5!L?$BnpTsvZ1*YAS=*DVRJ, &"I ȏDM%v]dpmZ__;m* h(8qi4 +Qaup]e4QLW`7-P:BooǮ|;/0?@vׂb0y2%QM1:Q{wDl ,Sgu kqM6lAP~8GزJm*),>spѴh"FQI(nWL2~6_˃@8}Jj54iqE0u9)y_RE_TP}qڵxW1*Ғɼg"n*ۚ %MM1$Lama,2 6z5j;R:ۆ$+VT>6Z$ ~vW,Fb4֯?wᘪClhۙ㒗e&,S*MZTJ\.g*q~i8IS k϶1r xc}Eiu֬ JR%͡g$84/d[X1p~n3ug^ `޸@q0n~7?whhS[qބ+jVx˖Wq q!`Eq D^laZkEP$Γ kO&/QOR?JTƟil}q.ʮ 'm%5Ifk$7mWDg!x0Iir*X-s#g6ս^Ҁͭ ^RP p\<3y}lteQ$a>9}=R7ۣou9f-Mͳx VAYTyG *VN}͛q_mL>4f-:FѝEX+4yM_O kS+=,Q+9OM-kts"upfvǕ'OpU:1~cc]\Zwh燘 ڲ$ gΌJ&m`Dܗ6Mv;+5|y䆾`{iy<]ַb }h9R-)35ͬ }Pz8g5,W;s˃`,Lٲ:Pmw]aW%mO=;^|͇$A_TZmcjaS`$=bOhw8rݞfqǫѽ&&()ʧ×}1yz^-LV _ 7`fq<4@M* 6Yf,1K4KꇐpP|P]vt[J-v.C>ԃwP<d@Gs2 L $ $:>5>)qSOa:B.&&%+^I)oG/Dr]WͽgjKA w Eôu:o{8/G?p, >6S6;ޭ"n0cѦ`iJv]ϫgR/Ag+:0 /KΜq^&&ENjKcSX(k4Hm ~;ĦMѼ>$\*r֡@ ۩1w# Jڤe/QJedaFJRl" AZ0t8s[D v߾K}_ǏU$W$O[J\::ѵk1lbSOu0yCD9~~O# ӭ S4~_HPٌ&(:rVfal> +zMlz}MB`AٍB}&F0Dh{ 1֞=;Y/8T ˜$S&xC/#4r!ZE0NxI}ժ+/xrr$,B @>v#,z-k'ú.}.uAGy6ɇu s8ꪕ8<6=?Q-~^ʪRl8MA,8B-Pv!V qټ}ߢq=,ۆv5+ZGR `Ȋe7e&˃km{ [TZTҴ`hM0ך)dڵp,l~ŏ\s>gLI(PbW*48Ï=/-g{f~̯/.H,98 SP1=vxn@4ZXy R1,:<,Kp(vEHt@\s Zwߍ X8"%*X 3W`ա!{lOAMjC \&0GQ#?<شiWҿpb~OR @+0:9|%[<,m!Q{4NDs0kXtJN$\EK[}#u{4"LRN^d OyM)OpcB a_q_"#G:1І5ǔcWݙtR"!:{~Y(-%a-8pD ۲ /BNI/kc%z^Og^z1Z1|%Q'T賣I=bN_($ϕ44/*4m:aw۶aZ;v YXŠc4 @sa>R xie:}fr*B"MUw6jY}&M GIco\tQKve={VQi$݉ e&&~=?]/d) Ï[Օ8{99Aꔠj`vx}c*ᖅ~tA噅4)Cc_Ih@6ʯ~5[o@vzZ7m>ӧ;z7աK9sKteډ\jd!0(lY0].w4On!pಿMe}_v7D(}^eYohdhՠ&ڔnyQ:u_t60Oq Фr"IxFbL9W*(cz<`8 C8k֠lߎÜRhm9: q8~8Ø8pIa͉.[AsWRHXLB $ %)pqu/sͶU3%P(L7ݴƁ-ؾoq׮W'Jo1 @?jZ }0IW p%rBߟ=mSr)%;oM PZR ⪞{шnĭmc0txG1Jl)^xja0y2&1Enp˃(" %Xg[L`At?8U귿a``MW"eX777*R, c>+8Wٗm{#(+\0 ǣ% XF{k,F~;A4дhME.<ׅch[dt"%`YzM~Q4lVRsI)K`kqqmnu`Li<쎔rt 8mK͛?p ^}9TةϹRN *}mP;J3Myf(p z +/l '=';KqZL~,m? Gt(I-?J- ?` O~}h#%_}5j8o"klńY 1.wu|X)RŽ8g^6°aYaFsJ Th Cફ_eÆ̙{[9Ţasf)Eղ..Wsze7ݲ*جѷm۶q.Ѻ%V?_I?Aveq@^a{z䩮M4b th@3U=t;Gٴ ;ġ/ɓHk+84oZicQm!I Aֆtttk5s@έnqyr J[6l}w(}FʖuOsW.8ffg122NJ_PTw^DQI=rr>/iэ/ *uhJO!~EQR=uM ])7'mq p8կy ۆ#Dׂ }]tb Ʋ)[)J n9 ;nn6ut(FG;>KVzweUG~UTjMq~ T0ja׮]j+h\r cnRtY\z!:,u|W=^ـ勖Mqu[Ų,exL?MW"x.N71#pkHRm D6Zp K)BdUI}]IV2Q\~y>8MgUt1_/ [k[3:zy **jp=dBgqu<ܹF{ :ZCLu58|k(&=e}P@t[7 A'R |A` VH!R _zT0cGuvSŖaPDE s~{ %D^όRϗ6E|A>7}+ɓ::7w[xuKCʡMүlRJr׾G ҦT(j* 'Df*5)cݚɹz@ӭ>p( [jw[?|,S)ZʢfRiIk/%=J恙FŧRr *##8 㺙r6Yռ,J- u tZ\EbU;;GQg# ׿YT]: uϞrN ]ChZ rR jRJ<#I9y >n&RĥR w4(BUVn޽{qرMҢ:*Wjr[ <^G~pլQiqG0f+L´̩ ~"mx##X?Ot^۶A/gqNDIA3J,%!:;e fgv j_vt~3GPlH`X|dmVy|pߴh<$Sjî]2˃?IsKC e#&ϣ(/3o߸aRKqahL7}W/s' Ta `ӟF8; y@Qn,yig3e7|jhH/Unj4|"C{)mmCJv/})*8#8~f'9lG8؉vZzQ6j wKRMօmۘ‚Pni5Tn{5d]{xK^;v`ǎCV`b/1ܚ0b)Nb)='Yg6U,yvAG8]EEh6KG|4Va\W/`}4uTn|aT5WZNI ZRIA+KJ̽"d JYfx18.J^~کS|j`w:33U>;p8o>6M =y^<~ajD붆nUIu8W8h?dy73ʬ#4bvv-Qæy9ϘxpuGG~ Tӣ%€YAZ;ELaT="HUf W^ jN?vYZIt},ʇyq$ >qF FP+սfXKQs@5c4.l۶ ^{-o0Wssduіr0,TR:uu׫>@t{ǘeYxހoԧOGE_táŽcS]eDdpud 6(y {57҄ NĉK/&O'5WK%(¶oO|c=`@+Wdw:x1L!IWQ~Ɣd."[ӧOˌֺuh[ټS@QTGQ/W\&(5_hxBalbzz|6!0??uH9K^[Yr8럏.?(|>0 34fffr̚ɟM&clڄ'pߏf "$Swcp|wq\*eʸkb= Ujk(twZNR 4M*d8joFM[z.I`% 8VЧCIYJ;6HV5\Q^%}gTh@v˫8tꪫۿ|3x;]8ŒtOx{*}"C*LVrVݐ* e*P*20J)jp̙%_^ga:a!:2/ov"Z-q3Z7BXh A%|HQA^~x33U-Y(н<”@ T\)Aݟ ȀJ4ȇ[uV<#xq%z´ ڼޘa<WAt);n;Q=̙3gJM-_45GYfH1SJ\75tuHhHh"!%"DCC8}㍐a+j~7Am,3{cFYXFsĚRLVuut6^7V/\}a!F!/9 `J)\}X~=vڅ]vazz:w;ĐmQ*2}w]w~}eS>a LeIu^?kh{}Gzio6yG"%:z+я-L~SHsŜ]كX }/1};FGQj6aiEɺz$P$I;'n6OVWA[F%60ͣoC鵗MŋMaMjT^/ r3/AJ۷cݺu8pߏ̪ЖeueOIpYnl%>w?9L ;v V RizL'"}Q(ahaWEsslڄ{8c|ۆ83TMA[J$3[ Nk,Cv:d!RDc|bM睮gaض"J ta$f0mRBnpb_*BO#(ʔ%\kȑ#8tfff]^OrMV O_~^Ax-_<-B]Y6j&XztvGEQ$@hA.ʯ@Vҗ sg iw0 Ua1~=iUORQz $sv/,F0?oEh3NaDJ}>qDp=oAqs856+-7GbtAA(.IAss('XX 908'@nԽ?tL`LzӉgHT/"4 ض(022n ;wu8J4Q>2W|?M\urQM:&%χ6M;ިޤm9yVr p14!nڄh: Lu %iZ7+ϻ EV]@$ Cn~`N[nY +M|n^Bh$J<XW:A^vHpt :jB38F__nf<8rȒ+}O /;8d>)WϭV+ 5;k}dhD4Y1m-ZXv-~G1Ϣ{7/Ipzh5]2Iz.IEo) Ck6oDz),d\>ϿAW$aRZ4K3Ъ;+NtX6?SyV 8ٓeqmSk}4(E$tիv2.7+#@ I!K2Xj` ag?Cuԯe!C OvYRW*tvo\.,ܩ`E5):x" ";d6AZWy=R3W*ߕґyZTi͚5>riM{0];0Ywf˗F1}.'k[/<4R3-uSs# %(ء<|2S2u%ޔUJճ)F7߆ښ:yQ7: w!, r & ;wCe=K߃1;ILّWmTlNXhHR$K( T&qV%ڡ2W]yj[Wm8N3jQ^6j"j!NRFݻ133E:Jp}&zq|}ETeիi?FnphĤ^q 8޼Әv^g y8)}@΍8F]GێR髖SE]`?eĉee 4[,:jF.?$5ѕ&<[x>(Le/u@i0uuG!VZ:/QŴCZ/M`J)Z%7yQ(&XL6Tmbzrh1JV `O>,vXz'Ԃ|,!T1 @? ˆ|4=VܬX2~ |dq23Ⱥv]J%CN)J]zz&?ꫯ|Ie$"7&d+nKM_cX.TUW&KHLrjz D"/ǿ?xyBRSX ,ا۞\ض+\8v2\?,~SrHSb NMLLAzA"CxyKH8 ´Ҧ^6]aRs[###سg>;Z3ݷW2Mh LYQu}{BJu|f!1qšCma+T0' *j8H3- I3վ (q)}RvCCMMbDl6?ytݗC^@΋0)FoΟ_/8NA&;ZfٕȺj >nlذO<fffAy?=*Miu7Szԇ~?ytN{! i8uGq]4w¿k4pSj5<N/).]HJ+n40p<7K @ ~hqdsݺ?W8%kq* ɎW.|C,~?׭͝T:#‘uI;;EϷ+/;MyijV=Mn ^Sbx)=[Oe r&N} M)uH;GPmA\.x.Oaff}}}p C8tߙ)IW픕&L*>ЖPBtr#Q K/.8+gJustP ξ鱱dnF)qI$g哨)2dqul󬘕:mok] %R:wl@~Ҕ8ǝ˶Xh0l^nߪ/^$)q@Lb>RqWҲZI+ Bl, ^kcpKDkJ:asy}L1R4oŻzu27v|&A)믿7tn|C®]xm{IZ]M!44hntէ ,TWxIWvE(VvNm37 xюȏ6 v|J{)fO>_A `wTEcVݾ뮋lQCh`:u逦Cw wLyV6+Tw0v;l___V^Qumzz}}}xk^*=~,=/$o^[yvM#,$ %''%J`.:?_t.R:`.:qg#CRm J9IK~6 Q)_|QMoSbBdYyI=unݟ''U7SS/A<"|fr^rWXڈHԤ ڶFa)r{3մ*fALf9Z- ~׾XXX>3nqu,Ȳ2ۦϋ 0ά4u:m,%'OeV*Ks:PEulYQn6;s:g6_<;ޕ^[ !FvN˕xe8'IPM .|i}}CjM⩧j6oU*!9O^Ϊ[q^T@LP7]$E(hm33ibWNOcX)t M2)f.\wQa{^23m$a [j}Lu3S2`!B muňSRRI8ė\޾}Cy34Eg,Df^M/䣧o;LFCgff&<;WGk'/DJ1;q7}/Zw}ػw/ft/ns?nt:AFb$?IuvMOil^X@I(Fq@Y)GfcSagscm-;-X C|kݺOV.QyRBK>GE2aaA5/ľX.Ï{Ѥ`y]hޮ7 %#襪MB.*^>#`hQs;qWࡇÇ3MkP'}!Sz@]=/)eY- Jh-lG9IEb˂Nո8ݜQc_Agk;p&Tv~lxj e3gj) "~!C{ ڶGZXxIIlzUS~&_ؔLA!8rEH>0Eq<SȢB +EQ-ZF'2Gxի^Gb8~xLG:z Nz}"i4^e\c( asqpSpZ.H#^-*g #;VsU&\@PZ @ޮ]kI煚{ ua5e_0\S1!RK&*˙ZEļc4ofkpA>ӧO^g/CO6t( j8J?pQK籡PW m4S({!i,H:XJBc0\-hQEULu!EP񢭡҅B0xlƾpc}yAIYP}}?U'']2 Xy5lKH5S7ZtMs^ҕ0]xM=Chqoll h48|pf}ZHRۆ+%S0i1(S7#e:h2Ez+U1HJXlB4a؁3M=orҴ%RxqqАk+/@*nJa?C[X2Aڴ/yy5$"dCH)3(K*ܾ]LQ ;r/ T*aشiN>sssKʘv+I:1@cUac`M`( [- ṕz" M#X[b޳TTm3E`pu !qj-BM_:y(!PD_xC (ۆPJJa-,;Fon/pTՔ8AJSWd)}ȫ_{<^G9}㙎|'ueF+%mN% FCI?Um˂i_;ئj&5V ͦʁ)k,`j-Z!hȋ&18+S]*!L'b3ХD{a! *!gFOCmv9VT@HWe+m zGnl7~ih^Lj]qFK/_|1:ԉI YR•$``DJIjbPNB*cRŖTI ~6,Bv|y\ilu\aXے%ⴉrQ a|ili[9N]e8Hկ)\MvMТC|ZbgR<4vI-Y,&n}ӕJj?RЖHҠI]F?5#@U*^ 0.)%-RfP VGbЊ=C %j 8ervaq~#ʶה2,sнe 7uPk^e}š'ik߹+dA.Ӥ0 !m Ʃ-a3mAJ8f (<{tnpFT4Q1h-f,ׅ,Qtb, 53݌`_ +6ԁнh0"9ֶ_ϤM^u;#OЁr6RBIYGP `\5>EqhS4Zq u :OܳjL%sZP۷onWJAbmXH΃h/@ :ks8S^WXI_ >M>ل}.I҉i 1- vZ[$-nIw]'Sp*N 9)iB[0L{V{RnY# @C9{q gJ%ann. p;noVG~Lz1HUrS+2E : Q ('~洐cT|MSM=1MA 'j3ʷG 1̬ $eYQA[yן8(X8=g>p/kqλ^֕ZO1o7hY!-ZKGXbEA Zsz{YiY1%.dKz/A.+7'@$ᴤl1 @?Û=g, n]Sk׮Eǘ[iJ 0-TqǼ5FF޾L^Qz 8>WKj4iǨ+n}A)-H(X`!VMRʰPH6 +dyH Sh KDNStT}#BNL1 @?oCY9},; [, ۶mþ}0== Y.\EN&W3bn/ppr+Zy4E}"Iӕ,yO`Z?`ǎcǸ>wb>jl""w~Hl_GyNyKJAmjbQȭ]AZeZlUM%jZ,zM L0 je}5\ӵ/0"@;3AZ3m nc=gd9{ڙvu tömq+K~KTZ/'_ iPطmx;߉%_v>,|Epա)gŨ}BpfPiBEVJs @% yGWSʠ=8xyNRJE qlb``vg 8]=MMjUWyq&KeMrqja֭\%=Rx;ށ/|sƪH닁<ͺ;JzYi1fYt=/󙽢):E7>;-Fi {Q4+=/R>!1+q\}݇JAM-"R ]M+6o dq8NI)#IRKfJo}[}}}Ưz[ߊM6ѣ6t1y!W]9#vPk&cfm­ =jĤ%t^|Esj=_(\s^qN[aÙ8&.2Q*28L=L6e#RnޭgIܮv#__oI'緛GBm$Ik~xͺCxӻޅ&)@Н ATLU3lbiF/#v\rGkJ+}^ vBn$A!cay|'oC5ֽ`b(y1~"W\lZRfϻ$6_'&|Inc||~׿rhgp?+Ʋw@ka%Օ(i-)3QX:p՜^MU3uyx,\Sz5_  qp||c[Nl۰ k:ew hT*;03&-A.\ׅ8XXX@?^`ƍq)8us\GzʴgIps]w^>9$yi}{p]wᢋ.BEhdy 816_r |+_SҤ-;PXf]): RϔbNً6k}:$#[rT:1ba:'k A#cDQ 2׶mضf .Rl޼7lL]Ҥ^b!T(ɶm8(mD _U}+&/TG$IB\]?" +"OCY( BG QtyI o;U3/ox\R"][_y嗼b]}D5RO&5|J!l3)heYXXX@V[\r%{q&OUWb0 ]*}㊞Tonܿa)x+]E>4+h$_۷'ELLLqJ%@Uj}P#m]َxl }[.z E$Iqz뭸022fggόbqO-EQx?G]}+Dwlȗu8a1ͼ' lJҚ. Xl"kk?C='(ƒW\c7$p.}(sIHòW]"/0 3(c͡Rn֭[$ǁKǁK䕃<^Y܏*^y[c\c캮:g}gx^n36! TQ U P!$>ZE J*)4*" qՐ1k[qb{ǹýfulTX?JY3^{.ׯǮ]pbll RJ4Nw>ԓ[L9\2b;K,sc^); "qVñ'*ssn~VLEMjJz{C0;;ӧO>tT?s\?z)+5YLI@Zv؁ 8 zeܔns;~.quuӑoqC`7lẄ^V E-yA_bR" C ٳw<?Y={WcMsBJ^hL(ۮIظEGx[bγER`ddc v}ѲY!"5toSv٫ ib~bTX &D&e_JZIRQrj݃Bp )CR7\K[+1eYky$[3}ljm{;bnfZ)*3Su^q8FFF0998uΜ94{eYp8ţX|ST2b8؏z,wXIA1,tu]TU R@{9=܌M9|K?AHz=>lEF@P0BRkoY^M+7*DAv7N)u`!B8qRR|ݲ }3 FQJǤR]IM9Ѥ.{ӇeWk'cͽX\\ Z$A(ڶ |LQ./YetdlvmV _YyQ, ˲Q߭+08爢Wl6a2eEs^8Fn'ϟܔky3FAI#LJBP{z7޸'0iSm@XgF2reb+E!: H$hIbx8>;SW-5ג26l PK mHqSh6j.I8[\⃷B x=|_ojO9L٘ P)gs`F֥yg^[- '2x7®V4l>eRJ\,oXYiS>ګhݗ13y*9_*,^cb3 Nz0:{N{uaJlQjF:Oi! C4[quT̲XE[$E՚K~|N(c>gp22diN[tZi!ޗ p۟U᧸Kϻ]YXCekukI@ Z 7ҍO(o+Mx}StTNJmN,tZZiԴtٛ_S|>;KSD8>yYJg*Dl͛)j_@qFZ7sW_ۃ/@ =$_{ZIrHh2)#4>\ZmYYeXurn4V+POL\pj/< &{}s4q=Q Lw?LPpvѓ"I^oʸ#C Rd(B;KR~Y*=yҠ?Z099eoSP1ϚC4yH ڔ{ZnO֊ŧqI bI9Ǥ(оuQXX@7MBH$h&U[01j} 0m/YhiiI^zy,C$R+^ ,hp:xI}YvaqI+GӺu~"=ku"+a_yV,PFNF-VtJ=H AV4 ~*]οJOa)+dJY RKaT4(%%d"ӑegjYߒkY}B_~uO _z++)Kfcyf8 :=^,@q*BPj Zm$hFd_T5eۿ4B_IsPd2I7,:9＀Hr~AX֡x<^RJc}~XPn<<'7ZQ?)K  )!7r3zi 2:!.|q 4 twee 7lm6'X18iҲY&ĥ\~++9A9NZ^ƇHmFGZQlaqApI@@LYd7f(R9,XfɚRA8'bp97n S8Ƥ<&e?1 <ɜ -eTy~ N: YnK_ACc k^s{`TR{c̚5k֬,eܿp=j%H $A2P R}) .frϐ,+wS9wutPT(RJ!c, \ԋ\yсs? WWQ2j%S(YWlDtUڴ^;=-$PB~, ~8b0RU H1RzP d0Xߨ:f`=M!Fg\nq9oB^6О8HD&roeeZ1@}KpP5B>y94 X8vKBLڼQFk5j袘n1toFKխhW0x`RTa0tWt(g/mУ<ٞƬYfaR5IENDB`avogadro-1.1.1/avogadro/src/icons/document-open-recent.png0000644000175000001440000000305012250371054022767 0ustar marcususersPNG  IHDR szz pHYs B(xtIME#,2bKGDIDATxڽklU3;vB#B A`"1DL11D$`xB@E/"Fy--v{wvٛl2Y ij{ro9(<} az HZ$ɣ$ yoxśOX+3G2{Rx .y\>V̛M(LDHdjy>@D,Ur[g&faP: I#6Ϫ=@z}@!qt3\XV#o<[ǰJd3㳫&I=ǚ=$4 @NT΃+}W9I5~i? l_~6sgcxM^{ 9qhuZ|:JYh#+&Lp}v;}}}8N\.7#TpZPURP0b$/"x3BW f/lx"aPX\.zzCT*PU;ZezST@x.q#3IώR)s=F(СCn ttt-myn?)bÑWv.4-C\---(3 kl6NϹ.bXa'&3@!ɐ4~0tRS3*<kDRP5P8ͻ5vc])~M߅b,8NV5P-QPX؍n$${I E^UCt25fp(2o lӠ# ;I+lQNSGck+||u/~& QMFQU.VC0\)X0o]Oq)d;ņ UY>Pе ?~hq!1VVV2eDGO=[aك׆MWT4 z v?.Bks?)~fx9z'=hv\x$cLծP/P(;( lСpܡ6h@Jmm-#FL>2|5Jw GЄI ٣x,Bt ]EߣFWbyZQ\[6/E*R29\O$Ql6%AJE<+D fbnSOr7_/.? >vQx}}mtvEƍؾ} 4X,ƃsN ]v~f9~!gbnv}{]l~ "F^wp%'(TU޽eKa H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FƲIDATx]u\~Ͻw|f}7x łVX-*𕺠- X1"٬Ύ\;gs̺y晙z~  hQH`hӈrhAO{<>X`:<<֧$|ڃk%,#g-'y x2Lwȁp|4oc=ڍ} B@Xz!O8 R #Q\<7!)7&1IYpab?qPJwv(t]Y ,w.ceѹ}]ש(Oeߦsokt:m˹\w\xvúǾ}9~r#N@@2 z۽ZS BȠiҼri4MPJit]PUaPJ) 0u]oH&چ寽kmmmCSW#0F_kv!ۏs:!M-w744,}g?Dt\$?H KI PVV6>{^<>Fwm<0T*ʕ+_f6qSv 5@Azg3.`x|F*1o%V$ ZZCCêj~7on$Jր*`b ]v GG`$k]x\ U |SLٵbiӦ{=caCCC2m$@{pW`PT`7OrXC  0 @osZxٗ"5 iB4D"evQZZv;k֬YoַFO.0+!E; Bmͷ x/W$hu?~|p}9/ˣ}XvӼbxrS2rCO?tOES @@D-g-r #8bGGjkk 1cƌizCz)H$ fɅ wz|Mo>h,F >} DAm Q/b-з܆$IξS`J4!I UUQ[[2Αop9sjmm@2<ՌϛK bk ߽˴ ϒ]H@ty\V't:hvA~F 3J&W*D!<+@wN" 0*I@o4U7ӿ|vX"Uo&A)Ŕ)SȕW^ysAAA_l 'sM<>'( H@7kY7r`Zߖ0 & .Q0 &liL{o$@pAxQDԻn7Ac w;%`o޺u+EAuu5N?EæM $@Xz WC ( ,} {Eۧم`MM BqǟK!ӟ~y&˘`x ȷV@t!Y%y} O@@. 2 u6li1sΏǏ_Qx.@[\Q@@Tr zޓei}urx}o+gf*իQYY#C Φ5 KѠɒ^&$|# ܶظq#LDYY!8#X]]]ow/6ȫxDD D H{~/ vsEۧ#yciooƍQPPX,B833$k}dEpbyւޔϞ-@)Emm-::::̜9kGxA;/H@O^6kIR֭[`0.$ꫯaܸqN4K 9/[>V| @qwiv *֭[Q\\ EQ:=#Ϻ+ r|-E'fe|}Mx "vMZ4|$ %%%]GyΏ~#; c B;D#('#---hhh@aa!dY$$ᨣ:?5MrYzQ4jM]p{U򳖷srҿu۷m-g6l؀rtvqQGG)?<Xu`Xr}Q<;x#;ԄnO>/%>Yx K.䪁&ҍeƳx"h(**K!{_| @ )Ƚu>W{m;߬lڴ P@`}2C= /Hg ZxOw\{w,^q>qKA}}= pZ$\p`e 0IB@A^.+r&vhmm&'p=KNx*z( -Ao>^J^w\ϹM T@nhk͛7PDiG:餓.?AR;O#)0Sۊ1(-+s&!G<>۷\ f%^u֢` `-k'6(駟~iٳۼyVa Aer-}\)---PUhR)n438 0g}^?H@@@`|I۶ܬN` y;ֆaȲ i]ַE$3tO8# Bt[+2) ]xm-n>5=N@)^ tIs9?:Ϭ@ߤ:uL@@@`TZ6 s#) 0 pȲ%~˲?:cϰ+<,.0˔&JtTE:::NN:EaupX&\pպW_}uvur߳PwA) pw ig/v-w߹3>gmp`dYaFNɝ t e9pE]mټysoё@.& ^ɇLE{ Z4 MMM(--"u]$]$w׌ߊ/k 0zy  Ӵ\?:W[V@>ŁiMMM0M `E]H ]ve?6 \xN@Q@4zH}Z"iPU``OM4 H@+Nudɒ6@G AFI5趮W*2$xtpSo'"V`D)>X!ma@@@`XzC:;J:M{ͳ>td]L^$IߖUG à 4#G  gu_p x4KV)-Aܙ,#IE,d U'Gccm o>U h uA$Y/mUaЫ`w?0M~[Qȓ?@ vu0cƌc$H! (B qF$4M(]E,aFd \7G;*h ,0+@8W\7+ӝfdt+iN2/w0,ne]-$@X"AV [%l)ܼ|k뷽˟};PUucڏ^!skgm/ x7{(S6] KcC.0Ph 0BIBf<=t{VЪ`́ /óBnO>3c 9i$X@a*xM%s\{aGGGpoi?G@D #T# E'ఽu\+0'$ ?iڴi3G* AF9 m@" Ӿ^*pB/H@4-OzԩSG%@X$'䢻5% V \%X[niʔ)4 ,-->+ ?J<*g3ݯ$h魷zɓI$@Xݱ t# B,m't $ X[oĉ)$@X$W\xST4 uY' XVkevO&L0"H 0H@>+]>"Zadi<ݍ8{tq#  tG`k97 mz .؅]^!{e`~7 w ,2+@_*  4ukk|,@7A/2(]\-((; .,0fN!iv.NbX;Xַ}_qY"X(ҥG,0Ms{Xoyf&w@@@`Z>@xi^م]xgP`>K6/6`wqqhK{Ƅ@aHr-O]\xe;zءiZKA+0"n.y7VUU* bD!_A7 2 0 8ncg͚5H 0@{,<-0N  ƪ , 3vmx݊p#=%^inux$p]wuh  0&4l4k(g`$7i8a@@@`Z\wkcH@o}H*g͚uرc p j 6"X  ~S$0$I 0̵4; 70n8/ 0H 0BOp^p"w}Mcƌ"p#  &kv $;EEEw}$@B~YC #X6{2SC>@' ^x`0-= # #\X{il}ѹ+ӝÁiL@w=I 0mہC!0оb AFwA}Qs$X۴H@IIɸYf] 2$@X)\n~~nK>ؗJJJ}C ,@ xi}!h' 0vAkݱ[+e Ile KKe A\Za :|RKKK'Κ5ʃ8$I!w|E "&c R$ W e 'i+ AFޛ@|O)TDoIS۷, ;_IaAFϥxXqB|ӴnłZN,@.L뮻|>~d $YHٞIL0ߛƂH]%oZU2*--iժUaW@w¬gYӭ4+ER 0:ѹ=4aF|o4: À4sY];q.g}Teee󯬬4B0f(P("BP\\ ϗ:o9[Ǭ:4M˺6ֹ;۹ufsmm"h>fcitM .ψP 0C_ug<0=;}LӄؼysֲqFtp8b  @D"FYgituUU$^oY!0*Gr @W_!|H]H W`=qO6m]󡢢ƍCYYJKKQRR.b'@UUhT*M:ICXʦu]W͚5xCg$̺-,46i־*񄼓<} r]aߖaؼysֲcǎŤI0~xTVVv,~(G8BRTyVPaYYٔ .$`gMQ }i Q &be,^)8$0XMa-[WW:,YR?ը IRg a0HRHH&Y$8?N`;A:7mqya@@@`j.@ujn W;)ܦR ȀpKUU^W&MI&aCaaag`$A(B$A2D2]@ii_W7z0M횚Fz p O 0 YywwӬdgf opF#VsΙ#>|#.n0qDL03P$t:T*D"y}m[aÆ753!`سLdgxfxaᖃjuJ}4xr3`~F:-$d_TW[ZZ]/({$\ 0 koͷx+iw ,>yԱwns]khmSLnj|>B֮]C+Vx)ɢ   rB*@X?۳G{Y ux^}{zfmGxA~Gzm`~~Y;uݺuXf { >p>DSN /<6/_iiβR=Wf7}/-n7s;;-mOɳ}% 謰g-gY't,j8v<^::?k5557o> "Ja?/] )Nwf+BOJ{gqWp/_w$${"ݢ\\DKwgAȀPx<w0e=s~3T* ~g޿o~άJU^Ow韗&hxvEYS'N`|ɀsg\3["o{Ygu|rFH󄿉lWqX +@/P2x(ɓ%MRyw~yNڶ]Ԡyޭ[^oGZ~LFHNe$ }TUav'|򵪪MK.#vVA֯_G} 6mڔ31i$tA 1a„^ nGl9I-:MN:cjȥɻ 1eeXӝŖ, 4ЪU`&nˮ暚'ok3~C +^=_^W_}7pjjj3<fΜ'g>?O[9[^n֗KN /!q`]^ٯ}ݝv SNlٲyx}鄣m qZ _~9چ1/Ƃ n7)ڭӜO64jYvKS |u.)1059]#X{}{ժUb~Zodwa@@`OӐ8~_R2u w;dYe؅].}Eľ|^BޭO.h"JN׈PJl2̜9{o;0嫯ZcVZ l?qG}, C555x.Z}v}n V˥m[;-b$`BkYNKvn83Гx pYv"`[>[ooذaS2etM49VO/,C .D{{9^41gΜnh^~\Eܬnx1.^1 :u`w +op+;pZ0iV^]jG}ئ;I  /XtaOh4:V)켪Sܜ&l`p ~Ow"wGGlke/+3;%[l!w9}Ѫ1cƔ5)VVA..]K޸q#^{5tI.{ | v:؃y9n VSy.Xf~ka' +W]tE>CɋYxD`TA(Νw0Pٳ6Se ؋8nMd~NͳT85\\͹Oh^ <^$ϫhFt:'XTThe~mŀz 0Z Aa|M_&MWJ-c sg}:5"4in 4(|un8 b_aaqFs=ƚFML+@  0thѢ!['$ )n$;n.\N߾%q3Йu1su6kc X7+ ]CXk׮śo9/>tPu0﮵i`蝍}ŽWЮ\傽k(^ 8IW7,uT@GyaRUU[4TUu<5QGY&P_Y[ RhM(Zc@ML 9J [A)Ν7mc|xVK0ٵ{{Tm Dg[&@>4ޣ,~_/=E 4zBaazyLJ  0j) |H% @A10 н>;aOC4<#*-RZ9{2HuuvEjŸ" ?B&?h=l`CAϹn@ٳ1,sɛ ]k̋ :I寶W|/E֍|@ȍױ;'x׈g(Ja[w7KiC;?oKW8'o|&piTMSkhhK/4nٻヒUVa&ػcpKO5r ourn]xsu-ߺNU0N8  욿.@B$K~̽R2ODet64٦?9 \zp}~z/"GmSU-2V6vVWs95\K9rNe)ޗcW.$n\-(8.3,DS !? {9 ~1~ȕc H$`35& иI^QlA a]Q_Gq/'H)nxgq 7  m;nrkt }&,NAk}nE,b&rVaLzi w֗+pԸt15:i1Cg_!0  0oLA: gW Y@qyOsŊxGm\z5~muQbsXs{}<784/lwSmӲ(B pI2  0/ey<,@#OE@|A}tv$,÷sA]ގm0utyw9/TTΝ ]G={v/{xU`7; 85}/9/W|ywbEl+\X @2]?^ hT }A>>z%@"ҀT"#<]@T4 z=ͰPAv!~+w[a)ڿ{L&sύ[+`˖-;vlhD7k@֩; *7"'}8$-x:nY^.nN4 +^D`JB 9d7=%UP%&>z? F$HLA{e^T e42D|1sSFvo`ݺu#b…}/5oզ.>>[[Zk, ٢Xexrmاٷi߶ۺ:Se(5͹)EQJ(3GZhi~q) U+LD M(ۅ# x%<3Ι3[|gTyN!E:ٌ u z/m!n9͹M7!o?O'Irn"}Y}>LӴ$.sMQ._=] |Z{Ę_3&HXB䬱 zmco]v; Moڴ ڨ1>3y |Jsmíeq =^`8p%Acq[6׽[e$Ig?) ($g؇"WG H 'Hߖ?\4Ο?x|b00gΜ @on;$'xZ7+z~;ݽ>v2\|`?d.Bp " @LWz& KRX]P&?D,>/r\))sȐ`4jоJ87| 7ݟ0;w{dϟ[nhυ|Vn$-GMCO [!77[![Aښ![PPT WNQ5Fx v@ WS~eܢyR9w@5Բ]Gh |~%{YZELt2kĉehw 6#VK^LsS1>Qlڴ -'ܧB>mK حS zHWC޼Җo!oZ f=H{ YXmǽM߁1f;Xs-ʂ,kC>=4|З`y!s̊iK5@Ghf CkReJrkD"5йi={v G̞=;oϵn$K{ :J)x Ț^ $kkX @CQ{a@qp޿|[ ۯeGwrnoU@Ay( _ aPL^ t^ cA---Jix7~zL4R~\$[!}?j՟5 5%8G>sn1qz+Gg|J0 yguFym~>Zow Vuc+ eZd )EB)kRmt@%wu(hE"ypuFZ(OXMYdېi@G[?[;u|!ҧ]ԩ?B[3~Y^iEw+Gm@AѴK=X{ml5V~J|ג$Hl酰f !% μ?!u)h5:F F UMgȀhq$#H պ}Z.msp+l'nsZ)3z@@3@cWO56&9 yBr$(>i[w.YJf>mlpߕ1/=?BcOYV "NGj]ݨ/02Ktgd0LBb2R22?"/2aϿL\e$M0$~cƬjQ c'@VWBKO}}g?gq%+`Cx. 75L=0gcH7`]} P_o!v i<;XC0 PU>x2xpwdIE bn6JNod\`f@ @RgokOmЌuF& eZaS 8Ro5تs+U gϋPucUUe=+E犨V>[@b)fj(4.Z3eR$*h;!xWwl^ :u;#UVg-[⥗^9G$i+k b\g-XJ}PPe,b!9g{nJ! AfrטrjݽA:׷8?W?AƔdN{_)* 0MiJA"1~). ad9săٳ{DE)7@|Yg7KToJ+6oR 5ϯI4Ɉ1RXFrq+#kQʻ sN3OpkHPTA{f[ @Qy[ M[7MTB"p`a'F *+۲ . mZ æ tŋrJ}O֭ޚs&S4bʤ !& )@rvdzV+ѤA]Y!$̣dG^ x{|@%ݢ*@@o/jK5@G̸U[TB  }zyʵ\ؘM fE(|;F J Q)Inإ1ag| ~muQ[ xg!KO+>`0QDoZ(LX j@@Mϩ+3N- D͕):&~AFs=PgJRT9^"L i YXCaL"9six<3O|sXrCdV.&eO&_"fƽ@Y 2}K1v ({z3(18Vo @oHC>n/B%~A!ImL=>ڦC[)& UMp6 Ѵ/.+4p苏H||V00Z]") :Fr@c$u * f]M f=06!RL\<*eb=J 14 5>5udR @a.JQ!IڑU(jkK 4M0#℀,_}7&Z[[pB\~]g׀,O?_ט_o;G 0RӞiRF$ʚlRoNèMh`4h:#*:kw Iq&K2!w}v:6i>"B}uy;KA@:*wJ{(4n x-ӀϻN) Aix]C &+e7B3c̙|}ga~=& HÿKʔ[zUM 2a606oNCߔ٨&igF> rN+֤N!{S+Xx={ {\cEG $08nt/0gB& Phѡ+AC0uVF:(p| qg˖kgiL]a.,B̗ TBUm ifOe (-kN1+($քex/k7Ck">bzO"@Xk@m/ -#>V$V%tjiSle*: &Bpq pFz;`r{B+F*BpB!pI}+ȯ3- 1&4+AؽL0&MAߔm7DAV|HP#xh@6fȮO1vB [I\|2s PQՅE٢C{&6F| Y,mΨM/4iM3oL- $4ϵ}%_^ni W- (1~kQA|& N@[Y2-aW|>  MMʾq>iÄm LbƦ4hY1f|mO,,@[IA뀓6 M\Mp `\u9K #àEMI-:XG+GZQ%85[ULZ.o+(|# 1Ŗ.3j }$MоJ@*^Mgy EI;Փ1@a PX D ŗh2WG:]>k2fS_&W^K¿'A]x$(Q@;v;xɬG_@`߂7 K|縮~0h($;A!ezw9sha#,%8Sx fF`uz>f{KJS۽ne/11(gc*˧/ Ŵhԯ:`9~'S<np (.P DGfKfTB#?zp q@}~kmƿI¬X@U.zc @E5~FZR"}xXO [ h ,%L 2xVﰃA&RԀ\}#e_"  #,ԢNalQ}*6Uw7^%&{; [}!(Mx4JB4qR0ͬLc+sہL%]݄"̒PA,zڮAjo Js1] U[!ybu*|zWqQJ[P?jEcVYVuf_dgx(/ 7=,{k cW-~%avg(= {qeh|)@ Yd%|q uU?fߙ >ƾD@B@<+ӒRg˥| yJuښTN- /=G <4EVD&5c5Rf tPCF`h+H}} r$l"Q@38 Ygկ(r~WSݿC} ! }+m/mB_E; :+] Sv0`C@vG]`QJf?Rmf1O>~ϥ#NQm{.?!iqSc~J[ت#q+GzQ|о6-OwaJƀ>cz,>@]с }-\d g ߿cPN@ 3D'gL 8xG=Iw=i$> `Xn]]1&a: ~!O k} |Y`A2uE u.x, 19./9 H)Rﶀhs9}O u@J}YOI6(Txga$jfvmu3scׁK`<.@A%J>6-پ} P&؀m3SNF)}}۠~A]@;+鎋JS ?zXTOl{I'8a0&9T(#[ Wo_5N"i;0[=A:8I;rCw/5Xʣor0}uپċ~IG@ABμ+O(dŕ@zI+BǗyB { w۲bs ljĊj :] ?}BrQBǕ3!:dOpZgBn1tv`.Ìc\P3Dh& a+d1/F`=ƌ{t2`Ի֦:brۖU_(W?kyV[r 2}N~_j=&?k9n˚4Ώܕ1оJpksa3e%z(PT&s7 )uVm26N;O(5):XbQS% v+*VYDNkЇ~5Q^%WYC7l7K䖌Y6 1/{TTA'/WDmAǂ0I$H.>1@{嘩lP6gWE-& :GAp8&M2}ӦMo]i0pu9pJKs c}[(Ha&v$WG:vڊ>n1bLS@=9ٻ0? еg^@lT2z$lZD_l>!H vmwMcc`%=12mfi91p_S.+"@&(C<\:TGbtmF,4|g~_;{ta|ؼ&lArv> 4m r3Ro1ۮFLMWWt@[ebce kB*!R-I;ҟ׹u魬q p#`sF~Yƍ#8gw W(QTcåRG`gDYښNsQi;am?Vrq G@/r 8?0Y18ze%_%zo@Vv>`Fa8/.Ee.=S@F&|?D`Bw ubq95@t7}8HJ0jӈ?\k-ėa\"gںOףzfv3>r@A~X%KW׀EJ큛>N;kpؔjiYDb]10|k6`R #ψBLPZVsLVn9R-UP?j^'Lt#0'ׯǤpZpN1K:6c L12*KZ^ھK` ne !?~BW"eNҘq0q~6)Aw@zi8bʤJ? B#(u(̸QU) }&_Vb޳biudIEe~mErLO;}7%,nDr :} ~e̜A觋A~ 33Jz "} ܷW6%ڐ^ mC5JR;%$xx 0h/ 05esBTgU:/@X 50~8k-ǖ xd 3YRw؜B50&WstŬqݗSХoԢ`f`•(LS&V>IAUʂTʢ3%dsÐ.KSs9?~L#b@LfWnzؿiNӹE ؜BV&̗HC`BV/W:J0~G6YNEGƿU79~x饗3onZgMq3Q+ƱIÝTg(η?N\ ] [,s*-m J>mG 9j i>cWʼW49H{\[VH&kD2 \wB!PcʳP<A2)kEs3= CBcL?ЖǑfoW  ߬OO7mVEa=WɂP7lYu:-.! #C.M694*,0Y^kB&,.l?*$Azȟ\4;St<׀XrGP`ڄoF */7s1ow@*,َ ^;߃<Dœ0:"92VGQJu޼yy tJXn̥J22$I(CPm(SbX2q,H v$W<D_ez1/Rg vv>lQߖ$XT3P84ٳЅq''2! > O`v0u-:-iR0;6koӈ?ZYc!O v 8 5_@XnݺFCcrЗU@G*Bݏ)݃Aţ]է/ee)ɳ4@H^*qh; y_-~P Tx( ߔ·CZ nax()oz ~Z>Oۑz?#=m ~`iu59q>@,{5j$|S 8K6LD:QB[uEƦ4(_'v=k 2 Ɔe59IŴt j,e :a\"O4>ycA-|e6bȿ}dyMu0k.Zzv^ R5dA<d#=[8z\ˀ]lJ D|\ J̘i@6m!`'tD|F:ruL[¤ uy;ReLI>`mR=t?0N=ԾsY.xvA.ƺ8QX4hzYRohԹ1,ETBjȓ07H z_Cߣn(@At709hʎ̧) {3lKG@ ?Z 4WAS |7mj6Aۚju>?HQPV 2q{`tgL˛k#5-JKKavRGXո!T27kHߊmީX)*!!$+H tBGY~qsޡOB_G= ߿   xeC fu3 ت}Րd$C4 H'iv@0̧߃Ҥ w}5"ʀ=l$ン"T ީdmԨM#N ҟo+ûT@X?-5  [uC(’%K0yoL`\{+㼼: dDN.oX~͜E&k#V3/6.g_@;L&G&0* Az @dc ]ug J}ЎˍۊQH~DHFf?; z0B(L/,anj*ŬBZ뒿 "iF>L0yU,.@7:Lk g@#|FbTÿS4cξl?([ǭmߦd2g}Oe+3=s |3 oS@7<SE AV  0?IHт[Lڴ y|3ǀ$R̞=M_>N>±XDH ^cA&BHPsBpm6J̤8y-_*Ӝ9sz6R ÿ~Pv8i[,Š8i _|w{lKv'2C,B`޹kr#+:=hi 5\L@2s\8=*m·k t<]Ohf }Puܹ4meYH&6C4.Al<#Hӂ'm܅|U9HK3mgndRSY|02^m0?0^@cccx[ &Q%Ɓ91_:)!xh}Y/U7 1PN{{C1΄=7|k֬]nkӛu2텩 (M҈?^õV'X#>@P&3+ W]R.̗n݊_|'od9"[T"P`W@ȿ| d$[$• cE0?4`OؾN*d,/΋C3YT |R)BG%{cA*5xFM537P >( cYjZYdh3*x`Tл'tJgw|taKԔg  + & 8"Su¸ZkӦMxW}?Ӄc'vS8"'V~c \!mџ$ ]w!)$$#tt) F`hg'Ҕ?>",]50?k/G>~#(>&XyN1)*e8Z-Ub@`ʉ 2e'onH$`(gUeצ?-OxoI+XE@Q 2!>K-MHъoFzq F2 ?"gAJ(\i1-pvI_7M0gΜN?j}[V !WXZ`ygF@N&ZSwv'z9SeCi^0R&e>g_˽fƀ~3(֟%LVfY.!zfWBδ[r'ѳǀx LƀѬvO J@2-@[`xh"0g {oܹsJoي(cP~ ʄo> Å< 2u> @F$_nb>h< eJi$'~>ا'`ҥ}~} aWda( X[_B2ԇ)3_ ֥'`ԩiD!,AU H2Pf8;+7qx뭷[XM5/{W 08(A ;OLۍ}@rQ3e $@ za%|ӂ,Ѝ@-yONzٳg4.|n 򻼜y.V^z+>$ `nUt*vg`՝N$nFFD[`ʄ4Əc=w,~n! xy;';6H@T vMk,WW }Kƌ[~NO-nC:PUR_~ S@׬aK7!<1` vMS)> +L e;/04| mAxݰL|@DfGm.FAEU,#GHϸ 3,K/&r4lfB#9C ~d`bPUQ HaVc}wڋ/p@8:45 9s X` W0n:t۽:^z 7or^ $)՘C\VIYKM v3~B:d mUz+B_-: K)ZDȲz\ ~<׷5/Fa@8םl\H &ڻ@`xj(pWS]@0t΃N |J3X4@ =c=s5KS+ 3Kg4"V[T&=|dߙPxHȿxi찇: _%$5w2>U^ 4m3㓀Oy%gy&&|l N ʽ 3@` ʯtI.}BZ[,7.BƤS B4 Ɵ~ . $?*ciqKN?Bǖ vi|;E:#yD  4e r# &=rɤg=@vݯ@pбP2JǺl N0ۭhfHNk (5 f^Xʬ eO>e˼eP)j^ 35fpF@@ap]B:| j`$SbDΨ`iZ@onzG~QD$ 뿓BeUY܃|,5O< J3XoEGW#pP;@ ԛhG ҟ;3'\C9wd=SBw;mLUS%ErQ 6}u 1#GtX>ޭ{s̊p 褌ŦVE[b ̭"BTLayWK\ c,ǜ+p}XȀ)smuFmLC }K3~P|%HQ] $Tm٪#|j߲U5!Z^ؐG~lMEeӷn݊^x!>( 8 U¥~?Q̢U?F75hF6~ >ba ` V:uY5))D"1D"^a$_n2, JWk@d,-_gX~=&O_ Z_ 4N >0(q!;Ry,8,,#DyqV&.$hY*_ȩ eWk@d_Ds~9@:}~ ~٠[> $\441H 0YA>}cB[Ϙ9 M,B􂱐 oCDȋm; , U $_eÊ s%:CǓ[a4j TBFF _v|}G= v~3//SDH[Bj|4mw̤ ,Dee@ +&LXGfϞ ]J@p=p1CfH.jUHy>r 0tIiqǟh@-HKŽ22-U@|,卮 n<( RyZ #zQ'd> ˭O/3q%+` Fvip8#*Xk3U=9R"gE E5 ig0kY]X{6~i0+B">B[Z|N_@`D =te| Ome k*P_Ɋd"䏮aӏ#[C5̛a%?<KL 2jӈ?Z0A~  d`UxK?;(cAEEމ[ \ تg!@߬"H-A;<* 0L*@*HO!P  @&W *1kkF8S}q˚4pɷkSje* nx: Ya _˫%YK,shjm m!AdR2; R/+H}mGkai({L܇6u0 n ׊gAKvwd}{Cii鐹@r bbܸ/",[Kd&elL=I.ex3S/pp!v=J2׉m 8"n0d6[HPB{WȬ4|;F:1$?TZ̎OXy-`M#F3eyﶿC8,,r"| >%Z_w5V0>J5SaB$뗋V1 [&EjQ. '/&[4)k?v?S%~j2R[8ܱr +>uGH@ `֚إUPhL"xh X!H-nC6#r#t~D͔2ee )t<]o ~^~H"^xa*XPn?p+-z lA.!}'k0AeZ% )$oMUvO4w2?:;:!w+vqGtAx7]i7xuG<"`4x7 f])HËBbas,Ӷ}jP:dIL H@ -lA,٨#R3[L B\TT 횬3UM[TR7oJ&,t \@7ȧ]2q迾M|L'6؜Fm lP׈[.}* E$*a#@Ro6#z3hDeVZܚv zBpiy vǯf i @vS[ . si y|ы*zwZXdQH.8^I+v ޣ&QQPW&A`1! R@ΰ)Y'2J:K ĻK)Y'"omU 1R tO@t 6< i {~w]Ȥ#|r9U:U(&O(<1n7jH7m)G_5|>,^ːuuukܜ:_TK^1د ŝxIPme aiL&g79 e'g؜F٭,F.c~\~AE'@$7[4wOSOϧ~:|n+lj~] -%)?S@U<$(IڄT r(H?[6\} 2fHd o.XgB>R;W@B>jvk@iNA{J~2d@[GfI ]x{SXX?~_; SNŚ5k$p Q(gbX-пMzdt[  2~t{ڟ{PnȄi+?|,]U/R=!'@>qS +0h1"`Ă@&o>Vߑ@?^ƀ4\Ԅ{&y?63?<,ߎW' 8$x^]OMHތ{%gBKj w`~Yj},@QYRH;˾v;dv?(^о "@ 7n`@fOCg¦>1@؟=0& E-`cϏ'ĉ'8,ep!0^m'$7+"2ݲ5"tl)wо@F[]-(>=dFTNJ6mTD`I @`D\*^`+)em{S.BDawZ|5W>4ZjX_O1a~zϘ1,Yҫ$MF^o~[e..Yڞ^9픉09*%Xx \zF0^iA횇$p $, #%.5O]% a 3*>/m hfu2\"67nN_;'x"b#T$IjfZ VA}Xc[|T7Y;B.=w,Bǔ@1 ca_>  0,d} ԟ~~LA@2ޏ%U[K>~mE,δF2nu ӁB_6fuz]gn ZFMʽ{_`bD2QimˡFnV C抏^{@·31Hxo̚T^d 5/u'_T$O)Gb 0cƬ;"fX +.=zSO=<<~ *p:e#X hDbV$mUM֐ ԇc:@4\xjowBe@#becW"p`!3.&2#,:}n p7=P(O>yޒ3gbܸq?oe:K k TK-nC. [9c@ ewPo8ƼN@m?{ C*C&WɿIV K,-'3ײ}C=S"1q\c.n`֥Z@7j7#%Umd$~{ nx p2 tb)"gTDdo r3_ 7N; ԿCL\/g/@и"1TY)rE <q˧ 'gm/ 2Kd  0^}ڏwOKrc~=s@58v5|++[.[F]%` ArDN-KTAX\KK) @R;hmDJGuGR7e#nWm:'(ao/KuԹ$If֥3v:jhYY(_c!6|`,|D mv1 Ѐ1Wp/ @:C&&O {W7_~|DFZӡ8+f˜/d~8 G(JÁۭFYcvn:$_nF9diva.z4>LCG }~ Sa4@&P𩙪~J0jhȶV\ط4HtP w?f_|8,3H_1'mu8r+oe_m (!@fğ7SKDϯDm9ݗv  [+BD* )7ÊW/SW,koHZ/,Zm.4;^$_$jYMW/]COτv煠WP(& xiؘ#UP!X)e/=Ep &^A7|Ñ8,79;ESdHךb hU˟?O'V?Zؐ^ji# C&=;t4iL+ ʡL끭K U?TqE]8r{ as;P|"̯>/  m灶6qFXb rED3uHR}0La5%'C{:n%h 3,%kNr= 5ގ@S︀i.o{WЮ;, @~Rń[Ycg5j9$_FC5H8_h;k u B9Ktxm+fBشAu3^R}9Љ n)ԵG d A=Yȫp`(OG4@s)k!E\A' 7Wxm zBfJd"0[ w "[4e{RqG c3gH.jQqkXF|9~x7=G-<bS}'E0s?k~XfU2?.٠#rzBhIKE>$hȎ8Thn#|WE qXXl¬ONsTHc߿iS퓐~y?ɔLEBb6s&\Q"%vFCc&Ц)Qh~)N+܅XEU'?p~~ /o+k/YbzA@ߔF5VvD軥R .?@ tWCd˟j?b?o{B$_l@Ǽ6@;\rx |cEpQt9DO*C*&gӻ"2tO+fx鉾7M~?<ƒWݗر*!V~Y5qANw×X;qmuI{ hЁ;$&5ǡv>7^B@@QH_w՟51*!Wc6V$_ke dre!PqwQ칫avaD/Bp κkwM Cà?|/t43=o,"gTgNQV% Գ*G\4z^i$o *TXp .~g6Ԋ_@Q,-zI׺hV@`"獅T"$3l\yXt&u B TP9S5A%(<$hx @Zo}I_=?=2+E( ݢ24[@*" aRJV a +1{+fߧ y\ы+dMk 0xn%FsYߒo9q' TZZӦMO`,~ݗJ,F66gBѸ~1<\-rxsfh-F Y db8BP$V8R5S!岬Tr)?ր>; W]{ mR`R }f)X_MPePτCxC^]2cJ̫Vm㐶U =,HӘ4i5_HH3աGǶFFSj^:73P}? `e2*omّ$#_icZFuh] #XlD`| : ($-=4%)77@)v the7nBѼ~-XVAL{E+&-^C,hj<$)~P "y|_B > ǀeiQRVAq@XF6g &g̤EN)aQw~؊2ZA# XG!e vb 4D&C' M)E*eȲϟǎY69n,WŅ ;?BW)(SձW;;OrI@ڄo()t)N"=r] ܱ Uo.O^P Oxr˶;iO݄vqzJ)zm!' g@ʫ#)+H,hZva.d-HF 0Lg iDϩTQG@o< ^sbExG,X B@o'> v+3ߍM7r PSH})W7B@'ILήgA[ߡ'BH%7o6o,n@?|As]>gd@X@6t˃ "znsA&П| vO.χǀh!駟7@OO™MMA y+ H/+FxEq381 P9ؾg_ |ի믋 ЧXx1VX-xӐ9Hq P% 0`,~T)} eݽ|sA"7BOifX<س21|@ۛk7Eh u4W ߥg <#ٳg#t_?{' Ht$韞 e) fҷ ʤgz):C_rkŋ/7C_ӽ$ j% 猁T,s= }٠-ҕ 0[60!.Uyѳƀx gB]% ]9L| EM3 ト~ HX 6ɸ1 2y +5R=_@7 4SUƝЀ "Яx饗rwך~ٽw@(ۇ=շ44>| ꯯FXGWA1eYW3" |͵Ÿ]?]E@?ڊy^"=;$6A x )]cTbg$~#n AIZG=ʴKHۂĢfEY]yœO>)n੧iSɌ@w<[ 1 &"Pڿ~ @a?~=("'k̽W#|#<ɗ=?{'n?'|>?w^rIMSt$ ̙#Z ,͛I@I}dy~ج \H@OO(2%%WB5B\#" P2>oղǗ16H,ݯ5nĿ4e'XQyױvZ@ (6mڄW^y[4~;Hai $51+<) =fCnl"BDHF ´.Mgf;ŸW!ۧ@+:&'0Xɳ'7? Ro@]*T@rpɶ{`~Iţv?,{  rR9@Ni;R7z^~eqsV^Gb $4ؐALv"tt1?3@M!eڴ :]G`nU|Yy>}LsE{{9d2?re3x4i74C'`~1ԇ~+n =>an1UnG bf;ǽ.̫>&0D_AGo2P y_?Wz=++2>7J@n^H2-eOWq@a+\<@n}?ҥK T|xw{rٻp);O߷.}p WQD@ШQ ` s&dcFwNO}fv|l2I2fp(G(hD (A䢇9Kߪ?P/ R[1!&s?Z`NtuuU57B_}w' T .p`589it5{#v%ۘ>d<- l[nő#G)SO 7̸1_y("kZj~W^+@ _kv{E 4[`璋GC3H[H·yS DK}DZ>D|n(`+ȃi8>%Mާ L=[o"eصkנCZ:CҀ6%> uL,rÕE QY$ T 15?iy(o"R%}e۸q#4WEJ.Æ >eSZ"֐sZ/ӏz{W} @C>$鍁z}0ϖ/mEfqF#M6!{"9 {G{az YUPi Ȥ[},b `}׷F%{q@[Wl/ÕDoc۶mN(S.)HI KBhH\4~|VOb 2s.i6׀t οxxEڵk&+V~#YؕMP't\Y# ?t u}c?n-ՙWB}MEvQlٲ%3E"֒0A҄F[J A&'NBzo 4mȽ z{NBt(ZM@ ЧΓaѽs>|'NFyrd&`:OeHQ&Y:tl+o +ȍ1PaאǏ5mR GQD0m m@tvvb||̸ ~෽0Zz%wI\z'9kc]3끞Tt$P\ï.l?6+_{pSh/E8y2eB?$/,;zUȓ]mq@^3{ֿzh]G*wc\< &\1fDhmeAf@& Xoy+'T4 `lKoy Shr&8t(.M*޾P5F|7x\ױI 6w%?f@QىW /a<(|b)ׄgFww@h\L#5)!z! {pW &Ƃ%Oma p]ng {!}j4M+pcHӓq"0T'5au Yk#$-4~ 4|os~Y-9 5h/SQm4E@UI)DW]Z>7 PLJ䦄r/?}/D fu$? i*yǶNJ6HsP_I~b _ E-*Ze17_!z|68ԧAa~D3k&Qz.#Pl]% 3hH.j)hP! P1 /.1LܰT~ Ԓ)|6Zn gdRg/zVɕg1 f] uՈ} u0|ƻEX8Dvs5! d~JI#>-Ц%ⰽ Hi>hD[x,nBX`I v(dЋf L,W 1 8kRkƴhA_P!G@_B'_G#ܝ{텭{S&d@-K(qqǚH{$\ʶI z<E}*ڗ/d,VįnLY0`BLlIT4(xUFcSX &Ԣ;-] #3ٞC@. ܆:9XB$``) 2],U (*q(m:DBO}#`Yt)b @uc*`~ob"H#ER֤BpfW,NdaW]?/c?~ VG9 p'?z*hY6ŝ@A۸(-Dc7S柷d*,~h/1i  @D ʴZm<A6nd~BTᖶÚYO"M[^?_ V /sśtO~KK7bnzM8L!n} e^ 6P6ҏÊǶrJso>2kXR/ͬ"{YlD@e/:}ƾ >MEn _t҂[o ;v,/^eRb~I A29L~JuWPCp]-ݴ˯Ou2ĆS{?GtM4iR͵j~o'o~0~#X ?zErĚh@C_*::`Ρrz{'X_iEA׺o'O2 /91T4(0@#Sjڿ+C t6ۡ^q}ymƁ zr_oʙ&p⨅M;{#97-b9ǚb7>8H( gNYW<_%3d!7 w1' o}~ߜʟϯ7>EaVo |g Pͯp߈T Ջʘ\x/ y}~lߟS(Vw_D;'g8LY)3_oY4ȾBn_ h څ hPg&/),ΌH@, 'aLX=n1` FUVDܹs1}tݻ7hYz~(5٢ACi/Z4(I"/A%SZ}&9daH8ceE obT  1;} F#H:i Շo b)@\@hJ~f3 KCB,Xi3Nta@iI x%~^>.",X$"bV\/>jL0 ?PJRˇ1 2+j|0w+ ǡ 9l0@BҎ? IJaUG~97AmWضW7;*D(?U$,@6/Cw@:!UT {??k,\{lQkRhKǑέC W1@G_gH4| ewBx ᰍ/gItHvmu^E-VXx<e4M% =JV# Kh_Cr>7~Y4u_?^MXބuh?iYbz hlҎQ+O?|뚆UVq>}:͛g}6{ǰkAdy=@v,\!%)PF(LrtS/z|Sf@#klv Њs9T?fl2-LCDhvDco!EW_}5.WPUVE> /tc_ݙ e3,d)Ȟ}@<8! hUv":ghj sطoW1Pٴi"XlWXhkkҥK#T 6m #/a`U .ĉҪHX~=rW T@";vobBb:ujs׮]ؾ};W1PXn_ &`ѢE\aU&LnՅcǎaUr ڸҪPى.0bى?*իZfnꪚ@L DRVSNJ4 +We]b@TݻwWAO+V@2JbUq;v`׮]\a@kÆ UqS\_͚5 ^{m3Ui@Z*ƍbYgϞk+ !8G}T+Tԧ+WB`5jTs߾}U3561R-irEa1йPM?3gfϞ͕VCe7֭[qA0bc*sט[nGr:u ?ϸˆjeYU3i2Ċ+jرcdɒXu,(v܉^{*u2e WZ ۫b9_{5ܹ+FufV6lͪU^kM7݄ɓ'G~eYذa:4Ul6m۶UŲaҥ\i5 ˗/eݶm,W1PbY/^sհjٿ4K DTU ue1Unܹ1cFS4F TZZZ0s/ĉpBŪ 3gDKK W1Pu^:/:/~͑^իWsY&S^z饸뮻Ĕ)So~3˷`Y+%I<ÑeΜ9xUG^|߆Z%KF2J!*?W8TJ~*Ԓ*#ht-k׮?{ďȶ, ͘6m-[}s\9uW_<ݻwȑ#,kDۤ1cV\;P* 3f]'N   gYY%?-'~YMLd`ƈo줔4Eb&29 l gǹѣPUT1Q-1ѺDD"""9,j9h0bQ#b :xn;a #U+yny-H_m빠I)!0E?HAQb9E=hR~OY݊oNحWﱠtTҀ;.}מ˞|"ڠ)rs,޷?1PMwmYݭ AB㕎 p{S).`{Avׇ)A}g*}^y1Pd W߂@nc$G ƒ6\#azA{zŰT8 WZ&{,h<~AFЗg{1?:˲*h=QP[ AF T:TZԃ+-Azn>tUBBfy~$\1PE߯'_kWe`nUɈBQc FWQJՃ۾J { 2PǼWtqBzw#kݖo+ 9 Hwz.l+-a+;"o_/08i~^I@=]"7~:Ȃ[[nptۮF @%Uo|{ѥ UR/?o*]N| @U^;Aa!L` |B}zaǭ+/:ޣu~ůo:Мon 鶬 @-}^Ѵtk.P9-Siޥ7c >х= >~#Bщfd\~*bO q MizMiquzQzoJ' z} zN ; WۢґŽxWZN"r bVZ+q=UlKײh"TfB>,CE9?N}7¡:GFe@ H:l/9i{~9-o;=| N{0~8Kq;-sn[?(B={_O 4n,)tnq{!/S:]tἆ@آW\!i}݊h^5;A.#a~w('b':'n 7`_|g)8 [{eP)s%?m?~|*;#a D Tx |A`z H^wF *-270;Aw A??"?/0=h~!WRG2 Tr ^\h0g7x $C1..FBH%(rw@b븂0L:A@Ta7CՋ%sd yk@6x4@DDَ[`G@s> ޸ljܳlhYx! dh[ &oDD!5zn38{b}^!yk?{wgk*U&:{u죯fόu4Ĝɓ'@9 $ v!;oNn93i. E^(!@u "ˇE.tj<H]7[ CP\>G^G糭,0`%wC7O@Æ_%ڄV?CypُpA Z6@G `T[p 3Q-nV͒^[~j`y/=Fv ZVzRR݊?>zp[>#]N#^ PwAz+`/Q):ş!xyv X>_g@lPO;K^W Z{^&{p:r%8~2  Po{5nſ8 Q,DTdL8BvN^KD06tJ`+N[E@ J-}$Шg8Ǟ? p?mwBYk:hlpY_Zؽƒ"B|IBo3:kg((l.SQ]nyz~?GgO [Oo-Q=Cw'kt y5:+nI>S:zA.\;`` jn }"4 `ş#u2 4HB.~أ ^ s*: N> 8?0!"U -@Q)~,DDׯ~kvj#=3 8ODTYo@I}~`!?pE6DJ3-=_x`'" JF\wi`'" _=^ş xG@@ 興- {0YK68"a:TЈMfр=""b0bAvB'""}""bя?IW IENDB`avogadro-1.1.1/avogadro/src/icons/document-export.png0000644000175000001440000000241312250371054022073 0ustar marcususersPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org< PLTE~~~~~~~~~TYY\`^X]]Z^_[``\a`agfbggrrr~~~֦zDهPtRNS !"$%&')+,-13569<>BDFIJNRYj{{|^IDATxmMkQsMTD)BW]_.nT-P| TmkjI!M2s3w&Y$Cys,1`D` " PUH"\\D=3Eu[vp&+~s|B UbhҺQyRVyX)ZָVyUS"0(Un.sxrbM"R\x:w遧,\sͬ3#evڠc"@ʻi; \ Af^g|ြQfhC"dY{g`ND9ȯqY )ruyhAPC=&94r^8 M"?%mqȭ9tn2Y.y;^IDdeg_LE3hև$b9v٠|čt!FV:8 !ش]q(Rr/er;3tc649c/kR+,=S dd3|lIENDB`avogadro-1.1.1/avogadro/src/icons/tools-report-bug.png0000644000175000001440000000325512250371054022167 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<*IDATxW{LWwRmi)S@[t:I L͡Ӆ)Y͑:#nfԍD80+u,nI4:LQ9FYνws?=S<?\.F>iph4Ъ@4 < ."dlVݬT*F?Xqc-`l1Oll$ 1 T*?e ER͖\)͝ ʆHMEVaND8 A|2iĞBI=_`.Qx n.ڰ0> hp'+`%BNjRQz{S-ltDEEE{޵[zӦZ#9IӒ"1VW4ց2)C OT]]zADCA1K=߿׏p6d22L!555TUUEqqq1n؇5ᬄRB^j2XmT&Дa4қH#.:)7NF#7/)?YSa j"Mo'ߘr#^MJc34&^zދ4Sqxqy$DrU| _5:rSjj*eddP&BP /_9rk<r(0nwdb-zhoh{`Mb]*U111k렕 $CCT3(jԦS84?%s'ulBS=430j2glv tZ&dZM*>^(P<%FqdP~_;te8jNiS8zt+.D[.3׾[?;`{RZW Â__yXB7t)q5'$Й~} mp!nIjM_!4\?ݽg#"52qfi0Rf uSi;B~:pBQC&0`H9xFptT M ӁRJzԉe;as*;ƘiꀡeDڵ6!@^!RJDJ ϡ:Fـ ? ݴ\OC@i LÙfD+X 8dV?Ï ΎnC$瀣@#^6>uhB&lSj*nvchu 1c Y?TrFpb`=Xñ%[p"*ܹjkB@yG(9:L_X$yNbE|5C!EUlE8'U0n8@1AfMbwÁPbK`L7E)Ô7b8\m,JQXdkWs Uq@iϹz_F2q&S_^F_BDwsyj縚g4L1 cD'$`H1Z"97P4Wr\͉Qm 2L׀'IENDB`avogadro-1.1.1/avogadro/src/icons/view-fullscreen.png0000644000175000001440000000221112250371054022044 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATXŗOG?^ԸqdC/Uq|G\8UFJz .~.1`z $ӌ=7o  _0w]V`08q333?hϱ, 4u!E(A)a躎i޼`c{0M6a065>t:t].a`RJN0 gNsRcTUZBZ4*qӏgmK R''Rffaw6v_dsf^)] nwEӏ8iaY%B0U )%z D`n,_;7 0w/F$rFk#޿s /O26=MlnX2I "zrHym6߿xcl4"dEQZ^,/,SbssN_Yg TZTJ!ws\- Dh4]G(DAF,G/ D qNȧӜz&? NNI$Eb4 ,|ޓB6됧yGPpTRiS]ΎٹrSW0)nWwjl~[`tJ) @K#j@}h c0 vIENDB`avogadro-1.1.1/avogadro/src/icons/selecttable.png0000644000175000001440000000430612250371054021230 0ustar marcususersPNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<XIDATXYdU֭{{S̀L,,Hp4H O$!.1h4  @Aa #Lk鮪[w=s|Y <)ssoιvyWn$I`Akm%*щ6D$$5:xպ /&IB%$hA z|gW#DB$Htl[om" 6\[Snh! S~0AC( fiUrt6BH ;wޜ3QgB~Ryʭ,* V^" pLo@ X!珃$`} h;9Ez#$qnBMW}Iu0rJK)M;0? |W;RJ϶0acK)rF0jT|EޭrjfZnyj|zL&Ϯ"?cZ.!"bX<'"( ɐ)T*"Vj{'ir4AQ,_͎Q_y7n+Oot4U\,%_{r=NM {4E۶À[o'ONuFAOc|'"eXEVJP&?Xh "eemÃ"3gsWSE꜊5k1”3}Ӗ*iq,Μr)R@V:~;ry|%f @ϐWz(U FygZ'Xh#+N)!#x@ȁ.SFu' @Wi.)<\^Bf%CSC>la4T-WVdͣ7YC#   /U֨0^@+h]w p(*͔9")nro,g 7@z*q{TyB&B$*.sr4[B;hCY Z 0 5H(#}\>s+]x%<(ji#]Ap?4h{rt[ж= a $,~ËSLȉv3 ) Rz`ɽsa G#ށK˗Fj;5|WY Q VhN ( sWIGªZ?b"5"%E6@67]VۦyQ<@. [}oCL `¤ k l _])?0 T?scٹ"!9GpfsbOF*eDpRoz%PD&jo 7_ݩbc9ߊ?zد -8NTkԾ OG3oD^VO/:cx=][L6┒C : o{nIENDB`avogadro-1.1.1/avogadro/src/icons/avogadro.ico0000644000175000001440000112336612250371054020542 0ustar marcususers hf  V00 %@@ (BD ( Ά(   (0662,% ?@ ??RV_B'-f/b''t-i"KB5yruu6= "&m _Nbg ^  Tm)$ c M5yV G-p Di,#. UbC 2 Z Y-37Fm7f:* .i9g R?UtFjGE Rh N+ @L"pKQy=j Yb WeF \q' Lyn c ^ Omk Yx  Rj?}*0:gt7 Yv01pnA, `y= $6&EF Xq82 VHI"!|q< I 6/tvPGD<4"DI f~ \"""( kOkkov|OIN [I"!}*[*'D@FM ZR9U$6= dJ' -(,W,F$J<F ~ <<CC( @  !#%&&$#!   &-39>CHJIFC@<73.*%   S~~~{|~~~D~xX2G ,u/1 ?W/0,"6r!!t!!0ILA._+G| )FG"?@|-! @* @r*Zw./R; V-9,$?N*$$,4OA*$. 4g-f,R W? B'\3q-,V TA 6-+? ;! ;%>-7k..HIO_ ML.y.T= 7o 6< \.u.,<j * o TI.S&0w2 4.N%u7,Q,E*6(3} XP V_Df=iGqe1 ,)<g%--7*H**'q>P(zB ""-~-3E V.dxPe/. T d+;k""" .)2GM-J\&' ^K~3 A@, R""".*CO-J,h-.z% k:~IiI-jKQ,E$4e+p9|H @~ Q%@O$+5,V-.JC$1wp..""" F Qw@ c7-x*+-p.G4I"""""m }<o aC01{!<E"!N"""""pXY.N/Px!!"40Z.FK3"""!EP# -Z-9IJ2*$,)B  W,]'.---9Q12??81#C?0x?(0` H   $(,048<?BEGGGFDB@>;8520-)&#   !%)-147:=?@AA@?><:752/-*'$!   %6H[ :',=lzwA +;,F)E#,(-?+G,@)%)J./41`#/40..{ )E6s!!%<!"!D-U- Z !y-`e$' B` >z!!x3- _  U65 k..$-U. C'55="}3.GO(9"%lj`Njg; *2 c-~.20r!q1 l+k S>**,F5E,/ *<7 L-,@9,i*01m _.!$0 S@+^Y8*+3in4***1N7#>0f r5*0$-M9s    Q3 dn/*B&0NG/Yy R$%LD| >p'?`4u c3*=$.<K#%1 Q4+S"$''/; ! 6Q1*$.y6y ]. >- T#"DC-*.N6 cz:  U+exB,z$.j0OK$-4 ]3-+G-p,s*O .j9|7}j7g7S <+RJB;;GH?0(-*,G Pt% [ R#v 3>wm6 > ] Q""e1&!.Q?,;xt4-,+p+ ZK&,}+d9!"""P.M)1 ]9+dMN&QQ5.Y+51@~p*} 2,]B """"!j.,40fq5-U8m c1?o}I @,WA""""!i-$/mo3(3| 3%== eN1V R7""""M,o-1 dz2(3**7.C*6.!t4Pl>L;! 2 -N f=5)>$, T4-a.6O WP8-w =/ ^pC/Il?W!{".> X \E:u/*0*a<?+d,J@+0 ap=%MTg6 Xv=,-w! ,#,R,\-33x d-* *+1!f-)PF"""""=vz=%P'0 bzG8.*=. *CHC,4,zNK,h2v!""""""xB@T  90 [lN6-,y,R*B-P0!j/- b f28"""""""* :$%5Dnw Y;00K"5. U"" :"""""""0-e.0 X!!!""!q1,R4 ^;|!""""""/> *=.y.@ Tizm@*B ( -687/ T""""" B,m -"-J.36870->$- a !  S.(n),-D bk aC/*9"$)2.t.-q*1  yf1 L\[\\[W'?????00<0~pp(@    "%'*,.023567889988765421/-,*(&$"    $'+.259<@DGJMPSVWVVTRPNLIGEB?=:8530.+(&#!  "%(*-02468:;<====<<;:975420.-*(&$"    [Nh,|'QE" ~^7e),-q... Dm.z-.-|,W -./270%Kv ./55//--> -1t!"!- Ak!""!H/-"-I.t""""""`!""""""7--/"" u Z S Q,i+5 D 'h U Ui""" R.-/"" c/..-KK/..$.S...-./2 ""H-.S/i""e.T A}5vvvvvvvvvvvvxn"yD,z1 "/,t..4"/,c . U"" d/,,. ]"" S.*R-0"0-.t/"6.*,W.m" D. .3"/-,:. R!" X/*7(/>"w/.h*+/.E "i/-g-(.D"k/- ,..@"t/--3.E!k/.i*<.@"t/.,4.C"s/$&X/F"n/-)2.="0% 9P~VVwvtTvv @|VV7l.O ! a/--(.4"4* 6 3R"B/.$.Y./i! / [! Q/-~,-/"C.X V/--?*-/*$/v"G.,W./ `!! U/{.{+; B D-6"8/-9..K"v0' 1/M!y/.-"-D.6"=/e-p(%/h" S/.* ./;j! X/#f.:"@/.+G-P.-.,W+/.0/I"4.\ "$/ Y !q/BI//161/.*1*N.@"f+0|! T/##Sl.6"K.+ Y6:"""<.*+,z.N!n/ .N"5. <%/ Z !{0+ E./6""""";-./ `! T.- Q,2{! [/.,E -/="L.+Y/v"""""""z/-3-/u"G/-[ .L"C/.,-g.1j!!s/+Ks,n/"""""""/.j .0">.+;PK+/k!"t3.// T"D. ./!""""""" /-v .1"7.*+ .?N/B" [/' :.T/"""""""/,]-1"6.& 1&//7z"!s1.vS / \""""""" a/-O.0"7.$,* %!.4o!!@/;/'V./z!"""!}/3/*+-x/y"<.*-(..////-k+.3k "K/2"G/(_-/ S~ U/ S?.".8. `"!L.(&-g/4gz~vL/. 8 D!/4m" T/./.:x!"J/+u C9,n./////"2--C "n.,L+_. V"""""6//<v " Y/+iU7 0!.>{!" U0..*6*++M*+$.< "y/.T-l/"3-$/P!"""""""1M!" V/,sc 9#/<w "g5/.-|&**/k"!K.,#- U""p.$.0"""""""""k/O/+q ;".7m"!}L0..-*+.7!"/+S-[/"" ^.-. Z""""""""""//)f 4.1 _""tH0//-...{./"!</./""D0/n"""""""""""5Pi../Jy""fF6//7j""" S.-|/"""" /q"""""""""""6'̥ .i-.1 Z """"!!""""!B-->.B""""8 b"""""""""" 1/}*0-./1 Wv!"""""!m/-O$*0.1 Teh c8: """""""""z/*1[*B.../3M _gg `=..,-......o"""""""";-.._..-...-,E-/x!"""""K.,.`*-/P s:.,K/,i.////.-*+-D.n-v-`( p5 s% ????p00 ????1?@00`@x(       !!!!!!"""""""""""""""""""""""""!!!!!    !!""###$$%%%&&&'''((((()))*******++++++++++++++++++++++++*******))))((((('''&&&&%%$$$$###""!!!    !!###$%%&''(())**++,,---..///000111222233333344444444455555544444444433333322222111000///...--,,,+++**)))('''&&%%$$###""!!    !!"#$$%&''())*++,--.//0012233455666778899::::;;;;<=<========>>>>>>>>>>========<<<<;;;::::99988777666544433221110///..--,,++**))('''&&%$$##""!    !"#$$%&''))*+,,-.//0122345667789::;<<=>>??@@AABBCCDDDEEFFFFGGGGGGGGGGGGGGGGGGFFFFFEEDDDDCCBBAAA@@??>>>=<<<;;::9988776555443221100//.--,,+**))(''&%%$$#""!    !"#$%&''()*+,--//01234456789::;<==>?@AABBCDEFFGHHIJJKKLMMNNOOOPPPPQQQQQQQQPPPPOOONNNNMLLKKJJIIIHHGGFFEEDDCBBBA@@??>==<<;::9987765544322100//.--,,+**)(('&&%%$##"!!    !!"$$%&'()*+,--./01234557789:;<=>?@@ABCDEFGGHIJKLMMNOPQRRSTUUVWWXYYYZZZZZZYYYXXXWWVVUUTSSRRQPPOONMMLKKJIIHGGFFEDDCBBAA@??>==<;;:9988766544332100/..--,++*))(''&%%$##"!!    !"#$%&'())*+,-./01133456789:;<<=>?@ABCDDFGHIIKKLMNOPQQRSTUVWXXZZ[\]]]^^]]]]\[[ZZYXXWVVUTTSSRQQPPONNMLLKKJIIHGGFEDDCCBAA@@?>>=<<;::988766544322100/..--,++*))('&&%%$##"!!    !""#$%&'()**,,-./01233456789::;<=>?@@BBCDEEFGHIIJKLLMNOOPPQQRRSSTTTTUUUUUUTTTTTSSRRRQQQPPOONNMMLLKKJIIHHGGFEEDCBBAA@@?>>=<<;;:9988765543322100/..--,++*))(''&%%$##"!!    !!"#$%&&'()*++,-.//112344567899::;<=>>?@AABBCCDDEFFGGHHIIIJJJKKKKKLLLLLLLKKKKKKJJJJIIIHHHGGGFFEEDDDCBBBAA@@??>==<<;::99987665443322110//..--,++*))(('&&%%$##"!!    !!"#$$%&''()**+,,-.//0122344556778899::;;<===>>>??@@@AAAAABBBBBBCCCCCBBBBBBBAAAAAA@@@????>>===<<<;;:::99987776654443221100//..-,,++**))(''&&%%$##"!!    !!""#$$%&&'(()**++,,-..///0111223344555666777888888999999999999999999998888887776666555544433322211100//...--,,,+**)))('''&&%$$##""!!    !!""##$$%%&&''((())***+++,,----...../////00000000000000000000/////......----,,,,++****))))(('''&&&%%$$$##""!!!    !!!!""""###$$$$$%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%$$$$$$###"""""!!!!       k  '1Z5= "Xf9<"!Afv m!0(u?_/? (7=M[#JZ8N Wi$1)dzMn$6s2(,#'4,E-U-f-e*<A()8,\-k-Z)J)8-( -U.././////////../-1Cj-.././///////////..-w-O/.//////////////////z+//////////////////////-,i//////////////////////( 4////////////////////////..-///////////////////////.=P"//////////////////////////.,K*<//////////////////////////.////////////////////////////-+^/////////////:CM U ^f aO</////-r/////////B Yg ` XOF=/////////////-)2/////////6w""""""""""""""""!4wI])/Dn""""""""""""""""C/////////.*//////// T""""""""""""""""""""""!"""""""""""""""""""""""u0///////*6.//////5 """"""""""""""""""""""!#m""""""""""""""""""""""""""J///////"//////<"""""""""""""""""""""""""gTm""""""""""""""""""""""""""" `//////--/////5"""""""""""""""""""""""""" >w"""""""""""""""""""""""""""""O////////////""""""""""""""""""""""""""".[/""""""""""""""""""""""""""""""4/////.C*6/////<""""""""""""""""""""""""""""b """"""""""""""""""""""""""""""z/////--/////"""""""""""""""""""""""""""" _""""""""""""""""""""""""""""""""1///// .////1"""""""""""""""""""""""!!!!"""S(̠';""""""!!!"""""""""""""""""""""""4/////*$/////4""""""""""""""""" P8/////;N b`/.*<) D#G dM;/////5Es !""""""""""""""""K/////.2/////4""""""""""""""" Y/////////////..//.,y* *,@-.////////////////B!"""""""""""""" U/////,4/////5"""""""""""""!g////////////////(/////.,' -w.//$.//////////////////B """"""""""""" V//////6/////3"""""""""""""n/////////////////-{///////.-?*&./////\a////////////////////A!""""""""""""@/////-3.////1""""""""""""///////////////////Q.////////.,b '4-//////-&/////////////////////""""""""""""4/////.!-/////"""""""""""/////////..//./////$&///////////-"$-J.////////  ////////////./////////h""""""""""""1/////".j///// b"""""""""""/////..,b"$+A.t...o1////////////.,* -f.////////// C/.....,\(3 -J-./////J"""""""""""/////-/////6"""""""""""/////,s  _6////////////.'!*,////////////.&Å(?///// Z"""""""""""A/////,b//////""""""""""/////..!!|;././././././-*+3*-././././././5dn-p/////l"""""""""""2/////.///// W""""""""""/////.J./////""""""""""/////./////2!""""""""""L/////.^ )////// """"""""""9/////,////// W""""""""""//////3.///// P""""""""""//////,h/////1 """""""""0//////1*$./////""""""""""7/////-./////N""""""""""n/////. ?-/////9!"""""""""//////-U/////0"""""""""1/////-c,]//////""""""""""6/////.//////?""""""""""v//////,W{$./////>!"""""""""s//////$.B//////w""""""""" 3//////' &.//////"""""""""1/////-./////2"""""""""//////.D.c////// V""""""""""<////// ''//////?"""""""""" S//////-qT)//////4 """""""""o//////..//////s"""""""""4//////+5 .//////"""""""""1//////3./////2"""""""""//////.().////// Z"""""""""!;//////))%//////7 """"""""" Y//////-7.//////7 """"""""" V//////--//////G""""""""" >//////-Z,L./////1"""""""""y//////.*.//////f"""""""""4//////-}m--.//////"""""""""1//////#*.//////"""""""""//////..^,.////// b"""""""""5//////,y,Q//////3"""""""""s///////-D<*.//////F!""""""""!?//////--//////9 """"""""! S///////,.J .//////8""""""""" V//////.*.//////? """""""" F//////.*t.//////3"""""""""e//////.. .//////H!"""""""">//////.) ///////1"""""""""t///////*6( .////// S"""""""""9//////.).-///////"""""""""///////.u+M/////// `"""""""""5//////.)Q.///////z"""""""""1//////..j///////o"""""""""1///////)a .///////l"""""""""3//////..///////|"""""""""0///////)./////// _!""""""""5//////.$-///////|"""""""""0///////)3-/////// _!""""""""6///////. -///////{"""""""""0//////..!A$-/////// _!""""""""6///////*.///////{"""""""""0///////--i' ./////// _!""""""""6//////.. .///////{"""""""""0//////.*<z&./////// _!""""""""7//////.*+' .///////z"""""""""0//////.+M#*./////// _!""""""""7//////.-3' ////////z"""""""""2//////.-`H,)./////// a!""""""""7//////.(3' .///////u"""""""""4//////.-vV*6.///////k"""""""""6//////.)2' .///////j"""""""""8///////*۝-O.///////v"""""""""4//////.)2' ./////// ^!""""""""=///////! (,s.//////0"""""""""1//////.)2' ./////// T!""""""""B///////'.///////3"""""""""y0//////.*1' -///////L """"""""I///////* . o.///////6"""""""""o///////.*0 -///////D"""""""" Q///////-I 4 4 4 4F)O)O)O)O)O)O)O)O)O)O)O; 4 4 4 4 4 4 4 4 4 4 4 2 4 4 4 4 4 4 4 4 4 4 6)O)O)O)O)O)O)O)O)O)O)O&L 4 1,///////<""""""""" c///////.)%*////////>""""""""! a///////.j//1l!"""""""""!k0/////////..=).////////// [""""""""""; 3+///////G""""""""! Y///////.'.///////9"""""""""t////////(N""""""""""://///////.,m.M./////////2{""""""""""`S-/////// T """""""" L///////.*-///////3"""""""""4///////$ ;!""""""""" Z//////////-$+{./////////G"""""""  ////////f!""""""""@///////.' ,m///////0s""""""""";///////* 3 """"""""{3//////////(&"-/////////0h """"""///////0x"""""""""8///////. +X./////// `!""""""""E///////.\""""""I/////////.+X+5./////////9"""" C+)///////5"""""""""2///////--D////////N """""""" R////////0b""""!i1/////////..u.///////// T"Q-///////="""""""""o////////-,).///////B""""""""!g////////$"";/////////.)2$./////////3t////////L""""""""! \///////..d#.///////9"""""""""3///////) 1s Y/////////.-r-O.////////.(!//////// c!""""""""L///////.,@ -///////3}""""""""">///////.d,3//////////#$-///////+ 1)///////2|"""""""""?////////)%.////////d!""""""""O//////// )///////..N*+./////f.///////;"""""""""4///////.(-f.///////M""""""""!f////////'*//////.$,h///.  ////////K""""""""!k////////. *C.///////="""""""""2///////-\.///..,*./',(//////// a!"""""""" R////////.-(////////3"""""""""=//////// '//,h-DX_-///////2{"""""""""@////////.^*-////////f!"""""""" T////////'$Z-& ////////?"""""""""5///////.,4.////////O""""""""!s0///////-YE)'//////// W"""""""""l0///////.,-Z.///////>""""""""";//////// Ni-///////1v""""""""" R////////- *0.///////2v""""""""" Q////////) 5!////////="""""""""=///////.-g$.//////// W """"""""!p0///////.zj C+//////// T"""""""""u2////////-9*.////////@"""""""""9////////$r////////0t!"""""""" V////////.&._/////////u"""""""""O////////,T#$&////////="""""""""?////////- +/.//////// Z """"""""!u1//////// &e-//////// Z"""""""""x3////////.c -////////B"""""""""?////////) 7 !////////4""""""""" Y////////.--.z////////4|""""""""" `////////. :S+////////H"""""""""B////////-"+A.////////// W """""""""5////////'.< /////////l!"""""""""s3//////////-,,L.z-..-.,-P .////////68///="""""""""K////////.I*////////:""""""""" P/////////////.(-I/.///////////..+;.////////Hj////1i!""""""""!r0////////&%] ///////// W"""""""""9///////////////.*N../////////////////..T+/.////////e!"//////H"""""""""?////////.x^ =*////////4"""""""""! a////////0d2/////////////////////////////.,]-Z////////3""""M//////6~""""""""" h/////////%/////////O"""""""""C////////="@//////////////////////////////- ..///////B"""""}//////// X """"""""";////////-w >)////////2|!"""""""""u3//////// ]""" [//////////////////////////////.*0$-//////// ] """""" 0////////>""""""""" b/////////&' /////////I"""""""""P////////3""""""!G//////////1Ke~}e:///////////-`''.///////0|!"""""""" G{////////1e!"""""""""8////////.-Q+////////1w!"""""""""9/////////""""""! T///////// T """"""""";////////.+M,Q.///////<"""""""""4 @+////////B""""""""" [/////////( 5+"/////////D""""""""" W////////.//4""""" V//////// Z""""""""""""""!@///////.,:-.///////M"""""""""w2.&!////////2k!"""""""""6/////////d,////////0r!""""""""";////////*#////d"""v///////=!"""""""""""""""""!k///////.)% .//////// d!""""""""! ]///b.////////E""""""""" [/////////*HP%/////////D""""""""" [/////////-/////L2//////J"""""""""""""""""""""6//////.$$.///////0~"""""""""H////-'(////////3q!"""""""""8/////////! Iy-////////1y!"""""""""=////////-R I///////<=////// R """""""""""""""""""""""5//////-p-(.///////8"""""""""://////H }/////////H""""""""" f/////////,l 1(/////////K"""""""""! `0////////$Rs//////////////O """""""""""""""""""""""""3/////.$-D.///////G"""""""""{3/////// 1*////////4w""""""""""</////////' 0} /////////3!"""""""""?////////._#-///////////6"""""""""""""""""""""""""""//////..j//////// ] """"""""! `////////-  /////////K"""""""""!p0////////..*b,///////// T"""""""""!d1////////&$.//////////"""""""""""""""""""""""""""""M//////*.////////v!""""""""I////////-q 7+////////4r!"""""""""B//////////,\2&/////////5"""""""""">////////.j"-Z./////// W""""""""""""""""""""""""""""""4/////-r$.///////2""""""""";////////+A,/////////D"""""""""!{1/////////.$..///////// _""""""""" Z0////////($--.//////"""""""""""""""""""""""""""""""e/////."////////8"""""""""3///////.) ?,////////2g!""""""""" R/////////..-P./////////<"""""""""":////////.wf./////O"""""""""""""""""""""""""""""""" 1/////*..///////@"""""""""d////////.$p /////////?""""""""""6/////////.-J//////////1z!""""""""" Q/////////))./////"""""""""""""""""""""""""""""""""B/////.)////////N """"""""! S////////. E,////////0 ]!""""""""" n0/////////...////////// R""""""""""~7/////////} $./////"""""""""""""""""""""""""""""""""{/////.*+./////// _!"""""""" H////////,L/////////;""""""""""F//////////--g./////////5""""""""""H/////////(&<.M/////B"""""""""""""""""""""""""""""""""" //////,:////////u!""""""""?///////.)%F 5+///////// R """""""""!2//////////,n,)///////////p """""""""!r4////////.i-e///// b"""""""""""""""""""""""""""""""""""4/////* ,K///////0"""""""""9///////.  /////////6z"""""""""" b//////////.,.-./////////F""""""""""@/////////%-r/////m""""""""""""""""""""""""""""""""""";/////,-`.//////1"""""""""5///////.3')/////////B""""""""""=/////////.--./////////2!"""""""""! X0////////.U./////t"""""""""""""""""""""""""""""""""""A/////.-k.//////4"""""""""2///////.oq.////////1 ]!"""""""""!1/////////..//////////p """"""""""7/////////#-/////z"""""""""""""""""""""""""""""""""""?/////),m///////7"""""""""z0//////..T'/////////9"""""""""" l//////////////////P""""""""""C/////////- BX./////u"""""""""""""""""""""""""""""""""""</////$.o.//////;"""""""""k///////.+;a\./////////F """"""""""L//////////////7""""""""""! a1/////////,m///// a"""""""""""""""""""""""""""""""""""://///--q///////?""""""""! [///////.-("/////////2h!""""""""""1//////////0!""""""""""9/////////+*.H/////M"""""""""""""""""""""""""""""""""""2/////' -r///////D """"""""!M////////* /,/////////;""""""""g4////////// c """""""""" I/////////.g+,#/////7""""""""""""""""""""""""""""""""""//////,u///////D """""""" F////////"5s./////////I """"{8//////////C""""""""""!g3/////////#./////""""""""""""""""""""""""""""""""" S/////.-w///////C """"""""!E///////. %/////////2d!<//////////3"""""""""""8/////////, 3u.///// _"""""""""""""""""""""""""""""""""://///*+,\///////D """"""""!E///////-} ;-/////////5///////////!""""""""""?//////////{ -`/////3 """""""""""""""""""""""""""""""//////-*B.//////C!""""""""!D///////. //////////////////u """"""""""! S0/////////' ./////t"""""""""""""""""""""""""""""""?/////.*+///////C!""""""""!C///////.y)////////////// ` """""""""""t4/////////- AI./////2"""""""""""""""""""""""""""""///////.&.//////D!""""""""!C///////,yQ+///////////I"""""""""""9//////////.I-D////// W"""""""""""""""""""""""""""" 4////////,i-///////=!""""""""!G///////.y$.//////////9""""""""""" C//////////////) 0.//////x"""""""""""""""""""""""""""C//////////-J. .//////9 """"""""" R///////.y#.//////////4!""""""""""! X1////////////////.) 0,./////0""""""""""""""""""""""""" U///////////.*1-//////5""""""""" a///////.y# $.//////////0!"""""""""""o3////////////////////.* :,//////0"""""""""""""""""""""""L//////////////$.//////2"""""""""q///////.z-I--.///..-*1&.///////////!"""""""""""5////////// S :///////////* Df.//////0 a""""""""""""""""""""!C///////>/////// ,]//////0"""""""""///////.+Y././///////////.-+/n'.///////////!"""""""""""7//////////8"""!5///////////+N-.///////>"""""""""""""""""n2/////// X!!9//////.%".//////"""""""""///////.)%//////////////////////-"(.///////////{!"""""""""""!@//////////0!""""""!2///////////,X$////////0A"""""""""""""~9////////D!"" 5//////,* ///////p"""""""""0//////.-3-.///////////////////////.- 8*.///////////s!""""""""""""P0////////// e!""""""""""!1///////////,o7),//////////5 U""""""!D2/////////O!""""1//////+;-//////L""""""""" 5//////.#../////////////////////////////?Z,////////////x!""""""""""""h1/////////////C!"""""""""""!3///////////-$.///////////123431//////////// ]!""""""//////. -//////:!""""""""!J//////.,m////////////////////////////////-.-////////////}!""""""""""""r2////////////////0K""""""""""""!5///////////.$-///////////////////////////x!"""""""" \////////&//////3!"""""""""n//////..////////////=l  \3////////////*T!.////////////!""""""""""""{3////////////////////0 R""""""""""""!8///////////.)( *O./////////////////////////;!"""""""""@//////-*.//////"""""""""///////$#$.//////////c!"""""""""""!F//////////-'.////////////!""""""""""""3///////////,@ -//////////0 [""""""""""""!;////////////+G,i///////////////////////// Y"""""""""!6//////( .//////o"""""""""0//////.c..////////5!""""""""""""""""" O/////////.R,////////////2!""""""""""""4///////////-p$#.//////////0e""""""""""""!@////////////..,R.///////////////-.//////"""""""""1/////.*+//////A""""""""""J//////-).////////!"""""""""""""""""""""! S////////-.////////////<!""""""""""""5///////////. F///////////0n""""""""""""" Q////////////.-*$,)/////////.--",:.//////"""""""""x//////-*./////2!"""""""""//////. .///////F!"""""""""""""""""""""""""///////////////////M"""""""""""""6///////////"ud///////////1x"""""""""""""!e//////////////,b,//////M"""""""""">//////*$-//////"""""""""//////..///////e"""""""""""""""""""""""""""" =/////////////// _!"""""""""""""5///////////&Aw///////////0r"""""""""""""!{/////////////.. .//////""""""""""2////// //////A""""""""""E//////*I.T///////|""""""""""""""""""""""""""""""" T////////////u""""""""""""""4///////////)////////////l""""""""""""""4//////////////,]///////"""""""""|//////,b-/////2""""""""""//////-,#///////z""""""""""""""""""""""""""""""""" U////////7""""""""""""""3///////////+////////////g!"""""""""""""F//////////////.'!-O//////e"""""""""">//////' //////"""""""""!</////..////// c"""""""""""""""""""""""""""""""""""G//////o"""""""""""""!2///////////,v"./////////// a!"""""""""""""!h0/////////////..-//////""""""""""1/////,s./////7""""""""""//////,@*C//////F""""""""""""""""""""""""""""""""""""!9//////""""""""""!2///////////-(,%./////////// [!""""""""""""""8//////////////.-[.///// \"""""""""" \//////(//////"""""""""!7/////../////3 """""""""""""""""""""""""""""""""""""////// `""""""""!v0///////////-. %.///////////P """""""""""""" Q0//////////////.+M,t//////""""""""""2/////.-/////9""""""""""/////.$#-9//////""""""""""""""""""""""""""""""""""""""" Y//////"""""! a////////////+'".///////////@!""""""""""""""{5///////////////.-?./////n""""""""""f//////3//////""""""""""j/////--/////B"""""""""""""""""""""""""""""""""""""""" 1/////s""" M////////////+"e!.///////////7!"""""""""""""" V2///////////////.,c .d/////0!""""""""""3/////)8+p/////:""""""""""!//////),.//////}""""""""""""""""""""""""""""""""""""""""" b/////1!>///////////.)'.///////////2|!"""""""""""""""=0///////////////.-&./////""""""""""l/////-./////""""""""""/////.-/////>""""""""""""""""""""""""""""""""""""""""""0/////1///////////.(.////////////i """""""""""""""!g4/////////////////./h**./////u"""""""""""0//////////3"""""""""""/////-//////s"""""""""""""""""""""""""""""""""""""""""""P///////////////.&-////////////N!""""""""""""""" ]4//////////////////..{' )///// a"""""""""""6/////*+(3/////H"""""""""""/////-"*-"/////1!"""""""""""""""""""""""""""""""""""""""""""y/////////////.  j,////////////8!"""""""""""""""" W4////////////////////.,*6" $*$*O///// Q"""""""""""l/////.//////"""""""""""////////.../////H"""""""""""""""""""""""""""""""""""""""""""" 0//////////- D+/////////////j """"""""""""""""" S50///////////////////////......////////N""""""""""""//////*-////0""""""""""""//////////////// `"""""""""""""""""""""""""""""""""""""""""""""C////////,c%(.////////////H!""""""""""""""""" k:1//////////////////////////////////""""""""""""3/////*/////2"""""""""""""E///////////////""""""""""""""""""""""""""""""""""""""""""""" U/////.* >/.////////////6 """""""""""""""""""E5//////////////////////////////1""""""""""""6/////**/////4""""""""""""" ://////////////"""""""""""""""""""""""""""""""""""""""""""""l/////v -./////////////N!"""""""""""""""""""tB60////////////////////////0""""""""""""" R/////.7/////4""""""""""""""! `4///////////1""""""""""""""""""""""""""""""""""""""""""""""|///// -Z..////////////1p!"""""""""""""""""""" |G94//////////////////1I"""""""""""""" V/////+5/////4""""""""""""""""!uC72///////8""""""""""""""""""""""""""""""""""""""""""""""/////-)../////////////@ """""""""""""""""""""""  ^?9641//////17@j """""""""""""""" S/////-3.////2"""""""""""""""""""""!/////8""""""""""""""""""""""""""""""""""""""""""""""/////-S-.////////////// [!""""""""""""""""""""""""""""  !"""""""""""""""""""""8/////*0./////!"""""""""""""""""""""/////7""""""""""""""""""""""""""""""""""""""""""""""/////.U*B///////////////0 b!""""""""""""""""""""""""""""""""""""""""""""""""""""3/////*-a///// ]""""""""""""""""""""" /////2""""""""""""""""""""""""""""""""""""""""""""""~/////---.//////////////1i!""""""""""""""""""""""""""""""""""""""""""""""""/////. /////3!"""""""""""""""""""""4/////"""""""""""""""""""""""""""""""""""""""""""""m/////.!->..//////////////3o!"""""""""""""""""""""""""""""""""""""""""""""D/////-.///// S"""""""""""""""""""""G/////""""""""""""""""""""""""""""""""""""""""""""" Y/////-Z#*././////////////// ["""""""""""""""""""""""""""""""""""""""""//////-U//////""""""""""""""""""""g/////f"""""""""""""""""""""""""""""""""""""""""""""F/////,:u(&..////////////////E!""""""""""""""""""""""""""""""""""""2/////////////t!""""""""""""""""""/////L""""""""""""""""""""""""""""""""""""""""""""!4/////&v+M..////////////////4 _!"""""""""""""""""""""""""""""""1//////$#-?///////>"""""""""""""""""/////5!"""""""""""""""""""""""""""""""""""""""""""/////.-Z.//////////////////0 W """"""""""""""""""""""""" [///////--////////C!"""""""""""""!2/////""""""""""""""""""""""""""""""""""""""""""" T/////.?-g..///////////////////Be!""""""""""""""""  X////////..//////////3 ayg=/////I""""""""""""""""""""""""""""""""""""""""""0/////*=@+k..//////////////////////I asoI//////////.).///////////////////////////////""""""""""""""""""""""""""""""""""""""""" [/////.* ,@-/.///////////////////////////////////////////...///////////////////////////// Q""""""""""""""""""""""""""""""""""""""""2/////-}&-..////////////////////////////////////////$&///////////////////////////////""""""""""""""""""""""""""""""""""""""" a//////)*B.../////////////////////////////////.-l-e..//////////////////////////B!"""""""""""""""""""""""""""""""""""""//////.a-3-...///////////////////////////-,#...////////////////////////d""""""""""""""""""""""""""""""""""""9/////.'!a* ,K-/../////////////////...-I+/.-..////......t.T**. ///////""""""""""""""""""""""""""""""""""!N//////-!-I+j,-...../.....,K ,E//////2""""""""""""""""""""""""""""""""!f//////.$-.//////2""""""""""""""""""""""""""""""!i///////)2,$.//////0x!"""""""""""""""""""""""""""! ^///////-q( ./////// Q"""""""""""""""""""""""""G///////-(9.///////8!""""""""""""""""""""" {1///////.-*=.////////A!""""""""""""""""" ;////////-(M)8//////////;""""""""""""!s6/////////.-K(.///////////Cl _8///////////-.////////////////////////////////.-g*7.////////////////////////////..'-e./////////////////////////..Cq.S//////////////////////-,En-3-../////////////..-|*(-U...../../.--?*85 \V&"hCq 0i ??????????????????x?<?>? |xp?????????>???@`p??????????` >?|????088?<?<?<~~??????avogadro-1.1.1/avogadro/src/icons/document-save.png0000644000175000001440000000235712250371054021517 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<lIDATxVoEmvbv " 7gԗ T*oE4""Lq[fFzwBM3w775 @_D]λΛ, KxgHlQ {?iֹo~4ý:8߹ۯ:ȍYN,~/S6Hf$IVc웠yOgy~`n3@s -n,zž&D9a4Kh74 a pm V`5ɨC1S o%\(.qRCQә1<:WJP>4$Ȃ PъOtSq1u+ ^]1.Bi5' "ڎZ]Y95}Qw<2-HZMU.BpL5WDd<`u!9 hQt%a 'C׃K/0S]['=jO~z ŠV+8[I}k@X^?):50Mjқο0\`ⱊ/+0.saST, ,_ CZŗtܸyV(>2o3 ON( KS((N)x QKD-(dg0!#jj:   l@G$ +L"({4tࢢ8>|q$ +¢K $9_BdEdM FX_/z`V ǁ1Z2a]4M/I |9ߞv>46˗.}P־RU-E&ωP( Y+2Mv,^lULƣ?766~gx0 9=BjDП>(h*]2ѐC4wh4<"+츮빎(]a'/8"06}۱gxX`:Лap 壻f;4GTOD#K@4յ^xψȝL&5pgߚғCIENDB`avogadro-1.1.1/avogadro/src/icons/tab-new.png0000644000175000001440000000176112250371054020300 0ustar marcususersPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE`_^[P]_^_^^}>`f2^ Dn"[ԄAAAS)ߜيy5՘ϔDŽך̪ȷqqqԵհ}}}}|wggg0קVةZxI۩GLZ[ Tpٮd߸\Z–Ǯ˰˱庈LQhջ m@:anyygItRNS %(39DFGJO__ahry[IDATxՑO@^[z6?0qsu8_ !qNbHd0*m=6h{ޑX@h5OLU2K1-9/UΤ?%%MX xz[m+%)0+ B{g 켍gZ0#O:)&԰j= q5K)3rf JazaKC`0Swn\B1l8]$ 3ڵaW4cy}k܄H=ݐ$_RHX@:Ghb,JJEim)ل&+ZdTؖo0z`UdIENDB`avogadro-1.1.1/avogadro/src/icons/document-save-as.png0000644000175000001440000000415012250371054022111 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxWkpUonnCI v4EZ1L[V[0€JCˀm;@ mGej -Mt*㨥*L eZ0$%BH>rO=瞳w&65Ov߷;2c ɘn9< ͍GV knYE5H,j, Ѳ  HtGg6S(.."̛p rYCf:Z]>ϒ, ZJ#H&ڱX"fG?X(LRA^tu?jzŲ 9 +'P^.yYh&8ExnRq ;S$L1P5܃ γ@e@2-:w7{5va-5GBU6ᖕ+a1+3'f@OFa B.uC"FGqJd"6M0kz L˜ň7-<;:=SGPo l߸8䭕յ %a(MM z8`z4aW <{TR?R 4/O43m!]cPWЋӈk ~u>!L_)h/9X G{o@UU~huwJϐ);3wFYF3N4$4R<PXDYi]`^S))vih6Ψ:#P1۞x/> EH'I_#4l:oC$=u_}аP[|C/>9 ~iI eyZiSMCoN9¼.kxxՋgfs@ DȔ9 K $6KY Y TjEE}3Iٍ0O&( %Y Q_w@~+ L|qhZi䵐ڶ]Pks˒ &;YxI@OD"~:-&/4,;%G/"b·wIENDB`avogadro-1.1.1/avogadro/src/icons/edit-redo.png0000644000175000001440000000371612250371054020621 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<KIDATxW[lG=]5Ys@\h$"xᢾ* T(TD@ UB&!Wgw3Qۄguvf;swYRHor%f9o!տvm|XZ f(֤O=;_-mIc[v fn6lؚ RTcΩyø)~G{6d/\}`OkP t2n(܉":4[Z=^e wk.>5rTۅwb/* ]wojkB)]2y[~vxm6][KKX*"4iMФjQ=Xo7'0g{z +" qwIoњv3V+ T'R-OW%Ld[R]V$N.bFiԸD X#-vK 'z#0 S[J4on É+pPo<#P:e՚ς/=\r.T0i7sX]ZQc_k{DT+J (FX_4`e9pJDP#Jk-/#l ܙz 3b%ֈ;'B hҲNtŭCYEir6a)yjU~+LRdT8+wfm-[$HԆ2qH$Lplec^rhr8NNO]nNO:SJT BU20%,f3\~Yz n5XEz" A{1H%!UR#wqoFR־ f5%Wf%mfD`^wjzfm- +s$&*wnHG \ t-'5$a; |IENDB`avogadro-1.1.1/avogadro/src/icons/avogadro.png0000644000175000001440000014033612250371054020547 0ustar marcususersPNG  IHDRusBIT|d pHYs7]7]F]tEXtSoftwarewww.inkscape.org< IDATxwde?ruW;90% Q$("(EELkXwuus5 % ABsnxkaSg9yQJa0 aj`0 c`0 &0 a b`0 &0 a b`0 &0 a b`0 0""2\!db2 +j[&5`CQb0LL``āFm00'D$̋ږI"cQa0LL`1?hΏa`?s sEH >`DdpjvL` _0oQ1E j ɀ)4|@Dڎ)BXZ!C'c2CqaΉ1:/|`hs`0m,QJ#j# Nd 8 -`5L*::jL^4 0S~Qa0t*&0NCt Sh0xDDvڎ)vVJ!Ca2D(o1 .1 S>'"Ca HXtGma)n0=o8vdd  $xo|Mtk XDdW57V&BDn9J 1:t-] x ٜjOxDd0l(.S0@ز p ZvH  ~iU= "EQa&w)S0@ز8 Gl~`U)b{BCDKܨm1lEJǢ6`Lf85QkˀKZ1A#"'Cǣ6`L8p9^aҨ 5F{Y ,PJU6`hwL!- l#6/Ol@wUڛSR1:ؒul c&8ɱ収-Fmqd04cK ẍ ::F@D&S@30&-so15?y-&"b'Dgl 8 [^㢶%"z8\: ^0gf0L9ǖ$9h^l.Q "A$Gm5KR] [Qnزp%(.xB|VX_XOX*~BH 5\>\>T*"7 ±@M[Mߩ\`&-o ݻK&>+ ֒ +JVX~<ʫޥD/Qa z@P1jC v>ؒ7gHMj.sAb 5*OQybT53V[Ed9LL'sRꊨ0cLz@_/,ZM~swCUF(=HmugXy/ "iQahR18nvѸ/G~bKB݃󈠌>Ʒ+:;sԶZB;+^0@4nz>az~\20j*n@Q.Ylu~]+"r,j|>2a+L-NbV%8CzI/ӕD"6P}ɗZ&+b^bd& (3qlr.4jDaPŖ K)QH/ FqC F)e2:ftVMhL:=~:tH훣$wjRijǖ3+9 'f@&ǖx&֟-Ȉ?HJQzTaV^|2)DNp2E]08|jnz߻`:\0XoKb_ɤE?gFmN [^ 𔯗=q:{5*j+Zğlյ~4"eca:w)]0@8Lff_XyұpnYxR]VbG++>="~s23U`RjMԆovG ~x -MhƯV^t4plɢ{RsAgtldу:a#(7[GH Yy4plY! ]o1T\៮ԧcW_i"rVaXjIF'fr;ԁXy'?.HШ" ڐ.YrԿW 7;oq.[ʰ  }ez MUeQ.ZVʫ'Zcw%^}3'U9C(K7Tܮ|Wy 8M\ \}Y-1?@>".=y yQ1YqlslycO8 xpcK-e[N}{%&}x!ڋ+Exdt<Iql?7zr pWѳrl9!apcB;[~M~K)P:jF}jc5/f%Wq>#I!sh/]w4H?p&-;;An؎!{#ZGt7|NzU寵-{ӟj^Np4pc뭼Z>=y/ǖ DtLHK!Cb )M0X*NQj܉-xJW& 탨+%Щfx;t0%4cK?/;}Ƭ$Y)b} b=O2uyי(/Ա+VmM[kw? $t5Y)z߷ @66P\:akkYyDo{aF hM iW[SGg'a2\Y">3,rrE*>3FmV p߶wplI$uP/i]y>Puſ IGG6"/^Iؾ!D ~WMdb/_ =HLR?(?: 3'ls#/jŚY2Gŗ/Tt?1Ԭ{ XOĂ ՗n [e䜏 plIgJ;No ';.+0Cbakx`/8d[EG-'{=Kb8M'2f 凚)]P\:HWK@W̡H-< }RFmD4?A#.$5QJ=w~jݰr~<`ݦBP=nZj+I'40H6H_68 s𱨍h-z%XgOGR#%ԙauz 'u{lÀI71KB뮋.Y!hbӒĦ%8&osDJ)rcAhV`alt7u%wr#C 1rjyc˗zj5'Z(hm$3f,*4QůMb~ ÁDd.r`I6O[vB8-Rc"1/.>79mc=߭p?trKbaZW]sfv\$]g3L!UϜ$oFgM\%]FJ-qYHJ(.|ǖj >]OM.yߋ[bqO&&?'l c~O4v$w@-b 3(S[ʇv7pl9 =]Q/1Ϥ$>7WJMW"rP Crc4Elng۔ڟi _ Uqp \Ut6͒qm2a" !֗f h1^.ȐLn'wj[D|F3fe[ bd:p4qvֿo2뉻 H7`p"Y;jCƱegyD\/]qRIMb؏=op-uOA~\Hؾ~BR'1A&^6@O: 6+=02O+ɽI-Α8v }P/L9?8RsHWg9G2늵I"sy`%"QJyjǖNmDXзQ>8Gr)k3Py ~-q+=ut"^ =`Bz0oژw6g;>IN)IH&Fr,ȗ@Zp9iI ncci38v磃 ]ՅL!_1v^ 6{#cqH-c0±"R .ި? x?ztkORYH-|<97E@w8*h:w3 (臩hhAWϋ:LGk7KbaԾ Y[Juh>@"$4^T6~WsPAAmu EJԇleCظax|V5;;}E}%CK!M:P jJ}hoZNRZ$ $dHO琢i] \}2ڥ>\v/,4H Z`Z7zY8R=Ϭ& =HCrIq\ujkV3_(j+W(?ؘKsSgH6@2|q—U PuaԘ (>~( В_e!^ݸ)R~UsS5Emmښξ>暢DuY]gOjq.ݽ} iB}C­:*sKtI;"qx(20uy)'zckE}JIH-ΑڿΪTY TWCyJmm߬pC>vO$.]vuD<1U!φ*i@INZv^3%Sg,{KǖtB NY߻OjF兗~mM9gԝ c׮t s Y;& Td5|PCIY<θ ܽ`h *pl HB&H=13I˻ONں ?XNB)n7psCZ/Vtl>`PQPwٮ{`|a죔zQq- HKrlƨ<~}pևkr5=K_l/xUjNx?ԑ+V VHSچ ςg¯Zx):L^ӓ%\$*QyrʓcT6'Rjko j+{rݭ ^j4ن./  N = > noG|40%H a%3a oݻH/kM(69+ی##+-/;tcOT >Q[a0lZbpB~?k5Lptx ⩟dc!}p@Vّl'P[WBlZ"ʶόz& j Pɱ@ *\{& /;kg %C0!v8H/#o&).+nr5Scd vSYS{ fTyE>\ڷ]X A<4jWj`2.;Ks`\Ni%>ƄԢnKzI, ]x|sEPyb UT5X e3vϭrX}j wA7x͕x)~|Y۱寸 v5@T \ĊffUtgJ?:_X.N^RW6QAG)?6Hx^~or6ñE݀_z>o>_pV*.A[x7S}A:0k>ҢSNu pg%'H (;čwba!na2՗kݍ)7xmzʫ~ݠ$XL|f0쒊ux&^XT-II]Qy:ؠr[>g S&09y $!͑^ҧȵ %ʏP~d__*hq9|5l$_asp1V|05ib٘=7`ht l!iu;%ZbdVB7r!#hښ2G(?<yK<xbՋ۳-}KE/Y҃#d_;-ԖtšA-ZyDo'f/^yb4ЌTtP&lb4|}||6|} l=L Kg;c0H!sxیޭPyx#^Z i8{6+Fk҄AvmE51V5*OܻۭAMMm?9B=.mti%&T]|J&*1/χZ?Z2hn|-R+`V|4}8?ļbC#nIL+ Jhg+ʫhMr+_ .piWk[kʥ {tQyڕc8?[C>,?Wt0GM)v+.*iǖݛ^s\\[Y>'[: IDAT~ڍhc\S=J ׯsulYdգʫAǖӚz]Q\:@f40>\t$H6Fn9U(-Hr3p:l wL5jљ7ӜI/#}Po*0gtV^==~*%dע7@s׀BO?5I,P}ѕ:i᫸ Ѕc,bmot=)Onp|FSf9n)c(i Ruݵ0JD4A|F_ (?>Ja݂uhg+#w[wY\LF>TtZ[yDZ88]z߻l Jw2vz7Kj>V^=̛[nrsCxԾs*}C e4RʂY fC ޥ0b{\agC_8M}{DS[Ut0准#rjN+¨plĄHh욵s]:a[yh68+4ݻȽ)Wԇk nʫ6[NDGM#}IGO2v:iz57+(?2Bq`(Qcu](50G)5 "=*EA]xW:li¾6+諠ȮA۪=/H[f֌L%w\m;̭Rjʫ7V x&qT]:8x1-_<V^ɱ~`޻USudZ%%ą@jq jg… 5=~(E7ڥ jhp%+6DiL .?@rQ0҅9^dhmrl&?nVq=s)Rt Z KH%sn[~t;NjokvR[[tC fbzy ZKh]v1=1Ca*(7L鞡 姼n'2xE1!Iڲ~^c#ǖ )iΙKrW*ߗ 8ʫ;'zcK xc8]@WP 3HO.>Rt {-&x_[ υ(ĀpjPPW[YxG\\eKQN4dfM^/W{+^tr=7wM{Qg.(1H/n)`Vԙd~Ŧ%{U'UNaJKRSp|e5<WR_q1#^ &1?Mh+¾(.laN*+S ǖ]q# {T[Ybnvޖؒ hvzb/Rwx}WM-IRno=~.rb+<6u1T@5m+7LCb tWò3)_^9}/N!sErhCUJ Qo5YSV^=@C nd#:|[1_iG_WFbAr7k$C }Td+.[ j6Gz b YuL\[W ~%/YyؒFϛ b ]`ZI oy?C#o>RB] }cBxoozmO /{v UNJwQ[IgCE` ز}+Q *OR{HKV^ǖ]}42G[Uw* ]̵B*.+=h%x z\+8 (?:<^g'zS/@S[޿SfzY:<5U8-HPl [yj-N++ %g)j"r z{v<[Ё >M| ~@AoSHXxZ%wMBHeWRsҽCQWś~4&Ece_vmg>ߢҝu;V^]1ћZ p.KܹW~rqfD/[^.Z{vHjj ^+=$}Xz0oF"ſ;(V5\R"7rkSO.%s~%!!sD?ew4#CLuEgNv^;;gyGR{NA ❃EK7'6 sl /7N{3 1^V}Cd>./Qšd|>n(R31h|hX~%)%}x?\?ʳJK<˭Tlǖ=џyWj{Ymըw'y7[yfGz$T(ϴYy!t+p>+ʝ9AIDc]^HBH=z˴pψkJn";Gs+a閷yV)庍@DdvߔA!P(ťVƧ?[2cvƱXvmumťn𴙽ʫfg޴8uߴI  8ȩx/ #x yaH,7-SI 7 W:g\GD> |e[8˂ŎK*F>2Z5TCy \ r+)K,o84 L 5AtyG6lۈ/c˟ܮztw#]!g`8ʫG'zcЕ-0St6[>PeTG>)**SiC UNK^֋`i`pj- I%}dCCU=\aUtgfmcK - lkB xx1c˿N4R~j(rЦ 6`!(7OVR}Yݓ+&,rly+pD &d%s.7jR~ zhJv%iI2-.+Rѡ|guO[yzx=Q9케ą=dB=㯭.S\:@0 *緭DX \o : pZ$[N~v6~>opɨozE}^ba:٭>Xe;PeO:&ߎnsK6Fhq,*ҽCR-MKG2ŸN%hfDU0X}@ A_`CD+Õ ')+{cZ Qa T˦J_#~ /;pYCQg_;܍M+@r.rg_]f˽J7=fk| [Rۜ}t<=t0cx.m(!YI2G7z [3b]B|--\ӀJykNH{ 6]l,9̫(>GSsd^m'Q nA;~2 1BSVW.nK6F }PB/xpWW{YD0=@47"*7]Nh&`s$#C6mQQc=^3+q"`S5kB>-,sD.٣CxС'OnؒC~RܳqVx!tX~?G|`c';-Кn>}>>ܳʫlgI1~﨏lJަ[G}?NEjݻluuE"GF(=0׍G.ⳗN0wFͼłt iR'>3$gC|q+lž /!KqݨQ)6H,+ålNr-8| r$4unxԿ~A(pl *b} z/luEIQ漚. pl zBbBb =Hg'XR]VP|ˬ\4.!٧u9">;@(7L'hM__c^^+NS gcpv(=D񶁰~>&{ErN@U{(-Maedo)sRm*:iB;kތX.NE Ө)3˽hʫwjC`c蔸k2(p(cZyuaovlIGFbWRUE}42'R]dԂލ&.pJ\2א5K+4UGUScQ͙oc-{wr?USǐތ.+ځoǚ}Rʵ`Z'29=qs}W:Cy.[i9 4pl87"u+J|ʫOYr$;#bZAD.CC9L87NYG9NUS}݃^w$jKJW:;)5q&kuJ% Q;N]VMFЇZI=#>ǿ4-/Sk+X.`Z! &fZ>Rx{<c,vWMjtP])`caOè-VJ=Yr?#LA]' u1ZJWlو-{wKʁXXβWn:w([y͉("@$|'4٣pP뾊8٣t#5JK(3J|k ~}^G}0+R[vEv-a9"j(?:<- %pl9 ] цE%࿹]؈/>MVm=fTDo1As;P"sEjp ֔)ܰ!̒҇9I_RR}}^S5T8Br+`z$8$ӟ*q;Uj+W>pb߳AV^9^oǖRۚa}dO(u\8m^7O~ ]$61V%g/u)9 4!':0 3:\l 멭 H.zɾf oqҡ؂}Z {.7)~ı8/'S;e=)CBmMzVoQWEaV^=exz}B]A/xM_ n^/2.:ytr B9Yps=I S lg$]qYڲ>Rӎh~N,5JS8 ktb8CHȖ*(? ǖ݁_dbӒd#m6B S燝X&wq5WFϑ|-ۚh(PBH,Q.xChwnmcix5N|k"9],Gg 8$fg)A5V7ҽÁM-Α=~^pTtҝWojٺMRa ԗ#K=;z4#C&5Eq [_ =@hJDv[xE[IJ6go@KmEWZ-з}DC(T`gapWVo ZAGF &%L} n/+9MMTK>xڪVz='BSJ-Ԃ&plS rXog *cׯdC:q 7x~LR5ZQ`7Aυ<4G#WjJűe_n2е!Mq)l8˂Z%G㦅2kb_S]Fb Nz-: XrE._M:L)ugFlǖ,WVܣf''~]S8.&@1'yYyk޻^%~pxb!0dy._y: V^[ "G = RpERkyvKQ 7nZ+Eq``F._9(<cI試MK{,_GA!Ʈ^Ҋ@[yϞ pIV:Ŕ;s򣅛6PY m3"LOhAwO>іȶ*)P+zia/sd?L #WDK&"V;FH.΀g3i |%n@Rp(|e5R) U)\Ԇll^A|vɊ#W HlKBڜ []NĢ IDATPNTU1ӖF ^'>YI7YTCQ*3JǖW]\0X=+R]qe壙vc~,R|G h5-u `3D룶#Hbh@;=( _{?_7u[Txg±\'nrZ%f߱;)1o . 3.roCrW5ؒd0 n9\ۅKf)OU*{[J vXQo%0WJ5;OvBi\}Pt+dUzTӬϋ-kҲUj;9o^Xg;L 7`8R_Xc֖b×2q8ދرux G=1?<'??At𮨝?i`U8U| &6  @|˖35f%>G}ue6`o(nȸ^v]J92CGt>˯#OXyu/Wj<ǖmh[HB~x0Xe+qD(!.ptԜs!dVUE@T]k&1+. -7];{N[iA$+>=ҶXyxU5**϶e&7 эĔ7o~6M>ƋZ4 qIc,z/YHjp:+0Iw\ {uO9ȣNќi F[nx\Ig\O&v@>"CCq\xc ޜEƮ_OmkpW)pX7kl@V%ÛBB% }Ix7sZӳi\}oμ)6 K h_@_a˩ВŸ$v{|Nj\\+l b8 s5e?0%4.~3-U̴U:צ:.L=cdON |?7NV\sOxgr12 8͚YbݓY2ywV3jƱC=_ .ΜhJ}W:ʫdV[ "_>~sR|q,??mS(7P[̎]B~҇*-\yjŸrx%ȹF)uJ7 >}V#u(3fhA8|_h \le>)"G˝΋!_ `I찍t09`v\̫-'-\WwUyX×WkѥJXZM[nm;~ҟ_VusځV^=^#ͱ<_?%}:sli!>:&O S#8]'Ϥv1!}P>W? d^1v:,)1!sX}X lLܺٙZ9͚Ԣn7#>'/>i: lı<_ .:fF~ҏ4w`\Vuh>>_89B(ś7P80]t0U݋q,1vz/ߙK}n SJ- ⍮#Wg{9NSMd|FZMqW⯳AI8g㨮>ޭ"ɣnzq`L=JFH%%!!{ /=W5k,kY'ƸhwH+i$ΙK;̹~T.BE[xY۰ܛr T Ө o &QU)P:[:)\hQ}2FB_|j߃7 UOI=F'0J7pz 毢~bR$Ǜ?N:?e"I% {zfe,r}GV%dxT£f~d[M=/nm\ɇm+:*hva)U1f#/@I@I uvTďm'd:~-4E`YHUŶQxhcdWv&'; 3"ԟ:1WJRv38">RINsn\][z%&=[C"7sc-0rThH:>EVvw`kg(ݡ曢=D'x.)JLPX8."u{%Sl5Ⱦͨܿapw Mn\`$8xfH߷TnQ@d&ZM ̪\eT)>|C|Dk)][1%tj*c4Th8g dUZip^VU$KUL5#Y5fWeS+p<m'vhi[GX#Z(J0Omc)6ٿ_;:S$E宾_S~͢/MNu6>` ~fX-@kT@TA =n8$߭T˜H+7z ]N7,FN#v§ -Kè_53. :_d l5شJ}ywfk 4|q u1/-kIP9 6 o_U|VWpOr Pv^0 }v]Ө0,5LMac`?Lue>$F)5{ױ:e%'6]{Eh8{ = WJV $^BKik 'O$vx\P6x҅ߑ*%"=1|J,BS c80jdl(vb&+_C&Yu ̱LU 韣V}O;'-s%2BqECl_NeGXpT;zlPNJT朥0WeC7J_OI]x8H.eURJWGo/~;6ٳȽ:@>zS/ L!{ 7n"Fdf|4EgI+Q8Xh D2,SECB.Xm,YZ)ЋFBz*a%fw Su>w*] bru,3EUUR}5{oRU9w]Ы}rYDKTPQ7ӠnF!r2]Y4b_Z_&2UhH_ϝ nu7>c$tMq\v80q@w1`Kȿ'XU=`k(J F?a*.<|DgpdW6d\?/rkHִ }?o+C},|;LùS m%kx{j䘑on Ta/CT᛫6ϕ0.++L P˅O;6}WH#<{[a>jwo|nڅC[ʼn׌r!wK)-w 8Kop:.4'o*οk {%9?#𵅰`x1Z4e DW9I[|[멄qYXoUICQA` m=c;$׾kj8Ya7s\5Cv5m_ZV y]'soH#_N ,QZ921ITɸaåފ<;{(̗=zx1 _^v߰vTΰL4P?=5Ӽ^S|J% [멄q]X}s8{=UK$6$oZ:T`Y@)# OSe70 gL"W+a^/$H- }# clIj1 ,KYȅ3KS'"j0C!w{ZqV<ءLK }IA_X%Q?L%?sZM`` ("{7p$WBK" ~<`+#2FBg)3@C~_ܛI+@9Sn$wbR;݃0 MW*paH/_2#{\ZNxGPVӻ8*#~Lrc:["ycEFB;~*oW5?N% ̈;_ /GqK߁ z >F:vp]7]NUJ_zgK -_(SUw[L%4|qj"rwVrFB;:jī%#z)1prɽ:m!{f1 Pw:e7B)]dK \ݽnlO; }HmFB ;q艸.dt!m)#> -&0lUS'Tp$j)WX+-\^7 Y&} >)2݇m+`RH,fMlVMڂK^ud[FwB#;2G9T:7|F-7pDz/^]6u] vXk4Y8`m#v԰F<ZPe5n`X: AƄ@${y?"fJ/TJ~ЯwDfI2/uC7ЮHajsR`t1"7bs%2ٳ݂p|{b@Ok+*㯌eob? 3izڣ̣xf&Ke؍N^;ێȽmr$o2(8H!RaoHKN{tȬ'o3*"V˓tM?m$nw T'cJU!u{]ma ;zD5vBZ32 \?̯^[x Lp$)HQ8)--RoK1Ϸ' zP+Ǻ|r},SNu(;ZJBTDxn!0#̢&ϵ$s}kЮ+ B9rg$\G=|\h$nZw9Ƅ2,e~hFB?)v ~>HݞMʊaԝ,W|#e&GT;t DqǙ؝#}GEr.y 邋'k]ybh[ "bGRq4+)la$t.%RV Q "6)!{-InpWJˁh7/'zBDn%0V  `EZ2R^ˠޖ{uDgԅ 3HDy9mWޭ.xLkG%Go&UsC{/L1Aʳ҅>c_1z;T-^PBn{,jY\%yWǥGRlF7h ؖK-'PWlLsoF}0pIn\_mռuP|ihY-y7jr/ l`(Lu&'*( 7Qϯ#ymg5._7"7/peb;9"0(NI%y8p VJqdhShI)Yh5#+>\(ڳ~3Eֶ5WVK )8g>|TO?X/-g8X LԪ )7uUzYb$nr /pej̾c L,U4VjU& Ra`j~8|lTGd/tg_ {FB/QJ<VvJ'juζ*[r a[ \:KiWijv_ԫ#:g"@5/^PMe~#wcMN&T@=P/ ʀ-W;= |UvQoaeopу[5앚/r .~YXB)Qv lWf "gaFN;yxv\2}W4[XPԟ.Q2*$09LVmNIKmj"|{Y ZVT`+c@٨ɢΊH'U3 .rҒx g L#~l_@)Y$uc'FJ,cr%Tn`jC[ʑb/<\n]IZkDRR^pA !uO WTr'I#pg?z׼ bk,+_|Nlk!uamqAgJ \bOeef }a6W'9k?D&}O/ٗ].ҦoP?_M3Z+~EdO]&ȗsO 5m)$+Գj]n5D`wJEwT-Fz p>ۆ;[n<bƝfˑD5.VaЇKI/p T?~4 ([Ŀ\oiś=|z(!jl 'Jүk!s7(9]->~]}d_Un;Ӽ%[3a^Tď ;&M#BQq4W%e㱍o+0M]Cn\Ұlke[eޯHzϸ3ׯs%2IMK"%VbO7( l]~WZv$ƲL .eRP'D8_Zōvޖ&gzUZK _c1}ICZ?w{Lj?5'CL٩n D4ětH^_J)]۷yZZ Do:FPJ1}voLh y<鹻 IDATݢ m7ѻh+TP~tϕK:Dݮea@gK$ { ԚKM^NcC[>~`jH3%ޙ6&)k ;TI-Eev\TkR`PQK1TH@$J|³\FqK92]'7w׏;6E-D#82YR7w;5H6^0MP~ |U"^x4>̐Ӎ||[/s3Wbi},ޔUJm uf£>Uck(.GXye%A_:܋]9Rs)vU5^ZۗߦݴJ/?/r BtV+ >c8yHhKKFT'Nh0r_Ҳ:W~07~彅1|k?| \_+Vݽo%=lzhsktXv#MPIybeEyluա!mX{^$[Gl݅]]pNI\j$6`Lhc_M;UU5{Ƚn(/`GfߐYOtfq/w)'x{Жi}iύPKB JWޯ[DHOET]EYҷuKjk CTCLC.$z`KM \|_By#_Xڰ%#evf`7xu4<1q?2lz!_o_m"o-7MQޜwE"smQZA)uQ#fࢩ0S/eI]ds|.EކuAj 2vDf#r,3E]N~)4OKn`L|A"^`j#54.RR:@1[>|$Εܷ+ZV|y!aZD4FQJu _৓`௙/'zp+Gn릴Lv43UL\ԍ]Պ⬖0ㄶ6@d_Z.eu%5e3?TO6Q]Kze]@E|DgR~̪0/CJrT ~IA_sRn`Tm?}PEq&m=ptD>/ɉS wlEMjn77}B[ niPXa M\h$uA/!,S}$ܺS3e`_ES 絭l[wF틵_ZҸ@)u4ptٍɲVԾCZ]9ο&}[%!a_cmU!}oj Tȇbs_sK_sXfQ%J"yR5cZ |HKܺp%5ef;I *^.vfY~cWe_ ~ I'W]n\ PIkHqRZ\M?'~j;=8:U$u{wW5>7̓n>oB_̏Ε:E7u0Ἡ[x @ b*=&xD<_ؑCsWL$vD;aby)*[٢*k^kTOX3Jˁ܊{. kua0|?处SцoJRsDU G #H%5e/w >&}R^x"5;PQY=nu훂"JOOy:_4Re=%9Rtޫmj8wҤvYVu.a$~ƱLpD&Qb~r ,KlGEi!tIeT9Uw~Z녢QJwܾ϶Ql*l,o+Xuj&R 6n'zjK#*N3csKFf`|ďPa 9]bˍ~Rbey[:u΅C+_YzoW"R~: +D8z} &oc7M1uK߄ L )̗y)<g$^[x (2U;pH@"3l/i"gun0l?ȝ}ͅ4q)Z\>PJM>D_o|*LO ; M)Y$}[7MZBn7%,~\d$QeocrQ! #DmJVm=o!K EpUЮ({F}iPQEݞM"? }C}?..3ZVEFQH/:$oWOdkIǁ٪o;Ȋ"S)?Fޟͅ& ֋;̅#$r'p-c-`~Hqu%TgGj *#vP+dtD^r,/[km cɻ ?r'hmV.h2/%;M-C]vƏX8#yHh_ j/XcѾ0fDފ^s`YRt?6. F)upH*+֘l?iRw5V@pw/-S)`wQyY <ܷ"Ax 2,j@e = [a Kt/],/ W Zw:QJQ! # eEsE |3B9CꚷLUĝR1#=F-^0FL5 [/`gk ? $F[eǍI9aNP%lD)SGx)>62M]|#78HToxej"q?7`&iv9;؛-mx l-+ұ9FRSj۹ﲞZ(~Le=6 n!zX ;E3KnK,#GӁ؉@{_ I#UA,S] -KJhsf&so/Wm^I ]E) Ps@_i%QT&`/7Y FB?*cx1DY,2dxabGkm+.zBo#y 킋AP'u0NPJ=\2%OϬ]R";5٧IA0V=Krox 2f` xO5ݧI\tedVnZ6ҋ(.u?!-a[jn˓bXeƚYXKNv\Wa]~/ IN] vBv~ZEeRDd0\:v "o3 (kKec@*x (Y ^0Xs?1Lv|}EM>{? ̳-|G3 dE9HF)H hNۻFp}ᗄ7o3 #UKFT3|Z m'zp+* W+-+EalJUϿOOz<@)=#6 WNi >ci r$o|8HhK"2՗^Di?Ͽ&5=(S`}t7=pmA5("p48@h7^mbrG:S$9‡"} D0O%Èe0p99T|޿`)܌ZLEtyܫV|R`Y/2UpN~bDmqMݘ<ĚB !αxtua5_w2!2YR7vQZN3:eK@TmΎ)Dj]'̏g Wxbv~H16#!eVr]N35fžv`@`r1J"(?4!,Sm?I;MֽKP ~itta?1^coSq[ȭj1);ŜĎi'0U/ޥd_\.lq`jlY_G| c;7 HE}/8s><6z{;ս{lWaU#|4Q9 5-_H~TlF5eXp/f;d_ }wP'Ɛx C,Sݜ>0J6=o9}!|pGm]-[ IKG%c923I?5겚DάFl*H':K/` PaO#1Te*p!M;6=ETe.-[+qei ,SEϜsHAtfŸ4ѐy'5|g\9 jshxZ>1W\"'FB TIUAELҔ:ervs~U|_0E/@H%a&0*eYB,Suw;8XOHM=R|=8y}/-.8'k([Aqѯj!1́w}Eg<%`j+.`8z?;wO6;,Ik=oywxha0.1΍Dk=|r$B|$^0D,S 8Ju!wjm Ak !ZMlτ!8$~УRy2زۋVPs#u{m-sD9ش 7;B9Vn~FB؝`X:u7;R Fm=Gh .X Z @K&װ:ưj[wGtO+vcF-!@Q~ *,ʒSu`?#,kL%l`-X: Tc'f&ug/W9'2p҇XxAo7d[JII>ZL5vgcٯ3)b|Tk pT:,R-Kb HF5^ʊd$ )+3%7vRȹ|uw޿*р*$9ݯ">z,yK"x`)p&~_S謖-/sIn$upz0ic%M^~`#%Qe7d'q|rLԗ`; ~.WuzfQXPnvEFFB/p#ڰL~]'PT|l{o-ᇿM !t62291%J`%V79a^ ˝g8#xbLK8cL;ycfR >4 )c$ں(OR:v`Fof3/`YQV~ W@_R繷Sou*T;qhcgr`{N-Sm;Eba+o "7+n 2Õqڃv`:LTP;M%7tQ縢v#]kqǕ&VħJhغ:QlRǼg6Y&zP+vw\nzl2v"V+¸nFWH?ЇNN'?8^/@: "{7Siٗ-v,hr+px e]u'TC n(7'鿬h<5 b&_g6G}dןJ//J+zp:B-lwlkC[}s~`_}uNkTEx? z$5Za\&UTGQ+,t:0|cc~[dGhsU2X`$vaΩLu"O՛>@D7¼ Xx6mr4WI^-ء٫~NlEQ_RH%;=$`L& \$Fdf}uDN ][\ܙ%uyxxxU2&#6jBlV; -ksSͿ,+RE\,H:,.!N]ߐ? $x恥WF}OHpG 6Zְ3*mQZ9Yytz椁 GTEd^ezv`'7ئk G=Y]ؕV5l ep:D7rpR;2n{.)$1FM26Bcm p62Gm?TVj${؝J@3)jJXQQL>b #/XׇRO90zj.Ll[]ܷs*7tk`xj7\C7=<'tVswp<<c+MrrC thSL<Xm W_JYGg WTKMV,Sk9ʯ.;sC싷{xxN USPm‡R7t ohDHR p pdUW*&*SZV y{FBk<ь#̕NdHݶ&BpXˣ#F%~|룳ZmVt8u?T3pzxxx0QJm4˰{#IN?VlV`n/5X:a4Z:~ +1pm'0߯t/s"Pss9 $`$g|jOq۫~T7G݇I,S\\|֐[PI *=<<(Dyܫ@Qs߄:-S-jD`jk*\OpeRj 7VsRj;`BL޴EHRw/-$|q?'MDEvkc,F<LD>0#B6 Rr9mac,!L3N^*@[X1|MAO@V? VlAC`Du,Sg!O 1yQȏq+?#J jzSIbk!ym'[O1*\HoBE7kIOle=<<axJ@uH%My}b9reֳ6F,Lu,jU1ϐќFBW=^c,Jcs9 8K8y-Do:`e*GYPr>n6妿\;r:IЉNW}pЃNעRxcR  p4P[) JpvnOUw>ƘgWQ9<j:hՖ5W~waٹ&~&A jl)Ic'ծg6L|PK{;)2vkzúĥhOpQ]ؑeS6H̲nt;x/7Q1k[Q96ہ֪e {fRK6d"F"eE&4rm~ Q݊(rey6r5$ekL}ē?Viw.sI.=?ɯ9h_8/>= +2~ B$ego`Cɋ2ēLӶSPCtJ۲KFj׍ g>Ƙ _Q8CoKRp;{ip7RM $eA(5\i2DŌXD>R$XəV1l˙YtNSѡ5( )A(A9EzCCGXl[KNVD:;s n<~% >`ypbm( Gghk3jti gb%IZ1֑Wo*oc):;%* "-((A(>k[NjM&oO8jaS VVؖ3%d3G|wҵr[32vEQs1n'D{XQ{ǝRZSfD_*IJ>BlZKi5S Q  9(D^//{ 0U ?.PՊB*P$Ɗ֥"MӇ=I%RyEQ1^9q?,;g=h(o3'cl %%.e2unh$ QN,1hy(gl9ɧA( |Ƕ\j: ʌ=m'j#IՊ9 8ݶmWJteA(853v(J3\EfN =u%nj%)WՊL"Zg/܆iJnni1 EQeq7Ƹޒ ?-'S j? ]Yv$n!J8xM3Vb: MxK<x\)k}f~v(fDU3 @bJ-ǚ0DKP.ukLWz!(ʽ+#&3W?ܐѧdh례#?!Il maɎC@4ǭwb sc:`YM5QEQ:s1wIvBrڟڎ$/=+КT[ ƞ8&s&RZHSQe^ Wؔ0"< t17uƘG׻bs8? ax.ob6b=Dly#cEt&!|XiQU)M01SLsͯlshO5xav0 hs%g>rI`]36gay]p6gm@ Պ 8>V0w#phLju ދBŊ!ʏު06;+yh>}ٯו]xwڵ̆2`Y]k5|D$]6mQ3y 0t(K/xfv7 hq1˛O<nwϷ2I&Ħ9i6li1f)-*o9scdSL|~Ol~ +P}R By/p4Y^c,ݜu{Ƙl6IU2)?zxi 2m%(#K2Mcu[6Hlxki ua< 9A('/Kwt./3{ldpMCb_&N-ՊR obm@bNbXZ=кl&4{zGU+ {20Z+z1θjH|;7L?Y By F|Bi.V3/$˜n}{R/> rxkkFV 6bqcC6C 8du[ 8,JiHz'vwGkyZNϰ뀿' T+=DSjj';w82m]·w?̳ pC00rRj)eXޙah]6 mtצJ,޼ K+ B.炼s#w6Laɚgq{*e4A~qК[d7o>2H'w~H0Me3J P~nL|3:C8{]7}֏d;cYkƱ"b2L^`^2B`{xo;6p8Lr:#e.A(ON.fu=u)fbq8֥"*#'ZODiMUv v`(u`J,eÍto;kY;?6\r _Ǝ ,.OxMa,չeFJ[ ŷV7R`<3r2ݑDA2Eh|&!J B/[9}9'@8௷sQ)fy`(i.n-% {'F IDATh]ǥ&DG=ԕHF2WKܯ/]1NT` R\"c.C'iMqws{maK6mnsFuؙfՊ9hT,9vyA횇b7t3 NX¶k0GjO_eo[iͫؿFD ldjfn4i)τvvwE7;qmbֲn`ƃ34d{p\jea<;P. B#W%!9(V̇}j ?<óy}Ϝޣz9hN3-4Q[>&ۭccN@~L0K=u%F֤5;gZkv !Jˆ0KK!ڥI+h'o# gAKZM]\Q'=y׀ |j{s^k2'4s4s4#QpL7&2݌Gi#hLK婃m*/2zJpMýASA% &rcCË S Yq}2Yۘy2VN%%m04̯ c(ѡ4i*@_ e!EB@` f8rKvshտܜLԵKc{K3j0 F6}.KV:s& &bԌ1omK/&})cFKѦr[ž5]ݰhuLMY> o~ӇLOA(]2 |޷E/_PaE"sB9Iunŷ.WSfeo#%G~!eOc=3{|>:qvlNlmCސ2PHo;¿pbo|" Y͓nuy2%^ioa(7}(P?㛓p@Sn7$NK aŏT{f,,)J %1P3ې{M/HϡÞA(u2g~恺!}ǿw@t|(G|~KЕ(3M&֐9h'mG[gjðYk[ @r-_65f暇m na򡆮6q%P2ȯ(\{}ېR&/e;AU@cW?RjJ.ģbExW7l 0=?vTG|h4-v03&~pϜS "bDQ ʗbOʉ].2m _ }:yW🭛i_IXLwrtSQ \ێ!+dܭ:M/,zB7G$iu3֟Ȝ nPq"zc>ێЬКrlL~c}X[_呃Pk5 sݮۧvwu1\g/_w6 &/ŁnOb.yHںL5b7>sOA渎ϹE2mGQx×/ f~\eUՍ3+ b Z1e%+OIc @i0O]+0ˆV+hG߆(J/ay!-3vŭ70JԮg)}qaʢ@b,2 1[:||+ӬW7No;k'zh|ODmƘaͱif~{S6֏0~`h}W# ~swM4 KՊy ,bJ 5І2CF(+3uTChN7uhT9~j[1*7+E3P^sG(eĎ'3m`}|fPZۊ)SZ>Y6DiYyi MNc=4vQFcG-!g]HT+eDVsiiaF fp S607҆ 2DtT,Md6<;ki ?֠1lb Uc\ێ|8+uEJK#A0_R._WdGҦ|xaJ=||Z1{fHZO\dLecb:Ei\c8Ʒ-E];H9ـɾ8o* RՃP~<۝SmG-O;JOqt}ۑ#/~/gw8w430< |۷PvgorCZ‰ B 8 x?xBf;[|Q0.o#[_(';QnB 笇2{w8ҷCÚ83kw}0 xrT<h^=σvt cF(Jq1 ^W} 7M ڄx`xf`kf 9D`(O7mKG9djEQc\vObgxʏ\T* By8q m۳\?E9T{wͷ y_Ps!bT+(,i؋ ξ_dmGUDE71`(7_{Ofq | zJ&|(Ŗ ir8Χ "^F(J?b 8׷E[6[:D\ d;? ^Bxbq\6v-|~=<yö8VD~EG17|TD.`y:]5u%po; Vci tBH]e=`#jso[ >0[P%Ƙ-](DVz%wͥ=5ێ 8Ϸ>t0! r@2CƘcipDQx ?d1f=l%Nj G^:|Qd&:-Nq @ Z{4<(٣:c̐o#|0m(Fm"ro#ehMY +J$po; @NIƘh߶= QAB(&ې<+Qk+J\ mDmD {tR䈈ԁK|Q07 1INTsK8\D7(9bypo; )A ˁ++J5ݾ(#Fc}Q@tC*c̨o#b`p6ηC#)_Te po#b@̘+ZkE ̘uN `DÏLcȃk9Cm(\ 4}Q 欘Aɑ/"+yo;  ȃ c̳|Q@4(ݲso#[י6BQG 6`>r\h`YێE-$Á\2crFdI2@OE=t-@]h=7ȯ|(!|ۈQhRX` ێEADF4@qdz1D^XL_m(ma֗8`cp/ٷ-?D9Peq1%~`o[ CQ"mk8uYEaDF\ 8˷YPTPؐG/6BQ0{ 9pCƘD!߶پP;Ƙ'@DdoC\RU(Jun^1'`LEdʷ!t˷6%cNF|U"k৾('cNmK %(D@É谝{ 50CƘQk|R0vEEQcYOtOmKG4'/)bg+J!"+}Q0BP$| #*Jw))- (c}(J21ˀDG*nUD B!"ruރ1"2 \ێqB=m@AQ(㹧>(ۀKŷJ`o# F!|NQ nu;(v "BڷBUbW|NSG (?}(D׾(?m+$>bwo}(sηF&UF'}Q|(s Љdl`܌n Nз!s6/@RO qEa"?dޡ_Q| ȷ} pv?Lo[&"EQED|},p~˷  t+DD{2 ;N-3Z>pjB1c;7Gz6|'6FQ1l}`gszOidEA1%,4`+p,w:$p;pp+yدIƘÁ3U;>9H` OE!EQEy,((JgT((@QEQ(2PEQD( *EQeQ(( EQE@T((@QEQ(2PEQdطcm!ɢ_qJ߳I/'CT7M$eK'kq%Mq.ECvqwﲷy|;krʛILRG  aޅSOp$Ӧ,y[GIˤz^N>m^:I^u Yu>"Ĺ(H-8>¡SYi-&O|YkSG$1;g[Ӗˢδgӝ>Mk6vpk'DZֹ~AiK`Z6IZƥCg;exISYwJ+5Q d. !$i.zNئ]l26Ʃ4ymtKK/-6ir.˥qPؗYՋcζm?8ew}Փ 4qlrQWIA\;78qBqo^wᨻr֝\98uً%{y8E]b84-\}uenS&Mvmew]9`Et.o`K1P(- BiaֵxqUO)֦emmVsYI&Wc;vezU7;?O6oV:,O;;MRɁۤq3NUy|$mE֋=ڑ." ϪOa'o'[l{esFq˧;S[$՗VPĽ9,?be^b.]Ľ>E,Fםz2IڈY] ۲qpik8m̻=:DV̿Y,ަԟԖnmu;IYR5m,Lk]Z7]۫ɛ6_6s)nöL-Lx$@aNi.{aU=iQO6]sQ2޷s?qċv-p蔖eY ƴm뢷hϚ~L,:uUOiTÆʴgw'mga϶]o[ -|^̖,yVݵN׻%IoSh[I+a^)Y~Y?;~6ݼ~CV`iY 'nYz:47NjCyV&yF=uY9xIO{%BG^*$)Hqp{MuoGf)J-*Oɱtymwl}D\CWTz\Z!)-*u)bgn҉K㤻(*OYѻΟ\Ҵ?}'_ȃϨ+G\֑.Ek>H\{r'/@7D{v-kW"ke:c^8l{izivN}R]Ni-}߭4"uzi(˂H6 M,%s'-mM(d䓖s%IY˥8Hv<>DE2YD>P>q>l\:D][:n+E8qٖ[2h|lnIn..wիO ב4e:s.0=vרp"a];^ǵƎ4iiyY$.i#. y> X4"/uz]^}0|VGD m3m{>7, Wֆ^*vC pH4viݮKK}]A)fS I(IyFWi ~H(M,3nCFK7J~=,⦍)媚ٳĉ .d@ 89Ll:;G-@ebtoR1ܥI(DR0ղ1ՓPlV 1bDRh nȕ2;nY,{eJ0 QxP q k]W!(¾H;Z4Հ^;]3~Bnۭ6 j4bjLor <@b_8R?:)}jiHt8v Ip.bq/˃> *![IM&p9>ap<@D`qYm1vZ){4QF-t;2S]D<8]& LA8 8oa6c͎{.IĊOa\F:8cxA) h9a{+x} *ʀM=qjZ@TEEJp[jlpݐdΣ1̊mKnLS"([ bdkVIENDB`avogadro-1.1.1/avogadro/src/icons/document-close.png0000644000175000001440000000277212250371054021667 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<wIDATxڽhe_{yssns:ufNmЖs_a4$3@PŴH_S0, ZS6cKΩn߿yzDqI)/ I[|[[$Bƀm=Ժa [%N%x;;v>=օ ;|*e,J)O @z4IXjVd9˗p칃=CJ1)8Tϩ_b!% fNM{ K ݓ')T8*]$pǟJG V $!p)[%%lFϘjiڰr8U 90vbI%9Dj!zϟ':0z{8M*N=yo19y [RݾK(x-UVٛD ׋8^Tl&x&7*^5zq}-"EݎfE6b$pK2:4j)"`dTq\AcS'A,y/&nbjvRl=E0!dLp?Mdsֽѝkɚ\ƢM\ZRJ?\}t2fZ|/ƈTG*R;CLY`YBpxvp!Ιed5.p C<>7w7.h .&;`rrrSWj2{?tch< C/o05{6mx6n$^w0@Ƈ*KD;> \RRF`vx\斗s3g=uND MϰsFw-hUAgnBO4͌b޼yLTWJ|\.sQRR ޗ>`X9$$##ÄPVVapXl?XBL)DNWV<>ĒR&*O#i0&MyK&N#N ZfHl_8#v Ҹ@&TW'!Ze/Вv +uF;½{y>G5]nٶ#68 &UPYH95|c[ qCp wݡ}KUOҴ200 ፻S;H Lve{'H)MƍnVˡs߄̭/iوhw=_3w|K X Rvj[ĨIENDB`avogadro-1.1.1/avogadro/src/icons/document-open.png0000644000175000001440000000210012250371054021504 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxŖM\E9Uu?{1a•0;E'vKW#J! H .id:=龷NyN);h4ũy[g]( a L _{M0f(xC9>R}_LJdSO߯F4#& 0ns2NXK6mUsy3q!j<*H#[.N{7@[V2 c.]^3W0P 6/7>no}k `pFF{80oOn?U5X['o:pbNW=?.|FڢCĚ70>WԻ̼րjfO˩L׾{4%ʬX$} CR<\1Ɓ>j 4˚xgc<=fɬjKܰؤ}gu"2- JbW-|ŋy`]N]B"Pfd=d*3B˜i4Pd7 4EH͋,>yW.$* :ΚɌ)TYO&yq*"%$䀔[̘?OMtH@v)^Wv''E뻖3vgd]v{,*G#:јu   \d 9_ɪIENDB`avogadro-1.1.1/avogadro/src/icons/document-revert.png0000644000175000001440000000324712250371054022067 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<$IDATxŗl?ǽŖK`A 86 MpC%&fds 1jZ)7aL 1jNKEЈB ޷YMkly=ys9h,a1 "P@Z끏5Pw]rAY#Duf;M, ۶">^,bH)$0A&nTj±P5qN$RHB.!IǢ~V }TIH$AL2S0cC1 `b[R2M\=W\k~@U⩹):2pl柽+".я{f\fޢ49ع<"p}|?g8}$Y'XK#!jfe+nZ׵|\3}t߁;=LLt}v^GhR!=\gO/0 #a: -/ om:K5k/1Lz|2|5>~=y_s(aݦUX}kcm[s)1hf=8%gk7Sej-Skl@8]XWA AAl3UdlKj6z>le8_\Ϝ!t\Vxn1 4`J@ =ec *J<֫1^滈e"YV6q/mPZCTZ{D cdJşKWrs( (׍x1i=`R~d 6_Gvr|&GE,>FԵJ8[<74:0?a0i KgOpq(p/w 1tbj\-8?v?Uk([ 0k%Xs'وIS7)u u maB d˴Ij3L!+V1Ait 4J)-KWFy>~?s'ґP) NCCZ#Fe 83||LP,y.bՐ^=uG^aƵr>" _̀j4wP<{P\C EdH~I=UB/,"jӨv;ˆWǚG 3I@B0g=;w@iX2%>L]/tt=!^@$#B}7(T/`ۂ[VF#dvoU61lD]tT EBD}m@Y(I5𮇞C[֤x;G+ bĩ:0D0[l LMUmukxurՈ`ZEԵ҈#G۟}r:&?g~~IENDB`avogadro-1.1.1/avogadro/src/pluginlistview.h0000644000175000001440000000311612250371054020354 0ustar marcususers/********************************************************************** PluginListView - View for listing plugins Copyright (C) 2007 by Geoffrey R. Hutchison Some portions Copyright (C) 2008 Tim Vandermeersch Some portions Copyright (C) 2009 Konstantin L. Tokarev This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef PLUGINLISTVIEW_H #define PLUGINLISTVIEW_H #include #include namespace Avogadro { class PluginListView : public QListView { Q_OBJECT public: explicit PluginListView( QWidget *parent = 0 ); ~PluginListView(); PluginItem* selectedPlugin() const; protected Q_SLOTS: void currentChanged ( const QModelIndex & current, const QModelIndex & previous ); private Q_SLOTS: void selectPlugin( const QModelIndex &index ); Q_SIGNALS: void selectionChanged( PluginItem * ); }; } #endif avogadro-1.1.1/avogadro/CMakeLists.txt0000644000175000001440000000036112250371054017066 0ustar marcususersproject(avogadro) if(WIN32) add_definitions( -DWIN32 ) # add definitions for OB in WIN32 add_definitions( -DUSING_OBDLL -DUSING_DYNAMIC_LIBS ) endif() # tell cmake to process CMakeLists.txt in that subdirectory add_subdirectory(src) avogadro-1.1.1/CMakeLists.txt0000644000175000001440000005166512250371220015274 0ustar marcususerscmake_minimum_required(VERSION 2.8.9) project(Avogadro) # the name of your project # The Avogadro version number, currently used by the Avogadro library too set(Avogadro_VERSION_MAJOR 1) set(Avogadro_VERSION_MINOR 1) set(Avogadro_VERSION_PATCH 1) set(Avogadro_VERSION "${Avogadro_VERSION_MAJOR}.${Avogadro_VERSION_MINOR}") set(Avogadro_VERSION_FULL "${Avogadro_VERSION}.${Avogadro_VERSION_PATCH}") set(CMAKE_MODULE_PATH ${Avogadro_SOURCE_DIR}/cmake/modules) cmake_policy(SET CMP0003 NEW) # this is adapted from KDE's FindKDE4Internal.cmake : default the build type to # "release with debug info". # # We will define two other build types: Debug and Release. # These names are case-insensitive i.e. you can do -DCMAKE_BUILD_TYPE=debug if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() message(STATUS "The build type is ${CMAKE_BUILD_TYPE}") include(CheckCXXCompilerFlag) include(MacroEnsureVersion) include(TestIfWeNeedFPermissive) # use mulithreaded dll runtime on windows when using MSVC if (MSVC) # Make sure the build is parallelised for faster builds set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS} /MP") # Do not generate manifests for the plugins - caused issues loading plugins set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO") endif() ########################################################### # Here I am adding GCC magic from KDE. With these settings# # compiler issues are fixed and more warnings are issued. # ########################################################### # We should always respect the users CXXFLAGS if they have set them if (CMAKE_COMPILER_IS_GNUCXX) set (CMAKE_CXX_FLAGS_WARN "-Wnon-virtual-dtor -Wno-long-long -ansi -Wcast-align -Wchar-subscripts -Wall -Wextra -Wpointer-arith -Wformat-security -fno-check-new -fno-common -pedantic") # On Linux with GCC 4.3+ these flags generate thousands of warnings, so they # are now optional. Most of the warnings are in included headers. option(EXTRA_WARNINGS "Enable extra GCC warnings - can generate thousands" OFF) if(EXTRA_WARNINGS) # Enable extra compiler warnings for extra checking set (CMAKE_CXX_FLAGS_WARN "${CMAKE_CXX_FLAGS_WARN} -Wconversion -Woverloaded-virtual -Wfloat-equal") # set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshadow -Wold-style-cast") endif() add_definitions (-D_BSD_SOURCE) # Set some linker flags if(CMAKE_SYSTEM_NAME MATCHES Linux) set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_SHARED_LINKER_FLAGS}") set (CMAKE_EXE_LINKER_FLAGS "-Wl,--fatal-warnings -Wl,--no-undefined -lc ${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-new-dtags ${CMAKE_EXE_LINKER_FLAGS}") endif() # Now check if we can use visibility to selectively export symbols # Get the GCC version - from KDE4 cmake files exec_program(${CMAKE_C_COMPILER} ARGS --version OUTPUT_VARIABLE _gcc_version_info) string (REGEX MATCH "[345]\\.[0-9]\\.[0-9]" _gcc_version "${_gcc_version_info}") # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the # patch level, handle this here: if (NOT _gcc_version) string (REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0" _gcc_version "${_gcc_version_info}") endif () # No RTTI flag check_cxx_compiler_flag(-fno-rtti HAVE_NO_RTTI) if(HAVE_NO_RTTI) set(NO_RTTI_FLAG "-fno-rtti") # RTTI flag check_cxx_compiler_flag(-frtti HAVE_RTTI) if(HAVE_RTTI) set(RTTI_FLAG "-frtti") else() set(RTTI_FLAG "") endif() else() set(NO_RTTI_FLAG "") set(RTTI_FLAG "") endif() if(NOT APPLE) # Mac GCC42 compiler has bug check_cxx_compiler_flag(-fvisibility=hidden HAVE_GCC_VISIBILITY) set(HAVE_GCC_VISIBILITY ${HAVE_GCC_VISIBILITY} CACHE BOOL "GCC support for hidden visibility") macro_ensure_version("4.1.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_1) macro_ensure_version("4.2.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_2) set(_GCC_COMPILED_WITH_BAD_ALLOCATOR FALSE) if (GCC_IS_NEWER_THAN_4_1) exec_program(${CMAKE_C_COMPILER} ARGS -v OUTPUT_VARIABLE _gcc_alloc_info) string(REGEX MATCH "(--enable-libstdcxx-allocator=mt)" _GCC_COMPILED_WITH_BAD_ALLOCATOR "${_gcc_alloc_info}") endif () if (HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) # We have all the parts necessary - use visibility support add_definitions(-DHAVE_GCC_VISIBILITY) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") if (GCC_IS_NEWER_THAN_4_2) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") endif() endif() endif() # Set up additional build flags for particular build types. These will be added to CMAKE_CXX_FLAGS, # they will not replace them. set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG -DQT_NO_DEBUG_OUTPUT -Wl,-s") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${CMAKE_CXX_FLAGS_WARN}") set(CMAKE_CXX_FLAGS_DEBUG "-g3 -fno-inline ${CMAKE_CXX_FLAGS_WARN}") TEST_IF_WE_NEED_FPERMISSIVE(NEED_FPERMISSIVE) if(NEED_FPERMISSIVE) #OK, adding -fpermissive to the C++ compiler flags #Workaround for a problem with Boost.Python and GCC >= 4.3.1 #Further information: cmake/modules/TestIfWeNeedFPermissive.cmake set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") endif() # define WITH_SSE2 to enable the SSE2 instruction set. # Available on Pentium 4, Athlon 64, and newer CPUs. # Enabled by default on the x86_64 architecture, but not on the x86 architecture. # If SSE2 is enabled, Eigen uses it by default; this can be disabled by # definining EIGEN_DONT_VECTORIZE. if(WITH_SSE2) message(STATUS "Enabling the SSE2 instruction set") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2") endif() endif() # Intel C++ Compiler # Note: Windows version uses different options! if(${CMAKE_CXX_COMPILER_ID} MATCHES Intel AND UNIX) # Disable warnings: # 981 - operands are evaluated in unspecified order # 1599 - foreach set (CMAKE_CXX_FLAGS_WARN "-Wnon-virtual-dtor -ansi -Wcheck -Wall -Wpointer-arith -wd981,1599") option(EXTRA_WARNINGS "Enable extra Intel Compiler warnings and remarks" OFF) if(EXTRA_WARNINGS) # Enable extra compiler warnings for extra checking set (CMAKE_CXX_FLAGS_WARN "${CMAKE_CXX_FLAGS_WARN} -w2 -Weffc++ -wd2012,2015") else() # 810 - conversion to float # 383 - value copied to temporary, reference to temporary used # 1418 - external function definition with no prior declaration set (CMAKE_CXX_FLAGS_WARN "${CMAKE_CXX_FLAGS_WARN} -wd383,810,1418") endif() add_definitions (-D_BSD_SOURCE) # Set some linker flags if(CMAKE_SYSTEM_NAME MATCHES Linux) set(CMAKE_SHARED_LINKER_FLAGS "-lc ${CMAKE_SHARED_LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "-lc ${CMAKE_MODULE_LINKER_FLAGS}") set (CMAKE_EXE_LINKER_FLAGS "-lc ${CMAKE_EXE_LINKER_FLAGS}") endif() # No RTTI flag check_cxx_compiler_flag(-fno-rtti HAVE_NO_RTTI) if(HAVE_NO_RTTI) set(NO_RTTI_FLAG "-fno-rtti") # RTTI flag check_cxx_compiler_flag(-frtti HAVE_RTTI) if(HAVE_RTTI) set(RTTI_FLAG "-frtti") else() set(RTTI_FLAG "") endif() else() set(NO_RTTI_FLAG "") set(RTTI_FLAG "") endif() check_cxx_compiler_flag(-fvisibility=hidden HAVE_INTEL_VISIBILITY) set(HAVE_INTEL_VISIBILITY ${HAVE_INTEL_VISIBILITY} CACHE BOOL "Intel Compiler support for hidden visibility") if(HAVE_INTEL_VISIBILITY) add_definitions(-DHAVE_GCC_VISIBILITY) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") check_cxx_compiler_flag(-fvisibility-inlines-hidden HAVE_INTEL_VISIBILITY_INLINES) set(HAVE_INTEL_VISIBILITY_INLINES ${HAVE_INTEL_VISIBILITY_INLINES} CACHE BOOL "Intel Compiler support for -fvisibility-inlines-hidden") if(HAVE_INTEL_VISIBILITY_INLINES) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") endif() endif() set(CMAKE_C_FLAGS_RELEASE "-O3 -ipo1 -DNDEBUG -DQT_NO_DEBUG_OUTPUT -Wl,-s") set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ipo1 -DNDEBUG -DQT_NO_DEBUG_OUTPUT -Wl,-s") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${CMAKE_CXX_FLAGS_WARN}") set(CMAKE_CXX_FLAGS_DEBUG "-g3 -fno-inline ${CMAKE_CXX_FLAGS_WARN}") TEST_IF_WE_NEED_FPERMISSIVE(NEED_FPERMISSIVE) if(NEED_FPERMISSIVE) #OK, adding -fpermissive to the C++ compiler flags #Workaround for a problem with Boost.Python and GCC >= 4.3.1 #Further information: cmake/modules/TestIfWeNeedFPermissive.cmake set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") endif() # define WITH_SSE2 to enable the SSE2 instruction set. # Available on Pentium 4, Athlon 64, and newer CPUs. # If SSE2 is enabled, Eigen uses it by default; this can be disabled by # definining EIGEN_DONT_VECTORIZE. if(CMAKE_SIZEOF_VOID_P EQUAL 8 OR WITH_SSE2) message(STATUS "Enabling the SSE2 instruction set") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2") endif() endif() set(I18N_LANGUAGE "" CACHE STRING "Build i18n only for selected language") find_package(Qt4 4.6.0 REQUIRED) # find and setup Qt4 for this project find_package(OpenGL REQUIRED) # find and setup OpenGL find_package(Linguist) # find and setup Linguist if(NOT Linguist_FOUND) message(WARNING " Qt4 Linguist not found, please install it if you want Avogadro translations") endif() find_package(Eigen3) # find and setup Eigen3 if available if(NOT EIGEN3_FOUND) message(STATUS "Cannot find Eigen3, trying Eigen2") find_package(Eigen2 REQUIRED) # Some version is required else() # Use Stage10 Eigen3 support set (EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API TRUE) endif() find_package(ZLIB REQUIRED) find_package(OpenBabel2 REQUIRED) # find and setup OpenBabel # Check if we are building from a Git clone or a released version function(git_version dir version_var) # Function to figure out the Git short version hash if(EXISTS ${dir}/.git) execute_process(COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${dir} OUTPUT_VARIABLE var) string(REGEX REPLACE "\n" "" var "${var}") message(STATUS "Git revision found to be ${var}") set(${version_var} "${var}" PARENT_SCOPE) endif(EXISTS ${dir}/.git) endfunction() git_version(${CMAKE_SOURCE_DIR} SCM_REVISION) message(STATUS "Found Git revision is: ${SCM_REVISION}") if(SCM_REVISION) message(STATUS "Building development version from Git clone.") else() message(STATUS "Building released version.") endif() ########################################################### # Python Support: Detect and report all stuff here. # # Subdirectories can use: ALL_PYTHON_FOUND # ########################################################### option(ENABLE_PYTHON "Enable python support" ON) if(ENABLE_PYTHON) include(PythonDeps) if(ALL_PYTHON_FOUND) message(STATUS "All python dependencies found - Python support enabled") else() set(ENABLE_PYTHON FALSE) message(WARNING "Not all python dependencies are found - Python support diabled") endif() else() message(STATUS "Python support disabled.") endif() # Unit testing, mainly useful for developers and so defaults to off option(ENABLE_TESTS "Enable unit testing" OFF) if(ENABLE_TESTS) set(QT_USE_QTTEST TRUE) enable_testing() include (CTest) message(STATUS "Unit testing enabled, run make test to run them") endif() # GLSL support is needed for OpenGL shaders option(ENABLE_GLSL "Enable GLSL support" OFF) if(ENABLE_GLSL) find_package(GLEW) if(GLEW_FOUND) message(STATUS "GLEW found and GLSL support enabled") add_definitions( -DENABLE_GLSL ) else() message(WARNING "GLEW not found, please install it if you require GLSL") endif() endif() # Multithreaded OpenGL. Seems mostly broken on Linux right now. option(ENABLE_THREADEDGL "Enable threaded OpenGL rendering" OFF) if(ENABLE_THREADEDGL) add_definitions( -DENABLE_THREADED_GL ) set(THREADED_GL true) message(STATUS "Threaded OpenGL rendering enabled - needs more testing") else() set(THREADED_GL false) message(STATUS "Threaded OpenGL rendering not enabled") endif() # Should a self-contained package be created? option(ENABLE_AVO_PACKAGE "Enable creation of a self-contained package" OFF) if(ENABLE_AVO_PACKAGE) add_definitions(-DAVO_APP_BUNDLE) endif() # Should a versioned plugin directory be used, i.e. avogadro/1.0. option(ENABLE_VERSIONED_PLUGIN_DIR "Enable versioned plugin directory" ON) mark_as_advanced(ENABLE_VERSIONED_PLUGIN_DIR) # Set up our path handling, inspired by the path handling used in KDE set(LIB_SUFFIX "" CACHE STRING "Suffix of the directory name, e.g. 64 for lib64") set(SHARE_INSTALL_PREFIX "share" CACHE STRING "Base directory for shared data") set(BIN_INSTALL_DIR "bin" CACHE STRING "Install dir for binaries") # Set up the plugin directory if(ENABLE_VERSIONED_PLUGIN_DIR) set(Plugin_Version "/${Avogadro_VERSION_MAJOR}_${Avogadro_VERSION_MINOR}") else() set(Plugin_Version "") endif() if(UNIX) set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE STRING "Install dir for libraries" FORCE) set(Avogadro_PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/avogadro${Plugin_Version}" CACHE STRING "Install dir for plugins" FORCE) else() set(LIB_INSTALL_DIR "${BIN_INSTALL_DIR}" CACHE STRING "Install dir for libraries" FORCE) set(Avogadro_PLUGIN_INSTALL_DIR "lib${LIB_SUFFIX}/avogadro${Plugin_Version}" CACHE STRING "Install dir for plugins" FORCE) endif() set(INCLUDE_INSTALL_DIR "include" CACHE STRING "Install dir for include files") set(I18N_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/avogadro/i18n" CACHE STRING "Install dir for i18n files") set(XDG_APPS_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/applications" CACHE STRING "Install dir for application files") set(XDG_ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/pixmaps" CACHE STRING "Install dir for application icons") # Some rpath handling for Linux and Mac option(ENABLE_RPATH "Enable rpath support on Linux and Mac" ON) if(UNIX AND ENABLE_RPATH) message(STATUS "RPath support enabled for installed binaries and libraries") if(APPLE) # Funky path logic in order to get the Avogadro application bundle working set(CMAKE_BUNDLE_LOCATION "/Applications") if(USE_VERSIONED_BUNDLE_LOCATION) set(CMAKE_BUNDLE_NAME "Avogadro${Avogadro_VERSION}") else(USE_VERSIONED_BUNDLE_LOCATION) set(CMAKE_BUNDLE_NAME "Avogadro") endif(USE_VERSIONED_BUNDLE_LOCATION) set(CMAKE_INSTALL_PREFIX "/Applications/${CMAKE_BUNDLE_NAME}.app/Contents") set(CMAKE_INSTALL_NAME_DIR "@executable_path/../${LIB_INSTALL_DIR}") else() set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}") set(CMAKE_SKIP_BUILD_RPATH FALSE) set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) endif() endif() # Add support for an uninstall target configure_file( "${CMAKE_MODULE_PATH}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") # Configure and install an Avogadro CMake style configuration file configure_file( "${CMAKE_MODULE_PATH}/AvogadroConfig.cmake.in" "${Avogadro_BINARY_DIR}/AvogadroConfig.cmake" IMMEDIATE @ONLY) configure_file( "${CMAKE_MODULE_PATH}/AvogadroConfigVersion.cmake.in" "${Avogadro_BINARY_DIR}/AvogadroConfigVersion.cmake" IMMEDIATE @ONLY) if(APPLE) install(FILES "${Avogadro_BINARY_DIR}/AvogadroConfig.cmake" "${Avogadro_BINARY_DIR}/AvogadroConfigVersion.cmake" DESTINATION Resources) else() install(FILES "${Avogadro_BINARY_DIR}/AvogadroConfig.cmake" "${Avogadro_BINARY_DIR}/AvogadroConfigVersion.cmake" DESTINATION "${LIB_INSTALL_DIR}/avogadro") endif() if (UNIX) if(ENABLE_AVO_PACKAGE) if(APPLE) # Make sure to copy Qt plugins and translations file(GLOB qt_TRANSLATIONS "${QT_TRANSLATIONS_DIR}/qt*.qm") install(FILES ${qt_TRANSLATIONS} DESTINATION "${I18N_INSTALL_DIR}" ) # FIXME: These need to have the install-name tool run on them install(DIRECTORY "${QT_PLUGINS_DIR}" DESTINATION "${CMAKE_INSTALL_PREFIX}" ) else() # # Make sure to copy Qt plugins and translations # file(GLOB qt_TRANSLATIONS "${QT_TRANSLATIONS_DIR}/qt*.qm") # install(FILES ${qt_TRANSLATIONS} # DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/qt/translations" # ) # # FIXME: These need to have the install-name tool run on them # install(DIRECTORY "${QT_PLUGINS_DIR}" # DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/qt" # ) # file(GLOB qt_libs "${QT_LIBRARY_DIR}/libQtCore.so* ${QT_LIBRARY_DIR}/libQtGui.so* ${QT_LIBRARY_DIR}/libQtOpenGL.so* ${QT_LIBRARY_DIR}/libQtNetwork.so*") # install(FILES ${qt_libs} # DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/qt" # ) # # FIXME: Add others # set(X11_LIBRARIES ${X11_ICE_LIB} ${X11_SM_LIB} ${X11_X11_LIB}) # install(LIBRARY ${X11_LIBRARIES} # DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/X11" # ) # install(LIBRARY ${OPENGL_LIBRARIES} # DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/gl" # ) # install (LIBRARY ${ZLIB_LIBRARY} # DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" # ) set(about_files ${CMAKE_CURRENT_SOURCE_DIR}/README ${CMAKE_CURRENT_SOURCE_DIR}/COPYING ${CMAKE_CURRENT_SOURCE_DIR}/AUTHORS ) install(FILES ${about_files} DESTINATION "${CMAKE_INSTALL_PREFIX}" ) endif() endif() endif() # Install the configuration files to help find Avogadro install(FILES "${CMAKE_MODULE_PATH}/AvogadroUse.cmake" DESTINATION "${Avogadro_PLUGIN_INSTALL_DIR}") # Install the find modules we require to be present install(FILES "${CMAKE_MODULE_PATH}/FindEigen2.cmake" "${CMAKE_MODULE_PATH}/FindEigen3.cmake" "${CMAKE_MODULE_PATH}/FindGLEW.cmake" DESTINATION "${Avogadro_PLUGIN_INSTALL_DIR}/cmake") configure_file( "${CMAKE_MODULE_PATH}/CTestCustom.cmake.in" "${Avogadro_BINARY_DIR}/CTestCustom.cmake" IMMEDIATE @ONLY ) # Place binaries and libraries in the root of the build directory set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" CACHE STRING "Binary build output directory") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib${LIB_SUFFIX}" CACHE STRING "Library build output directory") mark_as_advanced(CMAKE_LIBRARY_OUTPUT_DIRECTORY CMAKE_RUNTIME_OUTPUT_DIRECTORY) # tell cmake to process CMakeLists.txt in that subdirectory add_subdirectory(libavogadro) add_subdirectory(avogadro) add_subdirectory(doc) # Linux/Windows default: ${PREFIX}/share/avogadro/fragments set(avogadro_FRAGMENTS ${SHARE_INSTALL_PREFIX}/avogadro) # When installing, make sure to install some fragments install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fragments" DESTINATION ${avogadro_FRAGMENTS}) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/builder" DESTINATION ${avogadro_FRAGMENTS}) install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/crystals" DESTINATION ${avogadro_FRAGMENTS}) # Prefix to use in avopkg, pkg-config and QMake integration if(ENABLE_AVO_PACKAGE) set(USER_PREFIX "@prefix@") else() set(USER_PREFIX ${CMAKE_INSTALL_PREFIX}) endif() # pkg-config if(UNIX) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/avogadro.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/avogadro.pc" @ONLY) set(PC_FILES "${CMAKE_CURRENT_BINARY_DIR}/avogadro.pc") install(FILES ${PC_FILES} DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) endif() # avopkg if(UNIX) configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/avopkg.in" "${CMAKE_CURRENT_BINARY_DIR}/avopkg" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/avopkg" DESTINATION ${BIN_INSTALL_DIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endif() # .prf file for QMake projects configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/avogadro.prf.in" "${CMAKE_CURRENT_BINARY_DIR}/avogadro.prf" @ONLY) option(INSTALL_QMAKE_PRF "Install QMake integration files to Qt prefix" ON) if(QT_MKSPECS_DIR AND INSTALL_QMAKE_PRF) # if ("${QT_MKSPECS_DIR}" MATCHES ^$"${CMAKE_INSTALL_PREFIX}/") # string(REPLACE # "${CMAKE_INSTALL_PREFIX}" # "" # QT_MKSPECS_RELATIVE # "${QT_MKSPECS_DIR}" # ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/avogadro.prf" DESTINATION "${CMAKE_INSTALL_PREFIX}/${QT_MKSPECS_RELATIVE}/features" ) # endif ("${QT_MKSPECS_DIR}" MATCHES ^$"${CMAKE_INSTALL_PREFIX}/") else() message(WARNING "Qt mkspecs directory not found. File 'avogadro.prf' will be installed to ${SHARE_INSTALL_PREFIX}/avogadro/qmake.") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/avogadro.prf" DESTINATION "${SHARE_INSTALL_PREFIX}/avogadro/qmake" ) endif() # Use CPack to do some of our packaging include(AvoCPack) avogadro-1.1.1/avogadro.prf.in0000644000175000001440000000152012250371054015442 0ustar marcususersAVOGADRO_PREFIX = "@USER_PREFIX@" OPENBABEL_PREFIX = "@OPENBABEL2_INCLUDE_DIR@/../.." INCLUDEPATH += . \ "$$AVOGADRO_PREFIX/include" \ "@OPENBABEL2_INCLUDE_DIR@ \ "@EIGEN2_INCLUDE_DIR@" LIBS += -L"$$AVOGADRO_PREFIX/lib" -lavogadro \ -L"$$OPENBABEL_PREFIX/lib" -lopenbabel unix { manifest_.target = $$eval(TARGET).mf manifest_.commands = avopkg -wizard $(QMAKE_TARGET) manifest_.depends = first manifest.depends = $$eval(TARGET).mf package_.target = $$eval(TARGET).avo package_.commands = avopkg -pack $$eval(TARGET).mf #package_.depends = $$eval(TARGET).mf package.depends = $$eval(TARGET).avo install.commands = avopkg $$eval(TARGET).avo install.depends = $$eval(TARGET).avo QMAKE_EXTRA_TARGETS += manifest_ manifest package_ package install } avogadro-1.1.1/libavogadro/0000755000175000001440000000000012250371054015015 5ustar marcususersavogadro-1.1.1/libavogadro/tests/0000755000175000001440000000000012250371054016157 5ustar marcususersavogadro-1.1.1/libavogadro/tests/modeltest.cpp0000644000175000001440000004524312250371054020673 0ustar marcususers/**************************************************************************** ** ** Copyright (C) 2007 Trolltech ASA. All rights reserved. ** ** This file is part of the Qt Concurrent project on Trolltech Labs. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sales@trolltech.com. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #include #include "modeltest.h" Q_DECLARE_METATYPE(QModelIndex) /*! Connect to all of the models signals. Whenever anything happens recheck everything. */ ModelTest::ModelTest(QAbstractItemModel *_model, QObject *parent) : QObject(parent), model(_model), fetchingMore(false) { Q_ASSERT(model); connect(model, SIGNAL(columnsAboutToBeInserted(const QModelIndex &, int, int)), this, SLOT(runAllTests())); connect(model, SIGNAL(columnsAboutToBeRemoved(const QModelIndex &, int, int)), this, SLOT(runAllTests())); connect(model, SIGNAL(columnsInserted(const QModelIndex &, int, int)), this, SLOT(runAllTests())); connect(model, SIGNAL(columnsRemoved(const QModelIndex &, int, int)), this, SLOT(runAllTests())); connect(model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(runAllTests())); connect(model, SIGNAL(headerDataChanged(Qt::Orientation, int, int)), this, SLOT(runAllTests())); connect(model, SIGNAL(layoutAboutToBeChanged ()), this, SLOT(runAllTests())); connect(model, SIGNAL(layoutChanged ()), this, SLOT(runAllTests())); connect(model, SIGNAL(modelReset ()), this, SLOT(runAllTests())); connect(model, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)), this, SLOT(runAllTests())); connect(model, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), this, SLOT(runAllTests())); connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(runAllTests())); connect(model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(runAllTests())); // Special checks for inserting/removing connect(model, SIGNAL(layoutAboutToBeChanged()), this, SLOT(layoutAboutToBeChanged())); connect(model, SIGNAL(layoutChanged()), this, SLOT(layoutChanged())); connect(model, SIGNAL(rowsAboutToBeInserted(const QModelIndex &, int, int)), this, SLOT(rowsAboutToBeInserted(const QModelIndex &, int, int))); connect(model, SIGNAL(rowsAboutToBeRemoved(const QModelIndex &, int, int)), this, SLOT(rowsAboutToBeRemoved(const QModelIndex &, int, int))); connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(rowsInserted(const QModelIndex &, int, int))); connect(model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(rowsRemoved(const QModelIndex &, int, int))); runAllTests(); } void ModelTest::runAllTests() { if (fetchingMore) return; nonDestructiveBasicTest(); rowCount(); columnCount(); hasIndex(); index(); parent(); data(); } /*! nonDestructiveBasicTest tries to call a number of the basic functions (not all) to make sure the model doesn't outright segfault, testing the functions that makes sense. */ void ModelTest::nonDestructiveBasicTest() { Q_ASSERT(model->buddy(QModelIndex()) == QModelIndex()); model->canFetchMore(QModelIndex()); Q_ASSERT(model->columnCount(QModelIndex()) >= 0); Q_ASSERT(model->data(QModelIndex()) == QVariant()); fetchingMore = true; model->fetchMore(QModelIndex()); fetchingMore = false; Qt::ItemFlags flags = model->flags(QModelIndex()); Q_ASSERT(flags == Qt::ItemIsDropEnabled || flags == 0); model->hasChildren(QModelIndex()); model->hasIndex(0, 0); model->headerData(0, Qt::Horizontal); model->index(0, 0); model->itemData(QModelIndex()); QVariant cache; model->match(QModelIndex(), -1, cache); model->mimeTypes(); Q_ASSERT(model->parent(QModelIndex()) == QModelIndex()); Q_ASSERT(model->rowCount() >= 0); QVariant variant; model->setData(QModelIndex(), variant, -1); model->setHeaderData(-1, Qt::Horizontal, QVariant()); model->setHeaderData(999999, Qt::Horizontal, QVariant()); QMap roles; model->sibling(0, 0, QModelIndex()); model->span(QModelIndex()); model->supportedDropActions(); } /*! Tests model's implementation of QAbstractItemModel::rowCount() and hasChildren() Models that are dynamically populated are not as fully tested here. */ void ModelTest::rowCount() { // check top row QModelIndex topIndex = model->index(0, 0, QModelIndex()); int rows = model->rowCount(topIndex); Q_ASSERT(rows >= 0); if (rows > 0) Q_ASSERT(model->hasChildren(topIndex) == true); QModelIndex secondLevelIndex = model->index(0, 0, topIndex); if (secondLevelIndex.isValid()) { // not the top level // check a row count where parent is valid rows = model->rowCount(secondLevelIndex); Q_ASSERT(rows >= 0); if (rows > 0) Q_ASSERT(model->hasChildren(secondLevelIndex) == true); } // The models rowCount() is tested more extensively in checkChildren(), // but this catches the big mistakes } /*! Tests model's implementation of QAbstractItemModel::columnCount() and hasChildren() */ void ModelTest::columnCount() { // check top row QModelIndex topIndex = model->index(0, 0, QModelIndex()); Q_ASSERT(model->columnCount(topIndex) >= 0); // check a column count where parent is valid QModelIndex childIndex = model->index(0, 0, topIndex); if (childIndex.isValid()) Q_ASSERT(model->columnCount(childIndex) >= 0); // columnCount() is tested more extensively in checkChildren(), // but this catches the big mistakes } /*! Tests model's implementation of QAbstractItemModel::hasIndex() */ void ModelTest::hasIndex() { // Make sure that invalid values returns an invalid index Q_ASSERT(model->hasIndex(-2, -2) == false); Q_ASSERT(model->hasIndex(-2, 0) == false); Q_ASSERT(model->hasIndex(0, -2) == false); int rows = model->rowCount(); int columns = model->columnCount(); // check out of bounds Q_ASSERT(model->hasIndex(rows, columns) == false); Q_ASSERT(model->hasIndex(rows + 1, columns + 1) == false); if (rows > 0) Q_ASSERT(model->hasIndex(0, 0) == true); // hasIndex() is tested more extensively in checkChildren(), // but this catches the big mistakes } /*! Tests model's implementation of QAbstractItemModel::index() */ void ModelTest::index() { // Make sure that invalid values returns an invalid index Q_ASSERT(model->index(-2, -2) == QModelIndex()); Q_ASSERT(model->index(-2, 0) == QModelIndex()); Q_ASSERT(model->index(0, -2) == QModelIndex()); int rows = model->rowCount(); int columns = model->columnCount(); if (rows == 0) return; // Catch off by one errors Q_ASSERT(model->index(rows, columns) == QModelIndex()); Q_ASSERT(model->index(0, 0).isValid() == true); // Make sure that the same index is *always* returned QModelIndex a = model->index(0, 0); QModelIndex b = model->index(0, 0); Q_ASSERT(a == b); // index() is tested more extensively in checkChildren(), // but this catches the big mistakes } /*! Tests model's implementation of QAbstractItemModel::parent() */ void ModelTest::parent() { // Make sure the model wont crash and will return an invalid QModelIndex // when asked for the parent of an invalid index. Q_ASSERT(model->parent(QModelIndex()) == QModelIndex()); if (model->rowCount() == 0) return; // Column 0 | Column 1 | // QModelIndex() | | // \- topIndex | topIndex1 | // \- childIndex | childIndex1 | // Common error test #1, make sure that a top level index has a parent // that is a invalid QModelIndex. QModelIndex topIndex = model->index(0, 0, QModelIndex()); Q_ASSERT(model->parent(topIndex) == QModelIndex()); // Common error test #2, make sure that a second level index has a parent // that is the first level index. if (model->rowCount(topIndex) > 0) { QModelIndex childIndex = model->index(0, 0, topIndex); Q_ASSERT(model->parent(childIndex) == topIndex); } // Common error test #3, the second column should NOT have the same children // as the first column in a row. // Usually the second column shouldn't have children. QModelIndex topIndex1 = model->index(0, 1, QModelIndex()); if (model->rowCount(topIndex1) > 0) { QModelIndex childIndex = model->index(0, 0, topIndex); QModelIndex childIndex1 = model->index(0, 0, topIndex1); Q_ASSERT(childIndex != childIndex1); } // Full test, walk n levels deep through the model making sure that all // parent's children correctly specify their parent. checkChildren(QModelIndex()); } /*! Called from the parent() test. A model that returns an index of parent X should also return X when asking for the parent of the index. This recursive function does pretty extensive testing on the whole model in an effort to catch edge cases. This function assumes that rowCount(), columnCount() and index() already work. If they have a bug it will point it out, but the above tests should have already found the basic bugs because it is easier to figure out the problem in those tests then this one. */ void ModelTest::checkChildren(const QModelIndex &parent, int currentDepth) { // First just try walking back up the tree. QModelIndex p = parent; while (p.isValid()) p = p.parent(); // For models that are dynamically populated if (model->canFetchMore(parent)) { fetchingMore = true; model->fetchMore(parent); fetchingMore = false; } int rows = model->rowCount(parent); int columns = model->columnCount(parent); if (rows > 0) Q_ASSERT(model->hasChildren(parent)); // Some further testing against rows(), columns(), and hasChildren() Q_ASSERT(rows >= 0); Q_ASSERT(columns >= 0); if (rows > 0) Q_ASSERT(model->hasChildren(parent) == true); //qDebug() << "parent:" << model->data(parent).toString() << "rows:" << rows // << "columns:" << columns << "parent column:" << parent.column(); Q_ASSERT(model->hasIndex(rows + 1, 0, parent) == false); for (int r = 0; r < rows; ++r) { if (model->canFetchMore(parent)) { fetchingMore = true; model->fetchMore(parent); fetchingMore = false; } Q_ASSERT(model->hasIndex(r, columns + 1, parent) == false); for (int c = 0; c < columns; ++c) { Q_ASSERT(model->hasIndex(r, c, parent) == true); QModelIndex index = model->index(r, c, parent); // rowCount() and columnCount() said that it existed... Q_ASSERT(index.isValid() == true); // index() should always return the same index when called twice in a row QModelIndex modifiedIndex = model->index(r, c, parent); Q_ASSERT(index == modifiedIndex); // Make sure we get the same index if we request it twice in a row QModelIndex a = model->index(r, c, parent); QModelIndex b = model->index(r, c, parent); Q_ASSERT(a == b); // Some basic checking on the index that is returned Q_ASSERT(index.model() == model); Q_ASSERT(index.row() == r); Q_ASSERT(index.column() == c); // While you can technically return a QVariant usually this is a sign // of an bug in data() Disable if this really is ok in your model. Q_ASSERT(model->data(index, Qt::DisplayRole).isValid() == true); // If the next test fails here is some somewhat useful debug you play with. /* if (model->parent(index) != parent) { qDebug() << r << c << currentDepth << model->data(index).toString() << model->data(parent).toString(); qDebug() << index << parent << model->parent(index); // And a view that you can even use to show the model. //QTreeView view; //view.setModel(model); //view.show(); }*/ // Check that we can get back our real parent. Q_ASSERT(model->parent(index) == parent); // recursively go down the children if (model->hasChildren(index) && currentDepth < 10 ) { //qDebug() << r << c << "has children" << model->rowCount(index); checkChildren(index, ++currentDepth); }/* else { if (currentDepth >= 10) qDebug() << "checked 10 deep"; };*/ // make sure that after testing the children that the index doesn't change. QModelIndex newerIndex = model->index(r, c, parent); Q_ASSERT(index == newerIndex); } } } /*! Tests model's implementation of QAbstractItemModel::data() */ void ModelTest::data() { // Invalid index should return an invalid qvariant Q_ASSERT(!model->data(QModelIndex()).isValid()); if (model->rowCount() == 0) return; // A valid index should have a valid QVariant data Q_ASSERT(model->index(0, 0).isValid()); // shouldn't be able to set data on an invalid index Q_ASSERT(model->setData(QModelIndex(), QLatin1String("foo"), Qt::DisplayRole) == false); // General Purpose roles that should return a QString QVariant variant = model->data(model->index(0, 0), Qt::ToolTipRole); if (variant.isValid()) { Q_ASSERT(qVariantCanConvert(variant)); } variant = model->data(model->index(0, 0), Qt::StatusTipRole); if (variant.isValid()) { Q_ASSERT(qVariantCanConvert(variant)); } variant = model->data(model->index(0, 0), Qt::WhatsThisRole); if (variant.isValid()) { Q_ASSERT(qVariantCanConvert(variant)); } // General Purpose roles that should return a QSize variant = model->data(model->index(0, 0), Qt::SizeHintRole); if (variant.isValid()) { Q_ASSERT(qVariantCanConvert(variant)); } // General Purpose roles that should return a QFont QVariant fontVariant = model->data(model->index(0, 0), Qt::FontRole); if (fontVariant.isValid()) { Q_ASSERT(qVariantCanConvert(fontVariant)); } // Check that the alignment is one we know about QVariant textAlignmentVariant = model->data(model->index(0, 0), Qt::TextAlignmentRole); if (textAlignmentVariant.isValid()) { int alignment = textAlignmentVariant.toInt(); Q_ASSERT(alignment == (alignment & (Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask))); } // General Purpose roles that should return a QColor QVariant colorVariant = model->data(model->index(0, 0), Qt::BackgroundColorRole); if (colorVariant.isValid()) { Q_ASSERT(qVariantCanConvert(colorVariant)); } colorVariant = model->data(model->index(0, 0), Qt::TextColorRole); if (colorVariant.isValid()) { Q_ASSERT(qVariantCanConvert(colorVariant)); } // Check that the "check state" is one we know about. QVariant checkStateVariant = model->data(model->index(0, 0), Qt::CheckStateRole); if (checkStateVariant.isValid()) { int state = checkStateVariant.toInt(); Q_ASSERT(state == Qt::Unchecked || state == Qt::PartiallyChecked || state == Qt::Checked); } } /*! Store what is about to be inserted to make sure it actually happens \sa rowsInserted() */ void ModelTest::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end) { Q_UNUSED(end); Changing c; c.parent = parent; c.oldSize = model->rowCount(parent); c.last = model->data(model->index(start - 1, 0, parent)); c.next = model->data(model->index(start, 0, parent)); insert.push(c); } /*! Confirm that what was said was going to happen actually did \sa rowsAboutToBeInserted() */ void ModelTest::rowsInserted(const QModelIndex & parent, int start, int end) { Changing c = insert.pop(); Q_ASSERT(c.parent == parent); Q_ASSERT(c.oldSize + (end - start + 1) == model->rowCount(parent)); Q_ASSERT(c.last == model->data(model->index(start - 1, 0, c.parent))); /* if (c.next != model->data(model->index(end + 1, 0, c.parent))) { qDebug() << start << end; for (int i=0; i < model->rowCount(); ++i) qDebug() << model->index(i, 0).data().toString(); qDebug() << c.next << model->data(model->index(end + 1, 0, c.parent)); } */ Q_ASSERT(c.next == model->data(model->index(end + 1, 0, c.parent))); } void ModelTest::layoutAboutToBeChanged() { for (int i = 0; i < qBound(0, model->rowCount(), 100); ++i) changing.append(QPersistentModelIndex(model->index(i, 0))); } void ModelTest::layoutChanged() { for (int i = 0; i < changing.count(); ++i) { QPersistentModelIndex p = changing[i]; Q_ASSERT(p == model->index(p.row(), p.column(), p.parent())); } changing.clear(); } /*! Store what is about to be inserted to make sure it actually happens \sa rowsRemoved() */ void ModelTest::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) { Changing c; c.parent = parent; c.oldSize = model->rowCount(parent); c.last = model->data(model->index(start - 1, 0, parent)); c.next = model->data(model->index(end + 1, 0, parent)); remove.push(c); } /*! Confirm that what was said was going to happen actually did \sa rowsAboutToBeRemoved() */ void ModelTest::rowsRemoved(const QModelIndex & parent, int start, int end) { Changing c = remove.pop(); Q_ASSERT(c.parent == parent); Q_ASSERT(c.oldSize - (end - start + 1) == model->rowCount(parent)); Q_ASSERT(c.last == model->data(model->index(start - 1, 0, c.parent))); Q_ASSERT(c.next == model->data(model->index(start, 0, c.parent))); } avogadro-1.1.1/libavogadro/tests/primitivemodeltest.cpp0000644000175000001440000000511512250371054022616 0ustar marcususers/********************************************************************** PrimitiveModelTest - Provides unit testing for the PrimitiveItemModel class Copyright (C) 2009 Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #include #include "modeltest.h" using Avogadro::PrimitiveItemModel; using Avogadro::Molecule; using Avogadro::Atom; using Avogadro::Bond; class PrimitiveModelTest : public QObject { Q_OBJECT private: Molecule *m_molecule; void prepareMolecule(); private slots: void initTestCase(); void cleanupTestCase(); void testMoleculeModel(); }; void PrimitiveModelTest::prepareMolecule() { Atom *a1 = m_molecule->addAtom(); a1->setPos(Eigen::Vector3d(0.0, 0.0, 0.0)); Atom *a2 = m_molecule->addAtom(); a2->setPos(Eigen::Vector3d(1.5, 0.0, 0.0)); Atom *a3 = m_molecule->addAtom(); a3->setPos(Eigen::Vector3d(0.0, 1.5, 0.0)); Atom *a4 = m_molecule->addAtom(); a4->setPos(Eigen::Vector3d(0.0, 0.0, 1.5)); Bond *b1 = m_molecule->addBond(); b1->setAtoms(a1->id(), a2->id(), 1); Bond *b2 = m_molecule->addBond(); b2->setAtoms(a2->id(), a3->id(), 1); Bond *b3 = m_molecule->addBond(); b3->setAtoms(a3->id(), a4->id(), 1); } void PrimitiveModelTest::initTestCase() { m_molecule = new Molecule; prepareMolecule(); } void PrimitiveModelTest::cleanupTestCase() { delete m_molecule; m_molecule = 0; } void PrimitiveModelTest::testMoleculeModel() { PrimitiveItemModel *model = new PrimitiveItemModel(m_molecule, this); new ModelTest(model, this); } QTEST_MAIN(PrimitiveModelTest) #include "moc_primitivemodeltest.cxx" avogadro-1.1.1/libavogadro/tests/modeltest.h0000644000175000001440000000433412250371054020334 0ustar marcususers/**************************************************************************** ** ** Copyright (C) 2007 Trolltech ASA. All rights reserved. ** ** This file is part of the Qt Concurrent project on Trolltech Labs. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. Please review the following information to ensure GNU ** General Public Licensing requirements will be met: ** http://www.trolltech.com/products/qt/opensource.html ** ** If you are unsure which license is appropriate for your use, please ** review the following information: ** http://www.trolltech.com/products/qt/licensing.html or contact the ** sales department at sales@trolltech.com. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef MODELTEST_H #define MODELTEST_H #include #include #include class ModelTest : public QObject { Q_OBJECT public: ModelTest(QAbstractItemModel *model, QObject *parent = 0); private Q_SLOTS: void nonDestructiveBasicTest(); void rowCount(); void columnCount(); void hasIndex(); void index(); void parent(); void data(); protected Q_SLOTS: void runAllTests(); void layoutAboutToBeChanged(); void layoutChanged(); void rowsAboutToBeInserted(const QModelIndex &parent, int start, int end); void rowsInserted(const QModelIndex & parent, int start, int end); void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end); void rowsRemoved(const QModelIndex & parent, int start, int end); private: void checkChildren(const QModelIndex &parent, int currentDepth = 0); QAbstractItemModel *model; struct Changing { QModelIndex parent; int oldSize; QVariant last; QVariant next; }; QStack insert; QStack remove; bool fetchingMore; QList changing; }; #endif avogadro-1.1.1/libavogadro/tests/moleculefiletest.cpp0000644000175000001440000002162612250371054022237 0ustar marcususers/********************************************************************** MoleculeFile - MoleculeFileTest class provides unit testing for the MoleculeFile class Copyright (C) 2009 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #include #include #include using OpenBabel::OBMol; using OpenBabel::OBConversion; using Avogadro::MoleculeFile; using Avogadro::Molecule; using Avogadro::Atom; using Eigen::Vector3d; class MoleculeFileTest : public QObject { Q_OBJECT private: Molecule *m_molecule; /// Molecule object for use by the test class. private slots: /** * Called before the first test function is executed. */ void initTestCase(); /** * Called after the last test function is executed. */ void cleanupTestCase(); /** * Called before each test function is executed. */ void init(); /** * Called after every test function. */ void cleanup(); void readWriteMolecule(); void readFile(); void readWriteConformers(); void replaceMolecule(); void appendMolecule(); }; void MoleculeFileTest::initTestCase() { } void MoleculeFileTest::cleanupTestCase() { } void MoleculeFileTest::init() { m_molecule = new Molecule; Atom *c = m_molecule->addAtom(); c->setAtomicNumber(6); c->setPos(Eigen::Vector3d(1., 2., 3.)); Atom *n = m_molecule->addAtom(); n->setAtomicNumber(7); n->setPos(Eigen::Vector3d(4., 5., 6.)); Atom *o = m_molecule->addAtom(); o->setAtomicNumber(8); o->setPos(Eigen::Vector3d(7., 8., 9.)); } void MoleculeFileTest::cleanup() { delete m_molecule; m_molecule = 0; } void MoleculeFileTest::readWriteMolecule() { QString filename = "moleculefiletest_tmp.sdf"; // writeMolecule QVERIFY( MoleculeFile::writeMolecule(m_molecule, filename) ); QVERIFY( MoleculeFile::writeMolecule(m_molecule, filename, "sdf") ); QString error; QVERIFY( MoleculeFile::writeMolecule(m_molecule, filename, "sdf", "", &error) ); QVERIFY( error.isEmpty() ); // readMolecule Molecule *newMolecule = MoleculeFile::readMolecule(filename); QVERIFY( newMolecule ); QCOMPARE( newMolecule->numAtoms(), static_cast(3)); delete newMolecule; // test forced format QVERIFY( MoleculeFile::writeMolecule(m_molecule, filename, "xyz", "", &error) ); QVERIFY( error.isEmpty() ); newMolecule = MoleculeFile::readMolecule(filename, "xyz", "", &error); QVERIFY( error.isEmpty() ); QVERIFY( newMolecule ); QCOMPARE( newMolecule->numAtoms(), static_cast(3)); delete newMolecule; // test invalid format QVERIFY( !MoleculeFile::writeMolecule(m_molecule, filename, "invalid_format", "", &error) ); QVERIFY( !error.isEmpty() ); error.clear(); QVERIFY( !MoleculeFile::readMolecule(filename, "invalid_format", "", &error) ); QVERIFY( !error.isEmpty() ); error.clear(); } void MoleculeFileTest::readFile() { QString filename = "moleculefiletest_tmp.sdf"; OpenBabel::OBMol mol = m_molecule->OBMol(); OBConversion conv; conv.SetOutFormat("sdf"); std::ofstream ofs(filename.toAscii().data()); QVERIFY( ofs ); // write the molecule 4 times... conv.Write(&mol, &ofs); conv.Write(&mol, &ofs); conv.Write(&mol, &ofs); conv.Write(&mol, &ofs); ofs.close(); MoleculeFile* moleculeFile = MoleculeFile::readFile(filename.toAscii().data()); QVERIFY( moleculeFile ); QVERIFY( moleculeFile->errors().isEmpty() ); QCOMPARE( moleculeFile->isConformerFile(), true ); QCOMPARE( moleculeFile->numMolecules(), static_cast(1) ); QCOMPARE( moleculeFile->conformers().size(), static_cast::size_type>(4) ); ofs.open(filename.toAscii().data()); QVERIFY( ofs ); // write the molecule 4 times... conv.Write(&mol, &ofs); conv.Write(&mol, &ofs); mol.NewAtom(); conv.Write(&mol, &ofs); conv.Write(&mol, &ofs); moleculeFile = MoleculeFile::readFile(filename.toAscii().data()); QVERIFY( moleculeFile ); QVERIFY( moleculeFile->errors().isEmpty() ); QCOMPARE( moleculeFile->isConformerFile(), false ); QCOMPARE( moleculeFile->numMolecules(), static_cast(4) ); QCOMPARE( moleculeFile->conformers().size(), static_cast::size_type>(0) ); } void MoleculeFileTest::readWriteConformers() { std::vector conformer; foreach(Atom *atom, m_molecule->atoms()) { Q_UNUSED(atom) conformer.push_back(Eigen::Vector3d(0., 1., 2.)); } std::vector *> conformers; conformers.push_back(new std::vector(conformer)); conformers.push_back(new std::vector(conformer)); conformers.push_back(new std::vector(conformer)); conformers.push_back(new std::vector(conformer)); m_molecule->setAllConformers(conformers); QString filename = "moleculefiletest_tmp.sdf"; QVERIFY( MoleculeFile::writeConformers(m_molecule, filename) ); MoleculeFile* moleculeFile = MoleculeFile::readFile(filename.toAscii().data()); QVERIFY( moleculeFile ); QVERIFY( moleculeFile->errors().isEmpty() ); QCOMPARE( moleculeFile->isConformerFile(), true ); QCOMPARE( moleculeFile->numMolecules(), static_cast(1) ); QCOMPARE( moleculeFile->conformers().size(), static_cast::size_type>(4) ); } void MoleculeFileTest::replaceMolecule() { QString filename = "moleculefiletest_tmp.smi"; std::ofstream ofs(filename.toAscii().data()); ofs << "c1ccccc1 phenyl" << std::endl; ofs << "c1ccccc1N aniline" << std::endl; ofs << "c1ccccc1C toluene" << std::endl; ofs.close(); MoleculeFile* moleculeFile = MoleculeFile::readFile(filename.toAscii().data()); QVERIFY( moleculeFile ); QVERIFY( moleculeFile->errors().isEmpty() ); QCOMPARE( moleculeFile->isConformerFile(), false ); QCOMPARE( moleculeFile->numMolecules(), static_cast(3) ); // check 1st molecule Molecule *phenyl = moleculeFile->molecule(0); QCOMPARE( phenyl->numAtoms(), static_cast(6) ); delete phenyl; // check 2nd molecule Molecule *aniline = moleculeFile->molecule(1); QCOMPARE( aniline->numAtoms(), static_cast(7) ); QCOMPARE( aniline->atom(6)->atomicNumber(), 7 ); delete aniline; // check 3th molecule Molecule *toluene = moleculeFile->molecule(2); QCOMPARE( toluene->numAtoms(), static_cast(7) ); QCOMPARE( toluene->atom(6)->atomicNumber(), 6 ); delete toluene; // replace 2nd aniline = moleculeFile->molecule(1); aniline->addAtom(); aniline->addAtom(); QVERIFY( moleculeFile->replaceMolecule(1, aniline, filename) ); delete aniline; // check again aniline = moleculeFile->molecule(1); QVERIFY( aniline ); QCOMPARE( aniline->numAtoms(), static_cast(9) ); QCOMPARE( aniline->atom(6)->atomicNumber(), 7 ); delete aniline; toluene = moleculeFile->molecule(2); QVERIFY( toluene ); QCOMPARE( toluene->numAtoms(), static_cast(7) ); QCOMPARE( toluene->atom(6)->atomicNumber(), 6 ); delete toluene; // replace 1st phenyl = moleculeFile->molecule(0); phenyl->addAtom(); phenyl->addAtom(); QVERIFY( moleculeFile->replaceMolecule(0, phenyl, filename) ); delete phenyl; // check again phenyl = moleculeFile->molecule(0); QVERIFY( phenyl ); QCOMPARE( phenyl->numAtoms(), static_cast(8) ); delete phenyl; delete moleculeFile; } void MoleculeFileTest::appendMolecule() { QString filename = "moleculefiletest_tmp.smi"; std::ofstream ofs(filename.toAscii().data()); ofs << "c1ccccc1 phenyl" << std::endl; ofs << "c1ccccc1N aniline" << std::endl; ofs << "c1ccccc1C toluene" << std::endl; ofs.close(); MoleculeFile* moleculeFile = MoleculeFile::readFile(filename.toAscii().data()); QVERIFY( moleculeFile ); QVERIFY( moleculeFile->errors().isEmpty() ); QCOMPARE( moleculeFile->isConformerFile(), false ); QCOMPARE( moleculeFile->numMolecules(), static_cast(3) ); } QTEST_MAIN(MoleculeFileTest) #include "moc_moleculefiletest.cxx" avogadro-1.1.1/libavogadro/tests/drawcommandtest.cpp0000644000175000001440000020344512250371054022067 0ustar marcususers/********************************************************************** DrawCommandTest - unit testing for the the draw QUndoCommands used by the drawtool Copyright (C) 2009 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #include #include "../src/tools/drawcommand.cpp" /* AddAtomDrawCommand(Molecule *molecule, const Eigen::Vector3d& pos, unsigned int element, int adjustValence); AddAtomDrawCommand(Molecule *molecule, Atom *atom, int adjustValence); DeleteAtomDrawCommand(Molecule *molecule, int index, int adjustValence); AddBondDrawCommand(Molecule *molecule, Atom *beginAtom, Atom *endAtom, unsigned int order, int adjustValence); AddBondDrawCommand(Molecule *molecule, Bond *bond, int adjustValence); DeleteBondDrawCommand(Molecule *molecule, int index, int adjustValence); ChangeElementDrawCommand(Molecule *molecule, Atom *atom, unsigned int element, int adjustValence); ChangeBondOrderDrawCommand(Molecule *molecule, Bond *bond, unsigned int bondOrder, int adjustValence); InsertFragmentCommand(Molecule *molecule, Molecule &generatedMolecule); */ using Avogadro::AdjustHydrogens; using Avogadro::AdjustHydrogensPreCommand; using Avogadro::AdjustHydrogensPostCommand; using Avogadro::AddAtomDrawCommand; using Avogadro::DeleteAtomDrawCommand; using Avogadro::AddBondDrawCommand; using Avogadro::DeleteBondDrawCommand; using Avogadro::ChangeElementDrawCommand; using Avogadro::ChangeBondOrderDrawCommand; using Avogadro::Molecule; using Avogadro::Atom; using Avogadro::Bond; using Eigen::Vector3d; class DrawCommandTest : public QObject { Q_OBJECT private: QUndoStack *m_undoStack; /// QUndoStack object for use by the test class. Molecule *m_molecule; /// Molecule object for use by the test class. private: void debugMolecule(); void loopUndoRedo(); int numHydrogens(int element); int numNbrHydrogens(Atom *atom); int heavyBOsum(Atom *atom); /** * Test undo/redo of the current command in the stack. The atom & bond * ids are saved before calling undo/redo once. Next the atom & bond ids * are compared to their previous values. */ void singleUndoRedo(); /** * Test the first AddAtom constructor by pushing a command to the stack. */ //void pushAddAtom(int element, AdjustHydrogens::Options adj); /** * Test the second AddAtom constructor by pushing a command to the stack. */ //void pushAddAtom(Atom *atom, AdjustHydrogens::Options adj); /** * Test DeleteAtom by pushing a command to the stack. */ //void pushDeleteAtom(int index, int adj); /** * Test the first AddBond constructor by pushing a command to the stack. */ //void pushAddBond(Atom *beginAtom, Atom *endAtom, short order, // AdjustHydrogens::Options adjBegin, AdjustHydrogens::Options adjEnd); /** * Test the second AddBond constructor by pushing a command to the stack. */ //void pushAddBond(Bond *bond, AdjustHydrogens::Options adjBegin, // AdjustHydrogens::Options adjEnd); /** * Test DeleteBond by pushing a command to the stack. */ //void pushDeleteBond(int index, int adj); /** * Test ChangeElement by pushing a command to the stack. */ //void pushChangeElement(Atom *atom, int newElement, int adj); private slots: /** * Test the first pushAddAtom function. */ //void testPushAddAtom1(); /** * Test the second pushAddAtom function. */ //void testPushAddAtom2(); /** * Test the pushDeleteAtom function. */ //void testPushDeleteAtom(); /** * Test the first pushAddBond function. */ //void testPushAddBond1(); /** * Test the second pushAddBond function. */ //void testPushAddBond2(); /** * Test the pushDeleteBond function. */ //void testPushDeleteBond(); /** * Test the second pushChangeElement function. */ //void testPushChangeElement(); /** * Test AdjustHydrogensPreCommand */ //void AdjustHydrogensPreCommand_methane(); /** * Test AdjustHydrogensPreCommand */ //void AdjustHydrogensPostCommand_methane(); /** * Test AddAtomDrawCommand(molecule, pos, element, adj=1) */ //void AddAtom_methane(); /** * Test AddAtomDrawCommand(molecule, atom, adj=1) */ //void AddAtom_ammonia(); /** * Test AddAtomDrawCommand(molecule, pos, element, adj=0) * Test AddAtomDrawCommand(molecule, atom, adj=0) */ //void AddAtom_water(); /** * Test ChangeElementDrawCommand(molecule, atom, oldElement, adj=1); */ //void ChangeElement_ethane(); /** * Test ChangeElementDrawCommand(molecule, atom, oldElement, adj=0); */ //void ChangeElement_carbon(); /** * Test AddAtomDrawCommand(molecule, index, adj=1) */ //void DeleteAtom_methane(); /** * Test AddAtomDrawCommand(molecule, index, adj=0) */ //void DeleteAtom_carbon(); /** * Test AddBondDrawCommand(molecule, beginAtom, endAtom, order, adj=1) */ ///void AddBond_ethane(); /** * Test AddBondDrawCommand(molecule, bond, adj=1) */ //void AddBond_ethane2(); /** * Test ChangeBondOrderDrawCommand(molecule, index, adj=1) */ //void ChangeBondOrder_ethane(); //void ChangeBondOrder_ethene(); /** * Test DeleteBondDrawCommand(molecule, index, adj=1) */ //void DeleteBond_ethane(); // 2x AddAtom + AddBond //void AddAtomDrawCommand_ethane(); //void AddAtomDrawCommand_methanol(); //void AddAtom_AddBond_DeleteAtom(); //void AddAtom_ChangeElement_DeleteAtom(); // Crashers... //void crash1(); //void crash2(); //void crash3(); //void DeleteAtom_ethane(); void parseLogFiles(); void parseLogFile(const QString &fileName); /** * Called before the first test function is executed. */ void initTestCase(); /** * Called after the last test function is executed. */ void cleanupTestCase(); /** * Called before each test function is executed. */ void init(); /** * Called after every test function. */ void cleanup(); }; QStringList extractArguments(const QString &line) { QStringList args; bool copying = false; QString token; for (int i = 0; i < line.size(); ++i) { if (line.at(i) == '=') { copying = true; continue; } if (!token.isEmpty()) { if (line.at(i) == ' ' || line.at(i) == ',') { args.append(token); token.clear(); copying = false; continue; } } if (copying && line.at(i) != ' ') { token += line.at(i); } } return args; } void DrawCommandTest::parseLogFiles() { QDir testdatadir(TESTDATADIR); QStringList filter; filter << "*.drawlog"; testdatadir.setNameFilters(filter); QStringList logFiles = testdatadir.entryList(); foreach(const QString &fileName, logFiles) parseLogFile(testdatadir.absolutePath() + QDir::separator() + fileName); } void DrawCommandTest::parseLogFile(const QString &fileName) { m_molecule = new Molecule; m_undoStack = new QUndoStack; qDebug() << "TESTING ::" << fileName; QFile logFile(fileName); QVERIFY( logFile.open(QIODevice::ReadOnly | QIODevice::Text) ); while (!logFile.atEnd()) { QString line = logFile.readLine(); qDebug() << "INPUT: " << line; if (line.contains("::redo(") || line.contains("::undo(")) continue; if (line.startsWith("AddAtomDrawCommand")) { // extract arguments QStringList args = extractArguments(line); qDebug() << args; QCOMPARE( args.size(), 2 ); bool ok; int element = args[0].toInt(&ok); QVERIFY( ok ); AdjustHydrogens::Option adj = static_cast(args[1].toInt(&ok)); QVERIFY( ok ); // command has 2 constructors... if (line.contains("ctor1")) m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), element, adj) ); else { Atom *atom = m_molecule->addAtom(); qDebug() << "ID = " << atom->id() << "<----------------------------------------------------------------"; atom->setAtomicNumber(element); m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom, adj) ); } singleUndoRedo(); } // AddAtomDrawCommand if (line.startsWith("AddBondDrawCommand")) { // extract arguments QStringList args = extractArguments(line); qDebug() << args; QCOMPARE( args.size(), 5 ); bool ok; unsigned long begin = args[0].toULong(&ok); QVERIFY( ok ); unsigned long end = args[1].toULong(&ok); QVERIFY( ok ); int order = args[2].toInt(&ok); QVERIFY( ok ); AdjustHydrogens::Option adjBegin = static_cast(args[3].toInt(&ok)); QVERIFY( ok ); AdjustHydrogens::Option adjEnd = static_cast(args[4].toInt(&ok)); QVERIFY( ok ); Atom *beginAtom = m_molecule->atomById(begin); QVERIFY( beginAtom ); Atom *endAtom = m_molecule->atomById(end); QVERIFY( endAtom ); if (line.contains("ctor1")) m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, order, adjBegin, adjEnd) ); else { Bond *bond = m_molecule->addBond(); bond->setBegin(beginAtom); bond->setEnd(endAtom); bond->setOrder(order); m_undoStack->push( new AddBondDrawCommand(m_molecule, bond, adjBegin, adjEnd) ); } singleUndoRedo(); } // AddBondDrawCommand if (line.startsWith("DeleteAtomDrawCommand")) { // extract arguments QStringList args = extractArguments(line); QCOMPARE( args.size(), 2 ); bool ok; unsigned long id = args[0].toULong(&ok); QVERIFY( ok ); AdjustHydrogens::Option adj = static_cast(args[1].toInt(&ok)); QVERIFY( ok ); Atom *atom = m_molecule->atomById(id); QVERIFY( atom ); m_undoStack->push( new DeleteAtomDrawCommand(m_molecule, atom->index(), adj) ); singleUndoRedo(); } // DeleteAtomDrawCommand if (line.startsWith("DeleteBondDrawCommand")) { // extract arguments QStringList args = extractArguments(line); QCOMPARE( args.size(), 2 ); bool ok; unsigned long id = args[0].toULong(&ok); QVERIFY( ok ); AdjustHydrogens::Option adj = static_cast(args[1].toInt(&ok)); QVERIFY( ok ); Bond *bond = m_molecule->bondById(id); QVERIFY( bond ); m_undoStack->push( new DeleteBondDrawCommand(m_molecule, bond->index(), adj) ); singleUndoRedo(); } // DeleteBondDrawCommand if (line.startsWith("ChangeElementDrawCommand")) { // extract arguments QStringList args = extractArguments(line); QCOMPARE( args.size(), 4 ); bool ok; unsigned long id = args[0].toULong(&ok); QVERIFY( ok ); int oldElement = args[1].toInt(&ok); QVERIFY( ok ); int newElement = args[2].toInt(&ok); QVERIFY( ok ); AdjustHydrogens::Option adj = static_cast(args[3].toInt(&ok)); QVERIFY( ok ); Atom *atom = m_molecule->atomById(id); QVERIFY( atom ); QCOMPARE( atom->atomicNumber(), oldElement); atom->setAtomicNumber(newElement); m_undoStack->push( new ChangeElementDrawCommand(m_molecule, atom, oldElement, adj) ); singleUndoRedo(); } // ChangeElementDrawCommand if (line.startsWith("ChangeBondOrderDrawCommand")) { // extract arguments QStringList args = extractArguments(line); QCOMPARE( args.size(), 4 ); bool ok; unsigned long id = args[0].toULong(&ok); QVERIFY( ok ); int oldOrder = args[1].toInt(&ok); QVERIFY( ok ); int newOrder = args[2].toInt(&ok); QVERIFY( ok ); AdjustHydrogens::Option adj = static_cast(args[3].toInt(&ok)); QVERIFY( ok ); Bond *bond = m_molecule->bondById(id); QVERIFY( bond ); QCOMPARE( static_cast(bond->order()), oldOrder); bond->setOrder(newOrder); m_undoStack->push( new ChangeBondOrderDrawCommand(m_molecule, bond, oldOrder, adj) ); singleUndoRedo(); } // ChangeBondOrderDrawCommand } loopUndoRedo(); delete m_molecule; m_molecule = 0; delete m_undoStack; m_undoStack = 0; } void DrawCommandTest::initTestCase() { } void DrawCommandTest::cleanupTestCase() { } void DrawCommandTest::init() { } void DrawCommandTest::cleanup() { } /* int DrawCommandTest::numHydrogens(int element) { switch (element) { case 6: return 4; case 7: return 3; case 8: return 2; default: return 0; } } int DrawCommandTest::numNbrHydrogens(Atom *atom) { int nH = 0; foreach (unsigned long id, atom->neighbors()) { Atom *nbr = m_molecule->atomById(id); if (!nbr) continue; if (nbr->isHydrogen()) nH++; } return nH; } int DrawCommandTest::heavyBOsum(Atom *atom) { int nHeavy = 0; foreach (unsigned long id, atom->neighbors()) { Atom *nbr = m_molecule->atomById(id); if (!nbr) continue; if (!nbr->isHydrogen()) { Bond *bond = m_molecule->bond(atom, nbr); nHeavy += bond->order(); } } return nHeavy; } void DrawCommandTest::debugMolecule() { qDebug() << "Atoms: index, id, atomicNumber"; foreach (Atom *atom, m_molecule->atoms()) qDebug() << " index=" << atom->index() << ", id=" << atom->id() << ", atomicNumber=" << atom->atomicNumber() << ", valence=" << atom->valence(); qDebug() << "Bonds: index, id, begin, end"; foreach (Bond *bond, m_molecule->bonds()) qDebug() << " index=" << bond->index() << ", id=" << bond->id() << ", begin=" << bond->beginAtomId() << ", end=" << bond->endAtomId(); } */ void DrawCommandTest::loopUndoRedo() { // save some variables to check after undo/redo loop unsigned int numAtoms = m_molecule->numAtoms(); // save the index int cmdIndex = m_undoStack->index(); // save all atom & bond ids QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); qDebug() << "START UNDO/REDO"; for (int i = 1; i <= cmdIndex; ++i) { qDebug() << " undoing " << i << " commands..."; m_undoStack->setIndex(cmdIndex - i); // undo qDebug() << " redoing " << i << " commands..."; m_undoStack->setIndex(cmdIndex); // redo all // check if all atom & bond ids are still the same QCOMPARE(m_molecule->numAtoms(), numAtoms); foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); } } void DrawCommandTest::singleUndoRedo() { qDebug() << "START singleUndoRedo..."; // save all atom & bond ids QList atomIds, bondIds; qDebug() << " atoms:"; foreach (Atom *atom, m_molecule->atoms()) { atomIds.append(atom->id()); qDebug() << " index =" << atom->index() << " id =" << atom->id(); } qDebug() << " bonds:"; foreach (Bond *bond, m_molecule->bonds()) { bondIds.append(bond->id()); qDebug() << " index =" << bond->index() << " id =" << bond->id() << " begin =" << bond->beginAtomId() << " end =" << bond->endAtomId(); } qDebug() << " undoing..."; m_undoStack->undo(); qDebug() << " redoing..."; m_undoStack->redo(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) atomIds.size()); QCOMPARE(m_molecule->numBonds(), (unsigned int) bondIds.size()); // check if all atom & bond ids are still the same qDebug() << " atoms:"; foreach (Atom *atom, m_molecule->atoms()) { QCOMPARE(atom->id(), atomIds.at(atom->index())); qDebug() << " index =" << atom->index() << " id =" << atom->id(); } qDebug() << " bonds:"; foreach (Bond *bond, m_molecule->bonds()) { QCOMPARE(bond->id(), bondIds.at(bond->index())); qDebug() << " index =" << bond->index() << " id =" << bond->id() << " begin =" << bond->beginAtomId() << " end =" << bond->endAtomId(); } qDebug() << "END singleUndoRedo..."; } /* // AddAtomDrawCommand(Molecule *molecule, const Eigen::Vector3d& pos, unsigned int element, int adjustValence); void DrawCommandTest::pushAddAtom(int element, AdjustHydrogens::Options adj) { unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), element, adj) ); int nH = 0; if (adj & AdjustHydrogens::AddOnRedo) { nH = numHydrogens(element); QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 1 + nH); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + nH); } else { QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 1); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds); } // the first new atom must be the new atom... Atom *atom = m_molecule->atom(numAtoms); QVERIFY(atom); QCOMPARE(atom->atomicNumber(), element); // the rest should be hydrogens for (int i = 1; i <= nH; ++i) QCOMPARE(m_molecule->atom(numAtoms + i)->atomicNumber(), 1); // undo/redo and check ids... singleUndoRedo(); } // AddAtomDrawCommand(Molecule *molecule, Atom *atom, int adjustValence); void DrawCommandTest::pushAddAtom(Atom *atom, AdjustHydrogens::Options adj) { QVERIFY(atom); int element = atom->atomicNumber(); unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom, adj) ); int nH = 0; if (adj & AdjustHydrogens::AddOnRedo) { nH = numHydrogens(element); QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + nH); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + nH); } else { QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds); } // the atom was already added... QCOMPARE(m_molecule->atom(numAtoms - 1)->atomicNumber(), element); // the new atoms should be hydrogens for (int i = 0; i < nH; ++i) QCOMPARE(m_molecule->atom(numAtoms + i)->atomicNumber(), 1); // undo/redo and check ids... singleUndoRedo(); } void DrawCommandTest::testPushAddAtom1() { pushAddAtom(6, AdjustHydrogens::Never); pushAddAtom(6, AdjustHydrogens::Always); pushAddAtom(6, AdjustHydrogens::OnUndo); pushAddAtom(7, AdjustHydrogens::Never); pushAddAtom(7, AdjustHydrogens::Always); pushAddAtom(7, AdjustHydrogens::OnUndo); pushAddAtom(8, AdjustHydrogens::Never); pushAddAtom(8, AdjustHydrogens::Always); pushAddAtom(8, AdjustHydrogens::OnUndo); } void DrawCommandTest::testPushAddAtom2() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); pushAddAtom(atom1, AdjustHydrogens::Never); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); pushAddAtom(atom2, AdjustHydrogens::Always); Atom *atom3 = m_molecule->addAtom(); atom3->setAtomicNumber(6); pushAddAtom(atom3, AdjustHydrogens::OnUndo); Atom *atom4 = m_molecule->addAtom(); atom4->setAtomicNumber(7); pushAddAtom(atom4, AdjustHydrogens::Never); Atom *atom5 = m_molecule->addAtom(); atom5->setAtomicNumber(7); pushAddAtom(atom5, AdjustHydrogens::Always); Atom *atom6 = m_molecule->addAtom(); atom6->setAtomicNumber(7); pushAddAtom(atom6, AdjustHydrogens::OnUndo); Atom *atom7 = m_molecule->addAtom(); atom7->setAtomicNumber(8); pushAddAtom(atom7, AdjustHydrogens::Never); Atom *atom8 = m_molecule->addAtom(); atom8->setAtomicNumber(8); pushAddAtom(atom8, AdjustHydrogens::Always); Atom *atom9 = m_molecule->addAtom(); atom9->setAtomicNumber(8); pushAddAtom(atom9, AdjustHydrogens::OnUndo); } // DeleteAtomDrawCommand(Molecule *molecule, int index, int adjustValence); void DrawCommandTest::pushDeleteAtom(int index, int adj) { unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); Atom *atom = m_molecule->atom(index); QVERIFY(atom); int nH = 0; QList heavyNbrs; QList heavyValences; if (adj) { foreach (unsigned long id, atom->neighbors()) { Atom *nbr = m_molecule->atomById(id); if (!nbr) QFAIL("nbr = 0x0"); if (nbr->isHydrogen()) { nH++; } else { heavyNbrs.append(id); heavyValences.append((int)nbr->valence()); } } } // perform command m_undoStack->push( new DeleteAtomDrawCommand(m_molecule, index, adj) ); // check valences of neighboring heavy atoms foreach (unsigned long id, heavyNbrs) { Atom *nbr = m_molecule->atomById(id); if (!nbr) QFAIL("nbr = 0x0"); QCOMPARE((int)nbr->valence(), heavyValences.at(heavyNbrs.indexOf(id))); } QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms - 1 - nH); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds - nH); // undo/redo and check ids... singleUndoRedo(); } void DrawCommandTest::testPushDeleteAtom() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); pushAddAtom(atom1, AdjustHydrogens::Always); pushDeleteAtom(atom1->index(), 1); } // AddBondDrawCommand(Molecule *molecule, Atom *beginAtom, Atom *endAtom, unsigned int order, int adjustValence); void DrawCommandTest::pushAddBond(Atom *beginAtom, Atom *endAtom, short order, AdjustHydrogens::Options adjBegin, AdjustHydrogens::Options adjEnd) { QVERIFY(beginAtom); QVERIFY(endAtom); unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); int deltaH = 0; if (adjBegin & AdjustHydrogens::AddOnRedo) deltaH += numHydrogens(beginAtom->atomicNumber()) - numNbrHydrogens(beginAtom) - heavyBOsum(beginAtom) - order ; if (adjEnd & AdjustHydrogens::AddOnRedo) deltaH += numHydrogens(endAtom->atomicNumber()) - numNbrHydrogens(endAtom) - heavyBOsum(endAtom) - order ; // perform command m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, order, adjBegin, adjEnd) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + deltaH); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + 1 + deltaH); // undo/redo and check ids... singleUndoRedo(); } void DrawCommandTest::testPushAddBond1() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); pushAddBond(atom1, atom2, 1, AdjustHydrogens::Always, AdjustHydrogens::Always); Atom *atom3 = m_molecule->addAtom(); atom3->setAtomicNumber(6); pushAddBond(atom1, atom3, 2, AdjustHydrogens::Always, AdjustHydrogens::Always); } // AddBondDrawCommand(Molecule *molecule, Bond *bond, int adjustValence); void DrawCommandTest::pushAddBond(Bond *bond, AdjustHydrogens::Options adjBegin, AdjustHydrogens::Options adjEnd) { QVERIFY(bond); Atom *beginAtom = bond->beginAtom(); Atom *endAtom = bond->endAtom(); QVERIFY(beginAtom); QVERIFY(endAtom); unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); int deltaH = numHydrogens(beginAtom->atomicNumber()) + numHydrogens(endAtom->atomicNumber()) - numNbrHydrogens(beginAtom) - numNbrHydrogens(endAtom) - heavyBOsum(beginAtom) - heavyBOsum(endAtom); // perform command m_undoStack->push( new AddBondDrawCommand(m_molecule, bond, adjBegin, adjEnd) ); if (adjBegin || adjEnd) { QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + deltaH); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + deltaH); } else { QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds); } // undo/redo and check ids... singleUndoRedo(); } void DrawCommandTest::testPushAddBond2() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); Bond *bond1 = m_molecule->addBond(); bond1->setAtoms(atom1->id(), atom2->id(), 2); pushAddBond(bond1, AdjustHydrogens::Always, AdjustHydrogens::Always); Atom *atom3 = m_molecule->addAtom(); atom3->setAtomicNumber(6); Bond *bond2 = m_molecule->addBond(); bond2->setAtoms(atom1->id(), atom3->id(), 1); pushAddBond(bond2, AdjustHydrogens::Always, AdjustHydrogens::Always); } // DeleteBondDrawCommand(Molecule *molecule, int index, int adjustValence); void DrawCommandTest::pushDeleteBond(int index, int adj) { unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); Bond *bond = m_molecule->bond(index); QVERIFY(bond); int deltaH = 2 * bond->order(); // perform command m_undoStack->push( new DeleteBondDrawCommand(m_molecule, index, adj) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + deltaH); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds - 1 + deltaH); // undo/redo and check ids... singleUndoRedo(); } void DrawCommandTest::testPushDeleteBond() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); Bond *bond1 = m_molecule->addBond(); bond1->setAtoms(atom1->id(), atom2->id(), 2); m_molecule->addHydrogens(); pushDeleteBond(bond1->index(), 1); Atom *atom3 = m_molecule->addAtom(); atom3->setAtomicNumber(6); Bond *bond2 = m_molecule->addBond(); bond2->setAtoms(atom1->id(), atom2->id(), 2); m_molecule->removeHydrogens(); m_molecule->addHydrogens(); pushDeleteBond(bond2->index(), 1); } // ChangeElementDrawCommand(Molecule *molecule, Atom *atom, unsigned int element, int adjustValence); void DrawCommandTest::pushChangeElement(Atom *atom, int newElement, int adj) { QVERIFY(atom); unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); int oldElement = atom->atomicNumber(); int nHbefore = numNbrHydrogens(atom);; atom->setAtomicNumber(newElement); m_undoStack->push( new ChangeElementDrawCommand(m_molecule, atom, oldElement, adj) ); int deltaH = 0; if (adj) { deltaH = numHydrogens(newElement) - nHbefore; QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + deltaH); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + deltaH); } else { QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds); } // the atom was already added... QCOMPARE(atom->atomicNumber(), newElement); // undo/redo and check ids... singleUndoRedo(); } void DrawCommandTest::testPushChangeElement() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); unsigned long int id1 = atom1->id(); pushAddAtom(atom1, AdjustHydrogens::Always); atom1 = m_molecule->atomById(id1); pushChangeElement(atom1, 7, 1); pushChangeElement(atom1, 8, 1); } void DrawCommandTest::AddAtom_methane() { // Add crabon atom, adjust hydrogens on undo & redo m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); // we now have methane QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(4)->atomicNumber(), 1); loopUndoRedo(); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->index(), bond->id()); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(4)->atomicNumber(), 1); } void DrawCommandTest::AddAtom_ammonia() { Atom *atom = m_molecule->addAtom(); atom->setAtomicNumber(7); // redo will be called automatically, the index will also be increased m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 3); QCOMPARE((int)m_molecule->atomById(0)->valence(), 3); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 7); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(3)->atomicNumber(), 1); loopUndoRedo(); // check if the hydrogens still have the same ids foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->index(), bond->id()); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 3); QCOMPARE((int)m_molecule->atomById(0)->valence(), 3); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 7); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(3)->atomicNumber(), 1); } void DrawCommandTest::AddAtom_water() { // redo will be called automatically, the index will also be increased m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 8, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 3); QCOMPARE(m_molecule->numBonds(), (unsigned int) 2); QCOMPARE((int)m_molecule->atomById(0)->valence(), 2); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 8); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); loopUndoRedo(); // check if the hydrogens still have the same ids foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->index(), bond->id()); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 3); QCOMPARE(m_molecule->numBonds(), (unsigned int) 2); QCOMPARE((int)m_molecule->atomById(0)->valence(), 2); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 8); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); } void DrawCommandTest::AddAtomDrawCommand_ethane() { // redo will be called automatically, the index will also be increased m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); Atom *beginAtom = m_molecule->atomById(0); // C1 Atom *endAtom = m_molecule->atomById(5); // C2 m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, 1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); loopUndoRedo(); } void DrawCommandTest::AddAtomDrawCommand_methanol() { // redo will be called automatically, the index will also be increased m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 8, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); Atom *beginAtom = m_molecule->atomById(0); // C Atom *endAtom = m_molecule->atomById(5); // O m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, 1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 6); loopUndoRedo(); } void DrawCommandTest::AddAtom_AddBond_DeleteAtom() { unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); // Add 1st C --> CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); unsigned long beginAtomId = numAtoms; QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 5); QCOMPARE(m_molecule->atomById(beginAtomId)->valence(), 4.); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + 4); // Add 2nd C --> CH4 CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); unsigned long endAtomId = numAtoms + 5; QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 10); QCOMPARE((int)m_molecule->atomById(endAtomId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + 8); // Add C-C bond --> H3C--CH3 Atom *beginAtom = m_molecule->atomById(beginAtomId); // C1 Atom *endAtom = m_molecule->atomById(endAtomId); // C2 m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, 1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 8); QCOMPARE((int)m_molecule->atomById(beginAtomId)->valence(), 4); QCOMPARE((int)m_molecule->atomById(endAtomId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + 7); Bond *bond = m_molecule->bond(beginAtom, endAtom); QVERIFY(bond); QCOMPARE(bond->id(), (unsigned long) numAtoms + 8); // Delete 1st C atom --> CH4 m_undoStack->push( new DeleteAtomDrawCommand(m_molecule, beginAtom->index(), 2) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 5); QCOMPARE((int)m_molecule->atomById(endAtomId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + 4); foreach (Bond *bond, m_molecule->bonds()) { QVERIFY( m_molecule->atomById(bond->beginAtomId()) ); // make sure C1 exists QVERIFY( m_molecule->atomById(bond->endAtomId()) ); // make sure C2 exists } // save the index int cmdIndex = m_undoStack->index(); m_undoStack->setIndex(cmdIndex-1); // undo DeleteAtom QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE((int)m_molecule->atomById(beginAtomId)->valence(), 4); QCOMPARE((int)m_molecule->atomById(endAtomId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); //debugMolecule(); QVERIFY( m_molecule->bond(beginAtomId, endAtomId) ); // make sure C1 and C2 are connected m_undoStack->setIndex(cmdIndex-2); // undo AddBond QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE((int)m_molecule->atomById(endAtomId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); m_undoStack->setIndex(cmdIndex-3); // undo AddAtom QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE((int)m_molecule->atomById(beginAtomId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); m_undoStack->setIndex(cmdIndex-4); // undo AddAtom QCOMPARE(m_molecule->numAtoms(), (unsigned int) 0); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); loopUndoRedo(); } void DrawCommandTest::AddAtom_ChangeElement_DeleteAtom() { unsigned int numAtoms = m_molecule->numAtoms(); unsigned int numBonds = m_molecule->numBonds(); // Add 1st C --> CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); unsigned long carbonId = numAtoms; QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 5); QCOMPARE((int)m_molecule->atomById(carbonId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + 4); Atom *hydrogen = m_molecule->atom(numAtoms + 1); unsigned long hydrogenId = hydrogen->id(); // Change H to C --> H3C--CH3 hydrogen->setAtomicNumber(6); m_undoStack->push( new ChangeElementDrawCommand(m_molecule, hydrogen, 1, 1) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 8); QCOMPARE((int)m_molecule->atomById(carbonId)->valence(), 4); QCOMPARE((int)m_molecule->atomById(hydrogenId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + 7); // save the index int cmdIndex = m_undoStack->index(); m_undoStack->setIndex(cmdIndex-1); // undo ChangeElement QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE((int)m_molecule->atomById(carbonId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); m_undoStack->setIndex(cmdIndex-2); // undo AddAtom QCOMPARE(m_molecule->numAtoms(), (unsigned int) 0); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); m_undoStack->setIndex(cmdIndex); // redo all QCOMPARE(m_molecule->numAtoms(), (unsigned int) numAtoms + 8); QCOMPARE((int)m_molecule->atomById(carbonId)->valence(), 4); QCOMPARE((int)m_molecule->atomById(hydrogenId)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) numBonds + 7); loopUndoRedo(); } void DrawCommandTest::AdjustHydrogensPreCommand_methane() { // Add C Atom *atom = m_molecule->addAtom(); atom->setAtomicNumber(6); // Add hydrogens --> CH4 m_molecule->addHydrogens(atom); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // run AdjustHydrogensPreCommand: // ::redo() saves the hydrogens' ids and removes the hydrogens // ::undo() adds the hydrogens again with the same ids QList atomIds; atomIds.append(atom->id()); m_undoStack->push( new AdjustHydrogensPreCommand(m_molecule, atomIds) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 1); QCOMPARE((int)m_molecule->atomById(0)->valence(), 0); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); // undo/redo 10 times int cmdIndex = m_undoStack->index(); for (int i = 0; i < 10; ++i) { m_undoStack->setIndex(0); // undo m_undoStack->setIndex(cmdIndex); // redo } m_undoStack->setIndex(0); // undo // check if the hydrogens still have the same ids foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->index(), bond->id()); } void DrawCommandTest::AdjustHydrogensPostCommand_methane() { // Add C Atom *atom = m_molecule->addAtom(); atom->setAtomicNumber(6); // run AdjustHydrogensPostCommand: // ::redo() add hydrogens and save their ids, later calls will add the hydrogens with the same ids // ::undo() remove the hydrogens QList atomIds; atomIds.append(atom->id()); m_undoStack->push( new AdjustHydrogensPostCommand(m_molecule, atomIds) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // undo/redo 10 times int cmdIndex = m_undoStack->index(); for (int i = 0; i < 10; ++i) { m_undoStack->setIndex(0); // undo m_undoStack->setIndex(cmdIndex); // redo } QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // check if the hydrogens still have the same ids foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->index(), bond->id()); } void DrawCommandTest::ChangeElement_ethane() { // Add carbon --> CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); Atom *hydrogen = m_molecule->atom(1); // first hydrogen // Change H to C --> H3C--CH3 hydrogen->setAtomicNumber(6); m_undoStack->push( new ChangeElementDrawCommand(m_molecule, hydrogen, 1, 1) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE((int)m_molecule->atomById(1)->valence(), 4); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 6); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(4)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(5)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(6)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(7)->atomicNumber(), 1); loopUndoRedo(); // check if the hydrogens still have the same ids foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->index(), bond->id()); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE((int)m_molecule->atomById(1)->valence(), 4); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 6); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(4)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(5)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(6)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(7)->atomicNumber(), 1); } void DrawCommandTest::ChangeElement_carbon() { // Add carbon m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Never) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 1); Atom *carbon = m_molecule->atom(0); // first hydrogen // Change C to O carbon->setAtomicNumber(8); m_undoStack->push( new ChangeElementDrawCommand(m_molecule, carbon, 6, 0) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 1); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); QCOMPARE((int)m_molecule->atomById(0)->valence(), 0); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 8); loopUndoRedo(); // check if the hydrogens still have the same ids foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->index(), bond->id()); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 1); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); QCOMPARE((int)m_molecule->atomById(0)->valence(), 0); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 8); } void DrawCommandTest::DeleteAtom_methane() { // redo will be called automatically, the index will also be increased m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(4)->atomicNumber(), 1); m_undoStack->push( new DeleteAtomDrawCommand(m_molecule, 0, 1) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 0); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); loopUndoRedo(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 0); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); m_undoStack->undo(); // undo DeleteAtom // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->index(), bond->id()); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atomById(1)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atomById(4)->atomicNumber(), 1); } void DrawCommandTest::DeleteAtom_ethane() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); Bond *bond1 = m_molecule->addBond(); bond1->setAtoms(atom1->id(), atom2->id(), 1); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom1, AdjustHydrogens::OnUndo) ); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom2, AdjustHydrogens::OnUndo) ); // AddBondDrawCommand(begin= 0 , end= 1 , adj= 2 ) m_undoStack->push( new AddBondDrawCommand(m_molecule, bond1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); QCOMPARE((int)m_molecule->atomById(0)->valence(), 4); m_undoStack->push( new DeleteAtomDrawCommand(m_molecule, 0, 1) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); //debugMolecule(); QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); //debugMolecule(); loopUndoRedo(); //debugMolecule(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); } void DrawCommandTest::DeleteAtom_carbon() { // redo will be called automatically, the index will also be increased m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Never) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 1); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); QCOMPARE((int)m_molecule->atomById(0)->valence(), 0); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 6); m_undoStack->push( new DeleteAtomDrawCommand(m_molecule, 0, 0) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 0); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); loopUndoRedo(); m_undoStack->undo(); // undo DeleteAtom // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->index(), atom->id()); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 1); QCOMPARE(m_molecule->numBonds(), (unsigned int) 0); QCOMPARE((int)m_molecule->atomById(0)->valence(), 0); QCOMPARE(m_molecule->atomById(0)->atomicNumber(), 6); } void DrawCommandTest::AddBond_ethane() { // Add 1st C --> CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // Add 2nd C --> CH4 CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); // Add C-C bond --> H3C--CH3 Atom *beginAtom = m_molecule->atomById(0); // C1 Atom *endAtom = m_molecule->atomById(5); // C2 m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, 1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE((int)beginAtom->valence(), 4); QCOMPARE((int)endAtom->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); Bond *bond = m_molecule->bond(beginAtom, endAtom); QVERIFY(bond); QCOMPARE(bond->id(), (unsigned long) 8); // save the atom & bond ids since they are no longer the same as indexes QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); //debugMolecule(); loopUndoRedo(); //debugMolecule(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); QCOMPARE((int)m_molecule->atom(0)->valence(), 4); QCOMPARE((int)m_molecule->atom(1)->valence(), 4); QCOMPARE(m_molecule->atom(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(1)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(4)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(5)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(6)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(7)->atomicNumber(), 1); } void DrawCommandTest::AddBond_ethane2() { // Add 1st C --> CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // Add 2nd C --> CH4 CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); Bond *bond = m_molecule->addBond(); Atom *beginAtom = m_molecule->atomById(0); // C1 Atom *endAtom = m_molecule->atomById(5); // C2 bond->setAtoms(0, 5, 1); // Add C-C bond --> H3C--CH3 m_undoStack->push( new AddBondDrawCommand(m_molecule, bond, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE((int)beginAtom->valence(), 4); QCOMPARE((int)endAtom->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); QVERIFY(bond); QCOMPARE(bond->id(), (unsigned long) 8); // save the atom & bond ids since they are no longer the same as indexes QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); //debugMolecule(); loopUndoRedo(); //debugMolecule(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); QCOMPARE((int)m_molecule->atom(0)->valence(), 4); QCOMPARE((int)m_molecule->atom(1)->valence(), 4); QCOMPARE(m_molecule->atom(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(1)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(4)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(5)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(6)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(7)->atomicNumber(), 1); } void DrawCommandTest::ChangeBondOrder_ethane() { // Add 1st C --> CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // Add 2nd C --> CH4 CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); // Add C-C bond --> H3C--CH3 Atom *beginAtom = m_molecule->atomById(0); // C1 Atom *endAtom = m_molecule->atomById(5); // C2 m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, 1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE((int)beginAtom->valence(), 4); QCOMPARE((int)endAtom->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); Bond *bond = m_molecule->bond(beginAtom, endAtom); QVERIFY(bond); QCOMPARE(bond->id(), (unsigned long) 8); // save the atom & bond ids since they are no longer the same as indexes QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); //debugMolecule(); bond->setOrder(2); m_undoStack->push( new ChangeBondOrderDrawCommand(m_molecule, bond, 1, 2) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 6); m_undoStack->undo(); // undo ChangeBondOrder 1 -> 2 //debugMolecule(); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); m_undoStack->redo(); loopUndoRedo(); m_undoStack->undo(); // undo ChangeBondOrder 1 -> 2 //debugMolecule(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); QCOMPARE((int)m_molecule->atom(0)->valence(), 4); QCOMPARE((int)m_molecule->atom(1)->valence(), 4); QCOMPARE(m_molecule->atom(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(1)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(4)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(5)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(6)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(7)->atomicNumber(), 1); } void DrawCommandTest::ChangeBondOrder_ethene() { // Add 1st C --> CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // Add 2nd C --> CH4 CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); // Add C-C bond --> H3C--CH3 Atom *beginAtom = m_molecule->atomById(0); // C1 Atom *endAtom = m_molecule->atomById(5); // C2 m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, 2, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 6); QCOMPARE((int)beginAtom->valence(), 3); QCOMPARE((int)endAtom->valence(), 3); QCOMPARE(m_molecule->numBonds(), (unsigned int) 5); Bond *bond = m_molecule->bond(beginAtom, endAtom); QVERIFY(bond); QCOMPARE(bond->id(), (unsigned long) 8); // save the atom & bond ids since they are no longer the same as indexes QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); //debugMolecule(); bond->setOrder(3); m_undoStack->push( new ChangeBondOrderDrawCommand(m_molecule, bond, 2, 2) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 3); m_undoStack->undo(); // undo ChangeBondOrder 2 -> 3 //debugMolecule(); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); m_undoStack->redo(); loopUndoRedo(); m_undoStack->undo(); // undo ChangeBondOrder 1 -> 2 QCOMPARE(m_molecule->numAtoms(), (unsigned int) 6); QCOMPARE(m_molecule->numBonds(), (unsigned int) 5); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); QCOMPARE((int)m_molecule->atom(0)->valence(), 3); QCOMPARE((int)m_molecule->atom(1)->valence(), 3); QCOMPARE(m_molecule->atom(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(1)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(4)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(5)->atomicNumber(), 1); } void DrawCommandTest::DeleteBond_ethane() { // Add 1st C --> CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 5); QCOMPARE(m_molecule->numBonds(), (unsigned int) 4); // Add 2nd C --> CH4 CH4 m_undoStack->push( new AddAtomDrawCommand(m_molecule, Eigen::Vector3d::Zero(), 6, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); //debugMolecule(); // save the atom & bond ids since they are no longer the same as indexes QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); // Add C-C bond --> H3C--CH3 Atom *beginAtom = m_molecule->atomById(0); // C1 Atom *endAtom = m_molecule->atomById(5); // C2 m_undoStack->push( new AddBondDrawCommand(m_molecule, beginAtom, endAtom, 1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE((int)beginAtom->valence(), 4); QCOMPARE((int)endAtom->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); Bond *bond = m_molecule->bond(beginAtom, endAtom); QVERIFY(bond); QCOMPARE(bond->id(), (unsigned long) 8); m_undoStack->push( new DeleteBondDrawCommand(m_molecule, bond->index(), 2) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE((int)beginAtom->valence(), 4); QCOMPARE((int)endAtom->valence(), 4); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); //debugMolecule(); loopUndoRedo(); //debugMolecule(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); m_undoStack->undo(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); m_undoStack->undo(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 10); QCOMPARE(m_molecule->numBonds(), (unsigned int) 8); //debugMolecule(); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QVERIFY(atomIds.contains(atom->id())); foreach (Bond *bond, m_molecule->bonds()) QVERIFY(bondIds.contains(bond->id())); QCOMPARE((int)m_molecule->atom(0)->valence(), 4); QCOMPARE((int)m_molecule->atom(1)->valence(), 4); QCOMPARE(m_molecule->atom(0)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(1)->atomicNumber(), 6); QCOMPARE(m_molecule->atom(2)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(3)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(4)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(5)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(6)->atomicNumber(), 1); QCOMPARE(m_molecule->atom(7)->atomicNumber(), 1); } void DrawCommandTest::crash1() { Atom *beginAtom = m_molecule->addAtom(); beginAtom->setAtomicNumber(6); Atom *endAtom = m_molecule->addAtom(); endAtom->setAtomicNumber(6); Bond *bond = m_molecule->addBond(); bond->setAtoms(beginAtom->id(), endAtom->id(), 1); //AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, beginAtom, AdjustHydrogens::OnUndo) ); qDebug() << "numAtoms =" << m_molecule->numAtoms(); //AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, endAtom, AdjustHydrogens::OnUndo) ); qDebug() << "numAtoms =" << m_molecule->numAtoms(); //AddBondDrawCommand(begin= 0 , end= 1 , adj= 2 ) m_undoStack->push( new AddBondDrawCommand(m_molecule, bond, AdjustHydrogens::Always, AdjustHydrogens::Always) ); qDebug() << "numAtoms =" << m_molecule->numAtoms(); //ChangeBondOrderDrawCommand(id= 0 , old= 1 , adj= 2 ) bond->setOrder(2); m_undoStack->push( new ChangeBondOrderDrawCommand(m_molecule, bond, 1, 1) ); qDebug() << "numAtoms =" << m_molecule->numAtoms(); //debugMolecule(); loopUndoRedo(); //debugMolecule(); } void DrawCommandTest::crash2() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); Bond *bond1 = m_molecule->addBond(); bond1->setAtoms(atom1->id(), atom2->id(), 1); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom1, AdjustHydrogens::OnUndo) ); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom2, AdjustHydrogens::OnUndo) ); // AddBondDrawCommand(begin= 0 , end= 1 , adj= 2 ) m_undoStack->push( new AddBondDrawCommand(m_molecule, bond1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); Atom *atom3 = m_molecule->addAtom(); atom3->setAtomicNumber(6); Bond *bond2 = m_molecule->addBond(); bond2->setAtoms(atom3->id(), atom2->id(), 1); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom3, AdjustHydrogens::OnUndo) ); // AddBondDrawCommand(begin= 8 , end= 1 , adj= 2 ) m_undoStack->push( new AddBondDrawCommand(m_molecule, bond2, AdjustHydrogens::Always, AdjustHydrogens::Always) ); Atom *atom4 = m_molecule->addAtom(); atom4->setAtomicNumber(6); Bond *bond3 = m_molecule->addBond(); bond3->setAtoms(atom2->id(), atom4->id(), 1); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom4, AdjustHydrogens::OnUndo) ); // AddBondDrawCommand(begin= 1 , end= 15 , adj= 2 ) m_undoStack->push( new AddBondDrawCommand(m_molecule, bond3, AdjustHydrogens::Always, AdjustHydrogens::Always) ); // ChangeBondOrderDrawCommand(id= 13 , old= 1 , adj= 2 ) Bond *bond = m_molecule->bondById(13); bond->setOrder(2); m_undoStack->push( new ChangeBondOrderDrawCommand(m_molecule, bond, 1, 1) ); // ChangeElementDrawCommand(id= 0 , old= 6 , adj= 2 ) atom1->setAtomicNumber(8); m_undoStack->push( new ChangeElementDrawCommand(m_molecule, atom1, 6, 0) ); // ChangeElementDrawCommand(id= 15 , old= 6 , adj= 2 ) atom4->setAtomicNumber(8); m_undoStack->push( new ChangeElementDrawCommand(m_molecule, atom4, 6, 0) ); // DeleteAtomDrawCommand(id= 8 , adj= 2 ) m_undoStack->push( new DeleteAtomDrawCommand(m_molecule, atom3->index(), 2) ); //debugMolecule(); loopUndoRedo(); //debugMolecule(); } void DrawCommandTest::crash3() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); Bond *bond1 = m_molecule->addBond(); bond1->setAtoms(atom1->id(), atom2->id(), 1); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom1, AdjustHydrogens::OnUndo) ); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom2, AdjustHydrogens::OnUndo) ); // AddBondDrawCommand(begin= 0 , end= 1 , adj= 2 ) m_undoStack->push( new AddBondDrawCommand(m_molecule, bond1, AdjustHydrogens::Always, AdjustHydrogens::Always) ); // ChangeBondOrderDrawCommand(id= 0 , old= 1 , adj= 2 ) bond1->setOrder(2); m_undoStack->push( new ChangeBondOrderDrawCommand(m_molecule, bond1, 1, 1) ); // DeleteAtomDrawCommand(id= 1 , adj= 2 ) m_undoStack->push( new DeleteAtomDrawCommand(m_molecule, atom2->index(), 2) ); Atom *atom3 = m_molecule->addAtom(); atom3->setAtomicNumber(6); Bond *bond2 = m_molecule->addBond(); bond2->setAtoms(atom1->id(), atom3->id(), 1); // AddAtomDrawCommand_ctor2(element= 6 , adj= 2 ) m_undoStack->push( new AddAtomDrawCommand(m_molecule, atom3, AdjustHydrogens::OnUndo) ); // AddBondDrawCommand(begin= 14 , end= 0 , adj= 2 ) m_undoStack->push( new AddBondDrawCommand(m_molecule, bond2, AdjustHydrogens::Always, AdjustHydrogens::Always) ); //debugMolecule(); loopUndoRedo(); //debugMolecule(); } */ QTEST_MAIN(DrawCommandTest) #include "moc_drawcommandtest.cxx" avogadro-1.1.1/libavogadro/tests/moleculebench.cpp0000644000175000001440000002211012250371054021464 0ustar marcususers/********************************************************************** Molecule - MoleculeBench class provides benchmarking for the Molecule class Copyright (C) 2009 Marcus D. Hanwell Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #include #include #include using Avogadro::Molecule; using Avogadro::Atom; using Avogadro::Bond; using Eigen::Vector3d; class MoleculeBench : public QObject { Q_OBJECT private: Molecule *m_molecule; /// Molecule object for use by the test class. /** * Prepare a starting molecule of known geometry for other tests. */ void prepareMolecule(); private slots: /** * Called before the first test function is executed. */ void initTestCase(); /** * Called after the last test function is executed. */ void cleanupTestCase(); /** * Called before each test function. */ void init(); /** * Called after each test function. */ void cleanup(); /** * Constructor test */ void constructor(); /** * Timing to add 25,000 uninitialized atoms */ void addAtoms(); /** * Timing to remove 25,000 uninitialized atoms */ void removeAtoms(); /** * Timing to add 25,000 atoms, set atomic number and position */ void addAtoms2(); /** * Timing to clear the 25,000 initialized atom molecule */ void clear(); /** * Timing to add 25,000 atoms using the type and position convenience * overload. */ void addAtomOverload1(); /** * Timing to add 25,000 more atoms using the copy overload. */ void addAtomOverload2(); /** * Timing to add 24,999 bonds using the convenience overloads. */ void addBondOverload(); /** * Copy 25,000 atoms and 24,999 bonds using the QList overload of * Molecule::copyAtomsAndBonds() */ void copyAtomsAndBondsQList(); /** * Copy 25,000 atoms and 24,999 bonds using the PrimitiveList overload of * Molecule::copyAtomsAndBonds() */ void copyAtomsAndBondsPrimitiveList(); /** * Destruct the molecule */ void destructor(); /** * Construct the molecule again */ void constructor2(); /** * Destructor test 2, with 10,000 atoms in a new Molecule */ void destructor2(); /** * Destructor test 3, with 10,000 atoms in a new Molecule, updated positions */ void destructor3(); /** * Destructor test 4, with 10,000 atoms in a new Molecule, updated positions, * removed, then added back. */ void destructor4(); /** * Destructor test 5, with 10,000 atoms in a new Molecule, updated positions, * removed, then added back, then removed and added back again. */ void destructor5(); /** * Destructor test 6, with 30,000 atoms in a new Molecule, updated positions */ void destructor6(); /** * deleteLater test, with 30,000 atoms in a new Molecule, updated positions */ void deleteLater(); }; void MoleculeBench::initTestCase() { m_molecule = 0; } void MoleculeBench::cleanupTestCase() { delete m_molecule; m_molecule = 0; } void MoleculeBench::init() { m_molecule = new Avogadro::Molecule (); } void MoleculeBench::cleanup() { delete m_molecule; m_molecule = 0; } void MoleculeBench::constructor() { delete m_molecule; QBENCHMARK_ONCE { m_molecule = new Molecule; } } void MoleculeBench::addAtoms() { QBENCHMARK_ONCE { for (int i = 0; i < 25000; ++i) m_molecule->addAtom(); } } void MoleculeBench::removeAtoms() { for (int i = 0; i < 25000; ++i) m_molecule->addAtom(); QBENCHMARK_ONCE{ for (int i = 25000; i >= 0; --i) m_molecule->removeAtom(i); } } void MoleculeBench::addAtoms2() { QBENCHMARK_ONCE{ for (int i = 0; i < 25000; ++i) { Atom *a = m_molecule->addAtom(); a->setAtomicNumber(6); a->setPos(Vector3d(1.0, 1.0, 1.0)); } } } void MoleculeBench::clear() { for (int i = 0; i < 25000; ++i) { Atom *a = m_molecule->addAtom(); a->setAtomicNumber(6); a->setPos(Vector3d(1.0, 1.0, 1.0)); } QBENCHMARK_ONCE{ m_molecule->clear(); } } void MoleculeBench::addAtomOverload1() { QBENCHMARK_ONCE{ for (int i = 0; i < 25000; ++i) { m_molecule->addAtom(6, Vector3d(1.0, 1.0, 1.0)); } } } void MoleculeBench::addAtomOverload2() { Atom *atom = m_molecule->addAtom(6, Vector3d(1.0, 1.0, 1.0)); QBENCHMARK_ONCE{ for (int i = 0; i < 25000; ++i) { m_molecule->addAtom(*atom); } } } void MoleculeBench::addBondOverload() { for (int i = 0; i < 25000; ++i) { m_molecule->addAtom(6, Vector3d(1.0, 1.0, 1.0)); } const unsigned long max = m_molecule->numAtoms() - 1; QBENCHMARK_ONCE{ for (unsigned long i = 0; i < max; ++i) { m_molecule->addBond(i, i+1, 1); } } } void MoleculeBench::copyAtomsAndBondsQList() { Avogadro::Molecule mol; for (int i = 0; i < 25000; ++i) { m_molecule->addAtom(6, Vector3d(1.0, 1.0, 1.0)); } for (unsigned long i = 0; i < 24999; ++i) { m_molecule->addBond(i, i+1, 1); } QBENCHMARK_ONCE{ mol.copyAtomsAndBonds(m_molecule->atoms(), m_molecule->bonds()); } } void MoleculeBench::copyAtomsAndBondsPrimitiveList() { Avogadro::Molecule mol; for (int i = 0; i < 25000; ++i) { m_molecule->addAtom(6, Vector3d(1.0, 1.0, 1.0)); } for (unsigned long i = 0; i < 24999; ++i) { m_molecule->addBond(i, i+1, 1); } const QList atoms (m_molecule->atoms()); const QList bonds (m_molecule->bonds()); Avogadro::PrimitiveList list; foreach (Avogadro::Atom *atom, atoms) list.append(atom); foreach (Avogadro::Bond *bond, bonds) list.append(bond); QBENCHMARK_ONCE{ mol.copyAtomsAndBonds(list); } } void MoleculeBench::destructor() { QBENCHMARK_ONCE{ delete m_molecule; m_molecule = 0; } } void MoleculeBench::constructor2() { delete m_molecule; m_molecule = 0; QBENCHMARK_ONCE{ m_molecule = new Molecule; } } void MoleculeBench::destructor2() { for (int i = 0; i < 10000; ++i) m_molecule->addAtom(); QBENCHMARK_ONCE{ delete m_molecule; m_molecule = 0; } } void MoleculeBench::destructor3() { for (int i = 0; i < 10000; ++i) { Atom *a = m_molecule->addAtom(); a->setPos(Vector3d(1.0, 1.0, 1.0)); } QBENCHMARK_ONCE{ delete m_molecule; m_molecule = 0; } } void MoleculeBench::destructor4() { for (int i = 0; i < 10000; ++i) { Atom *a = m_molecule->addAtom(); a->setPos(Vector3d(1.0, 1.0, 1.0)); } m_molecule->clear(); for (int i = 0; i < 10000; ++i) { Atom *a = m_molecule->addAtom(); a->setPos(Vector3d(1.0, 1.0, 1.0)); } qDebug() << "Before:" << m_molecule->children().size(); QBENCHMARK_ONCE{ delete m_molecule; m_molecule = 0; } } void MoleculeBench::destructor5() { for (int i = 0; i < 10000; ++i) { Atom *a = m_molecule->addAtom(); a->setPos(Vector3d(1.0, 1.0, 1.0)); } m_molecule->clear(); for (int i = 0; i < 10000; ++i) { Atom *a = m_molecule->addAtom(); a->setPos(Vector3d(1.0, 1.0, 1.0)); } m_molecule->clear(); for (int i = 0; i < 10000; ++i) { Atom *a = m_molecule->addAtom(); a->setPos(Vector3d(1.0, 1.0, 1.0)); } qDebug() << "Before:" << m_molecule->children().size(); QBENCHMARK_ONCE{ delete m_molecule; m_molecule = 0; } } void MoleculeBench::destructor6() { for (int i = 0; i < 25000; ++i) { Atom *a = m_molecule->addAtom(); a->setPos(Vector3d(1.0, 1.0, 1.0)); } m_molecule->clear(); qDebug() << "Before:" << m_molecule->children().size(); QCoreApplication::processEvents(); QCoreApplication::sendPostedEvents(); QCoreApplication::processEvents(); qDebug() << "Thread:" << m_molecule->thread(); qDebug() << "Pending events:" << QCoreApplication::hasPendingEvents(); qDebug() << "After:" << m_molecule->children().size(); QBENCHMARK_ONCE{ delete m_molecule; m_molecule = 0; } } void MoleculeBench::deleteLater() { for (int i = 0; i < 30000; ++i) { Atom *a = m_molecule->addAtom(); a->setPos(Vector3d(1.0, 1.0, 1.0)); } m_molecule->clear(); qDebug() << m_molecule->children().size(); QBENCHMARK_ONCE{ m_molecule->deleteLater(); m_molecule = 0; } } QTEST_MAIN(MoleculeBench) #include "moc_moleculebench.cxx" avogadro-1.1.1/libavogadro/tests/CMakeLists.txt0000644000175000001440000000633612250371054020727 0ustar marcususersset(QT_USE_QTOPENGL true) include(${QT_USE_FILE}) # define TESTDATADIR for tests that need input files cmake_policy(SET CMP0005 NEW) # needed for line below (escapes value) add_definitions( -DTESTDATADIR="${CMAKE_SOURCE_DIR}/testfiles/" ) # Ensure the Avogadro include directory is always first get_directory_property(tmp_include_dirs INCLUDE_DIRECTORIES) set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${libavogadro_BINARY_DIR}/include;${tmp_include_dirs}") include_directories( ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${EIGEN2_INCLUDE_DIR} ${OPENBABEL2_INCLUDE_DIR} ${BOOST_PYTHON_INCLUDES} ${PYTHON_INCLUDE_PATH} ) link_directories( ${libavogadro_BINARY_DIR}/src ${OPENBABEL2_LIBRARY_DIRS} ) # Disabled hydrogenscommand test for now - needs some work. Moc issues here. # The commands should not just be included, they either need linking to # or building. As plugin code is not part of the library it may require a # different testing strategy. set(tests drawcommand # hydrogenscommand molecule moleculefile neighborlist ) foreach (test ${tests}) message(STATUS "Test: ${test}") set(test_SRCS ${test}test.cpp) set(test_MOC_CPPS ${test}test.cpp) QT4_WRAP_CPP(test_MOC_SRCS ${test_MOC_CPPS}) ADD_CUSTOM_TARGET(${test}testmoc ALL DEPENDS ${test_MOC_SRCS}) add_executable(${test}test ${test_SRCS}) add_dependencies(${test}test ${test}testmoc) target_link_libraries(${test}test ${OPENBABEL2_LIBRARIES} ${QT_LIBRARIES} ${QT_QTTEST_LIBRARY} avogadro) add_test(${test}Test ${CMAKE_BINARY_DIR}/bin/${test}test) set_property(SOURCE ${test_SRCS} PROPERTY LABELS avogadro) set_property(TARGET ${test}test PROPERTY LABELS avogadro) set_property(TEST ${test}Test PROPERTY LABELS avogadro) endforeach () # More complicated tests (i.e., with linking) #message(STATUS "Test: primitivemodeltest") # set(primitivemodeltest_SRCS primitivemodeltest.cpp modeltest.cpp) # set(primitivemodeltest_MOC_CPPS primitivemodeltest.cpp) # QT4_WRAP_CPP(primitivemodeltest_MOC_SRCS ${primitivemodeltest_MOC_CPPS}) # ADD_CUSTOM_TARGET(primitivemodeltestmoc ALL DEPENDS # ${primitivemodeltest_MOC_SRCS}) # add_executable(primitivemodeltest ${primitivemodeltest_SRCS}) # add_dependencies(primitivemodeltest primitivemodeltestmoc) # target_link_libraries(primitivemodeltest # ${OPENBABEL2_LIBRARIES} # ${QT_LIBRARIES} # ${QT_QTTEST_LIBRARY} # avogadro) #add_test(primitivemodelTest ${CMAKE_BINARY_DIR}/bin/primitivemodeltest) set(benches molecule ) foreach (bench ${benches}) message(STATUS "Benchmark: ${bench}") set(bench_SRCS ${bench}bench.cpp) qt4_wrap_cpp(bench_MOC_SRCS ${bench_SRCS}) add_custom_target(${bench}benchmoc ALL DEPENDS ${bench_MOC_SRCS}) add_executable(${bench}bench ${bench_SRCS}) add_dependencies(${bench}bench ${bench}benchmoc) target_link_libraries(${bench}bench ${OPENBABEL2_LIBRARIES} ${QT_LIBRARIES} ${QT_QTTEST_LIBRARY} avogadro) add_test(${bench}Bench ${CMAKE_BINARY_DIR}/bin/${bench}bench) set_property(SOURCE ${bench_SRCS} PROPERTY LABELS avogadro) set_property(TARGET ${bench}bench PROPERTY LABELS avogadro) set_property(TEST ${bench}Bench PROPERTY LABELS avogadro) endforeach (bench ${benches}) avogadro-1.1.1/libavogadro/tests/neighborlisttest.cpp0000644000175000001440000001011712250371054022254 0ustar marcususers/********************************************************************** Molecule - NeighborListTest class provides unit testing for the Molecule class Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #include using Avogadro::NeighborList; using Avogadro::Molecule; using Avogadro::Atom; using Eigen::Vector3d; class NeighborListTest : public QObject { Q_OBJECT private: Molecule *m_molecule; /// Molecule object for use by the test class. unsigned int m_correct5; unsigned int m_correct10; unsigned int test(int n, double r); private slots: /** * Called before the first test function is executed. */ void initTestCase(); /** * Called after the last test function is executed. */ void cleanupTestCase(); /** * Called before each test function is executed. */ void init(); /** * Called after every test function. */ void cleanup(); void test5A_1n(); void test5A_2n(); void test5A_3n(); void test10A_1n(); void test10A_2n(); void test10A_3n(); }; void NeighborListTest::initTestCase() { m_molecule = new Molecule; // create a 10x10x10 regular grid with atoms for (int i = 0; i < 10; ++i) for (int j = 0; j < 10; ++j) for (int k = 0; k < 10; ++k) { Atom *atom = m_molecule->addAtom(); atom->setPos(Eigen::Vector3d((double)i, (double)j, (double)k)); } // compute the correct number of pairs m_correct5 = 0; m_correct10 = 0; for (unsigned int i = 0; i < m_molecule->numAtoms(); ++i) for (unsigned int j = 0; j < m_molecule->numAtoms(); ++j) { if (i >= j) continue; Atom *a = m_molecule->atom(i); Atom *b = m_molecule->atom(j); double r2 = ( *(a->pos()) - *(b->pos()) ).squaredNorm(); if (r2 <= 25.0) m_correct5++; if (r2 <= 100.0) m_correct10++; } } void NeighborListTest::cleanupTestCase() { delete m_molecule; m_molecule = 0; } void NeighborListTest::init() { } void NeighborListTest::cleanup() { } unsigned int NeighborListTest::test(int n, double r) { NeighborList *nbrList = new NeighborList(m_molecule, r, false, n); unsigned int count = 0; for (unsigned int i = 0; i < m_molecule->numAtoms(); ++i) { QList nbrs = nbrList->nbrs(m_molecule->atom(i)); foreach(Atom *nbr, nbrs) { Q_UNUSED(nbr); count++; } } return count; } void NeighborListTest::test5A_1n() { unsigned int count = test(1, 5.); QCOMPARE(m_correct5, count); } void NeighborListTest::test5A_2n() { unsigned int count = test(2, 5.); QCOMPARE(m_correct5, count); } void NeighborListTest::test5A_3n() { unsigned int count = test(3, 5.); QCOMPARE(m_correct5, count); } void NeighborListTest::test10A_1n() { unsigned int count = test(1, 10.); QCOMPARE(m_correct10, count); } void NeighborListTest::test10A_2n() { unsigned int count = test(2, 10.); QCOMPARE(m_correct10, count); } void NeighborListTest::test10A_3n() { unsigned int count = test(3, 10.); QCOMPARE(m_correct10, count); } QTEST_MAIN(NeighborListTest) #include "moc_neighborlisttest.cxx" avogadro-1.1.1/libavogadro/tests/hydrogenscommandtest.cpp0000644000175000001440000001412212250371054023124 0ustar marcususers/********************************************************************** HydrogensCommandTest - unit testing for the the hydrogen QUndoCommands used by the hydrogen extension Copyright (C) 2009 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #include #include #include "../src/extensions/hydrogensextension.cpp" // HydrogensCommand(Molecule *molecule, enum Action action, GLWidget *widget, double pH = 7.4); using Avogadro::HydrogensCommand; using Avogadro::Molecule; using Avogadro::Atom; using Avogadro::Bond; using Avogadro::GLWidget; using Eigen::Vector3d; class HydrogensCommandTest : public QObject { Q_OBJECT private: QUndoStack *m_undoStack; /// QUndoStack object for use by the test class. Molecule *m_molecule; /// Molecule object for use by the test class. GLWidget *m_glwidget; /// Needed for selections.... private: void debugMolecule(); void loopUndoRedo(); private slots: /** * Test AdjustHydrogensPreCommand */ void AddHydrogens(); /** * Test AdjustHydrogensPreCommand */ void RemoveHydrogens(); /** * Called before the first test function is executed. */ void initTestCase(); /** * Called after the last test function is executed. */ void cleanupTestCase(); /** * Called before each test function is executed. */ void init(); /** * Called after every test function. */ void cleanup(); }; void HydrogensCommandTest::initTestCase() { } void HydrogensCommandTest::cleanupTestCase() { } void HydrogensCommandTest::init() { m_molecule = new Molecule; m_undoStack = new QUndoStack; m_glwidget = new GLWidget; m_glwidget->setMolecule(m_molecule); } void HydrogensCommandTest::cleanup() { delete m_molecule; m_molecule = 0; delete m_undoStack; m_undoStack = 0; delete m_glwidget; m_glwidget = 0; } void HydrogensCommandTest::debugMolecule() { qDebug() << "Atoms: index, id, atomicNumber"; foreach (Atom *atom, m_molecule->atoms()) qDebug() << " index=" << atom->index() << ", id=" << atom->id() << ", atomicNumber=" << atom->atomicNumber() << ", valence=" << atom->valence(); qDebug() << "Bonds: index, id, begin, end"; foreach (Bond *bond, m_molecule->bonds()) qDebug() << " index=" << bond->index() << ", id=" << bond->id() << ", begin=" << bond->beginAtomId() << ", end=" << bond->endAtomId(); } void HydrogensCommandTest::loopUndoRedo() { // save some variables to check after undo/redo loop unsigned int numAtoms = m_molecule->numAtoms(); // save the index int cmdIndex = m_undoStack->index(); // save all atom & bond ids QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); for (int i = 0; i < 10; ++i) { m_undoStack->setIndex(0); // undo all m_undoStack->setIndex(cmdIndex); // redo all QCOMPARE(m_molecule->numAtoms(), numAtoms); } // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); } void HydrogensCommandTest::AddHydrogens() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); Bond *bond1 = m_molecule->addBond(); bond1->setAtoms(atom1->id(), atom2->id(), 1); m_undoStack->push( new HydrogensCommand(m_molecule, HydrogensCommand::AddHydrogens, m_glwidget) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); QList atomIds, bondIds; foreach (Atom *atom, m_molecule->atoms()) atomIds.append(atom->id()); foreach (Bond *bond, m_molecule->bonds()) bondIds.append(bond->id()); //debugMolecule(); loopUndoRedo(); //debugMolecule(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); // check if all atom & bond ids are still the same foreach (Atom *atom, m_molecule->atoms()) QCOMPARE(atom->id(), atomIds.at(atom->index())); foreach (Bond *bond, m_molecule->bonds()) QCOMPARE(bond->id(), bondIds.at(bond->index())); } void HydrogensCommandTest::RemoveHydrogens() { Atom *atom1 = m_molecule->addAtom(); atom1->setAtomicNumber(6); Atom *atom2 = m_molecule->addAtom(); atom2->setAtomicNumber(6); Bond *bond1 = m_molecule->addBond(); bond1->setAtoms(atom1->id(), atom2->id(), 1); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 2); QCOMPARE(m_molecule->numBonds(), (unsigned int) 1); m_molecule->addHydrogens(); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 8); QCOMPARE(m_molecule->numBonds(), (unsigned int) 7); m_undoStack->push( new HydrogensCommand(m_molecule, HydrogensCommand::RemoveHydrogens, m_glwidget) ); QCOMPARE(m_molecule->numAtoms(), (unsigned int) 2); QCOMPARE(m_molecule->numBonds(), (unsigned int) 1); } QTEST_MAIN(HydrogensCommandTest) #include "moc_hydrogenscommandtest.cxx" avogadro-1.1.1/libavogadro/tests/moleculetest.cpp0000644000175000001440000002553112250371054021376 0ustar marcususers/********************************************************************** Molecule - MoleculeTest class provides unit testing for the Molecule class Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #include using Avogadro::Molecule; using Avogadro::Atom; using Avogadro::Bond; using Eigen::Vector3d; class MoleculeTest : public QObject { Q_OBJECT private: Molecule *m_molecule; /// Molecule object for use by the test class. /** * Prepare a starting molecule of known geometry for other tests. */ void prepareMolecule(); private slots: /** * Called before the first test function is executed. */ void initTestCase(); /** * Called after the last test function is executed. */ void cleanupTestCase(); /** * Called before each test function is executed. */ void init(); /** * Called after every test function. */ void cleanup(); /** * Tests the addition of new Atom objects to the Molecule. */ void addAtom(); /** * Tests the setting of the Atom position. */ void setAtomPos(); /** * Tests the retrieval of the Atom position. */ void atomPos(); /** * Tests the access of Atom objects by index. */ void atom(); /** * Tests the access of Atom objects by index. */ void atomById(); /** * Tests the access of all Atom objects in Molecule. */ void atoms(); /** * Tests the deletion of Atom objects from the Molecule. */ void removeAtom(); /** * Tests the addition of new Bond objects to the Molecule. */ void addBond(); /** * Tests the deletion of Bond objects from the Molecule. */ void removeBond(); /** * Tests the calculation of the center of the Molecule. */ void center(); /** * Tests the calculation of the normal vector of the Molecule. */ void normalVector(); /** * Tests the calculation of the radius of the Molecule. */ void radius(); /** * Tests the determination of the farthest atom. */ void farthestAtom(); /** * Tests the translation of the Molecule. */ void translate(); /** * Tests conformer support. */ void conformers(); }; void MoleculeTest::prepareMolecule() { Atom *a1 = m_molecule->addAtom(); a1->setPos(Vector3d(0.0, 0.0, 0.0)); Atom *a2 = m_molecule->addAtom(); a2->setPos(Vector3d(1.5, 0.0, 0.0)); Atom *a3 = m_molecule->addAtom(); a3->setPos(Vector3d(0.0, 1.5, 0.0)); Atom *a4 = m_molecule->addAtom(); a4->setPos(Vector3d(0.0, 0.0, 1.5)); Bond *b1 = m_molecule->addBond(); b1->setAtoms(a1->id(), a2->id(), 1); Bond *b2 = m_molecule->addBond(); b2->setAtoms(a2->id(), a3->id(), 1); Bond *b3 = m_molecule->addBond(); b3->setAtoms(a3->id(), a4->id(), 1); } void MoleculeTest::initTestCase() { m_molecule = new Molecule; } void MoleculeTest::cleanupTestCase() { delete m_molecule; m_molecule = 0; } void MoleculeTest::init() { } void MoleculeTest::cleanup() { } void MoleculeTest::addAtom() { m_molecule->addAtom(); QVERIFY(m_molecule->numAtoms() == 1); m_molecule->addAtom(); QVERIFY(m_molecule->numAtoms() == 2); } void MoleculeTest::setAtomPos() { m_molecule->setAtomPos(1, Vector3d(1.0, 2.0, 3.0)); } void MoleculeTest::atomPos() { const Vector3d *pos = m_molecule->atomPos(1); QCOMPARE(pos->x(), 1.0); QCOMPARE(pos->y(), 2.0); QCOMPARE(pos->z(), 3.0); // Atom positions that are not set should return a null pointer pos = m_molecule->atomPos(0); QCOMPARE(pos->x(), 0.0); // Atom positions that do not exist should also return a null pointer pos = m_molecule->atomPos(2); QVERIFY(pos == 0); } void MoleculeTest::atom() { Atom *a = m_molecule->atom(0); QVERIFY(a != 0); a = m_molecule->atom(1); QVERIFY(a != 0); } void MoleculeTest::atoms() { QList atoms = m_molecule->atoms(); QCOMPARE(atoms.size(), 2); } void MoleculeTest::atomById() { Atom *a = m_molecule->atomById(0); QVERIFY(a != 0); a = m_molecule->atomById(1); QVERIFY(a != 0); } void MoleculeTest::removeAtom() { // Should now to two atoms in the Molecule with ids 0 and 1. Atom *a = m_molecule->atom(1); m_molecule->removeAtom(a); QVERIFY(m_molecule->numAtoms() == 1); m_molecule->removeAtom(0ul); QVERIFY(m_molecule->numAtoms() == 0); // Check behavior of removing an atom that is owned by a different // molecule. Should not crash. Molecule mol; a = mol.addAtom(); m_molecule->removeAtom(a); } void MoleculeTest::addBond() { m_molecule->addBond(); QVERIFY(m_molecule->numBonds() == 1); m_molecule->addBond(); QVERIFY(m_molecule->numBonds() == 2); } void MoleculeTest::removeBond() { // Should now to two atoms in the Molecule with ids 0 and 1. Bond *b = m_molecule->bond(1); m_molecule->removeBond(b); QVERIFY(m_molecule->numBonds() == 1); m_molecule->removeBond(0ul); QVERIFY(m_molecule->numBonds() == 0); // Check behavior of removing a bond that is owned by a different // molecule. Should not crash. Molecule mol; b = mol.addBond(0ul); m_molecule->removeBond(b); } void MoleculeTest::center() { prepareMolecule(); Vector3d center = m_molecule->center(); QCOMPARE(center.x(), 0.375); QCOMPARE(center.y(), 1.5 / 4.0); QCOMPARE(center.z(), 1.5 / 4.0); } void MoleculeTest::normalVector() { Vector3d normal = m_molecule->normalVector(); QCOMPARE(normal.x(), -0.57735026919); QCOMPARE(normal.y(), -0.57735026919); QCOMPARE(normal.z(), -0.57735026919); } void MoleculeTest::radius() { QCOMPARE(m_molecule->radius(), 1.24373429638327494); } void MoleculeTest::farthestAtom() { QVERIFY(m_molecule->farthestAtom()->index() == 1); } void MoleculeTest::translate() { m_molecule->translate(Vector3d(1.0, 1.1, 1.2)); QCOMPARE(m_molecule->atom(0)->pos()->x(), 1.0); QCOMPARE(m_molecule->atom(0)->pos()->y(), 1.1); QCOMPARE(m_molecule->atom(0)->pos()->z(), 1.2); QCOMPARE(m_molecule->atom(1)->pos()->x(), 2.5); // Check the center was correctly updated QCOMPARE(m_molecule->center().x(), 1.5 / 4.0 + 1.0); QCOMPARE(m_molecule->center().y(), 1.5 / 4.0 + 1.1); QCOMPARE(m_molecule->center().z(), 1.5 / 4.0 + 1.2); } void MoleculeTest::conformers() { // note: the molecule has 4 atoms... qDebug() << "# atoms =" << m_molecule->numAtoms(); // we should have 1 conformer QCOMPARE(m_molecule->numConformers(), static_cast(1)); // test setConformer with various indexes QCOMPARE(m_molecule->setConformer(0), true); // valid QCOMPARE(m_molecule->setConformer(1), false); // invalid QCOMPARE(m_molecule->setConformer(99), false); // invalid // create a conformer for the 4 atoms std::vector goodConformer(m_molecule->conformerSize(), Eigen::Vector3d::Zero()); std::vector toBigConformer(1000, Eigen::Vector3d::Zero()); std::vector toSmallConformer(2, Eigen::Vector3d::Zero()); // test addConformer(conformer, index) QCOMPARE(m_molecule->addConformer(toSmallConformer, 9), false); // invalid QCOMPARE(m_molecule->addConformer(toBigConformer, 9), false); // invalid QCOMPARE(m_molecule->addConformer(goodConformer, 9), true); // valid // check if conformers 1-9 got created QCOMPARE(m_molecule->numConformers(), static_cast(10)); QCOMPARE(m_molecule->setConformer(1), true); // should now be valid QCOMPARE(m_molecule->setConformer(4), true); // should now be valid QCOMPARE(m_molecule->setConformer(9), true); // should now be valid QCOMPARE(m_molecule->setConformer(10), false); // should still be invalid // test addConformer(index) QCOMPARE(m_molecule->addConformer(1), m_molecule->conformer(1)); // should be the same QCOMPARE(m_molecule->numConformers(), static_cast(10)); QCOMPARE(m_molecule->addConformer(9), m_molecule->conformer(9)); // should be the same QCOMPARE(m_molecule->numConformers(), static_cast(10)); QVERIFY(m_molecule->addConformer(19)); // check if 10-19 got created QCOMPARE(m_molecule->numConformers(), static_cast(20)); QCOMPARE(m_molecule->setConformer(10), true); // should now be valid QCOMPARE(m_molecule->setConformer(19), true); // should now be valid QCOMPARE(m_molecule->setConformer(20), false); // should still be invalid // test conformer(index) QVERIFY(m_molecule->conformer(10)); // should be valid pointer QVERIFY(m_molecule->conformer(19)); // should be valid pointer QCOMPARE(m_molecule->conformer(20), static_cast*>(0)); // invalid index, should be NULL // test conformers() const std::vector *> &conformers = m_molecule->conformers(); QCOMPARE(conformers.size(), static_cast::size_type>(20)); QCOMPARE(conformers.at(0)->size(), static_cast::size_type>(m_molecule->conformerSize())); QCOMPARE(conformers.at(10)->size(), static_cast::size_type>(m_molecule->conformerSize())); // test setConformer() / currentConformer() QCOMPARE(m_molecule->setConformer(10), true); QCOMPARE(m_molecule->currentConformer(), static_cast(10)); QCOMPARE(m_molecule->setConformer(15), true); QCOMPARE(m_molecule->currentConformer(), static_cast(15)); // test replaceAllConformers std::vector *> newConformers; for (int i = 0; i < 5; ++i) newConformers.push_back( new std::vector(m_molecule->conformerSize(), Eigen::Vector3d::Zero()) ); QCOMPARE(m_molecule->setAllConformers(newConformers), true); QCOMPARE(m_molecule->numConformers(), static_cast(5)); QCOMPARE(m_molecule->currentConformer(), static_cast(0)); QCOMPARE(m_molecule->setConformer(4), true); QCOMPARE(m_molecule->setConformer(5), false); // test clearConformers() m_molecule->clearConformers(); QCOMPARE(m_molecule->numConformers(), static_cast(1)); QCOMPARE(m_molecule->currentConformer(), static_cast(0)); } QTEST_MAIN(MoleculeTest) #include "moc_moleculetest.cxx" avogadro-1.1.1/libavogadro/examples/0000755000175000001440000000000012250371054016633 5ustar marcususersavogadro-1.1.1/libavogadro/examples/c++/0000755000175000001440000000000012250371054017203 5ustar marcususersavogadro-1.1.1/libavogadro/examples/c++/templateextension.h0000644000175000001440000000365712250371054023137 0ustar marcususers/********************************************************************** Template - Extension Template Copyright (C) 2008 by Author This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef TEMPLATEEXTENSION_H #define TEMPLATEEXTENSION_H #include #include #include namespace Avogadro { class TemplateExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Template", tr("Template"), tr("Example extension")) public: //! Constructor TemplateExtension(QObject *parent=0); //! Deconstructor virtual ~TemplateExtension(); virtual QList actions() const; virtual QString menuPath(QAction *action) const; virtual QDockWidget * dockWidget(); virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual void setMolecule(Molecule *molecule); private: QList m_actions; Molecule *m_molecule; private Q_SLOTS: }; class TemplateExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(TemplateExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/examples/c++/templateextension.mf0000644000175000001440000000021212250371054023272 0ustar marcususersName: Template of extension Author: Avogadro Team Package: templateextension Files: libtemplateextension.so Category: contrib Version: 1 avogadro-1.1.1/libavogadro/examples/c++/templateextension.pro0000644000175000001440000000074412250371054023502 0ustar marcususers###################################################################### # Example QMake project building a 3rd party extension against # installed Avogadro library. # See http://avogadro.openmolecules.net/ for more information. ###################################################################### TEMPLATE = lib TARGET = templateextension DEPENDPATH += . INCLUDEPATH += . QT += opengl CONFIG += qt avogadro # Input HEADERS += templateextension.h SOURCES += templateextension.cpp avogadro-1.1.1/libavogadro/examples/c++/templateextension.cpp0000644000175000001440000000525512250371054023466 0ustar marcususers/********************************************************************** Template - Extension Template Copyright (C) 2008 by Author This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "templateextension.h" #include using namespace std; namespace Avogadro { // this is a trick to identify what action we are taking enum TemplateExtensionIndex { FirstAction = 0, SecondAction }; TemplateExtension::TemplateExtension( QObject *parent ) : Extension( parent ) { // create an action for our first action QAction *action = new QAction( this ); action->setText( tr("First Action" )); m_actions.append( action ); action->setData( FirstAction ); // create an action for our second action action = new QAction( this ); action->setText( tr("Second Action" )); m_actions.append( action ); action->setData( SecondAction ); } TemplateExtension::~TemplateExtension() { } QList TemplateExtension::actions() const { return m_actions; } // allows us to set the intended menu path for each action QString TemplateExtension::menuPath(QAction *action) const { int i = action->data().toInt(); switch ( i ) { case FirstAction: return tr("E&xtensions") + '>' + tr("&Template"); break; case SecondAction: return tr("&Edit") + '>' + tr("&Template"); break; } return ""; } QDockWidget * TemplateExtension::dockWidget() { // if we need a dock widget we can set one here return 0; } void TemplateExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* TemplateExtension::performAction(QAction *action, GLWidget *) { int i = action->data().toInt(); switch ( i ) { case FirstAction: // perform first action break; case SecondAction: // perform second action break; } return 0; } } Q_EXPORT_PLUGIN2(templateextension, Avogadro::TemplateExtensionFactory) avogadro-1.1.1/libavogadro/examples/c++/CMakeLists.txt0000644000175000001440000000202312250371054021740 0ustar marcususers###################################################################### # Example CMake project building a 3rd party extension against # installed Avogadro library. # See http://avogadro.openmolecules.net/ for more information. ###################################################################### # Project name - plugin name or something meaningful project(TemplateExtension) # Minimum version of CMake that can be used cmake_minimum_required(VERSION 2.6) # Find the Avogadro library if it is installed find_package(Avogadro REQUIRED) set(QT_MIN_VERSION "4.5.0") find_package(Qt4 REQUIRED) # Activate this line if you need direct use of OpenBabel #find_package(OpenBabel2 REQUIRED) # Set up the build environment include(${Avogadro_USE_FILE}) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${OPENBABEL2_INCLUDE_DIR} ) link_directories(${OPENBABEL2_LIBRARY_DIRS}) # Build your plugin using the default options set (templateextension_SRCS templateextension.cpp) avogadro_plugin(templateextension "${templateextension_SRCS}") avogadro-1.1.1/libavogadro/examples/python/0000755000175000001440000000000012250371054020154 5ustar marcususersavogadro-1.1.1/libavogadro/examples/python/tooltemplate.py0000644000175000001440000000160612250371054023242 0ustar marcususersfrom PyQt4.Qt import * import Avogadro class Tool(QObject): # constructor def __init__(self): QObject.__init__(self) # widget = GLWidget def paint(self, widget): # Painter # print("paint(", widget, ")") return None # widget = GLWidget # mouseEvent = QMouseEvent def mousePressEvent(self, widget, mouseEvent): # print("mousePressEvent(", widget, ",", mouseEvent, ")") # mouseEvent.accept() return None def mouseMoveEvent(self, widget, mouseEvent): # print("mouseMoveEvent(", widget, ",", mouseEvent, ")") # mouseEvent.accept() return None def mouseReleaseEvent(self, widget, mouseEvent): # print("mouseReleaseEvent(", widget, ",", mouseEvent, ")") # mouseEvent.accept() return None def wheelEvent(self, widget, wheelEvent): # print("wheelEvent(", widget, ",", wheelEvent, ")") # wheelEvent.accept() return None avogadro-1.1.1/libavogadro/examples/python/extensiontemplate.py0000644000175000001440000000123512250371054024277 0ustar marcususersfrom PyQt4.QtCore import * from PyQt4.QtGui import * from numpy import * import Avogadro # always use 'Extension' for class name class Extension(QObject): def __init__(self): QObject.__init__(self) def name(self): return "My Extension" def description(self): return "Extension for ..." def actions(self): actions = [] action = QAction(self) action.setText("Some action") actions.append(action) return actions def menuPath(self, action): return "Extensions" def performAction(self, action, glwidget): if action.text() == "Some action": # do something... return None avogadro-1.1.1/libavogadro/examples/python/standalone.py0000644000175000001440000000367412250371054022670 0ustar marcususersimport openbabel from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4 import uic import Avogadro import sys class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) uiFile = file('mainwindow.ui', 'r') self.ui = uic.loadUi(uiFile, self) self.connect(self.ui.actionOpen, SIGNAL('triggered()'), self, SLOT('open()')) self.connect(self.ui.listWidget, SIGNAL('currentRowChanged(int)'), self, SLOT('load(int)')) self.objects = [] def newGLWidget(self): glWidget = Avogadro.GLWidget() glWidget.loadDefaultEngines() glWidget.quality = 4 toolGroup = Avogadro.ToolGroup() tool = Avogadro.PluginManager.instance.tool('Navigate', None) toolGroup.append(tool) glWidget.toolGroup = toolGroup self.objects.append(glWidget) self.objects.append(toolGroup) self.objects.append(tool) return glWidget @pyqtSignature('load(int)') def load(self, row): mol = self.molFile.molecule(row) self.objects.append(mol) glWidget = self.newGLWidget() glWidget.molecule = mol mdiWindow = self.ui.mdiArea.addSubWindow(Avogadro.toPyQt(glWidget)) mdiWindow.setWindowTitle(self.molFile.titles[row]) mdiWindow.show() @pyqtSignature('readThreadFinnished()') def readThreadFinnished(self): self.ui.listWidget.clear() self.ui.listWidget.addItems(self.molFile.titles) self.ui.statusbar.showMessage('Done.', 5) @pyqtSignature('open()') def open(self): filename = str(QFileDialog.getOpenFileName(self, 'Open', QDir.currentPath(), 'Chemistry files (*.cml *.sdf *.mol *.xyz)')) self.molFile = Avogadro.OpenbabelWrapper.readFile(filename, '', '', False) self.connect(Avogadro.toPyQt(self.molFile), SIGNAL('ready()'), self, SLOT('readThreadFinnished()')) self.ui.statusbar.showMessage('Reading file...') if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) avogadro-1.1.1/libavogadro/examples/python/proteinextension.py0000644000175000001440000001402512250371054024145 0ustar marcususersfrom PyQt4.QtCore import * from PyQt4.QtGui import * from numpy import * import Avogadro # always use 'Extension' for class name class Extension(QObject): def __init__(self): QObject.__init__(self) def name(self): return "Protein Extension" def description(self): return "Extension providing some usefull protein selections." def actions(self): actions = [] action = QAction(self) action.setText("Select Backbone") actions.append(action) action = QAction(self) action.setText("Select Side Chains") actions.append(action) action = QAction(self) action.setText("Select Binding Site") actions.append(action) action = QAction(self) action.setText("Cut Surface") actions.append(action) return actions def menuPath(self, action): return "Protein" def selectBackbone(self, glwidget): mol = glwidget.molecule # create a PrimitiveList to call GLWidget.setSelected(PrimitiveList, bool) primitiveList = Avogadro.PrimitiveList() # find the backbone atoms for atom in mol.atoms: # get the atomId and strip of white spaces atomId = atom.residue.atomId(atom.id).strip() print atomId # add the atom to the list if the atomId matches N, CA, C, O or H if atomId == "N": primitiveList.append(atom) elif atomId == "CA": primitiveList.append(atom) elif atomId == "C": primitiveList.append(atom) elif atomId == "O": primitiveList.append(atom) elif atomId == "H": primitiveList.append(atom) # find all bonds between backbone atoms for bond in mol.bonds: beginAtom = bond.beginAtom endAtom = bond.endAtom if primitiveList.contains(beginAtom) and primitiveList.contains(endAtom): primitiveList.append(bond) # clear the current selection glwidget.clearSelected() # select the backbone atom glwidget.setSelected(primitiveList, True) #Avogadro.toPyQt(glwidget).update() def selectSideChains(self, glwidget): mol = glwidget.molecule # create a PrimitiveList to call GLWidget.setSelected(PrimitiveList, bool) primitiveList = Avogadro.PrimitiveList() # find the backbone atoms for atom in mol.atoms: # get the atomId and strip of white spaces atomId = atom.residue.atomId(atom.id).strip() # add the atom to the list if the atomId matches N, CA, C, O or H if atomId != "N" and atomId != "CA" and atomId != "C" and atomId != "O" and atomId != "H": primitiveList.append(atom) # find all bonds between backbone atoms for bond in mol.bonds: beginAtom = bond.beginAtom endAtom = bond.endAtom if primitiveList.contains(beginAtom) and primitiveList.contains(endAtom): primitiveList.append(bond) # clear the current selection glwidget.clearSelected() # select the side chain atom glwidget.setSelected(primitiveList, True) def selectBindingSite(self, glwidget): # returns (double, bool ok) as tuple result = QInputDialog.getDouble(None, "Create Binding Site Around Selection", "radius", 5.0, 2.0, 20.0, 1) if not result[1]: return r = result[0] r2 = r * r selectedAtoms = glwidget.selectedPrimitives.subList(Avogadro.PrimitiveType.AtomType) newSelection = Avogadro.PrimitiveList() atomIds = [] for residue in glwidget.molecule.residues: keepResidue = False # compute distance between residue atoms and selected atoms for atomId in residue.atoms: atom = glwidget.molecule.atomById(atomId) if not atom: continue for selectedAtom in selectedAtoms: ab = selectedAtom.pos - atom.pos dist2 = dot(ab,ab) if dist2 < r2: keepResidue = True break if keepResidue: break if keepResidue: for atomId in residue.atoms: atom = glwidget.molecule.atomById(atomId) newSelection.append(atom) atomIds.append(atom.id) # find all bonds between the atoms for bond in glwidget.molecule.bonds: beginAtom = bond.beginAtom endAtom = bond.endAtom if atomIds.count(beginAtom.id) and atomIds.count(endAtom.id): newSelection.append(bond) glwidget.setSelected(newSelection, True) def cutSurface(self, glwidget): # returns (double, bool ok) as tuple result = QInputDialog.getDouble(None, "Cut Surface", "radius", 5.0, 2.0, 20.0, 1) if not result[1]: return r = result[0] r2 = r * r selectedAtoms = glwidget.selectedPrimitives.subList(Avogadro.PrimitiveType.AtomType) newVertices = [] newNormals = [] for mesh in glwidget.molecule.meshes: verts = mesh.vertices normals = mesh.normals i = 0 while i < len(verts): center = verts[i] + verts[i+1] + verts[i+2] center /= 3 for selectedAtom in selectedAtoms: ab = selectedAtom.pos - verts[i] ab2 = dot(ab,ab) ac = selectedAtom.pos - verts[i+1] ac2 = dot(ac,ac) ad = selectedAtom.pos - verts[i+2] ad2 = dot(ad,ad) if ab2 < r2 or ac2 < r2 or ad2 < r2: newVertices.append(verts[i]) newVertices.append(verts[i+1]) newVertices.append(verts[i+2]) newNormals.append(normals[i]) newNormals.append(normals[i+1]) newNormals.append(normals[i+2]) break i += 3 mesh.vertices = newVertices mesh.normals = newNormals def performAction(self, action, glwidget): if action.text() == "Select Backbone": self.selectBackbone(glwidget) elif action.text() == "Select Side Chains": self.selectSideChains(glwidget) elif action.text() == "Select Binding Site": self.selectBindingSite(glwidget) elif action.text() == "Cut Surface": self.cutSurface(glwidget) avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/0000755000175000001440000000000012250371054023045 5ustar marcususersavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/0000755000175000001440000000000012250371054026176 5ustar marcususersavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/dynamicdisplaydialog.ui0000644000175000001440000000307212250371054032731 0ustar marcususers DynamicDisplayDialog 0 0 400 83 Dynamic Display Extension Number of hydrogen atoms: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Horizontal 40 20 Hide TextLabel avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/dynamicdisplayextension.h0000644000175000001440000000601412250371054033317 0ustar marcususers/********************************************************************** DynamicDisplayExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef DYNAMICDISPLAYEXTENSION_H #define DYNAMICDISPLAYEXTENSION_H #include #include #include // This is a work around for a bug on older versions Avogadro, bug 3104853 using Avogadro::Plugin; namespace DynamicDisplay { class DynamicDisplayDialog; class DynamicDisplayExtension : public Avogadro::Extension { Q_OBJECT // Setup the plugin: AVOGADRO_EXTENSION(// Static identifier: "Dynamic Display Extension", // Short description: tr("Example Extension with Dynamic Display"), // Long description: tr("Provides a dialog box that displays information about the current molecule.")) public: DynamicDisplayExtension(QObject *parent=0); ~DynamicDisplayExtension() {}; virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, Avogadro::GLWidget *widget); virtual QString menuPath(QAction *action) const; // This is new -- we will be using this to update the dialog when // a new molecule is loaded. virtual void setMolecule(Avogadro::Molecule *mol); public slots: // This slot is called when the molecule changes (see ctor) void moleculeUpdated(); signals: // Tell any listeners that they should reset themselves because no // valid molecule is loaded. void resetExtension(); // Tell any listeners to update themselves because the molecule // has changed. void updateExtension(Avogadro::Molecule *mol); private: QList m_actions; DynamicDisplayDialog *m_dialog; // Cached pointer to the current molecule Avogadro::Molecule *m_molecule; }; class DynamicDisplayExtensionFactory : public QObject, public Avogadro::PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(DynamicDisplayExtension) }; } #endif ././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/dynamicdisplayextension.cppavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/dynamicdisplayextension.c0000644000175000001440000000631512250371054033316 0ustar marcususers/********************************************************************** DynamicDisplayExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "dynamicdisplayextension.h" #include "dynamicdisplaydialog.h" #include #include #include "dynamicdisplaydialog.h" using namespace Avogadro; namespace DynamicDisplay { DynamicDisplayExtension::DynamicDisplayExtension(QObject *parent) : Extension(parent), m_dialog(0), m_molecule(0) { QAction *action = new QAction(this); action->setText(tr("0&2: Dynamic Dialog...")); m_actions.append(action); } QList DynamicDisplayExtension::actions() const { return m_actions; } QString DynamicDisplayExtension::menuPath(QAction *) const { return tr("E&xtensions") + '>' + tr("&Tutorial"); } void DynamicDisplayExtension::setMolecule(Molecule *mol) { // Has the molecule really changed? if (mol != m_molecule) { // Disconnect old molecule if it exists if (m_molecule) m_molecule->disconnect(this); // Update cached pointer m_molecule = mol; // Connect new molecule if it exists if (m_molecule) { connect(m_molecule, SIGNAL(atomAdded(Atom*)), this, SLOT(moleculeUpdated())); connect(m_molecule, SIGNAL(atomRemoved(Atom*)), this, SLOT(moleculeUpdated())); connect(m_molecule, SIGNAL(atomUpdated(Atom*)), this, SLOT(moleculeUpdated())); } } // If we haven't created the dialog yet, don't try to update it. if (!m_dialog) { return; } moleculeUpdated(); } void DynamicDisplayExtension::moleculeUpdated() { // Emit appropriate signal depending on whether the molecule // exists or not if (m_molecule) { emit updateExtension(m_molecule); } else { emit resetExtension(); } } QUndoCommand* DynamicDisplayExtension::performAction( QAction *, GLWidget * ) { if (!m_dialog) { m_dialog = new DynamicDisplayDialog(qobject_cast(parent()), this); // Initialize the dialog moleculeUpdated(); } m_dialog->show(); return NULL; } } #include "dynamicdisplayextension.moc" Q_EXPORT_PLUGIN2(dynamicdisplayextension, DynamicDisplay::DynamicDisplayExtensionFactory) avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/dynamicdisplaydialog.h0000644000175000001440000000275312250371054032550 0ustar marcususers/********************************************************************** DynamicDisplayExtension Copyright (C) 2010 David C. Lonie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #ifndef DYNAMICDISPLAYDIALOG_H #define DYNAMICDISPLAYDIALOG_H #include #include "ui_dynamicdisplaydialog.h" namespace Avogadro { class Molecule; } namespace DynamicDisplay { class DynamicDisplayExtension; class DynamicDisplayDialog : public QDialog { Q_OBJECT public: explicit DynamicDisplayDialog(QWidget *parent, DynamicDisplayExtension *ext); virtual ~DynamicDisplayDialog() {}; public slots: // Reset the GUI if there is no molecule loaded void reset(); // Count the number of hydrogens in the passed molecule and update // the GUI void update(Avogadro::Molecule *mol); private: // Pointer to the extension DynamicDisplayExtension *m_ext; Ui::DynamicDisplayDialog ui; }; } #endif avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/dynamicdisplaydialog.cpp0000644000175000001440000000365312250371054033103 0ustar marcususers/********************************************************************** DynamicDisplayExtension Copyright (C) 2010 David C. Lonie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "dynamicdisplaydialog.h" #include "dynamicdisplayextension.h" #include #include using namespace Avogadro; namespace DynamicDisplay { DynamicDisplayDialog::DynamicDisplayDialog(QWidget *parent, DynamicDisplayExtension *ext) : QDialog( parent ), m_ext(ext) { ui.setupUi(this); // Extension connections connect(m_ext, SIGNAL(resetExtension()), this, SLOT(reset())); connect(m_ext, SIGNAL(updateExtension(Avogadro::Molecule*)), this, SLOT(update(Avogadro::Molecule*))); // Dialog connections connect(ui.push_hide, SIGNAL(clicked()), this, SLOT(hide())); } void DynamicDisplayDialog::reset() { // Reset the label ui.label_numHydrogens->setText(tr("N/A")); } void DynamicDisplayDialog::update(Molecule *mol) { // Count the number of hydrogen atoms: unsigned int count = 0; for (int i = 0; i < mol->atoms().size(); i++) { if (mol->atoms().at(i)->atomicNumber() == 1) { count++; } } // Display the number of hydrogens ui.label_numHydrogens->setText(QString::number(count)); } } #include "dynamicdisplaydialog.moc" avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/CMakeLists.txt0000644000175000001440000000126512250371054030742 0ustar marcususers# Dynamic Display Avogadro extension. # See http://avogadro.openmolecules.net/ for more information. # Project name project(DynamicDisplayExtension) # Minimum version of CMake that can be used cmake_minimum_required(VERSION 2.6) set(QT_MIN_VERSION "4.5.0") find_package(Qt4 REQUIRED) find_package(Avogadro REQUIRED) include(${Avogadro_USE_FILE}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set( dynamicdisplayextension_SRCS dynamicdisplayextension.cpp dynamicdisplaydialog.cpp ) set( dynamicdisplayextension_UIS dynamicdisplaydialog.ui ) avogadro_plugin( dynamicdisplayextension "${dynamicdisplayextension_SRCS}" "${dynamicdisplayextension_UIS}") avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/toc.dox0000644000175000001440000000366112250371054024354 0ustar marcususersnamespace Avogadro { /** \page tpe-toc Developing Third Party Extensions \section intro Introduction This tutorial is designed to guide new developers who are interested in writing third party (e.g. out-of-source) extensions to Avogadro. It assumes that the reader has a working knowledge of C++ and is familiar with the basic usage of Qt Designer. If you are not familiar with Designer, a link to the Qt Designer tutorial is provided at the bottom of this page. \section toc Table Of Contents -# \ref tpe-hello-world - Simple dialog displaying static text - Shows basics of extension initialization - Shows how to launch a dialog from an extension -# \ref tpe-dynamic-display - Simple dialog that displays molecule-specific text that dynamically updates as the molecule changes - This example counts the number of hydrogen atoms in the currently displayed molecule - Shows how to use the Extension::setMolecule virtual function - Shows how to connect slots in your extension to signals in the molecule -# View Plane - Move camera to view a plane formed by selecting three atoms - Shows how to manipulate the camera - Shows how to retrieve user selected atoms -# Rotate Selection - Rotate selected atoms an arbitrary amount along an arbitrary vector - Shows how to modify the current molecule and update the GLWidget -# Conformer Plot - Generate conformers for a molecule and plot them by energy - Shows how to use OpenBabel's OBForceField implementation from within Avogadro - Shows how to generate a scatter plot using the PlotWidget - Shows how to use the conformer support in Avogadro \section links Useful Links APIs: - Qt: http://doc.qt.nokia.com/classes.html - Avogadro: http://avogadro.openmolecules.net/api/dev/ - OpenBabel: http://openbabel.org/api/ - Eigen Tutorial: http://eigen.tuxfamily.org/dox/GettingStarted.html Tools: - Qt Designer: http://doc.qt.nokia.com/designer-quick-start.html **/ }avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/05-ConformerPlot/0000755000175000001440000000000012250371054026060 5ustar marcususersavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/05-ConformerPlot/conformerplotdialog.cpp0000644000175000001440000000522612250371054032642 0ustar marcususers/********************************************************************** ConformerPlotExtension Copyright (C) 2010 David C. Lonie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "conformerplotdialog.h" #include #include #include using namespace Avogadro; namespace ConformerPlot { ConformerPlotDialog::ConformerPlotDialog(QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { ui.setupUi(this); connect(ui.plot, SIGNAL(pointClicked(PlotPoint*)), this, SLOT(updateConformer(PlotPoint*))); connect(ui.plot, SIGNAL(pointClicked(PlotPoint*)), ui.plot, SLOT(clearAndSelectPoint(PlotPoint*))); } void ConformerPlotDialog::refresh(Avogadro::Molecule *mol) { ui.plot->resetPlot(); m_molecule = mol; if (!m_molecule) return; std::vector energies = m_molecule->energies(); // Set the default energy to 0 in case there aren't any if (energies.size() == 0) energies.push_back(0.0); // find the min/max energies and create the plot object PlotObject *data = new PlotObject (Qt::red, PlotObject::Points, 2); double min, max, cur; min = max = energies.at(0); for (int i = 0; i < energies.size(); i++) { cur = energies.at(i); if (cur < min) min = cur; if (cur > max) max = cur; data->addPoint(i+1, cur, QString::number(cur)); } double spread = max - min; double ext = spread * 0.05; ui.plot->setDefaultLimits(0, energies.size() + 1, min - ext, max + ext); ui.plot->setJailedInDefaults(true); ui.plot->setAntialiasing(true); ui.plot->setMouseTracking(true); ui.plot->axis(PlotWidget::BottomAxis)->setLabel(tr("Conformer number")); ui.plot->axis(PlotWidget::LeftAxis)->setLabel(tr("Energy (kJ/mol)")); ui.plot->addPlotObject(data); } void ConformerPlotDialog::updateConformer(PlotPoint *p) { unsigned int index = floor(p->x()+0.5) - 1; m_molecule->setConformer(index); m_molecule->update(); } } #include "conformerplotdialog.moc" avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/05-ConformerPlot/conformerplotextension.h0000644000175000001440000000530212250371054033057 0ustar marcususers/********************************************************************** ConformerPlotExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef CONFORMERPLOTEXTENSION_H #define CONFORMERPLOTEXTENSION_H #include #include #include // This is a work around for a bug on older versions Avogadro, bug // 3104853. Patch submitted. using Avogadro::Plugin; namespace ConformerPlot { // Forward declaration of header class ConformerPlotDialog; class ConformerPlotExtension : public Avogadro::Extension { Q_OBJECT AVOGADRO_EXTENSION("Conformer Plot Extension", tr("Plot conformer energies"), tr("Plot the energies of a molecule's conformers.")) public: ConformerPlotExtension(QObject *parent=0); ~ConformerPlotExtension() {}; // This tells Avogadro what actions to create virtual QList actions() const; // This returns a string that tells Avogadro where to put the menu entries virtual QString menuPath(QAction *action) const; // When an action is requested (e.g. a user selects a menu entry), // here is where it is handled: virtual QUndoCommand* performAction(QAction *action, Avogadro::GLWidget *widget); // This is called whenever a new molecule is loaded. This is not // needed for this extension. virtual void setMolecule(Avogadro::Molecule *molecule); private: QList m_actions; ConformerPlotDialog *m_dialog; Avogadro::Molecule *m_molecule; }; // Plugin factory setup class ConformerPlotExtensionFactory : public QObject, public Avogadro::PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(ConformerPlotExtension) }; } #endif avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/05-ConformerPlot/conformerplotdialog.ui0000644000175000001440000000174212250371054032474 0ustar marcususers ConformerPlotDialog 0 0 908 453 Conformer Plot Extension QFrame::StyledPanel QFrame::Raised Avogadro::PlotWidget QFrame
avogadro/plotwidget.h
1
avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/05-ConformerPlot/conformerplotextension.cpp0000644000175000001440000000467712250371054033430 0ustar marcususers/********************************************************************** ConformerPlotExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "conformerplotextension.h" #include "conformerplotdialog.h" #include #include "conformerplotdialog.h" using namespace Avogadro; namespace ConformerPlot { ConformerPlotExtension::ConformerPlotExtension(QObject *parent) : Extension(parent), m_dialog(0), m_molecule(0) { // This block sets the text for menu entry QAction *action = new QAction(this); // Wrap all user visible strings in tr() so they can be translated action->setText(tr("0&5: Conformer Plot...")); m_actions.append(action); } QList ConformerPlotExtension::actions() const { return m_actions; } QString ConformerPlotExtension::menuPath(QAction *) const { return tr("E&xtensions") + '>' + tr("&Tutorial"); } QUndoCommand* ConformerPlotExtension::performAction( QAction *, GLWidget * ) { // Create the dialog if needed if (!m_dialog) { m_dialog = new ConformerPlotDialog(qobject_cast(parent())); } if (m_molecule) { m_dialog->refresh(m_molecule); } m_dialog->show(); return NULL; } void ConformerPlotExtension::setMolecule(Molecule *mol) { m_molecule = mol; if (m_dialog) { m_dialog->refresh(m_molecule); } } } // Include Qt moc'd headers #include "conformerplotextension.moc" // Set up for the plugin to work correctly Q_EXPORT_PLUGIN2(conformerplotextension, ConformerPlot::ConformerPlotExtensionFactory) avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/05-ConformerPlot/CMakeLists.txt0000644000175000001440000000156612250371054030630 0ustar marcususers# Hello World Avogadro extension. # See http://avogadro.openmolecules.net/ for more information. # Project name project(ConformerPlotExtension) # Minimum version of CMake that can be used cmake_minimum_required(VERSION 2.6) # Set up Qt set(QT_MIN_VERSION "4.5.0") find_package(Qt4 REQUIRED) # Set up Avogadro find_package(Avogadro REQUIRED) include(${Avogadro_USE_FILE}) # Specify include directories include_directories( # Needed to include Qt moc'd headers ${CMAKE_CURRENT_BINARY_DIR} ) # Create a list of all source files set( conformerplotextension_SRCS conformerplotextension.cpp conformerplotdialog.cpp ) # Create a list of all ui files set( conformerplotextension_UIS conformerplotdialog.ui ) # Create the extension target conformerplotextension avogadro_plugin(conformerplotextension "${conformerplotextension_SRCS}" "${conformerplotextension_UIS}") avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/05-ConformerPlot/conformerplotdialog.h0000644000175000001440000000276012250371054032307 0ustar marcususers/********************************************************************** ConformerPlotExtension Copyright (C) 2010 David C. Lonie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #ifndef CONFORMERPLOTDIALOG_H #define CONFORMERPLOTDIALOG_H #include #include "ui_conformerplotdialog.h" // Forward declaration of Avogadro::Molecule namespace Avogadro { class Molecule; class PlotPoint; } using Avogadro::PlotPoint; namespace ConformerPlot { class ConformerPlotDialog : public QDialog { // The Q_OBJECT macro must be include if a class is to have // signals/slots Q_OBJECT public: explicit ConformerPlotDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); virtual ~ConformerPlotDialog() {}; public slots: void refresh(Avogadro::Molecule *mol); void updateConformer(PlotPoint *p); private: // This member provides access to all ui elements Ui::ConformerPlotDialog ui; Avogadro::Molecule *m_molecule; }; } #endif avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/01-HelloWorld/0000755000175000001440000000000012250371054025336 5ustar marcususersavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/01-HelloWorld/helloworlddialog.ui0000644000175000001440000000274612250371054031241 0ustar marcususers HelloWorldDialog 0 0 400 59 Hello World Extension Hello World! Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Horizontal 40 20 Hide avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/01-HelloWorld/helloworlddialog.cpp0000644000175000001440000000262512250371054031402 0ustar marcususers/********************************************************************** HelloWorldExtension Copyright (C) 2010 David C. Lonie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "helloworlddialog.h" namespace HelloWorld { HelloWorldDialog::HelloWorldDialog(QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { // This initializes the ui member function to contain pointers to // all GUI elements in the helloworlddialog.ui file ui.setupUi(this); // This connection will hide the dialog when the hide button is // clicked connect(ui.push_hide, SIGNAL(clicked()), this, SLOT(hide())); } } // This includes the files generated by Qt's moc at compile time to // ensure that signals/slots work. If you ever see errors about // missing vtables with gcc, check that you haven't forgotten one of // these: #include "helloworlddialog.moc" avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/01-HelloWorld/helloworldextension.cpp0000644000175000001440000000440012250371054032150 0ustar marcususers/********************************************************************** HelloWorldExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "helloworldextension.h" #include "helloworlddialog.h" #include #include "helloworlddialog.h" using namespace Avogadro; namespace HelloWorld { HelloWorldExtension::HelloWorldExtension(QObject *parent) : Extension(parent), m_dialog(0) // Initialize the dialog pointer to 0, it will be // created only when requested { // This block sets the text for menu entry QAction *action = new QAction(this); // Wrap all user visible strings in tr() so they can be translated action->setText(tr("0&1: Hello world...")); m_actions.append(action); } QList HelloWorldExtension::actions() const { return m_actions; } QString HelloWorldExtension::menuPath(QAction *) const { return tr("E&xtensions") + '>' + tr("&Tutorial"); } QUndoCommand* HelloWorldExtension::performAction( QAction *, GLWidget * ) { // Create the dialog if needed if (!m_dialog) { m_dialog = new HelloWorldDialog(qobject_cast(parent())); } m_dialog->show(); return NULL; } } // Include Qt moc'd headers #include "helloworldextension.moc" // Set up for the plugin to work correctly Q_EXPORT_PLUGIN2(helloworldextension, HelloWorld::HelloWorldExtensionFactory) avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/01-HelloWorld/helloworlddialog.h0000644000175000001440000000247712250371054031054 0ustar marcususers/********************************************************************** HelloWorldExtension Copyright (C) 2010 David C. Lonie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #ifndef HELLOWORLDDIALOG_H #define HELLOWORLDDIALOG_H #include // Include autogenerated ui code #include "ui_helloworlddialog.h" // Forward declaration of Avogadro::Molecule namespace Avogadro { class Molecule; } namespace HelloWorld { class HelloWorldDialog : public QDialog { // The Q_OBJECT macro must be include if a class is to have // signals/slots Q_OBJECT public: explicit HelloWorldDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); virtual ~HelloWorldDialog() {}; private: // This member provides access to all ui elements Ui::HelloWorldDialog ui; }; } #endif avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/01-HelloWorld/CMakeLists.txt0000644000175000001440000000153012250371054030075 0ustar marcususers# Hello World Avogadro extension. # See http://avogadro.openmolecules.net/ for more information. # Project name project(HelloWorldExtension) # Minimum version of CMake that can be used cmake_minimum_required(VERSION 2.6) # Set up Qt set(QT_MIN_VERSION "4.5.0") find_package(Qt4 REQUIRED) # Set up Avogadro find_package(Avogadro REQUIRED) include(${Avogadro_USE_FILE}) # Specify include directories include_directories( # Needed to include Qt moc'd headers ${CMAKE_CURRENT_BINARY_DIR} ) # Create a list of all source files set( helloworldextension_SRCS helloworldextension.cpp helloworlddialog.cpp ) # Create a list of all ui files set( helloworldextension_UIS helloworlddialog.ui ) # Create the extension target helloworldextension avogadro_plugin(helloworldextension "${helloworldextension_SRCS}" "${helloworldextension_UIS}") avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/01-HelloWorld/helloworldextension.h0000644000175000001440000000534312250371054031624 0ustar marcususers/********************************************************************** HelloWorldExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef HELLOWORLDEXTENSION_H #define HELLOWORLDEXTENSION_H #include #include #include // This is a work around for a bug on older versions Avogadro, bug // 3104853. Patch submitted. using Avogadro::Plugin; namespace HelloWorld { // Forward declaration of header class HelloWorldDialog; class HelloWorldExtension : public Avogadro::Extension { Q_OBJECT AVOGADRO_EXTENSION("Hello World Extension", tr("Simple Hello World Example"), tr("Provides a dialog box with the words \"Hello World\".")) public: HelloWorldExtension(QObject *parent=0); ~HelloWorldExtension() {}; // This tells Avogadro what actions to create virtual QList actions() const; // This returns a string that tells Avogadro where to put the menu entries virtual QString menuPath(QAction *action) const; // When an action is requested (e.g. a user selects a menu entry), // here is where it is handled: virtual QUndoCommand* performAction(QAction *action, Avogadro::GLWidget *widget); // This is called whenever a new molecule is loaded. This is not // needed for this extension. virtual void setMolecule(Avogadro::Molecule *molecule) {}; private: // List of actions implemented by the extension QList m_actions; // Dialog from helloworlddialog.* HelloWorldDialog *m_dialog; }; // Plugin factory setup class HelloWorldExtensionFactory : public QObject, public Avogadro::PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(HelloWorldExtension) }; } #endif avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/01-HelloWorld.dox0000644000175000001440000000250312250371054026052 0ustar marcususersnamespace Avogadro { /** \page tpe-hello-world Hello World! example \section rationale Rationale The Hello World! extension is an example of the simplest extension that implements its own GUI, in this case a dialog box with a button and a label. \section overview Overview The extension consists of five files located in libavogadro/examples/thirdPartyExtensions/01-HelloWorld/: - CMakeLists.txt: - The CMake input file that sets up the build environment. - helloworldextension.cpp - helloworldextension.h - These contain the HelloWorldExtension class which inherits Avogadro::Extension. This is where the actual work of the extension is typically performed. - helloworlddialog.ui - This is the Qt Designer input file that contains the GUI layout. - helloworlddialog.cpp - helloworlddialog.h - These contain the HelloWorldDialog class, which implements support for the GUI described by helloworld.ui \section specifics Specifics There is no algorithmic complexity to explain here, examining the comments in the source files should be sufficient. As a bare example of an Avogadro extension, the Hello World code serves as a basis for the more advanced examples in the tutorial. \section next Next Steps If you're feeling adventurous, try out the following: - Change the "Hello world!" text on the dialog. **/ }avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/0000755000175000001440000000000012250371054026372 5ustar marcususersavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/rotateselectiondialog.ui0000644000175000001440000001674012250371054033325 0ustar marcususers RotateSelectionDialog 0 0 400 230 Rotate Selection Extension QFrame::StyledPanel QFrame::Raised Axis: 0 0 x: 0 0 y: 0 0 z: 5 -100000.000000000000000 100000.000000000000000 5 -100000.000000000000000 100000.000000000000000 5 -100000.000000000000000 100000.000000000000000 5 -100000.000000000000000 100000.000000000000000 5 -100000.000000000000000 100000.000000000000000 5 -100000.000000000000000 100000.000000000000000 Vector (Å) Qt::AlignCenter Offset (Å) Qt::AlignCenter QFrame::StyledPanel QFrame::Raised Angle: 5 -360.000000000000000 360.000000000000000 Qt::Vertical 20 40 &Apply to selected atoms Qt::Horizontal 40 20 Use selected &bond... ././@LongLink0000644000000000000000000000015100000000000011600 Lustar rootrootavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/rotateselectionextension.cppavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/rotateselectionextension0000644000175000001440000001011112250371054033450 0ustar marcususers/********************************************************************** RotateSelectionExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "rotateselectionextension.h" #include "rotateselectiondialog.h" #include #include #include #include #include #include #include #include #include "rotateselectiondialog.h" #define DEG_TO_RAD 0.0174532925 using namespace Avogadro; namespace RotateSelection { RotateSelectionExtension::RotateSelectionExtension(QObject *parent) : Extension(parent), m_dialog(0), m_gl(0) { // This block sets the text for menu entry QAction *action = new QAction(this); // Wrap all user visible strings in tr() so they can be translated action->setText(tr("0&4: Rotate Selection...")); m_actions.append(action); } QList RotateSelectionExtension::actions() const { return m_actions; } QString RotateSelectionExtension::menuPath(QAction *) const { return tr("E&xtensions") + '>' + tr("&Tutorial"); } QUndoCommand* RotateSelectionExtension::performAction( QAction *, GLWidget *gl ) { m_gl = gl; // Create the dialog if needed if (!m_dialog) { m_dialog = new RotateSelectionDialog(qobject_cast(parent())); connect(m_dialog, SIGNAL(requestUpdateAxisFromBond()), this, SLOT(updateAxisFromBond())); connect(m_dialog, SIGNAL(requestApply()), this, SLOT(apply())); } m_dialog->show(); return NULL; } void RotateSelectionExtension::updateAxisFromBond() { // No widget? if (!m_gl) return; QList selected = m_gl->selectedPrimitives().subList(Primitive::BondType); if (selected.size() != 1) { QMessageBox::warning(m_dialog, tr("Rotate Selection"), tr("Please select exactly one bond.")); return; } Bond *bond = qobject_cast(selected.first()); Eigen::Vector3d p1 = (*bond->beginPos()); Eigen::Vector3d p2 = (*bond->endPos()); m_dialog->setAxis(p2-p1, p1); } void RotateSelectionExtension::apply() { // No widget? if (!m_gl) return; QList selected = m_gl->selectedPrimitives().subList(Primitive::AtomType); // Nothing to do: if (selected.size() == 0) { return; } Eigen::Vector3d axis, offset; double angle; m_dialog->getTransform(&axis, &offset, &angle); Eigen::AngleAxis rot (angle * DEG_TO_RAD, axis.normalized()); Atom *atom; Eigen::Vector3d coord; for (int i = 0; i < selected.size(); i++) { atom = qobject_cast(selected.at(i)); coord = *atom->pos(); coord -= offset; coord = rot * coord; coord += offset; atom->setPos(coord); } m_gl->update(); } } // Include Qt moc'd headers #include "rotateselectionextension.moc" // Set up for the plugin to work correctly Q_EXPORT_PLUGIN2(rotateselectionextension, RotateSelection::RotateSelectionExtensionFactory) avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/rotateselectiondialog.h0000644000175000001440000000316312250371054033132 0ustar marcususers/********************************************************************** RotateSelectionExtension Copyright (C) 2010 David C. Lonie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #ifndef ROTATESELECTIONDIALOG_H #define ROTATESELECTIONDIALOG_H #include #include #include "ui_rotateselectiondialog.h" namespace Avogadro { class Molecule; } namespace RotateSelection { class RotateSelectionDialog : public QDialog { // The Q_OBJECT macro must be include if a class is to have // signals/slots Q_OBJECT public: explicit RotateSelectionDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); virtual ~RotateSelectionDialog() {}; void getTransform(Eigen::Vector3d *axis, Eigen::Vector3d *offset, double *angle); signals: void requestUpdateAxisFromBond(); void requestApply(); public slots: void setAxis(const Eigen::Vector3d &axis, const Eigen::Vector3d &offset); private: // This member provides access to all ui elements Ui::RotateSelectionDialog ui; }; } #endif ././@LongLink0000644000000000000000000000014600000000000011604 Lustar rootrootavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/rotateselectiondialog.cppavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/rotateselectiondialog.cp0000644000175000001440000000437012250371054033306 0ustar marcususers/********************************************************************** RotateSelectionExtension Copyright (C) 2010 David C. Lonie This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "rotateselectiondialog.h" #include namespace RotateSelection { RotateSelectionDialog::RotateSelectionDialog(QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { ui.setupUi(this); connect(ui.push_useBond, SIGNAL(clicked()), this, SIGNAL(requestUpdateAxisFromBond())); connect(ui.push_apply, SIGNAL(clicked()), this, SIGNAL(requestApply())); } void RotateSelectionDialog::getTransform(Eigen::Vector3d *axis, Eigen::Vector3d *offset, double *angle) { *axis = Eigen::Vector3d(ui.spin_vx->value(), ui.spin_vy->value(), ui.spin_vz->value()); *offset = Eigen::Vector3d(ui.spin_tx->value(), ui.spin_ty->value(), ui.spin_tz->value()); *angle = ui.spin_angle->value(); } void RotateSelectionDialog::setAxis(const Eigen::Vector3d &axis, const Eigen::Vector3d &offset) { ui.spin_vx->setValue(axis.x()); ui.spin_vy->setValue(axis.y()); ui.spin_vz->setValue(axis.z()); ui.spin_tx->setValue(offset.x()); ui.spin_ty->setValue(offset.y()); ui.spin_tz->setValue(offset.z()); } } // This includes the files generated by Qt's moc at compile time to // ensure that signals/slots work. If you ever see errors about // missing vtables with gcc, check that you haven't forgotten one of // these: #include "rotateselectiondialog.moc" ././@LongLink0000644000000000000000000000014700000000000011605 Lustar rootrootavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/rotateselectionextension.havogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/rotateselectionextension0000644000175000001440000000546512250371054033470 0ustar marcususers/********************************************************************** RotateSelectionExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ROTATESELECTIONEXTENSION_H #define ROTATESELECTIONEXTENSION_H #include #include #include // This is a work around for a bug on older versions Avogadro, bug // 3104853. Patch submitted. using Avogadro::Plugin; namespace RotateSelection { // Forward declaration of header class RotateSelectionDialog; class RotateSelectionExtension : public Avogadro::Extension { Q_OBJECT AVOGADRO_EXTENSION("Rotate Selection Extension", tr("Rotate selected atoms about an arbitrary axis"), tr("Select atoms and rotate about an arbitrary axis and angle.")) public: RotateSelectionExtension(QObject *parent=0); ~RotateSelectionExtension() {}; // This tells Avogadro what actions to create virtual QList actions() const; // This returns a string that tells Avogadro where to put the menu entries virtual QString menuPath(QAction *action) const; // When an action is requested (e.g. a user selects a menu entry), // here is where it is handled: virtual QUndoCommand* performAction(QAction *action, Avogadro::GLWidget *widget); // This is called whenever a new molecule is loaded. This is not // needed for this extension. virtual void setMolecule(Avogadro::Molecule *) {}; public slots: void updateAxisFromBond(); void apply(); private: QList m_actions; RotateSelectionDialog *m_dialog; Avogadro::GLWidget *m_gl; }; // Plugin factory setup class RotateSelectionExtensionFactory : public QObject, public Avogadro::PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(RotateSelectionExtension) }; } #endif avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/04-RotateSelection/CMakeLists.txt0000644000175000001440000000161212250371054031132 0ustar marcususers# Hello World Avogadro extension. # See http://avogadro.openmolecules.net/ for more information. # Project name project(RotateSelectionExtension) # Minimum version of CMake that can be used cmake_minimum_required(VERSION 2.6) # Set up Qt set(QT_MIN_VERSION "4.5.0") find_package(Qt4 REQUIRED) # Set up Avogadro find_package(Avogadro REQUIRED) include(${Avogadro_USE_FILE}) # Specify include directories include_directories( # Needed to include Qt moc'd headers ${CMAKE_CURRENT_BINARY_DIR} ) # Create a list of all source files set( rotateselectionextension_SRCS rotateselectionextension.cpp rotateselectiondialog.cpp ) # Create a list of all ui files set( rotateselectionextension_UIS rotateselectiondialog.ui ) # Create the extension target rotateselectionextension avogadro_plugin(rotateselectionextension "${rotateselectionextension_SRCS}" "${rotateselectionextension_UIS}") avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay.dox0000644000175000001440000000657312250371054026725 0ustar marcususersnamespace Avogadro { /** \page tpe-dynamic-display Dynamic Display example \section rationale Rationale The Dynamic Display extension implements a dialog box that counts the number of hydrogen atoms in the currently displayed molecule. It is designed as an example of how to extract data from the molecule when it is loaded, and also shows how to call functions when the user edits a molecule. \subsection note Note: This may give incorrect counts when the molecule is edited, especially when "Adjust Hydrogens" is enabled. This has been fixed in newer versions of Avogadro. See http://gold.cryos.net:8080/#change,257 \section overview Overview The extension consists of five files located in libavogadro/examples/thirdPartyExtensions/02-DynamicDisplay/: - CMakeLists.txt: - The CMake input file that sets up the build environment. - dynamicdisplayextension.cpp - dynamicdisplayextension.h - These contain the DynamicDisplayExtension class. This is where the molecule is monitored and GUI updates are requested from the DynamicDisplayDialog. - dynamicdisplaydialog.ui - This is the Qt Designer input file that contains the GUI layout. - dynamicdisplaydialog.cpp - dynamicdisplaydialog.h - These contain the DynamicDisplayDialog class, which implements support for the GUI described by dynamicdisplaydialog.ui. The function to count and update the number of hydrogens is of interest here. \section specifics Specifics - DynamicDisplayExtension::setMolecule This extension makes use of the Extension::setMolecule virtual to be notified when a new molecule is loaded in Avogadro. This function will update the cached Molecule pointer, disconnecting the old pointer and reconnecting the new pointer to call moleculeUpdated when atoms are added, removed, or modified. - DynamicDisplayExtension::moleculeUpdated Here, the cached Molecule pointer is inspected, and the appropriate signal is emitted -- either reset if the pointer is null, or update if the pointer if valid. - DynamicDisplayDialog::reset This function updates the label ui.label_numHydrogens with "N/A", indicating that there is not a valid molecule loaded. - DynamicDisplayDialog::update Here, the number of hydrogen atoms are count by iterating through the atoms in the passed Molecule using the QList of Atom pointers provided via Molecule::atoms(). The atomic number of each atom is checked, and if it is a hydrogen, the counter is incremented. Finally, the label is updated with the number of hydrogens found. \section next Next Steps If you're feeling adventurous, try out the following: - Have the dialog also display the total number of atoms. There are at least three unique ways to do this. - Allow the user to change the atomic number that is checked for in DynamicDisplayDialog::update. - This implementation can actually be very inefficient; all atoms in the molecule are counted each time an atom is changed/added/removed. If there are a large number of atoms in the molecule and a large change is enacted, this may cause problems (i.e., a "race condition"), including a temporarily non-responsive user interface or inaccurate counts. Try to implement a QTimer from the QtCore module that will limit the frequency of the update. - You can also handle signals from Molecule, including Molecule::atomAdded, Molecule::atomRemoved which would improve performance, rather than querying every atom repeatedly. **/ }avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/03-ViewPlane/0000755000175000001440000000000012250371054025157 5ustar marcususersavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/03-ViewPlane/viewplaneextension.cpp0000644000175000001440000000666112250371054031623 0ustar marcususers/********************************************************************** ViewPlaneExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "viewplaneextension.h" #include #include #include #include #include #include #include using namespace Avogadro; namespace ViewPlane { ViewPlaneExtension::ViewPlaneExtension(QObject *parent) : Extension(parent) { QAction *action = new QAction(this); action->setText(tr("0&3: View Plane...")); m_actions.append(action); } QList ViewPlaneExtension::actions() const { return m_actions; } QString ViewPlaneExtension::menuPath(QAction *) const { return tr("E&xtensions") + '>' + tr("&Tutorial"); } QUndoCommand* ViewPlaneExtension::performAction( QAction *, GLWidget *gl) { Camera *camera = gl->camera(); if (!camera) { return 0; } QList selected = gl->selectedPrimitives().subList(Primitive::AtomType); if (selected.size() != 3) { QMessageBox::warning(0, tr("View Plane"), tr("Please select exactly three atoms.")); return 0; } // Determine the vector normal to the plane Eigen::Vector3d v1, v2, normal; v1 = (*qobject_cast(selected.at(0))->pos()) - (*qobject_cast(selected.at(1))->pos()); v2 = (*qobject_cast(selected.at(0))->pos()) - (*qobject_cast(selected.at(2))->pos()); normal = v1.cross(v2); // determine our goal matrix Eigen::Matrix3d linearGoal; linearGoal.row(2) = normal.normalized(); linearGoal.row(0) = linearGoal.row(2).unitOrthogonal(); linearGoal.row(1) = linearGoal.row(2).cross(linearGoal.row(0)); // calculate the translation matrix Eigen::Transform3d goal (linearGoal); goal.pretranslate(- 3.0 * (gl->radius() + CAMERA_NEAR_DISTANCE) * Eigen::Vector3d::UnitZ()); // Calculate the centroid of the selection Eigen::Vector3d selectedCenter(0.0, 0.0, 0.0); for (int i = 0; i < selected.size(); i++) { selectedCenter += *(qobject_cast(selected.at(i))->pos()); } selectedCenter /= static_cast(selected.size()); goal.translate(-selectedCenter); camera->setModelview(goal); gl->update(); return 0; } } // Include Qt moc'd headers #include "viewplaneextension.moc" // Set up for the plugin to work correctly Q_EXPORT_PLUGIN2(viewplaneextension, ViewPlane::ViewPlaneExtensionFactory) avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/03-ViewPlane/viewplaneextension.h0000644000175000001440000000513612250371054031264 0ustar marcususers/********************************************************************** ViewPlaneExtension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef VIEWPLANEEXTENSION_H #define VIEWPLANEEXTENSION_H #include #include #include // This is a work around for a bug on older versions Avogadro, bug // 3104853. Patch submitted. using Avogadro::Plugin; namespace ViewPlane { class ViewPlaneExtension : public Avogadro::Extension { Q_OBJECT AVOGADRO_EXTENSION("View Plane Extension", tr("View the plane determined by three atoms"), tr("Select three atoms and the camera will move to view them.")) public: ViewPlaneExtension(QObject *parent=0); ~ViewPlaneExtension() {}; // This tells Avogadro what actions to create virtual QList actions() const; // This returns a string that tells Avogadro where to put the menu entries virtual QString menuPath(QAction *action) const; // When an action is requested (e.g. a user selects a menu entry), // here is where it is handled: virtual QUndoCommand* performAction(QAction *action, Avogadro::GLWidget *widget); // This is called whenever a new molecule is loaded. This is not // needed for this extension. virtual void setMolecule(Avogadro::Molecule*) {}; private: // List of actions implemented by the extension QList m_actions; }; // Plugin factory setup class ViewPlaneExtensionFactory : public QObject, public Avogadro::PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(ViewPlaneExtension) }; } #endif avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/03-ViewPlane/CMakeLists.txt0000644000175000001440000000130212250371054027713 0ustar marcususers# Hello World Avogadro extension. # See http://avogadro.openmolecules.net/ for more information. # Project name project(ViewPlaneExtension) # Minimum version of CMake that can be used cmake_minimum_required(VERSION 2.6) # Set up Qt set(QT_MIN_VERSION "4.5.0") find_package(Qt4 REQUIRED) # Set up Avogadro find_package(Avogadro REQUIRED) include(${Avogadro_USE_FILE}) # Specify include directories include_directories( # Needed to include Qt moc'd headers ${CMAKE_CURRENT_BINARY_DIR} ) # Create a list of all source files set( viewplaneextension_SRCS viewplaneextension.cpp ) # Create the extension target viewplaneextension avogadro_plugin(viewplaneextension "${viewplaneextension_SRCS}") avogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/images/0000755000175000001440000000000012250371054024312 5ustar marcususersavogadro-1.1.1/libavogadro/examples/thirdPartyExtensions/images/05-promote.png0000644000175000001440000006670312250371054026743 0ustar marcususersPNG  IHDRM9sBITO pHYs+"tEXtDescriptionWindow Class: designerݾtEXtTitlePromoted WidgetsQj IDATxys3 .. {¢jDIx'jc&&ycI&Ob~K>C1>yo@#Qn=f9GY3;}[ߪLMuU5748g}6zߚ  ʤH{Wroq\eL$e >Ϻ̓,^f,S*uIҼ]0'eJ4 wռLMLuA=\t"[7O;%P]inNǁ{+i:6I?!QC٣FXXL>-"W6P;Ťnq³ufG3I9ʠ(!QC9GMɁgI0:@u%K~“PSS3wJ»;J$%|>*(y7 L'wx@P)g'i 888Q%i$'~ c)u s;MsFG5]h٩+bf^nJ[{;dUធO$dR H5( /*rQ%Ig a?B'};9—wcQP]Ci+7WMi'Ji*j6mQGqRz szl6$73)zp"61nN9|(ös6 2k֘'k鷎Nّbt1nJl!@><} P TO~CҥȨr86}Q3gtwwݳ0'Az<}9v0!݆EП<ٷO<{l H$<8kH$Jd"H&d2Z]={Μ$ Gm{ruȋ[-gHaD~٣&ISJ)Ul4f/hp[u4(:.;QFHS O*L$H+&)XuVX~Uk|SӚOk>yڴi ʽ$6;jQG-Ś~JCm&tS|/$޽)޴)8Yms3vFn_}Q [XJ-B~ w2͢8S5Qܷo_kk@)e"ѫ Q>i`_d`i3sb"sP o ~tS>qB!_mQJ{{{'LQH,|\EEEoow]_JlAm='}K){y|⻗}nb|c8rKd!\­gt`7$͏ChBg)#?+jyYT^6F_6CN3 fGu5ЧQ no@ioooee@^bx.myoIeEEoOioYJ}K_JSNm~+_yʖys&dEAX,6uʔx\0'O:/$IsfI EDt&NMh{'aI`x[FiZs35>wqӛ{|P zWΞ8J#O:uJg^7zŌw?vG;5L0uWOܳlw=ji /zv;9sn <}Iu}ZN9uL8U\ YΞ7qj g} 3w>;gjSSbU;㸙MӏY~э[/A3V \kQ' m"(I}}}Sdڵ{ࠢKCCCv T__VT>%Iө# >y}jT.WTrm[nv"׼@vhTī>ޗ 7028iʋrw1@(9S4Ԯ];ջdGF!Z.z'Bm9(PHKPH? k;vu?hb/.bԹYuŧ%A)PEwO^bl/~_l{8K.O2k Bjxxz]Pj$O TOAH/^j=*765RYYQ?u .+{'kkjR[ DxJyB FO]%QDQTJP֬YH$!׋Y3:w$r\~1/tnk'Ȗsյ&LYzU:ϟ5yi]vm'No}!9US?%NTKT*%H4Z5ivl}-q -~l/^{jc/^5;tO`ECoSY\tS.\x/!˧cRyO0>iȗ>߮Jly(ۖJdԒdR @ {w ,S#LM75jb,:@}G"ѯ|+Gtp drժ $IG]r{|衇NA2He2:?o|bA ySNp$41 "#GdB.}\y((~/}K$CRgu(}@ɂsqUGO8''i2J~[׭[wvn_O&N.I"N{w GBPvq_~lں9s r(MGR*LvZ D `@kvwOFt~āt P 0;o:ݓt=vf 0qZm6Bޘr>\tv ;D]t|a3W9eB9I3j @Jžz3yAjn]#葍ߍ| h7[}00Fm-Ќʫf(8< =%KN#<`` +Pa!]L|`~A:T]S}͵*N o4R#{ƍOݻw?: 'p6PѨm?۸㝻.{`K ?^OHtQqzb}(\$RiP((hTT@0ƍHމOI,s{PܚPjiUf e 1##### i* ۹v m祽=kv/?&cj O_2`~޾=k_qL_! $l>߯a/nÆ}םKs&m}}{U~| '/mY.oQ'rPV(T8~~ڽ}cҤ<3#7M =U50gAU؀QjWThoq7/zS[''y6 λ~]|W>Yy |h/];>2g)@뵏+fo:g|o\|+$cN}t`9MQW' qZKު<9@ov5:k-,Ƈ/o\P9K_=uogNoNs6yG;|[VS{ l uѬꎪ뒵M΍`|GXlG՜#PoZ_/Gf̘4i@NTnir%CL BWWב#]vZtU?ydE8sh(!4(L?Mos >!x[Yڇ!݁"۷Rܹs44~ W G]V+X0/j>qI+># I9A(D!%Hq"ă'%I* 8 r Ap D5EQ"D||*DHALYp`)B6)!9GҁΚw;.VQ"P0ZR@R% f4'؍ 82e1`ɚDwTCmݺ5 (Q*gd6Ikܶm[*2taxw|'u34Te5~?U6EZ&ׇg,r޲МKy2 }'VTT#G_|Ʀ֩S+Lt3KErcDL ?e(DQ~!JQJ "3 D3'DP2(͆J3:d54PJ&[gމ|o|⨰"ܪsS&$*l Y 6oV'FjzyKR  ;yƦ) NB/8y69un NlCH2wdԪl(m}y;F$>Up800500px"Q765Eцh4ʪ`T^8rS3/՜5FWܲá12z7 ⾉/|~K@ΞQ ,&6Z7|pWD(njjF"\rxE8FPJR98x`D"2'u/c BxϰPR*IR2$_;>dh$ʆE@A-zu[Awjl!"#.4>rwPJ4ñHJcfâfPD6ϸ ( TEE(|Dd'V(L܉, aM"`~_YYd㺐cJeŵ(gOlT-3kl2vM L̲?r mu}AoJE78Յ>UT"bv7BoM:oeɷ,P>,E>C3Okaoez,tG]˱*ŗrc3yZzeff`%b4Y9Ȩ얣ݖ6Y˷&"s.Hq1Xv荍kcHsvR qE{YK|{4 &jd7#Jg!?IPXX;oKA׭əwyb\ S/EhL4?ngf37whgÖzU-SؖѐrYe$"gmFysR"XU9N!u&QTRgEwğΏ[ju7I]a9 4ans-vR-#?,'A*bLS5 LeD\AWjwֱ7;jgCGsi9zڭZ- O2vvf:239+f,ͳ]0wtYK.E9ql`|U V?ʅт(_N{^@yԊQo9IY]iZ9p-y FS'+3`%bF1<տ7Ű6{c $v+o(Iw&mb)2cljN*9F+EX[)3W&`/R;Mu 6j;Ge3: sT́UvݩnuBVM[gU`qs"ڛ%)Y?y:-+!D$"\ vK]ՙ-cn=A]޷q·͵]t֗pCՠ|>[t I'+%" y222s\ p 7dDQLR---x<ȨklyeIܷ=GsύXLJSEZmbzX9'b M{.yaq(vϘɤlRnut/N(qOء>y`^*NElWYe Wd8aϞ=&MA(}}UUUT޺`ǽ ?q8'GU΃&^q)B} Wo%dU$'"{,-qJi"$y BmsyU޲{ۈځDsvl-y34Dyw_`1CyiSJ$$"IR"wtjƉXKZאs,ySE͒-݁O#ޣ/R O9~@KI8Y {TZ.'/ŕο׆s8wË~g߽G*<%fR\:=I޵Á>“.;uc>yIP߷IMCxdcޝy*S!---[weY;ϬE.yzn sbŃfkQ9z/ IDATtêdKZ?F}:m$x MesfrMf?s5ݏv.#P@MtjEUNUs.99˴]vYZ{ښ=S)ahv%swuIsXXmm/.)^,R)jAs8),K,&GkXPʞ" ;vj4Z]YUmvci,rH* T4`t9QkvZFcpz]cU!:[ٵTvRaȀfuǎrH{{ķ]`lN5JtY:O)y*c')Eޖ.+uUoB|%p[#NR24O"'9#+Fv)GQvV wA13cnMNrfm􁊓 T ƪ@j$ /o1l#򾟤@MiGH.d@v iׄk&fb8ϋ/*;v*j:`6E)hC%SD_u(RD )͌L6ցƣ9 8ulom Ҧ  ;I{3̐Fɉ&c6Ema>jm]'!mJ)moo"M"* }/#[Űz` b>f sǬY튮uvPEHod9ysYmr,f=_4)@@Β=uv0 5}*TPGi!En Owt} m۶?򑁁1̨S<}G O18Q$o8F/œ9sXŖxIP6%;0!R v#2i=’[EiA2;[21ƸlGƢ{Ho#n^φf-h=ʋuXl}V2TIaxnW<'9*= XJ+'4"q4CmR8L 4b>q L#c8hdY>p.b&Z)^Si~",%y K^ {SA<]kG)S(dDA)Kxv8 H9q-qAF~6o<|׳ O0s cy#Vk2:{L;n~bɾyM$OW c}?[uw̺|x_:a'WxAd; D\FNɋ-S@A}#o%`0(oAĘH  rY A)#dV32?~5t8~-(%aɏbE ݝºmz˨kE(vtwdv>$뒧+oyV8XR;:wth!x```@bXJzSw)rj>"}HAxg$vFg]8!ڷo) )R5T_xFW]H F;U0{,nG]Nx6,|u*y0 7+TW f\*!F))n3.GMtcv*w}>56{[?zW2j8~* `]PW%![}`wk;Ei\)4,},~[t^_jcV-wtE3zcE.(P-Fkeg?vÕ f)=,?lY𼞌o üS&g&xy;:J`GGGfܵY画3g|>>`r}]TzbQaxx..ÍlʺK}><<$RDBjowtt2 F˝8 ~a RCC#?M6믽SZey[Y}n$ͮbjoA6 ǹ^~٧ꪯ^Տfz-e}L R jo~[۷o?s;oIgmGʋ HP>qysw}+&S HQU +++o把 c}'SMkܵ5.< 8HbX7%;D\3ũ +<]$ RTҝ¶avuOT 4 g Q?&lRheya "KwbMcA$bY!)JKqCb`B ;}C hYBqT=A,>q[_dd3B=(!DL 9n(I-;mxIwzϙyx/v^dCI O(@@wbU`W"G0aًPB g% TMō#qAJ |K&I/SaC!x8;E%J3K*/ 8"بg[IT/eBUP.dΛZKx8JJ%^xK.P*5 qv^,EaI( uO.&-$hppp͚5G&7HC\Bc+(!QKg+(R[ q`CzW}:)]rw"[8;Sc40(%%I;L&o@.ü(r~|™%ӛiKG}L_.C1h?Jry͟>Uvm 4ֻ~U w̳/B\VL !?я:;;X!JrEUwJ1^ QO\ޕ>I?3S y3 ju:]mr$md?ʮw(9DNKWbxf Y&`arLf邓Kcvѕ"),%RfK{߽555wG*+!W*JBH$@/NquK+.Gm}CؕuLRJtś&!3{P|ԇ49TZJ~g(Z;tn f%Y^Qɘ`yQ4%`fI !x8H$"}۾BOnuq":;BqϟO?eHw+75+ǮQyCRp%P 3ge[m ߙSD K/|pYKA% /ob@7oqM7cv"I: Cx;Đ})Z({wh%W5(G>\]=EwOU!D D9R%udӒmfLK:5k޽[nkNBȕW~v)BJrυ_l/c0ƥhe'~=93Y{=yMW9jؓn+{vlW\=shVzCJ/,9J0LJ$J,15YEQ\r套^L&sPBq8(q@igt!*qv54-•N-]\gĒ.!56CpS$(Ę%GiY\"\C68$'wN4YŦnZ2P  ѡiZ}ctŬ;:WhpeCs_CFVp:\oްHNoi]olPdI¡p ($Ƹ.,lu)E1if:R1!:OQJ>]w}߽^s6#؝KZ³ISXV[ӏmlMAy3{z5}pi'ϪiR։_nݻ ))h4K%J$;`bdG2P<ȃMB~c϶?wleCeJiHrwm}sǨ\ s57 Uz.D}aAfbU S>.~.CL~>~^1 Md< hR$I&EHB)$¶@")"QRbFޖ$`XC>/D `)UN1ajC0B!SgR"yG~7*T  ~\f!y0hE[㸲-!Cqē e\ܟ[qĆA yy=q⥃^>SF;# $i띱_?A+#OdƖ8 H#x#W2kת5gt Hybt R'qe HyX4dQAP6AZ>DA AG)K8lj#9.߱ .tA2C^SAv RCA2GqG)7p! H" RV̢4mhDAR edHıKAqADG G);8.{NA>8pt H}AF&CACVnNA)cpt HYZA)OxȼA)+8PƉ(f8>A$ ǧP' t q45A$4:O)SA | Rȫb HA[ e NG)K8l#5~8qm C#8qyql#1~tږl{' ɄM>`8 H" Rd91 eUb4&v#gDMF)C2K*; px WxBA 1D){{SA>̓}d% RR e Ay)ZgqKA$/JF){gX8 H )O3y+? HBlj#xF~ij}LAwl"9( e 8 H#8λG)3d_ 9OA<_  !{A˾}wAi3Qc)Al> efG)K% R`8 Hy]Vٳ}A">% R~p8q`;A$<R?}7A3LzSA|Q2 HY"-qA2lj#)2S81 }A<1| ) e8 HNq;SAĬ3>q7dA0RqTMA,hAʔ)d*dA>!첿B)W}؝ Rvp8A;mvdA1̓}p! H#1G)cU q8 HQ1'NǷ#9<pجF)7Sܼš yA15Q;>o c}'xa[R*]>+O^7c28 vǟgΎ>7lkc#y7Q(ſ__8f s*fWP# w缘Y_y* 2<< nj$8p# 9w@0XQQYU5a~#ArQ ƾkKWkû`޽w"ɤ$#Rp|>_(C`EtB`_oo(jkk<{9쳥p 1Ђ#]]D&S'N_ƁoKqƁ91"8N֩.Ca>P0}p|f6y5:a|ef ɏq ct9k:=dN34ȣa891 jV!8>3c'yQimٸqH< 8qB?ucC!H)޹=~WOJ5PJHšډ(?A EM',|(C!EQ GF- O[[[n믽tPoqDd"I%RSSC R$jkj$";9 L٘)L 8|㫯Np3>ltPZC-ܟz{lwB*%NA WyyN~4j{W_W_7_K/]rib 3HVb@mB~^z|whp@}>t e$88S?uV<A]wz˭ӟ/ReTdSv5;wx饗jjjnX,iqM7~?UUU<8 s/k|ghh.;zd2adej!52ʋ=!_qSL~p땣<)TAtMCZ/||`(>M)tuu$qGkkg Aq/7b֟(-P(TSS#-m9zp3 &g3%gz7w[P6 IZRn;EC.i&p&l'!̈́.!3%gf6z7w[P6 )5΍f:l32>-'g㓓!uLX֭[#Uw36wuuu(G4f}W_]]ȃٗBxE=44~;|Ϟ724iӦT*/Dph4Χ%ZZZN1T<==VӅ\~)Z>wHS 5cf05A㸀?k{BVTTTTNhmi1>))W^d 7 J4658(Ae=! B==ݩMO/;V*:x@1SD"Nlj1" ^؄Ec 8 < G)cPA ؝ 8"I "[ sCwAJ A`iEKtddBJ9\OƯBj 8 e( IDATd"1<4Xt}>kk۶Q=?;m,E R: 9D"!A") ܼ}۶XPa6Rh,GN8.@AaB(k8a*J.IJH9D $Iw? |a:@_!r s`is$e| Hɒ[`iO記7v@9ǥlڷ59>i8q;8}pA?r*)~ґHC/W)%qw ;'_]""sEK776NWRdz2Kۀs IMm shPprݤD"QtpUUU(xNH<^;kbSA縊p8 {!;\(BXATl86Ax Hyv&>0. 8ڔ>q&8'D R!ܶ8"sNA)H<ڷ)I&k q<##P1wƉI88 DU AqAThuB$IEB~h+o7M^YvA1dd$qAA*)r{ƌ]]]Ns RqQ;wEgj^%>446khh(qMAĈ0sSwQSS1z6$IUEhqAoE"i!D"I. R$IYyp' pdA2F^:E2Xlٺu gk> HY`t 2Ylhڒ^.e EnzFVb'P9W!c+ҥK-[wgakҥ̫wfAq^U\MGF,]Tm emRU|jRј-5ϤWP&ܬ4fxmD8ǽ'(֭[t@Ζe˖)6am]6F_nҝb}.pó0 Ԕ lxƹ:2ta([v@[Saٵh65؝0a(`!uFDs)u~z %+ Z;Ձ5XGL.3C'2T0>K@t|ŒAzW,N碌y.ṰD.#Hzt >OX<Ǔ+n:G=e̤Y&,_&j٧aE 2qwVxYKoTݻw;%^-pYĝ;e,!ojn q7>?tP*bYT馊J6*pJ(̖d21<<4AF?svQuTD"^UySN>cD"!RdHI)0eݻv֎vv"]qAF;/;]glbS|<"IR,088H)i\J%kbX4|QR)/ <ӝXl2cBH"$RB /q )Jϛ7we7 X=YJ#RRp@7wVTi3S4(poq;İˉ/[\nEJ;XWFSBince2 B._`QXVyvQ+y?@ijT{ٲ ͛ݎ Իmr.zuC|>_]]ˍ84Uk*sGxSt+ᆁ`ޜ7grf֭{=NOl9aM76n<6mܨ',\([!z3bfɇorKCCrn9uK\zp&+p?@hTIUA}`>"-4h: @.ۚCmZx"%|ቋQ|_ƛ~z˷#OS>SO\onPW{[uuuY7˥J{[ )O*++/l)4hr/eQ+p <_CD"1AFp8DBx}YTio \^+**)3ޚ[UڳGdm JhA%U]` ?p8 8UY% Rkv.A-/E 2v H$hgC yw%10)#!Tu̟7qDO| MC,{ߑCAdddۻqӦF;/8ȑ#oqѢkkkt%"ҒH$U/-)|>̖DQmIcK|ӹcǢE'͝{LUUh455ΓNZY()Swܑxmm555dRSS޾k׎&X?||\PwW:}eQU)5<?1@mmmUUor $ B(S|eB<.9ImkUz50#}'Cmʼnf`I `PJ6脅 myԁzonPm2@Uί?]oZ3hK5 7ܵh:Q aL%RbɿfZbdLGR @d7) ސ B o(~c'ocS'hH Y5l[JѢ+!KGݙu8°iU0B ೶y䍓N^/ZtƏl+̌V9T2+0­@vt}om IO_V|KߝO>Y(mQ6kzɋ_{UyFP,-mp=pu"IZG -癄uS,%mQXߗm7`gLC o/nqzsJ4ȴջx%PVohlh= ;,晙im0W5۶d?M b\79Du:\com+afɹ¡!'n j[r;e%,Ue>cL=wݪ՗,Y {gu+H>q`pIӱ`IRG='' ڵ묳>o$I^<_oohX5aB8oK*++?ڵ%D# MMWǷ#=dy>BD">1&DBP%_φ Șp8\?O^ [,Q(}& EAq'}Ao޼&N8)7(Qc͛6u,8nS9MX[[;yMܩ>qd,cǎEN{1UUUd;wthh祜ǗXkjjF;#}\Xܝ=vzj5qX*5/k*2vP[[[߂ȮtZ`\+7g];Nƻ8b\O܂SO=u͚5,ȧk֬QD!+V+8~+Ȱxl) \%nhu%֏靘%aƟ~Xo**!zc!F{u*!`j6·nr-T(VFǏ_z5O32m24:tfeΩ05&+I9;vEe6$P*}V5_ڽ1y9BE1 5q{0»hl&}>˝^1ْ*i(sSfȺ?l mB"c:N#85DjJʝ;>(vtX?#nLh4 :ut,'>?F8nKٳٶvG 3 rtN8NÙm+I%k0 \OA$)8OA$˘fK͂#qAQ*&* Kb@CC|.˕x=:6+j3e9oll|7n]oo/|6m"Z h49<9~lNB(aLb99Ems}}=*'kkkȧ myBkn/_o??;UVB}CPARs'3' 0%3y-Zf,f0Hy]ݒm>T hɧ`lm s΀3 ߰a_?aI,馛\6%$ p`Gr`MOJЬ0wl۶nI/q'X]#6u; IDATr[׬e6uu$ KJJ$I|+WpP-$twwoٳpw:]@.,eq@qc)% 0ƈ)`M%/ \.ׄ Sz5y ̠:Ná  IKRzn ca~_:dBt P8A2g )fV.a) H17;02  isF)5v=y)cFA$SLDWR qnvC G$3_  81y/bhJ)qA 30}0 Q̎Aє8 S8 H^#q5 w_ A`I, QX, 4pGFœ&\.aC'Vu`R'#n#HfEQ)S.D".H Lzh%؁)S/=̭ Y3"(FmK$&\t6KN7 ~q D17]ǧ4$a-'$$M!1$I~mgMhQQzC:0 7l[QQ:}:Zk}G~2ى"' H`E"qθxjwvme7z=4;$)>6_vgDIe>^{嫛JMYfPZNЄHAY#oOmճK[ o>/3I&W$u$Mw9yr{8p0 DIz dwvر)7$_RaAA8Oi$ٵ~rͳTʵϿįJS14U̝;lؼj48{o">z~󗿔N}OOvG̑,AK51%ʽ/ݼ\rٟ~~cƖ:g߾rޜsˡ!iu w$I_j@EhIsESyuwtYg):篣޶w ]UPOe<>L G24$Ho8Gտ\ugŚg/BWm[GղwJ*r^U|)%J$F,^RKX].0Mhqgt98j 7j_7oͳӧTΰt1wJd[Q_*'Z2+=9!!`A)ݿnt朙@p䱟Oesf햎g;}OsKWU=rI@|rK-O~JZbһ jowpn!]{߲v??(({o9:n ޮ*otJ>H . CQYۿ@g{g(?bgm&U\\\46eb8ao6uu+rPiV){4S+שcLB1#龏I @$`"f^#9Ul% 8 @-Ժe@ڝ Ry8c\wWU>?v| Ol#o\rvE? y.E> bߍ!iwm{c`LE7jSy7~дfi_4 Q>YKNo޽Ko]:!̉#Ȑ txtV?{.^g K_`k<0g攤`׮-&<׹XLژkݵ:?o:1ؼ]=_[u_7 BY{ -U:M$+~@9OBSq/,_.mGRcϾH]8?\/ ,T\Zf+bSv@iwzjg}@z c~#GH՚PM;cT.v_]1p:S 1 ьO}TJǷ<{̛fs~zly-9z啣q!DKUFfH~+ Mœdخ Y$? 7p I ;L0wƔ;PJ}M|w'b5`0xl bf@"ۇ JJrvw-'h7v|9q9!Xm+cގ+6s~ɪEovlO Y9xzlےx ;;;!gSt8,̝= tTIaAJ<h9A9M \}.\0e<jmirŬޗ)<߄~jkiMpC4{n}oYeecX8zR2nܘM&Guq,N7Px"^Oiiٸq;A Y(^6zH$msrv{qt Rt:Gjc {!FF:A Y7s_Ƞc!V1$+ HA89Sb opn$>|L Õ A  y y AJt >D77NA?BЅ8b _mq9l  GA\`ҥ h[fAG-6m{A$B!?j߆E e<ADP_eop]uKv.D>cco  9:\u~vo%!' HR~w!pѿIENDB`avogadro-1.1.1/libavogadro/src/0000755000175000001440000000000012250371140015600 5ustar marcususersavogadro-1.1.1/libavogadro/src/extension.h0000644000175000001440000001671512250371054020003 0ustar marcususers/********************************************************************** Extension - Extension Class Interface Copyright (C) 2007-2008 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef EXTENSION_H #define EXTENSION_H #include "plugin.h" #include #include #include #define AVOGADRO_EXTENSION(i, t, d) \ public: \ static QString staticIdentifier() { return i; } \ QString identifier() const { return i; } \ static QString staticName() { return t; } \ QString name() const { return t; } \ static QString staticDescription() { return d; } \ QString description() const { return d; } #define AVOGADRO_EXTENSION_FACTORY(c) \ public: \ Avogadro::Plugin *createInstance(QObject *parent = 0) { return new c(parent); } \ Avogadro::Plugin::Type type() const { return Avogadro::Plugin::ExtensionType; } \ QString identifier() const { return c::staticIdentifier(); } \ QString name() const { return c::staticName(); } \ QString description() const { return c::staticDescription(); } class QDockWidget; class QUndoCommand; class QTextEdit; class QAction; namespace Avogadro { class DockWidget; class GLWidget; class Molecule; /** * @class Extension extension.h * @brief Interface for adding extensions * @author Donald Ephraim Curtis * * This is a template class used for adding extensions * to Avogadro. Implementing the pure virutal functions * provides a mechanism for more functionality. * Extensions work by allowing each extension to have an unlimited * number of possible actions (each represented by a QAction). To * perform an action the extension should implement performAction * and perform the correct action based on the action it receives. * The actual action should will be performed by the parent object * (usually MainWindow) as a result of a ::redo call on the returned * QUndoCommand from the performAction function. Thus, to implement * functionality you should subclass QUndoCommand accordingly * based on the required functionality of the extension and return * the command based on the action being peformed. * * Append any dockwidgets the extension may use to the m_dockWidgets * list and they will be put in place when the extension is loaded. */ class A_EXPORT Extension : public Plugin { Q_OBJECT public: /** * Constructor. */ Extension(QObject *parent = 0); /** * Destructor. */ virtual ~Extension(); /** * \enum Possible Molecule change hints. The enumeration lists the * desired treatmest of the Molecule emitted. The hints should be honoured * by the class receiving the moleculeChanged signal. * * KeepOld - the old Molecule is not deleted, it is simply replaced. * DeleteOld - old default behaviour, old Molecule is deleted and * the new Molecule replaces the old one in the current window. * * NewWindow - open the new Molecule in a new Window if the old one was * modified. */ enum MoleculeChangedHint { KeepOld = 0x00, /// Keeps the old Molecule DeleteOld = 0x01, /// Deletes the old Molecule NewWindow = 0x02 /// Open the new Molecule in a new window if old is modified }; /** * Plugin Type */ Plugin::Type type() const; /** * Plugin Type Name (Extensions) */ QString typeName() const; /** * @return a list of actions which this widget can perform */ virtual QList actions() const = 0; /** * @return the menu path for the specified action */ virtual QString menuPath(QAction *action) const; /** * @return whether the specified action requires the network */ virtual bool usesNetwork(QAction *action) const; /** * @return A QDockWidget associated with this extension * * @deprecated Use dockWidgets() instead. This function will return the * first dockWidget in the dockWidgets() list or NULL in its default * implementation. */ virtual QDockWidget * dockWidget(); /** * @return A list of DockWidget instances associated with this extension */ virtual QList dockWidgets() const; /** * @return The number of DockWidget instances. */ virtual int numDockWidgets() const; /** * @param action the action that triggered the calls * @param widget the currently active GLWidget * feedback to the user) * @return an undo command for this action */ virtual QUndoCommand* performAction(QAction *action, GLWidget *widget) = 0; /** * save settings for this extension * @param settings settings variable to write settings to */ virtual void writeSettings(QSettings &settings) const; /** * read settings for this extension * @param settings settings variable to read settings from */ virtual void readSettings(QSettings &settings); /** * Determines the ordering of the extensions. More useful * extensions will be placed first in menus. It is up to the * extension designer to be humble about their usefulness value. * @return usefulness value */ virtual int usefulness() const; public Q_SLOTS: /** * Slot to set the Molecule for the Extension - should be called whenever * the active Molecule changes. */ virtual void setMolecule(Molecule *molecule); Q_SIGNALS: /** * Can be used to add messages to the message pane. * @param m the message to add to the message pane. */ void message(const QString &m); /** * Can be used to notify the MainWindow to refresh the QActions for this extension. */ void actionsChanged(Extension*); /** * Can be used to notify the MainWindow to change the molecule to a new one. * The MoleculeChangedHint allows the extension to specify how the new and * old Molecule objects should be treated. */ void moleculeChanged(Molecule *, int); /** * Can be used to notify the MainWindow of a delayed action. * For example, if the Extension shows a window that alters a bond length * or inserts a new framgent. * The action should be added to the undo stack. */ void performCommand(QUndoCommand*); protected: /** * The list of DockWidget instances used in dockWidgets(). Append * instances of Avogadro::DockWidget to this list to have them used. */ QList m_dockWidgets; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/pythonerror.h0000644000175000001440000001010312250371054020343 0ustar marcususers/********************************************************************** PythonError - Handle python errors Copyright (C) 2008,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************/ #ifndef PYTHONERROR_H #define PYTHONERROR_H #include #include #include namespace Avogadro { /** * @brief Singleton object to store all python errors * * To be able to display all python errors in the GUI later, it is needed to * store python errors somewhere until the GUI objects are created. This * class stores the appended errors and when the GUI is created, the preceding * errors can be retrieved for display. The PythonError class has a message * signal which is emitted if the object is in listening mode (see setListening()). * * All calls to python functions (directly to the Python C API or through * boost::python), should use the following form: * * @code * try { * prepareToCatchError(); * // Do python stuff here... * } catch(error_already_set const &) { * catchError(); * // additional error handling here... * } * @endcode * * */ class A_EXPORT PythonError : public QObject { Q_OBJECT Q_SIGNALS: /** * In listening mode, this signal is emitted when a new python error is * caught by catchError(). */ void message(const QString&); public: /** * Get a pointer to the singleton instance. */ static PythonError* instance(); /** * This method has 2 behaviours depening on the listening mode. * * 1) When a class is listening, calling this method will emit the message signal. * * 2) When there is no class listening, calling this method will * append str to the internal error log. */ void append(const QString &str); /** * Get the internal error log containing all errors when listening * was disabled. */ QString& string(); /** * Set listening mode. */ void setListening(bool listening); private: PythonError(); QString m_str; bool m_listening; }; /** * Initialize python. This is a no-operation when called for a second time. * * @note Py_Finalize is never called. While there may be situations where a * user disables all python features after using them, calling Py_Finalize() * may result in unexpected behaviour. * (http://docs.python.org/c-api/init.html#Py_Finalize) * * @param addToSearchPath Optional parameter containing path(s) to add * (prepend) to sys.path. Multiple paths can be separated by ';'. * * @return True if python was successfully initialized. */ A_EXPORT bool initializePython(const QString &addToSearchPath = QString()); /** * Prepare to catch errors (exceptions) from executing python code. See * PythonError class documentation for more information on how to use this * function. */ A_EXPORT void prepareToCatchError(); /** * Get the last error resulting from executing python code. See PythonError * class documentation for more information on how to use this function. */ A_EXPORT void catchError(); } // namespace #endif avogadro-1.1.1/libavogadro/src/tool.cpp0000644000175000001440000000507312250371054017272 0ustar marcususers/********************************************************************** Tool - Avogadro Tool Interface Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "tool.h" #include #include namespace Avogadro { class ToolPrivate { public: ToolPrivate() {} }; Tool::Tool(QObject *parent) : Plugin(parent), d(new ToolPrivate) { m_activateAction = new QAction(this); m_activateAction->setCheckable(true); m_activateAction->setIcon(QIcon(QString::fromUtf8(":/icons/tool.png"))); } Tool::~Tool() { delete d; } Plugin::Type Tool::type() const { return Plugin::ToolType; } QString Tool::typeName() const { return tr("Tools"); } QAction* Tool::activateAction() const { if(m_activateAction->toolTip().isEmpty()) m_activateAction->setToolTip(description()); if(m_activateAction->text().isEmpty()) m_activateAction->setText(name()); return m_activateAction; } QWidget* Tool::settingsWidget() { return 0; } void Tool::setMolecule(Molecule *) { } int Tool::usefulness() const { return 0; } bool Tool::operator<(const Tool &other) const { return usefulness() < other.usefulness(); } QUndoCommand* Tool::wheelEvent(GLWidget *, QWheelEvent *) { return 0; } QUndoCommand* Tool::keyPressEvent(GLWidget *, QKeyEvent *) { return 0; } QUndoCommand* Tool::keyReleaseEvent(GLWidget *, QKeyEvent *) { return 0; } bool Tool::paint(GLWidget*) { return true; } void Tool::writeSettings(QSettings &settings) const { Q_UNUSED(settings); } void Tool::readSettings(QSettings &settings) { Q_UNUSED(settings); } } // end namespace avogadro-1.1.1/libavogadro/src/pythonscript.cpp0000644000175000001440000000530312250371054021057 0ustar marcususers/********************************************************************** Python - Gives us some Python helper stuff Copyright (C) 2008 by Donald Ephraim Curtis Copyright (C) 2008,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************/ #include "pythonscript.h" #include #include #include using namespace std; using namespace boost::python; namespace Avogadro { PythonScript::PythonScript(const QString &fileName) { m_fileName = fileName; QFileInfo info(fileName); m_moduleName = info.baseName(); m_lastModified = info.lastModified(); try { prepareToCatchError(); // try to import the module m_module = import(m_moduleName.toAscii().data()); // import doesn't really reload the module if it was already loaded // to be save, we always reload it m_module = object(handle<>(PyImport_ReloadModule(m_module.ptr()))); } catch(error_already_set const &) { catchError(); } } PythonScript::~PythonScript() { } QString PythonScript::moduleName() const { return m_moduleName; } object PythonScript::module() const { QFileInfo fileInfo(m_fileName); if(fileInfo.lastModified() > m_lastModified) { try { prepareToCatchError(); m_module = object(handle<>(PyImport_ReloadModule(m_module.ptr()))); } catch(error_already_set const &) { catchError(); } m_lastModified = fileInfo.lastModified(); } return m_module; } const QString& PythonScript::fileName() const { return m_fileName; } QString PythonScript::identifier() const { QFile file(m_fileName); file.open(QIODevice::ReadOnly); QString identity = QCryptographicHash::hash(file.readAll(), QCryptographicHash::Sha1).toHex(); return identity; } } avogadro-1.1.1/libavogadro/src/dockextension.h0000644000175000001440000000362012250371054020633 0ustar marcususers/********************************************************************** DockExtension - interface for extensions which provide docks Copyright (C) 2010 Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef DOCKEXTENSION_H #define DOCKEXTENSION_H #include "extension.h" namespace Avogadro { class A_EXPORT DockExtension : public Extension { Q_OBJECT public: /** * Constructor. */ DockExtension(QObject *parent = 0); /** * Destructor. */ virtual ~DockExtension(); // This methods are not needed for docks virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); /** * @return dock widget associated with this extensions */ virtual QDockWidget * dockWidget() = 0; /** * @return default DockWidgetArea for dock */ virtual Qt::DockWidgetArea preferredDockArea() const; /** * @return Determines the ordering of the docks */ virtual int dockOrder() const; }; } #endif avogadro-1.1.1/libavogadro/src/engines/0000755000175000001440000000000012250371054017234 5ustar marcususersavogadro-1.1.1/libavogadro/src/engines/ringengine.h0000644000175000001440000000614012250371054021533 0ustar marcususers/********************************************************************** RingEngine - Engine for "ring" display Copyright (C) 2007 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef RINGENGINE_H #define RINGENGINE_H #include #include #include #include "ui_ringsettingswidget.h" namespace Avogadro { //! Ring Engine class. class RingSettingsWidget; class RingEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Ring", tr("Ring"), tr("Renders rings with colored planes")) public: //! Constructor RingEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~RingEngine(); //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); bool renderTransparent(PainterDevice *pd); //@} double transparencyDepth() const; Layers layers() const; PrimitiveTypes primitiveTypes() const; ColorTypes colorTypes() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; QWidget* settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: RingSettingsWidget *m_settingsWidget; double m_alpha; // transparency of the VdW spheres bool renderRing(const QList &ring, PainterDevice *pd); // Render the given ring private Q_SLOTS: void settingsWidgetDestroyed(); /** * @param value opacity of the rings */ void setOpacity(int value); }; class RingSettingsWidget : public QWidget, public Ui::RingSettingsWidget { public: RingSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our RingEngine class class RingEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(RingEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/polygonengine.cpp0000644000175000001440000000615512250371054022624 0ustar marcususers/********************************************************************** PolygonEngine - Engine for "polygon" display Copyright (C) 2007 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "polygonengine.h" #include #include #include #include #include #include #include using Eigen::Vector3d; namespace Avogadro{ PolygonEngine::PolygonEngine(QObject *parent) : Engine(parent) { } Engine *PolygonEngine::clone() const { PolygonEngine *engine = new PolygonEngine(parent()); engine->setAlias(alias()); engine->setEnabled(isEnabled()); return engine; } PolygonEngine::~PolygonEngine() { } bool PolygonEngine::renderOpaque(PainterDevice *pd) { foreach(Atom *a, atoms()) renderPolygon(pd, a); return true; } bool PolygonEngine::renderPolygon(PainterDevice *pd, Atom *a) { // Check if the atom is of the right type and has enough neighbours switch (a->atomicNumber()) { case 1: case 6: case 7: case 8: case 16: return true; break; default: // we're fine, render this as a possible polygon if (a->valence() < 4) return true; } Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map map->setFromPrimitive(a); pd->painter()->setColor(map); QVector atoms; QList neighbors = a->neighbors(); foreach (unsigned long neighbor, neighbors) { atoms.push_back(pd->molecule()->atomById(neighbor)->pos()); } // Disable face culling for ring structures. for (int i = 0; i < atoms.size(); i++) { for (int j = 0; j < atoms.size(); j++) for (int k = 1; k < atoms.size(); k++) pd->painter()->drawTriangle(*atoms[i], *atoms[j], *atoms[k]); } // Disable face culling for ring structures. return true; } double PolygonEngine::radius(const PainterDevice *, const Primitive *) const { return 0.; } Engine::PrimitiveTypes PolygonEngine::primitiveTypes() const { return Engine::Atoms; } } Q_EXPORT_PLUGIN2(polygonengine, Avogadro::PolygonEngineFactory) avogadro-1.1.1/libavogadro/src/engines/ribbonsettingswidget.ui0000644000175000001440000000456012250371054024040 0ustar marcususers RibbonSettingsWidget 0 0 400 233 Rendering: Backbone Lines Radius: 0 20 1 2 10 10 Qt::Horizontal false QSlider::TicksBothSides 4 Qt::Vertical 20 40 Include Nitrogens avogadro-1.1.1/libavogadro/src/engines/simplewireengine.cpp0000644000175000001440000000515612250371054023315 0ustar marcususers/********************************************************************** WireEngine - Simple engine for fast wire frame display Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "simplewireengine.h" #include #include #include #include #include namespace Avogadro { using Eigen::Vector3d; SimpleWireEngine::SimpleWireEngine(QObject *parent) : Engine(parent) { } SimpleWireEngine::~SimpleWireEngine() { } Engine* SimpleWireEngine::clone() const { SimpleWireEngine* engine = new SimpleWireEngine(parent()); engine->setAlias(alias()); engine->setEnabled(isEnabled()); return engine; } bool SimpleWireEngine::renderOpaque(PainterDevice *pd) { glDisable(GL_LIGHTING); Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map foreach(Bond *b, bonds()) { const Atom* atom1 = b->beginAtom(); const Vector3d & v1 = *atom1->pos(); const Atom* atom2 = b->endAtom(); const Vector3d & v2 = *atom2->pos(); map->setFromPrimitive(atom1); pd->painter()->setColor(map); if (atom1->atomicNumber() != atom2->atomicNumber()) { // compute the mid-point between the two atoms Vector3d v3((v1 + v2) / 2.0); pd->painter()->drawLine(v1, v3, 1.0); map->setFromPrimitive(atom2); pd->painter()->setColor(map); pd->painter()->drawLine(v3, v2, 1.0); } else { // Just draw a line pd->painter()->drawLine(v1, v2, 1.0); } } glEnable(GL_LIGHTING); return true; } } Q_EXPORT_PLUGIN2(simplewireengine, Avogadro::SimpleWireEngineFactory) avogadro-1.1.1/libavogadro/src/engines/spheresettingswidget.ui0000644000175000001440000000327512250371054024055 0ustar marcususers SphereSettingsWidget 0 0 400 233 VdW Opacity: 0 20 1 2 20 20 Qt::Horizontal false QSlider::TicksBothSides 4 Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/engines/sphereengine.h0000644000175000001440000000646412250371054022073 0ustar marcususers/********************************************************************** SphereEngine - Engine for "spheres" display Copyright (C) 2007-2008 Marcus D. Hanwell Copyright (C) 2006-2007 Geoffrey R. Hutchison Copyright (C) 2007 Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SPHEREENGINE_H #define SPHEREENGINE_H #include #include #include "ui_spheresettingswidget.h" namespace Avogadro { //! Sphere Engine class. class Atom; class SphereSettingsWidget; class SphereEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Van der Waals Spheres", tr("Van der Waals Spheres"), tr("Renders atoms as Van der Waals spheres")) public: //! Constructor SphereEngine(QObject *parent=0); //! Deconstructor ~SphereEngine(); //! Copy Engine *clone() const; //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); bool renderTransparent(PainterDevice *pd); bool renderQuick(PainterDevice *pd); //@} double transparencyDepth() const; Layers layers() const; PrimitiveTypes primitiveTypes() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; QWidget* settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: double radius(const Atom *a) const; //! Render an Atom. bool render(PainterDevice *pd, const Atom *a); SphereSettingsWidget *m_settingsWidget; double m_alpha; // transparency of the VdW spheres private Q_SLOTS: void settingsWidgetDestroyed(); /** * @param value opacity of the VdW spheres / 20 */ void setOpacity(int value); }; class SphereSettingsWidget : public QWidget, public Ui::SphereSettingsWidget { public: SphereSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our SphereEngine class class SphereEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(SphereEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/cartoonengine.h0000644000175000001440000001003412250371054022236 0ustar marcususers/********************************************************************** CartoonEngine - Engine for protein structures. Copyright (C) 2009 by Tim Vandermeersch Some portions Copyright (C) 2007-2008 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef CARTOONENGINE_H #define CARTOONENGINE_H #include #include #include #include "ui_cartoonsettingswidget.h" namespace Avogadro { class Mesh; class CartoonSettingsWidget; //! CartoonEngine class. class CartoonEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Cartoon", tr("Cartoon"), tr("Renders protein secondary structure")) public: //! Constructor CartoonEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~CartoonEngine(); //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); bool renderQuick(PainterDevice *pd); //@} PrimitiveTypes primitiveTypes() const; ColorTypes colorTypes() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; void setPrimitives(const PrimitiveList &primitives); QWidget* settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); public Q_SLOTS: void addPrimitive(Primitive *primitive); void updatePrimitive(Primitive *primitive); void removePrimitive(Primitive *primitive); private: void updateMesh(PainterDevice *pd); bool m_update; // Is an update of the mesh necessary? // store the mesh as QPointer so the pointer will always be // set to 0 when the object gets deleted. QPointer m_mesh; CartoonSettingsWidget *m_settingsWidget; // shape parameters double m_aHelix, m_bHelix, m_cHelix; double m_aSheet, m_bSheet, m_cSheet; double m_aLoop, m_bLoop, m_cLoop; // colors QColor m_helixColor, m_sheetColor, m_loopColor; private Q_SLOTS: void settingsWidgetDestroyed(); void setHelixA(double value); void setHelixB(double value); void setHelixC(double value); void setSheetA(double value); void setSheetB(double value); void setSheetC(double value); void setLoopA(double value); void setLoopB(double value); void setLoopC(double value); void setHelixColor(QColor); void setSheetColor(QColor); void setLoopColor(QColor); }; class CartoonSettingsWidget : public QWidget, public Ui::CartoonSettingsWidget { public: CartoonSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our CartoonEngine class class CartoonEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(CartoonEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/stickengine.cpp0000644000175000001440000001664712250371054022261 0ustar marcususers/********************************************************************** StickEngine - Engine for "stick" display Copyright (C) 2006-2008 Geoffrey R. Hutchison Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "stickengine.h" #include #include #include #include #include #include #include #include #include #include using namespace Eigen; // Conversion from integers to double // Default has been 20.0 // i.e., smallest radius = 0.05 (1/20), default is 0.25 (5/20), max is 0.5 (10/20) #define SCALING_FACTOR 20.0 namespace Avogadro { StickEngine::StickEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_radius(0.25) { } StickEngine::~StickEngine() { // Delete the settings widget if it exists if(m_settingsWidget) m_settingsWidget->deleteLater(); } Engine* StickEngine::clone() const { StickEngine* engine = new StickEngine(parent()); engine->setAlias(alias()); engine->setEnabled(isEnabled()); engine->setRadius(m_radius * SCALING_FACTOR); return engine; } bool StickEngine::renderOpaque(PainterDevice *pd) { // glPushAttrib(GL_TRANSFORM_BIT); glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); // Render the atoms foreach(Atom *a, atoms()) renderOpaque(pd, a); // render bonds (sticks) glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); foreach(Bond *b, bonds()) renderOpaque(pd, b); // glPopAttrib(); return true; } bool StickEngine::renderTransparent(PainterDevice *pd) { glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map map->setToSelectionColor(); pd->painter()->setColor(map); // Render the atoms foreach(Atom *a, atoms()) { if (pd->isSelected(a)) { pd->painter()->setName(a); pd->painter()->drawSphere(a->pos(), SEL_ATOM_EXTRA_RADIUS + radius(a)); } } // render bonds (sticks) glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); foreach(Bond *b, bonds()) { if (pd->isSelected(b)) { Atom* atom1 = pd->molecule()->atomById(b->beginAtomId()); Atom* atom2 = pd->molecule()->atomById(b->endAtomId()); Vector3d v1 (*atom1->pos()); Vector3d v2 (*atom2->pos()); Vector3d v3 (( v1 + v2 ) / 2); pd->painter()->setName(b); pd->painter()->drawCylinder(v1, v2, SEL_BOND_EXTRA_RADIUS + radius(atom1)); } } return true; } bool StickEngine::renderPick(PainterDevice *pd) { glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); // Render the atoms foreach(Atom *a, atoms()) renderPick(pd, a); // render bonds (sticks) glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); foreach(Bond *b, bonds()) renderOpaque(pd, b); return true; } inline bool StickEngine::renderOpaque(PainterDevice *pd, const Atom* a) { Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map map->setFromPrimitive(a); pd->painter()->setColor(map); pd->painter()->setName(a); pd->painter()->drawSphere( a->pos(), radius(a) ); return true; } inline bool StickEngine::renderPick(PainterDevice *pd, const Atom* a) { Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map map->setFromPrimitive(a); pd->painter()->setColor(map); pd->painter()->setName(a); pd->painter()->drawSphere( a->pos(), radius(a) + 0.2 ); return true; } inline bool StickEngine::renderOpaque(PainterDevice *pd, const Bond* b) { Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map Atom* atom1 = pd->molecule()->atomById(b->beginAtomId()); Atom* atom2 = pd->molecule()->atomById(b->endAtomId()); Vector3d v1 (*atom1->pos()); Vector3d v2 (*atom2->pos()); Vector3d v3 (( v1 + v2 ) / 2); map->setFromPrimitive(atom1); pd->painter()->setColor(map); pd->painter()->setName(b); pd->painter()->drawCylinder( v1, v3, radius(atom1) ); map->setFromPrimitive(atom2); pd->painter()->setColor(map); pd->painter()->setName(b); pd->painter()->drawCylinder( v3, v2, radius(atom1) ); return true; } double StickEngine::radius(const PainterDevice *pd, const Primitive *p) const { // Atom radius if (p->type() == Primitive::AtomType) { if (pd) { if (pd->isSelected(p)) return radius(static_cast(p)) + SEL_ATOM_EXTRA_RADIUS; } return radius(static_cast(p)); } // Bond radius else if (p->type() == Primitive::BondType) { const Atom* a = pd->molecule()->atomById(static_cast(p)->beginAtomId()); if (pd) { if (pd->isSelected(p)) return radius(a) + SEL_BOND_EXTRA_RADIUS; } return radius(a); } // Something else else return 0.; } Engine::Layers StickEngine::layers() const { return Engine::Opaque | Engine::Transparent; } // **** Settings Widget *** void StickEngine::setRadius(int value) { m_radius = value / SCALING_FACTOR; emit changed(); } QWidget* StickEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new StickSettingsWidget(); connect(m_settingsWidget->radiusSlider, SIGNAL(valueChanged(int)), this, SLOT(setRadius(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); m_settingsWidget->radiusSlider->setValue(SCALING_FACTOR*m_radius); } return m_settingsWidget; } void StickEngine::settingsWidgetDestroyed() { m_settingsWidget = 0; } void StickEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("radius", SCALING_FACTOR*m_radius); } void StickEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); // default = 0.25 as far as m_radius setRadius(settings.value("radius", 5).toInt()); if (m_settingsWidget) { m_settingsWidget->radiusSlider->setValue(SCALING_FACTOR*m_radius); } } } Q_EXPORT_PLUGIN2(stickengine, Avogadro::StickEngineFactory) avogadro-1.1.1/libavogadro/src/engines/wiresettingswidget.ui0000644000175000001440000000234212250371054023527 0ustar marcususers WireSettingsWidget 0 0 400 233 Show Atoms true true Show Multiple Bonds Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/engines/hbondsettingswidget.ui0000644000175000001440000000535412250371054023661 0ustar marcususers HBondSettingsWidget 0 0 400 233 Width: 1 3 1 2 2 2 Qt::Horizontal false QSlider::TicksBothSides 4 Cut-off radius: A 2.000000000000000 ° 1.000000000000000 180.000000000000000 120.000000000000000 Cut-off angle: Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/engines/surfaceengine.cpp0000644000175000001440000004211412250371054022560 0ustar marcususers/********************************************************************** SurfaceEngine - Engine for display of isosurface meshes Copyright (C) 2008-2009 Marcus D. Hanwell Copyright (C) 2008 Geoffrey R. Hutchison Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "surfaceengine.h" #include "ui_surfacesettingswidget.h" #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; using namespace Eigen; namespace Avogadro { // Our settings widget class class SurfaceSettingsWidget : public QWidget, public Ui::SurfaceSettingsWidget { public: SurfaceSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; SurfaceEngine::SurfaceEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_mesh1(0), m_mesh2(0), m_min(0., 0., 0.), m_max(0.,0.,0.), m_alpha(0.75), m_renderMode(0), m_drawBox(false), m_colored(false) { // default is red for negative, blue for positive m_negColor.setFromRgba(1.0, 0.0, 0.0, m_alpha); m_posColor.setFromRgba(0.0, 0.0, 1.0, m_alpha); } SurfaceEngine::~SurfaceEngine() { } Engine *SurfaceEngine::clone() const { SurfaceEngine *engine = new SurfaceEngine(parent()); engine->setAlias(alias()); engine->setEnabled(isEnabled()); return engine; } bool SurfaceEngine::renderOpaque(PainterDevice *pd) { // Render the opaque surface if m_alpha is 1 if (m_alpha >= 0.999) { if (m_mesh1) { if (m_mesh1->lock()->tryLockForRead()) { if (m_colored) pd->painter()->drawColorMesh(*m_mesh1, m_renderMode); else { pd->painter()->setColor(&m_posColor); pd->painter()->drawMesh(*m_mesh1, m_renderMode); } m_mesh1->lock()->unlock(); } } if (m_mesh2) { if (m_mesh2->lock()->tryLockForRead()) { if (m_colored) pd->painter()->drawColorMesh(*m_mesh2, m_renderMode); else { pd->painter()->setColor(&m_negColor); pd->painter()->drawMesh(*m_mesh2, m_renderMode); } m_mesh2->lock()->unlock(); } } } if (m_drawBox) renderBox(pd); return true; } bool SurfaceEngine::renderTransparent(PainterDevice *pd) { // Render the transparent surface if m_alpha is between 0 and 1. if (m_alpha > 0.001 && m_alpha < 0.999) { if (m_mesh1) { if (m_mesh1->lock()->tryLockForRead()) { if (m_colored) { pd->painter()->setColor(&m_posColor); // For transparency pd->painter()->drawColorMesh(*m_mesh1, m_renderMode); } else { pd->painter()->setColor(&m_posColor); pd->painter()->drawMesh(*m_mesh1, m_renderMode); } m_mesh1->lock()->unlock(); } } if (m_mesh2) { if (m_mesh2->lock()->tryLockForRead()) { if (m_colored) { pd->painter()->setColor(&m_negColor); // For transparency pd->painter()->drawColorMesh(*m_mesh2, m_renderMode); } else { pd->painter()->setColor(&m_negColor); pd->painter()->drawMesh(*m_mesh2, m_renderMode); } m_mesh2->lock()->unlock(); } } } return true; } bool SurfaceEngine::renderQuick(PainterDevice *pd) { int renderMode = 1; if (m_renderMode == 2) renderMode = 2; if (m_mesh1) { if (m_mesh1->lock()->tryLockForRead()) { pd->painter()->setColor(&m_posColor); pd->painter()->drawMesh(*m_mesh1, renderMode); m_mesh1->lock()->unlock(); } } if (m_mesh2) { if (m_mesh2->lock()->tryLockForRead()) { pd->painter()->setColor(&m_negColor); pd->painter()->drawMesh(*m_mesh2, renderMode); m_mesh2->lock()->unlock(); } } if (m_drawBox) renderBox(pd); return true; } inline bool SurfaceEngine::renderBox(PainterDevice *pd) { // Draw the extents of the cube if requested to pd->painter()->setColor(1.0, 1.0, 1.0); pd->painter()->drawLine(Vector3d(m_min.x(), m_min.y(), m_min.z()), Vector3d(m_max.x(), m_min.y(), m_min.z()), 1.0); pd->painter()->drawLine(Vector3d(m_min.x(), m_min.y(), m_min.z()), Vector3d(m_max.x(), m_min.y(), m_min.z()), 1.0); pd->painter()->drawLine(Vector3d(m_min.x(), m_min.y(), m_min.z()), Vector3d(m_min.x(), m_max.y(), m_min.z()), 1.0); pd->painter()->drawLine(Vector3d(m_min.x(), m_min.y(), m_min.z()), Vector3d(m_min.x(), m_min.y(), m_max.z()), 1.0); pd->painter()->drawLine(Vector3d(m_max.x(), m_min.y(), m_min.z()), Vector3d(m_max.x(), m_max.y(), m_min.z()), 1.0); pd->painter()->drawLine(Vector3d(m_max.x(), m_min.y(), m_min.z()), Vector3d(m_max.x(), m_min.y(), m_max.z()), 1.0); pd->painter()->drawLine(Vector3d(m_min.x(), m_max.y(), m_min.z()), Vector3d(m_max.x(), m_max.y(), m_min.z()), 1.0); pd->painter()->drawLine(Vector3d(m_min.x(), m_max.y(), m_min.z()), Vector3d(m_min.x(), m_max.y(), m_max.z()), 1.0); pd->painter()->drawLine(Vector3d(m_min.x(), m_min.y(), m_max.z()), Vector3d(m_min.x(), m_max.y(), m_max.z()), 1.0); pd->painter()->drawLine(Vector3d(m_min.x(), m_min.y(), m_max.z()), Vector3d(m_max.x(), m_min.y(), m_max.z()), 1.0); pd->painter()->drawLine(Vector3d(m_max.x(), m_max.y(), m_max.z()), Vector3d(m_max.x(), m_max.y(), m_min.z()), 1.0); pd->painter()->drawLine(Vector3d(m_max.x(), m_max.y(), m_max.z()), Vector3d(m_max.x(), m_min.y(), m_max.z()), 1.0); pd->painter()->drawLine(Vector3d(m_max.x(), m_max.y(), m_max.z()), Vector3d(m_min.x(), m_max.y(), m_max.z()), 1.0); return true; } void SurfaceEngine::updateOrbitalCombo() { if (!m_settingsWidget || !m_molecule) return; if (!m_molecule->numMeshes()) return; // Reset the orbital combo int index = m_settingsWidget->orbital1Combo->currentIndex(); if (index < 0) index = 0; m_settingsWidget->orbital1Combo->clear(); // Build up a new list mapping combo box indices to meshes m_meshes.clear(); foreach(Mesh *mesh, m_molecule->meshes()) { if (!mesh->lock()->tryLockForRead()) { qDebug() << "Cannot get a read lock on the mesh..."; continue; } // Update the index if we have hit the currently selected Mesh if (m_mesh1 && m_mesh1->id() == mesh->id()) index = m_settingsWidget->orbital1Combo->count(); // Now figure out the mesh type and add it to the map Cube::Type cubeType = m_molecule->cubeById(mesh->cube())->cubeType(); QString comboText; if (cubeType == Cube::VdW) { comboText = tr("Van der Waals, isosurface = %L1", "Van der Waals isosurface with a cutoff of %1"); m_settingsWidget->orbital1Combo->addItem(comboText.arg(mesh->isoValue())); m_meshes.push_back(mesh->id()); } else if (cubeType == Cube::ElectronDensity) { comboText = tr("Electron density, isosurface = %L1", "Electron density isosurface with a cutoff of %1"); m_settingsWidget->orbital1Combo->addItem(comboText.arg(mesh->isoValue())); m_meshes.push_back(mesh->id()); } else if (cubeType == Cube::MO) { if (mesh->isoValue() > 0.0) { comboText = tr("%1, isosurface = %L2", "%1 is mesh name, %2 is the isosurface cutoff"); m_settingsWidget->orbital1Combo->addItem(comboText .arg(mesh->name()) .arg(mesh->isoValue())); m_meshes.push_back(mesh->id()); } } mesh->lock()->unlock(); } m_settingsWidget->orbital1Combo->setCurrentIndex(index); } double SurfaceEngine::transparencyDepth() const { return 1.0; } Engine::Layers SurfaceEngine::layers() const { return Engine::Transparent; } Engine::PrimitiveTypes SurfaceEngine::primitiveTypes() const { return Engine::Surfaces; // i.e., don't display the "primitives tab" } Engine::ColorTypes SurfaceEngine::colorTypes() const { return Engine::IndexedColors; } void SurfaceEngine::setOrbital(int n) { if (m_meshes.size() && n >= 0 && n < m_meshes.size()) { m_mesh1 = m_molecule->meshById(m_meshes.at(n)); m_mesh2 = m_molecule->meshById(m_mesh1->otherMesh()); Cube *cube = m_molecule->cubeById(m_mesh1->cube()); m_min = cube->min(); m_max = cube->max(); if (m_mesh1->colors().size() == 0) m_colored = false; // Enable the combo if appropriate for mapped color if (m_settingsWidget) { m_settingsWidget->colorCombo->setEnabled(m_mesh1->vertices().size() == m_mesh1->colors().size()); m_settingsWidget->colorCombo->setCurrentIndex(m_colored ? 1 : 0); } emit changed(); } } void SurfaceEngine::setOpacity(int value) { m_alpha = 0.05 * value; m_posColor.setAlpha(m_alpha); m_negColor.setAlpha(m_alpha); emit changed(); } void SurfaceEngine::setRenderMode(int value) { m_renderMode = value; emit changed(); } void SurfaceEngine::setDrawBox(int value) { if (value == 0) m_drawBox = false; else m_drawBox = true; emit changed(); } void SurfaceEngine::setColorMode(int value) { m_colored = static_cast(value); emit changed(); } void SurfaceEngine::setPosColor(const QColor& color) { m_posColor.setFromRgba(color.redF(), color.greenF(), color.blueF(), m_alpha); emit changed(); } void SurfaceEngine::setNegColor(const QColor& color) { m_negColor.setFromRgba(color.redF(), color.greenF(), color.blueF(), m_alpha); emit changed(); } QWidget* SurfaceEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new SurfaceSettingsWidget(qobject_cast(parent())); connect(m_settingsWidget->orbital1Combo, SIGNAL(currentIndexChanged(int)), this, SLOT(setOrbital(int))); connect(m_settingsWidget->opacitySlider, SIGNAL(valueChanged(int)), this, SLOT(setOpacity(int))); connect(m_settingsWidget->renderCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setRenderMode(int))); connect(m_settingsWidget->drawBoxCheck, SIGNAL(stateChanged(int)), this, SLOT(setDrawBox(int))); connect(m_settingsWidget->colorCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setColorMode(int))); connect(m_settingsWidget->posColor, SIGNAL(colorChanged(QColor)), this, SLOT(setPosColor(QColor))); connect(m_settingsWidget->negColor, SIGNAL(colorChanged(QColor)), this, SLOT(setNegColor(QColor))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); // Initialise the widget from saved settings m_settingsWidget->opacitySlider->setValue(static_cast(m_alpha * 20)); m_settingsWidget->renderCombo->setCurrentIndex(m_renderMode); m_settingsWidget->drawBoxCheck->setChecked(m_drawBox); m_settingsWidget->colorCombo->setCurrentIndex(m_colored ? 1 : 0); // Initialise the colour buttons QColor initial; initial.setRgbF(m_posColor.red(), m_posColor.green(), m_posColor.blue()); m_settingsWidget->posColor->setColor(initial); initial.setRgbF(m_negColor.red(), m_negColor.green(), m_negColor.blue()); m_settingsWidget->negColor->setColor(initial); updateOrbitalCombo(); // Connect the molecule updated signal if (m_molecule) connect(m_molecule, SIGNAL(updated()), this, SLOT(updateOrbitalCombo())); } return m_settingsWidget; } void SurfaceEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } void SurfaceEngine::setPrimitives(const PrimitiveList &primitives) { Engine::setPrimitives(primitives); // This is used to load new molecules and so there could be a new cube file updateOrbitalCombo(); } void SurfaceEngine::addPrimitive(Primitive *primitive) { // Rebuild the combo if a new mesh was added if (primitive->type() == Primitive::MeshType) updateOrbitalCombo(); } void SurfaceEngine::updatePrimitive(Primitive *primitive) { // Updating primitives does not invalidate these surfaces... if (primitive->type() == Primitive::MeshType) updateOrbitalCombo(); } void SurfaceEngine::removePrimitive(Primitive *primitive) { if (primitive->type() == Primitive::MeshType) updateOrbitalCombo(); } void SurfaceEngine::setMolecule(const Molecule *molecule) { Engine::setMolecule(molecule); if (m_molecule) { connect(m_molecule, SIGNAL(primitiveAdded(Primitive*)), this, SLOT(addPrimitive(Primitive*))); connect(m_molecule, SIGNAL(primitiveUpdated(Primitive*)), this, SLOT(updatePrimitive(Primitive*))); connect(m_molecule, SIGNAL(primitiveRemoved(Primitive*)), this, SLOT(removePrimitive(Primitive*))); } updateOrbitalCombo(); } void SurfaceEngine::setMolecule(Molecule *molecule) { Engine::setMolecule(molecule); if (m_molecule) { connect(m_molecule, SIGNAL(primitiveAdded(Primitive*)), this, SLOT(addPrimitive(Primitive*))); connect(m_molecule, SIGNAL(primitiveUpdated(Primitive*)), this, SLOT(updatePrimitive(Primitive*))); connect(m_molecule, SIGNAL(primitiveRemoved(Primitive*)), this, SLOT(removePrimitive(Primitive*))); } updateOrbitalCombo(); } void SurfaceEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("alpha", m_alpha); settings.setValue("renderMode", m_renderMode); settings.setValue("drawBox", m_drawBox); settings.setValue("colorMode", m_colored); if (m_mesh1) settings.setValue("mesh1Id", static_cast(m_mesh1->id())); if (m_mesh2) settings.setValue("mesh2Id", static_cast(m_mesh2->id())); settings.setValue("posColor/r", m_posColor.red()); settings.setValue("posColor/g", m_posColor.green()); settings.setValue("posColor/b", m_posColor.blue()); settings.setValue("negColor/r", m_negColor.red()); settings.setValue("negColor/g", m_negColor.green()); settings.setValue("negColor/b", m_negColor.blue()); } void SurfaceEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); m_alpha = settings.value("alpha", 0.5).toDouble(); // Default: Positive = blue m_posColor.setFromRgba(settings.value("posColor/r", 0.0).toDouble(), settings.value("posColor/g", 0.0).toDouble(), settings.value("posColor/b", 1.0).toDouble(), m_alpha); // Default: Negative = red m_negColor.setFromRgba(settings.value("negColor/r", 1.0).toDouble(), settings.value("negColor/g", 0.0).toDouble(), settings.value("negColor/b", 0.0).toDouble(), m_alpha); m_renderMode = settings.value("renderMode", 0).toInt(); m_colored = settings.value("colorMode", false).toBool(); m_drawBox = settings.value("drawBox", false).toBool(); if (m_molecule) { m_mesh1 = m_molecule->meshById(settings.value("mesh1Id", qulonglong(FALSE_ID)).toInt()); m_mesh2 = m_molecule->meshById(settings.value("mesh2Id", qulonglong(FALSE_ID)).toInt()); if (m_mesh1) { Cube *cube = m_molecule->cubeById(m_mesh1->cube()); m_min = cube->min(); m_max = cube->max(); if (m_mesh1->colors().size() == 0) m_colored = false; } } } } Q_EXPORT_PLUGIN2(surfaceengine, Avogadro::SurfaceEngineFactory) avogadro-1.1.1/libavogadro/src/engines/wireengine.cpp0000644000175000001440000002145112250371054022077 0ustar marcususers/********************************************************************** WireEngine - Engine for wireframe display Copyright (C) 2006-2007 Geoffrey R. Hutchison Copyright (C) 2006-2007 Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "wireengine.h" #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace Eigen; namespace Avogadro { WireEngine::WireEngine(QObject *parent) : Engine(parent), m_settingsWidget(NULL), m_showMulti(0), m_showDots(2) { } Engine* WireEngine::clone() const { WireEngine* engine = new WireEngine(parent()); engine->setAlias(alias()); engine->setShowDots(m_showDots); engine->setShowMultipleBonds(m_showMulti); engine->setEnabled(isEnabled()); return engine; } bool WireEngine::renderOpaque(PainterDevice *pd) { glDisable(GL_LIGHTING); // Skip this entire step if the user turns it off if (m_showDots) { foreach(Atom *a, atoms()) renderOpaque(pd, a); } foreach(Bond *b, bonds()) renderOpaque(pd, b); glEnable(GL_LIGHTING); return true; } bool WireEngine::renderPick(PainterDevice *pd) { // We need the 3D to pop the atoms out from the bonds, so this is perhaps // the simplest way to have picking for both atoms and bonds in wireframe. // The numbers are quite arbitrary right now - seem to feel about right // for small molecules. foreach(Bond *b, bonds()) { pd->painter()->setName(b); pd->painter()->drawCylinder(*b->beginPos(), *b->endPos(), 0.04); } // Render the atoms foreach(Atom *a, atoms()) { pd->painter()->setName(a); // add a slight "slop" factor to make it easier to pick // (e.g., during drawing) // heavy atoms get a bit more, hydrogens get a bit less if (a->isHydrogen()) pd->painter()->drawSphere(a->pos(), 0.05); else pd->painter()->drawSphere(a->pos(), 0.15); } return true; } bool WireEngine::renderOpaque(PainterDevice *pd, const Atom *a) { const Vector3d & v = *a->pos(); const Camera *camera = pd->camera(); // perform a rough form of frustum culling Eigen::Vector3d transformedPos = pd->camera()->modelview() * v; double dot = transformedPos.z() / transformedPos.norm(); if(dot > -0.8) return true; Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map // Compute a rough "dynamic" size for the atom dots // We could probably have a better gradient here, but it looks decent double size = 3.0; // default size; if (camera->distance(v) < 5.0) size = 7.0; else if (camera->distance(v) > 5.0 && camera->distance(v) < 10.0) size = 4.0; else if (camera->distance(v) > 30.0 && camera->distance(v) < 60.0) size = 2.0; else if (camera->distance(v) > 60.0 && camera->distance(v) < 85.0) size = 1.5; else if (camera->distance(v) > 85.0) size = 1.0; // All dots are scaled by the VDW radius -- subtle, but effective if (pd->isSelected(a)) { map->setToSelectionColor(); map->apply(); glPointSize(OpenBabel::etab.GetVdwRad(a->atomicNumber()) * (size + 1.0)); } else { map->setFromPrimitive(a); map->apply(); glPointSize(OpenBabel::etab.GetVdwRad(a->atomicNumber()) * size); } glBegin(GL_POINTS); glVertex3d(v.x(), v.y(), v.z()); glEnd(); return true; } inline double WireEngine::radius (const Atom *atom) const { return OpenBabel::etab.GetVdwRad(atom->atomicNumber()); } bool WireEngine::renderOpaque(PainterDevice *pd, const Bond *b) { const Atom* atom1 = pd->molecule()->atomById(b->beginAtomId()); const Vector3d & v1 = *atom1->pos(); const Camera *camera = pd->camera(); Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map // perform a rough form of frustum culling Eigen::Vector3d transformedEnd1 = pd->camera()->modelview() * v1; double dot = transformedEnd1.z() / transformedEnd1.norm(); if(dot > -0.8) return true; // i.e., don't bother rendering const Atom* atom2 = pd->molecule()->atomById(b->endAtomId()); const Vector3d & v2 = *atom2->pos(); Vector3d d = v2 - v1; d.normalize(); Vector3d v3; if (atom1->atomicNumber() != atom2->atomicNumber()) { // compute the "transition point" between the two atoms v3 = ( v1 + v2 + d*( radius( atom1 )-radius( atom2 ) ) ) / 2.0; } // Compute the width to draw the wireframe bonds double width = 1.0; double averageDistance = (camera->distance(v1) + camera->distance(v2)) / 2.0; if (averageDistance < 20.0 && averageDistance > 10.0) width = 1.5; else if (averageDistance < 10.0 && averageDistance > 5.0) width = 2.0; else if (averageDistance < 5.0) width = 2.5; // Default to single bond, no stipple short stipple = static_cast(0xFFFF); int order = 1; if (m_showMulti) { order = b->order(); if (order > 1) width *= order * 0.75; // make multiple bonds a litte thicker too // For aromatic (dashed bonds) if (b->isAromatic()) { order = -1; stipple = static_cast(0xCCCC); } } map->setFromPrimitive(atom1); pd->painter()->setColor(map); // if have two of the same atoms, just draw one line if (atom1->atomicNumber() == atom2->atomicNumber()) { if (order != 1) pd->painter()->drawMultiLine(v1, v2, width, order, stipple); else pd->painter()->drawLine(v1, v2, width); return true; } // otherwise, we draw a line to the "transition point", change color, etc. if (order != 1) pd->painter()->drawMultiLine(v1, v3, width, order, stipple); else pd->painter()->drawLine(v1, v3, width); map->setFromPrimitive(atom2); pd->painter()->setColor(map); if (order != 1) pd->painter()->drawMultiLine(v3, v2, width, order, stipple); else pd->painter()->drawLine(v3, v2, width); return true; } void WireEngine::setShowMultipleBonds(int setting) { m_showMulti = setting; emit changed(); } void WireEngine::setShowDots(int setting) { m_showDots = setting; emit changed(); } QWidget* WireEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new WireSettingsWidget(); connect(m_settingsWidget->showMultipleCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setShowMultipleBonds(int))); connect(m_settingsWidget->showDotsCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setShowDots(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); m_settingsWidget->showDotsCheckBox->setCheckState((Qt::CheckState)m_showDots); m_settingsWidget->showMultipleCheckBox->setCheckState((Qt::CheckState)m_showMulti); } return m_settingsWidget; } void WireEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } void WireEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("showDots", m_showDots); settings.setValue("showMulti", m_showMulti); } void WireEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); setShowDots(settings.value("showDots", 2).toInt()); setShowMultipleBonds(settings.value("showMulti", 1).toInt()); if (m_settingsWidget) { m_settingsWidget->showDotsCheckBox->setCheckState((Qt::CheckState)m_showDots); m_settingsWidget->showMultipleCheckBox->setCheckState((Qt::CheckState)m_showMulti); } } } Q_EXPORT_PLUGIN2(wireengine, Avogadro::WireEngineFactory) avogadro-1.1.1/libavogadro/src/engines/simplewireengine.h0000644000175000001440000000370712250371054022762 0ustar marcususers/********************************************************************** WireEngine - Simple engine for fast wire frame display Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SIMPLEWIREENGINE_H #define SIMPLEWIREENGINE_H #include #include namespace Avogadro { //! SimpleWireframe Engine class. class SimpleWireEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Simple Wireframe", tr("Simple Wireframe"), tr("Renders bonds as wires (lines), ideal for large molecules")) public: //! Constructor SimpleWireEngine(QObject *parent=0); //! Destructor ~SimpleWireEngine(); //! Copy Engine *clone() const; //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); //@} }; //! Generates instances of our WireEngine class class SimpleWireEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(SimpleWireEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/axesengine.h0000644000175000001440000000656312250371054021545 0ustar marcususers/********************************************************************** AxesEngine - Engine to display the x, y, z axes Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef AXESENGINE_H #define AXESENGINE_H #include #include #include "ui_axessettingswidget.h" namespace Avogadro { //! Settings class class AxesSettingsWidget; //! Axes Engine class. class AxesEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Axes", tr("Axes"), tr("Renders the x, y, and z axes at the origin")) public: //! Constructor AxesEngine(QObject *parent=0); //! Deconstructor ~AxesEngine(); //! Copy Engine *clone() const; //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); //@} double transparencyDepth() const; Layers layers() const; PrimitiveTypes primitiveTypes() const; ColorTypes colorTypes() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; //! Display a window for the user to pick axes' options QWidget *settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: AxesSettingsWidget* m_settingsWidget; int m_axesType; bool m_preserveNorms; Eigen::Vector3d m_origin; Eigen::Vector3d m_axis1; Eigen::Vector3d m_axis2; Eigen::Vector3d m_axis3; private Q_SLOTS: void setAxesType(int value); void settingsWidgetDestroyed(); void updateAxes(double = 0.0); void updateVectors(); void updateOrigin(double = 0.0); void updateValues1(double = 0.0); void updateValues2(double = 0.0); void updateValues3(double = 0.0); void preserveNormsChanged(int value); }; class AxesSettingsWidget : public QWidget, public Ui::AxesSettingsWidget { public: AxesSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our AxesEngine class class AxesEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(AxesEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/bsdysettingswidget.ui0000644000175000001440000001175312250371054023530 0ustar marcususers BSDYSettingsWidget 0 0 263 285 Atom Radius: 5 65 10 25 Qt::Horizontal QSlider::TicksBothSides Bond Radius: 2 12 1 4 Qt::Horizontal QSlider::TicksBothSides 2 Opacity: 0 20 1 2 20 20 Qt::Horizontal false QSlider::TicksBothSides 4 0 0 0 0 1 Covalent Van der Waals Qt::Horizontal Qt::Horizontal Show Multiple Bonds true Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/engines/sphereengine.cpp0000644000175000001440000001542712250371054022425 0ustar marcususers/********************************************************************** SphereEngine - Engine for "spheres" display Copyright (C) 2007-2008 Marcus D. Hanwell Copyright (C) 2006-2007 Geoffrey R. Hutchison Copyright (C) 2007 Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "sphereengine.h" #include #include #include #include #include #include #include #include #include using namespace Eigen; namespace Avogadro { SphereEngine::SphereEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_alpha(1.0) { } SphereEngine::~SphereEngine() { // Delete the settings widget if it exists if(m_settingsWidget) m_settingsWidget->deleteLater(); } Engine* SphereEngine::clone() const { SphereEngine* engine = new SphereEngine(parent()); engine->setAlias(alias()); engine->m_alpha = m_alpha; engine->setEnabled(isEnabled()); return engine; } bool SphereEngine::renderOpaque(PainterDevice *pd) { // Render the opaque spheres if m_alpha is 1 if (m_alpha >= 0.999) { // Render the atoms as VdW spheres glDisable(GL_NORMALIZE); glEnable(GL_RESCALE_NORMAL); foreach(Atom *a, atoms()) render(pd, a); glDisable(GL_RESCALE_NORMAL); glEnable(GL_NORMALIZE); } return true; } bool SphereEngine::renderTransparent(PainterDevice *pd) { // If m_alpha is between 0 and 1 then render our transparent spheres if (m_alpha > 0.001 && m_alpha < 0.999) { // First pass using a colour mask - nothing is actually drawn glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glDisable(GL_LIGHTING); glDisable(GL_BLEND); // This is a little hackish but I am not sure there is a better way, // OpenGL requires this to cull the internal surfaces but it breaks POV-Ray // renders. So I set the color to black and totally transparent, render // with a slightly smaller radius than the actual VdW spheres. Works but // not pretty... pd->painter()->setColor(0.0, 0.0, 0.0, 1.0); foreach(Atom *a, atoms()) { pd->painter()->drawSphere(a->pos(), radius(a)*0.9999); } glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glEnable(GL_BLEND); glEnable(GL_LIGHTING); // Render the atoms as VdW spheres glDisable(GL_NORMALIZE); glEnable(GL_RESCALE_NORMAL); foreach(Atom *a, atoms()) render(pd, a); glDisable(GL_RESCALE_NORMAL); glEnable(GL_NORMALIZE); } // Render the selection sphere if required Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map foreach(Atom *a, atoms()) { if (pd->isSelected(a)) { map->setToSelectionColor(); pd->painter()->setColor(map); pd->painter()->setName(a); pd->painter()->drawSphere(a->pos(), SEL_ATOM_EXTRA_RADIUS + radius(a)); } } return true; } bool SphereEngine::renderQuick(PainterDevice *pd) { // Render the atoms as VdW spheres glDisable(GL_NORMALIZE); glEnable(GL_RESCALE_NORMAL); Color *map = colorMap(); if (!map) map = pd->colorMap(); foreach(Atom *a, atoms()) { map->setFromPrimitive(a); pd->painter()->setColor(map); pd->painter()->setName(a); pd->painter()->drawSphere(a->pos(), radius(a)); } glDisable(GL_RESCALE_NORMAL); glEnable(GL_NORMALIZE); return true; } bool SphereEngine::render(PainterDevice *pd, const Atom *a) { // Render the atoms as Van der Waals spheres Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map map->setFromPrimitive(a); map->setAlpha(m_alpha); pd->painter()->setColor(map); pd->painter()->setName(a); pd->painter()->drawSphere(a->pos(), radius(a)); return true; } inline double SphereEngine::radius(const Atom *a) const { return OpenBabel::etab.GetVdwRad(a->atomicNumber()); } double SphereEngine::radius(const PainterDevice *pd, const Primitive *p) const { // Atom radius if (p->type() == Primitive::AtomType) { if(primitives().contains(p)) { if (pd && pd->isSelected(p)) { return radius(static_cast(p)) + SEL_ATOM_EXTRA_RADIUS; } return radius(static_cast(p)); } } // Something else return 0.; } double SphereEngine::transparencyDepth() const { return 1.0; } Engine::Layers SphereEngine::layers() const { return Engine::Opaque | Engine::Transparent; } Engine::PrimitiveTypes SphereEngine::primitiveTypes() const { return Engine::Atoms; } void SphereEngine::setOpacity(int value) { m_alpha = 0.05 * value; emit changed(); } QWidget* SphereEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new SphereSettingsWidget(); connect(m_settingsWidget->opacitySlider, SIGNAL(valueChanged(int)), this, SLOT(setOpacity(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); m_settingsWidget->opacitySlider->setValue(20*m_alpha); } return m_settingsWidget; } void SphereEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } void SphereEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("opacity", 20*m_alpha); } void SphereEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); setOpacity(settings.value("opacity", 20).toInt()); if (m_settingsWidget) { m_settingsWidget->opacitySlider->setValue(20*m_alpha); } } } Q_EXPORT_PLUGIN2(sphereengine, Avogadro::SphereEngineFactory) avogadro-1.1.1/libavogadro/src/engines/axesengine.cpp0000644000175000001440000003637712250371054022106 0ustar marcususers/********************************************************************** AxesEngine - Engine to display the x, y, z axes Copyright (C) 2008 Marcus D. Hanwell Copyright (C) 2009 Konstantin L. Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "axesengine.h" #include #include #include #include #include #include #include using namespace std; using namespace Eigen; namespace Avogadro { AxesEngine::AxesEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_axesType(0), m_preserveNorms(false), m_origin(0,0,0), m_axis1(1,0,0), m_axis2(0,1,0), m_axis3(0,0,1) { } AxesEngine::~AxesEngine() { } Engine* AxesEngine::clone() const { AxesEngine* engine = new AxesEngine(parent()); engine->setAlias(alias()); engine->setEnabled(isEnabled()); return engine; } bool AxesEngine::renderOpaque(PainterDevice *pd) { // Right now just draw x, y, z axes one unit long. Will add more options. Vector3d aXa = m_origin+m_axis1*0.85; Vector3d aX = m_origin+m_axis1; Vector3d aYa = m_origin+m_axis2*0.85; Vector3d aY = m_origin+m_axis2; Vector3d aZa = m_origin+m_axis3*0.85; Vector3d aZ = m_origin+m_axis3; // 1 axis pd->painter()->setColor(1.0, 0.0, 0.0); pd->painter()->drawCylinder(m_origin, aXa, 0.05); pd->painter()->drawCone(aXa, aX, 0.1); // 2 axis pd->painter()->setColor(0.0, 1.0, 0.0); pd->painter()->drawCylinder(m_origin, aYa, 0.05); pd->painter()->drawCone(aYa, aY, 0.1); // 3 axis pd->painter()->setColor(0.0, 0.0, 1.0); pd->painter()->drawCylinder(m_origin, aZa, 0.05); pd->painter()->drawCone(aZa, aZ, 0.1); return true; } double AxesEngine::radius(const PainterDevice *, const Primitive *) const { return 0.; } double AxesEngine::transparencyDepth() const { return 1.0; } Engine::Layers AxesEngine::layers() const { return Engine::Overlay; } Engine::PrimitiveTypes AxesEngine::primitiveTypes() const { return Engine::NoPrimitives; } Engine::ColorTypes AxesEngine::colorTypes() const { return Engine::NoColors; } QWidget *AxesEngine::settingsWidget() { if(!m_settingsWidget) { /* * Complex system of connects is used: * - Vector norms are updated when user changes X,Y,Z * - Coordinates are scaled when user changes norm * - To prevent signal hell, disconnects are used inside code * */ m_settingsWidget = new AxesSettingsWidget(); connect(m_settingsWidget->axesType, SIGNAL(currentIndexChanged(int)), this, SLOT(setAxesType(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); connect(m_settingsWidget->x1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->y1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->z1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->x2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->y2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->z2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->x3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->y3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->z3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->xOriginSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateOrigin(double))); connect(m_settingsWidget->yOriginSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateOrigin(double))); connect(m_settingsWidget->zOriginSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateOrigin(double))); connect(m_settingsWidget->l1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues1(double))); connect(m_settingsWidget->l2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues2(double))); connect(m_settingsWidget->l3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues3(double))); connect(m_settingsWidget->preserveNormsCheckBox, SIGNAL(stateChanged(int)), this, SLOT(preserveNormsChanged(int))); } return m_settingsWidget; } void AxesEngine::setAxesType(int value) { m_axesType = value; updateAxes(); switch (m_axesType) { case 0: m_settingsWidget->x1SpinBox->setEnabled(false); m_settingsWidget->y1SpinBox->setEnabled(false); m_settingsWidget->z1SpinBox->setEnabled(false); m_settingsWidget->x2SpinBox->setEnabled(false); m_settingsWidget->y2SpinBox->setEnabled(false); m_settingsWidget->z2SpinBox->setEnabled(false); m_settingsWidget->x3SpinBox->setEnabled(false); m_settingsWidget->y3SpinBox->setEnabled(false); m_settingsWidget->z3SpinBox->setEnabled(false); break; case 1: m_settingsWidget->x1SpinBox->setEnabled(true); m_settingsWidget->y1SpinBox->setEnabled(true); m_settingsWidget->z1SpinBox->setEnabled(true); m_settingsWidget->x2SpinBox->setEnabled(true); m_settingsWidget->y2SpinBox->setEnabled(true); m_settingsWidget->z2SpinBox->setEnabled(true); m_settingsWidget->x3SpinBox->setEnabled(false); m_settingsWidget->y3SpinBox->setEnabled(false); m_settingsWidget->z3SpinBox->setEnabled(false); break; default: m_settingsWidget->x1SpinBox->setEnabled(true); m_settingsWidget->y1SpinBox->setEnabled(true); m_settingsWidget->z1SpinBox->setEnabled(true); m_settingsWidget->x2SpinBox->setEnabled(true); m_settingsWidget->y2SpinBox->setEnabled(true); m_settingsWidget->z2SpinBox->setEnabled(true); m_settingsWidget->x3SpinBox->setEnabled(true); m_settingsWidget->y3SpinBox->setEnabled(true); m_settingsWidget->z3SpinBox->setEnabled(true); } emit changed(); } void AxesEngine::updateAxes(double) { updateVectors(); if (m_preserveNorms) { if ((m_axis1.norm() == m_settingsWidget->l1SpinBox->value()) && (m_axis2.norm() == m_settingsWidget->l2SpinBox->value()) && (m_axis3.norm() == m_settingsWidget->l3SpinBox->value())) { emit changed(); return; } else { updateValues1(m_settingsWidget->l1SpinBox->value()); updateValues2(m_settingsWidget->l2SpinBox->value()); updateValues3(m_settingsWidget->l3SpinBox->value()); //updateVectors(); } } else { // Recalculate norms disconnect(m_settingsWidget->l1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues1(double))); disconnect(m_settingsWidget->l2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues2(double))); disconnect(m_settingsWidget->l3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues3(double))); m_settingsWidget->l1SpinBox->setValue(m_axis1.norm()); m_settingsWidget->l2SpinBox->setValue(m_axis2.norm()); m_settingsWidget->l3SpinBox->setValue(m_axis3.norm()); connect(m_settingsWidget->l1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues1(double))); connect(m_settingsWidget->l2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues2(double))); connect(m_settingsWidget->l3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateValues3(double))); } emit changed(); } void AxesEngine::updateVectors() { double l=0; switch(m_axesType) { case 0: // cartesian l = m_settingsWidget->x1SpinBox->value(); m_axis1 = Vector3d(l,0,0); m_axis2 = Vector3d(0,l,0); m_axis3 = Vector3d(0,0,l); break; case 1: // orthogonal m_axis1 = Vector3d(m_settingsWidget->x1SpinBox->value(), m_settingsWidget->y1SpinBox->value(), m_settingsWidget->z1SpinBox->value()); m_axis2 = Vector3d(m_settingsWidget->x2SpinBox->value(), m_settingsWidget->y2SpinBox->value(), m_settingsWidget->z2SpinBox->value()); if (fabs(m_axis1.dot(m_axis2)) >= 1e-6) { if (fabs(m_axis1.x()) >=1e-6) { m_axis2[0] = (-m_axis1.y()*m_axis2.y()-m_axis1.z()*m_axis2.z()) / m_axis1.x(); } else if (fabs(m_axis1.y()) >=1e-6) { m_axis2[1] = (-m_axis1.x()*m_axis2.x()-m_axis1.z()*m_axis2.z()) / m_axis1.y(); } else if (fabs(m_axis1.z()) >=1e-6) { l = (-m_axis1.y()*m_axis2.y()-m_axis1.x()*m_axis2.x()) / m_axis1.z(); m_axis2[2] = l; } } updateValues2(m_settingsWidget->l2SpinBox->value()); m_axis3 = m_axis1.cross(m_axis2); updateValues3(m_settingsWidget->l3SpinBox->value()); default: // m_axis1 = Vector3d(m_settingsWidget->x1SpinBox->value(), m_settingsWidget->y1SpinBox->value(), m_settingsWidget->z1SpinBox->value()); m_axis2 = Vector3d(m_settingsWidget->x2SpinBox->value(), m_settingsWidget->y2SpinBox->value(), m_settingsWidget->z2SpinBox->value()); m_axis3 = Vector3d(m_settingsWidget->x3SpinBox->value(), m_settingsWidget->y3SpinBox->value(), m_settingsWidget->z3SpinBox->value()); } } void AxesEngine::updateOrigin(double) { m_origin = Vector3d(m_settingsWidget->xOriginSpinBox->value(), m_settingsWidget->yOriginSpinBox->value(), m_settingsWidget->zOriginSpinBox->value()); emit changed(); } void AxesEngine::updateValues1(double newNorm) { double k; disconnect(m_settingsWidget->x1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); disconnect(m_settingsWidget->y1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); disconnect(m_settingsWidget->z1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); k = newNorm/m_axis1.norm(); m_settingsWidget->x1SpinBox->setValue(m_axis1.x()*k); m_settingsWidget->y1SpinBox->setValue(m_axis1.y()*k); m_settingsWidget->z1SpinBox->setValue(m_axis1.z()*k); m_axis1 = Vector3d(m_axis1.x()*k,m_axis1.y()*k,m_axis1.z()*k); connect(m_settingsWidget->x1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->y1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->z1SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); emit changed(); } void AxesEngine::updateValues2(double newNorm) { double k; disconnect(m_settingsWidget->x2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); disconnect(m_settingsWidget->y2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); disconnect(m_settingsWidget->z2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); k = newNorm/m_axis2.norm(); m_settingsWidget->x2SpinBox->setValue(m_axis2.x()*k); m_settingsWidget->y2SpinBox->setValue(m_axis2.y()*k); m_settingsWidget->z2SpinBox->setValue(m_axis2.z()*k); m_axis2 = Vector3d(m_axis2.x()*k,m_axis2.y()*k,m_axis2.z()*k); connect(m_settingsWidget->x2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->y2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->z2SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); emit changed(); } void AxesEngine::updateValues3(double newNorm) { double k; disconnect(m_settingsWidget->x3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); disconnect(m_settingsWidget->y3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); disconnect(m_settingsWidget->z3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); k = newNorm/m_axis3.norm(); m_settingsWidget->x3SpinBox->setValue(m_axis3.x()*k); m_settingsWidget->y3SpinBox->setValue(m_axis3.y()*k); m_settingsWidget->z3SpinBox->setValue(m_axis3.z()*k); m_axis3 = Vector3d(m_axis3.x()*k,m_axis3.y()*k,m_axis3.z()*k); connect(m_settingsWidget->x3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->y3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); connect(m_settingsWidget->z3SpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateAxes(double))); emit changed(); } void AxesEngine::preserveNormsChanged(int value) { if (value == Qt::Checked) { m_settingsWidget->l1SpinBox->setEnabled(false); m_settingsWidget->l2SpinBox->setEnabled(false); m_settingsWidget->l3SpinBox->setEnabled(false); m_preserveNorms = true; } else { m_settingsWidget->l1SpinBox->setEnabled(true); m_settingsWidget->l2SpinBox->setEnabled(true); m_settingsWidget->l3SpinBox->setEnabled(true); m_preserveNorms = false; } } void AxesEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } void AxesEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); //settings.setValue("atomLabel", m_atomType); //settings.setValue("bondLabel", m_bondType); } void AxesEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); //setAtomType(settings.value("atomLabel", 1).toInt()); //setBondType(settings.value("bondLabel", 0).toInt()); if(m_settingsWidget) { //m_settingsWidget->atomType->setCurrentIndex(m_atomType); //m_settingsWidget->bondType->setCurrentIndex(m_bondType); } } } Q_EXPORT_PLUGIN2(axesengine, Avogadro::AxesEngineFactory) avogadro-1.1.1/libavogadro/src/engines/sticksettingswidget.ui0000644000175000001440000000325512250371054023702 0ustar marcususers StickSettingsWidget 0 0 400 233 Radius: 2 10 1 1 5 5 Qt::Horizontal false QSlider::TicksBothSides 0 Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/engines/stickengine.h0000644000175000001440000000651612250371054021720 0ustar marcususers/********************************************************************** StickEngine - Engine for "stick" display Copyright (C) 2006-2007 Geoffrey R. Hutchison Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef STICKENGINE_H #define STICKENGINE_H #include #include #include "ui_sticksettingswidget.h" namespace Avogadro { //! Stick / Licorice Engine class. class Atom; class Bond; class StickSettingsWidget; class StickEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Stick", tr("Stick"), tr("Renders molecules as sticks")) public: //! Constructor StickEngine(QObject *parent=0); //! Deconstructor ~StickEngine(); //! Copy Engine *clone() const; //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); bool renderTransparent(PainterDevice *pd); bool renderPick(PainterDevice *pd); // make the atoms larger //@} double radius(const PainterDevice *pd, const Primitive *p = 0) const; Engine::Layers layers() const; QWidget* settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: inline double radius(const Atom *) const { return m_radius; } //! Render an Atom. bool renderOpaque(PainterDevice *pd, const Atom *a); bool renderPick(PainterDevice *pd, const Atom *a); //! Render a Bond. bool renderOpaque(PainterDevice *pd, const Bond *b); StickSettingsWidget *m_settingsWidget; double m_radius; //!< The radius of the stick bonds private Q_SLOTS: void settingsWidgetDestroyed(); /** * @param value radius of the sticks / 20 */ void setRadius(int value); }; class StickSettingsWidget : public QWidget, public Ui::StickSettingsWidget { public: StickSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our StickEngine class class StickEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(StickEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/qtaimsettingswidget.ui0000644000175000001440000001141012250371054023670 0ustar marcususers QTAIMSettingsWidget 0 0 307 285 Critical Point Radius: 5 65 10 25 Qt::Horizontal QSlider::TicksBothSides Bond Path Radius: 1 6 1 2 Qt::Horizontal QSlider::TicksBothSides 2 0 20 1 2 20 20 Qt::Horizontal false QSlider::TicksBothSides 4 0 0 0 0 0 Covalent Constant Size Qt::Horizontal Qt::Horizontal Opacity: Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/engines/cartoonengine.cpp0000644000175000001440000002724212250371054022602 0ustar marcususers/********************************************************************** CartoonEngine - Engine for protein structures. Copyright (C) 2009 Tim Vandermeersch Some portions Copyright (C) 2007-2008 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "cartoonengine.h" #include "cartoonmeshgenerator.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using Eigen::Vector3d; namespace Avogadro { CartoonEngine::CartoonEngine(QObject *parent) : Engine(parent), m_mesh(0), m_settingsWidget(0) { // Initialise variables m_update = true; m_helixColor = Qt::red; m_sheetColor = Qt::yellow; m_loopColor = Qt::green; m_aHelix = 1.0; m_bHelix = 0.3; m_cHelix = 1.0; m_aSheet = 1.0; m_bSheet = 0.3; m_cSheet = 1.0; m_aLoop = 0.2; m_bLoop = 0.2; m_cLoop = 0.0; } Engine *CartoonEngine::clone() const { CartoonEngine *engine = new CartoonEngine(parent()); engine->setAlias(alias()); engine->m_aHelix = m_aHelix; engine->m_bHelix = m_bHelix; engine->m_cHelix = m_cHelix; engine->m_aSheet = m_aSheet; engine->m_bSheet = m_bSheet; engine->m_cSheet = m_cSheet; engine->m_aLoop = m_aLoop; engine->m_bLoop = m_bLoop; engine->m_cLoop = m_cLoop; engine->m_helixColor = m_helixColor; engine->m_sheetColor = m_sheetColor; engine->m_loopColor = m_loopColor; engine->setEnabled(isEnabled()); return engine; } CartoonEngine::~CartoonEngine() { } void CartoonEngine::settingsWidgetDestroyed() { m_settingsWidget = 0; } QWidget* CartoonEngine::settingsWidget() { if (!m_settingsWidget) { m_settingsWidget = new CartoonSettingsWidget; // connect the signals connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); connect(m_settingsWidget->aHelixSpin, SIGNAL(valueChanged(double)), this, SLOT(setHelixA(double))); connect(m_settingsWidget->bHelixSpin, SIGNAL(valueChanged(double)), this, SLOT(setHelixB(double))); connect(m_settingsWidget->cHelixSpin, SIGNAL(valueChanged(double)), this, SLOT(setHelixC(double))); connect(m_settingsWidget->aSheetSpin, SIGNAL(valueChanged(double)), this, SLOT(setSheetA(double))); connect(m_settingsWidget->bSheetSpin, SIGNAL(valueChanged(double)), this, SLOT(setSheetB(double))); connect(m_settingsWidget->cSheetSpin, SIGNAL(valueChanged(double)), this, SLOT(setSheetC(double))); connect(m_settingsWidget->aLoopSpin, SIGNAL(valueChanged(double)), this, SLOT(setLoopA(double))); connect(m_settingsWidget->bLoopSpin, SIGNAL(valueChanged(double)), this, SLOT(setLoopB(double))); connect(m_settingsWidget->cLoopSpin, SIGNAL(valueChanged(double)), this, SLOT(setLoopC(double))); connect(m_settingsWidget->helixColorButton, SIGNAL(colorChanged(QColor)), this, SLOT(setHelixColor(QColor))); connect(m_settingsWidget->sheetColorButton, SIGNAL(colorChanged(QColor)), this, SLOT(setSheetColor(QColor))); connect(m_settingsWidget->loopColorButton, SIGNAL(colorChanged(QColor)), this, SLOT(setLoopColor(QColor))); // set the parameters m_settingsWidget->aHelixSpin->setValue(m_aHelix); m_settingsWidget->bHelixSpin->setValue(m_bHelix); m_settingsWidget->cHelixSpin->setValue(m_cHelix); m_settingsWidget->aSheetSpin->setValue(m_aSheet); m_settingsWidget->bSheetSpin->setValue(m_bSheet); m_settingsWidget->cSheetSpin->setValue(m_cSheet); m_settingsWidget->aLoopSpin->setValue(m_aLoop); m_settingsWidget->bLoopSpin->setValue(m_bLoop); m_settingsWidget->cLoopSpin->setValue(m_cLoop); // set the colors QColor color; color.setRgb(m_helixColor.red(), m_helixColor.green(), m_helixColor.blue()); m_settingsWidget->helixColorButton->setColor(color); color.setRgb(m_sheetColor.red(), m_sheetColor.green(), m_sheetColor.blue()); m_settingsWidget->sheetColorButton->setColor(color); color.setRgb(m_loopColor.red(), m_loopColor.green(), m_loopColor.blue()); m_settingsWidget->loopColorButton->setColor(color); } return m_settingsWidget; } bool CartoonEngine::renderOpaque(PainterDevice *pd) { // Check if the mesh need updating before drawing it if (m_update) updateMesh(pd); if (m_mesh) { if (m_mesh->stable() && m_mesh->valid()) { pd->painter()->setColor(0.0, 0.0, 0.0, 1.0); pd->painter()->drawColorMesh(*m_mesh); } } // draw selected residues as wireframe glDisable(GL_LIGHTING); pd->colorMap()->setToSelectionColor(); pd->painter()->setColor(pd->colorMap()); foreach(Bond *b, bonds()) { if (!pd->isSelected(b)) continue; const Atom* atom1 = b->beginAtom(); const Vector3d & v1 = *atom1->pos(); const Atom* atom2 = b->endAtom(); const Vector3d & v2 = *atom2->pos(); pd->painter()->drawLine(v1, v2, 2.0); } glEnable(GL_LIGHTING); return true; } bool CartoonEngine::renderQuick(PainterDevice *pd) { if (m_mesh) { if (m_mesh->stable()) { pd->painter()->drawMesh(*m_mesh); } } return true; } double CartoonEngine::radius(const PainterDevice *, const Primitive *) const { return 1.0; } void CartoonEngine::setPrimitives(const PrimitiveList &primitives) { Engine::setPrimitives(primitives); m_update = true; } void CartoonEngine::addPrimitive(Primitive *primitive) { Engine::addPrimitive(primitive); m_update = true; } void CartoonEngine::updatePrimitive(Primitive *) { m_update = true; } void CartoonEngine::removePrimitive(Primitive *primitive) { Engine::removePrimitive(primitive); m_update = true; } void CartoonEngine::updateMesh(PainterDevice *pd) { if (!isEnabled()) return; // Get a list of residues for the molecule const Molecule *molecule = pd->molecule(); if (molecule->numResidues() < 3) { m_update = false; return; // There's no use generating meshes for non-biomolecules } Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map if (!m_mesh) { Molecule *mol = const_cast(molecule); m_mesh = mol->addMesh(); } CartoonMeshGenerator *generator = new CartoonMeshGenerator(molecule, m_mesh); generator->setHelixABC(m_aHelix, m_bHelix, m_cHelix); generator->setHelixColor(Color3f(float(m_helixColor.redF()), m_helixColor.greenF(), m_helixColor.blueF())); generator->setSheetABC(m_aSheet, m_bSheet, m_cSheet); generator->setSheetColor(Color3f(float(m_sheetColor.redF()), m_sheetColor.greenF(), m_sheetColor.blueF())); generator->setLoopABC(m_aLoop, m_bLoop, m_cLoop); generator->setLoopColor(Color3f(float(m_loopColor.redF()), m_loopColor.greenF(), m_loopColor.blueF())); connect(generator, SIGNAL(finished()), this, SIGNAL(changed())); connect(generator, SIGNAL(finished()), generator, SLOT(deleteLater())); generator->start(); m_update = false; } Engine::PrimitiveTypes CartoonEngine::primitiveTypes() const { return Engine::Molecules; } Engine::ColorTypes CartoonEngine::colorTypes() const { return Engine::NoColors; } void CartoonEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("aHelix", m_aHelix); settings.setValue("bHelix", m_bHelix); settings.setValue("cHelix", m_cHelix); settings.setValue("aSheet", m_aSheet); settings.setValue("bSheet", m_bSheet); settings.setValue("cSheet", m_cSheet); settings.setValue("aLoop", m_aLoop); settings.setValue("bLoop", m_bLoop); settings.setValue("cLoop", m_cLoop); settings.setValue("cHelixColor", m_helixColor); settings.setValue("cSheetColor", m_sheetColor); settings.setValue("cLoopColor", m_loopColor); if (m_mesh) settings.setValue("meshId", static_cast(m_mesh->id())); } void CartoonEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); m_aHelix = settings.value("aHelix", 1.0).toDouble(); m_bHelix = settings.value("bHelix", 0.3).toDouble(); m_cHelix = settings.value("cHelix", 1.0).toDouble(); m_aSheet = settings.value("aSheet", 1.0).toDouble(); m_bSheet = settings.value("bSheet", 0.3).toDouble(); m_cSheet = settings.value("cSheet", 1.0).toDouble(); m_aLoop = settings.value("aLoop", 0.2).toDouble(); m_bLoop = settings.value("bLoop", 0.2).toDouble(); m_cLoop = settings.value("cLoop", 0.0).toDouble(); m_helixColor = settings.value("cHelixColor", Qt::red).value(); m_sheetColor = settings.value("cSheetColor", Qt::yellow).value(); m_loopColor = settings.value("cLoopColor", Qt::green).value(); if (m_molecule) { m_mesh = m_molecule->meshById(settings.value("meshId", 0).toInt()); } } void CartoonEngine::setHelixA(double value) { m_aHelix = value; m_update = true; emit changed(); } void CartoonEngine::setHelixB(double value) { m_bHelix = value; m_update = true; emit changed(); } void CartoonEngine::setHelixC(double value) { m_cHelix = value; m_update = true; emit changed(); } void CartoonEngine::setSheetA(double value) { m_aSheet = value; m_update = true; } void CartoonEngine::setSheetB(double value) { m_bSheet = value; m_update = true; emit changed(); } void CartoonEngine::setSheetC(double value) { m_cSheet = value; m_update = true; emit changed(); } void CartoonEngine::setLoopA(double value) { m_aLoop = value; m_update = true; emit changed(); } void CartoonEngine::setLoopB(double value) { m_bLoop = value; m_update = true; emit changed(); } void CartoonEngine::setLoopC(double value) { m_cLoop = value; m_update = true; emit changed(); } void CartoonEngine::setHelixColor(QColor color) { m_helixColor = color; m_update = true; emit changed(); } void CartoonEngine::setSheetColor(QColor color) { m_sheetColor = color; m_update = true; emit changed(); } void CartoonEngine::setLoopColor(QColor color) { m_loopColor = color; m_update = true; emit changed(); } } Q_EXPORT_PLUGIN2(cartoonengine, Avogadro::CartoonEngineFactory) avogadro-1.1.1/libavogadro/src/engines/hbondengine.cpp0000644000175000001440000001627312250371054022231 0ustar marcususers/********************************************************************** HBondEngine - Hydrogen Bond Engine Copyright (C) 2007 by Marcus D. Hanwell Copyright (C) 2007,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "hbondengine.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; using namespace Eigen; namespace Avogadro { HBondEngine::HBondEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_width(2), m_radius(2.0), m_angle(120) { } Engine *HBondEngine::clone() const { HBondEngine *engine = new HBondEngine(parent()); engine->setAlias(alias()); engine->setWidth(m_width); engine->setRadius(m_radius); engine->setAngle(m_angle); engine->setEnabled(isEnabled()); return engine; } HBondEngine::~HBondEngine() { } unsigned long createUniqueHbondId(Atom *donorH, Atom *acceptor) { return acceptor->index() * static_cast(acceptor->parent())->numAtoms() + donorH->index(); } bool HBondEngine::renderOpaque(PainterDevice *pd) { Molecule *molecule = const_cast(pd->molecule()); if (!molecule->numAtoms()) return false; pd->painter()->setColor(1.0, 1.0, 0.3); int stipple = 0xF0F0; // pattern for lines QList rendered; NeighborList *nbrList = new NeighborList(molecule, m_radius); //for (unsigned int i = 0; i < molecule->numAtoms(); ++i) { foreach(Atom *atom, atoms()) { bool atomIsH = atom->isHydrogen() ? true : false; if (!atomIsH && !isHbondAcceptor(atom)) continue; // get ALL possible pairs for atom (uniqueOnly = false) QList nbrs = nbrList->nbrs(atom, false); foreach(Atom *nbr, nbrs) { double angle = 180.0; Atom *hydrogen, *acceptor, *donor = 0; if (atomIsH) { if (!isHbondDonorH(atom) || !isHbondAcceptor(nbr)) continue; hydrogen = atom; acceptor = nbr; foreach (unsigned long id, atom->neighbors()) donor = static_cast(atom->parent())->atomById(id); } else { if (!isHbondDonorH(nbr) || !isHbondAcceptor(atom)) continue; hydrogen = nbr; acceptor = atom; foreach (unsigned long id, nbr->neighbors()) donor = static_cast(atom->parent())->atomById(id); } if (donor) { Eigen::Vector3d ab = *donor->pos() - *hydrogen->pos(); Eigen::Vector3d bc = *acceptor->pos() - *hydrogen->pos(); angle = 180. * acos( ab.dot(bc) / (ab.norm() * bc.norm()) ) / M_PI; } if (angle < m_angle) continue; unsigned long HbondId = createUniqueHbondId(hydrogen, acceptor); if (rendered.contains(HbondId)) continue; rendered.append(HbondId); pd->painter()->drawMultiLine(*atom->pos(), *nbr->pos(), m_width, 1, stipple); } // for each nbr } // for each atom return true; } double HBondEngine::radius(const PainterDevice *, const Primitive *) const { return 0.0; } QWidget* HBondEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new HBondSettingsWidget(); connect(m_settingsWidget->widthSlider, SIGNAL(valueChanged(int)), this, SLOT(setWidth(int))); connect(m_settingsWidget->radiusSpin, SIGNAL(valueChanged(double)), this, SLOT(setRadius(double))); connect(m_settingsWidget->angleSpin, SIGNAL(valueChanged(double)), this, SLOT(setAngle(double))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); m_settingsWidget->widthSlider->setValue(m_width); m_settingsWidget->radiusSpin->setValue(m_radius); m_settingsWidget->angleSpin->setValue(m_angle); } return m_settingsWidget; } void HBondEngine::setWidth(int value) { m_width = value; emit changed(); } void HBondEngine::setRadius(double value) { m_radius = value; emit changed(); } void HBondEngine::setAngle(double value) { m_angle = value; emit changed(); } void HBondEngine::settingsWidgetDestroyed() { m_settingsWidget = 0; } void HBondEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("width", m_width); settings.setValue("radius", m_radius); settings.setValue("angle", m_angle); } void HBondEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); setWidth(settings.value("width", 2).toInt()); setRadius(settings.value("radius", 2.0).toDouble()); setAngle(settings.value("angle", 120.0).toDouble()); if (m_settingsWidget) { m_settingsWidget->widthSlider->setValue(m_width); m_settingsWidget->radiusSpin->setValue(m_radius); m_settingsWidget->angleSpin->setValue(m_angle); } } bool HBondEngine::isHbondAcceptor(Atom *atom) { if (atom->atomicNumber() == 8 || atom->atomicNumber() == 9) return true; if (atom->atomicNumber() == 7) { int boSum = 0; Molecule *mol = atom->molecule(); if (mol) { foreach (unsigned long id, atom->bonds()) boSum += mol->bondById(id)->order(); if (boSum != 4) return true; } } return false; } bool HBondEngine::isHbondDonor(Atom *atom) { switch (atom->atomicNumber()) { case 7: case 8: case 9: break; default: return false; } foreach (unsigned long id, atom->neighbors()) { Atom *nbr = static_cast(atom->parent())->atomById(id); if (nbr->isHydrogen()) return true; } return false; } bool HBondEngine::isHbondDonorH(Atom *atom) { if (!atom->isHydrogen()) return false; foreach (unsigned long id, atom->neighbors()) { Atom *nbr = static_cast(atom->parent())->atomById(id); if (isHbondDonor(nbr)) return true; } return false; } } Q_EXPORT_PLUGIN2(hbondengine, Avogadro::HBondEngineFactory) avogadro-1.1.1/libavogadro/src/engines/hbondengine.h0000644000175000001440000000631512250371054021672 0ustar marcususers/********************************************************************** HBondEngine - Hydrogen Bond Engine Copyright (C) 2007 by Marcus D. Hanwell Copyright (C) 2007,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef HBONDENGINE_H #define HBONDENGINE_H #include #include #include "ui_hbondsettingswidget.h" namespace Avogadro { //! HBond Engine class. class HBondSettingsWidget; class HBondEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Hydrogen Bond", tr("Hydrogen Bond"), tr("Renders hydrogen bonds")) public: //! Constructor HBondEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~HBondEngine(); //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); //@} double radius(const PainterDevice *pd, const Primitive *p = 0) const; QWidget* settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: HBondSettingsWidget *m_settingsWidget; int m_width; double m_radius; double m_angle; bool isHbondAcceptor(Atom *atom); bool isHbondDonor(Atom *atom); bool isHbondDonorH(Atom *atom); private Q_SLOTS: void settingsWidgetDestroyed(); /** * @param value width of the hydrogen bonds */ void setWidth(int value); /** * @param value cut-off radius for HBond detection */ void setRadius(double value); /** * @param value cut-off angle for HBond detection */ void setAngle(double value); }; class HBondSettingsWidget : public QWidget, public Ui::HBondSettingsWidget { public: HBondSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our HBondEngine class class HBondEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(HBondEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/dipolesettingswidget.ui0000644000175000001440000001266212250371054024043 0ustar marcususers DipoleSettingsWidget 0 0 370 162 10 0 Dipole: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 0 1 0 0 0 Dipole Moment Custom Vector false Custom: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 6 -99.989999999999995 0.100000000000000 false 6 -99.989999999999995 false 6 -99.989999999999995 0.100000000000000 Qt::Vertical 20 40 true Origin: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true 6 -99.989999999999995 0.100000000000000 0.000000000000000 true 6 -99.989999999999995 0.100000000000000 true 6 -99.989999999999995 0.100000000000000 avogadro-1.1.1/libavogadro/src/engines/ribbonengine.h0000644000175000001440000000674312250371054022060 0ustar marcususers/********************************************************************** RibbonEngine - Engine for "ribbon" display Copyright (C) 2007 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef RIBBONENGINE_H #define RIBBONENGINE_H #include #include #include "ui_ribbonsettingswidget.h" namespace Avogadro { //! Ribbon Engine class. class RibbonSettingsWidget; class RibbonEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Ribbon", tr("Ribbon"), tr("Renders protein backbones as ribbons")) public: //! Constructor RibbonEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~RibbonEngine(); //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); bool renderQuick(PainterDevice *pd); //@} PrimitiveTypes primitiveTypes() const; ColorTypes colorTypes() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; QWidget* settingsWidget(); bool hasSettings() { return true; } void setPrimitives(const PrimitiveList &primitives); /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); public Q_SLOTS: void addPrimitive(Primitive *primitive); void updatePrimitive(Primitive *primitive); void removePrimitive(Primitive *primitive); private: void updateChains(PainterDevice *pd); RibbonSettingsWidget *m_settingsWidget; int m_type; // Type of ribbon rendering to do double m_radius; // Ribbon radius bool m_update; // Is an update of the chain necessary? int m_useNitrogens; QList< QVector > m_chains; private Q_SLOTS: void settingsWidgetDestroyed(); /** * @param value opacity of the VdW spheres / 20 */ void setType(int value); void setRadius(int value); void setUseNitrogens(int setting); }; class RibbonSettingsWidget : public QWidget, public Ui::RibbonSettingsWidget { public: RibbonSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our RibbonEngine class class RibbonEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(RibbonEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/qtaimengine.cpp0000644000175000001440000011117412250371054022246 0ustar marcususers/********************************************************************** QTAIMEngine - Dynamic detail engine for QTAIM display Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "qtaimengine.h" #include #include #include #include #include #include #include #include // for OpenGL bits #include #include using namespace std; using namespace Eigen; namespace Avogadro { QTAIMEngine::QTAIMEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_atomRadiusPercentage(0.3), m_bondRadius(0.1), m_atomRadiusType(1), m_alpha(1.) { } Engine *QTAIMEngine::clone() const { QTAIMEngine *engine = new QTAIMEngine(parent()); engine->setAlias(alias()); engine->m_atomRadiusPercentage = m_atomRadiusPercentage; engine->m_bondRadius = m_bondRadius; engine->m_atomRadiusType = m_atomRadiusType; engine->m_alpha = m_alpha; engine->setEnabled(isEnabled()); return engine; } QTAIMEngine::~QTAIMEngine() { if ( m_settingsWidget ) { m_settingsWidget->deleteLater(); } } bool QTAIMEngine::renderOpaque( PainterDevice *pd ) { // glPushAttrib( GL_TRANSFORM_BIT ); // Render the opaque balls & sticks if m_alpha is 1 if (m_alpha < 0.999) { return true; } Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map // Render the bond paths if( m_molecule->property("QTAIMFirstNCPIndexVariantList").isValid() && m_molecule->property("QTAIMSecondNCPIndexVariantList").isValid() && m_molecule->property("QTAIMLaplacianAtBondCriticalPoints").isValid() && m_molecule->property("QTAIMEllipticityAtBondCriticalPoints").isValid() && m_molecule->property("QTAIMBondPathSegmentStartIndex").isValid() && m_molecule->property("QTAIMBondPathSegmentEndIndex").isValid() && m_molecule->property("QTAIMXBondPaths").isValid() && m_molecule->property("QTAIMYBondPaths").isValid() && m_molecule->property("QTAIMZBondPaths").isValid() ) { QVariant firstNCPIndexVariant=m_molecule->property("QTAIMFirstNCPIndexVariantList"); QVariant secondNCPIndexVariant=m_molecule->property("QTAIMSecondNCPIndexVariantList"); QVariant laplacianAtBondCriticalPointsVariant=m_molecule->property("QTAIMLaplacianAtBondCriticalPoints"); QVariant ellipticityAtBondCriticalPointsVariant=m_molecule->property("QTAIMEllipticityAtBondCriticalPoints"); QVariant bondPathSegmentStartIndexVariant=m_molecule->property("QTAIMBondPathSegmentStartIndex"); QVariant bondPathSegmentEndIndexVariant=m_molecule->property("QTAIMBondPathSegmentEndIndex"); QVariant xBondPathsVariant=m_molecule->property("QTAIMXBondPaths"); QVariant yBondPathsVariant=m_molecule->property("QTAIMYBondPaths"); QVariant zBondPathsVariant=m_molecule->property("QTAIMZBondPaths"); QVariantList firstNCPIndexVariantList=firstNCPIndexVariant.toList(); QVariantList secondNCPIndexVariantList=secondNCPIndexVariant.toList(); QVariantList laplacianAtBondCriticalPointsVariantList=laplacianAtBondCriticalPointsVariant.toList(); QVariantList ellipticityAtBondCriticalPointsVariantList=ellipticityAtBondCriticalPointsVariant.toList(); QVariantList bondPathSegmentStartIndexVariantList=bondPathSegmentStartIndexVariant.toList(); QVariantList bondPathSegmentEndIndexVariantList=bondPathSegmentEndIndexVariant.toList(); QVariantList xBondPathsVariantList=xBondPathsVariant.toList(); QVariantList yBondPathsVariantList=yBondPathsVariant.toList(); QVariantList zBondPathsVariantList=zBondPathsVariant.toList(); for( qint64 i=0 ; i < firstNCPIndexVariantList.length() ; ++i ) { qint64 start=bondPathSegmentStartIndexVariantList.at(i).toLongLong(); qint64 end=bondPathSegmentEndIndexVariantList.at(i).toLongLong(); if( laplacianAtBondCriticalPointsVariantList.at(i).toReal() > 0.0 ) { const qint64 step=4; for( qint64 j=start ; j < end-1 ; j=j+step ) { pd->painter()->setColor("White"); Eigen::Vector3d xyz; xyz << xBondPathsVariantList.at(j).toReal(), yBondPathsVariantList.at(j).toReal(), zBondPathsVariantList.at(j).toReal(); pd->painter()->drawSphere(xyz, 0.025 ); } } else { const qint64 step=1; for( qint64 j=start ; j < end-1 ; j=j+step ) { Eigen::Vector3d xyz0; xyz0 << xBondPathsVariantList.at(j).toReal(), yBondPathsVariantList.at(j).toReal(), zBondPathsVariantList.at(j).toReal(); Eigen::Vector3d xyz1; xyz1 << xBondPathsVariantList.at(j+1).toReal(), yBondPathsVariantList.at(j+1).toReal(), zBondPathsVariantList.at(j+1).toReal(); Vector3d v1(xyz0); Vector3d v2(xyz1); Vector3d v3( (v1 + v2) / 2. ) ; double shift = 0.15; int order = 1; double radius=0.025; pd->painter()->setColor("White"); pd->painter()->drawMultiCylinder( v1, v2, radius, order, shift ); } } } // bond path } glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); if( m_molecule->property("QTAIMXNuclearCriticalPoints").isValid() && m_molecule->property("QTAIMYNuclearCriticalPoints").isValid() && m_molecule->property("QTAIMZNuclearCriticalPoints").isValid() ) { QVariant xNuclearCriticalPointsVariant=m_molecule->property("QTAIMXNuclearCriticalPoints"); QVariant yNuclearCriticalPointsVariant=m_molecule->property("QTAIMYNuclearCriticalPoints"); QVariant zNuclearCriticalPointsVariant=m_molecule->property("QTAIMZNuclearCriticalPoints"); QVariantList xNuclearCriticalPointsVariantList=xNuclearCriticalPointsVariant.toList(); QVariantList yNuclearCriticalPointsVariantList=yNuclearCriticalPointsVariant.toList(); QVariantList zNuclearCriticalPointsVariantList=zNuclearCriticalPointsVariant.toList(); if( xNuclearCriticalPointsVariantList.length() == yNuclearCriticalPointsVariantList.length() && xNuclearCriticalPointsVariantList.length() == zNuclearCriticalPointsVariantList.length() ) { for( qint64 i=0 ; i < xNuclearCriticalPointsVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xNuclearCriticalPointsVariantList.at(i).toReal(), yNuclearCriticalPointsVariantList.at(i).toReal(), zNuclearCriticalPointsVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Purple"); pd->painter()->drawSphere(xyz, 0.1 ); } } } if( m_molecule->property("QTAIMXBondCriticalPoints").isValid() && m_molecule->property("QTAIMYBondCriticalPoints").isValid() && m_molecule->property("QTAIMZBondCriticalPoints").isValid() ) { QVariant xBondCriticalPointsVariant=m_molecule->property("QTAIMXBondCriticalPoints"); QVariant yBondCriticalPointsVariant=m_molecule->property("QTAIMYBondCriticalPoints"); QVariant zBondCriticalPointsVariant=m_molecule->property("QTAIMZBondCriticalPoints"); QVariantList xBondCriticalPointsVariantList=xBondCriticalPointsVariant.toList(); QVariantList yBondCriticalPointsVariantList=yBondCriticalPointsVariant.toList(); QVariantList zBondCriticalPointsVariantList=zBondCriticalPointsVariant.toList(); if( xBondCriticalPointsVariantList.length() == yBondCriticalPointsVariantList.length() && xBondCriticalPointsVariantList.length() == zBondCriticalPointsVariantList.length() ) { for( qint64 i=0 ; i < xBondCriticalPointsVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xBondCriticalPointsVariantList.at(i).toReal(), yBondCriticalPointsVariantList.at(i).toReal(), zBondCriticalPointsVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Yellow"); pd->painter()->drawSphere(xyz, 0.1 ); } } } // normalize normal vectors of bonds glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); if( m_molecule->property("QTAIMXElectronDensitySources").isValid() && m_molecule->property("QTAIMYElectronDensitySources").isValid() && m_molecule->property("QTAIMZElectronDensitySources").isValid() ) { QVariant xElectronDensitySourcesVariant=m_molecule->property("QTAIMXElectronDensitySources"); QVariant yElectronDensitySourcesVariant=m_molecule->property("QTAIMYElectronDensitySources"); QVariant zElectronDensitySourcesVariant=m_molecule->property("QTAIMZElectronDensitySources"); QVariantList xElectronDensitySourcesVariantList=xElectronDensitySourcesVariant.toList(); QVariantList yElectronDensitySourcesVariantList=yElectronDensitySourcesVariant.toList(); QVariantList zElectronDensitySourcesVariantList=zElectronDensitySourcesVariant.toList(); if( xElectronDensitySourcesVariantList.length() == yElectronDensitySourcesVariantList.length() && xElectronDensitySourcesVariantList.length() == zElectronDensitySourcesVariantList.length() ) { for( qint64 i=0 ; i < xElectronDensitySourcesVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xElectronDensitySourcesVariantList.at(i).toReal(), yElectronDensitySourcesVariantList.at(i).toReal(), zElectronDensitySourcesVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Blue"); pd->painter()->drawSphere(xyz, 0.1 ); } } } // normalize normal vectors of bonds glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); // glPopAttrib(); return true; } bool QTAIMEngine::renderTransparent(PainterDevice *pd) { // Render selections when not renderquick Color *map = colorMap(); if (!map) map = pd->colorMap(); // Render the bond paths if( m_molecule->property("QTAIMFirstNCPIndexVariantList").isValid() && m_molecule->property("QTAIMSecondNCPIndexVariantList").isValid() && m_molecule->property("QTAIMLaplacianAtBondCriticalPoints").isValid() && m_molecule->property("QTAIMEllipticityAtBondCriticalPoints").isValid() && m_molecule->property("QTAIMBondPathSegmentStartIndex").isValid() && m_molecule->property("QTAIMBondPathSegmentEndIndex").isValid() && m_molecule->property("QTAIMXBondPaths").isValid() && m_molecule->property("QTAIMYBondPaths").isValid() && m_molecule->property("QTAIMZBondPaths").isValid() ) { QVariant firstNCPIndexVariant=m_molecule->property("QTAIMFirstNCPIndexVariantList"); QVariant secondNCPIndexVariant=m_molecule->property("QTAIMSecondNCPIndexVariantList"); QVariant laplacianAtBondCriticalPointsVariant=m_molecule->property("QTAIMLaplacianAtBondCriticalPoints"); QVariant ellipticityAtBondCriticalPointsVariant=m_molecule->property("QTAIMEllipticityAtBondCriticalPoints"); QVariant bondPathSegmentStartIndexVariant=m_molecule->property("QTAIMBondPathSegmentStartIndex"); QVariant bondPathSegmentEndIndexVariant=m_molecule->property("QTAIMBondPathSegmentEndIndex"); QVariant xBondPathsVariant=m_molecule->property("QTAIMXBondPaths"); QVariant yBondPathsVariant=m_molecule->property("QTAIMYBondPaths"); QVariant zBondPathsVariant=m_molecule->property("QTAIMZBondPaths"); QVariantList firstNCPIndexVariantList=firstNCPIndexVariant.toList(); QVariantList secondNCPIndexVariantList=secondNCPIndexVariant.toList(); QVariantList laplacianAtBondCriticalPointsVariantList=laplacianAtBondCriticalPointsVariant.toList(); QVariantList ellipticityAtBondCriticalPointsVariantList=ellipticityAtBondCriticalPointsVariant.toList(); QVariantList bondPathSegmentStartIndexVariantList=bondPathSegmentStartIndexVariant.toList(); QVariantList bondPathSegmentEndIndexVariantList=bondPathSegmentEndIndexVariant.toList(); QVariantList xBondPathsVariantList=xBondPathsVariant.toList(); QVariantList yBondPathsVariantList=yBondPathsVariant.toList(); QVariantList zBondPathsVariantList=zBondPathsVariant.toList(); for( qint64 i=0 ; i < firstNCPIndexVariantList.length() ; ++i ) { qint64 start=bondPathSegmentStartIndexVariantList.at(i).toLongLong(); qint64 end=bondPathSegmentEndIndexVariantList.at(i).toLongLong(); if( laplacianAtBondCriticalPointsVariantList.at(i).toReal() > 0.0 ) { const qint64 step=4; for( qint64 j=start ; j < end-1 ; j=j+step ) { pd->painter()->setColor("White"); Eigen::Vector3d xyz; xyz << xBondPathsVariantList.at(j).toReal(), yBondPathsVariantList.at(j).toReal(), zBondPathsVariantList.at(j).toReal(); pd->painter()->drawSphere(xyz, 0.025 ); } } else { const qint64 step=1; for( qint64 j=start ; j < end-1 ; j=j+step ) { Eigen::Vector3d xyz0; xyz0 << xBondPathsVariantList.at(j).toReal(), yBondPathsVariantList.at(j).toReal(), zBondPathsVariantList.at(j).toReal(); Eigen::Vector3d xyz1; xyz1 << xBondPathsVariantList.at(j+1).toReal(), yBondPathsVariantList.at(j+1).toReal(), zBondPathsVariantList.at(j+1).toReal(); Vector3d v1(xyz0); Vector3d v2(xyz1); Vector3d v3( (v1 + v2) / 2. ) ; double shift = 0.15; int order = 1; double radius=0.025; pd->painter()->setColor("White"); pd->painter()->drawMultiCylinder( v1, v2, radius, order, shift ); } } } // bond path } glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); if( m_molecule->property("QTAIMXNuclearCriticalPoints").isValid() && m_molecule->property("QTAIMYNuclearCriticalPoints").isValid() && m_molecule->property("QTAIMZNuclearCriticalPoints").isValid() ) { QVariant xNuclearCriticalPointsVariant=m_molecule->property("QTAIMXNuclearCriticalPoints"); QVariant yNuclearCriticalPointsVariant=m_molecule->property("QTAIMYNuclearCriticalPoints"); QVariant zNuclearCriticalPointsVariant=m_molecule->property("QTAIMZNuclearCriticalPoints"); QVariantList xNuclearCriticalPointsVariantList=xNuclearCriticalPointsVariant.toList(); QVariantList yNuclearCriticalPointsVariantList=yNuclearCriticalPointsVariant.toList(); QVariantList zNuclearCriticalPointsVariantList=zNuclearCriticalPointsVariant.toList(); if( xNuclearCriticalPointsVariantList.length() == yNuclearCriticalPointsVariantList.length() && xNuclearCriticalPointsVariantList.length() == zNuclearCriticalPointsVariantList.length() ) { for( qint64 i=0 ; i < xNuclearCriticalPointsVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xNuclearCriticalPointsVariantList.at(i).toReal(), yNuclearCriticalPointsVariantList.at(i).toReal(), zNuclearCriticalPointsVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Purple"); pd->painter()->drawSphere(xyz, 0.1 ); } } } if( m_molecule->property("QTAIMXBondCriticalPoints").isValid() && m_molecule->property("QTAIMYBondCriticalPoints").isValid() && m_molecule->property("QTAIMZBondCriticalPoints").isValid() ) { QVariant xBondCriticalPointsVariant=m_molecule->property("QTAIMXBondCriticalPoints"); QVariant yBondCriticalPointsVariant=m_molecule->property("QTAIMYBondCriticalPoints"); QVariant zBondCriticalPointsVariant=m_molecule->property("QTAIMZBondCriticalPoints"); QVariantList xBondCriticalPointsVariantList=xBondCriticalPointsVariant.toList(); QVariantList yBondCriticalPointsVariantList=yBondCriticalPointsVariant.toList(); QVariantList zBondCriticalPointsVariantList=zBondCriticalPointsVariant.toList(); if( xBondCriticalPointsVariantList.length() == yBondCriticalPointsVariantList.length() && xBondCriticalPointsVariantList.length() == zBondCriticalPointsVariantList.length() ) { for( qint64 i=0 ; i < xBondCriticalPointsVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xBondCriticalPointsVariantList.at(i).toReal(), yBondCriticalPointsVariantList.at(i).toReal(), zBondCriticalPointsVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Yellow"); pd->painter()->drawSphere(xyz, 0.1 ); } } } // normalize normal vectors of bonds glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); // glPopAttrib(); return true; } bool QTAIMEngine::renderQuick(PainterDevice *pd) { Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map Color cSel; cSel.setToSelectionColor(); // Render the bond paths if( m_molecule->property("QTAIMFirstNCPIndexVariantList").isValid() && m_molecule->property("QTAIMSecondNCPIndexVariantList").isValid() && m_molecule->property("QTAIMLaplacianAtBondCriticalPoints").isValid() && m_molecule->property("QTAIMEllipticityAtBondCriticalPoints").isValid() && m_molecule->property("QTAIMBondPathSegmentStartIndex").isValid() && m_molecule->property("QTAIMBondPathSegmentEndIndex").isValid() && m_molecule->property("QTAIMXBondPaths").isValid() && m_molecule->property("QTAIMYBondPaths").isValid() && m_molecule->property("QTAIMZBondPaths").isValid() ) { QVariant firstNCPIndexVariant=m_molecule->property("QTAIMFirstNCPIndexVariantList"); QVariant secondNCPIndexVariant=m_molecule->property("QTAIMSecondNCPIndexVariantList"); QVariant laplacianAtBondCriticalPointsVariant=m_molecule->property("QTAIMLaplacianAtBondCriticalPoints"); QVariant ellipticityAtBondCriticalPointsVariant=m_molecule->property("QTAIMEllipticityAtBondCriticalPoints"); QVariant bondPathSegmentStartIndexVariant=m_molecule->property("QTAIMBondPathSegmentStartIndex"); QVariant bondPathSegmentEndIndexVariant=m_molecule->property("QTAIMBondPathSegmentEndIndex"); QVariant xBondPathsVariant=m_molecule->property("QTAIMXBondPaths"); QVariant yBondPathsVariant=m_molecule->property("QTAIMYBondPaths"); QVariant zBondPathsVariant=m_molecule->property("QTAIMZBondPaths"); QVariantList firstNCPIndexVariantList=firstNCPIndexVariant.toList(); QVariantList secondNCPIndexVariantList=secondNCPIndexVariant.toList(); QVariantList laplacianAtBondCriticalPointsVariantList=laplacianAtBondCriticalPointsVariant.toList(); QVariantList ellipticityAtBondCriticalPointsVariantList=ellipticityAtBondCriticalPointsVariant.toList(); QVariantList bondPathSegmentStartIndexVariantList=bondPathSegmentStartIndexVariant.toList(); QVariantList bondPathSegmentEndIndexVariantList=bondPathSegmentEndIndexVariant.toList(); QVariantList xBondPathsVariantList=xBondPathsVariant.toList(); QVariantList yBondPathsVariantList=yBondPathsVariant.toList(); QVariantList zBondPathsVariantList=zBondPathsVariant.toList(); for( qint64 i=0 ; i < firstNCPIndexVariantList.length() ; ++i ) { qint64 start=bondPathSegmentStartIndexVariantList.at(i).toLongLong(); qint64 end=bondPathSegmentEndIndexVariantList.at(i).toLongLong(); if( laplacianAtBondCriticalPointsVariantList.at(i).toReal() > 0.0 ) { const qint64 step=4; for( qint64 j=start ; j < end-1 ; j=j+step ) { pd->painter()->setColor("White"); Eigen::Vector3d xyz; xyz << xBondPathsVariantList.at(j).toReal(), yBondPathsVariantList.at(j).toReal(), zBondPathsVariantList.at(j).toReal(); pd->painter()->drawSphere(xyz, 0.025 ); } } else { const qint64 step=1; for( qint64 j=start ; j < end-1 ; j=j+step ) { Eigen::Vector3d xyz0; xyz0 << xBondPathsVariantList.at(j).toReal(), yBondPathsVariantList.at(j).toReal(), zBondPathsVariantList.at(j).toReal(); Eigen::Vector3d xyz1; xyz1 << xBondPathsVariantList.at(j+1).toReal(), yBondPathsVariantList.at(j+1).toReal(), zBondPathsVariantList.at(j+1).toReal(); Vector3d v1(xyz0); Vector3d v2(xyz1); Vector3d v3( (v1 + v2) / 2. ) ; double shift = 0.15; int order = 1; double radius=0.025; pd->painter()->setColor("White"); pd->painter()->drawMultiCylinder( v1, v2, radius, order, shift ); } } } // bond path } glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); if( m_molecule->property("QTAIMXNuclearCriticalPoints").isValid() && m_molecule->property("QTAIMYNuclearCriticalPoints").isValid() && m_molecule->property("QTAIMZNuclearCriticalPoints").isValid() ) { QVariant xNuclearCriticalPointsVariant=m_molecule->property("QTAIMXNuclearCriticalPoints"); QVariant yNuclearCriticalPointsVariant=m_molecule->property("QTAIMYNuclearCriticalPoints"); QVariant zNuclearCriticalPointsVariant=m_molecule->property("QTAIMZNuclearCriticalPoints"); QVariantList xNuclearCriticalPointsVariantList=xNuclearCriticalPointsVariant.toList(); QVariantList yNuclearCriticalPointsVariantList=yNuclearCriticalPointsVariant.toList(); QVariantList zNuclearCriticalPointsVariantList=zNuclearCriticalPointsVariant.toList(); if( xNuclearCriticalPointsVariantList.length() == yNuclearCriticalPointsVariantList.length() && xNuclearCriticalPointsVariantList.length() == zNuclearCriticalPointsVariantList.length() ) { for( qint64 i=0 ; i < xNuclearCriticalPointsVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xNuclearCriticalPointsVariantList.at(i).toReal(), yNuclearCriticalPointsVariantList.at(i).toReal(), zNuclearCriticalPointsVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Purple"); pd->painter()->drawSphere(xyz, 0.1 ); } } } if( m_molecule->property("QTAIMXBondCriticalPoints").isValid() && m_molecule->property("QTAIMYBondCriticalPoints").isValid() && m_molecule->property("QTAIMZBondCriticalPoints").isValid() ) { QVariant xBondCriticalPointsVariant=m_molecule->property("QTAIMXBondCriticalPoints"); QVariant yBondCriticalPointsVariant=m_molecule->property("QTAIMYBondCriticalPoints"); QVariant zBondCriticalPointsVariant=m_molecule->property("QTAIMZBondCriticalPoints"); QVariantList xBondCriticalPointsVariantList=xBondCriticalPointsVariant.toList(); QVariantList yBondCriticalPointsVariantList=yBondCriticalPointsVariant.toList(); QVariantList zBondCriticalPointsVariantList=zBondCriticalPointsVariant.toList(); if( xBondCriticalPointsVariantList.length() == yBondCriticalPointsVariantList.length() && xBondCriticalPointsVariantList.length() == zBondCriticalPointsVariantList.length() ) { for( qint64 i=0 ; i < xBondCriticalPointsVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xBondCriticalPointsVariantList.at(i).toReal(), yBondCriticalPointsVariantList.at(i).toReal(), zBondCriticalPointsVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Yellow"); pd->painter()->drawSphere(xyz, 0.1 ); } } } // normalize normal vectors of bonds glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); // glPopAttrib(); return true; } bool QTAIMEngine::renderPick(PainterDevice *pd) { // Render selections when not renderquick Color *map = colorMap(); if (!map) map = pd->colorMap(); // Render the bond paths if( m_molecule->property("QTAIMFirstNCPIndexVariantList").isValid() && m_molecule->property("QTAIMSecondNCPIndexVariantList").isValid() && m_molecule->property("QTAIMLaplacianAtBondCriticalPoints").isValid() && m_molecule->property("QTAIMEllipticityAtBondCriticalPoints").isValid() && m_molecule->property("QTAIMBondPathSegmentStartIndex").isValid() && m_molecule->property("QTAIMBondPathSegmentEndIndex").isValid() && m_molecule->property("QTAIMXBondPaths").isValid() && m_molecule->property("QTAIMYBondPaths").isValid() && m_molecule->property("QTAIMZBondPaths").isValid() ) { QVariant firstNCPIndexVariant=m_molecule->property("QTAIMFirstNCPIndexVariantList"); QVariant secondNCPIndexVariant=m_molecule->property("QTAIMSecondNCPIndexVariantList"); QVariant laplacianAtBondCriticalPointsVariant=m_molecule->property("QTAIMLaplacianAtBondCriticalPoints"); QVariant ellipticityAtBondCriticalPointsVariant=m_molecule->property("QTAIMEllipticityAtBondCriticalPoints"); QVariant bondPathSegmentStartIndexVariant=m_molecule->property("QTAIMBondPathSegmentStartIndex"); QVariant bondPathSegmentEndIndexVariant=m_molecule->property("QTAIMBondPathSegmentEndIndex"); QVariant xBondPathsVariant=m_molecule->property("QTAIMXBondPaths"); QVariant yBondPathsVariant=m_molecule->property("QTAIMYBondPaths"); QVariant zBondPathsVariant=m_molecule->property("QTAIMZBondPaths"); QVariantList firstNCPIndexVariantList=firstNCPIndexVariant.toList(); QVariantList secondNCPIndexVariantList=secondNCPIndexVariant.toList(); QVariantList laplacianAtBondCriticalPointsVariantList=laplacianAtBondCriticalPointsVariant.toList(); QVariantList ellipticityAtBondCriticalPointsVariantList=ellipticityAtBondCriticalPointsVariant.toList(); QVariantList bondPathSegmentStartIndexVariantList=bondPathSegmentStartIndexVariant.toList(); QVariantList bondPathSegmentEndIndexVariantList=bondPathSegmentEndIndexVariant.toList(); QVariantList xBondPathsVariantList=xBondPathsVariant.toList(); QVariantList yBondPathsVariantList=yBondPathsVariant.toList(); QVariantList zBondPathsVariantList=zBondPathsVariant.toList(); for( qint64 i=0 ; i < firstNCPIndexVariantList.length() ; ++i ) { qint64 start=bondPathSegmentStartIndexVariantList.at(i).toLongLong(); qint64 end=bondPathSegmentEndIndexVariantList.at(i).toLongLong(); if( laplacianAtBondCriticalPointsVariantList.at(i).toReal() > 0.0 ) { const qint64 step=4; for( qint64 j=start ; j < end-1 ; j=j+step ) { pd->painter()->setColor("White"); Eigen::Vector3d xyz; xyz << xBondPathsVariantList.at(j).toReal(), yBondPathsVariantList.at(j).toReal(), zBondPathsVariantList.at(j).toReal(); pd->painter()->drawSphere(xyz, 0.025 ); } } else { const qint64 step=1; for( qint64 j=start ; j < end-1 ; j=j+step ) { Eigen::Vector3d xyz0; xyz0 << xBondPathsVariantList.at(j).toReal(), yBondPathsVariantList.at(j).toReal(), zBondPathsVariantList.at(j).toReal(); Eigen::Vector3d xyz1; xyz1 << xBondPathsVariantList.at(j+1).toReal(), yBondPathsVariantList.at(j+1).toReal(), zBondPathsVariantList.at(j+1).toReal(); Vector3d v1(xyz0); Vector3d v2(xyz1); Vector3d v3( (v1 + v2) / 2. ) ; double shift = 0.15; int order = 1; double radius=0.025; pd->painter()->setColor("White"); pd->painter()->drawMultiCylinder( v1, v2, radius, order, shift ); } } } // bond path } glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); if( m_molecule->property("QTAIMXNuclearCriticalPoints").isValid() && m_molecule->property("QTAIMYNuclearCriticalPoints").isValid() && m_molecule->property("QTAIMZNuclearCriticalPoints").isValid() ) { QVariant xNuclearCriticalPointsVariant=m_molecule->property("QTAIMXNuclearCriticalPoints"); QVariant yNuclearCriticalPointsVariant=m_molecule->property("QTAIMYNuclearCriticalPoints"); QVariant zNuclearCriticalPointsVariant=m_molecule->property("QTAIMZNuclearCriticalPoints"); QVariantList xNuclearCriticalPointsVariantList=xNuclearCriticalPointsVariant.toList(); QVariantList yNuclearCriticalPointsVariantList=yNuclearCriticalPointsVariant.toList(); QVariantList zNuclearCriticalPointsVariantList=zNuclearCriticalPointsVariant.toList(); if( xNuclearCriticalPointsVariantList.length() == yNuclearCriticalPointsVariantList.length() && xNuclearCriticalPointsVariantList.length() == zNuclearCriticalPointsVariantList.length() ) { for( qint64 i=0 ; i < xNuclearCriticalPointsVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xNuclearCriticalPointsVariantList.at(i).toReal(), yNuclearCriticalPointsVariantList.at(i).toReal(), zNuclearCriticalPointsVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Purple"); pd->painter()->drawSphere(xyz, 0.1 ); } } } if( m_molecule->property("QTAIMXBondCriticalPoints").isValid() && m_molecule->property("QTAIMYBondCriticalPoints").isValid() && m_molecule->property("QTAIMZBondCriticalPoints").isValid() ) { QVariant xBondCriticalPointsVariant=m_molecule->property("QTAIMXBondCriticalPoints"); QVariant yBondCriticalPointsVariant=m_molecule->property("QTAIMYBondCriticalPoints"); QVariant zBondCriticalPointsVariant=m_molecule->property("QTAIMZBondCriticalPoints"); QVariantList xBondCriticalPointsVariantList=xBondCriticalPointsVariant.toList(); QVariantList yBondCriticalPointsVariantList=yBondCriticalPointsVariant.toList(); QVariantList zBondCriticalPointsVariantList=zBondCriticalPointsVariant.toList(); if( xBondCriticalPointsVariantList.length() == yBondCriticalPointsVariantList.length() && xBondCriticalPointsVariantList.length() == zBondCriticalPointsVariantList.length() ) { for( qint64 i=0 ; i < xBondCriticalPointsVariantList.length() ; ++i ) { Eigen::Vector3d xyz; xyz << xBondCriticalPointsVariantList.at(i).toReal(), yBondCriticalPointsVariantList.at(i).toReal(), zBondCriticalPointsVariantList.at(i).toReal(); // map->setFromPrimitive(ncp); pd->painter()->setColor("Yellow"); pd->painter()->drawSphere(xyz, 0.1 ); } } } // normalize normal vectors of bonds glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); // glPopAttrib(); return true; } // Protect globally declared functions in an anonymous namespace namespace { double radiusCovalent(const Atom *atom) { return OpenBabel::etab.GetCovalentRad(atom->atomicNumber()); } double radiusVdW(const Atom *atom) { return OpenBabel::etab.GetVdwRad(atom->atomicNumber()); } } // End of anonymous namespace inline double QTAIMEngine::radius(const Atom *atom) const { if (atom->customRadius()) return atom->customRadius()* m_atomRadiusPercentage; else { if (atom->atomicNumber()) return pRadius(atom) * m_atomRadiusPercentage; } return m_atomRadiusPercentage; } void QTAIMEngine::setAtomRadiusPercentage( int percent ) { m_atomRadiusPercentage = 0.02 * percent; emit changed(); } void QTAIMEngine::setAtomRadiusType(int type) { m_atomRadiusType = type; if (type == 0) pRadius = radiusCovalent; else pRadius = radiusVdW; emit changed(); } void QTAIMEngine::setBondRadius( int value ) { m_bondRadius = value * 0.025; emit changed(); } void QTAIMEngine::setOpacity(int value) { m_alpha = 0.05 * value; emit changed(); } double QTAIMEngine::radius( const PainterDevice *pd, const Primitive *p ) const { // Atom radius if ( p->type() == Primitive::AtomType ) { if ( pd ) { if ( pd->isSelected( p ) ) return radius( static_cast( p ) ) + SEL_ATOM_EXTRA_RADIUS; } return radius( static_cast( p ) ); } // Bond radius else if ( p->type() == Primitive::BondType ) { if ( pd ) { if ( pd->isSelected( p ) ) return m_bondRadius + SEL_BOND_EXTRA_RADIUS; } return m_bondRadius; } // Something else else return 0.; } double QTAIMEngine::transparencyDepth() const { return m_atomRadiusPercentage; } Engine::Layers QTAIMEngine::layers() const { return Engine::Opaque | Engine::Transparent; } QWidget *QTAIMEngine::settingsWidget() { if (!m_settingsWidget) { m_settingsWidget = new QTAIMSettingsWidget(); connect(m_settingsWidget->atomRadiusSlider, SIGNAL(valueChanged(int)), this, SLOT(setAtomRadiusPercentage(int))); connect(m_settingsWidget->combo_radius, SIGNAL(currentIndexChanged(int)), this, SLOT(setAtomRadiusType(int))); connect(m_settingsWidget->bondRadiusSlider, SIGNAL(valueChanged(int)), this, SLOT(setBondRadius(int))); connect(m_settingsWidget->opacitySlider, SIGNAL(valueChanged(int)), this, SLOT(setOpacity(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); m_settingsWidget->atomRadiusSlider->setValue(int(50*m_atomRadiusPercentage)); m_settingsWidget->bondRadiusSlider->setValue(int(50*m_bondRadius)); m_settingsWidget->opacitySlider->setValue(int(20*m_alpha)); m_settingsWidget->combo_radius->setCurrentIndex(m_atomRadiusType); } return m_settingsWidget; } void QTAIMEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } void QTAIMEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("atomRadius", 50*m_atomRadiusPercentage); settings.setValue("radiusType", m_atomRadiusType); settings.setValue("bondRadius", 50*m_bondRadius); settings.setValue("opacity", 20*m_alpha); } void QTAIMEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); setAtomRadiusPercentage(settings.value("atomRadius", 25).toDouble()); setBondRadius(settings.value("bondRadius", 4).toDouble()); setOpacity(settings.value("opacity", 100).toInt()); setAtomRadiusType(settings.value("radiusType", 1).toInt()); if (m_settingsWidget) { m_settingsWidget->atomRadiusSlider->setValue(int(50*m_atomRadiusPercentage)); m_settingsWidget->combo_radius->setCurrentIndex(m_atomRadiusType); m_settingsWidget->bondRadiusSlider->setValue(int(50*m_bondRadius)); m_settingsWidget->opacitySlider->setValue(int(20*m_alpha)); m_settingsWidget->combo_radius->setCurrentIndex(m_atomRadiusType); } } } Q_EXPORT_PLUGIN2( qtaimengine, Avogadro::QTAIMEngineFactory ) avogadro-1.1.1/libavogadro/src/engines/labelengine.h0000644000175000001440000000736512250371054021665 0ustar marcususers/********************************************************************** LabelEngine - Engine for displaying labels. Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2007 Benoit Jacob Copyright (C) 2007 Marcus D. Hanwell Some portions Copyright (C) 2009 Konstantin L. Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef LABELENGINE_H #define LABELENGINE_H #include #include #include #include "ui_labelsettingswidget.h" namespace Avogadro { //! Label Engine class. class Atom; class Bond; class LabelSettingsWidget; class LabelEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Label", tr("Label"), tr("Renders atom and bond labels")) public: //! Constructor LabelEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~LabelEngine() {} //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); bool renderOpaque(PainterDevice *pd, const Atom *a); bool renderOpaque(PainterDevice *pd, const Bond *b); bool renderQuick(PainterDevice *pd); //@} Layers layers() const; ColorTypes colorTypes() const; //! Display a window for the user to pick rendering options QWidget *settingsWidget(); bool hasSettings() { return true; } QString createAtomLabel(const Atom *a); QString createBondLabel(const Bond *b); /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: int m_atomType; // Atom label type int m_bondType; // Bond label type int m_textRendering; int m_lengthPrecision; QFont m_atomFont; QFont m_bondFont; QColor m_atomColor; QColor m_bondColor; Eigen::Vector3d m_displacement; Eigen::Vector3d m_bondDisplacement; LabelSettingsWidget* m_settingsWidget; private Q_SLOTS: void setAtomType(int value); void setTextRendering(int value); void setBondType(int value); void setLengthPrecision(int value); void setAtomColor(QColor); void setBondColor(QColor); void setAtomFont(); void setBondFont(); void updateDisplacement(double = 0.0); void updateBondDisplacement(double = 0.0); void settingsWidgetDestroyed(); }; class LabelSettingsWidget : public QWidget, public Ui::LabelSettingsWidget { public: LabelSettingsWidget(QWidget *parent=0); }; //! Generates instances of our LabelEngine class class LabelEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(LabelEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/surfaceengine.h0000644000175000001440000001026512250371054022227 0ustar marcususers/********************************************************************** SurfaceEngine - Engine for display of isosurface meshes Copyright (C) 2008-2009 Marcus D. Hanwell Copyright (C) 2008 Geoffrey R. Hutchison Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SURFACEENGINE_H #define SURFACEENGINE_H #include #include #include #include #include namespace Avogadro { class Mesh; class SurfaceSettingsWidget; //! Orbital Engine class. class SurfaceEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Surfaces", tr("Surfaces"), tr("Renders molecular isosurface meshes")) public: //! Constructor SurfaceEngine(QObject *parent=0); //! Destructor ~SurfaceEngine(); //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); bool renderTransparent(PainterDevice *pd); bool renderQuick(PainterDevice *pd); bool renderPick(PainterDevice *) { return false; } //@} double transparencyDepth() const; Layers layers() const; PrimitiveTypes primitiveTypes() const; ColorTypes colorTypes() const; Engine *clone() const; QWidget* settingsWidget(); bool hasSettings() { return true; } void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); void setPrimitives(const PrimitiveList &primitives); public slots: void addPrimitive(Primitive *primitive); void updatePrimitive(Primitive *primitive); void removePrimitive(Primitive *primitive); void setMolecule(const Molecule *molecule); void setMolecule(Molecule *molecule); protected: SurfaceSettingsWidget *m_settingsWidget; QPointer m_mesh1; QPointer m_mesh2; Eigen::Vector3d m_min, m_max; Color m_posColor; Color m_negColor; double m_alpha; int m_renderMode; bool m_drawBox; bool m_colored; QList m_meshes; bool renderBox(PainterDevice *pd); private slots: /** * Update the orbital combo box with new orbitals */ void updateOrbitalCombo(); void settingsWidgetDestroyed(); /** * @param value orbital index */ void setOrbital(int value); /** * @param value opacity of the surface / 20 */ void setOpacity(int value); /** * @param value render mode (0 = fill, 1 = wireframe, 2 = points) */ void setRenderMode(int value); /** * @param value interpolate (0 = no, 1 = yes) */ void setDrawBox(int value); /** * @param color render mode - 0 = selected colors, 1 = mapped colors */ void setColorMode(int value); /** * @param color the color for the positive iso surface */ void setPosColor(const QColor& color); /** * @param color the color for the negative iso surface */ void setNegColor(const QColor& color); }; //! Generates instances of our SurfaceEngine class class SurfaceEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(SurfaceEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/qtaimengine.h0000644000175000001440000000714112250371054021711 0ustar marcususers/********************************************************************** QTAIMEngine - Dynamic detail engine for QTAIM display Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef QTAIMENGINE_H #define QTAIMENGINE_H #include #include #include "ui_qtaimsettingswidget.h" namespace Avogadro { //! QTAIM Engine class. class Atom; class QTAIMSettingsWidget; class QTAIMEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("QTAIM", tr("QTAIM"), tr("Renders primitives using QTAIM properties")) public: //! Constructor QTAIMEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~QTAIMEngine(); bool renderOpaque(PainterDevice *pd); bool renderTransparent(PainterDevice *pd); bool renderQuick(PainterDevice *pd); bool renderPick(PainterDevice *pd); double transparencyDepth() const; Engine::Layers layers() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; /** * @return a pointer to the QTAIMEngine settings widget */ QWidget *settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: double radius(const Atom *atom) const; double (*pRadius)(const Atom *atom); QTAIMSettingsWidget *m_settingsWidget; double m_atomRadiusPercentage; double m_bondRadius; int m_atomRadiusType; double m_alpha; // transparency of the balls & sticks private Q_SLOTS: void settingsWidgetDestroyed(); /** * @param percent percentage of the VdwRad */ void setAtomRadiusPercentage(int percent); /** * @param value determines if covalent or VdW radii are used */ void setAtomRadiusType(int value); /** * @param value radius of the bonds * 10 */ void setBondRadius(int value); /** * @param value opacity of the balls & sticks / 20 */ void setOpacity(int value); }; class QTAIMSettingsWidget : public QWidget, public Ui::QTAIMSettingsWidget { public: QTAIMSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; class QTAIMEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(QTAIMEngine); }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/cartoonsettingswidget.ui0000644000175000001440000002634612250371054024240 0ustar marcususers CartoonSettingsWidget 0 0 334 285 Shape Helix Qt::Horizontal 1 20 a 1 1.000000000000000 0.100000000000000 1.000000000000000 b 1 1.000000000000000 0.100000000000000 0.300000000000000 c 1 1.000000000000000 0.100000000000000 1.000000000000000 Sheet Qt::Horizontal 5 20 a 1 1.000000000000000 0.100000000000000 1.000000000000000 b 1 1.000000000000000 0.100000000000000 0.300000000000000 c 1 1.000000000000000 0.100000000000000 1.000000000000000 Loop Qt::Horizontal 62 20 a 1 1.000000000000000 0.100000000000000 0.200000000000000 b 1 1.000000000000000 0.100000000000000 0.200000000000000 c 1 1.000000000000000 0.100000000000000 0.000000000000000 Colors Helix Qt::Horizontal 239 20 Sheet Qt::Horizontal 243 20 Loop Qt::Horizontal 239 20 Avogadro::ColorButton QWidget
avogadro/colorbutton.h
1
avogadro-1.1.1/libavogadro/src/engines/labelsettingswidget.ui0000644000175000001440000004535212250371054023650 0ustar marcususers LabelSettingsWidget 0 0 300 358 10 0 Rendering Engine: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 TextRenderer QPainter Atom Labels 0 0 Text: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Color: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 0 1 0 0 0 None Atom number Element symbol Symbol & Number in Group Symbol & Atom number Formal charge Partial charge Element name Residue name Residue number Unique ID Custom data 0 0 0 25 0 0 Change Font 0 true 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter x : 3 -99.989999999999995 0.020000000000000 0.000000000000000 true 0 0 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter y : 3 -99.989999999999995 0.020000000000000 true 0 0 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter z : 3 -99.989999999999995 0.020000000000000 true 0 0 Label Shift: Qt::AutoText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter Qt::Vertical 20 20 Bond Labels 0 0 true 0 0 Label Shift: Qt::AutoText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter true 0 0 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter x : 3 -99.989999999999995 0.020000000000000 0.000000000000000 true 0 0 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter y : 3 -99.989999999999995 0.020000000000000 true 0 0 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter z : 3 -99.989999999999995 0.020000000000000 Color: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 0 0 25 0 0 Change Font 0 0 Text: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 1 0 1 0 0 0 None Bond length Bond number Bond order Unique ID false Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 8 3 Avogadro::ColorButton QWidget
avogadro/colorbutton.h
1
avogadro-1.1.1/libavogadro/src/engines/wireengine.h0000644000175000001440000000657012250371054021551 0ustar marcususers/********************************************************************** WireEngine - Engine for wireframe display Copyright (C) 2006-2007 Geoffrey R. Hutchison Copyright (C) 2006-2007 Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef WIREENGINE_H #define WIREENGINE_H #include #include #include "ui_wiresettingswidget.h" namespace Avogadro { class Atom; class Bond; class WireSettingsWidget; //! Wireframe Engine class. class WireEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Wireframe", tr("Wireframe"), tr("Renders bonds as wires (lines), ideal for very large (bio)molecules")) public: //! Constructor WireEngine(QObject *parent=0); //! Deconstructor ~WireEngine() {} //! Copy Engine *clone() const; //! \name Render Methods //@{ //! Render an Atom. bool renderOpaque(PainterDevice *pd, const Atom *a); //! Render a Bond. bool renderOpaque(PainterDevice *pd, const Bond *b); //! Override of render opaque for the engine. bool renderOpaque(PainterDevice *pd); //! Override of render pick - help the picking. bool renderPick(PainterDevice *pd); //@} //! Configuration options QWidget* settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: WireSettingsWidget *m_settingsWidget; int m_showMulti; //!< show multiple bonds int m_showDots; //!< show dots for atoms double radius (const Atom *atom) const; private Q_SLOTS: void settingsWidgetDestroyed(); /** * @param setting whether to show multiple bonds */ void setShowMultipleBonds(int setting); /** * @param setting whether to show dots for atoms */ void setShowDots(int setting); }; class WireSettingsWidget : public QWidget, public Ui::WireSettingsWidget { public: WireSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our WireEngine class class WireEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(WireEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/dipoleengine.cpp0000644000175000001440000001311212250371054022400 0ustar marcususers/********************************************************************** DipoleEngine - Engine to display a 3D vector such as the dipole moment Copyright (C) 2008 Marcus D. Hanwell Some portions Copyright (C) 2009 Konstantin L. Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "dipoleengine.h" #include #include #include #include #include #include using namespace Eigen; namespace Avogadro { DipoleEngine::DipoleEngine(QObject *parent) : Engine(parent), m_dipoleType(0), m_origin(0,0,0), m_settingsWidget(0) { m_dipole.x() = 0.0; m_dipole.y() = 0.0; m_dipole.z() = 0.0; } DipoleEngine::~DipoleEngine() { // Delete the settings widget if it exists if(m_settingsWidget) m_settingsWidget->deleteLater(); } Engine* DipoleEngine::clone() const { DipoleEngine* engine = new DipoleEngine(parent()); engine->setAlias(alias()); engine->setEnabled(isEnabled()); return engine; } bool DipoleEngine::renderOpaque(PainterDevice *pd) { Molecule *mol = const_cast(pd->molecule()); m_molecule = mol; updateDipole(); Vector3d joint = m_origin+3*m_dipole*0.8; // 80% along the length pd->painter()->setColor(1.0, 0.0, 0.0); pd->painter()->drawCylinder(m_origin, joint, 0.05); pd->painter()->drawCone(joint, m_origin+3*m_dipole, 0.4); // TODO: add a "cross" line for the <--+ look to the dipole moment) return true; } double DipoleEngine::radius(const PainterDevice *, const Primitive *) const { return 0.0; } double DipoleEngine::transparencyDepth() const { return 1.0; } Engine::Layers DipoleEngine::layers() const { return Engine::Overlay; } Engine::PrimitiveTypes DipoleEngine::primitiveTypes() const { return Engine::NoPrimitives; } Engine::ColorTypes DipoleEngine::colorTypes() const { return Engine::NoColors; } QWidget *DipoleEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new DipoleSettingsWidget(); m_settingsWidget->dipoleType->setCurrentIndex(m_dipoleType); connect(m_settingsWidget->dipoleType, SIGNAL(activated(int)), this, SLOT(setDipoleType(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); connect(m_settingsWidget->xDipoleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateDipole(double))); connect(m_settingsWidget->yDipoleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateDipole(double))); connect(m_settingsWidget->zDipoleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateDipole(double))); connect(m_settingsWidget->xOriginSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateOrigin(double))); connect(m_settingsWidget->yOriginSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateOrigin(double))); connect(m_settingsWidget->zOriginSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateOrigin(double))); } return m_settingsWidget; } void DipoleEngine::setDipoleType(int value) { m_dipoleType = value; updateDipole(); if (m_dipoleType != 1) { // not the custom version m_settingsWidget->customLabel->setEnabled(false); m_settingsWidget->xDipoleSpinBox->setEnabled(false); m_settingsWidget->yDipoleSpinBox->setEnabled(false); m_settingsWidget->zDipoleSpinBox->setEnabled(false); } else { m_settingsWidget->customLabel->setEnabled(true); m_settingsWidget->xDipoleSpinBox->setEnabled(true); m_settingsWidget->yDipoleSpinBox->setEnabled(true); m_settingsWidget->zDipoleSpinBox->setEnabled(true); } emit changed(); } void DipoleEngine::updateDipole(double) { switch(m_dipoleType) { case 1: // custom m_dipole = Vector3d(m_settingsWidget->xDipoleSpinBox->value(), m_settingsWidget->yDipoleSpinBox->value(), m_settingsWidget->zDipoleSpinBox->value()); break; default: // embedded OBGenericData type -- handle m_dipole = m_molecule->dipoleMoment(); } emit changed(); } void DipoleEngine::updateOrigin(double) { m_origin = Vector3d(m_settingsWidget->xOriginSpinBox->value(), m_settingsWidget->yOriginSpinBox->value(), m_settingsWidget->zOriginSpinBox->value()); emit changed(); } void DipoleEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } } Q_EXPORT_PLUGIN2(dipoleengine, Avogadro::DipoleEngineFactory) avogadro-1.1.1/libavogadro/src/engines/axessettingswidget.ui0000644000175000001440000003146512250371054023531 0ustar marcususers AxesSettingsWidget 0 0 459 204 10 0 Axes: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 0 1 0 0 0 Cartesian Axes Orthogonal Axes Custom Axes true Axis 1: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 6 -57.000000000000000 57.000000000000000 0.100000000000000 1.000000000000000 false 6 -57.000000000000000 57.000000000000000 0.100000000000000 false 6 -57.000000000000000 57.000000000000000 0.100000000000000 true 6 0.000001000000000 0.100000000000000 1.000000000000000 true Axis 2: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 6 -57.000000000000000 57.000000000000000 0.100000000000000 false 6 -57.000000000000000 57.000000000000000 0.100000000000000 1.000000000000000 false 6 -57.000000000000000 57.000000000000000 0.100000000000000 true 6 0.000001000000000 0.100000000000000 1.000000000000000 true Axis 3: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 6 -57.000000000000000 57.000000000000000 0.100000000000000 false 6 -57.000000000000000 57.000000000000000 0.100000000000000 false 6 -57.000000000000000 57.000000000000000 0.100000000000000 1.000000000000000 true 6 0.000001000000000 0.100000000000000 1.000000000000000 Qt::Vertical 20 40 true 6 -99.989999999999995 0.100000000000000 0.000000000000000 true 6 -99.989999999999995 0.100000000000000 true 6 -99.989999999999995 0.100000000000000 X Qt::AlignCenter true Origin: Qt::AutoText Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Y Qt::AlignCenter Z Qt::AlignCenter Norm Qt::AlignCenter Preserve vector norms avogadro-1.1.1/libavogadro/src/engines/python/0000755000175000001440000000000012250371054020555 5ustar marcususersavogadro-1.1.1/libavogadro/src/engines/python/wireframe.py0000644000175000001440000000356112250371054023115 0ustar marcususersfrom PyQt4.Qt import * import Avogadro class Engine(QObject): # declare the changed() signal __pyqtSignals__ = ("changed()",) # constructor def __init__(self): QObject.__init__(self) self.widget = None self.width = 1 def name(self): return "Python Wireframe Engine" def flags(self): return Avogadro.EngineFlags.NoFlags # slot @pyqtSignature("int") def sliderChanged(self, value): self.width = value self.emit(SIGNAL("changed()")) def settingsWidget(self): self.widget = QWidget() layout = QVBoxLayout(self.widget) self.widget.setLayout(layout) label = QLabel("Wireframe width:", self.widget) slider = QSlider(Qt.Horizontal, self.widget) slider.setMinimum(1) slider.setMaximum(5) slider.setValue(self.width) layout.addWidget(label) layout.addWidget(slider) layout.addStretch() QObject.connect(slider, SIGNAL("valueChanged(int)"), self, SLOT("sliderChanged(int)")) return self.widget def renderOpaque(self, pd): # Painter painter = pd.painter # Molecule molecule = pd.molecule # Color color = pd.colorMap for bond in molecule.bonds: beginAtom = molecule.atomById(bond.beginAtomId) endAtom = molecule.atomById(bond.endAtomId) delta = beginAtom.pos - endAtom.pos center = (beginAtom.pos + endAtom.pos) / 2 color.setFromPrimitive(beginAtom) painter.setColor(color) painter.drawLine(beginAtom.pos, center, self.width) color.setFromPrimitive(endAtom) painter.setColor(color) painter.drawLine(endAtom.pos, center, self.width) def readSettings(self, settings): # As opposed to C++, in PyQt4 toInt() returns a tuple, # converted value is the first element self.width = settings.value("width", 1).toInt()[0] def writeSettings(self, settings): settings.setValue("width", self.width) avogadro-1.1.1/libavogadro/src/engines/bsdyengine.cpp0000644000175000001440000004026412250371054022075 0ustar marcususers/********************************************************************** BSDYEngine - Dynamic detail engine for "balls and sticks" display Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "bsdyengine.h" #include #include #include #include #include #include #include #include // for OpenGL bits #include #include using namespace std; using namespace Eigen; namespace Avogadro { // our sort function /* Camera *camera = 0; bool sortCameraFarthest( const Primitive* lhs, const Primitive* rhs ) { if ( !lhs ) { if ( rhs ) { return true; } else { return false; } } if ( lhs->type() == Primitive::BondType && rhs->type() == Primitive::BondType ) { if ( camera ) { const Bond *l = static_cast( lhs ); const Bond *r = static_cast( rhs ); const Atom* latom1 = static_cast( l->GetBeginAtom() ); const Atom* latom2 = static_cast( l->GetEndAtom() ); Vector3d lv1( latom1->pos() ); Vector3d lv2( latom2->pos() ); Vector3d ld1 = lv2 - lv1; ld1.normalize(); const Atom* ratom1 = static_cast( r->GetBeginAtom() ); const Atom* ratom2 = static_cast( r->GetEndAtom() ); Vector3d rv1( ratom1->pos() ); Vector3d rv2( ratom2->pos() ); Vector3d rd1 = rv2 - rv1; return camera->distance( ld1 ) >= camera->distance( rd1 ); } } else if ( lhs->type() == Primitive::AtomType && rhs->type() == Primitive::AtomType ) { if ( camera ) { const Atom *l = static_cast( lhs ); const Atom *r = static_cast( rhs ); return camera->distance( l->pos() ) >= camera->distance( r->pos() ); } } return false; } */ // Protect globally declared functions in an anonymous namespace namespace { double radiusCovalent(const Atom *atom) { return OpenBabel::etab.GetCovalentRad(atom->atomicNumber()); } double radiusVdW(const Atom *atom) { return OpenBabel::etab.GetVdwRad(atom->atomicNumber()); } } // End of anonymous namespace BSDYEngine::BSDYEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_atomRadiusPercentage(0.3), m_atomRadiusScale(50.0), m_bondRadius(0.1), m_bondRadiusScale(40.0), m_atomRadiusType(1), m_showMulti(2), m_alpha(1.), pRadius(radiusVdW) { } Engine *BSDYEngine::clone() const { BSDYEngine *engine = new BSDYEngine(parent()); engine->setAlias(alias()); engine->m_atomRadiusPercentage = m_atomRadiusPercentage; engine->m_bondRadius = m_bondRadius; engine->m_showMulti = m_showMulti; engine->m_atomRadiusType = m_atomRadiusType; engine->m_alpha = m_alpha; engine->setEnabled(isEnabled()); return engine; } BSDYEngine::~BSDYEngine() { if ( m_settingsWidget ) { m_settingsWidget->deleteLater(); } } bool BSDYEngine::renderOpaque( PainterDevice *pd ) { // glPushAttrib( GL_TRANSFORM_BIT ); // Render the opaque balls & sticks if m_alpha is 1 if (m_alpha < 0.999) { return true; } Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map // Render the bonds foreach(const Bond *b, bonds()) { Atom* atom1 = pd->molecule()->atomById(b->beginAtomId()); Atom* atom2 = pd->molecule()->atomById(b->endAtomId()); if (!atom1 || !atom2) { qDebug() << "Invalid bond atom IDs" << b->beginAtomId() << atom1 << b->endAtomId() << atom2 << "Bond" << b->id(); continue; } Vector3d v1(*atom1->pos()); Vector3d v2(*atom2->pos()); Vector3d d = v2 - v1; d.normalize(); Vector3d v3((v1 + v2 + d*(radius(atom1) - radius(atom2))) / 2); double shift = 0.15; int order = 1; if (m_showMulti) order = b->order(); map->setFromPrimitive(atom1); if (atom1->customColorName().isEmpty()) pd->painter()->setColor( map ); else pd->painter()->setColor(atom1->customColorName()); pd->painter()->drawMultiCylinder( v1, v3, m_bondRadius, order, shift ); map->setFromPrimitive(atom2); if (atom2->customColorName().isEmpty()) pd->painter()->setColor( map ); else pd->painter()->setColor(atom2->customColorName()); pd->painter()->drawMultiCylinder( v3, v2, m_bondRadius, order, shift ); } glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); // Render the atoms foreach(const Atom *a, atoms()) { map->setFromPrimitive(a); if (a->customColorName().isEmpty()) pd->painter()->setColor( map ); else pd->painter()->setColor(a->customColorName()); pd->painter()->drawSphere(a->pos(), radius(a)); } // normalize normal vectors of bonds glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); // glPopAttrib(); return true; } bool BSDYEngine::renderTransparent(PainterDevice *pd) { // Render selections when not renderquick Color *map = colorMap(); if (!map) map = pd->colorMap(); Color selectionMap; selectionMap.setToSelectionColor(); glDisable( GL_NORMALIZE ); glEnable( GL_RESCALE_NORMAL ); foreach(const Atom *a, atoms()) { // First render the atom if it is transparent. if (m_alpha < 0.999 && m_alpha > 0.001) { if (a->customColorName().isEmpty()) { map->setFromPrimitive(a); map->setAlpha(m_alpha); pd->painter()->setColor( map ); } else { QColor customColor (a->customColorName()); customColor.setAlphaF(m_alpha); pd->painter()->setColor(&customColor); } pd->painter()->drawSphere(a->pos(), radius(a)); } // If the atom is selected render the selection if (pd->isSelected(a)) { pd->painter()->setColor(&selectionMap); pd->painter()->drawSphere(a->pos(), SEL_ATOM_EXTRA_RADIUS + radius(a)); } } glDisable( GL_RESCALE_NORMAL ); glEnable( GL_NORMALIZE ); foreach(const Bond *b, bonds()) { // If the bond is not selected and balls and sticks are opaque do not render it if (!pd->isSelected(b) && m_alpha > 0.999) continue; Atom* atom1 = pd->molecule()->atomById(b->beginAtomId()); Atom* atom2 = pd->molecule()->atomById(b->endAtomId()); if (!atom1 || !atom2) { qDebug() << "Invalid bond atom IDs" << b->beginAtomId() << atom1 << b->endAtomId() << atom2 << "Bond" << b->id(); continue; } Vector3d v1(*atom1->pos()); Vector3d v2(*atom2->pos()); Vector3d d = v2 - v1; d.normalize(); Vector3d v3((v1 + v2 + d*(radius(atom1) - radius(atom2))) / 2); double shift = 0.15; int order = 1; if (m_showMulti) order = b->order(); // The "inner" bond has to be rendered first. if (m_alpha < 0.999 && m_alpha > 0.001) { if (atom1->customColorName().isEmpty()) { map->setFromPrimitive(atom1); map->setAlpha(m_alpha); pd->painter()->setColor( map ); } else { QColor customColor (atom1->customColorName()); customColor.setAlphaF(m_alpha); pd->painter()->setColor(&customColor); } pd->painter()->drawMultiCylinder( v1, v3, m_bondRadius, order, shift ); if (atom2->customColorName().isEmpty()) { map->setFromPrimitive(atom2); map->setAlpha(m_alpha); pd->painter()->setColor( map ); } else { QColor customColor (atom2->customColorName()); customColor.setAlphaF(m_alpha); pd->painter()->setColor(&customColor); } pd->painter()->drawMultiCylinder( v3, v2, m_bondRadius, order, shift ); } // Render the selected bond. if (pd->isSelected(b)) { pd->painter()->setColor(&selectionMap); pd->painter()->drawMultiCylinder( v1, v2, SEL_BOND_EXTRA_RADIUS + m_bondRadius, order, shift ); } } return true; } bool BSDYEngine::renderQuick(PainterDevice *pd) { Color *map = colorMap(); // possible custom color map if (!map) map = pd->colorMap(); // fall back to global color map Color cSel; cSel.setToSelectionColor(); // Render the bonds foreach(Bond *b, bonds()) { Atom* atom1 = pd->molecule()->atomById(b->beginAtomId()); Atom* atom2 = pd->molecule()->atomById(b->endAtomId()); Vector3d v1(*atom1->pos()); Vector3d v2(*atom2->pos()); Vector3d d = v2 - v1; d.normalize(); Vector3d v3((v1 + v2 + d*(radius(atom1)-radius(atom2))) / 2); double shift = 0.15; int order = 1; if (m_showMulti) order = b->order(); if (pd->isSelected(b)) { pd->painter()->setColor(&cSel); pd->painter()->drawMultiCylinder(v1, v2, SEL_BOND_EXTRA_RADIUS + m_bondRadius, order, shift); } else { map->setFromPrimitive(atom1); pd->painter()->setColor(map); pd->painter()->drawMultiCylinder(v1, v3, m_bondRadius, order, shift); map->setFromPrimitive( atom2 ); pd->painter()->setColor(map); pd->painter()->drawMultiCylinder(v3, v2, m_bondRadius, order, shift); } } glDisable(GL_NORMALIZE); glEnable(GL_RESCALE_NORMAL); // Render the atoms foreach(Atom *a, atoms()) { if (pd->isSelected(a)) { pd->painter()->setColor(&cSel); pd->painter()->drawSphere(a->pos(), SEL_ATOM_EXTRA_RADIUS + radius(a)); } else { map->setFromPrimitive(a); pd->painter()->setColor(map); pd->painter()->drawSphere(a->pos(), radius(a)); } } // normalize normal vectors of bonds glDisable(GL_RESCALE_NORMAL); glEnable(GL_NORMALIZE); return true; } bool BSDYEngine::renderPick(PainterDevice *pd) { // Render the bonds foreach(Bond *b, bonds()) { pd->painter()->setName(b); // Add a slight slop factor to make it easier to pick // (e.g., for bond-centric tool) pd->painter()->drawCylinder(*b->beginPos(), *b->endPos(), m_bondRadius+0.05); } // Render the atoms foreach(Atom *a, atoms()) { pd->painter()->setName(a); // add a slight "slop" factor to make it easier to pick // (e.g., during drawing) // heavy atoms get a bit more, hydrogens get a bit less if (a->atomicNumber() > 1) pd->painter()->drawSphere(a->pos(), radius(a) + 0.03); else pd->painter()->drawSphere(a->pos(), radius(a) - 0.06); } return true; } inline double BSDYEngine::radius(const Atom *atom) const { if (atom->customRadius()) return atom->customRadius()* m_atomRadiusPercentage; else { if (atom->atomicNumber()) return pRadius(atom) * m_atomRadiusPercentage; } return m_atomRadiusPercentage; } void BSDYEngine::setAtomRadiusPercentage(int value) { m_atomRadiusPercentage = value / m_atomRadiusScale; emit changed(); } void BSDYEngine::setAtomRadiusType(int type) { m_atomRadiusType = type; if (type == 0) pRadius = radiusCovalent; else pRadius = radiusVdW; emit changed(); } void BSDYEngine::setBondRadius(int value) { m_bondRadius = value / m_bondRadiusScale; emit changed(); } void BSDYEngine::setShowMulti(int value) { m_showMulti = value; emit changed(); } void BSDYEngine::setOpacity(int value) { m_alpha = 0.05 * value; emit changed(); } double BSDYEngine::radius( const PainterDevice *pd, const Primitive *p ) const { // Atom radius if ( p->type() == Primitive::AtomType ) { if ( pd ) { if ( pd->isSelected( p ) ) return radius( static_cast( p ) ) + SEL_ATOM_EXTRA_RADIUS; } return radius( static_cast( p ) ); } // Bond radius else if ( p->type() == Primitive::BondType ) { if ( pd ) { if ( pd->isSelected( p ) ) return m_bondRadius + SEL_BOND_EXTRA_RADIUS; } return m_bondRadius; } // Something else else return 0.; } double BSDYEngine::transparencyDepth() const { return m_atomRadiusPercentage; } Engine::Layers BSDYEngine::layers() const { return Engine::Opaque | Engine::Transparent; } QWidget *BSDYEngine::settingsWidget() { if (!m_settingsWidget) { m_settingsWidget = new BSDYSettingsWidget(); connect(m_settingsWidget->atomRadiusSlider, SIGNAL(valueChanged(int)), this, SLOT(setAtomRadiusPercentage(int))); connect(m_settingsWidget->combo_radius, SIGNAL(currentIndexChanged(int)), this, SLOT(setAtomRadiusType(int))); connect(m_settingsWidget->bondRadiusSlider, SIGNAL(valueChanged(int)), this, SLOT(setBondRadius(int))); connect(m_settingsWidget->showMulti, SIGNAL(stateChanged(int)), this, SLOT(setShowMulti(int))); connect(m_settingsWidget->opacitySlider, SIGNAL(valueChanged(int)), this, SLOT(setOpacity(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); m_settingsWidget->atomRadiusSlider ->setValue(int(m_atomRadiusScale * m_atomRadiusPercentage)); m_settingsWidget->bondRadiusSlider ->setValue(int(m_bondRadiusScale * m_bondRadius)); m_settingsWidget->showMulti->setCheckState((Qt::CheckState)m_showMulti); m_settingsWidget->opacitySlider->setValue(int(20 * m_alpha)); m_settingsWidget->combo_radius->setCurrentIndex(m_atomRadiusType); } return m_settingsWidget; } void BSDYEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } void BSDYEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("atomRadius", m_atomRadiusScale * m_atomRadiusPercentage); settings.setValue("radiusType", m_atomRadiusType); settings.setValue("bondRadius", m_bondRadiusScale * m_bondRadius); settings.setValue("showMulti", m_showMulti); settings.setValue("opacity", 20 * m_alpha); } void BSDYEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); setAtomRadiusPercentage(settings.value("atomRadius", 25).toDouble()); setBondRadius(settings.value("bondRadius", 4).toDouble()); setShowMulti(settings.value("showMulti", 2).toInt()); setOpacity(settings.value("opacity", 100).toInt()); setAtomRadiusType(settings.value("radiusType", 1).toInt()); if (m_settingsWidget) { m_settingsWidget->atomRadiusSlider ->setValue(int(m_atomRadiusScale * m_atomRadiusPercentage)); m_settingsWidget->combo_radius->setCurrentIndex(m_atomRadiusType); m_settingsWidget->bondRadiusSlider ->setValue(int(m_bondRadiusScale * m_bondRadius)); m_settingsWidget->showMulti->setCheckState((Qt::CheckState)m_showMulti); m_settingsWidget->opacitySlider->setValue(int(20 * m_alpha)); m_settingsWidget->combo_radius->setCurrentIndex(m_atomRadiusType); } } } Q_EXPORT_PLUGIN2( bsdyengine, Avogadro::BSDYEngineFactory ) avogadro-1.1.1/libavogadro/src/engines/labelengine.cpp0000644000175000001440000003321512250371054022211 0ustar marcususers/********************************************************************** LabelEngine - Engine for displaying labels. Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2007 Benoit Jacob Copyright (C) 2007,2008 Marcus D. Hanwell Some portions Copyright (C) 2009 Konstantin L. Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "labelengine.h" #include #include #include #include #include #include #include #include #include #include #include #include //#include #include using namespace std; using namespace Eigen; namespace Avogadro { LabelSettingsWidget::LabelSettingsWidget(QWidget *parent) : QWidget(parent) { setupUi(this); } LabelEngine::LabelEngine(QObject *parent) : Engine(parent), m_atomType(3), m_bondType(0), m_textRendering(0), m_lengthPrecision(3), m_atomColor(255,255,255), m_bondColor(255,255,255), m_displacement(0,0,0), m_bondDisplacement(0,0,0), m_settingsWidget(0) { } Engine *LabelEngine::clone() const { LabelEngine *engine = new LabelEngine(parent()); engine->setAlias(alias()); engine->setAtomType(m_atomType); engine->setBondType(m_bondType); engine->setEnabled(isEnabled()); return engine; } bool LabelEngine::renderOpaque(PainterDevice *pd) { if (m_atomType > 0) { // Render atom labels foreach(Atom *a, atoms()) renderOpaque(pd, a); } // Now render the bond labels foreach(Bond *b, bonds()) renderOpaque(pd, b); return true; } bool LabelEngine::renderQuick(PainterDevice *) { // Don't render text when moving... return true; } bool LabelEngine::renderOpaque(PainterDevice *pd, const Atom *a) { // Render atom labels const Vector3d pos = *a->pos(); double renderRadius = pd->radius(a); renderRadius += 0.05; double zDistance = pd->camera()->distance(pos); if(zDistance < 50.0) { QString str = createAtomLabel(a); Vector3d zAxis = pd->camera()->backTransformedZAxis(); Vector3d drawPos = pos + zAxis * renderRadius + m_displacement; glColor3f(m_atomColor.redF(), m_atomColor.greenF(), m_atomColor.blueF()); if (m_textRendering == 0) pd->painter()->drawText(drawPos, str); else pd->painter()->drawText(drawPos, str, m_atomFont); } return true; } QString LabelEngine::createAtomLabel(const Atom *a) { unsigned int gi; QString str = QString(a->customLabel()); if (str.isEmpty()) { switch(m_atomType) { case 1: // Atom index str = QString("%L1").arg(a->index() + 1); break; case 2: // Element Symbol str = QString(OpenBabel::etab.GetSymbol(a->atomicNumber())); break; case 3: // Symbol & Number in Group gi = a->groupIndex(); if (gi != 0) { str = QString(OpenBabel::etab.GetSymbol(a->atomicNumber())) + QString("%L1").arg(gi); } else { str = QString(OpenBabel::etab.GetSymbol(a->atomicNumber())); } break; case 4: // Symbol & Atom Number str = QString(OpenBabel::etab.GetSymbol(a->atomicNumber())) + QString("%L1").arg(a->index() + 1); break; case 5: // Formal charge if (a->formalCharge()) str = QString("%L1").arg(a->formalCharge()); break; case 6: // Partial charge str = QString("%L1").arg(const_cast(a)->partialCharge(), 0, 'g', 2); break; case 7: // Element name str = ElementTranslator::name(a->atomicNumber()); break; case 8: // Residue name if (a->residue()) str = a->residue()->name(); break; case 9: // Residue number if (a->residue()) str = a->residue()->number(); break; case 10: // Unique ID str = QString("%L1").arg(a->id()); break; default: // some custom data -- if available int customIndex = m_atomType - 7 - 1; QList propertyNames = a->dynamicPropertyNames(); // If this is a strange offset, use the element symbol if ( customIndex < 0 || customIndex >= propertyNames.size()) str = QString(OpenBabel::etab.GetSymbol(a->atomicNumber())); else str = a->property(propertyNames[customIndex].data()).toString(); } } // str.isEmpty() return str; } QString LabelEngine::createBondLabel(const Bond *b) { QString str = QString(b->customLabel()); if (str.isEmpty()) { switch(m_bondType) { case 1: str = QString("%L1").arg(b->length(), 0, 'g', 1+m_lengthPrecision); break; case 2: str = QString("%L1").arg(b->index() + 1); break; case 4: str = QString("%L1").arg(b->id()); break; case 3: str = QString("%L1").arg(b->order()); } } return str; } bool LabelEngine::renderOpaque(PainterDevice *pd, const Bond *b) { // Render bond labels Atom* atom1 = pd->molecule()->atomById(b->beginAtomId()); Atom* atom2 = pd->molecule()->atomById(b->endAtomId()); Vector3d v1 (*atom1->pos()); Vector3d v2 (*atom2->pos()); Vector3d d = v2 - v1; d.normalize(); // Work out the radii of the atoms and the bond double renderRadius = pd->radius(b); double renderRadiusA1 = pd->radius(atom1); double renderRadiusA2 = pd->radius(atom2); // If the render radius is zero then this view does not draw bonds if (renderRadius < 1.0e-3) return false; renderRadius += 0.05; // Calculate the Vector3d pos((v1 + v2 + d*(renderRadiusA1-renderRadiusA2)) / 2.0); double zDistance = pd->camera()->distance(pos); if(zDistance < 50.0) { QString str = createBondLabel(b); Vector3d zAxis = pd->camera()->backTransformedZAxis(); Vector3d drawPos = pos + zAxis * renderRadius + m_bondDisplacement; glColor3f(m_bondColor.redF(), m_bondColor.greenF(), m_bondColor.blueF()); if (m_textRendering == 0) pd->painter()->drawText(drawPos, str); else pd->painter()->drawText(drawPos, str, m_bondFont); } return true; } void LabelEngine::setAtomType(int value) { m_atomType = value; emit changed(); } void LabelEngine::setTextRendering(int value) { m_textRendering = value; if (!m_settingsWidget) return; if (value == 0) { m_settingsWidget->atomFont->setEnabled(false); m_settingsWidget->bondFont->setEnabled(false); } else { m_settingsWidget->atomFont->setEnabled(true); m_settingsWidget->bondFont->setEnabled(true); } emit changed(); } void LabelEngine::setBondType(int value) { m_bondType = value; if (!m_settingsWidget) return; if (value == 1) m_settingsWidget->lengthPrecision->setEnabled(true); else m_settingsWidget->lengthPrecision->setEnabled(false); emit changed(); } void LabelEngine::setLengthPrecision(int value) { m_lengthPrecision = value; if (m_settingsWidget) emit changed(); } void LabelEngine::updateDisplacement(double) { m_displacement = Vector3d(m_settingsWidget->xDisplSpinBox->value(), m_settingsWidget->yDisplSpinBox->value(), m_settingsWidget->zDisplSpinBox->value()); emit changed(); } void LabelEngine::updateBondDisplacement(double) { m_bondDisplacement = Vector3d(m_settingsWidget->xBondDisplSpinBox->value(), m_settingsWidget->yBondDisplSpinBox->value(), m_settingsWidget->zBondDisplSpinBox->value()); emit changed(); } QWidget *LabelEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new LabelSettingsWidget(); m_settingsWidget->atomType->setCurrentIndex(m_atomType); m_settingsWidget->bondType->setCurrentIndex(m_bondType); setAtomType(m_atomType); setBondType(m_bondType); m_settingsWidget->atomColor->setColor(m_atomColor); m_settingsWidget->atomColor->setDialogTitle(tr("Select Atom Labels Color")); m_settingsWidget->bondColor->setColor(m_bondColor); m_settingsWidget->bondColor->setDialogTitle(tr("Select Bond Labels Color")); // Hide the text rendering engine choice and label for release builds #ifndef DEBUG m_settingsWidget->textRendering->hide(); m_settingsWidget->label_3->hide(); #endif connect(m_settingsWidget->atomType, SIGNAL(activated(int)), this, SLOT(setAtomType(int))); connect(m_settingsWidget->textRendering, SIGNAL(activated(int)), this, SLOT(setTextRendering(int))); connect(m_settingsWidget->atomColor, SIGNAL(colorChanged(QColor)), this, SLOT(setAtomColor(QColor))); connect(m_settingsWidget->atomFont, SIGNAL(clicked()), this, SLOT(setAtomFont())); connect(m_settingsWidget->bondType, SIGNAL(activated(int)), this, SLOT(setBondType(int))); connect(m_settingsWidget->lengthPrecision, SIGNAL(valueChanged(int)), this, SLOT(setLengthPrecision(int))); connect(m_settingsWidget->bondColor, SIGNAL(colorChanged(QColor)), this, SLOT(setBondColor(QColor))); connect(m_settingsWidget->bondFont, SIGNAL(clicked()), this, SLOT(setBondFont())); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); connect(m_settingsWidget->xDisplSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateDisplacement(double))); connect(m_settingsWidget->yDisplSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateDisplacement(double))); connect(m_settingsWidget->zDisplSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateDisplacement(double))); connect(m_settingsWidget->xBondDisplSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateBondDisplacement(double))); connect(m_settingsWidget->yBondDisplSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateBondDisplacement(double))); connect(m_settingsWidget->zBondDisplSpinBox, SIGNAL(valueChanged(double)), this, SLOT(updateBondDisplacement(double))); } return m_settingsWidget; } void LabelEngine::setAtomColor(QColor color) { m_atomColor = color; emit changed(); } void LabelEngine::setAtomFont() { bool ok; QFont current(m_atomFont); QFont font = QFontDialog::getFont(&ok, current, m_settingsWidget, tr("Select Atom Labels Font")); if (ok) { m_atomFont = font; emit changed(); } } void LabelEngine::setBondColor(QColor color) { m_bondColor = color; emit changed(); } void LabelEngine::setBondFont() { bool ok; QFont current(m_bondFont); QFont font = QFontDialog::getFont(&ok, current, m_settingsWidget, tr("Select Bond Labels Font")); if (ok) { m_bondFont = font; emit changed(); } } void LabelEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } Engine::Layers LabelEngine::layers() const { return Engine::Overlay; } Engine::ColorTypes LabelEngine::colorTypes() const { return Engine::NoColors; } void LabelEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("atomLabel", m_atomType); settings.setValue("bondLabel", m_bondType); settings.setValue("m_lengthPrecision", m_lengthPrecision); settings.setValue("atomFont", m_atomFont); settings.setValue("bondFont", m_bondFont); settings.setValue("atomColor", m_atomColor); settings.setValue("bondColor", m_bondColor); } void LabelEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); setAtomType(settings.value("atomLabel", 3).toInt()); setBondType(settings.value("bondLabel", 0).toInt()); m_lengthPrecision = settings.value("m_lengthPrecision", 3).toInt(); m_atomFont = settings.value("atomFont", QApplication::font()).value(); m_bondFont = settings.value("bondFont", QApplication::font()).value(); m_atomColor = settings.value("atomColor", QColor(Qt::white)).value(); m_bondColor = settings.value("bondColor", QColor(Qt::white)).value(); if(m_settingsWidget) { m_settingsWidget->atomType->setCurrentIndex(m_atomType); m_settingsWidget->bondType->setCurrentIndex(m_bondType); m_settingsWidget->lengthPrecision->setValue(m_lengthPrecision); } } } Q_EXPORT_PLUGIN2(labelengine, Avogadro::LabelEngineFactory) avogadro-1.1.1/libavogadro/src/engines/ribbonengine.cpp0000644000175000001440000001764112250371054022412 0ustar marcususers/********************************************************************** RibbonEngine - Engine for "ribbon" display Copyright (C) 2007-2008 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "ribbonengine.h" #include #include #include #include #include #include #include #include #include #include using Eigen::Vector3d; namespace Avogadro { const float chainColors[6][3] = { { 1.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 }, { 1.0, 0.0, 1.0 }, { 1.0, 1.0, 0.0 }, { 0.0, 1.0, 1.0 } }; RibbonEngine::RibbonEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_type(0), m_radius(1.0), m_update(true), m_useNitrogens(0) { } Engine *RibbonEngine::clone() const { RibbonEngine *engine = new RibbonEngine(parent()); engine->setAlias(alias()); engine->m_type = m_type; engine->m_radius = m_radius; engine->setUseNitrogens(m_useNitrogens); engine->setEnabled(isEnabled()); return engine; } RibbonEngine::~RibbonEngine() { // Delete the settings widget if it exists if(m_settingsWidget) m_settingsWidget->deleteLater(); } bool RibbonEngine::renderOpaque(PainterDevice *pd) { // Check if the chains need updating before drawing them if (m_update) updateChains(pd); if (m_type == 0) { for (int i = 0; i < m_chains.size(); i++) { if (m_chains[i].size() <= 1) continue; pd->painter()->setColor(chainColors[i % 6][0], chainColors[i % 6][1], chainColors[i % 6][2]); pd->painter()->drawSpline(m_chains[i], m_radius); } } else { // Render cylinders between the points and spheres at each point for (int i = 0; i < m_chains.size(); i++) { if (m_chains[i].size() <= 1) continue; pd->painter()->setColor(chainColors[i % 6][0], chainColors[i % 6][1], chainColors[i % 6][2]); pd->painter()->drawSphere(&m_chains[i][0], m_radius); for (int j = 1; j < m_chains[i].size(); j++) { pd->painter()->drawSphere(&m_chains[i][j], m_radius); pd->painter()->drawCylinder(m_chains[i][j-1], m_chains[i][j], m_radius); } } } return true; } bool RibbonEngine::renderQuick(PainterDevice *pd) { // Just render cylinders between the backbone... double tRadius = m_radius / 2.0; for (int i = 0; i < m_chains.size(); i++) { if (m_chains[i].size() <= 1) continue; pd->painter()->setColor(chainColors[i % 6][0], chainColors[i % 6][1], chainColors[i % 6][2]); pd->painter()->drawSphere(&m_chains[i][0], tRadius); for (int j = 1; j < m_chains[i].size(); j++) { pd->painter()->drawSphere(&m_chains[i][j], tRadius); pd->painter()->drawCylinder(m_chains[i][j-1], m_chains[i][j], tRadius); } } return true; } double RibbonEngine::radius(const PainterDevice *, const Primitive *) const { return m_radius; } void RibbonEngine::setPrimitives(const PrimitiveList &primitives) { Engine::setPrimitives(primitives); m_update = true; } void RibbonEngine::addPrimitive(Primitive *primitive) { Engine::addPrimitive(primitive); m_update = true; } void RibbonEngine::updatePrimitive(Primitive *) { m_update = true; } void RibbonEngine::removePrimitive(Primitive *primitive) { Engine::removePrimitive(primitive); m_update = true; } void RibbonEngine::updateChains(PainterDevice *pd) { if (!isEnabled()) return; m_chains.clear(); QList list; // list = primitives().subList(Primitive::ResidueType); unsigned int currentChain = 0; QVector pts; // Get a list of residues for the molecule const Molecule *molecule = pd->molecule(); list = molecule->residues(); foreach(Residue *r, list) { if(r->name() =="HOH") continue; if(r->chainNumber() != currentChain) { // this residue is on a new chain if(pts.size() > 0) m_chains.push_back(pts); currentChain = r->chainNumber(); pts.clear(); } foreach (unsigned long atom, r->atoms()) { // should be CA QString atomId = r->atomId(atom); atomId = atomId.trimmed(); if (atomId == "CA") pts.push_back(*molecule->atomById(atom)->pos()); else if (atomId == "N" && m_useNitrogens == 2) pts.push_back(*molecule->atomById(atom)->pos()); } // end atoms in residue } // end primitive list (i.e., all residues) m_chains.push_back(pts); // Add the last chain (possibly the only chain) m_update = false; } Engine::PrimitiveTypes RibbonEngine::primitiveTypes() const { return Engine::Atoms; } Engine::ColorTypes RibbonEngine::colorTypes() const { return Engine::IndexedColors; } void RibbonEngine::setType(int value) { m_type = value; emit changed(); } void RibbonEngine::setRadius(int value) { m_radius = 0.1 * value; emit changed(); } void RibbonEngine::setUseNitrogens(int setting) { m_useNitrogens = setting; m_update = true; emit changed(); } QWidget* RibbonEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new RibbonSettingsWidget(); connect(m_settingsWidget->renderType, SIGNAL(activated(int)), this, SLOT(setType(int))); connect(m_settingsWidget->radiusSlider, SIGNAL(valueChanged(int)), this, SLOT(setRadius(int))); connect(m_settingsWidget->useNitrogens, SIGNAL(stateChanged(int)), this, SLOT(setUseNitrogens(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); m_settingsWidget->renderType->setCurrentIndex(m_type); m_settingsWidget->radiusSlider->setValue(int(10 * m_radius)); m_settingsWidget->useNitrogens->setCheckState((Qt::CheckState)m_useNitrogens); } return m_settingsWidget; } void RibbonEngine::settingsWidgetDestroyed() { m_settingsWidget = 0; } void RibbonEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("radius", 10*m_radius); settings.setValue("type", m_type); settings.setValue("useNitrogens", m_useNitrogens); } void RibbonEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); setType(settings.value("type", 0).toInt()); setRadius(settings.value("radius", 10).toInt()); setUseNitrogens(settings.value("useNitrogens", 0).toInt()); if (m_settingsWidget) { m_settingsWidget->renderType->setCurrentIndex(m_type); m_settingsWidget->radiusSlider->setValue(int(10 * m_radius)); m_settingsWidget->useNitrogens->setCheckState((Qt::CheckState)m_useNitrogens); } } } Q_EXPORT_PLUGIN2(ribbonengine, Avogadro::RibbonEngineFactory) avogadro-1.1.1/libavogadro/src/engines/cartoonmeshgenerator.cpp0000644000175000001440000004776212250371054024211 0ustar marcususers/********************************************************************** CartoonEngine - Engine for protein structures. Code taken from Zodiac: www.zeden.org Nicola Zonta nicola.zonta@zeden.org Ian J. Grimstead I.J.Grimstead@cs.cardiff.ac.uk Andrea Brancale brancalea@cf.ac.uk Some portions Copyright (C) 2009 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "cartoonmeshgenerator.h" #include #include #include #include #include #include #include #include #include #include namespace Avogadro { CartoonMeshGenerator::CartoonMeshGenerator(QObject *parent) : QThread(parent), m_molecule(0), m_mesh(0), m_protein(0) { m_quality = 2; setHelixABC(1.0, 0.3, 1.0); setSheetABC(1.0, 0.3, 1.0); setLoopABC(0.2, 0.2, 0.0); m_helixColor = Color3f(255, 0, 0); // red m_sheetColor = Color3f(255, 255, 0); // yellow m_loopColor = Color3f(0, 255, 0); // purple } CartoonMeshGenerator::CartoonMeshGenerator(const Molecule *molecule, Mesh *mesh, QObject *parent) : QThread(parent), m_molecule((Molecule*)molecule), m_mesh(mesh), m_protein(0) { m_backbonePoints.resize(m_molecule->numResidues()); m_backboneDirections.resize(m_molecule->numResidues()); m_quality = 2; setHelixABC(1.0, 0.3, 1.0); setSheetABC(1.0, 0.3, 1.0); setLoopABC(0.2, 0.2, 0.0); m_helixColor = Color3f(255, 0, 0); // red m_sheetColor = Color3f(255, 255, 0); // yellow m_loopColor = Color3f(0, 255, 0); // purple } CartoonMeshGenerator::~CartoonMeshGenerator() { if (m_protein) { delete m_protein; m_protein = 0; } } bool CartoonMeshGenerator::initialize(const Molecule *molecule, Mesh *mesh) { m_molecule = (Molecule*)molecule; m_mesh = mesh; m_backbonePoints.resize(m_molecule->numResidues()); m_backboneDirections.resize(m_molecule->numResidues()); return true; } void CartoonMeshGenerator::run() { if (!m_molecule || !m_mesh) { qDebug() << "CartoonMeshGenerator: No mesh or molecule set..."; return; } // Mark the mesh as being worked on and clear it m_mesh->setStable(false); m_mesh->clear(); m_protein = new Protein(m_molecule); findBackboneData(); foreach(const QVector &chain, m_protein->chains()) { foreach(Residue* residue, chain) { drawBackboneStick(residue, chain); } } m_mesh->setVertices(m_vertices); m_mesh->setNormals(m_normals); m_mesh->setColors(m_colors); m_mesh->setStable(true); } void CartoonMeshGenerator::clear() { if (m_protein) { delete m_protein; m_protein = 0; } m_molecule = 0; m_mesh = 0; m_backbonePoints.clear(); m_backboneDirections.clear(); } void CartoonMeshGenerator::setBackbonePoints(Residue *residue, const std::vector &points) { m_backbonePoints[residue->index()] = points; } const std::vector& CartoonMeshGenerator::backbonePoints(Residue *residue) const { return m_backbonePoints.at(residue->index()); } void CartoonMeshGenerator::setBackboneDirection(Residue *residue, const Eigen::Vector3f &direction) { m_backboneDirections[residue->index()] = direction; } const Eigen::Vector3f& CartoonMeshGenerator::backboneDirection(Residue *residue) const { return m_backboneDirections.at(residue->index()); } Residue* CartoonMeshGenerator::previousResidue(Residue *residue, const QVector &chain) const { int index = chain.indexOf(residue); if (index > 0) return chain.at(index - 1); return 0; } Residue* CartoonMeshGenerator::nextResidue(Residue *residue, const QVector &chain) const { int index = chain.indexOf(residue); if (index + 1 < chain.size()) return chain.at(index + 1); return 0; } void CartoonMeshGenerator::findBackboneData() { foreach(const QVector &chain, m_protein->chains()) { foreach(Residue* residue, chain) { findBackbonePoints(residue, chain); findBackboneDirection(residue); } } int smoothCycles = 3; for (int i = 0; i < smoothCycles; ++i) { foreach(const QVector &residues, m_protein->chains()) { foreach(Residue* residue, residues) { std::vector lis = backbonePoints(residue); addGuidePointsToBackbone(residue, residues, lis); lis = smoothList(lis); setBackbonePoints(residue, lis); } } } } Atom* CartoonMeshGenerator::atomFromResidue(Residue *residue, const QString &atomID) { foreach (unsigned long atom, residue->atoms()) { if (residue->atomId(atom).trimmed() == atomID) return m_molecule->atomById(atom); } return 0; } void CartoonMeshGenerator::findBackbonePoints(Residue *residue, const QVector &chain) { bool hasPrevious = false, hasNext = false; Eigen::Vector3f previousCpos = Eigen::Vector3f::Zero(); Eigen::Vector3f nextNpos = Eigen::Vector3f::Zero(); std::vector out; // get the index for the residue in the chain int index = chain.indexOf(residue); // find the previous residue in the chain if (index > 0) { Residue *previousRes = chain.at(index - 1); Atom *previousC = atomFromResidue(previousRes, "C"); if (previousC) { hasPrevious = true; previousCpos = previousC->pos()->cast(); } } if (index + 1 < chain.size()) { Residue *nextRes = chain.at(index + 1); Atom *nextN = atomFromResidue(nextRes, "N"); if (nextN) { hasNext = true; nextNpos = nextN->pos()->cast(); } } Atom *n = atomFromResidue(residue, "N"); Atom *ca = atomFromResidue(residue, "CA"); Atom *c = atomFromResidue(residue, "C"); if (n && c && ca) { //Eigen::Vector3f vca = ca->pos(); Eigen::Vector3f vc = c->pos()->cast(); Eigen::Vector3f vn = n->pos()->cast(); if (hasPrevious) out.push_back(0.5 * (previousCpos + vn)); else out.push_back(vn); if (hasNext) out.push_back(0.5 * (nextNpos + vc)); else out.push_back(vc); } setBackbonePoints(residue, out); } void CartoonMeshGenerator::findBackboneDirection(Residue *residue) { Eigen::Vector3f out(0., 0., 1.); Atom *o = atomFromResidue(residue, "O"); Atom *c = atomFromResidue(residue, "C"); if (o && c) { out = (*(o->pos()) - *(c->pos())).cast(); } setBackboneDirection(residue, out); } Eigen::Vector3f CartoonMeshGenerator::startReference(Residue *residue) { std::vector lis = backbonePoints(residue); if (lis.size()) return lis[1]; return Eigen::Vector3f::Zero(); } Eigen::Vector3f CartoonMeshGenerator::endReference(Residue *residue) { std::vector lis = backbonePoints(residue); return lis[lis.size()-2]; } void CartoonMeshGenerator::addGuidePointsToBackbone(Residue *residue, const QVector &chain, std::vector &lis) { Residue *previousRes = previousResidue(residue, chain); if (previousRes) { lis.insert(lis.begin(), endReference(previousRes)); } else if (lis.size () > 1) { Eigen::Vector3f v = lis[1]; Eigen::Vector3f c = lis[0]; c *= 2.0; lis.insert(lis.begin(), c - v); } else { lis.insert(lis.begin(), Eigen::Vector3f::Zero()); } Residue *nextRes = nextResidue(residue, chain); if (nextRes) { lis.push_back(startReference(nextRes)); } else if (lis.size() > 1) { Eigen::Vector3f v = lis[lis.size()-2]; Eigen::Vector3f c = lis[lis.size()-1]; c *= 2.0; lis.push_back (c - v); } else { lis.push_back(Eigen::Vector3f(0., 0., -1.)); } } // P A B ... C F interpolates between A B C etc, P and F are discarded after calculation std::vector CartoonMeshGenerator::smoothList(const std::vector &lis) { if (lis.size () > 2) { std::vector ilist, out; Eigen::Vector3f lasti; for (unsigned int i = 1; i < lis.size () -1; i++) { Eigen::Vector3f i1, i2; interpolate(lis[i-1], lis[i], lis[i+1], i1, i2); if (i > 1) ilist.push_back(0.5 * (i1 + lasti)); lasti = i2; } out.push_back(lis[1]); //discarding first and last interpolated points for (unsigned int i = 0; i < ilist.size (); i++) { out.push_back(ilist[i]); out.push_back(lis[i+2]); } return out; } else { return lis; } } Eigen::Vector3f CartoonMeshGenerator::circumcenter(const Eigen::Vector3f &v1, const Eigen::Vector3f &v2, const Eigen::Vector3f v3) { Eigen::Vector3f A = v1; Eigen::Vector3f B = v2; Eigen::Vector3f C = v3; double a2 = (B - C).squaredNorm(); double b2 = (C - A).squaredNorm(); double c2 = (A - B).squaredNorm(); double aFactor = a2*(c2 + b2 - a2); double cFactor = c2*(a2 + b2 - c2); double bFactor = b2*(a2 + c2 - b2); double den = 2 * (a2*b2 + a2*c2 + b2*c2)-(a2*a2 + b2*b2 + c2*c2); if (den < 1.0e-4) den = 1.0e-4; Eigen::Vector3f out = (A*aFactor + B*bFactor + C*cFactor) / den; return out; } void CartoonMeshGenerator::interpolate(const Eigen::Vector3f &v1, const Eigen::Vector3f &v2, const Eigen::Vector3f &v3, Eigen::Vector3f &i1, Eigen::Vector3f &i2) { Eigen::Vector3f d1 = v1 - v2; Eigen::Vector3f d2 = v3 - v2; d1.normalize(); d2.normalize(); if (d1.dot(d2) < -0.999) { i1 = 0.5 * (v1 + v2); i2 = 0.5 * (v2 + v3); } else { Eigen::Vector3f c = circumcenter(v1, v2, v3); Eigen::Vector3f m1 = 0.5 * (v1 + v2); Eigen::Vector3f m2 = 0.5 * (v2 + v3); Eigen::Vector3f r1 = m1 - c; Eigen::Vector3f r2 = m2 - c; r1.normalize(); r2.normalize(); double r = (c - v1).norm(); r1 *= r; r2 *= r; i1 = c + r1; i2 = c + r2; } } const Color3f& CartoonMeshGenerator::color(Residue *residue) const { if (m_protein->isHelix(residue)) return m_helixColor; if (m_protein->isSheet(residue)) return m_sheetColor; return m_loopColor; } Color3f CartoonMeshGenerator::mixColors(const Color3f &c1, const Color3f &c2) { Color3f color((c1.red() + c2.red()) * 0.5f, (c1.green() + c2.green()) * 0.5f, (c1.blue() + c2.blue()) * 0.5f); return color; } void CartoonMeshGenerator::drawBackboneStick(Residue *residue, const QVector &chain) { std::vector random_points; std::vector helix_points; std::vector sheet_points; unsigned int n_points = m_quality * 9; for (unsigned int i = 0; i < n_points; i++) { double da = 2 * M_PI / (n_points - 1); double ang = i * da; double sine = sin(ang); double cosine = cos(ang); double sine3 = sine * sine * sine; random_points.push_back( Eigen::Vector3f(sine * m_bLoop - (m_cLoop * m_bLoop * sine3), cosine * m_aLoop, 0.)); helix_points.push_back( Eigen::Vector3f(sine * m_bHelix - (m_cHelix * m_bHelix * sine3), cosine * m_aHelix, 0.)); sheet_points.push_back( Eigen::Vector3f(sine * m_bSheet - (m_cSheet * m_bSheet * sine3), cosine * m_aSheet, 0.)); } std::vector *last_shape, *shape, *next_shape; Color3f last_col, col, next_col; col = color(residue); last_col = col; next_col = col; last_shape = &random_points; next_shape = &random_points; shape = &random_points; // this residue Eigen::Vector3f dir = backboneDirection(residue); if (m_protein->isHelix(residue)) shape = &helix_points; else if (m_protein->isSheet(residue)) shape = &sheet_points; // previous residue Residue *previousRes = previousResidue(residue, chain); Eigen::Vector3f lastdir; if (previousRes) { last_col = color(previousRes); lastdir = backboneDirection(previousRes); if (m_protein->isHelix(previousRes)) last_shape = &helix_points; else if (m_protein->isSheet(previousRes)) last_shape = &sheet_points; } else lastdir = dir; // next residue Residue *nextRes = nextResidue(residue, chain); Eigen::Vector3f nextdir; if (nextRes) { next_col = color(nextRes); nextdir = backboneDirection(nextRes); if (m_protein->isHelix(nextRes)) next_shape = &helix_points; else if (m_protein->isSheet(nextRes)) next_shape = &sheet_points; } else nextdir = dir; if (lastdir.dot(dir) < 0.0) lastdir *= -1.0; if (nextdir.dot(dir) < 0.0) nextdir *= -1.0; lastdir = 0.5 * (dir + lastdir); nextdir = 0.5 * (nextdir + dir); lastdir.normalize(); nextdir.normalize(); std::vector points = backbonePoints(residue); addGuidePointsToBackbone(residue, chain, points); Color3f c2 = mixColors(last_col, col); Color3f c1 = mixColors(next_col, col); if (points.size () > 3) { double tot = ((double) points.size () -3); for (unsigned int i = 3; i < points.size (); i++) { double dt = ((double)i-3) / tot; dt = sin ((dt-0.5f)*M_PI); dt *= 0.5f; dt += 0.5f; Color3f cc1, cc2; cc1.set((c1.red()*dt+c2.red()*(1-dt)), (c1.green()*dt+c2.green()*(1-dt)), (c1.blue()*dt+c2.blue()*(1-dt))); Eigen::Vector3f v1, v2; v2 = lastdir; v1 = nextdir; std::vector shape1, shape2; for (unsigned int n = 0; n < n_points; n++) { Eigen::Vector3f vv2 = 0.5 * ((*last_shape)[n] + (*shape)[n]); Eigen::Vector3f vv1 = 0.5 * ((*next_shape)[n] + (*shape)[n]); shape1.push_back( Eigen::Vector3f(vv1.x() * dt + vv2.x() * (1 - dt), vv1.y() * dt + vv2.y() * (1 - dt), vv1.z() * dt + vv2.z() * (1 - dt)) ); } Eigen::Vector3f d(v1.x() * dt + v2.x() * (1 - dt), v1.y() * dt + v2.y() * (1 - dt), v1.z() * dt + v2.z() * (1 - dt) ); dt = ((double) i-2) / tot; dt = sin ((dt-0.5f) * M_PI); dt*= 0.5f; dt += 0.5f; cc2.set((c1.red()*dt+c2.red()*(1-dt)), (c1.green()*dt+c2.green()*(1-dt)), (c1.blue()*dt+c2.blue()*(1-dt))); for (unsigned int n = 0; n < n_points; n++) { Eigen::Vector3f vv2 = 0.5 * ((*last_shape)[n] + (*shape)[n]); Eigen::Vector3f vv1 = 0.5 * ((*next_shape)[n] + (*shape)[n]); shape2.push_back( Eigen::Vector3f (vv1.x() * dt + vv2.x() * (1 - dt), vv1.y() * dt + vv2.y() * (1 - dt), vv1.z() * dt + vv2.z() * (1 - dt)) ); } Eigen::Vector3f d2(v1.x() * dt + v2.x() * (1 - dt), v1.y() * dt + v2.y() * (1 - dt), v1.z() * dt + v2.z() * (1 - dt) ); backboneRibbon(points[i-3], points [i-2],points [i-1],points [i], d, d2, cc1, cc2, shape1, shape2); } } } void CartoonMeshGenerator::components(const Eigen::Vector3f &vec, const Eigen::Vector3f &ref, Eigen::Vector3f ¶llel, Eigen::Vector3f &normal) { //assert (!isnan(vec.module())); //assert (!isnan(ref.module())); Eigen::Vector3f reference = ref.normalized(); double mod = vec.dot(ref); reference *= mod; parallel = reference; normal = vec - parallel; //assert (!isnan(parallel.module ())); //assert (!isnan(normal.module ())); } class SurfVertex { public: SurfVertex () : color(Color3f(255, 255, 255)) {}; Eigen::Vector3f coords; Eigen::Vector3f normal; Color3f color; }; void CartoonMeshGenerator::backboneRibbon(const Eigen::Vector3f &v1, const Eigen::Vector3f &v2, const Eigen::Vector3f &v3, const Eigen::Vector3f &v4, const Eigen::Vector3f &dir, const Eigen::Vector3f &dir2, const Color3f &c1, const Color3f &c2, const std::vector &shape1, const std::vector &shape2) { //Sandri's method Eigen::Vector3f prec_vect = v2 - v1; Eigen::Vector3f cyl_vect = v3 - v2; Eigen::Vector3f post_vect = v4 - v3; prec_vect.normalize(); post_vect.normalize(); cyl_vect.normalize(); Eigen::Vector3f norm1 = 0.5 * (prec_vect + cyl_vect); Eigen::Vector3f norm2 = 0.5 * (cyl_vect + post_vect); Eigen::Vector3f par1, pp1, par2, pp2; components(dir, norm1, par1, pp1); components(dir2, norm2, par2, pp2); Eigen::Matrix3f m1, m2; Eigen::Vector3f newz1 = norm1; Eigen::Vector3f newy1 = pp1; newz1.normalize(); newy1.normalize(); Eigen::Vector3f newx1 = newy1.cross(newz1); m1.col(0) = newx1; m1.col(1) = newy1; m1.col(2) = newz1; Eigen::Vector3f newz2 = norm2; Eigen::Vector3f newy2 = pp2; newz2.normalize(); newy2.normalize(); Eigen::Vector3f newx2 = newy2.cross(newz2); m2.col(0) = newx2; m2.col(1) = newy2; m2.col(2) = newz2; unsigned int slices = shape1.size(); std::vector vertices; SurfVertex *lastv1, *lastv2; for (unsigned int n = 0; n < slices; n++){ Eigen::Vector3f p1 = shape1[n]; Eigen::Vector3f p2 = shape2[n]; int last_n = n - 1; if (last_n < 0) last_n = slices - 2; unsigned int next_n = n + 1; if (next_n >= slices) next_n = 1; Eigen::Vector3f tan1 = shape1[next_n] - shape1[last_n]; Eigen::Vector3f tan2 = shape2[next_n] - shape2[last_n]; Eigen::Vector3f n1 = Eigen::Vector3f(-tan1.y(), tan1.x(), 0.0); Eigen::Vector3f n2 = Eigen::Vector3f(-tan2.y(), tan2.x(), 0.0); p1 = m1*p1 + v2; p2 = m2*p2 + v3; n1 = m1*n1; n2 = m2*n2; SurfVertex *newv1 = new SurfVertex; newv1->normal = n1; newv1->coords = p1; newv1->color = c1; SurfVertex *newv2 = new SurfVertex; newv2->normal = n2; newv2->coords = p2; newv2->color = c2; if (n > 0) { // lastv1 m_vertices.push_back(lastv1->coords); m_normals.push_back(lastv1->normal); m_colors.push_back(lastv1->color); // lastv2 m_vertices.push_back(lastv2->coords); m_normals.push_back(lastv2->normal); m_colors.push_back(lastv2->color); // newv2 m_vertices.push_back(newv2->coords); m_normals.push_back(newv2->normal); m_colors.push_back(newv2->color); // newv2 m_vertices.push_back(newv2->coords); m_normals.push_back(newv2->normal); m_colors.push_back(newv2->color); // newv1 m_vertices.push_back(newv1->coords); m_normals.push_back(newv1->normal); m_colors.push_back(newv1->color); // lastv1 m_vertices.push_back(lastv1->coords); m_normals.push_back(lastv1->normal); m_colors.push_back(lastv1->color); } // store last lastv1 = newv1; lastv2 = newv2; vertices.push_back(lastv1); vertices.push_back(lastv2); } } } avogadro-1.1.1/libavogadro/src/engines/bsdyengine.h0000644000175000001440000000764112250371054021544 0ustar marcususers/********************************************************************** BSDYEngine - Dynamic detail engine for "balls and sticks" display Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef BSDYENGINE_H #define BSDYENGINE_H #include #include #include "ui_bsdysettingswidget.h" namespace Avogadro { //! Ball and Stick Engine class. class Atom; class BSDYSettingsWidget; class BSDYEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Ball and Stick", tr("Ball and Stick"), tr("Renders primitives using Balls (atoms) and Sticks (bonds)")) public: //! Constructor BSDYEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~BSDYEngine(); bool renderOpaque(PainterDevice *pd); bool renderTransparent(PainterDevice *pd); bool renderQuick(PainterDevice *pd); bool renderPick(PainterDevice *pd); double transparencyDepth() const; Engine::Layers layers() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; /** * @return a pointer to the BSDYEngine settings widget */ QWidget *settingsWidget(); bool hasSettings() { return true; } /** * Write the engine settings so that they can be saved between sessions. */ void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the engine instance. */ void readSettings(QSettings &settings); private: double radius(const Atom *atom) const; BSDYSettingsWidget *m_settingsWidget; double m_atomRadiusPercentage; const double m_atomRadiusScale; double m_bondRadius; const double m_bondRadiusScale; int m_atomRadiusType; int m_showMulti; double m_alpha; // transparency of the balls & sticks /** * Function pointer for the radius function to be used for rendering. */ double (*pRadius)(const Atom *atom); private Q_SLOTS: void settingsWidgetDestroyed(); /** * @param percent percentage of the VdwRad */ void setAtomRadiusPercentage(int percent); /** * @param value determines if covalent or VdW radii are used */ void setAtomRadiusType(int value); /** * @param value radius of the bonds * 10 */ void setBondRadius(int value); /** * @param value determines where multiple bonds are shown */ void setShowMulti(int value); /** * @param value opacity of the balls & sticks / 20 */ void setOpacity(int value); }; class BSDYSettingsWidget : public QWidget, public Ui::BSDYSettingsWidget { public: BSDYSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; class BSDYEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(BSDYEngine); }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/polygonengine.h0000644000175000001440000000412312250371054022262 0ustar marcususers/********************************************************************** PolygonEngine - Engine for "polygon" display Copyright (C) 2007 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef POLYGONENGINE_H #define POLYGONENGINE_H #include #include namespace Avogadro { class Atom; //! Polygon Engine class. class PolygonEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Polygon", tr("Polygon"), tr("Renders atoms as tetrahedra, octahedra, and other polygons")) public: //! Constructor PolygonEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~PolygonEngine(); //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); //@} PrimitiveTypes primitiveTypes() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; private: bool renderPolygon(PainterDevice *pd, Atom *a); }; //! Generates instances of our PolygonEngine class class PolygonEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(PolygonEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/forceengine.cpp0000644000175000001440000000472412250371054022233 0ustar marcususers/********************************************************************** ForceEngine - Display forces Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "forceengine.h" #include #include using Eigen::Vector3d; namespace Avogadro { ForceEngine::ForceEngine(QObject *parent) : Engine(parent) { } Engine *ForceEngine::clone() const { ForceEngine *engine = new ForceEngine(parent()); engine->setAlias(alias()); return engine; } ForceEngine::~ForceEngine() { } bool ForceEngine::renderOpaque(PainterDevice *pd) { pd->painter()->setColor(0.0, 1.0, 0.0); // TODO: make configurable Vector3d v2, v3; foreach(Atom *atom, atoms()) { renderOpaque(pd, atom); } return true; } bool ForceEngine::renderOpaque(PainterDevice *pd, const Atom *atom) { const Vector3d forceVector = atom->forceVector(); if (forceVector.norm() < 0.01) // too small to really show return true; const Vector3d &v1 = *atom->pos(); // Use the camera and painter device to "float" the arrows // in front of the atom. This is similar to the label engine code double renderRadius = pd->radius(atom); Vector3d drawPos = v1 + forceVector.normalized() * renderRadius; // now based on our "drawing" position, we calculate a displacement Vector3d v2 = drawPos + forceVector; Vector3d v3 = drawPos + 0.8 * forceVector; pd->painter()->drawLine(drawPos, v3, 2); pd->painter()->drawCone(v3, v2, 0.05); return true; } } Q_EXPORT_PLUGIN2(forceengine, Avogadro::ForceEngineFactory) avogadro-1.1.1/libavogadro/src/engines/cartoonmeshgenerator.h0000644000175000001440000001414712250371054023645 0ustar marcususers/********************************************************************** CartoonMeshGenerator - Class to generate meshes for biomolecules Code taken from Zodiac: www.zeden.org Nicola Zonta nicola.zonta@zeden.org Ian J. Grimstead I.J.Grimstead@cs.cardiff.ac.uk Andrea Brancale brancalea@cf.ac.uk Copyright (C) 2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef CARTOONMESHGENERATOR_H #define CARTOONMESHGENERATOR_H #include #include #include #include #include namespace Avogadro { class Protein; class Molecule; class Residue; class Atom; class Mesh; class CartoonMeshGenerator : public QThread { public: /** * Constructor. */ explicit CartoonMeshGenerator(QObject *parent = 0); /** * Constructor. Can be used to initialize the MeshGenerator. * @param cube The source Cube with the volumetric data. * @param mesh The Mesh that will hold the isosurface. * @param iso The iso value of the surface. * @return True if the MeshGenerator was successfully initialized. */ CartoonMeshGenerator(const Molecule *molecule, Mesh *mesh, QObject *parent = 0); /** * Destructor. */ ~CartoonMeshGenerator(); /** * Initialization function, set up the MeshGenerator ready to find an * isosurface of the supplied Cube. * @param cube The source Cube with the volumetric data. * @param mesh The Mesh that will hold the isosurface. * @param iso The iso value of the surface. */ bool initialize(const Molecule *molecule, Mesh *mesh); void setQuality( int quality) { m_quality = quality; } void setHelixColor(const Color3f &color) { m_helixColor = color; } void setSheetColor(const Color3f &color) { m_sheetColor = color; } void setLoopColor(const Color3f &color) { m_loopColor = color; } void setHelixABC(double a, double b, double c) { m_aHelix = a; m_bHelix = b; m_cHelix = c; } void setSheetABC(double a, double b, double c) { m_aSheet = a; m_bSheet = b; m_cSheet = c; } void setLoopABC(double a, double b, double c) { m_aLoop = a; m_bLoop = b; m_cLoop = c; } /** * Use this function to begin Mesh generation. Uses an asynchronous thread, * and so avoids locking the user interface while the isosurface is found. */ void run(); /** * @return The Mesh being generated by the class. */ Mesh * mesh() const { return m_mesh; } /** * Clears the contents of the MeshGenerator. */ void clear(); protected: void setBackbonePoints(Residue *residue, const std::vector &points); const std::vector& backbonePoints(Residue *residue) const; void setBackboneDirection(Residue *residue, const Eigen::Vector3f &direction); const Eigen::Vector3f& backboneDirection(Residue *residue) const; Residue* previousResidue(Residue *residue, const QVector &chain) const; Residue* nextResidue(Residue *residue, const QVector &chain) const; Atom* atomFromResidue(Residue *residue, const QString &atomID); const Color3f& color(Residue *residue) const; void findBackboneData(); void findBackbonePoints(Residue *residue, const QVector &chain); void findBackboneDirection(Residue *residue); Eigen::Vector3f startReference(Residue *residue); Eigen::Vector3f endReference(Residue *residue); void addGuidePointsToBackbone(Residue *residue, const QVector &chain, std::vector &lis); std::vector smoothList(const std::vector &lis); Eigen::Vector3f circumcenter(const Eigen::Vector3f &v1, const Eigen::Vector3f &v2, const Eigen::Vector3f v3); void interpolate(const Eigen::Vector3f &v1, const Eigen::Vector3f &v2, const Eigen::Vector3f &v3, Eigen::Vector3f &i1, Eigen::Vector3f &i2); Color3f mixColors(const Color3f &c1, const Color3f &c2); void drawBackboneStick(Residue *residue, const QVector &chain); void components(const Eigen::Vector3f &vec, const Eigen::Vector3f &ref, Eigen::Vector3f ¶llel, Eigen::Vector3f &normal); void backboneRibbon(const Eigen::Vector3f &v1, const Eigen::Vector3f &v2, const Eigen::Vector3f &v3, const Eigen::Vector3f &v4, const Eigen::Vector3f &dir, const Eigen::Vector3f &dir2, const Color3f &c1, const Color3f &c2, const std::vector &shape1, const std::vector &shape2); Molecule *m_molecule; Mesh *m_mesh; Protein *m_protein; std::vector > m_backbonePoints; std::vector m_backboneDirections; Color3f m_helixColor; Color3f m_sheetColor; Color3f m_loopColor; // mesh std::vector m_vertices; std::vector m_normals; std::vector m_colors; int m_quality; double m_aHelix, m_bHelix, m_cHelix; double m_aSheet, m_bSheet, m_cSheet; double m_aLoop, m_bLoop, m_cLoop; }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/ringengine.cpp0000644000175000001440000002200612250371054022065 0ustar marcususers/********************************************************************** RingEngine - Engine for "ring" display Copyright (C) 2007 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "ringengine.h" #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace Eigen; namespace Avogadro{ const float ringColors[6][3] = { { 1.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 }, { 1.0, 0.0, 1.0 }, { 1.0, 1.0, 0.0 }, { 0.0, 1.0, 1.0 } }; RingEngine::RingEngine(QObject *parent) : Engine(parent), m_settingsWidget(0), m_alpha(1.0) { } Engine *RingEngine::clone() const { RingEngine *engine = new RingEngine(parent()); engine->setAlias(alias()); engine->m_alpha = m_alpha; engine->setEnabled(isEnabled()); return engine; } RingEngine::~RingEngine() { } bool RingEngine::renderOpaque(PainterDevice *pd) { if (m_alpha < 0.999) return true; // Special case for everything up to 7 membered rings. QList rings = const_cast(pd->molecule())->rings(); // Now actually draw the ring structures foreach(Fragment *r, rings) renderRing(r->atoms(), pd); return true; } bool RingEngine::renderTransparent(PainterDevice *pd) { if (m_alpha > 0.999) return true; // Special case for everything up to 7 membered rings. QList rings = const_cast(pd->molecule())->rings(); // Now actually draw the ring structures foreach(Fragment *r, rings) renderRing(r->atoms(), pd); return true; } bool RingEngine::renderRing(const QList &ring, PainterDevice *pd) { // We need to get rid of the constness in order to get the atoms Molecule *mol = const_cast(pd->molecule()); // Calculate an appropriate normal and use it for all the triangles in the // ring - this will give consistent lighting. Eigen::Vector3d v1, v2, norm; v1 = *mol->atomById(ring[1])->pos() - *mol->atomById(ring[0])->pos(); v2 = *mol->atomById(ring[2])->pos() - *mol->atomById(ring[1])->pos(); norm = v1.cross(v2); if (norm.dot(pd->camera()->backTransformedZAxis()) > 0) norm *= -1; // Disable face culling for ring structures. glDisable(GL_CULL_FACE); // Optimize for smaller ring structures switch (ring.size()) { case 3: // Single triangle - easy pd->painter()->setColor(ringColors[0][0], ringColors[0][1], ringColors[0][2], m_alpha); pd->painter()->drawTriangle(*mol->atomById(ring[0])->pos(), *mol->atomById(ring[1])->pos(), *mol->atomById(ring[2])->pos(), norm); break; case 4: // Two triangles pd->painter()->setColor(ringColors[1][0], ringColors[1][1], ringColors[1][2], m_alpha); pd->painter()->drawTriangle(*mol->atomById(ring[0])->pos(), *mol->atomById(ring[1])->pos(), *mol->atomById(ring[2])->pos(), norm); pd->painter()->drawTriangle(*mol->atomById(ring[0])->pos(), *mol->atomById(ring[2])->pos(), *mol->atomById(ring[3])->pos(), norm); break; case 5: // Three triangles pd->painter()->setColor(ringColors[2][0], ringColors[2][1], ringColors[2][2], m_alpha); pd->painter()->drawTriangle(*mol->atomById(ring[0])->pos(), *mol->atomById(ring[1])->pos(), *mol->atomById(ring[2])->pos(), norm); pd->painter()->drawTriangle(*mol->atomById(ring[0])->pos(), *mol->atomById(ring[2])->pos(), *mol->atomById(ring[3])->pos(), norm); pd->painter()->drawTriangle(*mol->atomById(ring[0])->pos(), *mol->atomById(ring[3])->pos(), *mol->atomById(ring[4])->pos(), norm); break; case 6: // Four triangles pd->painter()->setColor(ringColors[3][0], ringColors[3][1], ringColors[3][2], m_alpha); pd->painter()->drawTriangle(*mol->atomById(ring[0])->pos(), *mol->atomById(ring[1])->pos(), *mol->atomById(ring[2])->pos(), norm); pd->painter()->drawTriangle(*mol->atomById(ring[2])->pos(), *mol->atomById(ring[3])->pos(), *mol->atomById(ring[4])->pos(), norm); pd->painter()->drawTriangle(*mol->atomById(ring[4])->pos(), *mol->atomById(ring[5])->pos(), *mol->atomById(ring[0])->pos(), norm); pd->painter()->drawTriangle(*mol->atomById(ring[0])->pos(), *mol->atomById(ring[2])->pos(), *mol->atomById(ring[4])->pos(), norm); break; default: // The generic case - find the centre of the ring and draw a triangle fan pd->painter()->setColor(ringColors[4][0], ringColors[4][1], ringColors[4][2], m_alpha); Vector3d center; for (int i = 0; i < ring.size(); i++) center += *mol->atomById(ring[i])->pos(); center /= ring.size(); for (int i = 0; i < ring.size()-1; i++) pd->painter()->drawTriangle(center, *mol->atomById(ring[i])->pos(), *mol->atomById(ring[i+1])->pos(), norm); pd->painter()->drawTriangle(center, *mol->atomById(ring[ring.size()-1])->pos(), *mol->atomById(ring[0])->pos(), norm); } return true; } double RingEngine::radius(const PainterDevice *, const Primitive *) const { return 0.; } double RingEngine::transparencyDepth() const { return 1.0; } Engine::Layers RingEngine::layers() const { return Engine::Opaque | Engine::Transparent; } Engine::PrimitiveTypes RingEngine::primitiveTypes() const { return Engine::Fragments; } Engine::ColorTypes RingEngine::colorTypes() const { return Engine::IndexedColors; } void RingEngine::setOpacity(int value) { m_alpha = 0.05 * value; emit changed(); } QWidget* RingEngine::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new RingSettingsWidget(); connect(m_settingsWidget->opacitySlider, SIGNAL(valueChanged(int)), this, SLOT(setOpacity(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); m_settingsWidget->opacitySlider->setValue(int(20*m_alpha)); } return m_settingsWidget; } void RingEngine::settingsWidgetDestroyed() { qDebug() << "Destroyed Settings Widget"; m_settingsWidget = 0; } void RingEngine::writeSettings(QSettings &settings) const { Engine::writeSettings(settings); settings.setValue("opacity", 20*m_alpha); } void RingEngine::readSettings(QSettings &settings) { Engine::readSettings(settings); setOpacity(settings.value("opacity", 20).toInt()); if (m_settingsWidget) { m_settingsWidget->opacitySlider->setValue(int(20*m_alpha)); } } } Q_EXPORT_PLUGIN2(ringengine, Avogadro::RingEngineFactory) avogadro-1.1.1/libavogadro/src/engines/dipoleengine.h0000644000175000001440000000600512250371054022050 0ustar marcususers/********************************************************************** DipoleEngine - Engine to display a 3D vector such as the dipole moment Copyright (C) 2008 Geoffrey R. Hutchison Some portions Copyright (C) 2009 Konstantin L. Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef DIPOLEENGINE_H #define DIPOLEENGINE_H #include #include #include "ui_dipolesettingswidget.h" namespace Avogadro { //! Settings class class DipoleSettingsWidget; //! Dipole Engine class. class DipoleEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Dipole", tr("Dipole"), tr("Renders molecular dipole moments")) public: //! Constructor DipoleEngine(QObject *parent=0); //! Deconstructor ~DipoleEngine(); //! Copy Engine *clone() const; //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); //@} double transparencyDepth() const; Layers layers() const; PrimitiveTypes primitiveTypes() const; ColorTypes colorTypes() const; double radius(const PainterDevice *pd, const Primitive *p = 0) const; //! Display a window for the user to pick rendering options QWidget *settingsWidget(); bool hasSettings() { return true; } private: int m_dipoleType; // type of dipole to render Eigen::Vector3d m_origin; // origin of dipole moment Eigen::Vector3d m_dipole; // cached dipole moment DipoleSettingsWidget* m_settingsWidget; private Q_SLOTS: void setDipoleType(int value); void settingsWidgetDestroyed(); void updateDipole(double = 0.0); void updateOrigin(double = 0.0); }; class DipoleSettingsWidget : public QWidget, public Ui::DipoleSettingsWidget { public: DipoleSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; //! Generates instances of our AxesEngine class class DipoleEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(DipoleEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/engines/ringsettingswidget.ui0000644000175000001440000000326512250371054023525 0ustar marcususers RingSettingsWidget 0 0 400 233 Opacity: 0 20 1 2 20 20 Qt::Horizontal false QSlider::TicksBothSides 4 Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/engines/CMakeLists.txt0000644000175000001440000000441212250371054021775 0ustar marcususersinclude(${QT_USE_FILE}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(DESTINATION_DIR ${Avogadro_PLUGIN_INSTALL_DIR}/engines) ADD_DEFINITIONS(${QT_DEFINITIONS}) ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_SHARED) link_directories(${CMAKE_CURRENT_BINARY_DIR}/..) set(LINK_LIBS avogadro) set(PLUGIN_LABEL engines) set(PLUGIN_TARGET engines) add_custom_target(engines COMMENT "Meta target to build all Avogadro engines.") # ball and stick engine avogadro_plugin(bsdyengine bsdyengine.cpp bsdysettingswidget.ui) # label engine avogadro_plugin(labelengine labelengine.cpp labelsettingswidget.ui) # wireframe avogadro_plugin(wireengine wireengine.cpp wiresettingswidget.ui) # hydrogen bond avogadro_plugin(hbondengine hbondengine.cpp hbondsettingswidget.ui) # force engine avogadro_plugin(forceengine forceengine.cpp) if(${CMAKE_CXX_COMPILER_ID} MATCHES Intel AND UNIX) set_target_properties(forceengine PROPERTIES COMPILE_FLAGS "-fvisibility=default") endif() # sphere avogadro_plugin(sphereengine sphereengine.cpp spheresettingswidget.ui) # stick (cylinder) engine avogadro_plugin(stickengine stickengine.cpp sticksettingswidget.ui) # Ribbon engine (biological structure) avogadro_plugin(ribbonengine ribbonengine.cpp ribbonsettingswidget.ui) # Cartoon engine (biological structure) avogadro_plugin(cartoonengine "cartoonengine.cpp;cartoonmeshgenerator.cpp" cartoonsettingswidget.ui) # Ring engine - display cyclic rings avogadro_plugin(ringengine ringengine.cpp ringsettingswidget.ui) # Polygon engine avogadro_plugin(polygonengine polygonengine.cpp) # Surface engine - molecular surfaces and 3D functions avogadro_plugin(surfaceengine surfaceengine.cpp surfacesettingswidget.ui) # Axes engine - display the axes avogadro_plugin(axesengine axesengine.cpp axessettingswidget.ui) # Dipole engine -- dipole moment avogadro_plugin(dipoleengine dipoleengine.cpp dipolesettingswidget.ui) # Simple wire engine - designed for efficiency with really big systems avogadro_plugin(simplewireengine simplewireengine.cpp) # QTAIM engine - Quantum Theory of Atoms In Molecules avogadro_plugin(qtaimengine qtaimengine.cpp qtaimsettingswidget.ui) if(ALL_PYTHON_FOUND) file(GLOB python_SCRIPTS "python/*.py") install(FILES ${python_SCRIPTS} DESTINATION share/libavogadro/engineScripts) endif() avogadro-1.1.1/libavogadro/src/engines/surfacesettingswidget.ui0000644000175000001440000001451412250371054024215 0ustar marcususers SurfaceSettingsWidget 0 0 331 214 Orbital: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Opacity: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 0 20 1 2 15 15 Qt::Horizontal false QSlider::TicksBothSides 5 Render: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Fill Lines Points Draw Box: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter true false false Style: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Selected Colors Mapped Colors Colors: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Positive 0 0 36 21 Negative 0 0 36 21 Qt::Horizontal 40 20 Qt::Vertical 323 20 Avogadro::ColorButton QWidget
avogadro/colorbutton.h
1
avogadro-1.1.1/libavogadro/src/engines/forceengine.h0000644000175000001440000000364712250371054021703 0ustar marcususers/********************************************************************** ForceEngine - Display forces Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef FORCEENGINE_H #define FORCEENGINE_H #include #include namespace Avogadro { //! ForceEngine class. //class ForceSettingsWidget; class ForceEngine : public Engine { Q_OBJECT AVOGADRO_ENGINE("Force", tr("Force"), tr("Renders force displacements on atoms")) public: //! Constructor ForceEngine(QObject *parent=0); Engine *clone() const; //! Deconstructor ~ForceEngine(); //! \name Render Methods //@{ bool renderOpaque(PainterDevice *pd); bool renderOpaque(PainterDevice *pd, const Atom *a); //@} }; //! Generates instances of our ForceEngine class class ForceEngineFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_ENGINE_FACTORY(ForceEngine) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/pythonscript.h0000644000175000001440000000414312250371054020525 0ustar marcususers/********************************************************************** Python - Gives us some Python helper stuff Copyright (C) 2008 by Donald Ephraim Curtis Copyright (C) 2008,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************/ #ifndef PYTHONSCRIPT_H #define PYTHONSCRIPT_H #include #include #include "pythonerror.h" #include #include #include #include #include #include namespace Avogadro { class A_EXPORT PythonScript { public: PythonScript(const QString &fileName); ~PythonScript(); /** * Get the module name. */ QString moduleName() const; /** * Get the python module object. */ boost::python::object module() const; /** * Get a QFile object for the script file. */ const QString& fileName() const; /** * Get the identifier for this script. This is the Sha1 hash of the * script's contents. */ QString identifier() const; private: QString m_moduleName; QString m_fileName; mutable QDateTime m_lastModified; mutable boost::python::object m_module; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/plotpoint.h0000644000175000001440000001055012250371054020006 0ustar marcususers/********************************************************************** PlotPoint -- Part of the Avogadro 2D plotting interface Copyright (C) 2003 Jason Harris (KDE) Copyright (C) 2008 David Lonie (Avogadro) This file is part of the Avogadro molecular editor project. For more information, see This file is based on KPlotWidget from the KDE library. For more information see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PLOTPOINT_H #define PLOTPOINT_H #include #include #include class QPointF; namespace Avogadro { /** * @class PlotPoint plotpoint.h * @short Encapsulates a point in the plot. * * A PlotPoint consists of X and Y coordinates (in Data units), * an optional label string, and an optional bar-width, * The bar-width is only used for plots of type PlotObject::Bars, * and it allows the width of each bar to be set manually. If * bar-widths are omitted, then the widths will be set automatically, * based on the halfway-mark between adjacent points. */ class A_EXPORT PlotPoint { public: /** * Default constructor. */ explicit PlotPoint(); /** * Constructor. Sets the PlotPoint according to the given arguments * @param x the X-position for the point, in Data units * @param y the Y-position for the point, in Data units * @param label the label string for the point. If the string * is defined, the point will be labeled in the plot. * @param width the bar width to use for this point (only used for * plots of type PlotObject::Bars) */ PlotPoint( double x, double y, const QString &label = QString(), double width = 0.0 ); /** * Constructor. Sets the PlotPoint according to the given arguments * @param p the position for the point, in Data units * @param label the label string for the point. If the string * is defined, the point will be labeled in the plot. * @param width the bar width to use for this point (only used for * plots of type PlotObject::Bars) */ explicit PlotPoint( const QPointF &p, const QString &label = QString(), double width = 0.0 ); /** * Destructor */ ~PlotPoint(); /** * @return the position of the point, in data units */ QPointF position() const; /** * Set the position of the point, in data units * @param pos the new position for the point. */ void setPosition( const QPointF &pos ); /** * @return the X-position of the point, in data units */ double x() const; /** * Set the X-position of the point, in Data units */ void setX( double x ); /** * @return the Y-position of the point, in data units */ double y() const; /** * Set the Y-position of the point, in Data units */ void setY( double y ); /** * @return the label for the point */ QString label() const; /** * Set the label for the point */ void setLabel( const QString &label ); /** * @return the bar-width for the point */ double barWidth() const; /** * Set the bar-width for the point */ void setBarWidth( double w ); /** * @return a QVariant holding arbitrary data associated with the point */ QVariant customData() const; /** * Associate arbitrary data with the point */ void setCustomData(QVariant v); private: class Private; Private * const d; Q_DISABLE_COPY( PlotPoint ) }; } #endif avogadro-1.1.1/libavogadro/src/glpainter_p.cpp0000644000175000001440000012033712250371054020622 0ustar marcususers/********************************************************************** Painter - drawing spheres, cylinders and text in a GLWidget Copyright (C) 2007 Benoit Jacob Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2007-2009 Marcus D. Hanwell Copyright (C) 2010 Konstantin Tokarev Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "glpainter_p.h" #include "glwidget.h" #include "camera.h" #include "sphere_p.h" #include "cylinder_p.h" #include "textrenderer_p.h" #include #include #include #include #include #include #include #include #include #include #ifdef Q_WS_MAC # include #else # include #endif namespace Avogadro { const int PAINTER_GLOBAL_QUALITY_SETTINGS = 5; const int DEFAULT_GLOBAL_QUALITY_SETTING = PAINTER_GLOBAL_QUALITY_SETTINGS - 3; const int PAINTER_DETAIL_LEVELS = 10; // Sphere detail level array. Each row is a detail level. // The first column is the sphere detail level at the furthest // point and the last column is the detail level at the closest // point. const int PAINTER_SPHERES_LEVELS_ARRAY[5][10] = { {0, 0, 1, 1, 2, 2, 3, 3, 4, 4}, {0, 1, 2, 3, 4, 4, 5, 5, 6, 6}, {1, 2, 3, 4, 5, 6, 7, 8, 9, 9}, {1, 2, 3, 4, 6, 7, 8, 9, 11, 12}, {2, 3, 4, 5, 7, 9, 12, 15, 18, 22} }; const double PAINTER_SPHERES_LIMIT_MIN_LEVEL = 0.005; const double PAINTER_SPHERES_LIMIT_MAX_LEVEL = 0.15; // Cylinder detail level array. Each row is a detail level. // The first column is the cylinder detail level at the furthest // point and the last column is the detail level at the closest // point. const int PAINTER_CYLINDERS_LEVELS_ARRAY[5][10] = { {0, 3, 5, 5, 8, 8, 12, 12, 16, 16}, {0, 4, 6, 9, 12, 12, 16, 16, 20, 20}, {0, 4, 6, 10, 14, 18, 22, 26, 32, 40}, {0, 4, 6, 12, 16, 20, 24, 28, 34, 42}, {0, 5, 10, 15, 20, 25, 30, 35, 40, 45} }; const double PAINTER_CYLINDERS_LIMIT_MIN_LEVEL = 0.001; const double PAINTER_CYLINDERS_LIMIT_MAX_LEVEL = 0.03; const int PAINTER_MAX_DETAIL_LEVEL = PAINTER_DETAIL_LEVELS - 1; const double PAINTER_SPHERES_SQRT_LIMIT_MIN_LEVEL = sqrt ( PAINTER_SPHERES_LIMIT_MIN_LEVEL ); const double PAINTER_SPHERES_SQRT_LIMIT_MAX_LEVEL = sqrt ( PAINTER_SPHERES_LIMIT_MAX_LEVEL ); const double PAINTER_SPHERES_DETAIL_COEFF = static_cast ( PAINTER_MAX_DETAIL_LEVEL - 1 ) / ( PAINTER_SPHERES_SQRT_LIMIT_MAX_LEVEL - PAINTER_SPHERES_SQRT_LIMIT_MIN_LEVEL ); const double PAINTER_CYLINDERS_SQRT_LIMIT_MIN_LEVEL = sqrt ( PAINTER_CYLINDERS_LIMIT_MIN_LEVEL ); const double PAINTER_CYLINDERS_SQRT_LIMIT_MAX_LEVEL = sqrt ( PAINTER_CYLINDERS_LIMIT_MAX_LEVEL ); const double PAINTER_CYLINDERS_DETAIL_COEFF = static_cast ( PAINTER_MAX_DETAIL_LEVEL - 1 ) / ( PAINTER_CYLINDERS_SQRT_LIMIT_MAX_LEVEL - PAINTER_CYLINDERS_SQRT_LIMIT_MIN_LEVEL ); // const double PAINTER_FRUSTUM_CULL_TRESHOLD = -0.8; class GLPainterPrivate { public: GLPainterPrivate() : widget ( 0 ), newQuality(-1), quality ( 0 ), overflow(0), spheres ( 0 ), cylinders ( 0 ), textRenderer ( new TextRenderer ), initialized ( false ), sharing ( 0 ), type(Primitive::OtherType), id ( -1 ), color(0) {}; ~GLPainterPrivate() { deleteObjects(); delete textRenderer; } GLWidget *widget; int newQuality; int quality; int overflow; /** array of pointers to Spheres. You might ask, why not have * a plain array of Spheres. The idea is that more than one global detail level * may use a given sphere detail level. It is therefore interesting to be able * to share that sphere, instead of having redundant spheres in memory. */ Sphere **spheres; /** array of pointers to Cylinders. You might ask, why not have * a plain array of Cylinders. The idea is that more than one global detail level * may use a given cylinder detail level. It is therefore interesting to be able * to share that cylinder, instead of having redundant cylinder in memory. */ Cylinder **cylinders; TextRenderer *textRenderer; bool initialized; void deleteObjects(); void createObjects(); inline bool isValid(); /** * Painters can be shared, we must keep track of this. */ int sharing; // The primitive type and id of the current object Primitive::Type type; int id; Color color; }; inline bool GLPainterPrivate::isValid() { if(!widget) { qWarning("GLPainter not active."); return false; } if(!initialized) { if(newQuality != -1) { quality = newQuality; } qDebug() << "createObjects()"; createObjects(); initialized = true; } else if(newQuality != -1) { if(newQuality != quality) { qDebug() << "updateObjects()"; deleteObjects(); quality = newQuality; createObjects(); } newQuality = -1; } return true; } void GLPainterPrivate::deleteObjects() { int level, lastLevel, n; // delete the spheres. One has to be wary that more than one sphere // pointer may have the same value. One wants to avoid deleting twice the same sphere. if (spheres) { lastLevel = -1; for (n = 0; n < PAINTER_DETAIL_LEVELS; ++n) { level = PAINTER_SPHERES_LEVELS_ARRAY[quality][n]; if (level != lastLevel) { lastLevel = level; if (spheres[n]) { delete spheres[n]; spheres[n] = 0; } } } delete[] spheres; spheres = 0; } // delete the cylinders. One has to be wary that more than one cylinder // pointer may have the same value. One wants to avoid deleting twice the same cylinder. if (cylinders) { lastLevel = -1; for (n = 0; n < PAINTER_DETAIL_LEVELS; ++n) { level = PAINTER_CYLINDERS_LEVELS_ARRAY[quality][n]; if (level != lastLevel) { lastLevel = level; if (cylinders[n]) { delete cylinders[n]; cylinders[n] = 0; } } } delete[] cylinders; cylinders = 0; } } void GLPainterPrivate::createObjects() { // create the spheres. More than one sphere detail level may have the same value. // in that case we want to reuse the corresponding sphere by just copying the pointer, // instead of creating redundant spheres. if ( spheres == 0 ) { spheres = new Sphere*[PAINTER_DETAIL_LEVELS]; int level, lastLevel; lastLevel = PAINTER_SPHERES_LEVELS_ARRAY[quality][0]; spheres[0] = new Sphere ( lastLevel ); for (int n = 1; n < PAINTER_DETAIL_LEVELS; ++n) { level = PAINTER_SPHERES_LEVELS_ARRAY[quality][n]; if (level == lastLevel) { spheres[n] = spheres[n-1]; } else { lastLevel = level; spheres[n] = new Sphere ( level ); } } } // create the cylinders. More than one cylinder detail level may have the same value. // in that case we want to reuse the corresponding cylinder by just copying the pointer, // instead of creating redundant cylinders. if (cylinders == 0) { cylinders = new Cylinder*[PAINTER_DETAIL_LEVELS]; int level, lastLevel; lastLevel = PAINTER_SPHERES_LEVELS_ARRAY[quality][0]; cylinders[0] = new Cylinder ( lastLevel ); for (int n = 1; n < PAINTER_DETAIL_LEVELS; ++n) { level = PAINTER_CYLINDERS_LEVELS_ARRAY[quality][n]; if (level == lastLevel) { cylinders[n] = cylinders[n-1]; } else { lastLevel = level; cylinders[n] = new Cylinder ( level ); } } } } GLPainter::GLPainter(int quality) : d(new GLPainterPrivate), m_dynamicScaling(true) { if (quality < 0 || quality >= PAINTER_MAX_DETAIL_LEVEL) quality = DEFAULT_GLOBAL_QUALITY_SETTING; else d->quality = quality; } GLPainter::~GLPainter() { delete d; } void GLPainter::setQuality ( int quality ) { assert ( quality >= 0 && quality < PAINTER_GLOBAL_QUALITY_SETTINGS ); d->newQuality = quality; } int GLPainter::quality() const { return d->quality; } void GLPainter::setName ( const Primitive *primitive ) { d->type = primitive->type(); if (d->type == Primitive::AtomType) d->id = static_cast(primitive)->index(); else if (d->type == Primitive::BondType) d->id = static_cast(primitive)->index(); } void GLPainter::setName ( Primitive::Type type, int id ) { d->type = type; d->id = id; } void GLPainter::setColor (const Color *color) { d->color.setFromRgba(color->red(), color->green(), color->blue(), color->alpha()); } void GLPainter::setColor (const QColor *color) { d->color.setFromRgba(color->redF(), color->greenF(), color->blueF(), color->alphaF()); } void GLPainter::setColor ( float red, float green, float blue, float alpha ) { d->color.setFromRgba(red, green, blue, alpha); } void GLPainter::setColor(QString name) { d->color.setFromQColor(QColor(name)); } void GLPainter::drawSphere (const Eigen::Vector3d ¢er, double radius) { if(!d->isValid()) return; // Default to the minimum detail level for this quality int detailLevel = PAINTER_MAX_DETAIL_LEVEL / 3; if (d->widget->projection() != GLWidget::Orthographic && m_dynamicScaling) { double apparentRadius = radius / d->widget->camera()->distance(center); detailLevel = 1 + static_cast(floor (PAINTER_SPHERES_DETAIL_COEFF * (sqrt(apparentRadius) - PAINTER_SPHERES_SQRT_LIMIT_MIN_LEVEL))); if (detailLevel < 0) detailLevel = 0; if (detailLevel > PAINTER_MAX_DETAIL_LEVEL) detailLevel = PAINTER_MAX_DETAIL_LEVEL; } d->color.applyAsMaterials(); pushName(); d->spheres[detailLevel]->draw (center, radius); popName(); } void GLPainter::drawCylinder ( const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double radius ) { if(!d->isValid()) { return; } // Default to the minimum detail level for this quality int detailLevel = PAINTER_MAX_DETAIL_LEVEL / 3; if (d->widget->projection() != GLWidget::Orthographic && m_dynamicScaling) { double apparentRadius = radius / d->widget->camera()->distance(end1); detailLevel = 1 + static_cast ( floor ( PAINTER_CYLINDERS_DETAIL_COEFF * ( sqrt ( apparentRadius ) - PAINTER_CYLINDERS_SQRT_LIMIT_MIN_LEVEL ) ) ); if (detailLevel < 0) detailLevel = 0; if (detailLevel > PAINTER_MAX_DETAIL_LEVEL) detailLevel = PAINTER_MAX_DETAIL_LEVEL; } d->color.applyAsMaterials(); pushName(); d->cylinders[detailLevel]->draw ( end1, end2, radius ); popName(); } void GLPainter::drawMultiCylinder ( const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double radius, int order, double shift ) { if(!d->isValid()) { return; } // Default to the minimum detail level for this quality int detailLevel = PAINTER_MAX_DETAIL_LEVEL / 3; if (d->widget->projection() != GLWidget::Orthographic && m_dynamicScaling) { double apparentRadius = radius / d->widget->camera()->distance(end1); detailLevel = 1 + static_cast ( floor ( PAINTER_CYLINDERS_DETAIL_COEFF * ( sqrt ( apparentRadius ) - PAINTER_CYLINDERS_SQRT_LIMIT_MIN_LEVEL ) ) ); if (detailLevel < 0) detailLevel = 0; if (detailLevel > PAINTER_MAX_DETAIL_LEVEL) detailLevel = PAINTER_MAX_DETAIL_LEVEL; } d->color.applyAsMaterials(); pushName(); d->cylinders[detailLevel]->drawMulti ( end1, end2, radius, order, shift, d->widget->normalVector() ); popName(); } void GLPainter::drawCone(const Eigen::Vector3d &base, const Eigen::Vector3d &cap, double baseRadius, double) { const int CONE_TESS_LEVEL = 30; // This draws a cone which will be most useful for drawing arrows etc. Eigen::Vector3d axis = cap - base; Eigen::Vector3d axisNormalized = axis.normalized(); Eigen::Vector3d ortho1, ortho2; ortho1 = axisNormalized.unitOrthogonal(); ortho1 *= baseRadius; ortho2 = axisNormalized.cross(ortho1); d->color.applyAsMaterials(); // Draw the cone // unfortunately we can't use a GL_TRIANGLE_FAN because this would force // having a common normal vector at the tip. for (int j = 0; j < CONE_TESS_LEVEL; j++) { const double alphaStep = 2.0 * M_PI / CONE_TESS_LEVEL; double alpha = j * alphaStep; double alphaNext = alpha + alphaStep; double alphaPrec = alpha - alphaStep; Eigen::Vector3d v = sin(alpha) * ortho1 + cos(alpha) * ortho2 + base; Eigen::Vector3d vNext = sin(alphaNext) * ortho1 + cos(alphaNext) * ortho2 + base; Eigen::Vector3d vPrec = sin(alphaPrec) * ortho1 + cos(alphaPrec) * ortho2 + base; Eigen::Vector3d n = (cap - v).cross(v - vPrec).normalized(); Eigen::Vector3d nNext = (cap - vNext).cross(vNext - v).normalized(); glBegin(GL_TRIANGLES); glNormal3dv((n+nNext).normalized().data()); glVertex3dv(cap.data()); glNormal3dv(nNext.data()); glVertex3dv(vNext.data()); glNormal3dv(n.data()); glVertex3dv(v.data()); glEnd(); } // Now to draw the base glBegin(GL_TRIANGLE_FAN); glNormal3dv((-axisNormalized).eval().data()); glVertex3dv(base.data()); for (int j = 0; j <= CONE_TESS_LEVEL; j++) { double alpha = -j * M_PI / (CONE_TESS_LEVEL/2.0); Eigen::Vector3d v = cos(alpha) * ortho1 + sin(alpha) * ortho2 + base; glVertex3dv(v.data()); } glEnd(); } void GLPainter::drawLine(const Eigen::Vector3d &start, const Eigen::Vector3d &end, double lineWidth) { // Draw a line between two points of the specified thickness if(!d->isValid()) { return; } glPushAttrib(GL_LIGHTING_BIT); glDisable(GL_LIGHTING); glLineWidth(lineWidth); d->color.apply(); // Draw the line glBegin(GL_LINE_STRIP); glVertex3dv(start.data()); glVertex3dv(end.data()); glEnd(); glPopAttrib(); } void GLPainter::drawMultiLine(const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double lineWidth, int order, short stipple) { // Draw multiple lines between two points of the specified thickness if(!d->isValid()) { return; } // construct the 4D transformation matrix Eigen::Matrix4d matrix; matrix.row(3) << 0,0,0,1; matrix.block<3,1>(0,3) = end1; matrix.block<3,1>(0,2) = end2 - end1; // the "axis vector" of the line // Now we want to construct an orthonormal basis whose third // vector is axis.normalized(). The first vector in this // basis, which we call ortho1, should be approximately lying in the // z=0 plane if possible. This is to ensure double bonds don't look // like single bonds from the default point of view. Eigen::Vector3d axisNormalized = matrix.block<3,1>(0,2).normalized(); Eigen::Block ortho1(matrix, 0, 0); ortho1 = axisNormalized.cross(d->widget->normalVector()); double ortho1Norm = ortho1.norm(); if( ortho1Norm > 0.001 ) ortho1 = ortho1.normalized() * lineWidth; else ortho1 = axisNormalized.unitOrthogonal() * lineWidth; matrix.block<3,1>(0,1) = axisNormalized.cross(ortho1); // now the matrix is entirely filled, so we can do the actual drawing ! glPushMatrix(); glMultMatrixd( matrix.data() ); glDisable(GL_LIGHTING); glLineWidth(lineWidth); d->color.apply(); glEnable(GL_LINE_STIPPLE); glLineStipple(1, stipple); // Draw the line if (order == 1 || order == -1) { // single or aromatic glBegin(GL_LINE_STRIP); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 0.0, 1.0); glEnd(); } else { double angleOffset = 0.0; if( order >= 3 ) { if( order == 3 ) angleOffset = 90.0; else angleOffset = 22.5; } // these may need further refinement double displacementFactor = 0.0004 * lineWidth + 0.018; for( int i = 0; i < order; i++) { glPushMatrix(); glRotated( angleOffset + 360.0 * i / order, 0.0, 0.0, 1.0 ); glTranslated( displacementFactor, 0.0, 0.0 ); glBegin(GL_LINE_STRIP); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0, 0.0, 1.0); glEnd(); glPopMatrix(); } } glDisable(GL_LINE_STIPPLE); glPopMatrix(); glEnable(GL_LIGHTING); } void GLPainter::drawTriangle(const Eigen::Vector3d &p1, const Eigen::Vector3d &p2, const Eigen::Vector3d &p3) { if(!d->isValid()) { return; } // Sort out the winding order by assigning in the correct order Eigen::Vector3d tp2, tp3; // Don't want planes to be too shiny. d->color.applyAsFlatMaterials(); // The plane normal vector of the view const Eigen::Vector3d planeNormalVector = d->widget->normalVector(); // Calculate the normal for the triangle as GL_AUTO_NORMAL doesn't seem to work Eigen::Vector3d v1, v2, n; v1 = p2 - p1; v2 = p3 - p2; n = v1.cross(v2); n.normalize(); // Dot product is 1 or -1 - want normals facing the same direction if (n.dot(p1 - d->widget->camera()->backTransformedZAxis()) < 0) { n *= -1; tp2 = p3; tp3 = p2; } else { tp2 = p2; tp3 = p3; } glBegin(GL_TRIANGLES); glNormal3dv(n.data()); glVertex3dv(p1.data()); glVertex3dv(tp2.data()); glVertex3dv(tp3.data()); glEnd(); } void GLPainter::drawTriangle(const Eigen::Vector3d &p1, const Eigen::Vector3d &p2, const Eigen::Vector3d &p3, const Eigen::Vector3d &n) { if(!d->isValid()) { return; } // Don't want planes to be too shiny. d->color.applyAsFlatMaterials(); d->color.apply(); glBegin(GL_TRIANGLES); glNormal3dv(n.data()); glVertex3dv(p1.data()); glVertex3dv(p2.data()); glVertex3dv(p3.data()); glEnd(); } void GLPainter::drawSpline(const QVector& pts, double radius) { // Draw a spline between two points of the specified thickness if(!d->isValid()) { return; } // The first value is repeated three times as is the last in order to complete the curve QVector points = pts; // glColor4f(d->color.red(), d->color.green(), d->color.blue(), d->color.alpha()); /* QVector p, a; a.resize(4); p.resize(4); // Define the number of interpolated points between control points int numPts = 40; double step = 1. / double(numPts); Eigen::Vector3d last, cur; for (int i = 2; i < pts.size()+1; i++) { p[0] = points.at(i-1); p[1] = points.at(i); p[2] = points.at(i+1); p[3] = points.at(i+2); // Now calculate the basis a[0] = (-p[0] + 3.*p[1] - 3.*p[2] + p[3]) / 6.; a[1] = (3.*p[0] - 6.*p[1] + 3.*p[2]) / 6.; a[2] = (-3.*p[0] + 3.*p[2]) / 6.; a[3] = (p[0] + 4.*p[1] + p[2]) / 6.; // Now interpolate some points and draw them... last = a[3]; for (int j = 0; j < numPts; j++) { double t = step * j; cur = a[3] + t*(a[2] + t*(a[1] + t*a[0])); // drawCylinder(last, cur, radius/4.); last = cur; } } */ glEnable(GL_AUTO_NORMAL); GLUnurbsObj *nurb = gluNewNurbsRenderer(); // These settings were inspired by the code supplied by Thomas Margraf // and tweaked a little more by me - performance seems good. // FIXME Should still be linked to our global quality level. gluNurbsProperty(nurb, GLU_V_STEP, 4); gluNurbsProperty(nurb, GLU_U_STEP, 10); gluNurbsProperty(nurb, GLU_CULLING, GL_TRUE); gluNurbsProperty(nurb, GLU_SAMPLING_METHOD, GLU_DOMAIN_DISTANCE); // This seems reasonable but should be linked to the detail level int TUBE_TESS = 6; QVarLengthArray ctrlpts(points.size()*TUBE_TESS*3); QVarLengthArray uknots(points.size() + 4); // The first one is a special case Eigen::Vector3d axis = points[1] - points[0]; Eigen::Vector3d axisNormalized = axis.normalized(); Eigen::Vector3d ortho1, ortho2; ortho1 = axisNormalized.unitOrthogonal() * radius; ortho2 = axisNormalized.cross(ortho1); for (int j = 0; j < TUBE_TESS; j++) { double alpha = j * M_PI / 1.5f; Eigen::Vector3d v = cosf(alpha) * ortho1 + sinf(alpha) * ortho2; ctrlpts[3*j+0] = v.x() + points[0].x(); ctrlpts[3*j+1] = v.y() + points[0].y(); ctrlpts[3*j+2] = v.z() + points[0].z(); } uknots[2] = 0.0; for (int i = 1; i < points.size(); i++) { axis = Eigen::Vector3d(points[i-1].x() - points[i].x(), points[i-1].y() - points[i].y(), points[i-1].z() - points[i].z()); axisNormalized = axis.normalized(); ortho1 = axisNormalized.unitOrthogonal(); ortho1 *= radius; ortho2 = axisNormalized.cross(ortho1); for (int j = 0; j < TUBE_TESS; j++) { double alpha = j * M_PI / 1.5f; Eigen::Vector3d v = cosf(alpha) * ortho1 + sinf(alpha) * ortho2; ctrlpts[(i*TUBE_TESS + j)*3 + 0] = v.x() + points[i].x(); ctrlpts[(i*TUBE_TESS + j)*3 + 1] = v.y() + points[i].y(); ctrlpts[(i*TUBE_TESS + j)*3 + 2] = v.z() + points[i].z(); } uknots[i+2] = i - 1.0; } uknots[0] = 0.0; uknots[1] = 0.0; uknots[points.size()] = points.size() - 1.0; uknots[points.size()+1] = points.size() - 1.0; uknots[points.size()+2] = points.size() - 1.0; uknots[points.size()+3] = points.size() - 1.0; // Hard coded right now - will generalise for arbitrary TUBE_TESS values GLfloat vknots[10] = {0., 0., 1., 2., 3., 4., 5., 6., 7., 7.}; d->color.applyAsMaterials(); // Actually draw the tube as a nurb gluBeginSurface(nurb); gluNurbsSurface(nurb, points.size() + 4, uknots.data(), TUBE_TESS + 4, vknots, TUBE_TESS*3, 3, ctrlpts.data(), 4, 4, GL_MAP2_VERTEX_3); gluEndSurface(nurb); gluDeleteNurbsRenderer(nurb); glDisable(GL_AUTO_NORMAL); } void GLPainter::drawShadedSector(const Eigen::Vector3d & origin, const Eigen::Vector3d & direction1, const Eigen::Vector3d & direction2, double radius, bool alternateAngle) { assert( d->widget ); // Get vectors representing the two lines out from the center of the circle. Eigen::Vector3d u = direction1 - origin; Eigen::Vector3d v = direction2 - origin; // Adjust the length of u and v to the radius given. u = u.normalized() * radius; v = v.normalized() * radius; // Angle between u and v. double uvAngle = acos(u.dot(v) / v.squaredNorm()) * 180.0 / M_PI; // If angle is less than 1 (will be approximated to 0), attempting to draw // will crash, so return. if (abs((int)uvAngle) <= 1) return; // If alternateAngle is set, subtract this angle from 360 to get the alternate angle. if (alternateAngle) { uvAngle = 360.0 - (uvAngle > 0 ? uvAngle : -uvAngle); } // Vector perpindicular to both u and v. Eigen::Vector3d n = u.cross(v); if (n.norm() < 1e-3) { Eigen::Vector3d A = u.cross(Eigen::Vector3d::UnitX()); Eigen::Vector3d B = u.cross(Eigen::Vector3d::UnitY()); n = A.norm() >= B.norm() ? A : B; } n.normalize(); // Calculate the points along the curve at each half-degree increment until we // reach the next line. Eigen::Vector3d points[720]; for (int theta = 1; theta < (uvAngle * 2); theta++) { // Apply a rotation about a vector perpindicular // to the plane to the vector to find the new point. if (alternateAngle) { points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * v; } else { points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * u; } points[theta-1] = d->widget->camera()->modelview() * (origin + points[theta-1]); } // Get vectors representing the points' positions in terms of the model view. Eigen::Vector3d _origin = d->widget->camera()->modelview() * origin; Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin+u); Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin+v); glPushAttrib(GL_ALL_ATTRIB_BITS); glPushMatrix(); glLoadIdentity(); glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); d->color.apply(); // Draw the transparent polygon that makes up the sector. glBegin(GL_TRIANGLE_FAN); glVertex3dv(_origin.data()); if (alternateAngle) { glVertex3dv(_direction2.data()); for (int i = 0; i < uvAngle*2 - 1; i++) glVertex3dv(points[i].data()); glVertex3dv(_direction1.data()); } else { glVertex3dv(_direction1.data()); for (int i = 0; i < uvAngle*2 - 1; i++) glVertex3dv(points[i].data()); glVertex3dv(_direction2.data()); } glEnd(); glPopMatrix(); glPopAttrib(); } void GLPainter::drawArc(const Eigen::Vector3d & origin, const Eigen::Vector3d & direction1, const Eigen::Vector3d & direction2, double radius, double lineWidth, bool alternateAngle) { assert( d->widget ); // Get vectors representing the two lines out from the center of the circle. Eigen::Vector3d u = direction1 - origin; Eigen::Vector3d v = direction2 - origin; // Adjust the length of u and v to the radius given. u = u.normalized() * radius; v = v.normalized() * radius; // Angle between u and v. double uvAngle = acos(u.dot(v) / v.squaredNorm()) * 180.0 / M_PI; // If angle is less than 1 (will be approximated to 0), attempting to draw // will crash, so return. if (abs((int)uvAngle) <= 1) return; // If alternateAngle is set, subtract this angle from 360 to get the alternate angle. if (alternateAngle) { uvAngle = 360.0 - (uvAngle > 0 ? uvAngle : -uvAngle); } // Vector perpindicular to both u and v. Eigen::Vector3d n = u.cross(v); if (n.norm() < 1e-3) { Eigen::Vector3d A = u.cross(Eigen::Vector3d::UnitX()); Eigen::Vector3d B = u.cross(Eigen::Vector3d::UnitY()); n = A.norm() >= B.norm() ? A : B; } n.normalize(); // Calculate the points along the curve at each half-degree increment until we // reach the next line. Eigen::Vector3d points[720]; for (int theta = 1; theta < (uvAngle * 2); theta++) { // Apply a rotation about a vector perpindicular // to the plane to the vector to find the new point. if (alternateAngle) { points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * v; } else { points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * u; } points[theta-1] = d->widget->camera()->modelview() * (origin + points[theta-1]); } // Get vectors representing the points' positions in terms of the model view. Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin + u); Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin + v); glPushAttrib(GL_ALL_ATTRIB_BITS); glPushMatrix(); glLoadIdentity(); glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); glLineWidth(lineWidth); d->color.apply(); // Draw the arc. glBegin(GL_LINE_STRIP); if (alternateAngle) { glVertex3dv(_direction2.data()); for (int i = 0; i < uvAngle*2 - 1; i++) glVertex3dv(points[i].data()); glVertex3dv(_direction1.data()); } else { glVertex3dv(_direction1.data()); for (int i = 0; i < uvAngle*2 - 1; i++) glVertex3dv(points[i].data()); glVertex3dv(_direction2.data()); } glEnd(); glPopMatrix(); glPopAttrib(); } void GLPainter::drawShadedQuadrilateral(const Eigen::Vector3d & point1, const Eigen::Vector3d & point2, const Eigen::Vector3d & point3, const Eigen::Vector3d & point4) { assert( d->widget ); glPushAttrib(GL_ALL_ATTRIB_BITS); glPushMatrix(); glLoadIdentity(); glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); d->color.apply(); glBegin(GL_TRIANGLE_FAN); glVertex3dv(point1.data()); glVertex3dv(point2.data()); glVertex3dv(point3.data()); glVertex3dv(point4.data()); glEnd(); glPopMatrix(); glPopAttrib(); } void GLPainter::drawQuadrilateral(const Eigen::Vector3d & point1, const Eigen::Vector3d & point2, const Eigen::Vector3d & point3, const Eigen::Vector3d & point4, double lineWidth) { assert( d->widget ); glPushAttrib(GL_LIGHTING_BIT); glDisable(GL_LIGHTING); glLineWidth(lineWidth); d->color.apply(); glBegin(GL_LINE_LOOP); glVertex3dv(point1.data()); glVertex3dv(point2.data()); glVertex3dv(point3.data()); glVertex3dv(point4.data()); glEnd(); glPopAttrib(); } void GLPainter::drawLineLoop(const QList & points, const double lineWidth) { assert( d->widget ); glPushAttrib(GL_LIGHTING_BIT); glDisable(GL_LIGHTING); glLineWidth(lineWidth); d->color.apply(); glBegin(GL_LINE_LOOP); for (QList::const_iterator it = points.constBegin(), it_end = points.constEnd(); it != it_end; ++it) { glVertex3dv(it->data()); } glEnd(); glPopAttrib(); } void GLPainter::drawMesh(const Mesh & mesh, int mode) { // Now we draw the given mesh to the OpenGL widget switch (mode) { case 0: glPolygonMode(GL_FRONT, GL_FILL); glEnable(GL_LIGHTING); break; case 1: glPolygonMode(GL_FRONT, GL_LINE); glDisable(GL_LIGHTING); break; case 2: glPolygonMode(GL_FRONT, GL_POINT); glDisable(GL_LIGHTING); break; } d->color.apply(); d->color.applyAsMaterials(); // Render the triangles of the mesh std::vector v = mesh.vertices(); std::vector n = mesh.normals(); if (v.size() != n.size()) { qDebug() << "Vertices size does not equal normals size:" << v.size() << n.size(); return; } glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, 0, &(v[0])); glNormalPointer(GL_FLOAT, 0, &(n[0])); glDrawArrays(GL_TRIANGLES, 0, v.size()); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glPolygonMode(GL_FRONT, GL_FILL); glEnable(GL_LIGHTING); } void GLPainter::drawColorMesh(const Mesh & mesh, int mode) { // Now we draw the given mesh to the OpenGL widget switch (mode) { case 0: glPolygonMode(GL_FRONT, GL_FILL); glEnable(GL_LIGHTING); break; case 1: glPolygonMode(GL_FRONT, GL_LINE); glDisable(GL_LIGHTING); break; case 2: glPolygonMode(GL_FRONT, GL_POINT); glDisable(GL_LIGHTING); break; } // Render the triangles of the mesh std::vector v = mesh.vertices(); std::vector n = mesh.normals(); std::vector c = mesh.colors(); if (v.size() != n.size() || v.size() != c.size()) { qDebug() << "Vertices size does not equal normals size or color size:" << v.size() << n.size() << c.size(); return; } d->color.applyAsMaterials(); /* Need to work out issues with material properties, lighting etc... glEnable(GL_COLOR_MATERIAL); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(3, GL_FLOAT, 0, &(v[0])); glNormalPointer(GL_FLOAT, 0, &(n[0])); glColorPointer(3, GL_FLOAT, 0, &(c[0])); glDrawArrays(GL_TRIANGLES, 0, v.size()); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glDisable(GL_COLOR_MATERIAL); */ float alpha = d->color.alpha(); glBegin(GL_TRIANGLES); for(unsigned int i = 0; i < v.size(); ++i) { applyAsMaterials(c[i], alpha); glNormal3fv(n[i].data()); glVertex3fv(v[i].data()); } glEnd(); glPolygonMode(GL_FRONT, GL_FILL); glEnable(GL_LIGHTING); } int GLPainter::drawText ( int x, int y, const QString &string ) { if(!d->isValid()) { return 0; } d->textRenderer->begin ( d->widget ); int val = d->textRenderer->draw ( x, y, string ); d->textRenderer->end( ); return val; } int GLPainter::drawText ( const QPoint& pos, const QString &string ) { assert( d->widget ); if(!d->isValid()) { return 0; } d->textRenderer->begin( d->widget ); d->textRenderer->draw ( pos.x(), pos.y(), string ); d->textRenderer->end( ); return 0; } int GLPainter::drawText ( const Eigen::Vector3d &pos, const QString &string ) { if(!d->isValid()) { return 0; } d->textRenderer->begin ( d->widget ); int val = d->textRenderer->draw ( pos, string ); d->textRenderer->end( ); return val; } int GLPainter::drawText(const Eigen::Vector3d &pos, const QString &string, const QFont &font) { if(!d->isValid()) { return 0; } d->widget->renderText(pos.x(), pos.y(), pos.z(), string, font); return 0; } void GLPainter::drawBox(const Eigen::Vector3d &, const Eigen::Vector3d &) { } void GLPainter::drawBoxEdges(const Eigen::Vector3d &offset, const Eigen::Vector3d &v1, const Eigen::Vector3d &v2, const Eigen::Vector3d &v3, const double linewidth) { // 6------8 c1 = origin // /: /| c2 = origin + v1 // / : / | c3 = origin + v2 // / 4---/--7 c4 = origin + v3 // / / / / c5 = origin + v1 + v2 // 3------5 / c6 = origin + v2 + v3 // | / | / c7 = origin + v1 + v3 // |/ |/ c8 = origin + v1 + v2 + v3 // 1------2 const Eigen::Vector3d &c1 (offset); const Eigen::Vector3d c2 (c1 + v1); const Eigen::Vector3d c3 (c1 + v2); const Eigen::Vector3d c4 (c1 + v3); const Eigen::Vector3d c5 (c2 + v2); const Eigen::Vector3d c6 (c3 + v3); const Eigen::Vector3d c7 (c2 + v3); const Eigen::Vector3d c8 (c5 + v3); this->drawBoxEdges(c1, c2, c3, c4, c5, c6, c7, c8, linewidth); } void GLPainter::drawBoxEdges(const Eigen::Vector3d &c1, const Eigen::Vector3d &c2, const Eigen::Vector3d &c3, const Eigen::Vector3d &c4, const Eigen::Vector3d &c5, const Eigen::Vector3d &c6, const Eigen::Vector3d &c7, const Eigen::Vector3d &c8, const double lineWidth) { if (!d->isValid()) { return; } glPushAttrib(GL_LIGHTING_BIT); glDisable(GL_LIGHTING); glLineWidth(lineWidth); d->color.apply(); // Box is: // 6------8 // /: /| // / : / | // / 4---/--7 // / / / / // 3------5 / // | / | / // |/ |/ // 1------2 // Near "plane" glBegin(GL_LINE_LOOP); glVertex3dv(c1.data()); glVertex3dv(c2.data()); glVertex3dv(c5.data()); glVertex3dv(c3.data()); glEnd(); // Far "plane" glBegin(GL_LINE_LOOP); glVertex3dv(c4.data()); glVertex3dv(c7.data()); glVertex3dv(c8.data()); glVertex3dv(c6.data()); glEnd(); // Connect glBegin(GL_LINES); glVertex3dv(c1.data()); glVertex3dv(c4.data()); glVertex3dv(c2.data()); glVertex3dv(c7.data()); glVertex3dv(c5.data()); glVertex3dv(c8.data()); glVertex3dv(c3.data()); glVertex3dv(c6.data()); glEnd(); glPopAttrib(); } void GLPainter::drawTorus(const Eigen::Vector3d &, double, double) { } void GLPainter::drawEllipsoid(const Eigen::Vector3d &, const Eigen::Matrix3d &) { } int GLPainter::defaultQuality() { return DEFAULT_GLOBAL_QUALITY_SETTING; } int GLPainter::maxQuality() { return PAINTER_GLOBAL_QUALITY_SETTINGS-1; } bool GLPainter::isShared() { return d->sharing-1; } bool GLPainter::isActive() { return (d->widget); } void GLPainter::incrementShare() { d->sharing++; } void GLPainter::decrementShare() { d->sharing--; } void GLPainter::begin(GLWidget *widget) { d->widget = widget; d->overflow++; // Ensure that the painter is properly initialised d->isValid(); } void GLPainter::end() { d->overflow--; if(!d->overflow) { d->widget = 0; } } void GLPainter::pushName() { // Push the type and id if they are set if (d->id != -1) { glPushName(d->type); glPushName(d->id); } } void GLPainter::resetName() { d->type = Primitive::OtherType; d->id = -1; } void GLPainter::popName() { // Pop the type and id if they are set, then reset them if (d->id != -1) { glPopName(); glPopName(); resetName(); } } void GLPainter::apply(const Color3f &color) { glColor3fv(color.data()); } void GLPainter::applyAsMaterials(const Color3f &c, float alpha) { float color[] = {c.red(), c.green(), c.blue(), alpha}; float ambientColor [] = {color[0] / 3.0f, color[1] / 3.0f, color[2] / 3.0f, alpha}; float s = (0.5f + fabs( color[0] - color[1]) + fabs(color[2] - color[1]) + fabs(color[2] - color[0])) / 4.0f; float t = 1.0 - s; float specularColor [] = {s + t * color[0], s + t * color[1], s + t * color[2], alpha}; glMaterialfv(GL_FRONT, GL_AMBIENT, ambientColor); glMaterialfv(GL_FRONT, GL_DIFFUSE, color); glMaterialfv(GL_FRONT, GL_SPECULAR, specularColor); glMaterialf(GL_FRONT, GL_SHININESS, 50.0); } void GLPainter::setDynamicScaling(bool scaling) { m_dynamicScaling = scaling; } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/dockextension.cpp0000644000175000001440000000320012250371054021160 0ustar marcususers/********************************************************************** DockExtension - interface for extensions which provide docks Copyright (C) 2010 Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "dockextension.h" namespace Avogadro { DockExtension::DockExtension(QObject *parent) : Extension(parent) { } DockExtension::~DockExtension() { } QList DockExtension::actions() const { return QList(); } QUndoCommand* DockExtension::performAction(QAction *action, GLWidget *widget) { Q_UNUSED(action); Q_UNUSED(widget); return 0; } Qt::DockWidgetArea DockExtension::preferredDockArea() const { return Qt::RightDockWidgetArea; } int DockExtension::dockOrder() const { return 0; } } avogadro-1.1.1/libavogadro/src/toolgroup.h0000644000175000001440000000715512250371054020017 0ustar marcususers/********************************************************************** ToolGroup - GLWidget manager for Tools. Copyright (C) 2007,2008 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef TOOLGROUP_H #define TOOLGROUP_H #include #include #include class QActionGroup; namespace Avogadro { class Molecule; /** * @class ToolGroup * @brief Manager for GLWidget Tools * @author Donald Ephraim Curtis * * This class is a collection of Tools which allow manipulation of the * GLWidget area. */ class ToolGroupPrivate; class A_EXPORT ToolGroup : public QObject { Q_OBJECT public: /** * Constructor */ ToolGroup(QObject *parent = 0); /** * Deconstructor */ ~ToolGroup(); /** * Append the @p tools to the toolgroup. */ void append(QList tools); /** * Append the @p tool to the toolgroup. */ void append(Tool *tool); /** * @return The active tool. */ Tool* activeTool() const; /** * @param i index of the tool to return * @return The tool at index i. */ Tool* tool(int i) const; /** * @return Constant list of the tools. */ const QList& tools() const; /** * @return constant QActionGroup of all the tool select actions. */ const QActionGroup * activateActions() const; public Q_SLOTS: /** * @param i index of the tool to set active */ void setActiveTool(int i); /** * @param name the name of the tool to set active (if it's found) */ void setActiveTool(const QString& name); /** * @param tool pointer to the tool to set active */ void setActiveTool(Tool *tool); /** * @param molecule pointer to the molecule tools in this group should use */ void setMolecule(Molecule *molecule); /** * Write the settings of the GLWidget in order to save them to disk. */ void writeSettings(QSettings &settings) const; /** * Read the settings of the GLWidget and restore them. */ void readSettings(QSettings &settings); /** * Reset the toolgroup to it's original state. */ void removeAllTools(); private Q_SLOTS: void activateTool(); Q_SIGNALS: /** * @param tool the activated tool */ void toolActivated(Tool *tool); /** * This signal is emitted when one or more tools are destoyed. * (Happens when plugins are reloaded) */ void toolsDestroyed(); private: ToolGroupPrivate * const d; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/pythoninterpreter.h0000644000175000001440000000533412250371054021567 0ustar marcususers/********************************************************************** PythonInterpreter - Python Internal Interactive Interpreter Copyright (C) 2008 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PYTHONINTERPRETER_H #define PYTHONINTERPRETER_H #include #include #include #include namespace Avogadro { class Molecule; /** * @author Donald Ephraim Curtis * @class PythonInterpreter pythoninterpreter.h * @brief Class to embed the Python interpreter in Avogadro. * * This class is used to help embed the Python interpreter into C++ apps * which wish to expose parts of the Avogadro API. Specifically instances * of Avogadro classes (Molecule / GLWidget). * * Currently all instances of this class share the same namespace. * */ class PythonInterpreterPrivate; class A_EXPORT PythonInterpreter { public: /** * Constructor */ PythonInterpreter(); /** * Deconstructor */ ~PythonInterpreter(); /** * set the molecule object */ void setMolecule(Molecule *molecule); void addSearchPath(const QString &path); /** * @param command string containing the python command to perform on the interpreter */ QString exec(const QString &command); QString exec(const QString &command, boost::python::object local); QString eval(const QString &string, boost::python::object local); private: PythonInterpreterPrivate *const d; static int m_initCount; boost::python::object execWrapper(const QString &command, boost::python::object main, boost::python::object local); boost::python::object evalWrapper(const QString &string, boost::python::object main, boost::python::object local); }; } #endif avogadro-1.1.1/libavogadro/src/dockwidget.cpp0000644000175000001440000000257712250371054020447 0ustar marcususers/********************************************************************** DockWidget -- Dock widget for avogadro Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. **********************************************************************/ #include "dockwidget.h" namespace Avogadro { DockWidget::DockWidget(const QString &title, QWidget *parent, Qt::WindowFlags flags) : QDockWidget(title, parent, flags), m_preferredDockWidgetArea(Qt::RightDockWidgetArea) { } DockWidget::DockWidget(QWidget *parent, Qt::WindowFlags flags) : QDockWidget(parent, flags), m_preferredDockWidgetArea(Qt::RightDockWidgetArea) { } DockWidget::~DockWidget() { } Qt::DockWidgetArea DockWidget::preferredWidgetDockArea() { return this->m_preferredDockWidgetArea; } void DockWidget::setPreferredDockWidgetArea(Qt::DockWidgetArea pref) { this->m_preferredDockWidgetArea = pref; } } avogadro-1.1.1/libavogadro/src/extension.cpp0000644000175000001440000000431612250371054020330 0ustar marcususers/********************************************************************** Extension - Extension Class Interface Copyright (C) 2007-2008 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "extension.h" #include "dockwidget.h" namespace Avogadro { Extension::Extension(QObject *parent) : Plugin(parent) { } Extension::~Extension() { } Plugin::Type Extension::type() const { return Plugin::ExtensionType; } QString Extension::typeName() const { return tr("Extensions"); } QString Extension::menuPath(QAction *action) const { Q_UNUSED(action); return QString(); } bool Extension::usesNetwork(QAction *action) const { Q_UNUSED(action); return false; } QDockWidget * Extension::dockWidget() { if (!m_dockWidgets.isEmpty()) { return qobject_cast(m_dockWidgets.first()); } return NULL; } QList Extension::dockWidgets() const { return m_dockWidgets; } int Extension::numDockWidgets() const { return m_dockWidgets.size(); } void Extension::setMolecule(Molecule *molecule) { Q_UNUSED(molecule); } void Extension::writeSettings(QSettings &settings) const { Q_UNUSED(settings); } void Extension::readSettings(QSettings &settings) { Q_UNUSED(settings); } int Extension::usefulness() const { return 0; } } avogadro-1.1.1/libavogadro/src/plugin.h0000644000175000001440000001055412250371054017260 0ustar marcususers/********************************************************************** Plugin - Avogadro Plugin Interface Base Class Copyright (C) 2008 Tim Vandermeersch Copyright (C) 2008 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PLUGIN_H #define PLUGIN_H #include #include #include // do not remove!! namespace Avogadro { /** * @class Plugin plugin.h * @brief Interface for plugins * @author Tim Vandermeersch * * This is a template class for plugins like tools, engines, * extensions, colors, ... */ /*class A_EXPORT PluginMeta*/ /*{*/ /*public:*/ /*QString className();*/ /*QString type();*/ /*}*/ //class PluginPrivate; class A_EXPORT Plugin : public QObject { Q_OBJECT public: enum Type { EngineType = 0, ToolType, ExtensionType, ColorType, OtherType, TypeCount // this needs to be last always }; public: /** * Constructor */ Plugin(QObject *parent = NULL); /** * Destructor */ virtual ~Plugin(); /** * @return The type of the plugin. */ virtual Plugin::Type type() const = 0; /** * @return The unique, untranslated identifier for the plugin. */ virtual QString identifier() const = 0; /** * @return The translated name of the plugin. */ virtual QString name() const = 0; /** * @return A description of the plugin. */ virtual QString description() const; /** * @return The license applied to the plugin. * @note This defaults to GPL2+, and must be a license compatible with a * GPL2 only library, as all plugins link to Avogadro and OpenBabel. */ virtual QString license() const; /** * @return a QWidget containing the engine settings or 0 * if no settings widget is available. */ virtual QWidget *settingsWidget(); /** * Write the plugin settings so that they can be saved between sessions. */ virtual void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the plugin instance. */ virtual void readSettings(QSettings &settings); protected: //PluginPrivate *const d; }; /** * @class PluginFactory plugin.h * @brief Generates new instances of the Plugin class for which it is defined. * * Generates new instances of the Plugin class for which it is defined. */ class A_EXPORT PluginFactory { public: /** * Destructor. */ virtual ~PluginFactory() {} /** * @return pointer to a new instance of an Engine subclass object. */ virtual Plugin *createInstance(QObject *parent=0) = 0; /** * @return The type of the plugin. */ virtual Plugin::Type type() const = 0; /** * @return The untranslated identifier of the plugin. */ virtual QString identifier() const = 0; /** * @return The translated name of the plugin. */ virtual QString name() const = 0; /** * @return A description of the plugin. */ virtual QString description() const = 0; }; } // end namespace Avogadro Q_DECLARE_METATYPE(Avogadro::Plugin*) Q_DECLARE_INTERFACE(Avogadro::PluginFactory, "net.sourceforge.avogadro.pluginfactory/1.5") #endif avogadro-1.1.1/libavogadro/src/colorbutton.cpp0000644000175000001440000000546512250371054020674 0ustar marcususers/********************************************************************** ColorButton - Button widget to display the current selected color and bring up the color picker when clicked Copyright (C) 2008 Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "colorbutton.h" #include #include namespace Avogadro { ColorButton::ColorButton(QWidget *parent) : QAbstractButton(parent), m_color(Qt::white), m_title("") { setMinimumSize(35, 20); connect(this, SIGNAL(clicked()), this, SLOT(changeColor())); } ColorButton::ColorButton(const QColor& initial, QWidget *parent) : QAbstractButton(parent), m_color(initial) { setMinimumSize(35, 20); connect(this, SIGNAL(clicked()), this, SLOT(changeColor())); } void ColorButton::changeColor() { // This could be an ifdef for KColorDialog if KDE is present if (m_title == "") m_color = QColorDialog::getColor(m_color, this); else m_color = QColorDialog::getColor(m_color, this, m_title); update(); emit colorChanged(m_color); } void ColorButton::setColor(const QColor& color) { m_color = color; update(); emit colorChanged(m_color); } void ColorButton::setDialogTitle(const QString title) { m_title = title; } QColor ColorButton::color() const { return m_color; } void ColorButton::paintEvent(QPaintEvent *) { // TODO: If we go to RGBA colors, we should really show two pieces // e.g. ----------- // | /| // | non / | // | alpha/ | // | / | // | /alpha // | / | // ----------- QPainter painter(this); // outer border painter.drawRect(0,0, width(), height()); // inner color painter.setBrush(m_color); painter.drawRect(4,4, width()-8, height()-8); } bool ColorButton::event(QEvent *e) { return QAbstractButton::event(e); } } // end namespace avogadro-1.1.1/libavogadro/src/pythontool.qrc0000644000175000001440000000013712250371054020533 0ustar marcususers python.png avogadro-1.1.1/libavogadro/src/colors/0000755000175000001440000000000012250371054017105 5ustar marcususersavogadro-1.1.1/libavogadro/src/colors/residuecolor.h0000644000175000001440000000503512250371054021760 0ustar marcususers/********************************************************************** ResidueColor - Class for coloring based on residues (if available) Copyright (C) 2007 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef RESIDUECOLOR_H #define RESIDUECOLOR_H #include #include #include #include "ui_residuecolorsettings.h" namespace Avogadro { class ResidueColorSettingsWidget; /** * @class ResidueColor * @brief Atom coloring based on residue for biomolecules * @author Geoff Hutchison * * This class maps colors based on residues * http://jmol.sourceforge.net/jscolors/ */ class ResidueColor: public Color { Q_OBJECT AVOGADRO_COLOR("ResidueColor", tr("Color by Residue"), tr("Color by Residue (amino acid type, hydrophobicity, ...")) public: ResidueColor(); virtual ~ResidueColor(); /** * Set the color based on the supplied Primitive * If NULL is passed, do nothing */ virtual void setFromPrimitive(const Primitive *); virtual QWidget* settingsWidget(); private Q_SLOTS: void settingsWidgetDestroyed(); void setColorScheme(int colorScheme); private: ResidueColorSettingsWidget *m_settingsWidget; int m_colorScheme; }; class ResidueColorSettingsWidget : public QWidget, public Ui::ResidueColorSettings { public: ResidueColorSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; class ResidueColorFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_COLOR_FACTORY(ResidueColor) }; } #endif avogadro-1.1.1/libavogadro/src/colors/distancecolor.h0000644000175000001440000000371312250371054022113 0ustar marcususers/********************************************************************** DistanceColor - Color atoms by distance from atom 1 Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef DISTANCECOLOR_H #define DISTANCECOLOR_H #include #include #include namespace Avogadro { /** * @class DistanceColor * @brief Color by distance from the first atom * @author Geoff Hutchison * * Map atom colors based on atom distance from the first atom */ class DistanceColor: public Color { Q_OBJECT AVOGADRO_COLOR("DistanceColor", tr("Color by Distance"), tr("Color by distance from the first atom.")) public: DistanceColor(); virtual ~DistanceColor(); /** * Set the color based on the supplied Primitive * If NULL is passed, do nothing */ void setFromPrimitive(const Primitive *); }; class DistanceColorFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_COLOR_FACTORY(DistanceColor) }; } #endif avogadro-1.1.1/libavogadro/src/colors/customcolor.h0000644000175000001440000000410712250371054021631 0ustar marcususers/********************************************************************** CustomColor - Class for using arbitrary colors Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef CUSTOMCOLOR_H #define CUSTOMCOLOR_H #include #include #include namespace Avogadro { /** * @class CustomColor * @brief Set custom colors for atoms * @author Geoff Hutchison * */ class CustomColor: public Color { Q_OBJECT AVOGADRO_COLOR("CustomColor", tr("Custom Color"), tr("Set custom colors for objects")) public: CustomColor(); virtual ~CustomColor(); // In this case, the settings are everything! // We set our color based on the settings virtual QWidget* settingsWidget(); virtual void writeSettings(QSettings &settings) const; virtual void readSettings(QSettings &settings); private Q_SLOTS: void settingsWidgetDestroyed(); void colorChanged(QColor); private: QWidget *m_settingsWidget; }; class CustomColorFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_COLOR_FACTORY(CustomColor) }; } #endif avogadro-1.1.1/libavogadro/src/colors/smartscolor.h0000644000175000001440000000473012250371054021632 0ustar marcususers/********************************************************************** Smartscolor - Map atom colors based on atom partial charge Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SMARTSCOLOR_H #define SMARTSCOLOR_H #include #include #include #include // forward declaration namespace OpenBabel { class OBSmartsPattern; } namespace Avogadro { /** * @class Smartscolor * @brief Color by highlighting a SMARTS pattern match * @author Geoff Hutchison */ class SmartsColor: public Color { Q_OBJECT AVOGADRO_COLOR("SmartsColor", tr("Color by SMARTS Pattern"), tr("Highlight particular features which match a SMARTS pattern.")) public: SmartsColor(); virtual ~SmartsColor(); /** * Set the color based on the supplied Primitive * If NULL is passed, do nothing */ void setFromPrimitive(const Primitive *); virtual QWidget* settingsWidget(); virtual void writeSettings(QSettings &settings) const; virtual void readSettings(QSettings &settings); private Q_SLOTS: void settingsWidgetDestroyed(); void smartsChanged(QString); void colorChanged(QColor); private: OpenBabel::OBSmartsPattern *_pattern; QString _smartsString; QColor _highlightColor; QWidget *_settingsWidget; }; class SmartsColorFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_COLOR_FACTORY(SmartsColor) }; } #endif avogadro-1.1.1/libavogadro/src/colors/elementcolor.h0000644000175000001440000000402412250371054021746 0ustar marcususers/********************************************************************** ElementColor - Default class for coloring atoms based on element Copyright (C) 2006 Benoit Jacob Copyright (C) 2007 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ELEMENTCOLOR_H #define ELEMENTCOLOR_H #include #include #include namespace Avogadro { /** * @class ElementColor * @brief Default atom color scheme based on periodic table * @author Geoff Hutchison * * Map atom colors based on elements: Carbon = Grey, Oxygen = Red, etc. */ class ElementColor: public Color { Q_OBJECT AVOGADRO_COLOR("ElementColor", tr("Color by Element"), tr("Color by Element (carbon = grey, oxygen = red, ...).")) public: ElementColor(); virtual ~ElementColor(); /** * Set the color based on the supplied Primitive * If NULL is passed, do nothing */ void setFromPrimitive(const Primitive *); }; class ElementColorFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_COLOR_FACTORY(ElementColor) }; } #endif avogadro-1.1.1/libavogadro/src/colors/chargecolor.cpp0000644000175000001440000000440512250371054022104 0ustar marcususers/********************************************************************** ChargeColor - Map atom colors based on atom partial charge Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "chargecolor.h" #include #include #include #include #include #include namespace Avogadro { /// Constructor ChargeColor::ChargeColor() { } /// Destructor ChargeColor::~ChargeColor() { } void ChargeColor::setFromPrimitive(const Primitive *p) { if (!p || p->type() != Primitive::AtomType) return; const Atom *atom = static_cast(p); float charge = atom->partialCharge(); float scaledCharge = sqrt(fabs(charge)); if (scaledCharge > 1.0) scaledCharge = 1.0; if (charge < 0.0f) { // white to red (i.e. back down on green and blue) // We assume that partial charge could be up to -2.0 m_channels[0] = 1.0f; // red m_channels[1] = 1.0 - scaledCharge; // green m_channels[2] = m_channels[1]; // blue = green } else { // white to blue (i.e., back down on red and green) m_channels[0] = 1.0f - scaledCharge; // red m_channels[1] = m_channels[0]; // green = red m_channels[2] = 1.0f; // blue } m_channels[3] = 1.0; } } Q_EXPORT_PLUGIN2(chargecolor, Avogadro::ChargeColorFactory) avogadro-1.1.1/libavogadro/src/colors/residuecolor.cpp0000644000175000001440000002436012250371054022315 0ustar marcususers/********************************************************************** ResidueColor - Class for coloring based on residues (if available) Copyright (C) 2007 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "residuecolor.h" #include #include #include #include #include #include #include namespace Avogadro { // color tables #define RESNUM 29 // Colors from http://jmol.sourceforge.net/jscolors/ // "Protein amino" const int jMolAmino[RESNUM][3] = { { 0xC8, 0xC8, 0xC8 }, /* 0: "Ala" */ { 0x14, 0x5A, 0xFF }, /* 1: "Arg" */ { 0x00, 0xDC, 0xDC }, /* 2: "Asn" */ { 0xE6, 0x0A, 0x0A }, /* 3: "Asp" */ { 0xE6, 0xE6, 0x00 }, /* 4: "Cys" */ { 0x00, 0xDC, 0xDC }, /* 5: "Gln" */ { 0xE6, 0x0A, 0x0A }, /* 6: "Glu" */ { 0xEB, 0xEB, 0xEB }, /* 7: "Gly" */ { 0x82, 0x82, 0xD2 }, /* 8: "His" */ { 0x0F, 0x82, 0x0F }, /* 9: "Ile" */ { 0x0F, 0x82, 0x0F }, /* 10: "Leu" */ { 0x14, 0x5A, 0xFF }, /* 11: "Lys" */ { 0xE6, 0xE6, 0x00 }, /* 12: "Met" */ { 0x32, 0x32, 0xAA }, /* 13: "Phe" */ { 0xDC, 0x96, 0x82 }, /* 14: "Pro" */ { 0xFA, 0x96, 0x00 }, /* 15: "Ser" */ { 0xFA, 0x96, 0x00 }, /* 16: "Thr" */ { 0xB4, 0x5A, 0xB4 }, /* 17: "Trp" */ { 0x32, 0x32, 0xAA }, /* 18: "Tyr" */ { 0x0F, 0x82, 0x0F }, /* 19: "Val" */ { 0xFF, 0x69, 0xB4 }, /* 20: "Asx" */ { 0xFF, 0x69, 0xB4 }, /* 21: "Glx" */ { 0xBE, 0xA0, 0x6E }, /* 22: Other / UNK */ { 0xA0, 0xA0, 0xFF }, /* 23: A */ { 0xFF, 0x70, 0x70 }, /* 24: G */ { 0x80, 0xFF, 0xFF }, /* 25: I */ { 0xFF, 0x8C, 0x4B }, /* 26: C */ { 0xA0, 0xFF, 0xA0 }, /* 27: T */ { 0xFF, 0x80, 0x80 } /* 28: U */ }; // Colors from http://jmol.sourceforge.net/jscolors/ // "Protein Shapely" const int jMolShapely[RESNUM][3] = { { 0x8C, 0xFF, 0x8C }, /* 0: "Ala" */ { 0x00, 0x00, 0x7C }, /* 1: "Arg" */ { 0xFF, 0x7C, 0x70 }, /* 2: "Asn" */ { 0xA0, 0x00, 0x42 }, /* 3: "Asp" */ { 0xFF, 0xFF, 0x70 }, /* 4: "Cys" */ { 0xFF, 0x4C, 0x4C }, /* 5: "Gln" */ { 0x66, 0x00, 0x00 }, /* 6: "Glu" */ { 0xFF, 0xFF, 0xFF }, /* 7: "Gly" */ { 0x70, 0x70, 0xFF }, /* 8: "His" */ { 0x00, 0x4C, 0x00 }, /* 9: "Ile" */ { 0x45, 0x5E, 0x45 }, /* 10: "Leu" */ { 0x47, 0x47, 0xB8 }, /* 11: "Lys" */ { 0xB8, 0xA0, 0x42 }, /* 12: "Met" */ { 0x53, 0x4C, 0x52 }, /* 13: "Phe" */ { 0x52, 0x52, 0x52 }, /* 14: "Pro" */ { 0xFF, 0x70, 0x42 }, /* 15: "Ser" */ { 0xB8, 0x4C, 0x00 }, /* 16: "Thr" */ { 0x4F, 0x46, 0x00 }, /* 17: "Trp" */ { 0x8C, 0x70, 0x4C }, /* 18: "Tyr" */ { 0xFF, 0x8C, 0xFF }, /* 19: "Val" */ { 0xFF, 0x00, 0xFF }, /* 20: "Asx" */ { 0xFF, 0x00, 0xFF }, /* 21: "Glx" */ { 0xFF, 0x00, 0xFF }, /* 22: Other / UNK */ { 0xA0, 0xA0, 0xFF }, /* 23: A */ { 0xFF, 0x70, 0x70 }, /* 24: G */ { 0x80, 0xFF, 0xFF }, /* 25: I */ { 0xFF, 0x8C, 0x4B }, /* 26: C */ { 0xA0, 0xFF, 0xA0 }, /* 27: T */ { 0xFF, 0x80, 0x80 } /* 28: U */ }; const int hydrophobicity[RESNUM][3] = { { 0x99, 0x99, 0xFF }, /* 0: "Ala" */ { 0xFF, 0x00, 0x00 }, /* 1: "Arg" */ { 0xFF, 0x38, 0x38 }, /* 2: "Asn" */ { 0xFF, 0x38, 0x38 }, /* 3: "Asp" */ { 0x71, 0x71, 0xFF }, /* 4: "Cys" */ { 0xFF, 0x38, 0x38 }, /* 5: "Gln" */ { 0xFF, 0x38, 0x38 }, /* 6: "Glu" */ { 0xFF, 0xE8, 0xE8 }, /* 7: "Gly" */ { 0xFF, 0x49, 0x49 }, /* 8: "His" */ { 0x00, 0x00, 0xFF }, /* 9: "Ile" */ { 0x27, 0x27, 0xFF }, /* 10: "Leu" */ { 0xFF, 0x22, 0x22 }, /* 11: "Lys" */ { 0x93, 0x93, 0xFF }, /* 12: "Met" */ { 0x60, 0x60, 0xFF }, /* 13: "Phe" */ { 0xFF, 0xA4, 0xA4 }, /* 14: "Pro" */ { 0xFF, 0xD1, 0xD1 }, /* 15: "Ser" */ { 0xFF, 0xD7, 0xD7 }, /* 16: "Thr" */ { 0xFF, 0xCC, 0xCC }, /* 17: "Trp" */ { 0xFF, 0xB5, 0xB5 }, /* 18: "Tyr" */ { 0x10, 0x10, 0xFF }, /* 19: "Val" */ { 0xFF, 0x00, 0xFF }, /* 20: "Asx" */ { 0xFF, 0x00, 0xFF }, /* 21: "Glx" */ { 0xFF, 0x00, 0xFF }, /* 22: Other / UNK */ { 0xA0, 0xA0, 0xFF }, /* 23: A */ { 0xFF, 0x70, 0x70 }, /* 24: G */ { 0x80, 0xFF, 0xFF }, /* 25: I */ { 0xFF, 0x8C, 0x4B }, /* 26: C */ { 0xA0, 0xFF, 0xA0 }, /* 27: T */ { 0xFF, 0x80, 0x80 } /* 28: U */ }; ResidueColor::ResidueColor() : m_settingsWidget(NULL), m_colorScheme(0) { } ResidueColor::~ResidueColor() { if (m_settingsWidget) m_settingsWidget->deleteLater(); } void ResidueColor::setFromPrimitive(const Primitive *primitive) { if (!primitive) return; Primitive *p = const_cast(primitive); Residue *residue = NULL; QString residueName; // this colors by residue name if (p->type() == Primitive::ResidueType) { residue = static_cast(p); if (!residue) return; // can't color this residueName = residue->name(); } else if (p->type() == Primitive::AtomType) { Atom *atom = static_cast(p); if (atom) residue = atom->residue(); // default is to color by element if no residue is specified std::vector rgb = OpenBabel::etab.GetRGB( atom->atomicNumber() ); if (!residue) { m_channels[0] = rgb[0]; m_channels[1] = rgb[1]; m_channels[2] = rgb[2]; m_channels[3] = 1.0; return; } residueName = residue->name(); if (residueName.compare("UNK", Qt::CaseInsensitive) == 0) { m_channels[0] = rgb[0]; m_channels[1] = rgb[1]; m_channels[2] = rgb[2]; m_channels[3] = 1.0; return; } } else // not a residue or atom return; // not something we can color int offset; if (residueName.compare("Ala", Qt::CaseInsensitive) == 0) { offset = 0; } else if (residueName.compare("Arg", Qt::CaseInsensitive) == 0) { offset = 1; } else if (residueName.compare("Asn", Qt::CaseInsensitive) == 0) { offset = 2; } else if (residueName.compare("Asp", Qt::CaseInsensitive) == 0) { offset = 3; } else if (residueName.compare("Cys", Qt::CaseInsensitive) == 0) { offset = 4; } else if (residueName.compare("Gln", Qt::CaseInsensitive) == 0) { offset = 5; } else if (residueName.compare("Glu", Qt::CaseInsensitive) == 0) { offset = 6; } else if (residueName.compare("Gly", Qt::CaseInsensitive) == 0) { offset = 7; } else if (residueName.compare("His", Qt::CaseInsensitive) == 0) { offset = 8; } else if (residueName.compare("Ile", Qt::CaseInsensitive) == 0) { offset = 9; } else if (residueName.compare("Leu", Qt::CaseInsensitive) == 0) { offset = 10; } else if (residueName.compare("Lys", Qt::CaseInsensitive) == 0) { offset = 11; } else if (residueName.compare("Met", Qt::CaseInsensitive) == 0) { offset = 12; } else if (residueName.compare("Phe", Qt::CaseInsensitive) == 0) { offset = 13; } else if (residueName.compare("Pro", Qt::CaseInsensitive) == 0) { offset = 14; } else if (residueName.compare("Ser", Qt::CaseInsensitive) == 0) { offset = 15; } else if (residueName.compare("Thr", Qt::CaseInsensitive) == 0) { offset = 16; } else if (residueName.compare("Trp", Qt::CaseInsensitive) == 0) { offset = 17; } else if (residueName.compare("Tyr", Qt::CaseInsensitive) == 0) { offset = 18; } else if (residueName.compare("Val", Qt::CaseInsensitive) == 0) { offset = 19; } else if (residueName.compare("Asx", Qt::CaseInsensitive) == 0) { offset = 20; } else if (residueName.compare("Glx", Qt::CaseInsensitive) == 0) { offset = 21; } else if (residueName.compare("A", Qt::CaseInsensitive) == 0) { offset = 23; } else if (residueName.compare("G", Qt::CaseInsensitive) == 0) { offset = 24; } else if (residueName.compare("I", Qt::CaseInsensitive) == 0) { offset = 25; } else if (residueName.compare("C", Qt::CaseInsensitive) == 0) { offset = 26; } else if (residueName.compare("T", Qt::CaseInsensitive) == 0) { offset = 27; } else if (residueName.compare("U", Qt::CaseInsensitive) == 0) { offset = 28; } else { offset = 22; } if (m_colorScheme == 1) { m_channels[0] = jMolShapely[offset][0] / 255.0; m_channels[1] = jMolShapely[offset][1] / 255.0; m_channels[2] = jMolShapely[offset][2] / 255.0; } else if (m_colorScheme == 2) { m_channels[0] = hydrophobicity[offset][0] / 255.0; m_channels[1] = hydrophobicity[offset][1] / 255.0; m_channels[2] = hydrophobicity[offset][2] / 255.0; } else { m_channels[0] = jMolAmino[offset][0] / 255.0; m_channels[1] = jMolAmino[offset][1] / 255.0; m_channels[2] = jMolAmino[offset][2] / 255.0; } m_channels[3] = 1.0; } void ResidueColor::settingsWidgetDestroyed() { m_settingsWidget = 0; } void ResidueColor::setColorScheme(int scheme) { m_colorScheme = scheme; emit changed(); } QWidget *ResidueColor::settingsWidget() { if (!m_settingsWidget) { m_settingsWidget = new ResidueColorSettingsWidget(); connect(m_settingsWidget->colorStyleComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setColorScheme(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); } return m_settingsWidget; } } Q_EXPORT_PLUGIN2(residuecolor, Avogadro::ResidueColorFactory) avogadro-1.1.1/libavogadro/src/colors/smartscolor.cpp0000644000175000001440000001262512250371054022167 0ustar marcususers/********************************************************************** SmartsColor - Map atom colors based on atom partial charge Copyright (C) 2010 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "smartscolor.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { /// Constructor SmartsColor::SmartsColor() : _highlightColor(255, 0, 128), _settingsWidget(NULL) { _pattern = new OBSmartsPattern; _smartsString.clear(); } /// Destructor SmartsColor::~SmartsColor() { if (_pattern) { delete _pattern; _pattern = NULL; } if (_settingsWidget) _settingsWidget->deleteLater(); } void SmartsColor::settingsWidgetDestroyed() { _settingsWidget = 0; } QWidget *SmartsColor::settingsWidget() { if (!_settingsWidget) { _settingsWidget = new QWidget(); QHBoxLayout *layout = new QHBoxLayout(_settingsWidget); QVBoxLayout *vlayout1 = new QVBoxLayout(_settingsWidget); QVBoxLayout *vlayout2 = new QVBoxLayout(_settingsWidget); QLabel *label1 = new QLabel(tr("SMARTS Pattern:"), _settingsWidget); vlayout1->addWidget(label1); QLineEdit *smartsLine = new QLineEdit(_smartsString, _settingsWidget); vlayout2->addWidget(smartsLine); QLabel *label2 = new QLabel(tr("Highlight Color:"), _settingsWidget); ColorButton *button = new ColorButton(_highlightColor, _settingsWidget); vlayout1->addWidget(label2); vlayout2->addWidget(button); layout->addLayout(vlayout1); layout->addLayout(vlayout2); connect(button, SIGNAL(colorChanged(QColor)), this, SLOT(colorChanged(QColor))); connect(smartsLine, SIGNAL(textChanged(QString)), this, SLOT(smartsChanged(QString))); connect(_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); } return _settingsWidget; } void SmartsColor::colorChanged(QColor newColor) { _highlightColor = newColor; emit changed(); } void SmartsColor::smartsChanged(QString newPattern) { _smartsString = newPattern; _pattern->Init(_smartsString.toAscii()); emit changed(); } void SmartsColor::writeSettings(QSettings &settings) const { settings.setValue("highlightcolor", _highlightColor); settings.setValue("SMARTS", _smartsString); } void SmartsColor::readSettings(QSettings &settings) { _highlightColor = settings.value("highlightcolor", QColor(Qt::magenta)).value(); _smartsString = settings.value("SMARTS").toString(); smartsChanged(_smartsString); } void SmartsColor::setFromPrimitive(const Primitive *p) { if (!p || p->type() != Primitive::AtomType) return; const Atom *atom = static_cast(p); // Start with the default "element color" QColor newcolor; if (atom->atomicNumber()) { std::vector rgb = OpenBabel::etab.GetRGB(atom->atomicNumber()); newcolor.setRgbF(rgb[0], rgb[1], rgb[2]); } else { newcolor.setRgbF(0.2f, 0.2f, 0.2f); } Molecule *molecule = atom->molecule(); if (!molecule || !_pattern) return; bool matched = false; if (!_smartsString.isEmpty() && _pattern->IsValid()) { // finite, valid SMARTS, so let's go for it! OBMol obmol = molecule->OBMol(); bool moleculeMatched = _pattern->Match(obmol); if (moleculeMatched) { std::vector > mlist = _pattern->GetUMapList(); std::vector >::iterator match; for (match = mlist.begin(); match != mlist.end(); ++match) { // iterate through matches for (unsigned idx = 0; idx < (*match).size(); ++idx) { // iterate through atoms in match if (static_cast(atom->index()) == ((*match)[idx] - 1)) { // TODO: OB uses index from 1 matched = true; break; } } // atoms in match if (matched) break; // no need to check other matches } // matches } // matched molecule } // finite, valid SMARTS // OK, now highlight the SMARTS match if (matched) setFromQColor(_highlightColor); else setFromQColor(newcolor.darker()); m_channels[3] = 1.0; } } Q_EXPORT_PLUGIN2(smartscolor, Avogadro::SmartsColorFactory) avogadro-1.1.1/libavogadro/src/colors/atomindexcolor.h0000644000175000001440000000376412250371054022317 0ustar marcususers/********************************************************************** AtomIndexColor - Color atoms by numbering in the file Copyright (C) 2008 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ATOMINDEXCOLOR_H #define ATOMINDEXCOLOR_H #include #include #include namespace Avogadro { /** * @class AtomIndexColor * @brief Color by atomic index (i.e., order in the file) * @author Geoff Hutchison * * Map atom colors based on atom numbering (with rainbow colors) */ class AtomIndexColor: public Color { Q_OBJECT AVOGADRO_COLOR("AtomIndexColor", tr("Color by Index"), tr("Color by Index (red, orange, yellow, green, blue, violet).")) public: AtomIndexColor(); virtual ~AtomIndexColor(); /** * Set the color based on the supplied Primitive * If NULL is passed, do nothing */ void setFromPrimitive(const Primitive *); }; class AtomIndexColorFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_COLOR_FACTORY(AtomIndexColor) }; } #endif avogadro-1.1.1/libavogadro/src/colors/chargecolor.h0000644000175000001440000000375312250371054021556 0ustar marcususers/********************************************************************** ChargeColor - Map atom colors based on atom partial charge Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef CHARGECOLOR_H #define CHARGECOLOR_H #include #include #include namespace Avogadro { /** * @class ChargeColor * @brief Color by atomic partial charge * @author Geoff Hutchison * * Map atom colors based on atom partial charge (blue = positive, red = neg.) */ class ChargeColor: public Color { Q_OBJECT AVOGADRO_COLOR("ChargeColor", tr("Color by Partial Charge"), tr("Color by atomic partial charge (blue = positive, red = negative.")) public: ChargeColor(); virtual ~ChargeColor(); /** * Set the color based on the supplied Primitive * If NULL is passed, do nothing */ void setFromPrimitive(const Primitive *); }; class ChargeColorFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_COLOR_FACTORY(ChargeColor) }; } #endif avogadro-1.1.1/libavogadro/src/colors/elementcolor.cpp0000644000175000001440000000360512250371054022305 0ustar marcususers/********************************************************************** ElementColor - Default class for coloring atoms based on element Copyright (C) 2007 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "elementcolor.h" #include #include #include #include namespace Avogadro { /// Constructor ElementColor::ElementColor() { } /// Destructor ElementColor::~ElementColor() { } void ElementColor::setFromPrimitive(const Primitive *p) { if (!p || p->type() != Primitive::AtomType) return; const Atom *atom = static_cast(p); if (atom->atomicNumber()) { std::vector rgb = OpenBabel::etab.GetRGB(atom->atomicNumber()); m_channels[0] = rgb[0]; m_channels[1] = rgb[1]; m_channels[2] = rgb[2]; } else { m_channels[0] = 0.2; m_channels[1] = 0.2; m_channels[2] = 0.2; } m_channels[3] = 1.0; } } Q_EXPORT_PLUGIN2(elementcolor, Avogadro::ElementColorFactory) avogadro-1.1.1/libavogadro/src/colors/distancecolor.cpp0000644000175000001440000000631312250371054022445 0ustar marcususers/********************************************************************** DistanceColor - Color atoms by distance from atom 1 Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "distancecolor.h" #include #include #include #include #include #include using namespace Eigen; namespace Avogadro { /// Constructor DistanceColor::DistanceColor() { } /// Destructor DistanceColor::~DistanceColor() { } void DistanceColor::setFromPrimitive(const Primitive *p) { if (!p || p->type() != Primitive::AtomType) return; const Atom *atom = static_cast(p); Molecule *molecule = atom->molecule(); if (!molecule) return; const Vector3d *firstAtomPos = molecule->atom(0)->pos(); const Vector3d *atomPos = atom->pos(); const Vector3d resultant = *atomPos - *firstAtomPos; float magnitude = sqrt(resultant.x() * resultant.x() + resultant.y() * resultant.y() + resultant.z() * resultant.z()); float distanceFraction = magnitude / (2.0f * molecule->radius()); if (distanceFraction < 0.4f) { // red to orange (i.e., R = 1.0 and G goes from 0 -> 0.5 // also orange to yellow R = 1.0 and G goes from 0.5 -> 1.0 m_channels[0] = 1.0f; // red m_channels[1] = distanceFraction * 2.5f; // green m_channels[2] = 0.0f; // blue } else if (distanceFraction > 0.4f && distanceFraction < 0.6f) { // yellow to green: R 1.0 -> 0.0 and G stays 1.0 m_channels[0] = 1.0f - 5.0f * (distanceFraction - 0.4f); // red m_channels[1] = 1.0f; // green m_channels[2] = 0.0f; // blue } else if (distanceFraction > 0.6f && distanceFraction < 0.8f) { // green to blue: G -> 0.0 and B -> 1.0 m_channels[0] = 0.0f; // red m_channels[1] = 1.0f - 5.0f * (distanceFraction - 0.6f); // green m_channels[2] = 5.0f * (distanceFraction - 0.6f); // blue } else if (distanceFraction > 0.8f) { // blue to purple: B -> 0.5 and R -> 0.5 m_channels[0] = 2.5f * (distanceFraction - 0.8f); m_channels[1] = 0.0; m_channels[2] = 1.0f - 2.5f * (distanceFraction - 0.8f); } m_channels[3] = 1.0; } } Q_EXPORT_PLUGIN2(distancecolor, Avogadro::DistanceColorFactory) avogadro-1.1.1/libavogadro/src/colors/residuecolorsettings.ui0000644000175000001440000000256512250371054023734 0ustar marcususers ResidueColorSettings 0 0 342 54 Residue Color Settings Color residues by: Amino Colors Shapely Colors Hydrophobicity Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/colors/atomindexcolor.cpp0000644000175000001440000000556312250371054022651 0ustar marcususers/********************************************************************** AtomIndexColor - Color atoms by numbering in the file Copyright (C) 2007 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "atomindexcolor.h" #include #include #include #include #include namespace Avogadro { /// Constructor AtomIndexColor::AtomIndexColor() { } /// Destructor AtomIndexColor::~AtomIndexColor() { } void AtomIndexColor::setFromPrimitive(const Primitive *p) { if (!p || p->type() != Primitive::AtomType) return; const Atom *atom = static_cast(p); Molecule *molecule = atom->molecule(); if (!molecule) return; unsigned int numAtoms = molecule->numAtoms(); unsigned int index = atom->index(); float indexFraction = float(index) / float(numAtoms); if (indexFraction < 0.4f) { // red to orange (i.e., R = 1.0 and G goes from 0 -> 0.5 // also orange to yellow R = 1.0 and G goes from 0.5 -> 1.0 m_channels[0] = 1.0f; // red m_channels[1] = indexFraction * 2.5f; // green m_channels[2] = 0.0f; // blue } else if (indexFraction > 0.4f && indexFraction < 0.6f) { // yellow to green: R 1.0 -> 0.0 and G stays 1.0 m_channels[0] = 1.0f - 5.0f * (indexFraction - 0.4f); // red m_channels[1] = 1.0f; // green m_channels[2] = 0.0f; // blue } else if (indexFraction > 0.6f && indexFraction < 0.8f) { // green to blue: G -> 0.0 and B -> 1.0 m_channels[0] = 0.0f; // red m_channels[1] = 1.0f - 5.0f * (indexFraction - 0.6f); // green m_channels[2] = 5.0f * (indexFraction - 0.6f); // blue } else if (indexFraction > 0.8f) { // blue to purple: B -> 0.5 and R -> 0.5 m_channels[0] = 2.5f * (indexFraction - 0.8f); m_channels[1] = 0.0; m_channels[2] = 1.0f - 2.5f * (indexFraction - 0.8f); } m_channels[3] = 1.0; } } Q_EXPORT_PLUGIN2(atomindexcolor, Avogadro::AtomIndexColorFactory) avogadro-1.1.1/libavogadro/src/colors/customcolor.cpp0000644000175000001440000000533212250371054022165 0ustar marcususers/********************************************************************** CustomColor - Class for using arbitrary colors Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "customcolor.h" #include #include #include #include #include #include #include using namespace Eigen; namespace Avogadro { /// Constructor CustomColor::CustomColor(): m_settingsWidget(NULL) { Color::setFromQColor(QColor(Qt::white)); } /// Destructor CustomColor::~CustomColor() { if (m_settingsWidget) m_settingsWidget->deleteLater(); } void CustomColor::settingsWidgetDestroyed() { m_settingsWidget = 0; } QWidget *CustomColor::settingsWidget() { if (!m_settingsWidget) { m_settingsWidget = new QWidget(); QHBoxLayout *layout = new QHBoxLayout(m_settingsWidget); QLabel *label = new QLabel(tr("Custom Color:"), m_settingsWidget); ColorButton *button = new ColorButton(m_settingsWidget); layout->addWidget(label); layout->addWidget(button); button->setColor(Color::color()); connect(button, SIGNAL(colorChanged(QColor)), this, SLOT(colorChanged(QColor))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); } return m_settingsWidget; } void CustomColor::colorChanged(QColor newColor) { Color::setFromQColor(newColor); emit changed(); } void CustomColor::writeSettings(QSettings &settings) const { settings.setValue("customcolor", Color::color()); } void CustomColor::readSettings(QSettings &settings) { Color::setFromQColor(settings.value("customcolor", QColor(Qt::white)).value()); } } Q_EXPORT_PLUGIN2(customcolor, Avogadro::CustomColorFactory) avogadro-1.1.1/libavogadro/src/colors/CMakeLists.txt0000644000175000001440000000153012250371054021644 0ustar marcususersinclude(${QT_USE_FILE}) ADD_DEFINITIONS(${QT_DEFINITIONS}) ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_SHARED) set(DESTINATION_DIR ${Avogadro_PLUGIN_INSTALL_DIR}/colors) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(LINK_LIBS avogadro) set(PLUGIN_LABEL colors) set(PLUGIN_TARGET colors) add_custom_target(colors COMMENT "Meta target to build all Avogadro colors.") ### elementcolor avogadro_plugin(elementcolor elementcolor.cpp) ### residuecolor avogadro_plugin(residuecolor residuecolor.cpp residuecolorsettings.ui) ### indexcolor avogadro_plugin(atomindexcolor atomindexcolor.cpp) ### chargecolor avogadro_plugin(chargecolor chargecolor.cpp) ### distancecolor avogadro_plugin(distancecolor distancecolor.cpp) ## custom color avogadro_plugin(customcolor customcolor.cpp) ## smartscolor avogadro_plugin(smartscolor smartscolor.cpp) avogadro-1.1.1/libavogadro/src/tool.h0000644000175000001440000001456212250371054016742 0ustar marcususers/********************************************************************** Tool - Avogadro Tool Interface Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef TOOL_H #define TOOL_H #include #include "plugin.h" #include #include #include #define AVOGADRO_TOOL(i, t, d, s) \ public: \ static QString staticIdentifier() { return i; } \ QString identifier() const { return i; } \ static QString staticName() { return t; } \ QString name() const { return t; } \ static QString staticDescription() { return d; } \ QString description() const { return d; } \ QString settingsTitle() const { return s; } #define AVOGADRO_TOOL_FACTORY(c) \ public: \ Avogadro::Plugin *createInstance(QObject *parent = 0) { return new c(parent); } \ Avogadro::Plugin::Type type() const { return Avogadro::Plugin::ToolType; } \ QString identifier() const { return c::staticIdentifier(); } \ QString name() const { return c::staticName(); } \ QString description() const { return c::staticDescription(); } class QAction; class QUndoCommand; class QWidget; namespace Avogadro { class GLWidget; class Molecule; /** * @class Tool tool.h * @brief Interface for tool plugins * @author Donald Ephraim Curtis * * This is a template class for tools which manipulate the GLWidget * area. The functions they implement are in response to actions * performed by the user on the GLWidget. */ class ToolPrivate; class A_EXPORT Tool : public Plugin { Q_OBJECT public: /** * Constructor */ Tool(QObject *parent = 0); /** * Destructor */ virtual ~Tool(); /** * Plugin Type. */ Plugin::Type type() const; /** * Plugin Type Name (Tools). */ QString typeName() const; /** * @return The QAction of the tool. */ virtual QAction* activateAction() const; /** * @return The settings widget for the tool. */ virtual QWidget* settingsWidget(); /** * @return The translated name of the settings widget */ virtual QString settingsTitle() const = 0; /** * Response to mouse press * @param widget the %GLWidget where the even occurred * @param event the mouse event information */ virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event) = 0; /** * Response to mouse release * @param widget the %GLWidget where the even occurred * @param event the mouse event information */ virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event) = 0; /** * Response to mouse movement * @param widget the %GLWidget where the event occurred * @param event the mouse event information */ virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event) = 0; /** * Response to a user double-click * @param widget the %GLWidget where the event occurred * @param event the mouse event information * @since version 1.1 */ virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event) = 0; /** * Response to mouse wheel movement * @param widget the %GLWidget where the event occurred * @param event the mouse wheel event information */ virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); /** * Response to key press events. * @param widget the %GLWidget where the event occurred * @param event the key event information */ virtual QUndoCommand* keyPressEvent(GLWidget *widget, QKeyEvent *event); /** * Response to key release events. * @param widget the %GLWidget where the event occurred * @param event the key event information */ virtual QUndoCommand* keyReleaseEvent(GLWidget *widget, QKeyEvent *event); /** * Called by the GLWidget allowing overlay painting by the * tool. Tools get painted last in the overall scheme. * @param widget the %GLWidget to paint to */ virtual bool paint(GLWidget *widget); /** * Determines the ordering of the tools. More useful * tools are placed first. It is up to the tool designer * to be humble about their usefulness value. * @return usefulness value */ virtual int usefulness() const; bool operator<(const Tool &other) const; /** * Write the tool settings so that they can be saved between sessions. */ virtual void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the tool instance. */ virtual void readSettings(QSettings &settings); Q_SIGNALS: /** * Can be used to add messages to the message pane. * @param m the message to add to the message pane. */ void message(const QString &m); public Q_SLOTS: /** * Called by the parent (normally toolGroup) to tell the tool the underlying * model (molecule) has changed */ virtual void setMolecule(Molecule *molecule); protected: QAction *m_activateAction; ToolPrivate *const d; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/textrenderer_p.h0000644000175000001440000001244212250371054021012 0ustar marcususers/********************************************************************** TextRenderer - a temporary replacement for QGLWidget::renderText until it matures a bit more ;) Copyright (C) 2007 Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef TEXTRENDERER_H #define TEXTRENDERER_H #include #include namespace Avogadro { /** * @class TextRenderer * @internal * @author Benoit Jacob * * NOTE: This class is only there as a temporary replacement for * QGLWidget::renderText(). As of Qt 4.2.3 and Qt 4.3-beta1, this function is * too slow and can't do outlined text. If a future version of Qt brings a * sufficiently improved QGLWidget::renderText(), we will of course drop this class. * * This class renders text inside a QGLWidget. It replaces the functionality * of QGLWidget::renderText(). * * Its advantages over the renderText() in Qt 4.2.3 are that it is much faster both at * render-time and at startup, consumes less memory, and does outlined text. Its drawbacks are that * it can't yet handle rendering more than one font simultaneously, and that its Unicode-safeness is * not perfect as superpositions of unicode characters aren't handled. * * Every QFont can be used, every character encodings supported by Qt can be used. * * To draw plain 2D text on top of the scene, do: * @code textRenderer.begin(); textRenderer.draw( x1, y1, string1 ); textRenderer.draw( x2, y2, string2 ); textRenderer.draw( x3, y2, string3 ); textRenderer.end(); * @endcode * * To draw text as a transparent object inside the scene, do: * @code textRenderer.begin(); textRenderer.draw( pos1, string1 ); textRenderer.draw( pos2, string2 ); textRenderer.draw( pos3, string3 ); textRenderer.end(); * @endcode * * In order to set the text color, please call glColor3f or glColor4f before * calling draw(). Of course you can * also call qglColor or Color::apply(). You can achieve semitransparent text at * no additional cost by choosing a semitransparent color. * * Please make sure that no relevant OpenGL state change occurs between * begin() and end(), except the state changes performed by the TextRenderer * itself. In other words, please avoid calling glSomething() between begin() and * end(), except if you are sure that this call won't result in a conflicting state * change. Of course calling glColor*() is allowed. * * If you experience rendering problems, you can try the following: * - disable some OpenGL state bits. For instance, TextRenderer automatically * disables fog and lighting during rendering, because it doesn't work * correctly with them enabled. There probably are other OpenGL state bits * that have to be disabled, so if your program enables some of them, you * might have to disable them before rendering text. * - if you experience poor font quality, meake sure that your GLWidget is using * an antialiased font. * */ class CharRenderer; class GLWidget; class TextRendererPrivate; class TextRenderer { public: TextRenderer(); ~TextRenderer(); /** * Call this before drawing any text. This method saves the GL state * and changes it to prepare for text rendering. * @param widget The widget to use for rendering */ void begin(GLWidget *widget); /** * Call this after drawing text. This method restores the GL state * to what it was when begin() was called. */ void end(); /** * Draw text inside the 3D scene. Must be called between begin() and end(). * The text is centered (both horizontally and vertically) around the specified position. * @param pos the position of the text in the scene's coordinate system * @param string the QString to render * @returns the height in pixels of the text just rendered (0 for an empty string). */ int draw( const Eigen::Vector3d & pos, const QString &string); /** * Draw 2D text at the position (x,y) in window coordinates. Must be called * between begin() and end(). * (0,0) is the top-left corner. * @param x the x-coordinate * @param y the y-coordinate * @param string the QString to render * @returns the height in pixels of the text just rendered (0 for an empty string). */ int draw( int x, int y, const QString &string); bool isActive(); private: TextRendererPrivate * const d; }; } // namespace Avogadro #endif // __TEXTRENDERER_H avogadro-1.1.1/libavogadro/src/sphere_p.h0000644000175000001440000000551712250371054017572 0ustar marcususers/********************************************************************** Sphere - Class for drawing spheres in OpenGL Copyright (C) 2006,2007 Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SPHERE_H #define SPHERE_H #include #include namespace Avogadro { /** * @class Sphere * @internal * This class represents and draws a sphere. The level of detail can be controlled. * At level 0, the sphere is a octahedron. At levels >=1, the sphere is a * "geosphere", that is, one starts with an icosahedron, which is the regular * solid with 20 triangular faces, and one then sub-tesselates each face into * smaller triangles. This is a classical tesselation, known to give a very good * quality/complexity ratio. * * @author Benoit Jacob */ class SpherePrivate; class Sphere { private: SpherePrivate * const d; protected: /** computes the index (position inside the index buffer) * of a vertex given by its position (strip, column, row) * inside a certain flat model of the sub-tesselated * icosahedron */ inline unsigned short indexOfVertex( int strip, int column, int row); /** computes the coordinates * of a vertex given by its position (strip, column, row) * inside a certain flat model of the sub-tesselated * icosahedron */ void computeVertex( int strip, int column, int row ); void freeBuffers(); void initialize(); public: Sphere( int detail = 0 ); ~Sphere(); /** initializes the sphere with given level of detail. If the * sphere was already initialized, any pre-allocated buffers * are freed and then re-allocated. @param detail the wanted level of detail. See m_detail member */ void setup( int detail ); /** draws the sphere at specified position and with * specified radius */ void draw( const Eigen::Vector3d ¢er, double radius ) const; }; } #endif avogadro-1.1.1/libavogadro/src/navigate.cpp0000644000175000001440000000701012250371054020104 0ustar marcususers/********************************************************************** Navigate - Navigation Functions for Avogadro Copyright (C) 2007 by Marcus D. Hanwell Copyright (C) 2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "navigate.h" using namespace Eigen; namespace Avogadro { Navigate::Navigate() { } Navigate::~Navigate() { } void Navigate::zoom(GLWidget *widget, const Eigen::Vector3d &goal, double delta) { Vector3d transformedGoal = widget->camera()->modelview() * goal; double distanceToGoal = transformedGoal.norm(); double t = ZOOM_SPEED * delta; const double minDistanceToGoal = 2.0 * CAMERA_NEAR_DISTANCE; double u = minDistanceToGoal / distanceToGoal - 1.0; if (t < u) t = u; switch(widget->projection()) { case GLWidget::Perspective: widget->camera()->modelview().pretranslate(transformedGoal * t); break; case GLWidget::Orthographic: widget->camera()->scale(1+t); break; } } void Navigate::translate(GLWidget *widget, const Eigen::Vector3d &what, const QPoint &from, const QPoint &to) { Vector3d fromPos = widget->camera()->unProject(from, what); Vector3d toPos = widget->camera()->unProject(to, what); widget->camera()->translate(toPos - fromPos); } void Navigate::translate(GLWidget *widget, const Eigen::Vector3d &what, double deltaX, double deltaY) { Vector3d fromPos = widget->camera()->unProject(QPoint(0, 0), what); Vector3d toPos = widget->camera()->unProject(QPoint(int(deltaX), int(deltaY)), what); widget->camera()->translate(toPos - fromPos); } void Navigate::rotate(GLWidget *widget, const Eigen::Vector3d ¢er, double deltaX, double deltaY) { // For interactive use, we should switch the X and Y axes rotate(widget, center, deltaY, deltaX, 0.0); } void Navigate::tilt(GLWidget *widget, const Eigen::Vector3d ¢er, double delta) { rotate(widget, center, 0.0, 0.0, delta); } void Navigate::rotate(GLWidget *widget, const Eigen::Vector3d ¢er, double deltaX, double deltaY, double deltaZ) { Vector3d xAxis = widget->camera()->backTransformedXAxis(); Vector3d yAxis = widget->camera()->backTransformedYAxis(); Vector3d zAxis = widget->camera()->backTransformedZAxis(); widget->camera()->translate(center); widget->camera()->rotate(deltaX * ROTATION_SPEED, xAxis); widget->camera()->rotate(deltaY * ROTATION_SPEED, yAxis); widget->camera()->rotate(deltaZ * ROTATION_SPEED, zAxis); widget->camera()->translate(-center); } } avogadro-1.1.1/libavogadro/src/cylinder_p.h0000644000175000001440000000745712250371054020122 0ustar marcususers/********************************************************************** Cylinder - Class for drawing cylinders in OpenGL Copyright (C) 2006,2007 Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef CYLINDER_H #define CYLINDER_H #include #include namespace Avogadro { /** * @class Cylinder * @internal * @brief This class represents and draws a cylinder * @author Benoit Jacob */ class CylinderPrivate; class Cylinder { protected: void initialize(); void freeBuffers(); public: Cylinder(int faces=0); ~Cylinder(); /** initializes the cylinder with given number of faces. If the * cylinder was already initialized, any pre-allocated buffers * are freed and then re-allocated */ void setup( int faces ); /** * draws the cylinder at specified position, with specified * radius. @param end1 the position of the first end of the cylinder. that is, the center of the first disc-shaped face. @param end2 the position of the second end of the cylinder. that is, the center of the second disc-shaped face. @param radius the radius of the cylinder */ void draw( const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double radius ) const; /** * draws the cylinder at specified position, with specified * radius. the order and shift arguments allow to render * multiple cylinders at once, which is useful in libavogadro. * for multiple bonds between atoms. If you only want to render one * cylinder, leave order and shift at their default values. @param end1 the position of the first end of the cylinder. that is, the center of the first disc-shaped face. @param end2 the position of the second end of the cylinder. that is, the center of the second disc-shaped face. @param radius the radius of the cylinder @param order to render only one cylinder, leave this set to the default value, which is 1. If order>1, then order parallel cylinders are drawn around the axis (end1 - end2). @param shift this is only meaningful of order>1, otherwise just let this set to the default value. When order>1, this is interpreted as the displacement of the axis of the drawn cylinders from the axis (end1 - end2). @param planeNormalVector the unit normal vector of the plane in which we will try to fit the cylinders. This is useful to draw double bonds in a molecule in such a way that they avoid looking like single bonds. To achieve that, just pass the molecule's fitting plane's unit normal vector here. */ void drawMulti( const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double radius, int order, double shift, const Eigen::Vector3d &planeNormalVector ) const; private: CylinderPrivate * const d; }; } #endif avogadro-1.1.1/libavogadro/src/animation.cpp0000644000175000001440000001325212250371054020272 0ustar marcususers/********************************************************************** Animation - Basic animation Copyright (C) 2008 by Tim Vandermeersch Copyright (C) 2009 by Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "animation.h" #include #include #include #include #include #include using namespace OpenBabel; using Eigen::Vector3d; namespace Avogadro { class AnimationPrivate { public: AnimationPrivate() : fps(25), framesSet(false), dynamicBonds(false) {} int fps; bool framesSet; bool dynamicBonds; }; Animation::Animation(QObject *parent) : QObject(parent), d(new AnimationPrivate), m_molecule(0), m_timeLine(new QTimeLine) { // in chemical animations, each frame should take the same time m_timeLine->setCurveShape(QTimeLine::LinearCurve); } Animation::~Animation() { if (m_timeLine) { delete m_timeLine; m_timeLine = 0; } delete d; } void Animation::setMolecule(Molecule *molecule) { m_molecule = molecule; if (molecule == NULL) return; // we can't save the current conformers if (d->framesSet) { m_originalConformers.clear(); for (unsigned int i = 0; i < molecule->numConformers(); ++i) { m_originalConformers.push_back(molecule->conformer(i)); } } else { m_timeLine->setFrameRange( 1, m_molecule->numConformers() ); } } int Animation::numFrames() const { if (d->framesSet) return m_frames.size(); if (m_molecule) return m_molecule->numConformers(); return 0; } int Animation::fps() const { return d->fps; } void Animation::setFps(int fps) { d->fps = fps; } int Animation::loopCount() const { return m_timeLine->loopCount(); } void Animation::setLoopCount(int loops) { m_timeLine->setLoopCount(loops); } void Animation::setFrame(int i) { if (i <= 0 || !m_molecule || i > (int)m_molecule->numConformers()) return; // nothing to do m_molecule->lock()->lockForWrite(); m_molecule->setConformer(i-1); // Frame counting starts from 1 if (d->dynamicBonds) { // construct minimal OBMol OpenBabel::OBMol obmol; obmol.BeginModify(); foreach(Atom *atom, m_molecule->atoms()) { OpenBabel::OBAtom *a = obmol.NewAtom(); OpenBabel::OBAtom obatom = atom->OBAtom(); *a = obatom; } obmol.EndModify(); // connect the dots obmol.ConnectTheDots(); QList bonds(m_molecule->bonds()); foreach(Bond *bond, bonds) m_molecule->removeBond(bond->id()); FOR_BONDS_OF_MOL (obbond, obmol) { Bond *bond = m_molecule->addBond(); bond->setBegin(m_molecule->atom(obbond->GetBeginAtomIdx()-1)); bond->setEnd(m_molecule->atom(obbond->GetEndAtomIdx()-1)); bond->setOrder(obbond->GetBondOrder()); } } m_molecule->lock()->unlock(); m_molecule->update(); emit frameChanged(i); } bool Animation::dynamicBonds() const { return d->dynamicBonds; } void Animation::setDynamicBonds(bool enable) { d->dynamicBonds = enable; } void Animation::setFrames(std::vector< std::vector< Eigen::Vector3d> *> frames) { if (frames.size() == 0) return; // nothing to do if (!m_originalConformers.empty()) m_originalConformers.clear(); if (m_molecule) { for (unsigned int i = 0; i < m_molecule->numConformers(); ++i) { m_originalConformers.push_back(m_molecule->conformer(i)); } } d->framesSet = true; m_frames = frames; m_timeLine->setFrameRange(1, numFrames() ); } void Animation::stop() { if(!m_molecule) return; m_timeLine->stop(); m_timeLine->setCurrentTime(0); disconnect(m_timeLine, SIGNAL(frameChanged(int)), this, SLOT(setFrame(int))); // restore original conformers if (d->framesSet) { m_molecule->lock()->lockForWrite(); m_molecule->setAllConformers(m_originalConformers); m_molecule->lock()->unlock(); } setFrame(1); } void Animation::start() { if(!m_molecule) return; // set molecule conformers if (d->framesSet) { m_molecule->lock()->lockForWrite(); // don't delete the existing conformers -- we save them as m_originalConformers m_molecule->setAllConformers(m_frames, false); m_molecule->lock()->unlock(); } if (d->fps < 1.0) d->fps = 1.0; int interval = 1000 / d->fps; m_timeLine->setUpdateInterval(interval); int duration = interval * numFrames(); m_timeLine->setDuration(duration); m_timeLine->setFrameRange( 1,numFrames() ); connect(m_timeLine, SIGNAL(frameChanged(int)), this, SLOT(setFrame(int))); setFrame(1); m_timeLine->setCurrentTime(0); m_timeLine->start(); } void Animation::pause() { m_timeLine->stop(); } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/glhit.cpp0000644000175000001440000000525412250371054017425 0ustar marcususers/********************************************************************** GLHit - detect mouse clicks and the objects hit Copyright (C) 2006-2009 Geoffrey R. Hutchison Copyright (C) 2006,2007 Donald Ephraim Curtis Copyright (C) 2007-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "glhit.h" namespace Avogadro { class GLHitPrivate { public: GLHitPrivate() {} GLuint type; GLuint name; GLuint minZ; GLuint maxZ; }; GLHit::GLHit() : d(new GLHitPrivate) { } GLHit::GLHit( const GLHit &other ) : d( new GLHitPrivate ) { GLHitPrivate *e = other.d; d->type = e->type; d->name = e->name; d->minZ = e->minZ; d->maxZ = e->maxZ; } GLHit::GLHit( GLuint type, GLuint name, GLuint minZ, GLuint maxZ ) : d( new GLHitPrivate ) { d->name = name; d->type = type; d->minZ = minZ; d->maxZ = maxZ; } GLHit &GLHit::operator=( const GLHit &other ) { GLHitPrivate *e = other.d; d->type = e->type; d->name = e->name; d->minZ = e->minZ; d->maxZ = e->maxZ; return *this; } GLHit::~GLHit() { delete d; } bool GLHit::operator<( const GLHit &other ) const { GLHitPrivate *e = other.d; return d->minZ < e->minZ; } bool GLHit::operator==( const GLHit &other ) const { GLHitPrivate *e = other.d; return (( d->type == e->type ) && ( d->name == e->name ) ); } GLuint GLHit::name() const { return d->name; } GLuint GLHit::type() const { return d->type; } GLuint GLHit::minZ() const { return d->minZ; } GLuint GLHit::maxZ() const { return d->maxZ; } void GLHit::setName( GLuint name ) { d->name = name; } void GLHit::setType( GLuint type ) { d->type = type; } void GLHit::setMinZ( GLuint minZ ) { d->minZ = minZ; } void GLHit::setMaxZ( GLuint maxZ ) { d->maxZ = maxZ; } } // End namespace Avogadro avogadro-1.1.1/libavogadro/src/plotaxis.h0000644000175000001440000001245212250371054017624 0ustar marcususers/********************************************************************** PlotAxis -- Part of the Avogadro 2D plotting interface Copyright (C) 2003 Jason Harris (KDE) Copyright (C) 2008 David Lonie (Avogadro) This file is part of the Avogadro molecular editor project. For more information, see This file is based on KPlotWidget from the KDE library. For more information see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PLOTAXIS_H #define PLOTAXIS_H #include #include #include namespace Avogadro { /** * @class PlotAxis plotaxis.h * @short Axis for PlotWidget * * Contains all data for drawing an axis including format specification axis labels. * * @author Andreas Nicolai * @version 1.0 */ class A_EXPORT PlotAxis { public: /** * Constructor, constructs an axis with the label @p label. */ explicit PlotAxis( const QString& label = QString() ); /** * Destructor. */ ~PlotAxis(); /** * @return whether the axis is visible or not */ bool isVisible() const; /** * Sets the "visible" property of the axis. * @param visible if true, this axis will be drawn on the PlotWidget */ void setVisible( bool visible ); /** * @return whether tick labels will be drawn for this axis */ bool areTickLabelsShown() const; /** * Determine whether tick labels will be drawn for this axis. * @param b if true, tick labels will be drawn. */ void setTickLabelsShown( bool b ); /** * Sets the axis label. * Set the label to an empty string to omit the axis label. * @param label a string describing the data plotted on the axis. */ void setLabel( const QString& label ); /** * @return the label string for this axis */ QString label() const; /** * @return the ticklabel string for the given value, rendered according * to the current format specification. * @param the value to be rendered as a tick label. * @sa setTickLabelFormat() */ QString tickLabel( double value ) const; /** * Set the display format for converting the double value of the * tick's position to the QString for the tick label. * * Normally, the format character is one of 'e', 'E', 'f', 'g', or 'G' * (see the documentation for QString::arg(double) for details). * * In addition, it is possible to set the format character to 't'; * in this case the tickmark value is interpreted as a time in hours, * and the ticklabel string will be in "hh:mm" clock format. * Note that when the format character is 't', the fieldWidth and prec * values are ignored. * * @param format the format specification character * @param fieldWidth the number of characters in the output string. * If set to 0, the string will be as wide as it needs to be to fully * render the value. * @param precision the number of characters following the decimal point. */ void setTickLabelFormat( char format = 'g', int fieldWidth = 0, int precision = -1 ); /** * @return the field width of the tick labels */ int tickLabelWidth() const; /** * @return the number format of the tick labels */ char tickLabelFormat() const; /** * @return the number precision of the tick labels */ int tickLabelPrecision() const; /** * Determine the positions of major and minor tickmarks for this axis. * @note this function is called by PlotWidget whenever the plot's * limits are modified. * @param x0 the minimum data coordinate of the axis. * @param length the range covered by the axis, in data units. * @sa majorTickMarks() * @sa minorTickMarks() */ void setTickMarks( double x0, double length ); /** * @return the list of coordinates of the major tickmarks for this axis * @note the positions of tickmarks are automatically computed by setTickMarks(). * @sa setTickMarks() * @sa minorTickMarks() */ QList< double > majorTickMarks() const; /** * @return the list with the minor tickmarks * @note the positions of tickmarks are automatically computed by setTickMarks(). * @sa setTickMarks() * @sa majorTickMarks() */ QList< double > minorTickMarks() const; private: class Private; Private * const d; Q_DISABLE_COPY( PlotAxis ) }; } #endif // PLOTAXIS_H avogadro-1.1.1/libavogadro/src/cylinder_p.cpp0000644000175000001440000001560012250371054020442 0ustar marcususers/********************************************************************** Cylinder - OpenGL Cylinder drawing class. Copyright (C) 2006,2007 Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "cylinder_p.h" #ifdef ENABLE_GLSL #include #endif #include #include // Win32 build (19/05/08) #include #ifndef M_PI #define M_PI 3.1415926535897932384626433832795 #endif using namespace Eigen; namespace Avogadro { class CylinderPrivate { public: CylinderPrivate() : vertexBuffer(0), normalBuffer(0), displayList(0), isValid(false) {} /** Pointer to the buffer storing the vertex array */ Eigen::Vector3f *vertexBuffer; /** Pointer to the buffer storing the normal array */ Eigen::Vector3f *normalBuffer; /** The id of the OpenGL display list */ GLuint displayList; /** Equals true if the vertex array has been correctly initialized */ bool isValid; /** the number of faces of the cylinder. This only * includes the lateral faces, as the base and top faces (the * two discs) are not rendered. */ int faces; }; Cylinder::Cylinder(int faces) : d(new CylinderPrivate) { setup(faces); } Cylinder::~Cylinder() { freeBuffers(); if( d->displayList ) { glDeleteLists( d->displayList, 1 ); } delete d; } void Cylinder::freeBuffers() { if( d->normalBuffer ) { delete [] d->normalBuffer; d->normalBuffer = 0; } if( d->vertexBuffer ) { delete [] d->vertexBuffer; d->vertexBuffer = 0; } } void Cylinder::setup( int faces ) { if( d->isValid && faces == d->faces ) return; d->faces = faces; initialize(); } void Cylinder::initialize() { d->isValid = false; if( d->faces < 0 ) return; // compile display list and free buffers if( ! d->displayList ) d->displayList = glGenLists( 1 ); if( ! d->displayList ) return; if( d->faces < 3 ) { glNewList( d->displayList, GL_COMPILE ); glLineWidth(1.0); glBegin(GL_LINES); glVertex3f(0, 0, 0); glVertex3f(0, 0, 1); glEnd(); glEndList(); } else { // compute number of vertices int vertexCount = 2 * d->faces + 2; // deallocate any previously allocated buffer freeBuffers(); // allocate memory for buffers d->vertexBuffer = new Vector3f[vertexCount]; if( ! d->vertexBuffer ) return; d->normalBuffer = new Vector3f[vertexCount]; if( ! d->normalBuffer ) return; float baseAngle = 2 * M_PI / d->faces; // build vertex and normal buffers for( int i = 0; i <= d->faces; i++ ) { float angle = baseAngle * i; Vector3f v( cosf(angle), sinf(angle), 0.0f ); d->normalBuffer[ 2 * i ] = v; d->normalBuffer[ 2 * i + 1 ] = v; d->vertexBuffer[ 2 * i ] = v; d->vertexBuffer[ 2 * i + 1 ] = v; d->vertexBuffer[ 2 * i ].z() = 1.0f; } glEnableClientState( GL_VERTEX_ARRAY ); glEnableClientState( GL_NORMAL_ARRAY ); glNewList( d->displayList, GL_COMPILE ); glVertexPointer( 3, GL_FLOAT, 0, d->vertexBuffer ); glNormalPointer( GL_FLOAT, 0, d->normalBuffer ); glDrawArrays( GL_QUAD_STRIP, 0, vertexCount ); glEndList(); glDisableClientState( GL_VERTEX_ARRAY ); glDisableClientState( GL_NORMAL_ARRAY ); } freeBuffers(); d->isValid = true; } void Cylinder::draw( const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double radius ) const { // construct the 4D transformation matrix Eigen::Matrix4d matrix; matrix.row(3) << 0, 0, 0, 1; matrix.block<3,1>(0,2) = end2 - end1; // the axis // construct an orthogonal basis whose first vector is the axis, and whose other vectors // have norm equal to 'radius'. Vector3d axisNormalized = matrix.block<3,1>(0,2).normalized(); matrix.block<3,1>(0,0) = axisNormalized.unitOrthogonal() * radius; matrix.block<3,1>(0,1) = axisNormalized.cross(matrix.block<3,1>(0,0)); matrix.block<3,1>(0,3) = end1; //now we can do the actual drawing ! glPushMatrix(); glMultMatrixd( matrix.data() ); glCallList( d->displayList ); glPopMatrix(); } void Cylinder::drawMulti( const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double radius, int order, double shift, const Eigen::Vector3d &planeNormalVector ) const { // construct the 4D transformation matrix Eigen::Matrix4d matrix; matrix.row(3) << 0,0,0,1; matrix.block<3,1>(0,3) = end1; matrix.block<3,1>(0,2) = end2 - end1; // the "axis vector" of the line // Now we want to construct an orthonormal basis whose third // vector is axis.normalized(). The first vector in this // basis, which we call ortho1, should be approximately lying in the // z=0 plane if possible. This is to ensure double bonds don't look // like single bonds from the default point of view. Eigen::Vector3d axisNormalized = matrix.block<3,1>(0,2).normalized(); Eigen::Block ortho1(matrix, 0, 0); ortho1 = axisNormalized.cross(planeNormalVector); double ortho1Norm = ortho1.norm(); if( ortho1Norm > 0.001 ) ortho1 = ortho1.normalized() * radius; else ortho1 = axisNormalized.unitOrthogonal() * radius; matrix.block<3,1>(0,1) = axisNormalized.cross(ortho1); // now the matrix is entirely filled, so we can do the actual drawing ! glPushMatrix(); glMultMatrixd( matrix.data() ); if( order == 1 ) glCallList( d->displayList ); else { double angleOffset = 0.0; if( order >= 3 ) { if( order == 3 ) angleOffset = 90.0; else angleOffset = 22.5; } double displacementFactor = shift / radius; for( int i = 0; i < order; i++) { glPushMatrix(); glRotated( angleOffset + 360.0 * i / order, 0.0, 0.0, 1.0 ); glTranslated( displacementFactor, 0.0, 0.0 ); glCallList( d->displayList ); glPopMatrix(); } } glPopMatrix(); } } avogadro-1.1.1/libavogadro/src/pluginmanager.cpp0000644000175000001440000005407612250371054021155 0ustar marcususers/********************************************************************** PluginManager - Class to handle dynamic loading/unloading of plugins Copyright (C) 2008 Donald Ephraim Curtis Copyright (C) 2008,2009 Tim Vandermeersch Copyright (C) 2008,2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "pluginmanager.h" #include "config.h" // krazy:exclude=includes #ifdef ENABLE_PYTHON #include "pythontool_p.h" #include "pythonengine_p.h" #include "pythonextension_p.h" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include "staticplugins.cpp" namespace Avogadro { class PluginItemPrivate { public: QString name; QString identifier; QString description; QString fileName; QString absoluteFilePath; Plugin::Type type; PluginFactory *factory; bool enabled; }; PluginItem::PluginItem() : d(new PluginItemPrivate) { d->type = Plugin::OtherType; d->enabled = false; } PluginItem::PluginItem( const QString &name, const QString &identifier, const QString &description, Plugin::Type type, const QString &fileName, const QString &filePath, PluginFactory *factory, bool enabled) : d(new PluginItemPrivate) { d->name = name; d->identifier = identifier; d->description = description; d->type = type; d->fileName = fileName; d->absoluteFilePath = filePath; d->enabled = enabled; d->factory = factory; } PluginItem::~PluginItem() { delete d; } int PluginItem::type() const { return d->type; } QString PluginItem::name() const { return d->name; } QString PluginItem::identifier() const { return d->identifier; } QString PluginItem::description() const { return d->description; } QString PluginItem::fileName() const { return d->fileName; } QString PluginItem::absoluteFilePath() const { return d->absoluteFilePath; } bool PluginItem::isEnabled() const { return d->enabled; } PluginFactory *PluginItem::factory() const { return d->factory; } void PluginItem::setType( Plugin::Type type ) { d->type = type; } void PluginItem::setName( const QString &name ) { d->name = name; } void PluginItem::setIdentifier( const QString &identifier ) { d->identifier = identifier; } void PluginItem::setDescription( const QString &description ) { d->description = description; } void PluginItem::setFileName( const QString &fileName ) { d->fileName = fileName; } void PluginItem::setAbsoluteFilePath( const QString &filePath ) { d->absoluteFilePath = filePath; } void PluginItem::setEnabled( bool enable ) { d->enabled = enable; } void PluginItem::setFactory( PluginFactory *factory) { d->factory = factory; } class PluginManagerPrivate { public: PluginManagerPrivate() : toolsLoaded(false), extensionsLoaded(false), colorsLoaded(false) {} ~PluginManagerPrivate() {} QStringList searchDirs; bool toolsLoaded; QList tools; bool extensionsLoaded; QList extensions; bool colorsLoaded; QList colors; static bool factoriesLoaded; static QVector > &m_items(); static QVector > &m_enabledFactories(); static QVector > &m_disabledFactories(); }; bool PluginManagerPrivate::factoriesLoaded = false; // Sort tools based on "usefulness" (currently unused) // defined in tool.cpp extern bool toolGreaterThan(const Tool *first, const Tool *second); // Sort extensions based on "usefulness" (currently unused) bool extensionGreaterThan(const Extension *first, const Extension *second) { return first->usefulness() < second->usefulness(); } // Sort colors based on their translated names bool colorGreaterThan(const Color *first, const Color *second) { if (first->identifier() == "ElementColor") return true; // always the top! else if (second->identifier() == "ElementColor") return false; // always the top! if (first->identifier() == "CustomColor") return false; // always the bottom! else if (second->identifier() == "CustomColor") return true; // always the bottom! // locale aware returns less-than, greater-than, or 0 // Required for sorting lists. return (QString::localeAwareCompare(first->name(), second->name()) < 0); } PluginManager::PluginManager(QObject *parent) : QObject(parent), d(new PluginManagerPrivate) { } PluginManager::~PluginManager() { QSettings settings; writeSettings(settings); delete(d); } PluginManager* PluginManager::instance() { static PluginManager *obj = 0; if (!obj) obj = new PluginManager(); return obj; } void PluginManager::setPluginPath(const QString &path) { d->searchDirs = QStringList(path); } void PluginManager::setPluginPath(const QStringList &path) { d->searchDirs = path; } void PluginManager::addToPluginPath(const QString &path) { d->searchDirs << path; } void PluginManager::addToPluginPath(const QStringList &path) { d->searchDirs << path; } QStringList PluginManager::pluginPath() const { return d->searchDirs; } QList PluginManager::extensions(QObject *parent) { loadFactories(); if(d->extensionsLoaded) return d->extensions; foreach(PluginFactory *factory, factories(Plugin::ExtensionType)) { Extension *extension = static_cast(factory->createInstance(parent)); d->extensions.append(extension); } d->extensionsLoaded = true; return d->extensions; } QList PluginManager::tools(QObject *parent) { loadFactories(); if(d->toolsLoaded) return d->tools; foreach(PluginFactory *factory, factories(Plugin::ToolType)) { Tool *tool = static_cast(factory->createInstance(parent)); d->tools.append(tool); } qSort(d->tools.begin(), d->tools.end(), toolGreaterThan); d->toolsLoaded = true; return d->tools; } QList PluginManager::scripts(const QString &type) { QList scripts; // create this directory for the user if it does not exist QDir dir = QDir::home(); QStringList filters; filters << "*.py"; dir.setNameFilters(filters); dir.setFilter(QDir::Files | QDir::Readable); bool failed = false; #ifdef Q_WS_MAC dir.cd("Library/Application Support"); if (!dir.cd("Avogadro")) { if (!dir.mkdir("Avogadro")) failed = true; if (!dir.cd("Avogadro")) failed = true; } #else #ifdef WIN32 dir = QCoreApplication::applicationDirPath(); #else if(!dir.cd(".avogadro")) { if (!dir.mkdir(".avogadro")) failed = true; if (!dir.cd(".avogadro")) failed = true; } #endif #endif if(!dir.cd(type + "Scripts")) { if (!dir.mkdir(type + "Scripts")) failed = true; if (!dir.cd(type + "Scripts")) failed = true; } if (failed) { qWarning() << "Insufficient permissions to access scripts directory"; return scripts; } foreach (const QString& file, dir.entryList()) scripts.append(QString(dir.canonicalPath() + '/' + file)); #ifndef WIN32 // Now for the system wide Python scripts QString systemScriptsPath = QString(INSTALL_PREFIX) + '/' + "share/libavogadro/" + type + "Scripts"; if (dir.cd(systemScriptsPath)) foreach (const QString& file, dir.entryList()) scripts.append(QString(dir.canonicalPath() + '/' + file)); #endif return scripts; } QList PluginManager::toolScripts() { return scripts("tool"); } QList PluginManager::engineScripts() { return scripts("engine"); } QList PluginManager::extensionScripts() { return scripts("extension"); } QList PluginManager::colors(QObject *parent) { loadFactories(); if(d->colorsLoaded) return d->colors; foreach(PluginFactory *factory, factories(Plugin::ColorType)) { Color *color = static_cast(factory->createInstance(parent)); d->colors.append(color); } qSort(d->colors.begin(), d->colors.end(), colorGreaterThan); d->colorsLoaded = true; return d->colors; } PluginFactory * PluginManager::factory(const QString &id, Plugin::Type type) { loadFactories(); if(type < Plugin::TypeCount) { foreach(PluginFactory *factory, PluginManagerPrivate::m_enabledFactories()[type]) { if(factory->identifier() == id) { return factory; } } } return 0; } Extension* PluginManager::extension(const QString &id, QObject *parent) { loadFactories(); foreach(PluginFactory *factory, factories(Plugin::ExtensionType)) { if (factory->identifier() == id) { Extension *extension = static_cast(factory->createInstance(parent)); return extension; } } return 0; } Tool* PluginManager::tool(const QString &id, QObject *parent) { loadFactories(); foreach(PluginFactory *factory, factories(Plugin::ToolType)) { if (factory->identifier() == id) { Tool *tool = static_cast(factory->createInstance(parent)); return tool; } } return 0; } Color* PluginManager::color(const QString &id, QObject *parent) { loadFactories(); foreach(PluginFactory *factory, factories(Plugin::ColorType)) { if (factory->identifier() == id) { Color *color = static_cast(factory->createInstance(parent)); return color; } } return 0; } Engine* PluginManager::engine(const QString &id, QObject *parent) { loadFactories(); foreach(PluginFactory *factory, factories(Plugin::EngineType)) { if (factory->identifier() == id) { Engine *engine = static_cast(factory->createInstance(parent)); return engine; } } return 0; } QList PluginManager::names(Plugin::Type type) { loadFactories(); QList names; foreach(PluginFactory *factory, factories(type)) names.append(factory->name()); return names; } QList PluginManager::identifiers(Plugin::Type type) { loadFactories(); QList ids; foreach(PluginFactory *factory, factories(type)) ids.append(factory->identifier()); return ids; } QList PluginManager::descriptions(Plugin::Type type) { loadFactories(); QList descriptions; foreach(PluginFactory *factory, factories(type)) descriptions.append(factory->description()); return descriptions; } QVector > &PluginManagerPrivate::m_items() { static QVector > items; if(items.size() < Plugin::TypeCount) items.resize(Plugin::TypeCount); return items; } QVector > &PluginManagerPrivate::m_enabledFactories() { static QVector > factories; if(factories.size() < Plugin::TypeCount) factories.resize(Plugin::TypeCount); return factories; } QVector > &PluginManagerPrivate::m_disabledFactories() { static QVector > factories; if(factories.size() < Plugin::TypeCount) factories.resize(Plugin::TypeCount); return factories; } void PluginManager::loadFactories(const QString& dir) { if (PluginManagerPrivate::factoriesLoaded) return; if (!dir.isEmpty()) { QSettings settings; settings.beginGroup("ExtraPlugins"); loadPluginDir(dir, settings); settings.endGroup(); // ExtraPlugins } // Initialize the resource files for our static plugins. Note that the // function must be declared outside of a namespace. initAvogadroResources(); // Load the static plugins QVector > &ef = PluginManagerPrivate::m_enabledFactories(); foreach(QObject *instance, QPluginLoader::staticInstances()) { PluginFactory *factory = qobject_cast(instance); if (factory) ef[factory->type()].append(factory); } QSettings settings; settings.beginGroup("Plugins"); // Initialize search path if it was not done by client application /// @todo To be removed in libavogadro 2 if(d->searchDirs.empty()) initializeSearchDirs(d->searchDirs); // Load the plugins foreach (const QString& path, d->searchDirs) { qDebug() << "Loading plugins:" << path; loadPluginDir(path, settings); loadPluginDir(path + "/colors", settings); loadPluginDir(path + "/engines", settings); loadPluginDir(path + "/extensions", settings); loadPluginDir(path + "/tools", settings); loadPluginDir(path + "/contrib", settings); } #ifdef ENABLE_PYTHON // Load the python tools QList scripts = toolScripts(); foreach(const QString &script, scripts) { PluginFactory *factory = qobject_cast(new PythonToolFactory(script)); if (factory) { QFileInfo info(script); loadFactory(factory, info, settings); } else { qDebug() << script << "failed to load. "; } } // Load the python engines QList enginescripts = engineScripts(); foreach(const QString &script, enginescripts) { PluginFactory *factory = qobject_cast(new PythonEngineFactory(script)); if (factory) { QFileInfo info(script); loadFactory(factory, info, settings); } else { qDebug() << script << "failed to load. "; } } // Load the python extensions QList extensionscripts = extensionScripts(); foreach(const QString &script, extensionscripts) { PluginFactory *factory = qobject_cast(new PythonExtensionFactory(script)); if (factory) { QFileInfo info(script); loadFactory(factory, info, settings); } else { qDebug() << script << "failed to load. "; } } #endif settings.endGroup(); // Plugins PluginManagerPrivate::factoriesLoaded = true; } void PluginManager::loadFactory(PluginFactory *factory, QFileInfo &fileInfo, QSettings &settings) { settings.beginGroup(QString::number(factory->type())); QVector< QList > &ef = PluginManagerPrivate::m_enabledFactories(); QVector< QList > &df = PluginManagerPrivate::m_disabledFactories(); // create the PluginItem PluginItem *item = new PluginItem(factory->name(), factory->identifier(), factory->description(), factory->type(), fileInfo.fileName(), fileInfo.absoluteFilePath(), factory); // add the factory to the correct list if(settings.value(factory->identifier(), true).toBool()) { ef[factory->type()].append(factory); item->setEnabled(true); } else { df[factory->type()].append(factory); item->setEnabled(false); } // Store the PluginItem PluginManagerPrivate::m_items()[factory->type()].append(item); settings.endGroup(); } QList PluginManager::factories( Plugin::Type type ) { if (type < PluginManagerPrivate::m_enabledFactories().size()) { loadFactories(); return PluginManagerPrivate::m_enabledFactories()[type]; } return QList(); } void PluginManager::reload() { // make sure to write the settings before reloading QSettings settings; writeSettings(settings); // the isEnabled settings for all plugins // write the tool settings settings.beginGroup("tools"); foreach(Tool *tool, d->tools) { tool->writeSettings(settings); tool->deleteLater(); // and delete the tool, this will inform the // ToolGroup which will inform the GLWidget. } settings.endGroup(); // set toolsLoaded to false and clear the tools list d->toolsLoaded = false; d->tools.clear(); // write the extension settings settings.beginGroup("extensions"); foreach(Extension *extension, d->extensions) { extension->writeSettings(settings); extension->deleteLater(); // and delete the extension, when the QACtions // are deleted, they are removed from the menu. } settings.endGroup(); // set extensionsLoaded to false and clear the extensions list d->extensionsLoaded = false; d->extensions.clear(); // Also handle colors settings.beginGroup("colors"); foreach(Color *color, d->colors) { color->writeSettings(settings); color->deleteLater(); } settings.endGroup(); // Clear the color list too d->colorsLoaded = false; d->colors.clear(); PluginManagerPrivate::factoriesLoaded = false; // delete the ProjectItem objects and clear the list for(int i=0; i PluginManager::pluginItems(Plugin::Type type) { return PluginManagerPrivate::m_items()[type]; } void PluginManager::writeSettings(QSettings &settings) { // write the plugin item's isEnabled() settings.beginGroup("Plugins"); for(int i=0; iidentifier(), item->isEnabled()); } settings.endGroup(); } settings.endGroup(); } inline void PluginManager::loadPluginDir(const QString &directory, QSettings &settings) { const QDir dir(directory); if(dir.exists()) { qDebug() << "Searching for plugins in" << dir.canonicalPath(); loadPluginList(dir, dir.entryList(QDir::Files), settings); } } void PluginManager::loadPluginList(const QDir &dir, const QStringList &plugins, QSettings &settings) { foreach (const QString& fileName, plugins) { if(!QLibrary::isLibrary(fileName)) continue; #ifdef Q_WS_X11 if ((fileName.indexOf("libavogadro.so") != -1) || (fileName.indexOf("Avogadro.so") != -1) || (fileName.indexOf("libQPeriodicTable.so") != -1) || (fileName.indexOf("libQPlotWidget.so") != -1)) continue; #endif #ifndef ENABLE_PYTHON if (fileName.indexOf("pythonterminal") != -1) continue; #endif // load the factory QPluginLoader loader(dir.absoluteFilePath(fileName)); QObject *instance = loader.instance(); PluginFactory *factory = qobject_cast(instance); if (factory) { QFileInfo info(fileName); loadFactory(factory, info, settings); } else { qDebug() << fileName << "failed to load. " << loader.errorString(); } } } void PluginManager::initializeSearchDirs(QStringList &searchDirs) { qDebug() << "PluginManager::setPluginPath() was not called from application" " - using default plugin path"; // Environment variable overrides default paths foreach (const QString &variable, QProcess::systemEnvironment()) { if(variable.startsWith("AVOGADRO_PLUGINS=")) { QString path(variable); path.remove(QRegExp("^AVOGADRO_PLUGINS=")); searchDirs << path.split(':'); } } // If no environment variables are set then find the plugins if (searchDirs.isEmpty()) { // Make it relative searchDirs << QCoreApplication::applicationDirPath() + "/../" + QString(INSTALL_LIB_DIR) + "/" + QString(INSTALL_PLUGIN_DIR); } // Now to search for the plugins in home directories #if defined(Q_WS_X11) searchDirs << QDir::homePath() + "/." + QString(INSTALL_PLUGIN_DIR) + "/plugins"; #elif defined(Q_WS_MAC) searchDirs << QDir::homePath() + "/Library/Application Support/" + QString(INSTALL_PLUGIN_DIR) + "/Plugins"; #elif defined(WIN32) const QString appdata = qgetenv("APPDATA"); searchDirs << appdata + "/" + QString(INSTALL_PLUGIN_DIR); #endif } } avogadro-1.1.1/libavogadro/src/cube.h0000644000175000001440000001725112250371054016701 0ustar marcususers/********************************************************************** Cube - Primitive class to encapsulate volumetric data Copyright (c) 2008-2009 Marcus D. Hanwell Copyright (c) 2009 Geoff Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef CUBE_H #define CUBE_H #include #include // Forward declarations class QReadWriteLock; namespace Avogadro { /** * @class Cube cube.h * @brief Data type holding regularly spaced data in a cube. * @author Marcus D. Hanwell * * The Cube class is a Primitive subclass that provides storage for scalar * values on a regularly spaced grid in three dimensions. This is typically * used for things such as molecular orbital values, which can be rendered * using other techniques. */ class Molecule; class CubePrivate; class A_EXPORT Cube : public Primitive { Q_OBJECT public: Cube(QObject *parent=0); ~Cube(); /** * @enum Different Cube types relating to the data */ enum Type{ VdW, ESP, ElectronDensity, MO, FromFile, None }; /** * @return The minimum point in the cube. */ Eigen::Vector3d min() const { return m_min; } /** * @return The maximum point in the cube. */ Eigen::Vector3d max() const { return m_max; } /** * @return The spacing of the grid. */ Eigen::Vector3d spacing() const { return m_spacing; } /** * @return The x, y and z dimensions of the cube. */ Eigen::Vector3i dimensions() const { return m_points; } /** * Set the limits of the cube. * @param min The minimum point in the cube. * @param max The maximum point in the cube. * @param points The number of (integer) points in the cube. */ bool setLimits(const Eigen::Vector3d &min, const Eigen::Vector3d &max, const Eigen::Vector3i &points); /** * Set the limits of the cube. * @param min The minimum point in the cube. * @param max The maximum point in the cube. * @param spacing The interval between points in the cube. */ bool setLimits(const Eigen::Vector3d &min, const Eigen::Vector3d &max, double spacing); /** * Set the limits of the cube. * @param min The minimum point in the cube. * @param dim The integer dimensions of the cube in x, y and z. * @param spacing The interval between points in the cube. */ bool setLimits(const Eigen::Vector3d &min, const Eigen::Vector3i &dim, double spacing); /** * Set the limits of the cube - copy the limits of an existing Cube. * @param cube Existing Cube to copy the limits from. */ bool setLimits(const Cube &cube); /** * Set the limits of the cube by the molecule supplied with padding. * @param mol The molecule to use when finding bounds. * @param spacing The interval between points in the cube. * @param padding The padding to use around the extents of the molecule. */ bool setLimits(const Molecule *mol, double spacing, double padding); /** * @return Vector containing all the data in a one-dimensional array. */ std::vector * data(); /** * Set the values in the cube to those passed in the vector. */ bool setData(const std::vector &values); /** * Adds the values in the cube to those passed in the vector. */ bool addData(const std::vector &values); /** * @return Index of the point closest to the position supplied. * @param pos Position to get closest index for. */ unsigned int closestIndex(const Eigen::Vector3d &pos) const; /** * @return Index vector of the point closest to the position supplied, in * the form of i, j, k. * @param pos Position to get closest index for. * @return The i, j, k index closest to the position supplied. */ Eigen::Vector3i indexVector(const Eigen::Vector3d &pos) const; /** * @param index Index to be translated to a position. * @return Position of the given index. */ Eigen::Vector3d position(unsigned int index) const; /** * This function is very quick as it just returns the value at the point. * @return Cube value at the integer point i, j, k. */ double value(int i, int j, int k) const; /** * This function is very quick as it just returns the value at the point. * @return Cube value at the integer point pos. */ double value(const Eigen::Vector3i &pos) const; /** * This function uses trilinear interpolation to find the value at points * between those specified in the cube. * @return Cube value at the specified position. * @warning This function is quite computationally expensive and should be * avoided where possible. */ float valuef(const Eigen::Vector3f &pos) const; /** * This function uses trilinear interpolation to find the value at points * between those specified in the cube. * @return Cube value at the specified position. * @warning This function is quite computationally expensive and should be * avoided where possible. */ double value(const Eigen::Vector3d &pos) const; /** * Sets the value at the specified point in the cube. * @param i x compenent of the position. * @param j y compenent of the position. * @param k z compenent of the position. * @param value Value at the specified position. */ bool setValue(int i, int j, int k, double value); /** * Sets the value at the specified index in the cube. * @param i 1-dimenional index of the point to set in the cube. */ bool setValue(unsigned int i, double value); /** * @return The minimum value at any point in the Cube. */ double minValue() const { return m_minValue; } /** * @return The minimum value at any point in the Cube. */ double maxValue() const { return m_maxValue; } void setName(QString name) { m_name = name; } QString name() const { return m_name; } void setCubeType(Type type) { m_cubeType = type; } Type cubeType() { return m_cubeType; } /** * Provides locking. */ QReadWriteLock *lock() const; friend class Molecule; protected: std::vector m_data; Eigen::Vector3d m_min, m_max, m_spacing; Eigen::Vector3i m_points; double m_minValue, m_maxValue; QString m_name; Type m_cubeType; QReadWriteLock *m_lock; Q_DECLARE_PRIVATE(Cube) }; inline bool Cube::setValue(unsigned int i, double value) { if (i < m_data.size()) { m_data[i] = value; if (value > m_maxValue) m_maxValue = value; if (value < m_minValue) m_minValue = value; return true; } else return false; } } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/plotobject.h0000644000175000001440000002241712250371054020130 0ustar marcususers/********************************************************************** PlotObject -- Part of the Avogadro 2D plotting interface Copyright (C) 2003 Jason Harris (KDE) Copyright (C) 2008 David Lonie (Avogadro) This file is part of the Avogadro molecular editor project. For more information, see This file is based on KPlotWidget from the KDE library. For more information see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PLOTOBJECT_H #define PLOTOBJECT_H #include #include #include class QBrush; class QPainter; class QPen; class QPointF; class QRect; class QRectF; namespace Avogadro { class PlotWidget; class PlotPoint; /** * @class PlotObject plotobject.h * @short Encapsulates a data set to be plotted in a PlotWidget. * * Think of a PlotObject as a set of data displayed as a group in the plot. * Each PlotObject consists of a list of PlotPoints, a "type" controlling * how the data points are displayed (some combination of Points, Lines, or * Bars), a color, and a size. There is also a parameter which controls the * shape of the points used to display the PlotObject. * * @note PlotObject will take care of the points added to it, so when clearing * the points list (eg with clearPoints()) any previous reference to a PlotPoint * already added to a PlotObject will be invalid. * * @author Jason Harris * @version 1.1 */ class A_EXPORT PlotObject{ public: /** * The type classification of the PlotObject. * * These are bitmask values that can be OR'd together, so that a set * of points can be represented in the plot in multiple ways. * * @note points should be added in order of increasing x-coordinate * when using Bars. */ enum PlotType { UnknownType = 0, Points = 1, ///< each PlotPoint is represented with a drawn point Lines = 2, ///< each PlotPoint is connected with a line Bars = 4 ///< each PlotPoint is shown as a vertical bar }; Q_DECLARE_FLAGS( PlotTypes, PlotType ) /** * The available shape styles for plotted points. */ enum PointStyle { NoPoints = 0, Circle = 1, Letter = 2, Triangle = 3, Square = 4, Pentagon = 5, Hexagon = 6, Asterisk = 7, Star = 8, UnknownPoint }; /** * Constructor. * @param color The color for plotting this object. By default this sets * the color for Points, Lines and Bars, but there are functions to * override any of these. * @param otype the PlotType for this object (Points, Lines or Bars) * @param size the size to use for plotted points, in pixels * @param ps The PointStyle describing the shape for plotted points */ explicit PlotObject( const QColor &color = Qt::white, PlotType otype = Points, double size = 2, PointStyle ps = Circle ); /** * Destructor. */ ~PlotObject(); /** * @return the plot flags of the object */ PlotTypes plotTypes() const; /** * Set whether points will be drawn for this object * @param b if true, points will be drawn */ void setShowPoints( bool b ); /** * Set whether lines will be drawn for this object * @param b if true, lines will be drawn */ void setShowLines( bool b ); /** * Set whether bars will be drawn for this object * @param b if true, bars will be drawn */ void setShowBars( bool b ); /** * @return the size of the plotted points in this object, in pixels */ double size() const; /** * Set the size for plotted points in this object, in pixels * @param s the new size */ void setSize( double s ); /** * @return the style used for drawing the points in this object */ PointStyle pointStyle() const; /** * Set a new style for drawing the points in this object * @param p the new style */ void setPointStyle( PointStyle p ); /** * @return the default pen for this Object. * If no other pens are set, this pen will be used for * points, lines, bars and labels (this pen is always used for points). */ const QPen& pen() const; /** * Set the default pen for this object * @p The pen to use */ void setPen( const QPen &p ); /** * @return the pen to use for drawing lines for this Object. */ const QPen& linePen() const; /** * Set the pen to use for drawing lines for this object * @p The pen to use */ void setLinePen( const QPen &p ); /** * @return the pen to use for drawing bars for this Object. */ const QPen& barPen() const; /** * Set the pen to use for drawing bars for this object * @p The pen to use */ void setBarPen( const QPen &p ); /** * @return the pen to use for drawing labels for this Object. */ const QPen& labelPen() const; /** * Set the pen to use for labels for this object * @p The pen to use */ void setLabelPen( const QPen &p ); /** * @return the default Brush to use for this Object. */ const QBrush brush() const; /** * Set the default brush to use for this object * @b The brush to use */ void setBrush( const QBrush &b ); /** * @return the brush to use for filling bars for this Object. */ const QBrush barBrush() const; /** * Set the brush to use for drawing bars for this object * @b The brush to use */ void setBarBrush( const QBrush &b ); /** * @return the list of PlotPoints that make up this object */ QList< PlotPoint* > points() const; /** * Add a point to the object's list of points, using input data to construct a PlotPoint. * @param p the QPointF to add. * @param label the optional text label for this point * @param barWidth the width of the bar, if this object is to be drawn with bars * @return a reference to the PlotPoint added. * @note if @param barWidth is left at its default value of 0.0, then the width will be * automatically set to the distance between this point and the one to its right. */ PlotPoint* addPoint( const QPointF &p, const QString &label = QString(), double barWidth = 0.0 ); /** * Add a given PlotPoint to the object's list of points. * @overload * @param p pointer to the PlotPoint to add. * @return a reference to the PlotPoint added. */ PlotPoint* addPoint( PlotPoint *p ); /** * Add a point to the object's list of points, using input data to construct a PlotPoint. * @overload * @param x the X-coordinate of the point to add. * @param y the Y-coordinate of the point to add. * @param label the optional text label * @param barWidth the width of the bar, if this object is to be drawn with bars * @return a reference to the PlotPoint added. * @note if @param barWidth is left at its default value of 0.0, then the width will be * automatically set to the distance between this point and the one to its right. */ PlotPoint* addPoint( double x, double y, const QString &label = QString(), double barWidth = 0.0 ); /** * Remove the QPointF at position index from the list of points * @param index the index of the point to be removed. */ void removePoint( int index ); /** * Return a reference to the PlotPoint at the specified index. * @param ind index of point to be returned */ PlotPoint* at( int index ); /** * Remove and destroy the points of this object */ void clearPoints(); /** * Draw this PlotObject on the given QPainter * @param p The QPainter to draw on * @param pw the PlotWidget to draw on (this is needed * for the PlotWidget::mapToWidget() function) */ void draw( QPainter *p, PlotWidget *pw ); /** * Draw this PlotObject on the given QPainter * @param p The QPainter to draw on * @param pixRect the QRect that defines the actual plot area. Needed * conversion between data and image coordinates. * @param dataRect QRect containing the plot limits in data units */ void drawImage( QPainter *painter, QRect *pixRect, QRectF *dataRect); private: class Private; Private * const d; Q_DISABLE_COPY( PlotObject ) }; Q_DECLARE_OPERATORS_FOR_FLAGS( PlotObject::PlotTypes ) } #endif avogadro-1.1.1/libavogadro/src/periodictablescene_p.cpp0000644000175000001440000001366312250371054022464 0ustar marcususers/********************************************************************** PeriodicTableScene - Periodic Table Graphics Scene for Avogadro Copyright (C) 2007-2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "periodictablescene_p.h" #include "elementitem_p.h" #include "elementdetail_p.h" #include "elementtranslator.h" #include #include #include #include #include #include #include // The use of postfix operators here is just fine! // We're using int for postfix, so it's almost zero overhead // krazy:excludeall=postfixop namespace Avogadro { PeriodicTableScene::PeriodicTableScene(QObject *parent) : QGraphicsScene(parent) { int width = 26; int height = 26; ElementDetail *detail = new ElementDetail(1); detail->setPos(6.5 * width, 0.75 * height); addItem(detail); // Connect the slot and the signal... connect(this, SIGNAL(elementChanged(int)), detail, SLOT(elementChanged(int))); ElementItem *item = new ElementItem(1); item->setPos( 0 * width, 0 * height); addItem(item); item = new ElementItem(2); item->setPos(17 * width, 0 * height); addItem(item); item = new ElementItem(3); item->setPos( 0 * width, 1 * height); addItem(item); item = new ElementItem(4); item->setPos( 1 * width, 1 * height); addItem(item); item = new ElementItem(5); item->setPos(12 * width, 1 * height); addItem(item); item = new ElementItem(6); item->setPos(13 * width, 1 * height); addItem(item); item = new ElementItem(7); item->setPos(14 * width, 1 * height); addItem(item); item = new ElementItem(8); item->setPos(15 * width, 1 * height); addItem(item); item = new ElementItem(9); item->setPos(16 * width, 1 * height); addItem(item); item = new ElementItem(10); item->setPos(17 * width, 1 * height); addItem(item); item = new ElementItem(11); item->setPos( 0 * width, 2 * height); addItem(item); item = new ElementItem(12); item->setPos( 1 * width, 2 * height); addItem(item); item = new ElementItem(13); item->setPos(12 * width, 2 * height); addItem(item); item = new ElementItem(14); item->setPos(13 * width, 2 * height); addItem(item); item = new ElementItem(15); item->setPos(14 * width, 2 * height); addItem(item); item = new ElementItem(16); item->setPos(15 * width, 2 * height); addItem(item); item = new ElementItem(17); item->setPos(16 * width, 2 * height); addItem(item); item = new ElementItem(18); item->setPos(17 * width, 2 * height); addItem(item); int element = 19; for (int i = 3; i < 5; i++) { for (int j = 0; j < 18; j++) { item = new ElementItem(element++); item->setPos(j * width, i * height); addItem(item); } } item = new ElementItem(element++); item->setPos( 0 * width, 5 * height); addItem(item); item = new ElementItem(element++); item->setPos( 1 * width, 5 * height); addItem(item); element = 71; for (int i = 2; i < 18; ++i) { item = new ElementItem(element++); item->setPos(i * width, 5 * height); addItem(item); } item = new ElementItem(element++); item->setPos( 0 * width, 6 * height); addItem(item); item = new ElementItem(element++); item->setPos( 1 * width, 6 * height); addItem(item); element = 103; // Goes up to element 118 for (int i = 2; i < 18; ++i) { item = new ElementItem(element++); item->setPos(i * width, 6 * height); addItem(item); } // Now for the weird ones at the bottom... element = 57; for (int i = 2; i < 16; ++i) { item = new ElementItem(element++); item->setPos(i * width, 7.5 * height); addItem(item); } element = 89; for (int i = 2; i < 16; ++i) { item = new ElementItem(element++); item->setPos(i * width, 8.5 * height); addItem(item); } } bool PeriodicTableScene::event(QEvent *e) { return QGraphicsScene::event(e); } void PeriodicTableScene::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (event->button() != Qt::LeftButton) return; QGraphicsItem *item = QGraphicsScene::itemAt(event->scenePos()); if (item->data(0).toInt() > 0 && item->data(0).toInt() < 119) emit(elementChanged(item->data(0).toInt())); QGraphicsScene::mousePressEvent(event); } void PeriodicTableScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { QGraphicsScene::mouseMoveEvent(event); } void PeriodicTableScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { QGraphicsScene::mouseReleaseEvent(event); } void PeriodicTableScene::changeElement(int element) { // Find the item to select foreach(QGraphicsItem *item, items()) { if (item->data(0).toInt() == element) item->setSelected(true); else item->setSelected(false); } // Also, update the detail emit(elementChanged(element)); } } // End namespace avogadro-1.1.1/libavogadro/src/painterdevice.h0000644000175000001440000000342512250371054020603 0ustar marcususers/********************************************************************** PainterDevice - Painter Device base class. Copyright (C) 2007,2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PAINTERDEVICE_H #define PAINTERDEVICE_H #include namespace Avogadro { class Camera; class Primitive; class Molecule; class Color; class PrimitiveList; class A_EXPORT PainterDevice { public: PainterDevice() {} virtual ~PainterDevice() {} virtual Painter *painter() const = 0; virtual Camera *camera() const = 0; virtual bool isSelected( const Primitive *p ) const = 0; virtual double radius( const Primitive *p ) const = 0; virtual const Molecule *molecule() const = 0; virtual Color* colorMap() const = 0; virtual PrimitiveList * primitives() const { return 0; } virtual int width() = 0; virtual int height() = 0; }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/pythontool_p.cpp0000644000175000001440000002303712250371054021053 0ustar marcususers/********************************************************************** PythonTool - PythonTool Tool for Avogadro Copyright (C) 2008,2009 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "pythontool_p.h" #include "pythonscript.h" #include "pythonthread_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace Eigen; using namespace boost::python; namespace Avogadro { PythonTool::PythonTool(QObject *parent, const QString &filename) : Tool(parent), m_script(0), m_settingsWidget(0) { loadScript(filename); QAction *action = activateAction(); action->setIcon(QIcon(QString::fromUtf8(":/python/python.png"))); PythonThread pt; if (PyObject_HasAttrString(m_instance.ptr(), "toolTip")) { try { prepareToCatchError(); const char *toolTip = extract(m_instance.attr("toolTip")()); action->setToolTip(QString(toolTip)); } catch(error_already_set const &) { catchError(); } } } PythonTool::~PythonTool() { PythonThread pt; if (m_script) delete m_script; if (m_settingsWidget) m_settingsWidget->deleteLater(); } QString PythonTool::identifier() const { return m_identifier; } QString PythonTool::name() const { PythonThread pt; if (!PyObject_HasAttrString(m_instance.ptr(), "name")) return tr("Unknown Python Tool"); try { prepareToCatchError(); const char *name = extract(m_instance.attr("name")()); return QString(name); } catch(error_already_set const &) { catchError(); return tr("Unknown Python Tool"); } } QString PythonTool::description() const { PythonThread pt; if (!PyObject_HasAttrString(m_instance.ptr(), "description")) return tr("N/A"); try { prepareToCatchError(); const char *desc = extract(m_instance.attr("description")()); return QString(desc); } catch(error_already_set const &) { catchError(); return tr("N/A"); } } QString PythonTool::settingsTitle() const { PythonThread pt; if (!PyObject_HasAttrString(m_instance.ptr(), "settingsTitle")) return tr("N/A"); try { prepareToCatchError(); const char *desc = extract(m_instance.attr("settingsTitle")()); return QString(desc); } catch(error_already_set const &) { catchError(); return tr("N/A"); } } QUndoCommand* PythonTool::mouseEvent(const QString &what, GLWidget *widget, QMouseEvent *event) { PythonThread pt; if (!PyObject_HasAttrString(m_instance.ptr(), what.toStdString().c_str())) return 0; try { prepareToCatchError(); boost::python::reference_existing_object::apply::type converter; PyObject *obj = converter(widget); object real_obj = object(handle<>(obj)); boost::python::return_by_value::apply::type qconverter; PyObject *qobj = qconverter(event); object real_qobj = object(handle<>(qobj)); return extract(m_instance.attr(what.toStdString().c_str())(real_obj, real_qobj)); } catch(error_already_set const &) { catchError(); } return 0; } QUndoCommand* PythonTool::mousePressEvent(GLWidget *widget, QMouseEvent *event) { return mouseEvent("mousePressEvent", widget, event); } QUndoCommand* PythonTool::mouseMoveEvent(GLWidget *widget, QMouseEvent *event) { return mouseEvent("mouseMoveEvent", widget, event); } QUndoCommand* PythonTool::mouseReleaseEvent(GLWidget *widget, QMouseEvent *event) { return mouseEvent("mouseReleaseEvent", widget, event); } QUndoCommand* PythonTool::mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event) { return mouseEvent("mouseDoubleClickEvent", widget, event); } QUndoCommand* PythonTool::wheelEvent(GLWidget *widget, QWheelEvent *event) { PythonThread pt; if (!PyObject_HasAttrString(m_instance.ptr(), "wheelEvent")) return 0; try { prepareToCatchError(); boost::python::reference_existing_object::apply::type converter; PyObject *obj = converter(widget); object real_obj = object(handle<>(obj)); boost::python::return_by_value::apply::type qconverter; PyObject *qobj = qconverter(event); object real_qobj = object(handle<>(qobj)); return extract(m_instance.attr("wheelEvent")(real_obj, real_qobj)); } catch(error_already_set const &) { catchError(); } return 0; } bool PythonTool::paint(GLWidget *widget) { PythonThread pt; if (!PyObject_HasAttrString(m_instance.ptr(), "paint")) return false; try { prepareToCatchError(); boost::python::reference_existing_object::apply::type converter; PyObject *obj = converter(widget); object real_obj = object(handle<>(obj)); m_instance.attr("paint")(real_obj); } catch(error_already_set const &) { catchError(); } return true; } QWidget* PythonTool::settingsWidget() { if (!m_script) return 0; // nothing we can do -- we don't have any real scripts PythonThread pt; if(!m_settingsWidget) { m_settingsWidget = new QWidget(); m_settingsWidget->setLayout( new QVBoxLayout() ); if (PyObject_HasAttrString(m_instance.ptr(), "settingsWidget")) { try { prepareToCatchError(); QWidget *widget = extract(m_instance.attr("settingsWidget")()); if (widget) m_settingsWidget->layout()->addWidget(widget); } catch (error_already_set const &) { catchError(); } } connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); } return m_settingsWidget; } void PythonTool::settingsWidgetDestroyed() { m_settingsWidget = 0; } void PythonTool::readSettings(QSettings &settings) { Tool::readSettings(settings); if (!m_script) return; PythonThread pt; if (!PyObject_HasAttrString(m_instance.ptr(), "readSettings")) return; try { prepareToCatchError(); boost::python::return_by_value::apply::type qconverter; PyObject *qobj = qconverter(&settings); object real_qobj = object(handle<>(qobj)); m_instance.attr("readSettings")(real_qobj); } catch(error_already_set const &) { catchError(); } } void PythonTool::writeSettings(QSettings &settings) const { Tool::writeSettings(settings); if (!m_script) return; PythonThread pt; if (!PyObject_HasAttrString(m_instance.ptr(), "writeSettings")) return; try { prepareToCatchError(); boost::python::return_by_value::apply::type qconverter; PyObject *qobj = qconverter(&settings); object real_qobj = object(handle<>(qobj)); m_instance.attr("writeSettings")(real_qobj); } catch(error_already_set const &) { catchError(); } } void PythonTool::loadScript(const QString &filename) { QFileInfo info(filename); initializePython(info.canonicalPath()); PythonThread pt; PythonScript *script = new PythonScript(filename); m_identifier = script->identifier(); if(script->module()) { // make sure there is a Tool class defined if (PyObject_HasAttrString(script->module().ptr(), "Tool")) { try { prepareToCatchError(); // instantiate the new tool m_instance = script->module().attr("Tool")(); // if we have a settings widget already, add the python content... if (m_settingsWidget) { if (PyObject_HasAttrString(m_instance.ptr(), "settingsWidget")) { QWidget *widget = extract(m_instance.attr("settingsWidget")()); if (widget) m_settingsWidget->layout()->addWidget(widget); } } } catch (error_already_set const &) { catchError(); return; } m_script = script; } else { delete script; PythonError::instance()->append(tr("PythonTool: checking ") + filename + "..."); PythonError::instance()->append(tr(" - script has no 'Tool' class defined")); } } else { delete script; PythonError::instance()->append(tr("PythonTool: checking ") + filename + "..."); PythonError::instance()->append(tr(" - no module")); } } } avogadro-1.1.1/libavogadro/src/pythonextension_p.h0000644000175000001440000000644012250371054021556 0ustar marcususers/********************************************************************** PythonExtension - PythonExtension Copyright (C) 2008 by Donald Ephraim Curtis Copyright (C) 2008,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************/ #ifndef PYTHONEXTENSION_H #define PYTHONEXTENSION_H #include #include #include #include #include #include #include #include #include #include #include namespace Avogadro { class PythonScript; class PythonExtension : public Extension { Q_OBJECT public: //! Constructor explicit PythonExtension(QObject *parent = 0, const QString &filename = QString("")); //! Deconstructor virtual ~PythonExtension(); //! @name To python delegated functions //@{ QString identifier() const; QString name() const; QString description() const; QList actions() const; QString menuPath(QAction *action) const; QUndoCommand* performAction(QAction *action, GLWidget *widget); QDockWidget* dockWidget(); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); //@} public Q_SLOTS: void dockWidgetDestroyed(); bool paint(GLWidget *widget); private: void loadScript(const QString &filename); PythonScript *m_script; boost::python::object m_instance; QDockWidget *m_dockWidget; QString m_identifier; }; class PythonExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) public: PythonExtensionFactory(const QString &filename) : m_filename(filename) { PythonExtension extension(0, filename); m_identifier = extension.identifier(); m_name = extension.name(); m_desc = extension.description(); } Plugin* createInstance(QObject *parent = 0) { return new PythonExtension(parent, m_filename); } Plugin::Type type() const { return Plugin::ExtensionType; } QString identifier() const { return m_identifier; } QString name() const { return m_name; } QString description() const { return m_desc; } private: QString m_filename; QString m_identifier, m_name, m_desc; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/undosequence.cpp0000644000175000001440000000350612250371054021012 0ustar marcususers/********************************************************************** UndoSequence - Provides an sequence of Undo/Redo in a single command Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "undosequence.h" namespace Avogadro { class UndoSequencePrivate { public: UndoSequencePrivate() {}; QList commands; }; UndoSequence::UndoSequence() : d(new UndoSequencePrivate) { } UndoSequence::~UndoSequence() { while(!d->commands.isEmpty()) { delete d->commands.takeFirst(); } delete d; } void UndoSequence::undo() { // last in first to undo for(int i=d->commands.count()-1; i >= 0; i--) { d->commands.at(i)->undo(); } } void UndoSequence::redo() { foreach(QUndoCommand *command, d->commands) { command->redo(); } } void UndoSequence::append(QUndoCommand *command) { d->commands.append(command); } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/zmatrix.cpp0000644000175000001440000001224612250371054020013 0ustar marcususers/********************************************************************** ZMatrix - Class to store a z matrix Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "zmatrix.h" #include #include #include #include #include #include #include namespace Avogadro{ using Eigen::Vector3d; ZMatrix::ZMatrix(QObject *parent) : QObject(parent) { m_molecule = qobject_cast(parent); } ZMatrix::~ZMatrix() { } void ZMatrix::addRow(int row) { qDebug() << "Adding new row" << row << m_items.size(); if (row == -1) { m_items.push_back(zItem()); m_items.last().atomIndex = m_molecule->addAtom()->id(); emit rowAdded(m_items.size()-1); } else { m_items.insert(row, zItem()); m_items[row].atomIndex = m_molecule->addAtom()->id(); emit rowAdded(row); } // Set some reasonable defaults for new rows int size = m_items.size(); if (size > 1) { Bond *b = m_molecule->addBond(); switch (size) { case 2: // Always connected to the first atom - no choice m_items[1].indices[0] = 0; m_items[1].lengths[0] = 1.0; b->setAtoms(m_items[1].atomIndex, m_items[0].atomIndex); break; case 3: m_items[2].indices[0] = 0; m_items[2].lengths[0] = 1.0; m_items[2].indices[1] = 1; m_items[2].lengths[1] = 100.0; b->setAtoms(m_items[2].atomIndex, m_items[0].atomIndex); break; default: // Provide a default - user can change m_items[size-1].indices[0] = size - 4; m_items[size-1].lengths[0] = 1.0; m_items[size-1].indices[1] = size - 3; m_items[size-1].lengths[1] = 100; m_items[size-1].indices[2] = size - 2; m_items[size-1].lengths[2] = 120; b->setAtoms(m_items[size-1].atomIndex, m_items[size-4].atomIndex); } } } void ZMatrix::setBond(int atom1, int atom2) { Bond *b = m_molecule->bond(m_items[atom1].atomIndex, m_items[m_items[atom1].indices[0]].atomIndex); b->setAtoms(m_items[atom1].atomIndex, m_items[atom2].atomIndex); m_items[atom1].indices[0] = atom2; } void ZMatrix::update() { // Start at the origin and calculate the coords relative to that for(int i = 0; i < m_items.size(); ++i) { Atom *a = m_molecule->atomById(m_items[i].atomIndex); a->setAtomicNumber(m_items[i].atomicNumber); if (i == 0) // First atom - origin a->setPos(Vector3d::Zero()); else if (i == 1) // Second atom - just length a->setPos(Vector3d(m_items[i].lengths[0], 0.0, 0.0)); else if (i == 2) { // Third atom - length and angle double length = m_items[i].lengths[0]; double angle = m_items[i].lengths[1] * cDegToRad; double x = length * cos(angle); double y = length * sin(angle); a->setPos(Vector3d(x, y, 0.0)); } else { // The general case where all three values are set double length = m_items[i].lengths[0]; double angle = m_items[i].lengths[1] * cDegToRad; double dihedral = m_items[i].lengths[2] * cDegToRad; Atom *a1 = m_molecule->atomById(m_items[m_items[i].indices[0]].atomIndex); Atom *a2 = m_molecule->atomById(m_items[m_items[i].indices[1]].atomIndex); Atom *a3 = m_molecule->atomById(m_items[m_items[i].indices[2]].atomIndex); // Dihedral angle - perform rotation Vector3d v1(*a1->pos() - *a2->pos()); Vector3d v2(*a1->pos() - *a3->pos()); if (v1.norm() < 0.01 || v2.norm() < 0.01) {// Undefined a->setPos(a1->pos()); continue; } // Find the two orthogonal axes for the dihedral angle rotation Vector3d axis1 = v1.cross(v2).normalized(); Vector3d axis2 = v1.cross(axis1).normalized(); axis1 *= -sin(dihedral); axis2 *= cos(dihedral); // Now rotate about the bond angle Vector3d v3 = (axis1 + axis2).normalized(); v3 *= length * sin(angle); v1.normalize(); v1 *= length * cos(angle); v2 = *a1->pos() + v3 - v1; // Now we have the position of the new atom a->setPos(v2); } } } } // End namespace avogadro-1.1.1/libavogadro/src/colorbutton.h0000644000175000001440000000557112250371054020337 0ustar marcususers/********************************************************************** ColorButton - Button widget to display the current selected color and bring up the color picker when clicked Copyright (c) 2008-2009 Geoff Hutchison Copyright (c) 2008 Tim Vandermeersch Copyright (c) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef COLORBUTTON_H #define COLORBUTTON_H #include #include #include namespace Avogadro { /** * @class ColorButton colorbutton.h * @author Geoffrey Hutchison * @brief A button to show the current color and bring up the QColorDialog. * * This class implements a QAbstractButton to display a colored rectangle. * When clicked by the user, it brings up a color picker to select a new * color. * * The widget has a default minimium size of 35x20 pixels. */ class A_EXPORT ColorButton : public QAbstractButton { Q_OBJECT public: ColorButton(QWidget *parent = 0); explicit ColorButton(const QColor& initial, QWidget *parent = 0); /** * Redraw the widget (i.e., refresh the colored rectange) */ void paintEvent(QPaintEvent *); /** * @param color the new color to be used */ void setColor(const QColor& color); /** * @param custom title for color choice dialog */ void setDialogTitle(const QString title = ""); /** * @return the current color */ QColor color() const; Q_SIGNALS: /** * emit any time the color is changed, either by a user or by setColor() */ void colorChanged(QColor); public Q_SLOTS: /** * Call for a change in the current color */ void changeColor(); protected: /** * Generic event handler, currently defaults to calling parent class * (included for future compatibility) */ bool event(QEvent *e); QColor m_color; //!< The current color QString m_title;//!< The current dialog title }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/global.cpp0000644000175000001440000000515212250371054017553 0ustar marcususers/********************************************************************** global.cpp - Global library functions Copyright (C) 2007 by Donald Ephraim Curtis Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "global.h" // The Krazy checker doesn't like this, but it's correct // krazy:excludeall=includes #include "config.h" #include #include #include #include #include namespace Avogadro { QPointer Library::createTranslator() { QString translationCode = QLocale::system().name(); QStringList translationPaths; foreach (const QString &variable, QProcess::systemEnvironment()) { QStringList split1 = variable.split('='); if (split1[0] == "AVOGADRO_TRANSLATIONS") { foreach (const QString &path, split1[1].split(':')) translationPaths << path; } } translationPaths << QCoreApplication::applicationDirPath() + "/../share/avogadro/i18n/"; #ifdef Q_WS_MAC translationPaths << QString(INSTALL_PREFIX) + "/share/avogadro/i18n/"; #endif QString fileName = "libavogadro_" + translationCode + ".qm"; // Load the Avogadro translations QPointer translator = new QTranslator(0); foreach (const QString &translationPath, translationPaths) { if (translator->load(fileName, translationPath)) { return translator; } } qDebug() << "Libavogadro translations not found."; delete translator; return 0; } QString Library::version() { return VERSION; } QString Library::scmRevision() { return SCM_REVISION; } QString Library::prefix() { return INSTALL_PREFIX; } bool Library::threadedGL() { return THREADED_GL; } } avogadro-1.1.1/libavogadro/src/dockwidget.h0000644000175000001440000000254612250371054020110 0ustar marcususers/********************************************************************** DockWidget -- Dock widget for avogadro Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. **********************************************************************/ #ifndef DOCKWIDGET_H #define DOCKWIDGET_H #include #include // For A_EXPORT namespace Avogadro { class A_EXPORT DockWidget : public QDockWidget { Q_OBJECT public: explicit DockWidget(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); explicit DockWidget(QWidget *parent = 0, Qt::WindowFlags flags = 0); virtual ~DockWidget(); virtual Qt::DockWidgetArea preferredWidgetDockArea(); public slots: void setPreferredDockWidgetArea(Qt::DockWidgetArea); protected: Qt::DockWidgetArea m_preferredDockWidgetArea; }; } #endif // DOCKWIDGET_H avogadro-1.1.1/libavogadro/src/bond.cpp0000644000175000001440000001015312250371054017232 0ustar marcususers/********************************************************************** Bond - Bond class derived from the base Primitive class Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "bond.h" #include "molecule.h" #include "atom.h" #include #include namespace Avogadro{ class BondPrivate { public: BondPrivate() {} }; Bond::Bond(QObject *parent) : Primitive(BondType, parent), m_beginAtomId(FALSE_ID), m_endAtomId(FALSE_ID), m_order(1), m_isAromatic(false), m_customLabel("") { m_molecule = static_cast(parent); m_id = ULONG_MAX; } Bond::~Bond() { } void Bond::setBegin(Atom* atom) { if (m_beginAtomId != FALSE_ID) { Atom *a = m_molecule->atomById(m_beginAtomId); if (a) a->removeBond(this); } m_beginAtomId = atom->id(); atom->addBond(this); } Atom * Bond::beginAtom() const { return m_molecule->atomById(m_beginAtomId); } void Bond::setEnd(Atom* atom) { if (m_endAtomId != FALSE_ID) { Atom *a = m_molecule->atomById(m_endAtomId); if (a) a->removeBond(this); } m_endAtomId = atom->id(); atom->addBond(this); } Atom * Bond::endAtom() const { return m_molecule->atomById(m_endAtomId); } void Bond::setAtoms(unsigned long atom1, unsigned long atom2, short order) { Atom *atom = m_molecule->atomById(atom1); if (atom) { m_beginAtomId = atom1; atom->addBond(m_id); } else { qDebug() << "Non-existent atom:" << atom1; } atom = m_molecule->atomById(atom2); if (atom) { m_endAtomId = atom2; atom->addBond(m_id); } else { qDebug() << "Non-existent atom:" << atom2; } m_order = order; } const Eigen::Vector3d * Bond::beginPos() const { return m_molecule->atomPos(m_beginAtomId); } const Eigen::Vector3d * Bond::midPos() const { m_midPos = (*(m_molecule->atomPos(m_beginAtomId)) + *(m_molecule->atomPos(m_endAtomId)) ) / 2.0; return &m_midPos; } const Eigen::Vector3d * Bond::endPos() const { return m_molecule->atomPos(m_endAtomId); } unsigned long Bond::otherAtom(unsigned long atomId) const { if (atomId == m_beginAtomId) { return m_endAtomId; } else { return m_beginAtomId; } } bool Bond::isAromatic() const { if (m_molecule && m_order) { m_molecule->calculateAromaticity(); return m_isAromatic; } else { return false; } } void Bond::setAromaticity(bool isAromatic) const { m_isAromatic = isAromatic; } double Bond::length() const { return (*m_molecule->atomById(m_endAtomId)->pos() - *m_molecule->atomById(m_beginAtomId)->pos()).norm(); } bool Bond::setOBBond(OpenBabel::OBBond *obbond) { m_order = obbond->GetBondOrder(); // Read custom label if (obbond->HasData("label")) m_customLabel = obbond->GetData("label")->GetValue().c_str(); return true; } Bond& Bond::operator=(const Bond& other) { m_beginAtomId = other.m_beginAtomId; m_endAtomId = other.m_endAtomId; m_order = other.m_order; m_customLabel = other.m_customLabel; return *this; } } // End namespace Avogadro avogadro-1.1.1/libavogadro/src/painter.h0000644000175000001440000005304712250371054017430 0ustar marcususers/********************************************************************** Painter - drawing spheres, cylinders and text Copyright (C) 2007 Benoit Jacob Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2007-2008 Marcus D. Hanwell Copyright (C) 2010 Konstantin Tokarev Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PAINTER_H #define PAINTER_H #include #include class QColor; class QFont; namespace Avogadro { /** * @class Painter painter.h * @brief Pure virtual Painter base class to be implemented by painters. * @author Marcus D. Hanwell * * This class is a pure virtual base class of the Painter. It should be * implemented by painters in order to satisfy all primitives objects to be * drawn by the engines. * * @sa GLPainter, POVPainter */ class Color; class Mesh; class A_EXPORT Painter { public: /** * Constructor. */ Painter(); /** * Destructor. */ virtual ~Painter(); /** * Function that may be used to initialize the drawing context when the * painter is first used. * @return True on success, false on failure to initialize. */ virtual bool initialize(); /** * Function to clean up before the drawing context is destroyed. * @return True on success, false on failure to finalize. */ virtual bool finalize(); /** * @return The current global quality setting. */ virtual int quality() const = 0; /** * Uses the primitive to set the type and name if the Paint Device supports it. * @param primitive the primitive about to be drawn. */ virtual void setName(const Primitive *primitive) = 0; /** * Sets the primitive type and id. * @param type the primitive type about to be drawn. * @param id the primitive id. */ virtual void setName(Primitive::Type type, int id) = 0; /** * Set the color to paint the primitive elements with. * @param color the color to be used for painting. */ virtual void setColor(const Color *color) = 0; /** * Set the color to paint the primitive elements with. * @param color the color to be used for painting. */ virtual void setColor(const QColor *color) = 0; /** * Set the color to paint elements with where 0.0 is the minimum and 1.0 * is the maximum. * @param red component of the color. * @param green component of the color. * @param blue component of the color. * @param alpha component of the color. */ virtual void setColor(float red, float green, float blue, float alpha = 1.0) = 0; /** * Set the color to paint elements by its name * @param name name of the color to be used */ virtual void setColor(QString name) = 0; /** * Draws a sphere, leaving the Painter choose the appropriate detail level based on the * apparent radius (ratio of radius over distance) and the global quality setting. * @param center the position of the center of the sphere. * @param radius the radius of the sphere. */ virtual void drawSphere(const Eigen::Vector3d ¢er, double radius) = 0; /** * Draws a sphere, leaving the Painter choose the appropriate detail level based on the * apparent radius (ratio of radius over distance) and the global quality setting. * @param center the position of the center of the sphere. * @param radius the radius of the sphere. * @note Convenience function - might be removed. */ virtual void drawSphere(const Eigen::Vector3d *center, double radius); /** * Draws a cylinder, leaving the Painter choose the appropriate detail level based on the * apparent radius (ratio of radius over distance) and the global quality setting. * @param end1 the position of the first end of the cylinder. * @param end2 the position of the second end of the cylinder. * @param radius the radius of the cylinder. */ virtual void drawCylinder(const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double radius) = 0; /** * Draws a multiple cylinder (see below), leaving the Painter choose the appropriate * detail level based on the apparent radius (ratio of radius over distance) and the * global quality setting. * * What is a "multiple cylinder"? Think bond of order two or more between two atoms. * This function is here to allow drawing multiple bonds in a single call. * * This function takes care of rendering multiple bonds in such a way that the individual * bonds avoid hiding each other, at least in the defaut viewpoint of a molecule. * To achieves that, it asks the GLWidget for the the normal vector of the * molecule's best-fitting plane. * * @param end1 the position of the first end of the bond. * @param end2 the position of the second end of the bond. * @param radius the radius, i.e. half-width of each cylinder. * @param order the multiplicity order of the bond, e.g. 2 for a double bond. * When this parameter equals 1, this function is equivalent to * drawCylinder(). * @param shift how far away from the central axis the cylinders are shifted. * In other words this influences the total width of multiple bonds. */ virtual void drawMultiCylinder(const Eigen::Vector3d &end1, const Eigen::Vector3d &end2, double radius, int order, double shift) = 0; /** * Draws a cone between the tip and the base with the base radius given. * @param base the position of the base of the cone. * @param cap the position of the tip of the cone. * @param baseRadius the radius of the base of the cone. * @param capRadius the radius of the base of the cone. */ virtual void drawCone(const Eigen::Vector3d &base, const Eigen::Vector3d &cap, double baseRadius, double capRadius = 0.0) = 0; /** * Draws a line between the given points of the given width. * @param start the position of the start of the line. * @param end the position of the end of the line. * @param lineWidth the width of the line. */ virtual void drawLine(const Eigen::Vector3d &start, const Eigen::Vector3d &end, double lineWidth) = 0; /** * Draws a multiple line between the given points. This function is the * line equivalent to the drawMultiCylinder function and performs the * same basic operations using simpler and quicker lines. * @param start the position of the start of the line. * @param end the position of the end of the line. * @param lineWidth the width of the line. * @param order the order of the bond, e.g. 2 for a double bond. * @param stipple The stipple parameter for the bond, can be used to * draw aromatic bonds etc. * sa drawMultiCylinder */ virtual void drawMultiLine(const Eigen::Vector3d &start, const Eigen::Vector3d &end, double lineWidth, int order, short stipple) = 0; /** * Draws a triangle with vertives on the three given points. This function * calculates the normal of the triangle and corrects the winding order to * ensure the front face is facing the camera. * @param p1 first triangle vertex. * @param p2 second triangle vertex. * @param p3 third triangle vertex. */ virtual void drawTriangle(const Eigen::Vector3d &p1, const Eigen::Vector3d &p2, const Eigen::Vector3d &p3) = 0; /** * Draws a triangle with vertives on the three given points using the * given normal. This function corrects the triangle's winding order. * @param p1 first triangle vertex. * @param p2 second triangle vertex. * @param p3 third triangle vertex. * @param n the normal of the triangle. */ virtual void drawTriangle(const Eigen::Vector3d &p1, const Eigen::Vector3d &p2, const Eigen::Vector3d &p3, const Eigen::Vector3d &n) = 0; /** * Draw a cubic B-spline between the given points. * @param pts QVector containing the points to draw the cubic B-spline * along. * @param radius the radius of the cubic B-spline. */ virtual void drawSpline(const QVector& pts, double radius) = 0; /** * Draws a shaded sector of a circle. The sector is defined by three vectors, * the center of the circle, and two vectors that define the lines going out * from the centre of the circle to the circumference of the circle. The * actual points on the circumference are found using these two vectors and * the radius of the circle. * * @param origin the center of the circle this sector is a portion of. * @param direction1 a vector defining the line the first point will lie on. * @param direction2 a vector defining the line the second point will lie on. * @param radius the radius of the circle this sector is a portion of. * @param alternateAngle whether to draw the obtuse angle made by the * two vectors instead of the acute angle between them. */ virtual void drawShadedSector(const Eigen::Vector3d & origin, const Eigen::Vector3d & direction1, const Eigen::Vector3d & direction2, double radius, bool alternateAngle = false) = 0; /** * Draws an arc. The arc is defined by three vectors, the center of the circle, * and two vectors that define the lines going out from the center of the * circle to the circumference of the circle. The actual points on the * circumference are found using these two vectors and the radius of the circle. * * @param origin the center of the circle whose circumference this arc is a portion of. * @param direction1 a vector defining the line the start of the arc will lie on. * @param direction2 a vector defining the line the end of the arc will lie on. * @param radius the radius of the circle whose circumference this arc is a portion of. * @param lineWidth the thickness of the line the arc will be drawn with. * @param alternateAngle whether to draw the obtuse angle made by the two vectors * instead of the acute angle between them. */ virtual void drawArc(const Eigen::Vector3d & origin, const Eigen::Vector3d & direction1, const Eigen::Vector3d & direction2, double radius, double lineWidth, bool alternateAngle = false) = 0; /** * Draws a solid two dimensional quadrilateral in three dimensional space. * * @param point1 the first of the four corners of the quadrilateral. * @param point2 the second of the four corners of the quadrilateral. * @param point3 the third of the four corners of the quadrilateral. * @param point4 the last of the four corners of the quadrilateral. */ virtual void drawShadedQuadrilateral(const Eigen::Vector3d & point1, const Eigen::Vector3d & point2, const Eigen::Vector3d & point3, const Eigen::Vector3d & point4) = 0; /** * Draws the outline of a two dimensional quadrilateral in three dimensional space. * * @warning The default implementaion of this function simply * calls drawLine repeatedly to draw the specified shape. This may * be very inefficent on certain paint devices and should be * reimplemented in such cases. * * @param point1 the first of the four corners of the quadrilateral. * @param point2 the second of the four corners of the quadrilateral. * @param point3 the third of the four corners of the quadrilateral. * @param point4 the last of the four corners of the quadrilateral. * @param lineWidth the thickness of the line the quadrilateral will be drawn with. */ virtual void drawQuadrilateral(const Eigen::Vector3d & point1, const Eigen::Vector3d & point2, const Eigen::Vector3d & point3, const Eigen::Vector3d & point4, double lineWidth); /** * Draws a closed line loop connecting each of the points in \a points, * * @warning The default implementaion of this function simply * calls drawLine repeatedly to draw the specified shape. This may * be very inefficent on certain paint devices and should be * reimplemented in such cases. * * @param points A list of consecutive points defining the line loop * @param lineWidth the thickness of the line the pentagon will be drawn with. */ virtual void drawLineLoop(const QList & points, const double lineWidth); /** * Draws a continuous mesh of triangles. * @param mesh the mesh to be drawn. * @param mode the mode to use. 0 = filled, 1 = lines and 2 = points. */ virtual void drawMesh(const Mesh & mesh, int mode = 0) = 0; /** * Draws a continuous mesh of triangles and respects the colors stored. * @param mesh the mesh to be drawn. * @param mode the mode to use. 0 = filled, 1 = lines and 2 = points. */ virtual void drawColorMesh(const Mesh & mesh, int mode = 0) = 0; /** * Draws text at a given window position, on top of the scene. * @note Calls to drawText methods must be enclosed between begin() and end(). * @note Text is rendered as a transparent object, and should therefore be * rendered after the opaque objects. * @param x,y the window coordinates of the top-left corner of the text to * render, (0, 0) is the top-left corner of the window. * @param string the string to render. All character encodings are allowed * but superposed characters are not supported yet. For accented letters, * use a character giving the whole accented letter, not a separate * character for the accent. * @sa begin(), drawText(const Eigen::Vector3d &, const QString &) const, * drawText(const QPoint &, const QString &) const */ virtual int drawText(int x, int y, const QString &string) = 0; /** * Draws text at a given window position, on top of the scene. * @note Calls to drawText methods must be enclosed between begin() and endText(). * @note Text is rendered as a transparent object, and should therefore be * rendered after the opaque objects. * @param pos the window coordinates of the top-left corner of the text to * render, (0, 0) is the top-left corner of the window. * @param string the string to render. All character encodings are allowed * but superposed characters are not supported yet. For accented letters, * use a character giving the whole accented letter, not a separate * character for the accent. * @sa begin(), drawText(const Eigen::Vector3d &, const QString &) const, * drawText(int, int, const QString &) const */ virtual int drawText(const QPoint& pos, const QString &string) = 0; /** * Draws text at a given scene position, inside the scene. * @note Calls to drawText methods must be enclosed between begin() and endText(). * @note Text is rendered as a transparent object, and should therefore be * rendered after the opaque objects. * @param pos the scene coordinates of the top-left corner of the text to * render. * @param string The string to render. All character encodings are allowed * but superposed characters are not supported yet. For accented letters, * use a character giving the whole accented letter, not a separate * character for the accent. * @sa begin(), drawText(const QPoint&, const QString &) const, * drawText(int, int, const QString &) const */ virtual int drawText(const Eigen::Vector3d & pos, const QString &string) = 0; /** * Draws text at a given scene position, inside the scene, using given font * @param pos the scene coordinates of the top-left corner of the text to * render. * @param string The string to render. All character encodings are allowed * but superposed characters are not supported yet. For accented letters, * use a character giving the whole accented letter, not a separate * character for the accent. * @param font The font to use for rendering * @todo make it pure virtual in 2.0 * @sa begin(), drawText(const QPoint&, const QString &) const, * drawText(int, int, const QString &) const */ virtual int drawText(const Eigen::Vector3d & /*pos*/, const QString & /*string*/, const QFont & /*font*/) { return 0; } /** * Placeholder to draw a cube. * @param corner1 First corner of the cube. * @param corner2 Second corner of the cube. * @todo Implement this primitive. */ virtual void drawBox(const Eigen::Vector3d &corner1, const Eigen::Vector3d &corner2) = 0; /** * @overload * * Draws the outline of a parallelpiped at \a offset with three * vectors \a v1, \a v2, and \a v3 defining the edges. * * @verbatim 6------8 c1 = origin /: /| c2 = origin + v1 / : / | c3 = origin + v2 / 4---/--7 c4 = origin + v3 / / / / c5 = origin + v1 + v2 3------5 / c6 = origin + v2 + v3 | / | / c7 = origin + v1 + v3 |/ |/ c8 = origin + v1 + v2 + v3 1------2 @endverbatim * * @param offset Corner of the box. * @param v1 Edge of box, pointing relative to \a offset. * @param v2 Edge of box, pointing relative to \a offset. * @param v3 Edge of box, pointing relative to \a offset. * @param linewidth The width of the line. */ virtual void drawBoxEdges(const Eigen::Vector3d &offset, const Eigen::Vector3d &v1, const Eigen::Vector3d &v2, const Eigen::Vector3d &v3, const double linewidth); /** * Draws the outline of a box with the given corners. * @verbatim 6------8 /: /| / : / | / 4---/--7 / / / / 3------5 / | / | / |/ |/ 1------2 @endverbatim * * @warning The default implementaion of this function simply * calls drawLine repeatedly to draw the specified shape. This may * be very inefficent on certain paint devices and should be * reimplemented in such cases. * * @param c1 Corner * @param c2 Corner * @param c3 Corner * @param c4 Corner * @param c5 Corner * @param c6 Corner * @param c7 Corner * @param c8 Corner * @param linewidth The width of the line. */ virtual void drawBoxEdges(const Eigen::Vector3d &c1, const Eigen::Vector3d &c2, const Eigen::Vector3d &c3, const Eigen::Vector3d &c4, const Eigen::Vector3d &c5, const Eigen::Vector3d &c6, const Eigen::Vector3d &c7, const Eigen::Vector3d &c8, const double linewidth); /** * Placeholder to draw a torus. * @param pos Position of the center of the torus. * @param majorRadius Major radius of the torus. * @param minorRadius Minor radius of the torus. * @todo Implement this primitive. */ virtual void drawTorus(const Eigen::Vector3d &pos, double majorRadius, double minorRadius) = 0; /** * Placeholder to draw an ellipsoid. * @param pos Position of the center of the ellipsoid. * @param matrix Linear transformation matrix for scaling and rotation. * @todo Implement this primitive. */ virtual void drawEllipsoid(const Eigen::Vector3d &position, const Eigen::Matrix3d &matrix) = 0; /** * Other primitives we may want * Disc - flat circular disc with center, normal and radius. * Quadrics and quartics? * Parametric surface */ }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/config.h.in0000644000175000001440000000274112250371054017633 0ustar marcususers/********************************************************************** config.h - This file is automatically generated by the build script. Copyright (C) 2006 by Donald E. Curtis Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef AVOCONFIG_H #define AVOCONFIG_H #define INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@" #define INSTALL_LIB_DIR "lib@LIB_SUFFIX@" #define INSTALL_PLUGIN_DIR "avogadro@Plugin_Version@" #define SCM_REVISION "@SCM_REVISION@" #define VERSION "@Avogadro_VERSION_FULL@" #define THREADED_GL @THREADED_GL@ #cmakedefine EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API #endif // AVOCONFIG_H avogadro-1.1.1/libavogadro/src/textmatrixeditor.h0000644000175000001440000000660112250371054021400 0ustar marcususers/********************************************************************** TextMatrixEditor - Text editor that edits 3x3 matrices Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef TEXTMATRIXEDITOR_H #define TEXTMATRIXEDITOR_H #include // For A_EXPORT #include #include class QRegExp; namespace Avogadro { /** * @class TextMatrixEditor textmatrixeditor.h * @brief Widget to edit 3x3 matrices in plain text * @author David C. Lonie * * TextMatrixEditor is a QTextEdit that displays and allows editing of a 3x3 * matrix as plain text. Input is validated with each keystroke, and the text * turns red if the input is invalid. The matrix can be set/get with matrix() * and setMatrix(). The delimiters used to separate columns can be set and * accessed through the pointer returned by delimiters(). The default * delimiter regexp is * QRegExp("\\s+|,|;|\\||\\[|\\]|\\{|\\}|\\(|\\)|\\&|/|<|>"). resetMatrix() * will replace the text with the last known good matrix. */ class A_EXPORT TextMatrixEditor : public QTextEdit { Q_OBJECT public: //! Constructor explicit TextMatrixEditor(QWidget *parent = 0); //! Destructor virtual ~TextMatrixEditor(); //! @return Allowed column separators. See class definition for default. QRegExp * delimiters() {return this->m_delimiters;} //! @return Allowed column separators. See class definition for default const QRegExp * delimiters() const {return this->m_delimiters;} //! @return The current matrix Eigen::Matrix3d matrix() const; signals: //! Emitted when the text cannot be parsed into a matrix void isInvalid(); //! Emitted when the text has been parsed into a matrix void isValid(); public slots: //! Set the matrix. This will update the text. void setMatrix(const Eigen::Matrix3d &mat); //! Reset the text to the last known good matrix. void resetMatrix(); protected slots: /** * Check if input can be parsed. Sets m_matrix, emits isValid(), and returns * true if so. Otherwise emits isInvalid() and returns false. */ bool validate(); //! Turn the text red. void markAsInvalid(); //! Reset the text appearance. void markAsValid(); protected: //! Stores the text properties while invalid. QTextCharFormat *m_charFormat; //! Acceptable column separators. See class definition for default. QRegExp *m_delimiters; //! Stores the current (or last known good) matrix. Eigen::Matrix3d m_matrix; }; } // namespace Avogadro #endif // TEXTMATRIXEDITOR_H avogadro-1.1.1/libavogadro/src/extensions/0000755000175000001440000000000012250371054020003 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/forcefielddialog.cpp0000644000175000001440000000631512250371054023776 0ustar marcususers/********************************************************************** ForceFieldDialog - Dialog for force field settings Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "forcefielddialog.h" #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { ForceFieldDialog::ForceFieldDialog( QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { // qDebug() << "ForceFieldDialog::ForceFieldDialog()" << endl; ui.setupUi(this); std::vector forcefieldList; OBPlugin::ListAsVector("forcefields", "ids", forcefieldList); ui.ForceFieldComboBox->clear(); for (unsigned int i = 0; i < forcefieldList.size(); ++i) ui.ForceFieldComboBox->addItem(forcefieldList[i].c_str()); m_forceFieldID = ui.ForceFieldComboBox->findText("MMFF94"); ui.ForceFieldComboBox->setCurrentIndex(m_forceFieldID); m_nSteps = 500; // a reasonable starting point (not too much time) ui.StepsSpinBox->setValue(m_nSteps); m_algorithm = 0; // steepest descent ui.AlgorithmComboBox->setCurrentIndex(m_algorithm); m_convergence = 7; ui.ConvergenceSpinBox->setValue(m_convergence); } ForceFieldDialog::~ForceFieldDialog() { // qDebug() << "ForceFieldDialog::~ForceFieldDialog()" << endl; } void ForceFieldDialog::accept() { // qDebug() << "ForceFieldDialog::accept()"; qDebug() << "Force Field: " << ui.ForceFieldComboBox->currentIndex(); qDebug() << "Nymber of steps: " << ui.StepsSpinBox->value(); qDebug() << "Algorithm: " << ui.AlgorithmComboBox->currentIndex(); m_forceFieldID = ui.ForceFieldComboBox->currentIndex(); m_nSteps = ui.StepsSpinBox->value(); m_algorithm = ui.AlgorithmComboBox->currentIndex(); m_convergence = ui.ConvergenceSpinBox->value(); hide(); } void ForceFieldDialog::reject() { // qDebug() << "ForceFieldDialog::reject()" << endl; ui.ForceFieldComboBox->setCurrentIndex(m_forceFieldID); ui.StepsSpinBox->setValue(m_nSteps); ui.AlgorithmComboBox->setCurrentIndex(m_algorithm); ui.ConvergenceSpinBox->setValue(m_convergence); } int ForceFieldDialog::forceFieldID() { return m_forceFieldID; } int ForceFieldDialog::nSteps() { return m_nSteps; } int ForceFieldDialog::algorithm() { return m_algorithm; } int ForceFieldDialog::convergence() { return m_convergence; } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/0000755000175000001440000000000012250371054022555 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessukinputdialog.h0000644000175000001440000000612612250371054027012 0ustar marcususers/********************************************************************** GAMESSUKInputDialog - Dialog for generating GAMESS-UK input decks Copyright (C) 2010 Jens Thomas Copyright (C) 2008-2009 Marcus D. Hanwell Copyright (C) 2009 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef GAMESSUKINPUTDIALOG_H #define GAMESSUKINPUTDIALOG_H #include "inputdialog.h" #include "ui_gamessukinputdialog.h" namespace Avogadro { class Molecule; class GAMESSUKInputDialog : public InputDialog { Q_OBJECT public: explicit GAMESSUKInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~GAMESSUKInputDialog(); void setMolecule(Molecule *molecule); void readSettings(QSettings&); void writeSettings(QSettings&) const; enum calculationType{SP, OPT, TSS, FREQ}; enum theoryType{RHF, DFT, MP2}; enum basisType{STO3G, p321G, p631G, p631Gs, ccpVDZ, ccpVTZ}; enum dftFunctionalType{SVWN, BLYP, B3LYP, B97, HCTH, FT97}; enum coordType{CARTESIAN, ZMATRIX}; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::GAMESSUKInputDialog ui; // Molecule* m_molecule; // Internal data structure for the calculation //QString m_title; calculationType m_calculationType; theoryType m_theoryType; basisType m_basisType; dftFunctionalType m_dftFunctionalType; bool m_direct; coordType m_coordType; QString m_output; bool m_dirty; bool m_warned; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getRunType(calculationType t); QString getScfType(theoryType t); QString getBasisType(basisType t); // Enable/disable form elements void deckDirty(bool); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); void setTitle(); void setCalculation(int); void setTheory(int); void setBasis(int); void setDftFunctional(int); void setMultiplicity(int); void setCharge(int); void setDirect(int); void setCoords(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/teracheminputdialog.h0000644000175000001440000000625712250371054026770 0ustar marcususers/********************************************************************** TeraChemInputDialog - Dialog for generating TeraChem input decks Copyright (C) 2012 Albert DeFusco copied from qmcheminputdialog.h This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef TERACHEMINPUTDIALOG_H #define TERACHEMINPUTDIALOG_H #include "inputdialog.h" #include "ui_teracheminputdialog.h" namespace Avogadro { class Molecule; class TeraChemInputDialog : public InputDialog { Q_OBJECT public: explicit TeraChemInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~TeraChemInputDialog(); void setMolecule(Molecule *molecule); void readSettings(QSettings&); void writeSettings(QSettings&) const; enum calculationType{SP, GRAD, OPT}; enum theoryType{HF, BLYP, B3LYP, B3LYP1, B3LYP5, PBE, REVPBE}; enum basisType{STO3G, B321G, B631Gd, B631Gdp, B631plusGd, B6311Gd, ccpVDZ}; enum coordType{PDB, XYZ}; enum dispType{NO, YES, D2, D3}; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::TeraChemInputDialog ui; //Molecule* m_molecule; // Internal data structure for the calculation //QString m_title; calculationType m_calculationType; theoryType m_theoryType; basisType m_basisType; coordType m_coordType; dispType m_dispType; //int m_multiplicity; //int m_charge; QString m_output; bool m_unrestricted; bool m_dirty; bool m_warned; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getCalculationType(calculationType t); QString getTheoryType(theoryType t); QString getBasisType(basisType t); QString getCoordType(coordType t); QString getDispType(dispType t); // Enable/disable form elements void deckDirty(bool); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); void setTitle(); void setCalculation(int); void setTheory(int); void setBasis(int); void setMultiplicity(int); void setCharge(int); void setUnrestricted(bool); void setCoordType(int); void setDispType(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/qcheminputdialog.ui0000644000175000001440000003363312250371054026461 0ustar marcususers QChemInputDialog 0 0 621 471 0 0 Q-Chem Input QLayout::SetFixedSize Title: titleLine Title Calculation: calculationCombo 1 Single Point Energy Geometry Optimization Frequencies Qt::Horizontal 18 27 Qt::Horizontal 58 26 Theory: theoryCombo false 2 HF MP2 B3LYP B3LYP5 EDF1 M06-2X CCSD Qt::Horizontal 58 27 Basis: basisCombo 2 STO-3G 3-21G 6-31G(d) 6-31G(d,p) 6-31+G(d) 6-311G(d) cc-pVDZ cc-pVTZ LANL2DZ LACVP Qt::Horizontal 58 26 Charge: chargeSpin -99 0 Qt::Horizontal 58 27 Multiplicity: multiplicitySpin 1 1 Qt::Horizontal 58 26 Format: coordCombo true 0 Cartesian Z-matrix Z-matrix (compact) Qt::Horizontal 18 27 Qt::Horizontal 18 26 0 0 Hide Preview true false false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Compute... Generate... Close titleLine calculationCombo theoryCombo basisCombo chargeSpin multiplicitySpin coordCombo moreButton previewText generateButton closeButton resetButton enableFormButton closeButton clicked() QChemInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gaussianinputdialog.h0000644000175000001440000000730112250371054027001 0ustar marcususers/********************************************************************** GaussianInputDialog - Dialog for generating Gaussian input decks Copyright (C) 2008-2009 Marcus D. Hanwell Copyright (C) 2008 Michael Banck This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef GAUSSIANINPUTDIALOG_H #define GAUSSIANINPUTDIALOG_H #include #include #include "inputdialog.h" #include "ui_gaussianinputdialog.h" namespace Avogadro { class Molecule; class GaussianInputDialog : public InputDialog { Q_OBJECT public: explicit GaussianInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~GaussianInputDialog(); void setMolecule(Molecule *molecule); enum calculationType{SP, OPT, FREQ}; enum theoryType{AM1, PM3, RHF, B3LYP, MP2, CCSD}; enum basisType{STO3G, B321G, B631Gd, B631Gdp, LANL2DZ}; enum coordType{CARTESIAN, ZMATRIX, ZMATRIX_COMPACT}; /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings); QString pathToG03() const; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); QString saveInputFile(QString inputDeck, QString fileType, QString ext); private: Ui::GaussianInputDialog ui; // Internal data structure for the calculation // QString m_title; calculationType m_calculationType; theoryType m_theoryType; basisType m_basisType; // int m_multiplicity; // int m_charge; int m_procs; QString m_output; bool m_chk; coordType m_coordType; bool m_dirty; bool m_warned; QProcess *m_process; QProgressDialog *m_progress; QString m_inputFile; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getCalculationType(calculationType t); QString getTheoryType(theoryType t); QString getBasisType(basisType t); // Enable/disable form elements void deckDirty(bool); // Q_SIGNALS: // void readOutput(const QString outputFileName); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void computeClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); void setTitle(); void setCalculation(int); void setTheory(int); void setBasis(int); void setMultiplicity(int); void setCharge(int); void setProcs(int); void setOutput(int); void setChk(int); void setCoords(int); void finished(int); void stopProcess(); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessextension.cpp0000644000175000001440000004351712250371054026507 0ustar marcususers/********************************************************************** GAMESS - GAMESS Input Deck Plugin for Avogadro Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "gamessextension.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { enum GamessExtensionIndex { InputDeckAction = 0, EFPAction, QMAction }; GamessExtension::GamessExtension( QObject *parent ) : Extension( parent ), m_inputDialog( NULL ), m_inputData( new GamessInputData() ), m_gamessEfpDock( 0 ), m_efpModel( new QStandardItemModel() ), m_molecule(0), m_efpDialog( 0 ), m_qmDialog( 0 ) { QAction *action = new QAction( this ); action->setText( tr("Input Generator..." )); m_actions.append( action ); action->setData( InputDeckAction ); action = new QAction( this ); action->setText( tr("EFP Selection...", "Selection to be used as an Effective Fragment Potential in calculations" )); m_actions.append( action ); action->setData( EFPAction ); action = new QAction( this ); action->setText( tr("QM Selection...", "Selection to be used for Quantum Mechanical calculations" )); m_actions.append( action ); action->setData( QMAction ); } GamessExtension::~GamessExtension() { if(m_inputDialog) { m_inputDialog->close(); m_inputDialog->deleteLater(); } } QList GamessExtension::actions() const { return m_actions; } QString GamessExtension::menuPath(QAction *) const { return tr("E&xtensions") + '>' + tr("&GAMESS"); } QDockWidget * GamessExtension::dockWidget() { if ( !m_gamessEfpDock ) { m_gamessEfpDock = new QDockWidget( tr( "GAMESS EFP Information" ) ); m_gamessEfpDock->setObjectName("gamessEfpDock"); QWidget *widget = new QWidget( m_gamessEfpDock ); QVBoxLayout *layout = new QVBoxLayout(); m_efpView = new QTreeView(); m_efpView->header()->setVisible( false ); layout->addWidget( m_efpView ); m_efpView->setModel( m_efpModel ); m_efpView->setSelectionMode(QAbstractItemView::ExtendedSelection); connect(m_efpView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), this, SLOT(efpViewSelectionChanged(QItemSelection, QItemSelection))); m_efpButton = new QPushButton(); m_efpButton->setText(tr("Delete")); m_efpButton->setDisabled(true); layout->addWidget(m_efpButton); connect(m_efpButton, SIGNAL(pressed()), this, SLOT(efpButtonPressed())); widget->setLayout( layout ); m_gamessEfpDock->setWidget( widget ); m_gamessEfpDock->setVisible( false ); connect( m_gamessEfpDock, SIGNAL( destroyed() ), this, SLOT( dockWidgetDestroyed() ) ); } return m_gamessEfpDock; } void GamessExtension::dockWidgetDestroyed() { m_gamessEfpDock = 0; m_efpView = 0; } void GamessExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; // clear the EFP data m_inputData->EFP->RemoveGroups(); m_inputData->SetMolecule( molecule ); connect(molecule, SIGNAL(primitiveRemoved(Primitive *)), this, SLOT(removePrimitive(Primitive *))); } QUndoCommand* GamessExtension::performAction( QAction *action, GLWidget *widget) { int i = action->data().toInt(); switch ( i ) { case InputDeckAction: if ( !m_inputDialog ) { m_inputDialog = new GamessInputDialog( m_inputData ); m_inputDialog->show(); } else { m_inputDialog->setInputData( m_inputData ); m_inputDialog->show(); } break; case EFPAction: if ( !m_efpDialog ) { m_efpDialog = matchesDialog( m_molecule, widget, GamessEfpMatchDialog::EFPType ); m_widgetSelected.insert( widget, widget->selectedPrimitives() ); m_dialogWidgets.insert( m_efpDialog, widget ); m_dialogMolecules.insert( m_efpDialog, m_molecule ); } else { m_efpDialog->show(); m_efpDialog->raise(); } break; case QMAction: if ( !m_qmDialog ) { m_qmDialog = matchesDialog( m_molecule, widget, GamessEfpMatchDialog::QMType ); m_widgetSelected.insert( widget, widget->selectedPrimitives() ); m_dialogWidgets.insert( m_qmDialog, widget ); m_dialogMolecules.insert( m_qmDialog, m_molecule ); } else { m_qmDialog->show(); m_qmDialog->raise(); } break; } return 0; } GamessEfpMatchDialog *GamessExtension::matchesDialog(Molecule *molecule, GLWidget *widget, GamessEfpMatchDialog::Type type) { if ( !widget->selectedPrimitives().size() ) { QMessageBox::information( 0, tr( "No Atoms Selected" ), tr( "You must make a selection!" ) ); return 0; } OBConversion conv; if ( !conv.SetOutFormat( "smi" ) ) { QMessageBox::critical( 0, tr( "SMILES Conversion Unavailable" ), tr( "SMILES Format Conversion Not Available!" ) ); return 0; } m_molecule = molecule; PrimitiveList selectedPrimitives = widget->selectedPrimitives(); Molecule selectedMolecule; foreach(Primitive *p, selectedPrimitives.subList(Primitive::AtomType)) { Atom *selected = static_cast(p); Atom *atom = selectedMolecule.addAtom(selected->id()); *atom = *selected; } // use the atom map to map bonds foreach (Bond *b, m_molecule->bonds()) { // make sure both bonds are in the map (i.e. selected) if (selectedMolecule.atomById(b->beginAtomId()) && selectedMolecule.atomById(b->endAtomId())) { Bond *bond = selectedMolecule.addBond(b->id()); bond->setAtoms(b->beginAtomId(), b->endAtomId(), b->order()); } } // end looping over bonds // get the SMARTS pattern OpenBabel::OBMol obmol = selectedMolecule.OBMol(); string pattern = conv.WriteString( &obmol ); pattern.erase( pattern.find_first_of( " \t\n\r" ) ); OBSmartsPattern sp; sp.Init( pattern ); if (sp.Match(obmol)) { // before we begin we need to see what has already been selected. QVector usedAtoms; for(int parentNum = 0; parentNum < m_efpModel->rowCount(); parentNum++ ) { QStandardItem *parentItem = m_efpModel->item(parentNum); for(int childNum = 0; childNum < parentItem->rowCount(); childNum++ ) { QStandardItem *childItem = parentItem->child(childNum); QVector atoms = childItem->data().value >(); usedAtoms += atoms; } } QStandardItemModel *model = new QStandardItemModel(); QModelIndex selectedIndex; vector< vector > maplist = sp.GetUMapList(); for (vector< vector >::iterator it1 = maplist.begin(); it1 != maplist.end(); ++it1) { QVector matches = QVector::fromStdVector( *it1 ); QString text; bool valid = true; bool first = true; bool selected = false; QVector atomMatches; foreach(int i, matches) { Atom *atom = selectedMolecule.atom(i-1); if(usedAtoms.contains(m_molecule->atomById(atom->id()))) { valid=false; break; } atomMatches.append(m_molecule->atomById(atom->id())); // if this matches our original atom if(!selected && selectedPrimitives.contains(m_molecule->atomById(atom->id()))) { selected = true; } if ( !first ) { text.append( ", " ); } else { first = false; } text.append( QString::number( i ) ); foreach (unsigned long ai, atom->neighbors()) { Atom *a = m_molecule->atom(ai); // all connected atoms must also be in our match // see if each neighbor is a hydrogen or another match if ( a->isHydrogen() ) { if ( !first ) { text.append( ", " ); } int idx = m_molecule->atomById(a->id())->index(); text.append(QString::number(idx)); atomMatches.append((m_molecule->atomById(a->id()))); } else if (!matches.contains(selectedMolecule.atomById(a->id())->index()+1)) { valid = false; break; } } if ( !valid ) { break; } } if ( valid ) { QStandardItem *item = new QStandardItem(); item->setText( text ); item->setEditable( false ); item->setData( qVariantFromValue( atomMatches ) ); model->appendRow( item ); if(!selectedIndex.isValid() && selected) { selectedIndex = model->indexFromItem(item); } } } GamessEfpMatchDialog *efpDialog = new GamessEfpMatchDialog( model, type, widget ); efpDialog->select( selectedIndex ); efpDialog->setAttribute( Qt::WA_DeleteOnClose ); connect( efpDialog, SIGNAL( accepted( GamessEfpMatchDialog::Type, QString, QList > ) ), this, SLOT( efpWidgetAccepted( GamessEfpMatchDialog::Type, QString, QList > ) ) ); connect( efpDialog, SIGNAL( finished(int) ), this, SLOT(efpWidgetDone() ) ); connect( efpDialog, SIGNAL( selectionChanged( QList > ) ), this, SLOT( efpWidgetSelected( QList > ) ) ); efpDialog->show(); return efpDialog; } return 0; } void GamessExtension::efpButtonPressed() { QModelIndexList selectedIndexes = m_efpView->selectionModel()->selectedRows(); qSort(selectedIndexes.begin(), selectedIndexes.end(), qGreater()); foreach(QModelIndex index, selectedIndexes) { QModelIndex parent = index.parent(); if(!parent.isValid()) { for(int i = 0; irowCount(index); i++) { QModelIndex child = m_efpModel->index(i,0,index); QVector atoms = child.data(Qt::UserRole +1).value >(); Atom *atom = atoms.first(); m_inputData->EFP->RemoveGroups(atom); } m_efpModel->removeRow(index.row(), parent); } } selectedIndexes = m_efpView->selectionModel()->selectedRows(); qSort(selectedIndexes.begin(), selectedIndexes.end(), qGreater()); foreach(QModelIndex index, selectedIndexes) { QModelIndex parent = index.parent(); if(parent.isValid()) { QVector atoms = index.data(Qt::UserRole +1).value >(); Atom *atom = atoms.first(); m_inputData->EFP->RemoveGroups(atom); m_efpModel->removeRow(index.row(), parent); if(m_efpModel->rowCount(parent) == 0) { m_efpModel->removeRow(parent.row()); } } } if(m_inputDialog) { m_inputDialog->updatePreviewText(); } } void GamessExtension::efpViewSelectionChanged( const QItemSelection &, const QItemSelection & ) { QModelIndexList selectedIndexes = m_efpView->selectionModel()->selectedRows(); QList primitives; bool enable = false; foreach(QModelIndex index, selectedIndexes) { enable = true; if(index.parent().isValid()) { QVector atoms = index.data(Qt::UserRole +1).value >(); foreach(Atom *atom, atoms) { primitives.append(atom); } } else { int childCount = m_efpModel->rowCount(index); for(int i = 0; iindex(i,0,index); QVector atoms = child.data(Qt::UserRole +1).value >(); foreach(Atom *atom, atoms) { primitives.append(atom); } } } } GLWidget *widget = GLWidget::current(); if(widget) { widget->clearSelected(); widget->setSelected( primitives, true ); widget->update(); } m_efpButton->setEnabled(enable); } void GamessExtension::efpWidgetSelected( const QList > &groups ) { GamessEfpMatchDialog *dialog = qobject_cast( sender() ); GLWidget *widget = m_dialogWidgets.value( dialog ); QList primitives; foreach( QVector group, groups ) { foreach( Atom *atom, group ) { primitives.append( atom ); } } widget->clearSelected(); widget->setSelected( primitives, true ); widget->update(); } void GamessExtension::efpWidgetAccepted( const GamessEfpMatchDialog::Type &type, const QString &name, const QList > &groups ) { QString groupName = name; if ( !groupName.size() ) { groupName = tr( "Group Name" ); } QList newItems; foreach( QVector group, groups ) { QString groupString; bool first = true; foreach( Atom *atom, group ) { if ( !first ) { groupString.append( ", " ); } else { first = false; } groupString.append( QString::number( atom->index()+1 ) ); } QStandardItem *item = new QStandardItem(); item->setData( qVariantFromValue( group ) ); item->setText( groupString ); GamessEFPGroup * efpGroup = new GamessEFPGroup(); efpGroup->name = groupName.toStdString(); efpGroup->type = type ? GamessEFPGroup::QMType : GamessEFPGroup::EFPType ; efpGroup->atoms = group.toStdVector(); m_inputData->EFP->AddGroup(efpGroup); newItems.append(item); } QStandardItem *rootItem = 0; // check for preexisting group int rowCount = m_efpModel->rowCount(); for(int i = 0; i < rowCount; i++) { QStandardItem *item = m_efpModel->item(i); if(item->text() == groupName) { rootItem = item; break; } } // if we have new items and there is no previous root item // we must create one if(newItems.size() && !rootItem) { rootItem = new QStandardItem(groupName); QString typeName = tr(" ("); typeName += type ? tr("qm") : tr("efp"); typeName += tr(")"); QStandardItem *typeItem = new QStandardItem(typeName); QList row; row.append(rootItem); row.append(typeItem); m_efpModel->appendRow( row ); } foreach(QStandardItem *item, newItems) { rootItem->appendRow(item); QModelIndex index = item->index(); m_efpView->setFirstColumnSpanned(index.row(), index.parent(), true); } if ( m_gamessEfpDock ) { m_gamessEfpDock->show(); } } void GamessExtension::efpWidgetDone() { GamessEfpMatchDialog *dialog = qobject_cast( sender() ); GLWidget *widget = m_dialogWidgets.value(dialog); // qDebug() << m_widgetSelected.value(widget); widget->clearSelected(); widget->setSelected( m_widgetSelected.value( widget ), true ); m_widgetSelected.remove(widget); m_dialogWidgets.remove(dialog); m_dialogMolecules.remove(dialog); // delete on close is set! if(dialog == m_efpDialog) { m_efpDialog = 0; } if(dialog == m_qmDialog) { m_qmDialog = 0; } } void GamessExtension::removePrimitive(Primitive *primitive) { if(primitive->type() == Primitive::AtomType) { m_inputData->EFP->RemoveGroups(static_cast(primitive)); } for(int parentNum = 0; parentNum < m_efpModel->rowCount(); ) { QStandardItem *parentItem = m_efpModel->item(parentNum); bool matched = false; for(int childNum = 0; childNum < parentItem->rowCount(); ) { QStandardItem *childItem = parentItem->child(childNum); QVector atoms = childItem->data().value >(); QString text; bool first = true; foreach(Atom *atom, atoms) { if ( !first ) { text.append( ", " ); } else { first = false; } text.append( QString::number( atom->index()+1 ) ); if(atom == primitive) { parentItem->removeRow(childNum); matched = true; } } if(!matched) { childItem->setText(text); childNum++; } else { matched = false; } } if(parentItem->rowCount() == 0) { m_efpModel->removeRow(parentNum); } else { parentNum++; } } } } Q_EXPORT_PLUGIN2(gamessextension, Avogadro::GamessExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessefpmatchdialog.h0000644000175000001440000000460512250371054027102 0ustar marcususers/********************************************************************** gamessefpmatchdialog - Class Description Copyright (C) 2007 <> This file is part of the $PROJECT$. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef AVOGADROGAMESSEFPMATCHDIALOG_H #define AVOGADROGAMESSEFPMATCHDIALOG_H #include #include #include #include "ui_gamessefpmatchdialog.h" namespace Avogadro { /** @author */ class GamessEfpMatchDialog : public QDialog { Q_OBJECT public: enum Type { EFPType = 0, QMType }; explicit GamessEfpMatchDialog(QAbstractItemModel *model, Type = EFPType, QWidget *parent = 0, Qt::WindowFlags f = 0); ~GamessEfpMatchDialog(); QString groupName() const; QModelIndexList selectedIndexes() const; Molecule *molecule() const; Type type() const; private: Ui::GamessEfpMatchDialog ui; Molecule *m_molecule; GLWidget *m_widget; Type m_type; public Q_SLOTS: void accept(); void reject(); void select(const QModelIndex & index, QItemSelectionModel::SelectionFlags command = QItemSelectionModel::Select); private Q_SLOTS: void efpSelected( const QItemSelection &selected, const QItemSelection &deselected ); Q_SIGNALS: void selectionChanged(const QList > &groups); void accepted(const GamessEfpMatchDialog::Type &type, const QString &name, const QList > &groups); }; } Q_DECLARE_METATYPE( QVector ) #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/psi4inputdialog.cpp0000644000175000001440000002316512250371054026407 0ustar marcususers/********************************************************************** Psi4InputDialog - Dialog for generating Psi4 input decks Copyright (C) 2012 Matthew R. Kennedy This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "psi4inputdialog.h" #include #include #include #include #include //#include #include #include using namespace OpenBabel; namespace Avogadro { //Defaults for the menus? Psi4InputDialog::Psi4InputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_calculationType(energy), m_theoryType(SAPT0), m_basisType(junDZ), m_output(), m_dirty(false), m_warned(false) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.basisCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBasis(int))); connect(ui.multiplicitySpin, SIGNAL(valueChanged(int)), this, SLOT(setMultiplicity(int))); connect(ui.chargeSpin, SIGNAL(valueChanged(int)), this, SLOT(setCharge(int))); connect(ui.previewText, SIGNAL(cursorPositionChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } Psi4InputDialog::~Psi4InputDialog() { QSettings settings; writeSettings(settings); } void Psi4InputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) disconnect(m_molecule, 0, this, 0); m_molecule = molecule; // Update the preview text whenever primitives are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void Psi4InputDialog::showEvent(QShowEvent *) { updatePreviewText(); } void Psi4InputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("Psi4 Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the Psi4 input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } } void Psi4InputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.calculationCombo->setCurrentIndex(0); ui.theoryCombo->setCurrentIndex(0); ui.basisCombo->setCurrentIndex(0); ui.multiplicitySpin->setValue(0); ui.chargeSpin->setValue(0); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } void Psi4InputDialog::generateClicked() { /*QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if (defaultPath.isEmpty()) defaultPath = QDir::homePath(); QString defaultFileName = defaultPath + '/' + defaultFile.baseName() + ".in"; QString fileName = QFileDialog::getSaveFileName(this, tr("Save Psi4 Input Deck"), defaultFileName, tr("Psi4 Input Deck (*.in)")); QFile file(fileName); // FIXME This really should pop up a warning if the file cannot be opened if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&file); out << ui.previewText->toPlainText();*/ saveInputFile(ui.previewText->toPlainText(), tr("Psi4 Input Deck"), QString("in")); } void Psi4InputDialog::enableFormClicked() { updatePreviewText(); } void Psi4InputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->document()->isModified()) deckDirty(true); } void Psi4InputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void Psi4InputDialog::setCalculation(int n) { m_calculationType = (Psi4InputDialog::calculationType) n; updatePreviewText(); } void Psi4InputDialog::setTheory(int n) { m_theoryType = (Psi4InputDialog::theoryType) n; ui.basisCombo->setEnabled(true); updatePreviewText(); } void Psi4InputDialog::setBasis(int n) { m_basisType = (Psi4InputDialog::basisType) n; updatePreviewText(); } void Psi4InputDialog::setMultiplicity(int n) { m_multiplicity = n; updatePreviewText(); } void Psi4InputDialog::setCharge(int n) { m_charge = n; updatePreviewText(); } QString Psi4InputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); // Begin the job specification mol << "set basis " << getBasisType(m_basisType) << "\n"; mol << "molecule {\n"; mol << m_charge << " " << m_multiplicity << "\n"; QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { mol << qSetFieldWidth(4) << right << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << atom->pos()->x() << atom->pos()->y() << atom->pos()->z() << qSetFieldWidth(0) << '\n'; } mol << "}\n"; if(getTheoryType(m_theoryType) == "sapt0" || getTheoryType(m_theoryType) == "sapt2") mol << "auto_fragments('')\n"; mol << getCalculationType(m_calculationType) << "('" << getTheoryType(m_theoryType) << "')\n"; return buffer; } QString Psi4InputDialog::getCalculationType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case energy: return "energy"; case optimize: return "optimize"; case frequencies: return "frequencies"; default: return "energy"; } } QString Psi4InputDialog::getTheoryType(theoryType t) { // Translate the enum to text for the output generation switch (t) { case SCF: return "scf"; case SAPT0: return "sapt0"; case SAPT2: return "sapt2"; case B3LYPD: return "B3LYP-D"; case M052X: return "m05-2x"; case B97D: return "B97-D"; case MP2: return "MP2"; case CCSD: return "CCSD"; case CCSDT: return "CCSD(T)"; default: return "sapt0"; } } QString Psi4InputDialog::getBasisType(basisType t) { // Translate the enum to text for the output generation switch (t) { case STO3G: return " STO-3G"; case junDZ: return " jun-cc-pVDZ"; case ccpVDZ: return " cc-pVDZ"; case augccpVDZ: return " aug-cc-pVDZ"; case ccpVTZ: return " cc-pVTZ"; default: return " jun-cc-pVDZ"; } } void Psi4InputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.basisCombo->setEnabled(!dirty); ui.multiplicitySpin->setEnabled(!dirty); ui.chargeSpin->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } void Psi4InputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("psi4/savepath").toString(); } void Psi4InputDialog::writeSettings(QSettings& settings) const { settings.setValue("psi4/savepath", m_savePath); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/mopacinputdialog.h0000644000175000001440000000664212250371054026275 0ustar marcususers/********************************************************************** MOPACInputDialog - Dialog for generating MOPAC input decks Copyright (C) 2009 Geoffrey Hutchison Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef MOPACINPUTDIALOG_H #define MOPACINPUTDIALOG_H #include "inputdialog.h" #include #include #include #include "ui_mopacinputdialog.h" namespace Avogadro { class Molecule; class MOPACInputDialog : public InputDialog { Q_OBJECT public: explicit MOPACInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~MOPACInputDialog(); void setMolecule(Molecule *molecule); enum calculationType{SP, OPT, FREQ}; enum theoryType{AM1, MNDO, MNDOD, PM3, PM6, RM1}; enum coordType{CARTESIAN, ZMATRIX}; /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings); protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::MOPACInputDialog ui; // Molecule* m_molecule; // Internal data structure for the calculation // QString m_title; calculationType m_calculationType; theoryType m_theoryType; //int m_multiplicity; //int m_charge; coordType m_coordType; bool m_dirty; bool m_warned; bool m_previewVisible; QProcess *m_process; QProgressDialog *m_progress; QString m_inputFile; //QString saveInputFile(); // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getCalculationType(calculationType t); QString getTheoryType(theoryType t); static const QString mopacPath; // Enable/disable form elements void deckDirty(bool); // Q_SIGNALS: // void readOutput(const QString outputFileName); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void computeClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); void finished(int); void stopProcess(); void setTitle(); void setCalculation(int); void setTheory(int); void setMultiplicity(int); void setCharge(int); void setCoords(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/molproinputdialog.h0000644000175000001440000000606012250371054026500 0ustar marcususers/********************************************************************** MolproInputDialog - Dialog for generating MOLPRO input decks Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef MOLPROINPUTDIALOG_H #define MOLPROINPUTDIALOG_H #include "inputdialog.h" #include "ui_molproinputdialog.h" namespace Avogadro { class Molecule; class MolproInputDialog : public InputDialog { Q_OBJECT public: explicit MolproInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~MolproInputDialog(); void setMolecule(Molecule *molecule); void readSettings(QSettings&); void writeSettings(QSettings&) const; enum calculationType{SP, OPT, FREQ}; enum theoryType{RHF, MP2, B3LYP, CCSD, CCSDT}; enum basisType{STO3G, B321G, B631Gd, B631Gdp, B631plusGd, B6311Gd, ccpVDZ, ccpVTZ, AUGccpVDZ, AUGccpVTZ}; enum coordType{CARTESIAN, ZMATRIX, ZMATRIX_COMPACT}; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::MolproInputDialog ui; // Molecule* m_molecule; // Internal data structure for the calculation // QString m_title; bool m_2009; calculationType m_calculationType; theoryType m_theoryType; basisType m_basisType; //int m_multiplicity; //int m_charge; int m_num_elec; QString m_output; coordType m_coordType; bool m_dirty; bool m_warned; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getCalculationType(calculationType t); QString getWavefunction(void); QString getTheoryType(theoryType t); QString getBasisType(basisType t); // Enable/disable form elements void deckDirty(bool); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); void setTitle(); void setVersion(int); void setCalculation(int); void setTheory(int); void setBasis(int); void setMultiplicity(int); void setCharge(int); void setCoords(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessefpmatchdialog.ui0000644000175000001440000000426512250371054027272 0ustar marcususers GamessEfpMatchDialog Qt::WindowModal 0 0 295 300 EFP Matches true Group Label: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter QAbstractItemView::MultiSelection Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok buttonBox accepted() GamessEfpMatchDialog accept() 248 254 157 274 buttonBox rejected() GamessEfpMatchDialog reject() 316 260 286 274 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessextension.h0000644000175000001440000000656112250371054026152 0ustar marcususers/********************************************************************** GAMESS - GAMESS Input Deck Plugin for Avogadro Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef GAMESSEXTENSION_H #define GAMESSEXTENSION_H #include "gamessinputdialog.h" #include "gamessefpmatchdialog.h" #include #include #include #include #include #include class QStandardItemModel; namespace Avogadro { class GamessExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("GAMESS", tr("GAMESS"), tr("Create input files for the GAMESS quantum chemistry package")) public: //! Constructor GamessExtension(QObject *parent=0); //! Deconstructor virtual ~GamessExtension(); //! Perform Action virtual QList actions() const; /** * @return the menu path for the specified action */ virtual QString menuPath(QAction *action) const; //! GAMESS Dock Widget virtual QDockWidget * dockWidget(); virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); //@} void setMolecule(Molecule *molecule); private: GamessInputDialog *m_inputDialog; GamessInputData *m_inputData; QList m_actions; QDockWidget * m_gamessEfpDock; QTreeView *m_efpView; QPushButton *m_efpButton; QStandardItemModel *m_efpModel; Molecule *m_molecule; GamessEfpMatchDialog *m_efpDialog; GamessEfpMatchDialog *m_qmDialog; QMap m_dialogWidgets; QMap m_dialogMolecules; QMap m_widgetSelected; QMap m_groupNameID; GamessEfpMatchDialog *matchesDialog(Molecule *molecule, GLWidget *widget, GamessEfpMatchDialog::Type type); private Q_SLOTS: void dockWidgetDestroyed(); void efpButtonPressed(); void efpViewSelectionChanged( const QItemSelection & selected, const QItemSelection & deselected ); void efpWidgetAccepted(const GamessEfpMatchDialog::Type &type, const QString &name, const QList > &groups); void efpWidgetSelected(const QList > &groups); void efpWidgetDone(); void removePrimitive(Primitive *primitive); }; class GamessExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(GamessExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessinputdata.cpp0000644000175000001440000021506312250371054026461 0ustar marcususers/* * (c) 2004 Iowa State University * see the LICENSE file in the top level directory */ /* ����������������������������������������� GamessInputData.cpp Class member functions related to GamessInputData Brett Bode - February 1996 Changed InputeFileData uses to BufferFile calls 8-97 */ #include "gamessinputdata.h" #include #include #include #include #include #include #include #include #define GAMESS_BUFF_LEN 180 namespace Avogadro { long LocateKeyWord( const char *Buffer, const char * KeyWord, long length, long bytecount ) { long test=0, pos=-1; while ( !test ) { for ( pos++; (( Buffer[pos] != KeyWord[0] )||( Buffer[pos+1] != KeyWord[1] ) )&&( pos=bytecount ) return -1; if ( Buffer[pos]=='\0' ) return -1; test = 2; while (( Buffer[pos+test] == KeyWord[test] )&&( test96 ) && ( keyword[check]<123 ) ) keyword[check] -= 32; long pos=0; long result = -1; while ( buffer[pos] ) { check = 0; while ((( buffer[pos+check] == keyword[check] )||( buffer[pos+check]-32 == keyword[check] ) )&& ( check < numbyte ) ) check++; if ( check == numbyte ) { result = pos; break; } pos++; } delete [] keyword; return result; } /* FindKeyword */ const char * MemoryUnitToText( const MemoryUnit & mu ) { switch ( mu ) { case wordsUnit: return "words"; case bytesUnit: return "bytes"; case megaWordsUnit: return "Mwords"; case megaBytesUnit: return "MB"; case gigaWordsUnit: return "Gwords"; case gigaBytesUnit: return "GB"; default: return "invalid"; } } bool TextToMemoryUnit( const char * t, MemoryUnit & mu ) { if ( !t || !*t ) return false; for ( int i = ( int ) wordsUnit; i != ( int ) NumberMemoryUnits; ++i ) { if ( strcmp( t, MemoryUnitToText(( MemoryUnit ) i ) ) == 0 ) { mu = ( MemoryUnit ) i; return true; } } return false; } const char * TimeUnitToText( const TimeUnit & tu ) { switch ( tu ) { case secondUnit: return "sec"; case minuteUnit: return "min"; case hourUnit: return "hr"; case dayUnit: return "days"; case weekUnit: return "weeks"; case yearUnit: return "years"; case milleniaUnit: return "millenia"; default: return "invalid"; } } bool TextToTimeUnit( const char * t, TimeUnit & tu ) { if ( !t || !*t ) return false; for ( int i = ( int ) secondUnit; i != ( int ) NumberTimeUnits; ++i ) { if ( strcmp( t, TimeUnitToText(( TimeUnit ) i ) ) == 0 ) { tu = ( TimeUnit ) i; return true; } } return false; } } using namespace Avogadro; //GamessInputData functions //#pragma segment IData GamessInputData::GamessInputData( Molecule *molecule ) : m_molecule( molecule ), Control( new GamessControlGroup ), System( new GamessSystemGroup ), Basis( new GamessBasisGroup ), Data( new GamessDataGroup ), Guess( new GamessGuessGroup ), SCF( new GamessSCFGroup ), MP2( new GamessMP2Group ), Hessian( new GamessHessianGroup ), StatPt( new GamessStatPtGroup ), DFT( new GamessDFTGroup ), EFP( new GamessEFPData ) { //Always create Control, System, Basis, and Data groups // m_molecule = molecule; // Control = new GamessControlGroup; // System = new GamessSystemGroup; // Basis = new GamessBasisGroup; // Data = new GamessDataGroup; // StatPt = new GamessStatPtGroup; // Guess = new GamessGuessGroup; // SCF = NULL; // MP2 = NULL; // Hessian = NULL; // DFT = NULL; } void GamessInputData::SetMolecule( Molecule *molecule ) { m_molecule = molecule; /* FOR_ATOMS_OF_MOL(atom, m_molecule) { OBPairData *efpGroupID = 0; if(efpGroup = atom->GetData( "EFPGroupID" )) { std::string id = efpGroup->GetValue(); std::string name = efpGroup } }*/ } GamessInputData::GamessInputData( GamessInputData *Copy ) { m_molecule = Copy->m_molecule; //Always create Control, System, Basis, and Data groups Control = new GamessControlGroup( Copy->Control ); //Create the new group and copy over the data System = new GamessSystemGroup( Copy->System ); Basis = new GamessBasisGroup( Copy->Basis ); Data = new GamessDataGroup( Copy->Data ); StatPt = new GamessStatPtGroup( Copy->StatPt ); if ( Copy->Guess ) Guess = new GamessGuessGroup( Copy->Guess ); else Guess = new GamessGuessGroup; if ( Copy->SCF ) SCF = new GamessSCFGroup( Copy->SCF ); else SCF = new GamessSCFGroup; if ( Copy->MP2 ) MP2 = new GamessMP2Group( Copy->MP2 ); else MP2 = new GamessMP2Group; if ( Copy->Hessian ) Hessian = new GamessHessianGroup( Copy->Hessian ); else Hessian = new GamessHessianGroup; if ( Copy->DFT ) DFT = new GamessDFTGroup( Copy->DFT ); else DFT = new GamessDFTGroup; EFP = new GamessEFPData(); } GamessInputData::~GamessInputData( void ) { //destructor if ( Control ) delete Control; //simply delete all groups present if ( System ) delete System; if ( Basis ) delete Basis; if ( Data ) delete Data; if ( Guess ) delete Guess; if ( SCF ) delete SCF; if ( MP2 ) delete MP2; if ( Hessian ) delete Hessian; if ( StatPt ) delete StatPt; if ( DFT ) delete DFT; if ( EFP ) delete EFP; } long GamessInputData::GetNumElectrons() const { long numElectrons = 0; if ( m_molecule ) { foreach (Atom *atom, m_molecule->atoms()) { numElectrons += atom->atomicNumber(); } } return numElectrons; } //Prompt for a filename and then write out a valid input file for GAMESS long GamessInputData::WriteInputFile( ostream &buffer ) { buffer << "! File created by the GAMESS Input Deck Generator Plugin for Avogadro" << endl; if ( Basis ) Basis->WriteToFile( buffer, this ); if ( Control ) Control->WriteToFile( buffer, this, GetNumElectrons() ); if ( DFT ) DFT->WriteToFile( buffer, this ); if ( System ) System->WriteToFile( buffer ); if ( Guess ) Guess->WriteToFile( buffer, this ); if ( SCF ) SCF->WriteToFile( buffer, this ); if ( MP2 ) MP2->WriteToFile( buffer, this ); if ( StatPt ) StatPt->WriteToFile( buffer, this ); if ( Hessian ) Hessian->WriteToFile( buffer, this ); if ( Data ) Data->WriteToFile( buffer, this, m_molecule ); // if (Guess) Guess->WriteVecGroup(buffer, molecule); // if(buffer) { // delete buffer; // } return 1; } //#pragma segment EFP //GamessEFPGroup functions GamessEFPData::GamessEFPData() : m_efpCount( 0 ), m_qmCount( 0 ) {} void GamessEFPGroup::GetCenterOfMass( Molecule *molecule, double &x, double &y, double &z ) { Q_UNUSED(molecule); double sum[3]; double mass = 0.0; sum[0] = 0.0; sum[1] = 0.0; sum[2] = 0.0; for ( std::vector::iterator i = atoms.begin(); i != atoms.end(); ++i ) { Atom *atom = *i; double m = atom->OBAtom().GetAtomicMass(); mass += m; sum[0] += m * atom->pos()->x(); sum[1] += m * atom->pos()->y(); sum[2] += m * atom->pos()->z(); } x = sum[0] / mass; y = sum[1] / mass; z = sum[2] / mass; } bool GamessEFPGroup::Contains(Atom *atom) { for ( std::vector::iterator i = atoms.begin(); i != atoms.end(); ++i ) { if(atom == *i) { return true; } } return false; } int GamessEFPData::GetGroupCount() { return m_efpCount + m_qmCount; } int GamessEFPData::GetGroupCount( GamessEFPGroup::Type type ) { if ( type == GamessEFPGroup::EFPType ) { return m_efpCount; } else if ( type == GamessEFPGroup::QMType ) { return m_qmCount; } return 0; } void GamessEFPData::AddGroup( GamessEFPGroup *group ) { m_groups.push_back( group ); if ( group->type == GamessEFPGroup::EFPType ) { m_efpCount++; } else if ( group->type == GamessEFPGroup::QMType ) { m_qmCount++; } } void GamessEFPData::RemoveGroups( Atom *atom ) { // clear if there are none if(!atom) { m_groups.clear(); } std::vector::iterator iter; for ( iter = m_groups.begin(); iter != m_groups.end(); ) { if ( (*iter)->Contains(atom) ) { if( (*iter)->type == GamessEFPGroup::QMType ) { m_qmCount--; } else if ( (*iter)->type == GamessEFPGroup::EFPType ) { m_efpCount--; } delete (*iter); iter = m_groups.erase( (iter) ); } else { // if we remove it automatically increments ++iter; } } } void GamessEFPData::RemoveGroup( GamessEFPGroup *group ) { std::vector::iterator iter; for ( iter = m_groups.begin(); iter != m_groups.end(); ++iter ) { if ( *iter == group ) { iter = m_groups.erase( iter ); } } } //GamessEFPData functions //#pragma segment Control //GamessControlGroup functions GamessControlGroup::GamessControlGroup( void ) { ExeType = NULL; Options=0; InitControlPaneData(); InitProgPaneData(); NPrint=ITol=ICut=0; RunType = Energy; } GamessControlGroup::GamessControlGroup( GamessControlGroup *Copy ) { if ( Copy == NULL ) return; *this = *Copy; ExeType = NULL; if ( Copy->ExeType ) { ExeType = new char[1+strlen( Copy->ExeType )]; if ( ExeType ) strcpy( ExeType, Copy->ExeType ); } } GamessControlGroup::~GamessControlGroup( void ) { if ( ExeType ) delete [] ExeType; } void GamessControlGroup::InitControlPaneData( void ) { if ( ExeType ) { delete [] ExeType; ExeType = NULL; } SCFType=GAMESSDefaultSCFType; MPLevelCIType=MaxIt=Charge=Multiplicity=0; Local=GAMESS_No_Localization; RunType=InvalidRunType; CCType = CC_None; } void GamessControlGroup::InitProgPaneData( void ) { Friend=Friend_None; SetMolPlot( false ); SetPlotOrb( false ); SetAIMPAC( false ); SetRPAC( false ); } GAMESS_SCFType GamessControlGroup::SetSCFType( GAMESS_SCFType NewSCFType ) { if (( NewSCFType >= GAMESSDefaultSCFType )||( NewSCFType= GAMESSDefaultSCFType )&&( SCFType <= GAMESS_ROHF ) ) result = ( MPLevelCIType & 0x0F ); //MrMP2 energies are also available else if (( SCFType==GAMESS_MCSCF )&& ( RunType!=GradientRun )&&( RunType!=HessianRun )&&( RunType!=OptimizeRun )&& ( RunType!=SadPointRun )&&( RunType!=IRCRun )&&( RunType!=GradExtrRun )&&( RunType!=DRCRun ) ) result=( MPLevelCIType & 0x0F ); if ( MPLevelCIType & 0xF0 ) result = -1; //deactivate MP2 when CI is requested if ( GetCCType() != CC_None ) result = -1; return result; } CIRunType GamessControlGroup::SetCIType( CIRunType NewVal ) { MPLevelCIType = ( MPLevelCIType&0x0F ) + ( NewVal<<4 ); return ( CIRunType )( MPLevelCIType & 0xF0 ); } CIRunType GamessControlGroup::GetCIType( void ) const { short result = (( MPLevelCIType & 0xF0 )>>4 ); if ( GetSCFType() == 2 ) result = 0; return ( CIRunType ) result; } TypeOfRun GamessControlGroup::SetRunType( const TypeOfRun & NewRunType ) { if (( NewRunType<=0 )||( NewRunType>NumGAMESSRunTypes ) ) return InvalidRunType; RunType = NewRunType; return RunType; } TypeOfRun GamessControlGroup::SetRunType( const char *RunText ) { TypeOfRun NewType = InvalidRunType; for ( int i=1; i 1 ) result = CC_None; if ( GetCIType() > 0 ) result = CC_None; return result; } short GamessControlGroup::GetExeType( void ) { if (( ExeType==NULL )||( 0<=LocateKeyWord( ExeType, "RUN", 3,3 ) ) ) return 0; //Normal run if ( 0<=LocateKeyWord( ExeType, "CHECK", 5,5 ) ) return 1; if ( 0<=LocateKeyWord( ExeType, "DEBUG", 5,5 ) ) return 2; return 3; } short GamessControlGroup::SetExeType( const char *ExeText ) { if ( ExeText==NULL ) return 0; long nchar = strlen( ExeText ); if ( ExeType ) { delete [] ExeType; ExeType = NULL; } ExeType = new char[nchar+1]; strcpy( ExeType, ExeText ); return nchar; } short GamessControlGroup::SetExeType( short NewType ) { if (( NewType < 0 )||( NewType > 2 ) ) return -1; if ( ExeType ) { delete [] ExeType; ExeType = NULL; } if ( NewType==1 ) { ExeType = new char[6]; strcpy( ExeType, "CHECK" ); } else if ( NewType == 2 ) { ExeType = new char[6]; strcpy( ExeType, "DEBUG" ); } return NewType; } CIRunType GamessControlGroup::SetCIType( const char * CIText ) { CIRunType newType = CI_None; if ( -1=0 ) MaxIt = NewVal; return MaxIt; } GAMESS_Localization GamessControlGroup::SetLocal( GAMESS_Localization NewVal ) { if (( NewVal>=GAMESS_No_Localization )&&( NewVal= Friend_None )&&( NewValue < NumFriendTypes ) ) Friend = NewValue; return ( FriendType )Friend; } FriendType GamessControlGroup::SetFriend( const char * c ) { return SetFriend( TextToFriend( c ) ); } short GamessControlGroup::SetCharge( short NewCharge ) { Charge = NewCharge; return Charge; } short GamessControlGroup::SetMultiplicity( short NewMult ) { Multiplicity = NewMult; return Multiplicity; } bool GamessControlGroup::SetMolPlot( bool State ) { if ( Options & 1 ) Options -= 1; if ( State ) Options += 1; return (( Options & 1 )?true:false ); } bool GamessControlGroup::SetPlotOrb( bool State ) { if ( Options & ( 1<<1 ) ) Options -= ( 1<<1 ); if ( State ) Options += ( 1<<1 ); return (( Options & ( 1<<1 ) )?true:false ); } bool GamessControlGroup::SetAIMPAC( bool State ) { if ( Options & ( 1<<2 ) ) Options -= ( 1<<2 ); if ( State ) Options += ( 1<<2 ); return (( Options & ( 1<<2 ) )?true:false ); } bool GamessControlGroup::SetRPAC( bool State ) { if ( Options & ( 1<<3 ) ) Options -= ( 1<<3 ); if ( State ) Options += ( 1<<3 ); return (( Options & ( 1<<3 ) )?true:false ); } bool GamessControlGroup::SetIntType( bool State ) { if ( Options & ( 1<<5 ) ) Options -= ( 1<<5 ); if ( State ) Options += ( 1<<5 ); return (( Options & ( 1<<5 ) )?true:false ); } bool GamessControlGroup::SetNormF( bool State ) { if ( Options & ( 1<<6 ) ) Options -= ( 1<<6 ); if ( State ) Options += ( 1<<6 ); return (( Options & ( 1<<6 ) )?true:false ); } bool GamessControlGroup::UseDFT( bool State ) { if ( Options & ( 1<<4 ) ) Options -= ( 1<<4 ); if ( State ) Options += ( 1<<4 ); return ( UseDFT() ); } bool GamessControlGroup::UseDFT( void ) const { bool result = (( Options & ( 1<<4 ) )?true:false ); if ( GetSCFType() > 3 ) result = false; if ( GetMPLevel() > 0 ) result = false; if ( GetCIType() > 0 ) result = false; if ( GetCCType() != CC_None ) result = false; return result; } bool GamessControlGroup::SetNormP( bool State ) { if ( Options & ( 1<<7 ) ) Options -= ( 1<<7 ); if ( State ) Options += ( 1<<7 ); return GetNormP(); } void GamessControlGroup::WriteToFile( ostream &File, GamessInputData *IData, long NumElectrons ) { char Out[GAMESS_BUFF_LEN], textVal[GAMESS_BUFF_LEN]; //Punch the group label File << " $CONTRL "; //punch the SCF type and Run type if ( SCFType ) { sprintf( Out,"SCFTYP=%s ",GetSCFTypeText() ); File << Out; } else { //Punch out the default RHF/ROHF wavefunction if ( (NumElectrons + GetCharge()) & 1 ) sprintf( Out, "SCFTYP=ROHF " ); else sprintf( Out, "SCFTYP=RHF " ); File << Out; } if ( RunType ) { sprintf( Out,"RUNTYP=%s ", GetGAMESSRunText( GetRunType() ) ); File << Out; } if (( ExeType )&&( !Friend ) ) { //punch out ExeType if it is other than run sprintf( Out, "EXETYP=%s ", ExeType ); File << Out; } if ( GetMPLevel() > 0 ) { //Write out MP level only if > zero sprintf( Out,"MPLEVL=2 " ); File << Out; } if ( GetCIType() || ( GetSCFType() == 6 ) ) { //punch CIType if CI requested GetCIType( textVal ); sprintf( Out, "CITYP=%s ", textVal ); File << Out; } if ( GetCCType() != CC_None ) { sprintf( Out, "CCTYP=%s ", GetGAMESSCCType( CCType ) ); File << Out; } if ( IData->DFT ) { if ( UseDFT() ) { sprintf( Out, "DFTTYP=%s ", IData->DFT->GetFunctionalText() ); File << Out; } } if ( MaxIt ) { //Punch Maxit if non-default value sprintf( Out, "MAXIT=%d ",MaxIt ); File << Out; } if ( Charge ) { sprintf( Out, "ICHARG=%d ", Charge ); File << Out; } if ( Multiplicity ) { sprintf( Out, "MULT=%d ", Multiplicity ); File << Out; } else if ( NumElectrons & 1 ) { //for odd electron systems punch out a default doublet sprintf( Out, "MULT=2 " ); File << Out; } if ( Local ) { sprintf( Out, "LOCAL=%s ", GetLocalText() ); File << Out; } if ( IData->Basis ) { if ( IData->Basis->GetECPPotential() ) { sprintf( Out, "ECP=%s ",IData->Basis->GetECPPotentialText() ); File << Out; } } if ( IData->Data ) { if ( IData->EFP->GetGroupCount( GamessEFPGroup::EFPType ) > 0 && IData->EFP->GetGroupCount( GamessEFPGroup::QMType ) == 0 ) { sprintf( Out, "COORD=FRAGONLY " ); File << Out; } else if ( IData->Data->GetCoordType() ) { sprintf( Out, "COORD=%s ", IData->Data->GetCoordText() ); File << Out; } if ( IData->Data->GetUnits() ) { sprintf( Out, "UNITS=BOHR " ); File << Out; } if ( IData->Data->GetNumZVar() ) { sprintf( Out, "NZVAR=%d ",IData->Data->GetNumZVar() ); File << Out; } if ( !IData->Data->GetUseSym() ) { sprintf( Out, "NOSYM=1 " ); File << Out; } } if ( Friend ) { //punchs out input to other programs, disables exetype (forces check run) sprintf( Out, "FRIEND=%s ", GetFriendText() ); File << Out; } if ( GetMolPlot() ) { sprintf( Out, "MOLPLT=.TRUE. " ); File << Out; } if ( GetPlotOrb() ) { sprintf( Out, "PLTORB=.TRUE. " ); File << Out; } if (( 1!=GetExeType() )&&( Friend==0 ) ) { if ( GetAIMPAC() ) { sprintf( Out, "AIMPAC=.TRUE. " ); File << Out; } if ( GetRPAC() ) { sprintf( Out, "RPAC=.TRUE. " ); File << Out; } } File << "$END" << endl; } void GamessControlGroup::RevertControlPane( GamessControlGroup *OldData ) { RunType = OldData->RunType; SCFType = OldData->SCFType; SetMPLevel( OldData->GetMPLevel() ); UseDFT( OldData->UseDFT() ); SetCIType( OldData->GetCIType() ); SetCCType( OldData->GetCCType() ); MaxIt = OldData->MaxIt; if ( ExeType ) { delete [] ExeType; ExeType = NULL; } SetExeType( OldData->ExeType ); Local = OldData->Local; Charge = OldData->Charge; Multiplicity = OldData->Multiplicity; } void GamessControlGroup::RevertProgPane( GamessControlGroup *OldData ) { SetMolPlot( OldData->GetMolPlot() ); SetPlotOrb( OldData->GetPlotOrb() ); SetAIMPAC( OldData->GetAIMPAC() ); SetRPAC( OldData->GetRPAC() ); SetFriend( OldData->GetFriend() ); } //#pragma mark GamessSystemGroup //GamessSystemGroup member functions long GamessSystemGroup::SetTimeLimit( long NewTime ) { if ( NewTime >= 0 ) TimeLimit = NewTime; return TimeLimit; } TimeUnit GamessSystemGroup::SetTimeUnits( TimeUnit NewUnits ) { if (( NewUnits >= secondUnit )&&( NewUnits= 0 ) TimeLimit = result; return TimeLimit; } double GamessSystemGroup::SetMemory( double NewMemory ) { if ( NewMemory > 0.0 ) Memory = NewMemory; return Memory; } MemoryUnit GamessSystemGroup::SetMemUnits( MemoryUnit NewUnits ) { if (( NewUnits>=wordsUnit )&&( NewUnits= 0 ) Memory = result; return Memory; } double GamessSystemGroup::SetMemDDI( double NewMemory ) { if ( NewMemory >= 0.0 ) MemDDI = NewMemory; return Memory; } MemoryUnit GamessSystemGroup::SetMemDDIUnits( MemoryUnit NewUnits ) { if (( NewUnits>=megaWordsUnit )&&( NewUnits= 0 ) MemDDI = result; return MemDDI; } char GamessSystemGroup::SetDiag( char NewMethod ) { if (( NewMethod>=0 )&&( NewMethod<4 ) ) KDiag = NewMethod; return KDiag; } bool GamessSystemGroup::SetCoreFlag( bool State ) { if ( Flags & 1 ) Flags --; if ( State ) Flags ++; return GetCoreFlag(); } bool GamessSystemGroup::SetBalanceType( bool Type ) { if ( Flags & 2 ) Flags -= 2; if ( Type ) Flags += 2; return GetBalanceType(); } bool GamessSystemGroup::SetXDR( bool State ) { if ( Flags & 4 ) Flags -= 4; if ( State ) Flags += 4; return GetXDR(); } bool GamessSystemGroup::SetParallel( bool State ) { if ( Flags & 8 ) Flags -= 8; if ( State ) Flags += 8; return GetParallel(); } GamessSystemGroup::GamessSystemGroup( void ) { InitData(); } GamessSystemGroup::GamessSystemGroup( GamessSystemGroup *Copy ) { if ( Copy ) *this=*Copy; } void GamessSystemGroup::InitData( void ) { TimeLimit = 0; Memory = 0.0; MemDDI = 0.0; KDiag = 0; // TimeUnits = minuteUnit; TimeUnits = minuteUnit; // MemUnits = wordsUnit; MemUnits = megaWordsUnit; MemDDIUnits = megaWordsUnit; Flags = 0; } void GamessSystemGroup::WriteToFile( ostream &File ) { char Out[GAMESS_BUFF_LEN]; //Punch the group label if (MemDDI || GetParallel() || KDiag || GetCoreFlag() || GetBalanceType() || GetXDR() || Memory > 0 || TimeLimit > 0) { File << " $SYSTEM "; //Time limit //long test = TimeLimit; //if ( test==0 ) test = 600; if( TimeLimit > 0 ) { sprintf( Out,"TIMLIM=%ld ",TimeLimit ); File << Out; } //Memory if ( Memory ) { sprintf( Out, "MWORDS=%ld ", ( long )Memory ); File << Out; } if ( MemDDI ) { sprintf( Out, "MEMDDI=%ld ", ( long )MemDDI ); File << Out; } //PARALL if ( GetParallel() ) { sprintf( Out, "PARALL=.TRUE. " ); File << Out; } //diag method if ( KDiag ) { sprintf( Out, "KDIAG=%d ", KDiag ); File << Out; } //core flag if ( GetCoreFlag() ) { sprintf( Out, "COREFL=.TRUE. " ); File << Out; } //Balance type if ( GetBalanceType() ) { sprintf( Out, "BALTYP=NXTVAL " ); File << Out; } //XDR if ( GetXDR() ) { sprintf( Out, "XDR=.TRUE. " ); File << Out; } File << "$END" << endl; } } //#pragma mark GamessBasisGroup //GamessBasisGroup member functions GamessBasisGroup::GamessBasisGroup( void ) { InitData(); } GamessBasisGroup::GamessBasisGroup( GamessBasisGroup *Copy ) { if ( Copy ) { *this = *Copy; } } void GamessBasisGroup::InitData( void ) { Split2[0]=Split2[1]=0.0; Split3[0]=Split3[1]=Split3[2]=0.0; Basis=GAMESS_BS_STO; NumGauss=3; NumHeavyFuncs=NumPFuncs=ECPPotential=0; Polar = GAMESS_BS_No_Polarization; Flags = 0; WaterSolvate = false; } const char * GamessBasisGroup::GAMESSBasisSetToText( GAMESS_BasisSet bs ) { switch ( bs ) { case GAMESS_BS_MINI: return "MINI"; case GAMESS_BS_MIDI: return "MIDI"; case GAMESS_BS_STO: return "STO"; case GAMESS_BS_N21: return "N21"; case GAMESS_BS_N31: return "N31"; case GAMESS_BS_N311: return "N311"; case GAMESS_BS_DZV: return "DZV"; case GAMESS_BS_DH: return "DH"; case GAMESS_BS_BC: return "BC"; case GAMESS_BS_TZV: return "TZV"; case GAMESS_BS_MC: return "MC"; case GAMESS_BS_SBK: return "SBK"; case GAMESS_BS_HW: return "HW"; case GAMESS_BS_MNDO: return "MNDO"; case GAMESS_BS_AM1: return "AM1"; case GAMESS_BS_PM3: return "PM3"; default: return "invalid"; } } short GamessBasisGroup::SetBasis( const char *BasisText ) { short NewBasis = -1; for ( int i=GAMESS_BS_None; i16 ) ) return -1; Basis = NewBasis; return Basis; } const char * GamessBasisGroup::GetBasisText( void ) const { short temp = Basis; if ( temp <= 0 ) temp = 1; return GAMESSBasisSetToText(( GAMESS_BasisSet ) temp ); } short GamessBasisGroup::GetBasis( void ) const { return Basis; } short GamessBasisGroup::SetNumGauss( short NewNumGauss ) { if (( NewNumGauss<0 )||( NewNumGauss>6 ) ) return -1; if (( Basis==4 )&&( NewNumGauss!=3 )&&( NewNumGauss!=6 ) ) return -1; if (( Basis==5 )&&( NewNumGauss<4 ) ) return -1; if (( Basis==6 )&&( NewNumGauss!=6 ) ) return -1; NumGauss = NewNumGauss; return NumGauss; } short GamessBasisGroup::GetNumGauss( void ) const { return NumGauss; } short GamessBasisGroup::SetNumDFuncs( short NewNum ) { if ( NewNum > 3 ) return -1; NumHeavyFuncs = NewNum + ( NumHeavyFuncs & 0xF0 ); return ( NumHeavyFuncs & 0x0F ); } short GamessBasisGroup::GetNumDFuncs( void ) const { return ( NumHeavyFuncs & 0x0F ); } short GamessBasisGroup::SetNumFFuncs( short NewNum ) { if ( NewNum > 3 ) return -1; NumHeavyFuncs = ( NewNum<<4 ) + ( NumHeavyFuncs & 0x0F ); return (( NumHeavyFuncs & 0xF0 )>>4 ); } short GamessBasisGroup::GetNumFFuncs( void ) const { return (( NumHeavyFuncs & 0xF0 )>>4 ); } short GamessBasisGroup::SetNumPFuncs( short NewNum ) { if ( NewNum > 3 ) return -1; NumPFuncs = NewNum; return NumPFuncs; } short GamessBasisGroup::GetNumPFuncs( void ) const { return NumPFuncs; } short GamessBasisGroup::SetDiffuseSP( bool state ) { if ( state && ( !( Flags & 1 ) ) ) Flags += 1; else if ( !state && ( Flags & 1 ) ) Flags -= 1; return state; } short GamessBasisGroup::SetDiffuseS( bool state ) { if ( state && ( !( Flags & 2 ) ) ) Flags += 2; else if ( !state && ( Flags & 2 ) ) Flags -= 2; return state; } GAMESS_BS_Polarization GamessBasisGroup::SetPolar( GAMESS_BS_Polarization NewPolar ) { if (( NewPolar>=GAMESS_BS_No_Polarization )||( NewPolar=0 ) Polar = NewPolar; return NewPolar; } const char * GamessBasisGroup::PolarToText( GAMESS_BS_Polarization p ) { switch ( p ) { case GAMESS_BS_No_Polarization: return "none"; case GAMESS_BS_Pople_Polar: return "POPLE"; case GAMESS_BS_PopN311_Polar: return "POPN311"; case GAMESS_BS_Dunning_Polar: return "DUNNING"; case GAMESS_BS_Huzinaga_Polar: return "HUZINAGA"; case GAMESS_BS_Hondo7_Polar: return "HONDO7"; default: return "invalid"; } } const char * GamessBasisGroup::GAMESSECPToText( GAMESS_BS_ECPotential p ) { switch ( p ) { case GAMESS_BS_ECP_None: return "NONE"; case GAMESS_BS_ECP_Read: return "READ"; case GAMESS_BS_ECP_SBK: return "SBK"; case GAMESS_BS_ECP_HW: return "HW"; default: return "invalid"; } } GAMESS_BS_ECPotential GamessBasisGroup::SetECPPotential( const char *ECPText ) { GAMESS_BS_ECPotential NewPot = GAMESS_BS_Invalid_ECP; for ( int i=GAMESS_BS_ECP_None; i=0 ) ECPPotential = NewPot; return NewPot; } short GamessBasisGroup::GetECPPotential( void ) const { short value = ECPPotential; if ( value == 0 ) { if ( Basis == 12 ) value = 2; if ( Basis == 13 ) value = 3; } return value; } const char * GamessBasisGroup::GetECPPotentialText( void ) const { short value = ECPPotential; if ( value == 0 ) { if ( Basis == 12 ) value = 2; if ( Basis == 13 ) value = 3; } return GAMESSECPToText(( GAMESS_BS_ECPotential ) value ); } short GamessBasisGroup::SetECPPotential( short NewType ) { if (( NewType<0 )||( NewType>3 ) ) return -1; ECPPotential = NewType; return ECPPotential; } long GamessBasisGroup::WriteToFile( ostream &File, GamessInputData * iData ) { char Out[GAMESS_BUFF_LEN]; //if a general basis set is present don't punch the $Basis group if ( !iData->Basis ) return 1; //Punch the group label File << " $BASIS "; //Basis Set sprintf( Out,"GBASIS=%s ", GetBasisText() ); File << Out; //Number of Gaussians if ( NumGauss ) { sprintf( Out, "NGAUSS=%d ", NumGauss ); File << Out; } //number of heavy atom polarization functions if ( GetNumDFuncs() ) { sprintf( Out, "NDFUNC=%d ", GetNumDFuncs() ); File << Out; } //number of heavy atom f type polarization functions if ( GetNumFFuncs() ) { sprintf( Out, "NFFUNC=%d ", GetNumFFuncs() ); File << Out; } //number of light atom polarization functions if ( NumPFuncs ) { sprintf( Out, "NPFUNC=%d ", NumPFuncs ); File << Out; } //type of Polarization functions if (( Polar )&&(( NumHeavyFuncs )||( NumPFuncs ) ) ) { sprintf( Out, "POLAR=%s ", GetPolarText() ); File << Out; } if ( GetDiffuseSP() ) { sprintf( Out, "DIFFSP=.TRUE. " ); File << Out; } if ( GetDiffuseS() ) { sprintf( Out, "DIFFS=.TRUE. " ); File << Out; } File << "$END" << endl; if ( WaterSolvate ) { File << " $PCM SOLVNT=WATER $END" << endl; } return 0; } //#pragma mark GamessDataGroup // Data Group member functions GamessDataGroup::GamessDataGroup( void ) { InitData(); } GamessDataGroup::GamessDataGroup( GamessDataGroup *Copy ) { if ( Copy ) { *this = *Copy; Title = NULL; if ( Copy->Title ) { Title = new char[1+strlen( Copy->Title )]; if ( Title ) strcpy( Title, Copy->Title ); } } } GamessDataGroup::~GamessDataGroup( void ) { if ( Title ) delete [] Title; } void GamessDataGroup::InitData( void ) { Title = 0; Coord = NumZVar = 0; PointGroup = 1; PGroupOrder = Options = 0; SetUseSym( true ); } short GamessDataGroup::SetPointGroup( GAMESSPointGroup NewPGroup ) { if (( NewPGroupNumberGAMESSPointGroups ) ) return -1; PointGroup = NewPGroup; return PointGroup; } const char * GamessDataGroup::GetGAMESSPointGroupText( GAMESSPointGroup p ) { switch ( p ) { case GAMESS_C1: return "C1"; case GAMESS_CS: return "CS"; case GAMESS_CI: return "CI"; case GAMESS_CNH: return "CNH"; case GAMESS_CNV: return "CNV"; case GAMESS_CN: return "CN"; case GAMESS_S2N: return "S2N"; case GAMESS_DND: return "DND"; case GAMESS_DNH: return "DNH"; case GAMESS_DN: return "DN"; case GAMESS_TD: return "TD"; case GAMESS_TH: return "TH"; case GAMESS_T: return "T"; case GAMESS_OH: return "OH"; case GAMESS_O: return "O"; default: return "invalid"; } } short GamessDataGroup::SetPointGroup( char *GroupText ) { GAMESSPointGroup NewPGroup=invalidPGroup; if ( GroupText[0] == 'S' ) { PGroupOrder = GroupText[2] - 48; GroupText[2]='N'; } else { int i=0; while ( GroupText[i]&&( GroupText[i]!=' ' ) ) { if ( isdigit( GroupText[i] )&&( GroupText[i]!='1' ) ) { PGroupOrder = GroupText[i] - 48; //single digit converted to decimal digit GroupText[i]='N'; } i++; } } for ( int i=1; i 0 ) PGroupOrder = NewOrder; return PGroupOrder; } short GamessDataGroup::SetTitle( const char *NewTitle, long length ) { if ( Title ) delete Title; Title = NULL; if ( length == -1 ) length = strlen( NewTitle ); long TitleStart=0, TitleEnd=length-1, i, j; //Strip blanks of both ends of title while (( NewTitle[TitleStart] <= ' ' )&&( TitleStart0 ) ) TitleEnd --; length = TitleEnd - TitleStart + 1; if ( length <= 0 ) return 0; if ( length > 132 ) return -1; //Title card is limited to one line Title = new char[length + 1]; //if (Title == NULL) throw MemoryError(); j=0; for ( i=TitleStart; i<=TitleEnd; i++ ) { if (( NewTitle[i] == '\n' )||( NewTitle[i] == '\r' ) ) { Title[j] = 0; break; } Title[j] = NewTitle[i]; j++; } Title[j]=0; return j; } const char * GamessDataGroup::GetTitle( void ) const { return Title; } CoordinateType GamessDataGroup::GetCoordType( void ) const { return ( CoordinateType ) Coord; } const char * GamessDataGroup::GetCoordTypeText( CoordinateType t ) { switch ( t ) { case UniqueCoordType: return "UNIQUE"; case HINTCoordType: return "HINT"; case CartesianCoordType: return "CART"; case ZMTCoordType: return "ZMT"; case ZMTMPCCoordType: return "ZMTMPC"; default: return "invalid"; } } CoordinateType GamessDataGroup::SetCoordType( const char * CoordText ) { CoordinateType NewCoord = invalidCoordinateType; for ( int i=1; iNumberCoordinateTypes ) ) return invalidCoordinateType; Coord = NewType; return ( CoordinateType ) Coord; } bool GamessDataGroup::SetUnits( bool NewType ) { if ( Options & 1 ) Options -= 1; if ( NewType ) Options += 1; return GetUnits(); } bool GamessDataGroup::SetUseSym( bool State ) { if ( Options & ( 1<<1 ) ) Options -= ( 1<<1 ); if ( State ) Options += ( 1<<1 ); return GetUseSym(); } short GamessDataGroup::SetNumZVar( short NewNum ) { if ( NewNum<0 ) return -1; //bad number NumZVar = NewNum; return NumZVar; } void GamessDataGroup::WriteHeaderToFile( ostream &File ) { //Punch the group label File << endl << " $DATA " << endl; //title if ( Title == NULL ) { File << "Title" << endl; } else { File << Title << endl; } } void GamessDataGroup::WriteToFile( ostream &File, GamessInputData *IData, Molecule * molecule ) { char Out[GAMESS_BUFF_LEN]; // Frame * cFrame = molecule->GetCurrentFramePtr(); // BasisSet * lBasis = molecule->GetBasisSet(); // BasisTest = BasisTest && lBasis; //Make sure there really is a basis set defined // if (BasisTest) File << " $CONTRL NORMP=1 $END" << endl; //Point Group if (( PointGroup!=0 )&&( PointGroup!=1 ) ) File << "" << endl; //coordinates // if (Coord == ZMTCoordType) { //"normal" style z-matrix // Internals * IntCoords = molecule->GetInternalCoordinates(); // if (IntCoords) IntCoords->WriteCoordinatesToFile(File, molecule, Prefs); // } else if (Coord == ZMTMPCCoordType) { // Internals * IntCoords = molecule->GetInternalCoordinates(); // if (IntCoords) IntCoords->WriteMPCZMatCoordinatesToFile(File, molecule, Prefs); // } else { if ( IData->EFP->GetGroupCount( GamessEFPGroup::QMType ) || IData->EFP->GetGroupCount( GamessEFPGroup::EFPType ) == 0 ) { WriteHeaderToFile( File ); } if (( PointGroup>GAMESS_CI )&&( PointGroupEFP->GetGroupCount() ) { // write out EFP info for ( EFPGroupIter iter = IData->EFP->GetGroupBegin(); iter != IData->EFP->GetGroupEnd(); ++iter ) { if (( *iter )->type != GamessEFPGroup::QMType ) { continue; } for ( std::vector::iterator i = ( *iter )->atoms.begin(); i != ( *iter )->atoms.end(); ++i ) { Atom *atom = *i; char atomicNumber = atom ->atomicNumber(); sprintf( Out, "%s %5.1f %10.8f %10.8f %10.8f", OpenBabel::etab.GetSymbol( atomicNumber ), ( float ) atomicNumber, atom->pos()->x(), atom->pos()->y(), atom->pos()->z() ); File << Out << endl; } } if ( IData->EFP->GetGroupCount( GamessEFPGroup::QMType ) ) { File << " $END" << endl << endl; } File << " $EFRAG" << endl; File << "COORD=CART" << endl; for ( EFPGroupIter iter = IData->EFP->GetGroupBegin(); iter != IData->EFP->GetGroupEnd(); ++iter ) { if (( *iter )->type != GamessEFPGroup::EFPType ) { continue; } double com[3]; ( *iter )->GetCenterOfMass( molecule, com[0], com[1], com[2] ); Atom *atomIdx[3]; int dist[3]; for ( int i=0; i < 3; i++ ) { atomIdx[i] = 0; dist[i] = 0.0; } for ( std::vector::iterator idx = ( *iter )->atoms.begin(); idx != ( *iter )->atoms.end(); ++idx ) { Atom *atom = *idx; double atomPos[3]; atomPos[0] = atom->pos()->x(); atomPos[1] = atom->pos()->y(); atomPos[2] = atom->pos()->z(); double d = distance( atomPos, com ); for ( int i=0; i<3; i++ ) { if ( !atomIdx[i] ) { atomIdx[i] = *idx; dist[i] = d; break; } if ( d < dist[i] ) { //printf("insert at %d\n", i); for ( int j=2; j > i; j-- ) { //printf("atom[%d] becoming atom[%d]\n", j, j-1); atomIdx[j] = atomIdx[j-1]; dist[j] = dist[j-1]; } atomIdx[i] = *idx; dist[i] = d; break; } } } File << "FRAGNAME=" << ( *iter )->name << endl; for ( int i=0; i<3; i++ ) { if ( !atomIdx[i] ) { break; } char atomicNumber = atomIdx[i]->atomicNumber(); sprintf( Out, "%s%d %10.8f %10.8f %10.8f", OpenBabel::etab.GetSymbol( atomicNumber ), i+1, atomIdx[i]->pos()->x(), atomIdx[i]->pos()->y(), atomIdx[i]->pos()->z() ); File << Out << endl; } /* { OBAtom *atom = molecule->GetAtom(*idx); char atomicNumber = atom ->GetAtomicNum(); if(atom) { sprintf(Out, "%s %5.1f %10.5f %10.5f %10.5f", etab.GetSymbol(atomicNumber), (float) atomicNumber, atom->GetX(), atom->GetY(), atom->GetZ()); File << Out << endl; } }*/ } File << " $END" << endl << endl; } else { // write out normal molecule stuff foreach (Atom *atom, molecule->atoms()) { int atomicNumber = atom->atomicNumber(); sprintf( Out, "%s %5.1f %10.5f %10.5f %10.5f", OpenBabel::etab.GetSymbol( atomicNumber ), ( float ) atomicNumber, atom->pos()->x(), atom->pos()->y(), atom->pos()->z() ); File << Out << endl; // if (BasisTest) lBasis->WriteBasis(File, iatom); } File << " $END" << endl; } // } // if (NumZVar) { //punch out the current connectivity in a $ZMAT group // Internals * IntCoords = molecule->GetInternalCoordinates(); // if (IntCoords) IntCoords->WriteZMATToFile(File); // } } //#pragma mark GamessGuessGroup //Guess Group functions //This function is here to provide a default value before returning the string const char * GamessGuessGroup::GetGuessText( void ) const { short value = GetGuess(); if ( value == 0 ) value = 1; return ConvertGuessType( value ); } short GamessGuessGroup::SetGuess( const char * GuessText ) { short NewGuess = -1; for ( int i=1; iGetCurrentFramePtr(); //first determine whether or not the Guess group needs to be punched if ( GetGuess() ) test = true; if ( GetPrintMO() ) test = true; if ( GetMix()&&IData->Control->GetMultiplicity()&& ( IData->Control->GetSCFType()==2 ) ) test = true; if ( !test ) return; //Punch the group label File << " $GUESS "; //Guess Type if ( GetGuess() ) { sprintf( Out,"GUESS=%s ", GetGuessText() ); File << Out; } //NumOrbs //FIXME help! i need somebody if ( GetGuess()==3 ) { long nOrbs = GetNumOrbs(); // if (!nOrbs) { //Make a guess if the guess comes from local orbs // short tempVec = GetVecSource(); // const std::vector * Orbs = lFrame->GetOrbitalSetVector(); // if (Orbs->size() > 0) { // if ((tempVec<=0)||(tempVec>Orbs->size() + 2)) tempVec = 2; // if (tempVec > 1) { // OrbitalRec * OrbSet = (*Orbs)[tempVec-2]; // nOrbs = OrbSet->getNumOccupiedAlphaOrbitals(); // if (nOrbs <= 0) nOrbs = OrbSet->getNumAlphaOrbitals(); // } // } // } sprintf( Out, "NORB=%d ", static_cast(nOrbs) ); File << Out; } //PrintMO if ( GetPrintMO() ) { sprintf( Out, "PRTMO=.TRUE. " ); File << Out; } //Mix if ( GetMix()&&(( IData->Control->GetMultiplicity()==1 )|| ( IData->Control->GetMultiplicity()==0 ) )&&( IData->Control->GetSCFType()==2 ) ) { sprintf( Out, "MIX=.TRUE. " ); File << Out; } File << "$END" << endl; } // void GamessGuessGroup::WriteVecGroup(BufferFile *File, Molecule * lData) { // //prepare to punch out $Vec information if Guess=MORead // if (GetGuess() == 3) { // Frame * lFrame = lData->GetCurrentFramePtr(); // BasisSet * lBasis = lData->GetBasisSet(); // long NumBasisFuncs = lBasis->GetNumBasisFuncs(false); // short tempVec = GetVecSource(); // const std::vector * Orbs = lFrame->GetOrbitalSetVector(); // if ((tempVec != 1)&&(Orbs->size() > 0)) { // if ((tempVec<=0)||(tempVec>Orbs->size() + 2)) tempVec = 2; // if (tempVec > 1) { // OrbitalRec * OrbSet = (*Orbs)[tempVec-2]; // long nOrbs = GetNumOrbs(); // if (nOrbs <= 0) { //Setup the default value for the orbital count // nOrbs = OrbSet->getNumOccupiedAlphaOrbitals(); // if (nOrbs <= 0) nOrbs = OrbSet->getNumAlphaOrbitals(); // } // OrbSet->WriteVecGroup(File, NumBasisFuncs, nOrbs); // } // } else { // File << "You must provide a $VEC group here!" << endl; // } // } // } //#pragma mark GamessSCFGroup GamessSCFGroup::GamessSCFGroup( void ) { InitData(); } GamessSCFGroup::GamessSCFGroup( GamessSCFGroup *Copy ) { if ( Copy ) *this = *Copy; else GamessSCFGroup(); } void GamessSCFGroup::InitData( void ) { SOGTolerance = EnErrThresh = DEMCutoff = DampCutoff = 0.0; ConvCriteria = MaxDIISEq = MVOCharge = 0; Punch = Options1 = ConverganceFlags = 0; //default Direct SCF to true. This is not the GAMESS default //but is better in most cases. SetDirectSCF( false ); SetFockDiff( true ); } bool GamessSCFGroup::SetDirectSCF( bool State ) { if ( Options1 & 1 ) Options1--; if ( State ) Options1 ++; return GetDirectSCF(); } bool GamessSCFGroup::SetFockDiff( bool State ) { if ( Options1 & 2 ) Options1 -= 2; if ( State ) Options1 += 2; return GetFockDiff(); } bool GamessSCFGroup::SetUHFNO( bool State ) { if ( Options1 & 4 ) Options1 -= 4; if ( State ) Options1 += 4; return GetUHFNO(); } short GamessSCFGroup::SetConvergance( short NewConv ) { if ( NewConv > 0 ) ConvCriteria = NewConv; return ConvCriteria; } void GamessSCFGroup::WriteToFile( ostream &File, GamessInputData *IData ) { long test=false; char Out[GAMESS_BUFF_LEN]; //first determine whether or not the SCF group needs to be punched if ( IData->Control->GetSCFType() > 4 ) return; //not relavent to the selected SCF type if ( ConvCriteria > 0 ) test = true; if ( GetDirectSCF() ) test = true; if ( !test ) return; //Punch the group label File << " $SCF "; //Direct SCF if ( GetDirectSCF() ) { sprintf( Out,"DIRSCF=.TRUE. " ); File << Out; if ( !GetFockDiff() && IData->Control->GetSCFType()<=3 ) { //Fock Differencing requires direct SCF sprintf( Out,"FDIFF=.FALSE. " ); File << Out; } } //convergance if ( ConvCriteria > 0 ) { sprintf( Out, "NCONV=%d ", ConvCriteria ); File << Out; } //UHF Natural Orbitals if ( GetUHFNO() ) { sprintf( Out, "UHFNOS=.TRUE. " ); File << Out; } File << "$END" << endl; } //#pragma mark GamessMP2Group GamessMP2Group::GamessMP2Group( void ) { InitData(); } GamessMP2Group::GamessMP2Group( GamessMP2Group *Copy ) { *this = *Copy; } void GamessMP2Group::InitData( void ) { CutOff = 0.0; NumCoreElectrons = -1; Memory = 0; Method = AOInts = LMOMP2 = 0; MP2Prop = false; } float GamessMP2Group::SetIntCutoff( float NewCutoff ) { if ( NewCutoff >= 0.0 ) CutOff = NewCutoff; return CutOff; } long GamessMP2Group::SetNumCoreElectrons( long NewNum ) { if ( NewNum>=-1 ) NumCoreElectrons = NewNum; return NumCoreElectrons; } long GamessMP2Group::SetMemory( long NewMem ) { if ( NewMem >= 0 ) Memory = NewMem; return Memory; } char GamessMP2Group::SetMethod( char NewMethod ) { if (( NewMethod==2 )||( NewMethod==3 ) ) Method = NewMethod; return Method; } const char * GamessMP2Group::GetAOIntMethodText( void ) const { if ( AOInts == 0 ) return NULL; if ( AOInts == 1 ) return "DUP"; return "DIST"; } void GamessMP2Group::SetAOIntMethod( const char * t ) { if ( !t ) return; if ( !strcmp( t, "DUP" ) ) AOInts = 1; else if ( !strcmp( t, "DIST" ) ) AOInts = 2; } char GamessMP2Group::SetAOIntMethod( char NewMethod ) { if (( NewMethod == 1 )||( NewMethod == 2 ) ) AOInts = NewMethod; return AOInts; } bool GamessMP2Group::GetLMOMP2( void ) const { if ( LMOMP2 ) return true; return false; } bool GamessMP2Group::SetLMOMP2( bool State ) { if ( State ) LMOMP2 = true; else LMOMP2 = false; return LMOMP2; } void GamessMP2Group::WriteToFile( ostream &File, GamessInputData *IData ) { long test=false; char Out[GAMESS_BUFF_LEN]; //first determine whether or not the MP2 group needs to be punched if ( IData->Control->GetMPLevel() != 2 ) return; //Don't punch if MP2 isn't active if ( NumCoreElectrons>=0||Memory||Method>2||AOInts ) test = true; if ( GetLMOMP2() ) test = true; if ( CutOff > 0.0 ) test = true; if ( !test ) return; //Punch the group label File << " $MP2 "; //core electrons // was >= -dcurtis if ( NumCoreElectrons >= 0 ) { sprintf( Out,"NACORE=%ld ", NumCoreElectrons ); File << Out; if ( IData->Control->GetSCFType() == GAMESS_UHF ) { sprintf( Out,"NBCORE=%ld ", NumCoreElectrons ); File << Out; } } //MP2Prop if (( IData->Control->GetRunType() <= Energy ) && GetMP2Prop() ) { sprintf( Out, "MP2PRP=.TRUE. " ); File << Out; } //LMOMP2 if ( GetLMOMP2() ) { sprintf( Out, "LMOMP2=.TRUE. " ); File << Out; } //Memory if ( Memory ) { sprintf( Out, "NWORD=%ld ",Memory ); File << Out; } //CutOff if ( CutOff > 0.0 ) { sprintf( Out, "CUTOFF=%.2e ", CutOff ); File << Out; } //Method if ( Method > 2 && !GetLMOMP2() ) { sprintf( Out, "METHOD=%d ", Method ); File << Out; } //AO storage if ( AOInts ) { sprintf( Out, "AOINTS=%s ", GetAOIntMethodText() ); File << Out; } File << "$END" << endl; } //#pragma mark GamessHessianGroup void GamessHessianGroup::InitData( void ) { DisplacementSize = 0.01; FrequencyScaleFactor = 1.0; BitOptions = 17; //bit 1 + bit 5 } void GamessHessianGroup::WriteToFile( ostream &File, GamessInputData *IData ) { bool method=false; char Out[GAMESS_BUFF_LEN]; //first determine whether or not the hessian group needs to be punched //punch for hessians and optimize/sadpoint runs using Hess=Calc if ( IData->Control->GetRunType() == 3 ) method = true; else if (( IData->Control->GetRunType() == 4 )||( IData->Control->GetRunType() == 6 ) ) { if ( IData->StatPt ) { if ( IData->StatPt->GetHessMethod() == 3 ) method = true; } } if ( !method ) return; bool AnalyticPoss = ((( IData->Control->GetSCFType() == 1 )||( IData->Control->GetSCFType() == 3 )|| ( IData->Control->GetSCFType() == 4 )||( IData->Control->GetSCFType() == 0 ) )&& ( IData->Control->GetMPLevel() == 0 ) ); method = GetAnalyticMethod() && AnalyticPoss; //Punch the group label File << " $FORCE "; //Method switch (IData->Basis->GetBasis()) { case GAMESS_BS_MNDO: case GAMESS_BS_AM1: case GAMESS_BS_PM3: File << "METHOD=NUMERIC "; break; default: if ( method ) File << "METHOD=ANALYTIC "; else File << "METHOD=SEMINUM "; } if ( !method ) { //NVIB if ( GetDoubleDiff() ) { File << "NVIB=2 "; } //Vib Size if ( DisplacementSize != 0.01 ) { sprintf( Out, "VIBSIZ=%f ", DisplacementSize ); File << Out; } } //Purify if ( GetPurify() ) { File << "PURIFY=.TRUE. "; } //Print internal FC's if ( GetPrintFC() ) { File << "PRTIFC=.TRUE. "; } //vib analysis if ( GetVibAnalysis() ) { File << "VIBANL=.TRUE. "; if ( FrequencyScaleFactor != 1.0 ) { sprintf( Out, "SCLFAC=%f ", FrequencyScaleFactor ); File << Out; } } else File << "VIBANL=.FALSE. "; File << "$END" << endl; } //#pragma mark GamessDFTGroup void GamessDFTGroup::InitData( void ) { GridSwitch = 3.0e-4; Threshold = 1.0e-4; Functional = 0; NumRadialGrids = 96; NumThetaGrids = 12; NumPhiGrids = 24; NumRadialGridsInit = 24; NumThetaGridsInit = 8; NumPhiGridsInit = 16; BitFlags = 0; SetAuxFunctions( true ); SetMethodGrid( true ); } void GamessDFTGroup::WriteToFile( ostream &File, GamessInputData *IData ) { char Out[GAMESS_BUFF_LEN]; short SCFType = IData->Control->GetSCFType(); //first determine whether or not the DFT group needs to be punched if (( SCFType > 3 )|| !IData->Control->UseDFT() ) return;//only punch for HF runtypes (RHF, ROHF, UHF) if ( MethodGrid() ) return; //Only need this group for gridfree method currently //Punch the group label File << " $DFT "; //Write out the functional, and any other optional parameters //Method if ( !MethodGrid() ) { //punch method if it needs to be grid-free sprintf( Out, "METHOD=GRIDFREE " ); File << Out; } File << "$END" << endl; } const char * GamessDFTGroup::GetDFTGridFuncText( DFTFunctionalsGrid type ) { switch ( type ) { case DFT_Grid_Slater: return "SLATER"; case DFT_Grid_Becke: return "BECKE"; case DFT_Grid_VWN: return "VWN"; case DFT_Grid_LYP: return "LYP"; case DFT_Grid_SVWN: return "SVWN"; case DFT_Grid_BVWN: return "BVWN"; case DFT_Grid_BLYP: return "BLYP"; case DFT_Grid_B3LYP: return "B3LYP"; case DFT_Grid_GILL: return "GILL"; case DFT_Grid_PBE: return "PBE"; case DFT_Grid_OP: return "OP"; case DFT_Grid_SLYP: return "SLYP"; case DFT_Grid_SOP: return "SOP"; case DFT_Grid_BOP: return "BOP"; case DFT_Grid_GVWN: return "GVWN"; case DFT_Grid_GLYP: return "GLYP"; case DFT_Grid_GOP: return "GOP"; case DFT_Grid_PBEVWN: return "PBEVWN"; case DFT_Grid_PBELYP: return "PBELYP"; case DFT_Grid_PBEOP: return "PBEOP"; case DFT_Grid_BHHLYP: return "BHHLYP"; default: return "invalid"; } } const char * GamessDFTGroup::GetDFTGridFreeFuncText( DFTFunctionalsGridFree type ) { switch ( type ) { case DFT_GridFree_Slater: return "SLATER"; case DFT_GridFree_Becke: return "BECKE"; case DFT_GridFree_VWN: return "VWN"; case DFT_GridFree_LYP: return "LYP"; case DFT_GridFree_SVWN: return "SVWN"; case DFT_GridFree_BVWN: return "BVWN"; case DFT_GridFree_BLYP: return "BLYP"; case DFT_GridFree_B3LYP: return "B3LYP"; case DFT_GridFree_XALPHA: return "XALPHA"; case DFT_GridFree_Depristo: return "DEPRISTO"; case DFT_GridFree_CAMA: return "CAMA"; case DFT_GridFree_HALF: return "HALF"; case DFT_GridFree_PWLOC: return "PWLOC"; case DFT_GridFree_BPWLOC: return "BPWLOC"; case DFT_GridFree_CAMB: return "CAMB"; case DFT_GridFree_XVWN: return "XVWN"; case DFT_GridFree_XPWLOC: return "XPWLOC"; case DFT_GridFree_SPWLOC: return "SPWLOC"; case DFT_GridFree_WIGNER: return "WIGNER"; case DFT_GridFree_WS: return "WS"; case DFT_GridFree_WIGEXP: return "WIGEXP"; default: return "invalid"; } } const char * GamessDFTGroup::GetFunctionalText( void ) const { short temp = Functional; if ( temp <= 0 ) temp = 1; if ( MethodGrid() ) { return GetDFTGridFuncText(( DFTFunctionalsGrid ) temp ); } else { //Grid-free functional list is fairly different return GetDFTGridFreeFuncText(( DFTFunctionalsGridFree ) temp ); } return NULL; } short GamessDFTGroup::SetFunctional( short newvalue ) { //Probably need some checks here?? Functional = newvalue; return Functional; } //#pragma mark GamessStatPtGroup void GamessStatPtGroup::InitData( void ) { OptConvergance = 0.0001; InitTrustRadius = 0.0; MaxTrustRadius = 0.0; MinTrustRadius = 0.05; StatJumpSize = 0.01; ModeFollow = 1; BitOptions = 0; method = 3; MaxSteps = 20; nRecalcHess = 0; SetRadiusUpdate( true ); } void GamessStatPtGroup::WriteToFile( ostream &File, GamessInputData *IData ) { char Out[GAMESS_BUFF_LEN]; short runType = IData->Control->GetRunType(); //first determine whether or not the statpt group needs to be punched if (( runType != 4 )&&( runType != 6 ) ) return; //only punch for optimize and sadpoint runs //Punch the group label File << " $STATPT "; //write out the convergance criteria and number of steps by default, just //to remind the user of their values. Everything else is optional. sprintf( Out, "OPTTOL=%g ", GetOptConvergance() ); File << Out; sprintf( Out, "NSTEP=%d ", GetMaxSteps() ); File << Out; //Method if ( GetMethod() != 3 ) { File << "Method="; switch ( GetMethod() ) { case 1: File << "NR "; break; case 2: File << "RFO "; break; case 3: File << "QA "; break; case 4: File << "SCHLEGEL "; break; case 5: File << "CONOPT "; break; } } //DXMAX if non-default and method is not NR if (( GetInitRadius() != 0.0 )&&( GetMethod() !=1 ) ) { sprintf( Out, "DXMAX=%g ", GetInitRadius() ); File << Out; } if (( GetMethod()==2 )||( GetMethod()==3 ) ) { if ( !GetRadiusUpdate() ) File << "TRUPD=.FALSE. "; if ( GetMaxRadius() != 0.0 ) { sprintf( Out, "TRMAX=%g ", GetMaxRadius() ); File << Out; } if ( fabs( GetMinRadius() - 0.05 )>1e-5 ) { sprintf( Out, "TRMIN=%g ", GetMinRadius() ); File << Out; } } if (( runType == 6 )&&( GetModeFollow() != 1 ) ) { sprintf( Out, "IFOLOW=%d ", static_cast(GetModeFollow()) ); File << Out; } if ( GetStatPoint() ) { File << "STPT=.TRUE. "; if ( fabs( GetStatJump() - 0.01 )>1e-5 ) { sprintf( Out, "STSTEP=%g ", GetStatJump() ); File << Out; } } if ( GetHessMethod() ) { File << "HESS="; switch ( GetHessMethod() ) { case 1: File << "GUESS "; break; case 2: File << "READ "; break; case 3: File << "CALC "; break; } } if ( GetHessRecalcInterval() ) { sprintf( Out, "IHREP=%d ", GetHessRecalcInterval() ); File << Out; } if ( AlwaysPrintOrbs() ) { File << "NPRT=1 "; } File << "$END" << endl; } // void MOPacInternals::WriteZMATToFile(BufferFile * File) { // char Out[GAMESS_BUFF_LEN]; // // File << " $ZMAT IZMAT(1)=" << endl; // for (long i=3; i9) File << ", " << endl; // sprintf(Out, "1,%d,%d, ", (i+3)/3, ConnectionAtoms[i]+1); // File << Out << endl; // if (i>3) { // sprintf(Out, "2,%d,%d,%d, ", (i+3)/3, ConnectionAtoms[i]+1, ConnectionAtoms[i+1]+1); // File << Out << endl; // if (i>6) { // sprintf(Out, "3,%d,%d,%d,%d", (i+3)/3, ConnectionAtoms[i]+1, // ConnectionAtoms[i+1]+1, ConnectionAtoms[i+2]+1); // File << Out << endl; // } // } // } // File << " $END" << endl; // } // void MOPacInternals::WriteCoordinatesToFile(BufferFile * File, Molecule * MainData, WinPrefs * Prefs) { // UpdateAtoms(MainData); //First make sure the connectivity and values are up to date // CartesiansToInternals(MainData); // char Out[GAMESS_BUFF_LEN]; // Str255 AtomLabel; // Frame * cFrame = MainData->GetCurrentFramePtr(); // // for (int iatom=0; iatomNumAtoms; iatom++) { // Prefs->GetAtomLabel(cFrame->Atoms[iatom].GetType()-1, AtomLabel); // AtomLabel[AtomLabel[0]+1] = 0; // if (iatom==0) sprintf(Out, "%s", (char *) &(AtomLabel[1])); // else if (iatom == 1) // sprintf(Out, "%s %d %10.5f", (char *) &(AtomLabel[1]), // ConnectionAtoms[3*iatom]+1, Values[3*iatom]); // else if (iatom == 2) // sprintf(Out, "%s %d %10.5f %d %8.4f", // (char *) &(AtomLabel[1]), ConnectionAtoms[3*iatom]+1, Values[3*iatom], // ConnectionAtoms[3*iatom+1]+1, Values[3*iatom+1]); // else // sprintf(Out, "%s %d %10.5f %d %8.4f %d %8.4f", // (char *) &(AtomLabel[1]), ConnectionAtoms[3*iatom]+1, Values[3*iatom], // ConnectionAtoms[3*iatom+1]+1, Values[3*iatom+1], // ConnectionAtoms[3*iatom+2]+1, Values[3*iatom+2]); // File << Out << endl; // } // } // //This if very similar to the prevous function, but the format is a little different // void MOPacInternals::WriteMPCZMatCoordinatesToFile(BufferFile * File, Molecule * MainData, WinPrefs * Prefs) { // UpdateAtoms(MainData); //First make sure the connectivity and values are up to date // CartesiansToInternals(MainData); // char Out[GAMESS_BUFF_LEN]; // Str255 AtomLabel; // Frame * cFrame = MainData->GetCurrentFramePtr(); // // for (int iatom=0; iatomNumAtoms; iatom++) { // Prefs->GetAtomLabel(cFrame->Atoms[iatom].GetType()-1, AtomLabel); // AtomLabel[AtomLabel[0]+1] = 0; // if (iatom==0) sprintf(Out, "%s", (char *) &(AtomLabel[1])); // else if (iatom == 1) // sprintf(Out, "%s %10.5f", (char *) &(AtomLabel[1]), // Values[3*iatom]); // else if (iatom == 2) // sprintf(Out, "%s %10.5f 0 %8.4f 0 %d %d", // (char *) &(AtomLabel[1]), Values[3*iatom], // Values[3*iatom+1], ConnectionAtoms[3*iatom]+1, ConnectionAtoms[3*iatom+1]+1); // else // sprintf(Out, "%s %10.5f 0 %8.4f 0 %8.4f 0 %d %d %d", // (char *) &(AtomLabel[1]), Values[3*iatom], Values[3*iatom+1], // Values[3*iatom+2], ConnectionAtoms[3*iatom]+1, // ConnectionAtoms[3*iatom+1]+1, ConnectionAtoms[3*iatom+2]+1); // File << Out << endl; // } // } // void OrbitalRec::WriteVecGroup(BufferFile * File, const long & NumBasisFuncs, const long & OrbCount) const { // //First check for and write out the vec label // if (Label) { //The label should include any necessary linefeeds // File << Label << endl; // } // //Punch the Group title // File << " $VEC" << endl; // //write out the vectors using the GAMESS format (I2,I3,5E15.8) // #ifdef WIN32 // //Visual studio defaults to using 3 digit exponent output which doesn't fit in the field // //This function changes that behavior to 2 digits. // _set_output_format(_TWO_DIGIT_EXPONENT); // #endif // long iline, nVec, nn, nOrbs, pOrb; // if ((OrbCount > 0) && (OrbCount <= NumAlphaOrbs)) nOrbs = OrbCount; // else nOrbs = NumAlphaOrbs; // char Line[GAMESS_BUFF_LEN]; // float * Vector=Vectors; // for (int ipass=0; ipass<2; ipass++) { // if (!Vector) { // File << "Error in Vectors request!" << endl; // return; // } // nn = 0; pOrb = 0; // for (long i=0; i=100) pOrb -= 100; // sprintf(Line, "%2d%3d", pOrb, iline); // File << Line << endl; // for (long ivec=0; ivec=5)&&(ivec+1 0) && (OrbCount <= NumBetaOrbs)) nOrbs = OrbCount; // else nOrbs = NumBetaOrbs; // } else ipass++; // } // //finish off the group // File << " $END" << endl; // } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/lammpsinputdialog.cpp0000644000175000001440000005634012250371054027022 0ustar marcususers/********************************************************************** LammpsInputDialog - Dialog for generating LAMMPS input files Copyright (C) 2012 Albert DeFusco This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "lammpsinputdialog.h" #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; using namespace std; namespace Avogadro { LammpsInputDialog::LammpsInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_unitType(real), m_dimensionType(d3), m_xBoundaryType(p), m_yBoundaryType(p), m_zBoundaryType(p), m_atomStyle(full), m_waterPotential(NONE), m_ensemble(NVT), m_temperature(298.15), m_nhChain(1), m_timeStep(2.0), m_runSteps(50), m_xReplicate(1), m_yReplicate(1), m_zReplicate(1), m_dumpStep(1), m_velocityDist(gaussian), m_velocityTemp(298.15), m_zeroMOM(true), m_zeroL(true), m_thermoStyle(one), m_thermoInterval(50), m_output(), m_dirty(false), m_warned(false), readData(false) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); //now for something useful connect(ui.unitsCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setUnits(int))); connect(ui.atomStyleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setAtomStyle(int))); connect(ui.dimensionCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setDimensionType(int))); connect(ui.xBoundaryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setXBoundaryType(int))); connect(ui.yBoundaryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setYBoundaryType(int))); connect(ui.zBoundaryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setZBoundaryType(int))); connect(ui.waterPotentialCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setWaterPotential(int))); connect(ui.readDataLine, SIGNAL(editingFinished()), this, SLOT(setReadData())); connect(ui.ensembleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setEnsemble(int))); connect(ui.tempSpin, SIGNAL(valueChanged(double)), this, SLOT(setTemperature(double))); connect(ui.nhChainSpin, SIGNAL(valueChanged(int)), this, SLOT(setNHChain(int))); connect(ui.stepSpin, SIGNAL(valueChanged(double)), this, SLOT(setTimeStep(double))); connect(ui.runSpin, SIGNAL(valueChanged(int)), this, SLOT(setRunSteps(int))); connect(ui.xReplicateSpin, SIGNAL(valueChanged(int)), this, SLOT(setXReplicate(int))); connect(ui.yReplicateSpin, SIGNAL(valueChanged(int)), this, SLOT(setYReplicate(int))); connect(ui.zReplicateSpin, SIGNAL(valueChanged(int)), this, SLOT(setZReplicate(int))); connect(ui.dumpXYZEdit, SIGNAL(editingFinished()), this, SLOT(setDumpXYZ())); connect(ui.dumpStepSpin, SIGNAL(valueChanged(int)), this, SLOT(setDumpStep(int))); connect(ui.velocityDistCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setVelocityDist(int))); connect(ui.velocityTempSpin, SIGNAL(valueChanged(double)), this, SLOT(setVelocityTemp(double))); connect(ui.zeroMOMCheck, SIGNAL(toggled(bool)), this, SLOT(setZeroMOM(bool))); connect(ui.zeroLCheck, SIGNAL(toggled(bool)), this, SLOT(setZeroL(bool))); connect(ui.thermoStyleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setThermoStyle(int))); connect(ui.thermoSpin, SIGNAL(valueChanged(int)), this, SLOT(setThermoInterval(int))); connect(ui.previewText, SIGNAL(cursorPositionChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } LammpsInputDialog::~LammpsInputDialog() { QSettings settings; writeSettings(settings); } void LammpsInputDialog::showEvent(QShowEvent *) { updatePreviewText(); } void LammpsInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("Lammps Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the Lammps input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } } void LammpsInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.unitsCombo->setCurrentIndex(1); ui.atomStyleCombo->setCurrentIndex(7); ui.dimensionCombo->setCurrentIndex(1); ui.xBoundaryCombo->setCurrentIndex(0); ui.yBoundaryCombo->setCurrentIndex(0); ui.zBoundaryCombo->setCurrentIndex(0); ui.waterPotentialCombo->setCurrentIndex(0); ui.ensembleCombo->setCurrentIndex(0); ui.tempSpin->setValue(298.15); ui.nhChainSpin->setValue(1); ui.stepSpin->setValue(2.0); ui.runSpin->setValue(50); ui.xReplicateSpin->setValue(1); ui.yReplicateSpin->setValue(1); ui.zReplicateSpin->setValue(1); ui.dumpStepSpin->setValue(1); ui.thermoStyleCombo->setCurrentIndex(0); ui.thermoSpin->setValue(50); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } void LammpsInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("Lammps Input"), QString("lmp")); } void LammpsInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void LammpsInputDialog::enableFormClicked() { updatePreviewText(); } void LammpsInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->document()->isModified()) deckDirty(true); } void LammpsInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void LammpsInputDialog::setUnits(int n) { m_unitType = (LammpsInputDialog::unitType) n; ui.unitsCombo->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setAtomStyle(int n) { m_atomStyle = (LammpsInputDialog::atomStyle) n; ui.atomStyleCombo->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setDimensionType(int n) { m_dimensionType = static_cast(n); ui.dimensionCombo->setEnabled(true); if (n == 0) { setZBoundaryType(0); ui.zBoundaryCombo->setCurrentIndex(0); ui.zBoundaryCombo->setEnabled(false); ui.zReplicateSpin->setValue(1); ui.zReplicateSpin->setEnabled(false); } if (n == 1) { ui.zBoundaryCombo->setEnabled(true); ui.zReplicateSpin->setEnabled(true); } updatePreviewText(); } void LammpsInputDialog::setXBoundaryType(int n) { m_xBoundaryType = static_cast(n); ui.xBoundaryCombo->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setYBoundaryType(int n) { m_yBoundaryType = static_cast(n); ui.yBoundaryCombo->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setZBoundaryType(int n) { m_zBoundaryType = static_cast(n); //should be careful here //z boundary must be p for 2d!!! ui.zBoundaryCombo->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setWaterPotential(int n) { m_waterPotential = static_cast(n); ui.waterPotentialCombo->setEnabled(true); if (n == 1) { setAtomStyle(7); ui.atomStyleCombo->setCurrentIndex(7); ui.atomStyleCombo->setEnabled(false); } if (n == 0) { ui.atomStyleCombo->setEnabled(true); } updatePreviewText(); } void LammpsInputDialog::setReadData() { m_readData = ui.readDataLine->text(); if (m_readData != "" ) readData = true; else readData = false; updatePreviewText(); } void LammpsInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) { disconnect(m_molecule, 0, this, 0); } m_molecule = molecule; // Update the preview text whenever primitives are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); updatePreviewText(); } void LammpsInputDialog::setEnsemble(int n) { m_ensemble = static_cast(n); ui.ensembleCombo->setEnabled(true); if (n == 1) { ui.tempSpin->setValue(0.0); ui.tempSpin->setEnabled(false); ui.nhChainSpin->setValue(0); ui.nhChainSpin->setEnabled(false); } else if (n == 0) { ui.tempSpin->setEnabled(true); ui.nhChainSpin->setEnabled(true); ui.nhChainSpin->setValue(1); } updatePreviewText(); } void LammpsInputDialog::setTemperature(double n) { m_temperature = n; ui.tempSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setNHChain(int n) { m_nhChain = n; ui.nhChainSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setTimeStep(double n) { m_timeStep = n; ui.stepSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setRunSteps(int n) { m_runSteps = n; ui.runSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setXReplicate(int n) { m_xReplicate = n; ui.xReplicateSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setYReplicate(int n) { m_yReplicate = n; ui.yReplicateSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setZReplicate(int n) { m_zReplicate = n; ui.zReplicateSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setDumpStep(int n) { m_dumpStep = n; ui.dumpStepSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setDumpXYZ() { m_dumpXYZ = ui.dumpXYZEdit->text(); updatePreviewText(); } void LammpsInputDialog::setVelocityDist(int n) { m_velocityDist = static_cast(n); ui.velocityDistCombo->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setVelocityTemp(double n) { m_velocityTemp = n; ui.velocityTempSpin->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setZeroMOM(bool state) { m_zeroMOM = state; ui.zeroMOMCheck->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setZeroL(bool state) { m_zeroL = state; ui.zeroLCheck->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setThermoStyle(int n) { m_thermoStyle = static_cast(n); ui.thermoStyleCombo->setEnabled(true); updatePreviewText(); } void LammpsInputDialog::setThermoInterval(int n) { m_thermoInterval = n; ui.thermoSpin->setEnabled(true); updatePreviewText(); } QString LammpsInputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); mol << "#LAMMPS Input file generated by Avogadro\n"; mol << "# " << m_title << "\n\n"; mol << "# Intialization\n"; mol << "units " << getUnitType(m_unitType) << "\n"; mol << "dimension " << getDimensionType(m_dimensionType) << "\n"; mol << "boundary " << getXBoundaryType(m_xBoundaryType) << " " << getYBoundaryType(m_yBoundaryType) << " " << getZBoundaryType(m_zBoundaryType) << "\n"; mol << "atom_style " << getAtomStyle(m_atomStyle) << "\n"; mol << "\n"; mol << "# Atom Definition\n"; if (readData) mol << "read_data " << m_readData << "\n"; mol << "replicate " << m_xReplicate << " " << m_yReplicate << " " << m_zReplicate << "\n"; mol << "\n" << getWaterPotential(m_waterPotential) << "\n"; mol << "# Settings\n"; mol << "velocity all create " << fixed << qSetRealNumberPrecision(2) << m_velocityTemp << " " << "4928459 " << "rot " << getZeroL() << " " << "mom " << getZeroMOM() << " " << "dist " << getVelocityDist(m_velocityDist) << "\n"; mol << getEnsemble(m_ensemble) << "\n"; mol << "timestep " << fixed << qSetRealNumberPrecision(1) << m_timeStep << "\n"; mol << "\n"; mol << "# Output\n"; if (m_dumpXYZ != "") { mol << "dump dumpXYZ all xyz " << m_dumpStep << " " << m_dumpXYZ << "\n"; } mol << "thermo_style " << getThermoStyle(m_thermoStyle) << "\n"; mol << "thermo " << m_thermoInterval << "\n"; mol << "\n"; mol << "# Run the simulation\n"; mol << "run " << m_runSteps << "\n"; mol << "\n"; return buffer; } QString LammpsInputDialog::getUnitType(unitType t) { // Translate the enum to text for the output generation switch (t) { case lj: return "lj"; case real: return "real"; case metal: return "metal"; case si: return "si"; case cgs: return "cgs"; case u_electron: return "electron"; default: return "lj"; } } QString LammpsInputDialog::getAtomStyle(atomStyle t) { switch (t) { case angle: return "angle"; case atomic: return "atomic"; case bond: return "bond"; case charge: return "charge"; case dipole: return "dipole"; case a_electron: return "electron"; case ellipsoid: return "ellipsoid"; case full: return "full"; case line: return "line"; case meso: return "meso"; case molecular: return "molecular"; case peri: return "peri"; case sphere: return "sphere"; case tri: return "tri"; case wavepacket: return "wavepacket"; default: return "full"; } } QString LammpsInputDialog::getDimensionType(dimensionType t) { switch(t) { case d2: return "2d"; case d3: return "3d"; default: return "3d"; } } QString LammpsInputDialog::getXBoundaryType(boundaryType t) { switch(t) { case p: return "p"; case f: return "f"; case s: return "s"; case m: return "m"; case fs: return "fs"; case fm: return "fm"; default: return "p"; } } QString LammpsInputDialog::getYBoundaryType(boundaryType t) { switch(t) { case p: return "p"; case f: return "f"; case s: return "s"; case m: return "m"; case fs: return "fs"; case fm: return "fm"; default: return "p"; } } QString LammpsInputDialog::getZBoundaryType(boundaryType t) { switch(t) { case p: return "p"; case f: return "f"; case s: return "s"; case m: return "m"; case fs: return "fs"; case fm: return "fm"; default: return "p"; } } QString LammpsInputDialog::getWaterPotential(waterPotential t) { switch(t) { case NONE: { QString waterPotentialInput; QTextStream water(&waterPotentialInput); water << ""; return waterPotentialInput; } case SPC: { QString waterPotentialInput; QTextStream water(&waterPotentialInput); int Hydrogen; int Oxygen; determineAtomTypesSPC(Hydrogen, Oxygen); water << "#The SPC water potential\n" << "pair_style lj/cut/coul/cut 9.8 9.8\n" << "pair_coeff " << Oxygen << " " << Oxygen << " 0.15535 3.5533\n" << "pair_coeff " << "* " << Hydrogen << " 0.00000 0.0000\n" << "bond_style harmonic\n" << "angle_style harmonic\n" << "dihedral_style none\n" << "improper_style none\n" << "bond_coeff 1 100.00 1.000\n" << "angle_coeff 1 100.00 109.47\n" << "special_bonds lj/coul 0.0 0.0 0.5\n" << "fix RigidOHBonds all shake 0.0001 20 0 b 1 a 1\n"; return waterPotentialInput; } case SPCE: { QString waterPotentialInput; QTextStream water(&waterPotentialInput); int Hydrogen; int Oxygen; determineAtomTypesSPC(Hydrogen, Oxygen); water << "#The SPC/E water potential\n" << "pair_style lj/cut/coul/long 9.8 9.8\n" << "kspace_style pppm 1.0e-4\n" << "pair_coeff " << Oxygen << " " << Oxygen << " 0.15535 3.5533\n" << "pair_coeff " << "* " << Hydrogen << " 0.00000 0.0000\n" << "bond_style harmonic\n" << "angle_style harmonic\n" << "dihedral_style none\n" << "improper_style none\n" << "bond_coeff 1 100.00 1.000\n" << "angle_coeff 1 100.00 109.47\n" << "special_bonds lj/coul 0.0 0.0 0.5\n" << "fix RigidOHBonds all shake 0.0001 20 0 b 1 a 1\n"; return waterPotentialInput; } default: { QString waterPotentialInput; QTextStream water(&waterPotentialInput); water << "\n"; return waterPotentialInput; } } } QString LammpsInputDialog::getEnsemble(ensemble t) { switch(t) { case NVT: { QString ensembleInput; QTextStream fix(&ensembleInput); fix << "fix ensemble all nvt" << " temp " << fixed << qSetRealNumberPrecision(2) << m_temperature << " " << fixed << qSetRealNumberPrecision(2) << m_temperature << " 100 " << "tchain " << m_nhChain << "\n"; return ensembleInput; } case NVE: { QString ensembleInput; QTextStream fix(&ensembleInput); fix << "fix ensemble all nve\n"; return ensembleInput; } default: { QString ensembleInput; QTextStream fix(&ensembleInput); fix << "fix ensemble all nvt" << " temp " << fixed << qSetRealNumberPrecision(2) << m_temperature << " " << fixed << qSetRealNumberPrecision(2) << m_temperature << " 100 " << "tchain " << m_nhChain << "\n"; return ensembleInput; } } } QString LammpsInputDialog::getVelocityDist(velocityDist t) { switch(t) { case gaussian: return "gaussian"; case uniform: return "uniform"; default: return "gaussian"; } } QString LammpsInputDialog::getZeroMOM() { if(m_zeroMOM) return "yes"; else return "no"; } QString LammpsInputDialog::getZeroL() { if(m_zeroL) return "yes"; else return "no"; } QString LammpsInputDialog::getThermoStyle(thermoStyle t) { switch(t) { case one: return "one"; case multi: return "multi"; default: return "one"; } } void LammpsInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); //ui.calculationCombo->setEnabled(!dirty); //ui.theoryCombo->setEnabled(!dirty); //ui.basisCombo->setEnabled(!dirty); //ui.multiplicitySpin->setEnabled(!dirty); //ui.chargeSpin->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } void LammpsInputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("lammps/savepath").toString(); } void LammpsInputDialog::writeSettings(QSettings& settings) const { settings.setValue("lammps/savepath", m_savePath); } void LammpsInputDialog::determineAtomTypesSPC(int &hyd, int &oxy) { double ThisMass; QString ThisAtom; QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { ThisMass=atom->OBAtom().GetAtomicMass(); ThisAtom=etab.GetSymbol(atom->atomicNumber()); AtomMass[ThisAtom] = ThisMass; } int AtomIndex=0; //Set AtomType integer for (itr = AtomMass.begin(); itr != AtomMass.end(); ++itr) { AtomIndex++; AtomType[itr.key()] = AtomIndex; } //this is on purpose due to the use of //unordered_map in OpenBabel, which //returns a different order for O and H. hyd = AtomType.value("O"); oxy = AtomType.value("H"); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/inputdialog.cpp0000644000175000001440000000507112250371054025603 0ustar marcususers/********************************************************************** InputDialog - Base class for all QC input dialogs Copyright (C) 2010 Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "inputdialog.h" #include #include #include namespace Avogadro { InputDialog::InputDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), m_molecule(0), m_title("Title"), m_multiplicity(1), m_charge(0), m_savePath("") {} InputDialog::~InputDialog() {} void InputDialog::setMolecule(Molecule *molecule) { m_molecule = molecule; } QString InputDialog::saveInputFile(QString inputDeck, QString fileType, QString ext) { // Try to set default save path for dialog using the next sequence: // 1) directory of current file (if any); // 2) directory where previous deck was saved; // 3) $HOME QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if(m_savePath == "") { if (defaultPath.isEmpty()) defaultPath = QDir::homePath(); } else { defaultPath = m_savePath; } QString defaultFileName = defaultPath + '/' + defaultFile.baseName() + "." + ext; QString fileName = QFileDialog::getSaveFileName(this, tr("Save Input Deck"), defaultFileName, fileType + " (*." + ext + ")"); if(fileName == "") return fileName; QFile file(fileName); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) return QString(); file.write(inputDeck.toLocal8Bit()); // prevent troubles in Windows file.close(); // flush buffer! m_savePath = QFileInfo(file).absolutePath(); return fileName; } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/nwcheminputdialog.ui0000644000175000001440000003260112250371054026637 0ustar marcususers NWChemInputDialog 0 0 545 395 0 0 NWChem Input QLayout::SetFixedSize Title: titleLine Title Calculation: calculationCombo 1 Single Point Energy Geometry Optimization Frequencies Qt::Horizontal 18 27 Qt::Horizontal 58 26 Theory: theoryCombo false 2 HF MP2 B3LYP CCSD Qt::Horizontal 58 27 Basis: basisCombo 2 STO-3G 3-21G 6-31G(d) 6-31G(d,p) 6-31+G(d) 6-311G(d) cc-pVDZ cc-pVTZ LANL2DZ Qt::Horizontal 58 26 Charge: chargeSpin -99 0 Qt::Horizontal 58 27 true Multiplicity: multiplicitySpin true 1 1 Qt::Horizontal 58 26 Format: coordCombo true 0 Cartesian Z-matrix Z-matrix (compact) Qt::Horizontal 18 27 Qt::Horizontal 18 26 0 0 Hide Preview Monospace false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Generate... Close titleLine calculationCombo theoryCombo basisCombo chargeSpin multiplicitySpin coordCombo moreButton previewText generateButton closeButton resetButton enableFormButton closeButton clicked() NWChemInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/molproinputdialog.ui0000644000175000001440000003513312250371054026671 0ustar marcususers MolproInputDialog 0 0 621 471 0 0 MOLPRO Input QLayout::SetFixedSize Title: titleLine Title Calculation: calculationCombo 1 Single Point Energy Geometry Optimization Frequencies Qt::Horizontal 18 27 Qt::Horizontal 58 26 Theory: theoryCombo false 0 HF MP2 B3LYP CCSD CCSD(T) Qt::Horizontal 58 27 Basis Set: basisCombo 2 STO-3G 3-21G 6-31G(d) 6-31G(d,p) 6-31+G(d) 6-311G(d) cc-pVDZ cc-pVTZ AUG-cc-pVDZ AUG-cc-pVTZ Qt::Horizontal 58 26 Charge: chargeSpin -99 0 Qt::Horizontal 58 27 Multiplicity: multiplicitySpin 1 1 Qt::Horizontal 58 26 Format: coordCombo true 0 Cartesian Z-matrix Z-matrix (compact) Qt::Horizontal 18 27 Qt::Horizontal 18 26 0 0 Hide Preview Molpro Version: < 2009.1 2009.1 Qt::Horizontal QSizePolicy::Preferred 40 20 true false false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Generate... Close titleLine calculationCombo theoryCombo basisCombo chargeSpin multiplicitySpin coordCombo moreButton previewText generateButton closeButton resetButton enableFormButton closeButton clicked() MolproInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessinputdialog.ui0000644000175000001440000027756212250371054026656 0ustar marcususers GamessInputDialog 0 0 785 660 GAMESS Input 0 &Basic Setup AM1 PM3 RHF B3LYP MP2 CCSD(T) STO-3G MINI 3-21G 6-31G(d) 6-31G(d,p) 6-31+G(d,p) 6-31+G(2d,p) 6-311++G(2d,p) Core Potential Qt::Horizontal 16 20 Singlet Doublet Triplet Qt::Horizontal 40 20 Multiplicity: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter basicOnLeftCombo Single Point Energy Equilibrium Geometry Transition State Frequencies Qt::Horizontal 40 20 Gas Water Qt::Horizontal 40 20 Calculate Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter With: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter In: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter basicWithLeftCombo Qt::Vertical 20 0 Charge: Dication Cation Neutral Anion Dianion Qt::Horizontal 40 20 &Advanced Setup 130 0 150 16777215 QFrame::StyledPanel QFrame::Plain true 17 true Advanced Basis Control SCF DFT MP2 Hessian Stat Point Data System MO Guess Misc 1 0 3 #D Heavy Atom Polarization Functions: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter None Read SBKJC Hay-Wadt Qt::Horizontal 1 20 Diffuse S-Shell on Heavy Atoms Diffuse L-Shell on Heavy Atoms Qt::Horizontal 10 20 Qt::Horizontal 40 20 Qt::Horizontal 10 20 Basis Set: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter basisSetCombo MINI MIDI STO-2G STO-3G STO-4G STO-5G STO-6G 3-21G 6-21G 4-31G 5-31G 6-31G 6-311G Double Zeta Valence Dunning/Hay DZ Binning/Curtiss DZ Triple Zeta Valence McLean/Chandler SBKJA Valence Hay/Wadt Valence MNDO AM1 PM3 Qt::Horizontal 10 20 3 3 ECP Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter basisECPCombo Default Pople Pople N311 Dunning Huzinaga Hondo7 #F Heavy Atom Polarization Functions: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter #light Atom Polarization Functions: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 3 Polar: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter basisPolarCombo Qt::Vertical 20 0 Max SCF Iterations: Energy Gradient Hessian Optimization Trudge Saddle Point IRC Gradient Extremal DRC Energy Surface Properties Morokuma Radiative Transition mom. Spin Orbit Finite Electric Field TDHF Global Optimization VSCF FMO Optimization Raman Intensities NMR Make EFP Qt::Horizontal 10 20 RHF UHF ROHF GVB MCSCF None (CI) Qt::Horizontal 10 20 None Foster-Boys Edmistron-Ruedenberg Pipek-Mezey Qt::Horizontal 10 20 SCF Type: Localization Method: Exec Type: CI: None GUGA Ames Lab. Determinant Occupation Restricted Multiple Active Space CI Singles Full Second Order CI General CI CC: None LCCD: Linearized CC CCD: CC with Doubles CCSD: CC with Singles and Doubles CCSD(T) R-CC CR-CC EOM-CCSD CR-EOM Qt::Horizontal QSizePolicy::Minimum 10 20 Multiplicity: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Normal Run Check Debug Other... Qt::Horizontal QSizePolicy::Minimum 10 20 Molecule Charge: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Run Type: Qt::Horizontal 40 20 Use MP2 Qt::Horizontal 40 20 Qt::LeftToRight false Use DFT Qt::Horizontal 40 20 -2 2 Qt::Vertical 20 0 # of Z-Matrix Variables Ǻngstrom Bohr Qt::Horizontal 40 20 Order of Principal Axis: Coordinate Type: C1 CS CI CnH CnV Cn S2n DnD DnH Dn TD TH T OH O Qt::Horizontal 40 20 Title Qt::Horizontal 40 22 Unique cartesian Coords. Hilderbrant internals Cartesian coordinates Z-Matrix MOPAC Z-Matrix Qt::Horizontal 40 22 Use Symmetry During Calculation true Units: Title: Qt::Horizontal 40 20 2 4 2 Qt::Horizontal 40 20 Point Group: Qt::Vertical 20 0 Minutes Hours Days Weeks Years Millenia Qt::Horizontal QSizePolicy::MinimumExpanding 40 20 MegaWords MegaBytes GigaWords GigaBytes Qt::Horizontal QSizePolicy::MinimumExpanding 40 20 MegaWords MegaBytes GigaWords GigaBytes Qt::Horizontal QSizePolicy::MinimumExpanding 40 20 Force Parallel Methods true Qt::Horizontal 16 20 Produce "core" file upon abort true Default EVVRSP GIVEIS JACOBI Time Limit: MemDDI: Memory: Diagonalization Method: Parallel Load Balance Type Loop false Next Value true Use External Data Representation for Messages Qt::Horizontal 40 0 1000.000000000000000 1000.000000000000000 Qt::Vertical 20 0 Initial Guess: basicInCombo Hückel HCore MO Read ($VEC) MO Saved (DICTNRY) Skip Qt::Horizontal 0 20 Rotate Alpha and Beta Orbitals Print the Initial Guess Qt::Vertical 20 0 GAMESS Interface to Other Codes MolPlt PltOrb AIMPAC RPAC Force a Check Run Type None true Hondo 8.2 MELDF GAMESS (UK Version) Gaussian 9x All Qt::Horizontal 0 20 Solvate with Water Qt::Horizontal 0 20 Qt::Vertical 20 0 Generate UHF Natural Orbitals Direct SCF Compute Only Changed in Fock Matrix Qt::Vertical 20 0 Slater exchange Becke 1988 exchange VWN: Vosko-Wilk-Nusair (VWN5) correlation LYP: Lee-Yang-Parr correlation SVWN: Slater exchange + VWN correlation BVWN: BECKE exchange + VWN5 correlation BLYP: BECKE exchange + LYP correlation B3LYP Gill 1996 exchange Perdew-Burke-Ernzerhof (PBE) exchange OP: One-parameter Progressive correlation SLYP: SLATER + Lee-Yang-Parr (LYP) correlation SOP: SLATER + OP correlation BOP: BECKE exchange + OP correlation BVWN: GILL exchange + VWN5 correlation GLYP: GILL exchange + LYP correlation PBEVWN: PBE exchange + VWN6 correlation PBELYP: PBE exchange +LYP correlation PBEOP: PBE exchange + OP correlation BHHLYP: HF and BECKE exchange + LYP correlation Qt::Horizontal 0 20 Grid Grid-Free Qt::Horizontal 0 20 DFT Functional: Method: Qt::Vertical 20 0 AO Integral Storage true Duplicated on Each Node Distributed Across All Nodes true words Memory: Compute MP2 Properties Integral Retention Cutoff: Use Localized Orbitals # of Core Electrons: Transformation Method true Two Phase Bin Sort Segmented Transformation true Qt::Vertical 20 0 Vibrational Analysis true Method Analytic true Numeric Double Differenced Hessian Print Internal Force Constants Displacement Size: Purify Hessian Frequency Scale Factor: bohrs 3 Qt::Vertical 20 0 Initial Hessian Guess (+ define) Read (from $HESS) Calculate Update Step Size true Print Orbs at Each Iteration Gradient Convergence Criteria: statPointConvergenceDouble 4 0.000000000000000 0.000100000000000 0.000100000000000 Jump Size: Stationary Point Optimization Method: controlSCFCombo Step Size Maximum: Minimum: statPointMinDouble Initial: statPointInitialDouble 99999.990000000005239 0.010000000000000 99999.990000000005239 0.100000000000000 0 100000.000000000000000 Newton-Raphson Rational Function Optimization Quadratic Approximation Schlegel (quasi-NR) Constrained Optimization steps Qt::Horizontal 40 20 Recalculate Hessian Every: statPointRecalculateSpin Follow Mode: Maximum Steps: statPointStepsSpin Qt::Vertical 20 0 Reset All Defaults Qt::Horizontal QSizePolicy::MinimumExpanding 10 20 Compute... Generate... Close 0 1 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/mopacinputdialog.ui0000644000175000001440000002617012250371054026461 0ustar marcususers MOPACInputDialog 0 0 649 465 0 0 MOPAC Input QLayout::SetFixedSize Title: titleLine Title Calculation: calculationCombo 0 Single Point Energy Geometry Optimization Frequencies Qt::Horizontal 18 27 Charge: chargeSpin -99 0 Qt::Horizontal 58 27 Multiplicity: Singlet Doublet Triplet Quartet Quintet Qt::Horizontal 40 20 Method: theoryCombo 0 AM1 MNDO MNDO-d PM3 PM6 RM1 Qt::Horizontal 58 27 Format: coordCombo true 0 Cartesian Z-matrix Qt::Horizontal 18 27 0 0 Show Preview Qt::Horizontal 40 20 true false false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Compute... Generate... Close titleLine calculationCombo theoryCombo coordCombo previewText generateButton closeButton resetButton enableFormButton closeButton clicked() MOPACInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/nwcheminputdialog.h0000644000175000001440000000573612250371054026462 0ustar marcususers/********************************************************************** NWChemInputDialog - Dialog for generating NWChem input decks Copyright (C) 2008-2009 Marcus D. Hanwell Copyright (C) 2009 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef NWCHEMINPUTDIALOG_H #define NWCHEMINPUTDIALOG_H #include "inputdialog.h" #include "ui_nwcheminputdialog.h" namespace Avogadro { class Molecule; class NWChemInputDialog : public InputDialog { Q_OBJECT public: explicit NWChemInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~NWChemInputDialog(); void setMolecule(Molecule *molecule); void readSettings(QSettings&); void writeSettings(QSettings&) const; enum calculationType{SP, OPT, FREQ}; enum theoryType{RHF, MP2, B3LYP, CCSD}; enum basisType{STO3G, B321G, B631Gd, B631Gdp, B631plusGd, B6311Gd, ccpVDZ, ccpVTZ, LANL2DZ}; enum coordType{CARTESIAN, ZMATRIX, ZMATRIX_COMPACT}; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::NWChemInputDialog ui; // Molecule* m_molecule; // Internal data structure for the calculation //QString m_title; calculationType m_calculationType; theoryType m_theoryType; basisType m_basisType; //int m_multiplicity; //int m_charge; QString m_output; coordType m_coordType; bool m_dirty; bool m_warned; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getCalculationType(calculationType t); QString getTheoryType(theoryType t); QString getBasisType(basisType t); // Enable/disable form elements void deckDirty(bool); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); void setTitle(); void setCalculation(int); void setTheory(int); void setBasis(int); void setMultiplicity(int); void setCharge(int); void setCoords(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/abinitinputdialog.cpp0000644000175000001440000010017512250371054026773 0ustar marcususers/********************************************************************** AbinitInputDialog - Dialog for generating Abinit input decks Copyright (C) 2010 Matthieu Verstraete copied from GaussianInputDialog This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "abinitinputdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { AbinitInputDialog::AbinitInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), // arguments, with default options? // Basic Tab m_title("Title"), m_ecut(10.0), m_coordType(XANGST), m_occopt(SEMICOND), m_tsmear(0.01), m_procs(1), m_ngkpt1(1), m_ngkpt2(1), m_ngkpt3(1), m_ionmov(NOMOV), m_nband(1), // Advanced Tab m_tolmxf(5.e-5), m_dilatmx(1.05), m_ecutsm(0.5), m_ntime(20), m_nshiftk(1), m_shiftk1(0.0), m_shiftk2(0.0), m_shiftk3(0.0), m_toleranceType(TOLDFE), m_tolXXX(1.e-10), // PAW Tab m_pawecutdg(20.0), // Rest m_dirty(false), m_warned(false), m_process(0), m_progress(0), m_logWindow(0) { ui.setupUi(this); // Connect the GUI elements to the correct slots // Basic Tab connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.ecutLineEdit, SIGNAL(editingFinished()), this, SLOT(setEcut())); connect(ui.coordCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCoordType(int))); connect(ui.occoptCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setOccopt(int))); connect(ui.tsmearLineEdit, SIGNAL(editingFinished()), this, SLOT(setTsmear())); connect(ui.procSpin, SIGNAL(valueChanged(int)), this, SLOT(setProcs(int))); connect(ui.ngkpt1Spin, SIGNAL(valueChanged(int)), this, SLOT(setNgkpt1(int))); connect(ui.ngkpt2Spin, SIGNAL(valueChanged(int)), this, SLOT(setNgkpt2(int))); connect(ui.ngkpt3Spin, SIGNAL(valueChanged(int)), this, SLOT(setNgkpt3(int))); connect(ui.ionmovCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setIonmov(int))); connect(ui.nbandSpin, SIGNAL(valueChanged(int)), this, SLOT(setNband(int))); // Advanced Tab connect(ui.tolmxfLineEdit, SIGNAL(editingFinished()), this, SLOT(setTolmxf())); connect(ui.dilatmxLineEdit, SIGNAL(editingFinished()), this, SLOT(setDilatmx())); connect(ui.ecutsmLineEdit, SIGNAL(editingFinished()), this, SLOT(setEcutsm())); connect(ui.ntimeSpin, SIGNAL(valueChanged(int)), this, SLOT(setNtime(int))); connect(ui.nshiftkSpin, SIGNAL(valueChanged(int)), this, SLOT(setNshiftk(int))); connect(ui.shiftk1LineEdit, SIGNAL(editingFinished()), this, SLOT(setShiftk1())); connect(ui.shiftk2LineEdit, SIGNAL(editingFinished()), this, SLOT(setShiftk2())); connect(ui.shiftk3LineEdit, SIGNAL(editingFinished()), this, SLOT(setShiftk3())); connect(ui.toleranceTypeCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setToleranceType(int))); connect(ui.tolXXXLineEdit, SIGNAL(editingFinished()), this, SLOT(setTolXXX())); // PAW Tab connect(ui.pawecutdgLineEdit, SIGNAL(editingFinished()), this, SLOT(setPawecutdg())); connect(ui.previewText, SIGNAL(textChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.computeButton, SIGNAL(clicked()), this, SLOT(computeClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); #ifdef WIN32 // Current code won't execute compute process on Windows. FIXME ui.computeButton->setVisible(false); #endif // WIN32 QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } AbinitInputDialog::~AbinitInputDialog() { QSettings settings; writeSettings(settings); } void AbinitInputDialog::writeSettings(QSettings &settings) const { // Basic Tab settings.setValue("abinit/Title", ui.titleLine->text()); settings.setValue("abinit/Ecut", ui.ecutLineEdit->text()); settings.setValue("abinit/CoordType", ui.coordCombo->currentIndex()); settings.setValue("abinit/Occopt", ui.occoptCombo->currentIndex()); settings.setValue("abinit/Tsmear", ui.tsmearLineEdit->text()); settings.setValue("abinit/Procs", ui.procSpin->value()); settings.setValue("abinit/Ngkpt1", ui.ngkpt1Spin->value()); settings.setValue("abinit/Ngkpt2", ui.ngkpt2Spin->value()); settings.setValue("abinit/Ngkpt3", ui.ngkpt3Spin->value()); settings.setValue("abinit/Ionmov", ui.ionmovCombo->currentIndex()); settings.setValue("abinit/Nband", ui.nbandSpin->value()); // Advanced Tab settings.setValue("abinit/Tolmxf", ui.tolmxfLineEdit->text()); settings.setValue("abinit/Dilatmx", ui.dilatmxLineEdit->text()); settings.setValue("abinit/Ecutsm", ui.ecutsmLineEdit->text()); settings.setValue("abinit/Ntime", ui.ntimeSpin->value()); settings.setValue("abinit/Nshiftk", ui.nshiftkSpin->value()); settings.setValue("abinit/Shiftk1", ui.shiftk1LineEdit->text()); settings.setValue("abinit/Shiftk2", ui.shiftk2LineEdit->text()); settings.setValue("abinit/Shiftk3", ui.shiftk3LineEdit->text()); settings.setValue("abinit/ToleranceType", ui.toleranceTypeCombo->currentIndex()); settings.setValue("abinit/TolXXX", ui.tolXXXLineEdit->text()); // PAW Tab settings.setValue("abinit/Pawecutdg", ui.pawecutdgLineEdit->text()); settings.setValue("abinit/savepath", m_savePath); } void AbinitInputDialog::readSettings(QSettings &settings) { // Basic Tab ui.titleLine->setText(settings.value("abinit/Title", "").toString()); setTitle(); ui.ecutLineEdit->setText(settings.value("abinit/Ecut", "10.0").toString()); setEcut(); ui.coordCombo->setCurrentIndex(settings.value("abinit/CoordType", 0).toInt()); setCoordType(settings.value("abinit/CoordType", 0).toInt()); ui.occoptCombo->setCurrentIndex(settings.value("abinit/Occopt", 0).toInt()); setOccopt(settings.value("abinit/Occopt", 0).toInt()); ui.tsmearLineEdit->setText(settings.value("abinit/Tsmear", "0.01").toString()); setTsmear(); ui.procSpin->setValue(settings.value("abinit/Procs", 1).toInt()); setProcs(settings.value("abinit/Procs", 1).toInt()); ui.ngkpt1Spin->setValue(settings.value("abinit/Ngkpt1", 1).toInt()); setNgkpt1(settings.value("abinit/Ngkpt1", 1).toInt()); ui.ngkpt2Spin->setValue(settings.value("abinit/Ngkpt2", 1).toInt()); setNgkpt2(settings.value("abinit/Ngkpt2", 1).toInt()); ui.ngkpt3Spin->setValue(settings.value("abinit/Ngkpt3", 1).toInt()); setNgkpt3(settings.value("abinit/Ngkpt3", 1).toInt()); ui.ionmovCombo->setCurrentIndex(settings.value("abinit/Ionmov", 0).toInt()); setIonmov(settings.value("abinit/Ionmov", 0).toInt()); ui.nbandSpin->setValue(settings.value("abinit/Nband", 0).toInt()); setNband(settings.value("abinit/Nband", 0).toInt()); // Advanced Tab ui.tolmxfLineEdit->setText(settings.value("abinit/Tolmxf", "5.e-5").toString()); setTolmxf(); ui.dilatmxLineEdit->setText(settings.value("abinit/Dilatmx", "1.05").toString()); setDilatmx(); ui.ecutsmLineEdit->setText(settings.value("abinit/Ecutsm", "0.5").toString()); setEcutsm(); ui.ntimeSpin->setValue(settings.value("abinit/Ntime", 10).toInt()); setNtime(settings.value("abinit/Ntime", 10).toInt()); ui.nshiftkSpin->setValue(settings.value("abinit/Nshiftk", 1).toInt()); setNshiftk(settings.value("abinit/Nshiftk", 1).toInt()); ui.shiftk1LineEdit->setText(settings.value("abinit/Shiftk1", "0.0").toString()); setShiftk1(); ui.shiftk2LineEdit->setText(settings.value("abinit/Shiftk2", "0.0").toString()); setShiftk2(); ui.shiftk3LineEdit->setText(settings.value("abinit/Shiftk3", "0.0").toString()); setShiftk3(); ui.toleranceTypeCombo->setCurrentIndex (settings.value("abinit/ToleranceType", 0).toInt()); setToleranceType(settings.value("abinit/ToleranceType", 0).toInt()); ui.tolXXXLineEdit->setText(settings.value("abinit/TolXXX", "1.e-10").toString()); setTolXXX(); // PAW Tab ui.pawecutdgLineEdit->setText(settings.value("abinit/Pawecutdg", "20.0").toString()); setPawecutdg(); m_savePath = settings.value("abinit/savepath").toString(); } void AbinitInputDialog::showEvent(QShowEvent *) { updatePreviewText(); if (pathToAbinit().isEmpty()) ui.computeButton->hide(); else ui.computeButton->show(); } QString AbinitInputDialog::pathToAbinit() const { QString returnPath; QStringList pathList; QStringList environment = QProcess::systemEnvironment(); // This is a pain // Each item in the list is a key-value pair // so we match PATH // and then we split out the value (the bit after the =) // and split the PATH by ':' characters foreach(const QString &key, environment) { if (key.startsWith(QLatin1String("PATH"))) pathList = key.split('=').at(1).split(':'); } // Add default abinit directories here... pathList << "/opt/etsf/bin"; // I don't know how this works for Windows -- probably need a different // method foreach(const QString &path, pathList) { QFileInfo abinit(path + '/' + "abinit"); if (abinit.exists() && abinit.isExecutable()) returnPath = abinit.canonicalFilePath(); } return returnPath; } void AbinitInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) { disconnect(m_molecule, 0, this, 0); } m_molecule = molecule; // Update the preview text whenever atoms are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void AbinitInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("Abinit Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, " "losing all changes made in the Abinit input " "deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) ui.previewText->setText(generateInputDeck()); } void AbinitInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); // Basic Tab ui.titleLine->setText(""); setTitle(); ui.ecutLineEdit->setText("10.0"); setEcut(); setCoordType(XANGST); setOccopt(SEMICOND); ui.tsmearLineEdit->setText("0.01"); setTsmear(); setProcs(1); setNgkpt1(1); setNgkpt2(1); setNgkpt3(1); setIonmov(NOMOV); setNband(0); // Advanced Tab ui.tolmxfLineEdit->setText("5.e-5"); setTolmxf(); ui.dilatmxLineEdit->setText("1.05"); setDilatmx(); ui.ecutsmLineEdit->setText("0.5"); setEcutsm(); setNtime(10); setNshiftk(1); ui.shiftk1LineEdit->setText("0.0"); setShiftk1(); ui.shiftk2LineEdit->setText("0.0"); setShiftk2(); ui.shiftk3LineEdit->setText("0.0"); setShiftk3(); setToleranceType(TOLDFE); ui.tolXXXLineEdit->setText("1.e-10"); setTolXXX(); // PAW Tab ui.pawecutdgLineEdit->setText("20.0"); setPawecutdg(); ui.procSpin->setValue(1); } QString AbinitInputDialog::saveInputFile(QString inputDeck, QString fileType, QString ext) { // Fragment copied from InputDialog // Try to set default save path for dialog using the next sequence: // 1) directory of current file (if any); // 2) directory where previous deck was saved; // 3) $HOME QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if(m_savePath == "") { if (defaultPath.isEmpty()) defaultPath = QDir::homePath(); } else { defaultPath = m_savePath; } QString defaultFileName = defaultPath + '/' + defaultFile.baseName(); QString fileName = QFileDialog::getSaveFileName(this, tr("Save Input Deck"), defaultFileName, fileType + " (*." + ext + ")"); if(fileName == "") return fileName; QFile file(fileName); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) return QString(); // end of copied // Fragment copied from InputDialog file.write(inputDeck.toLocal8Bit()); // prevent troubles in Windows file.close(); // flush buffer! m_savePath = QFileInfo(file).absolutePath(); return fileName; } void AbinitInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("Abinit_Input_Deck"), QString("in")); } void AbinitInputDialog::computeClicked() { if (m_process != 0) { QMessageBox::warning(this, tr("Abinit Running."), tr("Abinit is already running. Please wait " "until the previous calculation is finished.")); return; } QString fileName = saveInputFile(ui.previewText->toPlainText(), tr("Abinit_Input_Deck"), QString("in")); if (fileName.isEmpty()) return; QFileInfo info(pathToAbinit()); if (!info.exists() || !info.isExecutable()) { QMessageBox::warning(this, tr("Abinit Not Installed."), tr("The abinit executable cannot be found.")); return; } m_process = new QProcess(this); QFileInfo input(fileName); m_process->setWorkingDirectory(input.absolutePath()); // write file names to filesFileName QFileInfo inputFile(fileName); QString defaultPath = inputFile.canonicalPath(); QString outputFile = defaultPath + '/' + inputFile.baseName() + ".out"; QString filesFile = \ fileName + "\n" + \ inputFile.canonicalPath() + '/' + inputFile.baseName() + ".o" + "\n" + \ inputFile.canonicalPath() + '/' + inputFile.baseName() + ".inp" + "\n" + \ inputFile.canonicalPath() + '/' + inputFile.baseName() + ".out" + "\n" + \ inputFile.canonicalPath() + '/' + inputFile.baseName() + ".tmp" + "\n"; QString defaultFileName = defaultPath + '/' + inputFile.baseName(); QString pseudoFileName; QString pseudoDialogTitle; int iz = 0; foreach (int zz, m_znucl) { pseudoDialogTitle = "Pseudopotential for Z= " + QString::number(zz,10); pseudoFileName = QFileDialog::getOpenFileName(this, pseudoDialogTitle, defaultFileName, tr("Pseudos (*.hgh *.gth *.pspgth *.fhi *.pspnc " "*.paw *.mt *.UPF *.upf *.psp)")); // this makes sure the next psp will be searched for in the same directory defaultFileName = pseudoFileName; filesFile = filesFile + pseudoFileName + "\n"; iz++; } QString filesFileName = inputFile.canonicalPath() + '/' + inputFile.baseName() + ".files"; QFile file(filesFileName); if(!file.open(QIODevice::ReadWrite | QIODevice::Text)) { //complain ; } file.write(filesFile.toLocal8Bit()); // prevent troubles in Windows file.close(); QStringList arguments; m_process->setStandardInputFile(filesFileName); m_logFileName = inputFile.canonicalPath() + '/' + inputFile.baseName() + ".log"; m_process->setStandardOutputFile(m_logFileName); m_process->start(pathToAbinit(), arguments); if (!m_process->waitForStarted()) { QMessageBox::warning(this, tr("abinit failed to start."), tr("abinit did not start. Perhaps it is " "not installed correctly.")); } connect(m_process, SIGNAL(finished(int)), this, SLOT(finished(int))); m_progress = new QProgressDialog(this); m_progress->setRange(0,0); // indeterminate progress m_progress->setLabelText(tr("Running Abinit calculation...")); m_progress->show(); connect(m_progress, SIGNAL(canceled()), this, SLOT(stopProcess())); // print out log std output in a window... does not work for the // moment - do I need a window object to embed this in? // DLonie: Yes -- a QDialog with a QTextBrowser would be simplest. //m_logWindow = new QTextBrowser(this); //m_logWindow->setSource(m_logFileName); //connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(printLogOutput())); //connect(m_logWindow, SIGNAL(canceled()), this, SLOT(stoplogWindow())); } void AbinitInputDialog::printLogOutput() { if (m_logWindow) { m_logWindow->reload(); } } void AbinitInputDialog::stopProcess() { if (m_progress) { m_progress->deleteLater(); m_progress = 0; } disconnect(m_process, 0, this, 0); // don't send a "finished" signal m_process->close(); m_process->deleteLater(); m_process = 0; } void AbinitInputDialog::finished(int exitCode) { if (m_progress) { m_progress->cancel(); m_progress->deleteLater(); m_progress = 0; } if (m_process) { disconnect(m_process, 0, this, 0); m_process->deleteLater(); m_process = 0; } else { return; // we probably cancelled } if (exitCode) { QMessageBox::warning(this, tr("Abinit Crashed."), tr("Abinit did not run correctly. Perhaps " "it is not installed correctly.")); return; } // we have a successful run. // Now, read in the results and close the dialog QFileInfo inputFile(m_logFileName); QString outputFile = inputFile.canonicalPath() + '/' + inputFile.baseName() + ".o"; // for a relaxation run, need to add the _TIM10_ string too QString cmlFile = inputFile.canonicalPath() + '/' + inputFile.baseName() + "out.cml"; emit readOutput(cmlFile); close(); } void AbinitInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void AbinitInputDialog::enableFormClicked() { deckDirty(false); updatePreviewText(); } void AbinitInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->toPlainText() != generateInputDeck()) deckDirty(true); else deckDirty(false); } void AbinitInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void AbinitInputDialog::setEcut() { bool ok; double d = ui.ecutLineEdit->text().toDouble(&ok); if (ok && d > 1.e-10) m_ecut = d; updatePreviewText(); } void AbinitInputDialog::setCoordType(int n) { switch (n) { case 0: m_coordType = XANGST; break; case 1: m_coordType = XRED; break; default: m_coordType = XANGST; } updatePreviewText(); } void AbinitInputDialog::setOccopt(int n) { switch (n) { case 0: m_occopt = SEMICOND; break; case 1: m_occopt = FERMI; break; case 2: m_occopt = COLD; break; case 3: m_occopt = GAUSSIAN; break; default: m_occopt = SEMICOND; } updatePreviewText(); } void AbinitInputDialog::setTsmear() { bool ok; double d = ui.tsmearLineEdit->text().toDouble(&ok); if (ok && d > 1.e-10) m_tsmear = d; updatePreviewText(); } void AbinitInputDialog::setProcs(int n) { if (n > 0) m_procs = n; updatePreviewText(); } void AbinitInputDialog::setNgkpt1(int n) { if (n > 0) m_ngkpt1 = n; updatePreviewText(); } void AbinitInputDialog::setNgkpt2(int n) { if (n > 0) m_ngkpt2 = n; updatePreviewText(); } void AbinitInputDialog::setNgkpt3(int n) { if (n > 0) m_ngkpt3 = n; updatePreviewText(); } void AbinitInputDialog::setIonmov(int n) { switch (n) { case 0: m_ionmov = NOMOV; break; case 1: m_ionmov = VISCOUS; break; case 2: m_ionmov = BFGS; break; case 3: m_ionmov = BGFSE; break; default: m_ionmov = NOMOV; } updatePreviewText(); } // TODO : check that nban 0 gives default behavior in abinit of // getting nelec/2 + 10% or so void AbinitInputDialog::setNband(int n) { if (n >= 0) m_nband = n; updatePreviewText(); } // Advanced Tab void AbinitInputDialog::setTolmxf() { bool ok; double d = ui.tolmxfLineEdit->text().toDouble(&ok); if (ok && d > 0.0) m_tolmxf = d; updatePreviewText(); } void AbinitInputDialog::setDilatmx() { bool ok; double d = ui.dilatmxLineEdit->text().toDouble(&ok); if (ok && d > 1.0) m_dilatmx = d; updatePreviewText(); } void AbinitInputDialog::setEcutsm() { bool ok; double d = ui.ecutsmLineEdit->text().toDouble(&ok); if (ok && d > 0.0) m_ecutsm = d; updatePreviewText(); } void AbinitInputDialog::setNtime(int n) { if (n > 0) m_ntime = n; updatePreviewText(); } // TODO : this should influence the number of lines of shiftk we // accept. Do not know how to do this in Qt void AbinitInputDialog::setNshiftk(int n) { if (n > 0) m_nshiftk = n; updatePreviewText(); } void AbinitInputDialog::setShiftk1() { bool ok; double d = ui.shiftk1LineEdit->text().toDouble(&ok); if (ok && abs(d) <= 1.0) m_shiftk1 = d; updatePreviewText(); } void AbinitInputDialog::setShiftk2() { bool ok; double d = ui.shiftk2LineEdit->text().toDouble(&ok); if (ok && abs(d) <= 1.0) m_shiftk2 = d; updatePreviewText(); } void AbinitInputDialog::setShiftk3() { bool ok; double d = ui.shiftk3LineEdit->text().toDouble(&ok); if (ok && abs(d) <= 1.0) m_shiftk3 = d; updatePreviewText(); } void AbinitInputDialog::setToleranceType(int n) { switch (n) { case 0: m_toleranceType = TOLDFE; break; case 1: m_toleranceType = TOLWFR; break; case 2: m_toleranceType = TOLVRS; break; case 3: m_toleranceType = TOLDFF; break; default: m_toleranceType = TOLRFF; } updatePreviewText(); } void AbinitInputDialog::setTolXXX() { bool ok; double d = ui.tolXXXLineEdit->text().toDouble(&ok); if (ok && d > 0.0) m_tolXXX = d; updatePreviewText(); } // PAW Tab void AbinitInputDialog::setPawecutdg() { bool ok; double d = ui.pawecutdgLineEdit->text().toDouble(&ok); if (ok && d > 0.0) m_pawecutdg = d; updatePreviewText(); } QString AbinitInputDialog::generateInputDeck() { if (!m_molecule || m_molecule->numAtoms() == 0) { return QString(""); } // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); // Title line mol << "# " << m_title << "\n"; mol << "# abinit input generated by Avogadro plugin\n"; // for information: this should be used when calling abinit with // mpirun or something mol << "# abinit found at " << pathToAbinit() << "\n"; if (m_procs > 1) mol << "# Number of processors should be =" << m_procs << '\n'; mol << "\n\n"; mol << "# basis set, bands, k-points, SCF tolerance\n"; mol << "ecut " << m_ecut << '\n'; if (m_pawecutdg > 0.0) mol << "pawecutdg " << m_pawecutdg << '\n'; // nband is only output if it is actually set to something > 1 (default) // otherwise abinit will get it automatically if (m_nband > 1) mol << "nband " << m_nband << '\n'; mol << "occopt " << getOccopt(m_occopt) << '\n'; mol << "tsmear " << m_tsmear << '\n'; mol << "ngkpt " << m_ngkpt1 << " " << m_ngkpt2 << " " << m_ngkpt3 << '\n'; mol << "nshiftk " << m_nshiftk << '\n'; mol << "shiftk " << '\n'; mol << " " << m_shiftk1 << " " << m_shiftk2 << " " << m_shiftk3 << '\n'; mol << getToleranceType(m_toleranceType) << " " << m_tolXXX << '\n'; mol << "# unit cell\n"; OBUnitCell *uc = m_molecule->OBUnitCell(); if (uc) { mol << "acell " << uc->GetA() << " " << uc->GetB() << " " << uc->GetC() << " Angstr \n"; mol << "angdeg " << uc->GetAlpha() << " " << uc->GetBeta() << " " << uc->GetGamma() << "\n"; } // If we have a molecule, invent the box it will live in // TODO: check the box is big enough: get molecule size and add a bit in // each direction, or make it a ui input. else { mol << "acell 10.0 10.0 10.0 Angstr\n"; // defaults to a rectangular box } // Now to output the actual molecular coordinates // could also print an auxiliary xyz file and just give the name to abinit... // Cartesian coordinates mol << "# Atomic positions and species\n"; mol << "natom " << m_molecule->numAtoms() << "\n"; QList atoms = m_molecule->atoms(); if (m_molecule && m_coordType == XANGST) { // positions of all atoms mol << "xangst\n"; foreach (Atom *atom, atoms) { mol << qSetFieldWidth(3) << left << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << atom->pos()->x() << atom->pos()->y() << atom->pos()->z() << qSetFieldWidth(0) << '\n'; } } // Reduced coordinates else if (m_molecule && m_coordType == XRED) { mol << "Not implemented yet\n"; /* QTextStream mol(&buffer); OpenBabel::OBAtom *a, *b, *c; double r, w, t; std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); */ } // Z of each atom QList Zatom, Zatom_sorted; foreach (Atom *atom, atoms) { Zatom.append(atom->atomicNumber()); Zatom_sorted.append(atom->atomicNumber()); } qSort(Zatom_sorted); // number of types of atoms unsigned int iatom, iz; int ntypat = 1; int TypatofZ[200]; for (iz = 0; iz < 200; iz++) { TypatofZ[iz] = 0; }; QList ZofTypat; ZofTypat.append(Zatom_sorted[0]); TypatofZ[int(Zatom_sorted[0])] = ntypat; // start with second atom (have at least 1) for (iatom = 1; iatom < m_molecule->numAtoms(); iatom++) { if(Zatom_sorted[iatom] != Zatom_sorted[iatom-1]) { ntypat++; ZofTypat.append(Zatom_sorted[iatom]); TypatofZ[int(Zatom_sorted[iatom])] = ntypat; } } mol << "ntypat " << ntypat << '\n'; mol << "znucl "; m_znucl.clear(); foreach (int Z, ZofTypat) { mol << Z << " " ; m_znucl << Z; } mol << "\n" ; mol << "typat "; for (iatom = 0; iatom < m_molecule->numAtoms(); iatom++) { mol << TypatofZ[int(Zatom[iatom])] << " "; } mol << "\n\n"; mol << "# Geometrical relaxation\n"; mol << "ionmov " << getIonmov(m_ionmov) << '\n'; mol << "ntime " << m_ntime << '\n'; mol << "tolmxf " << m_tolmxf << '\n'; mol << "dilatmx " << m_dilatmx << '\n'; mol << "ecutsm " << m_ecutsm << '\n'; mol << "\n\n"; mol << "# Other stuff\n"; mol << "prtcml 1 \n"; return buffer; } int AbinitInputDialog::getOccopt(occoptType t) { // Translate the enum to text for the output generation switch (t) { case SEMICOND: return 1; case FERMI: return 3; case COLD: return 4; case GAUSSIAN: return 7; default: return 0; } } int AbinitInputDialog::getIonmov(ionmovType t) { // Translate the enum to text for the output generation switch (t) { case NOMOV: return 0; case VISCOUS: return 1; case BFGS: return 2; case BGFSE: return 3; default: return 0; } } QString AbinitInputDialog::getCoordType(coordType t) { // Translate the enum to text for the output generation switch (t) { case XANGST: return "xangst"; case XRED: return "xred"; default: return "xangst"; } } QString AbinitInputDialog::getToleranceType(toleranceType t) { // Translate the enum to text for the output generation switch (t) { case TOLDFE: return "toldfe"; case TOLWFR: return "tolwfr"; case TOLVRS: return "tolvrs"; case TOLDFF: return "toldff"; case TOLRFF: return "tolrff"; default: return "toldfe"; } } void AbinitInputDialog::deckDirty(bool dirty) { m_dirty = dirty; // Basic Tab ui.titleLine->setEnabled(!dirty); ui.ecutLineEdit->setEnabled(!dirty); ui.coordCombo->setEnabled(!dirty); ui.occoptCombo->setEnabled(!dirty); ui.tsmearLineEdit->setEnabled(!dirty); ui.procSpin->setEnabled(!dirty); ui.ngkpt1Spin->setEnabled(!dirty); ui.ngkpt2Spin->setEnabled(!dirty); ui.ngkpt3Spin->setEnabled(!dirty); ui.ionmovCombo->setEnabled(!dirty); ui.nbandSpin->setEnabled(!dirty); // Advanced Tab ui.tolmxfLineEdit->setEnabled(!dirty); ui.dilatmxLineEdit->setEnabled(!dirty); ui.ecutsmLineEdit->setEnabled(!dirty); ui.ntimeSpin->setEnabled(!dirty); ui.nshiftkSpin->setEnabled(!dirty); ui.shiftk1LineEdit->setEnabled(!dirty); ui.shiftk2LineEdit->setEnabled(!dirty); ui.shiftk3LineEdit->setEnabled(!dirty); ui.toleranceTypeCombo->setEnabled(!dirty); ui.tolXXXLineEdit->setEnabled(!dirty); // PAW Tab ui.pawecutdgLineEdit->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/mopacinputdialog.cpp0000644000175000001440000003635112250371054026630 0ustar marcususers/********************************************************************** MOPACInputDialog - Dialog for generating MOPAC input decks Copyright (C) 2009 Geoffrey Hutchison Copyright (C) 2008-2009 Marcus Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "mopacinputdialog.h" #include #include #include #include //#include #include #include #include #include namespace Avogadro { using OpenBabel::OBAtom; using OpenBabel::OBInternalCoord; using OpenBabel::OBMolAtomIter; using OpenBabel::etab; #ifdef Q_WS_WIN const QString MOPACInputDialog::mopacPath("C:\Program Files\MOPAC\MOPAC2009.exe"); #else const QString MOPACInputDialog::mopacPath("/opt/mopac/MOPAC2009.exe"); #endif MOPACInputDialog::MOPACInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_calculationType(OPT), m_theoryType(PM6), m_coordType(CARTESIAN), m_dirty(false), m_warned(false), m_previewVisible(false), m_process(0), m_progress(0) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.multiplicityCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setMultiplicity(int))); connect(ui.chargeSpin, SIGNAL(valueChanged(int)), this, SLOT(setCharge(int))); connect(ui.coordCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCoords(int))); connect(ui.previewText, SIGNAL(textChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.computeButton, SIGNAL(clicked()), this, SLOT(computeClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } MOPACInputDialog::~MOPACInputDialog() { QSettings settings; writeSettings(settings); } void MOPACInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) disconnect(m_molecule, 0, this, 0); m_molecule = molecule; // Update the preview text whenever atoms are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void MOPACInputDialog::showEvent(QShowEvent *) { updatePreviewText(); QFileInfo info(mopacPath); if (!info.exists() || !info.isExecutable()) { ui.computeButton->hide(); } else ui.computeButton->show(); } void MOPACInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("MOPAC Input Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the MOPAC input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); } } void MOPACInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); QSettings emptySettings; readSettings(emptySettings); } void MOPACInputDialog::generateClicked() { //saveInputFile(); saveInputFile(ui.previewText->toPlainText(), tr("MOPAC Input Deck"), QString("mop")); } void MOPACInputDialog::computeClicked() { if (m_process != 0) { QMessageBox::warning(this, tr("MOPAC Running."), tr("MOPAC is already running. Wait until the previous calculation is finished.")); return; } QString fileName = saveInputFile(ui.previewText->toPlainText(), tr("MOPAC Input Deck"), QString("mop")); if (fileName.isEmpty()) return; QFileInfo info(mopacPath); if (!info.exists() || !info.isExecutable()) { QMessageBox::warning(this, tr("MOPAC Not Installed."), tr("The MOPAC executable, cannot be found.")); return; } m_process = new QProcess(this); QFileInfo input(fileName); m_process->setWorkingDirectory(input.absolutePath()); QStringList arguments; arguments << fileName; m_inputFile = fileName; // save for reading in output m_process->start(mopacPath, arguments); if (!m_process->waitForStarted()) { QMessageBox::warning(this, tr("MOPAC failed to start."), tr("MOPAC did not start. Perhaps it is not installed correctly.")); } connect(m_process, SIGNAL(finished(int)), this, SLOT(finished(int))); m_progress = new QProgressDialog(this); m_progress->setRange(0,0); // indeterminate progress m_progress->setLabelText(tr("Running MOPAC calculation...")); m_progress->show(); connect(m_progress, SIGNAL(canceled()), this, SLOT(stopProcess())); } void MOPACInputDialog::stopProcess() { if (m_progress) { m_progress->deleteLater(); m_progress = 0; } disconnect(m_process, 0, this, 0); // don't send a "finished" signal m_process->close(); m_process->deleteLater(); m_process = 0; } void MOPACInputDialog::finished(int exitCode) { if (m_progress) { m_progress->cancel(); m_progress->deleteLater(); m_progress = 0; } if (m_process) { disconnect(m_process, 0, this, 0); m_process->deleteLater(); m_process = 0; } else { return; // we probably cancelled } if (exitCode) { QMessageBox::warning(this, tr("MOPAC Crashed."), tr("MOPAC did not run correctly. Perhaps it is not installed correctly.")); return; } if (!m_molecule) return; // we have a successful run. Read in the results and close the dialog QFileInfo inputFile(m_inputFile); QString outputFile = inputFile.canonicalPath() + '/' + inputFile.baseName() + ".out"; emit readOutput(outputFile); close(); } void MOPACInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); m_previewVisible = false; } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); m_previewVisible = true; } } void MOPACInputDialog::enableFormClicked() { updatePreviewText(); } void MOPACInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->toPlainText() != generateInputDeck()) deckDirty(true); else deckDirty(false); } void MOPACInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void MOPACInputDialog::setCalculation(int n) { switch (n) { case 0: m_calculationType = SP; break; case 2: m_calculationType = FREQ; break; case 1: default: m_calculationType = OPT; } updatePreviewText(); } void MOPACInputDialog::setTheory(int n) { switch (n) { case 0: m_theoryType = AM1; break; case 1: m_theoryType = MNDO; break; case 2: m_theoryType = MNDOD; break; case 3: m_theoryType = PM3; break; case 5: m_theoryType = RM1; break; case 4: default: m_theoryType = PM6; } updatePreviewText(); } void MOPACInputDialog::setMultiplicity(int n) { m_multiplicity = n + 1; updatePreviewText(); } void MOPACInputDialog::setCharge(int n) { m_charge = n; updatePreviewText(); } void MOPACInputDialog::setCoords(int n) { switch (n) { case 0: m_coordType = CARTESIAN; break; case 1: m_coordType = ZMATRIX; break; default: m_coordType = CARTESIAN; } updatePreviewText(); } QString MOPACInputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); mol << " AUX LARGE "; mol << "CHARGE=" << m_charge << ' '; switch (m_multiplicity) { case 2: mol << "DOUBLET "; break; case 3: mol << "TRIPLET "; break; case 4: mol << "QUARTET "; break; case 5: mol << "QUINTET "; break; case 1: default: mol << "SINGLET "; } mol << getCalculationType(m_calculationType) << ' '; mol << getTheoryType(m_theoryType) << '\n'; mol << m_title << "\n\n"; // Now to output the actual molecular coordinates QString optimizationFlag; if (m_calculationType == SP) optimizationFlag = " 0 "; // we could actually obey constraints easily else optimizationFlag = " 1 "; // Cartesian coordinates if (m_molecule && m_coordType == CARTESIAN) { QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { mol << qSetFieldWidth(4) << right << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << atom->pos()->x() << optimizationFlag << atom->pos()->y() << optimizationFlag << atom->pos()->z() << optimizationFlag << qSetFieldWidth(0) << '\n'; } } // Z-matrix else if (m_molecule && m_coordType == ZMATRIX) { OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; mol << qSetFieldWidth(4) << right << QString(etab.GetSymbol(atom->GetAtomicNum())); QString buffer = QString("%1 %2 %3 %4 %5 %6") .arg(r, 10, 'f', 6) .arg(optimizationFlag) .arg(w, 10, 'f', 6) .arg(optimizationFlag) .arg(t, 10, 'f', 6) .arg(optimizationFlag); mol << buffer; int aIndex, bIndex, cIndex; aIndex = bIndex = cIndex = 0; if (atom->GetIdx() > 1) aIndex = a->GetIdx(); if (atom->GetIdx() > 2) bIndex = b->GetIdx(); if (atom->GetIdx() > 3) cIndex = c->GetIdx(); mol << ' ' << aIndex << ' ' << bIndex << ' ' << cIndex << '\n'; } foreach(OBInternalCoord *c, vic) delete c; } mol << "\n\n"; return buffer; } QString MOPACInputDialog::getCalculationType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case SP: return "NOOPT"; case FREQ: return "FORCE"; case OPT: default: return ""; } } QString MOPACInputDialog::getTheoryType(theoryType t) { // Translate the enum to text for the output generation switch (t) { case AM1: return "AM1"; case MNDO: return "MNDO"; case MNDOD: return "MNDOD"; case PM3: return "PM3"; case RM1: return "RM1"; case PM6: default: return "PM6"; } } void MOPACInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.multiplicityCombo->setEnabled(!dirty); ui.chargeSpin->setEnabled(!dirty); ui.coordCombo->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } void MOPACInputDialog::writeSettings(QSettings &settings) const { settings.setValue("mopac/CalcType", ui.calculationCombo->currentIndex()); settings.setValue("mopac/Theory", ui.theoryCombo->currentIndex()); settings.setValue("mopac/Coord", ui.coordCombo->currentIndex()); settings.setValue("mopac/Preview", m_previewVisible); settings.setValue("mopac/savepath", m_savePath); } void MOPACInputDialog::readSettings(QSettings &settings) { setCalculation(settings.value("mopac/CalcType", 1).toInt()); ui.calculationCombo->setCurrentIndex(m_calculationType); setTheory(settings.value("mopac/Theory", 4).toInt()); ui.theoryCombo->setCurrentIndex(m_theoryType); setCoords(settings.value("mopac/Coord", 0).toInt()); ui.coordCombo->setCurrentIndex(m_coordType); ui.previewText->setVisible(settings.value("mopac/Preview", false).toBool()); m_savePath = settings.value("mopac/savepath").toString(); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/lammpsinputdialog.h0000644000175000001440000001257312250371054026467 0ustar marcususers/********************************************************************** LammpsInputDialog - Dialog for generating LAMMPS input decks Copyright (C) 2012 Albert DeFusco This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef LAMMPSINPUTDIALOG_H #define LAMMPSINPUTDIALOG_H #include "inputdialog.h" #include "ui_lammpsinputdialog.h" #include namespace Avogadro { class Molecule; class LammpsInputDialog : public InputDialog { Q_OBJECT public: explicit LammpsInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~LammpsInputDialog(); void readSettings(QSettings&); void writeSettings(QSettings&) const; enum unitType{lj, real, metal, si, cgs, u_electron}; enum dimensionType{d2, d3}; enum boundaryType{p, s, f, m, fs, fm}; enum atomStyle{ angle, atomic, bond, charge, dipole, a_electron, ellipsoid, full, line, meso, molecular, peri, sphere, tri, wavepacket}; enum waterPotential{ NONE, SPC, SPCE}; void setMolecule(Molecule *molecule); enum ensemble{NVT, NVE}; enum velocityDist{gaussian, uniform}; enum thermoStyle{one, multi}; //enum calculationType{SP, OPT, FREQ}; //enum theoryType{RHF, MP2, B3LYP, CCSD, CCSDT}; //enum basisType{STO3G, B321G, B631Gd, B631Gdp, B631plusGd, B6311Gd, ccpVDZ, ccpVTZ, AUGccpVDZ, AUGccpVTZ}; //enum coordType{CARTESIAN, ZMATRIX, ZMATRIX_COMPACT}; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::LammpsInputDialog ui; //QString m_title; QString m_readData; unitType m_unitType; dimensionType m_dimensionType; boundaryType m_xBoundaryType; boundaryType m_yBoundaryType; boundaryType m_zBoundaryType; atomStyle m_atomStyle; waterPotential m_waterPotential; //coordType m_coordType; ensemble m_ensemble; double m_temperature; int m_nhChain; double m_timeStep; int m_runSteps; int m_xReplicate; int m_yReplicate; int m_zReplicate; QString m_dumpXYZ; int m_dumpStep; velocityDist m_velocityDist; double m_velocityTemp; bool m_zeroMOM; bool m_zeroL; thermoStyle m_thermoStyle; int m_thermoInterval; QString m_output; bool m_dirty; bool m_warned; bool readData; // Generate an input deck as a string QString generateInputDeck(); QString getUnitType(unitType t); QString getAtomStyle(atomStyle t); QString getDimensionType(dimensionType t); QString getXBoundaryType(boundaryType t); QString getYBoundaryType(boundaryType t); QString getZBoundaryType(boundaryType t); QString getWaterPotential(waterPotential t); QString getEnsemble(ensemble t); QString getVelocityDist(velocityDist t); QString getZeroMOM(); QString getZeroL(); QString getThermoStyle(thermoStyle t); // Translate enums to strings //QString getCalculationType(calculationType t); //QString getWavefunction(void); //QString getTheoryType(theoryType t); //QString getBasisType(basisType t); // Enable/disable form elements void deckDirty(bool); void determineAtomTypesSPC(int &hyd, int &oxy); //system typing QHash AtomType; QHash AtomMass; QHash::iterator itr; public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); void setTitle(); void setReadData(); void setUnits(int); void setAtomStyle(int); void setDimensionType(int); void setXBoundaryType(int); void setYBoundaryType(int); void setZBoundaryType(int); void setWaterPotential(int); void setEnsemble(int); void setTemperature(double); void setNHChain(int); void setTimeStep(double); void setRunSteps(int); void setXReplicate(int); void setYReplicate(int); void setZReplicate(int); void setDumpXYZ(); void setDumpStep(int); void setVelocityDist(int); void setVelocityTemp(double); void setZeroMOM(bool); void setZeroL(bool); void setThermoStyle(int); void setThermoInterval(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/nwcheminputdialog.cpp0000644000175000001440000004021612250371054027005 0ustar marcususers/********************************************************************** NWChemInputDialog - Dialog for generating NWChem input decks Copyright (C) 2008-2009 Marcus D. Hanwell Copyright (C) 2009 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "nwcheminputdialog.h" #include #include #include #include //#include #include #include #include using namespace OpenBabel; namespace Avogadro { NWChemInputDialog::NWChemInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_calculationType(OPT), m_theoryType(B3LYP), m_basisType(B631Gd), m_output(), m_coordType(CARTESIAN), m_dirty(false), m_warned(false) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.basisCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBasis(int))); connect(ui.multiplicitySpin, SIGNAL(valueChanged(int)), this, SLOT(setMultiplicity(int))); connect(ui.chargeSpin, SIGNAL(valueChanged(int)), this, SLOT(setCharge(int))); connect(ui.coordCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCoords(int))); connect(ui.previewText, SIGNAL(cursorPositionChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } NWChemInputDialog::~NWChemInputDialog() { QSettings settings; writeSettings(settings); } void NWChemInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) disconnect(m_molecule, 0, this, 0); m_molecule = molecule; // Set multiplicity to the OB value OpenBabel::OBMol obmol = m_molecule->OBMol(); setMultiplicity(obmol.GetTotalSpinMultiplicity()); // Update the preview text whenever primitives are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void NWChemInputDialog::showEvent(QShowEvent *) { updatePreviewText(); } void NWChemInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("NWChem Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the NWChem input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } } void NWChemInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.calculationCombo->setCurrentIndex(1); ui.theoryCombo->setCurrentIndex(3); ui.basisCombo->setCurrentIndex(2); ui.multiplicitySpin->setValue(0); ui.chargeSpin->setValue(0); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } void NWChemInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("NWChem Input Deck"), QString("nw")); } void NWChemInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void NWChemInputDialog::enableFormClicked() { updatePreviewText(); } void NWChemInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->document()->isModified()) deckDirty(true); } void NWChemInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void NWChemInputDialog::setCalculation(int n) { m_calculationType = (NWChemInputDialog::calculationType) n; updatePreviewText(); } void NWChemInputDialog::setTheory(int n) { m_theoryType = (NWChemInputDialog::theoryType) n; ui.basisCombo->setEnabled(true); if (m_theoryType == B3LYP) { ui.multiplicitySpin->setEnabled(true); } else { ui.multiplicitySpin->setEnabled(false); } updatePreviewText(); } void NWChemInputDialog::setBasis(int n) { m_basisType = (NWChemInputDialog::basisType) n; updatePreviewText(); } void NWChemInputDialog::setMultiplicity(int n) { m_multiplicity = n; if (ui.multiplicitySpin->value() != n) { ui.multiplicitySpin->setValue(n); } updatePreviewText(); } void NWChemInputDialog::setCharge(int n) { m_charge = n; updatePreviewText(); } void NWChemInputDialog::setCoords(int n) { m_coordType = (NWChemInputDialog::coordType) n; updatePreviewText(); } QString NWChemInputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); // Print input in output mol << "echo\n\n"; // Get the title and start the job mol << "start molecule\n\n"; // Title mol << "title \"" << m_title << "\"\n"; // Now for the charge mol << "charge " << m_charge << "\n\n"; // Geometry specification mol << "geometry units angstroms print"; // Now to output the actual molecular coordinates // Cartesian coordinates if (m_molecule && m_coordType == CARTESIAN) { QTextStream mol(&buffer); mol << " xyz autosym\n"; QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { mol << qSetFieldWidth(4) << right << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << atom->pos()->x() << atom->pos()->y() << atom->pos()->z() << qSetFieldWidth(0) << '\n'; } } // Z-matrix else if (m_molecule && m_coordType == ZMATRIX) { QTextStream mol(&buffer); mol.setFieldAlignment(QTextStream::AlignAccountingStyle); mol << "\n zmatrix\n"; OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; mol << qSetFieldWidth(3) << QString(etab.GetSymbol(atom->GetAtomicNum())); if (atom->GetIdx() > 1) mol << qSetFieldWidth(0) << " " << qSetFieldWidth(3) << QString::number(a->GetIdx()) << qSetFieldWidth(0) << " "<< qSetFieldWidth(4) << QString("r") + QString::number(atom->GetIdx()); if (atom->GetIdx() > 2) mol << qSetFieldWidth(0) << " " << qSetFieldWidth(3) << QString::number(b->GetIdx()) << qSetFieldWidth(0) << " "<< qSetFieldWidth(4) << QString("a") + QString::number(atom->GetIdx()); if (atom->GetIdx() > 3) mol << qSetFieldWidth(0) << " " << qSetFieldWidth(3) << QString::number(c->GetIdx()) << qSetFieldWidth(0) << " "<< qSetFieldWidth(4) << QString("d") + QString::number(atom->GetIdx()); mol << qSetFieldWidth(0) << '\n'; } mol << " variables\n"; FOR_ATOMS_OF_MOL(atom, &obmol) { r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; if (atom->GetIdx() > 1) mol << " r" << atom->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r << qSetFieldWidth(0) << '\n'; if (atom->GetIdx() > 2) mol << " a" << atom->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w << qSetFieldWidth(0) << '\n'; if (atom->GetIdx() > 3) mol << " d" << atom->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t << qSetFieldWidth(0) << '\n'; } mol << " end\n"; foreach (OpenBabel::OBInternalCoord *c, vic) delete c; } // Compact ZMatrix else if (m_molecule && m_coordType == ZMATRIX_COMPACT) { QTextStream mol(&buffer); mol << " zmatrix\n"; OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; mol << qSetFieldWidth(4) << right << QString(etab.GetSymbol(atom->GetAtomicNum()) + QString::number(atom->GetIdx())); if (atom->GetIdx() > 1) mol << qSetFieldWidth(6) << right << QString(etab.GetSymbol(a->GetAtomicNum()) + QString::number(a->GetIdx())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r; if (atom->GetIdx() > 2) mol << qSetFieldWidth(6) << right << QString(etab.GetSymbol(b->GetAtomicNum()) + QString::number(b->GetIdx())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w; if (atom->GetIdx() > 3) mol << qSetFieldWidth(6) << right << QString(etab.GetSymbol(c->GetAtomicNum()) + QString::number(c->GetIdx())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t; mol << qSetFieldWidth(0) << '\n'; } foreach (OpenBabel::OBInternalCoord *c, vic) delete c; } mol << "end\n\n"; // Basis set mol << "basis"; // Need spherical keyword if using Dunning correlation consistent basis sets if ( m_basisType == ccpVDZ || m_basisType == ccpVTZ ) mol << " spherical"; mol << endl; mol << " * library " << getBasisType(m_basisType) << '\n'; mol << "end\n\n"; // theory directives (multiplicity, too) switch (m_theoryType) { case B3LYP: mol << "dft\n xc b3lyp\n mult " << m_multiplicity << "\nend\n\n"; break; case MP2: mol << "mp2\n"; mol << " # Exclude core electrons from MP2 treatment\n"; mol << " freeze atomic\n"; mol << "end\n\n"; break; case CCSD: mol << "ccsd\n"; mol << " # Exclude core electrons from CCSD treatment\n"; mol << " freeze atomic\n"; mol << "end\n\n"; break; default: case RHF: break; } // Task directive mol << "task "; // Set theory level: switch (m_theoryType) { case B3LYP: mol << "dft "; break; case CCSD: mol << "ccsd "; break; case MP2: mol << "mp2 "; break; default: case RHF: mol << "scf "; break; } mol << getCalculationType(m_calculationType) << endl; return buffer; } QString NWChemInputDialog::getCalculationType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case SP: return "energy"; case OPT: return "optimize"; case FREQ: return "freq"; default: return ""; } } QString NWChemInputDialog::getTheoryType(theoryType t) { // Translate the enum to text for the output generation switch (t) {// enum theoryType{RHF, B3LYP, B3LYP5, EDF1, M062X, MP2, CCSD} case RHF: return "RHF"; case B3LYP: return "B3LYP"; case MP2: return "MP2"; case CCSD: return "CCSD"; default: return "RHF"; } } QString NWChemInputDialog::getBasisType(basisType t) { // Translate the enum to text for the output generation switch (t) { case STO3G: return "STO-3G"; case B321G: return "3-21G"; case B631Gd: return "6-31G*"; case B631Gdp: return "6-31G**"; case B631plusGd: return "6-31+G*"; case B6311Gd: return "6-311G*"; case ccpVDZ: return "cc-pVDZ"; case ccpVTZ: return "cc-pVTZ"; case LANL2DZ: return "LANL2DZ ECP"; default: return "6-31G*"; } } void NWChemInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.basisCombo->setEnabled(!dirty); ui.multiplicitySpin->setEnabled(!dirty); ui.chargeSpin->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } void NWChemInputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("nwchem/savepath").toString(); } void NWChemInputDialog::writeSettings(QSettings& settings) const { settings.setValue("nwchem/savepath", m_savePath); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessinputdata.h0000644000175000001440000007545612250371054026140 0ustar marcususers/********************************************************************** GamessInputData - GAMESS Input Data Class Copyright (C) 2004 by Iowa State University Copyright (C) 2006 by Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Some code is based on WxMacMolPlt For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef GAMESSINPUTDATA_H #define GAMESSINPUTDATA_H #include #include #include using namespace std; namespace Avogadro { class Molecule; class Atom; enum TypeOfRun { InvalidRunType=0, Energy=1, GradientRun=2, HessianRun, OptimizeRun=4, TrudgeRun, SadPointRun, IRCRun=7, GradExtrRun, DRCRun=9, SurfaceRun, PropRun, MorokumaRun, TransitnRun, SpinOrbitRun, FFieldRun, TDHFRun, GLOBOPRun=17, VSCFRun, OptFMORun, RamanRun, NMRRun, MakeEFPRun, NumGAMESSRunTypes }; enum GAMESS_SCFType { GAMESS_Invalid_SCFType=-1, GAMESSDefaultSCFType=0, GAMESS_RHF, GAMESS_UHF, GAMESS_ROHF, GAMESS_GVB, GAMESS_MCSCF, GAMESS_NO_SCF, NumGAMESSSCFTypes }; enum CCRunType { CC_None=0, CC_LCCD, CC_CCD, CC_CCSD, CC_CCSDT, CC_RCC, CC_CRCC, CC_EOMCCSD, CC_CREOM, NumCCTypes }; enum CIRunType { CI_None=0, CI_GUGA, CI_ALDET, CI_ORMAS, CI_CIS, CI_FSOCI, CI_GENCI, NumCITypes }; class GamessInputData; enum FriendType { Friend_invalid=-1, Friend_None=0, Friend_HONDO, Friend_MELDF, Friend_GAMESSUK, Friend_GAUSSIAN, Friend_ALL, NumFriendTypes }; enum GAMESS_Localization { Invalid_Localization=-1, GAMESS_No_Localization=0, GAMESS_BOYS_Localization, GAMESS_RUEDNBRG_Localization, GAMESS_POP_Localization, NumGAMESSLocalizations }; class GamessControlGroup { private: char *ExeType; GAMESS_SCFType SCFType; short MPLevelCIType; //first 4 bits = MP level, 2nd 4 bits CI Type TypeOfRun RunType; short MaxIt; short Charge; short Multiplicity; GAMESS_Localization Local; FriendType Friend; short NPrint; short ITol; short ICut; CCRunType CCType; char Options; //1 bit for several options //bit 1 MolPlot; //bit 2 PlotOrb; //bit 3 AIMPAC; //bit 4 RPAC; //bit 5 DFT active; //bit 6 IntType; //bit 7 NormF; //bit 8 NormP; public: //Public data access functions //other member functions GamessControlGroup(void); GamessControlGroup(GamessControlGroup *Copy); ~GamessControlGroup(void); GAMESS_SCFType SetSCFType(GAMESS_SCFType NewSCFType); GAMESS_SCFType SetSCFType(const char *SCFText); const char * GetSCFTypeText(void) const {return GAMESSSCFTypeToText(SCFType);}; static const char * GAMESSSCFTypeToText(GAMESS_SCFType t); inline GAMESS_SCFType GetSCFType(void) const {return SCFType;}; long SetMPLevel(short NewMPLevel); short GetMPLevel(void) const; CIRunType GetCIType(void) const; CIRunType GetCIType(char * outText) const; const char * GetCIType(const CIRunType &) const; CIRunType SetCIType(CIRunType NewVal); CIRunType SetCIType(const char * CIText); TypeOfRun SetRunType(const TypeOfRun & NewRunType); TypeOfRun SetRunType(const char *RunText); static const char * GetGAMESSRunText(const TypeOfRun & r); inline TypeOfRun GetRunType(void) const {return RunType;}; short GetExeType(void); short GetExeType(unsigned char ExeText[256]); short SetExeType(const char *ExeText); short SetExeType(short NewType); short SetMaxIt(short NumIt); inline short GetMaxIt(void) {return MaxIt;}; short SetCharge(short charge); inline short GetCharge(void) {return Charge;}; short SetMultiplicity(short NewMult); inline short GetMultiplicity(void) {return Multiplicity;}; GAMESS_Localization SetLocal(const char *LocalText); GAMESS_Localization SetLocal(GAMESS_Localization NewLocal); inline GAMESS_Localization GetLocal(void) const {return Local;}; static const char * GAMESSLocalizationToText(GAMESS_Localization t); const char * GetLocalText(void) const {return GAMESSLocalizationToText(Local);}; FriendType SetFriend(const char *FriendText); FriendType SetFriend(FriendType NewFriend); static const char * GetFriendText(FriendType f); static FriendType TextToFriend(const char * c); inline FriendType GetFriend(void) const {return Friend;}; inline const char * GetFriendText(void) const {return GetFriendText(Friend);}; bool SetMolPlot(bool State); inline bool GetMolPlot(void) const {return ((Options & 1)?true:false);}; bool SetPlotOrb(bool State); inline bool GetPlotOrb(void) const {return ((Options & (1<<1))?true:false);}; bool SetAIMPAC(bool State); inline bool GetAIMPAC(void) const {return ((Options & (1<<2))?true:false);}; bool SetRPAC(bool State); inline bool GetRPAC(void) const {return ((Options & (1<<3))?true:false);}; bool UseDFT(bool state); bool UseDFT(void) const; bool SetIntType(bool State); inline bool GetIntType(void) const {return ((Options & (1<<5))?true:false);}; bool SetNormF(bool State); inline bool GetNormF(void) const {return ((Options & (1<<6))?true:false);}; bool SetNormP(bool State); inline bool GetNormP(void) const {return ((Options & (1<<7))?true:false);}; CCRunType GetCCType(void) const; static const char * GetGAMESSCCType(const CCRunType & ); CCRunType SetCCType(CCRunType n); CCRunType SetCCType(const char * n); void InitControlPaneData(void); void InitProgPaneData(void); // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer, long length); void WriteToFile(ostream &File, GamessInputData *IData, long NumElectrons); void RevertControlPane(GamessControlGroup *OrgData); void RevertProgPane(GamessControlGroup *OrgData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; enum MemoryUnit { wordsUnit=1, bytesUnit, megaWordsUnit, megaBytesUnit, gigaWordsUnit, gigaBytesUnit, NumberMemoryUnits }; const char * MemoryUnitToText(const MemoryUnit & mu); bool TextToMemoryUnit(const char * t, MemoryUnit & mu); enum TimeUnit { secondUnit=1, minuteUnit, hourUnit, dayUnit, weekUnit, yearUnit, milleniaUnit, NumberTimeUnits }; const char * TimeUnitToText(const TimeUnit & tu); bool TextToTimeUnit(const char * t, TimeUnit & tu); class GamessSystemGroup { private: long TimeLimit; //This is always stored as minutes double Memory; //Always stored as words double MemDDI; //stored as megawords char KDiag; TimeUnit TimeUnits; MemoryUnit MemUnits; MemoryUnit MemDDIUnits; char Flags; //One bit flags //bit 1 CoreFlag; //bit 2 BalanceType; set to true for LOOP //bit 3 XDR; //bit 4 PARALL; public: GamessSystemGroup(void); GamessSystemGroup(GamessSystemGroup *Copy); inline long GetTimeLimit(void) const {return TimeLimit;}; long SetTimeLimit(long NewTime); inline TimeUnit GetTimeUnits(void) const {return TimeUnits;}; TimeUnit SetTimeUnits(TimeUnit NewUnits); float GetConvertedTime(void) const; long SetConvertedTime(float NewTime); inline double GetMemory(void) const {return Memory;}; double SetMemory(double NewMemory); inline MemoryUnit GetMemUnits(void) const {return MemUnits;}; MemoryUnit SetMemUnits(MemoryUnit NewUnits); double GetConvertedMem(void) const; double SetConvertedMem(double NewMem); inline MemoryUnit GetMemDDIUnits(void) const {return MemDDIUnits;}; inline double GetMemDDI(void) const {return MemDDI;}; double SetMemDDI(double NewMemDDI); double GetConvertedMemDDI(void) const; double SetConvertedMemDDI(double NewMem); MemoryUnit SetMemDDIUnits(MemoryUnit NewUnits); inline char GetDiag(void) const {return KDiag;}; char SetDiag(char NewMethod); bool GetCoreFlag(void) const {return ((Flags & 1)?true:false);}; bool SetCoreFlag(bool State); bool GetBalanceType(void) const {return ((Flags & 2)?true:false);}; bool SetBalanceType(bool Type); bool GetXDR(void) const {return ((Flags & 4)?true:false);}; bool SetXDR(bool State); inline bool GetParallel(void) const {return ((Flags & 8)?true:false);}; bool SetParallel(bool State); void InitData(void); // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer); void WriteToFile(ostream &File); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); // void ReadSystemOptions(BufferFile * Buffer); }; enum GAMESS_BasisSet { GAMESS_BS_None=0, GAMESS_BS_MINI, GAMESS_BS_MIDI, GAMESS_BS_STO, GAMESS_BS_N21, GAMESS_BS_N31, GAMESS_BS_N311, GAMESS_BS_DZV, GAMESS_BS_DH, GAMESS_BS_BC, GAMESS_BS_TZV, GAMESS_BS_MC, GAMESS_BS_SBK, GAMESS_BS_HW, GAMESS_BS_MNDO, GAMESS_BS_AM1, GAMESS_BS_PM3, NumGAMESSBasisSetsItem }; enum GAMESS_BS_Polarization { GAMESS_BS_Invalid_Polar=-1, GAMESS_BS_No_Polarization=0, GAMESS_BS_Pople_Polar, GAMESS_BS_PopN311_Polar, GAMESS_BS_Dunning_Polar, GAMESS_BS_Huzinaga_Polar, GAMESS_BS_Hondo7_Polar, NumGAMESSBSPolarItems }; enum GAMESS_BS_ECPotential { GAMESS_BS_Invalid_ECP=-1, GAMESS_BS_ECP_None=0, GAMESS_BS_ECP_Read, GAMESS_BS_ECP_SBK, GAMESS_BS_ECP_HW, NumGAMESSBSECPItems }; class GamessBasisGroup { private: float Split2[2]; float Split3[3]; short Basis; short NumGauss; short NumHeavyFuncs; //8 bits for #D funcs, 8 bits for # f funcs short NumPFuncs; GAMESS_BS_Polarization Polar; short ECPPotential; //Potential type for ECP calculations (in $CONTRL) char Flags; //boolean type options bool WaterSolvate; //bit 1 DiffuseSP; //bit 2 DiffuseS; //bit 3 disables builtin basis types based on current atom set public: //Member functions //other member functions GamessBasisGroup(void); GamessBasisGroup(GamessBasisGroup *Copy); short SetBasis(const char *text); short SetBasis(short NewBasis); const char * GetBasisText(void) const; short GetBasis(void) const; static const char * GAMESSBasisSetToText(GAMESS_BasisSet bs); short SetNumGauss(short NewNumGauss); short GetNumGauss(void) const; short SetNumDFuncs(short NewNum); short GetNumDFuncs(void) const; short SetNumFFuncs(short NewNum); short GetNumFFuncs(void) const; short SetNumPFuncs(short NewNum); short GetNumPFuncs(void) const; short SetDiffuseSP(bool state); void SetWaterSolvate(bool state) { WaterSolvate = state; } bool GetWaterSolvate() { return WaterSolvate; } bool GetDiffuseSP(void) const {return ((Flags&1)?true:false);}; short SetDiffuseS(bool state); bool GetDiffuseS(void) const {return ((Flags&2)?true:false);}; GAMESS_BS_Polarization SetPolar(GAMESS_BS_Polarization NewPolar); GAMESS_BS_Polarization SetPolar(const char *text); static const char * PolarToText(GAMESS_BS_Polarization p); inline const char * GetPolarText(void) const {return PolarToText(Polar);}; inline GAMESS_BS_Polarization GetPolar(void) const {return Polar;}; static const char * GAMESSECPToText(GAMESS_BS_ECPotential p); short GetECPPotential(void) const; const char * GetECPPotentialText(void) const; GAMESS_BS_ECPotential SetECPPotential(const char * ECPText); short SetECPPotential(short NewType); inline bool CheckBasis(void) const {return ((Flags & 4)?true:false);}; inline void CheckBasis(bool state) {Flags = (Flags& 0xFB) + (state?4:0);}; void InitData(void); // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer); long WriteToFile(ostream &File, GamessInputData * iData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; enum CoordinateType { invalidCoordinateType=0, UniqueCoordType, HINTCoordType, CartesianCoordType, ZMTCoordType, ZMTMPCCoordType, NumberCoordinateTypes }; enum GAMESSPointGroup { invalidPGroup=0, GAMESS_C1, GAMESS_CS, GAMESS_CI, GAMESS_CNH, GAMESS_CNV, GAMESS_CN, GAMESS_S2N, GAMESS_DND, GAMESS_DNH, GAMESS_DN, GAMESS_TD, GAMESS_TH, GAMESS_T, GAMESS_OH, GAMESS_O, NumberGAMESSPointGroups }; class GamessDataGroup { private: char *Title; short Coord; short NumZVar; char PointGroup; char PGroupOrder; char Options; //bit 1 units //bit 2 NoSym public: //data access functions //other member functions GamessDataGroup(void); GamessDataGroup(GamessDataGroup *Copy); ~GamessDataGroup(void); short SetPointGroup(GAMESSPointGroup NewPGroup); short SetPointGroup(char *GroupText); static const char * GetGAMESSPointGroupText(GAMESSPointGroup p); const char * GetPointGroupText(void) const {return GetGAMESSPointGroupText((GAMESSPointGroup) PointGroup);}; inline GAMESSPointGroup GetPointGroup(void) const {return (GAMESSPointGroup)PointGroup;}; short SetPointGroupOrder(short NewOrder); inline short GetPointGroupOrder(void) const {return PGroupOrder;}; short SetTitle(const char *NewTitle, long length=-1); const char * GetTitle(void) const; CoordinateType GetCoordType(void) const; static const char * GetCoordTypeText(CoordinateType t); const char * GetCoordText(void) const {return GetCoordTypeText((CoordinateType) Coord);}; CoordinateType SetCoordType(const char *CoordText); CoordinateType SetCoordType(CoordinateType NewType); bool GetUnits(void) const {return ((Options&1)?true:false);}; bool SetUnits(bool NewType); bool SetUseSym(bool State); bool GetUseSym(void) const {return ((Options&2)?true:false);}; short GetNumZVar(void) const {return NumZVar;}; short SetNumZVar(short NewNum); void InitData(void); // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // void ReadFromBuffer(BufferFile *Buffer, long length); void WriteHeaderToFile(ostream &File); void WriteToFile(ostream &File, GamessInputData* IData, Molecule * MainData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; typedef enum TypeOfGuess { invalidGuessType=0, HUCKELGuessType=1, HCOREGuessType, MOREADGuessType, MOSAVEDGuessType, SkipGuessType, NumberGuessTypes } TypeOfGuess; class GamessGuessGroup { private: float MOTolZ; float MOTolEquil; long *IOrder; long *JOrder; long NumOrbs; short VecSource; short GuessType; char Options; //bit 1 Print initial guess PRTMO //bit 2 reordering switch //bit 3 orbital mixing switch public: //data access functions GamessGuessGroup(void); GamessGuessGroup(GamessGuessGroup *Copy); // ~GuessGroup(void); //not needed until iorder and jorder are used inline short GetGuess(void) const {return GuessType;}; const char * GetGuessText(void) const; short SetGuess(const char *GuessText); inline short SetGuess(short NewGuess) {if ((NewGuess<0)||(NewGuess>5)) return -1; GuessType = NewGuess; return GetGuess();}; inline short GetVecSource(void) const {return VecSource;}; inline void SetVecSource(short NewVal) {if (NewVal>0) VecSource = NewVal;}; inline long GetNumOrbs(void) const {return NumOrbs;}; inline long SetNumOrbs(long NewNum) {if (NewNum >= 0) NumOrbs = NewNum; return NumOrbs;}; inline bool GetPrintMO(void) const {return (Options & 1);}; inline void SetPrintMO(bool State) {Options = (Options & 0xFE) + (State ? 1 : 0);}; inline bool GetNOrder(void) const {return ((Options & 2)?true:false);}; inline void SetNOrder(bool State) {Options = (Options & 0xFD) + (State ? 2 : 0);}; inline bool GetMix(void) const {return ((Options & 4)?true:false);}; inline void SetMix(bool State) {Options = (Options & 0xFB) + (State ? 4 : 0);}; static const char * ConvertGuessType(const int & type); //other member functions void InitData(void); // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer); void WriteToFile(ostream &File, GamessInputData *IData); // void WriteVecGroup(BufferFile *File, Molecule * lData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; class GamessSCFGroup { private: float SOGTolerance; //SOSCF threshold float EnErrThresh; //DIIS error threshold float DEMCutoff; //DEM limit float DampCutoff; //Damping limit short ConvCriteria; //Convergance cutoff 10^(-n) short MaxDIISEq; //Max size of the DIIS linear equations short MVOCharge; //Modified Virtual Orbital Charge char Punch; //Orbital printout flags char Options1; //Main option flags //bit 1 Direct SCF //bit 2 Fock matrix diff //bit 3 UHF natural orbitals char ConverganceFlags; //flags for each converger // 1 extrapolation // 2 damping // 3 level shifting // 4 restriction // 5 DIIS // 6 Second order SCF // 7 direct energy min. public: //member functions GamessSCFGroup(void); GamessSCFGroup(GamessSCFGroup *Copy); bool GetDirectSCF(void) const {return ((Options1 & 1)?true:false);}; bool SetDirectSCF(bool State); bool GetFockDiff(void) const {return ((Options1 & 2)?true:false);}; bool SetFockDiff(bool State); bool GetUHFNO(void) const {return ((Options1 & 4)?true:false);}; bool SetUHFNO(bool State); short GetConvergance(void) const {return ConvCriteria;}; short SetConvergance(short NewConv); void InitData(void); //no destructor for now // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer); void WriteToFile(ostream &File, GamessInputData *IData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; class GamessMP2Group { private: double CutOff; //double needed to hold very small cutoffs long NumCoreElectrons; long Memory; char Method; char AOInts; char LMOMP2; bool MP2Prop; public: GamessMP2Group(void); GamessMP2Group(GamessMP2Group *Copy); void InitData(void); inline float GetIntCutoff(void) const {return CutOff;}; float SetIntCutoff(float NewCutOff); inline long GetNumCoreElectrons(void) const {return NumCoreElectrons;}; long SetNumCoreElectrons(long NewNum); inline long GetMemory(void) const {return Memory;}; long SetMemory(long NewMem); inline char GetMethod(void) const {return Method;}; char SetMethod(char NewMethod); inline char GetAOIntMethod(void) const {return AOInts;}; const char * GetAOIntMethodText(void) const; char SetAOIntMethod(char NewMethod); void SetAOIntMethod(const char * t); bool GetLMOMP2(void) const; bool SetLMOMP2(bool State); bool GetMP2Prop(void) const {return MP2Prop;}; void SetMP2Prop(bool state) {MP2Prop = state;}; // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer); void WriteToFile(ostream &File, GamessInputData *IData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; class GamessHessianGroup { private: float DisplacementSize; float FrequencyScaleFactor; long BitOptions; //Bit 1: method //Bit 2: double difference //Bit 3: purify //Bit 4: print internal FC's //Bit 5: vibrational analysis public: GamessHessianGroup(void) {InitData();}; GamessHessianGroup(GamessHessianGroup *Copy) {*this = *Copy;}; void InitData(void); inline float GetDisplacementSize(void) const {return DisplacementSize;}; inline float SetDisplacementSize(float NewVal) {if (NewVal > 0.0) DisplacementSize = NewVal; return DisplacementSize;}; inline float GetFreqScale(void) const {return FrequencyScaleFactor;}; inline float SetFreqScale(float NewVal) {if (NewVal > 0.0) FrequencyScaleFactor = NewVal; return FrequencyScaleFactor;}; inline bool GetAnalyticMethod(void) const {return (BitOptions & 1);}; inline void SetAnalyticMethod(bool NewVal) {if (BitOptions & 1) BitOptions--; if (NewVal) {BitOptions++; if (BitOptions & 32) BitOptions -= 32;}}; inline bool GetDoubleDiff(void) const {return ((BitOptions & 2)?true:false);}; inline void SetDoubleDiff(bool NewVal) {if (BitOptions & 2) BitOptions-=2; if (NewVal) BitOptions += 2;}; inline bool GetPurify(void) const {return ((BitOptions & 4)?true:false);}; inline void SetPurify(bool NewVal) {if (BitOptions & 4) BitOptions -= 4; if (NewVal) BitOptions += 4;}; inline bool GetPrintFC(void) const {return ((BitOptions & 8)?true:false);}; inline void SetPrintFC(bool NewVal) {if (BitOptions & 8) BitOptions -= 8; if (NewVal) BitOptions += 8;}; inline bool GetVibAnalysis(void) const {return ((BitOptions & 16)?true:false);}; inline void SetVibAnalysis(bool NewVal) {if (BitOptions & 16) BitOptions -= 16; if (NewVal) BitOptions += 16;}; // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer); void WriteToFile(ostream &File, GamessInputData *IData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; enum DFTFunctionalsGrid { invalidDFTGrid=0, DFT_Grid_Slater, DFT_Grid_Becke, DFT_Grid_VWN, DFT_Grid_LYP, DFT_Grid_SVWN, DFT_Grid_BVWN, DFT_Grid_BLYP, DFT_Grid_B3LYP, DFT_Grid_GILL, DFT_Grid_PBE, DFT_Grid_OP, DFT_Grid_SLYP, DFT_Grid_SOP, DFT_Grid_BOP, DFT_Grid_GVWN, DFT_Grid_GLYP, DFT_Grid_GOP, DFT_Grid_PBEVWN, DFT_Grid_PBELYP, DFT_Grid_PBEOP, DFT_Grid_BHHLYP, NumberGRIDDFTFuncs }; enum DFTFunctionalsGridFree { invalidDFTGridFreeType=0, DFT_GridFree_Slater, DFT_GridFree_Becke, DFT_GridFree_VWN, DFT_GridFree_LYP, DFT_GridFree_SVWN, DFT_GridFree_BVWN, DFT_GridFree_BLYP, DFT_GridFree_B3LYP, DFT_GridFree_XALPHA, DFT_GridFree_Depristo, DFT_GridFree_CAMA, DFT_GridFree_HALF, DFT_GridFree_PWLOC, DFT_GridFree_BPWLOC, DFT_GridFree_CAMB, DFT_GridFree_XVWN, DFT_GridFree_XPWLOC, DFT_GridFree_SPWLOC, DFT_GridFree_WIGNER, DFT_GridFree_WS, DFT_GridFree_WIGEXP, NumberDFTGridFreeFuncs }; class GamessDFTGroup { private: float GridSwitch; float Threshold; short Functional; short NumRadialGrids; short NumThetaGrids; short NumPhiGrids; short NumRadialGridsInit; short NumThetaGridsInit; short NumPhiGridsInit; char BitFlags; public: GamessDFTGroup(void) {InitData();}; GamessDFTGroup(GamessDFTGroup *Copy) {*this = *Copy;}; void InitData(void); bool MethodGrid(void) const {return ((BitFlags & 1) != 0);}; void SetMethodGrid(bool state) {BitFlags = (BitFlags & 0xE) + (state ? 1 : 0);}; bool GetAuxFunctions(void) const {return ((BitFlags & 2) != 0);}; void SetAuxFunctions(bool state) {BitFlags = (BitFlags & 0xD) + (state ? 2 : 0);}; bool GetThree(void) const {return ((BitFlags & 4) != 0);}; void SetThree(bool state) {BitFlags = (BitFlags & 0xB) + (state ? 4 : 0);}; inline short GetFunctional(void) const {return Functional;}; const char * GetFunctionalText(void) const; short SetFunctional(short newvalue); static const char * GetDFTGridFuncText(DFTFunctionalsGrid d); static const char * GetDFTGridFreeFuncText(DFTFunctionalsGridFree d); // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer); void WriteToFile(ostream &File, GamessInputData *IData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; class GamessStatPtGroup { private: float OptConvergance; float InitTrustRadius; float MaxTrustRadius; float MinTrustRadius; float StatJumpSize; long ModeFollow; long BitOptions; //1: radius update; 2: Stat. Pt.; 3-5 Hess method; 6: print orbs every iter. short method; short MaxSteps; short nRecalcHess; public: GamessStatPtGroup(void) {InitData();}; GamessStatPtGroup(GamessStatPtGroup *Copy) {*this = *Copy;}; void InitData(void); inline float GetOptConvergance(void) const {return OptConvergance;}; inline void SetOptConvergance(float NewVal) {if (NewVal>=0.0) OptConvergance = NewVal;}; inline float GetInitRadius(void) const {return InitTrustRadius;}; inline void SetInitRadius(float NewVal) {if (NewVal>=0.0) InitTrustRadius = NewVal;}; inline float GetMaxRadius(void) const {return MaxTrustRadius;}; inline void SetMaxRadius(float NewVal) {if (NewVal>=0.0) MaxTrustRadius = NewVal;}; inline float GetMinRadius(void) const {return MinTrustRadius;}; inline void SetMinRadius(float NewVal) {if (NewVal>=0.0) MinTrustRadius = NewVal;}; inline float GetStatJump(void) const {return StatJumpSize;}; inline void SetStatJump(float NewVal) {if (NewVal>=0.0) StatJumpSize = NewVal;}; inline long GetModeFollow(void) const {return ModeFollow;}; inline void SetModeFollow(long NewVal) {if (NewVal>0) ModeFollow = 1;}; inline short GetMethod(void) const {return method;}; inline void SetMethod(short NewVal) {if ((NewVal>0)&&(NewVal<=5)) method = NewVal;}; inline short GetMaxSteps(void) const {return MaxSteps;}; inline void SetMaxSteps(short NewVal) {if (NewVal>0) MaxSteps = NewVal;}; inline short GetHessRecalcInterval(void) const {return nRecalcHess;}; inline void SetHessRecalcInterval(short NewVal) {if (NewVal>=0) nRecalcHess = NewVal;}; inline bool GetRadiusUpdate(void) const {return (BitOptions & 1);}; inline void SetRadiusUpdate(bool NewVal) {BitOptions = (BitOptions & 0xFE) + (NewVal ? 1 : 0);}; inline bool GetStatPoint(void) const {return ((BitOptions & 2) != 0);}; inline void SetStatPoint(bool NewVal) {BitOptions = (BitOptions & 0xFD) + (NewVal ? 2 : 0);}; inline short GetHessMethod(void) const {return ((BitOptions & 28) >> 2);}; inline void SetHessMethod(short NewVal) {if ((NewVal>=0)&&(NewVal<=3)) BitOptions = (BitOptions & 0xE3) + (NewVal << 2);}; inline bool AlwaysPrintOrbs(void) const {return ((BitOptions & 32) != 0);}; inline void SetAlwaysPrintOrbs(bool NewVal) {BitOptions = (BitOptions & 0xDF) + (NewVal ? 32 : 0);}; // long GetSize(BufferFile *Buffer); // long WriteToBuffer(BufferFile *Buffer); // long ReadFromBuffer(BufferFile *Buffer); void WriteToFile(ostream &File, GamessInputData *IData); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; class GamessEFPGroup { public: enum Type { EFPType = 0, QMType }; void GetCenterOfMass(Molecule *molecule, double &x, double &y, double &z); bool Contains(Atom *atom); double distance(const double i[], const double j[]) { double xd, yd, zd; xd = i[0] - j[0]; yd = i[1] - j[1]; zd = i[2] - j[2]; return sqrt(fabs(xd) + fabs(yd) + fabs(zd)); } std::vector atoms; std::string name; GamessEFPGroup::Type type; }; typedef std::vector::iterator EFPGroupIter; class GamessEFPData { public: GamessEFPData(); void AddGroup(GamessEFPGroup *group); void RemoveGroup(GamessEFPGroup *group); /** * Remove all groups which contain the atom parameter * @param atom pointer to the atom */ void RemoveGroups(Atom *atom = 0); /** * @return total group count (QM + EFP) */ int GetGroupCount(); int GetGroupCount(GamessEFPGroup::Type type); EFPGroupIter GetGroupBegin() { return m_groups.begin(); } EFPGroupIter GetGroupEnd() { return m_groups.end(); } private: std::vector m_groups; int m_efpCount; int m_qmCount; }; class GamessInputData { public: //! Constructors GamessInputData(Molecule *molecule = 0); GamessInputData(GamessInputData *Copy); //! Deconstructors ~GamessInputData(void); Molecule *m_molecule; GamessControlGroup *Control; GamessSystemGroup *System; GamessBasisGroup *Basis; GamessDataGroup *Data; GamessGuessGroup *Guess; GamessSCFGroup *SCF; GamessMP2Group *MP2; GamessHessianGroup *Hessian; GamessStatPtGroup *StatPt; GamessDFTGroup *DFT; GamessEFPData *EFP; // long GetSize(BufferFile *Buffer); //returns total size of the Input group and all subgroups // long WriteToBuffer(BufferFile *Buffer); //Pack Input data into the provided buffer long WriteInputFile(ostream &buffer); //Write out an input file for another program (GAMESS etc) long GetNumElectrons() const; void SetMolecule(Molecule *molecule); // void ReadFromBuffer(BufferFile *Buffer, long length); // void WriteXML(XMLElement * parent) const; // void ReadXML(XMLElement * parent); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/teracheminputdialog.ui0000644000175000001440000003413012250371054027145 0ustar marcususers TeraChemInputDialog 0 0 621 471 0 0 TeraChem Input QLayout::SetFixedSize Title: titleLine Title Calculation: calculationCombo 0 Single Point Energy Gradient Geometry Optimization Qt::Horizontal 18 27 Theory: theoryCombo false 0 HF BLYP B3LYP B3LYP1 B3LYP5 PBE REVPBE Unrestricted Qt::Horizontal 40 20 Charge: chargeSpin -99 0 Qt::Horizontal 58 27 Coordinates PBD XYZ Qt::Horizontal 40 20 Multiplicity: multiplicitySpin Basis: basisCombo 0 STO-3G 3-21G 6-31G(d) 6-31G(d,p) 6-31+G(d) 6-311G(d) cc-pVDZ Qt::Horizontal 58 26 Qt::Horizontal 18 26 0 0 Hide Preview 1 1 Qt::Horizontal 40 20 no yes D2 D3 Qt::Horizontal 40 20 Dispersion: true Monospace PreferAntialias false false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Generate... Close titleLine calculationCombo theoryCombo basisCombo chargeSpin moreButton previewText generateButton closeButton resetButton enableFormButton closeButton clicked() TeraChemInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/daltoninputdialog.cpp0000644000175000001440000011474712250371054027020 0ustar marcususers/************************************************************************* DaltonInputDialog - Dialog for generating Dalton input files Jogvan Magnus Olsen Initial source code was shamelessly copied from gaussianinputdialog.cpp *************************************************************************/ #include "daltoninputdialog.h" #include #include #include #include #include //#include #include #include using namespace OpenBabel; namespace Avogadro { DaltonInputDialog::DaltonInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_calculationType(SP), m_theoryType(HF), m_functionalType(B3LYP), m_basisType(STOnG), m_stoBasis(STO2G), m_popleBasis(p321G), m_poplediffBasis(p321ppG), m_poplepolBasis(p321Gs), m_poplediffpolBasis(p321ppGs), m_pcBasis(pc0), m_apcBasis(apc0), m_ccpvxzBasis(ccpVDZ), m_accpvxzBasis(accpVDZ),m_ccpcvxzBasis(ccpCVDZ), m_accpcvxzBasis(accpCVDZ), m_xaugccBasis(sing), m_dftGrid(normal), m_propType(polari), m_exci(1), m_coreBasis(false), m_diffBasis(false), m_polBasis(false), m_directCheck(false), m_parallelCheck(false), m_dirty(false), m_warned(false) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.functionalCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setFunctional(int))); connect(ui.basisCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBasis(int))); connect(ui.stoCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setstoBasis(int))); connect(ui.popleCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setpopleBasis(int))); connect(ui.poplediffCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setpoplediffBasis(int))); connect(ui.poplepolCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setpoplepolBasis(int))); connect(ui.poplediffpolCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setpoplediffpolBasis(int))); connect(ui.pcCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setpcBasis(int))); connect(ui.apcCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setapcBasis(int))); connect(ui.ccpvxzCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setccpvxzBasis(int))); connect(ui.accpvxzCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setaccpvxzBasis(int))); connect(ui.ccpcvxzCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setccpcvxzBasis(int))); connect(ui.accpcvxzCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setaccpcvxzBasis(int))); connect(ui.xaugccCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setxaugccBasis(int))); connect(ui.basiscoreCheck, SIGNAL(stateChanged(int)), this, SLOT(setcoreBasis(int))); connect(ui.basisdiffCheck, SIGNAL(stateChanged(int)), this, SLOT(setdiffBasis(int))); connect(ui.basispolCheck, SIGNAL(stateChanged(int)), this, SLOT(setpolBasis(int))); connect(ui.directCheck, SIGNAL(stateChanged(int)), this, SLOT(setdirectCheck(int))); connect(ui.parallelCheck, SIGNAL(stateChanged(int)), this, SLOT(setparallelCheck(int))); connect(ui.dftgridCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setdftGrid(int))); connect(ui.propCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setProp(int))); connect(ui.exciSpin, SIGNAL(valueChanged(int)), this, SLOT(setExci(int))); connect(ui.previewText, SIGNAL(textChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck resetClicked(); updatePreviewText(); } DaltonInputDialog::~DaltonInputDialog() { QSettings settings; writeSettings(settings); } void DaltonInputDialog::showEvent(QShowEvent *) { updatePreviewText(); } void DaltonInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) { disconnect(m_molecule, 0, this, 0); } m_molecule = molecule; // Update the preview text whenever atoms are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void DaltonInputDialog::updatePreviewText() { ui.moreButton->hide(); ui.enableFormButton->hide(); if (m_theoryType != DFT) { ui.dftTab->setEnabled(false); } else { ui.dftTab->setEnabled(true); } if (m_calculationType != PROP) { ui.propsTab->setEnabled(false); } else { ui.propsTab->setEnabled(true); } if (m_propType != exci) { ui.excitations->hide(); ui.exciSpin->hide(); } else { ui.excitations->show(); ui.exciSpin->show(); } if (m_basisType == STOnG) { ui.pcCombo->hide(); ui.apcCombo->hide(); ui.ccpvxzCombo->hide(); ui.ccpcvxzCombo->hide(); ui.accpvxzCombo->hide(); ui.accpcvxzCombo->hide(); ui.xaugccCombo->hide(); ui.popleCombo->hide(); ui.poplediffCombo->hide(); ui.poplepolCombo->hide(); ui.poplediffpolCombo->hide(); ui.stoCombo->show(); ui.basiscoreCheck->hide(); ui.basisdiffCheck->hide(); ui.basispolCheck->hide(); } else if (m_basisType == pople) { ui.basiscoreCheck->hide(); ui.basisdiffCheck->show(); ui.basispolCheck->show(); ui.pcCombo->hide(); ui.apcCombo->hide(); ui.ccpvxzCombo->hide(); ui.ccpcvxzCombo->hide(); ui.accpvxzCombo->hide(); ui.accpcvxzCombo->hide(); ui.xaugccCombo->hide(); ui.stoCombo->hide(); if (m_polBasis == false && m_diffBasis == false) { ui.popleCombo->show(); ui.poplediffCombo->hide(); ui.poplepolCombo->hide(); ui.poplediffpolCombo->hide(); } else if (m_polBasis == true && m_diffBasis == false) { ui.popleCombo->hide(); ui.poplediffCombo->hide(); ui.poplepolCombo->show(); ui.poplediffpolCombo->hide(); } else if (m_polBasis == false && m_diffBasis == true) { ui.popleCombo->hide(); ui.poplediffCombo->show(); ui.poplepolCombo->hide(); ui.poplediffpolCombo->hide(); } else if (m_polBasis == true && m_diffBasis == true) { ui.popleCombo->hide(); ui.poplediffCombo->hide(); ui.poplepolCombo->hide(); ui.poplediffpolCombo->show(); } } else if (m_basisType == jensen) { ui.basiscoreCheck->hide(); ui.basisdiffCheck->show(); ui.basispolCheck->hide(); ui.ccpvxzCombo->hide(); ui.ccpcvxzCombo->hide(); ui.accpvxzCombo->hide(); ui.accpcvxzCombo->hide(); ui.xaugccCombo->hide(); ui.popleCombo->hide(); ui.poplediffCombo->hide(); ui.poplepolCombo->hide(); ui.poplediffpolCombo->hide(); ui.stoCombo->hide(); if (m_diffBasis == false) { ui.pcCombo->show(); ui.apcCombo->hide(); } else if (m_diffBasis == true) { ui.pcCombo->hide(); ui.apcCombo->show(); } } else if (m_basisType == dunning) { ui.basiscoreCheck->show(); ui.basisdiffCheck->show(); ui.basispolCheck->hide(); ui.pcCombo->hide(); ui.apcCombo->hide(); // ui.ccpvxzCombo->show(); // ui.ccpcvxzCombo->hide(); // ui.accpvxzCombo->hide(); // ui.xaccpvxzCombo->hide(); // ui.accpcvxzCombo->hide(); ui.popleCombo->hide(); ui.poplediffCombo->hide(); ui.poplepolCombo->hide(); ui.poplediffpolCombo->hide(); ui.stoCombo->hide(); if (m_coreBasis == false && m_diffBasis == false) { ui.ccpvxzCombo->show(); ui.ccpcvxzCombo->hide(); ui.accpvxzCombo->hide(); ui.accpcvxzCombo->hide(); ui.xaugccCombo->hide(); } else if (m_coreBasis == true && m_diffBasis == false) { ui.ccpvxzCombo->hide(); ui.ccpcvxzCombo->show(); ui.accpvxzCombo->hide(); ui.accpcvxzCombo->hide(); ui.xaugccCombo->hide(); } else if (m_coreBasis == false && m_diffBasis == true) { ui.ccpvxzCombo->hide(); ui.ccpcvxzCombo->hide(); ui.accpvxzCombo->show(); ui.accpcvxzCombo->hide(); ui.xaugccCombo->show(); } else if (m_coreBasis == true && m_diffBasis == true) { ui.ccpvxzCombo->hide(); ui.ccpcvxzCombo->hide(); ui.accpvxzCombo->hide(); ui.accpcvxzCombo->show(); ui.xaugccCombo->show(); } } if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("Dalton Input File Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the Dalton input file preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } } void DaltonInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.calculationCombo->setCurrentIndex(0); ui.theoryCombo->setCurrentIndex(0); ui.basisCombo->setCurrentIndex(0); ui.functionalCombo->setCurrentIndex(1); ui.pcCombo->setCurrentIndex(0); ui.apcCombo->setCurrentIndex(0); ui.ccpvxzCombo->setCurrentIndex(0); ui.ccpcvxzCombo->setCurrentIndex(0); ui.accpvxzCombo->setCurrentIndex(0); ui.accpcvxzCombo->setCurrentIndex(0); ui.xaugccCombo->setCurrentIndex(0); ui.popleCombo->setCurrentIndex(0); ui.poplediffCombo->setCurrentIndex(0); ui.poplepolCombo->setCurrentIndex(0); ui.poplediffpolCombo->setCurrentIndex(0); ui.stoCombo->setCurrentIndex(0); ui.basiscoreCheck->setChecked(false); ui.basisdiffCheck->setChecked(false); ui.basispolCheck->setChecked(false); ui.directCheck->setChecked(false); ui.parallelCheck->setChecked(false); ui.dftgridCombo->setCurrentIndex(1); ui.propCombo->setCurrentIndex(0); ui.exciSpin->setValue(1); } void DaltonInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("Dalton Input File"), QString("dal")); } void DaltonInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void DaltonInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->toPlainText() != generateInputDeck()) deckDirty(true); else deckDirty(false); } void DaltonInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void DaltonInputDialog::setCalculation(int n) { switch (n) { case 0: m_calculationType = SP; break; case 1: m_calculationType = PROP; break; default: m_calculationType = SP; } updatePreviewText(); } void DaltonInputDialog::setTheory(int n) { switch (n) { case 0: m_theoryType = HF; break; case 1: m_theoryType = DFT; break; case 2: m_theoryType = MP2; break; default: m_theoryType = HF; } updatePreviewText(); } void DaltonInputDialog::setFunctional(int n) { switch (n) { case 0: m_functionalType = B2PLYP; break; case 1: m_functionalType = B3LYP; break; case 2: m_functionalType = B3LYPg; break; case 3: m_functionalType = B3P86; break; case 4: m_functionalType = B3P86g; break; case 5: m_functionalType = B3PW91; break; case 6: m_functionalType = B1LYP; break; case 7: m_functionalType = B1PW91; break; case 8: m_functionalType = BHandH; break; case 9: m_functionalType = BHandHLYP; break; case 10: m_functionalType = B86VWN; break; case 11: m_functionalType = B86LYP; break; case 12: m_functionalType = B86P86; break; case 13: m_functionalType = B86PW91; break; case 14: m_functionalType = BVWN; break; case 15: m_functionalType = BLYP; break; case 16: m_functionalType = BP86; break; case 17: m_functionalType = BPW91; break; case 18: m_functionalType = BW; break; case 19: m_functionalType = BFW; break; case 20: m_functionalType = CAMB3LYP; break; case 21: m_functionalType = DBLYP; break; case 22: m_functionalType = DBP86; break; case 23: m_functionalType = DBPW91; break; case 24: m_functionalType = EDF1; break; case 25: m_functionalType = EDF2; break; case 26: m_functionalType = G96VWN; break; case 27: m_functionalType = G96LYP; break; case 28: m_functionalType = G96P86; break; case 29: m_functionalType = G96PW91; break; case 30: m_functionalType = G961LYP; break; case 31: m_functionalType = KMLYP; break; case 32: m_functionalType = KT1; break; case 33: m_functionalType = KT2; break; case 34: m_functionalType = KT3; break; case 35: m_functionalType = LDA; break; case 36: m_functionalType = LG1LYP; break; case 37: m_functionalType = OVWN; break; case 38: m_functionalType = OLYP; break; case 39: m_functionalType = OP86; break; case 40: m_functionalType = OPW91; break; case 41: m_functionalType = mPWVWN; break; case 42: m_functionalType = mPWLYP; break; case 43: m_functionalType = mPWP86; break; case 44: m_functionalType = mPWPW91; break; case 45: m_functionalType = mPW91; break; case 46: m_functionalType = mPW1PW91; break; case 47: m_functionalType = mPW3PW91; break; case 48: m_functionalType = mPW1K; break; case 49: m_functionalType = mPW1N; break; case 50: m_functionalType = mPW1S; break; case 51: m_functionalType = PBE0; break; case 52: m_functionalType = PBE0PBE; break; case 53: m_functionalType = PBE1PBE; break; case 54: m_functionalType = PBE; break; case 55: m_functionalType = PBEPBE; break; case 56: m_functionalType = RPBE; break; case 57: m_functionalType = revPBE; break; case 58: m_functionalType = mPBE; break; case 59: m_functionalType = PW91; break; case 60: m_functionalType = PW91VWN; break; case 61: m_functionalType = PW91LYP; break; case 62: m_functionalType = PW91P86; break; case 63: m_functionalType = PW91PW91; break; case 64: m_functionalType = SVWN3; break; case 65: m_functionalType = SVWN5; break; case 66: m_functionalType = XLYP; break; case 67: m_functionalType = X3LYP; break; default: m_functionalType = B3LYP; } updatePreviewText(); } void DaltonInputDialog::setBasis(int n) { switch (n) { case 0: m_basisType = STOnG; break; case 1: m_basisType = pople; break; case 2: m_basisType = jensen; break; case 3: m_basisType = dunning; break; default: m_basisType = STOnG; } updatePreviewText(); } void DaltonInputDialog::setstoBasis(int n) { switch (n) { case 0: m_stoBasis = STO2G; break; case 1: m_stoBasis = STO3G; break; case 2: m_stoBasis = STO6G; break; default: m_stoBasis = STO2G; } updatePreviewText(); } void DaltonInputDialog::setpopleBasis(int n) { switch (n) { case 0: m_popleBasis = p321G; break; case 1: m_popleBasis = p431G; break; case 2: m_popleBasis = p631G; break; case 3: m_popleBasis = p6311G; break; default: m_popleBasis = p321G; } updatePreviewText(); } void DaltonInputDialog::setpoplediffBasis(int n) { switch (n) { case 0: m_poplediffBasis = p321ppG; break; case 1: m_poplediffBasis = p631pG; break; case 2: m_poplediffBasis = p631ppG; break; default: m_poplediffBasis = p321ppG; } updatePreviewText(); } void DaltonInputDialog::setpoplepolBasis(int n) { switch (n) { case 0: m_poplepolBasis = p321Gs; break; case 1: m_poplepolBasis = p631Gs; break; case 2: m_poplepolBasis = p631Gss; break; case 3: m_poplepolBasis = p631G33; break; case 4: m_poplepolBasis = p6311Gs; break; case 5: m_poplepolBasis = p6311Gss; break; case 6: m_poplepolBasis = p6311G22; break; default: m_poplepolBasis = p321Gs; } updatePreviewText(); } void DaltonInputDialog::setpoplediffpolBasis(int n) { switch (n) { case 0: m_poplediffpolBasis = p321ppGs; break; case 1: m_poplediffpolBasis = p631pGs; break; case 2: m_poplediffpolBasis = p631ppGs; break; case 3: m_poplediffpolBasis = p631ppGss; break; case 4: m_poplediffpolBasis = p6311pGs; break; case 5: m_poplediffpolBasis = p6311ppGss; break; case 6: m_poplediffpolBasis = p6311ppG22; break; case 7: m_poplediffpolBasis = p6311ppG33; break; default: m_poplediffpolBasis = p321ppGs; } updatePreviewText(); } void DaltonInputDialog::setpcBasis(int n) { switch (n) { case 0: m_pcBasis = pc0; break; case 1: m_pcBasis = pc1; break; case 2: m_pcBasis = pc2; break; case 3: m_pcBasis = pc3; break; case 4: m_pcBasis = pc4; break; default: m_pcBasis = pc0; } updatePreviewText(); } void DaltonInputDialog::setapcBasis(int n) { switch (n) { case 0: m_apcBasis = apc0; break; case 1: m_apcBasis = apc1; break; case 2: m_apcBasis = apc2; break; case 3: m_apcBasis = apc3; break; case 4: m_apcBasis = apc4; break; default: m_apcBasis = apc0; } updatePreviewText(); } void DaltonInputDialog::setccpvxzBasis(int n) { switch (n) { case 0: m_ccpvxzBasis = ccpVDZ; break; case 1: m_ccpvxzBasis = ccpVTZ; break; case 2: m_ccpvxzBasis = ccpVQZ; break; case 3: m_ccpvxzBasis = ccpV5Z; break; case 4: m_ccpvxzBasis = ccpV6Z; break; default: m_ccpvxzBasis = ccpVDZ; } updatePreviewText(); } void DaltonInputDialog::setaccpvxzBasis(int n) { switch (n) { case 0: m_accpvxzBasis = accpVDZ; break; case 1: m_accpvxzBasis = accpVTZ; break; case 2: m_accpvxzBasis = accpVQZ; break; case 3: m_accpvxzBasis = accpV5Z; break; case 4: m_accpvxzBasis = accpV6Z; break; default: m_accpvxzBasis = accpVDZ; } updatePreviewText(); } void DaltonInputDialog::setccpcvxzBasis(int n) { switch (n) { case 0: m_ccpcvxzBasis = ccpCVDZ; break; case 1: m_ccpcvxzBasis = ccpCVTZ; break; case 2: m_ccpcvxzBasis = ccpCVQZ; break; case 3: m_ccpcvxzBasis = ccpCV5Z; break; case 4: m_ccpcvxzBasis = ccpwCVDZ; break; case 5: m_ccpcvxzBasis = ccpwCVTZ; break; case 6: m_ccpcvxzBasis = ccpwCVQZ; break; case 7: m_ccpcvxzBasis = ccpwCV5Z; break; default: m_ccpcvxzBasis = ccpCVDZ; } updatePreviewText(); } void DaltonInputDialog::setaccpcvxzBasis(int n) { switch (n) { case 0: m_accpcvxzBasis = accpCVDZ; break; case 1: m_accpcvxzBasis = accpCVTZ; break; case 2: m_accpcvxzBasis = accpCVQZ; break; default: m_accpcvxzBasis = accpCVDZ; } updatePreviewText(); } void DaltonInputDialog::setxaugccBasis(int n) { switch (n) { case 0: m_xaugccBasis = sing; break; case 1: m_xaugccBasis = doub; break; case 2: m_xaugccBasis = trip; break; case 3: m_xaugccBasis = quad; break; default: m_xaugccBasis = sing; } updatePreviewText(); } void DaltonInputDialog::setcoreBasis(int n) { if (n) m_coreBasis = true; else m_coreBasis = false; updatePreviewText(); } void DaltonInputDialog::setdiffBasis(int n) { if (n) m_diffBasis = true; else m_diffBasis = false; updatePreviewText(); } void DaltonInputDialog::setpolBasis(int n) { if (n) m_polBasis = true; else m_polBasis = false; updatePreviewText(); } void DaltonInputDialog::setdirectCheck(int n) { if (n) m_directCheck = true; else m_directCheck = false; updatePreviewText(); } void DaltonInputDialog::setparallelCheck(int n) { if (n) m_parallelCheck = true; else m_parallelCheck = false; updatePreviewText(); } void DaltonInputDialog::setdftGrid(int n) { switch (n) { case 0: m_dftGrid = coarse; break; case 1: m_dftGrid = normal; break; case 2: m_dftGrid = fine; break; case 3: m_dftGrid = ultrafine; break; default: m_dftGrid = normal; } updatePreviewText(); } void DaltonInputDialog::setProp(int n) { switch (n) { case 0: m_propType = polari; break; case 1: m_propType = exci; break; default: m_propType = polari; } updatePreviewText(); } void DaltonInputDialog::setExci(int n) { m_exci = n; updatePreviewText(); } QString DaltonInputDialog::generateInputDeck() { QString buffer; QTextStream mol(&buffer); int newatomtype; int oldatomtype; int natomtypes; int* natoms = NULL; mol << "BASIS" << '\n'; if (m_basisType == STOnG) { mol << getstoBasis(m_stoBasis) << '\n'; } else if (m_basisType == pople) { if (m_polBasis == false && m_diffBasis == false) { mol << getpopleBasis(m_popleBasis) << '\n'; } else if (m_polBasis == true && m_diffBasis == false) { mol << getpoplepolBasis(m_poplepolBasis) << '\n'; } else if (m_polBasis == false && m_diffBasis == true) { mol << getpoplediffBasis(m_poplediffBasis) << '\n'; } else if (m_polBasis == true && m_diffBasis == true) { mol << getpoplediffpolBasis(m_poplediffpolBasis) << '\n'; } } else if (m_basisType == jensen) { if (m_diffBasis == false) { mol << getpcBasis(m_pcBasis) << '\n'; } else if (m_diffBasis == true) { mol << getapcBasis(m_apcBasis) << '\n'; } } else if (m_basisType == dunning) { if (m_coreBasis == false && m_diffBasis == false) { mol << getccpvxzBasis(m_ccpvxzBasis) << '\n'; } else if (m_coreBasis == true && m_diffBasis == false) { mol << getccpcvxzBasis(m_ccpcvxzBasis) << '\n'; } else if (m_coreBasis == false && m_diffBasis == true) { mol << getxaugccBasis(m_xaugccBasis) << getaccpvxzBasis(m_accpvxzBasis) << '\n'; } else if (m_coreBasis == true && m_diffBasis == true) { mol << getxaugccBasis(m_xaugccBasis) << getaccpcvxzBasis(m_accpcvxzBasis) << '\n'; } } mol << " " << m_title << '\n'; mol << " Generated by the Dalton Input File Plugin for Avogadro" << '\n'; natoms = new int[120]; for (int i=0; i<120; i++) { natoms[i] = 0; } newatomtype = 0; oldatomtype = 0; natomtypes = 0; QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { newatomtype = atom->atomicNumber(); if (newatomtype != oldatomtype) { natomtypes += 1; oldatomtype = newatomtype; } natoms[natomtypes] += 1; } mol << "Atomtypes=" << natomtypes << " Angstrom"; if (m_propType == exci) { mol << " Nosymm" << '\n'; } else { mol << '\n'; } newatomtype = 0; oldatomtype = 0; natomtypes = 0; foreach (Atom *atom, atoms) { newatomtype = atom->atomicNumber(); if (newatomtype != oldatomtype) { natomtypes += 1; mol << "Charge=" << atom->atomicNumber() << ".0" << " Atoms=" << natoms[natomtypes] << '\n'; oldatomtype = newatomtype; } mol << qSetFieldWidth(3) << left << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << atom->pos()->x() << atom->pos()->y() << atom->pos()->z() << qSetFieldWidth(0) << '\n'; } delete [] natoms; natoms = NULL; mol << '\n'; mol << "**DALTON INPUT" << '\n'; mol << getCalculationType(m_calculationType) << '\n'; if (m_directCheck == true) mol << ".DIRECT" << '\n'; if (m_parallelCheck == true) mol << ".PARALLEL" << '\n'; mol << "**WAVE FUNCTIONS" << '\n'; if (m_theoryType == MP2) { mol << ".HF" << '\n'; mol << getTheoryType(m_theoryType) << '\n'; } else if (m_theoryType == DFT) { mol << getTheoryType(m_theoryType) << '\n'; mol << " " << getFunctionalType(m_functionalType) << '\n'; if (m_dftGrid != normal) { mol << "*DFT INPUT" << '\n'; mol << getdftGrid(m_dftGrid) << '\n'; } } else { mol << getTheoryType(m_theoryType) << '\n'; } if (m_calculationType == PROP) { mol << "**PROPERTIES" << '\n'; mol << getPropType(m_propType) << '\n'; if (m_propType == exci) { mol << " " << m_exci << '\n'; } } mol << "**END OF DALTON INPUT"; return buffer; } QString DaltonInputDialog::getCalculationType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case SP: return ".RUN WAVE FUNCTIONS"; case PROP: return ".RUN PROPERTIES"; default: return ".RUN WAVE FUNCTIONS"; } } QString DaltonInputDialog::getTheoryType(theoryType t) { // Translate the enum to text for the output generation switch (t) { case HF: return ".HF"; case DFT: return ".DFT"; case MP2: return ".MP2"; default: return ".DFT"; } } QString DaltonInputDialog::getFunctionalType(functionalType t) { // Translate the enum to text for the output generation switch (t) { case B2PLYP: return "B2PLYP"; case B3LYP: return "B3LYP"; case B3LYPg: return "B3LYPg"; case B3P86: return "B3P86"; case B3P86g: return "B3P86g"; case B3PW91: return "B3PW91"; case B1LYP: return "B1LYP"; case B1PW91: return "B1PW91"; case BHandH: return "BHandH"; case BHandHLYP: return "BHandHLYP"; case B86VWN: return "B86VWN"; case B86LYP: return "B86LYP"; case B86P86: return "B86P86"; case B86PW91: return "B86PW91"; case BVWN: return "BVWN"; case BLYP: return "BLYP"; case BP86: return "BP86"; case BPW91: return "BPW91"; case BW: return "BW"; case BFW: return "BFW"; case CAMB3LYP: return "CAMB3LYP"; case DBLYP: return "DBLYP"; case DBP86: return "DBP86"; case DBPW91: return "DBPW91"; case EDF1: return "EDF1"; case EDF2: return "EDF2"; case G96VWN: return "G96VWN"; case G96LYP: return "G96LYP"; case G96P86: return "G96P86"; case G96PW91: return "G96PW91"; case G961LYP: return "G961LYP"; case KMLYP: return "KMLYP"; case KT1: return "KT1"; case KT2: return "KT2"; case KT3: return "KT3"; case LDA: return "LDA"; case LG1LYP: return "LG1LYP"; case OVWN: return "OVWN"; case OLYP: return "OLYP"; case OP86: return "OP86"; case OPW91: return "OPW91"; case mPWVWN: return "mPWVWN"; case mPWLYP: return "mPWLYP"; case mPWP86: return "mPWP86"; case mPWPW91: return "mPWPW91"; case mPW91: return "mPW91"; case mPW1PW91: return "mPW1PW91"; case mPW3PW91: return "mPW3PW91"; case mPW1K: return "mPW1K"; case mPW1N: return "mPW1N"; case mPW1S: return "mPW1S"; case PBE0: return "PBE0"; case PBE0PBE: return "PBE0PBE"; case PBE1PBE: return "PBE1PBE"; case PBE: return "PBE"; case PBEPBE: return "PBEPBE"; case RPBE: return "RPBE"; case revPBE: return "revPBE"; case mPBE: return "mPBE"; case PW91: return "PW91"; case PW91VWN: return "PW91VWN"; case PW91LYP: return "PW91LYP"; case PW91P86: return "PW91P86"; case PW91PW91: return "PW91PW91"; case SVWN3: return "SVWN3"; case SVWN5: return "SVWN5"; case XLYP: return "XLYP"; case X3LYP: return "X3LYP"; default: return "B3LYP"; } } QString DaltonInputDialog::getstoBasis(stoBasis t) { // Translate the enum to text for the output generation switch (t) { case STO2G: return "STO-2G"; case STO3G: return "STO-3G"; case STO6G: return "STO-6G"; default: return "STO-2G"; } } QString DaltonInputDialog::getpopleBasis(popleBasis t) { switch (t) { case p321G: return "3-21G"; case p431G: return "4-31G"; case p631G: return "6-31G"; case p6311G: return "6-311G"; default: return "3-21G"; } } QString DaltonInputDialog::getpoplediffBasis(poplediffBasis t) { switch (t) { case p321ppG: return "3-21++G"; case p631pG: return "6-31+G"; case p631ppG: return "6-31++G"; default: return "3-21++G"; } } QString DaltonInputDialog::getpoplepolBasis(poplepolBasis t) { switch (t) { case p321Gs: return "3-21G*"; case p631Gs: return "6-31G*"; case p631Gss: return "6-31G**"; case p631G33: return "6-31G(3df,3pd)"; case p6311Gs: return "6-311G*"; case p6311Gss: return "6-311G**"; case p6311G22: return "6-311G(2df,2pd)"; default: return "3-21G*"; } } QString DaltonInputDialog::getpoplediffpolBasis(poplediffpolBasis t) { switch (t) { case p321ppGs: return "3-21++G*"; case p631pGs: return "6-31+G*"; case p631ppGs: return "6-31++G*"; case p631ppGss: return "6-31++G**"; case p6311pGs: return "6-311+G*"; case p6311ppGss: return "6-311++G**"; case p6311ppG22: return "6-311++G(2d,2p)"; case p6311ppG33: return "6-311++G(3df,3pd)"; default: return "3-21++G*"; } } QString DaltonInputDialog::getpcBasis(pcBasis t) { switch (t) { case pc0: return "pc-0"; case pc1: return "pc-1"; case pc2: return "pc-2"; case pc3: return "pc-3"; case pc4: return "pc-4"; default: return "pc-0"; } } QString DaltonInputDialog::getapcBasis(apcBasis t) { switch (t) { case apc0: return "apc-0"; case apc1: return "apc-1"; case apc2: return "apc-2"; case apc3: return "apc-3"; case apc4: return "apc-4"; default: return "apc-0"; } } QString DaltonInputDialog::getccpvxzBasis(ccpvxzBasis t) { switch (t) { case ccpVDZ: return "cc-pVDZ"; case ccpVTZ: return "cc-pVTZ"; case ccpVQZ: return "cc-pVQZ"; case ccpV5Z: return "cc-pV5Z"; case ccpV6Z: return "cc-pV6Z"; default: return "cc-pVDZ"; } } QString DaltonInputDialog::getaccpvxzBasis(accpvxzBasis t) { switch (t) { case accpVDZ: return "aug-cc-pVDZ"; case accpVTZ: return "aug-cc-pVTZ"; case accpVQZ: return "aug-cc-pVQZ"; case accpV5Z: return "aug-cc-pV5Z"; case accpV6Z: return "aug-cc-pV6Z"; default: return "aug-cc-pVDZ"; } } QString DaltonInputDialog::getccpcvxzBasis(ccpcvxzBasis t) { switch (t) { case ccpCVDZ: return "cc-pCVDZ"; case ccpCVTZ: return "cc-pCVTZ"; case ccpCVQZ: return "cc-pCVQZ"; case ccpCV5Z: return "cc-pCV5Z"; case ccpwCVDZ: return "cc-pwCVDZ"; case ccpwCVTZ: return "cc-pwCVTZ"; case ccpwCVQZ: return "cc-pwCVQZ"; case ccpwCV5Z: return "cc-pwCV5Z"; default: return "cc-pCVDZ"; } } QString DaltonInputDialog::getaccpcvxzBasis(accpcvxzBasis t) { switch (t) { case accpCVDZ: return "aug-cc-pCVDZ"; case accpCVTZ: return "aug-cc-pCVTZ"; case accpCVQZ: return "aug-cc-pCVQZ"; default: return "aug-cc-pCVDZ"; } } QString DaltonInputDialog::getxaugccBasis(xaugccBasis t) { switch (t) { case sing: return ""; case doub: return "d-"; case trip: return "t-"; case quad: return "q-"; default: return ""; } } QString DaltonInputDialog::getdftGrid(dftGrid t) { switch (t) { case coarse: return ".COARSE"; case normal: return ".NORMAL"; case fine: return ".FINE"; case ultrafine: return ".ULTRAFINE"; default: return ".NORMAL"; } } QString DaltonInputDialog::getPropType(propType t) { switch (t) { case polari: return ".POLARI"; case exci: return ".EXCITA"; default: return ".POLARI"; } } void DaltonInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.functionalCombo->setEnabled(!dirty); ui.basisCombo->setEnabled(!dirty); ui.pcCombo->setEnabled(!dirty); ui.apcCombo->setEnabled(!dirty); ui.ccpvxzCombo->setEnabled(!dirty); ui.ccpcvxzCombo->setEnabled(!dirty); ui.accpvxzCombo->setEnabled(!dirty); ui.accpcvxzCombo->setEnabled(!dirty); ui.xaugccCombo->setEnabled(!dirty); ui.popleCombo->setEnabled(!dirty); ui.poplediffCombo->setEnabled(!dirty); ui.poplepolCombo->setEnabled(!dirty); ui.poplediffpolCombo->setEnabled(!dirty); ui.stoCombo->setEnabled(!dirty); ui.basiscoreCheck->setEnabled(!dirty); ui.basisdiffCheck->setEnabled(!dirty); ui.basispolCheck->setEnabled(!dirty); ui.directCheck->setEnabled(!dirty); ui.parallelCheck->setEnabled(!dirty); ui.dftgridCombo->setEnabled(!dirty); ui.propCombo->setEnabled(!dirty); } void DaltonInputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("dalton/savepath").toString(); } void DaltonInputDialog::writeSettings(QSettings& settings) const { settings.setValue("dalton/savepath", m_savePath); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/daltoninputdialog.ui0000644000175000001440000012074012250371054026641 0ustar marcususers DaltonInputDialog 0 0 680 560 0 0 680 560 680 16777215 Dalton Input QLayout::SetMinimumSize true 0 0 662 270 662 270 0 true Basics 10 10 82 28 Title: titleLine 60 10 591 28 Adds what you type in the title line of the input file for your own informative purposes. Title 10 50 82 31 Calculate: calculationCombo 100 50 185 31 0 QComboBox::AdjustToContents Single Point Energy Properties 10 90 59 31 Theory: 100 90 86 31 QComboBox::AdjustToContents HF KS-DFT MP2 10 130 81 31 Basis Set: ccpvxzCombo 400 130 95 31 0 QComboBox::AdjustToContents cc-pVDZ cc-pVTZ cc-pVQZ cc-pV5Z cc-pV6Z 100 130 288 31 QComboBox::AdjustToContents STO-nG Pople-style Jensen's polarization consistent Dunning's correlation consistent 450 130 131 31 Qt::LeftToRight QComboBox::AdjustToContents aug-cc-pVDZ aug-cc-pVTZ aug-cc-pVQZ aug-cc-pV5Z aug-cc-pV6Z 400 130 119 31 0 QComboBox::AdjustToContents cc-pCVDZ cc-pCVTZ cc-pCVQZ cc-pCV5Z cc-pwCVDZ cc-pwCVTZ cc-pwCVQZ cc-pwCV5Z 100 200 241 25 Qt::LeftToRight Core correlating functions 100 170 171 25 Qt::LeftToRight Diffuse functions 400 130 87 31 QComboBox::AdjustToContents STO-2G STO-3G STO-6G 400 130 85 31 QComboBox::AdjustToContents 3-21G 4-31G 6-31G 6-311G 100 200 211 25 Polarization functions 400 130 103 31 QComboBox::AdjustToContents 3-21++G 6-31+G 6-31++G 400 130 158 31 QComboBox::AdjustToContents 3-21G* 6-31G* 6-31G** 6-31G(3df,3pd) 6-311G* 6-311G** 6-311G(2df,2pd) 400 130 186 31 QComboBox::AdjustToContents 3-21++G* 6-31+G* 6-31++G* 6-31++G** 6-311+G* 6-311++G** 6-311++G(2d,2p) 6-311++G(3df,3pd) 400 130 63 31 QComboBox::AdjustToContents pc-0 pc-1 pc-2 pc-3 pc-4 400 130 73 31 QComboBox::AdjustToContents apc-0 apc-1 apc-2 apc-3 apc-4 400 130 142 31 QComboBox::AdjustToContents aug-cc-pCVDZ aug-cc-pCVTZ aug-cc-pCVQZ aug-cc-pCV5Z 220 90 76 31 Direct 320 90 87 31 Run in parallel where possible. This is only possible for SCF wavefunctions and DFT calculations. Dalton only supports MPI in the current release and must be compiled and installed correctly. The number of nodes are set by using the "-N #" option when executing the "dalton" script. Parallel 400 130 43 31 QComboBox::AdjustToContents d- t- q- true DFT 10 10 90 31 Functional: 110 10 124 31 0 QComboBox::AdjustToContents B2PLYP B3LYP B3LYPg B3P86 B3P86g B3PW91 B1LYP B1PW91 BHandH BHandHLYP B86VWN B86LYP B86P86 B86PW91 BVWN BLYP BP86 BPW91 BW BFW CAMB3LYP DBLYP DBP86 DBPW91 EDF1 EDF2 G96VWN G96LYP G96P86 G96PW91 G961LYP KMLYP KT1 KT2 KT3 LDA LG1LYP OVWN OLYP OP86 OPW91 mPWVWN mPWLYP mPWP86 mPWPW91 mPW91 mPW1PW91 mPW3PW91 mPW1K mPW1N mPW1S PBE0 PBE0PBE PBE1PBE PBE PBEPBE RPBE revPBE mPBE PW91 PW91VWN PW91LYP PW91P86 PW91PW91 SVWN3 SVWN5 XLYP X3LYP 10 50 367 31 50 false false true Thresholds 20 120 65 31 Density: false 100 120 91 30 1.0D- 1 30 9 20 160 60 31 Orbital: false 100 160 91 30 1.0D- 1 30 13 20 80 157 31 Charge Integration: false 190 80 63 30 300 50 151 31 true Grid Specification 310 80 168 31 Partitioning Scheme: false 490 80 161 31 Becke Becke (original) SSF 310 160 111 31 Grid Quality: 430 160 96 31 QComboBox::AdjustToContents coarse normal fine ultrafine 310 120 126 34 Radial Scheme: false 450 120 71 31 LMG GC2 false 290 10 201 25 Show all functionals true Properties 10 10 77 31 Property: 90 10 169 31 QComboBox::AdjustToContents Polarizability Excitation Energy false 310 10 221 31 Frequency Dependent 150 50 81 30 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 10000 1 true 10 50 131 31 No. excitations: true 0 0 662 230 false false QLayout::SetMinimumSize Reset false Use Form Qt::Horizontal 48 26 false 0 0 Hide Preview Generate... Close previewText generateButton closeButton resetButton enableFormButton closeButton clicked() DaltonInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gaussianinputdialog.ui0000644000175000001440000003673112250371054027200 0ustar marcususers GaussianInputDialog 0 0 628 514 0 0 Gaussian Input QLayout::SetFixedSize Title: titleLine Title Calculation: calculationCombo 1 Single Point Energy Geometry Optimization Frequencies Qt::Horizontal 18 27 Processors: procSpin 1 1 Qt::Horizontal 58 26 Theory: theoryCombo 3 AM1 PM3 RHF B3LYP MP2 CCSD Qt::Horizontal 58 27 Basis: basisCombo 0 STO-3G 3-21G 6-31G(d) 6-31G(d,p) LANL2DZ Qt::Horizontal 58 26 Charge: chargeSpin -99 0 Qt::Horizontal 58 27 Multiplicity: multiplicitySpin 1 1 Qt::Horizontal 58 26 Output: outputCombo 0 Standard Molden Molekel Qt::Horizontal 18 27 Checkpoint: checkpointCheck Format: coordCombo true 0 Cartesian Z-matrix Z-matrix (compact) Qt::Horizontal 18 27 Qt::Horizontal 18 26 0 0 Hide Preview true false false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Compute... Generate... Close titleLine calculationCombo procSpin theoryCombo basisCombo chargeSpin multiplicitySpin outputCombo checkpointCheck coordCombo moreButton previewText generateButton closeButton resetButton enableFormButton closeButton clicked() GaussianInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/lammpsinputdialog.ui0000644000175000001440000007457312250371054026665 0ustar marcususers LammpsInputDialog 0 0 774 697 0 0 LAMMPS Input true QLayout::SetNoConstraint QLayout::SetDefaultConstraint Input file comments Title: titleLine Input file comments Title Qt::Horizontal Select the unit style to be used during the simulation. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://lammps.sandia.gov/doc/units.html"><span style=" text-decoration: underline; color:#0057ae;">http://lammps.sandia.gov/doc/units.html</span></a></p></body></html> Units unitsCombo Select the unit style to be used during the simulation. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://lammps.sandia.gov/doc/units.html"><span style=" text-decoration: underline; color:#0057ae;">http://lammps.sandia.gov/doc/units.html</span></a></p></body></html> 1 lj real metal si cgs electron Water Potential NONE SPC SPC/E Qt::Horizontal Select atom_style used by the data file. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://lammps.sandia.gov/doc/atom_style.html"><span style=" text-decoration: underline; color:#0057ae;">http://lammps.sandia.gov/doc/atom_style.html</span></a></p></body></html> Atom Style atomStyleCombo Select atom_style used by the data file. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://lammps.sandia.gov/doc/atom_style.html"><span style=" text-decoration: underline; color:#0057ae;">http://lammps.sandia.gov/doc/atom_style.html</span></a></p></body></html> 7 angle atomic bond charge dipole electron ellipsoid full line meso molecular peri sphere tri wavepacket Specify the name to be used for the coordinate file. Coordinate Data File Specify the name to be used for the coordinate file. Ensemble NVT NVE Temperature 2 20000.000000000000000 298.149999999999977 Select the number of Nosé-Hoover chains in the NVT ensemble. NH Chains Select the number of Nosé-Hoover chains in the NVT ensemble. 0 1 Qt::Horizontal 40 20 1 Qt::Horizontal Time step for the simulation in units according to "Units" specification. Time Step Time step for the simulation in units according to "Units" specification. 0.500000000000000 2.000000000000000 Filename of the XYZ file to write during the simulation. Dump XYZ Qt::Horizontal Number of dimensions in the system. Dimensions dimensionCombo Change Z boundary style. 0 p s f m fs fm Change Y boundary style. 0 p s f m fs fm Change X boundary style. 0 p s f m fs fm Select bondary Styles in X, Y and Z directions. Boundary Qt::Horizontal 40 20 Number of replicants in X, Y and Z directions. Replicate Qt::Horizontal 40 20 Replicate the X direction. 1 Replicate the Y direction. 1 Replicate the Z direction. 1 Filename of the XYZ file to write during the simulation. Total number of timesteps to run the simulation. Total Steps Total number of timesteps to run the simulation. 1000000000 50 Qt::Horizontal 40 20 Dump Interval 10000 1 Qt::Horizontal 40 20 Set the initial atom velocities for the simulation. Initial Velocities Select the distribution of initial atom velocities. gaussian uniform Set the initial atom velocities to match this temperature. Temperature Set the initial atom velocities to match this temperature. 20000.000000000000000 0.500000000000000 298.149999999999977 Remove system linear momentum from initial velocities. Zero Linear Momentum true Remove system angular momentum from initial velocities. Zero Angular Momentum true Qt::Horizontal 40 20 Control the thermodynamic output during the simulation. Output Output Interval 10000 50 Qt::Horizontal 40 20 Number of dimensions in the system. 1 2d 3d Thermodynamic output style. One Line Multi Line Qt::Horizontal 40 20 0 0 Hide Preview true Monospace 12 false <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Monospace'; font-size:12pt; font-weight:400; font-style:normal;"> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Courier New,courier'; font-size:10pt;"></p></body></html> false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Generate... Close titleLine moreButton previewText generateButton closeButton resetButton enableFormButton closeButton clicked() LammpsInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessukinputdialog.ui0000644000175000001440000003732312250371054027203 0ustar marcususers GAMESSUKInputDialog 0 0 564 435 0 0 GAMESS-UK Input Title: titleLine GAMESS-UK input generated by Avogadro Calculation: calculationCombo 0 Single Point Energy Geometry Optimization Transition State Search Frequencies Qt::Horizontal 40 20 Basis: Qt::Horizontal 40 20 1 STO-3G 3-21G 6-31G(d) 6-31G(d,p) cc-pVDZ cc-pVTZ Theory: theoryCombo false 0 HF DFT MP2 Qt::Horizontal 40 20 false DFT Functional: basisCombo Qt::Horizontal 40 20 false 2 SVWN BLYP B3LYP B97 HCTH FT97 Charge: chargeSpin -99 0 Qt::Horizontal 40 20 true Multiplicity: multiplicitySpin Qt::Horizontal 40 20 true 1 1 Format: true 0 Cartesian Z-matrix Qt::Horizontal 40 20 In direct mode, integrals are not stored on disk, but recalculated as needed. On modern systems with fast processors and slow disks, direct is often faster. Qt::RightToLeft Run in direct mode: Qt::Horizontal 40 20 0 0 Hide Preview Monospace false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Generate... Close titleLine previewText generateButton closeButton resetButton enableFormButton closeButton clicked() GAMESSUKInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamesshighlighter.cpp0000644000175000001440000002315212250371054026762 0ustar marcususers/********************************************************************** GamessHighlighter - syntax highlighting for Gamess input files Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "gamesshighlighter.h" namespace Avogadro { GamessHighlighter::GamessHighlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) { HighlightingRule rule; m_keywordFormat.setForeground(Qt::darkBlue); m_keywordFormat.setFontWeight(QFont::Bold); m_keywords << "\\s\\$BASIS\\b" << "\\s\\$CONTRL\\b" << "\\s\\$SYSTEM\\b" << "\\s\\$ZMAT\\b" << "\\s\\$LIBE\\b" << "\\s\\$SCF\\b" << "\\s\\$SCFMI\\b" << "\\s\\$DFT\\b" << "\\s\\$TDDFT\\b" << "\\s\\$CIS\\b" << "\\s\\$CISVEC\\b" << "\\s\\$MP2\\b" << "\\s\\$CCINP\\b" << "\\s\\$EOMINP\\b" << "\\s\\$MOPAC\\b" << "\\s\\$GUESS\\b" << "\\s\\$VEC\\b" << "\\s\\$MOFRZ\\b" << "\\s\\$STATPT\\b" << "\\s\\$TRUDGE\\b" << "\\s\\$TRURST\\b" << "\\s\\$FORCE\\b" << "\\s\\$CPHF\\b" << "\\s\\$MASS\\b" << "\\s\\$HESS\\b" << "\\s\\$GRAD\\b" << "\\s\\$DIPDR\\b" << "\\s\\$VIB\\b" << "\\s\\$VIB2\\b" << "\\s\\$VSCF\\b" << "\\s\\$VIBSCF\\b" << "\\s\\$GAMMA\\b" << "\\s\\$EQGEOM\\b" << "\\s\\$HLOWT\\b" << "\\s\\$GLOWT\\b" << "\\s\\$IRC\\b" << "\\s\\$DRC\\b" << "\\s\\$MEX\\b" << "\\s\\$MD\\b" << "\\s\\$RDF\\b" << "\\s\\$GLOBOP\\b" << "\\s\\$GRADEX\\b" << "\\s\\$SURF\\b" << "\\s\\$LOCAL\\b" << "\\s\\$TWOEI\\b" << "\\s\\$TRUNCN\\b" << "\\s\\$ELMOM\\b" << "\\s\\$ELPOT\\b" << "\\s\\$ELDENS\\b" << "\\s\\$ELFLDG\\b" << "\\s\\$POINTS\\b" << "\\s\\$GRID\\b" << "\\s\\$PDC\\b" << "\\s\\$MOLGRF\\b" << "\\s\\$STONE\\b" << "\\s\\$RAMAN\\b" << "\\s\\$ALPDR\\b" << "\\s\\$NMR\\b" << "\\s\\$MOROKM\\b" << "\\s\\$FFCALC\\b" << "\\s\\$TDHF\\b" << "\\s\\$TDHFX\\b" << "\\s\\$EFRAG\\b" << "\\s\\$FRAGNAME\\b" << "\\s\\$FRGRPL\\b" << "\\s\\$EWALD\\b" << "\\s\\$MAKEFP\\b" << "\\s\\$PRTEFP\\b" << "\\s\\$DAMP\\b" << "\\s\\$DAMPGS\\b" << "\\s\\$PCM\\b" << "\\s\\$PCMGRD\\b" << "\\s\\$PCMCAV\\b" << "\\s\\$TESCAV\\b" << "\\s\\$NEWCAV\\b" << "\\s\\$IEFPCM\\b" << "\\s\\$PCMITR\\b" << "\\s\\$DISBS\\b" << "\\s\\$DISREP\\b" << "\\s\\$SVP\\b" << "\\s\\$SVPIRF\\b" << "\\s\\$COSGMS\\b" << "\\s\\$SCRF\\b" << "\\s\\$ECP\\b" << "\\s\\$MCP\\b" << "\\s\\$RELWFN\\b" << "\\s\\$EFIELD\\b" << "\\s\\$INTGRL\\b" << "\\s\\$FMM\\b" << "\\s\\$TRANS\\b" << "\\s\\$FMO\\b" << "\\s\\$FMOPRP\\b" << "\\s\\$FMOXYZ\\b" << "\\s\\$OPTFMO\\b" << "\\s\\$FMOHYB\\b" << "\\s\\$FMOBND\\b" << "\\s\\$FMOENM\\b" << "\\s\\$FMOEND\\b" << "\\s\\$OPTRST\\b" << "\\s\\$GDDI\\b" << "\\s\\$ELG\\b" << "\\s\\$DANDC\\b" << "\\s\\$DCCORR\\b" << "\\s\\$SUBSCF\\b" << "\\s\\$SUBCOR\\b" << "\\s\\$MP2RES\\b" << "\\s\\$CCRES\\b" << "\\s\\$CIINP\\b" << "\\s\\$DET\\b" << "\\s\\$CIDET\\b" << "\\s\\$GEN\\b" << "\\s\\$CIGEN\\b" << "\\s\\$ORMAS\\b" << "\\s\\$CEEIS\\b" << "\\s\\$CEDATA\\b" << "\\s\\$GCILST\\b" << "\\s\\$GMCPT\\b" << "\\s\\$PDET\\b" << "\\s\\$ADDDET\\b" << "\\s\\$REMDET\\b" << "\\s\\$SODET\\b" << "\\s\\$DRT\\b" << "\\s\\$CIDRT\\b" << "\\s\\$MCSCF\\b" << "\\s\\$MRMP\\b" << "\\s\\$DETPT\\b" << "\\s\\$MCQDPT\\b" << "\\s\\$CASCI\\b" << "\\s\\$IVOORB\\b" << "\\s\\$CISORT\\b" << "\\s\\$GUGEM\\b" << "\\s\\$GUGDIA\\b" << "\\s\\$GUGDM\\b" << "\\s\\$GUGDM2\\b" << "\\s\\$LAGRAN\\b" << "\\s\\$TRFDM2\\b" << "\\s\\$TRANST\\b" << "\\s\\$DATA\\b"; rule.format = m_keywordFormat; foreach (const QString &pattern, m_keywords) { rule.pattern = QRegExp(pattern); m_highlightingRules.append(rule); } rule.pattern = QRegExp("\\s\\$END\\b"); m_highlightingRules.append(rule); m_singleLineCommentFormat.setForeground(Qt::green); rule.pattern = QRegExp("![^\n]*"); rule.format = m_singleLineCommentFormat; m_highlightingRules.append(rule); m_numberFormat.setForeground(Qt::blue); rule.pattern = QRegExp("(\\b|[\\s-])[0-9]+\\.([0-9]+\\b)?|\\.[0-9]+\\b"); rule.format = m_numberFormat; m_highlightingRules.append(rule); m_numberFormat.setForeground(Qt::blue); rule.pattern = QRegExp("(\\b|[\\s-])[0-9]+\\.([0-9]+\\b)?|\\.[0-9]+\\b"); rule.format = m_numberFormat; m_highlightingRules.append(rule); rule.pattern = QRegExp("(\\b|[\\s-])[0-9]+([0-9]+\\b)?|\\.[0-9]+\\b"); rule.format = m_numberFormat; m_highlightingRules.append(rule); m_inDataBlockFormat.setForeground(Qt::gray); m_errorFormat.setForeground(Qt::red); m_errorFormat.setBackground(Qt::yellow); } void GamessHighlighter::highlightBlock(const QString &text) { // Single line comments QRegExp pattern("![^\n]*"); int commentIndex = pattern.indexIn(text); if (commentIndex >= 0) setFormat(commentIndex, pattern.matchedLength(), m_singleLineCommentFormat); setCurrentBlockState(0); int startIndex = 0; int keywordLength = 0; if (previousBlockState() != 1) { foreach(const QString &pattern, m_keywords) { QRegExp expression(pattern); expression.setCaseSensitivity(Qt::CaseInsensitive); startIndex = expression.indexIn(text); keywordLength = expression.matchedLength(); if (startIndex >= 0) { setFormat(startIndex, keywordLength, m_keywordFormat); break; } } } while (startIndex >= 0) { QRegExp endExpression("\\s\\$END\\b"); endExpression.setCaseSensitivity(Qt::CaseInsensitive); int endIndex = endExpression.indexIn(text, startIndex); int blockLength; if (endIndex == -1) { setCurrentBlockState(1); blockLength = text.length() - startIndex - keywordLength; } else { setFormat(endIndex, endExpression.matchedLength(), m_keywordFormat); blockLength = endIndex - startIndex - keywordLength; } setFormat(startIndex + keywordLength, blockLength, m_inDataBlockFormat); bool found = false; foreach(const QString &pattern, m_keywords) { QRegExp expression(pattern); int index = expression.indexIn(text, startIndex + blockLength); if (index > startIndex) { found = true; startIndex = index; keywordLength = expression.matchedLength(); setFormat(startIndex, keywordLength, m_keywordFormat); break; } } if (!found) break; } if (previousBlockState() == 1) { // Anything outside of data blocks is a comment foreach (const HighlightingRule &rule, m_highlightingRules) { QRegExp expression(rule.pattern); expression.setCaseSensitivity(Qt::CaseInsensitive); int index = text.indexOf(expression); while (index >= 0) { int length = expression.matchedLength(); setFormat(index, length, rule.format); index = text.indexOf(expression, index + length); } } } // Anything over 80 columns will not be read if (text.length() > 80) setFormat(80, text.length(), m_errorFormat); } } // End namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/quantuminput/daltoninputdialog.h0000644000175000001440000001251312250371054026451 0ustar marcususers/************************************************************************* DaltonInputDialog - Dialog for generating Dalton input files Jogvan Magnus Olsen Initial source code was shamelessly copied from gaussianinputdialog.cpp *************************************************************************/ #ifndef DALTONINPUTDIALOG_H #define DALTONINPUTDIALOG_H #include "inputdialog.h" #include "ui_daltoninputdialog.h" namespace Avogadro { class Molecule; class DaltonInputDialog : public InputDialog { Q_OBJECT public: explicit DaltonInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~DaltonInputDialog(); void setMolecule(Molecule *molecule); void readSettings(QSettings&); void writeSettings(QSettings&) const; enum calculationType{SP, PROP}; enum theoryType{HF, DFT, MP2}; enum functionalType{B2PLYP, B3LYP, B3LYPg, B3P86, B3P86g, B3PW91, B1LYP, B1PW91, BHandH, BHandHLYP, B86VWN, B86LYP, B86P86, B86PW91, BVWN, BLYP, BP86, BPW91, BW, BFW, CAMB3LYP, DBLYP, DBP86, DBPW91, EDF1, EDF2, G96VWN, G96LYP, G96P86, G96PW91, G961LYP, KMLYP, KT1, KT2, KT3, LDA, LG1LYP, OVWN, OLYP, OP86, OPW91, mPWVWN, mPWLYP, mPWP86, mPWPW91, mPW91, mPW1PW91, mPW3PW91, mPW1K, mPW1N, mPW1S, PBE0, PBE0PBE, PBE1PBE, PBE, PBEPBE, RPBE, revPBE, mPBE, PW91, PW91VWN, PW91LYP, PW91P86, PW91PW91, SVWN3, SVWN5, XLYP, X3LYP}; enum basisType{STOnG, pople, jensen, dunning}; enum stoBasis{STO2G, STO3G, STO6G}; enum popleBasis{p321G, p431G, p631G, p6311G}; enum poplediffBasis{p321ppG, p631pG, p631ppG}; enum poplepolBasis{p321Gs, p631Gs, p631Gss, p631G33, p6311Gs, p6311Gss, p6311G22}; enum poplediffpolBasis{p321ppGs, p631pGs, p631ppGs, p631ppGss, p6311pGs, p6311ppGss, p6311ppG22, p6311ppG33}; enum pcBasis{pc0, pc1, pc2, pc3, pc4}; enum apcBasis{apc0, apc1, apc2, apc3, apc4}; enum ccpvxzBasis{ccpVDZ, ccpVTZ, ccpVQZ, ccpV5Z, ccpV6Z}; enum accpvxzBasis{accpVDZ, accpVTZ, accpVQZ, accpV5Z, accpV6Z}; enum ccpcvxzBasis{ccpCVDZ, ccpCVTZ, ccpCVQZ, ccpCV5Z, ccpwCVDZ, ccpwCVTZ, ccpwCVQZ, ccpwCV5Z}; enum accpcvxzBasis{accpCVDZ, accpCVTZ, accpCVQZ, accpCV5Z}; enum xaugccBasis{sing, doub, trip, quad}; enum dftGrid{coarse, normal, fine, ultrafine}; enum propType{polari, exci}; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::DaltonInputDialog ui; // Molecule* m_molecule; // Internal data structure for the calculation // QString m_title; calculationType m_calculationType; theoryType m_theoryType; functionalType m_functionalType; basisType m_basisType; stoBasis m_stoBasis; popleBasis m_popleBasis; poplediffBasis m_poplediffBasis; poplepolBasis m_poplepolBasis; poplediffpolBasis m_poplediffpolBasis; pcBasis m_pcBasis; apcBasis m_apcBasis; ccpvxzBasis m_ccpvxzBasis; accpvxzBasis m_accpvxzBasis; ccpcvxzBasis m_ccpcvxzBasis; accpcvxzBasis m_accpcvxzBasis; xaugccBasis m_xaugccBasis; dftGrid m_dftGrid; propType m_propType; int m_exci; bool m_coreBasis; bool m_diffBasis; bool m_polBasis; bool m_directCheck; bool m_parallelCheck; bool m_dirty; bool m_warned; QString m_inputFile; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getCalculationType(calculationType t); QString getTheoryType(theoryType t); QString getFunctionalType(functionalType t); QString getstoBasis(stoBasis t); QString getpopleBasis(popleBasis t); QString getpoplediffBasis(poplediffBasis t); QString getpoplepolBasis(poplepolBasis t); QString getpoplediffpolBasis(poplediffpolBasis t); QString getpcBasis(pcBasis t); QString getapcBasis(apcBasis t); QString getccpvxzBasis(ccpvxzBasis t); QString getaccpvxzBasis(accpvxzBasis t); QString getccpcvxzBasis(ccpcvxzBasis t); QString getaccpcvxzBasis(accpcvxzBasis t); QString getxaugccBasis(xaugccBasis t); QString getdftGrid(dftGrid t); QString getPropType(propType t); // Enable/disable form elements void deckDirty(bool); //QString saveInputFile(); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void moreClicked(); void previewEdited(); void setTitle(); void setCalculation(int); void setTheory(int); void setFunctional(int); void setBasis(int); void setstoBasis(int); void setpopleBasis(int); void setpoplediffBasis(int); void setpoplepolBasis(int); void setpoplediffpolBasis(int); void setpcBasis(int); void setapcBasis(int); void setccpvxzBasis(int); void setaccpvxzBasis(int); void setccpcvxzBasis(int); void setaccpcvxzBasis(int); void setxaugccBasis(int); void setcoreBasis(int); void setdiffBasis(int); void setpolBasis(int); void setdirectCheck(int); void setparallelCheck(int); void setdftGrid(int); void setProp(int); void setExci(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/teracheminputdialog.cpp0000644000175000001440000002677112250371054027326 0ustar marcususers/********************************************************************** TeraChemInputDialog - Dialog for generating TeraChem input decks Copyright (C) 2012 Albert DeFusco copied from qmcheminputdialog.cpp This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "teracheminputdialog.h" #include #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { TeraChemInputDialog::TeraChemInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_calculationType(SP), m_theoryType(HF), m_basisType(STO3G), m_coordType(PDB), m_dispType(NO), m_output(), m_unrestricted(false), m_dirty(false), m_warned(false) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.basisCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBasis(int))); connect(ui.multiplicitySpin, SIGNAL(valueChanged(int)), this, SLOT(setMultiplicity(int))); connect(ui.chargeSpin, SIGNAL(valueChanged(int)), this, SLOT(setCharge(int))); connect(ui.previewText, SIGNAL(cursorPositionChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); connect(ui.checkUnrestricted, SIGNAL(toggled(bool)), this, SLOT(setUnrestricted(bool))); connect(ui.comboCoord, SIGNAL(currentIndexChanged(int)), this, SLOT(setCoordType(int))); connect(ui.comboDisp, SIGNAL(currentIndexChanged(int)), this, SLOT(setDispType(int))); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } TeraChemInputDialog::~TeraChemInputDialog() { QSettings settings; writeSettings(settings); } void TeraChemInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) disconnect(m_molecule, 0, this, 0); m_molecule = molecule; // Update the preview text whenever primitives are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void TeraChemInputDialog::showEvent(QShowEvent *) { updatePreviewText(); } void TeraChemInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("TeraChem Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the TeraChem input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } } void TeraChemInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.calculationCombo->setCurrentIndex(0); ui.theoryCombo->setCurrentIndex(0); ui.basisCombo->setCurrentIndex(0); ui.multiplicitySpin->setValue(1); ui.checkUnrestricted->setChecked(false); ui.chargeSpin->setValue(0); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } void TeraChemInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("TeraChem Input Deck"), QString("tcin")); } void TeraChemInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void TeraChemInputDialog::enableFormClicked() { updatePreviewText(); } void TeraChemInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->document()->isModified()) deckDirty(true); } void TeraChemInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void TeraChemInputDialog::setCalculation(int n) { m_calculationType = (TeraChemInputDialog::calculationType) n; updatePreviewText(); } void TeraChemInputDialog::setTheory(int n) { m_theoryType = (TeraChemInputDialog::theoryType) n; ui.basisCombo->setEnabled(true); updatePreviewText(); } void TeraChemInputDialog::setBasis(int n) { m_basisType = (TeraChemInputDialog::basisType) n; updatePreviewText(); } void TeraChemInputDialog::setMultiplicity(int n) { m_multiplicity = n; if(m_multiplicity != 1) { m_unrestricted = true; ui.checkUnrestricted->setChecked(true); ui.checkUnrestricted->setEnabled(false); } else if (m_multiplicity == 1) ui.checkUnrestricted->setEnabled(true); updatePreviewText(); } void TeraChemInputDialog::setCharge(int n) { m_charge = n; updatePreviewText(); } void TeraChemInputDialog::setUnrestricted(bool n) { m_unrestricted = n; updatePreviewText(); } void TeraChemInputDialog::setCoordType(int n) { m_coordType = (TeraChemInputDialog::coordType) n; updatePreviewText(); } void TeraChemInputDialog::setDispType(int n) { m_dispType = (TeraChemInputDialog::dispType) n; updatePreviewText(); } QString TeraChemInputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); // Title line mol << "#\n# " << m_title << "\n#\n\n"; // Now for the calculation type mol << "run " << getCalculationType(m_calculationType) << "\n\n"; // Now specify the job type and basis set mol << "method " << getTheoryType(m_theoryType) << "\n"; if(m_dispType != NO) mol << "dispersion " << getDispType(m_dispType) << "\n"; mol << "basis " << getBasisType(m_basisType) << "\n"; // Now for the charge and multiplicity mol << "charge " << m_charge << "\n"; mol << "spinmul " << m_multiplicity << "\n\n"; //mol << "coordinates " << m_coordFile << "\n\n"; QFileInfo coordFile(m_molecule->fileName()); QString coordFileName = coordFile.baseName(); coordFileName = coordFileName+getCoordType(m_coordType); mol << "coordinates " << coordFileName << "\n\n"; // End the job spec section mol << "\nend\n"; return buffer; } QString TeraChemInputDialog::getCalculationType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case SP: return "energy"; case GRAD: return "gradient"; case OPT: return "minimize"; default: return "energy"; } } QString TeraChemInputDialog::getTheoryType(theoryType t) { // Translate the enum to text for the output generation // // unrestricted calculation prepend a u to the method QString restriction = ""; QString mDefault = "rhf"; if(m_unrestricted) { restriction = "u"; mDefault = "uhf"; } switch (t) { case HF: { if(m_unrestricted) return "uhf"; else return "rhf"; } case BLYP: return restriction+"blyp"; case B3LYP: return restriction+"b3lyp"; case B3LYP1: return restriction+"b3lyp1"; case B3LYP5: return restriction+"b3lyp5"; case PBE: return restriction+"pbe"; case REVPBE: return restriction+"revpbe"; default: return mDefault; } } QString TeraChemInputDialog::getBasisType(basisType t) { // Translate the enum to text for the output generation switch (t) { case STO3G: return "sto-3g"; case B321G: return "3-21G"; case B631Gd: return "6-31G(d)"; case B631Gdp: return "6-31G(d,p)"; case B631plusGd: return "6-31+G(d)"; case B6311Gd: return "6-311G(d)"; case ccpVDZ: return "cc-pVDZ"; default: return "6-31G(d)"; } } QString TeraChemInputDialog::getCoordType(coordType t) { switch (t) { case PDB: return ".pdb"; case XYZ: return ".xyz"; default: return ".pdb"; } } QString TeraChemInputDialog::getDispType(dispType t) { switch (t) { case NO: return "no"; case YES: return "yes"; case D2: return "d2"; case D3: return "d3"; default: return "no"; } } void TeraChemInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.basisCombo->setEnabled(!dirty); ui.multiplicitySpin->setEnabled(!dirty); ui.chargeSpin->setEnabled(!dirty); ui.comboCoord->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } void TeraChemInputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("terachem/savepath").toString(); } void TeraChemInputDialog::writeSettings(QSettings& settings) const { settings.setValue("terachem/savepath", m_savePath); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gaussianinputdialog.cpp0000644000175000001440000005634712250371054027352 0ustar marcususers/********************************************************************** GaussianInputDialog - Dialog for generating Gaussian input decks Copyright (C) 2008 Marcus D. Hanwell Copyright (C) 2008 Michael Banck This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "gaussianinputdialog.h" #include #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { GaussianInputDialog::GaussianInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_calculationType(OPT), m_theoryType(B3LYP), m_basisType(B631Gd), m_procs(1), m_output(""), m_chk(false), m_coordType(CARTESIAN), m_dirty(false), m_warned(false), m_process(0), m_progress(0) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.basisCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBasis(int))); connect(ui.multiplicitySpin, SIGNAL(valueChanged(int)), this, SLOT(setMultiplicity(int))); connect(ui.chargeSpin, SIGNAL(valueChanged(int)), this, SLOT(setCharge(int))); connect(ui.procSpin, SIGNAL(valueChanged(int)), this, SLOT(setProcs(int))); connect(ui.outputCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setOutput(int))); connect(ui.checkpointCheck, SIGNAL(stateChanged(int)), this, SLOT(setChk(int))); connect(ui.coordCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCoords(int))); connect(ui.previewText, SIGNAL(textChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.computeButton, SIGNAL(clicked()), this, SLOT(computeClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } GaussianInputDialog::~GaussianInputDialog() { QSettings settings; writeSettings(settings); } void GaussianInputDialog::writeSettings(QSettings &settings) const { settings.setValue("gaussian/CalcType", ui.calculationCombo->currentIndex()); settings.setValue("gaussian/Procs", ui.procSpin->value()); settings.setValue("gaussian/Theory", ui.theoryCombo->currentIndex()); settings.setValue("gaussian/Basis", ui.basisCombo->currentIndex()); settings.setValue("gaussian/Output", ui.outputCombo->currentIndex()); settings.setValue("gaussian/Chk", ui.checkpointCheck->isChecked()); settings.setValue("gaussian/Coord", ui.coordCombo->currentIndex()); settings.setValue("gaussian/savepath", m_savePath); } void GaussianInputDialog::readSettings(QSettings &settings) { setProcs(settings.value("gaussian/Procs", 2).toInt()); ui.procSpin->setValue(settings.value("gaussian/Procs", 1).toInt()); setCalculation(settings.value("gaussian/CalcType", 1).toInt()); ui.calculationCombo->setCurrentIndex(settings.value("gaussian/CalcType", 1).toInt()); setTheory(settings.value("gaussian/Theory", 3).toInt()); ui.theoryCombo->setCurrentIndex(settings.value("gaussian/Theory", 3).toInt()); setBasis(settings.value("gaussian/Basis", 2).toInt()); ui.basisCombo->setCurrentIndex(settings.value("gaussian/Basis", 2).toInt()); setOutput(settings.value("gaussian/Output", 0).toInt()); ui.outputCombo->setCurrentIndex(settings.value("gaussian/Output", 0).toInt()); setChk(settings.value("gaussian/Chk", false).toBool()); ui.checkpointCheck->setChecked(settings.value("gaussian/Chk", false).toBool()); setCoords(settings.value("gaussian/Coord", 0).toInt()); ui.coordCombo->setCurrentIndex(settings.value("gaussian/Coord", 0).toInt()); m_savePath = settings.value("gaussian/savepath").toString(); } void GaussianInputDialog::showEvent(QShowEvent *) { updatePreviewText(); if (pathToG03().isEmpty()) ui.computeButton->hide(); else ui.computeButton->show(); } QString GaussianInputDialog::pathToG03() const { QString returnPath; QStringList pathList; QStringList environment = QProcess::systemEnvironment(); // This is a pain // Each item in the list is a key-value pair // so we match PATH // and then we split out the value (the bit after the =) // and split the PATH by ':' characters foreach(const QString &key, environment) { if (key.startsWith(QLatin1String("PATH"))) pathList = key.split('=').at(1).split(':'); } // Add default G03 and G09 directories pathList << "/usr/local/g03" << "/usr/local/g09"; // I don't know how this works for Windows -- probably need a different method foreach(const QString &path, pathList) { QFileInfo g03(path + '/' + "g03"); if (g03.exists() && g03.isExecutable()) returnPath = g03.canonicalFilePath(); QFileInfo g09(path + '/' + "g09"); if (g09.exists() && g09.isExecutable()) returnPath = g09.canonicalFilePath(); } return returnPath; } void GaussianInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) { disconnect(m_molecule, 0, this, 0); } m_molecule = molecule; // Update the preview text whenever atoms are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void GaussianInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("Gaussian Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the Gaussian input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) ui.previewText->setText(generateInputDeck()); } void GaussianInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.calculationCombo->setCurrentIndex(1); ui.theoryCombo->setCurrentIndex(3); ui.basisCombo->setCurrentIndex(2); ui.multiplicitySpin->setValue(0); ui.chargeSpin->setValue(0); ui.procSpin->setValue(1); } QString GaussianInputDialog::saveInputFile(QString inputDeck, QString fileType, QString ext) { // Fragment copied from InputDialog // Try to set default save path for dialog using the next sequence: // 1) directory of current file (if any); // 2) directory where previous deck was saved; // 3) $HOME QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if(m_savePath == "") { if (defaultPath.isEmpty()) defaultPath = QDir::homePath(); } else { defaultPath = m_savePath; } QString defaultFileName = defaultPath + '/' + defaultFile.baseName() + "." + ext; QString fileName = QFileDialog::getSaveFileName(this, tr("Save Input Deck"), defaultFileName, fileType + " (*." + ext + ")"); if(fileName == "") return fileName; QFile file(fileName); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) return QString(); // end of copied // checkpoint QString checkpointName = QFileInfo(fileName).baseName(); checkpointName.prepend("%Chk="); checkpointName.append(".chk"); inputDeck.replace(QLatin1String("%Chk=checkpoint.chk"), checkpointName, Qt::CaseInsensitive); // Fragment copied from InputDialog file.write(inputDeck.toLocal8Bit()); // prevent troubles in Windows file.close(); // flush buffer! m_savePath = QFileInfo(file).absolutePath(); return fileName; } void GaussianInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("Gaussian Input Deck"), QString("com")); } void GaussianInputDialog::computeClicked() { if (m_process != 0) { QMessageBox::warning(this, tr("Gaussian Running."), tr("Gaussian is already running. Wait until the previous calculation is finished.")); return; } QString fileName = saveInputFile(ui.previewText->toPlainText(), tr("Gaussian Input Deck"), QString("com")); if (fileName.isEmpty()) return; QFileInfo info(pathToG03()); if (!info.exists() || !info.isExecutable()) { QMessageBox::warning(this, tr("Gaussian Not Installed."), tr("The G03 executable, cannot be found.")); return; } m_process = new QProcess(this); QFileInfo input(fileName); m_process->setWorkingDirectory(input.absolutePath()); QStringList arguments; arguments << fileName; m_inputFile = fileName; // save for reading in output m_process->start(pathToG03(), arguments); if (!m_process->waitForStarted()) { QMessageBox::warning(this, tr("G03 failed to start."), tr("G03 did not start. Perhaps it is not installed correctly.")); } connect(m_process, SIGNAL(finished(int)), this, SLOT(finished(int))); m_progress = new QProgressDialog(this); m_progress->setRange(0,0); // indeterminate progress m_progress->setLabelText(tr("Running Gaussian calculation...")); m_progress->show(); connect(m_progress, SIGNAL(canceled()), this, SLOT(stopProcess())); } void GaussianInputDialog::stopProcess() { if (m_progress) { m_progress->deleteLater(); m_progress = 0; } disconnect(m_process, 0, this, 0); // don't send a "finished" signal m_process->close(); m_process->deleteLater(); m_process = 0; } void GaussianInputDialog::finished(int exitCode) { if (m_progress) { m_progress->cancel(); m_progress->deleteLater(); m_progress = 0; } if (m_process) { disconnect(m_process, 0, this, 0); m_process->deleteLater(); m_process = 0; } else { return; // we probably cancelled } if (exitCode) { QMessageBox::warning(this, tr("G03 Crashed."), tr("Gaussian did not run correctly. Perhaps it is not installed correctly.")); return; } if (!m_molecule) return; // we have a successful run. // try to run formchk QFileInfo inputFile(m_inputFile); QString checkpointFileName = inputFile.canonicalPath() + '/' + inputFile.baseName() + ".chk"; QFileInfo checkpointFile(checkpointFileName); if (checkpointFile.exists() && checkpointFile.isReadable()) { // let's see if formchk exists QString formchkFilePath = QFileInfo(pathToG03()).canonicalPath() + '/' + "formchk"; QFileInfo formchkInfo(formchkFilePath); if (formchkInfo.exists() && formchkInfo.isExecutable()) { QStringList arguments; arguments << checkpointFileName; QProcess::execute(formchkFilePath, arguments); // if this fails, it's not a big deal } } // Now, read in the results and close the dialog QString outputFile = inputFile.canonicalPath() + '/' + inputFile.baseName() + ".log"; emit readOutput(outputFile); close(); } void GaussianInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void GaussianInputDialog::enableFormClicked() { deckDirty(false); updatePreviewText(); } void GaussianInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->toPlainText() != generateInputDeck()) deckDirty(true); else deckDirty(false); } void GaussianInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void GaussianInputDialog::setCalculation(int n) { switch (n) { case 0: m_calculationType = SP; break; case 1: m_calculationType = OPT; break; case 2: m_calculationType = FREQ; break; default: m_calculationType = SP; } updatePreviewText(); } void GaussianInputDialog::setTheory(int n) { switch (n) { case 0: m_theoryType = AM1; break; case 1: m_theoryType = PM3; break; case 2: m_theoryType = RHF; break; case 3: m_theoryType = B3LYP; break; case 4: m_theoryType = MP2; break; case 5: m_theoryType = CCSD; break; default: m_theoryType = RHF; } if (m_theoryType == AM1 || m_theoryType == PM3) ui.basisCombo->setEnabled(false); else ui.basisCombo->setEnabled(true); updatePreviewText(); } void GaussianInputDialog::setBasis(int n) { switch (n) { case 0: m_basisType = STO3G; break; case 1: m_basisType = B321G; break; case 2: m_basisType = B631Gd; break; case 3: m_basisType = B631Gdp; break; case 4: m_basisType = LANL2DZ; break; default: m_basisType = B631Gd; } updatePreviewText(); } void GaussianInputDialog::setMultiplicity(int n) { m_multiplicity = n; updatePreviewText(); } void GaussianInputDialog::setCharge(int n) { m_charge = n; updatePreviewText(); } void GaussianInputDialog::setProcs(int n) { if (n > 0) m_procs = n; updatePreviewText(); } void GaussianInputDialog::setOutput(int n) { switch (n) { case 1: m_output = " gfprint pop=full"; break; case 2: m_output = " gfoldprint pop=full"; break; default: m_output = ""; } updatePreviewText(); } void GaussianInputDialog::setChk(int n) { if (n) m_chk = true; else m_chk = false; updatePreviewText(); } void GaussianInputDialog::setCoords(int n) { switch (n) { case 0: m_coordType = CARTESIAN; break; case 1: m_coordType = ZMATRIX; break; case 2: m_coordType = ZMATRIX_COMPACT; break; default: m_coordType = CARTESIAN; } updatePreviewText(); } QString GaussianInputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); // These directives are required before the job specification if (m_procs > 1) mol << "%NProcShared=" << m_procs << '\n'; if (m_chk) { mol << "%Chk=checkpoint.chk\n"; } // Now specify the job type etc mol << "#n " << getTheoryType(m_theoryType); // Not all theories have a basis set if (m_theoryType != AM1 && m_theoryType != PM3) mol << '/' << getBasisType(m_basisType); // Now for the calculation type mol << ' ' << getCalculationType(m_calculationType); // Output parameters for some programs mol << m_output; // Title line mol << "\n\n " << m_title << "\n\n"; // Now for the charge and multiplicity mol << m_charge << ' ' << m_multiplicity << '\n'; // Now to output the actual molecular coordinates // Cartesian coordinates if (m_molecule && m_coordType == CARTESIAN) { QTextStream mol(&buffer); QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { mol << qSetFieldWidth(3) << left << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << atom->pos()->x() << atom->pos()->y() << atom->pos()->z() << qSetFieldWidth(0) << '\n'; } mol << '\n'; } // Z-matrix else if (m_molecule && m_coordType == ZMATRIX) { QTextStream mol(&buffer); OpenBabel::OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); foreach (Atom *atom, m_molecule->atoms()) { a = vic[atom->index()+1]->_a; b = vic[atom->index()+1]->_b; c = vic[atom->index()+1]->_c; mol << qSetFieldWidth(3) << left << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(0); if (atom->index() > 0) mol << ' ' << a->GetIdx() << " B" << atom->index(); if (atom->index() > 1) mol << ' ' << b->GetIdx() << " A" << atom->index(); if (atom->index() > 2) mol << ' ' << c->GetIdx() << " D" << atom->index(); mol << '\n'; } mol << "Variables:" << endl; foreach (Atom *atom, m_molecule->atoms()) { r = vic[atom->index()+1]->_dst; w = vic[atom->index()+1]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->index()+1]->_tor; if (t < 0.0) t += 360.0; if (atom->index() > 0) mol << "B" << atom->index() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r << qSetFieldWidth(0) << '\n'; if (atom->index() > 1) mol << "A" << atom->index() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w << qSetFieldWidth(0) << '\n'; if (atom->index() > 2) mol << "D" << atom->index() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t << qSetFieldWidth(0) << '\n'; } mol << '\n'; foreach(OpenBabel::OBInternalCoord *c, vic) delete c; } else if (m_molecule && m_coordType == ZMATRIX_COMPACT) { QTextStream mol(&buffer); OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; mol << qSetFieldWidth(3) << left << QString(etab.GetSymbol(atom->GetAtomicNum())) << qSetFieldWidth(6) << right; if (atom->GetIdx() > 1) mol << a->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r; if (atom->GetIdx() > 2) mol << qSetFieldWidth(6) << right << b->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w; if (atom->GetIdx() > 3) mol << qSetFieldWidth(6) << right << c->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t; mol << qSetFieldWidth(0) << '\n'; } mol << '\n'; foreach(OpenBabel::OBInternalCoord *c, vic) delete c; } return buffer; } QString GaussianInputDialog::getCalculationType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case SP: return "SP"; case OPT: return "Opt"; case FREQ: return "Opt Freq"; default: return "SP"; } } QString GaussianInputDialog::getTheoryType(theoryType t) { // Translate the enum to text for the output generation switch (t) { case AM1: return "AM1"; case PM3: return "PM3"; case RHF: return "RHF"; case B3LYP: return "B3LYP"; case MP2: return "MP2"; case CCSD: return "CCSD"; default: return "RHF"; } } QString GaussianInputDialog::getBasisType(basisType t) { // Translate the enum to text for the output generation switch (t) { case STO3G: return "STO-3G"; case B321G: return "3-21G"; case B631Gd: return "6-31G(d)"; case B631Gdp: return "6-31G(d,p)"; case LANL2DZ: return "LANL2DZ"; default: return "6-31G(d)"; } } void GaussianInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.basisCombo->setEnabled(!dirty); ui.multiplicitySpin->setEnabled(!dirty); ui.chargeSpin->setEnabled(!dirty); ui.procSpin->setEnabled(!dirty); ui.outputCombo->setEnabled(!dirty); ui.checkpointCheck->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/abinitinputdialog.h0000644000175000001440000001126112250371054026435 0ustar marcususers/********************************************************************** GaussianInputDialog - Dialog for generating Gaussian input decks Copyright (C) 2010 Matthieu Verstraete This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ABINITINPUTDIALOG_H #define ABINITINPUTDIALOG_H #include #include #include #include "inputdialog.h" #include "ui_abinitinputdialog.h" namespace Avogadro { class Molecule; class AbinitInputDialog : public InputDialog { Q_OBJECT public: explicit AbinitInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~AbinitInputDialog(); void setMolecule(Molecule *molecule); // which types do we want here? // DFPT? // geometry optimization ionmov? // // Obtained from Avogadro: // xred // acell 1 1 1 Angstr + rprim // znucl // typat ntypat // natom // /* These are lists of symbols for use below */ enum coordType { XANGST = 0, XRED }; enum toleranceType{ TOLDFE = 0, TOLWFR, TOLVRS, TOLDFF, TOLRFF }; enum occoptType { SEMICOND = 0, FERMI, COLD, GAUSSIAN }; enum ionmovType { NOMOV = 0, VISCOUS, BFGS, BGFSE }; /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings); QString pathToAbinit() const; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); QString saveInputFile(QString inputDeck, QString fileType, QString ext); private: Ui::AbinitInputDialog ui; // Internal data structure for the calculation // Basic Tab QString m_title; double m_ecut; coordType m_coordType; occoptType m_occopt; double m_tsmear; int m_procs; int m_ngkpt1, m_ngkpt2, m_ngkpt3; ionmovType m_ionmov; int m_nband; // Advanced Tab double m_tolmxf; double m_dilatmx; double m_ecutsm; int m_ntime; int m_nshiftk; double m_shiftk1; double m_shiftk2; double m_shiftk3; toleranceType m_toleranceType; double m_tolXXX; // int m_charge; // PAW Tab double m_pawecutdg; QList m_znucl; bool m_dirty; bool m_warned; QProcess *m_process; QProgressDialog *m_progress; QTextBrowser *m_logWindow; QString m_inputFile; QString m_logFileName; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings int getOccopt(occoptType t); int getIonmov(ionmovType t); QString getCoordType(coordType t); QString getToleranceType(toleranceType t); // Enable/disable form elements void deckDirty(bool); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void computeClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); // Basic tab void setTitle(); void setEcut(); void setCoordType(int); void setOccopt(int); void setTsmear(); void setProcs(int); void setNgkpt1(int); void setNgkpt2(int); void setNgkpt3(int); void setIonmov(int); void setNband(int); // Advanced tab void setTolmxf(); void setDilatmx(); void setEcutsm(); void setNtime(int); void setNshiftk(int); void setShiftk1(); void setShiftk2(); void setShiftk3(); void setToleranceType(int); void setTolXXX(); // PAW tab void setPawecutdg(); void printLogOutput(); void finished(int); void stopProcess(); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamesshighlighter.h0000644000175000001440000000373112250371054026430 0ustar marcususers/********************************************************************** GamessHighlighter - syntax highlighting for Gamess input files Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef GAMESSHIGHLIGHTER_H #define GAMESSHIGHLIGHTER_H #include #include #include #include class QTextDocument; namespace Avogadro { class GamessHighlighter : public QSyntaxHighlighter { Q_OBJECT public: GamessHighlighter(QTextDocument *parent = 0); protected: void highlightBlock(const QString &text); private: struct HighlightingRule { QRegExp pattern; QTextCharFormat format; }; QVector m_highlightingRules; QStringList m_keywords; QRegExp m_commentStartExpression; QRegExp m_commentEndExpression; QTextCharFormat m_keywordFormat; QTextCharFormat m_numberFormat; QTextCharFormat m_singleLineCommentFormat; QTextCharFormat m_inDataBlockFormat; QTextCharFormat m_errorFormat; }; } // End namespace Avogadro #endif // GAMESSHIGHLIGHTER_H avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessukinputdialog.cpp0000644000175000001440000003667712250371054027363 0ustar marcususers/********************************************************************** GAMESSUKInputDialog - Dialog for generating GAMESS-UK input decks Copyright (C) 2010 Jens Thomas Copyright (C) 2008-2009 Marcus D. Hanwell Copyright (C) 2009 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "gamessukinputdialog.h" #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { GAMESSUKInputDialog::GAMESSUKInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_calculationType(SP), m_theoryType(RHF), m_basisType(p321G), m_dftFunctionalType(B3LYP), m_direct(false), m_coordType(CARTESIAN), m_output(), m_dirty(false), m_warned(false) { // Initialise title here as is in base class m_title = "GAMESS-UK input generated by Avogadro"; ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.basisCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBasis(int))); connect(ui.dftFunctionalCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setDftFunctional(int))); connect(ui.multiplicitySpin, SIGNAL(valueChanged(int)), this, SLOT(setMultiplicity(int))); connect(ui.chargeSpin, SIGNAL(valueChanged(int)), this, SLOT(setCharge(int))); connect(ui.coordCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCoords(int))); connect(ui.directCheckBox, SIGNAL(stateChanged(int)), this, SLOT(setDirect(int))); connect(ui.previewText, SIGNAL(cursorPositionChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } GAMESSUKInputDialog::~GAMESSUKInputDialog() { QSettings settings; writeSettings(settings); } void GAMESSUKInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) disconnect(m_molecule, 0, this, 0); m_molecule = molecule; // Set multiplicity to the OB value OpenBabel::OBMol obmol = m_molecule->OBMol(); setMultiplicity(obmol.GetTotalSpinMultiplicity()); // Update the preview text whenever primitives are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void GAMESSUKInputDialog::showEvent(QShowEvent *) { updatePreviewText(); } void GAMESSUKInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("GAMESS-UK Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the GAMESS-UK input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } } void GAMESSUKInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.calculationCombo->setCurrentIndex(0); ui.theoryCombo->setCurrentIndex(0); ui.coordCombo->setCurrentIndex(0); ui.basisCombo->setCurrentIndex(1); ui.dftFunctionalCombo->setCurrentIndex(2); ui.directCheckBox->setChecked(false); ui.multiplicitySpin->setValue(0); ui.chargeSpin->setValue(0); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } void GAMESSUKInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("GAMESS-UK Input Deck"), QString("gukin")); } void GAMESSUKInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void GAMESSUKInputDialog::enableFormClicked() { updatePreviewText(); } void GAMESSUKInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->document()->isModified()) deckDirty(true); } void GAMESSUKInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void GAMESSUKInputDialog::setCalculation(int n) { m_calculationType = (GAMESSUKInputDialog::calculationType) n; updatePreviewText(); } void GAMESSUKInputDialog::setTheory(int n) { m_theoryType = (GAMESSUKInputDialog::theoryType) n; if (m_theoryType != DFT) { ui.dftFunctionalCombo->setEnabled(false); ui.dftFunctionalLabel->setEnabled(false); } else { ui.dftFunctionalCombo->setEnabled(true); ui.dftFunctionalLabel->setEnabled(true); } updatePreviewText(); } void GAMESSUKInputDialog::setDftFunctional(int n) { m_dftFunctionalType = (GAMESSUKInputDialog::dftFunctionalType) n; updatePreviewText(); } void GAMESSUKInputDialog::setBasis(int n) { m_basisType = (GAMESSUKInputDialog::basisType) n; updatePreviewText(); } void GAMESSUKInputDialog::setMultiplicity(int n) { m_multiplicity = n; if (ui.multiplicitySpin->value() != n) { ui.multiplicitySpin->setValue(n); } updatePreviewText(); } void GAMESSUKInputDialog::setCharge(int n) { m_charge = n; updatePreviewText(); } void GAMESSUKInputDialog::setCoords(int n) { m_coordType = (GAMESSUKInputDialog::coordType) n; updatePreviewText(); } void GAMESSUKInputDialog::setDirect(int n) { if (n){ m_direct=true; } else { m_direct=false; } updatePreviewText(); } QString GAMESSUKInputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); // Give some additional info mol << "# This file was generated by Avogadro\n"; mol << "# For more GAMESS-UK input options consult the manual at:\n"; mol << "# http://www.cfs.dl.ac.uk/docs/index.shtml\n\n"; // Title mol << "title \n" << m_title << "\n\n"; // Ensure orbital vectors printed for an optimization if (m_calculationType == OPT || m_calculationType == TSS){ mol << "# Ensure orbital vectors printed after optimisation\n"; mol << "iprint vectors\n\n"; } // Now for the charge & multiplicty mol << "mult " << m_multiplicity << "\n"; mol << "charge " << m_charge << "\n\n"; // Geometry specification // Now to output the actual molecular coordinates // Cartesian coordinates if (m_molecule && m_coordType == CARTESIAN) { // Ensure automatic z-matrix generation is used if we are doing a transiation state search if (m_calculationType == TSS) mol << "geometry angstrom all\n"; else mol << "geometry angstrom\n"; QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { mol << qSetFieldWidth(12) << qSetRealNumberPrecision(8) << forcepoint << fixed << right << atom->pos()->x() << atom->pos()->y()<< atom->pos()->z() << qSetFieldWidth(4) << right << atom->atomicNumber() << qSetFieldWidth(4) << right << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(0) << '\n'; } // End mol << "end\n\n"; } // Z-matrix else if (m_molecule && m_coordType == ZMATRIX) { QTextStream mol(&buffer); mol.setFieldAlignment(QTextStream::AlignAccountingStyle); mol << "zmatrix angstrom\n"; OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; mol << qSetFieldWidth(3) << QString(etab.GetSymbol(atom->GetAtomicNum())); if (atom->GetIdx() > 1) mol << qSetFieldWidth(0) << " " << qSetFieldWidth(3) << QString::number(a->GetIdx()) << qSetFieldWidth(0) << " "<< qSetFieldWidth(4) << QString("r") + QString::number(atom->GetIdx()); if (atom->GetIdx() > 2) mol << qSetFieldWidth(0) << " " << qSetFieldWidth(3) << QString::number(b->GetIdx()) << qSetFieldWidth(0) << " "<< qSetFieldWidth(4) << QString("a") + QString::number(atom->GetIdx()); if (atom->GetIdx() > 3) mol << qSetFieldWidth(0) << " " << qSetFieldWidth(3) << QString::number(c->GetIdx()) << qSetFieldWidth(0) << " "<< qSetFieldWidth(4) << QString("d") + QString::number(atom->GetIdx()); mol << qSetFieldWidth(0) << '\n'; } mol << " variables\n"; FOR_ATOMS_OF_MOL(atom, &obmol) { r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; if (atom->GetIdx() > 1) mol << " r" << atom->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r << qSetFieldWidth(0) << '\n'; if (atom->GetIdx() > 2) mol << " a" << atom->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w << qSetFieldWidth(0) << '\n'; if (atom->GetIdx() > 3) mol << " d" << atom->GetIdx() << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t << qSetFieldWidth(0) << '\n'; } foreach (OpenBabel::OBInternalCoord *c, vic) delete c; // End mol << "end\n\n"; } // Basis set mol << "basis " << getBasisType(m_basisType) << endl << endl; // Set runtype mol << getRunType(m_calculationType) << endl; // Set scftype mol << getScfType(m_theoryType) << endl; mol << endl; mol << "enter" << endl; return buffer; } QString GAMESSUKInputDialog::getRunType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case SP: return "runtype scf"; case OPT: if ( m_coordType == ZMATRIX ) return "runtype optimze"; else return "runtype optxyz"; case TSS: return "runtype saddle"; case FREQ: return "runtype hessian"; default: return "runtype scf"; } } QString GAMESSUKInputDialog::getScfType(theoryType t) { // Translate the enum to text for the output generation switch (t) { case RHF: { if (m_direct) return "scftype direct rhf"; else return "scftype rhf"; } case DFT: { QString dftstr=""; switch ( m_dftFunctionalType ) { case SVWN: dftstr="dft svwn"; break; case BLYP: dftstr="dft blyp"; break; case B3LYP: dftstr="dft b3lyp"; break; case B97: dftstr="dft b97"; break; case HCTH: dftstr="dft hcth"; break; case FT97: dftstr="dft ft97"; break; default: dftstr="dft b3lyp"; } if (m_direct) return "scftype direct\n"+dftstr; else return dftstr; } case MP2: { if (m_direct) return "scftype direct mp2"; else return "scftype mp2"; } default: return "scftype rhf"; } // End switch } // End getScfType QString GAMESSUKInputDialog::getBasisType(basisType t) { // Translate the enum to text for the output generation switch (t) { case STO3G: return "sto3g"; case p321G: return "3-21G"; case p631G: return "6-31G"; case p631Gs: return "6-31G*"; case ccpVDZ: return "cc-pVDZ"; case ccpVTZ: return "cc-pVTZ"; default: return "3-21G"; } } void GAMESSUKInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.basisCombo->setEnabled(!dirty); ui.multiplicitySpin->setEnabled(!dirty); ui.chargeSpin->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } void GAMESSUKInputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("gamessuk/savepath").toString(); } void GAMESSUKInputDialog::writeSettings(QSettings& settings) const { settings.setValue("gamessuk/savepath", m_savePath); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/inputfileextension.cpp0000644000175000001440000001704412250371054027223 0ustar marcususers/********************************************************************** InputFileExtension - Extension for generating input files Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "inputfileextension.h" #include "abinitinputdialog.h" #include "daltoninputdialog.h" #include "gamessukinputdialog.h" #include "gaussianinputdialog.h" #include "molproinputdialog.h" #include "mopacinputdialog.h" #include "nwcheminputdialog.h" #include "psi4inputdialog.h" #include "qcheminputdialog.h" #include "teracheminputdialog.h" #include "lammpsinputdialog.h" #include #include #include #include #include #include using namespace OpenBabel; using namespace std; namespace Avogadro { InputFileExtension::InputFileExtension(QObject* parent) : Extension(parent), m_molecule(0) { QAction* action; action = new QAction(this); action->setText(tr("&Abinit...")); action->setData("Abinit"); m_actions.append(action); action = new QAction(this); action->setText(tr("&Dalton...")); action->setData("Dalton"); m_actions.append(action); action = new QAction(this); action->setText(tr("&GAMESS-UK...")); action->setData("GAMESS-UK"); m_actions.append(action); action = new QAction(this); action->setText(tr("&Gaussian...")); action->setData("Gaussian"); m_actions.append(action); action = new QAction(this); action->setText(tr("&MOLPRO...")); action->setData("Molpro"); m_actions.append(action); action = new QAction(this); action->setText(tr("M&OPAC...")); action->setData("MOPAC"); m_actions.append(action); action = new QAction(this); action->setText(tr("&NWChem...")); action->setData("NWChem"); m_actions.append(action); action = new QAction(this); action->setText(tr("&PSI4...")); action->setData("PSI4"); m_actions.append(action); action = new QAction(this); action->setText(tr("&Q-Chem...")); action->setData("QChem"); m_actions.append(action); action = new QAction(this); action->setText(tr("&TeraChem...")); action->setData("TeraChem"); m_actions.append(action); action->setText(tr("&LAMMPS...")); action->setData("Lammps"); m_actions.append(action); action = new QAction(this); action->setSeparator(true); m_actions.append(action); m_hasDialog["Abinit"] = false; m_hasDialog["Dalton"] = false; m_hasDialog["GAMESS-UK"] = false; m_hasDialog["Gaussian"] = false; m_hasDialog["Molpro"] = false; m_hasDialog["MOPAC"] = false; m_hasDialog["NWChem"] = false; m_hasDialog["PSI4"] = false; m_hasDialog["QChem"] = false; m_hasDialog["TeraChem"] = false; m_hasDialog["Lammps"] = false; //connect(m_dialog["MOPAC"], SIGNAL(readOutput(QString)), // this, SLOT(readOutputFile(QString))); } InputFileExtension::~InputFileExtension() { } QList InputFileExtension::actions() const { return m_actions; } QUndoCommand* InputFileExtension::performAction(QAction *action, GLWidget *widget) { QSettings settings; m_widget = widget; QString data(action->data().toString()); InputDialog *dialog = m_dialog[data]; // If dialog was not called earlier, create it now if (!m_hasDialog[data]) { dialog = createInputDialog(data); if (!dialog) { // We don't know anything about this menu action. // If you're adding new generator, modify createInputDialog function qDebug() << "No dialog for " + data + "! Something went wrong!"; return 0; } if(m_molecule) dialog->setMolecule(m_molecule); m_dialog[data] = dialog; m_hasDialog[data] = true; connect(m_dialog[data], SIGNAL(readOutput(QString)), this, SLOT(readOutputFile(QString))); } dialog->show(); return 0; } void InputFileExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; foreach (InputDialog *dialog, m_dialog) { if (dialog) dialog->setMolecule(m_molecule); } } void InputFileExtension::readOutputFile(const QString filename) { QApplication::setOverrideCursor(Qt::WaitCursor); OBConversion conv; OBFormat *inFormat = conv.FormatFromExt( filename.toAscii() ); if ( !inFormat || !conv.SetInFormat( inFormat ) ) { QApplication::restoreOverrideCursor(); QMessageBox::warning(m_widget, tr("Avogadro"), tr("Cannot read file format of file %1.").arg(filename)); return; } // TODO: Switch to MoleculeFile ifstream ifs; ifs.open(QFile::encodeName(filename)); if (!ifs) { // shouldn't happen, already checked file above QApplication::restoreOverrideCursor(); QMessageBox::warning(m_widget, tr("Avogadro"), tr("Cannot read file %1.").arg( filename ) ); return; } OBMol *obmol = new OBMol; if (conv.Read(obmol, &ifs)) { Molecule *mol = new Molecule; mol->setOBMol(obmol); mol->setFileName(filename); emit moleculeChanged(mol, Extension::DeleteOld); m_molecule = mol; } QApplication::restoreOverrideCursor(); } void InputFileExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); } void InputFileExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); } InputDialog* InputFileExtension::createInputDialog(QString name) { // Returns 0 if dialog name is invalid if (name == "Abinit") return new AbinitInputDialog(static_cast(parent())); else if (name == "Dalton") return new DaltonInputDialog(static_cast(parent())); else if (name == "GAMESS-UK") return new GAMESSUKInputDialog(static_cast(parent())); else if (name == "Gaussian") return new GaussianInputDialog(static_cast(parent())); else if (name == "Molpro") return new MolproInputDialog(static_cast(parent())); else if (name == "MOPAC") return new MOPACInputDialog(static_cast(parent())); else if (name == "NWChem") return new NWChemInputDialog(static_cast(parent())); else if (name == "PSI4") return new Psi4InputDialog(static_cast(parent())); else if (name == "QChem") return new QChemInputDialog(static_cast(parent())); else if (name == "TeraChem") return new TeraChemInputDialog(static_cast(parent())); else if (name == "Lammps") return new LammpsInputDialog(static_cast(parent())); return 0; } } // End namespace Avogadro Q_EXPORT_PLUGIN2(inputfileextension, Avogadro::InputFileExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/quantuminput/psi4inputdialog.h0000644000175000001440000000536012250371054026051 0ustar marcususers/********************************************************************** Psi4InputDialog - Dialog for generating Psi4 input decks Copyright (C) 2012 Matthew R. Kennedy This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PSI4INPUTDIALOG_H #define PSI4INPUTDIALOG_H #include #include "inputdialog.h" #include "ui_psi4inputdialog.h" namespace Avogadro { class Psi4InputDialog : public InputDialog { Q_OBJECT public: explicit Psi4InputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~Psi4InputDialog(); void setMolecule(Molecule *molecule); void readSettings(QSettings&); void writeSettings(QSettings&) const; enum calculationType{energy, optimize, frequencies}; enum theoryType{SCF, SAPT0, SAPT2, B3LYPD, B97D, M052X, MP2, CCSD, CCSDT}; enum basisType{STO3G, junDZ, ccpVDZ, augccpVDZ, ccpVTZ}; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::Psi4InputDialog ui; // Internal data structure for the calculation calculationType m_calculationType; theoryType m_theoryType; basisType m_basisType; QString m_output; coordType m_coordType; bool m_dirty; bool m_warned; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getCalculationType(calculationType t); QString getTheoryType(theoryType t); QString getBasisType(basisType t); // Enable/disable form elements void deckDirty(bool); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void enableFormClicked(); void previewEdited(); void setTitle(); void setCalculation(int); void setTheory(int); void setBasis(int); void setMultiplicity(int); void setCharge(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/abinitinputdialog.ui0000644000175000001440000006060612250371054026632 0ustar marcususers AbinitInputDialog 0 0 1122 687 0 0 Abinit Input QLayout::SetFixedSize Title: titleLine Title Processors: procSpin 1 1 Qt::Horizontal 58 26 k-points: ngkpt1Spin 1 1 1 1 1 1 Qt::Horizontal 40 20 10.0 Qt::Horizontal 58 26 Coordinate Format: coordCombo true 0 Cartesian (Angstrom) Reduced Qt::Horizontal 18 27 Plane Wave cutoff (Ha): 130 0 5.e-5 Qt::Horizontal 18 27 Tolerance on forces(Ha/bohr): ionmovCombo Max lattice expansion: 1.05 Qt::Horizontal 58 27 k-point shift: ngkpt1Spin 0.0 10 0.0 10 0.0 10 Qt::Horizontal 58 26 Number of bands: procSpin 1 1 Qt::Horizontal 58 26 # k-point shifts: ngkpt1Spin false 1 1 Qt::Horizontal 58 26 Double grid PW cutoff (Ha): 20.0 Qt::Horizontal 58 26 Occupation scheme: ionmovCombo SCF tolerance type: coordCombo true 0 Total Energy Wave Function norm Total Potential Maximum Force Relative Force Qt::Horizontal 18 27 0 1 - semiconducting 3 - Fermi Dirac 4 - Cold Smearing (Marzari) 7 - Gaussian smearing Qt::Horizontal 18 27 Smearing width (Ha): ionmovCombo 0.01 Qt::Horizontal 58 27 Geometry Optimization: ionmovCombo 0 0 - no moving ions 1 - viscous damping 2 - BFGS 3 - BFGS with energy Qt::Horizontal 18 27 # Geometrical time steps: ngkpt1Spin 1 1 Qt::Horizontal 58 26 SCF tolerance: coordCombo 1.e-10 Qt::Horizontal 58 27 Kinetic Energy smoothing (Ha): 0.5 Qt::Horizontal 18 27 true false false QLayout::SetFixedSize Reset false Use Form 0 0 Hide Preview Qt::Horizontal 48 26 Compute... Generate... Close titleLine ecutLineEdit coordCombo ionmovCombo ntimeSpin ecutsmLineEdit tolmxfLineEdit dilatmxLineEdit pawecutdgLineEdit procSpin ngkpt2Spin ngkpt3Spin ngkpt1Spin shiftk2LineEdit shiftk3LineEdit shiftk1LineEdit nshiftkSpin nbandSpin tsmearLineEdit occoptCombo toleranceTypeCombo tolXXXLineEdit previewText resetButton enableFormButton moreButton computeButton generateButton closeButton closeButton clicked() AbinitInputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/molproinputdialog.cpp0000644000175000001440000003637612250371054027050 0ustar marcususers/********************************************************************** MolproInputDialog - Dialog for generating MOLPRO input decks Copyright (C) 2008-2009 Marcus D. Hanwell Some portions (C) 2010 Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "molproinputdialog.h" #include #include #include #include #include //#include #include #include using namespace OpenBabel; namespace Avogadro { MolproInputDialog::MolproInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_2009(false), m_calculationType(OPT), m_theoryType(RHF), m_basisType(B631Gd), m_output(), m_coordType(CARTESIAN), m_dirty(false), m_warned(false) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.versionCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setVersion(int))); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.basisCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBasis(int))); connect(ui.multiplicitySpin, SIGNAL(valueChanged(int)), this, SLOT(setMultiplicity(int))); connect(ui.chargeSpin, SIGNAL(valueChanged(int)), this, SLOT(setCharge(int))); connect(ui.coordCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCoords(int))); connect(ui.previewText, SIGNAL(cursorPositionChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } MolproInputDialog::~MolproInputDialog() { QSettings settings; writeSettings(settings); } void MolproInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) disconnect(m_molecule, 0, this, 0); m_molecule = molecule; // Update the preview text whenever primitives are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void MolproInputDialog::showEvent(QShowEvent *) { updatePreviewText(); } void MolproInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("Molpro Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the Molpro input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } } void MolproInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.calculationCombo->setCurrentIndex(1); ui.theoryCombo->setCurrentIndex(3); ui.basisCombo->setCurrentIndex(2); ui.multiplicitySpin->setValue(0); ui.chargeSpin->setValue(0); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } void MolproInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("Molpro Input Deck"), QString("inp")); } void MolproInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void MolproInputDialog::enableFormClicked() { updatePreviewText(); } void MolproInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->document()->isModified()) deckDirty(true); } void MolproInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void MolproInputDialog::setVersion(int n) { if (n == 1) m_2009 = true; else m_2009 = false; updatePreviewText(); } void MolproInputDialog::setCalculation(int n) { m_calculationType = (MolproInputDialog::calculationType) n; updatePreviewText(); } void MolproInputDialog::setTheory(int n) { m_theoryType = (MolproInputDialog::theoryType) n; ui.basisCombo->setEnabled(true); updatePreviewText(); } void MolproInputDialog::setBasis(int n) { m_basisType = (MolproInputDialog::basisType) n; updatePreviewText(); } void MolproInputDialog::setMultiplicity(int n) { m_multiplicity = n; updatePreviewText(); } void MolproInputDialog::setCharge(int n) { m_charge = n; updatePreviewText(); } void MolproInputDialog::setCoords(int n) { m_coordType = (MolproInputDialog::coordType) n; updatePreviewText(); } QString MolproInputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); // Begin the job specification, including title mol << "*** " << m_title << "\n\n"; // Default output parameters mol << "gprint,basis" << '\n'; mol << "gprint,orbital" << '\n'; mol << '\n'; // Now for the basis set mol << "basis, " << getBasisType(m_basisType) << '\n'; mol << '\n'; // Now to output the actual molecular coordinates // Cartesian coordinates if (m_molecule && m_coordType == CARTESIAN) { if (!m_2009) { mol << "geomtyp=xyz" << '\n'; } mol << "geometry={" << '\n'; if (!m_2009) { mol << m_molecule->numAtoms() << '\n'; mol << '\n'; } QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { mol << qSetFieldWidth(2) << left << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << atom->pos()->x() << atom->pos()->y() << atom->pos()->z() << qSetFieldWidth(0) << '\n'; } mol << "}" << '\n'; } // Z-matrix else if (m_molecule && m_coordType == ZMATRIX) { OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; if (atom->GetIdx() > 1) mol << " r" << atom->GetIdx() << " = " << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r << qSetFieldWidth(0) << " ang\n"; if (atom->GetIdx() > 2) mol << " a" << atom->GetIdx() << " = " << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w << qSetFieldWidth(0) << " degree\n"; if (atom->GetIdx() > 3) mol << " d" << atom->GetIdx() << " = " << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t << qSetFieldWidth(0) << " degree\n"; } if(m_2009) { mol << "symmetry,nosym" << '\n'; } mol << "geometry={" << '\n'; //mol << '\n'; if(!m_2009) { mol << "nosym" << '\n'; /* FIXME */ mol << "ang" << '\n'; } FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; mol << QString(etab.GetSymbol(atom->GetAtomicNum())); if (atom->GetIdx() > 1) mol << ", " << QString::number(a->GetIdx()) << ", r" << atom->GetIdx(); if (atom->GetIdx() > 2) mol << ", " << QString::number(b->GetIdx()) << ", a" << atom->GetIdx(); if (atom->GetIdx() > 3) mol << ", " << QString::number(c->GetIdx()) << ", d" << atom->GetIdx(); mol << '\n'; } mol << "}" << '\n'; foreach (OpenBabel::OBInternalCoord *c, vic) delete c; } else if (m_molecule && m_coordType == ZMATRIX_COMPACT) { QTextStream mol(&buffer); OBAtom *a, *b, *c; double r, w, t; mol << "geometry={" << '\n'; if(!m_2009) { mol << "nosym" << '\n'; /* FIXME */ } mol << "ang" << '\n'; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; mol << QString(etab.GetSymbol(atom->GetAtomicNum())); if (atom->GetIdx() > 1) mol << ", " << QString::number(a->GetIdx()) << ", " << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r; if (atom->GetIdx() > 2) mol << ", " << QString::number(b->GetIdx()) << ", " << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w; if (atom->GetIdx() > 3) mol << ", " << QString::number(c->GetIdx()) << ", " << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t; mol << qSetFieldWidth(0) << '\n'; } mol << "}" << '\n'; foreach (OpenBabel::OBInternalCoord *c, vic) delete c; } mol << '\n'; // Now specify the job type if (m_theoryType != B3LYP) { mol << "{" << "rhf" << '\n'; mol << getWavefunction() << "}\n"; } if (m_theoryType != RHF) { mol << "{" << getTheoryType(m_theoryType) << '\n'; mol << getWavefunction() << "}\n"; } mol << '\n'; // Now for the calculation type mol << getCalculationType(m_calculationType); mol << "---\n"; return buffer; } QString MolproInputDialog::getWavefunction(void) { QString buffer; QTextStream wf(&buffer); OpenBabel::OBMol obmol = m_molecule->OBMol(); int num_electrons; int spin; num_electrons = -m_charge; FOR_ATOMS_OF_MOL(atom, &obmol) num_electrons += atom->GetAtomicNum(); spin = m_multiplicity - 1; // TODO: space symmetry wf << "wf," << num_electrons << ",1," << spin; return buffer; } QString MolproInputDialog::getCalculationType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case SP: return ""; case OPT: return "{optg}\n\n"; case FREQ: return "{optg}\n{frequencies}\n\n"; default: return ""; } } QString MolproInputDialog::getTheoryType(theoryType t) { // Translate the enum to text for the output generation switch (t) {// enum theoryType{RHF, B3LYP, B3LYP5, EDF1, M062X, MP2, CCSD} case RHF: return "rhf"; case MP2: return "mp2"; case B3LYP: return "uks,b3lyp"; case CCSD: return "ccsd"; case CCSDT: return "ccsd(t)"; default: return "rhf"; } } QString MolproInputDialog::getBasisType(basisType t) { // Translate the enum to text for the output generation switch (t) { case STO3G: return "STO-3G"; case B321G: return "3-21G"; case B631Gd: return "6-31G(d)"; case B631Gdp: return "6-31G(d,p)"; case B631plusGd: return "6-31+G(d)"; case B6311Gd: return "6-311G(d)"; case ccpVDZ: return "vdz"; case ccpVTZ: return "vtz"; case AUGccpVDZ: return "avdz"; case AUGccpVTZ: return "avtz"; default: return "6-31G(d)"; } } void MolproInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.basisCombo->setEnabled(!dirty); ui.multiplicitySpin->setEnabled(!dirty); ui.chargeSpin->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } void MolproInputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("molpro/savepath").toString(); } void MolproInputDialog::writeSettings(QSettings& settings) const { settings.setValue("molpro/savepath", m_savePath); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/CMakeLists.txt0000644000175000001440000000226112250371054025316 0ustar marcususersinclude_directories(${CMAKE_CURRENT_BINARY_DIR}) set(LINK_LIBS avogadro) set(PLUGIN_LABEL extensions) set(PLUGIN_TARGET extensions) ### Input File Extension set(inputfileextension_SRCS inputfileextension.cpp inputdialog.cpp abinitinputdialog.cpp daltoninputdialog.cpp gamessukinputdialog.cpp gaussianinputdialog.cpp molproinputdialog.cpp mopacinputdialog.cpp nwcheminputdialog.cpp psi4inputdialog.cpp qcheminputdialog.cpp teracheminputdialog.cpp lammpsinputdialog.cpp) set(inputfileextension_UIS abinitinputdialog.ui gaussianinputdialog.ui daltoninputdialog.ui gamessukinputdialog.ui molproinputdialog.ui mopacinputdialog.ui nwcheminputdialog.ui psi4inputdialog.ui qcheminputdialog.ui teracheminputdialog.ui lammpsinputdialog.ui) avogadro_plugin_nogl(inputfileextension "${inputfileextension_SRCS}" "${inputfileextension_UIS}" ) ### gamess set(gamessextension_SRCS inputdialog.cpp gamessextension.cpp gamessinputdialog.cpp gamessinputdata.cpp gamesshighlighter.cpp gamessefpmatchdialog.cpp) avogadro_plugin_nogl(gamessextension "${gamessextension_SRCS}" "gamessinputdialog.ui;gamessefpmatchdialog.ui") avogadro-1.1.1/libavogadro/src/extensions/quantuminput/qcheminputdialog.h0000644000175000001440000000561712250371054026274 0ustar marcususers/********************************************************************** QChemInputDialog - Dialog for generating Q-Chem input decks Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef QCHEMINPUTDIALOG_H #define QCHEMINPUTDIALOG_H #include "inputdialog.h" #include "ui_qcheminputdialog.h" namespace Avogadro { class Molecule; class QChemInputDialog : public InputDialog { Q_OBJECT public: explicit QChemInputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~QChemInputDialog(); void setMolecule(Molecule *molecule); void readSettings(QSettings&); void writeSettings(QSettings&) const; enum calculationType{SP, OPT, FREQ}; enum theoryType{RHF, MP2, B3LYP, B3LYP5, EDF1, M062X, CCSD}; enum basisType{STO3G, B321G, B631Gd, B631Gdp, B631plusGd, B6311Gd, ccpVDZ, ccpVTZ, LANL2DZ, LACVP}; protected: /** * Reimplemented to update the dialog when it is shown */ void showEvent(QShowEvent *event); private: Ui::QChemInputDialog ui; // Molecule* m_molecule; // Internal data structure for the calculation //QString m_title; calculationType m_calculationType; theoryType m_theoryType; basisType m_basisType; //int m_multiplicity; //int m_charge; QString m_output; coordType m_coordType; bool m_dirty; bool m_warned; // Generate an input deck as a string QString generateInputDeck(); // Translate enums to strings QString getCalculationType(calculationType t); QString getTheoryType(theoryType t); QString getBasisType(basisType t); // Enable/disable form elements void deckDirty(bool); public Q_SLOTS: void updatePreviewText(); private Q_SLOTS: //! Button Slots void resetClicked(); void generateClicked(); void enableFormClicked(); void moreClicked(); void previewEdited(); void setTitle(); void setCalculation(int); void setTheory(int); void setBasis(int); void setMultiplicity(int); void setCharge(int); void setCoords(int); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/inputdialog.h0000644000175000001440000000457412250371054025257 0ustar marcususers/********************************************************************** InputDialog - Base class for all QC input dialogs Copyright (C) 2010 Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef INPUTDIALOG_H #define INPUTDIALOG_H #include #include #include namespace Avogadro { class InputDialog : public QDialog { Q_OBJECT public: explicit InputDialog(QWidget *parent = 0, Qt::WindowFlags f = 0 ); virtual ~InputDialog(); // TODO: other enums also must be shared enum coordType{CARTESIAN, ZMATRIX, ZMATRIX_COMPACT}; virtual void setMolecule(Molecule *molecule); /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const = 0; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings) = 0; Q_SIGNALS: void readOutput(const QString outputFileName); public Q_SLOTS: virtual void updatePreviewText() = 0; protected Q_SLOTS: // virtual void defaultsClicked() = 0; virtual void resetClicked() = 0; virtual void generateClicked() = 0; protected: QString saveInputFile(QString inputDeck, QString fileType, QString ext); Molecule* m_molecule; QString m_title; int m_multiplicity; int m_charge; //QString m_fileName; QString m_savePath; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/quantuminput/qcheminputdialog.cpp0000644000175000001440000003614012250371054026622 0ustar marcususers/********************************************************************** QChemInputDialog - Dialog for generating Q-Chem input decks Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "qcheminputdialog.h" #include #include #include #include #include //#include #include #include using namespace OpenBabel; namespace Avogadro { QChemInputDialog::QChemInputDialog(QWidget *parent, Qt::WindowFlags f) : InputDialog(parent, f), m_calculationType(OPT), m_theoryType(B3LYP), m_basisType(B631Gd), m_output(), m_coordType(CARTESIAN), m_dirty(false), m_warned(false) { ui.setupUi(this); // Connect the GUI elements to the correct slots connect(ui.titleLine, SIGNAL(editingFinished()), this, SLOT(setTitle())); connect(ui.calculationCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCalculation(int))); connect(ui.theoryCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setTheory(int))); connect(ui.basisCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setBasis(int))); connect(ui.multiplicitySpin, SIGNAL(valueChanged(int)), this, SLOT(setMultiplicity(int))); connect(ui.chargeSpin, SIGNAL(valueChanged(int)), this, SLOT(setCharge(int))); connect(ui.coordCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setCoords(int))); connect(ui.previewText, SIGNAL(cursorPositionChanged()), this, SLOT(previewEdited())); connect(ui.generateButton, SIGNAL(clicked()), this, SLOT(generateClicked())); connect(ui.resetButton, SIGNAL(clicked()), this, SLOT(resetClicked())); connect(ui.moreButton, SIGNAL(clicked()), this, SLOT(moreClicked())); connect(ui.enableFormButton, SIGNAL(clicked()), this, SLOT(enableFormClicked())); QSettings settings; readSettings(settings); // Generate an initial preview of the input deck updatePreviewText(); } QChemInputDialog::~QChemInputDialog() { QSettings settings; writeSettings(settings); } void QChemInputDialog::setMolecule(Molecule *molecule) { // Disconnect the old molecule first... if (m_molecule) disconnect(m_molecule, 0, this, 0); m_molecule = molecule; // Update the preview text whenever primitives are changed connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updatePreviewText())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updatePreviewText())); // Add atom coordinates updatePreviewText(); } void QChemInputDialog::showEvent(QShowEvent *) { updatePreviewText(); } void QChemInputDialog::updatePreviewText() { if (!isVisible()) return; // Generate the input deck and display it if (m_dirty && !m_warned) { m_warned = true; QMessageBox msgBox; msgBox.setWindowTitle(tr("Q-Chem Input Deck Generator Warning")); msgBox.setText(tr("Would you like to update the preview text, losing all changes made in the Q-Chem input deck preview pane?")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); switch (msgBox.exec()) { case QMessageBox::Yes: // yes was clicked deckDirty(false); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); m_warned = false; break; case QMessageBox::No: // no was clicked m_warned = false; break; default: // should never be reached break; } } else if (!m_dirty) { ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } } void QChemInputDialog::resetClicked() { // Reset the form to defaults deckDirty(false); ui.calculationCombo->setCurrentIndex(1); ui.theoryCombo->setCurrentIndex(3); ui.basisCombo->setCurrentIndex(2); ui.multiplicitySpin->setValue(0); ui.chargeSpin->setValue(0); ui.previewText->setText(generateInputDeck()); ui.previewText->document()->setModified(false); } void QChemInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("QChem Input Deck"), QString("qcin")); } void QChemInputDialog::moreClicked() { // If the more button is clicked hide/show the preview text if (ui.previewText->isVisible()) { ui.previewText->hide(); ui.moreButton->setText(tr("Show Preview")); } else { ui.previewText->show(); ui.moreButton->setText(tr("Hide Preview")); } } void QChemInputDialog::enableFormClicked() { updatePreviewText(); } void QChemInputDialog::previewEdited() { // Determine if the preview text has changed from the form generated if(ui.previewText->document()->isModified()) deckDirty(true); } void QChemInputDialog::setTitle() { m_title = ui.titleLine->text(); updatePreviewText(); } void QChemInputDialog::setCalculation(int n) { m_calculationType = (QChemInputDialog::calculationType) n; updatePreviewText(); } void QChemInputDialog::setTheory(int n) { m_theoryType = (QChemInputDialog::theoryType) n; ui.basisCombo->setEnabled(true); updatePreviewText(); } void QChemInputDialog::setBasis(int n) { m_basisType = (QChemInputDialog::basisType) n; updatePreviewText(); } void QChemInputDialog::setMultiplicity(int n) { m_multiplicity = n; updatePreviewText(); } void QChemInputDialog::setCharge(int n) { m_charge = n; updatePreviewText(); } void QChemInputDialog::setCoords(int n) { m_coordType = (QChemInputDialog::coordType) n; updatePreviewText(); } QString QChemInputDialog::generateInputDeck() { // Generate an input deck based on the settings of the dialog QString buffer; QTextStream mol(&buffer); // Begin the job specification mol << "$rem\n"; // Now for the calculation type mol << " JOBTYPE " << getCalculationType(m_calculationType) << '\n'; // Now specify the job type and basis set mol << " EXCHANGE " << getTheoryType(m_theoryType) << '\n'; mol << " " << getBasisType(m_basisType) << '\n'; // Output parameters for some programs mol << " GUI=2\n"; // End the job spec section mol << "$end\n\n"; // Title line mol << "$comment\n" << m_title << "\n$end\n\n"; // Begin the molecule specification mol << "$molecule\n"; // Now for the charge and multiplicity mol << " " << m_charge << ' ' << m_multiplicity << '\n'; // Now to output the actual molecular coordinates // Cartesian coordinates if (m_molecule && m_coordType == CARTESIAN) { QTextStream mol(&buffer); OpenBabel::OBMol obmol = m_molecule->OBMol(); std::vector > fragList; obmol.ContigFragList(fragList); for (unsigned int frag = 0; frag < fragList.size(); ++frag) { for (unsigned int idx = 0; idx < fragList[frag].size(); ++idx) { Atom *atom = m_molecule->atom(fragList[frag][idx] - 1); mol << qSetFieldWidth(4) << right << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << atom->pos()->x() << atom->pos()->y() << atom->pos()->z() << qSetFieldWidth(0) << '\n'; } } } // Z-matrix else if (m_molecule && m_coordType == ZMATRIX) { QTextStream mol(&buffer); OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; mol << qSetFieldWidth(4) << right << QString(etab.GetSymbol(atom->GetAtomicNum()) + QString::number(atom->GetIdx())) << qSetFieldWidth(0); if (atom->GetIdx() > 1) mol << ' ' << QString(etab.GetSymbol(a->GetAtomicNum()) + QString::number(a->GetIdx())) << " r" << atom->GetIdx(); if (atom->GetIdx() > 2) mol << ' ' << QString(etab.GetSymbol(b->GetAtomicNum()) + QString::number(b->GetIdx())) << " a" << atom->GetIdx(); if (atom->GetIdx() > 3) mol << ' ' << QString(etab.GetSymbol(c->GetAtomicNum()) + QString::number(c->GetIdx())) << " d" << atom->GetIdx(); mol << '\n'; } mol << '\n'; FOR_ATOMS_OF_MOL(atom, &obmol) { r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; if (atom->GetIdx() > 1) mol << " r" << atom->GetIdx() << " = " << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r << qSetFieldWidth(0) << '\n'; if (atom->GetIdx() > 2) mol << " a" << atom->GetIdx() << " = " << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w << qSetFieldWidth(0) << '\n'; if (atom->GetIdx() > 3) mol << " d" << atom->GetIdx() << " = " << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t << qSetFieldWidth(0) << '\n'; } foreach (OpenBabel::OBInternalCoord *c, vic) delete c; } else if (m_molecule && m_coordType == ZMATRIX_COMPACT) { QTextStream mol(&buffer); OBAtom *a, *b, *c; double r, w, t; /* Taken from OpenBabel's gzmat file format converter */ std::vector vic; vic.push_back((OpenBabel::OBInternalCoord*)NULL); OpenBabel::OBMol obmol = m_molecule->OBMol(); FOR_ATOMS_OF_MOL(atom, &obmol) vic.push_back(new OpenBabel::OBInternalCoord); CartesianToInternal(vic, obmol); FOR_ATOMS_OF_MOL(atom, &obmol) { a = vic[atom->GetIdx()]->_a; b = vic[atom->GetIdx()]->_b; c = vic[atom->GetIdx()]->_c; r = vic[atom->GetIdx()]->_dst; w = vic[atom->GetIdx()]->_ang; if (w < 0.0) w += 360.0; t = vic[atom->GetIdx()]->_tor; if (t < 0.0) t += 360.0; mol << qSetFieldWidth(4) << right << QString(etab.GetSymbol(atom->GetAtomicNum()) + QString::number(atom->GetIdx())); if (atom->GetIdx() > 1) mol << qSetFieldWidth(6) << right << QString(etab.GetSymbol(a->GetAtomicNum()) + QString::number(a->GetIdx())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << r; if (atom->GetIdx() > 2) mol << qSetFieldWidth(6) << right << QString(etab.GetSymbol(b->GetAtomicNum()) + QString::number(b->GetIdx())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << w; if (atom->GetIdx() > 3) mol << qSetFieldWidth(6) << right << QString(etab.GetSymbol(c->GetAtomicNum()) + QString::number(c->GetIdx())) << qSetFieldWidth(15) << qSetRealNumberPrecision(5) << forcepoint << fixed << right << t; mol << qSetFieldWidth(0) << '\n'; } foreach (OpenBabel::OBInternalCoord *c, vic) delete c; } mol << "$end\n\n"; return buffer; } QString QChemInputDialog::getCalculationType(calculationType t) { // Translate the enum to text for the output generation switch (t) { case SP: return "SP"; case OPT: return "Opt"; case FREQ: return "Freq"; default: return "SP"; } } QString QChemInputDialog::getTheoryType(theoryType t) { // Translate the enum to text for the output generation switch (t) {// enum theoryType{RHF, B3LYP, B3LYP5, EDF1, M062X, MP2, CCSD} case RHF: return "RHF"; case B3LYP: return "B3LYP"; case B3LYP5: return "B3LYP5"; case EDF1: return "EDF1"; case M062X: return "M062X"; case MP2: return "HF\n CORRELATION MP2"; case CCSD: return "HF\n CORRELATION CCSD"; default: return "RHF"; } } QString QChemInputDialog::getBasisType(basisType t) { // Translate the enum to text for the output generation switch (t) { case STO3G: return "BASIS STO-3G"; case B321G: return "BASIS 3-21G"; case B631Gd: return "BASIS 6-31G(d)"; case B631Gdp: return "BASIS 6-31G(d,p)"; case B631plusGd: return "BASIS 6-31+G(d)"; case B6311Gd: return "BASIS 6-311G(d)"; case ccpVDZ: return "BASIS cc-pVDZ"; case ccpVTZ: return "BASIS cc-pVTZ"; case LANL2DZ: return "ECP LANL2DZ"; case LACVP: return "ECP LACVP"; default: return "6-31G(d)"; } } void QChemInputDialog::deckDirty(bool dirty) { m_dirty = dirty; ui.titleLine->setEnabled(!dirty); ui.calculationCombo->setEnabled(!dirty); ui.theoryCombo->setEnabled(!dirty); ui.basisCombo->setEnabled(!dirty); ui.multiplicitySpin->setEnabled(!dirty); ui.chargeSpin->setEnabled(!dirty); ui.enableFormButton->setEnabled(dirty); } void QChemInputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("qchem/savepath").toString(); } void QChemInputDialog::writeSettings(QSettings& settings) const { settings.setValue("qchem/savepath", m_savePath); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessefpmatchdialog.cpp0000644000175000001440000000575012250371054027437 0ustar marcususers/********************************************************************** gamessefpmatchdialog - Class Description Copyright (C) 2007 <> This file is part of the $PROJECT$. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "gamessefpmatchdialog.h" #include using namespace OpenBabel; namespace Avogadro { GamessEfpMatchDialog::GamessEfpMatchDialog( QAbstractItemModel *model, GamessEfpMatchDialog::Type type, QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { ui.setupUi( this ); ui.groupList->setModel( model ); // // delete the model when the dialog is destroyed. connect( this, SIGNAL( destroyed() ), model, SLOT( deleteLater() ) ); connect( ui.groupList->selectionModel(), SIGNAL( selectionChanged( QItemSelection, QItemSelection ) ), this, SLOT( efpSelected( QItemSelection, QItemSelection ) ) ); if ( type == GamessEfpMatchDialog::QMType ) { setWindowTitle( tr( "QM Matches" ) ); } m_type = type; } GamessEfpMatchDialog::~GamessEfpMatchDialog() {} void GamessEfpMatchDialog::efpSelected( const QItemSelection &, const QItemSelection & ) { QModelIndexList indexes = ui.groupList->selectionModel()->selectedIndexes(); QList > selectedGroups; foreach( QModelIndex index, indexes ) { QVector group = index.data( Qt::UserRole + 1 ).value >(); selectedGroups.append( group ); } emit selectionChanged( selectedGroups ); } void GamessEfpMatchDialog::accept() { QModelIndexList indexes = ui.groupList->selectionModel()->selectedIndexes(); if ( indexes.size() ) { QList > groups; foreach( QModelIndex index, indexes ) { QVector group = index.data( Qt::UserRole + 1 ).value >(); groups.append( group ); } emit accepted( m_type, ui.groupLine->text(), groups ); } QDialog::accept(); } void GamessEfpMatchDialog::reject() { QDialog::reject(); } void GamessEfpMatchDialog::select(const QModelIndex & index, QItemSelectionModel::SelectionFlags command) { ui.groupList->selectionModel()->select(index, command); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/psi4inputdialog.ui0000644000175000001440000002636012250371054026242 0ustar marcususers Psi4InputDialog 0 0 621 471 0 0 Psi4 Input QLayout::SetFixedSize Title: titleLine Title Calculation: calculationCombo 0 Single Point Energy Geometry Optimization Frequencies Qt::Horizontal 18 27 Qt::Horizontal 58 26 Theory: theoryCombo false 1 HF SAPT0 SAPT2 B3LYP-D B97-D M05-2X MP2 CCSD CCSD(T) Qt::Horizontal 58 27 Basis: basisCombo 1 STO-3G jun-cc-pVDZ cc-pVDZ aug-cc-pVDZ cc-pVTZ Qt::Horizontal 58 26 Charge: chargeSpin -99 0 Qt::Horizontal 58 27 Multiplicity: multiplicitySpin 1 1 Qt::Horizontal 58 26 true false false QLayout::SetFixedSize Reset false Use Form Qt::Horizontal 48 26 Compute... Generate... Close titleLine calculationCombo theoryCombo basisCombo chargeSpin multiplicitySpin previewText generateButton closeButton resetButton enableFormButton closeButton clicked() Psi4InputDialog close() 451 411 258 243 avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessinputdialog.h0000644000175000001440000002145212250371054026451 0ustar marcususers#ifndef GAMESSINPUTDIALOG_H #define GAMESSINPUTDIALOG_H /********************************************************************** GamessInputDialog - GAMESS Input Deck Dialog for Avogadro Copyright (C) 2006, 2007 by Donald Ephraim Curtis Copyright (C) 2006 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include #include #include #include "ui_gamessinputdialog.h" #include "gamessinputdata.h" #include "inputdialog.h" namespace Avogadro { class GamessHighlighter; class GamessInputDialog : public InputDialog { Q_OBJECT public: //! Constructor explicit GamessInputDialog( GamessInputData *inputData, QWidget *parent = 0, Qt::WindowFlags f = 0 ); //! Desconstructor ~GamessInputDialog(); void setInputData ( GamessInputData *inputData ); void readSettings(QSettings&); void writeSettings(QSettings&) const; protected: //! Create dialog tabs void connectModes(); void connectBasic(); void connectAdvanced(); void connectPreview(); void connectButtons(); void connectBasis(); void connectControl(); void connectData(); void connectSystem(); void connectMOGuess(); void connectMisc(); void connectSCF(); void connectMP2(); void connectDFT(); void connectHessian(); void connectStatPoint(); private: Ui::GamessInputDialog ui; GamessInputData *m_inputData; GamessHighlighter *m_highlighter; bool m_advancedChanged; QButtonGroup *m_miscForceButtons; QButtonGroup *m_statPointHessianButtons; //! Mode Pointers public Q_SLOTS: void setMode( int mode ); void updatePreviewText(); //! Update Basic Interface Widgets /*! * These functions are used to take the settings from the GamessInputData * class and updated all the functions. Caution should be taken. There * may be a case where an update causes the callbacks to happen which in * tern causes another update to happen and we get a circular loop. It * may be that we need to disable signals for these updates. However, in * some cases that may mean that a change does not propigate back to our * input data. It is a consistency problem relating to the nature of * GAMESS input. */ void updateBasicWidgets(); //! Update Adavnced Interface Widgets void updateAdvancedWidgets(); //! Update Basis Widgets void updateBasisWidgets(); //! Update Control Widgets void updateControlWidgets(); //! Update Data Widgets void updateDataWidgets(); //! Update System Widgets void updateSystemWidgets(); //! Update Point Group Order Widgets void updatePointGroupOrderWidgets(); //! Update MO Guess Widgets void updateMOGuessWidgets(); //! Update Misc Widgets void updateMiscWidgets(); //! Update SCF Widgets void updateSCFWidgets(); //! Update DFT Widgets void updateDFTWidgets(); //! Update MP2 Widgets void updateMP2Widgets(); //! Update Hessian Widgets void updateHessianWidgets(); //! Update Stat Point Widgets void updateStatPointWidgets(); protected Q_SLOTS: //! Button Slots void defaultsClicked(); void resetClicked(); void generateClicked(); void navigationItemClicked( const QModelIndex &index ); //! Block all Advanced Widgets void blockAdvancedSignals( bool block ); //! Block Child Signals void blockChildrenSignals( QLayout *layout, bool block ); void blockChildrenSignals( QObject *object, bool block ); void setBasicDefaults(); void setAdvancedDefaults(); void setBasisDefaults(); void setControlDefaults(); void setDataDefaults(); void setSystemDefaults(); void setMOGuessDefaults(); void setMiscDefaults(); void setSCFDefaults(); void setDFTDefaults(); void setMP2Defaults(); void setHessianDefaults(); void setStatPointDefaults(); void basicChanged(); void advancedChanged(); // void previewChanged(); //! Basic Slots void setBasicCalculate( int index ); void setBasicWithLeft( int index ); void setBasicWithRight( int index ); void setBasicIn( int index ); void setBasicOnLeft( int index ); void setBasicOnRight( int index ); //! Basis Slots void setBasisSet( int index ); void setBasisECP( int index ); void setBasisD( int val ); void setBasisF( int val ); void setBasisLight( int val ); void setBasisPolar( int index ); void setBasisDiffuseL( bool state ); void setBasisDiffuseS( bool state ); //! Control Slots; void setControlRun( int index ); void setControlSCF( int index ); void setControlLocalization( int index ); void setControlExec( int index ); void setControlMaxSCF( const QString &text ); void setControlCharge( const QString &text ); void setControlMultiplicity( const QString &text ); void setControlMP2( bool state ); void setControlDFT( bool state ); void setControlCI( int index ); void setControlCC( int index ); //! Data Slots; void setDataTitle( const QString &text ); void setDataCoordinate( int index ); void setDataUnits( int index ); void setDataZMatrix( int val ); void setDataPoint( int index ); void setDataOrder( int index ); void setDataSymmetry( bool state ); //! System Slots; void setTimeLimit( double val ); void setTimeLimitUnits( int index ); void setSystemMemory( double val ); void setSystemMemoryUnits( int index ); void setSystemDDI( double val ); void setSystemDDIUnits( int index ); void setSystemProduce( bool state ); void setSystemForce( bool state ); void setSystemDiagonalization( int index ); void setSystemExternal( bool state ); void setSystemLoop( bool state ); void setSystemNext( bool state ); //! MO Guess Slots void setMOGuessInitial( int index ); void setMOGuessPrint( bool state ); void setMOGuessRotate( bool state ); //!! Misc Slots void setMiscMolPlt( bool state ); void setMiscPltOrb( bool state ); void setMiscAIMPAC( bool state ); void setMiscRPAC( bool state ); void setMiscForce( int id ); void setMiscWater( bool state ); //! SCF Slots void setSCFDirect( bool state ); void setSCFCompute( bool state ); void setSCFGenerate( bool state ); //! DFT Slots void setDFTMethod( int index ); void setDFTFunctional( int index ); //! MP2 Slots void setMP2Electrons( int val ); void setMP2Memory( int val ); void setMP2Integral( const QString &text ); void setMP2Localized( bool state ); void setMP2Compute( bool state ); void setMP2Segmented( bool state ); void setMP2Two( bool state ); void setMP2Duplicated( bool state ); void setMP2Distributed( bool state ); //! Hessian Slots void setHessianAnalytic( bool state ); void setHessianNumeric( bool state ); void setHessianDisplacement( double val ); void setHessianDouble( bool state ); void setHessianPurify( bool state ); void setHessianPrint( bool state ); void setHessianVibrational( bool state ); void setHessianScale( double val ); //! Stat Point Slots void setStatPointSteps( int val ); void setStatPointRecalculate( int val ); void setStatPointConvergence( double val ); void setStatPointInitial( double val ); void setStatPointMin( double val ); void setStatPointMax( double val ); void setStatPointOptimization( int index ); void setStatPointUpdate( bool state ); void setStatPointStationary( bool state ); void setStatPointHessian( int value ); void setStatPointPrint( bool state ); void setStatPointJump( double val ); void setStatPointFollow( int val ); }; } #endif // GAMESSINPUTDIALOG_H avogadro-1.1.1/libavogadro/src/extensions/quantuminput/gamessinputdialog.cpp0000644000175000001440000022651212250371054027010 0ustar marcususers/********************************************************************** GamessInputDialog - GAMESS Input Deck Dialog for Avogadro Copyright (C) 2006, 2007 by Donald Ephraim Curtis Copyright (C) 2006 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "gamessinputdialog.h" #include "gamesshighlighter.h" #include #include #include #include #include #include //#include #include #include #include namespace Avogadro { GamessInputDialog::GamessInputDialog( GamessInputData *inputData, QWidget *parent, Qt::WindowFlags f ) : InputDialog( parent, f ), m_inputData(NULL), m_advancedChanged( false ) { setInputData(inputData); ui.setupUi(this); ui.navigationTree->expandAll(); ui.navigationTree->headerItem()->setHidden(true); // FIXME: Check for GAMESS and show as needed. // ui.computeButton->hide(); m_highlighter = new GamessHighlighter(ui.previewText->document()); connectModes(); connectBasic(); connectAdvanced(); connectPreview(); connectButtons(); setBasicDefaults(); updateBasicWidgets(); updateAdvancedWidgets(); updatePreviewText(); QSettings settings; readSettings(settings); } // TODO on SHOW we need to update the current view. GamessInputDialog::~GamessInputDialog() { QSettings settings; writeSettings(settings); } void GamessInputDialog::setInputData(GamessInputData *inputData) { if(!inputData) return; if(m_inputData) disconnect(m_inputData->m_molecule, 0, this, 0); m_inputData = inputData; m_molecule = m_inputData->m_molecule; connect(m_inputData->m_molecule, SIGNAL(atomAdded(Atom*)), this, SLOT(updatePreviewText())); connect(m_inputData->m_molecule, SIGNAL(atomUpdated(Atom*)), this, SLOT(updatePreviewText())); connect(m_inputData->m_molecule, SIGNAL(atomRemoved(Atom*)), this, SLOT(updatePreviewText())); connect(m_inputData->m_molecule, SIGNAL(updated()), this, SLOT(updatePreviewText())); } void GamessInputDialog::connectBasic() { // Calculate connect( ui.basicCalculateCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasicCalculate( int ) ) ); connect( ui.basicCalculateCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basicCalculateCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( basicChanged() ) ); // With Left connect( ui.basicWithLeftCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasicWithLeft( int ) ) ); connect( ui.basicWithLeftCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basicWithLeftCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( basicChanged() ) ); // With Right connect( ui.basicWithRightCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasicWithRight( int ) ) ); connect( ui.basicWithRightCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basicWithRightCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( basicChanged() ) ); // In connect( ui.basicInCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasicIn( int ) ) ); connect( ui.basicInCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basicInCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( basicChanged() ) ); // On Left connect( ui.basicOnLeftCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasicOnLeft( int ) ) ); connect( ui.basicOnLeftCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basicOnLeftCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( basicChanged() ) ); // On Right connect( ui.basicOnRightCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasicOnRight( int ) ) ); connect( ui.basicOnRightCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basicOnRightCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( basicChanged() ) ); } void GamessInputDialog::connectAdvanced() { connectBasis(); connectControl(); connectData(); connectSystem(); connectMOGuess(); connectMisc(); connectSCF(); connectDFT(); connectMP2(); connectHessian(); connectStatPoint(); connect(ui.navigationTree, SIGNAL(clicked(QModelIndex)), this, SLOT(navigationItemClicked(QModelIndex))); } void GamessInputDialog::navigationItemClicked( const QModelIndex &index ) { int i = index.row(); QModelIndex parent = index.parent(); if(parent.isValid()) { i += ui.navigationTree->topLevelItemCount(); } ui.advancedStacked->setCurrentIndex(i); } void GamessInputDialog::connectPreview() { } void GamessInputDialog::connectModes() { connect( ui.modeTab, SIGNAL( currentChanged( int ) ), this, SLOT( setMode( int ) ) ); } void GamessInputDialog::connectButtons() { connect( ui.resetAllButton, SIGNAL( clicked() ), this, SLOT( resetClicked() ) ); connect( ui.defaultsButton, SIGNAL( clicked() ), this, SLOT( defaultsClicked() ) ); connect( ui.generateButton, SIGNAL( clicked() ), this, SLOT( generateClicked() ) ); connect( ui.closeButton, SIGNAL( clicked() ), this, SLOT( close() ) ); } void GamessInputDialog::basicChanged() { ui.basicWidget->setEnabled( true ); m_advancedChanged = false; } void GamessInputDialog::advancedChanged() { ui.basicWidget->setEnabled( false ); m_advancedChanged = true; } void GamessInputDialog::setBasicDefaults() { // These rely on the advanced defaults setAdvancedDefaults(); blockChildrenSignals(ui.basicWidget, true); ui.basicCalculateCombo->setCurrentIndex( 0 ); setBasicCalculate(0); ui.basicWithLeftCombo->setCurrentIndex( 2 ); setBasicWithRight(2); ui.basicWithRightCombo->setCurrentIndex( 0 ); setBasicWithRight(0); ui.basicInCombo->setCurrentIndex( 0 ); setBasicIn(0); ui.basicOnLeftCombo->setCurrentIndex( 0 ); setBasicOnLeft(0); ui.basicOnRightCombo->setCurrentIndex( 2 ); setBasicOnRight(2); updateBasicWidgets(); blockChildrenSignals(ui.basicWidget, false); m_advancedChanged = false; ui.basicWidget->setEnabled( true ); // updateAdvancedWidgets(); } void GamessInputDialog::setAdvancedDefaults() { setBasisDefaults(); setControlDefaults(); setDataDefaults(); setSystemDefaults(); setMOGuessDefaults(); setMiscDefaults(); setSCFDefaults(); setDFTDefaults(); setMP2Defaults(); setHessianDefaults(); setStatPointDefaults(); ui.navigationTree->setCurrentItem(ui.navigationTree->topLevelItem(0)); ui.advancedStacked->setCurrentIndex(0); } void GamessInputDialog::setBasisDefaults() { m_inputData->Basis->InitData(); updateBasisWidgets(); } void GamessInputDialog::setControlDefaults() { m_inputData->Control->InitControlPaneData(); updateControlWidgets(); } void GamessInputDialog::setDataDefaults() { m_inputData->Data->InitData(); updateDataWidgets(); } void GamessInputDialog::setSystemDefaults() { m_inputData->System->InitData(); updateSystemWidgets(); } void GamessInputDialog::setMOGuessDefaults() { m_inputData->Guess->InitData(); updateMOGuessWidgets(); } void GamessInputDialog::setMiscDefaults() { m_inputData->Control->InitProgPaneData(); m_inputData->Basis->SetWaterSolvate(false); updateMiscWidgets(); } void GamessInputDialog::setSCFDefaults() { m_inputData->SCF->InitData(); updateSCFWidgets(); } void GamessInputDialog::setDFTDefaults() { m_inputData->DFT->InitData(); updateDFTWidgets(); } void GamessInputDialog::setMP2Defaults() { m_inputData->MP2->InitData(); updateMP2Widgets(); } void GamessInputDialog::setHessianDefaults() { m_inputData->Hessian->InitData(); updateHessianWidgets(); } void GamessInputDialog::setStatPointDefaults() { m_inputData->StatPt->InitData(); updateStatPointWidgets(); } void GamessInputDialog::blockChildrenSignals( QLayout *layout, bool block ) { blockChildrenSignals( layout->parentWidget(), block ); } void GamessInputDialog::blockChildrenSignals( QObject *object, bool block ) { if ( !object ) return; QList children = object->children(); Q_FOREACH( QObject *child, children ) { // qDebug() << child->metaObject()->className(); blockChildrenSignals(child, block); child->blockSignals( block ); } } void GamessInputDialog::blockAdvancedSignals( bool block ) { int count = ui.advancedStacked->count(); for ( int i = 0; i < count; i++ ) { blockChildrenSignals( ui.advancedStacked->widget( i ), block ); } } void GamessInputDialog::updatePreviewText() { stringstream str; m_inputData->WriteInputFile( str ); ui.previewText->setText( QString::fromAscii( str.str().c_str() ) ); } void GamessInputDialog::updateBasicWidgets() { // These rely on the advanced defaults setAdvancedDefaults(); setBasicCalculate( ui.basicCalculateCombo->currentIndex() ); setBasicWithLeft( ui.basicWithLeftCombo->currentIndex() ); setBasicWithRight( ui.basicWithRightCombo->currentIndex() ); setBasicIn( ui.basicInCombo->currentIndex() ); // multText int itemValue = m_inputData->Control->GetMultiplicity(); if ( itemValue <= 0 ) { long NumElectrons = m_inputData->GetNumElectrons(); if ( NumElectrons & 1 ) { ui.basicOnLeftCombo->setCurrentIndex(1); } } else { setBasicOnLeft( ui.basicOnLeftCombo->currentIndex() ); } setBasicOnRight( ui.basicOnRightCombo->currentIndex() ); m_advancedChanged = false; ui.basicWidget->setEnabled( true ); } void GamessInputDialog::updateAdvancedWidgets() { updateBasisWidgets(); updateControlWidgets(); updateDataWidgets(); updateSystemWidgets(); updateMOGuessWidgets(); updateMiscWidgets(); updateSCFWidgets(); updateDFTWidgets(); updateMP2Widgets(); updateHessianWidgets(); updateStatPointWidgets(); QTreeWidgetItem *controlItem = ui.navigationTree->topLevelItem(1); int runType = m_inputData->Control->GetRunType(); bool scfEnabled = (m_inputData->Control->GetSCFType() <= 4); ui.scfWidget->setEnabled( scfEnabled ); controlItem->child(0)->setHidden(!scfEnabled); bool dftEnabled = m_inputData->Control->UseDFT(); ui.dftWidget->setEnabled( dftEnabled ); controlItem->child(1)->setHidden(!dftEnabled); bool mp2Enabled = ( m_inputData->Control->GetMPLevel() == 2 ); ui.mp2Widget->setEnabled( mp2Enabled ); controlItem->child(2)->setHidden(!mp2Enabled); bool hessianEnabled = (( runType == 3 ) || (( runType == 3 || runType == 6 ) && m_inputData->StatPt->GetHessMethod() == 3 )); ui.hessianWidget->setEnabled( hessianEnabled ); controlItem->child(3)->setHidden(!hessianEnabled); bool statPointEnabled = (runType == 4 || runType == 6); ui.statPointWidget->setEnabled( statPointEnabled ); controlItem->child(4)->setHidden(!statPointEnabled); } void GamessInputDialog::updateBasisWidgets() { blockChildrenSignals( ui.basisWidget, true ); int basis = m_inputData->Basis->GetBasis(); int gauss = m_inputData->Basis->GetNumGauss(); int itemValue = 0; int testValue = 0; // basisChoice itemValue = basis; if ( itemValue == 0 ) itemValue = 1; else if ( itemValue == 3 ) itemValue = gauss + 1; else if ( itemValue == 4 ) { itemValue += 4; if ( gauss == 6 ) itemValue++; } else if ( itemValue == 5 ) itemValue = gauss + 6; else if ( itemValue > 5 ) itemValue += 7; ui.basisSetCombo->setCurrentIndex( itemValue - 1 ); //TODO: Implement this. // CheckBasisMenu(); // ui.basisECPCombo if ( basis == 12 || basis == 13 ) { ui.basisECPCombo->setEnabled( true ); itemValue = m_inputData->Basis->GetECPPotential(); if ( basis == 12 && ( itemValue == 3 || itemValue == 0 ) ) itemValue=2; else if ( basis == 13 && ( itemValue == 2 || itemValue == 0 ) ) itemValue=3; ui.basisECPCombo->setCurrentIndex( itemValue ); } else { ui.basisECPCombo->setCurrentIndex( 0 ); ui.basisECPCombo->setEnabled( false ); } // polarChoice testValue = m_inputData->Basis->GetNumPFuncs() + m_inputData->Basis->GetNumDFuncs() + m_inputData->Basis->GetNumFFuncs(); if ( testValue ) { ui.basisPolarCombo->setEnabled( true ); itemValue = m_inputData->Basis->GetPolar(); if ( itemValue == 0 ) { if ( basis == 6 || basis == 11 ) itemValue = 2; else if ( basis == 7 || basis == 8 ) itemValue = 3; else if ( basis < 3 ) itemValue = 4; else if ( basis == 10 ) itemValue = 5; else itemValue = 1; } ui.basisPolarCombo->setCurrentIndex( itemValue - 1 ); } else { ui.basisPolarCombo->setEnabled( false ); } // diffuseLCheck ui.basisLCheck->setChecked( m_inputData->Basis->GetDiffuseSP() ); // diffuseSCheck ui.basisSCheck->setChecked( m_inputData->Basis->GetDiffuseS() ); // numDChoice ui.basisDSpin->setValue( m_inputData->Basis->GetNumDFuncs() ); // numFChoice ui.basisFSpin->setValue( m_inputData->Basis->GetNumFFuncs() ); // numPChoice ui.basisLightSpin->setValue( m_inputData->Basis->GetNumPFuncs() ); blockChildrenSignals( ui.basisWidget, false ); } void GamessInputDialog::updateControlWidgets() { blockChildrenSignals( ui.controlWidget, true ); short mp2 = m_inputData->Control->GetMPLevel(); bool dft = m_inputData->Control->UseDFT(); short ci = m_inputData->Control->GetCIType(); CCRunType cc = m_inputData->Control->GetCCType(); long scft = m_inputData->Control->GetSCFType(); long NumElectrons = m_inputData->GetNumElectrons(); int itemValue = 0; itemValue = m_inputData->Control->GetRunType(); if ( itemValue == 0 ) itemValue = 1; ui.controlRunCombo->setCurrentIndex( itemValue - 1 ); if ( scft == 0 ) { if ( NumElectrons & 1 ) { scft = 3; } else { scft = 1; } } ui.controlSCFCombo->setCurrentIndex( scft - 1 ); // mp2Check if ( ci || cc || dft || ( mp2 < 0 ) ) { ui.controlMP2Check->setChecked( false ); ui.controlMP2Check->setEnabled( false ); } else { ui.controlMP2Check->setEnabled( true ); if ( mp2 < 0 ) mp2 = 0; if ( mp2 == 2 ) mp2 = 1; ui.controlMP2Check->setChecked( mp2 ); } // dftCheck if ( ci || cc || ( mp2 > 0 ) || ( scft > 3 ) ) { ui.controlDFTCheck->setChecked( false ); ui.controlDFTCheck->setEnabled( false ); } else { ui.controlDFTCheck->setEnabled( true ); ui.controlDFTCheck->setChecked( dft ); } // ciCombo if (( mp2 > 0 ) || dft || cc || scft == 2 ) { ui.controlCICombo->setCurrentIndex( 0 ); ui.controlCICombo->setEnabled( false ); } else { ui.controlCICombo->setEnabled( true ); ui.controlCICombo->setCurrentIndex( ci ); } // ccCombo if (( mp2 > 0 ) || dft || ci || scft > 1 ) { ui.controlCCCombo->setCurrentIndex( 0 ); ui.controlCCCombo->setEnabled( false ); } else { ui.controlCCCombo->setEnabled( true ); ui.controlCCCombo->setCurrentIndex( cc ); } // scfIterText itemValue = m_inputData->Control->GetMaxIt(); if ( itemValue <= 0 ) itemValue = 30; ui.controlMaxSCFSpin->setValue( itemValue ); // exeCombo ui.controlExecCombo->setCurrentIndex( m_inputData->Control->GetExeType() ); if ( m_inputData->Control->GetFriend() != Friend_None ) { //The friend keyword choices force a check run type ui.controlExecCombo->setEnabled( false ); ui.controlExecCombo->setCurrentIndex( 1 ); } else { ui.controlExecCombo->setEnabled( true ); } // mchargeText ui.controlChargeSpin->setValue( m_inputData->Control->GetCharge() ); // multText itemValue = m_inputData->Control->GetMultiplicity(); if ( itemValue <= 0 ) { if ( NumElectrons & 1 ) itemValue = 2; else itemValue = 1; } ui.controlMultiplicitySpin->setValue( itemValue ); // localCombo ui.controlLocalizationCombo->setCurrentIndex( m_inputData->Control->GetLocal() ); blockChildrenSignals( ui.controlWidget, false ); } void GamessInputDialog::updateDataWidgets() { blockChildrenSignals( ui.dataWidget, true ); int itemValue; //Title if ( m_inputData->Data->GetTitle() ) ui.dataTitleLine->setText( tr( m_inputData->Data->GetTitle() ) ); else ui.dataTitleLine->setText( tr( "Title" ) ); // coordTypeCombo itemValue = m_inputData->Data->GetCoordType(); if ( itemValue == 0 ) itemValue = 1; ui.dataCoordinateCombo->setCurrentIndex( itemValue - 1 ); // unitCombo ui.dataUnitsCombo->setCurrentIndex( m_inputData->Data->GetUnits() ); //# Z-Matrix vars ui.dataZMatrixSpin->setValue( m_inputData->Data->GetNumZVar() ); //Point Group itemValue = m_inputData->Data->GetPointGroup(); if ( itemValue == 0 ) itemValue = 1; ui.dataPointCombo->setCurrentIndex( itemValue-1 ); //Point group order updatePointGroupOrderWidgets(); // symmetryCheck ui.dataSymmetryCheck->setChecked( m_inputData->Data->GetUseSym() ); blockChildrenSignals( ui.dataWidget, false ); } void GamessInputDialog::updateSystemWidgets() { blockChildrenSignals( ui.systemWidget, true ); ui.systemTimeDouble->setValue( m_inputData->System->GetConvertedTime() ); ui.systemTimeCombo->setCurrentIndex( m_inputData->System->GetTimeUnits() - minuteUnit ); // Standard Memory Handler ui.systemMemoryDouble->setValue( m_inputData->System->GetConvertedMem() ); ui.systemMemoryCombo->setCurrentIndex( m_inputData->System->GetMemUnits() - megaWordsUnit ); // memDDI edit ui.systemDDIDouble->setValue( m_inputData->System->GetConvertedMemDDI() ); // memDDIUnitCombo ui.systemDDICombo->setCurrentIndex( m_inputData->System->GetMemDDIUnits() - megaWordsUnit ); // diagCombo ui.systemDiagonalizationCombo->setCurrentIndex( m_inputData->System->GetDiag() ); ui.systemCoreCheck->setChecked( m_inputData->System->GetCoreFlag() ); if ( m_inputData->System->GetBalanceType() ) ui.systemNextRadio->setChecked( true ); else ui.systemLoopRadio->setChecked( true ); ui.systemExternalCheck->setChecked( m_inputData->System->GetXDR() ); // Parall check ui.systemForceCheck->setChecked( m_inputData->System->GetParallel() ); blockChildrenSignals( ui.systemWidget, false ); } void GamessInputDialog::updatePointGroupOrderWidgets() { ui.dataOrderSpin->blockSignals( true ); //Point group order - only applicable to certain point groups int itemValue = m_inputData->Data->GetPointGroup(); if ( itemValue == 0 ) itemValue = 1; if (( itemValue>3 )&&( itemValue<11 ) ) { ui.dataOrderSpin->setEnabled( true ); itemValue = m_inputData->Data->GetPointGroupOrder()-1; if ( itemValue <= 0 ) { itemValue = 1; m_inputData->Data->SetPointGroupOrder( 2 ); } ui.dataOrderSpin->setValue( itemValue + 1 ); } else ui.dataOrderSpin->setEnabled( false ); ui.dataOrderSpin->blockSignals( false ); } void GamessInputDialog::updateMOGuessWidgets() { blockChildrenSignals( ui.moGuessWidget, true ); long guess = m_inputData->Guess->GetGuess(); if ( guess < 1 ) { guess = 1; } ui.moGuessInitialCombo->setCurrentIndex( guess-1 ); int multiplicity = m_inputData->Control->GetMultiplicity(); ui.moGuessRotateCheck->setEnabled(( m_inputData->Control->GetSCFType() == 2 ) && ( multiplicity == 1 || multiplicity == 2 ) ); ui.moGuessRotateCheck->setChecked( m_inputData->Guess->GetMix() ); ui.moGuessPrintCheck->setChecked( m_inputData->Guess->GetPrintMO() ); blockChildrenSignals( ui.moGuessWidget, false ); } void GamessInputDialog::updateMiscWidgets() { blockChildrenSignals( ui.miscWidget, true ); ui.miscMolPltCheck->setChecked( m_inputData->Control->GetMolPlot() ); ui.miscPltOrbCheck->setChecked( m_inputData->Control->GetPlotOrb() ); ui.miscAIMPACCheck->setChecked( m_inputData->Control->GetAIMPAC() ); ui.miscRPACCheck->setChecked( m_inputData->Control->GetRPAC() ); int force = m_inputData->Control->GetFriend(); ui.miscAIMPACCheck->setEnabled( true ); ui.miscRPACCheck->setEnabled( true ); QRadioButton *forceButton = qobject_cast( m_miscForceButtons->button( force ) ); if ( forceButton ) forceButton->setChecked( true ); ui.miscWaterCheck->setChecked( m_inputData->Basis->GetWaterSolvate() ); blockChildrenSignals( ui.miscWidget, false ); } void GamessInputDialog::updateSCFWidgets() { blockChildrenSignals( ui.scfWidget, true ); bool direct = m_inputData->SCF->GetDirectSCF(); int scf = m_inputData->Control->GetSCFType(); ui.scfDirectCheck->setChecked( direct ); ui.scfComputeCheck->setChecked( m_inputData->SCF->GetFockDiff() ); ui.scfComputeCheck->setEnabled( direct && 3>=scf ); ui.scfGenerateCheck->setChecked( m_inputData->SCF->GetUHFNO() ); ui.scfGenerateCheck->setEnabled( scf == GAMESS_UHF ); blockChildrenSignals( ui.scfWidget, false ); } void GamessInputDialog::updateDFTWidgets() { blockChildrenSignals( ui.scfWidget, true ); blockChildrenSignals( ui.scfWidget, false ); } void GamessInputDialog::updateMP2Widgets() { blockChildrenSignals( ui.mp2Widget, true ); int electrons = m_inputData->MP2->GetNumCoreElectrons(); if(electrons > -1) { ui.mp2ElectronsSpin->setValue(electrons); } else { ui.mp2ElectronsSpin->setValue(0); } long mem = m_inputData->MP2->GetMemory(); ui.mp2MemorySpin->setValue(mem); double cutoff = m_inputData->MP2->GetIntCutoff(); if(cutoff == 0.0) cutoff = 1.0e-09; ui.mp2IntegralLine->setText(QString::number(cutoff)); ui.mp2LocalizedCheck->setEnabled(m_inputData->Control->GetSCFType() <= 1); bool lmomp2 = m_inputData->MP2->GetLMOMP2(); ui.mp2LocalizedCheck->setChecked(lmomp2); ui.mp2ComputeCheck->setEnabled(m_inputData->Control->GetRunType()); ui.mp2ComputeCheck->setChecked(m_inputData->MP2->GetMP2Prop()); ui.mp2TransformationGroup->setEnabled(!lmomp2); if(m_inputData->MP2->GetMethod() == 3) ui.mp2TwoRadio->setChecked(true); else ui.mp2SegmentedRadio->setChecked(true); int ao = m_inputData->MP2->GetAOIntMethod(); if( ao == 2 || ao == 0) ui.mp2DistributedRadio->setChecked(true); else ui.mp2DuplicatedRadio->setChecked(true); blockChildrenSignals( ui.mp2Widget, false ); } void GamessInputDialog::updateHessianWidgets() { blockChildrenSignals( ui.hessianWidget, true ); int scfType = m_inputData->Control->GetSCFType(); bool analyticEnable = (( scfType == 1 || scfType == 3 || scfType == 4 || scfType == 0) && m_inputData->Control->GetMPLevel() == 0); bool analyticSelect = analyticEnable && m_inputData->Hessian->GetAnalyticMethod(); ui.hessianAnalyticRadio->setChecked(analyticSelect); ui.hessianNumericRadio->setChecked(!analyticSelect); ui.hessianAnalyticRadio->setEnabled(analyticEnable); ui.hessianDoubleCheck->setEnabled(!analyticSelect); ui.hessianDoubleCheck->setChecked(m_inputData->Hessian->GetDoubleDiff()); int numZVar = m_inputData->Data->GetNumZVar(); ui.hessianPurifyCheck->setEnabled(numZVar > 0); ui.hessianPurifyCheck->setChecked(m_inputData->Hessian->GetPurify()); ui.hessianPrintCheck->setEnabled(numZVar > 0); ui.hessianPrintCheck->setChecked(m_inputData->Hessian->GetPrintFC()); bool vibrational = m_inputData->Hessian->GetVibAnalysis(); ui.hessianVibrationalCheck->setChecked(vibrational); ui.hessianScaleDouble->setEnabled(vibrational); ui.hessianScaleDouble->setValue(m_inputData->Hessian->GetFreqScale()); ui.hessianDisplacementDouble->setEnabled(!analyticSelect); ui.hessianDisplacementDouble->setValue(m_inputData->Hessian->GetDisplacementSize()); blockChildrenSignals( ui.hessianWidget, false ); } void GamessInputDialog::updateStatPointWidgets() { blockChildrenSignals( ui.statPointWidget, true ); int runType = m_inputData->Control->GetRunType(); ui.statPointStepsSpin->setValue(m_inputData->StatPt->GetMaxSteps()); ui.statPointConvergenceDouble->setValue(m_inputData->StatPt->GetOptConvergance()); int method = m_inputData->StatPt->GetMethod(); ui.statPointOptimizationCombo->setCurrentIndex(method - 1); ui.statPointInitialDouble->setEnabled(method != 1); float initial = m_inputData->StatPt->GetInitRadius(); if(initial == 0.0) { if(method == 5) initial = 0.1; else if (runType == 6) initial = 0.2; else initial = 0.3; } ui.statPointInitialDouble->setValue(initial); float min = m_inputData->StatPt->GetMinRadius(); ui.statPointMinDouble->setValue(min); float max = m_inputData->StatPt->GetMaxRadius(); ui.statPointMaxDouble->setValue(max); ui.statPointRecalculateSpin->setValue(m_inputData->StatPt->GetHessRecalcInterval()); int hessianType = m_inputData->StatPt->GetHessMethod(); if(!hessianType) { if(runType == 4) hessianType = 1; else hessianType = 2; } m_statPointHessianButtons->button(hessianType-1)->setChecked(true); ui.statPointUpdateCheck->setChecked(m_inputData->StatPt->GetRadiusUpdate()); bool stationary = m_inputData->StatPt->GetStatPoint(); ui.statPointStationaryCheck->setChecked(stationary); ui.statPointPrintCheck->setChecked(m_inputData->StatPt->AlwaysPrintOrbs()); ui.statPointJumpDouble->setEnabled(stationary); ui.statPointJumpDouble->setValue(m_inputData->StatPt->GetStatJump()); ui.statPointFollowSpin->setEnabled(stationary); ui.statPointFollowSpin->setValue(m_inputData->StatPt->GetModeFollow()); blockChildrenSignals( ui.statPointWidget, false ); } // Basis Tab void GamessInputDialog::connectBasis() { connect( ui.basisSetCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasisSet( int ) ) ); connect( ui.basisSetCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basisSetCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.basisECPCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasisECP( int ) ) ); connect( ui.basisECPCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basisECPCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.basisDSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setBasisD( int ) ) ); connect( ui.basisDSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basisDSpin, SIGNAL( valueChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.basisFSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setBasisF( int ) ) ); connect( ui.basisFSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basisFSpin, SIGNAL( valueChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.basisLightSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setBasisLight( int ) ) ); connect( ui.basisLightSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basisLightSpin, SIGNAL( valueChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.basisPolarCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setBasisPolar( int ) ) ); connect( ui.basisPolarCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basisPolarCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.basisLCheck, SIGNAL( toggled( bool ) ), this, SLOT( setBasisDiffuseL( bool ) ) ); connect( ui.basisLCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basisLCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.basisSCheck, SIGNAL( toggled( bool ) ), this, SLOT( setBasisDiffuseS( bool ) ) ); connect( ui.basisSCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.basisSCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectControl() { connect( ui.controlRunCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setControlRun( int ) ) ); connect( ui.controlRunCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlRunCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlSCFCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setControlSCF( int ) ) ); connect( ui.controlSCFCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlSCFCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlLocalizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setControlLocalization( int ) ) ); connect( ui.controlLocalizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlLocalizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlExecCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setControlExec( int ) ) ); connect( ui.controlExecCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlExecCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlChargeSpin, SIGNAL( valueChanged( QString ) ), this, SLOT( setControlCharge( QString ) ) ); connect( ui.controlChargeSpin, SIGNAL( valueChanged( QString ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlChargeSpin, SIGNAL( valueChanged( QString ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlMultiplicitySpin, SIGNAL( valueChanged( QString ) ), this, SLOT( setControlMultiplicity( QString ) ) ); connect( ui.controlMultiplicitySpin, SIGNAL( valueChanged( QString ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlMultiplicitySpin, SIGNAL( valueChanged( QString ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlMaxSCFSpin, SIGNAL( valueChanged( QString ) ), this, SLOT( setControlMaxSCF( QString ) ) ); connect( ui.controlMaxSCFSpin, SIGNAL( valueChanged( QString ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlMaxSCFSpin, SIGNAL( valueChanged( QString ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlMP2Check, SIGNAL( toggled( bool ) ), this, SLOT( setControlMP2( bool ) ) ); connect( ui.controlMP2Check, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlMP2Check, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlCICombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setControlCI( int ) ) ); connect( ui.controlCICombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlCICombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlCCCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setControlCC( int ) ) ); connect( ui.controlCCCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlCCCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.controlDFTCheck, SIGNAL( toggled( bool ) ), this, SLOT( setControlDFT( bool ) ) ); connect( ui.controlDFTCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.controlDFTCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectData() { connect( ui.dataTitleLine, SIGNAL( textChanged( QString ) ), this, SLOT( setDataTitle( QString ) ) ); connect( ui.dataTitleLine, SIGNAL( textChanged( QString ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dataTitleLine, SIGNAL( textChanged( QString ) ), this, SLOT( advancedChanged() ) ); connect( ui.dataCoordinateCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setDataCoordinate( int ) ) ); connect( ui.dataCoordinateCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dataCoordinateCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.dataUnitsCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setDataUnits( int ) ) ); connect( ui.dataUnitsCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dataUnitsCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.dataZMatrixSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setDataZMatrix( int ) ) ); connect( ui.dataZMatrixSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dataZMatrixSpin, SIGNAL( valueChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.dataPointCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setDataPoint( int ) ) ); connect( ui.dataPointCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dataPointCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.dataOrderSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setDataOrder( int ) ) ); connect( ui.dataOrderSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dataOrderSpin, SIGNAL( valueChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.dataSymmetryCheck, SIGNAL( toggled( bool ) ), this, SLOT( setDataSymmetry( bool ) ) ); connect( ui.dataSymmetryCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dataSymmetryCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectSystem() { connect( ui.systemTimeDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setTimeLimit( double ) ) ); connect( ui.systemTimeDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemTimeDouble, SIGNAL( valueChanged( double ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemTimeCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setTimeLimitUnits( int ) ) ); connect( ui.systemTimeCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemTimeCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemMemoryDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setSystemMemory( double ) ) ); connect( ui.systemMemoryDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemMemoryDouble, SIGNAL( valueChanged( double ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemMemoryCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setSystemMemoryUnits( int ) ) ); connect( ui.systemMemoryCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemMemoryCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemDDIDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setSystemDDI( double ) ) ); connect( ui.systemDDIDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemDDIDouble, SIGNAL( valueChanged( double ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemDDICombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setSystemDDIUnits( int ) ) ); connect( ui.systemDDICombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemDDICombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemDiagonalizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setSystemDiagonalization( int ) ) ); connect( ui.systemDiagonalizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemDiagonalizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemExternalCheck, SIGNAL( toggled( bool ) ), this, SLOT( setSystemExternal( bool ) ) ); connect( ui.systemExternalCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemExternalCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemCoreCheck, SIGNAL( toggled( bool ) ), this, SLOT( setSystemProduce( bool ) ) ); connect( ui.systemCoreCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemCoreCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemForceCheck, SIGNAL( toggled( bool ) ), this, SLOT( setSystemForce( bool ) ) ); connect( ui.systemForceCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemForceCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemLoopRadio, SIGNAL( toggled( bool ) ), this, SLOT( setSystemLoop( bool ) ) ); connect( ui.systemLoopRadio, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemLoopRadio, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.systemNextRadio, SIGNAL( toggled( bool ) ), this, SLOT( setSystemNext( bool ) ) ); connect( ui.systemNextRadio, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.systemNextRadio, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectMOGuess() { connect( ui.moGuessInitialCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setMOGuessInitial( int ) ) ); connect( ui.moGuessInitialCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.moGuessInitialCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.moGuessPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMOGuessPrint( bool ) ) ); connect( ui.moGuessPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.moGuessPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.moGuessRotateCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMOGuessRotate( bool ) ) ); connect( ui.moGuessRotateCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.moGuessRotateCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectMisc() { connect( ui.miscMolPltCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMiscMolPlt( bool ) ) ); connect( ui.miscMolPltCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.miscMolPltCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.miscPltOrbCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMiscPltOrb( bool ) ) ); connect( ui.miscPltOrbCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.miscPltOrbCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.miscAIMPACCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMiscAIMPAC( bool ) ) ); connect( ui.miscAIMPACCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.miscAIMPACCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.miscRPACCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMiscRPAC( bool ) ) ); connect( ui.miscRPACCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.miscRPACCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); m_miscForceButtons = new QButtonGroup; m_miscForceButtons->addButton(ui.miscNoneRadio, 0); m_miscForceButtons->addButton(ui.miscHondoRadio, 1); m_miscForceButtons->addButton(ui.miscMELDFRadio, 2); m_miscForceButtons->addButton(ui.miscGamessRadio, 3); m_miscForceButtons->addButton(ui.miscGaussianRadio, 4); m_miscForceButtons->addButton(ui.miscAllRadio, 5); connect( m_miscForceButtons, SIGNAL( buttonClicked( int ) ), this, SLOT( setMiscForce( int ) ) ); connect( m_miscForceButtons, SIGNAL( buttonClicked( int ) ), this, SLOT( updatePreviewText() ) ); connect( m_miscForceButtons, SIGNAL( buttonClicked( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.miscWaterCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMiscWater( bool ) ) ); connect( ui.miscWaterCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.miscWaterCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectSCF() { connect( ui.scfDirectCheck, SIGNAL( toggled( bool ) ), this, SLOT( setSCFDirect( bool ) ) ); connect( ui.scfDirectCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.scfDirectCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.scfComputeCheck, SIGNAL( toggled( bool ) ), this, SLOT( setSCFCompute( bool ) ) ); connect( ui.scfComputeCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.scfComputeCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.scfGenerateCheck, SIGNAL( toggled( bool ) ), this, SLOT( setSCFGenerate( bool ) ) ); connect( ui.scfGenerateCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.scfGenerateCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectDFT() { connect( ui.dftMethodCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setDFTMethod( int ) ) ); connect( ui.dftMethodCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dftMethodCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.dftFunctionalCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setDFTFunctional( int ) ) ); connect( ui.dftFunctionalCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.dftFunctionalCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectMP2() { connect( ui.mp2ElectronsSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setMP2Electrons( int ) ) ); connect( ui.mp2ElectronsSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2ElectronsSpin, SIGNAL( valueChanged( int ) ), this, SLOT( basicChanged() ) ); connect( ui.mp2MemorySpin, SIGNAL( valueChanged( int ) ), this, SLOT( setMP2Memory( int ) ) ); connect( ui.mp2MemorySpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2MemorySpin, SIGNAL( valueChanged( int ) ), this, SLOT( basicChanged() ) ); connect( ui.mp2IntegralLine, SIGNAL( textChanged( QString ) ), this, SLOT( setMP2Integral( QString ) ) ); connect( ui.mp2IntegralLine, SIGNAL( textChanged( QString ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2IntegralLine, SIGNAL( textChanged( QString ) ), this, SLOT( basicChanged() ) ); connect( ui.mp2LocalizedCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMP2Localized( bool ) ) ); connect( ui.mp2LocalizedCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2LocalizedCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.mp2ComputeCheck, SIGNAL( toggled( bool ) ), this, SLOT( setMP2Compute( bool ) ) ); connect( ui.mp2ComputeCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2ComputeCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.mp2SegmentedRadio, SIGNAL( toggled( bool ) ), this, SLOT( setMP2Segmented( bool ) ) ); connect( ui.mp2SegmentedRadio, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2SegmentedRadio, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.mp2TwoRadio, SIGNAL( toggled( bool ) ), this, SLOT( setMP2Two( bool ) ) ); connect( ui.mp2TwoRadio, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2TwoRadio, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.mp2DuplicatedRadio, SIGNAL( toggled( bool ) ), this, SLOT( setMP2Duplicated( bool ) ) ); connect( ui.mp2DuplicatedRadio, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2DuplicatedRadio, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.mp2DistributedRadio, SIGNAL( toggled( bool ) ), this, SLOT( setMP2Distributed( bool ) ) ); connect( ui.mp2DistributedRadio, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.mp2DistributedRadio, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::connectHessian() { connect( ui.hessianAnalyticRadio, SIGNAL( toggled( bool ) ), this, SLOT( setHessianAnalytic( bool ) ) ); connect( ui.hessianAnalyticRadio, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.hessianAnalyticRadio, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.hessianNumericRadio, SIGNAL( toggled( bool ) ), this, SLOT( setHessianNumeric( bool ) ) ); connect( ui.hessianNumericRadio, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.hessianNumericRadio, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.hessianDoubleCheck, SIGNAL( toggled( bool ) ), this, SLOT( setHessianDouble( bool ) ) ); connect( ui.hessianDoubleCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.hessianDoubleCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.hessianPurifyCheck, SIGNAL( toggled( bool ) ), this, SLOT( setHessianPurify( bool ) ) ); connect( ui.hessianPurifyCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.hessianPurifyCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.hessianPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( setHessianPrint( bool ) ) ); connect( ui.hessianPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.hessianPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.hessianVibrationalCheck, SIGNAL( toggled( bool ) ), this, SLOT( setHessianVibrational( bool ) ) ); connect( ui.hessianVibrationalCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.hessianVibrationalCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.hessianDisplacementDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setHessianDisplacement( double ) ) ); connect( ui.hessianDisplacementDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.hessianDisplacementDouble, SIGNAL( valueChanged( double ) ), this, SLOT( basicChanged() ) ); connect( ui.hessianScaleDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setHessianScale( double ) ) ); connect( ui.hessianScaleDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.hessianScaleDouble, SIGNAL( valueChanged( double ) ), this, SLOT( basicChanged() ) ); } void GamessInputDialog::connectStatPoint() { connect( ui.statPointStepsSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setStatPointSteps( int ) ) ); connect( ui.statPointStepsSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointStepsSpin, SIGNAL( valueChanged( int ) ), this, SLOT( basicChanged() ) ); connect( ui.statPointConvergenceDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setStatPointConvergence( double ) ) ); connect( ui.statPointConvergenceDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointConvergenceDouble, SIGNAL( valueChanged( double ) ), this, SLOT( basicChanged() ) ); connect( ui.statPointRecalculateSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setStatPointRecalculate( int ) ) ); connect( ui.statPointRecalculateSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointRecalculateSpin, SIGNAL( valueChanged( int ) ), this, SLOT( basicChanged() ) ); connect( ui.statPointOptimizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setStatPointOptimization( int ) ) ); connect( ui.statPointOptimizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointOptimizationCombo, SIGNAL( currentIndexChanged( int ) ), this, SLOT( advancedChanged() ) ); m_statPointHessianButtons = new QButtonGroup; m_statPointHessianButtons->addButton(ui.statPointGuessButton, 0); m_statPointHessianButtons->addButton(ui.statPointReadButton, 1); m_statPointHessianButtons->addButton(ui.statPointCalculateButton, 2); connect( m_statPointHessianButtons, SIGNAL( buttonClicked( int ) ), this, SLOT( setStatPointHessian( int ) ) ); connect( m_statPointHessianButtons, SIGNAL( buttonClicked( int ) ), this, SLOT( updatePreviewText() ) ); connect( m_statPointHessianButtons, SIGNAL( buttonClicked( int ) ), this, SLOT( advancedChanged() ) ); connect( ui.statPointJumpDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setStatPointJump( double ) ) ); connect( ui.statPointJumpDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointJumpDouble, SIGNAL( valueChanged( double ) ), this, SLOT( basicChanged() ) ); connect( ui.statPointPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( setStatPointPrint( bool ) ) ); connect( ui.statPointPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointPrintCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.statPointFollowSpin, SIGNAL( valueChanged( int ) ), this, SLOT( setStatPointFollow( int ) ) ); connect( ui.statPointFollowSpin, SIGNAL( valueChanged( int ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointFollowSpin, SIGNAL( valueChanged( int ) ), this, SLOT( basicChanged() ) ); connect( ui.statPointInitialDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setStatPointInitial( double ) ) ); connect( ui.statPointInitialDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointInitialDouble, SIGNAL( valueChanged( double ) ), this, SLOT( basicChanged() ) ); connect( ui.statPointMinDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setStatPointMin( double ) ) ); connect( ui.statPointMinDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointMinDouble, SIGNAL( valueChanged( double ) ), this, SLOT( basicChanged() ) ); connect( ui.statPointMaxDouble, SIGNAL( valueChanged( double ) ), this, SLOT( setStatPointMax( double ) ) ); connect( ui.statPointMaxDouble, SIGNAL( valueChanged( double ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointMaxDouble, SIGNAL( valueChanged( double ) ), this, SLOT( basicChanged() ) ); connect( ui.statPointUpdateCheck, SIGNAL( toggled( bool ) ), this, SLOT( setStatPointUpdate( bool ) ) ); connect( ui.statPointUpdateCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointUpdateCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); connect( ui.statPointStationaryCheck, SIGNAL( toggled( bool ) ), this, SLOT( setStatPointStationary( bool ) ) ); connect( ui.statPointStationaryCheck, SIGNAL( toggled( bool ) ), this, SLOT( updatePreviewText() ) ); connect( ui.statPointStationaryCheck, SIGNAL( toggled( bool ) ), this, SLOT( advancedChanged() ) ); } void GamessInputDialog::setMode( int mode ) { if ( mode == 0 && m_advancedChanged ) { QMessageBox msgbox( QMessageBox::Warning, tr( "Advanced Settings Changed" ), tr( "Advanced settings have changed.\nDiscard?" ), QMessageBox::Abort | QMessageBox::Discard, this ); int response = msgbox.exec(); if ( response == QMessageBox::Discard ) { updateBasicWidgets(); updatePreviewText(); } } else if ( mode == 1 ) { updateAdvancedWidgets(); } ui.modeTab->setCurrentIndex( mode ); } void GamessInputDialog::resetClicked() { int current = ui.modeTab->currentIndex(); if( current ) { QMessageBox msgbox( QMessageBox::Warning, tr( "Advanced Settings Reset" ), tr( "Are you sure you wish to reset advanced settings?\n" "All changes will be lost!" ), QMessageBox::Yes | QMessageBox::No, this ); int response = msgbox.exec(); if(response == QMessageBox::Yes) { setAdvancedDefaults(); updateAdvancedWidgets(); updatePreviewText(); advancedChanged(); } } else { QMessageBox msgbox( QMessageBox::Warning, tr( "Basic Settings Reset" ), tr( "Are you sure you wish to reset basic settings?\n" "All changes will be lost!" ), QMessageBox::Yes | QMessageBox::No, this ); int response = msgbox.exec(); if(response == QMessageBox::Yes) { setBasicDefaults(); updatePreviewText(); } } } void GamessInputDialog::defaultsClicked() { int current = ui.modeTab->currentIndex(); if( current ) { // Advanced Page Defaults int tab = ui.advancedStacked->currentIndex(); switch(tab) { case 0: setBasisDefaults(); break; case 1: setControlDefaults(); break; case 2: setSCFDefaults(); break; case 3: setDFTDefaults(); break; case 4: setMP2Defaults(); break; case 5: setHessianDefaults(); break; case 6: setStatPointDefaults(); break; case 7: setDataDefaults(); break; case 8: setSystemDefaults(); break; case 9: setMOGuessDefaults(); break; case 10: setMiscDefaults(); break; } updateAdvancedWidgets(); advancedChanged(); } else { setBasicDefaults(); } updatePreviewText(); } void GamessInputDialog::generateClicked() { saveInputFile(ui.previewText->toPlainText(), tr("GAMESS Input Deck"), QString("inp")); } // Basic Slots void GamessInputDialog::setBasicCalculate( int index ) { TypeOfRun rti = Energy; int hessian = 0; switch ( index ) { case 1: rti = OptimizeRun; break; case 2: rti = SadPointRun; break; case 3: rti = HessianRun; hessian = 3; break; } m_inputData->StatPt->SetHessMethod(hessian); m_inputData->Control->SetRunType( rti ); } void GamessInputDialog::setBasicWithLeft( int index ) { int basis = 0; CCRunType cc = CC_None; bool mp2 = false; bool dft = false; DFTFunctionalsGrid func = DFT_Grid_Slater; bool er = true; switch ( index ) { case 0: basis = 15; er = false; break; case 1: basis = 16; er = false; break; case 2: break; case 3: dft = true; func = DFT_Grid_B3LYP; break; case 4: mp2 = true; break; case 5: cc = CC_CCSDT; break; } if ( basis != 0 ) { // Clear everything else. setBasicWithRight( 1 ); m_inputData->Basis->SetBasis( basis ); } else { setBasicWithRight( ui.basicWithRightCombo->currentIndex() ); } m_inputData->Control->SetCCType( cc ); m_inputData->Control->SetMPLevel( mp2 ? 2 : 0 ); m_inputData->Control->UseDFT(dft); m_inputData->DFT->SetFunctional(func); ui.basicWithRightCombo->setEnabled( er ); } void GamessInputDialog::setBasicWithRight( int index ) { GAMESS_BasisSet basis = GAMESS_BS_STO; int gauss = 3; int nd = 0; int np = 0; int ecp = 0; bool dsp = false; bool ds = false; switch ( index ) { case 0: // $BASIS GBASIS=STO NGAUSS=3 $END break; case 1: // $BASIS GBASIS=MINI $END basis = GAMESS_BS_MINI; gauss = 0; break; case 2: // $BASIS GBASIS=N21 NGAUSS=3 $END basis = GAMESS_BS_N21; gauss = 3; break; case 3: // $BASIS GBASIS=N31 NGAUSS=6 NDFUNC=1 $END basis = GAMESS_BS_N31; gauss = 6; nd = 1; break; case 4: // $BASIS GBASIS=N31 NGAUSS=6 NDFUNC=1 NPFUNC=1 $END basis = GAMESS_BS_N31; gauss = 6; nd = 1; np = 1; break; case 5: // $BASIS GBASIS=N31 NGAUSS=6 NDFUNC=1 NPFUNC=1 DIFFSP=.T. $END basis = GAMESS_BS_N31; gauss = 6; nd = 1; np = 1; dsp = true; break; case 6: // $BASIS GBASIS=N31 NGAUSS=6 NDFUNC=2 NPFUNC=1 DIFFSP=.T. $END basis = GAMESS_BS_N31; gauss = 6; nd = 2; np = 1; dsp = true; break; case 7: // $BASIS GBASIS=N311 NGAUSS=6 NDFUNC=1 NPFUNC=1 DIFFSP=.T. DIFFS=.T. $END basis = GAMESS_BS_N311; gauss = 6; nd = 1; np = 1; dsp = true; ds = true; break; case 8: // $BASIS GBASIS=SBKJC NDFUNC=1 $END\n $CONTRL ECP=SBKJC $END basis = GAMESS_BS_SBK; nd = 1; ecp = 2; break; } m_inputData->Basis->SetBasis( basis ); m_inputData->Basis->SetNumGauss( gauss ); m_inputData->Basis->SetNumDFuncs( nd ); m_inputData->Basis->SetNumPFuncs( np ); m_inputData->Basis->SetDiffuseSP( dsp ); m_inputData->Basis->SetDiffuseS( ds ); m_inputData->Basis->SetECPPotential( ecp ); } void GamessInputDialog::setBasicIn( int index ) { m_inputData->Basis->SetWaterSolvate(index); } void GamessInputDialog::setBasicOnLeft( int index ) { GAMESS_SCFType scf = GAMESSDefaultSCFType; int mult = 1; long numElectrons = m_inputData->GetNumElectrons(); int charge = m_inputData->Control->GetCharge(); switch ( index ) { case 0: // Make sure we can select this. if ( (numElectrons + charge) & 1 ) { ui.basicOnLeftCombo->setCurrentIndex(1); scf = GAMESS_ROHF; mult = 2; } break; case 1: // $CONTRL SCFTYP=ROHF MULT=2 $END scf = GAMESS_ROHF; mult = 2; break; case 2: // $CONTRL SCFTYP=ROHF MULT=2 $END scf = GAMESS_ROHF; mult = 3; break; } m_inputData->Control->SetSCFType( scf ); m_inputData->Control->SetMultiplicity( mult ); } void GamessInputDialog::setBasicOnRight( int index ) { int charge = 0; switch ( index ) { case 0: // $CONTRL ICHARG=2 $END charge = 2; break; case 1: // $CONTRL ICHARG=1 $END charge = 1; break; case 2: // $CONTRL ICHARD=0 $END charge = 0; break; case 3: // $CONTRL ICHARG=-1 $END charge = -1; break; case 4: // $CONTRL ICHARG=-2 $END charge = -2; break; } m_inputData->Control->SetCharge( charge ); } // Basis Slots void GamessInputDialog::setBasisSet( int index ) { int basis = 0; int gauss = 0; if ( index < 2 ) { basis = index + 1; } else if ( index < 7 ) { basis = 3; gauss = index; } else if ( index < 9 ) { basis = 4; gauss = (( index==7 ) ? 3 : 6 ); } else if ( index < 12 ) { basis = 5; gauss = index - 5; } else if ( index < 18 ) { basis = index - 6; if ( index == 12 ) gauss = 6; } else { basis = index - 6; } m_inputData->Basis->SetBasis( basis ); m_inputData->Basis->SetNumGauss( gauss ); updateAdvancedWidgets(); } void GamessInputDialog::setBasisECP( int index ) { m_inputData->Basis->SetECPPotential( index ); } void GamessInputDialog::setBasisD( int val ) { m_inputData->Basis->SetNumDFuncs( val ); updateAdvancedWidgets(); } void GamessInputDialog::setBasisF( int val ) { m_inputData->Basis->SetNumFFuncs( val ); updateAdvancedWidgets(); } void GamessInputDialog::setBasisLight( int val ) { m_inputData->Basis->SetNumPFuncs( val ); updateAdvancedWidgets(); } void GamessInputDialog::setBasisPolar( int index ) { m_inputData->Basis->SetPolar(( GAMESS_BS_Polarization )( index ) ); } void GamessInputDialog::setBasisDiffuseL( bool state ) { m_inputData->Basis->SetDiffuseSP( state ); } void GamessInputDialog::setBasisDiffuseS( bool state ) { m_inputData->Basis->SetDiffuseS( state ); } // Control Slots void GamessInputDialog::setControlRun( int index ) { m_inputData->Control->SetRunType(( TypeOfRun )( index+1 ) ); updateAdvancedWidgets(); } void GamessInputDialog::setControlSCF( int index ) { m_inputData->Control->SetSCFType(( GAMESS_SCFType )( index +1 ) ); updateAdvancedWidgets(); } void GamessInputDialog::setControlLocalization( int index ) { m_inputData->Control->SetLocal(( GAMESS_Localization )index ); updateAdvancedWidgets(); } void GamessInputDialog::setControlExec( int index ) { m_inputData->Control->SetExeType( index ); } void GamessInputDialog::setControlMaxSCF( const QString &text ) { m_inputData->Control->SetMaxIt( text.toInt() ); } void GamessInputDialog::setControlCharge( const QString &text ) { m_inputData->Control->SetCharge( text.toInt() ); } void GamessInputDialog::setControlMultiplicity( const QString &text ) { m_inputData->Control->SetMultiplicity( text.toInt() ); updateMOGuessWidgets(); } void GamessInputDialog::setControlMP2( bool state ) { if ( state ) m_inputData->Control->SetMPLevel( 2 ); else m_inputData->Control->SetMPLevel( 0 ); updateAdvancedWidgets(); } void GamessInputDialog::setControlDFT( bool state ) { m_inputData->Control->UseDFT( state ); updateAdvancedWidgets(); } void GamessInputDialog::setControlCI( int index ) { m_inputData->Control->SetCIType(( CIRunType )index ); updateAdvancedWidgets(); } void GamessInputDialog::setControlCC( int index ) { m_inputData->Control->SetCCType(( CCRunType )index ); updateAdvancedWidgets(); } // Data Slots void GamessInputDialog::setDataTitle( const QString &text ) { m_inputData->Data->SetTitle( text.toAscii().constData() ); } void GamessInputDialog::setDataCoordinate( int index ) { m_inputData->Data->SetCoordType(( CoordinateType )( index+1 ) ); updateAdvancedWidgets(); } void GamessInputDialog::setDataUnits( int index ) { m_inputData->Data->SetUnits( index ); } void GamessInputDialog::setDataZMatrix( int val ) { m_inputData->Data->SetNumZVar( val ); } void GamessInputDialog::setDataPoint( int index ) { m_inputData->Data->SetPointGroup(( GAMESSPointGroup )( index+1 ) ); updatePointGroupOrderWidgets(); } void GamessInputDialog::setDataOrder( int index ) { m_inputData->Data->SetPointGroupOrder( index+2 ); } void GamessInputDialog::setDataSymmetry( bool state ) { m_inputData->Data->SetUseSym( state ); } void GamessInputDialog::setTimeLimit( double val ) { m_inputData->System->SetConvertedTime( val ); } #ifdef WIN32 double round(double d) {return floor(d+0.5);} #endif void GamessInputDialog::setTimeLimitUnits( int index ) { long oldTimeLimit, newTimeLimit; double oldFactor, newFactor; // get current information oldTimeLimit = m_inputData->System->GetTimeLimit(); oldFactor = m_inputData->System->GetConvertedTime(); m_inputData->System->SetTimeUnits((TimeUnit)( index + minuteUnit ) ); // get updated coefficient newFactor = m_inputData->System->GetConvertedTime(); newTimeLimit = ( long ) round((oldTimeLimit * oldFactor / newFactor)); m_inputData->System->SetTimeLimit(newTimeLimit); } void GamessInputDialog::setSystemMemory( double val ) { m_inputData->System->SetConvertedMem( val ); } void GamessInputDialog::setSystemMemoryUnits( int index ) { double oldMemory, newMemory, oldFactor, newFactor; // get current information oldMemory = m_inputData->System->GetMemory(); oldFactor = m_inputData->System->GetConvertedMem(); m_inputData->System->SetMemUnits(( MemoryUnit )( index + megaWordsUnit ) ); // get updated coefficient newFactor = m_inputData->System->GetConvertedMem(); newMemory = oldMemory * (oldFactor / newFactor); m_inputData->System->SetMemory( newMemory ); } void GamessInputDialog::setSystemDDI( double val ) { m_inputData->System->SetConvertedMemDDI( val ); } void GamessInputDialog::setSystemDDIUnits( int index ) { double oldMemory, newMemory, oldFactor, newFactor; // get current information oldMemory = m_inputData->System->GetMemDDI(); oldFactor = m_inputData->System->GetConvertedMemDDI(); m_inputData->System->SetMemDDIUnits(( MemoryUnit )( index + megaWordsUnit ) ); // get updated coefficient newFactor = m_inputData->System->GetConvertedMemDDI(); newMemory = oldMemory * (oldFactor / newFactor); m_inputData->System->SetMemDDI( newMemory ); } void GamessInputDialog::setSystemProduce( bool state ) { m_inputData->System->SetCoreFlag( state ); } void GamessInputDialog::setSystemForce( bool state ) { m_inputData->System->SetParallel( state ); } void GamessInputDialog::setSystemDiagonalization( int index ) { m_inputData->System->SetDiag( index ); } void GamessInputDialog::setSystemExternal( bool state ) { m_inputData->System->SetXDR( state ); } void GamessInputDialog::setSystemLoop( bool ) { m_inputData->System->SetBalanceType( 0 ); } void GamessInputDialog::setSystemNext( bool ) { m_inputData->System->SetBalanceType( 1 ); } void GamessInputDialog::setMOGuessInitial( int index ) { int i = index + 1; if ( i == 1 ) i = 0; if ( i != m_inputData->Guess->GetGuess() ) { m_inputData->Guess->SetGuess( i ); updateMOGuessWidgets(); } } void GamessInputDialog::setMOGuessPrint( bool state ) { m_inputData->Guess->SetPrintMO( state ); } void GamessInputDialog::setMOGuessRotate( bool state ) { m_inputData->Guess->SetMix( state ); } // Misc Slots void GamessInputDialog::setMiscMolPlt( bool state ) { m_inputData->Control->SetMolPlot( state ); } void GamessInputDialog::setMiscPltOrb( bool state ) { m_inputData->Control->SetPlotOrb( state ); } void GamessInputDialog::setMiscAIMPAC( bool state ) { m_inputData->Control->SetAIMPAC( state ); } void GamessInputDialog::setMiscRPAC( bool state ) { m_inputData->Control->SetRPAC( state ); } void GamessInputDialog::setMiscForce( int id ) { m_inputData->Control->SetFriend(( FriendType ) id ); updateMiscWidgets(); updateControlWidgets(); } void GamessInputDialog::setMiscWater( bool state ) { m_inputData->Basis->SetWaterSolvate(state); } // SCF Slots void GamessInputDialog::setSCFDirect( bool state ) { m_inputData->SCF->SetDirectSCF( state ); updateSCFWidgets(); } void GamessInputDialog::setSCFCompute( bool state ) { m_inputData->SCF->SetFockDiff( state ); } void GamessInputDialog::setSCFGenerate( bool state ) { m_inputData->SCF->SetUHFNO( state ); } // DFT Slots void GamessInputDialog::setDFTMethod( int index ) { m_inputData->DFT->SetMethodGrid(!index); } void GamessInputDialog::setDFTFunctional( int index ) { m_inputData->DFT->SetFunctional(index+1); } // MP2 Slots void GamessInputDialog::setMP2Electrons( int val ) { m_inputData->MP2->SetNumCoreElectrons(val); } void GamessInputDialog::setMP2Memory( int val ) { m_inputData->MP2->SetMemory(val); } void GamessInputDialog::setMP2Integral( const QString &text ) { double val = text.toDouble(); if(fabs(val - 1.0e-9) < 1.0e-20) val = 0.0; m_inputData->MP2->SetIntCutoff(val); } void GamessInputDialog::setMP2Localized( bool state ) { m_inputData->MP2->SetLMOMP2(state); updateMP2Widgets(); } void GamessInputDialog::setMP2Compute( bool state ) { m_inputData->MP2->SetMP2Prop(state); } void GamessInputDialog::setMP2Segmented( bool ) { m_inputData->MP2->SetMethod(2); } void GamessInputDialog::setMP2Two( bool ) { m_inputData->MP2->SetMethod(3); } void GamessInputDialog::setMP2Duplicated( bool ) { m_inputData->MP2->SetAOIntMethod(1); } void GamessInputDialog::setMP2Distributed( bool ) { m_inputData->MP2->SetAOIntMethod(2); } //! Hessian Slots void GamessInputDialog::setHessianAnalytic( bool ) { m_inputData->Hessian->SetAnalyticMethod(1); updateHessianWidgets(); } void GamessInputDialog::setHessianNumeric( bool ) { m_inputData->Hessian->SetAnalyticMethod(0); updateHessianWidgets(); } void GamessInputDialog::setHessianDisplacement( double val ) { m_inputData->Hessian->SetDisplacementSize(val); } void GamessInputDialog::setHessianDouble( bool state ) { m_inputData->Hessian->SetPrintFC(state); } void GamessInputDialog::setHessianPurify( bool state ) { m_inputData->Hessian->SetPurify(state); } void GamessInputDialog::setHessianPrint( bool state ) { m_inputData->Hessian->SetPrintFC(state); } void GamessInputDialog::setHessianVibrational( bool state ) { m_inputData->Hessian->SetVibAnalysis(state); } void GamessInputDialog::setHessianScale( double val ) { m_inputData->Hessian->SetFreqScale(val); } //! Stat Point Slots void GamessInputDialog::setStatPointSteps( int val ) { m_inputData->StatPt->SetMaxSteps(val); } void GamessInputDialog::setStatPointRecalculate( int val ) { m_inputData->StatPt->SetHessRecalcInterval(val); } void GamessInputDialog::setStatPointConvergence( double val ) { m_inputData->StatPt->SetOptConvergance(val); } void GamessInputDialog::setStatPointInitial( double val ) { double def = 0.3; if(m_inputData->StatPt->GetMethod() == 5) def = 0.1; else if(m_inputData->Control->GetRunType() == 6) def = 0.2; if(fabs(val-def) < 1.0e-10) val = 0.0; m_inputData->StatPt->SetInitRadius(val); } void GamessInputDialog::setStatPointMin( double val ) { m_inputData->StatPt->SetMinRadius(val); } void GamessInputDialog::setStatPointMax( double val ) { double def = 0.5; if(m_inputData->Control->GetRunType() == 6) def = 0.3; if(fabs(val-def) < 1.0e-10) val = 0.0; m_inputData->StatPt->SetMaxRadius(val); } void GamessInputDialog::setStatPointOptimization( int index ) { m_inputData->StatPt->SetMethod(index+1); updateStatPointWidgets(); } void GamessInputDialog::setStatPointUpdate( bool state ) { m_inputData->StatPt->SetRadiusUpdate(state); } void GamessInputDialog::setStatPointStationary( bool state ) { m_inputData->StatPt->SetStatPoint(state); updateStatPointWidgets(); } void GamessInputDialog::setStatPointHessian( int value ) { m_inputData->StatPt->SetHessMethod(value+1); updateStatPointWidgets(); } void GamessInputDialog::setStatPointPrint( bool state ) { m_inputData->StatPt->SetAlwaysPrintOrbs(state); } void GamessInputDialog::setStatPointJump( double val ) { m_inputData->StatPt->SetStatJump(val); } void GamessInputDialog::setStatPointFollow( int val ) { m_inputData->StatPt->SetModeFollow(val); } void GamessInputDialog::readSettings(QSettings& settings) { m_savePath = settings.value("gamess/savepath").toString(); } void GamessInputDialog::writeSettings(QSettings& settings) const { settings.setValue("gamess/savepath", m_savePath); } } avogadro-1.1.1/libavogadro/src/extensions/quantuminput/inputfileextension.h0000644000175000001440000000507712250371054026673 0ustar marcususers/********************************************************************** InputFileExtension - Extension for generating input files Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef INPUTFILEEXTENSION_H #define INPUTFILEEXTENSION_H #include #include #include #include "inputdialog.h" namespace Avogadro { class InputFileExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Input File Generators", tr("Input File Generators"), tr("Create input files for quantum chemistry packages")) public: InputFileExtension(QObject* parent = 0); virtual ~InputFileExtension(); virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); void setMolecule(Molecule *molecule); /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ void writeSettings(QSettings &settings) const; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ void readSettings(QSettings &settings); public Q_SLOTS: void readOutputFile(const QString filename); private: InputDialog* createInputDialog(QString name); QHash m_dialog; QHash m_hasDialog; QList m_actions; Molecule *m_molecule; GLWidget *m_widget; }; class InputFileExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(InputFileExtension) }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/highlighter.h0000644000175000001440000000327612250371054022462 0ustar marcususers/********************************************************************** Highlighter - Code highlighting for the python terminal Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef HIGHLIGHTER_H #define HIGHLIGHTER_H #include #include #include class QTextDocument; namespace Avogadro { class Highlighter : public QSyntaxHighlighter { Q_OBJECT public: Highlighter(QTextDocument *parent = 0); protected: void highlightBlock(const QString &text); private: struct HighlightingRule { QRegExp pattern; QTextCharFormat format; }; QVector highlightingRules; QRegExp commentStartExpression; QRegExp commentEndExpression; QTextCharFormat keywordFormat; QTextCharFormat promptFormat; QTextCharFormat classFormat; QTextCharFormat singleLineCommentFormat; QTextCharFormat multiLineCommentFormat; QTextCharFormat quotationFormat; QTextCharFormat functionFormat; }; } // namespace #endif avogadro-1.1.1/libavogadro/src/extensions/forcefieldextension.cpp0000644000175000001440000005662712250371054024566 0ustar marcususers/********************************************************************** forcefieldextension.cpp - molecular mechanics force field Plugin for Avogadro Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006-2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "forcefieldextension.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { enum ForceFieldExtensionIndex { OptimizeGeometryIndex = 0, CalculateEnergyIndex, ConformerSearchIndex, SetupForceFieldIndex, ConstraintsIndex, IgnoreAtomsIndex, FixAtomsIndex, SeparatorIndex }; ForceFieldExtension::ForceFieldExtension( QObject *parent ) : Extension( parent ), m_molecule(0) { QAction *action; // An OBConverison object must be instantiated before the // FindForceField call will work. OBConversion conv; Q_UNUSED(conv); // If you change this, see forcefielddialog.cpp, where we need to // set the popup menu m_forceField = OBForceField::FindForceField( "MMFF94" ); m_dialog = 0; m_conformerDialog = 0; m_constraintsDialog = 0; m_constraints = 0; if ( m_forceField ) { // make sure we can actually find and run it! action = new QAction( this ); action->setText( tr("&Optimize Geometry" )); action->setData(OptimizeGeometryIndex); action->setShortcut( tr("Ctrl+Alt+O", "Shortcut key for optimize geometry") ); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Setup Force Field..." )); action->setData(SetupForceFieldIndex); m_actions.append( action ); action = new QAction( this ); action->setSeparator(true); action->setData(SeparatorIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Calculate Energy" )); action->setData(CalculateEnergyIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Conformer Search..." )); action->setData(ConformerSearchIndex); m_actions.append( action ); action = new QAction( this ); action->setSeparator(true); action->setData(SeparatorIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Constraints..." )); action->setData(ConstraintsIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Ignore Selection" )); action->setData(IgnoreAtomsIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Fix Selected Atoms" )); action->setData(FixAtomsIndex); m_actions.append( action ); // back in the main menu -- separate us from others action = new QAction( this ); action->setSeparator(true); action->setData(OptimizeGeometryIndex); m_actions.append( action ); } else qDebug() << "Unable to set up and use any force fields."; OBPlugin::ListAsVector("forcefields", "ids", m_forcefieldList); } ForceFieldExtension::~ForceFieldExtension() { delete m_constraints; m_constraints = 0; } QList ForceFieldExtension::actions() const { return m_actions; } QString ForceFieldExtension::menuPath(QAction *action) const { int i = action->data().toInt(); if (i == OptimizeGeometryIndex) return QString(); return tr("E&xtensions") + '>' + tr("&Molecular Mechanics"); } void ForceFieldExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* ForceFieldExtension::performAction( QAction *action, GLWidget *widget) { ForceFieldCommand *undo = NULL; QList selectedAtoms; ostringstream buff; if (!m_dialog) m_dialog = new ForceFieldDialog(static_cast(parent())); if (!m_constraints) m_constraints = new ConstraintsModel; m_forceField = OBForceField::FindForceField(m_forcefieldList[m_dialog->forceFieldID()]); m_forceField->SetLogFile( &buff ); int i = action->data().toInt(); double energy = 0.0; QString msg; OBMol mol; switch ( i ) { case SetupForceFieldIndex: // setup force field m_dialog->show(); break; case CalculateEnergyIndex: // calculate energy if ( !m_forceField ) break; m_forceField->SetLogLevel( OBFF_LOGLVL_HIGH ); mol = m_molecule->OBMol(); if ( !m_forceField->Setup( mol, m_constraints->constraints() ) ) { QMessageBox::warning( widget, tr( "Avogadro" ), tr( "Cannot set up the currently selected force field for this molecule. Switching to UFF." )); m_forceField = OBForceField::FindForceField("UFF"); m_forceField->SetLogFile( &buff ); m_forceField->SetLogLevel( OBFF_LOGLVL_HIGH ); } energy = m_forceField->Energy(); if (m_forceField->GetUnit().find("kcal") != string::npos) energy *= KCAL_TO_KJ; m_molecule->setEnergy(energy); msg = QString( tr( "Energy = %L1 %2" )) .arg(energy).arg("kJ/mol"); QMessageBox::information( widget, tr( "Avogadro" ), msg); emit message( tr( buff.str().c_str() ) ); break; case ConformerSearchIndex: // conformer search if (!m_forceField) break; m_forceField->SetLogLevel( OBFF_LOGLVL_LOW ); mol = m_molecule->OBMol(); if ( !m_forceField->Setup( mol, m_constraints->constraints() ) ) { QMessageBox::warning( widget, tr( "Avogadro" ), tr( "Cannot set up the currently selected force field for this molecule. Switching to UFF." )); m_forceField = OBForceField::FindForceField("UFF"); m_forceField->SetLogFile( &buff ); m_forceField->SetLogLevel( OBFF_LOGLVL_LOW ); } // Set up some cutoffs for electrostatic and VDW interactions // Only update them periodically // For conformer search, exact geom not as important m_forceField->EnableCutOff(true); m_forceField->SetUpdateFrequency(10); m_forceField->SetVDWCutOff(8.0); m_forceField->SetElectrostaticCutOff(10.0); if (!m_conformerDialog) m_conformerDialog = new ConformerSearchDialog(static_cast(parent())); m_conformerDialog->setup(m_molecule, m_forceField, m_constraints, 0, m_dialog->nSteps(), m_dialog->algorithm(), m_dialog->convergence()); m_conformerDialog->show(); break; case OptimizeGeometryIndex: // geometry optimization if (!m_forceField) break; m_forceField->SetLogLevel( OBFF_LOGLVL_LOW ); mol = m_molecule->OBMol(); if ( !m_forceField->Setup( mol, m_constraints->constraints() ) ) { QMessageBox::warning( widget, tr( "Avogadro" ), tr( "Cannot set up the currently selected force field for this molecule. Switching to UFF." )); m_forceField = OBForceField::FindForceField("UFF"); m_forceField->SetLogFile( &buff ); m_forceField->SetLogLevel( OBFF_LOGLVL_LOW ); } // Set up some cutoffs for electrostatic and VDW interactions // Only update them periodically // For conformer search, exact geom not as important m_forceField->EnableCutOff(true); m_forceField->SetUpdateFrequency(5); m_forceField->SetVDWCutOff(10.0); m_forceField->SetElectrostaticCutOff(25.0); undo = new ForceFieldCommand( m_molecule, m_forceField, m_constraints, 0, m_dialog->nSteps(), m_dialog->algorithm(), m_dialog->convergence(), 0 ); connect(undo, SIGNAL(message(QString)), this, SIGNAL(message(QString))); undo->setText( QObject::tr( "Geometric Optimization" ) ); break; case ConstraintsIndex: // show constraints dialog if (!m_constraintsDialog) { m_constraintsDialog = new ConstraintsDialog(static_cast(parent())); m_constraintsDialog->setModel(m_constraints); } m_constraintsDialog->setMolecule(m_molecule); m_constraintsDialog->show(); break; case IgnoreAtomsIndex: // ignore the selected atoms selectedAtoms = widget->selectedPrimitives().subList(Primitive::AtomType); foreach(Primitive *p, selectedAtoms) { Atom *atom = static_cast(p); m_constraints->addIgnore(atom->index() + 1); } m_forceField->SetConstraints(m_constraints->constraints()); break; case FixAtomsIndex: // fix the selected atom positions selectedAtoms = widget->selectedPrimitives().subList(Primitive::AtomType); foreach(Primitive *p, selectedAtoms) { Atom *atom = static_cast(p); m_constraints->addAtomConstraint(atom->index() + 1); } m_forceField->SetConstraints(m_constraints->constraints()); break; } return undo; } ForceFieldThread::ForceFieldThread( Molecule *molecule, OpenBabel::OBForceField* forceField, ConstraintsModel* constraints, int forceFieldID, int nSteps, int algorithm, int convergence, int task, QObject *parent ) : QThread( parent ) { m_cycles = 0; m_molecule = molecule; m_constraints = constraints; m_forceField = forceField; m_forceFieldID = forceFieldID; m_nSteps = nSteps; m_algorithm = algorithm; m_convergence = convergence; m_task = task; m_stop = false; } int ForceFieldThread::cycles() const { return m_cycles; } void ForceFieldThread::setTask(int task) { m_task = task; } void ForceFieldThread::setNumConformers(int numConformers) { m_numConformers = numConformers; } void ForceFieldThread::setNumChildren(int numChildren) { m_numChildren = numChildren; } void ForceFieldThread::setMutability(int mutability) { m_mutability = mutability; } void ForceFieldThread::setConvergence(int convergence) { m_convergence = convergence; } void ForceFieldThread::setMethod(int method) { m_method = method; } void ForceFieldThread::copyConformers() { OBMol obmol = m_molecule->OBMol(); // copy conformers to obmol m_forceField->GetConformers( obmol ); // set the current conformer obmol.SetConformer(m_cycles); // copy the coordinates double *coordPtr = obmol.GetCoordinates(); std::vector conformer; foreach (Atom *atom, m_molecule->atoms()) { while (conformer.size() < atom->id()) conformer.push_back(Eigen::Vector3d(0.0, 0.0, 0.0)); conformer.push_back(Eigen::Vector3d(coordPtr)); coordPtr += 3; } // add the conformer to m_molecule m_molecule->addConformer(conformer, m_cycles); // set it to the current conformer m_molecule->setConformer(m_cycles); // copy the conformer energies if (obmol.HasData(OBGenericDataType::ConformerData)) { OBConformerData *cd = (OBConformerData*) obmol.GetData(OBGenericDataType::ConformerData); // Check to see if the force field is in kcal/mol (i.e., MMFF94) std::vector energies = cd->GetEnergies(); if (m_forceField->GetUnit().find("kcal") != string::npos) { for (unsigned int i = 0; i < energies.size(); ++i) energies[i] *= KCAL_TO_KJ; } m_molecule->setEnergies(energies); } } void ForceFieldThread::run() { m_stop = false; m_cycles = 0; int steps = 0; ostringstream buff; m_forceField->SetLogFile( &buff ); m_forceField->SetLogLevel( OBFF_LOGLVL_LOW ); OBMol mol = m_molecule->OBMol(); if ( !m_forceField->Setup( mol, m_constraints->constraints() ) ) { qWarning() << "ForceFieldCommand: Could not set up force field on " << m_molecule; return; } // Ignore dummy atoms -- all atoms with atomic # less than 1 if (m_constraints && m_forceField) { foreach(const Atom *atom, m_molecule->atoms()) { if (atom->atomicNumber() < 1) m_constraints->addIgnore(atom->index() + 1); } m_forceField->SetConstraints(m_constraints->constraints()); } if ( m_task == 0 ) { if ( m_algorithm == 0 ) { m_forceField->SteepestDescentInitialize( m_nSteps, pow( 10.0, -m_convergence )); // initialize sd while ( m_forceField->SteepestDescentTakeNSteps( 5 ) ) { // take 5 steps until convergence or m_nSteps taken m_forceField->UpdateCoordinates( mol ); assert( mol.NumAtoms() == m_molecule->numAtoms() ); double *coordPtr = mol.GetCoordinates(); // forces if (mol.HasData(OBGenericDataType::ConformerData)) { OBConformerData *cd = (OBConformerData*) mol.GetData(OBGenericDataType::ConformerData); const vector > &allForces = cd->GetForces(); if (allForces.size()) { const vector &forces = allForces[0]; if (forces.size() == mol.NumAtoms()) { foreach(Atom* atom, m_molecule->atoms()) { atom->setForceVector(Eigen::Vector3d(forces[atom->index()].AsArray())); } } } } // Try to acquire a write lock on the molecule, and update geometry if (m_molecule->lock()->tryLockForWrite()) { foreach (Atom *atom, m_molecule->atoms()) { atom->setPos(Eigen::Vector3d(coordPtr)); coordPtr += 3; } m_molecule->lock()->unlock(); m_molecule->update(); } m_cycles++; steps += 5; m_mutex.lock(); if ( m_stop ) { m_mutex.unlock(); break; } m_mutex.unlock(); emit stepsTaken( steps ); } } else if ( m_algorithm == 1 ) { m_forceField->ConjugateGradientsInitialize( m_nSteps, pow( 10.0, -m_convergence )); // initialize cg OBMol mol; while ( m_forceField->ConjugateGradientsTakeNSteps( 5 ) ) { // take 5 steps until convergence or m_nSteps taken mol = m_molecule->OBMol(); m_forceField->UpdateCoordinates( mol ); assert( mol.NumAtoms() == m_molecule->numAtoms() ); double *coordPtr = mol.GetCoordinates(); // forces if (mol.HasData(OBGenericDataType::ConformerData)) { OBConformerData *cd = (OBConformerData*) mol.GetData(OBGenericDataType::ConformerData); const vector > &allForces = cd->GetForces(); if (allForces.size()) { const vector &forces = allForces[0]; if (forces.size() == mol.NumAtoms()) { foreach(Atom* atom, m_molecule->atoms()) { atom->setForceVector(Eigen::Vector3d(forces[atom->index()].AsArray())); } } } } // Try to acquire a write lock on the molecule, and update geometry if (m_molecule->lock()->tryLockForWrite()) { foreach (Atom *atom, m_molecule->atoms()) { atom->setPos(Eigen::Vector3d(coordPtr)); coordPtr += 3; } m_molecule->lock()->unlock(); m_molecule->update(); } m_cycles++; steps += 5; m_mutex.lock(); if ( m_stop ) { m_mutex.unlock(); break; } m_mutex.unlock(); emit stepsTaken( steps ); } } } else if ( m_task == 1 ) { int n = m_forceField->SystematicRotorSearchInitialize(m_nSteps); while (m_forceField->SystematicRotorSearchNextConformer(m_nSteps)) { copyConformers(); m_molecule->update(); m_cycles++; m_mutex.lock(); if ( m_stop ) { m_mutex.unlock(); break; } m_mutex.unlock(); emit stepsTaken( (int) ((double) m_cycles / n * 100)); } } else if ( m_task == 2 ) { m_forceField->RandomRotorSearchInitialize(m_numConformers, m_nSteps); while (m_forceField->RandomRotorSearchNextConformer(m_nSteps)) { copyConformers(); m_molecule->update(); m_cycles++; m_mutex.lock(); if ( m_stop ) { m_mutex.unlock(); break; } m_mutex.unlock(); emit stepsTaken( m_cycles ); } } else if ( m_task == 3 ) { m_forceField->WeightedRotorSearch(m_numConformers, m_nSteps); m_forceField->ConjugateGradients(250); copyConformers(); } else if ( m_task == 4 ) { OBConformerSearch cs; if (m_method == 1) cs.SetScore(new OBEnergyConformerScore); if (cs.Setup(mol, m_numConformers, m_numChildren, m_mutability, m_convergence)) { cs.Search(); cs.GetConformers(mol); } qDebug() << "Number of Conformers: " << mol.NumConformers(); // Copy conformer data from OBMol to Molecule for (int i = 0; i < mol.NumConformers(); ++i) { // set the current conformer mol.SetConformer(i); // copy the coordinates double *coordPtr = mol.GetCoordinates(); std::vector conformer; foreach (Atom *atom, m_molecule->atoms()) { while (conformer.size() < atom->id()) conformer.push_back(Eigen::Vector3d(0.0, 0.0, 0.0)); conformer.push_back(Eigen::Vector3d(coordPtr)); coordPtr += 3; } // add the conformer to m_molecule m_molecule->addConformer(conformer, i); // set it to the current conformer m_molecule->setConformer(i); } } double energy = m_forceField->Energy(); if (m_forceField->GetUnit().find("kcal") != string::npos) energy *= KCAL_TO_KJ; m_molecule->setEnergy(energy); m_molecule->update(); emit message( QObject::tr( buff.str().c_str() ) ); m_stop = false; } void ForceFieldThread::stop() { QMutexLocker locker(&m_mutex); m_stop = true; double energy = m_forceField->Energy(); if (m_forceField->GetUnit().find("kcal") != string::npos) energy *= KCAL_TO_KJ; m_molecule->setEnergy(energy); } ForceFieldCommand::ForceFieldCommand( Molecule *molecule, OpenBabel::OBForceField* forceField, ConstraintsModel* constraints, int forceFieldID, int nSteps, int algorithm, int convergence, int task ) : m_nSteps( nSteps ), m_task( task ), m_molecule( molecule ), m_constraints( constraints ), m_thread( 0 ), m_dialog( 0 ), m_detached( false ) { m_thread = new ForceFieldThread( molecule, forceField, constraints, forceFieldID, nSteps, algorithm, convergence, task ); connect(m_thread, SIGNAL(message(QString)), this, SIGNAL(message(QString))); m_moleculeCopy = *molecule; } ForceFieldCommand::~ForceFieldCommand() { if ( !m_detached ) { if ( m_thread->isRunning() ) { m_thread->stop(); m_thread->wait(); } delete m_thread; if ( m_dialog ) { delete m_dialog; } } } void ForceFieldCommand::setTask(int task) { m_task = task; } void ForceFieldCommand::setNumConformers(int numConformers) { m_numConformers = numConformers; } void ForceFieldCommand::setNumChildren(int numChildren) { m_numChildren = numChildren; } void ForceFieldCommand::setMutability(int mutability) { m_mutability = mutability; } void ForceFieldCommand::setConvergence(int convergence) { m_convergence = convergence; } void ForceFieldCommand::setMethod(int method) { m_method = method; } void ForceFieldCommand::redo() { if(!m_dialog) { if ( m_task == 0 ) m_dialog = new QProgressDialog( QObject::tr( "Forcefield Optimization" ), QObject::tr( "Cancel" ), 0, m_nSteps ); else if ( m_task == 1) m_dialog = new QProgressDialog( QObject::tr( "Systematic Rotor Search" ), QObject::tr( "Cancel" ), 0, 100 ); else if ( m_task == 2) m_dialog = new QProgressDialog( QObject::tr( "Random Rotor Search" ), QObject::tr( "Cancel" ), 0, 100 ); else if ( m_task == 3) { m_dialog = new QProgressDialog( QObject::tr( "Weighted Rotor Search" ), QObject::tr( "Cancel" ), 0, 0 ); m_dialog->show(); } else if ( m_task == 4) { m_dialog = new QProgressDialog( QObject::tr( "Genetic Algorithm Search" ), QObject::tr( "Cancel" ), 0, 0 ); m_dialog->show(); } QObject::connect( m_thread, SIGNAL( stepsTaken( int ) ), m_dialog, SLOT( setValue( int ) ) ); QObject::connect( m_dialog, SIGNAL( canceled() ), m_thread, SLOT( stop() ) ); QObject::connect( m_thread, SIGNAL( finished() ), m_dialog, SLOT( close() ) ); } m_thread->setTask(m_task); m_thread->setNumConformers(m_numConformers); m_thread->setNumChildren(m_numChildren); m_thread->setMutability(m_mutability); m_thread->setConvergence(m_convergence); m_thread->setMethod(m_method); m_thread->start(); } void ForceFieldCommand::undo() { m_thread->stop(); m_thread->wait(); *m_molecule = m_moleculeCopy; m_molecule->update(); } bool ForceFieldCommand::mergeWith( const QUndoCommand *command ) { const ForceFieldCommand *gc = dynamic_cast( command ); if ( gc ) { // delete our current info cleanup(); gc->detach(); m_thread = gc->thread(); m_dialog = gc->progressDialog(); } // received another of the same call return true; } ForceFieldThread *ForceFieldCommand::thread() const { return m_thread; } QProgressDialog *ForceFieldCommand::progressDialog() const { return m_dialog; } void ForceFieldCommand::detach() const { m_detached = true; } void ForceFieldCommand::cleanup() { if ( !m_detached ) { if ( m_thread->isRunning() ) { m_thread->stop(); m_thread->wait(); } delete m_thread; if ( m_dialog ) { delete m_dialog; } } } int ForceFieldCommand::id() const { return 54381241; } } // end namespace Avogadro Q_EXPORT_PLUGIN2(forcefieldextension, Avogadro::ForceFieldExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/insertcommand.cpp0000644000175000001440000001270612250371054023360 0ustar marcususers/********************************************************************** Insert Command - Undo class for inserting a molecular fragment Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008,2009 Tim Vandermeersch Copyright (C) 2008-2011 Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "insertcommand.h" #include #include #include #include #include #include #include #include namespace Avogadro { ///////////////////////////////////////////////////////////////////////////// // Insert Fragment ///////////////////////////////////////////////////////////////////////////// class InsertFragmentCommandPrivate { public: InsertFragmentCommandPrivate() : molecule(0), generatedMolecule(0), widget(0), startAtom(-1), endAtom(-1) {}; Molecule *molecule; Molecule moleculeCopy, generatedMolecule; GLWidget *widget; int startAtom, endAtom; // if we're using OBBuilder::Connect() }; InsertFragmentCommand::InsertFragmentCommand(Molecule *molecule, const Molecule &generatedMolecule, GLWidget *widget, const QString commandName, int start, int end) : d(new InsertFragmentCommandPrivate) { setText(commandName); d->molecule = molecule; d->moleculeCopy = *molecule; d->generatedMolecule = generatedMolecule; d->widget = widget; d->startAtom = start; d->endAtom = end; } InsertFragmentCommand::~InsertFragmentCommand() { delete d; } void InsertFragmentCommand::undo() { *(d->molecule) = d->moleculeCopy; d->molecule->update(); } void InsertFragmentCommand::redo() { unsigned int initialAtoms = d->molecule->numAtoms() - 1; bool emptyMol = (d->molecule->numAtoms() == 0); Atom *endAtom, *startAtom; if (emptyMol) initialAtoms = 0; *(d->molecule) += d->generatedMolecule; // OK, now get the first atom of the newly placed fragment // We need to do this before removing hydrogens // (when all the indices will change) if (d->endAtom == -1) { // We'll connect to the first atom of the fragment d->endAtom = initialAtoms + 1; endAtom = d->molecule->atom(initialAtoms + 1); } else { endAtom = d->molecule->atomById(d->endAtom); } // Do we need to connect the fragment to the original molecule? if (d->startAtom != -1 && !emptyMol) { // OK, first, we should see if this atom is a hydrogen startAtom = d->molecule->atomById(d->startAtom); if (startAtom->isHydrogen()) { // get the bonded non-hydrogen and remove this atom Atom *hydrogen = startAtom; if (hydrogen->neighbors().size()) { startAtom = d->molecule->atomById(hydrogen->neighbors()[0]); // the first bonded atom to this "H" d->molecule->removeAtom(hydrogen); } } else { // heavy atom -- remove attached hydrogens d->molecule->removeHydrogens(startAtom); } // same procedure as the start atom -- check if endAtom is an H if (endAtom->isHydrogen()) { // get the bonded non-hydrogen and remove this atom Atom *hydrogen = endAtom; if (hydrogen->neighbors().size()) { endAtom = d->molecule->atomById(hydrogen->neighbors()[0]); // the first bonded atom to this "H" d->molecule->removeAtom(hydrogen); } } else { // heavy atom -- remove attached hydrogens d->molecule->removeHydrogens(endAtom); } OpenBabel::OBMol mol = d->molecule->OBMol(); // Open Babel indexes atoms from 1, not 0 OpenBabel::OBBuilder::Connect(mol, startAtom->index() + 1, endAtom->index() + 1); d->molecule->setOBMol(&mol); d->molecule->addHydrogens(); } // now tell the molecule to update d->molecule->update(); if (d->widget && d->startAtom == -1) { QList matchedAtoms; if (emptyMol) // we'll miss atom 0, so add it now matchedAtoms.append(d->molecule->atom(0)); foreach (Atom *atom, d->molecule->atoms()) { if (atom->index() > initialAtoms) matchedAtoms.append(const_cast(atom)); } d->widget->clearSelected(); d->widget->setSelected(matchedAtoms, true); d->widget->toolGroup()->setActiveTool("Manipulate"); } // in either case, update the widget if (d->widget) d->widget->update(); } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/gl2psextension.cpp0000644000175000001440000001041212250371054023471 0ustar marcususers/********************************************************************** gl2psextension.cpp - Vector graphics export Copyright (C) 2010 by Konstantin Tokarev Based on code from mainwindow.cpp This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "gl2psextension.h" #include #include #include #include #include #include // Include the GL2PS header #include "gl2ps.h" namespace Avogadro { Gl2psExtension::Gl2psExtension(QObject *parent) : Extension(parent) { m_actions.append(new QAction(tr("&Vector Graphics..."), this)); } QString Gl2psExtension::menuPath(QAction *action) const { Q_UNUSED(action) return tr("&File") + '>' + tr("Export"); } QList Gl2psExtension::actions() const { return m_actions; } QUndoCommand* Gl2psExtension::performAction(QAction *action, GLWidget *widget) { Q_UNUSED(action) QSettings settings; QString selectedFilter = settings.value("Export GL2PS Filter", tr("PDF") + " (*.pdf)").toString(); QStringList filters; // Omit "common image formats" on Mac #ifdef Q_WS_MAC filters #else filters << tr("Common vector image formats") + " (*.pdf *.svg *.eps)" #endif << tr("All files") + " (* *.*)" << tr("PDF") + " (*.pdf)" << tr("SVG") + " (*.svg)" << tr("EPS") + " (*.eps)"; // Use QFileInfo to get the parts of the path we want QFileInfo info(widget->molecule()->fileName()); QString fileName = QFileDialog::getSaveFileName(widget, tr("Export Vector Graphics"), info.absolutePath(), filters.join(";;"), &selectedFilter); settings.setValue("Export GL2PS Filter", selectedFilter); if(fileName.isEmpty()) return 0; qDebug() << "Exported filename:" << fileName; info.setFile(fileName); if(info.suffix().isEmpty()) { qDebug() << selectedFilter; if(selectedFilter.contains("pdf")) fileName += ".pdf"; if(selectedFilter.contains("svg")) fileName += ".svg"; if(selectedFilter.contains("eps")) fileName += ".eps"; info.setFile(fileName); } qDebug() << info.fileName(); // Just using the example right now, this is a C library but may be the // file calls need cleaning up a little. FILE *fp; int state = GL2PS_OVERFLOW, buffsize = 8*1024*1024, fileType = GL2PS_PDF; // Enumerate through the supported file types if (info.suffix() == "pdf") fileType = GL2PS_PDF; else if (info.suffix() == "svg") fileType = GL2PS_SVG; else if (info.suffix() == "eps") fileType = GL2PS_EPS; else return 0; fp = fopen(QFile::encodeName(fileName), "wb"); qDebug() << "Writing out a vector graphics file..."; while(state == GL2PS_OVERFLOW) { buffsize += 1024*1024; gl2psBeginPage("test", "gl2psTestSimple", NULL, fileType, GL2PS_BSP_SORT, GL2PS_DRAW_BACKGROUND | GL2PS_USE_CURRENT_VIEWPORT | GL2PS_OCCLUSION_CULL | GL2PS_BEST_ROOT, GL_RGBA, 0, NULL, 0, 0, 0, buffsize, fp, info.baseName().toStdString().c_str()); widget->renderNow(); state = gl2psEndPage(); } fclose(fp); qDebug() << "Done..."; return 0; } } Q_EXPORT_PLUGIN2(gl2psextension, Avogadro::Gl2psExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/shaderextension.cpp0000644000175000001440000003522712250371054023723 0ustar marcususers/********************************************************************** ShaderExtension - Extension for loading and using OpenGL 2.0 GLSL shaders Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "shaderextension.h" #ifdef ENABLE_GLSL #include #endif #include #include #include #include #include #include #include #include #include namespace Avogadro { class Shader { public: Shader(QByteArray* vertSource, QByteArray* fragSource) { // Not all shaders need a fragment shader if (vertSource->isEmpty()) { qDebug() << "Empty vertex shader source sent to the shader constructor."; return; } if (fragSource) { if (fragSource->isEmpty()) { qDebug() << "Empty fragment shader source sent to the shader constructor."; return; } } shaderProgram = glCreateProgramObjectARB(); const char *cVert = vertSource->data(); vertexShader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); glShaderSourceARB(vertexShader, 1, &cVert, 0); glCompileShaderARB(vertexShader); glAttachObjectARB(shaderProgram, vertexShader); if (fragSource) { const char *cFrag = fragSource->data(); fragmentShader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER); glShaderSourceARB(fragmentShader, 1, &cFrag, 0); glCompileShaderARB(fragmentShader); glAttachObjectARB(shaderProgram, fragmentShader); } glLinkProgramARB(shaderProgram); } ~Shader() { // First detach the shaders glDetachObjectARB(shaderProgram, vertexShader); glDetachObjectARB(shaderProgram, fragmentShader); // Now the shaders can be deleted glDeleteObjectARB(vertexShader); glDeleteObjectARB(fragmentShader); // Finally the program can be deleted glDeleteObjectARB(shaderProgram); } bool loadParameters(QByteArray* params) { // It appears you need to be using the shader to assign values to it if (params->isEmpty()) { qDebug() << "Empty parameters sent to the load parameters function."; return false; } glUseProgramObjectARB(shaderProgram); QList lines = params->split('\n'); qDebug() << "Loading shader parameter file:" << lines.size(); qDebug() << *params; foreach(const QByteArray &line, lines) { QList halves = line.split('\t'); QList tokens = halves.at(0).split(' '); if (tokens.size() != 2) { qDebug() << "Line not correctly space delimited:" << line; continue; } if (halves.size() != 2) { qDebug() << "Line not correctly tab delimited:" << line; continue; } // Retrieve the position of the variable const char *name = tokens.at(1).data(); GLint pos = glGetUniformLocationARB(shaderProgram, name); if (pos < 0) { qDebug() << "Error, variable" << tokens.at(1) << "not found."; qDebug() << line; qDebug() << "Position:" << pos; continue; } if (tokens.at(0) == "float") { qDebug() << pos << "float line processed:" << line; glUniform1fARB(pos, halves.at(1).toFloat()); } else if (tokens.at(0) == "vec3") { QList numbers = halves.at(1).split(' '); if (numbers.size() != 3) { qDebug() << "Numbers not space delimited/wrong number, size:" << numbers.size() << "token:" << halves.at(1); qDebug() << "Line:" << line; } else { qDebug() << pos << "vec3 line processed:" << line; glUniform3fARB(pos, numbers.at(0).toFloat(), numbers.at(1).toFloat(), numbers.at(2).toFloat()); } } else if (tokens.at(0) == "vec4") { QList numbers = halves.at(1).split(' '); if (numbers.size() != 4) { qDebug() << "Numbers not space delimited/wrong number, size:" << numbers.size() << "token:" << halves.at(1); qDebug() << "Line:" << line; } else { qDebug() << pos << "vec4 line processed:" << line; glUniform4fARB(pos, numbers.at(0).toFloat(), numbers.at(1).toFloat(), numbers.at(2).toFloat(), numbers.at(2).toFloat()); } } } glUseProgramObjectARB(0); return true; } GLuint shaderProgram, vertexShader, fragmentShader; QString name, description; }; ShaderExtension::ShaderExtension(QObject* parent) : Extension(parent), m_glwidget(0), m_molecule(0), m_shaderDialog(0) { QAction* action = new QAction(this); action->setText(tr("GLSL Shaders...")); m_actions.append(action); } ShaderExtension::~ShaderExtension() { foreach(Shader *shader, m_shaders) { delete shader; } } QList ShaderExtension::actions() const { return m_actions; } QString ShaderExtension::menuPath(QAction*) const { return tr("E&xtensions"); } QUndoCommand* ShaderExtension::performAction(QAction *, GLWidget *widget) { m_glwidget = widget; bool glslEnabled = false; if (GLEW_VERSION_2_0) { glslEnabled = true; } else if (GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader) { glslEnabled = true; } if (!glslEnabled) { QMessageBox::warning(widget, "no GLSL support", "This system doesn't support shaders."); return 0; } if (!m_shaderDialog) { m_shaderDialog = new ShaderDialog(static_cast(parent())); populateEngineCombo(); loadShaders(); populateShaderCombo(); m_shaderDialog->show(); connect(m_shaderDialog->shaderButton, SIGNAL(clicked()), this, SLOT(setShader())); connect(m_shaderDialog->vertFileButton, SIGNAL(clicked()), this, SLOT(loadVertFileDialog())); connect(m_shaderDialog->fragFileButton, SIGNAL(clicked()), this, SLOT(loadFragFileDialog())); connect(m_shaderDialog->paramsFileButton, SIGNAL(clicked()), this, SLOT(loadParamsFileDialog())); connect(m_shaderDialog->loadVertButton, SIGNAL(accepted()), this, SLOT(loadShader())); } else { m_shaderDialog->show(); } return 0; } void ShaderExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); } void ShaderExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); } void ShaderExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } void ShaderExtension::setShader() { QString engineName = m_shaderDialog->displayTypes->currentText(); GLuint shader = 0; // If the combo index is greater than zero we actually want a shader if (m_shaderDialog->shaderPrograms->currentIndex()) { shader = m_shaders[m_shaderDialog->shaderPrograms->currentIndex()-1]->shaderProgram; } foreach (Engine *engine, m_glwidget->engines()) { if (engine->name() == engineName) { engine->setShader(shader); m_glwidget->update(); return; } } } void ShaderExtension::loadShader() { if (!m_shaderDialog->vertFile->text().length()) { return; } QFileInfo vertInfo(m_shaderDialog->vertFile->text()); if (vertInfo.exists()) { QFile vertFile(vertInfo.absoluteFilePath()); if (!vertFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Error opening vert file:" << vertInfo.absoluteFilePath(); return; } Shader *shader = 0; QByteArray vertSource = vertFile.readAll(); vertFile.close(); // The shader file exists, check for a fragment file QFileInfo fragInfo(m_shaderDialog->fragFile->text()); if (fragInfo.exists()) { QFile fragFile(fragInfo.absoluteFilePath()); if (!fragFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Error opening vert file:" << fragInfo.absoluteFilePath(); return; } QByteArray fragSource = fragFile.readAll(); fragFile.close(); shader = new Shader(&vertSource, &fragSource); } else { shader = new Shader(&vertSource, 0); } qDebug() << "Shader loaded:" << vertInfo.baseName(); shader->name = m_shaderDialog->shaderName->text(); m_shaders.push_back(shader); // Now check for a parameter file and load it if necessary if (m_shaderDialog->paramsFile->text().size()) { QFileInfo paramsInfo(m_shaderDialog->paramsFile->text()); if (paramsInfo.exists()) { QFile paramsFile(paramsInfo.absoluteFilePath()); if (!paramsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Error opening parameters file..." << paramsInfo.absoluteFilePath(); return; } QByteArray params = paramsFile.readAll(); paramsFile.close(); if (!shader->loadParameters(¶ms)) { qDebug() << "Error reading parameter file in." << paramsInfo.absoluteFilePath(); } } } populateShaderCombo(); } } void ShaderExtension::loadVertFileDialog() { // Load a file QString fileName = QFileDialog::getOpenFileName(m_shaderDialog, tr("Open a vertex shader source file"), m_shaderDialog->vertFile->text(), tr("Vertex shader files (*.vert)")); if (!fileName.isEmpty()) { m_shaderDialog->vertFile->setText(fileName); QFileInfo vert(fileName); // See if we can guess the other two from this vert.setFile(vert.absolutePath() + '/' + vert.baseName() + ".frag"); if (vert.exists()) { m_shaderDialog->fragFile->setText(vert.absoluteFilePath()); } vert.setFile(vert.absolutePath() + '/' + vert.baseName() + ".params"); if (vert.exists()) { m_shaderDialog->paramsFile->setText(vert.absoluteFilePath()); } } } void ShaderExtension::loadFragFileDialog() { // Load a file QString fileName = QFileDialog::getOpenFileName(m_shaderDialog, tr("Open a fragment shader source file"), m_shaderDialog->fragFile->text(), tr("Fragment shader files (*.frag)")); if (!fileName.isEmpty()) { m_shaderDialog->fragFile->setText(fileName); } } void ShaderExtension::loadParamsFileDialog() { // Load a file QString fileName = QFileDialog::getOpenFileName(m_shaderDialog, tr("Open a shader parameters file"), m_shaderDialog->paramsFile->text(), tr("Shader parameters files (*.params)")); if (!fileName.isEmpty()) { m_shaderDialog->paramsFile->setText(fileName); } } void ShaderExtension::populateEngineCombo() { m_shaderDialog->displayTypes->clear(); foreach (Engine *engine, m_glwidget->engines()) { m_shaderDialog->displayTypes->addItem(engine->name()); } } void ShaderExtension::populateShaderCombo() { m_shaderDialog->shaderPrograms->clear(); m_shaderDialog->shaderPrograms->addItem("None"); foreach (Shader *shader, m_shaders) { m_shaderDialog->shaderPrograms->addItem(shader->name); } } void ShaderExtension::loadShaders() { // Now for the system wide shaders QDir verts; #ifdef WIN32 verts = QCoreApplication::applicationDirPath(); verts.cd("shaders"); #else QString systemShadersPath = QCoreApplication::applicationDirPath() + "/../share/libavogadro/shaders"; verts.cd(systemShadersPath); #endif QStringList filters; filters << "*.vert"; verts.setNameFilters(filters); verts.setFilter(QDir::Files | QDir::Readable); for (int i = 0; i < verts.entryList().size(); ++i) { Shader *shader = 0; QFileInfo info(verts.filePath(verts.entryList().at(i))); QFile vertFile(info.absoluteFilePath()); if (!vertFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Error opening vert file:" << info.absoluteFilePath(); continue; } QByteArray vertSource = vertFile.readAll(); vertFile.close(); // Is there a corresponding fragment file? if (verts.exists(info.baseName() + ".frag")) { QFile fragFile(info.canonicalPath() + '/' + info.baseName() + ".frag"); if (!fragFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Error opening frag file..." << info.canonicalPath() + '/' + info.baseName() + ".frag"; continue; } QByteArray fragSource = fragFile.readAll(); vertFile.close(); shader = new Shader(&vertSource, &fragSource); } else { shader = new Shader(&vertSource, 0); } qDebug() << "Shader loaded:" << info.baseName(); shader->name = info.baseName(); m_shaders.push_back(shader); // Now let us see if there are any parameter files that need loading... if (verts.exists(info.baseName() + ".params")) { QFile paramsFile(info.canonicalPath() + '/' + info.baseName() + ".params"); if (!paramsFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Error opening parameters file..." << info.canonicalPath() + '/' + info.baseName() + ".params"; continue; } QByteArray params = paramsFile.readAll(); paramsFile.close(); if (!shader->loadParameters(¶ms)) { qDebug() << "Error reading parameter file in." << info.baseName(); } } } } } // End namespace Avogadro Q_EXPORT_PLUGIN2(shaderextension, Avogadro::ShaderExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/povraydialog.cpp0000644000175000001440000001227012250371054023211 0ustar marcususers/********************************************************************** POVRayDialog - Dialog to render images using POV-Ray Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "povraydialog.h" #include #include #include #include namespace Avogadro { using Eigen::Vector3d; POVRayDialog::POVRayDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f) { ui.setupUi(this); connect(ui.selectFileName, SIGNAL(clicked()), this, SLOT(selectFileName())); connect(ui.render, SIGNAL(clicked()), this, SLOT(renderClicked())); connect(ui.dimX, SIGNAL(editingFinished()), this, SLOT(updateCommandLine())); connect(ui.dimY, SIGNAL(editingFinished()), this, SLOT(updateCommandLine())); connect(ui.antialias, SIGNAL(clicked()), this, SLOT(updateCommandLine())); connect(ui.transparency, SIGNAL(clicked()), this, SLOT(updateCommandLine())); connect(ui.povrayPath, SIGNAL(editingFinished()), this, SLOT(updateCommandLine())); connect(ui.fileName, SIGNAL(editingFinished()), this, SLOT(updateCommandLine())); ui.dimX->setText(QString::number(0)); ui.dimY->setText(QString::number(0)); updateCommandLine(); } POVRayDialog::~POVRayDialog() { } void POVRayDialog::setImageSize(int width, int height) { ui.dimX->setText(QString::number(width)); ui.dimY->setText(QString::number(height)); } int POVRayDialog::imageWidth() { return ui.dimX->text().toInt(); } int POVRayDialog::imageHeight() { return ui.dimY->text().toInt(); } void POVRayDialog::setFileName(const QString& fileName) { ui.fileName->setText(fileName); } QString POVRayDialog::fileName() { return ui.fileName->text(); } void POVRayDialog::setCommand(const QString& command) { ui.povrayPath->setText(command); } QString POVRayDialog::command() { return ui.povrayPath->text(); } QStringList POVRayDialog::commandLine() { QString fileName = ui.fileName->text(); QFileInfo info(fileName); QStringList tmp; tmp << "+I" + info.baseName() + ".pov" << "+O" + info.baseName() + ".png" << "+W" + ui.dimX->text() << "+H" + ui.dimY->text() << "+V" << "+D" << "+FN" << "+Q9" << "+P" << "+UD" << "+UL" << "+UV"; if (ui.antialias->isChecked()) tmp << "+A" << "+AM2"; if (ui.transparency->isChecked()) tmp << "+UA"; return tmp; } bool POVRayDialog::keepSource() { return ui.keepSource->isChecked(); } bool POVRayDialog::renderDirect() { return ui.renderDirect->isChecked(); } void POVRayDialog::writeSettings(QSettings &settings) const { settings.setValue("imageWidth", ui.dimX->text().toInt()); settings.setValue("imageHeight", ui.dimY->text().toInt()); settings.setValue("antialias", ui.antialias->isChecked()); settings.setValue("transparency", ui.transparency->isChecked()); settings.setValue("keepSource", ui.keepSource->isChecked()); settings.setValue("renderDirect", ui.renderDirect->isChecked()); settings.setValue("povrayPath", ui.povrayPath->text()); } void POVRayDialog::readSettings(QSettings &settings) { ui.dimX->setText(settings.value("imageWidth", 1024).toString()); ui.dimY->setText(settings.value("imageHeight", 768).toString()); ui.antialias->setChecked(settings.value("antialias", true).toBool()); ui.transparency->setChecked(settings.value("transparency", true).toBool()); ui.keepSource->setChecked(settings.value("keepSource", true).toBool()); ui.renderDirect->setChecked(settings.value("renderDirect", true).toBool()); ui.povrayPath->setText(settings.value("povrayPath", "povray").toString()); updateCommandLine(); } void POVRayDialog::selectFileName() { // Load a file QString fileName = QFileDialog::getSaveFileName(this, tr("Save POV-Ray rendered image"), ui.fileName->text(), tr("Image files (*.png *.pbm)")); ui.fileName->setText(fileName); } void POVRayDialog::renderClicked() { emit render(); } void POVRayDialog::resized() { // Adjust the size here on the form } void POVRayDialog::updateCommandLine() { // Should update the command line when anything is changed ui.command->setText(ui.povrayPath->text() + ' ' + commandLine().join(" ")); } } // End namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/insertpeptideextension.h0000644000175000001440000000514012250371054024770 0ustar marcususers/********************************************************************** InsertPeptide - Insert oligopeptide sequences Copyright (C) 2008-2009 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef INSERTPEPTIDEEXTENSION_H #define INSERTPEPTIDEEXTENSION_H #include #include "ui_insertpeptidedialog.h" namespace Avogadro { class InsertPeptideDialog : public QDialog, public Ui::InsertPeptideDialog { public: InsertPeptideDialog(QWidget *parent=0) : QDialog(parent) { setWindowFlags(Qt::Dialog | Qt::Tool); setupUi(this); } }; class InsertPeptideExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("InsertPeptide", tr("Insert Peptide"), tr("Insert oligopeptide sequences")) public: //! Constructor InsertPeptideExtension(QObject *parent=0); //! Destructor ~InsertPeptideExtension(); //! Perform Action QList actions() const; QUndoCommand* performAction(QAction *action, GLWidget *widget); QString menuPath(QAction *action) const; void setMolecule(Molecule *molecule); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); public Q_SLOTS: void performInsert(); void updateText(); void setStructureType(int); void setPhi(double); void setPsi(double); void setStereo(int); void dialogDestroyed(); private: QList m_actions; GLWidget* m_widget; Molecule *m_molecule; double phi, psi, omega; bool lStereo; int structureType; InsertPeptideDialog *m_dialog; void constructDialog(); void updateDialog(); }; class InsertPeptideExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(InsertPeptideExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/networkfetchextension.h0000644000175000001440000000575712250371054024632 0ustar marcususers/********************************************************************** NetworkFetchExtension - Extension for fetching molecules over the network Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef NETWORKFETCHEXTENSION_H #define NETWORKFETCHEXTENSION_H #include class QNetworkAccessManager; class QNetworkReply; class QString; namespace Avogadro { class NetworkFetchExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("NetworkFetch", tr("Network Fetch"), tr("Fetch molecule files over the network.")) public: NetworkFetchExtension(QObject* parent = 0); virtual ~NetworkFetchExtension(); /** * @return a list of actions which this widget can perform */ virtual QList actions() const; /** * @return the menu path for the specified action */ virtual QString menuPath(QAction* action) const; /** * @param action The action that triggered the calls. * @param widget The currently active GLWidget (feedback to the user). * @return An undo command for this action. */ virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings); public slots: /** * Slot to change the current molecule. */ void setMolecule(Molecule *molecule); private: GLWidget* m_glwidget; QList m_actions; Molecule *m_molecule; QNetworkAccessManager *m_network; QString *m_moleculeName; private slots: void replyFinished(QNetworkReply*); }; class NetworkFetchExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(NetworkFetchExtension) }; } // End namespace Avogadro #endif // NETWORKFETCHEXTENSION_H avogadro-1.1.1/libavogadro/src/extensions/insertfragmentdialog.ui0000644000175000001440000000450312250371054024554 0ustar marcususers InsertFragmentDialog 0 0 412 376 Insert Fragment... Filter: Type a name or part of a name to show only matching files. X Qt::Horizontal Qt::Horizontal 40 20 Insert true false Qt::Horizontal 40 20 avogadro-1.1.1/libavogadro/src/extensions/highlighter.cpp0000644000175000001440000001062712250371054023013 0ustar marcususers/********************************************************************** Highlighter - Code highlighting for the python terminal Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "highlighter.h" #include namespace Avogadro { Highlighter::Highlighter(QTextDocument *parent) : QSyntaxHighlighter(parent) { HighlightingRule rule; promptFormat.setForeground(Qt::red); promptFormat.setFontWeight(QFont::Bold); QStringList promptPatterns; promptPatterns << ">>>" << "\\.\\.\\."; foreach (const QString &pattern, promptPatterns) { rule.pattern = QRegExp(pattern); rule.format = promptFormat; highlightingRules.append(rule); } keywordFormat.setForeground(Qt::darkGreen); keywordFormat.setFontWeight(QFont::Bold); QStringList keywordPatterns; // Python keywords keywordPatterns << "\\band\\b" << "\\bdel\\b" << "\\bfrom\\b" << "\\bnot\\b" << "\\bwhile\\b" << "\\bas\\b" << "\\belif\\b" << "\\bglobal\\b" << "\\bor\\b" << "\\bwith\\b" << "\\bassert\\b" << "\\belse\\b" << "\\bif\\b" << "\\bpass\\b" << "\\byield\\b" << "\\bbreak\\b" << "\\bexcept\\b" << "\\bimport\\b" << "\\bprint\\b" << "\\bclass\\b" << "\\bexec\\b" << "\\bin\\b" << "\\braise\\b" << "\\bcontinue\\b" << "\\bfinally\\b" << "\\bis\\b" << "\\breturn\\b" << "\\bdef\\b" << "\\bfor\\b" << "\\blambda\\b" << "\\btry\\b"; foreach (const QString &pattern, keywordPatterns) { rule.pattern = QRegExp(pattern); rule.format = keywordFormat; highlightingRules.append(rule); } classFormat.setFontWeight(QFont::Bold); classFormat.setForeground(Qt::darkMagenta); rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b"); rule.format = classFormat; highlightingRules.append(rule); singleLineCommentFormat.setForeground(Qt::red); rule.pattern = QRegExp("#[^\n]*"); rule.format = singleLineCommentFormat; highlightingRules.append(rule); multiLineCommentFormat.setForeground(Qt::red); quotationFormat.setForeground(Qt::darkGreen); rule.pattern = QRegExp("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule); functionFormat.setFontItalic(true); functionFormat.setForeground(Qt::blue); rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()"); rule.format = functionFormat; highlightingRules.append(rule); commentStartExpression = QRegExp("/\\*"); commentEndExpression = QRegExp("\\*/"); } void Highlighter::highlightBlock(const QString &text) { foreach (const HighlightingRule &rule, highlightingRules) { QRegExp expression(rule.pattern); int index = text.indexOf(expression); while (index >= 0) { int length = expression.matchedLength(); setFormat(index, length, rule.format); index = text.indexOf(expression, index + length); } } setCurrentBlockState(0); int startIndex = 0; if (previousBlockState() != 1) startIndex = text.indexOf(commentStartExpression); while (startIndex >= 0) { int endIndex = text.indexOf(commentEndExpression, startIndex); int commentLength; if (endIndex == -1) { setCurrentBlockState(1); commentLength = text.length() - startIndex; } else { commentLength = endIndex - startIndex + commentEndExpression.matchedLength(); } setFormat(startIndex, commentLength, multiLineCommentFormat); startIndex = text.indexOf(commentStartExpression, startIndex + commentLength); } } } // namespace avogadro-1.1.1/libavogadro/src/extensions/cartesianeditor.ui0000644000175000001440000002106712250371054023530 0ustar marcususers CartesianEditorDialog 0 0 630 322 Cartesian Editor true false 5 5 Qt::Horizontal 0 0 0 0 110 28 Angstroms Bohrs Fractional 0 0 130 28 0 XYZ XYZ with numbers XYZ, coords only GAMESS Input GAMESS Input #2 Turbomole Input Priroda Input 0 0 100 28 Apply Changes Apply Cut All ... :/edit/icons/edit-cut.png:/edit/icons/edit-cut.png 20 20 Clear All ... :/edit/icons/edit-clear.png:/edit/icons/edit-clear.png 20 20 Copy All ... :/edit/icons/edit-copy.png:/edit/icons/edit-copy.png 20 20 0 25 Paste to the End ... :/edit/icons/edit-paste.png:/edit/icons/edit-paste.png 20 20 Revert Changes ... :/edit/icons/document-revert.png:/edit/icons/document-revert.png 20 20 Monospace IBeamCursor <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Paste or edit atomic coordinates here. You may paste almost any fragment of text, containing coordinates</p></body></html> QTextEdit::NoWrap (None) Element X Y Z Sort by Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter avogadro-1.1.1/libavogadro/src/extensions/animationdialog.cpp0000644000175000001440000000771612250371054023661 0ustar marcususers/********************************************************************** AnimationDialog - Dialog for animation extension Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "animationdialog.h" #include #include #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { AnimationDialog::AnimationDialog( QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { // qDebug() << "AnimationDialog::AnimationDialog()" << endl; ui.setupUi(this); connect(ui.loadButton, SIGNAL(clicked()), this, SLOT(loadFile())); connect(ui.frameSlider, SIGNAL(valueChanged(int)), this, SIGNAL(sliderChanged(int))); connect(ui.fpsSpin, SIGNAL(valueChanged(int)), this, SIGNAL(fpsChanged(int))); connect(ui.loopBox, SIGNAL(stateChanged(int)), this, SIGNAL(loopChanged(int))); connect(ui.dynBondsBox, SIGNAL(stateChanged(int)), this, SIGNAL(dynamicBondsChanged(int))); connect(ui.playButton, SIGNAL(clicked()), this, SIGNAL(play())); connect(ui.pauseButton, SIGNAL(clicked()), this, SIGNAL(pause())); connect(ui.stopButton, SIGNAL(clicked()), this, SIGNAL(stop())); connect(ui.saveVideoButton, SIGNAL(clicked()), this, SLOT(saveVideo())); } AnimationDialog::~AnimationDialog() { // qDebug() << "AnimationDialog::~AnimationDialog()" << endl; } void AnimationDialog::loadFile() { // Load a file QSettings settings; QString selectedFilter = settings.value("Open Trajectory Filter").toString(); QStringList filters; filters << tr("Trajectory files") + " (*.xtc *.xyz)" << tr("All files") + " (* *.*)" << tr("DL-POLY HISTORY files") + " (HISTORY)"; QString file = QFileDialog::getOpenFileName(this, tr("Open Trajectory File"), ui.fileEdit->text(), filters.join(";;"), &selectedFilter); settings.setValue("Open Trajectory Filter", selectedFilter); ui.fileEdit->setText(file); emit fileName(file); } void AnimationDialog::setFrame(int i) { QString str = tr("%1/%2").arg( i ).arg( m_frameCount ); ui.frameEdit->setText(str); ui.frameSlider->setValue(i); } void AnimationDialog::setFrameCount(int i) { m_frameCount = i; ui.frameSlider->setMaximum(i); } int AnimationDialog::fps() { return ui.fpsSpin->value(); } void AnimationDialog::saveVideo() { QString sVideoFileName = QFileDialog::getSaveFileName(this, tr("Save Video File"), ui.videoFileLine->text(), tr("video files (*.avi)")); if (!sVideoFileName.isEmpty() ) { if (!sVideoFileName.endsWith(QLatin1String(".avi"))){ QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Adding .avi extension" )); sVideoFileName = sVideoFileName + ".avi"; } ui.videoFileLine->setText(sVideoFileName); } emit videoFileInfo(sVideoFileName); } } avogadro-1.1.1/libavogadro/src/extensions/invertchiralextension.h0000644000175000001440000000404112250371054024602 0ustar marcususers/********************************************************************** InvertChirality - Invert selected stereocenters Copyright (C) 2010 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef INVERTCHIRALEXTENSION_H #define INVERTCHIRALEXTENSION_H #include #include #include #include #include #include #include namespace Avogadro { class InvertChiralExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("InvertChiral", tr("InvertChiral"), tr("Invert chiral centers")) public: //! Constructor InvertChiralExtension(QObject *parent=0); //! Deconstructor virtual ~InvertChiralExtension(); //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual QString menuPath(QAction *action) const; //@} void setMolecule(Molecule *molecule); private: QList m_actions; Molecule *m_molecule; }; class InvertChiralExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(InvertChiralExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/animationdialog.h0000644000175000001440000000353012250371054023314 0ustar marcususers/********************************************************************** AnimationDialog - Dialog for animation extension Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef ANIMATIONDIALOG_H #define ANIMATIONDIALOG_H #include #include #include #include "ui_animationdialog.h" namespace Avogadro { class AnimationDialog : public QDialog { Q_OBJECT public: //! Constructor explicit AnimationDialog( QWidget *parent = 0, Qt::WindowFlags f = 0 ); //! Desconstructor ~AnimationDialog(); int fps(); private: Ui::AnimationDialog ui; int m_frameCount; public Q_SLOTS: void setFrameCount(int i); void setFrame(int i); void loadFile(); void saveVideo(); Q_SIGNALS: void fileName(QString filename); void videoFileInfo(QString filename); void sliderChanged(int i); void fpsChanged(int i); void dynamicBondsChanged(int state); bool loopChanged(int state); void back(); void play(); void pause(); void stop(); void forward(); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/fileimportdialog.ui0000644000175000001440000000571412250371054023703 0ustar marcususers FileImportDialog 0 0 379 124 0 0 File Import... Filename: Browse... Par File: Browse... Attempt to perceive bonds? Perceive bonds? true Qt::Vertical QSizePolicy::MinimumExpanding 20 0 QDialogButtonBox::Cancel|QDialogButtonBox::Open fileName selectFileName perceiveBonds avogadro-1.1.1/libavogadro/src/extensions/propextension.h0000644000175000001440000000554412250371054023101 0ustar marcususers/********************************************************************** propextension.h - Properties Plugin for Avogadro Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef PROPEXTENSION_H #define PROPEXTENSION_H #include "propmodel.h" //#include "propdialog.h" #include #ifndef BUFF_SIZE #define BUFF_SIZE 256 #endif class QProgressDialog; namespace Avogadro { class Molecule; class PropertiesView; class PropertiesExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Properties", tr("Properties"), tr("Windows for displaying atom, bond, angle and torsion properties. It also includes a cartesian coordinate editor.")) public: //! Constructor PropertiesExtension(QObject *parent=0); //! Deconstructor virtual ~PropertiesExtension(); /** @return a menu path for the extension's actions */ virtual QString menuPath(QAction *action) const; //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); //@} void setMolecule(Molecule *molecule); private: QList m_actions; Molecule *m_molecule; }; class PropertiesView : public QTableView { Q_OBJECT public: enum Type { OtherType=0, AtomType, BondType, AngleType, TorsionType, //CartesianType, ConformerType, MoleculeType }; explicit PropertiesView(Type type, QWidget *parent = 0); void selectionChanged(const QItemSelection &selected, const QItemSelection &previous); void setMolecule (Molecule *molecule); void setWidget (GLWidget *widget); void hideEvent(QHideEvent *event); private: int m_type; Molecule *m_molecule; GLWidget *m_widget; }; class PropertiesExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(PropertiesExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/molecularpropextension.h0000644000175000001440000000606012250371054024777 0ustar marcususers/********************************************************************** MolecularProp - Standard properties of molecules Copyright (C) 2009 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef MOLECULARPROPEXTENSION_H #define MOLECULARPROPEXTENSION_H #include #include #include "ui_molecularpropdialog.h" #include #include #include #include #include // Forward declarations class QNetworkAccessManager; class QNetworkReply; namespace Avogadro { class MolecularPropertiesDialog : public QDialog, public Ui::MolecularPropertiesDialog { public: MolecularPropertiesDialog(QWidget *parent=0) : QDialog(parent) { setupUi(this); } }; class MolecularPropertiesExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("MolecularProp", tr("Molecular Properties"), tr("Display standard molecular properties.")) public: //! Constructor MolecularPropertiesExtension(QObject *parent=0); //! Deconstructor virtual ~MolecularPropertiesExtension(); //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual QString menuPath(QAction *action) const; //@} void setMolecule(Molecule *molecule); public Q_SLOTS: // Slots to take signals from Molecules, and GLWidget void update(); void updatePrimitives(Primitive*); void updateAtoms(Atom*); void updateBonds(Bond*); void moleculeChanged(Molecule *previous); void disableUpdating(); private: QList m_actions; Molecule *m_molecule; GLWidget *m_widget; MolecularPropertiesDialog *m_dialog; // to query the NIH chemical resolver for an IUPAC name QString m_inchi; QNetworkAccessManager *m_network; bool m_nameRequestPending; void clearName(); private Q_SLOTS: void requestIUPACName(); void replyFinished(QNetworkReply*); }; class MolecularPropertiesExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(MolecularPropertiesExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/gl2ps/0000755000175000001440000000000012250371054021032 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/gl2ps/gl2ps.h0000644000175000001440000001534512250371054022242 0ustar marcususers/* * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2012 C. Geuzaine * * This program is free software; you can redistribute it and/or * modify it under the terms of either: * * a) the GNU Library General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your * option) any later version; or * * b) the GL2PS License as published by Christophe Geuzaine, either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either * the GNU Library General Public License or the GL2PS License for * more details. * * You should have received a copy of the GNU Library General Public * License along with this library in the file named "COPYING.LGPL"; * if not, write to the Free Software Foundation, Inc., 51 Franklin * Street, Fifth Floor, Boston, MA 02110-1301, USA. * * You should have received a copy of the GL2PS License with this * library in the file named "COPYING.GL2PS"; if not, I will be glad * to provide one. * * For the latest info about gl2ps and a full list of contributors, * see http://www.geuz.org/gl2ps/. * * Please report all bugs and problems to . */ #ifndef __GL2PS_H__ #define __GL2PS_H__ #include #include /* Define GL2PSDLL at compile time to build a Windows DLL */ #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) # if defined(_MSC_VER) # pragma warning(disable:4115) # pragma warning(disable:4996) # endif # include # if defined(GL2PSDLL) # if defined(GL2PSDLL_EXPORTS) # define GL2PSDLL_API __declspec(dllexport) # else # define GL2PSDLL_API __declspec(dllimport) # endif # else # define GL2PSDLL_API # endif #else # define GL2PSDLL_API #endif #if defined(__APPLE__) || defined(HAVE_OPENGL_GL_H) # include #else # include #endif /* Support for compressed PostScript/PDF/SVG and for embedded PNG images in SVG */ #if defined(HAVE_ZLIB) || defined(HAVE_LIBZ) # define GL2PS_HAVE_ZLIB # if defined(HAVE_LIBPNG) || defined(HAVE_PNG) # define GL2PS_HAVE_LIBPNG # endif #endif #if defined(HAVE_NO_VSNPRINTF) # define GL2PS_HAVE_NO_VSNPRINTF #endif /* Version number */ #define GL2PS_MAJOR_VERSION 1 #define GL2PS_MINOR_VERSION 3 #define GL2PS_PATCH_VERSION 8 #define GL2PS_EXTRA_VERSION "" #define GL2PS_VERSION (GL2PS_MAJOR_VERSION + \ 0.01 * GL2PS_MINOR_VERSION + \ 0.0001 * GL2PS_PATCH_VERSION) #define GL2PS_COPYRIGHT "(C) 1999-2012 C. Geuzaine" /* Output file formats (the values and the ordering are important!) */ #define GL2PS_PS 0 #define GL2PS_EPS 1 #define GL2PS_TEX 2 #define GL2PS_PDF 3 #define GL2PS_SVG 4 #define GL2PS_PGF 5 /* Sorting algorithms */ #define GL2PS_NO_SORT 1 #define GL2PS_SIMPLE_SORT 2 #define GL2PS_BSP_SORT 3 /* Message levels and error codes */ #define GL2PS_SUCCESS 0 #define GL2PS_INFO 1 #define GL2PS_WARNING 2 #define GL2PS_ERROR 3 #define GL2PS_NO_FEEDBACK 4 #define GL2PS_OVERFLOW 5 #define GL2PS_UNINITIALIZED 6 /* Options for gl2psBeginPage */ #define GL2PS_NONE 0 #define GL2PS_DRAW_BACKGROUND (1<<0) #define GL2PS_SIMPLE_LINE_OFFSET (1<<1) #define GL2PS_SILENT (1<<2) #define GL2PS_BEST_ROOT (1<<3) #define GL2PS_OCCLUSION_CULL (1<<4) #define GL2PS_NO_TEXT (1<<5) #define GL2PS_LANDSCAPE (1<<6) #define GL2PS_NO_PS3_SHADING (1<<7) #define GL2PS_NO_PIXMAP (1<<8) #define GL2PS_USE_CURRENT_VIEWPORT (1<<9) #define GL2PS_COMPRESS (1<<10) #define GL2PS_NO_BLENDING (1<<11) #define GL2PS_TIGHT_BOUNDING_BOX (1<<12) /* Arguments for gl2psEnable/gl2psDisable */ #define GL2PS_POLYGON_OFFSET_FILL 1 #define GL2PS_POLYGON_BOUNDARY 2 #define GL2PS_LINE_STIPPLE 3 #define GL2PS_BLEND 4 /* Text alignment (o=raster position; default mode is BL): +---+ +---+ +---+ +---+ +---+ +---+ +-o-+ o---+ +---o | o | o | | o | | | | | | | | | | | | +---+ +---+ +---+ +-o-+ o---+ +---o +---+ +---+ +---+ C CL CR B BL BR T TL TR */ #define GL2PS_TEXT_C 1 #define GL2PS_TEXT_CL 2 #define GL2PS_TEXT_CR 3 #define GL2PS_TEXT_B 4 #define GL2PS_TEXT_BL 5 #define GL2PS_TEXT_BR 6 #define GL2PS_TEXT_T 7 #define GL2PS_TEXT_TL 8 #define GL2PS_TEXT_TR 9 typedef GLfloat GL2PSrgba[4]; #if defined(__cplusplus) extern "C" { #endif GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, GLint viewport[4], GLint format, GLint sort, GLint options, GLint colormode, GLint colorsize, GL2PSrgba *colormap, GLint nr, GLint ng, GLint nb, GLint buffersize, FILE *stream, const char *filename); GL2PSDLL_API GLint gl2psEndPage(void); GL2PSDLL_API GLint gl2psSetOptions(GLint options); GL2PSDLL_API GLint gl2psGetOptions(GLint *options); GL2PSDLL_API GLint gl2psBeginViewport(GLint viewport[4]); GL2PSDLL_API GLint gl2psEndViewport(void); GL2PSDLL_API GLint gl2psText(const char *str, const char *fontname, GLshort fontsize); GL2PSDLL_API GLint gl2psTextOpt(const char *str, const char *fontname, GLshort fontsize, GLint align, GLfloat angle); GL2PSDLL_API GLint gl2psTextOptColor(const char *str, const char *fontname, GLshort fontsize, GLint align, GLfloat angle, GL2PSrgba color); GL2PSDLL_API GLint gl2psSpecial(GLint format, const char *str); GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, GLint xorig, GLint yorig, GLenum format, GLenum type, const void *pixels); GL2PSDLL_API GLint gl2psEnable(GLint mode); GL2PSDLL_API GLint gl2psDisable(GLint mode); GL2PSDLL_API GLint gl2psPointSize(GLfloat value); GL2PSDLL_API GLint gl2psLineWidth(GLfloat value); GL2PSDLL_API GLint gl2psBlendFunc(GLenum sfactor, GLenum dfactor); /* undocumented */ GL2PSDLL_API GLint gl2psDrawImageMap(GLsizei width, GLsizei height, const GLfloat position[3], const unsigned char *imagemap); GL2PSDLL_API const char *gl2psGetFileExtension(GLint format); GL2PSDLL_API const char *gl2psGetFormatDescription(GLint format); GL2PSDLL_API GLint gl2psGetFileFormat(); #if defined(__cplusplus) } #endif #endif /* __GL2PS_H__ */ avogadro-1.1.1/libavogadro/src/extensions/gl2ps/gl2ps.c0000644000175000001440000055220412250371054022235 0ustar marcususers/* * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2012 C. Geuzaine * * This program is free software; you can redistribute it and/or * modify it under the terms of either: * * a) the GNU Library General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your * option) any later version; or * * b) the GL2PS License as published by Christophe Geuzaine, either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either * the GNU Library General Public License or the GL2PS License for * more details. * * You should have received a copy of the GNU Library General Public * License along with this library in the file named "COPYING.LGPL"; * if not, write to the Free Software Foundation, Inc., 51 Franklin * Street, Fifth Floor, Boston, MA 02110-1301, USA. * * You should have received a copy of the GL2PS License with this * library in the file named "COPYING.GL2PS"; if not, I will be glad * to provide one. * * For the latest info about gl2ps and a full list of contributors, * see http://www.geuz.org/gl2ps/. * * Please report all bugs and problems to . */ #include "gl2ps.h" #include #include #include #include #include #include #if defined(GL2PS_HAVE_ZLIB) #include #endif #if defined(GL2PS_HAVE_LIBPNG) #include #endif /********************************************************************* * * Private definitions, data structures and prototypes * *********************************************************************/ /* Magic numbers (assuming that the order of magnitude of window coordinates is 10^3) */ #define GL2PS_EPSILON 5.0e-3F #define GL2PS_ZSCALE 1000.0F #define GL2PS_ZOFFSET 5.0e-2F #define GL2PS_ZOFFSET_LARGE 20.0F #define GL2PS_ZERO(arg) (fabs(arg) < 1.e-20) /* Primitive types */ #define GL2PS_NO_TYPE -1 #define GL2PS_TEXT 1 #define GL2PS_POINT 2 #define GL2PS_LINE 3 #define GL2PS_QUADRANGLE 4 #define GL2PS_TRIANGLE 5 #define GL2PS_PIXMAP 6 #define GL2PS_IMAGEMAP 7 #define GL2PS_IMAGEMAP_WRITTEN 8 #define GL2PS_IMAGEMAP_VISIBLE 9 #define GL2PS_SPECIAL 10 /* BSP tree primitive comparison */ #define GL2PS_COINCIDENT 1 #define GL2PS_IN_FRONT_OF 2 #define GL2PS_IN_BACK_OF 3 #define GL2PS_SPANNING 4 /* 2D BSP tree primitive comparison */ #define GL2PS_POINT_COINCIDENT 0 #define GL2PS_POINT_INFRONT 1 #define GL2PS_POINT_BACK 2 /* Internal feedback buffer pass-through tokens */ #define GL2PS_BEGIN_OFFSET_TOKEN 1 #define GL2PS_END_OFFSET_TOKEN 2 #define GL2PS_BEGIN_BOUNDARY_TOKEN 3 #define GL2PS_END_BOUNDARY_TOKEN 4 #define GL2PS_BEGIN_STIPPLE_TOKEN 5 #define GL2PS_END_STIPPLE_TOKEN 6 #define GL2PS_POINT_SIZE_TOKEN 7 #define GL2PS_LINE_WIDTH_TOKEN 8 #define GL2PS_BEGIN_BLEND_TOKEN 9 #define GL2PS_END_BLEND_TOKEN 10 #define GL2PS_SRC_BLEND_TOKEN 11 #define GL2PS_DST_BLEND_TOKEN 12 #define GL2PS_IMAGEMAP_TOKEN 13 #define GL2PS_DRAW_PIXELS_TOKEN 14 #define GL2PS_TEXT_TOKEN 15 typedef enum { T_UNDEFINED = -1, T_CONST_COLOR = 1, T_VAR_COLOR = 1<<1, T_ALPHA_1 = 1<<2, T_ALPHA_LESS_1 = 1<<3, T_VAR_ALPHA = 1<<4 } GL2PS_TRIANGLE_PROPERTY; typedef GLfloat GL2PSxyz[3]; typedef GLfloat GL2PSplane[4]; typedef struct _GL2PSbsptree2d GL2PSbsptree2d; struct _GL2PSbsptree2d { GL2PSplane plane; GL2PSbsptree2d *front, *back; }; typedef struct { GLint nmax, size, incr, n; char *array; } GL2PSlist; typedef struct _GL2PSbsptree GL2PSbsptree; struct _GL2PSbsptree { GL2PSplane plane; GL2PSlist *primitives; GL2PSbsptree *front, *back; }; typedef struct { GL2PSxyz xyz; GL2PSrgba rgba; } GL2PSvertex; typedef struct { GL2PSvertex vertex[3]; int prop; } GL2PStriangle; typedef struct { GLshort fontsize; char *str, *fontname; /* Note: for a 'special' string, 'alignment' holds the format (PostScript, PDF, etc.) of the special string */ GLint alignment; GLfloat angle; } GL2PSstring; typedef struct { GLsizei width, height; /* Note: for an imagemap, 'type' indicates if it has already been written to the file or not, and 'format' indicates if it is visible or not */ GLenum format, type; GLfloat zoom_x, zoom_y; GLfloat *pixels; } GL2PSimage; typedef struct _GL2PSimagemap GL2PSimagemap; struct _GL2PSimagemap { GL2PSimage *image; GL2PSimagemap *next; }; typedef struct { GLshort type, numverts; GLushort pattern; char boundary, offset, culled; GLint factor; GLfloat width; GL2PSvertex *verts; union { GL2PSstring *text; GL2PSimage *image; } data; } GL2PSprimitive; typedef struct { #if defined(GL2PS_HAVE_ZLIB) Bytef *dest, *src, *start; uLongf destLen, srcLen; #else int dummy; #endif } GL2PScompress; typedef struct{ GL2PSlist* ptrlist; int gsno, fontno, imno, shno, maskshno, trgroupno; int gsobjno, fontobjno, imobjno, shobjno, maskshobjno, trgroupobjno; } GL2PSpdfgroup; typedef struct { /* General */ GLint format, sort, options, colorsize, colormode, buffersize; char *title, *producer, *filename; GLboolean boundary, blending; GLfloat *feedback, offset[2], lastlinewidth; GLint viewport[4], blendfunc[2], lastfactor; GL2PSrgba *colormap, lastrgba, threshold, bgcolor; GLushort lastpattern; GL2PSvertex lastvertex; GL2PSlist *primitives, *auxprimitives; FILE *stream; GL2PScompress *compress; GLboolean header; /* BSP-specific */ GLint maxbestroot; /* Occlusion culling-specific */ GLboolean zerosurfacearea; GL2PSbsptree2d *imagetree; GL2PSprimitive *primitivetoadd; /* PDF-specific */ int streamlength; GL2PSlist *pdfprimlist, *pdfgrouplist; int *xreflist; int objects_stack; /* available objects */ int extgs_stack; /* graphics state object number */ int font_stack; /* font object number */ int im_stack; /* image object number */ int trgroupobjects_stack; /* xobject numbers */ int shader_stack; /* shader object numbers */ int mshader_stack; /* mask shader object numbers */ /* for image map list */ GL2PSimagemap *imagemap_head; GL2PSimagemap *imagemap_tail; } GL2PScontext; typedef struct { void (*printHeader)(void); void (*printFooter)(void); void (*beginViewport)(GLint viewport[4]); GLint (*endViewport)(void); void (*printPrimitive)(void *data); void (*printFinalPrimitive)(void); const char *file_extension; const char *description; } GL2PSbackend; /* The gl2ps context. gl2ps is not thread safe (we should create a local GL2PScontext during gl2psBeginPage) */ static GL2PScontext *gl2ps = NULL; /* Need to forward-declare this one */ static GLint gl2psPrintPrimitives(void); /********************************************************************* * * Utility routines * *********************************************************************/ static void gl2psMsg(GLint level, const char *fmt, ...) { va_list args; if(!(gl2ps->options & GL2PS_SILENT)){ switch(level){ case GL2PS_INFO : fprintf(stderr, "GL2PS info: "); break; case GL2PS_WARNING : fprintf(stderr, "GL2PS warning: "); break; case GL2PS_ERROR : fprintf(stderr, "GL2PS error: "); break; } va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); fprintf(stderr, "\n"); } /* if(level == GL2PS_ERROR) exit(1); */ } static void *gl2psMalloc(size_t size) { void *ptr; if(!size) return NULL; ptr = malloc(size); if(!ptr){ gl2psMsg(GL2PS_ERROR, "Couldn't allocate requested memory"); return NULL; } return ptr; } static void *gl2psRealloc(void *ptr, size_t size) { void *orig = ptr; if(!size) return NULL; ptr = realloc(orig, size); if(!ptr){ gl2psMsg(GL2PS_ERROR, "Couldn't reallocate requested memory"); free(orig); return NULL; } return ptr; } static void gl2psFree(void *ptr) { if(!ptr) return; free(ptr); } static int gl2psWriteBigEndian(unsigned long data, int bytes) { int i; int size = sizeof(unsigned long); for(i = 1; i <= bytes; ++i){ fputc(0xff & (data >> (size - i) * 8), gl2ps->stream); } return bytes; } /* zlib compression helper routines */ #if defined(GL2PS_HAVE_ZLIB) static void gl2psSetupCompress(void) { gl2ps->compress = (GL2PScompress*)gl2psMalloc(sizeof(GL2PScompress)); gl2ps->compress->src = NULL; gl2ps->compress->start = NULL; gl2ps->compress->dest = NULL; gl2ps->compress->srcLen = 0; gl2ps->compress->destLen = 0; } static void gl2psFreeCompress(void) { if(!gl2ps->compress) return; gl2psFree(gl2ps->compress->start); gl2psFree(gl2ps->compress->dest); gl2ps->compress->src = NULL; gl2ps->compress->start = NULL; gl2ps->compress->dest = NULL; gl2ps->compress->srcLen = 0; gl2ps->compress->destLen = 0; } static int gl2psAllocCompress(unsigned int srcsize) { gl2psFreeCompress(); if(!gl2ps->compress || !srcsize) return GL2PS_ERROR; gl2ps->compress->srcLen = srcsize; gl2ps->compress->destLen = (int)ceil(1.001 * gl2ps->compress->srcLen + 12); gl2ps->compress->src = (Bytef*)gl2psMalloc(gl2ps->compress->srcLen); gl2ps->compress->start = gl2ps->compress->src; gl2ps->compress->dest = (Bytef*)gl2psMalloc(gl2ps->compress->destLen); return GL2PS_SUCCESS; } static void *gl2psReallocCompress(unsigned int srcsize) { if(!gl2ps->compress || !srcsize) return NULL; if(srcsize < gl2ps->compress->srcLen) return gl2ps->compress->start; gl2ps->compress->srcLen = srcsize; gl2ps->compress->destLen = (int)ceil(1.001 * gl2ps->compress->srcLen + 12); gl2ps->compress->src = (Bytef*)gl2psRealloc(gl2ps->compress->src, gl2ps->compress->srcLen); gl2ps->compress->start = gl2ps->compress->src; gl2ps->compress->dest = (Bytef*)gl2psRealloc(gl2ps->compress->dest, gl2ps->compress->destLen); return gl2ps->compress->start; } static int gl2psWriteBigEndianCompress(unsigned long data, int bytes) { int i; int size = sizeof(unsigned long); for(i = 1; i <= bytes; ++i){ *gl2ps->compress->src = (Bytef)(0xff & (data >> (size-i) * 8)); ++gl2ps->compress->src; } return bytes; } static int gl2psDeflate(void) { /* For compatibility with older zlib versions, we use compress(...) instead of compress2(..., Z_BEST_COMPRESSION) */ return compress(gl2ps->compress->dest, &gl2ps->compress->destLen, gl2ps->compress->start, gl2ps->compress->srcLen); } #endif static int gl2psPrintf(const char* fmt, ...) { int ret; va_list args; #if defined(GL2PS_HAVE_ZLIB) static char buf[1024]; char *bufptr = buf; GLboolean freebuf = GL_FALSE; unsigned int oldsize = 0; #if !defined(GL2PS_HAVE_NO_VSNPRINTF) /* Try writing the string to a 1024 byte buffer. If it is too small to fit, keep trying larger sizes until it does. */ size_t bufsize = sizeof(buf); #endif if(gl2ps->options & GL2PS_COMPRESS){ va_start(args, fmt); #if defined(GL2PS_HAVE_NO_VSNPRINTF) ret = vsprintf(buf, fmt, args); #else ret = vsnprintf(bufptr, bufsize, fmt, args); #endif va_end(args); #if !defined(GL2PS_HAVE_NO_VSNPRINTF) while(ret >= (bufsize - 1) || ret < 0){ /* Too big. Allocate a new buffer. */ bufsize *= 2; if(freebuf == GL_TRUE) gl2psFree(bufptr); bufptr = (char *)gl2psMalloc(bufsize); freebuf = GL_TRUE; va_start(args, fmt); ret = vsnprintf(bufptr, bufsize, fmt, args); va_end(args); } #endif oldsize = gl2ps->compress->srcLen; gl2ps->compress->start = (Bytef*)gl2psReallocCompress(oldsize + ret); memcpy(gl2ps->compress->start + oldsize, bufptr, ret); if(freebuf == GL_TRUE) gl2psFree(bufptr); ret = 0; } else{ #endif va_start(args, fmt); ret = vfprintf(gl2ps->stream, fmt, args); va_end(args); #if defined(GL2PS_HAVE_ZLIB) } #endif return ret; } static void gl2psPrintGzipHeader(void) { #if defined(GL2PS_HAVE_ZLIB) char tmp[10] = {'\x1f', '\x8b', /* magic numbers: 0x1f, 0x8b */ 8, /* compression method: Z_DEFLATED */ 0, /* flags */ 0, 0, 0, 0, /* time */ 2, /* extra flags: max compression */ '\x03'}; /* OS code: 0x03 (Unix) */ if(gl2ps->options & GL2PS_COMPRESS){ gl2psSetupCompress(); /* add the gzip file header */ fwrite(tmp, 10, 1, gl2ps->stream); } #endif } static void gl2psPrintGzipFooter(void) { #if defined(GL2PS_HAVE_ZLIB) int n; uLong crc, len; char tmp[8]; if(gl2ps->options & GL2PS_COMPRESS){ if(Z_OK != gl2psDeflate()){ gl2psMsg(GL2PS_ERROR, "Zlib deflate error"); } else{ /* determine the length of the header in the zlib stream */ n = 2; /* CMF+FLG */ if(gl2ps->compress->dest[1] & (1<<5)){ n += 4; /* DICTID */ } /* write the data, without the zlib header and footer */ fwrite(gl2ps->compress->dest+n, gl2ps->compress->destLen-(n+4), 1, gl2ps->stream); /* add the gzip file footer */ crc = crc32(0L, gl2ps->compress->start, gl2ps->compress->srcLen); for(n = 0; n < 4; ++n){ tmp[n] = (char)(crc & 0xff); crc >>= 8; } len = gl2ps->compress->srcLen; for(n = 4; n < 8; ++n){ tmp[n] = (char)(len & 0xff); len >>= 8; } fwrite(tmp, 8, 1, gl2ps->stream); } gl2psFreeCompress(); gl2psFree(gl2ps->compress); gl2ps->compress = NULL; } #endif } /* The list handling routines */ static void gl2psListRealloc(GL2PSlist *list, GLint n) { if(!list){ gl2psMsg(GL2PS_ERROR, "Cannot reallocate NULL list"); return; } if(n <= 0) return; if(!list->array){ list->nmax = n; list->array = (char*)gl2psMalloc(list->nmax * list->size); } else{ if(n > list->nmax){ list->nmax = ((n - 1) / list->incr + 1) * list->incr; list->array = (char*)gl2psRealloc(list->array, list->nmax * list->size); } } } static GL2PSlist *gl2psListCreate(GLint n, GLint incr, GLint size) { GL2PSlist *list; if(n < 0) n = 0; if(incr <= 0) incr = 1; list = (GL2PSlist*)gl2psMalloc(sizeof(GL2PSlist)); list->nmax = 0; list->incr = incr; list->size = size; list->n = 0; list->array = NULL; gl2psListRealloc(list, n); return list; } static void gl2psListReset(GL2PSlist *list) { if(!list) return; list->n = 0; } static void gl2psListDelete(GL2PSlist *list) { if(!list) return; gl2psFree(list->array); gl2psFree(list); } static void gl2psListAdd(GL2PSlist *list, void *data) { if(!list){ gl2psMsg(GL2PS_ERROR, "Cannot add into unallocated list"); return; } list->n++; gl2psListRealloc(list, list->n); memcpy(&list->array[(list->n - 1) * list->size], data, list->size); } static int gl2psListNbr(GL2PSlist *list) { if(!list) return 0; return list->n; } static void *gl2psListPointer(GL2PSlist *list, GLint idx) { if(!list){ gl2psMsg(GL2PS_ERROR, "Cannot point into unallocated list"); return NULL; } if((idx < 0) || (idx >= list->n)){ gl2psMsg(GL2PS_ERROR, "Wrong list index in gl2psListPointer"); return NULL; } return &list->array[idx * list->size]; } static void gl2psListSort(GL2PSlist *list, int (*fcmp)(const void *a, const void *b)) { if(!list) return; qsort(list->array, list->n, list->size, fcmp); } static void gl2psListAction(GL2PSlist *list, void (*action)(void *data)) { GLint i; for(i = 0; i < gl2psListNbr(list); i++){ (*action)(gl2psListPointer(list, i)); } } static void gl2psListActionInverse(GL2PSlist *list, void (*action)(void *data)) { GLint i; for(i = gl2psListNbr(list); i > 0; i--){ (*action)(gl2psListPointer(list, i-1)); } } #if defined(GL2PS_HAVE_LIBPNG) static void gl2psListRead(GL2PSlist *list, int index, void *data) { if((index < 0) || (index >= list->n)) gl2psMsg(GL2PS_ERROR, "Wrong list index in gl2psListRead"); memcpy(data, &list->array[index * list->size], list->size); } static void gl2psEncodeBase64Block(unsigned char in[3], unsigned char out[4], int len) { static const char cb64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; out[0] = cb64[ in[0] >> 2 ]; out[1] = cb64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4) ]; out[2] = (len > 1) ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '='; out[3] = (len > 2) ? cb64[ in[2] & 0x3f ] : '='; } static void gl2psListEncodeBase64(GL2PSlist *list) { unsigned char *buffer, in[3], out[4]; int i, n, index, len; n = list->n * list->size; buffer = (unsigned char*)gl2psMalloc(n * sizeof(unsigned char)); memcpy(buffer, list->array, n * sizeof(unsigned char)); gl2psListReset(list); index = 0; while(index < n) { len = 0; for(i = 0; i < 3; i++) { if(index < n){ in[i] = buffer[index]; len++; } else{ in[i] = 0; } index++; } if(len) { gl2psEncodeBase64Block(in, out, len); for(i = 0; i < 4; i++) gl2psListAdd(list, &out[i]); } } gl2psFree(buffer); } #endif /* Helpers for rgba colors */ static GLboolean gl2psSameColor(GL2PSrgba rgba1, GL2PSrgba rgba2) { if(!GL2PS_ZERO(rgba1[0] - rgba2[0]) || !GL2PS_ZERO(rgba1[1] - rgba2[1]) || !GL2PS_ZERO(rgba1[2] - rgba2[2])) return GL_FALSE; return GL_TRUE; } static GLboolean gl2psVertsSameColor(const GL2PSprimitive *prim) { int i; for(i = 1; i < prim->numverts; i++){ if(!gl2psSameColor(prim->verts[0].rgba, prim->verts[i].rgba)){ return GL_FALSE; } } return GL_TRUE; } static GLboolean gl2psSameColorThreshold(int n, GL2PSrgba rgba[], GL2PSrgba threshold) { int i; if(n < 2) return GL_TRUE; for(i = 1; i < n; i++){ if(fabs(rgba[0][0] - rgba[i][0]) > threshold[0] || fabs(rgba[0][1] - rgba[i][1]) > threshold[1] || fabs(rgba[0][2] - rgba[i][2]) > threshold[2]) return GL_FALSE; } return GL_TRUE; } static void gl2psSetLastColor(GL2PSrgba rgba) { int i; for(i = 0; i < 3; ++i){ gl2ps->lastrgba[i] = rgba[i]; } } static GLfloat gl2psGetRGB(GL2PSimage *im, GLuint x, GLuint y, GLfloat *red, GLfloat *green, GLfloat *blue) { GLsizei width = im->width; GLsizei height = im->height; GLfloat *pixels = im->pixels; GLfloat *pimag; /* OpenGL image is from down to up, PS image is up to down */ switch(im->format){ case GL_RGBA: pimag = pixels + 4 * (width * (height - 1 - y) + x); break; case GL_RGB: default: pimag = pixels + 3 * (width * (height - 1 - y) + x); break; } *red = *pimag; pimag++; *green = *pimag; pimag++; *blue = *pimag; pimag++; return (im->format == GL_RGBA) ? *pimag : 1.0F; } /* Helper routines for pixmaps */ static GL2PSimage *gl2psCopyPixmap(GL2PSimage *im) { int size; GL2PSimage *image = (GL2PSimage*)gl2psMalloc(sizeof(GL2PSimage)); image->width = im->width; image->height = im->height; image->format = im->format; image->type = im->type; image->zoom_x = im->zoom_x; image->zoom_y = im->zoom_y; switch(image->format){ case GL_RGBA: size = image->height * image->width * 4 * sizeof(GLfloat); break; case GL_RGB: default: size = image->height * image->width * 3 * sizeof(GLfloat); break; } image->pixels = (GLfloat*)gl2psMalloc(size); memcpy(image->pixels, im->pixels, size); return image; } static void gl2psFreePixmap(GL2PSimage *im) { if(!im) return; gl2psFree(im->pixels); gl2psFree(im); } #if defined(GL2PS_HAVE_LIBPNG) #if !defined(png_jmpbuf) # define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) #endif static void gl2psUserWritePNG(png_structp png_ptr, png_bytep data, png_size_t length) { unsigned int i; GL2PSlist *png = (GL2PSlist*)png_get_io_ptr(png_ptr); for(i = 0; i < length; i++) gl2psListAdd(png, &data[i]); } static void gl2psUserFlushPNG(png_structp png_ptr) { (void) png_ptr; /* not used */ } static void gl2psConvertPixmapToPNG(GL2PSimage *pixmap, GL2PSlist *png) { png_structp png_ptr; png_infop info_ptr; unsigned char *row_data; GLfloat dr, dg, db; int row, col; if(!(png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL))) return; if(!(info_ptr = png_create_info_struct(png_ptr))){ png_destroy_write_struct(&png_ptr, NULL); return; } if(setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); return; } png_set_write_fn(png_ptr, (void *)png, gl2psUserWritePNG, gl2psUserFlushPNG); png_set_compression_level(png_ptr, Z_DEFAULT_COMPRESSION); png_set_IHDR(png_ptr, info_ptr, pixmap->width, pixmap->height, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info(png_ptr, info_ptr); row_data = (unsigned char*)gl2psMalloc(3 * pixmap->width * sizeof(unsigned char)); for(row = 0; row < pixmap->height; row++){ for(col = 0; col < pixmap->width; col++){ gl2psGetRGB(pixmap, col, row, &dr, &dg, &db); row_data[3*col] = (unsigned char)(255. * dr); row_data[3*col+1] = (unsigned char)(255. * dg); row_data[3*col+2] = (unsigned char)(255. * db); } png_write_row(png_ptr, (png_bytep)row_data); } gl2psFree(row_data); png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); } #endif /* Helper routines for text strings */ static GLint gl2psAddText(GLint type, const char *str, const char *fontname, GLshort fontsize, GLint alignment, GLfloat angle, GL2PSrgba color) { GLfloat pos[4]; GL2PSprimitive *prim; GLboolean valid; if(!gl2ps || !str || !fontname) return GL2PS_UNINITIALIZED; if(gl2ps->options & GL2PS_NO_TEXT) return GL2PS_SUCCESS; glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); if(GL_FALSE == valid) return GL2PS_SUCCESS; /* the primitive is culled */ glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = type; prim->boundary = 0; prim->numverts = 1; prim->verts = (GL2PSvertex*)gl2psMalloc(sizeof(GL2PSvertex)); prim->verts[0].xyz[0] = pos[0]; prim->verts[0].xyz[1] = pos[1]; prim->verts[0].xyz[2] = pos[2]; prim->culled = 0; prim->offset = 0; prim->pattern = 0; prim->factor = 0; prim->width = 1; if (color) memcpy(prim->verts[0].rgba, color, 4 * sizeof(float)); else glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); prim->data.text = (GL2PSstring*)gl2psMalloc(sizeof(GL2PSstring)); prim->data.text->str = (char*)gl2psMalloc((strlen(str)+1)*sizeof(char)); strcpy(prim->data.text->str, str); prim->data.text->fontname = (char*)gl2psMalloc((strlen(fontname)+1)*sizeof(char)); strcpy(prim->data.text->fontname, fontname); prim->data.text->fontsize = fontsize; prim->data.text->alignment = alignment; prim->data.text->angle = angle; gl2psListAdd(gl2ps->auxprimitives, &prim); glPassThrough(GL2PS_TEXT_TOKEN); return GL2PS_SUCCESS; } static GL2PSstring *gl2psCopyText(GL2PSstring *t) { GL2PSstring *text = (GL2PSstring*)gl2psMalloc(sizeof(GL2PSstring)); text->str = (char*)gl2psMalloc((strlen(t->str)+1)*sizeof(char)); strcpy(text->str, t->str); text->fontname = (char*)gl2psMalloc((strlen(t->fontname)+1)*sizeof(char)); strcpy(text->fontname, t->fontname); text->fontsize = t->fontsize; text->alignment = t->alignment; text->angle = t->angle; return text; } static void gl2psFreeText(GL2PSstring *text) { if(!text) return; gl2psFree(text->str); gl2psFree(text->fontname); gl2psFree(text); } /* Helpers for blending modes */ static GLboolean gl2psSupportedBlendMode(GLenum sfactor, GLenum dfactor) { /* returns TRUE if gl2ps supports the argument combination: only two blending modes have been implemented so far */ if( (sfactor == GL_SRC_ALPHA && dfactor == GL_ONE_MINUS_SRC_ALPHA) || (sfactor == GL_ONE && dfactor == GL_ZERO) ) return GL_TRUE; return GL_FALSE; } static void gl2psAdaptVertexForBlending(GL2PSvertex *v) { /* Transforms vertex depending on the actual blending function - currently the vertex v is considered as source vertex and his alpha value is changed to 1.0 if source blending GL_ONE is active. This might be extended in the future */ if(!v || !gl2ps) return; if(gl2ps->options & GL2PS_NO_BLENDING || !gl2ps->blending){ v->rgba[3] = 1.0F; return; } switch(gl2ps->blendfunc[0]){ case GL_ONE: v->rgba[3] = 1.0F; break; default: break; } } static void gl2psAssignTriangleProperties(GL2PStriangle *t) { /* int i; */ t->prop = T_VAR_COLOR; /* Uncommenting the following lines activates an even more fine grained distinction between triangle types - please don't delete, a remarkable amount of PDF handling code inside this file depends on it if activated */ /* t->prop = T_CONST_COLOR; for(i = 0; i < 3; ++i){ if(!GL2PS_ZERO(t->vertex[0].rgba[i] - t->vertex[1].rgba[i]) || !GL2PS_ZERO(t->vertex[1].rgba[i] - t->vertex[2].rgba[i])){ t->prop = T_VAR_COLOR; break; } } */ if(!GL2PS_ZERO(t->vertex[0].rgba[3] - t->vertex[1].rgba[3]) || !GL2PS_ZERO(t->vertex[1].rgba[3] - t->vertex[2].rgba[3])){ t->prop |= T_VAR_ALPHA; } else{ if(t->vertex[0].rgba[3] < 1) t->prop |= T_ALPHA_LESS_1; else t->prop |= T_ALPHA_1; } } static void gl2psFillTriangleFromPrimitive(GL2PStriangle *t, GL2PSprimitive *p, GLboolean assignprops) { t->vertex[0] = p->verts[0]; t->vertex[1] = p->verts[1]; t->vertex[2] = p->verts[2]; if(GL_TRUE == assignprops) gl2psAssignTriangleProperties(t); } static void gl2psInitTriangle(GL2PStriangle *t) { int i; GL2PSvertex vertex = { {-1.0F, -1.0F, -1.0F}, {-1.0F, -1.0F, -1.0F, -1.0F} }; for(i = 0; i < 3; i++) t->vertex[i] = vertex; t->prop = T_UNDEFINED; } /* Miscellaneous helper routines */ static GL2PSprimitive *gl2psCopyPrimitive(GL2PSprimitive *p) { GL2PSprimitive *prim; if(!p){ gl2psMsg(GL2PS_ERROR, "Trying to copy an empty primitive"); return NULL; } prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = p->type; prim->numverts = p->numverts; prim->boundary = p->boundary; prim->offset = p->offset; prim->pattern = p->pattern; prim->factor = p->factor; prim->culled = p->culled; prim->width = p->width; prim->verts = (GL2PSvertex*)gl2psMalloc(p->numverts*sizeof(GL2PSvertex)); memcpy(prim->verts, p->verts, p->numverts * sizeof(GL2PSvertex)); switch(prim->type){ case GL2PS_PIXMAP : prim->data.image = gl2psCopyPixmap(p->data.image); break; case GL2PS_TEXT : case GL2PS_SPECIAL : prim->data.text = gl2psCopyText(p->data.text); break; default: break; } return prim; } static GLboolean gl2psSamePosition(GL2PSxyz p1, GL2PSxyz p2) { if(!GL2PS_ZERO(p1[0] - p2[0]) || !GL2PS_ZERO(p1[1] - p2[1]) || !GL2PS_ZERO(p1[2] - p2[2])) return GL_FALSE; return GL_TRUE; } /********************************************************************* * * 3D sorting routines * *********************************************************************/ static GLfloat gl2psComparePointPlane(GL2PSxyz point, GL2PSplane plane) { return (plane[0] * point[0] + plane[1] * point[1] + plane[2] * point[2] + plane[3]); } static GLfloat gl2psPsca(GLfloat *a, GLfloat *b) { return (a[0]*b[0] + a[1]*b[1] + a[2]*b[2]); } static void gl2psPvec(GLfloat *a, GLfloat *b, GLfloat *c) { c[0] = a[1]*b[2] - a[2]*b[1]; c[1] = a[2]*b[0] - a[0]*b[2]; c[2] = a[0]*b[1] - a[1]*b[0]; } static GLfloat gl2psNorm(GLfloat *a) { return (GLfloat)sqrt(a[0]*a[0] + a[1]*a[1] + a[2]*a[2]); } static void gl2psGetNormal(GLfloat *a, GLfloat *b, GLfloat *c) { GLfloat norm; gl2psPvec(a, b, c); if(!GL2PS_ZERO(norm = gl2psNorm(c))){ c[0] = c[0] / norm; c[1] = c[1] / norm; c[2] = c[2] / norm; } else{ /* The plane is still wrong despite our tests in gl2psGetPlane. Let's return a dummy value for now (this is a hack: we should do more intelligent tests in GetPlane) */ c[0] = c[1] = 0.0F; c[2] = 1.0F; } } static void gl2psGetPlane(GL2PSprimitive *prim, GL2PSplane plane) { GL2PSxyz v = {0.0F, 0.0F, 0.0F}, w = {0.0F, 0.0F, 0.0F}; switch(prim->type){ case GL2PS_TRIANGLE : case GL2PS_QUADRANGLE : v[0] = prim->verts[1].xyz[0] - prim->verts[0].xyz[0]; v[1] = prim->verts[1].xyz[1] - prim->verts[0].xyz[1]; v[2] = prim->verts[1].xyz[2] - prim->verts[0].xyz[2]; w[0] = prim->verts[2].xyz[0] - prim->verts[0].xyz[0]; w[1] = prim->verts[2].xyz[1] - prim->verts[0].xyz[1]; w[2] = prim->verts[2].xyz[2] - prim->verts[0].xyz[2]; if((GL2PS_ZERO(v[0]) && GL2PS_ZERO(v[1]) && GL2PS_ZERO(v[2])) || (GL2PS_ZERO(w[0]) && GL2PS_ZERO(w[1]) && GL2PS_ZERO(w[2]))){ plane[0] = plane[1] = 0.0F; plane[2] = 1.0F; plane[3] = -prim->verts[0].xyz[2]; } else{ gl2psGetNormal(v, w, plane); plane[3] = - plane[0] * prim->verts[0].xyz[0] - plane[1] * prim->verts[0].xyz[1] - plane[2] * prim->verts[0].xyz[2]; } break; case GL2PS_LINE : v[0] = prim->verts[1].xyz[0] - prim->verts[0].xyz[0]; v[1] = prim->verts[1].xyz[1] - prim->verts[0].xyz[1]; v[2] = prim->verts[1].xyz[2] - prim->verts[0].xyz[2]; if(GL2PS_ZERO(v[0]) && GL2PS_ZERO(v[1]) && GL2PS_ZERO(v[2])){ plane[0] = plane[1] = 0.0F; plane[2] = 1.0F; plane[3] = -prim->verts[0].xyz[2]; } else{ if(GL2PS_ZERO(v[0])) w[0] = 1.0F; else if(GL2PS_ZERO(v[1])) w[1] = 1.0F; else w[2] = 1.0F; gl2psGetNormal(v, w, plane); plane[3] = - plane[0] * prim->verts[0].xyz[0] - plane[1] * prim->verts[0].xyz[1] - plane[2] * prim->verts[0].xyz[2]; } break; case GL2PS_POINT : case GL2PS_PIXMAP : case GL2PS_TEXT : case GL2PS_SPECIAL : case GL2PS_IMAGEMAP: plane[0] = plane[1] = 0.0F; plane[2] = 1.0F; plane[3] = -prim->verts[0].xyz[2]; break; default : gl2psMsg(GL2PS_ERROR, "Unknown primitive type in BSP tree"); plane[0] = plane[1] = plane[3] = 0.0F; plane[2] = 1.0F; break; } } static void gl2psCutEdge(GL2PSvertex *a, GL2PSvertex *b, GL2PSplane plane, GL2PSvertex *c) { GL2PSxyz v; GLfloat sect, psca; v[0] = b->xyz[0] - a->xyz[0]; v[1] = b->xyz[1] - a->xyz[1]; v[2] = b->xyz[2] - a->xyz[2]; if(!GL2PS_ZERO(psca = gl2psPsca(plane, v))) sect = -gl2psComparePointPlane(a->xyz, plane) / psca; else sect = 0.0F; c->xyz[0] = a->xyz[0] + v[0] * sect; c->xyz[1] = a->xyz[1] + v[1] * sect; c->xyz[2] = a->xyz[2] + v[2] * sect; c->rgba[0] = (1 - sect) * a->rgba[0] + sect * b->rgba[0]; c->rgba[1] = (1 - sect) * a->rgba[1] + sect * b->rgba[1]; c->rgba[2] = (1 - sect) * a->rgba[2] + sect * b->rgba[2]; c->rgba[3] = (1 - sect) * a->rgba[3] + sect * b->rgba[3]; } static void gl2psCreateSplitPrimitive(GL2PSprimitive *parent, GL2PSplane plane, GL2PSprimitive *child, GLshort numverts, GLshort *index0, GLshort *index1) { GLshort i; if(parent->type == GL2PS_IMAGEMAP){ child->type = GL2PS_IMAGEMAP; child->data.image = parent->data.image; } else{ if(numverts > 4){ gl2psMsg(GL2PS_WARNING, "%d vertices in polygon", numverts); numverts = 4; } switch(numverts){ case 1 : child->type = GL2PS_POINT; break; case 2 : child->type = GL2PS_LINE; break; case 3 : child->type = GL2PS_TRIANGLE; break; case 4 : child->type = GL2PS_QUADRANGLE; break; default: child->type = GL2PS_NO_TYPE; break; } } child->boundary = 0; /* FIXME: not done! */ child->culled = parent->culled; child->offset = parent->offset; child->pattern = parent->pattern; child->factor = parent->factor; child->width = parent->width; child->numverts = numverts; child->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); for(i = 0; i < numverts; i++){ if(index1[i] < 0){ child->verts[i] = parent->verts[index0[i]]; } else{ gl2psCutEdge(&parent->verts[index0[i]], &parent->verts[index1[i]], plane, &child->verts[i]); } } } static void gl2psAddIndex(GLshort *index0, GLshort *index1, GLshort *nb, GLshort i, GLshort j) { GLint k; for(k = 0; k < *nb; k++){ if((index0[k] == i && index1[k] == j) || (index1[k] == i && index0[k] == j)) return; } index0[*nb] = i; index1[*nb] = j; (*nb)++; } static GLshort gl2psGetIndex(GLshort i, GLshort num) { return (i < num - 1) ? i + 1 : 0; } static GLint gl2psTestSplitPrimitive(GL2PSprimitive *prim, GL2PSplane plane) { GLint type = GL2PS_COINCIDENT; GLshort i, j; GLfloat d[5]; for(i = 0; i < prim->numverts; i++){ d[i] = gl2psComparePointPlane(prim->verts[i].xyz, plane); } if(prim->numverts < 2){ return 0; } else{ for(i = 0; i < prim->numverts; i++){ j = gl2psGetIndex(i, prim->numverts); if(d[j] > GL2PS_EPSILON){ if(type == GL2PS_COINCIDENT) type = GL2PS_IN_BACK_OF; else if(type != GL2PS_IN_BACK_OF) return 1; if(d[i] < -GL2PS_EPSILON) return 1; } else if(d[j] < -GL2PS_EPSILON){ if(type == GL2PS_COINCIDENT) type = GL2PS_IN_FRONT_OF; else if(type != GL2PS_IN_FRONT_OF) return 1; if(d[i] > GL2PS_EPSILON) return 1; } } } return 0; } static GLint gl2psSplitPrimitive(GL2PSprimitive *prim, GL2PSplane plane, GL2PSprimitive **front, GL2PSprimitive **back) { GLshort i, j, in = 0, out = 0, in0[5], in1[5], out0[5], out1[5]; GLint type; GLfloat d[5]; type = GL2PS_COINCIDENT; for(i = 0; i < prim->numverts; i++){ d[i] = gl2psComparePointPlane(prim->verts[i].xyz, plane); } switch(prim->type){ case GL2PS_POINT : if(d[0] > GL2PS_EPSILON) type = GL2PS_IN_BACK_OF; else if(d[0] < -GL2PS_EPSILON) type = GL2PS_IN_FRONT_OF; else type = GL2PS_COINCIDENT; break; default : for(i = 0; i < prim->numverts; i++){ j = gl2psGetIndex(i, prim->numverts); if(d[j] > GL2PS_EPSILON){ if(type == GL2PS_COINCIDENT) type = GL2PS_IN_BACK_OF; else if(type != GL2PS_IN_BACK_OF) type = GL2PS_SPANNING; if(d[i] < -GL2PS_EPSILON){ gl2psAddIndex(in0, in1, &in, i, j); gl2psAddIndex(out0, out1, &out, i, j); type = GL2PS_SPANNING; } gl2psAddIndex(out0, out1, &out, j, -1); } else if(d[j] < -GL2PS_EPSILON){ if(type == GL2PS_COINCIDENT) type = GL2PS_IN_FRONT_OF; else if(type != GL2PS_IN_FRONT_OF) type = GL2PS_SPANNING; if(d[i] > GL2PS_EPSILON){ gl2psAddIndex(in0, in1, &in, i, j); gl2psAddIndex(out0, out1, &out, i, j); type = GL2PS_SPANNING; } gl2psAddIndex(in0, in1, &in, j, -1); } else{ gl2psAddIndex(in0, in1, &in, j, -1); gl2psAddIndex(out0, out1, &out, j, -1); } } break; } if(type == GL2PS_SPANNING){ *back = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); *front = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); gl2psCreateSplitPrimitive(prim, plane, *back, out, out0, out1); gl2psCreateSplitPrimitive(prim, plane, *front, in, in0, in1); } return type; } static void gl2psDivideQuad(GL2PSprimitive *quad, GL2PSprimitive **t1, GL2PSprimitive **t2) { *t1 = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); *t2 = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); (*t1)->type = (*t2)->type = GL2PS_TRIANGLE; (*t1)->numverts = (*t2)->numverts = 3; (*t1)->culled = (*t2)->culled = quad->culled; (*t1)->offset = (*t2)->offset = quad->offset; (*t1)->pattern = (*t2)->pattern = quad->pattern; (*t1)->factor = (*t2)->factor = quad->factor; (*t1)->width = (*t2)->width = quad->width; (*t1)->verts = (GL2PSvertex*)gl2psMalloc(3 * sizeof(GL2PSvertex)); (*t2)->verts = (GL2PSvertex*)gl2psMalloc(3 * sizeof(GL2PSvertex)); (*t1)->verts[0] = quad->verts[0]; (*t1)->verts[1] = quad->verts[1]; (*t1)->verts[2] = quad->verts[2]; (*t1)->boundary = ((quad->boundary & 1) ? 1 : 0) | ((quad->boundary & 2) ? 2 : 0); (*t2)->verts[0] = quad->verts[0]; (*t2)->verts[1] = quad->verts[2]; (*t2)->verts[2] = quad->verts[3]; (*t2)->boundary = ((quad->boundary & 4) ? 2 : 0) | ((quad->boundary & 8) ? 4 : 0); } static int gl2psCompareDepth(const void *a, const void *b) { const GL2PSprimitive *q, *w; GLfloat dq = 0.0F, dw = 0.0F, diff; int i; q = *(const GL2PSprimitive* const*)a; w = *(const GL2PSprimitive* const*)b; for(i = 0; i < q->numverts; i++){ dq += q->verts[i].xyz[2]; } dq /= (GLfloat)q->numverts; for(i = 0; i < w->numverts; i++){ dw += w->verts[i].xyz[2]; } dw /= (GLfloat)w->numverts; diff = dq - dw; if(diff > 0.){ return -1; } else if(diff < 0.){ return 1; } else{ return 0; } } static int gl2psTrianglesFirst(const void *a, const void *b) { const GL2PSprimitive *q, *w; q = *(const GL2PSprimitive* const*)a; w = *(const GL2PSprimitive* const*)b; return (q->type < w->type ? 1 : -1); } static GLint gl2psFindRoot(GL2PSlist *primitives, GL2PSprimitive **root) { GLint i, j, count, best = 1000000, idx = 0; GL2PSprimitive *prim1, *prim2; GL2PSplane plane; GLint maxp; if(!gl2psListNbr(primitives)){ gl2psMsg(GL2PS_ERROR, "Cannot fint root in empty primitive list"); return 0; } *root = *(GL2PSprimitive**)gl2psListPointer(primitives, 0); if(gl2ps->options & GL2PS_BEST_ROOT){ maxp = gl2psListNbr(primitives); if(maxp > gl2ps->maxbestroot){ maxp = gl2ps->maxbestroot; } for(i = 0; i < maxp; i++){ prim1 = *(GL2PSprimitive**)gl2psListPointer(primitives, i); gl2psGetPlane(prim1, plane); count = 0; for(j = 0; j < gl2psListNbr(primitives); j++){ if(j != i){ prim2 = *(GL2PSprimitive**)gl2psListPointer(primitives, j); count += gl2psTestSplitPrimitive(prim2, plane); } if(count > best) break; } if(count < best){ best = count; idx = i; *root = prim1; if(!count) return idx; } } /* if(index) gl2psMsg(GL2PS_INFO, "GL2PS_BEST_ROOT was worth it: %d", index); */ return idx; } else{ return 0; } } static void gl2psFreeImagemap(GL2PSimagemap *list) { GL2PSimagemap *next; while(list != NULL){ next = list->next; gl2psFree(list->image->pixels); gl2psFree(list->image); gl2psFree(list); list = next; } } static void gl2psFreePrimitive(void *data) { GL2PSprimitive *q; q = *(GL2PSprimitive**)data; gl2psFree(q->verts); if(q->type == GL2PS_TEXT || q->type == GL2PS_SPECIAL){ gl2psFreeText(q->data.text); } else if(q->type == GL2PS_PIXMAP){ gl2psFreePixmap(q->data.image); } gl2psFree(q); } static void gl2psAddPrimitiveInList(GL2PSprimitive *prim, GL2PSlist *list) { GL2PSprimitive *t1, *t2; if(prim->type != GL2PS_QUADRANGLE){ gl2psListAdd(list, &prim); } else{ gl2psDivideQuad(prim, &t1, &t2); gl2psListAdd(list, &t1); gl2psListAdd(list, &t2); gl2psFreePrimitive(&prim); } } static void gl2psFreeBspTree(GL2PSbsptree **tree) { if(*tree){ if((*tree)->back) gl2psFreeBspTree(&(*tree)->back); if((*tree)->primitives){ gl2psListAction((*tree)->primitives, gl2psFreePrimitive); gl2psListDelete((*tree)->primitives); } if((*tree)->front) gl2psFreeBspTree(&(*tree)->front); gl2psFree(*tree); *tree = NULL; } } static GLboolean gl2psGreater(GLfloat f1, GLfloat f2) { if(f1 > f2) return GL_TRUE; else return GL_FALSE; } static GLboolean gl2psLess(GLfloat f1, GLfloat f2) { if(f1 < f2) return GL_TRUE; else return GL_FALSE; } static void gl2psBuildBspTree(GL2PSbsptree *tree, GL2PSlist *primitives) { GL2PSprimitive *prim, *frontprim = NULL, *backprim = NULL; GL2PSlist *frontlist, *backlist; GLint i, idx; tree->front = NULL; tree->back = NULL; tree->primitives = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); idx = gl2psFindRoot(primitives, &prim); gl2psGetPlane(prim, tree->plane); gl2psAddPrimitiveInList(prim, tree->primitives); frontlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); backlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); for(i = 0; i < gl2psListNbr(primitives); i++){ if(i != idx){ prim = *(GL2PSprimitive**)gl2psListPointer(primitives,i); switch(gl2psSplitPrimitive(prim, tree->plane, &frontprim, &backprim)){ case GL2PS_COINCIDENT: gl2psAddPrimitiveInList(prim, tree->primitives); break; case GL2PS_IN_BACK_OF: gl2psAddPrimitiveInList(prim, backlist); break; case GL2PS_IN_FRONT_OF: gl2psAddPrimitiveInList(prim, frontlist); break; case GL2PS_SPANNING: gl2psAddPrimitiveInList(backprim, backlist); gl2psAddPrimitiveInList(frontprim, frontlist); gl2psFreePrimitive(&prim); break; } } } if(gl2psListNbr(tree->primitives)){ gl2psListSort(tree->primitives, gl2psTrianglesFirst); } if(gl2psListNbr(frontlist)){ gl2psListSort(frontlist, gl2psTrianglesFirst); tree->front = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); gl2psBuildBspTree(tree->front, frontlist); } else{ gl2psListDelete(frontlist); } if(gl2psListNbr(backlist)){ gl2psListSort(backlist, gl2psTrianglesFirst); tree->back = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); gl2psBuildBspTree(tree->back, backlist); } else{ gl2psListDelete(backlist); } gl2psListDelete(primitives); } static void gl2psTraverseBspTree(GL2PSbsptree *tree, GL2PSxyz eye, GLfloat epsilon, GLboolean (*compare)(GLfloat f1, GLfloat f2), void (*action)(void *data), int inverse) { GLfloat result; if(!tree) return; result = gl2psComparePointPlane(eye, tree->plane); if(GL_TRUE == compare(result, epsilon)){ gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action, inverse); if(inverse){ gl2psListActionInverse(tree->primitives, action); } else{ gl2psListAction(tree->primitives, action); } gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action, inverse); } else if(GL_TRUE == compare(-epsilon, result)){ gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action, inverse); if(inverse){ gl2psListActionInverse(tree->primitives, action); } else{ gl2psListAction(tree->primitives, action); } gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action, inverse); } else{ gl2psTraverseBspTree(tree->front, eye, epsilon, compare, action, inverse); gl2psTraverseBspTree(tree->back, eye, epsilon, compare, action, inverse); } } static void gl2psRescaleAndOffset(void) { GL2PSprimitive *prim; GLfloat minZ, maxZ, rangeZ, scaleZ; GLfloat factor, units, area, dZ, dZdX, dZdY, maxdZ; int i, j; if(!gl2psListNbr(gl2ps->primitives)) return; /* get z-buffer range */ prim = *(GL2PSprimitive**)gl2psListPointer(gl2ps->primitives, 0); minZ = maxZ = prim->verts[0].xyz[2]; for(i = 1; i < prim->numverts; i++){ if(prim->verts[i].xyz[2] < minZ) minZ = prim->verts[i].xyz[2]; if(prim->verts[i].xyz[2] > maxZ) maxZ = prim->verts[i].xyz[2]; } for(i = 1; i < gl2psListNbr(gl2ps->primitives); i++){ prim = *(GL2PSprimitive**)gl2psListPointer(gl2ps->primitives, i); for(j = 0; j < prim->numverts; j++){ if(prim->verts[j].xyz[2] < minZ) minZ = prim->verts[j].xyz[2]; if(prim->verts[j].xyz[2] > maxZ) maxZ = prim->verts[j].xyz[2]; } } rangeZ = (maxZ - minZ); /* rescale z-buffer coordinate in [0,GL2PS_ZSCALE], to make it of the same order of magnitude as the x and y coordinates */ scaleZ = GL2PS_ZERO(rangeZ) ? GL2PS_ZSCALE : (GL2PS_ZSCALE / rangeZ); /* avoid precision loss (we use floats!) */ if(scaleZ > 100000.F) scaleZ = 100000.F; /* apply offsets */ for(i = 0; i < gl2psListNbr(gl2ps->primitives); i++){ prim = *(GL2PSprimitive**)gl2psListPointer(gl2ps->primitives, i); for(j = 0; j < prim->numverts; j++){ prim->verts[j].xyz[2] = (prim->verts[j].xyz[2] - minZ) * scaleZ; } if((gl2ps->options & GL2PS_SIMPLE_LINE_OFFSET) && (prim->type == GL2PS_LINE)){ if(gl2ps->sort == GL2PS_SIMPLE_SORT){ prim->verts[0].xyz[2] -= GL2PS_ZOFFSET_LARGE; prim->verts[1].xyz[2] -= GL2PS_ZOFFSET_LARGE; } else{ prim->verts[0].xyz[2] -= GL2PS_ZOFFSET; prim->verts[1].xyz[2] -= GL2PS_ZOFFSET; } } else if(prim->offset && (prim->type == GL2PS_TRIANGLE)){ factor = gl2ps->offset[0]; units = gl2ps->offset[1]; area = (prim->verts[1].xyz[0] - prim->verts[0].xyz[0]) * (prim->verts[2].xyz[1] - prim->verts[1].xyz[1]) - (prim->verts[2].xyz[0] - prim->verts[1].xyz[0]) * (prim->verts[1].xyz[1] - prim->verts[0].xyz[1]); if(!GL2PS_ZERO(area)){ dZdX = ((prim->verts[2].xyz[1] - prim->verts[1].xyz[1]) * (prim->verts[1].xyz[2] - prim->verts[0].xyz[2]) - (prim->verts[1].xyz[1] - prim->verts[0].xyz[1]) * (prim->verts[2].xyz[2] - prim->verts[1].xyz[2])) / area; dZdY = ((prim->verts[1].xyz[0] - prim->verts[0].xyz[0]) * (prim->verts[2].xyz[2] - prim->verts[1].xyz[2]) - (prim->verts[2].xyz[0] - prim->verts[1].xyz[0]) * (prim->verts[1].xyz[2] - prim->verts[0].xyz[2])) / area; maxdZ = (GLfloat)sqrt(dZdX * dZdX + dZdY * dZdY); } else{ maxdZ = 0.0F; } dZ = factor * maxdZ + units; prim->verts[0].xyz[2] += dZ; prim->verts[1].xyz[2] += dZ; prim->verts[2].xyz[2] += dZ; } } } /********************************************************************* * * 2D sorting routines (for occlusion culling) * *********************************************************************/ static GLint gl2psGetPlaneFromPoints(GL2PSxyz a, GL2PSxyz b, GL2PSplane plane) { GLfloat n; plane[0] = b[1] - a[1]; plane[1] = a[0] - b[0]; n = (GLfloat)sqrt(plane[0]*plane[0] + plane[1]*plane[1]); plane[2] = 0.0F; if(!GL2PS_ZERO(n)){ plane[0] /= n; plane[1] /= n; plane[3] = -plane[0]*a[0]-plane[1]*a[1]; return 1; } else{ plane[0] = -1.0F; plane[1] = 0.0F; plane[3] = a[0]; return 0; } } static void gl2psFreeBspImageTree(GL2PSbsptree2d **tree) { if(*tree){ if((*tree)->back) gl2psFreeBspImageTree(&(*tree)->back); if((*tree)->front) gl2psFreeBspImageTree(&(*tree)->front); gl2psFree(*tree); *tree = NULL; } } static GLint gl2psCheckPoint(GL2PSxyz point, GL2PSplane plane) { GLfloat pt_dis; pt_dis = gl2psComparePointPlane(point, plane); if(pt_dis > GL2PS_EPSILON) return GL2PS_POINT_INFRONT; else if(pt_dis < -GL2PS_EPSILON) return GL2PS_POINT_BACK; else return GL2PS_POINT_COINCIDENT; } static void gl2psAddPlanesInBspTreeImage(GL2PSprimitive *prim, GL2PSbsptree2d **tree) { GLint ret = 0; GLint i; GLint offset = 0; GL2PSbsptree2d *head = NULL, *cur = NULL; if((*tree == NULL) && (prim->numverts > 2)){ /* don't cull if transparent for(i = 0; i < prim->numverts - 1; i++) if(prim->verts[i].rgba[3] < 1.0F) return; */ head = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); for(i = 0; i < prim->numverts-1; i++){ if(!gl2psGetPlaneFromPoints(prim->verts[i].xyz, prim->verts[i+1].xyz, head->plane)){ if(prim->numverts-i > 3){ offset++; } else{ gl2psFree(head); return; } } else{ break; } } head->back = NULL; head->front = NULL; for(i = 2+offset; i < prim->numverts; i++){ ret = gl2psCheckPoint(prim->verts[i].xyz, head->plane); if(ret != GL2PS_POINT_COINCIDENT) break; } switch(ret){ case GL2PS_POINT_INFRONT : cur = head; for(i = 1+offset; i < prim->numverts-1; i++){ if(cur->front == NULL){ cur->front = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); } if(gl2psGetPlaneFromPoints(prim->verts[i].xyz, prim->verts[i+1].xyz, cur->front->plane)){ cur = cur->front; cur->front = NULL; cur->back = NULL; } } if(cur->front == NULL){ cur->front = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); } if(gl2psGetPlaneFromPoints(prim->verts[i].xyz, prim->verts[offset].xyz, cur->front->plane)){ cur->front->front = NULL; cur->front->back = NULL; } else{ gl2psFree(cur->front); cur->front = NULL; } break; case GL2PS_POINT_BACK : for(i = 0; i < 4; i++){ head->plane[i] = -head->plane[i]; } cur = head; for(i = 1+offset; i < prim->numverts-1; i++){ if(cur->front == NULL){ cur->front = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); } if(gl2psGetPlaneFromPoints(prim->verts[i+1].xyz, prim->verts[i].xyz, cur->front->plane)){ cur = cur->front; cur->front = NULL; cur->back = NULL; } } if(cur->front == NULL){ cur->front = (GL2PSbsptree2d*)gl2psMalloc(sizeof(GL2PSbsptree2d)); } if(gl2psGetPlaneFromPoints(prim->verts[offset].xyz, prim->verts[i].xyz, cur->front->plane)){ cur->front->front = NULL; cur->front->back = NULL; } else{ gl2psFree(cur->front); cur->front = NULL; } break; default: gl2psFree(head); return; } (*tree) = head; } } static GLint gl2psCheckPrimitive(GL2PSprimitive *prim, GL2PSplane plane) { GLint i; GLint pos; pos = gl2psCheckPoint(prim->verts[0].xyz, plane); for(i = 1; i < prim->numverts; i++){ pos |= gl2psCheckPoint(prim->verts[i].xyz, plane); if(pos == (GL2PS_POINT_INFRONT | GL2PS_POINT_BACK)) return GL2PS_SPANNING; } if(pos & GL2PS_POINT_INFRONT) return GL2PS_IN_FRONT_OF; else if(pos & GL2PS_POINT_BACK) return GL2PS_IN_BACK_OF; else return GL2PS_COINCIDENT; } static GL2PSprimitive *gl2psCreateSplitPrimitive2D(GL2PSprimitive *parent, GLshort numverts, GL2PSvertex *vertx) { GLint i; GL2PSprimitive *child = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); if(parent->type == GL2PS_IMAGEMAP){ child->type = GL2PS_IMAGEMAP; child->data.image = parent->data.image; } else { switch(numverts){ case 1 : child->type = GL2PS_POINT; break; case 2 : child->type = GL2PS_LINE; break; case 3 : child->type = GL2PS_TRIANGLE; break; case 4 : child->type = GL2PS_QUADRANGLE; break; default: child->type = GL2PS_NO_TYPE; break; /* FIXME */ } } child->boundary = 0; /* FIXME: not done! */ child->culled = parent->culled; child->offset = parent->offset; child->pattern = parent->pattern; child->factor = parent->factor; child->width = parent->width; child->numverts = numverts; child->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); for(i = 0; i < numverts; i++){ child->verts[i] = vertx[i]; } return child; } static void gl2psSplitPrimitive2D(GL2PSprimitive *prim, GL2PSplane plane, GL2PSprimitive **front, GL2PSprimitive **back) { /* cur will hold the position of the current vertex prev will hold the position of the previous vertex prev0 will hold the position of the vertex number 0 v1 and v2 represent the current and previous vertices, respectively flag is set if the current vertex should be checked against the plane */ GLint cur = -1, prev = -1, i, v1 = 0, v2 = 0, flag = 1, prev0 = -1; /* list of vertices that will go in front and back primitive */ GL2PSvertex *front_list = NULL, *back_list = NULL; /* number of vertices in front and back list */ GLshort front_count = 0, back_count = 0; for(i = 0; i <= prim->numverts; i++){ v1 = i; if(v1 == prim->numverts){ if(prim->numverts < 3) break; v1 = 0; v2 = prim->numverts - 1; cur = prev0; } else if(flag){ cur = gl2psCheckPoint(prim->verts[v1].xyz, plane); if(i == 0){ prev0 = cur; } } if(((prev == -1) || (prev == cur) || (prev == 0) || (cur == 0)) && (i < prim->numverts)){ if(cur == GL2PS_POINT_INFRONT){ front_count++; front_list = (GL2PSvertex*)gl2psRealloc(front_list, sizeof(GL2PSvertex)*front_count); front_list[front_count-1] = prim->verts[v1]; } else if(cur == GL2PS_POINT_BACK){ back_count++; back_list = (GL2PSvertex*)gl2psRealloc(back_list, sizeof(GL2PSvertex)*back_count); back_list[back_count-1] = prim->verts[v1]; } else{ front_count++; front_list = (GL2PSvertex*)gl2psRealloc(front_list, sizeof(GL2PSvertex)*front_count); front_list[front_count-1] = prim->verts[v1]; back_count++; back_list = (GL2PSvertex*)gl2psRealloc(back_list, sizeof(GL2PSvertex)*back_count); back_list[back_count-1] = prim->verts[v1]; } flag = 1; } else if((prev != cur) && (cur != 0) && (prev != 0)){ if(v1 != 0){ v2 = v1-1; i--; } front_count++; front_list = (GL2PSvertex*)gl2psRealloc(front_list, sizeof(GL2PSvertex)*front_count); gl2psCutEdge(&prim->verts[v2], &prim->verts[v1], plane, &front_list[front_count-1]); back_count++; back_list = (GL2PSvertex*)gl2psRealloc(back_list, sizeof(GL2PSvertex)*back_count); back_list[back_count-1] = front_list[front_count-1]; flag = 0; } prev = cur; } *front = gl2psCreateSplitPrimitive2D(prim, front_count, front_list); *back = gl2psCreateSplitPrimitive2D(prim, back_count, back_list); gl2psFree(front_list); gl2psFree(back_list); } static GLint gl2psAddInBspImageTree(GL2PSprimitive *prim, GL2PSbsptree2d **tree) { GLint ret = 0; GL2PSprimitive *frontprim = NULL, *backprim = NULL; /* FIXME: until we consider the actual extent of text strings and pixmaps, never cull them. Otherwise the whole string/pixmap gets culled as soon as the reference point is hidden */ if(prim->type == GL2PS_PIXMAP || prim->type == GL2PS_TEXT || prim->type == GL2PS_SPECIAL){ return 1; } if(*tree == NULL){ if((prim->type != GL2PS_IMAGEMAP) && (GL_FALSE == gl2ps->zerosurfacearea)){ gl2psAddPlanesInBspTreeImage(gl2ps->primitivetoadd, tree); } return 1; } else{ switch(gl2psCheckPrimitive(prim, (*tree)->plane)){ case GL2PS_IN_BACK_OF: return gl2psAddInBspImageTree(prim, &(*tree)->back); case GL2PS_IN_FRONT_OF: if((*tree)->front != NULL) return gl2psAddInBspImageTree(prim, &(*tree)->front); else return 0; case GL2PS_SPANNING: gl2psSplitPrimitive2D(prim, (*tree)->plane, &frontprim, &backprim); ret = gl2psAddInBspImageTree(backprim, &(*tree)->back); if((*tree)->front != NULL){ if(gl2psAddInBspImageTree(frontprim, &(*tree)->front)){ ret = 1; } } gl2psFree(frontprim->verts); gl2psFree(frontprim); gl2psFree(backprim->verts); gl2psFree(backprim); return ret; case GL2PS_COINCIDENT: if((*tree)->back != NULL){ gl2ps->zerosurfacearea = GL_TRUE; ret = gl2psAddInBspImageTree(prim, &(*tree)->back); gl2ps->zerosurfacearea = GL_FALSE; if(ret) return ret; } if((*tree)->front != NULL){ gl2ps->zerosurfacearea = GL_TRUE; ret = gl2psAddInBspImageTree(prim, &(*tree)->front); gl2ps->zerosurfacearea = GL_FALSE; if(ret) return ret; } if(prim->type == GL2PS_LINE) return 1; else return 0; } } return 0; } static void gl2psAddInImageTree(void *data) { GL2PSprimitive *prim = *(GL2PSprimitive **)data; gl2ps->primitivetoadd = prim; if(prim->type == GL2PS_IMAGEMAP && prim->data.image->format == GL2PS_IMAGEMAP_VISIBLE){ prim->culled = 1; } else if(!gl2psAddInBspImageTree(prim, &gl2ps->imagetree)){ prim->culled = 1; } else if(prim->type == GL2PS_IMAGEMAP){ prim->data.image->format = GL2PS_IMAGEMAP_VISIBLE; } } /* Boundary construction */ static void gl2psAddBoundaryInList(GL2PSprimitive *prim, GL2PSlist *list) { GL2PSprimitive *b; GLshort i; GL2PSxyz c; c[0] = c[1] = c[2] = 0.0F; for(i = 0; i < prim->numverts; i++){ c[0] += prim->verts[i].xyz[0]; c[1] += prim->verts[i].xyz[1]; } c[0] /= prim->numverts; c[1] /= prim->numverts; for(i = 0; i < prim->numverts; i++){ if(prim->boundary & (GLint)pow(2., i)){ b = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); b->type = GL2PS_LINE; b->offset = prim->offset; b->pattern = prim->pattern; b->factor = prim->factor; b->culled = prim->culled; b->width = prim->width; b->boundary = 0; b->numverts = 2; b->verts = (GL2PSvertex*)gl2psMalloc(2 * sizeof(GL2PSvertex)); #if 0 /* FIXME: need to work on boundary offset... */ v[0] = c[0] - prim->verts[i].xyz[0]; v[1] = c[1] - prim->verts[i].xyz[1]; v[2] = 0.0F; norm = gl2psNorm(v); v[0] /= norm; v[1] /= norm; b->verts[0].xyz[0] = prim->verts[i].xyz[0] +0.1*v[0]; b->verts[0].xyz[1] = prim->verts[i].xyz[1] +0.1*v[1]; b->verts[0].xyz[2] = prim->verts[i].xyz[2]; v[0] = c[0] - prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0]; v[1] = c[1] - prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1]; norm = gl2psNorm(v); v[0] /= norm; v[1] /= norm; b->verts[1].xyz[0] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0] +0.1*v[0]; b->verts[1].xyz[1] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1] +0.1*v[1]; b->verts[1].xyz[2] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[2]; #else b->verts[0].xyz[0] = prim->verts[i].xyz[0]; b->verts[0].xyz[1] = prim->verts[i].xyz[1]; b->verts[0].xyz[2] = prim->verts[i].xyz[2]; b->verts[1].xyz[0] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[0]; b->verts[1].xyz[1] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[1]; b->verts[1].xyz[2] = prim->verts[gl2psGetIndex(i, prim->numverts)].xyz[2]; #endif b->verts[0].rgba[0] = 0.0F; b->verts[0].rgba[1] = 0.0F; b->verts[0].rgba[2] = 0.0F; b->verts[0].rgba[3] = 0.0F; b->verts[1].rgba[0] = 0.0F; b->verts[1].rgba[1] = 0.0F; b->verts[1].rgba[2] = 0.0F; b->verts[1].rgba[3] = 0.0F; gl2psListAdd(list, &b); } } } static void gl2psBuildPolygonBoundary(GL2PSbsptree *tree) { GLint i; GL2PSprimitive *prim; if(!tree) return; gl2psBuildPolygonBoundary(tree->back); for(i = 0; i < gl2psListNbr(tree->primitives); i++){ prim = *(GL2PSprimitive**)gl2psListPointer(tree->primitives, i); if(prim->boundary) gl2psAddBoundaryInList(prim, tree->primitives); } gl2psBuildPolygonBoundary(tree->front); } /********************************************************************* * * Feedback buffer parser * *********************************************************************/ static void gl2psAddPolyPrimitive(GLshort type, GLshort numverts, GL2PSvertex *verts, GLint offset, GLushort pattern, GLint factor, GLfloat width, char boundary) { GL2PSprimitive *prim; prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = type; prim->numverts = numverts; prim->verts = (GL2PSvertex*)gl2psMalloc(numverts * sizeof(GL2PSvertex)); memcpy(prim->verts, verts, numverts * sizeof(GL2PSvertex)); prim->boundary = boundary; prim->offset = offset; prim->pattern = pattern; prim->factor = factor; prim->width = width; prim->culled = 0; /* FIXME: here we should have an option to split stretched tris/quads to enhance SIMPLE_SORT */ gl2psListAdd(gl2ps->primitives, &prim); } static GLint gl2psGetVertex(GL2PSvertex *v, GLfloat *p) { GLint i; v->xyz[0] = p[0]; v->xyz[1] = p[1]; v->xyz[2] = p[2]; if(gl2ps->colormode == GL_COLOR_INDEX && gl2ps->colorsize > 0){ i = (GLint)(p[3] + 0.5); v->rgba[0] = gl2ps->colormap[i][0]; v->rgba[1] = gl2ps->colormap[i][1]; v->rgba[2] = gl2ps->colormap[i][2]; v->rgba[3] = gl2ps->colormap[i][3]; return 4; } else{ v->rgba[0] = p[3]; v->rgba[1] = p[4]; v->rgba[2] = p[5]; v->rgba[3] = p[6]; return 7; } } static void gl2psParseFeedbackBuffer(GLint used) { char flag; GLushort pattern = 0; GLboolean boundary; GLint i, sizeoffloat, count, v, vtot, offset = 0, factor = 0, auxindex = 0; GLfloat lwidth = 1.0F, psize = 1.0F; GLfloat *current; GL2PSvertex vertices[3]; GL2PSprimitive *prim; GL2PSimagemap *node; current = gl2ps->feedback; boundary = gl2ps->boundary = GL_FALSE; while(used > 0){ if(GL_TRUE == boundary) gl2ps->boundary = GL_TRUE; switch((GLint)*current){ case GL_POINT_TOKEN : current ++; used --; i = gl2psGetVertex(&vertices[0], current); current += i; used -= i; gl2psAddPolyPrimitive(GL2PS_POINT, 1, vertices, 0, pattern, factor, psize, 0); break; case GL_LINE_TOKEN : case GL_LINE_RESET_TOKEN : current ++; used --; i = gl2psGetVertex(&vertices[0], current); current += i; used -= i; i = gl2psGetVertex(&vertices[1], current); current += i; used -= i; gl2psAddPolyPrimitive(GL2PS_LINE, 2, vertices, 0, pattern, factor, lwidth, 0); break; case GL_POLYGON_TOKEN : count = (GLint)current[1]; current += 2; used -= 2; v = vtot = 0; while(count > 0 && used > 0){ i = gl2psGetVertex(&vertices[v], current); gl2psAdaptVertexForBlending(&vertices[v]); current += i; used -= i; count --; vtot++; if(v == 2){ if(GL_TRUE == boundary){ if(!count && vtot == 2) flag = 1|2|4; else if(!count) flag = 2|4; else if(vtot == 2) flag = 1|2; else flag = 2; } else flag = 0; gl2psAddPolyPrimitive(GL2PS_TRIANGLE, 3, vertices, offset, pattern, factor, 1, flag); vertices[1] = vertices[2]; } else v ++; } break; case GL_BITMAP_TOKEN : case GL_DRAW_PIXEL_TOKEN : case GL_COPY_PIXEL_TOKEN : current ++; used --; i = gl2psGetVertex(&vertices[0], current); current += i; used -= i; break; case GL_PASS_THROUGH_TOKEN : switch((GLint)current[1]){ case GL2PS_BEGIN_OFFSET_TOKEN : offset = 1; break; case GL2PS_END_OFFSET_TOKEN : offset = 0; break; case GL2PS_BEGIN_BOUNDARY_TOKEN : boundary = GL_TRUE; break; case GL2PS_END_BOUNDARY_TOKEN : boundary = GL_FALSE; break; case GL2PS_END_STIPPLE_TOKEN : pattern = factor = 0; break; case GL2PS_BEGIN_BLEND_TOKEN : gl2ps->blending = GL_TRUE; break; case GL2PS_END_BLEND_TOKEN : gl2ps->blending = GL_FALSE; break; case GL2PS_BEGIN_STIPPLE_TOKEN : current += 2; used -= 2; pattern = (GLushort)current[1]; current += 2; used -= 2; factor = (GLint)current[1]; break; case GL2PS_SRC_BLEND_TOKEN : current += 2; used -= 2; gl2ps->blendfunc[0] = (GLint)current[1]; break; case GL2PS_DST_BLEND_TOKEN : current += 2; used -= 2; gl2ps->blendfunc[1] = (GLint)current[1]; break; case GL2PS_POINT_SIZE_TOKEN : current += 2; used -= 2; psize = current[1]; break; case GL2PS_LINE_WIDTH_TOKEN : current += 2; used -= 2; lwidth = current[1]; break; case GL2PS_IMAGEMAP_TOKEN : prim = (GL2PSprimitive *)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = GL2PS_IMAGEMAP; prim->boundary = 0; prim->numverts = 4; prim->verts = (GL2PSvertex *)gl2psMalloc(4 * sizeof(GL2PSvertex)); prim->culled = 0; prim->offset = 0; prim->pattern = 0; prim->factor = 0; prim->width = 1; node = (GL2PSimagemap*)gl2psMalloc(sizeof(GL2PSimagemap)); node->image = (GL2PSimage*)gl2psMalloc(sizeof(GL2PSimage)); node->image->type = 0; node->image->format = 0; node->image->zoom_x = 1.0F; node->image->zoom_y = 1.0F; node->next = NULL; if(gl2ps->imagemap_head == NULL) gl2ps->imagemap_head = node; else gl2ps->imagemap_tail->next = node; gl2ps->imagemap_tail = node; prim->data.image = node->image; current += 2; used -= 2; i = gl2psGetVertex(&prim->verts[0], ¤t[1]); current += i; used -= i; node->image->width = (GLint)current[2]; current += 2; used -= 2; node->image->height = (GLint)current[2]; prim->verts[0].xyz[0] = prim->verts[0].xyz[0] - (int)(node->image->width / 2) + 0.5F; prim->verts[0].xyz[1] = prim->verts[0].xyz[1] - (int)(node->image->height / 2) + 0.5F; for(i = 1; i < 4; i++){ for(v = 0; v < 3; v++){ prim->verts[i].xyz[v] = prim->verts[0].xyz[v]; prim->verts[i].rgba[v] = prim->verts[0].rgba[v]; } prim->verts[i].rgba[v] = prim->verts[0].rgba[v]; } prim->verts[1].xyz[0] = prim->verts[1].xyz[0] + node->image->width; prim->verts[2].xyz[0] = prim->verts[1].xyz[0]; prim->verts[2].xyz[1] = prim->verts[2].xyz[1] + node->image->height; prim->verts[3].xyz[1] = prim->verts[2].xyz[1]; sizeoffloat = sizeof(GLfloat); v = 2 * sizeoffloat; vtot = node->image->height + node->image->height * ((node->image->width - 1) / 8); node->image->pixels = (GLfloat*)gl2psMalloc(v + vtot); node->image->pixels[0] = prim->verts[0].xyz[0]; node->image->pixels[1] = prim->verts[0].xyz[1]; for(i = 0; i < vtot; i += sizeoffloat){ current += 2; used -= 2; if((vtot - i) >= 4) memcpy(&(((char*)(node->image->pixels))[i + v]), &(current[2]), sizeoffloat); else memcpy(&(((char*)(node->image->pixels))[i + v]), &(current[2]), vtot - i); } current++; used--; gl2psListAdd(gl2ps->primitives, &prim); break; case GL2PS_DRAW_PIXELS_TOKEN : case GL2PS_TEXT_TOKEN : if(auxindex < gl2psListNbr(gl2ps->auxprimitives)) gl2psListAdd(gl2ps->primitives, gl2psListPointer(gl2ps->auxprimitives, auxindex++)); else gl2psMsg(GL2PS_ERROR, "Wrong number of auxiliary tokens in buffer"); break; } current += 2; used -= 2; break; default : gl2psMsg(GL2PS_WARNING, "Unknown token in buffer"); current ++; used --; break; } } gl2psListReset(gl2ps->auxprimitives); } /********************************************************************* * * PostScript routines * *********************************************************************/ static void gl2psWriteByte(unsigned char byte) { unsigned char h = byte / 16; unsigned char l = byte % 16; gl2psPrintf("%x%x", h, l); } static void gl2psPrintPostScriptPixmap(GLfloat x, GLfloat y, GL2PSimage *im) { GLuint nbhex, nbyte, nrgb, nbits; GLuint row, col, ibyte, icase; GLfloat dr, dg, db, fgrey; unsigned char red = 0, green = 0, blue = 0, b, grey; GLuint width = (GLuint)im->width; GLuint height = (GLuint)im->height; /* FIXME: should we define an option for these? Or just keep the 8-bit per component case? */ int greyscale = 0; /* set to 1 to output greyscale image */ int nbit = 8; /* number of bits per color compoment (2, 4 or 8) */ if((width <= 0) || (height <= 0)) return; gl2psPrintf("gsave\n"); gl2psPrintf("%.2f %.2f translate\n", x, y); gl2psPrintf("%.2f %.2f scale\n", width * im->zoom_x, height * im->zoom_y); if(greyscale){ /* greyscale */ gl2psPrintf("/picstr %d string def\n", width); gl2psPrintf("%d %d %d\n", width, height, 8); gl2psPrintf("[ %d 0 0 -%d 0 %d ]\n", width, height, height); gl2psPrintf("{ currentfile picstr readhexstring pop }\n"); gl2psPrintf("image\n"); for(row = 0; row < height; row++){ for(col = 0; col < width; col++){ gl2psGetRGB(im, col, row, &dr, &dg, &db); fgrey = (0.30F * dr + 0.59F * dg + 0.11F * db); grey = (unsigned char)(255. * fgrey); gl2psWriteByte(grey); } gl2psPrintf("\n"); } nbhex = width * height * 2; gl2psPrintf("%%%% nbhex digit :%d\n", nbhex); } else if(nbit == 2){ /* color, 2 bits for r and g and b; rgbs following each other */ nrgb = width * 3; nbits = nrgb * nbit; nbyte = nbits / 8; if((nbyte * 8) != nbits) nbyte++; gl2psPrintf("/rgbstr %d string def\n", nbyte); gl2psPrintf("%d %d %d\n", width, height, nbit); gl2psPrintf("[ %d 0 0 -%d 0 %d ]\n", width, height, height); gl2psPrintf("{ currentfile rgbstr readhexstring pop }\n"); gl2psPrintf("false 3\n"); gl2psPrintf("colorimage\n"); for(row = 0; row < height; row++){ icase = 1; col = 0; b = 0; for(ibyte = 0; ibyte < nbyte; ibyte++){ if(icase == 1) { if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(3. * dr); green = (unsigned char)(3. * dg); blue = (unsigned char)(3. * db); b = red; b = (b<<2) + green; b = (b<<2) + blue; if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(3. * dr); green = (unsigned char)(3. * dg); blue = (unsigned char)(3. * db); b = (b<<2) + red; gl2psWriteByte(b); b = 0; icase++; } else if(icase == 2) { b = green; b = (b<<2) + blue; if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(3. * dr); green = (unsigned char)(3. * dg); blue = (unsigned char)(3. * db); b = (b<<2) + red; b = (b<<2) + green; gl2psWriteByte(b); b = 0; icase++; } else if(icase == 3) { b = blue; if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(3. * dr); green = (unsigned char)(3. * dg); blue = (unsigned char)(3. * db); b = (b<<2) + red; b = (b<<2) + green; b = (b<<2) + blue; gl2psWriteByte(b); b = 0; icase = 1; } } gl2psPrintf("\n"); } } else if(nbit == 4){ /* color, 4 bits for r and g and b; rgbs following each other */ nrgb = width * 3; nbits = nrgb * nbit; nbyte = nbits / 8; if((nbyte * 8) != nbits) nbyte++; gl2psPrintf("/rgbstr %d string def\n", nbyte); gl2psPrintf("%d %d %d\n", width, height, nbit); gl2psPrintf("[ %d 0 0 -%d 0 %d ]\n", width, height, height); gl2psPrintf("{ currentfile rgbstr readhexstring pop }\n"); gl2psPrintf("false 3\n"); gl2psPrintf("colorimage\n"); for(row = 0; row < height; row++){ col = 0; icase = 1; for(ibyte = 0; ibyte < nbyte; ibyte++){ if(icase == 1) { if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(15. * dr); green = (unsigned char)(15. * dg); gl2psPrintf("%x%x", red, green); icase++; } else if(icase == 2) { blue = (unsigned char)(15. * db); if(col < width) { gl2psGetRGB(im, col, row, &dr, &dg, &db); } else { dr = dg = db = 0; } col++; red = (unsigned char)(15. * dr); gl2psPrintf("%x%x", blue, red); icase++; } else if(icase == 3) { green = (unsigned char)(15. * dg); blue = (unsigned char)(15. * db); gl2psPrintf("%x%x", green, blue); icase = 1; } } gl2psPrintf("\n"); } } else{ /* 8 bit for r and g and b */ nbyte = width * 3; gl2psPrintf("/rgbstr %d string def\n", nbyte); gl2psPrintf("%d %d %d\n", width, height, 8); gl2psPrintf("[ %d 0 0 -%d 0 %d ]\n", width, height, height); gl2psPrintf("{ currentfile rgbstr readhexstring pop }\n"); gl2psPrintf("false 3\n"); gl2psPrintf("colorimage\n"); for(row = 0; row < height; row++){ for(col = 0; col < width; col++){ gl2psGetRGB(im, col, row, &dr, &dg, &db); red = (unsigned char)(255. * dr); gl2psWriteByte(red); green = (unsigned char)(255. * dg); gl2psWriteByte(green); blue = (unsigned char)(255. * db); gl2psWriteByte(blue); } gl2psPrintf("\n"); } } gl2psPrintf("grestore\n"); } static void gl2psPrintPostScriptImagemap(GLfloat x, GLfloat y, GLsizei width, GLsizei height, const unsigned char *imagemap){ int i, size; if((width <= 0) || (height <= 0)) return; size = height + height * (width - 1) / 8; gl2psPrintf("gsave\n"); gl2psPrintf("%.2f %.2f translate\n", x, y); gl2psPrintf("%d %d scale\n%d %d\ntrue\n", width, height,width, height); gl2psPrintf("[ %d 0 0 -%d 0 %d ] {<", width, height); for(i = 0; i < size; i++){ gl2psWriteByte(*imagemap); imagemap++; } gl2psPrintf(">} imagemask\ngrestore\n"); } static void gl2psPrintPostScriptHeader(void) { time_t now; /* Since compression is not part of the PostScript standard, compressed PostScript files are just gzipped PostScript files ("ps.gz" or "eps.gz") */ gl2psPrintGzipHeader(); time(&now); if(gl2ps->format == GL2PS_PS){ gl2psPrintf("%%!PS-Adobe-3.0\n"); } else{ gl2psPrintf("%%!PS-Adobe-3.0 EPSF-3.0\n"); } gl2psPrintf("%%%%Title: %s\n" "%%%%Creator: GL2PS %d.%d.%d%s, %s\n" "%%%%For: %s\n" "%%%%CreationDate: %s" "%%%%LanguageLevel: 3\n" "%%%%DocumentData: Clean7Bit\n" "%%%%Pages: 1\n", gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now)); if(gl2ps->format == GL2PS_PS){ gl2psPrintf("%%%%Orientation: %s\n" "%%%%DocumentMedia: Default %d %d 0 () ()\n", (gl2ps->options & GL2PS_LANDSCAPE) ? "Landscape" : "Portrait", (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[3] : (int)gl2ps->viewport[2], (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[2] : (int)gl2ps->viewport[3]); } gl2psPrintf("%%%%BoundingBox: %d %d %d %d\n" "%%%%EndComments\n", (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[1] : (int)gl2ps->viewport[0], (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[0] : (int)gl2ps->viewport[1], (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[3] : (int)gl2ps->viewport[2], (gl2ps->options & GL2PS_LANDSCAPE) ? (int)gl2ps->viewport[2] : (int)gl2ps->viewport[3]); /* RGB color: r g b C (replace C by G in output to change from rgb to gray) Grayscale: r g b G Font choose: size fontname FC Text string: (string) x y size fontname S?? Rotated text string: (string) angle x y size fontname S??R Point primitive: x y size P Line width: width W Line start: x y LS Line joining last point: x y L Line end: x y LE Flat-shaded triangle: x3 y3 x2 y2 x1 y1 T Smooth-shaded triangle: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 ST */ gl2psPrintf("%%%%BeginProlog\n" "/gl2psdict 64 dict def gl2psdict begin\n" "0 setlinecap 0 setlinejoin\n" "/tryPS3shading %s def %% set to false to force subdivision\n" "/rThreshold %g def %% red component subdivision threshold\n" "/gThreshold %g def %% green component subdivision threshold\n" "/bThreshold %g def %% blue component subdivision threshold\n", (gl2ps->options & GL2PS_NO_PS3_SHADING) ? "false" : "true", gl2ps->threshold[0], gl2ps->threshold[1], gl2ps->threshold[2]); gl2psPrintf("/BD { bind def } bind def\n" "/C { setrgbcolor } BD\n" "/G { 0.082 mul exch 0.6094 mul add exch 0.3086 mul add neg 1.0 add setgray } BD\n" "/W { setlinewidth } BD\n"); gl2psPrintf("/FC { findfont exch /SH exch def SH scalefont setfont } BD\n" "/SW { dup stringwidth pop } BD\n" "/S { FC moveto show } BD\n" "/SBC{ FC moveto SW -2 div 0 rmoveto show } BD\n" "/SBR{ FC moveto SW neg 0 rmoveto show } BD\n" "/SCL{ FC moveto 0 SH -2 div rmoveto show } BD\n" "/SCC{ FC moveto SW -2 div SH -2 div rmoveto show } BD\n" "/SCR{ FC moveto SW neg SH -2 div rmoveto show } BD\n" "/STL{ FC moveto 0 SH neg rmoveto show } BD\n" "/STC{ FC moveto SW -2 div SH neg rmoveto show } BD\n" "/STR{ FC moveto SW neg SH neg rmoveto show } BD\n"); /* rotated text routines: same nameanem with R appended */ gl2psPrintf("/FCT { FC translate 0 0 } BD\n" "/SR { gsave FCT moveto rotate show grestore } BD\n" "/SBCR{ gsave FCT moveto rotate SW -2 div 0 rmoveto show grestore } BD\n" "/SBRR{ gsave FCT moveto rotate SW neg 0 rmoveto show grestore } BD\n" "/SCLR{ gsave FCT moveto rotate 0 SH -2 div rmoveto show grestore} BD\n"); gl2psPrintf("/SCCR{ gsave FCT moveto rotate SW -2 div SH -2 div rmoveto show grestore} BD\n" "/SCRR{ gsave FCT moveto rotate SW neg SH -2 div rmoveto show grestore} BD\n" "/STLR{ gsave FCT moveto rotate 0 SH neg rmoveto show grestore } BD\n" "/STCR{ gsave FCT moveto rotate SW -2 div SH neg rmoveto show grestore } BD\n" "/STRR{ gsave FCT moveto rotate SW neg SH neg rmoveto show grestore } BD\n"); gl2psPrintf("/P { newpath 0.0 360.0 arc closepath fill } BD\n" "/LS { newpath moveto } BD\n" "/L { lineto } BD\n" "/LE { lineto stroke } BD\n" "/T { newpath moveto lineto lineto closepath fill } BD\n"); /* Smooth-shaded triangle with PostScript level 3 shfill operator: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 STshfill */ gl2psPrintf("/STshfill {\n" " /b1 exch def /g1 exch def /r1 exch def /y1 exch def /x1 exch def\n" " /b2 exch def /g2 exch def /r2 exch def /y2 exch def /x2 exch def\n" " /b3 exch def /g3 exch def /r3 exch def /y3 exch def /x3 exch def\n" " gsave << /ShadingType 4 /ColorSpace [/DeviceRGB]\n" " /DataSource [ 0 x1 y1 r1 g1 b1 0 x2 y2 r2 g2 b2 0 x3 y3 r3 g3 b3 ] >>\n" " shfill grestore } BD\n"); /* Flat-shaded triangle with middle color: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 Tm */ gl2psPrintf(/* stack : x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 */ "/Tm { 3 -1 roll 8 -1 roll 13 -1 roll add add 3 div\n" /* r = (r1+r2+r3)/3 */ /* stack : x3 y3 g3 b3 x2 y2 g2 b2 x1 y1 g1 b1 r */ " 3 -1 roll 7 -1 roll 11 -1 roll add add 3 div\n" /* g = (g1+g2+g3)/3 */ /* stack : x3 y3 b3 x2 y2 b2 x1 y1 b1 r g b */ " 3 -1 roll 6 -1 roll 9 -1 roll add add 3 div" /* b = (b1+b2+b3)/3 */ /* stack : x3 y3 x2 y2 x1 y1 r g b */ " C T } BD\n"); /* Split triangle in four sub-triangles (at sides middle points) and call the STnoshfill procedure on each, interpolating the colors in RGB space: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 STsplit (in procedure comments key: (Vi) = xi yi ri gi bi) */ gl2psPrintf("/STsplit {\n" " 4 index 15 index add 0.5 mul\n" /* x13 = (x1+x3)/2 */ " 4 index 15 index add 0.5 mul\n" /* y13 = (y1+y3)/2 */ " 4 index 15 index add 0.5 mul\n" /* r13 = (r1+r3)/2 */ " 4 index 15 index add 0.5 mul\n" /* g13 = (g1+g3)/2 */ " 4 index 15 index add 0.5 mul\n" /* b13 = (b1+b3)/2 */ " 5 copy 5 copy 25 15 roll\n"); /* at his point, stack = (V3) (V13) (V13) (V13) (V2) (V1) */ gl2psPrintf(" 9 index 30 index add 0.5 mul\n" /* x23 = (x2+x3)/2 */ " 9 index 30 index add 0.5 mul\n" /* y23 = (y2+y3)/2 */ " 9 index 30 index add 0.5 mul\n" /* r23 = (r2+r3)/2 */ " 9 index 30 index add 0.5 mul\n" /* g23 = (g2+g3)/2 */ " 9 index 30 index add 0.5 mul\n" /* b23 = (b2+b3)/2 */ " 5 copy 5 copy 35 5 roll 25 5 roll 15 5 roll\n"); /* stack = (V3) (V13) (V23) (V13) (V23) (V13) (V23) (V2) (V1) */ gl2psPrintf(" 4 index 10 index add 0.5 mul\n" /* x12 = (x1+x2)/2 */ " 4 index 10 index add 0.5 mul\n" /* y12 = (y1+y2)/2 */ " 4 index 10 index add 0.5 mul\n" /* r12 = (r1+r2)/2 */ " 4 index 10 index add 0.5 mul\n" /* g12 = (g1+g2)/2 */ " 4 index 10 index add 0.5 mul\n" /* b12 = (b1+b2)/2 */ " 5 copy 5 copy 40 5 roll 25 5 roll 15 5 roll 25 5 roll\n"); /* stack = (V3) (V13) (V23) (V13) (V12) (V23) (V13) (V1) (V12) (V23) (V12) (V2) */ gl2psPrintf(" STnoshfill STnoshfill STnoshfill STnoshfill } BD\n"); /* Gouraud shaded triangle using recursive subdivision until the difference between corner colors does not exceed the thresholds: x3 y3 r3 g3 b3 x2 y2 r2 g2 b2 x1 y1 r1 g1 b1 STnoshfill */ gl2psPrintf("/STnoshfill {\n" " 2 index 8 index sub abs rThreshold gt\n" /* |r1-r2|>rth */ " { STsplit }\n" " { 1 index 7 index sub abs gThreshold gt\n" /* |g1-g2|>gth */ " { STsplit }\n" " { dup 6 index sub abs bThreshold gt\n" /* |b1-b2|>bth */ " { STsplit }\n" " { 2 index 13 index sub abs rThreshold gt\n" /* |r1-r3|>rht */ " { STsplit }\n" " { 1 index 12 index sub abs gThreshold gt\n" /* |g1-g3|>gth */ " { STsplit }\n" " { dup 11 index sub abs bThreshold gt\n" /* |b1-b3|>bth */ " { STsplit }\n" " { 7 index 13 index sub abs rThreshold gt\n"); /* |r2-r3|>rht */ gl2psPrintf(" { STsplit }\n" " { 6 index 12 index sub abs gThreshold gt\n" /* |g2-g3|>gth */ " { STsplit }\n" " { 5 index 11 index sub abs bThreshold gt\n" /* |b2-b3|>bth */ " { STsplit }\n" " { Tm }\n" /* all colors sufficiently similar */ " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse }\n" " ifelse } BD\n"); gl2psPrintf("tryPS3shading\n" "{ /shfill where\n" " { /ST { STshfill } BD }\n" " { /ST { STnoshfill } BD }\n" " ifelse }\n" "{ /ST { STnoshfill } BD }\n" "ifelse\n"); gl2psPrintf("end\n" "%%%%EndProlog\n" "%%%%BeginSetup\n" "/DeviceRGB setcolorspace\n" "gl2psdict begin\n" "%%%%EndSetup\n" "%%%%Page: 1 1\n" "%%%%BeginPageSetup\n"); if(gl2ps->options & GL2PS_LANDSCAPE){ gl2psPrintf("%d 0 translate 90 rotate\n", (int)gl2ps->viewport[3]); } gl2psPrintf("%%%%EndPageSetup\n" "mark\n" "gsave\n" "1.0 1.0 scale\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ gl2psPrintf("%g %g %g C\n" "newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto\n" "closepath fill\n", gl2ps->bgcolor[0], gl2ps->bgcolor[1], gl2ps->bgcolor[2], (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3], (int)gl2ps->viewport[0], (int)gl2ps->viewport[3]); } } static void gl2psPrintPostScriptColor(GL2PSrgba rgba) { if(!gl2psSameColor(gl2ps->lastrgba, rgba)){ gl2psSetLastColor(rgba); gl2psPrintf("%g %g %g C\n", rgba[0], rgba[1], rgba[2]); } } static void gl2psResetPostScriptColor(void) { gl2ps->lastrgba[0] = gl2ps->lastrgba[1] = gl2ps->lastrgba[2] = -1.; } static void gl2psEndPostScriptLine(void) { int i; if(gl2ps->lastvertex.rgba[0] >= 0.){ gl2psPrintf("%g %g LE\n", gl2ps->lastvertex.xyz[0], gl2ps->lastvertex.xyz[1]); for(i = 0; i < 3; i++) gl2ps->lastvertex.xyz[i] = -1.; for(i = 0; i < 4; i++) gl2ps->lastvertex.rgba[i] = -1.; } } static void gl2psParseStipplePattern(GLushort pattern, GLint factor, int *nb, int array[10]) { int i, n; int on[8] = {0, 0, 0, 0, 0, 0, 0, 0}; int off[8] = {0, 0, 0, 0, 0, 0, 0, 0}; char tmp[16]; /* extract the 16 bits from the OpenGL stipple pattern */ for(n = 15; n >= 0; n--){ tmp[n] = (char)(pattern & 0x01); pattern >>= 1; } /* compute the on/off pixel sequence */ n = 0; for(i = 0; i < 8; i++){ while(n < 16 && !tmp[n]){ off[i]++; n++; } while(n < 16 && tmp[n]){ on[i]++; n++; } if(n >= 15){ i++; break; } } /* store the on/off array from right to left, starting with off pixels. The PostScript specification allows for at most 11 elements in the on/off array, so we limit ourselves to 5 on/off couples (our longest possible array is thus [on4 off4 on3 off3 on2 off2 on1 off1 on0 off0]) */ *nb = 0; for(n = i - 1; n >= 0; n--){ array[(*nb)++] = factor * on[n]; array[(*nb)++] = factor * off[n]; if(*nb == 10) break; } } static int gl2psPrintPostScriptDash(GLushort pattern, GLint factor, const char *str) { int len = 0, i, n, array[10]; if(pattern == gl2ps->lastpattern && factor == gl2ps->lastfactor) return 0; gl2ps->lastpattern = pattern; gl2ps->lastfactor = factor; if(!pattern || !factor){ /* solid line */ len += gl2psPrintf("[] 0 %s\n", str); } else{ gl2psParseStipplePattern(pattern, factor, &n, array); len += gl2psPrintf("["); for(i = 0; i < n; i++){ if(i) len += gl2psPrintf(" "); len += gl2psPrintf("%d", array[i]); } len += gl2psPrintf("] 0 %s\n", str); } return len; } static void gl2psPrintPostScriptPrimitive(void *data) { int newline; GL2PSprimitive *prim; prim = *(GL2PSprimitive**)data; if((gl2ps->options & GL2PS_OCCLUSION_CULL) && prim->culled) return; /* Every effort is made to draw lines as connected segments (i.e., using a single PostScript path): this is the only way to get nice line joins and to not restart the stippling for every line segment. So if the primitive to print is not a line we must first finish the current line (if any): */ if(prim->type != GL2PS_LINE) gl2psEndPostScriptLine(); switch(prim->type){ case GL2PS_POINT : gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("%g %g %g P\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1], 0.5 * prim->width); break; case GL2PS_LINE : if(!gl2psSamePosition(gl2ps->lastvertex.xyz, prim->verts[0].xyz) || !gl2psSameColor(gl2ps->lastrgba, prim->verts[0].rgba) || gl2ps->lastlinewidth != prim->width || gl2ps->lastpattern != prim->pattern || gl2ps->lastfactor != prim->factor){ /* End the current line if the new segment does not start where the last one ended, or if the color, the width or the stippling have changed (multi-stroking lines with changing colors is necessary until we use /shfill for lines; unfortunately this means that at the moment we can screw up line stippling for smooth-shaded lines) */ gl2psEndPostScriptLine(); newline = 1; } else{ newline = 0; } if(gl2ps->lastlinewidth != prim->width){ gl2ps->lastlinewidth = prim->width; gl2psPrintf("%g W\n", gl2ps->lastlinewidth); } gl2psPrintPostScriptDash(prim->pattern, prim->factor, "setdash"); gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("%g %g %s\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1], newline ? "LS" : "L"); gl2ps->lastvertex = prim->verts[1]; break; case GL2PS_TRIANGLE : if(!gl2psVertsSameColor(prim)){ gl2psResetPostScriptColor(); gl2psPrintf("%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g ST\n", prim->verts[2].xyz[0], prim->verts[2].xyz[1], prim->verts[2].rgba[0], prim->verts[2].rgba[1], prim->verts[2].rgba[2], prim->verts[1].xyz[0], prim->verts[1].xyz[1], prim->verts[1].rgba[0], prim->verts[1].rgba[1], prim->verts[1].rgba[2], prim->verts[0].xyz[0], prim->verts[0].xyz[1], prim->verts[0].rgba[0], prim->verts[0].rgba[1], prim->verts[0].rgba[2]); } else{ gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("%g %g %g %g %g %g T\n", prim->verts[2].xyz[0], prim->verts[2].xyz[1], prim->verts[1].xyz[0], prim->verts[1].xyz[1], prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } break; case GL2PS_QUADRANGLE : gl2psMsg(GL2PS_WARNING, "There should not be any quad left to print"); break; case GL2PS_PIXMAP : gl2psPrintPostScriptPixmap(prim->verts[0].xyz[0], prim->verts[0].xyz[1], prim->data.image); break; case GL2PS_IMAGEMAP : if(prim->data.image->type != GL2PS_IMAGEMAP_WRITTEN){ gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintPostScriptImagemap(prim->data.image->pixels[0], prim->data.image->pixels[1], prim->data.image->width, prim->data.image->height, (const unsigned char*)(&(prim->data.image->pixels[2]))); prim->data.image->type = GL2PS_IMAGEMAP_WRITTEN; } break; case GL2PS_TEXT : gl2psPrintPostScriptColor(prim->verts[0].rgba); gl2psPrintf("(%s) ", prim->data.text->str); if(prim->data.text->angle) gl2psPrintf("%g ", prim->data.text->angle); gl2psPrintf("%g %g %d /%s ", prim->verts[0].xyz[0], prim->verts[0].xyz[1], prim->data.text->fontsize, prim->data.text->fontname); switch(prim->data.text->alignment){ case GL2PS_TEXT_C: gl2psPrintf(prim->data.text->angle ? "SCCR\n" : "SCC\n"); break; case GL2PS_TEXT_CL: gl2psPrintf(prim->data.text->angle ? "SCLR\n" : "SCL\n"); break; case GL2PS_TEXT_CR: gl2psPrintf(prim->data.text->angle ? "SCRR\n" : "SCR\n"); break; case GL2PS_TEXT_B: gl2psPrintf(prim->data.text->angle ? "SBCR\n" : "SBC\n"); break; case GL2PS_TEXT_BR: gl2psPrintf(prim->data.text->angle ? "SBRR\n" : "SBR\n"); break; case GL2PS_TEXT_T: gl2psPrintf(prim->data.text->angle ? "STCR\n" : "STC\n"); break; case GL2PS_TEXT_TL: gl2psPrintf(prim->data.text->angle ? "STLR\n" : "STL\n"); break; case GL2PS_TEXT_TR: gl2psPrintf(prim->data.text->angle ? "STRR\n" : "STR\n"); break; case GL2PS_TEXT_BL: default: gl2psPrintf(prim->data.text->angle ? "SR\n" : "S\n"); break; } break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if(prim->data.text->alignment == GL2PS_PS || prim->data.text->alignment == GL2PS_EPS) gl2psPrintf("%s\n", prim->data.text->str); break; default : break; } } static void gl2psPrintPostScriptFooter(void) { gl2psPrintf("grestore\n" "showpage\n" "cleartomark\n" "%%%%PageTrailer\n" "%%%%Trailer\n" "end\n" "%%%%EOF\n"); gl2psPrintGzipFooter(); } static void gl2psPrintPostScriptBeginViewport(GLint viewport[4]) { GLint idx; GLfloat rgba[4]; int x = viewport[0], y = viewport[1], w = viewport[2], h = viewport[3]; glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintPostScriptHeader(); gl2ps->header = GL_FALSE; } gl2psPrintf("gsave\n" "1.0 1.0 scale\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ if(gl2ps->colormode == GL_RGBA || gl2ps->colorsize == 0){ glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); } else{ glGetIntegerv(GL_INDEX_CLEAR_VALUE, &idx); rgba[0] = gl2ps->colormap[idx][0]; rgba[1] = gl2ps->colormap[idx][1]; rgba[2] = gl2ps->colormap[idx][2]; rgba[3] = 1.0F; } gl2psPrintf("%g %g %g C\n" "newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto\n" "closepath fill\n", rgba[0], rgba[1], rgba[2], x, y, x+w, y, x+w, y+h, x, y+h); } gl2psPrintf("newpath %d %d moveto %d %d lineto %d %d lineto %d %d lineto\n" "closepath clip\n", x, y, x+w, y, x+w, y+h, x, y+h); } static GLint gl2psPrintPostScriptEndViewport(void) { GLint res; res = gl2psPrintPrimitives(); gl2psPrintf("grestore\n"); return res; } static void gl2psPrintPostScriptFinalPrimitive(void) { /* End any remaining line, if any */ gl2psEndPostScriptLine(); } /* definition of the PostScript and Encapsulated PostScript backends */ static GL2PSbackend gl2psPS = { gl2psPrintPostScriptHeader, gl2psPrintPostScriptFooter, gl2psPrintPostScriptBeginViewport, gl2psPrintPostScriptEndViewport, gl2psPrintPostScriptPrimitive, gl2psPrintPostScriptFinalPrimitive, "ps", "Postscript" }; static GL2PSbackend gl2psEPS = { gl2psPrintPostScriptHeader, gl2psPrintPostScriptFooter, gl2psPrintPostScriptBeginViewport, gl2psPrintPostScriptEndViewport, gl2psPrintPostScriptPrimitive, gl2psPrintPostScriptFinalPrimitive, "eps", "Encapsulated Postscript" }; /********************************************************************* * * LaTeX routines * *********************************************************************/ static void gl2psPrintTeXHeader(void) { char name[256]; time_t now; int i; if(gl2ps->filename && strlen(gl2ps->filename) < 256){ for(i = (int)strlen(gl2ps->filename) - 1; i >= 0; i--){ if(gl2ps->filename[i] == '.'){ strncpy(name, gl2ps->filename, i); name[i] = '\0'; break; } } if(i <= 0) strcpy(name, gl2ps->filename); } else{ strcpy(name, "untitled"); } time(&now); fprintf(gl2ps->stream, "%% Title: %s\n" "%% Creator: GL2PS %d.%d.%d%s, %s\n" "%% For: %s\n" "%% CreationDate: %s", gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now)); fprintf(gl2ps->stream, "\\setlength{\\unitlength}{1pt}\n" "\\begin{picture}(0,0)\n" "\\includegraphics{%s}\n" "\\end{picture}%%\n" "%s\\begin{picture}(%d,%d)(0,0)\n", name, (gl2ps->options & GL2PS_LANDSCAPE) ? "\\rotatebox{90}{" : "", (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); } static void gl2psPrintTeXPrimitive(void *data) { GL2PSprimitive *prim; prim = *(GL2PSprimitive**)data; switch(prim->type){ case GL2PS_TEXT : fprintf(gl2ps->stream, "\\fontsize{%d}{0}\n\\selectfont", prim->data.text->fontsize); fprintf(gl2ps->stream, "\\put(%g,%g)", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); if(prim->data.text->angle) fprintf(gl2ps->stream, "{\\rotatebox{%g}", prim->data.text->angle); fprintf(gl2ps->stream, "{\\makebox(0,0)"); switch(prim->data.text->alignment){ case GL2PS_TEXT_C: fprintf(gl2ps->stream, "{"); break; case GL2PS_TEXT_CL: fprintf(gl2ps->stream, "[l]{"); break; case GL2PS_TEXT_CR: fprintf(gl2ps->stream, "[r]{"); break; case GL2PS_TEXT_B: fprintf(gl2ps->stream, "[b]{"); break; case GL2PS_TEXT_BR: fprintf(gl2ps->stream, "[br]{"); break; case GL2PS_TEXT_T: fprintf(gl2ps->stream, "[t]{"); break; case GL2PS_TEXT_TL: fprintf(gl2ps->stream, "[tl]{"); break; case GL2PS_TEXT_TR: fprintf(gl2ps->stream, "[tr]{"); break; case GL2PS_TEXT_BL: default: fprintf(gl2ps->stream, "[bl]{"); break; } fprintf(gl2ps->stream, "\\textcolor[rgb]{%g,%g,%g}{{%s}}", prim->verts[0].rgba[0], prim->verts[0].rgba[1], prim->verts[0].rgba[2], prim->data.text->str); if(prim->data.text->angle) fprintf(gl2ps->stream, "}"); fprintf(gl2ps->stream, "}}\n"); break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if (prim->data.text->alignment == GL2PS_TEX) fprintf(gl2ps->stream, "%s\n", prim->data.text->str); break; default : break; } } static void gl2psPrintTeXFooter(void) { fprintf(gl2ps->stream, "\\end{picture}%s\n", (gl2ps->options & GL2PS_LANDSCAPE) ? "}" : ""); } static void gl2psPrintTeXBeginViewport(GLint viewport[4]) { (void) viewport; /* not used */ glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintTeXHeader(); gl2ps->header = GL_FALSE; } } static GLint gl2psPrintTeXEndViewport(void) { return gl2psPrintPrimitives(); } static void gl2psPrintTeXFinalPrimitive(void) { } /* definition of the LaTeX backend */ static GL2PSbackend gl2psTEX = { gl2psPrintTeXHeader, gl2psPrintTeXFooter, gl2psPrintTeXBeginViewport, gl2psPrintTeXEndViewport, gl2psPrintTeXPrimitive, gl2psPrintTeXFinalPrimitive, "tex", "LaTeX text" }; /********************************************************************* * * PDF routines * *********************************************************************/ static int gl2psPrintPDFCompressorType(void) { #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ return fprintf(gl2ps->stream, "/Filter [/FlateDecode]\n"); } #endif return 0; } static int gl2psPrintPDFStrokeColor(GL2PSrgba rgba) { int i, offs = 0; gl2psSetLastColor(rgba); for(i = 0; i < 3; ++i){ if(GL2PS_ZERO(rgba[i])) offs += gl2psPrintf("%.0f ", 0.); else if(rgba[i] < 1e-4 || rgba[i] > 1e6) /* avoid %e formatting */ offs += gl2psPrintf("%f ", rgba[i]); else offs += gl2psPrintf("%g ", rgba[i]); } offs += gl2psPrintf("RG\n"); return offs; } static int gl2psPrintPDFFillColor(GL2PSrgba rgba) { int i, offs = 0; for(i = 0; i < 3; ++i){ if(GL2PS_ZERO(rgba[i])) offs += gl2psPrintf("%.0f ", 0.); else if(rgba[i] < 1e-4 || rgba[i] > 1e6) /* avoid %e formatting */ offs += gl2psPrintf("%f ", rgba[i]); else offs += gl2psPrintf("%g ", rgba[i]); } offs += gl2psPrintf("rg\n"); return offs; } static int gl2psPrintPDFLineWidth(GLfloat lw) { if(GL2PS_ZERO(lw)) return gl2psPrintf("%.0f w\n", 0.); else if(lw < 1e-4 || lw > 1e6) /* avoid %e formatting */ return gl2psPrintf("%f w\n", lw); else return gl2psPrintf("%g w\n", lw); } static void gl2psPutPDFText(GL2PSstring *text, int cnt, GLfloat x, GLfloat y) { GLfloat rad, crad, srad; if(text->angle == 0.0F){ gl2ps->streamlength += gl2psPrintf ("BT\n" "/F%d %d Tf\n" "%f %f Td\n" "(%s) Tj\n" "ET\n", cnt, text->fontsize, x, y, text->str); } else{ rad = (GLfloat)(3.141593F * text->angle / 180.0F); srad = (GLfloat)sin(rad); crad = (GLfloat)cos(rad); gl2ps->streamlength += gl2psPrintf ("BT\n" "/F%d %d Tf\n" "%f %f %f %f %f %f Tm\n" "(%s) Tj\n" "ET\n", cnt, text->fontsize, crad, srad, -srad, crad, x, y, text->str); } } static void gl2psPutPDFSpecial(GL2PSstring *text) { gl2ps->streamlength += gl2psPrintf("%s\n", text->str); } static void gl2psPutPDFImage(GL2PSimage *image, int cnt, GLfloat x, GLfloat y) { gl2ps->streamlength += gl2psPrintf ("q\n" "%d 0 0 %d %f %f cm\n" "/Im%d Do\n" "Q\n", (int)image->width, (int)image->height, x, y, cnt); } static void gl2psPDFstacksInit(void) { gl2ps->objects_stack = 7 /* FIXED_XREF_ENTRIES */ + 1; gl2ps->extgs_stack = 0; gl2ps->font_stack = 0; gl2ps->im_stack = 0; gl2ps->trgroupobjects_stack = 0; gl2ps->shader_stack = 0; gl2ps->mshader_stack = 0; } static void gl2psPDFgroupObjectInit(GL2PSpdfgroup *gro) { if(!gro) return; gro->ptrlist = NULL; gro->fontno = gro->gsno = gro->imno = gro->maskshno = gro->shno = gro->trgroupno = gro->fontobjno = gro->imobjno = gro->shobjno = gro->maskshobjno = gro->gsobjno = gro->trgroupobjno = -1; } /* Build up group objects and assign name and object numbers */ static void gl2psPDFgroupListInit(void) { int i; GL2PSprimitive *p = NULL; GL2PSpdfgroup gro; int lasttype = GL2PS_NO_TYPE; GL2PSrgba lastrgba = {-1.0F, -1.0F, -1.0F, -1.0F}; GLushort lastpattern = 0; GLint lastfactor = 0; GLfloat lastwidth = 1; GL2PStriangle lastt, tmpt; int lastTriangleWasNotSimpleWithSameColor = 0; if(!gl2ps->pdfprimlist) return; gl2ps->pdfgrouplist = gl2psListCreate(500, 500, sizeof(GL2PSpdfgroup)); gl2psInitTriangle(&lastt); for(i = 0; i < gl2psListNbr(gl2ps->pdfprimlist); ++i){ p = *(GL2PSprimitive**)gl2psListPointer(gl2ps->pdfprimlist, i); switch(p->type){ case GL2PS_PIXMAP: gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gro.imno = gl2ps->im_stack++; gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); break; case GL2PS_TEXT: gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gro.fontno = gl2ps->font_stack++; gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); break; case GL2PS_LINE: if(lasttype != p->type || lastwidth != p->width || lastpattern != p->pattern || lastfactor != p->factor || !gl2psSameColor(p->verts[0].rgba, lastrgba)){ gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); } else{ gl2psListAdd(gro.ptrlist, &p); } lastpattern = p->pattern; lastfactor = p->factor; lastwidth = p->width; lastrgba[0] = p->verts[0].rgba[0]; lastrgba[1] = p->verts[0].rgba[1]; lastrgba[2] = p->verts[0].rgba[2]; break; case GL2PS_POINT: if(lasttype != p->type || lastwidth != p->width || !gl2psSameColor(p->verts[0].rgba, lastrgba)){ gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1,2,sizeof(GL2PSprimitive*)); gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); } else{ gl2psListAdd(gro.ptrlist, &p); } lastwidth = p->width; lastrgba[0] = p->verts[0].rgba[0]; lastrgba[1] = p->verts[0].rgba[1]; lastrgba[2] = p->verts[0].rgba[2]; break; case GL2PS_TRIANGLE: gl2psFillTriangleFromPrimitive(&tmpt, p, GL_TRUE); lastTriangleWasNotSimpleWithSameColor = !(tmpt.prop & T_CONST_COLOR && tmpt.prop & T_ALPHA_1) || !gl2psSameColor(tmpt.vertex[0].rgba, lastt.vertex[0].rgba); if(lasttype == p->type && tmpt.prop == lastt.prop && lastTriangleWasNotSimpleWithSameColor){ /* TODO Check here for last alpha */ gl2psListAdd(gro.ptrlist, &p); } else{ gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); } lastt = tmpt; break; case GL2PS_SPECIAL: gl2psPDFgroupObjectInit(&gro); gro.ptrlist = gl2psListCreate(1, 2, sizeof(GL2PSprimitive*)); gl2psListAdd(gro.ptrlist, &p); gl2psListAdd(gl2ps->pdfgrouplist, &gro); break; default: break; } lasttype = p->type; } } static void gl2psSortOutTrianglePDFgroup(GL2PSpdfgroup *gro) { GL2PStriangle t; GL2PSprimitive *prim = NULL; if(!gro) return; if(!gl2psListNbr(gro->ptrlist)) return; prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, 0); if(prim->type != GL2PS_TRIANGLE) return; gl2psFillTriangleFromPrimitive(&t, prim, GL_TRUE); if(t.prop & T_CONST_COLOR && t.prop & T_ALPHA_LESS_1){ gro->gsno = gl2ps->extgs_stack++; gro->gsobjno = gl2ps->objects_stack ++; } else if(t.prop & T_CONST_COLOR && t.prop & T_VAR_ALPHA){ gro->gsno = gl2ps->extgs_stack++; gro->gsobjno = gl2ps->objects_stack++; gro->trgroupno = gl2ps->trgroupobjects_stack++; gro->trgroupobjno = gl2ps->objects_stack++; gro->maskshno = gl2ps->mshader_stack++; gro->maskshobjno = gl2ps->objects_stack++; } else if(t.prop & T_VAR_COLOR && t.prop & T_ALPHA_1){ gro->shno = gl2ps->shader_stack++; gro->shobjno = gl2ps->objects_stack++; } else if(t.prop & T_VAR_COLOR && t.prop & T_ALPHA_LESS_1){ gro->gsno = gl2ps->extgs_stack++; gro->gsobjno = gl2ps->objects_stack++; gro->shno = gl2ps->shader_stack++; gro->shobjno = gl2ps->objects_stack++; } else if(t.prop & T_VAR_COLOR && t.prop & T_VAR_ALPHA){ gro->gsno = gl2ps->extgs_stack++; gro->gsobjno = gl2ps->objects_stack++; gro->shno = gl2ps->shader_stack++; gro->shobjno = gl2ps->objects_stack++; gro->trgroupno = gl2ps->trgroupobjects_stack++; gro->trgroupobjno = gl2ps->objects_stack++; gro->maskshno = gl2ps->mshader_stack++; gro->maskshobjno = gl2ps->objects_stack++; } } /* Main stream data */ static void gl2psPDFgroupListWriteMainStream(void) { int i, j, lastel; GL2PSprimitive *prim = NULL, *prev = NULL; GL2PSpdfgroup *gro; GL2PStriangle t; if(!gl2ps->pdfgrouplist) return; for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); lastel = gl2psListNbr(gro->ptrlist) - 1; if(lastel < 0) continue; prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, 0); switch(prim->type){ case GL2PS_POINT: gl2ps->streamlength += gl2psPrintf("1 J\n"); gl2ps->streamlength += gl2psPrintPDFLineWidth(prim->width); gl2ps->streamlength += gl2psPrintPDFStrokeColor(prim->verts[0].rgba); for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2ps->streamlength += gl2psPrintf("%f %f m %f %f l\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1], prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } gl2ps->streamlength += gl2psPrintf("S\n"); gl2ps->streamlength += gl2psPrintf("0 J\n"); break; case GL2PS_LINE: /* We try to use as few paths as possible to draw lines, in order to get nice stippling even when the individual segments are smaller than the stipple */ gl2ps->streamlength += gl2psPrintPDFLineWidth(prim->width); gl2ps->streamlength += gl2psPrintPDFStrokeColor(prim->verts[0].rgba); gl2ps->streamlength += gl2psPrintPostScriptDash(prim->pattern, prim->factor, "d"); /* start new path */ gl2ps->streamlength += gl2psPrintf("%f %f m\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); for(j = 1; j <= lastel; ++j){ prev = prim; prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); if(!gl2psSamePosition(prim->verts[0].xyz, prev->verts[1].xyz)){ /* the starting point of the new segment does not match the end point of the previous line, so we end the current path and start a new one */ gl2ps->streamlength += gl2psPrintf("%f %f l\n", prev->verts[1].xyz[0], prev->verts[1].xyz[1]); gl2ps->streamlength += gl2psPrintf("%f %f m\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } else{ /* the two segements are connected, so we just append to the current path */ gl2ps->streamlength += gl2psPrintf("%f %f l\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } } /* end last path */ gl2ps->streamlength += gl2psPrintf("%f %f l\n", prim->verts[1].xyz[0], prim->verts[1].xyz[1]); gl2ps->streamlength += gl2psPrintf("S\n"); break; case GL2PS_TRIANGLE: gl2psFillTriangleFromPrimitive(&t, prim, GL_TRUE); gl2psSortOutTrianglePDFgroup(gro); /* No alpha and const color: Simple PDF draw orders */ if(t.prop & T_CONST_COLOR && t.prop & T_ALPHA_1){ gl2ps->streamlength += gl2psPrintPDFFillColor(t.vertex[0].rgba); for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psFillTriangleFromPrimitive(&t, prim, GL_FALSE); gl2ps->streamlength += gl2psPrintf("%f %f m\n" "%f %f l\n" "%f %f l\n" "h f\n", t.vertex[0].xyz[0], t.vertex[0].xyz[1], t.vertex[1].xyz[0], t.vertex[1].xyz[1], t.vertex[2].xyz[0], t.vertex[2].xyz[1]); } } /* Const alpha < 1 and const color: Simple PDF draw orders and an extra extended Graphics State for the alpha const */ else if(t.prop & T_CONST_COLOR && t.prop & T_ALPHA_LESS_1){ gl2ps->streamlength += gl2psPrintf("q\n" "/GS%d gs\n", gro->gsno); gl2ps->streamlength += gl2psPrintPDFFillColor(prim->verts[0].rgba); for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psFillTriangleFromPrimitive(&t, prim, GL_FALSE); gl2ps->streamlength += gl2psPrintf("%f %f m\n" "%f %f l\n" "%f %f l\n" "h f\n", t.vertex[0].xyz[0], t.vertex[0].xyz[1], t.vertex[1].xyz[0], t.vertex[1].xyz[1], t.vertex[2].xyz[0], t.vertex[2].xyz[1]); } gl2ps->streamlength += gl2psPrintf("Q\n"); } /* Variable alpha and const color: Simple PDF draw orders and an extra extended Graphics State + Xobject + Shader object for the alpha mask */ else if(t.prop & T_CONST_COLOR && t.prop & T_VAR_ALPHA){ gl2ps->streamlength += gl2psPrintf("q\n" "/GS%d gs\n" "/TrG%d Do\n", gro->gsno, gro->trgroupno); gl2ps->streamlength += gl2psPrintPDFFillColor(prim->verts[0].rgba); for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psFillTriangleFromPrimitive(&t, prim, GL_FALSE); gl2ps->streamlength += gl2psPrintf("%f %f m\n" "%f %f l\n" "%f %f l\n" "h f\n", t.vertex[0].xyz[0], t.vertex[0].xyz[1], t.vertex[1].xyz[0], t.vertex[1].xyz[1], t.vertex[2].xyz[0], t.vertex[2].xyz[1]); } gl2ps->streamlength += gl2psPrintf("Q\n"); } /* Variable color and no alpha: Shader Object for the colored triangle(s) */ else if(t.prop & T_VAR_COLOR && t.prop & T_ALPHA_1){ gl2ps->streamlength += gl2psPrintf("/Sh%d sh\n", gro->shno); } /* Variable color and const alpha < 1: Shader Object for the colored triangle(s) and an extra extended Graphics State for the alpha const */ else if(t.prop & T_VAR_COLOR && t.prop & T_ALPHA_LESS_1){ gl2ps->streamlength += gl2psPrintf("q\n" "/GS%d gs\n" "/Sh%d sh\n" "Q\n", gro->gsno, gro->shno); } /* Variable alpha and color: Shader Object for the colored triangle(s) and an extra extended Graphics State + Xobject + Shader object for the alpha mask */ else if(t.prop & T_VAR_COLOR && t.prop & T_VAR_ALPHA){ gl2ps->streamlength += gl2psPrintf("q\n" "/GS%d gs\n" "/TrG%d Do\n" "/Sh%d sh\n" "Q\n", gro->gsno, gro->trgroupno, gro->shno); } break; case GL2PS_PIXMAP: for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psPutPDFImage(prim->data.image, gro->imno, prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } break; case GL2PS_TEXT: for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2ps->streamlength += gl2psPrintPDFFillColor(prim->verts[0].rgba); gl2psPutPDFText(prim->data.text, gro->fontno, prim->verts[0].xyz[0], prim->verts[0].xyz[1]); } break; case GL2PS_SPECIAL: for(j = 0; j <= lastel; ++j){ prim = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psPutPDFSpecial(prim->data.text); } default: break; } } } /* Graphics State names */ static int gl2psPDFgroupListWriteGStateResources(void) { GL2PSpdfgroup *gro; int offs = 0; int i; offs += fprintf(gl2ps->stream, "/ExtGState\n" "<<\n" "/GSa 7 0 R\n"); for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(gro->gsno >= 0) offs += fprintf(gl2ps->stream, "/GS%d %d 0 R\n", gro->gsno, gro->gsobjno); } offs += fprintf(gl2ps->stream, ">>\n"); return offs; } /* Main Shader names */ static int gl2psPDFgroupListWriteShaderResources(void) { GL2PSpdfgroup *gro; int offs = 0; int i; offs += fprintf(gl2ps->stream, "/Shading\n" "<<\n"); for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(gro->shno >= 0) offs += fprintf(gl2ps->stream, "/Sh%d %d 0 R\n", gro->shno, gro->shobjno); if(gro->maskshno >= 0) offs += fprintf(gl2ps->stream, "/TrSh%d %d 0 R\n", gro->maskshno, gro->maskshobjno); } offs += fprintf(gl2ps->stream,">>\n"); return offs; } /* Images & Mask Shader XObject names */ static int gl2psPDFgroupListWriteXObjectResources(void) { int i; GL2PSprimitive *p = NULL; GL2PSpdfgroup *gro; int offs = 0; offs += fprintf(gl2ps->stream, "/XObject\n" "<<\n"); for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(!gl2psListNbr(gro->ptrlist)) continue; p = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, 0); switch(p->type){ case GL2PS_PIXMAP: gro->imobjno = gl2ps->objects_stack++; if(GL_RGBA == p->data.image->format) /* reserve one object for image mask */ gl2ps->objects_stack++; offs += fprintf(gl2ps->stream, "/Im%d %d 0 R\n", gro->imno, gro->imobjno); case GL2PS_TRIANGLE: if(gro->trgroupno >=0) offs += fprintf(gl2ps->stream, "/TrG%d %d 0 R\n", gro->trgroupno, gro->trgroupobjno); break; default: break; } } offs += fprintf(gl2ps->stream,">>\n"); return offs; } /* Font names */ static int gl2psPDFgroupListWriteFontResources(void) { int i; GL2PSpdfgroup *gro; int offs = 0; offs += fprintf(gl2ps->stream, "/Font\n<<\n"); for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(gro->fontno < 0) continue; gro->fontobjno = gl2ps->objects_stack++; offs += fprintf(gl2ps->stream, "/F%d %d 0 R\n", gro->fontno, gro->fontobjno); } offs += fprintf(gl2ps->stream, ">>\n"); return offs; } static void gl2psPDFgroupListDelete(void) { int i; GL2PSpdfgroup *gro = NULL; if(!gl2ps->pdfgrouplist) return; for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist,i); gl2psListDelete(gro->ptrlist); } gl2psListDelete(gl2ps->pdfgrouplist); gl2ps->pdfgrouplist = NULL; } /* Print 1st PDF object - file info */ static int gl2psPrintPDFInfo(void) { int offs; time_t now; struct tm *newtime; time(&now); newtime = gmtime(&now); offs = fprintf(gl2ps->stream, "1 0 obj\n" "<<\n" "/Title (%s)\n" "/Creator (GL2PS %d.%d.%d%s, %s)\n" "/Producer (%s)\n", gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer); if(!newtime){ offs += fprintf(gl2ps->stream, ">>\n" "endobj\n"); return offs; } offs += fprintf(gl2ps->stream, "/CreationDate (D:%d%02d%02d%02d%02d%02d)\n" ">>\n" "endobj\n", newtime->tm_year+1900, newtime->tm_mon+1, newtime->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec); return offs; } /* Create catalog and page structure - 2nd and 3th PDF object */ static int gl2psPrintPDFCatalog(void) { return fprintf(gl2ps->stream, "2 0 obj\n" "<<\n" "/Type /Catalog\n" "/Pages 3 0 R\n" ">>\n" "endobj\n"); } static int gl2psPrintPDFPages(void) { return fprintf(gl2ps->stream, "3 0 obj\n" "<<\n" "/Type /Pages\n" "/Kids [6 0 R]\n" "/Count 1\n" ">>\n" "endobj\n"); } /* Open stream for data - graphical objects, fonts etc. PDF object 4 */ static int gl2psOpenPDFDataStream(void) { int offs = 0; offs += fprintf(gl2ps->stream, "4 0 obj\n" "<<\n" "/Length 5 0 R\n" ); offs += gl2psPrintPDFCompressorType(); offs += fprintf(gl2ps->stream, ">>\n" "stream\n"); return offs; } /* Stream setup - Graphics state, fill background if allowed */ static int gl2psOpenPDFDataStreamWritePreface(void) { int offs; offs = gl2psPrintf("/GSa gs\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ offs += gl2psPrintPDFFillColor(gl2ps->bgcolor); offs += gl2psPrintf("%d %d %d %d re\n", (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); offs += gl2psPrintf("f\n"); } return offs; } /* Use the functions above to create the first part of the PDF*/ static void gl2psPrintPDFHeader(void) { int offs = 0; gl2ps->pdfprimlist = gl2psListCreate(500, 500, sizeof(GL2PSprimitive*)); gl2psPDFstacksInit(); gl2ps->xreflist = (int*)gl2psMalloc(sizeof(int) * gl2ps->objects_stack); #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ gl2psSetupCompress(); } #endif gl2ps->xreflist[0] = 0; offs += fprintf(gl2ps->stream, "%%PDF-1.4\n"); gl2ps->xreflist[1] = offs; offs += gl2psPrintPDFInfo(); gl2ps->xreflist[2] = offs; offs += gl2psPrintPDFCatalog(); gl2ps->xreflist[3] = offs; offs += gl2psPrintPDFPages(); gl2ps->xreflist[4] = offs; offs += gl2psOpenPDFDataStream(); gl2ps->xreflist[5] = offs; /* finished in gl2psPrintPDFFooter */ gl2ps->streamlength = gl2psOpenPDFDataStreamWritePreface(); } /* The central primitive drawing */ static void gl2psPrintPDFPrimitive(void *data) { GL2PSprimitive *prim = *(GL2PSprimitive**)data; if((gl2ps->options & GL2PS_OCCLUSION_CULL) && prim->culled) return; prim = gl2psCopyPrimitive(prim); /* deep copy */ gl2psListAdd(gl2ps->pdfprimlist, &prim); } /* close stream and ... */ static int gl2psClosePDFDataStream(void) { int offs = 0; #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ if(Z_OK != gl2psDeflate()) gl2psMsg(GL2PS_ERROR, "Zlib deflate error"); else fwrite(gl2ps->compress->dest, gl2ps->compress->destLen, 1, gl2ps->stream); gl2ps->streamlength += gl2ps->compress->destLen; offs += gl2ps->streamlength; gl2psFreeCompress(); } #endif offs += fprintf(gl2ps->stream, "endstream\n" "endobj\n"); return offs; } /* ... write the now known length object */ static int gl2psPrintPDFDataStreamLength(int val) { return fprintf(gl2ps->stream, "5 0 obj\n" "%d\n" "endobj\n", val); } /* Put the info created before in PDF objects */ static int gl2psPrintPDFOpenPage(void) { int offs; /* Write fixed part */ offs = fprintf(gl2ps->stream, "6 0 obj\n" "<<\n" "/Type /Page\n" "/Parent 3 0 R\n" "/MediaBox [%d %d %d %d]\n", (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); if(gl2ps->options & GL2PS_LANDSCAPE) offs += fprintf(gl2ps->stream, "/Rotate -90\n"); offs += fprintf(gl2ps->stream, "/Contents 4 0 R\n" "/Resources\n" "<<\n" "/ProcSet [/PDF /Text /ImageB /ImageC] %%/ImageI\n"); return offs; /* End fixed part, proceeds in gl2psPDFgroupListWriteVariableResources() */ } static int gl2psPDFgroupListWriteVariableResources(void) { int offs = 0; /* a) Graphics States for shader alpha masks*/ offs += gl2psPDFgroupListWriteGStateResources(); /* b) Shader and shader masks */ offs += gl2psPDFgroupListWriteShaderResources(); /* c) XObjects (Images & Shader Masks) */ offs += gl2psPDFgroupListWriteXObjectResources(); /* d) Fonts */ offs += gl2psPDFgroupListWriteFontResources(); /* End resources and page */ offs += fprintf(gl2ps->stream, ">>\n" ">>\n" "endobj\n"); return offs; } /* Standard Graphics State */ static int gl2psPrintPDFGSObject(void) { return fprintf(gl2ps->stream, "7 0 obj\n" "<<\n" "/Type /ExtGState\n" "/SA false\n" "/SM 0.02\n" "/OP false\n" "/op false\n" "/OPM 0\n" "/BG2 /Default\n" "/UCR2 /Default\n" "/TR2 /Default\n" ">>\n" "endobj\n"); } /* Put vertex' edge flag (8bit) and coordinates (32bit) in shader stream */ static int gl2psPrintPDFShaderStreamDataCoord(GL2PSvertex *vertex, int (*action)(unsigned long data, int size), GLfloat dx, GLfloat dy, GLfloat xmin, GLfloat ymin) { int offs = 0; unsigned long imap; GLfloat diff; double dmax = ~1UL; char edgeflag = 0; /* FIXME: temp bux fix for 64 bit archs: */ if(sizeof(unsigned long) == 8) dmax = dmax - 2048.; offs += (*action)(edgeflag, 1); /* The Shader stream in PDF requires to be in a 'big-endian' order */ if(GL2PS_ZERO(dx * dy)){ offs += (*action)(0, 4); offs += (*action)(0, 4); } else{ diff = (vertex->xyz[0] - xmin) / dx; if(diff > 1) diff = 1.0F; else if(diff < 0) diff = 0.0F; imap = (unsigned long)(diff * dmax); offs += (*action)(imap, 4); diff = (vertex->xyz[1] - ymin) / dy; if(diff > 1) diff = 1.0F; else if(diff < 0) diff = 0.0F; imap = (unsigned long)(diff * dmax); offs += (*action)(imap, 4); } return offs; } /* Put vertex' rgb value (8bit for every component) in shader stream */ static int gl2psPrintPDFShaderStreamDataRGB(GL2PSvertex *vertex, int (*action)(unsigned long data, int size)) { int offs = 0; unsigned long imap; double dmax = ~1UL; /* FIXME: temp bux fix for 64 bit archs: */ if(sizeof(unsigned long) == 8) dmax = dmax - 2048.; imap = (unsigned long)((vertex->rgba[0]) * dmax); offs += (*action)(imap, 1); imap = (unsigned long)((vertex->rgba[1]) * dmax); offs += (*action)(imap, 1); imap = (unsigned long)((vertex->rgba[2]) * dmax); offs += (*action)(imap, 1); return offs; } /* Put vertex' alpha (8/16bit) in shader stream */ static int gl2psPrintPDFShaderStreamDataAlpha(GL2PSvertex *vertex, int (*action)(unsigned long data, int size), int sigbyte) { int offs = 0; unsigned long imap; double dmax = ~1UL; /* FIXME: temp bux fix for 64 bit archs: */ if(sizeof(unsigned long) == 8) dmax = dmax - 2048.; if(sigbyte != 8 && sigbyte != 16) sigbyte = 8; sigbyte /= 8; imap = (unsigned long)((vertex->rgba[3]) * dmax); offs += (*action)(imap, sigbyte); return offs; } /* Put a triangles raw data in shader stream */ static int gl2psPrintPDFShaderStreamData(GL2PStriangle *triangle, GLfloat dx, GLfloat dy, GLfloat xmin, GLfloat ymin, int (*action)(unsigned long data, int size), int gray) { int i, offs = 0; GL2PSvertex v; if(gray && gray != 8 && gray != 16) gray = 8; for(i = 0; i < 3; ++i){ offs += gl2psPrintPDFShaderStreamDataCoord(&triangle->vertex[i], action, dx, dy, xmin, ymin); if(gray){ v = triangle->vertex[i]; offs += gl2psPrintPDFShaderStreamDataAlpha(&v, action, gray); } else{ offs += gl2psPrintPDFShaderStreamDataRGB(&triangle->vertex[i], action); } } return offs; } static void gl2psPDFRectHull(GLfloat *xmin, GLfloat *xmax, GLfloat *ymin, GLfloat *ymax, GL2PStriangle *triangles, int cnt) { int i, j; *xmin = triangles[0].vertex[0].xyz[0]; *xmax = triangles[0].vertex[0].xyz[0]; *ymin = triangles[0].vertex[0].xyz[1]; *ymax = triangles[0].vertex[0].xyz[1]; for(i = 0; i < cnt; ++i){ for(j = 0; j < 3; ++j){ if(*xmin > triangles[i].vertex[j].xyz[0]) *xmin = triangles[i].vertex[j].xyz[0]; if(*xmax < triangles[i].vertex[j].xyz[0]) *xmax = triangles[i].vertex[j].xyz[0]; if(*ymin > triangles[i].vertex[j].xyz[1]) *ymin = triangles[i].vertex[j].xyz[1]; if(*ymax < triangles[i].vertex[j].xyz[1]) *ymax = triangles[i].vertex[j].xyz[1]; } } } /* Writes shaded triangle gray == 0 means write RGB triangles gray == 8 8bit-grayscale (for alpha masks) gray == 16 16bit-grayscale (for alpha masks) */ static int gl2psPrintPDFShader(int obj, GL2PStriangle *triangles, int size, int gray) { int i, offs = 0, vertexbytes, done = 0; GLfloat xmin, xmax, ymin, ymax; switch(gray){ case 0: vertexbytes = 1+4+4+1+1+1; break; case 8: vertexbytes = 1+4+4+1; break; case 16: vertexbytes = 1+4+4+2; break; default: gray = 8; vertexbytes = 1+4+4+1; break; } gl2psPDFRectHull(&xmin, &xmax, &ymin, &ymax, triangles, size); offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<< " "/ShadingType 4 " "/ColorSpace %s " "/BitsPerCoordinate 32 " "/BitsPerComponent %d " "/BitsPerFlag 8 " "/Decode [%f %f %f %f 0 1 %s] ", obj, (gray) ? "/DeviceGray" : "/DeviceRGB", (gray) ? gray : 8, xmin, xmax, ymin, ymax, (gray) ? "" : "0 1 0 1"); #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ gl2psAllocCompress(vertexbytes * size * 3); for(i = 0; i < size; ++i) gl2psPrintPDFShaderStreamData(&triangles[i], xmax-xmin, ymax-ymin, xmin, ymin, gl2psWriteBigEndianCompress, gray); if(Z_OK == gl2psDeflate() && 23 + gl2ps->compress->destLen < gl2ps->compress->srcLen){ offs += gl2psPrintPDFCompressorType(); offs += fprintf(gl2ps->stream, "/Length %d " ">>\n" "stream\n", (int)gl2ps->compress->destLen); offs += gl2ps->compress->destLen * fwrite(gl2ps->compress->dest, gl2ps->compress->destLen, 1, gl2ps->stream); done = 1; } gl2psFreeCompress(); } #endif if(!done){ /* no compression, or too long after compression, or compress error -> write non-compressed entry */ offs += fprintf(gl2ps->stream, "/Length %d " ">>\n" "stream\n", vertexbytes * 3 * size); for(i = 0; i < size; ++i) offs += gl2psPrintPDFShaderStreamData(&triangles[i], xmax-xmin, ymax-ymin, xmin, ymin, gl2psWriteBigEndian, gray); } offs += fprintf(gl2ps->stream, "\nendstream\n" "endobj\n"); return offs; } /* Writes a XObject for a shaded triangle mask */ static int gl2psPrintPDFShaderMask(int obj, int childobj) { int offs = 0, len; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n" "/Type /XObject\n" "/Subtype /Form\n" "/BBox [ %d %d %d %d ]\n" "/Group \n<<\n/S /Transparency /CS /DeviceRGB\n" ">>\n", obj, (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); len = (childobj>0) ? strlen("/TrSh sh\n") + (int)log10((double)childobj)+1 : strlen("/TrSh0 sh\n"); offs += fprintf(gl2ps->stream, "/Length %d\n" ">>\n" "stream\n", len); offs += fprintf(gl2ps->stream, "/TrSh%d sh\n", childobj); offs += fprintf(gl2ps->stream, "endstream\n" "endobj\n"); return offs; } /* Writes a Extended graphics state for a shaded triangle mask if simplealpha ist true the childobj argument is ignored and a /ca statement will be written instead */ static int gl2psPrintPDFShaderExtGS(int obj, int childobj) { int offs = 0; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n", obj); offs += fprintf(gl2ps->stream, "/SMask << /S /Alpha /G %d 0 R >> ", childobj); offs += fprintf(gl2ps->stream, ">>\n" "endobj\n"); return offs; } /* a simple graphics state */ static int gl2psPrintPDFShaderSimpleExtGS(int obj, GLfloat alpha) { int offs = 0; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n" "/ca %g" ">>\n" "endobj\n", obj, alpha); return offs; } /* Similar groups of functions for pixmaps and text */ static int gl2psPrintPDFPixmapStreamData(GL2PSimage *im, int (*action)(unsigned long data, int size), int gray) { int x, y, shift; GLfloat r, g, b, a; if(im->format != GL_RGBA && gray) return 0; if(gray && gray != 8 && gray != 16) gray = 8; gray /= 8; shift = (sizeof(unsigned long) - 1) * 8; for(y = 0; y < im->height; ++y){ for(x = 0; x < im->width; ++x){ a = gl2psGetRGB(im, x, y, &r, &g, &b); if(im->format == GL_RGBA && gray){ (*action)((unsigned long)(a * 255) << shift, gray); } else{ (*action)((unsigned long)(r * 255) << shift, 1); (*action)((unsigned long)(g * 255) << shift, 1); (*action)((unsigned long)(b * 255) << shift, 1); } } } switch(gray){ case 0: return 3 * im->width * im->height; case 1: return im->width * im->height; case 2: return 2 * im->width * im->height; default: return 3 * im->width * im->height; } } static int gl2psPrintPDFPixmap(int obj, int childobj, GL2PSimage *im, int gray) { int offs = 0, done = 0, sigbytes = 3; if(gray && gray !=8 && gray != 16) gray = 8; if(gray) sigbytes = gray / 8; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n" "/Type /XObject\n" "/Subtype /Image\n" "/Width %d\n" "/Height %d\n" "/ColorSpace %s \n" "/BitsPerComponent 8\n", obj, (int)im->width, (int)im->height, (gray) ? "/DeviceGray" : "/DeviceRGB" ); if(GL_RGBA == im->format && gray == 0){ offs += fprintf(gl2ps->stream, "/SMask %d 0 R\n", childobj); } #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ gl2psAllocCompress((int)(im->width * im->height * sigbytes)); gl2psPrintPDFPixmapStreamData(im, gl2psWriteBigEndianCompress, gray); if(Z_OK == gl2psDeflate() && 23 + gl2ps->compress->destLen < gl2ps->compress->srcLen){ offs += gl2psPrintPDFCompressorType(); offs += fprintf(gl2ps->stream, "/Length %d " ">>\n" "stream\n", (int)gl2ps->compress->destLen); offs += gl2ps->compress->destLen * fwrite(gl2ps->compress->dest, gl2ps->compress->destLen, 1, gl2ps->stream); done = 1; } gl2psFreeCompress(); } #endif if(!done){ /* no compression, or too long after compression, or compress error -> write non-compressed entry */ offs += fprintf(gl2ps->stream, "/Length %d " ">>\n" "stream\n", (int)(im->width * im->height * sigbytes)); offs += gl2psPrintPDFPixmapStreamData(im, gl2psWriteBigEndian, gray); } offs += fprintf(gl2ps->stream, "\nendstream\n" "endobj\n"); return offs; } static int gl2psPrintPDFText(int obj, GL2PSstring *s, int fontnumber) { int offs = 0; offs += fprintf(gl2ps->stream, "%d 0 obj\n" "<<\n" "/Type /Font\n" "/Subtype /Type1\n" "/Name /F%d\n" "/BaseFont /%s\n" "/Encoding /MacRomanEncoding\n" ">>\n" "endobj\n", obj, fontnumber, s->fontname); return offs; } /* Write the physical objects */ static int gl2psPDFgroupListWriteObjects(int entryoffs) { int i,j; GL2PSprimitive *p = NULL; GL2PSpdfgroup *gro; int offs = entryoffs; GL2PStriangle *triangles; int size = 0; if(!gl2ps->pdfgrouplist) return offs; for(i = 0; i < gl2psListNbr(gl2ps->pdfgrouplist); ++i){ gro = (GL2PSpdfgroup*)gl2psListPointer(gl2ps->pdfgrouplist, i); if(!gl2psListNbr(gro->ptrlist)) continue; p = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, 0); switch(p->type){ case GL2PS_POINT: break; case GL2PS_LINE: break; case GL2PS_TRIANGLE: size = gl2psListNbr(gro->ptrlist); triangles = (GL2PStriangle*)gl2psMalloc(sizeof(GL2PStriangle) * size); for(j = 0; j < size; ++j){ p = *(GL2PSprimitive**)gl2psListPointer(gro->ptrlist, j); gl2psFillTriangleFromPrimitive(&triangles[j], p, GL_TRUE); } if(triangles[0].prop & T_VAR_COLOR){ gl2ps->xreflist[gro->shobjno] = offs; offs += gl2psPrintPDFShader(gro->shobjno, triangles, size, 0); } if(triangles[0].prop & T_ALPHA_LESS_1){ gl2ps->xreflist[gro->gsobjno] = offs; offs += gl2psPrintPDFShaderSimpleExtGS(gro->gsobjno, triangles[0].vertex[0].rgba[3]); } if(triangles[0].prop & T_VAR_ALPHA){ gl2ps->xreflist[gro->gsobjno] = offs; offs += gl2psPrintPDFShaderExtGS(gro->gsobjno, gro->trgroupobjno); gl2ps->xreflist[gro->trgroupobjno] = offs; offs += gl2psPrintPDFShaderMask(gro->trgroupobjno, gro->maskshno); gl2ps->xreflist[gro->maskshobjno] = offs; offs += gl2psPrintPDFShader(gro->maskshobjno, triangles, size, 8); } gl2psFree(triangles); break; case GL2PS_PIXMAP: gl2ps->xreflist[gro->imobjno] = offs; offs += gl2psPrintPDFPixmap(gro->imobjno, gro->imobjno+1, p->data.image, 0); if(p->data.image->format == GL_RGBA){ gl2ps->xreflist[gro->imobjno+1] = offs; offs += gl2psPrintPDFPixmap(gro->imobjno+1, -1, p->data.image, 8); } break; case GL2PS_TEXT: gl2ps->xreflist[gro->fontobjno] = offs; offs += gl2psPrintPDFText(gro->fontobjno,p->data.text,gro->fontno); break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if(p->data.text->alignment == GL2PS_PDF) offs += fprintf(gl2ps->stream, "%s\n", p->data.text->str); break; default: break; } } return offs; } /* All variable data has been written at this point and all required functioninality has been gathered, so we can write now file footer with cross reference table and trailer */ static void gl2psPrintPDFFooter(void) { int i, offs; gl2psPDFgroupListInit(); gl2psPDFgroupListWriteMainStream(); offs = gl2ps->xreflist[5] + gl2ps->streamlength; offs += gl2psClosePDFDataStream(); gl2ps->xreflist[5] = offs; offs += gl2psPrintPDFDataStreamLength(gl2ps->streamlength); gl2ps->xreflist[6] = offs; gl2ps->streamlength = 0; offs += gl2psPrintPDFOpenPage(); offs += gl2psPDFgroupListWriteVariableResources(); gl2ps->xreflist = (int*)gl2psRealloc(gl2ps->xreflist, sizeof(int) * (gl2ps->objects_stack + 1)); gl2ps->xreflist[7] = offs; offs += gl2psPrintPDFGSObject(); gl2ps->xreflist[8] = offs; gl2ps->xreflist[gl2ps->objects_stack] = gl2psPDFgroupListWriteObjects(gl2ps->xreflist[8]); /* Start cross reference table. The file has to been opened in binary mode to preserve the 20 digit string length! */ fprintf(gl2ps->stream, "xref\n" "0 %d\n" "%010d 65535 f \n", gl2ps->objects_stack, 0); for(i = 1; i < gl2ps->objects_stack; ++i) fprintf(gl2ps->stream, "%010d 00000 n \n", gl2ps->xreflist[i]); fprintf(gl2ps->stream, "trailer\n" "<<\n" "/Size %d\n" "/Info 1 0 R\n" "/Root 2 0 R\n" ">>\n" "startxref\n%d\n" "%%%%EOF\n", gl2ps->objects_stack, gl2ps->xreflist[gl2ps->objects_stack]); /* Free auxiliary lists and arrays */ gl2psFree(gl2ps->xreflist); gl2psListAction(gl2ps->pdfprimlist, gl2psFreePrimitive); gl2psListDelete(gl2ps->pdfprimlist); gl2psPDFgroupListDelete(); #if defined(GL2PS_HAVE_ZLIB) if(gl2ps->options & GL2PS_COMPRESS){ gl2psFreeCompress(); gl2psFree(gl2ps->compress); gl2ps->compress = NULL; } #endif } /* PDF begin viewport */ static void gl2psPrintPDFBeginViewport(GLint viewport[4]) { int offs = 0; GLint idx; GLfloat rgba[4]; int x = viewport[0], y = viewport[1], w = viewport[2], h = viewport[3]; glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintPDFHeader(); gl2ps->header = GL_FALSE; } offs += gl2psPrintf("q\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ if(gl2ps->colormode == GL_RGBA || gl2ps->colorsize == 0){ glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); } else{ glGetIntegerv(GL_INDEX_CLEAR_VALUE, &idx); rgba[0] = gl2ps->colormap[idx][0]; rgba[1] = gl2ps->colormap[idx][1]; rgba[2] = gl2ps->colormap[idx][2]; rgba[3] = 1.0F; } offs += gl2psPrintPDFFillColor(rgba); offs += gl2psPrintf("%d %d %d %d re\n" "W\n" "f\n", x, y, w, h); } else{ offs += gl2psPrintf("%d %d %d %d re\n" "W\n" "n\n", x, y, w, h); } gl2ps->streamlength += offs; } static GLint gl2psPrintPDFEndViewport(void) { GLint res; res = gl2psPrintPrimitives(); gl2ps->streamlength += gl2psPrintf("Q\n"); return res; } static void gl2psPrintPDFFinalPrimitive(void) { } /* definition of the PDF backend */ static GL2PSbackend gl2psPDF = { gl2psPrintPDFHeader, gl2psPrintPDFFooter, gl2psPrintPDFBeginViewport, gl2psPrintPDFEndViewport, gl2psPrintPDFPrimitive, gl2psPrintPDFFinalPrimitive, "pdf", "Portable Document Format" }; /********************************************************************* * * SVG routines * *********************************************************************/ static void gl2psSVGGetCoordsAndColors(int n, GL2PSvertex *verts, GL2PSxyz *xyz, GL2PSrgba *rgba) { int i, j; for(i = 0; i < n; i++){ xyz[i][0] = verts[i].xyz[0]; xyz[i][1] = gl2ps->viewport[3] - verts[i].xyz[1]; xyz[i][2] = 0.0F; for(j = 0; j < 4; j++) rgba[i][j] = verts[i].rgba[j]; } } static void gl2psSVGGetColorString(GL2PSrgba rgba, char str[32]) { int r = (int)(255. * rgba[0]); int g = (int)(255. * rgba[1]); int b = (int)(255. * rgba[2]); int rc = (r < 0) ? 0 : (r > 255) ? 255 : r; int gc = (g < 0) ? 0 : (g > 255) ? 255 : g; int bc = (b < 0) ? 0 : (b > 255) ? 255 : b; sprintf(str, "#%2.2x%2.2x%2.2x", rc, gc, bc); } static void gl2psPrintSVGHeader(void) { int x, y, width, height; char col[32]; time_t now; time(&now); if (gl2ps->options & GL2PS_LANDSCAPE){ x = (int)gl2ps->viewport[1]; y = (int)gl2ps->viewport[0]; width = (int)gl2ps->viewport[3]; height = (int)gl2ps->viewport[2]; } else{ x = (int)gl2ps->viewport[0]; y = (int)gl2ps->viewport[1]; width = (int)gl2ps->viewport[2]; height = (int)gl2ps->viewport[3]; } /* Compressed SVG files (.svgz) are simply gzipped SVG files */ gl2psPrintGzipHeader(); gl2psPrintf("\n"); gl2psPrintf("\n", width, height, x, y, width, height); gl2psPrintf("%s\n", gl2ps->title); gl2psPrintf("\n"); gl2psPrintf("Creator: GL2PS %d.%d.%d%s, %s\n" "For: %s\n" "CreationDate: %s", GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now)); gl2psPrintf("\n"); gl2psPrintf("\n"); gl2psPrintf("\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ gl2psSVGGetColorString(gl2ps->bgcolor, col); gl2psPrintf("\n", col, (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3], (int)gl2ps->viewport[0], (int)gl2ps->viewport[3]); } /* group all the primitives and disable antialiasing */ gl2psPrintf("\n"); } static void gl2psPrintSVGSmoothTriangle(GL2PSxyz xyz[3], GL2PSrgba rgba[3]) { int i; GL2PSxyz xyz2[3]; GL2PSrgba rgba2[3]; char col[32]; /* Apparently there is no easy way to do Gouraud shading in SVG without explicitly pre-defining gradients, so for now we just do recursive subdivision */ if(gl2psSameColorThreshold(3, rgba, gl2ps->threshold)){ gl2psSVGGetColorString(rgba[0], col); gl2psPrintf("\n", xyz[0][0], xyz[0][1], xyz[1][0], xyz[1][1], xyz[2][0], xyz[2][1]); } else{ /* subdivide into 4 subtriangles */ for(i = 0; i < 3; i++){ xyz2[0][i] = xyz[0][i]; xyz2[1][i] = 0.5F * (xyz[0][i] + xyz[1][i]); xyz2[2][i] = 0.5F * (xyz[0][i] + xyz[2][i]); } for(i = 0; i < 4; i++){ rgba2[0][i] = rgba[0][i]; rgba2[1][i] = 0.5F * (rgba[0][i] + rgba[1][i]); rgba2[2][i] = 0.5F * (rgba[0][i] + rgba[2][i]); } gl2psPrintSVGSmoothTriangle(xyz2, rgba2); for(i = 0; i < 3; i++){ xyz2[0][i] = 0.5F * (xyz[0][i] + xyz[1][i]); xyz2[1][i] = xyz[1][i]; xyz2[2][i] = 0.5F * (xyz[1][i] + xyz[2][i]); } for(i = 0; i < 4; i++){ rgba2[0][i] = 0.5F * (rgba[0][i] + rgba[1][i]); rgba2[1][i] = rgba[1][i]; rgba2[2][i] = 0.5F * (rgba[1][i] + rgba[2][i]); } gl2psPrintSVGSmoothTriangle(xyz2, rgba2); for(i = 0; i < 3; i++){ xyz2[0][i] = 0.5F * (xyz[0][i] + xyz[2][i]); xyz2[1][i] = xyz[2][i]; xyz2[2][i] = 0.5F * (xyz[1][i] + xyz[2][i]); } for(i = 0; i < 4; i++){ rgba2[0][i] = 0.5F * (rgba[0][i] + rgba[2][i]); rgba2[1][i] = rgba[2][i]; rgba2[2][i] = 0.5F * (rgba[1][i] + rgba[2][i]); } gl2psPrintSVGSmoothTriangle(xyz2, rgba2); for(i = 0; i < 3; i++){ xyz2[0][i] = 0.5F * (xyz[0][i] + xyz[1][i]); xyz2[1][i] = 0.5F * (xyz[1][i] + xyz[2][i]); xyz2[2][i] = 0.5F * (xyz[0][i] + xyz[2][i]); } for(i = 0; i < 4; i++){ rgba2[0][i] = 0.5F * (rgba[0][i] + rgba[1][i]); rgba2[1][i] = 0.5F * (rgba[1][i] + rgba[2][i]); rgba2[2][i] = 0.5F * (rgba[0][i] + rgba[2][i]); } gl2psPrintSVGSmoothTriangle(xyz2, rgba2); } } static void gl2psPrintSVGDash(GLushort pattern, GLint factor) { int i, n, array[10]; if(!pattern || !factor) return; /* solid line */ gl2psParseStipplePattern(pattern, factor, &n, array); gl2psPrintf("stroke-dasharray=\""); for(i = 0; i < n; i++){ if(i) gl2psPrintf(","); gl2psPrintf("%d", array[i]); } gl2psPrintf("\" "); } static void gl2psEndSVGLine(void) { int i; if(gl2ps->lastvertex.rgba[0] >= 0.){ gl2psPrintf("%g,%g\"/>\n", gl2ps->lastvertex.xyz[0], gl2ps->viewport[3] - gl2ps->lastvertex.xyz[1]); for(i = 0; i < 3; i++) gl2ps->lastvertex.xyz[i] = -1.; for(i = 0; i < 4; i++) gl2ps->lastvertex.rgba[i] = -1.; } } static void gl2psPrintSVGPixmap(GLfloat x, GLfloat y, GL2PSimage *pixmap) { #if defined(GL2PS_HAVE_LIBPNG) GL2PSlist *png; unsigned char c; int i; /* The only image types supported by the SVG standard are JPEG, PNG and SVG. Here we choose PNG, and since we want to embed the image directly in the SVG stream (and not link to an external image file), we need to encode the pixmap into PNG in memory, then encode it into base64. */ png = gl2psListCreate(pixmap->width * pixmap->height * 3, 1000, sizeof(unsigned char)); gl2psConvertPixmapToPNG(pixmap, png); gl2psListEncodeBase64(png); gl2psPrintf("height, pixmap->width, pixmap->height); gl2psPrintf("xlink:href=\"data:image/png;base64,"); for(i = 0; i < gl2psListNbr(png); i++){ gl2psListRead(png, i, &c); gl2psPrintf("%c", c); } gl2psPrintf("\"/>\n"); gl2psListDelete(png); #else (void) x; (void) y; (void) pixmap; /* not used */ gl2psMsg(GL2PS_WARNING, "GL2PS must be compiled with PNG support in " "order to embed images in SVG streams"); #endif } static void gl2psPrintSVGPrimitive(void *data) { GL2PSprimitive *prim; GL2PSxyz xyz[4]; GL2PSrgba rgba[4]; char col[32]; int newline; prim = *(GL2PSprimitive**)data; if((gl2ps->options & GL2PS_OCCLUSION_CULL) && prim->culled) return; /* We try to draw connected lines as a single path to get nice line joins and correct stippling. So if the primitive to print is not a line we must first finish the current line (if any): */ if(prim->type != GL2PS_LINE) gl2psEndSVGLine(); gl2psSVGGetCoordsAndColors(prim->numverts, prim->verts, xyz, rgba); switch(prim->type){ case GL2PS_POINT : gl2psSVGGetColorString(rgba[0], col); gl2psPrintf("\n", xyz[0][0], xyz[0][1], 0.5 * prim->width); break; case GL2PS_LINE : if(!gl2psSamePosition(gl2ps->lastvertex.xyz, prim->verts[0].xyz) || !gl2psSameColor(gl2ps->lastrgba, prim->verts[0].rgba) || gl2ps->lastlinewidth != prim->width || gl2ps->lastpattern != prim->pattern || gl2ps->lastfactor != prim->factor){ /* End the current line if the new segment does not start where the last one ended, or if the color, the width or the stippling have changed (we will need to use multi-point gradients for smooth-shaded lines) */ gl2psEndSVGLine(); newline = 1; } else{ newline = 0; } gl2ps->lastvertex = prim->verts[1]; gl2psSetLastColor(prim->verts[0].rgba); gl2ps->lastlinewidth = prim->width; gl2ps->lastpattern = prim->pattern; gl2ps->lastfactor = prim->factor; if(newline){ gl2psSVGGetColorString(rgba[0], col); gl2psPrintf("width); if(rgba[0][3] < 1.0F) gl2psPrintf("stroke-opacity=\"%g\" ", rgba[0][3]); gl2psPrintSVGDash(prim->pattern, prim->factor); gl2psPrintf("points=\"%g,%g ", xyz[0][0], xyz[0][1]); } else{ gl2psPrintf("%g,%g ", xyz[0][0], xyz[0][1]); } break; case GL2PS_TRIANGLE : gl2psPrintSVGSmoothTriangle(xyz, rgba); break; case GL2PS_QUADRANGLE : gl2psMsg(GL2PS_WARNING, "There should not be any quad left to print"); break; case GL2PS_PIXMAP : gl2psPrintSVGPixmap(xyz[0][0], xyz[0][1], prim->data.image); break; case GL2PS_TEXT : gl2psSVGGetColorString(prim->verts[0].rgba, col); gl2psPrintf("data.text->fontsize); if(prim->data.text->angle) gl2psPrintf("transform=\"rotate(%g, %g, %g)\" ", -prim->data.text->angle, xyz[0][0], xyz[0][1]); switch(prim->data.text->alignment){ case GL2PS_TEXT_C: gl2psPrintf("text-anchor=\"middle\" baseline-shift=\"%d\" ", -prim->data.text->fontsize / 2); break; case GL2PS_TEXT_CL: gl2psPrintf("text-anchor=\"start\" baseline-shift=\"%d\" ", -prim->data.text->fontsize / 2); break; case GL2PS_TEXT_CR: gl2psPrintf("text-anchor=\"end\" baseline-shift=\"%d\" ", -prim->data.text->fontsize / 2); break; case GL2PS_TEXT_B: gl2psPrintf("text-anchor=\"middle\" baseline-shift=\"0\" "); break; case GL2PS_TEXT_BR: gl2psPrintf("text-anchor=\"end\" baseline-shift=\"0\" "); break; case GL2PS_TEXT_T: gl2psPrintf("text-anchor=\"middle\" baseline-shift=\"%d\" ", -prim->data.text->fontsize); break; case GL2PS_TEXT_TL: gl2psPrintf("text-anchor=\"start\" baseline-shift=\"%d\" ", -prim->data.text->fontsize); break; case GL2PS_TEXT_TR: gl2psPrintf("text-anchor=\"end\" baseline-shift=\"%d\" ", -prim->data.text->fontsize); break; case GL2PS_TEXT_BL: default: /* same as GL2PS_TEXT_BL */ gl2psPrintf("text-anchor=\"start\" baseline-shift=\"0\" "); break; } if(!strcmp(prim->data.text->fontname, "Times-Roman")) gl2psPrintf("font-family=\"Times\">"); else if(!strcmp(prim->data.text->fontname, "Times-Bold")) gl2psPrintf("font-family=\"Times\" font-weight=\"bold\">"); else if(!strcmp(prim->data.text->fontname, "Times-Italic")) gl2psPrintf("font-family=\"Times\" font-style=\"italic\">"); else if(!strcmp(prim->data.text->fontname, "Times-BoldItalic")) gl2psPrintf("font-family=\"Times\" font-style=\"italic\" font-weight=\"bold\">"); else if(!strcmp(prim->data.text->fontname, "Helvetica-Bold")) gl2psPrintf("font-family=\"Helvetica\" font-weight=\"bold\">"); else if(!strcmp(prim->data.text->fontname, "Helvetica-Oblique")) gl2psPrintf("font-family=\"Helvetica\" font-style=\"oblique\">"); else if(!strcmp(prim->data.text->fontname, "Helvetica-BoldOblique")) gl2psPrintf("font-family=\"Helvetica\" font-style=\"oblique\" font-weight=\"bold\">"); else if(!strcmp(prim->data.text->fontname, "Courier-Bold")) gl2psPrintf("font-family=\"Courier\" font-weight=\"bold\">"); else if(!strcmp(prim->data.text->fontname, "Courier-Oblique")) gl2psPrintf("font-family=\"Courier\" font-style=\"oblique\">"); else if(!strcmp(prim->data.text->fontname, "Courier-BoldOblique")) gl2psPrintf("font-family=\"Courier\" font-style=\"oblique\" font-weight=\"bold\">"); else gl2psPrintf("font-family=\"%s\">", prim->data.text->fontname); gl2psPrintf("%s\n", prim->data.text->str); break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if(prim->data.text->alignment == GL2PS_SVG) gl2psPrintf("%s\n", prim->data.text->str); break; default : break; } } static void gl2psPrintSVGFooter(void) { gl2psPrintf("\n"); gl2psPrintf("\n"); gl2psPrintGzipFooter(); } static void gl2psPrintSVGBeginViewport(GLint viewport[4]) { GLint idx; char col[32]; GLfloat rgba[4]; int x = viewport[0], y = viewport[1], w = viewport[2], h = viewport[3]; glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintSVGHeader(); gl2ps->header = GL_FALSE; } if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ if(gl2ps->colormode == GL_RGBA || gl2ps->colorsize == 0){ glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); } else{ glGetIntegerv(GL_INDEX_CLEAR_VALUE, &idx); rgba[0] = gl2ps->colormap[idx][0]; rgba[1] = gl2ps->colormap[idx][1]; rgba[2] = gl2ps->colormap[idx][2]; rgba[3] = 1.0F; } gl2psSVGGetColorString(rgba, col); gl2psPrintf("\n", col, x, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - (y + h), x, gl2ps->viewport[3] - (y + h)); } gl2psPrintf("\n", x, y, w, h); gl2psPrintf(" \n", x, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - y, x + w, gl2ps->viewport[3] - (y + h), x, gl2ps->viewport[3] - (y + h)); gl2psPrintf("\n"); gl2psPrintf("\n", x, y, w, h); } static GLint gl2psPrintSVGEndViewport(void) { GLint res; res = gl2psPrintPrimitives(); gl2psPrintf("\n"); return res; } static void gl2psPrintSVGFinalPrimitive(void) { /* End any remaining line, if any */ gl2psEndSVGLine(); } /* definition of the SVG backend */ static GL2PSbackend gl2psSVG = { gl2psPrintSVGHeader, gl2psPrintSVGFooter, gl2psPrintSVGBeginViewport, gl2psPrintSVGEndViewport, gl2psPrintSVGPrimitive, gl2psPrintSVGFinalPrimitive, "svg", "Scalable Vector Graphics" }; /********************************************************************* * * PGF routines * *********************************************************************/ static void gl2psPrintPGFColor(GL2PSrgba rgba) { if(!gl2psSameColor(gl2ps->lastrgba, rgba)){ gl2psSetLastColor(rgba); fprintf(gl2ps->stream, "\\color[rgb]{%f,%f,%f}\n", rgba[0], rgba[1], rgba[2]); } } static void gl2psPrintPGFHeader(void) { time_t now; time(&now); fprintf(gl2ps->stream, "%% Title: %s\n" "%% Creator: GL2PS %d.%d.%d%s, %s\n" "%% For: %s\n" "%% CreationDate: %s", gl2ps->title, GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION, GL2PS_COPYRIGHT, gl2ps->producer, ctime(&now)); fprintf(gl2ps->stream, "\\begin{pgfpicture}\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ gl2psPrintPGFColor(gl2ps->bgcolor); fprintf(gl2ps->stream, "\\pgfpathrectanglecorners{" "\\pgfpoint{%dpt}{%dpt}}{\\pgfpoint{%dpt}{%dpt}}\n" "\\pgfusepath{fill}\n", (int)gl2ps->viewport[0], (int)gl2ps->viewport[1], (int)gl2ps->viewport[2], (int)gl2ps->viewport[3]); } } static void gl2psPrintPGFDash(GLushort pattern, GLint factor) { int i, n, array[10]; if(pattern == gl2ps->lastpattern && factor == gl2ps->lastfactor) return; gl2ps->lastpattern = pattern; gl2ps->lastfactor = factor; if(!pattern || !factor){ /* solid line */ fprintf(gl2ps->stream, "\\pgfsetdash{}{0pt}\n"); } else{ gl2psParseStipplePattern(pattern, factor, &n, array); fprintf(gl2ps->stream, "\\pgfsetdash{"); for(i = 0; i < n; i++) fprintf(gl2ps->stream, "{%dpt}", array[i]); fprintf(gl2ps->stream, "}{0pt}\n"); } } static const char *gl2psPGFTextAlignment(int align) { switch(align){ case GL2PS_TEXT_C : return "center"; case GL2PS_TEXT_CL : return "west"; case GL2PS_TEXT_CR : return "east"; case GL2PS_TEXT_B : return "south"; case GL2PS_TEXT_BR : return "south east"; case GL2PS_TEXT_T : return "north"; case GL2PS_TEXT_TL : return "north west"; case GL2PS_TEXT_TR : return "north east"; case GL2PS_TEXT_BL : default : return "south west"; } } static void gl2psPrintPGFPrimitive(void *data) { GL2PSprimitive *prim; prim = *(GL2PSprimitive**)data; switch(prim->type){ case GL2PS_POINT : /* Points in openGL are rectangular */ gl2psPrintPGFColor(prim->verts[0].rgba); fprintf(gl2ps->stream, "\\pgfpathrectangle{\\pgfpoint{%fpt}{%fpt}}" "{\\pgfpoint{%fpt}{%fpt}}\n\\pgfusepath{fill}\n", prim->verts[0].xyz[0]-0.5*prim->width, prim->verts[0].xyz[1]-0.5*prim->width, prim->width,prim->width); break; case GL2PS_LINE : gl2psPrintPGFColor(prim->verts[0].rgba); if(gl2ps->lastlinewidth != prim->width){ gl2ps->lastlinewidth = prim->width; fprintf(gl2ps->stream, "\\pgfsetlinewidth{%fpt}\n", gl2ps->lastlinewidth); } gl2psPrintPGFDash(prim->pattern, prim->factor); fprintf(gl2ps->stream, "\\pgfpathmoveto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgflineto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgfusepath{stroke}\n", prim->verts[1].xyz[0], prim->verts[1].xyz[1], prim->verts[0].xyz[0], prim->verts[0].xyz[1]); break; case GL2PS_TRIANGLE : if(gl2ps->lastlinewidth != 0){ gl2ps->lastlinewidth = 0; fprintf(gl2ps->stream, "\\pgfsetlinewidth{0.01pt}\n"); } gl2psPrintPGFColor(prim->verts[0].rgba); fprintf(gl2ps->stream, "\\pgfpathmoveto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgflineto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgflineto{\\pgfpoint{%fpt}{%fpt}}\n" "\\pgfpathclose\n" "\\pgfusepath{fill,stroke}\n", prim->verts[2].xyz[0], prim->verts[2].xyz[1], prim->verts[1].xyz[0], prim->verts[1].xyz[1], prim->verts[0].xyz[0], prim->verts[0].xyz[1]); break; case GL2PS_TEXT : fprintf(gl2ps->stream, "{\n\\pgftransformshift{\\pgfpoint{%fpt}{%fpt}}\n", prim->verts[0].xyz[0], prim->verts[0].xyz[1]); if(prim->data.text->angle) fprintf(gl2ps->stream, "\\pgftransformrotate{%f}{", prim->data.text->angle); fprintf(gl2ps->stream, "\\pgfnode{rectangle}{%s}{\\fontsize{%d}{0}\\selectfont", gl2psPGFTextAlignment(prim->data.text->alignment), prim->data.text->fontsize); fprintf(gl2ps->stream, "\\textcolor[rgb]{%g,%g,%g}{{%s}}", prim->verts[0].rgba[0], prim->verts[0].rgba[1], prim->verts[0].rgba[2], prim->data.text->str); fprintf(gl2ps->stream, "}{}{\\pgfusepath{discard}}}\n"); break; case GL2PS_SPECIAL : /* alignment contains the format for which the special output text is intended */ if (prim->data.text->alignment == GL2PS_PGF) fprintf(gl2ps->stream, "%s\n", prim->data.text->str); break; default : break; } } static void gl2psPrintPGFFooter(void) { fprintf(gl2ps->stream, "\\end{pgfpicture}\n"); } static void gl2psPrintPGFBeginViewport(GLint viewport[4]) { GLint idx; GLfloat rgba[4]; int x = viewport[0], y = viewport[1], w = viewport[2], h = viewport[3]; glRenderMode(GL_FEEDBACK); if(gl2ps->header){ gl2psPrintPGFHeader(); gl2ps->header = GL_FALSE; } fprintf(gl2ps->stream, "\\begin{pgfscope}\n"); if(gl2ps->options & GL2PS_DRAW_BACKGROUND){ if(gl2ps->colormode == GL_RGBA || gl2ps->colorsize == 0){ glGetFloatv(GL_COLOR_CLEAR_VALUE, rgba); } else{ glGetIntegerv(GL_INDEX_CLEAR_VALUE, &idx); rgba[0] = gl2ps->colormap[idx][0]; rgba[1] = gl2ps->colormap[idx][1]; rgba[2] = gl2ps->colormap[idx][2]; rgba[3] = 1.0F; } gl2psPrintPGFColor(rgba); fprintf(gl2ps->stream, "\\pgfpathrectangle{\\pgfpoint{%dpt}{%dpt}}" "{\\pgfpoint{%dpt}{%dpt}}\n" "\\pgfusepath{fill}\n", x, y, w, h); } fprintf(gl2ps->stream, "\\pgfpathrectangle{\\pgfpoint{%dpt}{%dpt}}" "{\\pgfpoint{%dpt}{%dpt}}\n" "\\pgfusepath{clip}\n", x, y, w, h); } static GLint gl2psPrintPGFEndViewport(void) { GLint res; res = gl2psPrintPrimitives(); fprintf(gl2ps->stream, "\\end{pgfscope}\n"); return res; } static void gl2psPrintPGFFinalPrimitive(void) { } /* definition of the PGF backend */ static GL2PSbackend gl2psPGF = { gl2psPrintPGFHeader, gl2psPrintPGFFooter, gl2psPrintPGFBeginViewport, gl2psPrintPGFEndViewport, gl2psPrintPGFPrimitive, gl2psPrintPGFFinalPrimitive, "tex", "PGF Latex Graphics" }; /********************************************************************* * * General primitive printing routine * *********************************************************************/ /* Warning: the ordering of the backends must match the format #defines in gl2ps.h */ static GL2PSbackend *gl2psbackends[] = { &gl2psPS, /* 0 */ &gl2psEPS, /* 1 */ &gl2psTEX, /* 2 */ &gl2psPDF, /* 3 */ &gl2psSVG, /* 4 */ &gl2psPGF /* 5 */ }; static void gl2psComputeTightBoundingBox(void *data) { GL2PSprimitive *prim; int i; prim = *(GL2PSprimitive**)data; for(i = 0; i < prim->numverts; i++){ if(prim->verts[i].xyz[0] < gl2ps->viewport[0]) gl2ps->viewport[0] = (GLint)prim->verts[i].xyz[0]; if(prim->verts[i].xyz[0] > gl2ps->viewport[2]) gl2ps->viewport[2] = (GLint)(prim->verts[i].xyz[0] + 0.5F); if(prim->verts[i].xyz[1] < gl2ps->viewport[1]) gl2ps->viewport[1] = (GLint)prim->verts[i].xyz[1]; if(prim->verts[i].xyz[1] > gl2ps->viewport[3]) gl2ps->viewport[3] = (GLint)(prim->verts[i].xyz[1] + 0.5F); } } static GLint gl2psPrintPrimitives(void) { GL2PSbsptree *root; GL2PSxyz eye = {0.0F, 0.0F, 100.0F * GL2PS_ZSCALE}; GLint used; used = glRenderMode(GL_RENDER); if(used < 0){ gl2psMsg(GL2PS_INFO, "OpenGL feedback buffer overflow"); return GL2PS_OVERFLOW; } if(used > 0) gl2psParseFeedbackBuffer(used); gl2psRescaleAndOffset(); if(gl2ps->header){ if(gl2psListNbr(gl2ps->primitives) && (gl2ps->options & GL2PS_TIGHT_BOUNDING_BOX)){ gl2ps->viewport[0] = gl2ps->viewport[1] = 100000; gl2ps->viewport[2] = gl2ps->viewport[3] = -100000; gl2psListAction(gl2ps->primitives, gl2psComputeTightBoundingBox); } (gl2psbackends[gl2ps->format]->printHeader)(); gl2ps->header = GL_FALSE; } if(!gl2psListNbr(gl2ps->primitives)){ /* empty feedback buffer and/or nothing else to print */ return GL2PS_NO_FEEDBACK; } switch(gl2ps->sort){ case GL2PS_NO_SORT : gl2psListAction(gl2ps->primitives, gl2psbackends[gl2ps->format]->printPrimitive); gl2psListAction(gl2ps->primitives, gl2psFreePrimitive); /* reset the primitive list, waiting for the next viewport */ gl2psListReset(gl2ps->primitives); break; case GL2PS_SIMPLE_SORT : gl2psListSort(gl2ps->primitives, gl2psCompareDepth); if(gl2ps->options & GL2PS_OCCLUSION_CULL){ gl2psListActionInverse(gl2ps->primitives, gl2psAddInImageTree); gl2psFreeBspImageTree(&gl2ps->imagetree); } gl2psListAction(gl2ps->primitives, gl2psbackends[gl2ps->format]->printPrimitive); gl2psListAction(gl2ps->primitives, gl2psFreePrimitive); /* reset the primitive list, waiting for the next viewport */ gl2psListReset(gl2ps->primitives); break; case GL2PS_BSP_SORT : root = (GL2PSbsptree*)gl2psMalloc(sizeof(GL2PSbsptree)); gl2psBuildBspTree(root, gl2ps->primitives); if(GL_TRUE == gl2ps->boundary) gl2psBuildPolygonBoundary(root); if(gl2ps->options & GL2PS_OCCLUSION_CULL){ gl2psTraverseBspTree(root, eye, -GL2PS_EPSILON, gl2psLess, gl2psAddInImageTree, 1); gl2psFreeBspImageTree(&gl2ps->imagetree); } gl2psTraverseBspTree(root, eye, GL2PS_EPSILON, gl2psGreater, gl2psbackends[gl2ps->format]->printPrimitive, 0); gl2psFreeBspTree(&root); /* reallocate the primitive list (it's been deleted by gl2psBuildBspTree) in case there is another viewport */ gl2ps->primitives = gl2psListCreate(500, 500, sizeof(GL2PSprimitive*)); break; } gl2psbackends[gl2ps->format]->printFinalPrimitive(); return GL2PS_SUCCESS; } /********************************************************************* * * Public routines * *********************************************************************/ GL2PSDLL_API GLint gl2psBeginPage(const char *title, const char *producer, GLint viewport[4], GLint format, GLint sort, GLint options, GLint colormode, GLint colorsize, GL2PSrgba *colormap, GLint nr, GLint ng, GLint nb, GLint buffersize, FILE *stream, const char *filename) { GLint idx; int i; if(gl2ps){ gl2psMsg(GL2PS_ERROR, "gl2psBeginPage called in wrong program state"); return GL2PS_ERROR; } gl2ps = (GL2PScontext*)gl2psMalloc(sizeof(GL2PScontext)); if(format >= 0 && format < (GLint)(sizeof(gl2psbackends) / sizeof(gl2psbackends[0]))){ gl2ps->format = format; } else { gl2psMsg(GL2PS_ERROR, "Unknown output format: %d", format); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } switch(sort){ case GL2PS_NO_SORT : case GL2PS_SIMPLE_SORT : case GL2PS_BSP_SORT : gl2ps->sort = sort; break; default : gl2psMsg(GL2PS_ERROR, "Unknown sorting algorithm: %d", sort); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } if(stream){ gl2ps->stream = stream; } else{ gl2psMsg(GL2PS_ERROR, "Bad file pointer"); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } gl2ps->header = GL_TRUE; gl2ps->maxbestroot = 10; gl2ps->options = options; gl2ps->compress = NULL; gl2ps->imagemap_head = NULL; gl2ps->imagemap_tail = NULL; if(gl2ps->options & GL2PS_USE_CURRENT_VIEWPORT){ glGetIntegerv(GL_VIEWPORT, gl2ps->viewport); } else{ for(i = 0; i < 4; i++){ gl2ps->viewport[i] = viewport[i]; } } if(!gl2ps->viewport[2] || !gl2ps->viewport[3]){ gl2psMsg(GL2PS_ERROR, "Incorrect viewport (x=%d, y=%d, width=%d, height=%d)", gl2ps->viewport[0], gl2ps->viewport[1], gl2ps->viewport[2], gl2ps->viewport[3]); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } gl2ps->threshold[0] = nr ? 1.0F / (GLfloat)nr : 0.064F; gl2ps->threshold[1] = ng ? 1.0F / (GLfloat)ng : 0.034F; gl2ps->threshold[2] = nb ? 1.0F / (GLfloat)nb : 0.100F; gl2ps->colormode = colormode; gl2ps->buffersize = buffersize > 0 ? buffersize : 2048 * 2048; for(i = 0; i < 3; i++){ gl2ps->lastvertex.xyz[i] = -1.0F; } for(i = 0; i < 4; i++){ gl2ps->lastvertex.rgba[i] = -1.0F; gl2ps->lastrgba[i] = -1.0F; } gl2ps->lastlinewidth = -1.0F; gl2ps->lastpattern = 0; gl2ps->lastfactor = 0; gl2ps->imagetree = NULL; gl2ps->primitivetoadd = NULL; gl2ps->zerosurfacearea = GL_FALSE; gl2ps->pdfprimlist = NULL; gl2ps->pdfgrouplist = NULL; gl2ps->xreflist = NULL; /* get default blending mode from current OpenGL state (enabled by default for SVG) */ gl2ps->blending = (gl2ps->format == GL2PS_SVG) ? GL_TRUE : glIsEnabled(GL_BLEND); glGetIntegerv(GL_BLEND_SRC, &gl2ps->blendfunc[0]); glGetIntegerv(GL_BLEND_DST, &gl2ps->blendfunc[1]); if(gl2ps->colormode == GL_RGBA){ gl2ps->colorsize = 0; gl2ps->colormap = NULL; glGetFloatv(GL_COLOR_CLEAR_VALUE, gl2ps->bgcolor); } else if(gl2ps->colormode == GL_COLOR_INDEX){ if(!colorsize || !colormap){ gl2psMsg(GL2PS_ERROR, "Missing colormap for GL_COLOR_INDEX rendering"); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } gl2ps->colorsize = colorsize; gl2ps->colormap = (GL2PSrgba*)gl2psMalloc(gl2ps->colorsize * sizeof(GL2PSrgba)); memcpy(gl2ps->colormap, colormap, gl2ps->colorsize * sizeof(GL2PSrgba)); glGetIntegerv(GL_INDEX_CLEAR_VALUE, &idx); gl2ps->bgcolor[0] = gl2ps->colormap[idx][0]; gl2ps->bgcolor[1] = gl2ps->colormap[idx][1]; gl2ps->bgcolor[2] = gl2ps->colormap[idx][2]; gl2ps->bgcolor[3] = 1.0F; } else{ gl2psMsg(GL2PS_ERROR, "Unknown color mode in gl2psBeginPage"); gl2psFree(gl2ps); gl2ps = NULL; return GL2PS_ERROR; } if(!title){ gl2ps->title = (char*)gl2psMalloc(sizeof(char)); gl2ps->title[0] = '\0'; } else{ gl2ps->title = (char*)gl2psMalloc((strlen(title)+1)*sizeof(char)); strcpy(gl2ps->title, title); } if(!producer){ gl2ps->producer = (char*)gl2psMalloc(sizeof(char)); gl2ps->producer[0] = '\0'; } else{ gl2ps->producer = (char*)gl2psMalloc((strlen(producer)+1)*sizeof(char)); strcpy(gl2ps->producer, producer); } if(!filename){ gl2ps->filename = (char*)gl2psMalloc(sizeof(char)); gl2ps->filename[0] = '\0'; } else{ gl2ps->filename = (char*)gl2psMalloc((strlen(filename)+1)*sizeof(char)); strcpy(gl2ps->filename, filename); } gl2ps->primitives = gl2psListCreate(500, 500, sizeof(GL2PSprimitive*)); gl2ps->auxprimitives = gl2psListCreate(100, 100, sizeof(GL2PSprimitive*)); gl2ps->feedback = (GLfloat*)gl2psMalloc(gl2ps->buffersize * sizeof(GLfloat)); glFeedbackBuffer(gl2ps->buffersize, GL_3D_COLOR, gl2ps->feedback); glRenderMode(GL_FEEDBACK); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psEndPage(void) { GLint res; if(!gl2ps) return GL2PS_UNINITIALIZED; res = gl2psPrintPrimitives(); if(res != GL2PS_OVERFLOW) (gl2psbackends[gl2ps->format]->printFooter)(); fflush(gl2ps->stream); gl2psListDelete(gl2ps->primitives); gl2psListDelete(gl2ps->auxprimitives); gl2psFreeImagemap(gl2ps->imagemap_head); gl2psFree(gl2ps->colormap); gl2psFree(gl2ps->title); gl2psFree(gl2ps->producer); gl2psFree(gl2ps->filename); gl2psFree(gl2ps->feedback); gl2psFree(gl2ps); gl2ps = NULL; return res; } GL2PSDLL_API GLint gl2psBeginViewport(GLint viewport[4]) { if(!gl2ps) return GL2PS_UNINITIALIZED; (gl2psbackends[gl2ps->format]->beginViewport)(viewport); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psEndViewport(void) { GLint res; if(!gl2ps) return GL2PS_UNINITIALIZED; res = (gl2psbackends[gl2ps->format]->endViewport)(); /* reset last used colors, line widths */ gl2ps->lastlinewidth = -1.0F; return res; } GL2PSDLL_API GLint gl2psTextOptColor(const char *str, const char *fontname, GLshort fontsize, GLint alignment, GLfloat angle, GL2PSrgba color) { return gl2psAddText(GL2PS_TEXT, str, fontname, fontsize, alignment, angle, color); } GL2PSDLL_API GLint gl2psTextOpt(const char *str, const char *fontname, GLshort fontsize, GLint alignment, GLfloat angle) { return gl2psAddText(GL2PS_TEXT, str, fontname, fontsize, alignment, angle, NULL); } GL2PSDLL_API GLint gl2psText(const char *str, const char *fontname, GLshort fontsize) { return gl2psAddText(GL2PS_TEXT, str, fontname, fontsize, GL2PS_TEXT_BL, 0.0F, NULL); } GL2PSDLL_API GLint gl2psSpecial(GLint format, const char *str) { return gl2psAddText(GL2PS_SPECIAL, str, "", 0, format, 0.0F, NULL); } GL2PSDLL_API GLint gl2psDrawPixels(GLsizei width, GLsizei height, GLint xorig, GLint yorig, GLenum format, GLenum type, const void *pixels) { int size, i; const GLfloat *piv; GLfloat pos[4], zoom_x, zoom_y; GL2PSprimitive *prim; GLboolean valid; if(!gl2ps || !pixels) return GL2PS_UNINITIALIZED; if((width <= 0) || (height <= 0)) return GL2PS_ERROR; if(gl2ps->options & GL2PS_NO_PIXMAP) return GL2PS_SUCCESS; if((format != GL_RGB && format != GL_RGBA) || type != GL_FLOAT){ gl2psMsg(GL2PS_ERROR, "gl2psDrawPixels only implemented for " "GL_RGB/GL_RGBA, GL_FLOAT pixels"); return GL2PS_ERROR; } glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); if(GL_FALSE == valid) return GL2PS_SUCCESS; /* the primitive is culled */ glGetFloatv(GL_CURRENT_RASTER_POSITION, pos); glGetFloatv(GL_ZOOM_X, &zoom_x); glGetFloatv(GL_ZOOM_Y, &zoom_y); prim = (GL2PSprimitive*)gl2psMalloc(sizeof(GL2PSprimitive)); prim->type = GL2PS_PIXMAP; prim->boundary = 0; prim->numverts = 1; prim->verts = (GL2PSvertex*)gl2psMalloc(sizeof(GL2PSvertex)); prim->verts[0].xyz[0] = pos[0] + xorig; prim->verts[0].xyz[1] = pos[1] + yorig; prim->verts[0].xyz[2] = pos[2]; prim->culled = 0; prim->offset = 0; prim->pattern = 0; prim->factor = 0; prim->width = 1; glGetFloatv(GL_CURRENT_RASTER_COLOR, prim->verts[0].rgba); prim->data.image = (GL2PSimage*)gl2psMalloc(sizeof(GL2PSimage)); prim->data.image->width = width; prim->data.image->height = height; prim->data.image->zoom_x = zoom_x; prim->data.image->zoom_y = zoom_y; prim->data.image->format = format; prim->data.image->type = type; switch(format){ case GL_RGBA: if(gl2ps->options & GL2PS_NO_BLENDING || !gl2ps->blending){ /* special case: blending turned off */ prim->data.image->format = GL_RGB; size = height * width * 3; prim->data.image->pixels = (GLfloat*)gl2psMalloc(size * sizeof(GLfloat)); piv = (const GLfloat*)pixels; for(i = 0; i < size; ++i, ++piv){ prim->data.image->pixels[i] = *piv; if(!((i + 1) % 3)) ++piv; } } else{ size = height * width * 4; prim->data.image->pixels = (GLfloat*)gl2psMalloc(size * sizeof(GLfloat)); memcpy(prim->data.image->pixels, pixels, size * sizeof(GLfloat)); } break; case GL_RGB: default: size = height * width * 3; prim->data.image->pixels = (GLfloat*)gl2psMalloc(size * sizeof(GLfloat)); memcpy(prim->data.image->pixels, pixels, size * sizeof(GLfloat)); break; } gl2psListAdd(gl2ps->auxprimitives, &prim); glPassThrough(GL2PS_DRAW_PIXELS_TOKEN); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psDrawImageMap(GLsizei width, GLsizei height, const GLfloat position[3], const unsigned char *imagemap){ int size, i; int sizeoffloat = sizeof(GLfloat); if(!gl2ps || !imagemap) return GL2PS_UNINITIALIZED; if((width <= 0) || (height <= 0)) return GL2PS_ERROR; size = height + height * ((width - 1) / 8); glPassThrough(GL2PS_IMAGEMAP_TOKEN); glBegin(GL_POINTS); glVertex3f(position[0], position[1],position[2]); glEnd(); glPassThrough((GLfloat)width); glPassThrough((GLfloat)height); for(i = 0; i < size; i += sizeoffloat){ const float *value = (const float*)imagemap; glPassThrough(*value); imagemap += sizeoffloat; } return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psEnable(GLint mode) { GLint tmp; if(!gl2ps) return GL2PS_UNINITIALIZED; switch(mode){ case GL2PS_POLYGON_OFFSET_FILL : glPassThrough(GL2PS_BEGIN_OFFSET_TOKEN); glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &gl2ps->offset[0]); glGetFloatv(GL_POLYGON_OFFSET_UNITS, &gl2ps->offset[1]); break; case GL2PS_POLYGON_BOUNDARY : glPassThrough(GL2PS_BEGIN_BOUNDARY_TOKEN); break; case GL2PS_LINE_STIPPLE : glPassThrough(GL2PS_BEGIN_STIPPLE_TOKEN); glGetIntegerv(GL_LINE_STIPPLE_PATTERN, &tmp); glPassThrough((GLfloat)tmp); glGetIntegerv(GL_LINE_STIPPLE_REPEAT, &tmp); glPassThrough((GLfloat)tmp); break; case GL2PS_BLEND : glPassThrough(GL2PS_BEGIN_BLEND_TOKEN); break; default : gl2psMsg(GL2PS_WARNING, "Unknown mode in gl2psEnable: %d", mode); return GL2PS_WARNING; } return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psDisable(GLint mode) { if(!gl2ps) return GL2PS_UNINITIALIZED; switch(mode){ case GL2PS_POLYGON_OFFSET_FILL : glPassThrough(GL2PS_END_OFFSET_TOKEN); break; case GL2PS_POLYGON_BOUNDARY : glPassThrough(GL2PS_END_BOUNDARY_TOKEN); break; case GL2PS_LINE_STIPPLE : glPassThrough(GL2PS_END_STIPPLE_TOKEN); break; case GL2PS_BLEND : glPassThrough(GL2PS_END_BLEND_TOKEN); break; default : gl2psMsg(GL2PS_WARNING, "Unknown mode in gl2psDisable: %d", mode); return GL2PS_WARNING; } return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psPointSize(GLfloat value) { if(!gl2ps) return GL2PS_UNINITIALIZED; glPassThrough(GL2PS_POINT_SIZE_TOKEN); glPassThrough(value); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psLineWidth(GLfloat value) { if(!gl2ps) return GL2PS_UNINITIALIZED; glPassThrough(GL2PS_LINE_WIDTH_TOKEN); glPassThrough(value); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psBlendFunc(GLenum sfactor, GLenum dfactor) { if(!gl2ps) return GL2PS_UNINITIALIZED; if(GL_FALSE == gl2psSupportedBlendMode(sfactor, dfactor)) return GL2PS_WARNING; glPassThrough(GL2PS_SRC_BLEND_TOKEN); glPassThrough((GLfloat)sfactor); glPassThrough(GL2PS_DST_BLEND_TOKEN); glPassThrough((GLfloat)dfactor); return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psSetOptions(GLint options) { if(!gl2ps) return GL2PS_UNINITIALIZED; gl2ps->options = options; return GL2PS_SUCCESS; } GL2PSDLL_API GLint gl2psGetOptions(GLint *options) { if(!gl2ps) { *options = 0; return GL2PS_UNINITIALIZED; } *options = gl2ps->options; return GL2PS_SUCCESS; } GL2PSDLL_API const char *gl2psGetFileExtension(GLint format) { if(format >= 0 && format < (GLint)(sizeof(gl2psbackends) / sizeof(gl2psbackends[0]))) return gl2psbackends[format]->file_extension; else return "Unknown format"; } GL2PSDLL_API const char *gl2psGetFormatDescription(GLint format) { if(format >= 0 && format < (GLint)(sizeof(gl2psbackends) / sizeof(gl2psbackends[0]))) return gl2psbackends[format]->description; else return "Unknown format"; } GL2PSDLL_API GLint gl2psGetFileFormat() { return gl2ps->format; } avogadro-1.1.1/libavogadro/src/extensions/gl2ps/gl2psTest.c0000644000175000001440000004617612250371054023103 0ustar marcususers/* * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2012 Christophe Geuzaine * * This program is free software; you can redistribute it and/or * modify it under the terms of either: * * a) the GNU Library General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your * option) any later version; or * * b) the GL2PS License as published by Christophe Geuzaine, either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either * the GNU Library General Public License or the GL2PS License for * more details. * * You should have received a copy of the GNU Library General Public * License along with this library in the file named "COPYING.LGPL"; * if not, write to the Free Software Foundation, Inc., 51 Franklin * Street, Fifth Floor, Boston, MA 02110-1301, USA. * * You should have received a copy of the GL2PS License with this * library in the file named "COPYING.GL2PS"; if not, I will be glad * to provide one. * * For the latest info about gl2ps and a full list of contributors, * see http://www.geuz.org/gl2ps/. * * Please report all bugs and problems to . */ /* To compile on Linux: gcc gl2psTest.c gl2ps.c -lglut -lGL -lGLU -lX11 -lm To compile on MacOSX: gcc gl2psTest.c gl2ps.c -framework OpenGL -framework GLUT -framework Cocoa (To enable file compression you must add "-DHAVE_ZLIB -lz" to the commands above. To enable embedded bitmaps in SVG files you must add "-DHAVE_LIBPNG -DHAVE_ZLIB -lpng -lz".) */ #ifdef _MSC_VER /* MSVC Compiler */ #pragma comment(linker, "/entry:\"mainCRTStartup\"") #endif #include "gl2ps.h" #include #ifdef __APPLE__ # include #else # include #endif static const char *format_string = "Postscript"; static float rotation = -58.; static GLsizei window_w = 0; static GLsizei window_h = 0; static GLboolean display_multi = GL_TRUE; static GLboolean blend = GL_FALSE; static GLboolean teapot = GL_FALSE; static const char *pixmap[] = { "****************************************************************", "*..............................................................*", "*..................++++++++++++++++++++++++++..................*", "*.............+++++++++++++++++++++++++++++++++++++............*", "*.......++++++++++++aaaaaaaaaaaaaaaaaaaaaaaa++++++++++++.......*", "*.......++++++aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++++++.......*", "*.......++aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++.......*", "*.......++aaaa++++aa+aaaaaaaa++++aaa++++++aaa+++++aaaa++.......*", "*.......++aaa+aaaa+a+aaaaaaa+aaaa+aa+aaaaa+a+aaaaa+aaa++.......*", "*.......++aa+aaaaaaa+aaaaaaaaaaa+aaa+aaaaa+a+aaaaaaaaa++.......*", "*.......++aa+aaa+++a+aaaaaaaaaa+aaaa++++++aaa+++++aaaa++.......*", "*.......++aa+aaaaa+a+aaaaaaaaa+aaaaa+aaaaaaaaaaaaa+aaa++.......*", "*.......++aaa+aaaa+a+aaaaaaaa+aaaaaa+aaaaaaa+aaaaa+aaa++.......*", "*.......++aaaa+++++a++++++aa++++++aa+aaaaaaaa+++++aaaa++.......*", "*.......++aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa++.......*", "*.......++aaaaaaaaa++++++++++++++++++++++++++aaaaaaaaa++.......*", "*.......++aaa+++++++@@@@@@@@@@@+++++++++++++++++++aaaa++.......*", "*.......++++++@@+@@@+@@@++@@@@@+++++++++++++++++++++++++.......*", "*.......++@@@@@+@@@+@@@+@@@@+@@+++++++++++++++++++++++++.......*", "*.......++@@@@+@@@+@@+++++++@@@+++++++++++++++++++++++++.......*", "*.......++@@@@+++++++@@@@@@++@@++#####################++.......*", "*.......++@+++++@@@@@@@@@@@@@@@++#####################++.......*", "*.......++@+++@@@@@@@@@@@@@@@@@++#####################++.......*", "*.......++@++@@@@@@@+@@+@@@@@@@++#####################++.......*", "*.......++@@@@@+@@@+@@+@@@@@@@@++#####################++.......*", "*.......++@@@@+@@@+@@+@@++++++++++++++++++++++++++++++++.......*", "*.......++@@@@+@+++++++++@++++@+@+@+++++++++++++++++++++.......*", "*.......++@@@@+++@@@@@@@+@++@+++@+@+@+@+++++++++++++++++.......*", "*.......++@++++@@@@@@@@@@+@+++@+@+@+++++++++++++++++++++.......*", "*.......++@+++@@@@@@@@@@+@@@@@@@@@@@@@@+++++++++++++++++.......*", "*.......++@++@@@@@@+@@+@+@@@+++@@@@@@@@+++++++++++++++++.......*", "*.......++@@@@@+@@+@@+@@+@@+++++@@@@@@@+##############++.......*", "*.......++@@@@+@@+@@+@@++@@+@+++@@@@@+@+##############++.......*", "*.......++@@@@+@+++++++@+@@@@+++@@@@++@+##############++.......*", "*.......++@++++++@@@@@@++@@@@+++@@@@++@+##############++.......*", "*.......++@+++@@@@@@@@@@+@@@+++++@@@+@@+##############++.......*", "*.......++@++@@@@@@@@@@@+@+++++++++++@@+##############++.......*", "*.......+++++++++++++++++@+@+++++++++@@+++++++++++++++++.......*", "*.......+++++++++++++++++@+@+@@@@++++@@+@@@@@@@@@@@@@@++.......*", "*.......+++++++++++++++++@@@+@@@@@+@+@@+@@@+@@+@@@@@@@++.......*", "*........++++++++++++++++@@@@+@@@++@++@+@@+@@+@@@+@@@++........*", "*........++++++++++++++++@@@@@@@@+@@+@@+@+@@+@@@+@@@@++........*", "*........+++++++++++++++++@@@@@@+@@+@@+@++++++++++@@@++........*", "*.........++##############+@@@@@@@@@@++++@@@@@@@@++@++.........*", "*.........++###############+@@@@@@@@++++@@@@@@@@@@@@++.........*", "*..........++###############++++++++@@@@@@@+@@+@@@@++..........*", "*..........++##################++@@@@@+@@@+@@+@@+@@++..........*", "*...........++#################++@@@@+@@@+@@+@@+@@++...........*", "*...........++#################++@@@+@@++++++++@@@++...........*", "*............++++++++++++++++++++@@@++++@@@@@@++@++............*", "*.............+++++++++++++++++++@@+++@@@@@@@@@@@+.............*", "*.............+++++++++++++++++++@+++@@@@@@@@@@@++.............*", "*..............++++++++++++++++++@++@@@@+@@@@@@++..............*", "*...............+++++++++++++++++@@@+@@+@@+@@@++...............*", "*................++++++++++++++++@@+@@+@@+@@@++................*", "*.................++###########++@@+++++++@@++.................*", "*..................++##########++@+++@@@@+@++..................*", "*...................++#########++@++@@@@@@++...................*", "*....................+++#######++@++@@@@+++....................*", "*.....................++++#####++@@@@@++++.....................*", "*.......................++++###++@@@++++.......................*", "*.........................++++#++@++++.........................*", "*...........................++++++++...........................*", "*.............................++++.............................*", "*..............................................................*", "****************************************************************"}; void triangles() { /* two intersecting triangles */ glBegin(GL_TRIANGLES); glColor3f(1., 0., 0.); glVertex3f(-1., 0.9, 0.); glColor4f(1., 1., 0., 0.1); glVertex3f(-1., 0., 0.); glColor4f(1., 0., 1., 1.0); glVertex3f(1., 0., 0.2); glColor3f(0., 1., 0.); glVertex3f(1., 0., 0.); glColor3f(0., 1., 1.); glVertex3f(1., 0.5, 0.); glColor3f(0., 1., 1.); glVertex3f(-1., 0.5, 0.1); glEnd(); } void extras() { glColor3f(1., 0., 0.); glPointSize(1.); gl2psPointSize(1.); glBegin(GL_POINTS); glVertex3f(-1., 1.0, 0.); glEnd(); glPointSize(3.); gl2psPointSize(3.); glBegin(GL_POINTS); glVertex3f(-0.8, 1.0, 0.); glEnd(); glPointSize(5.); gl2psPointSize(5.); glBegin(GL_POINTS); glVertex3f(-0.6, 1.0, 0.); glEnd(); glPointSize(7.); gl2psPointSize(7.); glBegin(GL_POINTS); glVertex3f(-0.4, 1.0, 0.); glEnd(); glLineWidth(1.); gl2psLineWidth(1.); glBegin(GL_LINES); glVertex3f(-0.2, 1.05, 0.); glVertex3f(0.2, 1.05, 0.); glEnd(); glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0x087F); gl2psEnable(GL2PS_LINE_STIPPLE); glBegin(GL_LINES); glVertex3f(-0.2, 0.95, 0.); glVertex3f(0.2, 0.95, 0.); glEnd(); glDisable(GL_LINE_STIPPLE); gl2psDisable(GL2PS_LINE_STIPPLE); glLineWidth(3.); gl2psLineWidth(3.); glBegin(GL_LINES); glVertex3f(0.4, 1.05, 0.); glVertex3f(0.8, 1.05, 0.); glEnd(); glEnable(GL_LINE_STIPPLE); glLineStipple(2, 0x0F0F); /* glLineStipple(1, 0xAAAA); */ gl2psEnable(GL2PS_LINE_STIPPLE); glBegin(GL_LINES); glVertex3f(0.4, 0.95, 0.); glVertex3f(0.8, 0.95, 0.); glEnd(); glDisable(GL_LINE_STIPPLE); gl2psDisable(GL2PS_LINE_STIPPLE); glPointSize(1); gl2psPointSize(1); glLineWidth(1); gl2psLineWidth(1); } void objects() { glPushMatrix(); glEnable(GL_LIGHTING); glRotatef(rotation, 2., 0., 1.); glColor4d(0.2, 0.2, 0.9, 0.2); if(teapot == GL_TRUE){ glutSolidTeapot(0.7); } else{ glutSolidTorus(0.3, 0.6, 20, 20); } glDisable(GL_LIGHTING); glPopMatrix(); } void printstring(const char *string, float angle) { unsigned int i; const char *fonts[] = { "Times-Roman", "Times-Bold", "Times-Italic", "Times-BoldItalic", "Helvetica", "Helvetica-Bold", "Helvetica-Oblique", "Helvetica-BoldOblique", "Courier", "Courier-Bold", "Courier-Oblique", "Courier-BoldOblique", "Symbol", "ZapfDingbats" }; /* call gl2psText before the glut function since glutBitmapCharacter changes the raster position... */ gl2psTextOpt(string, fonts[4], 12, GL2PS_TEXT_BL, angle); for (i = 0; i < strlen(string); i++) glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, string[i]); } void text() { double x = -1.25, y = -0.33, dy = 0.13; glColor3f(1., 1., 0.); glRasterPos2d(x, y); printstring("Press:", 0.); y -= dy; glRasterPos2d(x, y); printstring(" p: to change the print format (PS, EPS, PDF, ...)", 0.); y -= dy; glRasterPos2d(x, y); printstring(" s: to save the images", 0.); y -= dy; glRasterPos2d(x, y); printstring(" t: to alternate between teapot and torus", 0.); y -= dy; glRasterPos2d(x, y); printstring(" v: to alternate between single and multiple viewport modes", 0.); y -= dy; glRasterPos2d(x, y); printstring(" b: to change the blending mode (transparency)", 0.); y -= dy; glRasterPos2d(x, y); printstring(" q: to quit", 0.), 0.; y -= dy; glRasterPos2d(x, y); printstring("Click and move the mouse to rotate the objects", 0.); glRasterPos2d(0, 0.75); printstring("rotated!", 45.); glRasterPos2d(x, 1.15); printstring(format_string, 0.); gl2psSpecial(GL2PS_TEX, "% This should only be printed in LaTeX output!"); } void cube() { glColor3d (0.0,1.0,0.); glBegin(GL_POLYGON); glVertex3d( 0.5,-0.5,-0.5); glColor4d (0.0,1.0,0.,0.2); glVertex3d( 0.5, 0.5,-0.5); glVertex3d(-0.5, 0.5,-0.5); glColor4d (0.0,1.0,0.,1); glVertex3d(-0.5,-0.5,-0.5); glEnd(); glColor3d (1.0,0.0,0.); glBegin(GL_POLYGON); glColor4d (1.0,0.0,0.,0.1); glVertex3d( 0.5,-0.5,0.5); glColor4d (1.0,0.5,1.,0.9); glVertex3d( 0.5, 0.5,0.5); glVertex3d(-0.5, 0.5,0.5); glColor4d (1.0,0.5,1.,0.1); glVertex3d(-0.5,-0.5,0.5); glEnd(); glLineWidth(4.0); glColor3d (1.0,1.0,0.); glBegin(GL_LINES); glVertex3d( 0.5,-0.5, 0.5); glVertex3d( 0.5,-0.5,-0.5); glVertex3d( 0.5, 0.5, 0.5); glVertex3d( 0.5, 0.5,-0.5); glVertex3d(-0.5, 0.5, 0.5); glVertex3d(-0.5, 0.5,-0.5); glVertex3d(-0.5,-0.5, 0.5); glVertex3d(-0.5,-0.5,-0.5); glEnd(); } void image(float x, float y, GLboolean opaque) { int w = 64, h = 66, row, col, pos = 0; float *pixels, r = 0., g = 0., b = 0.; /* Fill a pixmap (each pixel contains three floats defining an RGB color) */ pixels = (opaque == GL_TRUE) ? (float*)malloc(3 * w * h * sizeof(float)) : (float*)malloc(4 * w * h * sizeof(float)); for(row = h-1; row >= 0; row--){ for(col = 0; col < w; col++){ switch(pixmap[row][col]){ case '.' : r = 255.; g = 255.; b = 255.; break; case '+' : r = 0. ; g = 0. ; b = 0. ; break; case '@' : r = 255.; g = 209.; b = 0. ; break; case '#' : r = 255.; g = 0. ; b = 0. ; break; case 'a' : r = 255.; g = 209.; b = 0. ; break; case '*' : r = 0.; g = 0. ; b = 20. ; break; } r /= 255.; g /= 255.; b /= 255.; pixels[pos] = r; pos++; pixels[pos] = g; pos++; pixels[pos] = b; pos++; if(opaque) continue; switch(pixmap[row][col]){ case '.' : pixels[pos] = col / (float)w ; break; case 'a' : pixels[pos] = 1 - col / ((float)w - 7) ; break; default : pixels[pos] = 1. ; break; } pos++; } } glRasterPos2f(x, y); /* call gl2psDrawPixels first since glDrawPixels can change the raster position */ if(opaque){ gl2psDrawPixels((GLsizei)w, (GLsizei)h, 0, 0, GL_RGB, GL_FLOAT, pixels); glDrawPixels((GLsizei)w, (GLsizei)h, GL_RGB, GL_FLOAT, pixels); } else{ gl2psDrawPixels((GLsizei)w, (GLsizei)h, 0, 0, GL_RGBA, GL_FLOAT, pixels); glDrawPixels((GLsizei)w, (GLsizei)h, GL_RGBA, GL_FLOAT, pixels); } free(pixels); } /* A simple drawing function, using the default viewport */ void draw_single() { glScissor(0, 0, window_w, window_h); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); triangles(); extras(); objects(); text(); glFlush(); } /* A more complex drawing function, using 2 separate viewports */ void draw_multi() { GLint viewport[4]; glScissor(0, 0, window_w, window_h); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* First viewport with triangles, teapot or torus, etc. */ glViewport((GLint)(window_w * 0.05), (GLint)(window_h * 0.525), (GLsizei)(window_w * 0.9), (GLsizei)(window_h * 0.45)); glScissor((GLint)(window_w * 0.05), (GLint)(window_h * 0.525), (GLsizei)(window_w * 0.9), (GLsizei)(window_h * 0.45)); glClearColor(0.2, 0.2, 0.2, 0.); glGetIntegerv(GL_VIEWPORT, viewport); gl2psBeginViewport(viewport); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.3,1.3, -1.3,1.3, -1.3,1.3); glMatrixMode(GL_MODELVIEW); objects(); triangles(); extras(); text(); gl2psEndViewport(); /* Second viewport with cube, image, etc. */ glViewport((GLint)(window_w * 0.05), (GLint)(window_h * 0.025), (GLsizei)(window_w * 0.9), (GLsizei)(window_h * 0.45)); glScissor((GLint)(window_w * 0.05), (GLint)(window_h * 0.025), (GLsizei)(window_w * 0.9), (GLsizei)(window_h * 0.45)); glClearColor(0.8, 0.8, 0.8, 0.); glGetIntegerv(GL_VIEWPORT, viewport); gl2psBeginViewport(viewport); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.3,1.3, -1.3,1.3, -1.3,1.3); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glRotatef(rotation, 1., 1., 1.); image(-0.8, -0.3, GL_TRUE); cube(); extras(); image(-0.8, 0.4, GL_FALSE); glPopMatrix(); gl2psEndViewport(); glClearColor(0.5, 0.5, 0.5, 0.); glFlush(); } void display() { GLfloat spec[4] = {0.6, 0.6, 0.6, 1.0}; glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glShadeModel(GL_SMOOTH); glEnable(GL_LIGHT0); glEnable(GL_SCISSOR_TEST); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 60); if(blend){ glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } else{ glDisable(GL_BLEND); } if(display_multi == GL_TRUE){ draw_multi(); } else{ draw_single(); } } void reshape(int w, int h) { window_w = w; window_h = h; glViewport(0, 0, (GLsizei)window_w, (GLsizei)window_h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.3,1.3, -1.3,1.3, -1.3,1.3); glMatrixMode(GL_MODELVIEW); glClearColor(0.5, 0.5, 0.5, 0.); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } void writefile(int format, int sort, int options, int nbcol, const char *filename, const char *extension) { FILE *fp; char file[256]; int state = GL2PS_OVERFLOW, buffsize = 0; GLint viewport[4]; strcpy(file, filename); strcat(file, "."); strcat(file, extension); viewport[0] = 0; viewport[1] = 0; viewport[2] = window_w; viewport[3] = window_h; fp = fopen(file, "wb"); if(!fp){ printf("Unable to open file %s for writing\n", file); exit(1); } printf("Saving image to file %s... ", file); fflush(stdout); while(state == GL2PS_OVERFLOW){ buffsize += 1024*1024; gl2psBeginPage(file, "gl2psTest", viewport, format, sort, options, GL_RGBA, 0, NULL, nbcol, nbcol, nbcol, buffsize, fp, file); display(); state = gl2psEndPage(); } fclose(fp); printf("Done!\n"); fflush(stdout); } void keyboard(unsigned char key, int x, int y) { int opt; char ext[32]; static int format = GL2PS_PS; switch(key){ case 27: case 'q': exit(0); break; case 't': teapot = (teapot) ? GL_FALSE : GL_TRUE; display(); break; case 'p': if (format == GL2PS_PS) format = GL2PS_EPS; else if(format == GL2PS_EPS) format = GL2PS_TEX; else if(format == GL2PS_TEX) format = GL2PS_PDF; else if(format == GL2PS_PDF) format = GL2PS_SVG; else if(format == GL2PS_SVG) format = GL2PS_PGF; else format = GL2PS_PS; format_string = gl2psGetFormatDescription(format); display(); break; case 'b': blend = !blend; display(); break; case 'v': display_multi = display_multi ? GL_FALSE : GL_TRUE; reshape(window_w, window_h); display(); break; case 's': strcpy(ext, gl2psGetFileExtension(format)); opt = GL2PS_DRAW_BACKGROUND; writefile(format, GL2PS_SIMPLE_SORT, opt, 0, "outSimple", ext); opt = GL2PS_DRAW_BACKGROUND | GL2PS_OCCLUSION_CULL; writefile(format, GL2PS_SIMPLE_SORT, opt, 0, "outSimpleCulled", ext); opt = GL2PS_DRAW_BACKGROUND | GL2PS_NO_PS3_SHADING | GL2PS_TIGHT_BOUNDING_BOX; writefile(format, GL2PS_SIMPLE_SORT, opt, 2, "outSimpleShading2", ext); writefile(format, GL2PS_SIMPLE_SORT, opt, 8, "outSimpleShading8", ext); writefile(format, GL2PS_SIMPLE_SORT, opt, 16, "outSimpleShading16", ext); opt = GL2PS_NO_TEXT; writefile(format, GL2PS_SIMPLE_SORT, opt, 0, "outSimpleNoText", ext); opt = GL2PS_DRAW_BACKGROUND | GL2PS_BEST_ROOT; writefile(format, GL2PS_BSP_SORT, opt, 0, "outBsp", ext); opt = GL2PS_DRAW_BACKGROUND | GL2PS_OCCLUSION_CULL | GL2PS_BEST_ROOT; writefile(format, GL2PS_BSP_SORT, opt, 0, "outBspCulled", ext); #ifdef GL2PS_HAVE_ZLIB opt = GL2PS_DRAW_BACKGROUND | GL2PS_OCCLUSION_CULL | GL2PS_BEST_ROOT | GL2PS_COMPRESS; if(format == GL2PS_PS || format == GL2PS_EPS) strcat(ext, ".gz"); else if(format == GL2PS_SVG) strcat(ext, "z"); writefile(format, GL2PS_BSP_SORT, opt, 0, "outBspCulledCompressed", ext); #endif printf("GL2PS %d.%d.%d%s done with all images\n", GL2PS_MAJOR_VERSION, GL2PS_MINOR_VERSION, GL2PS_PATCH_VERSION, GL2PS_EXTRA_VERSION); break; } } void motion(int x, int y) { rotation += 10.; display(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_DEPTH); glutInitWindowSize(400, 600); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMotionFunc(motion); glutMainLoop(); return 0; } avogadro-1.1.1/libavogadro/src/extensions/gl2ps/TODO.txt0000644000175000001440000000146212250371054022343 0ustar marcususers$Id: TODO.txt,v 1.1 2009-10-02 22:09:34 geuzaine Exp $ * Add an option to limit the recursion level depth in BSP tree * Add an simple option to subdivide long, stretched triangles so that SIMPLE_SORT can still be used for simple, non-intersecting geometries (cf. Olivier Couet's long cylinders at Cern) where BSP_SORT is very slow due to the presence of many, many curved surfaces * do we really need gl2psEnable(GL2PS_BLEND)? Couldn't we just check what's in rgba[3] and try to do the "right thing" right away? Update Thu Jul 20 14:51:33 2006: that's what I do now for SVG and it works pretty well. We could probably significantly simplify the PDF code that way. * Think about a way to provide a progress indicator through a callback. Not easy for BSP trees due to the recursive implementation. avogadro-1.1.1/libavogadro/src/extensions/gl2ps/gl2ps.pdf0000644000175000001440000076534112250371054022574 0ustar marcususers%PDF-1.4 % 1 0 obj << /S /GoTo /D (section.1) >> endobj 4 0 obj (Introduction) endobj 5 0 obj << /S /GoTo /D (section.2) >> endobj 8 0 obj (Usage) endobj 9 0 obj << /S /GoTo /D (subsection.2.1) >> endobj 12 0 obj (gl2psBeginPage and gl2psEndPage) endobj 13 0 obj << /S /GoTo /D (subsection.2.2) >> endobj 16 0 obj (gl2psText and gl2psTextOpt) endobj 17 0 obj << /S /GoTo /D (subsection.2.3) >> endobj 20 0 obj (gl2psDrawPixels) endobj 21 0 obj << /S /GoTo /D (subsection.2.4) >> endobj 24 0 obj (gl2psSpecial) endobj 25 0 obj << /S /GoTo /D (subsection.2.5) >> endobj 28 0 obj (gl2psEnable and gl2psDisable) endobj 29 0 obj << /S /GoTo /D (subsection.2.6) >> endobj 32 0 obj (gl2psPointSize and gl2psLineWidth) endobj 33 0 obj << /S /GoTo /D (subsection.2.7) >> endobj 36 0 obj (gl2psBlendFunc) endobj 37 0 obj << /S /GoTo /D (subsection.2.8) >> endobj 40 0 obj (gl2psBeginViewport and gl2psEndViewport) endobj 41 0 obj << /S /GoTo /D (subsection.2.9) >> endobj 44 0 obj (gl2psSetOptions and gl2psGetOptions) endobj 45 0 obj << /S /GoTo /D (section.3) >> endobj 48 0 obj (Example) endobj 49 0 obj << /S /GoTo /D (section.4) >> endobj 52 0 obj (Tips and tricks) endobj 53 0 obj << /S /GoTo /D (section.5) >> endobj 56 0 obj (Limitations) endobj 57 0 obj << /S /GoTo /D (section.6) >> endobj 60 0 obj (Contributors) endobj 61 0 obj << /S /GoTo /D (section.7) >> endobj 64 0 obj (Links) endobj 65 0 obj << /S /GoTo /D (section.8) >> endobj 68 0 obj (Versions) endobj 69 0 obj << /S /GoTo /D [70 0 R /Fit ] >> endobj 90 0 obj << /Length 1156 /Filter /FlateDecode >> stream x՘s6W3E/y7}ۊ) _ NL:i2}@^}h:>Q~} D0< XWM8dILY\F&CO/}ESr1usly֍`Ń dvQ_ݒB05kMQn Sܴ=HlΥoqi $&;yp#ʛ2]d"'1E Ls'1]3@4ցeTDb{TX $L?Rfƍ 3Z`WNfp7'={#d t-9j6댕PWI"p:4_QĊ(^YD=a h"(};ƻ#6 fVP:e [ G,߁mIw܅F=cgh!ރ׋g\`*w\8WY4;Ro&Ov{.t@_";,K;x;Ft[OqzVؼ^oēovlHG7~mrm"8V#OWucZg'1Ei4&J 9ܵ5eQ9h$p!n_W>1Ssp2r[3`gzPC;?/e8=|!<o '0] S]246^lnS,qI]zg`#K{gt81m BG J/.9mSTCU+:^Ȕ))奴%CE%c)jTS t0t0‡} 1p*+ushJTg:jWҢ[M3۸;kmD6ϷR(‚iYfv ~FJp98]js_(Ħ2oE[ݏ1?>ClLk,^<kc}ݹpH4ܠe^|{7lK֝rq+jpi.*lf˴3eA#npRkh[ sB=z2i3l1`۷ M endstream endobj 70 0 obj << /Type /Page /Contents 90 0 R /Resources 89 0 R /MediaBox [0 0 612 792] /Parent 100 0 R /Annots [ 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R ] >> endobj 71 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.772 460.371 212.874 469.282] /A << /S /GoTo /D (section.1) >> >> endobj 72 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.772 436.516 179.591 447.281] /A << /S /GoTo /D (section.2) >> >> endobj 73 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 424.284 331.304 435.409] /A << /S /GoTo /D (subsection.2.1) >> >> endobj 74 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 412.329 305.153 423.454] /A << /S /GoTo /D (subsection.2.2) >> >> endobj 75 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 400.374 251.078 411] /A << /S /GoTo /D (subsection.2.3) >> >> endobj 76 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 388.418 235.387 399.045] /A << /S /GoTo /D (subsection.2.4) >> >> endobj 77 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 376.463 315.613 387.588] /A << /S /GoTo /D (subsection.2.5) >> >> endobj 78 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 364.508 341.765 375.633] /A << /S /GoTo /D (subsection.2.6) >> >> endobj 79 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 352.553 245.847 363.18] /A << /S /GoTo /D (subsection.2.7) >> >> endobj 80 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 340.598 373.147 351.723] /A << /S /GoTo /D (subsection.2.8) >> >> endobj 81 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [147.716 328.642 352.226 339.767] /A << /S /GoTo /D (subsection.2.9) >> >> endobj 82 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.772 307.001 193.198 317.85] /A << /S /GoTo /D (section.3) >> >> endobj 83 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.772 285.084 225.379 295.932] /A << /S /GoTo /D (section.4) >> >> endobj 84 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.772 265.103 206.787 274.014] /A << /S /GoTo /D (section.5) >> >> endobj 85 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.772 243.185 214.266 252.096] /A << /S /GoTo /D (section.6) >> >> endobj 86 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.772 221.267 176.713 230.178] /A << /S /GoTo /D (section.7) >> >> endobj 87 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [132.772 199.349 191.7 208.261] /A << /S /GoTo /D (section.8) >> >> endobj 88 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [186.261 118.182 193.235 130.137] /A << /S /GoTo /D (section.7) >> >> endobj 91 0 obj << /D [70 0 R /XYZ 132.768 705.06 null] >> endobj 92 0 obj << /D [70 0 R /XYZ 133.768 667.198 null] >> endobj 96 0 obj << /D [70 0 R /XYZ 133.768 473.419 null] >> endobj 2 0 obj << /D [70 0 R /XYZ 133.768 185.333 null] >> endobj 89 0 obj << /Font << /F15 93 0 R /F16 94 0 R /F26 95 0 R /F27 97 0 R /F8 98 0 R /F28 99 0 R >> /ProcSet [ /PDF /Text ] >> endobj 109 0 obj << /Length 2155 /Filter /FlateDecode >> stream xڅXKs6ϯ%UԖE^ٱUIZJjDB7%@ί~)Ӟ4~EpO?l?>"ȋ};Ez넋mjy˕8n%~ۇd;A sbeVW~`'1:_8nPAiiSMnPZgUŜLMypuo*#-WadwZl2lz=>e>4g|+׵иy D(8RKVV .xBFzci:-p>ʺ=5k]%yԖRd;u,_g"[vW~`5>/:}s(ұim$ 4'FAje҂y(DWfBK^~ĕF駬-OpB ~fA =,N`BJՂ} ;qZ\PS&_r:[q:U+IG-uv3f=u5/";k0Jm7L> {[C FL[R%C?@ $@H67I=T}f@ Ok(zb~N<wlh vJr ^Ppl/@՚ >At3\*94fqxyOYӘ- tD9Bsg'| \,BhCB(D>cNXJZH#V _W(*q eٞw j4/>Ɩ_ Ëdh۳m~ endstream endobj 108 0 obj << /Type /Page /Contents 109 0 R /Resources 107 0 R /MediaBox [0 0 612 792] /Parent 100 0 R /Annots [ 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R ] >> endobj 101 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [441.282 570.616 478.476 581.464] /Subtype/Link/A<> >> endobj 102 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [245.33 534.473 383.311 545.598] /Subtype/Link/A<> >> endobj 103 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [338.179 522.242 418.074 534.197] /Subtype/Link/A<> >> endobj 104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [153.628 486.376 237.813 498.331] /Subtype/Link/A<> >> endobj 105 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [288.702 474.974 356.641 485.823] /Subtype/Link/A<> >> endobj 106 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [337.639 183.173 344.613 195.128] /A << /S /GoTo /D (section.5) >> >> endobj 110 0 obj << /D [108 0 R /XYZ 132.768 705.06 null] >> endobj 6 0 obj << /D [108 0 R /XYZ 133.768 425.092 null] >> endobj 10 0 obj << /D [108 0 R /XYZ 133.768 396.441 null] >> endobj 114 0 obj << /D [108 0 R /XYZ 133.768 376.192 null] >> endobj 115 0 obj << /D [108 0 R /XYZ 133.768 226.746 null] >> endobj 107 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F7 112 0 R /F28 99 0 R /F26 95 0 R /F30 113 0 R /F27 97 0 R >> /ProcSet [ /PDF /Text ] >> endobj 121 0 obj << /Length 2713 /Filter /FlateDecode >> stream xڥYK8eiq72&f YȒGi`VHRkݛJ$E*v\Z]KX[m=.% xe"3ש'7^^gIH¦ |{{73Xч3]B NZ3`IgW+Lg*&O4чj-UWf45$\Oc9j\&&U.:?Ryult '0ck:/wD g g`x(Lo %>lI= /UP"a*nذ*\18 \Kn$1ո3فOj݂#OVZn$@Pt:T_+M(\EP)=(j@yWMꝮOo^B;-$h+Kte+[bvRD!<英;uגϘЇveUwCq?b*7obr?|[uŒ.am^Ȇit{DY9 i'0>t2d2tNZCPt? PqUm(]E֥s-Og:]nΡρa|;jikŌ,Q/2}Eű0qby\Cs,G꧈cz(i[m.kJ% 2!H~TAtRah%N|I;B 2܃}88-2H,sej~6~6-4U:i>(eqOT{kGKB_Ej{ʪ\ve2cj6߫wn/f`g dnp4jC4FrL~ReV7zW"-vf~ZANhR!`bN@ߦn=)&[j\voi3"߷6/苇Y)󍫼jcs+/RA,232 +?- L/ OX\a17f@ 0ah;J S̤/,N0$'ZMӋIxpFަ+D"X˰:'u<+\.`hΗO%Xq?>1QbU5YcUŻߖ #1oim'K||0 uhl)Tw }շq [rt wv̵8e&+|zNl(M'djj>\f)QsSzXK WM7/QE&ӥn{Hox;dq 44pfGm m|_>ou^N{vP'Q2P VZ,L6(5ͩC`Sn/-vwm7րMol i rhƐa*0eR DF荞)=^%!4}lp61"B&ⸯD|;ÃMۍEcQ`$,8@*|naʆ4U0;ٳY3{ulPk )xk~,|[y f,lIk,2iK5gArЭ]Q]=PlчٚHTE:}N8yF-zjm/Li.LwByuN9'o"rmV{ҫ*Ʈy c0qJ,0qAkO[20 yᄋIqݙ{X1ed-E7`[QD֔bB88+a]EicGsy 1>P@Cc=6a4m{@ˡLwolzZEbZ,r=܍{g@Y/N1,"0]$v,: g$+3^_:E^hc)C ?vhF']{{%,qvl+NeR)ReE+3boDAX EPLf i_TdpsJWicubd+|t+@Gv {7b.W9C6мW#' ZrE{xīۿ Ъv(1/GvL͇#lzȉ7iDcBss>yf Fq(8BJ˙H "#l슷6NJi0ڠ)\izT${4tQw%$us\~CJrb 8vJ0Žk+8?Elj-plKϬ:&9b %|TO6 8vPbMdw/CI=2fOn @-_J<',?~ 0i*>VC!M| 5"8b~C;ct dtCѴ"c3O*$F .РΒaK[pXuӋ `~"FKY? endstream endobj 120 0 obj << /Type /Page /Contents 121 0 R /Resources 119 0 R /MediaBox [0 0 612 792] /Parent 100 0 R /Annots [ 116 0 R 117 0 R ] >> endobj 116 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [311.563 496.339 326.286 508.294] /A << /S /GoTo /D (subsection.2.2) >> >> endobj 117 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [224.207 474.919 230.669 485.021] /A << /S /GoTo /D (Hfootnote.1) >> >> endobj 122 0 obj << /D [120 0 R /XYZ 132.768 705.06 null] >> endobj 124 0 obj << /D [120 0 R /XYZ 149.011 206.237 null] >> endobj 126 0 obj << /D [120 0 R /XYZ 133.768 193.064 null] >> endobj 128 0 obj << /D [120 0 R /XYZ 133.768 172.308 null] >> endobj 119 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F28 99 0 R /F7 112 0 R /F18 123 0 R /F17 125 0 R /F32 127 0 R >> /ProcSet [ /PDF /Text ] >> endobj 132 0 obj << /Length 2546 /Filter /FlateDecode >> stream xڝ]wڸ򽿂O朢X?[4 1 4wF# tH voճ{f.nE,7{q!X=?rlrn۶8;u;=MO\Dxg[2\0qYۑ3˼9\v_BVi}+XnƏ\9PZ8;m:_I8ֲ-#snVXI͊314 磻||s3=E̳):V *\|r)#HӎE2 !"3zEv[XY˒`h3ę9wklaF>tR t?R RoHqYey޲8'=ޟ3f?`:KmZ||&AҪhܱFqA_H`m.&H ++% '[wvjoNgC\wܲVR@hMvR<j:1% HkBL٤?PlsijhTƽ9 e*o^JBdm,hpM -j]70O PT3ުwlEQ\lF|qU( t>AzKX2_yB T˴f~xn&=6ypӄ5-Xg޸x;P00@<ݨ |Ţ#!*$wy[Kc2Ovqi/2JEb%AeRAQX-A~ I ͶYʋ}"tz4 u,9EONmz)w%2i5=N$~Z|0IN]7)T9Mt^Vh'-))v$ E#kMB&o*0ÔJ /_f7.JȔ RԆO!'x!|fV4A, ņDsƒM©јhm-FZ%Iz䤚4j:;"ypisyq$8Sڂ ꆶ34YJݿ{R#o4#Ղ.Ia>ʏ,]"A2*V/lhvc/&G +|&6*jgnYVx++ↂ9t ` B ѤoMucEqj!jzUpCa?}V%Z _pѩ뎷$o(Pq8)D(jl\JVbu$q"{ؕPh @Po^"maBC4`aY _Ĕ1u kBd\k\u$Zb9H.ܘѾǿZ$M@ev& $$>wZl endstream endobj 131 0 obj << /Type /Page /Contents 132 0 R /Resources 130 0 R /MediaBox [0 0 612 792] /Parent 100 0 R /Annots [ 118 0 R 129 0 R ] >> endobj 118 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [391.515 597.958 406.237 609.913] /A << /S /GoTo /D (subsection.2.5) >> >> endobj 129 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [215.905 183.512 348.656 195.467] /Subtype/Link/A<> >> endobj 133 0 obj << /D [131 0 R /XYZ 132.768 705.06 null] >> endobj 130 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F28 99 0 R /F7 112 0 R >> /ProcSet [ /PDF /Text ] >> endobj 136 0 obj << /Length 1943 /Filter /FlateDecode >> stream xYo6߿2".:izAm!mN I^ ,^,Ùf8z䏮}z|JQ’0GEa< q_zx}.A]OzU|NE '.UpdbLdqD e^Vr[J[v >X5M #ۖfR@<`R$ۧO;)d; D;D,偤^  vd NXфCg d FW=鎆zXvCO:! I!}H@II(#.eѤY0$!conxo (Xq0`Mɽ IFY!CdmA릍n`2'D &5Űa$7vX;6${0/j=O_o(#yL%fiBZR) d[] 2&-D1?AZɊ2 eUCgJŒg|O/팲_@ 6 224~sx$A Ri3=!MԠQ'sSei1{ "nWmhIڜW6 f̽~V6PD:A@$C0LwDEo`C^;<2ެ?}Oo_Œ5YYXSθZPj0" 0iNO/wU9)!c| bF (F0Ruw^Ά &uύo5q I\8s\z ~8Vni?Tut8А6{"c ok[Z: p#]x Bi S#M @E_o>|`S|Ȩ*>@uaW̳DNïSPIou'{u{)qBWͱJzoTLGXX oM@%Anjfkfy2f{+Ɇ1!3gP:C$a_0}|'6 endstream endobj 135 0 obj << /Type /Page /Contents 136 0 R /Resources 134 0 R /MediaBox [0 0 612 792] /Parent 100 0 R >> endobj 137 0 obj << /D [135 0 R /XYZ 132.768 705.06 null] >> endobj 139 0 obj << /D [135 0 R /XYZ 133.768 390.299 null] >> endobj 134 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F28 99 0 R /F27 97 0 R /F11 138 0 R /F7 112 0 R >> /ProcSet [ /PDF /Text ] >> endobj 143 0 obj << /Length 2292 /Filter /FlateDecode >> stream xڭYYs8~#5c" 8dm5EKZT<ʏn$Jvyh hpuv<{s)XDs,& t *X_C474}B `j7h\pF71(qmGB{; JPMeWNźih|c2)bL <#f0I)a`hxUeryUN>2Zt:/ET*VUx!wM[ԒltJ1$aqq/s#hML̨$Gw:{#JZ䛲/#b^XLswYGHi"Ln Dx'Jňf'8%*1<^c"k"ح3airsļԇ}Tq:0tKK& i ZhoduZS]] Ӧj'êɽ` d~{vU9Vyߍ)nU3cmFѝ?x{W @v .mh)Ëiu斴:ǹ(ܝc覛[ jUk4ucrBoH! ސ@7$LUeԃR*J15n)TgSW}ae4Zvvvu7k&@v䔂1ނ]:S5`HC 2>@o1-"13g5+f,ɕ#UVhzԮj΅3vAI5ξsM006cØB^NqZQ> Xm E\K{= kJ\/fb6IP:Owo8M~0Yam-z!GbP{É%5AzDž\teGqwwҜmy~٦2߿}~yoX)TV۳_n8&xKr\gvn q4@PzrJ gjԢ8xCcb QՏO4S6|dK#Cw2  AmCna?^IaS#-peEHڦܹbB>^3/b=Ltj䴚 49Z{S([mR/?St^|(WIBhZ]68yQ0S[V:FilG0v„]Z.fM{O6H E e^x0ݭф ٹ^'MqSs&nPKnh~n*#fڛK22_FqνݥÎ?0i ti<<p"wf|ﭾQc O; endstream endobj 142 0 obj << /Type /Page /Contents 143 0 R /Resources 141 0 R /MediaBox [0 0 612 792] /Parent 100 0 R /Annots [ 140 0 R ] >> endobj 140 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [411.391 459.664 417.853 471.703] /A << /S /GoTo /D (Hfootnote.2) >> >> endobj 144 0 obj << /D [142 0 R /XYZ 132.768 705.06 null] >> endobj 14 0 obj << /D [142 0 R /XYZ 133.768 667.198 null] >> endobj 145 0 obj << /D [142 0 R /XYZ 133.768 648.144 null] >> endobj 146 0 obj << /D [142 0 R /XYZ 133.768 568.436 null] >> endobj 147 0 obj << /D [142 0 R /XYZ 149.011 206.866 null] >> endobj 141 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F26 95 0 R /F30 113 0 R /F27 97 0 R /F28 99 0 R /F7 112 0 R /F18 123 0 R /F17 125 0 R /F32 127 0 R >> /ProcSet [ /PDF /Text ] >> endobj 151 0 obj << /Length 1943 /Filter /FlateDecode >> stream xڥX_s8O ,ɲI\QT`n,`S׭ ^vVj_>.>>HX =ZF,Hǂ<-=1sn,"oz?߷Q;)#JPj?Qw>#:qX`NP㉌}lN#hGLF1XožZҸ3Ƹ$O1hdZe_f< L|(őOMgyng:zqd5f; HTuH)Y5 θu6T#=(!^RYz3=C6{- T5fyVg6äH0( R:i?Κd)b<^.eW8̿~t?_',uzccV&AĸTy*jpfQop\bJQbLYZt4N& 2KHP2 H?XP$ L[3TkC@B8.OTl!&D}9F*7/+«qe"R2d+dX`vq_9-{[/rDy'5YX*bXlluw\h>ҔV6mޫoOӂTp@w̞Vut\[aKq2β1icFUJkeLXs~%;8UHp.BUtIRw$gZs7mp^wgYfq_-̑^ u,K΍6 .1KdM}c D9_닣ފ2[JZ;4#)H]R_6r^#YJ?{CQh/"` gS-lo_Nm,TSR](p=Y5ivmRi_C5ʻk'Ckݸ sCrمkK֪WO 6LLD5w Q!h%k gkgTXTzccW;Ѣ8Cu-Ƒmqf@TCYC)G;|AJB9FEd]Я;[}S5 -5S~6{4^";H$q9(!aW׏,l4!'7)]C`.f:yݺ5%+ Zb)k 'KS0X #lxS_no#T Cl:dwY[@wnRio^^vzf@H3пBZ5,FfqxiR'lb*N(R TLzEm2 i |4E^ۿ lkg\J`5%l7,zA/<":n~}[ O3\vnZwҲM\ծNJEQ']=7߀&CCN4 W~aϗ endstream endobj 150 0 obj << /Type /Page /Contents 151 0 R /Resources 149 0 R /MediaBox [0 0 612 792] /Parent 156 0 R /Annots [ 148 0 R ] >> endobj 148 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [136.646 330.981 248.476 342.937] /Subtype/Link/A<> >> endobj 152 0 obj << /D [150 0 R /XYZ 132.768 705.06 null] >> endobj 153 0 obj << /D [150 0 R /XYZ 133.768 667.198 null] >> endobj 18 0 obj << /D [150 0 R /XYZ 133.768 512.926 null] >> endobj 154 0 obj << /D [150 0 R /XYZ 133.768 489.887 null] >> endobj 155 0 obj << /D [150 0 R /XYZ 133.768 410.42 null] >> endobj 149 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F27 97 0 R /F28 99 0 R /F26 95 0 R /F30 113 0 R >> /ProcSet [ /PDF /Text ] >> endobj 160 0 obj << /Length 1039 /Filter /FlateDecode >> stream xWM6W(ԜpalҤ(2&`K$gEJlIN9Iof x؛ޯF7wx1Czg0dyaL[>c?.ߍiO'WE}EH27Df;/7wTvnm8b/Tu,q"OvGe=ҮK$B,-fGm~0Y.#)OɁE s=BP,(Fܮea6Z˃J^/~"JgyN?aӤyfJi:',v<>~iΞn¾)+d +Nu ݪ2-mgHq1[_z&jEb9UnϏXYb,te|~_i> s=&~:ouphӆXi@`JNDџM+V) _5UpDșՖg" NJY7-uVMWrmk/[n, Y 0khw靳>Y|Rkd9n}g+Ⓑcy7///c8R*!٨K J(m'rA-U2E+6}YLG:{'8MrhX]mT|H:5JKbĸl= Lrt ^Hu]sr$-4^xv9VX)PpRzfZI/l^o]!‘OSV\PbWH kM5@ ַُ©f%O;5 DM_@>.;/8ķls>_t=Gw_jPr endstream endobj 159 0 obj << /Type /Page /Contents 160 0 R /Resources 158 0 R /MediaBox [0 0 612 792] /Parent 156 0 R /Annots [ 157 0 R ] >> endobj 157 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [459.879 420.803 474.601 432.758] /A << /S /GoTo /D (subsection.2.1) >> >> endobj 161 0 obj << /D [159 0 R /XYZ 132.768 705.06 null] >> endobj 162 0 obj << /D [159 0 R /XYZ 133.768 667.198 null] >> endobj 22 0 obj << /D [159 0 R /XYZ 133.768 564.182 null] >> endobj 163 0 obj << /D [159 0 R /XYZ 133.768 542.091 null] >> endobj 164 0 obj << /D [159 0 R /XYZ 133.768 498.248 null] >> endobj 165 0 obj << /D [159 0 R /XYZ 133.768 376.531 null] >> endobj 26 0 obj << /D [159 0 R /XYZ 133.768 273.46 null] >> endobj 166 0 obj << /D [159 0 R /XYZ 133.768 251.369 null] >> endobj 158 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F27 97 0 R /F28 99 0 R /F26 95 0 R /F30 113 0 R >> /ProcSet [ /PDF /Text ] >> endobj 169 0 obj << /Length 1582 /Filter /FlateDecode >> stream xWo8~_cJvJUV{*C%UﯿvO/q373Ev'8$VL9*8$d#=F) ǟa ?'}<"QA.*{[{~o iH^)E鱈(vFp]qi+F8ű=Hz5w')",UZ!l^ naVtOU~_)=&C%ilcB K9KU>k mRt!253 !ɓ){r~gXYm@10? o`bB&= cY&E xP=(Jh0ƥ'\fjSF\IJSZ:pL9~\~vN *&dIWPmpI%_-+ޘjC=vzv~λ3pMv]ONu(vT<9q{) EEa$"ps}s=4 喇ڵo 2},,^=imS~={jaLntn%A2EÍ?n| 8f / XO*^T':DL9ˡTpY5ن;b`(("VMҿmAևS~VL>\4j/3u"Mi N<8(V;>Ηy7=njS]Du8=}D snyoF%]R飜הiv}Ρw » 8K6&2M$z *6C;D~ {l }U.,jQDߧ,¯i65B5OSVIKo%=™YIBeƟm5/-ث jc2{}|UD ]LPaߌV߄L8*oQ1O.f endstream endobj 168 0 obj << /Type /Page /Contents 169 0 R /Resources 167 0 R /MediaBox [0 0 612 792] /Parent 156 0 R >> endobj 170 0 obj << /D [168 0 R /XYZ 132.768 705.06 null] >> endobj 171 0 obj << /D [168 0 R /XYZ 133.768 667.198 null] >> endobj 173 0 obj << /D [168 0 R /XYZ 133.768 452.859 null] >> endobj 30 0 obj << /D [168 0 R /XYZ 133.768 355.185 null] >> endobj 174 0 obj << /D [168 0 R /XYZ 133.768 333.094 null] >> endobj 175 0 obj << /D [168 0 R /XYZ 133.768 270.905 null] >> endobj 176 0 obj << /D [168 0 R /XYZ 133.768 203.51 null] >> endobj 167 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F27 97 0 R /F28 99 0 R /F36 172 0 R /F26 95 0 R /F30 113 0 R >> /ProcSet [ /PDF /Text ] >> endobj 180 0 obj << /Length 1308 /Filter /FlateDecode >> stream xڵWr8}+hƊ.,>B̦Y 3UIĵ`$m] 68dyZ}6fQO")FS0b.<.)"8F֧݀`q ލ>9υkv~A$jRXD켠e0, t:lrVƵ@ӈ@$p 8I8N4ւg&iVvF;1}KV^Mqw&vä%)M#$$ߦC]:gj5.ҥ"`"l'lPY-WhKBֵcWנyRxc_>@a(wHDa:jb"`v(eu2m,Vzi7|zE{aX޳Q]*@\Pްօ8f-5Cg1&> endobj 177 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [155.271 326.351 161.733 338.391] /A << /S /GoTo /D (Hfootnote.3) >> >> endobj 181 0 obj << /D [179 0 R /XYZ 132.768 705.06 null] >> endobj 34 0 obj << /D [179 0 R /XYZ 133.768 667.198 null] >> endobj 182 0 obj << /D [179 0 R /XYZ 133.768 648.144 null] >> endobj 183 0 obj << /D [179 0 R /XYZ 133.768 604.302 null] >> endobj 184 0 obj << /D [179 0 R /XYZ 133.768 560.017 null] >> endobj 38 0 obj << /D [179 0 R /XYZ 133.768 457.222 null] >> endobj 185 0 obj << /D [179 0 R /XYZ 133.768 435.131 null] >> endobj 186 0 obj << /D [179 0 R /XYZ 133.768 369.371 null] >> endobj 187 0 obj << /D [179 0 R /XYZ 133.768 276.988 null] >> endobj 188 0 obj << /D [179 0 R /XYZ 149.011 141.404 null] >> endobj 178 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F26 95 0 R /F30 113 0 R /F27 97 0 R /F28 99 0 R /F7 112 0 R /F18 123 0 R /F17 125 0 R /F32 127 0 R >> /ProcSet [ /PDF /Text ] >> endobj 192 0 obj << /Length 1551 /Filter /FlateDecode >> stream xڵXݓ6sOs,>8J{ 7@NLƀM}6llp.t}B֮V6,cxq;c1[Զ2B-ט-S˲o7oϳ_)O9!Ȕ"˅o~YP:շ=N&-1+0˫nHqbqᙹV&Â5Ѣ|E,jL}Ů'J`*[&PrJu̶-_1ZS|x^-r)B}JIjȓ!@fekTv@\o^Ɣ9$`ML߽F7w/K-n@.kY=HoӬ8; v5(R}7Ho:,ʞ:It$v XN$Q `yMxH#.u[,K3DEeFp׃l`$kSl/rN¥gqʡ[<{ X'2Hy l+~˚uΣX1V#Arh,݅(sNk+4B鷌p(qڈ "Pݡ8³g7lZuD،\9uRಌlmdxa|,ZQҡ\ʬy)s Z&4&fTkwHf,{ Rt7w)KC+mPe/sBs՗A𿢧m\(%( _**.4, *lmEsqSy[%fJMu c<;RWhlB1+ȿ.@l54Mn>|yp2~+8Pr+$d%1}{6EKJ "U?sϞo U pN[UˏYdOrL {˲N}9Ey1ܓ yӲؖbI Bg+!y){N8u_B/[^%LU[`:2z#bX)뀼ҪgH$}7^YxW<\*}RhG;9Vsu%$TA|r)rs6$Q+[ oqreWs ]BkXg5Hr5;9>Cҧ'@V3`H^j\m'J> endobj 189 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [369.237 437.2 383.96 449.155] /A << /S /GoTo /D (subsection.2.1) >> >> endobj 193 0 obj << /D [191 0 R /XYZ 132.768 705.06 null] >> endobj 42 0 obj << /D [191 0 R /XYZ 133.768 558.661 null] >> endobj 194 0 obj << /D [191 0 R /XYZ 133.768 536.57 null] >> endobj 195 0 obj << /D [191 0 R /XYZ 133.768 480.772 null] >> endobj 196 0 obj << /D [191 0 R /XYZ 133.768 376.711 null] >> endobj 46 0 obj << /D [191 0 R /XYZ 133.768 292.769 null] >> endobj 190 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F28 99 0 R /F26 95 0 R /F30 113 0 R /F27 97 0 R >> /ProcSet [ /PDF /Text ] >> endobj 199 0 obj << /Length 1677 /Filter /FlateDecode >> stream xڝWKsFWP> Ț^pH0 K4jFzJ{G2Izf{z~`usu۬34:Mٶ97&2n8>,XNn߶m#|fQ3[Ƒތ1s}$6"&}?їYy??BPgm³VltlkupXe"{z!7s7[_bɼ)owz|%h}O˓d:-i6sktNfx5"Gf[q2WwwOlui:mQv;Z,WOމVzb TmLd/^&:Bov3E:! 4BMc icDJz5G P4Z]6d̐UU%NhB|-I }Vg خ/osu/8WVy..$RDg Ye,.l%yi s<5opǴwS!'GۖoZ*~R[ˌ Nr/]n%?wnrRA΢0DkU^3Jc'wr%x!Em XC:-]vX5mgQ.bTdV m6 ҨE+LϾTڦDMEVY5P뜥aI :`'u0v<#dsi) 3=pz®͌kYs??Oƕu3RI'b n3r 8 G"R>ڭ Q*Rq!H_[BkU(:YdN lqɜ(Xx 1@"`H;\](ʴ( |d!^7@#Qq]UE(:2cւ{ZP2'AK$(CA{kU1Kz"Za8 {UcŦ0{ww3]Ff"E&ʁsm׫ vQBM˅.`޺`}[PϸhD`$VDTY/KbFy g$*,#7Y"ҰV }+ DMbav]C1 ֪[0ռ AZ\$`AV{vIsePLP}oOCLu]<*ߜ{'ΛR6};i /St˔6 |Q3B NAjP* MRU֏pSz't N/q🦏zT#$]EU N&Q"ӡ%b:OVO#gՌ,'=7^"qlSxUK7m77־2#[z! ڎ=՚{/rQQ WٯGEԲʹh62ϫzI+W=(AQKfևDD"ABF2C{umB怶pPw7\x@eE,ATWT64̊/Mإ'&/Mnv&k' _*U\B{0T -mm`&M.v_G<(%GpQ+F˫e endstream endobj 198 0 obj << /Type /Page /Contents 199 0 R /Resources 197 0 R /MediaBox [0 0 612 792] /Parent 156 0 R >> endobj 200 0 obj << /D [198 0 R /XYZ 132.768 705.06 null] >> endobj 50 0 obj << /D [198 0 R /XYZ 133.768 421.052 null] >> endobj 197 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F28 99 0 R /F26 95 0 R /F14 201 0 R >> /ProcSet [ /PDF /Text ] >> endobj 209 0 obj << /Length 2613 /Filter /FlateDecode >> stream xڭYs6_GjƂ $&[q#$ LA#;㻋%Qӏk.o[{*^Ʋ$Lǣ,dWˁj``)>(Gu< <3+<)cK(|f /&iiiy7[dash)ɀ .vj&|U$ށV5~KM;q’dg4r;ȳ^FJ@@xAPT?t EsUxZ8YNCh!Hxvd/JEw X""-稿ћiiάhCK 4캨@'ե%}e=Qp0X>SX""lAx!Jt 0DD w(!2Սٚ|Y );x$uIv"vSŒ辝EA#X\Z=u 77d \N!8_v|'X;7D"4'pU_.JWS)u;0a@-tViЪ)|\.")FBwkfAv4$riLN+Uk-nӑυ/:ݤoo/?-n._0;fYp44M'RnO nϑ& v :88yܭFOUX ClsS_wfn; x(,ͼGӗn[9Tq3/6 aQi2ɭVp$*~WSd8$XqcJj‘. p8J}aE2MqP TxQ2e FE}j~GdFEE`+/U hɡҶsKm!=ȱ?(U4ЃkFLā׬="ޣ^²4j2)=O|# &pnd¹u1*嶧htX# ҭK٨`R_S߀Dm6nMOKjU[@\j)dxZb*5,gvVM[(+_r,A $<_Z!aE<^1$U/l1ddH?2qdʫA԰Iהy:WJ˲_l&D@Z@7P"n{f')k4(46-m HP>M\t<'B]:3<Bcğ?([VDcWֹNl #pЦ۪i5!@DlC#U Ώ+r.0&Ǎ.`f^=$L u!-7`D"B~m]D~AZjqfǍQ6V qTxGXNjs >=U5UhI,E[# 'UQي&9EpH&ZQiq,$#ޯ P@Me-sDٳqi:|:⴦'Os|vV2ԫBOIidn9l ٨ɵ ͠cm_nHҺ_(CsVX\KaxN(l|W{Bmy߶#׼?**?>^ۓ?>XIѲn5e¾o'^ mJJLEЀ6R/S{c$wδ@؅CAjl-@_fL4W&+PjhnG'$=Q1KӃQ*VK=>5ޟ.//_㾧5 0l/Q/E]Rs"qHND}18@" endstream endobj 208 0 obj << /Type /Page /Contents 209 0 R /Resources 207 0 R /MediaBox [0 0 612 792] /Parent 212 0 R /Annots [ 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R ] >> endobj 202 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [451.759 428.178 458.221 440.217] /A << /S /GoTo /D (Hfootnote.4) >> >> endobj 203 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [426.225 391.759 440.947 403.714] /A << /S /GoTo /D (subsection.2.2) >> >> endobj 204 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [444.989 391.759 459.712 403.714] /A << /S /GoTo /D (subsection.2.3) >> >> endobj 205 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [463.753 391.759 478.476 403.714] /A << /S /GoTo /D (subsection.2.5) >> >> endobj 206 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [152.144 379.804 166.867 391.759] /A << /S /GoTo /D (subsection.2.6) >> >> endobj 210 0 obj << /D [208 0 R /XYZ 132.768 705.06 null] >> endobj 54 0 obj << /D [208 0 R /XYZ 133.768 468.651 null] >> endobj 58 0 obj << /D [208 0 R /XYZ 133.768 222.878 null] >> endobj 211 0 obj << /D [208 0 R /XYZ 149.011 141.092 null] >> endobj 207 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F28 99 0 R /F36 172 0 R /F14 201 0 R /F26 95 0 R /F7 112 0 R /F18 123 0 R /F17 125 0 R /F32 127 0 R >> /ProcSet [ /PDF /Text ] >> endobj 218 0 obj << /Length 2506 /Filter /FlateDecode >> stream xڝY[s۸~UfjYS.MNڴ>=ӡmF<\lq;4 |`w'w r?Od0($$y LzѐA]]~49<&4ZiQ] a,%J ,$aO%9O[fȕ΄ j^Uc%f(՜$a0o7 T7(f.6օ0 ,?ŮԪ*A5=r-#I-gƁwSrB'@;ҞqN"*c"]gJ.+kWзh" ީn 1O]{"Бz 4X![< j A%UmC(u~ŭDiHaBiR,Ůˁ͓#`pj-ě(Mk-hr 倍 By{(5oB˽${FH!g ^fUB~̷1 Ǔ'&7!?y+NNù0n6aec1az#XtJ< so UhzOZE1gZ܏Ճ,FQTMe/?Z_ $Jl gTե.8c;L- K5̙ exc-f+ƍX9VK(NHy @/Ήwp]SeTO-^#<(>~DitWu-C}VW2.8o\ sR3^{=u$3U!46zZu{CD{CW9"ԟ EIRڕqOUd̚%.i0i>tRl3Y[ދ |\8ԖkB>?a\"!qi_kT>x\@Xgdy'ɞCPJ7!u o1l]l8'O." i}D1k@ҏDRe R9-q{aNSoXгdj-IJ.tbɆq) dw* PK:PhbS%Mzqi^jŨB[jxh Z]hAHyuSub'USozG"@fջS/Kc#iqa,HPK*!~"6h&~ē,nykY{W3jġBi?GM.x]_d  H}RR/VKU"@q-1M B[ L @`Ż(Kzk2YB=FBÓ2TK3W 92~3ZyeoFR.AW I f`>N-z[9 FCkI!՘?BÛ G8H7J )̣zd e,'`f/];9P^ Xi»gMW Aև ZK Pm(՚D!:8;Te]lhBc[4ӂ,0' bjovaIC]a CȤBYSoAρ4GjpvpԬhm2E_w\1{Q ӗ)k1$\p6,|ODsꅂWQAڇJkCw4ø56gr=E1;^Y%fr|}'rv|sPg`EFC=N)|%>CYRya,HBey 4(Iy"ÔxVDuYGV }e<49>V-<Ϡl"uݐbH:"q!?}[ZWi[S /Q܈/ogrhp [Kۜok a)$K;"b< LV,w(>˓B 7WF~v|<&RnDlCS-0uɮ9~=8*}4K95+'Qs`FZ |U=4^~'^h> endobj 213 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [450.331 419.654 478.476 431.609] /Subtype/Link/A<> >> endobj 220 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [132.772 407.699 453.815 419.654] /Subtype/Link/A<> >> endobj 214 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [265.218 395.744 450.273 407.699] /Subtype/Link/A<> >> endobj 215 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [301.23 383.789 418.29 395.744] /Subtype/Link/A<> >> endobj 219 0 obj << /D [217 0 R /XYZ 132.768 705.06 null] >> endobj 62 0 obj << /D [217 0 R /XYZ 133.768 460.958 null] >> endobj 66 0 obj << /D [217 0 R /XYZ 133.768 358.37 null] >> endobj 216 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F28 99 0 R /F26 95 0 R /F27 97 0 R >> /ProcSet [ /PDF /Text ] >> endobj 223 0 obj << /Length 2356 /Filter /FlateDecode >> stream xڥYYs~`Zs9pOg]2$Uٔ F$b`l\d/'=}|} f.>z͹䋈E7 .% pGq[ܤ8r]uyyzߛo6T %\{M}s.ѦUk% 2%& IsfQ脯+zp]GjdGdeA{m}Ъ?\rMuCJI\/uRe{{Vǩh[XiK0${\8gg^7 ~<+4͖r"S "7aLxļ V%vY"[b;<yr,6~w;6<'۸/W Џ~1 ]澬vq3It"9J, \N?=K,MR1sJxћ*h}^o:H&D;@G(^O|RKAZo+<u-*}`]:/5y ޅ4TrZfƆ;uSN:u.Af#k: ei$`(Qj!nF]LVWE7Op+h|4o˛1[kk"XYĠ5%BǛ8+hvVO-QX" 1H~ Ndu 0F%$*ԲUUlkUxx$y6[C-746MYK!ӏ{BnռH&Ge(}Gws\P( awև qxwy>yw}!7һ`S)˟'S]s{c޸oxvzq1cl)u]܆@<oݔPhޡхF{a+\z -1_Y X< dH(Ѣ?"1X41HʭtۀB^F6l o ap-1ލnA7) yUۉ-enk@IѤMi8$B`0[Psy0yaZ$q-l0Âm݂NEiHP}Mul9Xj[OX^dGe6}y)n0vF ]>SH>d#>Y:#d\7Wq$Жcd;>P'l.1k[/hq]gPꀼKWhR.6! JǺ#ל=dq|)D,)1 z.cYYe4٣(c&z zK(4BEPA uPpTw erb_QWCvݤi vp%WSwurrnOeUcX dp@#rAnErt_k.1MMct<7҄ t#N!2P 0]l1ϾSíNM7nfʋC~ k਌BDČJ ? s@ 3 5羣`Mºm$t8[D>̤R*NBwF),7nXT Sce^f5TzA==1_q3Pˮ\]k*]N,,ͩt{^jZ=ܓBISQ|ʊ:`v'ePkL+< !g,9I Y`j۸+(c`cEa !]1f%KUh>8:3L)_0j`[z. #  XG?T`ۊwszs TOO4ұj "/@ &/75/B44!Հ+_qyN1y6~&Bi4vԶtH.1y4! SmV5漞gwvO endstream endobj 222 0 obj << /Type /Page /Contents 223 0 R /Resources 221 0 R /MediaBox [0 0 612 792] /Parent 212 0 R >> endobj 224 0 obj << /D [222 0 R /XYZ 132.768 705.06 null] >> endobj 221 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F27 97 0 R /F28 99 0 R /F7 112 0 R >> /ProcSet [ /PDF /Text ] >> endobj 227 0 obj << /Length 2546 /Filter /FlateDecode >> stream xڝYYs8~ϯPIDW)eg},'-E6gyxF(ʉb5@Cۚ X wr0<ן`r&wь[56]^\/{ǧ3e2zwq;l3ٖ|)hR Z!̶iu3/jmH3fFJRQ4Qo*u>}&D_)k2c"6zozEkg\xl="VX[=l_1me&ZՂ`%: ̄0_8mpFTeȰ?4p3\-2 VG4.(sË$331ʵ2W}j,"/l- {=̈́dفMB,[q4FF ͖B|DBNeٍcӳ#;[ Ә$6Z`A=6VBO}hRS4jzMO9+G ( z:p'rH&0µTX BP_8~>! yܡo־T g&ZYS$V: 2B>T7q[898ӿq7aE+ޣ=so ǝr vs@jW{m$p0'pb_@1f"F$JjwW0]*UZW9m\V{,oޒL[_RU)&}mn|Hb%'5\8&j_1n(|/Ђh֎fx8c:w2\1ȸKBv 7G4uX>$*+ʓ%SyfǢmX}@Te ܦ\"q]U&stՊաwNNZnkIWqn"ā)ف{H{"E"&rzS3RnoG-ݽ >b}qs{7n_ǷTSh黆Df8IT&V4E&Lᄫ. Br:_gKv\Fs3)jq;_ e߂l)ǀߨPatC2,՚CRv6 x/A"*!KP |ARC9\QI1mŠAgc<5> πK8ηp!}DyQH~gA{I&. <ۧ؄̒&$a2M9qQ$ğ|gcI؁qM vaAaȐ @P@4 }Tj#Þ,}q}δC _7L-@|ӆ40q ANH*d 4Gb0p=T:pz8Cиv7H~09;82x$]A?!@8|q^y#F1Xh33K!u蘂o@|>sT2ɇoC`Uhj<6Y,#yZ@m~0h*¬܄"#T1!kIƂ2z#s GL1zF_ ;&]dgy6#|5kq/}$.,#;DTl(C04#Z1]F[> -`O^<0UpG2$5[CS::iq;8 F5&7Sz)#R/_a?fw+^ 6EőNЦݯG(|(BQjuau:Ei( 5"\"= )m>\c>Y-j wZZ~8rkMN@~p<!Yav $=o;кuWQfv>wQ8u/޽ϬWo?1 x!Z\//7gg3]{Xtݱ$@=(474wй֦%4UU` \Y6H$/&hɲk 1~ULʭ;K߈ۊ"*bIsTG! _Ci\ڒDĪUItwܾG#יoHS9Tt5ֹ>jɈ; {ǐw'#5p*we{{(AlJvjUZ#΁wmNo|ݵnON|_7_OG|ci[+1&ӽcM ]=]9H(lms)GZ36miKc5'e> endobj 228 0 obj << /D [226 0 R /XYZ 132.768 705.06 null] >> endobj 225 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F28 99 0 R /F27 97 0 R /F7 112 0 R >> /ProcSet [ /PDF /Text ] >> endobj 231 0 obj << /Length 1898 /Filter /FlateDecode >> stream xڝXn8}WQbUD]ޒM(v(hqJ/_3Җx΋9)rl3f^.=٬q,-x"1[g|( >݇?/ɴ%,j' ME3}~ɤ0Ԑbox}D~lD$@EHC.jM4e7"T~" PU4*$|`qp0b`,,^90c͗˷//?y%=xIĮ7Uמq^Yc!y0tFe;E`wC,)p$}= b @9j%O- K4p:OKя)Dǃ|>,Ka-m md/\ @=7_o,1ْ(9 U ýD/{ZȓB~z|fAaaI<^h_BƲ* vطa>pq$UX}ĺBbcwq$rh1W=:)4xY3 P[>jj#У%{kn ((])Z8&& >xր*ck]mFmY .+QGIܻj;'Bz%N+ ہہsWpݎrE;j|9hu UQRϐmB[د{NEr:HحUezh@# B[N;sGs ֡9Âq_ٿ3#e3 endstream endobj 230 0 obj << /Type /Page /Contents 231 0 R /Resources 229 0 R /MediaBox [0 0 612 792] /Parent 212 0 R >> endobj 232 0 obj << /D [230 0 R /XYZ 132.768 705.06 null] >> endobj 229 0 obj << /Font << /F31 111 0 R /F8 98 0 R /F27 97 0 R /F28 99 0 R >> /ProcSet [ /PDF /Text ] >> endobj 233 0 obj [500] endobj 234 0 obj [511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2] endobj 235 0 obj [500] endobj 236 0 obj [531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3] endobj 237 0 obj [590.3 590.3 885.4 885.4 295.1 324.7 531.3 531.3 531.3 531.3 531.3 795.8 472.2 531.3 767.4 826.4 531.3 958.7 1076.8 826.4 295.1 295.1 531.3 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 413.2 590.3 560.8 767.4 560.8 560.8] endobj 238 0 obj [611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 611.1 351.8 351.8 351.8 935.2 578.7 578.7 935.2 896.3] endobj 239 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 240 0 obj [569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 569.5 323.4 323.4 323.4 877 538.7 538.7 877 843.3] endobj 241 0 obj [500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750] endobj 242 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 243 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000] endobj 244 0 obj [638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 575 575 575 575 575 575 575 319.4 319.4 350 894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9] endobj 245 0 obj [312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7] endobj 246 0 obj [272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8 435.2] endobj 247 0 obj [458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7 667.6 484.7 484.7] endobj 248 0 obj << /Length1 2021 /Length2 15218 /Length3 0 /Length 16448 /Filter /FlateDecode >> stream xڍp% 6:$;1:mv:۶mctlcc{JUǚc5!#W05813rdՙ,pddNVÑmmr8} 8}elmV&;##?D[.1@ ikt#sw075s?FT&NNv?@s#F#+9BP99q10X;:Q\͝@G d5oipde3sǿ J&N@ǁ$! E@ 8&z@6:ZظۘḼ9Qiz'7'ZD+Gs+ŸD h`nHhnF?|YXhG~@3\K sc?d;1ؘ;%|sf t|adddg@7#3?.PvidCCprpz{ `ln0h迃@cDŽXC "Bj4KQP I @ `q[TQGߓAPYۏy(m/F?/.f(3uNn`mn7c>vCcCl/U B Z_džؘZ探n@cys'#?]nenu4112Y~<*XRc軁;G?'ǒmӇ C78 qA_`8 ?`P}DQ/?#"֏ώ??j`/`~᯶𑱉??˿<:;+_CG[ ~doXZph#cfHRQ?.eAwxqO>|prÇ.F_3FǤl,:j\&xgR<~8?!A'RUg|p'8܋#Byu:-^E/Vqznid@>g:^^~ୠ]d9HybnecA { lR/e3t*~sdPNt0hnswhٓ4pާ,Q̎88hc䞂IX%ExCKc;B'v5JwR5SxW e~6}|%WS5C}zEy0aMpNjݙPn0-& hA"+if\)[Dq1Sk="ثZ{ލK~P0쵰+lX E3dgʉ%*VKVpɜEICxfM[CODKJḨhj$';#`Zmq?c tѸ7Lgt#ndJ 8IEG$d!NMϝ ljxTTr>a2u IN!}$|!NY܅rS1(QO.Ă&!tG(Ip&c x/g+[ p"԰}'VR؋8K "o`z:$AЭPL"o/aΧFaD j bw `<5&ܐ[KC̎S tV^~ڸ VLė=#DvD1YA#&%!fcZ6̤1nBm5)Vs#?,t4 o!9(.~mgGAwR7Q:m7Dg /Tk $ÅC odCz/mEc+^ݪlzIIQnWrQ_޽L'b+[VsxQjm9ƔD|YZq6؇pd2 QOůyuIC^МIK輶emJS&J!X*5T ~K1'+G{(⽵2 _8r;Ÿ esrxk! $-jgG5샞ELnV'Jph{19 5B*򩕏]̢?EF>;;VF k=]9KKd/aTDRV rbV-?HL[7*3wKQUf? o1mO(ԌU$x/tfSQdf!b%5ܿ!7SIQ; cC.Rw{GgvK |ͫ=8RC'ؔemuZq!UGCD%R69]fJ8ՐE)B:44hn_cjY=LZn*E6>sZ @+>#Sv&3Lj-A Zi9k oԤ56n[,RߪZyZ=)&*8ouY8 PcàLۃ Mn!btwQeo[ji[ ?䰵B&ԜFy~2pF"4+~^N+HvƄ3;gP8⾳L%8vu(bR bop0=5-a{ʳr8\AOaj9{:v嶥\'i!P8.CIؐ'~h܄!/e@:ӭtDN I!X-;x d!S@:;..m"Mw?ON')[ g=Ueae}')iOۇD̈́S,+1]OΈGǁ 1 >Bq>ۊqx4?+,#`fHY]*S#W#G5{ f].г9GhRjmW% ,QϨ/Ktg˔)c1 fxA]?ehV/dQܸ7}B2r'iا>e)1_Q_ $ pw̷O2Fk H,ض5+#\抆&v\-q\6de0N>$89k5*= }&܈qDwyPQ|V xVσ@fEW pSr#hͻ)ڐYUvwJz Le9reINk4 D !# c ;M#)2Wf ncsa-GhS\u1r;Y^2De}Dd.lcc^oW4LTOɊo;D;Q_y ߽y/XQV/or'wUmgRa @exor_ܮ>^fI#(_^luۇ5=Zk==!3qBnn&ݽҝȠ}^K(M&Mjð%9B>TQƈ|QT9nکz> AcAA4\ I306|ra,4}wB Y`p@D!;bh/ʇ ֥(]WReayz(ݩDjF]׵f*Y*#S/OWzBBRY0T9!OHkL$mIXFK>L#ﻺl TrE+~D][HݜrN_ɡ0Cdy]<<% o_+>[}e}; rV[*(Nmdu'')ߢu93;Y"('%OnoOt{I}N) ` jPJ|d#ڄU"jZu ƕYOFs̙~k~t bt+@sUxd f&l!w/FAgζd*g$>G3dy0j缔0Q1O:P 6}!Q+"!R^pyDQhE#r|e-P,*¦)]Un7pzlr/v`yW,MiΥ7+6{fm 䈶5␯,Tp9쇒s[L{ R "ؿGƱQm Ї>a`%˨.x ?fv^ZɣmA=-voKLm[˂e<]mrf҅|G]0o*SְIU -.BnS$0H)w̹XQEZ1IzL,tHP.֮DזÝt;j#SRD\?FYG/ G҄@L\m E[|$Xԯ&\H+y8M`Rz(@Xdѽvցv7RL)Ԧ %+Js - Fj.R8?W+I$l᣺PK$iۡ(ɇvſ O:'WndX>Ujp?{xMQ\l\804`BlHbb|QG$F"GX޿1@I7n%D=(LqD㫻҉E¤[2MQdsTqx2P:o1U_5c/1Ӈk''JmfJRT-->&6Zn9^ռypIx6@Rb46L8K(k&D\6H+ȭORiQA u(TʅF h%)JR#\'1֔`YxVGyJ*`Ѷv7( &_ _c|T[V&tZYU4Ճia :Q?5ыs]e`eSl ;(c BY#\p"mX{h}Xɽ*o ٧{Zlo_q59+ iP`ocLz|g+<\&) [|‹ǷB\j)!8I xD*ثgϊ5CjĊjok3 5';4_'eo" V %}Z9p~:5y!y'բr|5$f:\o(:| U~;iX^0<+fHp. ,DޑVjޙcߖ!ixl}1t6˜kqy#J ^WbU 'D]#ؠdwNyj#{$9o@&4f)y3Zca*7Ёn}0O{>\Jc\ y k;*6_TsTrˈ E]uG 4kW>E$N&^1]:A2bxݠ>ð&t4>F#yVS;'W\;@O WGe%^FRq LLeuaxgN_.ZKKokqF"Ʀ~+JcV^i3<,QH.ATG iZTy)"4V@2V}~QMs~85 UԀ;Rp -a9>ZѮI-)KF̏/)q=8'^$v X&ax [ A2k6u@ 1{ =EOYbL=T|ƛB2tPځ5{Ru9NhNvvIcS| I22%&qè%E]U^y+BW$>J*qR߽ 8HVQl [ N(}+*C m?v(D|,Q|lrF>$&7fm~ÏWdk;އ.!ju I -Mm|MP뎲&vdMu67"FiXwe=qwK_FS>1?X/ĠYs<‡k}Si~QZA)׾~}n'|pfNaA$ld_6NugHndLg=k4m@D!n)'>K }nܢll aOI77~Xe\65nC͠)~N3QO-<:ڟL0t˂8kZ@)~3HٚBY38E<_p[ g&G)|vP"6$Gfϛ96d!}(=b7S@/t?#TH"I9N߭])<_Gp\Qkp4ʅ0|7ddnS-4BEl%Ѻ̀x04rJٚmW7u%e.fMĶ3R7|2bDM\4tOٓ;rM=8Vr>S ˨H?eTЍZ"g7 HB>FԚoD5ΒzPcZ/_[ǼZ<7Bpɞ\y[gZ&$K[(CtȍR|v]8B2?*;4RɦIQfMPi{ՅX5ɒ-:8tq,]j^ xZ bѡYt(JHZ#~oQE-#י}0\=pt]+S}[z9Ф_"zn=[{-xfo^[bALS5[zS0ߢ&mO1UxʅxSGnTfEz nr~IOĵ഼YEzLR#;3ML.7㿗A˃^^ +8z9$;_Rm\_JcdF :) 7;\ -` _SiݘtHt s3`&ZKj3=%jأdN1[ݦG ~'agWB($>T2Ȉ$hj=E3)$ƻ7 5B2d7:1pd)ca@-1?m=ֳ5$"zve 4?y72֭O*WTmj{a&O񫑶]'$>{S(,B =h 9Zai_ }Sy p]NL j ʘ'+r-TG9hcm 35.66LW}2Y81L 쑚X rysT/"56m"ъ%C!<(g6q6^UE\{:IPêgst0GqsZ \Ş <Ih9˵Lk8mJᤷ(VMի+zA̲0CR5,&T6Z[z, FPAPC#:ؒd4qYkץ"T~Ћp) 0?@NSI+mm{(#I1Rvlck#$6]uRa̠e8lFRNNEbXw?YL=C$˔F C\/ށ*1?Lt=/;t4A"$o`5*ѵe֌mB @[i̤K$}7l|Q%g& > 0 T|j! BJVY?uMCvk;9ʶ[A# ?1/U~rw9G7*D;) ˡEy' B[}_jr+~*#Yit̃UbpiLV"2.SЩ@8!64r܆gzx`֩ԋ{{]3J8vQȡ \ߍޚz$koqE`̡⺏^L /K+9{5K|1U!<"Q أiQ]U4O.{qrJ#׮_aԢ/j}D p#; 8rT6¤ =>衼-8}ft>: ƃ#PHٞ&5+ ъR =V곝 Xx>y 4n~kDUgh҅D"cOa˝ aoWAU4QqxlB!2xcR4V~պAa.Q]eA5[dķDw^ HGlD;6|yB[OA4~YqdwDѩ.+CCąuu'27%EcsδmDTjnu_"s\ٿrw:!i՟d֨08Wf}RhT} OMJ'O]jC#2HQ)N(eU#J ̛>n M*fmvRJˣƐ  RdmVC, d6tt,5  5Kj&ȸ:lSK%qDnn K˗:^ )ӆzy(W-:n]JC"EUHRF체mZ1OA38&~MOenq vYjFyզ)cr<^؏XE@pl՘Ω:@zC?t} vg]B`׊X==:yC)* RKcO n3E 0KS4cnB?z2T'i%*En)Cc֦'ҴWd4:Z'uV8- bIy J+c6&/a 7C7pATTq}(!q>p՜ ?ZlKS Hy|54̓Z%"ʤe?uY7^[| I3JΦ=j*ls}@#5{57=V_X|˄0gI%N/B m]Z}[tn_%q+fQBc#h!oۧu^@%HzXVd+V|ѤQY$훤P&212Ϳ2 IE3I4e ؆"}( z9ƽǀ==S*aP-$\Y/oGm2Y $2 ֻnr̈=ڨF [t̔[5BswDazʱ{U&3MM,`k.n\;rur}߱`аW_G{#:OuLn% 7Uځv+,yhx ЃӈwTC}YG.Ș .#̦6H2˧#9ρ|vWݚiБIӅZ5qvAhXyjO9\c\Ət}RMx֎ܨTo'#,M])˥#^ɡ&;R-bHtψS Iezɴd6KhxГBF%#x U9^pYX%Nfhm#%ގ.ApM|m7vGN@mkmb"xE3ɥ\E2\5B)_f !h9WM_V龐M_/00CB@<A Gar FD ze4&L}a @BD4˟/Y‚?)66cn -o -հ|,#l؇_lfì2?nh 8q9h蒼>!-= ~4OߖfSuISHI~~9,))Xh Y}$5/*W:{uDYJ'4RQ㍕K~kq&ZOѫәry~ Aۣ(X n(VNc'V7ڢ dڳF4?.N8Cz4 ѐc{zɔ ]Jbwn- ;sB:}@H%Nv53 \kz~b2 W4Lh[&bQm.$0U5{ ;FMi_Ø$",nM*Ъu*.JJJ1rnNg.սԢQ`i҆ˆ_$j `i–'O2'rn)Tpzz$B]=gOTޥOĆOǛ ҿq,ҭ4B-Qx9HlOnvNɎ(S+MI^%tNv/<?Iϩٰ'V Fd`V]ǃ|+^YMgG4 DѳCm -»"_VåN}-3ʰasaIyqZm-!2)LX֣o,~D:^+.1B'`wZ:w}VUfUԠ|Ğryyن^}UB4{qLx0ir( h/7l-KyI Kх*&fR]^l5)\LO MURh&lLհ":k$V[WC>̿3Eu:gROEP}fn4tȹfm<\d2P9ƾY>]$K)~ѐr<~4{IMN\ɴ."aY)Rm~%:_wa?%\s\>VrM5W]wqoG 0k`ʻdjǩ+Ɗ}rkWPUk0["Z y6xSEj…\jvqb&EZ۩O*^-vv6w)+_z*si,3G`q=QW)Iq$ (X@y1Z^hWۘs0>;VlnG"rCIP hG'Xck#E z\OZ}ڻS"Ȭ ]=ү^?nJ,6jb,_m }@b>AUsbs Jj$G"I*%>ۏTщ$VJ|W<5R5e/Vy}m:zME3 MC \eHcl'.[u2{$ӁRADk2"TGXIԮ?>-DC['m^D "x~̙.X%Ry@ F endstream endobj 249 0 obj << /Type /FontDescriptor /FontName /ECWVAP+CMBX10 /Flags 4 /FontBBox [-56 -250 1164 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 114 /XHeight 444 /CharSet (/C/D/E/I/L/R/S/T/U/V/a/b/c/comma/d/e/eight/fi/five/four/g/i/k/l/m/n/nine/o/one/p/period/r/s/seven/six/t/three/two/u/v/x/zero) /FontFile 248 0 R >> endobj 250 0 obj << /Length1 1914 /Length2 11829 /Length3 0 /Length 13009 /Filter /FlateDecode >> stream xڍP-dpwwww ]C !Xpwn {Gv_^M̜_wRjhJ`9++'@ZUʀ JKqGJvv@e! >dφP'/!Y tl%V yc? NAA~?`g% t?g`vuubg`ڻA߈1< -   PڃƆJ бІZzg;U`?U4`'3jt8XAu96WOWh}!v@g?J$5gst8@~sdͲ i=w}2gs߽z\[d͑]VY ';x9Pr?sq:i VT;*''tX@P,[ 0x?NL' u'fV7dJ))' r;?@_qQ sC`kmA <`?oa(ߊ3i!v^Y<ϳnB7M.:EWH:9'qs ` rrpy,m[?u~/ Bx0.^^6x&:~Q>~oџH.7+*#?z >g|Av[\_&\B<|/\smv9s'ճ K\-o /sm8>O?_t9[9ku'ovgss5WkgL/gn@gk,ݜ7y8`'uij)jS~S-ʃu{B ~#ϒs/)U9_I `l2\J,S<ԿhMl7OԚnC]"t YOBʪ#d ۥD&{'Y_u,|~[sOt5V7$h6"k ɕ k NR"3Xu9r.nbb#"2Ki:T%xB+2&,O eגH(Ѿyt)tx&vv'NNy>fwt[C wv䡗 H{{ |y3$,r]?=1;oN&'?_LSG8)^~y}U; l3VMWeέ:ζ["<a#aT.K;8?KG|\6Z_U ~J̣'ixsQtA&4Q?]2mT%z;X:u`VlL-#s̙Uƭ66uޥFP9K&C:A,ԙ\-xc*fuX+4G-zS&jl z3&j;;9=/1g%̱]>k4]uyYi{owY}-F7p9P<Ϩ"f]7<3$3Yc6ڬȏ{;k.Wr]-mM!mlDKI2qDD3xf~a)ߑlX%P7lK Q˯78ԒeA(גQ4hbc*ÄJ=aq!=Hyyu0. ^6a~y"g{K!2i!#LC['pf2iOp(VbFg~%VLaDz/GPHX;mu,%V~L_VNulB?knq.8W?O, "f| E_"̪ԑ6@N(o!FFu^Lڷ~Wy=>`,}m+3]ZNW_T'D-WPExO tн]T^.vRTtv=|UKsv75#yL8))wN2M 1^Jz;;6#ufե7KmSdRAFce͋2!A^2&/O4c粜.Mxy#R 'w k;Wܱ1@4WS\q&y5}DaeAbmPeLǥH(+KBʓEo#"_r, 7o lp˙kCFZBEe+u.ʠulnBk=9 ; ]+F֎@~V t0k2mם[ j3]=;O~wKDb}N~M*>S+F"HJnH-f,=1fYؔjzlAXŞ`@Wq*L悜G1>,ި[cq6naйJ|H#:5D uei5_,.}rnC7\L<}kf3BZMNBRڨ_C|^uu6]pU'V|; 褕 Y9JCq.ArW~L5Y9h.㚐.WahP\Mظfќ.֨G ^h3Bv7G4qFւ%*B*H$~^7+};.f VjZ I ǯɾvaƙ 5`q@0kZ9s~l?&]]Mx;[vuIH۩5EyQ$>*T|:R-s6u/9FPbN<#ߗnV6ȹ_'C ;BD4~S?}f_#6BtV -#Cuv2&lH6,z*c6: ՊKBXy&=PVsPp" ?bkn-;bm$}EȘT Εf"Ze]b) ՇAT\z|#''DxG,|˾g{\%>7c;>uQmnp"[^u rn?)n!Cc@0FMnɚuۈT;Zmub(l\i{EdKqgipaDSں3 aS7/ Q;iZ%\Md@(LAnz_X|'N~uPl8}XXUH{>MlD׀z-_¢zY eXLo{D-gf˪\jI+)>]ԇ!QBe\L͇ð>N^f .ZNN.{6quS`Mch5$'N"F(V4TIѷ 5n9JbY?l @kU+ i˹M%u9rިh )ae#57Xn%kЈ~vRqCQ[*h:伋vX5ؽB"##?g=iU_%o` bOצ$Y|'~F/MGY闃\&d$tC#17V)&CԤa`bgٽ!C7R+PF|\gjv|8^Ɣ%f#ձD 2]]RJ2+5:yQfD0BxC=jȗ'gRɡ|Z4eQϴM7/%-MyapOEGxgUfgU}䋩UQL:=VL&M3՞;yP˥ ie--z"KƖgr}f_<_e 2<}Gӻs؉6݋^c~}u WI3%;dh*qhK)D= פ09gCZN?c[#m{Zf-WP++QۏbF|rZ "p/&6Vvks}e1 >) /k QR0%I$%i)aJ}kj}PaOlUk 1[;Q*y(ZMʥvxSYxnQ|é03_ |K8ide 9(L_l䦪hH f~ sN qڼ58r"%i1sF93xw)_1(b$%{Ź˸jv@A( ˄+nEGϏ"38JroUȟ˥G:/=16 wt܂dقފ||Cr@'{.m&t Bڿɰt8N-gA/>z^!ҼB'E Ej^Q\fg{ ԒhVy۳I8k"i$aZpdU63ɷ۪$w:[gzLc=>{HoVwPƍ.>b_ k`)-o 0#6|9b9mGٝyY(A`ٖ5xp}=L8a~m4d3qc?hyxLf}Gƣy,`YiXr*Vt5< ~*,@wұTbݞ"07KDc薄4͑X|=!ZJ9 {qLy3~SL*R&WK)^")ӻC9jK+/"oLݮ޵:4yV ]8-~~C>1`(f#sj9vkeWJºM6 %cc;>k""(F"+ _8Wf q%_}K@|!P5>SetI W0Q9 ¢SYB~;G9w7hT*H;oDؤzA?gi_H*K([Uu=so G٭ Tu?C>VeY™e)˜ÒE [9,ӎNw,Vr[GŲ)JPG`7 9:h7[eHy D[+e*c{?Q2m&AdJmԬp9f`%Qd[5^F> ,:hlsH<9祆>ʀ9OuZ"xS.N7܄VXySB7%;\iBKaqyc#n|DS{Zj oJgQZlLx qZ/`ƔV{htlJż戾k0=sg ("MzJ:WJ u[[I.*k j_ʄOAH.6cZDOkbu(%C-Cxɛj& LE-2e<45̽/ bl*_K[T`x74b ʟeƒ#mՆxʓF#J: W{'{V2e3iW^Pa~5D7cchCYRD^Xl]k%HSR|QZuC4E ,S%&g/scoA@R}Iڦ/kpxOmqfh2q̦]Tj ځu*_eOQ\nCNYF#b߅DKޛ˼. %%{'IvU}W@е*DA EZ12^}Gtc'iR7L\9,"8Oqx]P%М^Oʿ?WSy_1liעTjyFTyJhor}^7kmZH'({nYks c@Գݢ.j㄃`cmH`wO)G/˝8 HK>xǟtQb~j*'>/Nz3ަ_+TŹu &/Kbn rp;Hl^jl'cxWGA/#D]p/6.h.z{44\+JFvM>X3N/uhKV @YrQ _!Bd Dwx% `wFn<jW*w e#^UQ՘GnBgo 35a+B5?rZ"-H)N8+H|tSh))KĄvX{aX|)3Z')X YWڣ^=Sv`;zax ']WʖxHkY[xEaQ6bK΋/iELל̺͠bp|"mn}gz.%&GcXB8>+$LIP «-eb,(~%ab]lHgJ|/ E:+ jG^pL̐!TvN=(@SA!9u9p)MHn*OFLAn&*)` 6IA. ʆe\z2.\5,^&ADnVVaL\|!Ə8;f -]&>[Vp+J; x5 /mhG02oN[YS&"\-e:57nD-_yHau&XW,ژFDDW?9u-b㣧k,dD073R4yS:MJve%ț6wT @DOFݖƋȟJ QG8xC+,K B옢|.G!DŸ|K4a} q`vR4F\87e?ZBBlۉFN|zE9Zy >x@z,-ڐ vuH*KI249)V>'ϼKzaO) m ,>Rv®8muX c ~5x=^ _Z}G!_ /)_;.)'ԨNXt8+#h(B6t%)ѳvBoƔaA{݊CтeHYvU"_T:KC/?gz{$Pb6nvvJDXG;C$#W61qPn*LH/|p }zu5%Ϟ*My|TU*k,erlBIM@C_L[Q*fs֮M9ZܴMk?~}Fwi`u3,X{ayQcͬ{M)< Pj#%!('J!8E@ptp zNg*#Wlmݐĥ~Kz,n&XNr~5&b!crknG!B@dC7jo2p6qk[1Xng La /F4 %0[BϽW伔لV9cQ\1벦c}B%C|$J^zj Hݶ:En>]e%b7Fo\nՊa"wܴ%L?WG9_ ݾ.N6q +wα[4Z*)l9?mN4b mɤsw%B1W?ήij+̔xߛWfa2w4ȕOv Ɓ1& YjIq'lmIX!?T8c޵!kb7ߟ0x5 ЎJO=2ŷZG7F\ ö.Crߌ_r}INBYӤ* 7DJN|${ڐׯt~?8CudpsEG4a6qDaO3a>ޛ(t$8DaPBױMS57+gA4ɮ2Kb `CR(zy)ndڐcک|X2ĭ Qvj# wU,^ST&}3cx_.0i>~ҿ&ů_-w/_i_ӦH a^Qbb\Q5Ӑgla[KҞtN ~W%͹Ŀ^/h%TU\µrblc i).݊19!44-)%RJiѶwR}U'VCt΀ NڿU _EQ 3$dґuQHz*M[R޷bЬ2vkWѡsbn-LPk E"g[x}B="eT۫Km 3fRMjzMI$D3/J/Kʛjx~ %~ȳ}؄*4-11ԒT|X]=ecqZ>7o5ek~s1$VEK<u\.>)29ݯzx|nÛa:ʰ8jj$;R(#p n힘7a ?lL Z'' f1un1=.ulog*tY*@_2Ӎ b$\ć9GB endstream endobj 251 0 obj << /Type /FontDescriptor /FontName /SOWZCQ+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/C/E/I/L/T/U/V/a/b/c/d/e/eight/five/four/g/i/k/l/m/n/nine/o/one/p/period/r/s/seven/six/t/three/two/u/x) /FontFile 250 0 R >> endobj 252 0 obj << /Length1 1419 /Length2 5918 /Length3 0 /Length 6880 /Filter /FlateDecode >> stream xڍwT6 ""{!$$ )7"һ(U@"*)RT^Xν_VJyff?{yfB*NhG& dj:`D ඀cq4J?jX8OCDԽŀ`IY,d@u h E8Eu^ya|@pAQ@(A"fhG ^yW<#+"- .|@oh ^p'O@C5a7vP,H4 08 G rc@3}  Xt&B~Ca0E\$h/ (@(&C$ԑut(PS%2"0x0Qg5kpy>u#޻ȟ溣(wONw0"( JĤ%pO *49a3< 'pP/8O?w0脀၎p D3,h " keKT7WE,t PSU J`4PgY?:(g4g,7?37|0D [6 ?Of_'ҼD?~Ap'c[LwX@81 /q`ć س.(8_G@N?gRTBb$; 8Np_xb9~6Z !8ןf?R`ڿ4A>p&VvP-<,O~pKThȎߣ1jh=Wiay;noW|OSsՅ1~lx>ۍ fcN*%'3nj'y0iJ醵wVe3X|hoq,K0AbMTa =C@w|@4]7`]{߸trl, .+ȤsԺx/puik:orCs,3ᐝ3͠/\vʍ$kSLYte _>;952^P^ADӊ ⼜I[N[`[p)BL[ZKAKeB[nщ]BW_iwjϏ ~Zޮ3Y%Mg=<eĪ=|l<Om_ݏE9swD1 Fx2QADRfh'U/D U{A8 0rr.}=ԤϾ+{NL'Z [ew_$/)Ӹ]IZ6/)e}saeVinyxM͢h-_Is^Cз5qF |EܛN[-ޱOi+~IJv2ĥ2Eر%[WxﹷU&̚ J+YSXz̩z[6Ԋ`ُ}iYsB4eGS/-13igK[ӉڝN !4$dnOO ^_p+pxdlλG( 9j֣ Sy(M1.f,-m̢PwH5w]tkcߛ+, os5'!φڜ)?~? #8P2aNQ)R=$}?w؂, # ޲ ٢j]eg{{r@h~~eVAH -O|Q@'H2_uy3ӱ[)qn)Fvm !ܝ紆)ljWT=R@-+b9}seW`^MntlpWhP\DɱÏ9vv/x[[vA(]i~9x[& W0$6(GD,SNkֈ f\M&k5qs )7! {g 쯰O|\k}yo}`PL;K"@XZu Ih[=eZf@<#W{j᧱DJ%;@[ȯމ?j[Uv% hIS+F#u#^[Qsw;!1 Ì37,Z*ޒOr&9C0Hdk<ּ1a%JLqX/m;aF(-gߐ.9'Ĺ$VTI^|9Zv=UpМrr@w5kjԏoov7Yjk$pIڼnT]YHLX_6= ]‡ fEM?Ɓ̋{VZs 6/j692D T~x UO_#w(bkfpN -(OԎ ᛻6[$F^3]Fd!@>O2dd> = pQťA-nǮܫZTҎc 8k>Zg 4LFᙷcU-j2@\nNUᜓ xC+s烞kG8nUznwܺS;~fŽgMhąV5UoՆR)U<_$k-;HPŠFrUk7IY> &BJcqk̬=(tQfVؕ*m5ϼ:bwNHUǚV$p}rڢaj0Sp©u!<{Gce9dtpz?KkqEa^n6|K9BmJ\/OmDTN5vSZ݇[g۸yv .j gW7.&aD?W%IioI?|*Ks õ{{WdQ+fz'BnurШepS)H#}ahVX烨(0\8 K9o_۹ iS\zG{r~{y/lSow;o/ol&œuPIOݤlUf^'5>oa-޼\,yWoTSN,M؏.MsTtWv "؎ΪMn%d7ʄ>%4l(inO~s&o'Q,_lG<+C`򨗹<_`mQIה+>ήi{DNҔ Z1[!ɔf1`n긙 KNJteX}QJ!xr)!p)ݻiZ)3,'+}w"eCIz (E5pǪ#5HcF|soi5STFy >ŭ=1ޗد(%ўU, 1=^T}؜ιFnJaJɟƑ$YUOqòfc ,ߛNaI @07UyV|}a8vO"3-?BC+0/ոD~ 3 j r+t w}&#k:*DZC#ykjXNk!>w9 EKGN "54<`MH6sfl<;qVjET%qT*W πlO 5$ؑy {[HdF_^UJ&7E wS UiχC}%ёfK?9[3ݱL3 z,x7"f|o24FڞgͮM% x񱬂$}ٴY] 'oMRM@9d+Mk.-_<ΩVnOýEw[@3Bo'.ܓC2K1|mh5bi6M\ȇ'+]쿂Ow%!߆}m[:~L@{zTޓNo'ZZEwe$]ʋc"H.d]R>{kPVa!_.J(͕fMG'ѱMA髊ђҩx%rcp=%4]y>oy.`}3YZ>'dϫX?|D5Z_T"ҵmu_GXs{|5/$RgW2z` N)TӠ|W!N9R)ID/Ʃ%^>ٓ^K/ɵ#:-:\qþY"&N ZV,`LH]3-/hָnGS^W-## #eZ2I:av‰H6b)j+UC]i,&|K=7({V$Ш%@"\Xh]>`T| fM U..tzqƤKoz*3'uCvsh_z:'lepe{̛k}d ]HN=n}G a^-*0XqU5,Ww^ 6'csZl#0_|*y[46e*wY+ )B5 CXu͛k9c垙v4CV2{CfXk-l ͥL.) kٳC:4Z!O+/K%Xrіcg>Tޜo?[ (@ܦ|{N{zk6?d endstream endobj 253 0 obj << /Type /FontDescriptor /FontName /VIMHMC+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/slash) /FontFile 252 0 R >> endobj 254 0 obj << /Length1 2716 /Length2 23835 /Length3 0 /Length 25364 /Filter /FlateDecode >> stream xڌT Hw ] C7HJw7HwK ҝpƽoZYy;;(HT@&@ =3@T^ Ă@Afb G@tra 4vČ]v {-`ab!ȉ ffegȀ O'+ Kp=MiܜrL.@;pFSc[* |..< v ' ww+K 4*`l2 rUZf@'89@UZXowz`f`7?޿Yllj s0[r ..f mA`c7c+[c_̍cpldleD_a]7]~rdmAs+{3_E:0[91~,.v&&&NnV0d^\`.ke!x;.N@_?E3+S wth7=fӯϿO2z6ktWNDgcг3-'amKdl?"Jۛnpg-924fPwzLL?_.W$\mmRSQYzc^eW5}fVvW+b >Yhdbjo V@%կ@с Bq/|Rd౰s=#v73=Zm#= 09!(;Qo`8Q7083xC#o `2o"F`. ⿈ E7sQ\T~#0E7sQ\4~#0E7sqF`?3j{ f`7Xlo o$l7I+h71J33vW nxlnojd ƿ!;//o/s@pta \<? @p|2v?AɀAQqsm濛?`vߘc7`\/n/!hfblMb_c.6vrYw';83oQ:qE],,..?1\XGnorH^@S&6uuw%4EX[w oOSlk{/:u޿K \sNAYZ"~>hm mKTny4WnGX:^x O^MhG#K"ѕG[>Is;5SQz%3&ٳ8.h3Wh/2tѬE:,1w^j,ݸ:8Wh#"{)2ޥE+_3{<LL:\0#y>g1UM gPm^8^LROO q-Yō>Pg K[l *g<]b+$Kp6@^&-ٻ=_=i}]pQ^LuI?0(}m㺢BsqwZ&2Y?Y1]R8fs ّ]s,hwri1 E~}PE^Z!fN[j7Y(1Y;dCgx"jɼ!zF7IMn{V镰x٣ҡm)I73."#Z 7.e|!de;Qe}+xḴ-tO_W/_[|ML0L뉝G)|e -I9:ݜ ͢4$Q!Z{|T)g*J$e13۝46-d}<VT[)8k$xrh8CyeV b #I֕y!C]*Qʥ~rhϔBo_mM͍D7FcIC#H<5Šsy;\mʑX7o59^SP)+. tRڔ,Ê,!/%eDuD$s:=FR}eQdHV"'}ؿlO^9EʎSPX$xȌিsWx}wMH h-FA|+]+M26~wjRE)X3w`vޙAg'ڒY8x=7.TAH"g6U:b`?"aJ#?t*]T> J[~Cv;ib~ b_6qؽ@(T#gϮzNYF0][#u[*azCRq{K 6ZtƪrT]P** 4{ĵDFlN %q|" aU9rcvrႵl[jo݈dm Z0 i\* /}j[P&e}@sөkH[{/yu7.9BgIX=7M'$uVu*_ڼƣ$þF- Z!ՠ{:l.${ɉ V VQgDtyR6^ܫIW8cZay5HjJ/WnAyww KxAN-[]₣lo7sqBxRkJn^꣘_u*h˷jbL?zRf] ~VȠnb(CE.ĭZCZg[j[/K&SUѫ$-{)6ٔkG?5ZJF 6Gb2z*-#ՏA=-wB(X 9R^\Z2Qxޖ2Tub9BaaaO~mޞoZ\ x`zm8$GkKXh6\7ϣǪ kUyq]$:SKYǒ@l~4oAM$*x^"&AJkd?5fcf.W WE wf')@5kyЃLi΁sh3{kg& ϫ%lR}2/?/HلӯKD1[ED\̈́nJ &lBg"ek!y $HS".D)\DCo=W<A&TZF. :E~7DBUDM~XGFr5ƅޏahn?NVv>%^2Gw~9vNzqnM_v3|u 0C'%6g|h q!Y)͌~Rfl&RϡZ -VF{Otc^nA"^á.Yf:a~^t\͇jAp!,X/!rnKT; ɅJW&&Nv#akH |v\&fh~/NwYhEU}qvCJtB9e,Ȕ]ᖻAS]ə8e.?F%[xUȹ90(}Y!oAHڳRvW4MOwMEѼpTo Zx\^Y hfk\Vv)HQj=Asķ_r peN"89NnENx1u(1TYFY+dR䗆mϦڀCیv 천OR)U:5l]}Io)ɇ?!Hf gKsqe)LkZ2EGUaodmoGt?Yko:={䕴%f'x_E*ֆ bOX]C͊@ j豒#41WS?nZdKRCƷQ{1ܒ4jh)m !*Eӑp f-HQWa\%Lٱs6McJRq h2.<h˺yx`T,j\ynXKS񺩹E)fztDI h ݧH޽?dZ诐!/•#/SZ <}r&X:øџ#]ić}[&dѾmo2T#n( w۴\5=a->ALnǼ܂ےR_Dh`UR}Ֆp)p6kVy>5OlJ* Q}y; mCm?ƹugJ\_UwqepQdˌȷ-?)w*|%Ma.WR.mcIM%]}'ν];Rgdo?"V U!1J^cW%c#|Aݚ#9=x_`{XcZ =Dl@9mdOmNEd0Z@.$`􉬑(jאs`۷z sO &!tH_G/𚼰i1j(7׋uR^9uO5hq&ŢV*11s<˄T~t(!aSkE}\T[i0'龷>F';bni󂲬I/OtZ%)( ?7H'zIieU9v/iX/#RN- ɼ jmG[BJQ&pWSF '[ƩK}a+9̄>{/m!)7nRp̱݀5eT?rݝQWX ZFf5 і|Gǡ ̬Oj[dS WA=Ds'$%_^ix7zxO73ЄxЈ鯻}~\g8^&ҨYMx=ZbY/UGxʭMP)Z\d_4z׶v8Ҥo}?!N ݪ,BNAqϑЂ "֗U:Jvu9؀N6V fe5(UIz{wߧwa: -57ڈ*0&S֎)=O .GF~_s|"B%P8ӃwWy4 fi|H0OX՗ nIdC,\)ӈDžq!>eݻTZG|tY7&+jY s@,p!ѷ % BKrnV(OBotν}B} fU#xg:JzYObNUYqt̚eVαLp}`|f)Y=Y;"Nycx,LFݕ|_x^.- ]S׽>Rh_Qep2֝~;ЖD# Ȗ͊' !~๝Gսr_+na7:TtK"nAO f_7HvS weWDy)\VFBavTZ4 鶠،IL3!I!Ɣ RH2Y-xB6K*Fz7RK\\ ~ZP8}$YuQM؏9h,=”(r)듏M#K)jB-FQJ\]nQiP: #M,_wEܯ&g?_/j6QR6Ew,Ci,$ў]Wv @v-.ltkUD9ZՀM8RxvHJk<*ƤK:/T3{pd RF>mO/2ӛ963e:؊w4o++ {0aHO\,ۚլ>Y;r9G\-xQϪ9 &me{뙀Q7WK9bzdo|jR8.ٷVbͅ=nf]kT;wkox d ;VD29\tCJ<εܖV_c ,7ߠ%Vѵ[Ӫ|`¥nS1>S/x-lr {ftb/#SO$M0"t1!*gZmlN:Y6 |55} 48wZc5K}sI{9`lWlUKJ壌q5(!omO@8tn^ӣ|pX*wG ]zZPKkK=hUj*㿲P~>*DX\Fyl`wVjVcWKnh\)d+(/ﳼy9Ӊ!9mYhL ꉇ؂xGE A#ި? i;j6 JB \ebғ}ϾJrCjgMTıuE/C=z+$#G燾ďwUXW4 1kˡؙṛek\%.ɪwz͢J.2SDvZɽ5UN׃_vq(^5V J*3^>en`xӤ_F|$"7 O[PyqFධJ[b}_}fMq\ovygy gw:95ăOE[c H)~}o*˸vK2  7NB8F' hR~mG#7%Yn,k*L- ښ!JȈys{HgTĝCuxDED& P\["$?Ky|I- 3)}mY <`ˡɆpG+Yb2l;qϊg˶/4pZ1K}[{9V&[1>  Jf[,d R G_lX88O9-^zXؼeT.i엉`'sފp F/C5OOE L(쒿[rr@l&8۹ /xD?!5]TWAG!uѫzN>/87TzsO;oPwut5Rw-ܯFƎM5t`y ܆kFy.#k(Q<辣gQ2>0-QcOӝoqX08`E} MW5!zSmc6sWAKE НʧT/'V}f E$/ #q~VHCMbB<|$.aYvKUYS%Jw K"F!Ҽj,jN]%v=OyHGeG׼|-LWyc.zA۾i*-POvW";Aj4"9\@N.? zzDx96rWBCwWĤjmn?FUӸ(L !Jk(~3N 6{ӎv.άTXwpz;Nh0 {ӏ#w0 QrX ,L+I;2ƚFD|Oݏtb|0DpW2I7cՔ xSZήz Xdl Q_EWGق4I!yrt*枻}Zq?`e`%D\=B%@P"e?zkKjTZ2=խ'uR~^Ԍ>42 xZRnr*afԋ*/g͠V0fMO i:.xX\u3-7g]61^kj 3N0VE4m@ 'Xʬbzbj#=-Rk6 "U|>F526( >Ӳ)A!IE"9e8*63ľbr-Nw( ?TA qy-U\*ߚ_Re}ՙ0lW-QhyiȾ]dG {iߡ)muB{dp֟`scn}9Hj x!n=0څDP< wG|0 0]q/Bc%&XݙSxܬad?9F;I!}^3Jײt59,uS&$a9~~zgw9F6>~iwxMYD) ʖL$ v᠘&gUeqŅ4!Rc񂫙S05byr.!T?zRKګ2’ZP{sd'}KN0{+%r@LUv|9v^/i|ǡ*A,>lB Ew8e "s4U\h2iP$>PxC#q*s 7~DDw\O#9FlYuME/ٛOi]Mճ牜[z%&k(:QOA^Lm;%VH( Њ 6[p7TvV;. TI^D?+ 3|ZwcgR\Ec |G}JR|^'^ ҂8NC i^d(Һמ^`Y!#O ^uBvaww$E|&e^E5t"|ő֙QhˤuveƮ+9:Md 4}]qAPRm3 fOgcrӍOk靔m~HOouG!<$l8= a7;?hٝ^FX;>盬EnCscWl`@!COJT ޏ֞}F>˖6&J М'h}]  [G_ŠSnJjM>7\ƝwN?kߦ]8+s1dAhT/F90o:Wz @tA9EPKF8u ml9BJg4,qZ~%QaU)vƶ,9kkqRk=!( Lb3JޑNޣZ F)}Z5 ϣEW< 1h2B(B:5Eu5xye]hᚼ B<e"E.-v &#BڊGF_3 8NO`j-ї5ow%?˦-\%TPFӽJdQ^yO{e@&9\Ys4ivdS:.S9@3Tz)Z 9M'8+FWR0h0eǠh<hJ]1h .̼ETh8G(w߱8.Ye6\ 7y8M5=2_&^n309LKni23hP0dxm3ڟljC+amMͻ v!6-&08йFƩ`q0`m_IVUŗ=Y3sz>p+a-0i qy#)!b'[_h_ݽ˦3ϫ^c='l1uGb27Qfv%p,IOt݆:Zu?8z\XZA?#_k,ZHQʙpV.`KZXq"8[Ue' ^x`JUobNN?MFWJ~]?6j=g;r̠4@0 J5R]oHfmʺ.=#&8MmC`~O0>{W֕%TF0I8jϫ,ɛ"i< @ 겙;cd*ؾ8Zfpus\bݦe"8y;hؚ Vc~oұ=xY1j?~6Z\i7쉽8#i֑pe[31g&vτ}H7)Elƨt-.;Fw,[{dWZ16Z>?JqdwM$߅"v)0{R)] )\J5XO`ylC]{yszRQ%G T3sܿa3BRJmGˌ7g Dwr%"F+aC'6O++PZwhKs:ޕOB T'ط茝!4Rc.{–I*_1r\S$ZPG肛K70\ {4=aeR|쵳 Ym;諄oY;apvxHbC`Z*r*1?Cdj]2j<끜B |X/~NIc7DA G&*rWa_Wz7o u{*(jF>5;sU:{P$pѪv9jRԲx 0y]r10 {X0kܰo[ L/`j%9569tLNIIZV%q~خ^sPuF<;iS<̐F#m 5Bb7@bwTtk7O^7,$3?$RmpڞOԌ?c+D౾̝XM;Ln{B7 `*q4 9Zv=r,Yc!&+UL'f}&{nÐ( T77EQ<"1BÞRF>@%bsLldpM@d*ʌaFzͥ[}ʈwWVG{&FJj5FM ;/WMvjSDqPD=aE~H`)Zeߡ> C.Dsg-rҊ ${Y!r| sf5Mu-nG0> I:ԇu ,ɹ 44 Q~DH\n^vBb:t~!]*,422?u8%~gT,*V_dcyc؟Tv\cn!FH~@Lݍ}RLhm{wY4*膗j u&sg$f&*Β(9JwJ%΋* B_/kkaȄEl/RBscuG\Yb+YX)^OLf\|;t(\d j?IRa3v:_Ryx쑨r GoLw8W $w5y:Qv&齄kVqbxRr[) ?CvXᙓndkaҗm//}&ZCfc-脓~3u ybeٜܻ󫻶DfSƳHP+Bš/ iJZ]UN?t(!ޕurOP@/Ii~g4)H:)rvY1Eg oE*@~n"M0iFc`88L8gQ1a̜_AHerUy#dm27/1sSC, mШ?:ʍ룚ԭU&㙅L(̑\lX^Wkpvא"#x&xt|ϐ\EK$JývTΗ 8Ă3;hCI %?D yȟB;[c&rIC85zkl߆W|AZ |x Fbb%FV El8[;)&03(%VC IV6sՁD&`M]sXASg|u m$!x# qeQێ%tS^zҘ?DP<XD쳩*0mN-gb%7I [N,xTF孤=ȁ wBνlu@~{!`ө'Hu#-fD k`vr`\iBPbW7wkd;t-{ ` vbGEY1!r% [~e#ˬvytW$ =u$/9ZySGR .+A^ %>͛oFr˜M_m|ZiL[NE~ETr-^;]3&`5ԡ}~tނ&JslE#,娙ƊzG6x;ɹhgNVTV0t Tb f 8?LӧgAQCЧ\r f^QdTe݁W {zm)/h+>x;a\TMRXh I0VF$1]S@y%\?^&>;(̊=wPT#aLtnXaf;EO<$Iw@Oe!swv4$ZQQ-js{YZa`av2zrT[ˑ5Nyݒ#F%ߌ '):f U(X/{HE_D5]&'F@bL? |aHO$l(u27?ސW5e4y"Jw]d'/ h\[ci{CQǢQ9mCGiǃYP/g o7ᦒ*tCweB C kWԆ%mqz{0)cېA2ϞÐ LWVcwKPT.*rloDXp<>ӞXkMUD)Q3RU7ҧi;rc aJ56Lm&OqW͖k$@qBQή]WAt,j>im#%݀rYI/-mFL%jib NJc 1m \z\N"XJ&Î0K>.uܬxU7{V(x5P|Mv- - z|AD]יcp#--} AF5?[k(Fj@Mkퟪ9vP &mpQ&\H'?f PE<-uw+a7))i_yŨ>Y,'VDkvP8r8|e8E.4}*5yVl|3Ӯ*- ]1\܄PɛGsd.( sqֱE=_(:igfNIɏ@z[{'m<ӂ(Di0}o#^nU@"dN5$@$d&45^Z 8XE3T8QGj(LRҦ6rrtQԄ̖ϓF5Y -揷rȯJjH$^%UZ g4ȡ_E;e;Zv2RwĮWF uTB;r)|R} 4f+ 8mrukPßlE>nm3 b2zaɎai|̖;{3p ?v_;8nrl"R@EʓaXxYhh. y?Z!6a*ЄHbVN`kA-wTO{o4Bgϰb!Ps )L.bެM$u4,?y(@- P8mB”ݐP NK%(^}sWԱo9j Ӳ0P^Vb~!F` 0>7gtDXӅ%Y8Es J؊*7Y-14]6$];}d![<GΒ<2Tb`Zuwʇ"+l6[ @G B^Nܢt hA)&֮ٗ56L-B¥ cs)3δ@Ւ~=H\eāl |YBL{HUh BC; 1JV3elJ=L.7 cP%gߦjxL*Mϔ\1 =DD]B>Tkr&d4&)+=Μt*ӷ.ѝ3`:RvsX&mFyU!/ezDJWݫ ,zK*tQ[dh{B*;m=8輐O_nʅ-Z*z~X6(C:b<{)> |wX}s;u`7HĒ1$v5/ =#@,l_zg 8)5~|fg`}:'w&U3ᙥD|cw)-  :TBwm= +"tt Ag[A<`2iF`hiBmB9> 2dcQɼ(=Vûbnٟɪoҧ/ݮ~yDu錕 BfW%`7uS]>amUXYqކ"Rqj#2PVj멷Fq*[|rRgBA;9r܊ym& jPUyo~ p$bk9<;w%EYGhS25Z%dHM~gFsz kiDm(YW!"n]X-z{3;A ,o.}$.U32SZ)LΎ2kj2#6ljs{ TW UdM7sM[LѮ;T.tʠ["5άw3nV=#ev DRk(x.T6Jz4*y!W\b]=%<{.H#̊cC! HA C cܖMSf&0eFFZNdbg$ϲG:t2C!RoŲjb06:{w%3ivRѾ&  ԘL1ڀ (`BAb15k@/+Q0UAg'Npr }ƚFosҬ{R+BS @K8τ d%JEuX.qUBbUy  j, pTqSܺ.a}}e~=p[#ü_ 32$'^B^+M\lH pv(6YDrEOͰ9-K)y'bbxSCFőt6tC UZAGmp --?d'|WɣemJ:RM0YCYݢ 1>W ,<*AsE/o%J|^؝nTcP﷖[rP{_o^u×zGbj><>zeTff\)Pa_;v$WQ1,F$Ap\&H>,iX+bwzxS@jDVU 9 ȏ^5;'966ZY .QbX8""&8`m>vrԓpLr;4b6 Xǿ>?Y_Dmɪ ;Wb^&0\]i|lcЦqwC}@bhH=H(i~Mukޟ(6B'{8; ȚLjXfbLk8[|t)!sep;pya1PcdvXHu8 h wWxӥžJͧɃ0m]׋t0 z  =rV8Ƥ=J%j`2D .Qͻ#h(@dg.6<4(Dߊ5[+ $QJ^o e8ieng_C2yz޴601WMF"0w @x.gvP~z$iMRs>p *Ic.Ih"9<}h[UHn?!bb)"ezR: I" 0y]*VG&2*:?'"?br%ѦUJ:yW%IEz[Q,3ax]vk#c&%EوVP LJP@|< d䣄bGpte wE:5Ӈ&^Io,_ij?W\ ܧ'%@u4v&Ӱ^2MH˼6$`d5G(9FC'艮?fureLbwrdTv2Q:rSj&AB6ﭲ^wg:w֫[.R[|lCQHp9TJztEwM^)-dC<`Yցs2YjO+&_4`\2+nKAW y5KEA >KHT4o*Y5Sk"{J?x_Py1{cN?1ұr)nMSu| QaN;B1a]ҥ{"ƌсv)F DN:w!NFѕ׌ghL]Fh}Zb?iE6 o[T=便tRs}8wV+ee"=c25k<Ž,,G_ /X;^fGm.HZƹ’EcA.&SkZϹ7(u!s~ )J{WZShyu3qiS>! *SGmpԥReCG^4d pO 1lxqS%_ZG ROv"ݦ-ɧsAU`4^@%3)__"nj;NTqYQ)z7Vw 3kG̞w܅&( .pؙW+{{jՏbzxLyIK']g !Cpoa4S;ubSI'.%w\b{.4XeLS@kE6fSZE9,05Bqbhs+|k<|I/՚Wε>Cqn#O,aTrMqC̍hWe - 1~" gTBo.iݵ-`Z9|5$E=o7xH!Ka>4v:IUEG g]rVmݛ$Ԇ(q#~YMS 307^-O̖&"}w_Z;"veHXF啹Q2!29 0h[3 &Av>Dln#ۿjR#, W>]/paB*ziH}.&&ۛBSlj+݆H޸:;û3_\w `^ӼBq}/|{R:,i^|Kiý:w5w^LF/)/GHvscI6eFgovhHR)P 5;HbwH·TE@BMmD cpX[ q.àԲl$ZKH endstream endobj 255 0 obj << /Type /FontDescriptor /FontName /GFSCGW+CMR10 /Flags 4 /FontBBox [-40 -250 1009 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/acute/at/b/c/cedilla/colon/comma/d/e/eight/emdash/exclam/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 254 0 R >> endobj 256 0 obj << /Length1 1789 /Length2 10394 /Length3 0 /Length 11527 /Filter /FlateDecode >> stream xڍP\.$kww!H 44 ; [xdfUUW>vաQbt4;B]ٹ8M.nrkC\u.G d ',N Pvp@7(CGga,b P(;B.20/gS,\BBl r;+wn0N( $ɓ5x`'†wxm/%oS~>0G  r\~>V7BXB,\`kOb՟!#߿ߌeѐ`uҎv^;7@HP wOHAjP j X0;xzp??c$foG r{ed7קPq| d%J퐂Z=F<lqB9(Xs{7 PSA--7? B>ы`? :>X9:>Q~oH p#'??o |s=7|9cc/ 8\@'_)?ٟlOaOsSr.NڟHj WOz8iZnOrr?OOJounOwD?.\0l4h!j[~]-E7.6Cv\|): guGBrkK=jDkF۝i^$DW~J4 vm}'_ ;.e|'7A,Bk>Ϻ=*e:1Jg sH^S>c={q97HȊwScw3VMJGjHBx7:#}Ldy4}cl!{OU 0) '"қV$R$ޜJ?Z]Ԓ ju|B{=yuއL,6u^J:Ȣ=X׃k#k BXfr-ٵAGk4ëCJӑG;,?-\,HMS[Sd1XP] #Ҧfg4c }`Ϊ:l@CPS(U1_0M5> !bk̍HarKXv/bK92SxOgcg'E@Q2k-ilLU|\W'3q|&BK_ ~G},G˱m9#wM=jb=p!!2VpmF)D Y\PqiV ^/Ym|DP=݆Y # ߄P )O|;eњ"yfU 7OʉE=y؎#WKЙ{QcL.N6B_{qLG֛dsjᦘ36\Jj{.km}CWnս;߈7mWX]Q¯ ~=sP/gd݉g1Y`G_MBO)U'^VaRHf& Aލy}.IB#(ϰo9W1+YF#֢J!HpQ6a>t9˄嚱Qs$RWԻ)ݦ23 !L>#H*kHL2gpOĉ둽-7M1cĝƵoSܹB@$r&..m9HRw}G97N*9w<<¨ R'W$Y3O'> =~B0cfևZA)WG)O"-UkjMD@-8r]o:4bU*W8´In=&%ZKdmle~Pxڝr|)V]oVl/UNXF!{ـdiL~d#4ɼ*jMwmvu_zff, 9xxb s^PSʢڤ^qKd>}#JWdACdu Rz I^ G8/LIbcf6VT1}Z7 <& 3y , -Em->0"U~ v䩖h ʨr#dqM;&hhd  uB\Q;6*2AE&teE6Ώ3({: lc,!1 =XI Gd~߹+zq gGna*&q=3z 2l Ask_"%(ͫ#hcd-:[gn2o /5cl(Uʠ~~ųHV9jv%r07GG8W_*ft4WH&` $RH!=]AIsƏ:+#5S"H_D:/U/o_.Ur2YZqrkf})?cIU3;mFƹ|F=Lrix\,R_VF1  ɹԫN8[Lrp܈cF|-B6Yun'I})!)%qimkoLeJ?.#]t@.C҉[u< ɇ-L) }!Yi>cocjQnh2@xOc\彰*[{|z>S%ŽNUT8cUo<_Һ=g,gNX1^;ZEJܪƄC#\iJg?bYOɡ%<Ѷ%]wj#7e%de|aejVCk_V}+t1kfV UH13%Er)gb0cÜ@%`qq[ 'U7_?.Qv4(bm7X}?3pez 'e\"jug!|XB=7=rw`:cfR7àLЎvCֻU8ڐCDMcht)LaKiؘ̺-rA:jTv<`c Z>"~M61auwtun-|Ï_͔0bb n\?L7+s}%œL1J y˨(p# уHECX j?8_=sm>ET uy*u ht+v¤xQt\Eb_ \qV,WAiϰw&M5-r"(w74j8H}Ujvȍ#VYC1*S%Ay^۾dǁBK4w|P=MC&{8+c-?Wȸ^l@ GOxàA/){d؉T>l [}3eB {\Ε Yv$S;W MIʈ*, J FXG|a(Oߝ$= E{əDOCe4x͠GK>Wb k3z=EԊx8v@Tc_JJf|%ȸ] ^.w.B(-xMsӷB>;9_9"RHʹ4_7 apL{n?$y)1 bM ܱ780E*Vd>Iw3CocL:fJ}GwtTvX6B?ZT.gk򍹳{T`/GޜqÄDH+K[|| U` 'oGd[1F ywErO&6Y`1+;3ꄐ53 3wQׅ$!̥ {%E5^0v(e@1x؅6źXX_H.;Y\ \Hf(o2:X5s7k*-u?o"<`4yX6rI{ِ<%~f5>SvSVf<GܯWFC? o; sƴ'ؽ범هrN|P2X+u1Oe| n(zr.HR]=?`2EJJ[Y7E"!qշwIk\[vHڥP ć¶%#M'jw?0gF_Όc- Nއ tbFa,s4hlz4Z2rPBli*Xx=6 qz,̡U[QJ<(9nsi\5մa1'u\g-^0]>%{L`(3@^L8rBtڨNer8Lo+3i&v*"*y? neF5?ۗQfa{$75̇- eݨ s0Z̹UE7 +-RrP-ך(^r3[AY~ !"9QO.uj\:7rS:NHF<ïLed}e;훻*Y4}sX뮴v?ЄXw/[3%F1,,1Aߖ^2yhXAA>UД݆ۜ7.?0D۸]1tPI YV|b!|y u; "&/En y3rsHbۤe҆X.+Em#ڱax^V JyL]m0z0'Xs[1UKUkcuS" m.1ێ[*K|"ĤvT{J 7(Vj-3\ZRjd:m}naC&ESaʨ>ъ&֭7jphrIF'3;mHc|~<~rpF5wNF7#9 =rS+`͜@Z.Z5¯pOjn,Xvp9ouf{*?9 VsO0u^:D,ɀoʸ;\oPuDLo_͠bPeO(qf5pĊv Gs}dtD4\UFnd jRˈ';ʆkf|*}ܩ֥T9%7%":|'3wAN7u@TXgj?^v[Pec!=|:wyMt(׻❖Lm~fMGYG_-Bɿ& J!cC 5sВR=H( ~!_}u R Va5!v'zFđui㘑AQdB-d[wj]nL)4yWDvu#9F%Vuz˼:.y,u8ջZV/: Z(n0B EV,^iY/7IzKw$yOfA)ďMMڨ'utjU#Wߕn!^\ѝT-E\#QaߜVD{ѭa?r}mex&?'*NjM3u8W@hc˨&((7kB11M}b=rN=`qP Z6}_a'דG7`Uidʋ{5f5ce^3a!~yp=/YD Db,Y*Zy3k:lZЭA.M׶[.[!2m[U?OLQV]xŅada$|kVuE[;UU1lڽS _.W~%VkVQUEM^K7e E)ڱό ;]Cي)pOsK'?1@%yU ἑVOi! UڙͺZ.:CzՐ5zГNU 41sn 0R@aMDže; (Z/_+3?z=ͤ S }K-d6+ç݃)JDIzM/tBo;X`+lWznzY`49B>뵃)7C߫!X9W7eB*xsޤ{6<ƴ[8#S_Y*bWl?Gkܪ7u<2śG^QƖ O$ѳ?!T%9E/T(Dۿ۹BjXL${R $g!Lj6b>ǟr f!mC,G#@;1Z QtuiVݯGT *D%qTN17gfSJ>F%}$Zq ,!b}9w{[ċ~;ikD>=fU< F=L]=3*QڵJ.QRHW1́%89ji>o" ɯx05)嫂U=n M@!m_># !:(; ^gM~BG}+-4_C[]Naә$8H"T(~sxqaĉ^ s_t;`4@)ESqT -wUK/f{"M[J#Nֻ~v֮&B]@%qR] mYu*C5:8P?A.67g=D-^ٍވrN،KT~Ϳ|?QƌFk/U2̖1xe_}G "9XU(b3o$ݭ=99Gf8:F$9/=Đ48NR g\f=%!STQh(}Do$)%^Y]_$+MkaBHOh][ -*Qa)T VxoMyxmw= ~ 9͹SE$ǂޘ ~ ѮbrΜ=gi1^v YLbnjq ateM }ś}]&Bcݴ}'RgTb}t>DF̱Gxd=]vד.H3aYșr#IOr7[ V̪1;5T/>f4,Lq,1ΟSź=0p;H[h,b6HM\A0C*Xxsb4{)%H.C3}ywvbRšQ$ݚ=TFk$l@Bz3m^Gdq1Rmۻ.zQb/J&͆һg<[n;TGx1_#b8D>" zߓ|<<7^p̧'tEl%5~s($t L{qpK_]z}BN}:#B;etQJb!KJ8Ӥ쐝C-"J>Gs}SWoȍRm(j7ȗхIݶ'q_q7@qTɭ/e|-&& b}SXbʅ2箻lTUdUQjTM|6۹;# Go3XvlƖL'Xg2N|fkS4fO[F-lː9ALU9_o]X_U^|4o;j[4{3ޓbb 9ّL$*tLRNo!o6|̥`q7. ƕ :"yN"ܒ5FS>5vs~󜟬 |A[0KmcG%W#IEM/1׽% DJ%j\U3{5ZP3s^N; /Ivv 5g^ڝ^˧_ T½ \䣢d!U׮tk )CPN>Ҏ>q_t{?D{>/![[??V>?%}>ߥDs3OuԦq]wFx85ڙ|FRgy?ΡGg Zo,k;zQPШ[,>4TJbTkWVTU #2F$ql[kQ/"c-o"`TN|uk5V'׈ ]!y#p3u9vC!?ᯑE8rmxPO6e' 7`N_11̎髁qxרB4ź7 QI[p KI%Ghb\^k2x*,O(Md"k"7\g]wVQ_hCe^9eNaE<=GŐwA/(9'!lNViOb9*Co^ؽ%xhBԏxΕ\bߝ@DDo,Hk SpIf} v#[KJFJ~Kaf 2NTj٢יFH>=>s8-%+vg(KSXqaX]ڶW`5B.qbiG+:X:dmx'8[{et9f;W އ EHіux7qjDI;܉w^5qkLÓ"}rȑ0haL~lD]Qme ͼL{rM< -3̘W $Ģ,<c0k24 NWyiCl`HtFqӸv'zu>Ixm|PHֳ5PWnz1ZeR$`EJnuOX9~]bG=\Tpi%u|xrqu֔Ib$(.nMjB rI{I0Đ s7lR~9T}94}9JM(^ !+9#',=C,[ܓ6D1I4I(\ ZA| RT1.B<}rrZ;YH6[< S 3/.i)  /Nj ᧯=o\i!y|w26%,#eFXyh1/;}ґ4{`XhAEO_n_@MYUdP>Zs@;9:x-| O>h T`$*6ґ1ăzJ:7' OA׵nm}nĨ. n;4ӳE{xY?!P> endobj 258 0 obj << /Length1 1681 /Length2 9392 /Length3 0 /Length 10473 /Filter /FlateDecode >> stream xڍT-kqKp)Rܵ8wwV(E[(݊[)V(.G9s7̽^k$tTZVP !Vpppqppi\t. (D_@sgs Ptspr8888\ : dAV6"tA:z9ll]#ђ )(G:@ tYC*殶@-%_"Bl`6 j ݁V߂`ڶ ?ZPkWsg B\3 V@g-e#g,7_ٿ@?--`Gsb9jrl,s@ss99$5b rtuas9e!VP0quA?3ؽ= X VֿEX9@@Nn@BMhl^~A^ eM~Y?|\݁Wg7Ͽ89V KWA ? x{߯ q'IɩHS>))'oU8!TXCJx>p+& }ne 7|~?R7wCrn`_ϝ<*ـoIVZUp5IryALա.w |fi|<y{IY%q̝ͽ8ۋh+ `mؕAύ7Z#A~?Hnzf>,rc|uv3Ϳ //|ԿǍ/`w; >3 >kwgĮz[9;?KLsq@O%Mo5:}L4v;' 'J%QX%|9÷(8 `x|l:>W˧P5kT>KWh;GDJŒ{5{y5?D (p+v{Z˥ؐwtGj?Mp,mbQڢ"nGq>dhzO`xuʩ&=0y>4 %U͜۱Ty"c{=:s:>a^UbI_M@Gf)̃uTlįX}{bf1(??t cEnbU'tK+T^m,LywXRio_; %< H.y#vv|O7wpe;a'\#c8Y$OF`Ԁ[p=_ laHc-,;cCX(-> k[#0Zݑ)h H0U??jžlzoc>yBV,@6وERo* 7Y+ "7b99t-{8J0<ئCɲVBfE_Mu*d3{˼bП `7NW?T͞7.#zDLhQJc9$A_o|凮oDݗXž`~~hC43V$Y'jEA+8[.P("P0]B;'=eс &â Hǔ x!ԵK"kRT`x:P~o#0N$=AV8\nbg*fŃj"545\}^M1&4TBr# ϝ2N8%ՍLR5TNX@eI l'@9DR$9bpIܧHB1xF_ыBiU7oTȋ]Ę[yB]Gfd8\e2gI&]t$TdNP0'd)<cUճ_sJʩk3׷Ls,/7 j2]I:J*.ҙZQgݿ6xJwvv23ԯEA,}[/wt8YǤkv,j3+nmJ54RtJa +0S* Nw@;W&HUS!U+sGzVYgc ܼB?gWdP#?헳~qI;z7p|}@s.s`^҈Lv;Pɑ;7H gY {լue18|ֶ>ϖ6I_GIi;v"`l)G\\\-Dea;fX:Vw9S܌`&~ߥ*F+_oX7brm+:̡x_M1-ЭTyVwlѩ{ ?2 <_<2+D@dTZ8~P?1FuM4cPrSkk b1b(Nŵ%CYOB5/ۢ8 ^md&r(Pʠ,Q2eD<Sܖ?;VFvQol :-$$;hz12a@fgʊF]Pi;%U̎ 0ܜ`R$BuΫ#@b_/%C`&TD& j=Sr4hQI>y'Mg.tV~I6uXej!<htYŃ`*ة$Jfgѡ99aVzϘ('94ڳWa+}'2׮;ZMgt?g?TSMz]sgQIAML:^>[y55!?GCDdtPsO?W Xm)aACΫXvP{ȖLi [M73dFMOS:\x3#C (՜. BRjVo1Hr2KLTDh}'X;ǖN`r4롮8 *;GW;=l"y$h&y޴뀏v*coGTpxZd[Q#3/flBomz&~ X0[/c\ޥܲ,n/;,S<17 AJA ܼ;; B ?#vYQ/70V sB]0!s28|E$G~@hy$&r.|B~Ŷ=kM[JCǕxFRJ>;It>5]\IE;7Թc´HUGӥhӼ-k{'n.,Ge":Pf߰K']᪉ReCk{|XWѽ d&#;h;{cv_.Zx Sqx)|[lŎ1JrטsY3vٙkLH_=>k`B:5#]qFYJnD]|K2YP/U_,M[̹cZzh yۍGl (OB^Cb:"AN3kt$ [(>R;:k;[[W3gͲ(jE7ۤpϓk H*fNJP?Y*oir`QH ղJ@ӆj|ZFxha\<˃WC鷃LrLBiyK؞ut_<ȿ5`\M)HDx_ӂt"$i.MeQH`WBVJo}7e}DDCS"$j:b|y!&U}%,iM焁1pGcCY19v hC쓡`QUq #&s¼̠,MT{Hw}%~1ԕP8nVV #&w,S\[ٝ[6Vdη^haDr\TL!I7ob%iTIܿί6lmWme]4]~5C-exvU^Cq F;nZ!6B;|Uv[!磈V 2 "kl &px2㗟 OPp'vV]UͫK8zJ &H;Cʇp". uxm'i)7Y^w1p(aZR$Xfr{&aA'f*ia<P# nbo4皕Iv4{3u/dz+s&uN^o)+=nnBbJ<-CY^)^.t⓹#I ׸hKY}i7掑l0v6~K`fbTP /bkecZ'*?\;{/Wj,Gl' U3Qr !ΰhwm;݊ҜtfCTf"^'Ҷ; :mI#7?P:*gF5t@5*GՐLᇻx8m 2L5jT }G6zb~QcIUۃPxQ@)DAxB} ^Kω'8E.#Gfj10[_ !<wи /rw?~i8긭gCra<}QFamqȻ7[/ |RvY6|4Ƹ3@!40P' 0{#7ػɈ/7+U͞9ka|BhZ5Ws #YNU'2:b_oZ0~uY=5vTrU%eX/eFm劑r^8gD lz|5 ꧷%b'@9 b1/8Oqg{Mh"dͅ䇛9d~k0%oR}! C){Vk;^Qj~ 㗡;SST=ii[9ұybG^?gYe~Ú OoG>+M;ȨH12"Uo~ۀGA.V"tn7`gWu ך<[4]"BZG%V y aUhk8{*Wb{2wXs|C6cD Ӳ0_] H:"g7V?Z $5㮕i*WyTc%  om~@`z1ei(2>GуpEf,eWBiDQ6nQ-`vĸ+Ev`3JlŤ8Vu씱__ig^|I:FU-R;Z5eSFƭ.u qjnd NH/g҄o1 _#йt tH^߷8v@Mܞl &Oݑ$c+, gYYBZtZ5V gJ{ΚAD7a\}HU>1ULQ~x-1#cD ~EP'lì(+!ӟY%q.͏< ?یA0$3?|\c3S#H%¼hE_]׿Q.A0O%c|^9ٙnx9(õ4 RӼ=QpDb|Gu -8QJi>"vwxԆ}) C@7z xb'O˨h/@.k ?'#ڸ/M8+n;Ve֌Ҹ Tmpկt˖.tЃ! X5D!|"zKwݡ898F(LB&D 3%W56Gq.Mv0z2kԪ0NS$Ah-+nLAiqI -*(0~x/5:TfH~D3E?e*Z,"܅U,n u}Ƿ4'@k`v8gxq*Jk 6-\/Kx"?"8G q{;~LYvߕVu8c\n%A ,BeuшܭwW٩TZn2;o{R}卾_QZi+̾!*Y)o4ʧ-E6F?e[#eh̵aUGj㖯 lO1`E-&kTof+K6p)jO2^m f3 ]5X7R9E}`c@q{j1bnbSLdk㤎p5/e2N ~@;^َ9{-8~tŰ9R;H >]6ͿZ[ !ׄ OܲAB@iFߧ;~axO`3ㅓQ]FurdD'g}͗RLjT;3~jw8ׅh=OOeHR)3ҮuaB] 1 DxƯlxDQvW%%䵀^> %zh|k,$l^(0q@vPTQh)?YkvKc*Hҥ$.sgy/vrnbfki]MVK0h>dbv8;#k5ўAW9a)[4rvc63UY _&i>觀4A AE_2ܡx92+ެdN?AXrK7iܡ9p]ثpř^YՏ0OzⰘr|0j l-#YJy]Dz@DTfi[A;KuvDCv~#&^ {72 E6o_V'N7:XdMou h_":Y(ɨ#c X! ݗ8ے q5lxژli,b3HIG_Uj8WϜ~v'|zpɂTwUź3(v',GǚȆϹK]޿(_W2|`Ψo=cinhW|@v}Ga9w:&ܶ/FVʬiz h2'w@(U8B*jPD;gӧ ݈-oت21/苺D%=kkQzEi>LNqT8u݊ hD. M Fn7&)dFU['x}|z{ۃ,_roo>Ciʔ_Yz\Ŕbrm\3T&q9x4Q54E:ތ̡~> endobj 260 0 obj << /Length1 1444 /Length2 6662 /Length3 0 /Length 7639 /Filter /FlateDecode >> stream xڍwT>R* RFl8FJFZN)IEB[Ҡ䛾{9wv<}=u? fh"ti hAHg,D@ 2 va(/8!vU bj4Mh{ XR@9"Q25'F"`^d@U ƞ%~=`(8A.0P; ~J#F{ A<(g^/0yP>0G/}71!2 ltBBP0pCa/l7`h 0 Oÿwd`0E`p?ٱ0=(8`  jpws54T ۤE@Aq HbA7F !?kQ HA{wS< /'#:x H~, owV_ iǪ=$v.jc`poj!PF8}p/ 8hGC]_=w#`H/g ˆ5)v "͜BAȰ`p:0u B ^ "O q~Aw"a'7o@L }q.( ,WePo ;-dsHlk}DiM_a E&`8&'l]9mgucۭxalq=oU;,h'^8jE$lTīɊ6c\*7f/gL1t }Ho601 i-I(eK!_^h}lu0H_KTN9e68,@)Z$[u?yMzZl`F]ф@t{Ǖyqc>$QFt sfDO߿S *RxlCTIQt4VjoZ 5m>9}zt,udGĈ(HfuZ๪U~~^{ƫ/w&z-RdP&$ᣚR/gZ 7crcSqM[+΍g0)ʁD2;\}NAu=pI2O?/,WE 賈}r{:jKjXЩSF9#،X?|Z[n}yuqzsULr^^HT^h`"Wnku"A_g#JǴTl- H.&4ntγG[Js8Gju Xʫ,{E[O'vBboKsw[}ruG$i*ߏC6ͨNw]1@OK]Zh?I=i499tL{^()2]9}ó_4J4N]DQ˓%ܴJ)}ŷ,I*$Ctm6ѥYe.BF0ԲȖErA>(c㞏w}7eeUٳ9mkh&#R\"|o=i<|}w'v.AVlBH :f#k:팒"NUOg MzbX)t5CW [-fk\Z'z8}mjMK\!ߙ''k4ZǽV:H.wyrC~E%xD$wo \VC X5k]\صx7ces( g{s c&3e*K[=j֎JK@tq:/ e3q}` **끷jB:x{ 3AIi#qü'PxaٽΦM{ dIf?}9@gcRM%Y;kmyJ5CS|Yy-ˊE`;YUۛ-G:Ʃ!0!r\&FtG.A̚BFsnl֟f }}4>O"ce !smYӬ"&vSqP5ťkIUno^]EE~_\r_^U#Eq9pPl$,s4&ϗ\XP ʮbu/++ 5v6ݪ[A`#gID8'jfV^|{kal5 ^{?)G`zѥpĹmU'Fc.; & mX["B 'MvEdx" GK3b@3U1s8:ȣ[xj}-(]9[be~5W/W绒vCDN\؄E*e%ܗV|eOzcn)GJ(gǀ"4j")(4}~t-qwP 齂L/ SdWRlõdVFt`B"CӞ;w9T,RgQEiOy;G?rN*ASos3er'OӚ.}cBFBE"AW 3:lr̕?" U/IՆ))8DjXlr{st5r4̦Q]f;d:]Uoo{{h?{gZI+qTcr] ' xUfJ@^rGAJ%. z֎Fp ki~n)l,6Ŵ^s4nGnתg@\歴O +?*ɾv*9``twh͸﬌‰}GXA`Gg[:YճG"gyl'.^^G%1Y哐1н#}%YYItZNnoB-V\ɯ俐GL:h:2{*N ,St]: b%޵Y3vMN#[r@_갦˦`\!'iv۞!f b&jTo{21jCyr,7^ZZf1YZ[O~T<=thNzr\Q3A{ǜrz!6+z!>P 碕mgBsNd2<@2=xސquq| :m|^~#LabG? nOTW0{3nӂ$є&q{Lqs?4q;/ȣf5_Fh_8^4,aq+5~ԘFg~-iYsi'װ;VDH2pG 'nR[{O(*qA6`q&ϩ+q?GDL8~*:_-ZqO.湭k 'wMQӦ1Mo2łlRNtΔ6{Dg Y@4V@B8s87gh' ?Ov?`SC(Iߥ)/`vpäXUDdm| ٽټDB0ϧ#;o4{Y~fܻM%C3U>|_;3`"F Dx#u Nńp|}DHsoJcsUۺAL{2$ ;εHiz6UuS\x”:An[?H)%87Ą yMb'&f5kp YqfrCToMCkzG,WqZ͈:ӥd'_-pL F? !W1V| r٧ ~|BӤ%xI9ْ{ѡ r.": 4bA(+Ѓ#OXյ8ϓX#;:<#`ӜɪO`vgkei/ B.@F$8g\t{ sj2ẇrY|3\k.kϨڵ酒 21[|"hSo՝,?~#ZŴVo;Pyc#؂Os%MnՆ6YZ.ng\[+hc"Sޑ1Lln^T|!5:}pg"Ojs=2 N#v*HD*~gDJ#cXFoVWEJi~H*T+O@3J`A%ƽO2o 3@#KQSAbUK_w@.284*Rz>RʭތLޑ\VH% BlܹHC><ֲxԚMt Dm6N6mfC w oI jRr :${/ S#f$j=_t{cD~2Q4~Mo m w:A7b]xibiۣۄFԒC_SbP̥ʍ[!Ip-c5}[נq{̏PC\Wtgrb:C`!p~&_^?xV7\瑇?o$Zp!A0 G"ClYd1J>40 "4k$K_FӌCҴj8k7礨l5%CGV_,N}>}SBw_xn2:ҡ2e'v(RdwgtMk sV ;~{͊DvESzh%6;@\6Z)o t\uժ~]*g imshWbLj\M>oq*72 IS BlO>}sF=v@?bJF7UO~S/ʵ3+~_}$WsM n~ϐ}4JqJ2rQ=_$}w*m%2]wo'_⤿p{+>Үq$4-X/W^@U9T'@r[AA oWk͝lDK'my}YtbԐI`,HkvZp Z,o`8uӎAb6ͨDu_ZgoijncG糣- dm3QWvh kԩ endstream endobj 261 0 obj << /Type /FontDescriptor /FontName /AFFQBO+CMR6 /Flags 4 /FontBBox [-20 -250 1193 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 83 /XHeight 431 /CharSet (/A/four/one/three/two) /FontFile 260 0 R >> endobj 262 0 obj << /Length1 1444 /Length2 6656 /Length3 0 /Length 7629 /Filter /FlateDecode >> stream xڍvT?FF)Kj#6#H(҈) R)Ҽo=;g{>gF({ eR@0XL #0n?P)@!eCC18L 颐@mo7 D Hɂ@Q0X/CZA8uE($ G#1,|0~ DFFJ;PFH. weA݀F(W>9g C{N B@_h}_tzPwob"^3@^8o iza j PP?tDw5tD0~! C}7=wP';/BbwHU;O pVW$@:82A"  Cv {JpV)Ց0ïBh?x$Bp=@q􂀎(4W?%% _oIBrDye [8q/`h4n[OO&Q[\*4U( ȏ=NO(S_?G*S,(Mqc7޽%O2h8 Z.>> -3jeadb'<8|[?7j]-6ӊgr\~ >6v쥔kK!ܜ,79vѱS> S̩  Jݷ] 9XL.NDq[NyWCMiCVf"A0\@##'VՂQ#.w}כf<7 Hw]o%*荂]JB* E%g&rе >rH]Izd6oDKA*ЯR}>,KY9q;|Cy}Bu\a@8y[/ίxLSY>JDB5egl]kFuz ?d[.cltk]~qOP[ԯ(z#&0[9{g//]dA&X?-/H1heSe=[9b~_|Gwsቾw.mຩe_צ\s:ymI琝WKSSRp'}fs}-.vpRklK#Q$۬泛V%`stsZ]˄"^$>^&ik#]3ˋon3;3_e3|, f5q~1{[E ]v7oM |Qj.48J|6k zf$9SRm/iِ& OD~L?љ?G?,.$o8ҐG2^LS|V lKmy񨔍J8'O}ks0CBqiŨ +'rr^ҥ0uS>;[Kh1RV-!ŊȫMoZ}>,Zxr};mvL ˭}["+)ɤflݽY5Ot$UK_3F1`%z4&Qjחf(&ʵƘv V6T,N3y]7U]4 fӒC)Ow(>o^uxF!(_BsY:IYI4G)t欵_^L峚 G!t4(C pΡ:s5Nv`cM,j.̲^~3r𥔊Cf":*P22G^8TE=[{H[|[& z3w)_'v z٨|1wNdu-*yMulYvqTԤD#o>O6Mew?HV{_w KiqtᘸtǖEGp"y-i ndMZo$57 K $Wl [agVs5CQ"~z|xt%-YӫVx1Uh:y~̖,)sN~gN,A&>Jme%#rOCPS5DvRCK04r#;s2Fh0pp0}ZPĴUl`f=L3wRD 0M5>4jYgern~qPSw xT~ߎڠޗ}cnˇQ9x.I_eN}V2&@Ìy'n3;uE !##٪/w2I6*]{DZISJRLßx_iY[:=WWWLywb7E0Ƒ |+bie8!E5#w\!vDC&Qnnt+aoC@g0:"p7sgEx^+W&Z7wPkxn pRq}OI:u-VG+ka!շʢ*NJym\Q46'^ӟ"@$`-yG Oxf!e $xFeоh^Ȇxp~!*>KŪRAv_ P/C\Rg~{^%KQr3߻sVsPˎw0G:6DotUMEw`c[BWrcSJJ3nh`lV~Cs*n\|\KT:L^F+0;C(jʹ#ٌcp{;RZ"w~R+F y)w3'vL>*^yWQYQ]|}#3QF3ru{wkX*u{zK zy4ݮGyh 6D;箆StVv7"P6c;/N%WJF`R6"$_q.%tmM{YF$0BB\ Sx!$xpwC_A&n3)K|O-ץ]7UAq WmI~^#ozqp~~;teζT'08Lcjrz >>@. K~+Xok!eG)R5i)-ԒчvPvuZ _h0ú9%P).|U$C̪jI$ً9w ?;?9%Y*.Vh};TMx&GIWm^8-;5J /Xf_B ?f+=z -Ꭺ s# x@R`iu_FQ/2XZ"FA'￝0TD\^G`_|YLK0r@LukM ΃Ѥ wC)5Dxl^~6:gfy<f@{:f a%$%pVa~wKcx첕]y6#ZEy~5&IY@#5G7q| =CB}9y ڍ nJ7zzBe:*ɐW\D#ovB漆%E,O\񠯁qZmr 97O3B^CQz[N6V^#PC fb5]m㾇"Cq^]톋©Q֡YG>~qB"6qiv& bc>Gq±L\џ~ۮNOO˃(PX<^6׫@V ;<7,BoWpU֔TQ^m8o FoQN*7.h6OHݩQe#>8AGyL-FZ .'x:V; 8.Bs:/J?ַmRtT$ĄRh&VGYQs a<& E5$HᎢ}5R?Gɥ+nP} ;QAז,&VK{܋Z/WpFwl 3m~E\hUN#G)9ʁR(ٞd m%?eixRv;2ԛ2/(Gm,6淋y+uob|Cqmc$|An!{S`s?X+X}j?(zVע|q)Xb%t~Gj2B8>YK'`Q3}i; djL2BYFhgAG+z &?oprS|jRHj ^E$f,܁!dGmɼ\$'T_arq$WO=e[]`--p_r!J*WݤЙ( >m_(V=-3>ZJ LXǓe?rh$ҨwU]-A&%2V5;D{ X 3fo\Tj%|OWT1?%Bf\{&5Gf6%@U(V3=l}MjD=eupcD!H4.l>6@^wFtZpǫ4c6cIKCIag]bYϧ@z|C{s:@ %[xw^T'[UaQ)uJ`+ܕMֻÓFAO§횫a̚h2Ab/ K^J4_N+޾-clv)XÑ2Cـ{\\ h2󨴍}؉ 15/7 H:ݞJ q;dȕ_J<xjԟ?Txg3!ujΞ~#]xu>“ SwCGTM1.`l2V{4k3EZ<MKlLՂA dUJ/<bx7ʹH]zI-s^Uo3KȔ,%ˢv^0XZDDH9V\bЈALJHĎE=ypPrXúl֗BRL{Z;iJ])6ngztIoݐQR60li#8_MοDy$Ƙ .Fw:0JILJ.ĕj/h^md>tZ[}uN-p l>6_l-V`3+lev2֐C=Kn E}ɃƇ&/MSFm֏q| 0m, Hx>#b#H"G>صL:]գȡ]ѵp8~ȣ9~&Ȭ cW_%ݾt4V9}QlĔKKՒGi_v/{z@UݗD}g2ްΖMZ'W;bQM#7Դ > endobj 264 0 obj << /Length1 2091 /Length2 14105 /Length3 0 /Length 15362 /Filter /FlateDecode >> stream xڍP] AoA7CpwwwNpwys%~_^QYeע QPf41ـXy²Jl̬*VY)Ԁ6 60Y@ `aaf23s'ƞ bln eHـ6nf@mD`; h 772d ̀'XḿnCAіŅځ = t;XOP13wYx7XA N c=l @W̿ #9d##k[9`bnȋ0:: @X9ؼ8[]@LP`m̭R%m G1ߺmٸs*Al&?S0A;7z4#8}F6V ;_k?u]7dm8?K4s5n3|]^?r5L6c߿CpWgk1YMXYm`]ŰkR@kmw?Cb{';s߳]+wς9ٿq=@W✍w[]v)vՓi<ۜ>$T[L-J}#DqT!9NY/Fir~aoſɤ_F(KR9{$x*t@&`c6VVUmwҨFEvHġVvKtXݶEͿE"4hB.8 zVwBgaWchs<mCvCڦ[ێ| 4"=d1y|/6TaDi14J<+ۧhs@876‘KQheA,%"3tMZC|=~ nk*FWCSZt&wvE3ʽcqi=վ:׃([VΔZw"$^.ޮq%b|h PKYcYZ6<ʴ_1 F+. khcm*AwusdۍEѠeO#R)b@j3JlJ֭YƯ5ˁ6k_[cw>YJN/Ni~.L}¿T2%KiMϜ@a\O+:=I?ذ^1qtC})fণg0dsiVʘ?\ n54N੺>v:?5F\='pN9cȧFju6lɣ]8um5A,Nڧ'V]$VJ;ΗazhzDx0jgO0qZ/wUO:.79>Nz?R"4C`$d  %S0/7t*}i UCv$l_qꞷ'2L~ : h1ȇzյt@hxL0Qm"+!8v?Y3#;w#`SF*24Hߢ79=8X*0@dsޗ)II/V+5u#QssI%vGA]{k8gGu\[1[aQyWGx 1f4m9Aa Ö~'zl;}F 0ʣ-/Yzލ L2X lqlW{6ΩClZksǍ}=Pp*^ bDW<m٪ibp6LʹnliIWw-\~R)2Q礛(E:Iح#RD[Y[F N;T/9QK,}W?%zHXp9PC|=eȵ.#^'<3qeQn(`Xg}CLH .\^!F?cksxp)Hſbú?xSa:nQQɄ5),8XibN-Wv\nOܢ 1xIf…ߙ%'/;5F /{p'Bo;)TJ|H<탎bz^~j 8(/b1|[ZY-׺CQmw"ǀ䙇tn!NE^!ήicЧ*5B>}=~*U $;1aWb-h֏T7CI4lN{~ l+P,Yޤ-`| Xۜ (dFi]c㟏K=]㥖Ex<i'hrsd'kǥu֟^;S(d»4ߋP#?n\4 5e,IsP+VxG:f0$fa[JδV|y2ltޯ8N?V-.LFK^iyMXI6 FoKXN١ִ}b]`P/5MCF!Q%8o@TԱF|o=DC j̹~"4 0Sf̹VoSCZ#K+ cIyrGt?BJ3=mLD-"ټ<Ϻe*@Uo ΍t~iӯHI$mӣcDf+̊UtKfxsBP`z0V-Pl9 7 Foܨ* yܼ'Ani+aH6+@-%5L6AIq⣀Ü%T˹S|8HSJzo݃%?"+t.-$tԳb'u{.E}0>H a&^XYl}$(看wl,>C0_ߪ %?9P }gwm&2h͹KpϤ\&~>8ʔrj8 0o.:p`r< +>(=gռ-:픔Z:s2E4t"ph `j$ZF4,}Q]/9g;:})eOtݳChE ]l܉w5.MYGR,"H.XmڢB_W~LHj 噇|.">x6oWgR1,Ogtr~t|B>!Xw.&p^'ߠd&Wb -K(wɠ=yUge:ڐ }Z S~am׮*=dcዊCUz'mFNsKI`#N>I}G]u+&Uypna@*͂%’Y ˃i;ABP.܊0Rۯ.A3kS|߻ ^=pS2h1 ew^a*s]V&'[)B`4hPڵm|_vt jrBYIפ+dDi~[ Vg}&3iqx#Z`Np{ݡAt@7ڢo`sin7K:ï#Ƿj.;wI~+0ʞ 7T$\ڷsZBޣUTV;B9M)NFd8Y42Zy% iE)GB~t,mC^k~7c:VҢC03v֮N(DJB"0NHy,Kl=Ñ3FE%2i]}!2͐ @SVVoLx_hn 򅕙w-%*1mE4=vill7iSXs*^)j%-;,O ~^9V7QpοӨ*@UwJi̱#@c9{֮EUmu6R`NΑ?<rӪeȏeonO=:9AutyGN¬H0Yx)|ԶE٤JX\CF  kku$M@Jn}.)f[rb1,ŧG+4& 9Q'r"7K{&cAMVj0ˀ~@jh$yLu(g|[6́?s+> vLe{;iB{mlVqFRbϓ ; QQi! K4?Q䯃*|Zv!}Bѿ:PMգf_En7ʎsb*"B'JFe3.9ܠLUEeu;>CVpBTND%uz %# E8Yu>~:jӎő1'wHuaq aDI"Zn-}ؑde = !ټ`"Ks qd\+&('ҔNVsLIpVgJNuuP1Vk%cD3IX9?BZ k,q(ɳTvbi6E⏲TڟEw}ŽоvPm+6[Q|J&߳qDnb#\Ęi6\WoO2BX1gX~ .j D|̑٨7S,a8z3t>Cr}Pg!!ޅ|HYO)a%,A|xt, cqG^O/S{jwub_&ݜy덡١jJ&?\[:bo~ yJ݇VU[FBks'eR KQ :(dtI+*鸑^Cl E/H6dWqOrtON"k{NQǂe]#f%,u*yP,Js&DpUw DŽ*it>HDS B<*m/1ivLcaF fڝOC06Q*RjOmz g_ SX5K7.  *-3=r (O:XKsh9TDghi&[1=k;Nu>l |<ڎي%PG`u(gRzz1d.6^A@D}GL]=DRB *L GJ zu ̐:3DwL&,ؘtN/sϘ[q1~B9Ŀ _uK/n^|pEוP6mYXy?$v@R`5@ =R|=i >bEjVh5 h^jKD5ɣfiGMU.n606gIh4m _/U_0tI*fxhd(\̲$YVaea*"Hfx 'єy&"&h0w1|l"vL[6 4QGWM >YUh Ѓ ij]& |q_p"9Z^3f-Mk!$|Β/f=U#ZN,¿`=Qu-RLݯg򆕜&DU -MK?9G˵ϫ0%Zx~Ybm(r7X yڗB]ٗ"Q6jPG|q1<,C>OHh0T7WhW4N:-,V6e.d+[-`f CM̦ F ZdK(9i~ LęY#Ʋ+&>}ciͰI n޼SO6)ӨfTI+KVMud 7e0'0tW^7=mC65 {}Pgwz+F7 O/~N#AoӠdnS-/ n~kr+8ka gvZ$'$PD5ƓCt g~Q/1vU],X;/i5jy8o0Mg:[~)'Aܺ=6.=je<XvnFԯDK/R[_TR~SQ8؀g熣 sN4FOCbA$5o D @h9ATt~} pKrV1E2<aSc̀XSA߾ל$AT=|WuF8cMNURGReEH,Vȩ?*7,nT?ӈs-Km[Y },IA}ʮ-&vЩ)(I!zhFy-tEA`j8EnVEt"7Z6̚)707=teۅ^VhT

veaP"zI}uDaDc3{!,Whoc!XŜ/Pe{0p!{hm_uf-)dHW/D JTmA\ U/\#٭vRlʤ-Hhgͤm q0\&=M3g`u? xrO-ق-|jQr*aBY咢Reԍ:wA/%zU"b13Q}1  ӚAc[0O~|W{6/ՑKDTljGc5C0\+s#WEm?I9 {qX"䰵WՄXYL{*Ԍ;>}SPA~j:*%Sefا~eKI]fXQAlu<%/fID+p\Xདpr>w}Y-O^۟Ƣ@N}zj79L=2й90|굃yiswʅMN6i)2ȶyo!cm "*{xe&(V HV~y) k!ѹm!awdUm 6; :ho%Dcgt#vXVG@ wY{H22)/vɭp9>uoUw`X/FosM CZJ|)$:e2[eTshFedN ʛZN@:YW f8*6 jyݼ?i:$l˱nU6L#erˎ!| מ:վ\llEm%=a:AzhSsoPf=6oY#l% pf˧Ɛ_\5Vms-3T 6KvmokUlx5cGϐ2mwvfTQ:cԹZ˾aL, RE^sd0i.׹\5uə][O C$lLRImϡ?+Ź^>.Ω%)΀>ϬRrN\u#wPnlDvlTrt\2 L`ym)3UvU3_:,)yۂlQ² 1C|)Db(]U봕ʆlJ1Mg9* #4"4tR6o`gm,TKkc]-dXq5Ol֪kf#E[4O7KQU%K9@k?aOE-3iS4=`V]q6X [;z$eϬ}IvcO\Op[ ]kԛ'0X< ]A#[THaLS"DxwڬICOWސYo{pHIG1[ <EV.1-5YIfIo]]Q` #Q2܌V٧BrڕVA6>67l!SǶiՔ"m,H '[50P?r ,^:ZN0 5Sܦ0DJb/u,EB4N5 T%, On ρ<+hQ5tEM $-ݤ3Z_Cvthg=*pR.F2?܃8*- vLOBŷtB8-ӒR"N-'ϛc}UuprҲtF+?Z>zjV!md5>'AJx Xk]iJ[:# _a=u\X_%ǜ'/a; mq2F '}Ũ7tp 3;lj0rQpG(16ܲ;#:T[aBzaA|CV;L$3^H45fyZA9D`Z4kP*+|S^V{Z L 1[IJ's^x w'v{ usqm[_{̢..LK}k;90Ra8)%QK!4&I,_?DS!Ɋ%b(0"C,'W 8l)<  ,oi;#|,8/8$4-WT#fńLMWգ0D5t&tnE/B"/JOT#|~-n`9@m=EP53rM *1گ"{bQ%nۦEHt0 P5:`C%VCU@TMypZJI@S5'piFHiteJ(R¾A Ӟ+ZgiJZQfm`9Cbv_0"Fھ{3^spz>7xq连h0 .jBސ/M:.(J_L}>zQAg<5`C+d\mdfm3(e1R # 5 lmFG8K,R#:H$Oa%1q]_ٞ:t8&185Mav+l J,dc +-EChȬTH*űT'[=-Qhf5 51G W3x[H8dL1n6q84?6 FM}*30{~[ snh/3(sq2%~w(Q`Yt^lv endstream endobj 265 0 obj << /Type /FontDescriptor /FontName /DTVSLC+CMR8 /Flags 4 /FontBBox [-36 -250 1070 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 76 /XHeight 431 /CharSet (/D/E/F/G/J/L/N/O/P/S/T/U/X/Y/a/b/c/colon/comma/d/e/f/fi/four/g/h/hyphen/i/l/m/n/o/one/p/parenleft/parenright/period/r/s/semicolon/t/two/u/v/w/x/y) /FontFile 264 0 R >> endobj 266 0 obj << /Length1 1739 /Length2 11040 /Length3 0 /Length 12147 /Filter /FlateDecode >> stream xڍP-[^8'@K)RKqwww/wמsޛw2ڟPS3ٛeAN,lI%uEv6' 25-92  $h"2vz1T:9<ll66 )c+3 =Awp[YX:sЙytV %nojtrtBNN,v{=]f?R(NaiKnoj ^V@d^ /cſ odn[*2,NnNLcƶcc+[c?n Wdw~SbeGy)4Lr q?)+07d [HفUd E[ftp%?_rtw2 {B]'3?fVNw1/={2x03{o?[̪ 'w*%$<fn6;;'q?)U5vQdn+ߓAAefQ7qSOGolge<;;솒ˆTB+ͬW+d# 9ggKlrZ9Z5J TXGy6/O c/ߴ S{?6` # x ^\/)z*/ `R?U_`8KL߈0(F/ ʿ ʿ qXF/|U7za^ص~>KXj鿒V/ [tyy2T ;Y`sRt MfMZo*ʼn]8. ]v$n/8s;߮cp|}nc1\J[m}enkKSCψdfwnRll{&mOVf,2&M<\J|j] \l(Tf6o{ j#xA2m_$iHh0E-MpCwKgQL?;?NשxUd@5Ͷ(trn)}V ?j{g4r!"`rd 夹W_OӿVۯ~rTulrL\՗0YV"XB4]oEM+w@[S]*>hVDyhɅ Ah0oL#d/)3s5k frx74-~&V&9Kj3 Ժ:"|`|sL?\cBk(m.ѝr]ΧNٖ \ćKlۗ!WKƶ2# X45Âg Q=+Lԩ(S_vY)BMݎ\#c+%wuLzmw6j8^>/4GuRV wA znłN囱#A +XBʇ8şEoƒ ę7B9 tyL2!kI,B)X9#lٜ Ҟ[?Fo|6QнJ$<4ܣr]H<+g6Jc8>PGfxaYcLI$qdX~ok)X3 R*ZcWI+>O!IsyIZ_)c"̒exXXXݯ;ῲ fĿ{2Os"ikyEyrB!TXBU*>0OLH| jn  ZB@A7P .L4PJHP{9DvA/dS[R1vqH}R%!jiy-ۃQIT8p^ln#(+ Mkt}@\LUAj4mA6 msU4"1 78M9D-1Վ<͑WkgA=Fҳ٦ ƟWX$'B !3Qzx%ݹab.^-8A;DIXxm߫ B,!bk,m4D` ~?wP3FSSŗo3ג`FnIYڢu96{bPҭVc˜kJݻkϝXK ^Ew+IM'gqʷ Zt{Ww4~ys38ΏZ`95DDBR/wtxqhZ=O1'U48zsZ|b$Jgj6D7R@NSښqstp*vKt9~9-ሑ#{K.{ MLfgǷ2)όOv#6\ఄ0fh^8/P1yTf2d@X_A^a8(PFug"oݛWU@*z[2ֺU V0slW$FWigE%B& Ga gx^oQpP ·=[u-Pn2D6*tQjR{/gLLrD۶F1 $9znsf~W"*qLx330c}Hw1jxI+*Wگkv;-&l*APO|}oBc}*c\_'. 7*?t1J p$>DD0הK4&g XOV]+OC}5sBܷ%"杽IEJc(oҪJ*RqmbΜnm< ]le_Ã4w:)V٩Ҽ$4!+RUO8"e޽ϻ@oլ%1K:L\*[+"gKU0lC$5z_YW6ԫ{f~Ty5>yu #8෉riS&xVĻ zT3*Je'+?hGFd)NO 2 cW0Um0gy:*4: @qG.AĊ̰oo%l7Fwf4Ш<W&_?a0zaVt7΁ 籋`uPBTyf vhhOUsYv/=m36.]\0K@~e1CiN*WsFg夹ְ(t/9CTpbތy qK}:VTDmVvytBI#9rS}CL@jlp<谠 qϲh, :&tG;Y\EژGGT{“ ;3uq=DEPAl5LG3`}|( {Nat[+W>äz9mCz'=A.Yu xXj[w0Q:s}':]:#@W<7 EIXK %!tMF7+[xʟ"dv٨)!XcU)#;q3 Q^p]Ɩ yS<Nhb6OW'^VXt06(+xľ8*V씀ZX+yrcIm'%]g{=5o%:QOO sw%M-V&͏i$}N: BOvtG}Ee7橲$p$LM;y`:2Y5eౝ@.B@B7("p Wy zv۝36g"*DDG^xߎ={0AftN"0`wr ]T×=8 An0埙F,܂rjab BUK{e 'mr)` 9g,quW_]3JQѵɝmwM_sO)lj Drioz |/=. zF9E2$5p4ÅnJ92M'@6MŸ¯FmvgHH&8-gEOOPuќ c f` fMVx#HCì3-2/ʈtL=lN6eϒR {»rv=$1b0?٥(;SB ]:Uܧ--3gw&J FEl.uF󈸴ѻXq ka35xurb] wZ3 5 rdGebh .RrtV,ksԄeŌeh<>OkXcVibپpjt$\o/%*eN=춅흩a}هIaWpS? ]=Fc8;_.&x0e}kV `yf=6ng$ؒU-n3Q 4@PDUH|#CϞsjwY1 ( ݄U\m#V {uqRx(`4!/} Ͱ >Lڧ?;+Y[M'dϛo-UB.s =-ulɵt)WJkAm}p(#ec\5*)ǨEK`od Q%:Wz" Q&*#`75,g}|6]KrRωvTb8B&G_{8xFۀ<7nISmf#vzo\rIJ N|Fw=2׹+Au"cWv/>ٍ+[%_yVJL|2bzRT4|brD.3yOooewˆ<:4ozbh MI>k&^iq!v|gC-Ӯ)wZKIצWB݁_fSAđnME' O2:ʁwZڜ{Dt5!NY>T|.~W UTB=W$uU%q}? > 쓗G%:G&b,XsߴkdɪgCT%z%͏ eܡX"QyJ A&xe8p&x,Z=AipY[]{jgz{_C.ߡ >V}w Llw; y5v/إ@V^RА^%qsygEђDm-b "[ :WH57$ўded)a>T\+PO xkxo_PBYg\W@EY򕌐(XR:PlحB=^0Jˊ + !=C1хӝ!`VzJh/z?"Xf@ _I|UU N?[H$^3SU Ώ/uwJ.xqiVJza)xx%- /Sx?|e} ~^Plz G@u:taҴe Ŀ{(yy&E,E .ڇDw`ީ3+}){wKl׏t<,=QU{"22:3 'C2T^+\ϿJ݋baEqkݝC4Qm^cݸ:Xu߲#q)ݾ?cfHld-ͺ uv/G-s }}o=us2zPh4-MW s5XP( r%PyqZ iΥZ 鯇+i2~˷Bzpq~UY'ɉZt={3:ZFT3EYG)5>d #XtXSo^τ:E1T9WMwvq[3_ a;Kϥ3 C_.C]ɇQFcLYoz3?Y3,]Z!o:c޵Ԥy'?0bSշ(VF`O4Qv\ X"5]\6XnQjHN7el&c;ް]wnctnxuǔws6PJh>&@m~%)C) Z型 hW~ki["v׾,rû:h~TsyN 2D^ˋMSRugtoX>1(Qt~g;}^ln @8*azgy(8BX%HӅ:a<m/}Xu1,LJNF|5F8nh,s/V-V.uAyz-Io6! #. /2ж cm`"=5;I|sG4Ӧ_A^UxqwzO:5OZktSY$QF6z+yN)2~y'âypOM?mtvzG H"4{,VާQx``OhII/BaY8DڕSľ["1ԞHi2j]-07G7B'&Zw]zqr& *'/H ǂczF}/,֟V&ƅ--jH!b/? 8W=t8 +)I5MC3kh,mϬy}棖]Czw٫MV7?9pwz!Y DQǺB)Ⱥ86xw~_gmt _?[(M3lߩ|}Xݧ𷶀C>!g-AS-TM=abho+ :Ԭ⏌ˑv_z`%Lmߘ506MykHU#6xb|g_ 0/.9ATaOK`qOasօy^E*ۡnlhTYl){1Y (PuCE'U!]"{ 7K\OW 0_nU|hH0v5Gb!n4KDvv[A=R m:"Yۑ ٮzfO)nt])zL^{j7,NM$e -xئr P[C~jQ~EӲ hEuXn^WCo/") Jw$9 Ќ=~zh~4 <63u7g3o:~htg|o4 0#_F4iDM4dٛ+ZiE5&TPHp˕jXܨrjhy=> c!4~pL6w.5$+qg"lcьLt"gpMϒ u!9t y [pZLp.*R(3ˠh cqK;rb{2s[ N Z$yFkŃثX]FhA~޶N5m W7~ BmU=# zpnoͨnKKor,i8Ripud>V)̶03su#tu<)G+Y_krlElMPW'Cx,F>s{~UFcg:7QM研'^<]~4K:# U%5ŀ\FNHbD$ e1I V|!.K\CN(N wc,ܕ?#)M) M bMUs)?:[xm4l@Trfޖ9g=F>Yf$j)}r"Z8hjw\W.ſmEAb&0LϵjMM ?>)ˡp.W.\*>{GhFk,2Ζd R3߫Gy hK:Rn*o>g[W-GSy7U&;->DEbt"ˤ2:akXxoXȓAEhw"o@JĸVMsK*֭O!sQL+ZkKtԩPmJ)  79QĄ`/7ٽW ^z30ېQ=(O72x٘moC <y~Wo?7`o6ה嗗<_cKbI޹}/&qYC-+~i>?s>KZ_wܽΨg18OĎM\ֳcQ]4Nj4 O,:Yؼ:;86ܧ;*|X0R.l*VOϖSץ j=\-"]%Y3djgtD< 5[o{PB>b<DDؼ0;G$r*? 2~'|%Qy̯6cPLjFm֥9,z:ggHČHoбyjT0P;r m4\dnyWlYv8'Ez]+V/zy<:]aT=%rWHhw!>y5z|ޯ',a`]ߣ%ivDP'ˋioE㉠̯c !L>N8 3j:?{?~w~S΃h )ZG Ǡ|sV@ojm9[CN^~h)mLe"ruZ,P(NărEBZ;Viljys?LbJa6v';8" eLN*kopD J9!NjZͷMQ]'kwuѻVkĔ5Lu!{h[+ ##P3_pM;HfKwv*\}T""y_0p7LcR+˵Z\|ͅ;ug4 !I^gA'-_:},熧X+@ᝦH sJEt:x `o$w 7WH3t)O"/^Lcu ZYߚ K]em?oTO(SMk%M(c9_rti Ɲ]㬎ɛ&R(y[Fڽ9~Gx\uKfH 5AeTo Et Jm](Ij:MOU V\doSձW,>/)y> H n@q<}H | vi> LAocAQDĶ 픎?^J7F#ojFIRQ-G8vɱ9> u_k)+p!j"'>r endstream endobj 267 0 obj << /Type /FontDescriptor /FontName /KHAVLZ+CMSL10 /Flags 4 /FontBBox [-62 -250 1123 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -9 /StemV 79 /XHeight 431 /CharSet (/A/C/D/E/G/I/K/L/M/N/O/P/R/S/T/U/V/X/eight/five/four/seven/three/two) /FontFile 266 0 R >> endobj 268 0 obj << /Length1 1403 /Length2 6029 /Length3 0 /Length 6987 /Filter /FlateDecode >> stream xڍx4ֶ Zhчu{NDc0D{ !: G'JM=5k={_{p (!mHZ$(i PD&0пD&Pw ;ؔh P<@"H\ Re'-xD@QDJHWw#S[7Pp `@v`*Bp!}#*%$%vA "dy^0#{B(t.?8F0_C= ` p@aB<vPw:PC E Ht%!~!+C8ap(@WUKv`8 {ap-{`>a sEQ0/B`ڬSB@hѯ)ܡL}3{eCa*dy@5`0&h(PRLLG_|\~HW=4f|P@  B`gǘ1X1>(TL PSQ H H .. guoz`؟GF =  L&GƆ :HP\@!,{Gpo?_v} 0z@cfCCM 6^ 43# @P0o qKK!Q_L_>A1~g]ikE`wwF(U;oH4&G:X(@#1vxc0^u( !ABÜ^(0x l୬vF'E9g9jgM)ؽ37W11|Qwnrz>Ko]P`qI0&NqDfckb:s.#rPr(9%gMg@)ub?1ge_E?"naakhimn_Qfo؋J:*ytIPXJilt.86? ےD<to>~QY>b1.Dr99ڑ&]t(ZߋK \֞Bka/4?snLK ||(gv7]auZ/yҌ%qmPO! dpYG& &*bZYd5OB^TA~^[Cyɹq#Y#mLBsp)rRJ/L/= iI>^?@^~KMD[C!a+·6:\a'gZS=~o#IAB]CxtjdwL3_vpm{7\RI +D[-Z'=O,ΤmZ}j9pQᦨ M5.)B;S8$PmxC BѾh.@Sk9BqQ/ 8DU⇧ȇBfbo}]_n[1(hE[)=h(4O~Whru%n-rEK9R=͏D=IG5A߆$9?0aa2VI=*jI> gQyEmzɬgX_$DPRMi? Rpc.G}yahPeYAVY;8Ϫq+ԫwPFOJgu9!}r\?o"epc o*ItBYϋ5:$JCT&ȺEּdTZa륕*7eN4PJ+Wv$#%pMgkV8׳®Ϧ,Tu憜zHd 32Ө-Aч1n/N(h1ܬš[ rWËIlƥr'ur)3a➤2z TY|NաHZf}kG$2E' (>5ANF\tl_㇓~YYki;3P\J>k5/^[B%Rjn\t[74.91$}/!U,n9c%'pñX`;h4b5y|dI!OKhBpu %Ydm cV}[ 0d+NvaeM z%(CXX2Z'xP;>qVNi)7"5?(?1FzuE .O} ):p@}|j]) ج2Yg[|'?ES2Œu<{K >L4X껞v'2wK=Lտ9,LCOӠ*M<8HqKYV-)ɱqCX?զ }bjjx3rwSWUf@K#[a,!>.ع./jJ> 7!汫brԋ߷j~89n71Ii+ϹADi.F@x$wvmX6XDf'TkFKjYǴOu韝{W Ǭ8ȁ W{.amXd.ȩ{7[_k@ Oڏ:wA@B礱*w3"!,*d:G>GbMty/#xxH"OKa)5dEI"8tgX$s*8xĒjO&~1~i_<>>*[G,4qr%-B}S;f~seBЗB%*[tS.T3oԝZ̊ {D>7qFY-b U>$յZ[r灻(Bqb^2aL[@{Ȳ=Hud2'8Iɏ I3[ɻlكh;!حiTެEGaeW%RO?4 ~Z6J]$l~8fM/8r_:6GT_*[k)s|f /B S(`xηiꆌ9F@Be -tAjk ؑT/tc˃Hd|MZzdH>.Ef쇒*4N2DO,yݬ&9+V0Uwb֧=۫nXV^/Oka,Jzg=a1a_zMgEIKݞ6jўtz_3 zTFaSu$+RS"sE=+  A\.{YƟ%]Y;Kmp̔%+ydYq,b&Wn^y?HF;;sIQ._XtҎg"u;"rt a#n9hBix:ì{̚Q}zʷ(csR\S6~M}̀o׏<#rSI9HH ^͔m{*BUEK8'f-zB m)t\"(IXŢclsqayY5W/L%4d=K_,Jh!Q"䑲Yw迦O%Tku6b%,b]Z EJ6O]lGI;<'ҕskr;co$׎^t;(<"h["WH] iEt:Z=K&Ij}7śuР<ɚ{81%]Wv*wO{*j,rk,ו/NYL.i ~D"d>{mJ=s6O(oi<AG6V^8UDo|I!Ҋqǎ7M]3w^r#_= _w_Ub}#rȾc魖bw±\' LN }plHlプ:0B*\WtEo#̫zf9$^[ڕM=dV0Y ?4C!RL2 1Zt+%!.T ߳b, F<˃(v Z1SJ%^O!{ZN?㡏5+#;|ݺsj\b^GbfȻ5u#s,KL{,vƂTf"S"XflIL{iԼ|1 _{s"g,y ZtͰ3Pس Kc*u!{T#wbzAB/𾏢x9;|y4GX=#[lg\_YeE~h{۟[ML3%פR;s!LnPSO.K~xZU[^l:DxBFIC%2`Hjx^xYv56KߴYշ{?Z!NJs˕ssc {;2Sd՟=WE iƤ ]Z%u)r:Uzj턜7:83-nN|UNѓg\hԗ`;Hr0q/h,ӇZ=w^G9XpG+fvPh5b-hk ~jɗa˂ifAgќyK"'krTUGO(νʨPꥪ޷GKI:$g̬WxҒe` Y%WDS8pHG1R&v#SYSSĘG&5 _+,/w1r^+/_=}b+Ք6_:Q8U9dS'8vd`'=b7eTo F?liG:Vt?V^.}|>V6L+Vi> endobj 270 0 obj << /Length1 1518 /Length2 8290 /Length3 0 /Length 9295 /Filter /FlateDecode >> stream xڍT[6LJJ# H !5C H Ht#%|x}y[3s_{_fa"k(a'|^//?//rmg1 P8LugS50 '$', GP;&@  Yn>#K-OTTt+`#-BP>*.B^^^<`W$ z$  Bƃ0p"tQ^`pgpB`ȻWhA`k p|<|)WBP`[[9. ~]|' c`.|/~H[ AB]~s.sẘ0;y+Bޟ;w_ {FPovn@CW̝ 6 +@o[G>n?|wn;= PH?F||;- `q[ ? x{'?>Vw \|TMt_$  V0*M/e56wЂ`yym>|CGWwπ u+NЄMC!&^UnFdaw:'+TzCt([?ep :p$s?ѳu{[wW r7YA@}p~|wjC  Kq /VT6@@A_xr .PD"@_tl=Cww\Tn}n/X|8(_hh(42% ,VKew ;dci3]S Iauz]DiIƏ5ht$:J?&I:nX M{풱orа}|4AIP{-wLi_dMP糽h5O5'I5&joMKomKJ=r Ȫ=T7-?*[y-zҶUx@SǞdžps m`}GE?Wg13БM_/NUS͵j8[7u3gv81)?) # 5cg74~9tMz b=L]W!h3X"N>qOtp=Kq DzKUԃ unY3bZ> Qͥ y{h]o&[ ϴˢYx#"waShh^fvPNL\D E3pB(5\ =:ؕm^vQޛO:3l7z蛂an9Ц.*l RmӲC.@Eċ{O"لxh Mà)Q攅N=)Ü'J.S,!unO2q%t#Ч|TL3#} #U#c2jX~hj!HxS̼2ؑiB1 Z5rDبp-._ a!.}^xs\{`X mrBRu2wfƠ?bW܏rr~V#0]1^7^-\0gm(8ڻ`p }`sSj rch3*vN|I{ R큛#QASYZWxdDߎA@4b#BY ,z,_lD2Cp\(>+>g?|^?vyi?U兝`ܶhfndѸ]R9:\'׍,eŹ1 k^,[I#gCkԊ8й4̺rr4`.2p(؞:޳b/Ul}2yLۂU7;ִYMw&?-@R .gϲ|x>n O:Cq̧SU W)+X>$-NAbrxe$MC".D@0*ځ-YKtě- ch, ,zhʭ PC\MH7 s46H 6u4-2 ==J\[$E(:C&vpa^ܘVWWOQ՛e6_>Οk!BpYxizyV~ڈ|2N֡%baoI#4HzlnH:P~j|(U bG adXeWh!I@!5]³Ր=y,A/iӍC-z܇[:V0]8wB"\r=A>4oK6'>6M g{)钍54P:zz})cS}'w4 v*IsD0>.HsJgU>dV60;=qP-NBƊK\>Qf/CuhMZ*m/kFFAmfHTjIoUQeue̥UgQµJ"#d [B|%8 d ?k׌?p.!/Xll/aXƊ,RY>͗޶[2bF"ZN7l}'6y9u` =u"cڤ0MŋKTӡm-b88>aLe,Ϗ&K].=zG"W$sPmBuh3%p:c=w>Un/本b՞e.&$CZN:>[b*zdi bO Z.x!(њkn菉54SVb^:r4i,$XvL.W5smg)SY:sTwv=׊ufd`>_ĺ>dPmA/q0=P^uWTnڕyߗzϸaG>*VזZD>* LoQ3A%< "?#n.# oJZI&wHL]͸U;ly;g܎OS5Q K7Hpj e]Z)յ .*\(TݠdLgWhG:E?~Or!# ;&r-י8հ)%W{ؾ"p+m\ĔGkHpek:-Y޳^r9 .a="\^*-LoC_hPwb5 qt"gP%Ke`N Ƴ/#Y^ȭ\T!ת Nn;.Ү!ڶ 7xҘTW qrTC#ꃚd>=Wn kq_>j: 4f fG6yJu^7F\&z\6~YY!Oai"*3э8{R*9kf^dGȇ6;<WT&G?EiD1N]_!?tt3Ĝ֡Jkt앨 Nw^3N.+tMXM;IJqtsO:0-vz%Ӛ#(xx%ѥ @#xb"D0zնSWc#R=yWT MtDCc ~hS[ $"RRj4@)??eD&쯄%SWGb U %%i:ҽvUfn,t%Jv!eF\]n!~Jxc_Egc!o}{Ekr]WXߪpf tbT#p[KZ- 1(Omb8Ehףº:Q$ '3n``O=xNػ(TޞAlԡO,Yݾ_zp\:Jvhށm/*etMwiIi^¢!3iNJFEMwV`׷7 oۚb/ pq+ _#D Hl*f0_Ke+TInjq 4j[5^:Yk(&9.8{Ӷ{ywUbuK9<߷8Oai03cpϓ-U+ݥBW{4n/T#8=`Z+dY ;Rt:"gWQ)DS_G+wJ 2sjN&_;VIZs1Uٙ8 o (_PA(<.tO3 _vGl/\7K`iD $W@%|5|ifuKEZYP7 ,QpYڊջϗ1/qlC== N0JUWS!!oPkGx}՛l߈??ޤ&bS7b0 6RߤGiGA%oJvD԰+H$+;6ZX\C G~*_#DC|¦7LM4~gyO}$Aj%Fx\+@ ,1߿e\IRR$|X]epx\ׁ` vV|.P"򡦥ey8|ktQ,aqD's37ib將t\3-^+/>q< CXݍmeˋ˂/Ml#lX5I'M:tCL7bF 創ի_rhP]$U篺j#ź%Nc-0)° Q~ ᒝ<ڠSմ~FhKk(0O%(^!̖^V8v;*GwKC5Q/|~EbU &7e|k]~0 ݜWslgЊs&zGDeo"jiGd֘D'bOT,+Rj୥E[gݍ: > =3_O&--N|t3by_bR >YI@8vlO>7h-5ȼgevX~ ̠>w{K/&\C򒗃i棒6pLZ:FRU {fH xYvO!һ+DmIvg>F8FDoxLƩaZӋqBp-c!`4Wcȣ゠Ij'tx[]8.r}s*'Å ̾'|F`W.3{QQjDp{g m(,ݚA&+,'e{'WŨM]Vc+aW!dPDO1ڗ ?1,z;D-<г iiɿL-!߷RNc,U.!R>?rķHTLHA\Kye(BʶKzTB,ܖɫ٥.{b Z%m)&ꈮոga41 q@6\V54J>"P(0IS@Co,sNWS|QBvnjv{-xo;Es2BkDFt/&*)y2,c-70:^SZtf>˜itpZ>LQfZ:UG*vn,Nyy7.c N7ͦ;5'q$Ĩ3 沕HG| -~" T%)4ն 81\Fز WQAPZ Pk ׮1R6bMU,3Ő2sUgꓦWEv!~֌{G94`ܝcMU3H{wvrh.c^%8DyL~yCH^S:ΥN۷R*VNya}K ;JU]N_',bCR>#5|j> ]x%}&혫0c\Hubeҥd`4:9"Z,8D_J XI^8e _cB 2B ) ټx|CSvӶ'CD 6;Y̱ >9 54 {>5.'=\n!Z*ȰXpM>4W|h@bQuKFIO5}|1ǟDq^|:zI 2' %pwww%ĄLm \ho\eB!aSu`ޗlL)tq~Gt( x9VӲ\Һyvqa$xl4\޷Z%q9),!p$ƩYϰٶ7f:1JY|L@}Қq?V4笗#@_aH=fObJ;bDΒys!BCw,mjcs̝|!t&vQ85"j+d?UcpiFRf/O2k8Iί_> endobj 272 0 obj << /Length1 2606 /Length2 18047 /Length3 0 /Length 19535 /Filter /FlateDecode >> stream xڌP c; ܂; 5kp9ܓUWSݫW7SP*2%lXybjj,ff6FffVJJ55vʏ@G'-b@#gM(og uX8yYx큶qz?0l6217ٚ@@Fgwgz_FNvx#W#1ҍ"#98읝@id+ bv66@[g'9M}`gsll@f0ugR9e~́fffn6Vt7`@"_f/{;{Xd!x9Ύ.@?!LA&c9wvh G;@<~,^~OoITYEYR.ڹ ll6.''*|2fvH2\ {2(؁=&?,!&,+t{??F6 k< >va]59@S]q6[s rM@&Od TsuXșX'fe53rp<bQSߣ `bs|fvm)'I/'x~#.o `xL".fo`XLҿI7F`]7+F`v7]7F`>߈#0̮5#0ֿ̮E,FN& [ew(7X9Y9Y/@cG#53?lt'_.<*abcf3s\Xo iaol{`,bzm~CGf}d ~ 28еNc>j&{#+6n{ao; ;g*X?:npN@HpgX_Lzw.Gw ';?\ Nz]38'?ϵhnO._ h`glYZaoB`rO#=ײc Uw"{Vw$hnWH^NZZ۞_ Up& OD2 {:x n씥upFQ|pr/>_)R6PP.s*faz#pm &*6cuW$տ3:\d?N{ts#lN,0h"4? AȕS0\&W@.,ݴRxMr\>۠,ܜDP$fN;+ȯ)E0B+BCie_v0/?@bUn br.l2*YSNE&%UdJ\iާ8~Y__ܖm&.Uivk/yUEՆ hPAdPa4(c7:?͙ |GGXÒ$+gs=>tĔC;)ɣ$g|a|\ނZI}dYW=E8pQP,n]yLE9lۺ\ߍB%!܏#k# &8$axlj(9JT磌wݫd}ѯx!9ۢ=8X|,P[LAOS_ 1aL-/<5X* o\,mYk\}Zߐs,5M5,2`zĦ=W* 0nΦż>f4[?IF7Z9WցFe%nc ņ7<5X3n)HcߜFf *Ļy5H@ynm Kaࢨz 7-a{bem?wb{s 1vR%(40Z,-wr;0*>QC4:% e;wK3`nḴp.Ddn[sP9'K1*(kI]sp'nYO6>3eb;kOj@b?6 C8I>y7$Cd(@GnGƸĀ(џY)y^at͑|Y#sd!p<@w "^v- uTzHԬGJm)v-`|] lH2aw|_YeOӯˆr@1= CpbZf\5U ؃oHb7Pyuؼ/8[~>/qm|H%t-k̰+q-{1YJ'SS4u6Ee%B͘mBx~ SbblZ 6irjsV#Q0'Uγ"ih1X{⾝iCUKeHLXM9$͎-VVr ^pu6 r6•CP7Aa6+NMDi+Yq4U *;z*tύ 䞮 ϑm;$&? =E EH:7 {Bqd؟! iu\tVd.Zo ͣ*y,[%Dc׃f~"j;w+2Tr>3`CPT" /\$_S/1ͤ[0^\azI}t YHN53vi-CjWh yr%x523(2!}Ob>Dǡ}0HB﹩ưD̂Iq[.њ#5!=Y6(8)|47X,@\5@:A=z׉<5C޵+KՑqfΪ8A#2|mJz -8*??~nO"J 1͙zY^.5v*`;kQN9B*ĻޒLNܻ#D2}<8B㙞lXOy?Edx ;U tt)6z^o2fʱE#?v@>EX ޞŏ=}xo"p~t~FC|PЛTrȰ47ΖN4gE>/$dJ,w,*N⥟0n瘱iWr7Y:QmUurYoa;@ˣI4#YWW jCm#m$ SٓS>NIc[zs ROs6pI4gZNgI9Ļ7i!R_&ȎG U! KvT( ]Մcی95R >׌isv~{gšY[^#.kt Ho(Zغc_BztmCdIFN^JVX}E{sաhٙrceNn~ʩT~cJM2K],ݯXp0뇄03ǔQ;ZLfs۫ͭ}S9&T.NL 8楝6oW[#Ǭ>%E.@f<'Xi(…1`8lF>F%1p8u_UC ĸˬ1@s^MOCѸ'li0ZPsJ,SCQ*TXn)K+}0-ÍZ]Í||!mSo+Aj+GؔphVA(A^膍KV糏q6|o:[*GdD8S [((ȥv)1T-4S Mp*;hD_WVf:R¹Ӓz-n[(I_CeMx@lZ2pr:"*Jc$pJV { 5Ƚ8p t;5/Z]f5qb!ѕ\\Z7I)~~OҬA^YO2R4 pƾ8/hQҝtZŁUuܚ7Sk2PAr*M3}n&?;DEՇ>Li Ğꚰ&P'\g(Q}AuWjm-c`*X1bX ^TK-vG-O(u"<0<| ;c۽">HМD%dEޒ9kw~IMqHXI|rA;OM[@ (8%LweLP L"A3dϵ|ؼE=%4T GRe¢,6DWQq h("盯 Ekq(x,3f 6%J J-Á#؛) X'$ 'ݗsLhP$sP%ĭؗQ2RzHe7IX}~kK[t=rq xa%A)XUhYە~y2fPYwpɟ-)J&Tk93`q=1QљnpL#ZS2!J5wAbnGI9. ?|kX28,5Om*H]e~MC5v07R~OL&Se- c:SƄX>@όҳ>?)C E5LJuytt8I2? XL31dy~PB&c6MhD!J*W%5lMC}&U\Ҍ+\L 8ְv KrfrC}q7Τz^Nsr[ AIpc6 A,+0LlKG0 xm@9rk"k4C}PĹ|I˰P@jآxojr Τ"y9#/c; }i`fys+hx"!rR}Hէ;}p@ jC: ?8 JP)$x]"FȂgKq&b lk&WdN Awڶ#D%l=Q1/5KvE*Mr~~}zSC -kbYVhƊ&&ǧ6J3T'"#9f07$?xGa% :ct!%wq,nj> &/U^8c 7aOCSk3p} YfΠmbj HۅwTG|gC-6ña.p_KBLr֒kkFK#!|4\eht7)@>lR.z* _' єCO@@:̴^}ށkiԬ1t3z.ߴ#M$US x,VN-ta\oPE~SCο) t:~<1/3@8D+6j5] /aխ;Th2"N,w>~GrrOlӜZysSzy$ ƸDwW4O4eKA ՛Tyv'-B:3K97PֳL~;ZGԩU5 r4M\8q% .s4 y/T'јfYqd㷈#DAnU/us԰YJIAߌ/zEdgM˪W81^)‡9O '(Jx_Oڽ"ˀm.%XPyB1)(_ݾL *$s]bmC"<Ȱ Ӫca0tگ &!k^|X%Dе+fb?>jZ1mo|H4μ n d:trV4nrBW;3m NU5.ۚO\Gx+K7geo &Kz*қ}/иBk~{D)~R *~I"%:Yn/ , ;(LIuSӲPs #,DqdZ`#tH QgGU 8NmpaiԽ˦ެwNsB]VJP,2͹B=qU\ pt8vnaLŞi[I(Ze,Y&~Y@Z,E+beSiu T>E\ht7qI&%ֱSXb*Žҳ|)g~x*lUQCFMIz IW(zϸf^cP^#!V LFFo/Mme4_6F1-0B eu4`i~gaтT#lM͸$? v<ꀆF[I rKFZBuVjZh~w!2Kg(c`A5f8%/}ƨx<"fqts9*Ƅ%a{?üH͓LEo&C0s))^m}2ce]Bnc}*kWd6O]±p&[->q@4ĩ 9 7T.ڍta< fdo^G=/ϢEݤqh ?+eKo "q:V_Wh;Ple}wk ?~fť_#!D}ĵ$ A>qB'@h[ֵ7+.d_>)򝹸w!!4Z_}$kyv̷u?c Q4X! f&na;/sjtJvMN9T+oÇq/ }zAdMskY2љqBdX-U.Z2Z@얱b.)ѐ^DCXa@Uq`U6uvOIo;<Cb)~-[A!b8/hJF׻nMcz4ϋ|sF;W;Z/$ ;x?5-ޝkU9z<'a{]`3a~81dtU/a w tp;دTTvyqeYyOpgbB9HDuﯞ ?~Hdq&J\3j (0Lb5-3Ǜ5g]']OzWn-!UفIP:8x>`'5/sNqqUKВUoDE37 \~CSk_͐ :?&%64R:U_7K8޸yP(FIEsu9\vܺ$'Hp]$Dh"Ͱ&BN]r wH@y3%,j`<2egjcEy]d]x YࢆBu^8^*W)LO\-W=F%r\T=яx7ڟt}ٱlV2'v̸L gd7Gu pM&}g^JRyVoYïB|ޒҤN9.B-1zhH#nq13l4O;b=mjfǤ6vi)Ȍ-? (Hdf4 'LY&S.*qwUQgXRC׵3VOÝn5ҏNQ$-IZz:(`9&=7IL5BS:gb ݟ*bX1AUf(m} Q6H6$,²y*Y2ES%v1[UedLDio@PǎeN\MGjd] "r[DYzcɲEQw눖&/Ls?qfKc+͸ #mq"Z_;vjKh.1z(9ㄠP&'1ݎ8E-;%3bWp@2%!AvbE|΂]Cq/cN(g_*{# ۵Kc™;4m:uWt$zhcĶ뾲éZԧeFR Xg{Pqbq_4/(mz*4Րf7Wcf isn~[!;toW' \)M> AE|L}kQ=/^Qҁ~8]!gL#DE-jX#n"T.p"d~lWYniF!'rU&9Vޤ6d#Υ=Nv.yj-+sCM^'Zv$b*?"IdLHG/:䩶φ7BG-Qծ=ݙH"e%\ekהy-2C ꮷw*[̝'H)U*IJg2%2T,+1ek~X:X5D_,p!%{nHx?7["rwʼnE}iR?0tysYhb\y3&N\Іq$0"+r@meH&} @Mv~ ̺tA`;0fB,ʹb6[QԖry&'1 ^,Sd9 . =B¶hwY},$㟖lXKp'D[}) n;k\Nw'P/!)Z! FwUgͿ" [Sm|l/RG եæX%uP@LqG#e\s )d5dǢowYd^Y(~p4CV-z8m$~gWb02|PqkSQ[N@MaBcK/bO)v/ ';? IJ؎(Fv)?ksp#DҖ97ɚTCmQnb|оT'(L>_q-҉EDydDrfF<(}䘪sBl\\[ͨE 3W tƹlnnZ 2u2冓}u/_nPUacGu=;泹CΣ4}Զ]EQjk ΅; E]KxUDZK:%>B<0Nʪkn-)~R(>("ۗb ?c(c tq׵UhE1sV9vl%e?Uil_ &[@%гAP\OqZ \F]a8X*Sj`6ݸB} v{=P_]"^Y'ts Ȟۅ9"2rn w2:(Zņ!Tbڢ5x:sk&ˤr=xW%gw)ʣ{DӜEdBVf*`d=ྙNn3C{oŃ$P>̤ߧ)ʝr%9~L+QKlUMA%o]ȱԳ(e(204uVFuT`*ei$:nDu[vY $_2RY,"N@t7X{m_(zoǶ8r77HP^)[NL|ۗ^㚾䐌=#$y([9%qH'3xU )S#AazPJ%WukGіlHB2̭Z..1 GP!/ٔB RF?HxvETϫ\+e9l⣘"BM#V_7l8&-US#v _:{n>:i>W/yO:UUɉAq%gy9Anp~7R\SuMky"An5v}VOpZ6Ҧ9ZS h.帳'H喕M*hAǚx(Z{X'XUF{bRܧ1Y]V›բ5IT`-z4b#=jNRa"CTMdIF޷v Eaz]lvPqѝ E

ة>*g6QZR6u Cjs$I{Z' -)M+칾;8>K}VVh"~L*ɴUm5> /:Nwg0?JS *pξ~եqD4 C,'ƟP1>|W':=pOnP`_uL( u\C/^|SpK6` \dl}#&sԷ oR51`Rb/qvNdx_APd:WQP4^mc[tA0 ƕ;AϷ~hbߵ<^wOŸj͚% ]o!xF{~Yrd#BRPdQ)dQcT6Q,z=`!GZ\jX8p:=WuyAy?rY?`l[8IANPq`QXGR 7ɵ,M[Љf0D9聈BfX*\ xcG?pK)aR}&%4:lYb<ֽn@ЊF`I,p&*\ˋKu5FjYUp p =i^ j"b!D2:lEv)]^%e\E`{hF`$DRZJ?Ƅ[' VfCEm&9`P8bkR@]Va\cOFEwz+ I~B6ӡJun#B7 &HwURds>C*T^$Uz!s1}.\7c8>?:N1 <ڳ 8"3"ݨO~-rk9+FrʐHo&1u"M`N;Ŗnr#rÏ5ĵӒGGO57Ea8MYtZM1NMMf'oV8Εrmfg@-Glȭzv=}lv*HOi5s|"I;h-تW~ۏ|5Tobʴ_qiMʘ\Rt')1!/*%A$6,;?z.kx.;3!toyYDzibOƗf:UriKjvPWM8`c`N_B,(Ebυn%0Sђ+lVZ㍎bC`BN=* Nxwaه #{7B`U:?v&$i07JkAdr_+97͆"]|MƥU1T`Ey>JM᧧BAy?Z'ƂpoMŊ,B/+WOa.cNXwMp &SK/_dI걪yq[f[[?ɺ=)qSЖg-qK4`$\:=Fxh$[,ōlp9`9}9|̟3ČOA|jbL Kf%pM@D)8Πy^j*Ex{:&;ޱ5* HZs1zt|y`APD7(i1 ۊTՌ_%fڦew8wx_k_JV6`닫9b4FlGwybSukDr6pmlQy!ExdU!Ev ȳ[i~ }Zb #mC,tܒݷBS\zT9 ."4qRsbLCvAx߶]ib * $,Q kdAys"aLFR 12z2B; |ҺȦw;q Kw.DZԃ0AVo3MPEIB(ꇎWm2e m lV$"De>Pd7rcIl? y#²뎥fHOZ-K xޑ~F|A*<.̶qT3q)mB 4l?BtcwFFæv5{*H}J!5ekPsU9,3TD>"9MZOI'1H1Af4[ c;`0MGWX!^J ʪ\ޤÑN/'+j|sFᑒGue2h&&O58,AOd&/ښJݶ ڌ/c.F@x{iWGo׷{o\'n降QU0 9wrR[ bmK"R#WXuK]x> 凔GwZF jŒ~V,Ҋ/] K!ڨʥiEPW-a p)q߻ܔIS ePbiRJN&DUvסոD#C`+CpRn,QaW>s!=gN3ɹ?x-^ުI>9xq77 *uO,gK^hO2[RbM%QY< G1ȂsڦָAhk#(w'DT#r+uoUUF*%(htFP.P׫S䜡CY0p H|khˣ+!4 fj(J/-۞tW=rZySq &㿌J.ohqQ{)aI ~tk0GV4Suw߆st0k |2? CS:W:HI} vEm̟J܅̹1ݼ# & |WgՀ /\y(QUA!X*?‚:շ`m\ ra& phG/oD[bgһgJ_~r=]{ U-RvZ!I5m f h/*Wn_}17nflYP+™SYL^rl5Pa}m̢&2$R/U+ШsCqׁgzdxԑj~vn@3 Wfo80nדeHS}0L# `_D"+V!o{J ^~=Eq}!2)Pozf L{u7! y*W̜"nE+g ˖_Q)nJ?JT.<2=doZ/ܫ`Y2,_}='X)Y2k6DNz=IMF4sD6U->-FQLa ցƆv+CG3l1!kJ5Mޫ~ 6+Mf`ak!deN2"_t b_ZSJM\]6Diǀ4Ȭ]GWyq? TkO`&H( [6 n:L|6@Dƾ(U X' WoQcvBM슀o43h1o^9qÙ]9V5{MXoB3^7%^/Wme<1HS |.ܹsɼ'I8 r'6(@+VJ[S OY^exaRp|:. BUh 3\EfJV 5X׳z\l!^c|sj`X$knuKnVEksN`Y4M졵r? )u;}hwƃ8%l~ 86qINZ3N^I<<'IvZ ğZ9=Z/6=\# 7WJJi~!Sm>:8H̝u#,2MߪHN6^2c8 3XHY>HBeSO VYhRiV)yc,76|T:Eñcۯ6q )PelPgٝ#umo#I ޒ߰>㔽*9q#wբa VuTo!࢐k^3BAf~:b#qHx.JUIHM!:-枈A Y,ɽ)f L\lMT/) jba!p6JЦKxJ15(UkAz])bZ["CrtILç zwXx!AVGU@$Bd1gp ?5d2'{b(S{E8iꥄWsO7;mPsuejs9@<YrZp%NB@-!ȇ6擥`&oP=Vd> Lu_0 oC_eE?ĺ|BZIWz?L_YoI0fP\Co8MDQ7_FdrW*P3"N3<\Gwat#҄oIYԥĚ*Y|4`_ [vs 5R H-DIvd襁,-c~*?nǾ7M |v꼻/x^6qs=V^Jo> endobj 274 0 obj << /Length1 1842 /Length2 5846 /Length3 0 /Length 6957 /Filter /FlateDecode >> stream xڍT HJ ȗm !1`ĀJI4)-tKt "G}~9{v\y_}]6}~YKG #A I88 {rC8 pDe!C183tDjX{"@D!7`@ %(@]戄I8Qk .Ͽ7:Q hB16p\Fw!`A WWWZe-"06 G-%ZPH88=Gq.X%?| ~y@t`NP;i X!ံ @? hG?Z ~. (P\CP' ZQ#G6+"-H (8 _kttEzKVՏ2,N;H3'"#c0|KH;p7 Gw'O%W`+>HGEzOǟB6]=@.ΘlwWb8dey+E>!*uVpY!5k.}QZ>ݥUeI%66H C/ݺ%DJ P"W.;Q'3äz+(f1ȰF椾&*zM0USnzn tkV{9XmV͊*/Gnm6ZҐ#*]@ V=ᮗ4W z(g]%6 Z&]Ӹiĝ!n!oM1s"+zw+|P; 'T5U=q[s|9& `mH̙ ]޲\JI7: Ng (VmW!zW!Tv\[?=KeyQ2+IQӻc/Qg_?W4񺘬cbd݇|R,MSk/7mcѠ:I](K6.e&vpks%<@{8s1b`PYLVٰt,:Do|,(SNlB䚼Qağ5_}3D,aƯi`9#PՏ5"}+]$gAeoOrN(V*џ*YZ\IKȜ.ps~pEEmWZ%I]r:~Աcܹ$v:+"˛ r Jmkz|kx,S@Y _I77%{K|&bU]|#Wd*{bX+s3*4Y63 .l|ܞ~P|)5>z'Tɳk!x9-(%@֯}h"y2p?gN<\dWhdGFZ[(*Rl{>.iuDTWgXA1%U?ZPXx+(hZ / <%"|W._3֠|gOJZLX5s*Ǫ!B$I=1x:$٫_K8ѤT];f"XI&W/ѹֱ߶{.MGoij {[1bܵ x'>B_؆xF2' +(5&$&_($Ck.$DLvnONKm:y W Z >ݣ4`B2Msqׯ;>d943ܧJ趦SYdYpjWƷE"mTXh$xé{YB@ EUqRrJqΉ^ jW.H; SzbQYƝlsU^/2Rw\}2_>uQa~iåhtxZ4ٙV8vHp:TbŹ IMhGhN2x%nDx6i} fioZtյf&W֚Vxώ|m-?U3iue)d#Lj{5_|teWOzfQ $iޖ&!5{@Q7u2̹ @EJ  {)^]?B{s/չ۟4m'j[^vg-5sΪazvyк]LX"ghe$ܐ$,TLHxGPj l70r =gQݚU߽LJLfqz>Trz0IE<0.t7Z4A[\41Δ DQ;:40aq(yoi'_{#1Xd^mdrxcXY^Ns'Fެa-;t  h~~w/^5pOihYRl(?ql]"V @]J<czw̽DpâwKD:1Ʀ2')ëh˖ =w \8N%Q^1{ o_I +74F5G4[i£].Y넠prnL8j¢'TI Ӵpd֫#CF5԰Sm׿I/oJ۰ԩ+W5NDx^FRDJe>GVˡ> FbW,O^[g6ŻaIN>?L޾gZЄ0m|v kG,Nmy2dh3 ͘KBQIS*HsQ=g|2-pZ"CtI50/orgUa1m(ȩgAR롗uɎ!zb2jw>u6GXj$0^I$SQjQ9tn%*n}gUXZgZ/ Y>O t$UqFsYo6ݿ7u)=w`?/ާ.u_yXSj̈́8>eyՃ+]P5fpP%WvNm`ؐ@Ywǧ\c{wܲw ?Qɹo,}jh=5lj4M"j%y?ӪJSF ћr̪7ˆji็ڳojԶuxk|8sJ.UZ PC) u!Ah&RtvV@#9`~6}B^W+:xC-(J\#S qT2j@Yawc.ﻮU^FiFwz݃)&|W$?x"F-X:]9҆~Φ @gd0H_=.4Mduu ߐk̄X>~kA%-u:t)l]: iɝչ$FhvK{TLjW8Ia&_̻#V_]F3vðh{/WC(O .C%_d|uu..7^SpNG Na=y.&WxC&lsp0ɽɫb7IXHֿ8[VmSǜ;0 \'˛cimQtՀ,/={d»ON[NI>6&L~&HͿ\f;\h]BQ;D~OM gS]~1+Bp:) {'0h `3 ڰq:;., Ү*7Fh؝.3oA:S4S:}Z̢!/Kv'[ L?1}7=(T͛1fKo;-8ک_e EBb]m*Bx__{б c馿:ݽy# j {֗Uu!s=q{iPg=>b;[L͏G|v/Vٰ&c$x@Dk6ƄoiY۽_cV]=n[JX{gx%%=%AYDoyW ?{rGp86ռncL ݟgBz%8}1gՑ9]<΃4Q~K%f Obz,u/1y6-jm?#+HĒ}5C:odm7<_A[9v\Y`N.?^YCܖV AxsXn-7x rk˴Kno, ?۠wҰ<,{v&3+˅ g^4}9.yzڼR }K`Y7 "_|asW ݆%>4  ֊"S*G+i ^&n2qxqYƪU܋XlmN)@Ԡ;x9g[¥ox1sn>:ng/@$aFF5A(n#pAw-tZׁU\&l-di$t JANB\1|)ɭ6(LHXR7޲Z> o-[Q_J)\ zC]DC6Z^ W~3l[5\h)|c!4Xz`oJEA ]=I%dDcn#h6I 4} o{Th?eJ;z9 oz2PY1vn!y'c#{64pL4):MQOrn Ȱy.,)Zp{n~ojfý zRƦGIE}V:2 /W2{ pODbRUs+2Ud\F?. ycqpkzow}U{D-ՂtRa' 7'N?6M Zi xR=.YO Oj鹇` endstream endobj 275 0 obj << /Type /FontDescriptor /FontName /BCZCDB+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/B/D/E/F/G/L/O/P/S/T/V/W/a/b/c/d/e/g/h/i/l/n/o/p/r/s/t/two/u/w/x/z) /FontFile 274 0 R >> endobj 276 0 obj << /Length1 2126 /Length2 8325 /Length3 0 /Length 9572 /Filter /FlateDecode >> stream xڍT]M#-H RRCwwwH03HtI HJ ;zk֚>}]tZs,Hhk@.6 N mƤ@G?\@f0M S8]\^A>A   qH[TGN hc r[9T`6 xF 3{ y' $feX20& ry  P5s meׂX\@lrw:Z\-e/gX p{h ۃjl0w 򗣙=o lofw]@VB`< eId~2R# >i ~ݬ#o;ZZaĮvv)H7a۬A0@ Nߋp>^N'\l`zA^0Wן %L%0Y1 ~.`w!{Ͽ^hq~ٕ 4R$`px> . xO KQ`{`͠ w2xF@o_Qoɺ^fY6s{odW|(T p_W=_: >#* vYa6KG;!P' 5Y&PU^e- `b 7'> } `gs[pu>+ K2Ev{K?]2.{Ov{]ٕ ]U ]%~xv{Ӽ'x>{k<=3K_u ,@ 8?^Vv'3nB@x% {䀗G(Kq uAV{+ֿ_3 C(Oˀs4JZ@\8K \=rƒp%?cW|? ,0!BAAnk8]'Ve^nhH _z9)et=r`]>1xM Tu# 7+RK)5Afۉ XƖ0}]y:ç]6lHtR~~.l&R fcJ٭7}<]E,78NJ'ۢmLFVdHcN͡H,(UzJiJexe鹑v :ɳؙTWLshz|8G*eUIZVtR&'3JT?'IzSY% B'M8z "RAJx"p"Q|\|Qds ,=قkEHː#GrI;`lKpԷ?+@9?fa OZ,O|x:@3*sԉ_PT#ɷ-Z*a_1&"ǃ1~ooؓeEz^\w mKc'}oIF6h{ )W2Q|3~LlQ:~ڣ œpbgvZ#RaNN=}riV\v|I\s]q=XeX Wp(pFչOc?b.]i@ lE/QƲ1}$l޳pzJ\1^Iz,7 ~P)hX- 5uF;{t\=RA'+i7^mq6\0:t⽹ @ʛEFހCQ2&f2'w$GFuB4"s>o*<΃4]Z->Q}BHvi p1* d9@6[pc*6fd WH1Kn(ލ Q-h66^Yf%>=yU?in)i#3/ %qA45B>N獲I_NB h|G:m#u@HGbmØԯAkp`Lxc)nܓظ@AI6RUdxx_ʶ s'[5_ ̈`+UZ.PJDxO7@̯f6SJɈQ'~ӳnܶ6DuDGޒak#~^G{ʰ(<" qkc7θĩzG*Kh mKY~EŜ[bF|UK*2}qTUj݆Cpͤ\ìht˅)J> h0){2MEѮ+c4EyEن -μ?o*[nhs(1Tu*F&9L.w{nlp`>Q՜5&ϕU֏ZV旗9J)֜6L] Ȝ&ic|CbwdldΨgV T/5K#<Ln%Me*w-DX ED!yH#S&_>DUb9o<ǦDi=aU-^;֥9zBs{sҹI讑m,8vƐ r^~[ԌCd$̘\GmcՋXH504EZ;䆞LLԃ7-o'ToX2:/E79%Z,t8PV2iNIO^ys.wcԛ]2l=`@et Bbϙ4`za m`;N ^W{Hxlꃦm c%W+S%ǂ &nZjq qu|2R5uS':JiYq"CF;?OL^\ ^VoPV=vIlvZb4.+\cѿ&=یi;JBy2XPOgi+X*h8qVחJKxt~X2x9{ٿT?fP1GoT541slܛX rpPL` EWi 8sZ(= ,x67h!FU\8YA4#VHҼwհ;7-VN QD>b<$ F)ǃHewJQIJ)9 .*]pgp].:Y^ad{Hb!: b썋 aΓMRy8ϳz4&; fC|#mA>[pt-S),`B:ڙ/Tz{H2O Sv˂og?xvC쯂?b?O#-RқtE [GXZӍۉ/D2Xn'x+ h!5V\O7كr)=:`z+CB$3c qMP]HT_h~lt[%A+NH*-:8e*瓖Bw-HZ =48+nwӍ 6"~hV57%f:>z_DϐeNjK}p~dݠ'Ab>oŰDŚ۩ !\mk?kt?Qowb{vf+Ia>hK%{N],nyeAD]m_!Iil#o/SA;_`V^0=Wi[Gm_enC`개J&$%SPm-B ~hG[쥁dkzHk~@s`s ixg5eH 3uBƶ7?I; hQ3g ZK fLQ!'Z~$E BiؒL njg~Uz̘[؃ tx йL),IBߗ"l}FŢ r_*l㞽<} ̌aBb#y] C gXm!D/#8s3SW6xtjɐSaeAAK3mӶk h;J0cUirg(?LCk|OSCEfˉ?DR#v3yu%)S=.09KBs: Mb.AqzEXDy(3A󑡋tMlHh "sIgcHfu'륈bLjP6Na]"Uvk0&1 @ U,61ĝHbšJ_6 S cOqq ˗|NFO!.Dz[-9m4U ,O[6 FD%L>x.a4ǤcE9 QͥEj^7:XOMtx9*^9Lru\R [1h(#u?q( Cս/l`V1R>ӋI7yUFů"1;IkA3Wҧz:ecG.F v֩-%87׾PRmuyiuB)ԧ)ۮ?k)Bg1vd'9B^F~޶6҂*tmż FNkm˚N'?TM!n>1]Lqf KΓ }I^oVnBĺY~'Aܵ sPetfDY%4~V ^aUMF4~h6޳!;DH>(KjȾZmF0/pq,o%27Yx+R7eθՇJnXugDXTIC-1"j<`ikL;WI|aC33 $k5<^tZBw~{w겊)8Yi,dKU͌F(sj{|("2Nr`|-2Ԙc`/J#tb3S'6aDEnt522`Ȏk=3Pɬrqs1U'm!7?;D̈("!}jGnȘjC}fZ~VvzXΒh?6[5|~ \*e#)tbeXisaTӢyHU|K.zaj"A` sȧ}B~#ϞY&]IبT!`dJRKh8N2_#rt6wڗo^c."$18uz;#5'nW( WQ-+_Nj 2-6c]6<&[ ;B(޲50wi"w>O~lg- F`hX-~!/"!lȚ |2jt1R٫V9HoMq/D19RMlx*7l{VbX~m9A0:z;}MMf6Ǐ$ɾbeF!u*u!a[4cuCe8 ?~TY2q#VȂLT> endobj 97 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ECWVAP+CMBX10 /FontDescriptor 249 0 R /FirstChar 12 /LastChar 120 /Widths 244 0 R >> endobj 95 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SOWZCQ+CMBX12 /FontDescriptor 251 0 R /FirstChar 46 /LastChar 120 /Widths 245 0 R >> endobj 138 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VIMHMC+CMMI10 /FontDescriptor 253 0 R /FirstChar 61 /LastChar 61 /Widths 235 0 R >> endobj 98 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GFSCGW+CMR10 /FontDescriptor 255 0 R /FirstChar 11 /LastChar 124 /Widths 243 0 R >> endobj 94 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SUQDBQ+CMR12 /FontDescriptor 257 0 R /FirstChar 44 /LastChar 122 /Widths 246 0 R >> endobj 93 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OBFNYA+CMR17 /FontDescriptor 259 0 R /FirstChar 50 /LastChar 121 /Widths 247 0 R >> endobj 123 0 obj << /Type /Font /Subtype /Type1 /BaseFont /AFFQBO+CMR6 /FontDescriptor 261 0 R /FirstChar 49 /LastChar 65 /Widths 238 0 R >> endobj 112 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UBDXIM+CMR7 /FontDescriptor 263 0 R /FirstChar 49 /LastChar 65 /Widths 240 0 R >> endobj 125 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DTVSLC+CMR8 /FontDescriptor 265 0 R /FirstChar 12 /LastChar 121 /Widths 237 0 R >> endobj 111 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KHAVLZ+CMSL10 /FontDescriptor 267 0 R /FirstChar 50 /LastChar 88 /Widths 241 0 R >> endobj 201 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GFAWRG+CMSY10 /FontDescriptor 269 0 R /FirstChar 15 /LastChar 15 /Widths 233 0 R >> endobj 172 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DIJEXQ+CMTI10 /FontDescriptor 271 0 R /FirstChar 97 /LastChar 116 /Widths 234 0 R >> endobj 99 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BQRQFZ+CMTT10 /FontDescriptor 273 0 R /FirstChar 34 /LastChar 126 /Widths 242 0 R >> endobj 113 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BCZCDB+CMTT12 /FontDescriptor 275 0 R /FirstChar 50 /LastChar 122 /Widths 239 0 R >> endobj 127 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KLLZRD+CMTT8 /FontDescriptor 277 0 R /FirstChar 40 /LastChar 121 /Widths 236 0 R >> endobj 100 0 obj << /Type /Pages /Count 6 /Parent 278 0 R /Kids [70 0 R 108 0 R 120 0 R 131 0 R 135 0 R 142 0 R] >> endobj 156 0 obj << /Type /Pages /Count 6 /Parent 278 0 R /Kids [150 0 R 159 0 R 168 0 R 179 0 R 191 0 R 198 0 R] >> endobj 212 0 obj << /Type /Pages /Count 5 /Parent 278 0 R /Kids [208 0 R 217 0 R 222 0 R 226 0 R 230 0 R] >> endobj 278 0 obj << /Type /Pages /Count 17 /Kids [100 0 R 156 0 R 212 0 R] >> endobj 279 0 obj << /Type /Outlines /First 3 0 R /Last 67 0 R /Count 8 >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 279 0 R /Prev 63 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 279 0 R /Prev 59 0 R /Next 67 0 R >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 279 0 R /Prev 55 0 R /Next 63 0 R >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 279 0 R /Prev 51 0 R /Next 59 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 279 0 R /Prev 47 0 R /Next 55 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 279 0 R /Prev 7 0 R /Next 51 0 R >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 7 0 R /Prev 39 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 7 0 R /Prev 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 7 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 7 0 R /Prev 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 7 0 R /Prev 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 7 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 7 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 7 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 279 0 R /Prev 3 0 R /Next 47 0 R /First 11 0 R /Last 43 0 R /Count -9 >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 279 0 R /Next 7 0 R >> endobj 280 0 obj << /Names [(Doc-Start) 92 0 R (Hfootnote.1) 124 0 R (Hfootnote.2) 147 0 R (Hfootnote.3) 188 0 R (Hfootnote.4) 211 0 R (Item.1) 126 0 R] /Limits [(Doc-Start) (Item.1)] >> endobj 281 0 obj << /Names [(Item.2) 128 0 R (page.1) 91 0 R (page.10) 181 0 R (page.11) 193 0 R (page.12) 200 0 R (page.13) 210 0 R] /Limits [(Item.2) (page.13)] >> endobj 282 0 obj << /Names [(page.14) 219 0 R (page.15) 224 0 R (page.16) 228 0 R (page.17) 232 0 R (page.2) 110 0 R (page.3) 122 0 R] /Limits [(page.14) (page.3)] >> endobj 283 0 obj << /Names [(page.4) 133 0 R (page.5) 137 0 R (page.6) 144 0 R (page.7) 152 0 R (page.8) 161 0 R (page.9) 170 0 R] /Limits [(page.4) (page.9)] >> endobj 284 0 obj << /Names [(section*.1) 96 0 R (section.1) 2 0 R (section.2) 6 0 R (section.3) 46 0 R (section.4) 50 0 R (section.5) 54 0 R] /Limits [(section*.1) (section.5)] >> endobj 285 0 obj << /Names [(section.6) 58 0 R (section.7) 62 0 R (section.8) 66 0 R (subsection.2.1) 10 0 R (subsection.2.2) 14 0 R (subsection.2.3) 18 0 R] /Limits [(section.6) (subsection.2.3)] >> endobj 286 0 obj << /Names [(subsection.2.4) 22 0 R (subsection.2.5) 26 0 R (subsection.2.6) 30 0 R (subsection.2.7) 34 0 R (subsection.2.8) 38 0 R (subsection.2.9) 42 0 R] /Limits [(subsection.2.4) (subsection.2.9)] >> endobj 287 0 obj << /Names [(subsubsection.2.1.1) 114 0 R (subsubsection.2.1.2) 115 0 R (subsubsection.2.1.3) 139 0 R (subsubsection.2.2.1) 145 0 R (subsubsection.2.2.2) 146 0 R (subsubsection.2.2.3) 153 0 R] /Limits [(subsubsection.2.1.1) (subsubsection.2.2.3)] >> endobj 288 0 obj << /Names [(subsubsection.2.3.1) 154 0 R (subsubsection.2.3.2) 155 0 R (subsubsection.2.3.3) 162 0 R (subsubsection.2.4.1) 163 0 R (subsubsection.2.4.2) 164 0 R (subsubsection.2.4.3) 165 0 R] /Limits [(subsubsection.2.3.1) (subsubsection.2.4.3)] >> endobj 289 0 obj << /Names [(subsubsection.2.5.1) 166 0 R (subsubsection.2.5.2) 171 0 R (subsubsection.2.5.3) 173 0 R (subsubsection.2.6.1) 174 0 R (subsubsection.2.6.2) 175 0 R (subsubsection.2.6.3) 176 0 R] /Limits [(subsubsection.2.5.1) (subsubsection.2.6.3)] >> endobj 290 0 obj << /Names [(subsubsection.2.7.1) 182 0 R (subsubsection.2.7.2) 183 0 R (subsubsection.2.7.3) 184 0 R (subsubsection.2.8.1) 185 0 R (subsubsection.2.8.2) 186 0 R (subsubsection.2.8.3) 187 0 R] /Limits [(subsubsection.2.7.1) (subsubsection.2.8.3)] >> endobj 291 0 obj << /Names [(subsubsection.2.9.1) 194 0 R (subsubsection.2.9.2) 195 0 R (subsubsection.2.9.3) 196 0 R] /Limits [(subsubsection.2.9.1) (subsubsection.2.9.3)] >> endobj 292 0 obj << /Kids [280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R] /Limits [(Doc-Start) (subsection.2.3)] >> endobj 293 0 obj << /Kids [286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R] /Limits [(subsection.2.4) (subsubsection.2.9.3)] >> endobj 294 0 obj << /Kids [292 0 R 293 0 R] /Limits [(Doc-Start) (subsubsection.2.9.3)] >> endobj 295 0 obj << /Dests 294 0 R >> endobj 296 0 obj << /Type /Catalog /Pages 278 0 R /Outlines 279 0 R /Names 295 0 R /PageMode/UseOutlines /OpenAction 69 0 R >> endobj 297 0 obj << /Title (GL2PS: an OpenGL to PostScript printing library) /Author (Christophe Geuzaine) /Subject (Documentation) /Keywords (OpenGL, PostScript, PDF, SVG, Printing) /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.10)/Keywords() /CreationDate (D:20121127204006+01'00') /ModDate (D:20121127204006+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.10-2.2 (TeX Live 2009) kpathsea version 5.0.0) >> endobj xref 0 298 0000000000 65535 f 0000000015 00000 n 0000005935 00000 n 0000247037 00000 n 0000000060 00000 n 0000000090 00000 n 0000009630 00000 n 0000246916 00000 n 0000000135 00000 n 0000000158 00000 n 0000009690 00000 n 0000246844 00000 n 0000000208 00000 n 0000000258 00000 n 0000022033 00000 n 0000246758 00000 n 0000000309 00000 n 0000000354 00000 n 0000024911 00000 n 0000246672 00000 n 0000000405 00000 n 0000000439 00000 n 0000026759 00000 n 0000246586 00000 n 0000000490 00000 n 0000000521 00000 n 0000027006 00000 n 0000246500 00000 n 0000000572 00000 n 0000000619 00000 n 0000029220 00000 n 0000246414 00000 n 0000000670 00000 n 0000000722 00000 n 0000031347 00000 n 0000246328 00000 n 0000000773 00000 n 0000000806 00000 n 0000031594 00000 n 0000246242 00000 n 0000000857 00000 n 0000000915 00000 n 0000034065 00000 n 0000246169 00000 n 0000000966 00000 n 0000001020 00000 n 0000034311 00000 n 0000246082 00000 n 0000001066 00000 n 0000001092 00000 n 0000036435 00000 n 0000245994 00000 n 0000001138 00000 n 0000001172 00000 n 0000040317 00000 n 0000245906 00000 n 0000001218 00000 n 0000001248 00000 n 0000040378 00000 n 0000245818 00000 n 0000001294 00000 n 0000001325 00000 n 0000044268 00000 n 0000245730 00000 n 0000001371 00000 n 0000001395 00000 n 0000044329 00000 n 0000245655 00000 n 0000001441 00000 n 0000001468 00000 n 0000002754 00000 n 0000003001 00000 n 0000003152 00000 n 0000003303 00000 n 0000003459 00000 n 0000003615 00000 n 0000003767 00000 n 0000003923 00000 n 0000004079 00000 n 0000004235 00000 n 0000004390 00000 n 0000004546 00000 n 0000004702 00000 n 0000004852 00000 n 0000005003 00000 n 0000005154 00000 n 0000005305 00000 n 0000005456 00000 n 0000005605 00000 n 0000005994 00000 n 0000001518 00000 n 0000005756 00000 n 0000005815 00000 n 0000243735 00000 n 0000243593 00000 n 0000243165 00000 n 0000005875 00000 n 0000243022 00000 n 0000243451 00000 n 0000244731 00000 n 0000245161 00000 n 0000008531 00000 n 0000008702 00000 n 0000008875 00000 n 0000009061 00000 n 0000009248 00000 n 0000009417 00000 n 0000009875 00000 n 0000008359 00000 n 0000006123 00000 n 0000009569 00000 n 0000244301 00000 n 0000244018 00000 n 0000244874 00000 n 0000009751 00000 n 0000009813 00000 n 0000012953 00000 n 0000013110 00000 n 0000016424 00000 n 0000013511 00000 n 0000012813 00000 n 0000010019 00000 n 0000013264 00000 n 0000243877 00000 n 0000013325 00000 n 0000244159 00000 n 0000013387 00000 n 0000245018 00000 n 0000013449 00000 n 0000016581 00000 n 0000016815 00000 n 0000016284 00000 n 0000013657 00000 n 0000016754 00000 n 0000019181 00000 n 0000018946 00000 n 0000016922 00000 n 0000019058 00000 n 0000243308 00000 n 0000019119 00000 n 0000021818 00000 n 0000022280 00000 n 0000021686 00000 n 0000019313 00000 n 0000021972 00000 n 0000022094 00000 n 0000022156 00000 n 0000022218 00000 n 0000024619 00000 n 0000025095 00000 n 0000024487 00000 n 0000022463 00000 n 0000024788 00000 n 0000024849 00000 n 0000024972 00000 n 0000025034 00000 n 0000245277 00000 n 0000026479 00000 n 0000027128 00000 n 0000026347 00000 n 0000025227 00000 n 0000026636 00000 n 0000026697 00000 n 0000026820 00000 n 0000026882 00000 n 0000026944 00000 n 0000027066 00000 n 0000029466 00000 n 0000028923 00000 n 0000027260 00000 n 0000029035 00000 n 0000029096 00000 n 0000244587 00000 n 0000029158 00000 n 0000029281 00000 n 0000029343 00000 n 0000029405 00000 n 0000031132 00000 n 0000031903 00000 n 0000031000 00000 n 0000029611 00000 n 0000031286 00000 n 0000031408 00000 n 0000031470 00000 n 0000031532 00000 n 0000031655 00000 n 0000031717 00000 n 0000031779 00000 n 0000031841 00000 n 0000033850 00000 n 0000034372 00000 n 0000033718 00000 n 0000032086 00000 n 0000034004 00000 n 0000034126 00000 n 0000034187 00000 n 0000034249 00000 n 0000036496 00000 n 0000036262 00000 n 0000034504 00000 n 0000036374 00000 n 0000244444 00000 n 0000039474 00000 n 0000039628 00000 n 0000039785 00000 n 0000039942 00000 n 0000040099 00000 n 0000040501 00000 n 0000039310 00000 n 0000036616 00000 n 0000040256 00000 n 0000040439 00000 n 0000245394 00000 n 0000043428 00000 n 0000043856 00000 n 0000044039 00000 n 0000044389 00000 n 0000043272 00000 n 0000040685 00000 n 0000044207 00000 n 0000043642 00000 n 0000047118 00000 n 0000046945 00000 n 0000044508 00000 n 0000047057 00000 n 0000050037 00000 n 0000049864 00000 n 0000047237 00000 n 0000049976 00000 n 0000052308 00000 n 0000052135 00000 n 0000050156 00000 n 0000052247 00000 n 0000052415 00000 n 0000052438 00000 n 0000052565 00000 n 0000052588 00000 n 0000053099 00000 n 0000053778 00000 n 0000053899 00000 n 0000054356 00000 n 0000054473 00000 n 0000054697 00000 n 0000055088 00000 n 0000055720 00000 n 0000056341 00000 n 0000056784 00000 n 0000057220 00000 n 0000057667 00000 n 0000074236 00000 n 0000074579 00000 n 0000087709 00000 n 0000088030 00000 n 0000095030 00000 n 0000095256 00000 n 0000120741 00000 n 0000121271 00000 n 0000132919 00000 n 0000133217 00000 n 0000143810 00000 n 0000144074 00000 n 0000151833 00000 n 0000152070 00000 n 0000159819 00000 n 0000160056 00000 n 0000175539 00000 n 0000175900 00000 n 0000188168 00000 n 0000188455 00000 n 0000195562 00000 n 0000195789 00000 n 0000205204 00000 n 0000205442 00000 n 0000225098 00000 n 0000225618 00000 n 0000232695 00000 n 0000232977 00000 n 0000242669 00000 n 0000245503 00000 n 0000245581 00000 n 0000247108 00000 n 0000247295 00000 n 0000247461 00000 n 0000247628 00000 n 0000247790 00000 n 0000247970 00000 n 0000248170 00000 n 0000248390 00000 n 0000248656 00000 n 0000248922 00000 n 0000249188 00000 n 0000249454 00000 n 0000249630 00000 n 0000249748 00000 n 0000249876 00000 n 0000249967 00000 n 0000250005 00000 n 0000250132 00000 n trailer << /Size 298 /Root 296 0 R /Info 297 0 R /ID [ ] >> startxref 250615 %%EOF avogadro-1.1.1/libavogadro/src/extensions/gl2ps/COPYING.LGPL0000644000175000001440000006142412250371054022631 0ustar marcususers GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! avogadro-1.1.1/libavogadro/src/extensions/gl2ps/gl2psTestSimple.c0000644000175000001440000000760512250371054024247 0ustar marcususers/* * GL2PS, an OpenGL to PostScript Printing Library * Copyright (C) 1999-2012 Christophe Geuzaine * * This program is free software; you can redistribute it and/or * modify it under the terms of either: * * a) the GNU Library General Public License as published by the Free * Software Foundation, either version 2 of the License, or (at your * option) any later version; or * * b) the GL2PS License as published by Christophe Geuzaine, either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See either * the GNU Library General Public License or the GL2PS License for * more details. * * You should have received a copy of the GNU Library General Public * License along with this library in the file named "COPYING.LGPL"; * if not, write to the Free Software Foundation, Inc., 51 Franklin * Street, Fifth Floor, Boston, MA 02110-1301, USA. * * You should have received a copy of the GL2PS License with this * library in the file named "COPYING.GL2PS"; if not, I will be glad * to provide one. * * For the latest info about gl2ps and a full list of contributors, * see http://www.geuz.org/gl2ps/. * * Please report all bugs and problems to . */ /* To compile on Linux: gcc gl2psTestSimple.c gl2ps.c -lglut -lGL -lGLU -lX11 -lm To compile on MacOSX: gcc gl2psTestSimple.c gl2ps.c -framework OpenGL -framework GLUT -framework Cocoa */ #ifdef __APPLE__ # include #else # include #endif #include #include "gl2ps.h" static void display(void) { unsigned int i; unsigned int N = 50; const char *help = "Press 's' to save image or 'q' to quit"; glClearColor(0.3, 0.5, 0.8, 0.); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* draw a smooth-shaded torus */ glPushMatrix(); glRotatef(-60., 2., 0., 1.); glEnable(GL_LIGHTING); glutSolidTorus(0.3, 0.6, 30, 30); glDisable(GL_LIGHTING); glPopMatrix(); glColor3f(1.,1.,1.); /* draw a stippled line with many small segments (this tests the ability of gl2ps to render lines using as few strokes as possible) */ glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0x087F); gl2psEnable(GL2PS_LINE_STIPPLE); glBegin(GL_LINE_STRIP); for(i = 0; i < N; i++) glVertex3f(-0.75 + 1.5 * (double)i/(double)(N - 1), 0.75, -0.9); glEnd(); glDisable(GL_LINE_STIPPLE); gl2psDisable(GL2PS_LINE_STIPPLE); /* draw a text string */ glRasterPos2d(-0.9,-0.9); gl2psText(help, "Times-Roman", 24); for (i = 0; i < strlen(help); i++) glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, help[i]); glFlush(); } static void keyboard(unsigned char key, int x, int y) { FILE *fp; int state = GL2PS_OVERFLOW, buffsize = 0; (void) x; (void) y; /* not used */ switch(key){ case 'q': exit(0); break; case 's': fp = fopen("out.eps", "wb"); printf("Writing 'out.eps'... "); while(state == GL2PS_OVERFLOW){ buffsize += 1024*1024; gl2psBeginPage("test", "gl2psTestSimple", NULL, GL2PS_EPS, GL2PS_SIMPLE_SORT, GL2PS_DRAW_BACKGROUND | GL2PS_USE_CURRENT_VIEWPORT, GL_RGBA, 0, NULL, 0, 0, 0, buffsize, fp, "out.eps"); display(); state = gl2psEndPage(); } fclose(fp); printf("Done!\n"); break; } } int main(int argc, char **argv) { GLfloat pos[4] = {1., 1., -1., 0.}; glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH); glutInitWindowSize(400, 400); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glShadeModel(GL_SMOOTH); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, pos); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } avogadro-1.1.1/libavogadro/src/extensions/gl2ps/README.txt0000644000175000001440000000077512250371054022541 0ustar marcususersThis is GL2PS, an OpenGL to PostScript (and PDF, and SVG...) printing library. GL2PS is available at http://geuz.org/gl2ps/ and is released under the GNU Library General Public License (see COPYING.LGPL). GL2PS can also be used under an alternative license that allows (amongst other things, and under certain conditions) for static linking with closed-source software (see COPYING.GL2PS). Examples are provided in the gl2psTestSimple.c and gl2psTest.c files. See the documentation for further information. avogadro-1.1.1/libavogadro/src/extensions/gl2ps/COPYING.GL2PS0000644000175000001440000000170012250371054022711 0ustar marcususers GL2PS LICENSE Version 2, November 2003 Copyright (C) 2003, Christophe Geuzaine Permission to use, copy, and distribute this software and its documentation for any purpose with or without fee is hereby granted, provided that the copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Permission to modify and distribute modified versions of this software is granted, provided that: 1) the modifications are licensed under the same terms as this software; 2) you make available the source code of any modifications that you distribute, either on the same media as you distribute any executable or other form of this software, or via a mechanism generally accepted in the software development community for the electronic transfer of data. This software is provided "as is" without express or implied warranty. avogadro-1.1.1/libavogadro/src/extensions/conformersearchdialog.cpp0000644000175000001440000001606412250371054025056 0ustar marcususers/********************************************************************** ConformerSearchDialog - Dialog for conformer searches Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "conformersearchdialog.h" #include "forcefieldextension.h" #include #include #include #include #include #include #include #include #include namespace Avogadro { ConformerSearchDialog::ConformerSearchDialog( QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { ui.setupUi(this); connect(ui.systematicRadio, SIGNAL( toggled(bool) ), this, SLOT( systematicToggled(bool) )); connect(ui.randomRadio, SIGNAL( toggled(bool) ), this, SLOT( randomToggled(bool) )); connect(ui.weightedRadio, SIGNAL( toggled(bool) ), this, SLOT( weightedToggled(bool) )); connect(ui.geneticRadio, SIGNAL( toggled(bool) ), this, SLOT( geneticToggled(bool) )); m_method = 1; // systematic m_numConformers = 100; m_molecule = NULL; ui.numSpin->setValue(0); ui.systematicRadio->setChecked(true); ui.randomRadio->setChecked(false); ui.weightedRadio->setChecked(false); ui.geneticRadio->setChecked(false); ui.childrenSpinBox->setEnabled(false); ui.mutabilitySpinBox->setEnabled(false); ui.convergenceSpinBox->setEnabled(false); ui.scoringComboBox->setEnabled(false); } ConformerSearchDialog::~ConformerSearchDialog() { // qDebug() << "ConformerSearchDialog::~ConformerSearchDialog()" << endl; } void ConformerSearchDialog::systematicToggled(bool checked) { if (!m_molecule) return; if (checked) { m_method = 1; ui.systematicRadio->setChecked(true); ui.randomRadio->setChecked(false); ui.weightedRadio->setChecked(false); ui.geneticRadio->setChecked(false); ui.childrenSpinBox->setEnabled(false); ui.mutabilitySpinBox->setEnabled(false); ui.convergenceSpinBox->setEnabled(false); ui.scoringComboBox->setEnabled(false); OpenBabel::OBRotorList rl; OpenBabel::OBMol obmol = m_molecule->OBMol(); rl.Setup(obmol); /* OpenBabel::OBRotorIterator ri; OpenBabel::OBRotor *rotor = rl.BeginRotor(ri); int numConformers = 0; for (int i = 1; i < rl.Size() + 1; i++, rotor = rl.NextRotor(ri)) // foreach rotor for (unsigned int j = 0; j < rotor->GetResolution().size(); j++) { // foreach torsion numConformers++; } */ OpenBabel::OBRotorKeys rotorKeys; OpenBabel::OBRotorIterator ri; OpenBabel::OBRotor *rotor = rl.BeginRotor(ri); for (size_t i = 1; i < rl.Size() + 1; ++i, rotor = rl.NextRotor(ri)) // foreach rotor rotorKeys.AddRotor(rotor->GetResolution().size()); ui.numSpin->setEnabled(false); ui.numSpin->setValue(rotorKeys.NumKeys()); } } void ConformerSearchDialog::randomToggled(bool checked) { if (checked) { m_method = 2; ui.systematicRadio->setChecked(false); ui.randomRadio->setChecked(true); ui.weightedRadio->setChecked(false); ui.geneticRadio->setChecked(false); ui.childrenSpinBox->setEnabled(false); ui.mutabilitySpinBox->setEnabled(false); ui.convergenceSpinBox->setEnabled(false); ui.scoringComboBox->setEnabled(false); ui.numSpin->setEnabled(true); ui.numSpin->setValue(100); } } void ConformerSearchDialog::weightedToggled(bool checked) { if (checked) { m_method = 3; ui.systematicRadio->setChecked(false); ui.randomRadio->setChecked(false); ui.weightedRadio->setChecked(true); ui.geneticRadio->setChecked(false); ui.childrenSpinBox->setEnabled(false); ui.mutabilitySpinBox->setEnabled(false); ui.convergenceSpinBox->setEnabled(false); ui.scoringComboBox->setEnabled(false); ui.numSpin->setEnabled(true); ui.numSpin->setValue(100); } } void ConformerSearchDialog::geneticToggled(bool checked) { if (checked) { m_method = 4; ui.systematicRadio->setChecked(false); ui.randomRadio->setChecked(false); ui.weightedRadio->setChecked(false); ui.geneticRadio->setChecked(true); ui.childrenSpinBox->setEnabled(true); ui.mutabilitySpinBox->setEnabled(true); ui.convergenceSpinBox->setEnabled(true); ui.scoringComboBox->setEnabled(true); ui.numSpin->setEnabled(true); ui.numSpin->setValue(50); } } void ConformerSearchDialog::showEvent(QShowEvent *) { OpenBabel::OBRotorList rl; OpenBabel::OBMol obmol = m_molecule->OBMol(); rl.Setup(obmol); if (rl.Size() > 10) weightedToggled(true); else systematicToggled(true); ui.atomLabel->setText(QString(tr("Number of atoms: %1")).arg(m_molecule->numAtoms())); ui.bondsLabel->setText(QString(tr("Number of rotatable bonds: %1")).arg(rl.Size())); } QUndoCommand* ConformerSearchDialog::setup(Molecule *molecule, OpenBabel::OBForceField* forceField, ConstraintsModel* constraints, int forceFieldID, int nSteps, int algorithm, int convergence) { m_molecule = molecule; m_forceFieldCommand = new ForceFieldCommand( m_molecule, forceField, constraints, forceFieldID, nSteps, algorithm, convergence, 0 ); return NULL; } void ConformerSearchDialog::accept() { // qDebug() << "ConformerSearchDialog::accept()"; m_numConformers = ui.numSpin->value(); static_cast(m_forceFieldCommand)->setTask(m_method); static_cast(m_forceFieldCommand) ->setNumConformers(m_numConformers); static_cast(m_forceFieldCommand) ->setNumChildren(ui.childrenSpinBox->value()); static_cast(m_forceFieldCommand) ->setMutability(ui.mutabilitySpinBox->value()); static_cast(m_forceFieldCommand) ->setConvergence(ui.convergenceSpinBox->value()); static_cast(m_forceFieldCommand) ->setMethod(ui.scoringComboBox->currentIndex()); m_forceFieldCommand->redo(); hide(); } void ConformerSearchDialog::reject() { // qDebug() << "ConformerSearchDialog::reject()" << endl; hide(); } int ConformerSearchDialog::numConformers() { return m_numConformers; } int ConformerSearchDialog::method() { return m_method; } } avogadro-1.1.1/libavogadro/src/extensions/constraintsdialog.cpp0000644000175000001440000003165012250371054024243 0ustar marcususers/********************************************************************** ConstraintsDialog - Dialog for force field constraint settings Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "constraintsdialog.h" #include #include #include #include #include #include #include namespace Avogadro { ConstraintsDialog::ConstraintsDialog( QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { ui.setupUi(this); connect( ui.ConstraintsOK, SIGNAL( clicked() ), this, SLOT( acceptConstraints() )); connect( ui.ConstraintsAdd, SIGNAL( clicked() ), this, SLOT( addConstraint() )); connect( ui.ConstraintsDelete, SIGNAL( clicked() ), this, SLOT( deleteConstraint() )); connect( ui.ConstraintsDeleteAll, SIGNAL( clicked() ), this, SLOT( deleteAllConstraints() )); connect( ui.comboType, SIGNAL( currentIndexChanged(int) ), this, SLOT( comboTypeChanged(int) )); m_forceField = OpenBabel::OBForceField::FindForceField( "MMFF94" ); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); // make sure the table stretches across the dialog as it resizes QHeaderView *horizontal = ui.ConstraintsTableView->horizontalHeader(); horizontal->setResizeMode(QHeaderView::Stretch); QHeaderView *vertical = ui.ConstraintsTableView->verticalHeader(); vertical->setResizeMode(QHeaderView::Stretch); } void ConstraintsDialog::showEvent(QShowEvent *event) { Q_UNUSED(event); switch (ui.comboType->currentIndex()) { case 0: case 1: case 2: case 3: case 4: if (m_molecule->numAtoms() >= 1) { ui.editA->setMinimum(1); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(m_molecule->numAtoms()); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } else { ui.editA->setMinimum(0); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(0); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } break; case 5: if (m_molecule->numAtoms() >= 2) { ui.editA->setMinimum(1); ui.editB->setMinimum(1); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(m_molecule->numAtoms() - 1); ui.editB->setMaximum(m_molecule->numAtoms()); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editB->setValue(2); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(5.0); ui.editValue->setSingleStep(0.05); ui.editValue->setValue(1.5); } else { ui.editA->setMinimum(0); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(0); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } break; case 6: if (m_molecule->numAtoms() >= 3) { ui.editA->setMinimum(1); ui.editB->setMinimum(1); ui.editC->setMinimum(1); ui.editD->setMinimum(0); ui.editA->setMaximum(m_molecule->numAtoms() - 2); ui.editB->setMaximum(m_molecule->numAtoms() - 1); ui.editC->setMaximum(m_molecule->numAtoms()); ui.editD->setMaximum(0); ui.editB->setValue(2); ui.editC->setValue(3); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(180.0); ui.editValue->setSingleStep(1.0); ui.editValue->setValue(109.0); } else { ui.editA->setMinimum(0); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(0); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } break; case 7: if (m_molecule->numAtoms() >= 4) { ui.editA->setMinimum(1); ui.editB->setMinimum(1); ui.editC->setMinimum(1); ui.editD->setMinimum(1); ui.editA->setMaximum(m_molecule->numAtoms() - 3); ui.editB->setMaximum(m_molecule->numAtoms() - 2); ui.editC->setMaximum(m_molecule->numAtoms() - 1); ui.editD->setMaximum(m_molecule->numAtoms()); ui.editB->setValue(2); ui.editC->setValue(3); ui.editD->setValue(4); ui.editValue->setMinimum(-180.0); ui.editValue->setMaximum(180.0); ui.editValue->setSingleStep(10.0); ui.editValue->setValue(0.0); } else { ui.editA->setMinimum(0); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(0); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } break; } } ConstraintsDialog::~ConstraintsDialog() { } void ConstraintsDialog::setModel(ConstraintsModel *model) { m_constraints = model; ui.ConstraintsTableView->setModel(m_constraints); } void ConstraintsDialog::setMolecule(Molecule *molecule) { m_molecule = molecule; connect(m_molecule, SIGNAL( primitiveRemoved(Primitive *) ), m_constraints, SLOT( primitiveRemoved(Primitive *) )); } void ConstraintsDialog::comboTypeChanged(int index) { switch (index) { case 0: case 1: case 2: case 3: case 4: if (m_molecule->numAtoms() >= 1) { ui.editA->setMinimum(1); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(m_molecule->numAtoms()); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } else { ui.editA->setMinimum(0); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(0); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } break; case 5: if (m_molecule->numAtoms() >= 2) { ui.editA->setMinimum(1); ui.editB->setMinimum(1); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(m_molecule->numAtoms() - 1); ui.editB->setMaximum(m_molecule->numAtoms()); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editB->setValue(2); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(5.0); ui.editValue->setSingleStep(0.05); ui.editValue->setValue(1.5); } else { ui.editA->setMinimum(0); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(0); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } break; case 6: if (m_molecule->numAtoms() >= 3) { ui.editA->setMinimum(1); ui.editB->setMinimum(1); ui.editC->setMinimum(1); ui.editD->setMinimum(0); ui.editA->setMaximum(m_molecule->numAtoms() - 2); ui.editB->setMaximum(m_molecule->numAtoms() - 1); ui.editC->setMaximum(m_molecule->numAtoms()); ui.editD->setMaximum(0); ui.editB->setValue(2); ui.editC->setValue(3); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(180.0); ui.editValue->setSingleStep(10.0); ui.editValue->setValue(109.0); } else { ui.editA->setMinimum(0); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(0); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } break; case 7: if (m_molecule->numAtoms() >= 4) { ui.editA->setMinimum(1); ui.editB->setMinimum(1); ui.editC->setMinimum(1); ui.editD->setMinimum(1); ui.editA->setMaximum(m_molecule->numAtoms() - 3); ui.editB->setMaximum(m_molecule->numAtoms() - 2); ui.editC->setMaximum(m_molecule->numAtoms() - 1); ui.editD->setMaximum(m_molecule->numAtoms()); ui.editB->setValue(2); ui.editC->setValue(3); ui.editD->setValue(4); ui.editValue->setMinimum(-180.0); ui.editValue->setMaximum(180.0); ui.editValue->setSingleStep(10.0); ui.editValue->setValue(0.0); } else { ui.editA->setMinimum(0); ui.editB->setMinimum(0); ui.editC->setMinimum(0); ui.editD->setMinimum(0); ui.editA->setMaximum(0); ui.editB->setMaximum(0); ui.editC->setMaximum(0); ui.editD->setMaximum(0); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); } break; } } void ConstraintsDialog::acceptConstraints() { hide(); } void ConstraintsDialog::deleteConstraint() { m_constraints->deleteConstraint(ui.ConstraintsTableView->currentIndex().row()); m_forceField->SetConstraints(m_constraints->constraints()); } void ConstraintsDialog::deleteAllConstraints() { m_constraints->clear(); m_forceField->SetConstraints(m_constraints->constraints()); this->update(); } void ConstraintsDialog::addConstraint() { if (!m_molecule->numAtoms()) { QMessageBox::warning(static_cast(parent()), tr("Add constraint"), tr("Your molecule must contain at least one atom to add a constraint")); return; } switch (ui.comboType->currentIndex()) { case 0: // Ignore m_constraints->addIgnore(ui.editA->value()); break; case 1: // Atom m_constraints->addAtomConstraint(ui.editA->value()); break; case 2: // Atom X m_constraints->addAtomXConstraint(ui.editA->value()); break; case 3: // Atom Y m_constraints->addAtomYConstraint(ui.editA->value()); break; case 4: // Atom Z m_constraints->addAtomZConstraint(ui.editA->value()); break; case 5: // Distance if (m_molecule->numAtoms() < 2) { QMessageBox::warning(static_cast(parent()), tr("Add constraint"), tr("Your molecule must contain at least two atoms to add a bond constraint")); break; } m_constraints->addDistanceConstraint(ui.editA->value(), ui.editB->value(), ui.editValue->value()); break; case 6: // Angle if (m_molecule->numAtoms() < 3) { QMessageBox::warning(static_cast(parent()), tr("Add constraint"), tr("Your molecule must contain at least three atoms to add an angle constraint")); break; } m_constraints->addAngleConstraint(ui.editA->value(), ui.editB->value(), ui.editC->value(), ui.editValue->value()); break; case 7: // Torsion if (m_molecule->numAtoms() < 4) { QMessageBox::warning(static_cast(parent()), tr("Add constraint"), tr("Your molecule must contain at least four atoms to add a torsion constraint")); break; } m_constraints->addTorsionConstraint(ui.editA->value(), ui.editB->value(), ui.editC->value(), ui.editD->value(), ui.editValue->value()); break; } m_forceField->SetConstraints(m_constraints->constraints()); } } avogadro-1.1.1/libavogadro/src/extensions/h2methylextension.cpp0000644000175000001440000000712612250371054024206 0ustar marcususers/********************************************************************** H2Methyl - Hydrogen to Methyl plugin for Avogadro Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006-2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "h2methylextension.h" #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { H2MethylExtension::H2MethylExtension(QObject *parent) : Extension(parent), m_molecule(0) { QAction *action = new QAction(this); action->setText(tr("Change H to Methyl")); m_actions.append(action); action = new QAction( this ); action->setSeparator(true); m_actions.append( action ); } H2MethylExtension::~H2MethylExtension() { } QList H2MethylExtension::actions() const { return m_actions; } QString H2MethylExtension::menuPath(QAction *) const { return tr("&Build"); } void H2MethylExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* H2MethylExtension::performAction( QAction *, GLWidget *widget ) { QUndoCommand *undo = 0; undo = new H2MethylCommand(widget->molecule(), widget); return undo; } H2MethylCommand::H2MethylCommand(Molecule *molecule, GLWidget *widget): m_molecule(molecule), m_moleculeCopy(new Molecule(*molecule)), m_SelectedList(widget->selectedPrimitives()) { // save the selection from the current view widget // (i.e., only modify a few hydrogens) // m_SelectedList = widget->selectedPrimitives; setText(QObject::tr("H to Methyl")); } H2MethylCommand::~H2MethylCommand() { delete m_moleculeCopy; } void H2MethylCommand::redo() { if (m_SelectedList.size() == 0) { QList hydrogenList; foreach(Atom *a, m_molecule->atoms()) { if (a->isHydrogen()) { hydrogenList.append(a); } } foreach(Atom *a, hydrogenList) { a->setAtomicNumber(6); m_molecule->addHydrogens(a); } } else { // user selected some atoms, only operate on those foreach(Primitive *a, m_SelectedList.subList(Primitive::AtomType)) { Atom *atom = static_cast(a); atom->setAtomicNumber(6); m_molecule->addHydrogens(atom); } } // end adding to selected atoms m_molecule->update(); } void H2MethylCommand::undo() { *m_molecule = *m_moleculeCopy; m_molecule->update(); } bool H2MethylCommand::mergeWith ( const QUndoCommand * ) { // we received another call of the same action return true; } int H2MethylCommand::id() const { return 4706531; } } // end namespace Avogadro Q_EXPORT_PLUGIN2(h2methylextension, Avogadro::H2MethylExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/hydrogensextension.cpp0000644000175000001440000001223612250371054024452 0ustar marcususers/********************************************************************** Hydrogens - Hydrogens Plugin for Avogadro Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "hydrogensextension.h" #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { HydrogensExtension::HydrogensExtension(QObject *parent) : Extension(parent), m_molecule(0) { QAction *action = new QAction(this); action->setText(tr("Add Hydrogens")); m_actions.append(action); action = new QAction(this); action->setText(tr("Add Hydrogens for pH...")); m_actions.append(action); action = new QAction(this); action->setText(tr("Remove Hydrogens")); m_actions.append(action); action = new QAction( this ); action->setSeparator(true); m_actions.append( action ); } HydrogensExtension::~HydrogensExtension() { } QList HydrogensExtension::actions() const { return m_actions; } QString HydrogensExtension::menuPath(QAction *) const { return tr("&Build"); } void HydrogensExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* HydrogensExtension::performAction(QAction *action, GLWidget *widget) { m_molecule = widget->molecule(); QUndoCommand *undo = 0; int i = m_actions.indexOf(action); if( 0 <= i && i <= 2) { if(i == 1) { bool ok; double pH = QInputDialog::getDouble(0, tr("Add Hydrogens for pH"), tr("pH"), 7.4, 0.0, 14.0, 1, &ok); if (!ok) return undo; undo = new HydrogensCommand(m_molecule, (enum HydrogensCommand::Action) i, widget, pH); } else { undo = new HydrogensCommand(m_molecule, (enum HydrogensCommand::Action) i, widget); } } return undo; } HydrogensCommand::HydrogensCommand(Molecule *molecule, enum Action action, GLWidget *widget, double pH): m_molecule(molecule), m_moleculeCopy(new Molecule(*molecule)), m_SelectedList(widget->selectedPrimitives()), m_action(action), m_pH(pH) { // save the selection from the current view widget // (i.e., only modify a few hydrogens) // m_SelectedList = widget->selectedPrimitives; switch(action) { case AddHydrogens: setText(QObject::tr("Add Hydrogens")); break; case AddHydrogensPH: setText(QObject::tr("Add Hydrogens for pH")); break; case RemoveHydrogens: setText(QObject::tr("Remove Hydrogens")); break; } } HydrogensCommand::~HydrogensCommand() { delete m_moleculeCopy; } void HydrogensCommand::redo() { if (m_SelectedList.size() == 0) { switch(m_action) { case AddHydrogens: m_molecule->addHydrogens(); break; case AddHydrogensPH: { OBMol obmol = m_molecule->OBMol(); obmol.UnsetFlag(OB_PH_CORRECTED_MOL); FOR_ATOMS_OF_MOL (a, obmol) a->SetFormalCharge(0.0); obmol.SetAutomaticFormalCharge(true); obmol.AddHydrogens(false, true, m_pH); m_molecule->setOBMol(&obmol); break; } case RemoveHydrogens: m_molecule->removeHydrogens(); break; } } else { // user selected some atoms, only operate on those foreach(unsigned long id, m_SelectedList.subList(Primitive::AtomType)) { Atom *atom = m_molecule->atomById(id); if(atom) { switch(m_action) { case AddHydrogens: m_molecule->addHydrogens(atom); break; case RemoveHydrogens: m_molecule->removeHydrogens(atom); break; default: break; } } } } // end adding to selected atoms m_molecule->update(); } void HydrogensCommand::undo() { *m_molecule = *m_moleculeCopy; m_molecule->update(); } bool HydrogensCommand::mergeWith ( const QUndoCommand * ) { // we received another call of the same action return true; } int HydrogensCommand::id() const { return 4709537 + (int) m_action; } } // end namespace Avogadro Q_EXPORT_PLUGIN2(hydrogensextension, Avogadro::HydrogensExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/shaderextension.h0000644000175000001440000000711612250371054023364 0ustar marcususers/********************************************************************** ShaderExtension - Extension for loading and using OpenGL 2.0 GLSL shaders Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SHADEREXTENSION_H #define SHADEREXTENSION_H #include #include "ui_shaderdialog.h" namespace Avogadro { class GLWidget; class Shader; class ShaderDialog; class ShaderExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("GLSL Shaders", tr("GLSL Shaders"), tr("Load and use OpenGL 2.0 GLSL shaders")) public: ShaderExtension(QObject* parent = 0); virtual ~ShaderExtension(); /** * @return a list of actions which this widget can perform */ virtual QList actions() const; /** * @return the menu path for the specified action */ virtual QString menuPath(QAction* action) const; /** * @param action The action that triggered the calls. * @param widget The currently active GLWidget (feedback to the user). * @return An undo command for this action. */ virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings); public Q_SLOTS: /** * Slot to change the current molecule. */ void setMolecule(Molecule *molecule); private Q_SLOTS: /** * Slot to assign a shader program to an engine */ void setShader(); /** * Slot to load up a new vertex shader. */ void loadShader(); /** * Slot to choose the vertex file. */ void loadVertFileDialog(); /** * Slot to choose the vertex file. */ void loadFragFileDialog(); /** * Slot to choose the vertex file. */ void loadParamsFileDialog(); private: GLWidget *m_glwidget; QList m_actions; Molecule *m_molecule; QList m_shaders; ShaderDialog *m_shaderDialog; void populateEngineCombo(); void populateShaderCombo(); void loadShaders(); }; class ShaderDialog : public QDialog, public Ui::ShaderDialog { public: ShaderDialog(QWidget *parent=0) : QDialog(parent) { setupUi(this); } }; class ShaderExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(ShaderExtension) }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/supercelldialog.ui0000644000175000001440000000735412250371054023531 0ustar marcususers SuperCellDialog 0 0 324 187 Super Cell Parameters Super Cell Options A repeat: 1 B repeat: 1 C repeat: 1 Qt::Horizontal 40 20 Generate Cell 0 0 Qt::Horizontal QDialogButtonBox::Close Qt::Vertical 20 0 buttonBox rejected() SuperCellDialog reject() 162 191 162 104 avogadro-1.1.1/libavogadro/src/extensions/insertdnaextension.cpp0000644000175000001440000001625412250371054024443 0ustar marcususers/********************************************************************** InsertDNA - Insert oligo-nucleic acid sequences Copyright (C) 2012 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "insertdnaextension.h" #include "insertcommand.h" #include "ui_insertdnadialog.h" #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { class InsertDNADialog : public QDialog, public Ui::InsertDNADialog { public: InsertDNADialog(QWidget *parent=0) : QDialog(parent) { setWindowFlags(Qt::Dialog | Qt::Tool); setupUi(this); } }; InsertDNAExtension::InsertDNAExtension(QObject *parent) : Extension(parent), m_molecule(0), m_dialog(0) { QAction *action = new QAction(this); action->setText(tr("DNA/RNA...")); m_actions.append(action); m_widget = qobject_cast(parent); } InsertDNAExtension::~InsertDNAExtension() { } QList InsertDNAExtension::actions() const { return m_actions; } QString InsertDNAExtension::menuPath(QAction *) const { return tr("&Build") + '>' + tr("&Insert"); } void InsertDNAExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* InsertDNAExtension::performAction(QAction *, GLWidget *widget) { if (m_molecule == NULL) return NULL; // nothing we can do m_widget = widget; // save for delayed response if (m_dialog == NULL) { constructDialog(); } m_dialog->show(); return NULL; // delayed action on user clicking the Insert button } void InsertDNAExtension::performInsert() { if (!m_dialog) return; // nothing we can do QString sequence = m_dialog->sequenceText->toPlainText().toLower(); bool dna = (m_dialog->typeComboBox->currentIndex() == 0); if (sequence.isEmpty()) return; // also nothing to do // Add DNA/RNA tag for FASTA sequence = '>' + m_dialog->typeComboBox->currentText() + '\n' + sequence; OBConversion conv; if (!conv.SetInFormat("fasta")) return; // need the format to do structure generation for us // if DNA, check if the user wants single-strands if (dna && m_dialog->singleStrandRadio->isChecked()) conv.AddOption("1", OBConversion::INOPTIONS); // Add the number of turns QString turns = QString("%1").arg(m_dialog->bpTurnsSpin->value()); conv.AddOption("t", OBConversion::INOPTIONS, turns.toAscii().data()); OBMol obfragment; if (!conv.ReadString(&obfragment, sequence.toStdString()) ) return; // failed conversion Molecule fragment; fragment.setOBMol(&obfragment); emit performCommand(new InsertFragmentCommand(m_molecule, fragment, m_widget, tr("Insert DNA"))); } void InsertDNAExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); if (!m_dialog) return; // nothing to save settings.setValue("nucleicType", m_dialog->typeComboBox->currentIndex()); settings.setValue("basePairType", m_dialog->bpCombo->currentIndex()); settings.setValue("basePairPerTurn", m_dialog->bpTurnsSpin->value()); settings.setValue("singleStrand", m_dialog->singleStrandRadio->isChecked()); } void InsertDNAExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); if (!m_dialog) constructDialog(); m_dialog->typeComboBox->setCurrentIndex(settings.value("nucleicType", 0).toInt()); m_dialog->bpCombo->setCurrentIndex(settings.value("basePairType", 1).toInt()); m_dialog->bpTurnsSpin->setValue(settings.value("basePairPerTurn", 10.5).toDouble()); m_dialog->singleStrandRadio->setChecked(settings.value("singleStrand", 0).toBool()); } void InsertDNAExtension::constructDialog() { if (m_dialog == NULL) { m_dialog = new InsertDNADialog(m_widget); QButtonGroup* numStrands = new QButtonGroup(m_dialog); numStrands->addButton(m_dialog->singleStrandRadio, 0); numStrands->addButton(m_dialog->doubleStrandRadio, 1); numStrands->setExclusive(true); connect(m_dialog->insertButton, SIGNAL(clicked()), this, SLOT(performInsert())); connect(m_dialog->bpCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateBPTurns(int))); connect(m_dialog->typeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(changeNucleicType(int))); // Set the nucleic buttons to update the sequence foreach(const QToolButton *child, m_dialog->findChildren()) { connect(child, SIGNAL(clicked()), this, SLOT(updateText())); } connect(m_dialog, SIGNAL(destroyed()), this, SLOT(dialogDestroyed())); } m_dialog->sequenceText->setPlainText(QString()); } void InsertDNAExtension::updateText() { QToolButton *button = qobject_cast(sender()); if (button) { QString sequenceText = m_dialog->sequenceText->toPlainText(); sequenceText += button->text(); m_dialog->sequenceText->setPlainText(sequenceText); } } void InsertDNAExtension::updateBPTurns(int type) { switch(type) { case 0: // A-DNA m_dialog->bpTurnsSpin->setValue(11.0); break; case 1: // B-DNA m_dialog->bpTurnsSpin->setValue(10.5); break; case 2: // Z-DNA m_dialog->bpTurnsSpin->setValue(12.0); break; default: // anything the user wants break; } } void InsertDNAExtension::changeNucleicType(int type) { if (type == 1) { // RNA m_dialog->bpCombo->setCurrentIndex(3); // other m_dialog->bpTurnsSpin->setValue(11.0); // standard RNA m_dialog->singleStrandRadio->setChecked(true); m_dialog->singleStrandRadio->setEnabled(false); m_dialog->doubleStrandRadio->setEnabled(false); m_dialog->toolButton_TU->setText(tr("U", "uracil")); m_dialog->toolButton_TU->setToolTip(tr("Uracil")); return; } // DNA m_dialog->singleStrandRadio->setEnabled(true); m_dialog->doubleStrandRadio->setEnabled(true); m_dialog->toolButton_TU->setText(tr("T", "thymine")); m_dialog->toolButton_TU->setToolTip(tr("Thymine")); } void InsertDNAExtension::dialogDestroyed() { m_dialog = 0; } } // end namespace Avogadro Q_EXPORT_PLUGIN2(insertdnaextension, Avogadro::InsertDNAExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/insertfragmentextension.h0000644000175000001440000000470212250371054025144 0ustar marcususers/********************************************************************** InsertFragment - Insert molecular fragments or SMILES Copyright (C) 2009 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef INSERTFRAGMENTEXTENSION_H #define INSERTFRAGMENTEXTENSION_H #include #include "insertfragmentdialog.h" namespace Avogadro { class Primitive; class InsertFragmentExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("InsertFragment", tr("Insert Fragment"), tr("Insert molecular fragments for building larger molecules")) public: //! Constructor InsertFragmentExtension(QObject *parent=0); //! Destructor ~InsertFragmentExtension(); //! Perform Action QList actions() const; QUndoCommand* performAction(QAction *action, GLWidget *widget); QString menuPath(QAction *action) const; void setMolecule(Molecule *molecule); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); QList findSelectedForInsert(QList selectedAtomList) const; public Q_SLOTS: void insertCrystal(); void insertFragment(); // With the "grow selected atoms," feature, we need a delay timer void resetTimer(); private: QList m_actions; GLWidget* m_widget; InsertFragmentDialog *m_fragmentDialog; InsertFragmentDialog *m_crystalDialog; QString m_smilesString; Molecule *m_molecule; bool m_justFinished; }; class InsertFragmentExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(InsertFragmentExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/povraydialog.ui0000644000175000001440000001533512250371054023051 0ustar marcususers POVRayDialog 0 0 357 285 0 0 POV-Ray Export Select... Qt::Horizontal 40 20 povray Qt::Vertical QSizePolicy::MinimumExpanding 20 0 Qt::Horizontal 40 20 Render Close Filename: dimX Resolution: dimX Use full scene antialiasing Antialias true Set the background color to be transparent Alpha transparency true Command: dimX Render the molecule directly using command line POV-Ray Render using POV-Ray true Keep the POV-Ray source after rendering has completed Keep POV-Ray source after rendering true Path: dimX label_4 label antialias transparency label_5 renderDirect keepSource label_6 fileName selectFileName dimX dimY antialias transparency keepSource renderDirect povrayPath command render close close clicked() POVRayDialog close() 369 192 206 105 avogadro-1.1.1/libavogadro/src/extensions/selectextension.h0000644000175000001440000000474412250371054023401 0ustar marcususers/********************************************************************** Selection - Various selection options for Avogadro Copyright (C) 2006-2007 by Donald Ephraim Curtis Copyright (C) 2006-2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef SELECTEXTENSION_H #define SELECTEXTENSION_H #include #include #include #include #include #include #include #include namespace Avogadro { class SelectExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Selections", tr("Selections"), tr("Select atoms, bonds, residues...")) public: //! Constructor SelectExtension(QObject *parent=0); //! Deconstructor virtual ~SelectExtension(); //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual QString menuPath(QAction *action) const; virtual void setMolecule(Molecule *molecule); //@} public Q_SLOTS: void selectElement(int element); private: QList m_actions; Molecule *m_molecule; GLWidget *m_widget; PeriodicTableView *m_periodicTable; void invertSelection(GLWidget *widget); void selectSMARTS(GLWidget *widget); void selectResidue(GLWidget *widget); void selectSolvent(GLWidget *widget); void addNamedSelection(GLWidget *widget); void namedSelections(GLWidget *widget); }; class SelectExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(SelectExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/insertdnadialog.ui0000644000175000001440000001601712250371054023516 0ustar marcususers InsertDNADialog 0 0 365 382 Insert Nucleic Acids DNA/RNA Builder DNA RNA Nucleic Acids: Adenine A Cytosine C Guanine G Thymine T Qt::Horizontal 40 20 Sequence: Qt::StrongFocus the number of base pairs per helix turn 1 A B Z Other the number of base pairs per helix turn 1 0.000000000000000 15.000000000000000 10.500000000000000 Bases Per Turn: Strands: Single Double true Qt::Horizontal 40 20 Insert true Qt::Horizontal 40 20 Qt::Vertical 20 0 avogadro-1.1.1/libavogadro/src/extensions/shaders/0000755000175000001440000000000012250371054021434 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/shaders/clip.frag0000644000175000001440000000101612250371054023222 0ustar marcususers// Taken from Molekel trunk 3 December 2008 uniform float xmin; uniform float xmax; uniform float ymin; uniform float ymax; uniform float zmin; uniform float zmax; varying vec4 color; varying vec3 normal; varying vec4 pos; vec3 lightDir = vec3( 0., 0., 1. ); void main() { if( pos.x < xmin || pos.x > xmax || pos.y < ymin || pos.y > ymax || pos.z < zmin || pos.z > zmax ) discard; const float kd = abs( dot( normalize( lightDir ), normal ) ); gl_FragColor = vec4( color.rgb * kd, color.a ); } avogadro-1.1.1/libavogadro/src/extensions/shaders/x-ray.frag0000644000175000001440000000111112250371054023327 0ustar marcususers// X-ray shader // Opacity is proportional to angle between view vector and surface normal. // Fragment whose dNormal is less than a specified threshold are discarded; i.e. // flat areas facing the viewer are completely transparent varying vec3 ViewDirection; varying vec3 Normal; uniform float minOpacity; uniform float maxOpacity; uniform vec3 color; uniform float da; void main(void) { float opacity = 1.0 - abs( dot( ViewDirection, Normal ) ); opacity = clamp( opacity, minOpacity, maxOpacity ); if( opacity < da ) discard; gl_FragColor = vec4( color, opacity ); } avogadro-1.1.1/libavogadro/src/extensions/shaders/phong.vert0000644000175000001440000000152412250371054023453 0ustar marcususers// wwlk // // Trivial Vertex shader to setup per fragment lighting // vec4 ULLight = vec4 ( 0.435028 , 0.602347 , 0.669274 , 0.0 ); vec4 LRLight = vec4 ( 0.894427 , 0.0 , 0.447214 , 0.0 ); vec4 RimLight = vec4( 0.94868, 0.0, 0.316228, 1.0 ); vec4 DifColor = vec4( 0.35, 0.35, 0.5, 1.0 ); vec4 SpecColor = vec4( 0.4, 0.4, 0.2, 1.0 ); vec4 ULColor = vec4( 0.5, 0.3875, 0.75, 1.0 ); vec4 LRColor = vec4( 0.75, 0.5, 0.5, 1.0 ); void main(void) { vec3 eyeNormal; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; eyeNormal = gl_NormalMatrix * gl_Normal; gl_TexCoord[0] = vec4( eyeNormal, 0.0 ); gl_TexCoord[1] = ULLight; gl_TexCoord[2] = LRLight; gl_TexCoord[3] = RimLight; gl_TexCoord[4] = DifColor; gl_TexCoord[5] = SpecColor; gl_TexCoord[6] = ULColor; gl_TexCoord[7] = LRColor; }avogadro-1.1.1/libavogadro/src/extensions/shaders/x-ray.vert0000644000175000001440000000077612250371054023410 0ustar marcususers// X-ray shader // Set eye position , normal and transformed vertex position varying vec3 ViewDirection; varying vec3 Normal; uniform vec3 eyePosition; void main( void ) { // World coordinates. vec4 vertexPosition = gl_ModelViewMatrix * gl_Vertex; // View Direction. ViewDirection = normalize( eyePosition - vertexPosition.xyz ); // Vertex Normal. Normal = gl_NormalMatrix * gl_Normal; // Assign transformed vertex coordinates to GLSL variable. gl_Position = ftransform(); }avogadro-1.1.1/libavogadro/src/extensions/shaders/gooch.frag0000644000175000001440000000157212250371054023401 0ustar marcususers// // Fragment shader for Gooch shading // // Author: Randi Rost // // Copyright (c) 2002-2005 3Dlabs Inc. Ltd. // // See 3Dlabs-License.txt for license information // uniform vec3 SurfaceColor; // (0.75, 0.75, 0.75) uniform vec3 WarmColor; // (0.6, 0.6, 0.0) uniform vec3 CoolColor; // (0.0, 0.0, 0.6) uniform float DiffuseWarm; // 0.45 uniform float DiffuseCool; // 0.45 varying float NdotL; varying vec3 ReflectVec; varying vec3 ViewVec; void main() { vec3 kcool = min(CoolColor + DiffuseCool * SurfaceColor, 1.0); vec3 kwarm = min(WarmColor + DiffuseWarm * SurfaceColor, 1.0); vec3 kfinal = mix(kcool, kwarm, NdotL); vec3 nreflect = normalize(ReflectVec); vec3 nview = normalize(ViewVec); float spec = max(dot(nreflect, nview), 0.0); spec = pow(spec, 32.0); gl_FragColor = vec4(min(kfinal + spec, 1.0), 1.0); }avogadro-1.1.1/libavogadro/src/extensions/shaders/clip.vert0000644000175000001440000000053412250371054023267 0ustar marcususers// Taken from Molekel trunk 3 December 2008 varying vec4 pos; varying vec3 normal; varying vec4 color; uniform float factor; void main() { pos = gl_Vertex; pos.xyz /= gl_Vertex.w; pos.xyz *= factor; normal = normalize( gl_NormalMatrix * gl_Normal ); color = gl_Color; gl_Position = ftransform(); } avogadro-1.1.1/libavogadro/src/extensions/shaders/gooch.vert0000644000175000001440000000124712250371054023441 0ustar marcususers// // Vertex shader for Gooch shading // // Author: Randi Rost // // Copyright (c) 2002-2005 3Dlabs Inc. Ltd. // // See 3Dlabs-License.txt for license information // uniform vec3 LightPosition; // (0.0, 10.0, 4.0) varying float NdotL; varying vec3 ReflectVec; varying vec3 ViewVec; void main() { vec3 ecPos = vec3(gl_ModelViewMatrix * gl_Vertex); vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal); vec3 lightVec = normalize(LightPosition - ecPos); ReflectVec = normalize(reflect(-lightVec, tnorm)); ViewVec = normalize(-ecPos); NdotL = (dot(lightVec, tnorm) + 1.0) * 0.5; gl_Position = ftransform(); }avogadro-1.1.1/libavogadro/src/extensions/shaders/per_pixel2.frag0000644000175000001440000000120612250371054024345 0ustar marcususersvarying vec3 Normal; varying vec3 Light; varying vec3 HalfVector; // max(abs( dot(n, Light) ),0.0) --> abs( dot(n, Light) ) to fix an issue with OpenMOIV void main(void) { vec3 n = normalize(Normal); vec4 Diffuse = ( gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse ) * abs( dot(n, Light) ); vec4 Ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; Ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; vec4 Specular = ( gl_FrontMaterial.specular * gl_LightSource[0].specular ) * pow(abs(dot(n,HalfVector)), gl_FrontMaterial.shininess ); gl_FragColor = Ambient + Diffuse + Specular; }avogadro-1.1.1/libavogadro/src/extensions/shaders/x-ray.params0000644000175000001440000000016312250371054023701 0ustar marcususersvec3 color 0.482353 0.956863 0.917647 float da 0 vec3 eyePosition 0 0 0 float maxOpacity 1 float minOpacity 0 avogadro-1.1.1/libavogadro/src/extensions/shaders/phong.params0000644000175000001440000000034012250371054023751 0ustar marcususersvec3 lightDirection0 -1 0 0.2 vec3 lightDirection1 0 1 0.2 vec3 lightDirection2 0.3 0.4 0.9 vec3 lightDirection3 0 -1 0.2 vec4 lightscale 0.5 0.3 0.3 0.1 vec4 material 0.1 1 1 34 float opacity 1 bool orthographic 0 avogadro-1.1.1/libavogadro/src/extensions/shaders/phong-use-diffuse.frag0000644000175000001440000000465512250371054025637 0ustar marcususers// wwlk // // Do one per fragment diffuse light // + four specular lights // + four more specular lights // 8 specular lights per fragment! const float Shininess = 40.0; void main (void) { // // vec3 EyeNormal = vec3(gl_TexCoord0); // // vec3 ULLight = vec3(gl_TexCoord1); // vec3 LRLight = vec3(gl_TexCoord2); // vec3 RimLight = vec3(gl_TexCoord3); // // vec4 DifColor = vec4(gl_TexCoord4); // vec4 SpecColor = vec4(gl_TexCoord5); // vec4 ULColor = vec4(gl_TexCoord6); // vec4 LRColor = vec4(gl_TexCoord7); // vec3 NNormal; vec3 LNormal; vec4 MyColor; vec4 SpecularColor; float Intensity; // // Since the normal is getting interpolated, we // have to first restore it by normalizing it. // // NNormal = normalize( EyeNormal ); NNormal = normalize( vec3(gl_TexCoord[0]) ); // // Per fragment diffuse lighting // We are going to put the diffuse light about // the right spot.... ////// Intensity = dot ( ULLight, NNormal ); Intensity = abs( dot (vec3(gl_TexCoord[1]), NNormal ) ); Intensity = max ( Intensity, 0.0 ); ////// MyColor = vec4(Intensity) * DifColor; MyColor = vec4(Intensity) * gl_TexCoord[4]; // // We are going to point the normal to the // upper right front all of the time by taking // the abs. No need to normalize again. // NNormal = abs(NNormal); // // Now, start the specular calculations. // ////// Intensity = dot( NNormal, LRLight ); Intensity = abs( dot( NNormal, vec3( gl_TexCoord[1] ) ) ); Intensity = max( Intensity, 0.0 ); Intensity = pow( Intensity, Shininess ); ////// MyColor += vec4(Intensity) * ULColor; MyColor += vec4(Intensity) * gl_TexCoord[6]; ////// Intensity = dot( NNormal, LRLight ); Intensity = dot( NNormal, vec3( gl_TexCoord[2] ) ); Intensity = max( Intensity, 0.0 ); Intensity = pow( Intensity, Shininess ); ////// MyColor += vec4(Intensity) * ULColor; MyColor += vec4(Intensity) * gl_TexCoord[7]; // // Squash the Y of the normal vector // NNormal.y = 0.0; NNormal = normalize( NNormal ); ////// Intensity = dot( NNormal, RimLight ); Intensity = dot( NNormal, vec3( gl_TexCoord[3] ) ); ////// Intensity = max( Intensity, 0.0 ); Intensity = pow( Intensity, Shininess ); ////// MyColor += vec4(Intensity) * SpecColor; MyColor += vec4(Intensity) * gl_TexCoord[5]; ////// MyColor.a = Difcolor.a; MyColor.a = 1.0;//gl_TexCoord[4].a; gl_FragColor = MyColor; } avogadro-1.1.1/libavogadro/src/extensions/shaders/phong-use-diffuse.vert0000644000175000001440000000154312250371054025671 0ustar marcususers// wwlk // // Trivial Vertex shader to setup per fragment lighting // vec4 ULLight = vec4 ( 0.435028 , 0.602347 , 0.669274 , 0.0 ); vec4 LRLight = vec4 ( 0.894427 , 0.0 , 0.447214 , 0.0 ); vec4 RimLight = vec4( 0.94868, 0.0, 0.316228, 1.0 ); vec4 DifColor = vec4( 0.35, 0.35, 0.5, 1.0 ); vec4 SpecColor = vec4( 0.4, 0.4, 0.2, 1.0 ); vec4 ULColor = vec4( 0.5, 0.3875, 0.75, 1.0 ); vec4 LRColor = vec4( 0.75, 0.5, 0.5, 1.0 ); void main(void) { vec3 eyeNormal; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; eyeNormal = gl_NormalMatrix * gl_Normal; gl_TexCoord[0] = vec4( eyeNormal, 0.0 ); gl_TexCoord[1] = ULLight; gl_TexCoord[2] = LRLight; gl_TexCoord[3] = RimLight; gl_TexCoord[4] = gl_FrontMaterial.diffuse; gl_TexCoord[5] = SpecColor; gl_TexCoord[6] = ULColor; gl_TexCoord[7] = LRColor; } avogadro-1.1.1/libavogadro/src/extensions/shaders/light.frag0000644000175000001440000000134612250371054023410 0ustar marcususersvarying vec4 diffuse,ambient; varying vec3 normal,lightDir,halfVector; void main() { vec3 n,halfV; float NdotL,NdotHV; /* The ambient term will always be present */ vec4 color = ambient; /* a fragment shader can't write a varying variable, hence we need a new variable to store the normalized interpolated normal */ n = normalize(normal); /* compute the dot product between normal and ldir */ NdotL = max(dot(n,lightDir),0.0); if (NdotL > 0.0) { color += diffuse * NdotL; halfV = normalize(halfVector); NdotHV = max(dot(n,halfV),0.0); color += gl_FrontMaterial.specular * gl_LightSource[0].specular * pow(NdotHV, gl_FrontMaterial.shininess); } gl_FragColor = color; }avogadro-1.1.1/libavogadro/src/extensions/shaders/plasma.frag0000644000175000001440000000306312250371054023554 0ustar marcususers// // Simple fragment shader for wood // // Author: John Kessenich // // Copyright (c) 2002-2004 3Dlabs Inc. Ltd. // // See 3Dlabs-License.txt for license information // uniform float GrainSizeRecip; uniform vec3 DarkColor; uniform vec3 spread; varying float lightIntensity; varying vec3 Position; void main (void) { // // cheap noise // vec3 location = Position; vec3 floorvec = vec3(floor(10.0 * Position.x), 0.0, floor(10.0 * Position.z)); vec3 noise = Position * 10.0 - floorvec - 0.5; noise *= noise; location += noise * 0.12; // // distance from axis // float dist = location.x * location.x + location.z * location.z; float grain = dist * GrainSizeRecip; // // grain effects as function of distance // float brightness = fract(grain); if (brightness > 0.5) brightness = (1.0 - brightness); vec3 color = DarkColor + brightness * spread; brightness = fract(grain * 7.0); if (brightness > 0.5) brightness = 1.0 - brightness; color -= brightness * spread; // // also as a function of lines parallel to the axis // brightness = fract(grain * 47.0) * 0.60; float line = fract(Position.z + Position.x); float snap = floor(line * 20.0) * (1.0/20.0); if (line < snap + 0.006) color -= brightness * spread; // // apply lighting effects from vertex processor // color = clamp(color * lightIntensity, 0.0, 1.0); gl_FragColor = vec4(color, 1.0); } avogadro-1.1.1/libavogadro/src/extensions/shaders/x-ray-cryos.frag0000644000175000001440000000114012250371054024466 0ustar marcususers// X-ray shader // Opacity is proportional to angle between view vector and surface normal. // Fragment whose dNormal is less than a specified threshold are discarded; i.e. // flat areas facing the viewer are completely transparent varying vec3 ViewDirection; varying vec3 Normal; uniform float minOpacity; uniform float maxOpacity; uniform float da; void main(void) { float opacity = 1.0 - abs( dot( ViewDirection, Normal ) ); opacity = clamp( opacity, minOpacity, maxOpacity ); if( opacity < da ) discard; vec3 myColor = gl_FrontMaterial.ambient; gl_FragColor = vec4(myColor, opacity); } avogadro-1.1.1/libavogadro/src/extensions/shaders/phong.frag0000644000175000001440000000463012250371054023413 0ustar marcususers// wwlk // // Do one per fragment diffuse light // + four specular lights // + four more specular lights // 8 specular lights per fragment! const float Shininess = 40.0; void main (void) { // // vec3 EyeNormal = vec3(gl_TexCoord0); // // vec3 ULLight = vec3(gl_TexCoord1); // vec3 LRLight = vec3(gl_TexCoord2); // vec3 RimLight = vec3(gl_TexCoord3); // // vec4 DifColor = vec4(gl_TexCoord4); // vec4 SpecColor = vec4(gl_TexCoord5); // vec4 ULColor = vec4(gl_TexCoord6); // vec4 LRColor = vec4(gl_TexCoord7); // vec3 NNormal; vec3 LNormal; vec4 MyColor; vec4 SpecularColor; float Intensity; // // Since the normal is getting interpolated, we // have to first restore it by normalizing it. // // NNormal = normalize( EyeNormal ); NNormal = normalize( vec3(gl_TexCoord[0]) ); // // Per fragment diffuse lighting // We are going to put the diffuse light about // the right spot.... ////// Intensity = dot ( ULLight, NNormal ); Intensity = dot (vec3(gl_TexCoord[1]), NNormal ); Intensity = max ( Intensity, 0.0 ); ////// MyColor = vec4(Intensity) * DifColor; MyColor = vec4(Intensity) * gl_TexCoord[4]; // // We are going to point the normal to the // upper right front all of the time by taking // the abs. No need to normalize again. // NNormal = abs(NNormal); // // Now, start the specular calculations. // ////// Intensity = dot( NNormal, LRLight ); Intensity = dot( NNormal, vec3( gl_TexCoord[1] ) ); Intensity = max( Intensity, 0.0 ); Intensity = pow( Intensity, Shininess ); ////// MyColor += vec4(Intensity) * ULColor; MyColor += vec4(Intensity) * gl_TexCoord[6]; ////// Intensity = dot( NNormal, LRLight ); Intensity = dot( NNormal, vec3( gl_TexCoord[2] ) ); Intensity = max( Intensity, 0.0 ); Intensity = pow( Intensity, Shininess ); ////// MyColor += vec4(Intensity) * ULColor; MyColor += vec4(Intensity) * gl_TexCoord[7]; // // Squash the Y of the normal vector // NNormal.y = 0.0; NNormal = normalize( NNormal ); ////// Intensity = dot( NNormal, RimLight ); Intensity = dot( NNormal, vec3( gl_TexCoord[3] ) ); ////// Intensity = max( Intensity, 0.0 ); Intensity = pow( Intensity, Shininess ); ////// MyColor += vec4(Intensity) * SpecColor; MyColor += vec4(Intensity) * gl_TexCoord[5]; ////// MyColor.a = Difcolor.a; MyColor.a = gl_TexCoord[4].a; gl_FragColor = MyColor; }avogadro-1.1.1/libavogadro/src/extensions/shaders/light.vert0000644000175000001440000000164112250371054023447 0ustar marcususersvarying vec4 diffuse,ambient; varying vec3 normal,lightDir,halfVector; void main() { /* first transform the normal into eye space and normalize the result */ normal = normalize(gl_NormalMatrix * gl_Normal); /* now normalize the light's direction. Note that according to the OpenGL specification, the light is stored in eye space. Also since we're talking about a directional light, the position field is actually direction */ lightDir = normalize(vec3(gl_LightSource[0].position)); /* Normalize the halfVector to pass it to the fragment shader */ halfVector = normalize(gl_LightSource[0].halfVector.xyz); /* Compute the diffuse, ambient and globalAmbient terms */ diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse; ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; gl_Position = ftransform(); }avogadro-1.1.1/libavogadro/src/extensions/shaders/x-ray-cryos.params0000644000175000001440000000011412250371054025032 0ustar marcususersfloat da 0 vec3 eyePosition 0 0 0 float maxOpacity 1 float minOpacity 0 avogadro-1.1.1/libavogadro/src/extensions/shaders/marble.frag0000644000175000001440000000251012250371054023535 0ustar marcususers// wwlk // // Show me the normal uniform vec4 my01H2; // please load with (0.0,1.0,0.5,2.0) varying vec3 v_EyeNormal; varying vec4 v_EyePosition; uniform float time; uniform vec3 lightDirection; uniform vec3 blue; uniform vec3 white; uniform sampler3D tex1; uniform sampler2D tex2; void main (void) { vec3 NNormal; vec4 MyColor; vec4 tex, tx2; vec3 color; float turb; float illum; vec4 Intensity; float myHalf = 0.5; // // Since the EyeNormal is getting interpolated, we // have to first restore it by normalizing it. // NNormal = normalize( v_EyeNormal ); illum = clamp( dot(NNormal, lightDirection), 0.0, 1.0) + 0.2; // Fetch two samples from a texture with 4 noise octaves tex = texture3D( tex1, gl_TexCoord[0].stp); tx2 = texture3D( tex1, gl_TexCoord[0].stp*16.0+0.5); // Remamp noise from [0,1] to [-1,1] tex = tex *2.0 -1.0; tx2 = tx2 *2.0 -1.0; //accumulate turbulence turb = tex.r + myHalf*(tex.g + myHalf*(tex.b + myHalf*tex.a)); turb += 0.0625*(tx2.r + myHalf*(tx2.g+ myHalf*tx2.b)); //remap the turbulence value and use it to index a color spline stored as a texture turb = clamp( turb*2.0 , 0.0, 1.0); vec2 coord = vec2(turb); vec4 c = texture2D( tex2, coord); color = vec3(c) * illum; gl_FragColor = vec4( color, 1.0); }avogadro-1.1.1/libavogadro/src/extensions/shaders/per_pixel2.vert0000644000175000001440000000047412250371054024414 0ustar marcususersvarying vec3 Normal; varying vec3 Light; varying vec3 HalfVector; void main(void) { Normal = normalize(gl_NormalMatrix * gl_Normal); Light = normalize(gl_LightSource[0].position.xyz); HalfVector = normalize(gl_LightSource[0].halfVector.xyz); gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; }avogadro-1.1.1/libavogadro/src/extensions/shaders/per-pixel-lighting.vert0000644000175000001440000000047412250371054026053 0ustar marcususersvarying vec3 Normal; varying vec3 Light; varying vec3 HalfVector; void main(void) { Normal = normalize(gl_NormalMatrix * gl_Normal); Light = normalize(gl_LightSource[0].position.xyz); HalfVector = normalize(gl_LightSource[0].halfVector.xyz); gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; }avogadro-1.1.1/libavogadro/src/extensions/shaders/per-pixel-lighting.frag0000644000175000001440000000120612250371054026004 0ustar marcususersvarying vec3 Normal; varying vec3 Light; varying vec3 HalfVector; // max(abs( dot(n, Light) ),0.0) --> abs( dot(n, Light) ) to fix an issue with OpenMOIV void main(void) { vec3 n = normalize(Normal); vec4 Diffuse = ( gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse ) * abs( dot(n, Light) ); vec4 Ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient; Ambient += gl_LightModel.ambient * gl_FrontMaterial.ambient; vec4 Specular = ( gl_FrontMaterial.specular * gl_LightSource[0].specular ) * pow(abs(dot(n,HalfVector)), gl_FrontMaterial.shininess ); gl_FragColor = Ambient + Diffuse + Specular; }avogadro-1.1.1/libavogadro/src/extensions/shaders/marble.vert0000644000175000001440000000176112250371054023605 0ustar marcususers// // marble.vert // // Transform the object position and normal to provide to the fragment // shader for lighting. Also, scle the object space coords, to use as // texture coordinates into the volume. varying vec3 v_EyeNormal; varying vec4 v_EyePos; uniform vec4 my01H2; // please load with ( 0.0, 1.0, 0.5, 2.0) uniform vec4 myObjScale; // Object Scale Factor uniform float time; void main(void) { vec4 ObjNormal; vec4 ObjPos; vec3 EyeNormal; vec4 EyePos; ObjPos = gl_Vertex; // Must write gl_Position for rasterization to be defined.... // gl_Position = gl_ModelViewProjectionMatrix * ObjPos; // Transform to shading space (we are going to shade in eyespace) // // EyeNormal = gl_Normal* gl_NormalMatrix; v_EyeNormal = EyeNormal; EyePos = gl_ModelViewMatrix * ObjPos; v_EyePos = EyePos; // Pass through object normal and object position // ObjNormal = vec4(gl_Normal, my01H2.x); gl_TexCoord[0] = ObjPos* 0.0078125 + 0.5; }avogadro-1.1.1/libavogadro/src/extensions/shaders/x-ray-cryos.vert0000644000175000001440000000077612250371054024545 0ustar marcususers// X-ray shader // Set eye position , normal and transformed vertex position varying vec3 ViewDirection; varying vec3 Normal; uniform vec3 eyePosition; void main( void ) { // World coordinates. vec4 vertexPosition = gl_ModelViewMatrix * gl_Vertex; // View Direction. ViewDirection = normalize( eyePosition - vertexPosition.xyz ); // Vertex Normal. Normal = gl_NormalMatrix * gl_Normal; // Assign transformed vertex coordinates to GLSL variable. gl_Position = ftransform(); }avogadro-1.1.1/libavogadro/src/extensions/shaders/plasma.vert0000644000175000001440000000111712250371054023613 0ustar marcususers// // Simple vertex shader for wood // // Author: John Kessenich // // Copyright (c) 2002-2004 3Dlabs Inc. Ltd. // // See 3Dlabs-License.txt for license information // varying float lightIntensity; varying vec3 Position; uniform vec3 LightPosition; uniform float Scale; void main(void) { vec4 pos = gl_ModelViewMatrix * gl_Vertex; Position = vec3(gl_Vertex) * Scale; vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal); lightIntensity = max(dot(normalize(LightPosition - vec3(pos)), tnorm), 0.0) * 1.5; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } avogadro-1.1.1/libavogadro/src/extensions/propmodel.cpp0000644000175000001440000012070312250371054022513 0ustar marcususers/********************************************************************** propmodel.cpp - Models to hold properties Copyright (C) 2007 by Tim Vandermeersch Copyright (C) 2009 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "propmodel.h" // for recursively setting bond lengths, angles, etc. #include "../tools/skeletontree.h" #include #include #include #include #include #include #include namespace Avogadro { using std::numeric_limits; using std::vector; using std::pair; using OpenBabel::triple; using OpenBabel::OBMol; using OpenBabel::OBAngleData; using OpenBabel::OBTorsionData; using OpenBabel::OBTorsion; using OpenBabel::OBGenericDataType::AngleData; using OpenBabel::OBGenericDataType::TorsionData; using OpenBabel::OBAtom; QString groupIndexString (Atom *a) { unsigned int gi = a->groupIndex(); if (gi != 0) { return QString(OpenBabel::etab.GetSymbol(a->atomicNumber())) + QString("%L1").arg(gi); } else { return QString(OpenBabel::etab.GetSymbol(a->atomicNumber())); } } inline QString bondTypeString (Atom *a, Atom *b, int order) { Q_UNUSED(order) /*QString bond; if (order == 2) { bond = "="; } else if (order == 3) { bond = "\x2261"; //2261"; } else { bond = "-"; }*/ return QString(OpenBabel::etab.GetSymbol(a->atomicNumber())) + '-' + QString(OpenBabel::etab.GetSymbol(b->atomicNumber())); } inline QString angleTypeString (Atom *a, Atom *b, Atom *c) { return QString(OpenBabel::etab.GetSymbol(a->atomicNumber())) + QString(OpenBabel::etab.GetSymbol(b->atomicNumber())) + QString(OpenBabel::etab.GetSymbol(c->atomicNumber())); } inline QString angleTypeString (Atom *a, Atom *b, Atom *c, Atom *d) { return QString(OpenBabel::etab.GetSymbol(a->atomicNumber())) + QString(OpenBabel::etab.GetSymbol(b->atomicNumber())) + QString(OpenBabel::etab.GetSymbol(c->atomicNumber())) + QString(OpenBabel::etab.GetSymbol(d->atomicNumber())); } PropertiesModel::PropertiesModel(Type type, QObject *parent) : QAbstractTableModel(parent), m_type(type), m_rowCount(0), m_molecule(0), m_displayConformers((type == ConformerType)), m_validCache(false) { } int PropertiesModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); if (m_type == AtomType) { return m_molecule->numAtoms(); } else if (m_type == BondType) { return m_molecule->numBonds(); } /*else if (m_type == CartesianType) { return m_molecule->numAtoms(); }*/ else if (m_type == ConformerType) { return numConformers(); } else if (m_type == AngleType) { if (!m_validCache) updateCache(); return m_angleData.size(); } else if (m_type == TorsionType) { if (!m_validCache) updateCache(); return m_torsionData.size(); } return 0; } int PropertiesModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); switch (m_type) { case AtomType: return 5 + (numConformers()*3); // element, type, valence, formal charge, partial charge, [ x, y, z ] * numConformers case BondType: return 6 + numConformers() - 1; case AngleType: return 5 + numConformers() - 1; case TorsionType: return 6 + numConformers() - 1; /*case CartesianType: return 3;*/ case ConformerType: return 1; } return 0; } QVariant PropertiesModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); // handle text alignments if (role == Qt::TextAlignmentRole) { /*if (m_type == CartesianType) { return Qt::AlignRight + Qt::AlignVCenter; // XYZ coordinates } else*/ if (m_type == ConformerType) { return Qt::AlignRight + Qt::AlignVCenter; // energies } else if (m_type == AtomType) { if (index.column() == 3) return Qt::AlignRight + Qt::AlignVCenter; // partial charge else return Qt::AlignHCenter + Qt::AlignVCenter; } else if (m_type == BondType) { if (index.column() >= 5) return Qt::AlignRight + Qt::AlignVCenter; // bond length else return Qt::AlignHCenter + Qt::AlignVCenter; } else if (m_type == AngleType) { if (index.column() >= 4) return Qt::AlignRight + Qt::AlignVCenter; // angle else return Qt::AlignHCenter + Qt::AlignVCenter; } else if (m_type == TorsionType) { if (index.column() >= 5) return Qt::AlignRight + Qt::AlignVCenter; // dihedral angle else return Qt::AlignHCenter + Qt::AlignVCenter; } } if (role != Qt::UserRole && role != Qt::DisplayRole) return QVariant(); bool sortRole = (role == Qt::UserRole); // from the proxy model to handle floating-point if (m_type == AtomType) { if (static_cast(index.row()) >= m_molecule->numAtoms() || static_cast(index.column()) > 5 + (3*numConformers()) ) return QVariant(); if (!m_validCache) updateCache(); AtomColumn column=static_cast(index.column()); QString format("%L1"); // Return Data switch (column) { case AtomDataElement: return m_atomData.at(index.row()).at(0).toString(); case AtomDataType: return m_atomData.at(index.row()).at(1); case AtomDataValence: return m_atomData.at(index.row()).at(2); case AtomDataFormalCharge: return m_atomData.at(index.row()).at(3); case AtomDataPartialCharge: if (sortRole) return m_atomData.at(index.row()).at(4); else return format.arg(m_atomData.at(index.row()).at(4).toDouble(), 0, 'f', 3); default: // Remainder determines if x,y or z unsigned int remainder=(index.column()-5) % 3; switch (remainder) { // x-coordinate case 0: if (sortRole) return m_atomCoords.at( conformerFromIndex( index ) ).at(index.row()).x(); else return format.arg(m_atomCoords.at( conformerFromIndex( index ) ).at(index.row()).x(), 0, 'f', 5); // y-coordinate case 1: if (sortRole) return m_atomCoords.at( conformerFromIndex( index ) ).at(index.row()).y(); else return format.arg(m_atomCoords.at( conformerFromIndex( index ) ).at(index.row()).y(), 0, 'f', 5); // z-coordinate case 2: if (sortRole) return m_atomCoords.at( conformerFromIndex( index ) ).at(index.row()).z(); else return format.arg(m_atomCoords.at( conformerFromIndex( index ) ).at(index.row()).z(), 0, 'f', 5); default: std::cerr << "ERROR IN COORDS!\n"; return QVariant(); } // end coordinate switch } } else if (m_type == BondType) { if (static_cast(index.row()) >= m_molecule->numBonds() || static_cast(index.column()) > 5 + (3*numConformers()) ) return QVariant(); if (!m_validCache) updateCache(); BondColumn column=static_cast(index.column()); switch (column) { case BondDataType: return m_bondData.at(index.row()).at(0).toString(); case BondDataAtom1: return m_bondData.at(index.row()).at(1).toString(); case BondDataAtom2: return m_bondData.at(index.row()).at(2).toString(); case BondDataOrder: // unsigned int return m_bondData.at(index.row()).at(3); case BondDataRotatable: if (sortRole) return m_bondLengths.at( m_molecule->currentConformer() ).at( index.row() ); else return m_bondData.at(index.row()).at(4).toString(); default: // length return m_bondLengths.at( conformerFromIndex( index ) ).at(index.row()); } } else if (m_type == AngleType) { if (!m_validCache) updateCache(); if ((unsigned int) index.row() >= m_angleData.size() ) return QVariant(); AngleColumn column=static_cast(index.column()); switch (column) { case AngleDataType: return m_angleData.at(index.row()).at(0).toString(); case AngleDataStartAtom: return m_angleData.at(index.row()).at(1); case AngleDataVertex: return m_angleData.at(index.row()).at(2); case AngleDataEndAtom: return m_angleData.at(index.row()).at(3); default: QString format("%L1"); double angle = m_angleValues.at( conformerFromIndex( index ) ).at(index.row()); if (sortRole) return angle; else return format.arg(angle, 0, 'f', 4); } } else if (m_type == TorsionType) { if (!m_validCache) updateCache(); TorsionColumn column=static_cast(index.column()); switch (column) { case TorsionDataType: return m_torsionData.at(index.row()).at(0).toString(); case TorsionDataAtom1: return m_torsionData.at(index.row()).at(1); case TorsionDataAtom2: return m_torsionData.at(index.row()).at(2); case TorsionDataAtom3: return m_torsionData.at(index.row()).at(3); case TorsionDataAtom4: return m_torsionData.at(index.row()).at(4); default: QString format("%L1"); double torsion = m_torsionValues.at( conformerFromIndex( index ) ).at(index.row()); if (sortRole) return torsion; else return format.arg(torsion, 0, 'f', 4); } } /*else if (m_type == CartesianType) { if (static_cast(index.row()) >= m_molecule->numAtoms()) return QVariant(); Atom *atom = m_molecule->atom(index.row()); QString format("%L1"); switch (index.column()) { case 0: if (sortRole) return atom->pos()->x(); else return format.arg(atom->pos()->x(), 0, 'f', 5); case 1: if (sortRole) return atom->pos()->y(); else return format.arg(atom->pos()->y(), 0, 'f', 5); case 2: if (sortRole) return atom->pos()->z(); else return format.arg(atom->pos()->z(), 0, 'f', 5); } }*/ else if (m_type == ConformerType) { if (static_cast(index.row()) >= numConformers()) return QVariant(); switch (index.column()) { case 0: // energy if ((unsigned int) index.row() >= m_molecule->energies().size()) return QVariant(); QString format("%L1"); if (sortRole) return m_molecule->energies().at(index.row()); else return format.arg(m_molecule->energies().at(index.row()), 0, 'f', 4); } } return QVariant(); } QVariant PropertiesModel::headerData(int section, Qt::Orientation orientation, int role) const { // handle text alignments if (role == Qt::TextAlignmentRole) { if (orientation == Qt::Vertical) { return Qt::AlignHCenter; // XYZ coordinates } } if (role != Qt::DisplayRole) return QVariant(); if (m_type == AtomType) { if (orientation == Qt::Horizontal) { unsigned int column = static_cast(section); switch (column ) { case AtomDataElement: return tr("Element"); case AtomDataType: return tr("Type"); case AtomDataValence: return tr("Valence"); case AtomDataFormalCharge: return QString(tr("Formal Charge")).replace(" ","\n"); case AtomDataPartialCharge: return QString(tr("Partial Charge")).replace(" ","\n"); default: // 5 and above unsigned int myConformer=(column-5) / 3; unsigned int remainder=(column-5) % 3; QString CoordHeader; switch(remainder) { case 0: CoordHeader = QString("X %1").arg("(\xC5)"); break; case 1: CoordHeader = QString("Y %1").arg("(\xC5)"); break; case 2: CoordHeader = QString("Z %1").arg("(\xC5)"); break; default: std::cerr << "AtomType remainder error in headerData: " << remainder << std::endl; } if( numConformers() > 1 ) CoordHeader.prepend( QString("Conformer %1\n").arg( myConformer+1 ) ); // Seems somewhat daft to have to convert a QString to *char to pass // it to Qt's tr function - am I missing something? return trUtf8(CoordHeader.toUtf8().data(), "in Angstrom"); } } else return tr("Atom") + QString(" %1").arg(section + 1); } else if (m_type == BondType) { if (orientation == Qt::Horizontal) { unsigned int column = static_cast(section); switch ( column ) { case BondDataType: return tr("Type"); case BondDataAtom1: return tr("Start Atom"); case BondDataAtom2: return tr("End Atom"); case BondDataOrder: return tr("Bond Order"); case BondDataRotatable: return tr("Rotatable"); default: // A bond length if( numConformers() > 1 ) return tr("Conformer %1\nLength %2", "in Angstrom").arg(column-4).arg("(\xC5)"); else return tr("Length %1", "in Angstrom").arg("(\xC5)"); } } else // Bond ordering starts at 0 return tr("Bond") + QString(" %1").arg(section + 1); } else if (m_type == AngleType) { if (orientation == Qt::Horizontal) { unsigned int column= static_cast(section); switch (column) { case AngleDataType: return tr("Type"); case AngleDataStartAtom: return tr("Start Atom"); case AngleDataVertex: return tr("Vertex"); case AngleDataEndAtom: return tr("End Atom"); default: if( numConformers() > 1 ) return tr("Conformer %1\nAngle %2", "Degree symbol").arg(column-3).arg("(\xB0)"); else return tr("Angle %1", "Degree symbol").arg("(\xB0)"); } } else return tr("Angle") + QString(" %1").arg(section + 1); } else if (m_type == TorsionType) { if (orientation == Qt::Horizontal) { unsigned int column= static_cast(section); switch (section) { case 0: return tr("Type"); case TorsionDataAtom1: case TorsionDataAtom2: case TorsionDataAtom3: case TorsionDataAtom4: return tr("Atom %1").arg(column); default: if( numConformers() > 1 ) return trUtf8("Conformer %1\nTorsion %2", "Degree symbol").arg(column-4).arg("(\xB0)"); else return trUtf8("Torsion %1", "Degree symbol").arg("(\xB0)"); } } else return tr("Torsion") + QString(" %1").arg(section + 1); } /*else if (m_type == CartesianType) { if (orientation == Qt::Horizontal) { switch (section) { case 0: return trUtf8("X %1", "in Angstrom").arg("(\xC5)"); case 1: return trUtf8("Y %1", "in Angstrom").arg("(\xC5)"); case 2: return trUtf8("Z %1", "in Angstrom").arg("(\xC5)"); } } else return tr("Atom %1").arg(section + 1); }*/ else if (m_type == ConformerType) { if (orientation == Qt::Horizontal) { switch (section) { case 0: return tr("Energy (kJ/mol)"); } } else return tr("Conformer") + QString(" %1").arg(section + 1); } return QVariant(); } Qt::ItemFlags PropertiesModel::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::ItemIsEnabled; if (m_type == AtomType) { switch ( static_cast(index.column()) ) { case AtomDataType: case AtomDataValence: return QAbstractItemModel::flags(index); case AtomDataElement: case AtomDataFormalCharge: case AtomDataPartialCharge: default: // Covers any coordinates return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } } else if (m_type == BondType) { switch ( static_cast(index.column()) ) { case BondDataType: case BondDataAtom1: case BondDataAtom2: case BondDataOrder: case BondDataRotatable: return QAbstractItemModel::flags(index); default: // lengths return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } } else if (m_type == AngleType) { switch ( static_cast(index.column()) ) { case AngleDataType: case AngleDataStartAtom: case AngleDataVertex: case AngleDataEndAtom: return QAbstractItemModel::flags(index); default: // an angle return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } } else if (m_type == TorsionType) { switch ( static_cast(index.column()) ) { case TorsionDataType: case TorsionDataAtom1: case TorsionDataAtom2: case TorsionDataAtom3: case TorsionDataAtom4: return QAbstractItemModel::flags(index); default: // dihedral angle return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } } /*else if (m_type == CartesianType) { return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; }*/ else if (m_type == ConformerType) { return QAbstractItemModel::flags(index); } return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } bool PropertiesModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (!index.isValid()) return false; if (role != Qt::EditRole) return false; // If an item is actually editable, we should invalidate the cache // We can still use the cached data -- we just invalidate now // So that we can call "return" and have the cache invalid when we leave m_validCache = false; if (m_type == AtomType) { Atom *atom = m_molecule->atom(index.row()); Eigen::Vector3d pos = *atom->pos(); //switch (index.column()) { switch ( static_cast( index.column() ) ) { case AtomDataElement: {// atomic number // Try first as a number bool ok; int atomicNumber = value.toInt(&ok); if (ok) atom->setAtomicNumber(atomicNumber); else atom->setAtomicNumber(OpenBabel::etab.GetAtomicNum(value.toString().toAscii())); m_molecule->update(); m_validCache = false; emit dataChanged(index, index); return true; } case AtomDataType: case AtomDataValence: return false; case AtomDataFormalCharge: {// formal charge bool ok; int formalCharge = value.toInt(&ok); if (ok) atom->setFormalCharge(formalCharge); m_validCache = false; return true; } case AtomDataPartialCharge: // partial charge atom->setPartialCharge(value.toDouble()); m_molecule->update(); m_validCache = false; emit dataChanged(index, index); return true; default: // A coordinate { // Possible mutiple conformers, so we use the modulus to determine if x,y, or z pos [ (index.column()-5) % 3 ] = value.toDouble(); atom->setPos(pos); m_molecule->update(); m_validCache = false; emit dataChanged(index, index); return true; } } } /*else if (m_type == CartesianType) { if (index.column() > 2) return false; Atom *atom = m_molecule->atom(index.row()); Eigen::Vector3d pos = *atom->pos(); pos[index.column()] = value.toDouble(); atom->setPos(pos); m_molecule->update(); emit dataChanged(index, index); return true; }*/ else if (m_type == BondType) { switch ( static_cast(index.column()) ) { case BondDataType: case BondDataAtom1: case BondDataAtom2: case BondDataOrder: case BondDataRotatable: return false; default: // a length Bond *bond = m_molecule->bond(index.row()); Eigen::Vector3d bondDirection = *(bond->beginPos()) - *(bond->endPos()); double lengthScale; SkeletonTree zMatrixTree; lengthScale = (value.toDouble() - bond->length()) / bond->length(); // scale our bond vector to match the new length bondDirection *= lengthScale; zMatrixTree.populate(bond->beginAtom(), bond, m_molecule); zMatrixTree.skeletonTranslate(bondDirection); m_molecule->update(); m_validCache = false; emit dataChanged(index, index); return true; } } else if (m_type == AngleType) { vector > angles = conformerAngles( conformerFromIndex( index ) ); Atom *startAtom = m_molecule->atom((angles[index.row()][1])); Atom *vertex = m_molecule->atom((angles[index.row()][0])); Atom *endAtom = m_molecule->atom((angles[index.row()][2])); Bond *bond = startAtom->bond(vertex); SkeletonTree zMatrixTree; Eigen::Vector3d abVector, bcVector, crossProductVector; double rotationAdjustment; double initialAngle = m_angleValues.at( m_molecule->currentConformer() ).at( index.row() ); switch ( static_cast(index.column()) ) { case AngleDataType: case AngleDataStartAtom: case AngleDataVertex: case AngleDataEndAtom: return false; default: // an angle abVector = *(startAtom->pos()) - *(vertex->pos()); bcVector = *(endAtom->pos()) - *(vertex->pos()); crossProductVector = abVector.cross(bcVector).normalized(); rotationAdjustment = (value.toDouble() - initialAngle) * cDegToRad; zMatrixTree.populate(vertex, bond, m_molecule); zMatrixTree.skeletonRotate(rotationAdjustment, crossProductVector, *(vertex->pos())); m_molecule->update(); m_validCache = false; emit dataChanged(index, index); return true; } } else if (m_type == TorsionType) { // Dihedral angles (torsions) are defined like so: // a // \b-c // \d vector > torsions = conformerTorsions( conformerFromIndex( index ) ); Atom *b = m_molecule->atom((torsions[index.row()][1])); Atom *c = m_molecule->atom((torsions[index.row()][2])); Bond *bond = b->bond(c); SkeletonTree zMatrixTree; Eigen::Vector3d bcVector; double rotationAdjustment; double initialAngle = m_torsionValues.at( m_molecule->currentConformer() ).at( index.row() ); if (numeric_limits::has_infinity && initialAngle == numeric_limits::infinity()) { initialAngle = 0.0; } switch ( static_cast(index.column()) ) { case TorsionDataType: case TorsionDataAtom1: case TorsionDataAtom2: case TorsionDataAtom3: case TorsionDataAtom4: return false; default: // dihedral angle bcVector = (*(b->pos()) - *(c->pos())).normalized(); rotationAdjustment = (value.toDouble() - initialAngle) * cDegToRad; zMatrixTree.populate(b, bond, m_molecule); zMatrixTree.skeletonRotate(rotationAdjustment, bcVector, *(b->pos())); m_molecule->update(); m_validCache = false; emit dataChanged(index, index); return true; } } return false; } void PropertiesModel::setMolecule(Molecule *molecule) { m_molecule = molecule; m_validCache = false; } void PropertiesModel::setDisplayConformers(bool display) { m_displayConformers = display; } void PropertiesModel::atomAdded(Atom *atom) { if ( (m_type == AtomType) /*|| (m_type == CartesianType)*/ ) { // insert a new row at the end beginInsertRows(QModelIndex(), atom->index(), atom->index()); endInsertRows(); } m_validCache = false; } void PropertiesModel::atomRemoved(Atom *atom) { if ( (m_type == AtomType) /*|| (m_type == CartesianType)*/ ) { // delete the row for this atom beginRemoveRows(QModelIndex(), atom->index(), atom->index()); endRemoveRows(); } m_validCache = false; } void PropertiesModel::bondAdded(Bond *bond) { if ( (m_type == BondType) ) { // insert a new row at the end beginInsertRows(QModelIndex(), bond->index(), bond->index()); endInsertRows(); } m_validCache = false; } void PropertiesModel::bondRemoved(Bond *bond) { if ( (m_type == BondType) ) { // delete the row for this atom beginRemoveRows(QModelIndex(), bond->index(), bond->index()); endRemoveRows(); } m_validCache = false; } void PropertiesModel::moleculeChanged() { // Tear down the model and build it back up again // FIXME I think this is pretty hackish - is there a better way to handle it? // We cannot know how many rows have been added or removed, just that it // was a big number and the molecule changed significantly. int rows = rowCount(); for (int i = 0; i < rows; ++i) { beginRemoveRows(QModelIndex(), 0, 0); endRemoveRows(); } beginInsertRows(QModelIndex(), 0, rowCount()-1); endInsertRows(); m_validCache = false; } void PropertiesModel::updateTable() { emit dataChanged(QAbstractItemModel::createIndex(0, 0), QAbstractItemModel::createIndex(rowCount(), columnCount())); // jmht - not sure we need to invalidate the cache when updating the table //m_validCache = false; } void PropertiesModel::clearCache( ) const { // Clear out the old data structures if (m_type == AtomType) { m_atomData.clear(); m_atomCoords.clear(); } else if (m_type == BondType) { m_bondData.clear(); m_bondLengths.clear(); } else if (m_type == AngleType) { m_angleData.clear(); m_angleValues.clear(); m_angles.clear(); } else if (m_type == TorsionType) { m_torsionData.clear(); m_torsionValues.clear(); m_torsions.clear(); } m_validCache = false; } // end clearCache void PropertiesModel::updateCache() const { /* * Loop through all conformers building up the data structures * For the first conformer we create the data structures that are * shared by all conformers */ // Clear out the old data structures clearCache(); Molecule *copy_molecule; if ( numConformers() > 1 ) { // If we are dealing with multiple conformers, we create a // copy of the main molecule to get the data from. // We create a copy as we need to loop through the conformers // to generate the data, and this would alter the displayed molecule copy_molecule = new Molecule(); *copy_molecule = *m_molecule; // Currently, we can't be sure this has been done copy_molecule->calculateGroupIndices(); } else { // copy_molecule is just an alias for the original molecule copy_molecule = m_molecule; } std::vector tmpQVariantVector; // For holding vectors before they are added to the main data structures std::vector coordListTmp; // For holding atom coordinates std::vector valueListTmp; // For holding atom coordinates or angles // Loop over conformers and create the data structures for ( unsigned int numConf=0; numConf < numConformers(); numConf++ ) { if ( numConformers() > 1 ) copy_molecule->setConformer(numConf); OBMol *myOBMol = new OBMol(copy_molecule->OBMol()); if (m_type == AtomType) { coordListTmp.clear(); // Loop over atoms for (unsigned int j=0; j < myOBMol->NumAtoms(); j++ ) { OBAtom *obatom = myOBMol->GetAtom(j+1); // For the first conformer collect all the shared data if ( numConf == 0 ) { tmpQVariantVector.clear(); // Element : Type : Valence : Formal Charge : Partial Charge tmpQVariantVector.push_back(QVariant(OpenBabel::etab.GetSymbol(obatom->GetAtomicNum()))); tmpQVariantVector.push_back(QVariant(obatom->GetType())); tmpQVariantVector.push_back(QVariant(obatom->GetValence())); tmpQVariantVector.push_back(QVariant(obatom->GetFormalCharge())); tmpQVariantVector.push_back(QVariant(obatom->GetPartialCharge())); // Now add to atom data list m_atomData.push_back( tmpQVariantVector ); } // Add coordinate to the list for this conformer coordListTmp.push_back( obatom->GetVector() ); } // end loop over atoms // Add coordinates for all conformers m_atomCoords.push_back( coordListTmp ); } else if (m_type == BondType) { OpenBabel::OBBond *bond; valueListTmp.clear(); for (unsigned int j=0; j < myOBMol->NumBonds(); j++ ) { bond = myOBMol->GetBond(j); // For first conformer, add all the shared data if ( numConf==0) { tmpQVariantVector.clear(); // Type tmpQVariantVector.push_back( QVariant(bondTypeString(copy_molecule->atom(bond->GetBeginAtomIdx()-1), copy_molecule->atom(bond->GetEndAtomIdx()-1), bond->GetBondOrder())) ); //Atom1 tmpQVariantVector.push_back( QVariant(groupIndexString(copy_molecule->atom(bond->GetBeginAtomIdx()-1))) ); //Atom2 tmpQVariantVector.push_back( QVariant(groupIndexString(copy_molecule->atom(bond->GetEndAtomIdx()-1))) ); // Order tmpQVariantVector.push_back( QVariant( bond->GetBondOrder() ) ); // Rotatable if (bond->IsRotor()) tmpQVariantVector.push_back( QVariant( tr("Yes")) ); else tmpQVariantVector.push_back( QVariant( tr("No")) ); m_bondData.push_back( tmpQVariantVector ); } // end numConf 0 // Add lengths for all conformers valueListTmp.push_back( bond->GetLength() ); } m_bondLengths.push_back( valueListTmp ); } else if (m_type == AngleType) { myOBMol->FindAngles(); OBAngleData *ad = static_cast(myOBMol->GetData(AngleData)); vector > angles; ad->FillAngleArray(angles); double angle; m_angles.push_back( angles ); valueListTmp.clear(); // Loop over the angles for (unsigned int j=0; j < ad->GetSize(); j++ ) { // Data shared by all conformers if ( numConf== 0 ) { tmpQVariantVector.clear(); // Type tmpQVariantVector.push_back( QVariant( angleTypeString(copy_molecule->atom(angles[j][1]), copy_molecule->atom(angles[j][0]), copy_molecule->atom(angles[j][2])) ) ); // Start atom tmpQVariantVector.push_back( QVariant( groupIndexString(copy_molecule->atom(angles[j][1])) )); // vertex -- yes, angles are filled by Open Babel with the vertex first tmpQVariantVector.push_back( QVariant( groupIndexString(copy_molecule->atom(angles[j][0])) )); // End atom tmpQVariantVector.push_back( QVariant( groupIndexString(copy_molecule->atom(angles[j][2])) )); m_angleData.push_back( tmpQVariantVector ); } angle = myOBMol->GetAngle(myOBMol->GetAtom(angles[j][1] + 1), myOBMol->GetAtom(angles[j][0] + 1), myOBMol->GetAtom(angles[j][2] + 1)); if (numeric_limits::has_infinity && angle == numeric_limits::infinity()) angle = 0.0; valueListTmp.push_back( angle ); } m_angleValues.push_back( valueListTmp ); } else if (m_type == TorsionType) { myOBMol->FindTorsions(); OBTorsionData *td = static_cast(myOBMol->GetData(TorsionData)); vector torsions = td->GetData(); pair torsionBC; vector > torsionADs; vector::iterator i; vector >::iterator j; // Add to the list for all conformers vector > mytorsions; td->FillTorsionArray(mytorsions); m_torsions.push_back( mytorsions ); double dihedralAngle; valueListTmp.clear(); for (i = torsions.begin(); i != torsions.end(); ++i) { torsionBC = i->GetBC(); torsionADs = i->GetADs(); for (j = torsionADs.begin(); j != torsionADs.end(); ++j) { // Add data shared by all conformers if (numConf==0) { tmpQVariantVector.clear(); //Type tmpQVariantVector.push_back( QVariant( angleTypeString(copy_molecule->atom(j->first->GetIdx()-1), copy_molecule->atom(torsionBC.first->GetIdx()-1), copy_molecule->atom(torsionBC.second->GetIdx()-1), copy_molecule->atom(j->second->GetIdx()-1)) )); //Atom1 tmpQVariantVector.push_back( QVariant( groupIndexString(copy_molecule->atom(j->first->GetIdx()-1)) )); //Atom2 tmpQVariantVector.push_back( QVariant( groupIndexString(copy_molecule->atom(torsionBC.first->GetIdx()-1)) )); //Atom3 tmpQVariantVector.push_back( QVariant( groupIndexString(copy_molecule->atom(torsionBC.second->GetIdx()-1)) )); //Atom4 tmpQVariantVector.push_back( QVariant( groupIndexString(copy_molecule->atom(j->second->GetIdx()-1)) )); // Now add final data structure m_torsionData.push_back( tmpQVariantVector ); } dihedralAngle = myOBMol->GetTorsion(j->first, torsionBC.first, torsionBC.second, j->second); if (numeric_limits::has_infinity && dihedralAngle == numeric_limits::infinity()) dihedralAngle = 0.0; valueListTmp.push_back(dihedralAngle); } } m_torsionValues.push_back( valueListTmp ); } // end TorsionType } // end loop over conformers // Delete our copy of the molecule if we made one if ( numConformers() > 1 ) delete copy_molecule; m_validCache = true; } // end updateCache unsigned int PropertiesModel::numConformers() const { if (! m_displayConformers ) return 1; else return m_molecule->numConformers(); } //end numConformers unsigned int PropertiesModel::conformerFromIndex(const QModelIndex &index) const { if (m_type == AtomType) { if (static_cast(index.row()) >= m_molecule->numAtoms() || static_cast(index.column()) > 5 + (3*numConformers()) ) return 0; if ( index.column() < 5 ) return 0; else return (index.column()-5) / 3; // Conformer number } else if (m_type == BondType) { if (static_cast(index.row()) >= m_molecule->numBonds() || static_cast(index.column()) > 5 + (3*numConformers()) ) return 0; if ( index.column() < 5 ) return 0; else return index.column()-5; } else if (m_type == AngleType) { if ( index.column() < 4 ) return 0; else return index.column()-4; } else if (m_type == TorsionType) { if ( index.column() < 5 ) return 0; else return index.column()-5; } else if (m_type == ConformerType) { if (index.row() >= static_cast(numConformers())) return 0; else return index.row(); } else return 0; } std::vector< std::vector > PropertiesModel::conformerAngles( unsigned int conformer ) { // Return the list of angles for a conformer if (!m_validCache) updateCache(); if ( conformer > m_angles.size() ) { std::cerr << "conformerAngles bad conformer index\n"; std::vector< std::vector > angles; return angles; } return m_angles.at( conformer ); } // end conformerAngles std::vector< std::vector > PropertiesModel::conformerTorsions( unsigned int conformer ) { // Return the list of torsions for a conformer if (!m_validCache) updateCache(); if ( conformer > m_torsions.size() ) { std::cerr << "conformerTorsions bad conformer index!\n"; std::vector< std::vector > torsions; return torsions; } return m_torsions.at( conformer ); } // end conformerTorsions } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/constraintsmodel.h0000644000175000001440000000477612250371054023562 0ustar marcususers/********************************************************************** constraintsmodel.h - Model to hold constraints Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef CONSTRAINTSMODEL_H #define CONSTRAINTSMODEL_H #include #include #include #include #include #include #include #ifndef BUFF_SIZE #define BUFF_SIZE 256 #endif namespace Avogadro { class ConstraintsModel : public QAbstractTableModel { Q_OBJECT public slots: void primitiveRemoved(Primitive *primitive); public: ConstraintsModel(QObject *parent = 0) : QAbstractTableModel(parent) {} int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; void clear(); void deleteConstraint(int index); void addIgnore(int index); void addAtomConstraint(int index); void addAtomXConstraint(int index); void addAtomYConstraint(int index); void addAtomZConstraint(int index); void addDistanceConstraint(int a, int b, double length); void addAngleConstraint(int a, int b, int c, double angle); void addTorsionConstraint(int a, int b, int c, int d, double torsion); OpenBabel::OBFFConstraints& constraints() { return m_constraints; } void setConstraints (OpenBabel::OBFFConstraints& constraints) { m_constraints = constraints; } private: OpenBabel::OBFFConstraints m_constraints; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/invertchiralextension.cpp0000644000175000001440000000673212250371054025146 0ustar marcususers/********************************************************************** InvertChiral - Invert selected stereocenters This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "invertchiralextension.h" #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { InvertChiralExtension::InvertChiralExtension(QObject *parent) : Extension(parent), m_molecule(0) { QAction *action = new QAction(this); action->setText(tr("Invert Chirality")); m_actions.append(action); action = new QAction( this ); action->setSeparator(true); m_actions.append( action ); } InvertChiralExtension::~InvertChiralExtension() { } QList InvertChiralExtension::actions() const { return m_actions; } QString InvertChiralExtension::menuPath(QAction *) const { return tr("&Build"); } void InvertChiralExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* InvertChiralExtension::performAction(QAction *, GLWidget *widget) { if (widget == NULL) return 0; m_molecule = widget->molecule(); QList selectedAtoms = widget->selectedPrimitives().subList(Primitive::AtomType); if (selectedAtoms.isEmpty()) { // make an enantiomer by reflecting everything in the x-axis foreach(Atom *atom, m_molecule->atoms()) { const Eigen::Vector3d *pos = atom->pos(); Eigen::Vector3d newPos = *pos; newPos.x() = pos->x() * -1.0; atom->setPos(newPos); } } else { // harder, since we have to flip two neighbors OBMol obmol = m_molecule->OBMol(); foreach(Primitive *primitive, selectedAtoms) { Atom *atom = static_cast(primitive); if (!atom) continue; // shouldn't happen, since we specifically requested Primitive::AtomType int index = atom->index() + 1; // OBMol indexes atoms by 1, not 0 QList neighborList = atom->neighbors(); if (neighborList.size() > 1) { // it doesn't matter which two -- we can simply swap any two atoms to invert int a = m_molecule->atomById(neighborList[0])->index(); int b = m_molecule->atomById(neighborList[1])->index(); OBBuilder::Swap(obmol, index, a + 1, index, b + 1); // this unfortunately doesn't work for ring atoms } } m_molecule->setOBMol(&obmol); } m_molecule->update(); widget->update(); return 0; } } // end namespace Avogadro Q_EXPORT_PLUGIN2(invertchiralextension, Avogadro::InvertChiralExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/propextension.cpp0000644000175000001440000003244212250371054023431 0ustar marcususers/********************************************************************** propextension.h - Properties Plugin for Avogadro Copyright (C) 2007-2008 by Tim Vandermeersch Some portions Copyright (C) 2009 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "propextension.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; using OpenBabel::OBGenericDataType::AngleData; using OpenBabel::OBGenericDataType::TorsionData; namespace Avogadro { enum PropExtensionIndex { AtomPropIndex = 0, BondPropIndex, AnglePropIndex, TorsionPropIndex, //CartesianIndex, ConformerIndex }; PropertiesExtension::PropertiesExtension( QObject *parent ) : Extension( parent ) { QAction *action; action = new QAction( this ); action->setSeparator(true); action->setData(-1); m_actions.append(action); action = new QAction( this ); action->setText( tr("Atom Properties..." )); action->setData(AtomPropIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Bond Properties..." )); action->setData(BondPropIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Angle Properties..." )); action->setData(AnglePropIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Torsion Properties..." )); action->setData(TorsionPropIndex); m_actions.append( action ); action = new QAction( this ); action->setText( tr("Conformer Properties..." )); action->setData(ConformerIndex); m_actions.append( action ); /*action = new QAction( this ); action->setText( tr("Cartesian Editor..." )); action->setData(CartesianIndex); m_actions.append( action );*/ } PropertiesExtension::~PropertiesExtension() {} QList PropertiesExtension::actions() const { return m_actions; } QString PropertiesExtension::menuPath(QAction *action) const { int i = action->data().toInt(); switch(i) { case -1: // separator return tr("&View"); case AtomPropIndex: case BondPropIndex: case AnglePropIndex: case TorsionPropIndex: case ConformerIndex: return tr("&View") + '>' + tr("&Properties"); }; return QString(); } void PropertiesExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* PropertiesExtension::performAction(QAction *action, GLWidget *widget) { QUndoCommand *undo = 0; PropertiesModel *model; PropertiesView *view; QDialog *dialog = new QDialog(qobject_cast(parent())); QVBoxLayout *layout = new QVBoxLayout(dialog); dialog->setLayout(layout); // Don't show whitespace around the PropertiesView layout->setSpacing(0); layout->setContentsMargins(0,0,0,0); int i = action->data().toInt(); switch (i) { case AtomPropIndex: // atom properties // model will be deleted in PropertiesView::hideEvent using deleteLater(). model = new PropertiesModel(PropertiesModel::AtomType); model->setMolecule(m_molecule); // view will delete itself in PropertiesView::hideEvent using deleteLater(). view = new PropertiesView(PropertiesView::AtomType, dialog); connect(m_molecule, SIGNAL( atomAdded(Atom*) ), model, SLOT( atomAdded(Atom*) )); connect(m_molecule, SIGNAL( atomRemoved(Atom*) ), model, SLOT( atomRemoved(Atom*) )); break; case BondPropIndex: // bond properties // model will be deleted in PropertiesView::hideEvent using deleteLater(). model = new PropertiesModel(PropertiesModel::BondType); model->setMolecule( m_molecule ); // view will delete itself in PropertiesView::hideEvent using deleteLater(). view = new PropertiesView(PropertiesView::BondType, widget); connect(m_molecule, SIGNAL( bondAdded(Bond*) ), model, SLOT( bondAdded(Bond*) )); connect(m_molecule, SIGNAL( bondRemoved(Bond*) ), model, SLOT( bondRemoved(Bond*) )); break; case AnglePropIndex: // angle properties // model will be deleted in PropertiesView::hideEvent using deleteLater(). model = new PropertiesModel(PropertiesModel::AngleType); model->setMolecule( m_molecule ); // view will delete itself in PropertiesView::hideEvent using deleteLater(). view = new PropertiesView(PropertiesView::AngleType, widget); break; case TorsionPropIndex: // torsion properties // model will be deleted in PropertiesView::hideEvent using deleteLater(). model = new PropertiesModel(PropertiesModel::TorsionType); model->setMolecule( m_molecule ); // view will delete itself in PropertiesView::hideEvent using deleteLater(). view = new PropertiesView(PropertiesView::TorsionType, widget); break; /*case CartesianIndex: // cartesian editor // m_angleModel will be deleted in PropertiesView::hideEvent using deleteLater(). model = new PropertiesModel(PropertiesModel::CartesianType); model->setMolecule( m_molecule ); // m_view will delete itself in PropertiesView::hideEvent using deleteLater(). view = new PropertiesView(PropertiesView::CartesianType, widget); connect(m_molecule, SIGNAL(atomAdded(Atom*)), model, SLOT( atomAdded(Atom*))); connect(m_molecule, SIGNAL(atomRemoved(Atom*)), model, SLOT(atomRemoved(Atom*))); break;*/ case ConformerIndex: // conformers // model will be deleted in PropertiesView::hideEvent using deleteLater(). model = new PropertiesModel(PropertiesModel::ConformerType, dialog); model->setMolecule( m_molecule ); // view will delete itself in PropertiesView::hideEvent using deleteLater(). view = new PropertiesView(PropertiesView::ConformerType, dialog); break; default: delete dialog; layout = 0; // deleted as a child of the dialog return 0; } connect(m_molecule, SIGNAL(moleculeChanged()), model, SLOT(moleculeChanged())); connect(m_molecule, SIGNAL( updated() ), model, SLOT( updateTable() )); QSortFilterProxyModel* proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(model); proxyModel->setDynamicSortFilter(true); proxyModel->setSortLocaleAware(true); // this role will received direct floating-point numbers from the model proxyModel->setSortRole(Qt::UserRole); view->setMolecule( m_molecule ); view->setWidget( widget ); view->setModel( proxyModel ); view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); view->resizeColumnsToContents(); layout->addWidget(view); dialog->setWindowTitle(view->windowTitle()); QSize dialogSize = dialog->size(); double width = view->horizontalHeader()->length()+view->verticalHeader()->width()+5; if (model->rowCount() < 13) { // no scrollbar dialogSize.setHeight(view->horizontalHeader()->height()+model->rowCount()*30+5); dialogSize.setWidth(width); } else { // scrollbar is needed dialogSize.setHeight(width/1.618); dialogSize.setWidth(width+view->verticalScrollBar()->width()); } dialog->resize(dialogSize); //dialog->setWindowFlags(Qt::Window); dialog->show(); return undo; } PropertiesView::PropertiesView(Type type, QWidget *parent) : QTableView(parent), m_molecule(NULL), m_widget(NULL) { m_type = type; QString title; switch(type){ case AtomType: title = tr("Atom Properties"); break; case BondType: title = tr("Bond Properties"); break; case AngleType: title = tr("Angle Properties"); break; case TorsionType: title = tr("Torsion Properties"); break; /*case CartesianType: title = tr("Cartesian Properties"); break;*/ case ConformerType: title = tr("Conformer Properties"); break; default: break; } this->setWindowTitle(title); QHeaderView *horizontal = this->horizontalHeader(); horizontal->setResizeMode(QHeaderView::Interactive); horizontal->setMinimumSectionSize(75); QHeaderView *vertical = this->verticalHeader(); vertical->setResizeMode(QHeaderView::Interactive); vertical->setMinimumSectionSize(30); vertical->setDefaultAlignment(Qt::AlignCenter); // Don't allow selecting everything setCornerButtonEnabled(false); // Alternating row colors setAlternatingRowColors(true); // Allow sorting the table setSortingEnabled(true); } void PropertiesView::selectionChanged(const QItemSelection &selected, const QItemSelection &) { QList matchedPrimitives; bool ok = false; foreach (const QModelIndex &index, selected.indexes()) { if (!index.isValid()) return; int rowNum = model()->headerData(index.row(), Qt::Vertical).toString().split(" ").last().toLong(&ok) - 1; if (!ok) return; if (m_type == AtomType /*|| m_type == CartesianType*/) { if ((unsigned int) index.row() >= m_molecule->numAtoms()) return; matchedPrimitives.append( m_molecule->atom(rowNum) ); m_widget->clearSelected(); m_widget->setSelected(matchedPrimitives, true); m_widget->update(); } else if (m_type == BondType) { if((unsigned int) index.row() >= m_molecule->numBonds()) return; matchedPrimitives.append( m_molecule->bond(rowNum) ); m_widget->clearSelected(); m_widget->setSelected(matchedPrimitives, true); m_widget->update(); } else if (m_type == AngleType && model() != 0) { OBMol *mol = new OBMol(m_molecule->OBMol()); mol->FindAngles(); OBAngleData *ad = static_cast(mol->GetData(AngleData)); if (!ad) return; vector > angles; ad->FillAngleArray(angles); delete mol; Atom *startAtom = m_molecule->atom((angles[rowNum][1])); Atom *vertex = m_molecule->atom((angles[rowNum][0])); Atom *endAtom = m_molecule->atom((angles[rowNum][2])); Bond *bond1 = startAtom->bond(vertex); Bond *bond2 = vertex->bond(endAtom); matchedPrimitives.append( startAtom ); matchedPrimitives.append( vertex ); matchedPrimitives.append( endAtom ); matchedPrimitives.append( bond1 ); matchedPrimitives.append( bond2 ); m_widget->clearSelected(); m_widget->setSelected(matchedPrimitives, true); m_widget->update(); } else if (m_type == TorsionType && model() != 0) { OBMol *mol = new OBMol(m_molecule->OBMol()); mol->FindTorsions(); OBTorsionData *td = static_cast(mol->GetData(TorsionData)); if (!td) return; vector > torsions; td->FillTorsionArray(torsions); delete mol; Atom *a = m_molecule->atom( torsions[rowNum][0] ); Atom *b = m_molecule->atom( torsions[rowNum][1] ); Atom *c = m_molecule->atom( torsions[rowNum][2] ); Atom *d = m_molecule->atom( torsions[rowNum][3] ); Bond *bond1 = a->bond(b); Bond *bond2 = b->bond(c); Bond *bond3 = c->bond(d); matchedPrimitives.append(a); matchedPrimitives.append(b); matchedPrimitives.append(c); matchedPrimitives.append(d); matchedPrimitives.append(bond1); matchedPrimitives.append(bond2); matchedPrimitives.append(bond3); m_widget->clearSelected(); m_widget->setSelected(matchedPrimitives, true); m_widget->update(); } else if (m_type == ConformerType) { if (index.row() >= static_cast(m_molecule->numConformers())) return; m_molecule->setConformer(rowNum); m_molecule->update(); return; } } } void PropertiesView::setMolecule(Molecule *molecule) { m_molecule = molecule; } void PropertiesView::setWidget(GLWidget *widget) { m_widget = widget; } void PropertiesView::hideEvent(QHideEvent *) { if ((m_widget) && model()) { m_widget->clearSelected(); model()->deleteLater(); } this->deleteLater(); } } // end namespace Avogadro Q_EXPORT_PLUGIN2( propextension, Avogadro::PropertiesExtensionFactory ) avogadro-1.1.1/libavogadro/src/extensions/animationdialog.ui0000644000175000001440000001354712250371054023513 0ustar marcususers AnimationDialog 0 0 501 188 Animate Trajectory Load File... true 90 16777215 0/0 Qt::AlignCenter true 1 1 Qt::Horizontal 32 32 32 32 :/amarok/icons/amarok_play.png:/amarok/icons/amarok_play.png 32 32 true 32 32 32 32 :/amarok/icons/amarok_pause.png:/amarok/icons/amarok_pause.png 32 32 true 32 32 32 32 :/amarok/icons/amarok_stop.png:/amarok/icons/amarok_stop.png 32 32 true Dynamic Bonds Loop Qt::Horizontal 40 20 fps 1 25 25 Save as .avi... avogadro-1.1.1/libavogadro/src/extensions/cartesianextension.h0000644000175000001440000000653712250371054024075 0ustar marcususers/********************************************************************** cartesianextension.h - Cartesian Editor for Avogadro Copyright (C) 2009 by Konstantin Tokarev Based on code written by Tim Vandermeersch and Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef CARTESIANEXTENSION_H #define CARTESIANEXTENSION_H #include #include #include using namespace OpenBabel; #include "ui_cartesianeditor.h" #ifndef BUFF_SIZE #define BUFF_SIZE 256 #endif class QProgressDialog; namespace Avogadro { class Molecule; class Atom; enum CoordinateUnit { ANGSTROM=0, BOHR, FRACTIONAL }; enum CoordinateFormat { XYZ=0, XYZ_NUM, XYZ_ONLY, GAMESS, GAMESS2, TURBOMOLE, PRIRODA }; enum SortingType { NONE=0, ELEMENT, X, Y, Z }; class CartesianEditor : public QDialog, Ui::CartesianEditorDialog { Q_OBJECT public: //! Constructor CartesianEditor(QWidget *parent=0); ~CartesianEditor(); void setMolecule (Molecule *molecule); void writeSettings() const; void readSettings(); public Q_SLOTS: //! Slots to take signals from Molecules, and GLWidget void updateCoordinates(); void updateMolecule(); void updateAtoms(Atom*); void moleculeChanged(Molecule *previous); void changeSort(); void changeUnits(); void changeFormat(); void paste(); void copy(); void cut(); void clear(); void textChanged(); private: bool parseText(OBMol *mol); Molecule *m_molecule; CoordinateUnit m_unit; CoordinateFormat m_format; SortingType m_sort; bool m_illegalInput; }; class CartesianExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Cartesian editor", tr("Cartesian editor"), tr("Cartesian coordinates editor")) public: //! Constructor CartesianExtension(QObject *parent=0); //! Deconstructor virtual ~CartesianExtension(); /** @return a menu path for the extension's actions */ virtual QString menuPath(QAction *action) const; //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); //@} void setMolecule(Molecule *molecule); private: QList m_actions; Molecule *m_molecule; CartesianEditor *m_dialog; GLWidget *m_widget; }; class CartesianExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(CartesianExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/cartesianextension.cpp0000644000175000001440000004265712250371054024433 0ustar marcususers/********************************************************************** cartesianextension.cpp - Cartesian Editor for Avogadro Copyright (C) 2009 by Konstantin Tokarev Based on code written by Tim Vandermeersch and Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "cartesianextension.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { static const double BOHR_TO_ANGSTROM = 0.529177249; static const double ANGSTROM_TO_BOHR = 1.0 / 0.529177249; #ifdef Q_WS_X11 static const QString EDITOR_FONT = "Monospace"; #else // Windows and Mac static const QString EDITOR_FONT = "Courier"; #endif CartesianEditor::CartesianEditor(QWidget *parent) : QDialog(parent), m_unit(CoordinateUnit(0)), m_format(CoordinateFormat(0)), m_illegalInput(false) { setupUi(this); readSettings(); cartesianEdit->setTextColor(Qt::black); cartesianEdit->setCurrentFont(QFont(EDITOR_FONT, QApplication::font().pointSize() + 1)); connect(sortBox, SIGNAL(currentIndexChanged(int)), this, SLOT(changeSort())); connect(unitsBox, SIGNAL(currentIndexChanged(int)), this, SLOT(changeUnits())); connect(formatBox, SIGNAL(currentIndexChanged(int)), this, SLOT(changeFormat())); connect(pasteButton, SIGNAL(clicked()), this, SLOT(paste())); connect(copyButton, SIGNAL(clicked()), this, SLOT(copy())); connect(cutButton, SIGNAL(clicked()), this, SLOT(cut())); connect(clearButton, SIGNAL(clicked()), this, SLOT(clear())); connect(cartesianEdit, SIGNAL(textChanged()), this, SLOT(textChanged())); connect(applyButton, SIGNAL(clicked()), this, SLOT(updateMolecule())); connect(revertButton, SIGNAL(clicked()), this, SLOT(updateCoordinates())); } CartesianEditor::~CartesianEditor() { writeSettings(); } void CartesianEditor::changeSort() { m_sort = SortingType(sortBox->currentIndex()); updateCoordinates(); } void CartesianEditor::changeUnits() { if (unitsBox->currentIndex() == int(FRACTIONAL) && m_molecule->OBUnitCell() == 0) { // no unit cell QMessageBox::warning(this, tr("Cartesian Editor"), tr("No unit cell defined for molecule -- cannot use fractional coordinates.")); unitsBox->setCurrentIndex(ANGSTROM); return; } m_unit = CoordinateUnit(unitsBox->currentIndex()); updateCoordinates(); } void CartesianEditor::changeFormat() { m_format = CoordinateFormat(formatBox->currentIndex()); updateCoordinates(); } void CartesianEditor::paste() { QClipboard *clipboard = QApplication::clipboard(); cartesianEdit->append(clipboard->text()); } void CartesianEditor::copy() { QClipboard *clipboard = QApplication::clipboard(); clipboard->setText(cartesianEdit->toPlainText()); } void CartesianEditor::cut() { copy(); clear(); } void CartesianEditor::clear() { cartesianEdit->setText(""); } void CartesianEditor::textChanged() { if (m_illegalInput) { m_illegalInput = false; cartesianEdit->setTextColor(Qt::black); QString t = cartesianEdit->toPlainText(); cartesianEdit->setText(t); } } void CartesianEditor::updateMolecule() { OBMol *tmpMol = new OBMol; OBUnitCell *cell = 0; if (m_molecule->OBUnitCell()) cell = new OBUnitCell (*(m_molecule->OBUnitCell())); if (parseText(tmpMol)) { m_molecule->setOBMol(tmpMol); if (cell) m_molecule->setOBUnitCell(cell); m_molecule->update(); updateCoordinates(); } else { cartesianEdit->setTextColor(Qt::red); QString t = cartesianEdit->toPlainText(); cartesianEdit->setText(t); m_illegalInput = true; if (cell) delete cell; } delete tmpMol; } bool CartesianEditor::parseText(OBMol *mol) { QString coord = cartesianEdit->toPlainText(); QStringList coordStrings = coord.split(QRegExp("\n")); matrix3x3 xform; switch (m_unit) { case ANGSTROM: for (int i = 0; i < 3; i++) xform.Set(i,i,1.0); break; case BOHR: for (int i = 0; i < 3; i++) xform.Set(i,i,BOHR_TO_ANGSTROM); break; case FRACTIONAL: // Fractional coordinates -- convert below xform = matrix3x3(0.0); break; } // Guess format // split on any non-word symbol, except '.' QStringList data = coordStrings.at(0).trimmed().split(QRegExp("\\s+|,|;")); // Format definition, will be used for parsing int NameCol=-1, Xcol=-1, Ycol=-1, Zcol=-1; QString format(""); double b; bool ok; for (int i=0; iBeginModify(); for (int N=0; NNewAtom(); QStringList s_data = coordStrings.at(N).trimmed().split(QRegExp("\\s+|,|;")); if (s_data.size() != data.size()) { return false; } for (int i=0; i(m_molecule->numAtoms())) atom->SetAtomicNum(m_molecule->atom(N)->atomicNumber()); else atom->SetAtomicNum(0); } } else { atom->SetAtomicNum(_n); } if (xform.determinant() == 0.0) { // fractional coordinates atom->SetVector(m_molecule->OBUnitCell()->FractionalToCartesian(pos)); } else { atom->SetVector(xform * pos); } } mol->EndModify(); mol->ConnectTheDots(); mol->PerceiveBondOrders(); return true; } void CartesianEditor::updateCoordinates() { m_illegalInput = false; cartesianEdit->setTextColor(Qt::black); QString t = cartesianEdit->toPlainText(); cartesianEdit->setText(t); if (!m_molecule) { clear(); } else { QString *coord = new QString; QTextStream coordStream(coord); coordStream.setRealNumberPrecision(10); // Do sorting // FIXME: add new function for it? QList localAtom; QMultiMap tmpMap; QMultiMap::const_iterator it; int n=0; foreach (Atom *a, m_molecule->atoms()) { double key; switch (m_sort) { case ELEMENT: key = static_cast(-1*a->atomicNumber()); break; case X: key = a->pos()->x(); break; case Y: key = a->pos()->y(); break; case Z: key = a->pos()->z(); break; default: key = n; n++; } tmpMap.insert(key, a); } it=tmpMap.constBegin(); for (int i=0; it !=tmpMap.constEnd(); i++,it++ ) localAtom.push_back(it.value()); matrix3x3 xform; switch (m_unit) { case ANGSTROM: for (int i = 0; i < 3; i++) xform.Set(i,i,1.0); break; case BOHR: for (int i = 0; i < 3; i++) xform.Set(i,i,ANGSTROM_TO_BOHR); break; case FRACTIONAL: xform = matrix3x3(0.0); // Check below and use proper conversions break; } vector3 pos; for (unsigned int i=0; inumAtoms(); i++) { //Atom *atom = m_molecule->atom(i); Atom *atom = localAtom.at(i); if (xform.determinant() == 0.0) { // fractional coordinates pos = m_molecule->OBUnitCell()->CartesianToFractional( atom->OBAtom().GetVector()); } else { pos = xform * atom->OBAtom().GetVector(); } switch (m_format) { case XYZ: coordStream.setFieldWidth(3); coordStream << left << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())); coordStream.setFieldWidth(18); coordStream << fixed << forcepoint << right << pos.x() << pos.y() << pos.z() << endl; break; case XYZ_ONLY: coordStream.setFieldWidth(18); coordStream << fixed << forcepoint << right << pos.x() << pos.y() << pos.z() << endl; break; case XYZ_NUM: coordStream.setFieldWidth(6); coordStream << left << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber()))+ QString::number(i+1); coordStream.setFieldWidth(18); coordStream << fixed << forcepoint << right << pos.x() << pos.y() << pos.z() << endl; break; case GAMESS: coordStream.setFieldWidth(3); coordStream << left << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())); coordStream.setFieldWidth(3); coordStream << right << atom->atomicNumber(); coordStream.setFieldWidth(2); coordStream << left << ".0"; coordStream.setFieldWidth(18); coordStream << fixed << forcepoint << right << pos.x() << pos.y() << pos.z() << endl; break; case GAMESS2: coordStream.setFieldWidth(12); coordStream << left << QString(OpenBabel::etab.GetName(atom->atomicNumber()).c_str()); coordStream.setFieldWidth(3); coordStream << right << atom->atomicNumber(); coordStream.setFieldWidth(2); coordStream << left << ".0"; coordStream.setFieldWidth(18); coordStream << fixed << forcepoint << right << pos.x() << pos.y() << pos.z() << endl; break; case TURBOMOLE: coordStream.setFieldWidth(14); coordStream << fixed << forcepoint << left << right << pos.x(); coordStream.setFieldWidth(18); coordStream << pos.y() << pos.z(); coordStream.setFieldWidth(5); coordStream << left << right << QString(OpenBabel::etab.GetSymbol(atom->atomicNumber())) << endl; break; case PRIRODA: coordStream.setFieldWidth(3); coordStream << left << atom->atomicNumber(); coordStream.setFieldWidth(18); coordStream << fixed << forcepoint << right << pos.x() << pos.y() << pos.z() << endl; } } cartesianEdit->setText(*coord); delete coord; } } void CartesianEditor::updateAtoms(Atom*) { updateCoordinates(); } void CartesianEditor::moleculeChanged(Molecule *) { updateCoordinates(); } void CartesianEditor::setMolecule(Molecule *molecule) { m_molecule = molecule; connect(m_molecule, SIGNAL(atomUpdated(Atom*)), this, SLOT(updateAtoms(Atom*))); connect(m_molecule, SIGNAL(atomRemoved(Atom*)), this, SLOT(updateAtoms(Atom*))); connect(m_molecule, SIGNAL(moleculeChanged()), this, SLOT(updateCoordinates())); updateCoordinates(); } void CartesianEditor::writeSettings() const { QSettings settings; settings.setValue("cartesian/sort", m_sort); settings.setValue("cartesian/format", m_format); if (m_unit != FRACTIONAL) settings.setValue("cartesian/unit", m_unit); } void CartesianEditor::readSettings() { QSettings settings; m_sort = SortingType(settings.value("cartesian/sort", NONE).toInt()); sortBox->setCurrentIndex(m_sort); m_unit = CoordinateUnit(settings.value("cartesian/unit", ANGSTROM).toInt()); unitsBox->setCurrentIndex(m_unit); m_format = CoordinateFormat(settings.value("cartesian/format", XYZ).toInt()); formatBox->setCurrentIndex(m_format); } CartesianExtension::CartesianExtension( QObject *parent ) : Extension( parent ), m_molecule(0), m_dialog(0) { QAction *action; action = new QAction( this ); action->setSeparator(true); action->setData(-1); m_actions.append(action); action = new QAction( this ); action->setText( tr("Cartesian Editor..." )); m_actions.append( action ); } CartesianExtension::~CartesianExtension() {} QList CartesianExtension::actions() const { return m_actions; } QString CartesianExtension::menuPath(QAction *action) const { Q_UNUSED(action) return tr("&Build"); } void CartesianExtension::setMolecule(Molecule *molecule) { if (m_molecule) disconnect( m_molecule, 0, 0, 0 ); m_molecule = molecule; if (m_dialog) { m_dialog->setMolecule(molecule); } } QUndoCommand* CartesianExtension::performAction(QAction *action, GLWidget *widget) { Q_UNUSED(action) QUndoCommand *undo = 0; if (!m_molecule) return 0; // nothing we can do // Disconnect in case we're attached to a new widget if (m_widget) { disconnect( m_molecule, 0, 0, 0 ); if (m_dialog) { m_dialog->setMolecule(m_molecule); } } if (widget) m_widget = widget; if (!m_dialog) { m_dialog = new CartesianEditor(m_widget); m_dialog->setMolecule(m_molecule); } m_dialog->show(); m_dialog->updateCoordinates(); return undo; } } // end namespace Avogadro Q_EXPORT_PLUGIN2( cartesianextension, Avogadro::CartesianExtensionFactory ) avogadro-1.1.1/libavogadro/src/extensions/spectra/0000755000175000001440000000000012250371054021444 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/spectra/nmr.h0000644000175000001440000000340612250371054022414 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #ifndef SPECTRATYPE_NMR_H #define SPECTRATYPE_NMR_H #include #include "spectradialog.h" #include "spectratype.h" #include "ui_tab_nmr.h" namespace Avogadro { class NMRSpectra : public SpectraType { Q_OBJECT public: NMRSpectra( SpectraDialog *parent = 0 ); ~NMRSpectra(); void writeSettings(); void readSettings(); bool checkForData(Molecule* mol); void setupPlot(PlotWidget * plot); void getCalculatedPlotObject(PlotObject *plotObject); void setImportedData(const QList & xList, const QList & yList); // virtual void getImportedPlotObject(PlotObject *plotObject); virtual QString getTSV(); public slots: void setAtom(QString symbol); private slots: void setReference(double ref); void updatePlotAxes(); private: Ui::Tab_NMR ui; double m_ref; QHash* > *m_NMRdata; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/spectra/nmr.cpp0000644000175000001440000002227012250371054022747 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "nmr.h" #include "spectradialog.h" #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { NMRSpectra::NMRSpectra( SpectraDialog *parent ) : SpectraType( parent ) { ui.setupUi(m_tab_widget); m_NMRdata = new QHash* >; // Setup signals/slots connect(this, SIGNAL(plotDataChanged()), m_dialog, SLOT(regenerateCalculatedSpectra())); connect(ui.combo_type, SIGNAL(currentIndexChanged(QString)), this, SLOT(setAtom(QString))); connect(ui.spin_ref, SIGNAL(valueChanged(double)), this, SLOT(setReference(double))); connect(ui.push_resetAxes, SIGNAL(clicked()), this, SLOT(updatePlotAxes())); connect(ui.spin_FWHM, SIGNAL(valueChanged(double)), m_dialog, SLOT(regenerateCalculatedSpectra())); connect(ui.cb_labelPeaks, SIGNAL(toggled(bool)), m_dialog, SLOT(regenerateCalculatedSpectra())); readSettings(); } NMRSpectra::~NMRSpectra() { // TODO: Anything to delete? writeSettings(); } void NMRSpectra::writeSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp settings.setValue("spectra/NMR/reference", m_ref); settings.setValue("spectra/NMR/gaussianWidth", ui.spin_FWHM->value()); settings.setValue("spectra/NMR/labelPeaks", ui.cb_labelPeaks->isChecked()); } void NMRSpectra::readSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp setReference(settings.value("spectra/NMR/reference", 0.0).toDouble()); ui.spin_FWHM->setValue(settings.value("spectra/NMR/gaussianWidth",0.0).toDouble()); ui.cb_labelPeaks->setChecked(settings.value("spectra/NMR/labelPeaks",false).toBool()); } /* QWidget * NMRSpectra::getTabWidget() { return m_tab_widget; }*/ void NMRSpectra::getCalculatedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); if (m_xList.isEmpty()) { qWarning() << "NMRSpectra::getCalculatedPlotObject: Empty xList? Refusing to plot."; return; } if (ui.spin_FWHM->value() != 0.0 && ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setEnabled(false); ui.cb_labelPeaks->setChecked(false); } if (ui.spin_FWHM->value() == 0.0 && !ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setEnabled(true); } if (!ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setChecked(false); } if (ui.spin_FWHM->value() == 0.0) { // get singlets for (int i = 0; i < m_xList.size(); i++) { // For NMR shifts, subtract computed isotropic shift FROM value for TMS // otherwise you get negative shifts! -GRH 2011-11-09 double shift = m_ref - m_xList.at(i); // double intensity = m_NMRintensities.at(i); plotObject->addPoint ( shift, 0); if (ui.cb_labelPeaks->isChecked()) { // %L1 uses localized number format (e.g., 10,23 in Europe) plotObject->addPoint( shift, 1.0 /* intensity */, QString("%L1").arg(shift, 0, 'f', 2)); } else { plotObject->addPoint( shift, 1.0 /* intensity */ ); } plotObject->addPoint( shift, 0 ); } } // End singlets else { // Get gaussians // convert FWHM to sigma squared double FWHM = ui.spin_FWHM->value(); gaussianWiden(plotObject, FWHM); /*double s2 = pow( (FWHM / (2.0 * sqrt(2.0 * log(2.0)))), 2.0); // create points QList xPoints = getXPoints(FWHM, 10); for (int i = 0; i < xPoints.size(); i++) { double x = xPoints.at(i); double y = 0; for (int j = 0; j < m_xList.size(); j++) { double t = 1.0; //m_NMRintensities.at(i); double w = m_xList.at(j) - m_ref; y += t * exp( - ( pow( (x - w), 2 ) ) / (2 * s2) ); } plotObject->addPoint(x,y); }*/ // Normalization is probably screwed up, so renormalize the data double max = plotObject->points().first()->y(); double min = max; for(int i = 0; i< plotObject->points().size(); i++) { double cur = plotObject->points().at(i)->y(); if (cur < min) min = cur; if (cur > max) max = cur; } for(int i = 0; i< plotObject->points().size(); i++) { double cur = plotObject->points().at(i)->y(); // cur - min : Shift lowest point of plot to be at zero // 1.0 / (max - min) : Conversion factor for current spread -> fraction of 1 // * 0.97 : makes plot stay away from 0 transmittance // : (easier to see multiple peaks on strong signals) plotObject->points().at(i)->setY( (cur - min) * 1.0 / (max - min) * 0.97); } } // End gaussians updatePlotAxes(); } void NMRSpectra::setImportedData(const QList & xList, const QList & yList) { /*m_xList_imp = new QList (xList); m_yList_imp = new QList (yList);*/ SpectraType::setImportedData(xList, yList); // Normalize intensities double max = m_yList_imp.first(); for (int i = 0; i < m_yList_imp.size(); i++) { if (m_yList_imp.at(i) > max) max = m_yList_imp.at(i); } for (int i = 0; i < m_yList_imp.size(); i++) { double tmp = m_yList_imp.at(i); tmp /= max; m_yList_imp.replace(i,tmp); } } /*void NMRSpectra::getImportedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); for (int i = 0; i < m_xList_imp.size(); i++) plotObject->addPoint(m_xList_imp.at(i), m_yList_imp.at(i)); }*/ QString NMRSpectra::getTSV() { /*QString str; QTextStream out (&str); QString format = "%1\t%2\n"; out << "Isotropic Shift\tIntensities\n"; for(int i = 0; i< m_xList.size(); i++) { out << format.arg(m_xList.at(i), 0, 'g').arg(m_yList.at(i), 0, 'g'); } return str;*/ return SpectraType::getTSV("Isotropic Shift", "Intensities"); } bool NMRSpectra::checkForData(Molecule * mol) { OpenBabel::OBMol obmol = mol->OBMol(); qDeleteAll(*m_NMRdata); m_NMRdata->clear(); ui.combo_type->clear(); // Test for "NMR Isotropic Shift" in first atom bool hasNMR = false; if (obmol.NumAtoms() > 0) if (obmol.GetFirstAtom()->HasData("NMR Isotropic Shift")) hasNMR = true; if (!hasNMR) return false; // Extract data from obmol FOR_ATOMS_OF_MOL(atom,obmol) { QString symbol = QString(OpenBabel::etab.GetSymbol(atom->GetAtomicNum())); double shift = QString(atom->GetData("NMR Isotropic Shift")->GetValue().c_str()).toFloat(); QList *list = new QList; if (m_NMRdata->contains(symbol)) { list = m_NMRdata->value(symbol); } else { // Dump symbol into NMR Type list ui.combo_type->addItem(symbol); } list->append(shift); m_NMRdata->insert(symbol, list); } return true; } void NMRSpectra::setAtom(QString symbol) { if (symbol.isEmpty()) symbol = ui.combo_type->currentText(); if (!m_NMRdata->contains(symbol)) return; m_xList = (*m_NMRdata->value(symbol)); updatePlotAxes(); m_dialog->regenerateCalculatedSpectra(); } void NMRSpectra::updatePlotAxes() { QList tmp (m_xList); qSort(tmp); double FWHM = ui.spin_FWHM->value(); if (tmp.size() == 1) { double center = tmp.first() - m_ref; double ext = 5 + FWHM; m_dialog->getUi()->plot->setDefaultLimits( center + ext, center - ext, 0.0, 1.0 ); } else { double min = tmp.last() - m_ref; double max = tmp.first() - m_ref; double ext; if (fabs(min-max) < 0.1) { // If the spread of the peaks is less than 0.1, the nuclei are likely equivalent, so zoom out a bit. ext = 5; } else { ext = ( min - max ) * 0.1 + FWHM; } m_dialog->getUi()->plot->setDefaultLimits( min + ext, max - ext, 0.0, 1.0 ); } } void NMRSpectra::setReference(double ref) { if (ref == m_ref) { return; } m_ref = ref; ui.spin_ref->setValue(ref); emit plotDataChanged(); } void NMRSpectra::setupPlot(PlotWidget * plot) { plot->setDefaultLimits( 10.0, 0.0, 0.0, 1.0 ); plot->axis(PlotWidget::BottomAxis)->setLabel(tr("Shift (ppm)")); plot->axis(PlotWidget::LeftAxis)->setLabel(""); } } avogadro-1.1.1/libavogadro/src/extensions/spectra/spectraextension.cpp0000644000175000001440000000534112250371054025551 0ustar marcususers/********************************************************************** SpectraExtension - Visualize spectral data from QM calculations Copyright (C) 2009 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "spectraextension.h" #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; using namespace Eigen; namespace Avogadro { SpectraExtension::SpectraExtension(QObject *parent) : Extension(parent), m_dialog(0), m_molecule(NULL) { QAction *action = new QAction( this ); action->setSeparator(true); m_actions.append( action ); action = new QAction(this); action->setText(tr("&Spectra...")); m_actions.append(action); } SpectraExtension::~SpectraExtension() { //TODO: Anything to delete? } QList SpectraExtension::actions() const { return m_actions; } void SpectraExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); if (m_dialog) { m_dialog->writeSettings(); } } void SpectraExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); } QString SpectraExtension::menuPath(QAction *) const { return tr("E&xtensions"); } void SpectraExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; if (m_dialog) m_dialog->setMolecule(molecule); } QUndoCommand* SpectraExtension::performAction( QAction *, GLWidget *widget ) { Q_UNUSED(widget); if (m_molecule == NULL) { return NULL; } if (!m_dialog) { m_dialog = new SpectraDialog(qobject_cast(parent())); m_dialog->setMolecule(m_molecule); } m_dialog->show(); return NULL; } } // end namespace Avogadro Q_EXPORT_PLUGIN2(spectraextension, Avogadro::SpectraExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/spectra/raman.h0000644000175000001440000000302112250371054022707 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ //#ifdef OPENBABEL_IS_NEWER_THAN_2_2_99 #ifndef SPECTRATYPE_RAMAN_H #define SPECTRATYPE_RAMAN_H #include "abstract_ir.h" namespace Avogadro { class RamanSpectra : public AbstractIRSpectra { Q_OBJECT public: RamanSpectra( SpectraDialog *parent = 0 ); ~RamanSpectra(); void writeSettings(); void readSettings(); bool checkForData(Molecule* mol); void setupPlot(PlotWidget * plot); void getCalculatedPlotObject(PlotObject *plotObject); QString getTSV(); private slots: void updateT(double); void updateW(double); private: double m_W; double m_T; QList m_yList_orig; }; } #endif //#endif avogadro-1.1.1/libavogadro/src/extensions/spectra/spectratype.cpp0000644000175000001440000001473112250371054024521 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #include "spectratype.h" #include "spectradialog.h" #include #include #include #include #include #include #include namespace Avogadro { SpectraType::SpectraType( SpectraDialog *parent ) : QObject(parent), m_dialog(parent) { m_tab_widget = new QWidget; } SpectraType::~SpectraType() { clear(); disconnect(m_dialog->getUi()->combo_spectra, SIGNAL(currentIndexChanged(QString)), m_dialog, SLOT(updateCurrentSpectra(QString))); delete m_tab_widget; } void SpectraType::clear() { m_xList.clear(); m_yList.clear(); m_xList_imp.clear(); m_yList_imp.clear(); } void SpectraType::getCalculatedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); for (int i = 0; i < m_xList.size(); i++) plotObject->addPoint(m_xList.at(i), m_yList.at(i)); } void SpectraType::setImportedData(const QList & xList, const QList & yList) { m_xList_imp = xList; m_yList_imp = yList; } void SpectraType::getImportedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); for (int i = 0; i < m_xList_imp.size(); i++) { plotObject->addPoint(m_xList_imp.at(i), m_yList_imp.at(i)); } } QString SpectraType::getTSV(QString xTitle, QString yTitle) { QString str; QTextStream out (&str); QString format = "%1\t%2\n"; out << xTitle << "\t" << yTitle << "\n"; for(int i = 0; i< m_xList.size(); i++) { out << format.arg(m_xList.at(i), 6, 'g').arg(m_yList.at(i), 6, 'g'); } return str; } void SpectraType::updateDataTable() { if ((!m_dialog) || (m_xList.size()==0)) return; //m_dialog->getUi()->dataTable->clear(); m_dialog->getUi()->dataTable->setRowCount(m_xList.size()); QString format("%1"); for (int i = 0; i < m_xList.size(); i++) { QString xString = format.arg(m_xList.at(i), 0, 'f', 2); QString yString; if (i < m_yList.size()) { yString = format.arg(m_yList.at(i), 0, 'f', 3); } else { yString = "-"; } if (!m_dialog->getUi()->dataTable->item(i,0)) { QTableWidgetItem *newX = new QTableWidgetItem(xString); newX->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); QTableWidgetItem *newY = new QTableWidgetItem(yString); newY->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); m_dialog->getUi()->dataTable->setItem(i, 0, newX); m_dialog->getUi()->dataTable->setItem(i, 1, newY); } else { m_dialog->getUi()->dataTable->item(i,0)->setText(xString); m_dialog->getUi()->dataTable->item(i,1)->setText(yString); } } } QList SpectraType::getXPoints(double FWHM, uint dotsPerPeak) { QList xPoints; for (int i = 0; i < m_xList.size(); i++) { double x = m_xList.at(i) - (2*FWHM); for (uint j = 0; j < dotsPerPeak; j++) { xPoints << x; x += 4*FWHM / (int(dotsPerPeak)); } } qSort(xPoints); return xPoints; } void SpectraType::gaussianWiden(PlotObject *plotObject, const double fwhm) { double s2 = pow( (fwhm / (2.0 * sqrt(2.0 * log(2.0)))), 2.0); // create points QList xPoints = getXPoints(fwhm, 10); for (int i = 0; i < xPoints.size(); i++) { double x = xPoints.at(i);// already scaled! double y = 0; for (int j = 0; j < m_yList.size(); j++) { double t = m_yList.at(j); double w = m_xList.at(j);// already scaled! y += t * exp( - ( pow( (x - w), 2 ) ) / (2 * s2) ); } plotObject->addPoint(x,y); } } void SpectraType::assignGaussianLabels(PlotObject *plotObject, bool findMax, double yThreshold) { for(int i = 1; i< plotObject->points().size()-1; i++) { // No border extremal points double y, y1, y2; int m, n; if (findMax) { y = plotObject->points().at(i)->y(); m = 1; n = 1; do { y1 = plotObject->points().at(i-m)->y(); y2 = plotObject->points().at(i+n)->y(); if (y > y1 && y > y2 && y >= yThreshold) { // Point between y1 and y2 is maximum int k = ((i-m)+(i+n))/2; double wavenumber = plotObject->points().at(k)->x(); plotObject->points().at(k)->setLabel(QString("%L1").arg(wavenumber, 0, 'f', 1)); i = i + n; break; } if (y < y1 || y < y2) break; // Is not maximum if ((y == y1) && (i-m-1 >= 0)) m++; if ((y == y2) && (i+n+1 < plotObject->points().size())) n++; }while (y >= y1 && y >=y2 && y >= yThreshold); } else { // Find minima y = plotObject->points().at(i)->y(); m = 1; n = 1; do { y1 = plotObject->points().at(i-m)->y(); y2 = plotObject->points().at(i+n)->y(); if (y < y1 && y < y2 && y <= yThreshold) { // Point between y1 and y2 is mimimum int k = ((i-m)+(i+n))/2; double wavenumber = plotObject->points().at(k)->x(); plotObject->points().at(k)->setLabel(QString("%L1").arg(wavenumber, 0, 'f', 1)); i = i + n; break; } if (y > y1 || y > y2) break; // Is not minimum if ((y == y1) && (i-m-1 >= 0)) m++; if ((y == y2) && (i+n+1 < plotObject->points().size())) n++; }while (y <= y1 && y <=y2 && y <= yThreshold); } } } } avogadro-1.1.1/libavogadro/src/extensions/spectra/spectradialog.ui0000644000175000001440000005701612250371054024635 0ustar marcususers SpectraDialog 0 0 896 480 808 480 Spectra Visualization true 0 0 800 500 CrossCursor Controls: Double left click: Restore default axis limits Right click + drag: Move plot Middle click + drag: Zoom to region Scroll wheel: Zoom to cursor QFrame::StyledPanel QFrame::Raised 0 0 0 0 &Load data... 0 0 &Advanced >> Qt::Horizontal 40 20 0 0 &Close 0 0 0 &Appearance 0 0 true QListView::Adjust 0 0 Calculated Spectra: 0 0 Set Color... Imported Spectra: false 0 0 Set Color... Font: 0 0 Change Font... 0 0 Show true false Show 0 0 Imports a tsv of experimental spectra to overlay on the plot. &Import... 0 0 Background: 0 0 Set Color... 0 0 Foreground: 0 0 Set Color... true 0 0 New... true 0 0 Remove... 0 0 Rename... false Title: false 0 0 TODO 0 0 &Schemes: list_schemes 0 0 &Export... Qt::Horizontal 40 20 E&xport Image false 0 0 &DPI: spin_imageDPI 0 0 &Width: spin_imageWidth true 999999 21 0 0 &Height spin_imageHeight true 999999 13 &Filename: edit_imageFilename true 9999 150 Qt::Horizontal 40 20 ... true cm mm in px 0 0 &Save Image... Qt::Horizontal 40 20 Qt::Vertical 20 40 Use an optimized value for the font size instead of the scheme-specified value (screen to image point sizes don't translate well!) Auto-adjust F&ont Size true 0 0 210 0 Qt::ScrollBarAlwaysOff QAbstractItemView::NoEditTriggers true QAbstractItemView::SingleSelection QAbstractItemView::SelectRows true true false false true x y Export Data 0 0 150 0 QFrame::NoFrame QFrame::Plain Qt::AlignCenter Avogadro::PlotWidget QFrame

avogadro/plotwidget.h
1 combo_spectra list_schemes push_newScheme push_removeScheme push_renameScheme push_colorBackground push_colorForeground push_colorCalculated cb_calculate push_export push_colorImported cb_import push_import push_font lineEdit edit_imageFilename push_imageFilename spin_imageWidth spin_imageHeight combo_imageUnits spin_imageDPI cb_imageFontAdjust push_imageSave pushButton pushButton clicked() SpectraDialog accept() 827 542 199 149 avogadro-1.1.1/libavogadro/src/extensions/spectra/ir.cpp0000644000175000001440000001400012250371054022555 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "ir.h" #include #include #include #include using namespace std; namespace Avogadro { IRSpectra::IRSpectra( SpectraDialog *parent ) : AbstractIRSpectra( parent ) { ui.group_ramanIntensities->hide(); ui.combo_yaxis->addItem(tr("Transmittance (%)")); ui.combo_yaxis->addItem(tr("Absorbance (%)")); readSettings(); } IRSpectra::~IRSpectra() { // TODO: Anything to delete? writeSettings(); } void IRSpectra::writeSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp settings.setValue("spectra/IR/scale", m_scale); settings.setValue("spectra/IR/gaussianWidth", m_fwhm); settings.setValue("spectra/IR/labelPeaks", ui.cb_labelPeaks->isChecked()); settings.setValue("spectra/IR/yAxisUnits", ui.combo_yaxis->currentText()); } void IRSpectra::readSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp m_scale = settings.value("spectra/IR/scale", 1.0).toDouble(); ui.spin_scale->setValue(m_scale); updateScaleSlider(m_scale); m_fwhm = settings.value("spectra/IR/gaussianWidth",0.0).toDouble(); ui.spin_FWHM->setValue(m_fwhm); updateFWHMSlider(m_fwhm); ui.cb_labelPeaks->setChecked(settings.value("spectra/IR/labelPeaks",false).toBool()); QString yunit = settings.value("spectra/IR/yAxisUnits",tr("Transmittance (%)")).toString(); updateYAxis(yunit); if (yunit == "Absorbance (%)") ui.combo_yaxis->setCurrentIndex(1); emit plotDataChanged(); } bool IRSpectra::checkForData(Molecule * mol) { OpenBabel::OBMol obmol = mol->OBMol(); OpenBabel::OBVibrationData *vibrations = static_cast(obmol.GetData(OpenBabel::OBGenericDataType::VibrationData)); if (!vibrations) return false; // OK, we have valid vibrations, so store them for later vector wavenumbers = vibrations->GetFrequencies(); vector intensities = vibrations->GetIntensities(); // Case where there are no intensities, set all intensities to an arbitrary value, i.e. 1.0 if (wavenumbers.size() > 0 && intensities.size() == 0) { // Warn user QMessageBox::information(m_dialog, tr("No intensities"), tr("The vibration data in the molecule you have loaded does not have any intensity data. Intensities have been set to an arbitrary value for visualization.")); for (uint i = 0; i < wavenumbers.size(); i++) { intensities.push_back(1.0); } } // Normalize intensities into transmittances double maxIntensity=0; for (unsigned int i = 0; i < intensities.size(); i++) { if (intensities.at(i) >= maxIntensity) { maxIntensity = intensities.at(i); } } vector absorbances; for (unsigned int i = 0; i < intensities.size(); i++) { double t = intensities.at(i); if (maxIntensity != 0) { t = t / maxIntensity; // Normalize } t *= 100.0; // Convert to percent absorbances.push_back(t); } // Store in member vars m_xList.clear(); m_xList_orig.clear(); m_yList.clear(); for (uint i = 0; i < wavenumbers.size(); i++){ double w = wavenumbers.at(i); m_xList.append(w*scale(w)); m_xList_orig.append(w); m_yList.append(absorbances.at(i)); } return true; } void IRSpectra::setupPlot(PlotWidget * plot) { plot->setDefaultLimits( 3500.0, 400.0, 0.0, 100.0 ); plot->axis(PlotWidget::BottomAxis)->setLabel(tr("Wavenumber (cm-1)")); plot->axis(PlotWidget::LeftAxis)->setLabel(m_yaxis); } void IRSpectra::getCalculatedPlotObject(PlotObject *plotObject) { AbstractIRSpectra::getCalculatedPlotObject(plotObject); // Convert to transmittance? if (ui.combo_yaxis->currentIndex() == 0) { for(int i = 0; i< plotObject->points().size(); i++) { double transmittance = 100 - plotObject->points().at(i)->y(); plotObject->points().at(i)->setY(transmittance); } } // Add labels for gaussians? if ((m_fwhm != 0.0) && (ui.cb_labelPeaks->isChecked())) { if (ui.combo_yaxis->currentIndex() == 1) { assignGaussianLabels(plotObject, true, m_labelYThreshold); m_dialog->labelsUp(true); } else { assignGaussianLabels(plotObject, false, 100-m_labelYThreshold); m_dialog->labelsUp(false); } } } void IRSpectra::setImportedData(const QList & xList, const QList & yList) { m_xList_imp = xList; m_yList_imp = yList; // Convert y values to percents from fraction, if necessary... bool convert = true; for (int i = 0; i < m_yList_imp.size(); i++) { if (m_yList_imp.at(i) > 1.5) { // If transmittances exist greater than this, they're already in percent. convert = false; break; } } if (convert) { for (int i = 0; i < m_yList_imp.size(); i++) { double tmp = m_yList_imp.at(i); tmp *= 100; m_yList_imp.replace(i, tmp); } } } QString IRSpectra::getTSV() { return SpectraType::getTSV("Frequencies", "Intensities"); } } avogadro-1.1.1/libavogadro/src/extensions/spectra/vibrationwidget.cpp0000644000175000001440000002714512250371054025362 0ustar marcususers/********************************************************************** VibrationWidget - Visualize and animate vibrational modes Copyright (C) 2009 by Geoffrey Hutchison Some portions Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "vibrationwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; using namespace std; namespace Avogadro { VibrationWidget::VibrationWidget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), m_widget(0), m_molecule(0), m_vibrations(0), m_indexMap(0), m_currentRow(0), m_filter(0) { ui.setupUi(this); // Make sure the columns span the whole width of the table widget QHeaderView *horizontal = ui.vibrationTable->horizontalHeader(); horizontal->setResizeMode(QHeaderView::Stretch); ui.editFilter->setValidator(new QDoubleValidator(0, 1e6, 10, ui.editFilter)); m_indexMap = new std::vector; connect(ui.editFilter, SIGNAL(textChanged(QString)), this, SLOT(changeFilter(QString))); connect(ui.vibrationTable, SIGNAL(currentCellChanged(int, int, int, int)), this, SLOT(currentCellChanged(int, int, int, int))); connect(ui.vibrationTable, SIGNAL(cellClicked(int, int)), this, SLOT(cellClicked(int, int))); connect(ui.scaleSlider, SIGNAL(valueChanged(int)), this, SLOT(setScale(int))); connect(ui.displayForcesCheckBox, SIGNAL(toggled(bool)), this, SLOT(setDisplayForceVectors(bool))); connect(ui.normalizeDispCheckBox, SIGNAL(toggled(bool)), this, SLOT(setNormalize(bool))); connect(ui.animationSpeedCheckBox, SIGNAL(toggled(bool)), this, SLOT(setAnimationSpeed(bool))); connect(ui.animationButton, SIGNAL(clicked(bool)), this, SLOT(animateButtonClicked(bool))); connect(ui.pauseButton, SIGNAL(clicked(bool)), this, SLOT(pauseButtonClicked(bool))); connect(ui.spectraButton, SIGNAL(clicked()), this, SLOT(spectraButtonClicked())); } VibrationWidget::~VibrationWidget() { // The real work is done in VibrationExtension emit selectedMode(-1); // stop animating hide(); } void VibrationWidget::setMolecule(Molecule *molecule) { // update table ui.vibrationTable->clearContents(); if (molecule == 0){ ui.vibrationTable->setRowCount(0); ui.vibrationTable->horizontalHeader()->hide(); return; } m_molecule = molecule; OBMol obmol = molecule->OBMol(); m_vibrations = static_cast(obmol.GetData(OBGenericDataType::VibrationData)); if (!m_vibrations) { ui.vibrationTable->setRowCount(0); ui.vibrationTable->horizontalHeader()->hide(); //ui.exportButton->setEnabled(false); return; } ui.vibrationTable->horizontalHeader()->show(); ui.vibrationTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch); // OK, we have valid vibrations, so add them to the table vector frequencies = m_vibrations->GetFrequencies(); vector intensities = m_vibrations->GetIntensities(); m_frequencies = frequencies; m_intensities = intensities; vector raman_activities = m_vibrations->GetRamanActivities(); if (raman_activities.size() == 0) { //resize(274, height()); ui.vibrationTable->setColumnCount(2); if(parentWidget()) parentWidget()->setMinimumWidth(274); } else { //resize(310, height()); ui.vibrationTable->setColumnCount(3); ui.vibrationTable->setHorizontalHeaderItem(2, new QTableWidgetItem("Activity")); if(parentWidget()) parentWidget()->setMinimumWidth(310); } // Generate an index vector to map sorted indicies to the old indices m_indexMap->clear(); for (uint i = 0; i < frequencies.size(); i++) m_indexMap->push_back(i); // Setup progress dialog, just in case it takes longer than 2 seconds QProgressDialog prog(tr("Sorting %1 vibrations by frequency...") .arg(frequencies.size()), "", 0, frequencies.size()); prog.setWindowModality(Qt::WindowModal); prog.setMinimumDuration(2000); prog.setCancelButton(0); // Simple selection sort double tmp; int tmp_int; for (uint i = 0; i < frequencies.size(); i++) { for (uint j = i; j < frequencies.size(); j++) { if (i == j) continue; // Save a bit of time... if (frequencies.at(j) < frequencies.at(i)) { tmp = frequencies.at(j); frequencies.at(j) = frequencies.at(i); frequencies.at(i) = tmp; tmp = intensities.at(j); intensities.at(j) = intensities.at(i); intensities.at(i) = tmp; tmp_int = m_indexMap->at(j); m_indexMap->at(j) = m_indexMap->at(i); m_indexMap->at(i) = tmp_int; } } // Update progress bar prog.setValue(i); } ui.vibrationTable->setRowCount(frequencies.size()); QString format("%1"); for (unsigned int row = 0; row < frequencies.size(); ++row) { QTableWidgetItem *newFreq = new QTableWidgetItem(format.arg(frequencies[row], 0, 'f', 2)); newFreq->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); // Some codes don't provide intensity data. Display "-" in place of intensities. QTableWidgetItem *newInten; if (row >= intensities.size()) { newInten = new QTableWidgetItem("-"); } else { newInten = new QTableWidgetItem(format.arg(intensities[row], 0, 'f', 3)); } QTableWidgetItem *newRaman; if (row >= raman_activities.size()) { newRaman = new QTableWidgetItem("-"); } else { newRaman = new QTableWidgetItem(format.arg(raman_activities[row], 0, 'f', 3)); } newRaman->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); newInten->setTextAlignment(Qt::AlignRight|Qt::AlignVCenter); ui.vibrationTable->setItem(row, 0, newFreq); ui.vibrationTable->setItem(row, 1, newInten); ui.vibrationTable->setItem(row, 2, newRaman); } // enable export button //ui.exportButton->setEnabled(true); } void VibrationWidget::changeFilter(QString str) { m_filter = str.toDouble(); for (size_t i = 0; i < m_frequencies.size(); ++i) { if (i < m_intensities.size()) { if (m_intensities.at(i) > m_filter) ui.vibrationTable->showRow(i); else ui.vibrationTable->hideRow(i); } } } void VibrationWidget::currentCellChanged(int row, int, int, int) { if (row != -1 && !ui.animationButton->isEnabled()) ui.animationButton->setEnabled(true); m_currentRow = row; if (row == -1) emit selectedMode(row); else emit selectedMode(m_indexMap->at(row)); } void VibrationWidget::cellClicked(int row, int) { if (row != -1 && !ui.animationButton->isEnabled()) ui.animationButton->setEnabled(true); m_currentRow = row; if (row == -1) emit selectedMode(row); else emit selectedMode(m_indexMap->at(row)); } void VibrationWidget::reject() { emit selectedMode(-1); // stop animating hide(); } void VibrationWidget::setScale(int scale) { emit scaleUpdated(scale / 2.0); } void VibrationWidget::setScale(double scale) { emit scaleUpdated(scale); } void VibrationWidget::setNormalize(bool checked) { if (checked != ui.normalizeDispCheckBox->isChecked()) ui.normalizeDispCheckBox->setChecked(checked); emit normalizeUpdated(checked); } void VibrationWidget::setDisplayForceVectors(bool checked) { if (checked != ui.displayForcesCheckBox->isChecked()) ui.displayForcesCheckBox->setChecked(checked); emit forceVectorUpdated(checked); } void VibrationWidget::setAnimationSpeed(bool checked) { if (checked != ui.animationSpeedCheckBox->isChecked()) ui.animationSpeedCheckBox->setChecked(checked); emit animationSpeedUpdated(checked); } void VibrationWidget::animateButtonClicked(bool) { if (ui.animationButton->text() == tr("Start &Animation")) { ui.animationButton->setText(tr("Stop &Animation")); ui.animationButton->setIcon(QIcon(":/amarok/icons/amarok_stop.png")); ui.pauseButton->setText(tr("Pause")); ui.pauseButton->setEnabled(true); if (m_currentRow == -1) emit selectedMode(m_currentRow); else emit selectedMode(m_indexMap->at(m_currentRow)); } else { ui.animationButton->setText(tr("Start &Animation")); ui.animationButton->setIcon(QIcon(":/amarok/icons/amarok_play.png")); ui.pauseButton->setText(tr("Pause")); ui.pauseButton->setEnabled(false); } emit toggleAnimation(); } void VibrationWidget::pauseButtonClicked(bool) { if (ui.pauseButton->text() == tr("Pause")) { ui.pauseButton->setText(tr("Continue")); } else { ui.pauseButton->setText(tr("Pause")); } emit pauseAnimation(); } void VibrationWidget::spectraButtonClicked() { emit showSpectra(); } /* void VibrationWidget::exportVibrationData(bool) { QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if (defaultPath.isEmpty()) defaultPath = QDir::homePath(); QString defaultFileName = defaultPath + '/' + defaultFile.baseName() + ".tsv"; QString filename = QFileDialog::getSaveFileName(this, tr("Export Vibrational Data"), defaultFileName, tr("Tab Separated Values (*.tsv)")); QFile file (filename); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qWarning() << "Cannot open file " << filename << " for writing!"; return; } OBMol obmol = m_molecule->OBMol(); m_vibrations = static_cast(obmol.GetData(OBGenericDataType::VibrationData)); if (!m_vibrations) { qWarning("No vibration data, but export button is enabled? Something is broken."); return; } vector frequencies = m_vibrations->GetFrequencies(); vector intensities = m_vibrations->GetIntensities(); QTextStream out(&file); out << "Frequencies\tIntensities\n"; QString format = "%1\t%2\n"; for (unsigned int line = 0; line < frequencies.size(); ++line) { QString intensity; // we can't trust that we'll actually get intensities // some formats don't report them if (line >= intensities.size()) intensity = '-'; else intensity = QString("%L1").arg(intensities[line], 0, 'f', 2); out << format.arg(frequencies[line], 0, 'f', 2).arg(intensity); } file.close(); return; }*/ } // namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/spectra/raman.cpp0000644000175000001440000001541512250371054023254 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include #include "raman.h" #include #include #include const double k=1.3806504e-23, h=6.62606896e-34, c=2.99792458e10; // speed of light (cm/s!) using namespace std; namespace Avogadro { RamanSpectra::RamanSpectra( SpectraDialog *parent ) : AbstractIRSpectra( parent ) { // Setup signals/slots connect(ui.spin_T, SIGNAL(valueChanged(double)), this, SLOT(updateT(double))); connect(ui.spin_W, SIGNAL(valueChanged(double)), this, SLOT(updateW(double))); ui.combo_yaxis->addItem(tr("Activity"));// (A4/amu)")); ui.combo_yaxis->addItem(tr("Intensity")); readSettings(); } RamanSpectra::~RamanSpectra() { // TODO: Anything to delete? writeSettings(); } void RamanSpectra::writeSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp settings.setValue("spectra/Raman/scale", m_scale); settings.setValue("spectra/Raman/gaussianWidth", m_fwhm); settings.setValue("spectra/Raman/experimentTemperature", m_T); settings.setValue("spectra/Raman/laserWavenumber", m_W); settings.setValue("spectra/Raman/labelPeaks", ui.cb_labelPeaks->isChecked()); settings.setValue("spectra/Raman/yAxisUnits", ui.combo_yaxis->currentText()); } void RamanSpectra::readSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp m_scale = settings.value("spectra/Raman/scale", 1.0).toDouble(); ui.spin_scale->setValue(m_scale); updateScaleSlider(m_scale); m_fwhm = settings.value("spectra/Raman/gaussianWidth",0.0).toDouble(); ui.spin_FWHM->setValue(m_fwhm); updateFWHMSlider(m_fwhm); m_T = settings.value("spectra/Raman/experimentTemperature", 298.15).toDouble(); ui.spin_T->setValue(m_T); m_W = settings.value("spectra/Raman/laserWavenumber", 9398.5).toDouble(); ui.spin_W->setValue(m_W); ui.cb_labelPeaks->setChecked(settings.value("spectra/Raman/labelPeaks",false).toBool()); QString yunit = settings.value("spectra/Raman/yAxisUnits",tr("Activity")).toString(); updateYAxis(yunit); if (yunit == "Intensity") ui.combo_yaxis->setCurrentIndex(1); emit plotDataChanged(); } bool RamanSpectra::checkForData(Molecule * mol) { OpenBabel::OBMol obmol = mol->OBMol(); OpenBabel::OBVibrationData *vibrations = static_cast(obmol.GetData(OpenBabel::OBGenericDataType::VibrationData)); if (!vibrations) return false; // OK, we have valid vibrations, so store them for later vector wavenumbers = vibrations->GetFrequencies(); vector intensities = vibrations->GetRamanActivities(); if (wavenumbers.size() == 0 || intensities.size() == 0) return false; /* Case where there are no intensities, set all intensities to an arbitrary value, i.e. 1.0 if (wavenumbers.size() > 0 && intensities.size() == 0) { // Warn user //QMessageBox::information(m_dialog, tr("No intensities"), tr("The vibration data in the molecule you have loaded does not have any intensity data. Intensities have been set to an arbitrary value for visualization.")); for (uint i = 0; i < wavenumbers.size(); i++) { intensities.push_back(1.0); } }*/ // double maxIntensity=0; for (unsigned int i = 0; i < intensities.size(); i++) { if (intensities.at(i) >= maxIntensity) { maxIntensity = intensities.at(i); } } /*vector transmittances;*/ for (unsigned int i = 0; i < intensities.size(); i++) { intensities[i] = intensities.at(i) / maxIntensity; // Normalize } // Store in member vars m_xList.clear(); m_xList_orig.clear(); m_yList.clear(); m_yList_orig.clear(); for (uint i = 0; i < wavenumbers.size(); i++){ double w = wavenumbers.at(i); m_xList.append(w*scale(w)); m_xList_orig.append(w); m_yList.append(intensities.at(i)); m_yList_orig.append(intensities.at(i)); } return true; } void RamanSpectra::setupPlot(PlotWidget * plot) { plot->setDefaultLimits( 3500.0, 0.0, 0.0, 1.0 ); plot->axis(PlotWidget::BottomAxis)->setLabel(tr("Wavenumber (cm-1)")); plot->axis(PlotWidget::LeftAxis)->setLabel(m_yaxis); } void RamanSpectra::getCalculatedPlotObject(PlotObject *plotObject) { for(int i = 0; i< m_yList.size(); i++) { // Convert to intensities? if (ui.combo_yaxis->currentIndex() == 1) { m_yList[i] = m_yList_orig.at(i)*1e-8/m_xList.at(i) * pow(((m_W - m_xList.at(i))),4) * (1 + exp(-h*c*m_xList.at(i)/(k*m_T))); } else { m_yList[i] = m_yList_orig.at(i); } } AbstractIRSpectra::getCalculatedPlotObject(plotObject); // Add labels for gaussians? if ((m_fwhm != 0.0) && (ui.cb_labelPeaks->isChecked())) { assignGaussianLabels(plotObject, true, m_labelYThreshold); m_dialog->labelsUp(true); } } /*void RamanSpectra::setImportedData(const QList & xList, const QList & yList) { m_xList_imp = new QList (xList); m_yList_imp = new QList (yList); SpectraType::setImportedData(xList, yList); // Convert y values to percents from fraction, if necessary... bool convert = true; for (int i = 0; i < m_yList_imp.size(); i++) { if (m_yList_imp.at(i) > 1.5) { // If transmittances exist greater than this, they're already in percent. convert = false; break; } } if (convert) { for (int i = 0; i < m_yList.size(); i++) { double tmp = m_yList.at(i); tmp *= 100; m_yList.replace(i, tmp); } } }*/ QString RamanSpectra::getTSV() { return SpectraType::getTSV("Frequencies", "Activities"); } void RamanSpectra::updateT(double T) { m_T = T; emit plotDataChanged(); } void RamanSpectra::updateW(double W) { m_W = W; emit plotDataChanged(); } } avogadro-1.1.1/libavogadro/src/extensions/spectra/dos.h0000644000175000001440000000344012250371054022403 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ //#ifdef OPENBABEL_IS_NEWER_THAN_2_2_99 #ifndef SPECTRATYPE_DOS_H #define SPECTRATYPE_DOS_H #include #include #include "spectradialog.h" #include "spectratype.h" #include "ui_tab_dos.h" namespace Avogadro { class DOSSpectra : public SpectraType { Q_OBJECT public: DOSSpectra( SpectraDialog *parent = 0 ); ~DOSSpectra(); void writeSettings(); void readSettings(); bool checkForData(Molecule* mol); void setupPlot(PlotWidget * plot); void getCalculatedPlotObject(PlotObject *plotObject); //void setImportedData(const QList & xList, const QList & yList); void getImportedPlotObject(PlotObject *plotObject); QString getTSV(); void updateDataTable() {} public slots: void toggleIntegratedDOS(bool b); private: Ui::Tab_DOS ui; std::vector *m_intDOS; double m_fermi; uint m_numAtoms; }; } #endif //#endif avogadro-1.1.1/libavogadro/src/extensions/spectra/cd.cpp0000644000175000001440000001476112250371054022547 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include #include "cd.h" #include #include #include using namespace std; namespace Avogadro { CDSpectra::CDSpectra( SpectraDialog *parent ) : SpectraType( parent ) { ui.setupUi(m_tab_widget); m_yListVelocity = new QList; m_yListLength = new QList; // Setup signals/slots connect(this, SIGNAL(plotDataChanged()), m_dialog, SLOT(regenerateCalculatedSpectra())); connect(ui.cb_labelPeaks, SIGNAL(toggled(bool)), this, SIGNAL(plotDataChanged())); connect(ui.spin_FWHM, SIGNAL(valueChanged(double)), this, SIGNAL(plotDataChanged())); connect(ui.combo_rotatoryType, SIGNAL(currentIndexChanged(QString)), this, SLOT(rotatoryTypeChanged(QString))); readSettings(); } CDSpectra::~CDSpectra() { // TODO: Anything to delete? writeSettings(); } void CDSpectra::writeSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp settings.setValue("spectra/CD/gaussianWidth", ui.spin_FWHM->value()); settings.setValue("spectra/CD/labelPeaks", ui.cb_labelPeaks->isChecked()); } void CDSpectra::readSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp ui.spin_FWHM->setValue(settings.value("spectra/CD/gaussianWidth",0.0).toDouble()); ui.cb_labelPeaks->setChecked(settings.value("spectra/CD/labelPeaks",false).toBool()); } bool CDSpectra::checkForData(Molecule * mol) { OpenBabel::OBMol obmol = mol->OBMol(); OpenBabel::OBElectronicTransitionData *etd = static_cast(obmol.GetData("ElectronicTransitionData")); if (!etd) return false; if ( etd->GetRotatoryStrengthsVelocity().size() == 0 && etd->GetRotatoryStrengthsLength().size() == 0 ) return false; // OK, we have valid data, so store them for later std::vector wavelengths = etd->GetWavelengths(); std::vector rotl = etd->GetRotatoryStrengthsLength(); std::vector rotv = etd->GetRotatoryStrengthsVelocity(); ui.combo_rotatoryType->clear(); if (rotl.size() != 0) ui.combo_rotatoryType->addItem("Length"); if (rotv.size() != 0) ui.combo_rotatoryType->addItem("Velocity"); // Store in member vars m_xList.clear(); m_yList.clear(); for (uint i = 0; i < wavelengths.size(); i++) m_xList.append(wavelengths.at(i)); for (uint i = 0; i < rotl.size(); i++) m_yListLength->append(rotl.at(i)); for (uint i = 0; i < rotv.size(); i++) m_yListVelocity->append(rotv.at(i)); rotatoryTypeChanged(ui.combo_rotatoryType->currentText()); return true; } void CDSpectra::setupPlot(PlotWidget * plot) { plot->scaleLimits(); plot->axis(PlotWidget::BottomAxis)->setLabel(tr("Wavelength (nm)")); plot->axis(PlotWidget::LeftAxis)->setLabel(tr("Intensity (arb. units)")); } // QWidget * CDSpectra::getTabWidget() {return m_tab_widget;} void CDSpectra::getCalculatedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); if (ui.spin_FWHM->value() != 0.0 && ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setEnabled(false); ui.cb_labelPeaks->setChecked(false); } if (ui.spin_FWHM->value() == 0.0 && !ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setEnabled(true); } if (!ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setChecked(false); } if (m_xList.size() < 1 && m_yList.size() < 1) return; double wavelength, intensity; double FWHM = ui.spin_FWHM->value(); bool use_widening = (FWHM == 0) ? false : true; if (use_widening) { // convert FWHM to sigma squared double s2 = pow( (FWHM / (2.0 * sqrt(2.0 * log(2.0)))), 2.0); // create points QList xPoints = getXPoints(FWHM, 25); for (int i = 0; i < xPoints.size(); i++) { double x = xPoints.at(i); double y = 0.0; for (int j = 0; j < m_yList.size(); j++) { double t = m_yList.at(j); double w = m_xList.at(j); y += t * exp( - ( pow( (x - w), 2 ) ) / (2 * s2) ) / (22.97 * x / 1241) // <-- normalization constant (22.97 / X_0) / sqrt(2 * M_PI * s2); // <-- gaussian normalization } plotObject->addPoint(x,y); } } else { for (int i = 0; i < m_yList.size(); i++) { wavelength = m_xList.at(i); intensity = m_yList.at(i) / (22.97 * wavelength / 1241) ; // <-- normalization constant (22.97 / X_0) plotObject->addPoint ( wavelength, 0 ); if (ui.cb_labelPeaks->isChecked()) { // %L1 uses localized number format (e.g., 1.023,4 in Europe) plotObject->addPoint( wavelength, intensity, QString("%L1").arg(wavelength, 0, 'f', 1) ); } else { plotObject->addPoint ( wavelength, intensity ); } plotObject->addPoint ( wavelength, 0 ); } } } /*void CDSpectra::setImportedData(const QList & xList, const QList & yList) { m_xList_imp = new QList (xList); m_yList_imp = new QList (yList); }*/ /*void CDSpectra::getImportedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); for (int i = 0; i < m_xList_imp.size(); i++) plotObject->addPoint(m_xList_imp.at(i), m_yList_imp.at(i)); }*/ QString CDSpectra::getTSV() { return SpectraType::getTSV("Wavelength (nm)", "Intensity (arb)"); } void CDSpectra::rotatoryTypeChanged(const QString & str) { if (str == "Velocity") m_yList = (*m_yListVelocity); else if (str == "Length") m_yList = (*m_yListLength); emit plotDataChanged(); } } avogadro-1.1.1/libavogadro/src/extensions/spectra/spectradialog.cpp0000644000175000001440000011625012250371054024776 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "spectradialog.h" #include "spectratype.h" #include "ir.h" #include "nmr.h" #include "dos.h" #include "uv.h" #include "cd.h" #include "raman.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; using namespace std; namespace Avogadro { SpectraDialog::SpectraDialog( QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { ui.setupUi(this); setWindowFlags(Qt::Window); ui.dataTable->horizontalHeader()->setResizeMode(QHeaderView::Stretch); // Set up spectra variables m_spectra_ir = new IRSpectra(this); m_spectra_nmr = new NMRSpectra(this); m_spectra_dos = new DOSSpectra(this); m_spectra_uv = new UVSpectra(this); m_spectra_cd = new CDSpectra(this); m_spectra_raman = new RamanSpectra(this); // Initialize vars m_schemes = new QList >; // Hide advanced options initially ui.tab_widget->hide(); ui.dataTable->hide(); ui.push_exportData->hide(); // setting the limits for the plot ui.plot->setAntialiasing(true); ui.plot->setMouseTracking(true); ui.plot->setDefaultLimits( 4000.0, 400.0, 0.0, 100.0 ); ui.plot->setJailedInDefaults(true); ui.plot->axis(PlotWidget::BottomAxis)->setLabel(tr("X Axis")); ui.plot->axis(PlotWidget::LeftAxis)->setLabel(tr("Y Axis")); m_calculatedSpectra = new PlotObject (Qt::red, PlotObject::Lines, 2); m_importedSpectra = new PlotObject (Qt::white, PlotObject::Lines, 2); m_nullSpectra = new PlotObject (Qt::white, PlotObject::Lines, 2); // Used to replace disabled plot objects ui.plot->addPlotObject(m_calculatedSpectra); // index 0 ui.plot->addPlotObject(m_importedSpectra); // index 1 // Scheme connections connect(ui.list_schemes, SIGNAL(currentRowChanged(int)), this, SLOT(updateScheme(int))); connect(ui.push_newScheme, SIGNAL(clicked()), this, SLOT(addScheme())); connect(ui.push_renameScheme, SIGNAL(clicked()), this, SLOT(renameScheme())); connect(ui.push_removeScheme, SIGNAL(clicked()), this, SLOT(removeScheme())); connect(ui.push_colorBackground, SIGNAL(clicked()), this, SLOT(changeBackgroundColor())); connect(ui.push_colorForeground, SIGNAL(clicked()), this, SLOT(changeForegroundColor())); connect(ui.push_colorCalculated, SIGNAL(clicked()), this, SLOT(changeCalculatedSpectraColor())); connect(ui.push_colorImported, SIGNAL(clicked()), this, SLOT(changeImportedSpectraColor())); connect(ui.push_font, SIGNAL(clicked()), this, SLOT(changeFont())); // Image export connections connect(ui.push_imageSave, SIGNAL(clicked()), this, SLOT(saveImage())); connect(ui.push_imageFilename, SIGNAL(clicked()), this, SLOT(saveImageFileDialog())); // Plot connections connect(ui.cb_import, SIGNAL(toggled(bool)), this, SLOT(toggleImported(bool))); connect(ui.cb_calculate, SIGNAL(toggled(bool)), this, SLOT(toggleCalculated(bool))); connect(ui.push_import, SIGNAL(clicked()), this, SLOT(importSpectra())); connect(ui.push_export, SIGNAL(clicked()), this, SLOT(exportSpectra())); connect(ui.push_exportData, SIGNAL(clicked()), this, SLOT(exportSpectra())); connect(ui.plot, SIGNAL(mouseOverPoint(double,double)), this, SLOT(showCoordinates(double,double))); // Misc. connections connect(ui.combo_spectra, SIGNAL(currentIndexChanged(QString)), this, SLOT(updateCurrentSpectra(QString))); connect(ui.tab_widget, SIGNAL(currentChanged(int)), this, SLOT(updateComboSpectra(int))); connect(ui.push_advanced, SIGNAL(clicked()), this, SLOT(toggleAdvanced())); connect(ui.push_loadSpectra, SIGNAL(clicked()), this, SLOT(loadSpectra())); readSettings(); } SpectraDialog::~SpectraDialog() { writeSettings(); delete m_spectra_ir; delete m_spectra_nmr; delete m_spectra_dos; delete m_spectra_uv; delete m_spectra_cd; delete m_spectra_raman; } void SpectraDialog::setMolecule(Molecule *molecule) { if (!molecule) { return; } m_molecule = molecule; m_spectra_ir->clear(); m_spectra_nmr->clear(); m_spectra_dos->clear(); m_spectra_uv->clear(); m_spectra_cd->clear(); m_spectra_raman->clear(); updatePlot(); // set the filename in the image export widget QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if (defaultPath.isEmpty()) { defaultPath = QDir::homePath(); } ui.edit_imageFilename->setText(defaultPath + '/' + defaultFile.baseName() + ".png"); // Empty the tab widget and spectra combo box when the molecule changes, // only adding in the entries appropriate to the molecule as needed ui.combo_spectra->clear(); ui.tab_widget->clear(); ui.tab_widget->addTab(ui.tab_appearance, tr("&Appearance")); ui.tab_widget->addTab(ui.tab_imageExport, tr("E&xport Image")); // Check for IR data bool hasIR = m_spectra_ir->checkForData(m_molecule); if (hasIR) { ui.combo_spectra->addItem(tr("Infrared", "Infrared spectra option")); ui.tab_widget->addTab(m_spectra_ir->getTabWidget(), tr("&Infrared Spectra Settings")); } // Check for NMR data bool hasNMR = m_spectra_nmr->checkForData(m_molecule); if (hasNMR) { ui.combo_spectra->addItem(tr("NMR", "NMR spectra option")); ui.tab_widget->addTab(m_spectra_nmr->getTabWidget(), tr("&NMR Spectra Settings")); m_spectra_nmr->setAtom(""); // Empty string will grab from current selection in the dialog. } // Check for DOS data bool hasDOS = m_spectra_dos->checkForData(m_molecule); if (hasDOS) { ui.combo_spectra->addItem(tr("DOS", "Density of States")); ui.tab_widget->addTab(m_spectra_dos->getTabWidget(), tr("&Density Of States Settings")); } // Check for UV data bool hasUV = m_spectra_uv->checkForData(m_molecule); if (hasUV) { ui.combo_spectra->addItem(tr("UV", "Ultra-Violet spectrum")); ui.tab_widget->addTab(m_spectra_uv->getTabWidget(), tr("&UV Settings")); } // Check for CD data bool hasCD = m_spectra_cd->checkForData(m_molecule); if (hasCD) { ui.combo_spectra->addItem(tr("CD", "Circular Dichromism spectrum")); ui.tab_widget->addTab(m_spectra_cd->getTabWidget(), tr("&CD Settings")); } // Check for Raman data bool hasRaman = m_spectra_raman->checkForData(m_molecule); if (hasRaman) { ui.combo_spectra->addItem(tr("Raman", "Raman spectrum")); ui.tab_widget->addTab(m_spectra_raman->getTabWidget(), tr("&Raman Settings")); } // Change this when other spectra are added!! if (!hasIR && !hasNMR && !hasDOS && !hasUV && !hasCD && !hasRaman) { // Actions if there are no spectra loaded qWarning() << "SpectraDialog::setMolecule: No spectra available!"; ui.combo_spectra->addItem(tr("No data")); ui.push_colorCalculated->setEnabled(false); ui.cb_calculate->setEnabled(false); ui.cb_calculate->setChecked(false); return; } else { // Actions for all spectra ui.push_colorCalculated->setEnabled(true); ui.cb_calculate->setEnabled(true); ui.cb_calculate->setChecked(true); } // Set the appearances tab to be opened by default QSettings settings; // Already set up in avogadro/src/main.cpp ui.tab_widget->setCurrentIndex(0); int i = settings.value("spectra/currentSpectra", 0).toInt(); if ((i < ui.combo_spectra->count()) && (i>0)) { ui.combo_spectra->setCurrentIndex(i); } else { ui.combo_spectra->setCurrentIndex(0); } updateCurrentSpectra( ui.combo_spectra->currentText() ); //regenerateCalculatedSpectra(); } void SpectraDialog::writeSettings() const { QSettings settings; // Already set up in avogadro/src/main.cpp settings.setValue("spectra/currentSpectra", ui.combo_spectra->currentIndex()); settings.setValue("spectra/image/width", ui.spin_imageWidth->value()); settings.setValue("spectra/image/height", ui.spin_imageHeight->value()); settings.setValue("spectra/image/units", ui.combo_imageUnits->currentIndex()); settings.setValue("spectra/image/DPI", ui.spin_imageDPI->value()); settings.setValue("spectra/image/optimizeFontSize", ui.cb_imageFontAdjust->isChecked()); settings.setValue("spectra/currentScheme", m_scheme); settings.beginWriteArray("spectra/schemes"); for (int i = 0; i < m_schemes->size(); ++i) { settings.setArrayIndex(i); settings.setValue("scheme", m_schemes->at(i)); } settings.endArray(); } void SpectraDialog::readSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp ui.spin_imageWidth->setValue(settings.value("spectra/image/width", 21).toInt()); ui.spin_imageHeight->setValue(settings.value("spectra/image/height", 10).toInt()); ui.combo_imageUnits->setCurrentIndex(settings.value("spectra/image/units", 0).toInt()); ui.spin_imageDPI->setValue(settings.value("spectra/image/DPI", 150).toInt()); ui.cb_imageFontAdjust->setChecked(settings.value("spectra/image/optimizeFontSize", true).toBool()); int scheme = settings.value("spectra/currentScheme", 0).toInt(); int size = settings.beginReadArray("spectra/schemes"); m_schemes = new QList >; for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); m_schemes->append(settings.value("scheme").toHash()); new QListWidgetItem(m_schemes->at(i)["name"].toString(), ui.list_schemes); } settings.endArray(); // create scheme list if it doesn't already exist if (m_schemes->isEmpty()) { // dark QHash dark; dark["name"] = tr("Dark"); dark["backgroundColor"] = Qt::black; dark["foregroundColor"] = Qt::white; dark["calculatedColor"] = Qt::red; dark["importedColor"] = Qt::gray; dark["font"] = QFont(); new QListWidgetItem(dark["name"].toString(), ui.list_schemes); m_schemes->append(dark); // light QHash light; light["name"] = tr("Light"); light["backgroundColor"] = Qt::white; light["foregroundColor"] = Qt::black; light["calculatedColor"] = Qt::red; light["importedColor"] = Qt::gray; light["font"] = QFont(); new QListWidgetItem(light["name"].toString(), ui.list_schemes); m_schemes->append(light); // publication QHash publication; publication["name"] = tr("Publication"); publication["backgroundColor"] = Qt::white; publication["foregroundColor"] = Qt::black; publication["calculatedColor"] = Qt::black; publication["importedColor"] = Qt::gray; publication["font"] = QFont("Century Schoolbook L", 13); new QListWidgetItem(publication["name"].toString(), ui.list_schemes); m_schemes->append(publication); // handdrawn QHash handdrawn; handdrawn["name"] = tr("Handdrawn"); handdrawn["backgroundColor"] = Qt::white; handdrawn["foregroundColor"] = Qt::gray; handdrawn["calculatedColor"] = Qt::darkGray; handdrawn["importedColor"] = Qt::lightGray; handdrawn["font"] = QFont("Domestic Manners", 16); new QListWidgetItem(handdrawn["name"].toString(), ui.list_schemes); m_schemes->append(handdrawn); } updateScheme(scheme); } /////////////////// // Color schemes // /////////////////// void SpectraDialog::updateScheme(int scheme) { ui.list_schemes->setCurrentRow(scheme); if (m_scheme != scheme) { m_scheme = scheme; schemeChanged(); } } void SpectraDialog::addScheme() { QHash newScheme = m_schemes->at(m_scheme); newScheme["name"] = tr("New Scheme"); new QListWidgetItem(newScheme["name"].toString(), ui.list_schemes); m_schemes->append(newScheme); schemeChanged(); } void SpectraDialog::removeScheme() { if (m_schemes->size() <= 1) return; // Don't delete the last scheme! int ret = QMessageBox::question(this, tr("Confirm Scheme Removal"), tr("Really remove current scheme?")); if (ret == QMessageBox::Ok) { m_schemes->removeAt(m_scheme); delete (ui.list_schemes->takeItem(m_scheme)); } } void SpectraDialog::renameScheme() { int idx = m_scheme; bool ok; QString text = QInputDialog::getText(this, tr("Change Scheme Name"), tr("Enter new name for current scheme:"), QLineEdit::Normal, m_schemes->at(m_scheme)["name"].toString(), &ok); if (ok) { (*m_schemes)[idx]["name"] = text; delete (ui.list_schemes->takeItem(idx)); ui.list_schemes->insertItem(idx, m_schemes->at(idx)["name"].toString()); updateScheme(idx); } } void SpectraDialog::changeBackgroundColor() { QColor current (m_schemes->at(m_scheme)["backgroundColor"].value()); QColor color = QColorDialog::getColor(current, this, tr("Select Background Color")); if (color.isValid() && color != current) { (*m_schemes)[m_scheme]["backgroundColor"] = color; schemeChanged(); } } void SpectraDialog::changeForegroundColor() { QColor current (m_schemes->at(m_scheme)["foregroundColor"].value()); QColor color = QColorDialog::getColor(current, this, tr("Select Foreground Color")); if (color.isValid() && color != current) { (*m_schemes)[m_scheme]["foregroundColor"] = color; schemeChanged(); } } void SpectraDialog::changeCalculatedSpectraColor() { QColor current (m_schemes->at(m_scheme)["calculatedColor"].value()); QColor color = QColorDialog::getColor(current, this, tr("Select Calculated Spectra Color")); if (color.isValid() && color != current) { (*m_schemes)[m_scheme]["calculatedColor"] = color; schemeChanged(); } } void SpectraDialog::changeImportedSpectraColor() { QColor current (m_schemes->at(m_scheme)["importedColor"].value()); QColor color = QColorDialog::getColor(current, this, tr("Select Imported Spectra Color")); if (color.isValid() && color != current) { (*m_schemes)[m_scheme]["importedColor"] = color; schemeChanged(); } } void SpectraDialog::changeFont() { bool ok; QFont current (m_schemes->at(m_scheme)["font"].value()); QFont font = QFontDialog::getFont(&ok, current, this); if (ok) { (*m_schemes)[m_scheme]["font"] = font; schemeChanged(); } } void SpectraDialog::schemeChanged() { ui.plot->setBackgroundColor(m_schemes->at(m_scheme)["backgroundColor"].value()); ui.plot->setForegroundColor(m_schemes->at(m_scheme)["foregroundColor"].value()); ui.plot->setFont(m_schemes->at(m_scheme)["font"].value()); QPen currentPen (m_importedSpectra->linePen()); currentPen.setColor(m_schemes->at(m_scheme)["importedColor"].value()); m_importedSpectra->setLinePen(currentPen); currentPen = (m_calculatedSpectra->linePen()); currentPen.setColor(m_schemes->at(m_scheme)["calculatedColor"].value()); m_calculatedSpectra->setLinePen(currentPen); } /////////////////////// // Plot Manipulation // /////////////////////// void SpectraDialog::updateCurrentSpectra(const QString & text) { if (text.isEmpty()) return; m_spectra = text; if (currentSpectra()) currentSpectra()->setupPlot(ui.plot); // Regenerate spectra plot objects and redraw plot regenerateCalculatedSpectra(); regenerateImportedSpectra(); // updatePlot(); } void SpectraDialog::updateComboSpectra(int index) { if (index >= 2) { ui.combo_spectra->setCurrentIndex(index-2); } } void SpectraDialog::exportSpectra() { // Prepare filename QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if (defaultPath.isEmpty()) { defaultPath = QDir::homePath(); } QString defaultFileName = defaultPath + '/' + defaultFile.baseName() + ".tsv"; QString filename = QFileDialog::getSaveFileName(this, tr("Export Calculated Spectrum"), defaultFileName, tr("Tab Separated Values (*.tsv)")); // Open file QFile file (filename); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qWarning() << "Cannot open file " << filename << " for writing!"; return; } QTextStream out(&file); if (currentSpectra()) out << currentSpectra()->getTSV(); file.close(); } void SpectraDialog::importSpectra() { // Setup filename QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if (defaultPath.isEmpty()) { defaultPath = QDir::homePath(); } QString defaultFileName = defaultPath + '/' + defaultFile.baseName() + ".tsv"; QStringList filters; filters << tr("Tab Separated Values") + " (*.tsv)" << tr("Comma Separated Values") + " (*.csv)" << tr("JCAMP-DX") + " (*.jdx)" << tr("All Files") + " (* *.*)"; QString filename = QFileDialog::getOpenFileName(this, tr("Import Spectra"), defaultFileName, filters.join(";;")); // Open file QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << "Error opening file \"" << filename << "\"."; return; } // get file extension QStringList tmp = filename.split('.'); QString ext = tmp.at(tmp.size()-1); // Prepare lists QList x, y; // Prepare stream QTextStream in(&file); // Pick delimiter QString delim; if (ext == "tsv" || ext == "TSV") delim = '\t'; else if (ext == "csv" || ext == "CSV") delim = ','; else if (ext == "jdx" || ext == "JDX") delim = "\\s+"; // Regex finds whitespace else { // Not a supported file type.... QMessageBox::warning(this, tr("Spectra Import"), tr("Unknown extension: %1").arg(ext)); return; } // Extract data while (!in.atEnd()) { QString line = in.readLine(); if (line.trimmed().startsWith('#')) continue; //discard comments QStringList data = line.split(QRegExp(delim), QString::SkipEmptyParts); if (data.size() < 2) { qWarning() << "SpectraDialog::importSpectra Skipping invalid line in file " << filename << ":\n\t\"" << line << "\""; continue; } if (data.at(0).toDouble() && data.at(1).toDouble()) { x.append(data.at(0).toDouble()); y.append(data.at(1).toDouble()); } else { qWarning() << "SpectraDialog::importSpectra Skipping entry as invalid:\n\t" << data; continue; } } // Set GUI options ui.push_colorImported->setEnabled(true); ui.cb_import->setEnabled(true); ui.cb_import->setChecked(true); // Update plot and plot objects if (currentSpectra()) currentSpectra()->setImportedData(x,y); regenerateImportedSpectra(); //updatePlot(); } void SpectraDialog::loadSpectra() { // Setup filename QFileInfo defaultFile(m_molecule->fileName()); QString defaultPath = defaultFile.canonicalPath(); if (defaultPath.isEmpty()) { defaultPath = QDir::homePath(); } QString defaultFileName = defaultPath + '/' + defaultFile.baseName(); QStringList types; // Define data types here. Make sure to include "IR" for IR data and "NMR" for NMR data, etc. // Put the default file extension in (*.ext), i.e. (.out) types << tr("PWscf IR data (*.out)", "Do not remove 'IR' or '(*.out)' -- needed for parsing later" ) << tr("Turbomole IR data (control)", "Do not remove 'IR' or '(control)' -- needed for parsing later" ) << tr("Turbomole UV data (spectrum)", "Do not remove 'UV' or '(spectrum)' -- needed for parsing later" ) << tr("Turbomole CD data (cdspectrum)", "Do not remove 'CD' or '(cdspectrum)' -- needed for parsing later" ); bool ok; QString type = QInputDialog::getItem(this, tr("Data Format"), tr("Format:", "noun, not verb"), types, 0, false, &ok); if (!ok) return; QStringList filters; filters << type << tr("All Files") + " (* *.*)"; QString filename = QFileDialog::getOpenFileName(this, tr("Load Spectral Data"), defaultFileName, filters.join(";;")); // Open file QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qWarning() << "Error opening file \"" << filename << "\"."; return; } // get file extension QStringList tmp = filename.split('.'); QString ext = tmp.at(tmp.size()-1); // Prepare stream QTextStream in(&file); if (type.contains("IR")) { // We have IR data loaded // Set m_spectra m_spectra = "Infrared"; // Prepare lists QList x,y; // If the file just contains values in columns, set the variables // below. Otherwise, implement a new reader below (data in rows, etc). // Add the "easily parsed" types to the condition below: if (type.contains("PWscf") || type.contains("Turbomole") ) { // Set up some info by data type: QString delim; QString cue; // Skip to this line before reading data in QString end; // This line terminates reading int wavenumber_idx; int intensity_idx; // Set the variables for each "easily parsed" type here... if (type.contains("PWscf")) { // Plane wave self consistant field output delim = "\\s+"; // finds all whitespace cue = "# mode"; end = ""; wavenumber_idx= 2; intensity_idx = 4; } else if (type.contains("Turbomole")) { // Plane wave self consistant field output delim = "\\s+"; // finds all whitespace cue = "$vibrational spectrum"; end = "$end"; wavenumber_idx= 3; intensity_idx = 4; } // Cue file while (!in.atEnd()) if (in.readLine().contains(cue)) break; // Iterate through file int min = (wavenumber_idx < intensity_idx) ? wavenumber_idx : intensity_idx; while (!in.atEnd()) { QString line = in.readLine(); if (!end.isEmpty() && line.contains(end)) break; if (line.trimmed().startsWith('#')) continue; //discard comments QStringList data = line.split(QRegExp(delim), QString::SkipEmptyParts); if (data.size() < min) { qWarning() << "SpectraDialog::importSpectra Skipping invalid line in file " << filename << ": Too few entries (need " << min << "\n\t\"" << line << "\""; continue; } if (data.at(wavenumber_idx).toDouble() && data.at(intensity_idx).toDouble()) { // Check for valid conversions and non-zero data x.append(data.at(wavenumber_idx).toDouble()); y.append(data.at(intensity_idx).toDouble()); qDebug() << data.at(wavenumber_idx).toDouble() << " " << data.at(intensity_idx).toDouble(); qDebug() << data; } else { qWarning() << "SpectraDialog::importSpectra Skipping entry as invalid:\n\t" << data; continue; } } } // Attach data to m_molecule OpenBabel::OBMol *obmol = new OpenBabel::OBMol (m_molecule->OBMol()); std::vector< std::vector< OpenBabel::vector3 > > Lx; OpenBabel::OBVibrationData *obvib = new OpenBabel::OBVibrationData; obvib->SetData(Lx, x.toVector().toStdVector(), y.toVector().toStdVector()); obmol->SetData(obvib); m_molecule->setOBMol(obmol); } else if (type.contains("CD")) { // We have CD data loaded // Set m_spectra m_spectra = "CD"; // Prepare lists QList x,y; // If the file just contains values in columns, set the variables // below. Otherwise, implement a new reader below (data in rows, etc). // Add the "easily parsed" types to the condition below: if ( type.contains("Turbomole") ) { // Set up some info by data type: QString delim; QString cue; // Skip to this line before reading data in QString end; // This line terminates reading int wavelength_idx; int rotl_idx; // Set the variables for each "easily parsed" type here... if (type.contains("Turbomole")) { delim = "\\s+"; // finds all whitespace cue = "# excitation energy"; end = ""; wavelength_idx= 0; rotl_idx = 1; } // Cue file QString line; while (!in.atEnd()) { line = in.readLine(); if (line.contains(cue)) break; } QString wl_units; if (type.contains("Turbomole")) { // The cue line contains the units for turbomole. QStringList sl = line.split(QRegExp("\\s+")); if (sl.size() < 5) { QMessageBox::warning(this, tr("Spectra Import"), tr("Turbomole CD file is improperly formatted : %1").arg(filename)); return; } wl_units = sl[4]; } // Iterate through file int min = (wavelength_idx < rotl_idx) ? wavelength_idx : rotl_idx; while (!in.atEnd()) { line = in.readLine(); if (!end.isEmpty() && line.contains(end)) break; if (line.trimmed().startsWith('#')) continue; //discard comments QStringList data = line.split(QRegExp(delim), QString::SkipEmptyParts); if (data.size() < min) { qWarning() << "SpectraDialog::importSpectra Skipping invalid line in file " << filename << ": Too few entries (need " << min << "\n\t\"" << line << "\""; continue; } if (data.at(wavelength_idx).toDouble() && data.at(rotl_idx).toDouble()) { // Check for valid conversions and non-zero data x.append(data.at(wavelength_idx).toDouble()); y.append(data.at(rotl_idx).toDouble()); qDebug() << data.at(wavelength_idx).toDouble() << " " << data.at(rotl_idx).toDouble(); qDebug() << data; } else { qWarning() << "SpectraDialog::importSpectra Skipping entry as invalid:\n\t" << data; continue; } } // Convert wavelengths if needed... qDebug() << wl_units; if (wl_units == "cm^(-1)") for ( int i = 0; i < x.size(); i++) { qDebug() << x[i] << " into " << 1.0 / x.at(i) * 1e7; x[i] = 1.0 / x.at(i) * 1e7; } } // end turbomole // Attach data to m_molecule OpenBabel::OBMol *obmol = new OpenBabel::OBMol (m_molecule->OBMol()); std::vector forces; OpenBabel::OBElectronicTransitionData *etd = static_cast(obmol->GetData("ElectronicTransitionData")); if (!etd) { etd = new OpenBabel::OBElectronicTransitionData; forces = std::vector(x.size(), 0.0); } else { forces = etd->GetForces(); } etd->SetData(x.toVector().toStdVector(), forces); etd->SetRotatoryStrengthsLength(y.toVector().toStdVector()); obmol->SetData(etd); m_molecule->setOBMol(obmol); } else if (type.contains("UV")) { // We have UV data loaded // Set m_spectra m_spectra = "UV"; // Prepare lists QList x,y; // If the file just contains values in columns, set the variables // below. Otherwise, implement a new reader below (data in rows, etc). // Add the "easily parsed" types to the condition below: if ( type.contains("Turbomole") ) { // Set up some info by data type: QString delim; QString cue; // Skip to this line before reading data in QString end; // This line terminates reading int wavelength_idx; int edipole_idx; // Set the variables for each "easily parsed" type here... if (type.contains("Turbomole")) { delim = "\\s+"; // finds all whitespace cue = "# excitation energy"; end = ""; wavelength_idx= 0; edipole_idx = 1; } // Cue file QString line; while (!in.atEnd()) { line = in.readLine(); if (line.contains(cue)) break; } QString wl_units; if (type.contains("Turbomole")) { // The cue line contains the units for turbomole. QStringList sl = line.split(QRegExp("\\s+")); if (sl.size() < 5) { QMessageBox::warning(this, tr("Spectra Import"), tr("Turbomole CD file is improperly formatted : %1").arg(filename)); return; } wl_units = sl[4]; } // Iterate through file int min = (wavelength_idx < edipole_idx) ? wavelength_idx : edipole_idx; while (!in.atEnd()) { line = in.readLine(); if (!end.isEmpty() && line.contains(end)) break; if (line.trimmed().startsWith('#')) continue; //discard comments QStringList data = line.split(QRegExp(delim), QString::SkipEmptyParts); if (data.size() < min) { qWarning() << "SpectraDialog::importSpectra Skipping invalid line in file " << filename << ": Too few entries (need " << min << "\n\t\"" << line << "\""; continue; } if (data.at(wavelength_idx).toDouble() && data.at(edipole_idx).toDouble()) { // Check for valid conversions and non-zero data x.append(data.at(wavelength_idx).toDouble()); y.append(data.at(edipole_idx).toDouble()); qDebug() << data.at(wavelength_idx).toDouble() << " " << data.at(edipole_idx).toDouble(); qDebug() << data; } else { qWarning() << "SpectraDialog::importSpectra Skipping entry as invalid:\n\t" << data; continue; } } // Convert wavelengths if needed... qDebug() << wl_units; if (wl_units == "cm^(-1)") for ( int i = 0; i < x.size(); i++) { qDebug() << x[i] << " into " << 1.0 / x.at(i) * 1e7; x[i] = 1.0 / x.at(i) * 1e7; } } // end turbomole // Attach data to m_molecule OpenBabel::OBMol *obmol = new OpenBabel::OBMol (m_molecule->OBMol()); std::vector forces; OpenBabel::OBElectronicTransitionData *etd = static_cast(obmol->GetData("ElectronicTransitionData")); if (!etd) { etd = new OpenBabel::OBElectronicTransitionData; forces = std::vector(x.size(), 0.0); } else { forces = etd->GetForces(); } etd->SetData(x.toVector().toStdVector(), forces); etd->SetEDipole(y.toVector().toStdVector()); obmol->SetData(etd); m_molecule->setOBMol(obmol); } setMolecule(m_molecule); } void SpectraDialog::saveImageFileDialog() { QStringList filters; filters << tr("Portable Network Graphics") + " (*.png)" << tr("jpeg") + " (*.jpg *.jpeg)" << tr("Tagged Image File Format") + " (*.tiff)" << tr("Windows Bitmap") + " (*.bmp)" << tr("Portable Pixmap") + " (*.ppm)" << tr("X11 Bitmap") + " (*.xbm)" << tr("X11 Pixmap") + " (*.xpm)" << tr("All Files") + " (*.*)"; QString filename = QFileDialog::getSaveFileName(this, tr("Save Spectra Image"), ui.edit_imageFilename->text(), filters.join(";;")); if (filename.isEmpty()) { return; } // get file extension QStringList tmp = filename.split('.'); QString ext = tmp.at(tmp.size()-1); if (ext != "png" && ext != "PNG" && ext != "jpg" && ext != "JPG" && ext != "bmp" && ext != "BMP" && ext != "ppm" && ext != "PPM" && ext != "xbm" && ext != "XBM" && ext != "xpm" && ext != "XPM" && ext != "tiff" && ext != "TIFF" ) { qWarning() << "SpectraDialog::saveImageFileDialog Invalid file extension: " << ext; QMessageBox::warning(this, tr("Invalid Filename"), tr("Unknown extension: %1").arg(ext)); return; } ui.edit_imageFilename->setText(filename); } void SpectraDialog::saveImage() { QString filename = ui.edit_imageFilename->text(); double w,h,factor=1; int dpi; switch (ui.combo_imageUnits->currentIndex()) { case 0: // cm factor = 0.01; break; case 1: // mm factor = 0.001; break; case 2: // in factor = 0.0254; break; case 4: // px factor = 1; break; } w = factor * ui.spin_imageWidth->value(); h = factor * ui.spin_imageHeight->value(); dpi = ui.spin_imageDPI->value(); bool opt = ui.cb_imageFontAdjust->isChecked(); if (!ui.plot->saveImage(filename, w, h, dpi, opt)) { qWarning() << "SpectraDialog::saveImage Error saving plot to " << filename; QMessageBox::warning(this, tr("Error"), tr("A problem occurred while writing file %1").arg(filename)); } else { QMessageBox::information(this, tr("Success!"), tr("Image successfully written to %1").arg(filename)); } } void SpectraDialog::toggleImported(bool state) { if (state) { ui.plot->replacePlotObject(1,m_importedSpectra); } else { ui.plot->replacePlotObject(1,m_nullSpectra); } updatePlot(); } void SpectraDialog::toggleCalculated(bool state) { if (state) { ui.plot->replacePlotObject(0,m_calculatedSpectra); } else { ui.plot->replacePlotObject(0,m_nullSpectra); } updatePlot(); } void SpectraDialog::toggleAdvanced() { if (ui.tab_widget->isHidden()) { ui.push_advanced->setText(tr("&Advanced <<")); ui.tab_widget->show(); ui.dataTable->show(); ui.push_exportData->show(); QSize s = size(); s.setWidth(s.width() + ui.dataTable->size().width()); s.setHeight(s.height() + ui.tab_widget->size().height()); QRect rect = QApplication::desktop()->screenGeometry(); if (s.width() > rect.width() || s.height() > rect.height()) s = rect.size()*0.9; resize(s); move(rect.width()/2 - s.width()/2, rect.height()/2 - s.height()/2); } else { ui.push_advanced->setText(tr("&Advanced >>")); QSize s = size(); s.setWidth(s.width() - ui.dataTable->size().width()); s.setHeight(s.height() - ui.tab_widget->size().height()); resize(s); ui.tab_widget->hide(); ui.dataTable->hide(); ui.push_exportData->hide(); QRect rect = QApplication::desktop()->screenGeometry(); move(rect.width()/2 - s.width()/2, rect.height()/2 - s.height()/2); } } void SpectraDialog::regenerateCalculatedSpectra() { if (currentSpectra()) { currentSpectra()->getCalculatedPlotObject(m_calculatedSpectra); currentSpectra()->updateDataTable(); } updatePlot(); } void SpectraDialog::regenerateImportedSpectra() { if (currentSpectra()) currentSpectra()->getImportedPlotObject(m_importedSpectra); updatePlot(); } void SpectraDialog::updatePlot() { if (currentSpectra()) currentSpectra()->setupPlot(ui.plot); QList< PlotObject* > plotObjectList = ui.plot->plotObjects(); QList< PlotPoint* > pointList; PlotObject *obj; PlotPoint *p; double minX=0, maxX=0, minY=0, maxY=0, x=0, y=0; double x1, x2, y1, y2; foreach(obj, plotObjectList) { foreach (p, obj->points()) { //if (!ui.plot->defaultDataRect().contains(p->position())) x = p->x(); y = p->y(); if (x < minX) minX = x; if (x > maxX) maxX = x; if (y < minY) minY = y; if (y > maxY) maxY = y; } } QRectF defaultRect = ui.plot->defaultDataRect(); x1 = minX-(maxX-minX)*0.01; x2 = maxX+(maxX-minX)*0.01; if (m_labelsUp) { y1 = minY-(maxY-minY)*0.03; y2 = maxY+(maxY-minY)*0.1; } else { y1 = minY-(maxY-minY)*0.1; y2 = maxY+(maxY-minY)*0.03; } QRectF dataRect(x1,y1,x2,y2); QRectF fullRect(defaultRect.united(dataRect)); if (defaultRect.width() < 0) { x1 = fullRect.left(); x2 = fullRect.right(); fullRect.setLeft(x2); fullRect.setRight(x1); } if (defaultRect.height() < 0) { x1 = fullRect.bottom(); x2 = fullRect.top(); fullRect.setBottom(x2); fullRect.setTop(x1); } ui.plot->setDefaultLimits(fullRect); //qDebug() << fullRect.left() << fullRect.right() << fullRect.top() << fullRect.bottom(); ui.plot->update(); } void SpectraDialog::labelsUp(bool up) { m_labelsUp = up; if (up) ui.plot->setLabelShiftDirection(PlotWidget::Up); else ui.plot->setLabelShiftDirection(PlotWidget::Down); } SpectraType * SpectraDialog::currentSpectra() { if (m_spectra == "Infrared") return m_spectra_ir; else if (m_spectra == "NMR") return m_spectra_nmr; else if (m_spectra == "DOS") return m_spectra_dos; else if (m_spectra == "UV") return m_spectra_uv; else if (m_spectra == "CD") return m_spectra_cd; else if (m_spectra == "Raman") return m_spectra_raman; return NULL; } void SpectraDialog::showCoordinates(double x, double y) { // Don't show coordinates outside rectangle of plot if (!ui.plot->dataRect().contains(x,y)) { ui.currentCoordinates->setText(""); return; } // Don't update coordinates more often than once in 0.1 sec int t = m_time.elapsed(); if (t - m_lastUpdate > 100) { ui.currentCoordinates->setText("("+QString::number(x)+";"+QString::number(y)+")"); m_lastUpdate = m_time.elapsed(); } } void SpectraDialog::showEvent ( QShowEvent * event ) { m_lastUpdate = 0; m_time.restart(); event->accept(); } } avogadro-1.1.1/libavogadro/src/extensions/spectra/cd.h0000644000175000001440000000337012250371054022206 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ //#ifdef OPENBABEL_IS_NEWER_THAN_2_2_99 #ifndef SPECTRATYPE_CD_H #define SPECTRATYPE_CD_H #include #include #include "spectradialog.h" #include "spectratype.h" #include "ui_tab_cd.h" namespace Avogadro { class CDSpectra : public SpectraType { Q_OBJECT public: CDSpectra( SpectraDialog *parent = 0 ); ~CDSpectra(); void writeSettings(); void readSettings(); bool checkForData(Molecule* mol); void setupPlot(PlotWidget * plot); void getCalculatedPlotObject(PlotObject *plotObject); //void setImportedData(const QList & xList, const QList & yList); //void getImportedPlotObject(PlotObject *plotObject); QString getTSV(); private slots: void rotatoryTypeChanged(const QString & str); private: Ui::Tab_CD ui; QList *m_yListVelocity, *m_yListLength; double m_fermi; }; } #endif //#endif avogadro-1.1.1/libavogadro/src/extensions/spectra/vibrationwidget.h0000644000175000001440000000532312250371054025021 0ustar marcususers/********************************************************************** VibrationWidget - Visualize and animate vibrational modes Copyright (C) 2009 by Geoffrey Hutchison Some portions Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef VIBRATIONWIDGET_H #define VIBRATIONWIDGET_H #include #include #include #include "ui_vibrationwidget.h" namespace OpenBabel { class OBVibrationData; } namespace Avogadro { class VibrationWidget : public QWidget { Q_OBJECT public: //! Constructor explicit VibrationWidget( QWidget *parent = 0, Qt::WindowFlags f = 0 ); //! Deconstructor ~VibrationWidget(); void setMolecule(Molecule *molecule); void setWidget(GLWidget *widget) {m_widget = widget; } Ui::VibrationWidget * getUi() {return &ui;}; public slots: // void accept(); void reject(); void changeFilter(QString); void cellClicked(int, int); void currentCellChanged(int, int, int, int); void setScale(int scale); void setScale(double scale); void setDisplayForceVectors(bool checked); void setNormalize(bool checked); void setAnimationSpeed(bool checked); void animateButtonClicked(bool); void pauseButtonClicked(bool); void spectraButtonClicked(); //void exportVibrationData(bool); signals: void selectedMode(int); void scaleUpdated(double scale); void normalizeUpdated(bool enabled); void forceVectorUpdated(bool enabled); void animationSpeedUpdated(bool enabled); void toggleAnimation(); void pauseAnimation(); void showSpectra(); private: Ui::VibrationWidget ui; GLWidget *m_widget; Molecule *m_molecule; OpenBabel::OBVibrationData *m_vibrations; std::vector m_frequencies; std::vector m_intensities; std::vector *m_indexMap; int m_currentRow; double m_filter; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/spectra/vibrationextension.h0000644000175000001440000000602112250371054025546 0ustar marcususers/********************************************************************** VibrationExtension - Visualize vibrational modes from QM calculations Copyright (C) 2009 by Geoffrey R. Hutchison Some portions Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef VIBRATIONEXTENSION_H #define VIBRATIONEXTENSION_H #include "vibrationwidget.h" #include #include #include #include #include #include #include #include namespace OpenBabel { class OBVibrationData; } namespace Avogadro { class VibrationExtension : public DockExtension { Q_OBJECT AVOGADRO_EXTENSION("Vibration", tr("Vibration"), tr("Visualize vibrational modes from quantum chemistry calculations")) public: //! Constructor VibrationExtension(QObject *parent=0); //! Deconstructor virtual ~VibrationExtension(); QDockWidget * dockWidget(); virtual void setMolecule(Molecule *molecule); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); void clearAnimationFrames(); public slots: void updateMode(int mode); void setScale(double scale); void setDisplayForceVectors(bool enabled); void setNormalize(bool enabled); void setAnimationSpeed(bool enabled); void toggleAnimation(); void pauseAnimation(); void showSpectra(); private: void updateForcesAndFrames(); // helper when settings change OpenBabel::OBVibrationData *m_vibrations; int m_mode; VibrationWidget *m_dialog; QDockWidget *m_dock; Molecule *m_molecule; GLWidget *m_widget; Animation *m_animation; double m_scale; unsigned int m_framesPerStep; bool m_normalize; bool m_displayVectors; bool m_animationSpeed; bool m_animating; bool m_paused; QByteArray m_geometry; std::vector< std::vector< Eigen::Vector3d> *> m_animationFrames; }; class VibrationExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(VibrationExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/spectra/uv.cpp0000644000175000001440000001213712250371054022606 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include #include "uv.h" #include "spectradialog.h" #include #include #include using namespace std; namespace Avogadro { UVSpectra::UVSpectra( SpectraDialog *parent ) : SpectraType( parent ) { ui.setupUi(m_tab_widget); // Setup signals/slots connect(this, SIGNAL(plotDataChanged()), m_dialog, SLOT(regenerateCalculatedSpectra())); connect(ui.cb_labelPeaks, SIGNAL(toggled(bool)), this, SIGNAL(plotDataChanged())); connect(ui.spin_FWHM, SIGNAL(valueChanged(double)), this, SIGNAL(plotDataChanged())); readSettings(); } UVSpectra::~UVSpectra() { // TODO: Anything to delete? writeSettings(); } void UVSpectra::writeSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp settings.setValue("spectra/UV/gaussianWidth", ui.spin_FWHM->value()); settings.setValue("spectra/UV/labelPeaks", ui.cb_labelPeaks->isChecked()); } void UVSpectra::readSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp ui.spin_FWHM->setValue(settings.value("spectra/UV/gaussianWidth",0.0).toDouble()); ui.cb_labelPeaks->setChecked(settings.value("spectra/UV/labelPeaks",false).toBool()); } bool UVSpectra::checkForData(Molecule * mol) { OpenBabel::OBMol obmol = mol->OBMol(); OpenBabel::OBElectronicTransitionData *etd = static_cast(obmol.GetData("ElectronicTransitionData")); if (!etd) return false; if (etd->GetEDipole().size() == 0) return false; // OK, we have valid data, so store them for later std::vector wavelengths = etd->GetWavelengths(); std::vector edipole= etd->GetEDipole(); // Store in member vars m_xList.clear(); m_yList.clear(); for (uint i = 0; i < wavelengths.size(); i++){ m_xList.append(wavelengths.at(i)); m_yList.append(edipole.at(i)); } return true; } void UVSpectra::setupPlot(PlotWidget * plot) { plot->scaleLimits(); plot->axis(PlotWidget::BottomAxis)->setLabel(tr("Wavelength (nm)")); plot->axis(PlotWidget::LeftAxis)->setLabel(tr("ε (cm2/mmol)")); } void UVSpectra::getCalculatedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); if (ui.spin_FWHM->value() != 0.0 && ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setEnabled(false); ui.cb_labelPeaks->setChecked(false); } if (ui.spin_FWHM->value() == 0.0 && !ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setEnabled(true); } if (!ui.cb_labelPeaks->isEnabled()) { ui.cb_labelPeaks->setChecked(false); } if (m_xList.size() < 1 && m_yList.size() < 1) return; double wavelength, intensity; double FWHM = ui.spin_FWHM->value(); bool use_widening = (FWHM == 0) ? false : true; if (use_widening) { // convert FWHM to sigma squared double sigma = FWHM / (2.0 * sqrt(2.0 * log(2.0))); double s2 = pow( sigma, 2.0 ); // create points QList xPoints = getXPoints(FWHM, 25); for (int i = 0; i < xPoints.size(); i++) { double x = xPoints.at(i); double y = 0.0; for (int j = 0; j < m_yList.size(); j++) { double t = m_yList.at(j); double w = m_xList.at(j); y += t * exp( - ( pow( (x - w), 2 ) ) / (2 * s2) ) * // Normalization factor: (CP, 224 (1997) 143-155) 2.87e4 / sqrt(2 * M_PI * s2); } plotObject->addPoint(x,y); } } else { for (int i = 0; i < m_yList.size(); i++) { wavelength = m_xList.at(i); intensity = m_yList.at(i) * // Normalization factor: 2.87e4; plotObject->addPoint ( wavelength, 0 ); if (ui.cb_labelPeaks->isChecked()) { // %L1 uses localized number format (e.g., 1.023,4 in Europe) plotObject->addPoint( wavelength, intensity, QString("%L1").arg(wavelength, 0, 'f', 1) ); } else { plotObject->addPoint ( wavelength, intensity ); } plotObject->addPoint ( wavelength, 0 ); } } } QString UVSpectra::getTSV() { return SpectraType::getTSV("Wavelength (nm)", "Intensity (arb)"); } } avogadro-1.1.1/libavogadro/src/extensions/spectra/tab_nmr.ui0000644000175000001440000001021412250371054023423 0ustar marcususers Tab_NMR 0 0 562 300 tab_NMR Nucleus: combo_type &Reference: spin_ref Gaussian &Width: spin_FWHM Qt::Vertical 20 40 Reset &Plot Axes true -9999.989999999999782 9999.989999999999782 0.010000000000000 3 99.998999999999995 0.010000000000000 Label Peaks: Qt::Horizontal 40 20 ppm ppm combo_type cb_labelPeaks spin_ref spin_FWHM push_resetAxes avogadro-1.1.1/libavogadro/src/extensions/spectra/dos.cpp0000644000175000001440000002163512250371054022744 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include #include "dos.h" #include #include #include using namespace std; namespace Avogadro { enum EnergyUnits { ENERGY_EV = 0 }; enum DensityUnits { DENSITY_PER_CELL = 0, DENSITY_PER_ATOM, DENSITY_PER_VALENCE }; DOSSpectra::DOSSpectra( SpectraDialog *parent ) : SpectraType( parent ), m_intDOS(0) { ui.setupUi(m_tab_widget); // Setup signals/slots connect(this, SIGNAL(plotDataChanged()), m_dialog, SLOT(regenerateCalculatedSpectra())); connect(this, SIGNAL(plotDataChanged()), m_dialog, SLOT(regenerateImportedSpectra())); connect(ui.cb_toggleIntegrated, SIGNAL(toggled(bool)), this, SLOT(toggleIntegratedDOS(bool))); connect(ui.cb_scaleIntegrated, SIGNAL(toggled(bool)), m_dialog, SLOT(regenerateImportedSpectra())); connect(ui.combo_energy, SIGNAL(currentIndexChanged(int)), this, SIGNAL(plotDataChanged())); connect(ui.combo_density, SIGNAL(currentIndexChanged(int)), this, SIGNAL(plotDataChanged())); connect(ui.cb_fermi, SIGNAL(toggled(bool)), this, SIGNAL(plotDataChanged())); connect(ui.spin_valence, SIGNAL(valueChanged(int)), this, SIGNAL(plotDataChanged())); readSettings(); } DOSSpectra::~DOSSpectra() { writeSettings(); // TODO: Anything to delete? } void DOSSpectra::writeSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp settings.setValue("spectra/DOS/zeroFermi", ui.cb_fermi->isChecked()); settings.setValue("spectra/DOS/showIntegrated", ui.cb_toggleIntegrated->isChecked()); settings.setValue("spectra/DOS/scaleIntegrated", ui.cb_scaleIntegrated->isChecked()); settings.setValue("spectra/DOS/energyUnits", ui.combo_energy->currentIndex()); settings.setValue("spectra/DOS/densityUnits", ui.combo_density->currentIndex()); //qDebug() << ui.spin_valence->value(); settings.setValue("spectra/DOS/valence", ui.spin_valence->value()); } void DOSSpectra::readSettings() { QSettings settings; // Already set up in avogadro/src/main.cpp ui.cb_fermi->setChecked(settings.value("spectra/DOS/zeroFermi", true).toBool()); ui.cb_toggleIntegrated->setChecked(settings.value("spectra/DOS/showIntegrated", true).toBool()); ui.cb_scaleIntegrated->setChecked(settings.value("spectra/DOS/scaleIntegrated", false).toBool()); ui.combo_energy->setCurrentIndex(settings.value("spectra/DOS/energyUnits", ENERGY_EV).toInt()); ui.combo_density->setCurrentIndex(settings.value("spectra/DOS/densityUnits", DENSITY_PER_CELL).toInt()); ui.spin_valence->setValue(settings.value("spectra/DOS/valence", 1).toInt()); } bool DOSSpectra::checkForData(Molecule * mol) { OpenBabel::OBMol obmol = mol->OBMol(); //OpenBabel::OBDOSData *dos = static_cast(obmol.GetData(OpenBabel::OBGenericDataType::DOSData)); OpenBabel::OBDOSData *dos = static_cast(obmol.GetData("DOSData")); if (!dos) return false; // OK, we have valid DOS, so store them for later std::vector energies = dos->GetEnergies(); std::vector densities= dos->GetDensities(); if (m_intDOS) delete m_intDOS; m_intDOS = new std::vector (dos->GetIntegration()); if (energies.size() == 0 || energies.size() != densities.size()) return false; // Store in member vars m_numAtoms = mol->numAtoms(); m_fermi = dos->GetFermiEnergy(); ui.label_fermi->setText(QString::number(m_fermi)); m_xList.clear(); m_yList.clear(); bool generateInt = false; if (m_intDOS->size() == 0) generateInt = true; for (uint i = 0; i < energies.size(); i++){ m_xList.append(energies.at(i)); double d = densities.at(i); m_yList.append(d); if (generateInt) { if (i == 0) m_intDOS->push_back(d); else m_intDOS->push_back(m_intDOS->at(i-1) + d); } } setImportedData(m_xList, QList::fromVector(QVector::fromStdVector(*m_intDOS))); return true; } void DOSSpectra::setupPlot(PlotWidget * plot) { plot->scaleLimits(); switch (ui.combo_energy->currentIndex()) { case ENERGY_EV: plot->axis(PlotWidget::BottomAxis)->setLabel(tr("Energy (eV)")); break; default: break; } switch (ui.combo_density->currentIndex()) { case DENSITY_PER_CELL: plot->axis(PlotWidget::LeftAxis)->setLabel(tr("Density of States (states/cell)")); break; case DENSITY_PER_ATOM: plot->axis(PlotWidget::LeftAxis)->setLabel(tr("Density of States (states/atom)")); break; case DENSITY_PER_VALENCE: plot->axis(PlotWidget::LeftAxis)->setLabel(tr("Density of States (states/valence electron)")); break; } } // QWidget * DOSSpectra::getTabWidget() {return m_tab_widget;} void DOSSpectra::getCalculatedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); int energy_index = ui.combo_energy->currentIndex(); int density_index = ui.combo_density->currentIndex(); bool use_fermi = ui.cb_fermi->isChecked(); double density(0.0), energy(0.0); // Update GUI if needed double valence = 1; if (density_index == DENSITY_PER_VALENCE) { ui.spin_valence->setVisible(true); valence = ui.spin_valence->value(); } else ui.spin_valence->setVisible(false); for (int i = 0; i < m_yList.size(); i++) { switch (energy_index) { case ENERGY_EV: energy = m_xList.at(i); break; } switch (density_index) { case DENSITY_PER_CELL: density = m_yList.at(i); break; case DENSITY_PER_ATOM: density = m_yList.at(i) / ((double)m_numAtoms); break; case DENSITY_PER_VALENCE: density = m_yList.at(i) / valence; break; } if (use_fermi) energy -= m_fermi; plotObject->addPoint ( energy, density ); } } /*void DOSSpectra::setImportedData(const QList & xList, const QList & yList) { m_xList_imp = new QList (xList); m_yList_imp = new QList (yList); }*/ void DOSSpectra::getImportedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); int energy_index = ui.combo_energy->currentIndex(); int density_index = ui.combo_density->currentIndex(); bool use_fermi = ui.cb_fermi->isChecked(); double density(0.0), energy(0.0); // Scale to density max if requested double scale = 0; // leave at 0 if no scaling is to be done if (ui.cb_scaleIntegrated->isChecked()) { // Get scaling factors double d_max = m_yList.at(0); double i_max = m_intDOS->at(m_intDOS->size() - 1); for (int i = 0; i < m_yList.size(); i++){ double d = m_yList.at(i); if (d > d_max) d_max = d; } if (i_max != 0 && d_max != 0) scale = d_max / i_max; } // Update GUI if needed double valence = 1; if (density_index == DENSITY_PER_VALENCE) { ui.spin_valence->setVisible(true); valence = ui.spin_valence->value(); } else ui.spin_valence->setVisible(false); for (int i = 0; i < m_yList_imp.size(); i++) { switch (energy_index) { case ENERGY_EV: energy = m_xList_imp.at(i); break; } switch (density_index) { case DENSITY_PER_CELL: density = m_yList_imp.at(i); break; case DENSITY_PER_ATOM: density = m_yList_imp.at(i) / ((double)m_numAtoms); break; case DENSITY_PER_VALENCE: density = m_yList_imp.at(i) / valence; break; } if (use_fermi) energy -= m_fermi; if (scale != 0.0) density *= scale; plotObject->addPoint ( energy, density ); } } QString DOSSpectra::getTSV() { return SpectraType::getTSV("Energy(eV)", "Density(e/UC)"); } void DOSSpectra::toggleIntegratedDOS(bool b) { if (!b) { m_dialog->getUi()->cb_import->setChecked(false); return; } m_dialog->regenerateImportedSpectra(); m_dialog->getUi()->cb_import->setChecked(true); } } avogadro-1.1.1/libavogadro/src/extensions/spectra/uv.h0000644000175000001440000000322112250371054022245 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ //#ifdef OPENBABEL_IS_NEWER_THAN_2_2_99 #ifndef SPECTRATYPE_UV_H #define SPECTRATYPE_UV_H #include #include #include "spectradialog.h" #include "spectratype.h" #include "ui_tab_uv.h" namespace Avogadro { class UVSpectra : public SpectraType { Q_OBJECT public: UVSpectra( SpectraDialog *parent = 0 ); ~UVSpectra(); void writeSettings(); void readSettings(); bool checkForData(Molecule* mol); void setupPlot(PlotWidget * plot); void getCalculatedPlotObject(PlotObject *plotObject); // void setImportedData(const QList & xList, const QList & yList); // void getImportedPlotObject(PlotObject *plotObject); QString getTSV(); private: Ui::Tab_UV ui; double m_fermi; }; } #endif //#endif avogadro-1.1.1/libavogadro/src/extensions/spectra/spectratype.h0000644000175000001440000000514012250371054024160 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #ifndef SPECTRATYPE_H #define SPECTRATYPE_H #include #include #include #include #include #include #include #include #include namespace Avogadro { class SpectraDialog; // Abstract data type - no instance of it can be created class SpectraType : public QObject { Q_OBJECT public: SpectraType( SpectraDialog *parent ); virtual ~SpectraType(); // These functions must be implemented in inherited classes virtual void writeSettings() = 0; virtual void readSettings() = 0; virtual bool checkForData(Molecule* mol) = 0; virtual void setupPlot(PlotWidget * plot) = 0; virtual QString getTSV() = 0; // These function have default implementations, but may be overridden virtual void getCalculatedPlotObject(PlotObject *plotObject); virtual void setImportedData(const QList & xList, const QList & yList); virtual void getImportedPlotObject(PlotObject *plotObject); virtual void updateDataTable(); // No need to override these functions QList getXPoints(double FWHM, uint dotsPerPeak); QWidget * getTabWidget() {return m_tab_widget;} QString getTSV(QString xTitle, QString yTitle); void clear(); void gaussianWiden(PlotObject *plotObject, const double fwhm); static void assignGaussianLabels(PlotObject *plotObject, bool findMax, double yThreshold=0); signals: void plotDataChanged(); protected: SpectraDialog *m_dialog; QWidget *m_tab_widget; QList m_xList, m_yList, m_xList_imp, m_yList_imp; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/spectra/tab_uv.ui0000644000175000001440000000477112250371054023274 0ustar marcususers Tab_UV 0 0 415 260 Spectra Tab 0 0 &Gaussian Width: spin_FWHM Qt::Horizontal 40 20 Qt::Vertical 20 40 0 0 &Label peaks false 0 0 1 1000.000000000000000 0.500000000000000 avogadro-1.1.1/libavogadro/src/extensions/spectra/spectraextension.h0000644000175000001440000000420112250371054025210 0ustar marcususers/********************************************************************** SpectraExtension - Visualize spectral data from QM calculations Copyright (C) 2009 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef SPECTRAEXTENSION_H #define SPECTRAEXTENSION_H #include "spectradialog.h" #include #include #include #include #include namespace Avogadro { class SpectraExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Spectra", tr("Spectra"), tr("Visualize spectral data from quantum chemistry calculations")) public: //! Constructor SpectraExtension(QObject *parent=0); //! Deconstructor virtual ~SpectraExtension(); //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual QString menuPath(QAction *action) const; virtual void setMolecule(Molecule *molecule); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); private: QList m_actions; SpectraDialog *m_dialog; Molecule *m_molecule; }; class SpectraExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(SpectraExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/spectra/tab_dos.ui0000644000175000001440000001046112250371054023420 0ustar marcususers Tab_DOS 0 0 562 300 Spectra Tab Energy units: Density units Qt::Vertical 20 40 Fermi Energy: Qt::Horizontal 40 20 TextLabel States / Cell States / Atom States / Valence electron eV Fermi energy at zero Qt::Horizontal 40 20 false Scale integrated DOS Show integrated DOS valence electrons 1 Qt::Horizontal 40 20 cb_toggleIntegrated toggled(bool) cb_scaleIntegrated setEnabled(bool) 486 41 495 80 avogadro-1.1.1/libavogadro/src/extensions/spectra/tab_ir_raman.ui0000644000175000001440000003317412250371054024431 0ustar marcususers Tab_IR_Raman 0 0 595 271 tab_IR_Raman 0 0 &Y Axis Units: combo_yaxis 0 0 Qt::Horizontal 40 20 Qt::Vertical 20 0 Scaling Type: Linear Relative 0 0 Scale &Factor: spin_scale 0 0 4 0.000100000000000 2.000000000000000 0.010000000000000 1.000000000000000 100 0 50 150 100 100 Qt::Horizontal QSlider::TicksBelow 10 Qt::Horizontal 40 20 Qt::Horizontal 40 20 0 0 &Gaussian Width: spin_FWHM 0 0 1 1000.000000000000000 5.000000000000000 100 Qt::Horizontal QSlider::TicksBelow 5 Qt::Horizontal 40 20 true 0 0 0 0 Intensities false Temperature: 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter K 0.010000000000000 1000.000000000000000 298.149999999999977 Qt::Horizontal QSizePolicy::Preferred 40 20 Laser Wavenumber: 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter cm⁻¹ 0.010000000000000 20000.000000000000000 9398.500000000000000 Qt::Horizontal 20 20 0 0 0 &Label peaks false Qt::Horizontal QSizePolicy::Preferred 40 20 Threshold: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 20000.000000000000000 1.000000000000000 combo_yaxis avogadro-1.1.1/libavogadro/src/extensions/spectra/vibrationextension.cpp0000644000175000001440000003314412250371054026107 0ustar marcususers/********************************************************************** VibrationExtension - Visualize vibrational modes from QM calculations Copyright (C) 2009 by Geoffrey R. Hutchison Some portions Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "vibrationextension.h" #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; using namespace Eigen; namespace Avogadro { class VibrationDock : public QDockWidget { public: VibrationDock( const QString & title, QWidget * parent = 0, Qt::WindowFlags flags = 0 ) : QDockWidget(title, parent, flags) {} protected: void closeEvent ( QCloseEvent * event ) { VibrationWidget *w = qobject_cast(widget()); if (w) w->reject(); event->accept(); } }; VibrationExtension::VibrationExtension(QObject *parent) : DockExtension(parent), m_mode(-1), m_dialog(0), m_dock(0), m_molecule(NULL), m_widget(0), m_animation(0), m_scale(1.0), m_framesPerStep(8), m_normalize(true), m_displayVectors(true), m_animationSpeed(false), m_animating(false), m_paused(false), m_geometry("") { } VibrationExtension::~VibrationExtension() { clearAnimationFrames(); } QDockWidget * VibrationExtension::dockWidget() { if (!m_dock) { m_dock = new VibrationDock( tr("Vibrations"), qobject_cast(parent()) ); m_dock->setObjectName("vibrationDock"); //qDebug() << "geom" << m_geometry.size(); m_dock->restoreGeometry(m_geometry); //m_dock->setAllowedAreas(Qt::RightDockWidgetArea); if (!m_dialog) { m_dialog = new VibrationWidget(); m_dialog->getUi()->normalizeDispCheckBox->setChecked(m_normalize); m_dialog->getUi()->displayForcesCheckBox->setChecked(m_displayVectors); m_dialog->getUi()->animationSpeedCheckBox->setChecked(m_animationSpeed); //m_dialog->setScale(m_scale); connect(m_dialog, SIGNAL(selectedMode(int)), this, SLOT(updateMode(int))); connect(m_dialog, SIGNAL(scaleUpdated(double)), this, SLOT(setScale(double))); connect(m_dialog, SIGNAL(forceVectorUpdated(bool)), this, SLOT(setDisplayForceVectors(bool))); connect(m_dialog, SIGNAL(normalizeUpdated(bool)), this, SLOT(setNormalize(bool))); connect(m_dialog, SIGNAL(animationSpeedUpdated(bool)), this, SLOT(setAnimationSpeed(bool))); connect(m_dialog, SIGNAL(toggleAnimation()), this, SLOT(toggleAnimation())); connect(m_dialog, SIGNAL(pauseAnimation()), this, SLOT(pauseAnimation())); connect(m_dialog, SIGNAL(showSpectra()), this, SLOT(showSpectra())); m_dialog->setMolecule(m_molecule); m_animation = new Animation(this); m_animation->setLoopCount(0); // continual loopback } } m_dock->setWidget(m_dialog); m_dock->setVisible(false); return m_dock; } void VibrationExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; GLWidget *widget = GLWidget::current(); if (widget) { m_widget = widget; // engines, extensions, warnings in updateMode() foreach (Engine *engine, widget->engines()) { if (engine->identifier() == "Force") { m_dialog->setDisplayForceVectors(engine->isEnabled()); connect(engine, SIGNAL(enableToggled(bool)), m_dialog, SLOT(setDisplayForceVectors(bool))); } } } if (m_dock) { if (molecule !=0) { if (molecule->OBMol().GetData(OBGenericDataType::VibrationData)) { //m_dock->show(); m_dialog->setEnabled(true); if (!m_dock->toggleViewAction()->isChecked()) m_dock->toggleViewAction()->activate(QAction::Trigger); } else { //m_dock->close(); m_dialog->setEnabled(false); if (m_dock->toggleViewAction()->isChecked()) m_dock->toggleViewAction()->activate(QAction::Trigger); } } else { m_dock->close(); if (m_dock->toggleViewAction()->isChecked()) m_dock->toggleViewAction()->activate(QAction::Trigger); m_dialog->setEnabled(false); } m_dialog->setMolecule(molecule); } if (m_animation) m_animation->setMolecule(molecule); // update m_vibrations if (!m_molecule) { m_vibrations = NULL; m_mode = -1; } clearAnimationFrames(); } void VibrationExtension::updateMode(int mode) { if (!m_molecule) return; //nothing to do // stop animating if (m_animating) { m_animation->stop(); } if (mode == -1) { return; // signal to end updates } OBMol obmol = m_molecule->OBMol(); m_vibrations = static_cast(obmol.GetData(OBGenericDataType::VibrationData)); if (m_vibrations == NULL) return; // e.g., when destroying the molecule; if (m_vibrations->GetLx().size() != 0 && mode < static_cast(m_vibrations->GetLx().size())) { m_mode = mode; updateForcesAndFrames(); } else { if (m_widget) { QMessageBox::warning(m_widget, tr("Vibrational Analysis"), tr("No vibrational displacements exist.")); } } } // animate the mode, add force arrows, etc. void VibrationExtension::updateForcesAndFrames() { if (m_mode == -1) return; // we do this check above /* if (m_vibrations == NULL || m_vibrations->GetLx().size() == 0 || m_mode > m_vibrations->GetLx().size()) return; */ vector displacementVectors = m_vibrations->GetLx()[m_mode]; // Sanity check // Currently disabled -- GAMESS does weird things. // if (displacementVectors.size() != m_molecule->numAtoms()) { // QMessageBox::warning(m_widget, tr("Vibrational Analysis"), tr("The computed vibrations do not match this molecule.")); // return; // } vector3 obDisplacement; Eigen::Vector3d displacement, atomPos; double norm = 1; // delete any old frames clearAnimationFrames(); // We do 4 "phases" of vibrations for (unsigned int frame = 0; frame < m_framesPerStep * 4; ++frame) m_animationFrames.push_back( new vector(m_molecule->numAtoms()) ); if (m_displayVectors) setDisplayForceVectors(true); if (m_normalize) { norm = 0; foreach (Atom *atom, m_molecule->atoms()) { obDisplacement = displacementVectors[atom->index()]; displacement = Eigen::Vector3d(obDisplacement.x(), obDisplacement.y(), obDisplacement.z()); norm += displacement.norm(); } } foreach (Atom *atom, m_molecule->atoms()) { obDisplacement = displacementVectors[atom->index()]; displacement = Eigen::Vector3d(obDisplacement.x(), obDisplacement.y(), obDisplacement.z()); if (m_normalize) { displacement /= norm; } if (m_displayVectors) atom->setForceVector(displacement*5); // We'll create frames for 4 "steps" // 1) current coordinates -> + displacement // 2) + displacement -> original coords // 3) original coords -> - displacement // 4) - displacement -> original coords for (unsigned int frame = 0; frame < m_framesPerStep; ++frame) { atomPos = *(atom->pos()); m_animationFrames[frame]->at(atom->index()) = atomPos + displacement * (m_scale * frame/m_framesPerStep); m_animationFrames[frame + 1*m_framesPerStep]->at(atom->index()) = atomPos + displacement * ( m_scale * (m_framesPerStep - frame) / m_framesPerStep); m_animationFrames[frame + 2*m_framesPerStep]->at(atom->index()) = atomPos - displacement * (m_scale * frame / m_framesPerStep); m_animationFrames[frame + 3*m_framesPerStep]->at(atom->index()) = atomPos - displacement * (m_scale * (m_framesPerStep - frame) / m_framesPerStep); } // foreach frame set } // foreach atom // and we remove the first frame (duplicate) m_animationFrames.erase(m_animationFrames.begin()); m_animation->setFrames(m_animationFrames); if (m_animationSpeed) { // vibrations per femtosecond // wavenumber * 3.0e10 cm/s * 1e-15 s/fs = 3e-5 fs-1 if (m_mode < static_cast(m_vibrations->GetFrequencies().size())) { double vibPerFs = m_vibrations->GetFrequencies()[m_mode] * 3.0e-5; // 10fs = 4000 cm-1 gets 1 second apparent vibration // fs-1 above * 10fs / 1 s => per second * frames = fps double fps = vibPerFs * 10.0; m_animation->setFps(fps * m_animationFrames.size()); qDebug() << vibPerFs << " fps " << fps * m_animationFrames.size(); } } if (m_animating && !m_paused) { m_animation->start(); } m_molecule->update(); } void VibrationExtension::setScale(double scale) { m_scale = scale; updateMode(m_mode); } void VibrationExtension::setNormalize(bool normalize) { m_normalize = normalize; updateMode(m_mode); } void VibrationExtension::setDisplayForceVectors(bool enabled) { if (m_displayVectors == enabled) return; // nothing to do m_displayVectors = enabled; foreach (Engine *engine, m_widget->engines()) { if (engine->identifier() == "Force") { engine->setEnabled(enabled); } } m_widget->update(); } void VibrationExtension::setAnimationSpeed(bool enabled) { if (!m_widget || !m_animation) return; m_animationSpeed = enabled; updateMode(m_mode); m_widget->update(); } void VibrationExtension::toggleAnimation() { QSettings settings; if (m_animationFrames.size() == 0) { m_dialog->animateButtonClicked(false); return; } m_animating = !m_animating; int q = m_widget->quality(); if (m_animating) { if (m_widget->quickRender() && (q > 0)) m_widget->setQuality(q-1); m_animation->start(); } else { m_animation->stop(); if (m_widget->quickRender()) m_widget->setQuality(settings.value("quality", 2).toInt()); } } void VibrationExtension::pauseAnimation() { QSettings settings; m_paused = !m_paused; int q = m_widget->quality(); if (m_paused) { if (m_widget->quickRender()) m_widget->setQuality(settings.value("quality", 2).toInt()); m_animation->pause(); } else { if (m_widget->quickRender() && (q > 0)) m_widget->setQuality(q-1); m_animation->start(); } } void VibrationExtension::clearAnimationFrames() { m_animationFrames.clear(); } void VibrationExtension::showSpectra() { if(!m_molecule) return; PluginManager *plugins = PluginManager::instance(); Extension * spectra = plugins->extension("Spectra", m_widget); if (!spectra) return; spectra->setMolecule(m_molecule); spectra->performAction(0, m_widget); } void VibrationExtension::writeSettings(QSettings &settings) const { if (m_dock) settings.setValue("vibration/geometry", m_dock->saveGeometry()); settings.setValue("vibration/normalize", m_normalize); settings.setValue("vibration/forces", m_displayVectors); settings.setValue("vibration/speed", m_animationSpeed); } void VibrationExtension::readSettings(QSettings &settings) { m_geometry = settings.value("vibration/geometry").toByteArray(); m_normalize = settings.value("vibration/normalize", true).toBool(); m_displayVectors = settings.value("vibration/forces", true).toBool(); m_animationSpeed = settings.value("vibration/speed", false).toBool(); //m_scale = settings.value("vibration/scale").toDouble(); } } // end namespace Avogadro Q_EXPORT_PLUGIN2(vibrationextension, Avogadro::VibrationExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/spectra/abstract_ir.cpp0000644000175000001440000001545312250371054024455 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "abstract_ir.h" using namespace std; namespace Avogadro { AbstractIRSpectra::AbstractIRSpectra( SpectraDialog *parent ) : SpectraType( parent ), m_scale(0.0), m_fwhm(0.0), m_labelYThreshold(0.0) { ui.setupUi(m_tab_widget); // Setup signals/slots connect(this, SIGNAL(plotDataChanged()), m_dialog, SLOT(regenerateCalculatedSpectra())); connect(ui.cb_labelPeaks, SIGNAL(toggled(bool)), this, SLOT(toggleLabels(bool))); connect(ui.spin_threshold, SIGNAL(valueChanged(double)), this, SLOT(updateThreshold(double))); connect(ui.spin_scale, SIGNAL(valueChanged(double)), this, SLOT(updateScaleSlider(double))); connect(ui.hs_scale, SIGNAL(sliderPressed()), this, SLOT(scaleSliderPressed())); connect(ui.hs_scale, SIGNAL(sliderReleased()), this, SLOT(scaleSliderReleased())); connect(ui.hs_scale, SIGNAL(valueChanged(int)), this, SLOT(updateScaleSpin(int))); connect(ui.spin_FWHM, SIGNAL(valueChanged(double)), this, SLOT(updateFWHMSlider(double))); connect(ui.hs_FWHM, SIGNAL(sliderPressed()), this, SLOT(fwhmSliderPressed())); connect(ui.hs_FWHM, SIGNAL(sliderReleased()), this, SLOT(fwhmSliderReleased())); connect(ui.hs_FWHM, SIGNAL(valueChanged(int)), this, SLOT(updateFWHMSpin(int))); connect(ui.combo_yaxis, SIGNAL(currentIndexChanged(QString)), this, SLOT(updateYAxis(QString))); connect(ui.combo_scalingType, SIGNAL(currentIndexChanged(int)), this, SLOT(changeScalingType(int))); } void AbstractIRSpectra::getCalculatedPlotObject(PlotObject *plotObject) { plotObject->clearPoints(); if (m_fwhm == 0.0) { // get singlets plotObject->addPoint( 400, 0); for (int i = 0; i < m_yList.size(); i++) { double wavenumber = m_xList.at(i);// already scaled! double transmittance = m_yList.at(i); plotObject->addPoint ( wavenumber, 0 ); if (ui.cb_labelPeaks->isChecked()) { // %L1 uses localized number format (e.g., 1.023,4 in Europe) plotObject->addPoint( wavenumber, transmittance, QString("%L1").arg(wavenumber, 0, 'f', 1) ); } else { plotObject->addPoint( wavenumber, transmittance ); } plotObject->addPoint( wavenumber, 0 ); } plotObject->addPoint( 3500, 0); } // End singlets else { // Get gaussians // convert FWHM to sigma squared gaussianWiden(plotObject, m_fwhm); // Normalization is probably screwed up, so renormalize the data double min, max; min = max = plotObject->points().first()->y(); for(int i = 0; i< plotObject->points().size(); i++) { double cur = plotObject->points().at(i)->y(); if (cur < min) min = cur; if (cur > max) max = cur; } for(int i = 0; i< plotObject->points().size(); i++) { double cur = plotObject->points().at(i)->y(); plotObject->points().at(i)->setY( (cur - min) * 100 / (max - min)); } } // End gaussians } void AbstractIRSpectra::rescaleFrequencies() { for (int i=0; isetValue(scale); rescaleFrequencies(); } void AbstractIRSpectra::updateScaleSlider(double scale) { int intScale = static_cast(scale*100); disconnect(ui.hs_scale, SIGNAL(valueChanged(int)), this, SLOT(updateScaleSpin(int))); ui.hs_scale->setValue(intScale); connect(ui.hs_scale, SIGNAL(valueChanged(int)), this, SLOT(updateScaleSpin(int))); m_scale = scale; rescaleFrequencies(); } void AbstractIRSpectra::scaleSliderPressed() { disconnect(ui.spin_scale, SIGNAL(valueChanged(double)), this, SLOT(updateScaleSlider(double))); } void AbstractIRSpectra::scaleSliderReleased() { connect(ui.spin_scale, SIGNAL(valueChanged(double)), this, SLOT(updateScaleSlider(double))); } void AbstractIRSpectra::updateFWHMSpin(int fwhm) { if (fwhm == m_fwhm) return; m_fwhm = fwhm; ui.spin_FWHM->setValue(m_fwhm); emit plotDataChanged(); } void AbstractIRSpectra::updateFWHMSlider(double fwhm) { disconnect(ui.hs_FWHM, SIGNAL(valueChanged(int)), this, SLOT(updateFWHMSpin(int))); ui.hs_FWHM->setValue(fwhm); connect(ui.hs_FWHM, SIGNAL(valueChanged(int)), this, SLOT(updateFWHMSpin(int))); m_fwhm = fwhm; emit plotDataChanged(); } void AbstractIRSpectra::fwhmSliderPressed() { disconnect(ui.spin_FWHM, SIGNAL(valueChanged(double)), this, SLOT(updateFWHMSlider(double))); } void AbstractIRSpectra::fwhmSliderReleased() { connect(ui.spin_FWHM, SIGNAL(valueChanged(double)), this, SLOT(updateFWHMSlider(double))); } void AbstractIRSpectra::updateYAxis(QString text) { if (m_yaxis == text) { return; } m_dialog->getUi()->plot->axis(PlotWidget::LeftAxis)->setLabel(text); m_yaxis = text; emit plotDataChanged(); } void AbstractIRSpectra::changeScalingType(int type) { m_scalingType = static_cast(type); rescaleFrequencies(); } void AbstractIRSpectra::toggleLabels(bool enabled) { ui.spin_threshold->setEnabled(enabled); emit plotDataChanged(); } void AbstractIRSpectra::updateThreshold(double t) { m_labelYThreshold = t; emit plotDataChanged(); } double AbstractIRSpectra::scale(double w) { switch(m_scalingType) { case LINEAR: return m_scale; break; case RELATIVE: return 1-w*(1-m_scale)/1000; break; //TODO: add other scaling algorithms default: return m_scale; } } } avogadro-1.1.1/libavogadro/src/extensions/spectra/CMakeLists.txt0000644000175000001440000000077712250371054024217 0ustar marcususersinclude_directories(${CMAKE_CURRENT_BINARY_DIR}) set(LINK_LIBS avogadro) set(PLUGIN_LABEL extensions) set(PLUGIN_TARGET extensions) ### Vibrations avogadro_plugin_nogl(vibrationextension "vibrationextension.cpp;vibrationwidget.cpp" vibrationwidget.ui) ### Spectra avogadro_plugin_nogl(spectraextension "spectraextension.cpp;spectradialog.cpp;spectratype.cpp;abstract_ir.cpp;ir.cpp;nmr.cpp;dos.cpp;uv.cpp;cd.cpp;raman.cpp" "spectradialog.ui;tab_ir_raman.ui;tab_nmr.ui;tab_dos.ui;tab_uv.ui;tab_cd.ui") avogadro-1.1.1/libavogadro/src/extensions/spectra/tab_cd.ui0000644000175000001440000000544212250371054023224 0ustar marcususers Tab_CD 0 0 415 260 Spectra Tab 0 0 &Gaussian Width: spin_FWHM Qt::Horizontal 40 20 Qt::Vertical 20 40 0 0 &Label peaks false 0 0 1 1000.000000000000000 0.500000000000000 Rotatory Strength type: avogadro-1.1.1/libavogadro/src/extensions/spectra/vibrationwidget.ui0000644000175000001440000001625212250371054025212 0ustar marcususers VibrationWidget 0 0 274 633 0 0 Molecular Vibrations 0 Filter: km/mol 0 0 Qt::ScrollBarAlwaysOff QAbstractItemView::NoEditTriggers true QAbstractItemView::SingleSelection QAbstractItemView::SelectRows Qt::SolidLine true 0 3 false false ν (cm⁻¹) I (km/mol) Activity (A^4/amu) &Show Spectra... 0 0 Animation 0 0 higher frequency vibrations will show faster movement Animation speed set by frequency Display force &vectors true false 0 0 Start &Animation :/amarok/icons/amarok_play.png:/amarok/icons/amarok_play.png false 0 0 Pause :/amarok/icons/amarok_pause.png:/amarok/icons/amarok_pause.png Amplitude: scaleSlider 1 11 6 Qt::Horizontal QSlider::TicksBelow 1 &Normalize displacements true avogadro-1.1.1/libavogadro/src/extensions/spectra/spectradialog.h0000644000175000001440000000633012250371054024440 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #ifndef SPECTRADIALOG_H #define SPECTRADIALOG_H #include #include #include #include #include #include #include #include #include #include #include #include "ui_spectradialog.h" namespace Avogadro { class SpectraType; class IRSpectra; class NMRSpectra; class DOSSpectra; class UVSpectra; class CDSpectra; class RamanSpectra; class SpectraDialog : public QDialog { Q_OBJECT public: explicit SpectraDialog( QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~SpectraDialog(); void setMolecule(Molecule *molecule); void writeSettings() const; void readSettings(); Ui::SpectraDialog * getUi() {return &ui;}; void labelsUp(bool up); public slots: void regenerateCalculatedSpectra(); void regenerateImportedSpectra(); private slots: void changeBackgroundColor(); void changeForegroundColor(); void changeCalculatedSpectraColor(); void changeImportedSpectraColor(); void changeFont(); void loadSpectra(); // Used to load calculated data from an external source void importSpectra(); // Used to load experimental spectra void updatePlot(); void toggleImported(bool state); void toggleCalculated(bool state); void saveImage(); void toggleAdvanced(); void schemeChanged(); void updateScheme(int scheme); void updateCurrentSpectra(const QString & text); void updateComboSpectra(int index); void addScheme(); void removeScheme(); void renameScheme(); void exportSpectra(); void saveImageFileDialog(); void showCoordinates(double x,double y); protected: void showEvent(QShowEvent * event); private: Ui::SpectraDialog ui; IRSpectra *m_spectra_ir; NMRSpectra *m_spectra_nmr; DOSSpectra *m_spectra_dos; UVSpectra *m_spectra_uv; CDSpectra *m_spectra_cd; RamanSpectra *m_spectra_raman; Molecule *m_molecule; int m_scheme; QList > *m_schemes; QString m_spectra; SpectraType * currentSpectra(); PlotObject *m_calculatedSpectra; PlotObject *m_importedSpectra; PlotObject *m_nullSpectra; QTime m_time; int m_lastUpdate; bool m_labelsUp; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/spectra/ir.h0000644000175000001440000000261412250371054022232 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public icense for more details. ***********************************************************************/ #ifndef SPECTRATYPE_IR_H #define SPECTRATYPE_IR_H #include "abstract_ir.h" namespace Avogadro { class IRSpectra : public AbstractIRSpectra { Q_OBJECT public: IRSpectra( SpectraDialog *parent = 0 ); ~IRSpectra(); void writeSettings(); void readSettings(); bool checkForData(Molecule* mol); void setupPlot(PlotWidget * plot); void getCalculatedPlotObject(PlotObject *plotObject); void setImportedData(const QList & xList, const QList & yList); QString getTSV(); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/spectra/abstract_ir.h0000644000175000001440000000410412250371054024111 0ustar marcususers/********************************************************************** SpectraDialog - Visualize spectral data from QM calculations Copyright (C) 2009 by David Lonie Copyright (C) 2010 by Konstantin Tokarev This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef SPECTRATYPE_ABSTRACT_IR_H #define SPECTRATYPE_ABSTRACT_IR_H #include "spectradialog.h" #include "spectratype.h" #include "ui_tab_ir_raman.h" namespace Avogadro { enum ScalingType { LINEAR, RELATIVE }; // Abstract data type - no instance of it can be created class AbstractIRSpectra : public SpectraType { Q_OBJECT public: AbstractIRSpectra( SpectraDialog *parent = 0 ); virtual void setupPlot(PlotWidget * plot) = 0; void getCalculatedPlotObject(PlotObject *plotObject); protected slots: void toggleLabels(bool); void updateThreshold(double); void updateScaleSpin(int); void updateScaleSlider(double); void scaleSliderPressed(); void scaleSliderReleased(); void updateFWHMSpin(int); void updateFWHMSlider(double); void fwhmSliderPressed(); void fwhmSliderReleased(); void changeScalingType(int); void updateYAxis(QString); void rescaleFrequencies(); protected: double scale(double w); Ui::Tab_IR_Raman ui; double m_scale; double m_fwhm; double m_labelYThreshold; QString m_yaxis; QList m_xList_orig; ScalingType m_scalingType; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/povraydialog.h0000644000175000001440000000601412250371054022655 0ustar marcususers/********************************************************************** POVRayDialog - Dialog to render images using POV-Ray Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef POVRAYDIALOG_H #define POVRAYDIALOG_H #include #include #include #include "ui_povraydialog.h" class QSettings; namespace Avogadro { class POVRayDialog : public QDialog { Q_OBJECT public: explicit POVRayDialog(QWidget* parent = 0, Qt::WindowFlags f = 0); ~POVRayDialog(); /** * Set the width and height of the POV-Ray scene */ void setImageSize(int width, int height); /** * @return The width of the POV-Ray scene in pixels. */ int imageWidth(); /** * @return the height of the POV-Ray scene in pixels. */ int imageHeight(); /** * Set the file name of the POV-Ray file */ void setFileName(const QString& fileName); /** * @return The file name of the output. */ QString fileName(); /** * Set the path to the POV-Ray executable. */ void setCommand(const QString& command); /** * @return The path to the POV-Ray executable. */ QString command(); /** * @return The command line to run POV-Ray and generate the image file. */ QStringList commandLine(); /** * @return True if the POV-Ray source should be kept after rendering. */ bool keepSource(); /** * @return True if POV-Ray should be called by Avogadro to render the image. */ bool renderDirect(); /** * Save the settings for this dialog. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const; /** * Read the settings for this dialog. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings); private: Ui::POVRayDialog ui; Q_SIGNALS: void render(); void preview(int, int); public Q_SLOTS: void selectFileName(); void renderClicked(); void resized(); void updateCommandLine(); }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/povrayextension.cpp0000644000175000001440000001642112250371054023770 0ustar marcususers/********************************************************************** POVRayExtension - Extension for generating POV-Ray rendered images Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "povrayextension.h" #include "povpainter.h" #include #include #include #include #include #include #include #include #include namespace Avogadro { using Eigen::Vector3d; POVRayExtension::POVRayExtension(QObject* parent) : Extension(parent), m_glwidget(0), m_POVRayDialog(0), m_molecule(0), m_process(0) { QAction* action = new QAction(this); action->setText(tr("POV-Ray...")); m_actions.append(action); } POVRayExtension::~POVRayExtension() { } QList POVRayExtension::actions() const { return m_actions; } QString POVRayExtension::menuPath(QAction*) const { return tr("&File") + '>' + tr("Export"); } QUndoCommand* POVRayExtension::performAction(QAction *, GLWidget *widget) { m_glwidget = widget; if (!m_POVRayDialog) { m_POVRayDialog = new POVRayDialog(static_cast(parent())); // m_POVRayDialog->setImageSize(m_glwidget->width(), m_glwidget->height()); connect(m_POVRayDialog, SIGNAL(render()), this, SLOT(render())); connect(m_glwidget, SIGNAL(resized()), m_POVRayDialog, SLOT(resized())); m_POVRayDialog->show(); } else { // m_POVRayDialog->setImageSize(m_glwidget->width(), m_glwidget->height()); QFileInfo info(m_molecule->fileName()); m_POVRayDialog->setFileName(info.absolutePath() + '/' + info.baseName() + ".png"); m_POVRayDialog->show(); } return 0; } void POVRayExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); if (m_POVRayDialog) { m_POVRayDialog->writeSettings(settings); } } void POVRayExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); if (m_POVRayDialog) { m_POVRayDialog->readSettings(settings); } else { m_POVRayDialog = new POVRayDialog(static_cast(parent())); m_POVRayDialog->readSettings(settings); connect(m_POVRayDialog, SIGNAL(render()), this, SLOT(render())); // This is connecting a NULL on my Mac - Geoff // QObject::connect: Cannot connect (null)::resized() to Avogadro::POVRayDialog::resized() if (m_glwidget) connect(m_glwidget, SIGNAL(resized()), m_POVRayDialog, SLOT(resized())); } } void POVRayExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } void POVRayExtension::render() { // Render the scene using POV-Ray QString fileName = m_POVRayDialog->fileName().mid(0, m_POVRayDialog->fileName().lastIndexOf(".")); // Check a filename was supplied if (fileName.isEmpty()) { QMessageBox::warning(m_POVRayDialog, tr("No filename supplied."), tr("No valid filename was supplied.")); return; } if (!m_POVRayDialog->renderDirect() && !m_POVRayDialog->keepSource()) { QMessageBox::warning(m_POVRayDialog, tr("Does not compute."), tr("You requested no direct rendering using POV-Ray and not to keep the POV-Ray file. This will result in no output being saved. Are you sure that is what you want?")); return; } // Check that the povray executable exists - FIXME implement path search... /* QFileInfo info(m_POVRayDialog->command()); if (!info.exists()) { QMessageBox::warning(m_POVRayDialog, "POV-Ray executable not found.", "The POV-Ray executable, normally named 'povray', cannot be found."); return; } */ // Check whether the .pov file can be written QFile povFile(fileName + ".pov"); if (povFile.open(QIODevice::WriteOnly | QIODevice::Text)) { double aspectRatio = static_cast(m_POVRayDialog->imageWidth()) / m_POVRayDialog->imageHeight(); qDebug() << "Aspect ratio:" << aspectRatio; povFile.close(); POVPainterDevice pd(fileName + ".pov", aspectRatio, m_glwidget); } else { QMessageBox::warning(m_POVRayDialog, tr("Cannot Write to File."), tr("Cannot write to file %1. Do you have permissions to write to that location?").arg(fileName+".pov")); return; } if (m_POVRayDialog->renderDirect()) { m_process = new QProcess(this); QFile pngFile(fileName + ".png"); if (pngFile.open(QIODevice::WriteOnly | QIODevice::Text)) { pngFile.close(); QFileInfo info(fileName + ".png"); m_process->setWorkingDirectory(info.absolutePath()); m_process->start(m_POVRayDialog->command(), m_POVRayDialog->commandLine()); qDebug() << "Command:" << m_POVRayDialog->command() + ' ' + m_POVRayDialog->commandLine().join(" "); qDebug() << "Rendering started..."; if (!m_process->waitForStarted()) { QMessageBox::warning(m_POVRayDialog, tr("POV-Ray failed to start."), tr("POV-Ray failed to start. May be the path to the executable is not set correctly.")); } connect(m_process, SIGNAL(finished(int)), this, SLOT(finished(int))); } else { // Should not really get here in general, but best to check QMessageBox::warning(m_POVRayDialog, tr("Cannot Write to File."), tr("Cannot write to file %1. Do you have permissions to write to that location?").arg(fileName+".png")); return; } } } void POVRayExtension::finished(int exitCode) { if (!m_POVRayDialog->keepSource()) { QString fileName = m_POVRayDialog->fileName().mid(0, m_POVRayDialog->fileName().lastIndexOf(".")); QFile povSource(fileName + ".pov"); povSource.remove(); } qDebug() << "Rendering complete."; QByteArray result = m_process->readAllStandardError();//m_process->readAll(); qDebug() << "POV-Ray output:" << result << "Exit code:" << exitCode; disconnect(m_process, 0, this, 0); m_process->deleteLater(); m_process = 0; } } // End namespace Avogadro Q_EXPORT_PLUGIN2(povrayextension, Avogadro::POVRayExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/constraintsdialog.ui0000644000175000001440000001354712250371054024103 0ustar marcususers ConstraintsDialog 0 0 750 357 Constraints QAbstractItemView::SelectRows Add Constraints 40 16777215 Type Ignore Atom Fix Atom Fix Atom X Fix Atom Y Fix Atom Z Distance Angle Torsion angle Constraint Value Atom Indices Add Options false Save false Load Qt::Horizontal 40 20 0 0 100 0 Delete Selected Delete All Qt::Horizontal 40 20 OK avogadro-1.1.1/libavogadro/src/extensions/insertpeptideextension.cpp0000644000175000001440000003463312250371054025334 0ustar marcususers/********************************************************************** InsertPeptide - Insert oligopeptide sequences Copyright (C) 2008-2009 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "insertpeptideextension.h" #include "insertcommand.h" #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { void AddResidue(QString residue, bool lStereo, OBMol &mol, vector &vic, const char chain); void AddTerminus(int element, QString atomID, int a, double distance, int b, double angle, int c, double dihedral, OBMol &mol, vector &vic); InsertPeptideExtension::InsertPeptideExtension(QObject *parent) : Extension(parent), m_molecule(0), phi(180.0), psi(180.0), omega(179.99), lStereo(true), structureType(0), m_dialog(0) { QAction *action = new QAction(this); action->setText(tr("Peptide...")); m_actions.append(action); m_widget = qobject_cast(parent); } InsertPeptideExtension::~InsertPeptideExtension() { } QList InsertPeptideExtension::actions() const { return m_actions; } QString InsertPeptideExtension::menuPath(QAction *) const { return tr("&Build") + '>' + tr("&Insert"); } void InsertPeptideExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* InsertPeptideExtension::performAction(QAction *, GLWidget *widget) { if (m_molecule == NULL) return NULL; // nothing we can do m_widget = widget; // save for delayed response if (m_dialog == NULL) { constructDialog(); } m_dialog->show(); return NULL; // delayed action on user clicking the Insert button } void InsertPeptideExtension::performInsert() { if (!m_dialog) return; // nothing we can do QString sequence = m_dialog->sequenceText->toPlainText().toLower(); if (sequence.isEmpty()) return; // also nothing to do OBMol obfragment; vector vic; vic.push_back((OBInternalCoord*)NULL); OBInternalCoord* ic; int lastN, lastCa, lastCac, lastO; // backbone atoms lastN = lastCa = lastCac = lastO = 0; int newN, newCa, newCac, newO; int lastAtom = 0; // last atom read from previous residue double amideLength = 1.34; double bondAngle = 120.0; const char chain = m_dialog->chainNumberCombo->currentText().toAscii()[0]; // Now the work begins // Get the sequence (in lower case) obfragment.BeginModify(); foreach (const QString &residue, sequence.split('-')) { AddResidue(residue, lStereo, obfragment, vic, chain); if (!obfragment.NumAtoms()) {// Residue was not added - bail qDebug() << "Problem adding new residues - file not read."; return; } newN = lastAtom + 1; newCa = lastAtom + 2; newCac = lastAtom + 3; newO = lastAtom + 4; if (lastAtom != 0) { // set the peptide bond to the previous residue // first the nitrogen ic = vic[newN]; ic->_a = obfragment.GetAtom(lastCac); ic->_dst = amideLength; ic->_b = obfragment.GetAtom(lastCa); ic->_ang = bondAngle; ic->_c = obfragment.GetAtom(lastN); ic->_tor = psi; // fix the O=C from previous residue ic = vic[lastO]; ic->_tor = 180.0 + psi; // now the Calpha ic = vic[newCa]; ic->_b = obfragment.GetAtom(lastCac); ic->_ang = bondAngle; ic->_c = obfragment.GetAtom(lastCa); ic->_tor = omega; // now the new C=O ic = vic[newCac]; ic->_c = obfragment.GetAtom(lastCac); ic->_tor = phi; // add the peptide bond obfragment.AddBond(lastCac, newN, 1); } else { // The first residue // Add the N-terminus modification switch (m_dialog->nGroupCombo->currentIndex()) { case 0: // NH2 AddTerminus(1, "HN", newN, 1.016, newCa, 120.0, newCac, 175.0, obfragment, vic); break; case 1: // NH3+ AddTerminus(1, "HN", newN, 1.016, newCa, 109.5, newCac, 117.0, obfragment, vic); AddTerminus(1, "2HN", newN, 1.016, newCa, 109.5, newCac, -117.0, obfragment, vic); break; default: break; } } // add the known backbone bonds obfragment.AddBond(newN, newCa, 1); obfragment.AddBond(newCa, newCac, 1); obfragment.AddBond(newCac, newO, 2); // C=O lastN = newN; lastCa = newCa; lastCac = newCac; lastO = newO; lastAtom = obfragment.NumAtoms(); } // Fix the final C=O if not straight-chain ic = vic[lastO]; ic->_tor = 180.0 + psi; // Add the C-terminus end group switch (m_dialog->cGroupCombo->currentIndex()) { case 0: // CO2H AddTerminus(8, "OXT", lastCac, 1.351, lastO, 120.0, lastCa, -180.0, obfragment, vic); obfragment.AddBond(obfragment.NumAtoms(), lastCac, 1); AddTerminus(1, "HO", obfragment.NumAtoms(), 1.064, lastCac, 120.0, lastO, 180.0, obfragment, vic); break; case 1: // CO2- AddTerminus(8, "OXT", lastCac, 1.351, lastO, 120.0, lastCa, -180.0, obfragment, vic); break; default: break; } obfragment.EndModify(); if (obfragment.NumAtoms()) { // Don't do all this work, if there's nothing to do InternalToCartesian(vic,obfragment); OBBitVec allAtoms; allAtoms.SetRangeOn(0, obfragment.NumAtoms()); allAtoms.SetBitOff(obfragment.NumAtoms() - 1); // Don't add bonds for the terminus resdat.AssignBonds(obfragment, allAtoms); // some of the fragments still miss bonds obfragment.ConnectTheDots(); obfragment.SetPartialChargesPerceived(); Molecule fragment; fragment.setOBMol(&obfragment); emit performCommand(new InsertFragmentCommand(m_molecule, fragment, m_widget, tr("Insert Peptide"))); } } void InsertPeptideExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); settings.setValue("phiAngle", phi); settings.setValue("psiAngle", psi); settings.setValue("lStereo", lStereo); settings.setValue("structureType", structureType); } void InsertPeptideExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); phi = settings.value("phiAngle", 180.0).toDouble(); psi = settings.value("psiAngle", 180.0).toDouble(); lStereo = settings.value("lStereo", true).toBool(); structureType = settings.value("structureType", 0).toInt(); updateDialog(); } void InsertPeptideExtension::constructDialog() { if (m_dialog == NULL) { m_dialog = new InsertPeptideDialog(m_widget); QButtonGroup* stereoGroup = new QButtonGroup(m_dialog); stereoGroup->addButton(m_dialog->dStereoButton, 0); stereoGroup->addButton(m_dialog->lStereoButton, 1); stereoGroup->setExclusive(true); connect(stereoGroup, SIGNAL(buttonClicked(int)), this, SLOT(setStereo(int))); connect(m_dialog->structureCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(setStructureType(int))); connect(m_dialog->phiSpin, SIGNAL(valueChanged(double)), this, SLOT(setPhi(double))); connect(m_dialog->psiSpin, SIGNAL(valueChanged(double)), this, SLOT(setPsi(double))); connect(m_dialog->insertButton, SIGNAL(clicked()), this, SLOT(performInsert())); // Set the amino buttons to update the sequence foreach(const QToolButton *child, m_dialog->findChildren()) { connect(child, SIGNAL(clicked()), this, SLOT(updateText())); } connect(m_dialog, SIGNAL(destroyed()), this, SLOT(dialogDestroyed())); } m_dialog->sequenceText->setPlainText(QString()); updateDialog(); } void InsertPeptideExtension::updateDialog() { if (m_dialog == NULL) return; // the method will be called again when the dialog is created m_dialog->structureCombo->setCurrentIndex(structureType); m_dialog->phiSpin->setValue(phi); m_dialog->psiSpin->setValue(psi); if (lStereo) m_dialog->lStereoButton->setChecked(true); else m_dialog->dStereoButton->setChecked(true); } void InsertPeptideExtension::updateText() { QToolButton *button = qobject_cast(sender()); if (button) { QString sequenceText = m_dialog->sequenceText->toPlainText(); if (!sequenceText.isEmpty()) sequenceText += '-'; // divider between amino acids sequenceText += button->text(); m_dialog->sequenceText->setPlainText(sequenceText); } } void InsertPeptideExtension::setStereo(int stereoValue) { lStereo = stereoValue; } void InsertPeptideExtension::setPhi(double angle) { phi = angle; } void InsertPeptideExtension::setPsi(double angle) { psi = angle; } void InsertPeptideExtension::setStructureType(int type) { structureType = type; switch (type) { case 0: // straight chain setPhi(180.0); setPsi(180.0); m_dialog->phiSpin->setValue(phi); m_dialog->psiSpin->setValue(psi); break; case 1: // alpha helix setPhi(-60.0); setPsi(-40.0); m_dialog->phiSpin->setValue(phi); m_dialog->psiSpin->setValue(psi); break; case 2: // beta sheet setPhi(-135.0); setPsi(135.0); m_dialog->phiSpin->setValue(phi); m_dialog->psiSpin->setValue(psi); break; case 3: // 3-10 helix setPhi(-74.0); setPsi(-4.0); m_dialog->phiSpin->setValue(phi); m_dialog->psiSpin->setValue(psi); break; case 4: // pi helix setPhi(-57.0); setPsi(-70.0); m_dialog->phiSpin->setValue(phi); m_dialog->psiSpin->setValue(psi); break; default: // arbitrary value break; } } void InsertPeptideExtension::dialogDestroyed() { m_dialog = 0; } void AddResidue(QString residue, bool lStereo, OBMol &mol, vector &vic, const char chain) { QString filename; /// TODO Make this work in the build directory. filename = QCoreApplication::applicationDirPath() + "/../share/avogadro/builder/amino/"; if (residue != "gly") { if (lStereo) filename += "l-"; else // D stereo filename += "d-"; } filename += residue + ".zmat"; ifstream ifs; ifs.open(filename.toAscii()); if (!ifs) { // file doesn't exist qDebug() << " Cannot open residue file: " << filename; return; } // Offset: // When we add the internal coordinates, we have to increment // based on the size of the molecule so far unsigned int offset = mol.NumAtoms(); // setup the parent residue int prevRes = mol.NumResidues() + 1; OBResidue *res = mol.NewResidue(); res->SetNum(prevRes); res->SetChain(chain); // needs to be in uppercase res->SetName(residue.toUpper().toStdString()); // Read in an amino z-matrix // similar to MOPAC zmat format char buffer[BUFF_SIZE]; vector vs; OBAtom *atom; while (ifs.getline(buffer, BUFF_SIZE)) { tokenize(vs, buffer); atom = mol.NewAtom(); atom->SetAtomicNum(etab.GetAtomicNum(vs[0].c_str())); atom->SetPartialCharge(atof(vs[7].c_str())); res->InsertAtom(atom); res->SetHetAtom(atom, false); res->SetSerialNum(atom, mol.NumAtoms()); if (vs.size() == 9) res->SetAtomID(atom, vs[8]); OBInternalCoord *coord = new OBInternalCoord; coord->_dst = atof(vs[1].c_str()); coord->_ang = atof(vs[2].c_str()); coord->_tor = atof(vs[3].c_str()); unsigned int index; // Set _a index = atoi(vs[4].c_str()); if (index > 0 && index <= mol.NumAtoms()) coord->_a = mol.GetAtom(index + offset); else coord->_a = NULL; // Set _b index = atoi(vs[5].c_str()); if (index > 0 && index <= mol.NumAtoms()) coord->_b = mol.GetAtom(index + offset); else coord->_b = NULL; // Set _c index = atoi(vs[6].c_str()); if (index > 0 && index <= mol.NumAtoms()) coord->_c = mol.GetAtom(index + offset); else coord->_c = NULL; vic.push_back(coord); } } void AddTerminus(int element, QString atomID, int a, double distance, int b, double angle, int c, double dihedral, OBMol &mol, vector &vic) { OBResidue *res = mol.GetResidue(mol.NumResidues() - 1); if (!res || mol.NumResidues() == 0) return; // can't do anything -- we're in a weird state OBAtom *atom; atom = mol.NewAtom(); atom->SetAtomicNum(element); res->InsertAtom(atom); res->SetHetAtom(atom, false); res->SetSerialNum(atom, mol.NumAtoms()); res->SetAtomID(atom, atomID.toAscii().data()); OBInternalCoord *coord = new OBInternalCoord; coord->_dst = distance; coord->_ang = angle; coord->_tor = dihedral; coord->_a = mol.GetAtom(a); coord->_b = mol.GetAtom(b); coord->_c = mol.GetAtom(c); // Add a bond between the recently created atom and our "a" mol.AddBond(mol.NumAtoms(), a, 1); vic.push_back(coord); } } // end namespace Avogadro Q_EXPORT_PLUGIN2(insertpeptideextension, Avogadro::InsertPeptideExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/surfaces/0000755000175000001440000000000012250371054021616 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/surfaces/approxmath.h0000644000175000001440000001067012250371054024156 0ustar marcususers/********************************************************************** ApproxMath - Approximate functions for orbital rendering Copyright (C) 2010 Geoffrey Hutchison See comments for copyright on particular functions This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef APPROXMATH_H #define APPROXMATH_H #include // Should compiled with -fno-strict-aliasing // From http://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/ // "In my tests it usually within an error margin of 5% to 12%" // Also points out another pow() implementation: // http://jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html #ifndef APOW_CONST #define APOW_CONST 1072632447 #endif inline double apow(double a, double b) { int tmp = (*(1 + (int *)&a)); int tmp2 = (int)(b * (tmp - APOW_CONST) + APOW_CONST); double p = 0.0; *(1 + (int * )&p) = tmp2; return p; } // Approximate exp from the VMD project: http://www.ks.uiuc.edu/Research/vmd/ /* * David J. Hardy * 12 Dec 2008 * * aexpfnx() - Approximate expf() for negative x. * * Assumes that x <= 0. * * Assumes IEEE format for single precision float, specifically: * 1 sign bit, 8 exponent bits biased by 127, and 23 mantissa bits. * * Interpolates exp() on interval (-1/log2(e), 0], then shifts it by * multiplication of a fast calculation for 2^(-N). The interpolation * uses a linear blending of 3rd degree Taylor polynomials at the end * points, so the approximation is once differentiable. * * The error is small (max relative error per interval is calculated * to be 0.131%, with a max absolute error of -0.000716). * * The cutoff is chosen so as to speed up the computation by early * exit from function, with the value chosen to give less than the * the max absolute error. Use of a cutoff is unnecessary, except * for needing to shift smallest floating point numbers to zero, * i.e. you could remove cutoff and replace by: * * #define MINXNZ -88.0296919311130 // -127 * log(2) * * if (x < MINXNZ) return 0.f; * * Use of a cutoff causes a discontinuity which can be eliminated * through the use of a switching function. * * We can obtain arbitrarily smooth approximation by taking k+1 nodes on * the interval and weighting their respective Taylor polynomials by the * kth order Lagrange interpolant through those nodes. The wiggle in the * polynomial interpolation due to equidistant nodes (Runge's phenomenon) * can be reduced by using Chebyshev nodes. */ #define MLOG2EF -1.44269504088896f /* * Interpolating coefficients for linear blending of the * 3rd degree Taylor expansion of 2^x about 0 and -1. */ #define SCEXP0 1.0000000000000000f #define SCEXP1 0.6987082824680118f #define SCEXP2 0.2633174272827404f #define SCEXP3 0.0923611991471395f #define SCEXP4 0.0277520543324108f /* for single precision float */ #define EXPOBIAS 127 #define EXPOSHIFT 23 /* cutoff is optional, but can help avoid unnecessary work */ #define ACUTOFF -10 typedef union flint_t { float f; int n; } flint; float aexpfnx(float x) { /* assume x <= 0 */ float mb; int mbflr; float d; float sy; flint scalfac; if (x < ACUTOFF) return 0.f; mb = x * MLOG2EF; /* change base to 2, mb >= 0 */ mbflr = (int) mb; /* get int part, floor() */ d = mbflr - mb; /* remaining exponent, -1 < d <= 0 */ sy = SCEXP0 + d*(SCEXP1 + d*(SCEXP2 + d*(SCEXP3 + d*SCEXP4))); /* approx with linear blend of Taylor polys */ scalfac.n = (EXPOBIAS - mbflr) << EXPOSHIFT; /* 2^(-mbflr) */ return (sy * scalfac.f); /* scaled approx */ } #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitalwidget.h0000644000175000001440000000604412250371054024633 0ustar marcususers/********************************************************************** OrbitalExtension - Molecular orbital explorer Copyright (C) 2010 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef ORBITALWIDGET_H #define ORBITALWIDGET_H #include #include #include #include "orbitalextension.h" #include "orbitaltablemodel.h" #include "ui_orbitalwidget.h" namespace Avogadro { class OrbitalSettingsDialog; class OrbitalTableModel; class OrbitalWidget : public QWidget { Q_OBJECT public: enum OrbitalQuality { OQ_Low = 0, OQ_Medium, OQ_High, OQ_VeryHigh }; //! Constructor explicit OrbitalWidget( QWidget *parent = 0, Qt::WindowFlags f = 0 ); //! Deconstructor virtual ~OrbitalWidget(); double isovalue() {return m_isovalue;}; OrbitalQuality defaultQuality() {return m_quality;}; bool precalcLimit() {return m_precalc_limit;} int precalcRange() {return m_precalc_range;} static double OrbitalQualityToDouble(OrbitalQuality q); static double OrbitalQualityToDouble(int i) { return OrbitalQualityToDouble(OrbitalQuality(i));}; public slots: void readSettings(); void writeSettings(); void reject(); void fillTable(QList list); void setQuality(OrbitalQuality q); void selectOrbital(unsigned int orbital); void setDefaults(OrbitalWidget::OrbitalQuality quality, double isovalue, bool HOMOFirst); void setPrecalcSettings(bool limit, int range); void initializeProgress(int orbital, int min, int max, int stage, int totalStages); void nextProgressStage(int orbital, int newmin, int newmax); void updateProgress(int orbital, int current); void calculationComplete(int orbital); void calculationQueued(int orbital); signals: void orbitalSelected(unsigned int orbital); void renderRequested(unsigned int orbital, double resolution); void calculateAll(); private slots: void tableClicked(const QItemSelection&); void renderClicked(); void configureClicked(); private: Ui::OrbitalWidget ui; OrbitalSettingsDialog *m_settings; OrbitalQuality m_quality; double m_isovalue; bool m_precalc_limit; int m_precalc_range; OrbitalTableModel *m_tableModel; OrbitalSortingProxyModel *m_sortedTableModel; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitalsettingsdialog.ui0000644000175000001440000001054412250371054026556 0ustar marcususers OrbitalSettingsDialog 0 0 508 143 Dialog &Recalculate All Default &Quality: combo_quality &Isosurface Value: spin_isoval Low Medium High Very High 5 0.010000000000000 Qt::Vertical 20 40 Show occupied orbitals first Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Limit orbital precalculations to orbitals around HOMO/LUMO Qt::Horizontal 40 20 buttonBox accepted() OrbitalSettingsDialog accept() 248 254 157 274 buttonBox rejected() OrbitalSettingsDialog reject() 316 260 286 274 avogadro-1.1.1/libavogadro/src/extensions/surfaces/molpro.cpp0000644000175000001440000003160512250371054023637 0ustar marcususers/********************************************************************** Molpro - parses MOLPRO files Copyright (C) 2009 Michael Banck based on gaussianfchk.cpp, Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "molpro.h" #include "gaussianset.h" #include #include #include #include using Eigen::Vector3d; using std::vector; namespace Avogadro { Molpro::Molpro(const QString &filename, GaussianSet *basis) { // Open the file for reading and process it QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; qDebug() << "File" << filename << "opened."; // Process the file and extract all the information we need m_in.setDevice(&file); while (!m_in.atEnd()) { QString line = m_in.readLine(); if (line.indexOf( "NR ATOM" ) != -1 ) { QString aNum; line = m_in.readLine(); // blank line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); while (list.size() == 6) { aNum = list.at(2); aNum.chop(3); // get rid of the ".00" basis->addAtom(Vector3d(list.at(3).toDouble(), list.at(4).toDouble(), list.at(5).toDouble()), aNum.toInt()); m_aNums.push_back(aNum.toInt()); m_aPos.push_back(list.at(3).toDouble()); m_aPos.push_back(list.at(4).toDouble()); m_aPos.push_back(list.at(5).toDouble()); m_aPos.push_back(list.at(3).toDouble()); line = m_in.readLine(); list = line.split(' ', QString::SkipEmptyParts); } } else if (line.indexOf( "NUMBER OF ELECTRONS" ) != -1 ) { QStringList list = line.split(' ', QString::SkipEmptyParts); QString alpha = list.at(3); QString beta = list.at(4); // get rid of the +/- signs after the values alpha.chop(1); beta.chop(1); basis->setNumElectrons(alpha.toInt() + beta.toInt()); m_electrons = alpha.toInt() + beta.toInt(); } else if (line.indexOf( "NUMBER OF CONTRACTIONS" ) != -1 ) { QStringList list = line.split(' ', QString::SkipEmptyParts); m_numBasisFunctions = list.at(3).toInt(); } /* Atomic basis definitions. They look like this in the output: BASIS DATA Nr Sym Nuc Type Exponents Contraction coefficients 1.1 A 1 1s 6665.000000 0.000692 -0.000146 0.000000 2.1 A 1000.000000 0.005329 -0.001154 0.000000 3.1 A 228.000000 0.027077 -0.005725 0.000000 64.710000 0.101718 -0.023312 0.000000 21.060000 0.274740 -0.063955 0.000000 7.495000 0.448564 -0.149981 0.000000 2.797000 0.285074 -0.127262 0.000000 0.521500 0.015204 0.544529 0.000000 0.159600 -0.003191 0.580496 1.000000 4.1 A 1 2px 9.439000 0.038109 2.002000 0.209480 0.545600 0.508557 0.151700 0.468842 5.1 A 1 2py 9.439000 0.038109 [...] */ else if (line.indexOf( "Nr Sym Nuc Type" ) != -1 ) { QString type; int shellType = -1; int currentBasis; int currentAtom; int zetaType; int ignoreShells = 0; int fchkShellType; bool newShell = true; line = m_in.readLine(); // blank line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); QString frontline = line.mid(1, 25); QStringList frontlist = frontline.split(' ', QString::SkipEmptyParts); QString backline = line.mid(25, 55); QStringList backlist = backline.split(' ', QString::SkipEmptyParts); while (list.size() > 1) { vector< vector > contrCoeffs; vector exponents; /* New shell. */ if (ignoreShells <= 0) newShell = true; else newShell = false; currentAtom=list.at(2).toInt(); zetaType = list.size()-5; /* regular basis sets have one contraction coefficient per shell. * Double-zeta basis sets have three, tripe-zeta have four and so on. */ type = list.at(3); type.remove(QRegExp("[xyz,0-9]")); type.remove(QRegExp("[+-]")); /* FIXME: handle cartesian d/f basis sets */ if (newShell) { if (type == "s" ) { shellType = S; ignoreShells = 0; fchkShellType = 0; } else if (type == "p" ) { shellType = P; ignoreShells = 2; fchkShellType = 1; } else if (type == "d" ) { shellType = D5; ignoreShells = 4; fchkShellType = -2; } else if (type == "f" ) { shellType = F7; ignoreShells = 6; fchkShellType = -3; } else { qDebug() << "cannot parse!" << type; qDebug() << line; return; } } exponents.push_back(list.at(4).toDouble()); vector contractions; for (int i = 0; i < zetaType; i++) { if (newShell) m_shellTypes.push_back(fchkShellType); contractions.push_back(list.at(5+i).toDouble()); } contrCoeffs.push_back(contractions); line = m_in.readLine(); list = line.split(' ', QString::SkipEmptyParts); frontline = line.mid(1, 25); frontlist = frontline.split(' ', QString::SkipEmptyParts); backline = line.mid(25, 55); backlist = backline.split(' ', QString::SkipEmptyParts); while (list.size() > 0 && frontlist.size() < 4) { /* new contraction. This can either have a AO header without type * in front, like 2.1 A 1000.000000 0.005329 -0.001154 0.000000 or the second case, 64.710000 0.101718 -0.023312 0.000000 */ QString backline = line.mid(25, 55); backlist = backline.split(' ', QString::SkipEmptyParts); exponents.push_back(backlist.at(0).toDouble()); vector contractions; for (int i = 0; i < zetaType; i++) { contractions.push_back(backlist.at(1+i).toDouble()); } contrCoeffs.push_back(contractions); line = m_in.readLine(); list = line.split(' ', QString::SkipEmptyParts); frontline = line.mid(1, 25); frontlist = frontline.split(' ', QString::SkipEmptyParts); backline = line.mid(25, 55); backlist = backline.split(' ', QString::SkipEmptyParts); } /* We're at the end of this shell. Now add the data we gathered to * the basis unless this is for a redundant p/d/f shell to be * skipped. */ if (newShell == true) { for (int i=0; i < zetaType; i++) { m_shelltoAtom.push_back(currentAtom); int numExponents = 0; currentBasis = basis->addBasis(currentAtom-1, (Avogadro::orbital)shellType); for (unsigned int j=0; j < exponents.size(); j++) { if (fabs(contrCoeffs[j][i]) > 0.0) { if (zetaType == 1 || (i < zetaType - 1 && contrCoeffs[j][zetaType-1] == 0.0) || (i == zetaType - 1)) { /* for multiple zeta shells, do not add GTOs for the * columns if the last column is non-zero. */ numExponents++; basis->addGTO(currentBasis, contrCoeffs[j][i], exponents[j]); } } } m_shellNums.push_back(numExponents); /* FIXME */ } newShell = false; } else { if (ignoreShells > 0) { ignoreShells--; } } } } else if (line.indexOf( "Orb Occ Energy") != -1 ) { /* Molecular orbitals are printed out by MOLPRO as follows: Orb Occ Energy Couls-En Coefficients 1 1s 1 1s 1 1s 1 2px 1 2py 1 2pz 1 2px 1 2py 1 2pz 1 3d0 1 3d2- 1 3d1+ 1 3d2+ 1 3d1- 2 1s 2 1s 2 2px 2 2py 2 2pz 3 1s 3 1s 3 2px 3 2py 3 2pz 4 1s 4 1s 4 2px 4 2py 4 2pz 5 1s 5 1s 5 2px 5 2py 5 2pz 1.1 2 -11.2389 -31.0278 1.001397 0.007923 -0.008912 0.000006 0.000000 0.000017 -0.000011 0.000000 -0.000036 -0.000017 0.000000 -0.000002 0.000008 0.000000 0.000075 0.001063 -0.000219 -0.000330 -0.000069 0.000075 0.001063 -0.000219 0.000330 -0.000070 0.000075 0.001063 0.000322 0.000000 -0.000242 0.000105 0.001059 0.000115 0.000000 0.000380 2.1 2 -0.9219 -6.2932 -0.022923 0.749443 -0.163575 0.000692 0.000002 0.002152 -0.000431 -0.000001 -0.001340 0.000006 [...] */ line = m_in.readLine(); // blank line = m_in.readLine(); // column header start QStringList list = line.split(' ', QString::SkipEmptyParts); while (list.size() > 1) { // skip column header line = m_in.readLine(); list = line.split(' ', QString::SkipEmptyParts); } line = m_in.readLine(); list = line.split(' ', QString::SkipEmptyParts); while (list.size() > 1) { // new MO m_orbitalEnergy.push_back(list.at(2).toDouble()); QStringList MOList; QString MOLine = line.mid(32); MOList = MOLine.split(' ', QString::SkipEmptyParts); while (MOList.size() > 1) { for (int i = 0; i < MOList.size(); i++) m_MOcoeffs.push_back(MOList.at(i).toDouble()); line = m_in.readLine(); list = line.split(' ', QString::SkipEmptyParts); MOLine = line.mid(32); MOList = MOLine.split(' ', QString::SkipEmptyParts); } line = m_in.readLine(); list = line.split(' ', QString::SkipEmptyParts); } reorderD5Orbitals(); basis->addMOs(m_MOcoeffs); } } } Molpro::~Molpro() { } /* MOLPRO prints out spherical (D5) d-orbitals MO coefficients in the order d0, * d2-, d1+, d2+, d1-. However, Avogadro expects them in the order d0, d1+, * d1-, d2+, d2- (as they are printed out e.g. by Gaussian03). Thus, we need * to reorder the MO coefficients for D5 orbitals. */ void Molpro::reorderD5Orbitals() { int GTOOffset = 0; /* FIXME: This should be the number of MOs, not basis functions */ int numMOs = m_numBasisFunctions; for (unsigned int i=0; i < m_shellTypes.size(); ++i) { if (m_shellTypes.at(i) == -2) { /* D5 orbital. */ /* FIXME: This should go over the number of MOs, not basis functions */ for (unsigned int j=1; j < m_numBasisFunctions; ++j) { /* set temp to MOLPRO's d2- */ double temp = m_MOcoeffs[j*numMOs+GTOOffset+1]; /* set second coefficient to MOLPRO's d1+ */ m_MOcoeffs[j*numMOs+GTOOffset+1] = m_MOcoeffs[j*numMOs+GTOOffset+2]; /* set third coefficient to MOLPRO's d1- */ m_MOcoeffs[j*numMOs+GTOOffset+2] = m_MOcoeffs[j*numMOs+GTOOffset+4]; /* set fifth coefficient to temp */ m_MOcoeffs[j*numMOs+GTOOffset+4] = temp; } } switch (m_shellTypes.at(i)) { case 0: GTOOffset += 1; /* S */ break; case 1: GTOOffset += 3; /* P */ break; case 2: GTOOffset += 6; /* D */ break; case -2: GTOOffset += 5; /* D5 */ break; } } } void Molpro::outputAll() { qDebug() << "Shell mappings."; for (unsigned int i = 0; i < m_shellTypes.size(); ++i) qDebug() << i << ": type =" << m_shellTypes.at(i) << ", number =" << m_shellNums.at(i) << ", atom =" << m_shelltoAtom.at(i); qDebug() << "MO coefficients."; for (unsigned int i = 0; i < m_MOcoeffs.size(); ++i) qDebug() << m_MOcoeffs.at(i); } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/vdwsurface.h0000644000175000001440000000577012250371054024151 0ustar marcususers/********************************************************************** VdWSurface - Class to calculate Van der Waals cubes Copyright (C) 2008 Marcus D. Hanwell Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef VDWSURFACE_H #define VDWSURFACE_H #include #include #include #include #include /** * @class VdWSurface vdwsurface.h * @brief VdWSurface Class * @author Marcus D. Hanwell * * This is a simple class that uses QtConcurrent::map to calculate a cube of the * given dimensions. It should use the number of cores available on the system. * Ideally some additional binning would be added to further increase speed * gains when calculating large cubes with large numbers of atoms. */ namespace Avogadro { class Molecule; class Cube; struct VdWStruct; class VdWSurface : public QObject { Q_OBJECT public: /** * Constructor. */ VdWSurface(); /** * Destructor. */ ~VdWSurface(); /** * Set the atoms in the Molecule to the Van der Waals surface. * @param mol Molecule to copy atoms across from. */ void setAtoms(Molecule* mol); /** * Calculate the VdW cube over the entire range of the supplied Cube. * @param cube The cube to write the values VdW surface to. * @return True if the calculation was successful. */ void calculateCube(Cube *cube); /** * When performing a calculation the QFutureWatcher is useful if you want * to update a progress bar. */ QFutureWatcher & watcher() { return m_watcher; } private Q_SLOTS: /** * Slot to set the cube data once Qt Concurrent is done */ void calculationComplete(); Q_SIGNALS: private: std::vector m_atomPos; std::vector m_atomRadius; QFuture m_future; QFutureWatcher m_watcher; Cube *m_cube; // Cube to put the results into QVector m_VdWvector; /// Re-entrant single point forms of the calculations static void processPoint(VdWStruct &vdw); }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/htmldelegate.cpp0000644000175000001440000000523112250371054024762 0ustar marcususers/********************************************************************** HTMLDelegate - Styled Text Delegate by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "htmldelegate.h" #include #include #include #include namespace Avogadro { // Allow HTML text (e.g., superscripts & subscripts) to be in a table // Modified from http://stackoverflow.com/questions/1956542/how-to-make-item-view-render-rich-html-text-in-qt // Original code by StackOverflow users serge_gubenko and Anton QSize HTMLDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItemV4 optionV4 = option; initStyleOption(&optionV4, index); QTextDocument doc; doc.setHtml(optionV4.text); doc.setTextWidth(optionV4.rect.width()); return QSize(doc.idealWidth(), doc.size().height()); } void HTMLDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItemV4 optionV4 = option; initStyleOption(&optionV4, index); // if we have a widget (and style) use that, otherwise the default application style QStyle *style = optionV4.widget? optionV4.widget->style() : QApplication::style(); QTextDocument doc; doc.setHtml(optionV4.text); /// Painting item without text optionV4.text = QString(); style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter); QAbstractTextDocumentLayout::PaintContext ctx; // Highlighting text if item is selected if (optionV4.state & QStyle::State_Selected) ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText)); // Inactive state? QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &optionV4); painter->save(); painter->translate(textRect.topLeft()); painter->setClipRect(textRect.translated(-textRect.topLeft())); doc.documentLayout()->draw(painter, ctx); painter->restore(); } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitalsettingsdialog.cpp0000644000175000001440000000676412250371054026734 0ustar marcususers/********************************************************************** OrbitalSettingsDialog -- Configure the Orbital Extension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "orbitalsettingsdialog.h" #include namespace Avogadro { OrbitalSettingsDialog::OrbitalSettingsDialog(OrbitalWidget* parent, Qt::WindowFlags f) : QDialog(parent, f), m_quality(OrbitalWidget::OQ_Low), m_isoval(0.02), m_HOMOFirst(false), m_limit_precalc(true), m_precalc_range(10) { ui.setupUi(this); connect(ui.push_recalc, SIGNAL(clicked()), this, SLOT(calculateAllClicked())); connect(this, SIGNAL(calculateAll()), parent, SIGNAL(calculateAll())); connect(this, SIGNAL(defaultsUpdated(OrbitalWidget::OrbitalQuality, double, bool)), parent, SLOT(setDefaults(OrbitalWidget::OrbitalQuality, double, bool))); connect(this, SIGNAL(precalcSettingsUpdated(bool,int)), parent, SLOT(setPrecalcSettings(bool,int))); } OrbitalSettingsDialog::~OrbitalSettingsDialog() { } void OrbitalSettingsDialog::setDefaultQuality(OrbitalWidget::OrbitalQuality q) { ui.combo_quality->setCurrentIndex(q); m_quality = q; } void OrbitalSettingsDialog::setIsoValue(double i) { ui.spin_isoval->setValue(i); m_isoval = i; } void OrbitalSettingsDialog::setHOMOFirst(bool HOMOFirst) { ui.cb_HOMOFirst->setChecked(HOMOFirst); m_HOMOFirst = HOMOFirst; } void OrbitalSettingsDialog::setLimitPrecalc(bool b) { ui.cb_limit_precalc->setChecked(b); m_limit_precalc = b; } void OrbitalSettingsDialog::setPrecalcRange(int r) { ui.spin_precalc_range->setValue(r); m_precalc_range = r; } void OrbitalSettingsDialog::updateDefaults() { m_quality = OrbitalWidget::OrbitalQuality(ui.combo_quality->currentIndex()); m_isoval = ui.spin_isoval->value(); m_HOMOFirst = ui.cb_HOMOFirst->isChecked(); emit defaultsUpdated(m_quality, m_isoval, m_HOMOFirst); } void OrbitalSettingsDialog::updatePrecalcSettings() { m_limit_precalc = ui.cb_limit_precalc->isChecked(); m_precalc_range = ui.spin_precalc_range->value(); emit precalcSettingsUpdated(m_limit_precalc, m_precalc_range); } void OrbitalSettingsDialog::accept() { updateDefaults(); updatePrecalcSettings(); hide(); } void OrbitalSettingsDialog::reject() { setDefaultQuality(m_quality); setIsoValue(m_isoval); setHOMOFirst(m_HOMOFirst); hide(); } void OrbitalSettingsDialog::calculateAllClicked() { updateDefaults(); emit calculateAll(); } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitalwidget.cpp0000644000175000001440000001652512250371054025173 0ustar marcususers/********************************************************************** OrbitalExtension - Molecular orbital explorer Copyright (C) 2010 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "orbitalwidget.h" #include "orbitalsettingsdialog.h" #include "htmldelegate.h" #include #include namespace Avogadro { OrbitalWidget::OrbitalWidget(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), m_settings(0), m_quality(OQ_Low), m_isovalue(0.02), m_precalc_limit(true), m_precalc_range(10), m_tableModel(new OrbitalTableModel (this)), m_sortedTableModel(new OrbitalSortingProxyModel (this)) { ui.setupUi(this); m_sortedTableModel->setSourceModel(m_tableModel); ui.table->setModel(m_sortedTableModel); ui.table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); ui.table->setItemDelegateForColumn(OrbitalTableModel::C_Status, new ProgressBarDelegate(this)); ui.table->setItemDelegateForColumn(OrbitalTableModel::C_Symmetry, new HTMLDelegate(this)); connect(ui.table->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(tableClicked(const QItemSelection&))); connect(ui.push_render, SIGNAL(clicked()), this, SLOT(renderClicked())); connect(ui.push_configure, SIGNAL(clicked()), this, SLOT(configureClicked())); readSettings(); } OrbitalWidget::~OrbitalWidget() { writeSettings(); } void OrbitalWidget::readSettings() { QSettings settings; settings.beginGroup("orbitals"); m_quality = OrbitalQuality( settings.value("defaultQuality", 0).toInt()); m_isovalue = settings.value("isoValue", 0.02).toDouble(); ui.combo_quality->setCurrentIndex( settings.value("selectedQuality", 0).toInt()); m_sortedTableModel->HOMOFirst( settings.value("HOMOFirst", false).toBool()); m_precalc_limit = settings.value("precalc/limit", true).toBool(); m_precalc_range = settings.value("precalc/range", 10).toInt(); settings.endGroup(); } void OrbitalWidget::writeSettings() { QSettings settings; settings.beginGroup("orbitals"); settings.setValue("defaultQuality", m_quality); settings.setValue("isoValue", m_isovalue); settings.setValue("selectedQuality", ui.combo_quality->currentIndex()); settings.setValue("HOMOFirst", m_sortedTableModel->isHOMOFirst()); settings.setValue("precalc/limit", m_precalc_limit); settings.setValue("precalc/range", m_precalc_range); settings.endGroup(); } void OrbitalWidget::reject() { hide(); } void OrbitalWidget::configureClicked() { if (!m_settings) { m_settings = new OrbitalSettingsDialog(this); } m_settings->setDefaultQuality(m_quality); m_settings->setIsoValue(m_isovalue); m_settings->setHOMOFirst(m_sortedTableModel->isHOMOFirst()); m_settings->setLimitPrecalc(m_precalc_limit); m_settings->setPrecalcRange(m_precalc_range); m_settings->show(); } // predicate for sorting below bool orbitalIndexLessThan(const Orbital &o1, const Orbital &o2) { return (o1.index < o2.index); } void OrbitalWidget::fillTable(QList list) { // Sort list by orbital qSort(list.begin(), list.end(), orbitalIndexLessThan); // Populate the model for (int i = 0; i < list.size(); i++) { m_tableModel->setOrbital(list.at(i)); } ui.table->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); // Sort table m_sortedTableModel->sort(0, Qt::AscendingOrder); // // Find HOMO and scroll to it QModelIndex homo = m_tableModel->HOMO(); homo = m_sortedTableModel->mapFromSource(homo); qDebug() << "HOMO at: " << homo.row(); ui.table->scrollTo(homo, QAbstractItemView::PositionAtCenter); } void OrbitalWidget::setQuality(OrbitalQuality q) { ui.combo_quality->setCurrentIndex(int(q)); } void OrbitalWidget::selectOrbital(unsigned int orbital) { QModelIndex start = m_tableModel->index(orbital-1, 0, QModelIndex()); QModelIndex end = m_tableModel->index(orbital-1, m_tableModel->columnCount(QModelIndex())-1, QModelIndex()); QItemSelection selection (start,end); selection = m_sortedTableModel->mapSelectionFromSource(selection); ui.table->selectionModel()->clear(); ui.table->selectionModel()->select(selection, QItemSelectionModel::SelectCurrent); } void OrbitalWidget::tableClicked(const QItemSelection & selected) { QItemSelection mappedSelected = m_sortedTableModel->mapSelectionToSource(selected); QModelIndexList selection = mappedSelected.indexes(); // Only one row can be selected at a time, so just check the row // of the first entry. if (selection.size() == 0) return; int orbital = selection.first().row() + 1; emit orbitalSelected(orbital); } void OrbitalWidget::renderClicked() { double quality = OrbitalQualityToDouble(ui.combo_quality->currentIndex()); QModelIndexList selection = ui.table->selectionModel()->selectedIndexes(); // Only one row can be selected at a time, so just check the row // of the first entry. if (selection.size() == 0) return; QModelIndex first = selection.first(); first = m_sortedTableModel->mapToSource(first); int orbital = first.row() + 1; emit renderRequested(orbital, quality); } double OrbitalWidget::OrbitalQualityToDouble(OrbitalQuality q) { switch (q) { case OQ_Low: return 0.35; case OQ_Medium: default: return 0.18; case OQ_High: return 0.10; case OQ_VeryHigh: return 0.05; } } void OrbitalWidget::setDefaults(OrbitalQuality q, double i, bool HOMOFirst) { m_quality = q; m_isovalue = i; m_sortedTableModel->HOMOFirst(HOMOFirst); m_sortedTableModel->sort(0, Qt::AscendingOrder); } void OrbitalWidget::setPrecalcSettings(bool limit, int range) { m_precalc_limit = limit; m_precalc_range = range; } void OrbitalWidget::initializeProgress(int orbital, int min, int max, int stage, int totalStages) { m_tableModel->setOrbitalProgressRange(orbital, min, max, stage, totalStages); } void OrbitalWidget::nextProgressStage(int orbital, int newmin, int newmax) { m_tableModel->incrementStage(orbital, newmin, newmax); } void OrbitalWidget::updateProgress(int orbital, int current) { m_tableModel->setOrbitalProgressValue(orbital, current); } void OrbitalWidget::calculationComplete(int orbital) { m_tableModel->finishProgress(orbital); } void OrbitalWidget::calculationQueued(int orbital) { m_tableModel->setProgressToZero(orbital); } } // namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/0000755000175000001440000000000012250371054023434 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/gaussianfchk.cpp0000644000175000001440000002756012250371054026620 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright (C) 2008-2009 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "gaussianfchk.h" #include "gaussianset.h" #include #include #include using Eigen::Vector3d; using std::vector; namespace OpenQube { GaussianFchk::GaussianFchk(const QString &filename, GaussianSet* basis) { // Open the file for reading and process it QFile* file = new QFile(filename); file->open(QIODevice::ReadOnly | QIODevice::Text); m_in = file; qDebug() << "File" << filename << "opened."; // Process the formatted checkpoint and extract all the information we need while (!m_in->atEnd()) { processLine(); } // Now it should all be loaded load it into the basis set load(basis); delete file; } GaussianFchk::~GaussianFchk() { } void GaussianFchk::processLine() { // First truncate the line, remove trailing white space and check QString line = m_in->readLine(); if (line.isEmpty()) return; QString key = line; key.resize(42); key = key.trimmed(); QString tmp = line.mid(43, 37); QStringList list = tmp.split(' ', QString::SkipEmptyParts); // Big switch statement checking for various things we are interested in if (key == "Number of atoms") qDebug() << "Number of atoms =" << list.at(1).toInt(); else if (key == "Number of electrons") m_electrons = list.at(1).toInt(); else if (key == "Number of basis functions") { m_numBasisFunctions = list.at(1).toInt(); qDebug() << "Number of basis functions =" << m_numBasisFunctions; } else if (key == "Atomic numbers") { m_aNums = readArrayI(list.at(2).toInt()); if (static_cast(m_aNums.size()) != list.at(2).toInt()) qDebug() << "Reading atomic numbers failed."; else qDebug() << "Reading atomic numbers succeeded."; } // Now we get to the meat of it - coordinates of the atoms else if (key == "Current cartesian coordinates") m_aPos = readArrayD(list.at(2).toInt(), 16); // The real meat is here - basis sets etc! else if (key == "Shell types") m_shellTypes = readArrayI(list.at(2).toInt()); else if (key == "Number of primitives per shell") m_shellNums = readArrayI(list.at(2).toInt()); else if (key == "Shell to atom map") m_shelltoAtom = readArrayI(list.at(2).toInt()); // Now to get the exponents and coefficients( else if (key == "Primitive exponents") m_a = readArrayD(list.at(2).toInt(), 16); else if (key == "Contraction coefficients") m_c = readArrayD(list.at(2).toInt(), 16); else if (key == "P(S=P) Contraction coefficients") m_csp = readArrayD(list.at(2).toInt(), 16); else if (key == "Alpha Orbital Energies") { m_orbitalEnergy = readArrayD(list.at(2).toInt(), 16); qDebug() << "MO energies, n =" << m_orbitalEnergy.size(); } else if (key == "Alpha MO coefficients") { m_MOcoeffs = readArrayD(list.at(2).toInt(), 16); if (static_cast(m_MOcoeffs.size()) == list.at(2).toInt()) qDebug() << "MO coefficients, n =" << m_MOcoeffs.size(); else qDebug() << "Error, MO coefficients, n =" << m_MOcoeffs.size(); } else if (key == "Total SCF Density") { if (readDensityMatrix(list.at(2).toInt(), 16)) qDebug() << "SCF density matrix read in" << m_density.rows(); else qDebug() << "Error reading in the SCF density matrix."; } } void GaussianFchk::load(GaussianSet* basis) { // Now load up our basis set basis->setNumElectrons(m_electrons); int nAtom = 0; for (unsigned int i = 0; i < m_aPos.size(); i += 3) basis->addAtom(Vector3d(m_aPos.at(i), m_aPos.at(i+1), m_aPos.at(i+2)), m_aNums.at(nAtom++)); qDebug() << "loading basis: " << m_shellTypes.size() << m_shellNums.size() << m_shelltoAtom.size() << m_a.size() << m_c.size() << m_csp.size(); // Set up the GTO primitive counter, go through the shells and add them int nGTO = 0; for (unsigned int i = 0; i < m_shellTypes.size(); ++i) { // Handle the SP case separately - this should possibly be a distinct type if (m_shellTypes.at(i) == -1) { // SP orbital type - actually have to add two shells int s = basis->addBasis(m_shelltoAtom.at(i) - 1, S); int tmpGTO = nGTO; for (int j = 0; j < m_shellNums.at(i); ++j) { basis->addGTO(s, m_c.at(nGTO), m_a.at(nGTO)); ++nGTO; } int p = basis->addBasis(m_shelltoAtom.at(i) - 1, P); for (int j = 0; j < m_shellNums.at(i); ++j) { basis->addGTO(p, m_csp.at(tmpGTO), m_a.at(tmpGTO)); ++tmpGTO; } } else { orbital type; switch (m_shellTypes.at(i)) { case 0: type = S; break; case 1: type = P; break; case 2: type = D; break; case -2: type = D5; break; case 3: type = F; break; case -3: type = F7; break; case 4: type = G; break; case -4: type = G9; break; case 5: type = H; break; case -5: type = H11; break; case 6: type = I; break; case -6: type = I13; break; default: // If we encounter GTOs we do not understand, the basis is likely invalid type = UU; basis->setIsValid(false); } if (type != UU) { int b = basis->addBasis(m_shelltoAtom.at(i) - 1, type); for (int j = 0; j < m_shellNums.at(i); ++j) { basis->addGTO(b, m_c.at(nGTO), m_a.at(nGTO)); ++nGTO; } } } } // Now to load in the MO coefficients if (basis->isValid()) { if (m_MOcoeffs.size()) basis->addMOs(m_MOcoeffs); else qDebug() << "Error - no MO coefficients read in."; if (m_density.rows()) basis->setDensityMatrix(m_density); } } vector GaussianFchk::readArrayI(unsigned int n) { vector tmp; tmp.reserve(n); bool ok = false; while (tmp.size() < n) { if (m_in->atEnd()) { qDebug() << "GaussianFchk::readArrayI could not read all elements" << n << "expected" << tmp.size() << "parsed."; return tmp; } QString line = m_in->readLine(); if (line.isEmpty()) return tmp; QStringList list = line.split(' ', QString::SkipEmptyParts); for (int i = 0; i < list.size(); ++i) { if (tmp.size() >= n) { qDebug() << "Too many variables read in. File may be inconsistent." << tmp.size() << "of" << n; return tmp; } tmp.push_back(list.at(i).toInt(&ok)); if (!ok) { qDebug() << "Warning: problem converting string to integer:" << list.at(i) << "in GaussianFchk::readArrayI."; return tmp; } } } return tmp; } vector GaussianFchk::readArrayD(unsigned int n, int width) { // FIXME Should return a bool and operate on a vector by reference vector tmp; tmp.reserve(n); bool ok = false; while (tmp.size() < n) { if (m_in->atEnd()) { qDebug() << "GaussianFchk::readArrayD could not read all elements" << n << "expected" << tmp.size() << "parsed."; return tmp; } QString line = m_in->readLine(); if (line.isEmpty()) return tmp; if (width == 0) { // we can split by spaces QStringList list = line.split(' ', QString::SkipEmptyParts); for (int i = 0; i < list.size(); ++i) { if (tmp.size() >= n) { qDebug() << "Too many variables read in. File may be inconsistent." << tmp.size() << "of" << n; return tmp; } tmp.push_back(list.at(i).trimmed().toDouble(&ok)); if (!ok) { qDebug() << "Warning: problem converting string to double:" << list.at(i) << "in GaussianFchk::readArrayD."; return tmp; } } } else { // Q-Chem files use 16 character fields int maxColumns = 80 / width; for (int i = 0; i < maxColumns; ++i) { QString substring = line.mid(i * width, width); if (substring.length() != width) break; if (tmp.size() >= n) { qDebug() << "Too many variables read in. File may be inconsistent." << tmp.size() << "of" << n; return tmp; } tmp.push_back(substring.toDouble(&ok)); if (!ok) { qDebug() << "Warning: problem converting string to double:" << substring << "in GaussianFchk::readArrayD."; return tmp; } } } } return tmp; } bool GaussianFchk::readDensityMatrix(unsigned int n, int width) { // This function reads in the lower triangular density matrix m_density.resize(m_numBasisFunctions, m_numBasisFunctions); unsigned int cnt = 0; unsigned int i = 0, j = 0; unsigned int f = 1; bool ok = false; while (cnt < n) { if (m_in->atEnd()) { qDebug() << "GaussianFchk::readDensityMatrix could not read all elements" << n << "expected" << cnt << "parsed."; return false; } QString line = m_in->readLine(); if (line.isEmpty()) return false; if (width == 0) { // we can split by spaces QStringList list = line.split(' ', QString::SkipEmptyParts); for (int k = 0; k < list.size(); ++k) { if (cnt >= n) { qDebug() << "Too many variables read in. File may be inconsistent." << cnt << "of" << n; return false; } // Read in lower half matrix m_density(i, j) = list.at(k).toDouble(&ok); if (ok) { // Valid double converted, carry on ++j; ++cnt; if (j == f) { // We need to move down to the next row and increment f - lower tri j = 0; ++f; ++i; } } else { // Invalid conversion of a string to double qDebug() << "Warning: problem converting string to double:" << list.at(k) << "\nIn GaussianFchk::readDensityMatrix."; return false; } } } else { // Q-Chem files use 16-character fields int maxColumns = 80 / width; for (int c = 0; c < maxColumns; ++c) { QString substring = line.mid(c * width, width); if (substring.length() != width) break; else if (cnt >= n) { qDebug() << "Too many variables read in. File may be inconsistent." << cnt << "of" << n; return false; } // Read in lower half matrix m_density(i, j) = substring.toDouble(&ok); if (ok) { // Valid double converted, carry on ++j; ++cnt; if (j == f) { // We need to move down to the next row and increment f - lower tri j = 0; ++f; ++i; } } else { // Invalid conversion of a string to double qDebug() << "Warning: problem converting string to double:" << substring << "\nIn GaussianFchk::readDensityMatrix."; return false; } } } } return true; } void GaussianFchk::outputAll() { qDebug() << "Shell mappings."; for (unsigned int i = 0; i < m_shellTypes.size(); ++i) qDebug() << i << ": type =" << m_shellTypes.at(i) << ", number =" << m_shellNums.at(i) << ", atom =" << m_shelltoAtom.at(i); qDebug() << "MO coefficients."; for (unsigned int i = 0; i < m_MOcoeffs.size(); ++i) qDebug() << m_MOcoeffs.at(i); } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/gamessus.cpp0000644000175000001440000002106312250371054025771 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2010 Geoffrey R. Hutchison This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "gamessus.h" #include #include #include using Eigen::Vector3d; using std::vector; #ifndef BOHR_TO_ANGSTROM #define BOHR_TO_ANGSTROM 0.529177249 #endif namespace OpenQube { GAMESSUSOutput::GAMESSUSOutput(const QString &filename, GaussianSet* basis): m_coordFactor(1.0), m_currentMode(NotParsing), m_currentAtom(1) { // Open the file for reading and process it QFile* file = new QFile(filename); file->open(QIODevice::ReadOnly | QIODevice::Text); m_in = file; qDebug() << "File" << filename << "opened."; // Process the formatted checkpoint and extract all the information we need while (!m_in->atEnd()) { processLine(basis); } // Now it should all be loaded load it into the basis set load(basis); delete file; } GAMESSUSOutput::~GAMESSUSOutput() { } void GAMESSUSOutput::processLine(GaussianSet *basis) { // First truncate the line, remove trailing white space and check for blank lines QString key = m_in->readLine().trimmed(); while(key.isEmpty() && !m_in->atEnd()) { key = m_in->readLine().trimmed(); } if (m_in->atEnd()) return; QStringList list = key.split(' ', QString::SkipEmptyParts); int numGTOs; // Big switch statement checking for various things we are interested in // Make sure to switch mode: // enum mode { NotParsing, Atoms, GTO, STO, MO, SCF } if (key.contains("COORDINATES (BOHR)", Qt::CaseInsensitive)) { basis->moleculeRef().clearAtoms(); m_coordFactor = 1.0; // coordinates are supposed to be in bohr?! m_currentMode = Atoms; key = m_in->readLine().trimmed(); // skip the column titles } else if (key.contains("COORDINATES OF ALL ATOMS ARE (ANGS)", Qt::CaseInsensitive)) { basis->moleculeRef().clearAtoms(); m_coordFactor = 1.0/BOHR_TO_ANGSTROM; // in Angstroms now m_currentMode = Atoms; key = m_in->readLine(); // skip column titles key = m_in->readLine(); // and ----- line } else if (key.contains("ATOMIC BASIS SET")) { m_currentMode = GTO; // --- // PRIMITIVE // BASIS FUNC // blank // column header // blank // element for (unsigned int i = 0; i < 7; ++i) { key = m_in->readLine(); } } else if (key.contains("TOTAL NUMBER OF BASIS SET")) { m_currentMode = NotParsing; // no longer reading GTOs } else if (key.contains("NUMBER OF CARTESIAN GAUSSIAN BASIS")) { m_currentMode = NotParsing; // no longer reading GTOs } else if (key.contains("NUMBER OF ELECTRONS")) { m_electrons = list[4].toInt(); } else if (key.contains("EIGENVECTORS")) { //|| key.contains("MOLECULAR ORBITALS")) { m_currentMode = MO; key = m_in->readLine(); // ---- key = m_in->readLine(); // blank line } else { QString shell; orbital shellType; vector > columns; // parsing a line -- what mode are we in? switch (m_currentMode) { case Atoms: { // element_name atomic_number x y z if (list.size() < 5) return; Vector3d pos(list[2].toDouble() * m_coordFactor, list[3].toDouble() * m_coordFactor, list[4].toDouble() * m_coordFactor); basis->moleculeRef().addAtom(pos, list[1].toInt()); break; } case GTO: // should start at the first line of shell functions if (key.isEmpty()) break; list = key.split(' ', QString::SkipEmptyParts); numGTOs = 0; while (list.size() > 1) { numGTOs++; shell = list[1].toLower(); shellType = UU; if (shell.contains("s")) shellType = S; else if (shell.contains("l")) shellType = SP; else if (shell.contains("p")) shellType = P; else if (shell.contains("d")) shellType = D; else if (shell.contains("f")) shellType = F; else return; m_a.push_back(list[3].toDouble()); m_c.push_back(list[4].toDouble()); if (shellType == SP && list.size() > 4) m_csp.push_back(list[5].toDouble()); // read to the next shell key = m_in->readLine().trimmed(); if (key.isEmpty()) { key = m_in->readLine().trimmed(); m_shellNums.push_back(numGTOs); m_shellTypes.push_back(shellType); m_shelltoAtom.push_back(m_currentAtom); numGTOs = 0; } list = key.split(' ', QString::SkipEmptyParts); } // end "while list > 1) -- i.e., we're on the next atom line key = m_in->readLine(); // start reading the next atom m_currentAtom++; break; case MO: m_MOcoeffs.clear(); // if the orbitals were punched multiple times while(!key.contains("END OF") && !key.contains("-----")) { // currently reading the MO number key = m_in->readLine(); // energies key = m_in->readLine(); // symmetries key = m_in->readLine(); // now we've got coefficients list = key.split(' ', QString::SkipEmptyParts); unsigned int numColumns = 0; unsigned int numRows = 0; while (list.size() > 5) { numColumns = list.size() - 4; columns.resize(numColumns); for (unsigned int i = 0; i < numColumns; ++i) { columns[i].push_back(list[i + 4].toDouble()); } key = m_in->readLine(); if (key.contains(QLatin1String("END OF RHF"))) break; list = key.split(' ', QString::SkipEmptyParts); } // ok, we've finished one batch of MO coeffs // Now we need to re-order the MO coeffs, so we insert one MO at a time for (unsigned int i = 0; i < numColumns; ++i) { numRows = columns[i].size(); for (unsigned int j = 0; j < numRows; ++j) { qDebug() << "push back" << columns[i][j]; m_MOcoeffs.push_back(columns[i][j]); } } columns.clear(); if (key.trimmed().isEmpty()) key = m_in->readLine(); // skip the blank line after the MOs } // finished parsing MOs m_currentMode = NotParsing; break; default: ; } // end switch } // end if (mode) } // end process line void GAMESSUSOutput::load(GaussianSet* basis) { // Now load up our basis set basis->setNumElectrons(m_electrons); // qDebug() << m_shellTypes.size() << m_shellNums.size() << m_shelltoAtom.size() << m_a.size() << m_c.size() << m_csp.size(); // Set up the GTO primitive counter, go through the shells and add them int nGTO = 0; int nSP = 0; // number of SP shells for (unsigned int i = 0; i < m_shellTypes.size(); ++i) { // Handle the SP case separately - this should possibly be a distinct type if (m_shellTypes.at(i) == SP) { // SP orbital type - currently have to unroll into two shells int tmpGTO = nGTO; int s = basis->addBasis(m_shelltoAtom.at(i) - 1, S); for (int j = 0; j < m_shellNums.at(i); ++j) { basis->addGTO(s, m_c.at(nGTO), m_a.at(nGTO)); ++nGTO; } int p = basis->addBasis(m_shelltoAtom.at(i) - 1, P); for (int j = 0; j < m_shellNums.at(i); ++j) { basis->addGTO(p, m_csp.at(nSP), m_a.at(tmpGTO)); ++tmpGTO; ++nSP; } } else { int b = basis->addBasis(m_shelltoAtom.at(i) - 1, m_shellTypes.at(i)); for (int j = 0; j < m_shellNums.at(i); ++j) { basis->addGTO(b, m_c.at(nGTO), m_a.at(nGTO)); ++nGTO; } } } // qDebug() << " loading MOs " << m_MOcoeffs.size(); // Now to load in the MO coefficients if (m_MOcoeffs.size()) basis->addMOs(m_MOcoeffs); qDebug() << " done loadBasis "; } void GAMESSUSOutput::outputAll() { qDebug() << "Shell mappings."; for (unsigned int i = 0; i < m_shellTypes.size(); ++i) qDebug() << i << ": type =" << m_shellTypes.at(i) << ", number =" << m_shellNums.at(i) << ", atom =" << m_shelltoAtom.at(i); qDebug() << "MO coefficients."; for (unsigned int i = 0; i < m_MOcoeffs.size(); ++i) qDebug() << m_MOcoeffs.at(i); } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/slaterset.h0000644000175000001440000001161612250371054025620 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef SLATERSET_H #define SLATERSET_H #include "basisset.h" #include #include #include namespace OpenQube { /** * @class SlaterSet slaterset.h * @brief SlaterSet Class * @author Marcus D. Hanwell * * The SlaterSet class has a transparent data structure for storing the basis * sets output by many quantum mechanical codes. It has a certain hierarchy * where shells are built up from n primitives, in this case Slater Type * Orbitals (STOs). Each shell has a type (S, P, D, F, etc) and is composed of * one or more STOs. Each STO has a contraction coefficient, c, and an exponent, * a. * * When calculating Molecular Orbitals (MOs) each orthogonal shell has an * independent coefficient. That is the S type orbitals have one coefficient, * the P type orbitals have three coefficients (Px, Py and Pz), the D type * orbitals have five (or six if cartesian types) coefficients, and so on. */ struct SlaterShell; class OPENQUBE_EXPORT SlaterSet : public BasisSet { Q_OBJECT public: /** * Constructor. */ SlaterSet(); /** * Destructor. */ ~SlaterSet(); /** * Enumeration of the Slater orbital types. */ enum slater { S, PX, PY, PZ, X2, XZ, Z2, YZ, XY, UU }; /** * Function to add an atom to the SlaterSet. * @param pos Position of the center of the QAtom. * @return The index of the added atom. */ bool addAtoms(const std::vector &pos); /** * Add a basis to the basis set. * @param i Index of the atom to add the Basis too. * @return The index of the added Basis. */ bool addSlaterIndices(const std::vector &i); /** * Add the symmetry types for the orbitals. * @param t Vector containing the types of symmetry using the slater enum. */ bool addSlaterTypes(const std::vector &t); /** * Add a STO to the supplied basis. * @param zetas The exponents of the STOs * @return True if successful. */ bool addZetas(const std::vector &zetas); /** * The PQNs for the orbitals. */ bool addPQNs(const std::vector &pqns); /** * The overlap matrix. * @param m Matrix containing the overlap matrix for the basis. */ bool addOverlapMatrix(const Eigen::MatrixXd &m); /** * Add Eigen Vectors to the SlaterSet. * @param MOs Matrix of the eigen vectors for the SlaterSet. */ bool addEigenVectors(const Eigen::MatrixXd &e); /** * Add the density matrix to the SlaterSet. * @param d Density matrix for the SlaterSet. */ bool addDensityMatrix(const Eigen::MatrixXd &d); /** * @return The number of MOs in the BasisSet. */ unsigned int numMOs(); void outputAll(); bool calculateCubeMO(Cube *cube, unsigned int state = 1); bool calculateCubeDensity(Cube *cube); QFutureWatcher & watcher() { return m_watcher; } /** * Create a deep copy of @a this and return a pointer to it. */ virtual BasisSet * clone(); private Q_SLOTS: /** * Slot to set the cube data once Qt Concurrent is done */ void calculationComplete(); private: std::vector m_atomPos; std::vector m_slaterIndices; std::vector m_slaterTypes; std::vector m_zetas; std::vector m_pqns, m_PQNs; std::vector m_factors; Eigen::MatrixXd m_overlap; Eigen::MatrixXd m_eigenVectors; Eigen::MatrixXd m_density; Eigen::MatrixXd m_normalized; bool m_initialized; QFuture m_future; QFutureWatcher m_watcher; Cube *m_cube; // Cube to put the results into QVector m_slaterShells; bool initialize(); static bool isSmall(double val); unsigned int factorial(unsigned int n); static void processPoint(SlaterShell &shell); static void processDensity(SlaterShell &shell); static double pointSlater(SlaterSet *set, const Eigen::Vector3d &delta, double dr2, unsigned int slater, unsigned int indexMO); static double pointSlater(SlaterSet *set, const Eigen::Vector3d &delta, double dr2, unsigned int slater, unsigned int indexMO, double expZeta); static double calcSlater(SlaterSet *set, const Eigen::Vector3d &delta, double dr2, unsigned int slater); }; } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/cube.h0000644000175000001440000001447412250371054024535 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef OQ_CUBE_H #define OQ_CUBE_H #include "openqubeabi.h" #include #include #include // Forward declarations class QReadWriteLock; namespace OpenQube { class Molecule; class OPENQUBE_EXPORT Cube { public: Cube(); ~Cube(); /** * @enum Different Cube types relating to the data */ enum Type{ VdW, ESP, ElectronDensity, MO, FromFile, None }; /** * @return The minimum point in the cube. */ Eigen::Vector3d min() const { return m_min; } /** * @return The maximum point in the cube. */ Eigen::Vector3d max() const { return m_max; } /** * @return The spacing of the grid. */ Eigen::Vector3d spacing() const { return m_spacing; } /** * @return The x, y and z dimensions of the cube. */ Eigen::Vector3i dimensions() const { return m_points; } /** * Set the limits of the cube. * @param min The minimum point in the cube. * @param max The maximum point in the cube. * @param points The number of (integer) points in the cube. */ bool setLimits(const Eigen::Vector3d &min, const Eigen::Vector3d &max, const Eigen::Vector3i &points); /** * Set the limits of the cube. * @param min The minimum point in the cube. * @param max The maximum point in the cube. * @param spacing The interval between points in the cube. */ bool setLimits(const Eigen::Vector3d &min, const Eigen::Vector3d &max, double spacing); /** * Set the limits of the cube. * @param min The minimum point in the cube. * @param dim The integer dimensions of the cube in x, y and z. * @param spacing The interval between points in the cube. */ bool setLimits(const Eigen::Vector3d &min, const Eigen::Vector3i &dim, double spacing); /** * Set the limits of the cube - copy the limits of an existing Cube. * @param cube Existing Cube to copy the limits from. */ bool setLimits(const Cube &cube); /** * Set the limits of the cube. * @param mol Molecule to take limits from * @param spacing The spacing of the regular grid * @param padding Padding around the molecule */ bool setLimits(const Molecule &mol, double spacing, double padding); /** * @return Vector containing all the data in a one-dimensional array. */ std::vector * data(); /** * Set the values in the cube to those passed in the vector. */ bool setData(const std::vector &values); /** * Adds the values in the cube to those passed in the vector. */ bool addData(const std::vector &values); /** * @return Index of the point closest to the position supplied. * @param pos Position to get closest index for. */ unsigned int closestIndex(const Eigen::Vector3d &pos) const; /** * @param pos Position to get closest index for. * @return The i, j, k index closest to the position supplied. */ Eigen::Vector3i indexVector(const Eigen::Vector3d &pos) const; /** * @param index Index to be translated to a position. * @return Position of the given index. */ Eigen::Vector3d position(unsigned int index) const; /** * This function is very quick as it just returns the value at the point. * @return Cube value at the integer point i, j, k. */ double value(int i, int j, int k) const; /** * This function is very quick as it just returns the value at the point. * @return Cube value at the integer point pos. */ double value(const Eigen::Vector3i &pos) const; /** * This function uses trilinear interpolation to find the value at points * between those specified in the cube. * @return Cube value at the specified position. * @warning This function is quite computationally expensive and should be * avoided where possible. */ float valuef(const Eigen::Vector3f &pos) const; /** * This function uses trilinear interpolation to find the value at points * between those specified in the cube. * @return Cube value at the specified position. * @warning This function is quite computationally expensive and should be * avoided where possible. */ double value(const Eigen::Vector3d &pos) const; /** * Sets the value at the specified point in the cube. * @param i x compenent of the position. * @param j y compenent of the position. * @param k z compenent of the position. * @param value Value at the specified position. */ bool setValue(int i, int j, int k, double value); /** * Sets the value at the specified index in the cube. * @param i 1-dimenional index of the point to set in the cube. */ bool setValue(unsigned int i, double value); /** * @return The minimum value at any point in the Cube. */ double minValue() const { return m_minValue; } /** * @return The maximum value at any point in the Cube. */ double maxValue() const { return m_maxValue; } void setName(const QString &name) { m_name = name; } QString name() const { return m_name; } void setName(const char *name); const char * name_c_str() const; void setCubeType(Type type) { m_cubeType = type; } Type cubeType() const { return m_cubeType; } /** * Provides locking. */ QReadWriteLock * lock() const; protected: std::vector m_data; Eigen::Vector3d m_min, m_max, m_spacing; Eigen::Vector3i m_points; double m_minValue, m_maxValue; QString m_name; Type m_cubeType; QReadWriteLock *m_lock; }; inline bool Cube::setValue(unsigned int i, double value) { if (i < m_data.size()) { m_data[i] = value; if (value > m_maxValue) m_maxValue = value; if (value < m_minValue) m_minValue = value; return true; } else return false; } } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/basissetloader.h0000644000175000001440000000502012250371054026606 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef OQ_BASISSETLOADER_H #define OQ_BASISSETLOADER_H #include "openqubeabi.h" // Forward declarations class QString; namespace OpenQube { class BasisSet; /** * @class BasisSetLoader basissetloader.h * @brief BasisSetLoader chooses the correct parser, loads the file and returns * a basis set of the correct type. * @author Marcus D. Hanwell * * This class is very much subject to change. It removes the logic from the * individual classes, and takes care of choosing the correct parser before * loading a basis set and returning an object containing this data. */ class OPENQUBE_EXPORT BasisSetLoader { public: /** * Try to match the basis set to the supplied file path. This function will * search for a matching basis set file in the same directory. * * @return Proposed file that would be loaded. Empty if no file found. */ static QString MatchBasisSet(const QString& filename); /** * Try to match the basis set to the supplied file path. This function will * search for a matching basis set file in the same directory. * * @param basisName char array that is overwritten with the corresponding * basis set file for @a filename. Ensure that this array is long enough to * contain the basis set name and path. Zero if no match found. */ static void MatchBasisSet(const char *filename, char *basisName ); /** * Load the supplied output file. The filename should be a valid quantum * output file. * * @return A BasisSet object populated with data file the file. Null on error. */ static BasisSet * LoadBasisSet(const QString& filename); /** * Load the supplied output file. The filename should be a valid quantum * output file. * * @return A BasisSet object populated with data file the file. Null on error. */ static BasisSet * LoadBasisSet(const char *filename); }; } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/basisset.h0000644000175000001440000001245012250371054025424 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell Copyright 2010 David C. Lonie This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef BASISSET_H #define BASISSET_H #include "openqubeabi.h" #include "molecule.h" #include #include namespace OpenQube { /** * @class BasisSet gaussianset.h * @brief BasisSet contains basis set data, calculates cubes. * @author Marcus D. Hanwell * * This is the base class for basis sets, and has two derived classes - * GaussianSet and SlaterSet. It must be populated with data, and can then be * used to calculate values of the basis set in a cube. */ class Cube; class OPENQUBE_EXPORT BasisSet : public QObject { Q_OBJECT public: /** * Constructor. */ BasisSet() : m_electrons(0), m_valid(true) {} /** * Destructor. */ virtual ~BasisSet() {} /** * Set the number of electrons in the BasisSet. * @param n The number of electrons in the BasisSet. */ void setNumElectrons(unsigned int n) { m_electrons = n; } /** * @return The number of electrons in the molecule. */ unsigned int numElectrons() { return m_electrons; } /** * Set the molecule for the basis set. */ void setMolecule(const Molecule &molecule) { m_molecule = molecule; } /** * Get the molecule for the basis set. */ Molecule molecule() const { return m_molecule; } /** * Get a reference to the molecule. */ Molecule & moleculeRef() { return m_molecule; } const Molecule & moleculeRef() const { return m_molecule; } /** * @return The number of MOs in the BasisSet. */ virtual unsigned int numMOs() = 0; /** * Check if the given MO number is the HOMO or not. * @param n The MO number. * @return True if the given MO number is the HOMO. */ bool HOMO(unsigned int n) { if (n+1 == static_cast(m_electrons / 2)) return true; else return false; } /** * Check if the given MO number is the LUMO or not. * @param n The MO number. * @return True if the given MO number is the LUMO. */ bool LUMO(unsigned int n) { if (n == static_cast(m_electrons / 2)) return true; else return false; } /** * Set the number of electrons in the BasisSet. * @param valid True if the basis set is valid, false otherwise. */ void setIsValid(bool valid) { m_valid = valid; } /** * @return True of the basis set is valid, false otherwise. * Default is true, if false then the basis set is likely unusable. */ bool isValid() { return m_valid; } /** * Calculate the MO over the entire range of the supplied Cube. * @param cube The cube to write the values of the MO into. * @param mo The molecular orbital number to calculate. * @note This function starts a threaded calculation. Use watcher() to * monitor progress. * @sa blockingCalculateCubeMO * @return True if the calculation was successful. */ virtual bool calculateCubeMO(Cube *cube, unsigned int mo = 1) = 0; /** * Calculate the MO over the entire range of the supplied Cube. * @param cube The cube to write the values of the MO into. * @param mo The molecular orbital number to calculate. * @sa calculateCubeMO * @return True if the calculation was successful. */ virtual bool blockingCalculateCubeMO(Cube *cube, unsigned int mo = 1); /** * Calculate the electron density over the entire range of the supplied Cube. * @param cube The cube to write the values of the MO into. * @note This function starts a threaded calculation. Use watcher() to * monitor progress. * @sa blockingCalculateCubeDensity * @return True if the calculation was successful. */ virtual bool calculateCubeDensity(Cube *cube) = 0; /** * Calculate the electron density over the entire range of the supplied Cube. * @param cube The cube to write the values of the MO into. * @sa calculateCubeDensity * @return True if the calculation was successful. */ virtual bool blockingCalculateCubeDensity(Cube *cube); /** * When performing a calculation the QFutureWatcher is useful if you want * to update a progress bar. */ virtual QFutureWatcher & watcher()=0; /** * Create a deep copy of @a this and return a pointer to it. */ virtual BasisSet * clone() = 0; protected: /// Total number of electrons unsigned int m_electrons; /** Is the loaded basis set valid? Allows us to mark a basis set invalid if we * were not able to interpret part of it. */ bool m_valid; /** The Molecule holds the atoms (and possibly bonds) read in from the output * file. Most basis sets have orbitals around these atoms, but this is not * necessarily the case. */ Molecule m_molecule; }; } // End namespace openqube #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/cube.cpp0000644000175000001440000002303012250371054025054 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "cube.h" #include "molecule.h" #include #include namespace OpenQube { using Eigen::Vector3i; using Eigen::Vector3f; using Eigen::Vector3d; Cube::Cube() : m_data(0), m_min(0.0, 0.0, 0.0), m_max(0.0, 0.0, 0.0), m_spacing(0.0, 0.0, 0.0), m_points(0, 0, 0), m_minValue(0.0), m_maxValue(0.0), m_lock(new QReadWriteLock) { } Cube::~Cube() { delete m_lock; m_lock = 0; } bool Cube::setLimits(const Vector3d &min, const Vector3d &max, const Vector3i &points) { // We can calculate all necessary properties and initialise our data Vector3d delta = max - min; m_spacing = Vector3d(delta.x() / (points.x()-1), delta.y() / (points.y()-1), delta.z() / (points.z()-1)); m_min = min; m_max = max; m_points = points; m_data.resize(m_points.x() * m_points.y() * m_points.z()); return true; } bool Cube::setLimits(const Vector3d &min, const Vector3d &max, double spacing) { Vector3i points; Vector3d delta = max - min; delta = delta / spacing; points = Vector3i(delta.x(), delta.y(), delta.z()); return setLimits(min, max, points); } bool Cube::setLimits(const Vector3d &min, const Vector3i &dim, double spacing) { Vector3d max = Vector3d(min.x() + (dim.x()-1) * spacing, min.y() + (dim.y()-1) * spacing, min.z() + (dim.z()-1) * spacing); m_min = min; m_max = max; m_points = dim; m_spacing = Vector3d(spacing, spacing, spacing); m_data.resize(m_points.x() * m_points.y() * m_points.z()); return true; } bool Cube::setLimits(const Cube &cube) { m_min = cube.m_min; m_max = cube.m_max; m_points = cube.m_points; m_spacing = cube.m_spacing; m_data.resize(m_points.x() * m_points.y() * m_points.z()); return true; } bool Cube::setLimits(const Molecule &mol, double spacing, double padding) { size_t numAtoms = mol.numAtoms(); Vector3d min, max; if (numAtoms) { Vector3d curPos = min = max = mol.atomPos(0); for (size_t i = 1; i < numAtoms; ++i) { curPos = mol.atomPos(i); if (curPos.x() < min.x()) min.x() = curPos.x(); if (curPos.x() > max.x()) max.x() = curPos.x(); if (curPos.y() < min.y()) min.y() = curPos.y(); if (curPos.y() > max.y()) max.y() = curPos.y(); if (curPos.z() < min.z()) min.z() = curPos.z(); if (curPos.z() > max.z()) max.z() = curPos.z(); } } else { min = max = Eigen::Vector3d::Zero(); } // Now to take care of the padding term min += Vector3d(-padding, -padding, -padding); max += Vector3d(padding, padding, padding); return setLimits(min, max, spacing); } std::vector * Cube::data() { return &m_data; } bool Cube::setData(const std::vector &values) { if (!values.size()) { qDebug() << "Zero sized vector passed to Cube::setData. Nothing to do."; return false; } if (static_cast(values.size()) == m_points.x() * m_points.y() * m_points.z()) { m_data = values; qDebug() << "Loaded in cube data" << m_data.size(); // Now to update the minimum and maximum values m_minValue = m_maxValue = m_data[0]; foreach(double val, m_data) { if (val < m_minValue) m_minValue = val; else if (val > m_maxValue) m_maxValue = val; } return true; } else { qDebug() << "The vector passed to Cube::setData does not have the correct" << "size. Expected" << m_points.x() * m_points.y() * m_points.z() << "got" << values.size(); return false; } } bool Cube::addData(const std::vector &values) { // Initialise the cube to zero if necessary if (!m_data.size()) { m_data.resize(m_points.x() * m_points.y() * m_points.z()); } if (values.size() != m_data.size() || !values.size()) { qDebug() << "Attempted to add values to cube - sizes do not match..."; return false; } for (unsigned int i = 0; i < m_data.size(); i++) { m_data[i] += values[i]; if (m_data[i] < m_minValue) m_minValue = m_data[i]; else if (m_data[i] > m_maxValue) m_maxValue = m_data[i]; } return true; } unsigned int Cube::closestIndex(const Vector3d &pos) const { int i, j, k; // Calculate how many steps each coordinate is along its axis i = int((pos.x() - m_min.x()) / m_spacing.x()); j = int((pos.y() - m_min.y()) / m_spacing.y()); k = int((pos.z() - m_min.z()) / m_spacing.z()); return i*m_points.y()*m_points.z() + j*m_points.z() + k; } Vector3i Cube::indexVector(const Vector3d &pos) const { // Calculate how many steps each coordinate is along its axis int i, j, k; i = int((pos.x() - m_min.x()) / m_spacing.x()); j = int((pos.y() - m_min.y()) / m_spacing.y()); k = int((pos.z() - m_min.z()) / m_spacing.z()); return Vector3i(i, j, k); } Vector3d Cube::position(unsigned int index) const { int x, y, z; x = int(index / (m_points.y()*m_points.z())); y = int((index - (x*m_points.y()*m_points.z())) / m_points.z()); z = index % m_points.z(); return Vector3d(x * m_spacing.x() + m_min.x(), y * m_spacing.y() + m_min.y(), z * m_spacing.z() + m_min.z()); } double Cube::value(int i, int j, int k) const { unsigned int index = i*m_points.y()*m_points.z() + j*m_points.z() + k; if (index < m_data.size()) return m_data[index]; else { // qDebug() << "Attempt to identify out of range index" << index << m_data.size(); return 0.0; } } double Cube::value(const Vector3i &pos) const { unsigned int index = pos.x()*m_points.y()*m_points.z() + pos.y()*m_points.z() + pos.z(); if (index < m_data.size()) return m_data[index]; else { qDebug() << "Attempted to access an index out of range."; return 6969.0; } } float Cube::valuef(const Vector3f &pos) const { // This is a really expensive operation and so should be avoided // Interpolate the value at the supplied vector - trilinear interpolation... Vector3f delta = pos - m_min.cast(); // Find the integer low and high corners Vector3i lC(delta.x() / m_spacing.x(), delta.y() / m_spacing.y(), delta.z() / m_spacing.z()); Vector3i hC(lC.x() + 1, lC.y() + 1, lC.z() + 1); // So there are six corners in total - work out the delta of the position // and the low corner Vector3f P((delta.x() - lC.x()*m_spacing.x()) / m_spacing.x(), (delta.y() - lC.y()*m_spacing.y()) / m_spacing.y(), (delta.z() - lC.z()*m_spacing.z()) / m_spacing.z()); Vector3f dP = Vector3f(1.0, 1.0, 1.0) - P; // Now calculate and return the interpolated value return value(lC.x(), lC.y(), lC.z()) * dP.x() * dP.y() * dP.z() + value(hC.x(), lC.y(), lC.z()) * P.x() * dP.y() * dP.z() + value(lC.x(), hC.y(), lC.z()) * dP.x() * P.y() * dP.z() + value(lC.x(), lC.y(), hC.z()) * dP.x() * dP.y() * P.z() + value(hC.x(), lC.y(), hC.z()) * P.x() * dP.y() * P.z() + value(lC.x(), hC.y(), hC.z()) * dP.x() * P.y() * P.z() + value(hC.x(), hC.y(), lC.z()) * P.x() * P.y() * dP.z() + value(hC.x(), hC.y(), hC.z()) * P.x() * P.y() * P.z(); } double Cube::value(const Vector3d &pos) const { // This is a really expensive operation and so should be avoided // Interpolate the value at the supplied vector - trilinear interpolation... Vector3d delta = pos - m_min; // Find the integer low and high corners Vector3i lC(delta.x() / m_spacing.x(), delta.y() / m_spacing.y(), delta.z() / m_spacing.z()); Vector3i hC(lC.x() + 1, lC.y() + 1, lC.z() + 1); // So there are six corners in total - work out the delta of the position // and the low corner Vector3d P((delta.x() - lC.x()*m_spacing.x()) / m_spacing.x(), (delta.y() - lC.y()*m_spacing.y()) / m_spacing.y(), (delta.z() - lC.z()*m_spacing.z()) / m_spacing.z()); Vector3d dP = Vector3d(1.0, 1.0, 1.0) - P; // Now calculate and return the interpolated value return value(lC.x(), lC.y(), lC.z()) * dP.x() * dP.y() * dP.z() + value(hC.x(), lC.y(), lC.z()) * P.x() * dP.y() * dP.z() + value(lC.x(), hC.y(), lC.z()) * dP.x() * P.y() * dP.z() + value(lC.x(), lC.y(), hC.z()) * dP.x() * dP.y() * P.z() + value(hC.x(), lC.y(), hC.z()) * P.x() * dP.y() * P.z() + value(lC.x(), hC.y(), hC.z()) * dP.x() * P.y() * P.z() + value(hC.x(), hC.y(), lC.z()) * P.x() * P.y() * dP.z() + value(hC.x(), hC.y(), hC.z()) * P.x() * P.y() * P.z(); } bool Cube::setValue(int i, int j, int k, double value) { unsigned int index = i*m_points.y()*m_points.z() + j*m_points.z() + k; if (index < m_data.size()) { m_data[index] = value; return true; } else return false; } void Cube::setName(const char *name) { this->setName(QString(name)); } const char * Cube::name_c_str() const { return this->name().toStdString().c_str(); } QReadWriteLock * Cube::lock() const { return m_lock; } } // End namespace avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp0000644000175000001440000003430012250371054026146 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "slaterset.h" #ifdef WIN32 #define _USE_MATH_DEFINES #include // needed for M_PI #endif #include "cube.h" #include #include #include #include #include #include #include #include #include using std::vector; using Eigen::Vector3d; using Eigen::Vector3i; using Eigen::MatrixXd; using Eigen::SelfAdjointEigenSolver; namespace OpenQube { struct SlaterShell { SlaterSet *set; // A pointer to the SlaterSet, cannot write to member vars Cube *cube; // The target cube, used to initialise temp cubes too unsigned int pos; // The index of position of the point to calculate the MO for unsigned int state;// The MO number to calculate }; using std::vector; static const double BOHR_TO_ANGSTROM = 0.529177249; static const double ANGSTROM_TO_BOHR = 1.0 / 0.529177249; SlaterSet::SlaterSet() : m_initialized(false) { } SlaterSet::~SlaterSet() { } bool SlaterSet::addAtoms(const std::vector &pos) { m_atomPos = pos; return true; } bool SlaterSet::addSlaterIndices(const std::vector &i) { m_slaterIndices = i; return true; } bool SlaterSet::addSlaterTypes(const std::vector &t) { m_slaterTypes = t; return true; } bool SlaterSet::addZetas(const std::vector &zetas) { m_zetas = zetas; return true; } bool SlaterSet::addPQNs(const std::vector &pqns) { m_pqns = pqns; return true; } bool SlaterSet::addOverlapMatrix(const Eigen::MatrixXd &m) { m_overlap.resize(m.rows(), m.cols()); m_overlap = m; return true; } bool SlaterSet::addEigenVectors(const Eigen::MatrixXd &e) { m_eigenVectors.resize(e.rows(), e.cols()); m_eigenVectors = e; return true; } bool SlaterSet::addDensityMatrix(const Eigen::MatrixXd &d) { m_density.resize(d.rows(), d.cols()); m_density = d; return true; } unsigned int SlaterSet::numMOs() { return m_overlap.cols(); } inline bool SlaterSet::isSmall(double val) { if (val > -1e-15 && val < 1e-15) return true; else return false; } unsigned int SlaterSet::factorial(unsigned int n) { if (n <= 1) return n; return (n * factorial(n-1)); } void SlaterSet::outputAll() { } bool SlaterSet::calculateCubeMO(Cube *cube, unsigned int state) { // Set up the calculation and ideally use the new QtConcurrent code to // multithread the calculation... if (state < 1 || static_cast(state) > m_overlap.rows()) return false; if (!m_initialized) initialize(); // It is more efficient to process each shell over the entire cube than it // is to process each MO at each point in the cube. This is probably the best // point at which to multithread too - QtConcurrent! m_slaterShells.resize(cube->data()->size()); qDebug() << "Number of points:" << m_slaterShells.size(); for (int i = 0; i < m_slaterShells.size(); ++i) { m_slaterShells[i].set = this; m_slaterShells[i].cube = cube; m_slaterShells[i].pos = i; m_slaterShells[i].state = state; } // Lock the cube until we are done. cube->lock()->lockForWrite(); // Watch for the future connect(&m_watcher, SIGNAL(finished()), this, SLOT(calculationComplete())); // The main part of the mapped reduced function... m_future = QtConcurrent::map(m_slaterShells, SlaterSet::processPoint); // Connect our watcher to our future m_watcher.setFuture(m_future); return true; } bool SlaterSet::calculateCubeDensity(Cube *cube) { // Set up the calculation and ideally use the new QtConcurrent code to // multithread the calculation... if (!m_initialized) initialize(); // It is more efficient to process each shell over the entire cube than it // is to process each MO at each point in the cube. This is probably the best // point at which to multithread too - QtConcurrent! m_slaterShells.resize(cube->data()->size()); qDebug() << "Number of points for density:" << m_slaterShells.size(); for (int i = 0; i < m_slaterShells.size(); ++i) { m_slaterShells[i].set = this; m_slaterShells[i].cube = cube; m_slaterShells[i].pos = i; m_slaterShells[i].state = 0; } // Lock the cube until we are done. cube->lock()->lockForWrite(); // Watch for the future connect(&m_watcher, SIGNAL(finished()), this, SLOT(calculationComplete())); // The main part of the mapped reduced function... m_future = QtConcurrent::map(m_slaterShells, SlaterSet::processDensity); // Connect our watcher to our future m_watcher.setFuture(m_future); return true; } BasisSet * SlaterSet::clone() { SlaterSet *result = new SlaterSet(); result->m_atomPos = this->m_atomPos; result->m_slaterIndices = this->m_slaterIndices; result->m_zetas = this->m_zetas; result->m_pqns = this->m_pqns; result->m_PQNs = this->m_PQNs; result->m_factors = this->m_factors; result->m_overlap = this->m_overlap; result->m_eigenVectors = this->m_eigenVectors; result->m_density = this->m_density; result->m_normalized = this->m_normalized; result->m_initialized = this->m_initialized; // Skip tmp variables return result; } void SlaterSet::calculationComplete() { disconnect(&m_watcher, SIGNAL(finished()), this, SLOT(calculationComplete())); qDebug() << m_slaterShells[0].cube->data()->at(0) << m_slaterShells[0].cube->data()->at(1); qDebug() << "Calculation complete - cube map..."; m_slaterShells[0].cube->lock()->unlock(); } bool SlaterSet::initialize() { m_normalized.resize(m_overlap.cols(), m_overlap.rows()); SelfAdjointEigenSolver s(m_overlap); MatrixXd p = s.eigenvectors(); MatrixXd m = p * s.eigenvalues().cwise().inverse().cwise().sqrt().asDiagonal() * p.inverse(); m_normalized = m * m_eigenVectors; if (!(m_overlap*m*m).isIdentity()) qDebug() << "Identity test FAILED - do you need a newer version of Eigen?"; // std::cout << m_normalized << std::endl << std::endl; // std::cout << s.eigenvalues() << std::endl << std::endl; // std::cout << m_overlap << std::endl << std::endl; // std::cout << s.eigenvalues().minCoeff() << ' ' << s.eigenvalues().maxCoeff() << std::endl << std::endl; m_factors.resize(m_zetas.size()); m_PQNs = m_pqns; // Calculate the normalizations of the orbitals for (unsigned int i = 0; i < m_zetas.size(); ++i) { switch (m_slaterTypes[i]) { case S: m_factors[i] = pow(2.0 * m_zetas[i], m_pqns[i] + 0.5) * sqrt(1.0 / (4.0*M_PI) / factorial(2*m_pqns[i])); m_PQNs[i] -= 1; break; case PX: case PY: case PZ: m_factors[i] = pow(2.0 * m_zetas[i], m_pqns[i] + 0.5) * sqrt(3.0 / (4.0*M_PI) / factorial(2*m_pqns[i])); m_PQNs[i] -= 2; break; case X2: m_factors[i] = 0.5 * pow(2.0 * m_zetas[i], m_pqns[i] + 0.5) * sqrt(15.0 / (4.0*M_PI) / factorial(2*m_pqns[i])); m_PQNs[i] -= 3; break; case XZ: m_factors[i] = pow(2.0 * m_zetas[i], m_pqns[i] + 0.5) * sqrt(15.0 / (4.0*M_PI) / factorial(2*m_pqns[i])); m_PQNs[i] -= 3; break; case Z2: m_factors[i] = (0.5/sqrt(3.0)) * pow(2.0 * m_zetas[i], m_pqns[i] + 0.5) * sqrt(15.0 / (4.0*M_PI) / factorial(2*m_pqns[i])); m_PQNs[i] -= 3; break; case YZ: case XY: m_factors[i] = pow(2.0 * m_zetas[i], m_pqns[i] + 0.5) * sqrt(15.0 / (4.0*M_PI) / factorial(2*m_pqns[i])); m_PQNs[i] -= 3; break; default: qDebug() << "Orbital" << i << "not handled, type" << m_slaterTypes[i]; } } // Convert the exponents into Angstroms for (unsigned int i = 0; i < m_zetas.size(); ++i) m_zetas[i] = m_zetas[i] / BOHR_TO_ANGSTROM; m_initialized = true; return true; } void SlaterSet::processPoint(SlaterShell &shell) { SlaterSet *set = shell.set; unsigned int atomsSize = set->m_atomPos.size(); unsigned int basisSize = set->m_zetas.size(); vector deltas; vector dr; deltas.reserve(atomsSize); dr.reserve(atomsSize); // Simply the row of the matrix to operate on unsigned int indexMO = shell.state - 1; // Calculate our position Vector3d pos = shell.cube->position(shell.pos);// * ANGSTROM_TO_BOHR; // Calculate the deltas for the position for (unsigned int i = 0; i < atomsSize; ++i) { deltas.push_back(pos - set->m_atomPos[i]); dr.push_back(deltas[i].norm()); } // Now calculate the value at this point in space double tmp = 0.0; for (unsigned int i = 0; i < basisSize; ++i) { tmp += pointSlater(shell.set, deltas[set->m_slaterIndices[i]], dr[set->m_slaterIndices[i]], i, indexMO); } // Set the value shell.cube->setValue(shell.pos, tmp); } void SlaterSet::processDensity(SlaterShell &shell) { // Calculate the electron density SlaterSet *set = shell.set; unsigned int atomsSize = set->m_atomPos.size(); unsigned int basisSize = set->m_zetas.size(); unsigned int matrixSize = set->m_density.rows(); vector deltas; vector dr; deltas.reserve(atomsSize); dr.reserve(atomsSize); // Calculate our position Vector3d pos = shell.cube->position(shell.pos);// * ANGSTROM_TO_BOHR; // Calculate the deltas for the position for (unsigned int i = 0; i < atomsSize; ++i) { deltas.push_back(pos - set->m_atomPos[i]); dr.push_back(deltas[i].norm()); } // Precompute the factor * exp (-zeta * drs) vector expZetas(basisSize); for (unsigned int i = 0; i < basisSize; ++i) { expZetas[i] = exp(- set->m_zetas[i] * dr[set->m_slaterIndices[i]]); } // Now calculate the value of the density at this point in space double rho = 0.0; for (unsigned int i = 0; i < matrixSize; ++i) { // Calculate the off-diagonal parts of the matrix for (unsigned int j = 0; j < i; ++j) { if (isSmall(set->m_density.coeffRef(i, j))) continue; // Do the first basis double a = calcSlater(shell.set, deltas[set->m_slaterIndices[i]], dr[set->m_slaterIndices[i]], i); double b = calcSlater(shell.set, deltas[set->m_slaterIndices[j]], dr[set->m_slaterIndices[j]], j); rho += 2.0 * set->m_density.coeffRef(i, j) * (a*b); } // Now calculate the matrix diagonal double tmp = calcSlater(shell.set, deltas[set->m_slaterIndices[i]], dr[set->m_slaterIndices[i]], i); rho += set->m_density.coeffRef(i, i) * (tmp*tmp); } // Set the value shell.cube->setValue(shell.pos, rho); } inline double SlaterSet::pointSlater(SlaterSet *set, const Eigen::Vector3d &delta, double dr, unsigned int slater, unsigned int indexMO) { if (isSmall(set->m_normalized.coeffRef(slater, indexMO))) return 0.0; double tmp = set->m_normalized.coeffRef(slater, indexMO) * set->m_factors[slater] * exp(- set->m_zetas[slater] * dr); // Radial part with effective PQNs for (int i = 0; i < set->m_PQNs[slater]; ++i) tmp *= dr; switch (set->m_slaterTypes[slater]) { case S: break; case PX: tmp *= delta.x(); break; case PY: tmp *= delta.y(); break; case PZ: tmp *= delta.z(); break; case X2: // (x^2 - y^2)r^n tmp *= delta.x() * delta.x() - delta.y() * delta.y(); break; case XZ: // xzr^n tmp *= delta.x() * delta.z(); break; case Z2: // (2z^2 - x^2 - y^2)r^n tmp *= 2.0 * delta.z() * delta.z() - delta.x() * delta.x() - delta.y() * delta.y(); break; case YZ: // yzr^n tmp *= delta.y() * delta.z(); break; case XY: // xyr^n tmp *= delta.x() * delta.y(); break; default: return 0.0; } return tmp; } inline double SlaterSet::pointSlater(SlaterSet *set, const Eigen::Vector3d &delta, double dr, unsigned int slater, unsigned int indexMO, double expZeta) { if (isSmall(set->m_normalized.coeffRef(slater, indexMO))) return 0.0; double tmp = set->m_normalized.coeffRef(slater, indexMO) * expZeta; // Radial part with effective PQNs for (int i = 0; i < set->m_PQNs[slater]; ++i) tmp *= dr; switch (set->m_slaterTypes[slater]) { case S: break; case PX: tmp *= delta.x(); break; case PY: tmp *= delta.y(); break; case PZ: tmp *= delta.z(); break; case X2: // (x^2 - y^2)r^n tmp *= delta.x() * delta.x() - delta.y() * delta.y(); break; case XZ: // xzr^n tmp *= delta.x() * delta.z(); break; case Z2: // (2z^2 - x^2 - y^2)r^n tmp *= 2.0 * delta.z() * delta.z() - delta.x() * delta.x() - delta.y() * delta.y(); break; case YZ: // yzr^n tmp *= delta.y() * delta.z(); break; case XY: // xyr^n tmp *= delta.x() * delta.y(); break; default: return 0.0; } return tmp; } inline double SlaterSet::calcSlater(SlaterSet *set, const Eigen::Vector3d &delta, double dr, unsigned int slater) { double tmp = set->m_factors[slater] * exp(- set->m_zetas[slater] * dr); // Radial part with effective PQNs for (int i = 0; i < set->m_PQNs[slater]; ++i) tmp *= dr; switch (set->m_slaterTypes[slater]) { case S: break; case PX: tmp *= delta.x(); break; case PY: tmp *= delta.y(); break; case PZ: tmp *= delta.z(); break; case X2: // (x^2 - y^2)r^n tmp *= delta.x() * delta.x() - delta.y() * delta.y(); break; case XZ: // xzr^n tmp *= delta.x() * delta.z(); break; case Z2: // (2z^2 - x^2 - y^2)r^n tmp *= 2.0 * delta.z() * delta.z() - delta.x() * delta.x() - delta.y() * delta.y(); break; case YZ: // yzr^n tmp *= delta.y() * delta.z(); break; case XY: // xyr^n tmp *= delta.x() * delta.y(); break; default: return 0.0; } return tmp; } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/gamessus.h0000644000175000001440000000307012250371054025434 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef GAMESSUS_H #define GAMESSUS_H #include #include #include #include "gaussianset.h" class QString; namespace OpenQube { class OPENQUBE_EXPORT GAMESSUSOutput { // Parsing mode: section of the file currently being parsed enum mode { NotParsing, Atoms, GTO, MO}; public: GAMESSUSOutput(const QString &filename, GaussianSet *basis); ~GAMESSUSOutput(); void outputAll(); private: QIODevice *m_in; void processLine(GaussianSet *basis); void load(GaussianSet *basis); double m_coordFactor; mode m_currentMode; int m_electrons; int m_currentAtom; unsigned int m_numBasisFunctions; std::vector m_shellTypes; std::vector m_shellNums; std::vector m_shelltoAtom; std::vector m_a; std::vector m_c; std::vector m_csp; std::vector m_orbitalEnergy; std::vector m_MOcoeffs; }; } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/molden.h0000644000175000001440000000301012250371054025055 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2010 Geoffrey R. Hutchison This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef MOLDEN_H #define MOLDEN_H #include #include #include "gaussianset.h" namespace OpenQube { class MoldenFile { // Parsing mode: section of the file currently being parsed enum mode { NotParsing, Atoms, GTO, STO, MO, SCF }; public: MoldenFile(const QString &filename, GaussianSet *basis); ~MoldenFile(); void outputAll(); private: QIODevice *m_in; void processLine(); void load(GaussianSet* basis); double m_coordFactor; mode m_currentMode; int m_electrons; unsigned int m_numBasisFunctions; std::vector m_aNums; std::vector m_aPos; std::vector m_shellTypes; std::vector m_shellNums; std::vector m_shelltoAtom; std::vector m_a; std::vector m_c; std::vector m_csp; std::vector m_orbitalEnergy; std::vector m_MOcoeffs; }; } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/molecule.h0000644000175000001440000000610212250371054025411 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2011 Kitware, Inc. This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef OQ_MOLECULE_H #define OQ_MOLECULE_H #include "openqubeabi.h" #include "atom.h" #include #include namespace OpenQube { class Atom; class OPENQUBE_EXPORT Molecule { public: /** Default contructor to create an empty molecule object. */ Molecule(); virtual ~Molecule(); /** Add a new atom to the molecule, return a pointer to it. * @param pos Initial position, defaults to 0, 0, 0. * @param atomicNumber Atomic (proton) number, defaults to 0 (dummy atom). * @note The atom belongs to the molecule. */ Atom addAtom(const Eigen::Vector3d &pos = Eigen::Vector3d::Zero(), short atomicNumber = 0); /** Get a pointer to the specified atom. * @param index The index of the atom in the molecule. * @return Pointer to the Atom, or 0 if the index is invalid. */ const Atom atom(size_t index) const; Atom atom(size_t index); /** Get the atomic number for the supplied atom index. * @param index The index of the atom in the molecule. * @return The atomic number of the atom. */ short atomAtomicNumber(size_t index) const; /** Set the atomic number for the supplied atom index. * @param index The index of the atom in the molecule. * @param atomicNumber The atomic number to set for the atom. */ void setAtomAtomicNumber(size_t index, short atomicNumber); /** Get the position of the specified atom. * @param index The index of the atom you want the position of. * @return Position of the atom, or a Zero vector if the index is invalid. */ Eigen::Vector3d atomPos(size_t index) const; /** Set the position of the specified atom. * @param index The index of the atom to set the position of. * @param pos The position to set it to. */ void setAtomPos(size_t index, const Eigen::Vector3d& pos); /** * Clear all atoms from the molecule. */ void clearAtoms(); /** * @return The total number of atoms in the molecule. */ size_t numAtoms() const { return m_atomicNumbers.size(); } /** * Convenience function: print out a summary of the molecule. */ void print() const; protected: /** Container of all atomic numbers for Atom objects in the molecule. */ std::vector m_atomicNumbers; /** Container of all atomic coordinates for the molecule. */ std::vector > m_atomPositions; /** The current conformer, defaults to 0 in a standard molecule. */ size_t m_conformer; }; } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/gaussianset.cpp0000644000175000001440000006426412250371054026502 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell Copyright 2008 Albert De Fusco This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "gaussianset.h" #ifdef WIN32 #define _USE_MATH_DEFINES #include // needed for M_PI #endif #include "cube.h" #include #include #include #include #include #include using std::vector; using Eigen::Vector3d; using Eigen::Vector3i; using Eigen::MatrixXd; namespace OpenQube { struct GaussianShell { GaussianSet *set; // A pointer to the GaussianSet, cannot write to member vars Cube *tCube; // The target cube, used to initialise temp cubes too unsigned int pos; // The index ofposition of the point to calculate the MO for unsigned int state;// The MO number to calculate }; static const double BOHR_TO_ANGSTROM = 0.529177249; static const double ANGSTROM_TO_BOHR = 1.0 / BOHR_TO_ANGSTROM; GaussianSet::GaussianSet() : m_numMOs(0), m_numAtoms(0), m_init(false), m_cube(0), m_gaussianShells(0) { } GaussianSet::~GaussianSet() { } unsigned int GaussianSet::addAtom(const Vector3d& pos, int atomicNumber) { m_init = false; // Add to the new data structure, delete the old soon m_molecule.addAtom(pos, atomicNumber); return m_molecule.numAtoms() - 1; } unsigned int GaussianSet::addBasis(unsigned int atom, orbital type) { // Count the number of independent basis functions switch (type) { case S: m_numMOs++; break; case P: m_numMOs += 3; break; case SP: m_numMOs += 4; break; case D: m_numMOs += 6; break; case D5: m_numMOs += 5; break; case F: m_numMOs += 10; break; case F7: m_numMOs += 7; break; case G: m_numMOs += 15; break; case G9: m_numMOs += 9; break; case H: m_numMOs += 21; break; case H11: m_numMOs += 11; break; case I: m_numMOs += 28; break; case I13: m_numMOs += 13; break; default: // Should never hit here ; } m_init = false; // Add to the new data structure, delete the old soon m_symmetry.push_back(type); m_atomIndices.push_back(atom); return m_symmetry.size() - 1; } unsigned int GaussianSet::addGTO(unsigned int, double c, double a) { // Use the new data structure if (m_gtoIndices.size() < m_atomIndices.size()) { // First GTO added for this basis - add the gto index m_gtoIndices.push_back(m_gtoA.size()); } m_gtoA.push_back(a); m_gtoC.push_back(c); return m_gtoA.size() - 1; } void GaussianSet::addMOs(const vector& MOs) { m_init = false; // Some programs don't output all MOs, so we take the amount of data // and divide by the # of AO functions unsigned int columns = MOs.size() / m_numMOs; qDebug() << " add MOs: " << m_numMOs << columns; m_moMatrix.resize(m_numMOs, m_numMOs); for (unsigned int j = 0; j < columns; ++j) for (unsigned int i = 0; i < m_numMOs; ++i) m_moMatrix.coeffRef(i, j) = MOs[i + j*m_numMOs]; } void GaussianSet::addMO(double) { m_init = false; } bool GaussianSet::setDensityMatrix(const Eigen::MatrixXd &m) { m_density.resize(m.rows(), m.cols()); m_density = m; return true; } bool GaussianSet::calculateCubeMO(Cube *cube, unsigned int state) { // Set up the calculation and ideally use the new QtConcurrent code to // multithread the calculation... if (state < 1 || state > static_cast(m_moMatrix.rows())) return false; // Must be called before calculations begin initCalculation(); // Set up the points we want to calculate the density at m_gaussianShells = new QVector(cube->data()->size()); for (int i = 0; i < m_gaussianShells->size(); ++i) { (*m_gaussianShells)[i].set = this; (*m_gaussianShells)[i].tCube = cube; (*m_gaussianShells)[i].pos = i; (*m_gaussianShells)[i].state = state; } // Lock the cube until we are done. cube->lock()->lockForWrite(); // Watch for the future connect(&m_watcher, SIGNAL(finished()), this, SLOT(calculationComplete())); // The main part of the mapped reduced function... m_future = QtConcurrent::map(*m_gaussianShells, GaussianSet::processPoint); // Connect our watcher to our future m_watcher.setFuture(m_future); return true; } bool GaussianSet::calculateCubeDensity(Cube *cube) { if (m_density.size() == 0) { qDebug() << "Cannot calculate density -- density matrix not set."; return false; } // FIXME Still not working, committed so others could see current state. // Must be called before calculations begin initCalculation(); // Set up the points we want to calculate the density at m_gaussianShells = new QVector(cube->data()->size()); for (int i = 0; i < m_gaussianShells->size(); ++i) { (*m_gaussianShells)[i].set = this; (*m_gaussianShells)[i].tCube = cube; (*m_gaussianShells)[i].pos = i; } // Lock the cube until we are done. cube->lock()->lockForWrite(); // Watch for the future connect(&m_watcher, SIGNAL(finished()), this, SLOT(calculationComplete())); // The main part of the mapped reduced function... m_future = QtConcurrent::map(*m_gaussianShells, GaussianSet::processDensity); // Connect our watcher to our future m_watcher.setFuture(m_future); return true; } BasisSet * GaussianSet::clone() { GaussianSet *result = new GaussianSet(); result->m_symmetry = this->m_symmetry; result->m_atomIndices = this->m_atomIndices; result->m_moIndices = this->m_moIndices; result->m_gtoIndices = this->m_gtoIndices; result->m_cIndices = this->m_cIndices; result->m_gtoA = this->m_gtoA; result->m_gtoC = this->m_gtoC; result->m_gtoCN = this->m_gtoCN; result->m_moMatrix = this->m_moMatrix; result->m_density = this->m_density; result->m_numMOs = this->m_numMOs; result->m_numAtoms = this->m_numAtoms; result->m_init = this->m_init; // Skip tmp vars return result; } void GaussianSet::calculationComplete() { disconnect(&m_watcher, SIGNAL(finished()), this, SLOT(calculationComplete())); (*m_gaussianShells)[0].tCube->lock()->unlock(); delete m_gaussianShells; m_gaussianShells = 0; emit finished(); } inline bool GaussianSet::isSmall(double val) { if (val > -1e-20 && val < 1e-20) return true; else return false; } void GaussianSet::initCalculation() { if (m_init) return; // This currently just involves normalising all contraction coefficients m_numAtoms = m_molecule.numAtoms(); m_gtoCN.clear(); // Initialise the new data structures that are hopefully more efficient unsigned int indexMO = 0; unsigned int skip = 0; // for unimplemented shells m_moIndices.resize(m_symmetry.size()); // Add a final entry to the gtoIndices m_gtoIndices.push_back(m_gtoA.size()); for(unsigned int i = 0; i < m_symmetry.size(); ++i) { switch (m_symmetry[i]) { case S: m_moIndices[i] = indexMO++; m_cIndices.push_back(m_gtoCN.size()); // Normalization of the S-type orbitals (normalization used in JMol) // (8 * alpha^3 / pi^3)^0.25 * exp(-alpha * r^2) for(unsigned j = m_gtoIndices[i]; j < m_gtoIndices[i+1]; ++j) { m_gtoCN.push_back(m_gtoC[j] * pow(m_gtoA[j], 0.75) * 0.71270547); } break; case P: m_moIndices[i] = indexMO; indexMO += 3; m_cIndices.push_back(m_gtoCN.size()); // Normalization of the P-type orbitals (normalization used in JMol) // (128 alpha^5 / pi^3)^0.25 * [x|y|z]exp(-alpha * r^2) for(unsigned j = m_gtoIndices[i]; j < m_gtoIndices[i+1]; ++j) { m_gtoCN.push_back(m_gtoC[j] * pow(m_gtoA[j], 1.25) * 1.425410941); m_gtoCN.push_back(m_gtoCN.back()); m_gtoCN.push_back(m_gtoCN.back()); } break; case D: // Cartesian - 6 d components // Order in xx, yy, zz, xy, xz, yz m_moIndices[i] = indexMO; indexMO += 6; m_cIndices.push_back(m_gtoCN.size()); // Normalization of the P-type orbitals (normalization used in JMol) // xx|yy|zz: (2048 alpha^7/9pi^3)^0.25 [xx|yy|zz]exp(-alpha r^2) // xy|xz|yz: (2048 alpha^7/pi^3)^0.25 [xy|xz|yz]exp(-alpha r^2) for(unsigned j = m_gtoIndices[i]; j < m_gtoIndices[i+1]; ++j) { m_gtoCN.push_back(m_gtoC[j] * pow(m_gtoA[j], 1.75) * 1.645922781); m_gtoCN.push_back(m_gtoCN.back()); m_gtoCN.push_back(m_gtoCN.back()); m_gtoCN.push_back(m_gtoC[j] * pow(m_gtoA[j], 1.75) * 2.850821881); m_gtoCN.push_back(m_gtoCN.back()); m_gtoCN.push_back(m_gtoCN.back()); } break; case D5: // Spherical - 5 d components // Order in d0, d+1, d-1, d+2, d-2 // Form d(z^2-r^2), dxz, dyz, d(x^2-y^2), dxy m_moIndices[i] = indexMO; indexMO += 5; m_cIndices.push_back(m_gtoCN.size()); for(unsigned j = m_gtoIndices[i]; j < m_gtoIndices[i+1]; ++j) { m_gtoCN.push_back(m_gtoC[j] * pow(2048 * pow(m_gtoA[j], 7.0) / (9.0 * M_PI*M_PI*M_PI), 0.25)); m_gtoCN.push_back(m_gtoC[j] * pow(2048 * pow(m_gtoA[j], 7.0) / (M_PI*M_PI*M_PI), 0.25)); m_gtoCN.push_back(m_gtoCN.back()); // I think this is correct but reaally need to check... m_gtoCN.push_back(m_gtoC[j] * pow(128 * pow(m_gtoA[j], 7.0) / (M_PI*M_PI*M_PI), 0.25)); m_gtoCN.push_back(m_gtoC[j] * pow(2048 * pow(m_gtoA[j], 7.0) / (M_PI*M_PI*M_PI), 0.25)); } break; case F: skip = 10; case F7: skip = 7; case G: skip = 15; case G9: skip = 9; case H: skip = 21; case H11: skip = 11; case I: skip = 28; case I13: skip = 13; m_moIndices[i] = indexMO; indexMO += skip; m_cIndices.push_back(m_gtoCN.size()); qDebug() << "Basis set not handled - results may be incorrect."; break; default: qDebug() << "Basis set not handled - results may be incorrect."; } } m_init = true; } /// This is the stuff we actually use right now - porting to new data structure void GaussianSet::processPoint(GaussianShell &shell) { GaussianSet *set = shell.set; unsigned int atomsSize = set->m_numAtoms; unsigned int basisSize = set->m_symmetry.size(); std::vector &basis = set->m_symmetry; vector deltas; vector dr2; deltas.reserve(atomsSize); dr2.reserve(atomsSize); unsigned int indexMO = shell.state-1; // Calculate our position Vector3d pos = shell.tCube->position(shell.pos) * ANGSTROM_TO_BOHR; // Calculate the deltas for the position for (unsigned int i = 0; i < atomsSize; ++i) { deltas.push_back(pos - set->m_molecule.atomPos(i)); dr2.push_back(deltas[i].squaredNorm()); } // Now calculate the value at this point in space double tmp = 0.0; for (unsigned int i = 0; i < basisSize; ++i) { switch(basis[i]) { case S: tmp += pointS(shell.set, i, dr2[set->m_atomIndices[i]], indexMO); break; case P: tmp += pointP(shell.set, i, deltas[set->m_atomIndices[i]], dr2[set->m_atomIndices[i]], indexMO); break; case D: tmp += pointD(shell.set, i, deltas[set->m_atomIndices[i]], dr2[set->m_atomIndices[i]], indexMO); break; case D5: tmp += pointD5(shell.set, i, deltas[set->m_atomIndices[i]], dr2[set->m_atomIndices[i]], indexMO); break; default: // Not handled - return a zero contribution ; } } // Set the value shell.tCube->setValue(shell.pos, tmp); } void GaussianSet::processDensity(GaussianShell &shell) { GaussianSet *set = shell.set; unsigned int atomsSize = set->m_numAtoms; unsigned int basisSize = set->m_symmetry.size(); unsigned int matrixSize = set->m_density.rows(); std::vector &basis = set->m_symmetry; vector deltas; vector dr2; deltas.reserve(atomsSize); dr2.reserve(atomsSize); // Calculate our position Vector3d pos = shell.tCube->position(shell.pos) * ANGSTROM_TO_BOHR; // Calculate the deltas for the position for (unsigned int i = 0; i < atomsSize; ++i) { deltas.push_back(pos - set->m_molecule.atomPos(i)); dr2.push_back(deltas[i].squaredNorm()); } // Calculate the basis set values at this point MatrixXd values(matrixSize, 1); for (unsigned int i = 0; i < basisSize; ++i) { unsigned int cAtom = set->m_atomIndices[i]; switch(basis[i]) { case S: pointS(shell.set, dr2[cAtom], i, values); break; case P: pointP(shell.set, deltas[cAtom], dr2[cAtom], i, values); break; case D: pointD(shell.set, deltas[cAtom], dr2[cAtom], i, values); break; case D5: pointD5(shell.set, deltas[cAtom], dr2[cAtom], i, values); break; default: // Not handled - return a zero contribution ; } } // Now calculate the value of the density at this point in space double rho = 0.0; for (unsigned int i = 0; i < matrixSize; ++i) { // Calculate the off-diagonal parts of the matrix for (unsigned int j = 0; j < i; ++j) { rho += 2.0 * set->m_density.coeffRef(i, j) * (values.coeffRef(i, 0) * values.coeffRef(j, 0)); } // Now calculate the matrix diagonal rho += set->m_density.coeffRef(i, i) * (values.coeffRef(i, 0) * values.coeffRef(i, 0)); } // Set the value shell.tCube->setValue(shell.pos, rho); } inline double GaussianSet::pointS(GaussianSet *set, unsigned int moIndex, double dr2, unsigned int indexMO) { // If the MO coefficient is very small skip it if (isSmall(set->m_moMatrix.coeffRef(set->m_moIndices[moIndex], indexMO))) { return 0.0; } // S type orbitals - the simplest of the calculations with one component double tmp = 0.0; unsigned int cIndex = set->m_cIndices[moIndex]; for (unsigned int i = set->m_gtoIndices[moIndex]; i < set->m_gtoIndices[moIndex+1]; ++i) { tmp += set->m_gtoCN[cIndex++] * exp(-set->m_gtoA[i] * dr2); } // There is one MO coefficient per S shell basis return tmp * set->m_moMatrix.coeffRef(set->m_moIndices[moIndex], indexMO); } inline double GaussianSet::pointP(GaussianSet *set, unsigned int moIndex, const Vector3d &delta, double dr2, unsigned int indexMO) { // P type orbitals have three components and each component has a different // independent MO weighting. Many things can be cached to save time though unsigned int baseIndex = set->m_moIndices[moIndex]; double x = 0.0, y = 0.0, z = 0.0; // Now iterate through the P type GTOs and sum their contributions unsigned int cIndex = set->m_cIndices[moIndex]; for (unsigned int i = set->m_gtoIndices[moIndex]; i < set->m_gtoIndices[moIndex+1]; ++i) { double tmpGTO = exp(-set->m_gtoA[i] * dr2); x += set->m_gtoCN[cIndex++] * delta.x() * tmpGTO; y += set->m_gtoCN[cIndex++] * delta.y() * tmpGTO; z += set->m_gtoCN[cIndex++] * delta.z() * tmpGTO; } // Calculate the prefactors for Px, Py and Pz double Px = set->m_moMatrix.coeffRef(baseIndex , indexMO); double Py = set->m_moMatrix.coeffRef(baseIndex+1, indexMO); double Pz = set->m_moMatrix.coeffRef(baseIndex+2, indexMO); return Px*x + Py*y + Pz*z; } inline double GaussianSet::pointD(GaussianSet *set, unsigned int moIndex, const Vector3d &delta, double dr2, unsigned int indexMO) { // D type orbitals have six components and each component has a different // independent MO weighting. Many things can be cached to save time though unsigned int baseIndex = set->m_moIndices[moIndex]; double xx = 0.0, yy = 0.0, zz = 0.0, xy = 0.0, xz = 0.0, yz = 0.0; // Now iterate through the D type GTOs and sum their contributions unsigned int cIndex = set->m_cIndices[moIndex]; for (unsigned int i = set->m_gtoIndices[moIndex]; i < set->m_gtoIndices[moIndex+1]; ++i) { // Calculate the common factor double tmpGTO = exp(-set->m_gtoA[i] * dr2); xx += set->m_gtoCN[cIndex++] * tmpGTO; // Dxx yy += set->m_gtoCN[cIndex++] * tmpGTO; // Dyy zz += set->m_gtoCN[cIndex++] * tmpGTO; // Dzz xy += set->m_gtoCN[cIndex++] * tmpGTO; // Dxy xz += set->m_gtoCN[cIndex++] * tmpGTO; // Dxz yz += set->m_gtoCN[cIndex++] * tmpGTO; // Dyz } // Calculate the prefactors double Dxx = set->m_moMatrix.coeffRef(baseIndex , indexMO) * delta.x() * delta.x(); double Dyy = set->m_moMatrix.coeffRef(baseIndex+1, indexMO) * delta.y() * delta.y(); double Dzz = set->m_moMatrix.coeffRef(baseIndex+2, indexMO) * delta.z() * delta.z(); double Dxy = set->m_moMatrix.coeffRef(baseIndex+3, indexMO) * delta.x() * delta.y(); double Dxz = set->m_moMatrix.coeffRef(baseIndex+4, indexMO) * delta.x() * delta.z(); double Dyz = set->m_moMatrix.coeffRef(baseIndex+5, indexMO) * delta.y() * delta.z(); return Dxx*xx + Dyy*yy + Dzz*zz + Dxy*xy + Dxz*xz + Dyz*yz; } inline double GaussianSet::pointD5(GaussianSet *set, unsigned int moIndex, const Vector3d &delta, double dr2, unsigned int indexMO) { // D type orbitals have five components and each component has a different // MO weighting. Many things can be cached to save time unsigned int baseIndex = set->m_moIndices[moIndex]; double d0 = 0.0, d1p = 0.0, d1n = 0.0, d2p = 0.0, d2n = 0.0; // Now iterate through the D type GTOs and sum their contributions unsigned int cIndex = set->m_cIndices[moIndex]; for (unsigned int i = set->m_gtoIndices[moIndex]; i < set->m_gtoIndices[moIndex+1]; ++i) { // Calculate the common factor double tmpGTO = exp(-set->m_gtoA[i] * dr2); d0 += set->m_gtoCN[cIndex++] * tmpGTO; d1p += set->m_gtoCN[cIndex++] * tmpGTO; d1n += set->m_gtoCN[cIndex++] * tmpGTO; d2p += set->m_gtoCN[cIndex++] * tmpGTO; d2n += set->m_gtoCN[cIndex++] * tmpGTO; } // Calculate the prefactors double xx = delta.x() * delta.x(); double yy = delta.y() * delta.y(); double zz = delta.z() * delta.z(); double xy = delta.x() * delta.y(); double xz = delta.x() * delta.z(); double yz = delta.y() * delta.z(); double D0 = set->m_moMatrix.coeffRef(baseIndex , indexMO) * (zz - dr2); double D1p = set->m_moMatrix.coeffRef(baseIndex+1, indexMO) * xz; double D1n = set->m_moMatrix.coeffRef(baseIndex+2, indexMO) * yz; double D2p = set->m_moMatrix.coeffRef(baseIndex+3, indexMO) * (xx - yy); double D2n = set->m_moMatrix.coeffRef(baseIndex+4, indexMO) * xy; return D0*d0 + D1p*d1p + D1n*d1n + D2p*d2p + D2n*d2n; } inline void GaussianSet::pointS(GaussianSet *set, double dr2, int basis, Eigen::MatrixXd &out) { // S type orbitals - the simplest of the calculations with one component double tmp = 0.0; unsigned int cIndex = set->m_cIndices[basis]; for (unsigned int i = set->m_gtoIndices[basis]; i < set->m_gtoIndices[basis+1]; ++i) { tmp += set->m_gtoCN[cIndex++] * exp(-set->m_gtoA[i] * dr2); } out.coeffRef(set->m_moIndices[basis], 0) = tmp; } inline void GaussianSet::pointP(GaussianSet *set, const Vector3d &delta, double dr2, int basis, Eigen::MatrixXd &out) { double x = 0.0, y = 0.0, z = 0.0; // Now iterate through the P type GTOs and sum their contributions unsigned int cIndex = set->m_cIndices[basis]; for (unsigned int i = set->m_gtoIndices[basis]; i < set->m_gtoIndices[basis+1]; ++i) { double tmpGTO = exp(-set->m_gtoA[i] * dr2); x += set->m_gtoCN[cIndex++] * tmpGTO; y += set->m_gtoCN[cIndex++] * tmpGTO; z += set->m_gtoCN[cIndex++] * tmpGTO; } // Save values to the matrix int baseIndex = set->m_moIndices[basis]; out.coeffRef(baseIndex , 0) = x * delta.x(); out.coeffRef(baseIndex+1, 0) = y * delta.y(); out.coeffRef(baseIndex+2, 0) = z * delta.z(); } inline void GaussianSet::pointD(GaussianSet *set, const Eigen::Vector3d &delta, double dr2, int basis, Eigen::MatrixXd &out) { // D type orbitals have six components and each component has a different // independent MO weighting. Many things can be cached to save time though double xx = 0.0, yy = 0.0, zz = 0.0, xy = 0.0, xz = 0.0, yz = 0.0; // Now iterate through the D type GTOs and sum their contributions unsigned int cIndex = set->m_cIndices[basis]; for (unsigned int i = set->m_gtoIndices[basis]; i < set->m_gtoIndices[basis+1]; ++i) { // Calculate the common factor double tmpGTO = exp(-set->m_gtoA[i] * dr2); xx += set->m_gtoCN[cIndex++] * tmpGTO; // Dxx yy += set->m_gtoCN[cIndex++] * tmpGTO; // Dyy zz += set->m_gtoCN[cIndex++] * tmpGTO; // Dzz xy += set->m_gtoCN[cIndex++] * tmpGTO; // Dxy xz += set->m_gtoCN[cIndex++] * tmpGTO; // Dxz yz += set->m_gtoCN[cIndex++] * tmpGTO; // Dyz } // Save values to the matrix int baseIndex = set->m_moIndices[basis]; out.coeffRef(baseIndex , 0) = delta.x() * delta.x() * xx; out.coeffRef(baseIndex+1, 0) = delta.y() * delta.y() * yy; out.coeffRef(baseIndex+2, 0) = delta.z() * delta.z() * zz; out.coeffRef(baseIndex+3, 0) = delta.x() * delta.y() * xy; out.coeffRef(baseIndex+4, 0) = delta.x() * delta.z() * xz; out.coeffRef(baseIndex+5, 0) = delta.y() * delta.z() * yz; } inline void GaussianSet::pointD5(GaussianSet *set, const Eigen::Vector3d &delta, double dr2, int basis, Eigen::MatrixXd &out) { // D type orbitals have six components and each component has a different // independent MO weighting. Many things can be cached to save time though double d0 = 0.0, d1p = 0.0, d1n = 0.0, d2p = 0.0, d2n = 0.0; // Now iterate through the D type GTOs and sum their contributions unsigned int cIndex = set->m_cIndices[basis]; for (unsigned int i = set->m_gtoIndices[basis]; i < set->m_gtoIndices[basis+1]; ++i) { // Calculate the common factor double tmpGTO = exp(-set->m_gtoA[i] * dr2); d0 += set->m_gtoCN[cIndex++] * tmpGTO; d1p += set->m_gtoCN[cIndex++] * tmpGTO; d1n += set->m_gtoCN[cIndex++] * tmpGTO; d2p += set->m_gtoCN[cIndex++] * tmpGTO; d2n += set->m_gtoCN[cIndex++] * tmpGTO; } // Calculate the prefactors double xx = delta.x() * delta.x(); double yy = delta.y() * delta.y(); double zz = delta.z() * delta.z(); double xy = delta.x() * delta.y(); double xz = delta.x() * delta.z(); double yz = delta.y() * delta.z(); // Save values to the matrix int baseIndex = set->m_moIndices[basis]; out.coeffRef(baseIndex , 0) = (zz - dr2) * d0; out.coeffRef(baseIndex+1, 0) = xz * d1p; out.coeffRef(baseIndex+2, 0) = yz * d1n; out.coeffRef(baseIndex+3, 0) = (xx - yy) * d2p; out.coeffRef(baseIndex+4, 0) = xy * d2n; } unsigned int GaussianSet::numMOs() { // Return the total number of MOs return m_moMatrix.rows(); } void GaussianSet::outputAll() { // Can be called to print out a summary of the basis set as read in qDebug() << "\nGaussian Basis Set\nNumber of atoms:" << m_numAtoms; initCalculation(); if (!isValid()) { qDebug() << "Basis set is marked as invalid."; return; } for (uint i = 0; i < m_symmetry.size(); ++i) { qDebug() << i << "\tAtom Index:" << m_atomIndices[i] << "\tSymmetry:" << m_symmetry[i] << "\tMO Index:" << m_moIndices[i] << "\tGTO Index:" << m_gtoIndices[i]; } qDebug() << "Symmetry:" << m_symmetry.size() << "\tgtoIndices:" << m_gtoIndices.size() << "\tLast gtoIndex:" << m_gtoIndices[m_symmetry.size()] << "\ngto size:" << m_gtoA.size() << m_gtoC.size() << m_gtoCN.size(); for (uint i = 0; i < m_symmetry.size(); ++i) { switch(m_symmetry[i]) { case S: qDebug() << "Shell" << i << "\tS\n MO 1\t" << m_moMatrix(0, m_moIndices[i]) << m_moMatrix(m_moIndices[i], 0); break; case P: qDebug() << "Shell" << i << "\tP\n MO 1\t" << m_moMatrix(0, m_moIndices[i]) << "\t" << m_moMatrix(0, m_moIndices[i] + 1) << "\t" << m_moMatrix(0, m_moIndices[i] + 2); break; case D: qDebug() << "Shell" << i << "\tD\n MO 1\t" << m_moMatrix(0, m_moIndices[i]) << "\t" << m_moMatrix(0, m_moIndices[i] + 1) << "\t" << m_moMatrix(0, m_moIndices[i] + 2) << "\t" << m_moMatrix(0, m_moIndices[i] + 3) << "\t" << m_moMatrix(0, m_moIndices[i] + 4) << "\t" << m_moMatrix(0, m_moIndices[i] + 5); break; case D5: qDebug() << "Shell" << i << "\tD5\n MO 1\t" << m_moMatrix(0, m_moIndices[i]) << "\t" << m_moMatrix(0, m_moIndices[i] + 1) << "\t" << m_moMatrix(0, m_moIndices[i] + 2) << "\t" << m_moMatrix(0, m_moIndices[i] + 3) << "\t" << m_moMatrix(0, m_moIndices[i] + 4); break; case F: std::cout << "Shell " << i << "\tF\n MO 1"; for (short j = 0; j < 10; ++j) std::cout << "\t" << m_moMatrix(0, m_moIndices[i] + j); std::cout << std::endl; break; case F7: std::cout << "Shell " << i << "\tF7\n MO 1"; for (short j = 0; j < 7; ++j) std::cout << "\t" << m_moMatrix(0, m_moIndices[i] + j); std::cout << std::endl; break; default: qDebug() << "Error: unhandled type..."; } unsigned int cIndex = m_gtoIndices[i]; for (uint j = m_gtoIndices[i]; j < m_gtoIndices[i+1]; ++j) { if (j >= m_gtoA.size()) { qDebug() << "Error, j is too large!" << j << m_gtoA.size(); continue; } qDebug() << cIndex << "\tc:" << m_gtoC[cIndex] << "\ta:" << m_gtoA[cIndex]; ++cIndex; } } qDebug() << "\nEnd of orbital data...\n"; } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/gaussianset.h0000644000175000001440000001620312250371054026135 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell Copyright 2008 Albert De Fusco This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef GAUSSIANSET_H #define GAUSSIANSET_H #include "basisset.h" #include #include #include namespace OpenQube { struct GaussianShell; /** * Enumeration of the Gaussian type orbitals. */ enum orbital { S, SP, P, D, D5, F, F7, G, G9, H, H11, I, I13, UU }; /** * @class GaussianSet gaussianset.h * @brief GaussianSet Class * @author Marcus D. Hanwell * * The GaussianSet class has a transparent data structure for storing the basis * sets output by many quantum mechanical codes. It has a certain hierarchy * where shells are built up from n primitives, in this case Gaussian Type * Orbitals (GTOs). Each shell has a type (S, P, D, F, etc) and is composed of * one or more GTOs. Each GTO has a contraction coefficient, c, and an exponent, * a. * * When calculating Molecular Orbitals (MOs) each orthogonal shell has an * independent coefficient. That is the S type orbitals have one coefficient, * the P type orbitals have three coefficients (Px, Py and Pz), the D type * orbitals have five (or six if cartesian types) coefficients, and so on. */ class OPENQUBE_EXPORT GaussianSet : public BasisSet { Q_OBJECT public: /** * Constructor. */ GaussianSet(); /** * Destructor. */ ~GaussianSet(); /** * Function to add an atom to the GaussianSet. * @param pos Position of the center of the QAtom. * @param num The atomic number of the QAtom. * @return The index of the added atom. */ unsigned int addAtom(const Eigen::Vector3d& pos, int num = 0); /** * Add a basis to the basis set. * @param atom Index of the atom to add the Basis too. * @param type The type of the Basis being added. * @return The index of the added Basis. */ unsigned int addBasis(unsigned int atom, orbital type); /** * Add a GTO to the supplied basis. * @param basis The index of the Basis to add the GTO to. * @param c The contraction coefficient of the GTO. * @param a The exponent of the GTO. * @return The index of the added GTO. */ unsigned int addGTO(unsigned int basis, double c, double a); /** * Add MO coefficients to the GaussianSet. * @param MOs Vector containing the MO coefficients for the GaussianSet. */ void addMOs(const std::vector& MOs); /** * Add an individual MO coefficient. * @param MO The MO coefficient. */ void addMO(double MO); /** * Set the SCF density matrix for the GaussianSet. */ bool setDensityMatrix(const Eigen::MatrixXd &m); /** * Debug routine, outputs all of the data in the GaussianSet. */ void outputAll(); /** * @return The number of MOs in the GaussianSet. */ unsigned int numMOs(); /** * Calculate the MO over the entire range of the supplied Cube. * @param cube The cube to write the values of the MO into. * @note This function starts a threaded calculation. Use watcher() * to monitor progress. * @sa BasisSet::blockingCalculateCubeMO * @return True if the calculation was successful. */ bool calculateCubeMO(Cube *cube, unsigned int state = 1); /** * Calculate the electron density over the entire range of the supplied Cube. * @param cube The cube to write the values of the MO into. * @note This function starts a threaded calculation. Use watcher() * to monitor progress. * @sa blockingCalculateCubeDensity * @return True if the calculation was successful. */ bool calculateCubeDensity(Cube *cube); /** * When performing a calculation the QFutureWatcher is useful if you want * to update a progress bar. */ QFutureWatcher & watcher() { return m_watcher; } /** * Create a deep copy of @a this and return a pointer to it. */ virtual BasisSet * clone(); signals: /** * Emitted when the calculation is complete. */ void finished(); private slots: /** * Slot to set the cube data once Qt Concurrent is done */ void calculationComplete(); private: // New storage of the data std::vector m_symmetry; //! Symmetry of the basis, S, P... std::vector m_atomIndices; //! Indices into the atomPos vector std::vector m_moIndices; //! Indices into the MO/density matrix std::vector m_gtoIndices; //! Indices into the GTO vector std::vector m_cIndices; //! Indices into m_gtoCN std::vector m_gtoA; //! The GTO exponent std::vector m_gtoC; //! The GTO contraction coefficient std::vector m_gtoCN; //! The GTO contraction coefficient (normalized) Eigen::MatrixXd m_moMatrix; //! MO coefficient matrix Eigen::MatrixXd m_density; //! Density matrix unsigned int m_numMOs; //! The number of GTOs unsigned int m_numAtoms; //! Total number of atoms in the basis set bool m_init; //! Has the calculation been initialised? QFuture m_future; QFutureWatcher m_watcher; Cube *m_cube; //! Cube to put the results into QVector *m_gaussianShells; static bool isSmall(double val); void initCalculation(); //! Perform initialisation before any calculations /// Re-entrant single point forms of the calculations static void processPoint(GaussianShell &shell); static void processDensity(GaussianShell &shell); static double pointS(GaussianSet *set, unsigned int moIndex, double dr2, unsigned int indexMO); static double pointP(GaussianSet *set, unsigned int moIndex, const Eigen::Vector3d &delta, double dr2, unsigned int indexMO); static double pointD(GaussianSet *set, unsigned int moIndex, const Eigen::Vector3d &delta, double dr2, unsigned int indexMO); static double pointD5(GaussianSet *set, unsigned int moIndex, const Eigen::Vector3d &delta, double dr2, unsigned int indexMO); /// Calculate the basis for the density static void pointS(GaussianSet *set, double dr2, int basis, Eigen::MatrixXd &out); static void pointP(GaussianSet *set, const Eigen::Vector3d &delta, double dr2, int basis, Eigen::MatrixXd &out); static void pointD(GaussianSet *set, const Eigen::Vector3d &delta, double dr2, int basis, Eigen::MatrixXd &out); static void pointD5(GaussianSet *set, const Eigen::Vector3d &delta, double dr2, int basis, Eigen::MatrixXd &out); }; } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/gamessukout.h0000644000175000001440000000676612250371054026173 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef GAMESSUKOUT_H #define GAMESSUKOUT_H #include "gaussianset.h" #include #include #include #define BUFF_SIZE 32768 class QString; namespace OpenQube { /** * This class is used to hold the data parsed from the GAMESS-UK output * before we create the Avogadro basis set object */ class OPENQUBE_EXPORT GUKBasisSet { public: GUKBasisSet() {}; ~GUKBasisSet() {}; void outputCoord(); void outputBasis(); /** * Return true if we have already processed an atom of this label type */ bool labelIndex( std::string label ); /** * Return the enum from basis.h for the supplied label as a string * basisset.h: enum orbital { S, SP, P, D, D5, F, F7, UU }; */ orbital shellTypeFromString(std::string label); std::vector atomLabels; // ordered list of atom labels mapping to coordinates std::vector coordinates; // Coordinates in Bohr std::vector shellLabels; // list of atom labels for the basis functions std::vector< std::vector< orbital > > shells; // vector of shell types for each atom (use basisset.h orbital enum here) std::vector< std::vector< unsigned int > > gtoIndicies; // Vector of vector of index of where the GTO for a particular shell ends std::vector gtoExponents; // list of exponents std::vector gtoCoefficients; // list of contraction coefficients // Need to look at what to do about uhf calculations std::vector moEnergies; // list of the energies of the MOs std::vector< std::vector > moVectors; // list of list of MO vectors in order of moEnergies // These are read in after the basis is printed and used by readMOVectors - // could use to check the basis has been parsed correctly too int nShell; int nBasisFunctions; int nElectrons; }; class OPENQUBE_EXPORT GamessukOut { public: GamessukOut(const QString &filename, GaussianSet *basis); ~GamessukOut(); void GamessukOutNoQt(const std::string &filename, GaussianSet *basis); void outputParsedData(); private: bool parseFile(std::ifstream &ifs); void readInitialCoordinates(std::ifstream &ifs); void readBasisSet(std::ifstream &ifs); inline void addSpBasis(std::vector s_coeff, std::vector p_coeff, std::vector sp_exponents); void readOptimisedCoordinates(std::ifstream &ifs); void readMOs(std::ifstream &ifs); int readMOVectors(std::ifstream &ifs); void load(GaussianSet* basis); void addBasisForLabel(unsigned int atomIndex, std::string label, GaussianSet* basis ); // This holds the basis data parsed in from the file and which is used to // create the BasisSet GUKBasisSet gukBasis; // For parsing the file char buffer[BUFF_SIZE]; std::string line; std::vector tokens; }; } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp0000644000175000001440000005717612250371054026527 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2010 Jens Thomas This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "gamessukout.h" using Eigen::Vector3d; using std::vector; #include namespace OpenQube { // Below 2 functions stolen from OpenBabel //! Break a string (supplied as the second argument) into tokens, returned //! in the first argument. Tokens are determined by the delimiters supplied //! (defaults to whitespace (i.e., spaces, tabs, newlines) bool tokenize(std::vector &vcr, const char *buf, const char *delimstr) { vcr.clear(); if (!buf || !delimstr) return false; std::string s(buf); s += "\n"; size_t startpos=0,endpos=0; for (;;) { startpos = s.find_first_not_of(delimstr,startpos); endpos = s.find_first_of(delimstr,startpos); if (endpos <= s.size() && startpos <= s.size()) vcr.push_back(s.substr(startpos,endpos-startpos)); else break; startpos = endpos+1; } return(true); } //! Removes white space from front and back of string std::string& Trim(std::string& txt) { std::string::size_type pos = txt.find_last_not_of(" \t\n\r"); if(pos!=std::string::npos) txt.erase(pos+1); else txt.erase(); pos = txt.find_first_not_of(" \t\n\r"); if(pos!=std::string::npos) txt.erase(0, pos); else txt.erase(); return txt; } /** * This purloined from: http://www.codeguru.com/forum/showthread.php?t=231054 */ template bool from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&)) { std::istringstream iss(s); return !(iss >> f >> t).fail(); } void GUKBasisSet::outputCoord() { std::cout << "Coordinates:\n"; for ( unsigned int i=0; i 1 ) { // Remove the shell number label = label.substr(1, std::string::npos); } // Check for sp if (label.size() == 2 ) { if ( label.compare(0, 2, "sp") == 0 ) return SP; } if ( label.size() == 1 ) { if ( label == "l" ) return SP; if ( label == "s" ) return S; if ( label == "p" ) return P; if ( label == "d" ) return D; } // end label of length 1 // if we get here, it's all gone wrong... std::cerr << "ERROR: shellTypeFromString with label: " << label << std::endl; return UU; } GamessukOut::GamessukOut(const QString &qtfilename, GaussianSet* basis) { std::string filename; filename = qtfilename.toStdString(); GamessukOutNoQt( filename, basis); } //end GamessukOut GamessukOut::~GamessukOut() { } // end ~GamessukOut void GamessukOut::GamessukOutNoQt(const std::string &filename, GaussianSet* basis) { bool ok; std::ifstream ifs; ifs.open( filename.c_str() ); if (!ifs){ std::cerr << "Cannot open: " << filename << "\n"; return; } // Initialise the basis set object that holds the parsed data before we convert // it into Avogadro form gukBasis = GUKBasisSet(); // Now read the file ok = parseFile(ifs); ifs.close(); if (ok) { //outputParsedData(); // Create the Avogadro basis set object load(basis); } else std::cerr << "ERROR READING ORBITALS FROM FILE: " << filename << std::endl; } //end GamessukOutNoQt void GamessukOut::outputParsedData() { gukBasis.outputCoord(); gukBasis.outputBasis(); } // end outputParsedData bool GamessukOut::parseFile(std::ifstream &ifs) { /** * Loop through the file, calling routines that read in the data of interest into the GUKBasisSet object * Is currently pretty rudimentary - could do with lots of error trapping to check all o.k. */ bool gotMOs=false; // used as return value - indicates if we have valid orbitals for the coordinates we've read in while (ifs.good() && ifs.getline(buffer,BUFF_SIZE)) { // First find oriented geometry - use this for single-point calculations if ( strstr(buffer," * atom atomic coordinates") != NULL ) { readInitialCoordinates(ifs); } // The basis set definition if ( strstr(buffer," atom shell type prim exponents contraction coefficients") != NULL ) { readBasisSet(ifs); } // Determine the scftype - can't do uhf yet if (strstr(buffer," * SCF TYPE") != NULL){ tokenize(tokens,buffer," \t\n"); if(tokens[3].compare(0,6,"rhf")!=0){ std::cerr << "ERROR: can currently only do rhf!\n"; return false; } } // The converged geometry if ( strstr(buffer,"optimization converged") != NULL ) { readOptimisedCoordinates(ifs); if (gotMOs) gotMOs = false; // If we read in some MOs they are now redundant } // The molecular orbitals if ( strstr(buffer," eigenvectors") != NULL || strstr(buffer," molecular orbitals") != NULL) { readMOs(ifs); gotMOs = true; } } return gotMOs; } void GamessukOut::readInitialCoordinates(std::ifstream &ifs) { //std::cout << "readInitialCoordinates\n"; // string to mark end of the coordinates char coordEnd[86]=" ****************************************************************************"; double x=0.0,y=0.0,z=0.0; // skip five lines ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE); while ( strstr(buffer, coordEnd) == NULL ) { //std::cout << "COORD line" << buffer << std::endl; //ifs.getline(buffer, BUFF_SIZE); tokenize(tokens, buffer, " \t\n"); if ( tokens.size() == 8 ) { //std::cout << "Coord line" << buffer << std::endl; gukBasis.atomLabels.push_back(tokens.at(1)); from_string(x, tokens.at(3), std::dec); from_string(y, tokens.at(4), std::dec); from_string(z, tokens.at(5), std::dec); gukBasis.coordinates.push_back( Eigen::Vector3d( x, y, z)); // Want coordinates in Bohr } ifs.getline(buffer, BUFF_SIZE); } } void GamessukOut::readBasisSet(std::ifstream &ifs) { //std::cout << "readBasisSet\n"; bool newAtom=true, gotAtom=false, firstAtom=true; std::string atomLabel; double exponent,coefficient; orbital stype; int nshell=-1; int lastNshell=-1; // the last shell number - is same as nshell when looping through a shell int lastStype=-1; // need to keep track of sp shells as we split into s & p // For separating sp-shells std::vector s_coeff; std::vector p_coeff; std::vector sp_exponents; // skip 2 lines to be just before the first atom label ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE); // now loop through the basis sets till we hit the end while ( ! ifs.eof() ) { ifs.getline(buffer, BUFF_SIZE); line=buffer; if ( line.compare(0,10," =========") == 0 ) { // End of basis - add indicies of where the coffecients and exponents of the GTOs for the last shell end gukBasis.gtoIndicies.at( gukBasis.shellLabels.size()-1 ) .push_back( gukBasis.gtoExponents.size() ); break; } // Remove blank space line=Trim(line); // skip blank lines if ( line.size() == 0 ) continue; // Separate into tokens if ( ! tokenize(tokens, line.c_str(), " \t\n") || tokens.size() == 0 ) { // If the string couldn't be tokenised, set tokens[0] to the entire string tokens.clear(); tokens.push_back( line ); } if ( tokens.size() == 1 ) { // This means a new atomLabel newAtom=true; if ( firstAtom ) firstAtom=false; else { // Check if the last shell was sp - if so add the temp sp data structures // to the main ones if (lastStype == SP ) { addSpBasis(s_coeff, p_coeff, sp_exponents); // Clear the temp data structures for separating out sp into s & p s_coeff.clear(); p_coeff.clear(); sp_exponents.clear(); lastStype=-1; } else { // Add the index for where the GTO coffecients and exponents for the previous shell start gukBasis.gtoIndicies.at( gukBasis.shellLabels.size()-1 ) .push_back( gukBasis.gtoExponents.size() ); } } // end firstAtom // Check if we've already processed an atom of this type if ( ! gukBasis.labelIndex( tokens.at(0) ) ) { //std::cout << "Processing atom label: " << tokens.at(0) << std::endl; gotAtom=false;// we'll be processing this atom gukBasis.shellLabels.push_back( tokens.at(0) ); gukBasis.shells.push_back( std::vector< orbital >() ); gukBasis.gtoIndicies.push_back( std::vector< unsigned int>() ); } else gotAtom=true; continue; } // End new atomLabel // if we're not processing an atom we can skip this line if ( gotAtom ) continue; /* Here we are reading in a line of the format: shell type prim exponents contraction coefficients 1 1s 3 5.533350 1.801737 ( 0.700713 ) or 2 2sp 4 3.664980 -0.747384 ( -0.395897 ) 1.709178 ( 0.236460 ) */ from_string(nshell, tokens.at(0), std::dec); if ( nshell != lastNshell ) { // Reading a new shell if (! newAtom ) { // Add the data for the last shell processed //First check if last shell was sp & we need to add the data we've gathered to the main structures if ( lastStype == SP ) { addSpBasis(s_coeff, p_coeff, sp_exponents); // Clear the temp data structures for separating out sp into s & p s_coeff.clear(); p_coeff.clear(); sp_exponents.clear(); } else { // Add the index for where the primitives for the last shell finish gukBasis.gtoIndicies.at( gukBasis.shellLabels.size()-1 ) .push_back( gukBasis.gtoExponents.size() ); } // end sp shell } // end newAtom // need to determine type stype = gukBasis.shellTypeFromString(tokens.at(1)); //std::cout << "Reading new shell of type " << stype << std::endl; if ( stype != SP ) { // Add shell to symmetry list and AtomToShellIndex if not sp shell as we do that separately gukBasis.shells.at( gukBasis.shellLabels.size()-1 ).push_back( stype ); } } // end new shell // Now check for coefficients - we take the second lot to match Gaussian from_string(exponent, tokens.at(3), std::dec); if ( stype == SP) { if ( tokens.size() != 12 ) std::cerr << "PROBLEM READING SP LINE!\n"; from_string(coefficient, tokens.at(6), std::dec); s_coeff.push_back(coefficient); from_string(coefficient, tokens.at(10), std::dec); p_coeff.push_back(coefficient); sp_exponents.push_back(exponent); } else { //std::cout << "Adding exponent " << exponent << std::endl; gukBasis.gtoExponents.push_back(exponent); from_string(coefficient, tokens.at(6), std::dec); gukBasis.gtoCoefficients.push_back(coefficient); } // end type == SP lastNshell = nshell; lastStype = stype; newAtom=false; } // end while // Finished reading the basis data - now just collect some data from the summary - mainly for checking ifs.getline(buffer, BUFF_SIZE); //blank // nShell ifs.getline(buffer, BUFF_SIZE); if (strstr(buffer," total number of shells")==NULL) std::cerr << "Error reading nShell!: " << line << std::endl; // reuse nshell from above as temporary variable tokenize(tokens, buffer, " \t\n"); from_string(nshell, tokens.at(4), std::dec); gukBasis.nShell=nshell; // nBasisFunctions ifs.getline(buffer, BUFF_SIZE); if (strstr(buffer," total number of basis")==NULL) std::cerr << "Error reading nBasisFunctions!: " << line << std::endl; tokenize(tokens, buffer, " \t\n"); // reuse nshell from above as temporary variable from_string(nshell, tokens.at(5), std::dec); gukBasis.nBasisFunctions=nshell; // nElectrons ifs.getline(buffer, BUFF_SIZE); if (strstr(buffer," number of electrons")==NULL) std::cerr << "Error reading nElectrons!: " << line << std::endl; tokenize(tokens, buffer, " \t\n"); // reuse nshell from above as temporary variable from_string(nshell, tokens.at(3), std::dec); gukBasis.nElectrons=nshell; } // end readBasisSet inline void GamessukOut::addSpBasis(std::vector s_coeff, std::vector p_coeff, std::vector sp_exponents) { // Convenience function for adding separated sp basis //Add s gukBasis.shells.at( gukBasis.shellLabels.size()-1 ).push_back(S); for ( unsigned int i=0; i< s_coeff.size(); i++) { gukBasis.gtoExponents.push_back(sp_exponents[i]); gukBasis.gtoCoefficients.push_back(s_coeff[i]); } gukBasis.gtoIndicies.at( gukBasis.shellLabels.size()-1 ) .push_back( gukBasis.gtoExponents.size() ); //Add p gukBasis.shells.at( gukBasis.shellLabels.size()-1 ).push_back(P); for ( unsigned int i=0; i< p_coeff.size(); i++) { gukBasis.gtoExponents.push_back(sp_exponents[i]); gukBasis.gtoCoefficients.push_back(p_coeff[i]); } gukBasis.gtoIndicies.at( gukBasis.shellLabels.size()-1 ) .push_back( gukBasis.gtoExponents.size() ); } // end addSpBasis void GamessukOut::readOptimisedCoordinates(std::ifstream &ifs) { //std::cout << "readOptimisedCoordinates\n"; double x,y,z; // Nuke the old coordinates gukBasis.atomLabels.clear(); gukBasis.coordinates.clear(); ifs.getline(buffer, BUFF_SIZE); while( ! ifs.eof() ) { // This for some optimize runtypes if ( strstr(buffer," x y z chg tag") != NULL ) { //std::cout << "start of opt coord\n"; // Skip 2 lines - should then be at the coordinates ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE); while( ! ifs.eof() ) { // End of geometry block if ( strstr(buffer, " ============================================================") != NULL) return; tokenize(tokens, buffer, " \t\n"); from_string(x, tokens.at(0), std::dec); from_string(y, tokens.at(1), std::dec); from_string(z, tokens.at(2), std::dec); gukBasis.coordinates.push_back( Eigen::Vector3d( x, y, z )); gukBasis.atomLabels.push_back(tokens.at(4)); ifs.getline(buffer, BUFF_SIZE); } // end while } else if ( strstr(buffer,"atom znuc x y z") != NULL ) { // print "start of opt coord 2" // Skip 3 lines - should then be at the coordinates ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE); while( ! ifs.eof() ) { // End of geometry block if ( strstr(buffer, "*************************") != NULL) return; tokenize(tokens, buffer, " \t\n"); gukBasis.atomLabels.push_back(tokens.at(0)); from_string(x, tokens.at(3), std::dec); from_string(y, tokens.at(4), std::dec); from_string(z, tokens.at(5), std::dec); gukBasis.coordinates.push_back( Eigen::Vector3d( x, y, z )); ifs.getline(buffer, BUFF_SIZE); } // end of while } ifs.getline(buffer, BUFF_SIZE); } // end of read loop } // end readOptimisedCoordinates void GamessukOut::readMOs(std::ifstream &ifs) { /* Read the Molecular Orbitals as printed out by util1.m subroutine prev */ int orbitalsRead,orbitalsRead1; // Nuke any old set - fix when look at alpha & beta gukBasis.moVectors.clear(); // Skip 3 lines to be just before first header ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE); orbitalsRead1=readMOVectors(ifs); orbitalsRead=orbitalsRead1; while (orbitalsRead==orbitalsRead1 || orbitalsRead!=0) orbitalsRead = readMOVectors(ifs); } //end readMos int GamessukOut::readMOVectors(std::ifstream &ifs) { /* Loop through a series of columns of printed MO vectors & return the number of orbitals read in */ unsigned int norbitals, norbitalsRead; double energy; ifs.getline(buffer, BUFF_SIZE); //std::cout << "HeaderLine " << buffer << std::endl; // Check we're not at the end if ( strstr(buffer, "end of")!=0 ) return 0; tokenize(tokens, buffer, " \t\n"); norbitals = tokens.size(); // How many orbital columns for ( unsigned int i=0; i < tokens.size() ; i++ ) { from_string(energy, tokens.at(i), std::dec); //std::cout << "adding e " << energy << std::endl; gukBasis.moEnergies.push_back(energy); } // Add the lists to hold this set of coefficients norbitalsRead=gukBasis.moVectors.size(); // How many were read in previously // Create the arrays to hold the coefficients for each orbital for ( unsigned int i=0; i < norbitals ; i++ ) gukBasis.moVectors.push_back( std::vector() ); //skip 5 lines to just before where first set of orbitals are printed ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE) && ifs.getline(buffer, BUFF_SIZE); // loop nBasisFunctions times to read in up to norbitals coefficients for (int i=0; i < gukBasis.nBasisFunctions ; i++ ) { ifs.getline( buffer, BUFF_SIZE ); //std::cout << "MO line " << buffer << std::endl; tokenize(tokens, buffer, " \t\n"); for (unsigned int j=0; j < norbitals ; j++ ) { // reuse variable energy to hold coefficient from_string(energy, tokens.at(j+4), std::dec); gukBasis.moVectors.at(norbitalsRead+j).push_back(energy); //std::cout << "Adding " << energy << " to vector " << norbitalsRead+j << std::endl; } } // skip 2 lines to where the next set of headers are printed ifs.getline(buffer, BUFF_SIZE); ifs.getline(buffer, BUFF_SIZE); // If we are printed out after an optimisation under the control of "iprint vectors", // the next line with be filled with " =================" if we've finished if ( strstr(buffer, " ===============================")!=0 ) return 0; return norbitals; } // end readMOVectors void GamessukOut::addBasisForLabel( unsigned int atomIndex, std::string label, GaussianSet* basis ) { /* Add the basis functions for the atom label */ unsigned int s; int prev; for ( unsigned int i=0; i < gukBasis.shellLabels.size(); i++) { if ( gukBasis.shellLabels.at(i) != label ) continue; for ( unsigned int j=0; j < gukBasis.shells.at(i).size(); j++ ) { s = basis->addBasis( atomIndex, gukBasis.shells.at(i).at(j) ); // The first indexes are different as they are the indexes held at the end of the last shell or // 0 for the first one if (i==0 && j==0) prev=0; else if (j==0) prev=gukBasis.gtoIndicies.at(i-1).back(); else prev=gukBasis.gtoIndicies.at(i).at(j-1); for ( unsigned int k=prev; k < gukBasis.gtoIndicies.at(i).at(j); k++ ) { basis->addGTO( s, gukBasis.gtoCoefficients.at(k), gukBasis.gtoExponents.at(k) ); } } } return; } //end addBasisForLabel void GamessukOut::load(GaussianSet* basis) { /* We will only have read in a basis set for atoms of each type Loop throught the list of all the atoms & add the basis functions for each individual atom */ basis->setNumElectrons(gukBasis.nElectrons); // Add the basis for each atom for ( unsigned int i=0; i < gukBasis.atomLabels.size(); i++ ) { basis->addAtom( gukBasis.coordinates.at(i) ); addBasisForLabel( i, gukBasis.atomLabels.at(i), basis ); } // Now to load in the MO coefficients // This currently a dirty hack - basisset addMO just expects a long vector of doubles, which // it then converts into a square matrix. // For this test, we convert our vector of vectors to a single vector and fill the remaining // virtual orbitals with zeros. std::vector< double > MOs; unsigned int moEnd, nBasis=static_cast(gukBasis.nBasisFunctions); for ( unsigned int i=0; i < nBasis ; i++ ) { if ( i >= gukBasis.moVectors.size() ) { //std::cout << "Adding blank vectors for non-printed MOs " << i << std::endl; moEnd=MOs.size()+nBasis; for ( unsigned int j=MOs.size(); jaddMOs(MOs); //basis->initCalculation(); } // end load } // End Namespace avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/atom.h0000644000175000001440000000362212250371054024550 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2011 Kitware, Inc. This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef OQ_ATOM_H #define OQ_ATOM_H #include "molecule.h" #include namespace OpenQube { class Molecule; class OPENQUBE_EXPORT Atom { public: /** Is the Atom valid? * @return True if it is a valid object, false if not. */ bool isValid() const { return m_molecule != 0; } /** Get the atomic number. */ short atomicNumber() const; /** Set the atomic number. */ void setAtomicNumber(short atomicNumber); /** Convenience function * @return True is this atom is a hydrogen atom. */ bool isHydrogen() const; /** Get the position of the specified atom. */ Eigen::Vector3d pos() const; /** Set the position of the specified atom. * @param pos The position to set it to. */ void setPos(const Eigen::Vector3d& pos); protected: friend class Molecule; /** Default contructor to create an empty atom object. * @param parent The parent molecule, atoms must belong to a molecule. * @param index The index of the atom in the parent molecule. */ Atom(Molecule *parent, size_t index); /** The index of this atom. */ size_t m_index; /** The parent molecule of this atom. */ Molecule *m_molecule; }; inline Atom::Atom(Molecule *molecule, size_t index) : m_index(index), m_molecule(molecule) { } } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/mopacaux.cpp0000644000175000001440000002205512250371054025761 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "mopacaux.h" #include "molecule.h" #include "slaterset.h" #include #include #include using std::vector; using Eigen::MatrixXd; using Eigen::Vector3d; namespace OpenQube { MopacAux::MopacAux(QString filename, SlaterSet* basis) { // Open the file for reading and process it QFile file(filename); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; qDebug() << "File" << filename << "opened."; // Process the formatted checkpoint and extract all the information we need m_in.setDevice(&file); while (!m_in.atEnd()) { processLine(); } // Now it should all be loaded load it into the basis set load(basis); } MopacAux::~MopacAux() { } void MopacAux::processLine() { // First truncate the line, remove trailing white space and check QString line = m_in.readLine(); QString key = line; key = key.trimmed(); // QStringList list = tmp.split("=", QString::SkipEmptyParts); // Big switch statement checking for various things we are interested in if (key.contains("ATOM_CORE")) { QString tmp = key.mid(key.indexOf('[')+1, 4); qDebug() << "Number of atoms =" << tmp.toInt(); m_atomNums = readArrayI(tmp.toInt()); } else if (key.contains("AO_ATOMINDEX")) { QString tmp = key.mid(key.indexOf('[')+1, 4); qDebug() << "Number of atomic orbitals =" << tmp.toInt(); m_atomIndex = readArrayI(tmp.toInt()); for (unsigned int i = 0; i < m_atomIndex.size(); ++i) { --m_atomIndex[i]; } } else if (key.contains("ATOM_SYMTYPE")) { QString tmp = key.mid(key.indexOf('[')+1, 4); qDebug() << "Number of atomic orbital types =" << tmp.toInt(); m_atomSym = readArraySym(tmp.toInt()); } else if (key.contains("AO_ZETA")) { QString tmp = key.mid(key.indexOf('[')+1, 4); qDebug() << "Number of zeta values =" << tmp.toInt(); m_zeta = readArrayD(tmp.toInt()); } else if (key.contains("ATOM_PQN")) { QString tmp = key.mid(key.indexOf('[')+1, 4); qDebug() << "Number of PQN values =" << tmp.toInt(); m_pqn = readArrayI(tmp.toInt()); } else if (key.contains("NUM_ELECTRONS")) { QString tmp = key.split('=').at(1); qDebug() << "Number of electrons =" << tmp.toInt(); m_electrons = tmp.toInt(); } else if (key.contains("ATOM_X_OPT:ANGSTROMS")) { QString tmp = key.mid(key.indexOf('[')+1, 4); qDebug() << "Number of atomic coordinates =" << tmp.toInt(); m_atomPos = readArrayVec(tmp.toInt()); } else if (key.contains("OVERLAP_MATRIX")) { QString tmp = key.mid(key.indexOf('[')+1, 6); qDebug() << "Size of lower half triangle of overlap matrix =" << tmp.toInt(); readOverlapMatrix(tmp.toInt()); } else if (key.contains("EIGENVECTORS")) { // For large molecules the Eigenvectors counter overflows to [*****] // So just use the square of the m_atomIndex array // QString tmp = key.mid(key.indexOf('[')+1, 6); qDebug() << "Size of eigen vectors matrix =" << m_atomIndex.size() * m_atomIndex.size(); readEigenVectors(m_atomIndex.size() * m_atomIndex.size()); } else if (key.contains("TOTAL_DENSITY_MATRIX")) { QString tmp = key.mid(key.indexOf('[')+1, 6); qDebug() << "Size of lower half triangle of density matrix =" << tmp.toInt(); readDensityMatrix(tmp.toInt()); } } void MopacAux::load(SlaterSet* basis) { if (m_atomPos.size() == 0) { qWarning() << "No atoms found in .aux file. Bailing out."; basis->setIsValid(false); return; } // Now load up our basis set basis->addAtoms(m_atomPos); basis->addSlaterIndices(m_atomIndex); basis->addSlaterTypes(m_atomSym); basis->addZetas(m_zeta); basis->addPQNs(m_pqn); basis->setNumElectrons(m_electrons); basis->addOverlapMatrix(m_overlap); basis->addEigenVectors(m_eigenVectors); basis->addDensityMatrix(m_density); Molecule &mol = basis->moleculeRef(); mol.clearAtoms(); if (m_atomPos.size() == m_atomNums.size()) { for (size_t i = 0; i < m_atomPos.size(); ++i) { mol.addAtom(m_atomPos[i], m_atomNums[i]); } } else { qWarning() << "Number of atomic numbers (" << m_atomNums.size() << ") does not equal the number of atomic positions (" << m_atomPos.size() << "). Not populating molecule."; basis->setIsValid(false); } } vector MopacAux::readArrayI(unsigned int n) { vector tmp; while (tmp.size() < n) { QString line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); for (int i = 0; i < list.size(); ++i) tmp.push_back(list.at(i).toInt()); } return tmp; } vector MopacAux::readArrayD(unsigned int n) { vector tmp; while (tmp.size() < n) { QString line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); for (int i = 0; i < list.size(); ++i) tmp.push_back(list.at(i).toDouble()); } return tmp; } vector MopacAux::readArraySym(unsigned int n) { int type; vector tmp; while (tmp.size() < n) { QString line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); for (int i = 0; i < list.size(); ++i) { if (list.at(i) == "S") type = SlaterSet::S; else if (list.at(i) == "PX") type = SlaterSet::PX; else if (list.at(i) == "PY") type = SlaterSet::PY; else if (list.at(i) == "PZ") type = SlaterSet::PZ; else if (list.at(i) == "X2") type = SlaterSet::X2; else if (list.at(i) == "XZ") type = SlaterSet::XZ; else if (list.at(i) == "Z2") type = SlaterSet::Z2; else if (list.at(i) == "YZ") type = SlaterSet::YZ; else if (list.at(i) == "XY") type = SlaterSet::XY; else type = SlaterSet::UU; tmp.push_back(type); } } return tmp; } vector MopacAux::readArrayVec(unsigned int n) { vector tmp(n/3); double *ptr = tmp[0].data(); unsigned int cnt = 0; while (cnt < n) { QString line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); for (int i = 0; i < list.size(); ++i) { ptr[cnt++] = list.at(i).toDouble(); } } return tmp; } bool MopacAux::readOverlapMatrix(unsigned int n) { m_overlap.resize(m_zeta.size(), m_zeta.size()); unsigned int cnt = 0; unsigned int i = 0, j = 0; unsigned int f = 1; // Skip the first commment line... m_in.readLine(); while (cnt < n) { QString line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); for (int k = 0; k < list.size(); ++k) { //m_overlap.part()(i, j) = list.at(k).toDouble(); m_overlap(i, j) = m_overlap(j, i) = list.at(k).toDouble(); ++i; ++cnt; if (i == f) { // We need to move down to the next row and increment f - lower tri i = 0; ++f; ++j; } } } return true; } bool MopacAux::readEigenVectors(unsigned int n) { m_eigenVectors.resize(m_zeta.size(), m_zeta.size()); unsigned int cnt = 0; unsigned int i = 0, j = 0; while (cnt < n) { QString line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); for (int k = 0; k < list.size(); ++k) { m_eigenVectors(i, j) = list.at(k).toDouble(); ++i; ++cnt; if (i == m_zeta.size()) { // We need to move down to the next row and increment f - lower tri i = 0; ++j; } } } return true; } bool MopacAux::readDensityMatrix(unsigned int n) { m_density.resize(m_zeta.size(), m_zeta.size()); unsigned int cnt = 0; unsigned int i = 0, j = 0; unsigned int f = 1; // Skip the first commment line... m_in.readLine(); while (cnt < n) { QString line = m_in.readLine(); QStringList list = line.split(' ', QString::SkipEmptyParts); for (int k = 0; k < list.size(); ++k) { //m_overlap.part()(i, j) = list.at(k).toDouble(); m_density(i, j) = m_density(j, i) = list.at(k).toDouble(); ++i; ++cnt; if (i == f) { // We need to move down to the next row and increment f - lower tri i = 0; ++f; ++j; } } } return true; } void MopacAux::outputAll() { qDebug() << "Shell mappings."; for (unsigned int i = 0; i < m_shellTypes.size(); ++i) qDebug() << i << ": type =" << m_shellTypes.at(i) << ", number =" << m_shellNums.at(i) << ", atom =" << m_shelltoAtom.at(i); qDebug() << "MO coefficients."; for (unsigned int i = 0; i < m_MOcoeffs.size(); ++i) qDebug() << m_MOcoeffs.at(i); } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/basissetloader.cpp0000644000175000001440000001062512250371054027150 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "basissetloader.h" #include "gaussianset.h" #include "slaterset.h" #include "gamessukout.h" #include "gaussianfchk.h" #include "mopacaux.h" #include "molden.h" #include "gamessus.h" #include "cube.h" #include #include #include namespace OpenQube { QString BasisSetLoader::MatchBasisSet(const QString& filename) { QString matchedFile; if (filename.isEmpty()) return matchedFile; QFileInfo parentInfo(filename); // Look for files with the same basename, but different extensions QDir parentDir = parentInfo.dir(); QStringList nameFilters; nameFilters << parentInfo.baseName() + ".*"; QStringList matchingFiles = parentDir.entryList(nameFilters, QDir::Readable | QDir::Files); matchingFiles.prepend(parentInfo.fileName()); // Iterate through the matches and see if we find a suitable file foreach(const QString &fileName, matchingFiles) { QString fullFileName = parentInfo.path() + '/' + fileName; QFileInfo info(fullFileName); QString completeSuffix = info.completeSuffix(); if (completeSuffix.contains("fchk", Qt::CaseInsensitive) || completeSuffix.contains("fch", Qt::CaseInsensitive) || completeSuffix.contains("fck", Qt::CaseInsensitive)) { return fullFileName; } else if (completeSuffix.contains("gamout", Qt::CaseInsensitive) || completeSuffix.contains("gamess", Qt::CaseInsensitive)) { return fullFileName; } else if (completeSuffix.contains("gukout", Qt::CaseInsensitive)) { return fullFileName; } else if (completeSuffix.contains("aux", Qt::CaseInsensitive)) { return fullFileName; } else if (completeSuffix.contains("molden", Qt::CaseInsensitive) || completeSuffix.contains("mold", Qt::CaseInsensitive) || completeSuffix.contains("molf", Qt::CaseInsensitive)) { return fullFileName; } } return matchedFile; } void BasisSetLoader::MatchBasisSet(const char* filename, char *basisName ) { QString qBasisName = BasisSetLoader::MatchBasisSet(filename); int i = 0; while (i < qBasisName.size()) { basisName[i] = qBasisName[i].toLatin1(); ++i; } basisName[i] = 0; } BasisSet * BasisSetLoader::LoadBasisSet(const QString& filename) { // Here we assume that the file name is correct, and attempt to load it. QFileInfo info(filename); QString completeSuffix = info.completeSuffix(); if (completeSuffix.contains("fchk", Qt::CaseInsensitive) || completeSuffix.contains("fch", Qt::CaseInsensitive) || completeSuffix.contains("fck", Qt::CaseInsensitive)) { GaussianSet *gaussian = new GaussianSet; GaussianFchk fchk(filename, gaussian); return gaussian; } else if (completeSuffix.contains("gamout", Qt::CaseInsensitive) || completeSuffix.contains("gamess", Qt::CaseInsensitive)) { GaussianSet *gaussian = new GaussianSet; GAMESSUSOutput gamout(filename, gaussian); return gaussian; } else if (completeSuffix.contains("gukout", Qt::CaseInsensitive)) { GaussianSet *gaussian = new GaussianSet; GamessukOut gukout(filename, gaussian); return gaussian; } else if (completeSuffix.contains("aux", Qt::CaseInsensitive)) { SlaterSet *slater = new SlaterSet; MopacAux aux(filename, slater); return slater; } else if (completeSuffix.contains("molden", Qt::CaseInsensitive) || completeSuffix.contains("mold", Qt::CaseInsensitive) || completeSuffix.contains("molf", Qt::CaseInsensitive)) { GaussianSet *gaussian = new GaussianSet; MoldenFile mold(filename, gaussian); return gaussian; } return 0; } BasisSet * BasisSetLoader::LoadBasisSet(const char *filename) { return BasisSetLoader::LoadBasisSet(QString(filename)); } } // End namespace avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/molden.cpp0000644000175000001440000001526412250371054025426 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2010 Geoffrey R. Hutchison This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "molden.h" #include #include #include using Eigen::Vector3d; using std::vector; #ifndef BOHR_TO_ANGSTROM #define BOHR_TO_ANGSTROM 0.529177249 #endif namespace OpenQube { MoldenFile::MoldenFile(const QString &filename, GaussianSet* basis): m_coordFactor(1.0), m_currentMode(NotParsing) { // Open the file for reading and process it QFile* file = new QFile(filename); file->open(QIODevice::ReadOnly | QIODevice::Text); m_in = file; qDebug() << "File" << filename << "opened."; // Process the formatted checkpoint and extract all the information we need while (!m_in->atEnd()) { processLine(); } // Now it should all be loaded load it into the basis set load(basis); delete file; } MoldenFile::~MoldenFile() { } void MoldenFile::processLine() { // First truncate the line, remove trailing white space and check for blank lines QString key = m_in->readLine().trimmed(); while(key.isEmpty() && !m_in->atEnd()) { key = m_in->readLine().trimmed(); } if (m_in->atEnd()) return; QStringList list = key.split(' ', QString::SkipEmptyParts); // Big switch statement checking for various things we are interested in // Make sure to switch mode: // enum mode { NotParsing, Atoms, GTO, STO, MO, SCF } if (key.contains("[atoms]", Qt::CaseInsensitive)) { if (list.size() > 1 && list[1].contains("au", Qt::CaseInsensitive)) m_coordFactor = BOHR_TO_ANGSTROM; m_currentMode = Atoms; } else if (key.contains("[gto]", Qt::CaseInsensitive)) { m_currentMode = GTO; } else if (key.contains("[mo]", Qt::CaseInsensitive)) { m_currentMode = MO; } else if (key.contains("[")) { // unknown section m_currentMode = NotParsing; } else { QString shell; orbital shellType; // parsing a line -- what mode are we in? switch (m_currentMode) { case Atoms: // element_name number atomic_number x y z if (list.size() < 6) return; m_aNums.push_back(list[2].toInt()); m_aPos.push_back(list[3].toDouble() * m_coordFactor); m_aPos.push_back(list[4].toDouble() * m_coordFactor); m_aPos.push_back(list[5].toDouble() * m_coordFactor); break; case GTO: { // TODO: detect dead files and make bullet-proof int atom = list[0].toInt(); key = m_in->readLine().trimmed(); while (!key.isEmpty()) { // read the shell types in this GTO list = key.split(' ', QString::SkipEmptyParts); shell = list[0].toLower(); shellType = UU; if (shell.contains("sp")) shellType = SP; else if (shell.contains("s")) shellType = S; else if (shell.contains("p")) shellType = P; else if (shell.contains("d")) shellType = D; else if (shell.contains("f")) shellType = F; if (shellType != UU) { m_shellTypes.push_back(shellType); m_shelltoAtom.push_back(atom); } else return; int numGTOs = list[1].toInt(); m_shellNums.push_back(numGTOs); // now read all the exponents and contraction coefficients for (int gto = 0; gto < numGTOs; ++gto) { key = m_in->readLine().trimmed(); list = key.split(' ', QString::SkipEmptyParts); m_a.push_back(list[0].replace('D','E').toDouble()); m_c.push_back(list[1].replace('D','E').toDouble()); if (shellType == SP && list.size() > 2) m_csp.push_back(list[2].replace('D','E').toDouble()); } // finished parsing a new GTO key = m_in->readLine().trimmed(); // start reading the next shell } } break; case MO: // parse occ, spin, energy, etc. while (!key.isEmpty() && key.contains('=')) { key = m_in->readLine().trimmed(); list = key.split(' ', QString::SkipEmptyParts); if (key.contains("occup", Qt::CaseInsensitive)) m_electrons += (int)list[1].toDouble(); } // parse MO coefficients while (!key.isEmpty() && !key.contains('=')) { list = key.split(' ', QString::SkipEmptyParts); if (list.size() < 2) break; m_MOcoeffs.push_back(list[1].replace('D','E').toDouble()); key = m_in->readLine().trimmed(); } // finished parsing a new MO break; case STO: case SCF: case NotParsing: break; } } } void MoldenFile::load(GaussianSet* basis) { // Now load up our basis set basis->setNumElectrons(m_electrons); int nAtom = 0; for (unsigned int i = 0; i < m_aPos.size(); i += 3) basis->addAtom(Vector3d(m_aPos.at(i), m_aPos.at(i+1), m_aPos.at(i+2)), m_aNums.at(nAtom++)); // Set up the GTO primitive counter, go through the shells and add them int nGTO = 0; int nSP = 0; // number of SP shells for (unsigned int i = 0; i < m_shellTypes.size(); ++i) { // Handle the SP case separately - this should possibly be a distinct type if (m_shellTypes.at(i) == SP) { // SP orbital type - currently have to unroll into two shells int s = basis->addBasis(m_shelltoAtom.at(i) - 1, S); int p = basis->addBasis(m_shelltoAtom.at(i) - 1, P); for (int j = 0; j < m_shellNums.at(i); ++j) { basis->addGTO(s, m_c.at(nGTO), m_a.at(nGTO)); basis->addGTO(p, m_csp.at(nSP), m_a.at(nGTO)); ++nSP; ++nGTO; } } else { int b = basis->addBasis(m_shelltoAtom.at(i) - 1, m_shellTypes.at(i)); for (int j = 0; j < m_shellNums.at(i); ++j) { basis->addGTO(b, m_c.at(nGTO), m_a.at(nGTO)); ++nGTO; } } } // Now to load in the MO coefficients if (m_MOcoeffs.size()) basis->addMOs(m_MOcoeffs); } void MoldenFile::outputAll() { qDebug() << "Shell mappings."; for (unsigned int i = 0; i < m_shellTypes.size(); ++i) qDebug() << i << ": type =" << m_shellTypes.at(i) << ", number =" << m_shellNums.at(i) << ", atom =" << m_shelltoAtom.at(i); qDebug() << "MO coefficients."; for (unsigned int i = 0; i < m_MOcoeffs.size(); ++i) qDebug() << m_MOcoeffs.at(i); } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/basisset.cpp0000644000175000001440000000211012250371054025747 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2011 David C. Lonie This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "basisset.h" #include "cube.h" #include namespace OpenQube { bool BasisSet::blockingCalculateCubeMO(Cube *cube, unsigned int mo) { if (!this->calculateCubeMO(cube, mo)) return false; this->watcher().waitForFinished(); return true; } bool BasisSet::blockingCalculateCubeDensity(Cube *cube) { if (!this->calculateCubeDensity(cube)) return false; this->watcher().waitForFinished(); return true; } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/CMakeLists.txt0000644000175000001440000000166412250371054026203 0ustar marcususersfind_package(Qt4 4.6 REQUIRED) find_package(Eigen2 REQUIRED) include_directories(${QT_INCLUDE_DIR} ${EIGEN2_INCLUDE_DIR}) # Headers for our public API set(openqube_HDRS atom.h basisset.h basissetloader.h cube.h gamessukout.h gamessus.h gaussianset.h molecule.h openqubeabi.h slaterset.h ) # Source files for our data. set(openqube_SRCS atom.cpp basisset.cpp basissetloader.cpp cube.cpp gamessukout.cpp gamessus.cpp gaussianfchk.cpp gaussianset.cpp molden.cpp molecule.cpp mopacaux.cpp slaterset.cpp ) qt4_wrap_cpp(openqubeMocSrcs basisset.h gaussianset.h slaterset.h) add_library(OpenQube SHARED ${openqube_SRCS} ${openqubeMocSrcs}) set_target_properties(OpenQube PROPERTIES VERSION 0.1.0 OUTPUT_NAME avogadro_OpenQube LINK_INTERFACE_LIBRARIES "" SOVERSION 0 LABELS openqube) target_link_libraries(OpenQube ${QT_QTCORE_LIBRARY}) install(TARGETS OpenQube DESTINATION ${LIB_INSTALL_DIR}) avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/mopacaux.h0000644000175000001440000000373312250371054025430 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef MOPACAUX_H #define MOPACAUX_H #include #include #include class QString; namespace OpenQube { class SlaterSet; class MopacAux { public: MopacAux(QString filename, SlaterSet *basis); ~MopacAux(); void outputAll(); private: QTextStream m_in; void processLine(); void load(SlaterSet* basis); std::vector readArrayI(unsigned int n); std::vector readArrayD(unsigned int n); std::vector readArraySym(unsigned int n); std::vector readArrayVec(unsigned int n); bool readOverlapMatrix(unsigned int n); bool readEigenVectors(unsigned int n); bool readDensityMatrix(unsigned int n); int m_electrons; std::vector m_aNums; std::vector m_aPos; std::vector m_shellTypes; std::vector m_shellNums; std::vector m_shelltoAtom; std::vector m_c; std::vector m_csp; std::vector m_orbitalEnergy; std::vector m_MOcoeffs; std::vector m_atomIndex; std::vector m_atomSym; std::vector m_atomNums; std::vector m_zeta; std::vector m_pqn; std::vector m_atomPos; Eigen::MatrixXd m_overlap; /// Overlap matrix Eigen::MatrixXd m_eigenVectors; Eigen::MatrixXd m_density; /// Total density matrix }; } // End namespace #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/atom.cpp0000644000175000001440000000240112250371054025075 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2011 Kitware, Inc. This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "atom.h" using Eigen::Vector3d; namespace OpenQube { short Atom::atomicNumber() const { return m_molecule ? m_molecule->atomAtomicNumber(m_index) : -1; } bool Atom::isHydrogen() const { return m_molecule ? m_molecule->atomAtomicNumber(m_index) == 1 : false; } void Atom::setAtomicNumber(short atomicNumber) { if (m_molecule) m_molecule->setAtomAtomicNumber(m_index, atomicNumber); } Vector3d Atom::pos() const { return m_molecule ? m_molecule->atomPos(m_index) : Vector3d::Zero(); } void Atom::setPos(const Eigen::Vector3d& pos) { if (m_molecule) m_molecule->setAtomPos(m_index, pos); } } // End namespace avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/molecule.cpp0000644000175000001440000000532712250371054025754 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2011 Kitware, Inc. This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #include "molecule.h" #include "atom.h" #include using Eigen::Vector3d; namespace OpenQube { Molecule::Molecule() : m_atomPositions(1), m_conformer(0) { } Molecule::~Molecule() { } Atom Molecule::addAtom(const Eigen::Vector3d &pos, short atomicNumber) { // Increment the vectors containing atomic properties. m_atomicNumbers.push_back(atomicNumber); for (size_t i = 0; i < m_atomPositions.size(); ++i) m_atomPositions[i].push_back(pos); return Atom(this, m_atomicNumbers.size() - 1); } const Atom Molecule::atom(size_t index) const { // The const_cast is needed to create the temporary. As we are returning // a const Atom object and Atom is const safe this should be fine. if (index < m_atomicNumbers.size()) return Atom(const_cast(this), index); else return Atom(0, 0); } Atom Molecule::atom(size_t index) { if (index < m_atomicNumbers.size()) return Atom(this, index); else return Atom(0, 0); } short Molecule::atomAtomicNumber(size_t index) const { if (index < m_atomicNumbers.size()) return m_atomicNumbers[index]; else return 0; } void Molecule::setAtomAtomicNumber(size_t index, short atomicNumber) { if (index < m_atomicNumbers.size()) m_atomicNumbers[index] = atomicNumber; } Vector3d Molecule::atomPos(size_t atomIndex) const { if (atomIndex < m_atomPositions[m_conformer].size()) return m_atomPositions[m_conformer][atomIndex]; else return Vector3d::Zero(); } void Molecule::setAtomPos(size_t atomIndex, const Eigen::Vector3d& pos) { if (atomIndex < m_atomPositions[m_conformer].size()) m_atomPositions[m_conformer][atomIndex] = pos; } void Molecule::clearAtoms() { m_atomicNumbers.clear(); m_atomPositions.resize(1); m_atomPositions[0].clear(); } void Molecule::print() const { qDebug() << "Number of atoms:" << m_atomicNumbers.size(); for (size_t i = 0; i < m_atomicNumbers.size(); ++i) { qDebug() << "Atom" << i << ":" << m_atomicNumbers[i] << "->" << m_atomPositions[0][i].x() << m_atomPositions[0][i].y() << m_atomPositions[0][i].z(); } } } // End namespace avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/gaussianfchk.h0000644000175000001440000000320612250371054026254 0ustar marcususers/****************************************************************************** This source file is part of the OpenQube project. Copyright 2008-2010 Marcus D. Hanwell This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ******************************************************************************/ #ifndef GAUSSIANFCHK_H #define GAUSSIANFCHK_H #include #include #include class QString; namespace OpenQube { class GaussianSet; class GaussianFchk { public: GaussianFchk(const QString &filename, GaussianSet *basis); ~GaussianFchk(); void outputAll(); private: QIODevice *m_in; void processLine(); void load(GaussianSet* basis); std::vector readArrayI(unsigned int n); std::vector readArrayD(unsigned int n, int width = 0); bool readDensityMatrix(unsigned int n, int width = 0); int m_electrons; unsigned int m_numBasisFunctions; std::vector m_aNums; std::vector m_aPos; std::vector m_shellTypes; std::vector m_shellNums; std::vector m_shelltoAtom; std::vector m_a; std::vector m_c; std::vector m_csp; std::vector m_orbitalEnergy; std::vector m_MOcoeffs; Eigen::MatrixXd m_density; /// Total density matrix }; } // End namespace openqube #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/openqube/openqubeabi.h0000644000175000001440000000161612250371054026103 0ustar marcususers#ifndef OPENQUBEABI_H #define OPENQUBEABI_H // If we are using a recent GCC version with visibility support use it // The Krazy checker doesn't like this, but it's a valid CMake conditional // krazy:excludeall=cpp #if __GNUC__ >= 4 #define OQ_ABI_IMPORT __attribute__ ((visibility("default"))) #define OQ_ABI_EXPORT __attribute__ ((visibility("default"))) #define OQ_ABI_HIDDEN __attribute__ ((visibility("hidden"))) #elif defined(_WIN32) || defined(__CYGWIN__) #define OQ_ABI_IMPORT __declspec(dllimport) #define OQ_ABI_EXPORT __declspec(dllexport) #define OQ_ABI_HIDDEN #else #define OQ_ABI_IMPORT #define OQ_ABI_EXPORT #define OQ_ABI_HIDDEN #endif // This macro should be used to export parts of the API #ifndef OPENQUBE_EXPORT #ifdef OpenQube_EXPORTS #define OPENQUBE_EXPORT OQ_ABI_EXPORT #else #define OPENQUBE_EXPORT OQ_ABI_IMPORT #endif #endif #endif // OPENQUBEABI_H avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitalwidget.ui0000644000175000001440000000642212250371054025021 0ustar marcususers OrbitalWidget 0 0 366 696 0 0 Form 0 0 QAbstractItemView::SingleSelection QAbstractItemView::SelectRows true true true true 0 0 Quality: Low Medium High Very High Render Qt::Horizontal 40 20 Configure avogadro-1.1.1/libavogadro/src/extensions/surfaces/surfacedialog.cpp0000644000175000001440000002774212250371054025146 0ustar marcususers/********************************************************************** SurfaceDialog - Dialog for generating cubes and meshes Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "surfacedialog.h" #include #include #include #include namespace Avogadro { SurfaceDialog::SurfaceDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f), m_glwidget(0), m_molecule(0) { ui.setupUi(this); ui.moCombo->hide(); ui.moColorCombo->hide(); // Initialize the surface and color by type mappings m_surfaceTypes << Cube::VdW << Cube::ESP; m_colorTypes << Cube::None << Cube::ESP; // Connect up some signals and slots connect(ui.calculateButton, SIGNAL(clicked()), this, SLOT(calculateClicked())); // Responses to some of the combo boxes changing connect(ui.surfaceCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(surfaceComboChanged(int))); connect(ui.colorByCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(colorByComboChanged(int))); connect(ui.resolutionCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(resolutionComboChanged(int))); } SurfaceDialog::~SurfaceDialog() { } void SurfaceDialog::setMOs(int num) { // If there are no MOs, then do nothing as there was a problem with the file if (num < 1) return; // Enable the MO combos and populate them ui.moCombo->setVisible(true); ui.moCombo->clear(); ui.moColorCombo->setVisible(true); ui.moColorCombo->clear(); // Add the orbitals to the combo boxes for (int i = 1; i <= num; ++i) { ui.moCombo->addItem(tr("MO %L1", "Molecular Orbital").arg(i)); ui.moColorCombo->addItem(tr("MO %L1", "Molecular Orbital").arg(i)); } // Now add the MO option to the surface and color combos m_surfaceTypes.clear(); m_surfaceTypes << Cube::VdW << Cube::ESP << Cube::ElectronDensity << Cube::MO; m_colorTypes.clear(); m_colorTypes << Cube::None << Cube::ESP << Cube::ElectronDensity << Cube::MO; updateCubes(); } void SurfaceDialog::setHOMO(int n) { ui.moCombo->setItemText(n, ui.moCombo->itemText(n) + ' ' + tr("(HOMO)", "Highest occupied MO")); ui.moCombo->setCurrentIndex(n); ui.moColorCombo->setItemText(n, ui.moColorCombo->itemText(n) + ' ' + tr("(HOMO)", "Highest occupied MO")); ui.moColorCombo->setCurrentIndex(n); } void SurfaceDialog::setLUMO(int n) { ui.moCombo->setItemText(n, ui.moCombo->itemText(n) + ' ' + tr("(LUMO)", "Lowest unoccupied MO")); ui.moColorCombo->setItemText(n, ui.moColorCombo->itemText(n) + ' ' + tr("(LUMO)", "Lowest unoccupied MO")); } double SurfaceDialog::stepSize() { return ui.resolutionSpinBox->value(); } Engine * SurfaceDialog::currentEngine() { if (m_engines.size()) return m_engines.at(ui.engineCombo->currentIndex()); else return 0; } Cube::Type SurfaceDialog::cubeType() { return m_surfaceTypes.at(ui.surfaceCombo->currentIndex()); } int SurfaceDialog::moNumber() { if (m_surfaceTypes.at(ui.surfaceCombo->currentIndex()) == Cube::MO) return ui.moCombo->currentIndex() + 1; else return -1; } Cube::Type SurfaceDialog::cubeColorType() { return m_colorTypes.at(ui.colorByCombo->currentIndex()); } int SurfaceDialog::moColorNumber() { if (m_colorTypes.at(ui.colorByCombo->currentIndex()) == Cube::MO) return ui.moColorCombo->currentIndex() + 1; else return -1; } unsigned long SurfaceDialog::cubeFromFile() { if (m_surfaceTypes.at(ui.surfaceCombo->currentIndex()) == Cube::FromFile) { // Iterate through the cubes to find the loaded cube that is current QString text(ui.surfaceCombo->currentText()); foreach (Cube *cube, m_molecule->cubes()) { if (text == cube->name()) return cube->id(); } } return FALSE_ID; } unsigned long SurfaceDialog::cubeColorFromFile() { if (m_colorTypes.at(ui.colorByCombo->currentIndex()) == Cube::FromFile) { // Iterate through the cubes to find the loaded cube that is current QString text(ui.colorByCombo->currentText()); foreach (Cube *cube, m_molecule->cubes()) { if (text == cube->name()) return cube->id(); } } return FALSE_ID; } double SurfaceDialog::isoValue() { return ui.isoValueEdit->text().toDouble(); } void SurfaceDialog::enableCalculation(bool enable) { ui.calculateButton->setEnabled(enable); } inline void SurfaceDialog::updateEngines() { // List the appropriate display types in the combo ui.engineCombo->clear(); m_engines.clear(); foreach (Engine *engine, m_glwidget->engines()) { if (engine->identifier() == "Surfaces") { m_engines.push_back(engine); ui.engineCombo->addItem(engine->alias()); } } } void SurfaceDialog::setGLWidget(const GLWidget *gl) { // Disconnect signals and slots if we are switching to a different widget if (m_glwidget) disconnect(m_glwidget, 0, this, 0); m_glwidget = gl; updateEngines(); // Now connect the signals and slots connect(m_glwidget, SIGNAL(engineAdded(Engine*)), this, SLOT(engineAdded(Engine*))); connect(m_glwidget, SIGNAL(engineRemoved(Engine*)), this, SLOT(engineRemoved(Engine*))); } void SurfaceDialog::setMolecule(const Molecule *mol) { // Disconnect signals from old molecule if there is one if (m_molecule) disconnect(m_molecule, 0, this, 0); m_molecule = mol; // Hide the MO combos ui.moCombo->clear(); ui.moCombo->hide(); ui.moColorCombo->clear(); ui.moColorCombo->hide(); // Update the type mappings too m_surfaceTypes.clear(); m_surfaceTypes << Cube::VdW << Cube::ESP; m_colorTypes.clear(); m_colorTypes << Cube::None << Cube::ESP; // Connect to the molecule signals to check for addition/removal of cubes if (m_molecule) { connect(m_molecule, SIGNAL(primitiveAdded(Primitive *)), this, SLOT(addCube(Primitive *))); connect(m_molecule, SIGNAL(primitiveRemoved(Primitive *)), this, SLOT(removeCube(Primitive *))); } updateCubes(); } inline QString SurfaceDialog::cubeText(int n) { switch (n) { case Cube::None: return tr("Nothing", "A cube type of nothing - empty cube"); case Cube::VdW: return tr("Van der Waals", "Van der Waals surface type"); case Cube::ESP: return tr("Electrostatic Potential", "Electrostatic potential surface type"); case Cube::ElectronDensity: return tr("Electron Density", "Electron density surface type"); case Cube::MO: return tr("Molecular Orbital", "Molecular orbital surface type"); default: return tr("Error - undefined type", "Undefined cube type"); } } void SurfaceDialog::updateCubes() { // This routine takes care of rebuilding the cube combos for us // Reset the combos, then rebuild them ui.surfaceCombo->clear(); foreach (const Cube::Type &type, m_surfaceTypes) ui.surfaceCombo->addItem(cubeText(type)); ui.colorByCombo->clear(); foreach (const Cube::Type &type, m_colorTypes) ui.colorByCombo->addItem(cubeText(type)); // Now to enumerate the loaded cubes foreach (Cube *cube, m_molecule->cubes()) { if (cube->cubeType() == Cube::FromFile) { qDebug() << "Found one:" << cube->name(); if (m_surfaceTypes.size() == ui.surfaceCombo->count()) m_surfaceTypes << Cube::FromFile; ui.surfaceCombo->addItem(cube->name()); if (m_colorTypes.size() == ui.colorByCombo->count()) m_colorTypes << Cube::FromFile; ui.colorByCombo->addItem(cube->name()); } } } void SurfaceDialog::addCube(Primitive *p) { if (p && p->type() == Primitive::CubeType) { Cube *cube = static_cast(p); if (cube->cubeType() == Cube::FromFile) { ui.surfaceCombo->addItem(cube->name()); ui.colorByCombo->addItem(cube->name()); } } } void SurfaceDialog::removeCube(Primitive *p) { if (p && p->type() == Primitive::CubeType) { Cube *cube = static_cast(p); if (cube->cubeType() == Cube::FromFile) updateCubes(); } } void SurfaceDialog::engineAdded(Engine *engine) { // If this is an orbital engine then append it to the list if (engine->identifier() == "Surfaces") { m_engines.push_back(engine); ui.engineCombo->addItem(engine->alias()); } } void SurfaceDialog::engineRemoved(Engine *engine) { // If this is an orbital type then rebuild the engine list if (engine->identifier() == "Surfaces") updateEngines(); } void SurfaceDialog::calculateClicked() { // This lets the extension know that a calculation has been requested emit calculate(); } void SurfaceDialog::surfaceComboChanged(int n) { if (m_surfaceTypes.size() > 0 && n >= 0 && n < m_surfaceTypes.size()) { ui.moCombo->setEnabled(m_surfaceTypes.at(n) == Cube::MO); ui.resolutionCombo->setEnabled(m_surfaceTypes[n] != Cube::FromFile); // Set a default isosurface value based upon the surface type double isoValue = 0.0; switch (m_surfaceTypes[n]) { case Cube::VdW: isoValue = 0.0; break; case Cube::ESP: isoValue = 0.05; break; case Cube::ElectronDensity: isoValue = 0.1; break; case Cube::MO: isoValue = 0.02; break; case Cube::FromFile: // Tough to guess, usually MOs/electron density isoValue = 0.02; break; default: isoValue = 1.0; } ui.isoValueEdit->setText(QString::number(isoValue)); } } void SurfaceDialog::colorByComboChanged(int n) { if (m_colorTypes.size() > 0 && n >= 0 && n < m_colorTypes.size()) ui.moColorCombo->setEnabled(m_colorTypes.at(n) == Cube::MO); } void SurfaceDialog::resolutionComboChanged(int n) { switch (n) { case 0: // Very low resolution ui.resolutionSpinBox->setValue(0.5); ui.resolutionSpinBox->setEnabled(false); break; case 1: // Low resolution ui.resolutionSpinBox->setValue(0.35); ui.resolutionSpinBox->setEnabled(false); break; case 2: // Medium resolution ui.resolutionSpinBox->setValue(0.18); ui.resolutionSpinBox->setEnabled(false); break; case 3: // High resolution ui.resolutionSpinBox->setValue(0.1); ui.resolutionSpinBox->setEnabled(false); break; case 4: // Very high resolution ui.resolutionSpinBox->setValue(0.05); ui.resolutionSpinBox->setEnabled(false); break; case 5: // Custom resolution ui.resolutionSpinBox->setValue(0.18); ui.resolutionSpinBox->setEnabled(true); break; default: ui.resolutionSpinBox->setValue(0.18); ui.resolutionSpinBox->setEnabled(false); break; } } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitalsettingsdialog.h0000644000175000001440000000425012250371054026365 0ustar marcususers/********************************************************************** OrbitalSettingsDialog -- Configure the Orbital Extension Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ORBITALSETTINGSDIALOG_H #define ORBITALSETTINGSDIALOG_H #include #include "ui_orbitalsettingsdialog.h" #include "orbitalwidget.h" namespace Avogadro { class OrbitalSettingsDialog : public QDialog { Q_OBJECT public: explicit OrbitalSettingsDialog(OrbitalWidget* parent, Qt::WindowFlags f = 0); ~OrbitalSettingsDialog(); public slots: void setDefaultQuality(OrbitalWidget::OrbitalQuality); void setIsoValue(double); void setHOMOFirst(bool); void setLimitPrecalc(bool); void setPrecalcRange(int); void updateDefaults(); void updatePrecalcSettings(); void accept(); void reject(); signals: void calculateAll(); void defaultsUpdated(OrbitalWidget::OrbitalQuality quality, double isoval, bool HOMOFirst); void precalcSettingsUpdated(bool limit, int range); private slots: void calculateAllClicked(); private: Ui::OrbitalSettingsDialog ui; OrbitalWidget::OrbitalQuality m_quality; double m_isoval; bool m_HOMOFirst; bool m_limit_precalc; int m_precalc_range; }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitalextension.cpp0000644000175000001440000006543412250371054025727 0ustar marcususers/********************************************************************** OrbitalExtension - Extension for visualizing molecular orbitals Copyright (C) 2010 David C. Lonie Copyright (C) 2009-2011 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "orbitalextension.h" #include "orbitalwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using OpenQube::BasisSet; using OpenQube::GaussianSet; using OpenQube::GamessukOut; using OpenQube::GAMESSUSOutput; namespace Avogadro { OrbitalExtension::OrbitalExtension(QObject* parent) : DockExtension(parent), m_dock(0), m_widget(0), m_runningMutex(new QMutex), m_currentRunningCalculation(-1), m_meshGen(0), m_basis(0), m_molecule(0), m_qube(0) { QAction* action = new QAction(this); action->setText(tr("Molecular Orbitals...")); m_actions.append(action); } OrbitalExtension::~OrbitalExtension() { delete m_runningMutex; } QList OrbitalExtension::actions() const { return m_actions; } QString OrbitalExtension::menuPath(QAction*) const { return tr("E&xtensions"); } QDockWidget * OrbitalExtension::dockWidget() { if (!m_dock) { m_dock = new OrbitalDock( tr("Orbitals"), qobject_cast(parent()) ); m_dock->setObjectName("orbitalDock"); if (!m_widget) { m_widget = new OrbitalWidget(m_dock); connect(m_widget, SIGNAL(orbitalSelected(unsigned int)), this, SLOT(renderOrbital(unsigned int))); connect(m_widget, SIGNAL(renderRequested(unsigned int, double)), this, SLOT(calculateOrbitalFromWidget(unsigned int, double))); connect(m_widget, SIGNAL(calculateAll()), this, SLOT(precalculateOrbitals())); } } m_dock->setWidget(m_widget); m_dock->setVisible(true); return m_dock; } void OrbitalExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; // Stuff we manage that will not be valid any longer m_queue.clear(); m_currentRunningCalculation = -1; if (m_basis) { delete m_basis; m_basis = 0; } loadBasis(); if (!m_basis || m_basis->numElectrons() == 0) return; // no electrons, no orbitals // Show dock if (m_dock && molecule && m_basis) { m_widget->setEnabled(true); if (!m_dock->toggleViewAction()->isChecked()) m_dock->toggleViewAction()->activate(QAction::Trigger); } // Send MO data to table if (m_basis) { QList list; unsigned int homo = ceil( m_basis->numElectrons() / 2.0 ); unsigned int lumo = homo + 1; unsigned int count = homo - 1; bool leqHOMO = true; // orbital <= homo // energies and symmetries //TODO: Alpha / Beta orbitals QList alphaEnergies; QVariant property = molecule->property("alphaOrbitalEnergies"); if (property.isValid()) alphaEnergies = property.toList(); QStringList alphaSymmetries; property = molecule->property("alphaOrbitalSymmetries"); if (property.isValid()) alphaSymmetries = property.toStringList(); for (size_t i = 0; i < m_basis->numMOs(); i++) { QString num = ""; if (i+1 != homo && i+1 != lumo) { num = (leqHOMO) ? "-" : "+"; num += QString::number(count); } QString desc = QString("%1") // (HOMO|LUMO)(+|-)[0-9]+ .arg( (leqHOMO) ? tr("HOMO", "Highest Occupied MO") + num : tr("LUMO", "Lowest Unoccupied MO") + num ); qDebug() << desc; Orbital orb; // Get the energy from the molecule property list, if available if (static_cast(alphaEnergies.size()) > i) orb.energy = alphaEnergies[i].toDouble(); else orb.energy = 0.0; // symmetries (if available) if (static_cast(alphaSymmetries.size()) > i) orb.symmetry = alphaSymmetries[i]; orb.index = i; orb.description = desc; orb.queueEntry = 0; orb.min = 0; orb.max = 0; orb.current = 0; list.append(orb); if (i+1 < homo) count--; else if (i+1 == homo) leqHOMO = false; else if (i+1 >= lumo) count++; } m_widget->fillTable(list); } qDebug() << "PreCalculate" ; precalculateOrbitals(); // FIXME: Add this feature back in, refactor ideally. #if 0 // Load Properties for QTAIM calculation if(m_basis) { // QTAIM is only implemented for Cartesian Gaussians. // 6D, 10F, 15G, etc... QString basisSetType = m_basis->basisSetType(); QVariant basisSetTypeVariant(basisSetType); m_molecule->setProperty("QTAIMBasisSetType",basisSetTypeVariant); if( basisSetType == "Cartesian GTO") { qDebug() << "QTAIM: Expand Cartesian GTOs into Primitives"; m_basis->expandIntoPrimitives(); QString fileNameString(m_molecule->fileName()); QVariant fileNameVariant(fileNameString); m_molecule->setProperty("QTAIMFileName",fileNameVariant); QString commentString("Wavefunction from Surfaces extension"); QVariant commentVariant(commentString); m_molecule->setProperty("QTAIMComment",commentVariant); // only keep the occupied orbitals unsigned int totalNumberOfMolecularOrbitals( static_cast(m_basis->numMOs()) ); qint64 numberOfMolecularOrbitals=-1; for( unsigned int i=0 ; i < totalNumberOfMolecularOrbitals ; ++i) { if( m_basis->HOMO(i) ) numberOfMolecularOrbitals=static_cast(i) + 1; } QVariant numberOfMolecularOrbitalsVariant(numberOfMolecularOrbitals); m_molecule->setProperty("QTAIMNumberOfMolecularOrbitals",numberOfMolecularOrbitalsVariant); qint64 numberOfNuclei( static_cast(m_molecule->numAtoms()) ); QVariant numberOfNucleiVariant(numberOfNuclei); m_molecule->setProperty("QTAIMNumberOfNuclei",numberOfNucleiVariant); // Nuclear Coordinates QList xcoordList; QList ycoordList; QList zcoordList; QList nucZList; for( qint64 i=0 ; i < numberOfNuclei ; ++i ) { static const double BOHR_TO_ANGSTROM = 0.529177249; static const double ANGSTROM_TO_BOHR = 1.0 / 0.529177249; Atom *atom=m_molecule->atoms().at(i); const Eigen::Vector3d pos=*(atom->pos()); xcoordList.append(pos(0) * ANGSTROM_TO_BOHR ); ycoordList.append(pos(1) * ANGSTROM_TO_BOHR ); zcoordList.append(pos(2) * ANGSTROM_TO_BOHR ); nucZList.append(atom->atomicNumber()); } QVariantList xcoordVariantList; QVariantList ycoordVariantList; QVariantList zcoordVariantList; QVariantList nucZVariantList; for( qint64 i=0 ; i < xcoordList.length() ; ++i ) { xcoordVariantList.append( xcoordList.at(i) ); ycoordVariantList.append( ycoordList.at(i) ); zcoordVariantList.append( zcoordList.at(i) ); nucZVariantList.append( nucZList.at(i) ); } m_molecule->setProperty("QTAIMXNuclearCoordinates",xcoordVariantList); m_molecule->setProperty("QTAIMYNuclearCoordinates",ycoordVariantList); m_molecule->setProperty("QTAIMZNuclearCoordinates",zcoordVariantList); m_molecule->setProperty("QTAIMNuclearCharges",nucZVariantList); // Primitive Centers QList X0List( m_basis->X0List() ); QVariantList X0VariantList; for( qint64 i=0 ; i < X0List.length() ; ++i ) { X0VariantList.append( X0List.at(i) ); } m_molecule->setProperty("QTAIMXGaussianPrimitiveCenterCoordinates",X0VariantList); QList Y0List( m_basis->Y0List() ); QVariantList Y0VariantList; for( qint64 i=0 ; i < Y0List.length() ; ++i ) { Y0VariantList.append( Y0List.at(i) ); } m_molecule->setProperty("QTAIMYGaussianPrimitiveCenterCoordinates",Y0VariantList); QList Z0List( m_basis->Z0List() ); QVariantList Z0VariantList; for( qint64 i=0 ; i < Z0List.length() ; ++i ) { Z0VariantList.append( Z0List.at(i) ); } m_molecule->setProperty("QTAIMZGaussianPrimitiveCenterCoordinates",Z0VariantList); // Angular Momenta QList xamomList( m_basis->xamomList() ); QVariantList xamomVariantList; for( qint64 i=0 ; i < xamomList.length() ; ++i ) { xamomVariantList.append( xamomList.at(i) ); } m_molecule->setProperty("QTAIMXGaussianPrimitiveAngularMomenta",xamomVariantList); QList yamomList( m_basis->yamomList() ); QVariantList yamomVariantList; for( qint64 i=0 ; i < yamomList.length() ; ++i ) { yamomVariantList.append( yamomList.at(i) ); } m_molecule->setProperty("QTAIMYGaussianPrimitiveAngularMomenta",yamomVariantList); QList zamomList( m_basis->zamomList() ); QVariantList zamomVariantList; for( qint64 i=0 ; i < zamomList.length() ; ++i ) { zamomVariantList.append( zamomList.at(i) ); } m_molecule->setProperty("QTAIMZGaussianPrimitiveAngularMomenta",zamomVariantList); QList alphaList( m_basis->alphaList() ); QVariantList alphaVariantList; for( qint64 i=0 ; i < alphaList.length() ; ++i ) { alphaVariantList.append( alphaList.at(i) ); } m_molecule->setProperty("QTAIMGaussianPrimitiveExponentCoefficients",alphaVariantList); // Orbital Eigenvalues QList orbeList( m_basis->orbeList() ); QVariantList orbeVariantList; for( qint64 i=0 ; i < numberOfMolecularOrbitals /* orbeList.length() */ ; ++i ) { // orbeVariantList.append( orbeList.at(i) ); qreal zero=0.0; orbeVariantList.append( zero ); } m_molecule->setProperty("QTAIMMolecularOrbitalEigenvalues",orbeVariantList); // Occupation Numbers (remember only non-zero) QList occnoList( m_basis->occnoList() ); QVariantList occnoVariantList; for( qint64 i=0 ; i < numberOfMolecularOrbitals /* occnoList.length() */ ; ++i ) { // occnoVariantList.append( occnoList.at(i) ); qreal two=2.0; occnoVariantList.append( two ); } m_molecule->setProperty("QTAIMMolecularOrbitalOccupationNumbers",occnoVariantList); // Primitive Coefficients (remember only non-zero) qint64 numberOfGaussianPrimitives( static_cast( alphaList.length() ) ); QVariant numberOfGaussianPrimitivesVariant(numberOfGaussianPrimitives); m_molecule->setProperty("QTAIMNumberOfGaussianPrimitives",numberOfGaussianPrimitivesVariant); QList coefList( m_basis->coefList() ); QVariantList coefVariantList; for( qint64 m=0 ; m < numberOfMolecularOrbitals /* coefList.length() */ ; ++m ) { for( qint64 p=0 ; p < numberOfGaussianPrimitives ; ++p ) { coefVariantList.append( coefList.at( m*numberOfGaussianPrimitives + p ) ); } } m_molecule->setProperty("QTAIMMolecularOrbitalCoefficients",coefVariantList); // Zero the Total Energy for now qreal zero=0.0; m_molecule->setProperty("QTAIMTotalEnergy", zero ); // Set the Virial Ratio (-V/T) to 2 for now qreal two=2.0; m_molecule->setProperty("QTAIMVirialRatio", two ); } } #endif } void OrbitalExtension::calculateOrbitalFromWidget(unsigned int orbital, double resolution) { addCalculationToQueue(orbital, resolution, m_widget->isovalue(), 0); checkQueue(); } void OrbitalExtension::precalculateOrbitals() { if (m_basis) { // Determine HOMO unsigned int homo = ceil( m_basis->numElectrons() / 2.0 ); qDebug() << " num electrons " << m_basis->numElectrons(); // Initialize prioritizer at HOMO's index int priority = homo; // Loop through all MOs, submitting calculations with increasing // priority until HOMO is reached, submit both HOMO and LUMO at // priority=1, then start increasing for orbitals above LUMO. // E.g, // .... HOMO-2 HOMO-1 HOMO LUMO LUMO+1 LUMO+2 ... << orbitals // .... 3 2 1 1 2 3 ... << priorities // Determine range of precalculated orbitals int startIndex = (m_widget->precalcLimit()) ? homo - (m_widget->precalcRange()/2) : 0; if (startIndex < 0) { startIndex = 0; } int endIndex = (m_widget->precalcLimit()) ? homo + (m_widget->precalcRange()/2) - 1 : m_basis->numMOs(); if (endIndex > static_cast(m_basis->numMOs() - 1)) { endIndex = m_basis->numMOs() - 1; } for (int i = startIndex; i <= endIndex; i++) { addCalculationToQueue(i+1, // orbital OrbitalWidget::OrbitalQualityToDouble(m_widget->defaultQuality()), m_widget->isovalue(), priority); // Update priority. Stays the same when i = homo. if ( i + 1 < static_cast(homo) ) priority--; else if ( i + 1 > static_cast(homo)) priority++; } } checkQueue(); } void OrbitalExtension::addCalculationToQueue(unsigned int orbital, double resolution, double isovalue, unsigned int priority) { // Create new queue entry calcInfo newCalc; newCalc.orbital = orbital; newCalc.resolution = resolution; newCalc.isovalue = isovalue; newCalc.priority = priority; newCalc.state = NotStarted; // Add new calculation m_queue.append(newCalc); // Set progress to show 0% m_widget->calculationQueued(newCalc.orbital); qDebug() << "New calculation added:" << newCalc.orbital << "Priority:" << newCalc.priority; } void OrbitalExtension::startCalculation(unsigned int queueIndex) { // This will launch calculateMesh when finished. m_currentRunningCalculation = queueIndex; calcInfo *info = &m_queue[m_currentRunningCalculation]; qDebug() << info->orbital << " startCalculation() called"; switch (info->state) { case NotStarted: // Start calculation calculateCube(); break; case Running: // Nothing below should happen... qWarning() << "startCalculation called on a running calc..."; break; case Completed: qWarning() << "startCalculation called on a completed calc..."; break; case Canceled: qWarning() << "startCalculation called on a canceled calc..."; break; } } void OrbitalExtension::calculateCube() { calcInfo *info = &m_queue[m_currentRunningCalculation]; info->state = Running; // Check if the cube we want already exists for (int i = 0; i < m_queue.size(); i++) { calcInfo *cI = &m_queue[i]; if (cI->state == Completed && cI->orbital == info->orbital && cI->resolution == info->resolution) { info->cube = cI->cube; qDebug() << "Reusing cube from calculation " << i << ":\n" << "\tOrbital " << cI->orbital << "\n" << "\tResolution " << cI->resolution; calculatePosMesh(); return; } } // Create new cube Cube *cube = m_molecule->addCube(); info->cube = cube; cube->setLimits(m_molecule, info->resolution, 2.5); if (m_qube) { delete m_qube; m_qube = 0; } m_qube = new OpenQube::Cube; m_qube->setLimits(cube->min(), cube->max(), cube->dimensions()); m_basis->calculateCubeMO(m_qube, info->orbital); connect(&m_basis->watcher(), SIGNAL(finished()), this, SLOT(calculateCubeDone())); m_widget->initializeProgress(info->orbital, m_basis->watcher().progressMinimum(), m_basis->watcher().progressMaximum(), 1, 3); connect(&m_basis->watcher(), SIGNAL(progressValueChanged(int)), this, SLOT(updateProgress(int))); qDebug() << info->orbital << " Cube calculation started."; } void OrbitalExtension::calculateCubeDone() { calcInfo *info = &m_queue[m_currentRunningCalculation]; qDebug() << info->orbital << " Cube calculation finished."; disconnect(&m_basis->watcher(), 0, this, 0); // Convert the cube data if (m_qube) { info->cube->setData(*m_qube->data()); delete m_qube; m_qube = 0; } calculatePosMesh(); } void OrbitalExtension::calculatePosMesh() { calcInfo *info = &m_queue[m_currentRunningCalculation]; info->state = Running; // Check if the mesh we want already exists for (int i = 0; i < m_queue.size(); i++) { calcInfo *cI = &m_queue[i]; if (cI->state == Completed && cI->orbital == info->orbital && cI->resolution == info->resolution && cI->isovalue == info->isovalue) { info->posMesh = cI->posMesh; qDebug() << "Reusing posMesh from calculation " << i << ":\n" << "\tOrbital " << cI->orbital << "\n" << "\tResolution " << cI->resolution << "\n" << "\tIsovalue " << cI->isovalue; m_widget->nextProgressStage(info->orbital, 0, 100); calculateNegMesh(); return; } } Cube *cube = info->cube; Mesh *mesh = m_molecule->addMesh(); mesh->setName(cube->name()); mesh->setIsoValue(info->isovalue); mesh->setCube(cube->id()); info->posMesh = mesh; if (m_meshGen) { m_meshGen->disconnect(); delete m_meshGen; } m_meshGen = new MeshGenerator; connect(m_meshGen, SIGNAL(finished()), this, SLOT(calculatePosMeshDone())); m_meshGen->initialize(cube, mesh, info->isovalue); m_widget->nextProgressStage(info->orbital, m_meshGen->progressMinimum(), m_meshGen->progressMaximum()); m_meshGen->start(); connect(m_meshGen, SIGNAL(progressValueChanged(int)), this, SLOT(updateProgress(int))); qDebug() << info->orbital << " posMesh calculation started."; } void OrbitalExtension::calculatePosMeshDone() { calcInfo *info = &m_queue[m_currentRunningCalculation]; disconnect(m_meshGen, 0, this, 0); qDebug() << info->orbital << " posMesh calculation finished."; calculateNegMesh(); } void OrbitalExtension::calculateNegMesh() { calcInfo *info = &m_queue[m_currentRunningCalculation]; info->state = Running; // Check if the mesh we want already exists for (int i = 0; i < m_queue.size(); i++) { calcInfo *cI = &m_queue[i]; if (cI->state == Completed && cI->orbital == info->orbital && cI->resolution == info->resolution && cI->isovalue == info->isovalue) { info->negMesh = cI->negMesh; qDebug() << "Reusing posMesh from calculation " << i << ":\n" << "\tOrbital " << cI->orbital << "\n" << "\tResolution " << cI->resolution << "\n" << "\tIsovalue " << cI->isovalue; m_widget->nextProgressStage(info->orbital, 0, 100); calculationComplete(); return; } } Cube *cube = info->cube; Mesh *mesh = m_molecule->addMesh(); info->negMesh = mesh; mesh->setName(cube->name()); mesh->setIsoValue(0.0 - info->isovalue); mesh->setCube(cube->id()); if (m_meshGen) { m_meshGen->disconnect(); delete m_meshGen; } m_meshGen = new MeshGenerator; connect(m_meshGen, SIGNAL(finished()), this, SLOT(calculateNegMeshDone())); m_meshGen->initialize(cube, mesh, 0.0 - info->isovalue, true); // Reverse the surface m_widget->nextProgressStage(info->orbital, m_meshGen->progressMinimum(), m_meshGen->progressMaximum()); m_meshGen->start(); connect(m_meshGen, SIGNAL(progressValueChanged(int)), this, SLOT(updateProgress(int))); qDebug() << info->orbital << " negMesh calculation started."; } void OrbitalExtension::calculateNegMeshDone() { calcInfo *info = &m_queue[m_currentRunningCalculation]; disconnect(m_meshGen, 0, this, 0); qDebug() << info->orbital << " negMesh calculation finished."; calculationComplete(); } void OrbitalExtension::calculationComplete() { calcInfo *info = &m_queue[m_currentRunningCalculation]; m_widget->calculationComplete(info->orbital); info->state = Completed; m_currentRunningCalculation = -1; m_runningMutex->unlock(); // Show orbital is calculation was user requested if (info->priority == 0) m_widget->selectOrbital(info->orbital); qDebug() << info->orbital << " all calculations complete."; checkQueue(); } void OrbitalExtension::renderOrbital(unsigned int orbital) { qDebug() << "Attempting to render orbital " << orbital; // TODO Actually select the engine. For now, just use the first // surface engine Engine *engine = 0; foreach (Engine *e, GLWidget::current()->engines()) { if (e->identifier() == "Surfaces") { engine = e; } } if (!engine) { qDebug() << "Engine is null - no engines of this type loaded."; return; // prevent a crash if the surface engine isn't loaded } engine->setMolecule(m_molecule); // prevent a crash after switching file // Find the most recent calc matching the selected orbital: calcInfo calc; int index = -1; for (int i = 0; i < m_queue.size(); i++) { calc = m_queue[i]; if ( calc.orbital == orbital && calc.state == Completed ) { index = i; } } if (index == -1) { qDebug() << "Orbital not found, or still calculating. Cannot render."; return; } if (engine) { QSettings settings; engine->writeSettings(settings); settings.setValue("colorMode", 1); settings.setValue("mesh1Id",static_cast(m_queue[index].posMesh->id())); settings.setValue("mesh2Id",static_cast(m_queue[index].negMesh->id())); engine->readSettings(settings); engine->setEnabled(true); // Trigger a repaint with the new mesh /// FIXME Should be using m_molecule->update() to trigger a repaint in /// all open displays, this currently causes crashes - need to track /// down the cause. GLWidget::current()->update(); } else qDebug() << "Engine is null - no engines of this type loaded."; } void OrbitalExtension::checkQueue() { if (!m_runningMutex->tryLock()) return; // Create a hash: keys=priority, values=indices QHash hash; CalcState state; for (int i = 0; i < m_queue.size(); i++) { state = m_queue.at(i).state; // If there is already a running job, return. if ( state == Running ) { return; } if ( state == NotStarted ) { hash.insert(m_queue[i].priority, i); } } // Do nothing if all calcs are finished. if (hash.size() == 0) { m_runningMutex->unlock(); qDebug() << "Finished queue."; return; } QList priorities = hash.keys(); qSort(priorities); startCalculation(hash.value(priorities.first())); } bool OrbitalExtension::loadBasis() { if (m_molecule->fileName().isEmpty()) { return false; } // Check to see if this molecule has been tagged with a file format QVariant fileFormat = m_molecule->property("File Format"); if (fileFormat.isValid()) { QString format = fileFormat.toString(); if (format == QLatin1String("gamout")) { qDebug() << " deduced from format "; if (m_basis) { delete m_basis; m_basis = 0; } GaussianSet *gaussian = new GaussianSet; GAMESSUSOutput gamout(m_molecule->fileName(), gaussian); m_basis = gaussian; return true; } else if (format == QLatin1String("gukout")) { qDebug() << " deduced from format "; if (m_basis) { delete m_basis; m_basis = 0; } GaussianSet *gaussian = new GaussianSet; GamessukOut gukout(m_molecule->fileName(), gaussian); m_basis = gaussian; return true; } } // Everything looks good, a new basis set needs to be loaded // Check for files in this directory -- first the file itself // and then any other similar file if (m_basis) { delete m_basis; m_basis = 0; } // Set up the MOs along with the electron density maps QString basisFileName = OpenQube::BasisSetLoader::MatchBasisSet(m_molecule->fileName()); if (basisFileName.isEmpty()) { qDebug() << "No matching basis set file found: " << m_molecule->fileName(); return false; } else { m_basis = OpenQube::BasisSetLoader::LoadBasisSet(basisFileName); if (m_basis) return true; } return false; } void OrbitalExtension::updateProgress(int current) { calcInfo *info = &m_queue[m_currentRunningCalculation]; int orbital = info->orbital; m_widget->updateProgress(orbital, current); } } // End namespace Avogadro Q_EXPORT_PLUGIN2(orbitalextension, Avogadro::OrbitalExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/surfaces/surfacedialog.h0000644000175000001440000000671412250371054024607 0ustar marcususers/********************************************************************** SurfaceDialog - Dialog for generating cubes and meshes Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SURFACEDIALOG_H #define SURFACEDIALOG_H #include #include "ui_surfacedialog.h" #include #include #include namespace Avogadro { class GLWidget; class Primitive; class Molecule; class Engine; class SurfaceDialog : public QDialog { Q_OBJECT public: explicit SurfaceDialog(QWidget* parent = 0, Qt::WindowFlags f = 0); ~SurfaceDialog(); void setMOs(int num); void setHOMO(int num); void setLUMO(int num); double stepSize(); Engine * currentEngine(); /** * @return the requested cube type. */ Cube::Type cubeType(); /** * @return the MO number (if applicable), or -1 if not. */ int moNumber(); /** * @return the requested cube color type. */ Cube::Type cubeColorType(); /** * @return the MO number (if applicable), or -1 if not. */ int moColorNumber(); /** * In the case of Cube objects that were loaded, return the cube id */ unsigned long cubeFromFile(); /** * In the case of Cube objects that were loaded, return the cube id */ unsigned long cubeColorFromFile(); /** * @return the iso value specified in the form. */ double isoValue(); /** * Enable or disable the calculate button. */ void enableCalculation(bool enable); private: Ui::SurfaceDialog ui; const GLWidget *m_glwidget; const Molecule *m_molecule; // Lists of different properties we need to keep track of QList m_surfaceTypes; // Mapping of the surface type combo QList m_colorTypes; // Mapping of the color by combo QList m_engines; // List of engines, as displayed in the combo // Update the engine list void updateEngines(); // Gives the appropriate text for a cube type QString cubeText(int); // Update the cube list void updateCubes(); public slots: void setGLWidget(const GLWidget *gl); void setMolecule(const Molecule *mol); void addCube(Primitive *p); void removeCube(Primitive *p); void engineAdded(Engine *engine); void engineRemoved(Engine *engine); private slots: void calculateClicked(); void surfaceComboChanged(int n); void colorByComboChanged(int n); void resolutionComboChanged(int n); signals: void calculate(); }; } // End namespace Avogadro #endif // SURFACEDIALOG_H avogadro-1.1.1/libavogadro/src/extensions/surfaces/surfacedialog.ui0000644000175000001440000003035312250371054024771 0ustar marcususers SurfaceDialog 0 0 449 208 Create Surfaces Qt::DefaultContextMenu Surface Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter surfaceCombo Van der Waals Electrostatic Potential Qt::Horizontal 40 20 false false 0 MO 666 Qt::Horizontal 40 20 Color By: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter colorByCombo Nothing Electrostatic Potential Qt::Horizontal 40 20 false false 0 MO 666 Qt::Horizontal 40 20 Resolution: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter resolutionCombo 2 Very Low Low Medium High Very High Custom false A 0.010000000000000 2.000000000000000 0.100000000000000 0.180000000000000 Qt::Horizontal 40 20 Isosurface cutoff value Iso Value: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter isoValueEdit Qt::Horizontal 40 20 In Display Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter engineCombo 0 New Display Qt::Horizontal 40 20 Qt::Vertical 20 10 Calculate false Advanced... Qt::Horizontal 40 20 Qt::Horizontal QDialogButtonBox::Close surfaceCombo moCombo colorByCombo resolutionCombo isoValueEdit engineCombo calculateButton advancedButton buttonBox buttonBox accepted() SurfaceDialog accept() 248 254 157 274 buttonBox rejected() SurfaceDialog reject() 316 260 286 274 avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitaltablemodel.h0000644000175000001440000001025412250371054025456 0ustar marcususers/********************************************************************** OrbitalExtension - Molecular orbital explorer Copyright (C) 2010 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef ORBITALTABLEMODEL_H #define ORBITALTABLEMODEL_H #include "orbitalextension.h" #include #include #include #include namespace Avogadro { struct calcInfo; struct Orbital { double energy; int index; QString description; // (HOMO|LUMO)[(+|-)N] QString symmetry; // e.g., A1g (with subscripts) calcInfo *queueEntry; // Progress data: int min; int max; int current; int stage; int totalStages; }; // Allow progress bars to be embedded in the table class ProgressBarDelegate : public QStyledItemDelegate { Q_OBJECT public: ProgressBarDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {}; QSize sizeHint(const QStyleOptionViewItem&, const QModelIndex&) const { return QSize(60, 30);}; void paint(QPainter *p, const QStyleOptionViewItem &o, const QModelIndex &ind) const { QStyleOptionProgressBarV2 opt; // Call initFrom() which will set the style based on the parent // GRH: This is critical to get things right on Mac // otherwise the status bars always look disabled opt.initFrom(qobject_cast(this->parent())); opt.rect = o.rect; opt.minimum = 1; // percentage opt.maximum = 100; opt.textVisible = true; int percent = ind.model()->data(ind, Qt::DisplayRole).toInt(); opt.progress = percent; opt.text = QString("%1%").arg(QString::number(percent)); QApplication::style()->drawControl(QStyle::CE_ProgressBar, &opt, p); } }; // Used for sorting: class OrbitalSortingProxyModel : public QSortFilterProxyModel { Q_OBJECT public: OrbitalSortingProxyModel(QObject *parent = 0) : QSortFilterProxyModel(parent), m_HOMOFirst(false) {}; bool isHOMOFirst() {return m_HOMOFirst;}; void HOMOFirst(bool b) {m_HOMOFirst = b;}; protected: // Compare orbital values bool lessThan ( const QModelIndex & left, const QModelIndex & right ) const { if (m_HOMOFirst) return left.row() < right.row(); else return left.row() > right.row(); } private: bool m_HOMOFirst; }; class OrbitalTableModel : public QAbstractTableModel { Q_OBJECT public: enum Column { C_Description = 0, C_Energy, C_Symmetry, C_Status, // also occupation (0/1/2) COUNT }; //! Constructor explicit OrbitalTableModel(QWidget *parent = 0); //! Deconstructor virtual ~OrbitalTableModel(); int rowCount(const QModelIndex&) const {return m_orbitals.size();}; int columnCount(const QModelIndex&) const; QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; QVariant headerData(int section, Qt::Orientation orientation, int role) const; QModelIndex HOMO() const; QModelIndex LUMO() const; bool setOrbital(const Orbital &Orbital); bool clearOrbitals(); // Stages are used for multi-step processes, e.g. cube, posmesh, negmesh, etc void setOrbitalProgressRange(int orbital, int min, int max, int stage, int totalStages); void incrementStage(int orbital, int newmin, int newmax); void setOrbitalProgressValue(int orbital, int currentValue); void finishProgress(int orbital); void resetProgress(int orbital); void setProgressToZero(int orbital); private: QList m_orbitals; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitaltablemodel.cpp0000644000175000001440000001545412250371054026020 0ustar marcususers/********************************************************************** OrbitalExtension - Molecular orbital explorer Copyright (C) 2010 by David C. Lonie Copyright (C) 2011 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "orbitaltablemodel.h" #include "orbitalwidget.h" namespace Avogadro { OrbitalTableModel::OrbitalTableModel( QWidget *parent) : QAbstractTableModel(parent) { m_orbitals.clear(); } OrbitalTableModel::~OrbitalTableModel() { } int OrbitalTableModel::columnCount(const QModelIndex&) const { return COUNT; } QVariant OrbitalTableModel::data(const QModelIndex & index, int role) const { if ((role != Qt::DisplayRole && role != Qt::TextAlignmentRole) || !index.isValid()) return QVariant(); if (role == Qt::TextAlignmentRole) { switch (Column(index.column())) { case C_Energy: return Qt::AlignRight + Qt::AlignVCenter; // numeric alignment case C_Status: // everything else can be centered case C_Description: case C_Symmetry: default: return Qt::AlignHCenter + Qt::AlignVCenter; } } const Orbital orb = m_orbitals.at(index.row()); QString symbol; // use subscripts int subscriptStart; switch (Column(index.column())) { case C_Description: return orb.description; case C_Energy: return QString("%L1").arg(orb.energy, 0, 'f', 3); case C_Status: { // Check for divide by zero if (orb.max == orb.min) return 0; int percent = 100 * (orb.current - orb.min) / float(orb.max - orb.min); // Adjust for stages int stages = (orb.totalStages == 0) ? 1 : orb.totalStages; percent /= float(stages); percent += (orb.stage - 1) * ( 100.0 / float(stages) ); return percent; } case C_Symmetry: symbol = orb.symmetry; if (symbol.length() > 1) { subscriptStart = 1; if (symbol[0] == '?') subscriptStart++; symbol.insert(subscriptStart, QString("")); symbol.append(QString("")); } symbol.replace('\'', QString("'")); symbol.replace('"', QString("\"")); return symbol; default: case COUNT: return QVariant(); } } QVariant OrbitalTableModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) return QVariant(); if (orientation == Qt::Horizontal) { switch (Column(section)) { case C_Description: return tr("Orbital"); case C_Energy: return tr("Energy (eV)"); case C_Status: return tr("Status"); case C_Symmetry: return tr("Symmetry"); default: case COUNT: return QVariant(); } } else return QString::number(section + 1); } QModelIndex OrbitalTableModel::HOMO() const { for (int i = 0; i < m_orbitals.size(); i++) { if (m_orbitals.at(i).description == tr("HOMO", "Highest Occupied MO")) return index(i, 0); } return QModelIndex(); } QModelIndex OrbitalTableModel::LUMO() const { for (int i = 0; i < m_orbitals.size(); i++) { if (m_orbitals.at(i).description == tr("LUMO", "Lowest Unoccupied MO")) return index(i, 0); } return QModelIndex(); } bool OrbitalTableModel::setOrbital(const Orbital &orbital) { int index = orbital.index; if (index + 1 > m_orbitals.size()) { // Construct empty orbital: Orbital orb; orb.energy = 0; orb.index = -1; orb.description = ""; orb.symmetry = ""; orb.queueEntry = 0; orb.min = 0; orb.max = 0; orb.current = 0; orb.stage = 0; orb.totalStages = 0; beginInsertRows(QModelIndex(), m_orbitals.size(), index); for (int i = 0; i <= index - m_orbitals.size() + 1; i++) { m_orbitals.append(orb); } endInsertRows(); } m_orbitals.replace(index, orbital); return true; } bool OrbitalTableModel::clearOrbitals() { beginRemoveRows(QModelIndex(), 0, m_orbitals.size() - 1); m_orbitals.clear(); endRemoveRows(); return true; } void OrbitalTableModel::setOrbitalProgressRange(int orbital, int min, int max, int stage, int totalStages) { Orbital *orb = &m_orbitals[orbital - 1]; orb->min = min; orb->current = min; orb->max = max; orb->stage = stage; orb->totalStages = totalStages; // Update display QModelIndex status = index(orbital - 1, int(C_Status), QModelIndex()); emit dataChanged(status, status); } void OrbitalTableModel::incrementStage(int orbital, int newmin, int newmax) { Orbital *orb = &m_orbitals[orbital - 1]; orb->stage++; orb->min = newmin; orb->current = newmin; orb->max = newmax; // Update display QModelIndex status = index(orbital - 1, C_Status, QModelIndex()); emit dataChanged(status, status); } void OrbitalTableModel::setOrbitalProgressValue(int orbital, int currentValue) { Orbital *orb = &m_orbitals[orbital - 1]; orb->current = currentValue; // Update display QModelIndex status = index(orbital - 1, C_Status, QModelIndex()); emit dataChanged(status, status); } void OrbitalTableModel::finishProgress(int orbital) { Orbital *orb = &m_orbitals[orbital - 1]; orb->stage = 1; orb->totalStages = 1; orb->min = 0; orb->current = 1; orb->max = 1; // Update display QModelIndex status = index(orbital - 1, C_Status, QModelIndex()); emit dataChanged(status, status); } void OrbitalTableModel::resetProgress(int orbital) { Orbital *orb = &m_orbitals[orbital - 1]; orb->stage = 1; orb->totalStages = 1; orb->min = 0; orb->current = 0; orb->max = 0; // Update display QModelIndex status = index(orbital - 1, C_Status, QModelIndex()); emit dataChanged(status, status); } void OrbitalTableModel::setProgressToZero(int orbital) { Orbital *orb = &m_orbitals[orbital - 1]; orb->stage = 1; orb->totalStages = 1; orb->min = 0; orb->current = 0; orb->max = 1; // Update display QModelIndex status = index(orbital - 1, C_Status, QModelIndex()); emit dataChanged(status, status); } } // namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/surfaces/surfaceextension.h0000644000175000001440000001046412250371054025361 0ustar marcususers/********************************************************************** SurfaceExtension - Extension for generating cubes and meshes Copyright (C) 2009-2011 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SURFACEEXTENSION_H #define SURFACEEXTENSION_H #include "surfacedialog.h" #include #include #include class QProgressDialog; namespace OpenQube { class BasisSet; class Cube; } namespace Avogadro { class Cube; class Mesh; class MeshGenerator; class VdWSurface; class SurfaceDialog; class SurfaceExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Surfaces", tr("Surfaces"), tr("Calculate molecular orbitals and other surfaces")) public: SurfaceExtension(QObject* parent = 0); virtual ~SurfaceExtension(); virtual QList actions() const; virtual QString menuPath(QAction* action) const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); void setMolecule(Molecule *molecule); private: QList m_cubes; // These are the standard cubes QVector m_moCubes; // These are the MO cubes int m_calculationPhase; // The calculation phase GLWidget* m_glwidget; SurfaceDialog *m_surfaceDialog; QList m_actions; Molecule *m_molecule; OpenQube::BasisSet *m_basis; // The basis set QString m_loadedFileName; QProgressDialog *m_progress; Mesh *m_mesh1, *m_mesh2; MeshGenerator *m_meshGen1; MeshGenerator *m_meshGen2; VdWSurface *m_VdWsurface; Cube *m_cube; OpenQube::Cube *m_qube; Cube *m_cubeColor; //! Load the appropriate basis set (if possible) bool loadBasis(); //! Calculate the ESP from the partial charges of the atoms on the supplied //! Mesh object. void calculateESP(Mesh *mesh); //! Convenience function - creates a new cube with the correct dimensions. Cube * newCube(); OpenQube::Cube * newQube(); //! Calculate the VdW cube void calculateVdW(Cube *cube); //! Calculate an MO cube void calculateMo(OpenQube::Cube *cube, int mo); //! Calculate electron density cube void calculateElectronDensity(OpenQube::Cube *cube); //! Calculate a mesh isosurface for the given cube void calculateMesh(Cube *cube, double isoValue); /** * Figure out which kind of calculation is required. The relevant m_qube * or m_cube will be set to the cube being calculated. * @param type the type of cube to be calculated. * @param mo the MO number, default of -1 is invalid/ignored. * @param calculateCube true if the cube needs to be calculated. */ void startCubeCalculation(Cube::Type type, int mo, bool &calculateCube); private slots: /** * New calculate function - queries the dialog and calculates the cubes and * the meshes. This is much more demand based. */ void calculate(); /** * This is called once the calculation is complete - check for more * calculations, clean up once complete. */ void calculateDone(); /** * This is called once the calculation is canceled - clean up. */ void calculateCanceled(); }; class SurfaceExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(SurfaceExtension) }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/orbitalextension.h0000644000175000001440000001170612250371054025365 0ustar marcususers/********************************************************************** OrbitalExtension - Molecular orbital explorer Copyright (C) 2010 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ORBITALEXTENSION_H #define ORBITALEXTENSION_H #include #include #include #include #include #include #include class QProgressDialog; namespace OpenQube { class BasisSet; class Cube; } namespace Avogadro { class Cube; class Mesh; class MeshGenerator; class VdWSurface; class SurfaceDialog; class OrbitalWidget; enum CalcState { NotStarted = 0, Running, Completed, Canceled }; struct calcInfo { Mesh *posMesh; Mesh *negMesh; Cube *cube; unsigned int orbital; double resolution; double isovalue; unsigned int priority; CalcState state; }; class OrbitalDock : public QDockWidget { public: OrbitalDock( const QString & title, QWidget * parent = 0, Qt::WindowFlags flags = 0 ) : QDockWidget(title, parent, flags) {} protected: void closeEvent ( QCloseEvent * event ) { if (widget()) widget()->hide(); event->accept(); } }; class OrbitalExtension : public DockExtension { Q_OBJECT AVOGADRO_EXTENSION("Orbitals", tr("Orbitals"), tr("Calculate and visualize molecular orbitals")) public: OrbitalExtension(QObject* parent = 0); virtual ~OrbitalExtension(); virtual QList actions() const; virtual QString menuPath(QAction* action) const; virtual QDockWidget * dockWidget(); virtual void setMolecule(Molecule *molecule); private slots: /** * Load the appropriate basis set (if possible) */ bool loadBasis(); /** * Re-render an orbital at a higher resolution * * @param orbital The orbital to render * @param resolution The resolution of the cube */ void calculateOrbitalFromWidget(unsigned int orbital, double resolution); /** * Calculate all molecular orbitals at low priority and low * resolution. */ void precalculateOrbitals(); /** * Add an orbital calculation to the queue. Lower priority values * run first. Do not set automatic calculations to priority zero, * this is reserved for user requested calculations and will run * first, displaying a progress dialog. * * @param orbital Orbital number * @param resolution Resolution of grid * @param isoval Isovalue for surface * @param priority Priority. Default = 0 (user requested) */ void addCalculationToQueue(unsigned int orbital, double resolution, double isoval, unsigned int priority = 0); /** * Check that no calculations are currently running and start the * highest priority calculation. */ void checkQueue(); /** * Start or resume the calculation at the indicated index of the * queue. */ void startCalculation(unsigned int queueIndex); void calculateCube(); void calculateCubeDone(); void calculatePosMesh(); void calculatePosMeshDone(); void calculateNegMesh(); void calculateNegMeshDone(); void calculationComplete(); /** * Draw the indicated orbital on the GLWidget */ void renderOrbital(unsigned int orbital); /** * Update the progress of the current calculation */ void updateProgress(int current); private: OrbitalDock *m_dock; OrbitalWidget *m_widget; QMutex *m_runningMutex; QList m_queue; int m_currentRunningCalculation; MeshGenerator *m_meshGen; OpenQube::BasisSet *m_basis; QList m_actions; Molecule *m_molecule; OpenQube::Cube *m_qube; QTime m_time; }; class OrbitalExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(OrbitalExtension) }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/surfaceextension.cpp0000644000175000001440000005327312250371054025721 0ustar marcususers/********************************************************************** SurfaceExtension - Extension for generating cubes and meshes Copyright (C) 2009-2011 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "surfaceextension.h" #include #include #include #include "vdwsurface.h" #include "surfacedialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using Eigen::Vector3f; using Eigen::Vector3d; using Eigen::Vector3i; using namespace OpenQube; namespace Avogadro { SurfaceExtension::SurfaceExtension(QObject* parent) : Extension(parent), m_glwidget(0), m_surfaceDialog(0), m_molecule(0), m_basis(0), m_progress(0), m_mesh1(0), m_mesh2(0), m_meshGen1(0), m_meshGen2(0), m_VdWsurface(0), m_cube(0), m_qube(0), m_cubeColor(0) { QAction* action = new QAction(this); action->setText(tr("Create Surfaces...")); m_actions.append(action); } SurfaceExtension::~SurfaceExtension() { delete m_basis; m_basis = 0; delete m_meshGen1; m_meshGen1 = 0; delete m_meshGen2; m_meshGen2 = 0; delete m_VdWsurface; m_VdWsurface = 0; } QList SurfaceExtension::actions() const { return m_actions; } QString SurfaceExtension::menuPath(QAction*) const { return tr("E&xtensions"); } QUndoCommand* SurfaceExtension::performAction(QAction *, GLWidget *widget) { m_glwidget = widget; if (!m_surfaceDialog) { m_surfaceDialog = new SurfaceDialog(qobject_cast(parent())); m_surfaceDialog->setGLWidget(widget); m_surfaceDialog->setMolecule(m_molecule); connect(m_surfaceDialog, SIGNAL(calculate()), this, SLOT(calculate())); loadBasis(); m_surfaceDialog->show(); } else { m_surfaceDialog->setGLWidget(widget); loadBasis(); m_surfaceDialog->show(); } return 0; } void SurfaceExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; // Stuff we manage that will not be valid any longer delete m_basis; m_basis = 0; delete m_VdWsurface; m_VdWsurface = 0; m_loadedFileName = QString(); m_cubes.clear(); m_cubes << FALSE_ID << FALSE_ID; m_moCubes.clear(); // This will no longer be valid if the molecule has changed - clear them m_mesh1 = 0; m_mesh2 = 0; m_cube = 0; m_cubeColor = 0; m_calculationPhase = -1; // Update the dialog if (m_surfaceDialog) { m_surfaceDialog->setMolecule(molecule); // If the dialog is visible, then try loading the new basis too if (m_surfaceDialog->isVisible()) loadBasis(); } } bool SurfaceExtension::loadBasis() { if (m_molecule->fileName().isEmpty()) { return false; } else if (m_loadedFileName == m_molecule->fileName()) { return true; } else if (QFileInfo(m_molecule->fileName()).baseName() == QFileInfo(m_loadedFileName).baseName()) { return true; } // Everything looks good, a new basis set needs to be loaded // Check for files in this directory -- first the file itself // and then any other similar files if (m_basis) { delete m_basis; m_basis = 0; } // Set up the MOs along with the electron density maps QString basisFileName = OpenQube::BasisSetLoader::MatchBasisSet(m_molecule->fileName()); if (basisFileName.isEmpty()) { qDebug() << "No matching basis set file found: " << m_molecule->fileName(); return false; } else { m_basis = OpenQube::BasisSetLoader::LoadBasisSet(basisFileName); if (m_basis) { m_cubes << FALSE_ID; m_surfaceDialog->setMOs(m_basis->numMOs()); m_moCubes.resize(m_basis->numMOs()); m_moCubes.fill(FALSE_ID); for (unsigned int i = 0; i < m_basis->numMOs(); ++i) { if (m_basis->HOMO(i)) m_surfaceDialog->setHOMO(i); else if (m_basis->LUMO(i)) m_surfaceDialog->setLUMO(i); } return true; } } return false; } void SurfaceExtension::calculateESP(Mesh *mesh) { // Calculate the ESP mapped onto the vertices of the Mesh supplied if (!m_molecule) return; // Check to see if molecule has hydrogens bool hasHydrogens = false; foreach (Atom *atom, m_molecule->atoms()) if (atom->atomicNumber() == 1) { hasHydrogens = true; break; } NeighborList *nbrList = new NeighborList(m_molecule, 7.0, false, 2); std::vector colors; for(unsigned int i=0; i < mesh->vertices().size(); ++i) { const Vector3f *v = mesh->vertex(i); double energy = 0.0; QList nbrAtoms = nbrList->nbrs(v); // Include formal charges when there are hydrogens if (hasHydrogens) { foreach(Atom *a, nbrAtoms) { Vector3f dist = a->pos()->cast() - v->cast(); energy += (a->formalCharge() + a->partialCharge()) / dist.squaredNorm(); } } else { foreach(Atom *a, nbrAtoms) { Vector3f dist = a->pos()->cast() - v->cast(); energy += a->partialCharge() / dist.squaredNorm(); } } // Chemistry convention: red = negative, blue = positive // // Use HSV color model for smooth transitions int red_hue = 0; int blue_hue = 240; int hue = 0; // meaningless if gray (i.e. low saturation) int saturation = 0; // 0 = white, 0-40 = grayish, 40-255 colors from hue int value = 255; // lightness or brightness (0 = black, 255 = white) if (energy < 0.0) { hue = red_hue; saturation = -255 * 5 * energy; } else if (energy > 0.0) { hue = blue_hue; saturation = 255 * 5 * energy; } if (saturation > 255) saturation = 255; QColor qcolor(QColor::fromHsv(hue, saturation, value)); Color3f color(qcolor.red(), qcolor.green(), qcolor.blue()); colors.push_back(color); } mesh->setColors(colors); } Cube * SurfaceExtension::newCube() { // This function takes the requested resolution and makes a new cube Cube *cube = m_molecule->addCube(); double step = m_surfaceDialog->stepSize(); cube->setLimits(m_molecule, step, 2.5); return cube; } OpenQube::Cube * SurfaceExtension::newQube() { // This function takes the requested resolution and makes a new cube Cube *cube = new Cube; double step = m_surfaceDialog->stepSize(); cube->setLimits(m_molecule, step, 2.5); OpenQube::Cube *qube = new OpenQube::Cube; qube->setLimits(cube->min(), cube->max(), cube->dimensions()); delete cube; return qube; } void SurfaceExtension::calculateVdW(Cube *cube) { if (!m_VdWsurface) m_VdWsurface = new VdWSurface; // Only do the calculation if there is a molecule and it has some atoms if (m_molecule) { if (m_molecule->numAtoms()) m_VdWsurface->setAtoms(m_molecule); else return; } else return; m_VdWsurface->calculateCube(cube); // Set up a progress dialog if (!m_progress) { m_progress = new QProgressDialog(m_surfaceDialog); m_progress->setCancelButtonText(tr("Abort Calculation")); m_progress->setWindowModality(Qt::NonModal); } // Set up the progress bar m_progress->setWindowTitle(tr("Calculating VdW Cube")); m_progress->setRange(m_VdWsurface->watcher().progressMinimum(), m_VdWsurface->watcher().progressMaximum()); m_progress->setValue(m_VdWsurface->watcher().progressValue()); m_progress->show(); connect(&m_VdWsurface->watcher(), SIGNAL(progressValueChanged(int)), m_progress, SLOT(setValue(int))); connect(&m_VdWsurface->watcher(), SIGNAL(progressRangeChanged(int, int)), m_progress, SLOT(setRange(int, int))); connect(m_progress, SIGNAL(canceled()), this, SLOT(calculateCanceled())); connect(&m_VdWsurface->watcher(), SIGNAL(finished()), this, SLOT(calculateDone())); } void SurfaceExtension::calculateMo(OpenQube::Cube *cube, int mo) { if (m_basis) { m_basis->calculateCubeMO(cube, mo); // Set up a progress dialog if (!m_progress) { m_progress = new QProgressDialog(m_surfaceDialog); m_progress->setCancelButtonText(tr("Abort Calculation")); m_progress->setWindowModality(Qt::NonModal); } // Set up the progress bar m_progress->setWindowTitle( tr("Calculating MO %L1", "Molecular Orbital").arg(mo)); m_progress->setRange(m_basis->watcher().progressMinimum(), m_basis->watcher().progressMaximum()); m_progress->setValue(m_basis->watcher().progressValue()); m_progress->show(); // Connect the signals and slots connect(&m_basis->watcher(), SIGNAL(progressValueChanged(int)), m_progress, SLOT(setValue(int))); connect(&m_basis->watcher(), SIGNAL(progressRangeChanged(int, int)), m_progress, SLOT(setRange(int, int))); connect(m_progress, SIGNAL(canceled()), this, SLOT(calculateCanceled())); connect(&m_basis->watcher(), SIGNAL(finished()), this, SLOT(calculateDone())); } m_surfaceDialog->enableCalculation(false); } void SurfaceExtension::calculateElectronDensity(OpenQube::Cube *cube) { if (!m_basis) return; m_basis->calculateCubeDensity(cube); // Set up a progress dialog if (!m_progress) { m_progress = new QProgressDialog(m_surfaceDialog); m_progress->setCancelButtonText(tr("Abort Calculation")); m_progress->setWindowModality(Qt::NonModal); } // Set up the progress bar m_progress->setWindowTitle(tr("Calculating Electron Density")); m_progress->setRange(m_basis->watcher().progressMinimum(), m_basis->watcher().progressMaximum()); m_progress->setValue(m_basis->watcher().progressValue()); m_progress->show(); // Connect the signals and slots connect(&m_basis->watcher(), SIGNAL(progressValueChanged(int)), m_progress, SLOT(setValue(int))); connect(&m_basis->watcher(), SIGNAL(progressRangeChanged(int, int)), m_progress, SLOT(setRange(int, int))); connect(m_progress, SIGNAL(canceled()), this, SLOT(slaterCanceled())); connect(&m_basis->watcher(), SIGNAL(finished()), this, SLOT(calculateDone())); m_surfaceDialog->enableCalculation(false); } void SurfaceExtension::calculateMesh(Cube *cube, double isoValue) { qDebug() << "calculateMesh called" << isoValue << cube; if (!cube->lock()->tryLockForRead()) { qDebug() << "SurfaceExtension::calculateMesh could not obtain read lock." << cube->id() << cube->name() << isoValue; } else cube->lock()->unlock(); m_mesh1 = m_molecule->addMesh(); m_mesh1->setName(cube->name()); m_mesh1->setIsoValue(isoValue); m_mesh1->setCube(cube->id()); if (!m_meshGen1) { m_meshGen1 = new MeshGenerator; connect(m_meshGen1, SIGNAL(finished()), this, SLOT(calculateDone())); } else { disconnect(m_meshGen1, 0, this, 0); delete m_meshGen1; m_meshGen1 = new MeshGenerator; connect(m_meshGen1, SIGNAL(finished()), this, SLOT(calculateDone())); } m_meshGen1->initialize(cube, m_mesh1, isoValue, m_surfaceDialog->cubeType() == Cube::VdW); m_meshGen1->start(); // Calculate the negative part of the MO if this is an MO mesh if (m_surfaceDialog->cubeType() == Cube::MO || m_surfaceDialog->cubeType() == Cube::FromFile) { m_mesh2 = m_molecule->addMesh(); m_mesh2->setName(cube->name() + " negative"); m_mesh2->setIsoValue(-isoValue); m_mesh2->setCube(cube->id()); // Add pair information m_mesh1->setOtherMesh(m_mesh2->id()); m_mesh2->setOtherMesh(m_mesh1->id()); // Now generate the mesh if (!m_meshGen2) { m_meshGen2 = new MeshGenerator; connect(m_meshGen2, SIGNAL(finished()), this, SLOT(calculateDone())); } else { disconnect(m_meshGen2, 0, this, 0); delete m_meshGen2; m_meshGen2 = new MeshGenerator; connect(m_meshGen2, SIGNAL(finished()), this, SLOT(calculateDone())); } // Reverse the windings for the negative isosurface m_meshGen2->initialize(cube, m_mesh2, -isoValue, true); m_meshGen2->start(); } qDebug() << "calculateMesh called" << isoValue; } void SurfaceExtension::startCubeCalculation(Cube::Type type, int mo, bool &calculateCube) { switch (type) { case Cube::VdW: { Cube *cube = m_molecule->cubeById(m_cubes[0]); if (!cube) { // We need a new cube cube = newCube(); cube->setName(tr("VdW")); cube->setCubeType(Cube::VdW); m_cubes[0] = cube->id(); calculateVdW(cube); calculateCube = true; m_cube = cube; return; } // There is a valid cube - check the resolution else if (fabs(cube->spacing().x() - m_surfaceDialog->stepSize()) > 0.02) { // Resize the cube and recalculate at the desired resolution cube->setLimits(m_molecule, m_surfaceDialog->stepSize(), 2.5); calculateVdW(cube); calculateCube = true; m_cube = cube; return; } else { // The cube is valid, the resolution is valid. Return cube calculateCube = false; m_cube = cube; return; } } case Cube::ESP: // FIXME To be implemented - calculate an ESP cube return; case Cube::ElectronDensity: { qDebug() << "m_cubes.size() =" << m_cubes.size(); Cube *cube = m_molecule->cubeById(m_cubes[2]); if (!cube) { // We need a new cube cube = newCube(); cube->setName(tr("Electron Density")); cube->setCubeType(Cube::ElectronDensity); m_cubes[2] = cube->id(); m_cube = cube; m_qube = newQube(); calculateElectronDensity(m_qube); calculateCube = true; return; } // There is a valid cube - check the resolution else if (fabs(cube->spacing().x() - m_surfaceDialog->stepSize()) > 0.02) { // Resize the cube and recalculate at the desired resolution cube->setLimits(m_molecule, m_surfaceDialog->stepSize(), 2.5); m_cube = cube; m_qube = newQube(); calculateElectronDensity(m_qube); calculateCube = true; return; } else { // The cube is valid, the resolution is valid. Return cube calculateCube = false; m_cube = cube; return; } } case Cube::MO: { if ((mo - 1) >= m_moCubes.size()) m_moCubes.resize(mo - 1); // Attempt to retrieve the cube - will be 0 if no cube was calculated Cube *cube = m_molecule->cubeById(m_moCubes[mo - 1]); if (!cube) { // We need a new cube cube = newCube(); cube->setName(tr("MO %L1", "Molecular Orbital").arg(mo)); cube->setCubeType(Cube::MO); m_moCubes[mo - 1] = cube->id(); m_cube = cube; m_qube = newQube(); calculateMo(m_qube, mo); calculateCube = true; return; } // There is a valid cube - check the resolution else if (fabs(cube->spacing().x() - m_surfaceDialog->stepSize()) > 0.02) { qDebug() << "Recalculating MO cube, delta =" << fabs(cube->spacing().x() - m_surfaceDialog->stepSize()); // Resize the cube and recalculate at the desired resolution cube->setLimits(m_molecule, m_surfaceDialog->stepSize(), 2.5); m_cube = cube; m_qube = newQube(); calculateMo(m_qube, mo); calculateCube = true; return; } else { // The cube is valid, the resolution is valid. Return cube calculateCube = false; m_cube = cube; return; } } case Cube::FromFile: { // If it is a cube from a file, query the dialog for the cube id calculateCube = false; m_cube = m_molecule->cubeById(m_surfaceDialog->cubeFromFile()); return; } case Cube::None: default: // Do nothing return; } } void SurfaceExtension::calculate() { qDebug() << "Calculate called!"; // ESP cubes are not supported -- show an error and bail if (m_surfaceDialog->cubeType() == Cube::ESP) { QMessageBox::critical(m_surfaceDialog, tr("Error"), tr("Electrostatic potential surfaces are not yet " "supported.")); return; } m_calculationPhase = 0; m_cube = 0; m_qube = 0; m_cubeColor = 0; m_mesh1 = 0; m_mesh2 = 0; // Now attempt to begin the calculation bool calculateCube = false; startCubeCalculation(m_surfaceDialog->cubeType(), m_surfaceDialog->moNumber(), calculateCube); if (!calculateCube) { // Use the existing cube - calculate the isosurface m_calculationPhase = 2; calculateMesh(m_cube, m_surfaceDialog->isoValue()); } } void SurfaceExtension::calculateDone() { // Figure out what to do based on the calculation phase // 0 = main cube, 1 = color cube (optional) and 2 = mesh calculation switch (m_calculationPhase) { case 0: { // main cube was calculated - possibly kick off a color cube qDebug() << "Calculation phase 0 complete - now to phase 1..."; m_calculationPhase = 1; // Disconnect the signals and slots that we are now finished with if (m_surfaceDialog->cubeType() == Cube::MO || m_surfaceDialog->cubeType() == Cube::ElectronDensity) { if (m_basis) disconnect(&m_basis->watcher(), 0, this, 0); if (m_qube) { m_cube->setData(*m_qube->data()); delete m_qube; m_qube = 0; } } disconnect(m_progress, 0, this, 0); // FIXME Skipped for now! if (m_surfaceDialog->cubeColorType() != Cube::None) { } } case 1: { // color cube done (if needed) - now calculate the mesh m_calculationPhase = 2; // Disconnect the signals and slots that we are now finished with disconnect(m_progress, 0, this, 0); calculateMesh(m_cube, m_surfaceDialog->isoValue()); return; } case 2: { // Mesh calculated - now display it in an engine if possible if (!m_mesh2) m_calculationPhase = -1; // i.e. no calculation in progress any more else if (m_mesh1->stable() && m_mesh2 && m_mesh2->stable()) { // The MO meshes have both been calculated m_calculationPhase = -1; } else // Still calculating one of the meshes return; Engine *engine = m_surfaceDialog->currentEngine(); if (engine) { QSettings settings; engine->writeSettings(settings); // If there is a color by and it is 1 then do ESP estimation if (m_surfaceDialog->cubeColorType() == Cube::ESP) { qDebug() << "Calculating approximate ESP mapping..."; calculateESP(m_mesh1); if (m_mesh2) calculateESP(m_mesh2); settings.setValue("colorMode", 1); } else settings.setValue("colorMode", 0); settings.setValue("mesh1Id", static_cast(m_mesh1->id())); if (m_mesh2) settings.setValue("mesh2Id", static_cast(m_mesh2->id())); else settings.setValue("mesh2Id", qulonglong(FALSE_ID)); engine->readSettings(settings); engine->setEnabled(true); // Trigger a repaint with the new mesh /// FIXME Should be using m_molecule->update() to trigger a repaint in /// all open displays, this currently causes crashes - need to track /// down the cause. m_glwidget->update(); } else qDebug() << "Engine is null - no engines of this type loaded."; if (m_calculationPhase == -1) m_surfaceDialog->enableCalculation(true); } } } void SurfaceExtension::calculateCanceled() { /// FIXME - implement this code too! } } // End namespace Avogadro Q_EXPORT_PLUGIN2(surfaceextension, Avogadro::SurfaceExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/surfaces/molpro.h0000644000175000001440000000341312250371054023300 0ustar marcususers/********************************************************************** Molpro - parses MOLPRO files Copyright (C) 2009 Michael Banck based on gaussianfchk.cpp, Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef MOLPRO_H #define MOLPRO_H #include #include #include namespace Avogadro { class GaussianSet; class Molpro { public: Molpro(const QString &filename, GaussianSet *basis); ~Molpro(); void outputAll(); void reorderD5Orbitals(); private: QTextStream m_in; int m_electrons; unsigned int m_numBasisFunctions; std::vector m_aNums; std::vector m_aPos; std::vector m_shellTypes; std::vector m_shellNums; std::vector m_shelltoAtom; std::vector m_orbitalEnergy; std::vector m_MOcoeffs; }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/vdwsurface.cpp0000644000175000001440000001053112250371054024473 0ustar marcususers/********************************************************************** VdWSurface - Class to calculate Van der Waals cubes Copyright (C) 2008 Marcus D. Hanwell Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "vdwsurface.h" #include #include #include #include #include #include #include #include #include #include #include #include using std::vector; using Eigen::Vector3d; using Eigen::Vector3i; namespace Avogadro { struct VdWStruct { vector *atomPos; vector *atomRadius; Cube *cube; // The target cube, used to initialise temp cubes too unsigned int pos; // The index ofposition of the point to calculate the MO for }; VdWSurface::VdWSurface() { } VdWSurface::~VdWSurface() { } void VdWSurface::setAtoms(Molecule* mol) { // check if there is a selection in the current glwidget GLWidget *glwidget = GLWidget::current(); if (glwidget) { QList atoms = glwidget->selectedPrimitives().subList(Primitive::AtomType); if (!atoms.isEmpty()) { qDebug() << "VdWSurface: Number of atoms" << atoms.size(); m_atomPos.resize(atoms.size()); m_atomRadius.resize(atoms.size()); for (unsigned int i = 0; i < m_atomPos.size(); ++i) { Atom *atom = static_cast(atoms.at(i)); m_atomPos[i] = *atom->pos(); m_atomRadius[i] = OpenBabel::etab.GetVdwRad(atom->atomicNumber()); } return; } } qDebug() << "VdWSurface: Number of atoms" << mol->numAtoms(); m_atomPos.resize(mol->numAtoms()); m_atomRadius.resize(mol->numAtoms()); for (unsigned int i = 0; i < m_atomPos.size(); ++i) { m_atomPos[i] = *mol->atom(i)->pos(); m_atomRadius[i] = OpenBabel::etab.GetVdwRad(mol->atom(i)->atomicNumber()); } } void VdWSurface::calculateCube(Cube *cube) { // Set up the calculation and ideally use the new QtConcurrent code to m_VdWvector.resize(cube->data()->size()); m_cube = cube; for (int i = 0; i < m_VdWvector.size(); ++i) { m_VdWvector[i].atomPos = &m_atomPos; m_VdWvector[i].atomRadius = &m_atomRadius; m_VdWvector[i].cube = cube; m_VdWvector[i].pos = i; } // Lock the cube until we are done. cube->lock()->lockForWrite(); // Watch for the future connect(&m_watcher, SIGNAL(finished()), this, SLOT(calculationComplete())); // The main part of the mapped reduced function... m_future = QtConcurrent::map(m_VdWvector, VdWSurface::processPoint); // Connect our watcher to our future m_watcher.setFuture(m_future); } void VdWSurface::calculationComplete() { disconnect(&m_watcher, SIGNAL(finished()), this, SLOT(calculationComplete())); m_cube->lock()->unlock(); m_cube->update(); } void VdWSurface::processPoint(VdWStruct &vdw) { unsigned int size = vdw.atomPos->size(); // Calculate our position Vector3d pos = vdw.cube->position(vdw.pos); // Now calculate the value at this point in space double tmp = -1.0E+10; for (unsigned int i = 0; i < size; ++i) { double distance = std::abs((pos - (*vdw.atomPos)[i]).norm()) - (*vdw.atomRadius)[i]; if ((tmp < -1.0E+9) || (distance < tmp)) tmp = distance; } vdw.cube->setValue(vdw.pos, tmp); } } avogadro-1.1.1/libavogadro/src/extensions/surfaces/qtiocompressor/0000755000175000001440000000000012250371054024707 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/surfaces/qtiocompressor/qtiocompressor.h0000644000175000001440000000716612250371054030163 0ustar marcususers/**************************************************************************** ** ** This file is part of a Qt Solutions component. ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #ifndef QTIOCOMPRESSOR_H #define QTIOCOMPRESSOR_H #include #if defined(Q_WS_WIN) # if !defined(QT_QTIOCOMPRESSOR_EXPORT) && !defined(QT_QTIOCOMPRESSOR_IMPORT) # define QT_QTIOCOMPRESSOR_EXPORT # elif defined(QT_QTIOCOMPRESSOR_IMPORT) # if defined(QT_QTIOCOMPRESSOR_EXPORT) # undef QT_QTIOCOMPRESSOR_EXPORT # endif # define QT_QTIOCOMPRESSOR_EXPORT __declspec(dllimport) # elif defined(QT_QTIOCOMPRESSOR_EXPORT) # undef QT_QTIOCOMPRESSOR_EXPORT # define QT_QTIOCOMPRESSOR_EXPORT __declspec(dllexport) # endif #else # define QT_QTIOCOMPRESSOR_EXPORT #endif class QtIOCompressorPrivate; class QT_QTIOCOMPRESSOR_EXPORT QtIOCompressor : public QIODevice { Q_OBJECT public: enum StreamFormat { ZlibFormat, GzipFormat, RawZipFormat }; QtIOCompressor(QIODevice *device, int compressionLevel = 6, int bufferSize = 65500); ~QtIOCompressor(); void setStreamFormat(StreamFormat format); StreamFormat streamFormat() const; static bool isGzipSupported(); bool isSequential() const; bool open(OpenMode mode); void close(); void flush(); qint64 bytesAvailable() const; protected: qint64 readData(char * data, qint64 maxSize); qint64 writeData(const char * data, qint64 maxSize); private: static bool checkGzipSupport(const char * const versionString); QtIOCompressorPrivate *d_ptr; Q_DECLARE_PRIVATE(QtIOCompressor) Q_DISABLE_COPY(QtIOCompressor) }; #endif avogadro-1.1.1/libavogadro/src/extensions/surfaces/qtiocompressor/qtiocompressor.cpp0000644000175000001440000005070712250371054030515 0ustar marcususers/**************************************************************************** ** ** This file is part of a Qt Solutions component. ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Qt Software Information (qt-info@nokia.com) ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at qt-sales@nokia.com. ** ****************************************************************************/ #include "qtiocompressor.h" #include "zlib.h" #include typedef Bytef ZlibByte; typedef uInt ZlibSize; class QtIOCompressorPrivate { QtIOCompressor *q_ptr; Q_DECLARE_PUBLIC(QtIOCompressor) public: enum State { // Read state NotReadFirstByte, InStream, EndOfStream, // Write state NoBytesWritten, BytesWritten, // Common Closed, Error }; QtIOCompressorPrivate(QtIOCompressor *q_ptr, QIODevice *device, int compressionLevel, int bufferSize); ~QtIOCompressorPrivate(); void flushZlib(int flushMode); bool writeBytes(ZlibByte *buffer, ZlibSize outputSize); void setZlibError(const QString &erroMessage, int zlibErrorCode); QIODevice *device; bool manageDevice; z_stream zlibStream; const int compressionLevel; const ZlibSize bufferSize; ZlibByte *buffer; State state; QtIOCompressor::StreamFormat streamFormat; }; /*! \internal */ QtIOCompressorPrivate::QtIOCompressorPrivate(QtIOCompressor *q_ptr, QIODevice *device, int compressionLevel, int bufferSize) :q_ptr(q_ptr) ,device(device) ,compressionLevel(compressionLevel) ,bufferSize(bufferSize) ,buffer(new ZlibByte[bufferSize]) ,state(Closed) ,streamFormat(QtIOCompressor::ZlibFormat) { // Use default zlib memory management. zlibStream.zalloc = Z_NULL; zlibStream.zfree = Z_NULL; zlibStream.opaque = Z_NULL; } /*! \internal */ QtIOCompressorPrivate::~QtIOCompressorPrivate() { delete[] buffer; } /*! \internal Flushes the zlib stream. */ void QtIOCompressorPrivate::flushZlib(int flushMode) { // No input. zlibStream.next_in = 0; zlibStream.avail_in = 0; int status; do { zlibStream.next_out = buffer; zlibStream.avail_out = bufferSize; status = deflate(&zlibStream, flushMode); if (status != Z_OK && status != Z_STREAM_END) { state = QtIOCompressorPrivate::Error; setZlibError(QT_TRANSLATE_NOOP("QtIOCompressor", "Internal zlib error when compressing: "), status); return; } ZlibSize outputSize = bufferSize - zlibStream.avail_out; // Try to write data from the buffer to to the underlying device, return on failure. if (!writeBytes(buffer, outputSize)) return; // If the mode is Z_FNISH we must loop until we get Z_STREAM_END, // else we loop as long as zlib is able to fill the output buffer. } while ((flushMode == Z_FINISH && status != Z_STREAM_END) || (flushMode != Z_FINISH && zlibStream.avail_out == 0)); if (flushMode == Z_FINISH) Q_ASSERT(status == Z_STREAM_END); else Q_ASSERT(status == Z_OK); } /*! \internal Writes outputSize bytes from buffer to the inderlying device. */ bool QtIOCompressorPrivate::writeBytes(ZlibByte *buffer, ZlibSize outputSize) { Q_Q(QtIOCompressor); ZlibSize totalBytesWritten = 0; // Loop until all bytes are written to the underlying device. do { const qint64 bytesWritten = device->write(reinterpret_cast(buffer), outputSize); if (bytesWritten == -1) { q->setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor", "Error writing to underlying device: ") + device->errorString()); return false; } totalBytesWritten += bytesWritten; } while (totalBytesWritten != outputSize); // put up a flag so that the device will be flushed on close. state = BytesWritten; return true; } /*! \internal Sets the error string to errorMessage + zlib error string for zlibErrorCode */ void QtIOCompressorPrivate::setZlibError(const QString &errorMessage, int zlibErrorCode) { Q_Q(QtIOCompressor); // Watch out, zlibErrorString may be null. const char * const zlibErrorString = zError(zlibErrorCode); QString errorString; if (zlibErrorString) errorString = errorMessage + zlibErrorString; else errorString = errorMessage + " Unknown error, code " + QString::number(zlibErrorCode); q->setErrorString(errorString); } /*! \class QtIOCompressor \brief The QtIOCompressor class is a QIODevice that compresses data streams. A QtIOCompressor object is constructed with a pointer to an underlying QIODevice. Data written to the QtIOCompressor object will be compressed before it is written to the underlying QIODevice. Similary, if you read from the QtIOCompressor object, the data will be read from the underlying device and then decompressed. QtIOCompressor is a sequential device, which means that it does not support seeks or random access. Internally, QtIOCompressor uses the zlib library to compress and uncompress data. Usage examples: Writing compressed data to a file: \code QFile file("foo"); QtIOCompressor compressor(&file); compressor.open(QIODevice::WriteOnly); compressor.write(QByteArray() << "The quick brown fox"); compressor.close(); \endcode Reading compressed data from a file: \code QFile file("foo"); QtIOCompressor compressor(&file); compressor.open(QIODevice::ReadOnly); const QByteArray text = compressor.readAll(); compressor.close(); \endcode QtIOCompressor can also read and write compressed data in different compressed formats, ref. StreamFormat. Use setStreamFormat() before open() to select format. */ /*! \enum QtIOCompressor::StreamFormat This enum specifies which stream format to use. \value ZlibFormat: This is the default and has the smallest overhead. \value GzipFormat: This format is compatible with the gzip file format, but has more overhead than ZlibFormat. Note: requires zlib version 1.2.x or higher at runtime. \value RawZipFormat: This is compatible with the most common compression method of the data blocks contained in ZIP archives. Note: ZIP file headers are not read or generated, so setting this format, by itself, does not let QtIOCompressor read or write ZIP files. Ref. the ziplist example program. \sa setStreamFormat() */ /*! Constructs a QtIOCompressor using the given \a device as the underlying device. The allowed value range for \a compressionLevel is 0 to 9, where 0 means no compression and 9 means maximum compression. The default value is 6. \a bufferSize specifies the size of the internal buffer used when reading from and writing to the underlying device. The default value is 65KB. Using a larger value allows for faster compression and deompression at the expense of memory usage. */ QtIOCompressor::QtIOCompressor(QIODevice *device, int compressionLevel, int bufferSize) :d_ptr(new QtIOCompressorPrivate(this, device, compressionLevel, bufferSize)) {} /*! Destroys the QtIOCompressor, closing it if necessary. */ QtIOCompressor::~QtIOCompressor() { Q_D(QtIOCompressor); close(); delete d; } /*! Sets the format on the compressed stream to \a format. \sa QtIOCompressor::StreamFormat */ void QtIOCompressor::setStreamFormat(StreamFormat format) { Q_D(QtIOCompressor); // Print a waning if the compile-time version of zlib does not support gzip. if (format == GzipFormat && checkGzipSupport(ZLIB_VERSION) == false) qWarning("QtIOCompressor::setStreamFormat: zlib 1.2.x or higher is " "required to use the gzip format. Current version is: %s", ZLIB_VERSION); d->streamFormat = format; } /*! Returns the format set on the compressed stream. \sa QtIOCompressor::StreamFormat */ QtIOCompressor::StreamFormat QtIOCompressor::streamFormat() const { Q_D(const QtIOCompressor); return d->streamFormat; } /*! Returns true if the zlib library in use supports the gzip format, false otherwise. */ bool QtIOCompressor::isGzipSupported() { return checkGzipSupport(zlibVersion()); } /*! \reimp */ bool QtIOCompressor::isSequential() const { return true; } /*! Opens the QtIOCompressor in \a mode. Only ReadOnly and WriteOnly is supported. This functon will return false if you try to open in other modes. If the underlying device is not opened, this function will open it in a suitable mode. If this happens the device will also be closed when close() is called. If the underlying device is already opened, its openmode must be compatable with \a mode. Returns true on success, false on error. \sa close() */ bool QtIOCompressor::open(OpenMode mode) { Q_D(QtIOCompressor); if (isOpen()) { qWarning("QtIOCompressor::open: device already open"); return false; } // Check for correct mode: ReadOnly xor WriteOnly const bool read = (bool)(mode & ReadOnly); const bool write = (bool)(mode & WriteOnly); const bool both = (read && write); const bool neither = !(read || write); if (both || neither) { qWarning("QtIOCompressor::open: QtIOCompressor can only be opened in the ReadOnly or WriteOnly modes"); return false; } // If the underlying device is open, check that is it opened in a compatible mode. if (d->device->isOpen()) { d->manageDevice = false; const OpenMode deviceMode = d->device->openMode(); if (read && !(deviceMode & ReadOnly)) { qWarning("QtIOCompressor::open: underlying device must be open in one of the ReadOnly or WriteOnly modes"); return false; } else if (write && !(deviceMode & WriteOnly)) { qWarning("QtIOCompressor::open: underlying device must be open in one of the ReadOnly or WriteOnly modes"); return false; } // If the underlying device is closed, open it. } else { d->manageDevice = true; if (d->device->open(mode) == false) { setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor", "Error opening underlying device: ") + d->device->errorString()); return false; } } // Initialize zlib for deflating or inflating. // The second argument to inflate/deflateInit2 is the windowBits parameter, // which also controls what kind of compression stream headers to use. // The default value for this is 15. Passing a value greater than 15 // enables gzip headers and then subtracts 16 form the windowBits value. // (So passing 31 gives gzip headers and 15 windowBits). Passing a negative // value selects no headers hand then negates the windowBits argument. int windowBits; switch (d->streamFormat) { case QtIOCompressor::GzipFormat: windowBits = 31; break; case QtIOCompressor::RawZipFormat: windowBits = -15; break; default: windowBits = 15; } int status; if (read) { d->state = QtIOCompressorPrivate::NotReadFirstByte; d->zlibStream.avail_in = 0; d->zlibStream.next_in = 0; if (d->streamFormat == QtIOCompressor::ZlibFormat) { status = inflateInit(&d->zlibStream); } else { if (checkGzipSupport(zlibVersion()) == false) { setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor::open", "The gzip format not supported in this version of zlib.")); return false; } status = inflateInit2(&d->zlibStream, windowBits); } } else { d->state = QtIOCompressorPrivate::NoBytesWritten; if (d->streamFormat == QtIOCompressor::ZlibFormat) status = deflateInit(&d->zlibStream, d->compressionLevel); else status = deflateInit2(&d->zlibStream, d->compressionLevel, Z_DEFLATED, windowBits, 8, Z_DEFAULT_STRATEGY); } // Handle error. if (status != Z_OK) { d->setZlibError(QT_TRANSLATE_NOOP("QtIOCompressor::open", "Internal zlib error: "), status); return false; } return QIODevice::open(mode); } /*! Closes the QtIOCompressor, and also the underlying device if it was opened by QtIOCompressor. \sa open() */ void QtIOCompressor::close() { Q_D(QtIOCompressor); if (isOpen() == false) return; // Flush and close the zlib stream. if (openMode() & ReadOnly) { d->state = QtIOCompressorPrivate::NotReadFirstByte; inflateEnd(&d->zlibStream); } else { if (d->state == QtIOCompressorPrivate::BytesWritten) { // Only flush if we have written anything. d->state = QtIOCompressorPrivate::NoBytesWritten; d->flushZlib(Z_FINISH); } deflateEnd(&d->zlibStream); } // Close the underlying device if we are managing it. if (d->manageDevice) d->device->close(); QIODevice::close(); } /*! Flushes the internal buffer. Each time you call flush, all data written to the QtIOCompressor is compressed and written to the underlying device. Calling this function can reduce the compression ratio. The underlying device is not flushed. Calling this function when QtIOCompressor is in ReadOnly mode has no effect. */ void QtIOCompressor::flush() { Q_D(QtIOCompressor); if (isOpen() == false || openMode() & ReadOnly) return; d->flushZlib(Z_SYNC_FLUSH); } /*! Returns 1 if there might be data available for reading, or 0 if there is no data available. There is unfortunately no way of knowing how much data there is available when dealing with compressed streams. Also, since the remaining compressed data might be a part of the meta-data that ends the compressed stream (and therefore will yield no uncompressed data), you cannot assume that a read after getting a 1 from this function will return data. */ qint64 QtIOCompressor::bytesAvailable() const { Q_D(const QtIOCompressor); if ((openMode() & ReadOnly) == false) return 0; int numBytes = 0; switch (d->state) { case QtIOCompressorPrivate::NotReadFirstByte: numBytes = d->device->bytesAvailable(); break; case QtIOCompressorPrivate::InStream: numBytes = 1; break; case QtIOCompressorPrivate::EndOfStream: case QtIOCompressorPrivate::Error: default: numBytes = 0; break; }; numBytes += QIODevice::bytesAvailable(); if (numBytes > 0) return 1; else return 0; } /*! \internal Reads and decompresses data from the underlying device. */ qint64 QtIOCompressor::readData(char *data, qint64 maxSize) { Q_D(QtIOCompressor); if (d->state == QtIOCompressorPrivate::EndOfStream) return 0; if (d->state == QtIOCompressorPrivate::Error) return -1; // We are ging to try to fill the data buffer d->zlibStream.next_out = reinterpret_cast(data); d->zlibStream.avail_out = maxSize; int status; do { // Read data if if the input buffer is empty. There could be data in the buffer // from a previous readData call. if (d->zlibStream.avail_in == 0) { qint64 bytesAvalible = d->device->read(reinterpret_cast(d->buffer), d->bufferSize); d->zlibStream.next_in = d->buffer; d->zlibStream.avail_in = bytesAvalible; if (bytesAvalible == -1) { d->state = QtIOCompressorPrivate::Error; setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor", "Error reading data from underlying device: ") + d->device->errorString()); return -1; } if (d->state != QtIOCompressorPrivate::InStream) { // If we are not in a stream and get 0 bytes, we are probably trying to read from an empty device. if(bytesAvalible == 0) return 0; else if (bytesAvalible > 0) d->state = QtIOCompressorPrivate::InStream; } } // Decompress. status = inflate(&d->zlibStream, Z_SYNC_FLUSH); switch (status) { case Z_NEED_DICT: case Z_DATA_ERROR: case Z_MEM_ERROR: d->state = QtIOCompressorPrivate::Error; d->setZlibError(QT_TRANSLATE_NOOP("QtIOCompressor", "Internal zlib error when decompressing: "), status); return -1; case Z_BUF_ERROR: // No more input and zlib can not privide more output - Not an error, we can try to read again when we have more input. return 0; break; } // Loop util data buffer is full or we reach the end of the input stream. } while (d->zlibStream.avail_out != 0 && status != Z_STREAM_END); if (status == Z_STREAM_END) { d->state = QtIOCompressorPrivate::EndOfStream; // Unget any data left in the read buffer. for (int i = d->zlibStream.avail_in; i >= 0; --i) d->device->ungetChar(*reinterpret_cast(d->zlibStream.next_in + i)); } const ZlibSize outputSize = maxSize - d->zlibStream.avail_out; return outputSize; } /*! \internal Compresses and writes data to the underlying device. */ qint64 QtIOCompressor::writeData(const char *data, qint64 maxSize) { if (maxSize < 1) return 0; Q_D(QtIOCompressor); d->zlibStream.next_in = reinterpret_cast(const_cast(data)); d->zlibStream.avail_in = maxSize; if (d->state == QtIOCompressorPrivate::Error) return -1; do { d->zlibStream.next_out = d->buffer; d->zlibStream.avail_out = d->bufferSize; const int status = deflate(&d->zlibStream, Z_NO_FLUSH); if (status != Z_OK) { d->state = QtIOCompressorPrivate::Error; d->setZlibError(QT_TRANSLATE_NOOP("QtIOCompressor", "Internal zlib error when compressing: "), status); return -1; } ZlibSize outputSize = d->bufferSize - d->zlibStream.avail_out; // Try to write data from the buffer to to the underlying device, return -1 on failure. if (d->writeBytes(d->buffer, outputSize) == false) return -1; } while (d->zlibStream.avail_out == 0); // run until output is not full. Q_ASSERT(d->zlibStream.avail_in == 0); return maxSize; } /* \internal Checks if the run-time zlib version is 1.2.x or higher. */ bool QtIOCompressor::checkGzipSupport(const char * const versionString) { if (strlen(versionString) < 3) return false; if (versionString[0] == '0' || (versionString[0] == '1' && (versionString[2] == '0' || versionString[2] == '1' ))) return false; return true; } avogadro-1.1.1/libavogadro/src/extensions/surfaces/CMakeLists.txt0000644000175000001440000000212112250371054024352 0ustar marcususersinclude_directories(${CMAKE_CURRENT_BINARY_DIR}) # Also, add the openqube library unless we are using the system openqube option(Avogadro_USE_SYSTEM_OPENQUBE "Use the system OpenQube?" OFF) if(Avogadro_USE_SYSTEM_OPENQUBE) find_package(OpenQube REQUIRED) else() add_subdirectory(openqube) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) endif() set(LINK_LIBS OpenQube avogadro ${ZLIB_LIBRARIES}) set(PLUGIN_LABEL extensions) set(PLUGIN_TARGET extensions) include_directories(${ZLIB_INCLUDE_DIR}) ### Surfaces set(surfaceextension_SRCS surfaceextension.cpp surfacedialog.cpp vdwsurface.cpp qtiocompressor/qtiocompressor.cpp ) set(orbitalextension_SRCS orbitalextension.cpp orbitalsettingsdialog.cpp orbitaltablemodel.cpp orbitalwidget.cpp vdwsurface.cpp qtiocompressor/qtiocompressor.cpp htmldelegate.cpp ) set(orbitalextension_UIS orbitalwidget.ui orbitalsettingsdialog.ui ) avogadro_plugin_nogl(surfaceextension "${surfaceextension_SRCS}" surfacedialog.ui ) avogadro_plugin_nogl(orbitalextension "${orbitalextension_SRCS}" "${orbitalextension_UIS}" ) avogadro-1.1.1/libavogadro/src/extensions/surfaces/htmldelegate.h0000644000175000001440000000271612250371054024434 0ustar marcususers/********************************************************************** HTMLDelegate - Styled Text Delegate by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef HTMLDELEGATE_H #define HTMLDELEGATE_H #include namespace Avogadro { // Allow HTML text (e.g., superscripts & subscripts) to be in a table // Modified from http://stackoverflow.com/questions/1956542/how-to-make-item-view-render-rich-html-text-in-qt // Original code by StackOverflow users serge_gubenko and Anton class HTMLDelegate : public QStyledItemDelegate { Q_OBJECT public: HTMLDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {}; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; void paint(QPainter *p, const QStyleOptionViewItem &o, const QModelIndex &ind) const; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/forcefieldextension.h0000644000175000001440000001224512250371054024217 0ustar marcususers/********************************************************************** forcefieldextension.h - Force field Plugin for Avogadro Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006-2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef FORCEFIELDEXTENSION_H #define FORCEFIELDEXTENSION_H #include "forcefielddialog.h" #include "conformersearchdialog.h" #include "constraintsmodel.h" #include "constraintsdialog.h" #include #include #include #include #include #include #include #include #include #include #ifndef BUFF_SIZE #define BUFF_SIZE 256 #endif class QProgressDialog; namespace Avogadro { class ForceFieldExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("ForceField", tr("ForceField"), tr("Optimize molecules and generate conformers using molecular mechanics force fields")) public: //! Constructor ForceFieldExtension(QObject *parent=0); //! Deconstructor virtual ~ForceFieldExtension(); /** @return a menu path for the extension's actions */ virtual QString menuPath(QAction *action) const; //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); //@} void setMolecule(Molecule *molecule); private: OpenBabel::OBForceField* m_forceField; ConstraintsModel* m_constraints; QList m_actions; ForceFieldDialog *m_dialog; ConformerSearchDialog *m_conformerDialog; ConstraintsDialog *m_constraintsDialog; std::vector m_forcefieldList; Molecule *m_molecule; }; class ForceFieldThread : public QThread { Q_OBJECT public: ForceFieldThread(Molecule *molecule, OpenBabel::OBForceField* forceField, ConstraintsModel* constraints, int forceFieldID, int nSteps, int algorithm, int convergence, int task, QObject *parent=0); void run(); int cycles() const; void setTask(int task); void setNumConformers(int numConformers); void setNumChildren(int numChildren); void setMutability(int mutability); void setConvergence(int convergence); void setMethod(int method); Q_SIGNALS: void stepsTaken(int steps); void message(const QString &m); public Q_SLOTS: void stop(); private: void copyConformers(); Molecule *m_molecule; ConstraintsModel* m_constraints; QMutex m_mutex; int m_cycles; int m_forceFieldID; int m_nSteps; int m_algorithm; int m_convergence; int m_task; int m_numConformers; int m_numChildren; int m_mutability; int m_method; OpenBabel::OBForceField* m_forceField; //ForceFieldDialog *m_Dialog; ConformerSearchDialog *m_conformerDialog; ConstraintsDialog *m_ConstraintsDialog; bool m_stop; }; class ForceFieldCommand : public QObject, public QUndoCommand { Q_OBJECT public: ForceFieldCommand(Molecule *molecule, OpenBabel::OBForceField *forcefield, ConstraintsModel* constraints, int forceFieldID, int nSteps, int algorithm, int convergence, int task); ~ForceFieldCommand(); virtual void redo(); virtual void undo(); virtual bool mergeWith ( const QUndoCommand * command ); virtual int id() const; void detach() const; void cleanup(); void setTask(int task); void setNumConformers(int numConformers); void setNumChildren(int numChildren); void setMutability(int mutability); void setConvergence(int convergence); void setMethod(int method); ForceFieldThread *thread() const; QProgressDialog *progressDialog() const; Q_SIGNALS: void message(const QString &m); private: Molecule m_moleculeCopy; int m_nSteps; int m_task; int m_numConformers; int m_numChildren; int m_mutability; int m_convergence; int m_method; Molecule *m_molecule; ConstraintsModel* m_constraints; ForceFieldThread *m_thread; QProgressDialog *m_dialog; mutable bool m_detached; }; class ForceFieldExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(ForceFieldExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/selectextension.cpp0000644000175000001440000002047112250371054023727 0ustar marcususers/********************************************************************** Selection - Various selection options for Avogadro Copyright (C) 2006-2007 by Donald Ephraim Curtis Copyright (C) 2006-2007 by Geoffrey R. Hutchison Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "selectextension.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { enum SelectionExtensionIndex { InvertIndex = 0, ElementIndex, ResidueIndex, SolventIndex, SMARTSIndex, AddNamedIndex, SeparatorIndex }; SelectExtension::SelectExtension(QObject *parent) : Extension(parent) { m_periodicTable = new PeriodicTableView(qobject_cast(parent)); connect( m_periodicTable, SIGNAL( elementChanged(int) ), this, SLOT( selectElement(int) )); QAction *action; action = new QAction(this); action->setText(tr("&Invert Selection")); action->setData(InvertIndex); m_actions.append(action); action = new QAction(this); action->setText(tr("Select SMARTS...")); action->setData(SMARTSIndex); m_actions.append(action); action = new QAction(this); action->setText(tr("Select by Element...")); action->setData(ElementIndex); m_actions.append(action); action = new QAction(this); action->setText(tr("Select by Residue...")); action->setData(ResidueIndex); m_actions.append(action); action = new QAction(this); action->setText(tr("Select Solvent")); action->setData(SolventIndex); m_actions.append(action); action = new QAction( this ); action->setSeparator(true); action->setData(SeparatorIndex); m_actions.append( action ); action = new QAction(this); action->setText(tr("Add Named Selection...")); action->setData(AddNamedIndex); m_actions.append(action); } SelectExtension::~SelectExtension() { } QList SelectExtension::actions() const { return m_actions; } QString SelectExtension::menuPath(QAction *) const { return tr("&Select"); } void SelectExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* SelectExtension::performAction(QAction *action, GLWidget *widget) { int i = action->data().toInt(); // dispatch to the appropriate method for that selection command switch (i) { case InvertIndex: invertSelection(widget); break; case SMARTSIndex: selectSMARTS(widget); break; case ElementIndex: m_widget = widget; m_periodicTable->show(); break; case ResidueIndex: selectResidue(widget); break; case SolventIndex: selectSolvent(widget); break; case AddNamedIndex: addNamedSelection(widget); break; default: break; } // Selections are per-view and as such are not saved or undo-able return NULL; } // Helper function -- invert selection // Called by performAction() void SelectExtension::invertSelection(GLWidget *widget) { widget->toggleSelected(); widget->update(); // make sure to call for a redraw or you won't see it return; } // Helper function -- handle SMARTS selections // Called by performAction() void SelectExtension::selectSMARTS(GLWidget *widget) { bool ok; QString pattern = QInputDialog::getText(qobject_cast(parent()), tr("SMARTS Selection"), tr("SMARTS pattern to select"), QLineEdit::Normal, "", &ok); if (ok && !pattern.isEmpty()) { OBSmartsPattern smarts; smarts.Init(pattern.toStdString()); OpenBabel::OBMol obmol = m_molecule->OBMol(); smarts.Match(obmol); // if we have matches, select them if(smarts.NumMatches() != 0) { QList matchedAtoms; vector< vector > mapList = smarts.GetUMapList(); vector< vector >::iterator i; // a set of matching atoms vector::iterator j; // atom ids in each match for (i = mapList.begin(); i != mapList.end(); ++i) { for (j = i->begin(); j != i->end(); ++j) { matchedAtoms.append(m_molecule->atom(obmol.GetAtom(*j)->GetIdx()-1)); } } widget->clearSelected(); widget->setSelected(matchedAtoms, true); widget->update(); } // end matches } return; } // Helper function -- handle element selections // Connected to signal from PeriodicTableView void SelectExtension::selectElement(int element) { if(m_widget) { QList selectedAtoms; QList atoms = m_molecule->atoms(); foreach (Atom *atom, atoms) { if (atom->atomicNumber() == element) { selectedAtoms.append(atom); } } m_widget->clearSelected(); m_widget->setSelected(selectedAtoms, true); m_widget->update(); } } // Helper function -- handle residue selections // Called by performAction() void SelectExtension::selectResidue(GLWidget *widget) { QList selectedAtoms; bool ok; QString resname = QInputDialog::getText(qobject_cast(parent()), tr("Select by residue"), tr("Residue name"), QLineEdit::Normal, "", &ok); QList residues = m_molecule->residues(); foreach (Residue *res, residues) { if (res->name() == resname) { foreach(unsigned long atom, res->atoms()) { selectedAtoms.push_back(m_molecule->atomById(atom)); } foreach(unsigned long bond, res->bonds()) { selectedAtoms.push_back(m_molecule->bondById(bond)); } } } widget->clearSelected(); widget->setSelected(selectedAtoms, true); widget->update(); } // Helper function -- handle solvent selections // Called by performAction() void SelectExtension::selectSolvent(GLWidget *widget) { QList selectedAtoms; QList residues = m_molecule->residues(); foreach (Residue *res, residues) { if (res->name() == "HOH") { foreach(unsigned long atom, res->atoms()) { selectedAtoms.push_back(m_molecule->atomById(atom)); } foreach(unsigned long bond, res->bonds()) { selectedAtoms.push_back(m_molecule->bondById(bond)); } } } widget->clearSelected(); widget->setSelected(selectedAtoms, true); widget->update(); } void SelectExtension::addNamedSelection(GLWidget *widget) { PrimitiveList primitives = widget->selectedPrimitives(); if (primitives.isEmpty()) { QMessageBox::warning( widget, tr( "Avogadro" ), tr( "There is no current selection." )); return; } bool ok; QString name = QInputDialog::getText(qobject_cast(parent()), tr("Add Named Selection"), tr("name"), QLineEdit::Normal, "", &ok); if (!ok) return; if (name.isEmpty()) { QMessageBox::warning( widget, tr( "Avogadro" ), tr( "Name cannot be empty." )); return; } if (!widget->addNamedSelection(name, primitives)) { QMessageBox::warning( widget, tr( "Avogadro" ), tr( "There is already a selection with this name." )); } } } // end namespace Avogadro Q_EXPORT_PLUGIN2(selectextension, Avogadro::SelectExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/sortfiltertreeproxymodel.cpp0000644000175000001440000000655012250371054025715 0ustar marcususers/********************************************************************** SortFilterTreeProxyModel - Sorting / Filter proxy which works on trees Based on code from http://kodeclutz.blogspot.com/2008/12/filtering-qtreeview.html This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "sortfiltertreeproxymodel.h" #include namespace Avogadro { // Custom class for Avogadro to handle filtering files // Directories are at most 2 levels deep until we get to files bool SortFilterTreeProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const { // First we see if we're the source root node QModelIndex sourceIndex = sourceModel()->index(sourceRow, 0, sourceParent); if (!sourceIndex.isValid() || !sourceParent.isValid()) return true; // viewer will handle filtering // Make sure the root is always accepted, or we become rootless // See http://stackoverflow.com/questions/3212392/qtreeview-qfilesystemmodel-setrootpath-and-qsortfilterproxymodel-with-regexp-fo if (m_sourceRoot.isValid() && sourceIndex == m_sourceRoot) { return true; // true root, always accept } // Now we see if we're a child of the root // If not, we accept -- only filter under *our* tree // Along the way, we'll see if a parent matches the filter if (sourceParent != m_sourceRoot) { bool childOfRoot = false; QModelIndex parent = sourceParent; for (int depth = 3; depth > 0; depth--) { if (sourceModel()->data(parent).toString().contains(filterRegExp())) return true; // a parent matches the pattern parent = parent.parent(); if (!parent.isValid()) return true; // tree view handles filtering, and we ascended too far if (parent == m_sourceRoot) { childOfRoot = true; break; } } // OK, we've gone up the tree, did we find our root? if (!childOfRoot) return true; } // else, sourceParent is a root, so we're good to filter // Check if the data for this row matches. If so, the default is to accept QString data = sourceModel()->data(sourceIndex).toString(); if (data.contains(filterRegExp())) return true; // Now we have to check the child nodes // We'll show the row if any child is accepted // (i.e., if a file matches, we'll show the directory path to it) // Try to fetchMore() first sourceModel()->fetchMore(sourceIndex); for(int i = 0; i < sourceModel()->rowCount(sourceIndex); ++i) { QModelIndex subRow = sourceModel()->index(i, 0, sourceIndex); if (!subRow.isValid()) continue; QString rowData = sourceModel()->data(subRow).toString(); if (rowData.contains(filterRegExp())) return true; } return false; // nothing matched } } avogadro-1.1.1/libavogadro/src/extensions/fileimportextension.cpp0000644000175000001440000001465312250371054024627 0ustar marcususers/********************************************************************** FileImportExtension - Extension for generating POV-Ray rendered images Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "fileimportextension.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; using namespace std; namespace Avogadro { FileImportExtension::FileImportExtension(QObject* parent) : Extension(parent), m_glwidget(0), m_molecule(0), m_fileImportDialog(0) { QAction* action = new QAction(this); action->setText(tr("Trajectory...")); m_actions.append(action); } FileImportExtension::~FileImportExtension() { if (m_fileImportDialog) { delete m_fileImportDialog; m_fileImportDialog = 0; } } QList FileImportExtension::actions() const { return m_actions; } QString FileImportExtension::menuPath(QAction*) const { return tr("&File") + '>' + tr("Import"); } QUndoCommand* FileImportExtension::performAction(QAction *, GLWidget *widget) { m_glwidget = widget; if (!m_fileImportDialog) { m_fileImportDialog = new FileImportDialog(); connect(m_fileImportDialog->selectFileName, SIGNAL(clicked()), this, SLOT(selectFileName())); connect(m_fileImportDialog->selectFileName2, SIGNAL(clicked()), this, SLOT(selectFileName2())); connect(m_fileImportDialog->buttonBox, SIGNAL(accepted()), this, SLOT(import())); connect(m_fileImportDialog->buttonBox, SIGNAL(rejected()), m_fileImportDialog, SLOT(hide())); m_fileImportDialog->show(); } else { m_fileImportDialog->show(); } return 0; } void FileImportExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); } void FileImportExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); } void FileImportExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } void FileImportExtension::readParmFile(Molecule *mol) { // Now the task of reading the parm file. Right now just reading in bonds QFile file(m_fileImportDialog->fileName2->text()); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug() << "Unable to read file" << m_fileImportDialog->fileName2->text(); return; } QTextStream in(&file); while (!in.atEnd()) { processLine(&in, mol); } } void FileImportExtension::processLine(QTextStream *in, Molecule *mol) { // First truncate the line, remove trailing white space and check QString line = in->readLine(); QString key = line; key = key.trimmed(); if (key == "%FLAG BONDS_WITHOUT_HYDROGEN") { qDebug() << "Reading in bonds..."; line = in->readLine(); // Throw away this line line = ""; QStringList list; while (line[0] != '%') { line = in->readLine(); list += line.split(' ', QString::SkipEmptyParts); if (list.size() == 30) { for (int i = 0; i <= 27; i += 3) { Bond *bond = mol->addBond(); bond->setAtoms(list.at(i).toInt()/3, list.at(i+1).toInt()/3); //bond->setOrder(list.at(i+2).toInt()); } list.clear(); } } } } void FileImportExtension::import() { QString fileName = m_fileImportDialog->fileName->text(); QApplication::setOverrideCursor(Qt::WaitCursor); /* OBConversion conv; OBFormat *inFormat = conv.FormatFromExt(( fileName.toAscii() ).data() ); if ( !inFormat || !conv.SetInFormat( inFormat ) ) { QApplication::restoreOverrideCursor(); QMessageBox::warning(m_fileImportDialog, tr("Avogadro"), tr("Cannot read file format of file %1.").arg(fileName)); return; } ifstream ifs; ifs.open((fileName.toAscii()).data()); if (!ifs) { // shouldn't happen, already checked file above QApplication::restoreOverrideCursor(); QMessageBox::warning(m_fileImportDialog, tr("Avogadro"), tr("Cannot read file %1.").arg( fileName ) ); return; } OBMol *obmol = new OBMol; */ // Turn off bond perception Molecule *mol = MoleculeFile::readMolecule(fileName, "", "b"); if (mol) { Molecule *oldMol = m_molecule; qDebug() << "Attempting to read parm file..."; readParmFile(mol); qDebug() << "Parm file read..."; emit moleculeChanged(mol, Extension::DeleteOld | Extension::NewWindow); oldMol->deleteLater(); } else qDebug() << "Reading molecule file failed..."; QApplication::restoreOverrideCursor(); } void FileImportExtension::selectFileName() { QString fileName = QFileDialog::getOpenFileName(m_fileImportDialog, tr("Open chemical file format"), m_fileImportDialog->fileName->text(), tr("Chemical files (*.xyz)")); m_fileImportDialog->fileName->setText(fileName); } void FileImportExtension::selectFileName2() { QString fileName = QFileDialog::getOpenFileName(m_fileImportDialog, tr("Open parameter file"), m_fileImportDialog->fileName->text(), tr("Chemical files (*.parm7)")); m_fileImportDialog->fileName2->setText(fileName); } } // End namespace Avogadro Q_EXPORT_PLUGIN2(fileimportextension, Avogadro::FileImportExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/supercellextension.cpp0000644000175000001440000002512012250371054024442 0ustar marcususers/********************************************************************** SuperCellExtension - Extension for creating super cells Copyright (C) 2009 Marcus D. Hanwell Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "supercellextension.h" #include "supercelldialog.h" #include #include #include #include #include #include #include #include #include #include namespace Avogadro { using OpenBabel::OBUnitCell; using OpenBabel::vector3; using OpenBabel::OBMol; using OpenBabel::OBAtom; using OpenBabel::OBMolAtomIter; using OpenBabel::SpaceGroup; using std::list; using std::vector; SuperCellExtension::SuperCellExtension(QObject *parent) : Extension(parent), m_dialog(0), m_widget(0), m_molecule(0) { QAction *action = new QAction(this); action->setText(tr("Super Cell Builder...")); m_actions.append(action); } SuperCellExtension::~SuperCellExtension() { } QList SuperCellExtension::actions() const { return m_actions; } QString SuperCellExtension::menuPath(QAction *) const { return tr("&Build"); } void SuperCellExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* SuperCellExtension::performAction(QAction *, GLWidget *widget) { if (m_molecule == 0) return 0; m_widget = widget; OBUnitCell *uc = m_molecule->OBUnitCell(); if (uc == 0) { QMessageBox::warning(qobject_cast(parent()), tr("Warning"), tr("This document is currently an isolated molecule. " "You need to create a unit cell.")); return 0; } if (!m_dialog) { m_dialog = new SuperCellDialog(qobject_cast(parent())); connect(m_dialog, SIGNAL(fillCell()), this, SLOT(fillCell())); } m_dialog->aCells(widget->aCells()); m_dialog->bCells(widget->bCells()); m_dialog->cCells(widget->cCells()); m_dialog->show(); return NULL; } void SuperCellExtension::cellParametersChanged(double a, double b, double c) { if (m_molecule) { OBUnitCell *uc = m_molecule->OBUnitCell(); if (!uc) // Should not happen return; uc->SetData(a * uc->GetA(), b * uc->GetB(), c * uc->GetC(), uc->GetAlpha(), uc->GetBeta(), uc->GetGamma()); m_molecule->setOBUnitCell(uc); m_molecule->update(); if (m_widget) m_widget->update(); } // end if molecule } // end parameters changed static vector3 transformedFractionalCoordinate(vector3 originalCoordinate) { // ensure the fractional coordinate is entirely within the unit cell vector3 returnValue(originalCoordinate); // So if we have -2.08, we take -2.08 - (-2) = -0.08 .... almost what we want returnValue.SetX(originalCoordinate.x() - int(originalCoordinate.x()) ); returnValue.SetY(originalCoordinate.y() - int(originalCoordinate.y()) ); returnValue.SetZ(originalCoordinate.z() - int(originalCoordinate.z()) ); if (returnValue.x() < 0.0) returnValue.SetX(returnValue.x() + 1.0); if (returnValue.y() < 0.0) returnValue.SetY(returnValue.y() + 1.0); if (returnValue.z() < 0.0) returnValue.SetZ(returnValue.z() + 1.0); return returnValue; } void SuperCellExtension::fillCell() { /* Change coords back to inverse space, apply the space group transforms * then change coords back to real space */ if (!m_molecule) return; OBUnitCell *uc = m_molecule->OBUnitCell(); if (!uc) { qDebug() << "No unit cell found - fillCell() returning..."; return; } const SpaceGroup *sg = uc->GetSpaceGroup(); // the actual space group and transformations for this unit cell if (sg) { qDebug() << "Space group:" << sg->GetId();// << sg->GetHMName(); // We operate on a copy of the Avogadro molecule // For each atom, we loop through: // * convert the coords back to inverse space // * apply the transformations // * create new (duplicate) atoms OBMol mol = m_molecule->OBMol(); vector3 uniqueV, newV; list transformedVectors; // list of symmetry-defined copies of the atom list::iterator transformIterator, duplicateIterator; vector3 updatedCoordinate; bool foundDuplicate; OBAtom *addAtom; QList atoms; // keep the current list of unique atoms -- don't double-create list coordinates; // all coordinates to prevent duplicates FOR_ATOMS_OF_MOL(atom, mol) atoms.push_back(&(*atom)); foreach(OBAtom *atom, atoms) { uniqueV = atom->GetVector(); // Assert: won't crash because we already ensure uc != NULL uniqueV = uc->CartesianToFractional(uniqueV); uniqueV = transformedFractionalCoordinate(uniqueV); coordinates.push_back(uniqueV); transformedVectors = sg->Transform(uniqueV); for (transformIterator = transformedVectors.begin(); transformIterator != transformedVectors.end(); ++transformIterator) { // coordinates are in reciprocal space -- check if it's in the unit cell // if not, transform it in place updatedCoordinate = transformedFractionalCoordinate(*transformIterator); foundDuplicate = false; // Check if the transformed coordinate is a duplicate of an atom for (duplicateIterator = coordinates.begin(); duplicateIterator != coordinates.end(); ++duplicateIterator) { if (duplicateIterator->distSq(updatedCoordinate) < 1.0e-4) { foundDuplicate = true; break; } } if (foundDuplicate) continue; coordinates.push_back(updatedCoordinate); // make sure to check the new atom for dupes addAtom = mol.NewAtom(); addAtom->Duplicate(atom); addAtom->SetVector(uc->FractionalToCartesian(updatedCoordinate)); } // end loop of transformed atoms // Put the original atom into the proper space in the unit cell too atom->SetVector(uc->FractionalToCartesian(uniqueV)); } // end loop of atoms m_molecule->setOBMol(&mol); qDebug() << "Spacegroups done..."; // Need a fresh pointer to the new unit cell - setOBMol is invalidating // the old one. This should be cleaned up to use a more permanent data // structure. uc = m_molecule->OBUnitCell(); uc->SetSpaceGroup(1); } m_molecule->update(); QCoreApplication::processEvents(); m_molecule->blockSignals(true); // Remove any bonds that may have snook in foreach(Bond *b, m_molecule->bonds()) m_molecule->removeBond(b); // Now duplicate the entire cell so that inter-cell bonding can be done duplicateUnitCell(); qDebug() << "Unit cell duplicated..."; m_molecule->update(); // Simpler version of connect the dots connectTheDots(); qDebug() << "Dots connected..."; m_molecule->blockSignals(false); m_molecule->updateMolecule(); } void SuperCellExtension::connectTheDots() { // Add single bonds between all atoms closer than their combined atomic // covalent radii. vector rad; NeighborList nbrs(m_molecule, 2.2); rad.reserve(m_molecule->numAtoms()); foreach (Atom *atom, m_molecule->atoms()) rad.push_back(OpenBabel::etab.GetCovalentRad(atom->atomicNumber())); foreach (Atom *atom1, m_molecule->atoms()) { foreach (Atom *atom2, nbrs.nbrs(atom1)) { if (m_molecule->bond(atom1, atom2)) continue; if (atom1->isHydrogen() && atom2->isHydrogen()) continue; // bonded if closer than elemental Rcov + tolerance double cutoff = (rad[atom1->index()] + rad[atom2->index()] + 0.45) * (rad[atom1->index()] + rad[atom2->index()] + 0.45); double d2 = ((*atom1->pos()) - (*atom2->pos())).squaredNorm(); if (d2 > cutoff || d2 < 0.40) continue; Bond *bond = m_molecule->addBond(); bond->setAtoms(atom1->id(), atom2->id(), 1); } QCoreApplication::processEvents(); } } void SuperCellExtension::duplicateUnitCell() { // Duplicates the entire unit cell the number of times specified std::vector cellVectors = m_molecule->OBUnitCell()->GetCellVectors(); QList orig = m_molecule->atoms(); for (int a = 0; a < m_dialog->aCells(); ++a) { for (int b = 0; b < m_dialog->bCells(); ++b) { for (int c = 0; c < m_dialog->cCells(); ++c) { // Do not copy the unit cell onto itself if (a == 0 && b == 0 && c == 0) continue; Eigen::Vector3d disp( cellVectors[0].x() * a + cellVectors[1].x() * b + cellVectors[2].x() * c, cellVectors[0].y() * a + cellVectors[1].y() * b + cellVectors[2].y() * c, cellVectors[0].z() * a + cellVectors[1].z() * b + cellVectors[2].z() * c ); foreach(Atom *atom, orig) { Atom *newAtom = m_molecule->addAtom(); *newAtom = *atom; newAtom->setPos((*atom->pos())+disp); } } QCoreApplication::processEvents(); } } // end of for loops // Update the length of the unit cell cellParametersChanged(m_dialog->aCells(), m_dialog->bCells(), m_dialog->cCells()); } } // end namespace Avogadro Q_EXPORT_PLUGIN2(supercellextension, Avogadro::SuperCellExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/insertfragmentdialog.h0000644000175000001440000000354512250371054024373 0ustar marcususers/********************************************************************** InsertFragmentDialog - Inserting fragments using the draw tool Copyright (C) 2008 by Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef INSERTFRAGMENTDIALOG_H #define INSERTFRAGMENTDIALOG_H #include #include #include "ui_insertfragmentdialog.h" class QCloseEvent; namespace Avogadro { class Molecule; class InsertFragmentPrivate; class InsertFragmentDialog : public QDialog { Q_OBJECT public: //! Constructor explicit InsertFragmentDialog(QWidget *parent = 0, QString directory = "fragments", Qt::WindowFlags f = 0); //! Destructor ~InsertFragmentDialog(); const Molecule &fragment(); public Q_SLOTS: void refresh(); void filterTextChanged(const QString &); void clearFilterText(); void activated(); Q_SIGNALS: void performInsert(); private: Ui::InsertFragmentDialog ui; InsertFragmentPrivate *d; }; } // End of Avogadro namespace #endif avogadro-1.1.1/libavogadro/src/extensions/molecularpropextension.cpp0000644000175000001440000002153312250371054025334 0ustar marcususers/********************************************************************** MolecularProp - Standard properties of molecules Copyright (C) 2009 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "molecularpropextension.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { MolecularPropertiesExtension::MolecularPropertiesExtension(QObject *parent) : Extension(parent), m_molecule(0), m_dialog(0), m_inchi(), m_network(0), m_nameRequestPending(false) { QAction *action = new QAction(this); action->setText(tr("Molecule Properties...")); m_actions.append(action); } MolecularPropertiesExtension::~MolecularPropertiesExtension() { } QList MolecularPropertiesExtension::actions() const { return m_actions; } QString MolecularPropertiesExtension::menuPath(QAction *) const { return tr("&View") + '>' + tr("&Properties"); } void MolecularPropertiesExtension::setMolecule(Molecule *molecule) { if (m_molecule) disconnect( m_molecule, 0, this, 0 ); m_molecule = molecule; } QUndoCommand* MolecularPropertiesExtension::performAction(QAction *, GLWidget *widget) { if (!m_molecule) return 0; // nothing we can do // Disconnect in case we're attached to a new widget if (m_widget) disconnect( m_molecule, 0, this, 0 ); if (widget) { connect(widget, SIGNAL(moleculeChanged(Molecule *)), this, SLOT(moleculeChanged(Molecule*))); m_widget = widget; } if (!m_dialog) { m_dialog = new MolecularPropertiesDialog(m_widget); connect(m_dialog, SIGNAL(accepted()), this, SLOT(disableUpdating())); connect(m_dialog, SIGNAL(rejected()), this, SLOT(disableUpdating())); } if (!m_network) { m_network = new QNetworkAccessManager(this); connect(m_network, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); } connect(m_molecule, SIGNAL(moleculeChanged()), this, SLOT(update())); connect(m_molecule, SIGNAL(primitiveAdded(Primitive *)), this, SLOT(updatePrimitives(Primitive*))); connect(m_molecule, SIGNAL(primitiveRemoved(Primitive *)), this, SLOT(updatePrimitives(Primitive*))); connect(m_molecule, SIGNAL(primitiveUpdated(Primitive *)), this, SLOT(updatePrimitives(Primitive*))); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(updateAtoms(Atom*))); connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(updateAtoms(Atom*))); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(updateAtoms(Atom*))); connect(m_molecule, SIGNAL(bondAdded(Bond *)), this, SLOT(updateBonds(Bond*))); connect(m_molecule, SIGNAL(bondRemoved(Bond *)), this, SLOT(updateBonds(Bond*))); connect(m_molecule, SIGNAL(bondUpdated(Bond *)), this, SLOT(updateBonds(Bond*))); m_dialog->nameLine->setText(tr("unknown", "Unknown molecule name")); update(); m_dialog->show(); return 0; } void MolecularPropertiesExtension::update() { if (m_dialog == NULL || m_molecule == NULL) return; // used multiple times below OpenBabel::OBMol obmol = m_molecule->OBMol(); if (!m_nameRequestPending) { m_nameRequestPending = true; // Wait 250 msec before requesting to limit number of requests // (Additional throttling is done by checking the InChI for each request) qDebug() << "Requesting IUPAC name..."; QTimer::singleShot(250, this, SLOT(requestIUPACName())); } QString format("%L1"); // localized numbers m_dialog->molecularWeightLine->setText(format.arg(obmol.GetMolWt(), 0, 'f', 3)); // Copied from Kalzium QString formula(obmol.GetSpacedFormula(1,"").c_str()); formula.replace( QRegExp( "(\\d+)" ), "\\1" ); m_dialog->formulaLine->setText(formula); // we should actually handle charges with superscripts too (e.g., [SO4]-2) m_dialog->energyLine->setText(format.arg(m_molecule->energy(), 0, 'f', 3)); bool estimate = true; // estimated dipole m_dialog->dipoleMomentLine->setText(format.arg(m_molecule->dipoleMoment(&estimate).norm(), 0, 'f', 3)); if (estimate) m_dialog->dipoleLabel->setText(tr("Estimated Dipole Moment (D):")); m_dialog->atomsLine->setText(format.arg(m_molecule->numAtoms())); m_dialog->bondsLine->setText(format.arg(m_molecule->numBonds())); if (m_molecule->numResidues() < 2) { m_dialog->residuesLabel->hide(); m_dialog->residuesLine->hide(); } else { m_dialog->residuesLabel->show(); m_dialog->residuesLine->show(); m_dialog->residuesLine->setText(format.arg(m_molecule->numResidues())); } } void MolecularPropertiesExtension::updatePrimitives(Primitive*) { update(); } void MolecularPropertiesExtension::updateAtoms(Atom*) { update(); } void MolecularPropertiesExtension::updateBonds(Bond*) { update(); } void MolecularPropertiesExtension::moleculeChanged(Molecule *) { update(); } void MolecularPropertiesExtension::disableUpdating() { // don't ask for more updates disconnect( m_molecule, 0, this, 0 ); } void MolecularPropertiesExtension::clearName() { if (m_dialog) m_dialog->nameLine->setText(tr("unknown", "Unknown molecule name")); if (m_molecule) m_molecule->setProperty("name", QVariant()); // set an invalid name, since we don't have one } void MolecularPropertiesExtension::replyFinished(QNetworkReply *reply) { // Read in all the data if (!reply->isReadable()) { QMessageBox::warning(qobject_cast(parent()), tr("Network Download Failed"), tr("Network timeout or other error.")); reply->deleteLater(); clearName(); return; } // check if the data came through QByteArray data = reply->readAll(); if (data.contains("Error report") || data.contains("

")) { reply->deleteLater(); clearName(); return; } QString name = QString(data).trimmed().toLower(); if (!name.isEmpty()) { m_dialog->nameLine->setText(name); if (m_molecule) { m_molecule->setProperty("name", QVariant(name)); // set the name for future use by other code } } else { clearName(); } reply->deleteLater(); } void MolecularPropertiesExtension::requestIUPACName() { if (m_dialog == NULL || m_molecule == NULL) return; m_nameRequestPending = false; OpenBabel::OBMol obmol = m_molecule->OBMol(); // Check if the molecule has changed, // so we need to ask for a new name from the resolver OBConversion conv; conv.SetOutFormat("inchi"); // use a standard InChI key (which avoids issues with URL escaping) QString inchi = QString::fromStdString(conv.WriteString(&obmol, true)); // skip whitespace if (m_inchi == inchi) return; // no need to send a new query, since it's the same request m_inchi = inchi; // cache for next use QString requestURL = QLatin1String("http://cactus.nci.nih.gov/chemical/structure/") + m_inchi + QLatin1String("/iupac_name"); qDebug() << " requesting URL: " << requestURL; m_network->get(QNetworkRequest(QUrl(requestURL))); m_dialog->nameLine->setText(tr("(pending)", "asking server for molecule name")); } } // end namespace Avogadro Q_EXPORT_PLUGIN2(molecularpropextension, Avogadro::MolecularPropertiesExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/insertfragmentextension.cpp0000644000175000001440000002467012250371054025505 0ustar marcususers/********************************************************************** InsertFragment - Insert molecular fragments or SMILES Copyright (C) 2009-2011 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "insertfragmentextension.h" #include "insertcommand.h" #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { enum FragmentIndex { CrystalFromFileIndex = 0, FragmentFromFileIndex, SMILESIndex }; InsertFragmentExtension::InsertFragmentExtension(QObject *parent) : Extension(parent), m_fragmentDialog(0), m_crystalDialog(0), m_molecule(0), m_justFinished(false) { QAction *action = new QAction(this); action->setText(tr("Crystal...")); action->setData(CrystalFromFileIndex); m_actions.append(action); action = new QAction(this); action->setText(tr("Fragment...")); action->setData(FragmentFromFileIndex); m_actions.append(action); action = new QAction(this); action->setText(tr("SMILES...")); action->setData(SMILESIndex); m_actions.append(action); // Dialog is created later, if needed } InsertFragmentExtension::~InsertFragmentExtension() { if (m_fragmentDialog) { m_fragmentDialog->deleteLater(); m_fragmentDialog = 0; } if (m_crystalDialog) { m_crystalDialog->deleteLater(); m_crystalDialog = 0; } } QList InsertFragmentExtension::actions() const { return m_actions; } QString InsertFragmentExtension::menuPath(QAction *action) const { if (action->data() == CrystalFromFileIndex) return tr("&File") + '>' + tr("Import"); else return tr("&Build") + '>' + tr("&Insert"); } void InsertFragmentExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* InsertFragmentExtension::performAction(QAction *action, GLWidget *widget) { if (m_molecule == NULL || widget == NULL) return NULL; // nothing we can do if (action->data() == SMILESIndex) { // Read a SMILES and use the OBBuilder class to build it and insert the new fragment OBBuilder builder; Molecule fragment; OBMol obfragment; OBConversion conv; bool ok, noConnection; QList selectedIds; QString smiles = QInputDialog::getText((widget), tr("Insert SMILES"), tr("Insert SMILES fragment:"), QLineEdit::Normal, m_smilesString, &ok); if (ok && !smiles.isEmpty()) { m_smilesString = smiles; // save for settings std::string SmilesString(smiles.toAscii()); QList selectedAtoms = widget->selectedPrimitives().subList(Primitive::AtomType); if (!selectedAtoms.empty()) { // Loop through the selection and add the ids // But if it's a hydrogen, we need to find the attached parent // (making sure it's not also selected) selectedIds.append(findSelectedForInsert(selectedAtoms)); noConnection = false; } else { selectedIds.append(-1); noConnection = true; } if(conv.SetInFormat("smi") && conv.ReadString(&obfragment, SmilesString)) { builder.Build(obfragment); // Let's do a quick cleanup OBForceField* pFF = OBForceField::FindForceField("MMFF94"); if (pFF && pFF->Setup(obfragment)) { pFF->ConjugateGradients(250, 1.0e-4); pFF->UpdateCoordinates(obfragment); } // Note tricky assignment used as logic below else if ((pFF = OBForceField::FindForceField("UFF")) && pFF->Setup(obfragment)) { pFF->ConjugateGradients(250, 1.0e-4); pFF->UpdateCoordinates(obfragment); } fragment.setOBMol(&obfragment); if (noConnection) { // if we're not connecting to a specific atom, add Hs, center fragment.addHydrogens(); // hydrogen addition is done by InsertCommand when bonding fragment.center(); } } } foreach(int id, selectedIds) { emit performCommand(new InsertFragmentCommand(m_molecule, fragment, widget, tr("Insert SMILES"), id)); } } else if (action->data() == FragmentFromFileIndex) { // molecular fragments if (m_fragmentDialog == NULL) { m_fragmentDialog = new InsertFragmentDialog(NULL, "fragments"); m_fragmentDialog->setWindowTitle(tr("Insert Fragment")); connect(m_fragmentDialog, SIGNAL(performInsert()), this, SLOT(insertFragment())); } m_fragmentDialog->show(); } else { // crystals if (m_crystalDialog == NULL) { m_crystalDialog = new InsertFragmentDialog(NULL, "crystals"); m_crystalDialog->setWindowTitle(tr("Insert Crystal")); connect(m_crystalDialog, SIGNAL(performInsert()), this, SLOT(insertCrystal())); } m_crystalDialog->show(); } m_widget = widget; // save for delayed response return NULL; // delayed action on user clicking the Insert button } void InsertFragmentExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); settings.setValue("smiles", m_smilesString); /* @todo bring back multiple directory paths if (m_dialog) { settings.setValue("fragmentPath", m_dialog->directoryList().join("\n")); } */ } void InsertFragmentExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); m_smilesString = settings.value("smiles").toString(); /* if(m_dialog) { if (settings.contains("fragmentPath")) { QString directoryList = settings.value("fragmentPath").toString(); m_dialog->setDirectoryList(directoryList.split('\n')); } } */ } QList InsertFragmentExtension::findSelectedForInsert(QList selectedAtomList) const { QList selectedIds; foreach(const Primitive *primitive, selectedAtomList) { const Atom *atom = static_cast(primitive); // we know it's an atom, since AtomType was requested if (!atom->isHydrogen()) { // Only append if it doesn't have a selected hydrogen attached bool noSelectedHatoms = true; foreach (unsigned long int neighborId, atom->neighbors()) { Atom *neighbor = m_molecule->atomById(neighborId); if (neighbor->isHydrogen()) { // check if it's selected if (selectedAtomList.contains(neighbor)) { noSelectedHatoms = false; break; } } } if (noSelectedHatoms && !selectedIds.contains(atom->id())) { // add the heavy atom selectedIds.append(atom->id()); } } else { // this is a hydrogen const Atom *hydrogen = atom; if (!hydrogen->neighbors().empty()) { // it's bonded to something atom = m_molecule->atomById(hydrogen->neighbors()[0]); // the first bonded atom to this "H" } if (!selectedIds.contains(atom->id())) { selectedIds.append(atom->id()); } } } return selectedIds; } void InsertFragmentExtension::insertCrystal() { InsertFragmentDialog *dialog = qobject_cast(this->sender()); if (!dialog) return; // Prevent "double insert" if (m_justFinished) return; // Don't allow two inserts unless spaced by 2 seconds // This avoids a "double insert" QTimer::singleShot(2*1000, this, SLOT(resetTimer())); const Molecule fragment = dialog->fragment(); if (fragment.numAtoms() == 0) return; *m_molecule = fragment; m_molecule->update(); emit moleculeChanged(m_molecule, Extension::NewWindow); m_justFinished = true; } // only called by the fragment dialog (not SMILES) void InsertFragmentExtension::insertFragment() { InsertFragmentDialog *dialog = qobject_cast(this->sender()); if (!dialog) return; // Prevent "double insert" if (m_justFinished) return; // Don't allow two inserts unless spaced by 2 seconds // This avoids a "double insert" QTimer::singleShot(2*1000, this, SLOT(resetTimer())); // Get the fragment and make sure it exists (e.g., we didn't try to insert a directory const Molecule fragment = dialog->fragment(); if (fragment.numAtoms() == 0) return; // Check to see if we're going to connect to an existing atom using OBBuilder::Connect() QList selectedAtoms = m_widget->selectedPrimitives().subList(Primitive::AtomType); QList selectedIds; if (!selectedAtoms.empty()) { // Loop through the selection and add the ids // But if it's a hydrogen, we need to find the attached parent // (making sure it's not also selected) selectedIds.append(findSelectedForInsert(selectedAtoms)); } else { selectedIds.append(-1); } foreach(int id, selectedIds) { emit performCommand(new InsertFragmentCommand(m_molecule, fragment, m_widget, tr("Insert Fragment"), id)); } m_justFinished = true; } void InsertFragmentExtension::resetTimer() { m_justFinished = false; // done with the delay } } // end namespace Avogadro Q_EXPORT_PLUGIN2(insertfragmentextension, Avogadro::InsertFragmentExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/insertdnaextension.h0000644000175000001440000000407412250371054024105 0ustar marcususers/********************************************************************** InsertDNA - Insert DNA/RNA chains Copyright (C) 2012 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef INSERTDNAEXTENSION_H #define INSERTDNAEXTENSION_H #include namespace Avogadro { class InsertDNADialog; class InsertDNAExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("InsertDNA", tr("Insert DNA/RNA"), tr("Insert DNA/RNA chains")) public: //! Constructor InsertDNAExtension(QObject *parent=0); //! Destructor ~InsertDNAExtension(); //! Perform Action QList actions() const; QUndoCommand* performAction(QAction *action, GLWidget *widget); QString menuPath(QAction *action) const; void setMolecule(Molecule *molecule); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); public Q_SLOTS: void performInsert(); void updateText(); void updateBPTurns(int type); void changeNucleicType(int type); void dialogDestroyed(); private: QList m_actions; GLWidget* m_widget; Molecule *m_molecule; InsertDNADialog *m_dialog; void constructDialog(); }; class InsertDNAExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(InsertDNAExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/shaderdialog.ui0000644000175000001440000002012412250371054022767 0ustar marcususers ShaderDialog 0 0 440 255 0 0 GLSL Shaders 0 Load Shaders Shader Name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Vertex Shader: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Browse... Fragment Shader: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Browse... Parameters: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter Browse... Qt::Vertical 18 34 Qt::Horizontal 40 20 QDialogButtonBox::Open Assign Shader Display Type: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 0 Shader Program: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 1 0 None Qt::Vertical 20 104 Qt::Horizontal 40 20 Assign Shader tabWidget shaderName vertFile vertFileButton fragFile fragFileButton paramsFile paramsFileButton loadVertButton displayTypes shaderPrograms shaderButton avogadro-1.1.1/libavogadro/src/extensions/animationextension.h0000644000175000001440000000541312250371054024073 0ustar marcususers/********************************************************************** Animation - Basic animation Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef ANIMATIONEXTENSION_H #define ANIMATIONEXTENSION_H #include #include #include #include "animationdialog.h" namespace Avogadro { class Animation; class AnimationExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Animation", tr("Animation"), tr("Animate trajectories, reactions, and vibrations.")) public: //! Constructor AnimationExtension(QObject *parent=0); //! Deconstructor virtual ~AnimationExtension(); //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual QString menuPath(QAction *action) const; virtual void setMolecule(Molecule *molecule); //@} private: QList m_actions; Molecule *m_molecule; AnimationDialog *m_animationDialog; Animation *m_animation; //only needed for rendering a video GLWidget* m_widget; private Q_SLOTS: void loadFile(QString file); void setLoop(int state); void setDynamicBonds(int state); void saveVideo(QString videoFileName); private: //!support to read a trajectory from xyz as described here: //!http://www.ks.uiuc.edu/Research/vmd/plugins/molfile/xyzplugin.html //!and DL-POLY HISTORY files: //!htp://www.cse.scitech.ac.uk/ccg/software/DL_POLY/MANUALS/USRMAN2.17.pdf void readTrajFromFile(QString filename); //!support to write a trajectory to xyz as described here: //!http://www.ks.uiuc.edu/Research/vmd/plugins/molfile/xyzplugin.html bool writeXyzTraj(QString filename); }; class AnimationExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(AnimationExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/fileimportextension.h0000644000175000001440000000637112250371054024272 0ustar marcususers/********************************************************************** FileImportExtension - Extension for importing files Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef FILEIMPORTEXTENSION_H #define FILEIMPORTEXTENSION_H #include "ui_fileimportdialog.h" #include #include class QTextStream; namespace Avogadro { class FileImportDialog; class FileImportExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Import Trajectory", tr("Import Trajectory"), tr("Import trajectory files")) public: FileImportExtension(QObject* parent = 0); virtual ~FileImportExtension(); /** * @return a list of actions which this widget can perform */ virtual QList actions() const; /** * @return the menu path for the specified action */ virtual QString menuPath(QAction* action) const; /** * @param action The action that triggered the calls. * @param widget The currently active GLWidget (feedback to the user). * @return An undo command for this action. */ virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings); public Q_SLOTS: /** * Slot to change the current molecule. */ void setMolecule(Molecule *molecule); private: GLWidget* m_glwidget; QList m_actions; Molecule *m_molecule; FileImportDialog *m_fileImportDialog; void readParmFile(Molecule *mol); void processLine(QTextStream *in, Molecule *mol); private Q_SLOTS: void import(); void selectFileName(); void selectFileName2(); }; class FileImportDialog : public QDialog, public Ui::FileImportDialog { public: FileImportDialog(QDialog *parent=0) : QDialog(parent) { setupUi(this); } }; class FileImportExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(FileImportExtension) }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/conformersearchdialog.ui0000644000175000001440000001372212250371054024707 0ustar marcususers ConformerSearchDialog 0 0 382 468 Conformer Search Method Number of atoms: Number of rotatable bonds: Number of conformers 10000 Systematic rotor search Random rotor search Weighted rotor search Genetic algorithm search Genetic Algorithm Options Children Mutability Convergence Scoring method 1 9999 5 1 9999 5 2 999 25 RMSD Energy Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() ConformerSearchDialog accept() 248 254 157 274 buttonBox rejected() ConformerSearchDialog reject() 316 260 286 274 avogadro-1.1.1/libavogadro/src/extensions/gl2psextension.h0000644000175000001440000000354212250371054023144 0ustar marcususers/********************************************************************** gl2psextension.h - Vector graphics export Copyright (C) 2010 by Konstantin Tokarev Based on code from mainwindow.cpp This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef GL2PSEXSTESION_H #define GL2PSEXSTESION_H #include #include namespace Avogadro { // class QUndoCommand; class Gl2psExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Vector graphics", tr("Vector graphics export"), tr("Vector graphics export")) public: //! Constructor Gl2psExtension(QObject *parent=0); //! Deconstructor // virtual ~Gl2psExtension(); /** @return a menu path for the extension's actions */ virtual QString menuPath(QAction *action) const; virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); private: QList m_actions; }; class Gl2psExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(Gl2psExtension) }; } #endif avogadro-1.1.1/libavogadro/src/extensions/constraintsdialog.h0000644000175000001440000000361512250371054023710 0ustar marcususers/********************************************************************** ConstraintsDialog - Dialog for force field constraint settings Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef CONSTRAINTSDIALOG_H #define CONSTRAINTSDIALOG_H #include "constraintsmodel.h" #include #include #include #include #include "ui_constraintsdialog.h" namespace Avogadro { class ConstraintsDialog : public QDialog { Q_OBJECT public: //! Constructor explicit ConstraintsDialog( QWidget *parent = 0, Qt::WindowFlags f = 0 ); //! Desconstructor ~ConstraintsDialog(); void showEvent(QShowEvent *event); void setModel(ConstraintsModel *model); void setMolecule(Molecule *molecule); public slots: void acceptConstraints(); void deleteConstraint(); void deleteAllConstraints(); void addConstraint(); void comboTypeChanged(int); private: Ui::ConstraintsDialog ui; Molecule* m_molecule; ConstraintsModel *m_constraints; OpenBabel::OBForceField* m_forceField; // needed to transfer info between AutoOpt and FF Extension }; } #endif avogadro-1.1.1/libavogadro/src/extensions/pythonterminalwidget.ui0000644000175000001440000000175212250371054024630 0ustar marcususers PythonTerminalWidget 0 0 534 444 Python Terminal DejaVu Sans Mono QTextEdit::NoWrap true PythonTerminalEdit QTextEdit
pythonterminal.h
avogadro-1.1.1/libavogadro/src/extensions/sortfiltertreeproxymodel.h0000644000175000001440000000323412250371054025356 0ustar marcususers/********************************************************************** SortFilterTreeProxyModel - Sorting / Filter proxy which works on trees Based on code from http://kodeclutz.blogspot.com/2008/12/filtering-qtreeview.html This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef SORTFILTERTREEPROXYMODEL_H #define SORTFILTERTREEPROXYMODEL_H #include namespace Avogadro { class SortFilterTreeProxyModel: public QSortFilterProxyModel { Q_OBJECT public: SortFilterTreeProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent), m_sourceRoot() {}; // From http://kodeclutz.blogspot.com/2008/12/filtering-qtreeview.html bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const; // This is a hack to prevent us from becoming root-less // See http://stackoverflow.com/questions/3212392/qtreeview-qfilesystemmodel-setrootpath-and-qsortfilterproxymodel-with-regexp-fo void setSourceRoot(const QModelIndex &sourceRoot) { m_sourceRoot = sourceRoot; } private: QModelIndex m_sourceRoot; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/pythonterminal.h0000644000175000001440000000560012250371054023232 0ustar marcususers/********************************************************************** Python - Gives us some Python helper stuff Copyright (C) 2008 by Donald Ephraim Curtis Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef PYTHONTERMINAL_H #define PYTHONTERMINAL_H #include #include #include #include "../pythoninterpreter.h" #include "../pythonscript.h" //#include "ui_pythonterminalwidget.h" #include #include #include #include #include #include #include #include class QDockWidget; namespace Avogadro { class PythonTerminalEdit; class PythonTerminal : public DockExtension { Q_OBJECT AVOGADRO_EXTENSION("Python Terminal", tr("Python Terminal"), tr("Interactive python scripting terminal")) public: //! Constructor PythonTerminal(QObject *parent=0); //! Deconstructor virtual ~PythonTerminal(); //virtual QList actions() const; //virtual QString menuPath(QAction *action) const; virtual QDockWidget * dockWidget(); //virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); void setMolecule(Molecule *molecule); private: Molecule *m_molecule; QDockWidget *m_terminalDock; PythonTerminalEdit *m_terminalEdit; }; class PythonTerminalEdit : public QTextEdit { Q_OBJECT public: PythonTerminalEdit(QWidget *parent = 0); void keyPressEvent(QKeyEvent *event); void setMolecule(Molecule *molecule); private Q_SLOTS: void runCommand(); void printPrompt(); void setTextCursorToEnd(); private: PythonInterpreter m_interpreter; Molecule *m_molecule; QList m_commandStack; int m_current; //!< current command QString m_lines; int m_cursorPos, m_indent; }; class PythonTerminalFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(PythonTerminal) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/cartesianextension.qrc0000755000175000001440000000042212250371054024421 0ustar marcususers icons/document-revert.png icons/edit-paste.png icons/edit-clear.png icons/edit-copy.png icons/edit-cut.png avogadro-1.1.1/libavogadro/src/extensions/insertcommand.h0000644000175000001440000000345212250371054023023 0ustar marcususers/********************************************************************** Insert Command - Undo command for inserting a new fragment Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008,2009 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef INSERTCOMMAND_H #define INSERTCOMMAND_H #include namespace Avogadro { class Molecule; class GLWidget; class InsertFragmentCommandPrivate; class InsertFragmentCommand : public QUndoCommand { public: InsertFragmentCommand(Molecule *molecule, const Molecule &generatedMolecule, GLWidget *widget, const QString commandName, int startAtom = -1, int endAtom = -1); ~InsertFragmentCommand(); virtual void undo(); virtual void redo(); private: InsertFragmentCommandPrivate * const d; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/python/0000755000175000001440000000000012250371054021324 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/python/example.py0000644000175000001440000000373712250371054023343 0ustar marcususersfrom PyQt4.QtCore import * from PyQt4.QtGui import * import Avogadro class ClearCommand(QUndoCommand): def __init__(self, glwidget): QUndoCommand.__init__(self) # store the glwidget for use in undo/redo self.glwidget = glwidget # create a new molecule self.molCopy = Avogadro.molecules.addMolecule() # make a copy of the molecule for undo self.molCopy.copy(glwidget.molecule) # set the command's text self.setText("Clear Molecule") def redo(self): # clear the current molecule self.glwidget.molecule.clear() def undo(self): # Restore the molecule, we use the copy function again # because we might need to undo/redo multiple times. # If we just set the current molecule to molCopy, the next # redo would clear it and we wouldn't have a valid copy # anymore. self.glwidget.molecule.copy(self.molCopy) # always use 'Extension' for class name class Extension(QObject): __pyqtSignals__ = ("message(const QString&)",) def __init__(self): QObject.__init__(self) def name(self): return "Example Python Extension" def description(self): return "This example clears the molecule" def actions(self): actions = [] action = QAction(self) action.setText("Clear molecule") actions.append(action) return actions def menuPath(self, action): return "Scripts" def performAction(self, action, glwidget): self.emit(SIGNAL("message(const QString&)"), "performing action...") # return the undo command (ownership will be handled automatically) return ClearCommand(glwidget) def dockWidget(self): widget = QDockWidget("Python Example DockWidget") label = QLabel("This is a python QDockWidget") widget.setWidget(label) return widget def readSettings(self, settings): self.foo = settings.value("foo", QVariant(42)) def writeSettings(self, settings): settings.setValue("foo", self.foo) avogadro-1.1.1/libavogadro/src/extensions/forcefielddialog.h0000644000175000001440000000313512250371054023440 0ustar marcususers/********************************************************************** ForceFieldDialog - Dialog for force field settings Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef FORCEFIELDDIALOG_H #define FORCEFIELDDIALOG_H #include #include #include #include "ui_forcefielddialog.h" namespace Avogadro { class ForceFieldDialog : public QDialog { Q_OBJECT public: //! Constructor explicit ForceFieldDialog( QWidget *parent = 0, Qt::WindowFlags f = 0 ); //! Desconstructor ~ForceFieldDialog(); int forceFieldID(); int nSteps(); int algorithm(); int convergence(); public slots: void accept(); void reject(); private: Ui::ForceFieldDialog ui; int m_forceFieldID; int m_nSteps; int m_algorithm; int m_convergence; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/molecularpropdialog.ui0000644000175000001440000001116112250371054024406 0ustar marcususers MolecularPropertiesDialog 0 0 301 268 Molecule Properties Molecular Weight (g/mol): Chemical Formula: Number of Atoms: Number of Bonds: Number of Residues: Energy (kJ/mol): Dipole Moment (D): true true true true true true true IUPAC Molecule Name: true Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Ok buttonBox accepted() MolecularPropertiesDialog accept() 154 665 154 349 avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/0000755000175000001440000000000012250371054022510 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/swcntbuilderextension.h0000644000175000001440000000442412250371054027327 0ustar marcususers/********************************************************************** SWCNTBuilderExtension - Build single wall carbon nanotubes Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. **********************************************************************/ #ifndef SWCNTBUILDEREXTENSION_H #define SWCNTBUILDEREXTENSION_H #include #include #include class QThread; // This is a work around for a bug on older versions of Avogadro, bug 3104853 using Avogadro::Plugin; namespace SWCNTBuilder { class AvoTubeGen; class SWCNTBuilderWidget; class SWCNTBuilderExtension : public Avogadro::Extension { Q_OBJECT AVOGADRO_EXTENSION("SWCNT Builder", tr("SWCNT Builder"), tr("Construct single wall carbon nanotubes.")) public: explicit SWCNTBuilderExtension(QObject *parent=0); virtual ~SWCNTBuilderExtension(); virtual QList actions() const; virtual QString menuPath(QAction *action) const; virtual QUndoCommand* performAction(QAction *action, Avogadro::GLWidget *widget); virtual void setMolecule(Avogadro::Molecule *); public Q_SLOTS: void buildNanotube(); void buildFinished(); Q_SIGNALS: void requestBuild(uint, uint, bool, double, bool, bool); private: QList m_actions; Avogadro::Molecule *m_molecule; Avogadro::GLWidget *m_gl; SWCNTBuilderWidget *m_widget; QThread *m_thread; AvoTubeGen *m_tubegen; }; // Plugin factory setup class SWCNTBuilderExtensionFactory : public QObject, public Avogadro::PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(SWCNTBuilderExtension) }; } #endif avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/swcntbuilderwidget.ui0000644000175000001440000001700112250371054026757 0ustar marcususers SWCNTBuilderWidget 0 0 808 101 0 0 Nanotube Builder 0 0 &n: spin_n 9 &m: spin_m 0 9 4 &Length: spin_length 1.000000000000000 Uni&t: combo_lengthUnit 0 0 periodic units angstrom bohr radii nanometers picometers &Cap with hydrogen This may take a while. If only the atomic coordinates are needed (say, for a quantum mechanical calculation), a single-bond-only representation should suffice. Find &double bonds Qt::Horizontal 40 20 0 0 &Build 0 0 &Hide 0 0 &Hide when finished true true avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/0000755000175000001440000000000012250371054024141 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/eprintf.h0000755000175000001440000000273612250371054025774 0ustar marcususers/* =============================================================================== // eprintf.h �2001, J.T. Frey // =============================================================================== // Written: J.T. Frey, 07.04.2001 // Purpose: Extended formatted printing functions for C. These functions add // additional codes to the standard C format string for the printf, // fprintf, and sprintf functions which allow you to embed ANSI // background, foreground, and font face directives in your strings. // The directives appear as '%@[directive]' codes. // // Foreground colors: Background colors: Text faces: // ================================================================= // %@black; %@Black; %@bold; // %@red; %@Red; %@normal; // %@green; %@Green; %@italic; // %@yellow; %@Yellow; %@underline; // %@blue; %@Blue; %@blink; // %@magenta; %@Magenta; %@rapidBlink; // %@cyan; %@Cyan; %@reverse; // %@white; %@White; %@invisible; // // The %@reset; tag resets to default formatting. // // Last Mod: n/a */ #ifndef __EPRINTF__ #define __EPRINTF__ // Removed for Avogadro: // #include // // Replaced with: #include #if defined(__cplusplus) extern "C" { #endif int eprintf(const char*,...); int efprintf(FILE*,const char*,...); int esprintf(char*,const char*,...); #if defined(__cplusplus) } #endif #endif /* __EPRINTF__ */ avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/eprintf.c0000755000175000001440000002346612250371054025772 0ustar marcususers/* =============================================================================== // eprintf.c �2001, J.T. Frey // =============================================================================== // Written: J.T. Frey, 07.04.2001 // Purpose: ANSI formatting additions to the printf, fprintf, and sprintf // functions. // // Last Mod: n/a */ #include "eprintf.h" #include // Avogadro edit: Needed for va_arg --DCL 2011/11/11 /* * NOTES: * * All of the formatting we're defining is done in terms of * numerical codes which are attached to an escape character * sequence. The following data structure sets up a sorted * array of key/number pairs. The number is the * corresponding ANSI code. The directives defined in the * array are sorted such that a binary search can be done * based on the first character; the standard string compare * function is used to make the final decision. * These directives ARE CASE SENSITIVE!!! */ struct keyedData { const char* key; int data; }; #define numPairs 25 struct keyedData pairs[] = { { "Black", 40 }, { "Blue", 44 }, { "Cyan", 46 }, { "Green", 42 }, { "Magenta", 45 }, { "Red", 41 }, { "Yellow", 43 }, { "White", 47 }, { "black", 30 }, { "blink", 5 }, { "blue", 34 }, { "bold", 1 }, { "cyan", 36 }, { "green", 32 }, { "invisible", 8 }, { "italic", 3 }, { "magenta", 35 }, { "normal", 2 }, { "rapidBlink", 6 }, { "red", 31 }, { "reset", 0 }, { "reverse", 7 }, { "underline", 4 }, { "white", 37 }, { "yellow", 33 } }; /**/ /* ---------------------------------------------------------------------- // * __fillFormattingBuffer [local only] // ---------------------------------------------------------------------- // Written: Jeff Frey, 07.04.2001 // Purpose: Translate the 'directive' into an escape sequence. On // exit the 'formatBuffer' contains the sequence and the // function returns the number of characters in the format // buffer. // // Last Mod: n/a */ int __fillFormattingBuffer(const char*,char*); int __fillFormattingBuffer( const char* directive, char* formatBuffer ) { int lo = 0,hi = numPairs - 1,target,v; int didLoEqualHiAlready = 0,found = 0; while (lo <= hi) { target = (hi + lo) / 2; v = *directive - *(pairs[target].key); /* Positive 'v' means directive is above this one; * Negative means it should be below it; * Zero means we matched the first character, so we * do a standard string compare to see if we got it. */ if (v < 0) hi = target + ((hi + lo) % 2); else if (v > 0) lo = target + ((hi + lo) % 2); else { v = strcmp(directive,pairs[target].key); if (v == 0) { found = 1; break; } if (v < 0) hi = target + ((hi + lo) % 2); else lo = target + ((hi + lo) % 2); } if (hi == lo) { if (didLoEqualHiAlready) break; else didLoEqualHiAlready = 1; } } if (found) { return sprintf(formatBuffer,"\033[%dm",pairs[target].data); } else { /* Unrecognized...empty buffer! */ formatBuffer[0] = '\0'; return 0; } } /**/ /* ---------------------------------------------------------------------- // * __parseExtendedFormatString [local only] // ---------------------------------------------------------------------- // Written: Jeff Frey, 07.04.2001 // Purpose: Parse an entire format string as passed to one of the // eprintf-type functions. This routine scannd for our // directives and the directives are replaced inline with // escape sequences. On exit, all entities which are of // the form '%@..;' have been removed entirely or replaced // with applicable escape sequences. // // Last Mod: n/a */ void __parseExtendedFormatString(char*); void __parseExtendedFormatString( char* format ) { char formBuf[8]; char* p = format; int wasEndOfString = 0; while (*p != '\0') { while ((*p != '\0') && (*p != '%')) p++; if (*p == '%') { /* We found a percent sign; is it formatting or * a regular old printf code? */ if (*(++p) == '\0') break; if (*p == '@') { /* It should be a formatting directive: */ char* start = p + 1; char* end = start; int fillLen,prevLen = 3; /* Isolate the formatting directive: */ while ((*end != '\0') && (*end != ';')) { end++; prevLen++; } if (*end) *end = '\0'; else wasEndOfString = 1; /* Fill the format buffer based on the directive: */ fillLen = __fillFormattingBuffer(start,formBuf); /* Overwrite the directive with the format: */ start -= 2; if (fillLen > 0) memcpy(start,formBuf,fillLen); if (!wasEndOfString) memmove(start + fillLen,end + 1,strlen(end + 1) + 1); else *(start + fillLen) = '\0'; /* Move to the position following the now-formatted * directive and we'll hit it next: */ p = start + fillLen; } } } } /**/ /* ---------------------------------------------------------------------- // * eprintf // ---------------------------------------------------------------------- // Written: Jeff Frey, 07.04.2001 // Purpose: Extended printf. Makes a local copy of the format string // which is then parsed for our ANSI directives and // subsequently used with vprintf to do the actual output. // // Last Mod: n/a */ int eprintf( const char* format, ... ) { va_list arguments; int returnVal = -1,len; char* formBuf; /* Set us up to access the other arguments: */ va_start(arguments,format); if ((formBuf = (char*)(malloc(len = (strlen(format) + 1))))) { memcpy(formBuf,format,len); __parseExtendedFormatString(formBuf); returnVal = vprintf(formBuf,arguments); free(formBuf); } /* End the argument list usage: */ va_end(arguments); return returnVal; } /**/ /* ---------------------------------------------------------------------- // * efprintf // ---------------------------------------------------------------------- // Written: Jeff Frey, 07.04.2001 // Purpose: Extended fprintf. Makes a local copy of the format // string which is then parsed for our ANSI directives and // subsequently used with vfprintf to do the actual output. // // Last Mod: n/a */ int efprintf( FILE* stream, const char* format, ... ) { va_list arguments; int returnVal = -1,len; char* formBuf; /* Set us up to access the other arguments: */ va_start(arguments,format); if ((formBuf = (char*)(malloc(len = (strlen(format) + 1))))) { memcpy(formBuf,format,len); __parseExtendedFormatString(formBuf); returnVal = vfprintf(stream,formBuf,arguments); free(formBuf); } /* End the argument list usage: */ va_end(arguments); return returnVal; } /**/ /* ---------------------------------------------------------------------- // * esprintf // ---------------------------------------------------------------------- // Written: Jeff Frey, 07.04.2001 // Purpose: Extended sprintf. Makes a local copy of the format // string which is then parsed for our ANSI directives and // subsequently used with vsprintf to do the actual output. // // Last Mod: n/a */ int esprintf( char* buffer, const char* format, ... ) { va_list arguments; int returnVal = -1,len; char* formBuf; /* Set us up to access the other arguments: */ va_start(arguments,format); if ((formBuf = (char*)(malloc(len = (strlen(format) + 1))))) { memcpy(formBuf,format,len); __parseExtendedFormatString(formBuf); returnVal = vsprintf(buffer,formBuf,arguments); free(formBuf); } /* End the argument list usage: */ va_end(arguments); return returnVal; } /**/ avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/ANSR.cpp0000755000175000001440000002733512250371054025425 0ustar marcususers// ============================================================= // ANSR.cpp ©1999-2002, J.T. Frey // ============================================================= // Written: J.T. Frey, 23.FEB.2002 // Purpose: Atomic Number/Symbol Resolution class. // // Last Mod: n/a #include "ANSR.h" // Added for Avogadro // int __ANSRSymbolCmpBE( const void* key, const void* obj ) { return (*((TElementSymbol*)key) - ((TElementInfo*)obj)->chemSymbol); } int __ANSRSymbolCmpLE( const void* key, const void* obj ) { return strcmp((char*)key,(char*)(&((TElementInfo*)obj)->chemSymbol)); } // #ifndef PKGDATADIR # define PKGDATADIR "/usr/local/share/tubegen" #endif // Edit for avogadro on MSVC2008: This is causing linker errors, and is hardcoded // to a non-existant path. // const char* defaultANSRDBPath = PKGDATADIR "/periodic.table"; unsigned defaultTableSize = 36; TElementInfo defaultTable_LittleEndian[] = { {13 , '\0\0lA' , 26.98}, {18 , '\0\0rA' , 39.948}, {33 , '\0\0sA' , 74.92}, {5 , '\0\0\0B' , 10.81}, {4 , '\0\0eB' , 9.012}, {35 , '\0\0rB' , 79.904}, {6 , '\0\0\0C' , 12.011}, {20 , '\0\0aC' , 40.08}, {17 , '\0\0lC' , 35.453}, {27 , '\0\0oC' , 58.93}, {24 , '\0\0rC' , 52}, {29 , '\0\0uC' , 63.55}, {9 , '\0\0\0F' , 18.998}, {26 , '\0\0eF' , 55.85}, {31 , '\0\0aG' , 69.72}, {32 , '\0\0eG' , 72.61}, {1 , '\0\0\0H' , 1.0079}, {2 , '\0\0eH' , 4.0026}, {19 , '\0\0\0K' , 39.098}, {36 , '\0\0rK' , 83.8}, {3 , '\0\0iL' , 6.941}, {12 , '\0\0gM' , 24.31}, {25 , '\0\0nM' , 54.94}, {7 , '\0\0\0N' , 14.007}, {11 , '\0\0aN' , 22.99}, {10 , '\0\0eN' , 20.179}, {28 , '\0\0iN' , 58.7}, {8 , '\0\0\0O' , 15.999}, {15 , '\0\0\0P' , 30.974}, {16 , '\0\0\0S' , 32.066}, {21 , '\0\0cS' , 44.96}, {34 , '\0\0eS' , 78.96}, {14 , '\0\0iS' , 28.09}, {22 , '\0\0iT' , 47.88}, {23 , '\0\0\0V' , 50.94}, {30 , '\0\0nZ' , 65.39} }; TElementInfo defaultTable_BigEndian[] = { {13 , 'Al\0\0' , 26.98}, {18 , 'Ar\0\0' , 39.948}, {33 , 'As\0\0' , 74.92}, {5 , 'B\0\0\0' , 10.81}, {4 , 'Be\0\0' , 9.012}, {35 , 'Br\0\0' , 79.904}, {6 , 'C\0\0\0' , 12.011}, {20 , 'Ca\0\0' , 40.08}, {17 , 'Cl\0\0' , 35.453}, {27 , 'Co\0\0' , 58.93}, {24 , 'Cr\0\0' , 52}, {29 , 'Cu\0\0' , 63.55}, {9 , 'F\0\0\0' , 18.998}, {26 , 'Fe\0\0' , 55.85}, {31 , 'Ga\0\0' , 69.72}, {32 , 'Ge\0\0' , 72.61}, {1 , 'H\0\0\0' , 1.0079}, {2 , 'He\0\0' , 4.0026}, {19 , 'K\0\0\0' , 39.098}, {36 , 'Kr\0\0' , 83.8}, {3 , 'Li\0\0' , 6.941}, {12 , 'Mg\0\0' , 24.31}, {25 , 'Mn\0\0' , 54.94}, {7 , 'N\0\0\0' , 14.007}, {11 , 'Na\0\0' , 22.99}, {10 , 'Ne\0\0' , 20.179}, {28 , 'Ni\0\0' , 58.7}, {8 , 'O\0\0\0' , 15.999}, {15 , 'P\0\0\0' , 30.974}, {16 , 'S\0\0\0' , 32.066}, {21 , 'Sc\0\0' , 44.96}, {34 , 'Se\0\0' , 78.96}, {14 , 'Si\0\0' , 28.09}, {22 , 'Ti\0\0' , 47.88}, {23 , 'V\0\0\0' , 50.94}, {30 , 'Zn\0\0' , 65.39} }; unsigned defaultLookup[] = { 16 , 17 , 20 , 4 , 3 , 6 , 23 , 27 , 12 , \ 25 , 24 , 21 , 0 , 32 , 28 , 29 , 8 , 1 , \ 18 , 7 , 30 , 33 , 34 , 10 , 22 , 13 , 9 , \ 26 , 11 , 35 , 14 , 15 , 2 , 31 , 5 , 19 }; // ///////////////////////////////////////////////////////// // Default constructor. // ANSRDB::ANSRDB() { uint16_t test = 0x1234; elementsInTable = defaultTableSize; if (*((char*)&test) == 0x34) elements = (TElementInfo*)&defaultTable_LittleEndian; else elements = (TElementInfo*)&defaultTable_BigEndian; lookupTable = (unsigned*)&defaultLookup; } // ///////////////////////////////////////////////////////// // File-based constructor. // ANSRDB::ANSRDB( const char* filepath ) { if (!DidReadTableFromFile(filepath)) { uint16_t test = 0x1234; elementsInTable = defaultTableSize; if (*((char*)&test) == 0x34) elements = (TElementInfo*)&defaultTable_LittleEndian; else elements = (TElementInfo*)&defaultTable_BigEndian; lookupTable = (unsigned*)&defaultLookup; } } // ///////////////////////////////////////////////////////// // Default destructor. // ANSRDB::~ANSRDB() { if ((elements) && (elements != (TElementInfo*)&defaultTable_BigEndian) && \ (elements != (TElementInfo*)&defaultTable_LittleEndian)) free(elements); if ((lookupTable) && (lookupTable != (unsigned*)&defaultLookup)) free(lookupTable); } // ///////////////////////////////////////////////////////// // Lookup the chemical symbol for the given atomic // number. // TElementSymbol ANSRDB::LookupSymbolForNumber( unsigned number ) { if ((number == 0) || (number > elementsInTable)) return kANSRInvalidSymbol; return elements[lookupTable[number - 1]].chemSymbol; } // ///////////////////////////////////////////////////////// // Lookup the atomic number for the given chemical // symbol. // unsigned ANSRDB::LookupNumberForSymbol( TElementSymbol symbol ) { TElementInfo* found; uint16_t test = 0x1234; if (*((char*)&test) == 0x34) found = (TElementInfo*)bsearch(&symbol,elements,elementsInTable,sizeof(TElementInfo),__ANSRSymbolCmpLE); else found = (TElementInfo*)bsearch(&symbol,elements,elementsInTable,sizeof(TElementInfo),__ANSRSymbolCmpBE); if (found) return found->atomicNumber; return kANSRInvalidSymbol; } // ///////////////////////////////////////////////////////// // Lookup the element info record for the given atomic // number. // TElementInfo* ANSRDB::LookupElementInfoForNumber( unsigned number ) { if ((number == 0) || (number > elementsInTable)) return NULL; return &elements[lookupTable[number - 1]]; } // ///////////////////////////////////////////////////////// // Lookup the element info record for the given chemical // symbol. // TElementInfo* ANSRDB::LookupElementInfoForSymbol( TElementSymbol symbol ) { TElementInfo* found; uint16_t test = 0x1234; if (*((char*)&test) == 0x34) return (TElementInfo*)bsearch(&symbol,elements,elementsInTable,sizeof(TElementInfo),__ANSRSymbolCmpLE); return (TElementInfo*)bsearch(&symbol,elements,elementsInTable,sizeof(TElementInfo),__ANSRSymbolCmpBE); } // ///////////////////////////////////////////////////////// // Summarize the table(s) to the specified stream. // void ANSRDB::print( ostream& os ) { unsigned i; for ( i = 0 ; i < elementsInTable ; i++ ) os << i+1 << " { " << elements[i].atomicNumber << " , " << \ (char*)(&elements[i].chemSymbol) << " , " << elements[i].weight << " }" << endl; } // ///////////////////////////////////////////////////////// // Allocate memory for the tables. Returns 1 when // allocation was successful, 0 otherwise. // int ANSRDB::DidInitializeTables() { if (elementsInTable > 0) { elements = (TElementInfo*)calloc(elementsInTable,sizeof(TElementInfo)); if (elements) { if (lookupTable = (unsigned*)calloc(elementsInTable,sizeof(unsigned))) return 1; free(elements); } } return 0; } // ///////////////////////////////////////////////////////// // Attempt to read an ANSRDB from a file. Returns 1 // if successful, 0 otherwise. // int ANSRDB::DidReadTableFromFile( const char* filepath ) { FILE* stream; unsigned i; char buffer[8]; if (filepath == NULL) return 0; // NULL string error if ((stream = fopen(filepath,"r")) == NULL) return 0; // Cannot open file error if (((fscanf(stream,"%u",&elementsInTable)) != 1) || (elementsInTable == 0)) { fclose(stream); return 0; // Bad table size error } if (!DidInitializeTables()) { fclose(stream); return 0; // Memory allocation error } for ( i = 0 ; i < elementsInTable ; i++ ) { // Read an entry: unsigned tmpNum; TElementSymbol tmpSym = 0; double tmpWt; unsigned j,k; TElementInfo tmpEnt; int err; uint16_t test = 0x1234; if (( err = fscanf(stream,"%d %3s %lf",&tmpNum,buffer,&tmpWt) ) != 3) { fprintf(stderr,"Error(%d @ %d): %d %s %lf\n",err,i,tmpNum,buffer,tmpWt); fclose(stream); return 0; } tmpSym = ANSRDB::MakeSymbolFromString(buffer); if (*((char*)&test) == 0x34) { for ( j = 0 ; j < i ; j++ ) { // The table is sorted alphabetically according to the // symbols, so find where to insert this one: if ( strcmp((char*)(&(elements[j].chemSymbol)), (char*)(&tmpSym)) > 0 ) break; } } else { for ( j = 0 ; j < i ; j++ ) { // The table is sorted alphabetically according to the // symbols, so find where to insert this one: if (elements[j].chemSymbol > tmpSym) break; } } // Move everything FROM the insertion element TO the end // of the table up one space if necessary: if (j < i) for ( k = i ; k > j ; k-- ) elements[k] = elements[k - 1]; // Assign the new data: elements[j].chemSymbol = tmpSym; elements[j].atomicNumber = tmpNum; elements[j].weight = tmpWt; } // Index the symbol table with respect to atomic number, // so we can do quick lookups: for ( i = 0 ; i < elementsInTable ; i++ ) lookupTable[elements[i].atomicNumber - 1] = i; fclose(stream); // Success! return 1; } avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/Core3DMath.c0000755000175000001440000010240412250371054026202 0ustar marcususers/* =============================================================================== // Core3DMath.c 1999-2001, J.T. Frey // =============================================================================== // Written: J.T. Frey, 03/11/2001 // Purpose: Defines a specialized library for three-dimensional // applications and their specialized features. // // Last Mod: n/a */ #include "Core3DMath.h" #include "CoreConst.h" // Added for Avogadro: #include /* G L O B A L S */ const TPoint3D gOrigin = { 0.0 , 0.0 , 0.0 }; const TVector3D gXAxis = { 1.0 , 0.0 , 0.0 }; const TVector3D gYAxis = { 0.0 , 1.0 , 0.0 }; const TVector3D gZAxis = { 0.0 , 0.0 , 1.0 }; const TXMatrix gXIdentity = { { 1.0 , 0.0 , 0.0 , 0.0 , \ 0.0 , 1.0 , 0.0 , 0.0 , \ 0.0 , 0.0 , 1.0 , 0.0 , \ 0.0 , 0.0 , 0.0 , 1.0 } }; /**/ /* ---------------------------------------------------------------------- // * Point3D_Zero // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Make the point be the origin (0,0,0) // // // Last Mod: n/a */ void Point3D_Zero( TPoint3D* p ) { Point3D_Splat(p,0.0); } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Zero // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Make the vector be a null vector, <0,0,0> // // // Last Mod: n/a */ void Vector3D_Zero( TVector3D* v ) { Vector3D_Splat(v,0.0); } /**/ /* ---------------------------------------------------------------------- // * Quaternion_Identity // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Make the quaternion be identity <1,0,0,0> // // // Last Mod: n/a */ void Quaternion_Identity( TQuaternion* q ) { if (q) { q->w = 1.0; q->x = 0.0; q->y = 0.0; q->z = 0.0; } } /**/ /* ---------------------------------------------------------------------- // * XMatrix_Identity // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Make the matrix be identity. // // // Last Mod: n/a */ void XMatrix_Identity( TXMatrix* m ) { if (m) memcpy(m,&gXIdentity,sizeof(TXMatrix)); } /**/ /* ---------------------------------------------------------------------- // * Point3D_Splat // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Fill a 3D point with the given value. // // // Last Mod: n/a */ void Point3D_Splat( TPoint3D* p, double s ) { if (p) { p->x = s; p->y = s; p->z = s; } } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Splat // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Fill a 3D vector with the given value. // // // Last Mod: n/a */ void Vector3D_Splat( TVector3D* v, double s ) { if (v) { v->x = s; v->y = s; v->z = s; } } /**/ /* ---------------------------------------------------------------------- // * Point3D_Rezero // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Clean up a 3D point by looking for values less than // the specified minimum. // // // Last Mod: n/a */ void Point3D_Rezero( TPoint3D* p, double zeroAt ) { if (p) { if (fabs(p->x) <= zeroAt) p->x = 0.0; if (fabs(p->y) <= zeroAt) p->y = 0.0; if (fabs(p->z) <= zeroAt) p->z = 0.0; } } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Rezero // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Clean up a vector by looking for values less than // the specified minimum. // // // Last Mod: n/a */ void Vector3D_Rezero( TVector3D* v, double zeroAt ) { if (v) { if (fabs(v->x) <= zeroAt) v->x = 0.0; if (fabs(v->y) <= zeroAt) v->y = 0.0; if (fabs(v->z) <= zeroAt) v->z = 0.0; } } /**/ /* ---------------------------------------------------------------------- // * Quaternion_Rezero // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Clean up a quaternion by looking for values less than // the specified minimum. // // // Last Mod: n/a */ void Quaternion_Rezero( TQuaternion* q, double zeroAt ) { if (q) { if (fabs(q->w) <= zeroAt) q->w = 0.0; if (fabs(q->x) <= zeroAt) q->x = 0.0; if (fabs(q->y) <= zeroAt) q->y = 0.0; if (fabs(q->z) <= zeroAt) q->z = 0.0; } } /**/ /* ---------------------------------------------------------------------- // * XMatrix_Rezero // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Clean up a transformation matrix by looking for values // less than the specified minimum. // // // Last Mod: n/a */ void XMatrix_Rezero( TXMatrix* m, double zeroAt ) { long i; double *mat; if (m) { mat = m->matrix; for ( i = 0 ; i < 16 ; i++ ) { if (fabs(*mat) <= zeroAt) *mat = 0.0; mat++; } } } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Dot // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Dot-product of two 3D vectors. // // Last Mod: n/a */ double Vector3D_Dot( const TVector3D* v1, const TVector3D* v2 ) { double tmp = 0.0; if ((v1) && (v2)) { tmp = (v1->x * v2->x + v1->y * v2->y + v1->z * v2->z); if (fabs(tmp) < DBL_EPSILON) tmp = 0.0; } return tmp; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Cross // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Cross-product of two 3D vectors. // // Last Mod: n/a */ TVector3D* Vector3D_Cross( const TVector3D* v1, const TVector3D* v2, TVector3D* r ) { TVector3D tmpV; TVector3D* V = ((r == v1) || (r == v2)) ? &tmpV : r; if ((r == NULL) || (v1 == NULL) || (v2 == NULL)) return NULL; V->x = ((fabs(V->x = v1->y * v2->z - v1->z * v2->y) >= kZeroFloat)?(V->x):(0.0)); V->y = ((fabs(V->y = v1->z * v2->x - v1->x * v2->z) >= kZeroFloat)?(V->y):(0.0)); V->z = ((fabs(V->z = v1->x * v2->y - v1->y * v2->x) >= kZeroFloat)?(V->z):(0.0)); if (V == &tmpV) *r = tmpV; return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Magnitude // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Length of a 3D vector. // // Last Mod: n/a */ double Vector3D_Magnitude( const TVector3D* v ) { if (v) return sqrt( v->x * v->x + v->y * v->y + v->z * v->z ); return 0.0; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Normalize // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Normalize a 3D vector. // // Last Mod: n/a */ TVector3D* Vector3D_Normalize( const TVector3D* v, TVector3D* r ) { double norm; if ((r == NULL) || (v == NULL)) return NULL; norm = sqrt( v->x * v->x + v->y * v->y + v->z * v->z ); if (norm >= kZeroFloat) { norm = 1 / norm; r->x = v->x * norm; r->y = v->y * norm; r->z = v->z * norm; } else r->x = r->y = r->z = 0.0; return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Negate // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Negate a 3D vector. // // Last Mod: n/a */ TVector3D* Vector3D_Negate( const TVector3D* v, TVector3D* r ) { if ((r == NULL) || (v == NULL)) return NULL; r->x = -v->x; r->y = -v->y; r->z = -v->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Scalar // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Scale a 3D vector. // // Last Mod: n/a */ TVector3D* Vector3D_Scalar( const TVector3D* v, double s, TVector3D* r ) { if ((r == NULL) || (v == NULL)) return NULL; r->x = s * v->x; r->y = s * v->y; r->z = s * v->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Sum // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Sum two 3D vectors. // // Last Mod: n/a */ TVector3D* Vector3D_Sum( const TVector3D* v1, const TVector3D* v2, TVector3D* r ) { if ((r == NULL) || (v1 == NULL) || (v2 == NULL)) return NULL; r->x = v1->x + v2->x; r->y = v1->y + v2->y; r->z = v1->z + v2->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_ScaledSum // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Sum a scaled 3D vector and another vector: // __ __ // r = v1 + s v2 // // Last Mod: n/a */ TVector3D* Vector3D_ScaledSum( const TVector3D* v1, double s, const TVector3D* v2, TVector3D* r ) { if ((r == NULL) || (v1 == NULL) || (v2 == NULL)) return NULL; r->x = v1->x + s * v2->x; r->y = v1->y + s * v2->y; r->z = v1->z + s * v2->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_Diff // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Subtract one 3D vector from another 3D vector. // // Last Mod: n/a */ TVector3D* Vector3D_Diff( const TVector3D* v1, const TVector3D* v2, TVector3D* r ) { if ((r == NULL) || (v1 == NULL) || (v2 == NULL)) return NULL; r->x = v1->x - v2->x; r->y = v1->y - v2->y; r->z = v1->z - v2->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_ScaledDiff // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Subtract a scaled 3D vector from another vector: // __ __ // r = v1 + s v2 // // Last Mod: n/a */ TVector3D* Vector3D_ScaledDiff( const TVector3D* v1, double s, const TVector3D* v2, TVector3D* r ) { if ((r == NULL) || (v1 == NULL) || (v2 == NULL)) return NULL; r->x = v1->x - s * v2->x; r->y = v1->y - s * v2->y; r->z = v1->z - s * v2->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_TransformQuaternion // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Transform a vector using a unit quaternion. // // Last Mod: n/a */ TVector3D* Vector3D_TransformQuaternion( const TVector3D* v, const TQuaternion* q, TVector3D* r ) { TQuaternion temp; if ((r == NULL) || (v == NULL) || (q == NULL)) return NULL; /* Multiply qinv * v */ temp.w = q->x * v->x + q->y * v->y + q->z * v->z; temp.x = q->w * v->x + (q->y * v->z - q->z * v->y); temp.y = q->w * v->y - (q->x * v->z - q->z * v->x); temp.z = q->w * v->z + (q->x * v->y - q->y * v->x); /* Multiply temp * q and poke into the return spot in the process: */ r->x = temp.w * q->x + temp.x * q->w - (temp.y * q->z - temp.z * q->y); r->y = temp.w * q->y + temp.y * q->w + (temp.x * q->z - temp.z * q->x); r->z = temp.w * q->z + temp.z * q->w - (temp.x * q->y - temp.y * q->x); return r; } /**/ /* ---------------------------------------------------------------------- // * Vector3D_TransformMatrix // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Transform a vector using a transformation matrix. // // Last Mod: n/a */ TVector3D* Vector3D_TransformMatrix( const TVector3D* v, const TXMatrix* m, TVector3D* r ) { #define X v->x #define Y v->y #define Z v->z #define M(I,J) m->matrix[J + I * 4] TVector3D tmpV; TVector3D* V = (r == v) ? &tmpV : r; if ((r == NULL) || (v == NULL) || (m == NULL)) return NULL; /* Row vector (point) times matrix: */ V->x = M(0,0)*X + M(1,0)*Y + M(2,0)*Z + M(3,0); V->y = M(0,1)*X + M(1,1)*Y + M(2,1)*Z + M(3,1); V->z = M(0,2)*X + M(1,2)*Y + M(2,2)*Z + M(3,2); if (V == &tmpV) *r = tmpV; return r; #undef X #undef Y #undef Z #undef M } /**/ /* ---------------------------------------------------------------------- // * Vector3D_WriteToStream // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Print the vector. // // Last Mod: n/a */ void Vector3D_WriteToStream( const TVector3D* v, FILE* stream ) { if (v) fprintf(stream,"< %lg %lg %lg >",v->x,v->y,v->z); } /**/ /* ---------------------------------------------------------------------- // * Point3D_Distance // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Distance between two points (thanx to Pythagoras). // // Last Mod: n/a */ double Point3D_Distance( const TPoint3D* p1, const TPoint3D* p2 ) { double dx,dy,dz; if ((p1 == NULL) || (p2 == NULL)) return 0.0; dx = p1->x - p2->x; dy = p1->y - p2->y; dz = p1->z - p2->z; return sqrt(dx * dx + dy * dy + dz * dz); } /**/ /* ---------------------------------------------------------------------- // * Point3D_VectorTransform // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Translate a point in space using a vector. // // Last Mod: n/a */ TPoint3D* Point3D_VectorTransform( const TPoint3D* p, const TVector3D* v, TPoint3D* r ) { if ((r == NULL) || (p == NULL) || (v == NULL)) return NULL; r->x = p->x + v->x; r->y = p->y + v->y; r->z = p->z + v->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Point3D_ScaledVectorTransform // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Translate a point in space using a vector which is // scaled by some factor 's'. // // Last Mod: n/a */ TPoint3D* Point3D_ScaledVectorTransform( const TPoint3D* p, double s, const TVector3D* v, TPoint3D* r ) { if ((r == NULL) || (v == NULL) || (p == NULL)) return NULL; r->x = p->x + s * v->x; r->y = p->y + s * v->y; r->z = p->z + s * v->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Point3D_TransformQuaternion // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Transform a point using a unit quaternion. // // Last Mod: n/a */ TPoint3D* Point3D_TransformQuaternion( const TPoint3D* p, const TQuaternion* q, TPoint3D* r ) { TQuaternion temp; if ((r == NULL) || (p == NULL) || (q == NULL)) return NULL; /* Multiply qinv * p */ temp.w = q->x * p->x + q->y * p->y + q->z * p->z; temp.x = q->w * p->x + (q->y * p->z - q->z * p->y); temp.y = q->w * p->y - (q->x * p->z - q->z * p->x); temp.z = q->w * p->z + (q->x * p->y - q->y * p->x); /* Multiply temp * q and poke into the return spot in the process: */ r->x = temp.w * q->x + temp.x * q->w - (temp.y * q->z - temp.z * q->y); r->y = temp.w * q->y + temp.y * q->w + (temp.x * q->z - temp.z * q->x); r->z = temp.w * q->z + temp.z * q->w - (temp.x * q->y - temp.y * q->x); return r; } /**/ /* ---------------------------------------------------------------------- // * Point3D_TransformMatrix // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Transform a point using a transformation matrix. // // Last Mod: n/a */ TPoint3D* Point3D_TransformMatrix( const TPoint3D* p, const TXMatrix* m, TPoint3D* r ) { #define X p->x #define Y p->y #define Z p->z #define M(I,J) m->matrix[J + I * 4] TPoint3D tmpP; TPoint3D* P = (r == p) ? &tmpP : r; if ((r == NULL) || (p == NULL) || (m == NULL)) return NULL; /* Row vector (point) times matrix: */ P->x = M(0,0)*X + M(1,0)*Y + M(2,0)*Z + M(3,0); P->y = M(0,1)*X + M(1,1)*Y + M(2,1)*Z + M(3,1); P->z = M(0,2)*X + M(1,2)*Y + M(2,2)*Z + M(3,2); if (P == &tmpP) *r = tmpP; return r; #undef X #undef Y #undef Z #undef M } /**/ /* ---------------------------------------------------------------------- // * Point3D_WriteToStream // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Print the point. // // Last Mod: n/a */ void Point3D_WriteToStream( const TPoint3D* p, FILE* stream ) { if (p) fprintf(stream,"( %lg %lg %lg )",p->x,p->y,p->z); } /**/ /* ---------------------------------------------------------------------- // * Quaternion_Multiply // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Reverse-order multiplication of quaternions. // // Last Mod: n/a */ TQuaternion* Quaternion_Multiply( const TQuaternion* q1, const TQuaternion* q2, TQuaternion* r ) { TQuaternion tmpQ; TQuaternion* Q = ((r == q1) || (r == q2)) ? &tmpQ : r; if ((r == NULL) || (q1 == NULL) || (q2 == NULL)) return NULL; Q->w = q1->w*q2->w - q1->x*q2->x - q1->y*q2->y - q1->z*q2->z; Q->x = q1->w*q2->x + q1->x*q2->w - q1->y*q2->z + q1->z*q2->y; Q->y = q1->w*q2->y + q1->y*q2->w - q1->z*q2->x + q1->x*q2->z; Q->z = q1->w*q2->z + q1->z*q2->w - q1->x*q2->y + q1->y*q2->x; if (Q == &tmpQ) *r = tmpQ; return r; } /**/ /* ---------------------------------------------------------------------- // * Quaternion_Invert // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Invert a quaternion. // // Last Mod: n/a */ TQuaternion* Quaternion_Invert( const TQuaternion* q, TQuaternion* r ) { if ((r == NULL) || (q == NULL)) return NULL; r->w = q->w; r->x = -q->x; r->y = -q->y; r->z = -q->z; return r; } /**/ /* ---------------------------------------------------------------------- // * Quaternion_SetRotateAroundXAxis // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Set the fields of a quaternion such that it represents a // rotation around the x-axis. // // Last Mod: n/a */ void Quaternion_SetRotateAroundXAxis( TQuaternion* q, double theta ) { double phi = 0.5 * theta; if (q) { q->w = cos(phi); q->x = sin(phi); q->y = 0.0; q->z = 0.0; if (fabs(q->w) < DBL_EPSILON) q->w = 0.0; if (fabs(q->x) < DBL_EPSILON) q->x = 0.0; } } /**/ /* ---------------------------------------------------------------------- // * Quaternion_SetRotateAroundYAxis // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Set the fields of a quaternion such that it represents a // rotation around the y-axis. // // Last Mod: n/a */ void Quaternion_SetRotateAroundYAxis( TQuaternion* q, double theta ) { double phi = 0.5 * theta; if (q) { q->w = cos(phi); q->x = 0.0; q->y = sin(phi); q->z = 0.0; if (fabs(q->w) < DBL_EPSILON) q->w = 0.0; if (fabs(q->y) < DBL_EPSILON) q->y = 0.0; } } /**/ /* ---------------------------------------------------------------------- // * Quaternion_SetRotateAroundZAxis // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Set the fields of a quaternion such that it represents a // rotation around the z-axis. // // Last Mod: n/a */ void Quaternion_SetRotateAroundZAxis( TQuaternion* q, double theta ) { double phi = 0.5 * theta; if (q) { q->w = cos(phi); q->x = 0.0; q->y = 0.0; q->z = sin(phi); if (fabs(q->w) < DBL_EPSILON) q->w = 0.0; if (fabs(q->z) < DBL_EPSILON) q->z = 0.0; } } /**/ /* ---------------------------------------------------------------------- // * Quaternion_SetRotateAroundAxis // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Set the fields of a quaternion such that it represents a // rotation around an arbitrary axis. // // Last Mod: n/a */ void Quaternion_SetRotateAroundAxis( TQuaternion* q, const TVector3D* v, double theta ) { double phi = 0.5 * theta; double sinePhi = sin(phi); double cosinePhi = cos(phi); double norm = sqrt( v->x * v->x + v->y * v->y + v->z * v->z ); if (fabs(cosinePhi) < DBL_EPSILON) cosinePhi = 0.0; if (fabs(sinePhi) < DBL_EPSILON) sinePhi = 0.0; if ((q) && (v)) { q->w = cosinePhi; q->x = v->x / norm * sinePhi; q->y = v->y / norm * sinePhi; q->z = v->z / norm * sinePhi; } } /**/ /* ---------------------------------------------------------------------- // * Quaternion_SetRotateVectorToVector // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Set the fields of a quaternion such that it represents a // rotation of one vector into another. // // Last Mod: n/a */ void Quaternion_SetRotateVectorToVector( TQuaternion* q, const TVector3D* vFrom, const TVector3D* vTo ) { #define EPSILON 0.00001 TVector3D normTov1v2,v1Normal,v2Normal; double cosine_sqrd,len; if ((q == NULL) || (vFrom == NULL) || (vTo == NULL)) return; /* Normalize the input parameters - this is not required by the spec, but the QD3D implementation accepts unnormalised inputs. [jtf] For greatest speed, I'll normalize on my own. */ len = 1 / sqrt(vFrom->x * vFrom->x + vFrom->y * vFrom->y + vFrom->z * vFrom->z); v1Normal.x = vFrom->x * len; v1Normal.y = vFrom->y * len; v1Normal.z = vFrom->z * len; len = 1 / sqrt(vTo->x * vTo->x + vTo->y * vTo->y + vTo->z * vTo->z); v2Normal.x = vTo->x * len; v2Normal.y = vTo->y * len; v2Normal.z = vTo->z * len; /* Check for vFrom, vTo equality */ if ((fabs(v1Normal.x - v2Normal.x) < EPSILON) && \ (fabs(v1Normal.y - v2Normal.y) < EPSILON) && \ (fabs(v1Normal.z - v2Normal.z) < EPSILON)) { q->w = 1; q->x = q->y = q->z = 0; return; } /* Check for vectors in the same line but opposite direction the cross would be 0,0,0 what is not what we want */ if ((fabs(v1Normal.x + v2Normal.x) < EPSILON) && \ (fabs(v1Normal.y + v2Normal.y) < EPSILON) && \ (fabs(v1Normal.z + v2Normal.z) < EPSILON)) { /* this vector is orthogonal to both of the vectors */ normTov1v2.x = -v1Normal.y; normTov1v2.y = -v1Normal.z; normTov1v2.z = v1Normal.x; len = 1; } else { normTov1v2.x = v1Normal.y * v2Normal.z - v2Normal.y * v1Normal.z; normTov1v2.y = v1Normal.z * v2Normal.x - v2Normal.z * v1Normal.x; normTov1v2.z = v1Normal.x * v2Normal.y - v2Normal.x * v1Normal.y; len = sqrt(normTov1v2.x * normTov1v2.x + normTov1v2.y * normTov1v2.y + normTov1v2.z * normTov1v2.z); } /* A unit quaternion exists as a scalar representing rotation about an arbitrary axis -- w = cos (theta / 2) -- and the 3-vector describing the axis. w = cos ( theta / 2 ) = sqrt( (v1.v2 + 1)/2 ) Note: J.B. initially raised the question of whether or not the eqn. should actually be: w = cos ( theta / 2 ) = sqrt( (v1.v2 + 1)/2 ) It's a good point, but the answer is this: it depends upon the range of theta. Since the dot product only generates values in the range of [-1,1], and the inverse cosine has a domain of [0,Pi] for this range, we can assume that our theta ranges from [0,Pi]. As such, the largest half-angle that would appear for w is (Pi/2), so the true range of our cos(theta/2) term is [0,Pi/2]. In this range, all cosines are positive, so we can stick with the first definition of w. The handedness of the rotation is handled by the orientation of the rotational axis. Rotation about the +y-axis by theta is NOT the same as rotation about the -y-axis by theta. */ cosine_sqrd = (v1Normal.x * v2Normal.x + v1Normal.y * v2Normal.y + v1Normal.z * v2Normal.z + 1) / 2; /* The axis about which we rotate is restricted to be of length sin (theta / 2); luckily, via trig identity: sin (theta / 2) = sqrt( 1 - (cos (theta / 2))^2 ) sin (theta / 2) = sqrt( 1 - cosine_sqrd ) At the same time we must first normalize the normal vector; so we simply compute the entire scalar which the normal vector would be multiplied by to get (1) normalized and (2) length sin(theta/2): scalar factor = sin(theta/2) / length of normal vector */ len = sqrt( 1 - cosine_sqrd ) / len; /* Set the quaternion; we want the square root of cosine_sqrd and each term of the normal vector must be multiplied by the scalar factor which was just computed: */ q->w = sqrt(cosine_sqrd); q->x = normTov1v2.x * len; q->y = normTov1v2.y * len; q->z = normTov1v2.z * len; Quaternion_Rezero(q,DBL_EPSILON); #undef EPSILON } /**/ /* ---------------------------------------------------------------------- // * Quaternion_WriteToStream // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Print the quaternion. // // Last Mod: n/a */ void Quaternion_WriteToStream( const TQuaternion* q, FILE* stream ) { if (q) fprintf(stream,"< %lg %lg %lg %lg >",q->w,q->x,q->y,q->z); } /**/ /* ---------------------------------------------------------------------- // * XMatrix_Multiply // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Concatenates (multiplies) one transformation matrix by // another. // // Last Mod: n/a */ TXMatrix* XMatrix_Multiply( const TXMatrix* m1, const TXMatrix* m2, TXMatrix* r ) { #define M1(I,J) m1->matrix[J + I * 4] #define M2(I,J) m2->matrix[J + I * 4] #define R(I,J) M->matrix[J + I * 4] TXMatrix tmpM; TXMatrix* M = ((r == m1) || (r == m2)) ? &tmpM : r; if ((r == NULL) || (m1 == NULL) || (m2 == NULL)) return r; R(0,0) = M1(0,0)*M2(0,0) + M1(0,1)*M2(1,0) + M1(0,2)*M2(2,0) + M1(0,3)*M2(3,0); R(0,1) = M1(0,0)*M2(0,1) + M1(0,1)*M2(1,1) + M1(0,2)*M2(2,1) + M1(0,3)*M2(3,1); R(0,2) = M1(0,0)*M2(0,2) + M1(0,1)*M2(1,2) + M1(0,2)*M2(2,2) + M1(0,3)*M2(3,2); R(0,3) = M1(0,0)*M2(0,3) + M1(0,1)*M2(1,3) + M1(0,2)*M2(2,3) + M1(0,3)*M2(3,3); R(1,0) = M1(1,0)*M2(0,0) + M1(1,1)*M2(1,0) + M1(1,2)*M2(2,0) + M1(1,3)*M2(3,0); R(1,1) = M1(1,0)*M2(0,1) + M1(1,1)*M2(1,1) + M1(1,2)*M2(2,1) + M1(1,3)*M2(3,1); R(1,2) = M1(1,0)*M2(0,2) + M1(1,1)*M2(1,2) + M1(1,2)*M2(2,2) + M1(1,3)*M2(3,2); R(1,3) = M1(1,0)*M2(0,3) + M1(1,1)*M2(1,3) + M1(1,2)*M2(2,3) + M1(1,3)*M2(3,3); R(2,0) = M1(2,0)*M2(0,0) + M1(2,1)*M2(1,0) + M1(2,2)*M2(2,0) + M1(2,3)*M2(3,0); R(2,1) = M1(2,0)*M2(0,1) + M1(2,1)*M2(1,1) + M1(2,2)*M2(2,1) + M1(2,3)*M2(3,1); R(2,2) = M1(2,0)*M2(0,2) + M1(2,1)*M2(1,2) + M1(2,2)*M2(2,2) + M1(2,3)*M2(3,2); R(2,3) = M1(2,0)*M2(0,3) + M1(2,1)*M2(1,3) + M1(2,2)*M2(2,3) + M1(2,3)*M2(3,3); R(3,0) = M1(3,0)*M2(0,0) + M1(3,1)*M2(1,0) + M1(3,2)*M2(2,0) + M1(3,3)*M2(3,0); R(3,1) = M1(3,0)*M2(0,1) + M1(3,1)*M2(1,1) + M1(3,2)*M2(2,1) + M1(3,3)*M2(3,1); R(3,2) = M1(3,0)*M2(0,2) + M1(3,1)*M2(1,2) + M1(3,2)*M2(2,2) + M1(3,3)*M2(3,2); R(3,3) = M1(3,0)*M2(0,3) + M1(3,1)*M2(1,3) + M1(3,2)*M2(2,3) + M1(3,3)*M2(3,3); if (M == &tmpM) *r = tmpM; return r; #undef M1 #undef M2 #undef R } /**/ /* ---------------------------------------------------------------------- // * XMatrix_UniformScaleXMatrix // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Scales a tranformation matrix without resetting the // factors that are already there. // // Last Mod: n/a */ void XMatrix_UniformScaleXMatrix( TXMatrix* m, double s ) { #define M(I,J) m->matrix[J + I * 4] if (m) { M(0,0) *= s; M(1,1) *= s; M(2,2) *= s; } #undef M } /**/ /* ---------------------------------------------------------------------- // * XMatrix_TranslateXMatrix // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Modifies the translation factors in a transformation // matrix. // // Last Mod: n/a */ void XMatrix_TranslateXMatrix( TXMatrix* m, double dx, double dy, double dz ) { #define M(I,J) m->matrix[J + I * 4] if (m) { M(3,0) = dx; M(3,1) = dy; M(3,2) = dz; } #undef M } /**/ /* ---------------------------------------------------------------------- // * XMatrix_SetRotateAroundXAxis // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Set a rotation matrix to represent rotation about the // x-axis. // // Last Mod: n/a */ void XMatrix_SetRotateAroundXAxis( TXMatrix* m, double theta ) { #define M(I,J) m->matrix[J + I * 4] double cosTheta = cos(theta); double sinTheta = sin(theta); if (fabs(cosTheta) < DBL_EPSILON) cosTheta = 0.0; if (fabs(sinTheta) < DBL_EPSILON) sinTheta = 0.0; if (m) { memset(m,0,sizeof(TXMatrix)); M(0,0) = 1.0; M(1,1) = cosTheta; M(1,2) = sinTheta; M(2,1) = -sinTheta; M(2,2) = cosTheta; M(3,3) = 1.0; } #undef M } /**/ /* ---------------------------------------------------------------------- // * XMatrix_SetRotateAroundYAxis // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Set a rotation matrix to represent rotation about the // y-axis. // // Last Mod: n/a */ void XMatrix_SetRotateAroundYAxis( TXMatrix* m, double theta ) { #define M(I,J) m->matrix[J + I * 4] double cosTheta = cos(theta); double sinTheta = sin(theta); if (fabs(cosTheta) < DBL_EPSILON) cosTheta = 0.0; if (fabs(sinTheta) < DBL_EPSILON) sinTheta = 0.0; if (m) { memset(m,0,sizeof(TXMatrix)); M(0,0) = cosTheta; M(0,2) = sinTheta; M(1,1) = 1.0; M(2,0) = -sinTheta; M(2,2) = cosTheta; M(3,3) = 1.0; } #undef M } /**/ /* ---------------------------------------------------------------------- // * XMatrix_SetRotateAroundZAxis // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Set a rotation matrix to represent rotation about the // z-axis. // // Last Mod: n/a */ void XMatrix_SetRotateAroundZAxis( TXMatrix* m, double theta ) { #define M(I,J) m->matrix[J + I * 4] double cosTheta = cos(theta); double sinTheta = sin(theta); if (fabs(cosTheta) < DBL_EPSILON) cosTheta = 0.0; if (fabs(sinTheta) < DBL_EPSILON) sinTheta = 0.0; if (m) { memset(m,0,sizeof(TXMatrix)); M(0,0) = cosTheta; M(0,1) = sinTheta; M(1,0) = -sinTheta; M(1,1) = cosTheta; M(2,2) = 1.0; M(3,3) = 1.0; } #undef M } /**/ /* ---------------------------------------------------------------------- // * XMatrix_WriteToStream // ---------------------------------------------------------------------- // Updated: Jeff Frey, 12/19/2001 // Purpose: Print the transformation matrix. // // Last Mod: n/a */ void XMatrix_WriteToStream( const TXMatrix* m, FILE* stream ) { long i,j; double* mat; if (m) { mat = (double*)(m->matrix); for ( i = 0 ; i < 4 ; i++ ) { if (i == 0) fprintf(stream,"[[ "); else fprintf(stream," [ "); for ( j = 0 ; j < 4 ; j++ , mat++ ) fprintf(stream,"%lg ",*mat); if (i == 3) fprintf(stream,"]]"); else fprintf(stream,"]\n"); } } } /**/ avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/TubuleBasis.h0000755000175000001440000001134012250371054026536 0ustar marcususers// =============================================================================== // TubuleBasis.h �2001-2002, J.T. Frey // =============================================================================== // Written: J.T. Frey, 12.07.2002 // Purpose: Class that encapsulates the process of generating atomic positions // in the nanotube lattice. // // Last Mod: 05.Feb.2003: Removed all ostream::form calls and moved to purely // C++ stream operators. #ifndef __TUBULEBASIS__ #define __TUBULEBASIS__ // Removed for Avogadro: // #include // // Replaced with: #include "Core3DMath.h" #include "CrystalCell.h" using namespace std; enum { EUnits_Angstrom = 0, EUnits_Bohr }; enum { EFormat_Undefined = -1, EFormat_Gaussian = 0, EFormat_GaussianPBC, EFormat_WIEN, EFormat_XYZ, EFormat_PDB, EFormat_PDBPBC, EFormat_POV, EFormat_BGF, EFormat_CIF, EFormat_Max }; enum { ELattice_Hexagonal = 0, ELattice_Cubic, ELattice_Planar }; // Standard bond length (C-C), in Angstrom #define STD_BOND 1.421 // Standard gutter length, in Angstrom #define STD_GUTTER_LENGTH 1.6735 // Standard convergence values for relaxation of tubule: #define STD_RADIUS_CONVERGENCE 1e-15 #define STD_ERROR_CONVERGENCE 1e-15 #define STD_GAMMA_CONVERGENCE 1e-15 // enum { EDirection_X, EDirection_Y, EDirection_Z }; // class TubuleBasis { public: TubuleBasis(); TubuleBasis(int,int); CrystalCell* GenerateCrystalCell(); void WriteInputFile(ostream&); void WriteInputFile(ostream&,CrystalCell*); int Get_n(); void Set_n(int); int Get_m(); void Set_m(int); void Set_nandm(int,int); int Get_nprime(); int Get_mprime(); unsigned Get_element(unsigned which); void Set_element(unsigned which,unsigned atomicNumber); double Get_bond(); void Set_bond(double bondLength); void Get_a1(TVector3D*); void Get_a2(TVector3D*); void Get_Ch(TVector3D*); void Get_T(TVector3D*); double Get_gutter(int); void Set_gutter(int,double); int Get_replication(int); void Set_replication(int,int); int GetOption_Units(); void SetOption_Units(int); double GetUnitConversionFactor(); int GetOption_Format(); void SetOption_Format(int); bool SetOption_Format(const char*); const char* StringForFormat(); const char* FileExtensionsForFormat(); static void SummarizeFormatStrings() { void __TubuleBasis_FormatStringSummary(void); __TubuleBasis_FormatStringSummary(); } int GetOption_Lattice(); void SetOption_Lattice(int); bool GetOption_Verbose(); void SetOption_Verbose(bool); bool GetOption_RelaxTubule(); void SetOption_RelaxTubule(bool); double GetOption_RadiusConv(); void SetOption_RadiusConv(double); double GetOption_ErrorConv(); void SetOption_ErrorConv(double); double GetOption_GammaConv(); void SetOption_GammaConv(double); private: // Member data: double bondLen,bondLenScale; TVector3D a1,a2,gutter; int replicate[3]; int n,m,nprime,mprime,d,dR; TVector3D Ch,T,Tprime; TVector3D Ch_R,T_R; double lenCh,lenT,r,h; unsigned element[2]; // Options: int oUnits; int oFormat; int oLattice; bool oVerbose; bool oRelaxTubule; bool oNonOrthProj; double oRadiusConv; double oErrorConv; double oGammaConv; double cUnitConversion; // For relaxation routines: TVector3D optvec[3]; double gamma[3]; double lenvec[3]; void InitializeBasis(int, int); void CalculateGraphiticBasisVectors(); void CalculateTranslationalIndices(); void CalculateTubuleCellVectors(); double CalculateError(int,double); double CalculateErrorDerivative(int,double); double CalculateTheta(int); void OptimizeGammas(); }; #endif avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/TubuleBasis.cpp0000755000175000001440000015017012250371054027076 0ustar marcususers// =============================================================================== // TubuleBasis.cpp ©2001-2002, J.T. Frey // =============================================================================== // Written: J.T. Frey, 07.26.2001 // Purpose: Main program file for the TubeGen app. This file contains the // routines which generate the atomic basis for a unit cell and the // k-point list for a unit cell. Also contains the main program // which processes user commands. // // Last Mod: 20.FEB.2002: Switch to hexagonal unit cell; k-point generator is // no longer necessary. // 18.NOV.2002: Modifications to position generation loop [3.0.5] // 03.DEC.2002: Cell expansion/contraction to preserve rolled C-C // bond lengths added as an option [3.0.6] // 09.JUL.2004: Support for PDB [3.1.2] // 22.DEC.2004: Fixed WIEN cell parameters for cubic & planar // // Include some of our own headers: #include "TubuleBasis.h" #include "CoreConst.h" #include "Constants.h" #include "ANSR.h" #include "Bitmap.h" // Added for Avogadro #include #include #ifdef _MSC_VER #define _USE_MATH_DEFINES #include #define strcasecmp _stricmp #endif // struct ExportFormatRec { int stringIndex; int formatID; }; #define __TubuleBasis_FormatSpecCount EFormat_Max const char* __TubuleBasis_FormatStrings[__TubuleBasis_FormatSpecCount] = { "gaussian" , "gaussian-pbc" , "wien" , "xyz" , "pdb" , "pdb-pbc" , "pov" , "bgf" , "cif" }; const char* __TubuleBasis_FileExtensions[__TubuleBasis_FormatSpecCount] = { "com" , "com" , "struct" , "xyz" , "pdb" , "pdb" , "povinc" , "bgf" , "cif" }; struct ExportFormatRec __TubuleBasis_FormatSpecs[__TubuleBasis_FormatSpecCount] = { { 7 , EFormat_BGF }, { 8 , EFormat_CIF }, { 0 , EFormat_Gaussian }, { 1 , EFormat_GaussianPBC }, { 4 , EFormat_PDB }, { 5 , EFormat_PDBPBC }, { 6 , EFormat_POV }, { 2 , EFormat_WIEN }, { 3 , EFormat_XYZ } }; // int __TubuleBasis_FormatSpecBSearchDriver(const void* key,const void* value) { return strcasecmp((const char*)key,__TubuleBasis_FormatStrings[((struct ExportFormatRec*)value)->stringIndex]); } void __TubuleBasis_FormatStringSummary() { int i = 0; for ( ; i < EFormat_Max - 1 ; i++ ) printf("%s,",__TubuleBasis_FormatStrings[i]); printf("%s",__TubuleBasis_FormatStrings[i]); } inline int __TubuleBasis_FormatIDForString(const char* formatString) { struct ExportFormatRec* match = (ExportFormatRec*) bsearch(formatString, __TubuleBasis_FormatSpecs, __TubuleBasis_FormatSpecCount, sizeof(struct ExportFormatRec), __TubuleBasis_FormatSpecBSearchDriver ); if (match) return match->formatID; return EFormat_Undefined; } inline const char* __TubuleBasis_StringForFormatID(int formatID) { return __TubuleBasis_FormatStrings[formatID]; } inline const char* __TubuleBasis_FileExtensionForFormatID(int formatID) { return __TubuleBasis_FileExtensions[formatID]; } // // ---------------------------------------------------------------------- // * gcd // ---------------------------------------------------------------------- // Updated: Jeff Frey, 03.19.2001 // Purpose: Greatest common divisor of two integers. // // Last Mod: n/a int gcd( int i, int j ) { int m,n,r; (i < j) ? (m = j,n = i) : (m = i,n = j); if (n == 0) return m; while (r = m % n) { m = n; n = r; } return n; } // //// // TubuleBasis::TubuleBasis() { InitializeBasis(3,3); } // TubuleBasis::TubuleBasis( int nval, int mval ) { InitializeBasis(nval, mval); } // CrystalCell* TubuleBasis::GenerateCrystalCell() { CrystalCell* cell = NULL; double a,b,c; double lenV; int i,j,k; int iMax,jMax,iMin,jMin; TVector3D v; TVector3D center; TPoint3D p,p1; // Display lattice-type information: if (oVerbose) { int N; switch (oLattice) { case ELattice_Cubic: printf(" Producing rolled, cubic nanotube lattice.\n\n"); break; case ELattice_Planar: printf(" Producing planar nanotube lattice.\n\n"); break; default: printf(" Producing rolled, hexagonal nanotube lattice.\n\n"); break; } // Calculate the number of hexagonal sub-cells: N = 2 * (m * m + n * n + n * m) / dR; if (N > 1) printf(" Lattice consists of %d hexagonal sub-cells.\n",N); else printf(" Lattice consists of a single hexagonal sub-cell.\n"); } // Create the crystal cell: switch (oLattice) { case ELattice_Cubic: case ELattice_Hexagonal: { a = 2.0 * (r + gutter.x); b = 2.0 * (r + gutter.y); c = lenT + 2.0 * gutter.z; if (oLattice == ELattice_Hexagonal) cell = new CrystalCell(a,b,c,90.0,90.0,120.0); else cell = new CrystalCell(a,b,c,90.0,90.0,90.0); center = cell->GetRealBasisVector1(); v = cell->GetRealBasisVector2(); Vector3D_Scalar(¢er,0.5,¢er); Vector3D_ScaledSum(¢er,0.5,&v,¢er); break; } case ELattice_Planar: { a = lenCh + 2.0 * gutter.x; b = lenCh + 2.0 * gutter.y; c = lenT + 2.0 * gutter.z; cell = new CrystalCell(a,b,c,90.0,90.0,90.0); break; } } // Begin generating coordinates: iMin = (nprime < 0)?(nprime):(0); iMin = (iMin < n)?(iMin):(n); iMax = ((n + nprime) > n)?(n + nprime):(n); iMax = (iMax > nprime)?(iMax):(nprime); jMin = (-mprime < 0)?(-mprime):(0); jMin = (jMin < m)?(jMin):(m); jMax = ((m - mprime) > m)?(m - mprime):(m); jMax = (jMax > -mprime)?(jMax):(-mprime); for ( i = iMin ; i <= iMax ; i++ ) { for ( j = jMin ; j <= jMax ; j++) { // And finally, we loop over the two atoms in the // hexagonal graphite basis, giving us // i(a1) + j(a2) and i(a1) + j(a2) + for ( k = 0 ; k < 2 ; k++ ) { // Construct i(a1) + j(a2): v.x = (double)i * a1.x + (double)j * a2.x; v.y = (double)i * a1.y + (double)j * a2.y; v.z = 0.0; // Second time through we add a C-C bond displacement: if (k == 1) v.x += bondLen * bondLenScale; Vector3D_Rezero(&v,FLT_EPSILON); lenV = Vector3D_Magnitude(&v); // Check v; if it's a zero vector that's really easy; otherwise // we need to project onto Ch and T to get fractional coordinates // along those axes. p.y = 0.5; if (lenV < FLT_EPSILON) { p.x = p.z = 0.0; } else { p.x = Vector3D_Dot(&v,&Ch_R); // / (lenCh * lenCh); p.z = Vector3D_Dot(&v,&T_R); // / (lenT * lenT); if (fabs(p.x) < FLT_EPSILON) p.x = 0.0; if (fabs(p.z) < FLT_EPSILON) p.z = 0.0; } // If point "p" is within [0,1) in x and z, we have a point: if ((p.x < 1.0) && (p.x >= 0.0) && (p.z < 1.0) && (p.z >= 0.0)) { // Check if we're too close to 1.0: if ((1.0 - p.x > FLT_EPSILON) && (1.0 - p.z > FLT_EPSILON)) { // Recalculate in terms of Ch and Tprime: p.x = Vector3D_Dot(&v,&Ch) / (lenCh * lenCh); p.z = Vector3D_Dot(&v,&Tprime) / (h * h); // This is the rolled- vs. flat-specific stuff: if ((oLattice == ELattice_Cubic) || (oLattice == ELattice_Hexagonal)) { // theta = 2(pi) times displacement along chiral vector: double theta = k2Pi * p.x; // Redefine the point as a polar coordinate in xy-plane: p.x = r * cos(theta) + center.x; p.y = r * sin(theta) + center.y; p.z *= h; cell->DidAddAtomAtCartesianPoint(element[k],p); } else { p.x = (p.x * lenCh + gutter.x) / a; p.z = (p.z * h + gutter.z) / c; cell->DidAddAtomAtFractionalPoint(element[k],p); } } } } } } if (oVerbose) { if (cell) printf(" Cell generation complete. %d basis points defined.\n",cell->GetBasisCount()); else printf(" Cell generation failed!\n"); } return cell; } // void TubuleBasis::WriteInputFile( ostream& os ) { CrystalCell* theCell = GenerateCrystalCell(); if (theCell) { WriteInputFile(os,theCell); delete theCell; } } // void TubuleBasis::WriteInputFile( ostream& os, CrystalCell* theCell ) { ANSRDB* periodicTable = ANSRDB::DefaultANSRDB(); if (theCell) { ios_base::fmtflags savedFlags = os.flags(); os.setf(ios::fixed); switch (oFormat) { case EFormat_GaussianPBC: { TVector3D bv; os << "# PBEPBE/6-31g" << endl << endl; os << "(" << n << ',' << m << ") Nanotube" << endl; os << "TubeGen 3.3, J T Frey, University of Delaware" << endl << endl; os << " 0 1" << endl; theCell->Propogate(1,1,1,os,kCrystalCellPropogateStandard); // For Gaussian 03 we have periodic boundary conditions; we'll just write out our // cell vectors at the end of all the atom positions: bv = theCell->GetRealBasisVector1(); os.setf(ios::left); os << " " << setw(3) << "TV" << " "; os.unsetf(ios::left); os << setprecision(6) << setw(12) << bv.x << ' '; os << setprecision(6) << setw(12) << bv.y << ' '; os << setprecision(6) << setw(12) << bv.z << endl; bv = theCell->GetRealBasisVector2(); os.setf(ios::left); os << " " << setw(3) << "TV" << " "; os.unsetf(ios::left); os << setprecision(6) << setw(12) << bv.x << ' '; os << setprecision(6) << setw(12) << bv.y << ' '; os << setprecision(6) << setw(12) << bv.z << endl; bv = theCell->GetRealBasisVector3(); os.setf(ios::left); os << " " << setw(3) << "TV" << " "; os.unsetf(ios::left); os << setprecision(6) << setw(12) << bv.x << ' '; os << setprecision(6) << setw(12) << bv.y << ' '; os << setprecision(6) << setw(12) << bv.z << endl; os << endl; break; } case EFormat_CIF: { os << "data_nanotube" << endl << endl; os << "_audit_creation_method '"; os << '(' << n << ',' << m << ") Nanotube -- TubeGen 3.3, J T Frey, University of Delaware'" << endl << endl; os << "_cell_length_a " << setprecision(4) << setw(10) << theCell->GetDimensionA() << endl; os << "_cell_length_b " << setprecision(4) << setw(10) << theCell->GetDimensionB() << endl; os << "_cell_length_c " << setprecision(4) << setw(10) << theCell->GetDimensionC() << endl; os << "_cell_angle_alpha " << setprecision(2) << setw(8) << 90. << endl; os << "_cell_angle_beta " << setprecision(2) << setw(8) << 90. << endl; switch (oLattice) { case ELattice_Hexagonal: os << "_cell_angle_gamma " << setprecision(2) << setw(8) << 120. << endl << endl; break; case ELattice_Planar: case ELattice_Cubic: os << "_cell_angle_gamma " << setprecision(2) << setw(8) << 90. << endl << endl; break; } os << "_symmetry_space_group_name_H-M 'P 1'" << endl; os << "_symmetry_Int_Tables_number 1" << endl << endl; os << "loop_" << endl; os << "_atom_site_label" << endl; os << "_atom_site_fract_x" << endl; os << "_atom_site_fract_y" << endl; os << "_atom_site_fract_z" << endl; for ( unsigned i = 0 ; i < theCell->GetBasisCount() ; i++ ) { TAtomicCoordinate coord = theCell->GetAtomicCoordinate(i); TElementSymbol sym = periodicTable->LookupSymbolForNumber(coord.atomicNumber); if (sym != kANSRInvalidSymbol) os << setw(6) << left << (char*)&sym << right; else os << setw(6) << left << coord.atomicNumber << right; os << setprecision(4) << setw(10) << coord.atomPosition.x; os << setprecision(4) << setw(10) << coord.atomPosition.y; os << setprecision(4) << setw(10) << coord.atomPosition.z << endl; } os << endl << endl; break; } case EFormat_WIEN: { os << '(' << n << ',' << m << ") Nanotube -- TubeGen 3.3, J T Frey, University of Delaware" << endl; switch (oLattice) { case ELattice_Hexagonal: { os << "H LATTICE,NONEQUIV. ATOMS: 1" << endl; os << "MODE OF CALC=RELA" << endl; os << setprecision(6) << setw(10) << theCell->GetDimensionA() / ANGSTROM_PER_BOHR; os << setprecision(6) << setw(10) << theCell->GetDimensionB() / ANGSTROM_PER_BOHR; os << setprecision(6) << setw(10) << theCell->GetDimensionC() / ANGSTROM_PER_BOHR; os << setprecision(6) << setw(10) << 90.0; os << setprecision(6) << setw(10) << 90.0; os << setprecision(6) << setw(10) << 120.0 << endl; break; } case ELattice_Planar: case ELattice_Cubic: { os << "P LATTICE,NONEQUIV. ATOMS: 1" << endl; os << "MODE OF CALC=RELA" << endl; os << setprecision(6) << setw(10) << theCell->GetDimensionA() / ANGSTROM_PER_BOHR; os << setprecision(6) << setw(10) << theCell->GetDimensionB() / ANGSTROM_PER_BOHR; os << setprecision(6) << setw(10) << theCell->GetDimensionC() / ANGSTROM_PER_BOHR; os << setprecision(6) << setw(10) << 90.0; os << setprecision(6) << setw(10) << 90.0; os << setprecision(6) << setw(10) << 90.0 << endl; break; } } for ( unsigned i = 0 ; i < theCell->GetBasisCount() ; i++ ) { TPoint3D pt = theCell->GetCoordinate(i); if (i == 0) os << "ATOM= "; else os << " "; os << "-1: X="; os << setprecision(8) << setw(10) << pt.x; os << " Y=" << setprecision(8) << setw(10) << pt.y; os << " Z=" << setprecision(8) << setw(10) << pt.z << endl; if (i == 0) { os.setf(ios::left); os << " MULT=" << setw(4) << theCell->GetBasisCount() << " ISPLIT= 8" << endl; os.setf(ios::right); } } os << "C NPT= 781 R0=0.00010000 RMT= 1.3000 Z: 6.0" << endl; os << " 1.0000000 0.0000000 0.0000000" << endl; os << " 0.0000000 1.0000000 0.0000000" << endl; os << " 0.0000000 0.0000000 1.0000000" << endl; os << " 0 SYMMETRY OPERATIONS:" << endl; break; } case EFormat_Gaussian: { os << "# PBEPBE/6-31g" << endl << endl; os << "(" << n << ',' << m << ") Nanotube"; if ((replicate[0] > 1) || (replicate[1] > 1) || (replicate[2] > 1)) os << " (" << replicate[0] << ',' << replicate[1] << ',' << replicate[2] << ") replication"; os << endl << "TubeGen 3.3, J T Frey, University of Delaware" << endl << endl; os << " 0 1" << endl; theCell->Propogate(replicate[0],replicate[1],replicate[2],os,kCrystalCellPropogateCentered); os << endl; break; } case EFormat_XYZ: { os << theCell->GetBasisCount() * replicate[0] * replicate[1] * replicate[2] << endl; os << "(" << n << ',' << m << ") Nanotube"; if ((replicate[0] > 1) || (replicate[1] > 1) || (replicate[2] > 1)) os << " (" << replicate[0] << ',' << replicate[1] << ',' << replicate[2] << ") replication"; os << " -- TubeGen 3.3, J T Frey, University of Delaware" << endl; theCell->Propogate(replicate[0],replicate[1],replicate[2],os,kCrystalCellPropogateCentered); os << endl; break; } case EFormat_PDB: case EFormat_PDBPBC: { // Starting in version 3.2 I have a routine to propogate the system // to an array; this allows me to find connectivity for PDBs and also // makes the "propogate to temp file then reread to reformat" scheme // unnecessary (thank god!!) TAtomicCoordinate* positions = NULL; unsigned posCount = 0; bool state; // Get the propogated cell: if (oFormat == EFormat_PDB) state = theCell->Propogate(replicate[0],replicate[1],replicate[2],&positions,&posCount,kCrystalCellPropogateCentered); else state = theCell->Propogate(1,1,1,&positions,&posCount,kCrystalCellPropogateCentered); if (state) { // We'll use an array of variable-size bit vectors: BitmapRef *connectivity = (BitmapRef*)alloca(posCount * sizeof(BitmapRef)); if ( ! connectivity ) { fprintf(stderr, "ERROR: unable to allocate connectivity array\n"); exit(1); } // Zero-out the connectivity array: memset(connectivity,0,sizeof(BitmapRef) * posCount); // Write the header: os << "HEADER PROTEIN" << endl; os << "TITLE (" << n << ',' << m << ") Nanotube"; if ((replicate[0] > 1) || (replicate[1] > 1) || (replicate[2] > 1)) os << " (" << replicate[0] << ',' << replicate[1] << ',' << replicate[2] << ") replication"; os << endl << "AUTHOR TubeGen 3.3, J T Frey, University of Delaware" << endl; os << "EXPDTA THEORETICAL MODEL" << endl; // Write-out the crystal cell when necessary: if (oFormat == EFormat_PDBPBC) { os << "CRYST1"; os << setprecision(3) << setw(9) << theCell->GetDimensionA(); os << setprecision(3) << setw(9) << theCell->GetDimensionB(); os << setprecision(3) << setw(9) << theCell->GetDimensionC(); switch (oLattice) { case ELattice_Hexagonal: os << setprecision(2) << setw(7) << 90.0; os << setprecision(2) << setw(7) << 90.0; os << setprecision(2) << setw(7) << 120.0; break; case ELattice_Planar: case ELattice_Cubic: os << setprecision(2) << setw(7) << 90.0; os << setprecision(2) << setw(7) << 90.0; os << setprecision(2) << setw(7) << 90.0; break; } os << " P 1 1" << endl; TVector3D recipVec = theCell->GetReciprocalBasisVector1(); os << "SCALE1 " << setprecision(6) << setw(10) << recipVec.x; os << setprecision(6) << setw(10) << recipVec.y; os << setprecision(6) << setw(10) << recipVec.z; os << " " << setprecision(5) << setw(10) << 0.0 << endl; recipVec = theCell->GetReciprocalBasisVector2(); os << "SCALE2 " << setprecision(6) << setw(10) << recipVec.x; os << setprecision(6) << setw(10) << recipVec.y; os << setprecision(6) << setw(10) << recipVec.z; os << " " << setprecision(5) << setw(10) << 0.0 << endl; recipVec = theCell->GetReciprocalBasisVector3(); os << "SCALE3 " << setprecision(6) << setw(10) << recipVec.x; os << setprecision(6) << setw(10) << recipVec.y; os << setprecision(6) << setw(10) << recipVec.z; os << " " << setprecision(5) << setw(10) << 0.0 << endl; } // Now we just need to keep doing the records in PDB format. As // we go we figure out the connectivity, too: TAtomicCoordinate* p1 = positions; unsigned count1 = 0; while (count1 < posCount) { unsigned count2 = count1 + 1; TAtomicCoordinate* p2 = positions + count2; TElementSymbol symbol = periodicTable->LookupSymbolForNumber(p1->atomicNumber); // Write the ATOM record to the stream first of all: os << setw(6) << "ATOM "; os << setw(5) << (count1 + 1); if (symbol == kANSRInvalidSymbol) os << setw(3) << p1->atomicNumber << " UNK 1 "; else os << setw(3) << (char*)&symbol << " UNK 1 "; os << setw(8) << setprecision(3) << p1->atomPosition.x; os << setw(8) << setprecision(3) << p1->atomPosition.y; os << setw(8) << setprecision(3) << p1->atomPosition.z; os << " 1.00 0.00" << endl; // Now let's play some more connectivity games: if (count1 < posCount - 1) { BitmapRef aBitmap = connectivity[count1]; while (count2 < posCount) { // How far is positions[count2] from positions[count1]? // If we're no more than 19% larger than the official bond length: if (Point3D_Distance(&p1->atomPosition,&p2->atomPosition) <= 1.1 * bondLen) { // Do we need to create a bitmap? if (!aBitmap) { if (!(aBitmap = BitmapCreateWithCapacity(posCount))) break; } BitmapFlipBit(aBitmap,count2); // *sigh* PDB seems to like to have redundant connectivity // data, so let's do the other, as well: BitmapRef otherBitmap = connectivity[count2]; if (!otherBitmap) { if (!(otherBitmap = BitmapCreateWithCapacity(posCount))) break; connectivity[count2] = otherBitmap; } BitmapFlipBit(otherBitmap,count1); } count2++; p2++; } connectivity[count1] = aBitmap; } count1++; p1++; } // Now examine the connectivity data: unsigned conectCount = 0; count1 = 0; while (count1 < posCount) { BitmapRef theConnections = connectivity[count1]; //printf(":: "); //BitmapSummarizeToStream(stdout,theConnections); //printf("\n"); if (theConnections) { unsigned count2 = BitmapGetNextBitWithValue(theConnections,0,1); if (count2 != ((unsigned)-1)) { unsigned bitCount = 0; while (count2 < posCount) { if (BitmapGetBit(theConnections,count2++)) { if ((bitCount % 4) == 0) { if (bitCount) os << endl; conectCount++; os << "CONECT" << setw(5) << count1 + 1 << setw(5) << count2; } else os << setw(5) << count2; bitCount++; } } os << endl; } BitmapDestroy(theConnections); } count1++; } // Bookkeeping stuff: os << "MASTER 0 0 0 0 0 0 0"; if (oFormat == EFormat_PDB) os << " 0"; else os << " 3"; os << setw(5) << posCount; os << " 0"; os << setw(5) << conectCount; os << " 0" << endl; os << "END " << endl; } break; } case EFormat_BGF: { // MSI BIOGRAF format: TAtomicCoordinate* positions = NULL; unsigned posCount = 0; // Get the propogated cell: if (theCell->Propogate(replicate[0],replicate[1],replicate[2],&positions,&posCount,kCrystalCellPropogateCentered)) { // We'll use an array of variable-size bit vectors: BitmapRef *connectivity = (BitmapRef*)alloca(posCount * sizeof(BitmapRef)); if ( ! connectivity ) { fprintf(stderr, "ERROR: unable to allocate connectivity array\n"); exit(1); } // Zero-out the connectivity array: memset(connectivity,0,sizeof(BitmapRef) * posCount); // Write the header: os << "BIOGRF" << setw(5) << 300 << endl; os << "DESCRP Nanotube" << endl; os << "REMARK (" << n << ',' << m << ") Nanotube -- TubeGen 3.3, J T Frey, University of Delaware" << endl; os << "FORMAT ATOM (a6,1x,i5,1x,a5,1x,a3,1x,a1,1x,a5,3f10.5,1x,a5,i3,i2,1x,f8.5)" << endl; // Now we just need to keep doing the records in PDB format. As // we go we figure out the connectivity, too: TAtomicCoordinate* p1 = positions; unsigned count1 = 0; while (count1 < posCount) { unsigned count2 = count1 + 1; TAtomicCoordinate* p2 = positions + count2; TElementSymbol symbol = periodicTable->LookupSymbolForNumber(p1->atomicNumber); // Write the ATOM record to the stream first of all: os << "ATOM "; os << setw(5) << (count1 + 1) << ' '; if (symbol == kANSRInvalidSymbol) os << setw(5) << left << p1->atomicNumber << right << " RES A 444"; else os << setw(5) << left << (char*)&symbol << right << " RES A 444"; os << setw(10) << setprecision(5) << p1->atomPosition.x; os << setw(10) << setprecision(5) << p1->atomPosition.y; os << setw(10) << setprecision(5) << p1->atomPosition.z; os << " CA 1 0 0.00000" << endl; // Now let's play some more connectivity games: if (count1 < posCount - 1) { BitmapRef aBitmap = connectivity[count1]; while (count2 < posCount) { // How far is positions[count2] from positions[count1]? // If we're no more than 19% larger than the official bond length: if (Point3D_Distance(&p1->atomPosition,&p2->atomPosition) <= 1.1 * bondLen) { // Do we need to create a bitmap? if (!aBitmap) { if (!(aBitmap = BitmapCreateWithCapacity(posCount))) break; } BitmapFlipBit(aBitmap,count2); // *sigh* PDB seems to like to have redundant connectivity // data, so let's do the other, as well: BitmapRef otherBitmap = connectivity[count2]; if (!otherBitmap) { if (!(otherBitmap = BitmapCreateWithCapacity(posCount))) break; connectivity[count2] = otherBitmap; } BitmapFlipBit(otherBitmap,count1); } count2++; p2++; } connectivity[count1] = aBitmap; } count1++; p1++; } // Now examine the connectivity data: unsigned conectCount = 0; os << "FORMAT CONECT (a6,12i6)" << endl; count1 = 0; while (count1 < posCount) { BitmapRef theConnections = connectivity[count1]; if (theConnections) { unsigned count2 = BitmapGetNextBitWithValue(theConnections,0,1); if (count2 != ((unsigned)-1)) { unsigned bitCount = 0,altBitCount = 0; while (count2 < posCount) { if (BitmapGetBit(theConnections,count2++)) { if ((bitCount % 12) == 0) { if (bitCount) os << endl; conectCount++; os << "CONECT" << setw(6) << count1 + 1 << setw(6) << count2; } else os << setw(6) << count2; bitCount++; } } os << endl; while (altBitCount < bitCount) { if ((altBitCount % 12) == 0) { if (altBitCount) os << endl; os << "ORDER " << setw(6) << count1 + 1 << setw(6) << 1; } else os << setw(6) << 1; altBitCount++; } os << endl; } BitmapDestroy(theConnections); } count1++; } // Done: os << "END" << endl; } break; } case EFormat_POV: { // Starting in version 3.2 we'll output POV objects! TAtomicCoordinate* positions = NULL; unsigned posCount = 0; // Get the propogated cell: if (theCell->Propogate(replicate[0],replicate[1],replicate[2],&positions,&posCount,kCrystalCellPropogateCentered)) { // Now we just need to keep doing the records in PDB format. As // we go we figure out the connectivity, too: TAtomicCoordinate* p1 = positions; unsigned count1 = 0; os << "// (" << n << ',' << m << ") Nanotube"; if ((replicate[0] > 1) || (replicate[1] > 1) || (replicate[2] > 1)) os << " (" << replicate[0] << ',' << replicate[1] << ',' << replicate[2] << ") replication"; os << endl << "// TubeGen 3.3, J T Frey, University of Delaware" << endl << endl; os << "#declare Nanotube = union {" << endl; while (count1 < posCount) { unsigned count2 = count1 + 1; TAtomicCoordinate* p2 = positions + count2; TElementSymbol symbol = periodicTable->LookupSymbolForNumber(p1->atomicNumber); // Write the sphere object to the stream first of all: os << " sphere { // C_" << count1 + 1 << endl; os << " <"; os << setw(8) << setprecision(3) << p1->atomPosition.x << " , "; os << setw(8) << setprecision(3) << p1->atomPosition.y << " , "; os << setw(8) << setprecision(3) << p1->atomPosition.z << " > , C_Radius" << endl; os << " texture { finish { DefaultFinish } pigment { C_Color } }" << endl; os << " }" << endl; // Now let's play the connectivity game: if (count1 + 1 < posCount) { while (count2 < posCount) { // How far is positions[count2] from positions[count1]? if (Point3D_Distance(&p1->atomPosition,&p2->atomPosition) <= 1.2 * bondLen) { os << " cylinder { // C_" << count1 + 1 << ":C_" << count2 + 1 << endl; os << " <"; os << setw(8) << setprecision(3) << p1->atomPosition.x << " , "; os << setw(8) << setprecision(3) << p1->atomPosition.y << " , "; os << setw(8) << setprecision(3) << p1->atomPosition.z << " >," << endl; os << " <"; os << setw(8) << setprecision(3) << p2->atomPosition.x << " , "; os << setw(8) << setprecision(3) << p2->atomPosition.y << " , "; os << setw(8) << setprecision(3) << p2->atomPosition.z << " >," << endl; os << " BondRadius" << endl << " open" << endl; os << " texture { finish { DefaultFinish } pigment { C_Color }}" << endl; os << " }" << endl; } count2++; p2++; } } count1++; p1++; } os << "} // Nanotube" << endl; } break; } } os.setf(savedFlags); } } // int TubuleBasis::Get_n() { return n; } void TubuleBasis::Set_n(int newn) { if ((newn != n) && (newn >= 0)) { n = newn; CalculateGraphiticBasisVectors(); CalculateTranslationalIndices(); OptimizeGammas(); } } // int TubuleBasis::Get_m() { return m; } void TubuleBasis::Set_m(int newm) { if ((newm != m) && (newm >= 0)) { m = newm; CalculateGraphiticBasisVectors(); CalculateTranslationalIndices(); OptimizeGammas(); } } // void TubuleBasis::Set_nandm(int newn,int newm) { if ((newn == n) && (newm == m)) return; if ((newn >= 0) && (newm >= 0)) { n = newn; m = newm; CalculateGraphiticBasisVectors(); CalculateTranslationalIndices(); OptimizeGammas(); } } // unsigned TubuleBasis::Get_element( unsigned which ) { if (which < 2) return element[which]; return 0; } // void TubuleBasis::Set_element( unsigned which, unsigned atomicNumber ) { if (which < 2) element[which] = atomicNumber; } // int TubuleBasis::Get_nprime() { return nprime; } // int TubuleBasis::Get_mprime() { return mprime; } // double TubuleBasis::Get_bond() { return bondLen; } void TubuleBasis::Set_bond(double bondLength) { if (bondLength > 1.0) { bondLen = bondLength; CalculateGraphiticBasisVectors(); CalculateTubuleCellVectors(); OptimizeGammas(); } } // void TubuleBasis::Get_a1(TVector3D* v) { if (v) *v = a1; } // void TubuleBasis::Get_a2(TVector3D* v) { if (v) *v = a2; } // void TubuleBasis::Get_Ch(TVector3D* v) { if (v) *v = Ch; } // void TubuleBasis::Get_T(TVector3D* v) { if (v) *v = T; } // double TubuleBasis::Get_gutter(int which) { switch (which) { case EDirection_X: return gutter.x; case EDirection_Y: return gutter.y; case EDirection_Z: return gutter.z; } return HUGE_VAL; } void TubuleBasis::Set_gutter(int which,double val) { if (val >= 0.0) { switch (which) { case EDirection_X: gutter.x = val; break; case EDirection_Y: gutter.y = val; break; case EDirection_Z: gutter.z = val; break; } } } // int TubuleBasis::Get_replication(int which) { switch (which) { case EDirection_X: return replicate[0]; case EDirection_Y: return replicate[1]; case EDirection_Z: return replicate[2]; } return 0; } void TubuleBasis::Set_replication(int which,int val) { if (val > 0) { switch (which) { case EDirection_X: replicate[0] = val; break; case EDirection_Y: replicate[1] = val; break; case EDirection_Z: replicate[2] = val; break; } } } // int TubuleBasis::GetOption_Units() { return oUnits; } void TubuleBasis::SetOption_Units(int val) { switch (val) { case EUnits_Angstrom: oUnits = val; cUnitConversion = 1.0; break; case EUnits_Bohr: oUnits = val; cUnitConversion = 1.0 / ANGSTROM_PER_BOHR; break; } } double TubuleBasis::GetUnitConversionFactor() { return cUnitConversion; } // int TubuleBasis::GetOption_Format() { return oFormat; } void TubuleBasis::SetOption_Format(int val) { if ((val >= EFormat_Gaussian) && (val < EFormat_Max)) oFormat = val; } // bool TubuleBasis::SetOption_Format( const char* formatString ) { int formatID = __TubuleBasis_FormatIDForString(formatString); if (formatID != EFormat_Undefined) { oFormat = formatID; return true; } return false; } // const char* TubuleBasis::StringForFormat() { return __TubuleBasis_StringForFormatID(oFormat); } // const char* TubuleBasis::FileExtensionsForFormat() { return __TubuleBasis_FileExtensionForFormatID(oFormat); } // int TubuleBasis::GetOption_Lattice() { return oLattice; } void TubuleBasis::SetOption_Lattice(int val) { if (val == oLattice) return; switch (val) { case ELattice_Hexagonal: case ELattice_Cubic: if (oLattice == ELattice_Planar) OptimizeGammas(); oLattice = val; break; case ELattice_Planar: CalculateGraphiticBasisVectors(); CalculateTubuleCellVectors(); oLattice = val; break; } } // bool TubuleBasis::GetOption_Verbose() { return oVerbose; } void TubuleBasis::SetOption_Verbose(bool val) { oVerbose = val; } // bool TubuleBasis::GetOption_RelaxTubule() { return oRelaxTubule; } void TubuleBasis::SetOption_RelaxTubule(bool val) { if (val != oRelaxTubule) { oRelaxTubule = val; CalculateGraphiticBasisVectors(); CalculateTubuleCellVectors(); OptimizeGammas(); } } // double TubuleBasis::GetOption_RadiusConv() { return oRadiusConv; } void TubuleBasis::SetOption_RadiusConv(double val) { oRadiusConv = fabs(val); } // double TubuleBasis::GetOption_ErrorConv() { return oErrorConv; } void TubuleBasis::SetOption_ErrorConv(double val) { oErrorConv = fabs(val); } // double TubuleBasis::GetOption_GammaConv() { return oGammaConv; } void TubuleBasis::SetOption_GammaConv(double val) { oGammaConv = fabs(val); } // //// // void TubuleBasis::InitializeBasis( int nval, int mval ) { n = nval; m = mval; bondLen = STD_BOND; bondLenScale = 1.0; // Start out with carbon for both: element[0] = element[1] = 6; // Default options: oUnits = EUnits_Angstrom; oFormat = EFormat_Gaussian; oLattice = ELattice_Hexagonal; oVerbose = false; oRelaxTubule = true; oNonOrthProj = false; oRadiusConv = STD_RADIUS_CONVERGENCE; oErrorConv = STD_ERROR_CONVERGENCE; oGammaConv = STD_GAMMA_CONVERGENCE; cUnitConversion = 1.0; // Define the graphitic basis, a1 and a2: CalculateGraphiticBasisVectors(); // Calculate nprime and mprime (which gets Ch and T in the process): CalculateTranslationalIndices(); OptimizeGammas(); // Default gutters and replication counts: Vector3D_Set(&gutter,STD_GUTTER_LENGTH,STD_GUTTER_LENGTH,0.0); replicate[0] = replicate[1] = replicate[2] = 1; } // void TubuleBasis::CalculateGraphiticBasisVectors() { double x,y; if (oVerbose) printf(" --- Construction of Graphitic Atomic-Basis Vectors ---------------------------\n"); x = 1.5 * bondLen; y = 0.5 * sqrt(3.0) * bondLen; Vector3D_Set(&a1,x,y,0.0); Vector3D_Set(&a2,x,-y,0.0); if (oVerbose) { printf(" Nearest neighbor bonding distance as: %lg\n",bondLen * cUnitConversion); printf(" a1 = < %lg , %lg >\n",a1.x * cUnitConversion,a1.y * cUnitConversion); printf(" a2 = < %lg , %lg >\n",a2.x * cUnitConversion,a2.y * cUnitConversion); printf(" ------------------------------------------------------------------------------\n\n"); } } // void TubuleBasis::CalculateTranslationalIndices() { // Calculate d and dR: d = gcd(n,m); if (((n - m) % (3 * d)) == 0) dR = 3 * d; else dR = d; // Calculate nprime and mprime: nprime = (2 * m + n) / dR; mprime = (2 * n + m) / dR; CalculateTubuleCellVectors(); } // void TubuleBasis::CalculateTubuleCellVectors() { double oneOverV; if (oVerbose) { printf(" --- Construction of Chiral/Tubule Translation Vectors ------------------------\n"); printf(" n = (%3d) and m = (%3d):\n",n,m); printf(" n'= (%3d) and m'= (%3d):\n",nprime,mprime); } // Calculate Ch: Vector3D_Scalar(&a1,(double)n,&Ch); Vector3D_ScaledSum(&Ch,(double)m,&a2,&Ch); Vector3D_Rezero(&Ch,FLT_EPSILON); // Store the length of Ch: lenCh = Vector3D_Magnitude(&Ch); if (oVerbose) { double Ch_proj_a1 = Vector3D_Dot(&a1,&Ch) / ( Vector3D_Magnitude(&a1) * lenCh ); if (Ch_proj_a1 < 0.) Ch_proj_a1 = Vector3D_Dot(&a2,&Ch) / ( Vector3D_Magnitude(&a2) * lenCh ); if (fabs(Ch_proj_a1 - 1.) < 1e-3) Ch_proj_a1 = 0; else Ch_proj_a1 = acos(Ch_proj_a1); printf(" Chiral vector Ch constructed as %d(a1) + %d(a2):\n",n,m); printf(" Ch = < %lg , %lg >, |Ch| = %lg\n",Ch.x * cUnitConversion, \ Ch.y * cUnitConversion, \ lenCh * cUnitConversion); printf(" Chiral angle is %lg degrees\n",Ch_proj_a1 * kRadiansToDegrees); } // Calculate T: Vector3D_Scalar(&a1,(double)nprime,&T); Vector3D_ScaledSum(&T,(double)(-mprime),&a2,&T); Vector3D_Rezero(&T,FLT_EPSILON); // Store the length of T: lenT = Vector3D_Magnitude(&T); if (oVerbose) { printf(" Tubule translation vector T constructed as %d(a1) - %d(a2):\n",nprime,mprime); printf(" T = < %lg , %lg >, |T| = %lg\n",T.x * cUnitConversion, \ T.y * cUnitConversion, \ lenT * cUnitConversion); } // Calculate r: r = 0.5 * M_1_PI * lenCh; if (oVerbose) printf(" Tubule radius: %g\n",r * cUnitConversion); // Calculate Tprime and h; project Ch out of T and then find length: oneOverV = Vector3D_Dot(&T,&Ch) / (lenCh * lenCh); Vector3D_ScaledSum(&T,-oneOverV,&Ch,&Tprime); Vector3D_Rezero(&Tprime,FLT_EPSILON); h = Vector3D_Magnitude(&Tprime); if (oVerbose) printf(" Tubule height: %g\n",h * cUnitConversion); // Calculate the two basis vectors for the reciprocal space of // Ch and T (used for projections). The third vector we use is // just z, since both Ch and T are in the xy-plane. // // V = Ch . (T x z) // Ch_R = (T x z) / V // T_R = (z x Ch) / V // z_R = < 0 , 0 , -1 > // oneOverV = 1.0 / ( T.y * Ch.x - T.x * Ch.y ); // 1 / V Vector3D_Set(&Ch_R,oneOverV * T.y,-oneOverV * T.x,0.0); Vector3D_Set(&T_R,-oneOverV * Ch.y,oneOverV * Ch.x,0.0); if (oVerbose) printf(" ------------------------------------------------------------------------------\n\n"); } // double TubuleBasis::CalculateError( int vec, double theta ) { double accum; double tmp1,tmp2; tmp1 = lenvec[vec]; accum = tmp1 * tmp1; // lenA[i]^2 tmp1 = r; tmp1 *= tmp1; // r^2 tmp1 *= 2.0; // 2 r^2 tmp2 = 1.0 - cos(theta); // 1 - cos(theta) accum -= tmp1 * tmp2; // lenA[i]^2 - 2 r^2 (1 - cos(theta)) tmp1 = gamma[vec]; tmp1 *= tmp1; // gamma[i]^2 tmp2 = Vector3D_Dot(&optvec[vec],&Tprime) / h; tmp2 *= tmp2; accum -= tmp1 * tmp2; // lenA[i]^2 - 2 r^2 (1 - cos(theta)) - gamma[i]^2 (/|T|)^2 return accum; } // double TubuleBasis::CalculateErrorDerivative( int vec, double theta ) { double accum; double tmp1,tmp2,tmp3; tmp1 = r; tmp1 *= tmp1; // r^2 tmp1 *= 8.0 * M_PI; // 8 pi r^2 tmp1 *= sin(theta); // 8 pi r^2 sin(theta) tmp3 = 1.0 / lenCh; tmp3 *= tmp3; // 1 / |Ch|^2 tmp2 = Vector3D_Dot(&optvec[vec],&Ch) * tmp3; accum = -tmp1 * tmp2; tmp1 = 4.0 * gamma[vec]; tmp2 = Vector3D_Dot(&optvec[vec],&Tprime) / h; tmp2 *= tmp2; accum -= tmp1 * tmp2; accum *= CalculateError(vec,theta); return accum; } // double TubuleBasis::CalculateTheta( int vec ) { double tmp1 = 2.0 * M_PI * gamma[vec]; double tmp2 = Vector3D_Dot(&optvec[vec],&Ch); double tmp3 = 1.0 / lenCh; tmp3 *= tmp3; return tmp1 * tmp2 * tmp3; } // void TubuleBasis::OptimizeGammas() { int rIters = 0; double delta_r = 0.0,oldr = r,delta_h = 0.0,oldh = h,ChDotT; bool savedVerbosity = oVerbose; if ((oRelaxTubule) && (oLattice != ELattice_Planar)) { if (oVerbose) { printf(" --- Relaxing tubule to appropriate bond lengths ------------------------------\n"); printf(" delta-radius %1.0lg\n",oRadiusConv); printf(" scaling-factors %1.0lg\n",oGammaConv); printf(" error-function %1.0lg\n",oErrorConv); printf(" ===========================================================================\n"); printf(" Iterations\n"); printf(" %-4s %-12s %-12s %-32s %3s %3s %3s\n","Iter"," delta-h"," delta-r"," Gammas"," a1"," a2"," a3"); printf(" ===========================================================================\n"); } // We don't wanna see a butt-load of printed info // each time we reset the chiral/translational vectors, // so we turn off printing after remembering its // current state: oVerbose = false; gamma[0] = gamma[1] = gamma[2] = 1.0; // Setup the vectors that we'll be optimizing: Vector3D_Set(&optvec[0],bondLen,0.0,0.0); optvec[1] = a1; Vector3D_Diff(&optvec[1],&optvec[0],&optvec[1]); optvec[2] = a2; Vector3D_Diff(&optvec[2],&optvec[0],&optvec[2]); Vector3D_Rezero(&optvec[1],FLT_EPSILON); Vector3D_Rezero(&optvec[2],FLT_EPSILON); lenvec[0] = bondLen; lenvec[1] = Vector3D_Magnitude(&optvec[1]); lenvec[2] = Vector3D_Magnitude(&optvec[2]); do { int vec; if (savedVerbosity) { if (rIters) printf(" %-4d %12.4e %12.4le %10.6f %10.6f %10.6f ",rIters,delta_h,delta_r,gamma[0],gamma[1],gamma[2]); else printf(" %-4d %10.6f %10.6f %10.6f ",rIters,gamma[0],gamma[1],gamma[2]); } rIters++; // Optimize gamma[i]: for ( vec = 0 ; vec < 3 ; vec++ ) { double theta,error,dgamma = 1.0; int gIters = 0; theta = CalculateTheta(vec); error = CalculateError(vec,theta); error *= error; while ((error > oErrorConv) && (fabs(dgamma) > oGammaConv)) { dgamma = error / CalculateErrorDerivative(vec,theta); gamma[vec] -= 0.5 * dgamma; theta = CalculateTheta(vec); error = CalculateError(vec,theta); error *= error; gIters++; } if (savedVerbosity) printf("%3d ",gIters); } if (savedVerbosity) printf("\n"); // Calculate new a1 and a2 and bondLenScale: bondLenScale = gamma[0]; Vector3D_Set(&a1,bondLen * bondLenScale,0.0,0.0); Vector3D_ScaledSum(&a1,gamma[1],&optvec[1],&a1); Vector3D_Rezero(&a1,FLT_EPSILON); Vector3D_Set(&a2,bondLen * bondLenScale,0.0,0.0); Vector3D_ScaledSum(&a2,gamma[2],&optvec[2],&a2); Vector3D_Rezero(&a2,FLT_EPSILON); // Calculate new Ch, T, h, and r: delta_r = r; delta_h = h; CalculateTubuleCellVectors(); delta_r = r - delta_r; delta_h = h - delta_h; } while ((fabs(delta_r) > oRadiusConv) || ((fabs(delta_h) > oRadiusConv))); // Check for orthogonality: ChDotT = Vector3D_Dot(&T,&Ch); if (fabs(ChDotT) > FLT_EPSILON) oNonOrthProj = true; else oNonOrthProj = false; // Restore verbosity: oVerbose = savedVerbosity; // Print information if necessary: if (oVerbose) { if (rIters) printf(" %-4d %12.4e %12.4e %10.6f %10.6f %10.6f\n",rIters,delta_h,delta_r,gamma[0],gamma[1],gamma[2]); printf(" ===========================================================================\n"); printf(" Convergence reached"); if (rIters > 0) { printf(" in %d cycle",rIters); if (rIters > 1) printf("s"); } else { printf(" immediately."); } printf("\n New graphitic basis:\n"); printf(" a1 = < %lg , %lg >\n",a1.x * cUnitConversion,a1.y * cUnitConversion); printf(" a2 = < %lg , %lg >\n",a2.x * cUnitConversion,a2.y * cUnitConversion); printf(" cc-bond = %lg\n",bondLen * bondLenScale * cUnitConversion); printf(" New chiral/tubule translation vectors:\n"); printf(" Ch = < %lg , %lg >, |Ch| = %lg\n",Ch.x * cUnitConversion, \ Ch.y * cUnitConversion, \ lenCh * cUnitConversion); printf(" T = < %lg , %lg >, |T| = %lg\n",T.x * cUnitConversion, \ T.y * cUnitConversion, \ lenT * cUnitConversion); printf(" Tubule radius: %lg [total delta-r of %lg]\n",r * cUnitConversion,(r - oldr) * cUnitConversion); printf(" Tubule height: %lg [total delta-h of %lg]\n",h * cUnitConversion,(h - oldh) * cUnitConversion); printf(" Angle between Ch and T: %lg degrees\n",kRadiansToDegrees * acos( ChDotT ) ); printf(" ------------------------------------------------------------------------------\n\n"); } } } // avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/Bitmap.c0000644000175000001440000001060612250371054025524 0ustar marcususers// // TubeGen - Single-Wall Carbon Nanotube Generator // // Bitmap // Pseudo-class which maintains what is effectively a minimal-storage // array of boolean values. Written because the native C++ "bitset" // class stinks. // // Created by Jeffrey Frey on Thu Jan 13 2005. // Doren Research Group // University of Delaware // Copyright (c) 2003-2005 // #include "Bitmap.h" typedef unsigned _BitmapElement; static size_t _BitmapBitsPerElement = 8 * sizeof(_BitmapElement); static _BitmapElement _BitmapElementAll = (_BitmapElement)(0xFFFFFFFFUL); static _BitmapElement _BitmapElementNone = (_BitmapElement)(0x00000000UL); typedef struct _Bitmap { unsigned flags; unsigned capacity; unsigned elements; _BitmapElement store[1]; } Bitmap; // BitmapRef BitmapCreateWithCapacity( unsigned capacity ) { Bitmap* newBitmap = NULL; size_t bytes = sizeof(Bitmap); unsigned storeSize = (capacity + _BitmapBitsPerElement - 1) / _BitmapBitsPerElement; if (storeSize) { bytes += (storeSize - 1) * sizeof(_BitmapElement); if (newBitmap = (Bitmap*)calloc(1,bytes)) { newBitmap->capacity = storeSize * _BitmapBitsPerElement; newBitmap->elements = storeSize; } } return (BitmapRef)newBitmap; } // void BitmapDestroy( BitmapRef aBitmap ) { free(aBitmap); } // unsigned BitmapGetCapacity( BitmapRef aBitmap ) { return aBitmap->capacity; } // void BitmapSummarizeToStream( FILE* stream, BitmapRef aBitmap ) { unsigned eIdx = 0; while (eIdx < aBitmap->elements) { unsigned bIdx = _BitmapBitsPerElement; _BitmapElement element = aBitmap->store[eIdx++]; _BitmapElement mask = 1; while (bIdx--) { if (element & mask) fputc('1',stream); else fputc('0',stream); mask <<= 1; } } } // Bit BitmapGetBit( BitmapRef aBitmap, unsigned aBit ) { if (aBit < aBitmap->capacity) { unsigned eIdx = aBit / _BitmapBitsPerElement; unsigned bIdx = aBit % _BitmapBitsPerElement; if ((aBitmap->store[eIdx]) & (1 << bIdx)) return 1; } return 0; } // void BitmapSetBit( BitmapRef aBitmap, unsigned aBit, Bit value ) { if (aBit < aBitmap->capacity) { unsigned eIdx = aBit / _BitmapBitsPerElement; unsigned bIdx = aBit % _BitmapBitsPerElement; if (value) aBitmap->store[eIdx] |= (1 << bIdx); else aBitmap->store[eIdx] &= ~(1 << bIdx); } } // void BitmapFlipBit( BitmapRef aBitmap, unsigned aBit ) { if (aBit < aBitmap->capacity) { unsigned eIdx = aBit / _BitmapBitsPerElement; unsigned bIdx = aBit % _BitmapBitsPerElement; aBitmap->store[eIdx] ^= (1 << bIdx); } } // unsigned BitmapGetNextBitWithValue( BitmapRef aBitmap, unsigned startAtBit, Bit value ) { unsigned eIdx = startAtBit / _BitmapBitsPerElement; unsigned bIdx = startAtBit % _BitmapBitsPerElement; if (eIdx < aBitmap->elements) { if (value) { // Eliminate all that are completely zero: while (eIdx < aBitmap->elements && aBitmap->store[eIdx] == _BitmapElementNone) { eIdx++; bIdx = 0; } // Search through whatever remains: while (eIdx < aBitmap->elements) { _BitmapElement mask = 1 << bIdx; _BitmapElement element = aBitmap->store[eIdx]; while (mask) { if (element & mask) return ((eIdx * _BitmapBitsPerElement) + bIdx); mask <<= 1; } bIdx = 0; eIdx++; } } else { // Eliminate all that are completely set: while (eIdx < aBitmap->elements && aBitmap->store[eIdx] == _BitmapElementAll) { eIdx++; bIdx = 0; } // Search through whatever remains: while (eIdx < aBitmap->elements) { _BitmapElement mask = 1 << bIdx; _BitmapElement element = aBitmap->store[eIdx]; while (mask) { if (!(element & mask)) return ((eIdx * _BitmapBitsPerElement) + bIdx); mask <<= 1; } bIdx = 0; eIdx++; } } } return (unsigned)-1; } avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/fcc.cpp0000755000175000001440000000435212250371054025407 0ustar marcususers//========================================================== // // fcc.cpp // // FCC lattice propogator // // Uses the CrystalCell class to generate a cell for // FCC structures. The primitive cell is then // used to construct the (i,j,k) super-cell (output as // a set of Cartesian coordinated). // // Created: 17.Sep.2005 // Last Mod: n/a // #include "ANSR.h" #include "CrystalCell.h" // Silver // a = b = c = 4.0782 angstrom #define SILVER_ABC 4.0782 // Gold // a = b = c = 4.08 angstrom #define GOLD_ABC 4.0782 // Lattice info from: // http://www.webelements.com/ // // We use an ANSRDB initialized from /usr/share/periodic.table // which, if the file isn't there, will just be the default // anyway: ANSRDB gPeriodicTable("/usr/share/periodic.table"); // int main( int argc, char* argv[] ) { CrystalCell* theCell = NULL; unsigned atomicNumber = 79; if (argc > 2) { if (strcmp(argv[2],"Au") == 0) { atomicNumber = 79; theCell = new CrystalCell(GOLD_ABC,GOLD_ABC,GOLD_ABC,90.0,90.0,90.0); } else if (strcmp(argv[2],"Ag") == 0) { atomicNumber = 47; theCell = new CrystalCell(SILVER_ABC,SILVER_ABC,SILVER_ABC,90.0,90.0,90.0); } } if (!theCell) { atomicNumber = 79; theCell = new CrystalCell(GOLD_ABC,GOLD_ABC,GOLD_ABC,90.0,90.0,90.0); } // These are the fractional coordinates for an FCC // lattice: TPoint3D p1 = { 0.0 , 0.0 , 0.0 }; TPoint3D p2 = { 0.5 , 0.5 , 0.0 }; TPoint3D p3 = { 0.5 , 0.0 , 0.5 }; TPoint3D p4 = { 0.0 , 0.5 , 0.5 }; // For propogation count: unsigned i,j,k; int got; // Get command line stuff: if (argc < 2) { printf(" usage: fcc i,j,k {Au,Ag}\n"); return -1; } got = sscanf(argv[1],"%d,%d,%d",&i,&j,&k); if (got < 3) k = 1; if (got < 2) j = 1; if (got < 1) i = 1; // Add the atomic basis to the crystal cell: theCell->DidAddAtomAtFractionalPoint(atomicNumber,p1); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p2); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p3); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p4); // Generate the coordinates: theCell->Propogate(i,j,k,cout,kCrystalCellPropogateCentered); } avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/CoreConst.h0000755000175000001440000000416512250371054026222 0ustar marcususers/* =============================================================================== // CoreConst.h �1999-2001, J.T. Frey // =============================================================================== // Written: J.T. Frey, 03/11/2001 // Purpose: Numerical constants to varying precisions. // // Last Mod: n/a */ #ifndef __CORECONSTANTS__ #define __CORECONSTANTS__ // Removed for Avogadro: // #include // // Replaced with: #include #include #if defined(__cplusplus) extern "C" { #endif /* Maximum possible number representable by a float: */ #ifdef FLT_MAX #define kMaxFloat FLT_MAX #else #define kMaxFloat 3.40282347e+38F #endif /* Minimum possible number representable by a float: */ #ifdef FLT_MIN #define kMinFloat FLT_MIN #else #define kMinFloat 1.17549435e-38F #endif /* Maximum possible number representable by a double: */ #ifdef DBL_MAX #define kMaxDouble DBL_MAX #else #define kMaxDouble 1.7976931348623157e+308 #endif /* Minimum possible number representable by a double: */ #ifdef DBL_MIN #define kMinDouble DBL_MIN #else #define kMinDouble 2.2250738585072014e-308 #endif /* Smallest-representable float difference, (x1 - x2) */ #ifdef FLT_EPSILON #define kZeroFloat FLT_EPSILON #else #define kZeroFloat 1.1920929e-07F #endif /* Smallest-representable double difference, (x1 - x2) */ #ifdef DBL_EPSILON #define kZeroDouble DBL_EPSILON #else #define kZeroDouble 2.2204460492503131e-16 #endif /* Trig constants: */ // #define kPi (double)(3.14159265358979323846) // #define kPiOver2 (double)(1.57079632679489661923) // #define k3PiOver2 (kPi + kPiOver2) // #define k2Pi (kPi + kPi) #define kPi M_PI #define kPiOver2 M_PI_2 #define k3PiOver2 (M_PI + M_PI_2) #define k2Pi (M_PI + M_PI) #define kDegreesToRadians (kPi / (double)(180.)) #define kRadiansToDegrees ((double)(180.) / kPi) /* Special numerical macros: */ #define Minimum(XXX,YYY) ((XXX >= YYY) ? (YYY) : (XXX)) #define Maximum(XXX,YYY) ((XXX >= YYY) ? (XXX) : (YYY)) #if defined(__cplusplus) } #endif #endif //__CORECONSTANTS__ avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/Cell.h0000755000175000001440000000612012250371054025173 0ustar marcususers//========================================================== // // Cell.h // // A component of the TubeGen program // // Generalized lattice cell. // // Created: 26.JAN.2002 // Last Mod: 14.FEB.2002: Addition of coordinate conversions // 05.Feb.2003: Removed all ostream::form calls and moved to purely // C++ stream operators. // #ifndef __CELL__ #define __CELL__ // Removed for Avogadro: // #include // // Replaced with: #include #include "Core3DMath.h" using namespace std; // // The metric tensor will be symmetric, so we store // just half of it (6 elements at 8 bytes/element // leaves us on 32- and 64-bit boundaries, cool!): // // Element indexes: // [[ 0 1 3 ] // [ 1 2 4 ] // [ 3 4 5 ]] // typedef struct { double t[6]; } MetricTensor; // class Cell { public: int refs; // basic reference copy counting scheme double a,b,c; // basis vector lengths in Cartesian space double alpha,beta,gamma; // basis vector angles in Cartesian space TVector3D av[3]; // basis vectors in real space TVector3D bv[3]; // basis vectors in reciprocal space double volume; // Cartesian space volume of cell MetricTensor G; // Metric for our "space" public: Cell(); Cell(double in_a,double in_b,double in_c, double in_alpha,double in_beta,double in_gamma); Cell* Retain(); void Release(); // Cell dimension accessors: double GetDimensionA() { return a;}; void SetDimensionA(double dim); double GetDimensionB() { return b;}; void SetDimensionB(double dim); double GetDimensionC() { return c;}; void SetDimensionC(double dim); // Cell-edge angle accessors: double GetAngleAlpha() { return alpha;}; void SetAngleAlpha(double ang); double GetAngleBeta() { return beta;}; void SetAngleBeta(double ang); double GetAngleGamma() { return gamma;}; void SetAngleGamma(double ang); // Get the cell vectors: TVector3D GetRealBasisVector1() { return av[0]; }; TVector3D GetRealBasisVector2() { return av[1]; }; TVector3D GetRealBasisVector3() { return av[2]; }; TVector3D GetReciprocalBasisVector1() { return bv[0]; }; TVector3D GetReciprocalBasisVector2() { return bv[1]; }; TVector3D GetReciprocalBasisVector3() { return bv[2]; }; // The translational vector for the cell TVector3D GetCellTranslationVector(); // Get the metric tensor for the cell: void GetMetricTensorForCell(MetricTensor& tensor); // Cell volume: double GetRealSpaceVolume() { return volume; }; double GetReciprocalSpaceVolume() { return (1.0 / volume); }; // Point conversions: TPoint3D CartesianToFractional(TPoint3D p); TPoint3D FractionalToCartesian(TPoint3D p); // Distance conversion: double CartesianDistanceBetweenFractionalPoints(TPoint3D p1,TPoint3D p2); // Write cell information to an ostream: void print(ostream& os); private: void GenerateCellVectors(); }; #endif //__CELL__ avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/CrystalCell.cpp0000755000175000001440000003634512250371054027104 0ustar marcususers//========================================================== // // CrystalCell.cpp // // A component of the TubeGen program // // Adds atomic basis to a lattice cell. The basis is // maintained as a dynamically-resizable array of // TAtomicCoordinate structures. // // Created: 19.FEB.2002 // Last Mod: 22.DEC.2004: Modified fractional coordinate addition // for more robust/efficient transformation // into purely-fractional values. // #include "CrystalCell.h" #include "ANSR.h" #include "CoreConst.h" // Added for Avogadro #include #ifdef _MSC_VER // Inefficient for cases with complex x, but ok for uses here #define trunc(x) (((x) < 0) ? ceil(x) : floor(x)) #endif // #define DEFAULT_BASIS_SIZE 5 #define DEFAULT_BASIS_GROW 5 #define DEFAULT_SEARCH_RADIUS 1e-2 // // ======================================================= // * Default constructor CrystalCell::CrystalCell() : Cell() { basisSize = DEFAULT_BASIS_SIZE; basisCount = 0; basis = (TAtomicCoordinate*)calloc(basisSize,sizeof(TAtomicCoordinate)); } // // ======================================================= // * Alternate constructor; cell parameters only CrystalCell::CrystalCell( double in_a,double in_b,double in_c, double in_alpha,double in_beta,double in_gamma ) : Cell(in_a,in_b,in_c,in_alpha,in_beta,in_gamma) { basisSize = DEFAULT_BASIS_SIZE; basisCount = 0; basis = (TAtomicCoordinate*)calloc(basisSize,sizeof(TAtomicCoordinate)); } // // ======================================================= // * Alternate constructor; cell parameters plus basis // size hint. CrystalCell::CrystalCell( double in_a,double in_b,double in_c, double in_alpha,double in_beta,double in_gamma, unsigned basisHint ) : Cell(in_a,in_b,in_c,in_alpha,in_beta,in_gamma) { basisSize = basisHint; basisCount = 0; basis = (TAtomicCoordinate*)calloc(basisSize,sizeof(TAtomicCoordinate)); } // // ======================================================= // * Alternate constructor; cell parameters plus basis. CrystalCell::CrystalCell( double in_a,double in_b,double in_c, double in_alpha,double in_beta,double in_gamma, unsigned basisDim,TAtomicCoordinate* theBasis ) : Cell(in_a,in_b,in_c,in_alpha,in_beta,in_gamma) { basisSize = basisDim; basisCount = basisDim; basis = (TAtomicCoordinate*)calloc(basisSize,sizeof(TAtomicCoordinate)); for ( unsigned i = 0 ; i < basisDim ; i++ ) basis[i] = theBasis[i]; } // // ======================================================= // * Retrieve an atomic coordinate from the basis TAtomicCoordinate CrystalCell::GetAtomicCoordinate( unsigned index ) { if (index < basisCount) return basis[index]; } // // ======================================================= // * Retrieve a coordinate from the basis TPoint3D CrystalCell::GetCoordinate( unsigned index ) { if (index < basisCount) return basis[index].atomPosition; } // // ======================================================= // * Add a new atom to the basis, at the Cartesian // coordinate specified. int CrystalCell::DidAddAtomAtCartesianPoint( unsigned atomicNumber, TPoint3D pt ) { return DidAddAtomAtFractionalPoint(atomicNumber,CartesianToFractional(pt)); } // // ======================================================= // * Add a new atom to the basis, at the fractional // coordinate specified. The fractional coordinate is // forced to be within the cell; the coordinate is also // checked with the basis to make sure there is not an // atom already in the position. int CrystalCell::DidAddAtomAtFractionalPoint( unsigned atomicNumber, TPoint3D pt ) { /* // If we're close enough to 0, then make the coordinate zero. // Otherwise if 0 > x,y,z > 1 keep adding/subtracting 1 to // get within that range: if (fabs(pt.x) < 1e-4) { pt.x = 0.0; } else if (pt.x > 0.0) { while (pt.x >= 1.0) { pt.x -= 1.0; if (fabs(pt.x) < 1e-4) pt.x = 0.0; } } else { while (pt.x < 0.0) { pt.x += 1.0; if (fabs(pt.x) < 1e-4) pt.x = 0.0; } } if (fabs(pt.y) < 1e-4) { pt.y = 0.0; } else if (pt.y > 0.0) { while (pt.y >= 1.0) { pt.y -= 1.0; if (fabs(pt.y) < 1e-4) pt.y = 0.0; } } else { while (pt.y < 0.0) { pt.y += 1.0; if (fabs(pt.y) < 1e-4) pt.y = 0.0; } } if (fabs(pt.z) < 1e-4) { pt.z = 0.0; } else if (pt.z > 0.0) { while (pt.z >= 1.0) { pt.z -= 1.0; if (fabs(pt.z) < 1e-4) pt.z = 0.0; } } else { while (pt.z < 0.0) { pt.z += 1.0; if (fabs(pt.z) < 1e-4) pt.z = 0.0; } } */ // Remove any integer portion of the coordinates so that // they're truly fractional; if we're close enough to zero // then just go with zero, too: if (fabs(pt.x -= trunc(pt.x)) < 1e-4) pt.x = 0.0; else if (pt.x < 0.0) pt.x += 1.0; if (fabs(pt.y -= trunc(pt.y)) < 1e-4) pt.y = 0.0; else if (pt.y < 0.0) pt.y += 1.0; if (fabs(pt.z -= trunc(pt.z)) < 1e-4) pt.z = 0.0; else if (pt.z < 0.0) pt.z += 1.0; // Check to see if anything else is there: if (PositionIsUnoccupied(pt)) { // If the number of basis atoms matches the size of the array // we need to increase the size of our array of basis atoms: if (basisCount == basisSize) if (!DidResizeBasisArray(basisSize + DEFAULT_BASIS_GROW)) return 0; basis[basisCount].atomicNumber = atomicNumber; basis[basisCount++].atomPosition = pt; return 1; } return 0; } // // ======================================================= // * Display the crystal cell parameters in human-readable // form void CrystalCell::print( ostream& os ) { ios_base::fmtflags savedFlags = os.flags(); os << "CrystalCell { basisSize=" << basisSize << " basisCount=" << basisCount << endl; os.setf(ios::fixed); for ( unsigned i = 0 ; i < basisCount ; i++ ) { os.setf(ios::left); os << setw(3) << basis[i].atomicNumber << ' '; os.unsetf(ios::left); os << setprecision(6) << setw(10) << basis[i].atomPosition.x << ' '; os << setprecision(6) << setw(10) << basis[i].atomPosition.y << ' '; os << setprecision(6) << setw(10) << basis[i].atomPosition.z << endl; } os.unsetf(ios::fixed); // Ask our superclass to print its info, too: Cell::print(os); os << "}\n"; os.setf(savedFlags); } // // ======================================================= // * Resize the cell; does not attempt to keep the atomic // coordinates in-place (use the padding method for that // operation) void CrystalCell::ResizeCell( double in_a, double in_b, double in_c ) { SetDimensionA(in_a); SetDimensionB(in_b); SetDimensionC(in_c); } // // ======================================================= // * Add padding to the cell. This amounts to enlarging // the size of the cell but keeping the atomic basis // fixed their relative distance from one another. void CrystalCell::AddPaddingToCell( double da, double db, double dc, unsigned opts ) { double newa = a + da; double newb = b + db; double newc = c + dc; double aRatio = a / newa; double bRatio = b / newb; double cRatio = c / newc; unsigned i; TVector3D xlate = { 0.0 , 0.0 , 0.0 }; // Check to see if any of the coordinates will now // be outside the cell: for ( i = 0 ; i < basisCount ; i++ ) { if ((aRatio * basis[i].atomPosition.x >= 1.0) || (bRatio * basis[i].atomPosition.y >= 1.0) || (cRatio * basis[i].atomPosition.z >= 1.0)) return; } // If we're adding padding to all edges, then define // a translational vector that we can add to each // point to do the centering: if (opts == kCrystalCellPadFromCenter) { xlate.x = (0.5 * da / newa); xlate.y = (0.5 * db / newb); xlate.z = (0.5 * dc / newc); for ( i = 0 ; i < basisCount ; i++ ) { basis[i].atomPosition.x = basis[i].atomPosition.x * aRatio + xlate.x; basis[i].atomPosition.y = basis[i].atomPosition.y * bRatio + xlate.y; basis[i].atomPosition.z = basis[i].atomPosition.z * cRatio + xlate.z; } } else { // Grow relative to the origin: for ( i = 0 ; i < basisCount ; i++ ) { basis[i].atomPosition.x *= aRatio; basis[i].atomPosition.y *= bRatio; basis[i].atomPosition.z *= cRatio; } } SetDimensionA(newa); SetDimensionB(newb); SetDimensionC(newc); } // // ======================================================= // * Translate all points in the atomic basis; the // translation is given as a Cartesian shift. void CrystalCell::ApplyCartesianTranslation( TVector3D xfrm ) { ApplyFractionalTranslation(CartesianToFractional(xfrm)); } // // ======================================================= // * Translate all points in the atomic basis; the // translation is given as a fractional coordinate // shift. void CrystalCell::ApplyFractionalTranslation( TVector3D xfrm ) { for ( unsigned i = 0 ; i < basisCount ; i++ ) { TPoint3D p; Vector3D_Sum(&basis[i].atomPosition,&xfrm,&p); Point3D_Rezero(&p,1e-6); if (p.x >= 1.0) while (p.x >= 1.0) p.x -= 1.0; else while (p.x < 0.0) p.x += 1.0; if (p.y >= 1.0) while (p.y >= 1.0) p.y -= 1.0; else while (p.y < 0.0) p.y += 1.0; if (p.z >= 1.0) while (p.z >= 1.0) p.z -= 1.0; else while (p.z < 0.0) p.z += 1.0; Point3D_Rezero(&p,1e-6); basis[i].atomPosition = p; } } // // ======================================================= // * Generate a listing of cartesian coordinates for a // cell propogated through (i,j,k) translations. The // coordinates are centered on the origin. void CrystalCell::Propogate( unsigned i, unsigned j, unsigned k, ostream& os, unsigned opts ) { TVector3D xform = { 0.0 , 0.0 , 0.0 }; TPoint3D pt; unsigned li,lj,lk,bb; ios_base::fmtflags savedFlags = os.flags(); ANSRDB* periodicTable = ANSRDB::DefaultANSRDB(); // Vector-transform to be used on each point such // that we center the generated lattice at the // origin: if (opts == kCrystalCellPropogateCentered) { Vector3D_ScaledSum(&xform,(double)i,&av[0],&xform); Vector3D_ScaledSum(&xform,(double)j,&av[1],&xform); Vector3D_ScaledSum(&xform,(double)k,&av[2],&xform); Vector3D_Scalar(&xform,-0.5,&xform); } // Simply loop and generate points: os.setf(ios::fixed); for ( li = 0 ; li < i ; li++ ) { for ( lj = 0 ; lj < j ; lj++ ) { for ( lk = 0 ; lk < k ; lk++ ) { for ( bb = 0 ; bb < basisCount ; bb++ ) { pt = basis[bb].atomPosition; if (li) pt.x += (double)li; if (lj) pt.y += (double)lj; if (lk) pt.z += (double)lk; pt = FractionalToCartesian(pt); Vector3D_Sum(&pt,&xform,&pt); TElementSymbol symbol = periodicTable->LookupSymbolForNumber(basis[bb].atomicNumber); if (symbol == kANSRInvalidSymbol) { os.setf(ios::left); os << " " << setw(3) << basis[bb].atomicNumber << " "; os.unsetf(ios::left); os << setprecision(6) << setw(12) << pt.x << ' '; os << setprecision(6) << setw(12) << pt.y << ' '; os << setprecision(6) << setw(12) << pt.z << endl; } else { os.setf(ios::left); os << " " << setw(3) << (char*)&symbol << " "; os.unsetf(ios::left); os << setprecision(6) << setw(12) << pt.x << ' '; os << setprecision(6) << setw(12) << pt.y << ' '; os << setprecision(6) << setw(12) << pt.z << endl; } } } } } os.setf(savedFlags); } // bool CrystalCell::Propogate( unsigned i,unsigned j,unsigned k, TAtomicCoordinate** coords, unsigned* length, unsigned opts ) { TAtomicCoordinate *array = *coords,*aPtr; bool hadArray = (array != NULL); unsigned count = *length,total = 0; TVector3D xform = { 0.0 , 0.0 , 0.0 }; TPoint3D pt; unsigned li,lj,lk,bb; // Vector-transform to be used on each point such // that we center the generated lattice at the // origin: if (opts == kCrystalCellPropogateCentered) { Vector3D_ScaledSum(&xform,(double)i,&av[0],&xform); Vector3D_ScaledSum(&xform,(double)j,&av[1],&xform); Vector3D_ScaledSum(&xform,(double)k,&av[2],&xform); Vector3D_Scalar(&xform,-0.5,&xform); } // Get an array allocated: if (!hadArray) { count = i * j * k * basisCount; array = (TAtomicCoordinate*)(calloc(count,sizeof(TAtomicCoordinate))); if (!array) return false; } aPtr = array; // Simply loop and generate points: for ( li = 0 ; li < i && count > 0 ; li++ ) { for ( lj = 0 ; lj < j && count > 0 ; lj++ ) { for ( lk = 0 ; lk < k && count > 0 ; lk++ ) { for ( bb = 0 ; bb < basisCount && count > 0 ; bb++ ) { aPtr->atomicNumber = basis[bb].atomicNumber; pt = basis[bb].atomPosition; if (li) pt.x += (double)li; if (lj) pt.y += (double)lj; if (lk) pt.z += (double)lk; pt = FractionalToCartesian(pt); Vector3D_Sum(&pt,&xform,&aPtr->atomPosition); total++; aPtr++; count--; } } } } // Prepare for return: if (!hadArray) *coords = array; *length = total; return true; } // // PRIVATE methods // // ======================================================= // * Resize the array of atomic coordinates; returns zero // if realloc fails, 1 if realloc succeeds. int CrystalCell::DidResizeBasisArray( unsigned newSize ) { TAtomicCoordinate* newBasis = NULL; if (newBasis = (TAtomicCoordinate*)realloc(basis,sizeof(TAtomicCoordinate) * newSize)) { basis = newBasis; basisSize = newSize; return 1; } return 0; } // // ======================================================= // * Determine if the point is already occupied within the // atomic basis. Uses a default search-radius around // the new position. int CrystalCell::PositionIsUnoccupied( TPoint3D pt ) { return PositionIsUnoccupied(pt,DEFAULT_SEARCH_RADIUS); } // // ======================================================= // * Determine if the point is already occupied within the // atomic basis using the supplied search radius. // // 14 Dec 2006 [JTF] Was using a simple fractional distance // test, but this fails for large crystal // cells (cell size inc, fractional distance // dec). Using the Cell class' Cartesian // distance between fraction points method // now. int CrystalCell::PositionIsUnoccupied( TPoint3D pt, double radius ) { for ( unsigned i = 0 ; i < basisCount ; i++ ) if (CartesianDistanceBetweenFractionalPoints(pt,basis[i].atomPosition) < radius) return 0; return 1; } // avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/diamond.cpp0000755000175000001440000000567612250371054026301 0ustar marcususers//========================================================== // // diamond.cpp // // Diamond lattice propogator // // Uses the CrystalCell class to generate a cell for // diamond-like structures. The primitive cell is then // used to construct the (i,j,k) super-cell (output as // a set of Cartesian coordinated). // // Created: 21.FEB.2002 // Last Mod: n/a // #include "ANSR.h" #include "CrystalCell.h" // Real diamond // a = b = c = 3.566 angstrom #define DIAMOND_ABC 3.566 // Silicon // a = b = c = 5.43 angstrom #define SILICON_ABC 5.43 // Germanium // a = b = c = 5.66 angstrom #define GERMANIUM_ABC 5.66 // Si, Ge info from: // http://hyperphysics.phy-astr.gsu.edu/hbase/solids/sili2.html#c1 // // We use an ANSRDB initialized from /usr/share/periodic.table // which, if the file isn't there, will just be the default // anyway: ANSRDB gPeriodicTable("/usr/share/periodic.table"); // int main( int argc, char* argv[] ) { CrystalCell* theCell; unsigned atomicNumber = 6; if (argc > 2) { if (strcmp(argv[2],"Si") == 0) { atomicNumber = 14; theCell = new CrystalCell(SILICON_ABC,SILICON_ABC,SILICON_ABC,90.0,90.0,90.0); } else if (strcmp(argv[2],"Ge") == 0) { atomicNumber = 32; theCell = new CrystalCell(GERMANIUM_ABC,GERMANIUM_ABC,GERMANIUM_ABC,90.0,90.0,90.0); } else theCell = new CrystalCell(DIAMOND_ABC,DIAMOND_ABC,DIAMOND_ABC,90.0,90.0,90.0); } else theCell = new CrystalCell(DIAMOND_ABC,DIAMOND_ABC,DIAMOND_ABC,90.0,90.0,90.0); // These are the fractional coordinates for a diamond // lattice: TPoint3D p1 = { 0.0 , 0.0 , 1.0 / 8.0 }; TPoint3D p2 = { 0.5 , 0.5 , 1.0 / 8.0 }; TPoint3D p3 = { 3.0 / 4.0 , 1.0 / 4.0 , 3.0 / 8.0 }; TPoint3D p4 = { 1.0 / 4.0 , 3.0 / 4.0 , 3.0 / 8.0 }; TPoint3D p5 = { 0.5 , 0.0 , 5.0 / 8.0 }; TPoint3D p6 = { 0.0 , 0.5 , 5.0 / 8.0 }; TPoint3D p7 = { 1.0 / 4.0 , 1.0 / 4.0 , 7.0 / 8.0 }; TPoint3D p8 = { 3.0 / 4.0 , 3.0 / 4.0 , 7.0 / 8.0 }; // For propogation count: unsigned i,j,k; int got; // Get command line stuff: if (argc < 2) { printf(" usage: diamond i,j,k {Si,Ge}\n"); return -1; } got = sscanf(argv[1],"%d,%d,%d",&i,&j,&k); if (got < 3) k = 1; if (got < 2) j = 1; if (got < 1) i = 1; // Add the atomic basis to the crystal cell: theCell->DidAddAtomAtFractionalPoint(atomicNumber,p1); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p2); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p3); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p4); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p5); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p6); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p7); theCell->DidAddAtomAtFractionalPoint(atomicNumber,p8); // Generate the coordinates: theCell->Propogate(i,j,k,cout,kCrystalCellPropogateCentered); }avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/CrystalCell.h0000755000175000001440000000510012250371054026532 0ustar marcususers//========================================================== // // CrystalCell.h // // A component of the TubeGen program // // Adds atomic basis to a lattice cell. // // Created: 19.FEB.2002 // Last Mod: 05.Feb.2003: Removed all ostream::form calls and moved to purely // C++ stream operators. // #ifndef __CRYSTALCELL__ #define __CRYSTALCELL__ // Removed for Avogadro: // #include // // Replaced with: #include "Cell.h" using namespace std; // enum { kCrystalCellPadFromCenter, kCrystalCellPadFromOrigin }; // enum { kCrystalCellPropogateStandard, kCrystalCellPropogateCentered }; // typedef struct _TAtomicCoordinate { unsigned atomicNumber; TPoint3D atomPosition; } TAtomicCoordinate; // class CrystalCell : public Cell { public: unsigned basisCount; unsigned basisSize; TAtomicCoordinate* basis; public: CrystalCell(); CrystalCell(double in_a,double in_b,double in_c, double in_alpha,double in_beta,double in_gamma); CrystalCell(double in_a,double in_b,double in_c, double in_alpha,double in_beta,double in_gamma, unsigned basisHint); CrystalCell(double in_a,double in_b,double in_c, double in_alpha,double in_beta,double in_gamma, unsigned basisDim,TAtomicCoordinate* theBasis); unsigned GetBasisCount() { return basisCount; }; TAtomicCoordinate GetAtomicCoordinate(unsigned index); TPoint3D GetCoordinate(unsigned index); // Add an atom to the atomic basis: int DidAddAtomAtCartesianPoint(unsigned atomicNumber,TPoint3D pt); int DidAddAtomAtFractionalPoint(unsigned atomicNumber,TPoint3D pt); // Write cell information to an ostream: void print(ostream& os); // Change the size of the cell: void ResizeCell(double in_a,double in_b,double in_c); void AddPaddingToCell(double da,double db,double dc,unsigned opts); // Atomic basis transformations: void ApplyCartesianTranslation(TVector3D xfrm); void ApplyFractionalTranslation(TVector3D xfrm); // Propogate through space: void Propogate(unsigned i,unsigned j,unsigned k,ostream& os,unsigned opts = kCrystalCellPropogateStandard); bool Propogate(unsigned i,unsigned j,unsigned k,TAtomicCoordinate** coords,unsigned* length,unsigned opts = kCrystalCellPropogateStandard); private: int DidResizeBasisArray(unsigned newSize); int PositionIsUnoccupied(TPoint3D pt); int PositionIsUnoccupied(TPoint3D pt,double radius); }; #endif //__CRYSTALCELL__ avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/graphite.cpp0000755000175000001440000000341612250371054026457 0ustar marcususers//========================================================== // // graphite.cpp // // Graphite lattice propogator // // Uses the CrystalCell class to generate a cell for // turbostratic graphite. The primitive cell is then // used to construct the (i,j,k) super-cell (output as // a set of Cartesian coordinated). // // Created: 19.FEB.2002 // Last Mod: n/a // #include "ANSR.h" #include "CrystalCell.h" // a = b = 2.456 angstrom #define GRAPHITE_AB 2.456 // c = 6.694 angstrom #define GRAPHITE_C 6.694 // // We use an ANSRDB initialized from /usr/share/periodic.table // which, if the file isn't there, will just be the default // anyway: ANSRDB gPeriodicTable("/usr/share/periodic.table"); // int main( int argc, char* argv[] ) { // Our hexagonal unit cell: CrystalCell theCell(GRAPHITE_AB,GRAPHITE_AB,GRAPHITE_C,90.0,90.0,120.0); // These are the fractional coordinates for turbostratic // graphite: TPoint3D p1 = { 0.0 , 0.0 , 0.25 }; TPoint3D p2 = { 1.0 / 3.0 , 2.0 / 3.0 , 0.25 }; TPoint3D p3 = { 0.0 , 0.0 , 0.75 }; TPoint3D p4 = { 2.0 / 3.0 , 1.0 / 3.0 , 0.75 }; // For propogation count: unsigned i,j,k; int got; // Get command line stuff: if (argc < 2) { printf(" usage: graphite i,j,k\n"); return -1; } got = sscanf(argv[1],"%d,%d,%d",&i,&j,&k); if (got < 3) k = 1; if (got < 2) j = 1; if (got < 1) i = 1; // Add the atomic basis to the crystal cell: theCell.DidAddAtomAtFractionalPoint(6,p1); theCell.DidAddAtomAtFractionalPoint(6,p2); theCell.DidAddAtomAtFractionalPoint(6,p3); theCell.DidAddAtomAtFractionalPoint(6,p4); // Generate the coordinates: theCell.Propogate(i,j,k,cout,kCrystalCellPropogateCentered); }avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/CMakeLists.txt0000644000175000001440000000060112250371054026676 0ustar marcususersset(tubegen_SRCS Bitmap.c Core3DMath.c eprintf.c ANSR.cpp Cell.cpp CrystalCell.cpp diamond.cpp fcc.cpp graphite.cpp TubeGen.cpp TubuleBasis.cpp ) add_library(tubegen STATIC ${tubegen_SRCS}) # Suppress warnings set_target_properties(tubegen PROPERTIES COMPILE_FLAGS "-w") # Set PIC flag set_target_properties(tubegen PROPERTIES POSITION_INDEPENDENT_CODE TRUE) avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/Cell.cpp0000755000175000001440000002366612250371054025544 0ustar marcususers//========================================================== // // Cell.cpp // // A component of the TubeGen program // // Generalized lattice cell. // // Created: 26.JAN.2002 // Last Mod: 14.FEB.2002: Addition of coordinate conversions // #include "Cell.h" #include "CoreConst.h" // Added for Avogadro: #include #include #ifdef _MSC_VER #define _USE_MATH_DEFINES #include #endif // // ======================================================= // * Default constructor Cell::Cell() { refs = 1; // so far, only one reference count a = b = c = 4.0; // arbitrary 4 angstrom cell dimension alpha = beta = gamma = 90.0; // make the cell cubic in nature this->GenerateCellVectors(); } // // ======================================================= // * Secondary constructor Cell::Cell( double in_a, double in_b, double in_c, double in_alpha, double in_beta, double in_gamma ) { refs = 1; // so far, only one reference count a = (in_a > 0.0)?(in_a):(4.0); b = (in_b > 0.0)?(in_b):(4.0); c = (in_c > 0.0)?(in_c):(4.0); alpha = ((in_alpha > 0.0) && (in_alpha < 180.0))?(in_alpha):(90.0); beta = ((in_beta > 0.0) && (in_beta < 180.0))?(in_beta):(90.0); gamma = ((in_gamma > 0.0) && (in_gamma < 180.0))?(in_gamma):(90.0); this->GenerateCellVectors(); } // // ======================================================= // * Makes a reference-copy of object Cell* Cell::Retain() { refs++; return this; } // // ======================================================= // * Release a reference to the object; when references // drop to zero, we can dispose of the object. void Cell::Release() { if (--refs == 0) delete this; } // // ======================================================= // * Set the length of the "a" axis void Cell::SetDimensionA( double dim ) { if (dim > 0.0) { a = dim; this->GenerateCellVectors(); } } // // ======================================================= // * Set the length of the "b" axis void Cell::SetDimensionB( double dim ) { if (dim > 0.0) { b = dim; this->GenerateCellVectors(); } } // // ======================================================= // * Set the length of the "c" axis void Cell::SetDimensionC( double dim ) { if (dim > 0.0) { c = dim; this->GenerateCellVectors(); } } // // ======================================================= // * Set the angle made by axes "b" and "c" void Cell::SetAngleAlpha( double ang ) { if ((ang > 0.0) && (ang < 180.0)) { alpha = ang; this->GenerateCellVectors(); } } // // ======================================================= // * Set the angle made by axes "a" and "c" void Cell::SetAngleBeta( double ang ) { if ((ang > 0.0) && (ang < 180.0)) { beta = ang; this->GenerateCellVectors(); } } // // ======================================================= // * Set the angle made by axes "a" and "b" void Cell::SetAngleGamma( double ang ) { if ((ang > 0.0) && (ang < 180.0)) { gamma = ang; this->GenerateCellVectors(); } } // // ======================================================= // * Return the vector which gives the translational // symmetry of the cell in Cartesian space. TVector3D Cell::GetCellTranslationVector() { TVector3D v = { av[0].x + av[1].x + av[2].x , av[0].y + av[1].y + av[2].y , av[0].z + av[1].z + av[2].z }; return v; } // // ======================================================= // * Fill the passed tensor reference with the cell's // own metric tensor. void Cell::GetMetricTensorForCell( MetricTensor& tensor ) { tensor = G; } // // ======================================================= // * Convert a cartesian coordinate to it's fractional // counterpart within this cell. TPoint3D Cell::CartesianToFractional( TPoint3D p ) { TPoint3D p_f = { 0.0 , 0.0 , 0.0 }; p_f.x = Vector3D_Dot(&p,&bv[0]); p_f.y = Vector3D_Dot(&p,&bv[1]); p_f.z = Vector3D_Dot(&p,&bv[2]); Point3D_Rezero(&p_f,1e-10); return p_f; } // // ======================================================= // * Convert a fractional coordinate within this cell // to it's cartesian counterpart. TPoint3D Cell::FractionalToCartesian( TPoint3D p ) { TPoint3D p_f = { 0.0 , 0.0 , 0.0 }; Vector3D_Scalar(&av[0],p.x,&p_f); Vector3D_ScaledSum(&p_f,p.y,&av[1],&p_f); Vector3D_ScaledSum(&p_f,p.z,&av[2],&p_f); Point3D_Rezero(&p_f,1e-10); return p_f; } // // ======================================================= // * Calculate the Cartesian-space distance between two // fractional points double Cell::CartesianDistanceBetweenFractionalPoints( TPoint3D p1, TPoint3D p2 ) { TVector3D v; Vector3D_Diff(&p1,&p2,&v); return sqrt((v.x * G.t[0] + v.y * G.t[1] + v.z * G.t[3]) * v.x + \ (v.x * G.t[1] + v.y * G.t[2] + v.z * G.t[4]) * v.y + \ (v.x * G.t[3] + v.y * G.t[4] + v.z * G.t[5]) * v.z); } // // ======================================================= // * Display the cell parameters in human-readable form void Cell::print( ostream& os ) { unsigned i; ios_base::fmtflags savedFlags = os.flags(); os.setf(ios::fixed); os << "Cell { " << endl; os << " (a,b,c) = "; os << setprecision(6) << setw(12) << a << " , "; os << setprecision(6) << setw(12) << b << " , "; os << setprecision(6) << setw(12) << c << endl; os << " (alpha,beta,gamma) = "; os << setprecision(6) << setw(12) << alpha << " , "; os << setprecision(6) << setw(12) << beta << " , "; os << setprecision(6) << setw(12) << gamma << endl; for ( i = 0 ; i < 3 ; i++ ) { os << " a" << i+1 << " = < "; os << setprecision(6) << setw(12) << av[i].x << " , "; os << setprecision(6) << setw(12) << av[i].y << " , "; os << setprecision(6) << setw(12) << av[i].z << " >" << endl; } os << " volume, real = " << setprecision(6) << setw(12) << volume << endl; for ( i = 0 ; i < 3 ; i++ ) { os << " b" << i+1 << " = < "; os << setprecision(6) << setw(12) << bv[i].x << " , "; os << setprecision(6) << setw(12) << bv[i].y << " , "; os << setprecision(6) << setw(12) << bv[i].z << " >" << endl; } os << " volume, reciprocal = " << setprecision(6) << setw(12) << 1.0 / volume << endl; os << " [ " << setprecision(6) << setw(12) << G.t[0]; os << " ]" << endl; os << " metric tensor (g) = [ " << setprecision(6) << setw(12) << G.t[1] << " "; os << setprecision(6) << setw(12) << G.t[2] << " ]" << endl; os << " [ " << setprecision(6) << setw(12) << G.t[3] << " "; os << setprecision(6) << setw(12) << G.t[4] << " "; os << setprecision(6) << setw(12) << G.t[5] << " ]" << endl; os << "}" << endl; os.setf(savedFlags); } // // PRIVATE methods // // ======================================================= // * From the cell dimensions and angles, generate the // three basis vectors for it void Cell::GenerateCellVectors() { // The a axis is easy; project the "a" dimension // along the x-axis: av[0].x = a; av[0].y = 0.0; av[0].z = 0.0; // The b axis is fairly easy, too; we keep it in // the xy-plane and simply rotate through gamma // degrees: double gammaRad = gamma * kDegreesToRadians; double cosGamma = cos(gammaRad); double sinGamma = sin(gammaRad); av[1].x = b * cosGamma; av[1].y = b * sinGamma; av[1].z = 0.0; // Check for underflows: Vector3D_Rezero(&av[1],1e-10); // The c axis is the toughy. We need to rotate // relative to the two previously-defined vectors: double alphaRad = alpha * kDegreesToRadians; double betaRad = beta * kDegreesToRadians; double cosAlpha = cos(alphaRad); double cosBeta = cos(betaRad); double sinBeta = sin(betaRad); double sinPhi; // (1) Rotate away from a1 (on the x-axis) by beta: av[2].x = c * cosBeta; av[2].y = 0.0; av[2].z = c * sinBeta; // (2) Do a constrained rotation around the x-axis such that // the angle between a3 and a2 becomes alpha: // // c = [[|c| cos(beta)][0][|c| sin(beta)]] // a3 = [[1 0 0][0 cos(phi) -sin(phi)][0 sin(phi) cos(phi)]].c = Phi.c // a2(t).Phi.c = |b||c| cos(alpha) // // Given the construction of a1 and a2 thus far, the equation // is soluble and we find the angle phi and can perform the // rotation in question. sinPhi = (cosGamma * cosBeta - cosAlpha) / (sinGamma * sinBeta); av[2].y = av[2].z * -sinPhi; av[2].z = av[2].z * sqrt( 1.0 - sinPhi * sinPhi ); //printf(" Consistency Check: acos ( a.b ) = %lf\n",kRadiansToDegrees * acos( Vector3D_Dot(&av[0],&av[1]) / (a * b) )); //printf(" acos ( a.c ) = %lf\n",kRadiansToDegrees * acos( Vector3D_Dot(&av[0],&av[2]) / (a * c) )); //printf(" acos ( b.c ) = %lf\n",kRadiansToDegrees * acos( Vector3D_Dot(&av[1],&av[2]) / (b * c) )); // Check for underflows: Vector3D_Rezero(&av[2],1e-10); // That gives us the real-space basis; construct the reciprocal // space basis: Vector3D_Cross(&av[1],&av[2],&bv[0]); Vector3D_Cross(&av[2],&av[0],&bv[1]); Vector3D_Cross(&av[0],&av[1],&bv[2]); // Each must be divided by the volume, too: volume = Vector3D_Dot(&av[0],&bv[0]); double recipVol = 1.0 / volume; Vector3D_Scalar(&bv[0],recipVol,&bv[0]); Vector3D_Scalar(&bv[1],recipVol,&bv[1]); Vector3D_Scalar(&bv[2],recipVol,&bv[2]); // Check for underflows: Vector3D_Rezero(&bv[0],1e-10); Vector3D_Rezero(&bv[1],1e-10); Vector3D_Rezero(&bv[2],1e-10); // Create our metric: int idx = 0; for ( int i = 0 ; i < 3 ; i++ ) for ( int j = 0 ; j <= i ; j++ ) G.t[idx++] = Vector3D_Dot(&av[i],&av[j]); } // avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/TubeGen.cpp0000755000175000001440000005546412250371054026217 0ustar marcususers// =============================================================================== // TubeGen.cpp ©2001-2002, J.T. Frey // =============================================================================== // Written: J.T. Frey, 07.26.2001 // Purpose: Main program file for the TubeGen app. This file contains the // routines which generate the atomic basis for a unit cell and the // k-point list for a unit cell. Also contains the main program // which processes user commands. // // Last Mod: 20.FEB.2002: Switch to hexagonal unit cell; k-point generator is // no longer necessary. // 18.NOV.2002: Modifications to position generation loop [3.0.5] // 03.DEC.2002: Cell expansion/contraction to preserve rolled C-C // bond lengths added as an option [3.0.6] // 14.DEC.2002: Further corrections to lattice relaxtion, introduction // or TubuleBasis class [3.1] // 28.OCT.2003: Added support for Gaussian 03 periodic boundary conditions // and did some basic clean-up [3.1.1] // 09.JUL.2004: Added support for PDB files [3.1.2] // 02.Feb.2005: Added support for connectivity in PDB files and support // for POV shape files [3.2] // 17.Feb.2005: Added support for alternate elements in graphitic basis // [3.3] // 20.Feb.2005: Added support for MSI's .bgf format // // Include some of our own headers: #include "CrystalCell.h" #include "CoreConst.h" #include "ANSR.h" #include "eprintf.h" #include "TubuleBasis.h" // Added for Avogadro #include #ifdef _MSC_VER #define snprintf _snprintf #endif // // The commands can only be this long: #define CMD_BUFFER_LEN 256 // For boolean stuff: #ifndef YES #define YES 1 #endif #ifndef NO #define NO 0 #endif #define ANGSTROM_PER_BOHR 0.529 // // ---------------------------------------------------------------------- // * mungeWhitespace // ---------------------------------------------------------------------- // Updated: Jeff Frey, 07.26.2001 // Purpose: Removes white space (space, tab, newline characters) // from the head and tail of a string. // // Last Mod: n/a void mungeWhitespace( char* buffer ) { char* p1 = buffer; char* p2 = buffer + strlen(buffer); size_t l; while (isspace(*p1)) p1++; while (isspace(*(--p2))); l = p2 - p1 + 1; memmove(buffer,p1,l); buffer[l] = '\0'; } // // ---------------------------------------------------------------------- // * main // ---------------------------------------------------------------------- // Updated: Jeff Frey, 07.26.2001 // Purpose: The entry point of the program. This is one big long // function which may be slightly bloated, but factoring it // out into "chunks" and making the design a bit more // modular would be of no true benefit. Essentially, the // program processes commands coming from a "comFile" while // may be an actual file or may be the standard input stream. // // Last Mod: 08.DEC.2002: Updated for version 3.1 int main(int argc,const char * argv[]) { char command[CMD_BUFFER_LEN]; FILE* comFile = stdin; TubuleBasis tube(3,3); CrystalCell* theCell = NULL; int printPrompt = YES; int echoCommands = NO; unsigned i = 1; TVector3D v; // If any argument is '--quiet' then we redirect stdout and stderr to // /dev/null: while (i < argc) { if (strcmp(argv[i],"--quiet") == 0) { freopen("/dev/null","w",stdout); freopen("/dev/null","w",stderr); tube.SetOption_Verbose(false); } i++; } // Make the tube object verbose now: tube.SetOption_Verbose(true); // Are we interactive or not? if ((fseek(stdin,0,SEEK_END) == 0) && (ftell(stdin) > 0)) { rewind(stdin); echoCommands = YES; } // Print out a header which shows version info, etc: eprintf("%@bold;TubeGen%@reset; - Carbon Nanotube Stucture Generator\n"); #if 0 // Removed for avogadro, causing build problems printf("Version " PACKAGE_VERSION " [%s %s]\n",__TIME__,__DATE__); printf("Copyright (c) 2000-2004, J. T. Frey\n\n"); #endif // If the user specified a "script" file, open it; otherwise we stick // to using stdin: if (argc > 1) { if ((comFile = fopen(argv[1],"r")) == NULL) comFile = stdin; } // This loop runs as long as the quit/exit command is not given. When // that happens, a simple "break" statement pops us out! while(1) { // Read the next command, drop the terminating newline // character, drop any leading whitespace: if (printPrompt) { printf("> "); fflush(stdout); } fgets(command,CMD_BUFFER_LEN,comFile); if (feof(comFile)) break; if (command[strlen(command) - 1] == '\n') command[strlen(command) - 1] = '\0'; mungeWhitespace(command); // Watch for comments; the '#' sign at the head of a line // indicates this! if (*command == '#') { printPrompt = NO; continue; } printPrompt = YES; // Print the command if we're reading a script: if ((comFile != stdin) || (echoCommands)) printf("%s\n",command); // Scan the command: if ((*command == '?') || (strcmp(command,"help") == 0)) { // Display help page printf(" Command Summary:\n"); printf(" help print this information\n"); printf(" status display state variables\n"); printf(" set VARIABLE VALUE reset a state variable\n"); printf(" generate create the cell and basis\n"); printf(" ftranslate apply a fractional translation to the atomic basis\n"); printf(" ctranslate apply a Cartesian translation to the atomic basis\n"); printf(" print print the cell to the display\n"); printf(" save save the cell to a file\n"); printf(" exit exit the program\n"); printf(" Variables (default value appears first):\n"); printf(" format {");TubuleBasis::SummarizeFormatStrings();printf("}\n"); printf(" units {angstrom,bohr}\n"); printf(" element{1,2} # or symbol\n"); printf(" bond #\n"); printf(" gutter #,#,#\n"); printf(" shape {hexagonal,cubic,planar}\n"); printf(" chirality #,#\n"); printf(" cell_count #,#,#\n"); printf(" relax_tube {yes,no}\n"); } else if ((strcmp(command,"exit") == 0) || (strcmp(command,"quit") == 0)) { // Exit the program break; } else if (strcmp(command,"status") == 0) { TElementSymbol symbol; unsigned atomicNumber; // Display state variables printf(" format => %s\n",tube.StringForFormat()); printf(" units => "); switch(tube.GetOption_Units()) { case EUnits_Bohr: printf("bohr\n"); break; case EUnits_Angstrom: printf("angstrom\n"); break; default: printf("\n"); } printf(" bond => %lg\n",tube.Get_bond() * tube.GetUnitConversionFactor()); printf(" element1 => "); atomicNumber = tube.Get_element(0); if ((symbol = (ANSRDB::DefaultANSRDB())->LookupSymbolForNumber(atomicNumber)) != kANSRInvalidSymbol) printf("%s\n",(char*)&symbol); else printf("%u\n",atomicNumber); printf(" element2 => "); atomicNumber = tube.Get_element(1); if ((symbol = (ANSRDB::DefaultANSRDB())->LookupSymbolForNumber(atomicNumber)) != kANSRInvalidSymbol) printf("%s\n",(char*)&symbol); else printf("%u\n",atomicNumber); v.x = tube.Get_gutter(EDirection_X) * tube.GetUnitConversionFactor(); v.y = tube.Get_gutter(EDirection_Y) * tube.GetUnitConversionFactor(); v.z = tube.Get_gutter(EDirection_Z) * tube.GetUnitConversionFactor(); printf(" gutter => %lg,%lg,%lg\n",v.x,v.y,v.z); printf(" shape => "); switch(tube.GetOption_Lattice()) { case ELattice_Hexagonal: printf("hexagonal (rolled)\n"); break; case ELattice_Cubic: printf("cubic (rolled)\n"); break; case ELattice_Planar: printf("planar\n"); break; default: printf("\n"); } printf(" chirality => %d,%d\n",tube.Get_n(),tube.Get_m()); printf(" cell_count => %d,%d,%d\n", \ tube.Get_replication(EDirection_X), \ tube.Get_replication(EDirection_Y), \ tube.Get_replication(EDirection_Z) ); printf(" relax_tube => %s\n",((tube.GetOption_RelaxTubule())?("yes"):("no"))); printf(" |-radius_conv => %1.0lg\n",tube.GetOption_RadiusConv()); printf(" |-error_conv => %1.0lg\n",tube.GetOption_ErrorConv()); printf(" |-gamma_conv => %1.0lg\n",tube.GetOption_GammaConv()); } else if (strstr(command,"set") == command) { // Reset a state variable value char* varName = command + 3; char* end; char saved; while ((*varName != '\0') && (!isalpha(*varName))) varName++; end = varName + 1; while ((*end != '\0') && ((isalpha(*end)) || (*end == '_'))) end++; saved = *end; *end = '\0'; //////////////////////////// if (strcmp(varName,"radius_conv") == 0) { // Radius convergence in tubule relaxation: double tmp; *end = saved; varName = end; while ((*varName != '\0') && (!isdigit(*varName))) varName++; if (sscanf(varName,"%lg",&tmp) == 1) { tube.SetOption_RadiusConv(tmp); } else eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); } //////////////////////////// else if (strcmp(varName,"error_conv") == 0) { // Error convergence in tubule relaxation: double tmp; *end = saved; varName = end; while ((*varName != '\0') && (!isdigit(*varName))) varName++; if (sscanf(varName,"%lg",&tmp) == 1) { tube.SetOption_ErrorConv(tmp); } else eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); } //////////////////////////// else if (strcmp(varName,"gamma_conv") == 0) { // Gamma convergence in tubule relaxation: double tmp; *end = saved; varName = end; while ((*varName != '\0') && (!isdigit(*varName))) varName++; if (sscanf(varName,"%lg",&tmp) == 1) { tube.SetOption_GammaConv(tmp); } else eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); } //////////////////////////// else if (strcmp(varName,"format") == 0) { // Exported file type: *end = saved; varName = end; while ((*varName != '\0') && (!isalpha(*varName))) varName++; end = varName + 1; while ((*end != '\0') && ((isalnum(*end)) || (*end == '_'))) end++; if (!tube.SetOption_Format(varName)) eprintf(" %@yellow;WARNING%@reset;: Invalid output format: %s\n",varName); } //////////////////////////// else if (strcmp(varName,"units") == 0) { // Units: *end = saved; varName = end; while ((*varName != '\0') && (!isalpha(*varName))) varName++; end = varName + 1; while ((*end != '\0') && ((isalnum(*end)) || (*end == '_'))) end++; if (strcmp(varName,"bohr") == 0) tube.SetOption_Units(EUnits_Bohr); else if (strcmp(varName,"angstrom") == 0) tube.SetOption_Units(EUnits_Angstrom); else eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); } //////////////////////////// else if (strcmp(varName,"bond") == 0) { // Carbon-Carbon bond length: double tmp; *end = saved; varName = end; while ((*varName != '\0') && (!isdigit(*varName))) varName++; if (sscanf(varName,"%lg",&tmp) == 1) { tmp /= tube.GetUnitConversionFactor(); tube.Set_bond(tmp); } else eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); } //////////////////////////// else if (strstr(varName,"element") == varName) { // Element: *end = saved; // Find out which element we're looking at: varName += 7; if (*varName == '1' || *varName == '2') { unsigned which = *varName - '1'; TElementSymbol symbol; unsigned atomicNumber = 0; varName++; while ((*varName != '\0') && (!isalnum(*varName))) varName++; // Try to turn the remainder of the string into a symbol: if ((symbol = ANSRDB::MakeSymbolFromString(varName)) != kANSRInvalidSymbol) { if ((atomicNumber = (ANSRDB::DefaultANSRDB())->LookupNumberForSymbol(symbol)) == kANSRInvalidSymbol) atomicNumber = 0; } if (!atomicNumber) sscanf(varName,"%u",&atomicNumber); // If we have something non-zero in 'atomicNumber' we got an // element! if (atomicNumber) tube.Set_element(which,atomicNumber); else eprintf(" %@yellow;WARNING%@reset;: '%s' is not a valid element\n",varName); } else eprintf(" %@yellow;WARNING%@reset;: Only indices of {1,2} are allowed for the 'element#' variable\n"); } //////////////////////////// else if (strcmp(varName,"gutter") == 0) { // Unit cell padding (gutter): double x,y,z; int c; *end = saved; varName = end; while ((*varName != '\0') && (!isdigit(*varName))) varName++; c = sscanf(varName,"%lg,%lg,%lg",&x,&y,&z); if (c >= 1) { x /= tube.GetUnitConversionFactor(); tube.Set_gutter(EDirection_X,x); } if (c >= 2) { y /= tube.GetUnitConversionFactor(); tube.Set_gutter(EDirection_Y,y); } if (c >= 3) { z /= tube.GetUnitConversionFactor(); tube.Set_gutter(EDirection_Z,z); } if (c < 1) eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); } //////////////////////////// else if (strcmp(varName,"shape") == 0) { // Lattice shape: *end = saved; varName = end; while ((*varName != '\0') && (!isalpha(*varName))) varName++; end = varName + 1; while ((*end != '\0') && ((isalnum(*end)) || (*end == '_'))) end++; if (strcmp(varName,"hexagonal") == 0) tube.SetOption_Lattice(ELattice_Hexagonal); else if (strcmp(varName,"cubic") == 0) tube.SetOption_Lattice(ELattice_Cubic); else if (strcmp(varName,"planar") == 0) tube.SetOption_Lattice(ELattice_Planar); else eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); } //////////////////////////// else if (strcmp(varName,"chirality") == 0) { // Chirality parameters (n,m): int tn,tm; int c; *end = saved; varName = end; while ((*varName != '\0') && (!isdigit(*varName))) varName++; c = sscanf(varName,"%u,%u",&tn,&tm); if (c == 1) { tube.Set_nandm(tn,tn); } if (c >= 2) { tube.Set_nandm(tn,tm); } if (c < 1) eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); } //////////////////////////// else if (strcmp(varName,"cell_count") == 0) { // How many cells to generate in each direction: unsigned x,y,z; int c; *end = saved; varName = end; while ((*varName != '\0') && (!isdigit(*varName))) varName++; x = y = z = 0; c = sscanf(varName,"%u,%u,%u",&x,&y,&z); if (c < 1) eprintf(" %@yellow;WARNING%@reset;: Invalid parameter value; variable not reset.\n"); else { if (c >= 1) tube.Set_replication(EDirection_X,x); if (c >= 2) tube.Set_replication(EDirection_Y,y); if (c >= 3) tube.Set_replication(EDirection_Z,z); } } //////////////////////////// else if (strcmp(varName,"relax_tube") == 0) { // Use expansion ratios in rolled cell: *end = saved; varName = end; while ((*varName != '\0') && (!isalpha(*varName))) varName++; end = varName + 1; while ((*end != '\0') && ((isalnum(*end)) || (*end == '_'))) end++; if (strcmp(varName,"yes") == 0) tube.SetOption_RelaxTubule(true); else if (strcmp(varName,"no") == 0) tube.SetOption_RelaxTubule(false); else eprintf(" %@yellow;WARNING%@reset;: Please specify yes or no.\n"); } else eprintf(" %@yellow;WARNING%@reset;: Unknown variable.\n"); } else if (strcmp(command,"generate") == 0) { // Generate a unit cell; if one already exists, we overwrite it: if (theCell) delete theCell; theCell = tube.GenerateCrystalCell(); } else if (strcmp(command,"print") == 0) { if (theCell) theCell->print(cout); else eprintf(" %@red;ERROR%@reset;: No cell generated yet.\n"); } else if (strstr(command,"save") == command) { // Save a unit cell ofstream* file = NULL; char* fName = command + 4; char* end; char saved; if (theCell == NULL) { eprintf(" %@red;ERROR%@reset;: No cell generated yet.\n"); } else { while ((*fName != '\0') && (isspace(*fName))) fName++; if (*fName == '\0') { char filename[32]; int charcnt = 0; switch (tube.GetOption_Lattice()) { case ELattice_Hexagonal: case ELattice_Cubic: charcnt = snprintf(filename,sizeof(filename),"%02d%02dr.",tube.Get_n(),tube.Get_m()); break; case ELattice_Planar: charcnt = snprintf(filename,sizeof(filename),"%02d%02df.",tube.Get_n(),tube.Get_m()); break; default: charcnt = snprintf(filename,sizeof(filename),"tubegen_out."); break; } snprintf(filename + charcnt,sizeof(filename) - charcnt,"%s",tube.FileExtensionsForFormat()); file = new ofstream(filename); } else { end = fName + 1; while ((*end != '\0') && (!isspace(*end))) end++; *end = '\0'; file = new ofstream(fName); } if (file) { tube.WriteInputFile(*file,theCell); delete file; } } } else if (strstr(command,"ftranslate") == command) { // Apply a fractional translation: TVector3D delta; int c; char* varName = command + 9; while ((*varName != '\0') && (!isdigit(*varName)) && (*varName != '-') && (*varName != '.') && (*varName != '+')) varName++; if (theCell) { c = sscanf(varName,"%lg,%lg,%lg",&delta.x,&delta.y,&delta.z); if (c == 3) { if ((delta.x > -1.0) && (delta.x < 1.0) && \ (delta.y > -1.0) && (delta.y < 1.0) && \ (delta.z > -1.0) && (delta.z < 1.0)) theCell->ApplyFractionalTranslation(delta); else eprintf(" %@yellow;WARNING%@reset;: Invalid translation vector; all values must be in (-1,1) in fractional coordinates.\n"); } else eprintf(" %@yellow;WARNING%@reset;: Invalid translation vector; transformation not done.\n"); } else eprintf(" %@red;ERROR%@reset;: No cell generated yet.\n"); } else if (strstr(command,"ctranslate") == command) { // Apply a cartesian translation: TVector3D delta; int c; char* varName = command + 9; while ((*varName != '\0') && (!isdigit(*varName)) && (*varName != '-') && (*varName != '.') && (*varName != '+')) varName++; if (theCell) { c = sscanf(varName,"%lg,%lg,%lg",&delta.x,&delta.y,&delta.z); if (c == 3) { TVector3D ctv = theCell->GetCellTranslationVector(); // If projection of the translation onto the cell translation vector // is -1.0 < p < 1.0 then it's a vector within the proper displacement // bounds: if ( fabs(Vector3D_Dot(&ctv,&delta) / Vector3D_Dot(&ctv,&ctv)) < 1.0) theCell->ApplyCartesianTranslation(delta); else eprintf(" %@yellow;WARNING%@reset;: Invalid Cartesian translation vector.\n"); } else eprintf(" %@yellow;WARNING%@reset;: Invalid Cartesian translation vector.\n"); } else eprintf(" %@red;ERROR%@reset;: No cell generated yet.\n"); } else if (*command != '\0') // Command not understood eprintf(" %@red;ERROR%@reset;: %s\n",command); } return 0; } avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/Constants.h0000755000175000001440000000105312250371054026270 0ustar marcususers//========================================================== // // Constants.h // // A component of the TubeGen program // // Key numerical constants used throughout. // // Created: 26.JAN.2002 // Last Mod: n/a // #ifndef __CONSTANTS__ #define __CONSTANTS__ #define ANGSTROM_PER_BOHR 0.5291772083 #define kStandardCarbonCarbon 1.421 // Chiral padding determined as half the interlayer // spacing of graphite: #define kStandardChiralPadding 1.6735 #endif //__CONSTANTS__ avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/AUTHORS0000644000175000001440000000032212250371054025206 0ustar marcususersTubeGen - Nanotube Generator ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Written by: Dr. Jeffrey Frey Email: frey at udel dot edu University of Delaware, Network & Systems Services Newark, DE 19716 avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/LICENSE.html0000755000175000001440000000665712250371054026132 0ustar marcususers TubeGen - Source Code License
Source Code License
TubeGen - SWCNT Structure Generator

The source code in this package has been supplied to you for the sake of fostering research activity and collaboration. The code is distributed under the BSD licensing scheme so that further enhancement or distribution of the code is not discouraged, so long as the rules of said licensing scheme are followed:

Copyright © 2001-2003, Doren Research Group*, University of Delaware
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the names of the Doren Research Group* or the University of Delaware nor the names of the contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* The Doren Research Group is Dr. Douglas J. Doren and the graduate students/post-doctoral scholars employed by him.

Publication and/or presentation of any data generated by this program should be accompanied by the appropriate citation(s):

TubeGen 3.2, J. T. Frey and D. J. Doren, University of Delaware, Newark DE, 2003.

We hope you enjoy using the program and that it may help with your own research efforts in the future.

License generated 16.Jun.2003 | Updated 13.Jan.2005
avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/Bitmap.h0000644000175000001440000000262012250371054025526 0ustar marcususers// // TubeGen - Single-Wall Carbon Nanotube Generator // // Bitmap // Pseudo-class which maintains what is effectively a minimal-storage // array of boolean values. Written because the native C++ "bitset" // class stinks. // // Created by Jeffrey Frey on Thu Jan 13 2005. // Doren Research Group // University of Delaware // Copyright (c) 2003-2005 // #ifndef __BITMAP__ #define __BITMAP__ // Removed for Avogadro: // #include // // Replaced with: #include #include #ifdef _MSC_VER typedef __int8 int8_t; typedef unsigned __int8 uint8_t; typedef __int16 int16_t; typedef unsigned __int16 uint16_t; typedef __int32 int32_t; typedef unsigned __int32 uint32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #else #include #endif #if defined(__cplusplus) extern "C" { #endif typedef uint8_t Bit; typedef struct _Bitmap* BitmapRef; BitmapRef BitmapCreateWithCapacity(unsigned capacity); void BitmapDestroy(BitmapRef aBitmap); void BitmapSummarizeToStream(FILE* stream,BitmapRef aBitmap); unsigned BitmapGetCapacity(BitmapRef aBitmap); Bit BitmapGetBit(BitmapRef aBitmap,unsigned aBit); void BitmapSetBit(BitmapRef aBitmap,unsigned aBit,Bit value); void BitmapFlipBit(BitmapRef aBitmap,unsigned aBit); unsigned BitmapGetNextBitWithValue(BitmapRef aBitmap,unsigned startAtBit,Bit value); #if defined(__cplusplus) } #endif #endif /* __BITMAP__ */ avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/Core3DMath.h0000755000175000001440000001245612250371054026216 0ustar marcususers/* =============================================================================== // Core3DMath.h �1999-2001, J.T. Frey // =============================================================================== // Written: J.T. Frey, 03/11/2001 // Purpose: Defines a specialized library for three-dimensional // applications and their specialized features. // // Last Mod: n/a */ #ifndef __CORE3DMATH__ #define __CORE3DMATH__ // Removed for Avogadro: // #include // // Replaced with: #include #if defined(__cplusplus) extern "C" { #endif /*! * @struct * TVector3D * @discussion * Cartesian vector in basis {<1,0,0>;<0,1,0>;<0,0,1>} * @field x coefficient to <1,0,0> * @field y coefficient to <0,1,0> * @field z coefficient to <0,0,1> */ typedef struct TVector3D { double x; double y; double z; } TVector3D; /**/ /*! * @struct * TPoint3D * @discussion * Cartesian point, which is merely a special variant of a vector. * @field x displacement along x-axis * @field y displacement along y-axis * @field z displacement along z-axis */ #define TPoint3D TVector3D /**/ /*! * @struct * TXMatrix3D * @discussion * A 4x4 matrix which represents a transformation * in 3-space. We actually don't even use the */ typedef struct TXMatrix { double matrix[16]; } TXMatrix; /**/ /*! * @struct * TQuaternion * @discussion * A 4D vector quantity. The portion of the * quantity can be considered a vector in 3-space * which has been normalized to |sin (theta/2)|. * @field w cos (theta/2) * @field x sin (theta/2) * * @field y sin (theta/2) * <0,ny,0> * @field z sin (theta/2) * <0,0,nz> */ typedef struct TQuaternion { double w; double x; double y; double z; } TQuaternion; /**/ extern const TPoint3D gOrigin; extern const TVector3D gXAxis; extern const TVector3D gYAxis; extern const TVector3D gZAxis; /**/ /* House-keeping ops: */ #define Point3D_Set(P,X,Y,Z) { (P)->x = X ; (P)->y = Y ; (P)->z = Z; } #define Vector3D_Set(V,X,Y,Z) { (V)->x = X ; (V)->y = Y ; (V)->z = Z; } #define Quaternion_Set(Q,W,X,Y,Z) { (Q)->w = W ; (Q)->x = X ; (Q)->y = Y ;(Q)->z = Z; } void Point3D_Zero (TPoint3D*); void Vector3D_Zero (TVector3D*); void Quaternion_Identity (TQuaternion*); void XMatrix_Identity (TXMatrix*); void Point3D_Splat (TPoint3D*,double); void Vector3D_Splat (TVector3D*,double); void Point3D_Rezero (TPoint3D*,double); void Vector3D_Rezero (TVector3D*,double); void Quaternion_Rezero (TQuaternion*,double); void XMatrix_Rezero (TXMatrix*,double); /* Math ops: */ /* 3D V E C T O R */ double Vector3D_Dot (const TVector3D*,const TVector3D*); TVector3D* Vector3D_Cross (const TVector3D*,const TVector3D*,TVector3D*); double Vector3D_Magnitude (const TVector3D*); TVector3D* Vector3D_Normalize (const TVector3D*,TVector3D*); TVector3D* Vector3D_Negate (const TVector3D*,TVector3D*); TVector3D* Vector3D_Scalar (const TVector3D*,double,TVector3D*); TVector3D* Vector3D_Sum (const TVector3D*,const TVector3D*,TVector3D*); TVector3D* Vector3D_ScaledSum (const TVector3D*,double,const TVector3D*,TVector3D*); TVector3D* Vector3D_Diff (const TVector3D*,const TVector3D*,TVector3D*); TVector3D* Vector3D_ScaledDiff (const TVector3D*,double,const TVector3D*,TVector3D*); TVector3D* Vector3D_TransformQuaternion (const TVector3D*,const TQuaternion*,TVector3D*); TVector3D* Vector3D_TransformMatrix (const TVector3D*,const TXMatrix*,TVector3D*); void Vector3D_WriteToStream (const TVector3D*,FILE*); /* 3D P O I N T */ double Point3D_Distance (const TPoint3D*,const TPoint3D*); TPoint3D* Point3D_VectorTransform (const TPoint3D*,const TVector3D*,TPoint3D*); TPoint3D* Point3D_ScaledVectorTransform (const TPoint3D*,double,const TVector3D*,TPoint3D*); TPoint3D* Point3D_TransformQuaternion (const TPoint3D*,const TQuaternion*,TPoint3D*); TPoint3D* Point3D_TransformMatrix (const TPoint3D*,const TXMatrix*,TPoint3D*); void Point3D_WriteToStream (const TPoint3D*,FILE*); /* Q U A T E R N I O N */ TQuaternion* Quaternion_Multiply (const TQuaternion*,const TQuaternion*,TQuaternion*); TQuaternion* Quaternion_Invert (const TQuaternion*,TQuaternion*); void Quaternion_SetRotateAroundXAxis (TQuaternion*,double); void Quaternion_SetRotateAroundYAxis (TQuaternion*,double); void Quaternion_SetRotateAroundZAxis (TQuaternion*,double); void Quaternion_SetRotateAroundAxis (TQuaternion*,const TVector3D*,double); void Quaternion_SetRotateVectorToVector(TQuaternion*,const TVector3D*,const TVector3D*); void Quaternion_WriteToStream (const TQuaternion*,FILE*); /* X M A T R I X */ TXMatrix* XMatrix_Multiply (const TXMatrix*,const TXMatrix*,TXMatrix*); void XMatrix_UniformScaleXMatrix (TXMatrix*,double); void XMatrix_TranslateXMatrix (TXMatrix*,double,double,double); void XMatrix_SetRotateAroundXAxis (TXMatrix*,double); void XMatrix_SetRotateAroundYAxis (TXMatrix*,double); void XMatrix_SetRotateAroundZAxis (TXMatrix*,double); void XMatrix_WriteToStream (const TXMatrix*,FILE*); #if defined(__cplusplus) } #endif #endif avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/tubegen/ANSR.h0000755000175000001440000000750612250371054025070 0ustar marcususers// ============================================================= // ANSR.h �1999-2002, J.T. Frey // ============================================================= // Written: J.T. Frey, 23.FEB.2002 // Purpose: Atomic Number/Symbol Resolution class. // // Last Mod: 05.Feb.2003: Removed all ostream::form calls and moved to purely // C++ stream operators. #ifndef __ANSRDB__ #define __ANSRDB__ // Removed for Avogadro: // #include // // Replaced with: #include #include #include #include #ifdef _MSC_VER typedef __int8 int8_t; typedef unsigned __int8 uint8_t; typedef __int16 int16_t; typedef unsigned __int16 uint16_t; typedef __int32 int32_t; typedef unsigned __int32 uint32_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #else #include #endif using namespace std; // ///////////////////////////////////////////////////////// // TElementSymbol - four-character entity, masquerading // as a simple 32-bit integer! For any symbol/number // that we can't resolve, there's a constant, too: // typedef uint32_t TElementSymbol; #define kANSRInvalidSymbol (TElementSymbol)-1 // ///////////////////////////////////////////////////////// // TElementInfo - data structure which contains an // element's information. // typedef struct TElementInfo { unsigned atomicNumber; TElementSymbol chemSymbol; double weight; } TElementInfo; // ///////////////////////////////////////////////////////// // ANSRDB - Atomic Number/Symbol Resolution Data Base // class ANSRDB { public: ANSRDB(); ANSRDB(const char* filepath); ~ANSRDB(); static ANSRDB* DefaultANSRDB() { // Avogadro edit: This is hardcoded to a non-existant path, and is causing linker issues. // Replaced with another nonexistent path. // extern char* defaultANSRDBPath; char* defaultANSRDBPath = ""; static ANSRDB* defaultANSRDBInstance = NULL; if (!defaultANSRDBInstance) { FILE* fptr; if (fptr = fopen(defaultANSRDBPath,"r")) { fclose(fptr); defaultANSRDBInstance = new ANSRDB(defaultANSRDBPath); if (defaultANSRDBInstance->elementsInTable == 0) { delete defaultANSRDBInstance; defaultANSRDBInstance = NULL; } } if (!defaultANSRDBInstance) defaultANSRDBInstance = new ANSRDB(); } return defaultANSRDBInstance; } static TElementSymbol MakeSymbolFromString(const char* string) { TElementSymbol newSym = 0; unsigned length = strlen(string); if (length) { char* chars = (char*)&newSym; if (length > 3) length = 3; switch (length) { case 3: if (string[2] < 127 && isalpha(string[2])) chars[2] = tolower(string[2]); case 2: if (string[1] < 127 && isalpha(string[1])) chars[1] = tolower(string[1]); case 1: if (string[0] < 127 && isalpha(string[0])) chars[0] = toupper(string[0]); } } return newSym; } TElementSymbol LookupSymbolForNumber(unsigned number); unsigned LookupNumberForSymbol(TElementSymbol symbol); TElementInfo* LookupElementInfoForNumber(unsigned number); TElementInfo* LookupElementInfoForSymbol(TElementSymbol symbol); void print(ostream& os); protected: unsigned elementsInTable; TElementInfo* elements; unsigned* lookupTable; private: int DidInitializeTables(); int DidReadTableFromFile(const char* filepath); }; #endif avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/swcntbuilderextension.cpp0000644000175000001440000001211212250371054027653 0ustar marcususers/********************************************************************** SWCNTBuilderExtension - Build single wall carbon nanotubes Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. **********************************************************************/ #include "swcntbuilderextension.h" #include "swcntbuilderwidget.h" #include "avotubegen.h" #include "../insertcommand.h" #include #include #include #include // for OBUnitCell #include #include #include #include #include using namespace Avogadro; /// @todo Treat AvoTubeGen as a state machine to avoid 6 arg signals namespace SWCNTBuilder { SWCNTBuilderExtension::SWCNTBuilderExtension(QObject *parent) : Extension(parent), m_molecule(NULL), m_widget(NULL), m_thread(new QThread ()), m_tubegen(new AvoTubeGen ()) { // Move the tubegen into the background thread: m_thread->start(); m_tubegen->moveToThread(m_thread); connect(this, SIGNAL(requestBuild(uint,uint,bool,double,bool,bool)), m_tubegen, SLOT(buildCarbonNanotube(uint,uint,bool,double,bool,bool)), Qt::QueuedConnection); this->connect(m_tubegen, SIGNAL(buildFinished()), SLOT(buildFinished()), Qt::QueuedConnection); // Create the action QAction *action = new QAction(this); action->setText(tr("&Nanotube Builder...")); m_actions.append(action); // Create the widget m_widget = new SWCNTBuilderWidget (tr("Nanotube Builder")); m_widget->setAllowedAreas(Qt::TopDockWidgetArea|Qt::BottomDockWidgetArea); m_widget->setPreferredDockWidgetArea(Qt::BottomDockWidgetArea); m_widget->hide(); m_dockWidgets.append(m_widget); this->connect(m_widget, SIGNAL(buildClicked()), SLOT(buildNanotube())); connect(this, SIGNAL(requestBuild(uint,uint,bool,double,bool,bool)), m_widget, SLOT(startBuilding()), Qt::DirectConnection); connect(m_tubegen, SIGNAL(buildFinished()), m_widget, SLOT(endBuilding()), Qt::QueuedConnection); } SWCNTBuilderExtension::~SWCNTBuilderExtension() { m_thread->terminate(); m_thread->wait(); delete m_thread; } QList SWCNTBuilderExtension::actions() const { return m_actions; } QString SWCNTBuilderExtension::menuPath(QAction *) const { return tr("&Build"); } QUndoCommand* SWCNTBuilderExtension::performAction( QAction *, GLWidget *gl) { m_gl = gl; m_widget->show(); return NULL; } void SWCNTBuilderExtension::setMolecule(Avogadro::Molecule *mol) { if (mol == m_molecule) { return; } m_molecule = mol; } void SWCNTBuilderExtension::buildNanotube() { unsigned int n = m_widget->getN(); unsigned int m = m_widget->getM(); if (n < 2 && m < 2) { QMessageBox::critical(NULL, tr("Invalid Nanotube Specification"), tr("The requested nanotube cannot be built " "for the following reason:\n\n" "Either n or m must be greater than 1.")); return; } bool cap = m_widget->getCap(); bool dbonds = m_widget->getDBonds(); // Clean up length units bool generatePeriodicCell = false; double length = m_widget->getLength(); switch (m_widget->getLengthUnit()) { default: qWarning() << "Unrecognized length unit index:" << m_widget->getLengthUnit(); // Generate single, uncapped, periodic unit length = 1.0; generatePeriodicCell = true; break; case SWCNTBuilderWidget::LU_Periodic: generatePeriodicCell = true; break; case SWCNTBuilderWidget::LU_Angstrom: break; case SWCNTBuilderWidget::LU_Bohr: length *= 0.52918; break; case SWCNTBuilderWidget::LU_Picometer: length *= 1e-2; break; case SWCNTBuilderWidget::LU_Nanometer: length *= 1e1; break; } emit requestBuild(n, m, generatePeriodicCell, length, cap, dbonds); } void SWCNTBuilderExtension::buildFinished() { Avogadro::Molecule *nano = m_tubegen->getMolecule(); emit performCommand(new InsertFragmentCommand(m_molecule, *nano, m_gl, tr ("Insert Nanotube"))); m_widget->writeSettings(); if (m_widget->getAutohide()) { m_widget->hide(); } } } Q_EXPORT_PLUGIN2(swcntbuilderextension, SWCNTBuilder::SWCNTBuilderExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/avotubegen.h0000644000175000001440000000357112250371054025026 0ustar marcususers/********************************************************************** AvoTubeGen -- interface between Avogadro and TubeGen Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. **********************************************************************/ #ifndef AVOTUBEGEN_H #define AVOTUBEGEN_H #include namespace Avogadro { class Molecule; } namespace SWCNTBuilder { class AvoTubeGen : public QObject { Q_OBJECT public: explicit AvoTubeGen(QObject *parent = NULL); virtual ~AvoTubeGen(); // This class will not clean up the molecule, be sure to retrieve and // delete it if you build one Avogadro::Molecule * getMolecule() {return m_molecule;} public Q_SLOTS: // length is the number of periodic cell lengths if periodicCell==true. // Otherwise, length is in Angstrom. // dbonds determines whether or not to search for double bonds (slow) void buildCarbonNanotube(unsigned int n, unsigned int m, bool periodicCell, double length, bool cap = true, bool dbonds = false); Q_SIGNALS: void buildFinished(); protected: void addTranslationalUnits(unsigned int num, double maxz); void trimTube(double maxz); void capTube(); void perceiveSingleBonds(); void perceiveDoubleBonds(); Avogadro::Molecule *m_molecule; }; } // end namespace SWCNTBuilder #endif // AVOTUBEGEN_H avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/swcntbuilderwidget.cpp0000644000175000001440000000775012250371054027136 0ustar marcususers/********************************************************************** SWCNTBuilderDialog - Build single wall carbon nanotubes Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. **********************************************************************/ #include "swcntbuilderwidget.h" #include #include #include #include using namespace Avogadro; namespace SWCNTBuilder { SWCNTBuilderWidget::SWCNTBuilderWidget(const QString &title, QWidget *parent, Qt::WindowFlags f ) : DockWidget( title, parent, f ) { ctor(); } SWCNTBuilderWidget::SWCNTBuilderWidget(QWidget *parent, Qt::WindowFlags f) : DockWidget (parent, f) { ctor(); } SWCNTBuilderWidget::~SWCNTBuilderWidget() { this->writeSettings(); } void SWCNTBuilderWidget::ctor() { ui.setupUi(this); this->readSettings(); this->connect(ui.push_build, SIGNAL(clicked()), SIGNAL(buildClicked())); this->connect(ui.push_hide, SIGNAL(clicked()), SLOT(close())); } unsigned int SWCNTBuilderWidget::getN() { return static_cast(ui.spin_n->value()); } unsigned int SWCNTBuilderWidget::getM() { return static_cast(ui.spin_m->value()); } double SWCNTBuilderWidget::getLength() { return ui.spin_length->value(); } SWCNTBuilderWidget::LengthUnit SWCNTBuilderWidget::getLengthUnit() { return static_cast( ui.combo_lengthUnit->currentIndex()); } bool SWCNTBuilderWidget::getCap() { return ui.cb_cap->isChecked(); } bool SWCNTBuilderWidget::getDBonds() { return ui.cb_dbonds->isChecked(); } bool SWCNTBuilderWidget::getAutohide() { return ui.push_autohide->isChecked(); } void SWCNTBuilderWidget::startBuilding() { ui.push_build->setText(tr("Building...")); ui.push_build->setDisabled(true); qApp->setOverrideCursor(Qt::WaitCursor); ui.gb_nm->setDisabled(true); ui.gb_length->setDisabled(true); ui.gb_options->setDisabled(true); } void SWCNTBuilderWidget::endBuilding() { ui.push_build->setText(tr("&Build")); ui.push_build->setEnabled(true); qApp->restoreOverrideCursor(); ui.gb_nm->setEnabled(true); ui.gb_length->setEnabled(true); ui.gb_options->setEnabled(true); } void SWCNTBuilderWidget::writeSettings() { QSettings settings; settings.beginGroup("swcntbuilderextension"); settings.setValue("n", this->getN()); settings.setValue("m", this->getM()); settings.setValue("length", this->getLength()); settings.setValue("lengthUnit", this->getLengthUnit()); settings.setValue("cap", this->getCap()); settings.setValue("dbonds", this->getDBonds()); settings.setValue("autohide", this->getAutohide()); settings.endGroup(); } void SWCNTBuilderWidget::readSettings() { QSettings settings; settings.beginGroup("swcntbuilderextension"); ui.spin_n->setValue(settings.value("n", 0).toInt()); ui.spin_m->setValue(settings.value("m", 4).toInt()); ui.spin_length->setValue(settings.value("length", 1.0).toDouble()); ui.combo_lengthUnit->setCurrentIndex( settings.value("lengthUnit", LU_Periodic).toInt()); ui.cb_cap->setChecked(settings.value("cap", true).toBool()); ui.cb_dbonds->setChecked(settings.value("dbonds", false).toBool()); ui.push_autohide->setChecked(settings.value("autohide", true).toBool()); settings.endGroup(); } } avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/swcntbuilderwidget.h0000644000175000001440000000342712250371054026600 0ustar marcususers/********************************************************************** SWCNTBuilderDialog - Build single wall carbon nanotubes Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. **********************************************************************/ #ifndef SWCNTBUILDERDIALOG_H #define SWCNTBUILDERDIALOG_H #include #include "ui_swcntbuilderwidget.h" namespace SWCNTBuilder { class SWCNTBuilderWidget : public Avogadro::DockWidget { Q_OBJECT public: explicit SWCNTBuilderWidget(const QString &title, QWidget *parent = 0, Qt::WindowFlags f = 0 ); explicit SWCNTBuilderWidget(QWidget *parent = 0, Qt::WindowFlags f = 0 ); virtual ~SWCNTBuilderWidget(); enum LengthUnit { LU_Periodic = 0, LU_Angstrom, LU_Bohr, LU_Nanometer, LU_Picometer }; unsigned int getN(); unsigned int getM(); double getLength(); bool getCap(); bool getDBonds(); bool getAutohide(); LengthUnit getLengthUnit(); public Q_SLOTS: void startBuilding(); void endBuilding(); void writeSettings(); protected Q_SLOTS: void readSettings(); Q_SIGNALS: void buildClicked(); protected: void ctor(); private: Ui::SWCNTBuilderWidget ui; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/CMakeLists.txt0000644000175000001440000000111412250371054025245 0ustar marcususersinclude_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) # Create a list of all source files set(swcntbuilderextension_SRCS ../insertcommand.cpp swcntbuilderextension.cpp swcntbuilderwidget.cpp avotubegen.cpp ) # Create a list of all ui files set(swcntbuilderextension_UIS swcntbuilderwidget.ui ) # Create the extension target swcntbuilderextension avogadro_plugin(swcntbuilderextension "${swcntbuilderextension_SRCS}" "${swcntbuilderextension_UIS}") add_subdirectory(tubegen) target_link_libraries(swcntbuilderextension tubegen) avogadro-1.1.1/libavogadro/src/extensions/swcntbuilder/avotubegen.cpp0000644000175000001440000001561112250371054025357 0ustar marcususers/********************************************************************** AvoTubeGen -- interface between Avogadro and TubeGen Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. **********************************************************************/ #include "avotubegen.h" #include #include #include #include #include #include #include #include #include #include #include #include "tubegen/TubuleBasis.h" #include "tubegen/CrystalCell.h" // Needed for OB macros using OpenBabel::OBMolAtomIter; namespace SWCNTBuilder { AvoTubeGen::AvoTubeGen(QObject *parent) : QObject(parent), m_molecule(NULL) { } AvoTubeGen::~AvoTubeGen() { } void AvoTubeGen::buildCarbonNanotube(unsigned int n, unsigned int m, bool periodicCell, double length, bool cap, bool dbonds) { // Create new molecule m_molecule = new Avogadro::Molecule(); TubuleBasis tube (n, m); CrystalCell *cell = tube.GenerateCrystalCell(); TVector3D tv1 = cell->GetRealBasisVector1(); TVector3D tv2 = cell->GetRealBasisVector2(); TVector3D tv3 = cell->GetRealBasisVector3(); OpenBabel::vector3 v1 (tv1.x, tv1.y, tv1.z); OpenBabel::vector3 v2 (tv2.x, tv2.y, tv2.z); OpenBabel::vector3 v3 (tv3.x, tv3.y, tv3.z); OpenBabel::OBUnitCell *obcell = new OpenBabel::OBUnitCell(); obcell->SetData(v1, v2, v3); m_molecule->setOBUnitCell(obcell); TAtomicCoordinate coord; OpenBabel::vector3 fracCoord, cartCoord; for (unsigned int i = 0; i < cell->GetBasisCount(); ++i) { coord = cell->GetAtomicCoordinate(i); fracCoord.Set( coord.atomPosition.x, coord.atomPosition.y, coord.atomPosition.z); cartCoord = obcell->FractionalToCartesian(fracCoord); Avogadro::Atom *atom = m_molecule->addAtom(); atom->setAtomicNumber(coord.atomicNumber); atom->setPos(Eigen::Vector3d(cartCoord.AsArray())); } // Determine how many periodic images are needed: bool integerPeriodicity = (periodicCell) ? (fabs(length - floor((length * 100.0) + 0.5)/ 100.0) < 1e-2) : false; const unsigned int numTranslations = (periodicCell) ? ((integerPeriodicity) ? static_cast(length + 0.5) : ceil(length)) : ceil(length / v3.z()); // Determine the maximum z value const double maxz = (periodicCell) ? ((integerPeriodicity) ? 0.0 /* no trimming */ : length * v3.z()) : length; // Grow tube as needed if (numTranslations > 1) { this->addTranslationalUnits(numTranslations, maxz); } // If requested length is smaller than a single translational unit, // trim tube to size if (!integerPeriodicity && maxz < v3.z()) { this->trimTube(maxz); } // Remove the lattice (no longer needed for non-periodic tube) if (length != 1 || cap) { m_molecule->setOBUnitCell(NULL); } // Perceive single bonds this->perceiveSingleBonds(); // Cap if needed if (cap) { this->capTube(); } // Perceive double bonds if (dbonds) { this->perceiveDoubleBonds(); } emit buildFinished(); } void AvoTubeGen::addTranslationalUnits(unsigned int num, double maxz) { if (num == 0) { m_molecule->clear(); return; } if (num == 1) { return; } // Do we need to cut off the cell at a custom length? bool usingCutoff = true; if (fabs(maxz) < 1e-2) { usingCutoff = false; } // Fetch the c translation vector Q_ASSERT(m_molecule->OBUnitCell() != NULL); Eigen::Vector3d v3 (m_molecule->OBUnitCell()->GetCellVectors()[2].AsArray()); // Cache current atom list QList atoms = m_molecule->atoms(); // Add atoms Eigen::Vector3d newPos; for (unsigned int i = 1; i < num; ++i) { const Eigen::Vector3d trans = v3 * static_cast(i); for (QList::const_iterator it = atoms.constBegin(), it_end = atoms.constEnd(); it != it_end; ++it) { Avogadro::Atom const *oldAtom = *it; // calculate and check new coordinate newPos = *oldAtom->pos() + trans; if (usingCutoff && newPos.z() > maxz) { continue; } Avogadro::Atom *newAtom = m_molecule->addAtom(); *newAtom = *oldAtom; newAtom->setPos(newPos); } } // Done! return; } void AvoTubeGen::trimTube(double maxz) { QList atoms = m_molecule->atoms(); for (QList::const_iterator it = atoms.constBegin(), it_end = atoms.constEnd(); it != it_end; ++it) { if ((*it)->pos()->z() > maxz) { m_molecule->removeAtom(*it); } } } void AvoTubeGen::capTube() { // Quick bond perception: OpenBabel::OBMol obmol = m_molecule->OBMol(); // Can't modify obmol in the FOR_ATOMS... loop, so cache the unsaturated // atoms here QVector needSaturation; // Add hydrogens to all carbons with < 3 bonds FOR_ATOMS_OF_MOL(obatom, &obmol) { // Only single bonds result from ConnectTheDots int numBonds = obatom->CountBondsOfOrder(1); if (numBonds < 3) { needSaturation.append(&*obatom); } } // Add hydrogens to all in needSaturation for (QVector::const_iterator it = needSaturation.constBegin(), it_end = needSaturation.constEnd(); it != it_end; ++it) { OpenBabel::OBAtom *obatom = *it; // Only single bonds result from ConnectTheDots int numBonds = obatom->CountBondsOfOrder(1); // We know that we are dealing with sp2 hybridized carbons: if (numBonds == 2) { obatom->SetImplicitValence(obatom->GetValence() + 1); obmol.SetImplicitValencePerceived(); obatom->SetHyb(2); obmol.SetHybridizationPerceived(); } else if (numBonds == 1) { obatom->SetImplicitValence(obatom->GetValence() + 2); obmol.SetImplicitValencePerceived(); obatom->SetHyb(2); obmol.SetHybridizationPerceived(); } obmol.AddHydrogens(obatom); } // Update the molecule m_molecule->setOBMol(&obmol); } void AvoTubeGen::perceiveSingleBonds() { OpenBabel::OBMol obmol = m_molecule->OBMol(); obmol.ConnectTheDots(); m_molecule->setOBMol(&obmol); } void AvoTubeGen::perceiveDoubleBonds() { OpenBabel::OBMol obmol = m_molecule->OBMol(); obmol.PerceiveBondOrders(); m_molecule->setOBMol(&obmol); } } // end namespace SWCNTBuilder avogadro-1.1.1/libavogadro/src/extensions/insertfragmentdialog.cpp0000644000175000001440000001610612250371054024723 0ustar marcususers/********************************************************************** InsertFragmentDialog - Inserting fragments using the draw tool Copyright (C) 2008 by Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "insertfragmentdialog.h" #include "sortfiltertreeproxymodel.h" // Defines INSTALL_PREFIX among other things #include "config.h" // krazy:exclude=includes #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; namespace Avogadro { class InsertFragmentPrivate { public: Molecule fragment; OBConversion conv; OBBuilder builder; SortFilterTreeProxyModel *proxy; QFileSystemModel *model; QModelIndex proxyRoot; QString currentFileName; bool crystalFiles; // are we inserting crystals (i.e., don't center) ~InsertFragmentPrivate() { if (model) delete model; } }; InsertFragmentDialog::InsertFragmentDialog(QWidget *parent, QString directory, Qt::WindowFlags) : QDialog(parent) { // Use a small title bar (Qt::Tool) with no minimize or maximize buttons // much like the Periodic Table widget setWindowFlags(Qt::Dialog | Qt::Tool); ui.setupUi(this); d = new InsertFragmentPrivate; d->currentFileName.clear(); //@todo: it would be great to allow multiple directories, but that needs our own directory model QString m_directory; #ifdef Q_WS_X11 m_directory = QString( INSTALL_PREFIX ) + "/share/avogadro/"; #else // Mac and Windows use relative path from application location m_directory = QCoreApplication::applicationDirPath() + "/../share/avogadro/"; #endif m_directory += directory; // fragments or crystals or whatever if ( directory.contains(QLatin1String("crystals")) ) d->crystalFiles = true; else d->crystalFiles = false; QDir dir(m_directory); if (!dir.exists() || !dir.isReadable() ) { qWarning() << "Cannot find the directory: " << m_directory; // Can't really do anything! ui.directoryTreeView->setEnabled(false); ui.insertFragmentButton->setEnabled(false); ui.filterLineEdit->setEnabled(false); ui.clearToolButton->setEnabled(false); return; } d->model = new QFileSystemModel(this); d->model->setReadOnly(true); QModelIndex rootIndex = d->model->setRootPath(m_directory); d->proxy = new SortFilterTreeProxyModel(this); d->proxy->setSourceModel(d->model); d->proxy->setSortLocaleAware(true); // important for files // map from the root path to the proxy index d->proxyRoot = d->proxy->mapFromSource(rootIndex); // Our custom class needs this to prevent becoming rootless d->proxy->setSourceRoot(rootIndex); ui.directoryTreeView->setModel(d->proxy); // remember to map from the source to the proxy index ui.directoryTreeView->setRootIndex(d->proxyRoot); // hide everything but the filename for (int i = 1; i < d->model->columnCount(); ++i) ui.directoryTreeView->hideColumn(i); ui.directoryTreeView->setSelectionMode(QAbstractItemView::SingleSelection); ui.directoryTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); ui.directoryTreeView->setUniformRowHeights(true); connect(ui.insertFragmentButton, SIGNAL(clicked(bool)), this, SLOT(activated())); connect(ui.directoryTreeView, SIGNAL(doubleClicked(const QModelIndex)), this, SLOT(activated())); connect(ui.directoryTreeView, SIGNAL(activated(const QModelIndex)), this, SLOT(activated())); connect(ui.filterLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(filterTextChanged(const QString &))); connect(ui.clearToolButton, SIGNAL(clicked(bool)), this, SLOT(clearFilterText())); } InsertFragmentDialog::~InsertFragmentDialog() { delete d; } const Molecule &InsertFragmentDialog::fragment() { // The selected model index is in the proxy QModelIndexList selected = ui.directoryTreeView->selectionModel()->selectedIndexes(); if (selected.isEmpty()) { d->fragment.clear(); return d->fragment; } // So remember to map to the source model QString fileName = d->model->filePath(d->proxy->mapToSource(selected.first())); if (fileName.isEmpty()) return d->fragment; // shouldn't happen -- return existing fragment if (fileName == d->currentFileName) return d->fragment; // don't re-read the file d->fragment.clear(); // Check if it's a directory QFileInfo fileInfo(fileName); if (fileInfo.isDir()) return d->fragment; // return an empty fragment and do nothing Molecule *mol; if (d->crystalFiles) { // No bonding, at first mol = MoleculeFile::readMolecule(fileName, QString(), QString("b")); } else mol = MoleculeFile::readMolecule(fileName); // After reading, check if it worked if (mol) { d->fragment = *mol; } else { QMessageBox::warning( (QWidget*)this, tr( "Avogadro" ), tr( "Cannot read molecular file %1." ) .arg( fileName ) ); // we'll return an empty fragment, since we just called .clear() } if (!d->crystalFiles) d->fragment.center(); return d->fragment; } void InsertFragmentDialog::refresh() { ui.directoryTreeView->update(); } void InsertFragmentDialog::clearFilterText() { ui.filterLineEdit->setText(""); } void InsertFragmentDialog::filterTextChanged(const QString &newFilter) { if (!d || !d->proxy) return; // no dialog or proxy model to set // Allow things like "ti" to match "Ti" etc. QRegExp reg(newFilter, Qt::CaseInsensitive, QRegExp::WildcardUnix); d->proxy->setFilterRegExp(reg); if (!newFilter.isEmpty()) { // user interface niceness -- show any file match ui.directoryTreeView->expandToDepth(2); } } void InsertFragmentDialog::activated() { emit performInsert(); } } avogadro-1.1.1/libavogadro/src/extensions/trajvideomaker.cpp0000644000175000001440000001433712250371054023526 0ustar marcususers/********************************************************************** TrajVideoMaker - used to generate a video of a trajectory Copyright (C) 2008 by Naomi Fox This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "trajvideomaker.h" #include "povpainter.h" #include #include #include #include #include #include #include #include namespace Avogadro { TrajVideoMaker::TrajVideoMaker(){} TrajVideoMaker::~TrajVideoMaker(){} void TrajVideoMaker::makeVideo(GLWidget *widget, Animation *animation, const QString& workingDirectory, const QString& videoFileName) { QString workDirectory = workingDirectory; if (!workDirectory.endsWith('/')) workDirectory += '/'; // check widget is okay if (!widget) { QMessageBox::warning( NULL, QObject::tr( "Avogadro" ), QObject::tr( "GL widget was not correctly initialized in order to make a video" )); return; } Molecule* molecule = widget->molecule(); // check molecule is okay if (!molecule) { QMessageBox::warning( NULL, QObject::tr( "Avogadro" ), QObject::tr( "GL widget has no molecule" )); return; } double aspectRatio = getAspectRatio(widget); //start the progress dialog QProgressDialog progDialog(QObject::tr("Building video "), QObject::tr("Cancel"), 0, molecule->numConformers()*2); progDialog.setMinimumDuration(1); progDialog.setValue(0); //list of pngfiles for mencoder std::vector pngFiles; for (int i = 0; i < animation->numFrames(); ++i) { QString povFileName = workDirectory + QString::number(i) + ".pov"; animation->setFrame(i); // write the pov file // must be in own scope so object is destroyed and file is closed after // (a design flaw in POVPainterDevice?) POVPainterDevice pd( povFileName, aspectRatio, widget ); progDialog.setValue(2*i); //make the png if ( ! runPovRay(workDirectory, povFileName ) ) { QMessageBox::warning( NULL, QObject::tr( "Avogadro" ), QObject::tr("Could not run povray.")); return; } progDialog.setValue(2*i+1); QString pngFileName = workDirectory + QString::number(i) + ".png"; pngFiles.push_back(pngFileName); if (progDialog.wasCanceled()) { //stop making return; } } //now run mencoder runMencoder(workDirectory, videoFileName, pngFiles.begin(), pngFiles.end()); progDialog.setValue(progDialog.maximum()); //tell user if successful std::ifstream fin(QFile::encodeName(videoFileName)); if(!fin.fail()) { fin.close(); QString successMessage = "Video file " + videoFileName + " written."; QMessageBox::information( NULL, QObject::tr( "Avogadro" ), successMessage); } else { QString failedMessage = QObject::tr("Video file not written."); QMessageBox::warning( NULL, QObject::tr( "Avogadro" ), failedMessage); } } bool TrajVideoMaker::runPovRay(QString directory, QString povFileName) { //executable for povray. -D suppresses the popup image. const QString povrayexe = "povray -D "; QString povRayCommand = "cd " + directory + " && " + povrayexe + ' ' + povFileName; //QMessageBox::warning( NULL, QObject::tr( "Avogadro" ), povRayCommand); int ret = system(povRayCommand.toStdString().c_str()); if (ret) return false; else return true; } template void TrajVideoMaker::runMencoder(QString pngFileDirectory, QString videoFileName, QStringIterator startPngFiles, QStringIterator endPngFiles) { //executable for mencoder const QString mencoderexe = "mencoder -ovc lavc -lavcopts vcodec=mpeg4 -of avi -o "; QString pngString; for (QStringIterator pngIterator = startPngFiles; pngIterator != endPngFiles; ++pngIterator) { pngString += *pngIterator + ','; } //strip off last comma pngString = pngString.left(pngString.length()-1); QString mencoderCommand = "cd " + pngFileDirectory + " && " + mencoderexe + ' ' + videoFileName + " mf://" + pngString ; //QMessageBox::warning( NULL, QObject::tr( "Avogadro" ), mencoderCommand); int ret = system(mencoderCommand.toStdString().c_str()); if (ret) QMessageBox::warning( NULL, QObject::tr( "Avogadro" ), QObject::tr("Could not run mencoder.")); } double TrajVideoMaker::getAspectRatio(GLWidget* widget) { bool ok; int w = widget->width(); int h = widget->height(); double defaultAspectRatio = static_cast(w)/h; double aspectRatio = QInputDialog::getDouble(0, QObject::tr("Set Aspect Ratio"), QObject::tr("The current Avogadro scene is %1x%2 pixels large, " "and therefore has aspect ratio %3.\n" "You may keep this value, for example if you intend to use POV-Ray\n" "to produce an image of %4x1000 pixels, or you may enter any other positive value,\n" "for example 1 if you intend to use POV-Ray to produce a square image, like 1000x1000 pixels.") .arg(w).arg(h).arg(defaultAspectRatio) .arg(static_cast(1000*defaultAspectRatio)), defaultAspectRatio, 0.1, 10, 6, &ok); if (!ok) { aspectRatio = defaultAspectRatio; } return aspectRatio; } } avogadro-1.1.1/libavogadro/src/extensions/wiitrackextension.cpp0000644000175000001440000001737712250371054024300 0ustar marcususers/********************************************************************** WiiTrack - Wiimote head tracking extension Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "wiitrackextension.h" #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { #define toggle_bit(bf,b) \ (bf) = ((bf) & b) \ ? ((bf) & ~(b)) \ : ((bf) | (b)) //cwiid_mesg_callback_t cwiid_callback; /* callback function */ static double WiimoteDot1x; static double WiimoteDot1y; static double WiimoteDot2x; static double WiimoteDot2y; enum WiiTrackExtensionIndex { StartIndex = 0, StopIndex }; WiiTrackExtension::WiiTrackExtension(QObject *parent) : Extension(parent) { QAction *action; action = new QAction(this); action->setText(tr("Connect")); action->setData(StartIndex); m_actions.append(action); action = new QAction(this); action->setText(tr("Disconnect")); action->setData(StopIndex); action->setEnabled(false); m_actions.append(action); m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(redraw())); } WiiTrackExtension::~WiiTrackExtension() { } QList WiiTrackExtension::actions() const { return m_actions; } QString WiiTrackExtension::menuPath(QAction *) const { return tr("E&xtensions") + '>' + tr("&WiiTrack"); } QUndoCommand* WiiTrackExtension::performAction(QAction *action, Molecule *molecule, GLWidget *widget, QTextEdit *) { int i = action->data().toInt(); m_widget = widget; // dispatch to the appropriate method for that wiitrackion command switch (i) { case StartIndex: cwiidConnect(); m_timer->start(50); break; case StopIndex: cwiidDisconnect(); m_timer->stop(); break; default: break; } // WiiTracks are per-view and as such are not saved or undo-able return NULL; } void WiiTrackExtension::cwiidConnect() { bdaddr_t bdaddr; /* bluetooth device address */ bdaddr = *BDADDR_ANY; // connect if (!(m_wiimote = cwiid_connect(&bdaddr, 0))) { qDebug() << "Unable to connect to wiimote"; return; } else { qDebug() << "Connected to wiimote"; m_actions.at(StartIndex)->setEnabled(false); m_actions.at(StopIndex)->setEnabled(true); } // Set the callback function if (cwiid_set_mesg_callback(m_wiimote, cwiid_callback)) { qDebug() << "Unable to set message callback"; cwiidDisconnect(); } // set the report mode unsigned char rpt_mode = 0; toggle_bit(rpt_mode, CWIID_RPT_IR); cwiidSetReportMode(m_wiimote, rpt_mode); // enable messaging if (cwiid_enable(m_wiimote, CWIID_FLAG_MESG_IFC)) { qDebug() << "Error enabling messages"; } m_lastDistance = 0.0; m_lastDot1x = 0.0; m_lastDot1y = 0.0; m_lastDot2x = 0.0; m_lastDot2y = 0.0; } void WiiTrackExtension::cwiidDisconnect() { if (cwiid_disconnect(m_wiimote)) { qDebug << "Error on wiimote disconnect"; return; } else { qDebug() << "Disconnected from wiimote"; m_actions.at(StartIndex)->setEnabled(true); m_actions.at(StopIndex)->setEnabled(false); } } void WiiTrackExtension::cwiidSetReportMode(cwiid_wiimote_t *wiimote, unsigned char rpt_mode) { if (cwiid_command(wiimote, CWIID_CMD_RPT_MODE, rpt_mode)) { qDebug() << "Error setting report mode"; } } void WiiTrackExtension::redraw() { if ((WiimoteDot1x == 0) || (WiimoteDot1y == 0) || (WiimoteDot2x == 0) || (WiimoteDot2y == 0)) return; if (m_lastDot1x == 0.0) { m_lastDot1x = WiimoteDot1x; return; } double angle = 0.003 * (m_lastDot1x - WiimoteDot1x); m_lastDot1x = WiimoteDot1x; if (m_lastDot1y == 0.0) { m_lastDot1y = WiimoteDot1y; return; } double angle2 = 0.003 * (m_lastDot1y - WiimoteDot1y); m_lastDot1y = WiimoteDot1y; Eigen::Vector3d center(0., 0., 0.); double sumOfWeights = 0.; std::vector::iterator i; for ( Atom *atom = static_cast(m_widget->molecule()->BeginAtom(i)); atom; atom = static_cast(m_widget->molecule()->NextAtom(i))) { Eigen::Vector3d transformedAtomPos = m_widget->camera()->modelview() * atom->pos(); double atomDistance = transformedAtomPos.norm(); double dot = transformedAtomPos.z() / atomDistance; double weight = exp(-30. * (1. + dot)); sumOfWeights += weight; center += weight * atom->pos(); } center /= sumOfWeights; Eigen::Vector3d xAxis = m_widget->camera()->backTransformedXAxis(); Eigen::Vector3d yAxis = m_widget->camera()->backTransformedYAxis(); m_widget->camera()->translate(center); m_widget->camera()->rotate(-angle, yAxis); m_widget->camera()->rotate(-angle2, xAxis); m_widget->camera()->translate(-center); // zoom based on distance between dots int deltaX = WiimoteDot2x - WiimoteDot1x; int deltaY = WiimoteDot2y - WiimoteDot1y; Eigen::Vector3d zAxis(0,0,1); double distance = sqrt(deltaX*deltaX + deltaY*deltaY); if (m_lastDistance == 0.0) { m_lastDistance = distance; return; } double delta = 0.1 * (m_lastDistance - distance); m_lastDistance = distance; m_widget->camera()->modelview().pretranslate( - delta * ( CAMERA_NEAR_DISTANCE ) * zAxis ); m_widget->update(); } void WiiTrackExtension::cwiid_callback(cwiid_wiimote_t *wiimote, int mesg_count, union cwiid_mesg mesg[]) { int valid_source = 0; WiimoteDot1x = 0; WiimoteDot1y = 0; WiimoteDot2x = 0; WiimoteDot2y = 0; for (int i = 0; i < mesg_count; i++) { switch (mesg[i].type) { case CWIID_MESG_IR: printf("IR Report: "); for (int j = 0; j < CWIID_IR_SRC_COUNT; j++) { if (mesg[i].ir_mesg.src[j].valid) { valid_source = 1; printf("(%d,%d) ", mesg[i].ir_mesg.src[j].pos[CWIID_X], mesg[i].ir_mesg.src[j].pos[CWIID_Y]); if (j == 0) { WiimoteDot1x = mesg[i].ir_mesg.src[j].pos[CWIID_X]; WiimoteDot1y = mesg[i].ir_mesg.src[j].pos[CWIID_Y]; } else if (j == 1) { WiimoteDot2x = mesg[i].ir_mesg.src[j].pos[CWIID_X]; WiimoteDot2y = mesg[i].ir_mesg.src[j].pos[CWIID_Y]; } } } if (!valid_source) { printf("no sources detected"); } printf('\n'); break; case CWIID_MESG_ERROR: if (cwiid_disconnect(wiimote)) { printf("Error on wiimote disconnect\n"); } break; default: printf("Unknown Report"); break; } } } } // end namespace Avogadro Q_EXPORT_PLUGIN2(wiitrackextension, Avogadro::WiiTrackExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/crystallography/0000755000175000001440000000000012250371054023232 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/crystallography/crystalpastedialog.cpp0000644000175000001440000003171412250371054027642 0ustar marcususers/********************************************************************** CEPasteDialog - Dialog Crystal import Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ /* * @todo add GULP format * @todo add PWscf format * @todo add CASTEP format * @todo add FINDSYM format */ #include "crystalpastedialog.h" #include #include #include namespace Avogadro { CEPasteDialog::CEPasteDialog(QWidget *parent, const QString &text, Molecule *mol) : QDialog(parent), m_molecule(mol), m_text(text), m_format(InvalidFormat), m_numAtomTypes(0) { ui.setupUi(this); refresh(); } bool CEPasteDialog::formatIsValid() { return m_format != InvalidFormat; } void CEPasteDialog::refresh() { switch (guessFormat(m_text)) { case InvalidFormat: default: refreshInvalidFormat(); break; case VaspFormat: refreshVaspFormat(); break; } } void CEPasteDialog::accept() { switch (guessFormat(m_text)) { case InvalidFormat: default: break; case VaspFormat: if (!acceptVaspFormat()) { return; } break; } QDialog::accept(); } CEPasteDialog::CEPFormat CEPasteDialog::guessFormat(const QString &text) { if (m_format) { return m_format; } if (isVaspFormat(text)) { m_format = VaspFormat; return m_format; } else { m_format = InvalidFormat; return m_format; } } bool CEPasteDialog::isVaspFormat(const QString &text) { QStringList lines = text.split("\n"); // Title + scale + 3 vectors + composition + direct/cartesian + (no atoms) if (lines.size() < 7) { return false; } unsigned int lineIndex = 0; const QString *line; QStringList lineList; bool ok; unsigned int numAtoms = 0; // First line is comment line = &lines[lineIndex++]; // Next is a scale factor, single float line = &lines[lineIndex++]; line->toDouble(&ok); if (!ok) { return false; } // Next three lines are cell vectors, three floats for (int vecInd = 0; vecInd < 3; ++vecInd) { line = &lines[lineIndex++]; lineList = line->simplified().split(QRegExp("\\s+|,|;")); if (lineList.size() != 3) { return false; } for (int i = 0; i < 3; ++i) { lineList.at(i).toDouble(&ok); if (!ok) { return false; } } } // Next line is a list of unsigned integers (composition) line = &lines[lineIndex++]; lineList = line->simplified().split(QRegExp("\\s+|,|;")); int numSpecies = lineList.size(); if (numSpecies == 0) { return false; } // Check if the first field is an unsigned int (VASP 4.x) or a char (5.x) bool vaspVersionLessThan5; lineList.first().toUInt(&vaspVersionLessThan5); // If vasp >= 5.x, skip the line containing the atomic symbols. if (!vaspVersionLessThan5) { line = &lines[lineIndex++]; lineList = line->simplified().split(QRegExp("\\s+|,|;")); if (lineList.size() != numSpecies) { return false; } } // Read in the total number of atoms for (QStringList::const_iterator it = lineList.constBegin(), it_end = lineList.constEnd(); it != it_end; ++it) { numAtoms += it->toUInt(&ok); if (!ok) { return false; } } // Next line is a string. First character is important: line = &lines[lineIndex++]; if (line->size() && line->at(0).toLower() == QChar('s')){ // If first letter is s (selective dynamics), skip one more line line = &lines[lineIndex++]; } // Current line is a string, contents not important here // Next [numAtoms] lines are vectors. So long as they're ok, we // have a POSCAR or CONTCAR! for (unsigned int i = 0; i < numAtoms; ++i) { line = &lines[lineIndex++]; lineList = line->simplified().split(QRegExp("\\s+|,|;")); if (lineList.size() != 3) { return false; } for (int i = 0; i < 3; ++i) { lineList.at(i).toDouble(&ok); if (!ok) { return false; } } } return true; } void CEPasteDialog::refreshInvalidFormat() { QMessageBox::critical (this, tr("Cannot Parse Text"), tr("The input is not formatted as one of\n" "the following supported formats:\n\n") + tr("VASP Format\n")); reject(); close(); } void CEPasteDialog::refreshVaspFormat() { const QStringList lines = m_text.split("\n"); Q_ASSERT(lines.size() >= 7); Q_ASSERT_X(lines.at(7).at(0).toLower() != QChar('s') || lines.size() >= 8, Q_FUNC_INFO, "'lines' is too short to be a proper POSCAR."); // Count the number of atom types QString line = lines[5]; QStringList lineList = line.simplified().split(QRegExp("\\s+|,|;")); m_numAtomTypes = lineList.size(); // no atoms? if (m_numAtomTypes == 0) { ui.edit_identities->clear(); ui.edit_text->setText(m_text); return; } // Check if the first field is an unsigned int (VASP 4.x) or a char (5.x) bool vaspVersionLessThan5; lineList.first().toUInt(&vaspVersionLessThan5); // List of atom identifiers, either atomic numbers or symbols QString idents = ""; // If vasp >= 5.x, just extract the composition that is explicitly // specified if (!vaspVersionLessThan5) { idents = line.simplified(); } // For vasp < 5.x, try to guess the composition from the title else { // Try to determine the atom types from the comment line const QString *title = &lines[0]; // Attempt to parse a set of atomic symbols from the title QStringList symbolList = title->split(QRegExp("[0-9|\\s|,|;]+"), QString::SkipEmptyParts); // Look for the first list of m_numAtomTypes consecutive strings // that converts cleanly into atomic numbers: QList atomicNums; for (int i = 0; i < symbolList.size(); ++i) { atomicNums.append(OpenBabel::etab.GetAtomicNum (symbolList.at(i).toStdString().c_str())); } int startInd = -1; for (int i = 0; i < atomicNums.size(); ++i) { bool found = true; for (unsigned int j = 0; j < m_numAtomTypes; ++j) { if (atomicNums.at(i + j) == 0) { found = false; break; } } if (found) { startInd = i; break; } } if (startInd >= 0) { // Found list of consecutive identifiers. Q_ASSERT(startInd + m_numAtomTypes <= static_cast((symbolList.size()))); for (unsigned int i = 0; i < m_numAtomTypes; ++i) { idents += symbolList.at(startInd + i) + " "; } } else { // Did not find. Fill with consecutive integers. for (unsigned int i = 1; i <= m_numAtomTypes; ++i) { idents += QString::number(i) + " "; } } } ui.edit_identities->setText(idents); ui.edit_text->setText(m_text); } bool CEPasteDialog::acceptVaspFormat() { // Validate identities field QStringList idents = ui.edit_identities->text().simplified() .split(QRegExp("\\s+|,|;")); if (static_cast(idents.size()) != m_numAtomTypes) { QMessageBox::critical (this, tr("Bad Compostion"), tr("The identities field must contain the same number of " "space delimited entries as line 6 of the POSCAR.")); return false; } bool ok; QList compAtomicNums; QList compCounts; for (QStringList::const_iterator it = idents.constBegin(), it_end = idents.constEnd(); it != it_end; ++it) { // Attempt to use the string as a uint unsigned int atomicNum = it->toUInt(&ok); // If this doesn't work, try passing the string to OB's translator if (!ok) { atomicNum = OpenBabel::etab.GetAtomicNum(it->toStdString().c_str()); } compAtomicNums.append(atomicNum); } QStringList lines = m_text.split("\n"); unsigned int lineIndex = 0; const QString *line; QStringList lineList; unsigned int numAtoms = 0; QList positions; QList atomicNums; Eigen::Matrix3d cellMatrix; // First line is comment line = &lines[lineIndex++]; // Next is a scale factor, single float line = &lines[lineIndex++]; double scale = line->toDouble(&ok); if (!ok) { return false; } // Next three lines are cell vectors, three floats for (int vecInd = 0; vecInd < 3; ++vecInd) { line = &lines[lineIndex++]; lineList = line->simplified().split(QRegExp("\\s+|,|;")); if (lineList.size() != 3) { return false; } for (int i = 0; i < 3; ++i) { double v = lineList.at(i).toDouble(&ok); if (!ok) { return false; } cellMatrix(vecInd, i) = v * scale; } } // Next line is a list of unsigned integers (composition) line = &lines[lineIndex++]; lineList = line->simplified().split(QRegExp("\\s+|,|;")); // If vasp >= 5.x, this may be a list of atomic symbols. Skip it if so, // since the user should have already specified/verified the composition // in the GUI by this point. if (lineList.isEmpty()) { return false; } bool vaspVersionLessThan5; lineList.first().toUInt(&vaspVersionLessThan5); if (!vaspVersionLessThan5) { line = &lines[lineIndex++]; lineList = line->simplified().split(QRegExp("\\s+|,|;")); } for (QStringList::const_iterator it = lineList.constBegin(), it_end = lineList.constEnd(); it != it_end; ++it) { unsigned int v = it->toUInt(&ok); if (!ok) { return false; } numAtoms += v; compCounts.append(v); } // Next line is a string. First character is important: line = &lines[lineIndex++]; if (line->size() && line->at(0).toLower() == QChar('s')){ // If first letter is s (selective dynamics), skip one more line line = &lines[lineIndex++]; } // Current line is a string. If it starts with K, k, C, or c, // positions are in cartesian units. Otherwise, reciprocal units. bool isCartesian = false; if (line->size() && (line->at(0).toLower() == QChar('k') || line->at(0).toLower() == QChar('c') ) ) { isCartesian = true; } // Next [numAtoms] lines are vectors. So long as they're ok, we // have a POSCAR or CONTCAR! for (unsigned int i = 0; i < numAtoms; ++i) { line = &lines[lineIndex++]; lineList = line->simplified().split(QRegExp("\\s+|,|;")); if (lineList.size() != 3) { return false; } Eigen::Vector3d vec; for (int i = 0; i < 3; ++i) { double v = lineList.at(i).toDouble(&ok); if (!ok) { return false; } vec(i) = v; } positions.append(vec); } // Build list of atomic numbers Q_ASSERT(compAtomicNums.size() == compCounts.size()); for (int i = 0; i < compCounts.size(); ++i) { for (unsigned int j = 0; j < compCounts.at(i); ++j) { atomicNums.append(compAtomicNums.at(i)); } } Q_ASSERT(atomicNums.size() == positions.size()); // Set unit cell QWriteLocker locker (m_molecule->lock()); OpenBabel::OBUnitCell *cell = m_molecule->OBUnitCell(); cell->SetData(Eigen2OB(cellMatrix)); // Convert to cartesian coords if necessary: if (!isCartesian) { for (QList::iterator it = positions.begin(), it_end = positions.end(); it != it_end; ++it) { *it = OB2Eigen(cell->FractionalToCartesian (Eigen2OB(*it))); } } // Remove old atoms QList oldAtoms = m_molecule->atoms(); for (QList::iterator it = oldAtoms.begin(), it_end = oldAtoms.end(); it != it_end; ++it) { m_molecule->removeAtom(*it); } // Add new atoms for (int i = 0; i < positions.size(); ++i) { Atom *atom = m_molecule->addAtom(); atom->setAtomicNumber(atomicNums.at(i)); atom->setPos(positions.at(i)); } return true; } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/crystallographyextension.cpp0000644000175000001440000023656712250371054031145 0ustar marcususers/********************************************************************** crystallographyextension.cpp - Crystal Builder Plugin for Avogadro Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ /** * @todo "Don't work with crystals?" * @todo Display cuts along miller indices (view along MP & new engine) * @todo Merge with existing extensions: supercell builder & unit cell view params * @todo New builder: nanoparticle * @todo Cache list of spacegroups * @todo Select spacegroup name style (HM or Hall) * @todo CEUnitCellParameter::isValid() * @todo Read/Write locks * @todo Find portable method to ensure that the cell matrix widget is 3 lines of text high. */ #include "crystallographyextension.h" #include "avospglib.h" #include "crystalpastedialog.h" #include "ceundo.h" #include "stablecomparison.h" #include "ui/ceabstracteditor.h" #include "ui/cecoordinateeditor.h" #include "ui/cematrixeditor.h" #include "ui/ceparametereditor.h" #include "ui/ceslabbuilder.h" #include "ui/cetranslatewidget.h" #include "ui/ceviewoptionswidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Avogadro { CrystallographyExtension::CrystallographyExtension(QObject *parent) : Extension( parent ), m_mainwindow(0), m_glwidget(0), m_slabBuilder(0), m_translateWidget(0), m_viewOptionsWidget(0), m_molecule(0), m_displayProperties(false), m_latticeProperty(0), m_spacegroupProperty(0), m_volumeProperty(0), m_lengthUnit(Angstrom), m_angleUnit(Degree), m_coordsCartFrac(Cartesian), m_coordsPreserveCartFrac(Fractional), m_matrixCartFrac(Cartesian), m_matrixVectorStyle(RowVectors), m_editorRefreshPending(false) { if (!m_mainwindow) { // HACK: This might have unintended consequences if used in other // applications: Find the QMainWindow that owns this // extension. If none found, leave m_mainwindow 0. QObject *mainwindow = this; while (mainwindow && !qobject_cast(mainwindow)) { mainwindow = qobject_cast(mainwindow->parent()); } m_mainwindow = qobject_cast(mainwindow); } if (!m_mainwindow) { qDebug() << "Disabling the Crystallography editors: No" << "QMainWindow found."; return; } createDockWidgets(); createActions(); QSettings settings; readSettings(settings); refreshActions(); connect(this, SIGNAL(cellChanged()), this, SLOT(repaintMolecule())); // Editor refresh connect(this, SIGNAL(lengthUnitChanged(LengthUnit)), this, SLOT(refreshEditors())); connect(this, SIGNAL(angleUnitChanged(AngleUnit)), this, SLOT(refreshEditors())); connect(this, SIGNAL(coordsCartFracChanged(CartFrac)), this, SLOT(refreshEditors())); connect(this, SIGNAL(coordsPreserveCartFracChanged(CartFrac)), this, SLOT(refreshEditors())); connect(this, SIGNAL(matrixCartFracChanged(CartFrac)), this, SLOT(refreshEditors())); connect(this, SIGNAL(matrixVectorStyleChanged(VectorStyle)), this, SLOT(refreshEditors())); // Properties refresh connect(this, SIGNAL(lengthUnitChanged(LengthUnit)), this, SLOT(refreshProperties())); connect(this, SIGNAL(angleUnitChanged(AngleUnit)), this, SLOT(refreshProperties())); connect(this, SIGNAL(coordsCartFracChanged(CartFrac)), this, SLOT(refreshProperties())); connect(this, SIGNAL(coordsPreserveCartFracChanged(CartFrac)), this, SLOT(refreshProperties())); connect(this, SIGNAL(matrixCartFracChanged(CartFrac)), this, SLOT(refreshProperties())); connect(this, SIGNAL(matrixVectorStyleChanged(VectorStyle)), this, SLOT(refreshProperties())); } CrystallographyExtension::~CrystallographyExtension() { QSettings settings; writeSettings(settings); } QList CrystallographyExtension::actions() const { return m_actions; } QString CrystallographyExtension::menuPath (QAction *action) const { switch (static_cast(action->data().toInt())) { case PerceiveSpacegroupIndex: case SetSpacegroupIndex: case FillUnitCellIndex: case SymmetrizeCrystalIndex: return tr("&Crystallography") + '>' + tr("Space&group"); case PrimitiveReduceIndex: case NiggliReduceIndex: return tr("&Crystallography") + '>' + tr("&Reduce"); case BuildSlabIndex: return tr("&Crystallography") + '>' + tr("&Build"); case ToggleUnitCellIndex: case PasteCrystalIndex: case ToggleUnitCellSepIndex: case ToggleEditorsIndex: case TogglePropertiesIndex: case ToggleGUISepIndex: case WrapAtomsIndex: case TranslateAtomsIndex: case OrientStandardIndex: case ScaleToVolumeIndex: case LooseSepIndex: case SettingsMainSep1Index: return tr("&Crystallography"); case UnitsLengthAngstromIndex: case UnitsLengthBohrIndex: case UnitsLengthNanometerIndex: case UnitsLengthPicometerIndex: return tr("&Crystallography") + '>' + tr("&Settings") + '>' + tr("&Length Unit"); case UnitsAngleDegreeIndex: case UnitsAngleRadianIndex: return tr("&Crystallography") + '>' + tr("&Settings") + '>' + tr("&Angle Unit"); case CoordsCartIndex: case CoordsFracIndex: return tr("&Crystallography") + '>' + tr("&Settings") + '>' + tr("&Coordinate Display"); case CoordsPreserveCartIndex: case CoordsPreserveFracIndex: return tr("&Crystallography") + '>' + tr("&Settings") + '>' + tr("Coordinate &Preservation"); case MatrixCartIndex: case MatrixFracIndex: case MatrixCoordDisplaySep1Index: case MatrixRowVectorsIndex: case MatrixColumnVectorsIndex: return tr("&Crystallography") + '>' + tr("&Settings") + '>' + tr("&Matrix Display"); case ViewOptionsIndex: return tr("&View"); default: qDebug() << "Unknown action..."; return ""; } } void CrystallographyExtension::setMolecule(Molecule *molecule) { if (m_molecule) { m_molecule->disconnect(this); } m_molecule = molecule; refreshActions(); if (!m_molecule || !m_molecule->OBUnitCell()) { hideEditors(); hideProperties(); hideUnitCellAxes(); return; } // Show axes this->showUnitCellAxes(); // Connect molecule connect(m_molecule, SIGNAL(moleculeChanged()), this, SLOT(refreshEditors())); connect(m_molecule, SIGNAL(atomAdded(Atom *)), this, SLOT(refreshEditors())); connect(m_molecule, SIGNAL(atomUpdated(Atom *)), this, SLOT(refreshEditors())); connect(m_molecule, SIGNAL(atomRemoved(Atom *)), this, SLOT(refreshEditors())); refreshEditors(); refreshProperties(); // If it's a PDB file, we won't show these by default if (m_molecule->numResidues() != 0) return; showEditors(); showProperties(); // Reset camera since GLWidget geometry may have changed. GLWidget::current()->camera()->initializeViewPoint(); } void CrystallographyExtension::writeSettings(QSettings &settings) const { settings.beginGroup("crystallographyextension"); settings.beginGroup("settings"); settings.beginGroup("units"); settings.setValue("length", lengthUnit()); settings.setValue("angle", angleUnit()); settings.endGroup(); settings.beginGroup("coords"); settings.setValue("cartFrac", coordsCartFrac()); settings.setValue("preserveCartFrac", coordsPreserveCartFrac()); settings.endGroup(); settings.beginGroup("matrix"); settings.setValue("cartFrac", matrixCartFrac()); settings.setValue("vectorStyle", matrixVectorStyle()); settings.endGroup(); settings.endGroup(); // "settings" settings.endGroup(); // "crystallographyextension" } void CrystallographyExtension::readSettings(QSettings &settings) { settings.beginGroup("crystallographyextension"); settings.beginGroup("settings"); settings.beginGroup("units"); setLengthUnit(static_cast (settings.value("length", Angstrom) .toInt())); setAngleUnit(static_cast (settings.value("angle", Degree).toInt())); settings.endGroup(); settings.beginGroup("coords"); setCoordsCartFrac(static_cast (settings.value("cartFrac", Cartesian) .toInt())); setCoordsPreserveCartFrac(static_cast (settings. value("preserveCartFrac", Fractional).toInt())); settings.endGroup(); settings.beginGroup("matrix"); setMatrixCartFrac(static_cast (settings.value("cartFrac", Cartesian).toInt())); setMatrixVectorStyle(static_cast (settings.value("vectorStyle", RowVectors) .toInt())); settings.endGroup(); settings.endGroup(); // "settings" settings.endGroup(); // "crystallographyextension" refreshActions(); refreshEditors(); } QUndoCommand* CrystallographyExtension::performAction(QAction *action, GLWidget *widget) { if (m_glwidget != widget) { m_glwidget = widget; } switch (static_cast(action->data().toInt())) { case PerceiveSpacegroupIndex: actionPerceiveSpacegroup(); break; case SetSpacegroupIndex: actionSetSpacegroup(); break; case FillUnitCellIndex: actionFillUnitCell(); break; case SymmetrizeCrystalIndex: actionSymmetrizeCrystal(); break; case ToggleUnitCellIndex: actionToggleUnitCell(); break; case PasteCrystalIndex: actionPasteCrystal(); break; case ToggleEditorsIndex: actionToggleEditors(); break; case TogglePropertiesIndex: actionToggleProperties(); break; case WrapAtomsIndex: actionWrapAtoms(); break; case TranslateAtomsIndex: actionTranslateAtoms(); break; case ViewOptionsIndex: actionViewOptions(); break; case OrientStandardIndex: actionOrientStandard(); break; case PrimitiveReduceIndex: actionPrimitiveReduce(); break; case NiggliReduceIndex: actionNiggliReduce(); break; case BuildSlabIndex: actionBuildSlab(); break; case ScaleToVolumeIndex: actionScaleToVolume(); break; case UnitsLengthAngstromIndex: actionUnitsLengthAngstrom(); break; case UnitsLengthBohrIndex: actionUnitsLengthBohr(); break; case UnitsLengthNanometerIndex: actionUnitsLengthNanometer(); break; case UnitsLengthPicometerIndex: actionUnitsLengthPicometer(); break; case UnitsAngleDegreeIndex: actionUnitsAngleDegree(); break; case UnitsAngleRadianIndex: actionUnitsAngleRadian(); break; case CoordsCartIndex: actionCoordsCart(); break; case CoordsFracIndex: actionCoordsFrac(); break; case CoordsPreserveCartIndex: actionCoordsPreserveCart(); break; case CoordsPreserveFracIndex: actionCoordsPreserveFrac(); break; case MatrixCartIndex: actionMatrixCart(); break; case MatrixFracIndex: actionMatrixFrac(); break; case MatrixRowVectorsIndex: actionMatrixRowVectors(); break; case MatrixColumnVectorsIndex: actionMatrixColumnVectors(); break; case SettingsMainSep1Index: case MatrixCoordDisplaySep1Index: qDebug() << "Cannot perform action on a separator..."; return 0; default: return 0; } return 0; } void CrystallographyExtension::pushUndo(QUndoCommand *comm) { GLWidget::current()->undoStack()->push(comm); } void CrystallographyExtension::showEditors() { refreshEditors(); for (QList::const_iterator it = m_editors.constBegin(), it_end = m_editors.constEnd(); it != it_end; ++it) { (*it)->show(); } getAction(ToggleEditorsIndex)->setText(tr("Hide &Editors")); } void CrystallographyExtension::hideEditors() { for (QList::const_iterator it = m_editors.constBegin(), it_end = m_editors.constEnd(); it != it_end; ++it) { (*it)->hide(); } getAction(ToggleEditorsIndex)->setText(tr("Show &Editors")); } void CrystallographyExtension::lockEditors() { // Lock all editors other than the sender for (QList::iterator it = m_editors.begin(), it_end = m_editors.end(); it != it_end; ++it) { if (!(*it)->isLocked() && *it != sender()) { (*it)->lockEditor(); } } } void CrystallographyExtension::unlockEditors() { // Unlock all editors for (QList::iterator it = m_editors.begin(), it_end = m_editors.end(); it != it_end; ++it) { (*it)->unlockEditor(); } } void CrystallographyExtension::refreshEditors() { // Limit refreshes if (!m_editorRefreshPending) { m_editorRefreshPending = true; QTimer::singleShot(100, this, SLOT(refreshEditors_())); } } void CrystallographyExtension::refreshEditors_() { // If the molecule has changed since the single-shot timer was started, we // may need to abort the update if (!m_molecule || !m_molecule->OBUnitCell()) { m_editorRefreshPending = false; return; } // refresh all editors m_editorRefreshPending = false; for (QList::iterator it = m_editors.begin(), it_end = m_editors.end(); it != it_end; ++it) { (*it)->refreshEditor(); } } void CrystallographyExtension::showProperties() { if (m_displayProperties) { return; } m_displayProperties = true; // Create properties if needed if (!m_latticeProperty) m_latticeProperty = new QLabel; if (!m_spacegroupProperty) m_spacegroupProperty = new QLabel; if (!m_volumeProperty) m_volumeProperty = new QLabel; connect(this, SIGNAL(cellChanged()), this, SLOT(refreshProperties())); getAction(TogglePropertiesIndex)->setText (tr("Hide &Property Display")); // Set text refreshProperties(); // Create list to ensure that labels are added consecutively QList list; list.append(m_latticeProperty); list.append(m_spacegroupProperty); list.append(m_volumeProperty); // Add to GLWidget GLWidget::current()->addTextOverlay(list); // Trigger render event if (m_molecule) { m_molecule->update(); } } void CrystallographyExtension::hideProperties() { if (!m_displayProperties) { return; } disconnect(this, SIGNAL(cellChanged()), this, SLOT(refreshProperties())); m_displayProperties = false; getAction(TogglePropertiesIndex)->setText (tr("Show &Property Display")); delete m_latticeProperty; m_latticeProperty = 0; delete m_spacegroupProperty; m_spacegroupProperty = 0; delete m_volumeProperty; m_volumeProperty = 0; // Trigger render event if (m_molecule) { m_molecule->update(); } } void CrystallographyExtension::refreshProperties() { if (!m_displayProperties) { return; } Q_ASSERT_X(m_latticeProperty, Q_FUNC_INFO, "Property labels must be created before " "they can be refreshed"); Q_ASSERT_X(m_spacegroupProperty, Q_FUNC_INFO, "Property labels must be created before " "they can be refreshed"); Q_ASSERT_X(m_volumeProperty, Q_FUNC_INFO, "Property labels must be created before " "they can be refreshed"); OpenBabel::OBUnitCell *cell = currentCell(); // Find spacegroup name QString spacegroup = "Unknown"; if (cell) { const OpenBabel::SpaceGroup *sg; sg = cell->GetSpaceGroup(); if (sg) { spacegroup = QString("%1 (%2)") .arg(sg->GetHMName().c_str()) .arg(sg->GetId()); } } // Build volume unit suffix QString volumeSuffix; switch (lengthUnit()) { case Angstrom: volumeSuffix = " " + CE_ANGSTROM + CE_SUPER_THREE; break; case Bohr: volumeSuffix = " a" + CE_SUB_ZERO + CE_SUPER_THREE; break; case Nanometer: volumeSuffix = " nm" + CE_SUPER_THREE; break; case Picometer: volumeSuffix = " pm" + CE_SUPER_THREE; break; default: volumeSuffix = ""; break; } // update text m_latticeProperty->setText(tr("Lattice Type: %1", "Unit cell lattice") .arg(currentLatticeType())); m_spacegroupProperty->setText (tr("Spacegroup: %1").arg(spacegroup)); m_volumeProperty->setText (tr("Unit cell volume: %L1%2") .arg(currentVolume(), 0, 'f', 5) .arg(volumeSuffix)); // Trigger render event if (m_molecule) { m_molecule->update(); } } void CrystallographyExtension::refreshActions() { // Unit cell toggle: bool hasCell = static_cast(currentCell()); if (hasCell) { getAction(ToggleUnitCellIndex)->setText (tr("Remove &Unit Cell")); } else { getAction(ToggleUnitCellIndex)->setText (tr("Add &Unit Cell")); } // If there is a cell, enable all the actions. Disable them below // if needed, but not before actions are disabled when !hasCell if (hasCell) { for (QList::const_iterator it = m_actions.constBegin(), it_end = m_actions.constEnd(); it != it_end; ++it) { (*it)->setEnabled(true); } } // Editors toggle: bool editorsVisible = false; for (QList::const_iterator it = m_editors.constBegin(), it_end = m_editors.constEnd(); it != it_end; ++it) { if ((*it)->isVisible()) { editorsVisible = true; break; } } if (editorsVisible) { getAction(ToggleEditorsIndex)->setText (tr("Hide &Editors")); } else { getAction(ToggleEditorsIndex)->setText (tr("Show &Editors")); } if (m_displayProperties) { getAction(TogglePropertiesIndex)->setText (tr("Hide &Property Display")); } else { getAction(TogglePropertiesIndex)->setText (tr("Show &Property Display")); } // Settings checkgroups switch (lengthUnit()) { case Angstrom: getAction(UnitsLengthAngstromIndex)->setChecked(true); break; case Bohr: getAction(UnitsLengthBohrIndex)->setChecked(true); break; case Nanometer: getAction(UnitsLengthNanometerIndex)->setChecked(true); break; case Picometer: getAction(UnitsLengthPicometerIndex)->setChecked(true); break; default: break; } switch (angleUnit()) { case Degree: getAction(UnitsAngleDegreeIndex)->setChecked(true); getAction(UnitsAngleRadianIndex)->setChecked(false); break; case Radian: getAction(UnitsAngleDegreeIndex)->setChecked(false); getAction(UnitsAngleRadianIndex)->setChecked(true); break; default: break; } switch (coordsCartFrac()) { case Cartesian: getAction(CoordsCartIndex)->setChecked(true); getAction(CoordsFracIndex)->setChecked(false); break; case Fractional: getAction(CoordsCartIndex)->setChecked(false); getAction(CoordsFracIndex)->setChecked(true); break; default: break; } switch (coordsPreserveCartFrac()) { case Cartesian: getAction(CoordsPreserveCartIndex)->setChecked(true); getAction(CoordsPreserveFracIndex)->setChecked(false); break; case Fractional: getAction(CoordsPreserveCartIndex)->setChecked(false); getAction(CoordsPreserveFracIndex)->setChecked(true); break; default: break; } switch (matrixCartFrac()) { case Cartesian: getAction(MatrixCartIndex)->setChecked(true); getAction(MatrixFracIndex)->setChecked(false); break; case Fractional: getAction(MatrixCartIndex)->setChecked(false); getAction(MatrixFracIndex)->setChecked(true); break; default: break; } switch (matrixVectorStyle()) { case RowVectors: getAction(MatrixRowVectorsIndex)->setChecked(true); getAction(MatrixColumnVectorsIndex)->setChecked(false); break; case ColumnVectors: getAction(MatrixRowVectorsIndex)->setChecked(false); getAction(MatrixColumnVectorsIndex)->setChecked(true); break; default: break; } // If there is not a cell, disable all the actions. Overrides can // be added in this loop. if (!hasCell) { for (QList::const_iterator it = m_actions.constBegin(), it_end = m_actions.constEnd(); it != it_end; ++it) { if ((*it)->data().toInt() == ToggleUnitCellIndex || (*it)->data().toInt() == PasteCrystalIndex) { continue; } (*it)->setEnabled(false); } } } double CrystallographyExtension::convertLength(double length) const { return length * lengthConversionFactor(); } Eigen::Vector3d CrystallographyExtension::convertLength (const Eigen::Vector3d& length) const { return length * lengthConversionFactor(); } Eigen::Matrix3d CrystallographyExtension::convertLength (const Eigen::Matrix3d& length) const { return length * lengthConversionFactor(); } double CrystallographyExtension::convertAngle(double angle) const { return angle * angleConversionFactor(); } // display -> storage double CrystallographyExtension::unconvertLength(double length) const { return length * (1.0 / lengthConversionFactor()); } Eigen::Vector3d CrystallographyExtension::unconvertLength (const Eigen::Vector3d& length) const { return length * (1.0 / lengthConversionFactor()); } Eigen::Matrix3d CrystallographyExtension::unconvertLength (const Eigen::Matrix3d& length) const { return length * (1.0 / lengthConversionFactor()); } double CrystallographyExtension::unconvertAngle(double angle) const { return angle * (1.0 / angleConversionFactor()); } Eigen::Matrix3d CrystallographyExtension::currentCellMatrix() const { if (!currentCell()) { return Eigen::Matrix3d::Zero(); } return convertLength(OB2Eigen(currentCell()->GetCellMatrix())); } Eigen::Matrix3d CrystallographyExtension::currentFractionalMatrix() const { if (!currentCell()) { return Eigen::Matrix3d::Zero(); } return OB2Eigen(currentCell()->GetFractionalMatrix()); } Eigen::Matrix3d CrystallographyExtension::currentCellMatrixInStandardOrientation() const { return rotateCellMatrixToStandardOrientation(currentCellMatrix()); } CEUnitCellParameters CrystallographyExtension::currentCellParameters() const { CEUnitCellParameters params (0.0, 0.0, 0.0, 0.0, 0.0, 0.0); OpenBabel::OBUnitCell *cell = currentCell(); if (!cell) { return params; } params.a = convertLength(cell->GetA()); params.b = convertLength(cell->GetB()); params.c = convertLength(cell->GetC()); params.alpha = convertAngle(cell->GetAlpha()); params.beta = convertAngle(cell->GetBeta()); params.gamma = convertAngle(cell->GetGamma()); return params; } QList CrystallographyExtension::currentCartesianCoords() const { QList result; QList atoms = m_molecule->atoms(); for (QList::const_iterator it = atoms.constBegin(), it_end = atoms.constEnd(); it != it_end; ++it) { result << convertLength(*((*it)->pos())); } return result; } QList CrystallographyExtension::currentFractionalCoords() const { OpenBabel::OBUnitCell *cell = currentCell(); if (!cell) { return QList(); } QList result = currentCartesianCoords(); for (QList::iterator it = result.begin(), it_end = result.end(); it != it_end; ++it) { // Convert cartesian coords back to storage units (*it) = unconvertLength(*it); // Cartesian to fractional units (*it) = OB2Eigen(cell->CartesianToFractional (Eigen2OB((*it)))); } return result; } QList CrystallographyExtension::currentAtomicNumbers() const { QList result; QList atoms = m_molecule->atoms(); for (QList::const_iterator it = atoms.constBegin(), it_end = atoms.constEnd(); it != it_end; ++it) { result << (*it)->atomicNumber(); } return result; } QList CrystallographyExtension::currentAtomicSymbols() const { QList result; QList atoms = m_molecule->atoms(); for (QList::const_iterator it = atoms.constBegin(), it_end = atoms.constEnd(); it != it_end; ++it) { result << OpenBabel::etab.GetSymbol((*it)->atomicNumber()); } return result; } QString CrystallographyExtension::currentLatticeType() const { OpenBabel::OBUnitCell *cell = currentCell(); if (!cell) { return tr("Undefined"); } switch (cell->GetLatticeType()) { default: case OpenBabel::OBUnitCell::Undefined: return tr("Undefined"); case OpenBabel::OBUnitCell::Triclinic: return tr("Triclinic", "Lattice type"); case OpenBabel::OBUnitCell::Monoclinic: return tr("Monoclinic", "Lattice type"); case OpenBabel::OBUnitCell::Orthorhombic: return tr("Orthorhombic", "Lattice type"); case OpenBabel::OBUnitCell::Tetragonal: return tr("Tetragonal", "Lattice type"); case OpenBabel::OBUnitCell::Rhombohedral: return tr("Rhombohedral", "Lattice type"); case OpenBabel::OBUnitCell::Hexagonal: return tr("Hexagonal", "Lattice type"); case OpenBabel::OBUnitCell::Cubic: return tr("Cubic", "Lattice type"); } } double CrystallographyExtension::currentVolume() const { OpenBabel::OBUnitCell *cell = currentCell(); double volume; if (!cell) { volume = 0.0; } else { volume = cell->GetCellVolume(); double factor = lengthConversionFactor(); factor = factor*factor*factor; volume *= factor; } return volume; } void CrystallographyExtension::setCurrentCell (OpenBabel::OBUnitCell *cell) { if (coordsPreserveCartFrac() == Fractional) { cacheFractionalCoordinates(); } m_molecule->setOBUnitCell(cell); if (coordsPreserveCartFrac() == Fractional) { restoreFractionalCoordinates(); } emit cellChanged(); } void CrystallographyExtension::setCurrentCellMatrix (const Eigen::Matrix3d &mat) { Q_ASSERT_X(matrixCartFrac() != Fractional, Q_FUNC_INFO, "Modification of fractional matrix " "is not supported."); OpenBabel::OBUnitCell *cell = currentCell(); if (coordsPreserveCartFrac() == Fractional) { cacheFractionalCoordinates(); } cell->SetData(Eigen2OB(unconvertLength(mat))); if (coordsPreserveCartFrac() == Fractional) { restoreFractionalCoordinates(); } emit cellChanged(); } void CrystallographyExtension::setCurrentCellParameters (const CEUnitCellParameters ¶ms) { OpenBabel::OBUnitCell *cell = currentCell(); if (coordsPreserveCartFrac() == Fractional) { cacheFractionalCoordinates(); } cell->SetData(unconvertLength(params.a), unconvertLength(params.b), unconvertLength(params.c), unconvertAngle(params.alpha), unconvertAngle(params.beta), unconvertAngle(params.gamma)); if (coordsPreserveCartFrac() == Fractional) { restoreFractionalCoordinates(); } emit cellChanged(); } inline void updateMolecule(Avogadro::Molecule *mol, const QList &ids, const QList &coords) { // Remove old atoms QWriteLocker locker (mol->lock()); QList atoms = mol->atoms(); for (QList::iterator it = atoms.begin(), it_end = atoms.end(); it != it_end; ++it) { mol->removeAtom(*it); } // Add new atoms for (int i = 0; i < ids.size(); ++i) { Atom *atom = mol->addAtom(); atom->setAtomicNumber(OpenBabel::etab.GetAtomicNum (ids[i].toStdString().c_str())); atom->setPos(coords[i]); } } void CrystallographyExtension::setCurrentFractionalCoords (const QList &ids, const QList &fcoords) { OpenBabel::OBUnitCell *cell = currentCell(); QList coords; #if QT_VERSION >= 0x040700 coords.reserve(fcoords.size()); #endif for (QList::const_iterator it = fcoords.constBegin(), it_end = fcoords.constEnd(); it != it_end; ++it) { // Convert to storage cartesian coords.append(OB2Eigen(cell->FractionalToCartesian (Eigen2OB(*it)))); } updateMolecule(m_molecule, ids, coords); emit cellChanged(); } void CrystallographyExtension::setCurrentCartesianCoords (const QList &ids, const QList &coords) { Q_ASSERT(ids.size() == coords.size()); QList scoords; #if QT_VERSION >= 0x040700 scoords.reserve(coords.size()); #endif for (QList::const_iterator it = coords.constBegin(), it_end = coords.constEnd(); it != it_end; ++it) { // Convert to storage cartesian scoords.append(unconvertLength(*it)); } updateMolecule(m_molecule, ids, scoords); emit cellChanged(); } void CrystallographyExtension::setCurrentVolume(double volume) { // Get scaling factor double factor = pow(volume/currentVolume(), 1.0/3.0); setCurrentCellMatrix(currentCellMatrix() * factor); } // Adapted from unitcellextension: void CrystallographyExtension::fillUnitCell() { OpenBabel::OBUnitCell *cell = currentCell(); if (!cell) return; const OpenBabel::SpaceGroup *sg = cell->GetSpaceGroup(); if (!sg) return; // nothing to do wrapAtomsToCell(); QList origFCoords = currentFractionalCoords(); QList newFCoords; QList origIds = currentAtomicSymbols(); QList newIds; // Duplicate tolerance squared const double tolerance = 1e-6; const double dupTolSquared = 1e-12; // 1e-6 ^2 // Non-fatal assert -- if the number of atoms has // changed, just tail-recurse and try again. if (origIds.size() != origFCoords.size()) { return fillUnitCell(); } const QString *curId; const Eigen::Vector3d *curVec; std::list obxformed; std::list::const_iterator obxit; std::list::const_iterator obxit_end; QList xformed; QList::const_iterator xit, xit_end; QList::const_iterator newit, newit_end; for (int i = 0; i < origIds.size(); ++i) { curId = &origIds[i]; curVec = &origFCoords[i]; // Round off to remove floating point math errors double x = StableComp::round(curVec->x(), 7); double y = StableComp::round(curVec->y(), 7); double z = StableComp::round(curVec->z(), 7); // Get tranformed OB vectors obxformed = sg->Transform(OpenBabel::vector3(x,y,z)); // Convert to Eigen, wrap to cell xformed.clear(); Eigen::Vector3d tmp; obxit_end = obxformed.end(); for (obxit = obxformed.begin(); obxit != obxit_end; ++obxit) { tmp = OB2Eigen(*obxit); // Pseudo-modulus tmp.x() -= static_cast(tmp.x()); tmp.y() -= static_cast(tmp.y()); tmp.z() -= static_cast(tmp.z()); // Correct negative values if (tmp.x() < 0.0) ++tmp.x(); if (tmp.y() < 0.0) ++tmp.y(); if (tmp.z() < 0.0) ++tmp.z(); // Add a fudge factor for cell edges if (tmp.x() >= 1.0 - tolerance) tmp.x() = 0.0; if (tmp.y() >= 1.0 - tolerance) tmp.y() = 0.0; if (tmp.z() >= 1.0 - tolerance) tmp.z() = 0.0; xformed.append(tmp); } // Check all xformed vectors against the coords // already added. if they match, skip this atom. bool duplicate; xit_end = xformed.constEnd(); for (xit = xformed.constBegin(); xit != xit_end; ++xit) { newit_end = newFCoords.constEnd(); duplicate = false; for (newit = newFCoords.constBegin(); newit != newit_end; ++newit) { if (fabs((*newit - *xit).squaredNorm()) < dupTolSquared) { duplicate = true; break; } } if (duplicate) { continue; } // Add transformed atom newFCoords.append(*xit); newIds.append(*curId); } } setCurrentFractionalCoords(newIds, newFCoords); } void CrystallographyExtension::wrapAtomsToCell() { QList fcoords = currentFractionalCoords(); for (QList::iterator it = fcoords.begin(), it_end = fcoords.end(); it != it_end; ++it) { // Pseudo-modulus it->x() -= static_cast(it->x()); it->y() -= static_cast(it->y()); it->z() -= static_cast(it->z()); // Correct negative values if (it->x() < 0) ++(it->x()); if (it->y() < 0) ++(it->y()); if (it->z() < 0) ++(it->z()); // Add a fudge factor for cell edges if (it->x() >= 1.0 - 1e-6) it->x() = 0.0; if (it->y() >= 1.0 - 1e-6) it->y() = 0.0; if (it->z() >= 1.0 - 1e-6) it->z() = 0.0; } setCurrentFractionalCoords(currentAtomicSymbols(), fcoords); } // This function will rotate the input cell matrix so that v1 is along the // x-axis, and v2 is in the xy-plane. It does not use trig functions or // the cell parameters, since such implementations are fragile and cannot // distinguish when a "negative" cell angles. The derivation of this // algorithm can be found at // http://xtalopt.openmolecules.net/misc/rotateToStdOrientation.pdf Eigen::Matrix3d CrystallographyExtension::rotateCellMatrixToStandardOrientation (const Eigen::Matrix3d &origRowMat) const { // Extract vector components: const double &x1 = origRowMat(0,0); const double &y1 = origRowMat(0,1); const double &z1 = origRowMat(0,2); const double &x2 = origRowMat(1,0); const double &y2 = origRowMat(1,1); const double &z2 = origRowMat(1,2); const double &x3 = origRowMat(2,0); const double &y3 = origRowMat(2,1); const double &z3 = origRowMat(2,2); // Cache some frequently used values: // Length of v1 const double L1 = sqrt(x1*x1 + y1*y1 + z1*z1); // Squared norm of v1's yz projection const double sqrdnorm1yz = y1*y1 + z1*z1; // Squared norm of v2's yz projection const double sqrdnorm2yz = y2*y2 + z2*z2; // Determinant of v1 and v2's projections in yz plane const double detv1v2yz = y2*z1 - y1*z2; // Scalar product of v1 and v2's projections in yz plane const double dotv1v2yz = y1*y2 + z1*z2; // Used for denominators, since we want to check that they are // sufficiently far from 0 to keep things reasonable: double denom; const double DENOM_TOL = 1e-5; // Create target matrix, fill with zeros Eigen::Matrix3d newMat (Eigen::Matrix3d::Zero()); // Set components of new v1: newMat(0,0) = L1; // Set components of new v2: denom = L1; if (fabs(denom) < DENOM_TOL) { return Eigen::Matrix3d::Zero(); }; newMat(1,0) = (x1*x2 + y1*y2 + z1*z2) / denom; newMat(1,1) = sqrt(x2*x2 * sqrdnorm1yz + detv1v2yz*detv1v2yz - 2*x1*x2*dotv1v2yz + x1*x1*sqrdnorm2yz) / denom; // Set components of new v3 // denom is still L1 Q_ASSERT(denom == L1); newMat(2,0) = (x1*x3 + y1*y3 + z1*z3) / denom; denom = L1*L1 * newMat(1,1); if (fabs(denom) < DENOM_TOL) { return Eigen::Matrix3d::Zero(); }; newMat(2,1) = (x1*x1*(y2*y3 + z2*z3) + x2*(x3*sqrdnorm1yz - x1*(y1*y3 + z1*z3) ) + detv1v2yz*(y3*z1 - y1*z3) - x1*x3*dotv1v2yz) / denom; denom = L1 * newMat(1,1); if (fabs(denom) < DENOM_TOL) { return Eigen::Matrix3d::Zero(); }; // Numerator is determinant of original cell: newMat(2,2) = origRowMat.determinant() / denom; return newMat; } void CrystallographyExtension::buildSuperCell(const unsigned int v1, const unsigned int v2, const unsigned int v3) { // Duplicates the entire unit cell the number of times specified // Code adapted from supercellextension // Code works in Cartesians, so we need to preserve cartesians for a while CartFrac existingPreserveCartFrac = m_coordsPreserveCartFrac; m_coordsPreserveCartFrac = Cartesian; // Get the current cell matrix Eigen::Matrix3d cellMatrix (unconvertLength(currentCellMatrix()).transpose()); const Eigen::Vector3d u1 (cellMatrix.col(0)); const Eigen::Vector3d u2 (cellMatrix.col(1)); const Eigen::Vector3d u3 (cellMatrix.col(2)); Eigen::Vector3d displacement; m_molecule->blockSignals(true); const QList orig = m_molecule->atoms(); for (unsigned int a = 0; a < v1; ++a) { for (unsigned int b = 0; b < v2; ++b) { for (unsigned int c = 0; c < v3; ++c) { // Do not copy the unit cell onto itself if (a == 0 && b == 0 && c == 0) continue; // Find the displacement vector for this new replica displacement = static_cast(a) * u1 + static_cast(b) * u2 + static_cast(c) * u3; foreach(const Atom *atom, orig) { Atom *newAtom = m_molecule->addAtom(); *newAtom = *atom; newAtom->setPos((*atom->pos())+displacement); } } // Make sure to return to the event loop // or a big build can make the user think we've crashed QCoreApplication::processEvents(); } } // end of for loops m_molecule->blockSignals(false); m_molecule->updateMolecule(); // Update the length of the unit cell cellMatrix.col(0) = Eigen::Vector3d(v1 * u1); cellMatrix.col(1) = Eigen::Vector3d(v2 * u2); cellMatrix.col(2) = Eigen::Vector3d(v3 * u3); setCurrentCellMatrix(convertLength(Eigen::Matrix3d(cellMatrix.transpose()))); m_coordsPreserveCartFrac = existingPreserveCartFrac; // we might have been preserving fractional m_molecule->update(); } void CrystallographyExtension::rebuildBonds() { m_molecule->blockSignals(true); // Remove any bonds foreach(Bond *b, m_molecule->bonds()) m_molecule->removeBond(b); // Migrated from supercellextension // Add single bonds between all atoms closer than their combined atomic // covalent radii. std::vector rad; NeighborList nbrs(m_molecule, 2.5); // 2.5 is the maximum covalent radius expected // Store the covalent radius for each atom rad.reserve(m_molecule->numAtoms()); foreach (Atom *atom, m_molecule->atoms()) rad.push_back(OpenBabel::etab.GetCovalentRad(atom->atomicNumber())); foreach (Atom *atom1, m_molecule->atoms()) { foreach (Atom *atom2, nbrs.nbrs(atom1)) { if (m_molecule->bond(atom1, atom2)) continue; if (atom1->isHydrogen() && atom2->isHydrogen()) continue; // bonded if closer than elemental Rcov + tolerance double cutoff = (rad[atom1->index()] + rad[atom2->index()] + 0.45) * (rad[atom1->index()] + rad[atom2->index()] + 0.45); double d2 = ((*atom1->pos()) - (*atom2->pos())).squaredNorm(); // If atoms are closer than 0.4, we declare them as non-bonded (e.g., disorder) if (d2 > cutoff || d2 < 0.40) continue; Bond *bond = m_molecule->addBond(); bond->setAtoms(atom1->id(), atom2->id(), 1); } } m_molecule->blockSignals(false); m_molecule->updateMolecule(); } void CrystallographyExtension::orientStandard() { setCurrentCellMatrix(currentCellMatrixInStandardOrientation()); } void CrystallographyExtension::showPasteDialog(const QString &text) { // Create cell if none exists. bool hasCell = static_cast(currentCell()); if (!hasCell) { actionToggleUnitCell(); ///@todo remove extra undo from this } CEUndoState before (this); // Dialog will handle changing m_molecule as needed. CEPasteDialog d (m_mainwindow, text, m_molecule); if (!d.formatIsValid()) { // Error message has already informed user of error, so we can // just return now. // Skip undo, remove unit cell if we had to add one. if (!hasCell) { actionToggleUnitCell(); } return; } if (d.exec() != QDialog::Accepted) { // Skip undo, remove unit cell if we had to add one. if (!hasCell) { actionToggleUnitCell(); } return; } CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Paste Crystal"))); emit cellChanged(); } /// @todo Expose this to the GUI, might be useful at some point. Add /// a plot widget for extra fancy-ness. /// /// @todo Clean this up, it has some performance issues. void getIADHistogram(Molecule *mol, OpenBabel::OBUnitCell *cell, QList * distance, QList * frequency, double min, double max, double step, Atom *atom = 0) { Q_ASSERT(min < max); Q_ASSERT(step > 0); double halfstep = step/2.0; // Populate distance list distance->clear(); frequency->clear(); for (double val = min; val < max; val += step) { distance->append(val); frequency->append(0); } QList atomList = mol->atoms(); int numAtoms = atomList.size(); if (!numAtoms) { return; } QList atomPositions; for (int i = 0; i < numAtoms; i++) atomPositions.push_back(*(atomList.at(i)->pos())); // Initialize vars // Atomic Positions Eigen::Vector3d v1; Eigen::Vector3d v2; // Unit Cell Vectors // First get OB matrix, extract vectors, then convert to Eigen::Vector3d's Eigen::Matrix3d cellMatrix = OB2Eigen(cell->GetCellMatrix()); Eigen::Vector3d u1 (cellMatrix.row(0)); Eigen::Vector3d u2 (cellMatrix.row(1)); Eigen::Vector3d u3 (cellMatrix.row(2)); // Find all combinations of unit cell vectors to get 3x3 cell QList uVecs; int s_1, s_2, s_3; // will be -1, 0, +1 multipliers for (s_1 = -1; s_1 <= 1; s_1++) { for (s_2 = -1; s_2 <= 1; s_2++) { for (s_3 = -1; s_3 <= 1; s_3++) { uVecs.append(s_1*u1 + s_2*u2 + s_3*u3); } } } // build histogram double diff; // Loop over all atoms if (atom == 0) { for (int i = 0; i < atomList.size(); i++) { v1 = atomPositions.at(i); for (int j = i+1; j < atomList.size(); j++) { v2 = atomPositions.at(j); // Intercell diff = fabs((v1-v2).norm()); for (int k = 0; k < distance->size(); k++) { if (fabs(diff - distance->at(k)) < halfstep) { (*frequency)[k]++; } } // Intracell for (int vecInd = 0; vecInd < uVecs.size(); vecInd++) { diff = fabs(((v1+uVecs.at(vecInd))-v2).norm()); for (int k = 0; k < distance->size(); k++) { if (fabs(diff - distance->at(k)) < halfstep) { (*frequency)[k]++; } } } } } } // Or, just the one requested else { v1 = *atom->pos(); for (int j = 0; j < atomList.size(); j++) { v2 = atomPositions.at(j); // Intercell diff = fabs((v1-v2).norm()); for (int k = 0; k < distance->size(); k++) { if (diff != 0 && fabs(diff - distance->at(k)) < halfstep) { (*frequency)[k]++; } } // Intracell for (int vecInd = 0; vecInd < uVecs.size(); vecInd++) { diff = fabs(((v1+uVecs.at(vecInd))-v2).norm()); for (int k = 0; k < distance->size(); k++) { if (fabs(diff - distance->at(k)) < halfstep) { (*frequency)[k]++; } } } } } return; } // Implements the niggli reduction algorithm detailed in: // Grosse-Kunstleve RW, Sauter NK, Adams PD. Numerically stable // algorithms for the computation of reduced unit cells. Acta // Crystallographica Section A Foundations of // Crystallography. 2003;60(1):1-6. bool CrystallographyExtension::niggliReduce() { // Set maximum number of iterations const unsigned int iterations = 1000; // Get current unit cell OpenBabel::OBUnitCell *cell = currentCell(); // Cache the current fractional coordinates for later. QList fcoords = currentFractionalCoords(); // Get cell parameters in storage units, convert deg->rad double a = cell->GetA(); double b = cell->GetB(); double c = cell->GetC(); double alpha = cell->GetAlpha() * DEG_TO_RAD; double beta = cell->GetBeta() * DEG_TO_RAD; double gamma = cell->GetGamma() * DEG_TO_RAD; // Compute characteristic (step 0) double A = a*a; double B = b*b; double C = c*c; double xi = 2*b*c*cos(alpha); double eta = 2*a*c*cos(beta); double zeta = 2*a*b*cos(gamma); // Return value bool ret = false; // comparison tolerance double tol = STABLE_COMP_TOL * pow(a * b * c, 1.0/3.0); // Initialize change of basis matrices: // // Although the reduction algorithm produces quantities directly // relatible to a,b,c,alpha,beta,gamma, we will calculate a change // of basis matrix to use instead, and discard A, B, C, xi, eta, // zeta. By multiplying the change of basis matrix against the // current cell matrix, we avoid the problem of handling the // orientation matrix already present in the cell. The inverse of // this matrix can also be used later to convert the atomic // positions. // tmpMat is used to build other matrices Eigen::Matrix3d tmpMat; // Cache static matrices: // Swap x,y (Used in Step 1). Negatives ensure proper sign of final // determinant. tmpMat << 0,-1,0, -1,0,0, 0,0,-1; const Eigen::Matrix3d C1(tmpMat); // Swap y,z (Used in Step 2). Negatives ensure proper sign of final // determinant tmpMat << -1,0,0, 0,0,-1, 0,-1,0; const Eigen::Matrix3d C2(tmpMat); // For step 8: tmpMat << 1,0,1, 0,1,1, 0,0,1; const Eigen::Matrix3d C8(tmpMat); // initial change of basis matrix tmpMat << 1,0,0, 0,1,0, 0,0,1; Eigen::Matrix3d cob(tmpMat); // Enable debugging output here: //#define NIGGLI_DEBUG(step) qDebug() << iter << step << A << B << C << xi << eta << zeta; #define NIGGLI_DEBUG(step) unsigned int iter; for (iter = 0; iter < iterations; ++iter) { // Step 1: if ( StableComp::gt(A, B, tol) || ( StableComp::eq(A, B, tol) && StableComp::gt(fabs(xi), fabs(eta), tol) ) ) { cob *= C1; qSwap(A, B); qSwap(xi, eta); NIGGLI_DEBUG(1); } // Step 2: if ( StableComp::gt(B, C, tol) || ( StableComp::eq(B, C, tol) && StableComp::gt(fabs(eta), fabs(zeta), tol) ) ) { cob *= C2; qSwap(B, C); qSwap(eta, zeta); NIGGLI_DEBUG(2); continue; } // Step 3: // Use exact comparisons in steps 3 and 4. if (xi*eta*zeta > 0) { // Update change of basis matrix: tmpMat << StableComp::sign(xi),0,0, 0,StableComp::sign(eta),0, 0,0,StableComp::sign(zeta); cob *= tmpMat; // Update characteristic xi = fabs(xi); eta = fabs(eta); zeta = fabs(zeta); NIGGLI_DEBUG(3); ++iter; } // Step 4: // Use exact comparisons for steps 3 and 4 else { // either step 3 or 4 should run // Update change of basis matrix: double *p = NULL; double i = 1; double j = 1; double k = 1; if (xi > 0) { i = -1; } else if (!(xi < 0)) { p = &i; } if (eta > 0) { j = -1; } else if (!(eta < 0)) { p = &j; } if (zeta > 0) { k = -1; } else if (!(zeta < 0)) { p = &k; } if (i*j*k < 0) { if (!p) { QMessageBox::warning (m_mainwindow, CE_DIALOG_TITLE, tr("Niggli-reduction failed. The input structure's " "lattice that is confusing the Niggli-reduction " "algorithm. Try making a small perturbation (approx." " 2 orders of magnitude smaller than the tolerance) " "to the input lattices and try again.")); return false; } *p = -1; } tmpMat << i,0,0, 0,j,0, 0,0,k; cob *= tmpMat; // Update characteristic xi = -fabs(xi); eta = -fabs(eta); zeta = -fabs(zeta); NIGGLI_DEBUG(4); ++iter; } // Step 5: if (StableComp::gt(fabs(xi), B, tol) || (StableComp::eq(xi, B, tol) && StableComp::lt(2*eta, zeta, tol) ) || (StableComp::eq(xi, -B, tol) && StableComp::lt(zeta, 0, tol) ) ) { double signXi = StableComp::sign(xi); // Update change of basis matrix: tmpMat << 1,0,0, 0,1,-signXi, 0,0,1; cob *= tmpMat; // Update characteristic C = B + C - xi*signXi; eta = eta - zeta*signXi; xi = xi - 2*B*signXi; NIGGLI_DEBUG(5); continue; } // Step 6: if (StableComp::gt(fabs(eta), A, tol) || (StableComp::eq(eta, A, tol) && StableComp::lt(2*xi, zeta, tol) ) || (StableComp::eq(eta, -A, tol) && StableComp::lt(zeta, 0, tol) ) ) { double signEta = StableComp::sign(eta); // Update change of basis matrix: tmpMat << 1,0,-signEta, 0,1,0, 0,0,1; cob *= tmpMat; // Update characteristic C = A + C - eta*signEta; xi = xi - zeta*signEta; eta = eta - 2*A*signEta; NIGGLI_DEBUG(6); continue; } // Step 7: if (StableComp::gt(fabs(zeta), A, tol) || (StableComp::eq(zeta, A, tol) && StableComp::lt(2*xi, eta, tol) ) || (StableComp::eq(zeta, -A, tol) && StableComp::lt(eta, 0, tol) ) ) { double signZeta = StableComp::sign(zeta); // Update change of basis matrix: tmpMat << 1,-signZeta,0, 0,1,0, 0,0,1; cob *= tmpMat; // Update characteristic B = A + B - zeta*signZeta; xi = xi - eta*signZeta; zeta = zeta - 2*A*signZeta; NIGGLI_DEBUG(7); continue; } // Step 8: double sumAllButC = A + B + xi + eta + zeta; if (StableComp::lt(sumAllButC, 0, tol) || (StableComp::eq(sumAllButC, 0, tol) && StableComp::gt(2*(A+eta)+zeta, 0, tol) ) ) { // Update change of basis matrix: cob *= C8; // Update characteristic C = sumAllButC + C; xi = 2*B + xi + zeta; eta = 2*A + eta + zeta; NIGGLI_DEBUG(8); continue; } // Done! ret = true; break; } // No change if (iter == 0) { QMessageBox::information (m_mainwindow, CE_DIALOG_TITLE, tr("This unit cell is already reduced to " "its canonical Niggli representation.")); return false; } if (!ret) { QMessageBox::warning (m_mainwindow, CE_DIALOG_TITLE, tr("Failed to reduce cell after 1000 iterations of " "the reduction algorithm. Stopping.")); return false; } Q_ASSERT_X(cob.determinant() == 1, Q_FUNC_INFO, "Determinant of change of basis matrix must be 1."); // Update cell setCurrentCellMatrix(cob.transpose() * currentCellMatrix()); // fix coordinates // Apply COB matrix: Eigen::Matrix3d invCob; cob.computeInverse(&invCob); for (QList::iterator it = fcoords.begin(), it_end = fcoords.end(); it != it_end; ++it) { *it = invCob * (*it); } setCurrentFractionalCoords(currentAtomicSymbols(), fcoords); // wrap: wrapAtomsToCell(); orientStandard(); return true; } void CrystallographyExtension::showUnitCellAxes() { GLWidget *currentGL = (m_glwidget != NULL) ? m_glwidget : GLWidget::current(); if (currentGL == NULL) return; QSettings settings; QColor cellColor; settings.beginGroup("crystallographyextension/settings/cellColor"); cellColor.setRedF( settings.value("r", 1.0).toFloat()); cellColor.setGreenF(settings.value("g", 1.0).toFloat()); cellColor.setBlueF( settings.value("b", 1.0).toFloat()); cellColor.setAlphaF(settings.value("a", 0.7).toFloat()); settings.endGroup(); currentGL->setUnitCellColor(cellColor); currentGL->setRenderUnitCellAxes(true); } void CrystallographyExtension::hideUnitCellAxes() { GLWidget *currentGL = (m_glwidget != NULL) ? m_glwidget : GLWidget::current(); if (currentGL == NULL) return; currentGL->setRenderUnitCellAxes(false); } void CrystallographyExtension::createActions() { #define CE_CACTION_ASSERT(index) \ Q_ASSERT(m_actions.size()-1 == index); \ Q_ASSERT(index == counter); #define CE_CACTION_DEBUG(index) /* #define CE_CACTION_DEBUG(index) \ qDebug() << "Ind:" << m_actions.size()-1 \ << "Enum:" << index \ << "Counter:" << counter; */ // Create in order of ActionIndex enum: QAction *a; QActionGroup *ag; // This is used to set the QAction data. It is the action's index // into m_actions and ActionIndex unsigned int counter = static_cast(-1); // ToggleUnitCellIndex a = new QAction(tr("Add &Unit Cell"), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(ToggleUnitCellIndex); CE_CACTION_ASSERT(ToggleUnitCellIndex); // PasteCrystalIndex a = new QAction(tr("I&mport Crystal from Clipboard..."), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(PasteCrystalIndex); CE_CACTION_ASSERT(PasteCrystalIndex); // ToggleUnitCellSepIndex a = new QAction(this); a->setSeparator(true); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(ToggleUnitCellSepIndex); CE_CACTION_ASSERT(ToggleUnitCellSepIndex); // ToggleEditorsIndex a = new QAction(tr("Show &Editors"), this); a->setData(++counter); /// @todo figure out a shortcut key for this m_actions.append(a); CE_CACTION_DEBUG(ToggleEditorsIndex); CE_CACTION_ASSERT(ToggleEditorsIndex); // TogglePropertiesIndex a = new QAction(tr("Show &Property Display"), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(TogglePropertiesIndex); CE_CACTION_ASSERT(TogglePropertiesIndex); // ToggleGUISepIndex a = new QAction(this); a->setSeparator(true); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(ToggleGUISepIndex); CE_CACTION_ASSERT(ToggleGUISepIndex); // WrapAtomsIndex a = new QAction(tr("&Wrap Atoms to Cell"), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(WrapAtomsIndex); CE_CACTION_ASSERT(WrapAtomsIndex); // TranslateAtomsIndex a = new QAction(tr("&Translate Atoms..."), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(TranslateAtomsIndex); CE_CACTION_ASSERT(TranslateAtomsIndex); // OrientStandardIndex a = new QAction(tr("Rotate To Standard &Orientation"), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(OrientStandardIndex); CE_CACTION_ASSERT(OrientStandardIndex); // ScaleToVolumeIndex, a = new QAction(tr("Scale Cell To &Volume..."), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(ScaleToVolumeIndex); CE_CACTION_ASSERT(ScaleToVolumeIndex); /////////////////////////////////// // Builders // BuildSlabIndex, a = new QAction(tr("&Slab..."), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(BuildSlabIndex); CE_CACTION_ASSERT(BuildSlabIndex); // LooseSepIndex a = new QAction(this); a->setSeparator(true); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(LooseSepIndex); CE_CACTION_ASSERT(LooseSepIndex); // PerceiveSpacegroupIndex a = new QAction(tr("Perceive Space&group..."), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(PerceiveSpacegroupIndex); CE_CACTION_ASSERT(PerceiveSpacegroupIndex); // SetSpacegroupIndex a = new QAction(tr("Set &Spacegroup..."), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(SetSpacegroupIndex); CE_CACTION_ASSERT(SetSpacegroupIndex); // FillUnitCellIndex a = new QAction(tr("&Fill Unit Cell"), this); a->setStatusTip(tr("Fill the unit cell using current spacegroup.")); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(FillUnitCellIndex); CE_CACTION_ASSERT(FillUnitCellIndex); // SymmetrizeCrystalIndex a = new QAction(tr("Sy&mmetrize Crystal"), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(SymmetrizeCrystalIndex); CE_CACTION_ASSERT(SymmetrizeCrystalIndex); // PrimitiveReduceIndex, a = new QAction(tr("Reduce Cell (&Primitive)"), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(PrimitiveReduceIndex); CE_CACTION_ASSERT(PrimitiveReduceIndex); // NiggliReduceIndex, a = new QAction(tr("Reduce Cell (&Niggli)"), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(NiggliReduceIndex); CE_CACTION_ASSERT(NiggliReduceIndex); // SettingsMainSep1Index, a = new QAction(this); a->setSeparator(true); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(SettingsMainSep1Index); CE_CACTION_ASSERT(SettingsMainSep1Index); /////////////////////////////////// // UnitsLength action group: ag = new QActionGroup(this); // UnitsLengthAngstromIndex, a = new QAction(tr("&Angstrom"), this); a->setCheckable(true); a->setChecked(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(UnitsLengthAngstromIndex); CE_CACTION_ASSERT(UnitsLengthAngstromIndex); // UnitsLengthBohrIndex, a = new QAction(tr("&Bohr"), this); a->setCheckable(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(UnitsLengthBohrIndex); CE_CACTION_ASSERT(UnitsLengthBohrIndex); // UnitsLengthNanometerIndex, a = new QAction(tr("&Nanometer"), this); a->setCheckable(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(UnitsLengthNanometerIndex); CE_CACTION_ASSERT(UnitsLengthNanometerIndex); // UnitsLengthPicometerIndex, a = new QAction(tr("&Picometer"), this); a->setCheckable(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(UnitsLengthPicometerIndex); CE_CACTION_ASSERT(UnitsLengthPicometerIndex); /////////////////////////////////// // UnitsAngle action group: ag = new QActionGroup(this); // UnitsAngleDegreeIndex, a = new QAction(tr("&Degree"), this); a->setCheckable(true); a->setChecked(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(UnitsAngleDegreeIndex); CE_CACTION_ASSERT(UnitsAngleDegreeIndex); // UnitsAngleRadianIndex, a = new QAction(tr("&Radian"), this); a->setCheckable(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(UnitsAngleRadianIndex); CE_CACTION_ASSERT(UnitsAngleRadianIndex); /////////////////////////////////// // CoordsCartFrac action group: ag = new QActionGroup(this); // CoordsCartIndex, a = new QAction(tr("Display &cartesian coordinates"), this); a->setCheckable(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(CoordsCartIndex); CE_CACTION_ASSERT(CoordsCartIndex); // CoordsFracIndex, a = new QAction(tr("Display &fractional coordinates"), this); a->setCheckable(true); a->setChecked(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(CoordsFracIndex); CE_CACTION_ASSERT(CoordsFracIndex); /////////////////////////////////// // CoordsPreserveCartFrac action group: ag = new QActionGroup(this); // CoordsPreserveCartIndex, a = new QAction(tr("Preserve &Cartesian Coordinates During Cell " "Modification"), this); a->setCheckable(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(CoordsPreserveCartIndex); CE_CACTION_ASSERT(CoordsPreserveCartIndex); // CoordsPreserveFracIndex, a = new QAction(tr("Preserve &Fractional Coordinates During Cell " "Modification"), this); a->setCheckable(true); a->setChecked(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(CoordsPreserveFracIndex); CE_CACTION_ASSERT(CoordsPreserveFracIndex); /////////////////////////////////// // MatrixCartFrac action group: ag = new QActionGroup(this); // MatrixCartIndex, a = new QAction(tr("Display &cartesian matrix"), this); a->setCheckable(true); a->setChecked(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(MatrixCartIndex); CE_CACTION_ASSERT(MatrixCartIndex); // MatrixFracIndex, a = new QAction(tr("Display &fractional matrix"), this); a->setCheckable(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(MatrixFracIndex); CE_CACTION_ASSERT(MatrixFracIndex); // MatrixCoordDisplaySep1Index, a = new QAction(this); a->setSeparator(true); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(MatrixCoordDisplaySep1Index); CE_CACTION_ASSERT(MatrixCoordDisplaySep1Index); /////////////////////////////////// // MatrixVectorStyle action group: ag = new QActionGroup(this); // MatrixRowVectorsIndex, a = new QAction(tr("Display as &row vectors"), this); a->setCheckable(true); a->setChecked(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(MatrixRowVectorsIndex); CE_CACTION_ASSERT(MatrixRowVectorsIndex); // MatrixColumnVectorsIndex a = new QAction(tr("Display as &column vectors"), this); a->setCheckable(true); a->setData(++counter); m_actions.append(a); ag->addAction(a); CE_CACTION_DEBUG(MatrixColumnVectorsIndex); CE_CACTION_ASSERT(MatrixColumnVectorsIndex); // ViewOptionIndex a = new QAction(tr("&Crystal View Options..."), this); a->setData(++counter); m_actions.append(a); CE_CACTION_DEBUG(ViewOptionsIndex); CE_CACTION_ASSERT(ViewOptionsIndex); } void CrystallographyExtension::createDockWidgets() { if (!m_translateWidget) { m_translateWidget = new CETranslateWidget (this); m_translateWidget->hide(); m_dockWidgets.append(m_translateWidget); } if (!m_viewOptionsWidget) { m_viewOptionsWidget = new CEViewOptionsWidget(this); m_viewOptionsWidget->hide(); m_dockWidgets.append(m_viewOptionsWidget); } if (!m_slabBuilder) { m_slabBuilder = new CESlabBuilder(this); m_slabBuilder->hide(); m_dockWidgets.append(m_slabBuilder); } if (!m_editors.size()) { m_editors.append(new CEParameterEditor(this)); m_editors.append(new CEMatrixEditor(this)); m_editors.append(new CECoordinateEditor(this)); foreach (DockWidget *widget, m_editors) { widget->hide(); m_dockWidgets.append(widget); } } } void CrystallographyExtension::actionPerceiveSpacegroup() { QSettings settings; double tol = settings.value ("crystallographyextension/settings/spgTolAngstrom", 0.1).toDouble(); bool ok; tol = unconvertLength(QInputDialog::getDouble (m_mainwindow, CE_DIALOG_TITLE, tr("Select tolerance in current cartesian units:"), convertLength(tol), // initial convertLength(1e-5), // min convertLength(0.5), // max 5, &ok)); if (!ok) { return; } settings.setValue ("crystallographyextension/settings/spgTolAngstrom", tol); settings.sync(); OpenBabel::OBUnitCell *cell = currentCell(); unsigned int spg = Spglib::getSpacegroup(m_molecule, cell, tol); if (spg == 0) { if (QMessageBox::question (m_mainwindow, CE_DIALOG_TITLE, tr("Spacegroup perception failed.\n\nWould you " "like to try again with a different tolerance?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { return actionPerceiveSpacegroup(); } else { return; } } CEUndoState before (this); cell->SetSpaceGroup(spg); CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Perceive Spacegroup"))); emit cellChanged(); } void CrystallographyExtension::actionSetSpacegroup() { QStringList spacegroups; const OpenBabel::SpaceGroup *sg; for (unsigned int i = 1; i <= 230; ++i) { sg = OpenBabel::SpaceGroup::GetSpaceGroup(i); spacegroups << QString("%1: %2") .arg(i) .arg(QString::fromStdString(sg->GetHMName())); } OpenBabel::OBUnitCell *cell = currentCell(); unsigned int spg; // Try to perceive the current group w/ default tolerance if no // spacegroup already set. sg = cell->GetSpaceGroup(); if (!sg) { spg = Spglib::getSpacegroup(m_molecule, currentCell()); } // Otherwise use current sg as default else { spg = sg->GetId(); } bool ok; QString selection = QInputDialog::getItem(m_mainwindow, CE_DIALOG_TITLE, tr("Set Spacegroup:"), spacegroups, spg-1, false, &ok); if (!ok) { return; } unsigned int index = spacegroups.indexOf(selection); CEUndoState before (this); cell->SetSpaceGroup(index+1); CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Set Spacegroup"))); emit cellChanged(); } void CrystallographyExtension::actionFillUnitCell() { OpenBabel::OBUnitCell *cell = currentCell(); const OpenBabel::SpaceGroup *sg = cell->GetSpaceGroup(); if (!sg) { QMessageBox::StandardButton reply; reply = QMessageBox::information (m_mainwindow, CE_DIALOG_TITLE, tr("There is not a spacegroup set for this " "document.\n\nWould you like to set a " "spacegroup now?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); if (reply == QMessageBox::Yes) { actionSetSpacegroup(); // Tail recurse to restart return actionFillUnitCell(); } else { return; } } CEUndoState before (this); fillUnitCell(); CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Fill Unit Cell"))); } void CrystallographyExtension::actionSymmetrizeCrystal() { QSettings settings; double tol = settings.value ("crystallographyextension/settings/spgTolAngstrom", 0.1).toDouble(); bool ok; tol = unconvertLength(QInputDialog::getDouble (m_mainwindow, CE_DIALOG_TITLE, tr("Select tolerance in current cartesian units:"), convertLength(tol), // initial convertLength(1e-5), // min convertLength(0.5), // max 5, &ok)); if (!ok) { return; } settings.setValue ("crystallographyextension/settings/spgTolAngstrom", tol); settings.sync(); CEUndoState before (this); unsigned int spg = Spglib::refineCrystal(m_molecule, 0, tol); // spg == 0: Spacegroup perception failed if (spg == 0) { if (QMessageBox::question (m_mainwindow, CE_DIALOG_TITLE, tr("Spacegroup perception failed.\n\nWould you " "like to try again with a different tolerance?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { return actionSymmetrizeCrystal(); } else { return; } } else if (spg == 1) { if (QMessageBox::question (m_mainwindow, CE_DIALOG_TITLE, tr("Spacegroup P1 detected -- cannot symmetrize to this " "spacegroup.\n\nWould you like to try again with a " "different tolerance?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { return actionSymmetrizeCrystal(); } else { return; } } wrapAtomsToCell(); orientStandard(); currentCell()->SetSpaceGroup(spg); CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Symmetrize Crystal"))); emit cellChanged(); } void CrystallographyExtension::actionToggleUnitCell() { bool hasCell = static_cast(currentCell()); if (!hasCell) { OpenBabel::OBUnitCell *cell = new OpenBabel::OBUnitCell; cell->SetData(3.0, 3.0, 3.0, 90.0, 90.0, 90.0); pushUndo(new CEAddCellUndoCommand(m_molecule, cell, this)); cell = 0; // Undo constructor takes ownership of cell. emit cellChanged(); showEditors(); GLWidget::current()->setRenderUnitCellAxes(true); // Reset the camera if there are no atoms present if (m_molecule->numAtoms() == 0) { GLWidget::current()->camera()->initializeViewPoint(); } refreshActions(); } else { pushUndo(new CERemoveCellUndoCommand(m_molecule, this)); emit cellChanged(); } } void CrystallographyExtension::actionPasteCrystal() { showPasteDialog(QApplication::clipboard()-> text(QClipboard::Clipboard)); } void CrystallographyExtension::actionToggleEditors() { // Are any currently shown? bool shown = false; for (QList::const_iterator it = m_editors.constBegin(), it_end = m_editors.constEnd(); it != it_end; ++it) { if ((*it)->isVisible()) { shown = true; break; } } if (shown) { hideEditors(); } else { showEditors(); } } void CrystallographyExtension::actionToggleProperties() { if (m_displayProperties) { hideProperties(); } else { showProperties(); } } void CrystallographyExtension::actionWrapAtoms() { CEUndoState before (this); wrapAtomsToCell(); CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Wrap Atoms To Cell"))); } void CrystallographyExtension::actionTranslateAtoms() { m_translateWidget->setGLWidget(m_glwidget); m_translateWidget->show(); } void CrystallographyExtension::actionViewOptions() { m_viewOptionsWidget->setGLWidget(m_glwidget); m_viewOptionsWidget->show(); } void CrystallographyExtension::actionOrientStandard() { CEUndoState before (this); orientStandard(); CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Rotate to Standard Orientation"))); } void CrystallographyExtension::actionPrimitiveReduce() { QSettings settings; double tol = settings.value ("crystallographyextension/settings/spgTolAngstrom", 0.1).toDouble(); bool ok; tol = unconvertLength(QInputDialog::getDouble (m_mainwindow, CE_DIALOG_TITLE, tr("Select tolerance in current cartesian units:"), convertLength(tol), // initial convertLength(1e-5), // min convertLength(0.5), // max 5, &ok)); if (!ok) { return; } settings.setValue ("crystallographyextension/settings/spgTolAngstrom", tol); settings.sync(); CEUndoState before (this); unsigned int spg = Spglib::reduceToPrimitive(m_molecule, 0, tol); // spg == 0: Spacegroup perception failed if (spg == 0) { if (QMessageBox::question (m_mainwindow, CE_DIALOG_TITLE, tr("Spacegroup perception failed.\n\nWould you " "like to try again with a different tolerance?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { return actionPrimitiveReduce(); } else { return; } } wrapAtomsToCell(); orientStandard(); currentCell()->SetSpaceGroup(spg); CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Reduce to Primitive Cell"))); emit cellChanged(); } void CrystallographyExtension::actionNiggliReduce() { CEUndoState before (this); if (!niggliReduce()) { return; } CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Reduce to Niggli Cell"))); } void CrystallographyExtension::actionBuildSlab() { // hide the editors -- we're going to need some dock space and // the cell shouldn't be modified during this process hideEditors(); m_slabBuilder->setGLWidget(m_glwidget); m_slabBuilder->show(); connect(m_slabBuilder, SIGNAL(finished()), this, SLOT(showEditors())); } void CrystallographyExtension::actionScaleToVolume() { double curvol = currentVolume(); bool ok; double newvol = QInputDialog::getDouble (m_mainwindow, CE_DIALOG_TITLE, tr("Enter new volume:", "Unit cell volume"), curvol, 0, 1e20, 5, &ok); if (!ok) { return; } if (newvol == curvol) { return; } CEUndoState before (this); setCurrentVolume(newvol); CEUndoState after (this); pushUndo(new CEUndoCommand (before, after, tr("Scale Unit Cell Volume"))); } void CrystallographyExtension::actionUnitsLengthAngstrom() { setLengthUnit(Angstrom); } void CrystallographyExtension::actionUnitsLengthBohr() { setLengthUnit(Bohr); } void CrystallographyExtension::actionUnitsLengthNanometer() { setLengthUnit(Nanometer); } void CrystallographyExtension::actionUnitsLengthPicometer() { setLengthUnit(Picometer); } void CrystallographyExtension::actionUnitsAngleDegree() { setAngleUnit(Degree); } void CrystallographyExtension::actionUnitsAngleRadian() { setAngleUnit(Radian); } void CrystallographyExtension::actionCoordsCart() { setCoordsCartFrac(Cartesian); } void CrystallographyExtension::actionCoordsFrac() { setCoordsCartFrac(Fractional); } void CrystallographyExtension::actionCoordsPreserveCart() { setCoordsPreserveCartFrac(Cartesian); } void CrystallographyExtension::actionCoordsPreserveFrac() { setCoordsPreserveCartFrac(Fractional); } void CrystallographyExtension::actionMatrixCart() { setMatrixCartFrac(Cartesian); } void CrystallographyExtension::actionMatrixFrac() { setMatrixCartFrac(Fractional); } void CrystallographyExtension::actionMatrixRowVectors() { setMatrixVectorStyle(RowVectors); } void CrystallographyExtension::actionMatrixColumnVectors() { setMatrixVectorStyle(ColumnVectors); } void CrystallographyExtension::cacheFractionalCoordinates() { m_cachedFractionalCoords = currentFractionalCoords(); m_cachedFractionalIds = currentAtomicSymbols(); } void CrystallographyExtension::restoreFractionalCoordinates() { Q_ASSERT(m_cachedFractionalCoords.size() == m_cachedFractionalIds.size()); setCurrentFractionalCoords(m_cachedFractionalIds, m_cachedFractionalCoords); } } // end namespace Avogadro Q_EXPORT_PLUGIN2(crystallographyextension, Avogadro::CrystallographyExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/crystallography/ceundo.h0000644000175000001440000000563112250371054024665 0ustar marcususers/********************************************************************** CEUndoState - Undo state infomation CEUndoCommand - Undo command for crystal builder CEAddCellUndoCommand CERemoveCellUndoCommand Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CEUNDO_H #define CEUNDO_H #include "crystallographyextension.h" #include #include #include #include #include namespace Avogadro { class CEUndoState { public: CEUndoState(CrystallographyExtension *ext); virtual ~CEUndoState(); void apply(); private: CrystallographyExtension *m_ext; QStringList m_ids; QList m_coords; OpenBabel::OBUnitCell m_cell; }; class CEUndoCommand : public QUndoCommand { public: CEUndoCommand(const CEUndoState &before, const CEUndoState &after, const QString &text); virtual ~CEUndoCommand(); virtual void undo(); virtual void redo(); private: CEUndoState m_before, m_after; bool m_hasBeenUndone; }; // Trivial: Cell addition: (note that this deletes the new cell and // passes mol a pointer to a new copy) class CEAddCellUndoCommand : public QUndoCommand { public: CEAddCellUndoCommand(Molecule *mol, OpenBabel::OBUnitCell *cell, CrystallographyExtension *ext) : m_ext(ext), m_mol(mol), m_cell(*cell) {delete cell;} void redo() {m_mol->setOBUnitCell(new OpenBabel::OBUnitCell(m_cell)); m_ext->setMolecule(m_mol);} void undo() {m_mol->setOBUnitCell(0); m_ext->setMolecule(m_mol);} private: CrystallographyExtension *m_ext; Avogadro::Molecule *m_mol; OpenBabel::OBUnitCell m_cell; }; // Trivial: Cell deletion: class CERemoveCellUndoCommand : public QUndoCommand { public: CERemoveCellUndoCommand(Molecule *mol, CrystallographyExtension *ext) : m_ext(ext), m_mol(mol), m_cell(*mol->OBUnitCell()) {} void redo() {m_mol->setOBUnitCell(0); m_ext->setMolecule(m_mol);} void undo() {m_mol->setOBUnitCell(new OpenBabel::OBUnitCell(m_cell)); m_ext->setMolecule(m_mol);} private: CrystallographyExtension *m_ext; Avogadro::Molecule *m_mol; OpenBabel::OBUnitCell m_cell; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ceundo.cpp0000644000175000001440000000351712250371054025221 0ustar marcususers/********************************************************************** CEUndoState - Undo state infomation CEUndoCommand - Undo command for crystal builder Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "ceundo.h" #include "crystallographyextension.h" namespace Avogadro { CEUndoState::CEUndoState(CrystallographyExtension *ext) : m_ext(ext), m_ids(ext->currentAtomicSymbols()), m_coords(ext->currentCartesianCoords()), m_cell(*ext->currentCell()) { } CEUndoState::~CEUndoState() { } void CEUndoState::apply() { m_ext->setCurrentCell(new OpenBabel::OBUnitCell (m_cell)); m_ext->setCurrentCartesianCoords(m_ids, m_coords); } CEUndoCommand::CEUndoCommand(const CEUndoState &before, const CEUndoState &after, const QString &text) : m_before(before), m_after(after), m_hasBeenUndone(false) { setText(text); } CEUndoCommand::~CEUndoCommand() { } void CEUndoCommand::undo() { m_before.apply(); m_hasBeenUndone = true; } void CEUndoCommand::redo() { if (!m_hasBeenUndone) { // Don't do anything until this has been undone return; } m_after.apply(); } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/crystallography/crystalpastedialog.h0000644000175000001440000000330412250371054027301 0ustar marcususers/********************************************************************** CEPasteDialog - Dialog Crystal import Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CEPASTEDIALOG_H #define CEPASTEDIALOG_H #include #include #include #include #include #include "ui_crystalpastedialog.h" namespace Avogadro { class CEPasteDialog : public QDialog { Q_OBJECT public: CEPasteDialog(QWidget *parent, const QString &text, Molecule *mol); virtual ~CEPasteDialog() {} enum CEPFormat { InvalidFormat = 0, VaspFormat }; bool formatIsValid(); protected slots: void refresh(); void accept(); protected: Molecule *m_molecule; QString m_text; CEPFormat m_format; unsigned int m_numAtomTypes; // For Vasp CEPFormat guessFormat(const QString &text); bool isVaspFormat(const QString &text); void refreshInvalidFormat(); void refreshVaspFormat(); bool acceptVaspFormat(); private: Ui::CEPasteDialog ui; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/crystalpastedialog.ui0000644000175000001440000000361612250371054027475 0ustar marcususers CEPasteDialog 0 0 400 300 Import Crystal Atomic &identites: edit_identities Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() CEPasteDialog accept() 248 254 157 274 buttonBox rejected() CEPasteDialog reject() 316 260 286 274 avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/0000755000175000001440000000000012250371054023647 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cematrixeditor.h0000644000175000001440000000307012250371054027043 0ustar marcususers/********************************************************************** CEMatrixEditor Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CEMATRIXEDITOR_H #define CEMATRIXEDITOR_H #include "ceabstracteditor.h" #include #include #include "ui_cematrixeditor.h" namespace Avogadro { class CEMatrixEditor : public CEAbstractEditor { Q_OBJECT public: CEMatrixEditor(CrystallographyExtension *ext); virtual ~CEMatrixEditor(); signals: public slots: void refreshEditor(); void lockEditor(); void unlockEditor(); protected slots: void markAsInvalid(); void markAsValid(); // Enable the apply/reset buttons void enableButtons(); // Return the input matrix if valid, Eigen::Matrix3d::Zero // otherwise Eigen::Matrix3d validateEditor(); // Creates and pushes an undo action while setting the current // matrix void setMatrix(); private: Ui::CEMatrixEditor ui; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceparametereditor.ui0000644000175000001440000002401112250371054027703 0ustar marcususers CEParameterEditor 0 0 299 137 0 0 Cell Parameters 0 0 A: spin_a 0 0 16777215 16777215 Å 5 0.010000000000000 1000000.000000000000000 0.100000000000000 3.000000000000000 0 0 α: spin_alpha 0 0 16777215 16777215 ° 5 5.000000000000000 175.000000000000000 90.000000000000000 0 0 B: spin_b 0 0 16777215 16777215 Å 5 0.010000000000000 1000000.000000000000000 0.100000000000000 3.000000000000000 β: spin_beta 0 0 16777215 16777215 ° 5 5.000000000000000 175.000000000000000 90.000000000000000 0 0 C: spin_c 0 0 16777215 16777215 Å 5 0.010000000000000 1000000.000000000000000 0.100000000000000 3.000000000000000 γ: spin_gamma 0 0 16777215 16777215 ° 5 5.000000000000000 175.000000000000000 90.000000000000000 Qt::Horizontal 40 20 &Apply &Reset Qt::Vertical 20 40 spin_a spin_b spin_c spin_alpha spin_beta spin_gamma push_params_apply push_params_reset avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cetranslatewidget.h0000644000175000001440000000415712250371054027540 0ustar marcususers/********************************************************************** cetranslatewidget.h Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CETRANSLATEWIDGET_H #define CETRANSLATEWIDGET_H #include "ceabstractdockwidget.h" #include "ui_cetranslatewidget.h" #include #include #include class QMainWindow; namespace Avogadro { class CrystallographyExtension; class GLWidget; class CETranslateWidget : public CEAbstractDockWidget { Q_OBJECT public: CETranslateWidget(CrystallographyExtension *ext); virtual ~CETranslateWidget(); GLWidget *glWidget() const {return m_gl;} enum TranslateMode { TM_VECTOR = 0, TM_ATOM_TO_ORIGIN, TM_ATOM_TO_CELL_CENTER }; public slots: void setGLWidget(GLWidget *gl) {m_gl = gl;} signals: // Too many/few atoms selected void invalidSelection(); // One atom selected void validSelection(); protected slots: void updateGui(); void updateVector(); void translate(); // GLWidget doesn't have a selectionChanged signal, so we will // poll the selections using this slot and m_selectionTimer void checkSelection(); void disableVectorEditor(); void enableVectorEditor(); void setError(const QString &err); void clearError(); protected: void readSettings(); void writeSettings(); void showEvent(QShowEvent *); Eigen::Vector3d m_vector; QTimer m_selectionTimer; GLWidget *m_gl; private: Ui::CETranslateWidget ui; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cematrixeditor.ui0000644000175000001440000001054112250371054027232 0ustar marcususers CEMatrixEditor 0 0 286 133 0 0 0 0 Cell Matrix true 0 0 278 70 540000 70 Monospace Qt::ScrollBarAlwaysOff Qt::ScrollBarAlwaysOff true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;"> 3.00000 0.00000 0.00000</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;"> 0.00000 3.00000 0.00000</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:12pt;"> 0.00000 0.00000 3.00000</span></p></body></html> Qt::Horizontal 40 20 &Apply &Reset Qt::Vertical 20 0 Avogadro::TextMatrixEditor QTextEdit
avogadro/textmatrixeditor.h
avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceabstractdockwidget.cpp0000644000175000001440000000426312250371054030540 0ustar marcususers/********************************************************************** ceabstractdockwidget.h Base class for crystal builder dockwidgets Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "ceabstractdockwidget.h" #include #include "../crystallographyextension.h" namespace Avogadro { CEAbstractDockWidget::CEAbstractDockWidget(CrystallographyExtension *ext) : DockWidget(), m_ext(ext) { connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(storeDockWidgetArea(Qt::DockWidgetArea))); } CEAbstractDockWidget::~CEAbstractDockWidget() { } void CEAbstractDockWidget::closeEvent(QCloseEvent *event) { emit visibilityChanged(); QDockWidget::closeEvent(event); } void CEAbstractDockWidget::hideEvent(QHideEvent *event) { emit visibilityChanged(); QDockWidget::hideEvent(event); } void CEAbstractDockWidget::showEvent(QShowEvent *event) { emit visibilityChanged(); QDockWidget::showEvent(event); } void CEAbstractDockWidget::storeDockWidgetArea(Qt::DockWidgetArea a) { QSettings settings; settings.setValue("crystallographyextension/dockwidgets/" + QString(this->metaObject()->className()) + "/area", a); } Qt::DockWidgetArea CEAbstractDockWidget::preferredWidgetDockArea() { QSettings settings; return static_cast (settings.value("crystallographyextension/dockwidgets/" + QString(this->metaObject()->className()) + "/area", Qt::RightDockWidgetArea).toInt()); } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceabstracteditor.h0000644000175000001440000000312612250371054027344 0ustar marcususers/********************************************************************** ceabstracteditor.h Base class for crystal builder editor dockwidgets Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CEABSTRACTEDITOR_H #define CEABSTRACTEDITOR_H #include #include "ceabstractdockwidget.h" class QMainWindow; namespace Avogadro { class CrystallographyExtension; class CEAbstractEditor : public CEAbstractDockWidget { Q_OBJECT public: CEAbstractEditor(CrystallographyExtension *ext); virtual ~CEAbstractEditor(); bool isLocked() {return m_isLocked;} signals: void editStarted(); void editAccepted(); void editRejected(); void invalidInput(); void validInput(); void visibilityChanged(); public slots: virtual void refreshEditor() = 0; virtual void lockEditor() = 0; virtual void unlockEditor() = 0; protected slots: virtual void markAsInvalid() = 0; virtual void markAsValid() = 0; protected: bool m_isLocked; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.h0000644000175000001440000000411112250371054030117 0ustar marcususers/********************************************************************** ceviewoptionswidget.h Copyright (C) 2011 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CEVIEWOPTIONSWIDGET_H #define CEVIEWOPTIONSWIDGET_H #include "ceabstractdockwidget.h" #include "ui_ceviewoptionswidget.h" class QColor; class QColorDialog; namespace Avogadro { class CrystallographyExtension; class GLWidget; class CEViewOptionsWidget : public CEAbstractDockWidget { Q_OBJECT public: CEViewOptionsWidget(CrystallographyExtension *ext); ~CEViewOptionsWidget(); GLWidget * glWidget() const {return m_glWidget;} enum NumCellChoice { NCC_Invalid = -1, NCC_None = 0, NCC_One, NCC_All }; public slots: void setGLWidget(GLWidget *g) {m_glWidget = g;} protected slots: void updateRepeatCells(); void updateCamera(); void updateMillerPlane(); void millerIndexChanged(); void updateCellRenderOptions(); // Color selection void selectCellColor(); void previewColor(const QColor &); void acceptColor(); void rejectColor(); void cleanupColorDialog(); void cellChanged(); // used for floating state changes void updateLayout(bool isFloating); // used for docking area changes void updateLayout(Qt::DockWidgetArea area); protected: Ui::CEViewOptionsWidget ui; GLWidget *m_glWidget; Qt::DockWidgetArea m_currentArea; NumCellChoice m_ncc; QColorDialog *m_colorDialog; QColor *m_origColor; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceparametereditor.cpp0000644000175000001440000001512512250371054030056 0ustar marcususers/********************************************************************** CEParameterEditor Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "ceparametereditor.h" #include "../ceundo.h" #include "../crystallographyextension.h" namespace Avogadro { CEParameterEditor::CEParameterEditor(CrystallographyExtension *ext) : CEAbstractEditor(ext) { ui.setupUi(this); // Emit editStarted connect(ui.spin_a, SIGNAL(valueChanged(double)), this, SIGNAL(editStarted())); connect(ui.spin_b, SIGNAL(valueChanged(double)), this, SIGNAL(editStarted())); connect(ui.spin_c, SIGNAL(valueChanged(double)), this, SIGNAL(editStarted())); connect(ui.spin_alpha, SIGNAL(valueChanged(double)), this, SIGNAL(editStarted())); connect(ui.spin_beta, SIGNAL(valueChanged(double)), this, SIGNAL(editStarted())); connect(ui.spin_gamma, SIGNAL(valueChanged(double)), this, SIGNAL(editStarted())); // Apply button connections connect(ui.push_params_apply, SIGNAL(clicked()), this, SIGNAL(editAccepted())); connect(ui.push_params_apply, SIGNAL(clicked()), this, SLOT(setParameters())); // Reset button connections connect(ui.push_params_reset, SIGNAL(clicked()), this, SIGNAL(editRejected())); connect(ui.push_params_reset, SIGNAL(clicked()), this, SLOT(refreshEditor())); // Validation connect(ui.spin_a, SIGNAL(valueChanged(double)), this, SLOT(validateEditor())); connect(ui.spin_b, SIGNAL(valueChanged(double)), this, SLOT(validateEditor())); connect(ui.spin_c, SIGNAL(valueChanged(double)), this, SLOT(validateEditor())); connect(ui.spin_alpha, SIGNAL(valueChanged(double)), this, SLOT(validateEditor())); connect(ui.spin_beta, SIGNAL(valueChanged(double)), this, SLOT(validateEditor())); connect(ui.spin_gamma, SIGNAL(valueChanged(double)), this, SLOT(validateEditor())); // Apply/reset enable connect(ui.spin_a, SIGNAL(valueChanged(double)), this, SLOT(enableButtons())); connect(ui.spin_b, SIGNAL(valueChanged(double)), this, SLOT(enableButtons())); connect(ui.spin_c, SIGNAL(valueChanged(double)), this, SLOT(enableButtons())); connect(ui.spin_alpha, SIGNAL(valueChanged(double)), this, SLOT(enableButtons())); connect(ui.spin_beta, SIGNAL(valueChanged(double)), this, SLOT(enableButtons())); connect(ui.spin_gamma, SIGNAL(valueChanged(double)), this, SLOT(enableButtons())); } CEParameterEditor::~CEParameterEditor() { } void CEParameterEditor::refreshEditor() { CEUnitCellParameters params = m_ext->currentCellParameters(); QString lengthSuffix; QString angleSuffix; switch (m_ext->lengthUnit()) { case Angstrom: lengthSuffix = " " + CE_ANGSTROM; break; case Bohr: lengthSuffix = " a" + CE_SUB_ZERO; break; case Nanometer: lengthSuffix = " nm"; break; case Picometer: lengthSuffix = " pm"; break; default: lengthSuffix = ""; break; } switch(m_ext->angleUnit()) { case Degree: angleSuffix = CE_DEGREE; break; case Radian: angleSuffix = " rad"; break; default: angleSuffix = ""; break; } ui.spin_a->blockSignals(true); ui.spin_b->blockSignals(true); ui.spin_c->blockSignals(true); ui.spin_alpha->blockSignals(true); ui.spin_beta->blockSignals(true); ui.spin_gamma->blockSignals(true); ui.spin_a->setValue(params.a); ui.spin_b->setValue(params.b); ui.spin_c->setValue(params.c); ui.spin_alpha->setValue(params.alpha); ui.spin_beta->setValue(params.beta); ui.spin_gamma->setValue(params.gamma); ui.spin_a->setSuffix(lengthSuffix); ui.spin_b->setSuffix(lengthSuffix); ui.spin_c->setSuffix(QString(lengthSuffix)); ui.spin_alpha->setSuffix(QString(angleSuffix)); ui.spin_beta->setSuffix(QString(angleSuffix)); ui.spin_gamma->setSuffix(QString(angleSuffix)); ui.spin_a->blockSignals(false); ui.spin_b->blockSignals(false); ui.spin_c->blockSignals(false); ui.spin_alpha->blockSignals(false); ui.spin_beta->blockSignals(false); ui.spin_gamma->blockSignals(false); ui.spin_a->setEnabled(true); ui.spin_b->setEnabled(true); ui.spin_c->setEnabled(true); ui.spin_alpha->setEnabled(true); ui.spin_beta->setEnabled(true); ui.spin_gamma->setEnabled(true); ui.push_params_apply->setEnabled(false); ui.push_params_reset->setEnabled(false); emit validInput(); } void CEParameterEditor::lockEditor() { ui.spin_a->setEnabled(false); ui.spin_b->setEnabled(false); ui.spin_c->setEnabled(false); ui.spin_alpha->setEnabled(false); ui.spin_beta->setEnabled(false); ui.spin_gamma->setEnabled(false); } void CEParameterEditor::unlockEditor() { ui.spin_a->setEnabled(true); ui.spin_b->setEnabled(true); ui.spin_c->setEnabled(true); ui.spin_alpha->setEnabled(true); ui.spin_beta->setEnabled(true); ui.spin_gamma->setEnabled(true); } void CEParameterEditor::markAsInvalid() { } void CEParameterEditor::markAsValid() { } void CEParameterEditor::enableButtons() { ui.push_params_apply->setEnabled(true); ui.push_params_reset->setEnabled(true); } CEUnitCellParameters CEParameterEditor::validateEditor() { CEUnitCellParameters p; p.a = ui.spin_a->value(); p.b = ui.spin_b->value(); p.c = ui.spin_c->value(); p.alpha = ui.spin_alpha->value(); p.beta = ui.spin_beta->value(); p.gamma = ui.spin_gamma->value(); emit validInput(); return p; } void CEParameterEditor::setParameters() { CEUnitCellParameters p = validateEditor(); CEUndoState before (m_ext); m_ext->setCurrentCellParameters(p); CEUndoState after (m_ext); m_ext->pushUndo(new CEUndoCommand (before, after, tr("Set Unit Cell Params"))); } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceabstracteditor.cpp0000644000175000001440000000326312250371054027701 0ustar marcususers/********************************************************************** ceabstracteditor.h Base class for crystal builder editor dockwidgets Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "ceabstracteditor.h" #include #include #include "../crystallographyextension.h" namespace Avogadro { CEAbstractEditor::CEAbstractEditor(CrystallographyExtension *ext) : CEAbstractDockWidget(ext), m_isLocked(false) { connect(this, SIGNAL(invalidInput()), this, SLOT(markAsInvalid())); connect(this, SIGNAL(validInput()), this, SLOT(markAsValid())); connect(m_ext, SIGNAL(cellChanged()), this, SLOT(refreshEditor())); connect(this, SIGNAL(visibilityChanged()), m_ext, SLOT(refreshActions())); connect(this, SIGNAL(editStarted()), m_ext, SLOT(lockEditors())); connect(this, SIGNAL(editAccepted()), m_ext, SLOT(unlockEditors())); connect(this, SIGNAL(editRejected()), m_ext, SLOT(unlockEditors())); } CEAbstractEditor::~CEAbstractEditor() { } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp0000644000175000001440000003015312250371054030457 0ustar marcususers/********************************************************************** ceviewoptionswidget.cpp Copyright (C) 2011 by Geoffrey R. Hutchison Copyright (C) 2012 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "ceviewoptionswidget.h" #include "../ceundo.h" #include #include #include #include #include #include #include namespace Avogadro { CEViewOptionsWidget::CEViewOptionsWidget(CrystallographyExtension *ext) : CEAbstractDockWidget(ext), m_glWidget(NULL), m_currentArea(Qt::NoDockWidgetArea), m_ncc(NCC_Invalid), m_colorDialog(0), m_origColor(new QColor()) { this->setPreferredDockWidgetArea(Qt::BottomDockWidgetArea); ui.setupUi(this); // Initialize the view axis button group ui.rad_axis_default->setChecked(true); connect(ui.aCellSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateRepeatCells())); connect(ui.bCellSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateRepeatCells())); connect(ui.cCellSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateRepeatCells())); connect(ui.spin_mi_h, SIGNAL(valueChanged(int)), this, SLOT(millerIndexChanged())); connect(ui.spin_mi_k, SIGNAL(valueChanged(int)), this, SLOT(millerIndexChanged())); connect(ui.spin_mi_l, SIGNAL(valueChanged(int)), this, SLOT(millerIndexChanged())); connect(ui.buttonGroup_camera, SIGNAL(buttonClicked(int)), this, SLOT(updateCamera())); connect(ui.combo_numCells, SIGNAL(currentIndexChanged(int)), this, SLOT(updateCellRenderOptions())); connect(ui.push_changeColor, SIGNAL(clicked()), this, SLOT(selectCellColor())); /* connect(ui.aButton, SIGNAL(clicked()), this, SLOT(updateViewAxis())); connect(ui.aStarButton, SIGNAL(clicked()), this, SLOT(updateViewAxis())); connect(ui.bButton, SIGNAL(clicked()), this, SLOT(updateViewAxis())); connect(ui.aStarButton, SIGNAL(clicked()), this, SLOT(updateViewAxis())); connect(ui.cButton, SIGNAL(clicked()), this, SLOT(updateViewAxis())); connect(ui.cStarButton, SIGNAL(clicked()), this, SLOT(updateViewAxis())); */ connect(ext, SIGNAL(cellChanged()), this, SLOT(cellChanged())); // Rearrange the widgets when we change from left/right to top/bottom // position connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)), this, SLOT(updateLayout(Qt::DockWidgetArea))); // Also update when the floating state changes connect(this, SIGNAL(topLevelChanged(bool)), this, SLOT(updateLayout(bool))); this->updateLayout(this->isFloating()); // Check if we have a hexagonal unit cell for mi_i box cellChanged(); QSettings settings; int ncc = settings.value("crystallography/viewWidget/numCellChoice", static_cast(NCC_All)).toInt(); ui.combo_numCells->setCurrentIndex(ncc); } CEViewOptionsWidget::~CEViewOptionsWidget() { if (m_colorDialog) { this->rejectColor(); // This will delete the dialog, too } delete m_origColor; m_origColor = NULL; } void CEViewOptionsWidget::updateRepeatCells() { m_glWidget->setUnitCells( ui.aCellSpinBox->value(), ui.bCellSpinBox->value(), ui.cCellSpinBox->value() ); } void CEViewOptionsWidget::updateCamera() { if (ui.rad_axis_miller->isChecked()) { this->updateMillerPlane(); } else if (ui.rad_axis_default->isChecked()) { m_glWidget->updateGeometry(); m_glWidget->camera()->initializeViewPoint(); m_glWidget->update(); } } void CEViewOptionsWidget::updateMillerPlane() { // View into a Miller plane Camera *camera = m_glWidget->camera(); Eigen::Transform3d modelView; modelView.setIdentity(); // OK, so we want to rotate to look along the normal at the plane // So we convert into a Cartesian normal Eigen::Matrix3d cellMatrix = m_ext->unconvertLength(m_ext->currentCellMatrix()).transpose(); // Get miller indices: const Eigen::Vector3d millerIndices (static_cast(ui.spin_mi_h->value()), static_cast(ui.spin_mi_k->value()), static_cast(ui.spin_mi_l->value())); // Check to see if we have 0,0,0 // in which case, we do nothing if (millerIndices.squaredNorm() < 0.5) return; const Eigen::Vector3d normalVector ((cellMatrix * millerIndices).normalized()); Eigen::Matrix3d rotation; rotation.row(2) = normalVector; rotation.row(0) = rotation.row(2).unitOrthogonal(); rotation.row(1) = rotation.row(2).cross(rotation.row(0)); // Translate camera to the center of the cell const Eigen::Vector3d cellDiagonal = cellMatrix.col(0) * m_glWidget->aCells() + cellMatrix.col(1) * m_glWidget->bCells() + cellMatrix.col(2) * m_glWidget->cCells(); modelView.translate(-cellDiagonal*0.5); // Prerotate the camera to look down the specified normal modelView.prerotate(rotation); // Pretranslate in the negative Z direction modelView.pretranslate(Eigen::Vector3d(0.0, 0.0, -1.5 * cellDiagonal.norm())); camera->setModelview(modelView); // Call for a redraw m_glWidget->update(); } void CEViewOptionsWidget::millerIndexChanged() { if (!ui.rad_axis_miller->isChecked()) ui.rad_axis_miller->click(); else this->updateCamera(); } void CEViewOptionsWidget::updateCellRenderOptions() { if (m_glWidget == NULL) { return; } NumCellChoice ncc = static_cast (ui.combo_numCells->currentIndex()); if (m_ncc != ncc) { switch (ncc) { case Avogadro::CEViewOptionsWidget::NCC_Invalid: // Should happen, probably not initialized. qWarning() << "NumCellChoice is invalid."; break; case Avogadro::CEViewOptionsWidget::NCC_None: m_glWidget->setRenderUnitCellAxes(false); break; case Avogadro::CEViewOptionsWidget::NCC_One: m_glWidget->setRenderUnitCellAxes(true); m_glWidget->setOnlyRenderOriginalUnitCell(true); break; case Avogadro::CEViewOptionsWidget::NCC_All: m_glWidget->setRenderUnitCellAxes(true); m_glWidget->setOnlyRenderOriginalUnitCell(false); break; default: qWarning() << "Unknown numCellChoice:" << ncc; break; } m_ncc = ncc; m_glWidget->update(); } } void CEViewOptionsWidget::selectCellColor() { if (m_colorDialog == NULL) { if (!m_glWidget) return; // Get current color from GLWidget *m_origColor = m_glWidget->unitCellColor().color(); m_colorDialog = new QColorDialog (this); m_colorDialog->setWindowTitle(tr("Set Unit Cell Color")); m_colorDialog->setOption(QColorDialog::ShowAlphaChannel); m_colorDialog->setCurrentColor(*m_origColor); // Interactive preview connect(m_colorDialog, SIGNAL(currentColorChanged(QColor)), this, SLOT(previewColor(QColor))); // Keep or revert colors connect(m_colorDialog, SIGNAL(accepted()), this, SLOT(acceptColor())); connect(m_colorDialog, SIGNAL(rejected()), this, SLOT(rejectColor())); } m_colorDialog->show(); } void CEViewOptionsWidget::previewColor(const QColor &color) { if (m_glWidget == NULL || m_colorDialog == NULL) return; m_glWidget->setUnitCellColor(color); m_glWidget->update(); } void CEViewOptionsWidget::acceptColor() { if (m_glWidget == NULL || m_colorDialog == NULL) return; // Store color for later Color c = m_glWidget->unitCellColor(); QSettings settings; settings.beginGroup("crystallographyextension/settings/cellColor"); settings.setValue("r", c.red()); settings.setValue("g", c.green()); settings.setValue("b", c.blue()); settings.setValue("a", c.alpha()); settings.endGroup(); m_glWidget->setUnitCellColor(m_colorDialog->currentColor()); m_glWidget->update(); this->cleanupColorDialog(); } void CEViewOptionsWidget::rejectColor() { if (m_glWidget == NULL || m_colorDialog == NULL) return; m_glWidget->setUnitCellColor(*m_origColor); m_glWidget->update(); this->cleanupColorDialog(); } void CEViewOptionsWidget::cleanupColorDialog() { if (m_colorDialog == NULL) return; m_colorDialog->hide(); disconnect(m_colorDialog, NULL, this, NULL); m_colorDialog->deleteLater(); m_colorDialog = NULL; } void CEViewOptionsWidget::cellChanged() { // Check if hexagonal or rhombohedral and show the "i" index OpenBabel::OBUnitCell *cell = m_ext->currentCell(); if (cell && (cell->GetLatticeType() == OpenBabel::OBUnitCell::Rhombohedral || cell->GetLatticeType() == OpenBabel::OBUnitCell::Hexagonal)) { ui.spin_mi_i->setValue(-ui.spin_mi_h->value() - ui.spin_mi_k->value()); ui.spin_mi_i->show(); } else { // otherwise hide it ui.spin_mi_i->hide(); } } void CEViewOptionsWidget::updateLayout(bool isFloating) { if (isFloating) { this->updateLayout(Qt::NoDockWidgetArea); } } void CEViewOptionsWidget::updateLayout(Qt::DockWidgetArea newArea) { if (this->isFloating()) { newArea = Qt::NoDockWidgetArea; } if (newArea == m_currentArea) { return; } switch (newArea) { case Qt::NoDockWidgetArea: // Treat floating as left/right configuration case Qt::LeftDockWidgetArea: case Qt::RightDockWidgetArea: { switch (m_currentArea) { // Did we just switch sides? Keep the current layout. case Qt::LeftDockWidgetArea: case Qt::RightDockWidgetArea: case Qt::NoDockWidgetArea: // Treat floating as left/right configuration break; // Otherwise, rearrange widgets default: case Qt::TopDockWidgetArea: case Qt::BottomDockWidgetArea: case Qt::AllDockWidgetAreas: // Invalid, always reset ui.grid->removeWidget(ui.gb_cell); ui.grid->removeWidget(ui.gb_camera); ui.grid->addWidget(ui.gb_cell, 0, 0); ui.grid->addWidget(ui.gb_camera, 1, 0); break; } break; } case Qt::TopDockWidgetArea: case Qt::BottomDockWidgetArea: { switch (m_currentArea) { // Did we just switch sides? Keep the current layout. case Qt::TopDockWidgetArea: case Qt::BottomDockWidgetArea: break; // Otherwise, rearrange widgets default: case Qt::LeftDockWidgetArea: case Qt::RightDockWidgetArea: case Qt::NoDockWidgetArea: // Treat floating as left/right configuration case Qt::AllDockWidgetAreas: // Invalid, always reset ui.grid->removeWidget(ui.gb_cell); ui.grid->removeWidget(ui.gb_camera); ui.grid->addWidget(ui.gb_cell, 0, 0); ui.grid->addWidget(ui.gb_camera, 0, 1); break; } break; } // Invalid case, just leave everything as is. default: case Qt::AllDockWidgetAreas: break; } // Update the current area m_currentArea = newArea; // Shrink down as small as we can /* This isn't working... removing for now. this->updateGeometry(); QRect geo = this->geometry(); this->setGeometry(geo.x(), geo.y(), 0, 0);// minSize.width(), minSize.height()); */ } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cetranslatewidget.ui0000644000175000001440000001510412250371054027720 0ustar marcususers CETranslateWidget 0 0 715 178 Translate Atoms 0 0 &Translate combo_translateMode 0 0 by arbitrary vector selected atom to origin selected atom to unit cell center Translation vector: 0 0 &X: spin_x 6 -1000.000000000000000 1000.000000000000000 0 0 &Y: spin_y 6 -1000.000000000000000 1000.000000000000000 0 0 &Z: spin_z 6 -1000.000000000000000 1000.000000000000000 0 0 &Vector units: combo_units 0 0 Cartesian Fractional &Translate 0 0 &Keep atoms in unit cell true I'm an error message! avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceslabbuilder.cpp0000644000175000001440000004675112250371054027170 0ustar marcususers/********************************************************************** ceslabbuilder Widget for slab builder Copyright (C) 2011 by David C. Lonie Copyright (C) 2011,2012 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "ceslabbuilder.h" #include "../ceundo.h" #include "../crystallographyextension.h" #include #include #include #include #include #include #include #include Q_DECLARE_METATYPE(Eigen::Vector3d) #define THRESH 1.0e-1 namespace Avogadro { ///@todo Needs to integrate with a Miller Plane engine to visualize the cut before building //Compute the greatest common divisor by subtraction //Fastest code on small integers (like Miller planes) // Based on code from Wikipedia (and elsewhere on the web) // (many implementations) int gcdSmall(const int aOriginal, const int bOriginal) { // Take an absolute value, since we may have negative Miller indices int a = abs(aOriginal); int b = abs(bOriginal); // Don't return 0, always keep 1 as the GCD of everything if (a == 0 || b == 0) return 1; while (a != b) { while (a < b) b -= a; while (b < a) a -= b; } return a; } // Comparison for sorting possible surface lattice vectors bool vectorNormIsLessThan(Eigen::Vector3d a, Eigen::Vector3d b) { return (a.squaredNorm() < b.squaredNorm()); } CESlabBuilder::CESlabBuilder(CrystallographyExtension *ext) : CEAbstractDockWidget(ext), m_glwidget(NULL), m_beforeState(0), m_finished(false) { ui.setupUi(this); // Hide the "i" Miller index if not a hexagonal unit cell ui.spin_mi_i->hide(); // Hide the Miller index warning label by default ui.warningLabel->hide(); readSettings(); // hides or shows the warning if needed // Add the suffix to the xyz distances updateLengthUnit(); connect(m_ext, SIGNAL(lengthUnitChanged(LengthUnit)), this, SLOT(updateLengthUnit())); // Update the Miller indices connect(ui.spin_mi_h, SIGNAL(valueChanged(int)), this, SLOT(updateMillerIndices())); connect(ui.spin_mi_k, SIGNAL(valueChanged(int)), this, SLOT(updateMillerIndices())); connect(ui.spin_mi_l, SIGNAL(valueChanged(int)), this, SLOT(updateMillerIndices())); // No need to update "i" index -- it's locked and updated from h & k // If the x/y cutoffs change, we'll need to append a suffix for the unit connect(ui.xWidthUnits, SIGNAL(currentIndexChanged(int)), this, SLOT(updateLengthUnit())); connect(ui.yWidthUnits, SIGNAL(currentIndexChanged(int)), this, SLOT(updateLengthUnit())); connect(ui.buildButton, SIGNAL(clicked(bool)), this, SLOT(buildSlab())); } CESlabBuilder::~CESlabBuilder() { // @todo Revise to handle a general Miller Plane engine // Reset cube variants /* Molecule *mol = m_glwidget->molecule(); mol->setProperty("Slab Cell offset", QVariant()); mol->setProperty("Slab Cell v1", QVariant()); mol->setProperty("Slab Cell v2", QVariant()); mol->setProperty("Slab Cell v3", QVariant()); */ // Restore crystal to "before" state if the builder didn't finish if (!m_finished && m_beforeState != NULL) { m_beforeState->apply(); delete m_beforeState; return; } delete m_beforeState; } void CESlabBuilder::closeEvent(QCloseEvent *event) { CEAbstractDockWidget::closeEvent(event); } void CESlabBuilder::hideEvent(QHideEvent *event) { CEAbstractDockWidget::hideEvent(event); } void CESlabBuilder::updateLengthUnit() { if (!m_ext) return; // Called when the user changes the length unit QString lengthSuffix; switch (m_ext->lengthUnit()) { case Angstrom: lengthSuffix = CE_ANGSTROM; break; case Bohr: lengthSuffix = " a" + CE_SUB_ZERO; break; case Nanometer: lengthSuffix = " nm"; break; case Picometer: lengthSuffix = " pm"; break; default: lengthSuffix = ""; break; } ui.xWidthUnits->setItemText(0, lengthSuffix); ui.yWidthUnits->setItemText(0, lengthSuffix); if (ui.xWidthUnits->currentIndex() == 0) ui.spin_slab_x->setSuffix(lengthSuffix); else ui.spin_slab_x->setSuffix(""); if (ui.yWidthUnits->currentIndex() == 0) ui.spin_slab_y->setSuffix(lengthSuffix); else ui.spin_slab_y->setSuffix(""); ui.spin_slab_z->setSuffix(lengthSuffix); } void CESlabBuilder::updateMillerIndices() { // Get miller indices: const Eigen::Vector3d millerIndices (static_cast(ui.spin_mi_h->value()), static_cast(ui.spin_mi_k->value()), static_cast(ui.spin_mi_l->value())); // Check that the indices aren't 0,0,0 if (millerIndices.norm() < 0.5) { ui.warningLabel->show(); ui.buildButton->setEnabled(false); return; } // Check if hexagonal or rhombohedral and show the redundant "i" index OpenBabel::OBUnitCell *cell = m_ext->currentCell(); if (cell && (cell->GetLatticeType() == OpenBabel::OBUnitCell::Rhombohedral || cell->GetLatticeType() == OpenBabel::OBUnitCell::Hexagonal)) { // i = -h - k // http://en.wikipedia.org/wiki/Miller_index#Case_of_hexagonal_and_rhombohedral_structures ui.spin_mi_i->setValue(-ui.spin_mi_h->value() - ui.spin_mi_k->value()); ui.spin_mi_i->show(); } else { // otherwise hide it ui.spin_mi_i->hide(); } // In case warning was visible: ui.warningLabel->hide(); ui.buildButton->setEnabled(true); writeSettings(); } void CESlabBuilder::buildSlab() { writeSettings(); ui.buildButton->setEnabled(false); // Indicate you can't do anything until we finish ui.buildButton->setText(tr("Working...")); QApplication::setOverrideCursor( Qt::WaitCursor ); updateSlabCell(true); QApplication::restoreOverrideCursor(); ui.buildButton->setEnabled(true); ui.buildButton->setText(tr("Build")); // OK, get rid of ourselves to go back to normal crystal editing this->hide(); emit finished(); } void CESlabBuilder::updateSlabCell(bool build) { // Get miller indices: const Eigen::Vector3d millerIndices (static_cast(ui.spin_mi_h->value()), static_cast(ui.spin_mi_k->value()), static_cast(ui.spin_mi_l->value())); // Get cell vectors Eigen::Matrix3d cellMatrix (m_ext->unconvertLength(m_ext->currentCellMatrix()).transpose()); Eigen::Vector3d v1 (cellMatrix.col(0)); Eigen::Vector3d v2 (cellMatrix.col(1)); Eigen::Vector3d v3 (cellMatrix.col(2)); if (build) { m_beforeState = new CEUndoState (m_ext); // First, wrap all the atoms into the cell // And if symmetry is defined, fill out // the symmetric atoms m_ext->fillUnitCell(); } #ifdef DEBUG std::cout << "Cell Matrix:" << std::endl << v1.transpose() << std::endl << v2.transpose() << std::endl << v3.transpose() << std::endl; #endif // Calculate vectors of the slab cell // // Define a normal vector to the plane // (i.e., if Miller plane is <2 1 1> then normal in realspace will be cellMatrix*<2 1 1>) const Eigen::Vector3d normalVec ((cellMatrix * millerIndices).normalized()); // And the cell body diagonal <1 1 1> const Eigen::Vector3d bodyDiagonal (v1 + v2 + v3); // Find a point in the plane along a cell edge other than (0,0,0) // or v1+v2+v3: Eigen::Vector3d edgePoint; if ((fabs(millerIndices(0)) > 1e-8)) edgePoint = v1 / millerIndices(0); else if ((fabs(millerIndices(1)) > 1e-8)) edgePoint = v2 / millerIndices(1); else if ((fabs(millerIndices(2)) > 1e-8)) edgePoint = v3 / millerIndices(2); else { // qWarning() << "No non-zero miller index..."; return; } //////////////////////////////////////////////////////////////////// // Find the point in the Miller Plane that intersects the diagonal // between (0,0,0) and v1+v2+v3 // // Equation of the plane w/ point and normal: // (p - p0).dot(n) = 0 // // p0: point on plane const Eigen::Vector3d &p0 (edgePoint); // n : vector normal to plane const Eigen::Vector3d &n (normalVec.normalized()); // // Define p as some point on the unit cell body diagonal (origin // -> origin + v1 + v2 + v3), described here by the line: // p = d * l + l0 // // Where // l : translation vector const Eigen::Vector3d l (bodyDiagonal.normalized()); // l0: point on line const Eigen::Vector3d l0 (bodyDiagonal * 0.5); // center of unit cell // d : translation factor to be found // // Plug our line into the our plane equation: // ( (d * l + l0) - p0).dot(n) = 0 // // Solve for d: const double d = (p0 - l0).dot(n) / l.dot(n); // // Now find our centerPoint by evaluating the line equation: const Eigen::Vector3d centerPoint (d * l + l0); #ifdef DEBUG std::cout << std::endl << centerPoint.transpose() << std::endl << d << std::endl << l.transpose() << std::endl << l0.transpose() << std::endl << n.transpose() << std::endl << p0.transpose() << std::endl; #endif // Determine third point in plane, // orthogonal to centerPoint - edgePoint const Eigen::Vector3d crossPoint (normalVec.cross(centerPoint - edgePoint)); // Grab mol from our widget // We can't do this any earlier, since the molecule could change Molecule *mol = m_glwidget->molecule(); // Pass corners to the Miller plane engine: mol->setProperty("Slab Plane center", QVariant::fromValue(centerPoint)); mol->setProperty("Slab Plane p1", QVariant::fromValue(edgePoint)); mol->setProperty("Slab Plane p2", QVariant::fromValue(crossPoint)); #ifdef DEBUG std::cout << std::endl << "Extension (center, p1, p2)" << std::endl << centerPoint.transpose() << std::endl << edgePoint.transpose() << std::endl << crossPoint.transpose() << std::endl; #endif // Generate new surface unit cell vectors /* Algorithm inspired by GDIS http://gdis.sf.net/ Sean Fleming of GDIS said the code was based on MARVIN D.H. Gay and A.L. Rohl. Marvin: A new computer code for studying surfaces and interfaces and its application to calculating the crystal morphologies of corundum and zircon. J. Chem. Soc., Faraday Trans., 91:926-936, 1995. */ std::vector baseVectors, surfaceVectors; int mi_h = ui.spin_mi_h->value(); int mi_k = ui.spin_mi_k->value(); int mi_l = ui.spin_mi_l->value(); // Set up the surface lattice vectors Eigen::Vector3d s1, s2, s3; // First, generate the basic Miller vectors -- linear combinations of v1,v2,v3 Eigen ::Vector3d v; int common = gcdSmall(mi_h, mi_k); v = (mi_k/common) * v1 - (mi_h/common) * v2; if (v.squaredNorm() > THRESH) // i.e., if this is a non-zero vector baseVectors.push_back(v); common = gcdSmall(mi_h, mi_l); v = (mi_l/common) * v1 - (mi_h/common) * v3; if (v.squaredNorm() > THRESH) baseVectors.push_back(v); common = gcdSmall(mi_k, mi_l); v = (mi_l/common) * v2 - (mi_k/common) * v3; if (v.squaredNorm() > THRESH) baseVectors.push_back(v); // Now that we have the three basic Miller vectors, we iterate to find all linear combinations Eigen::Vector3d vA, vB; surfaceVectors = baseVectors; // copy the basic ones for (unsigned int i = 0; i < baseVectors.size() - 1; ++i) { vA = baseVectors[i]; for (unsigned int j = i+1; j < baseVectors.size(); ++j) { vB = baseVectors[j]; v = vA - vB; if (v.squaredNorm() > THRESH) // i.e., this is non-zero surfaceVectors.push_back(v); v = vA + vB; if (v.squaredNorm() > THRESH) // ditto surfaceVectors.push_back(v); } } // OK, now we sort all possible surfaceVectors by magnitude std::sort(surfaceVectors.begin(), surfaceVectors.end(), vectorNormIsLessThan); // Set s1 to the surface normal s1 = normalVec.normalized(); // Set s2 to the shortest vector s2 = surfaceVectors[0].normalized(); // Now loop through to find the next-shortest orthogonal to s1 // and mostly orthogonal to s2 unsigned int nextDir; for (nextDir = 1; nextDir < surfaceVectors.size(); ++nextDir) { if (s1.cross(surfaceVectors[nextDir]).squaredNorm() > 0.8 && s2.cross(surfaceVectors[nextDir]).squaredNorm() > THRESH) break; } s3 = surfaceVectors[nextDir]; // Now we set up the normalized transformation matrix // We want s1 on the z-axis, and s2 on the x-axis // So we need to take the cross for the y-axis Eigen::Matrix3d rotation; rotation.row(0) = s2; rotation.row(1) = s2.cross(s1); rotation.row(2) = s1; // OK, now we un-normalize s1 and s2 // The correct length for s1 should be the depth s1 *= d; // And we still have s2's un-normalized version s2 = surfaceVectors[0]; // S3 is already un-normalized #ifdef DEBUG std::cout << std::endl << s1.transpose() << std::endl << s2.transpose() << std::endl << s3.transpose() << std::endl << (rotation * s2).transpose() << std::endl << (rotation * s3).transpose() << std::endl; #endif if (build) { // Estimate how many replicas we need to generate the unit cell // Get cutoff thresholds double zCutoff = ui.spin_slab_z->value(); double maxUnitLength = std::max(v1.norm(), v2.norm()); maxUnitLength = std::max(maxUnitLength, v3.norm()); double maxSurfaceLength = std::max(s2.norm(), s3.norm()); maxSurfaceLength = std::max(maxSurfaceLength, zCutoff); // Six times should be more than enough // We'll create the unit cell on the surface // And then replicate to fill out the user-requested dimensions const int replicas = static_cast(6.0 * (maxSurfaceLength / maxUnitLength)); m_ext->buildSuperCell(replicas, replicas, replicas); // Derive the unit cell matrix to allow building a supercell of the surface Eigen::Vector3d m1 = (rotation * (s2)); // Should be x-axis Eigen::Vector3d m2 = (rotation * (s3)); // should by y-axis // work out the number of repeat units double xCutoff = ui.spin_slab_x->value() / 2.0; double yCutoff = ui.spin_slab_y->value() / 2.0; double xSpacing = std::max(fabs(m1.x()), fabs(m2.x())); double ySpacing = std::max(fabs(m1.y()), fabs(m2.y())); int xRepeats, yRepeats; if (ui.xWidthUnits->currentIndex() == 1) { // spin box gave number of repeat units, not Cartesian cutoff xRepeats = ui.spin_slab_x->value(); xCutoff = xRepeats * xSpacing / 2.0; } xCutoff += 1.0e-6; // add some slop for unit cell boundaries if (ui.yWidthUnits->currentIndex() == 1) { yRepeats = ui.spin_slab_y->value(); yCutoff = yRepeats * ySpacing / 2.0; } yCutoff += 1.0e-6; // add some slop for unit cell boundaries // Here's the supercell matrix Eigen::Matrix3d surfaceMatrix; surfaceMatrix << m1.x(), m1.y(), 0.0, m2.x(), m2.y(), 0.0, 0.0, 0.0, zCutoff*8; // The large z-spacing allows for surface/molecule calculations // Now rotate, translate, and trim the supercell Eigen::Vector3d translation(replicas*centerPoint); foreach(Atom *a, mol->atoms()) { if (a) { // Center the cube to the centerPoint of the Miller Plane Eigen::Vector3d translatedPos = (*a->pos() - translation); // Rotate to the new frame of reference Eigen::Vector3d newPos = rotation * (translatedPos); // OK, before we update the atom, see if we should trim it... if (newPos.z() > 0.01) // We use a slight slop factor, although in principle // every atom should be in xy plane mol->removeAtom(a); else if (newPos.z() < -zCutoff) // the z-thickness should all be negative mol->removeAtom(a); else if (newPos.x() < -xCutoff || newPos.x() > xCutoff) mol->removeAtom(a); else if (newPos.y() < -yCutoff || newPos.y() > yCutoff) mol->removeAtom(a); else // Fits within the criteria a->setPos(newPos); } } // We build everything in cartesian, so we want to preserve them when modifying the matrix CartFrac existingPreserveCartFrac = m_ext->coordsPreserveCartFrac(); m_ext->setCoordsPreserveCartFrac(Cartesian); m_ext->setCurrentCellMatrix(m_ext->convertLength(surfaceMatrix)); m_ext->setCoordsPreserveCartFrac(existingPreserveCartFrac); // Finish up m_ext->rebuildBonds(); // Push a new undo. m_finished = true; CEUndoState after (m_ext); m_ext->pushUndo(new CEUndoCommand(*m_beforeState, after, tr("Cut Slab From Crystal"))); } // end build mol->update(); } void CESlabBuilder::readSettings() { QSettings settings; settings.beginGroup("crystallographyextension"); settings.beginGroup(this->metaObject()->className()); ui.spin_slab_x->setValue(settings.value("x", 10.0).toDouble()); ui.spin_slab_y->setValue(settings.value("y", 10.0).toDouble()); ui.spin_slab_z->setValue(settings.value("z", 5.0).toDouble()); ui.spin_mi_h->setValue(settings.value("mi_h", 0).toInt()); ui.spin_mi_k->setValue(settings.value("mi_k", 0).toInt()); ui.spin_mi_l->setValue(settings.value("mi_l", 0).toInt()); // show the label if needed if (ui.spin_mi_h->value() == 0 && ui.spin_mi_k->value() == 0 && ui.spin_mi_l->value() == 0) ui.warningLabel->show(); else ui.warningLabel->hide(); ui.xWidthUnits->setCurrentIndex(settings.value("x_units", 0).toInt()); ui.yWidthUnits->setCurrentIndex(settings.value("y_units", 0).toInt()); settings.endGroup(); // slabbuilder settings.endGroup(); // crystallography } void CESlabBuilder::writeSettings() { QSettings settings; settings.beginGroup("crystallographyextension"); settings.beginGroup(this->metaObject()->className()); settings.setValue("x", ui.spin_slab_x->value()); settings.setValue("y", ui.spin_slab_y->value()); settings.setValue("z", ui.spin_slab_z->value()); settings.setValue("mi_h", ui.spin_mi_h->value()); settings.setValue("mi_k", ui.spin_mi_k->value()); settings.setValue("mi_l", ui.spin_mi_l->value()); settings.setValue("x_units", ui.xWidthUnits->currentIndex()); settings.setValue("y_units", ui.yWidthUnits->currentIndex()); settings.endGroup(); // slabbuilder settings.endGroup(); // crystallography } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cecoordinateeditor.h0000644000175000001440000000301612250371054027666 0ustar marcususers/********************************************************************** CECoordinateEditor Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CECOORDINATEEDITOR_H #define CECOORDINATEEDITOR_H #include "ceabstracteditor.h" #include #include "ui_cecoordinateeditor.h" namespace Avogadro { class CECoordinateEditor : public CEAbstractEditor { Q_OBJECT public: CECoordinateEditor(CrystallographyExtension *ext); virtual ~CECoordinateEditor(); signals: public slots: void refreshEditor(); void lockEditor(); void unlockEditor(); protected slots: void markAsInvalid(); void markAsValid(); // Enable the apply/reset buttons void enableButtons(); void validateEditor(); // Creates and pushes an undo action while setting the current // coordinates void setCoords(); private: Ui::CECoordinateEditor ui; QTextCharFormat m_charFormat; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceslabbuilder.h0000644000175000001440000000363512250371054026627 0ustar marcususers/********************************************************************** ceslabbuilder.h Widget for slab builder Copyright (C) 2011 by David C. Lonie Copyright (C) 2011 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef CESLABBUILDER_H #define CESLABBUILDER_H #include "ceabstractdockwidget.h" #include "ui_ceslabbuilder.h" class QMainWindow; namespace Avogadro { class CEUndoState; class CrystallographyExtension; class GLWidget; class CESlabBuilder : public CEAbstractDockWidget { Q_OBJECT public: CESlabBuilder(CrystallographyExtension *ext); virtual ~CESlabBuilder(); GLWidget *glWidget() const {return m_glwidget;} signals: void finished(); public slots: void setGLWidget(GLWidget *gl) {m_glwidget = gl;} protected slots: // Miller indices changed void updateMillerIndices(); // Do the work! void buildSlab(); // Called by the extension if the user changes the length setting // (unlikely) void updateLengthUnit(); protected: void updateSlabCell(bool build = false); void closeEvent(QCloseEvent *); void hideEvent(QHideEvent *); void readSettings(); void writeSettings(); private: Ui::CESlabBuilder ui; GLWidget *m_glwidget; CEUndoState *m_beforeState; bool m_finished; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cematrixeditor.cpp0000644000175000001440000001256612250371054027410 0ustar marcususers/********************************************************************** CEMatrixEditor Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "cematrixeditor.h" #include "../ceundo.h" #include "../crystallographyextension.h" namespace Avogadro { CEMatrixEditor::CEMatrixEditor(CrystallographyExtension *ext) : CEAbstractEditor(ext) { ui.setupUi(this); // Emit editStarted connect(ui.edit_matrix, SIGNAL(textChanged()), this, SIGNAL(editStarted())); // Apply button connections connect(ui.push_matrix_apply, SIGNAL(clicked()), this, SIGNAL(editAccepted())); connect(ui.push_matrix_apply, SIGNAL(clicked()), this, SLOT(setMatrix())); // Reset button connections connect(ui.push_matrix_reset, SIGNAL(clicked()), this, SIGNAL(editRejected())); connect(ui.push_matrix_reset, SIGNAL(clicked()), this, SLOT(refreshEditor())); // Validation connect(ui.edit_matrix, SIGNAL(textChanged()), this, SLOT(validateEditor())); // Apply/reset enable connect(ui.edit_matrix, SIGNAL(textChanged()), this, SLOT(enableButtons())); // Forward signals from the TextMatrixEditor this->connect(this->ui.edit_matrix, SIGNAL(isInvalid()), SIGNAL(invalidInput())); this->connect(this->ui.edit_matrix, SIGNAL(isValid()), SIGNAL(validInput())); ui.edit_matrix->setCurrentFont(QFont(CE_FONT, CE_FONTSIZE)); *(this->ui.edit_matrix->delimiters()) = CE_PARSE_IGNORE_REGEXP; } CEMatrixEditor::~CEMatrixEditor() { } void CEMatrixEditor::refreshEditor() { Eigen::Matrix3d mat; QString vectorStyleStr = ""; switch (m_ext->matrixCartFrac()) { case Cartesian: switch (m_ext->matrixVectorStyle()) { case RowVectors: vectorStyleStr = "Row Vectors"; mat = m_ext->currentCellMatrix(); break; case ColumnVectors: vectorStyleStr = "Column Vectors"; mat = m_ext->currentCellMatrix().transpose(); break; } this->setWindowTitle(tr("Cell Matrix (%1)", "Unit cell matrix, arg is vector style " "(row or column") .arg(vectorStyleStr)); break; case Fractional: switch (m_ext->matrixVectorStyle()) { case RowVectors: vectorStyleStr = "Row Vectors"; mat = m_ext->currentFractionalMatrix(); break; case ColumnVectors: vectorStyleStr = "Column Vectors"; // TODO check math here: mat = m_ext->currentFractionalMatrix().transpose(); break; } this->setWindowTitle(tr("Fractional Cell Matrix (%1)", "Unit cell matrix, arg is vector style " "(row or column") .arg(vectorStyleStr)); break; } ui.edit_matrix->blockSignals(true); ui.edit_matrix->setMatrix(mat); ui.edit_matrix->blockSignals(false); ui.edit_matrix->setCurrentFont(QFont(CE_FONT, CE_FONTSIZE)); ui.edit_matrix->setEnabled(true); if (m_ext->matrixCartFrac() == Fractional) { ui.edit_matrix->setReadOnly(true); } else { ui.edit_matrix->setReadOnly(false); } ui.push_matrix_apply->setEnabled(false); ui.push_matrix_reset->setEnabled(false); emit validInput(); } void CEMatrixEditor::lockEditor() { ui.edit_matrix->setEnabled(false); } void CEMatrixEditor::unlockEditor() { ui.edit_matrix->setEnabled(true); } void CEMatrixEditor::markAsInvalid() { // Handled internally by TextMatrixEditor } void CEMatrixEditor::markAsValid() { // Handled internally by TextMatrixEditor } void CEMatrixEditor::enableButtons() { ui.push_matrix_apply->setEnabled(true); ui.push_matrix_reset->setEnabled(true); } Eigen::Matrix3d CEMatrixEditor::validateEditor() { // Editing fractional matrix is not allowed. The widget is // disabled to ensure that this assertion passes. Q_ASSERT(m_ext->matrixCartFrac() != Fractional); Eigen::Matrix3d mat (this->ui.edit_matrix->matrix()); // Transpose if needed if (m_ext->matrixVectorStyle() == ColumnVectors) { // Warning: mat = mat.transpose() will *not* work correctly with // Eigen matrices. Use transposeInPlace() instead. mat.transposeInPlace(); } return mat; } void CEMatrixEditor::setMatrix() { Eigen::Matrix3d mat = validateEditor(); if (mat.isZero()) { return; } CEUndoState before (m_ext); m_ext->setCurrentCellMatrix(mat); CEUndoState after (m_ext); m_ext->pushUndo(new CEUndoCommand (before, after, tr("Set Unit Cell Matrix"))); } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cecoordinateeditor.cpp0000644000175000001440000002022212250371054030217 0ustar marcususers/********************************************************************** CECoordinateEditor Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "cecoordinateeditor.h" #include "../ceundo.h" #include "../crystallographyextension.h" namespace Avogadro { CECoordinateEditor::CECoordinateEditor(CrystallographyExtension *ext) : CEAbstractEditor(ext) { ui.setupUi(this); // Emit editStarted connect(ui.edit_coords, SIGNAL(textChanged()), this, SIGNAL(editStarted())); // Apply button connections connect(ui.push_coords_apply, SIGNAL(clicked()), this, SIGNAL(editAccepted())); connect(ui.push_coords_apply, SIGNAL(clicked()), this, SLOT(setCoords())); // Reset button connections connect(ui.push_coords_reset, SIGNAL(clicked()), this, SIGNAL(editRejected())); connect(ui.push_coords_reset, SIGNAL(clicked()), this, SLOT(refreshEditor())); // Validation connect(ui.edit_coords, SIGNAL(textChanged()), this, SLOT(validateEditor())); // Apply/reset enable connect(ui.edit_coords, SIGNAL(textChanged()), this, SLOT(enableButtons())); ui.edit_coords->setCurrentFont(QFont(CE_FONT, CE_FONTSIZE)); m_charFormat = ui.edit_coords->textCursor().charFormat(); } CECoordinateEditor::~CECoordinateEditor() { } void CECoordinateEditor::refreshEditor() { QList symbols = m_ext->currentAtomicSymbols(); QList pos; switch (m_ext->coordsCartFrac()) { case Cartesian: pos = m_ext->currentCartesianCoords(); setWindowTitle(tr("Cartesian Coordinates")); break; case Fractional: pos = m_ext->currentFractionalCoords(); setWindowTitle(tr("Fractional Coordinates")); break; } // Non-fatal assert. If the number of atoms changed // in between the two calls, tail-recurse this function. if (pos.size() != symbols.size()) { return refreshEditor(); } // Clean up number display for (QList::iterator it = pos.begin(), it_end = pos.end(); it != it_end; ++it) { // Remove negative zeros if (fabs(it->x()) < 1e-10) { it->x() = 0.0; } if (fabs(it->y()) < 1e-10) { it->y() = 0.0; } if (fabs(it->z()) < 1e-10) { it->z() = 0.0; } } QString text; char line[256]; for (int i = 0; i < pos.size(); ++i) { snprintf(line, 256, "%2s %9.5f %9.5f %9.5f\n", symbols[i].toStdString().c_str(), pos[i][0], pos[i][1], pos[i][2]); text += line; } ui.edit_coords->blockSignals(true); ui.edit_coords->setText(text); ui.edit_coords->blockSignals(false); ui.edit_coords->setCurrentFont(QFont(CE_FONT, CE_FONTSIZE)); this->setEnabled(true); ui.edit_coords->setEnabled(true); ui.edit_coords->setReadOnly(false); ui.push_coords_apply->setEnabled(false); ui.push_coords_reset->setEnabled(false); emit validInput(); } void CECoordinateEditor::lockEditor() { ui.edit_coords->setEnabled(false); } void CECoordinateEditor::unlockEditor() { ui.edit_coords->setEnabled(true); } void CECoordinateEditor::markAsInvalid() { QTextCursor tc (ui.edit_coords->document()); QTextCharFormat redFormat; redFormat.setForeground(QBrush(Qt::red)); tc.movePosition(QTextCursor::Start); tc.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); ui.edit_coords->blockSignals(true); tc.mergeCharFormat(redFormat); ui.edit_coords->blockSignals(false); ui.edit_coords->setCurrentFont(QFont(CE_FONT, CE_FONTSIZE)); } void CECoordinateEditor::markAsValid() { QTextCursor tc (ui.edit_coords->document()); tc.movePosition(QTextCursor::Start); tc.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); ui.edit_coords->blockSignals(true); tc.setCharFormat(m_charFormat); ui.edit_coords->blockSignals(false); ui.edit_coords->setCurrentFont(QFont(CE_FONT, CE_FONTSIZE)); } void CECoordinateEditor::enableButtons() { ui.push_coords_apply->setEnabled(true); ui.push_coords_reset->setEnabled(true); } void CECoordinateEditor::validateEditor() { // Clear selection, otherwise there is a crash on Qt 4.7.2. QTextCursor tc = ui.edit_coords->textCursor(); tc.clearSelection(); ui.edit_coords->setTextCursor(tc); QStringList list; QString text = ui.edit_coords->document()->toPlainText(); QStringList lines = text.split("\n", QString::SkipEmptyParts); // Clean up lines for (QStringList::iterator it = lines.begin(), it_end = lines.end(); it != it_end; ++it) { *it = it->trimmed(); } lines.removeAll(""); QStringList row; for (QStringList::const_iterator it = lines.constBegin(), it_end = lines.constEnd(); it != it_end; ++it) { row = it->split(CE_PARSE_IGNORE_REGEXP, QString::SkipEmptyParts); if (row.size() != 4) { emit invalidInput(); return; } bool ok; row.at(1).toDouble(&ok); if (ok) { row.at(2).toDouble(&ok); } if (ok) { row.at(3).toDouble(&ok); } if (!ok) { emit invalidInput(); return; } } emit validInput(); } void CECoordinateEditor::setCoords() { // Clear selection, otherwise there is a crash on Qt 4.7.2. QTextCursor tc = ui.edit_coords->textCursor(); tc.clearSelection(); ui.edit_coords->setTextCursor(tc); QStringList list; QString text = ui.edit_coords->document()->toPlainText(); QStringList lines = text.split("\n", QString::SkipEmptyParts); // Clean up lines for (QStringList::iterator it = lines.begin(), it_end = lines.end(); it != it_end; ++it) { *it = it->trimmed(); } lines.removeAll(""); double x,y,z; QStringList ids; QStringList row; QList coords; #if QT_VERSION >= 0x040700 ids.reserve(lines.size()); coords.reserve(lines.size()); #endif for (QStringList::const_iterator it = lines.constBegin(), it_end = lines.constEnd(); it != it_end; ++it) { row = it->split(CE_PARSE_IGNORE_REGEXP, QString::SkipEmptyParts); if (row.size() != 4) { emit invalidInput(); return; } ids.append(row.at(0)); bool ok; x = row.at(1).toDouble(&ok); if (ok) { y = row.at(2).toDouble(&ok); } if (ok) { z = row.at(3).toDouble(&ok); } if (!ok) { emit invalidInput(); return; } coords.append(Eigen::Vector3d(x,y,z)); } if (m_ext->coordsCartFrac() == Fractional) { CEUndoState before (m_ext); m_ext->setCurrentFractionalCoords(ids, coords); CEUndoState after (m_ext); m_ext->pushUndo(new CEUndoCommand (before, after, tr("Set Fractional Coordinates"))); } else { CEUndoState before (m_ext); m_ext->setCurrentCartesianCoords(ids, coords); CEUndoState after (m_ext); m_ext->pushUndo(new CEUndoCommand (before, after, tr("Set Cartesian Coordinates"))); } emit validInput(); } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceabstractdockwidget.h0000644000175000001440000000272112250371054030202 0ustar marcususers/********************************************************************** ceabstractdockwidget.h Base class for crystal builder dockwidgets Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CEABSTRACTDOCKWIDGET_H #define CEABSTRACTDOCKWIDGET_H #include class QMainWindow; namespace Avogadro { class CrystallographyExtension; class CEAbstractDockWidget : public DockWidget { Q_OBJECT public: CEAbstractDockWidget(CrystallographyExtension *ext); virtual ~CEAbstractDockWidget(); Qt::DockWidgetArea preferredWidgetDockArea(); signals: void visibilityChanged(); protected slots: virtual void storeDockWidgetArea(Qt::DockWidgetArea a); protected: virtual void closeEvent(QCloseEvent *); virtual void showEvent(QShowEvent *); virtual void hideEvent(QHideEvent *); CrystallographyExtension *m_ext; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cecoordinateeditor.ui0000644000175000001440000000600312250371054030053 0ustar marcususers CECoordinateEditor 0 0 325 119 0 0 325 119 Fractional Coordinates 0 0 250 60 Monospace true <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Monospace'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;"> H 100.00000 100.00000 100.00000</span></p></body></html> Qt::Horizontal 40 20 &Apply &Reset avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.ui0000644000175000001440000003550612250371054030321 0ustar marcususers CEViewOptionsWidget 0 0 445 253 0 0 QDockWidget::AllDockWidgetFeatures Qt::AllDockWidgetAreas Crystal View Options 0 0 Unit Cell Repeats: false false 0 0 A: 0 0 Qt::AlignCenter 1 Qt::Horizontal 0 20 0 0 B: 0 0 Qt::AlignCenter 1 Qt::Horizontal 0 20 0 0 C: 0 0 Qt::AlignCenter 1 Draw Unit Cell(s)? Qt::Horizontal 0 20 None One All 0 0 Color... 0 0 View Along: false Default View buttonGroup_camera QLayout::SetDefaultConstraint 0 0 55 16777215 Qt::AlignCenter h: -99 Qt::Horizontal 0 20 0 0 55 16777215 Qt::AlignCenter k: -99 Qt::Horizontal 0 20 false 0 0 55 16777215 Qt::AlignCenter i: -99 Qt::Horizontal QSizePolicy::Fixed 0 0 0 0 0 0 55 16777215 Qt::LeftToRight Qt::AlignCenter QAbstractSpinBox::UpDownArrows l: -99 99 0 0 0 21 Miller Indices buttonGroup_camera Qt::Vertical 20 0 avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceslabbuilder.ui0000644000175000001440000003134412250371054027013 0ustar marcususers CESlabBuilder 0 0 393 341 Surface Slab Builder Plane: Qt::Horizontal 40 20 0 0 &Miller Indices: spin_mi_l 0 0 45 16777215 Qt::AlignCenter -99 0 0 45 16777215 Qt::AlignCenter -99 false 0 0 0 0 45 16777215 Qt::LeftToRight Qt::AlignCenter QAbstractSpinBox::UpDownArrows -99 99 0 0 0 0 45 16777215 Qt::LeftToRight Qt::AlignCenter QAbstractSpinBox::UpDownArrows -99 99 Qt::Horizontal 40 20 255 0 0 255 0 0 69 69 69 Warning: Use non-zero Miller Indices Dimensions: Width (x) Width (y) 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 5 1.000000000000000 999.990000000000009 10.000000000000000 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 5 1.000000000000000 999.990000000000009 1.000000000000000 10.000000000000000 Height (z) 0 0 Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter 5 0.100000000000000 999.990000000000009 1.000000000000000 5.000000000000000 length cell repeats length cell repeats Qt::Horizontal 40 20 Build Qt::Horizontal 40 20 Qt::Vertical 20 40 avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/ceparametereditor.h0000644000175000001440000000314712250371054027524 0ustar marcususers/********************************************************************** CEParameterEditor Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CEPARAMETEREDITOR_H #define CEPARAMETEREDITOR_H #include "ceabstracteditor.h" #include "../crystallographyextension.h" #include #include "ui_ceparametereditor.h" namespace Avogadro { class CEParameterEditor : public CEAbstractEditor { Q_OBJECT public: CEParameterEditor(CrystallographyExtension *ext); virtual ~CEParameterEditor(); signals: public slots: void refreshEditor(); void lockEditor(); void unlockEditor(); protected slots: void markAsInvalid(); void markAsValid(); // Enable the apply/reset buttons void enableButtons(); // Returns the current parameters CEUnitCellParameters validateEditor(); // Creates and pushes an undo action while setting the current // parameters void setParameters(); private: Ui::CEParameterEditor ui; QTextCharFormat m_charFormat; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/ui/cetranslatewidget.cpp0000644000175000001440000001636112250371054030073 0ustar marcususers/********************************************************************** cetranslatewidget.cpp Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "cetranslatewidget.h" #include "../ceundo.h" #include #include #include namespace Avogadro { CETranslateWidget::CETranslateWidget(CrystallographyExtension *ext) : CEAbstractDockWidget(ext), m_vector(0,0,0), m_gl(NULL) { ui.setupUi(this); connect(ui.combo_translateMode, SIGNAL(currentIndexChanged(int)), this, SLOT(updateVector())); connect(ui.combo_units, SIGNAL(currentIndexChanged(int)), this, SLOT(updateVector())); connect(ui.spin_x, SIGNAL(valueChanged(double)), this, SLOT(updateVector())); connect(ui.spin_y, SIGNAL(valueChanged(double)), this, SLOT(updateVector())); connect(ui.spin_z, SIGNAL(valueChanged(double)), this, SLOT(updateVector())); connect(ui.push_go, SIGNAL(clicked()), this, SLOT(translate())); connect(&m_selectionTimer, SIGNAL(timeout()), this, SLOT(checkSelection())); connect(ui.combo_units, SIGNAL(currentIndexChanged(int)), this, SLOT(updateGui())); // Set error label to show red text ui.label_error->setStyleSheet("QLabel {color: red;}"); ui.label_error->hide(); readSettings(); } CETranslateWidget::~CETranslateWidget() { writeSettings(); } void CETranslateWidget::updateGui() { // Determine unit string QString lengthSuffix; switch (m_ext->lengthUnit()) { case Angstrom: lengthSuffix = " " + CE_ANGSTROM; break; case Bohr: lengthSuffix = " a" + CE_SUB_ZERO; break; case Nanometer: lengthSuffix = " nm"; break; case Picometer: lengthSuffix = " pm"; break; default: lengthSuffix = ""; break; } ui.spin_x->blockSignals(true); ui.spin_y->blockSignals(true); ui.spin_z->blockSignals(true); ui.spin_x->setValue(m_vector.x()); ui.spin_y->setValue(m_vector.y()); ui.spin_z->setValue(m_vector.z()); ui.spin_x->setSuffix(lengthSuffix); ui.spin_y->setSuffix(lengthSuffix); ui.spin_z->setSuffix(lengthSuffix); ui.spin_x->blockSignals(false); ui.spin_y->blockSignals(false); ui.spin_z->blockSignals(false); } void CETranslateWidget::updateVector() { // Check translation mode switch (static_cast (ui.combo_translateMode->currentIndex())) { // Translating by an arbitrary vector default: case TM_VECTOR: // Disable selection monitor m_selectionTimer.stop(); // Reenable editing of vector enableVectorEditor(); // Clear any lingering errors clearError(); // Pull out the coordinates m_vector.x() = ui.spin_x->value(); m_vector.y() = ui.spin_y->value(); m_vector.z() = ui.spin_z->value(); break; // If we need an atom, check for selections. case TM_ATOM_TO_ORIGIN: case TM_ATOM_TO_CELL_CENTER: // Start selection monitor m_selectionTimer.start(500); // Disable editing of vector disableVectorEditor(); checkSelection(); break; } } void CETranslateWidget::translate() { // Fetch current info const QList symbols = m_ext->currentAtomicSymbols(); QList coords; if (ui.combo_units->currentIndex() == Cartesian) { coords = m_ext->currentCartesianCoords(); } else { coords = m_ext->currentFractionalCoords(); } // Translate coords for (QList::iterator it = coords.begin(), it_end = coords.end(); it != it_end; ++it) { *it += m_vector; } CEUndoState before (m_ext); if (ui.combo_units->currentIndex() == Cartesian) { m_ext->setCurrentCartesianCoords(symbols, coords); } else { m_ext->setCurrentFractionalCoords(symbols, coords); } if (ui.cb_wrap->isChecked()) { m_ext->wrapAtomsToCell(); } CEUndoState after (m_ext); m_ext->pushUndo(new CEUndoCommand (before, after, tr("Translate Atoms"))); } void CETranslateWidget::checkSelection() { // User closed the dialog: if (this->isHidden()) { m_selectionTimer.stop(); return; } // Improper initialization if (m_gl == NULL) return setError(tr("No GLWidget?")); QList atoms = m_gl->selectedPrimitives().subList (Primitive::AtomType); // No selection if (!atoms.size()) return setError(tr("Please select one or more atoms.")); clearError(); // Calculate centroid of selection m_vector = Eigen::Vector3d::Zero(); for (QList::const_iterator it = atoms.constBegin(), it_end = atoms.constEnd(); it != it_end; ++it) { m_vector += (*qobject_cast(*it)->pos()); } m_vector /= static_cast(atoms.size()); switch (static_cast (ui.combo_translateMode->currentIndex())) { default: case Avogadro::CETranslateWidget::TM_VECTOR: // Shouldn't happen, but just in case... m_selectionTimer.stop(); this->enableVectorEditor(); break; case Avogadro::CETranslateWidget::TM_ATOM_TO_ORIGIN: m_vector = -m_vector; break; case Avogadro::CETranslateWidget::TM_ATOM_TO_CELL_CENTER: // Calculate center of unit cell const Eigen::Matrix3d cellRowMatrix = m_ext->currentCellMatrix(); const Eigen::Vector3d center = 0.5 * (cellRowMatrix.row(0) + cellRowMatrix.row(1) + cellRowMatrix.row(2)); // Calculate necessary translation m_vector = center - m_vector; break; } updateGui(); } void CETranslateWidget::disableVectorEditor() { ui.spin_x->setDisabled(true); ui.spin_y->setDisabled(true); ui.spin_z->setDisabled(true); } void CETranslateWidget::enableVectorEditor() { ui.spin_x->setDisabled(false); ui.spin_y->setDisabled(false); ui.spin_z->setDisabled(false); } void CETranslateWidget::setError(const QString &err) { ui.label_error->setText(err); ui.push_go->setEnabled(false); ui.label_error->show(); } void CETranslateWidget::clearError() { ui.label_error->hide(); ui.push_go->setEnabled(true); } void CETranslateWidget::readSettings() { // Just a placeholder for now } void CETranslateWidget::writeSettings() { // Just a placeholder for now } void CETranslateWidget::showEvent(QShowEvent *e) { // Start selection timer if needed: this->updateVector(); this->CEAbstractDockWidget::showEvent(e); } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/stablecomparison.h0000644000175000001440000000417712250371054026761 0ustar marcususers/********************************************************************** StableComp - Functions for comparing numbers with a tolerance Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CE_STABLECOMPARISON #define CE_STABLECOMPARISON #define STABLE_COMP_TOL 1e-5 namespace Avogadro { namespace StableComp { bool lt(double v1, double v2, double prec = STABLE_COMP_TOL) { return ( v1 < (v2 - prec) ); } bool gt(double v1, double v2, double prec = STABLE_COMP_TOL) { return ( v2 < (v1 - prec) ); } bool eq(double v1, double v2, double prec = STABLE_COMP_TOL) { return (!(lt(v1,v2,prec) || gt(v1,v2,prec) ) ); } bool neq(double v1, double v2, double prec = STABLE_COMP_TOL) { return (!(eq(v1,v2,prec))); } bool leq(double v1, double v2, double prec = STABLE_COMP_TOL) { return (!gt(v1, v2, prec)); } bool geq(double v1, double v2, double prec = STABLE_COMP_TOL) { return (!lt(v1, v2, prec)); } double sign(double v) { // consider 0 to be positive if (v >= 0) return 1.0; else return -1.0; } double round(double v, int dec) { const double shift = pow(10.0, dec); const double shifted = v * shift; return floor(shifted+0.5) / shift; } } } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/avospglib.h0000644000175000001440000001630312250371054025374 0ustar marcususers/********************************************************************** AvoSpglib - Spglib wrapper for Avogadro Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef AVOSPGLIB_H #define AVOSPGLIB_H #include #include #include #define AVOSPGLIB_TOL 0.1 namespace OpenBabel { class OBUnitCell; } namespace Avogadro { class Molecule; namespace Spglib { extern "C" { #include "spglib/spglib.h" } /** * Return the spacegroup number of the crystal described by the * arguments. * * @param fcoords Fractional coordinates of atoms. * @param atomicNums Atomic numbers of atoms * @param cellMatrix Unit cell matrix as row vectors. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int getSpacegroup(const QList &fcoords, const QList &atomicNums, const Eigen::Matrix3d &cellMatrix, const double cartTol = AVOSPGLIB_TOL); /** * @overload * * Return the spacegroup number of the crystal described by the * arguments. * * @param fcoords Fractional coordinates of atoms. * @param ids Element symbols of atoms. * @param cellMatrix Unit cell matrix as row vectors. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int getSpacegroup(const QList &fcoords, const QStringList &ids, const Eigen::Matrix3d &cellMatrix, const double cartTol = AVOSPGLIB_TOL); /** * @overload * * Return the spacegroup number of the crystal described by the * arguments. * * @param mol Molecule from which to extract coordinates * @param cell OpenBabel OBUnitCell to use for cell info. If 0 * (default), mol->OBUnitCell() is used. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int getSpacegroup(const Molecule * const mol, OpenBabel::OBUnitCell *cell = 0, const double cartTol = AVOSPGLIB_TOL); /** * Reduce the crystal described by the arguments to it's primitive * form. * * @param fcoords Fractional coordinates of atoms. * @param atomicNums Atomic numbers of atoms * @param cellMatrix Unit cell matrix as row vectors. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int reduceToPrimitive(QList *fcoords, QList *atomicNums, Eigen::Matrix3d *cellMatrix, const double cartTol = AVOSPGLIB_TOL); /** * @overload * * Reduce the crystal described by the arguments to it's primitive * form. * * @param fcoords Fractional coordinates of atoms. * @param ids Element symbols of atoms. * @param cellMatrix Unit cell matrix as row vectors. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int reduceToPrimitive(QList *fcoords, QStringList *ids, Eigen::Matrix3d *cellMatrix, const double cartTol = AVOSPGLIB_TOL); /** * @overload * * Reduce the crystal described by the arguments to it's primitive * form. This overload will also set the spacegroup for \a cell. * * @param mol Molecule from which to extract coordinates * @param cell OpenBabel OBUnitCell to use for cell info. If 0 * (default), mol->OBUnitCell() is used. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int reduceToPrimitive(Molecule *mol, OpenBabel::OBUnitCell *cell = 0, const double cartTol = AVOSPGLIB_TOL); /** * Symmetrize the crystal described by the arguments. * * @note This function returns the symmetrized Bravais cell, which * may contain up to four times as many atoms as the original * cell. * * @param fcoords Fractional coordinates of atoms. * @param atomicNums Atomic numbers of atoms * @param cellMatrix Unit cell matrix as row vectors. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int refineCrystal(QList *fcoords, QList *atomicNums, Eigen::Matrix3d *cellMatrix, const double cartTol = AVOSPGLIB_TOL); /** * @overload * * Symmetrize the crystal described by the arguments. * * @note This function returns the symmetrized Bravais cell, which * may contain up to four times as many atoms as the original * cell. * * @param fcoords Fractional coordinates of atoms. * @param ids Element symbols of atoms. * @param cellMatrix Unit cell matrix as row vectors. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int refineCrystal(QList *fcoords, QStringList *ids, Eigen::Matrix3d *cellMatrix, const double cartTol = AVOSPGLIB_TOL); /** * @overload * * Symmetrize the crystal described by the arguments. * * @note This function returns the symmetrized Bravais cell, which * may contain up to four times as many atoms as the original * cell. * * @param mol Molecule from which to extract coordinates * @param cell OpenBabel OBUnitCell to use for cell info. If 0 * (default), mol->OBUnitCell() is used. * @param cartTol Tolerance in same units as cellMatrix. * * @return Spacegroup number if found, 0 otherwise. */ unsigned int refineCrystal(Molecule *mol, OpenBabel::OBUnitCell *cell = 0, const double cartTol = AVOSPGLIB_TOL); } } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/COPYING0000644000175000001440000000264012250371054024267 0ustar marcususersThe "New" BSD License: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Avogadro nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/0000755000175000001440000000000012250371054024512 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/spglib.h0000644000175000001440000001007312250371054026144 0ustar marcususers/* spglib.h */ /* Copyright (C) 2008 Atsushi Togo */ /* ------------------------------------------------------------------ See usages written in spglib.c. ------------------------------------------------------------------ */ #ifndef __spglib_H__ #define __spglib_H__ /* SPGCONST is used instead of 'const' so to avoid gcc warning. */ /* However there should be better way than this way.... */ #define SPGCONST int spg_get_symmetry( int rotation[][3][3], double translation[][3], const int max_size, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ); int spg_get_conventional_symmetry( double bravais_lattice[3][3], int rotation[][3][3], double translation[][3], const int max_size, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ); int spg_get_multiplicity( SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ); int spg_get_smallest_lattice( double smallest_lattice[3][3], SPGCONST double lattice[3][3], const double symprec ); int spg_get_max_multiplicity( SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ); int spg_find_primitive( double lattice[3][3], double position[][3], int types[], const int num_atom, const double symprec ); void spg_show_symmetry( SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ); int spg_get_international( char symbol[11], SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ); int spg_refine_cell( double lattice[3][3], double position[][3], int types[], const int num_atom, const double symprec ); int spg_get_ir_kpoints( int map[], SPGCONST double kpoints[][3], const int num_kpoints, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const int is_time_reversal, const double symprec ); int spg_get_ir_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ); int spg_get_stabilized_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, SPGCONST double lattice[3][3], const int num_rot, SPGCONST int rotations[][3][3], const int num_q, SPGCONST double qpoints[][3], const double symprec ); int spg_get_triplets_reciprocal_mesh( int triplets[][3], int weight_triplets[], int grid_point[][3], const int num_triplets, const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const int num_rot, SPGCONST int rotations[][3][3], const double symprec ); int spg_get_triplets_reciprocal_mesh_with_q( int triplets_with_q[][3], int weight_triplets_with_q[], const int fixed_grid_number, const int num_triplets, SPGCONST int triplets[][3], const int weight_triplets[], const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const int num_rot, SPGCONST int rotations[][3][3], const double symprec ); int spg_get_schoenflies( char symbol[10], SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/mathfunc.h0000644000175000001440000000545312250371054026477 0ustar marcususers/* mathfunc.h */ /* Copyright (C) 2008 Atsushi Togo */ #ifndef __mathfunc_H__ #define __mathfunc_H__ #define SPGCONST typedef struct { int size; double (*mat)[3][3]; } MatDBL; typedef struct { int size; int (*mat)[3][3]; } MatINT; typedef struct { int size; double (*vec)[3]; } VecDBL; typedef struct { int size; int (*vec)[3]; } VecINT; double mat_get_determinant_d3(SPGCONST double a[3][3]); int mat_get_determinant_i3(SPGCONST int a[3][3]); int mat_get_trace_i3( SPGCONST int a[3][3] ); void mat_copy_matrix_d3(double a[3][3], SPGCONST double b[3][3]); void mat_copy_matrix_i3(int a[3][3], SPGCONST int b[3][3]); void mat_copy_vector_d3(double a[3], const double b[3]); void mat_copy_vector_i3(int a[3], const int b[3]); int mat_check_identity_matrix_i3(SPGCONST int a[3][3], SPGCONST int b[3][3]); int mat_check_identity_matrix_d3( SPGCONST double a[3][3], SPGCONST double b[3][3], const double symprec ); void mat_multiply_matrix_d3(double m[3][3], SPGCONST double a[3][3], SPGCONST double b[3][3]); void mat_multiply_matrix_i3(int m[3][3], SPGCONST int a[3][3], SPGCONST int b[3][3]); void mat_multiply_matrix_di3(double m[3][3], SPGCONST double a[3][3], SPGCONST int b[3][3]); void mat_multiply_matrix_id3( double m[3][3], SPGCONST int a[3][3], SPGCONST double b[3][3]); void mat_multiply_matrix_vector_i3(int v[3], SPGCONST int a[3][3], const int b[3]); void mat_multiply_matrix_vector_d3(double v[3], SPGCONST double a[3][3], const double b[3]); void mat_multiply_matrix_vector_id3(double v[3], SPGCONST int a[3][3], const double b[3]); void mat_add_matrix_i3( int m[3][3], SPGCONST int a[3][3], SPGCONST int b[3][3] ); void mat_cast_matrix_3i_to_3d(double m[3][3], SPGCONST int a[3][3]); void mat_cast_matrix_3d_to_3i(int m[3][3], SPGCONST double a[3][3]); int mat_inverse_matrix_d3(double m[3][3], SPGCONST double a[3][3], SPGCONST double precision); int mat_get_similar_matrix_d3(double m[3][3], SPGCONST double a[3][3], SPGCONST double b[3][3], SPGCONST double precision); void mat_transpose_matrix_d3(double a[3][3], SPGCONST double b[3][3]); void mat_transpose_matrix_i3(int a[3][3], SPGCONST int b[3][3]); void mat_get_metric( double metric[3][3], SPGCONST double lattice[3][3]); double mat_norm_squared_d3( const double a[3] ); int mat_norm_squared_i3( const int a[3] ); double mat_Dabs(const double a); int mat_Nint(const double a); double mat_Dmod1(const double a); MatINT * mat_alloc_MatINT(const int size); void mat_free_MatINT( MatINT * matint ); VecDBL * mat_alloc_VecDBL(const int size); void mat_free_VecDBL( VecDBL * vecdbl ); int mat_is_int_matrix( SPGCONST double mat[3][3], double symprec ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/debug.c0000644000175000001440000000140512250371054025744 0ustar marcususers/* debug.c */ /* Copyright (C) 2008 Atsushi Togo */ #ifdef DEBUG #include #include "debug.h" void dbg_print_matrix_d3(double a[3][3]) { int i; for (i = 0; i < 3; i++) { printf("%f %f %f\n", a[i][0], a[i][1], a[i][2]); } } void dbg_print_matrix_i3(int a[3][3]) { int i; for (i = 0; i < 3; i++) { printf("%d %d %d\n", a[i][0], a[i][1], a[i][2]); } } void dbg_print_vectors_d3(double a[][3], int size) { int i; for (i = 0; i < size; i++) { printf("%d: %f %f %f\n", i + 1, a[i][0], a[i][1], a[i][2]); } } void dbg_print_vectors_with_label(double a[][3], int b[], int size) { int i; for (i = 0; i < size; i++) { printf("%d: %f %f %f\n", b[i], a[i][0], a[i][1], a[i][2]); } } #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/spglib.c0000644000175000001440000003557412250371054026154 0ustar marcususers/* spglib.c */ /* Copyright (C) 2008 Atsushi Togo */ #include #include #include "spglib.h" #include "refinement.h" #include "cell.h" #include "mathfunc.h" #include "pointgroup.h" #include "primitive.h" #include "symmetry.h" #include "symmetry_kpoint.h" #include "spacegroup.h" /* ------------------------------------------------------------------ lattice: Lattice vectors (in Cartesian) [ [ a_x, b_x, c_x ], [ a_y, b_y, c_y ], [ a_z, b_z, c_z ] ] position: Atomic positions (in fractional coordinates) [ [ x1_a, x1_b, x1_c ], [ x2_a, x2_b, x2_c ], [ x3_a, x3_b, x3_c ], ... ] types: Atom types, i.e., species identified by number [ type_1, type_2, type_3, ... ] rotation: Rotation matricies of symmetry operations each rotation is: [ [ r_11, r_12, r_13 ], [ r_21, r_22, r_23 ], [ r_31, r_32, r_33 ] ] translation: Translation vectors of symmetry operations each translation is: [ t_1, t_2, t_3 ] symprec: Tolerance of atomic positions (in fractional coordinate) in finding symmetry operations ------------------------------------------------------------------ Definitio of the operation: r : rotation 3x3 matrix t : translation vector x_new = r * x + t: [ x_new_1 ] [ r_11 r_12 r_13 ] [ x_1 ] [ t_1 ] [ x_new_2 ] = [ r_21 r_22 r_23 ] * [ x_2 ] + [ t_2 ] [ x_new_3 ] [ r_31 r_32 r_33 ] [ x_3 ] [ t_3 ] ------------------------------------------------------------------ */ /* Find symmetry operations. The operations are stored in */ /* ``rotatiion`` and ``translation``. The number of operations is */ /* return as the return value. Rotations and translations are */ /* given in fractional coordinates, and ``rotation[i]`` and */ /* ``translation[i]`` with same index give a symmetry oprations, */ /* i.e., these have to be used togather. */ int spg_get_symmetry( int rotation[][3][3], double translation[][3], const int max_size, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ) { int i, j, size; Symmetry *symmetry; Cell *cell; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); symmetry = sym_get_operation( cell, symprec ); if (symmetry->size > max_size) { fprintf(stderr, "spglib: Indicated max size(=%d) is less than number ", max_size); fprintf(stderr, "spglib: of symmetry operations(=%d).\n", symmetry->size); sym_free_symmetry( symmetry ); return 0; } for (i = 0; i < symmetry->size; i++) { mat_copy_matrix_i3(rotation[i], symmetry->rot[i]); for (j = 0; j < 3; j++) { translation[i][j] = symmetry->trans[i][j]; } } size = symmetry->size; cel_free_cell( cell ); sym_free_symmetry( symmetry ); return size; } /* Considering periodicity of crystal, one of the possible smallest */ /* lattice is searched. The lattice is stored in ``smallest_lattice``. */ int spg_get_smallest_lattice( double smallest_lattice[3][3], SPGCONST double lattice[3][3], const double symprec ) { return lat_smallest_lattice_vector(smallest_lattice, lattice, symprec); } /* Return exact number of symmetry operations. This function may */ /* be used in advance to allocate memoery space for symmetry */ /* operations. Only upper bound is required, */ /* ``spg_get_max_multiplicity`` can be used instead of this */ /* function and ``spg_get_max_multiplicity`` is faster than this */ /* function. */ int spg_get_multiplicity( SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ) { Symmetry *symmetry; Cell *cell; int size; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); symmetry = sym_get_operation( cell, symprec ); size = symmetry->size; cel_free_cell( cell ); sym_free_symmetry( symmetry ); return size; } /* Upper bound of number of symmetry operations is found. */ /* See ``spg_get_multiplicity``. */ int spg_get_max_multiplicity( SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ) { Cell *cell; int num_max_multi; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); /* 48 is the magic number, which is the number of rotations */ /* in the highest point symmetry Oh. */ num_max_multi = sym_get_multiplicity( cell, symprec ) * 48; cel_free_cell( cell ); return num_max_multi; } /* A primitive cell is found from an input cell. Be careful that */ /* ``lattice``, ``position``, and ``types`` are overwritten. */ /* ``num_atom`` is returned as return value. */ /* When any primitive cell is not found, 0 is returned. */ int spg_find_primitive( double lattice[3][3], double position[][3], int types[], const int num_atom, const double symprec ) { int i, j, num_prim_atom=0; Cell *cell, *primitive; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); /* find primitive cell */ if (sym_get_multiplicity( cell, symprec ) > 1) { primitive = prm_get_primitive( cell, symprec ); num_prim_atom = primitive->size; if ( num_prim_atom > 0 ) { mat_copy_matrix_d3( lattice, primitive->lattice ); for ( i = 0; i < primitive->size; i++ ) { types[i] = primitive->types[i]; for (j=0; j<3; j++) { position[i][j] = primitive->position[i][j]; } } cel_free_cell( primitive ); } } else { num_prim_atom = 0; } cel_free_cell( cell ); return num_prim_atom; } /* Print-out space and point groups. This may be useful for */ /* testing, tasting, or debuging. */ void spg_show_symmetry( SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ) { Cell *cell; Spacegroup spacegroup; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); spacegroup = spa_get_spacegroup( cell, symprec ); if (spacegroup.number) { printf("Space group No.%d\n", spacegroup.number); printf(" International: %s\n", spacegroup.international_short); printf(" International(long): %s\n", spacegroup.international_long); printf(" Schoenflies: %s\n", spacegroup.schoenflies); } cel_free_cell( cell ); } /* Space group is found in international table symbol (``symbol``) and */ /* number (return value). 0 is returned when it fails. */ int spg_get_international( char symbol[11], SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ) { Cell *cell; Spacegroup spacegroup; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); spacegroup = spa_get_spacegroup( cell, symprec ); if ( spacegroup.number > 0 ) { strcpy(symbol, spacegroup.international_short); } cel_free_cell( cell ); return spacegroup.number; } /* Bravais lattice with internal atomic points are returned. */ /* The arrays are require to have 4 times larger memory space */ /* those of input cell. */ /* When bravais lattice could not be found, or could not be */ /* symmetrized, 0 is returned. */ int spg_refine_cell( double lattice[3][3], double position[][3], int types[], const int num_atom, const double symprec ) { int i, num_atom_bravais; Cell *cell, *bravais; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); bravais = ref_refine_cell( cell, symprec ); cel_free_cell( cell ); if ( bravais->size > 0 ) { mat_copy_matrix_d3( lattice, bravais->lattice ); num_atom_bravais = bravais->size; for ( i = 0; i < bravais->size; i++ ) { types[i] = bravais->types[i]; mat_copy_vector_d3( position[i], bravais->position[i] ); } } else { num_atom_bravais = 0; } cel_free_cell( bravais ); return num_atom_bravais; } /* Space group is found in schoenflies (``symbol``) and as number (return */ /* value). 0 is returned when it fails. */ int spg_get_schoenflies( char symbol[10], SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ) { Cell *cell; Spacegroup spacegroup; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); spacegroup = spa_get_spacegroup( cell, symprec ); if ( spacegroup.number > 0 ) { strcpy(symbol, spacegroup.schoenflies); } cel_free_cell( cell ); return spacegroup.number; } /* Irreducible k-points are searched from the input k-points */ /* (``kpoints``). The result is returned as a map of */ /* numbers (``map``), where ``kpoints`` and ``map`` have to have */ /* the same number of elements. The array index of ``map`` */ /* corresponds to the reducible k-point numbering. After finding */ /* irreducible k-points, the indices of the irreducible k-points */ /* are mapped to the elements of ``map``, i.e., number of unique */ /* values in ``map`` is the number of the irreducible k-points. */ /* The number of the irreducible k-points is also returned as the */ /* return value. */ int spg_get_ir_kpoints( int map[], SPGCONST double kpoints[][3], const int num_kpoint, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const int is_time_reversal, const double symprec ) { Symmetry *symmetry; Cell *cell; int num_ir_kpoint; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); symmetry = sym_get_operation( cell, symprec ); num_ir_kpoint = kpt_get_irreducible_kpoints( map, kpoints, num_kpoint, lattice, symmetry, is_time_reversal, symprec ); cel_free_cell( cell ); sym_free_symmetry( symmetry ); return num_ir_kpoint; } /* Irreducible reciprocal grid points are searched from uniform */ /* mesh grid points specified by ``mesh`` and ``is_shift``. */ /* ``mesh`` stores three integers. Reciprocal primitive vectors */ /* are divided by the number stored in ``mesh`` with (0,0,0) point */ /* centering. The centering can be shifted only half of one mesh */ /* by setting 1 for each ``is_shift`` element. If 0 is set for */ /* ``is_shift``, it means there is no shift. This limitation of */ /* shifting enables the irreducible k-point search significantly */ /* faster when the mesh is very dense. */ /* The reducible uniform grid points are returned in reduced */ /* coordinates as ``grid_point``. A map between reducible and */ /* irreducible points are returned as ``map`` as in the indices of */ /* ``grid_point``. The number of the irreducible k-points are */ /* returned as the return value. The time reversal symmetry is */ /* imposed by setting ``is_time_reversal`` 1. */ int spg_get_ir_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[], const int num_atom, const double symprec ) { Symmetry *symmetry; Cell *cell; int num_ir; cell = cel_alloc_cell( num_atom ); cel_set_cell( cell, lattice, position, types ); symmetry = sym_get_operation( cell, symprec ); num_ir = kpt_get_irreducible_reciprocal_mesh( grid_point, map, mesh, is_shift, is_time_reversal, lattice, symmetry, symprec ); cel_free_cell( cell ); sym_free_symmetry( symmetry ); return num_ir; } /* The irreducible k-points are searched from unique k-point mesh */ /* grids from real space lattice vectors and rotation matrices of */ /* symmetry operations in real space with stabilizers. The */ /* stabilizers are written in reduced coordinates. Number of the */ /* stabilizers are given by ``num_q``. Reduced k-points are stored */ /* in ``map`` as indices of ``grid_point``. The number of the */ /* reduced k-points with stabilizers are returned as the return */ /* value. */ int spg_get_stabilized_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, SPGCONST double lattice[3][3], const int num_rot, SPGCONST int rotations[][3][3], const int num_q, SPGCONST double qpoints[][3], const double symprec ) { Symmetry *symmetry; int i, num_ir; symmetry = sym_alloc_symmetry( num_rot ); for ( i = 0; i < num_rot; i++ ) { mat_copy_matrix_i3( symmetry->rot[i], rotations[i] ); } num_ir = kpt_get_stabilized_reciprocal_mesh( grid_point, map, mesh, is_shift, is_time_reversal, lattice, symmetry, num_q, qpoints, symprec ); sym_free_symmetry( symmetry ); return num_ir; } /* Irreducible triplets of k-points are searched under conservation of */ /* :math:``\mathbf{k}_1 + \mathbf{k}_2 + \mathbf{k}_3 = \mathbf{G}``. */ int spg_get_triplets_reciprocal_mesh( int triplets[][3], int weight_triplets[], int grid_point[][3], const int num_triplets, const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const int num_rot, SPGCONST int rotations[][3][3], const double symprec ) { Symmetry *symmetry; int i, num_ir; symmetry = sym_alloc_symmetry( num_rot ); for ( i = 0; i < num_rot; i++ ) { mat_copy_matrix_i3( symmetry->rot[i], rotations[i] ); } num_ir = kpt_get_triplets_reciprocal_mesh( triplets, weight_triplets, grid_point, num_triplets, mesh, is_time_reversal, lattice, symmetry, symprec ); sym_free_symmetry( symmetry ); return num_ir; } int spg_get_triplets_reciprocal_mesh_with_q( int triplets_with_q[][3], int weight_triplets_with_q[], const int fixed_grid_number, const int num_triplets, SPGCONST int triplets[][3], const int weight_triplets[], const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const int num_rot, SPGCONST int rotations[][3][3], const double symprec ) { Symmetry *symmetry; int i, num_ir; symmetry = sym_alloc_symmetry( num_rot ); for ( i = 0; i < num_rot; i++ ) { mat_copy_matrix_i3( symmetry->rot[i], rotations[i] ); } num_ir = kpt_get_triplets_reciprocal_mesh_with_q( triplets_with_q, weight_triplets_with_q, fixed_grid_number, num_triplets, triplets, weight_triplets, mesh, is_time_reversal, lattice, symmetry, symprec ); sym_free_symmetry( symmetry ); return num_ir; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/lattice.h0000644000175000001440000000100212250371054026301 0ustar marcususers/* lattice.h */ /* Copyright (C) 2008 Atsushi Togo */ #ifndef __lattice_H__ #define __lattice_H__ #include "mathfunc.h" #include "pointgroup.h" typedef enum { NO_CENTER, BODY, FACE, A_FACE, B_FACE, C_FACE, BASE, R_CENTER, } Centering; int lat_smallest_lattice_vector( double lattice_new[3][3], SPGCONST double lattice[3][3], const double symprec ); Centering lat_get_centering( double correction_mat[3][3], SPGCONST int transform_mat[3][3], const Laue laue ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/spacegroup.c0000644000175000001440000002725012250371054027034 0ustar marcususers/* spacegroup.c */ /* Copyright (C) 2010 Atsushi Togo */ #include #include #include "cell.h" #include "hall_symbol.h" #include "lattice.h" #include "mathfunc.h" #include "pointgroup.h" #include "primitive.h" #include "spacegroup.h" #include "spg_database.h" #include "symmetry.h" #include "debug.h" #define REDUCE_RATE 0.95 static Spacegroup get_spacegroup( SPGCONST Cell * primitive, const double symprec ); static int get_hall_number( double origin_shift[3], double conv_lattice[3][3], Centering * centering, double * tolerance, SPGCONST Cell * primitive, SPGCONST Symmetry * symmetry, const double symprec ); static int get_hall_number_local( double origin_shift[3], double conv_lattice[3][3], Centering * centering, SPGCONST Cell * primitive, SPGCONST Symmetry * symmetry, const double symprec ); static Centering get_transformation_matrix( double trans_mat[3][3], SPGCONST Symmetry * symmetry ); static Cell * get_primitive_with_smallest_lattice( SPGCONST Cell * cell, const double symprec ); static Cell * get_cell_with_smallest_lattice( SPGCONST Cell * cell, const double symprec ); static Symmetry * get_conventional_symmetry( SPGCONST double transform_mat[3][3], const Centering centering, const Symmetry *primitive_sym ); Spacegroup spa_get_spacegroup( SPGCONST Cell * cell, const double symprec ) { Cell *primitive; Spacegroup spacegroup; primitive = get_primitive_with_smallest_lattice( cell, symprec ); if ( primitive->size > -1 ) { spacegroup = get_spacegroup( primitive, symprec ); } else { spacegroup.number = 0; warning_print("spglib: Space group could not be found "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); } cel_free_cell( primitive ); return spacegroup; } Spacegroup spa_get_spacegroup_with_primitive( SPGCONST Cell * primitive, const double symprec ) { Cell *smallest_prim; Spacegroup spacegroup; smallest_prim = get_cell_with_smallest_lattice( primitive, symprec ); if ( smallest_prim->size > 0 ) { spacegroup = get_spacegroup( primitive, symprec ); cel_free_cell( smallest_prim ); } else { spacegroup.number = 0; warning_print("spglib: Space group could not be found "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); } return spacegroup; } Symmetry * spa_get_conventional_symmetry( SPGCONST double transform_mat[3][3], const Centering centering, const Symmetry *primitive_sym ) { return get_conventional_symmetry( transform_mat, centering, primitive_sym ); } static Spacegroup get_spacegroup( SPGCONST Cell * primitive, const double symprec ) { int hall_number; double tolerance; double conv_lattice[3][3]; double origin_shift[3]; Centering centering; Symmetry *symmetry; Spacegroup spacegroup; SpacegroupType spacegroup_type; symmetry = sym_get_operation( primitive, symprec ); if ( symmetry->size == 0 ) { spacegroup.number = 0; warning_print("spglib: Space group could not be found "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); goto ret; } hall_number = get_hall_number( origin_shift, conv_lattice, ¢ering, &tolerance, primitive, symmetry, symprec ); if ( hall_number == 0 ) { spacegroup.number = 0; warning_print("spglib: Space group could not be found "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); goto ret; } spacegroup_type = spgdb_get_spacegroup_type( hall_number ); if ( spacegroup_type.number > 0 ) { mat_copy_matrix_d3( spacegroup.bravais_lattice, conv_lattice ); mat_copy_vector_d3( spacegroup.origin_shift, origin_shift ); spacegroup.number = spacegroup_type.number; spacegroup.hall_number = hall_number; spacegroup.holohedry = spacegroup_type.holohedry; spacegroup.centering = centering; strcpy(spacegroup.schoenflies, spacegroup_type.schoenflies); strcpy(spacegroup.hall_symbol, spacegroup_type.hall_symbol); strcpy(spacegroup.international, spacegroup_type.international); strcpy(spacegroup.international_long, spacegroup_type.international_full); strcpy(spacegroup.international_short, spacegroup_type.international_short); } else { spacegroup.number = 0; warning_print("spglib: Space group could not be found "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); } ret: /* spacegroup.number = 0 when space group was not found. */ sym_free_symmetry( symmetry ); return spacegroup; } static int get_hall_number( double origin_shift[3], double conv_lattice[3][3], Centering * centering, double * tolerance, SPGCONST Cell * primitive, SPGCONST Symmetry * symmetry, const double symprec ) { int pg_num, hall_number, attempt; Symmetry * sym_reduced; *tolerance = symprec; pg_num = ptg_get_pointgroup_number( symmetry ); if ( pg_num > -1 ) { hall_number = get_hall_number_local( origin_shift, conv_lattice, centering, primitive, symmetry, symprec ); if ( hall_number > 0 ) { goto ret; } } /* Reduce tolerance and search hall symbol again when hall symbol */ /* could not be found by the given tolerance. */ /* The situation this happens is that symmetry operations found */ /* don't match any of hall symbol database due to tricky */ /* displacements of atoms from the exact points. */ for ( attempt = 0; attempt < 100; attempt++ ) { *tolerance *= REDUCE_RATE; sym_reduced = sym_reduce_operation( primitive, symmetry, *tolerance ); pg_num = ptg_get_pointgroup_number( sym_reduced ); if ( pg_num > -1 ) { hall_number = get_hall_number_local( origin_shift, conv_lattice, centering, primitive, sym_reduced, symprec ); if ( hall_number > 0 ) { sym_free_symmetry( sym_reduced ); break; } } sym_free_symmetry( sym_reduced ); } debug_print("spglib: Tolerance was changed to %f ", *tolerance); ret: return hall_number; } static int get_hall_number_local( double origin_shift[3], double conv_lattice[3][3], Centering * centering, SPGCONST Cell * primitive, SPGCONST Symmetry * symmetry, const double symprec ) { int hall_number; double trans_mat[3][3]; Symmetry * conv_symmetry; *centering = get_transformation_matrix( trans_mat, symmetry ); mat_multiply_matrix_d3( conv_lattice, primitive->lattice, trans_mat ); conv_symmetry = get_conventional_symmetry( trans_mat, *centering, symmetry ); hall_number = hal_get_hall_symbol( origin_shift, *centering, conv_symmetry, conv_lattice, symprec ); sym_free_symmetry( conv_symmetry ); return hall_number; } static Centering get_transformation_matrix( double trans_mat[3][3], SPGCONST Symmetry * symmetry ) { int pg_num; double correction_mat[3][3]; Centering centering; Pointgroup pointgroup; pg_num = ptg_get_pointgroup_number( symmetry ); pointgroup = ptg_get_pointgroup( pg_num ); ptg_get_transformation_matrix( &pointgroup, symmetry ); /* Centering is not determined only from symmetry operations */ /* sometimes. Therefore centering and transformation matrix are */ /* related. */ centering = lat_get_centering( correction_mat, pointgroup.transform_mat, pointgroup.laue ); mat_multiply_matrix_id3( trans_mat, pointgroup.transform_mat, correction_mat ); debug_print("correction matrix\n"); debug_print_matrix_d3( correction_mat ); return centering; } static Cell * get_primitive_with_smallest_lattice( SPGCONST Cell * cell, const double symprec ) { VecDBL *pure_trans; Cell *primitive; pure_trans = sym_get_pure_translation( cell, symprec ); if ( pure_trans->size > 1 ) { primitive = prm_get_primitive_with_pure_trans( cell, pure_trans, symprec ); } else { primitive = get_cell_with_smallest_lattice( cell, symprec ); } mat_free_VecDBL( pure_trans ); return primitive; } static Cell * get_cell_with_smallest_lattice( SPGCONST Cell * cell, const double symprec ) { int i, j; double min_lat[3][3], trans_mat[3][3], inv_lat[3][3]; Cell * smallest_cell; if ( lat_smallest_lattice_vector( min_lat, cell->lattice, symprec ) ) { mat_inverse_matrix_d3( inv_lat, min_lat, 0 ); mat_multiply_matrix_d3( trans_mat, inv_lat, cell->lattice ); smallest_cell = cel_alloc_cell( cell->size ); mat_copy_matrix_d3( smallest_cell->lattice, min_lat ); for ( i = 0; i < cell->size; i++ ) { smallest_cell->types[i] = cell->types[i]; mat_multiply_matrix_vector_d3( smallest_cell->position[i], trans_mat, cell->position[i] ); for ( j = 0; j < 3; j++ ) { cell->position[i][j] -= mat_Nint( cell->position[i][j] ); } } } else { smallest_cell = cel_alloc_cell( -1 ); } return smallest_cell; } static Symmetry * get_conventional_symmetry( SPGCONST double transform_mat[3][3], const Centering centering, const Symmetry *primitive_sym ) { int i, j, k, multi, size; double tmp_trans; double tmp_matrix_d3[3][3], shift[4][3]; double symmetry_rot_d3[3][3], primitive_sym_rot_d3[3][3]; Symmetry *symmetry; size = primitive_sym->size; if (centering == FACE) { symmetry = sym_alloc_symmetry(size * 4); } else { if (centering) { symmetry = sym_alloc_symmetry(size * 2); } else { symmetry = sym_alloc_symmetry(size); } } for (i = 0; i < size; i++) { mat_cast_matrix_3i_to_3d(primitive_sym_rot_d3, primitive_sym->rot[i]); /* C*S*C^-1: recover conventional cell symmetry operation */ mat_get_similar_matrix_d3( symmetry_rot_d3, primitive_sym_rot_d3, transform_mat, 0 ); mat_cast_matrix_3d_to_3i( symmetry->rot[i], symmetry_rot_d3 ); /* translation in conventional cell: C = B^-1*P */ mat_inverse_matrix_d3( tmp_matrix_d3, transform_mat, 0 ); mat_multiply_matrix_vector_d3( symmetry->trans[i], tmp_matrix_d3, primitive_sym->trans[i] ); } multi = 1; if (centering) { if (centering != FACE) { for (i = 0; i < 3; i++) { shift[0][i] = 0.5; } if (centering == A_FACE) { shift[0][0] = 0; } if (centering == B_FACE) { shift[0][1] = 0; } if (centering == C_FACE) { shift[0][2] = 0; } multi = 2; } if (centering == FACE) { shift[0][0] = 0; shift[0][1] = 0.5; shift[0][2] = 0.5; shift[1][0] = 0.5; shift[1][1] = 0; shift[1][2] = 0.5; shift[2][0] = 0.5; shift[2][1] = 0.5; shift[2][2] = 0; multi = 4; } for (i = 0; i < multi - 1; i++) { for (j = 0; j < size; j++) { mat_copy_matrix_i3( symmetry->rot[(i+1) * size + j], symmetry->rot[j] ); for (k = 0; k < 3; k++) { tmp_trans = symmetry->trans[j][k] + shift[i][k]; symmetry->trans[(i+1) * size + j][k] = tmp_trans; } } } } /* Reduce translations into -0 < trans < 1.0 */ for (i = 0; i < multi; i++) { for (j = 0; j < size; j++) { for (k = 0; k < 3; k++) { tmp_trans = symmetry->trans[i * size + j][k]; tmp_trans -= mat_Nint(tmp_trans); if ( tmp_trans < 0 ) { tmp_trans += 1.0; } symmetry->trans[i * size + j][k] = tmp_trans; } } } #ifdef DEBUG debug_print("Multi: %d\n", multi); debug_print("Centering: %d\n", centering); debug_print("sym size: %d\n", symmetry->size); for (i = 0; i < symmetry->size; i++) { debug_print("--- %d ---\n", i + 1); debug_print_matrix_i3(symmetry->rot[i]); debug_print("%f %f %f\n", symmetry->trans[i][0], symmetry->trans[i][1], symmetry->trans[i][2]); } #endif return symmetry; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/symmetry_kpoint.h0000644000175000001440000000333312250371054030142 0ustar marcususers/* symmetry_kpoints.h */ /* Copyright (C) 2008 Atsushi Togo */ #ifndef __symmetry_kpoints_H__ #define __symmetry_kpoints_H__ #include "symmetry.h" #include "mathfunc.h" int kpt_get_irreducible_kpoints( int map[], SPGCONST double kpoints[][3], const int num_kpoint, SPGCONST double lattice[3][3], const Symmetry * symmetry, const int is_time_reversal, const double symprec ); int kpt_get_irreducible_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry * symmetry, const double symprec ); int kpt_get_stabilized_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry * symmetry, const int num_q, SPGCONST double qpoints[][3], const double symprec ); int kpt_get_triplets_reciprocal_mesh( int triplets[][3], int weight_triplets[], int grid_point[][3], const int num_triplets, const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry * symmetry, const double symprec ); int kpt_get_triplets_reciprocal_mesh_with_q( int triplets_with_q[][3], int weight_with_q[], const int fixed_grid_number, const int num_triplets, SPGCONST int triplets[][3], const int weight[], const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry * symmetry, const double symprec ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/symmetry_kpoint.c0000644000175000001440000005740612250371054030147 0ustar marcususers/* symmetry_kpoints.c */ /* Copyright (C) 2008 Atsushi Togo */ #include #include #include "mathfunc.h" #include "symmetry.h" #include "debug.h" /* #define QXYZ */ /* The addressing order of mesh grid is defined as running left */ /* element first. But when QXYZ is defined, it is changed to right */ /* element first. */ static PointSymmetry get_point_group_rotation( SPGCONST double lattice[3][3], const Symmetry * symmetry, const int is_time_reversal, const double symprec, const int num_q, SPGCONST double q[][3] ); static int get_ir_kpoints( int map[], SPGCONST double kpoints[][3], const int num_kpoint, SPGCONST PointSymmetry * point_symmetry, const double symprec ); static int get_ir_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], SPGCONST PointSymmetry * point_symmetry ); static int get_ir_triplets( int triplets[][3], int weight_triplets[], int grid[][3], const int num_triplets, const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry *symmetry, const double symprec ); static int get_ir_triplets_with_q( int triplets_with_q[][3], int weight_with_q[], const int fixed_grid_number, SPGCONST int triplets[][3], const int num_triplets, const int mesh[3], SPGCONST PointSymmetry * point_symmetry ); static void get_grid_mapping_table( SPGCONST PointSymmetry * point_symmetry, const int mesh[3], int **map_sym, const int is_shift[3] ); static void address_to_grid( int grid_double[3], const int address, const int mesh[3], const int is_shift[3] ); static void get_grid_points( int grid_point[3], const int grid[3], const int mesh[3] ); static void get_vector_modulo( int v[3], const int m[3] ); static int grid_to_address( const int grid[3], const int mesh[3], const int is_shift[3] ); static void free_array2D_int( int **array, const int num_row ); static int ** allocate_array2d_int( const int num_row, const int num_column ); int kpt_get_irreducible_kpoints( int map[], SPGCONST double kpoints[][3], const int num_kpoint, SPGCONST double lattice[3][3], const Symmetry * symmetry, const int is_time_reversal, const double symprec ) { PointSymmetry point_symmetry; point_symmetry = get_point_group_rotation( lattice, symmetry, is_time_reversal, symprec, 0, NULL ); return get_ir_kpoints(map, kpoints, num_kpoint, &point_symmetry, symprec); } /* grid_point (e.g. 4x4x4 mesh) */ /* [[ 0 0 0] */ /* [ 1 0 0] */ /* [ 2 0 0] */ /* [-1 0 0] */ /* [ 0 1 0] */ /* [ 1 1 0] */ /* [ 2 1 0] */ /* [-1 1 0] */ /* .... ] */ /* */ /* Each value of 'map' correspnds to the index of grid_point. */ int kpt_get_irreducible_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry * symmetry, const double symprec ) { PointSymmetry point_symmetry; point_symmetry = get_point_group_rotation( lattice, symmetry, is_time_reversal, symprec, 0, NULL ); return get_ir_reciprocal_mesh(grid_point, map, mesh, is_shift, &point_symmetry); } int kpt_get_stabilized_reciprocal_mesh( int grid_point[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry * symmetry, const int num_q, SPGCONST double qpoints[][3], const double symprec ) { PointSymmetry point_symmetry; point_symmetry = get_point_group_rotation( lattice, symmetry, is_time_reversal, symprec, num_q, qpoints ); return get_ir_reciprocal_mesh(grid_point, map, mesh, is_shift, &point_symmetry); } int kpt_get_triplets_reciprocal_mesh( int triplets[][3], int weight_triplets[], int grid_point[][3], const int num_triplets, const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry * symmetry, const double symprec ) { return get_ir_triplets( triplets, weight_triplets, grid_point, num_triplets, mesh, is_time_reversal, lattice, symmetry, symprec ); } int kpt_get_triplets_reciprocal_mesh_with_q( int triplets_with_q[][3], int weight_with_q[], const int fixed_grid_number, const int num_triplets, SPGCONST int triplets[][3], const int weight[], const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry * symmetry, const double symprec ) { PointSymmetry point_symmetry; point_symmetry = get_point_group_rotation( lattice, symmetry, is_time_reversal, symprec, 0, NULL ); return get_ir_triplets_with_q( triplets_with_q, weight_with_q, fixed_grid_number, triplets, num_triplets, mesh, &point_symmetry ); } /* qpoints are used to find stabilizers (operations). */ /* num_q is the number of the qpoints. */ static PointSymmetry get_point_group_rotation( SPGCONST double lattice[3][3], const Symmetry * symmetry, const int is_time_reversal, const double symprec, const int num_q, SPGCONST double qpoints[][3]) { int i, j, k, l, is_found, count = 0; double volume; double rot_d[3][3], lat_inv[3][3], glat[3][3], tmp_mat[3][3], grot_d[3][3]; double vec[3], diff[3]; MatINT *rotations; PointSymmetry point_symmetry; SPGCONST int time_reversal_rotation[3][3] = { {-1, 0, 0 }, { 0,-1, 0 }, { 0, 0,-1 } }; rotations = mat_alloc_MatINT(symmetry->size*2); volume = mat_get_determinant_d3(lattice); mat_inverse_matrix_d3(lat_inv, lattice, symprec); mat_transpose_matrix_d3(glat, lat_inv); mat_multiply_matrix_d3(tmp_mat, lat_inv, glat); for ( i = 0; i < symmetry->size; i++ ) { mat_cast_matrix_3i_to_3d(rot_d, symmetry->rot[i]); mat_get_similar_matrix_d3(grot_d, rot_d, tmp_mat, symprec / volume / volume); mat_cast_matrix_3d_to_3i(rotations->mat[i], grot_d); mat_multiply_matrix_i3(rotations->mat[symmetry->size+i], time_reversal_rotation, rotations->mat[i]); } for ( i = 0; i < symmetry->size * (1 + (is_time_reversal != 0)); i++ ) { is_found = 1; for ( j = 0; j < count; j++ ) { if (mat_check_identity_matrix_i3(point_symmetry.rot[j], rotations->mat[i])) { is_found = 0; break; } } if ( is_found ) { for ( k = 0; k < num_q; k++ ) { /* Loop to find stabilizers */ is_found = 0; mat_multiply_matrix_vector_id3( vec, rotations->mat[i], qpoints[k] ); for ( l = 0; l < num_q; l++ ) { diff[0] = vec[0] - qpoints[l][0]; diff[1] = vec[1] - qpoints[l][1]; diff[2] = vec[2] - qpoints[l][2]; if ( mat_Dabs( diff[0] - mat_Nint( diff[0] ) ) < symprec && mat_Dabs( diff[1] - mat_Nint( diff[1] ) ) < symprec && mat_Dabs( diff[2] - mat_Nint( diff[2] ) ) < symprec ) { is_found = 1; break; } } if ( is_found == 0 ) { break; } } if ( is_found ) { mat_copy_matrix_i3(point_symmetry.rot[count], rotations->mat[i]); count++; } } } point_symmetry.size = count; mat_free_MatINT(rotations); return point_symmetry; } static int get_ir_kpoints( int map[], SPGCONST double kpoints[][3], const int num_kpoint, SPGCONST PointSymmetry * point_symmetry, const double symprec ) { int i, j, k, l, num_ir_kpoint = 0, is_found; int *ir_map; double kpt_rot[3], diff[3]; ir_map = (int*)malloc(num_kpoint*sizeof(int)); for ( i = 0; i < num_kpoint; i++ ) { map[i] = i; is_found = 1; for ( j = 0; j < point_symmetry->size; j++ ) { mat_multiply_matrix_vector_id3(kpt_rot, point_symmetry->rot[j], kpoints[i]); for ( k = 0; k < 3; k++ ) { diff[k] = kpt_rot[k] - kpoints[i][k]; diff[k] = diff[k] - mat_Nint(diff[k]); } if ( mat_Dabs(diff[0]) < symprec && mat_Dabs(diff[1]) < symprec && mat_Dabs(diff[2]) < symprec ) { continue; } for ( k = 0; k < num_ir_kpoint; k++ ) { mat_multiply_matrix_vector_id3(kpt_rot, point_symmetry->rot[j], kpoints[i]); for ( l = 0; l < 3; l++ ) { diff[l] = kpt_rot[l] - kpoints[ir_map[k]][l]; diff[l] = diff[l] - mat_Nint(diff[l]); } if ( mat_Dabs(diff[0]) < symprec && mat_Dabs(diff[1]) < symprec && mat_Dabs(diff[2]) < symprec ) { is_found = 0; map[i] = ir_map[k]; break; } } if ( ! is_found ) break; } if ( is_found ) { ir_map[num_ir_kpoint] = i; num_ir_kpoint++; } } free( ir_map ); ir_map = NULL; return num_ir_kpoint; } static int get_ir_reciprocal_mesh( int grid[][3], int map[], const int mesh[3], const int is_shift[3], SPGCONST PointSymmetry * point_symmetry ) { /* In the following loop, mesh is doubled. */ /* Even and odd mesh numbers correspond to */ /* is_shift[i] = 0 and 1, respectively. */ /* is_shift = [0,0,0] gives Gamma center mesh. */ /* grid: reducible grid points */ /* map: the mapping from each point to ir-point. */ int i, j, k, l, address, address_rot, num_ir = 0; int grid_double[3], grid_rot[3], mesh_double[3]; for ( i = 0; i < 3; i++ ) mesh_double[i] = mesh[i] * 2; /* "-1" means the element is not touched yet. */ for ( i = 0; i < mesh[0] * mesh[1] * mesh[2]; i++ ) { map[i] = -1; } #ifndef QXYZ for ( i = 0; i < mesh_double[2]; i++ ) { if ( ( is_shift[2] && i % 2 == 0 ) || ( is_shift[2] == 0 && i % 2 != 0 ) ) continue; for ( j = 0; j < mesh_double[1]; j++ ) { if ( ( is_shift[1] && j % 2 == 0 ) || ( is_shift[1] == 0 && j % 2 != 0 ) ) continue; for ( k = 0; k < mesh_double[0]; k++ ) { if ( ( is_shift[0] && k % 2 == 0 ) || ( is_shift[0] == 0 && k % 2 != 0 ) ) continue; grid_double[0] = k; grid_double[1] = j; grid_double[2] = i; #else for ( i = 0; i < mesh_double[0]; i++ ) { if ( ( is_shift[0] && i % 2 == 0 ) || ( is_shift[0] == 0 && i % 2 != 0 ) ) continue; for ( j = 0; j < mesh_double[1]; j++ ) { if ( ( is_shift[1] && j % 2 == 0 ) || ( is_shift[1] == 0 && j % 2 != 0 ) ) continue; for ( k = 0; k < mesh_double[2]; k++ ) { if ( ( is_shift[2] && k % 2 == 0 ) || ( is_shift[2] == 0 && k % 2 != 0 ) ) continue; grid_double[0] = i; grid_double[1] = j; grid_double[2] = k; #endif address = grid_to_address( grid_double, mesh, is_shift ); get_grid_points(grid[ address ], grid_double, mesh); for ( l = 0; l < point_symmetry->size; l++ ) { mat_multiply_matrix_vector_i3( grid_rot, point_symmetry->rot[l], grid_double ); get_vector_modulo(grid_rot, mesh_double); address_rot = grid_to_address( grid_rot, mesh, is_shift ); if ( address_rot > -1 ) { /* Invalid if even --> odd or odd --> even */ if ( map[ address_rot ] > -1 ) { map[ address ] = map[ address_rot ]; break; } } } /* Set itself to the map when equivalent point */ /* with smaller numbering could not be found. */ if ( map[ address ] == -1 ) { map[ address ] = address; num_ir++; } } } } return num_ir; } /* Unique q-point triplets that conserve the momentum, */ /* q+q'+q''=G, are obtained. */ /* */ /* The first q-point is selected among the ir-q-points. */ /* The second q-point is selected among the ir-q-points */ /* constrained by the first q-point (stabilizer) */ /* The third q-point is searched through the all grid */ /* points and is checked if it satisfies q+q'+q''=G, */ /* here q, q', and q'' can be exchanged one another. */ static int get_ir_triplets( int triplets[][3], int weight_triplets[], int grid[][3], const int max_num_triplets, const int mesh[3], const int is_time_reversal, SPGCONST double lattice[3][3], const Symmetry *symmetry, const double symprec ) { int i, j, l, m, num_ir, is_found, weight, weight_q; int num_triplets=0, num_unique_q=0; int mesh_double[3], address[3], is_shift[3]; int grid_double[3][3]; const int num_grid = mesh[0] * mesh[1] * mesh[2]; int *map, *map_q, *unique_q; int **map_sym, **map_triplets; double q[3]; PointSymmetry point_symmetry, point_symmetry_q; map_sym = allocate_array2d_int( symmetry->size, num_grid ); map = (int*)malloc(num_grid * sizeof(int)); map_q = (int*)malloc(num_grid * sizeof(int)); unique_q = (int*)malloc(num_grid * sizeof(int)); point_symmetry = get_point_group_rotation( lattice, symmetry, is_time_reversal, symprec, 0, NULL ); /* Only consider the gamma-point */ for ( i = 0; i < 3; i++ ) is_shift[i] = 0; num_ir = get_ir_reciprocal_mesh( grid, map, mesh, is_shift, &point_symmetry ); map_triplets = allocate_array2d_int( num_ir, num_grid ); for ( i = 0; i < 3; i++ ) mesh_double[i] = mesh[i] * 2; /* Memory space check */ if ( num_ir * num_grid < max_num_triplets ) { warning_print("spglib: More memory space for triplets is required "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); goto err; } /* Prepare triplet mapping table to enhance speed of query */ /* 'unique_q' table is prepared for saving memory space */ for ( i = 0; i < num_grid; i++ ) { if ( i == map[i] ) { unique_q[i] = num_unique_q; num_unique_q++; } else { unique_q[i] = unique_q[map[i]]; } } for ( i = 0; i < num_ir; i++ ) for ( j = 0; j < num_grid; j++ ) map_triplets[i][j] = 0; /* Prepare grid point mapping table */ get_grid_mapping_table( &point_symmetry, mesh, map_sym, is_shift ); /* Search triplets without considersing combination */ for ( i = 0; i < num_grid; i++ ) { if ( i != map[ i ] ) continue; weight = 0; for ( j = 0; j < num_grid; j++ ) { if ( i == map[j] ) weight++; } /* Search irreducible q-points (map_q) with a stabilizer */ address_to_grid( grid_double[0], i, mesh, is_shift ); for ( j = 0; j < 3; j++ ) { q[j] = (double)grid_double[0][j] / mesh_double[j]; } point_symmetry_q = get_point_group_rotation( lattice, symmetry, is_time_reversal, symprec, 1, q ); get_ir_reciprocal_mesh(grid, map_q, mesh, is_shift, &point_symmetry_q); for ( j = 0; j < num_grid; j++ ) { if ( j != map_q[ j ] ) { continue; } weight_q = 0; for ( l = 0; l < num_grid; l++ ) { if ( j == map_q[l] ) { weight_q++; } } address_to_grid( grid_double[1], j, mesh, is_shift ); grid_double[2][0] = - grid_double[0][0] - grid_double[1][0]; grid_double[2][1] = - grid_double[0][1] - grid_double[1][1]; grid_double[2][2] = - grid_double[0][2] - grid_double[1][2]; get_vector_modulo( grid_double[2], mesh_double ); /* Look for irreducible triplets exchanging three q-points */ /* and searching by symmetry rotations */ is_found = 0; for ( l = 0; l < point_symmetry.size; l++ ) { /* Check six combinations */ for ( m = 0; m < 3; m++ ) { address[m%3] = map_sym[l][i]; address[(m+1)%3] = map_sym[l][j]; address[(m+2)%3] = map_sym[l][grid_to_address( grid_double[2], mesh, is_shift )]; /* Found in the list (even) */ if ( address[0] == map[address[0]] ) { if ( map_triplets[ unique_q[address[0]] ][ address[1] ] ) { is_found = 1; map_triplets[ unique_q[address[0]] ][ address[1] ] += weight * weight_q; break; } } /* Found in the list (odd) */ if ( address[1] == map[address[1]] ) { if ( map_triplets[ unique_q[ address[1]] ][ address[0] ] ) { is_found = 1; map_triplets[ unique_q[ address[1]] ][ address[0] ] += weight * weight_q; break; } } } if ( is_found ) break; } /* Not found in the list, then this is an irreducible triplet. */ if (! is_found ) { triplets[num_triplets][0] = i; triplets[num_triplets][1] = j; triplets[num_triplets][2] = grid_to_address( grid_double[2], mesh, is_shift ); num_triplets++; map_triplets[unique_q[i]][j] = weight * weight_q; } } } for ( i = 0; i < num_triplets; i++ ) weight_triplets[i] = map_triplets[ unique_q[ triplets[i][0]] ][ triplets[i][1] ]; free_array2D_int( map_sym, symmetry->size ); free_array2D_int( map_triplets, num_ir ); free( map ); free( map_q ); free( unique_q ); return num_triplets; err: free_array2D_int( map_sym, symmetry->size ); free_array2D_int( map_triplets, num_ir ); free( map ); free( map_q ); free( unique_q ); return 0; } static int get_ir_triplets_with_q( int triplets_with_q[][3], int weight_with_q[], const int fixed_grid_number, SPGCONST int triplets[][3], const int num_triplets, const int mesh[3], SPGCONST PointSymmetry *point_symmetry ) { int i, j, k, sym_num, rest_index, num_triplets_with_q; int address0, address1, address1_orig, found; int is_shift[3]; const int num_grid = mesh[0] * mesh[1] * mesh[2]; int **map_sym; map_sym = allocate_array2d_int( point_symmetry->size, num_grid ); /* Only consider the gamma-point */ for ( i = 0; i < 3; i++ ) { is_shift[i] = 0; } /* Prepare mapping tables */ get_grid_mapping_table( point_symmetry, mesh, map_sym, is_shift ); num_triplets_with_q = 0; for ( i = 0; i < num_triplets; i++ ) { sym_num = -1; for ( j = 0; j < point_symmetry->size; j++ ) { address0 = map_sym[j][fixed_grid_number]; if ( triplets[i][0] == address0 || triplets[i][1] == address0 || triplets[i][2] == address0 ) { for ( k = 0; k < num_grid; k++ ) { address1 = map_sym[j][k]; /* Matching indices 0 and 1 */ if ( ( triplets[i][0] == address0 && triplets[i][1] == address1 ) || ( triplets[i][1] == address0 && triplets[i][0] == address1 ) ) { sym_num = j; rest_index = 2; address1_orig = k; break; } /* Matching indices 1 and 2 */ if ( ( triplets[i][1] == address0 && triplets[i][2] == address1 ) || ( triplets[i][2] == address0 && triplets[i][1] == address1 ) ) { sym_num = j; rest_index = 0; address1_orig = k; break; } /* Matching indices 2 and 0 */ if ( ( triplets[i][2] == address0 && triplets[i][0] == address1 ) || ( triplets[i][0] == address0 && triplets[i][2] == address1 ) ) { sym_num = j; rest_index = 1; address1_orig = k; break; } } if ( sym_num > -1 ) { break; } } } /* Found? */ if ( sym_num > -1 ) { for ( j = 0; j < num_grid; j++ ) { if ( map_sym[sym_num][j] == triplets[i][rest_index] ) { triplets_with_q[num_triplets_with_q][0] = fixed_grid_number; if ( j > address1_orig ) { triplets_with_q[num_triplets_with_q][1] = address1_orig; triplets_with_q[num_triplets_with_q][2] = j; } else { triplets_with_q[num_triplets_with_q][2] = address1_orig; triplets_with_q[num_triplets_with_q][1] = j; } num_triplets_with_q++; break; } } } } for ( i = 0; i < num_triplets_with_q; i++ ) { weight_with_q[i] = 0; } for ( i = 0; i < num_grid; i++ ) { found = 0; for ( j = 0; j < num_triplets_with_q; j++ ) { for ( k = 0; k < point_symmetry->size; k++ ) { if ( map_sym[k][fixed_grid_number] == triplets_with_q[j][0] ) { if ( map_sym[k][i] == triplets_with_q[j][1] || map_sym[k][i] == triplets_with_q[j][2] ) { weight_with_q[j]++; found = 1; break; } } if ( map_sym[k][fixed_grid_number] == triplets_with_q[j][1] ) { if ( map_sym[k][i] == triplets_with_q[j][2] || map_sym[k][i] == triplets_with_q[j][0] ) { weight_with_q[j]++; found = 1; break; } } if ( map_sym[k][fixed_grid_number] == triplets_with_q[j][2] ) { if ( map_sym[k][i] == triplets_with_q[j][0] || map_sym[k][i] == triplets_with_q[j][1] ) { weight_with_q[j]++; found = 1; break; } } } if ( found ) { break; } } if ( ! found ) { warning_print("spglib: Unexpected behavior in get_ir_triplets_with_q "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); num_triplets_with_q = 0; break; } } free_array2D_int( map_sym, point_symmetry->size ); return num_triplets_with_q; } static void get_grid_mapping_table( SPGCONST PointSymmetry *point_symmetry, const int mesh[3], int **map_sym, const int is_shift[3] ) { int i, j; int grid_rot[3], grid_double[3], mesh_double[3]; for ( i = 0; i < 3; i++ ) mesh_double[i] = mesh[i] * 2; for ( i = 0; i < point_symmetry->size; i++ ) { for ( j = 0; j < mesh[0]*mesh[1]*mesh[2]; j++ ) { address_to_grid( grid_double, j, mesh, is_shift ); mat_multiply_matrix_vector_i3( grid_rot, point_symmetry->rot[i], grid_double ); get_vector_modulo( grid_rot, mesh_double ); map_sym[i][j] = grid_to_address( grid_rot, mesh, is_shift ); } } } static int grid_to_address( const int grid_double[3], const int mesh[3], const int is_shift[3] ) { int i, grid[3]; for ( i = 0; i < 3; i++ ) { if ( grid_double[i] % 2 == 0 && (! is_shift[i]) ) { grid[i] = grid_double[i] / 2; } else { if ( grid_double[i] % 2 != 0 && is_shift[i] ) { grid[i] = ( grid_double[i] - 1 ) / 2; } else { return -1; } } } #ifndef QXYZ return grid[2] * mesh[0] * mesh[1] + grid[1] * mesh[0] + grid[0]; #else return grid[0] * mesh[1] * mesh[2] + grid[1] * mesh[2] + grid[2]; #endif } static void address_to_grid( int grid_double[3], const int address, const int mesh[3], const int is_shift[3] ) { int i; int grid[3]; #ifndef QXYZ grid[2] = address / ( mesh[0] * mesh[1] ); grid[1] = ( address - grid[2] * mesh[0] * mesh[1] ) / mesh[0]; grid[0] = address % mesh[0]; #else grid[0] = address / ( mesh[1] * mesh[2] ); grid[1] = ( address - grid[0] * mesh[1] * mesh[2] ) / mesh[2]; grid[2] = address % mesh[2]; #endif for ( i = 0; i < 3; i++ ) { grid_double[i] = grid[i] * 2 + is_shift[i]; } } static void get_grid_points( int grid[3], const int grid_double[3], const int mesh[3] ) { int i; for ( i = 0; i < 3; i++ ) { if ( grid_double[i] % 2 == 0 ) { grid[i] = grid_double[i] / 2; } else { grid[i] = ( grid_double[i] - 1 ) / 2; } grid[i] = grid[i] - mesh[i] * ( grid[i] > mesh[i] / 2 ); } } static void get_vector_modulo( int v[3], const int m[3] ) { int i; for ( i = 0; i < 3; i++ ) { v[i] = v[i] % m[i]; if ( v[i] < 0 ) v[i] += m[i]; } } static void free_array2D_int( int **array, const int num_row ) { int i; for ( i = 0; i < num_row; i++ ) { free( array[i] ); array[i] = NULL; } free( array ); array = NULL; } static int ** allocate_array2d_int( const int num_row, const int num_column ) { int i; int **array = (int**)malloc(num_row * sizeof(int*)); for (i = 0; i < num_row; i++) { array[i] = (int*)malloc(num_column * sizeof(int)); } return array; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/lattice.c0000644000175000001440000001663712250371054026320 0ustar marcususers/* lattice.c */ /* Copyright (C) 2010 Atsushi Togo */ #include #include #include "lattice.h" #include "mathfunc.h" #include "pointgroup.h" #include "debug.h" #define INT_PREC 0.1 static double identity[3][3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }; #ifdef DEBUG static double monocli_i2c[3][3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 1, 0, 1 } }; static double tetra_f2i_c2p[3][3] = { { 0.5,-0.5, 0.0 }, { 0.5, 0.5, 0.0 }, { 0.0, 0.0, 1.0 } }; static double hexa_h2p[3][3] = { { 2./3,-1./3, 0.0 }, { 1./3, 1./3, 0.0 }, { 0.0, 0.0, 1.0 } }; #endif static double rhombo_obverse[3][3] = { { 2./3,-1./3,-1./3 }, { 1./3, 1./3,-2./3 }, { 1./3, 1./3, 1./3 } }; static double rhomb_reverse[3][3] = { { 1./3,-2./3, 1./3 }, { 2./3,-1./3,-1./3 }, { 1./3, 1./3, 1./3 } }; static Centering get_centering( double correction_mat[3][3], SPGCONST int transform_mat[3][3], const Laue laue ); static int get_Delaunay_reduction( double red_lattice[3][3], SPGCONST double lattice[3][3], SPGCONST double symprec ); static Centering get_base_center( SPGCONST int transform_mat[3][3] ); static int get_Delaunay_reduction_basis( double basis[4][3], const double symprec ); static void get_Delaunay_shortest_vectors( double basis[4][3], const double symprec ); static void get_exteneded_basis( double basis[4][3], SPGCONST double lattice[3][3] ); int lat_smallest_lattice_vector( double min_lattice[3][3], SPGCONST double lattice[3][3], const double symprec ) { return get_Delaunay_reduction( min_lattice, lattice, symprec ); } Centering lat_get_centering( double correction_mat[3][3], SPGCONST int transform_mat[3][3], const Laue laue ) { return get_centering( correction_mat, transform_mat, laue ); } static Centering get_centering( double correction_mat[3][3], SPGCONST int transform_mat[3][3], const Laue laue ) { int det; double trans_corr_mat[3][3]; Centering centering; mat_copy_matrix_d3( correction_mat, identity ); det = abs( mat_get_determinant_i3( transform_mat ) ); debug_print("laue class: %d\n", laue ); debug_print("multiplicity: %d\n", det ); if ( det == 1 ) { centering = NO_CENTER; } if ( det == 2 ) { centering = get_base_center( transform_mat ); } if ( det == 3 ) { centering = NO_CENTER; mat_multiply_matrix_id3( trans_corr_mat, transform_mat, rhombo_obverse ); if ( mat_is_int_matrix( trans_corr_mat, INT_PREC ) ) { mat_copy_matrix_d3( correction_mat, rhombo_obverse ); debug_print("R-center observe setting\n"); debug_print_matrix_d3( trans_corr_mat ); } mat_multiply_matrix_id3( trans_corr_mat, transform_mat, rhomb_reverse ); if ( mat_is_int_matrix( trans_corr_mat, INT_PREC ) ) { mat_copy_matrix_d3( correction_mat, rhomb_reverse ); debug_print("R-center reverse setting\n"); debug_print_matrix_d3( trans_corr_mat ); } } if ( det == 4 ) { centering = FACE; } return centering; } static Centering get_base_center( SPGCONST int transform_mat[3][3] ) { int i; Centering centering = NO_CENTER; debug_print("lat_get_base_center\n"); /* C center */ for (i = 0; i < 3; i++) { if ( transform_mat[i][0] == 0 && transform_mat[i][1] == 0 && abs( transform_mat[i][2] ) == 1 ) { centering = C_FACE; goto end; } } /* A center */ for (i = 0; i < 3; i++) { if ( abs( transform_mat[i][0] ) == 1 && transform_mat[i][1] == 0 && transform_mat[i][2] == 0 ) { centering = A_FACE; goto end; } } /* B center */ for (i = 0; i < 3; i++) { if ( transform_mat[i][0] == 0 && abs( transform_mat[i][1] ) == 1 && transform_mat[i][2] == 0 ) { centering = B_FACE; goto end; } } /* body center */ if ( abs( transform_mat[0][0] ) + abs( transform_mat[0][1] ) + abs( transform_mat[0][2] ) == 2 ) { centering = BODY; goto end; } /* This should not happen. */ warning_print("spglib: No centring was found (line %d, %s).\n", __LINE__, __FILE__); return NO_CENTER; end: debug_print("centering: %d\n", centering); return centering; } /* Delaunay reduction */ /* Reference can be found in International table A. */ static int get_Delaunay_reduction( double red_lattice[3][3], SPGCONST double lattice[3][3], const double symprec ) { int i, j; double volume; double basis[4][3]; get_exteneded_basis(basis, lattice); while (1) { if (get_Delaunay_reduction_basis(basis, symprec)) { break; } } get_Delaunay_shortest_vectors( basis, symprec ); for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { red_lattice[i][j] = basis[j][i]; } } volume = mat_get_determinant_d3( red_lattice ); if ( mat_Dabs( volume ) < symprec ) { warning_print("spglib: Minimum lattice has no volume (line %d, %s).\n", __LINE__, __FILE__); goto err; } if ( volume < 0 ) { /* Flip axes */ for (i = 0; i < 3; i++) { for ( j = 0; j < 3; j++ ) { red_lattice[i][j] = -red_lattice[i][j]; } } } #ifdef DEBUG debug_print("Delaunay reduction:\n"); debug_print_matrix_d3(red_lattice); double metric[3][3]; mat_get_metric( metric, red_lattice ); debug_print("It's metric tensor.\n"); debug_print_matrix_d3( metric ); #endif return 1; err: return 0; } static void get_Delaunay_shortest_vectors( double basis[4][3], const double symprec ) { int i, j; double tmpmat[3][3], b[7][3], tmpvec[3]; /* Search in the set {b1, b2, b3, b4, b1+b2, b2+b3, b3+b1} */ for ( i = 0; i < 4; i++ ) { for ( j = 0; j < 3; j++ ) { b[i][j] = basis[i][j]; } } for ( i = 0; i < 3; i++ ) { b[4][i] = basis[0][i] + basis[1][i]; } for ( i = 0; i < 3; i++ ) { b[5][i] = basis[1][i] + basis[2][i]; } for ( i = 0; i < 3; i++ ) { b[6][i] = basis[2][i] + basis[0][i]; } /* Bubble sort */ for ( i = 0; i < 6; i++ ) { for ( j = 0; j < 6; j++ ) { if ( mat_norm_squared_d3( b[j] ) > mat_norm_squared_d3( b[j+1] ) ) { mat_copy_vector_d3( tmpvec, b[j] ); mat_copy_vector_d3( b[j], b[j+1] ); mat_copy_vector_d3( b[j+1], tmpvec ); } } } for ( i = 2; i < 7; i++ ) { for ( j = 0; j < 3; j++ ) { tmpmat[j][0] = b[0][j]; tmpmat[j][1] = b[1][j]; tmpmat[j][2] = b[i][j]; } if ( mat_Dabs( mat_get_determinant_d3( tmpmat ) ) > symprec ) { for ( j = 0; j < 3; j++ ) { basis[0][j] = b[0][j]; basis[1][j] = b[1][j]; basis[2][j] = b[i][j]; } break; } } } static int get_Delaunay_reduction_basis( double basis[4][3], const double symprec ) { int i, j, k, l; double dot_product; for ( i = 0; i < 4; i++ ) { for ( j = i+1; j < 4; j++ ) { dot_product = 0.0; for ( k = 0; k < 3; k++ ) { dot_product += basis[i][k] * basis[j][k]; } if ( dot_product > symprec ) { for ( k = 0; k < 4; k++ ) { if ( ! ( k == i || k == j ) ) { for ( l = 0; l < 3; l++ ) { basis[k][l] += basis[i][l]; } } } for ( k = 0; k < 3; k++ ) { basis[i][k] = -basis[i][k]; } return 0; } } } return 1; } static void get_exteneded_basis( double basis[4][3], SPGCONST double lattice[3][3] ) { int i, j; for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { basis[i][j] = lattice[j][i]; } } for ( i = 0; i < 3; i++ ) { basis[3][i] = -lattice[i][0] -lattice[i][1] -lattice[i][2]; } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/hall_symbol.c0000644000175000001440000023524512250371054027176 0ustar marcususers/* hall_symbol.c */ /* Copyright (C) 2010 Atsushi Togo */ #include #include "lattice.h" #include "hall_symbol.h" #include "spg_database.h" #include "spacegroup.h" #include "symmetry.h" #include "mathfunc.h" #include "debug.h" /* See: R. W. Grosse-Kunstleve, Acta Cryst. (1999). A55, 383-395 */ /* */ /* S is the Smith normal form, S = U*M*V */ /* M = R - I, where R is virtical stack of generator rotation matrices */ /* and I is virtical stack of identity matrices. */ /* */ /* Origin shift is given by (V*S+*U)*dw where dw is translations */ /* corresponding to those obtained by symmetry finder and from */ /* International table. */ /* S+ is given by the operations of inversion of the diagonal elements */ /* and then transpose. */ static double tricli_VSpU[][3][9] = { { /* 1 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, }; static int tricli_generators[][3][9] = { { /* 1 */ { 1, 0, 0, 0, 1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 1, 0, 0, 0, 1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, }; static double monocli_A_VSpU[][3][9] = { { /* 1 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, -1, 0, 0, 1.0/2, 0, 0, 0, 0, }, }, { /* 5 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 1, 0, 0, -1.0/2, 0, 0, 0, 0, }, }, { /* 7 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 1, 0, 0, -1.0/2, 0, 0, 0, 0, }, }, { /* 11 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 1, 0, 0, -1.0/2, 0, 0, 0, 0, }, }, }; static double monocli_B_VSpU[][3][9] = { { /* 1 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 3 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 5 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, }, { /* 7 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, }; static double monocli_C_VSpU[][3][9] = { { /* 1 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 5 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 7 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, }; static double monocli_I_VSpU[][3][9] = { { /* 1 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1.0/2, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 3 */ { -1, 1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1, -1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, }, }, { /* 5 */ { -1, 0, 1.0/2, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, -1.0/2, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 7 */ { 0, 1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1.0/2, 0, 1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, }; static double monocli_VSpU[][3][9] = { { /* 1 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 5 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 7 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, }; static int monocli_generators[][3][9] = { { /* 1 */ { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { -1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { -1, 0, 0, 0, 1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 5 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 7 */ { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 1, 0, 0, 0, -1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 11 */ { 1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 1, 0, 0, 0, -1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, }; static double ortho_A_VSpU[][3][9] = { { /* 1 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 1, 0, 0, -1.0/2, 0, 0, 0, 0, }, }, { /* 3 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 1, 0, 0, -1.0/2, 0, 0, 0, 0, }, }, { /* 4 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 5 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 1, 0, 0, 0, 0, 0, -1.0/2, 0, }, }, { /* 7 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, -1, 0, 0, 1.0/2, 0, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, -1, 0, 0, 1.0/2, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, -1, 0, 0, 0, 1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, -1, 0, 0, 0, 0, 0, 1.0/2, 0, }, }, }; static double ortho_B_VSpU[][3][9] = { { /* 1 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, }, { /* 3 */ { -1.0/2, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, { /* 5 */ { 0, 0, 0, -1, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 7 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, { /* 11 */ { -1.0/2, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, }; static double ortho_C_VSpU[][3][9] = { { /* 1 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 3 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, 0, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 4 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 5 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, 0, 0, 1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, -1.0/2, }, }, { /* 7 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { 0, 0, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, }; static double ortho_F_VSpU[][3][9] = { { /* 1 */ { -1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, { 1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 3 */ { 0, 1.0/2, 0, -1.0/4, -1.0/4, 0, 0, 0, 0, }, { 0, -1.0/2, 0, -1.0/4, -1.0/4, 0, 0, 0, 0, }, { 0, -1.0/2, 0, -1.0/4, 3.0/4, 0, 0, 0, 0, }, }, { /* 4 */ { 0, 1, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 0, 1, 0, 0, -1.0/2, 0, }, }, { /* 5 */ { 0, 1, 0, 0, -1, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 1, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 0, -1, 0, 0, 1.0/2, 0, }, }, { /* 7 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { 0, -1, 0, 0, 1, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, -1, 0, 0, 0, 0, 0, 1.0/2, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 0, 1, 0, 0, -1.0/2, 0, }, }, { /* 11 */ { 0, -1, 0, 0, 1, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, -1, 0, 0, 0, 0, 0, 1.0/2, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 0, -1, 0, 0, 1.0/2, 0, }, }, }; static double ortho_I_VSpU[][3][9] = { { /* 1 */ { -1, 0, 1.0/2, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, -1.0/2, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1.0/2, -1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, -1.0/2, 0, -1, 0, 1.0/2, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 5 */ { -1.0/2, 0, 0, 0, 1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 1.0/2, 0, -1, 0, -1.0/2, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 7 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 0, -1, 0, 1.0/2, 0, -1.0/2, }, { 0, 0, 0, 0, 0, 0, 0, 0, -1.0/2, }, }, { /* 11 */ { -1.0/2, 0, 0, 0, 1.0/2, 0, 0, 0, 0, }, { -1.0/2, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, -1.0/2, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 1.0/2, 0, 0, -1.0/2, 0, -1.0/2, 0, 0, }, }, }; static double ortho_VSpU[][3][9] = { { /* 1 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 3 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 4 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 5 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, -1.0/2, }, }, { /* 7 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, }; static int ortho_generators[][3][9] = { { /* 1 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 5 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 7 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 11 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, }; static double trigo_VSpU[][3][9] = { { /* 1 */ { -2.0/3, 1.0/3, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/3, -1.0/3, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { -6, 3, 0, 4, 0, 0, 0, 0, 0, }, { -3, 1, 0, 2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 3 */ { 0, 1.0/3, 0, -2.0/3, 0, 0, 0, 0, 0, }, { 0, -1.0/3, 0, -1.0/3, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 4 */ { 0, 1, 0, -2, 0, 0, 1, 0, 0, }, { 0, -1, 0, 1, 0, 0, -1, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 5 */ { 0, -1, 0, -2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, -1, 0, -2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, -1.0/2, }, }, { /* 7 */ { 0, -1, 0, -2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 8 */ { 0, -1, 0, -2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { 0, -1, 0, -2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 10 */ { 0, -1, 0, -2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 1, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 1, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 13 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 1, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 14 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 1, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 15 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 16 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 17 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 18 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 19 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 20 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, }; static int trigo_generators[][3][9] = { { /* 1 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 5 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 7 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 9 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, -1, 0, 1, -1, 0, 0, 0, 1, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 11 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 13 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 14 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 15 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 16 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 17 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 18 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 19 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 20 */ { 0, 1, 0, -1, 1, 0, 0, 0, -1, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, }; static double rhombo_VSpU[][3][9] = { { /* 1 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 1, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 1, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 0, 1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, }, }, { /* 4 */ { -1, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, { 1, 0, 0, -1, 0, 1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 5 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, -1, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { 1, 0, 0, -1, 0, 0, 0, -1.0/2, 0, }, }, { /* 7 */ { -1, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, { -1, 0, 0, 1, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 8 */ { -1, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, { -1, 0, 0, 1, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { -1, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, { -1, 0, 0, 1, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 10 */ { -1, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, { -1, 0, 0, 1, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { -1.0/2, -1.0/2, 1.0/2, 0, 0, 0, 0, 0, 0, }, { 1.0/2, -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, }, { -1.0/2, 1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { -2, 0, 2, 1.0/2, -1, 0, 0, 0, 0, }, { 1, 0, -1, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 13 */ { -1, 0, 0, 0, 0, 1.0/2, 0, 0, 0, }, { 1, 0, 0, -1, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 14 */ { -1, 0, 0, 0, 0, 1.0/2, 0, 0, 0, }, { 1, 0, 0, -1, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 15 */ { 0, -1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 1.0/2, 0, 0, 0, 0, 0, }, { -1, 1.0/2, 0, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 16 */ { 0, 0, 0, -1, 0, 0, 0, -1.0/2, 0, }, { 0, 0, 0, 0, 0, 0, 0, -1.0/2, 0, }, { -1, 0, 0, 1, 0, 0, 0, 1.0/2, 0, }, }, { /* 17 */ { 0, -1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 1.0/2, 0, 0, 0, 0, 0, }, { -1, 1.0/2, 0, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 18 */ { -1, 0, 0, 0, 0, 1.0/2, 0, 0, 0, }, { -1, 0, 0, 1, 0, 1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 19 */ { 0, -1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 1.0/2, 0, 0, 0, 0, 0, }, { -1, 1.0/2, 0, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 20 */ { -1, 0, 0, 0, 0, 1.0/2, 0, 0, 0, }, { -1, 0, 0, 1, 0, 1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, }; static int rhombo_generators[][3][9] = { { /* 1 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 5 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 7 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 9 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 11 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 13 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 14 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 15 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 16 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 17 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 18 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 19 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 20 */ { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 1, 0, 1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, }; static double hexa_VSpU[][3][9] = { { /* 1 */ { -1, 1, 0, 0, 0, 0, 0, 0, 0, }, { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { -1, 1, 0, 0, 0, 0, 0, 0, 0, }, { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 3 */ { 1, 0, 0, -1, 0, 0, 0, 0, 0, }, { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 4 */ { 1, 0, 0, -1, 0, 0, 0, 0, 0, }, { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 5 */ { -1, 0, 0, -1, 0, 0, 0, 0, 0, }, { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { -1, 0, 0, -1, 0, 0, 0, 0, 0, }, { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, -1.0/2, }, }, { /* 7 */ { -1.0/3, -1.0/3, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/3, -2.0/3, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { -1, -1, 0, 1, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { -1.0/3, 0, 0, -1.0/3, 0, 0, 0, 0, 0, }, { 1.0/3, 0, 0, -2.0/3, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { -1, 0, 0, -1, 0, 0, 1, 0, 0, }, { 1, 0, 0, 0, 0, 0, -1, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { -1, 0, 0, 1, 0, 0, 0, 0, 0, }, { -1, 0, 0, 2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { -1, 0, 0, 1, 0, 0, 0, 0, 0, }, { -1, 0, 0, 2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, }; static int hexa_generators[][3][9] = { { /* 1 */ { 1, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 1, -1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 1, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 1, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 5 */ { 1, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 1, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 7 */ { -1, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { -1, 1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { -1, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { -1, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, -1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 11 */ { -1, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { -1, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, }; static double cubic_F_VSpU[][3][9] = { { /* 1 */ { 0, 0, -1, 0, 0, 0, 0, 0, 0, }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { -1, 0, -1, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 1, 0, 0, 0, 1.0/2, 0, 0, 0, 0, }, }, { /* 3 */ { 0, 0, -1.0/2, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 1.0/2, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, -1, 0, -1, 0, 0, 1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 5 */ { 0, 1.0/2, -1.0/2, 0, -1.0/2, 0, 0, 0, 0, }, { 0, -1.0/2, 1.0/2, 0, -1.0/2, 0, 0, 0, 0, }, { 0, -1.0/2, -1.0/2, 0, 1.0/2, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 2, 0, -2, 0, 0, 1.0/2, -1, 0, }, { 0, -1, 0, 1, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, { /* 7 */ { -1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, { 1.0/2, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { 0, 1.0/4, -1.0/4, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -3.0/4, -1.0/4, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 1.0/4, -1.0/4, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, -1, -2, 0, 0, 3.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 11 */ { 0, 1.0/2, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, -1.0/2, 0, -1, 1.0/2, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, -2, 4, 0, 0, -3.0/2, 1, 0, }, { 0, 0, 1, -2, 0, 0, 1.0/2, -1, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, { /* 13 */ { -1.0/4, 1.0/4, 1.0/2, 0, 0, 0, 0, 0, 0, }, { -1.0/4, -3.0/4, -1.0/2, 0, 0, 0, 0, 0, 0, }, { -1.0/4, 1.0/4, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 14 */ { -1, 0, 1, 1, 1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { -1, 0, 0, 1, 1.0/2, 0, 0, 0, 0, }, }, { /* 15 */ { -1.0/4, 1.0/4, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1.0/4, -3.0/4, 0, 1.0/2, 0, 0, 0, 0, 0, }, { -1.0/4, 1.0/4, 0, 1.0/2, 0, 0, 0, 0, 0, }, }, { /* 16 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, -1, 0, 1, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 17 */ { 0, 0, 1.0/2, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, -1.0/2, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, -1.0/2, 0, 0, 0, 0, 0, }, }, { /* 18 */ { 0, 2, 0, 2, 0, 0, -3.0/2, -1, 0, }, { 0, -1, 0, -1, 0, 0, 1.0/2, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, { /* 19 */ { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 20 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 21 */ { 0, -1.0/2, 0, -1.0/2, 0, -1.0/2, 0, 0, 0, }, { 0, -1.0/2, 0, 1.0/2, 0, 1.0/2, 0, 0, 0, }, { 0, -1.0/2, 0, 1.0/2, 0, -1.0/2, 0, 0, 0, }, }, { /* 22 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 1, 0, 0, 0, 1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 23 */ { 0, 0, 1.0/2, -1.0/2, 0, 1.0/2, 0, 0, 0, }, { 0, 0, 1.0/2, 1.0/2, 0, -1.0/2, 0, 0, 0, }, { 0, 0, -1.0/2, -1.0/2, 0, -1.0/2, 0, 0, 0, }, }, { /* 24 */ { 0, 0, 2, 0, 0, 0, 1.0/2, 1, 0, }, { 0, 0, -1, 0, 0, 0, -1.0/2, -1, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, }; static double cubic_I_VSpU[][3][9] = { { /* 1 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 2, 0, -1.0/2, 0, -1, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 0, -1, 0, -1, 0, 0, 0, 0, 0, }, { 1, -1, 0, -1, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { -2, -3, 0, -1, 0, 0, 1, -1, 1, }, { -1, -3, 0, -1, 0, 0, 1, -1, 1, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 5 */ { -1, 0, 1, -1, 0, 0, 0, 0, 0, }, { 0, 0, 1, -1, 0, 0, 0, 0, 0, }, { 1, 0, -1, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { -1, 0, 1, -1, 0, 0, 0, 0, 0, }, { 0, 0, 1, -1, 0, 0, 0, 0, 0, }, { 1, 0, -3, 4, 0, 0, -1, -1, -1, }, }, { /* 7 */ { -1, 0, 1.0/2, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, -1.0/2, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 1, 0, -1, -2, 0, -1, 0, 0, 0, }, { 1, 0, -1, -1, 0, 0, 0, 0, 0, }, { 1, 0, -1, -1, 0, -1, 0, 0, 0, }, }, { /* 10 */ { -1, 0, 0, 0, 0, -1, 0, -1, 1, }, { -1, 0, 0, 1, 0, 0, 0, -1, 1, }, { -1, 0, 0, 1, 0, -1, 0, -1, 1, }, }, { /* 11 */ { -1, 0, 1, 0, 0, -1, 0, 0, 0, }, { 3, 0, -1, -3, 0, 2, 0, 0, 0, }, { -3, 0, 1, 3, 0, -3, 0, 0, 0, }, }, { /* 12 */ { -1, 0, 0, 2, 0, -1, -1, 0, 0, }, { 1, 0, 0, -1, 0, 2, 0, -1, -1, }, { -1, 0, 0, 1, 0, -3, 0, 1, 1, }, }, { /* 13 */ { -3.0/4, 1.0/4, 1.0/4, 0, 0, 0, 0, 0, 0, }, { -1.0/4, -1.0/4, -1.0/4, 0, 0, 0, 0, 0, 0, }, { -1.0/2, 1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 14 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { -2, 1, 0, 1, 0, 0, 0, 0, 0, }, }, { /* 15 */ { 1, 2, -5, -7, 0, 0, 0, 0, 0, }, { 1, 1, -4, -5, 0, 0, 0, 0, 0, }, { 0, 1, -2, -2, 0, 0, 0, 0, 0, }, }, { /* 16 */ { -4, -3, 0, 13, 0, 0, -5, 5, 5, }, { -3, -3, 0, 11, 0, 0, -4, 4, 4, }, { -2, -1, 0, 6, 0, 0, -2, 2, 2, }, }, { /* 17 */ { -2, 1, 0, 1, 0, 0, 0, 0, 0, }, { 1, -1, 0, -1, 0, 0, 0, 0, 0, }, { 2, -1, 0, -2, 0, 0, 0, 0, 0, }, }, { /* 18 */ { -2, 3, 0, 7, 0, 0, -3, -2, -2, }, { 1, -3, 0, -7, 0, 0, 3, 2, 2, }, { -2, 5, 0, 12, 0, 0, -5, -4, -4, }, }, { /* 19 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 20 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, -1.0/2, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 21 */ { -1, 0, 0, 0, 0, -1, 0, 0, 0, }, { -1, 0, 0, 1, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1, 0, -1, 0, 0, 0, }, }, { /* 22 */ { -1, 0, 0, 0, 0, -1, 0, 0, 0, }, { -1, 0, 0, 1, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1, 0, -1, 0, 0, 0, }, }, { /* 23 */ { 1, 0, 0, 0, -2, 1, 0, 0, 0, }, { -1, 0, 0, 0, 1, -1, 0, 0, 0, }, { 1, 0, 0, 0, -1, 0, 0, 0, 0, }, }, { /* 24 */ { 1, 0, 0, -2, 0, 3, 0, -2, 0, }, { -1, 0, 0, 1, 0, -2, 0, 1, 0, }, { 1, 0, 0, -1, 0, 1, 0, -1, 0, }, }, }; static double cubic_VSpU[][3][9] = { { /* 1 */ { -1.0/2, 1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 3 */ { -1.0/2, 1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, 1.0/2, 0, 1, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, -1, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 5 */ { -1.0/2, 1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, -1.0/2, 0, -1, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 2, 0, 0, 0, 0, 1.0/2, -1, 0, }, { 0, -1, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, { /* 7 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { -1.0/2, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 9 */ { 0, -1.0/2, 0, -1, 0, -1, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, -1, 0, 0, 0, }, }, { /* 10 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 1, -1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 11 */ { 0, -1.0/2, 0, -1, 0, 1, 0, 0, 0, }, { 0, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 1.0/2, 0, 0, 0, -1, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, -2, 0, 2, 1.0/2, -1, 0, }, { 0, 0, 0, 1, 0, -1, -1.0/2, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, { /* 13 */ { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 14 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 15 */ { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, -1.0/2, 0, 1, 0, 0, 0, 0, 0, }, }, { /* 16 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, -1, 0, 0, 0, 0, 1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 17 */ { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, 1.0/2, 0, -1, 0, 0, 0, 0, 0, }, }, { /* 18 */ { 0, -2, 0, 0, 0, 0, 1.0/2, 1, 0, }, { 0, 1, 0, 0, 0, 0, -1.0/2, -1, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, { /* 19 */ { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 20 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 21 */ { 0, 0, -1.0/2, -1, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 1, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 22 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 1, -1.0/2, 0, 0, }, { 0, 0, 0, 1, 0, 0, -1.0/2, 0, 0, }, }, { /* 23 */ { 0, 0, 1.0/2, -1, 0, 0, 0, 0, 0, }, { 0, 0, 1.0/2, 0, 0, -1, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 24 */ { 0, 0, 0, -2, 0, 2, 1.0/2, -1, 0, }, { 0, 0, 0, 1, 0, -1, -1.0/2, 0, 0, }, { 0, 0, 0, -1, 0, 0, 1.0/2, 0, 0, }, }, }; static int cubic_generators[][3][9] = { { /* 1 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 5 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 7 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 11 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { -1, 0, 0, 0, -1, 0, 0, 0, 1, }, { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 13 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 14 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 15 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 16 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 17 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 18 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 19 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 20 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 21 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 22 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 0, 0, 1, 1, 0, 0, 0, 1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 23 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 24 */ { 1, 0, 0, 0, 1, 0, 0, 0, -1, }, { 0, 0, -1, -1, 0, 0, 0, -1, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, }; static double tetra_I_VSpU[][3][9] = { { /* 1 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 2, 0, -1.0/2, 0, -1, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, -1, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, -1, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { -1, 0, 0, 0, -1, 0, 1.0/2, 0, -1.0/2, }, { 0, 0, 0, 0, -1, 0, 1.0/2, 0, -1.0/2, }, { 1, 0, 0, 0, 1, 0, -1, 0, 0, }, }, { /* 5 */ { -1, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { -1, 0, 0, 0, -1, 0, 0, 0, 0, }, }, { /* 6 */ { -1, 0, 0, 0, -1, 0, -1.0/2, 0, 1.0/2, }, { 0, 0, 0, 0, -1, 0, -1.0/2, 0, 1.0/2, }, { -1, 0, 0, 0, -1, 0, 0, 0, 0, }, }, { /* 7 */ { -3.0/4, 1.0/4, 1.0/4, 0, 0, 0, 0, 0, 0, }, { -1.0/4, -1.0/4, -1.0/4, 0, 0, 0, 0, 0, 0, }, { -1.0/2, 1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { -2, 1, 0, 1, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, -1, -1, 0, 0, 0, 0, 0, }, }, { /* 10 */ { -1, 0, 0, 0, 1, 0, -1.0/2, 0, 1.0/2, }, { 0, 0, 0, 0, -1, 0, 1.0/2, 0, -1.0/2, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 11 */ { -3.0/4, 1.0/4, 0, 0, 1.0/4, 0, 0, 0, 0, }, { -1.0/4, -1.0/4, 0, 0, -1.0/4, 0, 0, 0, 0, }, { -1.0/2, 1.0/2, 0, 0, -1.0/2, 0, 0, 0, 0, }, }, { /* 12 */ { -1, 0, 0, 0, 1, 0, 1.0/2, 0, -1.0/2, }, { 0, 0, 0, 0, -1, 0, -1.0/2, 0, 1.0/2, }, { -1, 0, 0, 0, 1, 0, 1, 0, -1, }, }, }; static double tetra_VSpU[][3][9] = { { /* 1 */ { -1.0/2, 1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 3 */ { -1, 0, 0, 0, 1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 4 */ { -1, 0, 0, 0, 1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 5 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { -1, 0, 0, 1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { -1, 0, 0, 0, 0, 0, 1.0/2, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, -1.0/2, }, }, { /* 7 */ { -1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 1.0/2, -1.0/2, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { -1, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { -1, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, -1.0/2, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, -1.0/2, 0, 0, 0, }, }, { /* 11 */ { 0, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 1, 0, 0, -1.0/2, 0, 0, 0, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 1, 0, 0, 0, 0, 0, -1.0/2, 0, 0, }, { 0, 0, -1.0/2, 0, 0, 0, 0, 0, 0, }, }, }; static int tetra_generators[][3][9] = { { /* 1 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 2 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 3 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 4 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 5 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 6 */ { 0, -1, 0, 1, 0, 0, 0, 0, 1, }, { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 7 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 8 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 9 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 10 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { 1, 0, 0, 0, -1, 0, 0, 0, -1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, { /* 11 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, }, }, { /* 12 */ { 0, 1, 0, -1, 0, 0, 0, 0, -1, }, { -1, 0, 0, 0, 1, 0, 0, 0, 1, }, { -1, 0, 0, 0, -1, 0, 0, 0, -1, }, }, }; static int find_hall_symbol( double origin_shift[3], const Centering centering, SPGCONST Symmetry *symmetry ); static int is_hall_symbol( double shift[3], const int hall_number, SPGCONST Symmetry *symmetry, Centering centering, SPGCONST int generators[3][9], SPGCONST double VSpU[3][9] ); static int is_hall_symbol_cubic( double shift[3], SPGCONST Symmetry *symmetry, Centering centering ); static int is_hall_symbol_hexa( double shift[3], SPGCONST Symmetry *symmetry ); static int is_hall_symbol_rhombo( double shift[3], SPGCONST Symmetry *symmetry ); static int is_hall_symbol_trigonal( double shift[3], SPGCONST Symmetry *symmetry ); static int is_hall_symbol_tetra( double shift[3], SPGCONST Symmetry *symmetry, const Centering centering ); static int is_hall_symbol_ortho( double shift[3], SPGCONST Symmetry *symmetry, const Centering centering ); static int is_hall_symbol_monocli( double shift[3], SPGCONST Symmetry *symmetry, const Centering centering ); static int is_hall_symbol_tricli( double shift[3], SPGCONST Symmetry *symmetry ); static int get_translations( double trans[3][3], SPGCONST Symmetry *symmetry, Centering centering, SPGCONST int rot[3][3][3] ); static void transform_translation( double trans_reduced[3], const Centering centering, const double trans[3] ); static void transform_translation_inverse( double trans[3], const Centering centering, const double trans_reduced[3] ); static int get_origin_shift( double shift[3], const int hall_number, SPGCONST int rot[3][3][3], SPGCONST double trans[3][3], const Centering centering, SPGCONST double VSpU[3][9] ); static void unpack_generators( int rot[3][3][3], int generators[3][9] ); static int set_dw( double dw[3], const int hall_number, const int operation_index[2], SPGCONST int rot[3][3], const double trans[3], const Centering centering ); static int is_match_database( const int hall_number, const double shift[3], SPGCONST Symmetry *symmetry, const Centering centering ); static double tolerance; static double lattice[3][3]; int hal_get_hall_symbol( double origin_shift[3], const Centering centering, SPGCONST Symmetry *symmetry, SPGCONST double bravais_lattice[3][3], const double symprec ) { mat_copy_matrix_d3( lattice, bravais_lattice ); tolerance = symprec; return find_hall_symbol( origin_shift, centering, symmetry ); } static int find_hall_symbol( double origin_shift[3], const Centering centering, SPGCONST Symmetry *symmetry ) { int hall_number = 0; /* CUBIC IT: 195-230, Hall: 489-530 */ hall_number = is_hall_symbol_cubic( origin_shift, symmetry, centering ); if ( hall_number ) { goto end; } /* HEXA, IT: 168-194, Hall: 462-488 */ hall_number = is_hall_symbol_hexa( origin_shift, symmetry ); if ( hall_number ) { goto end; } /* TRIGO, IT: 143-167, Hall: 430-461 */ hall_number = is_hall_symbol_trigonal( origin_shift, symmetry ); if ( hall_number ) { goto end; } /* RHOMB, IT: 143-167, Hall: 430-461 */ hall_number = is_hall_symbol_rhombo( origin_shift, symmetry ); if ( hall_number ) { goto end; } /* TETRA, IT: 75-142, Hall: 349-429 */ hall_number = is_hall_symbol_tetra( origin_shift, symmetry, centering ); if ( hall_number ) { goto end; } /* ORTHO, IT: 16-74, Hall: 108-348 */ hall_number = is_hall_symbol_ortho( origin_shift, symmetry, centering ); if ( hall_number ) { goto end; } /* MONOCLI, IT: 3-15, Hall: 3-107 */ hall_number = is_hall_symbol_monocli( origin_shift, symmetry, centering ); if ( hall_number ) { goto end; } /* TRICLI, IT: 1-2, Hall: 1-2 */ hall_number = is_hall_symbol_tricli( origin_shift, symmetry ); if ( hall_number ) { goto end; } end: return hall_number; } static int is_hall_symbol_cubic( double shift[3], SPGCONST Symmetry *symmetry, Centering centering ) { int i, hall_number; Symmetry *conv_symmetry; double trans_mat[3][3] = { { 0, 0, 1 }, { 0,-1, 0 }, { 1, 0, 0 } }; for ( i = 0; i < 24; i++) { for ( hall_number = 489; hall_number < 531; hall_number++ ) { /* Special case of Pa-3 (205) */ if ( hall_number==501 ) { if ( is_hall_symbol( shift, 501, symmetry, centering, cubic_generators[i], cubic_VSpU[i] ) ) { goto found; } /* Try another basis */ conv_symmetry = spa_get_conventional_symmetry( trans_mat, centering, symmetry ); if ( is_hall_symbol( shift, 501, conv_symmetry, centering, cubic_generators[i], cubic_VSpU[i] ) ) { goto found; } sym_free_symmetry( conv_symmetry ); continue; } if ( centering==NO_CENTER ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, cubic_generators[i], cubic_VSpU[i] ) ) { goto found; } } if ( centering==BODY ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, cubic_generators[i], cubic_I_VSpU[i] ) ) { goto found; } } if ( centering==FACE ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, cubic_generators[i], cubic_F_VSpU[i] ) ) { goto found; } } } } return 0; found: return hall_number; } static int is_hall_symbol_hexa( double shift[3], SPGCONST Symmetry *symmetry ) { int i, hall_number; for ( i = 0; i < 12; i++) { for ( hall_number = 462; hall_number < 489; hall_number++ ) { if ( is_hall_symbol( shift, hall_number, symmetry, NO_CENTER, hexa_generators[i], hexa_VSpU[i] ) ) { goto found; } } } return 0; found: return hall_number; } static int is_hall_symbol_trigonal( double shift[3], SPGCONST Symmetry *symmetry ) { int i, hall_number; for ( i = 0; i < 20; i++) { for ( hall_number = 430; hall_number < 462; hall_number++ ) { if ( is_hall_symbol( shift, hall_number, symmetry, NO_CENTER, trigo_generators[i], trigo_VSpU[i] ) ) { goto found; } } } return 0; found: return hall_number; } static int is_hall_symbol_rhombo( double shift[3], SPGCONST Symmetry *symmetry ) { int i, hall_number; for ( i = 0; i < 20; i++) { for ( hall_number = 430; hall_number < 462; hall_number++ ) { if ( is_hall_symbol( shift, hall_number, symmetry, NO_CENTER, rhombo_generators[i], rhombo_VSpU[i] ) ) { goto found; } } } return 0; found: return hall_number; } static int is_hall_symbol_tetra( double shift[3], SPGCONST Symmetry *symmetry, const Centering centering ) { int i, hall_number; for ( i = 0; i < 12; i++) { for ( hall_number = 349; hall_number < 429; hall_number++ ) { if ( centering==NO_CENTER ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, tetra_generators[i], tetra_VSpU[i] ) ) { goto found; } } if ( centering==BODY ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, tetra_generators[i], tetra_I_VSpU[i] ) ) { goto found; } } } } return 0; found: return hall_number; } static int is_hall_symbol_ortho( double shift[3], SPGCONST Symmetry *symmetry, const Centering centering ) { int hall_number; int i; for ( i = 0; i < 12; i++) { for ( hall_number = 108; hall_number < 348; hall_number++ ) { if ( centering==NO_CENTER ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, ortho_generators[i], ortho_VSpU[i] ) ) { goto found; } } if ( centering==BODY ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, ortho_generators[i], ortho_I_VSpU[i] ) ) { goto found; } } if ( centering==FACE ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, ortho_generators[i], ortho_F_VSpU[i] ) ) { goto found; } } if ( centering==A_FACE ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, ortho_generators[i], ortho_A_VSpU[i] ) ) { goto found; } } if ( centering==B_FACE ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, ortho_generators[i], ortho_B_VSpU[i] ) ) { goto found; } } if ( centering==C_FACE ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, ortho_generators[i], ortho_C_VSpU[i] ) ) { goto found; } } } } return 0; found: return hall_number; } static int is_hall_symbol_monocli( double shift[3], SPGCONST Symmetry *symmetry, const Centering centering ) { int hall_number; int i; for ( i = 0; i < 12; i++) { for ( hall_number = 3; hall_number < 108; hall_number++ ) { if ( centering==NO_CENTER ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, monocli_generators[i], monocli_VSpU[i] ) ) { goto found; } } if ( centering==A_FACE ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, monocli_generators[i], monocli_A_VSpU[i] ) ) { goto found; } } if ( centering==B_FACE ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, monocli_generators[i], monocli_B_VSpU[i] ) ) { goto found; } } if ( centering==C_FACE ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, monocli_generators[i], monocli_C_VSpU[i] ) ) { goto found; } } if ( centering==BODY ) { if ( is_hall_symbol( shift, hall_number, symmetry, centering, monocli_generators[i], monocli_I_VSpU[i] ) ) { goto found; } } } } return 0; found: return hall_number; } static int is_hall_symbol_tricli( double shift[3], SPGCONST Symmetry *symmetry ) { int i, hall_number; for ( i = 0; i < 2; i++) { for ( hall_number = 1; hall_number < 3; hall_number++ ) { if ( is_hall_symbol( shift, hall_number, symmetry, NO_CENTER, tricli_generators[i], tricli_VSpU[i] ) ) { goto found; } } } return 0; found: return hall_number; } static void unpack_generators( int rot[3][3][3], int generators[3][9] ) { int i, j, k; for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { for ( k = 0; k < 3; k++ ) { rot[i][j][k] = generators[i][j*3+k]; } } } } static int is_hall_symbol( double shift[3], const int hall_number, SPGCONST Symmetry *symmetry, Centering centering, SPGCONST int generators[3][9], SPGCONST double VSpU[3][9] ) { int is_origin_shift; int operation_index[2]; int rot[3][3][3]; double trans[3][3]; unpack_generators( rot, generators ); debug_print("Start Hall symbol check\n"); debug_print("Generators\n"); debug_print_matrix_i3( rot[0] ); debug_print_matrix_i3( rot[1] ); debug_print_matrix_i3( rot[2] ); debug_print("Test Hall symbol #%d.\n", hall_number); spgdb_get_operation_index( operation_index, hall_number ); if ( ! ( operation_index[0] == symmetry->size ) ) { debug_print("Hall symbol #%d doesn't match.\n", hall_number ); goto not_found; } if ( get_translations( trans, symmetry, centering, rot ) ) { is_origin_shift = get_origin_shift( shift, hall_number, rot, trans, centering, VSpU ); debug_print("origin shift: %f %f %f\n", shift[0], shift[1], shift[2]); if ( is_origin_shift ) { if ( is_match_database( hall_number, shift, symmetry, centering ) ) { debug_print("Match with database %d\n", hall_number); goto found; } } debug_print("Hall symbol #%d doesn't match.\n", hall_number); } else { goto not_found; } not_found: return 0; found: return 1; } static int get_translations( double trans[3][3], SPGCONST Symmetry *symmetry, Centering centering, SPGCONST int rot[3][3][3] ) { int i, j; int is_found; static SPGCONST int zero[3][3] = { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, }; for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { trans[i][j] = 0; } } for ( i = 0; i < 3; i++ ) { if ( mat_check_identity_matrix_i3( rot[i], zero ) ) { continue; } is_found = 0; for ( j = 0; j < symmetry->size; j++ ) { if ( mat_check_identity_matrix_i3( symmetry->rot[j], rot[i] ) ) { mat_copy_vector_d3( trans[i], symmetry->trans[j] ); is_found = 1; debug_print("trans%d found! %f %f %f\n", i, trans[i][0], trans[i][1], trans[i][2] ); break; } } if ( ! is_found ) { goto not_found; } } debug_print("all translations found!\n"); return 1; not_found: return 0; } static void transform_translation( double trans_reduced[3], const Centering centering, const double trans[3] ) { int i; static int M_bcc[3][3] = { { 0, 1, 1 }, { 1, 0, 1 }, { 1, 1, 0 }, }; static int M_fcc[3][3] = { {-1, 1, 1 }, { 1,-1, 1 }, { 1, 1,-1 }, }; static int M_ac[3][3] = { { 1, 0, 0 }, { 0, 1, 1 }, { 0,-1, 1 }, }; static int M_bc[3][3] = { { 1, 0, 1 }, { 0, 1, 0 }, {-1, 0, 1 }, }; static int M_cc[3][3] = { { 1, 1, 0 }, {-1, 1, 0 }, { 0, 0, 1 }, }; switch ( centering ) { case NO_CENTER: mat_copy_vector_d3( trans_reduced, trans ); break; case BODY: mat_multiply_matrix_vector_id3( trans_reduced, M_bcc, trans ); break; case FACE: mat_multiply_matrix_vector_id3( trans_reduced, M_fcc, trans ); break; case A_FACE: mat_multiply_matrix_vector_id3( trans_reduced, M_ac, trans ); break; case B_FACE: mat_multiply_matrix_vector_id3( trans_reduced, M_bc, trans ); break; case C_FACE: mat_multiply_matrix_vector_id3( trans_reduced, M_cc, trans ); break; default: break; } for ( i = 0; i < 3; i++ ) { trans_reduced[i] -= mat_Nint( trans_reduced[i] ); } } static void transform_translation_inverse( double trans[3], const Centering centering, const double trans_reduced[3] ) { int i; static double M_bcc_inv[3][3] = { {-0.5, 0.5, 0.5}, { 0.5,-0.5, 0.5}, { 0.5, 0.5,-0.5}, }; static double M_fcc_inv[3][3] = { { 0.0, 0.5, 0.5}, { 0.5, 0.0, 0.5}, { 0.5, 0.5, 0.0}, }; static double M_ac_inv[3][3] = { { 1.0, 0.0, 0.0}, { 0.0, 0.5,-0.5}, { 0.0, 0.5, 0.5}, }; static double M_bc_inv[3][3] = { { 0.5, 0.0,-0.5}, { 0.0, 1.0, 0.0}, { 0.5, 0.0, 0.5}, }; static double M_cc_inv[3][3] = { { 0.5,-0.5, 0.0}, { 0.5, 0.5, 0.0}, { 0.0, 0.0, 1.0}, }; switch ( centering ) { case NO_CENTER: mat_copy_vector_d3( trans, trans_reduced ); break; case BODY: mat_multiply_matrix_vector_d3( trans, M_bcc_inv, trans_reduced ); break; case FACE: mat_multiply_matrix_vector_d3( trans, M_fcc_inv, trans_reduced ); break; case A_FACE: mat_multiply_matrix_vector_d3( trans, M_ac_inv, trans_reduced ); break; case B_FACE: mat_multiply_matrix_vector_d3( trans, M_bc_inv, trans_reduced ); break; case C_FACE: mat_multiply_matrix_vector_d3( trans, M_cc_inv, trans_reduced ); break; default: break; } for ( i = 0; i < 3; i++ ) { trans[i] -= mat_Nint( trans[i] ); } } static int get_origin_shift( double shift[3], const int hall_number, SPGCONST int rot[3][3][3], SPGCONST double trans[3][3], const Centering centering, SPGCONST double VSpU[3][9] ) { int i, j; int operation_index[2]; double dw[9], tmp_dw[3], tmp_shift[3]; debug_print("*** get_origin_shift ***\n"); spgdb_get_operation_index( operation_index, hall_number ); /* The obtained dw is reduced to that of primitve cell by centerings. */ for ( i = 0; i < 3; i++ ) { /* Zero matrix is the sign to set dw 0 */ if ( mat_get_determinant_i3( rot[i] ) == 0 ) { for ( j = 0; j < 3; j++ ) { dw[i*3+j] = 0; } } else { if ( set_dw( tmp_dw, hall_number, operation_index, rot[i], trans[i], centering ) ) { for ( j = 0; j < 3; j++ ) { dw[i*3+j] = tmp_dw[j]; } } else { goto not_found; } } } #ifdef DEBUG printf("VSpU\n"); for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 9; j++ ) { printf("%4.1f ", VSpU[i][j]); } printf("\n"); } #endif /* VSpU*dw is given for the primitive cell if there is centering. */ for ( i = 0; i < 3; i++ ) { tmp_shift[i] = 0; for ( j = 0; j < 9; j++ ) { tmp_shift[i] += VSpU[i][j] * dw[j]; } } /* Transform VSpU*dw to that of the conventional unit cell. */ transform_translation_inverse( shift, centering, tmp_shift ); return 1; not_found: return 0; } static int set_dw( double dw[3], const int hall_number, const int operation_index[2], SPGCONST int rot[3][3], const double trans[3], const Centering centering ) { int i, j, tmp_hall_num; int rot_db[3][3]; double trans_db[3], tmp_dw[3]; debug_print("Generator\n"); debug_print_matrix_i3( rot ); for ( i = 0; i < operation_index[0]; i++ ) { /* rotation matrix matching and set difference of translations */ tmp_hall_num = spgdb_get_operation( rot_db, trans_db, operation_index[1] + i ); if ( ! ( tmp_hall_num == hall_number ) ) { warning_print("spglib BUG: line %d, %s\n", __LINE__, __FILE__); warning_print("spglib BUG: %d != %d\n", tmp_hall_num, hall_number); goto err; } if ( mat_check_identity_matrix_i3( rot_db, rot ) ) { for ( j = 0; j < 3; j++ ) { tmp_dw[j] = trans_db[j] - trans[j]; } /* Transform dw to that of primitive cell if there is centering. */ transform_translation( dw, centering, tmp_dw ); debug_print("trans(db): %f %f %f\n", trans_db[0], trans_db[1], trans_db[2] ); debug_print("trans : %f %f %f\n", trans[0], trans[1], trans[2] ); debug_print("dw : %f %f %f\n", dw[0], dw[1], dw[2] ); goto found; } } /* Not found */ err: return 0; found: return 1; } static int is_match_database( const int hall_number, const double origin_shift[3], SPGCONST Symmetry *symmetry, const Centering centering ) { int i, j, k, is_found; int operation_index[2]; int rot_db[3][3]; int found_list[192]; double trans_db[3], conv_trans[3], tmp_vec[3]; spgdb_get_operation_index( operation_index, hall_number ); for ( i = 0; i < symmetry->size; i++ ) { found_list[i] = 0; } for ( i = 0; i < symmetry->size; i++ ) { is_found = 0; for ( j = 0; j < operation_index[0]; j++ ) { /* rotation matrix matching and set difference of translations */ if (! ( spgdb_get_operation( rot_db, trans_db, operation_index[1]+j )==hall_number )) { goto not_found; } if ( mat_check_identity_matrix_i3( symmetry->rot[i], rot_db ) ) { mat_multiply_matrix_vector_id3( tmp_vec, rot_db, origin_shift ); for ( k = 0; k < 3; k++ ) { conv_trans[k] = tmp_vec[k] + symmetry->trans[i][k] - origin_shift[k]; } if ( cel_is_overlap( conv_trans, trans_db, lattice, tolerance ) && ( ! found_list[j] ) ) { found_list[j] = 1; is_found = 1; debug_print("---match!(%d)---\n", i+1); debug_print_matrix_i3( rot_db ); debug_print("trans(db) : %f %f %f\n", trans_db[0], trans_db[1], trans_db[2] ); debug_print("trans : %f %f %f\n", symmetry->trans[i][0], symmetry->trans[i][1], symmetry->trans[i][2] ); debug_print("trans (conv): %f %f %f\n", conv_trans[0], conv_trans[1], conv_trans[2] ); break; } else { ; debug_print("---not match!(%d)---\n", i+1); debug_print_matrix_i3( rot_db ); debug_print("trans(db): %f %f %f\n", trans_db[0], trans_db[1], trans_db[2] ); debug_print("trans : %f %f %f\n", symmetry->trans[i][0], symmetry->trans[i][1], symmetry->trans[i][2] ); debug_print("trans (conv): %f %f %f\n", conv_trans[0], conv_trans[1], conv_trans[2] ); } } } if ( ! is_found ) { goto not_found; } } debug_print("is_match OK!\n"); return 1; not_found: return 0; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/spg_database.h0000644000175000001440000000111612250371054027277 0ustar marcususers/* spg_database.h */ /* Copyright (C) 2010 Atsushi Togo */ #ifndef __spg_database_H__ #define __spg_database_H__ #include "lattice.h" #include "pointgroup.h" typedef struct { int number; char schoenflies[7]; char hall_symbol[17]; char international[32]; char international_full[20]; char international_short[11]; Holohedry holohedry; } SpacegroupType; int spgdb_get_operation( int rot[3][3], double trans[3], const int index ); void spgdb_get_operation_index( int indices[2], const int hall_number ); SpacegroupType spgdb_get_spacegroup_type( int index ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/primitive.h0000644000175000001440000000057712250371054026704 0ustar marcususers/* primitive.h */ /* Copyright (C) 2008 Atsushi Togo */ #ifndef __primitive_H__ #define __primitive_H__ #include "symmetry.h" #include "cell.h" #include "mathfunc.h" Cell * prm_get_primitive( SPGCONST Cell * cell, const double symprec ); Cell * prm_get_primitive_with_pure_trans( SPGCONST Cell * cell, const VecDBL *pure_trans, const double symprec ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/refinement.h0000644000175000001440000000034412250371054027020 0ustar marcususers/* bravais.h */ /* Copyright (C) 2011 Atsushi Togo */ #ifndef __refinement_H__ #define __refinement_H__ #include "cell.h" #include "mathfunc.h" Cell * ref_refine_cell( SPGCONST Cell * cell, const double symprec ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/debug.h0000644000175000001440000000165612250371054025761 0ustar marcususers/* debug.h */ /* Copyright (C) 2008 Atsushi Togo */ #ifndef __debug_H__ #define __debug_H__ #ifdef DEBUG #define debug_print(...) printf(__VA_ARGS__) #define debug_print_matrix_d3( a ) dbg_print_matrix_d3( a ) #define debug_print_matrix_i3( a ) dbg_print_matrix_i3( a ) #define debug_print_vectors_d3(...) dbg_print_vectors_d3(__VA_ARGS__) #define debug_print_vectors_with_label(...) dbg_print_vectors_with_label(__VA_ARGS__) void dbg_print_matrix_d3(double a[3][3]); void dbg_print_matrix_i3(int a[3][3]); void dbg_print_vectors_d3(double a[][3], int size); void dbg_print_vectors_with_label(double a[][3], int b[], int size); #else #define debug_print(...) #define debug_print_matrix_d3( a ) #define debug_print_matrix_i3( a ) #define debug_print_vectors_d3(...) #define debug_print_vectors_with_label(...) #endif #ifdef SPGWARNING #define warning_print(...) fprintf(stderr,__VA_ARGS__) #else #define warning_print(...) #endif #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/symmetry.h0000644000175000001440000000140012250371054026547 0ustar marcususers/* symmetry.h */ /* Copyright (C) 2008 Atsushi Togo */ #ifndef __symmetry_H__ #define __symmetry_H__ #include "cell.h" #include "mathfunc.h" typedef struct { int size; int (*rot)[3][3]; double (*trans)[3]; } Symmetry; typedef struct { int rot[48][3][3]; int size; } PointSymmetry; Symmetry * sym_alloc_symmetry( const int size ); void sym_free_symmetry( Symmetry * symmetry ); int sym_get_multiplicity( SPGCONST Cell * cell, const double symprec ); Symmetry * sym_get_operation( SPGCONST Cell * cell, const double symprec ); Symmetry * sym_reduce_operation( SPGCONST Cell * cell, SPGCONST Symmetry * symmetry, const double symprec ); VecDBL * sym_get_pure_translation( SPGCONST Cell *cell, const double symprec ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/refinement.c0000644000175000001440000003333112250371054027015 0ustar marcususers/* bravais.c */ /* Copyright (C) 2011 Atsushi Togo */ #include #include #include #include "refinement.h" #include "cell.h" #include "lattice.h" #include "mathfunc.h" #include "pointgroup.h" #include "primitive.h" #include "spacegroup.h" #include "spg_database.h" #include "symmetry.h" #include "debug.h" #define REDUCE_RATE 0.95 static Cell * refine_cell( SPGCONST Cell * cell, const double symprec ); static Cell * get_conventional_positions( SPGCONST Cell * conv_prim, SPGCONST Symmetry * conv_sym ); static Cell * get_conventional_primitive( SPGCONST double bravais_lattice[3][3], const double origin_shift[3], SPGCONST Cell * primitive ); static Symmetry * get_IT_symmetry( const int hall_number ); static int get_symmetrized_positions( Cell * bravais, SPGCONST Symmetry * conv_sym, const double symprec ); static int get_exact_location( double position[3], SPGCONST Symmetry * conv_sym, SPGCONST double bravais_lattice[3][3], const double symprec ); static int get_number_of_pure_translation( SPGCONST Symmetry * conv_sym ); static int get_conventional_lattice( double lattice[3][3], const Holohedry holohedry, SPGCONST double bravais_lattice[3][3] ); static void set_monocli( double lattice[3][3], SPGCONST double metric[3][3] ); static void set_ortho( double lattice[3][3], SPGCONST double metric[3][3] ); static void set_tetra( double lattice[3][3], SPGCONST double metric[3][3] ); static void set_rhomb( double lattice[3][3], SPGCONST double metric[3][3] ); static void set_trigo( double lattice[3][3], SPGCONST double metric[3][3] ); static void set_cubic( double lattice[3][3], SPGCONST double metric[3][3] ); static int identity[3][3] = { { 1, 0, 0}, { 0, 1, 0}, { 0, 0, 1}, }; Cell * ref_refine_cell( SPGCONST Cell * cell, const double symprec ) { return refine_cell( cell, symprec ); } static Cell * refine_cell( SPGCONST Cell * cell, const double symprec ) { Spacegroup spacegroup; Cell *primitive, *conv_prim, *bravais; Symmetry *conv_sym; primitive = prm_get_primitive( cell, symprec ); if ( primitive->size == 0 ) { cel_free_cell( primitive ); primitive = cel_copy_cell( cell ); } if ( primitive->size == -1 ) { cel_free_cell( primitive ); bravais = cel_alloc_cell( -1 ); goto ret; } spacegroup = spa_get_spacegroup_with_primitive( primitive, symprec ); conv_prim = get_conventional_primitive( spacegroup.bravais_lattice, spacegroup.origin_shift, primitive ); debug_print("Primitive cell in refine_cell\n"); debug_print_matrix_d3( primitive->lattice ); debug_print_vectors_with_label( primitive->position, primitive->types, primitive->size ); debug_print("Origin shift: %f %f %f\n", spacegroup.origin_shift[0], spacegroup.origin_shift[1], spacegroup.origin_shift[2] ); debug_print("Conventional primitive cell positions\n"); debug_print_vectors_with_label( conv_prim->position, conv_prim->types, conv_prim->size ); cel_free_cell( primitive ); conv_sym = get_IT_symmetry( spacegroup.hall_number ); bravais = get_conventional_positions( conv_prim, conv_sym ); get_conventional_lattice( bravais->lattice, spacegroup.holohedry, spacegroup.bravais_lattice ); debug_print("Conventional cell\n"); debug_print_matrix_d3( bravais->lattice ); debug_print_vectors_with_label( bravais->position, bravais->types, bravais->size ); /* Symmetrize atomic positions of conventional unit cell */ if ( ! get_symmetrized_positions( bravais, conv_sym, symprec ) ) { cel_free_cell( bravais ); bravais = cel_alloc_cell( -1 ); } debug_print("Conventional cell symmetrized positions\n"); debug_print_vectors_with_label( bravais->position, bravais->types, bravais->size ); sym_free_symmetry( conv_sym ); cel_free_cell( conv_prim ); ret: /* Return bravais->size = -1, if the bravais could not be found. */ return bravais; } static Cell * get_conventional_positions( SPGCONST Cell * conv_prim, SPGCONST Symmetry * conv_sym ) { int i, j, k, num_pure_trans; int num_atom; Cell * bravais; num_pure_trans = get_number_of_pure_translation( conv_sym ); bravais = cel_alloc_cell( conv_prim->size * num_pure_trans ); num_atom = 0; for ( i = 0; i < conv_prim->size; i++ ) { for ( j = 0; j < conv_sym->size; j++ ) { /* Referred atoms in Bravais lattice */ if ( mat_check_identity_matrix_i3( identity, conv_sym->rot[j] ) ) { bravais->types[num_atom] = conv_prim->types[i]; mat_copy_vector_d3( bravais->position[num_atom], conv_prim->position[i] ); for ( k = 0; k < 3; k++ ) { bravais->position[num_atom][k] += conv_sym->trans[j][k]; bravais->position[num_atom][k] -= mat_Nint( bravais->position[num_atom][k] ); } num_atom++; } } } return bravais; } static int get_symmetrized_positions( Cell * bravais, SPGCONST Symmetry * conv_sym, const double symprec ) { int i, j, k, l, num_ind_atoms, is_found; double pos[3]; int *ind_atoms; VecDBL *positions; debug_print("get_symmetrized_positions\n"); ind_atoms = malloc( sizeof( double ) * bravais->size ); positions = mat_alloc_VecDBL( bravais->size ); num_ind_atoms = 0; for ( i = 0; i < bravais->size; i++ ) { is_found = 0; for ( j = 0; j < num_ind_atoms; j++ ) { for ( k = 0; k < conv_sym->size; k++ ) { /* check if this is site-symmetry */ mat_multiply_matrix_vector_id3( pos, conv_sym->rot[k], positions->vec[ind_atoms[j]] ); for ( l = 0; l < 3; l++ ) { pos[l] += conv_sym->trans[k][l]; } if ( cel_is_overlap( pos, bravais->position[i], bravais->lattice, symprec ) ) { is_found = 1; goto escape; } } } escape: if ( is_found ) { /* This is not an independent atom. */ for ( j = 0; j < 3; j++ ) { pos[j] -= mat_Nint( pos[j] ); } mat_copy_vector_d3( positions->vec[i], pos ); debug_print("%d: %f %f %f (copy)\n", i+1, pos[0], pos[1], pos[2]); } else { /* This is an independent atom. */ ind_atoms[ num_ind_atoms ] = i; num_ind_atoms++; mat_copy_vector_d3( positions->vec[i], bravais->position[i] ); debug_print("%d: %f %f %f (before shift)\n", i+1, positions->vec[i][0], positions->vec[i][1], positions->vec[i][2]); if (! get_exact_location( positions->vec[i], conv_sym, bravais->lattice, symprec ) ) { goto err; } debug_print("%d: %f %f %f (shift)\n", i+1, positions->vec[i][0], positions->vec[i][1], positions->vec[i][2]); } } /* Copy back */ for ( i = 0; i < bravais->size; i++ ) { mat_copy_vector_d3( bravais->position[i], positions->vec[i] ); } mat_free_VecDBL( positions ); free( ind_atoms ); return 1; err: warning_print("spglib: Atomic positions could not be symmetrized "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); return 0; } /* Site-symmetry is used to determine exact location of an atom */ /* R. W. Grosse-Kunstleve and P. D. Adams */ /* Acta Cryst. (2002). A58, 60-65 */ static int get_exact_location( double position[3], SPGCONST Symmetry * conv_sym, SPGCONST double bravais_lattice[3][3], const double symprec ) { int i, j, k, num_sum; /* int sum_rot[3][3]; */ double sum_rot[3][3]; double pos[3], sum_trans[3]; num_sum = 0; for ( i = 0; i < 3; i++ ) { sum_trans[i] = 0.0; for ( j = 0; j < 3; j++ ) { sum_rot[i][j] = 0; } } for ( i = 0; i < conv_sym->size; i++ ) { mat_multiply_matrix_vector_id3( pos, conv_sym->rot[i], position ); for ( j = 0; j < 3; j++ ) { pos[j] += conv_sym->trans[i][j]; } if ( cel_is_overlap( pos, position, bravais_lattice, symprec ) ) { for ( j = 0; j < 3; j++ ) { sum_trans[j] += conv_sym->trans[i][j] - mat_Nint( pos[j] - position[j] ); for ( k = 0; k < 3; k++ ) { sum_rot[j][k] += conv_sym->rot[i][j][k]; } } num_sum++; } } for ( i = 0; i < 3; i++ ) { sum_trans[i] /= num_sum; for ( j = 0; j < 3; j++ ) { sum_rot[i][j] /= num_sum; } } mat_multiply_matrix_vector_d3( position, sum_rot, position ); for ( i = 0; i < 3; i++ ) { position[i] += sum_trans[i]; } return 1; } static int get_number_of_pure_translation( SPGCONST Symmetry * conv_sym ) { int i, num_pure_trans = 0; for ( i = 0; i < conv_sym->size; i++ ) { if ( mat_check_identity_matrix_i3( identity, conv_sym->rot[i] ) ) { num_pure_trans++; } } return num_pure_trans; } static Cell * get_conventional_primitive( SPGCONST double bravais_lattice[3][3], const double origin_shift[3], SPGCONST Cell * primitive ) { int i, j; double inv_brv[3][3], trans_mat[3][3]; Cell * conv_prim; conv_prim = cel_alloc_cell( primitive->size ); mat_inverse_matrix_d3( inv_brv, bravais_lattice, 0 ); mat_multiply_matrix_d3( trans_mat, inv_brv, primitive->lattice ); for ( i = 0; i < primitive->size; i++ ) { conv_prim->types[i] = primitive->types[i]; mat_multiply_matrix_vector_d3( conv_prim->position[i], trans_mat, primitive->position[i] ); for ( j = 0; j < 3; j++ ) { conv_prim->position[i][j] -= origin_shift[j]; conv_prim->position[i][j] -= mat_Nint( conv_prim->position[i][j] ); } } return conv_prim; } static Symmetry * get_IT_symmetry( const int hall_number ) { int i, hall_num_db; int operation_index[2]; int rot[3][3]; double trans[3]; Symmetry *symmetry; spgdb_get_operation_index( operation_index, hall_number ); symmetry = sym_alloc_symmetry( operation_index[0] ); for ( i = 0; i < operation_index[0]; i++ ) { /* rotation matrix matching and set difference of translations */ hall_num_db = spgdb_get_operation( rot, trans, operation_index[1] + i ); mat_copy_matrix_i3( symmetry->rot[i], rot ); mat_copy_vector_d3( symmetry->trans[i], trans ); } return symmetry; } static int get_conventional_lattice( double lattice[3][3], const Holohedry holohedry, SPGCONST double bravais_lattice[3][3] ) { int i, j; double metric[3][3]; for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { lattice[i][j] = 0; } } mat_get_metric( metric, bravais_lattice ); switch ( holohedry ) { case TRICLI: mat_copy_matrix_d3( lattice, bravais_lattice ); break; case MONOCLI: /* b-axis is the unique axis. */ set_monocli( lattice, metric ); break; case ORTHO: set_ortho( lattice, metric ); break; case TETRA: set_tetra( lattice, metric ); break; case RHOMB: set_rhomb( lattice, metric ); break; case TRIGO: set_trigo( lattice, metric ); break; case HEXA: set_trigo( lattice, metric ); break; case CUBIC: set_cubic( lattice, metric ); break; case NONE: break; } return 1; } static void set_monocli( double lattice[3][3], SPGCONST double metric[3][3] ) { double a, b, c, beta; a = sqrt( metric[0][0] ); b = sqrt( metric[1][1] ); c = sqrt( metric[2][2] ); lattice[1][1] = b; lattice[2][2] = c; beta = acos( metric[0][2] / a / c ); lattice[2][0] = a * cos( beta ); lattice[0][0] = a * sin( beta ); } static void set_ortho( double lattice[3][3], SPGCONST double metric[3][3] ) { double a, b, c; a = sqrt( metric[0][0] ); b = sqrt( metric[1][1] ); c = sqrt( metric[2][2] ); lattice[0][0] = a; lattice[1][1] = b; lattice[2][2] = c; } static void set_tetra( double lattice[3][3], SPGCONST double metric[3][3] ) { double a, b, c; a = sqrt( metric[0][0] ); b = sqrt( metric[1][1] ); c = sqrt( metric[2][2] ); lattice[0][0] = ( a + b ) / 2; lattice[1][1] = ( a + b ) / 2; lattice[2][2] = c; } static void set_rhomb( double lattice[3][3], SPGCONST double metric[3][3] ) { double a, b, c, angle, ahex, chex; a = sqrt( metric[0][0] ); b = sqrt( metric[1][1] ); c = sqrt( metric[2][2] ); angle = acos( ( metric[0][1] / a / b + metric[0][2] / a / c + metric[1][2] / b / c ) / 3 ); /* Reference, http://cst-www.nrl.navy.mil/lattice/struk/rgr.html */ ahex = 2 * (a+b+c)/3 * sin( angle / 2 ); chex = (a+b+c)/3 * sqrt( 3 * ( 1 + 2 * cos( angle ) ) ) ; lattice[0][0] = ahex / 2; lattice[1][0] = -ahex / ( 2 * sqrt(3) ); lattice[2][0] = chex / 3; lattice[1][1] = ahex / sqrt(3); lattice[2][1] = chex / 3; lattice[0][2] = -ahex / 2; lattice[1][2] = -ahex / ( 2 * sqrt(3) ); lattice[2][2] = chex / 3; #ifdef DEBUG debug_print("Rhombo lattice: %f %f %f %f %f %f\n", a, b, c, acos( metric[0][1] / a / b ) / 3.14 * 180, acos( metric[0][2] / a / c ) / 3.14 * 180, acos( metric[1][2] / b / c ) / 3.14 * 180 ); double dmetric[3][3]; mat_get_metric( dmetric, lattice ); a = sqrt( dmetric[0][0] ); b = sqrt( dmetric[1][1] ); c = sqrt( dmetric[2][2] ); debug_print("Rhombo lattice symmetrized: %f %f %f %f %f %f\n", a, b, c, acos( dmetric[0][1] / a / b ) / 3.14 * 180, acos( dmetric[0][2] / a / c ) / 3.14 * 180, acos( dmetric[1][2] / b / c ) / 3.14 * 180 ); #endif } static void set_trigo( double lattice[3][3], SPGCONST double metric[3][3] ) { double a, b, c; a = sqrt( metric[0][0] ); b = sqrt( metric[1][1] ); c = sqrt( metric[2][2] ); lattice[0][0] = ( a + b ) / 2; lattice[0][1] = - ( a + b ) / 4; lattice[1][1] = ( a + b ) / 4 * sqrt(3); lattice[2][2] = c; } static void set_cubic( double lattice[3][3], SPGCONST double metric[3][3] ) { double a, b, c; a = sqrt( metric[0][0] ); b = sqrt( metric[1][1] ); c = sqrt( metric[2][2] ); lattice[0][0] = ( a + b + c ) / 3; lattice[1][1] = ( a + b + c ) / 3; lattice[2][2] = ( a + b + c ) / 3; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/mathfunc.c0000644000175000001440000002274712250371054026477 0ustar marcususers/* mathfunc.c */ /* Copyright (C) 2008 Atsushi Togo */ #include #include #include "mathfunc.h" #include "debug.h" double mat_get_determinant_d3(SPGCONST double a[3][3]) { return a[0][0] * (a[1][1] * a[2][2] - a[1][2] * a[2][1]) + a[0][1] * (a[1][2] * a[2][0] - a[1][0] * a[2][2]) + a[0][2] * (a[1][0] * a[2][1] - a[1][1] * a[2][0]); } int mat_get_determinant_i3(SPGCONST int a[3][3]) { return a[0][0] * (a[1][1] * a[2][2] - a[1][2] * a[2][1]) + a[0][1] * (a[1][2] * a[2][0] - a[1][0] * a[2][2]) + a[0][2] * (a[1][0] * a[2][1] - a[1][1] * a[2][0]); } int mat_get_trace_i3( SPGCONST int a[3][3] ) { return a[0][0] + a[1][1] + a[2][2]; } void mat_copy_matrix_d3(double a[3][3], SPGCONST double (*b)[3]) { a[0][0] = b[0][0]; a[0][1] = b[0][1]; a[0][2] = b[0][2]; a[1][0] = b[1][0]; a[1][1] = b[1][1]; a[1][2] = b[1][2]; a[2][0] = b[2][0]; a[2][1] = b[2][1]; a[2][2] = b[2][2]; } void mat_copy_matrix_i3(int a[3][3], SPGCONST int b[3][3]) { a[0][0] = b[0][0]; a[0][1] = b[0][1]; a[0][2] = b[0][2]; a[1][0] = b[1][0]; a[1][1] = b[1][1]; a[1][2] = b[1][2]; a[2][0] = b[2][0]; a[2][1] = b[2][1]; a[2][2] = b[2][2]; } void mat_copy_vector_d3(double a[3], const double b[3]) { a[0] = b[0]; a[1] = b[1]; a[2] = b[2]; } void mat_copy_vector_i3(int a[3], const int b[3]) { a[0] = b[0]; a[1] = b[1]; a[2] = b[2]; } int mat_check_identity_matrix_i3(SPGCONST int a[3][3], SPGCONST int b[3][3]) { if ( a[0][0] - b[0][0] || a[0][1] - b[0][1] || a[0][2] - b[0][2] || a[1][0] - b[1][0] || a[1][1] - b[1][1] || a[1][2] - b[1][2] || a[2][0] - b[2][0] || a[2][1] - b[2][1] || a[2][2] - b[2][2]) { return 0; } else { return 1; } } int mat_check_identity_matrix_d3( SPGCONST double a[3][3], SPGCONST double b[3][3], const double symprec ) { if ( mat_Dabs( a[0][0] - b[0][0] ) > symprec || mat_Dabs( a[0][1] - b[0][1] ) > symprec || mat_Dabs( a[0][2] - b[0][2] ) > symprec || mat_Dabs( a[1][0] - b[1][0] ) > symprec || mat_Dabs( a[1][1] - b[1][1] ) > symprec || mat_Dabs( a[1][2] - b[1][2] ) > symprec || mat_Dabs( a[2][0] - b[2][0] ) > symprec || mat_Dabs( a[2][1] - b[2][1] ) > symprec || mat_Dabs( a[2][2] - b[2][2] ) > symprec ) { return 0; } else { return 1; } } /* m=axb */ void mat_multiply_matrix_d3(double m[3][3], SPGCONST double a[3][3], SPGCONST double b[3][3]) { int i, j; /* a_ij */ double c[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j]; } } mat_copy_matrix_d3(m, c); } void mat_multiply_matrix_i3(int m[3][3], SPGCONST int a[3][3], SPGCONST int b[3][3]) { int i, j; /* a_ij */ int c[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j]; } } mat_copy_matrix_i3(m, c); } void mat_multiply_matrix_di3(double m[3][3], SPGCONST double a[3][3], SPGCONST int b[3][3]) { int i, j; /* a_ij */ double c[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j]; } } mat_copy_matrix_d3(m, c); } void mat_multiply_matrix_id3( double m[3][3], SPGCONST int a[3][3], SPGCONST double b[3][3]) { int i, j; /* a_ij */ double c[3][3]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { c[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j]; } } mat_copy_matrix_d3(m, c); } void mat_multiply_matrix_vector_i3(int v[3], SPGCONST int a[3][3], const int b[3]) { int i; int c[3]; for (i = 0; i < 3; i++) c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2]; for (i = 0; i < 3; i++) v[i] = c[i]; } void mat_multiply_matrix_vector_d3(double v[3], SPGCONST double a[3][3], const double b[3]) { int i; double c[3]; for (i = 0; i < 3; i++) c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2]; for (i = 0; i < 3; i++) v[i] = c[i]; } void mat_multiply_matrix_vector_id3(double v[3], SPGCONST int a[3][3], const double b[3]) { int i; double c[3]; for (i = 0; i < 3; i++) c[i] = a[i][0] * b[0] + a[i][1] * b[1] + a[i][2] * b[2]; for (i = 0; i < 3; i++) v[i] = c[i]; } void mat_add_matrix_i3( int m[3][3], SPGCONST int a[3][3], SPGCONST int b[3][3] ) { int i, j; for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { m[i][j] = a[i][j] + b[i][j]; } } } void mat_cast_matrix_3i_to_3d(double m[3][3], SPGCONST int a[3][3]) { m[0][0] = a[0][0]; m[0][1] = a[0][1]; m[0][2] = a[0][2]; m[1][0] = a[1][0]; m[1][1] = a[1][1]; m[1][2] = a[1][2]; m[2][0] = a[2][0]; m[2][1] = a[2][1]; m[2][2] = a[2][2]; } void mat_cast_matrix_3d_to_3i(int m[3][3], SPGCONST double a[3][3]) { m[0][0] = mat_Nint(a[0][0]); m[0][1] = mat_Nint(a[0][1]); m[0][2] = mat_Nint(a[0][2]); m[1][0] = mat_Nint(a[1][0]); m[1][1] = mat_Nint(a[1][1]); m[1][2] = mat_Nint(a[1][2]); m[2][0] = mat_Nint(a[2][0]); m[2][1] = mat_Nint(a[2][1]); m[2][2] = mat_Nint(a[2][2]); } /* m^-1 */ /* ruby code for auto generating */ /* 3.times {|i| 3.times {|j| */ /* puts "m[#{j}][#{i}]=(a[#{(i+1)%3}][#{(j+1)%3}]*a[#{(i+2)%3}][#{(j+2)%3}] */ /* -a[#{(i+1)%3}][#{(j+2)%3}]*a[#{(i+2)%3}][#{(j+1)%3}])/det;" */ /* }} */ int mat_inverse_matrix_d3(double m[3][3], SPGCONST double a[3][3], SPGCONST double precision) { double det; double c[3][3]; det = mat_get_determinant_d3(a); if (mat_Dabs(det) < precision) { warning_print("spglib: No inverse matrix (det=%f)\n", det); debug_print("No inverse matrix\n"); return 0; } c[0][0] = (a[1][1] * a[2][2] - a[1][2] * a[2][1]) / det; c[1][0] = (a[1][2] * a[2][0] - a[1][0] * a[2][2]) / det; c[2][0] = (a[1][0] * a[2][1] - a[1][1] * a[2][0]) / det; c[0][1] = (a[2][1] * a[0][2] - a[2][2] * a[0][1]) / det; c[1][1] = (a[2][2] * a[0][0] - a[2][0] * a[0][2]) / det; c[2][1] = (a[2][0] * a[0][1] - a[2][1] * a[0][0]) / det; c[0][2] = (a[0][1] * a[1][2] - a[0][2] * a[1][1]) / det; c[1][2] = (a[0][2] * a[1][0] - a[0][0] * a[1][2]) / det; c[2][2] = (a[0][0] * a[1][1] - a[0][1] * a[1][0]) / det; mat_copy_matrix_d3(m, c); return 1; } /* m = b^-1 a b */ int mat_get_similar_matrix_d3(double m[3][3], SPGCONST double a[3][3], SPGCONST double b[3][3], const double precision) { double c[3][3]; if (!mat_inverse_matrix_d3(c, b, precision)) { warning_print("spglib: No similar matrix due to 0 determinant.\n"); debug_print("No similar matrix due to 0 determinant.\n"); return 0; } mat_multiply_matrix_d3(m, a, b); mat_multiply_matrix_d3(m, c, m); return 1; } void mat_transpose_matrix_d3(double a[3][3], SPGCONST double b[3][3]) { double c[3][3]; c[0][0] = b[0][0]; c[0][1] = b[1][0]; c[0][2] = b[2][0]; c[1][0] = b[0][1]; c[1][1] = b[1][1]; c[1][2] = b[2][1]; c[2][0] = b[0][2]; c[2][1] = b[1][2]; c[2][2] = b[2][2]; mat_copy_matrix_d3(a, c); } void mat_transpose_matrix_i3(int a[3][3], SPGCONST int b[3][3]) { int c[3][3]; c[0][0] = b[0][0]; c[0][1] = b[1][0]; c[0][2] = b[2][0]; c[1][0] = b[0][1]; c[1][1] = b[1][1]; c[1][2] = b[2][1]; c[2][0] = b[0][2]; c[2][1] = b[1][2]; c[2][2] = b[2][2]; mat_copy_matrix_i3(a, c); } void mat_get_metric( double metric[3][3], SPGCONST double lattice[3][3]) { double lattice_t[3][3]; mat_transpose_matrix_d3(lattice_t, lattice); mat_multiply_matrix_d3(metric, lattice_t, lattice); } double mat_norm_squared_d3( const double a[3] ) { return a[0]*a[0]+a[1]*a[1]+a[2]*a[2]; } int mat_norm_squared_i3( const int a[3] ) { return a[0]*a[0]+a[1]*a[1]+a[2]*a[2]; } double mat_Dabs(const double a) { if (a < 0.0) return -a; else return a; } int mat_Nint(const double a) { if (a < 0.0) return (int) (a - 0.5); else return (int) (a + 0.5); } double mat_Dmod1(const double a) { if (a < 0.0) return a + 1.0 - (int) a; else return a - (int) a; } MatINT * mat_alloc_MatINT(const int size) { MatINT *matint; matint = malloc( sizeof( MatINT ) ); matint->size = size; if ( size > 0 ) { if ( ( matint->mat = malloc( sizeof(int[3][3]) * size) ) == NULL ) { warning_print("spglib: Memory could not be allocated "); warning_print("(MatINT, line %d, %s).\n", __LINE__, __FILE__); exit(1); } } return matint; } void mat_free_MatINT( MatINT * matint ) { if ( matint->size > 0 ) { free( matint->mat ); matint->mat = NULL; } free( matint ); matint = NULL; } VecDBL * mat_alloc_VecDBL( const int size ) { VecDBL *vecdbl; vecdbl = malloc( sizeof( VecDBL ) ); vecdbl->size = size; if ( size > 0 ) { if ( ( vecdbl->vec = malloc( sizeof(double[3]) * size) ) == NULL ) { warning_print("spglib: Memory could not be allocated "); warning_print("(VecDBL, line %d, %s).\n", __LINE__, __FILE__); exit(1); } } return vecdbl; } void mat_free_VecDBL( VecDBL * vecdbl ) { if ( vecdbl->size > 0 ) { free( vecdbl->vec ); vecdbl->vec = NULL; } free( vecdbl ); vecdbl = NULL; } int mat_is_int_matrix( SPGCONST double mat[3][3], double symprec ) { int i,j ; for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { if ( mat_Dabs( mat_Nint( mat[i][j] ) - mat[i][j] ) > symprec ) { return 0; } } } return 1; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/pointgroup.c0000644000175000001440000005636612250371054027104 0ustar marcususers/* pointgroup.c */ /* Copyright (C) 2008 Atsushi Togo */ #include #include #include "lattice.h" #include "pointgroup.h" #include "symmetry.h" #include "mathfunc.h" #include "debug.h" #define NUM_ROT_AXES 73 typedef struct { int table[10]; char symbol[6]; Holohedry holohedry; Laue laue; } PointgroupType; static PointgroupType pointgroup_data[32] = { { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, "1 ", TRICLI, LAUE1, }, { {0, 0, 0, 0, 1, 1, 0, 0, 0, 0}, "-1 ", TRICLI, LAUE1, }, { {0, 0, 0, 0, 0, 1, 1, 0, 0, 0}, "2 ", MONOCLI, LAUE2M, }, { {0, 0, 0, 1, 0, 1, 0, 0, 0, 0}, "m ", MONOCLI, LAUE2M, }, { {0, 0, 0, 1, 1, 1, 1, 0, 0, 0}, "2/m ", MONOCLI, LAUE2M, }, { {0, 0, 0, 0, 0, 1, 3, 0, 0, 0}, "222 ", ORTHO, LAUEMMM, }, { {0, 0, 0, 2, 0, 1, 1, 0, 0, 0}, "mm2 ", ORTHO, LAUEMMM, }, { {0, 0, 0, 3, 1, 1, 3, 0, 0, 0}, "mmm ", ORTHO, LAUEMMM, }, { {0, 0, 0, 0, 0, 1, 1, 0, 2, 0}, "4 ", TETRA, LAUE4M, }, { {0, 2, 0, 0, 0, 1, 1, 0, 0, 0}, "-4 ", TETRA, LAUE4M, }, { {0, 2, 0, 1, 1, 1, 1, 0, 2, 0}, "4/m ", TETRA, LAUE4M, }, { {0, 0, 0, 0, 0, 1, 5, 0, 2, 0}, "422 ", TETRA, LAUE4MMM, }, { {0, 0, 0, 4, 0, 1, 1, 0, 2, 0}, "4mm ", TETRA, LAUE4MMM, }, { {0, 2, 0, 2, 0, 1, 3, 0, 0, 0}, "-42m ", TETRA, LAUE4MMM, }, { {0, 2, 0, 5, 1, 1, 5, 0, 2, 0}, "4/mmm", TETRA, LAUE4MMM, }, { {0, 0, 0, 0, 0, 1, 0, 2, 0, 0}, "3 ", TRIGO, LAUE3, }, { {0, 0, 2, 0, 1, 1, 0, 2, 0, 0}, "-3 ", TRIGO, LAUE3, }, { {0, 0, 0, 0, 0, 1, 3, 2, 0, 0}, "32 ", TRIGO, LAUE3M, }, { {0, 0, 0, 3, 0, 1, 0, 2, 0, 0}, "3m ", TRIGO, LAUE3M, }, { {0, 0, 2, 3, 1, 1, 3, 2, 0, 0}, "-3m ", TRIGO, LAUE3M, }, { {0, 0, 0, 0, 0, 1, 1, 2, 0, 2}, "6 ", HEXA, LAUE6M, }, { {2, 0, 0, 1, 0, 1, 0, 2, 0, 0}, "-6 ", HEXA, LAUE6M, }, { {2, 0, 2, 1, 1, 1, 1, 2, 0, 2}, "6/m ", HEXA, LAUE6M, }, { {0, 0, 0, 0, 0, 1, 7, 2, 0, 2}, "622 ", HEXA, LAUE6MMM, }, { {0, 0, 0, 6, 0, 1, 1, 2, 0, 2}, "6mm ", HEXA, LAUE6MMM, }, { {2, 0, 0, 4, 0, 1, 3, 2, 0, 0}, "-62m ", HEXA, LAUE6MMM, }, { {2, 0, 2, 7, 1, 1, 7, 2, 0, 2}, "6/mmm", HEXA, LAUE6MMM, }, { {0, 0, 0, 0, 0, 1, 3, 8, 0, 0}, "23 ", CUBIC, LAUEM3, }, { {0, 0, 8, 3, 1, 1, 3, 8, 0, 0}, "m-3 ", CUBIC, LAUEM3, }, { {0, 0, 0, 0, 0, 1, 9, 8, 6, 0}, "432 ", CUBIC, LAUEM3M, }, { {0, 6, 0, 6, 0, 1, 3, 8, 0, 0}, "-43m ", CUBIC, LAUEM3M, }, { {0, 6, 8, 9, 1, 1, 9, 8, 6, 0}, "m-3m ", CUBIC, LAUEM3M, } }; static int identity[3][3] = { { 1, 0, 0}, { 0, 1, 0}, { 0, 0, 1}, }; static int inversion[3][3] = { {-1, 0, 0}, { 0,-1, 0}, { 0, 0,-1}, }; static int rot_axes[][3] = { { 1, 0, 0}, { 0, 1, 0}, { 0, 0, 1}, { 0, 1, 1}, { 1, 0, 1}, { 1, 1, 0}, { 0, 1,-1}, {-1, 0, 1}, { 1,-1, 0}, { 1, 1, 1}, /* 10 */ {-1, 1, 1}, { 1,-1, 1}, { 1, 1,-1}, { 0, 1, 2}, { 2, 0, 1}, { 1, 2, 0}, { 0, 2, 1}, { 1, 0, 2}, { 2, 1, 0}, { 0,-1, 2}, /* 20 */ { 2, 0,-1}, {-1, 2, 0}, { 0,-2, 1}, { 1, 0,-2}, {-2, 1, 0}, { 2, 1, 1}, { 1, 2, 1}, { 1, 1, 2}, { 2,-1,-1}, {-1, 2,-1}, /* 30 */ {-1,-1, 2}, { 2, 1,-1}, {-1, 2, 1}, { 1,-1, 2}, { 2,-1, 1}, /* 35 */ { 1, 2,-1}, {-1, 1, 2}, { 3, 1, 2}, { 2, 3, 1}, { 1, 2, 3}, /* 40 */ { 3, 2, 1}, { 1, 3, 2}, { 2, 1, 3}, { 3,-1, 2}, { 2, 3,-1}, /* 45 */ {-1, 2, 3}, { 3,-2, 1}, { 1, 3,-2}, {-2, 1, 3}, { 3,-1,-2}, /* 50 */ {-2, 3,-1}, {-1,-2, 3}, { 3,-2,-1}, {-1, 3,-2}, {-2,-1, 3}, /* 55 */ { 3, 1,-2}, {-2, 3, 1}, { 1,-2, 3}, { 3, 2,-1}, {-1, 3, 2}, /* 60 */ { 2,-1, 3}, { 1, 1, 3}, {-1, 1, 3}, { 1,-1, 3}, {-1,-1, 3}, /* 65 */ { 1, 3, 1}, {-1, 3, 1}, { 1, 3,-1}, {-1, 3,-1}, { 3, 1, 1}, /* 70 */ { 3, 1,-1}, { 3,-1, 1}, { 3,-1,-1}, }; static int get_pointgroup_number( const Symmetry * symmetry ); static int get_pointgroup_class_table( int table[10], const Symmetry * symmetry ); static int get_rotation_type( SPGCONST int rot[3][3] ); static int get_rotation_axis( SPGCONST int rot[3][3] ); static int get_orthogonal_axis( int ortho_axes[], SPGCONST int proper_rot[3][3], const int rot_order ); static int laue2m( int axes[3], const Symmetry * symmetry ); #ifdef DEBUG static int lauemmm( int axes[3], const Symmetry * symmetry ); static int laue4m( int axes[3], const Symmetry * symmetry ); static int laue4mmm( int axes[3], const Symmetry * symmetry ); static int laue3( int axes[3], const Symmetry * symmetry ); static int laue3m( int axes[3], const Symmetry * symmetry ); static int lauem3m( int axes[3], const Symmetry * symmetry ); #endif static int laue_one_axis( int axes[3], const Symmetry * symmetry, const int rot_order ); static int lauennn( int axes[3], const Symmetry * symmetry, const int rot_order ); static int get_axes( int axes[3], const Laue laue, const Symmetry * symmetry ); static void get_proper_rotation( int prop_rot[3][3], SPGCONST int rot[3][3] ); static void get_transform_matrix( int mat[3][3], const int axes[3] ); static int is_exist_axis( const int axis_vec[3], const int axis_index ); int ptg_get_pointgroup_number( const Symmetry * symmetry ) { return get_pointgroup_number( symmetry ); } Pointgroup ptg_get_pointgroup( const int pointgroup_number ) { Pointgroup pointgroup; PointgroupType pointgroup_type; pointgroup_type = pointgroup_data[ pointgroup_number ]; strcpy( pointgroup.symbol, pointgroup_type.symbol ); pointgroup.holohedry = pointgroup_type.holohedry; pointgroup.laue = pointgroup_type.laue; debug_print("Point group: %s\n", pointgroup_type.symbol ); return pointgroup; } /* pointgroup is modified. */ void ptg_get_transformation_matrix( Pointgroup * pointgroup, const Symmetry * symmetry ) { int axes[3]; int transform_mat[3][3]; get_axes( axes, pointgroup->laue, symmetry ); get_transform_matrix( transform_mat, axes ); mat_copy_matrix_i3( pointgroup->transform_mat, transform_mat ); } static int get_pointgroup_number( const Symmetry * symmetry ) { int i, j, pg_num, counter; int table[10]; PointgroupType pointgroup_type; /* Get list of rotation part of symmetry operations */ if ( ! get_pointgroup_class_table( table, symmetry ) ) { pg_num = -1; goto end; } pg_num = -1; for ( i = 0; i < 32; i++ ) { counter = 0; pointgroup_type = pointgroup_data[ i ]; for ( j = 0; j < 10; j++ ) { if ( pointgroup_type.table[j] == table[j] ) { counter++; } } if ( counter == 10 ) { pg_num = i; break; } } end: return pg_num; } static int get_pointgroup_class_table( int table[10], const Symmetry * symmetry ) { /* Look-up table */ /* Operation -6 -4 -3 -2 -1 1 2 3 4 6 */ /* Trace - 2 -1 0 1 -3 3 -1 0 1 2 */ /* Determinant -1 -1 -1 -1 -1 1 1 1 1 1 */ /* table[0] = -6 axis */ /* table[1] = -4 axis */ /* table[2] = -3 axis */ /* table[3] = -2 axis */ /* table[4] = -1 axis */ /* table[5] = 1 axis */ /* table[6] = 2 axis */ /* table[7] = 3 axis */ /* table[8] = 4 axis */ /* table[9] = 6 axis */ int i, rot_type; for ( i = 0; i < 10; i++ ) { table[i] = 0; } for ( i = 0; i < symmetry->size; i++ ) { rot_type = get_rotation_type( symmetry->rot[i] ); if ( rot_type == -1 ) { goto err; } else { table[rot_type]++; } } return 1; err: warning_print("spglib: No point group symbol found "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); return 0; } static int get_rotation_type( SPGCONST int rot[3][3] ) { int rot_type; if ( mat_get_determinant_i3( rot ) == -1 ) { switch ( mat_get_trace_i3( rot ) ) { case -2: /* -6 */ rot_type = 0; break; case -1: /* -4 */ rot_type = 1; break; case 0: /* -3 */ rot_type = 2; break; case 1: /* -2 */ rot_type = 3; break; case -3: /* -1 */ rot_type = 4; break; default: rot_type = -1; break; } } else { switch ( mat_get_trace_i3( rot ) ) { case 3: /* 1 */ rot_type = 5; break; case -1: /* 2 */ rot_type = 6; break; case 0: /* 3 */ rot_type = 7; break; case 1: /* 4 */ rot_type = 8; break; case 2: /* 6 */ rot_type = 9; break; default: rot_type = -1; break; } } return rot_type; } static int get_axes( int axes[3], const Laue laue, const Symmetry * symmetry ) { switch (laue) { case LAUE1: axes[0] = 0; axes[1] = 1; axes[2] = 2; break; case LAUE2M: laue2m( axes, symmetry ); break; case LAUEMMM: lauennn( axes, symmetry, 2 ); break; case LAUE4M: laue_one_axis( axes, symmetry, 4 ); break; case LAUE4MMM: laue_one_axis( axes, symmetry, 4 ); break; case LAUE3: laue_one_axis( axes, symmetry, 3 ); break; case LAUE3M: laue_one_axis( axes, symmetry, 3 ); break; case LAUE6M: laue_one_axis( axes, symmetry, 3 ); break; case LAUE6MMM: laue_one_axis( axes, symmetry, 3 ); break; case LAUEM3: lauennn( axes, symmetry, 2 ); break; case LAUEM3M: lauennn( axes, symmetry, 4 ); break; default: break; } return 1; } static int laue2m( int axes[3], const Symmetry * symmetry ) { int i, num_ortho_axis, norm, min_norm, is_found, tmpval; int prop_rot[3][3], t_mat[3][3]; int ortho_axes[NUM_ROT_AXES]; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search two-fold rotation */ if ( ! ( mat_get_trace_i3( prop_rot ) == -1 ) ) { continue; } /* The first axis */ axes[1] = get_rotation_axis( prop_rot ); break; } /* The second axis */ num_ortho_axis = get_orthogonal_axis( ortho_axes, prop_rot, 2 ); if ( ! num_ortho_axis ) { goto err; } min_norm = 8; is_found = 0; for ( i = 0; i < num_ortho_axis; i++ ) { norm = mat_norm_squared_i3( rot_axes[ortho_axes[i]] ); if ( norm < min_norm ) { min_norm = norm; axes[0] = ortho_axes[i]; is_found = 1; } } if ( ! is_found ) { goto err; } /* The third axis */ min_norm = 8; is_found = 0; for ( i = 0; i < num_ortho_axis; i++ ) { norm = mat_norm_squared_i3( rot_axes[ortho_axes[i]] ); if ( norm < min_norm && ( ! ( ortho_axes[i] == axes[0] ) ) ) { min_norm = norm; axes[2] = ortho_axes[i]; is_found = 1; } } if ( ! is_found ) { goto err; } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[2]; axes[2] = tmpval; } return 1; err: return 0; } #ifdef DEBUG static int lauemmm( int axes[3], const Symmetry * symmetry ) { int i, count, axis, tmpval; int prop_rot[3][3], t_mat[3][3]; for ( i = 0; i < 3; i++ ) { axes[i] = -1; } count = 0; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search two-fold rotation */ if ( ! ( mat_get_trace_i3( prop_rot ) == -1 ) ) { continue; } axis = get_rotation_axis( prop_rot ); if ( ! ( ( axis == axes[0] ) || ( axis == axes[1] ) || ( axis == axes[2] ) ) ) { axes[count] = axis; count++; } } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[1]; axes[1] = tmpval; } return 1; } static int laue4m( int axes[3], const Symmetry * symmetry ) { int i, num_ortho_axis, norm, min_norm, is_found, tmpval; int axis_vec[3]; int prop_rot[3][3], t_mat[3][3]; int ortho_axes[NUM_ROT_AXES]; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search foud-fold rotation */ if ( mat_get_trace_i3( prop_rot ) == 1 ) { /* The first axis */ axes[2] = get_rotation_axis( prop_rot ); break; } } /* The second axis */ num_ortho_axis = get_orthogonal_axis( ortho_axes, prop_rot, 4 ); if ( ! num_ortho_axis ) { goto err; } min_norm = 8; is_found = 0; for ( i = 0; i < num_ortho_axis; i++ ) { norm = mat_norm_squared_i3( rot_axes[ortho_axes[i]] ); if ( norm < min_norm ) { min_norm = norm; axes[0] = ortho_axes[i]; is_found = 1; } } if ( ! is_found ) { goto err; } /* The third axis */ mat_multiply_matrix_vector_i3( axis_vec, prop_rot, rot_axes[axes[0]] ); is_found = 0; for ( i = 0; i < NUM_ROT_AXES; i++ ) { if ( is_exist_axis( axis_vec, i ) ) { is_found = 1; axes[1] = i; break; } } if ( ! is_found ) { goto err; } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[1]; axes[1] = tmpval; } return 1; err: return 0; } static int laue4mmm( int axes[3], const Symmetry * symmetry ) { int i, is_found, tmpval, axis; int prop_rot[3][3], prop_rot2[3][3], t_mat[3][3]; int axis_vec[3]; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search foud-fold rotation */ if ( mat_get_trace_i3( prop_rot ) == 1 ) { /* The first axis */ axes[2] = get_rotation_axis( prop_rot ); break; } } is_found = 0; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot2, symmetry->rot[i] ); /* Search two-fold rotation */ if ( ! ( mat_get_trace_i3( prop_rot2 ) == -1 ) ) { continue; } /* The second axis */ axis = get_rotation_axis( prop_rot2 ); if ( ! ( axis == axes[2] ) ) { axes[0] = axis; is_found = 1; break; } } if ( ! is_found ) { goto err; } /* The third axis */ mat_multiply_matrix_vector_i3( axis_vec, prop_rot, rot_axes[axes[0]] ); is_found = 0; for ( i = 0; i < NUM_ROT_AXES; i++ ) { if ( is_exist_axis( axis_vec, i ) ) { is_found = 1; axes[1] = i; break; } } if ( ! is_found ) { goto err; } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[1]; axes[1] = tmpval; } return 1; err: return 0; } static int laue3( int axes[3], const Symmetry * symmetry ) { int i, num_ortho_axis, norm, min_norm, is_found, tmpval; int prop_rot[3][3], t_mat[3][3]; int axis_vec[3]; int ortho_axes[NUM_ROT_AXES]; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search thee-fold rotation */ if ( mat_get_trace_i3( prop_rot ) == 0 ) { /* The first axis */ axes[2] = get_rotation_axis( prop_rot ); break; } } /* The second axis */ num_ortho_axis = get_orthogonal_axis( ortho_axes, prop_rot, 3 ); if ( ! num_ortho_axis ) { goto err; } min_norm = 8; is_found = 0; for ( i = 0; i < num_ortho_axis; i++ ) { norm = mat_norm_squared_i3( rot_axes[ortho_axes[i]] ); if ( norm < min_norm ) { min_norm = norm; axes[0] = ortho_axes[i]; is_found = 1; } } if ( ! is_found ) { goto err; } /* The third axis */ mat_multiply_matrix_vector_i3( axis_vec, prop_rot, rot_axes[axes[0]] ); is_found = 0; for ( i = 0; i < NUM_ROT_AXES; i++ ) { is_found = is_exist_axis( axis_vec, i ); if ( is_found == 1 ) { axes[1] = i; break; } if ( is_found == -1 ) { axes[1] = i + NUM_ROT_AXES; break; } } if ( ! is_found ) { goto err; } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[1]; axes[1] = tmpval; } return 1; err: return 0; } static int laue3m( int axes[3], const Symmetry * symmetry ) { int i, is_found, tmpval, axis; int prop_rot[3][3], prop_rot2[3][3], t_mat[3][3]; int axis_vec[3]; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search three-fold rotation */ if ( mat_get_trace_i3( prop_rot ) == 0 ) { /* The first axis */ axes[2] = get_rotation_axis( prop_rot ); debug_print("laue3m prop_rot\n"); debug_print_matrix_i3( prop_rot ); break; } } is_found = 0; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot2, symmetry->rot[i] ); /* Search two-fold rotation */ if ( ! ( mat_get_trace_i3( prop_rot2 ) == -1 ) ) { continue; } /* The second axis */ axis = get_rotation_axis( prop_rot2 ); if ( ! ( axis == axes[2] ) ) { axes[0] = axis; is_found = 1; break; } } if ( ! is_found ) { goto err; } /* The third axis */ mat_multiply_matrix_vector_i3( axis_vec, prop_rot, rot_axes[axes[0]] ); is_found = 0; for ( i = 0; i < NUM_ROT_AXES; i++ ) { is_found = is_exist_axis( axis_vec, i ); if ( is_found == 1 ) { axes[1] = i; break; } if ( is_found == -1 ) { axes[1] = i + NUM_ROT_AXES; break; } } if ( ! is_found ) { goto err; } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[1]; axes[1] = tmpval; } return 1; err: return 0; } static int lauem3m( int axes[3], const Symmetry * symmetry ) { int i, count, axis, tmpval; int prop_rot[3][3], t_mat[3][3]; for ( i = 0; i < 3; i++ ) { axes[i] = -1; } count = 0; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search four-fold rotation */ if ( ! ( mat_get_trace_i3( prop_rot ) == 1 ) ) { continue; } axis = get_rotation_axis( prop_rot ); if ( ! ( ( axis == axes[0] ) || ( axis == axes[1] ) || ( axis == axes[2] ) ) ) { axes[count] = axis; count++; } } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[1]; axes[1] = tmpval; } return 1; } #endif static int laue_one_axis( int axes[3], const Symmetry * symmetry, const int rot_order ) { int i, j, num_ortho_axis, det, min_det, is_found, tmpval; int axis_vec[3], tmp_axes[3]; int prop_rot[3][3], t_mat[3][3]; int ortho_axes[NUM_ROT_AXES]; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search foud-fold rotation */ if ( rot_order == 4 ) { if ( mat_get_trace_i3( prop_rot ) == 1 ) { /* The first axis */ axes[2] = get_rotation_axis( prop_rot ); break; } } /* Search three-fold rotation */ if ( rot_order == 3 ) { if ( mat_get_trace_i3( prop_rot ) == 0 ) { /* The first axis */ axes[2] = get_rotation_axis( prop_rot ); break; } } } /* Candidates of the second axis */ num_ortho_axis = get_orthogonal_axis( ortho_axes, prop_rot, rot_order ); if ( ! num_ortho_axis ) { goto err; } tmp_axes[2] = axes[2]; min_det = 4; is_found = 0; for ( i = 0; i < num_ortho_axis; i++ ) { tmp_axes[0] = ortho_axes[i]; mat_multiply_matrix_vector_i3( axis_vec, prop_rot, rot_axes[tmp_axes[0]] ); for ( j = 0; j < num_ortho_axis; j++ ) { is_found = is_exist_axis( axis_vec, ortho_axes[j] ); if ( is_found == 1 ) { tmp_axes[1] = ortho_axes[j]; break; } if ( is_found == -1 ) { tmp_axes[1] = ortho_axes[j] + NUM_ROT_AXES; break; } } get_transform_matrix( t_mat, tmp_axes ); det = mat_get_determinant_i3( t_mat ); if ( det < 0 ) { det = -det; } if ( det < min_det ) { min_det = det; axes[0] = tmp_axes[0]; axes[1] = tmp_axes[1]; } } if ( ! is_found ) { goto err; } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[1]; axes[1] = tmpval; } return 1; err: return 0; } static int lauennn( int axes[3], const Symmetry * symmetry, const int rot_order ) { int i, count, axis, tmpval; int prop_rot[3][3], t_mat[3][3]; for ( i = 0; i < 3; i++ ) { axes[i] = -1; } count = 0; for ( i = 0; i < symmetry->size; i++ ) { get_proper_rotation( prop_rot, symmetry->rot[i] ); /* Search two- or four-fold rotation */ if ( ( mat_get_trace_i3( prop_rot ) == -1 && rot_order == 2) || ( mat_get_trace_i3( prop_rot ) == 1 && rot_order == 4 ) ) { axis = get_rotation_axis( prop_rot ); if ( ! ( ( axis == axes[0] ) || ( axis == axes[1] ) || ( axis == axes[2] ) ) ) { axes[count] = axis; count++; } } } get_transform_matrix( t_mat, axes ); if ( mat_get_determinant_i3( t_mat ) < 0 ) { tmpval = axes[0]; axes[0] = axes[1]; axes[1] = tmpval; } return 1; } static int get_rotation_axis( SPGCONST int proper_rot[3][3] ) { int i, axis = -1; int vec[3]; /* No specific axis for I and -I */ if ( mat_check_identity_matrix_i3( proper_rot, identity ) ) { goto end; } /* Look for eigenvector = rotation axis */ for ( i = 0; i < NUM_ROT_AXES; i++ ) { mat_multiply_matrix_vector_i3( vec, proper_rot, rot_axes[i] ); if ( vec[0] == rot_axes[i][0] && vec[1] == rot_axes[i][1] && vec[2] == rot_axes[i][2] ) { axis = i; break; } } end: #ifdef DEBUG if ( axis == -1 ) { printf("rotation axis cound not found.\n"); } #endif return axis; } static int get_orthogonal_axis( int ortho_axes[], SPGCONST int proper_rot[3][3], const int rot_order ) { int i, num_ortho_axis; int vec[3]; int sum_rot[3][3], rot[3][3]; num_ortho_axis = 0; mat_copy_matrix_i3( sum_rot, identity ); mat_copy_matrix_i3( rot, identity ); for ( i = 0; i < rot_order-1; i++ ) { mat_multiply_matrix_i3( rot, proper_rot, rot ); mat_add_matrix_i3( sum_rot, rot, sum_rot ); } for ( i = 0; i < NUM_ROT_AXES; i++ ) { mat_multiply_matrix_vector_i3( vec, sum_rot, rot_axes[i] ); if ( vec[0] == 0 && vec[1] == 0 && vec[2] == 0 ) { ortho_axes[ num_ortho_axis ] = i; num_ortho_axis++; } } return num_ortho_axis; } static void get_proper_rotation( int prop_rot[3][3], SPGCONST int rot[3][3] ) { if ( mat_get_determinant_i3( rot ) == -1 ) { mat_multiply_matrix_i3( prop_rot, inversion, rot ); } else { mat_copy_matrix_i3( prop_rot, rot ); } } static void get_transform_matrix( int mat[3][3], const int axes[3] ) { int i, j, s[3]; for ( i = 0; i < 3; i++ ) { if ( axes[i] < NUM_ROT_AXES ) { s[i] = 1; } else { s[i] = -1; } } for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { mat[i][j] = s[j] * rot_axes[axes[j]%NUM_ROT_AXES][i]; } } } static int is_exist_axis( const int axis_vec[3], const int axis_index ) { if ( ( axis_vec[0] == rot_axes[axis_index][0] ) && ( axis_vec[1] == rot_axes[axis_index][1] ) && ( axis_vec[2] == rot_axes[axis_index][2] ) ) { return 1; } if ( ( axis_vec[0] == -rot_axes[axis_index][0] ) && ( axis_vec[1] == -rot_axes[axis_index][1] ) && ( axis_vec[2] == -rot_axes[axis_index][2] ) ) { return -1; } return 0; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/cell.c0000644000175000001440000000362212250371054025600 0ustar marcususers/* cell.c */ /* Copyright (C) 2008 Atsushi Togo */ #include #include #include "cell.h" #include "mathfunc.h" #include "debug.h" Cell * cel_alloc_cell( const int size ) { Cell *cell; int i, j; cell = malloc( sizeof( Cell ) ); for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { cell->lattice[i][j] = 0; } } cell->size = size; if ( size > 0 ) { if ((cell->types = (int *) malloc(sizeof(int) * size)) == NULL) { warning_print("spglib: Memory of cell could not be allocated."); exit(1); } if ((cell->position = (double (*)[3]) malloc(sizeof(double[3]) * size)) == NULL) { warning_print("spglib: Memory of cell could not be allocated."); exit(1); } } return cell; } void cel_free_cell( Cell * cell ) { if ( cell->size > 0 ) { free( cell->position ); free( cell->types ); } free ( cell ); } void cel_set_cell( Cell * cell, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[] ) { int i, j; mat_copy_matrix_d3(cell->lattice, lattice); for (i = 0; i < cell->size; i++) { for (j = 0; j < 3; j++) { cell->position[i][j] = position[i][j]; } cell->types[i] = types[i]; } } Cell * cel_copy_cell( SPGCONST Cell * cell ) { Cell * cell_new; cell_new = cel_alloc_cell( cell->size ); cel_set_cell( cell_new, cell->lattice, cell->position, cell->types ); return cell_new; } int cel_is_overlap( const double a[3], const double b[3], SPGCONST double lattice[3][3], const double symprec ) { int i; double v_diff[3]; for ( i = 0; i < 3; i++ ) { v_diff[i] = a[i] - b[i]; v_diff[i] -= mat_Nint( v_diff[i] ); } mat_multiply_matrix_vector_d3( v_diff, lattice, v_diff ); if ( mat_norm_squared_d3( v_diff ) < symprec*symprec ) { return 1; } else { return 0; } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/COPYING0000644000175000001440000000264312250371054025552 0ustar marcususersThe "New" BSD License: Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the Dom Derrien nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/spg_database.c0000644000175000001440000174601612250371054027312 0ustar marcususers/* spg_database.c */ /* Copyright (C) 2010 Atsushi Togo */ #include "spg_database.h" #include "pointgroup.h" /* In Hall symbols (4th column), '=' is used instead of '"'. */ static const SpacegroupType spacegroup_types[] = { { 0, " ", " ", " ", " ", " ", NONE }, /* 0*/ { 1, "C1^1 ", "P 1 ", "P 1 ", "P 1 ", "P1 ", TRICLI }, /* 1*/ { 2, "Ci^1 ", "-P 1 ", "P -1 ", "P -1 ", "P-1 ", TRICLI }, /* 2*/ { 3, "C2^1 ", "P 2y ", "P 2 = P 1 2 1 ", "P 1 2 1 ", "P2 ", MONOCLI }, /* 3*/ { 3, "C2^1 ", "P 2 ", "P 2 = P 1 1 2 ", "P 1 1 2 ", "P2 ", MONOCLI }, /* 4*/ { 3, "C2^1 ", "P 2x ", "P 2 = P 2 1 1 ", "P 2 1 1 ", "P2 ", MONOCLI }, /* 5*/ { 4, "C2^2 ", "P 2yb ", "P 2_1 = P 1 2_1 1 ", "P 1 2_1 1 ", "P2_1 ", MONOCLI }, /* 6*/ { 4, "C2^2 ", "P 2c ", "P 2_1 = P 1 1 2_1 ", "P 1 1 2_1 ", "P2_1 ", MONOCLI }, /* 7*/ { 4, "C2^2 ", "P 2xa ", "P 2_1 = P 2_1 1 1 ", "P 2_1 1 1 ", "P2_1 ", MONOCLI }, /* 8*/ { 5, "C2^3 ", "C 2y ", "C 2 = C 1 2 1 ", "C 1 2 1 ", "C2 ", MONOCLI }, /* 9*/ { 5, "C2^3 ", "A 2y ", "C 2 = A 1 2 1 ", "A 1 2 1 ", "C2 ", MONOCLI }, /* 10*/ { 5, "C2^3 ", "I 2y ", "C 2 = I 1 2 1 ", "I 1 2 1 ", "C2 ", MONOCLI }, /* 11*/ { 5, "C2^3 ", "A 2 ", "C 2 = A 1 1 2 ", "A 1 1 2 ", "C2 ", MONOCLI }, /* 12*/ { 5, "C2^3 ", "B 2 ", "C 2 = B 1 1 2 = B 2 ", "B 1 1 2 ", "C2 ", MONOCLI }, /* 13*/ { 5, "C2^3 ", "I 2 ", "C 2 = I 1 1 2 ", "I 1 1 2 ", "C2 ", MONOCLI }, /* 14*/ { 5, "C2^3 ", "B 2x ", "C 2 = B 2 1 1 ", "B 2 1 1 ", "C2 ", MONOCLI }, /* 15*/ { 5, "C2^3 ", "C 2x ", "C 2 = C 2 1 1 ", "C 2 1 1 ", "C2 ", MONOCLI }, /* 16*/ { 5, "C2^3 ", "I 2x ", "C 2 = I 2 1 1 ", "I 2 1 1 ", "C2 ", MONOCLI }, /* 17*/ { 6, "Cs^1 ", "P -2y ", "P m = P 1 m 1 ", "P 1 m 1 ", "Pm ", MONOCLI }, /* 18*/ { 6, "Cs^1 ", "P -2 ", "P m = P 1 1 m ", "P 1 1 m ", "Pm ", MONOCLI }, /* 19*/ { 6, "Cs^1 ", "P -2x ", "P m = P m 1 1 ", "P m 1 1 ", "Pm ", MONOCLI }, /* 20*/ { 7, "Cs^2 ", "P -2yc ", "P c = P 1 c 1 ", "P 1 c 1 ", "Pc ", MONOCLI }, /* 21*/ { 7, "Cs^2 ", "P -2yac ", "P c = P 1 n 1 ", "P 1 n 1 ", "Pc ", MONOCLI }, /* 22*/ { 7, "Cs^2 ", "P -2ya ", "P c = P 1 a 1 ", "P 1 a 1 ", "Pc ", MONOCLI }, /* 23*/ { 7, "Cs^2 ", "P -2a ", "P c = P 1 1 a ", "P 1 1 a ", "Pc ", MONOCLI }, /* 24*/ { 7, "Cs^2 ", "P -2ab ", "P c = P 1 1 n ", "P 1 1 n ", "Pc ", MONOCLI }, /* 25*/ { 7, "Cs^2 ", "P -2b ", "P c = P 1 1 b = P b ", "P 1 1 b ", "Pc ", MONOCLI }, /* 26*/ { 7, "Cs^2 ", "P -2xb ", "P c = P b 1 1 ", "P b 1 1 ", "Pc ", MONOCLI }, /* 27*/ { 7, "Cs^2 ", "P -2xbc ", "P c = P n 1 1 ", "P n 1 1 ", "Pc ", MONOCLI }, /* 28*/ { 7, "Cs^2 ", "P -2xc ", "P c = P c 1 1 ", "P c 1 1 ", "Pc ", MONOCLI }, /* 29*/ { 8, "Cs^3 ", "C -2y ", "C m = C 1 m 1 ", "C 1 m 1 ", "Cm ", MONOCLI }, /* 30*/ { 8, "Cs^3 ", "A -2y ", "C m = A 1 m 1 ", "A 1 m 1 ", "Cm ", MONOCLI }, /* 31*/ { 8, "Cs^3 ", "I -2y ", "C m = I 1 m 1 ", "I 1 m 1 ", "Cm ", MONOCLI }, /* 32*/ { 8, "Cs^3 ", "A -2 ", "C m = A 1 1 m ", "A 1 1 m ", "Cm ", MONOCLI }, /* 33*/ { 8, "Cs^3 ", "B -2 ", "C m = B 1 1 m = B m ", "B 1 1 m ", "Cm ", MONOCLI }, /* 34*/ { 8, "Cs^3 ", "I -2 ", "C m = I 1 1 m ", "I 1 1 m ", "Cm ", MONOCLI }, /* 35*/ { 8, "Cs^3 ", "B -2x ", "C m = B m 1 1 ", "B m 1 1 ", "Cm ", MONOCLI }, /* 36*/ { 8, "Cs^3 ", "C -2x ", "C m = C m 1 1 ", "C m 1 1 ", "Cm ", MONOCLI }, /* 37*/ { 8, "Cs^3 ", "I -2x ", "C m = I m 1 1 ", "I m 1 1 ", "Cm ", MONOCLI }, /* 38*/ { 9, "Cs^4 ", "C -2yc ", "C c = C 1 c 1 ", "C 1 c 1 ", "Cc ", MONOCLI }, /* 39*/ { 9, "Cs^4 ", "A -2yac ", "C c = A 1 n 1 ", "A 1 n 1 ", "Cc ", MONOCLI }, /* 40*/ { 9, "Cs^4 ", "I -2ya ", "C c = I 1 a 1 ", "I 1 a 1 ", "Cc ", MONOCLI }, /* 41*/ { 9, "Cs^4 ", "A -2ya ", "C c = A 1 a 1 ", "A 1 a 1 ", "Cc ", MONOCLI }, /* 42*/ { 9, "Cs^4 ", "C -2ybc ", "C c = C 1 n 1 ", "C 1 n 1 ", "Cc ", MONOCLI }, /* 43*/ { 9, "Cs^4 ", "I -2yc ", "C c = I 1 c 1 ", "I 1 c 1 ", "Cc ", MONOCLI }, /* 44*/ { 9, "Cs^4 ", "A -2a ", "C c = A 1 1 a ", "A 1 1 a ", "Cc ", MONOCLI }, /* 45*/ { 9, "Cs^4 ", "B -2bc ", "C c = B 1 1 n ", "B 1 1 n ", "Cc ", MONOCLI }, /* 46*/ { 9, "Cs^4 ", "I -2b ", "C c = I 1 1 b ", "I 1 1 b ", "Cc ", MONOCLI }, /* 47*/ { 9, "Cs^4 ", "B -2b ", "C c = B 1 1 b = B b ", "B 1 1 b ", "Cc ", MONOCLI }, /* 48*/ { 9, "Cs^4 ", "A -2ac ", "C c = A 1 1 n ", "A 1 1 n ", "Cc ", MONOCLI }, /* 49*/ { 9, "Cs^4 ", "I -2a ", "C c = I 1 1 a ", "I 1 1 a ", "Cc ", MONOCLI }, /* 50*/ { 9, "Cs^4 ", "B -2xb ", "C c = B b 1 1 ", "B b 1 1 ", "Cc ", MONOCLI }, /* 51*/ { 9, "Cs^4 ", "C -2xbc ", "C c = C n 1 1 ", "C n 1 1 ", "Cc ", MONOCLI }, /* 52*/ { 9, "Cs^4 ", "I -2xc ", "C c = I c 1 1 ", "I c 1 1 ", "Cc ", MONOCLI }, /* 53*/ { 9, "Cs^4 ", "C -2xc ", "C c = C c 1 1 ", "C c 1 1 ", "Cc ", MONOCLI }, /* 54*/ { 9, "Cs^4 ", "B -2xbc ", "C c = B n 1 1 ", "B n 1 1 ", "Cc ", MONOCLI }, /* 55*/ { 9, "Cs^4 ", "I -2xb ", "C c = I b 1 1 ", "I b 1 1 ", "Cc ", MONOCLI }, /* 56*/ { 10, "C2h^1 ", "-P 2y ", "P 2/m = P 1 2/m 1 ", "P 1 2/m 1 ", "P2/m ", MONOCLI }, /* 57*/ { 10, "C2h^1 ", "-P 2 ", "P 2/m = P 1 1 2/m ", "P 1 1 2/m ", "P2/m ", MONOCLI }, /* 58*/ { 10, "C2h^1 ", "-P 2x ", "P 2/m = P 2/m 1 1 ", "P 2/m 1 1 ", "P2/m ", MONOCLI }, /* 59*/ { 11, "C2h^2 ", "-P 2yb ", "P 2_1/m = P 1 2_1/m 1 ", "P 1 2_1/m 1 ", "P2_1/m ", MONOCLI }, /* 60*/ { 11, "C2h^2 ", "-P 2c ", "P 2_1/m = P 1 1 2_1/m ", "P 1 1 2_1/m ", "P2_1/m ", MONOCLI }, /* 61*/ { 11, "C2h^2 ", "-P 2xa ", "P 2_1/m = P 2_1/m 1 1 ", "P 2_1/m 1 1 ", "P2_1/m ", MONOCLI }, /* 62*/ { 12, "C2h^3 ", "-C 2y ", "C 2/m = C 1 2/m 1 ", "C 1 2/m 1 ", "C2/m ", MONOCLI }, /* 63*/ { 12, "C2h^3 ", "-A 2y ", "C 2/m = A 1 2/m 1 ", "A 1 2/m 1 ", "C2/m ", MONOCLI }, /* 64*/ { 12, "C2h^3 ", "-I 2y ", "C 2/m = I 1 2/m 1 ", "I 1 2/m 1 ", "C2/m ", MONOCLI }, /* 65*/ { 12, "C2h^3 ", "-A 2 ", "C 2/m = A 1 1 2/m ", "A 1 1 2/m ", "C2/m ", MONOCLI }, /* 66*/ { 12, "C2h^3 ", "-B 2 ", "C 2/m = B 1 1 2/m = B 2/m ", "B 1 1 2/m ", "C2/m ", MONOCLI }, /* 67*/ { 12, "C2h^3 ", "-I 2 ", "C 2/m = I 1 1 2/m ", "I 1 1 2/m ", "C2/m ", MONOCLI }, /* 68*/ { 12, "C2h^3 ", "-B 2x ", "C 2/m = B 2/m 1 1 ", "B 2/m 1 1 ", "C2/m ", MONOCLI }, /* 69*/ { 12, "C2h^3 ", "-C 2x ", "C 2/m = C 2/m 1 1 ", "C 2/m 1 1 ", "C2/m ", MONOCLI }, /* 70*/ { 12, "C2h^3 ", "-I 2x ", "C 2/m = I 2/m 1 1 ", "I 2/m 1 1 ", "C2/m ", MONOCLI }, /* 71*/ { 13, "C2h^4 ", "-P 2yc ", "P 2/c = P 1 2/c 1 ", "P 1 2/c 1 ", "P2/c ", MONOCLI }, /* 72*/ { 13, "C2h^4 ", "-P 2yac ", "P 2/c = P 1 2/n 1 ", "P 1 2/n 1 ", "P2/c ", MONOCLI }, /* 73*/ { 13, "C2h^4 ", "-P 2ya ", "P 2/c = P 1 2/a 1 ", "P 1 2/a 1 ", "P2/c ", MONOCLI }, /* 74*/ { 13, "C2h^4 ", "-P 2a ", "P 2/c = P 1 1 2/a ", "P 1 1 2/a ", "P2/c ", MONOCLI }, /* 75*/ { 13, "C2h^4 ", "-P 2ab ", "P 2/c = P 1 1 2/n ", "P 1 1 2/n ", "P2/c ", MONOCLI }, /* 76*/ { 13, "C2h^4 ", "-P 2b ", "P 2/c = P 1 1 2/b = P 2/b ", "P 1 1 2/b ", "P2/c ", MONOCLI }, /* 77*/ { 13, "C2h^4 ", "-P 2xb ", "P 2/c = P 2/b 1 1 ", "P 2/b 1 1 ", "P2/c ", MONOCLI }, /* 78*/ { 13, "C2h^4 ", "-P 2xbc ", "P 2/c = P 2/n 1 1 ", "P 2/n 1 1 ", "P2/c ", MONOCLI }, /* 79*/ { 13, "C2h^4 ", "-P 2xc ", "P 2/c = P 2/c 1 1 ", "P 2/c 1 1 ", "P2/c ", MONOCLI }, /* 80*/ { 14, "C2h^5 ", "-P 2ybc ", "P 2_1/c = P 1 2_1/c 1 ", "P 1 2_1/c 1 ", "P2_1/c ", MONOCLI }, /* 81*/ { 14, "C2h^5 ", "-P 2yn ", "P 2_1/c = P 1 2_1/n 1 ", "P 1 2_1/n 1 ", "P2_1/c ", MONOCLI }, /* 82*/ { 14, "C2h^5 ", "-P 2yab ", "P 2_1/c = P 1 2_1/a 1 ", "P 1 2_1/a 1 ", "P2_1/c ", MONOCLI }, /* 83*/ { 14, "C2h^5 ", "-P 2ac ", "P 2_1/c = P 1 1 2_1/a ", "P 1 1 2_1/a ", "P2_1/c ", MONOCLI }, /* 84*/ { 14, "C2h^5 ", "-P 2n ", "P 2_1/c = P 1 1 2_1/n ", "P 1 1 2_1/n ", "P2_1/c ", MONOCLI }, /* 85*/ { 14, "C2h^5 ", "-P 2bc ", "P 2_1/c = P 1 1 2_1/b = P 2_1/b", "P 1 1 2_1/b ", "P2_1/c ", MONOCLI }, /* 86*/ { 14, "C2h^5 ", "-P 2xab ", "P 2_1/c = P 2_1/b 1 1 ", "P 2_1/b 1 1 ", "P2_1/c ", MONOCLI }, /* 87*/ { 14, "C2h^5 ", "-P 2xn ", "P 2_1/c = P 2_1/n 1 1 ", "P 2_1/n 1 1 ", "P2_1/c ", MONOCLI }, /* 88*/ { 14, "C2h^5 ", "-P 2xac ", "P 2_1/c = P 2_1/c 1 1 ", "P 2_1/c 1 1 ", "P2_1/c ", MONOCLI }, /* 89*/ { 15, "C2h^6 ", "-C 2yc ", "C 2/c = C 1 2/c 1 ", "C 1 2/c 1 ", "C2/c ", MONOCLI }, /* 90*/ { 15, "C2h^6 ", "-A 2yac ", "C 2/c = A 1 2/n 1 ", "A 1 2/n 1 ", "C2/c ", MONOCLI }, /* 91*/ { 15, "C2h^6 ", "-I 2ya ", "C 2/c = I 1 2/a 1 ", "I 1 2/a 1 ", "C2/c ", MONOCLI }, /* 92*/ { 15, "C2h^6 ", "-A 2ya ", "C 2/c = A 1 2/a 1 ", "A 1 2/a 1 ", "C2/c ", MONOCLI }, /* 93*/ { 15, "C2h^6 ", "-C 2ybc ", "C 2/c = C 1 2/n 1 ", "C 1 2/n 1 ", "C2/c ", MONOCLI }, /* 94*/ { 15, "C2h^6 ", "-I 2yc ", "C 2/c = I 1 2/c 1 ", "I 1 2/c 1 ", "C2/c ", MONOCLI }, /* 95*/ { 15, "C2h^6 ", "-A 2a ", "C 2/c = A 1 1 2/a ", "A 1 1 2/a ", "C2/c ", MONOCLI }, /* 96*/ { 15, "C2h^6 ", "-B 2bc ", "C 2/c = B 1 1 2/n ", "B 1 1 2/n ", "C2/c ", MONOCLI }, /* 97*/ { 15, "C2h^6 ", "-I 2b ", "C 2/c = I 1 1 2/b ", "I 1 1 2/b ", "C2/c ", MONOCLI }, /* 98*/ { 15, "C2h^6 ", "-B 2b ", "C 2/c = B 1 1 2/b = B 2/b ", "B 1 1 2/b ", "C2/c ", MONOCLI }, /* 99*/ { 15, "C2h^6 ", "-A 2ac ", "C 2/c = A 1 1 2/n ", "A 1 1 2/n ", "C2/c ", MONOCLI }, /*100*/ { 15, "C2h^6 ", "-I 2a ", "C 2/c = I 1 1 2/a ", "I 1 1 2/a ", "C2/c ", MONOCLI }, /*101*/ { 15, "C2h^6 ", "-B 2xb ", "C 2/c = B 2/b 1 1 ", "B 2/b 1 1 ", "C2/c ", MONOCLI }, /*102*/ { 15, "C2h^6 ", "-C 2xbc ", "C 2/c = C 2/n 1 1 ", "C 2/n 1 1 ", "C2/c ", MONOCLI }, /*103*/ { 15, "C2h^6 ", "-I 2xc ", "C 2/c = I 2/c 1 1 ", "I 2/c 1 1 ", "C2/c ", MONOCLI }, /*104*/ { 15, "C2h^6 ", "-C 2xc ", "C 2/c = C 2/c 1 1 ", "C 2/c 1 1 ", "C2/c ", MONOCLI }, /*105*/ { 15, "C2h^6 ", "-B 2xbc ", "C 2/c = B 2/n 1 1 ", "B 2/n 1 1 ", "C2/c ", MONOCLI }, /*106*/ { 15, "C2h^6 ", "-I 2xb ", "C 2/c = I 2/b 1 1 ", "I 2/b 1 1 ", "C2/c ", MONOCLI }, /*107*/ { 16, "D2^1 ", "P 2 2 ", "P 2 2 2 ", "P 2 2 2 ", "P222 ", ORTHO }, /*108*/ { 17, "D2^2 ", "P 2c 2 ", "P 2 2 2_1 ", "P 2 2 2_1 ", "P222_1 ", ORTHO }, /*109*/ { 17, "D2^2 ", "P 2a 2a ", "P 2_1 2 2 ", "P 2_1 2 2 ", "P2_122 ", ORTHO }, /*110*/ { 17, "D2^2 ", "P 2 2b ", "P 2 2_1 2 ", "P 2 2_1 2 ", "P22_12 ", ORTHO }, /*111*/ { 18, "D2^3 ", "P 2 2ab ", "P 2_1 2_1 2 ", "P 2_1 2_1 2 ", "P2_12_12 ", ORTHO }, /*112*/ { 18, "D2^3 ", "P 2bc 2 ", "P 2 2_1 2_1 ", "P 2 2_1 2_1 ", "P22_12_1 ", ORTHO }, /*113*/ { 18, "D2^3 ", "P 2ac 2ac ", "P 2_1 2 2_1 ", "P 2_1 2 2_1 ", "P2_122_1 ", ORTHO }, /*114*/ { 19, "D2^4 ", "P 2ac 2ab ", "P 2_1 2_1 2_1 ", "P 2_1 2_1 2_1 ", "P2_12_12_1", ORTHO }, /*115*/ { 20, "D2^5 ", "C 2c 2 ", "C 2 2 2_1 ", "C 2 2 2_1 ", "C222_1 ", ORTHO }, /*116*/ { 20, "D2^5 ", "A 2a 2a ", "A 2_1 2 2 ", "A 2_1 2 2 ", "A2_122 ", ORTHO }, /*117*/ { 20, "D2^5 ", "B 2 2b ", "B 2 2_1 2 ", "B 2 2_1 2 ", "B22_12 ", ORTHO }, /*118*/ { 21, "D2^6 ", "C 2 2 ", "C 2 2 2 ", "C 2 2 2 ", "C222 ", ORTHO }, /*119*/ { 21, "D2^6 ", "A 2 2 ", "A 2 2 2 ", "A 2 2 2 ", "A222 ", ORTHO }, /*120*/ { 21, "D2^6 ", "B 2 2 ", "B 2 2 2 ", "B 2 2 2 ", "B222 ", ORTHO }, /*121*/ { 22, "D2^7 ", "F 2 2 ", "F 2 2 2 ", "F 2 2 2 ", "F222 ", ORTHO }, /*122*/ { 23, "D2^8 ", "I 2 2 ", "I 2 2 2 ", "I 2 2 2 ", "I222 ", ORTHO }, /*123*/ { 24, "D2^9 ", "I 2b 2c ", "I 2_1 2_1 2_1 ", "I 2_1 2_1 2_1 ", "I2_12_12_1", ORTHO }, /*124*/ { 25, "C2v^1 ", "P 2 -2 ", "P m m 2 ", "P m m 2 ", "Pmm2 ", ORTHO }, /*125*/ { 25, "C2v^1 ", "P -2 2 ", "P 2 m m ", "P 2 m m ", "P2mm ", ORTHO }, /*126*/ { 25, "C2v^1 ", "P -2 -2 ", "P m 2 m ", "P m 2 m ", "Pm2m ", ORTHO }, /*127*/ { 26, "C2v^2 ", "P 2c -2 ", "P m c 2_1 ", "P m c 2_1 ", "Pmc2_1 ", ORTHO }, /*128*/ { 26, "C2v^2 ", "P 2c -2c ", "P c m 2_1 ", "P c m 2_1 ", "Pcm2_1 ", ORTHO }, /*129*/ { 26, "C2v^2 ", "P -2a 2a ", "P 2_1 m a ", "P 2_1 m a ", "P2_1ma ", ORTHO }, /*130*/ { 26, "C2v^2 ", "P -2 2a ", "P 2_1 a m ", "P 2_1 a m ", "P2_1am ", ORTHO }, /*131*/ { 26, "C2v^2 ", "P -2 -2b ", "P b 2_1 m ", "P b 2_1 m ", "Pb2_1m ", ORTHO }, /*132*/ { 26, "C2v^2 ", "P -2b -2 ", "P m 2_1 b ", "P m 2_1 b ", "Pm2_1b ", ORTHO }, /*133*/ { 27, "C2v^3 ", "P 2 -2c ", "P c c 2 ", "P c c 2 ", "Pcc2 ", ORTHO }, /*134*/ { 27, "C2v^3 ", "P -2a 2 ", "P 2 a a ", "P 2 a a ", "P2aa ", ORTHO }, /*135*/ { 27, "C2v^3 ", "P -2b -2b ", "P b 2 b ", "P b 2 b ", "Pb2b ", ORTHO }, /*136*/ { 28, "C2v^4 ", "P 2 -2a ", "P m a 2 ", "P m a 2 ", "Pma2 ", ORTHO }, /*137*/ { 28, "C2v^4 ", "P 2 -2b ", "P b m 2 ", "P b m 2 ", "Pbm2 ", ORTHO }, /*138*/ { 28, "C2v^4 ", "P -2b 2 ", "P 2 m b ", "P 2 m b ", "P2mb ", ORTHO }, /*139*/ { 28, "C2v^4 ", "P -2c 2 ", "P 2 c m ", "P 2 c m ", "P2cm ", ORTHO }, /*140*/ { 28, "C2v^4 ", "P -2c -2c ", "P c 2 m ", "P c 2 m ", "Pc2m ", ORTHO }, /*141*/ { 28, "C2v^4 ", "P -2a -2a ", "P m 2 a ", "P m 2 a ", "Pm2a ", ORTHO }, /*142*/ { 29, "C2v^5 ", "P 2c -2ac ", "P c a 2_1 ", "P c a 2_1 ", "Pca2_1 ", ORTHO }, /*143*/ { 29, "C2v^5 ", "P 2c -2b ", "P b c 2_1 ", "P b c 2_1 ", "Pbc2_1 ", ORTHO }, /*144*/ { 29, "C2v^5 ", "P -2b 2a ", "P 2_1 a b ", "P 2_1 a b ", "P2_1ab ", ORTHO }, /*145*/ { 29, "C2v^5 ", "P -2ac 2a ", "P 2_1 c a ", "P 2_1 c a ", "P2_1ca ", ORTHO }, /*146*/ { 29, "C2v^5 ", "P -2bc -2c ", "P c 2_1 b ", "P c 2_1 b ", "Pc2_1b ", ORTHO }, /*147*/ { 29, "C2v^5 ", "P -2a -2ab ", "P b 2_1 a ", "P b 2_1 a ", "Pb2_1a ", ORTHO }, /*148*/ { 30, "C2v^6 ", "P 2 -2bc ", "P n c 2 ", "P n c 2 ", "Pnc2 ", ORTHO }, /*149*/ { 30, "C2v^6 ", "P 2 -2ac ", "P c n 2 ", "P c n 2 ", "Pcn2 ", ORTHO }, /*150*/ { 30, "C2v^6 ", "P -2ac 2 ", "P 2 n a ", "P 2 n a ", "P2na ", ORTHO }, /*151*/ { 30, "C2v^6 ", "P -2ab 2 ", "P 2 a n ", "P 2 a n ", "P2an ", ORTHO }, /*152*/ { 30, "C2v^6 ", "P -2ab -2ab ", "P b 2 n ", "P b 2 n ", "Pb2n ", ORTHO }, /*153*/ { 30, "C2v^6 ", "P -2bc -2bc ", "P n 2 b ", "P n 2 b ", "Pn2b ", ORTHO }, /*154*/ { 31, "C2v^7 ", "P 2ac -2 ", "P m n 2_1 ", "P m n 2_1 ", "Pmn2_1 ", ORTHO }, /*155*/ { 31, "C2v^7 ", "P 2bc -2bc ", "P n m 2_1 ", "P n m 2_1 ", "Pnm2_1 ", ORTHO }, /*156*/ { 31, "C2v^7 ", "P -2ab 2ab ", "P 2_1 m n ", "P 2_1 m n ", "P2_1mn ", ORTHO }, /*157*/ { 31, "C2v^7 ", "P -2 2ac ", "P 2_1 n m ", "P 2_1 n m ", "P2_1nm ", ORTHO }, /*158*/ { 31, "C2v^7 ", "P -2 -2bc ", "P n 2_1 m ", "P n 2_1 m ", "Pn2_1m ", ORTHO }, /*159*/ { 31, "C2v^7 ", "P -2ab -2 ", "P m 2_1 n ", "P m 2_1 n ", "Pm2_1n ", ORTHO }, /*160*/ { 32, "C2v^8 ", "P 2 -2ab ", "P b a 2 ", "P b a 2 ", "Pba2 ", ORTHO }, /*161*/ { 32, "C2v^8 ", "P -2bc 2 ", "P 2 c b ", "P 2 c b ", "P2cb ", ORTHO }, /*162*/ { 32, "C2v^8 ", "P -2ac -2ac ", "P c 2 a ", "P c 2 a ", "Pc2a ", ORTHO }, /*163*/ { 33, "C2v^9 ", "P 2c -2n ", "P n a 2_1 ", "P n a 2_1 ", "Pna2_1 ", ORTHO }, /*164*/ { 33, "C2v^9 ", "P 2c -2ab ", "P b n 2_1 ", "P b n 2_1 ", "Pbn2_1 ", ORTHO }, /*165*/ { 33, "C2v^9 ", "P -2bc 2a ", "P 2_1 n b ", "P 2_1 n b ", "P2_1nb ", ORTHO }, /*166*/ { 33, "C2v^9 ", "P -2n 2a ", "P 2_1 c n ", "P 2_1 c n ", "P2_1cn ", ORTHO }, /*167*/ { 33, "C2v^9 ", "P -2n -2ac ", "P c 2_1 n ", "P c 2_1 n ", "Pc2_1n ", ORTHO }, /*168*/ { 33, "C2v^9 ", "P -2ac -2n ", "P n 2_1 a ", "P n 2_1 a ", "Pn2_1a ", ORTHO }, /*169*/ { 34, "C2v^10", "P 2 -2n ", "P n n 2 ", "P n n 2 ", "Pnn2 ", ORTHO }, /*170*/ { 34, "C2v^10", "P -2n 2 ", "P 2 n n ", "P 2 n n ", "P2nn ", ORTHO }, /*171*/ { 34, "C2v^10", "P -2n -2n ", "P n 2 n ", "P n 2 n ", "Pn2n ", ORTHO }, /*172*/ { 35, "C2v^11", "C 2 -2 ", "C m m 2 ", "C m m 2 ", "Cmm2 ", ORTHO }, /*173*/ { 35, "C2v^11", "A -2 2 ", "A 2 m m ", "A 2 m m ", "A2mm ", ORTHO }, /*174*/ { 35, "C2v^11", "B -2 -2 ", "B m 2 m ", "B m 2 m ", "Bm2m ", ORTHO }, /*175*/ { 36, "C2v^12", "C 2c -2 ", "C m c 2_1 ", "C m c 2_1 ", "Cmc2_1 ", ORTHO }, /*176*/ { 36, "C2v^12", "C 2c -2c ", "C c m 2_1 ", "C c m 2_1 ", "Ccm2_1 ", ORTHO }, /*177*/ { 36, "C2v^12", "A -2a 2a ", "A 2_1 m a ", "A 2_1 m a ", "A2_1ma ", ORTHO }, /*178*/ { 36, "C2v^12", "A -2 2a ", "A 2_1 a m ", "A 2_1 a m ", "A2_1am ", ORTHO }, /*179*/ { 36, "C2v^12", "B -2 -2b ", "B b 2_1 m ", "B b 2_1 m ", "Bb2_1m ", ORTHO }, /*180*/ { 36, "C2v^12", "B -2b -2 ", "B m 2_1 b ", "B m 2_1 b ", "Bm2_1b ", ORTHO }, /*181*/ { 37, "C2v^13", "C 2 -2c ", "C c c 2 ", "C c c 2 ", "Ccc2 ", ORTHO }, /*182*/ { 37, "C2v^13", "A -2a 2 ", "A 2 a a ", "A 2 a a ", "A2aa ", ORTHO }, /*183*/ { 37, "C2v^13", "B -2b -2b ", "B b 2 b ", "B b 2 b ", "Bb2b ", ORTHO }, /*184*/ { 38, "C2v^14", "A 2 -2 ", "A m m 2 ", "A m m 2 ", "Amm2 ", ORTHO }, /*185*/ { 38, "C2v^14", "B 2 -2 ", "B m m 2 ", "B m m 2 ", "Bmm2 ", ORTHO }, /*186*/ { 38, "C2v^14", "B -2 2 ", "B 2 m m ", "B 2 m m ", "B2mm ", ORTHO }, /*187*/ { 38, "C2v^14", "C -2 2 ", "C 2 m m ", "C 2 m m ", "C2mm ", ORTHO }, /*188*/ { 38, "C2v^14", "C -2 -2 ", "C m 2 m ", "C m 2 m ", "Cm2m ", ORTHO }, /*189*/ { 38, "C2v^14", "A -2 -2 ", "A m 2 m ", "A m 2 m ", "Am2m ", ORTHO }, /*190*/ { 39, "C2v^15", "A 2 -2c ", "A e m 2 ", "A e m 2 ", "Aem2 ", ORTHO }, /*191*/ { 39, "C2v^15", "B 2 -2c ", "B m e 2 ", "B m e 2 ", "Bme2 ", ORTHO }, /*192*/ { 39, "C2v^15", "B -2c 2 ", "B 2 e m ", "B 2 e m ", "B2em ", ORTHO }, /*193*/ { 39, "C2v^15", "C -2b 2 ", "C 2 m e ", "C 2 m e ", "C2me ", ORTHO }, /*194*/ { 39, "C2v^15", "C -2b -2b ", "C m 2 e ", "C m 2 e ", "Cm2e ", ORTHO }, /*195*/ { 39, "C2v^15", "A -2c -2c ", "A e 2 m ", "A e 2 m ", "Ae2m ", ORTHO }, /*196*/ { 40, "C2v^16", "A 2 -2a ", "A m a 2 ", "A m a 2 ", "Ama2 ", ORTHO }, /*197*/ { 40, "C2v^16", "B 2 -2b ", "B b m 2 ", "B b m 2 ", "Bbm2 ", ORTHO }, /*198*/ { 40, "C2v^16", "B -2b 2 ", "B 2 m b ", "B 2 m b ", "B2mb ", ORTHO }, /*199*/ { 40, "C2v^16", "C -2c 2 ", "C 2 c m ", "C 2 c m ", "C2cm ", ORTHO }, /*200*/ { 40, "C2v^16", "C -2c -2c ", "C c 2 m ", "C c 2 m ", "Cc2m ", ORTHO }, /*201*/ { 40, "C2v^16", "A -2a -2a ", "A m 2 a ", "A m 2 a ", "Am2a ", ORTHO }, /*202*/ { 41, "C2v^17", "A 2 -2ac ", "A e a 2 ", "A e a 2 ", "Aea2 ", ORTHO }, /*203*/ { 41, "C2v^17", "B 2 -2bc ", "B b e 2 ", "B b e 2 ", "Bbe2 ", ORTHO }, /*204*/ { 41, "C2v^17", "B -2bc 2 ", "B 2 e b ", "B 2 e b ", "B2eb ", ORTHO }, /*205*/ { 41, "C2v^17", "C -2bc 2 ", "C 2 c e ", "C 2 c e ", "C2ce ", ORTHO }, /*206*/ { 41, "C2v^17", "C -2bc -2bc ", "C c 2 e ", "C c 2 e ", "Cc2e ", ORTHO }, /*207*/ { 41, "C2v^17", "A -2ac -2ac ", "A e 2 a ", "A e 2 a ", "Ae2a ", ORTHO }, /*208*/ { 42, "C2v^18", "F 2 -2 ", "F m m 2 ", "F m m 2 ", "Fmm2 ", ORTHO }, /*209*/ { 42, "C2v^18", "F -2 2 ", "F 2 m m ", "F 2 m m ", "F2mm ", ORTHO }, /*210*/ { 42, "C2v^18", "F -2 -2 ", "F m 2 m ", "F m 2 m ", "Fm2m ", ORTHO }, /*211*/ { 43, "C2v^19", "F 2 -2d ", "F d d 2 ", "F d d 2 ", "Fdd2 ", ORTHO }, /*212*/ { 43, "C2v^19", "F -2d 2 ", "F 2 d d ", "F 2 d d ", "F2dd ", ORTHO }, /*213*/ { 43, "C2v^19", "F -2d -2d ", "F d 2 d ", "F d 2 d ", "Fd2d ", ORTHO }, /*214*/ { 44, "C2v^20", "I 2 -2 ", "I m m 2 ", "I m m 2 ", "Imm2 ", ORTHO }, /*215*/ { 44, "C2v^20", "I -2 2 ", "I 2 m m ", "I 2 m m ", "I2mm ", ORTHO }, /*216*/ { 44, "C2v^20", "I -2 -2 ", "I m 2 m ", "I m 2 m ", "Im2m ", ORTHO }, /*217*/ { 45, "C2v^21", "I 2 -2c ", "I b a 2 ", "I b a 2 ", "Iba2 ", ORTHO }, /*218*/ { 45, "C2v^21", "I -2a 2 ", "I 2 c b ", "I 2 c b ", "I2cb ", ORTHO }, /*219*/ { 45, "C2v^21", "I -2b -2b ", "I c 2 a ", "I c 2 a ", "Ic2a ", ORTHO }, /*220*/ { 46, "C2v^22", "I 2 -2a ", "I m a 2 ", "I m a 2 ", "Ima2 ", ORTHO }, /*221*/ { 46, "C2v^22", "I 2 -2b ", "I b m 2 ", "I b m 2 ", "Ibm2 ", ORTHO }, /*222*/ { 46, "C2v^22", "I -2b 2 ", "I 2 m b ", "I 2 m b ", "I2mb ", ORTHO }, /*223*/ { 46, "C2v^22", "I -2c 2 ", "I 2 c m ", "I 2 c m ", "I2cm ", ORTHO }, /*224*/ { 46, "C2v^22", "I -2c -2c ", "I c 2 m ", "I c 2 m ", "Ic2m ", ORTHO }, /*225*/ { 46, "C2v^22", "I -2a -2a ", "I m 2 a ", "I m 2 a ", "Im2a ", ORTHO }, /*226*/ { 47, "D2h^1 ", "-P 2 2 ", "P m m m ", "P 2/m 2/m 2/m ", "Pmmm ", ORTHO }, /*227*/ { 48, "D2h^2 ", "P 2 2 -1n ", "P n n n ", "P 2/n 2/n 2/n ", "Pnnn ", ORTHO }, /*228*/ { 48, "D2h^2 ", "-P 2ab 2bc ", "P n n n ", "P 2/n 2/n 2/n ", "Pnnn ", ORTHO }, /*229*/ { 49, "D2h^3 ", "-P 2 2c ", "P c c m ", "P 2/c 2/c 2/m ", "Pccm ", ORTHO }, /*230*/ { 49, "D2h^3 ", "-P 2a 2 ", "P m a a ", "P 2/m 2/a 2/a ", "Pmaa ", ORTHO }, /*231*/ { 49, "D2h^3 ", "-P 2b 2b ", "P b m b ", "P 2/b 2/m 2/b ", "Pbmb ", ORTHO }, /*232*/ { 50, "D2h^4 ", "P 2 2 -1ab ", "P b a n ", "P 2/b 2/a 2/n ", "Pban ", ORTHO }, /*233*/ { 50, "D2h^4 ", "-P 2ab 2b ", "P b a n ", "P 2/b 2/a 2/n ", "Pban ", ORTHO }, /*234*/ { 50, "D2h^4 ", "P 2 2 -1bc ", "P n c b ", "P 2/n 2/c 2/b ", "Pncb ", ORTHO }, /*235*/ { 50, "D2h^4 ", "-P 2b 2bc ", "P n c b ", "P 2/n 2/c 2/b ", "Pncb ", ORTHO }, /*236*/ { 50, "D2h^4 ", "P 2 2 -1ac ", "P c n a ", "P 2/c 2/n 2/a ", "Pcna ", ORTHO }, /*237*/ { 50, "D2h^4 ", "-P 2a 2c ", "P c n a ", "P 2/c 2/n 2/a ", "Pcna ", ORTHO }, /*238*/ { 51, "D2h^5 ", "-P 2a 2a ", "P m m a ", "P 2_1/m 2/m 2/a ", "Pmma ", ORTHO }, /*239*/ { 51, "D2h^5 ", "-P 2b 2 ", "P m m b ", "P 2/m 2_1/m 2/b ", "Pmmb ", ORTHO }, /*240*/ { 51, "D2h^5 ", "-P 2 2b ", "P b m m ", "P 2/b 2_1/m 2/m ", "Pbmm ", ORTHO }, /*241*/ { 51, "D2h^5 ", "-P 2c 2c ", "P c m m ", "P 2/c 2/m 2_1/m ", "Pcmm ", ORTHO }, /*242*/ { 51, "D2h^5 ", "-P 2c 2 ", "P m c m ", "P 2/m 2/c 2_1/m ", "Pmcm ", ORTHO }, /*243*/ { 51, "D2h^5 ", "-P 2 2a ", "P m a m ", "P 2_1/m 2/a 2/m ", "Pmam ", ORTHO }, /*244*/ { 52, "D2h^6 ", "-P 2a 2bc ", "P n n a ", "P 2/n 2_1/n 2/a ", "Pnna ", ORTHO }, /*245*/ { 52, "D2h^6 ", "-P 2b 2n ", "P n n b ", "P 2_1/n 2/n 2/b ", "Pnnb ", ORTHO }, /*246*/ { 52, "D2h^6 ", "-P 2n 2b ", "P b n n ", "P 2/b 2/n 2_1/n ", "Pbnn ", ORTHO }, /*247*/ { 52, "D2h^6 ", "-P 2ab 2c ", "P c n n ", "P 2/c 2_1/n 2/n ", "Pcnn ", ORTHO }, /*248*/ { 52, "D2h^6 ", "-P 2ab 2n ", "P n c n ", "P 2_1/n 2/c 2/n ", "Pncn ", ORTHO }, /*249*/ { 52, "D2h^6 ", "-P 2n 2bc ", "P n a n ", "P 2/n 2/a 2_1/n ", "Pnan ", ORTHO }, /*250*/ { 53, "D2h^7 ", "-P 2ac 2 ", "P m n a ", "P 2/m 2/n 2_1/a ", "Pmna ", ORTHO }, /*251*/ { 53, "D2h^7 ", "-P 2bc 2bc ", "P n m b ", "P 2/n 2/m 2_1/b ", "Pnmb ", ORTHO }, /*252*/ { 53, "D2h^7 ", "-P 2ab 2ab ", "P b m n ", "P 2_1/b 2/m 2/n ", "Pbmn ", ORTHO }, /*253*/ { 53, "D2h^7 ", "-P 2 2ac ", "P c n m ", "P 2_1/c 2/n 2/m ", "Pcnm ", ORTHO }, /*254*/ { 53, "D2h^7 ", "-P 2 2bc ", "P n c m ", "P 2/n 2_1/c 2/m ", "Pncm ", ORTHO }, /*255*/ { 53, "D2h^7 ", "-P 2ab 2 ", "P m a n ", "P 2/m 2_1/a 2/n ", "Pman ", ORTHO }, /*256*/ { 54, "D2h^8 ", "-P 2a 2ac ", "P c c a ", "P 2_1/c 2/c 2/a ", "Pcca ", ORTHO }, /*257*/ { 54, "D2h^8 ", "-P 2b 2c ", "P c c b ", "P 2/c 2_1/c 2/b ", "Pccb ", ORTHO }, /*258*/ { 54, "D2h^8 ", "-P 2a 2b ", "P b a a ", "P 2/b 2_1/a 2/a ", "Pbaa ", ORTHO }, /*259*/ { 54, "D2h^8 ", "-P 2ac 2c ", "P c a a ", "P 2/c 2/a 2_1/a ", "Pcaa ", ORTHO }, /*260*/ { 54, "D2h^8 ", "-P 2bc 2b ", "P b c b ", "P 2/b 2/c 2_1/b ", "Pbcb ", ORTHO }, /*261*/ { 54, "D2h^8 ", "-P 2b 2ab ", "P b a b ", "P 2_1/b 2/a 2/b ", "Pbab ", ORTHO }, /*262*/ { 55, "D2h^9 ", "-P 2 2ab ", "P b a m ", "P 2_1/b 2_1/a 2/m ", "Pbam ", ORTHO }, /*263*/ { 55, "D2h^9 ", "-P 2bc 2 ", "P m c b ", "P 2/m 2_1/c 2_1/b ", "Pmcb ", ORTHO }, /*264*/ { 55, "D2h^9 ", "-P 2ac 2ac ", "P c m a ", "P 2_1/c 2/m 2_1/a ", "Pcma ", ORTHO }, /*265*/ { 56, "D2h^10", "-P 2ab 2ac ", "P c c n ", "P 2_1/c 2_1/c 2/n ", "Pccn ", ORTHO }, /*266*/ { 56, "D2h^10", "-P 2ac 2bc ", "P n a a ", "P 2/n 2_1/a 2_1/a ", "Pnaa ", ORTHO }, /*267*/ { 56, "D2h^10", "-P 2bc 2ab ", "P b n b ", "P 2_1/b 2/n 2_1/b ", "Pbnb ", ORTHO }, /*268*/ { 57, "D2h^11", "-P 2c 2b ", "P b c m ", "P 2/b 2_1/c 2_1/m ", "Pbcm ", ORTHO }, /*269*/ { 57, "D2h^11", "-P 2c 2ac ", "P c a m ", "P 2_1/c 2/a 2_1/m ", "Pcam ", ORTHO }, /*270*/ { 57, "D2h^11", "-P 2ac 2a ", "P m c a ", "P 2_1/m 2/c 2_1/a ", "Pmca ", ORTHO }, /*271*/ { 57, "D2h^11", "-P 2b 2a ", "P m a b ", "P 2_1/m 2_1/a 2/b ", "Pmab ", ORTHO }, /*272*/ { 57, "D2h^11", "-P 2a 2ab ", "P b m a ", "P 2_1/b 2_1/m 2/a ", "Pbma ", ORTHO }, /*273*/ { 57, "D2h^11", "-P 2bc 2c ", "P c m b ", "P 2/c 2_1/m 2_1/b ", "Pcmb ", ORTHO }, /*274*/ { 58, "D2h^12", "-P 2 2n ", "P n n m ", "P 2_1/n 2_1/n 2/m ", "Pnnm ", ORTHO }, /*275*/ { 58, "D2h^12", "-P 2n 2 ", "P m n n ", "P 2/m 2_1/n 2_1/n ", "Pmnn ", ORTHO }, /*276*/ { 58, "D2h^12", "-P 2n 2n ", "P n m n ", "P 2_1/n 2/m 2_1/n ", "Pnmn ", ORTHO }, /*277*/ { 59, "D2h^13", "P 2 2ab -1ab ", "P m m n ", "P 2_1/m 2_1/m 2/n ", "Pmmn ", ORTHO }, /*278*/ { 59, "D2h^13", "-P 2ab 2a ", "P m m n ", "P 2_1/m 2_1/m 2/n ", "Pmmn ", ORTHO }, /*279*/ { 59, "D2h^13", "P 2bc 2 -1bc ", "P n m m ", "P 2/n 2_1/m 2_1/m ", "Pnmm ", ORTHO }, /*280*/ { 59, "D2h^13", "-P 2c 2bc ", "P n m m ", "P 2/n 2_1/m 2_1/m ", "Pnmm ", ORTHO }, /*281*/ { 59, "D2h^13", "P 2ac 2ac -1ac ", "P m n m ", "P 2_1/m 2/n 2_1/m ", "Pmnm ", ORTHO }, /*282*/ { 59, "D2h^13", "-P 2c 2a ", "P m n m ", "P 2_1/m 2/n 2_1/m ", "Pmnm ", ORTHO }, /*283*/ { 60, "D2h^14", "-P 2n 2ab ", "P b c n ", "P 2_1/b 2/c 2_1/n ", "Pbcn ", ORTHO }, /*284*/ { 60, "D2h^14", "-P 2n 2c ", "P c a n ", "P 2/c 2_1/a 2_1/n ", "Pcan ", ORTHO }, /*285*/ { 60, "D2h^14", "-P 2a 2n ", "P n c a ", "P 2_1/n 2_1/c 2/a ", "Pnca ", ORTHO }, /*286*/ { 60, "D2h^14", "-P 2bc 2n ", "P n a b ", "P 2_1/n 2/a 2_1/b ", "Pnab ", ORTHO }, /*287*/ { 60, "D2h^14", "-P 2ac 2b ", "P b n a ", "P 2/b 2_1/n 2_1/a ", "Pbna ", ORTHO }, /*288*/ { 60, "D2h^14", "-P 2b 2ac ", "P c n b ", "P 2_1/c 2_1/n 2/b ", "Pcnb ", ORTHO }, /*289*/ { 61, "D2h^15", "-P 2ac 2ab ", "P b c a ", "P 2_1/b 2_1/c 2_1/a", "Pbca ", ORTHO }, /*290*/ { 61, "D2h^15", "-P 2bc 2ac ", "P c a b ", "P 2_1/c 2_1/a 2_1/b", "Pcab ", ORTHO }, /*291*/ { 62, "D2h^16", "-P 2ac 2n ", "P n m a ", "P 2_1/n 2_1/m 2_1/a", "Pnma ", ORTHO }, /*292*/ { 62, "D2h^16", "-P 2bc 2a ", "P m n b ", "P 2_1/m 2_1/n 2_1/b", "Pmnb ", ORTHO }, /*293*/ { 62, "D2h^16", "-P 2c 2ab ", "P b n m ", "P 2_1/b 2_1/n 2_1/m", "Pbnm ", ORTHO }, /*294*/ { 62, "D2h^16", "-P 2n 2ac ", "P c m n ", "P 2_1/c 2_1/m 2_1/n", "Pcmn ", ORTHO }, /*295*/ { 62, "D2h^16", "-P 2n 2a ", "P m c n ", "P 2_1/m 2_1/c 2_1/n", "Pmcn ", ORTHO }, /*296*/ { 62, "D2h^16", "-P 2c 2n ", "P n a m ", "P 2_1/n 2_1/a 2_1/m", "Pnam ", ORTHO }, /*297*/ { 63, "D2h^17", "-C 2c 2 ", "C m c m ", "C 2/m 2/c 2_1/m ", "Cmcm ", ORTHO }, /*298*/ { 63, "D2h^17", "-C 2c 2c ", "C c m m ", "C 2/c 2/m 2_1/m ", "Ccmm ", ORTHO }, /*299*/ { 63, "D2h^17", "-A 2a 2a ", "A m m a ", "A 2_1/m 2/m 2/a ", "Amma ", ORTHO }, /*300*/ { 63, "D2h^17", "-A 2 2a ", "A m a m ", "A 2_1/m 2/a 2/m ", "Amam ", ORTHO }, /*301*/ { 63, "D2h^17", "-B 2 2b ", "B b m m ", "B 2/b 2_1/m 2/m ", "Bbmm ", ORTHO }, /*302*/ { 63, "D2h^17", "-B 2b 2 ", "B m m b ", "B 2/m 2_1/m 2/b ", "Bmmb ", ORTHO }, /*303*/ { 64, "D2h^18", "-C 2bc 2 ", "C m c e ", "C 2/m 2/c 2_1/e ", "Cmce ", ORTHO }, /*304*/ { 64, "D2h^18", "-C 2bc 2bc ", "C c m e ", "C 2/c 2/m 2_1/e ", "Ccme ", ORTHO }, /*305*/ { 64, "D2h^18", "-A 2ac 2ac ", "A e m a ", "A 2_1/e 2/m 2/a ", "Aema ", ORTHO }, /*306*/ { 64, "D2h^18", "-A 2 2ac ", "A e a m ", "A 2_1/e 2/a 2/m ", "Aeam ", ORTHO }, /*307*/ { 64, "D2h^18", "-B 2 2bc ", "B b e m ", "B 2/b 2_1/e 2/m ", "Bbem ", ORTHO }, /*308*/ { 64, "D2h^18", "-B 2bc 2 ", "B m e b ", "B 2/m 2_1/e 2/b ", "Bmeb ", ORTHO }, /*309*/ { 65, "D2h^19", "-C 2 2 ", "C m m m ", "C 2/m 2/m 2/m ", "Cmmm ", ORTHO }, /*310*/ { 65, "D2h^19", "-A 2 2 ", "A m m m ", "A 2/m 2/m 2/m ", "Ammm ", ORTHO }, /*311*/ { 65, "D2h^19", "-B 2 2 ", "B m m m ", "B 2/m 2/m 2/m ", "Bmmm ", ORTHO }, /*312*/ { 66, "D2h^20", "-C 2 2c ", "C c c m ", "C 2/c 2/c 2/m ", "Cccm ", ORTHO }, /*313*/ { 66, "D2h^20", "-A 2a 2 ", "A m a a ", "A 2/m 2/a 2/a ", "Amaa ", ORTHO }, /*314*/ { 66, "D2h^20", "-B 2b 2b ", "B b m b ", "B 2/b 2/m 2/b ", "Bbmb ", ORTHO }, /*315*/ { 67, "D2h^21", "-C 2b 2 ", "C m m e ", "C 2/m 2/m 2/e ", "Cmme ", ORTHO }, /*316*/ { 67, "D2h^21", "-C 2b 2b ", "C m m e ", "C 2/m 2/m 2/e ", "Cmme ", ORTHO }, /*317*/ { 67, "D2h^21", "-A 2c 2c ", "A e m m ", "A 2/e 2/m 2/m ", "Aemm ", ORTHO }, /*318*/ { 67, "D2h^21", "-A 2 2c ", "A e m m ", "A 2/e 2/m 2/m ", "Aemm ", ORTHO }, /*319*/ { 67, "D2h^21", "-B 2 2c ", "B m e m ", "B 2/m 2/e 2/m ", "Bmem ", ORTHO }, /*320*/ { 67, "D2h^21", "-B 2c 2 ", "B m e m ", "B 2/m 2/e 2/m ", "Bmem ", ORTHO }, /*321*/ { 68, "D2h^22", "C 2 2 -1bc ", "C c c e ", "C 2/c 2/c 2/e ", "Ccce ", ORTHO }, /*322*/ { 68, "D2h^22", "-C 2b 2bc ", "C c c e ", "C 2/c 2/c 2/e ", "Ccce ", ORTHO }, /*323*/ { 68, "D2h^22", "C 2 2 -1bc ", "C c c e ", "C 2/c 2/c 2/e ", "Ccce ", ORTHO }, /*324*/ { 68, "D2h^22", "-C 2b 2c ", "C c c e ", "C 2/c 2/c 2/e ", "Ccce ", ORTHO }, /*325*/ { 68, "D2h^22", "A 2 2 -1ac ", "A e a a ", "A 2/e 2/a 2/a ", "Aeaa ", ORTHO }, /*326*/ { 68, "D2h^22", "-A 2a 2c ", "A e a a ", "A 2/e 2/a 2/a ", "Aeaa ", ORTHO }, /*327*/ { 68, "D2h^22", "A 2 2 -1ac ", "A e a a ", "A 2/e 2/a 2/a ", "Aeaa ", ORTHO }, /*328*/ { 68, "D2h^22", "-A 2ac 2c ", "A e a a ", "A 2/e 2/a 2/a ", "Aeaa ", ORTHO }, /*329*/ { 68, "D2h^22", "B 2 2 -1bc ", "B b e b ", "B 2/b 2/e 2/b ", "Bbeb ", ORTHO }, /*330*/ { 68, "D2h^22", "-B 2bc 2b ", "B b c b ", "B 2/b 2/e 2/b ", "Bbcb ", ORTHO }, /*331*/ { 68, "D2h^22", "B 2 2 -1bc ", "B b e b ", "B 2/b 2/e 2/b ", "Bbeb ", ORTHO }, /*332*/ { 68, "D2h^22", "-B 2b 2bc ", "B b e b ", "B 2/b 2/e 2/b ", "Bbeb ", ORTHO }, /*333*/ { 69, "D2h^23", "-F 2 2 ", "F m m m ", "F 2/m 2/m 2/m ", "Fmmm ", ORTHO }, /*334*/ { 70, "D2h^24", "F 2 2 -1d ", "F d d d ", "F 2/d 2/d 2/d ", "Fddd ", ORTHO }, /*335*/ { 70, "D2h^24", "-F 2uv 2vw ", "F d d d ", "F 2/d 2/d 2/d ", "Fddd ", ORTHO }, /*336*/ { 71, "D2h^25", "-I 2 2 ", "I m m m ", "I 2/m 2/m 2/m ", "Immm ", ORTHO }, /*337*/ { 72, "D2h^26", "-I 2 2c ", "I b a m ", "I 2/b 2/a 2/m ", "Ibam ", ORTHO }, /*338*/ { 72, "D2h^26", "-I 2a 2 ", "I m c b ", "I 2/m 2/c 2/b ", "Imcb ", ORTHO }, /*339*/ { 72, "D2h^26", "-I 2b 2b ", "I c m a ", "I 2/c 2/m 2/a ", "Icma ", ORTHO }, /*340*/ { 73, "D2h^27", "-I 2b 2c ", "I b c a ", "I 2/b 2/c 2/a ", "Ibca ", ORTHO }, /*341*/ { 73, "D2h^27", "-I 2a 2b ", "I c a b ", "I 2/c 2/a 2/b ", "Icab ", ORTHO }, /*342*/ { 74, "D2h^28", "-I 2b 2 ", "I m m a ", "I 2/m 2/m 2/a ", "Imma ", ORTHO }, /*343*/ { 74, "D2h^28", "-I 2a 2a ", "I m m b ", "I 2/m 2/m 2/b ", "Immb ", ORTHO }, /*344*/ { 74, "D2h^28", "-I 2c 2c ", "I b m m ", "I 2/b 2/m 2/m ", "Ibmm ", ORTHO }, /*345*/ { 74, "D2h^28", "-I 2 2b ", "I c m m ", "I 2/c 2/m 2/m ", "Icmm ", ORTHO }, /*346*/ { 74, "D2h^28", "-I 2 2a ", "I m c m ", "I 2/m 2/c 2/m ", "Imcm ", ORTHO }, /*347*/ { 74, "D2h^28", "-I 2c 2 ", "I m a m ", "I 2/m 2/a 2/m ", "Imam ", ORTHO }, /*348*/ { 75, "C4^1 ", "P 4 ", "P 4 ", "P 4 ", "P4 ", TETRA }, /*349*/ { 76, "C4^2 ", "P 4w ", "P 4_1 ", "P 4_1 ", "P4_1 ", TETRA }, /*350*/ { 77, "C4^3 ", "P 4c ", "P 4_2 ", "P 4_2 ", "P4_2 ", TETRA }, /*351*/ { 78, "C4^4 ", "P 4cw ", "P 4_3 ", "P 4_3 ", "P4_3 ", TETRA }, /*352*/ { 79, "C4^5 ", "I 4 ", "I 4 ", "I 4 ", "I4 ", TETRA }, /*353*/ { 80, "C4^6 ", "I 4bw ", "I 4_1 ", "I 4_1 ", "I4_1 ", TETRA }, /*354*/ { 81, "S4^1 ", "P -4 ", "P -4 ", "P -4 ", "P-4 ", TETRA }, /*355*/ { 82, "S4^2 ", "I -4 ", "I -4 ", "I -4 ", "I-4 ", TETRA }, /*356*/ { 83, "C4h^1 ", "-P 4 ", "P 4/m ", "P 4/m ", "P4/m ", TETRA }, /*357*/ { 84, "C4h^2 ", "-P 4c ", "P 4_2/m ", "P 4_2/m ", "P4_2/m ", TETRA }, /*358*/ { 85, "C4h^3 ", "P 4ab -1ab ", "P 4/n ", "P 4/n ", "P4/n ", TETRA }, /*359*/ { 85, "C4h^3 ", "-P 4a ", "P 4/n ", "P 4/n ", "P4/n ", TETRA }, /*360*/ { 86, "C4h^4 ", "P 4n -1n ", "P 4_2/n ", "P 4_2/n ", "P4_2/n ", TETRA }, /*361*/ { 86, "C4h^4 ", "-P 4bc ", "P 4_2/n ", "P 4_2/n ", "P4_2/n ", TETRA }, /*362*/ { 87, "C4h^5 ", "-I 4 ", "I 4/m ", "I 4/m ", "I4/m ", TETRA }, /*363*/ { 88, "C4h^6 ", "I 4bw -1bw ", "I 4_1/a ", "I 4_1/a ", "I4_1/a ", TETRA }, /*364*/ { 88, "C4h^6 ", "-I 4ad ", "I 4_1/a ", "I 4_1/a ", "I4_1/a ", TETRA }, /*365*/ { 89, "D4^1 ", "P 4 2 ", "P 4 2 2 ", "P 4 2 2 ", "P422 ", TETRA }, /*366*/ { 90, "D4^2 ", "P 4ab 2ab ", "P 4 2_1 2 ", "P 4 2_1 2 ", "P42_12 ", TETRA }, /*367*/ { 91, "D4^3 ", "P 4w 2c ", "P 4_1 2 2 ", "P 4_1 2 2 ", "P4_122 ", TETRA }, /*368*/ { 92, "D4^4 ", "P 4abw 2nw ", "P 4_1 2_1 2 ", "P 4_1 2_1 2 ", "P4_12_12 ", TETRA }, /*369*/ { 93, "D4^5 ", "P 4c 2 ", "P 4_2 2 2 ", "P 4_2 2 2 ", "P4_222 ", TETRA }, /*370*/ { 94, "D4^6 ", "P 4n 2n ", "P 4_2 2_1 2 ", "P 4_2 2_1 2 ", "P4_22_12 ", TETRA }, /*371*/ { 95, "D4^7 ", "P 4cw 2c ", "P 4_3 2 2 ", "P 4_3 2 2 ", "P4_322 ", TETRA }, /*372*/ { 96, "D4^8 ", "P 4nw 2abw ", "P 4_3 2_1 2 ", "P 4_3 2_1 2 ", "P4_32_12 ", TETRA }, /*373*/ { 97, "D4^9 ", "I 4 2 ", "I 4 2 2 ", "I 4 2 2 ", "I422 ", TETRA }, /*374*/ { 98, "D4^10 ", "I 4bw 2bw ", "I 4_1 2 2 ", "I 4_1 2 2 ", "I4_122 ", TETRA }, /*375*/ { 99, "C4v^1 ", "P 4 -2 ", "P 4 m m ", "P 4 m m ", "P4mm ", TETRA }, /*376*/ {100, "C4v^2 ", "P 4 -2ab ", "P 4 b m ", "P 4 b m ", "P4bm ", TETRA }, /*377*/ {101, "C4v^3 ", "P 4c -2c ", "P 4_2 c m ", "P 4_2 c m ", "P4_2cm ", TETRA }, /*378*/ {102, "C4v^4 ", "P 4n -2n ", "P 4_2 n m ", "P 4_2 n m ", "P4_2nm ", TETRA }, /*379*/ {103, "C4v^5 ", "P 4 -2c ", "P 4 c c ", "P 4 c c ", "P4cc ", TETRA }, /*380*/ {104, "C4v^6 ", "P 4 -2n ", "P 4 n c ", "P 4 n c ", "P4nc ", TETRA }, /*381*/ {105, "C4v^7 ", "P 4c -2 ", "P 4_2 m c ", "P 4_2 m c ", "P4_2mc ", TETRA }, /*382*/ {106, "C4v^8 ", "P 4c -2ab ", "P 4_2 b c ", "P 4_2 b c ", "P4_2bc ", TETRA }, /*383*/ {107, "C4v^9 ", "I 4 -2 ", "I 4 m m ", "I 4 m m ", "I4mm ", TETRA }, /*384*/ {108, "C4v^10", "I 4 -2c ", "I 4 c m ", "I 4 c m ", "I4cm ", TETRA }, /*385*/ {109, "C4v^11", "I 4bw -2 ", "I 4_1 m d ", "I 4_1 m d ", "I4_1md ", TETRA }, /*386*/ {110, "C4v^12", "I 4bw -2c ", "I 4_1 c d ", "I 4_1 c d ", "I4_1cd ", TETRA }, /*387*/ {111, "D2d^1 ", "P -4 2 ", "P -4 2 m ", "P -4 2 m ", "P-42m ", TETRA }, /*388*/ {112, "D2d^2 ", "P -4 2c ", "P -4 2 c ", "P -4 2 c ", "P-42c ", TETRA }, /*389*/ {113, "D2d^3 ", "P -4 2ab ", "P -4 2_1 m ", "P -4 2_1 m ", "P-42_1m ", TETRA }, /*390*/ {114, "D2d^4 ", "P -4 2n ", "P -4 2_1 c ", "P -4 2_1 c ", "P-42_1c ", TETRA }, /*391*/ {115, "D2d^5 ", "P -4 -2 ", "P -4 m 2 ", "P -4 m 2 ", "P-4m2 ", TETRA }, /*392*/ {116, "D2d^6 ", "P -4 -2c ", "P -4 c 2 ", "P -4 c 2 ", "P-4c2 ", TETRA }, /*393*/ {117, "D2d^7 ", "P -4 -2ab ", "P -4 b 2 ", "P -4 b 2 ", "P-4b2 ", TETRA }, /*394*/ {118, "D2d^8 ", "P -4 -2n ", "P -4 n 2 ", "P -4 n 2 ", "P-4n2 ", TETRA }, /*395*/ {119, "D2d^9 ", "I -4 -2 ", "I -4 m 2 ", "I -4 m 2 ", "I-4m2 ", TETRA }, /*396*/ {120, "D2d^10", "I -4 -2c ", "I -4 c 2 ", "I -4 c 2 ", "I-4c2 ", TETRA }, /*397*/ {121, "D2d^11", "I -4 2 ", "I -4 2 m ", "I -4 2 m ", "I-42m ", TETRA }, /*398*/ {122, "D2d^12", "I -4 2bw ", "I -4 2 d ", "I -4 2 d ", "I-42d ", TETRA }, /*399*/ {123, "D4h^1 ", "-P 4 2 ", "P 4/m m m ", "P 4/m 2/m 2/m ", "P4/mmm ", TETRA }, /*400*/ {124, "D4h^2 ", "-P 4 2c ", "P 4/m c c ", "P 4/m 2/c 2/c ", "P4/mcc ", TETRA }, /*401*/ {125, "D4h^3 ", "P 4 2 -1ab ", "P 4/n b m ", "P 4/n 2/b 2/m ", "P4/nbm ", TETRA }, /*402*/ {125, "D4h^3 ", "-P 4a 2b ", "P 4/n b m ", "P 4/n 2/b 2/m ", "P4/nbm ", TETRA }, /*403*/ {126, "D4h^4 ", "P 4 2 -1n ", "P 4/n n c ", "P 4/n 2/n 2/c ", "P4/nnc ", TETRA }, /*404*/ {126, "D4h^4 ", "-P 4a 2bc ", "P 4/n n c ", "P 4/n 2/n 2/c ", "P4/nnc ", TETRA }, /*405*/ {127, "D4h^5 ", "-P 4 2ab ", "P 4/m b m ", "P 4/m 2_1/b m ", "P4/mbm ", TETRA }, /*406*/ {128, "D4h^6 ", "-P 4 2n ", "P 4/m n c ", "P 4/m 2_1/n c ", "P4/mnc ", TETRA }, /*407*/ {129, "D4h^7 ", "P 4ab 2ab -1ab ", "P 4/n m m ", "P 4/n 2_1/m m ", "P4/nmm ", TETRA }, /*408*/ {129, "D4h^7 ", "-P 4a 2a ", "P 4/n m m ", "P 4/n 2_1/m m ", "P4/nmm ", TETRA }, /*409*/ {130, "D4h^8 ", "P 4ab 2n -1ab ", "P 4/n c c ", "P 4/n 2_1/c c ", "P4/ncc ", TETRA }, /*410*/ {130, "D4h^8 ", "-P 4a 2ac ", "P 4/n c c ", "P 4/n 2_1/c c ", "P4/ncc ", TETRA }, /*411*/ {131, "D4h^9 ", "-P 4c 2 ", "P 4_2/m m c ", "P 4_2/m 2/m 2/c ", "P4_2/mmc ", TETRA }, /*412*/ {132, "D4h^10", "-P 4c 2c ", "P 4_2/m c m ", "P 4_2/m 2/c 2/m ", "P4_2/mcm ", TETRA }, /*413*/ {133, "D4h^11", "P 4n 2c -1n ", "P 4_2/n b c ", "P 4_2/n 2/b 2/c ", "P4_2/nbc ", TETRA }, /*414*/ {133, "D4h^11", "-P 4ac 2b ", "P 4_2/n b c ", "P 4_2/n 2/b 2/c ", "P4_2/nbc ", TETRA }, /*415*/ {134, "D4h^12", "P 4n 2 -1n ", "P 4_2/n n m ", "P 4_2/n 2/n 2/m ", "P4_2/nnm ", TETRA }, /*416*/ {134, "D4h^12", "-P 4ac 2bc ", "P 4_2/n n m ", "P 4_2/n 2/n 2/m ", "P4_2/nnm ", TETRA }, /*417*/ {135, "D4h^13", "-P 4c 2ab ", "P 4_2/m b c ", "P 4_2/m 2_1/b 2/c ", "P4_2/mbc ", TETRA }, /*418*/ {136, "D4h^14", "-P 4n 2n ", "P 4_2/m n m ", "P 4_2/m 2_1/n 2/m ", "P4_2/mnm ", TETRA }, /*419*/ {137, "D4h^15", "P 4n 2n -1n ", "P 4_2/n m c ", "P 4_2/n 2_1/m 2/c ", "P4_2/nmc ", TETRA }, /*420*/ {137, "D4h^15", "-P 4ac 2a ", "P 4_2/n m c ", "P 4_2/n 2_1/m 2/c ", "P4_2/nmc ", TETRA }, /*421*/ {138, "D4h^16", "P 4n 2ab -1n ", "P 4_2/n c m ", "P 4_2/n 2_1/c 2/m ", "P4_2/ncm ", TETRA }, /*422*/ {138, "D4h^16", "-P 4ac 2ac ", "P 4_2/n c m ", "P 4_2/n 2_1/c 2/m ", "P4_2/ncm ", TETRA }, /*423*/ {139, "D4h^17", "-I 4 2 ", "I 4/m m m ", "I 4/m 2/m 2/m ", "I4/mmm ", TETRA }, /*424*/ {140, "D4h^18", "-I 4 2c ", "I 4/m c m ", "I 4/m 2/c 2/m ", "I4/mcm ", TETRA }, /*425*/ {141, "D4h^19", "I 4bw 2bw -1bw ", "I 4_1/a m d ", "I 4_1/a 2/m 2/d ", "I4_1/amd ", TETRA }, /*426*/ {141, "D4h^19", "-I 4bd 2 ", "I 4_1/a m d ", "I 4_1/a 2/m 2/d ", "I4_1/amd ", TETRA }, /*427*/ {142, "D4h^20", "I 4bw 2aw -1bw ", "I 4_1/a c d ", "I 4_1/a 2/c 2/d ", "I4_1/acd ", TETRA }, /*428*/ {142, "D4h^20", "-I 4bd 2c ", "I 4_1/a c d ", "I 4_1/a 2/c 2/d ", "I4_1/acd ", TETRA }, /*429*/ {143, "C3^1 ", "P 3 ", "P 3 ", "P 3 ", "P3 ", TRIGO }, /*430*/ {144, "C3^2 ", "P 31 ", "P 3_1 ", "P 3_1 ", "P3_1 ", TRIGO }, /*431*/ {145, "C3^3 ", "P 32 ", "P 3_2 ", "P 3_2 ", "P3_2 ", TRIGO }, /*432*/ {146, "C3^4 ", "R 3 ", "R 3 ", "R 3 ", "R3 ", RHOMB }, /*433*/ {146, "C3^4 ", "P 3* ", "R 3 ", "R 3 ", "R3 ", RHOMB }, /*434*/ {147, "C3i^1 ", "-P 3 ", "P -3 ", "P -3 ", "P-3 ", TRIGO }, /*435*/ {148, "C3i^2 ", "-R 3 ", "R -3 ", "R -3 ", "R-3 ", RHOMB }, /*436*/ {148, "C3i^2 ", "-P 3* ", "R -3 ", "R -3 ", "R-3 ", RHOMB }, /*437*/ {149, "D3^1 ", "P 3 2 ", "P 3 1 2 ", "P 3 1 2 ", "P312 ", TRIGO }, /*438*/ {150, "D3^2 ", "P 3 2= ", "P 3 2 1 ", "P 3 2 1 ", "P321 ", TRIGO }, /*439*/ {151, "D3^3 ", "P 31 2c (0 0 1) ", "P 3_1 1 2 ", "P 3_1 1 2 ", "P3_112 ", TRIGO }, /*440*/ {152, "D3^4 ", "P 31 2= ", "P 3_1 2 1 ", "P 3_1 2 1 ", "P3_121 ", TRIGO }, /*441*/ {153, "D3^5 ", "P 32 2c (0 0 -1)", "P 3_2 1 2 ", "P 3_2 1 2 ", "P3_212 ", TRIGO }, /*442*/ {154, "D3^6 ", "P 32 2= ", "P 3_2 2 1 ", "P 3_2 2 1 ", "P3_221 ", TRIGO }, /*443*/ {155, "D3^7 ", "R 3 2= ", "R 3 2 ", "R 3 2 ", "R32 ", RHOMB }, /*444*/ {155, "D3^7 ", "P 3* 2 ", "R 3 2 ", "R 3 2 ", "R32 ", RHOMB }, /*445*/ {156, "C3v^1 ", "P 3 -2= ", "P 3 m 1 ", "P 3 m 1 ", "P3m1 ", TRIGO }, /*446*/ {157, "C3v^2 ", "P 3 -2 ", "P 3 1 m ", "P 3 1 m ", "P31m ", TRIGO }, /*447*/ {158, "C3v^3 ", "P 3 -2=c ", "P 3 c 1 ", "P 3 c 1 ", "P3c1 ", TRIGO }, /*448*/ {159, "C3v^4 ", "P 3 -2c ", "P 3 1 c ", "P 3 1 c ", "P31c ", TRIGO }, /*449*/ {160, "C3v^5 ", "R 3 -2= ", "R 3 m ", "R 3 m ", "R3m ", RHOMB }, /*450*/ {160, "C3v^5 ", "P 3* -2 ", "R 3 m ", "R 3 m ", "R3m ", RHOMB }, /*451*/ {161, "C3v^6 ", "R 3 -2=c ", "R 3 c ", "R 3 c ", "R3c ", RHOMB }, /*452*/ {161, "C3v^6 ", "P 3* -2n ", "R 3 c ", "R 3 c ", "R3c ", RHOMB }, /*453*/ {162, "D3d^1 ", "-P 3 2 ", "P -3 1 m ", "P -3 1 2/m ", "P-31m ", TRIGO }, /*454*/ {163, "D3d^2 ", "-P 3 2c ", "P -3 1 c ", "P -3 1 2/c ", "P-31c ", TRIGO }, /*455*/ {164, "D3d^3 ", "-P 3 2= ", "P -3 m 1 ", "P -3 2/m 1 ", "P-3m1 ", TRIGO }, /*456*/ {165, "D3d^4 ", "-P 3 2=c ", "P -3 c 1 ", "P -3 2/c 1 ", "P-3c1 ", TRIGO }, /*457*/ {166, "D3d^5 ", "-R 3 2= ", "R -3 m ", "R -3 2/m ", "R-3m ", RHOMB }, /*458*/ {166, "D3d^5 ", "-P 3* 2 ", "R -3 m ", "R -3 2/m ", "R-3m ", RHOMB }, /*459*/ {167, "D3d^6 ", "-R 3 2=c ", "R -3 c ", "R -3 2/c ", "R-3c ", RHOMB }, /*460*/ {167, "D3d^6 ", "-P 3* 2n ", "R -3 c ", "R -3 2/c ", "R-3c ", RHOMB }, /*461*/ {168, "C6^1 ", "P 6 ", "P 6 ", "P 6 ", "P6 ", HEXA }, /*462*/ {169, "C6^2 ", "P 61 ", "P 6_1 ", "P 6_1 ", "P6_1 ", HEXA }, /*463*/ {170, "C6^3 ", "P 65 ", "P 6_5 ", "P 6_5 ", "P6_5 ", HEXA }, /*464*/ {171, "C6^4 ", "P 62 ", "P 6_2 ", "P 6_2 ", "P6_2 ", HEXA }, /*465*/ {172, "C6^5 ", "P 64 ", "P 6_4 ", "P 6_4 ", "P6_4 ", HEXA }, /*466*/ {173, "C6^6 ", "P 6c ", "P 6_3 ", "P 6_3 ", "P6_3 ", HEXA }, /*467*/ {174, "C3h^1 ", "P -6 ", "P -6 ", "P -6 ", "P-6 ", HEXA }, /*468*/ {175, "C6h^1 ", "-P 6 ", "P 6/m ", "P 6/m ", "P6/m ", HEXA }, /*469*/ {176, "C6h^2 ", "-P 6c ", "P 6_3/m ", "P 6_3/m ", "P6_3/m ", HEXA }, /*470*/ {177, "D6^1 ", "P 6 2 ", "P 6 2 2 ", "P 6 2 2 ", "P622 ", HEXA }, /*471*/ {178, "D6^2 ", "P 61 2 (0 0 -1) ", "P 6_1 2 2 ", "P 6_1 2 2 ", "P6_122 ", HEXA }, /*472*/ {179, "D6^3 ", "P 65 2 (0 0 1) ", "P 6_5 2 2 ", "P 6_5 2 2 ", "P6_522 ", HEXA }, /*473*/ {180, "D6^4 ", "P 62 2c (0 0 1) ", "P 6_2 2 2 ", "P 6_2 2 2 ", "P6_222 ", HEXA }, /*474*/ {181, "D6^5 ", "P 64 2c (0 0 -1)", "P 6_4 2 2 ", "P 6_4 2 2 ", "P6_422 ", HEXA }, /*475*/ {182, "D6^6 ", "P 6c 2c ", "P 6_3 2 2 ", "P 6_3 2 2 ", "P6_322 ", HEXA }, /*476*/ {183, "C6v^1 ", "P 6 -2 ", "P 6 m m ", "P 6 m m ", "P6mm ", HEXA }, /*477*/ {184, "C6v^2 ", "P 6 -2c ", "P 6 c c ", "P 6 c c ", "P6cc ", HEXA }, /*478*/ {185, "C6v^3 ", "P 6c -2 ", "P 6_3 c m ", "P 6_3 c m ", "P6_3cm ", HEXA }, /*479*/ {186, "C6v^4 ", "P 6c -2c ", "P 6_3 m c ", "P 6_3 m c ", "P6_3mc ", HEXA }, /*480*/ {187, "D3h^1 ", "P -6 2 ", "P -6 m 2 ", "P -6 m 2 ", "P-6m2 ", HEXA }, /*481*/ {188, "D3h^2 ", "P -6c 2 ", "P -6 c 2 ", "P -6 c 2 ", "P-6c2 ", HEXA }, /*482*/ {189, "D3h^3 ", "P -6 -2 ", "P -6 2 m ", "P -6 2 m ", "P-62m ", HEXA }, /*483*/ {190, "D3h^4 ", "P -6c -2c ", "P -6 2 c ", "P -6 2 c ", "P-62c ", HEXA }, /*484*/ {191, "D6h^1 ", "-P 6 2 ", "P 6/m m m ", "P 6/m 2/m 2/m ", "P6/mmm ", HEXA }, /*485*/ {192, "D6h^2 ", "-P 6 2c ", "P 6/m c c ", "P 6/m 2/c 2/c ", "P6/mcc ", HEXA }, /*486*/ {193, "D6h^3 ", "-P 6c 2 ", "P 6_3/m c m ", "P 6_3/m 2/c 2/m ", "P6_3/mcm ", HEXA }, /*487*/ {194, "D6h^4 ", "-P 6c 2c ", "P 6_3/m m c ", "P 6_3/m 2/m 2/c ", "P6_3/mmc ", HEXA }, /*488*/ {195, "T^1 ", "P 2 2 3 ", "P 2 3 ", "P 2 3 ", "P23 ", CUBIC }, /*489*/ {196, "T^2 ", "F 2 2 3 ", "F 2 3 ", "F 2 3 ", "F23 ", CUBIC }, /*490*/ {197, "T^3 ", "I 2 2 3 ", "I 2 3 ", "I 2 3 ", "I23 ", CUBIC }, /*491*/ {198, "T^4 ", "P 2ac 2ab 3 ", "P 2_1 3 ", "P 2_1 3 ", "P2_13 ", CUBIC }, /*492*/ {199, "T^5 ", "I 2b 2c 3 ", "I 2_1 3 ", "I 2_1 3 ", "I2_13 ", CUBIC }, /*493*/ {200, "Th^1 ", "-P 2 2 3 ", "P m 3 ", "P 2/m -3 ", "Pm3 ", CUBIC }, /*494*/ {201, "Th^2 ", "P 2 2 3 -1n ", "P n 3 ", "P 2/n -3 ", "Pn3 ", CUBIC }, /*495*/ {201, "Th^2 ", "-P 2ab 2bc 3 ", "P n 3 ", "P 2/n -3 ", "Pn3 ", CUBIC }, /*496*/ {202, "Th^3 ", "-F 2 2 3 ", "F m 3 ", "F 2/m -3 ", "Fm3 ", CUBIC }, /*497*/ {203, "Th^4 ", "F 2 2 3 -1d ", "F d 3 ", "F 2/d -3 ", "Fd3 ", CUBIC }, /*498*/ {203, "Th^4 ", "-F 2uv 2vw 3 ", "F d 3 ", "F 2/d -3 ", "Fd3 ", CUBIC }, /*499*/ {204, "Th^5 ", "-I 2 2 3 ", "I m 3 ", "I 2/m -3 ", "Im3 ", CUBIC }, /*500*/ {205, "Th^6 ", "-P 2ac 2ab 3 ", "P a 3 ", "P 2_1/a -3 ", "Pa3 ", CUBIC }, /*501*/ {206, "Th^7 ", "-I 2b 2c 3 ", "I a 3 ", "I 2_1/a -3 ", "Ia3 ", CUBIC }, /*502*/ {207, "O^1 ", "P 4 2 3 ", "P 4 3 2 ", "P 4 3 2 ", "P432 ", CUBIC }, /*503*/ {208, "O^2 ", "P 4n 2 3 ", "P 4_2 3 2 ", "P 4_2 3 2 ", "P4_232 ", CUBIC }, /*504*/ {209, "O^3 ", "F 4 2 3 ", "F 4 3 2 ", "F 4 3 2 ", "F432 ", CUBIC }, /*505*/ {210, "O^4 ", "F 4d 2 3 ", "F 4_1 3 2 ", "F 4_1 3 2 ", "F4_132 ", CUBIC }, /*506*/ {211, "O^5 ", "I 4 2 3 ", "I 4 3 2 ", "I 4 3 2 ", "I432 ", CUBIC }, /*507*/ {212, "O^6 ", "P 4acd 2ab 3 ", "P 4_3 3 2 ", "P 4_3 3 2 ", "P4_332 ", CUBIC }, /*508*/ {213, "O^7 ", "P 4bd 2ab 3 ", "P 4_1 3 2 ", "P 4_1 3 2 ", "P4_132 ", CUBIC }, /*509*/ {214, "O^8 ", "I 4bd 2c 3 ", "I 4_1 3 2 ", "I 4_1 3 2 ", "I4_132 ", CUBIC }, /*510*/ {215, "Td^1 ", "P -4 2 3 ", "P -4 3 m ", "P -4 3 m ", "P-43m ", CUBIC }, /*511*/ {216, "Td^2 ", "F -4 2 3 ", "F -4 3 m ", "F -4 3 m ", "F-43m ", CUBIC }, /*512*/ {217, "Td^3 ", "I -4 2 3 ", "I -4 3 m ", "I -4 3 m ", "I-43m ", CUBIC }, /*513*/ {218, "Td^4 ", "P -4n 2 3 ", "P -4 3 n ", "P -4 3 n ", "P-43n ", CUBIC }, /*514*/ {219, "Td^5 ", "F -4c 2 3 ", "F -4 3 c ", "F -4 3 c ", "F-43c ", CUBIC }, /*515*/ {220, "Td^6 ", "I -4bd 2c 3 ", "I -4 3 d ", "I -4 3 d ", "I-43d ", CUBIC }, /*516*/ {221, "Oh^1 ", "-P 4 2 3 ", "P m -3 m ", "P 4/m -3 2/m ", "Pm-3m ", CUBIC }, /*517*/ {222, "Oh^2 ", "P 4 2 3 -1n ", "P n -3 n ", "P 4/n -3 2/n ", "Pn-3n ", CUBIC }, /*518*/ {222, "Oh^2 ", "-P 4a 2bc 3 ", "P n -3 n ", "P 4/n -3 2/n ", "Pn-3n ", CUBIC }, /*519*/ {223, "Oh^3 ", "-P 4n 2 3 ", "P m -3 n ", "P 4_2/m -3 2/n ", "Pm-3n ", CUBIC }, /*520*/ {224, "Oh^4 ", "P 4n 2 3 -1n ", "P n -3 m ", "P 4_2/n -3 2/m ", "Pn-3m ", CUBIC }, /*521*/ {224, "Oh^4 ", "-P 4bc 2bc 3 ", "P n -3 m ", "P 4_2/n -3 2/m ", "Pn-3m ", CUBIC }, /*522*/ {225, "Oh^5 ", "-F 4 2 3 ", "F m -3 m ", "F 4/m -3 2/m ", "Fm-3m ", CUBIC }, /*523*/ {226, "Oh^6 ", "-F 4c 2 3 ", "F m -3 c ", "F 4/m -3 2/c ", "Fm-3c ", CUBIC }, /*524*/ {227, "Oh^7 ", "F 4d 2 3 -1d ", "F d -3 m ", "F 4_1/d -3 2/m ", "Fd-3m ", CUBIC }, /*525*/ {227, "Oh^7 ", "-F 4vw 2vw 3 ", "F d -3 m ", "F 4_1/d -3 2/m ", "Fd-3m ", CUBIC }, /*526*/ {228, "Oh^8 ", "F 4d 2 3 -1cd ", "F d -3 c ", "F 4_1/d -3 2/c ", "Fd-3c ", CUBIC }, /*527*/ {228, "Oh^8 ", "-F 4cvw 2vw 3 ", "F d -3 c ", "F 4_1/d -3 2/c ", "Fd-3c ", CUBIC }, /*528*/ {229, "Oh^9 ", "-I 4 2 3 ", "I m -3 m ", "I 4/m -3 2/m ", "Im-3m ", CUBIC }, /*529*/ {230, "Oh^10 ", "-I 4bd 2c 3 ", "I a -3 d ", "I 4_1/a -3 2/d ", "Ia-3d ", CUBIC }, /*530*/ }; static const int symmetry_operations[][13] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* 0 */ { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1 */ { 2, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2 */ { 2, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3 */ { 3, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4 */ { 3, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5 */ { 4, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 6 */ { 4, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 7 */ { 5, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 8 */ { 5, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 9 */ { 6, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 10 */ { 6, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 11 */ { 7, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 12 */ { 7, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 13 */ { 8, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 14 */ { 8, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 15 */ { 9, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 16 */ { 9, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 17 */ { 9, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 18 */ { 9, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 19 */ { 10, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 20 */ { 10, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 21 */ { 10, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 22 */ { 10, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 23 */ { 11, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 24 */ { 11, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 25 */ { 11, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 26 */ { 11, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 27 */ { 12, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 28 */ { 12, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 29 */ { 12, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 30 */ { 12, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 31 */ { 13, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 32 */ { 13, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 33 */ { 13, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 34 */ { 13, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 35 */ { 14, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 36 */ { 14, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 37 */ { 14, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 38 */ { 14, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 39 */ { 15, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 40 */ { 15, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 41 */ { 15, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 42 */ { 15, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 43 */ { 16, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 44 */ { 16, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 45 */ { 16, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 46 */ { 16, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 47 */ { 17, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 48 */ { 17, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 49 */ { 17, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 50 */ { 17, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 51 */ { 18, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 52 */ { 18, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 53 */ { 19, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 54 */ { 19, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 55 */ { 20, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 56 */ { 20, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 57 */ { 21, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 58 */ { 21, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 59 */ { 22, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 60 */ { 22, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 61 */ { 23, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 62 */ { 23, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 63 */ { 24, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 64 */ { 24, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 65 */ { 25, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 66 */ { 25, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 67 */ { 26, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 68 */ { 26, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 69 */ { 27, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 70 */ { 27, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 71 */ { 28, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 72 */ { 28, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 73 */ { 29, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 74 */ { 29, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 75 */ { 30, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 76 */ { 30, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 77 */ { 30, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 78 */ { 30, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 79 */ { 31, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 80 */ { 31, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 81 */ { 31, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 82 */ { 31, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 83 */ { 32, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 84 */ { 32, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 85 */ { 32, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 86 */ { 32, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 87 */ { 33, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 88 */ { 33, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 89 */ { 33, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 90 */ { 33, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 91 */ { 34, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 92 */ { 34, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 93 */ { 34, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 94 */ { 34, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 95 */ { 35, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 96 */ { 35, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 97 */ { 35, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 98 */ { 35, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 99 */ { 36, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 100 */ { 36, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 101 */ { 36, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 102 */ { 36, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 103 */ { 37, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 104 */ { 37, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 105 */ { 37, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 106 */ { 37, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 107 */ { 38, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 108 */ { 38, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 109 */ { 38, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 110 */ { 38, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 111 */ { 39, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 112 */ { 39, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 113 */ { 39, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 114 */ { 39, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 115 */ { 40, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 116 */ { 40, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 117 */ { 40, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 118 */ { 40, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 119 */ { 41, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 120 */ { 41, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 121 */ { 41, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 122 */ { 41, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 123 */ { 42, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 124 */ { 42, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 125 */ { 42, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 126 */ { 42, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 127 */ { 43, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 128 */ { 43, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 129 */ { 43, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 130 */ { 43, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 131 */ { 44, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 132 */ { 44, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 133 */ { 44, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 134 */ { 44, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 135 */ { 45, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 136 */ { 45, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 137 */ { 45, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 138 */ { 45, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 139 */ { 46, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 140 */ { 46, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 141 */ { 46, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 142 */ { 46, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 143 */ { 47, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 144 */ { 47, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 145 */ { 47, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 146 */ { 47, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 147 */ { 48, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 148 */ { 48, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 149 */ { 48, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 150 */ { 48, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 151 */ { 49, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 152 */ { 49, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 153 */ { 49, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 154 */ { 49, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 155 */ { 50, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 156 */ { 50, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 157 */ { 50, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 158 */ { 50, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 159 */ { 51, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 160 */ { 51, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 161 */ { 51, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 162 */ { 51, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 163 */ { 52, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 164 */ { 52, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 165 */ { 52, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 166 */ { 52, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 167 */ { 53, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 168 */ { 53, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 169 */ { 53, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 170 */ { 53, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 171 */ { 54, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 172 */ { 54, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 173 */ { 54, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 174 */ { 54, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 175 */ { 55, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 176 */ { 55, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 177 */ { 55, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 178 */ { 55, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 179 */ { 56, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 180 */ { 56, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 181 */ { 56, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 182 */ { 56, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 183 */ { 57, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 184 */ { 57, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 185 */ { 57, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 186 */ { 57, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 187 */ { 58, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 188 */ { 58, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 189 */ { 58, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 190 */ { 58, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 191 */ { 59, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 192 */ { 59, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 193 */ { 59, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 194 */ { 59, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 195 */ { 60, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 196 */ { 60, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 197 */ { 60, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 198 */ { 60, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 199 */ { 61, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 200 */ { 61, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 201 */ { 61, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 202 */ { 61, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 203 */ { 62, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 204 */ { 62, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 205 */ { 62, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 206 */ { 62, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 207 */ { 63, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 208 */ { 63, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 209 */ { 63, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 210 */ { 63, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 211 */ { 63, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 212 */ { 63, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 213 */ { 63, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 214 */ { 63, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 215 */ { 64, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 216 */ { 64, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 217 */ { 64, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 218 */ { 64, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 219 */ { 64, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 220 */ { 64, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 221 */ { 64, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 222 */ { 64, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 223 */ { 65, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 224 */ { 65, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 225 */ { 65, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 226 */ { 65, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 227 */ { 65, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 228 */ { 65, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 229 */ { 65, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 230 */ { 65, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 231 */ { 66, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 232 */ { 66, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 233 */ { 66, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 234 */ { 66, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 235 */ { 66, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 236 */ { 66, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 237 */ { 66, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 238 */ { 66, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 239 */ { 67, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 240 */ { 67, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 241 */ { 67, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 242 */ { 67, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 243 */ { 67, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 244 */ { 67, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 245 */ { 67, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 246 */ { 67, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 247 */ { 68, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 248 */ { 68, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 249 */ { 68, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 250 */ { 68, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 251 */ { 68, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 252 */ { 68, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 253 */ { 68, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 254 */ { 68, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 255 */ { 69, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 256 */ { 69, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 257 */ { 69, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 258 */ { 69, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 259 */ { 69, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 260 */ { 69, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 261 */ { 69, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 262 */ { 69, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 263 */ { 70, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 264 */ { 70, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 265 */ { 70, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 266 */ { 70, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 267 */ { 70, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 268 */ { 70, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 269 */ { 70, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 270 */ { 70, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 271 */ { 71, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 272 */ { 71, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 273 */ { 71, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 274 */ { 71, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 275 */ { 71, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 276 */ { 71, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 277 */ { 71, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 278 */ { 71, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 279 */ { 72, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 280 */ { 72, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 281 */ { 72, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 282 */ { 72, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 283 */ { 73, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 284 */ { 73, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 285 */ { 73, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 286 */ { 73, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 287 */ { 74, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 288 */ { 74, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 289 */ { 74, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 290 */ { 74, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 291 */ { 75, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 292 */ { 75, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 293 */ { 75, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 294 */ { 75, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 295 */ { 76, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 296 */ { 76, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 297 */ { 76, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 298 */ { 76, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 299 */ { 77, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 300 */ { 77, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 301 */ { 77, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 302 */ { 77, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 303 */ { 78, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 304 */ { 78, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 305 */ { 78, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 306 */ { 78, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 307 */ { 79, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 308 */ { 79, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 309 */ { 79, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 310 */ { 79, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 311 */ { 80, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 312 */ { 80, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 313 */ { 80, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 314 */ { 80, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 315 */ { 81, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 316 */ { 81, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 317 */ { 81, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 318 */ { 81, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 319 */ { 82, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 320 */ { 82, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 321 */ { 82, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 322 */ { 82, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 323 */ { 83, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 324 */ { 83, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 325 */ { 83, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 326 */ { 83, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 327 */ { 84, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 328 */ { 84, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 329 */ { 84, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 330 */ { 84, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 331 */ { 85, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 332 */ { 85, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 333 */ { 85, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 334 */ { 85, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 335 */ { 86, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 336 */ { 86, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 337 */ { 86, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 338 */ { 86, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 339 */ { 87, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 340 */ { 87, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 341 */ { 87, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 342 */ { 87, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 343 */ { 88, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 344 */ { 88, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 345 */ { 88, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 346 */ { 88, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 347 */ { 89, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 348 */ { 89, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 349 */ { 89, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 350 */ { 89, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 351 */ { 90, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 352 */ { 90, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 353 */ { 90, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 354 */ { 90, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 355 */ { 90, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 356 */ { 90, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 357 */ { 90, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 358 */ { 90, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 359 */ { 91, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 360 */ { 91, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 361 */ { 91, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 362 */ { 91, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 363 */ { 91, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 364 */ { 91, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 365 */ { 91, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 366 */ { 91, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 367 */ { 92, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 368 */ { 92, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 369 */ { 92, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 370 */ { 92, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 371 */ { 92, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 372 */ { 92, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 373 */ { 92, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 374 */ { 92, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 375 */ { 93, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 376 */ { 93, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 377 */ { 93, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 378 */ { 93, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 379 */ { 93, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 380 */ { 93, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 381 */ { 93, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 382 */ { 93, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 383 */ { 94, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 384 */ { 94, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 385 */ { 94, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 386 */ { 94, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 387 */ { 94, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 388 */ { 94, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 389 */ { 94, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 390 */ { 94, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 391 */ { 95, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 392 */ { 95, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 393 */ { 95, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 394 */ { 95, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 395 */ { 95, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 396 */ { 95, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 397 */ { 95, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 398 */ { 95, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 399 */ { 96, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 400 */ { 96, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 401 */ { 96, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 402 */ { 96, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 403 */ { 96, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 404 */ { 96, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 405 */ { 96, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 406 */ { 96, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 407 */ { 97, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 408 */ { 97, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 409 */ { 97, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 410 */ { 97, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 411 */ { 97, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 412 */ { 97, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 413 */ { 97, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 414 */ { 97, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 415 */ { 98, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 416 */ { 98, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 417 */ { 98, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 418 */ { 98, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 419 */ { 98, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 420 */ { 98, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 421 */ { 98, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 422 */ { 98, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 423 */ { 99, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 424 */ { 99, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 425 */ { 99, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 426 */ { 99, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 427 */ { 99, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 428 */ { 99, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 429 */ { 99, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 430 */ { 99, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 431 */ {100, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 432 */ {100, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 433 */ {100, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 434 */ {100, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 435 */ {100, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 436 */ {100, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 437 */ {100, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 438 */ {100, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 439 */ {101, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 440 */ {101, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 441 */ {101, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 442 */ {101, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 443 */ {101, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 444 */ {101, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 445 */ {101, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 446 */ {101, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 447 */ {102, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 448 */ {102, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 449 */ {102, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 450 */ {102, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 451 */ {102, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 452 */ {102, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 453 */ {102, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 454 */ {102, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 455 */ {103, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 456 */ {103, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 457 */ {103, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 458 */ {103, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 459 */ {103, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 460 */ {103, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 461 */ {103, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 462 */ {103, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 463 */ {104, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 464 */ {104, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 465 */ {104, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 466 */ {104, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 467 */ {104, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 468 */ {104, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 469 */ {104, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 470 */ {104, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 471 */ {105, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 472 */ {105, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 473 */ {105, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 474 */ {105, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 475 */ {105, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 476 */ {105, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 477 */ {105, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 478 */ {105, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 479 */ {106, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 480 */ {106, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 481 */ {106, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 482 */ {106, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 483 */ {106, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 484 */ {106, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 485 */ {106, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 486 */ {106, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 487 */ {107, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 488 */ {107, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 489 */ {107, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 490 */ {107, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 491 */ {107, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 492 */ {107, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 493 */ {107, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 494 */ {107, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 495 */ {108, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 496 */ {108, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 497 */ {108, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 498 */ {108, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 499 */ {109, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 500 */ {109, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 501 */ {109, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 502 */ {109, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 503 */ {110, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 504 */ {110, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 505 */ {110, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 506 */ {110, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 507 */ {111, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 508 */ {111, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 509 */ {111, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 510 */ {111, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 511 */ {112, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 512 */ {112, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 513 */ {112, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 514 */ {112, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 515 */ {113, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 516 */ {113, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 517 */ {113, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 518 */ {113, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 519 */ {114, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 520 */ {114, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 521 */ {114, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 522 */ {114, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 523 */ {115, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 524 */ {115, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 525 */ {115, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 526 */ {115, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 527 */ {116, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 528 */ {116, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 529 */ {116, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 530 */ {116, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 531 */ {116, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 532 */ {116, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 533 */ {116, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 534 */ {116, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 535 */ {117, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 536 */ {117, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 537 */ {117, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 538 */ {117, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 539 */ {117, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 540 */ {117, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 541 */ {117, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 542 */ {117, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 543 */ {118, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 544 */ {118, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 545 */ {118, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 546 */ {118, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 547 */ {118, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 548 */ {118, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 549 */ {118, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 550 */ {118, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 551 */ {119, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 552 */ {119, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 553 */ {119, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 554 */ {119, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 555 */ {119, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 556 */ {119, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 557 */ {119, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 558 */ {119, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 559 */ {120, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 560 */ {120, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 561 */ {120, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 562 */ {120, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 563 */ {120, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 564 */ {120, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 565 */ {120, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 566 */ {120, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 567 */ {121, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 568 */ {121, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 569 */ {121, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 570 */ {121, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 571 */ {121, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 572 */ {121, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 573 */ {121, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 574 */ {121, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 575 */ {122, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 576 */ {122, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 577 */ {122, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 578 */ {122, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 579 */ {122, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 580 */ {122, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 581 */ {122, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 582 */ {122, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 583 */ {122, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 584 */ {122, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 585 */ {122, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 586 */ {122, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 587 */ {122, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 588 */ {122, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 589 */ {122, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 590 */ {122, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 591 */ {123, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 592 */ {123, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 593 */ {123, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 594 */ {123, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 595 */ {123, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 596 */ {123, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 597 */ {123, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 598 */ {123, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 599 */ {124, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 600 */ {124, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 601 */ {124, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 602 */ {124, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 603 */ {124, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 604 */ {124, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 605 */ {124, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 606 */ {124, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 607 */ {125, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 608 */ {125, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 609 */ {125, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 610 */ {125, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 611 */ {126, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 612 */ {126, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 613 */ {126, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 614 */ {126, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 615 */ {127, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 616 */ {127, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 617 */ {127, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 618 */ {127, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 619 */ {128, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 620 */ {128, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 621 */ {128, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 622 */ {128, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 623 */ {129, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 624 */ {129, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 625 */ {129, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 626 */ {129, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 627 */ {130, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 628 */ {130, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 629 */ {130, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 630 */ {130, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 631 */ {131, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 632 */ {131, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 633 */ {131, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 634 */ {131, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 635 */ {132, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 636 */ {132, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 637 */ {132, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 638 */ {132, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 639 */ {133, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 640 */ {133, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 641 */ {133, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 642 */ {133, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 643 */ {134, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 644 */ {134, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 645 */ {134, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 646 */ {134, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 647 */ {135, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 648 */ {135, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 649 */ {135, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 650 */ {135, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 651 */ {136, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 652 */ {136, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 653 */ {136, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 654 */ {136, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 655 */ {137, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 656 */ {137, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 657 */ {137, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 658 */ {137, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 659 */ {138, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 660 */ {138, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 661 */ {138, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 662 */ {138, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 663 */ {139, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 664 */ {139, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 665 */ {139, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 666 */ {139, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 667 */ {140, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 668 */ {140, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 669 */ {140, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 670 */ {140, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 671 */ {141, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 672 */ {141, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 673 */ {141, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 674 */ {141, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 675 */ {142, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 676 */ {142, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 677 */ {142, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 678 */ {142, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 679 */ {143, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 680 */ {143, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 681 */ {143, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 682 */ {143, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 683 */ {144, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 684 */ {144, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 685 */ {144, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 686 */ {144, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 687 */ {145, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 688 */ {145, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 689 */ {145, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 690 */ {145, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 691 */ {146, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 692 */ {146, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 693 */ {146, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 694 */ {146, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 695 */ {147, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 696 */ {147, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 697 */ {147, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 698 */ {147, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 699 */ {148, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 700 */ {148, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 701 */ {148, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 702 */ {148, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 703 */ {149, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 704 */ {149, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 705 */ {149, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 706 */ {149, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 707 */ {150, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 708 */ {150, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 709 */ {150, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 710 */ {150, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 711 */ {151, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 712 */ {151, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 713 */ {151, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 714 */ {151, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 715 */ {152, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 716 */ {152, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 717 */ {152, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 718 */ {152, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 719 */ {153, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 720 */ {153, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 721 */ {153, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 722 */ {153, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 723 */ {154, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 724 */ {154, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 725 */ {154, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 726 */ {154, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 727 */ {155, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 728 */ {155, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 729 */ {155, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 730 */ {155, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 731 */ {156, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 732 */ {156, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 733 */ {156, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 734 */ {156, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 735 */ {157, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 736 */ {157, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 737 */ {157, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 738 */ {157, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 739 */ {158, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 740 */ {158, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 741 */ {158, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 742 */ {158, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 743 */ {159, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 744 */ {159, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 745 */ {159, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 746 */ {159, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 747 */ {160, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 748 */ {160, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 749 */ {160, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 750 */ {160, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 751 */ {161, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 752 */ {161, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 753 */ {161, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 754 */ {161, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 755 */ {162, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 756 */ {162, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 757 */ {162, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 758 */ {162, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 759 */ {163, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 760 */ {163, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 761 */ {163, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 762 */ {163, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 763 */ {164, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 764 */ {164, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 765 */ {164, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 766 */ {164, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 767 */ {165, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 768 */ {165, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 769 */ {165, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 770 */ {165, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 771 */ {166, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 772 */ {166, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 773 */ {166, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 774 */ {166, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 775 */ {167, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 776 */ {167, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 777 */ {167, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 778 */ {167, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 779 */ {168, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 780 */ {168, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 781 */ {168, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 782 */ {168, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 783 */ {169, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 784 */ {169, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 785 */ {169, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 786 */ {169, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 787 */ {170, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 788 */ {170, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 789 */ {170, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 790 */ {170, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 791 */ {171, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 792 */ {171, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 793 */ {171, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 794 */ {171, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 795 */ {172, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 796 */ {172, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 797 */ {172, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 798 */ {172, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 799 */ {173, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 800 */ {173, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 801 */ {173, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 802 */ {173, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 803 */ {173, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 804 */ {173, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 805 */ {173, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 806 */ {173, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 807 */ {174, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 808 */ {174, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 809 */ {174, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 810 */ {174, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 811 */ {174, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 812 */ {174, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 813 */ {174, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 814 */ {174, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 815 */ {175, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 816 */ {175, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 817 */ {175, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 818 */ {175, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 819 */ {175, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 820 */ {175, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 821 */ {175, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 822 */ {175, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 823 */ {176, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 824 */ {176, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 825 */ {176, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 826 */ {176, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 827 */ {176, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 828 */ {176, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 829 */ {176, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 830 */ {176, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 831 */ {177, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 832 */ {177, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 833 */ {177, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 834 */ {177, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 835 */ {177, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 836 */ {177, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 837 */ {177, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 838 */ {177, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 839 */ {178, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 840 */ {178, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 841 */ {178, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 842 */ {178, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 843 */ {178, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 844 */ {178, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 845 */ {178, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 846 */ {178, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 847 */ {179, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 848 */ {179, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 849 */ {179, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 850 */ {179, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 851 */ {179, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 852 */ {179, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 853 */ {179, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 854 */ {179, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 855 */ {180, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 856 */ {180, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 857 */ {180, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 858 */ {180, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 859 */ {180, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 860 */ {180, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 861 */ {180, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 862 */ {180, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 863 */ {181, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 864 */ {181, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 865 */ {181, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 866 */ {181, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 867 */ {181, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 868 */ {181, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 869 */ {181, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 870 */ {181, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 871 */ {182, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 872 */ {182, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 873 */ {182, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 874 */ {182, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 875 */ {182, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 876 */ {182, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 877 */ {182, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 878 */ {182, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 879 */ {183, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 880 */ {183, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 881 */ {183, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 882 */ {183, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 883 */ {183, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 884 */ {183, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 885 */ {183, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 886 */ {183, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 887 */ {184, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 888 */ {184, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 889 */ {184, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 890 */ {184, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 891 */ {184, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 892 */ {184, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 893 */ {184, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 894 */ {184, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 895 */ {185, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 896 */ {185, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 897 */ {185, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 898 */ {185, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 899 */ {185, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 900 */ {185, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 901 */ {185, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 902 */ {185, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 903 */ {186, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 904 */ {186, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 905 */ {186, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 906 */ {186, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 907 */ {186, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 908 */ {186, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 909 */ {186, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 910 */ {186, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 911 */ {187, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 912 */ {187, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 913 */ {187, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 914 */ {187, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 915 */ {187, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 916 */ {187, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 917 */ {187, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 918 */ {187, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 919 */ {188, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 920 */ {188, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 921 */ {188, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 922 */ {188, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 923 */ {188, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 924 */ {188, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 925 */ {188, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 926 */ {188, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 927 */ {189, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 928 */ {189, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 929 */ {189, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 930 */ {189, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 931 */ {189, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 932 */ {189, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 933 */ {189, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 934 */ {189, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 935 */ {190, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 936 */ {190, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 937 */ {190, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 938 */ {190, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 939 */ {190, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 940 */ {190, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 941 */ {190, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 942 */ {190, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 943 */ {191, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 944 */ {191, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 945 */ {191, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 946 */ {191, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 947 */ {191, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 948 */ {191, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 949 */ {191, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 950 */ {191, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 951 */ {192, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 952 */ {192, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 953 */ {192, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 954 */ {192, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 955 */ {192, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 956 */ {192, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 957 */ {192, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 958 */ {192, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 959 */ {193, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 960 */ {193, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 961 */ {193, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 962 */ {193, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 963 */ {193, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 964 */ {193, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 965 */ {193, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 966 */ {193, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 967 */ {194, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 968 */ {194, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 969 */ {194, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 970 */ {194, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 971 */ {194, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 972 */ {194, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 973 */ {194, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 974 */ {194, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 975 */ {195, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 976 */ {195, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 977 */ {195, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 978 */ {195, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 979 */ {195, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 980 */ {195, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 981 */ {195, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 982 */ {195, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 983 */ {196, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 984 */ {196, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 985 */ {196, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 986 */ {196, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 987 */ {196, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 988 */ {196, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 989 */ {196, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 990 */ {196, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 991 */ {197, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 992 */ {197, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 993 */ {197, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 994 */ {197, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 995 */ {197, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 996 */ {197, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 997 */ {197, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 998 */ {197, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 999 */ {198, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1000 */ {198, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1001 */ {198, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1002 */ {198, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1003 */ {198, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1004 */ {198, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1005 */ {198, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1006 */ {198, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1007 */ {199, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1008 */ {199, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1009 */ {199, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1010 */ {199, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1011 */ {199, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1012 */ {199, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1013 */ {199, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1014 */ {199, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1015 */ {200, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1016 */ {200, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1017 */ {200, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1018 */ {200, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1019 */ {200, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1020 */ {200, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1021 */ {200, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1022 */ {200, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1023 */ {201, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1024 */ {201, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1025 */ {201, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1026 */ {201, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1027 */ {201, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1028 */ {201, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1029 */ {201, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1030 */ {201, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1031 */ {202, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1032 */ {202, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1033 */ {202, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1034 */ {202, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1035 */ {202, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1036 */ {202, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1037 */ {202, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1038 */ {202, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1039 */ {203, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1040 */ {203, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1041 */ {203, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1042 */ {203, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1043 */ {203, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1044 */ {203, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1045 */ {203, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1046 */ {203, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1047 */ {204, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1048 */ {204, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1049 */ {204, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1050 */ {204, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1051 */ {204, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1052 */ {204, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1053 */ {204, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1054 */ {204, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1055 */ {205, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1056 */ {205, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1057 */ {205, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1058 */ {205, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1059 */ {205, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1060 */ {205, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1061 */ {205, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1062 */ {205, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1063 */ {206, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1064 */ {206, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1065 */ {206, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1066 */ {206, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1067 */ {206, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1068 */ {206, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1069 */ {206, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1070 */ {206, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1071 */ {207, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1072 */ {207, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1073 */ {207, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1074 */ {207, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1075 */ {207, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1076 */ {207, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1077 */ {207, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1078 */ {207, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1079 */ {208, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1080 */ {208, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1081 */ {208, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1082 */ {208, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1083 */ {208, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1084 */ {208, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1085 */ {208, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1086 */ {208, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1087 */ {209, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1088 */ {209, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1089 */ {209, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1090 */ {209, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1091 */ {209, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1092 */ {209, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1093 */ {209, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1094 */ {209, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1095 */ {209, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1096 */ {209, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1097 */ {209, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1098 */ {209, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1099 */ {209, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1100 */ {209, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1101 */ {209, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1102 */ {209, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1103 */ {210, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1104 */ {210, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1105 */ {210, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1106 */ {210, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1107 */ {210, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1108 */ {210, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1109 */ {210, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1110 */ {210, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1111 */ {210, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1112 */ {210, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1113 */ {210, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1114 */ {210, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1115 */ {210, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1116 */ {210, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1117 */ {210, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1118 */ {210, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1119 */ {211, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1120 */ {211, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1121 */ {211, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1122 */ {211, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1123 */ {211, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1124 */ {211, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1125 */ {211, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1126 */ {211, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1127 */ {211, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1128 */ {211, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1129 */ {211, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1130 */ {211, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1131 */ {211, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1132 */ {211, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1133 */ {211, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1134 */ {211, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1135 */ {212, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1136 */ {212, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1137 */ {212, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 3, 3 }, /* 1138 */ {212, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 3 }, /* 1139 */ {212, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1140 */ {212, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1141 */ {212, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 9, 9 }, /* 1142 */ {212, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 9 }, /* 1143 */ {212, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1144 */ {212, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1145 */ {212, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 3, 9 }, /* 1146 */ {212, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 9 }, /* 1147 */ {212, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1148 */ {212, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1149 */ {212, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 9, 3 }, /* 1150 */ {212, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 3 }, /* 1151 */ {213, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1152 */ {213, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 3 }, /* 1153 */ {213, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1154 */ {213, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 9 }, /* 1155 */ {213, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1156 */ {213, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 9 }, /* 1157 */ {213, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1158 */ {213, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 3 }, /* 1159 */ {213, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1160 */ {213, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 9 }, /* 1161 */ {213, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1162 */ {213, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 3 }, /* 1163 */ {213, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1164 */ {213, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 3 }, /* 1165 */ {213, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1166 */ {213, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 9 }, /* 1167 */ {214, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1168 */ {214, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 9 }, /* 1169 */ {214, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 9, 3 }, /* 1170 */ {214, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1171 */ {214, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1172 */ {214, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 3 }, /* 1173 */ {214, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 3, 9 }, /* 1174 */ {214, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1175 */ {214, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1176 */ {214, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 3 }, /* 1177 */ {214, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 9, 9 }, /* 1178 */ {214, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1179 */ {214, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1180 */ {214, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 9 }, /* 1181 */ {214, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 3, 3 }, /* 1182 */ {214, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1183 */ {215, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1184 */ {215, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1185 */ {215, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1186 */ {215, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1187 */ {215, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1188 */ {215, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1189 */ {215, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1190 */ {215, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1191 */ {216, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1192 */ {216, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1193 */ {216, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1194 */ {216, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1195 */ {216, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1196 */ {216, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1197 */ {216, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1198 */ {216, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1199 */ {217, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1200 */ {217, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1201 */ {217, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1202 */ {217, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1203 */ {217, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1204 */ {217, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1205 */ {217, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1206 */ {217, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1207 */ {218, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1208 */ {218, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1209 */ {218, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1210 */ {218, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1211 */ {218, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1212 */ {218, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1213 */ {218, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1214 */ {218, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1215 */ {219, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1216 */ {219, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1217 */ {219, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1218 */ {219, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1219 */ {219, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1220 */ {219, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1221 */ {219, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1222 */ {219, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1223 */ {220, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1224 */ {220, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1225 */ {220, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1226 */ {220, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1227 */ {220, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1228 */ {220, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1229 */ {220, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1230 */ {220, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1231 */ {221, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1232 */ {221, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1233 */ {221, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1234 */ {221, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1235 */ {221, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1236 */ {221, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1237 */ {221, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1238 */ {221, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1239 */ {222, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1240 */ {222, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1241 */ {222, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1242 */ {222, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1243 */ {222, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1244 */ {222, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1245 */ {222, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1246 */ {222, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1247 */ {223, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1248 */ {223, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1249 */ {223, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1250 */ {223, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1251 */ {223, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1252 */ {223, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1253 */ {223, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1254 */ {223, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1255 */ {224, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1256 */ {224, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1257 */ {224, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1258 */ {224, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1259 */ {224, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1260 */ {224, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1261 */ {224, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1262 */ {224, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1263 */ {225, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1264 */ {225, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1265 */ {225, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1266 */ {225, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1267 */ {225, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1268 */ {225, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1269 */ {225, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1270 */ {225, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1271 */ {226, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1272 */ {226, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1273 */ {226, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1274 */ {226, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1275 */ {226, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1276 */ {226, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1277 */ {226, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1278 */ {226, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1279 */ {227, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1280 */ {227, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1281 */ {227, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1282 */ {227, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1283 */ {227, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1284 */ {227, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1285 */ {227, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1286 */ {227, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1287 */ {228, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1288 */ {228, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1289 */ {228, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1290 */ {228, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1291 */ {228, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1292 */ {228, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1293 */ {228, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1294 */ {228, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1295 */ {229, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1296 */ {229, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1297 */ {229, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1298 */ {229, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1299 */ {229, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1300 */ {229, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1301 */ {229, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1302 */ {229, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1303 */ {230, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1304 */ {230, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1305 */ {230, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1306 */ {230, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1307 */ {230, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1308 */ {230, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1309 */ {230, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1310 */ {230, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1311 */ {231, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1312 */ {231, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1313 */ {231, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1314 */ {231, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1315 */ {231, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1316 */ {231, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1317 */ {231, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1318 */ {231, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1319 */ {232, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1320 */ {232, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1321 */ {232, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1322 */ {232, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1323 */ {232, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1324 */ {232, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1325 */ {232, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1326 */ {232, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1327 */ {233, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1328 */ {233, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1329 */ {233, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1330 */ {233, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1331 */ {233, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1332 */ {233, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1333 */ {233, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1334 */ {233, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1335 */ {234, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1336 */ {234, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1337 */ {234, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1338 */ {234, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1339 */ {234, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1340 */ {234, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1341 */ {234, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1342 */ {234, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1343 */ {235, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1344 */ {235, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1345 */ {235, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1346 */ {235, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1347 */ {235, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1348 */ {235, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1349 */ {235, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1350 */ {235, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1351 */ {236, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1352 */ {236, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1353 */ {236, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1354 */ {236, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1355 */ {236, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1356 */ {236, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1357 */ {236, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1358 */ {236, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1359 */ {237, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1360 */ {237, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1361 */ {237, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1362 */ {237, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1363 */ {237, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1364 */ {237, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1365 */ {237, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1366 */ {237, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1367 */ {238, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1368 */ {238, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1369 */ {238, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1370 */ {238, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1371 */ {238, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1372 */ {238, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1373 */ {238, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1374 */ {238, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1375 */ {239, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1376 */ {239, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1377 */ {239, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1378 */ {239, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1379 */ {239, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1380 */ {239, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1381 */ {239, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1382 */ {239, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1383 */ {240, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1384 */ {240, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1385 */ {240, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1386 */ {240, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1387 */ {240, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1388 */ {240, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1389 */ {240, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1390 */ {240, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1391 */ {241, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1392 */ {241, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1393 */ {241, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1394 */ {241, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1395 */ {241, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1396 */ {241, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1397 */ {241, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1398 */ {241, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1399 */ {242, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1400 */ {242, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1401 */ {242, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1402 */ {242, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1403 */ {242, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1404 */ {242, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1405 */ {242, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1406 */ {242, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1407 */ {243, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1408 */ {243, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1409 */ {243, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1410 */ {243, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1411 */ {243, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1412 */ {243, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1413 */ {243, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1414 */ {243, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1415 */ {244, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1416 */ {244, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1417 */ {244, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1418 */ {244, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1419 */ {244, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1420 */ {244, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1421 */ {244, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1422 */ {244, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1423 */ {245, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1424 */ {245, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1425 */ {245, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1426 */ {245, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1427 */ {245, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1428 */ {245, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1429 */ {245, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1430 */ {245, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1431 */ {246, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1432 */ {246, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1433 */ {246, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1434 */ {246, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1435 */ {246, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1436 */ {246, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1437 */ {246, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1438 */ {246, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1439 */ {247, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1440 */ {247, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1441 */ {247, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1442 */ {247, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1443 */ {247, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1444 */ {247, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1445 */ {247, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1446 */ {247, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1447 */ {248, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1448 */ {248, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1449 */ {248, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1450 */ {248, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1451 */ {248, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1452 */ {248, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1453 */ {248, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1454 */ {248, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1455 */ {249, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1456 */ {249, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1457 */ {249, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1458 */ {249, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1459 */ {249, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1460 */ {249, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1461 */ {249, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1462 */ {249, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1463 */ {250, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1464 */ {250, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1465 */ {250, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1466 */ {250, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1467 */ {250, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1468 */ {250, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1469 */ {250, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1470 */ {250, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1471 */ {251, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1472 */ {251, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1473 */ {251, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1474 */ {251, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1475 */ {251, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1476 */ {251, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1477 */ {251, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1478 */ {251, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1479 */ {252, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1480 */ {252, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1481 */ {252, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1482 */ {252, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1483 */ {252, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1484 */ {252, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1485 */ {252, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1486 */ {252, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1487 */ {253, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1488 */ {253, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1489 */ {253, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1490 */ {253, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1491 */ {253, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1492 */ {253, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1493 */ {253, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1494 */ {253, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1495 */ {254, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1496 */ {254, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1497 */ {254, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1498 */ {254, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1499 */ {254, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1500 */ {254, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1501 */ {254, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1502 */ {254, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1503 */ {255, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1504 */ {255, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1505 */ {255, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1506 */ {255, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1507 */ {255, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1508 */ {255, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1509 */ {255, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1510 */ {255, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1511 */ {256, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1512 */ {256, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1513 */ {256, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1514 */ {256, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1515 */ {256, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1516 */ {256, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1517 */ {256, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1518 */ {256, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1519 */ {257, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1520 */ {257, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1521 */ {257, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1522 */ {257, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1523 */ {257, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1524 */ {257, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1525 */ {257, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1526 */ {257, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1527 */ {258, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1528 */ {258, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1529 */ {258, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1530 */ {258, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1531 */ {258, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1532 */ {258, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1533 */ {258, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1534 */ {258, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1535 */ {259, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1536 */ {259, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1537 */ {259, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1538 */ {259, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1539 */ {259, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1540 */ {259, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1541 */ {259, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1542 */ {259, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1543 */ {260, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1544 */ {260, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1545 */ {260, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1546 */ {260, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1547 */ {260, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1548 */ {260, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1549 */ {260, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1550 */ {260, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1551 */ {261, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1552 */ {261, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1553 */ {261, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1554 */ {261, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1555 */ {261, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1556 */ {261, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1557 */ {261, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1558 */ {261, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1559 */ {262, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1560 */ {262, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1561 */ {262, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1562 */ {262, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1563 */ {262, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1564 */ {262, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1565 */ {262, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1566 */ {262, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1567 */ {263, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1568 */ {263, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1569 */ {263, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1570 */ {263, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1571 */ {263, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1572 */ {263, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1573 */ {263, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1574 */ {263, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1575 */ {264, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1576 */ {264, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1577 */ {264, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1578 */ {264, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1579 */ {264, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1580 */ {264, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1581 */ {264, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1582 */ {264, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1583 */ {265, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1584 */ {265, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1585 */ {265, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1586 */ {265, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1587 */ {265, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1588 */ {265, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1589 */ {265, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1590 */ {265, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1591 */ {266, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1592 */ {266, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1593 */ {266, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1594 */ {266, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1595 */ {266, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1596 */ {266, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1597 */ {266, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1598 */ {266, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1599 */ {267, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1600 */ {267, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1601 */ {267, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1602 */ {267, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1603 */ {267, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1604 */ {267, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1605 */ {267, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1606 */ {267, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1607 */ {268, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1608 */ {268, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1609 */ {268, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1610 */ {268, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1611 */ {268, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1612 */ {268, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1613 */ {268, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1614 */ {268, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1615 */ {269, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1616 */ {269, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1617 */ {269, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1618 */ {269, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1619 */ {269, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1620 */ {269, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1621 */ {269, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1622 */ {269, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1623 */ {270, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1624 */ {270, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1625 */ {270, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1626 */ {270, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1627 */ {270, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1628 */ {270, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1629 */ {270, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1630 */ {270, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1631 */ {271, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1632 */ {271, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1633 */ {271, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1634 */ {271, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1635 */ {271, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1636 */ {271, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1637 */ {271, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1638 */ {271, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1639 */ {272, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1640 */ {272, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1641 */ {272, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1642 */ {272, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1643 */ {272, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1644 */ {272, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1645 */ {272, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1646 */ {272, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1647 */ {273, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1648 */ {273, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1649 */ {273, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1650 */ {273, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1651 */ {273, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1652 */ {273, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1653 */ {273, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1654 */ {273, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1655 */ {274, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1656 */ {274, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1657 */ {274, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1658 */ {274, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1659 */ {274, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1660 */ {274, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1661 */ {274, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1662 */ {274, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1663 */ {275, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1664 */ {275, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1665 */ {275, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1666 */ {275, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1667 */ {275, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1668 */ {275, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1669 */ {275, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1670 */ {275, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1671 */ {276, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1672 */ {276, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1673 */ {276, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1674 */ {276, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1675 */ {276, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1676 */ {276, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1677 */ {276, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1678 */ {276, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1679 */ {277, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1680 */ {277, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1681 */ {277, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1682 */ {277, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1683 */ {277, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1684 */ {277, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1685 */ {277, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1686 */ {277, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1687 */ {278, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1688 */ {278, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1689 */ {278, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1690 */ {278, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1691 */ {278, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1692 */ {278, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1693 */ {278, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1694 */ {278, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1695 */ {279, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1696 */ {279, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1697 */ {279, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1698 */ {279, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1699 */ {279, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1700 */ {279, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1701 */ {279, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1702 */ {279, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1703 */ {280, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1704 */ {280, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1705 */ {280, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1706 */ {280, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1707 */ {280, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1708 */ {280, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1709 */ {280, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1710 */ {280, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1711 */ {281, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1712 */ {281, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1713 */ {281, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1714 */ {281, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1715 */ {281, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1716 */ {281, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1717 */ {281, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1718 */ {281, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1719 */ {282, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1720 */ {282, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1721 */ {282, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1722 */ {282, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1723 */ {282, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1724 */ {282, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1725 */ {282, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1726 */ {282, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1727 */ {283, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1728 */ {283, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1729 */ {283, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1730 */ {283, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1731 */ {283, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1732 */ {283, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1733 */ {283, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1734 */ {283, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1735 */ {284, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1736 */ {284, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1737 */ {284, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1738 */ {284, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1739 */ {284, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1740 */ {284, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1741 */ {284, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1742 */ {284, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1743 */ {285, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1744 */ {285, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1745 */ {285, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1746 */ {285, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1747 */ {285, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1748 */ {285, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1749 */ {285, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1750 */ {285, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1751 */ {286, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1752 */ {286, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1753 */ {286, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1754 */ {286, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1755 */ {286, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1756 */ {286, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1757 */ {286, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1758 */ {286, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1759 */ {287, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1760 */ {287, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1761 */ {287, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1762 */ {287, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1763 */ {287, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1764 */ {287, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1765 */ {287, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1766 */ {287, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1767 */ {288, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1768 */ {288, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1769 */ {288, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1770 */ {288, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1771 */ {288, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1772 */ {288, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1773 */ {288, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1774 */ {288, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1775 */ {289, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1776 */ {289, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1777 */ {289, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1778 */ {289, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1779 */ {289, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1780 */ {289, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1781 */ {289, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1782 */ {289, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1783 */ {290, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1784 */ {290, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1785 */ {290, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1786 */ {290, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1787 */ {290, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1788 */ {290, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1789 */ {290, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1790 */ {290, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1791 */ {291, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1792 */ {291, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1793 */ {291, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1794 */ {291, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1795 */ {291, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1796 */ {291, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1797 */ {291, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1798 */ {291, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1799 */ {292, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1800 */ {292, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1801 */ {292, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1802 */ {292, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1803 */ {292, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1804 */ {292, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1805 */ {292, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1806 */ {292, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1807 */ {293, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1808 */ {293, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1809 */ {293, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1810 */ {293, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1811 */ {293, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1812 */ {293, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1813 */ {293, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1814 */ {293, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1815 */ {294, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1816 */ {294, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1817 */ {294, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1818 */ {294, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1819 */ {294, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1820 */ {294, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1821 */ {294, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1822 */ {294, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1823 */ {295, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1824 */ {295, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1825 */ {295, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1826 */ {295, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1827 */ {295, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1828 */ {295, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1829 */ {295, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1830 */ {295, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1831 */ {296, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1832 */ {296, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1833 */ {296, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1834 */ {296, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1835 */ {296, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1836 */ {296, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1837 */ {296, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1838 */ {296, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1839 */ {297, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1840 */ {297, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1841 */ {297, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1842 */ {297, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1843 */ {297, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1844 */ {297, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1845 */ {297, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1846 */ {297, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1847 */ {298, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1848 */ {298, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1849 */ {298, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1850 */ {298, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1851 */ {298, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1852 */ {298, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1853 */ {298, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1854 */ {298, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1855 */ {298, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1856 */ {298, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1857 */ {298, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1858 */ {298, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1859 */ {298, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1860 */ {298, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1861 */ {298, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1862 */ {298, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1863 */ {299, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1864 */ {299, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1865 */ {299, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 1866 */ {299, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 1867 */ {299, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 1868 */ {299, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 1869 */ {299, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1870 */ {299, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1871 */ {299, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1872 */ {299, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1873 */ {299, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1874 */ {299, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1875 */ {299, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1876 */ {299, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1877 */ {299, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1878 */ {299, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1879 */ {300, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1880 */ {300, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1881 */ {300, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1882 */ {300, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1883 */ {300, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1884 */ {300, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1885 */ {300, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1886 */ {300, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1887 */ {300, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1888 */ {300, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1889 */ {300, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1890 */ {300, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1891 */ {300, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1892 */ {300, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1893 */ {300, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1894 */ {300, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1895 */ {301, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1896 */ {301, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1897 */ {301, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1898 */ {301, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1899 */ {301, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 1900 */ {301, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 1901 */ {301, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 1902 */ {301, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 1903 */ {301, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1904 */ {301, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1905 */ {301, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1906 */ {301, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1907 */ {301, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1908 */ {301, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1909 */ {301, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1910 */ {301, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1911 */ {302, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1912 */ {302, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1913 */ {302, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1914 */ {302, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1915 */ {302, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 1916 */ {302, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 1917 */ {302, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1918 */ {302, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1919 */ {302, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1920 */ {302, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1921 */ {302, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1922 */ {302, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1923 */ {302, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 1924 */ {302, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 1925 */ {302, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1926 */ {302, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1927 */ {303, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1928 */ {303, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1929 */ {303, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1930 */ {303, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1931 */ {303, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1932 */ {303, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1933 */ {303, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 1934 */ {303, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 1935 */ {303, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1936 */ {303, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1937 */ {303, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1938 */ {303, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1939 */ {303, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1940 */ {303, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1941 */ {303, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 1942 */ {303, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 1943 */ {304, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1944 */ {304, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1945 */ {304, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1946 */ {304, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1947 */ {304, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1948 */ {304, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1949 */ {304, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1950 */ {304, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1951 */ {304, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1952 */ {304, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1953 */ {304, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1954 */ {304, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1955 */ {304, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1956 */ {304, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1957 */ {304, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1958 */ {304, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1959 */ {305, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1960 */ {305, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1961 */ {305, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1962 */ {305, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1963 */ {305, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1964 */ {305, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1965 */ {305, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1966 */ {305, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1967 */ {305, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1968 */ {305, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1969 */ {305, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1970 */ {305, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1971 */ {305, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1972 */ {305, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1973 */ {305, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1974 */ {305, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1975 */ {306, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1976 */ {306, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1977 */ {306, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1978 */ {306, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1979 */ {306, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1980 */ {306, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1981 */ {306, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1982 */ {306, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1983 */ {306, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 1984 */ {306, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 1985 */ {306, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 1986 */ {306, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 1987 */ {306, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 1988 */ {306, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 1989 */ {306, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 1990 */ {306, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 1991 */ {307, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 1992 */ {307, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 1993 */ {307, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 1994 */ {307, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 1995 */ {307, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 1996 */ {307, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 1997 */ {307, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 1998 */ {307, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 1999 */ {307, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2000 */ {307, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2001 */ {307, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2002 */ {307, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2003 */ {307, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2004 */ {307, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2005 */ {307, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2006 */ {307, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2007 */ {308, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2008 */ {308, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2009 */ {308, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2010 */ {308, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2011 */ {308, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2012 */ {308, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2013 */ {308, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2014 */ {308, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2015 */ {308, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2016 */ {308, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2017 */ {308, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2018 */ {308, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2019 */ {308, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2020 */ {308, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2021 */ {308, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2022 */ {308, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2023 */ {309, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2024 */ {309, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2025 */ {309, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2026 */ {309, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2027 */ {309, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2028 */ {309, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2029 */ {309, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2030 */ {309, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2031 */ {309, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2032 */ {309, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2033 */ {309, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2034 */ {309, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2035 */ {309, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2036 */ {309, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2037 */ {309, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2038 */ {309, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2039 */ {310, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2040 */ {310, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2041 */ {310, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2042 */ {310, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2043 */ {310, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2044 */ {310, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2045 */ {310, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2046 */ {310, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2047 */ {310, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2048 */ {310, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2049 */ {310, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2050 */ {310, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2051 */ {310, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2052 */ {310, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2053 */ {310, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2054 */ {310, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2055 */ {311, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2056 */ {311, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2057 */ {311, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2058 */ {311, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2059 */ {311, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2060 */ {311, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2061 */ {311, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2062 */ {311, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2063 */ {311, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2064 */ {311, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2065 */ {311, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2066 */ {311, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2067 */ {311, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2068 */ {311, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2069 */ {311, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2070 */ {311, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2071 */ {312, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2072 */ {312, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2073 */ {312, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2074 */ {312, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2075 */ {312, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2076 */ {312, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2077 */ {312, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2078 */ {312, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2079 */ {312, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2080 */ {312, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2081 */ {312, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2082 */ {312, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2083 */ {312, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2084 */ {312, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2085 */ {312, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2086 */ {312, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2087 */ {313, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2088 */ {313, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2089 */ {313, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2090 */ {313, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2091 */ {313, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2092 */ {313, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2093 */ {313, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2094 */ {313, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2095 */ {313, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2096 */ {313, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2097 */ {313, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2098 */ {313, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2099 */ {313, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2100 */ {313, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2101 */ {313, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2102 */ {313, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2103 */ {314, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2104 */ {314, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2105 */ {314, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2106 */ {314, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2107 */ {314, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2108 */ {314, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2109 */ {314, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2110 */ {314, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2111 */ {314, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2112 */ {314, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2113 */ {314, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2114 */ {314, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2115 */ {314, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2116 */ {314, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2117 */ {314, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2118 */ {314, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2119 */ {315, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2120 */ {315, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2121 */ {315, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2122 */ {315, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2123 */ {315, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2124 */ {315, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2125 */ {315, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2126 */ {315, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2127 */ {315, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2128 */ {315, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2129 */ {315, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2130 */ {315, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2131 */ {315, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2132 */ {315, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2133 */ {315, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2134 */ {315, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2135 */ {316, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2136 */ {316, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2137 */ {316, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2138 */ {316, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2139 */ {316, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2140 */ {316, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2141 */ {316, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2142 */ {316, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2143 */ {316, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2144 */ {316, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2145 */ {316, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2146 */ {316, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2147 */ {316, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2148 */ {316, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2149 */ {316, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2150 */ {316, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2151 */ {317, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2152 */ {317, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2153 */ {317, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2154 */ {317, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2155 */ {317, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2156 */ {317, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2157 */ {317, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2158 */ {317, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2159 */ {317, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2160 */ {317, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2161 */ {317, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2162 */ {317, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2163 */ {317, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 2164 */ {317, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 2165 */ {317, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2166 */ {317, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2167 */ {318, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2168 */ {318, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2169 */ {318, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2170 */ {318, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2171 */ {318, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2172 */ {318, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2173 */ {318, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2174 */ {318, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2175 */ {318, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2176 */ {318, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2177 */ {318, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2178 */ {318, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2179 */ {318, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2180 */ {318, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2181 */ {318, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2182 */ {318, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2183 */ {319, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2184 */ {319, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2185 */ {319, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2186 */ {319, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2187 */ {319, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2188 */ {319, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2189 */ {319, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2190 */ {319, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2191 */ {319, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2192 */ {319, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2193 */ {319, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2194 */ {319, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2195 */ {319, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2196 */ {319, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2197 */ {319, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2198 */ {319, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2199 */ {320, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2200 */ {320, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2201 */ {320, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2202 */ {320, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2203 */ {320, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2204 */ {320, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2205 */ {320, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2206 */ {320, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2207 */ {320, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2208 */ {320, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2209 */ {320, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2210 */ {320, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2211 */ {320, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 2212 */ {320, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 2213 */ {320, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2214 */ {320, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2215 */ {321, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2216 */ {321, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2217 */ {321, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2218 */ {321, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2219 */ {321, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2220 */ {321, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2221 */ {321, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2222 */ {321, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2223 */ {321, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2224 */ {321, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2225 */ {321, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2226 */ {321, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2227 */ {321, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2228 */ {321, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2229 */ {321, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2230 */ {321, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2231 */ {322, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2232 */ {322, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2233 */ {322, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2234 */ {322, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2235 */ {322, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2236 */ {322, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2237 */ {322, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2238 */ {322, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2239 */ {322, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2240 */ {322, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2241 */ {322, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2242 */ {322, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2243 */ {322, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2244 */ {322, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2245 */ {322, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2246 */ {322, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2247 */ {323, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2248 */ {323, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2249 */ {323, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2250 */ {323, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2251 */ {323, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2252 */ {323, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2253 */ {323, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2254 */ {323, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2255 */ {323, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2256 */ {323, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2257 */ {323, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2258 */ {323, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2259 */ {323, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2260 */ {323, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2261 */ {323, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2262 */ {323, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2263 */ {324, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2264 */ {324, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2265 */ {324, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2266 */ {324, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2267 */ {324, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2268 */ {324, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2269 */ {324, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2270 */ {324, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2271 */ {324, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2272 */ {324, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2273 */ {324, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2274 */ {324, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2275 */ {324, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2276 */ {324, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2277 */ {324, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2278 */ {324, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2279 */ {325, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2280 */ {325, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2281 */ {325, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2282 */ {325, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2283 */ {325, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2284 */ {325, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2285 */ {325, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2286 */ {325, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2287 */ {325, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2288 */ {325, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2289 */ {325, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2290 */ {325, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2291 */ {325, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2292 */ {325, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2293 */ {325, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2294 */ {325, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2295 */ {326, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2296 */ {326, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2297 */ {326, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2298 */ {326, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2299 */ {326, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2300 */ {326, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2301 */ {326, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2302 */ {326, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2303 */ {326, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2304 */ {326, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2305 */ {326, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2306 */ {326, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2307 */ {326, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2308 */ {326, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2309 */ {326, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2310 */ {326, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2311 */ {327, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2312 */ {327, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2313 */ {327, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2314 */ {327, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2315 */ {327, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2316 */ {327, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2317 */ {327, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2318 */ {327, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2319 */ {327, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2320 */ {327, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2321 */ {327, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2322 */ {327, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2323 */ {327, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2324 */ {327, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2325 */ {327, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2326 */ {327, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2327 */ {328, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2328 */ {328, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2329 */ {328, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2330 */ {328, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2331 */ {328, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2332 */ {328, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2333 */ {328, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2334 */ {328, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2335 */ {328, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2336 */ {328, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2337 */ {328, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2338 */ {328, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2339 */ {328, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2340 */ {328, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2341 */ {328, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2342 */ {328, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2343 */ {329, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2344 */ {329, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2345 */ {329, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2346 */ {329, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2347 */ {329, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2348 */ {329, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2349 */ {329, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2350 */ {329, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2351 */ {329, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2352 */ {329, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2353 */ {329, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2354 */ {329, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2355 */ {329, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2356 */ {329, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2357 */ {329, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2358 */ {329, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2359 */ {330, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2360 */ {330, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2361 */ {330, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2362 */ {330, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2363 */ {330, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2364 */ {330, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2365 */ {330, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2366 */ {330, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2367 */ {330, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2368 */ {330, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2369 */ {330, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2370 */ {330, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2371 */ {330, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2372 */ {330, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2373 */ {330, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2374 */ {330, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2375 */ {331, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2376 */ {331, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2377 */ {331, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2378 */ {331, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2379 */ {331, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2380 */ {331, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2381 */ {331, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2382 */ {331, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2383 */ {331, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2384 */ {331, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2385 */ {331, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2386 */ {331, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2387 */ {331, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2388 */ {331, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2389 */ {331, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2390 */ {331, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2391 */ {332, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2392 */ {332, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2393 */ {332, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2394 */ {332, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2395 */ {332, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2396 */ {332, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2397 */ {332, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2398 */ {332, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2399 */ {332, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2400 */ {332, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2401 */ {332, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2402 */ {332, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2403 */ {332, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2404 */ {332, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2405 */ {332, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2406 */ {332, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2407 */ {333, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2408 */ {333, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2409 */ {333, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2410 */ {333, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2411 */ {333, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2412 */ {333, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2413 */ {333, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2414 */ {333, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2415 */ {333, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2416 */ {333, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2417 */ {333, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2418 */ {333, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2419 */ {333, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2420 */ {333, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2421 */ {333, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2422 */ {333, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2423 */ {334, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2424 */ {334, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2425 */ {334, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2426 */ {334, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2427 */ {334, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2428 */ {334, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2429 */ {334, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2430 */ {334, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2431 */ {334, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2432 */ {334, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2433 */ {334, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2434 */ {334, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2435 */ {334, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2436 */ {334, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2437 */ {334, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2438 */ {334, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2439 */ {334, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2440 */ {334, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2441 */ {334, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2442 */ {334, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2443 */ {334, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2444 */ {334, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2445 */ {334, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2446 */ {334, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2447 */ {334, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2448 */ {334, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2449 */ {334, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2450 */ {334, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2451 */ {334, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2452 */ {334, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2453 */ {334, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2454 */ {334, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2455 */ {335, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2456 */ {335, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2457 */ {335, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2458 */ {335, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2459 */ {335, -1, 0, 0, 0,-1, 0, 0, 0,-1, 3, 3, 3 }, /* 2460 */ {335, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 3 }, /* 2461 */ {335, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 3, 3 }, /* 2462 */ {335, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 3 }, /* 2463 */ {335, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2464 */ {335, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2465 */ {335, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2466 */ {335, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2467 */ {335, -1, 0, 0, 0,-1, 0, 0, 0,-1, 3, 9, 9 }, /* 2468 */ {335, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 9 }, /* 2469 */ {335, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 9, 9 }, /* 2470 */ {335, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 9 }, /* 2471 */ {335, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2472 */ {335, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2473 */ {335, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2474 */ {335, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2475 */ {335, -1, 0, 0, 0,-1, 0, 0, 0,-1, 9, 3, 9 }, /* 2476 */ {335, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 9 }, /* 2477 */ {335, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 3, 9 }, /* 2478 */ {335, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 9 }, /* 2479 */ {335, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2480 */ {335, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2481 */ {335, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2482 */ {335, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2483 */ {335, -1, 0, 0, 0,-1, 0, 0, 0,-1, 9, 9, 3 }, /* 2484 */ {335, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 3 }, /* 2485 */ {335, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 9, 3 }, /* 2486 */ {335, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 3 }, /* 2487 */ {336, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2488 */ {336, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2489 */ {336, -1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 0 }, /* 2490 */ {336, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 0 }, /* 2491 */ {336, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 3, 3 }, /* 2492 */ {336, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 3 }, /* 2493 */ {336, -1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 0, 3 }, /* 2494 */ {336, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 0, 3 }, /* 2495 */ {336, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2496 */ {336, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2497 */ {336, -1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 6 }, /* 2498 */ {336, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 6 }, /* 2499 */ {336, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 9, 9 }, /* 2500 */ {336, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 9 }, /* 2501 */ {336, -1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 6, 9 }, /* 2502 */ {336, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 6, 9 }, /* 2503 */ {336, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2504 */ {336, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2505 */ {336, -1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 6 }, /* 2506 */ {336, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 6 }, /* 2507 */ {336, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 3, 9 }, /* 2508 */ {336, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 3, 9 }, /* 2509 */ {336, -1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 0, 9 }, /* 2510 */ {336, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 0, 9 }, /* 2511 */ {336, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2512 */ {336, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2513 */ {336, -1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 0 }, /* 2514 */ {336, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 0 }, /* 2515 */ {336, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 9, 3 }, /* 2516 */ {336, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 9, 3 }, /* 2517 */ {336, -1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 6, 3 }, /* 2518 */ {336, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 6, 3 }, /* 2519 */ {337, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2520 */ {337, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2521 */ {337, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2522 */ {337, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2523 */ {337, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2524 */ {337, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2525 */ {337, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2526 */ {337, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2527 */ {337, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2528 */ {337, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2529 */ {337, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2530 */ {337, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2531 */ {337, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2532 */ {337, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2533 */ {337, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2534 */ {337, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2535 */ {338, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2536 */ {338, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2537 */ {338, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2538 */ {338, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2539 */ {338, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2540 */ {338, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2541 */ {338, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2542 */ {338, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2543 */ {338, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2544 */ {338, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2545 */ {338, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2546 */ {338, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2547 */ {338, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2548 */ {338, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2549 */ {338, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2550 */ {338, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2551 */ {339, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2552 */ {339, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2553 */ {339, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2554 */ {339, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2555 */ {339, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2556 */ {339, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2557 */ {339, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2558 */ {339, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2559 */ {339, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2560 */ {339, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2561 */ {339, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2562 */ {339, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2563 */ {339, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2564 */ {339, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2565 */ {339, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2566 */ {339, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2567 */ {340, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2568 */ {340, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2569 */ {340, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2570 */ {340, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2571 */ {340, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2572 */ {340, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2573 */ {340, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2574 */ {340, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2575 */ {340, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2576 */ {340, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2577 */ {340, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2578 */ {340, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2579 */ {340, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2580 */ {340, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2581 */ {340, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2582 */ {340, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2583 */ {341, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2584 */ {341, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2585 */ {341, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2586 */ {341, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2587 */ {341, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2588 */ {341, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2589 */ {341, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2590 */ {341, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2591 */ {341, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2592 */ {341, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2593 */ {341, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2594 */ {341, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2595 */ {341, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2596 */ {341, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2597 */ {341, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2598 */ {341, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2599 */ {342, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2600 */ {342, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2601 */ {342, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2602 */ {342, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2603 */ {342, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2604 */ {342, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2605 */ {342, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2606 */ {342, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2607 */ {342, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2608 */ {342, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2609 */ {342, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2610 */ {342, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2611 */ {342, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2612 */ {342, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2613 */ {342, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2614 */ {342, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2615 */ {343, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2616 */ {343, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2617 */ {343, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2618 */ {343, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2619 */ {343, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2620 */ {343, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2621 */ {343, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2622 */ {343, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2623 */ {343, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2624 */ {343, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2625 */ {343, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2626 */ {343, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2627 */ {343, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2628 */ {343, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2629 */ {343, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2630 */ {343, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2631 */ {344, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2632 */ {344, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2633 */ {344, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2634 */ {344, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2635 */ {344, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 2636 */ {344, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 2637 */ {344, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2638 */ {344, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2639 */ {344, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2640 */ {344, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2641 */ {344, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2642 */ {344, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2643 */ {344, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2644 */ {344, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2645 */ {344, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2646 */ {344, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2647 */ {345, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2648 */ {345, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2649 */ {345, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2650 */ {345, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2651 */ {345, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2652 */ {345, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2653 */ {345, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2654 */ {345, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2655 */ {345, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2656 */ {345, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2657 */ {345, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2658 */ {345, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2659 */ {345, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2660 */ {345, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2661 */ {345, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2662 */ {345, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2663 */ {346, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2664 */ {346, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2665 */ {346, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2666 */ {346, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2667 */ {346, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 2668 */ {346, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 2669 */ {346, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2670 */ {346, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2671 */ {346, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2672 */ {346, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2673 */ {346, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2674 */ {346, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2675 */ {346, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 2676 */ {346, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 2677 */ {346, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2678 */ {346, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2679 */ {347, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2680 */ {347, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2681 */ {347, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2682 */ {347, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2683 */ {347, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 2684 */ {347, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 2685 */ {347, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 2686 */ {347, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 2687 */ {347, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2688 */ {347, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2689 */ {347, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2690 */ {347, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2691 */ {347, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 2692 */ {347, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 2693 */ {347, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 2694 */ {347, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 2695 */ {348, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2696 */ {348, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2697 */ {348, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2698 */ {348, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2699 */ {348, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2700 */ {348, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2701 */ {348, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 2702 */ {348, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2703 */ {348, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2704 */ {348, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2705 */ {348, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2706 */ {348, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2707 */ {348, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2708 */ {348, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2709 */ {348, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2710 */ {348, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2711 */ {349, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2712 */ {349, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2713 */ {349, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2714 */ {349, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2715 */ {350, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2716 */ {350, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 3 }, /* 2717 */ {350, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2718 */ {350, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 9 }, /* 2719 */ {351, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2720 */ {351, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2721 */ {351, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2722 */ {351, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2723 */ {352, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2724 */ {352, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 9 }, /* 2725 */ {352, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2726 */ {352, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 3 }, /* 2727 */ {353, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2728 */ {353, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2729 */ {353, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2730 */ {353, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2731 */ {353, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2732 */ {353, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2733 */ {353, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2734 */ {353, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2735 */ {354, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2736 */ {354, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 2737 */ {354, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2738 */ {354, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 2739 */ {354, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2740 */ {354, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 2741 */ {354, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2742 */ {354, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 2743 */ {355, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2744 */ {355, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2745 */ {355, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2746 */ {355, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2747 */ {356, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2748 */ {356, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2749 */ {356, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2750 */ {356, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2751 */ {356, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2752 */ {356, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2753 */ {356, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2754 */ {356, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2755 */ {357, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2756 */ {357, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2757 */ {357, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2758 */ {357, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2759 */ {357, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2760 */ {357, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2761 */ {357, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2762 */ {357, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2763 */ {358, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2764 */ {358, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2765 */ {358, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2766 */ {358, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 2767 */ {358, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2768 */ {358, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2769 */ {358, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2770 */ {358, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 2771 */ {359, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2772 */ {359, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 2773 */ {359, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2774 */ {359, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 2775 */ {359, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2776 */ {359, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2777 */ {359, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2778 */ {359, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2779 */ {360, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2780 */ {360, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2781 */ {360, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 2782 */ {360, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 2783 */ {360, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2784 */ {360, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2785 */ {360, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 2786 */ {360, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 2787 */ {361, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2788 */ {361, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2789 */ {361, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2790 */ {361, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2791 */ {361, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2792 */ {361, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2793 */ {361, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2794 */ {361, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2795 */ {362, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2796 */ {362, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2797 */ {362, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 2798 */ {362, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 2799 */ {362, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2800 */ {362, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2801 */ {362, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 2802 */ {362, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 2803 */ {363, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2804 */ {363, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2805 */ {363, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2806 */ {363, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2807 */ {363, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2808 */ {363, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2809 */ {363, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2810 */ {363, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2811 */ {363, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2812 */ {363, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2813 */ {363, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2814 */ {363, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2815 */ {363, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2816 */ {363, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2817 */ {363, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2818 */ {363, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2819 */ {364, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2820 */ {364, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 2821 */ {364, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2822 */ {364, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 2823 */ {364, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 3 }, /* 2824 */ {364, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2825 */ {364, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 9 }, /* 2826 */ {364, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2827 */ {364, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2828 */ {364, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 2829 */ {364, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2830 */ {364, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 2831 */ {364, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 9 }, /* 2832 */ {364, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2833 */ {364, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 3 }, /* 2834 */ {364, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2835 */ {365, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2836 */ {365, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2837 */ {365, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 3 }, /* 2838 */ {365, 0, 1, 0,-1, 0, 0, 0, 0,-1, 9, 3, 3 }, /* 2839 */ {365, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 2840 */ {365, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 2841 */ {365, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 9 }, /* 2842 */ {365, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 9 }, /* 2843 */ {365, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2844 */ {365, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2845 */ {365, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 2846 */ {365, 0, 1, 0,-1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 2847 */ {365, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 2848 */ {365, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 2849 */ {365, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 2850 */ {365, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 2851 */ {366, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2852 */ {366, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2853 */ {366, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2854 */ {366, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2855 */ {366, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2856 */ {366, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2857 */ {366, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2858 */ {366, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2859 */ {367, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2860 */ {367, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 2861 */ {367, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2862 */ {367, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 2863 */ {367, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 2864 */ {367, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2865 */ {367, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 2866 */ {367, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2867 */ {368, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2868 */ {368, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 3 }, /* 2869 */ {368, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2870 */ {368, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 9 }, /* 2871 */ {368, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2872 */ {368, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 3 }, /* 2873 */ {368, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2874 */ {368, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 9 }, /* 2875 */ {369, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2876 */ {369, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 3 }, /* 2877 */ {369, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2878 */ {369, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 9 }, /* 2879 */ {369, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 9 }, /* 2880 */ {369, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 2881 */ {369, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 3 }, /* 2882 */ {369, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2883 */ {370, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2884 */ {370, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2885 */ {370, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2886 */ {370, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2887 */ {370, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2888 */ {370, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 2889 */ {370, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2890 */ {370, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 2891 */ {371, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2892 */ {371, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2893 */ {371, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2894 */ {371, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2895 */ {371, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2896 */ {371, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2897 */ {371, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2898 */ {371, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2899 */ {372, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2900 */ {372, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 9 }, /* 2901 */ {372, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2902 */ {372, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 3 }, /* 2903 */ {372, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 2904 */ {372, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 9 }, /* 2905 */ {372, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2906 */ {372, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 3 }, /* 2907 */ {373, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2908 */ {373, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 9 }, /* 2909 */ {373, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2910 */ {373, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 3 }, /* 2911 */ {373, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 3 }, /* 2912 */ {373, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 2913 */ {373, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 9 }, /* 2914 */ {373, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2915 */ {374, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2916 */ {374, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2917 */ {374, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2918 */ {374, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2919 */ {374, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 2920 */ {374, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2921 */ {374, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 2922 */ {374, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2923 */ {374, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2924 */ {374, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2925 */ {374, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2926 */ {374, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2927 */ {374, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 2928 */ {374, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2929 */ {374, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 2930 */ {374, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2931 */ {375, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2932 */ {375, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 2933 */ {375, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2934 */ {375, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 2935 */ {375, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 3 }, /* 2936 */ {375, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2937 */ {375, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 9 }, /* 2938 */ {375, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2939 */ {375, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2940 */ {375, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 2941 */ {375, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2942 */ {375, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 2943 */ {375, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 9 }, /* 2944 */ {375, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 2945 */ {375, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 3 }, /* 2946 */ {375, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 2947 */ {376, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2948 */ {376, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2949 */ {376, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2950 */ {376, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2951 */ {376, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2952 */ {376, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2953 */ {376, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2954 */ {376, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2955 */ {377, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2956 */ {377, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2957 */ {377, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2958 */ {377, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2959 */ {377, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 2960 */ {377, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 2961 */ {377, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 2962 */ {377, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 2963 */ {378, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2964 */ {378, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2965 */ {378, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2966 */ {378, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2967 */ {378, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2968 */ {378, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2969 */ {378, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2970 */ {378, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2971 */ {379, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2972 */ {379, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2973 */ {379, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2974 */ {379, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2975 */ {379, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2976 */ {379, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2977 */ {379, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2978 */ {379, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2979 */ {380, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2980 */ {380, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2981 */ {380, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2982 */ {380, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2983 */ {380, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 2984 */ {380, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2985 */ {380, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 2986 */ {380, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2987 */ {381, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2988 */ {381, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2989 */ {381, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2990 */ {381, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 2991 */ {381, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 2992 */ {381, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2993 */ {381, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 2994 */ {381, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 2995 */ {382, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 2996 */ {382, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2997 */ {382, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 2998 */ {382, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 2999 */ {382, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3000 */ {382, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3001 */ {382, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3002 */ {382, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3003 */ {383, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3004 */ {383, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3005 */ {383, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3006 */ {383, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3007 */ {383, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3008 */ {383, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3009 */ {383, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3010 */ {383, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3011 */ {384, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3012 */ {384, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3013 */ {384, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3014 */ {384, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3015 */ {384, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3016 */ {384, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3017 */ {384, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3018 */ {384, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3019 */ {384, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3020 */ {384, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3021 */ {384, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3022 */ {384, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3023 */ {384, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3024 */ {384, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3025 */ {384, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3026 */ {384, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3027 */ {385, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3028 */ {385, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3029 */ {385, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3030 */ {385, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3031 */ {385, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3032 */ {385, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3033 */ {385, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3034 */ {385, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3035 */ {385, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3036 */ {385, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3037 */ {385, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3038 */ {385, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3039 */ {385, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3040 */ {385, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3041 */ {385, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3042 */ {385, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3043 */ {386, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3044 */ {386, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3045 */ {386, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3046 */ {386, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3047 */ {386, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3048 */ {386, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3049 */ {386, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3050 */ {386, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3051 */ {386, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3052 */ {386, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3053 */ {386, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3054 */ {386, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3055 */ {386, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3056 */ {386, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3057 */ {386, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3058 */ {386, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3059 */ {387, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3060 */ {387, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3061 */ {387, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3062 */ {387, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3063 */ {387, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3064 */ {387, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 9 }, /* 3065 */ {387, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3066 */ {387, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 3 }, /* 3067 */ {387, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3068 */ {387, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3069 */ {387, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3070 */ {387, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3071 */ {387, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3072 */ {387, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 3 }, /* 3073 */ {387, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3074 */ {387, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 9 }, /* 3075 */ {388, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3076 */ {388, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3077 */ {388, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3078 */ {388, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3079 */ {388, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3080 */ {388, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3081 */ {388, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3082 */ {388, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3083 */ {389, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3084 */ {389, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3085 */ {389, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3086 */ {389, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3087 */ {389, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 3088 */ {389, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3089 */ {389, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 3090 */ {389, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3091 */ {390, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3092 */ {390, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3093 */ {390, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3094 */ {390, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3095 */ {390, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3096 */ {390, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3097 */ {390, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3098 */ {390, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3099 */ {391, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3100 */ {391, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3101 */ {391, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3102 */ {391, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3103 */ {391, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3104 */ {391, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3105 */ {391, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3106 */ {391, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3107 */ {392, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3108 */ {392, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3109 */ {392, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3110 */ {392, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3111 */ {392, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3112 */ {392, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3113 */ {392, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3114 */ {392, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3115 */ {393, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3116 */ {393, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3117 */ {393, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3118 */ {393, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3119 */ {393, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3120 */ {393, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3121 */ {393, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3122 */ {393, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3123 */ {394, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3124 */ {394, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3125 */ {394, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3126 */ {394, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3127 */ {394, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3128 */ {394, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3129 */ {394, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3130 */ {394, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3131 */ {395, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3132 */ {395, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3133 */ {395, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3134 */ {395, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3135 */ {395, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3136 */ {395, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3137 */ {395, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3138 */ {395, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3139 */ {396, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3140 */ {396, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3141 */ {396, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3142 */ {396, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3143 */ {396, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3144 */ {396, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3145 */ {396, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3146 */ {396, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3147 */ {396, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3148 */ {396, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3149 */ {396, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3150 */ {396, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3151 */ {396, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3152 */ {396, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3153 */ {396, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3154 */ {396, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3155 */ {397, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3156 */ {397, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3157 */ {397, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3158 */ {397, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3159 */ {397, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3160 */ {397, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3161 */ {397, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3162 */ {397, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3163 */ {397, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3164 */ {397, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3165 */ {397, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3166 */ {397, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3167 */ {397, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3168 */ {397, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3169 */ {397, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3170 */ {397, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3171 */ {398, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3172 */ {398, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3173 */ {398, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3174 */ {398, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3175 */ {398, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3176 */ {398, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3177 */ {398, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3178 */ {398, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3179 */ {398, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3180 */ {398, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3181 */ {398, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3182 */ {398, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3183 */ {398, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3184 */ {398, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3185 */ {398, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3186 */ {398, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3187 */ {399, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3188 */ {399, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3189 */ {399, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3190 */ {399, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3191 */ {399, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 3 }, /* 3192 */ {399, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3193 */ {399, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 3 }, /* 3194 */ {399, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3195 */ {399, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3196 */ {399, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3197 */ {399, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3198 */ {399, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3199 */ {399, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 9 }, /* 3200 */ {399, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3201 */ {399, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 9 }, /* 3202 */ {399, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3203 */ {400, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3204 */ {400, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3205 */ {400, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3206 */ {400, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3207 */ {400, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3208 */ {400, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3209 */ {400, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3210 */ {400, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3211 */ {400, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3212 */ {400, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3213 */ {400, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3214 */ {400, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3215 */ {400, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3216 */ {400, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3217 */ {400, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3218 */ {400, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3219 */ {401, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3220 */ {401, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3221 */ {401, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3222 */ {401, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3223 */ {401, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3224 */ {401, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3225 */ {401, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3226 */ {401, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3227 */ {401, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 3228 */ {401, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3229 */ {401, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3230 */ {401, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3231 */ {401, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 3232 */ {401, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3233 */ {401, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3234 */ {401, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3235 */ {402, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3236 */ {402, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3237 */ {402, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3238 */ {402, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3239 */ {402, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3240 */ {402, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3241 */ {402, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3242 */ {402, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3243 */ {402, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3244 */ {402, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3245 */ {402, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3246 */ {402, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3247 */ {402, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3248 */ {402, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3249 */ {402, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3250 */ {402, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3251 */ {403, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3252 */ {403, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3253 */ {403, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 3254 */ {403, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 3255 */ {403, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3256 */ {403, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3257 */ {403, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 3258 */ {403, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 3259 */ {403, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 3260 */ {403, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 3261 */ {403, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3262 */ {403, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3263 */ {403, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 3264 */ {403, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 3265 */ {403, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3266 */ {403, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3267 */ {404, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3268 */ {404, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3269 */ {404, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3270 */ {404, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3271 */ {404, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3272 */ {404, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3273 */ {404, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3274 */ {404, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3275 */ {404, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3276 */ {404, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3277 */ {404, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3278 */ {404, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3279 */ {404, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3280 */ {404, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3281 */ {404, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3282 */ {404, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3283 */ {405, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3284 */ {405, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3285 */ {405, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 3286 */ {405, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 3287 */ {405, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3288 */ {405, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3289 */ {405, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 3290 */ {405, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 3291 */ {405, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 3292 */ {405, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 3293 */ {405, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3294 */ {405, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3295 */ {405, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 3296 */ {405, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 3297 */ {405, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3298 */ {405, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3299 */ {406, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3300 */ {406, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3301 */ {406, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3302 */ {406, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3303 */ {406, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3304 */ {406, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3305 */ {406, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3306 */ {406, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3307 */ {406, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3308 */ {406, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3309 */ {406, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3310 */ {406, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3311 */ {406, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3312 */ {406, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3313 */ {406, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3314 */ {406, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3315 */ {407, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3316 */ {407, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3317 */ {407, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3318 */ {407, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3319 */ {407, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3320 */ {407, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3321 */ {407, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3322 */ {407, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3323 */ {407, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3324 */ {407, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3325 */ {407, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3326 */ {407, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3327 */ {407, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3328 */ {407, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3329 */ {407, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3330 */ {407, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3331 */ {408, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3332 */ {408, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3333 */ {408, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3334 */ {408, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3335 */ {408, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3336 */ {408, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3337 */ {408, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3338 */ {408, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3339 */ {408, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3340 */ {408, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3341 */ {408, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3342 */ {408, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3343 */ {408, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3344 */ {408, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3345 */ {408, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3346 */ {408, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3347 */ {409, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3348 */ {409, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3349 */ {409, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 3350 */ {409, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 3351 */ {409, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3352 */ {409, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3353 */ {409, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 3354 */ {409, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 3355 */ {409, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 3356 */ {409, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 3357 */ {409, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3358 */ {409, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3359 */ {409, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 3360 */ {409, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 3361 */ {409, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3362 */ {409, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3363 */ {410, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3364 */ {410, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3365 */ {410, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3366 */ {410, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3367 */ {410, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3368 */ {410, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3369 */ {410, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3370 */ {410, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3371 */ {410, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3372 */ {410, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3373 */ {410, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3374 */ {410, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3375 */ {410, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3376 */ {410, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3377 */ {410, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3378 */ {410, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3379 */ {411, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3380 */ {411, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3381 */ {411, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 3382 */ {411, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 3383 */ {411, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3384 */ {411, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3385 */ {411, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 3386 */ {411, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 3387 */ {411, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 3388 */ {411, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 3389 */ {411, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3390 */ {411, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3391 */ {411, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 3392 */ {411, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 3393 */ {411, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3394 */ {411, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3395 */ {412, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3396 */ {412, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3397 */ {412, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3398 */ {412, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3399 */ {412, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3400 */ {412, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3401 */ {412, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3402 */ {412, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3403 */ {412, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3404 */ {412, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3405 */ {412, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3406 */ {412, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3407 */ {412, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3408 */ {412, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3409 */ {412, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3410 */ {412, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3411 */ {413, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3412 */ {413, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3413 */ {413, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3414 */ {413, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3415 */ {413, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3416 */ {413, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3417 */ {413, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3418 */ {413, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3419 */ {413, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 3420 */ {413, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3421 */ {413, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3422 */ {413, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3423 */ {413, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 3424 */ {413, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3425 */ {413, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3426 */ {413, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3427 */ {414, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3428 */ {414, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3429 */ {414, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3430 */ {414, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3431 */ {414, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 3432 */ {414, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3433 */ {414, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 3434 */ {414, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3435 */ {414, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3436 */ {414, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3437 */ {414, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3438 */ {414, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3439 */ {414, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3440 */ {414, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3441 */ {414, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3442 */ {414, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3443 */ {415, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3444 */ {415, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3445 */ {415, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 3446 */ {415, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 3447 */ {415, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3448 */ {415, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3449 */ {415, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 3450 */ {415, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 3451 */ {415, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 0 }, /* 3452 */ {415, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0 }, /* 3453 */ {415, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3454 */ {415, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3455 */ {415, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 3456 */ {415, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 3457 */ {415, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3458 */ {415, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3459 */ {416, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3460 */ {416, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3461 */ {416, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3462 */ {416, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3463 */ {416, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3464 */ {416, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3465 */ {416, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3466 */ {416, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3467 */ {416, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3468 */ {416, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3469 */ {416, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3470 */ {416, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3471 */ {416, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3472 */ {416, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3473 */ {416, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3474 */ {416, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3475 */ {417, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3476 */ {417, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3477 */ {417, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 3478 */ {417, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 3479 */ {417, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3480 */ {417, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3481 */ {417, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 3482 */ {417, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 3483 */ {417, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 3484 */ {417, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 3485 */ {417, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3486 */ {417, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3487 */ {417, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 3488 */ {417, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 3489 */ {417, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3490 */ {417, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3491 */ {418, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3492 */ {418, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3493 */ {418, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3494 */ {418, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3495 */ {418, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3496 */ {418, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3497 */ {418, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3498 */ {418, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3499 */ {418, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3500 */ {418, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3501 */ {418, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3502 */ {418, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3503 */ {418, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3504 */ {418, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3505 */ {418, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3506 */ {418, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3507 */ {419, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3508 */ {419, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3509 */ {419, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3510 */ {419, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3511 */ {419, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3512 */ {419, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3513 */ {419, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3514 */ {419, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3515 */ {419, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3516 */ {419, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3517 */ {419, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3518 */ {419, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3519 */ {419, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3520 */ {419, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3521 */ {419, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3522 */ {419, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3523 */ {420, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3524 */ {420, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3525 */ {420, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3526 */ {420, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3527 */ {420, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3528 */ {420, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3529 */ {420, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3530 */ {420, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3531 */ {420, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3532 */ {420, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3533 */ {420, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3534 */ {420, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3535 */ {420, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3536 */ {420, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3537 */ {420, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3538 */ {420, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3539 */ {421, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3540 */ {421, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3541 */ {421, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 3542 */ {421, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 3543 */ {421, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3544 */ {421, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3545 */ {421, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 3546 */ {421, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 3547 */ {421, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 0 }, /* 3548 */ {421, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0 }, /* 3549 */ {421, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3550 */ {421, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3551 */ {421, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 3552 */ {421, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 3553 */ {421, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3554 */ {421, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3555 */ {422, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3556 */ {422, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3557 */ {422, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3558 */ {422, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3559 */ {422, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3560 */ {422, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3561 */ {422, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3562 */ {422, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3563 */ {422, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3564 */ {422, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3565 */ {422, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3566 */ {422, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3567 */ {422, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3568 */ {422, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3569 */ {422, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3570 */ {422, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3571 */ {423, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3572 */ {423, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3573 */ {423, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 3574 */ {423, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 3575 */ {423, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3576 */ {423, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3577 */ {423, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 3578 */ {423, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 3579 */ {423, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 3580 */ {423, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 3581 */ {423, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3582 */ {423, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3583 */ {423, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 3584 */ {423, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 3585 */ {423, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3586 */ {423, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3587 */ {424, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3588 */ {424, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3589 */ {424, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3590 */ {424, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3591 */ {424, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3592 */ {424, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3593 */ {424, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3594 */ {424, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3595 */ {424, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3596 */ {424, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3597 */ {424, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3598 */ {424, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3599 */ {424, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3600 */ {424, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3601 */ {424, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3602 */ {424, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3603 */ {424, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3604 */ {424, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3605 */ {424, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3606 */ {424, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3607 */ {424, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3608 */ {424, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3609 */ {424, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3610 */ {424, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3611 */ {424, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3612 */ {424, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3613 */ {424, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3614 */ {424, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3615 */ {424, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3616 */ {424, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3617 */ {424, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3618 */ {424, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3619 */ {425, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3620 */ {425, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3621 */ {425, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3622 */ {425, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3623 */ {425, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3624 */ {425, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3625 */ {425, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3626 */ {425, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3627 */ {425, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 3628 */ {425, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3629 */ {425, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3630 */ {425, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3631 */ {425, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 3632 */ {425, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3633 */ {425, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3634 */ {425, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3635 */ {425, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3636 */ {425, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3637 */ {425, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3638 */ {425, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3639 */ {425, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3640 */ {425, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 3641 */ {425, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3642 */ {425, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3643 */ {425, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3644 */ {425, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3645 */ {425, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3646 */ {425, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3647 */ {425, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 3648 */ {425, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3649 */ {425, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3650 */ {425, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 3651 */ {426, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3652 */ {426, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3653 */ {426, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3654 */ {426, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3655 */ {426, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 3 }, /* 3656 */ {426, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3657 */ {426, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 9 }, /* 3658 */ {426, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3659 */ {426, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 3 }, /* 3660 */ {426, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3661 */ {426, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 9 }, /* 3662 */ {426, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3663 */ {426, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3664 */ {426, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3665 */ {426, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3666 */ {426, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3667 */ {426, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3668 */ {426, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3669 */ {426, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3670 */ {426, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3671 */ {426, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 9 }, /* 3672 */ {426, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3673 */ {426, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 3 }, /* 3674 */ {426, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3675 */ {426, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 9 }, /* 3676 */ {426, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3677 */ {426, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 3 }, /* 3678 */ {426, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3679 */ {426, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3680 */ {426, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3681 */ {426, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3682 */ {426, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3683 */ {427, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3684 */ {427, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3685 */ {427, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 3 }, /* 3686 */ {427, 0, 1, 0,-1, 0, 0, 0, 0,-1, 3, 9, 3 }, /* 3687 */ {427, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 3688 */ {427, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 3689 */ {427, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 9 }, /* 3690 */ {427, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 9 }, /* 3691 */ {427, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3692 */ {427, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3693 */ {427, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 3, 9 }, /* 3694 */ {427, 0, 1, 0, 1, 0, 0, 0, 0, 1, 3, 3, 9 }, /* 3695 */ {427, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 3696 */ {427, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 3697 */ {427, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 3 }, /* 3698 */ {427, 0,-1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 3 }, /* 3699 */ {427, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3700 */ {427, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3701 */ {427, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 3702 */ {427, 0, 1, 0,-1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 3703 */ {427, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 3704 */ {427, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 3705 */ {427, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 3706 */ {427, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 3707 */ {427, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3708 */ {427, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3709 */ {427, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 3710 */ {427, 0, 1, 0, 1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 3711 */ {427, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 3712 */ {427, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 3713 */ {427, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 3714 */ {427, 0,-1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 3715 */ {428, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3716 */ {428, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3717 */ {428, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 3718 */ {428, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3719 */ {428, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 3 }, /* 3720 */ {428, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3721 */ {428, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 9 }, /* 3722 */ {428, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3723 */ {428, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 3 }, /* 3724 */ {428, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3725 */ {428, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 9 }, /* 3726 */ {428, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3727 */ {428, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3728 */ {428, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 3 }, /* 3729 */ {428, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3730 */ {428, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 9 }, /* 3731 */ {428, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3732 */ {428, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 9 }, /* 3733 */ {428, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3734 */ {428, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 3 }, /* 3735 */ {428, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 9 }, /* 3736 */ {428, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3737 */ {428, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 3 }, /* 3738 */ {428, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 3739 */ {428, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 9 }, /* 3740 */ {428, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 3741 */ {428, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 3 }, /* 3742 */ {428, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3743 */ {428, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3744 */ {428, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 9 }, /* 3745 */ {428, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 3746 */ {428, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 3 }, /* 3747 */ {429, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3748 */ {429, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3749 */ {429, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 3 }, /* 3750 */ {429, 0, 1, 0,-1, 0, 0, 0, 0,-1, 3, 9, 3 }, /* 3751 */ {429, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 3752 */ {429, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 3753 */ {429, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 9 }, /* 3754 */ {429, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 9 }, /* 3755 */ {429, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 3756 */ {429, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3757 */ {429, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 3758 */ {429, 0, 1, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 3759 */ {429, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 3760 */ {429, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 3761 */ {429, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 3762 */ {429, 0,-1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 3763 */ {429, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 3764 */ {429, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 3765 */ {429, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 3766 */ {429, 0, 1, 0,-1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 3767 */ {429, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 3768 */ {429, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 3769 */ {429, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 3770 */ {429, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 3771 */ {429, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 3772 */ {429, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 3773 */ {429, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 9, 9 }, /* 3774 */ {429, 0, 1, 0, 1, 0, 0, 0, 0, 1, 9, 9, 9 }, /* 3775 */ {429, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 3776 */ {429, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 3777 */ {429, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 3 }, /* 3778 */ {429, 0,-1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 3 }, /* 3779 */ {430, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3780 */ {430, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3781 */ {430, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3782 */ {431, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3783 */ {431, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 4 }, /* 3784 */ {431, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 3785 */ {432, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3786 */ {432, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 8 }, /* 3787 */ {432, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 3788 */ {433, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3789 */ {433, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3790 */ {433, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3791 */ {433, 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 3792 */ {433, 0,-1, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 3793 */ {433, -1, 1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 3794 */ {433, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 3795 */ {433, 0,-1, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 3796 */ {433, -1, 1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 3797 */ {434, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3798 */ {434, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 3799 */ {434, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 3800 */ {435, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3801 */ {435, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3802 */ {435, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3803 */ {435, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3804 */ {435, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3805 */ {435, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3806 */ {436, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3807 */ {436, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3808 */ {436, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3809 */ {436, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3810 */ {436, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3811 */ {436, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3812 */ {436, 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 3813 */ {436, -1, 0, 0, 0,-1, 0, 0, 0,-1, 8, 4, 4 }, /* 3814 */ {436, 0,-1, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 3815 */ {436, 0, 1, 0,-1, 1, 0, 0, 0,-1, 8, 4, 4 }, /* 3816 */ {436, -1, 1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 3817 */ {436, 1,-1, 0, 1, 0, 0, 0, 0,-1, 8, 4, 4 }, /* 3818 */ {436, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 3819 */ {436, -1, 0, 0, 0,-1, 0, 0, 0,-1, 4, 8, 8 }, /* 3820 */ {436, 0,-1, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 3821 */ {436, 0, 1, 0,-1, 1, 0, 0, 0,-1, 4, 8, 8 }, /* 3822 */ {436, -1, 1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 3823 */ {436, 1,-1, 0, 1, 0, 0, 0, 0,-1, 4, 8, 8 }, /* 3824 */ {437, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3825 */ {437, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3826 */ {437, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 3827 */ {437, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 3828 */ {437, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 3829 */ {437, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 3830 */ {438, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3831 */ {438, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3832 */ {438, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3833 */ {438, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3834 */ {438, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3835 */ {438, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3836 */ {439, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3837 */ {439, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3838 */ {439, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3839 */ {439, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3840 */ {439, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3841 */ {439, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3842 */ {440, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3843 */ {440, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 4 }, /* 3844 */ {440, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 3845 */ {440, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 8 }, /* 3846 */ {440, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 4 }, /* 3847 */ {440, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3848 */ {441, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3849 */ {441, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 4 }, /* 3850 */ {441, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 3851 */ {441, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3852 */ {441, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 8 }, /* 3853 */ {441, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 4 }, /* 3854 */ {442, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3855 */ {442, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 8 }, /* 3856 */ {442, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 3857 */ {442, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 4 }, /* 3858 */ {442, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 8 }, /* 3859 */ {442, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3860 */ {443, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3861 */ {443, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 8 }, /* 3862 */ {443, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 3863 */ {443, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3864 */ {443, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 4 }, /* 3865 */ {443, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 8 }, /* 3866 */ {444, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3867 */ {444, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3868 */ {444, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3869 */ {444, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3870 */ {444, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3871 */ {444, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3872 */ {444, 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 3873 */ {444, 0,-1, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 3874 */ {444, -1, 1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 3875 */ {444, 0, 1, 0, 1, 0, 0, 0, 0,-1, 8, 4, 4 }, /* 3876 */ {444, 1,-1, 0, 0,-1, 0, 0, 0,-1, 8, 4, 4 }, /* 3877 */ {444, -1, 0, 0,-1, 1, 0, 0, 0,-1, 8, 4, 4 }, /* 3878 */ {444, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 3879 */ {444, 0,-1, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 3880 */ {444, -1, 1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 3881 */ {444, 0, 1, 0, 1, 0, 0, 0, 0,-1, 4, 8, 8 }, /* 3882 */ {444, 1,-1, 0, 0,-1, 0, 0, 0,-1, 4, 8, 8 }, /* 3883 */ {444, -1, 0, 0,-1, 1, 0, 0, 0,-1, 4, 8, 8 }, /* 3884 */ {445, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3885 */ {445, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 3886 */ {445, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 3887 */ {445, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3888 */ {445, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 3889 */ {445, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 3890 */ {446, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3891 */ {446, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3892 */ {446, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3893 */ {446, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3894 */ {446, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3895 */ {446, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3896 */ {447, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3897 */ {447, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3898 */ {447, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3899 */ {447, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3900 */ {447, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3901 */ {447, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3902 */ {448, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3903 */ {448, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3904 */ {448, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3905 */ {448, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3906 */ {448, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3907 */ {448, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3908 */ {449, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3909 */ {449, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3910 */ {449, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3911 */ {449, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3912 */ {449, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3913 */ {449, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3914 */ {450, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3915 */ {450, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3916 */ {450, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3917 */ {450, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3918 */ {450, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3919 */ {450, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3920 */ {450, 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 3921 */ {450, 0,-1, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 3922 */ {450, -1, 1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 3923 */ {450, 0,-1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 3924 */ {450, -1, 1, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 3925 */ {450, 1, 0, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 3926 */ {450, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 3927 */ {450, 0,-1, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 3928 */ {450, -1, 1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 3929 */ {450, 0,-1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 3930 */ {450, -1, 1, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 3931 */ {450, 1, 0, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 3932 */ {451, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3933 */ {451, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 3934 */ {451, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 3935 */ {451, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3936 */ {451, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 3937 */ {451, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 3938 */ {452, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3939 */ {452, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3940 */ {452, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3941 */ {452, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3942 */ {452, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3943 */ {452, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3944 */ {452, 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 3945 */ {452, 0,-1, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 3946 */ {452, -1, 1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 3947 */ {452, 0,-1, 0,-1, 0, 0, 0, 0, 1, 8, 4,10 }, /* 3948 */ {452, -1, 1, 0, 0, 1, 0, 0, 0, 1, 8, 4,10 }, /* 3949 */ {452, 1, 0, 0, 1,-1, 0, 0, 0, 1, 8, 4,10 }, /* 3950 */ {452, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 3951 */ {452, 0,-1, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 3952 */ {452, -1, 1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 3953 */ {452, 0,-1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 2 }, /* 3954 */ {452, -1, 1, 0, 0, 1, 0, 0, 0, 1, 4, 8, 2 }, /* 3955 */ {452, 1, 0, 0, 1,-1, 0, 0, 0, 1, 4, 8, 2 }, /* 3956 */ {453, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3957 */ {453, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 3958 */ {453, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 3959 */ {453, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 3960 */ {453, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 3961 */ {453, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 3962 */ {454, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3963 */ {454, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3964 */ {454, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3965 */ {454, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3966 */ {454, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3967 */ {454, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3968 */ {454, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3969 */ {454, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3970 */ {454, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3971 */ {454, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3972 */ {454, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3973 */ {454, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3974 */ {455, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3975 */ {455, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3976 */ {455, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3977 */ {455, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3978 */ {455, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3979 */ {455, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3980 */ {455, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 3981 */ {455, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 3982 */ {455, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 3983 */ {455, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 3984 */ {455, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 3985 */ {455, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 3986 */ {456, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3987 */ {456, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3988 */ {456, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3989 */ {456, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3990 */ {456, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3991 */ {456, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3992 */ {456, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 3993 */ {456, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 3994 */ {456, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 3995 */ {456, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3996 */ {456, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 3997 */ {456, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 3998 */ {457, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 3999 */ {457, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4000 */ {457, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4001 */ {457, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4002 */ {457, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4003 */ {457, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4004 */ {457, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4005 */ {457, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4006 */ {457, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4007 */ {457, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4008 */ {457, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4009 */ {457, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4010 */ {458, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4011 */ {458, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4012 */ {458, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4013 */ {458, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4014 */ {458, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4015 */ {458, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4016 */ {458, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4017 */ {458, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4018 */ {458, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4019 */ {458, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4020 */ {458, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4021 */ {458, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4022 */ {458, 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 4023 */ {458, -1, 0, 0, 0,-1, 0, 0, 0,-1, 8, 4, 4 }, /* 4024 */ {458, 0,-1, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 4025 */ {458, 0, 1, 0,-1, 1, 0, 0, 0,-1, 8, 4, 4 }, /* 4026 */ {458, -1, 1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 4027 */ {458, 1,-1, 0, 1, 0, 0, 0, 0,-1, 8, 4, 4 }, /* 4028 */ {458, 0, 1, 0, 1, 0, 0, 0, 0,-1, 8, 4, 4 }, /* 4029 */ {458, 0,-1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 4030 */ {458, 1,-1, 0, 0,-1, 0, 0, 0,-1, 8, 4, 4 }, /* 4031 */ {458, -1, 1, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 4032 */ {458, -1, 0, 0,-1, 1, 0, 0, 0,-1, 8, 4, 4 }, /* 4033 */ {458, 1, 0, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 4034 */ {458, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 4035 */ {458, -1, 0, 0, 0,-1, 0, 0, 0,-1, 4, 8, 8 }, /* 4036 */ {458, 0,-1, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 4037 */ {458, 0, 1, 0,-1, 1, 0, 0, 0,-1, 4, 8, 8 }, /* 4038 */ {458, -1, 1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 4039 */ {458, 1,-1, 0, 1, 0, 0, 0, 0,-1, 4, 8, 8 }, /* 4040 */ {458, 0, 1, 0, 1, 0, 0, 0, 0,-1, 4, 8, 8 }, /* 4041 */ {458, 0,-1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 4042 */ {458, 1,-1, 0, 0,-1, 0, 0, 0,-1, 4, 8, 8 }, /* 4043 */ {458, -1, 1, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 4044 */ {458, -1, 0, 0,-1, 1, 0, 0, 0,-1, 4, 8, 8 }, /* 4045 */ {458, 1, 0, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 4046 */ {459, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4047 */ {459, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4048 */ {459, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4049 */ {459, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4050 */ {459, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4051 */ {459, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4052 */ {459, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4053 */ {459, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4054 */ {459, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 4055 */ {459, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 4056 */ {459, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 4057 */ {459, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 4058 */ {460, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4059 */ {460, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4060 */ {460, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4061 */ {460, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4062 */ {460, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4063 */ {460, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4064 */ {460, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4065 */ {460, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4066 */ {460, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4067 */ {460, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4068 */ {460, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4069 */ {460, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4070 */ {460, 1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 4, 4 }, /* 4071 */ {460, -1, 0, 0, 0,-1, 0, 0, 0,-1, 8, 4, 4 }, /* 4072 */ {460, 0,-1, 0, 1,-1, 0, 0, 0, 1, 8, 4, 4 }, /* 4073 */ {460, 0, 1, 0,-1, 1, 0, 0, 0,-1, 8, 4, 4 }, /* 4074 */ {460, -1, 1, 0,-1, 0, 0, 0, 0, 1, 8, 4, 4 }, /* 4075 */ {460, 1,-1, 0, 1, 0, 0, 0, 0,-1, 8, 4, 4 }, /* 4076 */ {460, 0, 1, 0, 1, 0, 0, 0, 0,-1, 8, 4,10 }, /* 4077 */ {460, 0,-1, 0,-1, 0, 0, 0, 0, 1, 8, 4,10 }, /* 4078 */ {460, 1,-1, 0, 0,-1, 0, 0, 0,-1, 8, 4,10 }, /* 4079 */ {460, -1, 1, 0, 0, 1, 0, 0, 0, 1, 8, 4,10 }, /* 4080 */ {460, -1, 0, 0,-1, 1, 0, 0, 0,-1, 8, 4,10 }, /* 4081 */ {460, 1, 0, 0, 1,-1, 0, 0, 0, 1, 8, 4,10 }, /* 4082 */ {460, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 8, 8 }, /* 4083 */ {460, -1, 0, 0, 0,-1, 0, 0, 0,-1, 4, 8, 8 }, /* 4084 */ {460, 0,-1, 0, 1,-1, 0, 0, 0, 1, 4, 8, 8 }, /* 4085 */ {460, 0, 1, 0,-1, 1, 0, 0, 0,-1, 4, 8, 8 }, /* 4086 */ {460, -1, 1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 8 }, /* 4087 */ {460, 1,-1, 0, 1, 0, 0, 0, 0,-1, 4, 8, 8 }, /* 4088 */ {460, 0, 1, 0, 1, 0, 0, 0, 0,-1, 4, 8, 2 }, /* 4089 */ {460, 0,-1, 0,-1, 0, 0, 0, 0, 1, 4, 8, 2 }, /* 4090 */ {460, 1,-1, 0, 0,-1, 0, 0, 0,-1, 4, 8, 2 }, /* 4091 */ {460, -1, 1, 0, 0, 1, 0, 0, 0, 1, 4, 8, 2 }, /* 4092 */ {460, -1, 0, 0,-1, 1, 0, 0, 0,-1, 4, 8, 2 }, /* 4093 */ {460, 1, 0, 0, 1,-1, 0, 0, 0, 1, 4, 8, 2 }, /* 4094 */ {461, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4095 */ {461, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4096 */ {461, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4097 */ {461, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4098 */ {461, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4099 */ {461, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4100 */ {461, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 4101 */ {461, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 4102 */ {461, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 4103 */ {461, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 4104 */ {461, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 4105 */ {461, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 4106 */ {462, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4107 */ {462, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4108 */ {462, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4109 */ {462, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4110 */ {462, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4111 */ {462, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4112 */ {463, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4113 */ {463, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2 }, /* 4114 */ {463, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 4 }, /* 4115 */ {463, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4116 */ {463, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 4117 */ {463, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0,10 }, /* 4118 */ {464, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4119 */ {464, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0,10 }, /* 4120 */ {464, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 8 }, /* 4121 */ {464, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4122 */ {464, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 4123 */ {464, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 2 }, /* 4124 */ {465, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4125 */ {465, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 4126 */ {465, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 8 }, /* 4127 */ {465, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4128 */ {465, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 4129 */ {465, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 8 }, /* 4130 */ {466, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4131 */ {466, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 4132 */ {466, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 4 }, /* 4133 */ {466, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4134 */ {466, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 4135 */ {466, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 4 }, /* 4136 */ {467, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4137 */ {467, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4138 */ {467, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4139 */ {467, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4140 */ {467, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4141 */ {467, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4142 */ {468, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4143 */ {468, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4144 */ {468, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4145 */ {468, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4146 */ {468, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4147 */ {468, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4148 */ {469, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4149 */ {469, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4150 */ {469, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4151 */ {469, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4152 */ {469, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4153 */ {469, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4154 */ {469, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4155 */ {469, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4156 */ {469, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4157 */ {469, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4158 */ {469, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4159 */ {469, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4160 */ {470, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4161 */ {470, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4162 */ {470, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4163 */ {470, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4164 */ {470, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4165 */ {470, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4166 */ {470, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4167 */ {470, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4168 */ {470, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4169 */ {470, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4170 */ {470, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4171 */ {470, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4172 */ {471, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4173 */ {471, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4174 */ {471, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4175 */ {471, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4176 */ {471, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4177 */ {471, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4178 */ {471, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4179 */ {471, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4180 */ {471, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4181 */ {471, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4182 */ {471, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4183 */ {471, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4184 */ {472, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4185 */ {472, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2 }, /* 4186 */ {472, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 4 }, /* 4187 */ {472, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4188 */ {472, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 4189 */ {472, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0,10 }, /* 4190 */ {472, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0,10 }, /* 4191 */ {472, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 8 }, /* 4192 */ {472, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4193 */ {472, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 4 }, /* 4194 */ {472, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 2 }, /* 4195 */ {472, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4196 */ {473, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4197 */ {473, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0,10 }, /* 4198 */ {473, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 8 }, /* 4199 */ {473, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4200 */ {473, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 4201 */ {473, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 2 }, /* 4202 */ {473, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 2 }, /* 4203 */ {473, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 4 }, /* 4204 */ {473, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4205 */ {473, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 8 }, /* 4206 */ {473, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0,10 }, /* 4207 */ {473, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4208 */ {474, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4209 */ {474, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 4210 */ {474, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 8 }, /* 4211 */ {474, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4212 */ {474, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 4 }, /* 4213 */ {474, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 8 }, /* 4214 */ {474, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 8 }, /* 4215 */ {474, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 4 }, /* 4216 */ {474, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4217 */ {474, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 8 }, /* 4218 */ {474, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 4 }, /* 4219 */ {474, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4220 */ {475, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4221 */ {475, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 4222 */ {475, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 4 }, /* 4223 */ {475, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4224 */ {475, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 8 }, /* 4225 */ {475, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 4 }, /* 4226 */ {475, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 4 }, /* 4227 */ {475, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 8 }, /* 4228 */ {475, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4229 */ {475, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 4 }, /* 4230 */ {475, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 8 }, /* 4231 */ {475, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4232 */ {476, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4233 */ {476, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4234 */ {476, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4235 */ {476, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4236 */ {476, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4237 */ {476, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4238 */ {476, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4239 */ {476, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4240 */ {476, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4241 */ {476, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4242 */ {476, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4243 */ {476, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4244 */ {477, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4245 */ {477, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4246 */ {477, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4247 */ {477, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4248 */ {477, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4249 */ {477, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4250 */ {477, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4251 */ {477, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4252 */ {477, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4253 */ {477, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4254 */ {477, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4255 */ {477, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4256 */ {478, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4257 */ {478, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4258 */ {478, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4259 */ {478, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4260 */ {478, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4261 */ {478, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4262 */ {478, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4263 */ {478, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4264 */ {478, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4265 */ {478, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4266 */ {478, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4267 */ {478, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4268 */ {479, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4269 */ {479, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4270 */ {479, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4271 */ {479, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4272 */ {479, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4273 */ {479, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4274 */ {479, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4275 */ {479, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4276 */ {479, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4277 */ {479, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4278 */ {479, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4279 */ {479, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4280 */ {480, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4281 */ {480, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4282 */ {480, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4283 */ {480, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4284 */ {480, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4285 */ {480, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4286 */ {480, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4287 */ {480, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4288 */ {480, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4289 */ {480, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4290 */ {480, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4291 */ {480, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4292 */ {481, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4293 */ {481, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4294 */ {481, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4295 */ {481, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4296 */ {481, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4297 */ {481, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4298 */ {481, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4299 */ {481, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4300 */ {481, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4301 */ {481, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4302 */ {481, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4303 */ {481, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4304 */ {482, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4305 */ {482, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4306 */ {482, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4307 */ {482, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4308 */ {482, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4309 */ {482, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4310 */ {482, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4311 */ {482, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4312 */ {482, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4313 */ {482, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4314 */ {482, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4315 */ {482, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4316 */ {483, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4317 */ {483, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4318 */ {483, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4319 */ {483, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4320 */ {483, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4321 */ {483, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4322 */ {483, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4323 */ {483, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4324 */ {483, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4325 */ {483, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4326 */ {483, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4327 */ {483, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4328 */ {484, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4329 */ {484, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4330 */ {484, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4331 */ {484, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4332 */ {484, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4333 */ {484, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4334 */ {484, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4335 */ {484, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4336 */ {484, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4337 */ {484, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4338 */ {484, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4339 */ {484, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4340 */ {485, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4341 */ {485, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4342 */ {485, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4343 */ {485, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4344 */ {485, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4345 */ {485, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4346 */ {485, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4347 */ {485, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4348 */ {485, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4349 */ {485, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4350 */ {485, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4351 */ {485, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4352 */ {485, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4353 */ {485, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4354 */ {485, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4355 */ {485, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4356 */ {485, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4357 */ {485, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4358 */ {485, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4359 */ {485, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4360 */ {485, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4361 */ {485, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4362 */ {485, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4363 */ {485, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4364 */ {486, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4365 */ {486, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4366 */ {486, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4367 */ {486, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4368 */ {486, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4369 */ {486, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4370 */ {486, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4371 */ {486, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4372 */ {486, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4373 */ {486, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4374 */ {486, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4375 */ {486, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4376 */ {486, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4377 */ {486, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4378 */ {486, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4379 */ {486, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4380 */ {486, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4381 */ {486, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4382 */ {486, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4383 */ {486, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4384 */ {486, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4385 */ {486, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4386 */ {486, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4387 */ {486, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4388 */ {487, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4389 */ {487, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4390 */ {487, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4391 */ {487, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4392 */ {487, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4393 */ {487, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4394 */ {487, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4395 */ {487, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4396 */ {487, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4397 */ {487, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4398 */ {487, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4399 */ {487, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4400 */ {487, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4401 */ {487, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4402 */ {487, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4403 */ {487, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4404 */ {487, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4405 */ {487, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4406 */ {487, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4407 */ {487, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4408 */ {487, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4409 */ {487, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4410 */ {487, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4411 */ {487, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4412 */ {488, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4413 */ {488, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4414 */ {488, 1,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4415 */ {488, -1, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4416 */ {488, 0,-1, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4417 */ {488, 0, 1, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4418 */ {488, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4419 */ {488, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4420 */ {488, -1, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4421 */ {488, 1,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4422 */ {488, 0, 1, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4423 */ {488, 0,-1, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4424 */ {488, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 4425 */ {488, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 4426 */ {488, -1, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4427 */ {488, 1, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4428 */ {488, -1, 1, 0, 0, 1, 0, 0, 0,-1, 0, 0, 6 }, /* 4429 */ {488, 1,-1, 0, 0,-1, 0, 0, 0, 1, 0, 0, 6 }, /* 4430 */ {488, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 4431 */ {488, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 4432 */ {488, 1, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4433 */ {488, -1, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4434 */ {488, 1,-1, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4435 */ {488, -1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4436 */ {489, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4437 */ {489, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4438 */ {489, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4439 */ {489, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4440 */ {489, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4441 */ {489, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4442 */ {489, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4443 */ {489, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4444 */ {489, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4445 */ {489, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4446 */ {489, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4447 */ {489, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4448 */ {490, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4449 */ {490, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4450 */ {490, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4451 */ {490, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4452 */ {490, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4453 */ {490, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4454 */ {490, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4455 */ {490, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4456 */ {490, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4457 */ {490, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4458 */ {490, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4459 */ {490, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4460 */ {490, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 4461 */ {490, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 4462 */ {490, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 4463 */ {490, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 4464 */ {490, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4465 */ {490, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4466 */ {490, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4467 */ {490, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4468 */ {490, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 4469 */ {490, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 4470 */ {490, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 4471 */ {490, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 4472 */ {490, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 4473 */ {490, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 4474 */ {490, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 4475 */ {490, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 4476 */ {490, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4477 */ {490, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4478 */ {490, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4479 */ {490, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4480 */ {490, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 4481 */ {490, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 4482 */ {490, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 4483 */ {490, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 4484 */ {490, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 4485 */ {490, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 4486 */ {490, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 4487 */ {490, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 4488 */ {490, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4489 */ {490, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4490 */ {490, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4491 */ {490, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4492 */ {490, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 4493 */ {490, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 4494 */ {490, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 4495 */ {490, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 4496 */ {491, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4497 */ {491, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4498 */ {491, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4499 */ {491, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4500 */ {491, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4501 */ {491, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4502 */ {491, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4503 */ {491, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4504 */ {491, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4505 */ {491, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4506 */ {491, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4507 */ {491, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4508 */ {491, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 4509 */ {491, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 4510 */ {491, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 4511 */ {491, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 4512 */ {491, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4513 */ {491, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 4514 */ {491, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 4515 */ {491, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4516 */ {491, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 4517 */ {491, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 4518 */ {491, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 4519 */ {491, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 4520 */ {492, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4521 */ {492, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 4522 */ {492, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 4523 */ {492, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 4524 */ {492, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4525 */ {492, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4526 */ {492, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4527 */ {492, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4528 */ {492, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4529 */ {492, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 4530 */ {492, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 4531 */ {492, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 4532 */ {493, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4533 */ {493, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 4534 */ {493, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4535 */ {493, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 4536 */ {493, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4537 */ {493, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 6 }, /* 4538 */ {493, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 0 }, /* 4539 */ {493, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4540 */ {493, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4541 */ {493, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 0 }, /* 4542 */ {493, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 0 }, /* 4543 */ {493, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 4544 */ {493, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 4545 */ {493, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 4546 */ {493, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 4547 */ {493, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 4548 */ {493, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4549 */ {493, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4550 */ {493, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4551 */ {493, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 0 }, /* 4552 */ {493, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 4553 */ {493, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 4554 */ {493, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 4555 */ {493, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 6 }, /* 4556 */ {494, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4557 */ {494, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4558 */ {494, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4559 */ {494, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4560 */ {494, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4561 */ {494, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4562 */ {494, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4563 */ {494, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4564 */ {494, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4565 */ {494, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4566 */ {494, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4567 */ {494, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4568 */ {494, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4569 */ {494, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4570 */ {494, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4571 */ {494, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4572 */ {494, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4573 */ {494, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4574 */ {494, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4575 */ {494, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4576 */ {494, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4577 */ {494, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4578 */ {494, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4579 */ {494, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4580 */ {495, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4581 */ {495, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4582 */ {495, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4583 */ {495, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4584 */ {495, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4585 */ {495, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4586 */ {495, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4587 */ {495, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4588 */ {495, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4589 */ {495, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4590 */ {495, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4591 */ {495, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4592 */ {495, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 4593 */ {495, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 4594 */ {495, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 4595 */ {495, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 4596 */ {495, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 4597 */ {495, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4598 */ {495, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4599 */ {495, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 4600 */ {495, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 4601 */ {495, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 4602 */ {495, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 4603 */ {495, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 4604 */ {496, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4605 */ {496, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4606 */ {496, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 4607 */ {496, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 4608 */ {496, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 4609 */ {496, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 4610 */ {496, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 4611 */ {496, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 4612 */ {496, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4613 */ {496, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4614 */ {496, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4615 */ {496, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4616 */ {496, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4617 */ {496, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4618 */ {496, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4619 */ {496, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4620 */ {496, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4621 */ {496, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4622 */ {496, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 4623 */ {496, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 4624 */ {496, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 4625 */ {496, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 4626 */ {496, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 4627 */ {496, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 4628 */ {497, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4629 */ {497, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4630 */ {497, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4631 */ {497, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4632 */ {497, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4633 */ {497, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4634 */ {497, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4635 */ {497, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4636 */ {497, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4637 */ {497, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4638 */ {497, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4639 */ {497, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4640 */ {497, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4641 */ {497, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4642 */ {497, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4643 */ {497, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4644 */ {497, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4645 */ {497, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4646 */ {497, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4647 */ {497, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4648 */ {497, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4649 */ {497, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4650 */ {497, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4651 */ {497, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4652 */ {497, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 4653 */ {497, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 4654 */ {497, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 4655 */ {497, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 4656 */ {497, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 4657 */ {497, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 4658 */ {497, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 4659 */ {497, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 4660 */ {497, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4661 */ {497, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4662 */ {497, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4663 */ {497, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4664 */ {497, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4665 */ {497, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4666 */ {497, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4667 */ {497, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4668 */ {497, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 4669 */ {497, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 4670 */ {497, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 4671 */ {497, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 4672 */ {497, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 4673 */ {497, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 4674 */ {497, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 4675 */ {497, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 4676 */ {497, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 4677 */ {497, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 4678 */ {497, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 4679 */ {497, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 4680 */ {497, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 4681 */ {497, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 4682 */ {497, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 4683 */ {497, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 4684 */ {497, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4685 */ {497, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4686 */ {497, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4687 */ {497, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4688 */ {497, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4689 */ {497, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4690 */ {497, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4691 */ {497, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4692 */ {497, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 4693 */ {497, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 4694 */ {497, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 4695 */ {497, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 4696 */ {497, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 4697 */ {497, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 4698 */ {497, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 4699 */ {497, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 4700 */ {497, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 4701 */ {497, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 4702 */ {497, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 4703 */ {497, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 4704 */ {497, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 4705 */ {497, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 4706 */ {497, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 4707 */ {497, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 4708 */ {497, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4709 */ {497, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4710 */ {497, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4711 */ {497, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4712 */ {497, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4713 */ {497, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4714 */ {497, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4715 */ {497, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4716 */ {497, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 4717 */ {497, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 4718 */ {497, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 4719 */ {497, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 4720 */ {497, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 4721 */ {497, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 4722 */ {497, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 4723 */ {497, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 4724 */ {498, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4725 */ {498, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4726 */ {498, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4727 */ {498, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4728 */ {498, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4729 */ {498, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4730 */ {498, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4731 */ {498, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4732 */ {498, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4733 */ {498, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4734 */ {498, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4735 */ {498, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4736 */ {498, -1, 0, 0, 0,-1, 0, 0, 0,-1, 3, 3, 3 }, /* 4737 */ {498, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 3 }, /* 4738 */ {498, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 3, 3 }, /* 4739 */ {498, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 3 }, /* 4740 */ {498, 0, 0,-1,-1, 0, 0, 0,-1, 0, 3, 3, 3 }, /* 4741 */ {498, 0, 0,-1, 1, 0, 0, 0, 1, 0, 3, 3, 3 }, /* 4742 */ {498, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 3, 3 }, /* 4743 */ {498, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 3, 3 }, /* 4744 */ {498, 0,-1, 0, 0, 0,-1,-1, 0, 0, 3, 3, 3 }, /* 4745 */ {498, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 3, 3 }, /* 4746 */ {498, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 3, 3 }, /* 4747 */ {498, 0,-1, 0, 0, 0, 1, 1, 0, 0, 3, 3, 3 }, /* 4748 */ {498, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 4749 */ {498, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 4750 */ {498, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 4751 */ {498, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 4752 */ {498, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4753 */ {498, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4754 */ {498, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4755 */ {498, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4756 */ {498, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 4757 */ {498, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 4758 */ {498, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 4759 */ {498, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 4760 */ {498, -1, 0, 0, 0,-1, 0, 0, 0,-1, 3, 9, 9 }, /* 4761 */ {498, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 9 }, /* 4762 */ {498, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 9, 9 }, /* 4763 */ {498, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 9 }, /* 4764 */ {498, 0, 0,-1,-1, 0, 0, 0,-1, 0, 3, 9, 9 }, /* 4765 */ {498, 0, 0,-1, 1, 0, 0, 0, 1, 0, 3, 9, 9 }, /* 4766 */ {498, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 9, 9 }, /* 4767 */ {498, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 9, 9 }, /* 4768 */ {498, 0,-1, 0, 0, 0,-1,-1, 0, 0, 3, 9, 9 }, /* 4769 */ {498, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 9, 9 }, /* 4770 */ {498, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 9, 9 }, /* 4771 */ {498, 0,-1, 0, 0, 0, 1, 1, 0, 0, 3, 9, 9 }, /* 4772 */ {498, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 4773 */ {498, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 4774 */ {498, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 4775 */ {498, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 4776 */ {498, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4777 */ {498, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4778 */ {498, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4779 */ {498, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4780 */ {498, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 4781 */ {498, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 4782 */ {498, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 4783 */ {498, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 4784 */ {498, -1, 0, 0, 0,-1, 0, 0, 0,-1, 9, 3, 9 }, /* 4785 */ {498, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 9 }, /* 4786 */ {498, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 3, 9 }, /* 4787 */ {498, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 9 }, /* 4788 */ {498, 0, 0,-1,-1, 0, 0, 0,-1, 0, 9, 3, 9 }, /* 4789 */ {498, 0, 0,-1, 1, 0, 0, 0, 1, 0, 9, 3, 9 }, /* 4790 */ {498, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 3, 9 }, /* 4791 */ {498, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 3, 9 }, /* 4792 */ {498, 0,-1, 0, 0, 0,-1,-1, 0, 0, 9, 3, 9 }, /* 4793 */ {498, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 3, 9 }, /* 4794 */ {498, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 3, 9 }, /* 4795 */ {498, 0,-1, 0, 0, 0, 1, 1, 0, 0, 9, 3, 9 }, /* 4796 */ {498, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 4797 */ {498, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 4798 */ {498, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 4799 */ {498, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 4800 */ {498, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4801 */ {498, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4802 */ {498, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4803 */ {498, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4804 */ {498, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 4805 */ {498, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 4806 */ {498, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 4807 */ {498, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 4808 */ {498, -1, 0, 0, 0,-1, 0, 0, 0,-1, 9, 9, 3 }, /* 4809 */ {498, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 3 }, /* 4810 */ {498, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 9, 3 }, /* 4811 */ {498, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 3 }, /* 4812 */ {498, 0, 0,-1,-1, 0, 0, 0,-1, 0, 9, 9, 3 }, /* 4813 */ {498, 0, 0,-1, 1, 0, 0, 0, 1, 0, 9, 9, 3 }, /* 4814 */ {498, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 9, 3 }, /* 4815 */ {498, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 9, 3 }, /* 4816 */ {498, 0,-1, 0, 0, 0,-1,-1, 0, 0, 9, 9, 3 }, /* 4817 */ {498, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 9, 3 }, /* 4818 */ {498, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 9, 3 }, /* 4819 */ {498, 0,-1, 0, 0, 0, 1, 1, 0, 0, 9, 9, 3 }, /* 4820 */ {499, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4821 */ {499, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4822 */ {499, -1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 0 }, /* 4823 */ {499, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 0 }, /* 4824 */ {499, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 3, 3 }, /* 4825 */ {499, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 3 }, /* 4826 */ {499, -1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 0, 3 }, /* 4827 */ {499, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 0, 3 }, /* 4828 */ {499, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4829 */ {499, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4830 */ {499, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 3, 3 }, /* 4831 */ {499, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 3, 3 }, /* 4832 */ {499, 0, 0,-1, 1, 0, 0, 0,-1, 0, 3, 0, 3 }, /* 4833 */ {499, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 0, 3 }, /* 4834 */ {499, 0, 0,-1,-1, 0, 0, 0, 1, 0, 3, 3, 0 }, /* 4835 */ {499, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 3, 0 }, /* 4836 */ {499, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4837 */ {499, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4838 */ {499, 0,-1, 0, 0, 0, 1,-1, 0, 0, 3, 0, 3 }, /* 4839 */ {499, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 0, 3 }, /* 4840 */ {499, 0,-1, 0, 0, 0,-1, 1, 0, 0, 3, 3, 0 }, /* 4841 */ {499, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 3, 0 }, /* 4842 */ {499, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 3, 3 }, /* 4843 */ {499, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 3, 3 }, /* 4844 */ {499, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 4845 */ {499, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 4846 */ {499, -1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 6 }, /* 4847 */ {499, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 6 }, /* 4848 */ {499, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 9, 9 }, /* 4849 */ {499, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 9 }, /* 4850 */ {499, -1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 6, 9 }, /* 4851 */ {499, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 6, 9 }, /* 4852 */ {499, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4853 */ {499, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4854 */ {499, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 9, 9 }, /* 4855 */ {499, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 9, 9 }, /* 4856 */ {499, 0, 0,-1, 1, 0, 0, 0,-1, 0, 3, 6, 9 }, /* 4857 */ {499, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 6, 9 }, /* 4858 */ {499, 0, 0,-1,-1, 0, 0, 0, 1, 0, 3, 9, 6 }, /* 4859 */ {499, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 9, 6 }, /* 4860 */ {499, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 4861 */ {499, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 4862 */ {499, 0,-1, 0, 0, 0, 1,-1, 0, 0, 3, 6, 9 }, /* 4863 */ {499, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 6, 9 }, /* 4864 */ {499, 0,-1, 0, 0, 0,-1, 1, 0, 0, 3, 9, 6 }, /* 4865 */ {499, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 9, 6 }, /* 4866 */ {499, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 9, 9 }, /* 4867 */ {499, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 9, 9 }, /* 4868 */ {499, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 4869 */ {499, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 4870 */ {499, -1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 6 }, /* 4871 */ {499, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 6 }, /* 4872 */ {499, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 3, 9 }, /* 4873 */ {499, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 3, 9 }, /* 4874 */ {499, -1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 0, 9 }, /* 4875 */ {499, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 0, 9 }, /* 4876 */ {499, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4877 */ {499, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4878 */ {499, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 3, 9 }, /* 4879 */ {499, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 3, 9 }, /* 4880 */ {499, 0, 0,-1, 1, 0, 0, 0,-1, 0, 9, 0, 9 }, /* 4881 */ {499, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 0, 9 }, /* 4882 */ {499, 0, 0,-1,-1, 0, 0, 0, 1, 0, 9, 3, 6 }, /* 4883 */ {499, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 3, 6 }, /* 4884 */ {499, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 4885 */ {499, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 4886 */ {499, 0,-1, 0, 0, 0, 1,-1, 0, 0, 9, 0, 9 }, /* 4887 */ {499, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 0, 9 }, /* 4888 */ {499, 0,-1, 0, 0, 0,-1, 1, 0, 0, 9, 3, 6 }, /* 4889 */ {499, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 3, 6 }, /* 4890 */ {499, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 3, 9 }, /* 4891 */ {499, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 3, 9 }, /* 4892 */ {499, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 4893 */ {499, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 4894 */ {499, -1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 0 }, /* 4895 */ {499, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 0 }, /* 4896 */ {499, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 9, 3 }, /* 4897 */ {499, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 9, 3 }, /* 4898 */ {499, -1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 6, 3 }, /* 4899 */ {499, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 6, 3 }, /* 4900 */ {499, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4901 */ {499, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4902 */ {499, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 9, 3 }, /* 4903 */ {499, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 9, 3 }, /* 4904 */ {499, 0, 0,-1, 1, 0, 0, 0,-1, 0, 9, 6, 3 }, /* 4905 */ {499, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 6, 3 }, /* 4906 */ {499, 0, 0,-1,-1, 0, 0, 0, 1, 0, 9, 9, 0 }, /* 4907 */ {499, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 9, 0 }, /* 4908 */ {499, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 4909 */ {499, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 4910 */ {499, 0,-1, 0, 0, 0, 1,-1, 0, 0, 9, 6, 3 }, /* 4911 */ {499, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 6, 3 }, /* 4912 */ {499, 0,-1, 0, 0, 0,-1, 1, 0, 0, 9, 9, 0 }, /* 4913 */ {499, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 9, 0 }, /* 4914 */ {499, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 9, 3 }, /* 4915 */ {499, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 9, 3 }, /* 4916 */ {500, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4917 */ {500, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4918 */ {500, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4919 */ {500, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4920 */ {500, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4921 */ {500, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4922 */ {500, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 4923 */ {500, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 4924 */ {500, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4925 */ {500, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4926 */ {500, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4927 */ {500, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4928 */ {500, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4929 */ {500, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4930 */ {500, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4931 */ {500, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4932 */ {500, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4933 */ {500, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4934 */ {500, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4935 */ {500, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4936 */ {500, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 4937 */ {500, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 4938 */ {500, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4939 */ {500, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4940 */ {500, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 4941 */ {500, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 4942 */ {500, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 4943 */ {500, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 4944 */ {500, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 4945 */ {500, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 4946 */ {500, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 4947 */ {500, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 4948 */ {500, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4949 */ {500, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 4950 */ {500, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 4951 */ {500, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4952 */ {500, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 4953 */ {500, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4954 */ {500, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 4955 */ {500, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 4956 */ {500, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 4957 */ {500, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 4958 */ {500, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 4959 */ {500, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 4960 */ {500, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 4961 */ {500, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 4962 */ {500, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 4963 */ {500, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 4964 */ {501, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4965 */ {501, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4966 */ {501, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 4967 */ {501, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 4968 */ {501, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 4969 */ {501, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 4970 */ {501, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 4971 */ {501, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 4972 */ {501, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4973 */ {501, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4974 */ {501, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 4975 */ {501, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 4976 */ {501, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 4977 */ {501, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 4978 */ {501, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 4979 */ {501, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 4980 */ {501, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 4981 */ {501, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 4982 */ {501, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 4983 */ {501, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 4984 */ {501, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 4985 */ {501, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 4986 */ {501, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 4987 */ {501, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 4988 */ {502, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 4989 */ {502, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 4990 */ {502, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 4991 */ {502, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 4992 */ {502, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 4993 */ {502, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 4994 */ {502, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 4995 */ {502, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 4996 */ {502, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 4997 */ {502, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 4998 */ {502, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 6 }, /* 4999 */ {502, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 6 }, /* 5000 */ {502, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 0 }, /* 5001 */ {502, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 0, 0 }, /* 5002 */ {502, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5003 */ {502, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5004 */ {502, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5005 */ {502, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5006 */ {502, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 0 }, /* 5007 */ {502, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 0 }, /* 5008 */ {502, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 0 }, /* 5009 */ {502, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 0 }, /* 5010 */ {502, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5011 */ {502, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 5012 */ {502, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 5013 */ {502, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 5014 */ {502, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5015 */ {502, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 5016 */ {502, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5017 */ {502, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 5018 */ {502, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 5019 */ {502, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 5020 */ {502, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5021 */ {502, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5022 */ {502, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5023 */ {502, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5024 */ {502, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5025 */ {502, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5026 */ {502, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 0 }, /* 5027 */ {502, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 6, 0 }, /* 5028 */ {502, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 5029 */ {502, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 5030 */ {502, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5031 */ {502, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 5032 */ {502, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5033 */ {502, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 5034 */ {502, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 6 }, /* 5035 */ {502, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 6 }, /* 5036 */ {503, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5037 */ {503, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5038 */ {503, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5039 */ {503, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5040 */ {503, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5041 */ {503, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5042 */ {503, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5043 */ {503, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5044 */ {503, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5045 */ {503, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5046 */ {503, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5047 */ {503, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5048 */ {503, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5049 */ {503, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5050 */ {503, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5051 */ {503, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5052 */ {503, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5053 */ {503, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5054 */ {503, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5055 */ {503, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5056 */ {503, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5057 */ {503, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5058 */ {503, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5059 */ {503, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5060 */ {504, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5061 */ {504, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5062 */ {504, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5063 */ {504, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5064 */ {504, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5065 */ {504, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5066 */ {504, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5067 */ {504, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5068 */ {504, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5069 */ {504, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5070 */ {504, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5071 */ {504, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5072 */ {504, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5073 */ {504, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5074 */ {504, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5075 */ {504, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5076 */ {504, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5077 */ {504, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5078 */ {504, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5079 */ {504, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5080 */ {504, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5081 */ {504, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5082 */ {504, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5083 */ {504, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5084 */ {505, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5085 */ {505, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5086 */ {505, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5087 */ {505, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5088 */ {505, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5089 */ {505, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5090 */ {505, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5091 */ {505, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5092 */ {505, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5093 */ {505, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5094 */ {505, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5095 */ {505, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5096 */ {505, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5097 */ {505, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5098 */ {505, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5099 */ {505, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5100 */ {505, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5101 */ {505, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5102 */ {505, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5103 */ {505, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5104 */ {505, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5105 */ {505, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5106 */ {505, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5107 */ {505, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5108 */ {505, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 5109 */ {505, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 5110 */ {505, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 5111 */ {505, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 5112 */ {505, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 5113 */ {505, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 5114 */ {505, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 5115 */ {505, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 5116 */ {505, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5117 */ {505, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 6, 6 }, /* 5118 */ {505, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5119 */ {505, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 6, 6 }, /* 5120 */ {505, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5121 */ {505, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 6, 6 }, /* 5122 */ {505, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5123 */ {505, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 6, 6 }, /* 5124 */ {505, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 5125 */ {505, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 6 }, /* 5126 */ {505, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5127 */ {505, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 6 }, /* 5128 */ {505, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 5129 */ {505, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 6 }, /* 5130 */ {505, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 5131 */ {505, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 6 }, /* 5132 */ {505, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 5133 */ {505, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 5134 */ {505, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5135 */ {505, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 5136 */ {505, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 5137 */ {505, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 5138 */ {505, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 5139 */ {505, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 5140 */ {505, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5141 */ {505, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 0, 6 }, /* 5142 */ {505, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5143 */ {505, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 0, 6 }, /* 5144 */ {505, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5145 */ {505, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 0, 6 }, /* 5146 */ {505, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5147 */ {505, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 0, 6 }, /* 5148 */ {505, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 5149 */ {505, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 6 }, /* 5150 */ {505, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 5151 */ {505, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 6 }, /* 5152 */ {505, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5153 */ {505, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 6 }, /* 5154 */ {505, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 5155 */ {505, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 6 }, /* 5156 */ {505, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 5157 */ {505, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 5158 */ {505, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 5159 */ {505, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 5160 */ {505, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5161 */ {505, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 5162 */ {505, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 5163 */ {505, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 5164 */ {505, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5165 */ {505, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 6, 0 }, /* 5166 */ {505, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5167 */ {505, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 0 }, /* 5168 */ {505, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5169 */ {505, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 0 }, /* 5170 */ {505, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5171 */ {505, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 6, 0 }, /* 5172 */ {505, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 5173 */ {505, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 0 }, /* 5174 */ {505, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 5175 */ {505, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 0 }, /* 5176 */ {505, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 5177 */ {505, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 0 }, /* 5178 */ {505, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5179 */ {505, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 0 }, /* 5180 */ {506, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5181 */ {506, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 5182 */ {506, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 5183 */ {506, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 5184 */ {506, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5185 */ {506, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 5186 */ {506, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 5187 */ {506, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 5188 */ {506, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5189 */ {506, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 3, 3 }, /* 5190 */ {506, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5191 */ {506, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 9, 3 }, /* 5192 */ {506, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5193 */ {506, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 3, 9 }, /* 5194 */ {506, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5195 */ {506, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 9, 9 }, /* 5196 */ {506, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5197 */ {506, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 3, 3 }, /* 5198 */ {506, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 5199 */ {506, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 9, 9 }, /* 5200 */ {506, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5201 */ {506, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 9, 3 }, /* 5202 */ {506, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5203 */ {506, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 3, 9 }, /* 5204 */ {506, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 5205 */ {506, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 5206 */ {506, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5207 */ {506, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 5208 */ {506, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 5209 */ {506, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 5210 */ {506, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5211 */ {506, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 5212 */ {506, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5213 */ {506, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 9, 9 }, /* 5214 */ {506, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5215 */ {506, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 3, 9 }, /* 5216 */ {506, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5217 */ {506, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 9, 3 }, /* 5218 */ {506, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5219 */ {506, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 3, 3 }, /* 5220 */ {506, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 5221 */ {506, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 9, 9 }, /* 5222 */ {506, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 5223 */ {506, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 3, 3 }, /* 5224 */ {506, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 5225 */ {506, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 3, 9 }, /* 5226 */ {506, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 5227 */ {506, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 9, 3 }, /* 5228 */ {506, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 5229 */ {506, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 5230 */ {506, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 5231 */ {506, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 5232 */ {506, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 5233 */ {506, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 5234 */ {506, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 5235 */ {506, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 5236 */ {506, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5237 */ {506, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 3, 9 }, /* 5238 */ {506, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5239 */ {506, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 9, 9 }, /* 5240 */ {506, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5241 */ {506, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 3, 3 }, /* 5242 */ {506, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5243 */ {506, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 9, 3 }, /* 5244 */ {506, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 5245 */ {506, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 3, 9 }, /* 5246 */ {506, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5247 */ {506, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 9, 3 }, /* 5248 */ {506, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5249 */ {506, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 9, 9 }, /* 5250 */ {506, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 5251 */ {506, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 3, 3 }, /* 5252 */ {506, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 5253 */ {506, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 5254 */ {506, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5255 */ {506, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 5256 */ {506, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5257 */ {506, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 5258 */ {506, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 5259 */ {506, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 5260 */ {506, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5261 */ {506, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 9, 3 }, /* 5262 */ {506, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5263 */ {506, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 3, 3 }, /* 5264 */ {506, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5265 */ {506, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 9, 9 }, /* 5266 */ {506, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5267 */ {506, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 3, 9 }, /* 5268 */ {506, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 5269 */ {506, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 9, 3 }, /* 5270 */ {506, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5271 */ {506, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 3, 9 }, /* 5272 */ {506, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 5273 */ {506, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 3, 3 }, /* 5274 */ {506, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5275 */ {506, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 9, 9 }, /* 5276 */ {507, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5277 */ {507, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5278 */ {507, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5279 */ {507, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5280 */ {507, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5281 */ {507, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5282 */ {507, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5283 */ {507, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5284 */ {507, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5285 */ {507, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5286 */ {507, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5287 */ {507, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5288 */ {507, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5289 */ {507, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5290 */ {507, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5291 */ {507, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5292 */ {507, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5293 */ {507, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5294 */ {507, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5295 */ {507, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5296 */ {507, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5297 */ {507, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5298 */ {507, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5299 */ {507, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5300 */ {507, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 5301 */ {507, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5302 */ {507, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 5303 */ {507, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5304 */ {507, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 5305 */ {507, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5306 */ {507, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 5307 */ {507, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5308 */ {507, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5309 */ {507, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5310 */ {507, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5311 */ {507, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5312 */ {507, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5313 */ {507, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5314 */ {507, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5315 */ {507, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5316 */ {507, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 5317 */ {507, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5318 */ {507, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 5319 */ {507, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5320 */ {507, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 5321 */ {507, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5322 */ {507, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 5323 */ {507, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5324 */ {508, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5325 */ {508, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 5326 */ {508, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5327 */ {508, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 5328 */ {508, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5329 */ {508, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 5330 */ {508, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 5331 */ {508, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 5332 */ {508, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5333 */ {508, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 9, 3 }, /* 5334 */ {508, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5335 */ {508, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 9, 9 }, /* 5336 */ {508, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5337 */ {508, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 3, 3 }, /* 5338 */ {508, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5339 */ {508, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 3, 9 }, /* 5340 */ {508, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5341 */ {508, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 9, 9 }, /* 5342 */ {508, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5343 */ {508, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 3, 9 }, /* 5344 */ {508, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5345 */ {508, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 3, 3 }, /* 5346 */ {508, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5347 */ {508, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 9, 3 }, /* 5348 */ {509, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5349 */ {509, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 3 }, /* 5350 */ {509, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5351 */ {509, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 9 }, /* 5352 */ {509, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5353 */ {509, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 9, 9 }, /* 5354 */ {509, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 5355 */ {509, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 3 }, /* 5356 */ {509, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5357 */ {509, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 3, 9 }, /* 5358 */ {509, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5359 */ {509, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 3, 3 }, /* 5360 */ {509, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5361 */ {509, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 9, 9 }, /* 5362 */ {509, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5363 */ {509, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 9, 3 }, /* 5364 */ {509, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5365 */ {509, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 3, 3 }, /* 5366 */ {509, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5367 */ {509, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 9, 3 }, /* 5368 */ {509, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5369 */ {509, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 9, 9 }, /* 5370 */ {509, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5371 */ {509, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 3, 9 }, /* 5372 */ {510, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5373 */ {510, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 3 }, /* 5374 */ {510, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5375 */ {510, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 9 }, /* 5376 */ {510, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 5377 */ {510, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 5378 */ {510, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 5379 */ {510, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 5380 */ {510, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5381 */ {510, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 3, 9 }, /* 5382 */ {510, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5383 */ {510, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 3, 3 }, /* 5384 */ {510, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 0 }, /* 5385 */ {510, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 3, 3 }, /* 5386 */ {510, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 0 }, /* 5387 */ {510, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 3, 9 }, /* 5388 */ {510, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5389 */ {510, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 3, 3 }, /* 5390 */ {510, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5391 */ {510, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 9, 3 }, /* 5392 */ {510, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 0 }, /* 5393 */ {510, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 3, 3 }, /* 5394 */ {510, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 6 }, /* 5395 */ {510, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 9, 3 }, /* 5396 */ {510, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 5397 */ {510, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 5398 */ {510, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 5399 */ {510, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 5400 */ {510, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5401 */ {510, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 9, 9 }, /* 5402 */ {510, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 5403 */ {510, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 3 }, /* 5404 */ {510, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5405 */ {510, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 9, 3 }, /* 5406 */ {510, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 6 }, /* 5407 */ {510, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 9, 9 }, /* 5408 */ {510, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5409 */ {510, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 9, 9 }, /* 5410 */ {510, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5411 */ {510, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 9, 3 }, /* 5412 */ {510, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 5413 */ {510, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 9, 9 }, /* 5414 */ {510, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 0 }, /* 5415 */ {510, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 3, 9 }, /* 5416 */ {510, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5417 */ {510, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 9, 9 }, /* 5418 */ {510, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5419 */ {510, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 3, 9 }, /* 5420 */ {511, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5421 */ {511, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5422 */ {511, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5423 */ {511, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5424 */ {511, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5425 */ {511, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5426 */ {511, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5427 */ {511, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5428 */ {511, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5429 */ {511, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5430 */ {511, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5431 */ {511, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5432 */ {511, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5433 */ {511, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5434 */ {511, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5435 */ {511, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5436 */ {511, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5437 */ {511, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5438 */ {511, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5439 */ {511, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5440 */ {511, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5441 */ {511, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5442 */ {511, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5443 */ {511, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5444 */ {512, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5445 */ {512, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5446 */ {512, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5447 */ {512, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5448 */ {512, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5449 */ {512, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5450 */ {512, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5451 */ {512, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5452 */ {512, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5453 */ {512, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5454 */ {512, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5455 */ {512, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5456 */ {512, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5457 */ {512, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5458 */ {512, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5459 */ {512, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5460 */ {512, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5461 */ {512, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5462 */ {512, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5463 */ {512, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5464 */ {512, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5465 */ {512, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5466 */ {512, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5467 */ {512, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5468 */ {512, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 5469 */ {512, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 5470 */ {512, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 5471 */ {512, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 5472 */ {512, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 5473 */ {512, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 5474 */ {512, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 5475 */ {512, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 5476 */ {512, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5477 */ {512, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 6, 6 }, /* 5478 */ {512, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5479 */ {512, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 6, 6 }, /* 5480 */ {512, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5481 */ {512, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 6, 6 }, /* 5482 */ {512, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5483 */ {512, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 6, 6 }, /* 5484 */ {512, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 5485 */ {512, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 6 }, /* 5486 */ {512, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5487 */ {512, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 6 }, /* 5488 */ {512, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 5489 */ {512, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 6 }, /* 5490 */ {512, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 5491 */ {512, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 6 }, /* 5492 */ {512, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 5493 */ {512, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 5494 */ {512, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5495 */ {512, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 5496 */ {512, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 5497 */ {512, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 5498 */ {512, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 5499 */ {512, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 5500 */ {512, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5501 */ {512, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 0, 6 }, /* 5502 */ {512, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5503 */ {512, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 0, 6 }, /* 5504 */ {512, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5505 */ {512, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 0, 6 }, /* 5506 */ {512, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5507 */ {512, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 0, 6 }, /* 5508 */ {512, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 5509 */ {512, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 6 }, /* 5510 */ {512, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 5511 */ {512, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 6 }, /* 5512 */ {512, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5513 */ {512, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 6 }, /* 5514 */ {512, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 5515 */ {512, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 6 }, /* 5516 */ {512, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 5517 */ {512, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 5518 */ {512, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 5519 */ {512, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 5520 */ {512, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5521 */ {512, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 5522 */ {512, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 5523 */ {512, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 5524 */ {512, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5525 */ {512, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 0 }, /* 5526 */ {512, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5527 */ {512, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 0 }, /* 5528 */ {512, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5529 */ {512, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 0 }, /* 5530 */ {512, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5531 */ {512, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 0 }, /* 5532 */ {512, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 5533 */ {512, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 0 }, /* 5534 */ {512, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 5535 */ {512, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 0 }, /* 5536 */ {512, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 5537 */ {512, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 0 }, /* 5538 */ {512, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5539 */ {512, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 0 }, /* 5540 */ {513, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5541 */ {513, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5542 */ {513, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5543 */ {513, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5544 */ {513, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5545 */ {513, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5546 */ {513, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5547 */ {513, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5548 */ {513, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5549 */ {513, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5550 */ {513, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5551 */ {513, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5552 */ {513, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5553 */ {513, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5554 */ {513, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5555 */ {513, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5556 */ {513, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5557 */ {513, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5558 */ {513, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5559 */ {513, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5560 */ {513, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5561 */ {513, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5562 */ {513, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5563 */ {513, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5564 */ {513, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 5565 */ {513, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5566 */ {513, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 5567 */ {513, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5568 */ {513, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 5569 */ {513, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5570 */ {513, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 5571 */ {513, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5572 */ {513, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5573 */ {513, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5574 */ {513, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5575 */ {513, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5576 */ {513, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5577 */ {513, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5578 */ {513, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5579 */ {513, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5580 */ {513, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 5581 */ {513, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5582 */ {513, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 5583 */ {513, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5584 */ {513, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 5585 */ {513, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5586 */ {513, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 5587 */ {513, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5588 */ {514, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5589 */ {514, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5590 */ {514, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5591 */ {514, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5592 */ {514, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5593 */ {514, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5594 */ {514, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5595 */ {514, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5596 */ {514, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5597 */ {514, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5598 */ {514, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5599 */ {514, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5600 */ {514, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5601 */ {514, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5602 */ {514, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5603 */ {514, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5604 */ {514, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5605 */ {514, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5606 */ {514, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5607 */ {514, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5608 */ {514, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5609 */ {514, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5610 */ {514, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5611 */ {514, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5612 */ {515, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5613 */ {515, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 5614 */ {515, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5615 */ {515, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 5616 */ {515, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5617 */ {515, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 5618 */ {515, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5619 */ {515, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 5620 */ {515, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5621 */ {515, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 0, 0 }, /* 5622 */ {515, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5623 */ {515, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 0, 0 }, /* 5624 */ {515, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5625 */ {515, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 0, 0 }, /* 5626 */ {515, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5627 */ {515, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 0, 0 }, /* 5628 */ {515, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5629 */ {515, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 0 }, /* 5630 */ {515, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5631 */ {515, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 0 }, /* 5632 */ {515, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5633 */ {515, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 0 }, /* 5634 */ {515, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5635 */ {515, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 0 }, /* 5636 */ {515, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 5637 */ {515, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 5638 */ {515, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 5639 */ {515, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 5640 */ {515, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 5641 */ {515, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 5642 */ {515, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 5643 */ {515, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 5644 */ {515, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5645 */ {515, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5646 */ {515, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5647 */ {515, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5648 */ {515, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5649 */ {515, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5650 */ {515, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5651 */ {515, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5652 */ {515, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 5653 */ {515, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 6 }, /* 5654 */ {515, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5655 */ {515, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 6 }, /* 5656 */ {515, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 5657 */ {515, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6 }, /* 5658 */ {515, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 5659 */ {515, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 6 }, /* 5660 */ {515, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 5661 */ {515, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 5662 */ {515, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5663 */ {515, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 5664 */ {515, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 5665 */ {515, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 5666 */ {515, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 5667 */ {515, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 5668 */ {515, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5669 */ {515, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 6 }, /* 5670 */ {515, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5671 */ {515, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 6 }, /* 5672 */ {515, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5673 */ {515, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 6 }, /* 5674 */ {515, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5675 */ {515, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 6 }, /* 5676 */ {515, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 5677 */ {515, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5678 */ {515, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 5679 */ {515, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5680 */ {515, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5681 */ {515, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5682 */ {515, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 5683 */ {515, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5684 */ {515, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 5685 */ {515, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5686 */ {515, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 5687 */ {515, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5688 */ {515, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5689 */ {515, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5690 */ {515, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 5691 */ {515, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5692 */ {515, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5693 */ {515, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 6, 0 }, /* 5694 */ {515, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5695 */ {515, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 6, 0 }, /* 5696 */ {515, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5697 */ {515, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 6, 0 }, /* 5698 */ {515, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5699 */ {515, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 6, 0 }, /* 5700 */ {515, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 5701 */ {515, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 0 }, /* 5702 */ {515, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 5703 */ {515, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 0 }, /* 5704 */ {515, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 5705 */ {515, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 0 }, /* 5706 */ {515, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5707 */ {515, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 0 }, /* 5708 */ {516, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5709 */ {516, 0, 1, 0,-1, 0, 0, 0, 0,-1, 3, 9, 3 }, /* 5710 */ {516, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 5711 */ {516, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 5712 */ {516, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 5713 */ {516, 0, 1, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 5714 */ {516, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 5715 */ {516, 0,-1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 3 }, /* 5716 */ {516, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5717 */ {516, 0, 0,-1, 0, 1, 0,-1, 0, 0, 3, 3, 9 }, /* 5718 */ {516, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 6 }, /* 5719 */ {516, 0, 0,-1, 0,-1, 0, 1, 0, 0, 3, 9, 9 }, /* 5720 */ {516, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 0 }, /* 5721 */ {516, 0, 0, 1, 0, 1, 0, 1, 0, 0, 3, 3, 3 }, /* 5722 */ {516, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5723 */ {516, 0, 0, 1, 0,-1, 0,-1, 0, 0, 3, 9, 3 }, /* 5724 */ {516, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5725 */ {516, -1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 3, 3 }, /* 5726 */ {516, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 0 }, /* 5727 */ {516, 1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 3, 9 }, /* 5728 */ {516, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 0 }, /* 5729 */ {516, 1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 3, 3 }, /* 5730 */ {516, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 5731 */ {516, -1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 3, 9 }, /* 5732 */ {516, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 5733 */ {516, 0, 1, 0,-1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 5734 */ {516, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5735 */ {516, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 9 }, /* 5736 */ {516, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 5737 */ {516, 0, 1, 0, 1, 0, 0, 0, 0, 1, 9, 9, 9 }, /* 5738 */ {516, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 5739 */ {516, 0,-1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 5740 */ {516, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5741 */ {516, 0, 0,-1, 0, 1, 0,-1, 0, 0, 9, 9, 3 }, /* 5742 */ {516, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5743 */ {516, 0, 0,-1, 0,-1, 0, 1, 0, 0, 9, 3, 3 }, /* 5744 */ {516, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5745 */ {516, 0, 0, 1, 0, 1, 0, 1, 0, 0, 9, 9, 9 }, /* 5746 */ {516, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 0 }, /* 5747 */ {516, 0, 0, 1, 0,-1, 0,-1, 0, 0, 9, 3, 9 }, /* 5748 */ {516, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 5749 */ {516, -1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 9, 9 }, /* 5750 */ {516, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 5751 */ {516, 1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 9, 3 }, /* 5752 */ {516, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5753 */ {516, 1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 9, 9 }, /* 5754 */ {516, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 6 }, /* 5755 */ {516, -1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 9, 3 }, /* 5756 */ {517, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5757 */ {517, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5758 */ {517, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5759 */ {517, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5760 */ {517, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5761 */ {517, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5762 */ {517, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5763 */ {517, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5764 */ {517, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5765 */ {517, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5766 */ {517, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5767 */ {517, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5768 */ {517, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5769 */ {517, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5770 */ {517, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5771 */ {517, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5772 */ {517, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5773 */ {517, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5774 */ {517, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5775 */ {517, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5776 */ {517, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5777 */ {517, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5778 */ {517, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5779 */ {517, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5780 */ {517, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5781 */ {517, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5782 */ {517, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5783 */ {517, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5784 */ {517, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5785 */ {517, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5786 */ {517, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5787 */ {517, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5788 */ {517, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5789 */ {517, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5790 */ {517, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5791 */ {517, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5792 */ {517, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5793 */ {517, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5794 */ {517, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5795 */ {517, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5796 */ {517, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5797 */ {517, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5798 */ {517, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5799 */ {517, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5800 */ {517, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5801 */ {517, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5802 */ {517, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5803 */ {517, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5804 */ {518, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5805 */ {518, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5806 */ {518, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5807 */ {518, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5808 */ {518, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5809 */ {518, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5810 */ {518, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5811 */ {518, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5812 */ {518, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5813 */ {518, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5814 */ {518, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5815 */ {518, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5816 */ {518, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5817 */ {518, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5818 */ {518, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5819 */ {518, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5820 */ {518, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5821 */ {518, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5822 */ {518, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5823 */ {518, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5824 */ {518, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5825 */ {518, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5826 */ {518, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5827 */ {518, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5828 */ {518, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 5829 */ {518, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5830 */ {518, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 5831 */ {518, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5832 */ {518, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 5833 */ {518, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5834 */ {518, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 5835 */ {518, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5836 */ {518, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5837 */ {518, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5838 */ {518, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5839 */ {518, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5840 */ {518, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5841 */ {518, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5842 */ {518, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5843 */ {518, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5844 */ {518, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 5845 */ {518, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5846 */ {518, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 5847 */ {518, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5848 */ {518, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 5849 */ {518, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5850 */ {518, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 5851 */ {518, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5852 */ {519, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5853 */ {519, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5854 */ {519, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 5855 */ {519, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 5856 */ {519, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 5857 */ {519, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 5858 */ {519, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 5859 */ {519, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 5860 */ {519, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 5861 */ {519, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 5862 */ {519, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5863 */ {519, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5864 */ {519, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 5865 */ {519, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 5866 */ {519, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 5867 */ {519, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 5868 */ {519, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5869 */ {519, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5870 */ {519, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 6, 0 }, /* 5871 */ {519, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 6, 0 }, /* 5872 */ {519, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 5873 */ {519, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 5874 */ {519, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 6 }, /* 5875 */ {519, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 6 }, /* 5876 */ {519, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 5877 */ {519, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 5878 */ {519, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5879 */ {519, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5880 */ {519, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 5881 */ {519, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 5882 */ {519, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 0, 0 }, /* 5883 */ {519, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 0, 0 }, /* 5884 */ {519, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5885 */ {519, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5886 */ {519, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 6 }, /* 5887 */ {519, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 6 }, /* 5888 */ {519, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 5889 */ {519, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 5890 */ {519, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 0 }, /* 5891 */ {519, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 0 }, /* 5892 */ {519, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 5893 */ {519, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 5894 */ {519, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5895 */ {519, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5896 */ {519, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 5897 */ {519, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 5898 */ {519, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 0 }, /* 5899 */ {519, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 0 }, /* 5900 */ {520, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5901 */ {520, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5902 */ {520, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5903 */ {520, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5904 */ {520, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5905 */ {520, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5906 */ {520, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5907 */ {520, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5908 */ {520, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5909 */ {520, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5910 */ {520, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5911 */ {520, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5912 */ {520, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5913 */ {520, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5914 */ {520, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5915 */ {520, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5916 */ {520, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5917 */ {520, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5918 */ {520, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5919 */ {520, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5920 */ {520, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5921 */ {520, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5922 */ {520, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5923 */ {520, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5924 */ {520, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5925 */ {520, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5926 */ {520, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5927 */ {520, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5928 */ {520, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5929 */ {520, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5930 */ {520, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5931 */ {520, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5932 */ {520, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5933 */ {520, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5934 */ {520, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5935 */ {520, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5936 */ {520, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5937 */ {520, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5938 */ {520, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5939 */ {520, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5940 */ {520, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5941 */ {520, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5942 */ {520, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5943 */ {520, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5944 */ {520, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5945 */ {520, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5946 */ {520, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5947 */ {520, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5948 */ {521, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5949 */ {521, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5950 */ {521, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 5951 */ {521, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 5952 */ {521, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5953 */ {521, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5954 */ {521, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 5955 */ {521, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 5956 */ {521, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5957 */ {521, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 5958 */ {521, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5959 */ {521, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 5960 */ {521, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 5961 */ {521, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 5962 */ {521, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 5963 */ {521, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 5964 */ {521, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 5965 */ {521, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 5966 */ {521, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 5967 */ {521, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 5968 */ {521, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 5969 */ {521, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 5970 */ {521, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 5971 */ {521, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 5972 */ {521, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 5973 */ {521, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5974 */ {521, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 5975 */ {521, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 5976 */ {521, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 5977 */ {521, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5978 */ {521, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 5979 */ {521, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 5980 */ {521, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5981 */ {521, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 5982 */ {521, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5983 */ {521, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 5984 */ {521, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 5985 */ {521, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 5986 */ {521, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 5987 */ {521, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 5988 */ {521, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 5989 */ {521, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 5990 */ {521, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 5991 */ {521, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 5992 */ {521, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 5993 */ {521, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 5994 */ {521, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 5995 */ {521, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 5996 */ {522, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 5997 */ {522, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 5998 */ {522, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 5999 */ {522, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 6000 */ {522, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 6001 */ {522, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 6002 */ {522, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 6003 */ {522, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 6004 */ {522, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 6005 */ {522, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 6006 */ {522, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 6007 */ {522, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 6008 */ {522, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 6009 */ {522, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 6010 */ {522, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 6011 */ {522, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 6012 */ {522, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6013 */ {522, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6014 */ {522, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 0, 6 }, /* 6015 */ {522, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 0, 6 }, /* 6016 */ {522, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6017 */ {522, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6018 */ {522, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 0 }, /* 6019 */ {522, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 0 }, /* 6020 */ {522, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6021 */ {522, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6022 */ {522, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 6023 */ {522, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 6024 */ {522, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6025 */ {522, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6026 */ {522, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 6, 6 }, /* 6027 */ {522, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 6, 6 }, /* 6028 */ {522, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 6029 */ {522, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 6030 */ {522, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 0 }, /* 6031 */ {522, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 0 }, /* 6032 */ {522, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 6033 */ {522, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 6034 */ {522, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 6 }, /* 6035 */ {522, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 6 }, /* 6036 */ {522, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 6037 */ {522, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 6038 */ {522, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 6039 */ {522, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 6040 */ {522, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 6041 */ {522, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 6042 */ {522, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 6 }, /* 6043 */ {522, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 6 }, /* 6044 */ {523, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 6045 */ {523, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 6046 */ {523, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 6047 */ {523, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 6048 */ {523, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 6049 */ {523, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 6050 */ {523, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 6051 */ {523, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 6052 */ {523, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 6053 */ {523, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 6054 */ {523, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 6055 */ {523, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 6056 */ {523, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 6057 */ {523, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 6058 */ {523, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 6059 */ {523, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 6060 */ {523, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6061 */ {523, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6062 */ {523, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 6063 */ {523, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 6064 */ {523, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6065 */ {523, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6066 */ {523, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 6067 */ {523, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 6068 */ {523, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6069 */ {523, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6070 */ {523, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 6071 */ {523, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 6072 */ {523, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6073 */ {523, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6074 */ {523, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 6075 */ {523, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 6076 */ {523, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 6077 */ {523, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 6078 */ {523, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 6079 */ {523, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 6080 */ {523, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 6081 */ {523, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 6082 */ {523, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 6083 */ {523, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 6084 */ {523, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 6085 */ {523, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 6086 */ {523, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 6087 */ {523, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 6088 */ {523, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 6089 */ {523, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 6090 */ {523, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 6091 */ {523, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 6092 */ {523, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 6093 */ {523, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 6094 */ {523, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 6095 */ {523, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 6096 */ {523, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 6097 */ {523, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 6098 */ {523, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 6099 */ {523, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 6100 */ {523, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 6101 */ {523, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 6102 */ {523, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 6103 */ {523, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 6104 */ {523, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 6105 */ {523, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 6106 */ {523, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 6107 */ {523, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 6108 */ {523, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6109 */ {523, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6110 */ {523, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 6, 6 }, /* 6111 */ {523, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 6, 6 }, /* 6112 */ {523, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6113 */ {523, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6114 */ {523, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 6, 6 }, /* 6115 */ {523, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 6, 6 }, /* 6116 */ {523, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6117 */ {523, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6118 */ {523, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 6, 6 }, /* 6119 */ {523, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 6, 6 }, /* 6120 */ {523, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6121 */ {523, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6122 */ {523, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 6, 6 }, /* 6123 */ {523, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 6, 6 }, /* 6124 */ {523, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 6125 */ {523, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 6126 */ {523, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 6 }, /* 6127 */ {523, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 6 }, /* 6128 */ {523, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 6129 */ {523, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 6130 */ {523, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 6 }, /* 6131 */ {523, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 6 }, /* 6132 */ {523, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 6133 */ {523, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 6134 */ {523, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 6 }, /* 6135 */ {523, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 6 }, /* 6136 */ {523, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 6137 */ {523, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 6138 */ {523, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 6 }, /* 6139 */ {523, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 6 }, /* 6140 */ {523, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 6141 */ {523, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 6142 */ {523, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 6143 */ {523, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 6144 */ {523, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 6145 */ {523, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 6146 */ {523, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 6147 */ {523, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 6148 */ {523, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 6149 */ {523, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 6150 */ {523, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 6151 */ {523, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 6152 */ {523, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 6153 */ {523, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 6154 */ {523, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 6155 */ {523, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 6156 */ {523, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6157 */ {523, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6158 */ {523, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 0, 6 }, /* 6159 */ {523, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 0, 6 }, /* 6160 */ {523, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6161 */ {523, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6162 */ {523, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 0, 6 }, /* 6163 */ {523, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 0, 6 }, /* 6164 */ {523, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6165 */ {523, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6166 */ {523, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 0, 6 }, /* 6167 */ {523, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 0, 6 }, /* 6168 */ {523, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6169 */ {523, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6170 */ {523, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 0, 6 }, /* 6171 */ {523, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 0, 6 }, /* 6172 */ {523, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 6173 */ {523, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 6174 */ {523, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 6 }, /* 6175 */ {523, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 6 }, /* 6176 */ {523, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 6177 */ {523, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 6178 */ {523, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 6 }, /* 6179 */ {523, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 6 }, /* 6180 */ {523, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 6181 */ {523, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 6182 */ {523, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 6 }, /* 6183 */ {523, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 6 }, /* 6184 */ {523, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 6185 */ {523, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 6186 */ {523, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 6 }, /* 6187 */ {523, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 6 }, /* 6188 */ {523, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 6189 */ {523, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 6190 */ {523, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 6191 */ {523, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 6192 */ {523, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 6193 */ {523, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 6194 */ {523, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 6195 */ {523, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 6196 */ {523, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 6197 */ {523, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 6198 */ {523, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 6199 */ {523, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 6200 */ {523, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 6201 */ {523, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 6202 */ {523, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 6203 */ {523, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 6204 */ {523, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6205 */ {523, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6206 */ {523, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 6, 0 }, /* 6207 */ {523, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 0 }, /* 6208 */ {523, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6209 */ {523, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6210 */ {523, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 0 }, /* 6211 */ {523, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 0 }, /* 6212 */ {523, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6213 */ {523, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6214 */ {523, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 0 }, /* 6215 */ {523, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 0 }, /* 6216 */ {523, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6217 */ {523, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6218 */ {523, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 6, 0 }, /* 6219 */ {523, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 0 }, /* 6220 */ {523, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 6221 */ {523, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 6222 */ {523, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 0 }, /* 6223 */ {523, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 0 }, /* 6224 */ {523, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 6225 */ {523, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 6226 */ {523, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 0 }, /* 6227 */ {523, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 0 }, /* 6228 */ {523, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 6229 */ {523, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 6230 */ {523, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 0 }, /* 6231 */ {523, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 0 }, /* 6232 */ {523, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 6233 */ {523, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 6234 */ {523, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 0 }, /* 6235 */ {523, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 0 }, /* 6236 */ {524, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 6237 */ {524, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 6238 */ {524, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 6239 */ {524, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 6240 */ {524, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 6241 */ {524, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 6242 */ {524, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 6243 */ {524, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 6244 */ {524, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 6245 */ {524, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 6246 */ {524, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 6247 */ {524, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 6248 */ {524, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 6249 */ {524, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 6250 */ {524, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 6251 */ {524, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 6252 */ {524, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6253 */ {524, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6254 */ {524, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 0, 0 }, /* 6255 */ {524, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 0, 0 }, /* 6256 */ {524, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6257 */ {524, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6258 */ {524, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 0, 0 }, /* 6259 */ {524, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 0, 0 }, /* 6260 */ {524, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6261 */ {524, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6262 */ {524, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 0, 0 }, /* 6263 */ {524, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 0, 0 }, /* 6264 */ {524, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6265 */ {524, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6266 */ {524, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 0, 0 }, /* 6267 */ {524, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 0, 0 }, /* 6268 */ {524, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 6269 */ {524, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 6270 */ {524, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 0 }, /* 6271 */ {524, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 0 }, /* 6272 */ {524, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 6273 */ {524, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 6274 */ {524, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 0 }, /* 6275 */ {524, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 0 }, /* 6276 */ {524, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 6277 */ {524, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 6278 */ {524, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 0 }, /* 6279 */ {524, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 0 }, /* 6280 */ {524, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 6281 */ {524, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 6282 */ {524, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 0 }, /* 6283 */ {524, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 0 }, /* 6284 */ {524, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 6285 */ {524, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 6286 */ {524, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 6287 */ {524, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 6288 */ {524, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 6289 */ {524, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 6290 */ {524, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 6291 */ {524, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 6292 */ {524, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 6293 */ {524, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 6294 */ {524, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 6295 */ {524, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 6296 */ {524, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 6297 */ {524, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 6298 */ {524, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 6299 */ {524, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 6300 */ {524, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6301 */ {524, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6302 */ {524, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 6303 */ {524, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 6304 */ {524, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6305 */ {524, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6306 */ {524, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 6307 */ {524, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 6308 */ {524, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6309 */ {524, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6310 */ {524, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 6311 */ {524, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 6312 */ {524, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6313 */ {524, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6314 */ {524, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 6315 */ {524, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 6316 */ {524, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 6317 */ {524, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 6318 */ {524, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 6 }, /* 6319 */ {524, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 6 }, /* 6320 */ {524, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 6321 */ {524, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 6322 */ {524, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6 }, /* 6323 */ {524, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 6 }, /* 6324 */ {524, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 6325 */ {524, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 6326 */ {524, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 6 }, /* 6327 */ {524, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6 }, /* 6328 */ {524, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 6329 */ {524, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 6330 */ {524, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 6 }, /* 6331 */ {524, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 6 }, /* 6332 */ {524, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 6333 */ {524, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 6334 */ {524, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 6335 */ {524, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 6336 */ {524, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 6337 */ {524, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 6338 */ {524, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 6339 */ {524, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 6340 */ {524, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 6341 */ {524, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 6342 */ {524, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 6343 */ {524, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 6344 */ {524, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 6345 */ {524, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 6346 */ {524, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 6347 */ {524, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 6348 */ {524, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6349 */ {524, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6350 */ {524, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 0, 6 }, /* 6351 */ {524, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 6 }, /* 6352 */ {524, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6353 */ {524, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6354 */ {524, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 6 }, /* 6355 */ {524, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 6 }, /* 6356 */ {524, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6357 */ {524, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6358 */ {524, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 6 }, /* 6359 */ {524, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 6 }, /* 6360 */ {524, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6361 */ {524, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6362 */ {524, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 0, 6 }, /* 6363 */ {524, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 6 }, /* 6364 */ {524, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 6365 */ {524, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 6366 */ {524, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 6367 */ {524, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 6368 */ {524, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 6369 */ {524, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 6370 */ {524, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 6371 */ {524, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 6372 */ {524, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 6373 */ {524, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 6374 */ {524, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 6375 */ {524, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 6376 */ {524, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 6377 */ {524, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 6378 */ {524, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 6379 */ {524, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 6380 */ {524, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 6381 */ {524, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 6382 */ {524, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 6383 */ {524, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 6384 */ {524, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 6385 */ {524, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 6386 */ {524, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 6387 */ {524, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 6388 */ {524, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 6389 */ {524, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 6390 */ {524, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 6391 */ {524, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 6392 */ {524, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 6393 */ {524, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 6394 */ {524, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 6395 */ {524, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 6396 */ {524, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6397 */ {524, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6398 */ {524, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 6, 0 }, /* 6399 */ {524, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 6, 0 }, /* 6400 */ {524, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6401 */ {524, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6402 */ {524, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 6, 0 }, /* 6403 */ {524, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 6, 0 }, /* 6404 */ {524, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6405 */ {524, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6406 */ {524, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 6, 0 }, /* 6407 */ {524, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 6, 0 }, /* 6408 */ {524, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6409 */ {524, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6410 */ {524, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 6, 0 }, /* 6411 */ {524, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 6, 0 }, /* 6412 */ {524, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 6413 */ {524, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 6414 */ {524, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 0 }, /* 6415 */ {524, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 0 }, /* 6416 */ {524, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 6417 */ {524, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 6418 */ {524, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 0 }, /* 6419 */ {524, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 0 }, /* 6420 */ {524, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 6421 */ {524, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 6422 */ {524, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 0 }, /* 6423 */ {524, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 0 }, /* 6424 */ {524, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 6425 */ {524, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 6426 */ {524, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 0 }, /* 6427 */ {524, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 0 }, /* 6428 */ {525, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 6429 */ {525, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 6430 */ {525, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 6431 */ {525, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 6432 */ {525, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 6433 */ {525, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 6434 */ {525, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 6435 */ {525, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 6436 */ {525, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6437 */ {525, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 3, 3 }, /* 6438 */ {525, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6439 */ {525, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 9, 3 }, /* 6440 */ {525, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6441 */ {525, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 3, 9 }, /* 6442 */ {525, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6443 */ {525, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 9, 9 }, /* 6444 */ {525, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 6445 */ {525, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 3, 3 }, /* 6446 */ {525, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 6447 */ {525, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 9, 9 }, /* 6448 */ {525, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 6449 */ {525, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 9, 3 }, /* 6450 */ {525, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 6451 */ {525, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 3, 9 }, /* 6452 */ {525, -1, 0, 0, 0,-1, 0, 0, 0,-1, 3, 3, 3 }, /* 6453 */ {525, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 6454 */ {525, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 9 }, /* 6455 */ {525, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 6456 */ {525, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 3, 3 }, /* 6457 */ {525, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 6458 */ {525, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 9 }, /* 6459 */ {525, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 6460 */ {525, 0, 0,-1,-1, 0, 0, 0,-1, 0, 3, 3, 3 }, /* 6461 */ {525, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 6462 */ {525, 0, 0,-1, 1, 0, 0, 0, 1, 0, 9, 3, 9 }, /* 6463 */ {525, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 0 }, /* 6464 */ {525, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 3, 3 }, /* 6465 */ {525, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 0, 6 }, /* 6466 */ {525, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 3, 9 }, /* 6467 */ {525, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 6, 6 }, /* 6468 */ {525, 0,-1, 0, 0, 0,-1,-1, 0, 0, 3, 3, 3 }, /* 6469 */ {525, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 6470 */ {525, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 9, 3 }, /* 6471 */ {525, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 6 }, /* 6472 */ {525, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 3, 3 }, /* 6473 */ {525, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 0 }, /* 6474 */ {525, 0,-1, 0, 0, 0, 1, 1, 0, 0, 9, 9, 3 }, /* 6475 */ {525, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 6 }, /* 6476 */ {525, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 6477 */ {525, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 6478 */ {525, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 6479 */ {525, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 6480 */ {525, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 6481 */ {525, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 6482 */ {525, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 6483 */ {525, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 6484 */ {525, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6485 */ {525, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 9, 9 }, /* 6486 */ {525, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6487 */ {525, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 3, 9 }, /* 6488 */ {525, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6489 */ {525, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 9, 3 }, /* 6490 */ {525, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6491 */ {525, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 3, 3 }, /* 6492 */ {525, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 6493 */ {525, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 9, 9 }, /* 6494 */ {525, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 6495 */ {525, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 3, 3 }, /* 6496 */ {525, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 6497 */ {525, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 3, 9 }, /* 6498 */ {525, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 6499 */ {525, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 9, 3 }, /* 6500 */ {525, -1, 0, 0, 0,-1, 0, 0, 0,-1, 3, 9, 9 }, /* 6501 */ {525, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 6502 */ {525, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 3 }, /* 6503 */ {525, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 6504 */ {525, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 9, 9 }, /* 6505 */ {525, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 6506 */ {525, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 3 }, /* 6507 */ {525, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 6508 */ {525, 0, 0,-1,-1, 0, 0, 0,-1, 0, 3, 9, 9 }, /* 6509 */ {525, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 6, 6 }, /* 6510 */ {525, 0, 0,-1, 1, 0, 0, 0, 1, 0, 9, 9, 3 }, /* 6511 */ {525, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 0, 6 }, /* 6512 */ {525, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 9, 9 }, /* 6513 */ {525, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 0 }, /* 6514 */ {525, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 9, 3 }, /* 6515 */ {525, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 6516 */ {525, 0,-1, 0, 0, 0,-1,-1, 0, 0, 3, 9, 9 }, /* 6517 */ {525, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 6 }, /* 6518 */ {525, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 3, 9 }, /* 6519 */ {525, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 6520 */ {525, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 9, 9 }, /* 6521 */ {525, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 6 }, /* 6522 */ {525, 0,-1, 0, 0, 0, 1, 1, 0, 0, 9, 3, 9 }, /* 6523 */ {525, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 0 }, /* 6524 */ {525, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 6525 */ {525, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 6526 */ {525, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 6527 */ {525, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 6528 */ {525, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 6529 */ {525, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 6530 */ {525, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 6531 */ {525, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 6532 */ {525, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6533 */ {525, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 3, 9 }, /* 6534 */ {525, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6535 */ {525, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 9, 9 }, /* 6536 */ {525, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6537 */ {525, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 3, 3 }, /* 6538 */ {525, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6539 */ {525, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 9, 3 }, /* 6540 */ {525, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 6541 */ {525, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 3, 9 }, /* 6542 */ {525, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 6543 */ {525, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 9, 3 }, /* 6544 */ {525, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 6545 */ {525, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 9, 9 }, /* 6546 */ {525, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 6547 */ {525, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 3, 3 }, /* 6548 */ {525, -1, 0, 0, 0,-1, 0, 0, 0,-1, 9, 3, 9 }, /* 6549 */ {525, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 6550 */ {525, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 3 }, /* 6551 */ {525, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 6552 */ {525, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 3, 9 }, /* 6553 */ {525, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 6554 */ {525, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 3 }, /* 6555 */ {525, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 6556 */ {525, 0, 0,-1,-1, 0, 0, 0,-1, 0, 9, 3, 9 }, /* 6557 */ {525, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 0, 6 }, /* 6558 */ {525, 0, 0,-1, 1, 0, 0, 0, 1, 0, 3, 3, 3 }, /* 6559 */ {525, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 6, 6 }, /* 6560 */ {525, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 3, 9 }, /* 6561 */ {525, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 6562 */ {525, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 3, 3 }, /* 6563 */ {525, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 0 }, /* 6564 */ {525, 0,-1, 0, 0, 0,-1,-1, 0, 0, 9, 3, 9 }, /* 6565 */ {525, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 6 }, /* 6566 */ {525, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 9, 9 }, /* 6567 */ {525, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 0 }, /* 6568 */ {525, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 3, 9 }, /* 6569 */ {525, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 6 }, /* 6570 */ {525, 0,-1, 0, 0, 0, 1, 1, 0, 0, 3, 9, 9 }, /* 6571 */ {525, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 6572 */ {525, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 6573 */ {525, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 6574 */ {525, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 6575 */ {525, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 6576 */ {525, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 6577 */ {525, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 6578 */ {525, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 6579 */ {525, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 6580 */ {525, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6581 */ {525, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 9, 3 }, /* 6582 */ {525, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6583 */ {525, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 3, 3 }, /* 6584 */ {525, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6585 */ {525, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 9, 9 }, /* 6586 */ {525, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6587 */ {525, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 3, 9 }, /* 6588 */ {525, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 6589 */ {525, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 9, 3 }, /* 6590 */ {525, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 6591 */ {525, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 3, 9 }, /* 6592 */ {525, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 6593 */ {525, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 3, 3 }, /* 6594 */ {525, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 6595 */ {525, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 9, 9 }, /* 6596 */ {525, -1, 0, 0, 0,-1, 0, 0, 0,-1, 9, 9, 3 }, /* 6597 */ {525, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 6598 */ {525, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 9 }, /* 6599 */ {525, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 6600 */ {525, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 9, 3 }, /* 6601 */ {525, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 6602 */ {525, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 9 }, /* 6603 */ {525, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 6604 */ {525, 0, 0,-1,-1, 0, 0, 0,-1, 0, 9, 9, 3 }, /* 6605 */ {525, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 0 }, /* 6606 */ {525, 0, 0,-1, 1, 0, 0, 0, 1, 0, 3, 9, 9 }, /* 6607 */ {525, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 6608 */ {525, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 9, 3 }, /* 6609 */ {525, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 6, 6 }, /* 6610 */ {525, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 9, 9 }, /* 6611 */ {525, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 0, 6 }, /* 6612 */ {525, 0,-1, 0, 0, 0,-1,-1, 0, 0, 9, 9, 3 }, /* 6613 */ {525, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 0 }, /* 6614 */ {525, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 3, 3 }, /* 6615 */ {525, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 6 }, /* 6616 */ {525, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 9, 3 }, /* 6617 */ {525, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 6618 */ {525, 0,-1, 0, 0, 0, 1, 1, 0, 0, 3, 3, 3 }, /* 6619 */ {525, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 6 }, /* 6620 */ {526, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 6621 */ {526, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 6622 */ {526, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 3, 3 }, /* 6623 */ {526, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 3, 3 }, /* 6624 */ {526, -1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 6 }, /* 6625 */ {526, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 6 }, /* 6626 */ {526, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 0, 9 }, /* 6627 */ {526, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 0, 9 }, /* 6628 */ {526, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 3, 3 }, /* 6629 */ {526, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 3 }, /* 6630 */ {526, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 6631 */ {526, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 6632 */ {526, -1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 0, 9 }, /* 6633 */ {526, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 0, 9 }, /* 6634 */ {526, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 6 }, /* 6635 */ {526, 0,-1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 6 }, /* 6636 */ {526, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6637 */ {526, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6638 */ {526, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 0, 3 }, /* 6639 */ {526, 0, 0,-1, 0, 1, 0,-1, 0, 0, 3, 0, 3 }, /* 6640 */ {526, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 9, 3 }, /* 6641 */ {526, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 9, 3 }, /* 6642 */ {526, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 9, 0 }, /* 6643 */ {526, 0, 0,-1, 0,-1, 0, 1, 0, 0, 9, 9, 0 }, /* 6644 */ {526, 0, 0,-1, 1, 0, 0, 0,-1, 0, 3, 0, 3 }, /* 6645 */ {526, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 0, 3 }, /* 6646 */ {526, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 6647 */ {526, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 6648 */ {526, 0, 0,-1,-1, 0, 0, 0, 1, 0, 9, 9, 0 }, /* 6649 */ {526, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 9, 0 }, /* 6650 */ {526, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 9, 3 }, /* 6651 */ {526, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 9, 3 }, /* 6652 */ {526, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 6653 */ {526, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 6654 */ {526, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 3, 0 }, /* 6655 */ {526, -1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 3, 0 }, /* 6656 */ {526, 0,-1, 0, 0, 0, 1,-1, 0, 0, 3, 6, 9 }, /* 6657 */ {526, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 6, 9 }, /* 6658 */ {526, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 9, 9 }, /* 6659 */ {526, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 9, 9 }, /* 6660 */ {526, 0,-1, 0, 0, 0,-1, 1, 0, 0, 3, 3, 0 }, /* 6661 */ {526, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 3, 0 }, /* 6662 */ {526, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 6663 */ {526, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 6664 */ {526, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 9, 9 }, /* 6665 */ {526, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 9, 9 }, /* 6666 */ {526, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 6, 9 }, /* 6667 */ {526, -1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 6, 9 }, /* 6668 */ {526, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 6669 */ {526, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 6670 */ {526, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 9, 9 }, /* 6671 */ {526, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 9, 9 }, /* 6672 */ {526, -1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 0 }, /* 6673 */ {526, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 0 }, /* 6674 */ {526, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 6, 3 }, /* 6675 */ {526, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 6, 3 }, /* 6676 */ {526, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 9, 9 }, /* 6677 */ {526, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 9 }, /* 6678 */ {526, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 6 }, /* 6679 */ {526, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 6 }, /* 6680 */ {526, -1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 6, 3 }, /* 6681 */ {526, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 6, 3 }, /* 6682 */ {526, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 0 }, /* 6683 */ {526, 0,-1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 0 }, /* 6684 */ {526, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6685 */ {526, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6686 */ {526, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 6, 9 }, /* 6687 */ {526, 0, 0,-1, 0, 1, 0,-1, 0, 0, 3, 6, 9 }, /* 6688 */ {526, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 3, 9 }, /* 6689 */ {526, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 3, 9 }, /* 6690 */ {526, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 3, 6 }, /* 6691 */ {526, 0, 0,-1, 0,-1, 0, 1, 0, 0, 9, 3, 6 }, /* 6692 */ {526, 0, 0,-1, 1, 0, 0, 0,-1, 0, 3, 6, 9 }, /* 6693 */ {526, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 6, 9 }, /* 6694 */ {526, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 6, 6 }, /* 6695 */ {526, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 6, 6 }, /* 6696 */ {526, 0, 0,-1,-1, 0, 0, 0, 1, 0, 9, 3, 6 }, /* 6697 */ {526, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 3, 6 }, /* 6698 */ {526, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 3, 9 }, /* 6699 */ {526, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 3, 9 }, /* 6700 */ {526, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 6701 */ {526, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 6702 */ {526, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 9, 6 }, /* 6703 */ {526, -1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 9, 6 }, /* 6704 */ {526, 0,-1, 0, 0, 0, 1,-1, 0, 0, 3, 0, 3 }, /* 6705 */ {526, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 0, 3 }, /* 6706 */ {526, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 3, 3 }, /* 6707 */ {526, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 3, 3 }, /* 6708 */ {526, 0,-1, 0, 0, 0,-1, 1, 0, 0, 3, 9, 6 }, /* 6709 */ {526, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 9, 6 }, /* 6710 */ {526, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 6 }, /* 6711 */ {526, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 6 }, /* 6712 */ {526, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 3, 3 }, /* 6713 */ {526, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 3, 3 }, /* 6714 */ {526, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 0, 3 }, /* 6715 */ {526, -1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 0, 3 }, /* 6716 */ {526, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 6717 */ {526, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 6718 */ {526, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 3, 9 }, /* 6719 */ {526, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 3, 9 }, /* 6720 */ {526, -1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 0 }, /* 6721 */ {526, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 0 }, /* 6722 */ {526, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 0, 3 }, /* 6723 */ {526, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 0, 3 }, /* 6724 */ {526, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 3, 9 }, /* 6725 */ {526, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 3, 9 }, /* 6726 */ {526, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 6 }, /* 6727 */ {526, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 6 }, /* 6728 */ {526, -1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 0, 3 }, /* 6729 */ {526, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 0, 3 }, /* 6730 */ {526, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 0 }, /* 6731 */ {526, 0,-1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 0 }, /* 6732 */ {526, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6733 */ {526, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6734 */ {526, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 0, 9 }, /* 6735 */ {526, 0, 0,-1, 0, 1, 0,-1, 0, 0, 9, 0, 9 }, /* 6736 */ {526, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 9, 9 }, /* 6737 */ {526, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 9, 9 }, /* 6738 */ {526, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 9, 6 }, /* 6739 */ {526, 0, 0,-1, 0,-1, 0, 1, 0, 0, 3, 9, 6 }, /* 6740 */ {526, 0, 0,-1, 1, 0, 0, 0,-1, 0, 9, 0, 9 }, /* 6741 */ {526, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 0, 9 }, /* 6742 */ {526, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 0, 6 }, /* 6743 */ {526, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 0, 6 }, /* 6744 */ {526, 0, 0,-1,-1, 0, 0, 0, 1, 0, 3, 9, 6 }, /* 6745 */ {526, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 9, 6 }, /* 6746 */ {526, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 9, 9 }, /* 6747 */ {526, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 9, 9 }, /* 6748 */ {526, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 6749 */ {526, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 6750 */ {526, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 3, 6 }, /* 6751 */ {526, -1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 3, 6 }, /* 6752 */ {526, 0,-1, 0, 0, 0, 1,-1, 0, 0, 9, 6, 3 }, /* 6753 */ {526, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 6, 3 }, /* 6754 */ {526, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 9, 3 }, /* 6755 */ {526, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 9, 3 }, /* 6756 */ {526, 0,-1, 0, 0, 0,-1, 1, 0, 0, 9, 3, 6 }, /* 6757 */ {526, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 3, 6 }, /* 6758 */ {526, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 6 }, /* 6759 */ {526, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 6 }, /* 6760 */ {526, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 9, 3 }, /* 6761 */ {526, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 9, 3 }, /* 6762 */ {526, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 6, 3 }, /* 6763 */ {526, -1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 6, 3 }, /* 6764 */ {526, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 6765 */ {526, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 6766 */ {526, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 9, 3 }, /* 6767 */ {526, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 9, 3 }, /* 6768 */ {526, -1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 6 }, /* 6769 */ {526, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 6 }, /* 6770 */ {526, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 6, 9 }, /* 6771 */ {526, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 6, 9 }, /* 6772 */ {526, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 9, 3 }, /* 6773 */ {526, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 9, 3 }, /* 6774 */ {526, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 0 }, /* 6775 */ {526, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 0 }, /* 6776 */ {526, -1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 6, 9 }, /* 6777 */ {526, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 6, 9 }, /* 6778 */ {526, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 6 }, /* 6779 */ {526, 0,-1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 6 }, /* 6780 */ {526, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6781 */ {526, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6782 */ {526, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 6, 3 }, /* 6783 */ {526, 0, 0,-1, 0, 1, 0,-1, 0, 0, 9, 6, 3 }, /* 6784 */ {526, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 3, 3 }, /* 6785 */ {526, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 3, 3 }, /* 6786 */ {526, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 3, 0 }, /* 6787 */ {526, 0, 0,-1, 0,-1, 0, 1, 0, 0, 3, 3, 0 }, /* 6788 */ {526, 0, 0,-1, 1, 0, 0, 0,-1, 0, 9, 6, 3 }, /* 6789 */ {526, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 6, 3 }, /* 6790 */ {526, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 0 }, /* 6791 */ {526, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 0 }, /* 6792 */ {526, 0, 0,-1,-1, 0, 0, 0, 1, 0, 3, 3, 0 }, /* 6793 */ {526, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 3, 0 }, /* 6794 */ {526, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 3, 3 }, /* 6795 */ {526, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 3, 3 }, /* 6796 */ {526, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 6797 */ {526, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 6798 */ {526, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 9, 0 }, /* 6799 */ {526, -1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 9, 0 }, /* 6800 */ {526, 0,-1, 0, 0, 0, 1,-1, 0, 0, 9, 0, 9 }, /* 6801 */ {526, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 0, 9 }, /* 6802 */ {526, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 3, 9 }, /* 6803 */ {526, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 3, 9 }, /* 6804 */ {526, 0,-1, 0, 0, 0,-1, 1, 0, 0, 9, 9, 0 }, /* 6805 */ {526, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 9, 0 }, /* 6806 */ {526, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 0 }, /* 6807 */ {526, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 0 }, /* 6808 */ {526, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 3, 9 }, /* 6809 */ {526, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 3, 9 }, /* 6810 */ {526, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 0, 9 }, /* 6811 */ {526, -1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 0, 9 }, /* 6812 */ {527, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 6813 */ {527, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 6814 */ {527, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 6815 */ {527, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 6816 */ {527, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 6817 */ {527, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 6818 */ {527, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 6819 */ {527, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 6820 */ {527, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6821 */ {527, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 3, 3 }, /* 6822 */ {527, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6823 */ {527, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 9, 3 }, /* 6824 */ {527, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6825 */ {527, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 3, 9 }, /* 6826 */ {527, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6827 */ {527, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 9, 9 }, /* 6828 */ {527, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 6829 */ {527, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 3, 3 }, /* 6830 */ {527, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 0 }, /* 6831 */ {527, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 9, 9 }, /* 6832 */ {527, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 6833 */ {527, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 9, 3 }, /* 6834 */ {527, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 6835 */ {527, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 3, 9 }, /* 6836 */ {527, -1, 0, 0, 0,-1, 0, 0, 0,-1, 3, 3, 9 }, /* 6837 */ {527, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 6838 */ {527, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 3 }, /* 6839 */ {527, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 6840 */ {527, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 3, 9 }, /* 6841 */ {527, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 6842 */ {527, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 3 }, /* 6843 */ {527, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 6844 */ {527, 0, 0,-1,-1, 0, 0, 0,-1, 0, 3, 3, 9 }, /* 6845 */ {527, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 6 }, /* 6846 */ {527, 0, 0,-1, 1, 0, 0, 0, 1, 0, 9, 3, 3 }, /* 6847 */ {527, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 6848 */ {527, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 3, 9 }, /* 6849 */ {527, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 0, 0 }, /* 6850 */ {527, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 3, 3 }, /* 6851 */ {527, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 6, 0 }, /* 6852 */ {527, 0,-1, 0, 0, 0,-1,-1, 0, 0, 3, 3, 9 }, /* 6853 */ {527, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 6 }, /* 6854 */ {527, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 9, 9 }, /* 6855 */ {527, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 0 }, /* 6856 */ {527, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 3, 9 }, /* 6857 */ {527, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 6858 */ {527, 0,-1, 0, 0, 0, 1, 1, 0, 0, 9, 9, 9 }, /* 6859 */ {527, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 0, 0 }, /* 6860 */ {527, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 6861 */ {527, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 6862 */ {527, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 6863 */ {527, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 6864 */ {527, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 6865 */ {527, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 6866 */ {527, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 6867 */ {527, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 6868 */ {527, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6869 */ {527, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 9, 9 }, /* 6870 */ {527, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6871 */ {527, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 3, 9 }, /* 6872 */ {527, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6873 */ {527, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 9, 3 }, /* 6874 */ {527, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6875 */ {527, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 3, 3 }, /* 6876 */ {527, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 6877 */ {527, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 9, 9 }, /* 6878 */ {527, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 6879 */ {527, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 3, 3 }, /* 6880 */ {527, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 6881 */ {527, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 3, 9 }, /* 6882 */ {527, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 6883 */ {527, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 9, 3 }, /* 6884 */ {527, -1, 0, 0, 0,-1, 0, 0, 0,-1, 3, 9, 3 }, /* 6885 */ {527, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 6886 */ {527, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 9 }, /* 6887 */ {527, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 6888 */ {527, -1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 9, 3 }, /* 6889 */ {527, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 6890 */ {527, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 9 }, /* 6891 */ {527, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 6892 */ {527, 0, 0,-1,-1, 0, 0, 0,-1, 0, 3, 9, 3 }, /* 6893 */ {527, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 6, 0 }, /* 6894 */ {527, 0, 0,-1, 1, 0, 0, 0, 1, 0, 9, 9, 9 }, /* 6895 */ {527, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 0, 0 }, /* 6896 */ {527, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 9, 3 }, /* 6897 */ {527, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 6898 */ {527, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 9, 9 }, /* 6899 */ {527, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 6 }, /* 6900 */ {527, 0,-1, 0, 0, 0,-1,-1, 0, 0, 3, 9, 3 }, /* 6901 */ {527, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 6, 0 }, /* 6902 */ {527, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 3, 3 }, /* 6903 */ {527, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 6 }, /* 6904 */ {527, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 9, 3 }, /* 6905 */ {527, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 0 }, /* 6906 */ {527, 0,-1, 0, 0, 0, 1, 1, 0, 0, 9, 3, 3 }, /* 6907 */ {527, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 6908 */ {527, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 6909 */ {527, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 6910 */ {527, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 0 }, /* 6911 */ {527, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 6912 */ {527, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 6913 */ {527, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 6914 */ {527, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 0 }, /* 6915 */ {527, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 6916 */ {527, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 6917 */ {527, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 3, 9 }, /* 6918 */ {527, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 6919 */ {527, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 9, 9 }, /* 6920 */ {527, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 6921 */ {527, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 3, 3 }, /* 6922 */ {527, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 6923 */ {527, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 9, 3 }, /* 6924 */ {527, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 6925 */ {527, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 3, 9 }, /* 6926 */ {527, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 6927 */ {527, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 9, 3 }, /* 6928 */ {527, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 6929 */ {527, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 9, 9 }, /* 6930 */ {527, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 6931 */ {527, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 3, 3 }, /* 6932 */ {527, -1, 0, 0, 0,-1, 0, 0, 0,-1, 9, 3, 3 }, /* 6933 */ {527, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 6934 */ {527, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 9 }, /* 6935 */ {527, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 6936 */ {527, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 3, 3 }, /* 6937 */ {527, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 6938 */ {527, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 9 }, /* 6939 */ {527, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 6940 */ {527, 0, 0,-1,-1, 0, 0, 0,-1, 0, 9, 3, 3 }, /* 6941 */ {527, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 0, 0 }, /* 6942 */ {527, 0, 0,-1, 1, 0, 0, 0, 1, 0, 3, 3, 9 }, /* 6943 */ {527, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 6, 0 }, /* 6944 */ {527, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 3, 3 }, /* 6945 */ {527, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 6 }, /* 6946 */ {527, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 3, 9 }, /* 6947 */ {527, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 6948 */ {527, 0,-1, 0, 0, 0,-1,-1, 0, 0, 9, 3, 3 }, /* 6949 */ {527, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 0, 0 }, /* 6950 */ {527, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 9, 3 }, /* 6951 */ {527, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 6952 */ {527, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 3, 3 }, /* 6953 */ {527, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 0 }, /* 6954 */ {527, 0,-1, 0, 0, 0, 1, 1, 0, 0, 3, 9, 3 }, /* 6955 */ {527, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 6 }, /* 6956 */ {527, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 6957 */ {527, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 6958 */ {527, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 6959 */ {527, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 6960 */ {527, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 6961 */ {527, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 6962 */ {527, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 6963 */ {527, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 6964 */ {527, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 6965 */ {527, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 9, 3 }, /* 6966 */ {527, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 6967 */ {527, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 3, 3 }, /* 6968 */ {527, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 6969 */ {527, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 9, 9 }, /* 6970 */ {527, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 6971 */ {527, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 3, 9 }, /* 6972 */ {527, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 6973 */ {527, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 9, 3 }, /* 6974 */ {527, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 6975 */ {527, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 3, 9 }, /* 6976 */ {527, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 0 }, /* 6977 */ {527, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 3, 3 }, /* 6978 */ {527, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 6979 */ {527, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 9, 9 }, /* 6980 */ {527, -1, 0, 0, 0,-1, 0, 0, 0,-1, 9, 9, 9 }, /* 6981 */ {527, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 6982 */ {527, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 3 }, /* 6983 */ {527, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 6984 */ {527, -1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 9, 9 }, /* 6985 */ {527, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 6986 */ {527, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 3 }, /* 6987 */ {527, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 6988 */ {527, 0, 0,-1,-1, 0, 0, 0,-1, 0, 9, 9, 9 }, /* 6989 */ {527, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 6990 */ {527, 0, 0,-1, 1, 0, 0, 0, 1, 0, 3, 9, 3 }, /* 6991 */ {527, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 6 }, /* 6992 */ {527, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 9, 9 }, /* 6993 */ {527, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 6, 0 }, /* 6994 */ {527, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 9, 3 }, /* 6995 */ {527, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 0, 0 }, /* 6996 */ {527, 0,-1, 0, 0, 0,-1,-1, 0, 0, 9, 9, 9 }, /* 6997 */ {527, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 6998 */ {527, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 3, 9 }, /* 6999 */ {527, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 0 }, /* 7000 */ {527, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 9, 9 }, /* 7001 */ {527, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6 }, /* 7002 */ {527, 0,-1, 0, 0, 0, 1, 1, 0, 0, 3, 3, 9 }, /* 7003 */ {527, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 6, 0 }, /* 7004 */ {528, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 7005 */ {528, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 7006 */ {528, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 3, 9 }, /* 7007 */ {528, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 3, 9 }, /* 7008 */ {528, -1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 3, 6 }, /* 7009 */ {528, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 3, 6 }, /* 7010 */ {528, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 0, 3 }, /* 7011 */ {528, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 0, 3 }, /* 7012 */ {528, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 3, 3 }, /* 7013 */ {528, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 3 }, /* 7014 */ {528, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 6 }, /* 7015 */ {528, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 6 }, /* 7016 */ {528, -1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 0, 9 }, /* 7017 */ {528, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 0, 9 }, /* 7018 */ {528, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 0 }, /* 7019 */ {528, 0,-1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 0 }, /* 7020 */ {528, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 7021 */ {528, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 7022 */ {528, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 0, 3 }, /* 7023 */ {528, 0, 0,-1, 0, 1, 0,-1, 0, 0, 9, 0, 3 }, /* 7024 */ {528, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 9, 3 }, /* 7025 */ {528, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 9, 3 }, /* 7026 */ {528, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 9, 0 }, /* 7027 */ {528, 0, 0,-1, 0,-1, 0, 1, 0, 0, 3, 9, 0 }, /* 7028 */ {528, 0, 0,-1, 1, 0, 0, 0,-1, 0, 3, 0, 3 }, /* 7029 */ {528, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 0, 3 }, /* 7030 */ {528, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 0, 0 }, /* 7031 */ {528, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 0, 0 }, /* 7032 */ {528, 0, 0,-1,-1, 0, 0, 0, 1, 0, 9, 9, 0 }, /* 7033 */ {528, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 9, 0 }, /* 7034 */ {528, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 9, 3 }, /* 7035 */ {528, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 9, 3 }, /* 7036 */ {528, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 7037 */ {528, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 7038 */ {528, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 9, 0 }, /* 7039 */ {528, -1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 9, 0 }, /* 7040 */ {528, 0,-1, 0, 0, 0, 1,-1, 0, 0, 3, 6, 9 }, /* 7041 */ {528, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 6, 9 }, /* 7042 */ {528, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 3, 9 }, /* 7043 */ {528, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 3, 9 }, /* 7044 */ {528, 0,-1, 0, 0, 0,-1, 1, 0, 0, 3, 3, 0 }, /* 7045 */ {528, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 3, 0 }, /* 7046 */ {528, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 6, 0 }, /* 7047 */ {528, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 6, 0 }, /* 7048 */ {528, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 9, 9 }, /* 7049 */ {528, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 9, 9 }, /* 7050 */ {528, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 0, 9 }, /* 7051 */ {528, -1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 0, 9 }, /* 7052 */ {528, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 6 }, /* 7053 */ {528, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 6, 6 }, /* 7054 */ {528, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 9, 3 }, /* 7055 */ {528, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 9, 3 }, /* 7056 */ {528, -1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 9, 0 }, /* 7057 */ {528, 1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 9, 0 }, /* 7058 */ {528, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 6, 9 }, /* 7059 */ {528, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 6, 9 }, /* 7060 */ {528, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 9, 9 }, /* 7061 */ {528, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 9 }, /* 7062 */ {528, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 6, 0 }, /* 7063 */ {528, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 6, 0 }, /* 7064 */ {528, -1, 0, 0, 0, 1, 0, 0, 0,-1, 9, 6, 3 }, /* 7065 */ {528, 1, 0, 0, 0,-1, 0, 0, 0, 1, 9, 6, 3 }, /* 7066 */ {528, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 6 }, /* 7067 */ {528, 0,-1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 6 }, /* 7068 */ {528, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 7069 */ {528, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 7070 */ {528, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 6, 9 }, /* 7071 */ {528, 0, 0,-1, 0, 1, 0,-1, 0, 0, 9, 6, 9 }, /* 7072 */ {528, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 3, 9 }, /* 7073 */ {528, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 3, 9 }, /* 7074 */ {528, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 3, 6 }, /* 7075 */ {528, 0, 0,-1, 0,-1, 0, 1, 0, 0, 3, 3, 6 }, /* 7076 */ {528, 0, 0,-1, 1, 0, 0, 0,-1, 0, 3, 6, 9 }, /* 7077 */ {528, 0, 0, 1,-1, 0, 0, 0, 1, 0, 3, 6, 9 }, /* 7078 */ {528, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 7079 */ {528, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 7080 */ {528, 0, 0,-1,-1, 0, 0, 0, 1, 0, 9, 3, 6 }, /* 7081 */ {528, 0, 0, 1, 1, 0, 0, 0,-1, 0, 9, 3, 6 }, /* 7082 */ {528, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 3, 9 }, /* 7083 */ {528, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 3, 9 }, /* 7084 */ {528, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 6, 6 }, /* 7085 */ {528, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 6, 6 }, /* 7086 */ {528, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 3, 6 }, /* 7087 */ {528, -1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 3, 6 }, /* 7088 */ {528, 0,-1, 0, 0, 0, 1,-1, 0, 0, 3, 0, 3 }, /* 7089 */ {528, 0, 1, 0, 0, 0,-1, 1, 0, 0, 3, 0, 3 }, /* 7090 */ {528, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 9, 3 }, /* 7091 */ {528, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 9, 3 }, /* 7092 */ {528, 0,-1, 0, 0, 0,-1, 1, 0, 0, 3, 9, 6 }, /* 7093 */ {528, 0, 1, 0, 0, 0, 1,-1, 0, 0, 3, 9, 6 }, /* 7094 */ {528, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 6 }, /* 7095 */ {528, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 6 }, /* 7096 */ {528, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 3, 3 }, /* 7097 */ {528, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 3, 3 }, /* 7098 */ {528, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 6, 3 }, /* 7099 */ {528, -1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 6, 3 }, /* 7100 */ {528, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 6 }, /* 7101 */ {528, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 0, 6 }, /* 7102 */ {528, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 3, 3 }, /* 7103 */ {528, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 3, 3 }, /* 7104 */ {528, -1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 3, 0 }, /* 7105 */ {528, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 3, 0 }, /* 7106 */ {528, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 0, 9 }, /* 7107 */ {528, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 0, 9 }, /* 7108 */ {528, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 3, 9 }, /* 7109 */ {528, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 3, 9 }, /* 7110 */ {528, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 0, 0 }, /* 7111 */ {528, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 0, 0 }, /* 7112 */ {528, -1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 0, 3 }, /* 7113 */ {528, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 0, 3 }, /* 7114 */ {528, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 6 }, /* 7115 */ {528, 0,-1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 6 }, /* 7116 */ {528, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 7117 */ {528, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 7118 */ {528, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 0, 9 }, /* 7119 */ {528, 0, 0,-1, 0, 1, 0,-1, 0, 0, 3, 0, 9 }, /* 7120 */ {528, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 9, 9 }, /* 7121 */ {528, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 9, 9 }, /* 7122 */ {528, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 9, 6 }, /* 7123 */ {528, 0, 0,-1, 0,-1, 0, 1, 0, 0, 9, 9, 6 }, /* 7124 */ {528, 0, 0,-1, 1, 0, 0, 0,-1, 0, 9, 0, 9 }, /* 7125 */ {528, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 0, 9 }, /* 7126 */ {528, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 6 }, /* 7127 */ {528, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 6 }, /* 7128 */ {528, 0, 0,-1,-1, 0, 0, 0, 1, 0, 3, 9, 6 }, /* 7129 */ {528, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 9, 6 }, /* 7130 */ {528, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 9, 9 }, /* 7131 */ {528, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 9, 9 }, /* 7132 */ {528, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 0, 6 }, /* 7133 */ {528, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 0, 6 }, /* 7134 */ {528, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 9, 6 }, /* 7135 */ {528, -1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 9, 6 }, /* 7136 */ {528, 0,-1, 0, 0, 0, 1,-1, 0, 0, 9, 6, 3 }, /* 7137 */ {528, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 6, 3 }, /* 7138 */ {528, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 3, 3 }, /* 7139 */ {528, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 3, 3 }, /* 7140 */ {528, 0,-1, 0, 0, 0,-1, 1, 0, 0, 9, 3, 6 }, /* 7141 */ {528, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 3, 6 }, /* 7142 */ {528, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 7143 */ {528, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 7144 */ {528, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 9, 3 }, /* 7145 */ {528, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 9, 3 }, /* 7146 */ {528, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 0, 3 }, /* 7147 */ {528, -1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 0, 3 }, /* 7148 */ {528, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 7149 */ {528, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 7150 */ {528, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 9, 9 }, /* 7151 */ {528, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 9, 9 }, /* 7152 */ {528, -1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 9, 6 }, /* 7153 */ {528, 1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 9, 6 }, /* 7154 */ {528, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 6, 3 }, /* 7155 */ {528, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 6, 3 }, /* 7156 */ {528, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 9, 3 }, /* 7157 */ {528, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 9, 3 }, /* 7158 */ {528, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 7159 */ {528, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 7160 */ {528, -1, 0, 0, 0, 1, 0, 0, 0,-1, 3, 6, 9 }, /* 7161 */ {528, 1, 0, 0, 0,-1, 0, 0, 0, 1, 3, 6, 9 }, /* 7162 */ {528, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 0 }, /* 7163 */ {528, 0,-1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 0 }, /* 7164 */ {528, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 7165 */ {528, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 7166 */ {528, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 6, 3 }, /* 7167 */ {528, 0, 0,-1, 0, 1, 0,-1, 0, 0, 3, 6, 3 }, /* 7168 */ {528, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 3, 3 }, /* 7169 */ {528, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 3, 3 }, /* 7170 */ {528, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 3, 0 }, /* 7171 */ {528, 0, 0,-1, 0,-1, 0, 1, 0, 0, 9, 3, 0 }, /* 7172 */ {528, 0, 0,-1, 1, 0, 0, 0,-1, 0, 9, 6, 3 }, /* 7173 */ {528, 0, 0, 1,-1, 0, 0, 0, 1, 0, 9, 6, 3 }, /* 7174 */ {528, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 6, 0 }, /* 7175 */ {528, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 6, 0 }, /* 7176 */ {528, 0, 0,-1,-1, 0, 0, 0, 1, 0, 3, 3, 0 }, /* 7177 */ {528, 0, 0, 1, 1, 0, 0, 0,-1, 0, 3, 3, 0 }, /* 7178 */ {528, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 3, 3 }, /* 7179 */ {528, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 3, 3 }, /* 7180 */ {528, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 7181 */ {528, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 7182 */ {528, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 3, 0 }, /* 7183 */ {528, -1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 3, 0 }, /* 7184 */ {528, 0,-1, 0, 0, 0, 1,-1, 0, 0, 9, 0, 9 }, /* 7185 */ {528, 0, 1, 0, 0, 0,-1, 1, 0, 0, 9, 0, 9 }, /* 7186 */ {528, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 9, 9 }, /* 7187 */ {528, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 9, 9 }, /* 7188 */ {528, 0,-1, 0, 0, 0,-1, 1, 0, 0, 9, 9, 0 }, /* 7189 */ {528, 0, 1, 0, 0, 0, 1,-1, 0, 0, 9, 9, 0 }, /* 7190 */ {528, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 0, 0 }, /* 7191 */ {528, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 0, 0 }, /* 7192 */ {528, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 3, 9 }, /* 7193 */ {528, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 3, 9 }, /* 7194 */ {528, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 6, 9 }, /* 7195 */ {528, -1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 6, 9 }, /* 7196 */ {529, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 7197 */ {529, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 7198 */ {529, 0,-1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 7199 */ {529, 0, 1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 7200 */ {529, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 7201 */ {529, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 7202 */ {529, 0, 1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 7203 */ {529, 0,-1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 7204 */ {529, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 7205 */ {529, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 7206 */ {529, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 7207 */ {529, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 7208 */ {529, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 0, 0 }, /* 7209 */ {529, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 0, 0 }, /* 7210 */ {529, 0, 1, 0, 1, 0, 0, 0, 0,-1, 0, 0, 0 }, /* 7211 */ {529, 0,-1, 0,-1, 0, 0, 0, 0, 1, 0, 0, 0 }, /* 7212 */ {529, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 7213 */ {529, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 7214 */ {529, 0, 0, 1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 7215 */ {529, 0, 0,-1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 7216 */ {529, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 7217 */ {529, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 7218 */ {529, 0, 0, 1, 0, 1, 0,-1, 0, 0, 0, 0, 0 }, /* 7219 */ {529, 0, 0,-1, 0,-1, 0, 1, 0, 0, 0, 0, 0 }, /* 7220 */ {529, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 7221 */ {529, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 7222 */ {529, 0, 0,-1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 7223 */ {529, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 7224 */ {529, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 7225 */ {529, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 7226 */ {529, 0, 0,-1, 0, 1, 0, 1, 0, 0, 0, 0, 0 }, /* 7227 */ {529, 0, 0, 1, 0,-1, 0,-1, 0, 0, 0, 0, 0 }, /* 7228 */ {529, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 7229 */ {529, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 7230 */ {529, 1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 7231 */ {529, -1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 7232 */ {529, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 7233 */ {529, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 7234 */ {529, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 7235 */ {529, 1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 7236 */ {529, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 0, 0 }, /* 7237 */ {529, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 0, 0 }, /* 7238 */ {529, -1, 0, 0, 0, 0,-1, 0,-1, 0, 0, 0, 0 }, /* 7239 */ {529, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 }, /* 7240 */ {529, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 7241 */ {529, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 7242 */ {529, 1, 0, 0, 0, 0,-1, 0, 1, 0, 0, 0, 0 }, /* 7243 */ {529, -1, 0, 0, 0, 0, 1, 0,-1, 0, 0, 0, 0 }, /* 7244 */ {529, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 7245 */ {529, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 7246 */ {529, 0,-1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 7247 */ {529, 0, 1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 7248 */ {529, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 7249 */ {529, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 7250 */ {529, 0, 1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 7251 */ {529, 0,-1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 7252 */ {529, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 7253 */ {529, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 7254 */ {529, 0,-1, 0,-1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 7255 */ {529, 0, 1, 0, 1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 7256 */ {529, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 6, 6 }, /* 7257 */ {529, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 6, 6 }, /* 7258 */ {529, 0, 1, 0, 1, 0, 0, 0, 0,-1, 6, 6, 6 }, /* 7259 */ {529, 0,-1, 0,-1, 0, 0, 0, 0, 1, 6, 6, 6 }, /* 7260 */ {529, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 7261 */ {529, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 7262 */ {529, 0, 0, 1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 7263 */ {529, 0, 0,-1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 7264 */ {529, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 7265 */ {529, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 7266 */ {529, 0, 0, 1, 0, 1, 0,-1, 0, 0, 6, 6, 6 }, /* 7267 */ {529, 0, 0,-1, 0,-1, 0, 1, 0, 0, 6, 6, 6 }, /* 7268 */ {529, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 7269 */ {529, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 7270 */ {529, 0, 0,-1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 7271 */ {529, 0, 0, 1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 7272 */ {529, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 7273 */ {529, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 7274 */ {529, 0, 0,-1, 0, 1, 0, 1, 0, 0, 6, 6, 6 }, /* 7275 */ {529, 0, 0, 1, 0,-1, 0,-1, 0, 0, 6, 6, 6 }, /* 7276 */ {529, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 7277 */ {529, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 7278 */ {529, 1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 7279 */ {529, -1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 7280 */ {529, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 7281 */ {529, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 7282 */ {529, -1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 7283 */ {529, 1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 7284 */ {529, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 6, 6 }, /* 7285 */ {529, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 6, 6 }, /* 7286 */ {529, -1, 0, 0, 0, 0,-1, 0,-1, 0, 6, 6, 6 }, /* 7287 */ {529, 1, 0, 0, 0, 0, 1, 0, 1, 0, 6, 6, 6 }, /* 7288 */ {529, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 7289 */ {529, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 7290 */ {529, 1, 0, 0, 0, 0,-1, 0, 1, 0, 6, 6, 6 }, /* 7291 */ {529, -1, 0, 0, 0, 0, 1, 0,-1, 0, 6, 6, 6 }, /* 7292 */ {530, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 }, /* 7293 */ {530, -1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 0 }, /* 7294 */ {530, 0,-1, 0, 1, 0, 0, 0, 0, 1, 3, 9, 3 }, /* 7295 */ {530, 0, 1, 0,-1, 0, 0, 0, 0,-1, 3, 9, 3 }, /* 7296 */ {530, -1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 6 }, /* 7297 */ {530, 1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 6 }, /* 7298 */ {530, 0, 1, 0,-1, 0, 0, 0, 0, 1, 3, 3, 9 }, /* 7299 */ {530, 0,-1, 0, 1, 0, 0, 0, 0,-1, 3, 3, 9 }, /* 7300 */ {530, 1, 0, 0, 0,-1, 0, 0, 0,-1, 0, 0, 6 }, /* 7301 */ {530, -1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6 }, /* 7302 */ {530, 0,-1, 0,-1, 0, 0, 0, 0,-1, 3, 3, 3 }, /* 7303 */ {530, 0, 1, 0, 1, 0, 0, 0, 0, 1, 3, 3, 3 }, /* 7304 */ {530, -1, 0, 0, 0, 1, 0, 0, 0,-1, 6, 0, 0 }, /* 7305 */ {530, 1, 0, 0, 0,-1, 0, 0, 0, 1, 6, 0, 0 }, /* 7306 */ {530, 0, 1, 0, 1, 0, 0, 0, 0,-1, 3, 9, 9 }, /* 7307 */ {530, 0,-1, 0,-1, 0, 0, 0, 0, 1, 3, 9, 9 }, /* 7308 */ {530, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0 }, /* 7309 */ {530, 0, 0,-1,-1, 0, 0, 0,-1, 0, 0, 0, 0 }, /* 7310 */ {530, 0, 0, 1, 0,-1, 0, 1, 0, 0, 3, 3, 9 }, /* 7311 */ {530, 0, 0,-1, 0, 1, 0,-1, 0, 0, 3, 3, 9 }, /* 7312 */ {530, 0, 0, 1,-1, 0, 0, 0,-1, 0, 6, 6, 0 }, /* 7313 */ {530, 0, 0,-1, 1, 0, 0, 0, 1, 0, 6, 6, 0 }, /* 7314 */ {530, 0, 0, 1, 0, 1, 0,-1, 0, 0, 9, 3, 3 }, /* 7315 */ {530, 0, 0,-1, 0,-1, 0, 1, 0, 0, 9, 3, 3 }, /* 7316 */ {530, 0, 0,-1, 1, 0, 0, 0,-1, 0, 6, 0, 0 }, /* 7317 */ {530, 0, 0, 1,-1, 0, 0, 0, 1, 0, 6, 0, 0 }, /* 7318 */ {530, 0, 0,-1, 0,-1, 0,-1, 0, 0, 3, 3, 3 }, /* 7319 */ {530, 0, 0, 1, 0, 1, 0, 1, 0, 0, 3, 3, 3 }, /* 7320 */ {530, 0, 0,-1,-1, 0, 0, 0, 1, 0, 0, 6, 0 }, /* 7321 */ {530, 0, 0, 1, 1, 0, 0, 0,-1, 0, 0, 6, 0 }, /* 7322 */ {530, 0, 0,-1, 0, 1, 0, 1, 0, 0, 9, 3, 9 }, /* 7323 */ {530, 0, 0, 1, 0,-1, 0,-1, 0, 0, 9, 3, 9 }, /* 7324 */ {530, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, /* 7325 */ {530, 0,-1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 0 }, /* 7326 */ {530, 1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 3, 3 }, /* 7327 */ {530, -1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 3, 3 }, /* 7328 */ {530, 0,-1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 6 }, /* 7329 */ {530, 0, 1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 6 }, /* 7330 */ {530, -1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 9, 3 }, /* 7331 */ {530, 1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 9, 3 }, /* 7332 */ {530, 0,-1, 0, 0, 0,-1, 1, 0, 0, 0, 6, 0 }, /* 7333 */ {530, 0, 1, 0, 0, 0, 1,-1, 0, 0, 0, 6, 0 }, /* 7334 */ {530, -1, 0, 0, 0, 0,-1, 0,-1, 0, 3, 3, 3 }, /* 7335 */ {530, 1, 0, 0, 0, 0, 1, 0, 1, 0, 3, 3, 3 }, /* 7336 */ {530, 0, 1, 0, 0, 0,-1,-1, 0, 0, 0, 0, 6 }, /* 7337 */ {530, 0,-1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 6 }, /* 7338 */ {530, 1, 0, 0, 0, 0,-1, 0, 1, 0, 9, 9, 3 }, /* 7339 */ {530, -1, 0, 0, 0, 0, 1, 0,-1, 0, 9, 9, 3 }, /* 7340 */ {530, 1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 6 }, /* 7341 */ {530, -1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 6 }, /* 7342 */ {530, 0,-1, 0, 1, 0, 0, 0, 0, 1, 9, 3, 9 }, /* 7343 */ {530, 0, 1, 0,-1, 0, 0, 0, 0,-1, 9, 3, 9 }, /* 7344 */ {530, -1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 0 }, /* 7345 */ {530, 1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 0 }, /* 7346 */ {530, 0, 1, 0,-1, 0, 0, 0, 0, 1, 9, 9, 3 }, /* 7347 */ {530, 0,-1, 0, 1, 0, 0, 0, 0,-1, 9, 9, 3 }, /* 7348 */ {530, 1, 0, 0, 0,-1, 0, 0, 0,-1, 6, 6, 0 }, /* 7349 */ {530, -1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 6, 0 }, /* 7350 */ {530, 0,-1, 0,-1, 0, 0, 0, 0,-1, 9, 9, 9 }, /* 7351 */ {530, 0, 1, 0, 1, 0, 0, 0, 0, 1, 9, 9, 9 }, /* 7352 */ {530, -1, 0, 0, 0, 1, 0, 0, 0,-1, 0, 6, 6 }, /* 7353 */ {530, 1, 0, 0, 0,-1, 0, 0, 0, 1, 0, 6, 6 }, /* 7354 */ {530, 0, 1, 0, 1, 0, 0, 0, 0,-1, 9, 3, 3 }, /* 7355 */ {530, 0,-1, 0,-1, 0, 0, 0, 0, 1, 9, 3, 3 }, /* 7356 */ {530, 0, 0, 1, 1, 0, 0, 0, 1, 0, 6, 6, 6 }, /* 7357 */ {530, 0, 0,-1,-1, 0, 0, 0,-1, 0, 6, 6, 6 }, /* 7358 */ {530, 0, 0, 1, 0,-1, 0, 1, 0, 0, 9, 9, 3 }, /* 7359 */ {530, 0, 0,-1, 0, 1, 0,-1, 0, 0, 9, 9, 3 }, /* 7360 */ {530, 0, 0, 1,-1, 0, 0, 0,-1, 0, 0, 0, 6 }, /* 7361 */ {530, 0, 0,-1, 1, 0, 0, 0, 1, 0, 0, 0, 6 }, /* 7362 */ {530, 0, 0, 1, 0, 1, 0,-1, 0, 0, 3, 9, 9 }, /* 7363 */ {530, 0, 0,-1, 0,-1, 0, 1, 0, 0, 3, 9, 9 }, /* 7364 */ {530, 0, 0,-1, 1, 0, 0, 0,-1, 0, 0, 6, 6 }, /* 7365 */ {530, 0, 0, 1,-1, 0, 0, 0, 1, 0, 0, 6, 6 }, /* 7366 */ {530, 0, 0,-1, 0,-1, 0,-1, 0, 0, 9, 9, 9 }, /* 7367 */ {530, 0, 0, 1, 0, 1, 0, 1, 0, 0, 9, 9, 9 }, /* 7368 */ {530, 0, 0,-1,-1, 0, 0, 0, 1, 0, 6, 0, 6 }, /* 7369 */ {530, 0, 0, 1, 1, 0, 0, 0,-1, 0, 6, 0, 6 }, /* 7370 */ {530, 0, 0,-1, 0, 1, 0, 1, 0, 0, 3, 9, 3 }, /* 7371 */ {530, 0, 0, 1, 0,-1, 0,-1, 0, 0, 3, 9, 3 }, /* 7372 */ {530, 0, 1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 6 }, /* 7373 */ {530, 0,-1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 6 }, /* 7374 */ {530, 1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 9, 9 }, /* 7375 */ {530, -1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 9, 9 }, /* 7376 */ {530, 0,-1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 0 }, /* 7377 */ {530, 0, 1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 0 }, /* 7378 */ {530, -1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 3, 9 }, /* 7379 */ {530, 1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 3, 9 }, /* 7380 */ {530, 0,-1, 0, 0, 0,-1, 1, 0, 0, 6, 0, 6 }, /* 7381 */ {530, 0, 1, 0, 0, 0, 1,-1, 0, 0, 6, 0, 6 }, /* 7382 */ {530, -1, 0, 0, 0, 0,-1, 0,-1, 0, 9, 9, 9 }, /* 7383 */ {530, 1, 0, 0, 0, 0, 1, 0, 1, 0, 9, 9, 9 }, /* 7384 */ {530, 0, 1, 0, 0, 0,-1,-1, 0, 0, 6, 6, 0 }, /* 7385 */ {530, 0,-1, 0, 0, 0, 1, 1, 0, 0, 6, 6, 0 }, /* 7386 */ {530, 1, 0, 0, 0, 0,-1, 0, 1, 0, 3, 3, 9 }, /* 7387 */ {530, -1, 0, 0, 0, 0, 1, 0,-1, 0, 3, 3, 9 }, /* 7388 */ }; static const int symmetry_operation_index[][2] = { { 0, 0}, /* 0 */ { 1, 1}, /* 1 */ { 2, 2}, /* 2 */ { 2, 4}, /* 3 */ { 2, 6}, /* 4 */ { 2, 8}, /* 5 */ { 2, 10}, /* 6 */ { 2, 12}, /* 7 */ { 2, 14}, /* 8 */ { 4, 16}, /* 9 */ { 4, 20}, /* 10 */ { 4, 24}, /* 11 */ { 4, 28}, /* 12 */ { 4, 32}, /* 13 */ { 4, 36}, /* 14 */ { 4, 40}, /* 15 */ { 4, 44}, /* 16 */ { 4, 48}, /* 17 */ { 2, 52}, /* 18 */ { 2, 54}, /* 19 */ { 2, 56}, /* 20 */ { 2, 58}, /* 21 */ { 2, 60}, /* 22 */ { 2, 62}, /* 23 */ { 2, 64}, /* 24 */ { 2, 66}, /* 25 */ { 2, 68}, /* 26 */ { 2, 70}, /* 27 */ { 2, 72}, /* 28 */ { 2, 74}, /* 29 */ { 4, 76}, /* 30 */ { 4, 80}, /* 31 */ { 4, 84}, /* 32 */ { 4, 88}, /* 33 */ { 4, 92}, /* 34 */ { 4, 96}, /* 35 */ { 4, 100}, /* 36 */ { 4, 104}, /* 37 */ { 4, 108}, /* 38 */ { 4, 112}, /* 39 */ { 4, 116}, /* 40 */ { 4, 120}, /* 41 */ { 4, 124}, /* 42 */ { 4, 128}, /* 43 */ { 4, 132}, /* 44 */ { 4, 136}, /* 45 */ { 4, 140}, /* 46 */ { 4, 144}, /* 47 */ { 4, 148}, /* 48 */ { 4, 152}, /* 49 */ { 4, 156}, /* 50 */ { 4, 160}, /* 51 */ { 4, 164}, /* 52 */ { 4, 168}, /* 53 */ { 4, 172}, /* 54 */ { 4, 176}, /* 55 */ { 4, 180}, /* 56 */ { 4, 184}, /* 57 */ { 4, 188}, /* 58 */ { 4, 192}, /* 59 */ { 4, 196}, /* 60 */ { 4, 200}, /* 61 */ { 4, 204}, /* 62 */ { 8, 208}, /* 63 */ { 8, 216}, /* 64 */ { 8, 224}, /* 65 */ { 8, 232}, /* 66 */ { 8, 240}, /* 67 */ { 8, 248}, /* 68 */ { 8, 256}, /* 69 */ { 8, 264}, /* 70 */ { 8, 272}, /* 71 */ { 4, 280}, /* 72 */ { 4, 284}, /* 73 */ { 4, 288}, /* 74 */ { 4, 292}, /* 75 */ { 4, 296}, /* 76 */ { 4, 300}, /* 77 */ { 4, 304}, /* 78 */ { 4, 308}, /* 79 */ { 4, 312}, /* 80 */ { 4, 316}, /* 81 */ { 4, 320}, /* 82 */ { 4, 324}, /* 83 */ { 4, 328}, /* 84 */ { 4, 332}, /* 85 */ { 4, 336}, /* 86 */ { 4, 340}, /* 87 */ { 4, 344}, /* 88 */ { 4, 348}, /* 89 */ { 8, 352}, /* 90 */ { 8, 360}, /* 91 */ { 8, 368}, /* 92 */ { 8, 376}, /* 93 */ { 8, 384}, /* 94 */ { 8, 392}, /* 95 */ { 8, 400}, /* 96 */ { 8, 408}, /* 97 */ { 8, 416}, /* 98 */ { 8, 424}, /* 99 */ { 8, 432}, /* 100 */ { 8, 440}, /* 101 */ { 8, 448}, /* 102 */ { 8, 456}, /* 103 */ { 8, 464}, /* 104 */ { 8, 472}, /* 105 */ { 8, 480}, /* 106 */ { 8, 488}, /* 107 */ { 4, 496}, /* 108 */ { 4, 500}, /* 109 */ { 4, 504}, /* 110 */ { 4, 508}, /* 111 */ { 4, 512}, /* 112 */ { 4, 516}, /* 113 */ { 4, 520}, /* 114 */ { 4, 524}, /* 115 */ { 8, 528}, /* 116 */ { 8, 536}, /* 117 */ { 8, 544}, /* 118 */ { 8, 552}, /* 119 */ { 8, 560}, /* 120 */ { 8, 568}, /* 121 */ { 16, 576}, /* 122 */ { 8, 592}, /* 123 */ { 8, 600}, /* 124 */ { 4, 608}, /* 125 */ { 4, 612}, /* 126 */ { 4, 616}, /* 127 */ { 4, 620}, /* 128 */ { 4, 624}, /* 129 */ { 4, 628}, /* 130 */ { 4, 632}, /* 131 */ { 4, 636}, /* 132 */ { 4, 640}, /* 133 */ { 4, 644}, /* 134 */ { 4, 648}, /* 135 */ { 4, 652}, /* 136 */ { 4, 656}, /* 137 */ { 4, 660}, /* 138 */ { 4, 664}, /* 139 */ { 4, 668}, /* 140 */ { 4, 672}, /* 141 */ { 4, 676}, /* 142 */ { 4, 680}, /* 143 */ { 4, 684}, /* 144 */ { 4, 688}, /* 145 */ { 4, 692}, /* 146 */ { 4, 696}, /* 147 */ { 4, 700}, /* 148 */ { 4, 704}, /* 149 */ { 4, 708}, /* 150 */ { 4, 712}, /* 151 */ { 4, 716}, /* 152 */ { 4, 720}, /* 153 */ { 4, 724}, /* 154 */ { 4, 728}, /* 155 */ { 4, 732}, /* 156 */ { 4, 736}, /* 157 */ { 4, 740}, /* 158 */ { 4, 744}, /* 159 */ { 4, 748}, /* 160 */ { 4, 752}, /* 161 */ { 4, 756}, /* 162 */ { 4, 760}, /* 163 */ { 4, 764}, /* 164 */ { 4, 768}, /* 165 */ { 4, 772}, /* 166 */ { 4, 776}, /* 167 */ { 4, 780}, /* 168 */ { 4, 784}, /* 169 */ { 4, 788}, /* 170 */ { 4, 792}, /* 171 */ { 4, 796}, /* 172 */ { 8, 800}, /* 173 */ { 8, 808}, /* 174 */ { 8, 816}, /* 175 */ { 8, 824}, /* 176 */ { 8, 832}, /* 177 */ { 8, 840}, /* 178 */ { 8, 848}, /* 179 */ { 8, 856}, /* 180 */ { 8, 864}, /* 181 */ { 8, 872}, /* 182 */ { 8, 880}, /* 183 */ { 8, 888}, /* 184 */ { 8, 896}, /* 185 */ { 8, 904}, /* 186 */ { 8, 912}, /* 187 */ { 8, 920}, /* 188 */ { 8, 928}, /* 189 */ { 8, 936}, /* 190 */ { 8, 944}, /* 191 */ { 8, 952}, /* 192 */ { 8, 960}, /* 193 */ { 8, 968}, /* 194 */ { 8, 976}, /* 195 */ { 8, 984}, /* 196 */ { 8, 992}, /* 197 */ { 8, 1000}, /* 198 */ { 8, 1008}, /* 199 */ { 8, 1016}, /* 200 */ { 8, 1024}, /* 201 */ { 8, 1032}, /* 202 */ { 8, 1040}, /* 203 */ { 8, 1048}, /* 204 */ { 8, 1056}, /* 205 */ { 8, 1064}, /* 206 */ { 8, 1072}, /* 207 */ { 8, 1080}, /* 208 */ { 16, 1088}, /* 209 */ { 16, 1104}, /* 210 */ { 16, 1120}, /* 211 */ { 16, 1136}, /* 212 */ { 16, 1152}, /* 213 */ { 16, 1168}, /* 214 */ { 8, 1184}, /* 215 */ { 8, 1192}, /* 216 */ { 8, 1200}, /* 217 */ { 8, 1208}, /* 218 */ { 8, 1216}, /* 219 */ { 8, 1224}, /* 220 */ { 8, 1232}, /* 221 */ { 8, 1240}, /* 222 */ { 8, 1248}, /* 223 */ { 8, 1256}, /* 224 */ { 8, 1264}, /* 225 */ { 8, 1272}, /* 226 */ { 8, 1280}, /* 227 */ { 8, 1288}, /* 228 */ { 8, 1296}, /* 229 */ { 8, 1304}, /* 230 */ { 8, 1312}, /* 231 */ { 8, 1320}, /* 232 */ { 8, 1328}, /* 233 */ { 8, 1336}, /* 234 */ { 8, 1344}, /* 235 */ { 8, 1352}, /* 236 */ { 8, 1360}, /* 237 */ { 8, 1368}, /* 238 */ { 8, 1376}, /* 239 */ { 8, 1384}, /* 240 */ { 8, 1392}, /* 241 */ { 8, 1400}, /* 242 */ { 8, 1408}, /* 243 */ { 8, 1416}, /* 244 */ { 8, 1424}, /* 245 */ { 8, 1432}, /* 246 */ { 8, 1440}, /* 247 */ { 8, 1448}, /* 248 */ { 8, 1456}, /* 249 */ { 8, 1464}, /* 250 */ { 8, 1472}, /* 251 */ { 8, 1480}, /* 252 */ { 8, 1488}, /* 253 */ { 8, 1496}, /* 254 */ { 8, 1504}, /* 255 */ { 8, 1512}, /* 256 */ { 8, 1520}, /* 257 */ { 8, 1528}, /* 258 */ { 8, 1536}, /* 259 */ { 8, 1544}, /* 260 */ { 8, 1552}, /* 261 */ { 8, 1560}, /* 262 */ { 8, 1568}, /* 263 */ { 8, 1576}, /* 264 */ { 8, 1584}, /* 265 */ { 8, 1592}, /* 266 */ { 8, 1600}, /* 267 */ { 8, 1608}, /* 268 */ { 8, 1616}, /* 269 */ { 8, 1624}, /* 270 */ { 8, 1632}, /* 271 */ { 8, 1640}, /* 272 */ { 8, 1648}, /* 273 */ { 8, 1656}, /* 274 */ { 8, 1664}, /* 275 */ { 8, 1672}, /* 276 */ { 8, 1680}, /* 277 */ { 8, 1688}, /* 278 */ { 8, 1696}, /* 279 */ { 8, 1704}, /* 280 */ { 8, 1712}, /* 281 */ { 8, 1720}, /* 282 */ { 8, 1728}, /* 283 */ { 8, 1736}, /* 284 */ { 8, 1744}, /* 285 */ { 8, 1752}, /* 286 */ { 8, 1760}, /* 287 */ { 8, 1768}, /* 288 */ { 8, 1776}, /* 289 */ { 8, 1784}, /* 290 */ { 8, 1792}, /* 291 */ { 8, 1800}, /* 292 */ { 8, 1808}, /* 293 */ { 8, 1816}, /* 294 */ { 8, 1824}, /* 295 */ { 8, 1832}, /* 296 */ { 8, 1840}, /* 297 */ { 16, 1848}, /* 298 */ { 16, 1864}, /* 299 */ { 16, 1880}, /* 300 */ { 16, 1896}, /* 301 */ { 16, 1912}, /* 302 */ { 16, 1928}, /* 303 */ { 16, 1944}, /* 304 */ { 16, 1960}, /* 305 */ { 16, 1976}, /* 306 */ { 16, 1992}, /* 307 */ { 16, 2008}, /* 308 */ { 16, 2024}, /* 309 */ { 16, 2040}, /* 310 */ { 16, 2056}, /* 311 */ { 16, 2072}, /* 312 */ { 16, 2088}, /* 313 */ { 16, 2104}, /* 314 */ { 16, 2120}, /* 315 */ { 16, 2136}, /* 316 */ { 16, 2152}, /* 317 */ { 16, 2168}, /* 318 */ { 16, 2184}, /* 319 */ { 16, 2200}, /* 320 */ { 16, 2216}, /* 321 */ { 16, 2232}, /* 322 */ { 16, 2248}, /* 323 */ { 16, 2264}, /* 324 */ { 16, 2280}, /* 325 */ { 16, 2296}, /* 326 */ { 16, 2312}, /* 327 */ { 16, 2328}, /* 328 */ { 16, 2344}, /* 329 */ { 16, 2360}, /* 330 */ { 16, 2376}, /* 331 */ { 16, 2392}, /* 332 */ { 16, 2408}, /* 333 */ { 32, 2424}, /* 334 */ { 32, 2456}, /* 335 */ { 32, 2488}, /* 336 */ { 16, 2520}, /* 337 */ { 16, 2536}, /* 338 */ { 16, 2552}, /* 339 */ { 16, 2568}, /* 340 */ { 16, 2584}, /* 341 */ { 16, 2600}, /* 342 */ { 16, 2616}, /* 343 */ { 16, 2632}, /* 344 */ { 16, 2648}, /* 345 */ { 16, 2664}, /* 346 */ { 16, 2680}, /* 347 */ { 16, 2696}, /* 348 */ { 4, 2712}, /* 349 */ { 4, 2716}, /* 350 */ { 4, 2720}, /* 351 */ { 4, 2724}, /* 352 */ { 8, 2728}, /* 353 */ { 8, 2736}, /* 354 */ { 4, 2744}, /* 355 */ { 8, 2748}, /* 356 */ { 8, 2756}, /* 357 */ { 8, 2764}, /* 358 */ { 8, 2772}, /* 359 */ { 8, 2780}, /* 360 */ { 8, 2788}, /* 361 */ { 8, 2796}, /* 362 */ { 16, 2804}, /* 363 */ { 16, 2820}, /* 364 */ { 16, 2836}, /* 365 */ { 8, 2852}, /* 366 */ { 8, 2860}, /* 367 */ { 8, 2868}, /* 368 */ { 8, 2876}, /* 369 */ { 8, 2884}, /* 370 */ { 8, 2892}, /* 371 */ { 8, 2900}, /* 372 */ { 8, 2908}, /* 373 */ { 16, 2916}, /* 374 */ { 16, 2932}, /* 375 */ { 8, 2948}, /* 376 */ { 8, 2956}, /* 377 */ { 8, 2964}, /* 378 */ { 8, 2972}, /* 379 */ { 8, 2980}, /* 380 */ { 8, 2988}, /* 381 */ { 8, 2996}, /* 382 */ { 8, 3004}, /* 383 */ { 16, 3012}, /* 384 */ { 16, 3028}, /* 385 */ { 16, 3044}, /* 386 */ { 16, 3060}, /* 387 */ { 8, 3076}, /* 388 */ { 8, 3084}, /* 389 */ { 8, 3092}, /* 390 */ { 8, 3100}, /* 391 */ { 8, 3108}, /* 392 */ { 8, 3116}, /* 393 */ { 8, 3124}, /* 394 */ { 8, 3132}, /* 395 */ { 16, 3140}, /* 396 */ { 16, 3156}, /* 397 */ { 16, 3172}, /* 398 */ { 16, 3188}, /* 399 */ { 16, 3204}, /* 400 */ { 16, 3220}, /* 401 */ { 16, 3236}, /* 402 */ { 16, 3252}, /* 403 */ { 16, 3268}, /* 404 */ { 16, 3284}, /* 405 */ { 16, 3300}, /* 406 */ { 16, 3316}, /* 407 */ { 16, 3332}, /* 408 */ { 16, 3348}, /* 409 */ { 16, 3364}, /* 410 */ { 16, 3380}, /* 411 */ { 16, 3396}, /* 412 */ { 16, 3412}, /* 413 */ { 16, 3428}, /* 414 */ { 16, 3444}, /* 415 */ { 16, 3460}, /* 416 */ { 16, 3476}, /* 417 */ { 16, 3492}, /* 418 */ { 16, 3508}, /* 419 */ { 16, 3524}, /* 420 */ { 16, 3540}, /* 421 */ { 16, 3556}, /* 422 */ { 16, 3572}, /* 423 */ { 32, 3588}, /* 424 */ { 32, 3620}, /* 425 */ { 32, 3652}, /* 426 */ { 32, 3684}, /* 427 */ { 32, 3716}, /* 428 */ { 32, 3748}, /* 429 */ { 3, 3780}, /* 430 */ { 3, 3783}, /* 431 */ { 3, 3786}, /* 432 */ { 9, 3789}, /* 433 */ { 3, 3798}, /* 434 */ { 6, 3801}, /* 435 */ { 18, 3807}, /* 436 */ { 6, 3825}, /* 437 */ { 6, 3831}, /* 438 */ { 6, 3837}, /* 439 */ { 6, 3843}, /* 440 */ { 6, 3849}, /* 441 */ { 6, 3855}, /* 442 */ { 6, 3861}, /* 443 */ { 18, 3867}, /* 444 */ { 6, 3885}, /* 445 */ { 6, 3891}, /* 446 */ { 6, 3897}, /* 447 */ { 6, 3903}, /* 448 */ { 6, 3909}, /* 449 */ { 18, 3915}, /* 450 */ { 6, 3933}, /* 451 */ { 18, 3939}, /* 452 */ { 6, 3957}, /* 453 */ { 12, 3963}, /* 454 */ { 12, 3975}, /* 455 */ { 12, 3987}, /* 456 */ { 12, 3999}, /* 457 */ { 36, 4011}, /* 458 */ { 12, 4047}, /* 459 */ { 36, 4059}, /* 460 */ { 12, 4095}, /* 461 */ { 6, 4107}, /* 462 */ { 6, 4113}, /* 463 */ { 6, 4119}, /* 464 */ { 6, 4125}, /* 465 */ { 6, 4131}, /* 466 */ { 6, 4137}, /* 467 */ { 6, 4143}, /* 468 */ { 12, 4149}, /* 469 */ { 12, 4161}, /* 470 */ { 12, 4173}, /* 471 */ { 12, 4185}, /* 472 */ { 12, 4197}, /* 473 */ { 12, 4209}, /* 474 */ { 12, 4221}, /* 475 */ { 12, 4233}, /* 476 */ { 12, 4245}, /* 477 */ { 12, 4257}, /* 478 */ { 12, 4269}, /* 479 */ { 12, 4281}, /* 480 */ { 12, 4293}, /* 481 */ { 12, 4305}, /* 482 */ { 12, 4317}, /* 483 */ { 12, 4329}, /* 484 */ { 24, 4341}, /* 485 */ { 24, 4365}, /* 486 */ { 24, 4389}, /* 487 */ { 24, 4413}, /* 488 */ { 12, 4437}, /* 489 */ { 48, 4449}, /* 490 */ { 24, 4497}, /* 491 */ { 12, 4521}, /* 492 */ { 24, 4533}, /* 493 */ { 24, 4557}, /* 494 */ { 24, 4581}, /* 495 */ { 24, 4605}, /* 496 */ { 96, 4629}, /* 497 */ { 96, 4725}, /* 498 */ { 96, 4821}, /* 499 */ { 48, 4917}, /* 500 */ { 24, 4965}, /* 501 */ { 48, 4989}, /* 502 */ { 24, 5037}, /* 503 */ { 24, 5061}, /* 504 */ { 96, 5085}, /* 505 */ { 96, 5181}, /* 506 */ { 48, 5277}, /* 507 */ { 24, 5325}, /* 508 */ { 24, 5349}, /* 509 */ { 48, 5373}, /* 510 */ { 24, 5421}, /* 511 */ { 96, 5445}, /* 512 */ { 48, 5541}, /* 513 */ { 24, 5589}, /* 514 */ { 96, 5613}, /* 515 */ { 48, 5709}, /* 516 */ { 48, 5757}, /* 517 */ { 48, 5805}, /* 518 */ { 48, 5853}, /* 519 */ { 48, 5901}, /* 520 */ { 48, 5949}, /* 521 */ { 48, 5997}, /* 522 */ { 192, 6045}, /* 523 */ { 192, 6237}, /* 524 */ { 192, 6429}, /* 525 */ { 192, 6621}, /* 526 */ { 192, 6813}, /* 527 */ { 192, 7005}, /* 528 */ { 96, 7197}, /* 529 */ { 96, 7293}, /* 530 */ }; int spgdb_get_operation( int rot[3][3], double trans[3], const int index ) { int i, j; for ( i = 0; i < 3; i++ ) { for ( j = 0; j < 3; j++ ) { rot[i][j] = symmetry_operations[index][ i*3+j+1 ]; } } for ( i = 0; i < 3; i++ ) { trans[i] = ( (double)symmetry_operations[index][ i+10 ] ) / 12; } return symmetry_operations[index][0]; } void spgdb_get_operation_index( int indices[2], const int hall_number ) { indices[0] = symmetry_operation_index[ hall_number ][0]; indices[1] = symmetry_operation_index[ hall_number ][1]; } SpacegroupType spgdb_get_spacegroup_type( int index ) { return spacegroup_types[index]; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/cell.h0000644000175000001440000000114512250371054025603 0ustar marcususers/* cell.h */ /* Copyright (C) 2008 Atsushi Togo */ #ifndef __cell_H__ #define __cell_H__ #include "mathfunc.h" typedef struct { int size; double lattice[3][3]; int *types; double (*position)[3]; } Cell; Cell *cel_alloc_cell( const int size ); void cel_free_cell( Cell * cell ); void cel_set_cell( Cell * cell, SPGCONST double lattice[3][3], SPGCONST double position[][3], const int types[] ); Cell * cel_copy_cell( SPGCONST Cell * cell ); int cel_is_overlap( const double a[3], const double b[3], SPGCONST double lattice[3][3], const double symprec ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/symmetry.c0000644000175000001440000003723512250371054026561 0ustar marcususers/* symmetry.c */ /* Copyright (C) 2008 Atsushi Togo */ #include #include #include "cell.h" #include "debug.h" #include "lattice.h" #include "mathfunc.h" #include "pointgroup.h" #include "primitive.h" #include "symmetry.h" #include "debug.h" static int relative_axes[][3] = { { 1, 0, 0}, { 0, 1, 0}, { 0, 0, 1}, {-1, 0, 0}, { 0,-1, 0}, /* 5 */ { 0, 0,-1}, { 0, 1, 1}, { 1, 0, 1}, { 1, 1, 0}, { 0,-1,-1}, /* 10 */ {-1, 0,-1}, {-1,-1, 0}, { 0, 1,-1}, {-1, 0, 1}, { 1,-1, 0}, /* 15 */ { 0,-1, 1}, { 1, 0,-1}, {-1, 1, 0}, { 1, 1, 1}, {-1,-1,-1}, /* 20 */ {-1, 1, 1}, { 1,-1, 1}, { 1, 1,-1}, { 1,-1,-1}, {-1, 1,-1}, /* 25 */ {-1,-1, 1}, }; static int identity[3][3] = { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }; static int get_index_with_least_atoms( const Cell *cell ); static VecDBL * get_translation( SPGCONST int rot[3][3], SPGCONST Cell *cell, const double symprec ); static int get_operation( int rot[][3][3], double trans[][3], SPGCONST Cell * cell, const double symprec ); static Symmetry * reduce_operation( SPGCONST Cell * cell, SPGCONST Symmetry * symmetry, const double symprec ); static int is_overlap_all_atoms( const double test_trans[3], SPGCONST int rot[3][3], SPGCONST Cell * cell, const double symprec ); static PointSymmetry transform_pointsymmetry( SPGCONST PointSymmetry * point_sym_prim, SPGCONST double new_lattice[3][3], SPGCONST double original_lattice[3][3] ); static int get_space_group_operation( int rot[][3][3], double trans[][3], SPGCONST PointSymmetry *lattice_sym, SPGCONST Cell *primitive, const double symprec ); static int get_operation_supercell( int rot[][3][3], double trans[][3], const int num_sym, const VecDBL * pure_trans, SPGCONST Cell *cell, SPGCONST Cell *primitive ); static void set_axes( int axes[3][3], const int a1, const int a2, const int a3 ); static PointSymmetry get_lattice_symmetry( SPGCONST Cell *cell, const double symprec ); Symmetry * sym_alloc_symmetry( const int size ) { Symmetry *symmetry; symmetry = malloc( sizeof( Symmetry ) ); symmetry->size = size; if ( size > 0 ) { if ((symmetry->rot = (int (*)[3][3]) malloc(sizeof(int[3][3]) * size)) == NULL) { warning_print("spglib: Memory could not be allocated "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); exit(1); } if ((symmetry->trans = (double (*)[3]) malloc(sizeof(double[3]) * size)) == NULL) { warning_print("spglib: Memory could not be allocated "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); exit(1); } } return symmetry; } void sym_free_symmetry( Symmetry *symmetry ) { if ( symmetry->size > 0 ) { free( symmetry->rot ); free( symmetry->trans ); } free( symmetry ); } Symmetry * sym_get_operation( SPGCONST Cell *cell, const double symprec ) { int i, j, num_sym; MatINT *rot; VecDBL *trans; Symmetry *symmetry; rot = mat_alloc_MatINT( cell->size * 48 ); trans = mat_alloc_VecDBL( cell->size * 48 ); num_sym = get_operation( rot->mat, trans->vec, cell, symprec ); #ifdef DEBUG debug_print("*** get_symmetry (found symmetry operations) *** \n"); debug_print("Lattice \n"); debug_print_matrix_d3(cell->lattice); for ( i = 0; i < num_sym; i++ ) { debug_print("--- %d ---\n", i + 1); debug_print_matrix_i3(rot->mat[i]); debug_print("%f %f %f\n", trans->vec[i][0], trans->vec[i][1], trans->vec[i][2]); } #endif symmetry = sym_alloc_symmetry( num_sym ); for ( i = 0; i < num_sym; i++ ) { mat_copy_matrix_i3(symmetry->rot[i], rot->mat[i]); for (j = 0; j < 3; j++) symmetry->trans[i][j] = trans->vec[i][j]; } mat_free_MatINT( rot ); mat_free_VecDBL( trans ); return symmetry; } Symmetry * sym_reduce_operation( SPGCONST Cell * cell, SPGCONST Symmetry * symmetry, const double symprec ) { return reduce_operation( cell, symmetry, symprec ); } int sym_get_multiplicity( SPGCONST Cell *cell, const double symprec ) { int multi; VecDBL * trans = get_translation(identity, cell, symprec); multi = trans->size; mat_free_VecDBL( trans ); return multi; } VecDBL * sym_get_pure_translation( SPGCONST Cell *cell, const double symprec ) { return get_translation(identity, cell, symprec); } /* 1) A primitive cell of the input cell is searched. */ /* 2) Pointgroup operations of the primitive cell are obtained. */ /* These are constrained by the input cell lattice pointgroup, */ /* i.e., even if the lattice of the primitive cell has higher */ /* symmetry than that of the input cell, it is not considered. */ /* 3) Spacegroup operations are searched for the primitive cell */ /* using the constrained point group operations. */ /* 4) The spacegroup operations for the primitive cell are */ /* transformed to those of original input cells, if the input cell */ /* was not a primitive cell. */ static int get_operation( int rot[][3][3], double trans[][3], SPGCONST Cell *cell, const double symprec ) { int num_sym; int multi; PointSymmetry lattice_sym; Cell *primitive; VecDBL *pure_trans; pure_trans = sym_get_pure_translation(cell, symprec); multi = pure_trans->size; /* Lattice symmetry for input cell*/ lattice_sym = get_lattice_symmetry( cell, symprec ); if ( lattice_sym.size == 0 ) { goto err; } /* Obtain primitive cell */ if( multi > 1 ) { primitive = prm_get_primitive_with_pure_trans( cell, pure_trans, symprec ); if ( primitive->size < 1 ) { goto err; } lattice_sym = transform_pointsymmetry( &lattice_sym, primitive->lattice, cell->lattice ); if ( lattice_sym.size == 0 ) { goto err; } } else { primitive = cell; } /* Symmetry operation search for primitive cell */ num_sym = get_space_group_operation( rot, trans, &lattice_sym, primitive, symprec ); /* Recover symmetry operation for the input structure (overwritten) */ if( multi > 1 ) { num_sym = get_operation_supercell( rot, trans, num_sym, pure_trans, cell, primitive ); cel_free_cell( primitive ); if ( num_sym == 0 ) { goto err; } } mat_free_VecDBL( pure_trans ); return num_sym; err: mat_free_VecDBL( pure_trans ); return 0; } static Symmetry * reduce_operation( SPGCONST Cell * cell, SPGCONST Symmetry * symmetry, const double symprec ) { int i, j, num_sym; Symmetry * sym_reduced; PointSymmetry point_symmetry; MatINT *rot; VecDBL *trans; point_symmetry = get_lattice_symmetry( cell, symprec ); rot = mat_alloc_MatINT( symmetry->size ); trans = mat_alloc_VecDBL( symmetry->size ); num_sym = 0; for ( i = 0; i < point_symmetry.size; i++ ) { for ( j = 0; j < symmetry->size; j++ ) { if ( mat_check_identity_matrix_i3( point_symmetry.rot[i], symmetry->rot[j] ) ) { if ( is_overlap_all_atoms( symmetry->trans[j], symmetry->rot[j], cell, symprec ) ) { mat_copy_matrix_i3( rot->mat[num_sym], symmetry->rot[j] ); mat_copy_vector_d3( trans->vec[num_sym], symmetry->trans[j] ); num_sym++; } } } } sym_reduced = sym_alloc_symmetry( num_sym ); for ( i = 0; i < num_sym; i++ ) { mat_copy_matrix_i3( sym_reduced->rot[i], rot->mat[i] ); mat_copy_vector_d3( sym_reduced->trans[i], trans->vec[i] ); } mat_free_MatINT( rot ); mat_free_VecDBL( trans ); return sym_reduced; } /* Look for the translations which satisfy the input symmetry operation. */ /* This function is heaviest in this code. */ static VecDBL * get_translation( SPGCONST int rot[3][3], SPGCONST Cell *cell, const double symprec ) { int i, j, min_atom_index, num_trans = 0; double test_trans[3], origin[3]; VecDBL *tmp_trans, *trans; tmp_trans = mat_alloc_VecDBL( cell->size ); /* Look for the atom index with least number of atoms within same type */ min_atom_index = get_index_with_least_atoms( cell ); /* Set min_atom_index as the origin to measure the distance between atoms. */ mat_multiply_matrix_vector_id3(origin, rot, cell->position[min_atom_index]); for (i = 0; i < cell->size; i++) { /* test translation */ if (cell->types[i] != cell->types[min_atom_index]) { continue; } for (j = 0; j < 3; j++) { test_trans[j] = cell->position[i][j] - origin[j]; } if ( is_overlap_all_atoms( test_trans, rot, cell, symprec ) ) { for (j = 0; j < 3; j++) { tmp_trans->vec[num_trans][j] = test_trans[j] - mat_Nint( test_trans[j] ); } num_trans++; } } trans = mat_alloc_VecDBL( num_trans ); for ( i = 0; i < num_trans; i++ ) { mat_copy_vector_d3( trans->vec[i], tmp_trans->vec[i] ); } mat_free_VecDBL( tmp_trans ); return trans; } static int is_overlap_all_atoms( const double trans[3], SPGCONST int rot[3][3], SPGCONST Cell * cell, const double symprec ) { int i, j, count; double pos_rot[3], test_pos[3]; count = 0; /* test nonsymmorphic operation for an atom */ for (i = 0; i < cell->size; i++) { mat_multiply_matrix_vector_id3( pos_rot, rot, cell->position[i]); for (j = 0; j < 3; j++) { test_pos[j] = pos_rot[j] + trans[j]; } /* check overlap of atom_j and atom_k */ for (j = 0; j < cell->size; j++) { if ( cell->types[i] == cell->types[j] ) { if ( cel_is_overlap( cell->position[j], test_pos, cell->lattice, symprec) ) { count++; break; } } } if (count < i + 1) { goto not_found; } } return 1; /* found */ not_found: return 0; } static int get_index_with_least_atoms( const Cell *cell ) { int i, j, min, min_index; int *mapping; mapping = (int *) malloc(sizeof(int) * cell->size); for ( i = 0; i < cell->size; i++ ) { mapping[i] = 0; } for ( i = 0; i < cell->size; i++ ) { for ( j = 0; j < cell->size; j++ ) { if ( cell->types[i] == cell->types[j] ) { mapping[j]++; break; } } } min = mapping[0]; min_index = 0; for ( i = 0; i < cell->size; i++ ) { if ( min > mapping[i] && mapping[i] >0 ) { min = mapping[i]; min_index = i; } } free(mapping); return min_index; } static int get_space_group_operation( int rot[][3][3], double trans[][3], SPGCONST PointSymmetry *lattice_sym, SPGCONST Cell *cell, const double symprec ) { int i, j, k, num_sym; VecDBL *tmp_trans; num_sym = 0; for (i = 0; i < lattice_sym->size; i++) { /* get translation corresponding to a rotation */ tmp_trans = get_translation( lattice_sym->rot[i], cell, symprec ); for (j = 0; j < tmp_trans->size; j++) { for (k = 0; k < 3; k++) { trans[num_sym + j][k] = tmp_trans->vec[j][k]; } mat_copy_matrix_i3(rot[num_sym + j], lattice_sym->rot[i]); } num_sym += tmp_trans->size; } mat_free_VecDBL( tmp_trans ); return num_sym; } static int get_operation_supercell( int rot[][3][3], double trans[][3], const int num_sym, const VecDBL * pure_trans, SPGCONST Cell *cell, SPGCONST Cell *primitive ) { int i, j, k, multi; double inv_prim_lat[3][3], drot[3][3], trans_mat[3][3], trans_mat_inv[3][3]; MatINT *rot_prim; VecDBL *trans_prim; rot_prim = mat_alloc_MatINT( num_sym ); trans_prim = mat_alloc_VecDBL( num_sym ); multi = pure_trans->size; debug_print("get_operation_supercell\n"); mat_inverse_matrix_d3( inv_prim_lat, primitive->lattice, 0 ); mat_multiply_matrix_d3( trans_mat, inv_prim_lat, cell->lattice ); mat_inverse_matrix_d3( trans_mat_inv, trans_mat, 0 ); for( i = 0; i < num_sym; i++) { /* Translations */ mat_multiply_matrix_vector_d3( trans[i], trans_mat_inv, trans[i] ); /* Rotations */ mat_cast_matrix_3i_to_3d( drot, rot[i] ); mat_get_similar_matrix_d3( drot, drot, trans_mat, 0 ); mat_cast_matrix_3d_to_3i( rot[i], drot ); } for( i = 0; i < num_sym; i++ ) { mat_copy_matrix_i3( rot_prim->mat[i], rot[i] ); for( j = 0; j < 3; j++ ) trans_prim->vec[i][j] = trans[i][j]; } /* Rotations and translations are copied with the set of */ /* pure translations. */ for( i = 0; i < num_sym; i++ ) { for( j = 0; j < multi; j++ ) { mat_copy_matrix_i3( rot[ i * multi + j ], rot_prim->mat[i] ); for ( k = 0; k < 3; k++ ) { trans[i * multi + j][k] = mat_Dmod1( trans_prim->vec[i][k] + pure_trans->vec[j][k] ); } } } mat_free_MatINT( rot_prim ); mat_free_VecDBL( trans_prim ); /* return number of symmetry operation of supercell */ return num_sym * multi; } static PointSymmetry get_lattice_symmetry( SPGCONST Cell *cell, const double symprec ) { int i, j, k, num_sym; int axes[3][3]; double lattice[3][3], min_lattice[3][3]; double metric[3][3], cell_metric[3][3]; PointSymmetry lattice_sym; if ( ! lat_smallest_lattice_vector( min_lattice, cell->lattice, symprec ) ) { goto err; } mat_get_metric( cell_metric, min_lattice ); num_sym = 0; for ( i = 0; i < 26; i++ ) { for ( j = 0; j < 26; j++ ) { for ( k = 0; k < 26; k++ ) { set_axes( axes, i, j, k ); if ( ! ( ( mat_get_determinant_i3( axes ) == 1 ) || ( mat_get_determinant_i3( axes ) == -1 ) ) ) { continue; } mat_multiply_matrix_di3( lattice, min_lattice, axes ); mat_get_metric( metric, lattice ); if ( mat_check_identity_matrix_d3( metric, cell_metric, symprec ) ) { mat_copy_matrix_i3( lattice_sym.rot[num_sym], axes ); num_sym++; } if ( num_sym > 48 ) { warning_print("spglib: Too many lattice symmetries was found.\n"); warning_print(" Tolerance may be too large "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); goto err; } } } } lattice_sym.size = num_sym; return transform_pointsymmetry( &lattice_sym, cell->lattice, min_lattice ); err: lattice_sym.size = 0; return lattice_sym; } static PointSymmetry transform_pointsymmetry( SPGCONST PointSymmetry * lat_sym_orig, SPGCONST double new_lattice[3][3], SPGCONST double original_lattice[3][3] ) { int i, size; double trans_mat[3][3], inv_mat[3][3], drot[3][3]; PointSymmetry lat_sym_new; mat_inverse_matrix_d3( inv_mat, original_lattice, 0 ); mat_multiply_matrix_d3( trans_mat, inv_mat, new_lattice ); size = 0; for ( i = 0; i < lat_sym_orig->size; i++ ) { mat_cast_matrix_3i_to_3d( drot, lat_sym_orig->rot[i] ); mat_get_similar_matrix_d3( drot, drot, trans_mat, 0 ); /* new_lattice may have lower point symmetry than original_lattice.*/ /* The operations that have non-integer elements are not counted. */ if ( mat_is_int_matrix( drot, mat_Dabs( mat_get_determinant_d3( trans_mat ) ) / 10 ) ) { mat_cast_matrix_3d_to_3i( lat_sym_new.rot[size], drot ); if ( ! abs( mat_get_determinant_i3( lat_sym_new.rot[size] ) ) == 1 ) { warning_print("spglib: A point symmetry operation is not unimodular."); warning_print("(line %d, %s).\n", __LINE__, __FILE__); goto err; } size++; } } #ifdef SPGWARNING if ( ! ( lat_sym_orig->size == size ) ) { warning_print("spglib: Some of point symmetry operations were dropted."); warning_print("(line %d, %s).\n", __LINE__, __FILE__); } #endif lat_sym_new.size = size; return lat_sym_new; err: lat_sym_new.size = 0; return lat_sym_new; } static void set_axes( int axes[3][3], const int a1, const int a2, const int a3 ) { int i; for ( i = 0; i < 3; i++ ) { axes[i][0] = relative_axes[a1][i]; } for ( i = 0; i < 3; i++ ) { axes[i][1] = relative_axes[a2][i]; } for ( i = 0; i < 3; i++ ) { axes[i][2] = relative_axes[a3][i]; } } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/spacegroup.h0000644000175000001440000000155612250371054027042 0ustar marcususers/* spacegroup.h */ /* Copyright (C) 2010 Atsushi Togo */ #ifndef __spacegroup_H__ #define __spacegroup_H__ #include "cell.h" #include "lattice.h" #include "mathfunc.h" #include "pointgroup.h" #include "symmetry.h" typedef struct { int number; int hall_number; char schoenflies[7]; char hall_symbol[17]; char international[32]; char international_long[20]; char international_short[11]; Holohedry holohedry; Centering centering; double bravais_lattice[3][3]; double origin_shift[3]; } Spacegroup; Spacegroup spa_get_spacegroup( SPGCONST Cell * cell, const double symprec ); Spacegroup spa_get_spacegroup_with_primitive( SPGCONST Cell * primitive, const double symprec ); Symmetry * spa_get_conventional_symmetry( SPGCONST double transform_mat[3][3], const Centering centering, const Symmetry *primitive_sym ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/CMakeLists.txt0000644000175000001440000000064112250371054027253 0ustar marcususersset(spglib_SRCS cell.c debug.c hall_symbol.c lattice.c mathfunc.c pointgroup.c primitive.c refinement.c spacegroup.c spg_database.c spglib.c symmetry.c symmetry_kpoint.c ) add_library(spglib STATIC ${spglib_SRCS}) # Suppress spglib warnings set_target_properties(spglib PROPERTIES COMPILE_FLAGS "-w") # Set PIC flag set_target_properties(spglib PROPERTIES POSITION_INDEPENDENT_CODE TRUE) avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/hall_symbol.h0000644000175000001440000000056112250371054027172 0ustar marcususers/* hall_symbol.h */ /* Copyright (C) 2010 Atsushi Togo */ #ifndef __hall_symbol_H__ #define __hall_symbol_H__ #include "lattice.h" #include "symmetry.h" #include "mathfunc.h" int hal_get_hall_symbol( double origin_shift[3], const Centering centering, SPGCONST Symmetry *symmetry, SPGCONST double bravais_lattice[3][3], const double symprec ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/primitive.c0000644000175000001440000003216112250371054026671 0ustar marcususers/* primitive.c */ /* Copyright (C) 2008 Atsushi Togo */ #include #include #include "cell.h" #include "lattice.h" #include "mathfunc.h" #include "primitive.h" #include "symmetry.h" #include "debug.h" static int trim_cell( Cell * primitive, SPGCONST Cell * cell, const double symprec ); static int set_primitive_positions( Cell * primitive, const VecDBL * position, const Cell * cell, int * const * table ); static VecDBL * get_positions_primitive( SPGCONST Cell * cell, SPGCONST double prim_lat[3][3] ); static int get_overlap_table( int ** table, const Cell *cell, SPGCONST Cell *primitive, const VecDBL * position, const double symprec ); static void free_table( int ** table, const int size ); static int ** allocate_table( const int size ); static int get_primitive( Cell * primitive, SPGCONST Cell * cell, SPGCONST double pure_trans[][3], const int multi, const double symprec ); static int get_primitive_lattice_vectors( double prim_lattice[3][3], SPGCONST double vectors[][3], const int multi, SPGCONST Cell * cell, const double symprec ); Cell * prm_get_primitive( SPGCONST Cell * cell, const double symprec ) { VecDBL *pure_trans; Cell *primitive; debug_print("*** prm_get_primitive ***\n"); pure_trans = sym_get_pure_translation( cell, symprec ); primitive = prm_get_primitive_with_pure_trans( cell, pure_trans, symprec ); mat_free_VecDBL( pure_trans ); return primitive; } Cell * prm_get_primitive_with_pure_trans( SPGCONST Cell * cell, const VecDBL *pure_trans, const double symprec ) { Cell *primitive; int multi; multi = pure_trans->size; if ( multi > 1 ) { /* Create primitive lattice */ primitive = cel_alloc_cell(cell->size / multi); if ( get_primitive( primitive, cell, pure_trans->vec, multi, symprec ) ) { } else { cel_free_cell( primitive ); /* If primitive could not be found, primitive->size = -1 is returned. */ primitive = cel_alloc_cell( -1 ); } } else { /* If cell is already primitive cell, primitive->size = 0 is returned. */ primitive = cel_alloc_cell( 0 ); } return primitive; } static int get_primitive( Cell * primitive, SPGCONST Cell * cell, SPGCONST double pure_trans[][3], const int multi, const double symprec ) { int i, j; double prim_lattice[3][3]; VecDBL * vectors; vectors = mat_alloc_VecDBL( multi+2 ); /* store pure translations in original cell */ /* as trial primitive lattice vectors */ for (i = 0; i < multi - 1; i++) { mat_copy_vector_d3( vectors->vec[i], pure_trans[i + 1]); } /* store lattice translations of original cell */ /* as trial primitive lattice vectors */ for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (i == j) { vectors->vec[i+multi-1][j] = 1; } else { vectors->vec[i+multi-1][j] = 0; } } } #ifdef DEBUG for (i = 0; i < multi + 2; i++) { debug_print("%d: %f %f %f\n", i + 1, vectors->vec[i][0], vectors->vec[i][1], vectors->vec[i][2]); } #endif /* Lattice of primitive cell is found among pure translation vectors */ if ( ! get_primitive_lattice_vectors( prim_lattice, vectors->vec, multi, cell, symprec ) ) { goto not_found; } /* Smallest lattice vectors are chosen. */ if ( ! lat_smallest_lattice_vector( primitive->lattice, prim_lattice, symprec ) ) { goto not_found; } /* Fit atoms into new primitive cell */ if ( ! trim_cell( primitive, cell, symprec ) ) { goto not_found; } debug_print("Original cell lattice.\n"); debug_print_matrix_d3(cell->lattice); debug_print("Found primitive lattice after choosing least axes.\n"); debug_print_matrix_d3(primitive->lattice); debug_print("Number of atoms in primitive cell: %d\n", primitive->size); debug_print("Volume: original %f --> primitive %f\n", mat_get_determinant_d3(cell->lattice), mat_get_determinant_d3(primitive->lattice)); /* found */ mat_free_VecDBL( vectors ); return 1; not_found: warning_print("spglib: Primitive cell could not found "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); mat_free_VecDBL( vectors ); return 0; } static int trim_cell( Cell * primitive, SPGCONST Cell * cell, const double symprec ) { int ratio; VecDBL * position; int **table; table = allocate_table( cell->size ); ratio = cell->size / primitive->size; /* Get reduced positions of atoms in original cell with respect to */ /* primitive lattice */ position = get_positions_primitive( cell, primitive->lattice ); /* Create overlapping table */ if ( ! get_overlap_table( table, cell, primitive, position, symprec ) ) { goto err; } /* Copy positions. Positions of overlapped atoms are averaged. */ if ( ! set_primitive_positions( primitive, position, cell, table ) ) { goto err; } debug_print("Trimed position\n"); debug_print_vectors_with_label(primitive->position, primitive->types, primitive->size); mat_free_VecDBL( position ); free_table( table, cell->size ); return 1; err: mat_free_VecDBL( position ); free_table( table, cell->size ); return 0; } static int set_primitive_positions( Cell * primitive, const VecDBL * position, const Cell * cell, int * const * table ) { int i, j, k, ratio, count; int *check_table = (int*)malloc(cell->size * sizeof(int)); ratio = cell->size / primitive->size; for (i = 0; i < cell->size; i++) { check_table[i] = 0; } /* Copy positions. Positions of overlapped atoms are averaged. */ count = 0; for (i = 0; i < cell->size; i++) if (!check_table[i]) { debug_print("Trimming... i=%d count=%d\n", i, count); primitive->types[count] = cell->types[i]; for (j = 0; j < 3; j++) { primitive->position[count][j] = 0; } for (j = 0; j < ratio; j++) { /* overlap atoms */ if (table[i][j] < 0) break; for (k = 0; k < 3; k++) { /* boundary treatment */ if (mat_Dabs(position->vec[table[i][0]][k] - position->vec[table[i][j]][k]) > 0.5) { if (position->vec[table[i][j]][k] < 0) { primitive->position[count][k] = primitive->position[count][k] + position->vec[table[i][j]][k] + 1; } else { primitive->position[count][k] = primitive->position[count][k] + position->vec[table[i][j]][k] - 1; } } else { primitive->position[count][k] = primitive->position[count][k] + position->vec[table[i][j]][k]; } } check_table[table[i][j]] = 1; } for (j = 0; j < 3; j++) { /* take average and reduce */ primitive->position[count][j] = primitive->position[count][j] / ratio; primitive->position[count][j] = primitive->position[count][j] - mat_Nint( primitive->position[count][j] ); } count++; } free(check_table); check_table = NULL; debug_print("Count: %d Size of cell: %d Size of primitive: %d\n", count, cell->size, primitive->size); if ( ! ( count == primitive->size ) ) { warning_print("spglib: Atomic positions of primitive cell could not be determined "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); goto err; } return 1; err: return 0; } static VecDBL * get_positions_primitive( SPGCONST Cell * cell, SPGCONST double prim_lat[3][3] ) { int i, j; double tmp_matrix[3][3], axis_inv[3][3]; VecDBL * position; position = mat_alloc_VecDBL( cell->size ); mat_inverse_matrix_d3(tmp_matrix, prim_lat, 0); mat_multiply_matrix_d3(axis_inv, tmp_matrix, cell->lattice); /* Send atoms into the primitive cell */ debug_print("Positions in new axes reduced to primitive cell\n"); for (i = 0; i < cell->size; i++) { mat_multiply_matrix_vector_d3( position->vec[i], axis_inv, cell->position[i] ); for (j = 0; j < 3; j++) { position->vec[i][j] -= mat_Nint( position->vec[i][j] ); } debug_print("%d: %f %f %f\n", i + 1, position->vec[i][0], position->vec[i][1], position->vec[i][2]); } return position; } static int get_overlap_table( int **table, const Cell *cell, SPGCONST Cell *primitive, const VecDBL * position, const double symprec ) { int i, j, is_found, attempt, count, ratio; int count_error=0, old_count_error=0; double trim_tolerance, tol_adjust; ratio = cell->size / primitive->size; trim_tolerance = symprec; tol_adjust = trim_tolerance/2.0; is_found = 0; /* Break when is_found */ for ( attempt = 0; attempt < 1000; attempt++ ) { is_found = 1; debug_print("Trim attempt %d: tolerance=%f\n",attempt+1,trim_tolerance); for (i = 0; i < cell->size; i++) { for (j = 0; j < cell->size; j++) { table[i][j] = -1; } } for (i = 0; i < cell->size; i++) { count = 0; for (j = 0; j < cell->size; j++) { if ( cel_is_overlap( position->vec[i], position->vec[j], primitive->lattice, trim_tolerance ) ) { table[i][count] = j; count++; } } /* Adjust tolerance to avoid too much and too few overlaps */ if (count != ratio) { /* check overlapping number */ count_error = count - ratio; /* Initialize count error if needed: */ if (old_count_error == 0) { old_count_error = count - ratio; } /* Adjust the tolerance adjustment if needed */ if ( ( old_count_error > 0 && count_error < 0 ) || ( old_count_error < 0 && count_error > 0 ) || trim_tolerance - tol_adjust <= 0 ) { tol_adjust /= 2.0; } old_count_error = count_error; debug_print("Bad tolerance: count=%d ratio=%d tol_adjust=%f\n", count,ratio,tol_adjust); if ( count_error > 0 ) { trim_tolerance -= tol_adjust; } else { trim_tolerance += tol_adjust; } is_found = 0; break; } } if ( is_found ) { break; } } if ( ! is_found ) { warning_print("spglib: Could not trim cell into primitive "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); goto err; } return 1; err: return 0; } static void free_table( int **table, const int size ) { int i; for ( i = 0; i < size; i++ ) { free( table[i] ); table[i] = NULL; } free( table ); table = NULL; } static int ** allocate_table( const int size ) { int i; int **table = (int**)malloc(size * sizeof(int*)); for (i = 0; i < size; i++) { table[i] = (int*)malloc(size * sizeof(int)); } return table; } static int get_primitive_lattice_vectors( double prim_lattice[3][3], SPGCONST double vectors[][3], const int multi, SPGCONST Cell * cell, const double symprec ) { int i, j, k; double initial_volume, volume; double relative_lattice[3][3], min_vectors[3][3], tmp_lattice[3][3]; double inv_mat_dbl[3][3]; int inv_mat_int[3][3]; debug_print("*** get_primitive_lattice_vectors ***\n"); initial_volume = mat_Dabs(mat_get_determinant_d3(cell->lattice)); debug_print("initial volume: %f\n", initial_volume); /* check volumes of all possible lattices, find smallest volume */ for (i = 0; i < multi + 2; i++) { for (j = i + 1; j < multi + 2; j++) { for (k = j + 1; k < multi + 2; k++) { mat_multiply_matrix_vector_d3( tmp_lattice[0], cell->lattice, vectors[i] ); mat_multiply_matrix_vector_d3( tmp_lattice[1], cell->lattice, vectors[j] ); mat_multiply_matrix_vector_d3( tmp_lattice[2], cell->lattice, vectors[k] ); volume = mat_Dabs( mat_get_determinant_d3( tmp_lattice ) ); if ( volume > symprec ) { debug_print("temporary volume of primitive cell: %f\n", volume ); debug_print("volume of original cell: %f\n", initial_volume ); debug_print("multi and calculated multi: %d, %d\n", multi, mat_Nint( initial_volume / volume ) ); if ( mat_Nint( initial_volume / volume ) == multi ) { mat_copy_vector_d3(min_vectors[0], vectors[i]); mat_copy_vector_d3(min_vectors[1], vectors[j]); mat_copy_vector_d3(min_vectors[2], vectors[k]); goto ret; } } } } } /* Not found */ warning_print("spglib: Primitive lattice vectors cound not be found "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); return 0; /* Found */ ret: for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { relative_lattice[j][i] = min_vectors[i][j]; } } mat_inverse_matrix_d3( inv_mat_dbl, relative_lattice, 0 ); mat_cast_matrix_3d_to_3i( inv_mat_int, inv_mat_dbl ); if ( abs( mat_get_determinant_i3( inv_mat_int ) ) == multi ) { mat_cast_matrix_3i_to_3d( inv_mat_dbl, inv_mat_int ); mat_inverse_matrix_d3( relative_lattice, inv_mat_dbl, 0 ); } else { warning_print("spglib: Primitive lattice cleaning is incomplete "); warning_print("(line %d, %s).\n", __LINE__, __FILE__); } mat_multiply_matrix_d3( prim_lattice, cell->lattice, relative_lattice ); debug_print("Oritinal relative_lattice\n"); debug_print_matrix_d3( relative_lattice ); debug_print("Cleaned relative_lattice\n"); debug_print_matrix_d3( relative_lattice ); debug_print("Primitive lattice\n"); debug_print_matrix_d3( prim_lattice ); return 1; } avogadro-1.1.1/libavogadro/src/extensions/crystallography/spglib/pointgroup.h0000644000175000001440000000132112250371054027066 0ustar marcususers/* pointgroup.h */ /* Copyright (C) 2008 Atsushi Togo */ #ifndef __pointgroup_H__ #define __pointgroup_H__ #include "symmetry.h" typedef enum { NONE, TRICLI, MONOCLI, ORTHO, TETRA, RHOMB, TRIGO, HEXA, CUBIC, } Holohedry; typedef enum { LAUE1, LAUE2M, LAUEMMM, LAUE4M, LAUE4MMM, LAUE3, LAUE3M, LAUE6M, LAUE6MMM, LAUEM3, LAUEM3M, } Laue; typedef struct { char symbol[6]; Holohedry holohedry; Laue laue; int transform_mat[3][3]; } Pointgroup; int ptg_get_pointgroup_number( const Symmetry * symmetry ); Pointgroup ptg_get_pointgroup( const int pointgroup_number ); void ptg_get_transformation_matrix( Pointgroup * pointgroup, const Symmetry * symmetry ); #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/CMakeLists.txt0000644000175000001440000000167412250371054026002 0ustar marcususersinclude_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) add_subdirectory(spglib) set(PLUGIN_LABEL extensions) set(PLUGIN_TARGET extensions) set(crystallographyextension_SRCS avospglib.cpp ceundo.cpp crystallographyextension.cpp crystalpastedialog.cpp ui/ceabstractdockwidget.cpp ui/ceabstracteditor.cpp ui/cecoordinateeditor.cpp ui/cematrixeditor.cpp ui/ceparametereditor.cpp ui/ceslabbuilder.cpp ui/cetranslatewidget.cpp ui/ceviewoptionswidget.cpp ) set(crystallographyextension_UIS crystalpastedialog.ui ui/cecoordinateeditor.ui ui/cematrixeditor.ui ui/ceparametereditor.ui ui/ceslabbuilder.ui ui/cetranslatewidget.ui ui/ceviewoptionswidget.ui ) avogadro_plugin(crystallographyextension "${crystallographyextension_SRCS}" "${crystallographyextension_UIS}" ) target_link_libraries(crystallographyextension spglib) add_dependencies(crystallographyextension spglib) avogadro-1.1.1/libavogadro/src/extensions/crystallography/crystallographyextension.h0000644000175000001440000002666412250371054030605 0ustar marcususers/********************************************************************** crystallographyextension.h - Crystal Builder Plugin for Avogadro Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #ifndef CRYSTALLOGRAPHYEXTENSION_H #define CRYSTALLOGRAPHYEXTENSION_H #include "ui/ceslabbuilder.h" #include #include #include #include #include #include class QLabel; class QMainWindow; class QUndoCommand; namespace OpenBabel { class OBUnitCell; } namespace Avogadro { class CEAbstractDockWidget; class CEAbstractEditor; class CETranslateWidget; class CEViewOptionsWidget; struct CEUnitCellParameters { double a, b, c, alpha, beta, gamma; CEUnitCellParameters(double _a,double _b,double _c, double _al,double _be,double _ga) { a=_a;b=_b;c=_c;alpha=_al;beta=_be;gamma=_ga;}; CEUnitCellParameters() { a=b=c=alpha=beta=gamma=0;}; }; enum CartFrac { Cartesian = 0, Fractional }; enum VectorStyle { RowVectors = 0, ColumnVectors }; enum LengthUnit { Angstrom = 0, Bohr, Nanometer, Picometer }; enum AngleUnit { Degree = 0, Radian }; #ifdef Q_WS_X11 const QString CE_FONT = "Monospace"; const int CE_FONTSIZE = 11; #else // Windows and Mac const QString CE_FONT = "Courier"; const int CE_FONTSIZE = 12; #endif const QString CE_DIALOG_TITLE = QT_TRANSLATE_NOOP("CrystallographyExtension", "Avogadro"); const unsigned short CE_ANGSTROM_UTF16 = 0x212B; const QString CE_ANGSTROM = QString::fromUtf16(&CE_ANGSTROM_UTF16, 1); const unsigned short CE_SUB_ZERO_UTF16 = 0x2080; const QString CE_SUB_ZERO = QString::fromUtf16(&CE_SUB_ZERO_UTF16, 1); const unsigned short CE_DEGREE_UTF16 = 0x00B0; const QString CE_DEGREE = QString::fromUtf16(&CE_DEGREE_UTF16, 1); const unsigned short CE_SUPER_THREE_UTF16 = 0x00B3; const QString CE_SUPER_THREE = QString::fromUtf16(&CE_SUPER_THREE_UTF16, 1); // Characters to ignore when parsing text input: const QRegExp CE_PARSE_IGNORE_REGEXP ("\\s+|,|;|\\||\\[|\\]|\\{|\\}|\\(|\\)|\\&|/|<|>"); class CrystallographyExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Crystallography", tr("Crystallography"), tr("Construct and analyze periodic structures.")); public: // Avogadro::Extension stuff: CrystallographyExtension(QObject *parent=0); virtual ~CrystallographyExtension(); virtual QString menuPath(QAction *action) const; virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); void setMolecule(Molecule *molecule); void writeSettings(QSettings &settings) const; void readSettings(QSettings &settings); // Settings access: LengthUnit lengthUnit() const {return m_lengthUnit;}; AngleUnit angleUnit() const {return m_angleUnit;}; CartFrac coordsCartFrac() const {return m_coordsCartFrac;}; CartFrac coordsPreserveCartFrac() const {return m_coordsPreserveCartFrac;}; CartFrac matrixCartFrac() const {return m_matrixCartFrac;}; VectorStyle matrixVectorStyle() const {return m_matrixVectorStyle;}; // Undo friends friend class CEUndoState; signals: void cellChanged(); void lengthUnitChanged(LengthUnit); void angleUnitChanged(AngleUnit); void coordsCartFracChanged(CartFrac); void coordsPreserveCartFracChanged(CartFrac); void matrixCartFracChanged(CartFrac); void matrixVectorStyleChanged(VectorStyle); public slots: void repaintMolecule() {if (m_molecule) m_molecule->update();} // Push an undo command to the current undo stack void pushUndo(QUndoCommand*); // editor functions void showEditors(); void hideEditors(); void lockEditors(); void unlockEditors(); void refreshEditors(); // Property display functions void showProperties(); void hideProperties(); void refreshProperties(); // Actions (update checkboxes, labels, etc.) void refreshActions(); // Settings modifiers: void setLengthUnit(LengthUnit l) { m_lengthUnit = l; emit lengthUnitChanged(l);}; void setAngleUnit(AngleUnit a) { m_angleUnit = a; emit angleUnitChanged(a);}; void setCoordsCartFrac(CartFrac c) { m_coordsCartFrac = c; emit coordsCartFracChanged(c);}; void setCoordsPreserveCartFrac(CartFrac c) { m_coordsPreserveCartFrac = c; emit coordsPreserveCartFracChanged(c);}; void setMatrixCartFrac(CartFrac c) { m_matrixCartFrac = c; emit matrixCartFracChanged(c);}; void setMatrixVectorStyle(VectorStyle v) { m_matrixVectorStyle = v; matrixVectorStyleChanged(v);}; // Conversion factor (storage * [factor] = display) double lengthConversionFactor() const { // Storage is in angstrom, so convert appropriately. switch (lengthUnit()) { default: case Angstrom: return 1.0; case Bohr: return 1.8897162; case Nanometer: return 1e-1; case Picometer: return 1e2; } } double angleConversionFactor() const { // Storage is in degree, so convert appropriately. switch (angleUnit()) { default: case Degree: return 1.0; case Radian: return 0.0174532925; // pi/180 } } // storage -> display double convertLength(double length) const; Eigen::Vector3d convertLength(const Eigen::Vector3d&) const; Eigen::Matrix3d convertLength(const Eigen::Matrix3d&) const; double convertAngle(double angle) const; // display -> storage double unconvertLength(double length) const; Eigen::Vector3d unconvertLength(const Eigen::Vector3d&) const; Eigen::Matrix3d unconvertLength(const Eigen::Matrix3d&) const; double unconvertAngle(double angle) const; // Molecule access functions inline OpenBabel::OBUnitCell* currentCell() const { return (m_molecule) ? m_molecule->OBUnitCell() : 0 ;} Eigen::Matrix3d currentCellMatrix() const; Eigen::Matrix3d currentCellMatrixInStandardOrientation() const; Eigen::Matrix3d currentFractionalMatrix() const; CEUnitCellParameters currentCellParameters() const; QList currentFractionalCoords() const; QList currentCartesianCoords() const; QList currentAtomicNumbers() const; QList currentAtomicSymbols() const; QString currentLatticeType() const; double currentVolume() const; // Molecule modifiers void setCurrentCell(OpenBabel::OBUnitCell*); void setCurrentCellMatrix(const Eigen::Matrix3d&); void setCurrentCellParameters(const CEUnitCellParameters&); void setCurrentFractionalCoords(const QList &ids, const QList &fcoords); void setCurrentCartesianCoords(const QList &ids, const QList &coords); void setCurrentVolume(double volume); // Tool helpers/implementaions void fillUnitCell(); void wrapAtomsToCell(); void buildSuperCell(const unsigned int v1, const unsigned int v2, const unsigned int v3); void rebuildBonds(); void orientStandard(); Eigen::Matrix3d rotateCellMatrixToStandardOrientation( const Eigen::Matrix3d &in) const; void showPasteDialog(const QString &text); bool niggliReduce(); void showUnitCellAxes(); void hideUnitCellAxes(); private: void createActions(); void createDockWidgets(); enum ActionIndex { // Loose ToggleUnitCellIndex = 0, PasteCrystalIndex, ToggleUnitCellSepIndex, ToggleEditorsIndex, TogglePropertiesIndex, ToggleGUISepIndex, WrapAtomsIndex, TranslateAtomsIndex, OrientStandardIndex, ScaleToVolumeIndex, // Builders BuildSlabIndex, LooseSepIndex, // Spacegroup PerceiveSpacegroupIndex, SetSpacegroupIndex, FillUnitCellIndex, SymmetrizeCrystalIndex, // Reduce PrimitiveReduceIndex, NiggliReduceIndex, SettingsMainSep1Index, // Settings UnitsLengthAngstromIndex, UnitsLengthBohrIndex, UnitsLengthNanometerIndex, UnitsLengthPicometerIndex, UnitsAngleDegreeIndex, UnitsAngleRadianIndex, CoordsCartIndex, CoordsFracIndex, CoordsPreserveCartIndex, CoordsPreserveFracIndex, MatrixCartIndex, MatrixFracIndex, MatrixCoordDisplaySep1Index, MatrixRowVectorsIndex, MatrixColumnVectorsIndex, // View ViewOptionsIndex }; QAction* getAction(ActionIndex a) { return m_actions.at(static_cast(a)); } QMainWindow *m_mainwindow; GLWidget *m_glwidget; CESlabBuilder *m_slabBuilder; CETranslateWidget *m_translateWidget; CEViewOptionsWidget *m_viewOptionsWidget; QList m_actions; QList m_editors; Molecule *m_molecule; bool m_displayProperties; QLabel *m_latticeProperty; QLabel *m_spacegroupProperty; QLabel *m_volumeProperty; LengthUnit m_lengthUnit; AngleUnit m_angleUnit; CartFrac m_coordsCartFrac; CartFrac m_coordsPreserveCartFrac; CartFrac m_matrixCartFrac; VectorStyle m_matrixVectorStyle; // Coordinate preservation QList m_cachedFractionalIds; QList m_cachedFractionalCoords; // refresh limiting: bool m_editorRefreshPending; private slots: // Hidden functions void refreshEditors_(); // Actions void actionPerceiveSpacegroup(); void actionSetSpacegroup(); void actionFillUnitCell(); void actionSymmetrizeCrystal(); void actionPrimitiveReduce(); void actionNiggliReduce(); void actionToggleUnitCell(); void actionBuildSlab(); void actionPasteCrystal(); void actionToggleEditors(); void actionToggleProperties(); void actionWrapAtoms(); void actionTranslateAtoms(); void actionViewOptions(); void actionOrientStandard(); void actionScaleToVolume(); // Settings void actionUnitsLengthAngstrom(); void actionUnitsLengthBohr(); void actionUnitsLengthNanometer(); void actionUnitsLengthPicometer(); void actionUnitsAngleDegree(); void actionUnitsAngleRadian(); void actionCoordsCart(); void actionCoordsFrac(); void actionCoordsPreserveCart(); void actionCoordsPreserveFrac(); void actionMatrixCart(); void actionMatrixFrac(); void actionMatrixRowVectors(); void actionMatrixColumnVectors(); // Coordinate preservation void cacheFractionalCoordinates(); void restoreFractionalCoordinates(); }; class CrystallographyExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(CrystallographyExtension); }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/crystallography/avospglib.cpp0000644000175000001440000004211012250371054025722 0ustar marcususers/********************************************************************** AvoSpglib - Spglib wrapper for Avogadro Copyright (C) 2011 by David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see This source code is released under the New BSD License, (the "License"). Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ***********************************************************************/ #include "avospglib.h" #include #include #include #include #include #include #include #define SPG_DUMP_ATOMS(desc, numAtoms) \ qDebug() << desc << numAtoms << "atoms"; \ for (int i = 0; i < numAtoms; ++i) { \ qDebug() << types[i] << positions[i][0] \ << positions[i][1] << positions[i][2]; \ } // Some helper functions namespace { // Fill fcoords, atomicNums, and cellMatrix from mol and cell void prepareMolecule(const Avogadro::Molecule *mol, const OpenBabel::OBUnitCell *cell, QList *fcoords, QList *atomicNums, Eigen::Matrix3d *cellMatrix) { // This cast is because OBUnitCell is not const correct. Remove it // when OB is fixed or we start using Avogadro::UnitCell OpenBabel::OBUnitCell *mutcell = const_cast(cell); *cellMatrix = Avogadro::OB2Eigen(mutcell->GetCellMatrix()); QList atoms = mol->atoms(); const unsigned int numAtoms = static_cast(atoms.size()); fcoords->clear(); atomicNums->clear(); #if QT_VERSION >= 0x040700 fcoords->reserve(numAtoms); atomicNums->reserve(numAtoms); #endif for (QList::const_iterator it = atoms.constBegin(), it_end = atoms.constEnd(); it != it_end; ++it) { fcoords->append(Avogadro::OB2Eigen (mutcell->CartesianToFractional (Avogadro::Eigen2OB(*((*it)->pos()))))); atomicNums->append((*it)->atomicNumber()); } } void applyToMolecule(Avogadro::Molecule *mol, OpenBabel::OBUnitCell *cell, const QList &fcoords, const QList &atomicNums, const Eigen::Matrix3d &cellMatrix) { cell->SetData(Avogadro::Eigen2OB(cellMatrix)); // Remove / add atoms until correct. const unsigned int numAtoms = static_cast(fcoords.size()); if (numAtoms != mol->numAtoms()) { QList atoms = mol->atoms(); // Delete atoms from end of mol QList::const_iterator toDelete = atoms.constEnd(); while (numAtoms < mol->numAtoms()) { mol->removeAtom(*(--toDelete)); // On first iteration this // will be the final atom. } while (numAtoms > mol->numAtoms()) { mol->addAtom(); } } QList atoms = mol->atoms(); Q_ASSERT(atoms.size() == fcoords.size()); Q_ASSERT(atomicNums.size() == fcoords.size()); for (int i = 0; i < fcoords.size(); ++i) { atoms[i]->setAtomicNumber(atomicNums[i]); atoms[i]->setPos(Avogadro::OB2Eigen (cell->FractionalToCartesian (Avogadro::Eigen2OB(fcoords[i])))); } } QList symbolsToAtomicNumbers(const QList &ids) { QList atomicNums; #if QT_VERSION >= 0x040700 atomicNums.reserve(ids.size()); #endif for (QStringList::const_iterator it = ids.constBegin(), it_end = ids.constEnd(); it != it_end; ++it) { atomicNums.append(OpenBabel::etab.GetAtomicNum (it->toStdString().c_str())); } return atomicNums; } QList atomicNumbersToSymbols(const QList &atomicNums) { QList ids; #if QT_VERSION >= 0x040700 ids.reserve(atomicNums.size()); #endif for (QList::const_iterator it = atomicNums.constBegin(), it_end = atomicNums.constEnd(); it != it_end; ++it) { ids.append(OpenBabel::etab.GetSymbol(*it)); } return ids; } } // end anon namespace namespace Avogadro { namespace Spglib { unsigned int getSpacegroup(const QList &fcoords, const QList &atomicNums, const Eigen::Matrix3d &cellMatrix, const double cartTol) { Q_ASSERT(fcoords.size() == atomicNums.size()); const int numAtoms = fcoords.size(); if (numAtoms < 1) { qWarning() << "Cannot determine spacegroup of empty cell."; return 0; } // Spglib expects column vecs, so fill with transpose double lattice[3][3] = { {cellMatrix(0,0), cellMatrix(1,0), cellMatrix(2,0)}, {cellMatrix(0,1), cellMatrix(1,1), cellMatrix(2,1)}, {cellMatrix(0,2), cellMatrix(1,2), cellMatrix(2,2)} }; // Build position list double (*positions)[3] = new double[numAtoms][3]; int *types = new int[numAtoms]; const Eigen::Vector3d * fracCoord; for (int i = 0; i < numAtoms; ++i) { fracCoord = &fcoords[i]; types[i] = atomicNums[i]; positions[i][0] = fracCoord->x(); positions[i][1] = fracCoord->y(); positions[i][2] = fracCoord->z(); } // find spacegroup char symbol[21]; int spg = spg_get_international(symbol, lattice, positions, types, numAtoms, cartTol); delete [] positions; delete [] types; if (spg > 230 || spg < 0) { spg = 0; } return static_cast(spg); } unsigned int getSpacegroup(const QList &fcoords, const QStringList &ids, const Eigen::Matrix3d &cellMatrix, const double cartTol) { const QList atomicNums = symbolsToAtomicNumbers(ids); return getSpacegroup(fcoords, atomicNums, cellMatrix, cartTol); } unsigned int getSpacegroup(const Molecule * const mol, OpenBabel::OBUnitCell *cell, const double cartTol) { Q_ASSERT(mol); if (!cell) { cell = mol->OBUnitCell(); } Q_ASSERT(cell); QList fcoords; QList atomicNums; Eigen::Matrix3d cellMatrix; prepareMolecule(mol, cell, &fcoords, &atomicNums, &cellMatrix); return getSpacegroup(fcoords, atomicNums, cellMatrix, cartTol); } unsigned int reduceToPrimitive(QList *fcoords, QList *atomicNums, Eigen::Matrix3d *cellMatrix, const double cartTol) { Q_ASSERT(fcoords->size() == atomicNums->size()); const int numAtoms = fcoords->size(); if (numAtoms < 1) { qWarning() << "Cannot determine spacegroup of empty cell."; return 0; } // Spglib expects column vecs, so fill with transpose double lattice[3][3] = { {(*cellMatrix)(0,0), (*cellMatrix)(1,0), (*cellMatrix)(2,0)}, {(*cellMatrix)(0,1), (*cellMatrix)(1,1), (*cellMatrix)(2,1)}, {(*cellMatrix)(0,2), (*cellMatrix)(1,2), (*cellMatrix)(2,2)} }; // Build position list. Include space for 4*numAtoms for the // cell refinement double (*positions)[3] = new double[4*numAtoms][3]; int *types = new int[4*numAtoms]; const Eigen::Vector3d * fracCoord; for (int i = 0; i < numAtoms; ++i) { fracCoord = &(*fcoords)[i]; types[i] = (*atomicNums)[i]; positions[i][0] = fracCoord->x(); positions[i][1] = fracCoord->y(); positions[i][2] = fracCoord->z(); } // find spacegroup for return value char symbol[21]; int spg = spg_get_international(symbol, lattice, positions, types, numAtoms, cartTol); SPG_DUMP_ATOMS("Original cell", numAtoms); // Refine the structure int numBravaisAtoms = spg_refine_cell(lattice, positions, types, numAtoms, cartTol); SPG_DUMP_ATOMS("Bravais cell", numBravaisAtoms); // if spglib cannot refine the cell, return 0. if (numBravaisAtoms <= 0) { return 0; } // Find primitive cell. This updates lattice, positions, types // to primitive int numPrimitiveAtoms = spg_find_primitive(lattice, positions, types, numBravaisAtoms, cartTol); // If the cell was already a primitive cell, reset // numPrimitiveAtoms. if (numPrimitiveAtoms == 0) { numPrimitiveAtoms = numBravaisAtoms; } SPG_DUMP_ATOMS("Primitive cell", numPrimitiveAtoms); // Bail if everything failed if (numPrimitiveAtoms <= 0) { return 0; } // Update passed objects // convert col vecs to row vecs (*cellMatrix)(0, 0) = lattice[0][0]; (*cellMatrix)(0, 1) = lattice[1][0]; (*cellMatrix)(0, 2) = lattice[2][0]; (*cellMatrix)(1, 0) = lattice[0][1]; (*cellMatrix)(1, 1) = lattice[1][1]; (*cellMatrix)(1, 2) = lattice[2][1]; (*cellMatrix)(2, 0) = lattice[0][2]; (*cellMatrix)(2, 1) = lattice[1][2]; (*cellMatrix)(2, 2) = lattice[2][2]; // Trim while (fcoords->size() > numPrimitiveAtoms) { fcoords->removeLast(); atomicNums->removeLast(); } while (fcoords->size() < numPrimitiveAtoms) { fcoords->append(Eigen::Vector3d()); atomicNums->append(0); } // Update Q_ASSERT(fcoords->size() == atomicNums->size()); Q_ASSERT(fcoords->size() == numPrimitiveAtoms); for (int i = 0; i < numPrimitiveAtoms; ++i) { (*atomicNums)[i] = types[i]; (*fcoords)[i] = Eigen::Vector3d (positions[i]); } delete [] positions; delete [] types; if (spg > 230 || spg < 0) { spg = 0; } return static_cast(spg); } unsigned int reduceToPrimitive(QList *fcoords, QStringList *ids, Eigen::Matrix3d *cellMatrix, const double cartTol) { QList atomicNums = symbolsToAtomicNumbers(*ids); unsigned int spg = reduceToPrimitive(fcoords, &atomicNums, cellMatrix, cartTol); // Save some time if spg couldn't be found. if (spg <= 0 || spg > 230) { return 0; } Q_ASSERT(fcoords->size() == atomicNums.size()); *ids = atomicNumbersToSymbols(atomicNums); return spg; } unsigned int reduceToPrimitive(Molecule * mol, OpenBabel::OBUnitCell * cell, const double cartTol) { Q_ASSERT(mol); if (!cell) { cell = mol->OBUnitCell(); } Q_ASSERT(cell); QList fcoords; QList atomicNums; Eigen::Matrix3d cellMatrix; prepareMolecule(mol, cell, &fcoords, &atomicNums, &cellMatrix); unsigned int spg = reduceToPrimitive(&fcoords, &atomicNums, &cellMatrix, cartTol); // Save some time if no change if (spg <= 0 || spg > 230) { return 0; } applyToMolecule(mol, cell, fcoords, atomicNums, cellMatrix); cell->SetSpaceGroup(spg); return spg; } unsigned int refineCrystal(QList *fcoords, QList *atomicNums, Eigen::Matrix3d *cellMatrix, const double cartTol) { Q_ASSERT(fcoords->size() == atomicNums->size()); const int numAtoms = fcoords->size(); if (numAtoms < 1) { qWarning() << "Cannot determine spacegroup of empty cell."; return 0; } // Spglib expects column vecs, so fill with transpose double lattice[3][3] = { {(*cellMatrix)(0,0), (*cellMatrix)(1,0), (*cellMatrix)(2,0)}, {(*cellMatrix)(0,1), (*cellMatrix)(1,1), (*cellMatrix)(2,1)}, {(*cellMatrix)(0,2), (*cellMatrix)(1,2), (*cellMatrix)(2,2)} }; // Build position list. Include space for 4*numAtoms for the // cell refinement double (*positions)[3] = new double[4*numAtoms][3]; int *types = new int[4*numAtoms]; const Eigen::Vector3d * fracCoord; for (int i = 0; i < numAtoms; ++i) { fracCoord = &(*fcoords)[i]; types[i] = (*atomicNums)[i]; positions[i][0] = fracCoord->x(); positions[i][1] = fracCoord->y(); positions[i][2] = fracCoord->z(); } // find spacegroup for return value char symbol[21]; int spg = spg_get_international(symbol, lattice, positions, types, numAtoms, cartTol); SPG_DUMP_ATOMS("Original cell", numAtoms); // Refine the structure int numBravaisAtoms = spg_refine_cell(lattice, positions, types, numAtoms, cartTol); SPG_DUMP_ATOMS("Bravais cell", numBravaisAtoms); // if spglib cannot refine the cell, return 0. if (numBravaisAtoms <= 0) { return 0; } // Update passed objects // convert col vecs to row vecs (*cellMatrix)(0, 0) = lattice[0][0]; (*cellMatrix)(0, 1) = lattice[1][0]; (*cellMatrix)(0, 2) = lattice[2][0]; (*cellMatrix)(1, 0) = lattice[0][1]; (*cellMatrix)(1, 1) = lattice[1][1]; (*cellMatrix)(1, 2) = lattice[2][1]; (*cellMatrix)(2, 0) = lattice[0][2]; (*cellMatrix)(2, 1) = lattice[1][2]; (*cellMatrix)(2, 2) = lattice[2][2]; // Trim while (fcoords->size() > numBravaisAtoms) { fcoords->removeLast(); atomicNums->removeLast(); } while (fcoords->size() < numBravaisAtoms) { fcoords->append(Eigen::Vector3d()); atomicNums->append(0); } // Update Q_ASSERT(fcoords->size() == atomicNums->size()); Q_ASSERT(fcoords->size() == numBravaisAtoms); for (int i = 0; i < numBravaisAtoms; ++i) { (*atomicNums)[i] = types[i]; (*fcoords)[i] = Eigen::Vector3d (positions[i]); } delete [] positions; delete [] types; if (spg > 230 || spg < 0) { spg = 0; } return static_cast(spg); } unsigned int refineCrystal(QList *fcoords, QStringList *ids, Eigen::Matrix3d *cellMatrix, const double cartTol) { QList atomicNums = symbolsToAtomicNumbers(*ids); unsigned int spg = refineCrystal(fcoords, &atomicNums, cellMatrix, cartTol); // Save some time if spg couldn't be found. if (spg <= 0 || spg > 230) { return 0; } Q_ASSERT(fcoords->size() == atomicNums.size()); *ids = atomicNumbersToSymbols(atomicNums); return spg; } unsigned int refineCrystal(Molecule * mol, OpenBabel::OBUnitCell * cell, const double cartTol) { Q_ASSERT(mol); if (!cell) { cell = mol->OBUnitCell(); } Q_ASSERT(cell); QList fcoords; QList atomicNums; Eigen::Matrix3d cellMatrix; prepareMolecule(mol, cell, &fcoords, &atomicNums, &cellMatrix); unsigned int spg = refineCrystal(&fcoords, &atomicNums, &cellMatrix, cartTol); // Save some time if no change if (spg <= 0 || spg > 230) { return 0; } applyToMolecule(mol, cell, fcoords, atomicNums, cellMatrix); cell->SetSpaceGroup(spg); return spg; } } } avogadro-1.1.1/libavogadro/src/extensions/networkfetchextension.cpp0000644000175000001440000001731212250371054025153 0ustar marcususers/********************************************************************** NetworkFetchExtension - Extension for fetching molecules over the network Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "networkfetchextension.h" #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include namespace Avogadro { using OpenBabel::OBConversion; using OpenBabel::OBMol; /*using OpenBabel::OBBuilder; using OpenBabel::OBForceField;*/ NetworkFetchExtension::NetworkFetchExtension(QObject* parent) : Extension(parent), m_glwidget(0), m_molecule(0), m_network(0), m_moleculeName(0) { QAction* action = new QAction(this); action->setText(tr("Fetch from PDB...")); action->setData("PDB"); m_actions.append(action); action = new QAction(this); action->setText(tr("Fetch by chemical name...")); action->setData("NIH"); m_actions.append(action); action = new QAction(this); action->setText(tr("Fetch from URL...")); action->setData("URL"); m_actions.append(action); } NetworkFetchExtension::~NetworkFetchExtension() { delete m_moleculeName; } QList NetworkFetchExtension::actions() const { return m_actions; } QString NetworkFetchExtension::menuPath(QAction*) const { return tr("&File") + '>' + tr("Import"); } QUndoCommand* NetworkFetchExtension::performAction(QAction *action, GLWidget *widget) { m_glwidget = widget; if (!m_moleculeName) m_moleculeName = new QString; if (!m_network) { m_network = new QNetworkAccessManager(this); connect(m_network, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); } if (action->data() == "PDB") { // Prompt for a PDB name bool ok; QString pdbName = QInputDialog::getText(qobject_cast(parent()), tr("PDB Entry"), tr("PDB entry to download."), QLineEdit::Normal, "", &ok); if (!ok || pdbName.isEmpty()) return 0; // Hard coding the PDB download URL - this could be used for other services m_network->get(QNetworkRequest(QUrl("http://www.pdb.org/pdb/download/downloadFile.do?fileFormat=pdb&compression=NO&structureId=" + pdbName))); *m_moleculeName = pdbName + ".pdb"; } else if (action->data() == "NIH") { // Prompt for a chemical structure name bool ok; QString structureName = QInputDialog::getText(qobject_cast(parent()), tr("Chemical Name"), tr("Chemical structure to download."), QLineEdit::Normal, "", &ok); if (!ok || structureName.isEmpty()) return 0; // Hard coding the NIH resolver download URL - this could be used for other services m_network->get(QNetworkRequest( QUrl("http://cactus.nci.nih.gov/chemical/structure/" + structureName + "/sdf?get3d=true" + "&resolver=name_by_opsin,name_by_cir,name_by_chemspider" + "&requester=Avogadro"))); *m_moleculeName = structureName + ".sdf"; } else if (action->data() == "URL") { // Prompt for a URL bool ok; QString url = QInputDialog::getText(qobject_cast(parent()), tr("URL"), tr("URL of molecule to download."), QLineEdit::Normal, "", &ok); if (!ok || url.isEmpty()) return 0; // Arbitrary URL m_network->get(QNetworkRequest(QUrl(url))); *m_moleculeName = url; } widget->toolGroup()->setActiveTool("Navigate"); return 0; } void NetworkFetchExtension::writeSettings(QSettings &settings) const { Extension::writeSettings(settings); } void NetworkFetchExtension::readSettings(QSettings &settings) { Extension::readSettings(settings); } void NetworkFetchExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } void NetworkFetchExtension::replyFinished(QNetworkReply *reply) { // Read in all the data if (!reply->isReadable()) { QMessageBox::warning(qobject_cast(parent()), tr("Network Download Failed"), tr("Network timeout or other error.")); reply->deleteLater(); return; } QByteArray data = reply->readAll(); // Check if the PDB was successfully downloaded if (data.contains("Error report")) { QMessageBox::warning(qobject_cast(parent()), tr("Network Download Failed"), tr("Specified molecule could not be found: %1").arg(*m_moleculeName)); reply->deleteLater(); return; } // Now read it in with OpenBabel - we should add a wrapper class to automate OBConversion conv; QFileInfo info(*m_moleculeName); conv.SetInFormat(info.suffix().toAscii()); OBMol *obmol = new OBMol; if (conv.ReadString(obmol, QString(data).toStdString())) { /*if (info.suffix() == "smi") { OBBuilder builder; builder.Build(*obmol); obmol->AddHydrogens(); // Add some hydrogens before running force field OBForceField* pFF = OBForceField::FindForceField("MMFF94"); if (!pFF || !pFF->Setup(*obmol)) { pFF = OBForceField::FindForceField("UFF"); if (!pFF || !pFF->Setup(*obmol)) return; // can't do anything more } pFF->ConjugateGradients(250, 1.0e-4); pFF->UpdateCoordinates(*obmol); }*/ Molecule *mol = new Molecule; mol->setOBMol(obmol); mol->setFileName(*m_moleculeName); emit moleculeChanged(mol, Extension::DeleteOld | Extension::NewWindow); m_molecule = mol; } else { QMessageBox::warning(qobject_cast(parent()), tr("Network Download Failed"), tr("Specified molecule could not be loaded: %1").arg(*m_moleculeName)); } // We are responsible for deleting the reply object reply->deleteLater(); } } // End namespace Avogadro Q_EXPORT_PLUGIN2(networkfetchextension, Avogadro::NetworkFetchExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/povrayextension.h0000644000175000001440000000571712250371054023443 0ustar marcususers/********************************************************************** POVRayExtension - Extension for generating POV-Ray rendered images Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef POVRAYEXTENSION_H #define POVRAYEXTENSION_H #include "povraydialog.h" #include #include class QProcess; namespace Avogadro { class POVRayExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("POV-Ray", tr("POV-Ray"), tr("Create POV-Ray files and render them using the command line POV-Ray program.")) public: POVRayExtension(QObject* parent = 0); virtual ~POVRayExtension(); /** * @return a list of actions which this widget can perform */ virtual QList actions() const; /** * @return the menu path for the specified action */ virtual QString menuPath(QAction* action) const; /** * @param action The action that triggered the calls. * @param widget The currently active GLWidget (feedback to the user). * @return An undo command for this action. */ virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); /** * Save the settings for this extension. * @param settings Settings variable to write settings to. */ virtual void writeSettings(QSettings &settings) const; /** * Read the settings for this extension. * @param settings Settings variable to read settings from. */ virtual void readSettings(QSettings &settings); public Q_SLOTS: /** * Slot to change the current molecule. */ void setMolecule(Molecule *molecule); private: GLWidget* m_glwidget; POVRayDialog* m_POVRayDialog; QList m_actions; Molecule *m_molecule; QProcess *m_process; private Q_SLOTS: void render(); void finished(int exitCode); }; class POVRayExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(POVRayExtension) }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/animationextension.qrc0000644000175000001440000000030212250371054024421 0ustar marcususers icons/amarok_pause.png icons/amarok_play.png icons/amarok_stop.png avogadro-1.1.1/libavogadro/src/extensions/CMakeLists.txt0000755000175000001440000000773312250371054022560 0ustar marcususersADD_DEFINITIONS(${QT_DEFINITIONS}) ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_SHARED) set(DESTINATION_DIR ${Avogadro_PLUGIN_INSTALL_DIR}/extensions) include_directories(${CMAKE_CURRENT_BINARY_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/gl2ps" ) set(LINK_LIBS avogadro) set(PLUGIN_LABEL extensions) set(PLUGIN_TARGET extensions) add_custom_target(extensions COMMENT "Meta target to build all Avogadro extensions.") ### Template extension - template for extensions #avogadro_plugin(templateextension templateextension.cpp) ### Properties avogadro_plugin_nogl(propextension "../tools/skeletontree.cpp;propmodel.cpp;propextension.cpp") avogadro_plugin_nogl(cartesianextension cartesianextension.cpp cartesianeditor.ui cartesianextension.qrc) avogadro_plugin_nogl(molecularpropextension molecularpropextension.cpp molecularpropdialog.ui) target_link_libraries(molecularpropextension ${QT_QTNETWORK_LIBRARY}) ### Molecular Mechanics force fields set(forcefieldextension_SRCS forcefieldextension.cpp forcefielddialog.cpp constraintsdialog.cpp constraintsmodel.cpp conformersearchdialog.cpp) avogadro_plugin_nogl(forcefieldextension "${forcefieldextension_SRCS}" "forcefielddialog.ui;constraintsdialog.ui;conformersearchdialog.ui") if(${CMAKE_CXX_COMPILER_ID} MATCHES Intel AND UNIX) set_target_properties(forcefieldextension PROPERTIES COMPILE_FLAGS "-fvisibility=default") endif() ### hydrogens avogadro_plugin_nogl(hydrogensextension hydrogensextension.cpp) ### invertchirality avogadro_plugin_nogl(invertchiralextension invertchiralextension.cpp) ### Selections avogadro_plugin_nogl(selectextension selectextension.cpp) ### insert fragment avogadro_plugin_nogl(insertfragmentextension "insertfragmentextension.cpp;insertfragmentdialog.cpp;insertcommand.cpp;sortfiltertreeproxymodel.cpp" insertfragmentdialog.ui) ### insert peptide (builder) avogadro_plugin_nogl(insertpeptideextension "insertpeptideextension.cpp;insertcommand.cpp" insertpeptidedialog.ui) ### insert dna (builder) avogadro_plugin_nogl(insertdnaextension "insertdnaextension.cpp;insertcommand.cpp" insertdnadialog.ui) ### h->methyl avogadro_plugin_nogl(h2methylextension h2methylextension.cpp) if(ENABLE_PYTHON AND ALL_PYTHON_FOUND) ### python terminal message(STATUS "Enabled python terminal") avogadro_plugin_nogl(pythonterminal "pythonterminal.cpp;highlighter.cpp" pythonterminalwidget.ui) target_link_libraries(pythonterminal ${PYTHON_LIBRARIES}) file(GLOB python_SCRIPTS "python/*.py") install(FILES ${python_SCRIPTS} DESTINATION share/libavogadro/extensionScripts) endif() ### Animation set(animationextension_SRCS animationextension.cpp animationdialog.cpp povpainter.cpp trajvideomaker.cpp) avogadro_plugin_nogl(animationextension "${animationextension_SRCS}" animationdialog.ui animationextension.qrc) ### POV-Ray extension avogadro_plugin_nogl(povrayextension "povrayextension.cpp;povpainter.cpp;povraydialog.cpp" povraydialog.ui) ### File import extension avogadro_plugin_nogl(fileimportextension fileimportextension.cpp fileimportdialog.ui) ### Shader extension if(GLEW_FOUND) avogadro_plugin(shaderextension shaderextension.cpp shaderdialog.ui) target_link_libraries(shaderextension ${GLEW_LIBRARY}) file(GLOB shader_VERT "shaders/*.vert") file(GLOB shader_FRAG "shaders/*.frag") file(GLOB shader_PARAMS "shaders/*.params") install(FILES ${shader_VERT} ${shader_FRAG} ${shader_PARAMS} DESTINATION share/libavogadro/shaders) endif() ### super cells avogadro_plugin_nogl(supercellextension "supercellextension.cpp;supercelldialog.cpp" supercelldialog.ui) # Network fetch avogadro_plugin_nogl(networkfetchextension networkfetchextension.cpp) target_link_libraries(networkfetchextension ${QT_QTNETWORK_LIBRARY}) # GL2PS avogadro_plugin(gl2psextension "gl2psextension.cpp;gl2ps/gl2ps.c") # Subdirs add_subdirectory(crystallography) add_subdirectory(spectra) add_subdirectory(surfaces) add_subdirectory(swcntbuilder) add_subdirectory(qtaim) add_subdirectory(quantuminput) avogadro-1.1.1/libavogadro/src/extensions/constraintsmodel.cpp0000644000175000001440000001571512250371054024110 0ustar marcususers/********************************************************************** constraintsmodel.cpp - Model to hold constraints Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "constraintsmodel.h" #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; namespace Avogadro { int ConstraintsModel::rowCount(const QModelIndex &) const { return m_constraints.Size(); } int ConstraintsModel::columnCount(const QModelIndex &) const { return 6; } QVariant ConstraintsModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.row() >= m_constraints.Size()) return QVariant(); if (role == Qt::DisplayRole) switch (index.column()) { case 0: if (m_constraints.GetConstraintType(index.row()) == OBFF_CONST_IGNORE) return QString("Ignore Atom"); else if (m_constraints.GetConstraintType(index.row()) == OBFF_CONST_ATOM) return QString("Fix Atom"); else if (m_constraints.GetConstraintType(index.row()) == OBFF_CONST_ATOM_X) return QString("Fix Atom X"); else if (m_constraints.GetConstraintType(index.row()) == OBFF_CONST_ATOM_Y) return QString("Fix Atom Y"); else if (m_constraints.GetConstraintType(index.row()) == OBFF_CONST_ATOM_Z) return QString("Fix Atom Z"); else if (m_constraints.GetConstraintType(index.row()) == OBFF_CONST_DISTANCE) return QString("Distance"); else if (m_constraints.GetConstraintType(index.row()) == OBFF_CONST_ANGLE) return QString("Angle"); else if (m_constraints.GetConstraintType(index.row()) == OBFF_CONST_TORSION) return QString("Torsion angle"); break; case 1: return m_constraints.GetConstraintValue(index.row()); break; case 2: return m_constraints.GetConstraintAtomA(index.row()); break; case 3: return m_constraints.GetConstraintAtomB(index.row()); break; case 4: return m_constraints.GetConstraintAtomC(index.row()); break; case 5: return m_constraints.GetConstraintAtomD(index.row()); break; } return QVariant(); } QVariant ConstraintsModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) return QVariant(); if (orientation == Qt::Horizontal) { switch (section) { case 0: return QString("Type"); break; case 1: return QString("Value"); break; case 2: return QString("Atom idx 1"); break; case 3: return QString("Atom idx 2"); break; case 4: return QString("Atom idx 3"); break; case 5: return QString("Atom idx 4"); break; } } return QString("Constraint %1").arg(section + 1); } void ConstraintsModel::addIgnore(int index) { beginInsertRows(QModelIndex(), m_constraints.Size(), m_constraints.Size()); m_constraints.AddIgnore(index); endInsertRows(); } void ConstraintsModel::addAtomConstraint(int index) { beginInsertRows(QModelIndex(), m_constraints.Size(), m_constraints.Size()); m_constraints.AddAtomConstraint(index); endInsertRows(); } void ConstraintsModel::addAtomXConstraint(int index) { beginInsertRows(QModelIndex(), m_constraints.Size(), m_constraints.Size()); m_constraints.AddAtomXConstraint(index); endInsertRows(); } void ConstraintsModel::addAtomYConstraint(int index) { beginInsertRows(QModelIndex(), m_constraints.Size(), m_constraints.Size()); m_constraints.AddAtomYConstraint(index); endInsertRows(); } void ConstraintsModel::addAtomZConstraint(int index) { beginInsertRows(QModelIndex(), m_constraints.Size(), m_constraints.Size()); m_constraints.AddAtomZConstraint(index); endInsertRows(); } void ConstraintsModel::addDistanceConstraint(int a, int b, double length) { beginInsertRows(QModelIndex(), m_constraints.Size(), m_constraints.Size()); m_constraints.AddDistanceConstraint(a, b, length); endInsertRows(); } void ConstraintsModel::addAngleConstraint(int a, int b, int c, double angle) { beginInsertRows(QModelIndex(), m_constraints.Size(), m_constraints.Size()); m_constraints.AddAngleConstraint(a, b, c, angle); endInsertRows(); } void ConstraintsModel::addTorsionConstraint(int a, int b, int c, int d, double torsion) { beginInsertRows(QModelIndex(), m_constraints.Size(), m_constraints.Size()); m_constraints.AddTorsionConstraint(a, b, c, d, torsion); endInsertRows(); } void ConstraintsModel::clear() { qDebug() << "ConstraintsModel::clear()" << endl; if (m_constraints.Size()) { beginRemoveRows(QModelIndex(), 0, m_constraints.Size() - 1); m_constraints.Clear(); endRemoveRows(); } } void ConstraintsModel::deleteConstraint(int index) { qDebug() << "ConstraintsModel::deleteConstraint(" << index << ")" << endl; if (m_constraints.Size() && (index >= 0)) { beginRemoveRows(QModelIndex(), index, index); m_constraints.DeleteConstraint(index); endRemoveRows(); } } // remove all constraints in which the atom occurs void ConstraintsModel::primitiveRemoved(Primitive *primitive) { qDebug() << "ConstraintsModel::primitiveRemoved(...)" << endl; if (primitive->type() == Primitive::AtomType) { int index = static_cast(primitive)->index() + 1; for (int i = 0; i < m_constraints.Size(); ++i) { if ( (m_constraints.GetConstraintAtomA(i) == index) || (m_constraints.GetConstraintAtomB(i) == index) || (m_constraints.GetConstraintAtomC(i) == index) || (m_constraints.GetConstraintAtomD(i) == index) ) { beginRemoveRows(QModelIndex(), i, i); m_constraints.DeleteConstraint(i); endRemoveRows(); i--; // this index will be replaced with a new, we want to check this aswell } } } } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/hydrogensextension.h0000644000175000001440000000522112250371054024113 0ustar marcususers/********************************************************************** Hydrogens - Hydrogens Plugin for Avogadro Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef HYDROGENSEXTENSION_H #define HYDROGENSEXTENSION_H #include #include #include #include #include #include #include namespace Avogadro { class HydrogensExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("Hydrogens", tr("Hydrogens"), tr("Add or remove hydrogens")) public: //! Constructor HydrogensExtension(QObject *parent=0); //! Deconstructor virtual ~HydrogensExtension(); //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual QString menuPath(QAction *action) const; //@} void setMolecule(Molecule *molecule); private: QList m_actions; Molecule *m_molecule; }; class HydrogensCommand : public QUndoCommand { public: enum Action { AddHydrogens = 0, AddHydrogensPH, RemoveHydrogens }; public: HydrogensCommand(Molecule *molecule, enum Action action, GLWidget *widget, double pH = 7.4); ~HydrogensCommand(); virtual void undo(); virtual void redo(); virtual bool mergeWith ( const QUndoCommand * command ); virtual int id() const; private: Molecule *m_molecule; Molecule *m_moleculeCopy; IDList m_SelectedList; enum Action m_action; double m_pH; }; class HydrogensExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(HydrogensExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/povpainter.cpp0000644000175000001440000004213512250371054022703 0ustar marcususers/********************************************************************** POVPainter - drawing spheres, cylinders and text in a POVRay scene Copyright (C) 2007-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "povpainter.h" #include #include #include #include #include #include #include #include #include #include #include namespace Avogadro { class POVPainterPrivate { public: POVPainterPrivate() : pd (0), initialized (false), sharing(0), color(0), output(0), planeNormalVector(0., 0., 0.) { color.setFromRgba(0., 0., 0., 0.); } ~POVPainterPrivate() { } POVPainterDevice *pd; bool initialized; inline bool isValid(); /** * Painters can be shared, we must keep track of this. */ int sharing; Color color; QTextStream *output; Vector3d planeNormalVector; }; POVPainter::POVPainter() : d (new POVPainterPrivate) { } POVPainter::~POVPainter() { delete d; } void POVPainter::setColor (const Color *color) { d->color.setFromRgba(color->red(), color->green(), color->blue(), color->alpha()); } void POVPainter::setColor (const QColor *color) { d->color.setFromRgba(color->redF(), color->greenF(), color->blueF(), color->alphaF()); } void POVPainter::setColor (float red, float green, float blue, float alpha) { d->color.setFromRgba(red, green, blue, alpha); } void POVPainter::setColor(QString name) { d->color.setFromQColor(QColor(name)); } void POVPainter::setPlaneNormal (Vector3d planeNormalVector) { // Set the plane normal, multiCylinders are drawn relative to this d->planeNormalVector = planeNormalVector; } void POVPainter::drawSphere (const Vector3d ¢er, double radius) { // Write out a POVRay sphere for rendering *(d->output) << "sphere {\n" << "\t<" << center.x() << ", " << center.y() << ", " << center.z() << ">, " << radius << "\n\tpigment { rgbt <" << d->color.red() << ", " << d->color.green() << ", " << d->color.blue() << "," << 1.0 - d->color.alpha() << "> }\n}\n"; } void POVPainter::drawCylinder(const Vector3d &end1, const Vector3d &end2, double radius) { // Write out a POVRay cylinder for rendering *(d->output) << "cylinder {\n" << "\t<" << end1.x() << ", " << end1.y() << ", " << end1.z() << ">, " << "\t<" << end2.x() << ", " << end2.y() << ", " << end2.z() << ">, " << radius << "\n\tpigment { rgbt <" << d->color.red() << ", " << d->color.green() << ", " << d->color.blue() << ", " << 1.0 - d->color.alpha() << "> }\n}\n"; } void POVPainter::drawMultiCylinder(const Vector3d &end1, const Vector3d &end2, double radius, int order, double) { // Just render single bonds with the standard drawCylinder function if (order == 1) { drawCylinder(end1, end2, radius); return; } // Find the bond axis Vector3d axis = end2 - end1; double axisNorm = axis.norm(); if( axisNorm < 1.0e-5 ) return; Vector3d axisNormalized = axis / axisNorm; // Use the plane normal vector for the molecule to draw multicylinders along Vector3d ortho1 = axisNormalized.cross(d->planeNormalVector); double ortho1Norm = ortho1.norm(); if( ortho1Norm > 0.001 ) ortho1 /= ortho1Norm; else ortho1 = axisNormalized.unitOrthogonal(); // This number seems to work well for drawing the multiCylinder inside ortho1 *= radius*1.5; Vector3d ortho2 = axisNormalized.cross(ortho1); // Use an angle offset of zero for double bonds, 90 for triple and 22.5 for higher order double angleOffset = 0.0; if(order >= 3) { if(order == 3) angleOffset = 90.0; else angleOffset = 22.5; } // Actually draw the cylinders for( int i = 0; i < order; ++i) { double alpha = angleOffset / 180.0 * M_PI + 2.0 * M_PI * i / order; Vector3d displacement = cos(alpha) * ortho1 + sin(alpha) * ortho2; Vector3d displacedEnd1 = end1 + displacement; Vector3d displacedEnd2 = end2 + displacement; // Write out a POVRay cylinder for rendering *(d->output) << "cylinder {\n" << "\t<" << displacedEnd1.x() << ", " << displacedEnd1.y() << ", " << displacedEnd1.z() << ">, " << "\t<" << displacedEnd2.x() << ", " << displacedEnd2.y() << ", " << displacedEnd2.z() << ">, " << radius << "\n\tpigment { rgbt <" << d->color.red() << ", " << d->color.green() << ", " << d->color.blue() << ", " << 1.0 - d->color.alpha() << "> }\n}\n"; } } void POVPainter::drawShadedSector(const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &, double, bool) { } void POVPainter::drawArc(const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &, double, double, bool) { } void POVPainter::drawShadedQuadrilateral(const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &) { } void POVPainter::drawQuadrilateral(const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &, double) { } void POVPainter::drawMesh(const Mesh & mesh, int mode) { // Now we draw the given mesh to the OpenGL widget switch (mode) { case 0: // Filled triangles break; case 1: // Lines break; case 2: // Points break; } // Render the triangles of the mesh std::vector t = mesh.vertices(); std::vector n = mesh.normals(); // If there are no triangles then don't bother doing anything if (t.size() == 0) return; QString vertsStr, ivertsStr, normsStr, inormsStr; QTextStream verts(&vertsStr); verts << "vertex_vectors{" << t.size() << ",\n"; QTextStream iverts(&ivertsStr); iverts << "face_indices{" << t.size() / 3 << ",\n"; QTextStream norms(&normsStr); norms << "normal_vectors{" << n.size() << ",\n"; for(unsigned int i = 0; i < t.size(); ++i) { verts << "<" << t[i].x() << "," << t[i].y() << "," << t[i].z() << ">"; norms << "<" << n[i].x() << "," << n[i].y() << "," << n[i].z() << ">"; if (i != t.size()-1) { verts << ", "; norms << ", "; } if (i != 0 && i%3 == 0) { verts << '\n'; norms << '\n'; } } // Now to write out the indices for (unsigned int i = 0; i < t.size(); i += 3) { iverts << "<" << i << "," << i+1 << "," << i+2 << ">"; if (i != t.size()-3) { iverts << ", "; } if (i != 0 && ((i+1)/3)%3 == 0) { iverts << '\n'; } } // Now to close off all the arrays verts << "\n}"; norms << "\n}"; iverts << "\n}"; // Now to write out the full mesh - could be pretty big... *(d->output) << "mesh2 {\n" << vertsStr << '\n' << normsStr << '\n' << ivertsStr << '\n' << "\tpigment { rgbt <" << d->color.red() << ", " << d->color.green() << ", " << d->color.blue() << ", " << 1.0 - d->color.alpha() << "> }" << "}\n\n"; } void POVPainter::drawColorMesh(const Mesh & mesh, int mode) { // Now we draw the given mesh to the OpenGL widget switch (mode) { case 0: // Filled triangles break; case 1: // Lines break; case 2: // Points break; } // Render the triangles of the mesh std::vector v = mesh.vertices(); std::vector n = mesh.normals(); std::vector c = mesh.colors(); // If there are no triangles then don't bother doing anything if (v.size() == 0 || v.size() != c.size()) return; QString vertsStr, ivertsStr, normsStr, texturesStr; QTextStream verts(&vertsStr); verts << "vertex_vectors{" << v.size() << ",\n"; QTextStream iverts(&ivertsStr); iverts << "face_indices{" << v.size() / 3 << ",\n"; QTextStream norms(&normsStr); norms << "normal_vectors{" << n.size() << ",\n"; QTextStream textures(&texturesStr); textures << "texture_list{" << c.size() << ",\n"; for(unsigned int i = 0; i < v.size(); ++i) { verts << "<" << v[i].x() << "," << v[i].y() << "," << v[i].z() << ">"; norms << "<" << n[i].x() << "," << n[i].y() << "," << n[i].z() << ">"; textures << "texture{pigment{rgbt<" << c[i].red() << "," << c[i].green() << "," << c[i].blue() << "," << 1.0 - d->color.alpha() << ">}}"; if (i != v.size()-1) { verts << ", "; norms << ", "; textures << ",\n"; } if (i != 0 && i%3 == 0) { verts << '\n'; norms << '\n'; } } // Now to write out the indices for (unsigned int i = 0; i < v.size(); i += 3) { iverts << "<" << i << "," << i+1 << "," << i+2 << ">"; iverts << "," << i << "," << i+1 << "," << i+2; if (i != v.size()-3) iverts << ", "; if (i != 0 && ((i+1)/3)%3 == 0) iverts << '\n'; } // Now to close off all the arrays verts << "\n}"; norms << "\n}"; iverts << "\n}"; textures << "\n}"; // Now to write out the full mesh - could be pretty big... *(d->output) << "mesh2 {\n" << vertsStr << '\n' << normsStr << '\n' << texturesStr << '\n' << ivertsStr << '\n' << "}\n\n"; } int POVPainter::drawText(int, int, const QString &) { return 0; } int POVPainter::drawText(const QPoint&, const QString &) { return 0; } int POVPainter::drawText(const Vector3d &, const QString &) { /*qDebug() << "text {\n" //<< "\t<" << center.x() << ", " << center.y() << ", " << center.z() << ">\n" << "\tttf " << "\"timrom.ttf\"" << str << "1, 0\n" << "\tpigment { White }" << "\n}\n\n"; *(d->output) << "text {\n" << "\tttf " << "\"timrom.ttf\" \"" << str << "\" 1, 0\n" << "\tpigment { rgbt <" << d->color.red() << ", " << d->color.green() << ", " << d->color.blue() << "," << 1.0 - d->color.alpha() << "> }\n" << "\ttranslate<" << center.x() << ", " << center.y() << ", " << center.z() << ">\n" << "}\n\n";*/ return 0; } int POVPainter::drawText(const Vector3d &, const QString &, const QFont &) { return 0; } void POVPainter::drawBox(const Eigen::Vector3d &, const Eigen::Vector3d &) { } void POVPainter::drawTorus(const Eigen::Vector3d &, double, double) { } void POVPainter::drawEllipsoid(const Eigen::Vector3d &, const Eigen::Matrix3d &) { } void POVPainter::begin(QTextStream *output, Vector3d planeNormalVector) { d->output = output; d->planeNormalVector = planeNormalVector; } void POVPainter::end() { d->output = 0; } POVPainterDevice::POVPainterDevice(const QString& filename, double aspectRatio, const GLWidget* glwidget) { m_output = 0; m_aspectRatio = aspectRatio; m_glwidget = glwidget; m_painter = new POVPainter; m_file = new QFile(filename); if (!m_file->open(QIODevice::WriteOnly | QIODevice::Text)) return; m_output = new QTextStream(m_file); m_output->setRealNumberPrecision(15); m_painter->begin(m_output, m_glwidget->normalVector()); m_engines = m_glwidget->engines(); initializePOV(); render(); m_painter->end(); m_file->close(); } POVPainterDevice::~POVPainterDevice() { delete m_output; m_output = 0; delete m_file; delete m_painter; } void POVPainterDevice::initializePOV() { // Initialise our POV-Ray scene // The POV-Ray camera basically has the same matrix elements - we just need to translate // FIXME Still working on getting the translation to POV-Ray right... Vector3d cameraT = -( m_glwidget->camera()->modelview().linear().adjoint() * m_glwidget->camera()->modelview().translation() ); Vector3d cameraX = m_glwidget->camera()->backTransformedXAxis(); Vector3d cameraY = m_glwidget->camera()->backTransformedYAxis(); Vector3d cameraZ = -m_glwidget->camera()->backTransformedZAxis(); double huge; if(m_glwidget->farthestAtom()) { huge = 10 * m_glwidget->farthestAtom()->pos()->norm(); } else { huge = 10; } Vector3d light0pos = huge * (m_glwidget->camera()->modelview().linear().adjoint() * Vector3d(LIGHT0_POSITION[0], LIGHT0_POSITION[1], LIGHT0_POSITION[2])); Vector3d light1pos = huge * (m_glwidget->camera()->modelview().linear().adjoint() * Vector3d(LIGHT1_POSITION[0], LIGHT1_POSITION[1], LIGHT1_POSITION[2])); // Output the POV-Ray initialisation code *(m_output) << "global_settings {\n" << "\tambient_light rgb <" << LIGHT_AMBIENT[0] << ", " << LIGHT_AMBIENT[1] << ", " << LIGHT_AMBIENT[2] << ">\n" << "\tmax_trace_level 15\n}\n\n" << "background { color rgb <" << m_glwidget->background().redF() << "," << m_glwidget->background().greenF() << "," << m_glwidget->background().blueF() << "> }\n\n" << "camera {\n" << "\tperspective\n" << "\tlocation <" << cameraT.x() << ", " << cameraT.y() << ", " << cameraT.z() << ">\n" << "\tangle " << m_glwidget->camera()->angleOfViewY() << '\n' << "\tup <" << cameraY.x() << ", " << cameraY.y() << ", " << cameraY.z() << ">\n" << "\tright <" << cameraX.x() << ", " << cameraX.y() << ", " << cameraX.z() << "> * " << m_aspectRatio << '\n' << "\tdirection <" << cameraZ.x() << ", " << cameraZ.y() << ", " << cameraZ.z() << "> }\n\n" << "light_source {\n" << "\t<" << light0pos[0] << ", " << light0pos[1] << ", " << light0pos[2] << ">\n" << "\tcolor rgb <" << LIGHT0_DIFFUSE[0] << ", " << LIGHT0_DIFFUSE[1] << ", " << LIGHT0_DIFFUSE[2] << ">\n" << "\tfade_distance " << 2 * huge << '\n' << "\tfade_power 0\n" << "\tparallel\n" << "\tpoint_at <" << -light0pos[0] << ", " << -light0pos[1] << ", " << -light0pos[2] << ">\n" << "}\n\n" << "light_source {\n" << "\t<" << light1pos[0] << ", " << light1pos[1] << ", " << light1pos[2] << ">\n" << "\tcolor rgb <" << LIGHT1_DIFFUSE[0] << ", " << LIGHT1_DIFFUSE[1] << ", " << LIGHT1_DIFFUSE[2] << ">\n" << "\tfade_distance " << 2 * huge << '\n' << "\tfade_power 0\n" << "\tparallel\n" << "\tpoint_at <" << -light1pos[0] << ", " << -light1pos[1] << ", " << -light1pos[2] << ">\n" << "}\n\n" << "#default {\n\tfinish {ambient .8 diffuse 1 specular 1 roughness .005 metallic 0.5}\n}\n\n"; } void POVPainterDevice::render() { // Now render the scene using the active engines foreach( Engine *engine, m_engines ) { if (engine->isEnabled()) { // Use unions for opaque objects - they are faster *m_output << "union {\n"; engine->renderOpaque(this); *m_output << "}\n"; } if (engine->isEnabled() && engine->layers() & Engine::Transparent) { // Use merge for transparent objects, slower but more correct *m_output << "merge {\n"; engine->renderTransparent(this); *m_output << "}\n"; } } } } // End namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/wiitrackextension.h0000644000175000001440000000477712250371054023745 0ustar marcususers/********************************************************************** WiiTrack - Wiimote head tracking extension Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef WIITRACKEXTENSION_H #define WIITRACKEXTENSION_H #include #include #include #include #include #include namespace Avogadro { class WiiTrackExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("WiiTrack", tr("Wii Tracking"), tr("Track motion using Wii remotes")) public slots: void redraw(); public: //! Constructor WiiTrackExtension(QObject *parent=0); //! Deconstructor virtual ~WiiTrackExtension(); //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, Molecule *molecule, GLWidget *widget, QTextEdit *messages=NULL); virtual QString menuPath(QAction *action) const; private: QList m_actions; GLWidget *m_widget; QTimer *m_timer; // cwiid stuff cwiid_wiimote_t *m_wiimote; /* wiimote handle */ void cwiidConnect(); void cwiidDisconnect(); void cwiidSetReportMode(cwiid_wiimote_t *wiimote, unsigned char rpt_mode); static cwiid_mesg_callback_t cwiid_callback; /* callback function */ double m_lastDistance; double m_lastDot1x; double m_lastDot1y; double m_lastDot2x; double m_lastDot2y; }; class WiiTrackExtensionFactory : public QObject, public ExtensionFactory { Q_OBJECT; Q_INTERFACES(Avogadro::ExtensionFactory); AVOGADRO_EXTENSION_FACTORY(WiiTrackExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/pythonterminal.cpp0000644000175000001440000002200612250371054023564 0ustar marcususers/********************************************************************** Python - Gives us some Python helper stuff Copyright (C) 2008 by Donald Ephraim Curtis Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "pythonterminal.h" #include "../config.h" #include #include #include #include #include #include #include "highlighter.h" using namespace std; using namespace boost::python; namespace Avogadro { PythonTerminal::PythonTerminal( QObject *parent ) : DockExtension( parent ), m_molecule(0), m_terminalDock(0) { } PythonTerminal::~PythonTerminal() { //if (m_terminalDock) //m_terminalDock->deleteLater(); } /*QList PythonTerminal::actions() const { return QList(); } // allows us to set the intended menu path for each action QString PythonTerminal::menuPath(QAction *action) const { Q_UNUSED(action); return QString(); }*/ QDockWidget * PythonTerminal::dockWidget() { if(!m_terminalDock) { m_terminalDock = new QDockWidget( tr("Python Terminal"), qobject_cast(parent()) ); m_terminalDock->setObjectName( tr("pythonTerminalDock") ); m_terminalEdit = new PythonTerminalEdit(); m_terminalDock->setWidget(m_terminalEdit); new Highlighter(m_terminalEdit->document()); } return m_terminalDock; } void PythonTerminal::setMolecule(Molecule *molecule) { m_molecule = molecule; m_terminalEdit->setMolecule(molecule); } /*QUndoCommand* PythonTerminal::performAction( QAction *action, GLWidget *widget ) { Q_UNUSED(action); Q_UNUSED(widget); return 0; }*/ /* PythonTerminalWidget::PythonTerminalWidget( QWidget *parent ) : QWidget(parent) { ui.setupUi(this); QFont font; font.setFamily(QString::fromUtf8("Courier New")); inputLine = new PythonTerminalLineEdit(this); inputLine->setObjectName(QString::fromUtf8("inputLine")); inputLine->setFont(font); ui.outputText->setFont(font); // TODO: Make a full completion list, including spaces, separators, etc. QStringList wordList; wordList << "Avogadro" << "molecule" << "atom" << "bond"; wordList << "numAtoms" << "numBonds"; wordList << "import Avogadro" << "widget = Avogadro.GLWidget.current()"; QCompleter *completer = new QCompleter(wordList, this); completer->setCompletionMode(QCompleter::InlineCompletion); completer->setCaseSensitivity(Qt::CaseSensitive); inputLine->setCompleter(completer); layout()->addWidget(inputLine); } */ PythonTerminalEdit::PythonTerminalEdit(QWidget *parent) : QTextEdit(parent), m_current(0), m_cursorPos(0), m_indent(0) { // Load the saved commands QSettings settings; int size = settings.beginReadArray("pythonCommands"); for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); m_commandStack.append( settings.value("command").toString() ); } settings.endArray(); // set the font QFont font; font.setFamily(QString::fromUtf8("Courier New")); setFont(font); m_interpreter.exec("import Avogadro"); printPrompt(); // connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(setTextCursorToEnd())); } void PythonTerminalEdit::setMolecule(Molecule *molecule) { m_molecule = molecule; m_interpreter.setMolecule(m_molecule); } void PythonTerminalEdit::setTextCursorToEnd() { QTextCursor cursor(textCursor()); if (cursor.position() < m_cursorPos) cursor.setPosition(m_cursorPos); setTextCursor(cursor); } void PythonTerminalEdit::runCommand() { int indent = 0; QString text = toPlainText(); text = text.right(text.size() - m_cursorPos); QString indentString; if(!text.trimmed().isEmpty()) { QString line = text; while (line.startsWith(' ')) { line.remove(0, 1); indent++; } line += text.trimmed(); if (line.endsWith(':')) { indent += 2; m_lines.append(text + "\n"); append(QLatin1String("")); } else { if (indent && !m_lines.isEmpty()) { m_lines.append(text + "\n"); append(QLatin1String("")); } else { QString result = m_interpreter.exec(text); append(result); } } for (int i = 0; i < indent; ++i) indentString += QLatin1String(" "); // Always update the molecule when running commands from the terminal widget m_molecule->update(); } else { QString result = m_interpreter.exec(m_lines); append(result); m_lines.clear(); } m_indent = indent; printPrompt(); } void PythonTerminalEdit::printPrompt() { QTextCursor cursor(textCursor()); cursor.clearSelection(); cursor.movePosition(QTextCursor::End); if (m_lines.isEmpty()) { cursor.insertText(QLatin1String(">>> ")); } else { QString indentString; for (int i = 0; i < m_indent; ++i) indentString += QLatin1String(" "); cursor.insertText(QLatin1String("... ") + indentString); } m_cursorPos = cursor.position(); m_cursorPos -= m_indent; setTextCursor(cursor); } void PythonTerminalEdit::keyPressEvent(QKeyEvent *event) { if(event->key() == Qt::Key_Up) { if(m_commandStack.size()) { m_current--; if(m_current < 0) { m_current = m_commandStack.size(); } if(m_current == m_commandStack.size()) { // we've reached the first command, display empty prompt setText(toPlainText().left(m_cursorPos)); QTextCursor cursor(textCursor()); cursor.movePosition(QTextCursor::End); setTextCursor(cursor); } else { // display cached command setText(toPlainText().left(m_cursorPos)); QTextCursor cursor(textCursor()); cursor.movePosition(QTextCursor::End); cursor.insertText(m_commandStack.at(m_current)); cursor.movePosition(QTextCursor::End); setTextCursor(cursor); } } event->accept(); return; } else if(event->key() == Qt::Key_Down) { if(m_commandStack.size()) { m_current++; if(m_current > m_commandStack.size()) { m_current = 0; } if(m_current == m_commandStack.size()) { // we've reached the last command, display empty prompt setText(toPlainText().left(m_cursorPos)); QTextCursor cursor(textCursor()); cursor.movePosition(QTextCursor::End); setTextCursor(cursor); } else { // display cached command setText(toPlainText().left(m_cursorPos)); QTextCursor cursor(textCursor()); cursor.movePosition(QTextCursor::End); cursor.insertText(m_commandStack.at(m_current)); cursor.movePosition(QTextCursor::End); setTextCursor(cursor); } } event->accept(); return; } else if(event->key() == Qt::Key_Return) { QString text = toPlainText(); QString t = text.right(text.size() - m_cursorPos); if(!t.isEmpty()) { m_commandStack.append(t); // this limits how many commands we save if(m_commandStack.size() > 100) { m_commandStack.removeFirst(); } // save the commands before we execute, this will allow users to see // what they did before the crash QSettings settings; settings.beginWriteArray("pythonCommands"); for (int i = 0; i < m_commandStack.size(); ++i) { settings.setArrayIndex(i); settings.setValue("command", m_commandStack.at(i)); } settings.endArray(); } m_current = m_commandStack.size(); runCommand(); event->accept(); return; } else if(event->key() == Qt::Key_Backspace) { QTextCursor cursor(textCursor()); if (cursor.position() <= m_cursorPos) { event->accept(); return; } } else if(event->key() == Qt::Key_Home) { QTextCursor cursor(textCursor()); cursor.setPosition(m_cursorPos); setTextCursor(cursor); event->accept(); return; } setTextCursorToEnd(); QTextEdit::keyPressEvent(event); } } Q_EXPORT_PLUGIN2(pythonterminal, Avogadro::PythonTerminalFactory) avogadro-1.1.1/libavogadro/src/extensions/povpainter.h0000644000175000001440000003500312250371054022344 0ustar marcususers/********************************************************************** POVPainter - drawing spheres, cylinders and text in a POVRay scene Copyright (C) 2007-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef POVPAINTER_H #define POVPAINTER_H #include #include #include #include class QFile; class QTextStream; using namespace Eigen; namespace Avogadro { // Forward declaration class Color; /** * @class POVPainter povpainter.h * @brief Implementation of the Painter class using POV-Ray. * @author Marcus D. Hanwell * * This class implements the base Painter class using POV-Ray. It is intended * to be used with the POV-Ray to raytrace molecules and other constructs to * a POV-Ray scene. * * @sa Painter */ class POVPainterPrivate; class POVPainter : public Painter { public: /** * Constructor. * @param quality defaults to -1, valid range from 0 to 4. */ POVPainter(); /** * Destructor */ ~POVPainter(); /** * @return the current global quality setting. */ int quality() const { return 4; }; /** * Uses the primitive to set the type and name. Not used by POV-Ray as it * is not an interactive display. */ void setName(const Primitive *) { } /** * Sets the primitive type and id. Not used by POV-Ray as it is not an * interactive display. */ void setName(Primitive::Type, int) { } /** * Set the color to paint the primitives with. * @param color the color to be used for painting. */ void setColor(const Color *color); /** * Set the color to paint the primitives with. * @param color the color to be used for painting. */ void setColor (const QColor *color); /** * Set the color to paint elements by its name * @param name name of the color to be used */ void setColor(QString name); /** * Set the color to paint elements with where 0.0 is the minimum and 1.0 * is the maximum. * @param red component of the color. * @param green component of the color. * @param blue component of the color. * @param alpha component of the color. */ void setColor(float red, float green, float blue, float alpha = 1.0); /** * Sets the plane normal of the scene, this affects the way higher order * bonds are rendered. */ void setPlaneNormal(Vector3d planeNormalVector); /** * Draws a sphere, leaving the Painter choose the appropriate detail level based on the * apparent radius (ratio of radius over distance) and the global quality setting. * @param center the position of the center of the sphere. * @param radius the radius of the sphere. */ void drawSphere(const Vector3d ¢er, double radius); /** * Draws a cylinder, leaving the Painter choose the appropriate detail level based on the * apparent radius (ratio of radius over distance) and the global quality setting. * @param end1 the position of the first end of the cylinder. * @param end2 the position of the second end of the cylinder. * @param radius the radius, i.e. half-width of the cylinder. */ void drawCylinder(const Vector3d &end1, const Vector3d &end2, double radius); /** * Draws a multiple cylinder (see below), leaving the Painter choose the appropriate * detail level based on the apparent radius (ratio of radius over distance) and the * global quality setting. * * What is a "multiple cylinder"? Think bond of order two or more between two atoms. * This function is here to allow drawing multiple bonds in a single call. * * This function takes care of rendering multiple bonds in such a way that the individual * bonds avoid hiding each other, at least in the defaut viewpoint of a molecule. * To achieves that, it asks the GLWidget for the the normal vector of the * molecule's best-fitting plane. * * @param end1 the position of the first end of the bond. * @param end2 the position of the second end of the bond. * @param radius the radius, i.e. half-width of each cylinder. * @param order the multiplicity order of the bond, e.g. 2 for a double bond. * When this parameter equals 1, this function is equivalent to * drawCylinder(). * @param shift how far away from the central axis the cylinders are shifted. * In other words this influences the total width of multiple bonds. */ void drawMultiCylinder(const Vector3d &end1, const Vector3d &end2, double radius, int order, double shift); /** * Draws a cone between the tip and the base with the base radius given. * @param base the position of the base of the cone. * @param tip the position of the tip of the cone. * @param radius the radius of the base of the cone. */ void drawCone(const Eigen::Vector3d &, const Eigen::Vector3d &, double, double) { } /** * Draws a line between the given points of the given width. * @param start the position of the start of the line. * @param end the position of the end of the line. * @param lineWidth the width of the line. */ void drawLine(const Eigen::Vector3d &, const Eigen::Vector3d &, double) { } /** * Draws a multiple line between the given points. This function is the * line equivalent to the drawMultiCylinder function and performs the * same basic operations using simpler and quicker lines. * @param start the position of the start of the line. * @param end the position of the end of the line. * @param lineWidth the width of the line. * @param order the order of the bond, e.g. 2 for a double bond. * @param stipple The stipple parameter for the bond, can be used to * draw aromatic bonds etc. * sa drawMultiCylinder */ void drawMultiLine(const Eigen::Vector3d &, const Eigen::Vector3d &, double, int, short) { } /** * Draws a triangle with vertives on the three given points. This function * calculates the normal of the triangle and corrects the winding order to * ensure the front face is facing the camera. * @param p1 first triangle vertex. * @param p2 second triangle vertex. * @param p3 third triangle vertex. */ void drawTriangle(const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &) { } /** * Draws a triangle with vertives on the three given points using the * given normal. This function corrects the triangle's winding order. * @param p1 first triangle vertex. * @param p2 second triangle vertex. * @param p3 third triangle vertex. * @param n the normal of the triangle. */ void drawTriangle(const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &, const Eigen::Vector3d &) { } /** * Draw a cubic B-spline between the given points. * @param pts QVector containing the points to draw the cubic B-spline * along. * @param radius the radius of the cubic B-spline. */ void drawSpline(const QVector&, double) { } /** * Draws a shaded sector of a circle. The sector is defined by three vectors, * the center of the circle, and two vectors that define the lines going out * from the centre of the circle to the circumference of the circle. The * actual points on the circumference are found using these two vectors and * the radius of the circle. * * @param origin the center of the circle this sector is a portion of. * @param direction1 a vector defining the line the first point will lie on. * @param direction2 a vector defining the line the second point will lie on. * @param radius the radius of the circle this sector is a portion of. * @param alternateAngle whether to draw the obtuse angle made by the two vectors * instead of the acute angle between them. */ void drawShadedSector(const Eigen::Vector3d & origin, const Eigen::Vector3d & direction1, const Eigen::Vector3d & direction2, double radius, bool alternateAngle = false); /** * Draws an arc. The arc is defined by three vectors, the center of the circle, * and two vectors that define the lines going out from the center of the * circle to the circumference of the circle. The actual points on the * circumference are found using these two vectors and the radius of the circle. * * @param origin the center of the circle whose circumference this arc is a portion of. * @param direction1 a vector defining the line the start of the arc will lie on. * @param direction2 a vector defining the line the end of the arc will lie on. * @param radius the radius of the circle whose circumference this arc is a portion of. * @param lineWidth the thickness of the line the arc will be drawn with. * @param alternateAngle whether to draw the obtuse angle made by the two vectors * instead of the acute angle between them. */ void drawArc(const Eigen::Vector3d & origin, const Eigen::Vector3d & direction1, const Eigen::Vector3d & direction2, double radius, double lineWidth, bool alternateAngle = false); /** * Draws a solid two dimensional quadrilateral in three dimensional space. * * @param point1 the first of the four corners of the quadrilateral. * @param point2 the second of the four corners of the quadrilateral. * @param point3 the third of the four corners of the quadrilateral. * @param point4 the last of the four corners of the quadrilateral. */ void drawShadedQuadrilateral(const Eigen::Vector3d & point1, const Eigen::Vector3d & point2, const Eigen::Vector3d & point3, const Eigen::Vector3d & point4); /** * Draws the outline of a two dimensional quadrilateral in three dimensional space. * * @param point1 the first of the four corners of the quadrilateral. * @param point2 the second of the four corners of the quadrilateral. * @param point3 the third of the four corners of the quadrilateral. * @param point4 the last of the four corners of the quadrilateral. * @param lineWidth the thickness of the line the quadrilateral will be drawn with. */ void drawQuadrilateral(const Eigen::Vector3d & point1, const Eigen::Vector3d & point2, const Eigen::Vector3d & point3, const Eigen::Vector3d & point4, double lineWidth); /** * Draws a continuous mesh of triangles. * @param mesh the mesh to be drawn. * @param mode the mode to use. 0 = filled, 1 = lines and 2 = points. */ void drawMesh(const Mesh & mesh, int mode = 0); /** * Draws a continuous mesh of triangles and respects the colors stored. * @param mesh the mesh to be drawn. * @param mode the mode to use. 0 = filled, 1 = lines and 2 = points. */ void drawColorMesh(const Mesh & mesh, int mode = 0); int drawText (int x, int y, const QString &string); int drawText (const QPoint& pos, const QString &string); int drawText (const Vector3d & pos, const QString &string); int drawText (const Vector3d & pos, const QString &string, const QFont &font); /** * Placeholder to draw a box. * @param corner1 First corner of the box. * @param corner2 Second corner of the box. * @todo Implement this primitive. */ void drawBox(const Eigen::Vector3d &corner1, const Eigen::Vector3d &corner2); /** * Placeholder to draw a torus. * @param pos Position of the center of the torus. * @param majorRadius Major radius of the torus. * @param minorRadius Minor radius of the torus. * @todo Implement this primitive. */ void drawTorus(const Eigen::Vector3d &pos, double majorRadius, double minorRadius); /** * Placeholder to draw a ellipsoid. * @param pos Position of the center of the ellipsoid. * @param matrix Linear transformation matrix for rotation and scaling. * @todo Implement this primitive. */ void drawEllipsoid(const Eigen::Vector3d &position, const Eigen::Matrix3d &matrix); void begin(QTextStream *output, Vector3d planeNormalVector); void end(); private: POVPainterPrivate * const d; }; class POVPainterDevice : public PainterDevice { public: POVPainterDevice(const QString& filename, double aspectRatio, const GLWidget* glwidget); ~POVPainterDevice(); void initializePOV(); void render(); Painter *painter() const { return m_painter; } Camera *camera() const { return m_glwidget->camera(); } bool isSelected(const Primitive *p) const { return m_glwidget->isSelected(p); } double radius(const Primitive *p) const { return m_glwidget->radius(p); } const Molecule *molecule() const { return m_glwidget->molecule(); } Color *colorMap() const { return m_glwidget->colorMap(); } int width() { return m_glwidget->width(); } int height() { return m_glwidget->height(); } private: const GLWidget *m_glwidget; QList m_engines; POVPainter *m_painter; QFile *m_file; QTextStream *m_output; double m_aspectRatio; }; } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/animationextension.cpp0000644000175000001440000002120112250371054024417 0ustar marcususers/********************************************************************** Animation - Basic animation Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "animationextension.h" #include "trajvideomaker.h" #include #include #include #include #include #include #include #include #include #include using namespace OpenBabel; using Eigen::Vector3d; namespace Avogadro { AnimationExtension::AnimationExtension(QObject *parent) : Extension(parent), m_molecule(0), m_animationDialog(0), m_animation(0), m_widget(0) { QAction *action = new QAction(this); action->setText(tr("Animation...")); m_actions.append(action); action = new QAction( this ); action->setSeparator(true); m_actions.append(action); } AnimationExtension::~AnimationExtension() { if (m_animation) { delete m_animation; m_animation = 0; } if (m_animationDialog) { m_animationDialog->deleteLater(); } } QList AnimationExtension::actions() const { return m_actions; } QString AnimationExtension::menuPath(QAction *) const { return tr("E&xtensions"); } void AnimationExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* AnimationExtension::performAction(QAction *, GLWidget* widget) { m_widget = widget; if (!m_animation) { m_animation = new Animation; } m_animation->setMolecule(widget->molecule()); if (!m_animationDialog) { m_animationDialog = new AnimationDialog(static_cast(parent())); connect(m_animationDialog, SIGNAL(fileName(QString)), this, SLOT(loadFile(QString))); connect(m_animationDialog, SIGNAL(sliderChanged(int)), m_animation, SLOT(setFrame(int))); connect(m_animationDialog, SIGNAL(fpsChanged(int)), m_animation, SLOT(setFps(int))); connect(m_animationDialog, SIGNAL(loopChanged(int)), this, SLOT(setLoop(int))); connect(m_animationDialog, SIGNAL(dynamicBondsChanged(int)), this, SLOT(setDynamicBonds(int))); connect(m_animationDialog, SIGNAL(play()), m_animation, SLOT(start())); connect(m_animationDialog, SIGNAL(pause()), m_animation, SLOT(pause())); connect(m_animationDialog, SIGNAL(stop()), m_animation, SLOT(stop())); connect(m_animationDialog, SIGNAL(videoFileInfo(QString)), this, SLOT(saveVideo(QString))); connect(m_animation, SIGNAL(frameChanged(int)), m_animationDialog, SLOT(setFrame(int))); } m_animationDialog->setFrameCount(m_animation->numFrames()); m_animationDialog->setFrame(1); m_animationDialog->show(); return 0; } void AnimationExtension::loadFile(QString file) { //qDebug() << "AnimationExtension::loadFile()" << endl; if (file.isEmpty()) return; if (file.endsWith(QLatin1String(".xyz")) || file.endsWith(QLatin1String("HISTORY")) ) { readTrajFromFile(file); } else { //non xyz OBConversion conv; OBFormat *inFormat = conv.FormatFromExt(( file.toAscii() ).data() ); if ( !inFormat || !conv.SetInFormat( inFormat ) ) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Cannot read file format of file %1." ) .arg( file ) ); return; } OpenBabel::OBMol obmol; if (!conv.ReadFile(&obmol, file.toStdString())) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Read trajectory file %1 failed." ) .arg( file ) ); return; } else m_molecule->setOBMol(&obmol); } m_animationDialog->setFrameCount(m_animation->numFrames()); m_animationDialog->setFrame(1); m_animation->setFps(m_animationDialog->fps()); } void AnimationExtension::setLoop(int state) { if (state == Qt::Checked) { m_animation->setLoopCount(0); } else { m_animation->setLoopCount(1); } } void AnimationExtension::setDynamicBonds(int state) { if (state == Qt::Checked) { m_animation->setDynamicBonds(true); } else { m_animation->setDynamicBonds(false); } } void AnimationExtension::saveVideo(QString videoFileName) { if (videoFileName.isEmpty()) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Must specify a valid .avi file name" )); return; } if (!videoFileName.endsWith(QLatin1String(".avi"))) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Must specify a valid .avi file name" )); return; } if (!m_widget) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "GL widget was not correctly initialized in order to save video" )); return; } //first, split out the directory and filenames QString dir, fileName, prefix; int slashPos = videoFileName.lastIndexOf('/'); if (slashPos < 0) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Invalid video filename. Must include full directory path" )); return; } dir = videoFileName.left(slashPos) + '/'; fileName = videoFileName.right(videoFileName.length() - (slashPos+1)); if (fileName.isEmpty()) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Invalid video filename. Must include full directory path and name, ending with .avi" )); return; } //if (fileName.endsWith(".avi")) { prefix = fileName.left(fileName.length() - 4); //Make the directory where the snapshots will be saved QString snapshotsDir = dir + prefix + '/'; QDir qdir; if (!qdir.exists(snapshotsDir)) qdir.mkpath(snapshotsDir); TrajVideoMaker::makeVideo(m_widget, m_animation, snapshotsDir, videoFileName); } void AnimationExtension::readTrajFromFile(QString trajfile) { const char *format; if ( trajfile.endsWith(QLatin1String(".xyz"))) format="XYZ"; else if (trajfile.endsWith(QLatin1String("HISTORY"))) format="HISTORY"; else { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Could not determine format from filename: %1").arg( trajfile ) ); return; } OBConversion conv; if (!conv.SetInFormat(format)) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Could not set format: %1").arg( format )); return; } m_molecule->clearConformers(); std::ifstream file(QFile::encodeName(trajfile)); OpenBabel::OBMol tmpMol; int i=0; while (conv.Read(&tmpMol, &file)) { double* tmpCoords = tmpMol.GetCoordinates(); if (!tmpCoords) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Problem reading traj file %1").arg(trajfile)); return; } if (tmpMol.NumAtoms() != m_molecule->numAtoms()) { QMessageBox::warning( NULL, tr( "Avogadro" ), tr( "Trajectory file %1 disagrees on the number of atoms in the present molecule").arg(trajfile)); return; } std::vector *coords = m_molecule->addConformer(i); //copy coords read in to a new array that will not be deleted for (uint j = 0; j < tmpMol.NumAtoms(); ++j) { (*coords)[j] = Vector3d(tmpCoords[3*j], tmpCoords[3*j+1], tmpCoords[3*j+2]); } ++i; } file.close(); } bool AnimationExtension::writeXyzTraj(QString filename) { OBConversion conv; conv.SetInAndOutFormats("XYZ","XYZ"); std::ofstream file(QFile::encodeName(filename)); for (unsigned int i = 1; i <= m_molecule->numConformers(); ++i) { m_animation->setFrame(i); OpenBabel::OBMol obmol(m_molecule->OBMol()); conv.Write(&obmol, &file); file << std::endl; } file.close(); return true; } } // end namespace Avogadro Q_EXPORT_PLUGIN2(animationextension, Avogadro::AnimationExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/forcefielddialog.ui0000644000175000001440000001142712250371054023631 0ustar marcususers ForceFieldDialog 0 0 442 361 Setup Force Field 0 0 Force Field Force Field 0 Ghemical 0 0 Geometry Optimization Number of steps 10000 100 Algorithm Steepest Descent Conjugate Gradients Convergence 10e- 2 10 7 Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Ok buttonBox accepted() ForceFieldDialog accept() 248 254 157 274 buttonBox rejected() ForceFieldDialog reject() 316 260 286 274 avogadro-1.1.1/libavogadro/src/extensions/supercellextension.h0000644000175000001440000000454312250371054024115 0ustar marcususers/********************************************************************** SuperCellExtension - Extension for creating super cells Copyright (C) 2009 Marcus D. Hanwell Copyright (C) 2009 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SUPERCELLEXTENSION_H #define SUPERCELLEXTENSION_H #include namespace Avogadro { class SuperCellDialog; class SuperCellExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("SuperCell", tr("Super Cell"), tr("Build and display crystallographic super cells")) public: //! Constructor SuperCellExtension(QObject *parent=0); //! Destructor ~SuperCellExtension(); //! Perform Action QList actions() const; QUndoCommand* performAction(QAction *action, GLWidget *widget); QString menuPath(QAction *action) const; void setMolecule(Molecule *molecule); public Q_SLOTS: void fillCell(); private: void cellParametersChanged(double a, double b, double c); //! Simpler bonding routine for inorganics void connectTheDots(); //! Actually duplicate the unit cell to build a super cell void duplicateUnitCell(); QList m_actions; SuperCellDialog *m_dialog; GLWidget *m_widget; Molecule *m_molecule; }; class SuperCellExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(SuperCellExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/propmodel.h0000644000175000001440000001311512250371054022156 0ustar marcususers/********************************************************************** propmodel.h - Models to hold properties Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef PROPMODEL_H #define PROPMODEL_H #include #include #include #include #include #include #include #include #include #ifndef BUFF_SIZE #define BUFF_SIZE 256 #endif namespace Avogadro { class PropertiesModel : public QAbstractTableModel { Q_OBJECT public slots: void updateTable(); // void primitiveAdded(Primitive *primitive); // void primitiveRemoved(Primitive *primitive); void atomAdded(Atom *atom); void atomRemoved(Atom *atom); void bondAdded(Bond *bond); void bondRemoved(Bond *bond); void moleculeChanged(); public: enum Type { OtherType=0, AtomType, BondType, AngleType, TorsionType, CartesianType, ConformerType, MoleculeType }; explicit PropertiesModel(Type type, QObject *parent = 0); int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; Qt::ItemFlags flags(const QModelIndex &index) const; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; void setMolecule (Molecule *molecule); // determine whether we display multiple or just one conformer void setDisplayConformers(bool display); // Return what type of model this is int type() const { return m_type; }; // Generate all data pertaining to atoms, bonds, angles etc void updateCache() const; // Empty all items in the cache void clearCache() const; // Return the number of conformers we are displaying unsigned int numConformers() const; // Given a model index, return the conformer it refers to unsigned int conformerFromIndex(const QModelIndex &index) const; // Returns the angle data for a given conformer std::vector< std::vector > conformerAngles( unsigned int conformer ); // Returns the torsion data for a given conformer std::vector< std::vector > conformerTorsions( unsigned int conformer ); private: int m_type; mutable int m_rowCount; Molecule *m_molecule; /* * For each category (atom, bond etc), an enum specifies which columns hold * which data. * There are then two data structures (e.g. m_bondData) which holds the data * that is shared by all conformers, and an additional structure (e.g. m_bondLengths) * that holds the data that differs for each conformer * For angles and torsions, there are additional data structures for the vectors defining * the angles as these are needed when editing the structures. */ // Controls whether we display the data for one or all conformers bool m_displayConformers; // Atom Data enum AtomColumn { AtomDataElement=0, AtomDataType, AtomDataValence, AtomDataFormalCharge, AtomDataPartialCharge }; mutable std::vector< std::vector > m_atomData; mutable std::vector< std::vector > m_atomCoords; // Bond Data enum BondColumn { BondDataType=0, BondDataAtom1, BondDataAtom2, BondDataOrder, BondDataRotatable}; mutable std::vector< std::vector > m_bondData; mutable std::vector< std::vector > m_bondLengths; // Angle Data enum AngleColumn { AngleDataType=0, AngleDataStartAtom, AngleDataVertex, AngleDataEndAtom}; mutable std::vector< std::vector > m_angleData; mutable std::vector< std::vector > m_angleValues; mutable std::vector< std::vector< std::vector > > m_angles; // Torsion Data enum TorsionColumn { TorsionDataType=0, TorsionDataAtom1, TorsionDataAtom2, TorsionDataAtom3, TorsionDataAtom4}; mutable std::vector< std::vector > m_torsionData; mutable std::vector< std::vector > m_torsionValues; mutable std::vector< std::vector< std::vector > > m_torsions; mutable bool m_validCache; mutable OpenBabel::OBMol *m_cachedOBMol; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/conformersearchdialog.h0000644000175000001440000000413112250371054024513 0ustar marcususers/********************************************************************** ForceFieldDialog - Dialog for force field settings Copyright (C) 2007 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef CONFORMERSEARCHDIALOG_H #define CONFORMERSEARCHDIALOG_H #include #include #include #include #include #include "constraintsmodel.h" #include "ui_conformersearchdialog.h" namespace Avogadro { class ConformerSearchDialog : public QDialog { Q_OBJECT public: //! Constructor explicit ConformerSearchDialog( QWidget *parent = 0, Qt::WindowFlags f = 0 ); //! Desconstructor ~ConformerSearchDialog(); void showEvent(QShowEvent *event); int method(); int numConformers(); QUndoCommand* setup(Molecule *molecule, OpenBabel::OBForceField* forceField, ConstraintsModel* constraints, int forceFieldID, int nSteps, int algorithm, int convergence); public slots: void accept(); void reject(); void systematicToggled(bool checked); void randomToggled(bool checked); void weightedToggled(bool checked); void geneticToggled(bool checked); private: Ui::ConformerSearchDialog ui; int m_method; int m_numConformers; Molecule* m_molecule; QUndoCommand* m_forceFieldCommand; }; } #endif avogadro-1.1.1/libavogadro/src/extensions/insertpeptidedialog.ui0000644000175000001440000003674112250371054024414 0ustar marcususers InsertPeptideDialog 0 0 447 428 Insert Peptide Peptide Builder Qt::Horizontal 40 20 QLayout::SetDefaultConstraint Alanine Ala Arginine Arg Asparagine Asn Aspartic acid Asp Cysteine Cys Glutamic acid Glu Glutamine Gln Glycine Gly Histidine His Isoleucine Ile Valine Val Tyrosine Tyr Tryptophan Trp Threonine Thr Serine Ser Proline Pro Phenylalanine Phe Methionine Met Lysine Lys Leucine Leu Qt::Horizontal 40 20 Amino Acids: Sequence (N to C): Stereochemistry: L true D N Terminus: C Terminus: NH₂ NH₃⁺ CO₂H CO₂⁻ Structure: Straight Chain Alpha Helix Beta Sheet 3-10 Helix Pi Helix Other Phi: ° -180.000000000000000 180.000000000000000 180.000000000000000 ° -180.000000000000000 180.000000000000000 180.000000000000000 Psi: Chain Number: The chain number for the new peptide true A B C D E F G Qt::Horizontal 40 20 Insert Peptide true Qt::Vertical 20 0 avogadro-1.1.1/libavogadro/src/extensions/supercelldialog.cpp0000644000175000001440000000445112250371054023671 0ustar marcususers/********************************************************************** SuperCellDialog - Dialog for building crystallographic super cells Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "supercelldialog.h" namespace Avogadro { SuperCellDialog::SuperCellDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), m_aCells(0), m_bCells(0), m_cCells(0) { ui.setupUi(this); reject(); connect(ui.generateCell, SIGNAL(clicked()), this, SLOT(fillCellClicked())); connect(ui.aCellSpinBox, SIGNAL(valueChanged(int)), this, SLOT(valueChanged(int))); connect(ui.bCellSpinBox, SIGNAL(valueChanged(int)), this, SLOT(valueChanged(int))); connect(ui.cCellSpinBox, SIGNAL(valueChanged(int)), this, SLOT(valueChanged(int))); } SuperCellDialog::~SuperCellDialog() { } void SuperCellDialog::valueChanged(int) { m_aCells = ui.aCellSpinBox->value(); m_bCells = ui.bCellSpinBox->value(); m_cCells = ui.cCellSpinBox->value(); emit(cellDisplayChanged(m_aCells, m_bCells, m_cCells)); } int SuperCellDialog::aCells() { return m_aCells; } void SuperCellDialog::aCells(int a) { m_aCells = a; ui.aCellSpinBox->setValue(m_aCells); } int SuperCellDialog::bCells() { return m_bCells; } void SuperCellDialog::bCells(int b) { m_bCells = b; ui.bCellSpinBox->setValue(m_bCells); } int SuperCellDialog::cCells() { return m_cCells; } void SuperCellDialog::cCells(int c) { m_cCells = c; ui.cCellSpinBox->setValue(m_cCells); } void SuperCellDialog::fillCellClicked() { emit fillCell(); } } avogadro-1.1.1/libavogadro/src/extensions/h2methylextension.h0000644000175000001440000000463212250371054023652 0ustar marcususers/********************************************************************** H2Methyl - Hydrogen to Methyl plugin for Avogadro Copyright (C) 2006 by Donald Ephraim Curtis Copyright (C) 2006-2007 by Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef H2METHYLEXTENSION_H #define H2METHYLEXTENSION_H #include #include #include namespace Avogadro { class H2MethylExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("H2Methyl", tr("H2Methyl"), tr("Transform hydrogens to methyl groups")) public: //! Constructor H2MethylExtension(QObject *parent=0); //! Destructor virtual ~H2MethylExtension(); //! Perform Action virtual QList actions() const; virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual QString menuPath(QAction *action) const; virtual void setMolecule(Molecule *molecule); //@} private: QList m_actions; Molecule *m_molecule; }; class H2MethylCommand : public QUndoCommand { public: H2MethylCommand(Molecule *molecule, GLWidget *widget); ~H2MethylCommand(); virtual void undo(); virtual void redo(); virtual bool mergeWith ( const QUndoCommand * command ); virtual int id() const; private: Molecule *m_molecule; Molecule *m_moleculeCopy; PrimitiveList m_SelectedList; }; class H2MethylExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(H2MethylExtension) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/extensions/qtaim/0000755000175000001440000000000012250371054021116 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimlsodaintegrator.h0000644000175000001440000001261612250371054025532 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef QTAIMLSODAINTEGRATOR_H #define QTAIMLSODAINTEGRATOR_H #include #include #include #include #include #include "qtaimwavefunction.h" #include "qtaimwavefunctionevaluator.h" #include "qtaimmathutilities.h" #include #include namespace Avogadro { class QTAIMLSODAIntegrator { public: enum { SteepestAscentPathInElectronDensity=0, CMBPMinusThreeGradientInElectronDensity=1, CMBPMinusOneGradientInElectronDensity=2, CMBPPlusOneGradientInElectronDensity=3, CMBPPlusThreeGradientInElectronDensity=4, CMBPMinusThreeGradientInElectronDensityLaplacian=5, CMBPMinusOneGradientInElectronDensityLaplacian=6, CMBPPlusOneGradientInElectronDensityLaplacian=7, CMBPPlusThreeGradientInElectronDensityLaplacian=8 }; explicit QTAIMLSODAIntegrator(QTAIMWavefunctionEvaluator &eval, const qint64 mode); QVector3D integrate(QVector3D x0y0z0); qint64 status() const { return m_status; } const QList path() const { return m_path; } void setBetaSpheres( QList > betaSpheres ) { m_betaSpheres = betaSpheres; } qint64 associatedSphere() const { return m_associatedSphere; } private: QTAIMWavefunctionEvaluator *m_eval; qint64 m_mode; qint64 m_status; QList m_path; QList > m_betaSpheres; qint64 m_associatedSphere; // LSODA integrator void f( int neq, double t, double *y, double *ydot ); void daxpy( int n, double da, double *dx, int incx, double *dy, int incy ); double ddot( int n, double *dx, int incx, double *dy, int incy ); void dgefa( double **a, int n, int *ipvt, int *info ); void dgesl( double **a, int n, int *ipvt, double *b, int job ); void dscal( int n, double da, double *dx, int incx ); int idamax( int n, double *dx, int incx ); void terminate( int *istate ); void terminate2( double *y, double *t ); void successreturn( double *y, double *t, int itask, int ihit, double tcrit, int *istate ); void lsoda( int neq, double *y, double *t, double tout, int itol, double *rtol, double *atol, int itask, int *istate, int iopt, int jt, int iwork1, int iwork2, int iwork5, int iwork6, int iwork7, int iwork8, int iwork9, double rwork1, double rwork5, double rwork6, double rwork7 ); void stoda( int neq, double *y ); void ewset( int itol, double *rtol, double *atol, double *ycur ); void intdy( double t, int k, double *dky, int *iflag ); void cfode( int meth ); void scaleh( double *rh, double *pdh ); void prja( int neq, double *y ); double vmnorm( int n, double *v, double *w ); double fnorm( int n, double **a, double *w ); // double bnorm(); void correction( int neq, double *y, int *corflag, double pnorm, double *del, double *delp, double *told, int *ncf, double *rh, int *m ); void corfailure( double *told, double *rh, int *ncf, int *corflag ); void solsy( double *y ); void methodswitch( double dsm, double pnorm, double *pdh, double *rh ); void endstoda(); void orderswitch( double *rhup, double dsm, double *pdh, double *rh, int *orderflag ); void resetcoeff(); void freevectors(); /* newly added static variables */ int ml, mu, imxer; int mord[3]; double sqrteta, *yp1, *yp2; double sm1[13]; /* static variables for lsoda() */ double ccmax, el0, h, hmin, hmxi, hu, rc, tn; int illin, init, mxstep, mxhnil, nhnil, ntrep, nslast, nyh, ierpj, iersl, jcur, jstart, kflag, l, meth, miter, maxord, maxcor, msbp, mxncf, n, nq, nst, nfe, nje, nqu; double tsw, pdnorm; int ixpr, jtyp, mused, mxordn, mxords; /* no static variable for prja(), solsy() */ /* static variables for stoda() */ double conit, crate, el[14], elco[13][14], hold, rmax, tesco[13][4]; int ialth, ipup, lmax, meo, nslp; double pdest, pdlast, ratio, cm1[13], cm2[6]; int icount, irflag; /* static variable for block data */ int mesflg; /* static variables for various vectors and the Jacobian. */ double **yh, **wm, *ewt, *savf, *acor; int *ipvt; int m_lenyh; int m_nyh; }; } // namespace Avogadro #endif // QTAIMLSODAINTEGRATOR_H avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimwavefunction.h0000644000175000001440000002053212250371054025035 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef QTAIMWAVEFUNCTION_H #define QTAIMWAVEFUNCTION_H #include #include #include #include #include #include #include #include #include #include namespace Avogadro { class QTAIMWavefunctionEvaluator; class QTAIMWavefunction { public: explicit QTAIMWavefunction(); void saveToBinaryFile(const QString &fileName) { QFile file(fileName); file.open(QIODevice::WriteOnly); QDataStream out(&file); out << m_fileName; out << m_comment; out << m_numberOfMolecularOrbitals; out << m_numberOfGaussianPrimitives; out << m_numberOfNuclei; out << m_xNuclearCoordinates; out << m_yNuclearCoordinates; out << m_zNuclearCoordinates; out << m_nuclearCharges; out << m_xGaussianPrimitiveCenterCoordinates; out << m_yGaussianPrimitiveCenterCoordinates; out << m_zGaussianPrimitiveCenterCoordinates; out << m_xGaussianPrimitiveAngularMomenta; out << m_yGaussianPrimitiveAngularMomenta; out << m_zGaussianPrimitiveAngularMomenta; out << m_gaussianPrimitiveExponentCoefficients; out << m_molecularOrbitalOccupationNumbers; out << m_molecularOrbitalEigenvalues; out << m_molecularOrbitalCoefficients; out << m_totalEnergy; out << m_virialRatio; } void loadFromBinaryFile(const QString &fileName) { QFile file(fileName); file.open(QIODevice::ReadOnly); QDataStream in(&file); in >> m_fileName; in >> m_comment; in >> m_numberOfMolecularOrbitals; in >> m_numberOfGaussianPrimitives; in >> m_numberOfNuclei; in >> m_xNuclearCoordinates; in >> m_yNuclearCoordinates; in >> m_zNuclearCoordinates; in >> m_nuclearCharges; in >> m_xGaussianPrimitiveCenterCoordinates; in >> m_yGaussianPrimitiveCenterCoordinates; in >> m_zGaussianPrimitiveCenterCoordinates; in >> m_xGaussianPrimitiveAngularMomenta; in >> m_yGaussianPrimitiveAngularMomenta; in >> m_zGaussianPrimitiveAngularMomenta; in >> m_gaussianPrimitiveExponentCoefficients; in >> m_molecularOrbitalOccupationNumbers; in >> m_molecularOrbitalEigenvalues; in >> m_molecularOrbitalCoefficients; in >> m_totalEnergy; in >> m_virialRatio; } bool initializeWithWFNFile(const QString &fileName); // bool initializeWithMoleculeProperties( Molecule &mol ); bool initializeWithMoleculeProperties( Molecule*& mol ); // TODO initialize with Avogadro general wavefunction qint64 numberOfMolecularOrbitals() const { return m_numberOfMolecularOrbitals; } qint64 numberOfGaussianPrimitives() const { return m_numberOfGaussianPrimitives; } qint64 numberOfNuclei() const { return m_numberOfNuclei; } const qreal* xNuclearCoordinates() const { return m_xNuclearCoordinates.constData(); } const qreal* yNuclearCoordinates() const { return m_yNuclearCoordinates.constData(); } const qreal* zNuclearCoordinates() const { return m_zNuclearCoordinates.constData(); } qreal xNuclearCoordinate( qint64 i ) const { return m_xNuclearCoordinates.at(i); } qreal yNuclearCoordinate( qint64 i ) const { return m_yNuclearCoordinates.at(i); } qreal zNuclearCoordinate( qint64 i ) const { return m_zNuclearCoordinates.at(i); } const qint64* nuclearCharges() const { return m_nuclearCharges.constData(); } qint64 nuclearCharge( qint64 i ) const { return m_nuclearCharges.at(i); } const QList nuclearChargesList() const { return m_nuclearCharges.toList(); } const qreal* xGaussianPrimitiveCenterCoordinates() const { return m_xGaussianPrimitiveCenterCoordinates.constData(); } const qreal* yGaussianPrimitiveCenterCoordinates() const { return m_yGaussianPrimitiveCenterCoordinates.constData(); } const qreal* zGaussianPrimitiveCenterCoordinates() const { return m_zGaussianPrimitiveCenterCoordinates.constData(); } qreal xGaussianPrimitiveCenterCoordinate( qint64 i ) const { return m_xGaussianPrimitiveCenterCoordinates.at(i); } qreal yGaussianPrimitiveCenterCoordinate( qint64 i ) const { return m_yGaussianPrimitiveCenterCoordinates.at(i); } qreal zGaussianPrimitiveCenterCoordinate( qint64 i ) const { return m_zGaussianPrimitiveCenterCoordinates.at(i); } const qint64* xGaussianPrimitiveAngularMomenta() const { return m_xGaussianPrimitiveAngularMomenta.constData(); } const qint64* yGaussianPrimitiveAngularMomenta() const { return m_yGaussianPrimitiveAngularMomenta.constData(); } const qint64* zGaussianPrimitiveAngularMomenta() const { return m_zGaussianPrimitiveAngularMomenta.constData(); } qint64 xGaussianPrimitiveAngularMomentum( qint64 i ) const { return m_xGaussianPrimitiveAngularMomenta.at(i); } qint64 yGaussianPrimitiveAngularMomentum( qint64 i ) const { return m_yGaussianPrimitiveAngularMomenta.at(i); } qint64 zGaussianPrimitiveAngularMomentum( qint64 i ) const { return m_zGaussianPrimitiveAngularMomenta.at(i); } const qreal* gaussianPrimitiveExponentCoefficients() const { return m_gaussianPrimitiveExponentCoefficients.constData(); } qreal gaussianPrimitiveExponentCoefficient( qint64 i ) const { return m_gaussianPrimitiveExponentCoefficients.at(i); } const qreal* molecularOrbitalOccupationNumbers() const { return m_molecularOrbitalOccupationNumbers.constData(); } qreal molecularOrbitalOccupationNumber( qint64 i ) const { return m_molecularOrbitalOccupationNumbers.at(i); } const qreal* molecularOrbitalEigenvalues() const { return m_molecularOrbitalEigenvalues.constData(); } qreal molecularOrbitalEigenvalue( qint64 i ) const { return m_molecularOrbitalEigenvalues.at(i); } const qreal* molecularOrbitalCoefficients() const { return m_molecularOrbitalCoefficients.constData(); } qreal molecularOrbitalCoefficient( qint64 i ) const { return m_molecularOrbitalCoefficients.at(i); } qreal molecularOrbitalCoefficient( qint64 mo, qint64 prim ) const { return m_molecularOrbitalCoefficients.at( mo*m_numberOfGaussianPrimitives + prim ); } qreal totalEnergy() const { return m_totalEnergy; } qreal virialRatio() const { return m_virialRatio; } private: bool m_initializationSuccessful; bool m_fileDoesNotExist; bool m_ioError; bool m_tooManyNuclei; bool m_maximumAngularMomentumExceeded; QString m_fileName; QString m_comment; qint64 m_numberOfMolecularOrbitals; qint64 m_numberOfGaussianPrimitives; qint64 m_numberOfNuclei; QVector m_xNuclearCoordinates; QVector m_yNuclearCoordinates; QVector m_zNuclearCoordinates; QVector m_nuclearCharges; QVector m_xGaussianPrimitiveCenterCoordinates; QVector m_yGaussianPrimitiveCenterCoordinates; QVector m_zGaussianPrimitiveCenterCoordinates; QVector m_xGaussianPrimitiveAngularMomenta; QVector m_yGaussianPrimitiveAngularMomenta; QVector m_zGaussianPrimitiveAngularMomenta; QVector m_gaussianPrimitiveExponentCoefficients; QVector m_molecularOrbitalOccupationNumbers; QVector m_molecularOrbitalEigenvalues; QVector m_molecularOrbitalCoefficients; qreal m_totalEnergy; qreal m_virialRatio; }; } // namespace Avogadro #endif // QTAIMWAVEFUNCTION_H avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.h0000644000175000001440000000770112250371054026763 0ustar marcususers/********************************************************************** You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef QTAIMWAVEFUNCTIONEVALUATOR_H #define QTAIMWAVEFUNCTIONEVALUATOR_H #include "qtaimwavefunction.h" #include using namespace Eigen; namespace Avogadro { class QTAIMWavefunction; class QTAIMWavefunctionEvaluator { public: EIGEN_MAKE_ALIGNED_OPERATOR_NEW explicit QTAIMWavefunctionEvaluator(QTAIMWavefunction &wfn); qreal molecularOrbital(const qint64 mo, const Matrix xyz); qreal electronDensity(const Matrix xyz); const Matrix gradientOfElectronDensity(const Matrix xyz); const Matrix hessianOfElectronDensity(const Matrix xyz); const Matrix gradientAndHessianOfElectronDensity(const Matrix xyz); qreal laplacianOfElectronDensity(const Matrix xyz); qreal electronDensityLaplacian(const Matrix xyz) {return laplacianOfElectronDensity(xyz);} const Matrix gradientOfElectronDensityLaplacian(const Matrix xyz); const Matrix hessianOfElectronDensityLaplacian(const Matrix xyz); const Matrix gradientAndHessianOfElectronDensityLaplacian(const Matrix xyz); qreal kineticEnergyDensityG(const Matrix xyz); qreal kineticEnergyDensityK(const Matrix xyz); const Matrix quantumStressTensor(const Matrix xyz); private: qint64 m_nmo; qint64 m_nprim; qint64 m_nnuc; // qint64 m_noccmo; // number of (significantly) occupied molecular orbitals Matrix m_nucxcoord; Matrix m_nucycoord; Matrix m_nuczcoord; Matrix m_nucz; Matrix m_X0; Matrix m_Y0; Matrix m_Z0; Matrix m_xamom; Matrix m_yamom; Matrix m_zamom; Matrix m_alpha; Matrix m_occno; Matrix m_orbe; Matrix m_coef; qreal m_totalEnergy; qreal m_virialRatio; qreal m_cutoff; Matrix m_cdg000; Matrix m_cdg100; Matrix m_cdg010; Matrix m_cdg001; Matrix m_cdg200; Matrix m_cdg110; Matrix m_cdg101; Matrix m_cdg020; Matrix m_cdg011; Matrix m_cdg002; Matrix m_cdg300; Matrix m_cdg120; Matrix m_cdg102; Matrix m_cdg210; Matrix m_cdg030; Matrix m_cdg012; Matrix m_cdg201; Matrix m_cdg021; Matrix m_cdg003; Matrix m_cdg111; Matrix m_cdg400; Matrix m_cdg220; Matrix m_cdg202; Matrix m_cdg310; Matrix m_cdg130; Matrix m_cdg112; Matrix m_cdg301; Matrix m_cdg121; Matrix m_cdg103; Matrix m_cdg040; Matrix m_cdg022; Matrix m_cdg211; Matrix m_cdg031; Matrix m_cdg013; Matrix m_cdg004; static inline qreal ipow(qreal a, qint64 n) { return (qreal) pow( a, (int) n ); } }; } // namespace Avogadro #endif // QTAIMWAVEFUNCTIONEVALUATOR_H avogadro-1.1.1/libavogadro/src/extensions/qtaim/test/0000755000175000001440000000000012250371054022075 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/qtaim/test/c4h4.wfn0000644000175000001440000010236512250371054023362 0ustar marcususersTetrahedrane 6-31G* at 6-31G* geometry 1/11/91 JRC GAUSSIAN 14 MOL ORBITALS 128 PRIMITIVES 8 NUCLEI C 1 (CENTRE 1) 0.97775600 0.97775600 0.97775600 CHARGE = 6.0 C 2 (CENTRE 2) -0.97775600 -0.97775600 0.97775600 CHARGE = 6.0 C 3 (CENTRE 3) 0.97775600 -0.97775600 -0.97775600 CHARGE = 6.0 C 4 (CENTRE 4) -0.97775600 0.97775600 -0.97775600 CHARGE = 6.0 H 5 (CENTRE 5) 2.13806500 2.13806500 2.13806500 CHARGE = 1.0 H 6 (CENTRE 6) -2.13806500 -2.13806500 2.13806500 CHARGE = 1.0 H 7 (CENTRE 7) 2.13806500 -2.13806500 -2.13806500 CHARGE = 1.0 H 8 (CENTRE 8) -2.13806500 2.13806500 -2.13806500 CHARGE = 1.0 CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 CENTRE ASSIGNMENTS 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 CENTRE ASSIGNMENTS 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 CENTRE ASSIGNMENTS 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 CENTRE ASSIGNMENTS 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 6 6 6 6 CENTRE ASSIGNMENTS 7 7 7 7 8 8 8 8 TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 TYPE ASSIGNMENTS 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 1 2 2 2 TYPE ASSIGNMENTS 3 3 3 4 4 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 TYPE ASSIGNMENTS 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 3 4 5 6 TYPE ASSIGNMENTS 7 8 9 10 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 TYPE ASSIGNMENTS 4 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 EXPONENTS 0.3047525E+04 0.4573695E+03 0.1039487E+03 0.2921016E+02 0.9286663E+01 EXPONENTS 0.3163927E+01 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 EXPONENTS 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.1687145E+00 0.1687145E+00 EXPONENTS 0.1687145E+00 0.1687145E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.3047525E+04 0.4573695E+03 EXPONENTS 0.1039487E+03 0.2921016E+02 0.9286663E+01 0.3163927E+01 0.7868272E+01 EXPONENTS 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 EXPONENTS 0.5442493E+00 0.1687145E+00 0.1687145E+00 0.1687145E+00 0.1687145E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.3047525E+04 0.4573695E+03 0.1039487E+03 0.2921016E+02 EXPONENTS 0.9286663E+01 0.3163927E+01 0.7868272E+01 0.1881289E+01 0.5442493E+00 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 EXPONENTS 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.1687145E+00 EXPONENTS 0.1687145E+00 0.1687145E+00 0.1687145E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.3047525E+04 EXPONENTS 0.4573695E+03 0.1039487E+03 0.2921016E+02 0.9286663E+01 0.3163927E+01 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 EXPONENTS 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 EXPONENTS 0.1881289E+01 0.5442493E+00 0.1687145E+00 0.1687145E+00 0.1687145E+00 EXPONENTS 0.1687145E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.1873114E+02 0.2825394E+01 0.6401217E+00 EXPONENTS 0.1612778E+00 0.1873114E+02 0.2825394E+01 0.6401217E+00 0.1612778E+00 EXPONENTS 0.1873114E+02 0.2825394E+01 0.6401217E+00 0.1612778E+00 0.1873114E+02 EXPONENTS 0.2825394E+01 0.6401217E+00 0.1612778E+00 MO 1 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.2380343 0.26693201E+00 0.49243743E+00 0.79494670E+00 0.10347844E+01 0.88298341E+00 0.30487295E+00 -0.58011440E-02 -0.26737419E-02 0.74974515E-02 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 -0.24675943E-03 0.17853802E-03 0.17853802E-03 0.17853802E-03 -0.13142320E-02 -0.13142320E-02 -0.13142320E-02 0.30335721E-05 0.30335722E-05 0.30335721E-05 0.26693201E+00 0.49243743E+00 0.79494670E+00 0.10347844E+01 0.88298341E+00 0.30487295E+00 -0.58011440E-02 -0.26737419E-02 0.74974515E-02 0.61745883E-03 0.47342827E-03 0.23627389E-03 0.61745883E-03 0.47342827E-03 0.23627389E-03 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 -0.24675943E-03 -0.17853802E-03 -0.17853802E-03 0.17853802E-03 -0.13142320E-02 -0.13142320E-02 -0.13142320E-02 0.30335721E-05 -0.30335721E-05 -0.30335722E-05 0.26693201E+00 0.49243743E+00 0.79494670E+00 0.10347844E+01 0.88298341E+00 0.30487295E+00 -0.58011440E-02 -0.26737419E-02 0.74974515E-02 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 0.61745883E-03 0.47342827E-03 0.23627389E-03 0.61745883E-03 0.47342827E-03 0.23627389E-03 -0.24675943E-03 0.17853802E-03 -0.17853802E-03 -0.17853802E-03 -0.13142320E-02 -0.13142320E-02 -0.13142320E-02 -0.30335722E-05 -0.30335722E-05 0.30335722E-05 0.26693201E+00 0.49243743E+00 0.79494670E+00 0.10347844E+01 0.88298341E+00 0.30487295E+00 -0.58011440E-02 -0.26737419E-02 0.74974515E-02 0.61745883E-03 0.47342827E-03 0.23627389E-03 -0.61745883E-03 -0.47342827E-03 -0.23627389E-03 0.61745883E-03 0.47342827E-03 0.23627389E-03 -0.24675943E-03 -0.17853802E-03 0.17853802E-03 -0.17853802E-03 -0.13142320E-02 -0.13142320E-02 -0.13142320E-02 -0.30335721E-05 0.30335721E-05 -0.30335721E-05 -0.89875950E-04 -0.15244662E-03 -0.17355509E-03 -0.12370279E-03 -0.89875950E-04 -0.15244662E-03 -0.17355509E-03 -0.12370279E-03 -0.89875950E-04 -0.15244662E-03 -0.17355509E-03 -0.12370279E-03 -0.89875950E-04 -0.15244662E-03 -0.17355509E-03 -0.12370279E-03 MO 2 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.2364689 -0.13360531E+00 -0.24647571E+00 -0.39788822E+00 -0.51793224E+00 -0.44195252E+00 -0.15259558E+00 0.27798091E-02 0.12812115E-02 -0.35926507E-02 0.40226024E-03 0.30842764E-03 0.15392701E-03 0.39414475E-03 0.30220519E-03 0.15082157E-03 0.39124026E-03 0.29997822E-03 0.14971015E-03 0.87725150E-03 0.46622737E-04 -0.19861053E-03 -0.28637795E-03 0.65105547E-03 0.24361944E-03 0.97800673E-04 -0.47048277E-04 -0.23342264E-03 -0.75417612E-03 -0.24930352E+00 -0.45991631E+00 -0.74244752E+00 -0.96644607E+00 -0.82467018E+00 -0.28473880E+00 0.51870406E-02 0.23907023E-02 -0.67037788E-02 -0.73635732E-03 -0.56459209E-03 -0.28177102E-03 -0.74447281E-03 -0.57081453E-03 -0.28487646E-03 0.73528041E-03 0.56376638E-03 0.28135893E-03 0.16369251E-02 0.34355622E-03 0.98322959E-04 -0.37609819E-03 0.49951990E-03 0.90695593E-03 0.44545394E-03 -0.42388701E-03 0.10137435E-02 0.49298997E-03 0.44833820E+00 0.82709643E+00 0.13351901E+01 0.17380208E+01 0.14830563E+01 0.51206369E+00 -0.93281815E-02 -0.42993503E-02 0.12055827E-01 -0.13282068E-02 -0.10183847E-02 -0.50824535E-03 0.13300344E-02 0.10197860E-02 0.50894468E-03 0.13271299E-02 0.10175590E-02 0.50783326E-03 -0.29437854E-02 0.49790122E-03 -0.44267576E-03 -0.53044319E-03 -0.10975850E-02 -0.11893378E-02 -0.10435190E-02 -0.10721596E-02 -0.12585340E-02 0.11412626E-02 -0.65429372E-01 -0.12070441E+00 -0.19485435E+00 -0.25364247E+00 -0.21643358E+00 -0.74729313E-01 0.13613318E-02 0.62743659E-03 -0.17593977E-02 -0.18958922E-03 -0.14536499E-03 -0.72547319E-04 0.19141680E-03 0.14676626E-03 0.73246649E-04 -0.20060920E-03 -0.15381441E-03 -0.76764171E-04 0.42960878E-03 0.20096773E-03 -0.14574228E-03 -0.13203295E-03 -0.52990380E-04 0.38762430E-04 0.50026442E-03 0.60122434E-03 -0.11367898E-04 -0.10590350E-03 0.33934163E-04 0.57558764E-04 0.65528618E-04 -0.16786044E-04 0.63320134E-04 0.10740293E-03 0.12227444E-03 -0.31322256E-04 -0.11387258E-03 -0.19314945E-03 -0.21989382E-03 0.56328784E-04 0.16618284E-04 0.28187755E-04 0.32090762E-04 -0.82204838E-05 MO 3 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.2364689 0.41906123E+00 0.77308614E+00 0.12480007E+01 0.16245261E+01 0.13862111E+01 0.47862538E+00 -0.87190411E-02 -0.40185981E-02 0.11268569E-01 -0.12393200E-02 -0.95023195E-03 -0.47423234E-03 -0.12443521E-02 -0.95409025E-03 -0.47615790E-03 -0.12414499E-02 -0.95186503E-03 -0.47504736E-03 -0.27515530E-02 0.53046067E-03 0.37840097E-03 0.46609931E-03 -0.91779785E-03 -0.11704332E-02 -0.10247293E-02 0.10652259E-02 0.12514535E-02 0.92855433E-03 -0.12338996E+00 -0.22763039E+00 -0.36746603E+00 -0.47833158E+00 -0.40816121E+00 -0.14092826E+00 0.25672673E-02 0.11832511E-02 -0.33179597E-02 -0.36011201E-03 -0.27611105E-03 -0.13779877E-03 -0.36514412E-03 -0.27996935E-03 -0.13972433E-03 0.37158279E-03 0.28490611E-03 0.14218812E-03 0.81017761E-03 0.30117711E-03 0.14911741E-03 0.45445851E-04 0.29356401E-04 0.28199180E-03 0.60524356E-03 -0.70158307E-03 0.28842746E-03 -0.34471718E-04 0.11448112E-01 0.21119531E-01 0.34093471E-01 0.44379569E-01 0.37869167E-01 0.13075313E-01 -0.23819087E-03 -0.10978195E-03 0.30784006E-03 -0.27241759E-04 -0.20887253E-04 -0.10424203E-04 0.35810339E-04 0.27457097E-04 0.13703016E-04 0.38712536E-04 0.29682317E-04 0.14813557E-04 -0.75168219E-04 0.21436981E-03 0.44554818E-04 0.13225316E-03 0.30700967E-03 -0.12317350E-03 -0.26887749E-03 -0.33697909E-03 -0.15075143E-03 -0.39907570E-03 -0.30711937E+00 -0.56657528E+00 -0.91462817E+00 -0.11905741E+01 -0.10159191E+01 -0.35077243E+00 0.63899647E-02 0.29451289E-02 -0.82584489E-02 -0.90644972E-03 -0.69500816E-03 -0.34685778E-03 0.91501831E-03 0.70157800E-03 0.35013659E-03 -0.90857963E-03 -0.69664123E-03 -0.34767280E-03 0.20165436E-02 0.44365337E-03 -0.18472874E-03 0.37929200E-03 0.58143178E-03 0.10116150E-02 0.68836319E-03 0.70062187E-03 -0.11137775E-02 0.56395035E-03 -0.10643658E-03 -0.18053658E-03 -0.20553452E-03 0.52650453E-04 0.31339586E-04 0.53157870E-04 0.60518356E-04 -0.15502597E-04 -0.29076845E-05 -0.49319833E-05 -0.56148887E-05 0.14383298E-05 0.78004676E-04 0.13231069E-03 0.15063105E-03 -0.38586185E-04 MO 4 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.2364689 -0.14319701E+00 -0.26417052E+00 -0.42645312E+00 -0.55511525E+00 -0.47368085E+00 -0.16355061E+00 0.29793751E-02 0.13731913E-02 -0.38505716E-02 0.42533783E-03 0.32612207E-03 0.16275777E-03 0.41818344E-03 0.32063654E-03 0.16002010E-03 0.42938655E-03 0.32922637E-03 0.16430703E-03 0.94023051E-03 -0.12532999E-03 -0.34152068E-03 -0.29858984E-05 0.40654850E-03 0.47364448E-04 0.60981372E-03 -0.69586773E-03 0.23011784E-04 -0.43606972E-03 0.36958185E+00 0.68180636E+00 0.11006469E+01 0.14327152E+01 0.12225385E+01 0.42211315E+00 -0.76895670E-02 -0.35441144E-02 0.99380668E-02 0.10985157E-02 0.84227219E-03 0.42035285E-03 0.10913613E-02 0.83678666E-03 0.41761519E-03 -0.10954125E-02 -0.83989282E-03 -0.41916538E-03 -0.24266718E-02 -0.30088417E-03 -0.51707486E-03 0.39465762E-03 -0.10867962E-02 -0.72761210E-03 -0.93099883E-03 0.97429593E-03 -0.71434261E-03 -0.11734241E-02 0.11326904E+00 0.20895925E+00 0.33732502E+00 0.43909695E+00 0.37468223E+00 0.12936877E+00 -0.23566899E-02 -0.10861962E-02 0.30458076E-02 -0.33728951E-03 -0.25861220E-03 -0.12906561E-03 0.32918963E-03 0.25240173E-03 0.12596615E-03 0.34039275E-03 0.26099157E-03 0.13025308E-03 -0.74372367E-03 0.73551176E-04 -0.31831250E-03 0.20222281E-04 -0.36408798E-03 0.42563974E-04 -0.51988530E-03 -0.59838982E-03 0.12048969E-03 0.39926164E-03 -0.33965388E+00 -0.62659509E+00 -0.10115188E+01 -0.13166969E+01 -0.11235398E+01 -0.38793130E+00 0.70668818E-02 0.32571194E-02 -0.91333027E-02 -0.10104674E-02 -0.77476232E-03 -0.38666070E-03 0.10023675E-02 0.76855185E-03 0.38356124E-03 -0.10064187E-02 -0.77165802E-03 -0.38511143E-03 0.22301649E-02 0.24910535E-03 -0.49386668E-03 0.37144944E-03 0.10443356E-02 0.63768368E-03 0.84107041E-03 0.87681802E-03 -0.61686470E-03 0.11366160E-02 0.36370340E-04 0.61690981E-04 0.70233001E-04 -0.17991135E-04 -0.93869405E-04 -0.15922028E-03 -0.18126666E-03 0.46433912E-04 -0.28768991E-04 -0.48797653E-04 -0.55554403E-04 0.14231014E-04 0.86268055E-04 0.14632695E-03 0.16658806E-03 -0.42673790E-04 MO 5 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -1.2965995 -0.57728863E-01 -0.10649848E+00 -0.17192157E+00 -0.22379080E+00 -0.19096109E+00 -0.65934276E-01 -0.82048544E-01 -0.37816099E-01 0.10604029E+00 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 0.19143947E-01 -0.39103300E-03 -0.39103300E-03 -0.39103300E-03 0.25806563E-02 0.25806563E-02 0.25806563E-02 0.20153688E-01 0.20153688E-01 0.20153688E-01 -0.57728863E-01 -0.10649848E+00 -0.17192157E+00 -0.22379080E+00 -0.19096109E+00 -0.65934276E-01 -0.82048544E-01 -0.37816099E-01 0.10604029E+00 0.10615075E+00 0.81389661E-01 0.40619145E-01 0.10615075E+00 0.81389661E-01 0.40619145E-01 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 0.19143947E-01 0.39103300E-03 0.39103300E-03 -0.39103300E-03 0.25806563E-02 0.25806563E-02 0.25806563E-02 0.20153688E-01 -0.20153688E-01 -0.20153688E-01 -0.57728863E-01 -0.10649848E+00 -0.17192157E+00 -0.22379080E+00 -0.19096109E+00 -0.65934276E-01 -0.82048544E-01 -0.37816099E-01 0.10604029E+00 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 0.10615075E+00 0.81389661E-01 0.40619145E-01 0.10615075E+00 0.81389661E-01 0.40619145E-01 0.19143947E-01 -0.39103300E-03 0.39103300E-03 0.39103300E-03 0.25806563E-02 0.25806563E-02 0.25806563E-02 -0.20153688E-01 -0.20153688E-01 0.20153688E-01 -0.57728863E-01 -0.10649848E+00 -0.17192157E+00 -0.22379080E+00 -0.19096109E+00 -0.65934276E-01 -0.82048544E-01 -0.37816099E-01 0.10604029E+00 0.10615075E+00 0.81389661E-01 0.40619145E-01 -0.10615075E+00 -0.81389661E-01 -0.40619145E-01 0.10615075E+00 0.81389661E-01 0.40619145E-01 0.19143947E-01 0.39103300E-03 -0.39103300E-03 0.39103300E-03 0.25806563E-02 0.25806563E-02 0.25806563E-02 -0.20153688E-01 0.20153688E-01 -0.20153688E-01 0.44775954E-02 0.75948493E-02 0.86464675E-02 -0.11533665E-02 0.44775954E-02 0.75948493E-02 0.86464675E-02 -0.11533665E-02 0.44775954E-02 0.75948493E-02 0.86464675E-02 -0.11533665E-02 0.44775954E-02 0.75948493E-02 0.86464675E-02 -0.11533665E-02 MO 6 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.8053912 -0.96389409E-02 -0.17781964E-01 -0.28705603E-01 -0.37366166E-01 -0.31884617E-01 -0.11008992E-01 -0.13914564E-01 -0.64132098E-02 0.17983310E-01 -0.11652462E+00 -0.89343685E-01 -0.44588761E-01 -0.18258901E-01 -0.13999767E-01 -0.69868648E-02 0.16412115E+00 0.12583769E+00 0.62801825E-01 0.76330712E-02 -0.37176846E-02 -0.66911543E-03 0.49889942E-02 0.12085810E-01 0.31759623E-02 -0.13360614E-01 0.24911443E-01 -0.13498814E-02 -0.15499389E-01 -0.69432276E-01 -0.12808899E+00 -0.20677535E+00 -0.26916006E+00 -0.22967477E+00 -0.79301179E-01 -0.10023091E+00 -0.46196336E-01 0.12953935E+00 -0.84750158E-01 -0.64981046E-01 -0.32430096E-01 0.13515558E-01 0.10362872E-01 0.51717996E-02 0.14009343E+00 0.10741476E+00 0.53607492E-01 0.54983376E-01 -0.18898018E-02 0.11587674E-02 0.36067566E-02 0.32676048E-02 0.12177453E-01 -0.17504234E-02 0.29387282E-01 -0.72687689E-02 -0.21418276E-01 0.62661333E-01 0.11559792E+00 0.18661089E+00 0.24291193E+00 0.20727719E+00 0.71567833E-01 0.90456527E-01 0.41691331E-01 -0.11690684E+00 -0.87471035E-01 -0.67067242E-01 -0.33471254E-01 -0.39565741E-01 -0.30336500E-01 -0.15140040E-01 0.14281431E+00 0.10950095E+00 0.54648650E-01 -0.49621470E-01 -0.20463252E-02 -0.18948297E-02 0.37632800E-02 -0.19528773E-02 -0.13471425E-01 0.30651509E-02 0.28880442E-01 0.26191175E-02 -0.20911436E-01 0.16409884E-01 0.30273032E-01 0.48870060E-01 0.63614298E-01 0.54282196E-01 0.18742338E-01 0.23688949E-01 0.10918215E-01 -0.30615815E-01 -0.11924549E+00 -0.91429881E-01 -0.45629919E-01 -0.77912824E-02 -0.59738611E-02 -0.29813754E-02 0.16140027E+00 0.12375149E+00 0.61760667E-01 -0.12994977E-01 -0.38742080E-02 -0.66946879E-04 0.48324709E-02 -0.13400538E-01 -0.18819898E-02 0.12045886E-01 0.25418283E-01 -0.32997700E-02 -0.14992549E-01 0.48009308E-02 0.81432872E-02 0.92708447E-02 0.18997559E-02 0.34582591E-01 0.58658619E-01 0.66780765E-01 0.13684530E-01 -0.31210142E-01 -0.52938309E-01 -0.60268393E-01 -0.12350033E-01 -0.81733791E-02 -0.13863598E-01 -0.15783216E-01 -0.32342531E-02 MO 7 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.8053912 -0.74474309E-01 -0.13739056E+00 -0.22179096E+00 -0.28870593E+00 -0.24635329E+00 -0.85059872E-01 -0.10750948E+00 -0.49551022E-01 0.13894624E+00 0.13361497E+00 0.10244749E+00 0.51128476E-01 0.99095615E-02 0.75980232E-02 0.37919461E-02 0.83149717E-01 0.63753929E-01 0.31817679E-01 0.58976159E-01 0.33520723E-02 -0.48573120E-03 0.17864517E-02 -0.36770411E-03 0.10848786E-01 0.42080297E-02 0.21856993E-01 0.11310974E-01 0.29123602E-01 0.21251560E-01 0.39204978E-01 0.63288991E-01 0.82383461E-01 0.70297957E-01 0.24272195E-01 0.30678286E-01 0.14139594E-01 -0.39648898E-01 0.15500233E+00 0.11884595E+00 0.59312459E-01 0.31296915E-01 0.23996489E-01 0.11975930E-01 0.12161678E+00 0.93248035E-01 0.46537305E-01 -0.16829097E-01 0.45824182E-02 0.74461472E-03 0.39993388E-02 0.10702071E-01 -0.51441884E-03 -0.14379252E-01 0.14691419E-01 0.73269772E-02 0.25139605E-01 -0.25012937E-02 -0.46143984E-02 -0.74490698E-02 -0.96964755E-02 -0.82740201E-02 -0.28568203E-02 -0.36108127E-02 -0.16642203E-02 0.46666474E-02 0.16253705E+00 0.12462310E+00 0.62195660E-01 0.40841906E-01 0.31314983E-01 0.15628371E-01 0.11408206E+00 0.87470888E-01 0.43654104E-01 0.19807729E-02 0.50158666E-02 0.12937075E-02 0.35658904E-02 -0.14342847E-01 0.40977199E-02 0.10738476E-01 0.16094973E-01 0.55489539E-02 0.23736051E-01 0.55724043E-01 0.10279998E+00 0.16595104E+00 0.21601895E+00 0.18432936E+00 0.63644498E-01 0.80442008E-01 0.37075648E-01 -0.10396399E+00 0.14114969E+00 0.10822463E+00 0.54011676E-01 0.62229259E-01 0.47713449E-01 0.23812355E-01 0.90684438E-01 0.69531075E-01 0.34700880E-01 -0.44127835E-01 0.37855206E-02 0.25240534E-02 0.22199001E-02 0.40084805E-02 -0.14432087E-01 -0.56725327E-03 0.20453439E-01 0.15649572E-02 0.27720048E-01 0.37093910E-01 0.62918292E-01 0.71630251E-01 0.14678273E-01 -0.10584904E-01 -0.17954001E-01 -0.20439996E-01 -0.41885076E-02 0.12458358E-02 0.21131733E-02 0.24057731E-02 0.49298440E-03 -0.27754841E-01 -0.47077464E-01 -0.53596028E-01 -0.10982750E-01 MO 8 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.8053912 -0.34536587E-01 -0.63713259E-01 -0.10285295E+00 -0.13388399E+00 -0.11424345E+00 -0.39445517E-01 -0.49856260E-01 -0.22978705E-01 0.64434686E-01 -0.54903460E-01 -0.42096491E-01 -0.21009099E-01 0.18442817E+00 0.14140782E+00 0.70572415E-01 -0.24407188E-01 -0.18713884E-01 -0.93395396E-02 0.27349501E-01 -0.20711301E-02 0.53538302E-02 -0.11250220E-02 0.10425820E-01 -0.11274611E-01 0.76606938E-02 0.10691756E-02 0.31139861E-01 -0.33220531E-02 0.39492253E-01 0.72855495E-01 0.11761136E+00 0.15309504E+00 0.13063628E+00 0.45105567E-01 0.57010151E-01 0.26275926E-01 -0.73680441E-01 -0.56894875E-01 -0.43623381E-01 -0.21771125E-01 0.18243676E+00 0.13988093E+00 0.69810389E-01 0.53410106E-02 0.40951482E-02 0.20437659E-02 -0.31273890E-01 -0.21856899E-02 0.52392704E-02 0.58629661E-03 -0.11388072E-01 0.10312360E-01 -0.67136329E-02 -0.44722640E-02 0.31510818E-01 -0.29510959E-02 0.53846158E-01 0.99335647E-01 0.16035853E+00 0.20873916E+00 0.17811751E+00 0.61499695E-01 0.77731134E-01 0.35826208E-01 -0.10046043E+00 -0.19387201E-01 -0.14864876E-01 -0.74186149E-02 0.17666870E+00 0.13545835E+00 0.67603210E-01 -0.32166663E-01 -0.24663357E-01 -0.12308744E-01 -0.42640739E-01 -0.27993513E-04 0.49074524E-02 -0.15713997E-02 -0.67356325E-02 0.75252335E-02 -0.11410071E-01 0.25145963E-02 0.32585282E-01 -0.99379563E-02 -0.58801824E-01 -0.10847788E+00 -0.17511694E+00 -0.22795022E+00 -0.19451034E+00 -0.67159745E-01 -0.84885025E-01 -0.39123430E-01 0.10970618E+00 -0.17395786E-01 -0.13337985E-01 -0.66565894E-02 0.17467728E+00 0.13393146E+00 0.66841185E-01 0.13100486E-01 0.10044622E-01 0.50129702E-02 0.46565127E-01 0.86566212E-04 0.47928927E-02 0.10326744E-02 0.76978840E-02 -0.65629820E-02 0.10463011E-01 -0.59176848E-02 0.32956239E-01 -0.10308913E-01 0.17201865E-01 0.29177619E-01 0.33217688E-01 0.68068770E-02 -0.19670166E-01 -0.33364325E-01 -0.37984105E-01 -0.77835980E-02 -0.26819510E-01 -0.45490966E-01 -0.51789856E-01 -0.10612635E-01 0.29287812E-01 0.49677672E-01 0.56556273E-01 0.11589356E-01 MO 9 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.7096543 -0.16783389E-01 -0.30962076E-01 -0.49982391E-01 -0.65062221E-01 -0.55517711E-01 -0.19168932E-01 -0.23164280E-01 -0.10676395E-01 0.29937727E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 0.19011742E-01 0.65481182E-02 0.65481182E-02 0.65481182E-02 0.30838012E-02 0.30838012E-02 0.30838012E-02 -0.23251198E-02 -0.23251198E-02 -0.23251198E-02 -0.16783389E-01 -0.30962076E-01 -0.49982391E-01 -0.65062221E-01 -0.55517711E-01 -0.19168932E-01 -0.23164280E-01 -0.10676395E-01 0.29937727E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 0.19011742E-01 -0.65481182E-02 -0.65481182E-02 0.65481182E-02 0.30838012E-02 0.30838012E-02 0.30838012E-02 -0.23251198E-02 0.23251198E-02 0.23251198E-02 -0.16783389E-01 -0.30962076E-01 -0.49982391E-01 -0.65062221E-01 -0.55517711E-01 -0.19168932E-01 -0.23164280E-01 -0.10676395E-01 0.29937727E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 0.19011742E-01 0.65481182E-02 -0.65481182E-02 -0.65481182E-02 0.30838012E-02 0.30838012E-02 0.30838012E-02 0.23251198E-02 0.23251198E-02 -0.23251198E-02 -0.16783389E-01 -0.30962076E-01 -0.49982391E-01 -0.65062221E-01 -0.55517711E-01 -0.19168932E-01 -0.23164280E-01 -0.10676395E-01 0.29937727E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 0.17449554E+00 0.13379211E+00 0.66771640E-01 -0.17449554E+00 -0.13379211E+00 -0.66771640E-01 0.19011742E-01 -0.65481182E-02 0.65481182E-02 -0.65481182E-02 0.30838012E-02 0.30838012E-02 0.30838012E-02 0.23251198E-02 -0.23251198E-02 0.23251198E-02 0.31940020E-01 0.54176319E-01 0.61677824E-01 0.14962780E-01 0.31940020E-01 0.54176319E-01 0.61677824E-01 0.14962780E-01 0.31940020E-01 0.54176319E-01 0.61677824E-01 0.14962780E-01 0.31940020E-01 0.54176319E-01 0.61677824E-01 0.14962780E-01 MO 10 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.5340742 0.20525814E-02 0.37866118E-02 0.61127655E-02 0.79570044E-02 0.67897263E-02 0.23443293E-02 0.31345534E-02 0.14447128E-02 -0.40511255E-02 0.25602753E+00 0.19630567E+00 0.97970288E-01 0.24662185E+00 0.18909399E+00 0.94371155E-01 -0.93560206E-01 -0.71736032E-01 -0.35801308E-01 -0.11031654E-01 0.15958983E-01 0.15481969E-01 -0.17705431E-02 -0.12066960E-01 -0.11144779E-01 0.22208400E-01 -0.39594607E-02 0.22729481E-01 0.23467402E-01 0.20410881E-02 0.37654090E-02 0.60785376E-02 0.79124499E-02 0.67517078E-02 0.23312025E-02 0.31170018E-02 0.14366233E-02 -0.40284416E-02 -0.24618151E+00 -0.18875637E+00 -0.94202657E-01 -0.25558719E+00 -0.19596805E+00 -0.97801791E-01 -0.94970192E-01 -0.72817119E-01 -0.36340846E-01 -0.10969883E-01 -0.15442982E-01 -0.15919996E-01 -0.18587063E-02 -0.11174596E-01 -0.12096777E-01 0.22273652E-01 -0.40890114E-02 -0.23413925E-01 -0.22676004E-01 -0.21025775E-02 -0.38788450E-02 -0.62616585E-02 -0.81508188E-02 -0.69551085E-02 -0.24014318E-02 -0.32109040E-02 -0.14799027E-02 0.41498016E-02 -0.25372500E+00 -0.19454024E+00 -0.97089213E-01 0.25275535E+00 0.19379677E+00 0.96718172E-01 -0.87426704E-01 -0.67033251E-01 -0.33454290E-01 0.11300360E-01 -0.15914659E-01 0.15865483E-01 -0.13870295E-02 0.11523699E-01 0.11428629E-01 -0.21924550E-01 -0.33959091E-02 0.23293032E-01 -0.23369106E-01 -0.19910919E-02 -0.36731758E-02 -0.59296447E-02 -0.77186355E-02 -0.65863257E-02 -0.22741000E-02 -0.30406512E-02 -0.14014334E-02 0.39297655E-02 0.24848404E+00 0.19052180E+00 0.95083733E-01 -0.24945369E+00 -0.19126527E+00 -0.95454774E-01 -0.10110369E+00 -0.77519900E-01 -0.38687863E-01 0.10701177E-01 0.15487306E-01 -0.15536482E-01 -0.22422199E-02 0.11717858E-01 0.11812927E-01 -0.22557503E-01 -0.46525630E-02 -0.22850374E-01 0.22774300E-01 0.25401252E-01 0.43085330E-01 0.49051126E-01 0.15391510E-01 0.25259019E-01 0.42844078E-01 0.48776468E-01 0.15305326E-01 -0.26019968E-01 -0.44134790E-01 -0.50245899E-01 -0.15766412E-01 -0.24640303E-01 -0.41794618E-01 -0.47581695E-01 -0.14930424E-01 MO 11 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.5340742 0.28913561E-02 0.53339874E-02 0.86107096E-02 0.11208585E-01 0.95643062E-02 0.33023251E-02 0.44154694E-02 0.20350858E-02 -0.57065930E-02 0.10575234E+00 0.81084189E-01 0.40466693E-01 0.11524226E+00 0.88360457E-01 0.44098061E-01 0.35526634E+00 0.27239570E+00 0.13594454E+00 -0.15539672E-01 0.95531729E-02 0.10034459E-01 0.22207407E-01 0.79935715E-02 0.70631316E-02 -0.16470051E-01 0.32634712E-01 0.13803652E-01 0.13059122E-01 -0.28979513E-02 -0.53461544E-02 -0.86303508E-02 -0.11234152E-01 -0.95861226E-02 -0.33098578E-02 -0.44255412E-02 -0.20397279E-02 0.57196099E-02 0.10656145E+00 0.81704558E-01 0.40776301E-01 0.11605136E+00 0.88980825E-01 0.44407668E-01 -0.35496261E+00 -0.27216281E+00 -0.13582832E+00 0.15575118E-01 0.96037642E-02 0.10085050E-01 -0.22201560E-01 -0.79561273E-02 -0.70256874E-02 0.16398386E-01 -0.32621745E-01 0.13877993E-01 0.13133463E-01 0.59539660E-04 0.10983905E-03 0.17731428E-03 0.23081051E-03 0.19695102E-03 0.68002455E-04 0.90924652E-04 0.41907089E-04 -0.11751185E-03 -0.24165329E+00 -0.18528441E+00 -0.92469909E-01 -0.24677195E+00 -0.18920908E+00 -0.94428593E-01 -0.67478710E-02 -0.51738395E-02 -0.25821085E-02 -0.31999751E-03 -0.12169294E-01 -0.12601449E-01 -0.42850123E-03 0.24071035E-01 -0.23816661E-01 -0.28347844E-03 -0.62747080E-03 -0.19458531E-01 -0.18860812E-01 -0.52944403E-04 -0.97672085E-04 -0.15767303E-03 -0.20524344E-03 -0.17513460E-03 -0.60469767E-04 -0.80852853E-04 -0.37265006E-04 0.10449497E-03 -0.24246239E+00 -0.18590478E+00 -0.92779516E-01 -0.24596285E+00 -0.18858871E+00 -0.94118985E-01 0.70516099E-02 0.54067272E-02 0.26983358E-02 0.28455113E-03 -0.12219886E-01 -0.12550858E-01 0.43434826E-03 -0.24108479E-01 0.23779216E-01 0.35514290E-03 0.64043758E-03 -0.19384190E-01 -0.18935153E-01 0.35781317E-01 0.60691885E-01 0.69095566E-01 0.21681156E-01 -0.35862935E-01 -0.60830325E-01 -0.69253175E-01 -0.21730611E-01 0.73681946E-03 0.12497853E-02 0.14228363E-02 0.44646477E-03 -0.65520136E-03 -0.11113455E-02 -0.12652276E-02 -0.39700950E-03 MO 12 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.5340742 0.16654145E-04 0.30723645E-04 0.49597490E-04 0.64561195E-04 0.55090184E-04 0.19021317E-04 0.25433003E-04 0.11722048E-04 -0.32869845E-04 0.24147428E+00 0.18514716E+00 0.92401409E-01 -0.24686103E+00 -0.18927738E+00 -0.94462677E-01 0.87059979E-02 0.66752070E-02 0.33313961E-02 -0.89508152E-04 0.12270629E-01 -0.12495553E-01 0.46566292E-03 -0.23569602E-01 0.24309276E-01 -0.74781523E-03 0.71045894E-03 -0.19340021E-01 0.18972266E-01 -0.95629266E-04 -0.17641732E-03 -0.28479226E-03 -0.37071490E-03 -0.31633170E-03 -0.10922173E-03 -0.14603808E-03 -0.67308819E-04 0.18874095E-03 0.25116290E+00 0.19257578E+00 0.96108812E-01 -0.23717240E+00 -0.18184876E+00 -0.90755274E-01 -0.50688672E-02 -0.38864859E-02 -0.19396288E-02 0.51396208E-03 0.12876436E-01 -0.11889746E-01 -0.39564740E-03 0.24017978E-01 -0.23860900E-01 -0.11033307E-03 -0.55518772E-03 -0.18449821E-01 0.19862465E-01 -0.28546331E-02 -0.52662407E-02 -0.85013454E-02 -0.11066226E-01 -0.94428305E-02 -0.32603824E-02 -0.43593888E-02 -0.20092383E-02 0.56341139E-02 -0.11077362E+00 -0.84934183E-01 -0.42388110E-01 0.10130063E+00 0.77670895E-01 0.38763220E-01 0.35686765E+00 0.27362348E+00 0.13655729E+00 0.15342303E-01 -0.97546139E-02 0.92741862E-02 0.22235402E-01 -0.72680448E-02 -0.81968249E-02 0.16860266E-01 0.32699856E-01 0.12649376E-01 -0.13392579E-01 0.29336083E-02 0.54119344E-02 0.87365402E-02 0.11372379E-01 0.97040720E-02 0.33505829E-02 0.44799939E-02 0.20648251E-02 -0.57899850E-02 -0.12046224E+00 -0.92362804E-01 -0.46095513E-01 0.11098925E+00 0.85099516E-01 0.42470623E-01 -0.35323052E+00 -0.27083476E+00 -0.13516553E+00 -0.15766757E-01 -0.10360421E-01 0.98799933E-02 -0.22165387E-01 0.68196684E-02 0.77484485E-02 -0.16002118E-01 -0.32544585E-01 0.13539576E-01 -0.14282778E-01 0.20609956E-03 0.34958387E-03 0.39798888E-03 0.12488296E-03 -0.11834381E-02 -0.20073351E-02 -0.22852800E-02 -0.71708670E-03 -0.35326860E-01 -0.59921041E-01 -0.68217988E-01 -0.21405784E-01 0.36304199E-01 0.61578793E-01 0.70105279E-01 0.21997988E-01 MO 13 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.3317291 -0.36495206E-14 -0.67326530E-14 -0.10868589E-13 -0.14147674E-13 -0.12072236E-13 -0.41682530E-14 -0.18851650E-14 -0.86887083E-15 0.24364045E-14 -0.63288358E-01 -0.48525499E-01 -0.24217625E-01 -0.24830844E+00 -0.19038716E+00 -0.95016539E-01 0.31159680E+00 0.23891266E+00 0.11923416E+00 0.65142744E-13 -0.59376216E-02 -0.23295936E-01 0.29233558E-01 -0.74388283E-03 -0.29185840E-02 0.36624668E-02 0.38365817E-01 -0.30573344E-01 -0.77924727E-02 -0.20221178E-14 -0.37304124E-14 -0.60220424E-14 -0.78389098E-14 -0.66889560E-14 -0.23095357E-14 -0.88316400E-14 -0.40704948E-14 0.11414092E-13 0.63288358E-01 0.48525499E-01 0.24217625E-01 0.24830844E+00 0.19038716E+00 0.95016539E-01 0.31159680E+00 0.23891266E+00 0.11923416E+00 0.34430177E-13 0.59376216E-02 0.23295936E-01 0.29233558E-01 -0.74388283E-03 -0.29185840E-02 0.36624668E-02 0.38365817E-01 0.30573344E-01 0.77924727E-02 0.57685046E-16 0.10641765E-15 0.17179108E-15 0.22362094E-15 0.19081615E-15 0.65884232E-16 -0.14807045E-13 -0.68245535E-14 0.19136760E-13 -0.63288358E-01 -0.48525499E-01 -0.24217625E-01 0.24830844E+00 0.19038716E+00 0.95016539E-01 -0.31159680E+00 -0.23891266E+00 -0.11923416E+00 0.55760697E-14 -0.59376216E-02 0.23295936E-01 -0.29233558E-01 -0.74388283E-03 -0.29185840E-02 0.36624668E-02 -0.38365817E-01 0.30573344E-01 -0.77924727E-02 -0.15149400E-14 -0.27947685E-14 -0.45116230E-14 -0.58727926E-14 -0.50112645E-14 -0.17302692E-14 -0.70233960E-14 -0.32370768E-14 0.90771012E-14 0.63288358E-01 0.48525499E-01 0.24217625E-01 -0.24830844E+00 -0.19038716E+00 -0.95016539E-01 -0.31159680E+00 -0.23891266E+00 -0.11923416E+00 0.36183546E-13 0.59376216E-02 -0.23295936E-01 -0.29233558E-01 -0.74388283E-03 -0.29185840E-02 0.36624668E-02 -0.38365817E-01 -0.30573344E-01 0.77924727E-02 -0.55690635E-15 -0.94461857E-15 -0.10754149E-14 -0.25677310E-13 -0.97427039E-15 -0.16525470E-14 -0.18813663E-14 -0.37625618E-13 -0.24248538E-14 -0.41130109E-14 -0.46825176E-14 -0.46528245E-13 -0.12681288E-14 -0.21509864E-14 -0.24488220E-14 -0.35763604E-13 MO 14 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.3317291 0.39348459E-14 0.72590224E-14 0.11718313E-13 0.15253762E-13 0.13016062E-13 0.44941335E-14 0.47891249E-13 0.22073033E-13 -0.61895088E-13 0.32326144E+00 0.24785637E+00 0.12369770E+00 -0.21644005E+00 -0.16595250E+00 -0.82821928E-01 -0.10682140E+00 -0.81903871E-01 -0.40875772E-01 -0.34844584E-13 0.30327918E-01 -0.20306090E-01 -0.10021828E-01 0.37995714E-02 -0.25440071E-02 -0.12555643E-02 -0.13152542E-01 -0.26649501E-01 0.39802043E-01 0.38265503E-14 0.70592381E-14 0.11395799E-13 0.14833944E-13 0.12657832E-13 0.43704451E-14 0.48856706E-13 0.22518011E-13 -0.63142854E-13 -0.32326144E+00 -0.24785637E+00 -0.12369770E+00 0.21644005E+00 0.16595250E+00 0.82821928E-01 -0.10682140E+00 -0.81903871E-01 -0.40875772E-01 -0.33404032E-13 -0.30327918E-01 0.20306090E-01 -0.10021828E-01 0.37995714E-02 -0.25440071E-02 -0.12555643E-02 -0.13152542E-01 0.26649501E-01 -0.39802043E-01 0.31654048E-14 0.58395537E-14 0.94268504E-14 0.12270958E-13 0.10470831E-13 0.36153263E-14 0.47551396E-13 0.21916395E-13 -0.61455859E-13 0.32326144E+00 0.24785637E+00 0.12369770E+00 0.21644005E+00 0.16595250E+00 0.82821928E-01 0.10682140E+00 0.81903871E-01 0.40875772E-01 -0.33164406E-13 0.30327918E-01 0.20306090E-01 0.10021828E-01 0.37995714E-02 -0.25440071E-02 -0.12555643E-02 0.13152542E-01 0.26649501E-01 0.39802043E-01 0.37820742E-14 0.69771885E-14 0.11263346E-13 0.14661529E-13 0.12510709E-13 0.43196473E-14 0.44902243E-13 0.20695403E-13 -0.58032070E-13 -0.32326144E+00 -0.24785637E+00 -0.12369770E+00 -0.21644005E+00 -0.16595250E+00 -0.82821928E-01 0.10682140E+00 0.81903871E-01 0.40875772E-01 -0.44495561E-13 -0.30327918E-01 -0.20306090E-01 0.10021828E-01 0.37995714E-02 -0.25440071E-02 -0.12555643E-02 0.13152542E-01 -0.26649501E-01 -0.39802043E-01 -0.19063144E-14 -0.32334701E-14 -0.36811914E-14 0.42081563E-13 -0.12518890E-14 -0.21234406E-14 -0.24174621E-14 0.41194256E-13 -0.79033825E-15 -0.13405633E-14 -0.15261839E-14 0.42572468E-13 -0.11195100E-14 -0.18989009E-14 -0.21618315E-14 0.38501656E-13 END DATA THE RHF ENERGY = -153.597882732801 THE VIRIAL(-V/T)= 2.00054039 avogadro-1.1.1/libavogadro/src/extensions/qtaim/test/hco2.wfn0000644000175000001440000005714012250371054023453 0ustar marcususersFormate anion 6-31++G** GAUSSIAN 12 MOL ORBITALS 104 PRIMITIVES 4 NUCLEI C 1 (CENTRE 1) 0.00000000 0.00000000 0.57942804 CHARGE = 6.0 O 2 (CENTRE 2) 0.00000000 2.11695431 -0.38686460 CHARGE = 8.0 O 3 (CENTRE 3) 0.00000000 -2.11695431 -0.38686460 CHARGE = 8.0 H 4 (CENTRE 4) 0.00000000 0.00000000 2.71326541 CHARGE = 1.0 CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 CENTRE ASSIGNMENTS 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 CENTRE ASSIGNMENTS 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 CENTRE ASSIGNMENTS 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 CENTRE ASSIGNMENTS 4 4 4 4 TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 TYPE ASSIGNMENTS 3 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 TYPE ASSIGNMENTS 1 2 2 2 3 3 3 4 4 4 1 2 3 4 1 2 3 4 5 6 TYPE ASSIGNMENTS 7 8 9 10 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 TYPE ASSIGNMENTS 4 4 1 2 3 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 TYPE ASSIGNMENTS 1 2 3 4 EXPONENTS 0.3047525E+04 0.4573695E+03 0.1039487E+03 0.2921016E+02 0.9286663E+01 EXPONENTS 0.3163927E+01 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.7868272E+01 EXPONENTS 0.1881289E+01 0.5442493E+00 0.7868272E+01 0.1881289E+01 0.5442493E+00 EXPONENTS 0.7868272E+01 0.1881289E+01 0.5442493E+00 0.1687145E+00 0.1687145E+00 EXPONENTS 0.1687145E+00 0.1687145E+00 0.4380000E-01 0.4380000E-01 0.4380000E-01 EXPONENTS 0.4380000E-01 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.5484672E+04 0.8252349E+03 0.1880470E+03 EXPONENTS 0.5296450E+02 0.1689757E+02 0.5799635E+01 0.1553962E+02 0.3599934E+01 EXPONENTS 0.1013762E+01 0.1553962E+02 0.3599934E+01 0.1013762E+01 0.1553962E+02 EXPONENTS 0.3599934E+01 0.1013762E+01 0.1553962E+02 0.3599934E+01 0.1013762E+01 EXPONENTS 0.2700058E+00 0.2700058E+00 0.2700058E+00 0.2700058E+00 0.8450000E-01 EXPONENTS 0.8450000E-01 0.8450000E-01 0.8450000E-01 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.5484672E+04 EXPONENTS 0.8252349E+03 0.1880470E+03 0.5296450E+02 0.1689757E+02 0.5799635E+01 EXPONENTS 0.1553962E+02 0.3599934E+01 0.1013762E+01 0.1553962E+02 0.3599934E+01 EXPONENTS 0.1013762E+01 0.1553962E+02 0.3599934E+01 0.1013762E+01 0.1553962E+02 EXPONENTS 0.3599934E+01 0.1013762E+01 0.2700058E+00 0.2700058E+00 0.2700058E+00 EXPONENTS 0.2700058E+00 0.8450000E-01 0.8450000E-01 0.8450000E-01 0.8450000E-01 EXPONENTS 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 0.8000000E+00 EXPONENTS 0.8000000E+00 0.1873114E+02 0.2825394E+01 0.6401217E+00 0.1612778E+00 EXPONENTS 0.3600000E-01 0.1100000E+01 0.1100000E+01 0.1100000E+01 MO 1 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -20.2999736 -0.12188442E-13 -0.22485295E-13 -0.36298238E-13 -0.47249521E-13 -0.40318102E-13 -0.13920872E-13 -0.41960794E-12 -0.19339692E-12 0.54230514E-12 -0.39273770E-15 -0.30112636E-15 -0.15028316E-15 0.29917662E-03 0.22938966E-03 0.11448152E-03 -0.63478413E-13 -0.48671221E-13 -0.24290350E-13 0.22529127E-12 0.13071387E-15 0.10185809E-03 -0.62728986E-13 0.10023463E-12 -0.29802626E-16 0.15830967E-04 -0.98332270E-14 -0.24693743E-12 -0.14752123E-11 -0.25765489E-12 0.18297189E-14 -0.66615675E-15 0.54705851E-03 0.58494882E+00 0.10766181E+01 0.17421713E+01 0.22901329E+01 0.19642337E+01 0.67160487E+00 -0.91594649E-02 -0.40869354E-02 0.12068775E-01 0.13518265E-14 0.10415094E-14 0.45727874E-15 -0.28829800E-02 -0.22211807E-02 -0.97521795E-03 0.12404677E-02 0.95571350E-03 0.41960970E-03 0.87774840E-03 -0.32212280E-15 0.15512643E-03 -0.10153969E-03 -0.16545660E-03 0.61506469E-16 -0.37903054E-05 -0.37038128E-05 -0.33187344E-02 -0.31410279E-02 -0.33038069E-02 0.74824127E-15 -0.24267011E-15 0.10744751E-03 -0.58494882E+00 -0.10766181E+01 -0.17421713E+01 -0.22901329E+01 -0.19642337E+01 -0.67160487E+00 0.91594649E-02 0.40869354E-02 -0.12068775E-01 0.12737899E-14 0.98138644E-15 0.43088151E-15 -0.28829800E-02 -0.22211807E-02 -0.97521795E-03 -0.12404677E-02 -0.95571350E-03 -0.41960970E-03 -0.87774839E-03 -0.13253444E-15 0.15512643E-03 0.10153969E-03 0.16545660E-03 0.23148336E-16 -0.37903054E-05 0.37038128E-05 0.33187344E-02 0.31410279E-02 0.33038069E-02 -0.14848270E-16 -0.68315079E-15 0.10744751E-03 -0.34702469E-13 -0.58861956E-13 -0.67012256E-13 0.22566017E-13 -0.31113147E-14 0.92067613E-15 -0.20220193E-03 0.19169822E-12 MO 2 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -20.2999400 -0.76032131E-05 -0.14026444E-04 -0.22643029E-04 -0.29474496E-04 -0.25150641E-04 -0.86839118E-05 -0.25352583E-03 -0.11684982E-03 0.32765910E-03 -0.46458861E-15 -0.35621708E-15 -0.17777729E-15 -0.49717214E-12 -0.38120007E-12 -0.19024555E-12 -0.36505553E-04 -0.27990143E-04 -0.13969043E-04 0.13379545E-03 0.15410457E-15 -0.16985819E-12 -0.37260932E-04 0.59582199E-04 -0.33013166E-17 -0.26264395E-13 -0.59799736E-05 -0.14837160E-03 -0.88805571E-03 -0.15585303E-03 0.91654207E-15 -0.56688934E-15 -0.90845593E-12 0.58494329E+00 0.10766079E+01 0.17421548E+01 0.22901113E+01 0.19642151E+01 0.67159852E+00 -0.91359783E-02 -0.40764557E-02 0.12037828E-01 -0.69384055E-15 -0.53456674E-15 -0.23470359E-15 -0.28671447E-02 -0.22089804E-02 -0.96986139E-03 0.13496592E-02 0.10398397E-02 0.45654563E-03 0.97103205E-03 0.32365768E-16 0.12453228E-03 -0.14888987E-04 -0.14163251E-03 -0.51015398E-17 -0.58826214E-06 0.49234601E-06 -0.34141266E-02 -0.32557299E-02 -0.31636818E-02 0.85810319E-15 -0.21994607E-15 -0.26326172E-03 0.58494329E+00 0.10766079E+01 0.17421548E+01 0.22901113E+01 0.19642151E+01 0.67159852E+00 -0.91359783E-02 -0.40764557E-02 0.12037828E-01 -0.93713542E-16 -0.72201232E-16 -0.31700230E-16 0.28671447E-02 0.22089804E-02 0.96986139E-03 0.13496592E-02 0.10398397E-02 0.45654563E-03 0.97103205E-03 -0.11050101E-15 -0.12453228E-03 -0.14888987E-04 -0.14163251E-03 -0.29425795E-17 0.58826216E-06 0.49234600E-06 -0.34141266E-02 -0.32557299E-02 -0.31636818E-02 -0.53710110E-15 0.19194431E-15 0.26326172E-03 -0.20738602E-04 -0.35176594E-04 -0.40047309E-04 0.13445219E-04 -0.14915103E-05 -0.62765065E-15 0.33685368E-12 0.11682620E-03 MO 3 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -11.1259858 0.53422217E+00 0.98553558E+00 0.15909600E+01 0.20709572E+01 0.17671515E+01 0.61015496E+00 -0.10842516E-01 -0.49973057E-02 0.14012967E-01 -0.26399094E-15 -0.20241151E-15 -0.10101753E-15 -0.67153739E-15 -0.51489227E-15 -0.25696733E-15 -0.51904345E-03 -0.39796960E-03 -0.19861472E-03 -0.24364266E-02 -0.44618693E-16 -0.11138516E-14 -0.14900667E-04 -0.34405146E-03 0.49907391E-17 -0.72656510E-16 -0.36041018E-04 -0.22405914E-02 -0.17736819E-03 -0.13078581E-02 0.25464249E-16 0.80735526E-16 -0.22785222E-14 -0.21118904E-03 -0.38870057E-03 -0.62899089E-03 -0.82682613E-03 -0.70916397E-03 -0.24247521E-03 -0.32654787E-03 -0.14570502E-03 0.43026889E-03 0.44005858E-15 0.33904142E-15 0.14885744E-15 -0.59465254E-03 -0.45814773E-03 -0.20115153E-03 0.28425497E-03 0.21900313E-03 0.96154171E-04 -0.39057537E-03 0.90780662E-16 0.19698398E-03 -0.14874850E-03 0.51083855E-03 -0.15573357E-16 -0.11842933E-03 0.10543451E-03 0.41231631E-03 0.62289754E-04 0.92118237E-04 -0.21381963E-15 0.15794712E-15 0.36723638E-03 -0.21118904E-03 -0.38870057E-03 -0.62899089E-03 -0.82682613E-03 -0.70916397E-03 -0.24247521E-03 -0.32654787E-03 -0.14570502E-03 0.43026889E-03 -0.56970734E-15 -0.43892879E-15 -0.19271338E-15 0.59465254E-03 0.45814773E-03 0.20115153E-03 0.28425497E-03 0.21900313E-03 0.96154171E-04 -0.39057537E-03 0.88802174E-16 -0.19698398E-03 -0.14874850E-03 0.51083855E-03 -0.16841347E-16 0.11842933E-03 0.10543451E-03 0.41231631E-03 0.62289754E-04 0.92118237E-04 0.85807874E-15 0.14026940E-16 -0.36723638E-03 -0.11890413E-04 -0.20168390E-04 -0.22960999E-04 0.23697920E-03 0.11546874E-03 0.43195428E-15 0.21925556E-14 0.50274602E-03 MO 4 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -1.1740934 -0.73231042E-01 -0.13509697E+00 -0.21808840E+00 -0.28388630E+00 -0.24224069E+00 -0.83639890E-01 -0.10522870E+00 -0.48499814E-01 0.13599854E+00 -0.28727776E-16 -0.22026636E-16 -0.10992835E-16 0.12100552E-13 0.92779359E-14 0.46303402E-14 -0.11901634E+00 -0.91254183E-01 -0.45542233E-01 0.10549147E-01 0.31762539E-16 -0.27780100E-14 0.49219789E-02 0.20754759E-02 0.25998815E-17 -0.53719651E-15 0.17045827E-03 -0.24548666E-01 0.31766034E-01 -0.17348874E-01 0.21249983E-15 0.68948723E-16 0.22101938E-15 -0.11052937E+00 -0.20343305E+00 -0.32919307E+00 -0.43273351E+00 -0.37115301E+00 -0.12690352E+00 -0.18013184E+00 -0.80374477E-01 0.23734691E+00 0.14708424E-14 0.11332048E-14 0.49753794E-15 -0.29446967E+00 -0.22687301E+00 -0.99609470E-01 0.11368823E+00 0.87590655E-01 0.38457016E-01 0.72481314E-01 0.23669280E-15 -0.12000654E-01 0.36696488E-02 -0.63902347E-03 -0.48889586E-16 0.13084694E-03 -0.35384531E-03 -0.10010288E-02 0.15647882E-01 -0.15052629E-02 -0.87594485E-16 -0.29313373E-17 -0.12142530E-01 -0.11052937E+00 -0.20343305E+00 -0.32919307E+00 -0.43273351E+00 -0.37115301E+00 -0.12690352E+00 -0.18013184E+00 -0.80374477E-01 0.23734691E+00 -0.15949994E-14 -0.12288610E-14 -0.53953618E-15 0.29446967E+00 0.22687301E+00 0.99609470E-01 0.11368823E+00 0.87590655E-01 0.38457016E-01 0.72481314E-01 -0.23399000E-15 0.12000654E-01 0.36696488E-02 -0.63902347E-03 0.27944600E-16 -0.13084694E-03 -0.35384531E-03 -0.10010288E-02 0.15647882E-01 -0.15052629E-02 -0.32611019E-16 -0.13048552E-16 0.12142530E-01 0.80895605E-02 0.13721426E-01 0.15621358E-01 -0.20758061E-02 -0.74912400E-03 -0.40079127E-16 0.88502528E-16 -0.12462681E-01 MO 5 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -1.0744921 0.18692576E-14 0.34484153E-14 0.55668115E-14 0.72463345E-14 0.61833103E-14 0.21349485E-14 0.31631417E-14 0.14578891E-14 -0.40880733E-14 0.85863809E-15 0.65834923E-15 0.32856241E-15 0.34495054E+00 0.26448620E+00 0.13199715E+00 0.24759331E-14 0.18983885E-14 0.94742889E-15 0.21014382E-14 0.12892468E-15 -0.41275671E-02 -0.69889242E-15 0.22560192E-15 0.30391526E-16 0.26353774E-03 -0.17884285E-15 0.21133158E-14 0.17535656E-14 0.21051693E-14 -0.33941281E-15 -0.21678398E-15 -0.64772949E-01 -0.12539442E+00 -0.23079267E+00 -0.37346611E+00 -0.49093165E+00 -0.42106922E+00 -0.14397072E+00 -0.20379474E+00 -0.90932815E-01 0.26852582E+00 0.25676757E-14 0.19782557E-14 0.86856081E-15 -0.21694570E+00 -0.16714497E+00 -0.73385643E-01 0.14375607E+00 0.11075630E+00 0.48627981E-01 0.86738391E-01 0.63864588E-16 -0.70857096E-02 0.61101790E-02 0.22488619E-02 -0.43160215E-16 -0.66559843E-03 0.24865111E-03 -0.19514481E-02 0.67320129E-02 0.27753057E-02 -0.88513393E-16 0.19930271E-15 -0.14003368E-01 0.12539442E+00 0.23079267E+00 0.37346611E+00 0.49093165E+00 0.42106922E+00 0.14397072E+00 0.20379474E+00 0.90932815E-01 -0.26852582E+00 -0.28628612E-15 -0.22056802E-15 -0.96841242E-16 -0.21694570E+00 -0.16714497E+00 -0.73385643E-01 -0.14375607E+00 -0.11075630E+00 -0.48627981E-01 -0.86738391E-01 -0.13876243E-15 -0.70857096E-02 -0.61101790E-02 -0.22488619E-02 -0.41652027E-16 -0.66559843E-03 -0.24865111E-03 0.19514481E-02 -0.67320129E-02 -0.27753057E-02 -0.46396439E-15 -0.20076890E-15 -0.14003368E-01 -0.39863194E-15 -0.67615522E-15 -0.76977882E-15 0.31285519E-15 0.25992725E-15 -0.74759164E-16 0.33628781E-02 0.96439545E-15 MO 6 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.5530167 -0.70117172E-01 -0.12935249E+00 -0.20881503E+00 -0.27181512E+00 -0.23194034E+00 -0.80083424E-01 -0.11157011E+00 -0.51422559E-01 0.14419422E+00 0.17896166E-16 0.13721645E-16 0.68480624E-17 -0.21223634E-14 -0.16272936E-14 -0.81213356E-15 0.28800605E+00 0.22082477E+00 0.11020704E+00 0.52815085E-01 -0.21353772E-16 0.14236388E-14 0.10449305E-01 0.81723774E-03 0.55233791E-17 0.16612234E-15 0.41658645E-03 -0.14158017E-01 -0.21644039E-02 0.85164950E-02 0.91567838E-15 0.81779774E-15 0.13475524E-14 0.58244667E-01 0.10720128E+00 0.17347191E+00 0.22803367E+00 0.19558316E+00 0.66873203E-01 0.98204491E-01 0.43818653E-01 -0.12939707E+00 0.44951010E-14 0.34632330E-14 0.15205458E-14 -0.33527287E+00 -0.25830967E+00 -0.11341186E+00 0.48675301E+00 0.37501695E+00 0.16465264E+00 -0.63886549E-01 0.43431938E-15 -0.12722688E-01 0.21301169E-01 -0.47251497E-02 -0.68698575E-16 0.57636688E-04 -0.33885860E-03 -0.31899863E-02 0.19678919E-02 0.35950450E-02 -0.42946813E-15 -0.35150773E-16 -0.20700089E-01 0.58244667E-01 0.10720128E+00 0.17347191E+00 0.22803367E+00 0.19558316E+00 0.66873203E-01 0.98204491E-01 0.43818653E-01 -0.12939707E+00 -0.36200009E-14 -0.27890155E-14 -0.12245280E-14 0.33527287E+00 0.25830967E+00 0.11341186E+00 0.48675301E+00 0.37501695E+00 0.16465264E+00 -0.63886549E-01 -0.22043429E-15 0.12722688E-01 0.21301169E-01 -0.47251497E-02 0.65414131E-16 -0.57636688E-04 -0.33885860E-03 -0.31899863E-02 0.19678919E-02 0.35950450E-02 0.10055396E-14 0.20933174E-15 0.20700089E-01 0.48260411E-01 0.81858791E-01 0.93193340E-01 0.27286475E-01 -0.18822032E-03 -0.24601791E-15 0.94535590E-15 -0.24668746E-01 MO 7 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.4350704 0.29516069E-01 0.54451384E-01 0.87901417E-01 0.11442153E+00 0.97636096E-01 0.33711398E-01 0.54618306E-01 0.25173527E-01 -0.70589198E-01 0.55987897E-15 0.42927968E-15 0.21424065E-15 0.17236844E-13 0.13216118E-13 0.65957693E-14 0.41469345E+00 0.31796063E+00 0.15868464E+00 -0.13947528E-01 0.28029789E-16 -0.83951432E-15 0.11799832E-01 0.25914292E-03 -0.72652828E-17 -0.18414718E-15 0.11905279E-03 0.96763138E-02 -0.26911937E-02 0.62491930E-02 -0.13411045E-14 -0.42749602E-16 0.23406753E-15 -0.42022439E-01 -0.77343721E-01 -0.12515674E+00 -0.16452204E+00 -0.14110960E+00 -0.48247767E-01 -0.70337187E-01 -0.31384316E-01 0.92678305E-01 0.93458021E-14 0.72004367E-14 0.31613795E-14 0.10123545E+01 0.77996454E+00 0.34244644E+00 0.25096101E+00 0.19335193E+00 0.84891910E-01 0.51948210E-01 0.49498841E-15 0.49336295E-01 0.16426237E-01 0.46901968E-02 0.49969754E-16 0.13228224E-02 0.36500115E-03 0.48533355E-02 -0.23809057E-01 0.13331413E-01 -0.82678011E-15 0.75855186E-15 0.14884136E-02 -0.42022439E-01 -0.77343721E-01 -0.12515674E+00 -0.16452204E+00 -0.14110960E+00 -0.48247767E-01 -0.70337187E-01 -0.31384316E-01 0.92678305E-01 -0.60862544E-14 -0.46891309E-14 -0.20587810E-14 -0.10123545E+01 -0.77996454E+00 -0.34244644E+00 0.25096101E+00 0.19335193E+00 0.84891910E-01 0.51948210E-01 -0.30099943E-15 -0.49336295E-01 0.16426237E-01 0.46901968E-02 -0.28745755E-16 -0.13228224E-02 0.36500115E-03 0.48533355E-02 -0.23809057E-01 0.13331413E-01 -0.72580272E-15 -0.98662623E-15 -0.14884136E-02 0.25631277E-01 0.43475498E-01 0.49495318E-01 0.20088197E-01 0.32421027E-03 0.32117158E-15 -0.36079578E-15 -0.77174499E-02 MO 8 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.3925008 -0.10990965E-14 -0.20276184E-14 -0.32732048E-14 -0.42607401E-14 -0.36356972E-14 -0.12553189E-14 -0.12597383E-14 -0.58061223E-15 0.16280973E-14 0.30391715E-15 0.23302440E-15 0.11629551E-15 0.47521351E+00 0.36436358E+00 0.18184296E+00 -0.15674025E-13 -0.12017848E-13 -0.59977485E-14 0.23959725E-14 0.10003107E-15 0.13052360E-01 -0.10191030E-14 0.13275707E-14 -0.84108065E-16 -0.20431390E-03 0.11305413E-15 -0.11047004E-14 -0.41105133E-15 -0.64244187E-15 0.80951759E-15 -0.85955184E-15 -0.34592804E-01 0.45179757E-01 0.83154871E-01 0.13456028E+00 0.17688325E+00 0.15171174E+00 0.51872819E-01 0.76245321E-01 0.34020514E-01 -0.10046303E+00 0.10940547E-13 0.84291014E-14 0.37008295E-14 -0.91268535E+00 -0.70317486E+00 -0.30873164E+00 0.73641683E+00 0.56736947E+00 0.24910576E+00 -0.63894105E-01 0.43466765E-15 -0.40970939E-01 0.36101567E-01 -0.50146391E-02 0.18405106E-15 -0.16027372E-02 0.12749166E-02 -0.75700601E-02 0.10995193E-01 0.26772376E-02 0.71963657E-15 -0.13181106E-15 -0.31118299E-01 -0.45179757E-01 -0.83154871E-01 -0.13456028E+00 -0.17688325E+00 -0.15171174E+00 -0.51872819E-01 -0.76245321E-01 -0.34020514E-01 0.10046303E+00 -0.92429181E-14 -0.71211701E-14 -0.31265772E-14 -0.91268535E+00 -0.70317486E+00 -0.30873164E+00 -0.73641683E+00 -0.56736947E+00 -0.24910576E+00 0.63894105E-01 -0.78890469E-15 -0.40970939E-01 -0.36101567E-01 0.50146391E-02 0.84189932E-16 -0.16027372E-02 -0.12749166E-02 0.75700601E-02 -0.10995193E-01 -0.26772376E-02 -0.10409164E-14 -0.13401409E-14 -0.31118299E-01 -0.93365222E-15 -0.15836509E-14 -0.18029305E-14 -0.46280510E-15 -0.65902358E-15 0.55049012E-15 0.43684877E-02 0.42292198E-15 MO 9 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.3515679 0.42992532E-16 0.79312826E-16 0.12803549E-15 0.16666417E-15 0.14221484E-15 0.49103366E-16 -0.33638851E-15 -0.15504116E-15 0.43475159E-15 0.42325022E+00 0.32452142E+00 0.16195893E+00 -0.21186711E-14 -0.16244626E-14 -0.81072068E-15 0.31852096E-15 0.24422167E-15 0.12188373E-15 -0.44831012E-15 0.22943621E-01 -0.28520655E-14 -0.17311944E-15 -0.25890548E-15 0.10780039E-02 -0.45327461E-16 -0.37838258E-16 -0.16648437E-15 -0.35671005E-15 0.35656373E-15 0.28405848E-14 -0.32004969E-01 0.46027347E-15 -0.46083976E-15 -0.84819117E-15 -0.13725334E-14 -0.18042336E-14 -0.15474807E-14 -0.52910992E-15 0.13739851E-14 0.61306947E-15 -0.18104024E-14 0.10693282E+01 0.82385976E+00 0.36171881E+00 -0.14596552E-13 -0.11245856E-13 -0.49375367E-14 -0.19854389E-13 -0.15296737E-13 -0.67160913E-14 0.45588133E-14 0.63719638E-01 -0.25630748E-14 -0.57762674E-16 -0.34971873E-15 0.11768325E-02 0.32156253E-15 0.39635969E-16 -0.12216953E-14 0.12505853E-15 -0.22736117E-14 -0.47807263E-01 0.23803807E-01 -0.11705483E-14 0.56351519E-15 0.10371688E-14 0.16783348E-14 0.22062181E-14 0.18922605E-14 0.64699599E-15 -0.17334309E-14 -0.77345349E-15 0.22840185E-14 0.10693282E+01 0.82385976E+00 0.36171881E+00 -0.11070953E-13 -0.85295724E-14 -0.37449417E-14 0.14112768E-13 0.10873127E-13 0.47738883E-14 -0.51586321E-14 0.63719638E-01 -0.24936818E-14 -0.11371921E-15 0.55393074E-15 0.11768325E-02 0.40932747E-15 0.18333847E-16 0.14023041E-14 0.11391859E-14 0.25528990E-14 0.47807263E-01 0.23803807E-01 -0.17811519E-14 0.14250971E-15 0.24172344E-15 0.27519359E-15 0.75032357E-16 0.22625231E-15 0.86480103E-02 0.11570854E-14 0.10925372E-15 MO 10 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.2088715 0.16186460E-15 0.29860858E-15 0.48204684E-15 0.62748176E-15 0.53543132E-15 0.18487157E-15 0.94603044E-15 0.43602457E-15 -0.12226584E-14 0.33879951E-14 0.25976997E-14 0.12964342E-14 -0.72908341E-01 -0.55901492E-01 -0.27898762E-01 -0.11993699E-13 -0.91960074E-14 -0.45894522E-14 0.33915210E-15 0.36801763E-16 0.95685588E-02 -0.38307992E-15 0.10074515E-14 0.22947369E-16 0.12130812E-02 0.23928569E-15 -0.35157680E-15 0.36640424E-14 -0.30475341E-14 -0.17735846E-13 0.12387032E-14 0.93730918E-01 0.32475817E-02 0.59772839E-02 0.96723736E-02 0.12714606E-01 0.10905244E-01 0.37286880E-02 0.21740825E-02 0.97007138E-03 -0.28646338E-02 -0.20180964E-12 -0.15548345E-12 -0.68265610E-13 0.89726886E+00 0.69129729E+00 0.30351674E+00 0.11078994E+01 0.85357673E+00 0.37476616E+00 -0.11070026E-01 -0.13948942E-13 0.58903491E-01 0.71329483E-01 -0.36231867E-02 -0.10058512E-14 0.27838881E-02 0.40027887E-02 0.27068274E-02 -0.14876593E-01 0.18711862E-01 0.71278538E-14 -0.34660657E-14 -0.17097552E-01 -0.32475817E-02 -0.59772839E-02 -0.96723736E-02 -0.12714606E-01 -0.10905244E-01 -0.37286880E-02 -0.21740825E-02 -0.97007138E-03 0.28646338E-02 0.23460372E-12 0.18074952E-12 0.79358773E-13 0.89726886E+00 0.69129729E+00 0.30351674E+00 -0.11078994E+01 -0.85357673E+00 -0.37476616E+00 0.11070026E-01 0.16128442E-13 0.58903491E-01 -0.71329483E-01 0.36231867E-02 0.10491727E-14 0.27838881E-02 -0.40027887E-02 -0.27068274E-02 0.14876593E-01 -0.18711862E-01 0.58494747E-14 0.21608028E-14 -0.17097552E-01 -0.26074836E-14 -0.44227857E-14 -0.50351852E-14 -0.35055129E-14 -0.89434247E-15 -0.25195570E-14 0.16181864E-02 0.20874339E-15 MO 11 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.1883276 -0.91916341E-15 -0.16956770E-14 -0.27373485E-14 -0.35632144E-14 -0.30404973E-14 -0.10498106E-14 0.33614825E-14 0.15493042E-14 -0.43444107E-14 -0.33020665E-14 -0.25318152E-14 -0.12635532E-14 -0.14816542E-13 -0.11360385E-13 -0.56696282E-14 -0.57293829E-13 -0.43929274E-13 -0.21923787E-13 0.24193504E-13 -0.34477690E-15 0.24743909E-14 -0.87598959E-14 0.24511915E-13 0.96136067E-18 0.22701680E-15 0.15171890E-14 -0.45754063E-14 0.20657721E-13 -0.17738499E-13 0.10830363E+00 -0.16024470E-15 0.13125499E-13 -0.17260972E-14 -0.31769403E-14 -0.51408891E-14 -0.67578426E-14 -0.57961624E-14 -0.19818064E-14 0.56234982E-15 0.25091939E-15 -0.74096833E-15 0.13558285E+01 0.10445928E+01 0.45863249E+00 0.14837758E-12 0.11431692E-12 0.50191287E-13 0.47994820E-12 0.36977421E-12 0.16235080E-12 0.25551546E-14 0.92788274E-01 0.16808313E-13 0.30752203E-13 -0.19442261E-13 0.64962109E-02 0.30282181E-14 -0.46354044E-16 -0.30222011E-14 -0.10210477E-13 0.22273685E-15 -0.40099335E-01 0.22392489E-01 -0.48999307E-14 -0.21761755E-14 -0.40053247E-14 -0.64813714E-14 -0.85199441E-14 -0.73075065E-14 -0.24985606E-14 -0.13635060E-16 -0.60839372E-17 0.17965948E-16 -0.13558285E+01 -0.10445928E+01 -0.45863249E+00 0.13658309E-12 0.10522991E-12 0.46201597E-13 0.14559424E-12 0.11217251E-12 0.49249775E-13 0.56860577E-14 -0.92788274E-01 0.23147249E-14 0.10382293E-13 -0.16654836E-13 -0.64962109E-02 -0.18573361E-14 -0.11933823E-14 -0.37001322E-14 -0.59396267E-14 -0.34550931E-14 -0.40099335E-01 -0.22392489E-01 0.81285579E-15 -0.12454088E-13 -0.21124490E-13 -0.24049485E-13 -0.14903127E-13 -0.11784076E-13 -0.69210390E-15 -0.35169975E-17 0.29960746E-14 MO 12 MO 0. OCC NO = 2.0000000 ORB. ENERGY = -0.1853055 0.16440141E-02 0.30328851E-02 0.48960169E-02 0.63731592E-02 0.54382283E-02 0.18776895E-02 -0.32414818E-02 -0.14939960E-02 0.41893207E-02 0.10617617E-14 0.81409155E-15 0.40628874E-15 0.43777004E-15 0.33565430E-15 0.16751502E-15 -0.20485919E+00 -0.15707304E+00 -0.78390454E-01 -0.19383023E-01 0.15402398E-15 -0.22614904E-14 -0.36658076E-02 -0.18987697E-02 -0.46312070E-18 -0.13457127E-15 0.61367607E-03 -0.59317254E-02 0.63841864E-01 -0.64032243E-01 -0.27945291E-13 0.71540579E-15 0.50370806E-15 -0.52521498E-02 -0.96667594E-02 -0.15642641E-01 -0.20562690E-01 -0.17636500E-01 -0.60302188E-02 -0.56501612E-02 -0.25210909E-02 0.74448153E-02 -0.34627860E-12 -0.26678900E-12 -0.11713474E-12 0.23389523E-01 0.18020366E-01 0.79119114E-02 0.12252558E+01 0.94399358E+00 0.41446403E+00 0.12234358E-01 -0.24022089E-13 0.10768208E-02 0.82285813E-01 0.39539767E-02 -0.16303915E-14 0.38969476E-03 0.48002253E-02 -0.48315857E-02 -0.56669261E-02 0.34009425E-02 0.11162655E-13 -0.70095075E-14 -0.22149149E-01 -0.52521498E-02 -0.96667594E-02 -0.15642641E-01 -0.20562690E-01 -0.17636500E-01 -0.60302188E-02 -0.56501612E-02 -0.25210909E-02 0.74448153E-02 0.35070484E-12 0.27019917E-12 0.11863199E-12 -0.23389523E-01 -0.18020366E-01 -0.79119114E-02 0.12252558E+01 0.94399358E+00 0.41446403E+00 0.12234358E-01 0.23920700E-13 -0.10768208E-02 0.82285813E-01 0.39539767E-02 0.16340155E-14 -0.38969476E-03 0.48002253E-02 -0.48315857E-02 -0.56669261E-02 0.34009425E-02 0.93558014E-14 0.54268186E-14 0.22149149E-01 -0.46606863E-01 -0.79054060E-01 -0.90000254E-01 -0.61419635E-01 -0.48996275E-02 -0.19529193E-14 0.44206302E-16 0.94257513E-02 END DATA THE RHF ENERGY = -188.209663369086 THE VIRIAL(-V/T)= 2.00251408 avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimcriticalpointlocator.h0000644000175000001440000000600512250371054026554 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef QTAIMCRITICALPOINTLOCATOR_H #define QTAIMCRITICALPOINTLOCATOR_H #include #include #include #include #include "qtaimwavefunction.h" #include "qtaimwavefunctionevaluator.h" #include "qtaimmathutilities.h" namespace Avogadro { class QTAIMCriticalPointLocator { public: explicit QTAIMCriticalPointLocator(QTAIMWavefunction &wfn); void locateNuclearCriticalPoints(); void locateBondCriticalPoints(); void locateElectronDensitySources(); void locateElectronDensitySinks(); QList nuclearCriticalPoints() const { return m_nuclearCriticalPoints; } QList bondCriticalPoints() const { return m_bondCriticalPoints; } QList ringCriticalPoints() const { return m_ringCriticalPoints; } QList cageCriticalPoints() const { return m_cageCriticalPoints; } QList laplacianAtBondCriticalPoints() const { return m_laplacianAtBondCriticalPoints; } QList ellipticityAtBondCriticalPoints() const { return m_ellipticityAtBondCriticalPoints; } QList > bondPaths() {return m_bondPaths; } QList > bondedAtoms() {return m_bondedAtoms; } QList electronDensitySources() const { return m_electronDensitySources; } QList electronDensitySinks() const { return m_electronDensitySinks; } private: QTAIMWavefunction *m_wfn; QList m_nuclearCriticalPoints; QList m_bondCriticalPoints; QList m_ringCriticalPoints; QList m_cageCriticalPoints; QList m_laplacianAtBondCriticalPoints; QList m_ellipticityAtBondCriticalPoints; QList > m_bondedAtoms; QList > m_bondPaths; QList m_electronDensitySources; QList m_electronDensitySinks; QString temporaryFileName(); }; } // namespace Avogadro #endif // QTAIMCRITICALPOINTLOCATOR_H avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimmathutilities.h0000644000175000001440000000622712250371054025217 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef QTAIMMATHUTILITIES_H #define QTAIMMATHUTILITIES_H #include #include using namespace Eigen; namespace Avogadro { namespace QTAIMMathUtilities { Matrix eigenvaluesOfASymmetricThreeByThreeMatrix(const Matrix &A); Matrix eigenvectorsOfASymmetricThreeByThreeMatrix(const Matrix &A); Matrix eigenvaluesOfASymmetricFourByFourMatrix(const Matrix &A); Matrix eigenvectorsOfASymmetricFourByFourMatrix(const Matrix &A); qint64 signOfARealNumber(qreal x); qint64 signatureOfASymmetricThreeByThreeMatrix(const Matrix &A); qreal ellipticityOfASymmetricThreeByThreeMatrix(const Matrix &A); qreal distance(const Matrix &a, const Matrix &b); Matrix sphericalToCartesian(const Matrix &rtp, const Matrix &x0y0z0); Matrix sphericalToCartesian(const Matrix &rtp); Matrix cartesianToSpherical(const Matrix &xyz, const Matrix &x0y0z0); Matrix cartesianToSpherical(const Matrix &xyz); // Cerjan-Miller-Baker-Popelier Methods // A small number to prevent divide by zero in CMBP routines #define SMALL 1.e-10 Matrix minusThreeSignatureLocatorGradient(const Matrix &g, const Matrix &H); Matrix minusOneSignatureLocatorGradient(const Matrix &g, const Matrix &H); Matrix plusOneSignatureLocatorGradient(const Matrix &g, const Matrix &H); Matrix plusThreeSignatureLocatorGradient(const Matrix &g, const Matrix &H); } } // namespace Avogadro #endif // QTAIMMATHUTILITIES_H avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimlsodaintegrator.cpp0000644000175000001440000023124612250371054026067 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ /* From tam@dragonfly.wri.com Wed Apr 24 01:35:52 1991 Return-Path: Date: Wed, 24 Apr 91 03:35:24 CDT From: tam@dragonfly.wri.com To: whitbeck@wheeler.wrc.unr.edu Subject: lsoda.c Cc: augenbau@sparc0.brc.uconn.edu I'm told by Steve Nichols at Georgia Tech that you are interested in a stiff integrator. Here's a translation of the fortran code LSODA. Please note that there is no comment. The interface is the same as the FORTRAN code and I believe the documentation in LSODA will suffice. As usual, a free software comes with no guarantee. Hon Wah Tam Wolfram Research, Inc. tam@wri.com */ #include "qtaimlsodaintegrator.h" namespace Avogadro { QTAIMLSODAIntegrator::QTAIMLSODAIntegrator(QTAIMWavefunctionEvaluator &eval, const qint64 mode) { m_eval=&eval; m_mode=mode; m_betaSpheres.empty(); m_associatedSphere=0; } QVector3D QTAIMLSODAIntegrator::integrate( QVector3D x0y0z0 ) { qreal x0=x0y0z0.x(); qreal y0=x0y0z0.y(); qreal z0=x0y0z0.z(); mord[0] = 0; mord[1] = 12; mord[2] = 5; sm1[0] = 0. ; sm1[1] = 0.5 ; sm1[2] = 0.575; sm1[3] = 0.55 ; sm1[4] = 0.45 ; sm1[5] = 0.35 ; sm1[6] = 0.25 ; sm1[7] = 0.2 ; sm1[8] = 0.15 ; sm1[9] = 0.1 ; sm1[10] = 0.075; sm1[11] = 0.05 ; sm1[12] = 0.025; illin=0; init=0; ntrep=0; ixpr=0; mesflg=1; double rwork1, rwork5, rwork6, rwork7; double atol[4], rtol[4], t, tout, y[4]; int iwork1, iwork2, iwork5, iwork6, iwork7, iwork8, iwork9; int neq = 3; int itol, itask, istate, iopt, jt; y[1] = x0; y[2] = y0; y[3] = z0; double t0; double tf=100.0; double dt=0.1; m_path.clear(); m_path.append(QVector3D(y[1],y[2],y[3])); t=0.0; for (t0=0.0; t0 < tf; t0=t0+dt) { iwork1= iwork2= iwork5= iwork6= iwork7= iwork8= iwork9= 0; rwork1= rwork5= rwork6= rwork7= 0.0; t = t0; tout = t0+dt; itol = 2; rtol[0] = 0.0; atol[0] = 0.0; rtol[1] = 0.0; rtol[2] = 0.0; rtol[3] = 0.0; atol[1] = 5.0E-5; atol[2] = 5.0E-5; atol[3] = 5.0E-5; itask = 1; istate = 1; iopt = 0; jt = 2; // if( t0 + dt > tf ) qDebug() << "END"; // beta spheres if( m_mode == QTAIMLSODAIntegrator::SteepestAscentPathInElectronDensity) { if( m_betaSpheres.length() > 0 ) { for( qint64 n=0 ; n < m_betaSpheres.length() ; ++n ) { Matrix a(y[1],y[2],y[3]); Matrix b(m_betaSpheres.at(n).first.x(), m_betaSpheres.at(n).first.y(), m_betaSpheres.at(n).first.z() ); qreal distance=QTAIMMathUtilities::distance(a,b); if( distance < m_betaSpheres.at(n).second ) { m_status=0; m_associatedSphere=n; return QVector3D( m_betaSpheres.at(n).first.x(), m_betaSpheres.at(n).first.y(), m_betaSpheres.at(n).first.z() ); } } } } // beta spheres lsoda(neq,y,&t,tout,itol,rtol,atol,itask,&istate,iopt,jt, iwork1, iwork2, iwork5, iwork6, iwork7, iwork8, iwork9, rwork1,rwork5,rwork6,rwork7); m_path.append(QVector3D(y[1],y[2],y[3])); // qDebug(" at t= %12.4e y= %14.6e %14.6e %14.6e", t,y[1],y[2],y[3]); if (istate <= 0) { // qDebug("error istate = %d",istate); // qDebug(" at t= %12.4e y= %14.6e %14.6e %14.6e", t,y[1],y[2],y[3]); return QVector3D(y[1],y[2],y[3]); } } // ode step return QVector3D(y[1],y[2],y[3]); } void QTAIMLSODAIntegrator::f( int neq, double t, double *y, double *ydot ) { neq=neq; // suppress warning t=t; // suppress warning Matrix gradient; Matrix gH; Matrix g; Matrix H; Matrix xyz; xyz << y[1],y[2],y[3]; if(m_mode == SteepestAscentPathInElectronDensity ) { g=m_eval->gradientOfElectronDensity(xyz); } else { if( m_mode == 1 || m_mode ==2 || m_mode ==3 || m_mode == 4 ) { gH=m_eval->gradientAndHessianOfElectronDensity(xyz); } else { gH=m_eval->gradientAndHessianOfElectronDensityLaplacian(xyz); } g(0)=gH(0,0); g(1)=gH(1,0); g(2)=gH(2,0); H(0,0)=gH(0,1); H(1,0)=gH(1,1); H(2,0)=gH(2,1); H(0,1)=gH(0,2); H(1,1)=gH(1,2); H(2,1)=gH(2,2); H(0,2)=gH(0,3); H(1,2)=gH(1,3); H(2,2)=gH(2,3); } switch (m_mode) { case SteepestAscentPathInElectronDensity: gradient=g; break; case CMBPMinusThreeGradientInElectronDensity: gradient=QTAIMMathUtilities::minusThreeSignatureLocatorGradient(g,H); break; case CMBPMinusOneGradientInElectronDensity: gradient=QTAIMMathUtilities::minusOneSignatureLocatorGradient(g,H); break; case CMBPPlusOneGradientInElectronDensity: gradient=QTAIMMathUtilities::plusOneSignatureLocatorGradient(g,H); break; case CMBPPlusThreeGradientInElectronDensity: gradient=QTAIMMathUtilities::plusThreeSignatureLocatorGradient(g,H); break; case CMBPMinusThreeGradientInElectronDensityLaplacian: gradient=QTAIMMathUtilities::minusThreeSignatureLocatorGradient(g,H); break; case CMBPMinusOneGradientInElectronDensityLaplacian: gradient=QTAIMMathUtilities::minusOneSignatureLocatorGradient(g,H); break; case CMBPPlusOneGradientInElectronDensityLaplacian: gradient=QTAIMMathUtilities::plusOneSignatureLocatorGradient(g,H); break; case CMBPPlusThreeGradientInElectronDensityLaplacian: gradient=QTAIMMathUtilities::plusThreeSignatureLocatorGradient(g,H); break; default: qDebug() << "Catastrophic: No ODE parameters for this property." ; exit(1); break; } qreal normGradient=sqrt( gradient(0)*gradient(0) + gradient(1)*gradient(1) + gradient(2)*gradient(2) ); ydot[1]= gradient(0) / normGradient; ydot[2]= gradient(1) / normGradient; ydot[3]= gradient(2) / normGradient; } void QTAIMLSODAIntegrator::daxpy( int n, double da, double *dx, int incx, double *dy, int incy ) /* Purpose : To compute dy = da * dx + dy --- Input --- n : number of elements in input vector(s) da : double scalar multiplier dx : double vector with n+1 elements, dx[0] is not used incx : storage spacing between elements of dx dy : double vector with n+1 elements, dy[0] is not used incy : storage spacing between elements of dy --- Output --- dy = da * dx + dy, unchanged if n <= 0 For i = 0 to n-1, replace dy[ly+i*incy] with da*dx[lx+i*incx] + dy[ly+i*incy], where lx = 1 if incx >= 0, else lx = (-incx)*(n-1)+1 and ly is defined in a similar way using incy. */ { int ix, iy, i, m; if ( n < 0 || da == 0. ) return; /* Code for nonequal or nonpositive increments. */ if ( incx != incy || incx < 1 ) { ix = 1; iy = 1; if ( incx < 0 ) ix = ( -n + 1 ) * incx + 1; if ( incy < 0 ) iy = ( -n + 1 ) * incy + 1; for ( i = 1 ; i <= n ; i++ ) { dy[iy] = dy[iy] + da * dx[ix]; ix = ix + incx; iy = iy + incy; } return; } /* Code for both increments equal to 1. */ /* Clean-up loop so remaining vector length is a multiple of 4. */ if ( incx == 1 ) { m = n % 4; if ( m != 0 ) { for ( i = 1 ; i <= m ; i++ ) dy[i] = dy[i] + da * dx[i]; if ( n < 4 ) return; } for ( i = m + 1 ; i <= n ; i = i + 4 ) { dy[i] = dy[i] + da * dx[i]; dy[i+1] = dy[i+1] + da * dx[i+1]; dy[i+2] = dy[i+2] + da * dx[i+2]; dy[i+3] = dy[i+3] + da * dx[i+3]; } return; } /* Code for equal, positive, nonunit increments. */ for ( i = 1 ; i <= n * incx ; i = i + incx ) dy[i] = da * dx[i] + dy[i]; return; } double QTAIMLSODAIntegrator::ddot( int n, double *dx, int incx, double *dy, int incy ) /* Purpose : Inner product dx . dy --- Input --- n : number of elements in input vector(s) dx : double vector with n+1 elements, dx[0] is not used incx : storage spacing between elements of dx dy : double vector with n+1 elements, dy[0] is not used incy : storage spacing between elements of dy --- Output --- ddot : dot product dx . dy, 0 if n <= 0 ddot = sum for i = 0 to n-1 of dx[lx+i*incx] * dy[ly+i*incy] where lx = 1 if incx >= 0, else lx = (-incx)*(n-1)+1, and ly is defined in a similar way using incy. */ { double dotprod; int ix, iy, i, m; dotprod = 0.; if ( n <= 0 ) return dotprod; /* Code for unequal or nonpositive increments. */ if ( incx != incy || incx < 1 ) { ix = 1; iy = 1; if ( incx < 0 ) ix = ( -n + 1 ) * incx + 1; if ( incy < 0 ) iy = ( -n + 1 ) * incy + 1; for ( i = 1 ; i <= n ; i++ ) { dotprod = dotprod + dx[ix] * dy[iy]; ix = ix + incx; iy = iy + incy; } return dotprod; } /* Code for both increments equal to 1. */ /* Clean-up loop so remaining vector length is a multiple of 5. */ if ( incx == 1 ) { m = n % 5; if ( m != 0 ) { for ( i = 1 ; i <= m ; i++ ) dotprod = dotprod + dx[i] * dy[i]; if ( n < 5 ) return dotprod; } for ( i = m + 1 ; i <= n ; i = i + 5 ) dotprod = dotprod + dx[i] * dy[i] + dx[i+1] * dy[i+1] + dx[i+2] * dy[i+2] + dx[i+3] * dy[i+3] + dx[i+4] * dy[i+4]; return dotprod; } /* Code for positive equal nonunit increments. */ for ( i = 1 ; i <= n * incx ; i = i + incx ) dotprod = dotprod + dx[i] * dy[i]; return dotprod; } void QTAIMLSODAIntegrator::dgefa( double **a, int n, int *ipvt, int *info ) /* Purpose : dgefa factors a double matrix by Gaussian elimination. dgefa is usually called by dgeco, but it can be called directly with a saving in time if rcond is not needed. (Time for dgeco) = (1+9/n)*(time for dgefa). This c version uses algorithm kji rather than the kij in dgefa.f. Note that the fortran version input variable lda is not needed. On Entry : a : double matrix of dimension ( n+1, n+1 ), the 0-th row and column are not used. a is created using NewDoubleMatrix, hence lda is unnecessary. n : the row dimension of a. On Return : a : a lower triangular matrix and the multipliers which were used to obtain it. The factorization can be written a = L * U where U is a product of permutation and unit upper triangular matrices and L is lower triangular. ipvt : an n+1 integer vector of pivot indices. *info : = 0 normal value, = k if U[k][k] == 0. This is not an error condition for this subroutine, but it does indicate that dgesl or dgedi will divide by zero if called. Use rcond in dgeco for a reliable indication of singularity. Notice that the calling program must use &info. BLAS : daxpy, dscal, idamax */ { int j, k, i; double t; /* Gaussian elimination with partial pivoting. */ *info = 0; for ( k = 1 ; k <= n - 1 ; k++ ) { /* Find j = pivot index. Note that a[k]+k-1 is the address of the 0-th element of the row vector whose 1st element is a[k][k]. */ j = idamax( n-k+1, a[k]+k-1, 1 ) + k - 1; ipvt[k] = j; /* Zero pivot implies this row already triangularized. */ if ( a[k][j] == 0. ) { *info = k; continue; } /* Interchange if necessary. */ if ( j != k ) { t = a[k][j]; a[k][j] = a[k][k]; a[k][k] = t; } /* Compute multipliers. */ t = -1. / a[k][k]; dscal( n-k, t, a[k]+k, 1 ); /* Column elimination with row indexing. */ for ( i = k + 1 ; i <= n ; i++ ) { t = a[i][j]; if ( j != k ) { a[i][j] = a[i][k]; a[i][k] = t; } daxpy( n-k, t, a[k]+k, 1, a[i]+k, 1 ); } } /* end k-loop */ ipvt[n] = n; if ( a[n][n] == 0. ) *info = n; } void QTAIMLSODAIntegrator::dgesl( double **a, int n, int *ipvt, double *b, int job ) /* Purpose : dgesl solves the linear system a * x = b or Transpose(a) * x = b using the factors computed by dgeco or degfa. On Entry : a : double matrix of dimension ( n+1, n+1 ), the output from dgeco or dgefa. The 0-th row and column are not used. n : the row dimension of a. ipvt : the pivot vector from degco or dgefa. b : the right hand side vector. job : = 0 to solve a * x = b, = nonzero to solve Transpose(a) * x = b. On Return : b : the solution vector x. Error Condition : A division by zero will occur if the input factor contains a zero on the diagonal. Technically this indicates singularity but it is often caused by improper argments or improper setting of the pointers of a. It will not occur if the subroutines are called correctly and if dgeco has set rcond > 0 or dgefa has set info = 0. BLAS : daxpy, ddot */ { int k, j; double t; /* Job = 0, solve a * x = b. */ if ( job == 0 ) { /* First solve L * y = b. */ for ( k = 1 ; k <= n ; k++ ) { t = ddot( k-1, a[k], 1, b, 1 ); b[k] = ( b[k] - t ) / a[k][k]; } /* Now solve U * x = y. */ for ( k = n - 1 ; k >= 1 ; k-- ) { b[k] = b[k] + ddot( n-k, a[k]+k, 1, b+k, 1 ); j = ipvt[k]; if ( j != k ) { t = b[j]; b[j] = b[k]; b[k] = t; } } return; } /* Job = nonzero, solve Transpose(a) * x = b. First solve Transpose(U) * y = b. */ for ( k = 1 ; k <= n - 1 ; k++ ) { j = ipvt[k]; t = b[j]; if ( j != k ) { b[j] = b[k]; b[k] = t; } daxpy( n-k, t, a[k]+k, 1, b+k, 1 ); } /* Now solve Transpose(L) * x = y. */ for ( k = n ; k >= 1 ; k-- ) { b[k] = b[k] / a[k][k]; t = -b[k]; daxpy( k-1, t, a[k], 1, b, 1 ); } } void QTAIMLSODAIntegrator::dscal( int n, double da, double *dx, int incx ) /* Purpose : scalar vector multiplication dx = da * dx --- Input --- n : number of elements in input vector da : double scale factor dx : double vector with n+1 elements, dx[0] is not used incx : storage spacing between elements of dx --- Output --- dx = da * dx, unchanged if n <= 0 For i = 0 to n-1, replace dx[1+i*incx] with da * dx[1+i*incx]. */ { int m, i; if ( n <= 0 ) return; /* Code for increments not equal to 1. */ if ( incx != 1 ) { for ( i = 1 ; i <= n * incx ; i = i + incx ) dx[i] = da * dx[i]; return; } /* Code for increments equal to 1. */ /* Clean-up loop so remaining vector length is a multiple of 5. */ m = n % 5; if ( m != 0 ) { for ( i = 1 ; i <= m ; i++ ) dx[i] = da * dx[i]; if ( n < 5 ) return; } for ( i = m + 1 ; i <= n ; i = i + 5 ) { dx[i] = da * dx[i]; dx[i+1] = da * dx[i+1]; dx[i+2] = da * dx[i+2]; dx[i+3] = da * dx[i+3]; dx[i+4] = da * dx[i+4]; } return; } int QTAIMLSODAIntegrator::idamax( int n, double *dx, int incx ) /* Purpose : Find largest component of double vector dx --- Input --- n : number of elements in input vector dx : double vector with n+1 elements, dx[0] is not used incx : storage spacing between elements of dx --- Output --- idamax : smallest index, 0 if n <= 0 Find smallest index of maximum magnitude of dx. idamax = first i, i=1 to n, to minimize fabs( dx[1-incx+i*incx] ). */ { double dmax, xmag; int i, ii, xindex; xindex = 0; if ( n <= 0 ) return xindex; xindex = 1; if ( n <= 1 || incx <= 0 ) return xindex; /* Code for increments not equal to 1. */ if ( incx != 1 ) { dmax = fabs( dx[1] ); ii = 2; for ( i = 1 + incx ; i <= n * incx ; i = i + incx ) { xmag = fabs( dx[i] ); if ( xmag > dmax ) { xindex = ii; dmax = xmag; } ii++; } return xindex; } /* Code for increments equal to 1. */ dmax = fabs( dx[1] ); for ( i = 2 ; i <= n ; i++ ) { xmag = fabs( dx[i] ); if ( xmag > dmax ) { xindex = i; dmax = xmag; } } return xindex; } // lsoda.c #define max( a , b ) ( (a) > (b) ? (a) : (b) ) #define min( a , b ) ( (a) < (b) ? (a) : (b) ) #define ETA 2.2204460492503131e-16 /* static void prja(), solsy(), stoda(), cfode(), ewset(), intdy(), terminate(), terminate2(), successreturn(), scaleh(), correction(), methodswitch(), orderswitch(), endstoda(), resetcoeff(), freevectors(), corfailure(); static double vmnorm(), bnorm(), fnorm(); */ /* The following are useful statistics. hu, h, tn, tolsf, tsw, nst, nfe, nje, nqu, nq, imxer, mused, meth */ /* Terminate lsoda due to illegal input. */ void QTAIMLSODAIntegrator::terminate( int *istate ) { if ( illin == 5 ) { qDebug( "lsoda -- repeated occurrence of illegal input" ); qDebug( " run aborted.. apparent infinite loop" ); } else { illin++; *istate = -3; } } /* end terminate */ /* Terminate lsoda due to various error conditions. */ void QTAIMLSODAIntegrator::terminate2( double *y, double *t ) { int i; yp1 = yh[1]; for ( i = 1 ; i <= n ; i++ ) y[i] = yp1[i]; *t = tn; illin = 0; freevectors(); return; } /* end terminate2 */ /* The following block handles all successful returns from lsoda. If itask != 1, y is loaded from yh and t is set accordingly. *Istate is set to 2, the illegal input counter is zeroed, and the optional outputs are loaded into the work arrays before returning. */ void QTAIMLSODAIntegrator::successreturn( double *y, double *t, int itask, int ihit, double tcrit, int *istate ) { int i; yp1 = yh[1]; for ( i = 1 ; i <= n ; i++ ) y[i] = yp1[i]; *t = tn; if ( itask == 4 || itask == 5 ) if ( ihit ) *t = tcrit; *istate = 2; illin = 0; freevectors(); } /* end successreturn */ /* In this version all memory allocated using malloc is freed upon exit. Therefore *istate = 2 and *istate = 3 will not work. */ void QTAIMLSODAIntegrator::lsoda( int neq, double *y, double *t, double tout, int itol, double *rtol, double *atol, int itask, int *istate, int iopt, int jt, int iwork1, int iwork2, int iwork5, int iwork6, int iwork7, int iwork8, int iwork9, double rwork1, double rwork5, double rwork6, double rwork7 ) /* If the user does not supply any of these values, the calling program should initialize those untouched working variables to zero. ml = iwork1 mu = iwork2 ixpr = iwork5 mxstep = iwork6 mxhnil = iwork7 mxordn = iwork8 mxords = iwork9 tcrit = rwork1 h0 = rwork5 hmax = rwork6 hmin = rwork7 */ { int mxstp0 = 500, mxhnl0 = -1 /* 10 */; int i, iflag, lenyh; double atoli, ayi, big, hmax, hmx, rh, rtoli, tdist, tnext, tol, tolsf, tp, size, sum, w0; /* Block a. This code block is executed on every call. It tests *istate and itask for legality and branches appropriately. If *istate > 1 but the flag init shows that initialization has not yet been done, an error return occurs. If *istate = 1 and tout = t, return immediately. */ if ( *istate < 1 || *istate > 3 ) { qDebug( "lsoda -- illegal istate = %d", *istate ); terminate( istate ); return; } if ( itask < 1 || itask > 5 ) { qDebug( "lsoda -- illegal itask = %d", itask ); terminate( istate ); return; } if ( init == 0 && ( *istate == 2 || *istate == 3 ) ) { qDebug( "lsoda -- istate > 1 but lsoda not initialized" ); terminate( istate ); return; } if ( *istate == 1 ) { init = 0; if ( tout == *t ) { ntrep++; if ( ntrep < 5 ) return; qDebug( "lsoda -- repeated calls with istate = 1 and tout = t" ); qDebug( " run aborted.. apparent infinite loop" ); return; } } /* Block b. The next code block is executed for the initial call ( *istate = 1 ), or for a continuation call with parameter changes ( *istate = 3 ). It contains checking of all inputs and various initializations. First check legality of the non-optional inputs neq, itol, iopt, jt, ml, and mu. */ double h0(0.0); if ( *istate == 1 || *istate == 3 ) { ntrep = 0; if ( neq <= 0 ) { qDebug( "lsoda -- neq = %d is less than 1", neq ); terminate( istate ); return; } if ( *istate == 3 && neq > n ) { qDebug( "lsoda -- istate = 3 and neq increased" ); terminate( istate ); return; } n = neq; if ( itol < 1 || itol > 4 ) { qDebug( "lsoda -- itol = %d illegal", itol ); terminate( istate ); return; } if ( iopt < 0 || iopt > 1 ) { qDebug( "lsoda -- iopt = %d illegal", iopt ); terminate( istate ); return; } if ( jt == 3 || jt < 1 || jt > 5 ) { qDebug( "lsoda -- jt = %d illegal", jt ); terminate( istate ); return; } jtyp = jt; if ( jt > 2 ) { ml = iwork1; mu = iwork2; if ( ml < 0 || ml >= n ) { qDebug( "lsoda -- ml = %d not between 1 and neq", ml ); terminate( istate ); return; } if ( mu < 0 || mu >= n ) { qDebug( "lsoda -- mu = %d not between 1 and neq", mu ); terminate( istate ); return; } } /* Next process and check the optional inpus. */ /* Default options. */ if ( iopt == 0 ) { ixpr = 0; mxstep = mxstp0; mxhnil = mxhnl0; hmxi = 0.; hmin = 0.; if ( *istate == 1 ) { h0 = 0.; mxordn = mord[1]; mxords = mord[2]; } } /* end if ( iopt == 0 ) */ /* Optional inputs. */ else { /* if ( iopt = 1 ) */ ixpr = iwork5; if ( ixpr < 0 || ixpr > 1 ) { qDebug( "lsoda -- ixpr = %d is illegal", ixpr ); terminate( istate ); return; } mxstep = iwork6; if ( mxstep < 0 ) { qDebug( "lsoda -- mxstep < 0" ); terminate( istate ); return; } if ( mxstep == 0 ) mxstep = mxstp0; mxhnil = iwork7; if ( mxhnil < 0 ) { qDebug( "lsoda -- mxhnil < 0" ); terminate( istate ); return; } if ( *istate == 1 ) { h0 = rwork5; mxordn = iwork8; if ( mxordn < 0 ) { qDebug( "lsoda -- mxordn = %d is less than 0", mxordn ); terminate( istate ); return; } if ( mxordn == 0 ) mxordn = 100; mxordn = min( mxordn, mord[1] ); mxords = iwork9; if ( mxords < 0 ) { qDebug( "lsoda -- mxords = %d is less than 0", mxords ); terminate( istate ); return; } if ( mxords == 0 ) mxords = 100; mxords = min( mxords, mord[2] ); if ( ( tout - *t ) * h0 < 0. ) { qDebug( "lsoda -- tout = %g behind t = %g", tout, *t ); qDebug( " integration direction is given by %g", h0 ); terminate( istate ); return; } } /* end if ( *istate == 1 ) */ hmax = rwork6; if ( hmax < 0. ) { qDebug( "lsoda -- hmax < 0." ); terminate( istate ); return; } hmxi = 0.; if ( hmax > 0 ) hmxi = 1. / hmax; hmin = rwork7; if ( hmin < 0. ) { qDebug( "lsoda -- hmin < 0." ); terminate( istate ); return; } } /* end else */ /* end iopt = 1 */ } /* end if ( *istate == 1 || *istate == 3 ) */ /* If *istate = 1, meth is initialized to 1. Also allocate memory for yh, wm, ewt, savf, acor, ipvt. */ if ( *istate == 1 ) { /* If memory were not freed, *istate = 3 need not reallocate memory. Hence this section is not executed by *istate = 3. */ sqrteta = sqrt( ETA ); meth = 1; nyh = n; lenyh = 1 + max( mxordn, mxords ); m_lenyh=lenyh; m_nyh=nyh; yh = ( double ** ) qMalloc( ( 1 + lenyh ) * sizeof( *yh ) ); if ( yh == NULL ) { qDebug( "lsoda -- insufficient memory for your problem" ); terminate( istate ); return; } for ( i = 1 ; i <= lenyh ; i++ ) yh[i] = ( double * ) qMalloc( ( 1 + nyh ) * sizeof( double ) ); wm = ( double ** ) qMalloc( ( 1 + nyh ) * sizeof( *wm ) ); if ( wm == NULL ) { qFree( yh ); qDebug( "lsoda -- insufficient memory for your problem" ); terminate( istate ); return; } for ( i = 1 ; i <= nyh ; i++ ) wm[i] = ( double * ) qMalloc( ( 1 + nyh ) * sizeof( double ) ); ewt = ( double * ) qMalloc( ( 1 + nyh ) * sizeof( double ) ); if ( ewt == NULL ) { qFree( yh ); qFree( wm ); qDebug( "lsoda -- insufficient memory for your problem" ); terminate( istate ); return; } savf = ( double * ) qMalloc( ( 1 + nyh ) * sizeof( double ) ); if ( savf == NULL ) { qFree( yh ); qFree( wm ); qFree( ewt ); qDebug( "lsoda -- insufficient memory for your problem" ); terminate( istate ); return; } acor = ( double * ) qMalloc( ( 1 + nyh ) * sizeof( double ) ); if ( acor == NULL ) { qFree( yh ); qFree( wm ); qFree( ewt ); qFree( savf ); qDebug( "lsoda -- insufficient memory for your problem" ); terminate( istate ); return; } ipvt = ( int * ) qMalloc( ( 1 + nyh ) * sizeof( int ) ); if ( ipvt == NULL ) { qFree( yh ); qFree( wm ); qFree( ewt ); qFree( savf ); qFree( acor ); qDebug( "lsoda -- insufficient memory for your problem" ); terminate( istate ); return; } } /* Check rtol and atol for legality. */ if ( *istate ==1 || *istate == 3 ) { rtoli = rtol[1]; atoli = atol[1]; for ( i = 1 ; i <= n ; i++ ) { if ( itol >= 3 ) rtoli = rtol[i]; if ( itol == 2 || itol == 4 ) atoli = atol[i]; if ( rtoli < 0. ) { qDebug( "lsoda -- rtol = %g is less than 0.", rtoli ); terminate( istate ); freevectors(); return; } if ( atoli < 0. ) { qDebug( "lsoda -- atol = %g is less than 0.", atoli ); terminate( istate ); freevectors(); return; } } /* end for */ } /* end if ( *istate == 1 || *istate == 3 ) */ /* If *istate = 3, set flag to signal parameter changes to stoda. */ if ( *istate == 3 ) { jstart = -1; } /* Block c. The next block is for the initial call only ( *istate = 1 ). It contains all remaining initializations, the initial call to f, and the calculation of the initial step size. The error weights in ewt are inverted after being loaded. */ int tcrit(0); if ( *istate == 1 ) { tn = *t; tsw = *t; maxord = mxordn; if ( itask == 4 || itask == 5 ) { tcrit = rwork1; if ( ( tcrit - tout ) * ( tout - *t ) < 0. ) { qDebug( "lsoda -- itask = 4 or 5 and tcrit behind tout" ); terminate( istate ); freevectors(); return; } if ( h0 != 0. && ( *t + h0 - tcrit ) * h0 > 0. ) h0 = tcrit - *t; } jstart = 0; nhnil = 0; nst = 0; nje = 0; nslast = 0; hu = 0.; nqu = 0; mused = 0; miter = 0; ccmax = 0.3; maxcor = 3; msbp = 20; mxncf = 10; /* Initial call to f. */ f( neq, *t, y, yh[2] ); nfe = 1; /* Load the initial value vector in yh. */ yp1 = yh[1]; for ( i = 1 ; i <= n ; i++) yp1[i] = y[i]; /* Load and invert the ewt array. ( h is temporarily set to 1. ) */ nq = 1; h = 1.; ewset( itol, rtol, atol, y ); for ( i = 1 ; i <= n ; i++ ) { if ( ewt[i] <= 0. ) { qDebug( "lsoda -- ewt[%d] = %g <= 0.", i, ewt[i] ); // ECB Comment out because wrong number of arguments. // terminate( y, yh, t, tn ); return; } ewt[i] = 1. / ewt[i]; } /* The coding below computes the step size, h0, to be attempted on the first step, unless the user has supplied a value for this. First check that tout - *t differs significantly from zero. A scalar tolerance quantity tol is computed, as max(rtol[i]) if this is positive, or max(atol[i]/fabs(y[i])) otherwise, adjusted so as to be between 100*ETA and 0.001. Then the computed value h0 is given by h0^(-2) = 1. / ( tol * w0^2 ) + tol * ( norm(f) )^2 where w0 = max( fabs(*t), fabs(tout) ), f = the initial value of the vector f(t,y), and norm() = the weighted vector norm used throughout, given by the vmnorm function routine, and weighted by the tolerances initially loaded into the ewt array. The sign of h0 is inferred from the initial values of tout and *t. fabs(h0) is made < fabs(tout-*t) in any case. */ if ( h0 == 0. ) { tdist = fabs( tout - *t ); w0 = max( fabs( *t ), fabs( tout ) ); if ( tdist < 2. * ETA * w0 ) { qDebug( "lsoda -- tout too close to t to start integration "); terminate( istate ); freevectors(); return; } tol = rtol[1]; if ( itol > 2 ) { for ( i = 2 ; i <= n ; i++ ) tol = max( tol, rtol[i] ); } if ( tol <= 0. ) { atoli = atol[1]; for ( i = 1 ; i <= n ; i++ ) { if ( itol == 2 || itol == 4 ) atoli = atol[i]; ayi = fabs( y[i] ); if ( ayi != 0. ) tol = max( tol, atoli / ayi ); } } tol = max( tol, 100. * ETA ); tol = min( tol, 0.001 ); sum = vmnorm( n, yh[2], ewt ); sum = 1. / ( tol * w0 * w0 ) + tol * sum * sum; h0 = 1. / sqrt( sum ); h0 = min( h0, tdist ); h0 = h0 * ( ( tout - *t >= 0. ) ? 1. : -1. ); } /* end if ( h0 == 0. ) */ /* Adjust h0 if necessary to meet hmax bound. */ rh = fabs( h0 ) * hmxi; if ( rh > 1. ) h0 /= rh; /* Load h with h0 and scale yh[2] by h0. */ h = h0; yp1 = yh[2]; for ( i = 1 ; i <= n ; i++ ) yp1[i] *= h0; } /* if ( *istate == 1 ) */ /* Block d. The next code block is for continuation calls only ( *istate = 2 or 3 ) and is to check stop conditions before taking a step. */ int ihit(0); if ( *istate == 2 || *istate == 3 ) { nslast = nst; switch ( itask ) { case 1 : if ( ( tn - tout ) * h >= 0. ) { intdy( tout, 0, y, &iflag ); if ( iflag != 0 ) { qDebug( "lsoda -- trouble from intdy, itask = %d, tout = %g", itask, tout ); terminate( istate ); freevectors(); return; } *t = tout; *istate = 2; illin = 0; freevectors(); return; } break; case 2 : break; case 3 : tp = tn - hu * ( 1. + 100. * ETA ); if ( ( tp - tout ) * h > 0. ) { qDebug( "lsoda -- itask = %d and tout behind tcur - hu", itask ); terminate( istate ); freevectors(); return; } if ( ( tn - tout ) * h < 0. ) break; successreturn( y, t, itask, ihit, tcrit, istate ); return; case 4 : tcrit = rwork1; if ( ( tn - tcrit ) * h > 0. ) { qDebug( "lsoda -- itask = 4 or 5 and tcrit behind tcur" ); terminate( istate ); freevectors(); return; } if ( ( tcrit - tout ) * h < 0. ) { qDebug( "lsoda -- itask = 4 or 5 and tcrit behind tout" ); terminate( istate ); freevectors(); return; } if ( ( tn - tout ) * h >= 0. ) { intdy( tout, 0, y, &iflag ); if ( iflag != 0 ) { qDebug( "lsoda -- trouble from intdy, itask = %d, tout = %g", itask, tout ); terminate( istate ); freevectors(); return; } *t = tout; *istate = 2; illin = 0; freevectors(); return; } case 5 : if ( itask == 5 ) { tcrit = rwork1; if ( ( tn - tcrit ) * h > 0. ) { qDebug( "lsoda -- itask = 4 or 5 and tcrit behind tcur" ); terminate( istate ); freevectors(); return; } } hmx = fabs( tn ) + fabs( h ); ihit = fabs( tn - tcrit ) <= ( 100. * ETA * hmx ); if ( ihit ) { *t = tcrit; successreturn( y, t, itask, ihit, tcrit, istate ); return; } tnext = tn + h * ( 1. + 4. * ETA ); if ( ( tnext - tcrit ) * h <= 0. ) break; h = ( tcrit - tn ) * ( 1. - 4. * ETA ); if ( *istate == 2 ) jstart = -2; break; } /* end switch */ } /* end if ( *istate == 2 || *istate == 3 ) */ /* Block e. The next block is normally executed for all calls and contains the call to the one-step core integrator stoda. This is a looping point for the integration steps. First check for too many steps being taken, update ewt ( if not at start of problem). Check for too much accuracy being requested, and check for h below the roundoff level in *t. */ while ( 1 ) { if ( *istate != 1 || nst != 0 ) { if ( ( nst - nslast ) >= mxstep ) { // qDebug( "lsoda -- %d steps taken before reaching tout", mxstep ); *istate = -1; terminate2( y, t ); return; } ewset( itol, rtol, atol, yh[1] ); for ( i = 1 ; i <= n ; i++ ) { if ( ewt[i] <= 0. ) { qDebug( "lsoda -- ewt[%d] = %g <= 0.", i, ewt[i] ); *istate = -6; terminate2( y, t ); return; } ewt[i] = 1. / ewt[i]; } } tolsf = ETA * vmnorm( n, yh[1], ewt ); if ( tolsf > 0.01 ) { tolsf = tolsf * 200.; if ( nst == 0 ) { qDebug( "lsoda -- at start of problem, too much accuracy" ); qDebug( " requested for precision of machine," ); qDebug( " suggested scaling factor = %g", tolsf ); terminate( istate ); freevectors(); return; } qDebug( "lsoda -- at t = %g, too much accuracy requested", *t ); qDebug( " for precision of machine, suggested" ); qDebug( " scaling factor = %g", tolsf ); *istate = -2; terminate2( y, t ); return; } if ( ( tn + h ) == tn ) { nhnil++; if ( nhnil <= mxhnil ) { qDebug( "lsoda -- warning..internal t = %g and h = %g are", tn, h ); qDebug( " such that in the machine, t + h = t on the next step" ); qDebug( " solver will continue anyway." ); if ( nhnil == mxhnil ) { qDebug( "lsoda -- above warning has been issued %d times,", nhnil ); qDebug( " it will not be issued again for this problem" ); } } } /* Call stoda */ stoda( neq, y); /* qDebug( "meth= %d, order= %d, nfe= %d, nje= %d", meth, nq, nfe, nje ); qDebug( "t= %20.15e, h= %20.15e, nst=%d", tn, h, nst ); qDebug( "y= %20.15e, %20.15e, %20.15e", yh[1][1], yh[1][2], yh[1][3] ); */ if ( kflag == 0 ) { /* Block f. The following block handles the case of a successful return from the core integrator ( kflag = 0 ). If a method switch was just made, record tsw, reset maxord, set jstart to -1 to signal stoda to complete the switch, and do extra printing of data if ixpr = 1. Then, in any case, check for stop conditions. */ init = 1; if ( meth != mused ) { tsw = tn; maxord = mxordn; if ( meth == 2 ) maxord = mxords; jstart = -1; if ( ixpr ) { if ( meth == 2 ) qDebug() << "lsoda -- a switch to the stiff method has occurred"; if ( meth == 1 ) qDebug() << "lsoda -- a switch to the nonstiff method has occurred"; qDebug() << " at t = "<< tn << ", tentative step size h = " << h << ", step nst = " << nst; } } /* end if ( meth != mused ) */ /* itask = 1. If tout has been reached, interpolate. */ if ( itask == 1 ) { if ( ( tn - tout ) * h < 0. ) continue; intdy( tout, 0, y, &iflag ); *t = tout; *istate = 2; illin = 0; freevectors(); return; } /* itask = 2. */ if ( itask == 2 ) { successreturn( y, t, itask, ihit, tcrit, istate ); return; } /* itask = 3. Jump to exit if tout was reached. */ if ( itask == 3 ) { if ( ( tn - tout ) * h >= 0. ) { successreturn( y, t, itask, ihit, tcrit, istate ); return; } continue; } /* itask = 4. See if tout or tcrit was reached. Adjust h if necessary. */ if ( itask == 4 ) { if ( ( tn - tout ) * h >= 0. ) { intdy( tout, 0, y, &iflag ); *t = tout; *istate = 2; illin = 0; freevectors(); return; } else { hmx = fabs( tn ) + fabs( h ); ihit = fabs( tn - tcrit ) <= ( 100. * ETA * hmx ); if ( ihit ) { successreturn( y, t, itask, ihit, tcrit, istate ); return; } tnext = tn + h * ( 1. + 4. * ETA ); if ( ( tnext - tcrit ) * h <= 0. ) continue; h = ( tcrit - tn ) * ( 1. - 4. * ETA ); jstart = -2; continue; } } /* end if ( itask == 4 ) */ /* itask = 5. See if tcrit was reached and jump to exit. */ if ( itask == 5 ) { hmx = fabs( tn ) + fabs( h ); ihit = fabs( tn - tcrit ) <= ( 100. * ETA * hmx ); successreturn( y, t, itask, ihit, tcrit, istate ); return; } } /* end if ( kflag == 0 ) */ /* kflag = -1, error test failed repeatedly or with fabs(h) = hmin. kflag = -2, convergence failed repeatedly or with fabs(h) = hmin. */ if ( kflag == -1 || kflag == -2 ) { qDebug( "lsoda -- at t = %g and step size h = %g, the", tn, h ); if ( kflag == -1 ) { qDebug( " error test failed repeatedly or" ); qDebug( " with fabs(h) = hmin" ); *istate = -4; } if ( kflag == -2 ) { qDebug( " corrector convergence failed repeatedly or" ); qDebug( " with fabs(h) = hmin" ); *istate = -5; } big = 0.; imxer = 1; for ( i = 1 ; i <= n ; i++ ) { size = fabs( acor[i] ) * ewt[i]; if ( big < size ) { big = size; imxer = i; } } terminate2( y, t ); return; } /* end if ( kflag == -1 || kflag == -2 ) */ } /* end while */ } /* end lsoda */ void QTAIMLSODAIntegrator::stoda( int neq, double *y ) { int corflag, orderflag; int i, i1, j, m, ncf; double del, delp, dup, exup, r, rh, rhup, told; double pdh, pnorm; /* stoda performs one step of the integration of an initial value problem for a system of ordinary differential equations. Note.. stoda is independent of the value of the iteration method indicator miter, when this is != 0, and hence is independent of the type of chord method used, or the Jacobian structure. Communication with stoda is done with the following variables: jstart = an integer used for input only, with the following values and meanings: 0 perform the first step, > 0 take a new step continuing from the last, -1 take the next step with a new value of h, n, meth, miter, and/or matrix parameters. -2 take the next step with a new value of h, but with other inputs unchanged. kflag = a completion code with the following meanings: 0 the step was successful, -1 the requested error could not be achieved, -2 corrector convergence could not be achieved, -3 fatal error in prja or solsy. miter = corrector iteration method: 0 functional iteration, >0 a chord method corresponding to jacobian type jt. */ kflag = 0; told = tn; ncf = 0; ierpj = 0; iersl = 0; jcur = 0; delp = 0.; /* On the first call, the order is set to 1, and other variables are initialized. rmax is the maximum ratio by which h can be increased in a single step. It is initially 1.e4 to compensate for the small initial h, but then is normally equal to 10. If a filure occurs (in corrector convergence or error test), rmax is set at 2 for the next increase. cfode is called to get the needed coefficients for both methods. */ if ( jstart == 0 ) { lmax = maxord + 1; nq = 1; l = 2; ialth = 2; rmax = 10000.; rc = 0.; el0 = 1.; crate = 0.7; hold = h; nslp = 0; ipup = miter; /* Initialize switching parameters. meth = 1 is assumed initially. */ icount = 20; irflag = 0; pdest = 0.; pdlast = 0.; ratio = 5.; cfode( 2 ); for ( i = 1 ; i <= 5 ; i++ ) cm2[i] = tesco[i][2] * elco[i][i+1]; cfode( 1 ); for ( i = 1 ; i <= 12 ; i++ ) cm1[i] = tesco[i][2] * elco[i][i+1]; resetcoeff(); } /* end if ( jstart == 0 ) */ /* The following block handles preliminaries needed when jstart = -1. ipup is set to miter to force a matrix update. If an order increase is about to be considered ( ialth = 1 ), ialth is reset to 2 to postpone consideration one more step. If the caller has changed meth, cfode is called to reset the coefficients of the method. If h is to be changed, yh must be rescaled. If h or meth is being changed, ialth is reset to l = nq + 1 to prevent further changes in h for that many steps. */ if ( jstart == -1 ) { ipup = miter; lmax = maxord + 1; if ( ialth == 1 ) ialth = 2; if ( meth != mused ) { cfode( meth ); ialth = l; resetcoeff(); } if ( h != hold ) { rh = h / hold; h = hold; scaleh( &rh, &pdh ); } } /* if ( jstart == -1 ) */ if ( jstart == -2 ) { if ( h != hold ) { rh = h / hold; h = hold; scaleh( &rh, &pdh ); } } /* if ( jstart == -2 ) */ /* Prediction. This section computes the predicted values by effectively multiplying the yh array by the pascal triangle matrix. rc is the ratio of new to old values of the coefficient h * el[1]. When rc differs from 1 by more than ccmax, ipup is set to miter to force pjac to be called, if a jacobian is involved. In any case, prja is called at least every msbp steps. */ while ( 1 ) { while ( 1 ) { if ( fabs( rc - 1. ) > ccmax ) ipup = miter; if ( nst >= nslp + msbp ) ipup = miter; tn += h; for ( j = nq ; j >= 1 ; j-- ) for ( i1 = j ; i1 <= nq ; i1++ ) { yp1 = yh[i1]; yp2 = yh[i1+1]; for ( i = 1 ; i <= n ; i++ ) yp1[i] += yp2[i]; } pnorm = vmnorm( n, yh[1], ewt ); correction( neq, y, &corflag, pnorm, &del, &delp, &told, &ncf, &rh, &m ); if ( corflag == 0 ) break; if ( corflag == 1 ) { rh = max( rh, hmin / fabs( h ) ); scaleh( &rh, &pdh ); continue; } if ( corflag == 2 ) { kflag = -2; hold = h; jstart = 1; return; } } /* end inner while ( corrector loop ) */ /* The corrector has converged. jcur is set to 0 to signal that the Jacobian involved may need updating later. The local error test is done now. */ jcur = 0; double dsm(0.0); if ( m == 0 ) dsm = del / tesco[nq][2]; if ( m > 0 ) dsm = vmnorm( n, acor, ewt ) / tesco[nq][2]; if ( dsm <= 1. ) { /* After a successful step, update the yh array. Decrease icount by 1, and if it is -1, consider switching methods. If a method switch is made, reset various parameters, rescale the yh array, and exit. If there is no switch, consider changing h if ialth = 1. Otherwise decrease ialth by 1. If ialth is then 1 and nq < maxord, then acor is saved for use in a possible order increase on the next step. If a change in h is considered, an increase or decrease in order by one is considered also. A change in h is made only if it is by a factor of at least 1.1. If not, ialth is set to 3 to prevent testing for that many steps. */ kflag = 0; nst++; hu = h; nqu = nq; mused = meth; for ( j = 1 ; j <= l ; j++ ) { yp1 = yh[j]; r = el[j]; for ( i = 1 ; i <= n ; i++ ) yp1[i] += r * acor[i]; } icount--; if ( icount < 0 ) { methodswitch( dsm, pnorm, &pdh, &rh ); if ( meth != mused ) { rh = max( rh, hmin / fabs( h ) ); scaleh( &rh, &pdh ); rmax = 10.; endstoda(); break; } } /* No method switch is being made. Do the usual step/order selection. */ ialth--; if ( ialth == 0 ) { rhup = 0.; if ( l != lmax ) { yp1 = yh[lmax]; for ( i = 1 ; i <= n ; i++ ) savf[i] = acor[i] - yp1[i]; dup = vmnorm( n, savf, ewt ) / tesco[nq][3]; exup = 1. / ( double ) ( l + 1 ); rhup = 1. / ( 1.4 * pow( dup, exup ) + 0.0000014 ); } orderswitch( &rhup, dsm, &pdh, &rh, &orderflag ); /* No change in h or nq. */ if ( orderflag == 0 ) { endstoda(); break; } /* h is changed, but not nq. */ if ( orderflag == 1 ) { rh = max( rh, hmin / fabs( h ) ); scaleh( &rh, &pdh ); rmax = 10.; endstoda(); break; } /* both nq and h are changed. */ if ( orderflag == 2 ) { resetcoeff(); rh = max( rh, hmin / fabs( h ) ); scaleh( &rh, &pdh ); rmax = 10.; endstoda(); break; } } /* end if ( ialth == 0 ) */ if ( ialth > 1 || l == lmax ) { endstoda(); break; } yp1 = yh[lmax]; for ( i = 1 ; i <= n ; i++ ) yp1[i] = acor[i]; endstoda(); break; } /* end if ( dsm <= 1. ) */ /* The error test failed. kflag keeps track of multiple failures. Restore tn and the yh array to their previous values, and prepare to try the step again. Compute the optimum step size for this or one lower. After 2 or more failures, h is forced to decrease by a factor of 0.2 or less. */ else { kflag--; tn = told; for ( j = nq ; j >= 1 ; j-- ) for ( i1 = j ; i1 <= nq ; i1++ ) { yp1 = yh[i1]; yp2 = yh[i1+1]; for ( i = 1 ; i <= n ; i++ ) yp1[i] -= yp2[i]; } rmax = 2.; if ( fabs( h ) <= hmin * 1.00001 ) { kflag = -1; hold = h; jstart = 1; break; } if ( kflag > -3 ) { rhup = 0.; orderswitch( &rhup, dsm, &pdh, &rh, &orderflag ); if ( orderflag == 1 || orderflag == 0 ) { if ( orderflag == 0 ) rh = min( rh, 0.2 ); rh = max( rh, hmin / fabs( h ) ); scaleh( &rh, &pdh ); } if ( orderflag == 2 ) { resetcoeff(); rh = max( rh, hmin / fabs( h ) ); scaleh( &rh, &pdh ); } continue; } /* if ( kflag > -3 ) */ /* Control reaches this section if 3 or more failures have occurred. If 10 failures have occurred, exit with kflag = -1. It is assumed that the derivatives that have accumulated in the yh array have errors of the wrong order. Hence the first derivative is recomputed, and the order is set to 1. Then h is reduced by a factor of 10, and the step is retried, until it succeeds or h reaches hmin. */ else { if ( kflag == -10 ) { kflag = -1; hold = h; jstart = 1; break; } else { rh = 0.1; rh = max( hmin / fabs( h ) , rh ); h *= rh; yp1 = yh[1]; for ( i = 1 ; i <= n ; i++ ) y[i] = yp1[i]; f( neq, tn, y, savf ); nfe++; yp1 = yh[2]; for ( i = 1 ; i <= n ; i++ ) yp1[i] = h * savf[i]; ipup = miter; ialth = 5; if ( nq == 1 ) continue; nq = 1; l = 2; resetcoeff(); continue; } } /* end else -- kflag <= -3 */ } /* end error failure handling */ } /* end outer while */ } /* end stoda */ void QTAIMLSODAIntegrator::ewset( int itol, double *rtol, double *atol, double *ycur ) { int i; switch ( itol ) { case 1 : for ( i = 1 ; i <= n ; i++ ) ewt[i] = rtol[1] * fabs( ycur[i] ) + atol[1]; break; case 2 : for ( i = 1 ; i <= n ; i++ ) ewt[i] = rtol[1] * fabs( ycur[i] ) + atol[i]; break; case 3 : for ( i = 1 ; i <= n ; i++ ) ewt[i] = rtol[i] * fabs( ycur[i] ) + atol[1]; break; case 4 : for ( i = 1 ; i <= n ; i++ ) ewt[i] = rtol[i] * fabs( ycur[i] ) + atol[i]; break; } } /* end ewset */ void QTAIMLSODAIntegrator::intdy( double t, int k, double *dky, int *iflag ) /* Intdy computes interpolated values of the k-th derivative of the dependent variable vector y, and stores it in dky. This routine is called within the package with k = 0 and *t = tout, but may also be called by the user for any k up to the current order. ( See detailed instructions in the usage documentation. ) The computed values in dky are gotten by interpolation using the Nordsieck history array yh. This array corresponds uniquely to a vector-valued polynomial of degree nqcur or less, and dky is set to the k-th derivative of this polynomial at t. The formula for dky is q dky[i] = sum c[k][j] * ( t - tn )^(j-k) * h^(-j) * yh[j+1][i] j=k where c[k][j] = j*(j-1)*...*(j-k+1), q = nqcur, tn = tcur, h = hcur. The quantities nq = nqcur, l = nq+1, n = neq, tn, and h are declared static globally. The above sum is done in reverse order. *iflag is returned negative if either k or t is out of bounds. */ { int i, ic, j, jj, jp1; double c, r, s, tp; *iflag = 0; if ( k < 0 || k > nq ) { qDebug( "intdy -- k = %d illegal", k ); *iflag = -1; return; } tp = tn - hu - 100. * ETA * ( tn + hu ); if ( ( t - tp ) * ( t - tn ) > 0. ) { qDebug( "intdy -- t = %g illegal", t ); qDebug( " t not in interval tcur - hu to tcur" ); *iflag = -2; return; } s = ( t - tn ) / h; ic = 1; for ( jj = l - k ; jj <= nq ; jj++ ) ic *= jj; c = ( double ) ic; yp1 = yh[l]; for ( i = 1 ; i <= n ; i++ ) dky[i] = c * yp1[i]; for ( j = nq - 1 ; j >= k ; j-- ) { jp1 = j + 1; ic = 1; for ( jj = jp1 - k ; jj <= j ; jj++ ) ic *= jj; c = ( double ) ic; yp1 = yh[jp1]; for ( i = 1 ; i <= n ; i++ ) dky[i] = c * yp1[i] + s * dky[i]; } if ( k == 0 ) return; r = pow( h, ( double ) ( -k ) ); for ( i = 1 ; i <= n ; i++ ) dky[i] *= r; } /* end intdy */ void QTAIMLSODAIntegrator::cfode( int meth ) { int i, nq, nqm1, nqp1; double agamq, fnq, fnqm1, pc[13], pint, ragq, rqfac, rq1fac, tsign, xpin; /* cfode is called by the integrator routine to set coefficients needed there. The coefficients for the current method, as given by the value of meth, are set for all orders and saved. The maximum order assumed here is 12 if meth = 1 and 5 if meth = 2. ( A smaller value of the maximum order is also allowed. ) cfode is called once at the beginning of the problem, and is not called again unless and until meth is changed. The elco array contains the basic method coefficients. The coefficients el[i], 1 < i < nq+1, for the method of order nq are stored in elco[nq][i]. They are given by a generating polynomial, i.e., l(x) = el[1] + el[2]*x + ... + el[nq+1]*x^nq. For the implicit Adams method, l(x) is given by dl/dx = (x+1)*(x+2)*...*(x+nq-1)/factorial(nq-1), l(-1) = 0. For the bdf methods, l(x) is given by l(x) = (x+1)*(x+2)*...*(x+nq)/k, where k = factorial(nq)*(1+1/2+...+1/nq). The tesco array contains test constants used for the local error test and the selection of step size and/or order. At order nq, tesco[nq][k] is used for the selection of step size at order nq-1 if k = 1, at order nq if k = 2, and at order nq+1 if k = 3. */ if ( meth == 1 ) { elco[1][1] = 1.; elco[1][2] = 1.; tesco[1][1] = 0.; tesco[1][2] = 2.; tesco[2][1] = 1.; tesco[12][3] = 0.; pc[1] = 1.; rqfac = 1.; for ( nq = 2 ; nq <= 12 ; nq++ ) { /* The pc array will contain the coefficients of the polynomial p(x) = (x+1)*(x+2)*...*(x+nq-1). Initially, p(x) = 1. */ rq1fac = rqfac; rqfac = rqfac / ( double ) nq; nqm1 = nq - 1; fnqm1 = ( double ) nqm1; nqp1 = nq + 1; /* Form coefficients of p(x)*(x+nq-1). */ pc[nq] = 0.; for ( i = nq ; i >= 2 ; i-- ) pc[i] = pc[i-1] + fnqm1 * pc[i]; pc[1] = fnqm1 * pc[1]; /* Compute integral, -1 to 0, of p(x) and x*p(x). */ pint = pc[1]; xpin = pc[1] / 2.; tsign = 1.; for ( i = 2 ; i <= nq ; i++ ) { tsign = -tsign; pint += tsign * pc[i] / ( double ) i; xpin += tsign * pc[i] / ( double ) ( i + 1 ); } /* Store coefficients in elco and tesco. */ elco[nq][1] = pint * rq1fac; elco[nq][2] = 1.; for ( i = 2 ; i <= nq ; i++ ) elco[nq][i+1] = rq1fac * pc[i] / ( double ) i; agamq = rqfac * xpin; ragq = 1. / agamq; tesco[nq][2] = ragq; if ( nq < 12 ) tesco[nqp1][1] = ragq * rqfac / ( double ) nqp1; tesco[nqm1][3] = ragq; } /* end for */ return; } /* end if ( meth == 1 ) */ /* meth = 2. */ pc[1] = 1.; rq1fac = 1.; /* The pc array will contain the coefficients of the polynomial p(x) = (x+1)*(x+2)*...*(x+nq). Initially, p(x) = 1. */ for ( nq = 1 ; nq <= 5 ; nq++ ) { fnq = ( double ) nq; nqp1 = nq + 1; /* Form coefficients of p(x)*(x+nq). */ pc[nqp1] = 0.; for ( i = nq + 1 ; i >= 2 ; i-- ) pc[i] = pc[i-1] + fnq * pc[i]; pc[1] *= fnq; /* Store coefficients in elco and tesco. */ for ( i = 1 ; i <= nqp1 ; i++ ) elco[nq][i] = pc[i] / pc[2]; elco[nq][2] = 1.; tesco[nq][1] = rq1fac; tesco[nq][2] = ( ( double ) nqp1 ) / elco[nq][1]; tesco[nq][3] = ( ( double ) ( nq + 2 ) ) / elco[nq][1]; rq1fac /= fnq; } return; } /* end cfode */ void QTAIMLSODAIntegrator::scaleh( double *rh, double *pdh ) { double r; int j, i; /* If h is being changed, the h ratio rh is checked against rmax, hmin, and hmxi, and the yh array is rescaled. ialth is set to l = nq + 1 to prevent a change of h for that many steps, unless forced by a convergence or error test failure. */ *rh = min( *rh, rmax ); *rh = *rh / max( 1., fabs( h ) * hmxi * *rh ); /* If meth = 1, also restrict the new step size by the stability region. If this reduces h, set irflag to 1 so that if there are roundoff problems later, we can assume that is the cause of the trouble. */ if ( meth == 1 ) { irflag = 0; *pdh = max( fabs( h ) * pdlast, 0.000001 ); if ( ( *rh * *pdh * 1.00001 ) >= sm1[nq] ) { *rh = sm1[nq] / *pdh; irflag = 1; } } r = 1.; for ( j = 2 ; j <= l ; j++ ) { r *= *rh; yp1 = yh[j]; for ( i = 1 ; i <= n ; i++ ) yp1[i] *= r; } h *= *rh; rc *= *rh; ialth = l; } /* end scaleh */ void QTAIMLSODAIntegrator::prja( int neq, double *y ) { int i, ier, j; double fac, hl0, r, r0, yj; /* prja is called by stoda to compute and process the matrix P = I - h * el[1] * J, where J is an approximation to the Jacobian. Here J is computed by finite differencing. J, scaled by -h * el[1], is stored in wm. Then the norm of J ( the matrix norm consistent with the weighted max-norm on vectors given by vmnorm ) is computed, and J is overwritten by P. P is then subjected to LU decomposition in preparation for later solution of linear systems with p as coefficient matrix. This is done by dgefa if miter = 2, and by dgbfa if miter = 5. */ nje++; ierpj = 0; jcur = 1; hl0 = h * el0; /* If miter = 2, make n calls to f to approximate J. */ if ( miter != 2 ) { qDebug( "prja -- miter != 2" ); return; } if ( miter == 2 ) { fac = vmnorm( n, savf, ewt ); r0 = 1000. * fabs( h ) * ETA * ( ( double ) n ) * fac; if ( r0 == 0. ) r0 = 1.; for ( j = 1 ; j <= n ; j++ ) { yj = y[j]; r = max( sqrteta * fabs( yj ), r0 / ewt[j] ); y[j] += r; fac = -hl0 / r; f( neq, tn, y, acor ); for ( i = 1 ; i <= n ; i++ ) wm[i][j] = ( acor[i] - savf[i] ) * fac; y[j] = yj; } nfe += n; /* Compute norm of Jacobian. */ pdnorm = fnorm( n, wm, ewt ) / fabs( hl0 ); /* Add identity matrix. */ for ( i = 1 ; i <= n ; i++ ) wm[i][i] += 1.; /* Do LU decomposition on P. */ dgefa( wm, n, ipvt, &ier ); if ( ier != 0 ) ierpj = 1; return; } } /* end prja */ double QTAIMLSODAIntegrator::vmnorm( int n, double *v, double *w ) /* This function routine computes the weighted max-norm of the vector of length n contained in the array v, with weights contained in the array w of length n. vmnorm = max( i = 1, ..., n ) fabs( v[i] ) * w[i]. */ { int i; double vm; vm = 0.; for ( i = 1 ; i <= n ; i++ ) vm = max( vm, fabs( v[i] ) * w[i] ); return vm; } /* end vmnorm */ double QTAIMLSODAIntegrator::fnorm( int n, double **a, double *w ) /* This subroutine computes the norm of a full n by n matrix, stored in the array a, that is consistent with the weighted max-norm on vectors, with weights stored in the array w. fnorm = max(i=1,...,n) ( w[i] * sum(j=1,...,n) fabs( a[i][j] ) / w[j] ) */ { int i, j; double an, sum, *ap1; an = 0.; for ( i = 1; i <= n ; i++ ) { sum = 0.; ap1 = a[i]; for ( j = 1 ; j <= n ; j++ ) sum += fabs( ap1[j] ) / w[j]; an = max( an, sum * w[i] ); } return an; } /* end fnorm */ // double QTAIMLSODAIntegrator::bnorm() // { // } /* end bnorm */ void QTAIMLSODAIntegrator::correction( int neq, double *y, int *corflag, double pnorm, double *del, double *delp, double *told, int *ncf, double *rh, int *m ) /* *corflag = 0 : corrector converged, 1 : step size to be reduced, redo prediction, 2 : corrector cannot converge, failure flag. */ { int i; double rm, rate, dcon; /* Up to maxcor corrector iterations are taken. A convergence test is made on the r.m.s. norm of each correction, weighted by the error weight vector ewt. The sum of the corrections is accumulated in the vector acor[i]. The yh array is not altered in the corrector loop. */ *m = 0; *corflag = 0; rate = 0.; *del = 0.; yp1 = yh[1]; for ( i = 1 ; i <= n ; i++ ) y[i] = yp1[i]; f( neq, tn, y, savf ); nfe++; /* If indicated, the matrix P = I - h * el[1] * J is reevaluated and preprocessed before starting the corrector iteration. ipup is set to 0 as an indicator that this has been done. */ while ( 1 ) { if ( *m == 0 ) { if ( ipup > 0 ) { prja( neq, y ); ipup = 0; rc = 1.; nslp = nst; crate = 0.7; if ( ierpj != 0 ) { corfailure( told, rh, ncf, corflag ); return; } } for ( i = 1 ; i <= n ; i++ ) acor[i] = 0.; } /* end if ( *m == 0 ) */ if ( miter == 0 ) { /* In case of functional iteration, update y directly from the result of the last function evaluation. */ yp1 = yh[2]; for ( i = 1 ; i <= n ; i++ ) { savf[i] = h * savf[i] - yp1[i]; y[i] = savf[i] - acor[i]; } *del = vmnorm( n, y, ewt ); yp1 = yh[1]; for ( i = 1 ; i <= n ; i++ ) { y[i] = yp1[i] + el[1] * savf[i]; acor[i] = savf[i]; } } /* end functional iteration */ /* In the case of the chord method, compute the corrector error, and solve the linear system with that as right-hand side and P as coefficient matrix. */ else { yp1 = yh[2]; for ( i = 1 ; i <= n ; i++ ) y[i] = h * savf[i] - ( yp1[i] + acor[i] ); solsy( y ); *del = vmnorm( n, y, ewt ); yp1 = yh[1]; for ( i = 1 ; i <= n ; i++ ) { acor[i] += y[i]; y[i] = yp1[i] + el[1] * acor[i]; } } /* end chord method */ /* Test for convergence. If *m > 0, an estimate of the convergence rate constant is stored in crate, and this is used in the test. We first check for a change of iterates that is the size of roundoff error. If this occurs, the iteration has converged, and a new rate estimate is not formed. In all other cases, force at least two iterations to estimate a local Lipschitz constant estimate for Adams method. On convergence, form pdest = local maximum Lipschitz constant estimate. pdlast is the most recent nonzero estimate. */ if ( *del <= 100. * pnorm * ETA ) break; if ( *m != 0 || meth != 1 ) { if ( *m != 0 ) { rm = 1024.0; if ( *del <= ( 1024. * *delp ) ) rm = *del / *delp; rate = max( rate, rm ); crate = max( 0.2 * crate, rm ); } dcon = *del * min( 1., 1.5 * crate ) / ( tesco[nq][2] * conit ); if ( dcon <= 1. ) { pdest = max( pdest, rate / fabs( h * el[1] ) ); if ( pdest != 0. ) pdlast = pdest; break; } } /* The corrector iteration failed to converge. If miter != 0 and the Jacobian is out of date, prja is called for the next try. Otherwise the yh array is retracted to its values before prediction, and h is reduced, if possible. If h cannot be reduced or mxncf failures have occured, exit with corflag = 2. */ (*m)++; if ( *m == maxcor || ( *m >= 2 && *del > 2. * *delp ) ) { if ( miter == 0 || jcur == 1 ) { corfailure( told, rh, ncf, corflag ); return; } ipup = miter; /* Restart corrector if Jacobian is recomputed. */ *m = 0; rate = 0.; *del = 0.; yp1 = yh[1]; for ( i = 1 ; i <= n ; i++ ) y[i] = yp1[i]; f( neq, tn, y, savf ); nfe++; } /* Iterate corrector. */ else { *delp = *del; f( neq, tn, y, savf ); nfe++; } } /* end while */ } /* end correction */ void QTAIMLSODAIntegrator::corfailure( double *told, double *rh, int *ncf, int *corflag ) { int j, i1, i; (*ncf)++; rmax = 2.; tn = *told; for ( j = nq ; j >= 1 ; j-- ) for ( i1 = j ; i1 <= nq ; i1++ ) { yp1 = yh[i1]; yp2 = yh[i1+1]; for ( i = 1 ; i <= n ; i++ ) yp1[i] -= yp2[i]; } if ( fabs( h ) <= hmin * 1.00001 || *ncf == mxncf ) { *corflag = 2; return; } *corflag = 1; *rh = 0.25; ipup = miter; } /* end corfailure */ void QTAIMLSODAIntegrator::solsy( double *y ) /* This routine manages the solution of the linear system arising from a chord iteration. It is called if miter != 0. If miter is 2, it calls dgesl to accomplish this. If miter is 5, it calls dgbsl. y = the right-hand side vector on input, and the solution vector on output. */ { iersl = 0; if ( miter != 2 ) { qDebug( "solsy -- miter != 2" ); return; } if ( miter == 2 ) dgesl( wm, n, ipvt, y, 0 ); return; } /* end solsy */ void QTAIMLSODAIntegrator::methodswitch( double dsm, double pnorm, double *pdh, double *rh ) { int lm1, lm1p1, lm2, lm2p1, nqm1, nqm2; double rh1, rh2, rh1it, exm2, dm2, exm1, dm1, alpha, exsm; /* We are current using an Adams method. Consider switching to bdf. If the current order is greater than 5, assume the problem is not stiff, and skip this section. If the Lipschitz constant and error estimate are not polluted by roundoff, perform the usual test. Otherwise, switch to the bdf methods if the last step was restricted to insure stability ( irflag = 1 ), and stay with Adams method if not. When switching to bdf with polluted error estimates, in the absence of other information, double the step size. When the estimates are ok, we make the usual test by computing the step size we could have (ideally) used on this step, with the current (Adams) method, and also that for the bdf. If nq > mxords, we consider changing to order mxords on switching. Compare the two step sizes to decide whether to switch. The step size advantage must be at least ratio = 5 to switch. */ if ( meth == 1 ) { if ( nq > 5 ) return; if ( dsm <= ( 100. * pnorm * ETA ) || pdest == 0. ) { if ( irflag == 0 ) return; rh2 = 2.; nqm2 = min( nq, mxords ); } else { exsm = 1. / ( double ) l; rh1 = 1. / ( 1.2 * pow( dsm, exsm ) + 0.0000012 ); rh1it = 2. * rh1; *pdh = pdlast * fabs( h ); if ( ( *pdh * rh1 ) > 0.00001 ) rh1it = sm1[nq] / *pdh; rh1 = min( rh1, rh1it ); if ( nq > mxords ) { nqm2 = mxords; lm2 = mxords + 1; exm2 = 1. / ( double ) lm2; lm2p1 = lm2 + 1; dm2 = vmnorm( n, yh[lm2p1], ewt ) / cm2[mxords]; rh2 = 1. / ( 1.2 * pow( dm2, exm2 ) + 0.0000012 ); } else { dm2 = dsm * ( cm1[nq] / cm2[nq] ); rh2 = 1. / ( 1.2 * pow( dm2, exsm ) + 0.0000012 ); nqm2 = nq; } if ( rh2 < ratio * rh1 ) return; } /* The method switch test passed. Reset relevant quantities for bdf. */ *rh = rh2; icount = 20; meth = 2; miter = jtyp; pdlast = 0.; nq = nqm2; l = nq + 1; return; } /* end if ( meth == 1 ) */ /* We are currently using a bdf method, considering switching to Adams. Compute the step size we could have (ideally) used on this step, with the current (bdf) method, and also that for the Adams. If nq > mxordn, we consider changing to order mxordn on switching. Compare the two step sizes to decide whether to switch. The step size advantage must be at least 5/ratio = 1 to switch. If the step size for Adams would be so small as to cause roundoff pollution, we stay with bdf. */ exsm = 1. / ( double ) l; if ( mxordn < nq ) { nqm1 = mxordn; lm1 = mxordn + 1; exm1 = 1. / ( double ) lm1; lm1p1 = lm1 + 1; dm1 = vmnorm( n, yh[lm1p1], ewt ) / cm1[mxordn]; rh1 = 1. / ( 1.2 * pow( dm1, exm1 ) + 0.0000012 ); } else { dm1 = dsm * ( cm2[nq] / cm1[nq] ); rh1 = 1. / ( 1.2 * pow( dm1, exsm ) + 0.0000012 ); nqm1 = nq; exm1 = exsm; } rh1it = 2. * rh1; *pdh = pdnorm * fabs( h ); if ( ( *pdh * rh1 ) > 0.00001 ) rh1it = sm1[nqm1] / *pdh; rh1 = min( rh1, rh1it ); rh2 = 1. / ( 1.2 * pow( dsm, exsm ) + 0.0000012 ); if ( ( rh1 * ratio ) < ( 5. * rh2 ) ) return; alpha = max( 0.001, rh1 ); dm1 *= pow( alpha, exm1 ); if ( dm1 <= 1000. * ETA * pnorm ) return; /* The switch test passed. Reset relevant quantities for Adams. */ *rh = rh1; icount = 20; meth = 1; miter = 0; pdlast = 0.; nq = nqm1; l = nq + 1; } /* end methodswitch */ /* This routine returns from stoda to lsoda. Hence freevectors() is not executed. */ void QTAIMLSODAIntegrator::endstoda() { double r; int i; r = 1. / tesco[nqu][2]; for ( i = 1 ; i <= n ; i++ ) acor[i] *= r; hold = h; jstart = 1; } /* end endstoda */ void QTAIMLSODAIntegrator::orderswitch( double *rhup, double dsm, double *pdh, double *rh, int *orderflag ) /* Regardless of the success or failure of the step, factors rhdn, rhsm, and rhup are computed, by which h could be multiplied at order nq - 1, order nq, or order nq + 1, respectively. In the case of a failure, rhup = 0. to avoid an order increase. The largest of these is determined and the new order chosen accordingly. If the order is to be increased, we compute one additional scaled derivative. orderflag = 0 : no change in h or nq, 1 : change in h but not nq, 2 : change in both h and nq. */ { int newq, i; double exsm, rhdn, rhsm, ddn, exdn, r; *orderflag = 0; exsm = 1. / ( double ) l; rhsm = 1. / ( 1.2 * pow( dsm, exsm ) + 0.0000012 ); rhdn = 0.; if ( nq != 1 ) { ddn = vmnorm( n, yh[l], ewt ) / tesco[nq][1]; exdn = 1. / ( double ) nq; rhdn = 1. / ( 1.3 * pow( ddn, exdn ) + 0.0000013 ); } /* If meth = 1, limit rh accordinfg to the stability region also. */ if ( meth == 1 ) { *pdh = max( fabs( h ) * pdlast, 0.000001 ); if ( l < lmax ) *rhup = min( *rhup, sm1[l] / *pdh ); rhsm = min( rhsm, sm1[nq] / *pdh ); if ( nq > 1 ) rhdn = min( rhdn, sm1[nq-1] / *pdh ); pdest = 0.; } if ( rhsm >= *rhup ) { if ( rhsm >= rhdn ) { newq = nq; *rh = rhsm; } else { newq = nq - 1; *rh = rhdn; if ( kflag < 0 && *rh > 1. ) *rh = 1.; } } else { if ( *rhup <= rhdn ) { newq = nq - 1; *rh = rhdn; if ( kflag < 0 && *rh > 1. ) *rh = 1.; } else { *rh = *rhup; if ( *rh >= 1.1 ) { r = el[l] / ( double ) l; nq = l; l = nq + 1; yp1 = yh[l]; for ( i = 1 ; i <= n ; i++ ) yp1[i] = acor[i] * r; *orderflag = 2; return; } else { ialth = 3; return; } } } /* If meth = 1 and h is restricted by stability, bypass 10 percent test. */ if ( meth == 1 ) { if ( ( *rh * *pdh * 1.00001 ) < sm1[newq] ) if ( kflag == 0 && *rh < 1.1 ) { ialth = 3; return; } } else { if ( kflag == 0 && *rh < 1.1 ) { ialth = 3; return; } } if ( kflag <= -2 ) *rh = min( *rh, 0.2 ); /* If there is a change of order, reset nq, l, and the coefficients. In any case h is reset according to rh and the yh array is rescaled. Then exit or redo the step. */ if ( newq == nq ) { *orderflag = 1; return; } nq = newq; l = nq + 1; *orderflag = 2; } /* end orderswitch */ void QTAIMLSODAIntegrator::resetcoeff() /* The el vector and related constants are reset whenever the order nq is changed, or at the start of the problem. */ { int i; double *ep1; ep1 = elco[nq]; for ( i = 1 ; i <= l ; i++ ) el[i] = ep1[i]; rc = rc * el[1] / el0; el0 = el[1]; conit = 0.5 / ( double ) ( nq + 2 ); } /* end resetcoeff */ void QTAIMLSODAIntegrator::freevectors() { int i; for( i=1; i<= m_lenyh ; ++i ) { qFree( yh[i] ); } qFree( yh ); for( i=1; i<= m_nyh ; ++i ) { qFree( wm[i] ); } qFree( wm ); qFree( ewt ); qFree( savf ); qFree( acor ); qFree( ipvt ); } /* end freevectors */ } // namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimcubature.h0000644000175000001440000001244312250371054024141 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ /* Based on */ /* Adaptive multidimensional integration of a vector of integrands. * * Copyright (c) 2005-2009 Steven G. Johnson * * Portions (see comments) based on HIntLib (also distributed under * the GNU GPL, v2 or later), copyright (c) 2002-2005 Rudolf Schuerer. * (http://www.cosy.sbg.ac.at/~rschuer/hintlib/) * * Portions (see comments) based on GNU GSL (also distributed under * the GNU GPL, v2 or later), copyright (c) 1996-2000 Brian Gough. * (http://www.gnu.org/software/gsl/) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef QTAIMCUBATURE_H #define QTAIMCUBATURE_H #include //#ifdef __cplusplus //extern "C" //{ //#endif /* __cplusplus */ /* USAGE: Call adapt_integrate with your function as described below. To compile a test program, compile cubature.c with -DTEST_INTEGRATOR as described at the end. */ /* a vector integrand - evaluates the function at the given point x (an array of length ndim) and returns the result in fval (an array of length fdim). The void* parameter is there in case you have to pass any additional data through to your function (it corresponds to the fdata parameter you pass to adapt_integrate). */ typedef void (*integrand) (unsigned int ndim, const double *x, void *, unsigned int fdim, double *fval); /* a vector integrand of a vector of npt points: x[i*ndim + j] is the j-th coordinate of the i-th point, and the k-th function evaluation for the i-th point is returned in fval[k*npt + i]. */ typedef void (*integrand_v) (unsigned int ndim, unsigned int npt, const double *x, void *, unsigned int fdim, double *fval); /* Integrate the function f from xmin[dim] to xmax[dim], with at most maxEval function evaluations (0 for no limit), until the given absolute or relative error is achieved. val returns the integral, and err returns the estimate for the absolute error in val; both of these are arrays of length fdim, the dimension of the vector integrand f(x). The return value of the function is 0 on success and non-zero if there was an error. */ int adapt_integrate(unsigned int fdim, integrand f, void *fdata, unsigned int dim, const double *xmin, const double *xmax, unsigned int maxEval, double reqAbsError, double reqRelError, double *val, double *err); /* as adapt_integrate, but vectorized integrand */ int adapt_integrate_v(unsigned int fdim, integrand_v f, void *fdata, unsigned int dim, const double *xmin, const double *xmax, unsigned int maxEval, double reqAbsError, double reqRelError, double *val, double *err); //#ifdef __cplusplus //} /* extern "C" */ //#endif /* __cplusplus */ #include "qtaimwavefunction.h" #include "qtaimwavefunctionevaluator.h" #include "qtaimcriticalpointlocator.h" #include "qtaimodeintegrator.h" #include "qtaimlsodaintegrator.h" #include "qtaimmathutilities.h" namespace Avogadro { class QTAIMCubature { public: enum { ElectronDensity=0, ElectronDensityLaplacian=1 }; explicit QTAIMCubature(QTAIMWavefunction &wfn); ~QTAIMCubature(); QList > integrate(qint64 mode, QList basins ); void setMode(qint64 mode); private: QTAIMWavefunction *m_wfn; qint64 m_mode; QList m_basins; QString m_temporaryFileName; QString temporaryFileName(); QList m_ncpList; }; } /* namespace Avogadro */ #endif /* QTAIMCUBATURE_H */ avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp0000644000175000001440000002226412250371054025551 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "qtaimmathutilities.h" #include #include namespace Avogadro { namespace QTAIMMathUtilities { Matrix eigenvaluesOfASymmetricThreeByThreeMatrix(const Matrix &A) { SelfAdjointEigenSolver > eigensolver(A); return eigensolver.eigenvalues(); } Matrix eigenvectorsOfASymmetricThreeByThreeMatrix(const Matrix &A) { SelfAdjointEigenSolver > eigensolver(A); return eigensolver.eigenvectors(); } Matrix eigenvaluesOfASymmetricFourByFourMatrix(const Matrix &A) { SelfAdjointEigenSolver > eigensolver(A); return eigensolver.eigenvalues(); } Matrix eigenvectorsOfASymmetricFourByFourMatrix(const Matrix &A) { SelfAdjointEigenSolver > eigensolver(A); return eigensolver.eigenvectors(); } qint64 signOfARealNumber(qreal x) { if (x > 0.) return 1; else if (x == 0.) return 0; else return -1; } qint64 signatureOfASymmetricThreeByThreeMatrix(const Matrix &A) { SelfAdjointEigenSolver > eigensolver(A); Matrix eigenvalues=eigensolver.eigenvalues(); return signOfARealNumber(eigenvalues(0)) + signOfARealNumber(eigenvalues(1)) + signOfARealNumber(eigenvalues(2)); } qreal ellipticityOfASymmetricThreeByThreeMatrix(const Matrix &A) { SelfAdjointEigenSolver > eigensolver(A); Matrix eigenvalues=eigensolver.eigenvalues(); return (eigenvalues(0) / eigenvalues(1)) - 1.0 ; } qreal distance(const Matrix &a, const Matrix &b) { return sqrt(pow(a(0) - b(0), 2) + pow(a(1) - b(1), 2) + pow(a(2) - b(2), 2)); } Matrix sphericalToCartesian(const Matrix &rtp, const Matrix &x0y0z0) { qreal r=rtp(0); qreal theta=rtp(1); qreal phi=rtp(2); qreal x0=x0y0z0(0); qreal y0=x0y0z0(1); qreal z0=x0y0z0(2); qreal costheta = cos(theta); qreal cosphi = cos(phi); qreal sintheta = sin(theta); qreal sinphi = sin(phi); Matrix xyz(r * cosphi * sintheta + x0, r * sintheta * sinphi + y0, r * costheta + z0); return xyz; } Matrix sphericalToCartesian(const Matrix &rtp) { Matrix x0y0z0(0., 0., 0.); return sphericalToCartesian(rtp, x0y0z0); } Matrix cartesianToSpherical(const Matrix &xyz, const Matrix &x0y0z0 ) { qreal x=xyz(0); qreal y=xyz(1); qreal z=xyz(2); qreal x0=x0y0z0(0); qreal y0=x0y0z0(1); qreal z0=x0y0z0(2); qreal xshift = x - x0; qreal yshift = y - y0; qreal zshift = z - z0; qreal length = sqrt(pow(xshift, 2) + pow(yshift, 2) + pow(zshift, 2)); Matrix rtp; if (length == 0.) rtp << x0, y0, z0 ; else if (xshift == 0. && yshift == 0.) rtp << length, acos(zshift / length), 0.; else rtp << length, acos(zshift / length), atan2(xshift, yshift); return rtp; } Matrix cartesianToSpherical(const Matrix &xyz) { Matrix x0y0z0(0., 0., 0.); return cartesianToSpherical(xyz, x0y0z0); } // Cerjan-Miller-Baker-Popelier Methods // // Based on: // Popelier, P.L.A. Comput. Phys. Comm. 1996, 93, 212. Matrix minusThreeSignatureLocatorGradient(const Matrix &g, const Matrix &H) { Matrix value; Matrix b = eigenvaluesOfASymmetricThreeByThreeMatrix(H); Matrix U = eigenvectorsOfASymmetricThreeByThreeMatrix(H); Matrix F = U.transpose() * g; Matrix A; A << b(0), 0. , 0. , F(0), 0. , b(1), 0. , F(1), 0. , 0. , b(2), F(2), F(0), F(1), F(2), 0. ; Matrix eval = eigenvaluesOfASymmetricFourByFourMatrix(A); Matrix evec = eigenvectorsOfASymmetricFourByFourMatrix(A); Matrix lambda; lambda << eval(3), eval(3), eval(3); Matrix denom; denom = b - lambda; for (qint64 i=0; i < 3; ++i) if( denom(i) < SMALL ) denom(i)=denom(i)+SMALL; Matrix h; h << 0., 0., 0.; for (qint64 j = 0; j < 3; ++j) for (qint64 i = 0; i < 3; ++i) h(j) = h(j) + ( -F(i) * U(j, i) ) / denom(i); value = h; return value; } Matrix minusOneSignatureLocatorGradient(const Matrix &g, const Matrix &H) { Matrix value; Matrix b = eigenvaluesOfASymmetricThreeByThreeMatrix(H); Matrix U = eigenvectorsOfASymmetricThreeByThreeMatrix(H); Matrix F = U.transpose() * g; Matrix A; A << b(0), 0. , F(0), 0. , b(1), F(1), F(0), F(1), 0. ; Matrix eval = eigenvaluesOfASymmetricThreeByThreeMatrix(A); Matrix evec = eigenvectorsOfASymmetricThreeByThreeMatrix(A); Matrix lambda; lambda << eval(2), eval(2), (0.5) * (b(2) - sqrt(pow(b(2), 2) + 4.0 * pow(F(2), 2))); Matrix denom; denom = b - lambda; for (qint64 i = 0; i < 3; ++i) if (denom(i) < SMALL) denom(i) = denom(i) + SMALL; Matrix h; h << 0., 0., 0.; for (qint64 j = 0; j < 3; ++j) for (qint64 i = 0; i < 3; ++i) h(j) = h(j) + (-F(i) * U(j,i)) / denom(i); value = h; return value; } Matrix plusOneSignatureLocatorGradient(const Matrix &g, const Matrix &H) { Matrix value; Matrix b = eigenvaluesOfASymmetricThreeByThreeMatrix(H); Matrix U = eigenvectorsOfASymmetricThreeByThreeMatrix(H); Matrix F = U * g; Matrix A; A << b(1), 0. , F(1), 0. , b(2), F(2), F(1), F(2), 0.; Matrix eval = eigenvaluesOfASymmetricThreeByThreeMatrix(A); Matrix evec = eigenvectorsOfASymmetricThreeByThreeMatrix(A); Matrix lambda; lambda << eval(2), eval(2), (0.5) * (b(0) + sqrt(pow(b(0), 2) + 4.0 * pow(F(0), 2))); Matrix denom; denom = b - lambda; for (qint64 i = 0; i < 3; ++i) if (denom(i) < SMALL) denom(i) = denom(i) + SMALL; Matrix h; h << 0., 0., 0.; for (qint64 j = 0; j < 3; ++j) for (qint64 i = 0; i < 3; ++i) h(j) = h(j) + (-F(i) * U(i, j)) / denom(i); value = h; return value; } Matrix plusThreeSignatureLocatorGradient(const Matrix &g, const Matrix &H) { Matrix value; Matrix b = eigenvaluesOfASymmetricThreeByThreeMatrix(H); Matrix U = eigenvectorsOfASymmetricThreeByThreeMatrix(H); Matrix F = U * g; Matrix A; A << b(0), 0. , 0. , F(0), 0. , b(1), 0. , F(1), 0. , 0. , b(2), F(2), F(0), F(1), F(2), 0.; Matrix eval = eigenvaluesOfASymmetricFourByFourMatrix(A); Matrix evec = eigenvectorsOfASymmetricFourByFourMatrix(A); Matrix lambda; lambda << eval(0), eval(0), eval(0); Matrix denom; denom = b - lambda; for (qint64 i = 0; i < 3; ++i) if (denom(i) < SMALL) denom(i) = denom(i) + SMALL; Matrix h; h << 0., 0., 0.; for (qint64 j = 0; j < 3; ++j) for (qint64 i = 0; i < 3; ++i) h(j) = h(j) + (-F(i) * U(i, j) ) / denom(i); value = h; return value; } } // namespace QTAIMMathUtilities } // namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimextension.cpp0000644000175000001440000006770412250371054024710 0ustar marcususers /********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "qtaimextension.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "qtaimwavefunction.h" #include "qtaimwavefunctionevaluator.h" #include "qtaimcriticalpointlocator.h" #include "qtaimcubature.h" #include using namespace std; using namespace Eigen; namespace Avogadro { enum QTAIMExtensionIndex { FirstAction = 0, SecondAction, ThirdAction }; QTAIMExtension::QTAIMExtension( QObject *parent ) : Extension( parent ) { // create an action for our first action QAction *action = new QAction( this ); action->setText( tr("Molecular Graph..." )); m_actions.append( action ); action->setData( FirstAction ); // create an action for our second action action = new QAction( this ); action->setText( tr("Molecular Graph with Lone Pairs..." )); m_actions.append( action ); action->setData( SecondAction ); // create an action for our third action action = new QAction( this ); action->setText( tr("Atomic Charge..." )); m_actions.append( action ); action->setData( ThirdAction ); } QTAIMExtension::~QTAIMExtension() { } QList QTAIMExtension::actions() const { return m_actions; } QString QTAIMExtension::menuPath(QAction *action) const { int i = action->data().toInt(); switch ( i ) { case FirstAction: return tr("E&xtensions") + '>' + tr("QTAIM"); break; case SecondAction: return tr("E&xtensions") + '>' + tr("QTAIM"); break; case ThirdAction: return tr("E&xtensions") + '>' + tr("QTAIM"); break; } return ""; } QDockWidget * QTAIMExtension::dockWidget() { return 0; } void QTAIMExtension::setMolecule(Molecule *molecule) { m_molecule = molecule; } QUndoCommand* QTAIMExtension::performAction(QAction *action, GLWidget *widget) { bool wavefunctionAlreadyLoaded; if( m_molecule->property("QTAIMComment").isValid() ) { wavefunctionAlreadyLoaded=true; } else { wavefunctionAlreadyLoaded=false; } int i = action->data().toInt(); QTime timer; timer.start(); QString fileName; if( wavefunctionAlreadyLoaded ) { // do nothing } else { fileName = QFileDialog::getOpenFileName( new QWidget, tr("Open WFN File"), QDir::homePath(), tr("WFN files (*.wfn);;All files (*.*)") ); if(fileName.isNull()) { qDebug() << "No such file."; return 0; } } // Instantiate a Wavefunction bool success; QTAIMWavefunction wfn; // Create a new molecule, and then set that when ready. Molecule *oldMol = m_molecule; m_molecule = new Molecule; if( wavefunctionAlreadyLoaded ) { success=wfn.initializeWithMoleculeProperties(m_molecule); } else { success=wfn.initializeWithWFNFile(fileName); } if(!success) { if( wavefunctionAlreadyLoaded ) { qDebug() << "Error initializing wavefunction."; } else { qDebug() << "Error reading WFN file."; } return 0; } if (widget) { widget->toolGroup()->setActiveTool("Navigate"); // Make sure QTAIM engine is turned on too foreach (Engine *engine, widget->engines()) { if (engine->identifier() == "QTAIM") engine->setEnabled(true); } } // Instantiate an Evaluator QTAIMWavefunctionEvaluator eval(wfn); switch ( i ) { case FirstAction: // Molecular Graph { // Instantiate a Critical Point Locator QTAIMCriticalPointLocator cpl(wfn); // Locate the Nuclear Critical Points cpl.locateNuclearCriticalPoints(); // QLists of results QList nucChargeList=wfn.nuclearChargesList(); QList ncpList=cpl.nuclearCriticalPoints(); QVariantList xNCPsVariantList; QVariantList yNCPsVariantList; QVariantList zNCPsVariantList; QVariantList nuclearChargesVariantList; const qreal convertBohrToAngstrom=0.529177249; // Nuclear Critical Points for( qint64 n=0 ; n < ncpList.length() ; ++n ) { QVector3D thisNuclearCriticalPoint=ncpList.at(n); qreal x=thisNuclearCriticalPoint.x() * convertBohrToAngstrom; qreal y=thisNuclearCriticalPoint.y() * convertBohrToAngstrom; qreal z=thisNuclearCriticalPoint.z() * convertBohrToAngstrom; xNCPsVariantList.append( x ); yNCPsVariantList.append( y ); zNCPsVariantList.append( z ); nuclearChargesVariantList.append( wfn.nuclearCharge(n) ); } m_molecule->setProperty("QTAIMXNuclearCriticalPoints",xNCPsVariantList); m_molecule->setProperty("QTAIMYNuclearCriticalPoints",yNCPsVariantList); m_molecule->setProperty("QTAIMZNuclearCriticalPoints",zNCPsVariantList); m_molecule->setProperty("QTAIMNuclearCharges",nuclearChargesVariantList); // Nuclei stored as Atoms for( qint64 n=0 ; n < wfn.numberOfNuclei() ; ++n ) { qreal x=wfn.xNuclearCoordinate(n) * convertBohrToAngstrom; qreal y=wfn.yNuclearCoordinate(n) * convertBohrToAngstrom; qreal z=wfn.zNuclearCoordinate(n) * convertBohrToAngstrom; int Z=(int) wfn.nuclearCharge(n); Atom *atom=m_molecule->addAtom(); atom->setPos( Eigen::Vector3d(x,y,z) ); atom->setAtomicNumber(Z); } m_molecule->update(); // Locate the Bond Critical Points and Trace Bond Paths cpl.locateBondCriticalPoints(); // BCP and Bond Path Results QList bcpList=cpl.bondCriticalPoints(); QList > bondPathList=cpl.bondPaths(); QList > bondedAtomsList=cpl.bondedAtoms(); QList laplacianAtBondCriticalPoints=cpl.laplacianAtBondCriticalPoints(); QList ellipticityAtBondCriticalPoints=cpl.ellipticityAtBondCriticalPoints(); QVariantList xBCPsVariantList; QVariantList yBCPsVariantList; QVariantList zBCPsVariantList; QVariantList firstNCPIndexVariantList; QVariantList secondNCPIndexVariantList; QVariantList laplacianAtBondCriticalPointsVariantList; QVariantList ellipticityAtBondCriticalPointsVariantList; QVariantList bondPathSegmentStartIndexVariantList; QVariantList bondPathSegmentEndIndexVariantList; QVariantList xBondPathsVariantList; QVariantList yBondPathsVariantList; QVariantList zBondPathsVariantList; QList currentAtoms=m_molecule->atoms(); // Connectivity stored as Bonds qint64 bpCtr=0; for( qint64 atom0=0 ; atom0 < currentAtoms.length() - 1 ; ++atom0 ) { for( qint64 atom1=atom0+1 ; atom1 < currentAtoms.length() ; ++atom1 ) { bool areBonded=false; for( qint64 bondPair=0 ; bondPair < bondedAtomsList.length() ; ++bondPair ) { if( atom0 == bondedAtomsList.at(bondPair).first && atom1 == bondedAtomsList.at(bondPair).second ) { areBonded=true; if( areBonded ) { if( (wfn.nuclearCharge(atom0) == 1 || wfn.nuclearCharge(atom1) == 1) && laplacianAtBondCriticalPoints.at(bondPair) > 0.0 ) { // do not draw Bond because it looks like hydrogen bond } else { Bond *bond=m_molecule->addBond(); bond->setBegin( currentAtoms.at(atom0) ); bond->setEnd( currentAtoms.at(atom1) ); // bond->setAromaticity(isAromatic); // bond->setOrder( (int) order); } qreal x=bcpList.at(bondPair).x() * convertBohrToAngstrom; qreal y=bcpList.at(bondPair).y() * convertBohrToAngstrom; qreal z=bcpList.at(bondPair).z() * convertBohrToAngstrom; xBCPsVariantList.append( x ); yBCPsVariantList.append( y ); zBCPsVariantList.append( z ); firstNCPIndexVariantList.append( atom0 ); secondNCPIndexVariantList.append( atom1 ); laplacianAtBondCriticalPointsVariantList.append( laplacianAtBondCriticalPoints.at(bondPair) ); ellipticityAtBondCriticalPointsVariantList.append( ellipticityAtBondCriticalPoints.at(bondPair) ); bondPathSegmentStartIndexVariantList.append( bpCtr ); for( qint64 i=0; i < bondPathList.at(bondPair).length() ; ++i ) { qreal x=bondPathList.at(bondPair).at(i).x() * convertBohrToAngstrom; qreal y=bondPathList.at(bondPair).at(i).y() * convertBohrToAngstrom; qreal z=bondPathList.at(bondPair).at(i).z() * convertBohrToAngstrom; xBondPathsVariantList.append( x ); yBondPathsVariantList.append( y ); zBondPathsVariantList.append( z ); bpCtr++; } bondPathSegmentEndIndexVariantList.append( bpCtr ); } } } // bond pairs } // atom1 } // atom 0 m_molecule->setProperty("QTAIMXBondCriticalPoints",xBCPsVariantList); m_molecule->setProperty("QTAIMYBondCriticalPoints",yBCPsVariantList); m_molecule->setProperty("QTAIMZBondCriticalPoints",zBCPsVariantList); m_molecule->setProperty("QTAIMFirstNCPIndexVariantList",firstNCPIndexVariantList); m_molecule->setProperty("QTAIMSecondNCPIndexVariantList",secondNCPIndexVariantList); m_molecule->setProperty("QTAIMLaplacianAtBondCriticalPoints",laplacianAtBondCriticalPointsVariantList); m_molecule->setProperty("QTAIMEllipticityAtBondCriticalPoints",ellipticityAtBondCriticalPointsVariantList); m_molecule->setProperty("QTAIMBondPathSegmentStartIndex",bondPathSegmentStartIndexVariantList); m_molecule->setProperty("QTAIMBondPathSegmentEndIndex",bondPathSegmentEndIndexVariantList); m_molecule->setProperty("QTAIMXBondPaths",xBondPathsVariantList); m_molecule->setProperty("QTAIMYBondPaths",yBondPathsVariantList); m_molecule->setProperty("QTAIMZBondPaths",zBondPathsVariantList); } break; case SecondAction: // Molecular Graph with Lone Pairs { // Instantiate a Critical Point Locator QTAIMCriticalPointLocator cpl(wfn); // Locate the Nuclear Critical Points cpl.locateNuclearCriticalPoints(); // QLists of results QList nucChargeList=wfn.nuclearChargesList(); QList ncpList=cpl.nuclearCriticalPoints(); QVariantList xNCPsVariantList; QVariantList yNCPsVariantList; QVariantList zNCPsVariantList; QVariantList nuclearChargesVariantList; const qreal convertBohrToAngstrom=0.529177249; // Nuclear Critical Points for( qint64 n=0 ; n < ncpList.length() ; ++n ) { QVector3D thisNuclearCriticalPoint=ncpList.at(n); qreal x=thisNuclearCriticalPoint.x() * convertBohrToAngstrom; qreal y=thisNuclearCriticalPoint.y() * convertBohrToAngstrom; qreal z=thisNuclearCriticalPoint.z() * convertBohrToAngstrom; xNCPsVariantList.append( x ); yNCPsVariantList.append( y ); zNCPsVariantList.append( z ); nuclearChargesVariantList.append( wfn.nuclearCharge(n) ); } m_molecule->setProperty("QTAIMXNuclearCriticalPoints",xNCPsVariantList); m_molecule->setProperty("QTAIMYNuclearCriticalPoints",yNCPsVariantList); m_molecule->setProperty("QTAIMZNuclearCriticalPoints",zNCPsVariantList); m_molecule->setProperty("QTAIMNuclearCharges",nuclearChargesVariantList); // Nuclei stored as Atoms for( qint64 n=0 ; n < wfn.numberOfNuclei() ; ++n ) { qreal x=wfn.xNuclearCoordinate(n) * convertBohrToAngstrom; qreal y=wfn.yNuclearCoordinate(n) * convertBohrToAngstrom; qreal z=wfn.zNuclearCoordinate(n) * convertBohrToAngstrom; int Z=(int) wfn.nuclearCharge(n); Atom *atom=m_molecule->addAtom(); atom->setPos( Eigen::Vector3d(x,y,z) ); atom->setAtomicNumber(Z); } // Locate the Bond Critical Points and Trace Bond Paths cpl.locateBondCriticalPoints(); // BCP and Bond Path Results QList bcpList=cpl.bondCriticalPoints(); QList > bondPathList=cpl.bondPaths(); QList > bondedAtomsList=cpl.bondedAtoms(); QList laplacianAtBondCriticalPoints=cpl.laplacianAtBondCriticalPoints(); QList ellipticityAtBondCriticalPoints=cpl.ellipticityAtBondCriticalPoints(); QVariantList xBCPsVariantList; QVariantList yBCPsVariantList; QVariantList zBCPsVariantList; QVariantList firstNCPIndexVariantList; QVariantList secondNCPIndexVariantList; QVariantList laplacianAtBondCriticalPointsVariantList; QVariantList ellipticityAtBondCriticalPointsVariantList; QVariantList bondPathSegmentStartIndexVariantList; QVariantList bondPathSegmentEndIndexVariantList; QVariantList xBondPathsVariantList; QVariantList yBondPathsVariantList; QVariantList zBondPathsVariantList; QList currentAtoms=m_molecule->atoms(); // Connectivity stored as Bonds qint64 bpCtr=0; for( qint64 atom0=0 ; atom0 < currentAtoms.length() - 1 ; ++atom0 ) { for( qint64 atom1=atom0+1 ; atom1 < currentAtoms.length() ; ++atom1 ) { bool areBonded=false; for( qint64 bondPair=0 ; bondPair < bondedAtomsList.length() ; ++bondPair ) { if( atom0 == bondedAtomsList.at(bondPair).first && atom1 == bondedAtomsList.at(bondPair).second ) { areBonded=true; if( areBonded ) { if( (wfn.nuclearCharge(atom0) == 1 || wfn.nuclearCharge(atom1) == 1) && laplacianAtBondCriticalPoints.at(bondPair) > 0.0 ) { // do not draw Bond because it looks like hydrogen bond } else { Bond *bond=m_molecule->addBond(); bond->setBegin( currentAtoms.at(atom0) ); bond->setEnd( currentAtoms.at(atom1) ); // bond->setAromaticity(isAromatic); // bond->setOrder( (int) order); } qreal x=bcpList.at(bondPair).x() * convertBohrToAngstrom; qreal y=bcpList.at(bondPair).y() * convertBohrToAngstrom; qreal z=bcpList.at(bondPair).z() * convertBohrToAngstrom; xBCPsVariantList.append( x ); yBCPsVariantList.append( y ); zBCPsVariantList.append( z ); firstNCPIndexVariantList.append( atom0 ); secondNCPIndexVariantList.append( atom1 ); laplacianAtBondCriticalPointsVariantList.append( laplacianAtBondCriticalPoints.at(bondPair) ); ellipticityAtBondCriticalPointsVariantList.append( ellipticityAtBondCriticalPoints.at(bondPair) ); bondPathSegmentStartIndexVariantList.append( bpCtr ); for( qint64 i=0; i < bondPathList.at(bondPair).length() ; ++i ) { qreal x=bondPathList.at(bondPair).at(i).x() * convertBohrToAngstrom; qreal y=bondPathList.at(bondPair).at(i).y() * convertBohrToAngstrom; qreal z=bondPathList.at(bondPair).at(i).z() * convertBohrToAngstrom; xBondPathsVariantList.append( x ); yBondPathsVariantList.append( y ); zBondPathsVariantList.append( z ); bpCtr++; } bondPathSegmentEndIndexVariantList.append( bpCtr ); } } } // bond pairs } // atom1 } // atom 0 m_molecule->setProperty("QTAIMXBondCriticalPoints",xBCPsVariantList); m_molecule->setProperty("QTAIMYBondCriticalPoints",yBCPsVariantList); m_molecule->setProperty("QTAIMZBondCriticalPoints",zBCPsVariantList); m_molecule->setProperty("QTAIMFirstNCPIndexVariantList",firstNCPIndexVariantList); m_molecule->setProperty("QTAIMSecondNCPIndexVariantList",secondNCPIndexVariantList); m_molecule->setProperty("QTAIMLaplacianAtBondCriticalPoints",laplacianAtBondCriticalPointsVariantList); m_molecule->setProperty("QTAIMEllipticityAtBondCriticalPoints",ellipticityAtBondCriticalPointsVariantList); m_molecule->setProperty("QTAIMBondPathSegmentStartIndex",bondPathSegmentStartIndexVariantList); m_molecule->setProperty("QTAIMBondPathSegmentEndIndex",bondPathSegmentEndIndexVariantList); m_molecule->setProperty("QTAIMXBondPaths",xBondPathsVariantList); m_molecule->setProperty("QTAIMYBondPaths",yBondPathsVariantList); m_molecule->setProperty("QTAIMZBondPaths",zBondPathsVariantList); // Locate Electron Density Sources / Lone Pairs cpl.locateElectronDensitySources(); QList electronDensitySourcesList=cpl.electronDensitySources(); QVariantList xElectronDensitySourcesVariantList; QVariantList yElectronDensitySourcesVariantList; QVariantList zElectronDensitySourcesVariantList; for( qint64 n=0 ; n < electronDensitySourcesList.length() ; ++n ) { QVector3D thisCriticalPoint=electronDensitySourcesList.at(n); qreal x=thisCriticalPoint.x() * convertBohrToAngstrom; qreal y=thisCriticalPoint.y() * convertBohrToAngstrom; qreal z=thisCriticalPoint.z() * convertBohrToAngstrom; xElectronDensitySourcesVariantList.append( x ); yElectronDensitySourcesVariantList.append( y ); zElectronDensitySourcesVariantList.append( z ); } m_molecule->setProperty("QTAIMXElectronDensitySources",xElectronDensitySourcesVariantList); m_molecule->setProperty("QTAIMYElectronDensitySources",yElectronDensitySourcesVariantList); m_molecule->setProperty("QTAIMZElectronDensitySources",zElectronDensitySourcesVariantList); } break; case ThirdAction: // perform third action { // Instantiate a Critical Point Locator QTAIMCriticalPointLocator cpl(wfn); // Locate the Nuclear Critical Points cpl.locateNuclearCriticalPoints(); // QLists of results QList nucChargeList=wfn.nuclearChargesList(); QList ncpList=cpl.nuclearCriticalPoints(); QVariantList xNCPsVariantList; QVariantList yNCPsVariantList; QVariantList zNCPsVariantList; QVariantList nuclearChargesVariantList; const qreal convertBohrToAngstrom=0.529177249; // Nuclear Critical Points for( qint64 n=0 ; n < ncpList.length() ; ++n ) { QVector3D thisNuclearCriticalPoint=ncpList.at(n); qreal x=thisNuclearCriticalPoint.x() * convertBohrToAngstrom; qreal y=thisNuclearCriticalPoint.y() * convertBohrToAngstrom; qreal z=thisNuclearCriticalPoint.z() * convertBohrToAngstrom; xNCPsVariantList.append( x ); yNCPsVariantList.append( y ); zNCPsVariantList.append( z ); nuclearChargesVariantList.append( wfn.nuclearCharge(n) ); } m_molecule->setProperty("QTAIMXNuclearCriticalPoints",xNCPsVariantList); m_molecule->setProperty("QTAIMYNuclearCriticalPoints",yNCPsVariantList); m_molecule->setProperty("QTAIMZNuclearCriticalPoints",zNCPsVariantList); m_molecule->setProperty("QTAIMNuclearCharges",nuclearChargesVariantList); // Nuclei stored as Atoms for( qint64 n=0 ; n < wfn.numberOfNuclei() ; ++n ) { qreal x=wfn.xNuclearCoordinate(n) * convertBohrToAngstrom; qreal y=wfn.yNuclearCoordinate(n) * convertBohrToAngstrom; qreal z=wfn.zNuclearCoordinate(n) * convertBohrToAngstrom; int Z=(int) wfn.nuclearCharge(n); Atom *atom=m_molecule->addAtom(); atom->setPos( Eigen::Vector3d(x,y,z) ); atom->setAtomicNumber(Z); } // Locate the Bond Critical Points and Trace Bond Paths cpl.locateBondCriticalPoints(); // BCP and Bond Path Results QList bcpList=cpl.bondCriticalPoints(); QList > bondPathList=cpl.bondPaths(); QList > bondedAtomsList=cpl.bondedAtoms(); QList laplacianAtBondCriticalPoints=cpl.laplacianAtBondCriticalPoints(); QList ellipticityAtBondCriticalPoints=cpl.ellipticityAtBondCriticalPoints(); QVariantList xBCPsVariantList; QVariantList yBCPsVariantList; QVariantList zBCPsVariantList; QVariantList firstNCPIndexVariantList; QVariantList secondNCPIndexVariantList; QVariantList laplacianAtBondCriticalPointsVariantList; QVariantList ellipticityAtBondCriticalPointsVariantList; QVariantList bondPathSegmentStartIndexVariantList; QVariantList bondPathSegmentEndIndexVariantList; QVariantList xBondPathsVariantList; QVariantList yBondPathsVariantList; QVariantList zBondPathsVariantList; QList currentAtoms=m_molecule->atoms(); // Connectivity stored as Bonds qint64 bpCtr=0; for( qint64 atom0=0 ; atom0 < currentAtoms.length() - 1 ; ++atom0 ) { for( qint64 atom1=atom0+1 ; atom1 < currentAtoms.length() ; ++atom1 ) { bool areBonded=false; for( qint64 bondPair=0 ; bondPair < bondedAtomsList.length() ; ++bondPair ) { if( atom0 == bondedAtomsList.at(bondPair).first && atom1 == bondedAtomsList.at(bondPair).second ) { areBonded=true; if( areBonded ) { if( (wfn.nuclearCharge(atom0) == 1 || wfn.nuclearCharge(atom1) == 1) && laplacianAtBondCriticalPoints.at(bondPair) > 0.0 ) { // do not draw Bond because it looks like hydrogen bond } else { Bond *bond=m_molecule->addBond(); bond->setBegin( currentAtoms.at(atom0) ); bond->setEnd( currentAtoms.at(atom1) ); // bond->setAromaticity(isAromatic); // bond->setOrder( (int) order); } qreal x=bcpList.at(bondPair).x() * convertBohrToAngstrom; qreal y=bcpList.at(bondPair).y() * convertBohrToAngstrom; qreal z=bcpList.at(bondPair).z() * convertBohrToAngstrom; xBCPsVariantList.append( x ); yBCPsVariantList.append( y ); zBCPsVariantList.append( z ); firstNCPIndexVariantList.append( atom0 ); secondNCPIndexVariantList.append( atom1 ); laplacianAtBondCriticalPointsVariantList.append( laplacianAtBondCriticalPoints.at(bondPair) ); ellipticityAtBondCriticalPointsVariantList.append( ellipticityAtBondCriticalPoints.at(bondPair) ); bondPathSegmentStartIndexVariantList.append( bpCtr ); for( qint64 i=0; i < bondPathList.at(bondPair).length() ; ++i ) { qreal x=bondPathList.at(bondPair).at(i).x() * convertBohrToAngstrom; qreal y=bondPathList.at(bondPair).at(i).y() * convertBohrToAngstrom; qreal z=bondPathList.at(bondPair).at(i).z() * convertBohrToAngstrom; xBondPathsVariantList.append( x ); yBondPathsVariantList.append( y ); zBondPathsVariantList.append( z ); bpCtr++; } bondPathSegmentEndIndexVariantList.append( bpCtr ); } } } // bond pairs } // atom1 } // atom 0 m_molecule->setProperty("QTAIMXBondCriticalPoints",xBCPsVariantList); m_molecule->setProperty("QTAIMYBondCriticalPoints",yBCPsVariantList); m_molecule->setProperty("QTAIMZBondCriticalPoints",zBCPsVariantList); m_molecule->setProperty("QTAIMFirstNCPIndexVariantList",firstNCPIndexVariantList); m_molecule->setProperty("QTAIMSecondNCPIndexVariantList",secondNCPIndexVariantList); m_molecule->setProperty("QTAIMLaplacianAtBondCriticalPoints",laplacianAtBondCriticalPointsVariantList); m_molecule->setProperty("QTAIMEllipticityAtBondCriticalPoints",ellipticityAtBondCriticalPointsVariantList); m_molecule->setProperty("QTAIMBondPathSegmentStartIndex",bondPathSegmentStartIndexVariantList); m_molecule->setProperty("QTAIMBondPathSegmentEndIndex",bondPathSegmentEndIndexVariantList); m_molecule->setProperty("QTAIMXBondPaths",xBondPathsVariantList); m_molecule->setProperty("QTAIMYBondPaths",yBondPathsVariantList); m_molecule->setProperty("QTAIMZBondPaths",zBondPathsVariantList); // Electron Density qint64 mode=0; // All Atomic Basins QList basins; for( qint64 i=0 ; i < wfn.numberOfNuclei() ; ++i ) { basins.append(i); } QTAIMCubature cub(wfn); // QTime time; // time.start(); QList > results=cub.integrate(mode,basins); // qDebug() << "Time Elapsed:" << time.elapsed(); for(qint64 i=0 ; i < results.length() ; ++i) { qDebug() << "basin" << i << results.at(i).first << results.at(i).second; } // TODO: Set the properties of the atoms. // I don't know why this bombs. for(qint64 i=0 ; m_molecule->atoms().length(); ++i) { // Atom *atom=m_molecule->atoms().at(i); // const qreal charge=results.at(i).first; // atom->setPartialCharge( charge ); } } break; } emit moleculeChanged(m_molecule, Extension::DeleteOld | Extension::NewWindow); oldMol->deleteLater(); return 0; } } Q_EXPORT_PLUGIN2(qtaimextension, Avogadro::QTAIMExtensionFactory) avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimodeintegrator.h0000644000175000001440000000644612250371054025203 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef QTAIMODEINTEGRATOR_H #define QTAIMODEINTEGRATOR_H #include #include #include #include #include #include "qtaimwavefunction.h" #include "qtaimwavefunctionevaluator.h" #include "qtaimmathutilities.h" namespace Avogadro { class QTAIMODEIntegrator { public: enum { SteepestAscentPathInElectronDensity=0, CMBPMinusThreeGradientInElectronDensity=1, CMBPMinusOneGradientInElectronDensity=2, CMBPPlusOneGradientInElectronDensity=3, CMBPPlusThreeGradientInElectronDensity=4, CMBPMinusThreeGradientInElectronDensityLaplacian=5, CMBPMinusOneGradientInElectronDensityLaplacian=6, CMBPPlusOneGradientInElectronDensityLaplacian=7, CMBPPlusThreeGradientInElectronDensityLaplacian=8 }; explicit QTAIMODEIntegrator(QTAIMWavefunctionEvaluator &eval, const qint64 mode); QVector3D integrate(QVector3D x0y0z0); qint64 status() const { return m_status; } const QList path() const { return m_path; } void setBetaSpheres( QList > betaSpheres ) { m_betaSpheres = betaSpheres; } qint64 associatedSphere() const { return m_associatedSphere; } private: QTAIMWavefunctionEvaluator *m_eval; qint64 m_mode; qint64 m_status; QList m_path; QList > m_betaSpheres; qint64 m_associatedSphere; // ODE integrator qreal r8_abs ( qreal x ); qreal r8_epsilon ( ); void r8_fehl ( qint64 neqn, qreal y[], qreal t, qreal h, qreal yp[], qreal f1[], qreal f2[], qreal f3[], qreal f4[], qreal f5[], qreal s[] ); qreal r8_max ( qreal x, qreal y ); qreal r8_min ( qreal x, qreal y ); qint64 r8_rkf45 ( qint64 neqn, qreal y[], qreal yp[], qreal *t, qreal tout, qreal *relerr, qreal abserr, qint64 flag ); qreal r8_sign ( qreal x ); void r8_f ( qreal t, qreal y[], qreal yp[] ); qreal abserr_save; qint64 flag_save; qreal h; qint64 init; qint64 kflag; qint64 kop; qint64 nfe; qreal relerr_save; qreal remin; }; } // namespace Avogadro #endif // QTAIMODEINTEGRATOR_H avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimodeintegrator.cpp0000644000175000001440000010646112250371054025534 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ /* Based on codes written by Herman Watts, Lawrence Shampine, and John Burkardt. */ #include "qtaimodeintegrator.h" namespace Avogadro { QTAIMODEIntegrator::QTAIMODEIntegrator(QTAIMWavefunctionEvaluator &eval, const qint64 mode) { m_eval=&eval; m_mode=mode; m_betaSpheres.empty(); m_associatedSphere=0; } QVector3D QTAIMODEIntegrator::integrate( QVector3D x0y0z0 ) { qreal x0=x0y0z0.x(); qreal y0=x0y0z0.y(); qreal z0=x0y0z0.z(); const qint64 NEQN=3; abserr_save = -1.0; flag_save = -1000; h = -1.0; init = -1000; kflag = -1000; kop = -1; nfe = -1; relerr_save = -1.0; remin = 1.0e-12; qreal abserr; qint64 flag; qint64 i_step; qint64 n_step; qreal relerr; qreal t; qreal t_out; qreal t_start; qreal t_stop; qreal y[3]; qreal yp[3]; switch (m_mode) { case SteepestAscentPathInElectronDensity: abserr = 1.e-5; // sqrt ( r8_epsilon ( ) ); relerr = 1.e10; // sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 10.0; n_step = t_stop * 20; break; case CMBPMinusThreeGradientInElectronDensity: abserr = sqrt ( r8_epsilon ( ) ); relerr = sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 1.0; n_step = t_stop * 1000; break; case CMBPMinusOneGradientInElectronDensity: abserr = sqrt ( r8_epsilon ( ) ); relerr = sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 1.0; n_step = t_stop * 100; break; case CMBPPlusOneGradientInElectronDensity: abserr = sqrt ( r8_epsilon ( ) ); relerr = sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 1.0; n_step = t_stop * 200; break; case CMBPPlusThreeGradientInElectronDensity: abserr = sqrt ( r8_epsilon ( ) ); relerr = sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 1.0; n_step = t_stop * 200; break; case CMBPMinusThreeGradientInElectronDensityLaplacian: abserr = sqrt ( r8_epsilon ( ) ); relerr = sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 1.0; n_step = t_stop * 200; break; case CMBPMinusOneGradientInElectronDensityLaplacian: abserr = sqrt ( r8_epsilon ( ) ); relerr = sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 1.0; n_step = t_stop * 200; break; case CMBPPlusOneGradientInElectronDensityLaplacian: abserr = sqrt ( r8_epsilon ( ) ); relerr = sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 1.0; n_step = t_stop * 200; break; case CMBPPlusThreeGradientInElectronDensityLaplacian: abserr = sqrt ( r8_epsilon ( ) ); relerr = sqrt ( r8_epsilon ( ) ); t_start = 0.0; t_stop = 1.0; n_step = t_stop * 200; break; default: qDebug() << "Catastrophic: No ODE parameters for this property." ; exit(1); break; } y[0]=x0; y[1]=y0; y[2]=z0; m_path.clear(); m_path.append(QVector3D(y[0],y[1],y[2])); flag=1; for ( i_step = 1; i_step <= n_step; i_step++ ) { t = ( ( qreal ) ( n_step - i_step + 1 ) * t_start + ( qreal ) ( i_step - 1 ) * t_stop ) / ( qreal ) ( n_step ); t_out = ( ( qreal ) ( n_step - i_step ) * t_start + ( qreal ) ( i_step ) * t_stop ) / ( qreal ) ( n_step ); flag = QTAIMODEIntegrator::r8_rkf45( NEQN, y, yp, &t, t_out, &relerr, abserr, flag ); m_status=flag; m_path.append(QVector3D(y[0],y[1],y[2])); if( flag == 7) { flag=2; m_status=flag; } if( flag != 2 ) { m_status=flag; return QVector3D(y[0],y[1],y[2]) ; } if( m_betaSpheres.length() > 0 ) { for( qint64 n=0 ; n < m_betaSpheres.length() ; ++n ) { Matrix a(y[0],y[1],y[2]); Matrix b(m_betaSpheres.at(n).first.x(), m_betaSpheres.at(n).first.y(), m_betaSpheres.at(n).first.z() ); qreal distance=QTAIMMathUtilities::distance(a,b); if( distance < m_betaSpheres.at(n).second ) { m_status=0; m_associatedSphere=n; return QVector3D( m_betaSpheres.at(n).first.x(), m_betaSpheres.at(n).first.y(), m_betaSpheres.at(n).first.z() ); } } } // beta spheres } // ODE step return QVector3D(y[0],y[1],y[2]); } void QTAIMODEIntegrator::r8_f ( qreal t, qreal y[], qreal yp[] ) { t=t; // suppress warning Matrix gradient; Matrix gH; Matrix g; Matrix H; Matrix xyz; xyz << y[0],y[1],y[2]; if(m_mode == SteepestAscentPathInElectronDensity ) { g=m_eval->gradientOfElectronDensity(xyz); } else { if( m_mode == 1 || m_mode ==2 || m_mode ==3 || m_mode == 4 ) { gH=m_eval->gradientAndHessianOfElectronDensity(xyz); } else { gH=m_eval->gradientAndHessianOfElectronDensityLaplacian(xyz); } g(0)=gH(0,0); g(1)=gH(1,0); g(2)=gH(2,0); H(0,0)=gH(0,1); H(1,0)=gH(1,1); H(2,0)=gH(2,1); H(0,1)=gH(0,2); H(1,1)=gH(1,2); H(2,1)=gH(2,2); H(0,2)=gH(0,3); H(1,2)=gH(1,3); H(2,2)=gH(2,3); } switch (m_mode) { case SteepestAscentPathInElectronDensity: gradient=g; break; case CMBPMinusThreeGradientInElectronDensity: gradient=QTAIMMathUtilities::minusThreeSignatureLocatorGradient(g,H); break; case CMBPMinusOneGradientInElectronDensity: gradient=QTAIMMathUtilities::minusOneSignatureLocatorGradient(g,H); break; case CMBPPlusOneGradientInElectronDensity: gradient=QTAIMMathUtilities::plusOneSignatureLocatorGradient(g,H); break; case CMBPPlusThreeGradientInElectronDensity: gradient=QTAIMMathUtilities::plusThreeSignatureLocatorGradient(g,H); break; case CMBPMinusThreeGradientInElectronDensityLaplacian: gradient=QTAIMMathUtilities::minusThreeSignatureLocatorGradient(g,H); break; case CMBPMinusOneGradientInElectronDensityLaplacian: gradient=QTAIMMathUtilities::minusOneSignatureLocatorGradient(g,H); break; case CMBPPlusOneGradientInElectronDensityLaplacian: gradient=QTAIMMathUtilities::plusOneSignatureLocatorGradient(g,H); break; case CMBPPlusThreeGradientInElectronDensityLaplacian: gradient=QTAIMMathUtilities::plusThreeSignatureLocatorGradient(g,H); break; default: qDebug() << "Catastrophic: No ODE parameters for this property." ; exit(1); break; } qreal normGradient=sqrt( gradient(0)*gradient(0) + gradient(1)*gradient(1) + gradient(2)*gradient(2) ); yp[0]= gradient(0) / normGradient; yp[1]= gradient(1) / normGradient; yp[2]= gradient(2) / normGradient; } //****************************************************************************80 qreal QTAIMODEIntegrator::r8_abs ( qreal x ) //****************************************************************************80 // // Purpose: // // R8_ABS returns the absolute value of an R8. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 02 April 2005 // // Author: // // John Burkardt // // Parameters: // // Input, qreal X, the quantity whose absolute value is desired. // // Output, qreal R8_ABS, the absolute value of X. // { if ( 0.0 <= x ) { return x; } else { return ( -x ); } } //****************************************************************************80 qreal QTAIMODEIntegrator::r8_epsilon ( ) //****************************************************************************80 // // Purpose: // // R8_EPSILON returns the R8 round off unit. // // Discussion: // // R8_EPSILON is a number R which is a power of 2 with the property that, // to the precision of the computer's arithmetic, // 1 < 1 + R // but // 1 = ( 1 + R / 2 ) // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 06 May 2003 // // Author: // // John Burkardt // // Parameters: // // Output, qreal R8_EPSILON, the R8 round-off unit. // { qreal r; r = 1.0; while ( 1.0 < ( qreal ) ( 1.0 + r ) ) { r = r / 2.0; } return ( 2.0 * r ); } //****************************************************************************80 void QTAIMODEIntegrator::r8_fehl ( qint64 neqn, qreal y[], qreal t, qreal h, qreal yp[], qreal f1[], qreal f2[], qreal f3[], qreal f4[], qreal f5[], qreal s[] ) //****************************************************************************80 // // Purpose: // // R8_FEHL takes one Fehlberg fourth-fifth order step. // // Discussion: // // This version of the routine uses qreal real arithemtic. // // This routine integrates a system of NEQN first order ordinary differential // equations of the form // dY(i)/dT = F(T,Y(1:NEQN)) // where the initial values Y and the initial derivatives // YP are specified at the starting point T. // // The routine advances the solution over the fixed step H and returns // the fifth order (sixth order accurate locally) solution // approximation at T+H in array S. // // The formulas have been grouped to control loss of significance. // The routine should be called with an H not smaller than 13 units of // roundoff in T so that the various independent arguments can be // distinguished. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 27 March 2004 // // Author: // // Original FORTRAN77 version by Herman Watts, Lawrence Shampine. // C++ version by John Burkardt. // // Reference: // // Erwin Fehlberg, // Low-order Classical Runge-Kutta Formulas with Stepsize Control, // NASA Technical Report R-315, 1969. // // Lawrence Shampine, Herman Watts, S Davenport, // Solving Non-stiff Ordinary Differential Equations - The State of the Art, // SIAM Review, // Volume 18, pages 376-411, 1976. // // Parameters: // // Input, external F, a user-supplied subroutine to evaluate the // derivatives Y'(T), of the form: // // void f ( qreal t, qreal y[], qreal yp[] ) // // Input, qint64 NEQN, the number of equations to be integrated. // // Input, qreal Y[NEQN], the current value of the dependent variable. // // Input, qreal T, the current value of the independent variable. // // Input, qreal H, the step size to take. // // Input, qreal YP[NEQN], the current value of the derivative of the // dependent variable. // // Output, qreal F1[NEQN], F2[NEQN], F3[NEQN], F4[NEQN], F5[NEQN], derivative // values needed for the computation. // // Output, qreal S[NEQN], the estimate of the solution at T+H. // { qreal ch; qint64 i; ch = h / 4.0; for ( i = 0; i < neqn; i++ ) { f5[i] = y[i] + ch * yp[i]; } QTAIMODEIntegrator::r8_f (t + ch, f5, f1 ); ch = 3.0 * h / 32.0; for ( i = 0; i < neqn; i++ ) { f5[i] = y[i] + ch * ( yp[i] + 3.0 * f1[i] ); } QTAIMODEIntegrator::r8_f ( t + 3.0 * h / 8.0, f5, f2 ); ch = h / 2197.0; for ( i = 0; i < neqn; i++ ) { f5[i] = y[i] + ch * ( 1932.0 * yp[i] + ( 7296.0 * f2[i] - 7200.0 * f1[i] ) ); } QTAIMODEIntegrator::r8_f ( t + 12.0 * h / 13.0, f5, f3 ); ch = h / 4104.0; for ( i = 0; i < neqn; i++ ) { f5[i] = y[i] + ch * ( ( 8341.0 * yp[i] - 845.0 * f3[i] ) + ( 29440.0 * f2[i] - 32832.0 * f1[i] ) ); } QTAIMODEIntegrator::r8_f ( t + h, f5, f4 ); ch = h / 20520.0; for ( i = 0; i < neqn; i++ ) { f1[i] = y[i] + ch * ( ( -6080.0 * yp[i] + ( 9295.0 * f3[i] - 5643.0 * f4[i] ) ) + ( 41040.0 * f1[i] - 28352.0 * f2[i] ) ); } QTAIMODEIntegrator::r8_f ( t + h / 2.0, f1, f5 ); // // Ready to compute the approximate solution at T+H. // ch = h / 7618050.0; for ( i = 0; i < neqn; i++ ) { s[i] = y[i] + ch * ( ( 902880.0 * yp[i] + ( 3855735.0 * f3[i] - 1371249.0 * f4[i] ) ) + ( 3953664.0 * f2[i] + 277020.0 * f5[i] ) ); } return; } //****************************************************************************80 qreal QTAIMODEIntegrator::r8_max ( qreal x, qreal y ) //****************************************************************************80 // // Purpose: // // R8_MAX returns the maximum of two R8's. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 10 January 2002 // // Author: // // John Burkardt // // Parameters: // // Input, qreal X, Y, the quantities to compare. // // Output, qreal R8_MAX, the maximum of X and Y. // { if ( y < x ) { return x; } else { return y; } } //****************************************************************************80 qreal QTAIMODEIntegrator::r8_min ( qreal x, qreal y ) //****************************************************************************80 // // Purpose: // // R8_MIN returns the minimum of two R8's. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 09 May 2003 // // Author: // // John Burkardt // // Parameters: // // Input, qreal X, Y, the quantities to compare. // // Output, qreal R8_MIN, the minimum of X and Y. // { if ( y < x ) { return y; } else { return x; } } //****************************************************************************80 qint64 QTAIMODEIntegrator::r8_rkf45 ( qint64 neqn, qreal y[], qreal yp[], qreal *t, qreal tout, qreal *relerr, qreal abserr, qint64 flag ) //****************************************************************************80 // // Purpose: // // R8_RKF45 carries out the Runge-Kutta-Fehlberg method. // // Discussion: // // This version of the routine uses qreal real arithmetic. // // This routine is primarily designed to solve non-stiff and mildly stiff // differential equations when derivative evaluations are inexpensive. // It should generally not be used when the user is demanding // high accuracy. // // This routine integrates a system of NEQN first-order ordinary differential // equations of the form: // // dY(i)/dT = F(T,Y(1),Y(2),...,Y(NEQN)) // // where the Y(1:NEQN) are given at T. // // Typically the subroutine is used to integrate from T to TOUT but it // can be used as a one-step integrator to advance the solution a // single step in the direction of TOUT. On return, the parameters in // the call list are set for continuing the integration. The user has // only to call again (and perhaps define a new value for TOUT). // // Before the first call, the user must // // * supply the subroutine F(T,Y,YP) to evaluate the right hand side; // and declare F in an EXTERNAL statement; // // * initialize the parameters: // NEQN, Y(1:NEQN), T, TOUT, RELERR, ABSERR, FLAG. // In particular, T should initially be the starting point for integration, // Y should be the value of the initial conditions, and FLAG should // normally be +1. // // Normally, the user only sets the value of FLAG before the first call, and // thereafter, the program manages the value. On the first call, FLAG should // normally be +1 (or -1 for single step mode.) On normal return, FLAG will // have been reset by the program to the value of 2 (or -2 in single // step mode), and the user can continue to call the routine with that // value of FLAG. // // (When the input magnitude of FLAG is 1, this indicates to the program // that it is necessary to do some initialization work. An input magnitude // of 2 lets the program know that that initialization can be skipped, // and that useful information was computed earlier.) // // The routine returns with all the information needed to continue // the integration. If the integration reached TOUT, the user need only // define a new TOUT and call again. In the one-step integrator // mode, returning with FLAG = -2, the user must keep in mind that // each step taken is in the direction of the current TOUT. Upon // reaching TOUT, indicated by the output value of FLAG switching to 2, // the user must define a new TOUT and reset FLAG to -2 to continue // in the one-step integrator mode. // // In some cases, an error or difficulty occurs during a call. In that case, // the output value of FLAG is used to indicate that there is a problem // that the user must address. These values include: // // * 3, integration was not completed because the input value of RELERR, the // relative error tolerance, was too small. RELERR has been increased // appropriately for continuing. If the user accepts the output value of // RELERR, then simply reset FLAG to 2 and continue. // // * 4, integration was not completed because more than MAXNFE derivative // evaluations were needed. This is approximately (MAXNFE/6) steps. // The user may continue by simply calling again. The function counter // will be reset to 0, and another MAXNFE function evaluations are allowed. // // * 5, integration was not completed because the solution vanished, // making a pure relative error test impossible. The user must use // a non-zero ABSERR to continue. Using the one-step integration mode // for one step is a good way to proceed. // // * 6, integration was not completed because the requested accuracy // could not be achieved, even using the smallest allowable stepsize. // The user must increase the error tolerances ABSERR or RELERR before // continuing. It is also necessary to reset FLAG to 2 (or -2 when // the one-step integration mode is being used). The occurrence of // FLAG = 6 indicates a trouble spot. The solution is changing // rapidly, or a singularity may be present. It often is inadvisable // to continue. // // * 7, it is likely that this routine is inefficient for solving // this problem. Too much output is restricting the natural stepsize // choice. The user should use the one-step integration mode with // the stepsize determined by the code. If the user insists upon // continuing the integration, reset FLAG to 2 before calling // again. Otherwise, execution will be terminated. // // * 8, invalid input parameters, indicates one of the following: // NEQN <= 0; // T = TOUT and |FLAG| /= 1; // RELERR < 0 or ABSERR < 0; // FLAG == 0 or FLAG < -2 or 8 < FLAG. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 27 March 2004 // // Author: // // Original FORTRAN77 version by Herman Watts, Lawrence Shampine. // C++ version by John Burkardt. // // Reference: // // Erwin Fehlberg, // Low-order Classical Runge-Kutta Formulas with Stepsize Control, // NASA Technical Report R-315, 1969. // // Lawrence Shampine, Herman Watts, S Davenport, // Solving Non-stiff Ordinary Differential Equations - The State of the Art, // SIAM Review, // Volume 18, pages 376-411, 1976. // // Parameters: // // Input, external F, a user-supplied subroutine to evaluate the // derivatives Y'(T), of the form: // // void f ( qreal t, qreal y[], qreal yp[] ) // // Input, qint64 NEQN, the number of equations to be integrated. // // Input/output, qreal Y[NEQN], the current solution vector at T. // // Input/output, qreal YP[NEQN], the derivative of the current solution // vector at T. The user should not set or alter this information! // // Input/output, qreal *T, the current value of the independent variable. // // Input, qreal TOUT, the output point at which solution is desired. // TOUT = T is allowed on the first call only, in which case the routine // returns with FLAG = 2 if continuation is possible. // // Input, qreal *RELERR, ABSERR, the relative and absolute error tolerances // for the local error test. At each step the code requires: // abs ( local error ) <= RELERR * abs ( Y ) + ABSERR // for each component of the local error and the solution vector Y. // RELERR cannot be "too small". If the routine believes RELERR has been // set too small, it will reset RELERR to an acceptable value and return // immediately for user action. // // Input, qint64 FLAG, indicator for status of integration. On the first call, // set FLAG to +1 for normal use, or to -1 for single step mode. On // subsequent continuation steps, FLAG should be +2, or -2 for single // step mode. // // Output, qint64 RKF45_D, indicator for status of integration. A value of 2 // or -2 indicates normal progress, while any other value indicates a // problem that should be addressed. // { // ECB: originally 3000 #define MAXNFE 1000 qreal ae; qreal dt; qreal ee; qreal eeoet; qreal eps; qreal esttol; qreal et; qreal *f1; qreal *f2; qreal *f3; qreal *f4; qreal *f5; bool hfaild; qreal hmin; qint64 i; qint64 k; qint64 mflag; bool output; qreal relerr_min; qreal s; qreal scale; qreal tol; qreal toln; qreal ypk; // // Check the input parameters. // eps = r8_epsilon ( ); if ( neqn < 1 ) { return 8; } if ( (*relerr) < 0.0 ) { return 8; } if ( abserr < 0.0 ) { return 8; } if ( flag == 0 || 8 < flag || flag < -2 ) { return 8; } mflag = (qint64) abs ( (long) flag ); // // Is this a continuation call? // if ( mflag != 1 ) { if ( *t == tout && kflag != 3 ) { return 8; } // // FLAG = -2 or +2: // if ( mflag == 2 ) { if ( kflag == 3 ) { flag = flag_save; mflag = (qint64) abs ( (long) flag ); } else if ( init == 0 ) { flag = flag_save; } else if ( kflag == 4 ) { nfe = 0; } else if ( kflag == 5 && abserr == 0.0 ) { exit ( 1 ); } else if ( kflag == 6 && (*relerr) <= relerr_save && abserr <= abserr_save ) { exit ( 1 ); } } // // FLAG = 3, 4, 5, 6, 7 or 8. // else { if ( flag == 3 ) { flag = flag_save; if ( kflag == 3 ) { mflag = (qint64) abs ( (long) flag ); } } else if ( flag == 4 ) { nfe = 0; flag = flag_save; if ( kflag == 3 ) { mflag = (qint64) abs ( (long) flag ); } } else if ( flag == 5 && 0.0 < abserr ) { flag = flag_save; if ( kflag == 3 ) { mflag = (qint64) abs ( (long) flag ); } } // // Integration cannot be continued because the user did not respond to // the instructions pertaining to FLAG = 5, 6, 7 or 8. // else { exit ( 1 ); } } } // // Save the input value of FLAG. // Set the continuation flag KFLAG for subsequent input checking. // flag_save = flag; kflag = 0; // // Save RELERR and ABSERR for checking input on subsequent calls. // relerr_save = (*relerr); abserr_save = abserr; // // Restrict the relative error tolerance to be at least // // 2*EPS+REMIN // // to avoid limiting precision difficulties arising from impossible // accuracy requests. // relerr_min = 2.0 * r8_epsilon ( ) + remin; // // Is the relative error tolerance too small? // if ( (*relerr) < relerr_min ) { (*relerr) = relerr_min; kflag = 3; return 3; } dt = tout - *t; // // Initialization: // // Set the initialization completion indicator, INIT; // set the indicator for too many output points, KOP; // evaluate the initial derivatives // set the counter for function evaluations, NFE; // estimate the starting stepsize. // f1 = new qreal[neqn]; f2 = new qreal[neqn]; f3 = new qreal[neqn]; f4 = new qreal[neqn]; f5 = new qreal[neqn]; if ( mflag == 1 ) { init = 0; kop = 0; QTAIMODEIntegrator::r8_f ( *t, y, yp ); nfe = 1; if ( *t == tout ) { return 2; } } if ( init == 0 ) { init = 1; h = r8_abs ( dt ); toln = 0.0; for ( k = 0; k < neqn; k++ ) { tol = (*relerr) * r8_abs ( y[k] ) + abserr; if ( 0.0 < tol ) { toln = tol; ypk = r8_abs ( yp[k] ); if ( tol < ypk * pow ( h, 5 ) ) { h = pow ( ( tol / ypk ), 0.2 ); } } } if ( toln <= 0.0 ) { h = 0.0; } h = r8_max ( h, 26.0 * eps * r8_max ( r8_abs ( *t ), r8_abs ( dt ) ) ); if ( flag < 0 ) { flag_save = -2; } else { flag_save = 2; } } // // Set stepsize for integration in the direction from T to TOUT. // h = r8_sign ( dt ) * r8_abs ( h ); // // Test to see if too may output points are being requested. // if ( 2.0 * r8_abs ( dt ) <= r8_abs ( h ) ) { kop = kop + 1; } // // Unnecessary frequency of output. // if ( kop == 100 ) { kop = 0; delete [] f1; delete [] f2; delete [] f3; delete [] f4; delete [] f5; return 7; } // // If we are too close to the output point, then simply extrapolate and return. // if ( r8_abs ( dt ) <= 26.0 * eps * r8_abs ( *t ) ) { *t = tout; for ( i = 0; i < neqn; i++ ) { y[i] = y[i] + dt * yp[i]; } QTAIMODEIntegrator::r8_f ( *t, y, yp ); nfe = nfe + 1; delete [] f1; delete [] f2; delete [] f3; delete [] f4; delete [] f5; return 2; } // // Initialize the output point indicator. // output = false; // // To avoid premature underflow in the error tolerance function, // scale the error tolerances. // scale = 2.0 / (*relerr); ae = scale * abserr; // // Step by step integration. // for ( ; ; ) { hfaild = false; // // Set the smallest allowable stepsize. // hmin = 26.0 * eps * r8_abs ( *t ); // // Adjust the stepsize if necessary to hit the output point. // // Look ahead two steps to avoid drastic changes in the stepsize and // thus lessen the impact of output points on the code. // dt = tout - *t; if ( 2.0 * r8_abs ( h ) <= r8_abs ( dt ) ) { } else // // Will the next successful step complete the integration to the output point? // { if ( r8_abs ( dt ) <= r8_abs ( h ) ) { output = true; h = dt; } else { h = 0.5 * dt; } } // // Here begins the core integrator for taking a single step. // // The tolerances have been scaled to avoid premature underflow in // computing the error tolerance function ET. // To avoid problems with zero crossings, relative error is measured // using the average of the magnitudes of the solution at the // beginning and end of a step. // The error estimate formula has been grouped to control loss of // significance. // // To distinguish the various arguments, H is not permitted // to become smaller than 26 units of roundoff in T. // Practical limits on the change in the stepsize are enforced to // smooth the stepsize selection process and to avoid excessive // chattering on problems having discontinuities. // To prevent unnecessary failures, the code uses 9/10 the stepsize // it estimates will succeed. // // After a step failure, the stepsize is not allowed to increase for // the next attempted step. This makes the code more efficient on // problems having discontinuities and more effective in general // since local extrapolation is being used and extra caution seems // warranted. // // Test the number of derivative function evaluations. // If okay, try to advance the integration from T to T+H. // for ( ; ; ) { // // Have we done too much work? // if ( MAXNFE < nfe ) { kflag = 4; delete [] f1; delete [] f2; delete [] f3; delete [] f4; delete [] f5; return 4; } // // Advance an approximate solution over one step of length H. // r8_fehl ( neqn, y, *t, h, yp, f1, f2, f3, f4, f5, f1 ); nfe = nfe + 5; // // Compute and test allowable tolerances versus local error estimates // and remove scaling of tolerances. The relative error is // measured with respect to the average of the magnitudes of the // solution at the beginning and end of the step. // eeoet = 0.0; for ( k = 0; k < neqn; k++ ) { et = r8_abs ( y[k] ) + r8_abs ( f1[k] ) + ae; if ( et <= 0.0 ) { delete [] f1; delete [] f2; delete [] f3; delete [] f4; delete [] f5; return 5; } ee = r8_abs ( ( -2090.0 * yp[k] + ( 21970.0 * f3[k] - 15048.0 * f4[k] ) ) + ( 22528.0 * f2[k] - 27360.0 * f5[k] ) ); eeoet = r8_max ( eeoet, ee / et ); } esttol = r8_abs ( h ) * eeoet * scale / 752400.0; if ( esttol <= 1.0 ) { break; } // // Unsuccessful step. Reduce the stepsize, try again. // The decrease is limited to a factor of 1/10. // hfaild = true; output = false; if ( esttol < 59049.0 ) { s = 0.9 / pow ( esttol, 0.2 ); } else { s = 0.1; } h = s * h; if ( r8_abs ( h ) < hmin ) { kflag = 6; delete [] f1; delete [] f2; delete [] f3; delete [] f4; delete [] f5; return 6; } } // // We exited the loop because we took a successful step. // Store the solution for T+H, and evaluate the derivative there. // *t = *t + h; for ( i = 0; i < neqn; i++ ) { y[i] = f1[i]; } QTAIMODEIntegrator::r8_f ( *t, y, yp ); nfe = nfe + 1; // // Choose the next stepsize. The increase is limited to a factor of 5. // If the step failed, the next stepsize is not allowed to increase. // if ( 0.0001889568 < esttol ) { s = 0.9 / pow ( esttol, 0.2 ); } else { s = 5.0; } if ( hfaild ) { s = r8_min ( s, 1.0 ); } h = r8_sign ( h ) * r8_max ( s * r8_abs ( h ), hmin ); // // End of core integrator // // Should we take another step? // if ( output ) { *t = tout; delete [] f1; delete [] f2; delete [] f3; delete [] f4; delete [] f5; return 2; } if ( flag <= 0 ) { delete [] f1; delete [] f2; delete [] f3; delete [] f4; delete [] f5; return (-2); } } # undef MAXNFE } //****************************************************************************80 qreal QTAIMODEIntegrator::r8_sign ( qreal x ) //****************************************************************************80 // // Purpose: // // R8_SIGN returns the sign of an R8. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 27 March 2004 // // Author: // // John Burkardt // // Parameters: // // Input, qreal X, the number whose sign is desired. // // Output, qreal R8_SIGN, the sign of X. // { if ( x < 0.0 ) { return ( -1.0 ); } else { return ( +1.0 ); } } //****************************************************************************80 } // namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimwavefunction.cpp0000644000175000001440000004670712250371054025404 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include #include #include #include #include "qtaimwavefunction.h" namespace Avogadro { QTAIMWavefunction::QTAIMWavefunction() { m_initializationSuccessful = false; } bool QTAIMWavefunction::initializeWithWFNFile(const QString &fileName) { m_initializationSuccessful = false; QFile file(fileName); bool fileExists = file.exists(); if( !(fileExists) ) { m_initializationSuccessful = false; m_fileDoesNotExist = true; return m_initializationSuccessful; } else { m_fileDoesNotExist = false; } bool success; success=file.open(QIODevice::ReadOnly | QIODevice::Text); if( !(success) ) { m_initializationSuccessful = false; m_ioError = true; return m_initializationSuccessful; } else { m_ioError = false; } m_fileName=fileName; QTextStream in(&file); QString fileContents=in.readAll(); file.close(); QStringList fileContentsByLine(fileContents.split("\n")); // Title/Comment m_comment=fileContentsByLine.first(); fileContentsByLine.removeFirst(); m_numberOfMolecularOrbitals=fileContentsByLine.first().mid(8,15).toLongLong(); m_numberOfGaussianPrimitives=fileContentsByLine.first().mid(36,8).toLongLong();; m_numberOfNuclei=fileContentsByLine.first().mid(54,10).toLongLong();; fileContentsByLine.removeFirst(); // Maximum Number of Nuclei Due to Fixed Format if( m_numberOfNuclei > 999 ) { m_initializationSuccessful = false; m_tooManyNuclei = true; return m_initializationSuccessful; } else { m_tooManyNuclei = false ; } m_xNuclearCoordinates.resize(m_numberOfNuclei); m_yNuclearCoordinates.resize(m_numberOfNuclei); m_zNuclearCoordinates.resize(m_numberOfNuclei); m_nuclearCharges.resize(m_numberOfNuclei); for( qint64 i=0; i < m_numberOfNuclei ; ++i ) { m_xNuclearCoordinates[i]=fileContentsByLine.first().mid(24,13).toDouble(); m_yNuclearCoordinates[i]=fileContentsByLine.first().mid(36,12).toDouble(); m_zNuclearCoordinates[i]=fileContentsByLine.first().mid(48,12).toDouble(); m_nuclearCharges[i]=fileContentsByLine.first().mid(70,3).toLongLong(); fileContentsByLine.removeFirst(); } QList centerAssignmentsList; while( fileContentsByLine.first().startsWith("CENTRE ASSIGNMENTS") ) { QString line( fileContentsByLine.first().mid(20,-1) ); qint64 counter=0; while( counter < line.length() ) { centerAssignmentsList.append( line.mid(counter,3).toLongLong() ); counter=counter+3; } fileContentsByLine.removeFirst(); } m_xGaussianPrimitiveCenterCoordinates.resize(m_numberOfGaussianPrimitives); m_yGaussianPrimitiveCenterCoordinates.resize(m_numberOfGaussianPrimitives); m_zGaussianPrimitiveCenterCoordinates.resize(m_numberOfGaussianPrimitives); for( qint64 i=0 ; i < m_numberOfGaussianPrimitives ; ++i ) { m_xGaussianPrimitiveCenterCoordinates[i]=m_xNuclearCoordinates[ centerAssignmentsList.at(i) - 1]; m_yGaussianPrimitiveCenterCoordinates[i]=m_yNuclearCoordinates[ centerAssignmentsList.at(i) - 1]; m_zGaussianPrimitiveCenterCoordinates[i]=m_zNuclearCoordinates[ centerAssignmentsList.at(i) - 1]; } QList typeAssignmentsList; while( fileContentsByLine.first().startsWith("TYPE ASSIGNMENTS") ) { QString line( fileContentsByLine.first().mid(20,-1) ); QStringList splitLine( line.split(" ", QString::SkipEmptyParts) ); for( qint64 i=0 ; i < splitLine.length() ; ++i ) { typeAssignmentsList.append( splitLine.at(i).toLongLong() ); } fileContentsByLine.removeFirst(); } m_xGaussianPrimitiveAngularMomenta.resize(m_numberOfGaussianPrimitives); m_yGaussianPrimitiveAngularMomenta.resize(m_numberOfGaussianPrimitives); m_zGaussianPrimitiveAngularMomenta.resize(m_numberOfGaussianPrimitives); for( qint64 i=0 ; i < m_numberOfGaussianPrimitives ; ++i ) { switch(typeAssignmentsList.at(i)) { case 1: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 2: m_xGaussianPrimitiveAngularMomenta[i]=1; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 3: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=1; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 4: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=1; break; case 5: m_xGaussianPrimitiveAngularMomenta[i]=2; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 6: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=2; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 7: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=2; break; case 8: m_xGaussianPrimitiveAngularMomenta[i]=1; m_yGaussianPrimitiveAngularMomenta[i]=1; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 9: m_xGaussianPrimitiveAngularMomenta[i]=1; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=1; break; case 10: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=1; m_zGaussianPrimitiveAngularMomenta[i]=1; break; case 11: m_xGaussianPrimitiveAngularMomenta[i]=3; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 12: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=3; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 13: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=3; break; case 14: m_xGaussianPrimitiveAngularMomenta[i]=2; m_yGaussianPrimitiveAngularMomenta[i]=1; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 15: m_xGaussianPrimitiveAngularMomenta[i]=2; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=1; break; case 16: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=2; m_zGaussianPrimitiveAngularMomenta[i]=1; break; case 17: m_xGaussianPrimitiveAngularMomenta[i]=1; m_yGaussianPrimitiveAngularMomenta[i]=2; m_zGaussianPrimitiveAngularMomenta[i]=0; break; case 18: m_xGaussianPrimitiveAngularMomenta[i]=1; m_yGaussianPrimitiveAngularMomenta[i]=0; m_zGaussianPrimitiveAngularMomenta[i]=2; break; case 19: m_xGaussianPrimitiveAngularMomenta[i]=0; m_yGaussianPrimitiveAngularMomenta[i]=1; m_zGaussianPrimitiveAngularMomenta[i]=2; break; case 20: m_xGaussianPrimitiveAngularMomenta[i]=1; m_yGaussianPrimitiveAngularMomenta[i]=1; m_zGaussianPrimitiveAngularMomenta[i]=1; break; default: m_initializationSuccessful=false; m_maximumAngularMomentumExceeded=true; return m_initializationSuccessful; } } m_maximumAngularMomentumExceeded=false; QList exponentsList; while( fileContentsByLine.first().startsWith("EXPONENTS") ) { QString line( fileContentsByLine.first().mid(9,-1) ); QStringList splitLine( line.split(" ", QString::SkipEmptyParts) ); for( qint64 i=0 ; i < splitLine.length() ; ++i ) { QString str( splitLine.at(i) ); QString replacedString( str.replace("d","e",Qt::CaseSensitive).replace("D","e",Qt::CaseSensitive).replace("E","e",Qt::CaseSensitive) ); exponentsList.append( replacedString.toDouble() ); } fileContentsByLine.removeFirst(); } m_gaussianPrimitiveExponentCoefficients.resize(m_numberOfGaussianPrimitives); for( qint64 i=0 ; i < m_numberOfGaussianPrimitives ; ++i) { m_gaussianPrimitiveExponentCoefficients[i]=exponentsList.at(i); } m_totalEnergy = fileContentsByLine.last().mid(17,20).toDouble(); m_virialRatio = fileContentsByLine.last().mid(55,-1).toDouble(); fileContentsByLine.removeLast(); fileContentsByLine.removeLast(); if(fileContentsByLine.last().trimmed().contains("END DATA",Qt::CaseSensitive)) fileContentsByLine.removeLast(); QStringList moHeaderStringList; QStringList moCoefficientsStringList; QList moCoefficientsList; for( qint64 i=0; i< fileContentsByLine.length(); ++i) { if( fileContentsByLine.at(i).trimmed().startsWith("MO") ) { moHeaderStringList.append( fileContentsByLine.at(i) ); } else { moCoefficientsStringList.append( fileContentsByLine.at(i) ); } } QList molecularOrbitalOccupationNumbersList; QList molecularOrbitalEigenvaluesList; for( qint64 i=0; i < moHeaderStringList.length() ; ++i) { molecularOrbitalOccupationNumbersList.append( moHeaderStringList.at(i).mid(34,13).toDouble() ); molecularOrbitalEigenvaluesList.append( moHeaderStringList.at(i).mid(62,-1).toDouble() ); } m_molecularOrbitalOccupationNumbers.resize(m_numberOfMolecularOrbitals); for( qint64 i=0; i < m_numberOfMolecularOrbitals ; ++i ) m_molecularOrbitalOccupationNumbers[i]=molecularOrbitalOccupationNumbersList.at(i); m_molecularOrbitalEigenvalues.resize(m_numberOfMolecularOrbitals); for( qint64 i=0; i < m_numberOfMolecularOrbitals ; ++i ) m_molecularOrbitalEigenvalues[i]=molecularOrbitalEigenvaluesList.at(i); moCoefficientsStringList=moCoefficientsStringList.join(" ").split(" ", QString::SkipEmptyParts); for( qint64 i=0; i < moCoefficientsStringList.length() ; ++i) { QString str( moCoefficientsStringList.at(i) ); QString replacedString( str.replace("d","e",Qt::CaseSensitive).replace("D","e",Qt::CaseSensitive).replace("E","e",Qt::CaseSensitive) ); moCoefficientsList.append( replacedString.toDouble() ); } m_molecularOrbitalCoefficients.resize( m_numberOfMolecularOrbitals * m_numberOfGaussianPrimitives ); for( qint64 i=0; i < (m_numberOfMolecularOrbitals * m_numberOfGaussianPrimitives) ; ++i ) m_molecularOrbitalCoefficients[i]=moCoefficientsList.at(i); m_initializationSuccessful = true; return m_initializationSuccessful; } bool QTAIMWavefunction::initializeWithMoleculeProperties( Molecule*& mol ) { if( mol->property( "QTAIMNumberOfMolecularOrbitals" ).isValid() ) { QVariant numberOfMolecularOrbitalsVariant = mol->property( "QTAIMNumberOfMolecularOrbitals" ); m_numberOfMolecularOrbitals=numberOfMolecularOrbitalsVariant.toLongLong(); QVariant numberOfGaussianPrimitivesVariant = mol->property( "QTAIMNumberOfGaussianPrimitives" ); m_numberOfGaussianPrimitives=numberOfGaussianPrimitivesVariant.toLongLong(); QVariant numberOfNucleiVariant = mol->property( "QTAIMNumberOfNuclei" ); m_numberOfNuclei=numberOfNucleiVariant.toLongLong(); QVariant xNuclearCoordinatesVariant = mol->property( "QTAIMXNuclearCoordinates"); QVariant yNuclearCoordinatesVariant = mol->property( "QTAIMYNuclearCoordinates"); QVariant zNuclearCoordinatesVariant = mol->property( "QTAIMZNuclearCoordinates"); QVariant nuclearChargesVariant = mol->property( "QTAIMNuclearCharges" ); QVariantList xNuclearCoordinatesVariantList = xNuclearCoordinatesVariant.toList(); QVariantList yNuclearCoordinatesVariantList = yNuclearCoordinatesVariant.toList(); QVariantList zNuclearCoordinatesVariantList = zNuclearCoordinatesVariant.toList(); QVariantList nuclearChargesVariantList = nuclearChargesVariant.toList(); QList xNuclearCoordinatesList; QList yNuclearCoordinatesList; QList zNuclearCoordinatesList; QList nuclearChargesList; for( qint64 i=0 ; i < m_numberOfNuclei ; ++i ) { xNuclearCoordinatesList.append( xNuclearCoordinatesVariantList.at(i).toReal() ); yNuclearCoordinatesList.append( yNuclearCoordinatesVariantList.at(i).toReal() ); zNuclearCoordinatesList.append( zNuclearCoordinatesVariantList.at(i).toReal() ); nuclearChargesList.append( nuclearChargesVariantList.at(i).toLongLong() ); } m_xNuclearCoordinates=xNuclearCoordinatesList.toVector(); m_yNuclearCoordinates=yNuclearCoordinatesList.toVector(); m_zNuclearCoordinates=zNuclearCoordinatesList.toVector(); m_nuclearCharges=nuclearChargesList.toVector(); QVariant xGaussianPrimitiveCenterCoordinatesVariant = mol->property( "QTAIMXGaussianPrimitiveCenterCoordinates" ); QVariant yGaussianPrimitiveCenterCoordinatesVariant = mol->property( "QTAIMYGaussianPrimitiveCenterCoordinates" ); QVariant zGaussianPrimitiveCenterCoordinatesVariant = mol->property( "QTAIMZGaussianPrimitiveCenterCoordinates" ); QVariant xGaussianPrimitiveAngularMomentaVariant = mol->property( "QTAIMXGaussianPrimitiveAngularMomenta" ); QVariant yGaussianPrimitiveAngularMomentaVariant = mol->property( "QTAIMYGaussianPrimitiveAngularMomenta" ); QVariant zGaussianPrimitiveAngularMomentaVariant = mol->property( "QTAIMZGaussianPrimitiveAngularMomenta" ); QVariant gaussianPrimitiveExponentCoefficientsVariant = mol->property( "QTAIMGaussianPrimitiveExponentCoefficients" ); QVariantList xGaussianPrimitiveCenterCoordinatesVariantList = xGaussianPrimitiveCenterCoordinatesVariant.toList(); QVariantList yGaussianPrimitiveCenterCoordinatesVariantList = yGaussianPrimitiveCenterCoordinatesVariant.toList(); QVariantList zGaussianPrimitiveCenterCoordinatesVariantList = zGaussianPrimitiveCenterCoordinatesVariant.toList(); QVariantList xGaussianPrimitiveAngularMomentaVariantList = xGaussianPrimitiveAngularMomentaVariant.toList(); QVariantList yGaussianPrimitiveAngularMomentaVariantList = yGaussianPrimitiveAngularMomentaVariant.toList(); QVariantList zGaussianPrimitiveAngularMomentaVariantList = zGaussianPrimitiveAngularMomentaVariant.toList(); QVariantList gaussianPrimitiveExponentCoefficientsVariantList = gaussianPrimitiveExponentCoefficientsVariant.toList(); QList xGaussianPrimitiveCenterCoordinatesList; QList yGaussianPrimitiveCenterCoordinatesList; QList zGaussianPrimitiveCenterCoordinatesList; QList xGaussianPrimitiveAngularMomentaList; QList yGaussianPrimitiveAngularMomentaList; QList zGaussianPrimitiveAngularMomentaList; QList gaussianPrimitiveExponentCoefficientsList; for( qint64 p=0 ; p < m_numberOfGaussianPrimitives ; ++p ) { xGaussianPrimitiveCenterCoordinatesList.append(xGaussianPrimitiveCenterCoordinatesVariantList.at(p).toReal()); yGaussianPrimitiveCenterCoordinatesList.append(yGaussianPrimitiveCenterCoordinatesVariantList.at(p).toReal()); zGaussianPrimitiveCenterCoordinatesList.append(zGaussianPrimitiveCenterCoordinatesVariantList.at(p).toReal()); xGaussianPrimitiveAngularMomentaList.append(xGaussianPrimitiveAngularMomentaVariantList.at(p).toLongLong()); yGaussianPrimitiveAngularMomentaList.append(yGaussianPrimitiveAngularMomentaVariantList.at(p).toLongLong()); zGaussianPrimitiveAngularMomentaList.append(zGaussianPrimitiveAngularMomentaVariantList.at(p).toLongLong()); gaussianPrimitiveExponentCoefficientsList.append(gaussianPrimitiveExponentCoefficientsVariantList.at(p).toReal()); } m_xGaussianPrimitiveCenterCoordinates=xGaussianPrimitiveCenterCoordinatesList.toVector(); m_yGaussianPrimitiveCenterCoordinates=yGaussianPrimitiveCenterCoordinatesList.toVector(); m_zGaussianPrimitiveCenterCoordinates=zGaussianPrimitiveCenterCoordinatesList.toVector(); m_xGaussianPrimitiveAngularMomenta=xGaussianPrimitiveAngularMomentaList.toVector(); m_yGaussianPrimitiveAngularMomenta=yGaussianPrimitiveAngularMomentaList.toVector(); m_zGaussianPrimitiveAngularMomenta=zGaussianPrimitiveAngularMomentaList.toVector(); m_gaussianPrimitiveExponentCoefficients=gaussianPrimitiveExponentCoefficientsList.toVector(); QVariant molecularOrbitalOccupationNumbersVariant = mol->property( "QTAIMMolecularOrbitalOccupationNumbers" ); QVariant molecularOrbitalEigenvaluesVariant = mol->property( "QTAIMMolecularOrbitalEigenvalues" ); QVariant molecularOrbitalCoefficientsVariant = mol->property( "QTAIMMolecularOrbitalCoefficients" ); QVariantList molecularOrbitalOccupationNumbersVariantList = molecularOrbitalOccupationNumbersVariant.toList(); QVariantList molecularOrbitalEigenvaluesVariantList = molecularOrbitalEigenvaluesVariant.toList(); QVariantList molecularOrbitalCoefficientsVariantList = molecularOrbitalCoefficientsVariant.toList(); QList molecularOrbitalOccupationNumbersList; QList molecularOrbitalEigenvaluesList; QList molecularOrbitalCoefficientsList; for( qint64 m=0; m < m_numberOfMolecularOrbitals ; ++m ) { molecularOrbitalOccupationNumbersList.append(molecularOrbitalOccupationNumbersVariantList.at(m).toReal()); molecularOrbitalEigenvaluesList.append(molecularOrbitalEigenvaluesVariantList.at(m).toReal()); } for( qint64 i=0; i < (m_numberOfMolecularOrbitals * m_numberOfGaussianPrimitives) ; ++i) { molecularOrbitalCoefficientsList.append(molecularOrbitalCoefficientsVariantList.at(i).toReal()); } m_molecularOrbitalOccupationNumbers=molecularOrbitalOccupationNumbersList.toVector(); m_molecularOrbitalEigenvalues=molecularOrbitalEigenvaluesList.toVector(); m_molecularOrbitalCoefficients=molecularOrbitalCoefficientsList.toVector(); QVariant totalEnergyVariant = mol->property("QTAIMTotalEnergy"); QVariant virialRatioVariant = mol->property("QTAIMVirialRatio"); m_totalEnergy=totalEnergyVariant.toReal(); m_virialRatio=virialRatioVariant.toReal(); } return true; } } avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimextension.h0000644000175000001440000000372712250371054024350 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef QTAIMEXTENSION_H #define QTAIMEXTENSION_H #include #include #include #include "../../glpainter_p.h" namespace Avogadro { class QTAIMExtension : public Extension { Q_OBJECT AVOGADRO_EXTENSION("QTAIM", tr("QTAIM"), tr("QTAIM extension")) public: //! Constructor QTAIMExtension(QObject *parent=0); //! Deconstructor virtual ~QTAIMExtension(); virtual QList actions() const; virtual QString menuPath(QAction *action) const; virtual QDockWidget * dockWidget(); virtual QUndoCommand* performAction(QAction *action, GLWidget *widget); virtual void setMolecule(Molecule *molecule); private: QList m_actions; Molecule *m_molecule; private Q_SLOTS: }; class QTAIMExtensionFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_EXTENSION_FACTORY(QTAIMExtension) }; } // end namespace Avogadro #endif // QTAIMEXTENSION_H avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp0000644000175000001440000020631012250371054027313 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include #include "qtaimwavefunctionevaluator.h" namespace Avogadro { QTAIMWavefunctionEvaluator::QTAIMWavefunctionEvaluator(QTAIMWavefunction &wfn) { m_nmo=wfn.numberOfMolecularOrbitals(); m_nprim=wfn.numberOfGaussianPrimitives(); m_nnuc=wfn.numberOfNuclei(); m_nucxcoord=Map >(wfn.xNuclearCoordinates(),m_nnuc); m_nucycoord=Map >(wfn.yNuclearCoordinates(),m_nnuc); m_nuczcoord=Map >(wfn.zNuclearCoordinates(),m_nnuc); m_nucz=Map >(wfn.nuclearCharges(),m_nnuc); m_X0=Map >(wfn.xGaussianPrimitiveCenterCoordinates(),m_nprim,1); m_Y0=Map >(wfn.yGaussianPrimitiveCenterCoordinates(),m_nprim,1); m_Z0=Map >(wfn.zGaussianPrimitiveCenterCoordinates(),m_nprim,1); m_xamom=Map >(wfn.xGaussianPrimitiveAngularMomenta(),m_nprim,1); m_yamom=Map >(wfn.yGaussianPrimitiveAngularMomenta(),m_nprim,1); m_zamom=Map >(wfn.zGaussianPrimitiveAngularMomenta(),m_nprim,1); m_alpha=Map >(wfn.gaussianPrimitiveExponentCoefficients(),m_nprim,1); // TODO Implement screening for unoccupied molecular orbitals. m_occno=Map >(wfn.molecularOrbitalOccupationNumbers(),m_nmo,1); m_orbe=Map >(wfn.molecularOrbitalEigenvalues(),m_nmo,1); m_coef=Map >(wfn.molecularOrbitalCoefficients(),m_nmo,m_nprim); m_totalEnergy=wfn.totalEnergy(); m_virialRatio=wfn.virialRatio(); m_cutoff=log(1.e-15); m_cdg000.resize(m_nmo); m_cdg100.resize(m_nmo); m_cdg010.resize(m_nmo); m_cdg001.resize(m_nmo); m_cdg200.resize(m_nmo); m_cdg110.resize(m_nmo); m_cdg101.resize(m_nmo); m_cdg020.resize(m_nmo); m_cdg011.resize(m_nmo); m_cdg002.resize(m_nmo); m_cdg300.resize(m_nmo); m_cdg120.resize(m_nmo); m_cdg102.resize(m_nmo); m_cdg210.resize(m_nmo); m_cdg030.resize(m_nmo); m_cdg012.resize(m_nmo); m_cdg201.resize(m_nmo); m_cdg021.resize(m_nmo); m_cdg003.resize(m_nmo); m_cdg111.resize(m_nmo); m_cdg400.resize(m_nmo); m_cdg220.resize(m_nmo); m_cdg202.resize(m_nmo); m_cdg310.resize(m_nmo); m_cdg130.resize(m_nmo); m_cdg112.resize(m_nmo); m_cdg301.resize(m_nmo); m_cdg121.resize(m_nmo); m_cdg103.resize(m_nmo); m_cdg040.resize(m_nmo); m_cdg022.resize(m_nmo); m_cdg211.resize(m_nmo); m_cdg031.resize(m_nmo); m_cdg013.resize(m_nmo); m_cdg004.resize(m_nmo); } qreal QTAIMWavefunctionEvaluator::molecularOrbital( const qint64 mo, const Matrix xyz ) { qreal value=0.0; for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qreal ax0 = ipow( xx0, m_xamom(p) ); qreal ay0 = ipow( yy0, m_yamom(p) ); qreal az0 = ipow( zz0, m_zamom(p) ); qreal b0 = exp( b0arg ); qreal dg000 = ax0*ay0*az0*b0; value += m_coef(mo,p)*dg000; } } return value; } qreal QTAIMWavefunctionEvaluator::electronDensity( const Matrix xyz ) { qreal value; m_cdg000.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qreal ax0 = ipow( xx0, m_xamom(p) ); qreal ay0 = ipow( yy0, m_yamom(p) ); qreal az0 = ipow( zz0, m_zamom(p) ); qreal b0 = exp(b0arg); qreal dg000 = ax0*ay0*az0*b0; for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; } } } value=0.0; for( qint64 m=0 ; m < m_nmo ; ++m ) { value += m_occno(m)*ipow(m_cdg000(m),2); } return value; } const Matrix QTAIMWavefunctionEvaluator::gradientOfElectronDensity(Matrix xyz) { Matrix value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal b0 = exp(b0arg); qreal bx1= -2*m_alpha(p)*xx0; qreal by1= -2*m_alpha(p)*yy0; qreal bz1= -2*m_alpha(p)*zz0; qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; } } } value.setZero(); for( qint64 m=0 ; m < m_nmo ; ++m ) { value(0) += m_occno(m)*m_cdg100(m)*m_cdg000(m); value(1) += m_occno(m)*m_cdg010(m)*m_cdg000(m); value(2) += m_occno(m)*m_cdg001(m)*m_cdg000(m); } return value; } const Matrix QTAIMWavefunctionEvaluator::hessianOfElectronDensity( const Matrix xyz ) { Matrix value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); m_cdg200.setZero(); m_cdg020.setZero(); m_cdg002.setZero(); m_cdg110.setZero(); m_cdg101.setZero(); m_cdg011.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qint64 aax2=m_xamom(p)*(m_xamom(p)-1); qint64 aay2=m_yamom(p)*(m_yamom(p)-1); qint64 aaz2=m_zamom(p)*(m_zamom(p)-1); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal ax2; qreal ay2; qreal az2; if ( m_xamom(p) < 2 ) { ax2=zero; } else if( m_xamom(p) == 2 ) { ax2=one; } else { ax2=aax2*ipow(xx0,m_xamom(p)-2); } if ( m_yamom(p) < 2 ) { ay2=zero; } else if( m_yamom(p) == 2 ) { ay2=one; } else { ay2=aay2*ipow(yy0,m_yamom(p)-2); } if ( m_zamom(p) < 2 ) { az2=zero; } else if( m_zamom(p) == 2 ) { az2=one; } else { az2=aaz2*ipow(zz0,m_zamom(p)-2); } qreal b0 = exp(b0arg); qreal bx1 = -2*m_alpha(p)*xx0; qreal by1 = -2*m_alpha(p)*yy0; qreal bz1 = -2*m_alpha(p)*zz0; qreal bx2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(xx0,2)); qreal by2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(yy0,2)); qreal bz2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(zz0,2)); qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); qreal dg200 = ay0*az0*b0*(ax2+2*ax1*bx1+ax0*bx2); qreal dg020 = ax0*az0*b0*(ay2+2*ay1*by1+ay0*by2); qreal dg002 = ax0*ay0*b0*(az2+2*az1*bz1+az0*bz2); qreal dg110 = az0*b0*(ax1+ax0*bx1)*(ay1+ay0*by1); qreal dg101 = ay0*b0*(ax1+ax0*bx1)*(az1+az0*bz1); qreal dg011 = ax0*b0*(ay1+ay0*by1)*(az1+az0*bz1); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; m_cdg200(m) += m_coef(m,p) * dg200; m_cdg020(m) += m_coef(m,p) * dg020; m_cdg002(m) += m_coef(m,p) * dg002; m_cdg110(m) += m_coef(m,p) * dg110; m_cdg101(m) += m_coef(m,p) * dg101; m_cdg011(m) += m_coef(m,p) * dg011; } } } value.setZero(); for( qint64 m=0 ; m < m_nmo ; ++m ) { value(0,0) += 2*m_occno(m)*(ipow(m_cdg100(m),2)+m_cdg000(m)*m_cdg200(m)); value(1,1) += 2*m_occno(m)*(ipow(m_cdg010(m),2)+m_cdg000(m)*m_cdg020(m)); value(2,2) += 2*m_occno(m)*(ipow(m_cdg001(m),2)+m_cdg000(m)*m_cdg002(m)); value(0,1) += 2*m_occno(m)*(m_cdg100(m)*m_cdg010(m)+m_cdg000(m)*m_cdg110(m)); value(0,2) += 2*m_occno(m)*(m_cdg100(m)*m_cdg001(m)+m_cdg000(m)*m_cdg101(m)); value(1,2) += 2*m_occno(m)*(m_cdg010(m)*m_cdg001(m)+m_cdg000(m)*m_cdg011(m)); } value(1,0)=value(0,1); value(2,0)=value(0,2); value(2,1)=value(1,2); return value; } const Matrix QTAIMWavefunctionEvaluator::gradientAndHessianOfElectronDensity( const Matrix xyz ) { Matrix gValue; Matrix hValue; Matrix value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); m_cdg200.setZero(); m_cdg020.setZero(); m_cdg002.setZero(); m_cdg110.setZero(); m_cdg101.setZero(); m_cdg011.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qint64 aax2=m_xamom(p)*(m_xamom(p)-1); qint64 aay2=m_yamom(p)*(m_yamom(p)-1); qint64 aaz2=m_zamom(p)*(m_zamom(p)-1); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal ax2; qreal ay2; qreal az2; if ( m_xamom(p) < 2 ) { ax2=zero; } else if( m_xamom(p) == 2 ) { ax2=one; } else { ax2=aax2*ipow(xx0,m_xamom(p)-2); } if ( m_yamom(p) < 2 ) { ay2=zero; } else if( m_yamom(p) == 2 ) { ay2=one; } else { ay2=aay2*ipow(yy0,m_yamom(p)-2); } if ( m_zamom(p) < 2 ) { az2=zero; } else if( m_zamom(p) == 2 ) { az2=one; } else { az2=aaz2*ipow(zz0,m_zamom(p)-2); } qreal b0 = exp(b0arg); qreal bx1 = -2*m_alpha(p)*xx0; qreal by1 = -2*m_alpha(p)*yy0; qreal bz1 = -2*m_alpha(p)*zz0; qreal bx2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(xx0,2)); qreal by2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(yy0,2)); qreal bz2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(zz0,2)); qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); qreal dg200 = ay0*az0*b0*(ax2+2*ax1*bx1+ax0*bx2); qreal dg020 = ax0*az0*b0*(ay2+2*ay1*by1+ay0*by2); qreal dg002 = ax0*ay0*b0*(az2+2*az1*bz1+az0*bz2); qreal dg110 = az0*b0*(ax1+ax0*bx1)*(ay1+ay0*by1); qreal dg101 = ay0*b0*(ax1+ax0*bx1)*(az1+az0*bz1); qreal dg011 = ax0*b0*(ay1+ay0*by1)*(az1+az0*bz1); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; m_cdg200(m) += m_coef(m,p) * dg200; m_cdg020(m) += m_coef(m,p) * dg020; m_cdg002(m) += m_coef(m,p) * dg002; m_cdg110(m) += m_coef(m,p) * dg110; m_cdg101(m) += m_coef(m,p) * dg101; m_cdg011(m) += m_coef(m,p) * dg011; } } } gValue.setZero(); for( qint64 m=0 ; m < m_nmo ; ++m ) { gValue(0) += m_occno(m)*m_cdg100(m)*m_cdg000(m); gValue(1) += m_occno(m)*m_cdg010(m)*m_cdg000(m); gValue(2) += m_occno(m)*m_cdg001(m)*m_cdg000(m); } hValue.setZero(); for( qint64 m=0 ; m < m_nmo ; ++m ) { hValue(0,0) += 2*m_occno(m)*(ipow(m_cdg100(m),2)+m_cdg000(m)*m_cdg200(m)); hValue(1,1) += 2*m_occno(m)*(ipow(m_cdg010(m),2)+m_cdg000(m)*m_cdg020(m)); hValue(2,2) += 2*m_occno(m)*(ipow(m_cdg001(m),2)+m_cdg000(m)*m_cdg002(m)); hValue(0,1) += 2*m_occno(m)*(m_cdg100(m)*m_cdg010(m)+m_cdg000(m)*m_cdg110(m)); hValue(0,2) += 2*m_occno(m)*(m_cdg100(m)*m_cdg001(m)+m_cdg000(m)*m_cdg101(m)); hValue(1,2) += 2*m_occno(m)*(m_cdg010(m)*m_cdg001(m)+m_cdg000(m)*m_cdg011(m)); } hValue(1,0)=hValue(0,1); hValue(2,0)=hValue(0,2); hValue(2,1)=hValue(1,2); value(0,0) = gValue(0); value(1,0) = gValue(1); value(2,0) = gValue(2); value(0,1) = hValue(0,0); value(1,1) = hValue(1,0); value(2,1) = hValue(2,0); value(0,2) = hValue(0,1); value(1,2) = hValue(1,1); value(2,2) = hValue(2,1); value(0,3) = hValue(0,2); value(1,3) = hValue(1,2); value(2,3) = hValue(2,2); return value; } qreal QTAIMWavefunctionEvaluator::laplacianOfElectronDensity( const Matrix xyz ) { qreal value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); m_cdg200.setZero(); m_cdg020.setZero(); m_cdg002.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qint64 aax2=m_xamom(p)*(m_xamom(p)-1); qint64 aay2=m_yamom(p)*(m_yamom(p)-1); qint64 aaz2=m_zamom(p)*(m_zamom(p)-1); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal ax2; qreal ay2; qreal az2; if ( m_xamom(p) < 2 ) { ax2=zero; } else if( m_xamom(p) == 2 ) { ax2=one; } else { ax2=aax2*ipow(xx0,m_xamom(p)-2); } if ( m_yamom(p) < 2 ) { ay2=zero; } else if( m_yamom(p) == 2 ) { ay2=one; } else { ay2=aay2*ipow(yy0,m_yamom(p)-2); } if ( m_zamom(p) < 2 ) { az2=zero; } else if( m_zamom(p) == 2 ) { az2=one; } else { az2=aaz2*ipow(zz0,m_zamom(p)-2); } qreal b0 = exp(b0arg); qreal bx1 = -2*m_alpha(p)*xx0; qreal by1 = -2*m_alpha(p)*yy0; qreal bz1 = -2*m_alpha(p)*zz0; qreal bx2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(xx0,2)); qreal by2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(yy0,2)); qreal bz2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(zz0,2)); qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); qreal dg200 = ay0*az0*b0*(ax2+2*ax1*bx1+ax0*bx2); qreal dg020 = ax0*az0*b0*(ay2+2*ay1*by1+ay0*by2); qreal dg002 = ax0*ay0*b0*(az2+2*az1*bz1+az0*bz2); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; m_cdg200(m) += m_coef(m,p) * dg200; m_cdg020(m) += m_coef(m,p) * dg020; m_cdg002(m) += m_coef(m,p) * dg002; } } } value=0.0; for( qint64 m=0 ; m < m_nmo ; ++m ) { value += 2*m_occno(m)*(ipow(m_cdg100(m),2)+m_cdg000(m)*m_cdg200(m)) +2*m_occno(m)*(ipow(m_cdg010(m),2)+m_cdg000(m)*m_cdg020(m)) +2*m_occno(m)*(ipow(m_cdg001(m),2)+m_cdg000(m)*m_cdg002(m)); } return value; } const Matrix QTAIMWavefunctionEvaluator::gradientOfElectronDensityLaplacian( const Matrix xyz ) { Matrix value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); m_cdg200.setZero(); m_cdg020.setZero(); m_cdg002.setZero(); m_cdg110.setZero(); m_cdg101.setZero(); m_cdg011.setZero(); m_cdg300.setZero(); m_cdg120.setZero(); m_cdg102.setZero(); m_cdg210.setZero(); m_cdg030.setZero(); m_cdg012.setZero(); m_cdg201.setZero(); m_cdg021.setZero(); m_cdg003.setZero(); // m_cdg111.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qint64 aax2=m_xamom(p)*(m_xamom(p)-1); qint64 aay2=m_yamom(p)*(m_yamom(p)-1); qint64 aaz2=m_zamom(p)*(m_zamom(p)-1); qint64 aax3=m_xamom(p)*(m_xamom(p)-1)*(m_xamom(p)-2); qint64 aay3=m_yamom(p)*(m_yamom(p)-1)*(m_yamom(p)-2); qint64 aaz3=m_zamom(p)*(m_zamom(p)-1)*(m_zamom(p)-2); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal ax2; qreal ay2; qreal az2; if ( m_xamom(p) < 2 ) { ax2=zero; } else if( m_xamom(p) == 2 ) { ax2=one; } else { ax2=aax2*ipow(xx0,m_xamom(p)-2); } if ( m_yamom(p) < 2 ) { ay2=zero; } else if( m_yamom(p) == 2 ) { ay2=one; } else { ay2=aay2*ipow(yy0,m_yamom(p)-2); } if ( m_zamom(p) < 2 ) { az2=zero; } else if( m_zamom(p) == 2 ) { az2=one; } else { az2=aaz2*ipow(zz0,m_zamom(p)-2); } qreal ax3; qreal ay3; qreal az3; if ( m_xamom(p) < 3 ) { ax3=zero; } else if( m_xamom(p) == 3 ) { ax3=one; } else { ax3=aax3*ipow(xx0,m_xamom(p)-3); } if ( m_yamom(p) < 3 ) { ay3=zero; } else if( m_yamom(p) == 3 ) { ay3=one; } else { ay3=aay3*ipow(yy0,m_yamom(p)-3); } if ( m_zamom(p) < 3 ) { az3=zero; } else if( m_zamom(p) == 3 ) { az3=one; } else { az3=aaz3*ipow(zz0,m_zamom(p)-3); } qreal b0 = exp(b0arg); qreal bx1 = -2*m_alpha(p)*xx0; qreal by1 = -2*m_alpha(p)*yy0; qreal bz1 = -2*m_alpha(p)*zz0; qreal bx2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(xx0,2)); qreal by2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(yy0,2)); qreal bz2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(zz0,2)); qreal bx3 = (12*ipow(m_alpha(p),2)*xx0)-(8*ipow(m_alpha(p),3) * ipow(xx0,3)); qreal by3 = (12*ipow(m_alpha(p),2)*yy0)-(8*ipow(m_alpha(p),3) * ipow(yy0,3)); qreal bz3 = (12*ipow(m_alpha(p),2)*zz0)-(8*ipow(m_alpha(p),3) * ipow(zz0,3)); qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); qreal dg200 = ay0*az0*b0*(ax2+2*ax1*bx1+ax0*bx2); qreal dg020 = ax0*az0*b0*(ay2+2*ay1*by1+ay0*by2); qreal dg002 = ax0*ay0*b0*(az2+2*az1*bz1+az0*bz2); qreal dg110 = az0*b0*(ax1+ax0*bx1)*(ay1+ay0*by1); qreal dg101 = ay0*b0*(ax1+ax0*bx1)*(az1+az0*bz1); qreal dg011 = ax0*b0*(ay1+ay0*by1)*(az1+az0*bz1); qreal dg300 = ay0*az0*b0*(ax3+3*ax2*bx1+3*ax1*bx2+ax0*bx3); qreal dg030 = ax0*az0*b0*(ay3+3*ay2*by1+3*ay1*by2+ay0*by3); qreal dg003 = ax0*ay0*b0*(az3+3*az2*bz1+3*az1*bz2+az0*bz3); qreal dg210 = az0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(ay1+ay0*by1); qreal dg201 = ay0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(az1+az0*bz1); qreal dg120 = az0*b0*(ax1+ax0*bx1)*(ay2+2*ay1*by1+ay0*by2); qreal dg021 = ax0*b0*(ay2+2*ay1*by1+ay0*by2)*(az1+az0*bz1); qreal dg102 = ay0*b0*(ax1+ax0*bx1)*(az2+2*az1*bz1+az0*bz2); qreal dg012 = ax0*b0*(ay1+ay0*by1)*(az2+2*az1*bz1+az0*bz2); // qreal dg111 = b0*(ax1+ax0*bx1)*(ay1+ay0*by1)*(az1+az0*bz1); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; m_cdg200(m) += m_coef(m,p) * dg200; m_cdg020(m) += m_coef(m,p) * dg020; m_cdg002(m) += m_coef(m,p) * dg002; m_cdg110(m) += m_coef(m,p) * dg110; m_cdg101(m) += m_coef(m,p) * dg101; m_cdg011(m) += m_coef(m,p) * dg011; m_cdg300(m) += m_coef(m,p) * dg300; m_cdg030(m) += m_coef(m,p) * dg030; m_cdg003(m) += m_coef(m,p) * dg003; m_cdg210(m) += m_coef(m,p) * dg210; m_cdg201(m) += m_coef(m,p) * dg201; m_cdg120(m) += m_coef(m,p) * dg120; m_cdg021(m) += m_coef(m,p) * dg021; m_cdg102(m) += m_coef(m,p) * dg102; m_cdg012(m) += m_coef(m,p) * dg012; // m_cdg111(m) += m_coef(m,p) * dg111; } } } qreal deriv300=zero; qreal deriv030=zero; qreal deriv003=zero; qreal deriv210=zero; qreal deriv201=zero; qreal deriv120=zero; qreal deriv021=zero; qreal deriv102=zero; qreal deriv012=zero; // qreal deriv111=zero; for( qint64 m=0 ; m < m_nmo ; ++m ) { deriv300+=(m_occno(m)*( 6*m_cdg100(m)*m_cdg200(m)+2*m_cdg000(m)*m_cdg300(m) )); deriv030+=(m_occno(m)*( 6*m_cdg010(m)*m_cdg020(m)+2*m_cdg000(m)*m_cdg030(m) )); deriv003+=(m_occno(m)*( 6*m_cdg001(m)*m_cdg002(m)+2*m_cdg000(m)*m_cdg003(m) )); deriv210+=(m_occno(m)*( 2*(2*m_cdg100(m)*m_cdg110(m)+m_cdg010(m)*m_cdg200(m)+m_cdg000(m)*m_cdg210(m)) )); deriv201+=(m_occno(m)*( 2*(2*m_cdg100(m)*m_cdg101(m)+m_cdg001(m)*m_cdg200(m)+m_cdg000(m)*m_cdg201(m)) )); deriv120+=(m_occno(m)*( 2*(m_cdg020(m)*m_cdg100(m)+2*m_cdg010(m)*m_cdg110(m)+m_cdg000(m)*m_cdg120(m)) )); deriv021+=(m_occno(m)*( 2*(2*m_cdg010(m)*m_cdg011(m)+m_cdg001(m)*m_cdg020(m)+m_cdg000(m)*m_cdg021(m)) )); deriv102+=(m_occno(m)*( 2*(m_cdg002(m)*m_cdg100(m)+2*m_cdg001(m)*m_cdg101(m)+m_cdg000(m)*m_cdg102(m)) )); deriv012+=(m_occno(m)*( 2*(m_cdg002(m)*m_cdg010(m)+2*m_cdg001(m)*m_cdg011(m)+m_cdg000(m)*m_cdg012(m)) )); // deriv111+=(m_occno(m)*( 2*(m_cdg011(m)*m_cdg100(m)+m_cdg010(m)*m_cdg101(m)+m_cdg001(m)*m_cdg110(m)+m_cdg000(m)*m_cdg111(m)) )); } value(0)=deriv300+deriv120+deriv102; value(1)=deriv210+deriv030+deriv012; value(2)=deriv201+deriv021+deriv003; return value; } const Matrix QTAIMWavefunctionEvaluator::hessianOfElectronDensityLaplacian( const Matrix xyz ) { Matrix value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); m_cdg200.setZero(); m_cdg020.setZero(); m_cdg002.setZero(); m_cdg110.setZero(); m_cdg101.setZero(); m_cdg011.setZero(); m_cdg300.setZero(); m_cdg120.setZero(); m_cdg102.setZero(); m_cdg210.setZero(); m_cdg030.setZero(); m_cdg012.setZero(); m_cdg201.setZero(); m_cdg021.setZero(); m_cdg003.setZero(); m_cdg111.setZero(); m_cdg400.setZero(); m_cdg040.setZero(); m_cdg004.setZero(); m_cdg310.setZero(); m_cdg301.setZero(); m_cdg130.setZero(); m_cdg031.setZero(); m_cdg103.setZero(); m_cdg013.setZero(); m_cdg220.setZero(); m_cdg202.setZero(); m_cdg022.setZero(); m_cdg211.setZero(); m_cdg121.setZero(); m_cdg112.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qint64 aax2=m_xamom(p)*(m_xamom(p)-1); qint64 aay2=m_yamom(p)*(m_yamom(p)-1); qint64 aaz2=m_zamom(p)*(m_zamom(p)-1); qint64 aax3=m_xamom(p)*(m_xamom(p)-1)*(m_xamom(p)-2); qint64 aay3=m_yamom(p)*(m_yamom(p)-1)*(m_yamom(p)-2); qint64 aaz3=m_zamom(p)*(m_zamom(p)-1)*(m_zamom(p)-2); qint64 aax4=m_xamom(p)*(m_xamom(p)-1)*(m_xamom(p)-2)*(m_xamom(p)-3); qint64 aay4=m_yamom(p)*(m_yamom(p)-1)*(m_yamom(p)-2)*(m_xamom(p)-3); qint64 aaz4=m_zamom(p)*(m_zamom(p)-1)*(m_zamom(p)-2)*(m_xamom(p)-3); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal ax2; qreal ay2; qreal az2; if ( m_xamom(p) < 2 ) { ax2=zero; } else if( m_xamom(p) == 2 ) { ax2=one; } else { ax2=aax2*ipow(xx0,m_xamom(p)-2); } if ( m_yamom(p) < 2 ) { ay2=zero; } else if( m_yamom(p) == 2 ) { ay2=one; } else { ay2=aay2*ipow(yy0,m_yamom(p)-2); } if ( m_zamom(p) < 2 ) { az2=zero; } else if( m_zamom(p) == 2 ) { az2=one; } else { az2=aaz2*ipow(zz0,m_zamom(p)-2); } qreal ax3; qreal ay3; qreal az3; if ( m_xamom(p) < 3 ) { ax3=zero; } else if( m_xamom(p) == 3 ) { ax3=one; } else { ax3=aax3*ipow(xx0,m_xamom(p)-3); } if ( m_yamom(p) < 3 ) { ay3=zero; } else if( m_yamom(p) == 3 ) { ay3=one; } else { ay3=aay3*ipow(yy0,m_yamom(p)-3); } if ( m_zamom(p) < 3 ) { az3=zero; } else if( m_zamom(p) == 3 ) { az3=one; } else { az3=aaz3*ipow(zz0,m_zamom(p)-3); } qreal ax4; qreal ay4; qreal az4; if ( m_xamom(p) < 4 ) { ax4=zero; } else if( m_xamom(p) == 4 ) { ax4=one; } else { ax4=aax4*ipow(xx0,m_xamom(p)-4); } if ( m_yamom(p) < 4 ) { ay4=zero; } else if( m_yamom(p) == 4 ) { ay4=one; } else { ay4=aay4*ipow(yy0,m_yamom(p)-4); } if ( m_zamom(p) < 4 ) { az4=zero; } else if( m_zamom(p) == 4 ) { az4=one; } else { az4=aaz4*ipow(zz0,m_zamom(p)-4); } qreal b0 = exp(b0arg); qreal bx1 = -2*m_alpha(p)*xx0; qreal by1 = -2*m_alpha(p)*yy0; qreal bz1 = -2*m_alpha(p)*zz0; qreal bx2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(xx0,2)); qreal by2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(yy0,2)); qreal bz2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(zz0,2)); qreal bx3 = (12*ipow(m_alpha(p),2)*xx0)-(8*ipow(m_alpha(p),3) * ipow(xx0,3)); qreal by3 = (12*ipow(m_alpha(p),2)*yy0)-(8*ipow(m_alpha(p),3) * ipow(yy0,3)); qreal bz3 = (12*ipow(m_alpha(p),2)*zz0)-(8*ipow(m_alpha(p),3) * ipow(zz0,3)); qreal bx4 = (12*ipow(m_alpha(p),2))-(48*ipow(m_alpha(p),3) * ipow(xx0,2))+(16*ipow(m_alpha(p),4) * ipow(xx0,4)); qreal by4 = (12*ipow(m_alpha(p),2))-(48*ipow(m_alpha(p),3) * ipow(yy0,2))+(16*ipow(m_alpha(p),4) * ipow(yy0,4)); qreal bz4 = (12*ipow(m_alpha(p),2))-(48*ipow(m_alpha(p),3) * ipow(zz0,2))+(16*ipow(m_alpha(p),4) * ipow(zz0,4)); qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); qreal dg200 = ay0*az0*b0*(ax2+2*ax1*bx1+ax0*bx2); qreal dg020 = ax0*az0*b0*(ay2+2*ay1*by1+ay0*by2); qreal dg002 = ax0*ay0*b0*(az2+2*az1*bz1+az0*bz2); qreal dg110 = az0*b0*(ax1+ax0*bx1)*(ay1+ay0*by1); qreal dg101 = ay0*b0*(ax1+ax0*bx1)*(az1+az0*bz1); qreal dg011 = ax0*b0*(ay1+ay0*by1)*(az1+az0*bz1); qreal dg300 = ay0*az0*b0*(ax3+3*ax2*bx1+3*ax1*bx2+ax0*bx3); qreal dg030 = ax0*az0*b0*(ay3+3*ay2*by1+3*ay1*by2+ay0*by3); qreal dg003 = ax0*ay0*b0*(az3+3*az2*bz1+3*az1*bz2+az0*bz3); qreal dg210 = az0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(ay1+ay0*by1); qreal dg201 = ay0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(az1+az0*bz1); qreal dg120 = az0*b0*(ax1+ax0*bx1)*(ay2+2*ay1*by1+ay0*by2); qreal dg021 = ax0*b0*(ay2+2*ay1*by1+ay0*by2)*(az1+az0*bz1); qreal dg102 = ay0*b0*(ax1+ax0*bx1)*(az2+2*az1*bz1+az0*bz2); qreal dg012 = ax0*b0*(ay1+ay0*by1)*(az2+2*az1*bz1+az0*bz2); qreal dg111 = b0*(ax1+ax0*bx1)*(ay1+ay0*by1)*(az1+az0*bz1); qreal dg400 = ay0*az0*b0*(ax4+4*ax3*bx1+6*ax2*bx2+4*ax1*bx3+ax0*bx4); qreal dg040 = ax0*az0*b0*(ay4+4*ay3*by1+6*ay2*by2+4*ay1*by3+ay0*by4); qreal dg004 = ax0*ay0*b0*(az4+4*az3*bz1+6*az2*bz2+4*az1*bz3+az0*bz4); qreal dg310 = az0*b0*(ax3+3*ax2*bx1+3*ax1*bx2+ax0*bx3)*(ay1+ay0*by1); qreal dg301 = ay0*b0*(ax3+3*ax2*bx1+3*ax1*bx2+ax0*bx3)*(az1+az0*bz1); qreal dg130 = az0*b0*(ax1+ax0*bx1)*(ay3+3*ay2*by1+3*ay1*by2+ay0*by3); qreal dg031 = ax0*b0*(ay3+3*ay2*by1+3*ay1*by2+ay0*by3)*(az1+az0*bz1); qreal dg103 = ay0*b0*(ax1+ax0*bx1)*(az3+3*az2*bz1+3*az1*bz2+az0*bz3); qreal dg013 = ax0*b0*(ay1+ay0*by1)*(az3+3*az2*bz1+3*az1*bz2+az0*bz3); qreal dg220 = az0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(ay2+2*ay1*by1+ay0*by2); qreal dg202 = ay0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(az2+2*az1*bz1+az0*bz2); qreal dg022 = ax0*b0*(ay2+2*ay1*by1+ay0*by2)*(az2+2*az1*bz1+az0*bz2); qreal dg211 = b0*(ax2+2*ax1*bx1+ax0*bx2)*(ay1+ay0*by1)*(az1+az0*bz1); qreal dg121 = b0*(ax1+ax0*bx1)*(ay2+2*ay1*by1+ay0*by2)*(az1+az0*bz1); qreal dg112 = b0*(ax1+ax0*bx1)*(ay1+ay0*by1)*(az2+2*az1*bz1+az0*bz2); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; m_cdg200(m) += m_coef(m,p) * dg200; m_cdg020(m) += m_coef(m,p) * dg020; m_cdg002(m) += m_coef(m,p) * dg002; m_cdg110(m) += m_coef(m,p) * dg110; m_cdg101(m) += m_coef(m,p) * dg101; m_cdg011(m) += m_coef(m,p) * dg011; m_cdg300(m) += m_coef(m,p) * dg300; m_cdg030(m) += m_coef(m,p) * dg030; m_cdg003(m) += m_coef(m,p) * dg003; m_cdg210(m) += m_coef(m,p) * dg210; m_cdg201(m) += m_coef(m,p) * dg201; m_cdg120(m) += m_coef(m,p) * dg120; m_cdg021(m) += m_coef(m,p) * dg021; m_cdg102(m) += m_coef(m,p) * dg102; m_cdg012(m) += m_coef(m,p) * dg012; m_cdg111(m) += m_coef(m,p) * dg111; m_cdg400(m) += m_coef(m,p) * dg400; m_cdg040(m) += m_coef(m,p) * dg040; m_cdg004(m) += m_coef(m,p) * dg004; m_cdg310(m) += m_coef(m,p) * dg310; m_cdg301(m) += m_coef(m,p) * dg301; m_cdg130(m) += m_coef(m,p) * dg130; m_cdg031(m) += m_coef(m,p) * dg031; m_cdg103(m) += m_coef(m,p) * dg103; m_cdg013(m) += m_coef(m,p) * dg013; m_cdg220(m) += m_coef(m,p) * dg220; m_cdg202(m) += m_coef(m,p) * dg202; m_cdg022(m) += m_coef(m,p) * dg022; m_cdg211(m) += m_coef(m,p) * dg211; m_cdg121(m) += m_coef(m,p) * dg121; m_cdg112(m) += m_coef(m,p) * dg112; } } } qreal deriv400=zero; qreal deriv040=zero; qreal deriv004=zero; qreal deriv310=zero; qreal deriv301=zero; qreal deriv130=zero; qreal deriv031=zero; qreal deriv103=zero; qreal deriv013=zero; qreal deriv220=zero; qreal deriv202=zero; qreal deriv022=zero; qreal deriv211=zero; qreal deriv121=zero; qreal deriv112=zero; for( qint64 m=0 ; m < m_nmo ; ++m ) { deriv400+=(m_occno(m)*(6*ipow(m_cdg200(m),2)+8*m_cdg100(m)*m_cdg300(m)+2*m_cdg000(m)*m_cdg400(m))); deriv040+=(m_occno(m)*(6*ipow(m_cdg020(m),2)+8*m_cdg010(m)*m_cdg030(m)+2*m_cdg000(m)*m_cdg040(m))); deriv004+=(m_occno(m)*(6*ipow(m_cdg002(m),2)+8*m_cdg001(m)*m_cdg003(m)+2*m_cdg000(m)*m_cdg004(m))); deriv310+=(m_occno(m)*(2*(3*m_cdg110(m)*m_cdg200(m)+3*m_cdg100(m)*m_cdg210(m)+m_cdg010(m)*m_cdg300(m)+m_cdg000(m)*m_cdg310(m)))); deriv301+=(m_occno(m)*(2*(3*m_cdg101(m)*m_cdg200(m)+3*m_cdg100(m)*m_cdg201(m)+m_cdg001(m)*m_cdg300(m)+m_cdg000(m)*m_cdg301(m)))); deriv130+=(m_occno(m)*(2*(m_cdg030(m)*m_cdg100(m)+3*m_cdg020(m)*m_cdg110(m)+3*m_cdg010(m)*m_cdg120(m)+m_cdg000(m)*m_cdg130(m)))); deriv031+=(m_occno(m)*(2*(3*m_cdg011(m)*m_cdg020(m)+3*m_cdg010(m)*m_cdg021(m)+m_cdg001(m)*m_cdg030(m)+m_cdg000(m)*m_cdg031(m)))); deriv103+=(m_occno(m)*(2*(m_cdg003(m)*m_cdg100(m)+3*m_cdg002(m)*m_cdg101(m)+3*m_cdg001(m)*m_cdg102(m)+m_cdg000(m)*m_cdg103(m)))); deriv013+=(m_occno(m)*(2*(m_cdg003(m)*m_cdg010(m)+3*m_cdg002(m)*m_cdg011(m)+3*m_cdg001(m)*m_cdg012(m)+m_cdg000(m)*m_cdg013(m)))); deriv220+=(m_occno(m)*(2*(2*ipow(m_cdg110(m),2)+2*m_cdg100(m)*m_cdg120(m)+m_cdg020(m)*m_cdg200(m)+2*m_cdg010(m)*m_cdg210(m)+m_cdg000(m)*m_cdg220(m)))); deriv202+=(m_occno(m)*(2*(2*ipow(m_cdg101(m),2)+2*m_cdg100(m)*m_cdg102(m)+m_cdg002(m)*m_cdg200(m)+2*m_cdg001(m)*m_cdg201(m)+m_cdg000(m)*m_cdg202(m)))); deriv022+=(m_occno(m)*(2*(2*ipow(m_cdg011(m),2)+2*m_cdg010(m)*m_cdg012(m)+m_cdg002(m)*m_cdg020(m)+2*m_cdg001(m)*m_cdg021(m)+m_cdg000(m)*m_cdg022(m)))); deriv211+=(m_occno(m)*(2*(2*m_cdg101(m)*m_cdg110(m)+2*m_cdg100(m)*m_cdg111(m)+m_cdg011(m)*m_cdg200(m)+m_cdg010(m)*m_cdg201(m)+m_cdg001(m)*m_cdg210(m)+m_cdg000(m)*m_cdg211(m)))); deriv121+=(m_occno(m)*(2*(m_cdg021(m)*m_cdg100(m)+m_cdg020(m)*m_cdg101(m)+2*m_cdg011(m)*m_cdg110(m)+2*m_cdg010(m)*m_cdg111(m)+m_cdg001(m)*m_cdg120(m)+m_cdg000(m)*m_cdg121(m)))); deriv112+=(m_occno(m)*(2*(m_cdg012(m)*m_cdg100(m)+2*m_cdg011(m)*m_cdg101(m)+m_cdg010(m)*m_cdg102(m)+m_cdg002(m)*m_cdg110(m)+2*m_cdg001(m)*m_cdg111(m)+m_cdg000(m)*m_cdg112(m)))); } value(0,0)=deriv400+deriv220+deriv202; value(1,1)=deriv220+deriv040+deriv022; value(2,2)=deriv202+deriv022+deriv004; value(0,1)=deriv310+deriv130+deriv112; value(0,2)=deriv301+deriv121+deriv103; value(1,2)=deriv211+deriv031+deriv013; value(1,0)=value(0,1); value(2,0)=value(0,2); value(2,1)=value(1,2); return value; } const Matrix QTAIMWavefunctionEvaluator::gradientAndHessianOfElectronDensityLaplacian( const Matrix xyz ) { Matrix gValue; Matrix hValue; Matrix value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); m_cdg200.setZero(); m_cdg020.setZero(); m_cdg002.setZero(); m_cdg110.setZero(); m_cdg101.setZero(); m_cdg011.setZero(); m_cdg300.setZero(); m_cdg120.setZero(); m_cdg102.setZero(); m_cdg210.setZero(); m_cdg030.setZero(); m_cdg012.setZero(); m_cdg201.setZero(); m_cdg021.setZero(); m_cdg003.setZero(); m_cdg111.setZero(); m_cdg400.setZero(); m_cdg040.setZero(); m_cdg004.setZero(); m_cdg310.setZero(); m_cdg301.setZero(); m_cdg130.setZero(); m_cdg031.setZero(); m_cdg103.setZero(); m_cdg013.setZero(); m_cdg220.setZero(); m_cdg202.setZero(); m_cdg022.setZero(); m_cdg211.setZero(); m_cdg121.setZero(); m_cdg112.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qint64 aax2=m_xamom(p)*(m_xamom(p)-1); qint64 aay2=m_yamom(p)*(m_yamom(p)-1); qint64 aaz2=m_zamom(p)*(m_zamom(p)-1); qint64 aax3=m_xamom(p)*(m_xamom(p)-1)*(m_xamom(p)-2); qint64 aay3=m_yamom(p)*(m_yamom(p)-1)*(m_yamom(p)-2); qint64 aaz3=m_zamom(p)*(m_zamom(p)-1)*(m_zamom(p)-2); qint64 aax4=m_xamom(p)*(m_xamom(p)-1)*(m_xamom(p)-2)*(m_xamom(p)-3); qint64 aay4=m_yamom(p)*(m_yamom(p)-1)*(m_yamom(p)-2)*(m_xamom(p)-3); qint64 aaz4=m_zamom(p)*(m_zamom(p)-1)*(m_zamom(p)-2)*(m_xamom(p)-3); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal ax2; qreal ay2; qreal az2; if ( m_xamom(p) < 2 ) { ax2=zero; } else if( m_xamom(p) == 2 ) { ax2=one; } else { ax2=aax2*ipow(xx0,m_xamom(p)-2); } if ( m_yamom(p) < 2 ) { ay2=zero; } else if( m_yamom(p) == 2 ) { ay2=one; } else { ay2=aay2*ipow(yy0,m_yamom(p)-2); } if ( m_zamom(p) < 2 ) { az2=zero; } else if( m_zamom(p) == 2 ) { az2=one; } else { az2=aaz2*ipow(zz0,m_zamom(p)-2); } qreal ax3; qreal ay3; qreal az3; if ( m_xamom(p) < 3 ) { ax3=zero; } else if( m_xamom(p) == 3 ) { ax3=one; } else { ax3=aax3*ipow(xx0,m_xamom(p)-3); } if ( m_yamom(p) < 3 ) { ay3=zero; } else if( m_yamom(p) == 3 ) { ay3=one; } else { ay3=aay3*ipow(yy0,m_yamom(p)-3); } if ( m_zamom(p) < 3 ) { az3=zero; } else if( m_zamom(p) == 3 ) { az3=one; } else { az3=aaz3*ipow(zz0,m_zamom(p)-3); } qreal ax4; qreal ay4; qreal az4; if ( m_xamom(p) < 4 ) { ax4=zero; } else if( m_xamom(p) == 4 ) { ax4=one; } else { ax4=aax4*ipow(xx0,m_xamom(p)-4); } if ( m_yamom(p) < 4 ) { ay4=zero; } else if( m_yamom(p) == 4 ) { ay4=one; } else { ay4=aay4*ipow(yy0,m_yamom(p)-4); } if ( m_zamom(p) < 4 ) { az4=zero; } else if( m_zamom(p) == 4 ) { az4=one; } else { az4=aaz4*ipow(zz0,m_zamom(p)-4); } qreal b0 = exp(b0arg); qreal bx1 = -2*m_alpha(p)*xx0; qreal by1 = -2*m_alpha(p)*yy0; qreal bz1 = -2*m_alpha(p)*zz0; qreal bx2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(xx0,2)); qreal by2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(yy0,2)); qreal bz2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(zz0,2)); qreal bx3 = (12*ipow(m_alpha(p),2)*xx0)-(8*ipow(m_alpha(p),3) * ipow(xx0,3)); qreal by3 = (12*ipow(m_alpha(p),2)*yy0)-(8*ipow(m_alpha(p),3) * ipow(yy0,3)); qreal bz3 = (12*ipow(m_alpha(p),2)*zz0)-(8*ipow(m_alpha(p),3) * ipow(zz0,3)); qreal bx4 = (12*ipow(m_alpha(p),2))-(48*ipow(m_alpha(p),3) * ipow(xx0,2))+(16*ipow(m_alpha(p),4) * ipow(xx0,4)); qreal by4 = (12*ipow(m_alpha(p),2))-(48*ipow(m_alpha(p),3) * ipow(yy0,2))+(16*ipow(m_alpha(p),4) * ipow(yy0,4)); qreal bz4 = (12*ipow(m_alpha(p),2))-(48*ipow(m_alpha(p),3) * ipow(zz0,2))+(16*ipow(m_alpha(p),4) * ipow(zz0,4)); qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); qreal dg200 = ay0*az0*b0*(ax2+2*ax1*bx1+ax0*bx2); qreal dg020 = ax0*az0*b0*(ay2+2*ay1*by1+ay0*by2); qreal dg002 = ax0*ay0*b0*(az2+2*az1*bz1+az0*bz2); qreal dg110 = az0*b0*(ax1+ax0*bx1)*(ay1+ay0*by1); qreal dg101 = ay0*b0*(ax1+ax0*bx1)*(az1+az0*bz1); qreal dg011 = ax0*b0*(ay1+ay0*by1)*(az1+az0*bz1); qreal dg300 = ay0*az0*b0*(ax3+3*ax2*bx1+3*ax1*bx2+ax0*bx3); qreal dg030 = ax0*az0*b0*(ay3+3*ay2*by1+3*ay1*by2+ay0*by3); qreal dg003 = ax0*ay0*b0*(az3+3*az2*bz1+3*az1*bz2+az0*bz3); qreal dg210 = az0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(ay1+ay0*by1); qreal dg201 = ay0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(az1+az0*bz1); qreal dg120 = az0*b0*(ax1+ax0*bx1)*(ay2+2*ay1*by1+ay0*by2); qreal dg021 = ax0*b0*(ay2+2*ay1*by1+ay0*by2)*(az1+az0*bz1); qreal dg102 = ay0*b0*(ax1+ax0*bx1)*(az2+2*az1*bz1+az0*bz2); qreal dg012 = ax0*b0*(ay1+ay0*by1)*(az2+2*az1*bz1+az0*bz2); qreal dg111 = b0*(ax1+ax0*bx1)*(ay1+ay0*by1)*(az1+az0*bz1); qreal dg400 = ay0*az0*b0*(ax4+4*ax3*bx1+6*ax2*bx2+4*ax1*bx3+ax0*bx4); qreal dg040 = ax0*az0*b0*(ay4+4*ay3*by1+6*ay2*by2+4*ay1*by3+ay0*by4); qreal dg004 = ax0*ay0*b0*(az4+4*az3*bz1+6*az2*bz2+4*az1*bz3+az0*bz4); qreal dg310 = az0*b0*(ax3+3*ax2*bx1+3*ax1*bx2+ax0*bx3)*(ay1+ay0*by1); qreal dg301 = ay0*b0*(ax3+3*ax2*bx1+3*ax1*bx2+ax0*bx3)*(az1+az0*bz1); qreal dg130 = az0*b0*(ax1+ax0*bx1)*(ay3+3*ay2*by1+3*ay1*by2+ay0*by3); qreal dg031 = ax0*b0*(ay3+3*ay2*by1+3*ay1*by2+ay0*by3)*(az1+az0*bz1); qreal dg103 = ay0*b0*(ax1+ax0*bx1)*(az3+3*az2*bz1+3*az1*bz2+az0*bz3); qreal dg013 = ax0*b0*(ay1+ay0*by1)*(az3+3*az2*bz1+3*az1*bz2+az0*bz3); qreal dg220 = az0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(ay2+2*ay1*by1+ay0*by2); qreal dg202 = ay0*b0*(ax2+2*ax1*bx1+ax0*bx2)*(az2+2*az1*bz1+az0*bz2); qreal dg022 = ax0*b0*(ay2+2*ay1*by1+ay0*by2)*(az2+2*az1*bz1+az0*bz2); qreal dg211 = b0*(ax2+2*ax1*bx1+ax0*bx2)*(ay1+ay0*by1)*(az1+az0*bz1); qreal dg121 = b0*(ax1+ax0*bx1)*(ay2+2*ay1*by1+ay0*by2)*(az1+az0*bz1); qreal dg112 = b0*(ax1+ax0*bx1)*(ay1+ay0*by1)*(az2+2*az1*bz1+az0*bz2); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; m_cdg200(m) += m_coef(m,p) * dg200; m_cdg020(m) += m_coef(m,p) * dg020; m_cdg002(m) += m_coef(m,p) * dg002; m_cdg110(m) += m_coef(m,p) * dg110; m_cdg101(m) += m_coef(m,p) * dg101; m_cdg011(m) += m_coef(m,p) * dg011; m_cdg300(m) += m_coef(m,p) * dg300; m_cdg030(m) += m_coef(m,p) * dg030; m_cdg003(m) += m_coef(m,p) * dg003; m_cdg210(m) += m_coef(m,p) * dg210; m_cdg201(m) += m_coef(m,p) * dg201; m_cdg120(m) += m_coef(m,p) * dg120; m_cdg021(m) += m_coef(m,p) * dg021; m_cdg102(m) += m_coef(m,p) * dg102; m_cdg012(m) += m_coef(m,p) * dg012; m_cdg111(m) += m_coef(m,p) * dg111; m_cdg400(m) += m_coef(m,p) * dg400; m_cdg040(m) += m_coef(m,p) * dg040; m_cdg004(m) += m_coef(m,p) * dg004; m_cdg310(m) += m_coef(m,p) * dg310; m_cdg301(m) += m_coef(m,p) * dg301; m_cdg130(m) += m_coef(m,p) * dg130; m_cdg031(m) += m_coef(m,p) * dg031; m_cdg103(m) += m_coef(m,p) * dg103; m_cdg013(m) += m_coef(m,p) * dg013; m_cdg220(m) += m_coef(m,p) * dg220; m_cdg202(m) += m_coef(m,p) * dg202; m_cdg022(m) += m_coef(m,p) * dg022; m_cdg211(m) += m_coef(m,p) * dg211; m_cdg121(m) += m_coef(m,p) * dg121; m_cdg112(m) += m_coef(m,p) * dg112; } } } qreal deriv300=zero; qreal deriv030=zero; qreal deriv003=zero; qreal deriv210=zero; qreal deriv201=zero; qreal deriv120=zero; qreal deriv021=zero; qreal deriv102=zero; qreal deriv012=zero; qreal deriv400=zero; qreal deriv040=zero; qreal deriv004=zero; qreal deriv310=zero; qreal deriv301=zero; qreal deriv130=zero; qreal deriv031=zero; qreal deriv103=zero; qreal deriv013=zero; qreal deriv220=zero; qreal deriv202=zero; qreal deriv022=zero; qreal deriv211=zero; qreal deriv121=zero; qreal deriv112=zero; for( qint64 m=0 ; m < m_nmo ; ++m ) { deriv300+=(m_occno(m)*( 6*m_cdg100(m)*m_cdg200(m)+2*m_cdg000(m)*m_cdg300(m) )); deriv030+=(m_occno(m)*( 6*m_cdg010(m)*m_cdg020(m)+2*m_cdg000(m)*m_cdg030(m) )); deriv003+=(m_occno(m)*( 6*m_cdg001(m)*m_cdg002(m)+2*m_cdg000(m)*m_cdg003(m) )); deriv210+=(m_occno(m)*( 2*(2*m_cdg100(m)*m_cdg110(m)+m_cdg010(m)*m_cdg200(m)+m_cdg000(m)*m_cdg210(m)) )); deriv201+=(m_occno(m)*( 2*(2*m_cdg100(m)*m_cdg101(m)+m_cdg001(m)*m_cdg200(m)+m_cdg000(m)*m_cdg201(m)) )); deriv120+=(m_occno(m)*( 2*(m_cdg020(m)*m_cdg100(m)+2*m_cdg010(m)*m_cdg110(m)+m_cdg000(m)*m_cdg120(m)) )); deriv021+=(m_occno(m)*( 2*(2*m_cdg010(m)*m_cdg011(m)+m_cdg001(m)*m_cdg020(m)+m_cdg000(m)*m_cdg021(m)) )); deriv102+=(m_occno(m)*( 2*(m_cdg002(m)*m_cdg100(m)+2*m_cdg001(m)*m_cdg101(m)+m_cdg000(m)*m_cdg102(m)) )); deriv012+=(m_occno(m)*( 2*(m_cdg002(m)*m_cdg010(m)+2*m_cdg001(m)*m_cdg011(m)+m_cdg000(m)*m_cdg012(m)) )); // deriv111+=(m_occno(m)*( 2*(m_cdg011(m)*m_cdg100(m)+m_cdg010(m)*m_cdg101(m)+m_cdg001(m)*m_cdg110(m)+m_cdg000(m)*m_cdg111(m)) )); deriv400+=(m_occno(m)*(6*ipow(m_cdg200(m),2)+8*m_cdg100(m)*m_cdg300(m)+2*m_cdg000(m)*m_cdg400(m))); deriv040+=(m_occno(m)*(6*ipow(m_cdg020(m),2)+8*m_cdg010(m)*m_cdg030(m)+2*m_cdg000(m)*m_cdg040(m))); deriv004+=(m_occno(m)*(6*ipow(m_cdg002(m),2)+8*m_cdg001(m)*m_cdg003(m)+2*m_cdg000(m)*m_cdg004(m))); deriv310+=(m_occno(m)*(2*(3*m_cdg110(m)*m_cdg200(m)+3*m_cdg100(m)*m_cdg210(m)+m_cdg010(m)*m_cdg300(m)+m_cdg000(m)*m_cdg310(m)))); deriv301+=(m_occno(m)*(2*(3*m_cdg101(m)*m_cdg200(m)+3*m_cdg100(m)*m_cdg201(m)+m_cdg001(m)*m_cdg300(m)+m_cdg000(m)*m_cdg301(m)))); deriv130+=(m_occno(m)*(2*(m_cdg030(m)*m_cdg100(m)+3*m_cdg020(m)*m_cdg110(m)+3*m_cdg010(m)*m_cdg120(m)+m_cdg000(m)*m_cdg130(m)))); deriv031+=(m_occno(m)*(2*(3*m_cdg011(m)*m_cdg020(m)+3*m_cdg010(m)*m_cdg021(m)+m_cdg001(m)*m_cdg030(m)+m_cdg000(m)*m_cdg031(m)))); deriv103+=(m_occno(m)*(2*(m_cdg003(m)*m_cdg100(m)+3*m_cdg002(m)*m_cdg101(m)+3*m_cdg001(m)*m_cdg102(m)+m_cdg000(m)*m_cdg103(m)))); deriv013+=(m_occno(m)*(2*(m_cdg003(m)*m_cdg010(m)+3*m_cdg002(m)*m_cdg011(m)+3*m_cdg001(m)*m_cdg012(m)+m_cdg000(m)*m_cdg013(m)))); deriv220+=(m_occno(m)*(2*(2*ipow(m_cdg110(m),2)+2*m_cdg100(m)*m_cdg120(m)+m_cdg020(m)*m_cdg200(m)+2*m_cdg010(m)*m_cdg210(m)+m_cdg000(m)*m_cdg220(m)))); deriv202+=(m_occno(m)*(2*(2*ipow(m_cdg101(m),2)+2*m_cdg100(m)*m_cdg102(m)+m_cdg002(m)*m_cdg200(m)+2*m_cdg001(m)*m_cdg201(m)+m_cdg000(m)*m_cdg202(m)))); deriv022+=(m_occno(m)*(2*(2*ipow(m_cdg011(m),2)+2*m_cdg010(m)*m_cdg012(m)+m_cdg002(m)*m_cdg020(m)+2*m_cdg001(m)*m_cdg021(m)+m_cdg000(m)*m_cdg022(m)))); deriv211+=(m_occno(m)*(2*(2*m_cdg101(m)*m_cdg110(m)+2*m_cdg100(m)*m_cdg111(m)+m_cdg011(m)*m_cdg200(m)+m_cdg010(m)*m_cdg201(m)+m_cdg001(m)*m_cdg210(m)+m_cdg000(m)*m_cdg211(m)))); deriv121+=(m_occno(m)*(2*(m_cdg021(m)*m_cdg100(m)+m_cdg020(m)*m_cdg101(m)+2*m_cdg011(m)*m_cdg110(m)+2*m_cdg010(m)*m_cdg111(m)+m_cdg001(m)*m_cdg120(m)+m_cdg000(m)*m_cdg121(m)))); deriv112+=(m_occno(m)*(2*(m_cdg012(m)*m_cdg100(m)+2*m_cdg011(m)*m_cdg101(m)+m_cdg010(m)*m_cdg102(m)+m_cdg002(m)*m_cdg110(m)+2*m_cdg001(m)*m_cdg111(m)+m_cdg000(m)*m_cdg112(m)))); } gValue(0)=deriv300+deriv120+deriv102; gValue(1)=deriv210+deriv030+deriv012; gValue(2)=deriv201+deriv021+deriv003; hValue(0,0)=deriv400+deriv220+deriv202; hValue(1,1)=deriv220+deriv040+deriv022; hValue(2,2)=deriv202+deriv022+deriv004; hValue(0,1)=deriv310+deriv130+deriv112; hValue(0,2)=deriv301+deriv121+deriv103; hValue(1,2)=deriv211+deriv031+deriv013; hValue(1,0)=hValue(0,1); hValue(2,0)=hValue(0,2); hValue(2,1)=hValue(1,2); value(0,0) = gValue(0); value(1,0) = gValue(1); value(2,0) = gValue(2); value(0,1) = hValue(0,0); value(1,1) = hValue(1,0); value(2,1) = hValue(2,0); value(0,2) = hValue(0,1); value(1,2) = hValue(1,1); value(2,2) = hValue(2,1); value(0,3) = hValue(0,2); value(1,3) = hValue(1,2); value(2,3) = hValue(2,2); return value; } qreal QTAIMWavefunctionEvaluator::kineticEnergyDensityG(Matrix xyz) { qreal value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal b0 = exp(b0arg); qreal bx1= -2*m_alpha(p)*xx0; qreal by1= -2*m_alpha(p)*yy0; qreal bz1= -2*m_alpha(p)*zz0; qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; } } } value=zero; for( qint64 m=0 ; m < m_nmo ; ++m ) { value += (0.5)*(m_occno(m)*(ipow(m_cdg100(m),2)+ipow(m_cdg010(m),2)+ipow(m_cdg001(m),2))); } return value; } qreal QTAIMWavefunctionEvaluator::kineticEnergyDensityK( const Matrix xyz ) { qreal value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg200.setZero(); m_cdg020.setZero(); m_cdg002.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qint64 aax2=m_xamom(p)*(m_xamom(p)-1); qint64 aay2=m_yamom(p)*(m_yamom(p)-1); qint64 aaz2=m_zamom(p)*(m_zamom(p)-1); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal ax2; qreal ay2; qreal az2; if ( m_xamom(p) < 2 ) { ax2=zero; } else if( m_xamom(p) == 2 ) { ax2=one; } else { ax2=aax2*ipow(xx0,m_xamom(p)-2); } if ( m_yamom(p) < 2 ) { ay2=zero; } else if( m_yamom(p) == 2 ) { ay2=one; } else { ay2=aay2*ipow(yy0,m_yamom(p)-2); } if ( m_zamom(p) < 2 ) { az2=zero; } else if( m_zamom(p) == 2 ) { az2=one; } else { az2=aaz2*ipow(zz0,m_zamom(p)-2); } qreal b0 = exp(b0arg); qreal bx1 = -2*m_alpha(p)*xx0; qreal by1 = -2*m_alpha(p)*yy0; qreal bz1 = -2*m_alpha(p)*zz0; qreal bx2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(xx0,2)); qreal by2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(yy0,2)); qreal bz2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(zz0,2)); qreal dg000 = ax0*ay0*az0*b0; qreal dg200 = ay0*az0*b0*(ax2+2*ax1*bx1+ax0*bx2); qreal dg020 = ax0*az0*b0*(ay2+2*ay1*by1+ay0*by2); qreal dg002 = ax0*ay0*b0*(az2+2*az1*bz1+az0*bz2); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg200(m) += m_coef(m,p) * dg200; m_cdg020(m) += m_coef(m,p) * dg020; m_cdg002(m) += m_coef(m,p) * dg002; } } } value=0.0; for( qint64 m=0 ; m < m_nmo ; ++m ) { value += (0.25)*(m_occno(m)*(2*m_cdg000(m)*(m_cdg200(m)+m_cdg020(m)+m_cdg002(m)))); } return value; } const Matrix QTAIMWavefunctionEvaluator::quantumStressTensor( const Matrix xyz ) { Matrix value; const qreal zero=0.0; const qreal one =1.0; m_cdg000.setZero(); m_cdg100.setZero(); m_cdg010.setZero(); m_cdg001.setZero(); m_cdg200.setZero(); m_cdg020.setZero(); m_cdg002.setZero(); m_cdg110.setZero(); m_cdg101.setZero(); m_cdg011.setZero(); for( qint64 p=0 ; p < m_nprim ; ++p ) { qreal xx0 = xyz(0) - m_X0(p); qreal yy0 = xyz(1) - m_Y0(p); qreal zz0 = xyz(2) - m_Z0(p); qreal b0arg = -m_alpha(p)*(xx0*xx0 + yy0*yy0 + zz0*zz0 ); if( b0arg > m_cutoff ) { qint64 aax0=1; qint64 aay0=1; qint64 aaz0=1; qint64 aax1=m_xamom(p); qint64 aay1=m_yamom(p); qint64 aaz1=m_zamom(p); qint64 aax2=m_xamom(p)*(m_xamom(p)-1); qint64 aay2=m_yamom(p)*(m_yamom(p)-1); qint64 aaz2=m_zamom(p)*(m_zamom(p)-1); qreal ax0 = aax0*ipow( xx0, m_xamom(p) ); qreal ay0 = aay0*ipow( yy0, m_yamom(p) ); qreal az0 = aaz0*ipow( zz0, m_zamom(p) ); qreal ax1; qreal ay1; qreal az1; if ( m_xamom(p) < 1 ) { ax1=zero; } else if( m_xamom(p) == 1 ) { ax1=one; } else { ax1=aax1*ipow(xx0,m_xamom(p)-1); } if ( m_yamom(p) < 1 ) { ay1=zero; } else if( m_yamom(p) == 1 ) { ay1=one; } else { ay1=aay1*ipow(yy0,m_yamom(p)-1); } if ( m_zamom(p) < 1 ) { az1=zero; } else if( m_zamom(p) == 1 ) { az1=one; } else { az1=aaz1*ipow(zz0,m_zamom(p)-1); } qreal ax2; qreal ay2; qreal az2; if ( m_xamom(p) < 2 ) { ax2=zero; } else if( m_xamom(p) == 2 ) { ax2=one; } else { ax2=aax2*ipow(xx0,m_xamom(p)-2); } if ( m_yamom(p) < 2 ) { ay2=zero; } else if( m_yamom(p) == 2 ) { ay2=one; } else { ay2=aay2*ipow(yy0,m_yamom(p)-2); } if ( m_zamom(p) < 2 ) { az2=zero; } else if( m_zamom(p) == 2 ) { az2=one; } else { az2=aaz2*ipow(zz0,m_zamom(p)-2); } qreal b0 = exp(b0arg); qreal bx1 = -2*m_alpha(p)*xx0; qreal by1 = -2*m_alpha(p)*yy0; qreal bz1 = -2*m_alpha(p)*zz0; qreal bx2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(xx0,2)); qreal by2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(yy0,2)); qreal bz2 = -2*m_alpha(p) + 4*(ipow(m_alpha(p),2) * ipow(zz0,2)); qreal dg000 = ax0*ay0*az0*b0; qreal dg100 = ay0*az0*b0*(ax1+ax0*bx1); qreal dg010 = ax0*az0*b0*(ay1+ay0*by1); qreal dg001 = ax0*ay0*b0*(az1+az0*bz1); qreal dg200 = ay0*az0*b0*(ax2+2*ax1*bx1+ax0*bx2); qreal dg020 = ax0*az0*b0*(ay2+2*ay1*by1+ay0*by2); qreal dg002 = ax0*ay0*b0*(az2+2*az1*bz1+az0*bz2); qreal dg110 = az0*b0*(ax1+ax0*bx1)*(ay1+ay0*by1); qreal dg101 = ay0*b0*(ax1+ax0*bx1)*(az1+az0*bz1); qreal dg011 = ax0*b0*(ay1+ay0*by1)*(az1+az0*bz1); for( qint64 m=0 ; m < m_nmo ; ++m ) { m_cdg000(m) += m_coef(m,p) * dg000; m_cdg100(m) += m_coef(m,p) * dg100; m_cdg010(m) += m_coef(m,p) * dg010; m_cdg001(m) += m_coef(m,p) * dg001; m_cdg200(m) += m_coef(m,p) * dg200; m_cdg020(m) += m_coef(m,p) * dg020; m_cdg002(m) += m_coef(m,p) * dg002; m_cdg110(m) += m_coef(m,p) * dg110; m_cdg101(m) += m_coef(m,p) * dg101; m_cdg011(m) += m_coef(m,p) * dg011; } } } value.setZero(); for( qint64 m=0 ; m < m_nmo ; ++m ) { value(0,0)+=(m_occno(m)*(2*m_cdg000(m)*m_cdg200(m)-2*ipow(m_cdg100(m),2))); value(0,1)+=(m_occno(m)*(2*m_cdg000(m)*m_cdg110(m)-2*m_cdg100(m)*m_cdg010(m))); value(0,2)+=(m_occno(m)*(2*m_cdg000(m)*m_cdg101(m)-2*m_cdg100(m)*m_cdg001(m))); value(1,1)+=(m_occno(m)*(2*m_cdg000(m)*m_cdg020(m)-2*ipow(m_cdg010(m),2))); value(1,2)+=(m_occno(m)*(2*m_cdg000(m)*m_cdg011(m)-2*m_cdg010(m)*m_cdg001(m))); value(2,2)+=(m_occno(m)*(2*m_cdg000(m)*m_cdg002(m)-2*ipow(m_cdg001(m),2) )); } value(1,0)=value(0,1); value(2,0)=value(0,2); value(2,1)=value(1,2); return 0.25*value; } } // namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/qtaim/CMakeLists.txt0000644000175000001440000000106212250371054023655 0ustar marcususersinclude_directories(${CMAKE_CURRENT_BINARY_DIR}) set(LINK_LIBS avogadro) set(PLUGIN_LABEL extensions) set(PLUGIN_TARGET extensions) set(qtaimextension_SRCS qtaimextension.cpp # qtaimdialog.cpp qtaimwavefunction.cpp qtaimwavefunctionevaluator.cpp qtaimodeintegrator.cpp qtaimcriticalpointlocator.cpp qtaimmathutilities.cpp qtaimodeintegrator.cpp qtaimlsodaintegrator.cpp qtaimcubature.cpp ) #set(qtaim_UIS # qtaimdialog.ui #) avogadro_plugin_nogl(qtaimextension "${qtaimextension_SRCS}" # "${qtaimextension_UIS}" ) avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimcubature.cpp0000644000175000001440000020544512250371054024502 0ustar marcususers/********************************************************************** You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ /* Based on */ /* http://ab-initio.mit.edu/cubature/cubature-20101018.tgz */ /* Adaptive multidimensional integration of a vector of integrands. * * Copyright (c) 2005-2010 Steven G. Johnson * * Portions (see comments) based on HIntLib (also distributed under * the GNU GPL, v2 or later), copyright (c) 2002-2005 Rudolf Schuerer. * (http://www.cosy.sbg.ac.at/~rschuer/hintlib/) * * Portions (see comments) based on GNU GSL (also distributed under * the GNU GPL, v2 or later), copyright (c) 1996-2000 Brian Gough. * (http://www.gnu.org/software/gsl/) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* Adaptive multidimensional integration on hypercubes (or, really, hyper-rectangles) using cubature rules. A cubature rule takes a function and a hypercube and evaluates the function at a small number of points, returning an estimate of the integral as well as an estimate of the error, and also a suggested dimension of the hypercube to subdivide. Given such a rule, the adaptive integration is simple: 1) Evaluate the cubature rule on the hypercube(s). Stop if converged. 2) Pick the hypercube with the largest estimated error, and divide it in two along the suggested dimension. 3) Goto (1). The basic algorithm is based on the adaptive cubature described in A. C. Genz and A. A. Malik, "An adaptive algorithm for numeric integration over an N-dimensional rectangular region," J. Comput. Appl. Math. 6 (4), 295-302 (1980). and subsequently extended to integrating a vector of integrands in J. Berntsen, T. O. Espelid, and A. Genz, "An adaptive algorithm for the approximate calculation of multiple integrals," ACM Trans. Math. Soft. 17 (4), 437-451 (1991). Note, however, that we do not use any of code from the above authors (in part because their code is Fortran 77, but mostly because it is under the restrictive ACM copyright license). I did make use of some GPL code from Rudolf Schuerer's HIntLib and from the GNU Scientific Library as listed in the copyright notice above, on the other hand. I am also grateful to Dmitry Turbiner , who implemented an initial prototype of the "vectorized" functionality for evaluating multiple points in a single call (as opposed to multiple functions in a single call). (Although Dmitry implemented a working version, I ended up re-implementing this feature from scratch as part of a larger code-cleanup, and in order to have a single code path for the vectorized and non-vectorized APIs. I subsequently implemented the algorithm by Gladwell to extract even more parallelism by evalutating many hypercubes at once.) TODO: * Putting these routines into the GNU GSL library would be nice. * A Python interface would be nice. (Also a Matlab interface, a GNU Octave interface, ...) * For high-dimensional integrals, it would be nice to implement a sparse-grid cubature scheme using Clenshaw-Curtis quadrature. Currently, for dimensions > 7 or so, quasi Monte Carlo methods win. * Berntsen et. al also describe a "two-level" error estimation scheme that they claim makes the algorithm more robust. It might be nice to implement this, at least as an option (although I seem to remember trying it once and it made the number of evaluations substantially worse for my test integrands). */ /* USAGE: Call adapt_integrate with your function as described in cubature.h. To compile a test program, compile cubature.c with -DTEST_INTEGRATOR as described at the end. */ #include "qtaimcubature.h" /* error return codes */ #define SUCCESS 0 #define FAILURE 1 /***************************************************************************/ /* Basic datatypes */ typedef struct { double val, err; } esterr; static double relError(esterr ee) { return (ee.val == 0.0 ? HUGE_VAL : fabs(ee.err / ee.val)); } static double errMax(unsigned int fdim, const esterr *ee) { double errmax = 0; unsigned int k; for (k = 0; k < fdim; ++k) if (ee[k].err > errmax) errmax = ee[k].err; return errmax; } typedef struct { unsigned int dim; double *data; /* length 2*dim = center followed by half-widths */ double vol; /* cache volume = product of widths */ } hypercube; static double compute_vol(const hypercube *h) { unsigned int i; double vol = 1; for (i = 0; i < h->dim; ++i) vol *= 2 * h->data[i + h->dim]; return vol; } static hypercube make_hypercube(unsigned int dim, const double *center, const double *halfwidth) { unsigned int i; hypercube h; h.dim = dim; h.data = (double *) qMalloc(sizeof(double) * dim * 2); h.vol = 0; if (h.data) { for (i = 0; i < dim; ++i) { h.data[i] = center[i]; h.data[i + dim] = halfwidth[i]; } h.vol = compute_vol(&h); } return h; } static hypercube make_hypercube_range(unsigned int dim, const double *xmin, const double *xmax) { hypercube h = make_hypercube(dim, xmin, xmax); unsigned int i; if (h.data) { for (i = 0; i < dim; ++i) { h.data[i] = 0.5 * (xmin[i] + xmax[i]); h.data[i + dim] = 0.5 * (xmax[i] - xmin[i]); } h.vol = compute_vol(&h); } return h; } static void destroy_hypercube(hypercube *h) { qFree(h->data); h->dim = 0; } typedef struct { hypercube h; unsigned int splitDim; unsigned int fdim; /* dimensionality of vector integrand */ esterr *ee; /* array of length fdim */ double errmax; /* max ee[k].err */ } region; static region make_region(const hypercube *h, unsigned int fdim) { region R; R.h = make_hypercube(h->dim, h->data, h->data + h->dim); R.splitDim = 0; R.fdim = fdim; R.ee = R.h.data ? (esterr *) qMalloc(sizeof(esterr) * fdim) : NULL; return R; } static void destroy_region(region *R) { destroy_hypercube(&R->h); qFree(R->ee); R->ee = 0; } static int cut_region(region *R, region *R2) { unsigned int d = R->splitDim, dim = R->h.dim; *R2 = *R; R->h.data[d + dim] *= 0.5; R->h.vol *= 0.5; R2->h = make_hypercube(dim, R->h.data, R->h.data + dim); if (!R2->h.data) return FAILURE; R->h.data[d] -= R->h.data[d + dim]; R2->h.data[d] += R->h.data[d + dim]; R2->ee = (esterr *) qMalloc(sizeof(esterr) * R2->fdim); return R2->ee == NULL; } struct rule_s; /* forward declaration */ typedef int (*evalError_func)(struct rule_s *r, unsigned int fdim, integrand_v f, void *fdata, unsigned int nR, region *R); typedef void (*destroy_func)(struct rule_s *r); typedef struct rule_s { unsigned int dim, fdim; /* the dimensionality & number of functions */ unsigned int num_points; /* number of evaluation points */ unsigned int num_regions; /* max number of regions evaluated at once */ double *pts; /* points to eval: num_regions * num_points * dim */ double *vals; /* num_regions * num_points * fdim */ evalError_func evalError; destroy_func destroy; } rule; static void destroy_rule(rule *r) { if (r) { if (r->destroy) r->destroy(r); qFree(r->pts); qFree(r); } } static int alloc_rule_pts(rule *r, unsigned int num_regions) { if (num_regions > r->num_regions) { qFree(r->pts); r->pts = r->vals = NULL; r->num_regions = 0; num_regions *= 2; /* allocate extra so that repeatedly calling alloc_rule_pts with growing num_regions only needs a logarithmic number of allocations */ r->pts = (double *) qMalloc(sizeof(double) * (num_regions * r->num_points * (r->dim + r->fdim))); if (r->fdim + r->dim > 0 && !r->pts) return FAILURE; r->vals = r->pts + num_regions * r->num_points * r->dim; r->num_regions = num_regions; } return SUCCESS; } static rule *make_rule(size_t sz, /* >= sizeof(rule) */ unsigned int dim, unsigned int fdim, unsigned int num_points, evalError_func evalError, destroy_func destroy) { rule *r; if (sz < sizeof(rule)) return NULL; r = (rule *) qMalloc(sz); if (!r) return NULL; r->pts = r->vals = NULL; r->num_regions = 0; r->dim = dim; r->fdim = fdim; r->num_points = num_points; r->evalError = evalError; r->destroy = destroy; return r; } /* note: all regions must have same fdim */ static int eval_regions(unsigned int nR, region *R, integrand_v f, void *fdata, rule *r) { unsigned int iR; if (nR == 0) return SUCCESS; /* nothing to evaluate */ if (r->evalError(r, R->fdim, f, fdata, nR, R)) return FAILURE; for (iR = 0; iR < nR; ++iR) R[iR].errmax = errMax(R->fdim, R[iR].ee); return SUCCESS; } /***************************************************************************/ /* Functions to loop over points in a hypercube. */ /* Based on orbitrule.cpp in HIntLib-0.0.10 */ /* ls0 returns the least-significant 0 bit of n (e.g. it returns 0 if the LSB is 0, it returns 1 if the 2 LSBs are 01, etcetera). */ static unsigned int ls0(unsigned int n) { #if defined(__GNUC__) && \ ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3) return __builtin_ctz(~n); /* gcc builtin for version >= 3.4 */ #else const unsigned int bits[256] = { 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 8, }; unsigned int bit = 0; while ((n & 0xff) == 0xff) { n >>= 8; bit += 8; } return bit + bits[n & 0xff]; #endif } /** * Evaluate the integration points for all 2^n points (+/-r,...+/-r) * * A Gray-code ordering is used to minimize the number of coordinate updates * in p, although this doesn't matter as much now that we are saving all pts. */ static void evalR_Rfs(double *pts, unsigned int dim, double *p, const double *c, const double *r) { unsigned int i; unsigned int signs = 0; /* 0/1 bit = +/- for corresponding element of r[] */ /* We start with the point where r is ADDed in every coordinate (this implies signs=0). */ for (i = 0; i < dim; ++i) p[i] = c[i] + r[i]; /* Loop through the points in Gray-code ordering */ for (i = 0;; ++i) { unsigned int mask, d; memcpy(pts, p, sizeof(double) * dim); pts += dim; d = ls0(i); /* which coordinate to flip */ if (d >= dim) break; /* flip the d-th bit and add/subtract r[d] */ mask = 1U << d; signs ^= mask; p[d] = (signs & mask) ? c[d] - r[d] : c[d] + r[d]; } } static void evalRR0_0fs(double *pts, unsigned int dim, double *p, const double *c, const double *r) { unsigned int i, j; for (i = 0; i < dim - 1; ++i) { p[i] = c[i] - r[i]; for (j = i + 1; j < dim; ++j) { p[j] = c[j] - r[j]; memcpy(pts, p, sizeof(double) * dim); pts += dim; p[i] = c[i] + r[i]; memcpy(pts, p, sizeof(double) * dim); pts += dim; p[j] = c[j] + r[j]; memcpy(pts, p, sizeof(double) * dim); pts += dim; p[i] = c[i] - r[i]; memcpy(pts, p, sizeof(double) * dim); pts += dim; p[j] = c[j]; /* Done with j -> Restore p[j] */ } p[i] = c[i]; /* Done with i -> Restore p[i] */ } } static void evalR0_0fs4d(double *pts, unsigned int dim, double *p, const double *c, const double *r1, const double *r2) { unsigned int i; memcpy(pts, p, sizeof(double) * dim); pts += dim; for (i = 0; i < dim; i++) { p[i] = c[i] - r1[i]; memcpy(pts, p, sizeof(double) * dim); pts += dim; p[i] = c[i] + r1[i]; memcpy(pts, p, sizeof(double) * dim); pts += dim; p[i] = c[i] - r2[i]; memcpy(pts, p, sizeof(double) * dim); pts += dim; p[i] = c[i] + r2[i]; memcpy(pts, p, sizeof(double) * dim); pts += dim; p[i] = c[i]; } } #define num0_0(dim) (1U) #define numR0_0fs(dim) (2 * (dim)) #define numRR0_0fs(dim) (2 * (dim) * (dim-1)) #define numR_Rfs(dim) (1U << (dim)) /***************************************************************************/ /* Based on rule75genzmalik.cpp in HIntLib-0.0.10: An embedded cubature rule of degree 7 (embedded rule degree 5) due to A. C. Genz and A. A. Malik. See: A. C. Genz and A. A. Malik, "An imbedded [sic] family of fully symmetric numerical integration rules," SIAM J. Numer. Anal. 20 (3), 580-588 (1983). */ typedef struct { rule parent; /* temporary arrays of length dim */ double *widthLambda, *widthLambda2, *p; /* dimension-dependent constants */ double weight1, weight3, weight5; double weightE1, weightE3; } rule75genzmalik; #define real(x) ((double)(x)) #define to_int(n) ((int)(n)) static int isqr(int x) { return x * x; } static void destroy_rule75genzmalik(rule *r_) { rule75genzmalik *r = (rule75genzmalik *) r_; qFree(r->p); } static int rule75genzmalik_evalError(rule *r_, unsigned int fdim, integrand_v f, void *fdata, unsigned int nR, region *R) { /* lambda2 = sqrt(9/70), lambda4 = sqrt(9/10), lambda5 = sqrt(9/19) */ const double lambda2 = 0.3585685828003180919906451539079374954541; const double lambda4 = 0.9486832980505137995996680633298155601160; const double lambda5 = 0.6882472016116852977216287342936235251269; const double weight2 = 980. / 6561.; const double weight4 = 200. / 19683.; const double weightE2 = 245. / 486.; const double weightE4 = 25. / 729.; const double ratio = (lambda2 * lambda2) / (lambda4 * lambda4); rule75genzmalik *r = (rule75genzmalik *) r_; unsigned int i, j, iR, dim = r_->dim, npts = 0; double *diff, *pts, *vals; if (alloc_rule_pts(r_, nR)) return FAILURE; pts = r_->pts; vals = r_->vals; for (iR = 0; iR < nR; ++iR) { const double *center = R[iR].h.data; const double *halfwidth = R[iR].h.data + dim; for (i = 0; i < dim; ++i) r->p[i] = center[i]; for (i = 0; i < dim; ++i) r->widthLambda2[i] = halfwidth[i] * lambda2; for (i = 0; i < dim; ++i) r->widthLambda[i] = halfwidth[i] * lambda4; /* Evaluate points in the center, in (lambda2,0,...,0) and (lambda3=lambda4, 0,...,0). */ evalR0_0fs4d(pts + npts*dim, dim, r->p, center, r->widthLambda2, r->widthLambda); npts += num0_0(dim) + 2 * numR0_0fs(dim); /* Calculate points for (lambda4, lambda4, 0, ...,0) */ evalRR0_0fs(pts + npts*dim, dim, r->p, center, r->widthLambda); npts += numRR0_0fs(dim); /* Calculate points for (lambda5, lambda5, ..., lambda5) */ for (i = 0; i < dim; ++i) r->widthLambda[i] = halfwidth[i] * lambda5; evalR_Rfs(pts + npts*dim, dim, r->p, center, r->widthLambda); npts += numR_Rfs(dim); } /* Evaluate the integrand function(s) at all the points */ f(dim, npts, pts, fdata, fdim, vals); /* we are done with the points, and so we can re-use the pts array to store the maximum difference diff[i] in each dimension for each hypercube */ diff = pts; for (i = 0; i < dim * nR; ++i) diff[i] = 0; for (j = 0; j < fdim; ++j) { for (iR = 0; iR < nR; ++iR) { double result, res5th; double val0, sum2=0, sum3=0, sum4=0, sum5=0; unsigned int k, k0 = 0; /* accumulate j-th function values into j-th integrals NOTE: this relies on the ordering of the eval functions above, as well as on the internal structure of the evalR0_0fs4d function */ val0 = vals[0]; /* central point */ k0 += 1; for (k = 0; k < dim; ++k) { double v0 = vals[k0 + 4*k]; double v1 = vals[(k0 + 4*k) + 1]; double v2 = vals[(k0 + 4*k) + 2]; double v3 = vals[(k0 + 4*k) + 3]; sum2 += v0 + v1; sum3 += v2 + v3; diff[iR * dim + k] += fabs(v0 + v1 - 2*val0 - ratio * (v2 + v3 - 2*val0)); } k0 += 4*k; for (k = 0; k < numRR0_0fs(dim); ++k) sum4 += vals[k0 + k]; k0 += k; for (k = 0; k < numR_Rfs(dim); ++k) sum5 += vals[k0 + k]; /* Calculate fifth and seventh order results */ result = R[iR].h.vol * (r->weight1 * val0 + weight2 * sum2 + r->weight3 * sum3 + weight4 * sum4 + r->weight5 * sum5); res5th = R[iR].h.vol * (r->weightE1 * val0 + weightE2 * sum2 + r->weightE3 * sum3 + weightE4 * sum4); R[iR].ee[j].val = result; R[iR].ee[j].err = fabs(res5th - result); vals += r_->num_points; } } /* figure out dimension to split: */ for (iR = 0; iR < nR; ++iR) { double maxdiff = 0; unsigned int dimDiffMax = 0; for (i = 0; i < dim; ++i) if (diff[iR*dim + i] > maxdiff) { maxdiff = diff[iR*dim + i]; dimDiffMax = i; } R[iR].splitDim = dimDiffMax; } return SUCCESS; } static rule *make_rule75genzmalik(unsigned int dim, unsigned int fdim) { rule75genzmalik *r; if (dim < 2) return NULL; /* this rule does not support 1d integrals */ /* Because of the use of a bit-field in evalR_Rfs, we are limited to be < 32 dimensions (or however many bits are in unsigned int). This is not a practical limitation...long before you reach 32 dimensions, the Genz-Malik cubature becomes excruciatingly slow and is superseded by other methods (e.g. Monte-Carlo). */ if (dim >= sizeof(unsigned int) * 8) return NULL; r = (rule75genzmalik *) make_rule(sizeof(rule75genzmalik), dim, fdim, num0_0(dim) + 2 * numR0_0fs(dim) + numRR0_0fs(dim) + numR_Rfs(dim), rule75genzmalik_evalError, destroy_rule75genzmalik); if (!r) return NULL; r->weight1 = (real(12824 - 9120 * to_int(dim) + 400 * isqr(to_int(dim))) / real(19683)); r->weight3 = real(1820 - 400 * to_int(dim)) / real(19683); r->weight5 = real(6859) / real(19683) / real(1U << dim); r->weightE1 = (real(729 - 950 * to_int(dim) + 50 * isqr(to_int(dim))) / real(729)); r->weightE3 = real(265 - 100 * to_int(dim)) / real(1458); r->p = (double *) qMalloc(sizeof(double) * dim * 3); if (!r->p) { destroy_rule((rule *) r); return NULL; } r->widthLambda = r->p + dim; r->widthLambda2 = r->p + 2 * dim; return (rule *) r; } /***************************************************************************/ /* 1d 15-point Gaussian quadrature rule, based on qk15.c and qk.c in GNU GSL (which in turn is based on QUADPACK). */ static int rule15gauss_evalError(rule *r, unsigned int fdim, integrand_v f, void *fdata, unsigned int nR, region *R) { /* Gauss quadrature weights and kronrod quadrature abscissae and weights as evaluated with 80 decimal digit arithmetic by L. W. Fullerton, Bell Labs, Nov. 1981. */ const unsigned int n = 8; const double xgk[8] = { /* abscissae of the 15-point kronrod rule */ 0.991455371120812639206854697526329, 0.949107912342758524526189684047851, 0.864864423359769072789712788640926, 0.741531185599394439863864773280788, 0.586087235467691130294144838258730, 0.405845151377397166906606412076961, 0.207784955007898467600689403773245, 0.000000000000000000000000000000000 /* xgk[1], xgk[3], ... abscissae of the 7-point gauss rule. xgk[0], xgk[2], ... to optimally extend the 7-point gauss rule */ }; static const double wg[4] = { /* weights of the 7-point gauss rule */ 0.129484966168869693270611432679082, 0.279705391489276667901467771423780, 0.381830050505118944950369775488975, 0.417959183673469387755102040816327 }; static const double wgk[8] = { /* weights of the 15-point kronrod rule */ 0.022935322010529224963732008058970, 0.063092092629978553290700663189204, 0.104790010322250183839876322541518, 0.140653259715525918745189590510238, 0.169004726639267902826583426598550, 0.190350578064785409913256402421014, 0.204432940075298892414161999234649, 0.209482141084727828012999174891714 }; unsigned int j, k, iR, npts = 0; double *pts, *vals; if (alloc_rule_pts(r, nR)) return FAILURE; pts = r->pts; vals = r->vals; for (iR = 0; iR < nR; ++iR) { const double center = R[iR].h.data[0]; const double halfwidth = R[iR].h.data[1]; pts[npts++] = center; for (j = 0; j < (n - 1) / 2; ++j) { int j2 = 2*j + 1; double w = halfwidth * xgk[j2]; pts[npts++] = center - w; pts[npts++] = center + w; } for (j = 0; j < n/2; ++j) { int j2 = 2*j; double w = halfwidth * xgk[j2]; pts[npts++] = center - w; pts[npts++] = center + w; } R[iR].splitDim = 0; /* no choice but to divide 0th dimension */ } f(1, npts, pts, fdata, fdim, vals); for (k = 0; k < fdim; ++k) { for (iR = 0; iR < nR; ++iR) { const double halfwidth = R[iR].h.data[1]; double result_gauss = vals[0] * wg[n/2 - 1]; double result_kronrod = vals[0] * wgk[n - 1]; double result_abs = fabs(result_kronrod); double result_asc, mean, err; /* accumulate integrals */ npts = 1; for (j = 0; j < (n - 1) / 2; ++j) { int j2 = 2*j + 1; double v = vals[npts] + vals[npts+1]; result_gauss += wg[j] * v; result_kronrod += wgk[j2] * v; result_abs += wgk[j2] * (fabs(vals[npts]) + fabs(vals[npts+1])); npts += 2; } for (j = 0; j < n/2; ++j) { int j2 = 2*j; result_kronrod += wgk[j2] * (vals[npts] + vals[npts+1]); result_abs += wgk[j2] * (fabs(vals[npts]) + fabs(vals[npts+1])); npts += 2; } /* integration result */ R[iR].ee[k].val = result_kronrod * halfwidth; /* error estimate (from GSL, probably dates back to QUADPACK ... not completely clear to me why we don't just use fabs(result_kronrod - result_gauss) * halfwidth */ mean = result_kronrod * 0.5; result_asc = wgk[n - 1] * fabs(vals[0] - mean); npts = 1; for (j = 0; j < (n - 1) / 2; ++j) { int j2 = 2*j + 1; result_asc += wgk[j2] * (fabs(vals[npts]-mean) + fabs(vals[npts+1]-mean)); npts += 2; } for (j = 0; j < n/2; ++j) { int j2 = 2*j; result_asc += wgk[j2] * (fabs(vals[npts]-mean) + fabs(vals[npts+1]-mean)); npts += 2; } err = fabs(result_kronrod - result_gauss) * halfwidth; result_abs *= halfwidth; result_asc *= halfwidth; if (result_asc != 0 && err != 0) { double scale = pow((200 * err / result_asc), 1.5); err = (scale < 1) ? result_asc * scale : result_asc; } if (result_abs > DBL_MIN / (50 * DBL_EPSILON)) { double min_err = 50 * DBL_EPSILON * result_abs; if (min_err > err) err = min_err; } R[iR].ee[k].err = err; /* increment vals to point to next batch of results */ vals += 15; } } return SUCCESS; } static rule *make_rule15gauss(unsigned int dim, unsigned int fdim) { if (dim != 1) return NULL; /* this rule is only for 1d integrals */ return make_rule(sizeof(rule), dim, fdim, 15, rule15gauss_evalError, 0); } /***************************************************************************/ /* binary heap implementation (ala _Introduction to Algorithms_ by Cormen, Leiserson, and Rivest), for use as a priority queue of regions to integrate. */ typedef region heap_item; #define KEY(hi) ((hi).errmax) typedef struct { unsigned int n, nalloc; heap_item *items; unsigned int fdim; esterr *ee; /* array of length fdim of the total integrand & error */ } heap; static void heap_resize(heap *h, unsigned int nalloc) { h->nalloc = nalloc; h->items = (heap_item *) realloc(h->items, sizeof(heap_item) * nalloc); } static heap heap_alloc(unsigned int nalloc, unsigned int fdim) { heap h; unsigned int i; h.n = 0; h.nalloc = 0; h.items = 0; h.fdim = fdim; h.ee = (esterr *) qMalloc(sizeof(esterr) * fdim); if (h.ee) { for (i = 0; i < fdim; ++i) h.ee[i].val = h.ee[i].err = 0; heap_resize(&h, nalloc); } return h; } /* note that heap_free does not deallocate anything referenced by the items */ static void heap_free(heap *h) { h->n = 0; heap_resize(h, 0); h->fdim = 0; qFree(h->ee); } static int heap_push(heap *h, heap_item hi) { int insert; unsigned int i, fdim = h->fdim; for (i = 0; i < fdim; ++i) { h->ee[i].val += hi.ee[i].val; h->ee[i].err += hi.ee[i].err; } insert = h->n; if (++(h->n) > h->nalloc) { heap_resize(h, h->n * 2); if (!h->items) return FAILURE; } while (insert) { int parent = (insert - 1) / 2; if (KEY(hi) <= KEY(h->items[parent])) break; h->items[insert] = h->items[parent]; insert = parent; } h->items[insert] = hi; return SUCCESS; } static int heap_push_many(heap *h, unsigned int ni, heap_item *hi) { unsigned int i; for (i = 0; i < ni; ++i) if (heap_push(h, hi[i])) return FAILURE; return SUCCESS; } static heap_item heap_pop(heap *h) { heap_item ret; int i, n, child; if (!(h->n)) { fprintf(stderr, "attempted to pop an empty heap\n"); exit(EXIT_FAILURE); } ret = h->items[0]; h->items[i = 0] = h->items[n = --(h->n)]; while ((child = i * 2 + 1) < n) { int largest; heap_item swap; if (KEY(h->items[child]) <= KEY(h->items[i])) largest = i; else largest = child; if (++child < n && KEY(h->items[largest]) < KEY(h->items[child])) largest = child; if (largest == i) break; swap = h->items[i]; h->items[i] = h->items[largest]; h->items[i = largest] = swap; } { unsigned int i, fdim = h->fdim; for (i = 0; i < fdim; ++i) { h->ee[i].val -= ret.ee[i].val; h->ee[i].err -= ret.ee[i].err; } } return ret; } /***************************************************************************/ /* adaptive integration, analogous to adaptintegrator.cpp in HIntLib */ static int ruleadapt_integrate(rule *r, unsigned int fdim, integrand_v f, void *fdata, const hypercube *h, unsigned int maxEval, double reqAbsError, double reqRelError, double *val, double *err, int parallel) { unsigned int numEval = 0; heap regions; unsigned int i, j; region *R = NULL; /* array of regions to evaluate */ unsigned int nR_alloc = 0; esterr *ee = NULL; regions = heap_alloc(1, fdim); if (!regions.ee || !regions.items) goto bad; ee = (esterr *) qMalloc(sizeof(esterr) * fdim); if (!ee) goto bad; nR_alloc = 2; R = (region *) qMalloc(sizeof(region) * nR_alloc); if (!R) goto bad; R[0] = make_region(h, fdim); if (!R[0].ee || eval_regions(1, R, f, fdata, r) || heap_push(®ions, R[0])) goto bad; numEval += r->num_points; while (numEval < maxEval || !maxEval) { for (j = 0; j < fdim && (regions.ee[j].err <= reqAbsError || relError(regions.ee[j]) <= reqRelError); ++j) ; if (j == fdim) break; /* convergence */ if (parallel) { /* maximize potential parallelism */ /* adapted from I. Gladwell, "Vectorization of one dimensional quadrature codes," pp. 230--238 in _Numerical Integration. Recent Developments, Software and Applications_, G. Fairweather and P. M. Keast, eds., NATO ASI Series C203, Dordrecht (1987), as described in J. M. Bull and T. L. Freeman, "Parallel Globally Adaptive Algorithms for Multi-dimensional Integration," http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.42.6638 (1994). Basically, this evaluates in one shot all regions that *must* be evaluated in order to reduce the error to the requested bound: the minimum set of largest-error regions whose errors push the total error over the bound. [Note: Bull and Freeman claim that the Gladwell approach is intrinsically inefficent because it "requires sorting", and propose an alternative algorithm that "only" requires three passes over the entire set of regions. Apparently, they didn't realize that one could use a heap data structure, in which case the time to pop K biggest-error regions out of N is only O(K log N), much better than the O(N) cost of the Bull and Freeman algorithm if K << N, and it is also much simpler.] */ unsigned int nR = 0; for (j = 0; j < fdim; ++j) ee[j] = regions.ee[j]; do { if (nR + 2 > nR_alloc) { nR_alloc = (nR + 2) * 2; R = (region *) realloc(R, nR_alloc * sizeof(region)); if (!R) goto bad; } R[nR] = heap_pop(®ions); for (j = 0; j < fdim; ++j) ee[j].err -= R[nR].ee[j].err; if (cut_region(R+nR, R+nR+1)) goto bad; numEval += r->num_points * 2; nR += 2; for (j = 0; j < fdim && (ee[j].err <= reqAbsError || relError(ee[j]) <= reqRelError); ++j) ; if (j == fdim) break; /* other regions have small errs */ } while (regions.n > 0 && (numEval < maxEval || !maxEval)); if (eval_regions(nR, R, f, fdata, r) || heap_push_many(®ions, nR, R)) goto bad; } else { /* minimize number of function evaluations */ R[0] = heap_pop(®ions); /* get worst region */ if (cut_region(R, R+1) || eval_regions(2, R, f, fdata, r) || heap_push_many(®ions, 2, R)) goto bad; numEval += r->num_points * 2; } } /* re-sum integral and errors */ for (j = 0; j < fdim; ++j) val[j] = err[j] = 0; for (i = 0; i < regions.n; ++i) { for (j = 0; j < fdim; ++j) { val[j] += regions.items[i].ee[j].val; err[j] += regions.items[i].ee[j].err; } destroy_region(®ions.items[i]); } /* printf("regions.nalloc = %d\n", regions.nalloc); */ qFree(ee); heap_free(®ions); qFree(R); return SUCCESS; bad: qFree(ee); heap_free(®ions); qFree(R); return FAILURE; } static int integrate(unsigned int fdim, integrand_v f, void *fdata, unsigned int dim, const double *xmin, const double *xmax, unsigned int maxEval, double reqAbsError, double reqRelError, double *val, double *err, int parallel) { rule *r; hypercube h; int status; unsigned int i; if (fdim == 0) /* nothing to do */ return SUCCESS; if (dim == 0) { /* trivial integration */ f(0, 1, xmin, fdata, fdim, val); for (i = 0; i < fdim; ++i) err[i] = 0; return SUCCESS; } r = dim == 1 ? make_rule15gauss(dim, fdim) : make_rule75genzmalik(dim, fdim); if (!r) { for (i = 0; i < fdim; ++i) { val[i] = 0; err[i] = HUGE_VAL; } return FAILURE; } h = make_hypercube_range(dim, xmin, xmax); status = !h.data ? FAILURE : ruleadapt_integrate(r, fdim, f, fdata, &h, maxEval, reqAbsError, reqRelError, val, err, parallel); destroy_hypercube(&h); destroy_rule(r); return status; } int adapt_integrate_v(unsigned int fdim, integrand_v f, void *fdata, unsigned int dim, const double *xmin, const double *xmax, unsigned int maxEval, double reqAbsError, double reqRelError, double *val, double *err) { return integrate(fdim, f, fdata, dim, xmin, xmax, maxEval, reqAbsError, reqRelError, val, err, 1); } /* wrapper around non-vectorized integrand */ typedef struct fv_data_s { integrand f; void *fdata; double *fval1; } fv_data; static void fv(unsigned int ndim, unsigned int npt, const double *x, void *d_, unsigned int fdim, double *fval) { fv_data *d = (fv_data *) d_; double *fval1 = d->fval1; unsigned int i, k; /* printf("npt = %u\n", npt); */ for (i = 0; i < npt; ++i) { d->f(ndim, x + i*ndim, d->fdata, fdim, fval1); for (k = 0; k < fdim; ++k) fval[k*npt + i] = fval1[k]; } } int adapt_integrate(unsigned int fdim, integrand f, void *fdata, unsigned int dim, const double *xmin, const double *xmax, unsigned int maxEval, double reqAbsError, double reqRelError, double *val, double *err) { int ret; fv_data d; if (fdim == 0) return SUCCESS; /* nothing to do */ d.f = f; d.fdata = fdata; d.fval1 = (double *) qMalloc(sizeof(double) * fdim); if (!d.fval1) { unsigned int i; for (i = 0; i < fdim; ++i) { val[i] = 0; err[i] = HUGE_VAL; } return -2; /* ERROR */ } ret = integrate(fdim, fv, &d, dim, xmin, xmax, maxEval, reqAbsError, reqRelError, val, err, 0); qFree(d.fval1); return ret; } // TODO: Consider QVariantList. For now, mimic what is known to work. QList QTAIMEvaluateProperty(QList variantList) { /* Order of variantList: QString wfnFileName qreal x0 qreal y0 qreal z0 qint64 nncp qint64 xncp1 qint64 yncp1 qint64 zncp1 qint64 xncp2 qint64 yncp2 qint64 zncp2 ... qint64 nmode qint64 mode1 qint64 mode2 ... qint64 nbasin qint64 basin1 qint64 basin2 ... */ qint64 counter=0; QString wfnFileName=variantList.at(counter).toString(); counter++; qreal x0=variantList.at(counter).toDouble(); counter++; qreal y0=variantList.at(counter).toDouble(); counter++; qreal z0=variantList.at(counter).toDouble(); counter++; qint64 nncp=variantList.at(counter).toLongLong(); counter++; QList ncpList; for( qint64 n=0 ; n < nncp ; ++n ) { qreal x=variantList.at(counter).toDouble(); counter++; qreal y=variantList.at(counter).toDouble(); counter++; qreal z=variantList.at(counter).toDouble(); counter++; ncpList.append(QVector3D(x,y,z)); } qint64 nmode=variantList.at(counter).toLongLong(); counter++; QList modeList; for( qint64 m=0 ; m < nmode ; ++m ) { qint64 mode=variantList.at(counter).toLongLong(); counter++; modeList.append(mode); } qint64 nbasin=variantList.at(counter).toLongLong(); counter++; QList basinList; for( qint64 b=0 ; b < nbasin ; ++b ) { qint64 basin=variantList.at(counter).toLongLong(); counter++; basinList.append(basin); } QSet basinSet=basinList.toSet(); Avogadro::QTAIMWavefunction wfn; wfn.loadFromBinaryFile(wfnFileName); Avogadro::QTAIMWavefunctionEvaluator eval(wfn); QList valueList; double initialElectronDensity=eval.electronDensity( Eigen::Vector3d(x0,y0,z0) ); // if less than some small value, then return zero for all integrands. if( initialElectronDensity < 1.e-5 ) { for( qint64 m=0; m < nmode ; ++m ) { qreal zero=0.0; valueList.append(zero); } } else { QList > betaSpheres; for( qint64 i=0 ; i < nncp ; ++i ) { QPair thisBetaSphere; thisBetaSphere.first=QVector3D(ncpList.at(i).x(), ncpList.at(i).y(),ncpList.at(i).z()); thisBetaSphere.second=0.10; betaSpheres.append(thisBetaSphere); } Avogadro::QTAIMLSODAIntegrator ode(eval,0); // Avogadro::QTAIMODEIntegrator ode(eval,0); ode.setBetaSpheres(betaSpheres); QVector3D endpoint=ode.integrate(QVector3D(x0,y0,z0)); // QList path=ode.path(); #define HUGE_REAL_NUMBER 1.e20 qreal smallestDistance=HUGE_REAL_NUMBER; qint64 smallestDistanceIndex=-1; for( qint64 n=0 ; n < betaSpheres.length() ; ++n ) { Matrix a(endpoint.x(),endpoint.y(),endpoint.z()); Matrix b(betaSpheres.at(n).first.x(), betaSpheres.at(n).first.y(), betaSpheres.at(n).first.z()); qreal distance=Avogadro::QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance = distance; smallestDistanceIndex=n; } } qint64 nucleusIndex=smallestDistanceIndex; if( basinSet.contains(nucleusIndex) ) { // if(nucleusIndex==0) // { // QFile file("/scratch/brown/0.txt"); // file.open(QIODevice::WriteOnly | QIODevice::Append); // QTextStream out(&file); // out << x0 << " " << y0 << " " << z0 << "\n"; // file.close(); // } for( qint64 m=0 ; m < nmode ; ++m ) { if( modeList.at(m) == 0 ) { valueList.append(eval.electronDensity( Eigen::Vector3d(x0,y0,z0) )); } else { qDebug() << "mode not defined"; qreal zero=0.0; valueList.append(zero); } } } else { for(qint64 m=0 ; m < nmode ; ++m) { qreal zero=0.0; valueList.append(zero); } } } return valueList; } void property_v(unsigned int /* ndim */, unsigned int npts, const double *xyz, void *param, unsigned int /* dim */, double *fval) { QVariantList *paramVariantListPtr = (QVariantList *)param; QVariantList paramVariantList=*paramVariantListPtr; qint64 counter=0; QString wfnFileName=paramVariantList.at(counter).toString(); counter++; qint64 nncp=paramVariantList.at(counter).toLongLong(); counter++; QList ncpList; for( qint64 i=0 ; i < nncp ; ++i ) { qreal x=paramVariantList.at(counter).toDouble(); counter++; qreal y=paramVariantList.at(counter).toDouble(); counter++; qreal z=paramVariantList.at(counter).toDouble(); counter++; ncpList.append(QVector3D(x,y,z)); } qint64 nmode=1; qint64 mode=paramVariantList.at(counter).toLongLong(); counter++; QList basinList; for( qint64 i=counter ; i < paramVariantList.length() ; ++i ) { basinList.append( paramVariantList.at(i).toLongLong() ); counter++; } // prepare input QList > inputList; for(unsigned int i=0 ; i < npts ; ++i ) { double x0=xyz[i*3+0]; double y0=xyz[i*3+1]; double z0=xyz[i*3+2]; QList variantList; variantList.append(wfnFileName); variantList.append(x0); variantList.append(y0); variantList.append(z0); variantList.append(nncp); for(qint64 n=0; n < nncp ; ++n) { variantList.append(ncpList.at(n).x()); variantList.append(ncpList.at(n).y()); variantList.append(ncpList.at(n).z()); } variantList.append(nmode); // for now, one mode for( qint64 m=0 ; m futureWatcher; QObject::connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset())); QObject::connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel())); QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &dialog, SLOT(setRange(int,int))); QObject::connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int))); QFuture > future=QtConcurrent::mapped(inputList, QTAIMEvaluateProperty); futureWatcher.setFuture(future); dialog.exec(); futureWatcher.waitForFinished(); QList > results; if( futureWatcher.future().isCanceled() ) { results.clear(); } else { results=future.results(); } // harvest results for(qint64 i=0; i QTAIMEvaluatePropertyRTP(QList variantList) { /* Order of variantList: QString wfnFileName qreal r0 qreal t0 qreal p0 qint64 nncp qint64 xncp1 qint64 yncp1 qint64 zncp1 qint64 xncp2 qint64 yncp2 qint64 zncp2 ... qint64 nmode qint64 mode1 qint64 mode2 ... qint64 nbasin qint64 basin1 qint64 basin2 ... */ qint64 counter=0; QString wfnFileName=variantList.at(counter).toString(); counter++; qreal r0=variantList.at(counter).toDouble(); counter++; qreal t0=variantList.at(counter).toDouble(); counter++; qreal p0=variantList.at(counter).toDouble(); counter++; qint64 nncp=variantList.at(counter).toLongLong(); counter++; QList ncpList; for( qint64 n=0 ; n < nncp ; ++n ) { qreal x=variantList.at(counter).toDouble(); counter++; qreal y=variantList.at(counter).toDouble(); counter++; qreal z=variantList.at(counter).toDouble(); counter++; ncpList.append(QVector3D(x,y,z)); } qint64 nmode=variantList.at(counter).toLongLong(); counter++; QList modeList; for( qint64 m=0 ; m < nmode ; ++m ) { qint64 mode=variantList.at(counter).toLongLong(); counter++; modeList.append(mode); } qint64 nbasin=variantList.at(counter).toLongLong(); counter++; QList basinList; for( qint64 b=0 ; b < nbasin ; ++b ) { qint64 basin=variantList.at(counter).toLongLong(); counter++; basinList.append(basin); } QSet basinSet=basinList.toSet(); Matrix r0t0p0; r0t0p0 << r0, t0, p0; Matrix origin; origin << ncpList.at(basinList.at(0)).x(), ncpList.at(basinList.at(0)).y(), ncpList.at(basinList.at(0)).z(); Matrix x0y0z0=Avogadro::QTAIMMathUtilities::sphericalToCartesian(r0t0p0, origin ); qreal x0=x0y0z0(0); qreal y0=x0y0z0(1); qreal z0=x0y0z0(2); Avogadro::QTAIMWavefunction wfn; wfn.loadFromBinaryFile(wfnFileName); Avogadro::QTAIMWavefunctionEvaluator eval(wfn); QList valueList; double initialElectronDensity=eval.electronDensity( Eigen::Vector3d(x0,y0,z0) ); // if less than some small value, then return zero for all integrands. if( initialElectronDensity < 1.e-5 ) { for( qint64 m=0; m < nmode ; ++m ) { qreal zero=0.0; valueList.append(zero); } } else { QList > betaSpheres; for( qint64 i=0 ; i < nncp ; ++i ) { QPair thisBetaSphere; thisBetaSphere.first=QVector3D(ncpList.at(i).x(), ncpList.at(i).y(),ncpList.at(i).z()); thisBetaSphere.second=0.10; betaSpheres.append(thisBetaSphere); } Avogadro::QTAIMLSODAIntegrator ode(eval,0); // Avogadro::QTAIMODEIntegrator ode(eval,0); ode.setBetaSpheres(betaSpheres); QVector3D endpoint=ode.integrate(QVector3D(x0,y0,z0)); // QList path=ode.path(); #define HUGE_REAL_NUMBER 1.e20 qreal smallestDistance=HUGE_REAL_NUMBER; qint64 smallestDistanceIndex=-1; for( qint64 n=0 ; n < betaSpheres.length() ; ++n ) { Matrix a(endpoint.x(),endpoint.y(),endpoint.z()); Matrix b(betaSpheres.at(n).first.x(), betaSpheres.at(n).first.y(), betaSpheres.at(n).first.z()); qreal distance=Avogadro::QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance = distance; smallestDistanceIndex=n; } } qint64 nucleusIndex=smallestDistanceIndex; if( basinSet.contains(nucleusIndex) ) { // if(nucleusIndex==0) // { // QFile file("/scratch/brown/0.txt"); // file.open(QIODevice::WriteOnly | QIODevice::Append); // QTextStream out(&file); // out << x0 << " " << y0 << " " << z0 << "\n"; //// out << r0 << " " << t0 << " " << p0 << "\n"; // file.close(); // } for( qint64 m=0 ; m < nmode ; ++m ) { if( modeList.at(m) == 0 ) { valueList.append( r0*r0*sin(t0)*eval.electronDensity( Eigen::Vector3d(x0,y0,z0) ) ); } else { qDebug() << "mode not defined"; qreal zero=0.0; valueList.append(zero); } } } else { for(qint64 m=0 ; m < nmode ; ++m) { qreal zero=0.0; valueList.append(zero); } } } return valueList; } void property_v_rtp(unsigned int /* ndim */, unsigned int npts, const double *xyz, void *param, unsigned int /* fdim */, double *fval) { QVariantList *paramVariantListPtr = (QVariantList *)param; QVariantList paramVariantList=*paramVariantListPtr; qint64 counter=0; QString wfnFileName=paramVariantList.at(counter).toString(); counter++; qint64 nncp=paramVariantList.at(counter).toLongLong(); counter++; QList ncpList; for( qint64 i=0 ; i < nncp ; ++i ) { qreal x=paramVariantList.at(counter).toDouble(); counter++; qreal y=paramVariantList.at(counter).toDouble(); counter++; qreal z=paramVariantList.at(counter).toDouble(); counter++; ncpList.append(QVector3D(x,y,z)); } qint64 nmode=1; qint64 mode=paramVariantList.at(counter).toLongLong(); counter++; QList basinList; for( qint64 i=counter ; i < paramVariantList.length() ; ++i ) { basinList.append( paramVariantList.at(i).toLongLong() ); counter++; } // prepare input QList > inputList; for(unsigned int i=0 ; i < npts ; ++i ) { double x0=xyz[i*3+0]; double y0=xyz[i*3+1]; double z0=xyz[i*3+2]; QList variantList; variantList.append(wfnFileName); variantList.append(x0); variantList.append(y0); variantList.append(z0); variantList.append(nncp); for(qint64 n=0; n < nncp ; ++n) { variantList.append(ncpList.at(n).x()); variantList.append(ncpList.at(n).y()); variantList.append(ncpList.at(n).z()); } variantList.append(nmode); // for now, one mode for( qint64 m=0 ; m futureWatcher; QObject::connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset())); QObject::connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel())); QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &dialog, SLOT(setRange(int,int))); QObject::connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int))); QFuture > future=QtConcurrent::mapped(inputList, QTAIMEvaluatePropertyRTP); futureWatcher.setFuture(future); dialog.exec(); futureWatcher.waitForFinished(); QList > results; if( futureWatcher.future().isCanceled() ) { results.clear(); } else { results=future.results(); } // harvest results for(qint64 i=0; i ncpList; for( qint64 i=0 ; i < nncp ; ++i ) { qreal x=paramVariantList.at(counter).toDouble(); counter++; qreal y=paramVariantList.at(counter).toDouble(); counter++; qreal z=paramVariantList.at(counter).toDouble(); counter++; ncpList.append(QVector3D(x,y,z)); } qint64 nmode=1; qint64 mode=paramVariantList.at(counter).toLongLong(); counter++; QList basinList; for( qint64 i=counter ; i < paramVariantList.length() ; ++i ) { basinList.append( paramVariantList.at(i).toLongLong() ); counter++; } Matrix rtp; rtp << r, t, p; Matrix origin; origin << ncpList.at(basinList.at(0)).x(), ncpList.at(basinList.at(0)).y(), ncpList.at(basinList.at(0)).z(); Matrix XYZ=Avogadro::QTAIMMathUtilities::sphericalToCartesian(rtp, origin ); qreal x=XYZ(0); qreal y=XYZ(1); qreal z=XYZ(2); // This routine reads the wavefunction file repeatedly. // Let's hope that this time is dwarfed by the time // taken to delineate the atomic basins in the calling routine. Avogadro::QTAIMWavefunction wfn; wfn.loadFromBinaryFile(wfnFileName); Avogadro::QTAIMWavefunctionEvaluator eval(wfn); for(qint64 m=0; m QTAIMEvaluatePropertyTP(QList variantList) { /* Order of variantList: QString wfnFileName qreal t qreal p qint64 nncp qint64 xncp1 qint64 yncp1 qint64 zncp1 qint64 xncp2 qint64 yncp2 qint64 zncp2 ... qint64 nmode qint64 mode1 qint64 mode2 ... qint64 nbasin qint64 basin1 qint64 basin2 ... */ qint64 counter=0; QString wfnFileName=variantList.at(counter).toString(); counter++; qreal t=variantList.at(counter).toDouble(); counter++; qreal p=variantList.at(counter).toDouble(); counter++; qint64 nncp=variantList.at(counter).toLongLong(); counter++; QList ncpList; for( qint64 n=0 ; n < nncp ; ++n ) { qreal x=variantList.at(counter).toDouble(); counter++; qreal y=variantList.at(counter).toDouble(); counter++; qreal z=variantList.at(counter).toDouble(); counter++; ncpList.append(QVector3D(x,y,z)); } qint64 nmode=variantList.at(counter).toLongLong(); counter++; QList modeList; for( qint64 m=0 ; m < nmode ; ++m ) { qint64 mode=variantList.at(counter).toLongLong(); counter++; modeList.append(mode); } qint64 nbasin=variantList.at(counter).toLongLong(); counter++; QList basinList; for( qint64 b=0 ; b < nbasin ; ++b ) { qint64 basin=variantList.at(counter).toLongLong(); counter++; basinList.append(basin); } QSet basinSet=basinList.toSet(); Avogadro::QTAIMWavefunction wfn; wfn.loadFromBinaryFile(wfnFileName); Avogadro::QTAIMWavefunctionEvaluator eval(wfn); // Set up steepest ascent integrator and beta spheres QList > betaSpheres; for( qint64 i=0 ; i < nncp ; ++i ) { QPair thisBetaSphere; thisBetaSphere.first=QVector3D(ncpList.at(i).x(), ncpList.at(i).y(),ncpList.at(i).z()); thisBetaSphere.second=0.10; betaSpheres.append(thisBetaSphere); } Avogadro::QTAIMLSODAIntegrator ode(eval,0); // Avogadro::QTAIMODEIntegrator ode(eval,0); ode.setBetaSpheres(betaSpheres); // Determine radial basin limit via bisection // Bisection Algorithm courtesey of Wikipedia qint64 thisBasin=basinList.at(0); Matrix origin; origin << ncpList.at(thisBasin).x(), ncpList.at(thisBasin).y(), ncpList.at(thisBasin).z(); const qreal rmin=betaSpheres.at(thisBasin).second; const qreal rmax=8.0; const qreal epsilon=1.e-3; qreal left=rmin; qreal right=rmax; Matrix rtpl; rtpl << left, t, p; Matrix xyzl=Avogadro::QTAIMMathUtilities::sphericalToCartesian(rtpl, origin); qreal fleft; qreal x=xyzl(0); qreal y=xyzl(1); qreal z=xyzl(2); qreal leftElectronDensity=eval.electronDensity( Eigen::Vector3d(x,y,z) ); if( leftElectronDensity < 1.e-5 ) { fleft=-1.0; } else { QVector3D endpoint=ode.integrate(QVector3D(x,y,z)); #define HUGE_REAL_NUMBER 1.e20 qreal smallestDistance=HUGE_REAL_NUMBER; qint64 smallestDistanceIndex=-1; for( qint64 n=0 ; n < betaSpheres.length() ; ++n ) { Matrix a(endpoint.x(),endpoint.y(),endpoint.z()); Matrix b(betaSpheres.at(n).first.x(), betaSpheres.at(n).first.y(), betaSpheres.at(n).first.z()); qreal distance=Avogadro::QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance = distance; smallestDistanceIndex=n; } } qint64 nucleusIndex=smallestDistanceIndex; if( thisBasin == nucleusIndex ) { fleft=leftElectronDensity; } else { fleft=-1.0; } } Matrix rtpr; rtpr << right, t, p; Matrix xyzr=Avogadro::QTAIMMathUtilities::sphericalToCartesian(rtpr, origin); qreal fright; x=xyzr(0); y=xyzr(1); z=xyzr(2); qreal rightElectronDensity=eval.electronDensity( Eigen::Vector3d(x,y,z) ); if( rightElectronDensity < 1.e-5 ) { fright=-1.0; } else { QVector3D endpoint=ode.integrate(QVector3D(x,y,z)); #define HUGE_REAL_NUMBER 1.e20 qreal smallestDistance=HUGE_REAL_NUMBER; qint64 smallestDistanceIndex=-1; for( qint64 n=0 ; n < betaSpheres.length() ; ++n ) { Matrix a(endpoint.x(),endpoint.y(),endpoint.z()); Matrix b(betaSpheres.at(n).first.x(), betaSpheres.at(n).first.y(), betaSpheres.at(n).first.z()); qreal distance=Avogadro::QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance = distance; smallestDistanceIndex=n; } } qint64 nucleusIndex=smallestDistanceIndex; if( thisBasin == nucleusIndex ) { fright=rightElectronDensity; } else { fright=-1.0; } } if( fleft > 0.0 && fright > 0.0) { qDebug() << "error in bisection: both values positive."; } qreal rf(0.0); while( fabs(right-left) > 2.0 * epsilon ) { qreal midpoint = (right + left) / 2.0; rf=midpoint; // qDebug() << left << midpoint << right ; Matrix rtpm; rtpm << midpoint, t, p; Matrix xyzm=Avogadro::QTAIMMathUtilities::sphericalToCartesian(rtpm, origin); qreal fmidpoint; x=xyzm(0); y=xyzm(1); z=xyzm(2); qreal midpointElectronDensity=eval.electronDensity( Eigen::Vector3d(x,y,z) ); if( midpointElectronDensity < 1.e-5 ) { fmidpoint=-1.0; } else { QVector3D endpoint=ode.integrate(QVector3D(x,y,z)); #define HUGE_REAL_NUMBER 1.e20 qreal smallestDistance=HUGE_REAL_NUMBER; qint64 smallestDistanceIndex=-1; for( qint64 n=0 ; n < betaSpheres.length() ; ++n ) { Matrix a(endpoint.x(),endpoint.y(),endpoint.z()); Matrix b(betaSpheres.at(n).first.x(), betaSpheres.at(n).first.y(), betaSpheres.at(n).first.z()); qreal distance=Avogadro::QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance = distance; smallestDistanceIndex=n; } } qint64 nucleusIndex=smallestDistanceIndex; if( thisBasin == nucleusIndex ) { fmidpoint=midpointElectronDensity; } else { fmidpoint=-1.0; } } if( (fleft * fmidpoint) < 0 ) { right=midpoint; fright=fmidpoint; } else if ( (fright * fmidpoint) < 0 ) { left=midpoint; fleft=fmidpoint; } else { goto endOfBisection; } } endOfBisection: // Integration over r unsigned int fdim=1; double *val; double *err; val = (double *) qMalloc(sizeof(double) * fdim); err = (double *) qMalloc(sizeof(double) * fdim); double tol=1.e-6; unsigned int maxEval=0; unsigned int dim=1; double *xmin; double *xmax; xmin = (double *) qMalloc(dim * sizeof(double)); xmax = (double *) qMalloc(dim * sizeof(double)); xmin[0] = 0.0; xmax[0] = rf; QVariantList paramVariantList; paramVariantList.append(wfnFileName); paramVariantList.append(t); paramVariantList.append(p); paramVariantList.append(ncpList.length()); // number of nuclear critical points for( qint64 j=0 ; j < ncpList.length() ; ++j) { paramVariantList.append(ncpList.at(j).x() ); paramVariantList.append(ncpList.at(j).y() ); paramVariantList.append(ncpList.at(j).z() ); } paramVariantList.append(0); // mode paramVariantList.append( basinList.at(0) ); // basin // qDebug() << "Into R with rf=" << rf; adapt_integrate(fdim, property_r, ¶mVariantList, dim, xmin, xmax, maxEval, tol, 0, val, err); // qDebug() << "Out of R with val=" << val[0] << "err=" << err[0]; qreal Rval=val[0]; qFree(xmin); qFree(xmax); qFree(val); qFree(err); // QList variantList; variantList.append(sin(t)*Rval); // qDebug() << rf << t << p << sin(t) * Rval; return variantList; } void property_v_tp(unsigned int /* ndim */, unsigned int npts, const double *xyz, void *param, unsigned int /* fdim */, double *fval) { QVariantList *paramVariantListPtr = (QVariantList *)param; QVariantList paramVariantList=*paramVariantListPtr; qint64 counter=0; QString wfnFileName=paramVariantList.at(counter).toString(); counter++; qint64 nncp=paramVariantList.at(counter).toLongLong(); counter++; QList ncpList; for( qint64 i=0 ; i < nncp ; ++i ) { qreal x=paramVariantList.at(counter).toDouble(); counter++; qreal y=paramVariantList.at(counter).toDouble(); counter++; qreal z=paramVariantList.at(counter).toDouble(); counter++; ncpList.append(QVector3D(x,y,z)); } qint64 nmode=1; qint64 mode=paramVariantList.at(counter).toLongLong(); counter++; QList basinList; for( qint64 i=counter ; i < paramVariantList.length() ; ++i ) { basinList.append( paramVariantList.at(i).toLongLong() ); counter++; } // prepare input QList > inputList; for(unsigned int i=0 ; i < npts ; ++i ) { double t=xyz[i*2+0]; double p=xyz[i*2+1]; QList variantList; variantList.append(wfnFileName); variantList.append(t); variantList.append(p); variantList.append(nncp); for(qint64 n=0; n < nncp ; ++n) { variantList.append(ncpList.at(n).x()); variantList.append(ncpList.at(n).y()); variantList.append(ncpList.at(n).z()); } variantList.append(nmode); // for now, one mode for( qint64 m=0 ; m futureWatcher; QObject::connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset())); QObject::connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel())); QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &dialog, SLOT(setRange(int,int))); QObject::connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int))); QFuture > future=QtConcurrent::mapped(inputList, QTAIMEvaluatePropertyTP); futureWatcher.setFuture(future); dialog.exec(); futureWatcher.waitForFinished(); QList > results; if( futureWatcher.future().isCanceled() ) { results.clear(); } else { results=future.results(); } // harvest results // qDebug() << "results=" << results; for(qint64 i=0; i < npts ; ++i) { for(qint64 m=0; msaveToBinaryFile(m_temporaryFileName); // Instantiate a Critical Point Locator QTAIMCriticalPointLocator cpl(wfn); // Locate the Nuclear Critical Points cpl.locateNuclearCriticalPoints(); // QLists of results m_ncpList=cpl.nuclearCriticalPoints(); } QList > QTAIMCubature::integrate(qint64 mode, QList basins ) { QList > value; m_mode=mode; m_basins=basins; double tol=1.e-2; unsigned int maxEval=0; bool threeDimensionalIntegration=false; bool cartesianIntegrationLimits=false; unsigned int fdim=1; double *val; double *err; val = (double *) qMalloc(sizeof(double) * fdim); err = (double *) qMalloc(sizeof(double) * fdim); for( qint64 i=0 ; i < m_basins.length() ; ++i) { if(threeDimensionalIntegration) { unsigned int dim=3; double *xmin; double *xmax; xmin = (double *) qMalloc(dim * sizeof(double)); xmax = (double *) qMalloc(dim * sizeof(double)); if(cartesianIntegrationLimits) { // shift origin of the integration to the nuclear coordinates of the ith nucleus. xmin[0]= -8. + m_ncpList.at(i).x(); xmax[0]= 8. + m_ncpList.at(i).x(); xmin[1]= -8. + m_ncpList.at(i).y(); xmax[1]= 8. + m_ncpList.at(i).y(); xmin[2]= -8. + m_ncpList.at(i).z(); xmax[2]= 8. + m_ncpList.at(i).z(); QVariantList paramVariantList; paramVariantList.append(m_temporaryFileName); paramVariantList.append(m_ncpList.length()); // number of nuclear critical points for( qint64 j=0 ; j < m_ncpList.length() ; ++j) { paramVariantList.append(m_ncpList.at(j).x() ); paramVariantList.append(m_ncpList.at(j).y() ); paramVariantList.append(m_ncpList.at(j).z() ); } paramVariantList.append(0); // mode paramVariantList.append( basins.at(i) ); // basin adapt_integrate_v(fdim, property_v, ¶mVariantList, dim, xmin, xmax, maxEval, tol, 0, val, err); } else { const qreal pi=4.0*atan(1.0); xmin[0]= 0.; xmax[0]= 8.; xmin[1]= 0.; xmax[1]= pi; xmin[2]= 0.; xmax[2]= 2.0*pi; QVariantList paramVariantList; paramVariantList.append(m_temporaryFileName); paramVariantList.append(m_ncpList.length()); // number of nuclear critical points for( qint64 j=0 ; j < m_ncpList.length() ; ++j) { paramVariantList.append(m_ncpList.at(j).x() ); paramVariantList.append(m_ncpList.at(j).y() ); paramVariantList.append(m_ncpList.at(j).z() ); } paramVariantList.append(0); // mode paramVariantList.append( basins.at(i) ); // basin adapt_integrate_v(fdim, property_v_rtp, ¶mVariantList, dim, xmin, xmax, maxEval, tol, 0, val, err); } qFree(xmin); qFree(xmax); } else { unsigned int dim=2; double *xmin; double *xmax; xmin = (double *) qMalloc(dim * sizeof(double)); xmax = (double *) qMalloc(dim * sizeof(double)); const qreal pi=4.0*atan(1.0); xmin[0]= 0.; xmax[0]= pi; xmin[1]= 0.; xmax[1]= 2.0*pi; QVariantList paramVariantList; paramVariantList.append(m_temporaryFileName); paramVariantList.append(m_ncpList.length()); // number of nuclear critical points for( qint64 j=0 ; j < m_ncpList.length() ; ++j) { paramVariantList.append(m_ncpList.at(j).x() ); paramVariantList.append(m_ncpList.at(j).y() ); paramVariantList.append(m_ncpList.at(j).z() ); } paramVariantList.append(0); // mode paramVariantList.append( basins.at(i) ); // basin adapt_integrate_v(fdim, property_v_tp, ¶mVariantList, dim, xmin, xmax, maxEval, tol, 0, val, err); qFree(xmin); qFree(xmax); } qDebug() <<"basin=" << basins.at(i) + 1 << "value= " << val[0] << "err=" << err[0]; QPair thisPair; thisPair.first=val[0]; thisPair.second=err[0]; value.append(thisPair); } qFree(val); qFree(err); return value; } QTAIMCubature::~QTAIMCubature() { if( QFile::exists(m_temporaryFileName) ) { QFile::remove(m_temporaryFileName); } } void QTAIMCubature::setMode(qint64 mode) { m_mode=mode; } QString QTAIMCubature::temporaryFileName() { QTemporaryFile temporaryFile; temporaryFile.open(); QString temporaryFileName=temporaryFile.fileName(); temporaryFile.close(); temporaryFile.remove(); // wait for temporary file to be deleted QDir dir; do { // Nothing } while ( dir.exists(temporaryFileName) ); return temporaryFileName; } } avogadro-1.1.1/libavogadro/src/extensions/qtaim/qtaimcriticalpointlocator.cpp0000644000175000001440000007335312250371054027121 0ustar marcususers/********************************************************************** QTAIM - Extension for Quantum Theory of Atoms In Molecules Analysis Copyright (C) 2010 Eric C. Brown This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "qtaimcriticalpointlocator.h" #include "qtaimwavefunction.h" #include "qtaimodeintegrator.h" #include "qtaimlsodaintegrator.h" #include "qtaimmathutilities.h" #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace Eigen; #define HUGE_REAL_NUMBER 1.e20 #define SMALL_GRADIENT_NORM 1.e-4 namespace Avogadro { QList QTAIMLocateNuclearCriticalPoint( QList input ) { const QString fileName=input.at(0).toString(); const qint64 nucleus=input.at(1).toInt(); const QVector3D x0y0z0( input.at(2).toReal(), input.at(3).toReal(), input.at(4).toReal() ); QTAIMWavefunction wfn; wfn.loadFromBinaryFile(fileName); QTAIMWavefunctionEvaluator eval(wfn); QVector3D result; if( wfn.nuclearCharge(nucleus) < 4 ) { // QTAIMODEIntegrator ode(eval,QTAIMODEIntegrator::CMBPMinusThreeGradientInElectronDensity); QTAIMLSODAIntegrator ode(eval,QTAIMLSODAIntegrator::CMBPMinusThreeGradientInElectronDensity); result=ode.integrate(x0y0z0); } else { result=x0y0z0; } bool correctSignature; Matrix xyz; xyz << result.x(), result.y(), result.z(); if( QTAIMMathUtilities::signatureOfASymmetricThreeByThreeMatrix( eval.hessianOfElectronDensity(xyz) ) == -3 ) { correctSignature=true; } else { correctSignature=false; } QList value; if( correctSignature ) { value.append(correctSignature); value.append(result.x()); value.append(result.y()); value.append(result.z()); } else { value.append(false); } return value; } QList QTAIMLocateBondCriticalPoint( QList input ) { QList value; value.clear(); const QString wfnFileName=input.at(0).toString(); const QString nuclearCriticalPointsFileName=input.at(1).toString(); const qint64 nucleusA=input.at(2).toInt(); const qint64 nucleusB=input.at(3).toInt(); const QVector3D x0y0z0( input.at(4).toReal(), input.at(5).toReal(), input.at(6).toReal() ); QTAIMWavefunction wfn; wfn.loadFromBinaryFile(wfnFileName); QList nuclearCriticalPoints; QFile nuclearCriticalPointsFile(nuclearCriticalPointsFileName); nuclearCriticalPointsFile.open(QIODevice::ReadOnly); QDataStream nuclearCriticalPointsFileIn(&nuclearCriticalPointsFile); nuclearCriticalPointsFileIn >> nuclearCriticalPoints ; nuclearCriticalPointsFile.close(); QList > betaSpheres; for( qint64 i=0 ; i < nuclearCriticalPoints.length() ; ++i ) { QPair thisBetaSphere; thisBetaSphere.first=nuclearCriticalPoints.at(i); thisBetaSphere.second=0.1; betaSpheres.append(thisBetaSphere); } QTAIMWavefunctionEvaluator eval(wfn); QList ncpList; QVector3D result; // QTAIMODEIntegrator ode(eval,QTAIMODEIntegrator::CMBPMinusOneGradientInElectronDensity); QTAIMLSODAIntegrator ode(eval,QTAIMLSODAIntegrator::CMBPMinusOneGradientInElectronDensity); result=ode.integrate(x0y0z0); Matrix xyz; xyz << result.x(), result.y(), result.z(); if( !( QTAIMMathUtilities::signatureOfASymmetricThreeByThreeMatrix( eval.hessianOfElectronDensity(xyz) ) == -1 ) || (eval.gradientOfElectronDensity(xyz)).norm() > SMALL_GRADIENT_NORM ) { value.append(false); value.append(result.x()); value.append(result.y()); value.append(result.z()); return value; } Matrix eigenvectorsOfHessian; eigenvectorsOfHessian=QTAIMMathUtilities::eigenvectorsOfASymmetricThreeByThreeMatrix( eval.hessianOfElectronDensity(xyz) ); Matrix highestEigenvectorOfHessian; highestEigenvectorOfHessian << eigenvectorsOfHessian(0,2), eigenvectorsOfHessian(1,2), eigenvectorsOfHessian(2,2); const qreal smallStep=0.01; QVector3D forwardStartingPoint( result.x() + smallStep*highestEigenvectorOfHessian(0), result.y() + smallStep*highestEigenvectorOfHessian(1), result.z() + smallStep*highestEigenvectorOfHessian(2) ); QVector3D backwardStartingPoint( result.x() - smallStep*highestEigenvectorOfHessian(0), result.y() - smallStep*highestEigenvectorOfHessian(1), result.z() - smallStep*highestEigenvectorOfHessian(2) ); // QTAIMODEIntegrator forwardODE(eval,QTAIMODEIntegrator::SteepestAscentPathInElectronDensity); QTAIMLSODAIntegrator forwardODE(eval,QTAIMLSODAIntegrator::SteepestAscentPathInElectronDensity); forwardODE.setBetaSpheres( betaSpheres ); QVector3D forwardEndpoint=forwardODE.integrate(forwardStartingPoint); QList forwardPath=forwardODE.path(); // QTAIMODEIntegrator backwardODE(eval,QTAIMODEIntegrator::SteepestAscentPathInElectronDensity); QTAIMLSODAIntegrator backwardODE(eval,QTAIMLSODAIntegrator::SteepestAscentPathInElectronDensity); backwardODE.setBetaSpheres( betaSpheres ); QVector3D backwardEndpoint=backwardODE.integrate(backwardStartingPoint); QList backwardPath=backwardODE.path(); qreal smallestDistance=HUGE_REAL_NUMBER; qint64 smallestDistanceIndex=0; for( qint64 n=0 ; n < wfn.numberOfNuclei() ; ++n ) { Matrix a(forwardEndpoint.x(),forwardEndpoint.y(),forwardEndpoint.z()); Matrix b(wfn.xNuclearCoordinate(n), wfn.yNuclearCoordinate(n), wfn.zNuclearCoordinate(n)); qreal distance=QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance = distance; smallestDistanceIndex=n; } } qint64 forwardNucleusIndex=smallestDistanceIndex; smallestDistance=HUGE_REAL_NUMBER; smallestDistanceIndex=0; for( qint64 n=0 ; n < wfn.numberOfNuclei() ; ++n ) { Matrix a(backwardEndpoint.x(),backwardEndpoint.y(),backwardEndpoint.z()); Matrix b(wfn.xNuclearCoordinate(n), wfn.yNuclearCoordinate(n), wfn.zNuclearCoordinate(n)); qreal distance=QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance = distance; smallestDistanceIndex=n; } } qint64 backwardNucleusIndex=smallestDistanceIndex; bool bondPathConnectsPair; if( (forwardNucleusIndex == nucleusA && backwardNucleusIndex == nucleusB) || (forwardNucleusIndex == nucleusB && backwardNucleusIndex == nucleusA) ) { bondPathConnectsPair=true; } else { bondPathConnectsPair=false; } if( bondPathConnectsPair ) { value.append(true); value.append(nucleusA); value.append(nucleusB); value.append(result.x()); value.append(result.y()); value.append(result.z()); Matrix xyz ; xyz << result.x(),result.y(),result.z(); value.append( eval.laplacianOfElectronDensity(xyz) ); value.append( QTAIMMathUtilities::ellipticityOfASymmetricThreeByThreeMatrix( eval.hessianOfElectronDensity(xyz) ) ); value.append( 1 + forwardPath.length() + 1 + backwardPath.length() + 1); value.append( forwardEndpoint.x() ); for(qint64 i=forwardPath.length() - 1 ; i >= 0 ; --i) { value.append( forwardPath.at(i).x() ); } value.append(result.x()); for(qint64 i=0; i < backwardPath.length() ; ++i) { value.append( backwardPath.at(i).x() ); } value.append( backwardEndpoint.x() ); value.append( forwardEndpoint.y() ); for(qint64 i=forwardPath.length() - 1 ; i >= 0 ; --i) { value.append( forwardPath.at(i).y() ); } value.append(result.y()); for(qint64 i=0; i < backwardPath.length() ; ++i) { value.append( backwardPath.at(i).y() ); } value.append( backwardEndpoint.y() ); value.append( forwardEndpoint.z() ); for(qint64 i=forwardPath.length() - 1 ; i >= 0 ; --i) { value.append( forwardPath.at(i).z() ); } value.append(result.z()); for(qint64 i=0; i < backwardPath.length() ; ++i) { value.append( backwardPath.at(i).z() ); } value.append( backwardEndpoint.z() ); } else { value.append(false); // for debugging value.append(result.x()); value.append(result.y()); value.append(result.z()); } return value; } QList QTAIMLocateElectronDensitySink( QList input ) { qint64 counter=0; const QString fileName=input.at(counter).toString(); counter++; // const qint64 nucleus=input.at(counter).toInt(); counter++ qreal x0=input.at(counter).toReal(); counter++; qreal y0=input.at(counter).toReal(); counter++; qreal z0=input.at(counter).toReal(); counter++; const QVector3D x0y0z0(x0,y0,z0); QTAIMWavefunction wfn; wfn.loadFromBinaryFile(fileName); QTAIMWavefunctionEvaluator eval(wfn); bool correctSignature; QVector3D result; Matrix xyz; xyz << x0, y0, z0; if( eval.electronDensity( xyz ) < 1.e-1 ) { correctSignature=false; } else { // QTAIMODEIntegrator ode(eval,QTAIMODEIntegrator::CMBPMinusThreeGradientInElectronDensityLaplacian); QTAIMLSODAIntegrator ode(eval,QTAIMLSODAIntegrator::CMBPMinusThreeGradientInElectronDensityLaplacian); result=ode.integrate(x0y0z0); Matrix xyz; xyz << result.x(), result.y(), result.z(); if( eval.electronDensity(xyz) > 1.e-1 && eval.gradientOfElectronDensityLaplacian(xyz).norm() < 1.e-3 ) { if( QTAIMMathUtilities::signatureOfASymmetricThreeByThreeMatrix( eval.hessianOfElectronDensityLaplacian(xyz) ) == -3 ) { correctSignature=true; } else { correctSignature=false; } } else { correctSignature=false; } } QList value; if( correctSignature ) { value.append(correctSignature); value.append(result.x()); value.append(result.y()); value.append(result.z()); } else { value.append(false); } return value; } QList QTAIMLocateElectronDensitySource( QList input ) { qint64 counter=0; const QString fileName=input.at(counter).toString(); counter++; // const qint64 nucleus=input.at(counter).toInt(); counter++ qreal x0=input.at(counter).toReal(); counter++; qreal y0=input.at(counter).toReal(); counter++; qreal z0=input.at(counter).toReal(); counter++; const QVector3D x0y0z0(x0,y0,z0); QTAIMWavefunction wfn; wfn.loadFromBinaryFile(fileName); QTAIMWavefunctionEvaluator eval(wfn); bool correctSignature; QVector3D result; Matrix xyz; xyz << x0, y0, z0; if( eval.electronDensity( xyz ) < 1.e-1 ) { correctSignature=false; } else { // QTAIMODEIntegrator ode(eval,QTAIMODEIntegrator::CMBPPlusThreeGradientInElectronDensityLaplacian); QTAIMLSODAIntegrator ode(eval,QTAIMLSODAIntegrator::CMBPPlusThreeGradientInElectronDensityLaplacian); result=ode.integrate(x0y0z0); Matrix xyz; xyz << result.x(), result.y(), result.z(); if( eval.electronDensity(xyz) > 1.e-1 && eval.gradientOfElectronDensityLaplacian(xyz).norm() < 1.e-3 ) { if( QTAIMMathUtilities::signatureOfASymmetricThreeByThreeMatrix( eval.hessianOfElectronDensityLaplacian(xyz) ) == 3 ) { correctSignature=true; } else { correctSignature=false; } } else { correctSignature=false; } } QList value; if( correctSignature ) { value.append(correctSignature); value.append(result.x()); value.append(result.y()); value.append(result.z()); } else { value.append(false); } return value; } QTAIMCriticalPointLocator::QTAIMCriticalPointLocator( QTAIMWavefunction &wfn) { m_wfn=&wfn; m_nuclearCriticalPoints.empty(); m_bondCriticalPoints.empty(); m_ringCriticalPoints.empty(); m_cageCriticalPoints.empty(); m_laplacianAtBondCriticalPoints.empty(); m_ellipticityAtBondCriticalPoints.empty(); m_bondPaths.empty(); m_bondedAtoms.empty(); m_electronDensitySources.empty(); m_electronDensitySinks.empty(); } void QTAIMCriticalPointLocator::locateNuclearCriticalPoints() { QString temporaryFileName=QTAIMCriticalPointLocator::temporaryFileName(); QList > inputList; const qint64 numberOfNuclei = m_wfn->numberOfNuclei(); for( qint64 n=0 ; n < numberOfNuclei ; ++n) { QList input; input.append( temporaryFileName ); input.append( n ); input.append( m_wfn->xNuclearCoordinate(n) ); input.append( m_wfn->yNuclearCoordinate(n) ); input.append( m_wfn->zNuclearCoordinate(n) ); inputList.append(input); } m_wfn->saveToBinaryFile(temporaryFileName); QProgressDialog dialog; dialog.setWindowTitle("QTAIM"); dialog.setLabelText(QString("Nuclear Critical Points Search")); QFutureWatcher futureWatcher; QObject::connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset())); QObject::connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel())); QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &dialog, SLOT(setRange(int,int))); QObject::connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int))); QFuture > future=QtConcurrent::mapped(inputList, QTAIMLocateNuclearCriticalPoint); futureWatcher.setFuture(future); dialog.exec(); futureWatcher.waitForFinished(); QList > results; if( futureWatcher.future().isCanceled() ) { results.clear(); } else { results=future.results(); } QFile file; file.remove(temporaryFileName); for( qint64 n=0 ; n < results.length() ; ++n ) { bool correctSignature = results.at(n).at(0).toBool(); if (correctSignature) { QVector3D result( results.at(n).at(1).toReal(), results.at(n).at(2).toReal(), results.at(n).at(3).toReal() ); m_nuclearCriticalPoints.append( result ); } } } void QTAIMCriticalPointLocator::locateBondCriticalPoints() { if( m_nuclearCriticalPoints.length() < 1 ) { return; } const qint64 numberOfNuclei = m_wfn->numberOfNuclei(); if( numberOfNuclei < 2) { return; } QString temporaryFileName=QTAIMCriticalPointLocator::temporaryFileName(); QString nuclearCriticalPointsFileName=QTAIMCriticalPointLocator::temporaryFileName(); QFile nuclearCriticalPointsFile(nuclearCriticalPointsFileName); nuclearCriticalPointsFile.open(QIODevice::WriteOnly); QDataStream nuclearCriticalPointsOut(&nuclearCriticalPointsFile); nuclearCriticalPointsOut << m_nuclearCriticalPoints; nuclearCriticalPointsFile.close(); QList > inputList; for( qint64 M=0 ; M < numberOfNuclei - 1 ; ++M ) { for( qint64 N=M+1 ; N < numberOfNuclei ; ++N ) { const qreal distanceCutoff = 8.0 ; Matrix a; Matrix b; a << m_wfn->xNuclearCoordinate(M), m_wfn->yNuclearCoordinate(M), m_wfn->zNuclearCoordinate(M) ; b << m_wfn->xNuclearCoordinate(N), m_wfn->yNuclearCoordinate(N), m_wfn->zNuclearCoordinate(N) ; if( QTAIMMathUtilities::distance(a,b) < distanceCutoff ) { QVector3D x0y0z0( ( m_wfn->xNuclearCoordinate(M) + m_wfn->xNuclearCoordinate(N) ) / 2.0 , ( m_wfn->yNuclearCoordinate(M) + m_wfn->yNuclearCoordinate(N) ) / 2.0, ( m_wfn->zNuclearCoordinate(M) + m_wfn->zNuclearCoordinate(N) ) / 2.0 ); QList input; input.append( temporaryFileName ); input.append( nuclearCriticalPointsFileName ); input.append( M ); input.append( N ); input.append( x0y0z0.x() ); input.append( x0y0z0.y() ); input.append( x0y0z0.z() ); inputList.append(input); } } // end N } // end M m_wfn->saveToBinaryFile(temporaryFileName); QProgressDialog dialog; dialog.setWindowTitle("QTAIM"); dialog.setLabelText(QString("Bond Critical Points Search")); QFutureWatcher futureWatcher; QObject::connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset())); QObject::connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel())); QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &dialog, SLOT(setRange(int,int))); QObject::connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int))); QFuture > future=QtConcurrent::mapped(inputList, QTAIMLocateBondCriticalPoint);; futureWatcher.setFuture(future); dialog.exec(); futureWatcher.waitForFinished(); QList > results; if( futureWatcher.future().isCanceled() ) { results.clear(); } else { results=future.results(); } QFile file; file.remove(temporaryFileName); file.remove(nuclearCriticalPointsFileName); for( qint64 i=0 ; i < results.length() ; ++i ) { QList thisCriticalPoint=results.at(i); bool success=thisCriticalPoint.at(0).toBool(); if(success) { QPair bondedAtoms; bondedAtoms.first=thisCriticalPoint.at(1).toInt(); bondedAtoms.second=thisCriticalPoint.at(2).toInt(); m_bondedAtoms.append( bondedAtoms ); QVector3D coordinates(thisCriticalPoint.at(3).toReal(), thisCriticalPoint.at(4).toReal(), thisCriticalPoint.at(5).toReal()); m_bondCriticalPoints.append( coordinates ); m_laplacianAtBondCriticalPoints.append(thisCriticalPoint.at(6).toReal()); m_ellipticityAtBondCriticalPoints.append(thisCriticalPoint.at(7).toReal()); qint64 pathLength=thisCriticalPoint.at(8).toInt(); QList bondPath; for( qint64 i=0 ; i < pathLength ; ++i ) { QVector3D pathPoint(thisCriticalPoint.at(9 + i ).toReal(), thisCriticalPoint.at(9 + i + pathLength ).toReal(), thisCriticalPoint.at(9 + i + 2*pathLength ).toReal()); bondPath.append(pathPoint); } m_bondPaths.append(bondPath); } } } void QTAIMCriticalPointLocator::locateElectronDensitySources() { QString temporaryFileName=QTAIMCriticalPointLocator::temporaryFileName(); QList > inputList; qreal xmin,ymin,zmin; qreal xmax,ymax,zmax; qreal xstep,ystep,zstep; // TODO: if only we were using Eigen data structures... QList xNuclearCoordinates; QList yNuclearCoordinates; QList zNuclearCoordinates; for( qint64 i=0; i < m_wfn->numberOfNuclei() ; ++i ) { xNuclearCoordinates.append( m_wfn->xNuclearCoordinate(i) ); yNuclearCoordinates.append( m_wfn->yNuclearCoordinate(i) ); zNuclearCoordinates.append( m_wfn->zNuclearCoordinate(i) ); } xmin=xNuclearCoordinates.first(); xmax=xNuclearCoordinates.first(); for( qint64 i=1 ; i < m_wfn->numberOfNuclei() ; ++i) { if( xNuclearCoordinates.at(i) < xmin ) { xmin=xNuclearCoordinates.at(i); } if( xNuclearCoordinates.at(i) > xmax ) { xmax=xNuclearCoordinates.at(i); } } ymin=yNuclearCoordinates.first(); ymax=yNuclearCoordinates.first(); for( qint64 i=1 ; i < yNuclearCoordinates.count() ; ++i) { if( yNuclearCoordinates.at(i) < ymin ) { ymin=yNuclearCoordinates.at(i); } if( yNuclearCoordinates.at(i) > ymax ) { ymax=yNuclearCoordinates.at(i); } } zmin=zNuclearCoordinates.first(); zmax=zNuclearCoordinates.first(); for( qint64 i=1 ; i < zNuclearCoordinates.count() ; ++i) { if( zNuclearCoordinates.at(i) < zmin ) { zmin=zNuclearCoordinates.at(i); } if( zNuclearCoordinates.at(i) > zmax ) { zmax=zNuclearCoordinates.at(i); } } xmin= -2.0 + xmin; ymin= -2.0 + ymin; zmin= -2.0 + zmin; xmax = 2.0 + xmax; ymax = 2.0 + ymax; zmax = 2.0 + zmax; xstep=ystep=zstep= 0.5; for( qreal x=xmin ; x < xmax+xstep ; x=x+xstep) { for( qreal y=ymin ; y < ymax+ystep ; y=y+ystep) { for( qreal z=zmin ; z < zmax+zstep ; z=z+zstep) { QList input; input.append( temporaryFileName ); // input.append( n ); input.append( x ); input.append( y ); input.append( z ); inputList.append(input); } } } m_wfn->saveToBinaryFile(temporaryFileName); QProgressDialog dialog; dialog.setWindowTitle("QTAIM"); dialog.setLabelText(QString("Electron Density Sources Search")); QFutureWatcher futureWatcher; QObject::connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset())); QObject::connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel())); QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &dialog, SLOT(setRange(int,int))); QObject::connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int))); QFuture > future=QtConcurrent::mapped(inputList, QTAIMLocateElectronDensitySource ); futureWatcher.setFuture(future); dialog.exec(); futureWatcher.waitForFinished(); QList > results; if( futureWatcher.future().isCanceled() ) { results.clear(); } else { results=future.results(); } QFile file; file.remove(temporaryFileName); for( qint64 n=0 ; n < results.length() ; ++n ) { qint64 counter=0; bool correctSignature = results.at(n).at(counter).toBool(); counter++; if( correctSignature ) { qreal x=results.at(n).at(counter).toReal(); counter++; qreal y=results.at(n).at(counter).toReal(); counter++; qreal z=results.at(n).at(counter).toReal(); counter++; if( (xmin < x && x < xmax) && (ymin < y && y < ymax) && (zmin < z && z < zmax) ) { QVector3D result(x,y,z); qreal smallestDistance=HUGE_REAL_NUMBER; for(qint64 i=0 ; i < m_electronDensitySources.length() ; ++i ) { Matrix a(x,y,z); Matrix b(m_electronDensitySources.at(i).x(), m_electronDensitySources.at(i).y(), m_electronDensitySources.at(i).z()); qreal distance=QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance=distance; } } if( smallestDistance > 1.e-2 ) { m_electronDensitySources.append( result ); } } } } // qDebug() << "SOURCES" << m_electronDensitySources; } void QTAIMCriticalPointLocator::locateElectronDensitySinks() { QString temporaryFileName=QTAIMCriticalPointLocator::temporaryFileName(); QList > inputList; qreal xmin,ymin,zmin; qreal xmax,ymax,zmax; qreal xstep,ystep,zstep; // TODO: if only we were using Eigen data structures... QList xNuclearCoordinates; QList yNuclearCoordinates; QList zNuclearCoordinates; for( qint64 i=0; i < m_wfn->numberOfNuclei() ; ++i ) { xNuclearCoordinates.append( m_wfn->xNuclearCoordinate(i) ); yNuclearCoordinates.append( m_wfn->yNuclearCoordinate(i) ); zNuclearCoordinates.append( m_wfn->zNuclearCoordinate(i) ); } xmin=xNuclearCoordinates.first(); xmax=xNuclearCoordinates.first(); for( qint64 i=1 ; i < m_wfn->numberOfNuclei() ; ++i) { if( xNuclearCoordinates.at(i) < xmin ) { xmin=xNuclearCoordinates.at(i); } if( xNuclearCoordinates.at(i) > xmax ) { xmax=xNuclearCoordinates.at(i); } } ymin=yNuclearCoordinates.first(); ymax=yNuclearCoordinates.first(); for( qint64 i=1 ; i < yNuclearCoordinates.count() ; ++i) { if( yNuclearCoordinates.at(i) < ymin ) { ymin=yNuclearCoordinates.at(i); } if( yNuclearCoordinates.at(i) > ymax ) { ymax=yNuclearCoordinates.at(i); } } zmin=zNuclearCoordinates.first(); zmax=zNuclearCoordinates.first(); for( qint64 i=1 ; i < zNuclearCoordinates.count() ; ++i) { if( zNuclearCoordinates.at(i) < zmin ) { zmin=zNuclearCoordinates.at(i); } if( zNuclearCoordinates.at(i) > zmax ) { zmax=zNuclearCoordinates.at(i); } } xmin= -2.0 + xmin; ymin= -2.0 + ymin; zmin= -2.0 + zmin; xmax = 2.0 + xmax; ymax = 2.0 + ymax; zmax = 2.0 + zmax; xstep=ystep=zstep= 0.5; for( qreal x=xmin ; x < xmax+xstep ; x=x+xstep) { for( qreal y=ymin ; y < ymax+ystep ; y=y+ystep) { for( qreal z=zmin ; z < zmax+zstep ; z=z+zstep) { QList input; input.append( temporaryFileName ); // input.append( n ); input.append( x ); input.append( y ); input.append( z ); inputList.append(input); } } } m_wfn->saveToBinaryFile(temporaryFileName); QProgressDialog dialog; dialog.setWindowTitle("QTAIM"); dialog.setLabelText(QString("Electron Density Sinks Search")); QFutureWatcher futureWatcher; QObject::connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset())); QObject::connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel())); QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &dialog, SLOT(setRange(int,int))); QObject::connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int))); QFuture > future=QtConcurrent::mapped(inputList, QTAIMLocateElectronDensitySink ); futureWatcher.setFuture(future); dialog.exec(); futureWatcher.waitForFinished(); QList > results; if( futureWatcher.future().isCanceled() ) { results.clear(); } else { results=future.results(); } QFile file; file.remove(temporaryFileName); for( qint64 n=0 ; n < results.length() ; ++n ) { qint64 counter=0; bool correctSignature = results.at(n).at(counter).toBool(); counter++; if( correctSignature ) { qreal x=results.at(n).at(counter).toReal(); counter++; qreal y=results.at(n).at(counter).toReal(); counter++; qreal z=results.at(n).at(counter).toReal(); counter++; if( (xmin < x && x < xmax) && (ymin < y && y < ymax) && (zmin < z && z < zmax) ) { QVector3D result(x,y,z); qreal smallestDistance=HUGE_REAL_NUMBER; for(qint64 i=0 ; i < m_electronDensitySinks.length() ; ++i ) { Matrix a(x,y,z); Matrix b(m_electronDensitySinks.at(i).x(), m_electronDensitySinks.at(i).y(), m_electronDensitySinks.at(i).z()); qreal distance=QTAIMMathUtilities::distance(a,b); if( distance < smallestDistance ) { smallestDistance=distance; } } if( smallestDistance > 1.e-2 ) { m_electronDensitySinks.append( result ); } } } } // qDebug() << "SINKS" << m_electronDensitySinks; } QString QTAIMCriticalPointLocator::temporaryFileName() { QTemporaryFile temporaryFile; temporaryFile.open(); QString temporaryFileName=temporaryFile.fileName(); temporaryFile.close(); temporaryFile.remove(); // wait for temporary file to be deleted QDir dir; do { // Nothing } while ( dir.exists(temporaryFileName) ); return temporaryFileName; } } // namespace Avogadro avogadro-1.1.1/libavogadro/src/extensions/trajvideomaker.h0000644000175000001440000000322612250371054023166 0ustar marcususers/********************************************************************** TrajVideoMaker - used to generate a video of a trajectory Copyright (C) 2008 by Naomi Fox This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef TRAJVIDEOMAKER_H #define TRAJVIDEOMAKER_H #include namespace Avogadro { class Animation; class TrajVideoMaker { public: //! Constructor TrajVideoMaker(); //! Destructor virtual ~TrajVideoMaker(); static void makeVideo(GLWidget *widget, Animation *animation, const QString& workDirectory, const QString& videoFileName); private: static double getAspectRatio(GLWidget* widget); static bool runPovRay(QString directory, QString povFileName); template static void runMencoder(QString pngFileDirectory, QString videoFileName, QStringIterator startPngFiles, QStringIterator endPngFiles); }; } #endif avogadro-1.1.1/libavogadro/src/extensions/icons/0000755000175000001440000000000012250371054021116 5ustar marcususersavogadro-1.1.1/libavogadro/src/extensions/icons/edit-paste.png0000644000175000001440000000165112250371054023666 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<&IDATxڥWKkQ>Լ@ Zlt}@ܺP(kXJj hCBnٝuҮ-Xɫ;9w8vr/\Ν{ι37eYi6 c/8Jarrrhn:t@0\y`ii7r{-L XXXDt5pyt:ijߪ2̻!F|>P C8a{~\|ݎvvvkLL˯l6 `'g>66vMLB"}jM*vm~ j#/۵1BZ? b1hZZ4VQ\Vyw"uS ζjU\.?#U4{gzAe3X*X,0 j I߅ 8s+u&Dkp O' 8 px gY'rc!ȵ )):oyqYť6!&1d3Rt1}I.BLu?єi؀9l;R,Rhbgc }\q.2:t2߇p( WH&ZY^Nu3 Z=>;pp`‹gVⰺ!Nm6n6o;VzPt?%\{ fc o߃ϟPwEMtݥS r+ݤnGdjD,/K@ݱVo?Ew[p;QBR$N^2E,-K J%ׅIENDB`avogadro-1.1.1/libavogadro/src/extensions/icons/amarok_next.png0000644000175000001440000000323312250371054024135 0ustar marcususersPNG  IHDR DPLTE  !!!#$$%&''(*)*-*,/,.2-/4.1602803:14;25=26>37?37@48A48B49C59C5:D5:E5:E5:F4:G6=J6=J6=K6=K7>L7>L7>L7>L7>L8>L8?L8?L9?K:@K;@KBJ?CJCFLFHMJLQMOTPRWSVZVX]XZ`Z^d^ag`cibekfhmjlopprxxx~|xsi_zXtTpPlJhGgEhDhBgBj蓳똯㙫ܘٟ٘ٚڥܫްߴ⑶{vqmljigfcb`^YTOLHC?=<;;;;|;zapp{ x,Dc!pXIENDB`avogadro-1.1.1/libavogadro/src/extensions/icons/amarok_pause.png0000644000175000001440000000320612250371054024274 0ustar marcususersPNG  IHDR DPLTE  !!!#$$%&''(*)*-*,/,.2-/4.1602803:14;25=26>37?37@48A48B49C59C5:D5:E5:E5:F4:G6=J6=J6=K6=K7>L7>L7>L7>L7>L8>L8?L8?L9?K:@K;@KBJ?CJCFLFHMJLQMOTPRWSVZVX]XZ`Z^d^ag`cibekfhmlmqttv~~őȐʏʌȉą~wpf{XoKc@Z9S1M-L+J*I(I&I⯾ᬼ੺ߦߧᦸ㦸祸뤹zphc_[VSNLJHFC@>;7432|3y4v0r0n+g'a&[#T#P%N%Kcz7tRNS !%"!!  !'-37E;~f*e^`j٥%&9%OH$KLmU:GM^-WW wZF,f0*U2ߴ@`Y#p}GaZUxFٍEUuLķ B&cl4 FHgu'j9L, ,DXl 3eBT#Dm!j *t -#a¾ܾ/^=&XG`e*a-/(^JUt;% pdi@+xcIENDB`avogadro-1.1.1/libavogadro/src/extensions/icons/amarok_back.png0000644000175000001440000000323512250371054024061 0ustar marcususersPNG  IHDR DPLTE  !!!#$$%&''(*)*-*,/,.2-/4.1602803:14;25=26>37?37@48A48B49C59C5:D5:E5:E5:F4:G6=J6=J6=K6=K7>L7>L7>L7>L7>L8>L8?L8?L9?K:@K;@KBJ?CJCFLFHMJLQMOTPRWSVZVX]XZ`Z^d^ag`cibekfhmlmqttv~~}zwrlgzcv]qWkQeJ^G\I^I`z|鈤㋤ߏۑٔۗܚޝߠޤষਹ᫻ꬿxxsmfa]WSNIC@;87:~=DIOOP|PyNvLqLmLjLhKeJa7%V[jsmJڮCƦ]tymUS)QRqύ}΋k-<=N ۫Kktэ=W O[HC0O(tܛjռ}7S:ӛOlcǰaڴpM=DO?-!a6,,H_//@eXtI0,,^"aYVcӉ)L@@BFeɁě, .|Kc[T8(NUZT CJqV۫Q=DgίRVu98ېa?f՜;?<d eE,pHP7cφQ}qBp"ݫ2!@X}Aa\^G|yվ#8 BަHO~OIENDB`avogadro-1.1.1/libavogadro/src/extensions/icons/amarok_play.png0000644000175000001440000000315412250371054024126 0ustar marcususersPNG  IHDR DPLTE  !!!#$$%&''(*)*-*,/,.2-/4.1602803:14;25=26>37?37@48A48B49C59C5:D5:E5:E5:F4:G6=J6=J6=K6=K7>L7>L7>L7>L7>L8>L8?L8?L9?K:@K;@KBJ?CJADKCEKEGLFHMJLOMNQPPRRSTUUWWXZYZ]Z[_[]b]_e^ag^ahadkdgmgjolnrrsu{|}~|yuqli}e{bxWqKk>j:l9pvy|톥㋥ݐْזٛڞڣڥܨު஼屿qnjhfca^YVRPKE?=9~9|9{9xx7[tRNS !%"!!  !'-37󾱩@`j)vfS }}5b(so-# ajU9<n^7#?l_1z"O*8wo(xg2 &%M%Ob0Z-iJqBuu&ͼ#Vk׏,Ɵw~2]bVnC`[ama&P}]v+=-{ܭپfD7zrW/4-ݰ /"ȶehא N*'2 D&  \qOHȶdAlLӲ+,䲂 B$rX%T^:ApF M9㈀6g 8̺뚦aQb߈+ddf8kDBsd tr2tG@C]O@JeVMn((pjo۫I݃TNGO(kP2UӊDJVnLһIEI?#/kIENDB`avogadro-1.1.1/libavogadro/src/extensions/icons/edit-clear.png0000644000175000001440000000403112250371054023633 0ustar marcususersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڽylǿo5^{o{}ۘc11YB"Z jӪ GIhUIlFiT AThPBp\cFF7O41{#3zɗ%luS 7J,U '&<:12u堽7v k:?#U{mBv0JA`2K4|m3kO|Ưjuذmwׄd22 A50ЀVtz!Թ+-qx4K3j]h!HcsvRp Rτ+=B79CW-*GBvK4x@_O_V%2B&kf@Œ7#~wD|.8WVx=JC U}qOjaNZ_&: hضaYB*pg"[V-WV=T=,Fn\dD{:ynĴH D5{/l\Y ӟ\}#2xJ!lMsVÝ瀹<_lZꄖJw qjϛնnb? u<|*%!Am8Cen[ )v9pU AM[nuAߢi|)"| M,L& jl`eanV3֟}d8ГCG oC(*,41@L*}=yvCס4E8Z2vj4ѳ-V0ztׂdʟ{/9ŵ#-+W % H% wp CV4%A]{CR2YǠt!)sa NS3 EU9{6 \BQF~At8k"E,x xzhp}Īarvk9`!A8ݎff],[p/ Y c >^˦ :WbfQ7nr-|0j#Ac*NS_`Cssu3ٌ_/R=%0X A5 ۍ8Q%] #0Xwt'm#.g"EqΈݎKfD"kK~<<_?C#GT)WfZ\ ^iCuQCtvE 4Q#N 4 nh Iӑs#"*Z2SWV؅Fy~޾S,ܫ#7[{^ΝDF`Ll9“ie!jyԢ $0tJ8h)L;Cn㘦$ʹmjQAo>L41S?ڰr%=*ϻ# 9õZDO*|BF?ȓKќBFJ̀tf0&Ɔ{`A]VRY^ql4@ss37v=7g%EqN YNeV'oʃ@ӥ,M T'z_J?7@Nur\Q EMMXF9nmj$k3` %2%5*Ld:PU=Ɍ] 145cK48lHl;&M %]Uu:xq_1;IENDB`avogadro-1.1.1/libavogadro/src/extensions/icons/edit-copy.png0000644000175000001440000000153412250371054023524 0ustar marcususersPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<2PLTECEEMQO_bbcfeZ^\gljjnkЍtRNS%;EKLxё{IDATxڍ]KQg u$ ,7B #J$#HM={N3gY]yxyg B# \E׀p7<,/O` "*i0 _@y`LPQӪ<%N[VE gLT- \0\r#"0u0*\nŪHId`iSYkn Z [%h@%ag٢*0# D)-[zc¨=j89 ]Pnhtco&u _*M>c״/g1OhUPOF癹Vn*%UY/~m*E;8t;j37?37@48A48B49C59C5:D5:E5:E5:F4:G6=J6=J6=K6=K7>L7>L7>L7>L7>L8>L8?L8?L9?K:@K;@KBJ?CJCFLFHMJLQMOTPRWSVZVX]XZ`Z^d^ag`cibekfhmlmqttv~~ÓƒȐɎɌȈą{vnbzVoMiCb=_8[6[5Z3X1U/T⭽᩼⨼㥺⤽飿|tnlifc`\WRPMIFB><:842/-|*z)x(v)s.o3j4e5`3\/V^tRNS !%"!!  !'-372$ (|j$IDAT8mOkAY9܂C/ZB !Dhj7eݠ+d8@ P(J)D<'" ( B`f> dǁ$=ZSoSبU~=y_s(aݦUX}kcm[s)1hf=8%gk7Sej-Skl@8]XWA AAl3UdlKj6z>le8_\Ϝ!t\Vxn1 4`J@ =ec *J<֫1^滈e"YV6q/mPZCTZ{D cdJşKWrs( (׍x1i=`R~d 6_Gvr|&GE,>FԵJ8[<74:0?a0i KgOpq(p/w 1tbj\-8?v?Uk([ 0k%Xs'وIS7)u u maB d˴Ij3L!+V1Ait 4J)-KWFy>~?s'ґP) NCCZ#Fe 83||LP,y.bՐ^=uG^aƵr>" _̀j4wP<{P\C EdH~I=UB/,"jӨv;ˆWǚG 3I@B0g=;w@iX2%>L]/tt=!^@$#B}7(T/`ۂ[VF#dvoU61lD]tT EBD}m@Y(I5𮇞C[֤x;G+ bĩ:0D0[l LMUmukxurՈ`ZEԵ҈#G۟}r:&?g~~IENDB`avogadro-1.1.1/libavogadro/src/extensions/supercelldialog.h0000644000175000001440000000305512250371054023335 0ustar marcususers/********************************************************************** SuperCellDialog - Dialog for building crystallographic super cells Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef SUPERCELLDIALOG_H #define SUPERCELLDIALOG_H #include "ui_supercelldialog.h" #include namespace Avogadro { class SuperCellDialog : public QDialog { Q_OBJECT public: explicit SuperCellDialog( QWidget *parent = 0, Qt::WindowFlags f = 0 ); ~SuperCellDialog(); int aCells(); int bCells(); int cCells(); void aCells(int a); void bCells(int b); void cCells(int c); public slots: void valueChanged(int value); void fillCellClicked(); signals: void cellDisplayChanged(int a, int b, int c); void fillCell(); private: Ui::SuperCellDialog ui; int m_aCells; int m_bCells; int m_cCells; }; } #endif avogadro-1.1.1/libavogadro/src/plotaxis.cpp0000644000175000001440000001410212250371054020151 0ustar marcususers/********************************************************************** PlotAxis -- Part of the Avogadro 2D plotting interface Copyright (C) 2003 Jason Harris (KDE) Copyright (C) 2008 David Lonie (Avogadro) This file is part of the Avogadro molecular editor project. For more information, see This file is based on KPlotWidget from the KDE library. For more information see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "plotaxis.h" #include #include //for log10(), pow(), modf() namespace Avogadro { class PlotAxis::Private { public: Private( PlotAxis *qq ) : q( qq ) , m_visible( true ) , m_showTickLabels( false ) , m_labelFmt( 'g' ) , m_labelFieldWidth( 0 ) , m_labelPrec( -1 ) { } PlotAxis *q; bool m_visible : 1; // Property "visible" defines if Axis is drawn or not. bool m_showTickLabels : 1; char m_labelFmt; // Number format for number labels, see QString::arg() QString m_label; // The label of the axis. int m_labelFieldWidth; // Field width for number labels, see QString::arg() int m_labelPrec; // Number precision for number labels, see QString::arg() QList m_MajorTickMarks, m_MinorTickMarks; }; PlotAxis::PlotAxis( const QString &label ) : d( new Private( this ) ) { d->m_label = label; } PlotAxis::~PlotAxis() { delete d; } bool PlotAxis::isVisible() const { return d->m_visible; } void PlotAxis::setVisible( bool visible ) { d->m_visible = visible; } bool PlotAxis::areTickLabelsShown() const { return d->m_showTickLabels; } void PlotAxis::setTickLabelsShown( bool b ) { d->m_showTickLabels = b; } void PlotAxis::setLabel( const QString& label ) { d->m_label = label; } QString PlotAxis::label() const { return d->m_label; } void PlotAxis::setTickLabelFormat( char format, int fieldWidth, int precision ) { d->m_labelFieldWidth = fieldWidth; d->m_labelFmt = format; d->m_labelPrec = precision; } int PlotAxis::tickLabelWidth() const { return d->m_labelFieldWidth; } char PlotAxis::tickLabelFormat() const { return d->m_labelFmt; } int PlotAxis::tickLabelPrecision() const { return d->m_labelPrec; } void PlotAxis::setTickMarks( double x0, double length ) { d->m_MajorTickMarks.clear(); d->m_MinorTickMarks.clear(); //s is the power-of-ten factor of length: //length = t * s; s = 10^(pwr). e.g., length=350.0 then t=3.5, s = 100.0; pwr = 2.0 double pwr = 0.0; if (length > 0) modf( log10( length ), &pwr ); if (length < 0) modf( log10(-length ), &pwr ); double s = pow( 10.0, pwr ); double t = 0; if (length > 0) t = length / s; if (length < 0) t =-length / s; double TickDistance = 0.0; //The distance between major tickmarks int NumMajorTicks = 0; //will be between 3 and 5 int NumMinorTicks = 0; //The number of minor ticks between major ticks (will be 4 or 5) //adjust s and t such that t is between 3 and 5: if ( t < 3.0 ) { t *= 10.0; s /= 10.0; // t is now between 3 and 30 } if ( t < 6.0 ) { //accept current values TickDistance = s; NumMajorTicks = int( t ); NumMinorTicks = 5; } else if ( t < 10.0 ) { // adjust by a factor of 2 TickDistance = s * 2.0; NumMajorTicks = int( t / 2.0 ); NumMinorTicks = 4; } else if ( t < 20.0 ) { //adjust by a factor of 4 TickDistance = s * 4.0; NumMajorTicks = int( t / 4.0 ); NumMinorTicks = 4; } else { //adjust by a factor of 5 TickDistance = s * 5.0; NumMajorTicks = int( t / 5.0 ); NumMinorTicks = 5; } //We have determined the number of tickmarks and their separation //Now we determine their positions in the Data space. //Tick0 is the position of a "virtual" tickmark; the first major tickmark //position beyond the "minimum" edge of the data range. double Tick0 = x0 - fmod( x0, TickDistance ); if ( x0 < 0.0 ) { Tick0 -= TickDistance; NumMajorTicks++; } if (length < 0) { TickDistance *= -1; } for ( int i=0; i 0 && xmaj >= x0 && xmaj <= x0 + length) || (length < 0 && xmaj <= x0 && xmaj >= x0 + length) ) { d->m_MajorTickMarks.append( xmaj ); } for ( int j=1; j 0 && xmin >= x0 && xmin <= x0 + length) || (length < 0 && xmin <= x0 && xmin >= x0 + length) ) { d->m_MinorTickMarks.append( xmin ); } } } } QString PlotAxis::tickLabel( double val ) const { if ( d->m_labelFmt == 't' ) { while ( val < 0.0 ) val += 24.0; while ( val >= 24.0 ) val -= 24.0; int h = int(val); int m = int( 60.*(val - h) ); return QString( "%1:%2" ).arg( h, 2, 10, QLatin1Char('0') ).arg( m, 2, 10, QLatin1Char('0') ); } return QString( "%1" ).arg( val, d->m_labelFieldWidth, d->m_labelFmt, d->m_labelPrec ); } QList< double > PlotAxis::majorTickMarks() const { return d->m_MajorTickMarks; } QList< double > PlotAxis::minorTickMarks() const { return d->m_MinorTickMarks; } } avogadro-1.1.1/libavogadro/src/cube.cpp0000644000175000001440000002563212250371054017236 0ustar marcususers/********************************************************************** Cube - Primitive class to encapsulate volumetric data Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "cube.h" #include #include #include #include namespace Avogadro { using Eigen::Vector3i; using Eigen::Vector3f; using Eigen::Vector3d; Cube::Cube(QObject *parent) : Primitive(CubeType, parent), m_data(0), m_min(0.0, 0.0, 0.0), m_max(0.0, 0.0, 0.0), m_spacing(0.0, 0.0, 0.0), m_points(0, 0, 0), m_minValue(0.0), m_maxValue(0.0), m_lock(new QReadWriteLock) { } Cube::~Cube() { delete m_lock; m_lock = 0; } bool Cube::setLimits(const Vector3d &min, const Vector3d &max, const Vector3i &points) { // We can calculate all necessary properties and initialise our data Vector3d delta = max - min; m_spacing = Vector3d(delta.x() / (points.x()-1), delta.y() / (points.y()-1), delta.z() / (points.z()-1)); m_min = min; m_max = max; m_points = points; m_data.resize(m_points.x() * m_points.y() * m_points.z()); return true; } bool Cube::setLimits(const Vector3d &min, const Vector3d &max, double spacing) { m_min = min; Vector3d delta = max - min; delta = delta / spacing; m_spacing = Vector3d(spacing, spacing, spacing); m_points = Vector3i(ceil(delta.x()) + 1, ceil(delta.y()) + 1, ceil(delta.z()) + 1); m_data.resize(m_points.x() * m_points.y() * m_points.z()); // Calculate the correct max for the spacing and number of points m_max = Vector3d(min.x() + m_spacing.x() * (m_points.x()-1), min.y() + m_spacing.y() * (m_points.y()-1), min.z() + m_spacing.z() * (m_points.z()-1)); return true; } bool Cube::setLimits(const Vector3d &min, const Vector3i &dim, double spacing) { Vector3d max = Vector3d(min.x() + (dim.x()-1) * spacing, min.y() + (dim.y()-1) * spacing, min.z() + (dim.z()-1) * spacing); m_min = min; m_max = max; m_points = dim; m_spacing = Vector3d(spacing, spacing, spacing); m_data.resize(m_points.x() * m_points.y() * m_points.z()); return true; } bool Cube::setLimits(const Molecule *mol, double spacing, double padding) { QList atoms = mol->atoms(); Vector3d min, max; if (atoms.size()) { min = max = *(atoms.at(0)->pos()); foreach (Atom *atom, atoms) { if (atom->pos()->x() < min.x()) min[0] = atom->pos()->x(); else if (atom->pos()->x() > max.x()) max(0) = atom->pos()->x(); if (atom->pos()->y() < min.y()) min(1) = atom->pos()->y(); else if (atom->pos()->y() > max.y()) max(1) = atom->pos()->y(); if (atom->pos()->z() < min.z()) min(2) = atom->pos()->z(); else if (atom->pos()->z() > max.z()) max(2) = atom->pos()->z(); } } else { min = max = Eigen::Vector3d::Zero(); } // Now to take care of the padding term min += Vector3d(-padding, -padding, -padding); max += Vector3d(padding, padding, padding); return setLimits(min, max, spacing); } bool Cube::setLimits(const Cube &cube) { m_min = cube.m_min; m_max = cube.m_max; m_points = cube.m_points; m_spacing = cube.m_spacing; m_data.resize(m_points.x() * m_points.y() * m_points.z()); return true; } std::vector * Cube::data() { return &m_data; } bool Cube::setData(const std::vector &values) { if (!values.size()) { qDebug() << "Zero sized vector passed to Cube::setData. Nothing to do."; return false; } if (static_cast(values.size()) == m_points.x() * m_points.y() * m_points.z()) { m_data = values; qDebug() << "Loaded in cube data" << m_data.size(); // Now to update the minimum and maximum values m_minValue = m_maxValue = m_data[0]; foreach(double val, m_data) { if (val < m_minValue) m_minValue = val; else if (val > m_maxValue) m_maxValue = val; } return true; } else { qDebug() << "The vector passed to Cube::setData does not have the correct" << "size. Expected" << m_points.x() * m_points.y() * m_points.z() << "got" << values.size(); return false; } } bool Cube::addData(const std::vector &values) { // Initialise the cube to zero if necessary if (!m_data.size()) { m_data.resize(m_points.x() * m_points.y() * m_points.z()); } if (values.size() != m_data.size() || !values.size()) { qDebug() << "Attempted to add values to cube - sizes do not match..."; return false; } for (unsigned int i = 0; i < m_data.size(); i++) { m_data[i] += values[i]; if (m_data[i] < m_minValue) m_minValue = m_data[i]; else if (m_data[i] > m_maxValue) m_maxValue = m_data[i]; } return true; } unsigned int Cube::closestIndex(const Vector3d &pos) const { int i, j, k; // Calculate how many steps each coordinate is along its axis i = int((pos.x() - m_min.x()) / m_spacing.x()); j = int((pos.y() - m_min.y()) / m_spacing.y()); k = int((pos.z() - m_min.z()) / m_spacing.z()); return i*m_points.y()*m_points.z() + j*m_points.z() + k; } Vector3i Cube::indexVector(const Vector3d &pos) const { // Calculate how many steps each coordinate is along its axis int i, j, k; i = int((pos.x() - m_min.x()) / m_spacing.x()); j = int((pos.y() - m_min.y()) / m_spacing.y()); k = int((pos.z() - m_min.z()) / m_spacing.z()); return Vector3i(i, j, k); } Vector3d Cube::position(unsigned int index) const { int x, y, z; x = int(index / (m_points.y()*m_points.z())); y = int((index - (x*m_points.y()*m_points.z())) / m_points.z()); z = index % m_points.z(); return Vector3d(x * m_spacing.x() + m_min.x(), y * m_spacing.y() + m_min.y(), z * m_spacing.z() + m_min.z()); } double Cube::value(int i, int j, int k) const { unsigned int index = i*m_points.y()*m_points.z() + j*m_points.z() + k; if (index < m_data.size()) return m_data.at(index); else { // qDebug() << "Attempt to identify out of range index" << index << m_data.size(); return 0.0; } } double Cube::value(const Vector3i &pos) const { unsigned int index = pos.x()*m_points.y()*m_points.z() + pos.y()*m_points.z() + pos.z(); if (index < m_data.size()) return m_data.at(index); else { qDebug() << "Attempted to access an index out of range."; return 6969.0; } } float Cube::valuef(const Vector3f &pos) const { // This is a really expensive operation and so should be avoided // Interpolate the value at the supplied vector - trilinear interpolation... Vector3f delta = pos - m_min.cast(); // Find the integer low and high corners Vector3i lC(delta.x() / m_spacing.x(), delta.y() / m_spacing.y(), delta.z() / m_spacing.z()); Vector3i hC(lC.x() + 1, lC.y() + 1, lC.z() + 1); // So there are six corners in total - work out the delta of the position // and the low corner Vector3f P((delta.x() - lC.x()*m_spacing.x()) / m_spacing.x(), (delta.y() - lC.y()*m_spacing.y()) / m_spacing.y(), (delta.z() - lC.z()*m_spacing.z()) / m_spacing.z()); Vector3f dP = Vector3f(1.0, 1.0, 1.0) - P; // Now calculate and return the interpolated value return value(lC.x(), lC.y(), lC.z()) * dP.x() * dP.y() * dP.z() + value(hC.x(), lC.y(), lC.z()) * P.x() * dP.y() * dP.z() + value(lC.x(), hC.y(), lC.z()) * dP.x() * P.y() * dP.z() + value(lC.x(), lC.y(), hC.z()) * dP.x() * dP.y() * P.z() + value(hC.x(), lC.y(), hC.z()) * P.x() * dP.y() * P.z() + value(lC.x(), hC.y(), hC.z()) * dP.x() * P.y() * P.z() + value(hC.x(), hC.y(), lC.z()) * P.x() * P.y() * dP.z() + value(hC.x(), hC.y(), hC.z()) * P.x() * P.y() * P.z(); } double Cube::value(const Vector3d &pos) const { // This is a really expensive operation and so should be avoided // Interpolate the value at the supplied vector - trilinear interpolation... Vector3d delta = pos - m_min; // Find the integer low and high corners Vector3i lC(delta.x() / m_spacing.x(), delta.y() / m_spacing.y(), delta.z() / m_spacing.z()); Vector3i hC(lC.x() + 1, lC.y() + 1, lC.z() + 1); // So there are six corners in total - work out the delta of the position // and the low corner Vector3d P((delta.x() - lC.x()*m_spacing.x()) / m_spacing.x(), (delta.y() - lC.y()*m_spacing.y()) / m_spacing.y(), (delta.z() - lC.z()*m_spacing.z()) / m_spacing.z()); Vector3d dP = Vector3d(1.0, 1.0, 1.0) - P; // Now calculate and return the interpolated value return value(lC.x(), lC.y(), lC.z()) * dP.x() * dP.y() * dP.z() + value(hC.x(), lC.y(), lC.z()) * P.x() * dP.y() * dP.z() + value(lC.x(), hC.y(), lC.z()) * dP.x() * P.y() * dP.z() + value(lC.x(), lC.y(), hC.z()) * dP.x() * dP.y() * P.z() + value(hC.x(), lC.y(), hC.z()) * P.x() * dP.y() * P.z() + value(lC.x(), hC.y(), hC.z()) * dP.x() * P.y() * P.z() + value(hC.x(), hC.y(), lC.z()) * P.x() * P.y() * dP.z() + value(hC.x(), hC.y(), hC.z()) * P.x() * P.y() * P.z(); } bool Cube::setValue(int i, int j, int k, double value) { unsigned int index = i*m_points.y()*m_points.z() + j*m_points.z() + k; if (index < m_data.size()) { m_data[index] = value; return true; } else return false; } QReadWriteLock * Cube::lock() const { return m_lock; } } // End namespace Avogadro avogadro-1.1.1/libavogadro/src/primitive.h0000644000175000001440000001136412250371054017772 0ustar marcususers/********************************************************************** Primitive - Wrapper class around the OpenBabel classes Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef PRIMITIVE_H #define PRIMITIVE_H #include "global.h" #include #include #include #include // To get the maximum size of long for FALSE_ID namespace Avogadro { // Define the overflow resulting from long (-1) as the error/not found const unsigned long FALSE_ID = std::numeric_limits::max(); /** * @class Primitive primitive.h * @brief Base class for all primitives (Molecule, Atom, Bond, Residue, ...). */ class PrimitivePrivate; class A_EXPORT Primitive : public QObject { Q_OBJECT Q_PROPERTY(Type type READ type) Q_ENUMS(Type) public: /** * This enum allows us to iterate through the various types * of primitives. */ enum Type { /// Untyped Primitive OtherType=0, /// Molecule Primitive MoleculeType, /// Atom Primitive AtomType, /// Bond Primitive BondType, /// Residue Primitive ResidueType, /// Chain Primitive (i.e., a set of residues) ChainType, /// Fragment Primitve FragmentType, /// Surface Primitive SurfaceType, /// Surface Mesh Primitive MeshType, /// Cube Primitive CubeType, /// Plane Primitive PlaneType, /// Grid Primitive GridType, /// Points (i.e., non-atoms) PointType, /// Lines LineType, /// Vectors (i.e., arrows, dipole moments) VectorType, /// Non-bonded interactions (i.e., non-bond connections) NonbondedType, /// Text annoations TextType, /// End Placeholder LastType, /// First Placeholder FirstType=OtherType }; /** * Default constructor. * @param parent the object parent */ Primitive(QObject *parent = 0); /** * Constructor * @param type the primitive type * @param parent the object parent */ explicit Primitive(Type type, QObject *parent=0); /** * Destructor */ virtual ~Primitive(); /** * Function used to push changes to a primitive to * the rest of the system. At this time there is no * way (other than this) to generate a signal when * properties of a primitive change. * * In the case of the Atom primitive, this should be called * when changes to coordinates have been made. */ void update(); /** * @property Type * Holds the primitive type */ /** * @return The primitive type (one of Primitive::Type) */ Type type() const; /** * @return The unique id of the primitive. */ unsigned long id() const { return m_id; } /** * @return The index of the primitive. * @note Replaces GetIdx(). */ unsigned long index() const { return m_index; } Q_SIGNALS: /** * Emitted when the primitive has been updated. */ void updated(); protected: /** * Set the id of the primitive, used to uniquely indentify the primitive. * @note That this should only be set by the container class. */ void setId(unsigned long m_id); /** * Set the index of the primitive, starting at zero. * @note That this should only be set by the container class. */ void setIndex(unsigned long m_index); PrimitivePrivate * const d_ptr; Primitive(PrimitivePrivate &dd, QObject *parent = 0); Primitive(PrimitivePrivate &dd, Type type, QObject *parent=0); enum Primitive::Type m_type; unsigned long m_id; unsigned long m_index; private: Q_DECLARE_PRIVATE(Primitive) }; } // namespace Avogadro Q_DECLARE_METATYPE(Avogadro::Primitive*) #endif // PRIMITIVE_H avogadro-1.1.1/libavogadro/src/neighborlist.cpp0000644000175000001440000002117312250371054021005 0ustar marcususers/********************************************************************* NeighborList - NeighborList class Copyright (C) 2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************/ #include #include #include using namespace std; namespace Avogadro { NeighborList::NeighborList(Molecule* mol, double rcut, bool periodic, int boxSize) { m_atoms = mol->atoms(); m_rcut = rcut; m_rcut2 = rcut*rcut; m_boxSize = boxSize; m_edgeLength = m_rcut / m_boxSize; m_updateCounter = 0; initOffsetMap(); initOneTwo(); initCells(); initGhostMap(periodic); } NeighborList::NeighborList(const QList &atoms, double rcut, bool periodic, int boxSize) { m_atoms = atoms; m_rcut = rcut; m_rcut2 = rcut*rcut; m_boxSize = boxSize; m_edgeLength = m_rcut / m_boxSize; m_updateCounter = 0; initOffsetMap(); initOneTwo(); initCells(); initGhostMap(periodic); } QList NeighborList::nbrs(Atom *atom, bool uniqueOnly) { m_r2.clear(); m_r2.reserve(m_atoms.size()); QList atoms; Eigen::Vector3i index(cellIndexes(atom->pos())); std::vector::const_iterator i; // Use the offset map to find neighboring cells for (i = m_offsetMap.begin(); i != m_offsetMap.end(); ++i) { // add the offset to the cell index for atom's cell Eigen::Vector3i offset = index + *i; // use the ghost map to handle indexes near border: // a) periodic boundary conditions --> wrap around // b) otherwise --> last empty cell unsigned int cell = cellIndex(m_ghostMap.at(ghostIndex(offset))); for (atom_iter j = m_cells[cell].begin(); j != m_cells[cell].end(); ++j) { if (uniqueOnly) { // make sure to only return unique pairs if (atom->index() >= (*j)->index()) continue; } if (IsOneTwo(atom->index(), (*j)->index())) continue; if (IsOneThree(atom->index(), (*j)->index())) continue; const double R2 = ( *((*j)->pos()) - *(atom->pos()) ).squaredNorm(); if (R2 > m_rcut2) continue; m_r2.push_back(R2); atoms.append(*j); } } return atoms; } QList NeighborList::nbrs(const Eigen::Vector3f *pos) { m_r2.clear(); m_r2.reserve(m_atoms.size()); QList atoms; Eigen::Vector3d dpos(pos->cast()); Eigen::Vector3i index(cellIndexes(&dpos)); std::vector::const_iterator i; // Use the offset map to find neighboring cells for (i = m_offsetMap.begin(); i != m_offsetMap.end(); ++i) { // add the offset to the cell index for atom's cell Eigen::Vector3i offset = index + *i; // use the ghost map to handle indexes near border: // a) periodic boundary conditions --> wrap around // b) otherwise --> last empty cell unsigned int cell = cellIndex(m_ghostMap.at(ghostIndex(offset))); for (atom_iter j = m_cells[cell].begin(); j != m_cells[cell].end(); ++j) { const double R2 = ( *((*j)->pos()) - dpos).squaredNorm(); if (R2 > m_rcut2) continue; m_r2.push_back(R2); atoms.append(*j); } } return atoms; } void NeighborList::update() { m_updateCounter++; if (m_updateCounter > 10) { initCells(); updateCells(); m_updateCounter = 0; } } void NeighborList::initOneTwo() { unsigned int numAtoms = m_atoms.size(); if (!numAtoms) return; m_oneTwo.resize(m_atoms.size()); m_oneThree.resize(m_atoms.size()); if (m_atoms.isEmpty()) return; Molecule *molecule = m_atoms.first()->molecule(); if (!molecule) { qDebug() << "Error, null molecule returned in NeighborList::initOneTwo()"; return; } foreach (Atom *atom, m_atoms) { foreach (unsigned long id1, atom->neighbors()) { Atom *nbr1 = molecule->atomById(id1); m_oneTwo[atom->index()].push_back(nbr1->index()); m_oneTwo[nbr1->index()].push_back(atom->index()); foreach (unsigned long id2, nbr1->neighbors()) { Atom *nbr2 = molecule->atomById(id2); if (atom->index() == nbr2->index()) continue; m_oneThree[atom->index()].push_back(nbr2->index()); m_oneThree[nbr2->index()].push_back(atom->index()); } } } } void NeighborList::initCells() { // find min & max foreach (Atom *atom, m_atoms) { Eigen::Vector3d pos = *(atom->pos()); if (!atom->index()) { m_min = m_max = pos; } else { if (pos.x() > m_max.x()) m_max.x() = pos.x(); else if (pos.x() < m_min.x()) m_min.x() = pos.x(); if (pos.y() > m_max.y()) m_max.y() = pos.y(); else if (pos.y() < m_min.y()) m_min.y() = pos.y(); if (pos.z() > m_max.z()) m_max.z() = pos.z(); else if (pos.z() < m_min.z()) m_min.z() = pos.z(); } } // set the dimentions m_dim.x() = int(floor( (m_max.x() - m_min.x()) / m_edgeLength)) + 1; m_dim.y() = int(floor( (m_max.y() - m_min.y()) / m_edgeLength)) + 1; m_dim.z() = int(floor( (m_max.z() - m_min.z()) / m_edgeLength)) + 1; m_xyDim = m_dim.x() * m_dim.y(); updateCells(); } void NeighborList::updateCells() { // add atoms to their cells m_cells.clear(); // the last cell is always empty and can be used for all ghost cells // in non-periodic boundary conditions. m_cells.resize(m_xyDim * m_dim.z() + 1); foreach (Atom *atom, m_atoms) { m_cells[cellIndex(*(atom->pos()))].push_back(&*atom); } } bool NeighborList::insideShpere(const Eigen::Vector3i &index) { int i = abs(index.x()); if (i) i--; int j = abs(index.y()); if (j) j--; int k = abs(index.z()); if (k) k--; if (Eigen::Vector3i(i, j, k).squaredNorm() < m_rcut2) return true; return false; } void NeighborList::initOffsetMap() { int dim = 2 * m_boxSize + 1; m_offsetMap.clear(); for (int i = 0; i < dim; ++i) for (int j = 0; j < dim; ++j) for (int k = 0; k < dim; ++k) { Eigen::Vector3i index(i - m_boxSize, j - m_boxSize, k - m_boxSize); if (insideShpere(index)) m_offsetMap.push_back( index ); } } void NeighborList::initGhostMap(bool periodic) { int xDim = 2 * m_boxSize + m_dim.x() + 2; int yDim = 2 * m_boxSize + m_dim.y() + 2; int zDim = 2 * m_boxSize + m_dim.z() + 2; m_ghostX = xDim; m_ghostXY = xDim * yDim; int start = - m_boxSize - 1; m_ghostMap.resize(xDim * yDim * zDim); for (int i = start; i < m_dim.x() - start; ++i) for (int j = start; j < m_dim.y() - start; ++j) for (int k = start; k < m_dim.z() - start; ++k) { unsigned int ghostCell = ghostIndex(i, j, k); int u = i, v = j, w = k; if (periodic) { // wrap around if (i < 0) u = m_dim.x() + i + 1; else if (i >= m_dim.x()) u = i - m_dim.x(); if (j < 0) v = m_dim.y() + j + 1; else if (j >= m_dim.y()) v = j - m_dim.y(); if (k < 0) w = m_dim.z() + k + 1; else if (k >= m_dim.z()) w = k - m_dim.z(); } else { if ( (i < 0) || (j < 0) || (k < 0) || (i >= m_dim.x()) || (j >= m_dim.y()) || (k >= m_dim.z()) ) { // point to last cell which is always empty u = m_cells.size() - 1; v = 0; w = 0; } } m_ghostMap[ghostCell] = Eigen::Vector3i(u, v, w); } } } // end namespace OpenBabel //! \file nbrlist.cpp //! \brief NbrList class avogadro-1.1.1/libavogadro/src/elementitem_p.h0000644000175000001440000000570212250371054020610 0ustar marcususers/********************************************************************** ElementItem - Element Item, part of the Periodic Table Graphics View for Avogadro Copyright (C) 2007-2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ELEMENTITEM_P_H #define ELEMENTITEM_P_H #include namespace Avogadro{ /** * @class ElementItem * @author Marcus D. Hanwell * @brief An element item, intended to display a single element. * * This class implements a QGraphicsItem for displaying single elements in a * perdiodic table. It currently allows the setting of the proton number and * gets all other information from OpenBabel. */ class ElementItem : public QGraphicsItem { public: /** * Constructor. Should be called with the element number for this item. The * constructor uses setData to set the element number using the key 0. This * is then used by PeriodicTable to figure out which element was clicked on. */ ElementItem(int elementNumber = 0); /** * Destructor. */ ~ElementItem(); /** * @return the bounding rectangle of the element item. */ QRectF boundingRect() const; /** * @return the painter path which is also a rectangle in this case. */ QPainterPath shape() const; /** * This is where most of the action takes place. The element box is drawn * along with its symbol. */ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); private: /** * Indicates if element is well-formed (e.g., has non-empty symbol) */ bool m_valid; /** * The element numbers symbol. */ QString m_symbol; /** * The color of the element which will also be used as the background color * for the item box. */ QColor *m_color; /** * Width and height of the elements. */ int m_width, m_height; /** * The proton number of the item - all other attributes are derived from this. */ int m_element; }; } // End namespace Avogadro #endif // ELEMENTITEM_P_H avogadro-1.1.1/libavogadro/src/pythonerror.cpp0000644000175000001440000000631212250371054020705 0ustar marcususers/********************************************************************** PythonError - Handle python errors Copyright (C) 2008,2009 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ***********************************************************************/ #include #include #include #include namespace Avogadro { PythonError::PythonError() : QObject(), m_listening(false) { } PythonError* PythonError::instance() { static PythonError *obj = 0; if (!obj) obj = new PythonError; return obj; } void PythonError::append(const QString &str) { if (m_listening) emit message(str); // emit signal when other class is listening else m_str += str; // else, store the error } QString& PythonError::string() { return m_str; } void PythonError::setListening(bool listening) { m_listening = listening; } bool initializePython(const QString &addToSearchPath) { Py_Initialize(); static QStringList addedPaths = QStringList(); if (Py_IsInitialized()) { using namespace boost::python; try { prepareToCatchError(); object main_module = object(( handle<>(borrowed(PyImport_AddModule("__main__"))))); object main_namespace = main_module.attr("__dict__"); exec("import sys", main_namespace, main_namespace); foreach (const QString &path, addToSearchPath.split(';')) { if (addedPaths.contains(path)) continue; addedPaths.append(path); QString exp("sys.path.insert(0,\""); exp.append(path); exp.append("\")"); exec(exp.toAscii().data(), main_namespace, main_namespace); } } catch (const error_already_set &) { catchError(); } return true; } return false; } void prepareToCatchError() { // make sure output is available to extract it in catch if the import fails PyRun_SimpleString("import cStringIO"); PyRun_SimpleString("import sys"); PyRun_SimpleString("sys.stderr = cStringIO.StringIO()"); } void catchError() { PyErr_Print(); // extract the error to a string boost::python::object sys = boost::python::import("sys"); boost::python::object err = sys.attr("stderr"); PythonError::instance()->append( QString(boost::python::extract(err.attr("getvalue")())) ); } } // namespace avogadro-1.1.1/libavogadro/src/glwidget.cpp0000644000175000001440000025645512250371054020137 0ustar marcususers/********************************************************************** GLWidget - general OpenGL display Copyright (C) 2006-2009 Geoffrey R. Hutchison Copyright (C) 2006,2007 Donald Ephraim Curtis Copyright (C) 2007 Benoit Jacob Copyright (C) 2007-2009 Marcus D. Hanwell Copyright (C) 2011 David C. Lonie This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ // krazy:excludeall=includes #include "config.h" #include "camera.h" #include "glwidget.h" #include "glpainter_p.h" #include "glhit.h" #include #include #include #include #include #include #ifdef Q_WS_MAC # include #else # include #endif #ifdef ENABLE_PYTHON #include "pythonthread_p.h" #include "pythonextension_p.h" #endif #include #include #include #include #include #include #include #include #include #include #include "pluginmanager.h" #include #include #include #include #include #include #include #ifdef ENABLE_THREADED_GL #include #include #endif #include #ifdef ENABLE_GLSL #include #endif #include #include #include #include using namespace OpenBabel; using namespace Eigen; namespace Avogadro { bool engineLessThan( const Engine* lhs, const Engine* rhs ) { Engine::Layers lhsLayers = lhs->layers(); Engine::Layers rhsLayers = rhs->layers(); Engine::PrimitiveTypes lhsPrimitives = lhs->primitiveTypes(); Engine::PrimitiveTypes rhsPrimitives = rhs->primitiveTypes(); if ( !( lhsLayers & Engine::Overlay ) && rhsLayers & Engine::Overlay ) { return true; } else if (( lhsLayers & Engine::Overlay ) && ( rhsLayers & Engine::Overlay ) ) { return lhs->transparencyDepth() < rhs->transparencyDepth(); } else if (( lhsLayers & Engine::Overlay ) && !( rhsLayers & Engine::Overlay ) ) { return false; } else if ( !( lhsPrimitives & Engine::Molecules ) && rhsPrimitives & Engine::Molecules ) { return true; } else if (( lhsPrimitives & Engine::Molecules ) && ( rhsPrimitives & Engine::Molecules ) ) { return lhs->transparencyDepth() < rhs->transparencyDepth(); } else if (( lhsPrimitives & Engine::Molecules ) && !( rhsPrimitives & Engine::Molecules ) ) { return false; } else if ( !( lhsPrimitives & Engine::Atoms ) && rhsPrimitives & Engine::Atoms ) { return true; } else if (( lhsPrimitives & Engine::Atoms ) && ( rhsPrimitives & Engine::Atoms ) ) { return lhs->transparencyDepth() < rhs->transparencyDepth(); } else if (( lhsPrimitives & Engine::Atoms ) && !( rhsPrimitives & Engine::Atoms ) ) { return false; } else if ( !( lhsPrimitives & Engine::Bonds ) && rhsPrimitives & Engine::Bonds ) { return true; } else if (( lhsPrimitives & Engine::Bonds ) && ( rhsPrimitives & Engine::Bonds ) ) { return lhs->transparencyDepth() < rhs->transparencyDepth(); } else if (( lhsPrimitives & Engine::Bonds ) && !( rhsPrimitives & Engine::Bonds ) ) { return false; } return false; } class GLPainterDevice : public PainterDevice { public: GLPainterDevice(GLWidget *gl) { widget = gl; } ~GLPainterDevice() {} Painter *painter() const { return widget->painter(); } Camera *camera() const { return widget->camera(); } bool isSelected( const Primitive *p ) const { return widget->isSelected(p); } double radius( const Primitive *p ) const { return widget->radius(p); } const Molecule *molecule() const { return widget->molecule(); } Color *colorMap() const { return widget->colorMap(); } int width() { return widget->width(); } int height() { return widget->height(); } private: GLWidget *widget; }; class GLWidgetPrivate { public: GLWidgetPrivate() : background( 0,0,0,0 ), aCells( 1 ), bCells( 1 ), cCells( 1 ), onlyRenderOriginalUnitCell(false), cellColor( 255,255,255 ), molecule( 0 ), camera( new Camera ), tool( 0 ), toolGroup( 0 ), selectBuf( 0 ), selectBufSize( -1 ), undoStack(0), #ifdef ENABLE_THREADED_GL thread( 0 ), #else initialized( false ), #endif painter( 0 ), colorMap( 0), defaultColorMap( 0), updateCache(true), quickRender(false), allowQuickRender(true), renderUnitCellAxes(false), fogLevel(0), renderAxes(false), renderDebug(false), renderModelViewDebug(false), dlistQuick(0), dlistOpaque(0), dlistTransparent(0), pd(0) { } ~GLWidgetPrivate() { if ( selectBuf ) delete[] selectBuf; delete camera; // free the display lists if (dlistQuick) glDeleteLists(dlistQuick, 1); if (dlistOpaque) glDeleteLists(dlistOpaque, 1); if (dlistTransparent) glDeleteLists(dlistTransparent, 1); } void updateListQuick(); QList engines; QColor background; Vector3d normalVector; Vector3d center; double radius; const Atom *farthestAtom; //! number of unit cells in a, b, and c crystal directions unsigned char aCells; unsigned char bCells; unsigned char cCells; bool onlyRenderOriginalUnitCell; GLWidget::ProjectionType projection; QColor cellColor; Molecule *molecule; Camera *camera; Tool *tool; ToolGroup *toolGroup; QList extensions; GLuint *selectBuf; int selectBufSize; QList, QList > > > namedSelections; PrimitiveList selectedPrimitives; QUndoStack *undoStack; #ifdef ENABLE_THREADED_GL QWaitCondition paintCondition; QMutex renderMutex; GLThread *thread; #else bool initialized; #endif GLPainter *painter; Color *colorMap; // global color map Color *defaultColorMap; // default fall-back coloring (i.e., by elements) bool updateCache; // Update engine caches in quick render? bool quickRender; // Are we using quick render? bool allowQuickRender; // Are we allowed to use quick render? bool renderUnitCellAxes; // Do we render the unit cell axes int fogLevel; // The level of fog to use (0=none, 9=max) bool renderAxes; // Should the x, y, z axes be rendered? bool renderDebug; // Should the debug information be shown? bool renderModelViewDebug; // Should the modelview matrix be shown? GLuint dlistQuick; GLuint dlistOpaque; GLuint dlistTransparent; QMutex textOverlayMutex; // Protects textOverlayLabels QList > textOverlayLabels; // List of labels to render /** * Member GLPainterDevice which is passed to the engines. */ GLPainterDevice *pd; }; void GLWidgetPrivate::updateListQuick() { // Create a display list cache if (updateCache) { // qDebug() << "Making new quick display lists..."; if (dlistQuick == 0) { dlistQuick = glGenLists(1); } // Don't use dynamic scaling when rendering quickly painter->setDynamicScaling(false); glNewList(dlistQuick, GL_COMPILE); foreach(Engine *engine, engines) { if(engine->isEnabled()) { molecule->lock()->lockForRead(); engine->renderQuick(pd); molecule->lock()->unlock(); } } glEndList(); updateCache = false; painter->setDynamicScaling(true); } } #ifdef ENABLE_THREADED_GL class GLThread : public QThread { public: GLThread( GLWidget *widget, QObject *parent ); void run(); void resize( int width, int height ); void stop(); private: GLWidget *m_widget; QGLContext *m_context; bool m_running; bool m_resize; bool m_initialized; int m_width; int m_height; }; GLThread::GLThread( GLWidget *widget, QObject *parent ) : QThread( parent ), m_widget( widget ), m_running( true ), m_resize( false ), m_initialized( false ) {} void GLThread::run() { GLWidgetPrivate *d = m_widget->d; while ( true ) { // lock the mutex d->renderMutex.lock(); // unlock and wait d->paintCondition.wait( &( d->renderMutex ) ); if ( !m_running ) { d->renderMutex.unlock(); break; } m_widget->makeCurrent(); if ( !m_initialized ) { m_widget->initializeGL(); m_initialized = true; } if ( m_resize ) { m_widget->resizeGL( m_width, m_height ); m_resize=false; } d->background.setAlphaF(0.0); m_widget->qglClearColor(d->background); m_widget->paintGL(); m_widget->swapBuffers(); m_widget->doneCurrent(); d->renderMutex.unlock(); } } void GLThread::resize( int width, int height ) { m_resize = true; m_width = width; m_height = height; } void GLThread::stop() { m_running = false; } #endif GLWidget::GLWidget( QWidget *parent ) : QGLWidget( parent ), d( new GLWidgetPrivate ) { constructor(); } GLWidget::GLWidget( const QGLFormat &format, QWidget *parent, const GLWidget *shareWidget ) : QGLWidget( format, parent, shareWidget ), d( new GLWidgetPrivate ) { constructor(shareWidget); } GLWidget::GLWidget( Molecule *molecule, const QGLFormat &format, QWidget *parent, const GLWidget *shareWidget ) : QGLWidget( format, parent, shareWidget ), d( new GLWidgetPrivate ) { constructor(shareWidget); setMolecule( molecule ); } GLWidget::~GLWidget() { if(!d->painter->isShared()) delete d->painter; else d->painter->decrementShare(); #ifdef ENABLE_THREADED_GL // cleanup our thread d->thread->stop(); d->paintCondition.wakeAll(); d->thread->wait(); #endif #ifdef ENABLE_PYTHON // Creating the PythonThread object in Engine destructor doesn't seem // to work so we do it here PythonThread pt; #endif // delete the engines foreach(Engine *engine, d->engines) delete engine; delete( d ); } void GLWidget::constructor(const GLWidget *shareWidget) { // Make sure we get keyboard events setFocusPolicy(Qt::StrongFocus); // New PainterDevice d->pd = new GLPainterDevice(this); if(shareWidget && isSharing()) { // we are sharing contexts d->painter = static_cast(shareWidget->painter()); } else { d->painter = new GLPainter(); } d->painter->incrementShare(); setAutoFillBackground( false ); setSizePolicy( QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding ); d->camera->setParent( this ); setAutoBufferSwap( false ); m_glslEnabled = false; m_navigateTool = 0; #ifdef ENABLE_THREADED_GL qDebug() << "Threaded GL enabled."; d->thread = new GLThread( this, this ); //doneCurrent(); d->thread->start(); #endif } GLWidget *GLWidget::m_current = 0; GLWidget *GLWidget::current() { return m_current; } void GLWidget::setCurrent(GLWidget *current) { m_current = current; } void GLWidget::renderNow() { paintGL(); } void GLWidget::initializeGL() { qDebug() << "GLWidget initialisation..."; if(!context()->isValid()) { // this should never happen, as we checked for availability of features that we requested in // the default OpenGL format. However it happened to a user who had a very broken setting with // a proprietary nvidia driver. const QString error_msg = tr("Invalid OpenGL context.\n" "Either something is completely broken in your OpenGL setup " "(can you run any OpenGL application?), " "or you found a bug."); qDebug() << error_msg; QMessageBox::critical(0, tr("OpenGL error"), error_msg); abort(); } // Try to initialise GLEW if GLSL was enabled, test for OpenGL 2.0 support #ifdef ENABLE_GLSL GLenum err = glewInit(); if (err != GLEW_OK) { qDebug() << "GLSL support enabled but GLEW could not initialise!"; m_glslEnabled = false; } if (GLEW_VERSION_2_0) { qDebug() << "GLSL support enabled, OpenGL 2.0 support confirmed."; m_glslEnabled = true; } else if (GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader) { qDebug() << "GLSL support enabled, no OpenGL 2.0 support."; m_glslEnabled = true; } else { qDebug() << "GLSL support disabled, OpenGL 2.0 support not present."; m_glslEnabled = false; } #endif qglClearColor( d->background ); glShadeModel( GL_SMOOTH ); glEnable( GL_DEPTH_TEST ); glDepthFunc( GL_LEQUAL ); glEnable( GL_CULL_FACE ); glEnable( GL_COLOR_SUM_EXT ); // Used to display semi-transparent selection rectangle // glBlendFunc(GL_ONE, GL_ONE); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); glEnable( GL_NORMALIZE ); glLightModeli( GL_LIGHT_MODEL_COLOR_CONTROL_EXT, GL_SEPARATE_SPECULAR_COLOR_EXT ); // Due to the bug found with Mesa 6.5.3 in the Radeon DRI driver // in radeon_state.c in radeonUpdateSpecular(), // it is important to set GL_SEPARATE_SPECULAR_COLOR_EXT // _before_ enabling lighting glEnable( GL_LIGHTING ); glLightfv( GL_LIGHT0, GL_AMBIENT, LIGHT_AMBIENT ); glLightfv( GL_LIGHT0, GL_DIFFUSE, LIGHT0_DIFFUSE ); glLightfv( GL_LIGHT0, GL_SPECULAR, LIGHT0_SPECULAR ); glLightfv( GL_LIGHT0, GL_POSITION, LIGHT0_POSITION ); glEnable( GL_LIGHT0 ); // Create a second light source to illuminate those shadows a little better glLightfv( GL_LIGHT1, GL_AMBIENT, LIGHT_AMBIENT ); glLightfv( GL_LIGHT1, GL_DIFFUSE, LIGHT1_DIFFUSE ); glLightfv( GL_LIGHT1, GL_SPECULAR, LIGHT1_SPECULAR ); glLightfv( GL_LIGHT1, GL_POSITION, LIGHT1_POSITION ); glEnable( GL_LIGHT1 ); qDebug() << "GLWidget initialised..."; } void GLWidget::paintGL() { resizeGL(width(), height()); // fix for bug #1797069. don't remove! glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); // setup the OpenGL projection matrix using the camera glMatrixMode( GL_PROJECTION ); glLoadIdentity(); d->camera->applyProjection(); // setup the OpenGL modelview matrix using the camera glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); d->camera->applyModelview(); render(); } void GLWidget::paintGL2() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); // setup the OpenGL projection matrix using the camera glMatrixMode( GL_PROJECTION ); glPushMatrix(); glLoadIdentity(); d->camera->applyProjection(); // setup the OpenGL modelview matrix using the camera glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glLoadIdentity(); d->camera->applyModelview(); glEnable( GL_CULL_FACE ); glEnable( GL_LIGHTING ); glShadeModel( GL_SMOOTH ); glEnable( GL_DEPTH_TEST ); render(); // Restore the OpenGL modelview matrix for the GLGraphicsView painter glMatrixMode( GL_MODELVIEW ); glPopMatrix(); glMatrixMode( GL_PROJECTION ); glPopMatrix(); glDisable( GL_CULL_FACE ); glDisable( GL_LIGHTING ); } void GLWidget::paintEvent( QPaintEvent * ) { if(updatesEnabled()) { #ifdef ENABLE_THREADED_GL // tell our thread to paint d->paintCondition.wakeAll(); #else makeCurrent(); if(!d->initialized) { d->initialized = true; initializeGL(); } qglClearColor(d->background); paintGL(); swapBuffers(); #endif } } void GLWidget::resizeEvent( QResizeEvent *event ) { #ifdef ENABLE_THREADED_GL d->thread->resize( event->size().width(), event->size().height() ); #else if (!isValid()) return; makeCurrent(); if(!d->initialized) { d->initialized = true; initializeGL(); } // GLXWaitX() is called by the TT resizeEvent on Linux... We may need // specific functions here - need to look at Mac and Windows code. resizeGL(event->size().width(), event->size().height()); #endif emit resized(); } void GLWidget::resizeGL( int width, int height ) { glViewport( 0, 0, width, height ); } void GLWidget::setBackground( const QColor &background ) { #ifdef ENABLE_THREADED_GL d->renderMutex.lock(); #endif d->background = background; d->background.setAlphaF(0.0); #ifdef ENABLE_THREADED_GL d->renderMutex.unlock(); #endif } QColor GLWidget::background() const { return d->background; } void GLWidget::setColorMap(Color *colorMap) { d->colorMap = colorMap; } Color *GLWidget::colorMap() const { if (d->colorMap) { return d->colorMap; } else { if(!d->defaultColorMap) { PluginManager *plugins = PluginManager::instance(); d->defaultColorMap = static_cast(plugins->factories(Plugin::ColorType).at(0)->createInstance()); } return d->defaultColorMap; } } void GLWidget::setQuality(int quality) { // Invalidate the display lists and change the painter quality level invalidateDLs(); d->painter->setQuality(quality); } int GLWidget::quality() const { return d->painter->quality(); } void GLWidget::setFogLevel(int level) { d->fogLevel = level; } int GLWidget::fogLevel() const { return d->fogLevel; } void GLWidget::setRenderAxes(bool renderAxes) { d->renderAxes = renderAxes; update(); } bool GLWidget::renderAxes() { return d->renderAxes; } void GLWidget::setRenderDebug(bool renderDebug) { d->renderDebug = renderDebug; update(); } bool GLWidget::renderDebug() { return d->renderDebug; } void GLWidget::setRenderModelViewDebug(bool renderModelViewDebug) { d->renderModelViewDebug = renderModelViewDebug; update(); } bool GLWidget::renderModelViewDebug() const { return d->renderModelViewDebug; } void GLWidget::render() { if (!d->molecule) { qDebug() << "GLWidget::render(): No molecule set."; return; } if (!d->molecule->lock()->tryLockForRead()) { qDebug() << "GLWidget::render(): Could not get read lock on molecule."; return; } d->painter->begin(this); if (d->painter->quality() >= 3) { glEnable(GL_LIGHT1); } else { glDisable(GL_LIGHT1); } bool hasUnitCell = (d->molecule->OBUnitCell() != NULL); if (d->fogLevel) { glFogi(GL_FOG_MODE, GL_LINEAR); GLfloat fogColor[4]= {static_cast(d->background.redF()), static_cast(d->background.greenF()), static_cast(d->background.blueF()), static_cast(d->background.alphaF())}; glFogfv(GL_FOG_COLOR, fogColor); Vector3d distance = camera()->modelview() * d->center; double distanceToCenter = distance.norm(); glFogf(GL_FOG_DENSITY, 1.0); glHint(GL_FOG_HINT, GL_NICEST); glFogf(GL_FOG_START, distanceToCenter - (d->fogLevel / 8.0) * d->radius); glFogf(GL_FOG_END, distanceToCenter + ((10-d->fogLevel)/8.0 * 2.0) * d->radius); glEnable(GL_FOG); } else { glDisable(GL_FOG); } // Use renderQuick if the view is being moved, otherwise full render if (d->quickRender) { d->updateListQuick(); glCallList(d->dlistQuick); if (hasUnitCell) { renderCrystal(d->dlistQuick); } // Render the active tool if ( d->tool ) { d->tool->paint( this ); } } else { // we save a display list if we're doing a crystal if (d->dlistOpaque == 0) d->dlistOpaque = glGenLists(1); if (d->dlistTransparent == 0) d->dlistTransparent = glGenLists(1); // Opaque engine elements rendered first if (hasUnitCell) glNewList(d->dlistOpaque, GL_COMPILE); foreach(Engine *engine, d->engines) if(engine->isEnabled()) { #ifdef ENABLE_GLSL if (m_glslEnabled) glUseProgramObjectARB(engine->shader()); #endif engine->renderOpaque(d->pd); } #ifdef ENABLE_GLSL if (m_glslEnabled) glUseProgramObjectARB(0); #endif if (hasUnitCell) { // end the main list and render the opaque crystal glEndList(); renderCrystal(d->dlistOpaque); } // Render the active tool if ( d->tool ) { d->tool->paint( this ); } #ifdef ENABLE_PYTHON // Render the extensions (for now: python only) qRegisterMetaType("GLWidget*"); foreach (Extension *extension, d->extensions) { PythonExtension *pyext = qobject_cast(extension); if (pyext) { // If threaded GL is on, we are in the rendering thread. pyext // needs to acquire GIL, but it's already acquired by the GLWidget // constructor. That's why we use an indirect queued call to // PythonExtension::paint() here QMetaObject::invokeMethod(pyext, "paint", Qt::QueuedConnection, Q_ARG(GLWidget*, this)); } } #endif // Now render transparent glEnable(GL_BLEND); if (hasUnitCell) glNewList(d->dlistTransparent, GL_COMPILE); foreach(Engine *engine, d->engines) { if(engine->isEnabled() && engine->layers() & Engine::Transparent) { #ifdef ENABLE_GLSL if (m_glslEnabled) glUseProgramObjectARB(engine->shader()); #endif engine->renderTransparent(d->pd); } } glDisable(GL_BLEND); #ifdef ENABLE_GLSL if (m_glslEnabled) glUseProgramObjectARB(0); #endif if (hasUnitCell) { // end the main list and render the transparent bits glEndList(); renderCrystal(d->dlistTransparent); } } // Render all the inactive tools if ( d->toolGroup ) { QList tools = d->toolGroup->tools(); foreach( Tool *tool, tools ) { if ( tool != d->tool ) { tool->paint( this ); } } } // If enabled draw the axes if (d->renderAxes) renderAxesOverlay(); // Render text overlay renderTextOverlay(); d->painter->end(); d->molecule->lock()->unlock(); } void GLWidget::renderCrystal(GLuint displayList) { std::vector cellVectors = d->molecule->OBUnitCell()->GetCellVectors(); for (int a = 0; a < d->aCells; a++) { for (int b = 0; b < d->bCells; b++) { for (int c = 0; c < d->cCells; c++) { glPushMatrix(); glTranslated( cellVectors[0].x() * a + cellVectors[1].x() * b + cellVectors[2].x() * c, cellVectors[0].y() * a + cellVectors[1].y() * b + cellVectors[2].y() * c, cellVectors[0].z() * a + cellVectors[1].z() * b + cellVectors[2].z() * c ); glCallList(displayList); glPopMatrix(); } } } // end of for loops if (d->renderUnitCellAxes) renderCrystalAxes(); } void GLWidget::renderCrystalAxes() { const matrix3x3 obmat (d->molecule->OBUnitCell()->GetCellMatrix()); const Vector3d v1 (obmat(0,0), obmat(0,1), obmat(0,2)); const Vector3d v2 (obmat(1,0), obmat(1,1), obmat(1,2)); const Vector3d v3 (obmat(2,0), obmat(2,1), obmat(2,2)); Vector3d offset; d->painter->setColor(&d->cellColor); if (d->onlyRenderOriginalUnitCell) { offset << 0.0, 0.0, 0.0; renderClippedBox(offset, v1, v2, v3, 2.0); } else for (int a = 0; a < d->aCells; a++) { for (int b = 0; b < d->bCells; b++) { for (int c = 0; c < d->cCells; c++) { // Calculate offset for this cell offset = (a * v1 + b * v2 + c * v3); // Draw the clipped box with a linewidth of 2.0 renderClippedBox(offset, v1, v2, v3, 2.0); } } } } } // Use anonymous namespace for renderClippedBox helper functions namespace { // Given two points a and b, and a plane defined by normal vector n // and point p, does the plane intersect the line segment formed by // ab? If so, intersection is overwritten with the point of // intersection and the function returns true. static inline bool isPlaneBetweenPoints(const Vector3d &a, const Vector3d &b, const Vector3d &n, const Vector3d &p, Vector3d *intersection) { // Resource: // http://paulbourke.net/geometry/planeline/ const double denom = n.dot(b - a); // Parallel (in or out of plane) if (fabs(denom) < 1e-8) return false; // Otherwise it intersects the line ab. To find out if it // intersects the line segment ab, more calcs are needed: const double u = ( n.dot(p - a) ) / ( denom ); // if u is between (0,1], it intersects segment ab. Otherwise // return false. if (u <= 0 || u > 1) return false; // If we don't need to calculate the intersection, return true here if (!intersection) return true; // Calculate intersection, return true *intersection = a + u * (b - a); return true; } // Adapted from Malcolm McLean's example at // http://bytes.com/topic/c/answers/621985-print-binary-representation char* debug16bit(const quint16 x) { static char buff[sizeof(quint16) * CHAR_BIT + 1]; quint16 i; quint16 j = sizeof(quint16) * CHAR_BIT - 1; buff[j] = 0; for(i=0;ipainter->drawBoxEdges(c1, c2, c3, c4, c5, c6, c7, c8, lineWidth); // Now for the clipping part. We will find all intersections of // the viewing volume's near-plane cell edges, and draw an // appropriate polygon that highlights where the clipping // occurs. This prevents odd "missing corners" that are visually // disturbing. // Grab a point in the near clipping plane and it's normal. If // there is no clipping plane, return. Vector3d clipNormal; Vector3d clipPoint; if (!d->camera->nearClippingPlane(&clipNormal, &clipPoint)) { return false; } // Nudge the point slightly inside of the viewing volume to ensure // that the clip outline isn't clipped itself clipPoint += 1e-4 * clipNormal; // Check which edges of the plane are intersected by the view // plane. // // The intersections are stored bitwise in a quint16, the // least significant bit representing e1 and the four most // significant bits being 0. A bit == 1 indicates that the edge is // intersected. Initialize to all 0s. // register quint16 intersections = 0; // // Define masks for the edge bits to prevent errors: // enum { E1MASK = 0x001, E2MASK = 0x002, E3MASK = 0x004, E4MASK = 0x008, E5MASK = 0x010, E6MASK = 0x020, E7MASK = 0x040, E8MASK = 0x080, E9MASK = 0x100, E10MASK = 0x200, E11MASK = 0x400, E12MASK = 0x800 }; // // Points of intersections: // unsigned short intersectionCount = 0; Vector3d i1; Vector3d i2; Vector3d i3; Vector3d i4; Vector3d i5; Vector3d i6; Vector3d i7; Vector3d i8; Vector3d i9; Vector3d i10; Vector3d i11; Vector3d i12; // // Test points // if (isPlaneBetweenPoints(c1, c2, clipNormal, clipPoint, &i1)) { intersections |= E1MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c1, c3, clipNormal, clipPoint, &i2)) { intersections |= E2MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c1, c4, clipNormal, clipPoint, &i3)) { intersections |= E3MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c2, c5, clipNormal, clipPoint, &i4)) { intersections |= E4MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c2, c7, clipNormal, clipPoint, &i5)) { intersections |= E5MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c3, c5, clipNormal, clipPoint, &i6)) { intersections |= E6MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c3, c6, clipNormal, clipPoint, &i7)) { intersections |= E7MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c4, c6, clipNormal, clipPoint, &i8)) { intersections |= E8MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c4, c7, clipNormal, clipPoint, &i9)) { intersections |= E9MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c5, c8, clipNormal, clipPoint, &i10)) { intersections |= E10MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c6, c8, clipNormal, clipPoint, &i11)) { intersections |= E11MASK; ++intersectionCount; } if (isPlaneBetweenPoints(c7, c8, clipNormal, clipPoint, &i12)) { intersections |= E12MASK; ++intersectionCount; } // Set stipple pattern for clip lines. glPopAttrib() must be // called at all exit points that follow. glPushAttrib(GL_LINE_BIT); const GLushort clipStipple = 0xF0F0; // A = 1010 const GLint clipStippleFactor = 1; glLineStipple(clipStippleFactor, clipStipple); glEnable(GL_LINE_STIPPLE); // Handle polygon drawing based on number of intersections switch (intersectionCount) { case 0: // No intersections, just return. glPopAttrib(); return false; case 1: // Shouldn't happen, probably floating points errors. Print a // warning and return. qWarning() << "Viewing volume near-plane intersects unit cell only once."; glPopAttrib(); return false; case 2: // Also shouldn't happen. Bail. qWarning() << "Viewing volume near-plane intersects unit cell only twice."; glPopAttrib(); return false; case 3: { // Either one corner is in the frustum, or only one is // out. Either way, just connect the points in the triangle. const Vector3d * triangle[3]; unsigned short triangleInd = 0; if (intersections & E1MASK) { triangle[triangleInd++] = &i1; } if (intersections & E2MASK) { triangle[triangleInd++] = &i2; } if (intersections & E3MASK) { triangle[triangleInd++] = &i3; } if (intersections & E4MASK) { triangle[triangleInd++] = &i4; } if (intersections & E5MASK) { triangle[triangleInd++] = &i5; } if (intersections & E6MASK) { triangle[triangleInd++] = &i6; } if (intersections & E7MASK) { triangle[triangleInd++] = &i7; } if (intersections & E8MASK) { triangle[triangleInd++] = &i8; } if (intersections & E9MASK) { triangle[triangleInd++] = &i9; } if (intersections & E10MASK) { triangle[triangleInd++] = &i10; } if (intersections & E11MASK) { triangle[triangleInd++] = &i11; } if (intersections & E12MASK) { triangle[triangleInd++] = &i12; } // If there were more/less than three intersections, something is // buggy above Q_ASSERT(triangleInd == 3); d->painter->drawLine(*(triangle[0]), *(triangle[1]), lineWidth); d->painter->drawLine(*(triangle[1]), *(triangle[2]), lineWidth); d->painter->drawLine(*(triangle[2]), *(triangle[0]), lineWidth); glPopAttrib(); return true; } case 4: // Case of either two, four, or six corners outside the near // plane. // // 2 corner cuts follow, enumerated in order of isolated // coherent edge // switch (intersections) { case ( E2MASK | E4MASK | E5MASK | E3MASK ): // e1 excluded; e2, e4, e5, e3 intersected. d->painter->drawQuadrilateral(i2, i4, i5, i3, lineWidth); glPopAttrib(); return true; case ( E1MASK | E6MASK | E7MASK | E3MASK ): // e2 excluded; e1, e6, e7, e3 intersected. d->painter->drawQuadrilateral(i1, i6, i7, i3, lineWidth); glPopAttrib(); return true; case ( E2MASK | E8MASK | E9MASK | E1MASK ): // e3 excluded; e2, e8, e9, e1 intersected. d->painter->drawQuadrilateral(i2, i8, i9, i1, lineWidth); glPopAttrib(); return true; case ( E1MASK | E6MASK | E10MASK | E5MASK ): // e4 excluded; e1, e6, e10, e5 intersected. d->painter->drawQuadrilateral(i1, i6, i10, i5, lineWidth); glPopAttrib(); return true; case ( E1MASK | E4MASK | E12MASK | E9MASK ): // e5 excluded; e1, e4, e12, e9 intersected. d->painter->drawQuadrilateral(i1, i4, i12, i9, lineWidth); glPopAttrib(); return true; case ( E2MASK | E4MASK | E10MASK | E7MASK ): // e6 excluded; e2, e4, e10, e7 intersected. d->painter->drawQuadrilateral(i2, i4, i10, i7, lineWidth); glPopAttrib(); return true; case ( E2MASK | E6MASK | E11MASK | E8MASK ): // e7 excluded; e2, e6, e11, e8 intersected. d->painter->drawQuadrilateral(i2, i6, i11, i8, lineWidth); glPopAttrib(); return true; case ( E3MASK | E7MASK | E11MASK | E9MASK ): // e8 excluded; e3, e7, e11, e9 intersected. d->painter->drawQuadrilateral(i3, i7, i11, i9, lineWidth); glPopAttrib(); return true; case ( E3MASK | E5MASK | E12MASK | E8MASK ): // e9 excluded; e3, e5, e12, e8 intersected. d->painter->drawQuadrilateral(i3, i5, i12, i8, lineWidth); glPopAttrib(); return true; case ( E4MASK | E12MASK | E11MASK | E6MASK ): // e10 excluded; e4, e12, e11, e6 intersected. d->painter->drawQuadrilateral(i4, i12, i11, i6, lineWidth); glPopAttrib(); return true; case ( E7MASK | E10MASK | E12MASK | E8MASK ): // e11 excluded; e7, e10, e12, e8 intersected. d->painter->drawQuadrilateral(i7, i10, i12, i8, lineWidth); glPopAttrib(); return true; case ( E5MASK | E10MASK | E11MASK | E9MASK ): // e12 excluded; e5, e10, e11, e9 intersected. d->painter->drawQuadrilateral(i5, i10, i11, i9, lineWidth); glPopAttrib(); return true; // Cases of the four coplanar corners outside of the near-plane case ( E3MASK | E7MASK | E10MASK | E5MASK ): // "parallel" to v1, v2; e3, e7, e10, e5 intersected. d->painter->drawQuadrilateral(i3, i7, i10, i5, lineWidth); glPopAttrib(); return true; case ( E2MASK | E4MASK | E12MASK | E8MASK ): // "parallel" to v1, v3; e2, e4, e12, e8 intersected. d->painter->drawQuadrilateral(i2, i4, i12, i8, lineWidth); glPopAttrib(); return true; case ( E1MASK | E6MASK | E11MASK | E9MASK ): // "parallel" to v2,v3; e1, e6, e11, e9 intersected. d->painter->drawQuadrilateral(i1, i6, i11, i9, lineWidth); glPopAttrib(); return true; default: // Shouldn't be any others: qWarning() << "Unhandled 4-point near-plane unit cell intersection:" << debug16bit(intersections); glPopAttrib(); return false; } // End switch on 4 intersections case 5: // Three or five corner split by near-plane, enumerated by the // three-corner combinations below: switch (intersections) { case ( E4MASK | E6MASK | E7MASK | E3MASK | E5MASK ): { // Corners: c1, c2, c3; e4, e6, e7, e3, e5 intersected. QList points; points << i4 << i6 << i7 << i3 << i5; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E2MASK | E4MASK | E5MASK | E9MASK | E8MASK ): { // Corners: c1, c2, c4; e2, e4, e5, e9, e8 intersected. QList points; points << i2 << i4 << i5 << i9 << i8; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E2MASK | E6MASK | E10MASK | E5MASK | E3MASK ): { // Corners: c1, c2, c5; e2, e6, e10, e5, e3 intersected. QList points; points << i2 << i6 << i10 << i5 << i3; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E2MASK | E4MASK | E12MASK | E9MASK | E3MASK ): { // Corners: c1, c2, c7; e2, e4, e12, e9, e3 intersected. QList points; points << i2 << i4 << i12 << i9 << i3; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E6MASK | E1MASK | E9MASK | E8MASK | E7MASK ): { // Corners: c1, c3, c4; e6, e1, e9, e8, e7 intersected. QList points; points << i6 << i1 << i9 << i8 << i7; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E3MASK | E7MASK | E10MASK | E4MASK | E1MASK ): { // Corners: c1, c3, c5; e3, e7, e10, e4, e1 intersected. QList points; points << i3 << i7 << i10 << i4 << i1; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E1MASK | E6MASK | E11MASK | E8MASK | E3MASK ): { // Corners: c1, c3, c6; e1, e6, e11, e8, e3 intersected. QList points; points << i1 << i6 << i11 << i8 << i3; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E1MASK | E9MASK | E11MASK | E7MASK | E2MASK ): { // Corners: c1, c4, c6; e1, e9, e11, e7, e2 intersected. QList points; points << i1 << i9 << i11 << i7 << i2; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E2MASK | E8MASK | E12MASK | E5MASK | E1MASK ): { // Corners: c1, c4, c7; e2, e8, e12, e5, e1 intersected. QList points; points << i2 << i8 << i12 << i5 << i1; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E5MASK | E10MASK | E7MASK | E2MASK | E1MASK ): { // Corners: c2, c3, c5; e5, e10, e7, e2, e1 intersected. QList points; points << i5 << i10 << i7 << i2 << i1; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E1MASK | E3MASK | E8MASK | E12MASK | E4MASK ): { // Corners: c2, c4, c7; e1, e3, e8, e12, e4 intersected. QList points; points << i1 << i3 << i8 << i12 << i4; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E1MASK | E6MASK | E10MASK | E12MASK | E9MASK ): { // Corners: c2, c5, c7; e1, e6, e10, e12, e9 intersected. QList points; points << i1 << i6 << i10 << i12 << i9; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E1MASK | E6MASK | E11MASK | E12MASK | E5MASK ): { // Corners: c2, c5, c8; e1, e6, e11, e12, e5 intersected. QList points; points << i1 << i6 << i11 << i12 << i5; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E1MASK | E4MASK | E10MASK | E11MASK | E9MASK ): { // Corners: c2, c7, c8; e1, e4, e10, e11, e9 intersected. QList points; points << i1 << i4 << i10 << i11 << i9; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E6MASK | E11MASK | E9MASK | E3MASK | E2MASK ): { // Corners: c3, c4, c6; e6, e11, e9, e3, e2 intersected. QList points; points << i6 << i11 << i9 << i3 << i2; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E4MASK | E2MASK | E8MASK | E11MASK | E10MASK ): { // Corners: c3, c5, c6; e4, e2, e8, e11, e10 intersected. QList points; points << i4 << i2 << i8 << i11 << i10; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E2MASK | E4MASK | E12MASK | E11MASK | E7MASK ): { // Corners: c3, c5, c8; e2, e4, e12, e11, e7 intersected. QList points; points << i2 << i4 << i12 << i11 << i7; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E2MASK | E6MASK | E10MASK | E12MASK | E8MASK ): { // Corners: c3, c6, c8; e2, e6, e10, e12, e8 intersected. QList points; points << i2 << i6 << i10 << i12 << i8; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E5MASK | E3MASK | E7MASK | E11MASK | E12MASK ): { // Corners: c4, c6, c7; e5, e3, e7, e11, e12 intersected. QList points; points << i5 << i3 << i7 << i11 << i12; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E3MASK | E7MASK | E10MASK | E12MASK | E9MASK ): { // Corners: c4, c6, c8; e3, e7, e10, e12, e9 intersected. QList points; points << i3 << i7 << i10 << i12 << i9; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E3MASK | E5MASK | E10MASK | E11MASK | E8MASK ): { // Corners: c4, c7, c8; e3, e5, e10, e11, e8 intersected. QList points; points << i3 << i5 << i10 << i11 << i8; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E4MASK | E6MASK | E7MASK | E8MASK | E12MASK ): { // Corners: c5, c6, c8; e4, e6, e7, e8, e12 intersected. QList points; points << i4 << i6 << i7 << i8 << i12; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E4MASK | E6MASK | E11MASK | E9MASK | E5MASK ): { // Corners: c5, c7, c8; e4, e6, e11, e9, e5 intersected. QList points; points << i4 << i6 << i11 << i9 << i5; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E7MASK | E8MASK | E9MASK | E5MASK | E10MASK ): { // Corners: c6, c7, c8; e7, e8, e9, e5, e10 intersected. QList points; points << i7 << i8 << i9 << i5 << i10; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } default: // Shouldn't be any others: qWarning() << "Unhandled 5-point near-plane unit cell intersection:" << debug16bit(intersections); glPopAttrib(); return false; } case 6: // Diagonal slices with four corners each in each volume. switch (intersections) { case ( E4MASK | E6MASK | E7MASK | E8MASK | E9MASK | E5MASK ): { // Corners: c1, c2, c3, c4; e4, e6, e7, e8, e9, e5 intersected. QList points; points << i4 << i6 << i7 << i8 << i9 << i5; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E2MASK | E3MASK | E9MASK | E12MASK | E10MASK | E6MASK ): { // Corners: c1, c2, c5, c7; e2, e3, e9, e12, e10, e6 intersected. QList points; points << i2 << i3 << i9 << i12 << i10 << i6; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E1MASK | E3MASK | E8MASK | E11MASK | E10MASK | E4MASK ): { // Corners: c1, c3, c5, c6; e1, e3, e8, e11, e10, e4 intersected. QList points; points << i1 << i3 << i8 << i11 << i10 << i4; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } case ( E2MASK | E7MASK | E11MASK | E12MASK | E5MASK | E1MASK ): { // Corners: c1, c4, c6, c7; e2, e7, e11, e12, e5, e1 intersected. QList points; points << i2 << i7 << i11 << i12 << i5 << i1; d->painter->drawLineLoop(points, lineWidth); glPopAttrib(); return true; } default: // Shouldn't be any others: qWarning() << "Unhandled 6-point near-plane unit cell intersection:" << debug16bit(intersections); glPopAttrib(); return false; } default: // It doesn't make sense for more intersections to exist. qWarning() << "Unhandled" << intersectionCount << "point near-plane" << "unit cell intersection:" << debug16bit(intersections); glPopAttrib(); return false; } // Shouldn't happen glPopAttrib(); return false; } void GLWidget::renderAxesOverlay() { // Render x, y, z axes as an overlay on the widget // Save the opengl projection matrix and set up an orthogonal projection glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); // Ensure the axes are of the same length double aspectRatio = static_cast(d->pd->width())/static_cast(d->pd->height()); glOrtho(0, aspectRatio, 0, 1, 0, 1); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); // Set the origin and calculate the positions of the axes Vector3d origin = Vector3d(0.07, 0.07, -.07); Vector3d aXa = d->pd->camera()->transformedXAxis() * 0.04 + origin; Vector3d aX = d->pd->camera()->transformedXAxis() * 0.06 + origin; Vector3d aYa = d->pd->camera()->transformedYAxis() * 0.04 + origin; Vector3d aY = d->pd->camera()->transformedYAxis() * 0.06 + origin; Vector3d aZa = d->pd->camera()->transformedZAxis() * 0.04 + origin; Vector3d aZ = d->pd->camera()->transformedZAxis() * 0.06 + origin; // Turn off dynamic scaling in the painter (cylinders don't render correctly) d->painter->setDynamicScaling(false); // Circle next to the axes painter()->setColor(1.0, 0.0, 0.0); painter()->drawSphere(&origin, 0.005); // x axis painter()->setColor(1.0, 0.0, 0.0); painter()->drawCylinder(origin, aXa, 0.005); painter()->drawCone(aXa, aX, 0.01); // y axis painter()->setColor(0.0, 1.0, 0.0); painter()->drawCylinder(origin, aYa, 0.005); painter()->drawCone(aYa, aY, 0.01); // y axis painter()->setColor(0.0, 0.0, 1.0); painter()->drawCylinder(origin, aZa, 0.005); painter()->drawCone(aZa, aZ, 0.01); // Turn dynamic scaling back on (default state) d->painter->setDynamicScaling(true); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); } void GLWidget::renderDebugOverlay() { qDebug() << Q_FUNC_INFO << "is deprecated." << "Please use renderTextOverlay() instead."; return renderTextOverlay(); } void GLWidget::renderTextOverlay() { // Draw all text in white d->pd->painter()->setColor(1.0, 1.0, 1.0); int x = 5, y = 5; if (d->renderDebug) { // Title y += d->pd->painter()->drawText (x, y, "---- " + tr("Debug Information") + " ----"); // FPS y += d->pd->painter()->drawText (x, y, tr("FPS: %L1").arg(computeFramesPerSecond(), 0, 'g', 3)); // pd size y += d->pd->painter()->drawText (x, y, tr("View Size: %L1 x %L2") .arg(d->pd->width()).arg(d->pd->height()) ); if (d->renderModelViewDebug) { // Model view matrix: const Eigen::Transform3d &modelview = d->camera->modelview(); y += d->pd->painter()->drawText (x, y, tr("ModelView row 1: %L1 %L2 %L3 %L4") .arg(modelview(0, 0), 6, 'f', 2, ' ') .arg(modelview(0, 1), 6, 'f', 2, ' ') .arg(modelview(0, 2), 6, 'f', 2, ' ') .arg(modelview(0, 3), 6, 'f', 2, ' ')); y += d->pd->painter()->drawText (x, y, tr("ModelView row 2: %L1 %L2 %L3 %L4") .arg(modelview(1, 0), 6, 'f', 2, ' ') .arg(modelview(1, 1), 6, 'f', 2, ' ') .arg(modelview(1, 2), 6, 'f', 2, ' ') .arg(modelview(1, 3), 6, 'f', 2, ' ')); y += d->pd->painter()->drawText (x, y, tr("ModelView row 3: %L1 %L2 %L3 %L4") .arg(modelview(2, 0), 6, 'f', 2, ' ') .arg(modelview(2, 1), 6, 'f', 2, ' ') .arg(modelview(2, 2), 6, 'f', 2, ' ') .arg(modelview(2, 3), 6, 'f', 2, ' ')); y += d->pd->painter()->drawText (x, y, tr("ModelView row 4: %L1 %L2 %L3 %L4") .arg(modelview(3, 0), 6, 'f', 2, ' ') .arg(modelview(3, 1), 6, 'f', 2, ' ') .arg(modelview(3, 2), 6, 'f', 2, ' ') .arg(modelview(3, 3), 6, 'f', 2, ' ')); } // Molecule info if (!d->molecule) { y += d->pd->painter()->drawText(x, y, tr("No molecule set")); } else { // numAtoms y += d->pd->painter()->drawText (x, y, tr("Atoms: %L1").arg(d->molecule->numAtoms())); // numBonds y += d->pd->painter()->drawText (x, y, tr("Bonds: %L1").arg(d->molecule->numBonds())); } } // end debug // textOverlay stuff if (d->textOverlayLabels.size()) { // Lock mutex d->textOverlayMutex.lock(); // For null pointers: QList deadLabelIndices; // Draw text for (int i = 0; i < d->textOverlayLabels.size(); ++i) { QPointer &label = d->textOverlayLabels[i]; // Check that QPointer is valid if (label == 0) { deadLabelIndices.append(i); continue; } // Draw text y += d->pd->painter()->drawText(x, y, label->text()); } // Remove dead entries in reverse order for (int i = deadLabelIndices.size()-1; i >= 0; --i) { d->textOverlayLabels.removeAt(i); } // Release mutex d->textOverlayMutex.unlock(); } } bool GLWidget::event( QEvent *event ) { if(event->type() == QEvent::Show) { GLWidget::setCurrent(this); } return QGLWidget::event(event); } void GLWidget::mousePressEvent( QMouseEvent * event ) { // Set the event to ignored, check whether any tools accept it event->ignore(); if ( d->tool ) { QUndoCommand *command = 0; command = d->tool->mousePressEvent( this, event ); // If the mouse event is not accepted, pass it to the navigate tool if (!event->isAccepted() && m_navigateTool) { command = m_navigateTool->mousePressEvent(this, event); } if ( command && d->undoStack ) { d->undoStack->push( command ); } else if ( command ) { delete command; } } emit activated(this); emit mousePress(event); } void GLWidget::mouseReleaseEvent( QMouseEvent * event ) { // Set the event to ignored, check whether any tools accept it event->ignore(); if ( d->tool ) { QUndoCommand *command; command = d->tool->mouseReleaseEvent( this, event ); // If the mouse event is not accepted, pass it to the navigate tool if (!event->isAccepted() && m_navigateTool) { command = m_navigateTool->mouseReleaseEvent(this, event); } if ( command && d->undoStack ) { d->undoStack->push( command ); } } #ifdef ENABLE_THREADED_GL d->renderMutex.lock(); #endif // Stop using quickRender d->quickRender = false; #ifdef ENABLE_THREADED_GL d->renderMutex.unlock(); #endif // Render the scene at full quality now the mouse button has been released update(); emit mouseRelease(event); } void GLWidget::mouseMoveEvent( QMouseEvent * event ) { // Set the event to ignored, check whether any tools accept it event->ignore(); #ifdef ENABLE_THREADED_GL d->renderMutex.lock(); #endif // Use quick render while the mouse is down if (d->allowQuickRender) d->quickRender = true; #ifdef ENABLE_THREADED_GL d->renderMutex.unlock(); #endif if ( d->tool ) { QUndoCommand *command; command = d->tool->mouseMoveEvent( this, event ); // If the mouse event is not accepted, pass it to the navigate tool if (!event->isAccepted() && m_navigateTool) { command = m_navigateTool->mouseMoveEvent(this, event); } if ( command && d->undoStack ) { d->undoStack->push( command ); } } emit mouseMove(event); } void GLWidget::wheelEvent( QWheelEvent * event ) { // Set the event to ignored, check whether any tools accept it event->ignore(); if ( d->tool ) { QUndoCommand *command; command = d->tool->wheelEvent( this, event ); // If the mouse event is not accepted, pass it to the navigate tool if (!event->isAccepted() && m_navigateTool) { command = m_navigateTool->wheelEvent(this, event); } if ( command && d->undoStack ) { d->undoStack->push( command ); } } emit wheel(event); } void GLWidget::mouseDoubleClickEvent( QMouseEvent * event ) { // Set the event to ignored, check whether any tools accept it event->ignore(); if ( d->tool ) { QUndoCommand *command; command = d->tool->mouseDoubleClickEvent( this, event ); // If the mouse event is not accepted, pass it to the navigate tool if (!event->isAccepted() && m_navigateTool) { command = m_navigateTool->mouseDoubleClickEvent(this, event); } if ( command && d->undoStack ) { d->undoStack->push( command ); } } #ifdef ENABLE_THREADED_GL d->renderMutex.lock(); #endif // Stop using quickRender d->quickRender = false; #ifdef ENABLE_THREADED_GL d->renderMutex.unlock(); #endif // Render the scene at full quality now the mouse button has been released update(); emit mouseDoubleClick(event); } void GLWidget::keyPressEvent(QKeyEvent *event) { event->ignore(); if (d->tool) { QUndoCommand *command; command = d->tool->keyPressEvent(this, event); // If the key event is not accepted, pass it to the navigate tool if (!event->isAccepted() && m_navigateTool) { command = m_navigateTool->keyPressEvent(this, event); } if ( command && d->undoStack ) { d->undoStack->push( command ); } } update(); } void GLWidget::keyReleaseEvent(QKeyEvent *event) { event->ignore(); if (d->tool) { QUndoCommand *command; command = d->tool->keyReleaseEvent(this, event); // If the mouse event is not accepted, pass it to the navigate tool if (!event->isAccepted() && m_navigateTool) { command = m_navigateTool->keyReleaseEvent(this, event); } if ( command && d->undoStack ) { d->undoStack->push( command ); } } } void GLWidget::setMolecule(Molecule *molecule) { if (!molecule) return; // disconnect from our old molecule if (d->molecule) disconnect(d->molecule, 0, this, 0); // Emit the molecule changed signal emit moleculeChanged(molecule); d->molecule = molecule; // Clear the selection list d->selectedPrimitives.clear(); // compute the molecule's geometric info updateGeometry(); invalidateDLs(); // When the molecule is updated, the display lists become invalid, we should // also render the updated molecule. This should be much simpler than before. connect(d->molecule, SIGNAL(updated()), this, SLOT(invalidateDLs())); connect(d->molecule, SIGNAL(updated()), this, SLOT(updateGeometry())); connect(d->molecule, SIGNAL(updated()), this, SLOT(update())); // If primitives, atoms, or bonds are removed, we need to delete them from the selected list connect(d->molecule, SIGNAL(primitiveRemoved(Primitive*)), this, SLOT(unselectPrimitive(Primitive*))); connect(d->molecule, SIGNAL(atomRemoved(Atom*)), this, SLOT(unselectAtom(Atom*))); connect(d->molecule, SIGNAL(bondRemoved(Bond*)), this, SLOT(unselectBond(Bond*))); // setup the camera to have a nice viewpoint on the molecule d->camera->initializeViewPoint(); update(); } void GLWidget::unselectPrimitive(Primitive *p) { d->selectedPrimitives.removeAll( p ); // The engine caches must be invalidated d->updateCache = true; // TODO: remove also from named selections } void GLWidget::unselectAtom(Atom *a) { unselectPrimitive(a); } void GLWidget::unselectBond(Bond *b) { unselectPrimitive(b); } const Molecule* GLWidget::molecule() const { return d->molecule; } Molecule* GLWidget::molecule() { return d->molecule; } const Vector3d & GLWidget::center() const { return d->center; } const Vector3d & GLWidget::normalVector() const { return d->normalVector; } double GLWidget::radius() const { return d->radius; } const Atom *GLWidget::farthestAtom() const { return d->farthestAtom; } void GLWidget::updateGeometry() { if (!d->molecule) return; // Try to get a read lock for the molecule if (!d->molecule->lock()->tryLockForRead()) return; // The molecule radius, center, normal vector, and farthest atom methods // already account for the unit cell, if present: d->center = d->molecule->center(); d->radius = d->molecule->radius(); d->normalVector = d->molecule->normalVector(); d->farthestAtom = d->molecule->farthestAtom(); // if any cell repeats are used, adjust the geometries if (d->molecule->OBUnitCell() && (d->aCells > 1 || d->bCells > 1 || d->cCells > 1)) { // Cache unit cell info std::vector cellVectors = d->molecule->OBUnitCell()->GetCellVectors(); const Vector3d aVec (cellVectors[0].AsArray()); const Vector3d bVec (cellVectors[1].AsArray()); const Vector3d cVec (cellVectors[2].AsArray()); // The center must be updated to account for the images d->center += (static_cast(d->aCells - 1) * aVec + static_cast(d->bCells - 1) * bVec + static_cast(d->cCells - 1) * cVec) * 0.5; // Exploit symmetry and only calculate distance to four of the corners // of the supercell double scSqRadii[4]; scSqRadii[0] = ((Eigen::Vector3d::Zero()) - d->center).squaredNorm(); scSqRadii[1] = (static_cast(d->aCells) * aVec - d->center).squaredNorm(); scSqRadii[2] = (static_cast(d->bCells) * bVec - d->center).squaredNorm(); scSqRadii[3] = (static_cast(d->cCells) * cVec - d->center).squaredNorm(); // Select the largest radius double scSqRadius = scSqRadii[0]; if (scSqRadius > scSqRadii[1]) scSqRadius = scSqRadii[1]; if (scSqRadius > scSqRadii[2]) scSqRadius = scSqRadii[2]; if (scSqRadius > scSqRadii[3]) scSqRadius = scSqRadii[3]; d->radius = sqrt(scSqRadius); } d->molecule->lock()->unlock(); } Camera * GLWidget::camera() const { return d->camera; } QList GLWidget::engines() const { return d->engines; } void GLWidget::addEngine(Engine *engine) { connect(engine, SIGNAL(changed()), this, SLOT(update())); connect(engine, SIGNAL(changed()), this, SLOT(invalidateDLs())); connect(this, SIGNAL(moleculeChanged(Molecule *)), engine, SLOT(setMolecule(Molecule *))); d->engines.append(engine); qSort(d->engines.begin(), d->engines.end(), engineLessThan); engine->setPainterDevice(d->pd); emit engineAdded(engine); update(); } void GLWidget::removeEngine(Engine *engine) { disconnect(engine, 0, this, 0); disconnect(this, 0, engine, 0); d->engines.removeAll(engine); emit engineRemoved(engine); engine->deleteLater(); update(); } void GLWidget::setTool(Tool *tool) { if ( tool ) { d->tool = tool; } } void GLWidget::setToolGroup(ToolGroup *toolGroup) { if ( d->toolGroup ) { disconnect( d->toolGroup, 0, this, 0 ); } if ( toolGroup ) { d->toolGroup = toolGroup; d->tool = toolGroup->activeTool(); connect( toolGroup, SIGNAL( toolActivated( Tool* ) ), this, SLOT( setTool( Tool* ) ) ); connect( toolGroup, SIGNAL( toolsDestroyed() ), this, SLOT( toolsDestroyed() ) ); } // Find the navigate tool and set it foreach (Tool *tool, d->toolGroup->tools()) { if (tool->identifier() == "Navigate") { m_navigateTool = tool; } } } void GLWidget::toolsDestroyed() { d->tool = 0; m_navigateTool = 0; } void GLWidget::addTextOverlay(QLabel* str) { d->textOverlayMutex.lock(); d->textOverlayLabels.append(QPointer(str)); d->textOverlayMutex.unlock(); } void GLWidget::addTextOverlay(const QList &strs) { d->textOverlayMutex.lock(); for (QList::const_iterator it = strs.constBegin(), it_end = strs.constEnd(); it != it_end; ++it) { d->textOverlayLabels.append(QPointer(*it)); } d->textOverlayMutex.unlock(); } void GLWidget::setExtensions(QList extensions) { d->extensions = extensions; } void GLWidget::setUndoStack( QUndoStack *undoStack ) { d->undoStack = undoStack; } QUndoStack *GLWidget::undoStack() const { return d->undoStack; } Tool* GLWidget::tool() const { return d->tool; } ToolGroup *GLWidget::toolGroup() const { return d->toolGroup; } Painter *GLWidget::painter() const { return d->painter; } QList GLWidget::hits( int x, int y, int w, int h ) { QList hits; if ( !molecule() ) return hits; GLint viewport[4]; unsigned int hit_count; int cx = w/2 + x; int cy = h/2 + y; // setup the selection buffer int requiredSelectBufSize = (d->molecule->numAtoms() + d->molecule->numBonds()) * 8; if ( requiredSelectBufSize > d->selectBufSize ) { //resize selection buffer if ( d->selectBuf ) delete[] d->selectBuf; // add some margin so that resizing doesn't occur every time an atom is added d->selectBufSize = requiredSelectBufSize + SEL_BUF_MARGIN; if ( d->selectBufSize > SEL_BUF_MAX_SIZE ) { d->selectBufSize = SEL_BUF_MAX_SIZE; } d->selectBuf = new GLuint[d->selectBufSize]; } #ifdef ENABLE_THREADED_GL d->renderMutex.lock(); #endif makeCurrent(); //X hits.clear(); glSelectBuffer( d->selectBufSize, d->selectBuf ); glRenderMode( GL_SELECT ); glInitNames(); // Setup a projection matrix for picking in the zone delimited by (x,y,w,h). glGetIntegerv( GL_VIEWPORT, viewport ); glMatrixMode( GL_PROJECTION ); glPushMatrix(); glLoadIdentity(); gluPickMatrix( cx,viewport[3]-cy, w, h,viewport ); // now multiply that projection matrix with the perspective of the camera d->camera->applyProjection(); // now load the modelview matrix from the camera glMatrixMode( GL_MODELVIEW ); glPushMatrix(); glLoadIdentity(); d->camera->applyModelview(); // now actually render using low quality, "pickrender" d->painter->begin(this); #ifdef ENABLE_GLSL if (m_glslEnabled) glUseProgramObjectARB(0); #endif foreach(Engine *engine, d->engines) { if(engine->isEnabled()) { engine->renderPick(d->pd); } } d->painter->end(); // returning to normal rendering mode hit_count = glRenderMode( GL_RENDER ); glMatrixMode( GL_PROJECTION ); glPopMatrix(); glMatrixMode( GL_MODELVIEW ); glPopMatrix(); #ifdef ENABLE_THREADED_GL doneCurrent(); d->renderMutex.unlock(); #endif // if no error occurred and there are hits, process them if ( hit_count > 0 ) { unsigned int i, j; GLuint names, type, *ptr; GLuint minZ, maxZ; long name; //X printf ("hits = %d\n", hits); ptr = ( GLuint * ) d->selectBuf; // for all hits and not past end of buffer for (i = 0; i < hit_count && !(ptr > d->selectBuf + d->selectBufSize); ++i) { names = *ptr++; // make sure that we won't be passing the end of bufer if ( ptr + names + 2 > d->selectBuf + d->selectBufSize ) { break; } minZ = *ptr++; maxZ = *ptr++; // allow names of 0 name = -1; for (j = 0; j < names/2; ++j) { /* for each name */ type = *ptr++; name = *ptr++; } if (name > -1) { // printf ("%ld(%d) ", name,type); hits.append( GLHit( type,name,minZ,maxZ ) ); } } // printf ("\n"); qSort( hits ); } return( hits ); } Primitive* GLWidget::computeClickedPrimitive(const QPoint& p) { QList chits; // Perform an OpenGL selection and retrieve the list of hits. chits = hits(p.x()-SEL_BOX_HALF_SIZE, p.y()-SEL_BOX_HALF_SIZE, SEL_BOX_SIZE, SEL_BOX_SIZE); // Find the first atom or bond (if any) in hits - this will be the closest foreach(const GLHit& hit, chits) { //qDebug() << "Hit: " << hit.name(); if(hit.type() == Primitive::AtomType) return molecule()->atom(hit.name()); else if(hit.type() == Primitive::BondType) return molecule()->bond(hit.name()); } return 0; } Atom* GLWidget::computeClickedAtom(const QPoint& p) { QList chits; // Perform an OpenGL selection and retrieve the list of hits. chits = hits(p.x()-SEL_BOX_HALF_SIZE, p.y()-SEL_BOX_HALF_SIZE, SEL_BOX_SIZE, SEL_BOX_SIZE); // Find the first atom (if any) in hits - this will be the closest foreach(const GLHit& hit, chits) if(hit.type() == Primitive::AtomType) return molecule()->atom(hit.name()); return 0; } Bond* GLWidget::computeClickedBond(const QPoint& p) { QList chits; // Perform an OpenGL selection and retrieve the list of hits. chits = hits(p.x()-SEL_BOX_HALF_SIZE, p.y()-SEL_BOX_HALF_SIZE, SEL_BOX_SIZE, SEL_BOX_SIZE); // Find the first bond (if any) in hits - this will be the closest foreach(const GLHit& hit, chits) if(hit.type() == Primitive::BondType) return static_cast(molecule()->bond(hit.name())); return 0; } QSize GLWidget::sizeHint() const { return minimumSizeHint(); } QSize GLWidget::minimumSizeHint() const { return QSize( 200,200 ); } double GLWidget::radius( const Primitive *p ) const { if (!p) return 0.0; double radius = 0.0; foreach(Engine *engine, d->engines) { if (engine->isEnabled()) { double engineRadius = engine->radius( d->pd, p ); if ( engineRadius > radius ) radius = engineRadius; } } return radius; } void GLWidget::setSelected(PrimitiveList primitives, bool select) { foreach(Primitive *item, primitives) { if (select && !d->selectedPrimitives.contains(item)) d->selectedPrimitives.append( item ); else if (!select) d->selectedPrimitives.removeAll( item ); // The engine caches must be invalidated d->updateCache = true; // item->update(); } } PrimitiveList GLWidget::selectedPrimitives() const { return d->selectedPrimitives.list(); } void GLWidget::toggleSelected( PrimitiveList primitives ) { foreach(Primitive *item, primitives) { if (d->selectedPrimitives.contains(item)) d->selectedPrimitives.removeAll( item ); else d->selectedPrimitives.append(item); } // The engine caches must be invalidated d->updateCache = true; } void GLWidget::toggleSelected() { if (!d->molecule) return; // Currently handle atoms and bonds foreach(Atom *a, d->molecule->atoms()) { Primitive *p = static_cast(a); if (d->selectedPrimitives.contains(p)) d->selectedPrimitives.removeAll(p); else d->selectedPrimitives.append(p); } foreach(Bond *b, d->molecule->bonds()) { Primitive *p = static_cast(b); if (d->selectedPrimitives.contains(p)) d->selectedPrimitives.removeAll(p); else d->selectedPrimitives.append(p); } // The engine caches must be invalidated d->updateCache = true; } void GLWidget::clearSelected() { d->selectedPrimitives.clear(); // The engine caches must be invalidated d->updateCache = true; } bool GLWidget::isSelected( const Primitive *p ) const { // Return true if the item is selected return d->selectedPrimitives.contains(const_cast(p)); } bool GLWidget::addNamedSelection(const QString &name, PrimitiveList &primitives) { // make sure the name is unique for (int i = 0; i < d->namedSelections.size(); ++i) if (d->namedSelections.at(i).first == name) return false; QList atomIds; QList bondIds; foreach(Primitive *item, primitives) { if (item->type() == Primitive::AtomType) atomIds.append(item->id()); if (item->type() == Primitive::BondType) bondIds.append(item->id()); } QPair,QList > pair(atomIds, bondIds); QPair,QList > > namedSelection(name, pair); d->namedSelections.append(namedSelection); emit namedSelectionsChanged(); return true; } void GLWidget::removeNamedSelection(const QString &name) { for (int i = 0; i < d->namedSelections.size(); ++i) if (d->namedSelections.at(i).first == name) { d->namedSelections.removeAt(i); emit namedSelectionsChanged(); return; } } void GLWidget::removeNamedSelection(int index) { d->namedSelections.removeAt(index); } void GLWidget::renameNamedSelection(int index, const QString &name) { if (name.isEmpty()) return; QPair,QList > > pair = d->namedSelections.takeAt(index); pair.first = name; d->namedSelections.insert(index, pair); emit namedSelectionsChanged(); } QList GLWidget::namedSelections() { QList names; for (int i = 0; i < d->namedSelections.size(); ++i) names.append(d->namedSelections.at(i).first); return names; } PrimitiveList GLWidget::namedSelectionPrimitives(const QString &name) { for (int i = 0; i < d->namedSelections.size(); ++i) if (d->namedSelections.at(i).first == name) { return namedSelectionPrimitives(i); } return PrimitiveList(); } PrimitiveList GLWidget::namedSelectionPrimitives(int index) { PrimitiveList list; if (!d->molecule) return list; for (int j = 0; j < d->namedSelections.at(index).second.first.size(); ++j) { Atom *atom = d->molecule->atomById(d->namedSelections.at(index).second.first.at(j)); if (atom) list.append(atom); } for (int j = 0; j < d->namedSelections.at(index).second.second.size(); ++j) { Bond *bond = d->molecule->bondById(d->namedSelections.at(index).second.second.at(j)); if (bond) list.append(bond); } return list; } void GLWidget::setUnitCells( int a, int b, int c ) { d->aCells = a; d->bCells = b; d->cCells = c; updateGeometry(); d->camera->initializeViewPoint(); update(); } void GLWidget::setUnitCellColor(const QColor c) { #ifdef ENABLE_THREADED_GL d->renderMutex.lock(); #endif d->cellColor = c; #ifdef ENABLE_THREADED_GL d->renderMutex.unlock(); #endif } void GLWidget::setOnlyRenderOriginalUnitCell(bool b) { d->onlyRenderOriginalUnitCell = b; update(); } void GLWidget::clearUnitCell() { updateGeometry(); d->camera->initializeViewPoint(); update(); } int GLWidget::aCells() const { return d->aCells; } int GLWidget::bCells() const { return d->bCells; } int GLWidget::cCells() const { return d->cCells; } Color GLWidget::unitCellColor() const { return Color(d->cellColor); } bool GLWidget::onlyRenderOriginalUnitCell() { return d->onlyRenderOriginalUnitCell; } void GLWidget::setProjection(GLWidget::ProjectionType type) { d->projection = type; updateGeometry(); d->camera->initializeViewPoint(); update(); } GLWidget::ProjectionType GLWidget::projection() const { return d->projection; } inline double GLWidget::computeFramesPerSecond() { static QTime time; static bool firstTime = true; static int old_time, new_time; static int frames; static double fps; if( firstTime ) { time.start(); firstTime = false; old_time = time.elapsed(); frames = 0; fps = 0; } new_time = time.elapsed(); frames++; if( new_time - old_time > 200 ) { fps = 1000.0 * frames / double( new_time - old_time ); frames = 0; time.restart(); old_time = time.elapsed(); } return fps; } void GLWidget::writeSettings(QSettings &settings) const { settings.setValue("background", d->background); settings.setValue("quality", d->painter->quality()); settings.setValue("fogLevel", d->fogLevel); settings.setValue("renderAxes", d->renderAxes); settings.setValue("renderDebug", d->renderDebug); settings.setValue("renderModelViewDebug", d->renderModelViewDebug); settings.setValue("allowQuickRender", d->allowQuickRender); settings.setValue("renderUnitCellAxes", d->renderUnitCellAxes); settings.setValue("projection", d->projection); int count = d->engines.size(); settings.beginWriteArray("engines"); // Clear the array before writing settings - fixes issue when index changes settings.remove(""); for(int i = 0; i< count; i++) { settings.setArrayIndex(i); d->engines.at(i)->writeSettings(settings); } settings.endArray(); } void GLWidget::readSettings(QSettings &settings) { // Make sure to provide some default values for any settings.value("", DEFAULT) call setQuality(settings.value("quality", 2).toInt()); setFogLevel(settings.value("fogLevel", 0).toInt()); d->background = settings.value("background", QColor(0,0,0,0)).value(); d->renderAxes = settings.value("renderAxes", 1).value(); d->renderDebug = settings.value("renderDebug", 0).value(); d->renderModelViewDebug = settings.value("renderModelViewDebug", 0).value(); d->allowQuickRender = settings.value("allowQuickRender", 1).value(); d->renderUnitCellAxes = settings.value("renderUnitCellAxes", 1).value(); int pr = settings.value("projection", GLWidget::Perspective).toInt(); // Makes the compiler happy about the type conversion. if (pr != 1 && pr != 2) pr = 1; // set a default if this is screwed up d->projection = GLWidget::ProjectionType(pr); loadEngines(settings); if(!d->engines.count()) loadDefaultEngines(); } void GLWidget::loadEngines(QSettings &settings) { int count = settings.beginReadArray("engines"); int numEnabled = 0; PluginManager *plugins = PluginManager::instance(); QList allEngines = plugins->identifiers(Plugin::EngineType); for(int i=0; ifactory(engineClass, Plugin::EngineType); if(!engineClass.isEmpty() && factory) { Engine *engine = static_cast(factory->createInstance(this)); engine->readSettings(settings); if(engine->isEnabled()) numEnabled++; addEngine(engine); allEngines.removeAll(engineClass); } } qDebug() << "Settings are missing for the next engines:" << allEngines; // Add engines with missing settings foreach(const QString &engineClass, allEngines) { PluginFactory *factory = plugins->factory(engineClass, Plugin::EngineType); if(factory) { Engine *engine = static_cast(factory->createInstance(this)); addEngine(engine); allEngines.removeAll(engineClass); } } settings.endArray(); // Enable default engine if nothing is enabled if(!d->engines.isEmpty() && (numEnabled == 0)) { foreach(Engine *engine, d->engines) { if(engine->identifier() == "Ball and Stick") engine->setEnabled(true); } } } void GLWidget::loadDefaultEngines() { QList engines = d->engines; foreach(Engine *engine, engines) this->removeEngine(engine); PluginManager *plugins = PluginManager::instance(); foreach(PluginFactory *factory, plugins->factories(Plugin::EngineType)) { Engine *engine = static_cast(factory->createInstance(this)); if (engine->identifier() == "Ball and Stick") engine->setEnabled(true); addEngine(engine); } } void GLWidget::reloadEngines() { QSettings settings; // save engine settings int count = d->engines.size(); settings.beginWriteArray("engines"); for(int i = 0; i< count; i++) { settings.setArrayIndex(i); d->engines.at(i)->writeSettings(settings); } settings.endArray(); // delete engines foreach(Engine *engine, d->engines) { delete engine; } // clear the engine list d->engines.clear(); loadEngines(settings); } void GLWidget::setQuickRender(bool enabled) { d->allowQuickRender = enabled; } bool GLWidget::quickRender() const { return d->allowQuickRender; } void GLWidget::setRenderUnitCellAxes(bool enabled) { if (d->renderUnitCellAxes != enabled) { d->renderUnitCellAxes = enabled; emit unitCellAxesRenderChanged(enabled); } } bool GLWidget::renderUnitCellAxes() const { return d->renderUnitCellAxes; } void GLWidget::invalidateDLs() { // Something changed and we need to invalidate the display lists d->updateCache = true; } // Copied from current sources of Qt 4.7 #ifndef QT_OPENGL_ES static void save_gl_state() { glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS); glPushAttrib(GL_ALL_ATTRIB_BITS); glMatrixMode(GL_TEXTURE); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glShadeModel(GL_FLAT); glDisable(GL_CULL_FACE); glDisable(GL_LIGHTING); glDisable(GL_STENCIL_TEST); glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); } static void restore_gl_state() { glMatrixMode(GL_TEXTURE); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glPopAttrib(); glPopClientAttrib(); } void gl_draw_text(QPainter *p, int x, int y, const QString &str, const QFont &font, double zoom) { GLfloat color[4]; glGetFloatv(GL_CURRENT_COLOR, &color[0]); QFont fore_font = font; qreal size = font.pointSizeF() * zoom; fore_font.setPointSizeF(size); QColor col, outline; col.setRgbF(color[0], color[1], color[2],color[3]); outline.setRgbF((1-color[0])/2,(1-color[1])/2,(1-color[2])/2); // use opposite color, but make it darker if(!p) return; // prevent segfaults QPen old_pen = p->pen(); QFont old_font = p->font(); // Outline p->setPen(outline); //QFont out_font = fore_font; //out_font.setWeight(font.weight()+10); p->setFont(fore_font); // p->drawText(x+2, y, str); p->drawText(x+1, y, str); p->drawText(x-1, y, str); // p->drawText(x-2, y, str); p->drawText(x, y+1, str); // p->drawText(x, y+2, str); p->drawText(x, y-1, str); // p->drawText(x, y-2, str); // Foreground p->setPen(col); p->setFont(fore_font); p->drawText(x, y, str); p->setPen(old_pen); p->setFont(old_font); } static inline void transform_point(GLdouble out[4], const GLdouble m[16], const GLdouble in[4]) { #define M(row,col) m[col*4+row] out[0] = M(0, 0) * in[0] + M(0, 1) * in[1] + M(0, 2) * in[2] + M(0, 3) * in[3]; out[1] = M(1, 0) * in[0] + M(1, 1) * in[1] + M(1, 2) * in[2] + M(1, 3) * in[3]; out[2] = M(2, 0) * in[0] + M(2, 1) * in[1] + M(2, 2) * in[2] + M(2, 3) * in[3]; out[3] = M(3, 0) * in[0] + M(3, 1) * in[1] + M(3, 2) * in[2] + M(3, 3) * in[3]; #undef M } static inline GLint gluProject(GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble model[16], const GLdouble proj[16], const GLint viewport[4], GLdouble * winx, GLdouble * winy, GLdouble * winz) { GLdouble in[4], out[4]; in[0] = objx; in[1] = objy; in[2] = objz; in[3] = 1.0; transform_point(out, model, in); transform_point(in, proj, out); if (in[3] == 0.0) return GL_FALSE; in[0] /= in[3]; in[1] /= in[3]; in[2] /= in[3]; *winx = viewport[0] + (1 + in[0]) * viewport[2] / 2; *winy = viewport[1] + (1 + in[1]) * viewport[3] / 2; *winz = (1 + in[2]) / 2; return GL_TRUE; } #endif // Based on Qt code void GLWidget::renderText(double x, double y, double z, const QString &str, const QFont &font, int) { //QGLWidget::renderText(x,y,z,str,font, i); #ifndef QT_OPENGL_ES if (str.isEmpty() || !isValid()) return; bool auto_swap = autoBufferSwap(); int width = d->pd->width(); int height = d->pd->height(); GLdouble model[4][4], proj[4][4]; GLint view[4]; glGetDoublev(GL_MODELVIEW_MATRIX, &model[0][0]); glGetDoublev(GL_PROJECTION_MATRIX, &proj[0][0]); glGetIntegerv(GL_VIEWPORT, &view[0]); GLdouble win_x = 0, win_y = 0, win_z = 0; gluProject(x, y, z, &model[0][0], &proj[0][0], &view[0], &win_x, &win_y, &win_z); win_y = height - win_y; // y is inverted //QPaintEngine::Type oldEngineType = qgl_engine_selector()->preferredPaintEngine(); //QPaintEngine::Type oldEngineType = QGL::preferredPaintEngine(); QPaintEngine *engine = paintEngine(); QPainter *p; bool reuse_painter = false; bool use_depth_testing = glIsEnabled(GL_DEPTH_TEST); bool use_scissor_testing = glIsEnabled(GL_SCISSOR_TEST); if (engine->isActive()) { reuse_painter = true; p = engine->painter(); save_gl_state(); } else { setAutoBufferSwap(false); // disable glClear() as a result of QPainter::begin() //d->disable_clear_on_painter_begin = true; p = new QPainter(this); } QRect viewport(view[0], view[1], view[2], view[3]); if (!use_scissor_testing && viewport != rect()) { glScissor(view[0], view[1], view[2], view[3]); glEnable(GL_SCISSOR_TEST); } else if (use_scissor_testing) { glEnable(GL_SCISSOR_TEST); } glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, width, height); glOrtho(0, width, height, 0, 0, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glAlphaFunc(GL_GREATER, 0.0); glEnable(GL_ALPHA_TEST); if (use_depth_testing) glEnable(GL_DEPTH_TEST); glTranslated(0, 0, -win_z); gl_draw_text(p, qRound(win_x), qRound(win_y), str, font, 10.0/camera()->distance(Vector3d(0,0,0))); if (reuse_painter) { restore_gl_state(); } else { p->end(); delete p; setAutoBufferSwap(auto_swap); // d->disable_clear_on_painter_begin = false; } //qgl_engine_selector()->setPreferredPaintEngine(oldEngineType); #else // QT_OPENGL_ES Q_UNUSED(x); Q_UNUSED(y); Q_UNUSED(z); Q_UNUSED(str); Q_UNUSED(font); qWarning("QGLWidget::renderText is not supported under OpenGL/ES"); #endif } } avogadro-1.1.1/libavogadro/src/color.cpp0000644000175000001440000001053112250371054017426 0ustar marcususers/********************************************************************** Color - Class for handling color changes in OpenGL Copyright (C) 2006 Benoit Jacob Copyright (C) 2007 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "color.h" #include // for fabs() #ifdef ENABLE_GLSL #include #endif #include namespace Avogadro { using std::fabs; class ColorPrivate { public: ColorPrivate() { } ~ColorPrivate() { } }; Color::Color(): d(0) { } Color::~Color() { //delete d; } Color::Color(float red, float green, float blue, float alpha ) : d(0) { m_channels[0] = red; m_channels[1] = green; m_channels[2] = blue; m_channels[3] = alpha; } Color::Color(const QColor &qcolor) : d(0) { m_channels[0] = static_cast(qcolor.redF()); m_channels[1] = static_cast(qcolor.greenF()); m_channels[2] = static_cast(qcolor.blueF()); m_channels[3] = static_cast(qcolor.alphaF()); } Color::Color(const Color &c) : Plugin(NULL), d(0) { this->m_channels[0] = c.m_channels[0]; this->m_channels[1] = c.m_channels[1]; this->m_channels[2] = c.m_channels[2]; this->m_channels[3] = c.m_channels[3]; this->m_name = c.m_name; } Color::Color( const Primitive *p ) : d(0) { setFromPrimitive(p); } void Color::setFromRgba(float red, float green, float blue, float alpha) { m_channels[0] = red; m_channels[1] = green; m_channels[2] = blue; m_channels[3] = alpha; } void Color::setToSelectionColor() { m_channels[0] = 0.3; m_channels[1] = 0.6; m_channels[2] = 1.0; m_channels[3] = 0.7; } void Color::setFromQColor(const QColor &color) { m_channels[0] = color.redF(); m_channels[1] = color.greenF(); m_channels[2] = color.blueF(); m_channels[3] = color.alphaF(); } void Color::setFromPrimitive(const Primitive *) { return; } void Color::setFromIndex(const unsigned int) { return; } void Color::setFromGradient(const double, const double, const double, const double) { return; } void Color::setAlpha(double alpha) { m_channels[3] = alpha; } void Color::applyAsMaterials() { float ambientColor [] = { m_channels[0] / 3, m_channels[1] / 3, m_channels[2] / 3, m_channels[3] }; float s = ( 0.5 + fabs( m_channels[0] - m_channels[1] ) + fabs( m_channels[2] - m_channels[1] ) + fabs( m_channels[2] - m_channels[0] ) ) / 4.0; float t = 1.0 - s; float specularColor [] = { s + t * m_channels[0], s + t * m_channels[1], s + t * m_channels[2], m_channels[3] }; glMaterialfv( GL_FRONT, GL_AMBIENT, ambientColor ); glMaterialfv( GL_FRONT, GL_DIFFUSE, m_channels ); glMaterialfv( GL_FRONT, GL_SPECULAR, specularColor ); glMaterialf( GL_FRONT, GL_SHININESS, 50.0 ); } void Color::applyAsFlatMaterials() { glMaterialfv( GL_FRONT, GL_AMBIENT, m_channels ); glMaterialfv( GL_FRONT, GL_DIFFUSE, m_channels ); glMaterialfv( GL_FRONT, GL_SPECULAR, m_channels ); glMaterialf( GL_FRONT, GL_SHININESS, 1.0 ); } void Color::setName(const QString& name) { m_name = name; } QString Color::name() const { if (m_name.isEmpty()) return "Generic Color"; // should never, ever appear else return m_name; } QString Color::identifier() const { return "Generic Color"; } void Color::apply() { glColor4fv(m_channels); } } avogadro-1.1.1/libavogadro/src/idlist.cpp0000644000175000001440000000653712250371054017613 0ustar marcususers/********************************************************************** IDList - Organized List of Primitives. Copyright (C) 2007 Donald Ephraim Curtis This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "idlist.h" #include "primitive.h" namespace Avogadro { class IDListPrivate { public: IDListPrivate() : size(0) {}; int size; QVector< QList > vector; }; IDList::IDList() : d(new IDListPrivate) { d->vector.resize(Primitive::LastType); } IDList::IDList(const IDList &other) : d(new IDListPrivate) { IDListPrivate *e = other.d; d->size = e->size; d->vector = e->vector; } IDList::IDList(const QList &other) : d(new IDListPrivate) { d->vector.resize(Primitive::LastType); foreach(Primitive *primitive, other) { append(primitive); } } IDList::IDList(const PrimitiveList &other) : d(new IDListPrivate) { d->vector.resize(Primitive::LastType); foreach(Primitive *primitive, other) { append(primitive); } } IDList &IDList::operator=(const IDList &other) { IDListPrivate *e = other.d; d->size = e->size; d->vector = e->vector; return *this; } IDList &IDList::operator=(const QList &other) { clear(); foreach(Primitive *primitive, other) { append(primitive); } return *this; } IDList &IDList::operator=(const PrimitiveList &other) { clear(); foreach(Primitive *primitive, other) { append(primitive); } return *this; } IDList::~IDList() { delete d; } QList IDList::subList(Primitive::Type type) const { if(type > Primitive::LastType) { return QList(); } return(d->vector[type]); } bool IDList::contains(const Primitive *p) const { return d->vector[p->type()].contains(p->id()); } void IDList::append(Primitive *p) { d->vector[p->type()].append(p->id()); d->size++; } void IDList::removeAll(Primitive *p) { d->vector[p->type()].removeAll(p->id()); d->size--; } int IDList::size() const { return d->size; } bool IDList::isEmpty() const { return !size(); } int IDList::count() const { return size(); } int IDList::count(Primitive::Type type) const { if(type > Primitive::LastType) { return 0; } return d->vector[type].size(); } void IDList::clear() { for( int i=0; ivector.size(); i++ ) { d->vector[i].clear(); } d->size = 0; } } avogadro-1.1.1/libavogadro/src/molecule.h0000644000175000001440000007227412250371054017576 0ustar marcususers/********************************************************************** Molecule - Molecule class derived from the base Primitive class Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008-2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef MOLECULE_H #define MOLECULE_H #include // Used by the inline functions #include #include namespace OpenBabel { class OBAtom; class OBBond; class OBMol; class OBUnitCell; } namespace Avogadro { // Declare new classes class Atom; class Bond; class Cube; class Fragment; class Mesh; class PrimitiveList; class Residue; class ZMatrix; /** * @class Molecule molecule.h * @brief The molecule contains all of the molecular primitives. * @author Marcus D. Hanwell * * The Molecule class contains the core data of the molecule. It is the central * model, holding all information displayed by our various views and * manipulated by tools and extensions. It typically contains Atom and Bond * objects, but may also contain Cube, Mesh, Fragment, Residue and other * objects. */ class MoleculePrivate; class A_EXPORT Molecule : public Primitive { Q_OBJECT public: /** * Constructor. * * @param parent The object parent. */ Molecule(QObject *parent=0); /** * Copy constructor. * @param other Molecule to make a copy of. */ Molecule(const Molecule &other); /** * Destructor. */ virtual ~Molecule(); /** * Call to trigger an update signal, causing the molecule to be redrawn. */ void update(); /** @name Molecule parameters * These methods set and get Molecule parameters. * @{ */ /** * Set the filename of the molecule. */ void setFileName(const QString& name); /** * @return The full path filename of the molecule. */ QString fileName() const; /** @} */ /** @name Atom properties * These functions are used to change and retrieve the properties of the * Atom objects in the Molecule. * @{ */ /** * @overload * Create a new Atom object and return a pointer to it. * @note Do not delete the object, use removeAtom(Atom*). */ Atom *addAtom(); /** * Create a new Atom object with the specified id and return a pointer to * it. Used when you need to recreate an Atom with the same unique id. * @note Do not delete the object, use removeAtom(unsigned long id). */ Atom *addAtom(unsigned long id); /** * @overload * Create a new Atom object of the specified element at the given * position, and return a pointer to it. * @param atomicNum Atomic number * @param pos Cartesian position * @note Do not delete the object, use removeAtom(unsigned long id). */ Atom *addAtom(int atomicNum, const Eigen::Vector3d &pos); /** * @overload * Create a new Atom object and copy the Atom object @a other's data into * it. A pointer to the new atom in @a this is returned. * @param other The atom to copy into the new atom * @note Do not delete the new object, use removeAtom(unsigned long id). */ Atom *addAtom(const Atom &other); /** * Remove the supplied Atom. */ void removeAtom(Atom *atom); /** * Delete the Atom with the unique id specified. */ void removeAtom(unsigned long id); /** * @return The Atom at the supplied index. * @note Replaces GetAtom. */ Atom * atom(int index) const; /** * @return The Atom at the supplied unqique id. */ Atom *atomById(unsigned long id) const; /** * @return QList of all Atom objects in the Molecule. */ QList atoms() const; /** * Set the Atom position. * @param id Unique id of the Atom to set the position for. * @param vec Position vector to set the Atom to. */ void setAtomPos(unsigned long id, const Eigen::Vector3d &vec); /** * Set the Atom position. * @param id Unique id of the Atom to set the position for. * @param vec Position vector to set the Atom to. */ void setAtomPos(unsigned long id, const Eigen::Vector3d *vec); /** * Get the position vector of the supplied Atom. * @param id Unique id of the Atom. * @return Position vector of the Atom. */ const Eigen::Vector3d * atomPos(unsigned long id) const; /** * @return The total number of Atom objects in the molecule. */ unsigned int numAtoms() const; /** @} */ /** @name Bond properties * These functions are used to change and retrieve the properties of the * Bond objects in the Molecule. * @{ */ /** * @overload * Create a new Bond object and return a pointer to it. * @note Do not delete the object, use removeBond(Bond*). */ Bond *addBond(); /** * Create a new Bond object with the specified id and return a pointer to * it. Used when you need to recreate a Bond with the same unique id. * @note Do not delete the object, use removeBond(unsigned long id). */ Bond *addBond(unsigned long id); /** * @overload * Create a new bond between two atoms of the specified order. A pointer * to the new Bond is returned. * @param beginAtomId ID of the beginning atom of the bond * @param endAtomId ID of the ending atom of the bond * @param order Bond order of the new bond (default 1) * @note Do not delete the object, use removeBond(Bond*). */ Bond *addBond(unsigned long beginAtomId, unsigned long endAtomId, short order = 1); /** * @overload * Create a new bond between two atoms of the specified order. A pointer * to the new Bond is returned. * @param beginAtom Pointer to the beginning atom of the bond * @param endAtom Pointer to the ending atom of the bond * @param order Bond order of the new bond (default 1) * @note Do not delete the object, use removeBond(Bond*). * @note Both beginAtom and endAtom must be owned by @a this Molecule. */ Bond *addBond(Atom *beginAtom, Atom* endAtom, short order = 1); /** * Remove the supplied Bond. */ void removeBond(Bond *bond); /** * Remove the Bond with the unique id specified. */ void removeBond(unsigned long id); /** * @return The Bond at the supplied index. * @note Replaces GetBond. */ Bond* bond(int index) const; /** * @return The Bond at the supplied unique id. */ Bond *bondById(unsigned long id) const; /** * @return QList of all Bond objects in the Molecule. */ QList bonds() const; /** * @return The total number of Bond objects in the Mmolecule. */ unsigned int numBonds() const; /** @} */ /** @name Residue properties * These functions are used to change and retrieve the properties of the * Residue objects in the Molecule. * @{ */ /** * Create a new Residue object and return a pointer to it. * @note Do not delete the object, use removeResidue(Residue *residue). */ Residue *addResidue(); /** * Create a new Residue object with the specified id and return a pointer to * it. Used when you need to recreate a Residue with the same unique id. * @note Do not delete the object, use removeResidue(unsigned long id). */ Residue *addResidue(unsigned long id); /** * Remove the supplied Residue. */ void removeResidue(Residue *residue); /** * Remove the Residue with the unique id specified. */ void removeResidue(unsigned long id); /** * @return The residue at the supplied index. * @note Replaces GetResidue. */ Residue* residue(int index); const Residue* residue(int index) const; /** * @return The residue at the supplied unique id. */ Residue *residueById(unsigned long id) const; /** * @return QList of all Residue objects in the Molecule. */ QList residues() const; /** * @return The total number of Residue objects in the Molecule. */ unsigned int numResidues() const; /** @} */ /** @name Ring properties * These functions are used to change and retrieve the properties of the * Ring objects in the Molecule. * @note These should probably be generalized to Fragments, but then a * convenience function to return a list of just rings would be needed. * @{ */ /** * Create a new ring object and return a pointer to it. * @note Do not delete the object, use removeRing(Fragment *ring). */ Fragment *addRing(); /** * Create a new Ring object with the specified id and return a pointer to * it. Used when you need to recreate a Ring with the same unique id. * @note Do not delete the object, use removeRing(unsigned long id). */ Fragment *addRing(unsigned long id); /** * Remove the supplied ring. */ void removeRing(Fragment *ring); /** * Remove the ring with the unique id specified. */ void removeRing(unsigned long id); /** * @return QList of all rings in the Molecule. */ QList rings(); /** * @return The total number of rings in the molecule. */ unsigned int numRings() const; /** @} */ /** @name Cube properties * These functions are used to change and retrieve the properties of the * Cube objects in the Molecule. * @{ */ /** * Create a new Cube object and return a pointer to it. * @note Do not delete the object, use removeCube(unsigned long id). */ Cube *addCube(); /** * Create a new Cube object with the specified id and return a pointer to * it. Used when you need to recreate a Cube with the same unique id. * @note Do not delete the object, use removeCube(unsigned long id). */ Cube *addCube(unsigned long id); /** * Remove the supplied Cube. */ void removeCube(Cube *cube); /** * Remove the Cube with the unique id specified. */ void removeCube(unsigned long id); /** * @return The Cube at the supplied index. */ Cube* cube(int index) const; /** * @return The Cube at the supplied unique id. */ Cube *cubeById(unsigned long id) const; /** * @return QList of all cubes in the molecule. */ QList cubes() const; /** * @return The total number of Cube objects in the Molecule. */ unsigned int numCubes() const; /** @} */ /** @name Mesh properties * These functions are used to change and retrieve the properties of the * Mesh objects in the Molecule. * @{ */ /** * Create a new Mesh object and return a pointer to it. * @note Do not delete the object, use removeMesh(unsigned long id). */ Mesh * addMesh(); /** * Create a new Mesh object with the specified id and return a pointer to * it. Used when you need to recreate a Mesh with the same unique id. * @note Do not delete the object, use removeMesh(unsigned long id). */ Mesh *addMesh(unsigned long id); /** * Remove the supplied Mesh. */ void removeMesh(Mesh *mesh); /** * Remove the Mesh with the unique id specified. */ void removeMesh(unsigned long id); /** * @return The Mesh at the supplied index. */ Mesh* mesh(int index) const; /** * @return The Mesh at the supplied unique id. */ Mesh *meshById(unsigned long id) const; /** * @return QList of all Mesh objects in the Molecule. */ QList meshes() const; /** * @return The total number of meshes in the molecule. */ unsigned int numMeshes() const; /** @} */ /** @name ZMatrix properties * These functions are used to change and retrieve the properties of the * ZMatrix objects in the Molecule. * @{ */ /** * Create a new ZMatrix object and return a pointer to it. * @note Do not delete the object, use removeZMatrix(unsigned long id). */ ZMatrix * addZMatrix(); /** * Remove the supplied ZMatrix. */ void removeZMatrix(ZMatrix *zmatrix); /** * @return The ZMatrix at the supplied index. */ ZMatrix * zMatrix(int index) const; /** * @return QList of all ZMatrix objects in the Molecule. */ QList zMatrices() const; /** * @return The total number of ZMatrix objects in the molecule. */ unsigned int numZMatrices() const; /** @} */ /** * Add hydrogens to the molecule. * @param atom If supplied only add hydrogens to the specified atom. * @param atomIds Unique Atom IDs when adding hydrogens in undo/redo. * @param bondIds Unique Bond IDs when adding hydrogens in undo/redo. */ void addHydrogens(Atom *atom = 0, const QList &atomIds = QList(), const QList &bondIds = QList()); /** * Remove all hydrogens from the molecule. * @param atom If supplied only remove hydrogens connected to the * specified atom. */ void removeHydrogens(Atom *atom = 0); /** * Set the dipole moment of the Molecule. * @param moment The dipole moment of the Molecule. */ void setDipoleMoment(const Eigen::Vector3d &moment); /** * Calculate the dipole moment vector for this molecule. If not known, * Avogadro will estimate it based on partial charges. * * @param A boolean to indicate if the dipole is estimated or not * @return The dipole moment of the Molecule. */ Eigen::Vector3d dipoleMoment(bool *estimate = 0) const; /** * Calculate the partial charges on each atom. */ void calculatePartialCharges() const; /** * Calculate the aromaticity of the bonds. */ void calculateAromaticity() const; /** * Calculate the indices of atoms in groups of atoms of the same element. */ void calculateGroupIndices() const; /** * @return The bond between the two supplied atom ids if one exists, * otherwise 0 is returned. */ Bond* bond(unsigned long id1, unsigned long id2); /** * @return The bond between the two supplied atom pointers if one exists, * otherwise 0 is returned. */ Bond* bond(const Atom*, const Atom*); /** * Get the current conformer size to accommodate all atoms. Since atom * positions are indexed by their uniaue id, this is not the same as the * number of atoms @code Molecule *molecule; ... // create a correctly sized conformer and initialize its elements std::vector newConformer(molecule->conformerSize(), Eigen::Vector3d::Zero()) // change the atom posistions in the conformer foreach (Atom *atom, molecule->atoms()) { newConformer[atom->id()] = ...; } // add the conformer to the end of the current list (i.e. index = numConformers()) molecule->addConformer(newConformer, molecule->numConformers()) @endcode */ unsigned long conformerSize() { return m_atomPos->size(); } /** * Add a new conformer to the Molecule. If the index is an already existing * conformer, this conformer will be overwritten. If there is a gap between * the currently last index and the new index, new conformers will be * created to make sure all indexes have a valid conformer. For example, if * there is only one conformer and this method is called with @p index 9, a * total of nine conformers are added (0 existed, 1-9 are created). * * @note Conformer atom positions are indexed by their unique id (Atom::id()). * Use conformerSize() to check the current size needed to accommodate all * atoms. * * @param conformer A vector of Vector3d with all atom positions. * @param index The index of the conformer to add. */ bool addConformer(const std::vector &conformer, unsigned int index); /** * Add a new conformer and return a pointer to it. If the index is an * already existing conformer, no new conformer will be created and a * pointer to the already existing conformer is returned. If there is * a gap between the currently last index and the new index, new * conformers will be created to make sure all indexes have a valid * conformer. For example, if there is only one conformer and this * method is called with @p index 9, a total of nine conformers are * added (0 existed, 1-9 are created) and a pointer to the last one is * returned. * * @note Conformer atom positions are indexed by their unique id (Atom::id()). * Use conformerSize() to check the current size needed to accommodate all * atoms. * * @param index The index of the new conformer. * @return Pointer to the conformer added. */ std::vector * addConformer(unsigned int index); /** * @note Conformer atom positions are indexed by their unique id (Atom::id()). * Use conformerSize() to check the current size needed to accommodate all * atoms. * @param index The index of the conformer to retrieve. * @return Pointer to an existing conformer, or NULL if the index doesn't exist. */ std::vector * conformer(unsigned int index); /** * Get const reference to all conformers. * * @note Conformer atom positions are indexed by their unique id (Atom::id()). * Use conformerSize() to check the current size needed to accommodate all * atoms. */ const std::vector *>& conformers() const; /** * Change the conformer to the one at the specified index. Conformers are * indexed from 0 to numConformers() - 1. When the index is invalid (i.e. * >= numConformers()), this method returns false. * * @return True if the conformer index is valid. */ bool setConformer(unsigned int index); /** * Replace all conformers in the Molecule. This will first clear all * conformers. If the number of specified @p conformers is 0, this method * behaves like clearConformers(). In any case, the current conformer is * set to the first one (index 0). * * @note Conformer atom positions are indexed by their unique id (Atom::id()). * Use conformerSize() to check the current size needed to accommodate all * atoms. * * @param conformer A vector of conformers (vector of Vector3d) * @param deleteExisting Whether to free the memory from the existing conformers * @return True if successful (i.e. all conformers have the correct size: conformerSize()). */ bool setAllConformers(const std::vector< std::vector* > conformers, bool deleteExisting = true); /** * Clear all conformers from the molecule, leaving just conformer zero. This * conformer will also be set as current conformer. */ void clearConformers(); /** * @return The number of conformers. */ unsigned int numConformers() const; /** * @return The current conformer index. */ unsigned int currentConformer() const; /** * @return The energies for all conformers (in kJ/mol). */ const std::vector& energies() const; /** * Get the energy of the supplied conformer (in kJ/mol), defaults to returning the * energy of the current conformer. * @param index The conformer, defaults to the current conformer. * @return The energy of the Molecule (or current conformer). */ double energy(int index = -1) const; /** * Set the energy for the current conformer (in kJ/mol). * @param energy The value for this conformer */ void setEnergy(double energy); /** * Set the energy for the specified conformer (in kJ/mol). * @param index the index of the confomer * @param energy The energy for this conformer */ void setEnergy(int index, double energy); /** * Set the energies for all conformers (in kJ/mol). * @param energies The vector of all energy values */ void setEnergies(const std::vector& energies); /** * Remove all elements of the molecule. */ void clear(); /** * Provides locking, should be used before reading/writing to the Molecule. */ QReadWriteLock *lock() const; /** @name OpenBabel translation functions * These functions are used to exchange information with OpenBabel. * @{ */ /** * Get access to an OpenBabel::OBMol, this is a copy of the internal data * structure in OpenBabel form, you must call setOBMol in order to save * any changes you make to this object. */ OpenBabel::OBMol OBMol() const; /** * Copy as much data as possible from the supplied OpenBabel::OBMol to the * Avogadro Molecule object. */ bool setOBMol(OpenBabel::OBMol *obmol); /** * Get access to the OpenBabel unit cell, if any * @return the OBUnitCell or NULL if none exists */ OpenBabel::OBUnitCell *OBUnitCell() const; /** * Copy as much data as possible from the supplied OpenBabel::OBUnitCell * to this Avogadro Molecule object. * @return True if successful */ bool setOBUnitCell(OpenBabel::OBUnitCell *obunitcell); /** @} */ /** @name Molecule geometry information and manipulation * These functions can be used to retrieve several aspects of Molecule * geometry and to manipulate some aspects. * @{ */ /** * @return The position of the center of the Molecule. */ const Eigen::Vector3d center() const; /** * @return The normal vector of the Molecule. */ const Eigen::Vector3d normalVector() const; /** * @return The radius of the Molecule. */ double radius() const; /** * @return The Atom furthest away from the center of the Molecule. */ const Atom *farthestAtom() const; /** * Translate the Molecule using the supplied vector. */ void translate(const Eigen::Vector3d&); /** @} */ /** @name Operators * Overloaded operators. * @{ */ /** * Assignment operator used to set this Molecule equal to other. */ Molecule& operator=(const Molecule& other); /** * Addition operator used to add elements from the other Molecule to this * one. */ Molecule& operator+=(const Molecule& other); /** @} */ /** @name Misc. * Functions that don't neatly fit into the above categories. * @{ */ /** * Copy the atoms and bonds in the argument lists into new atoms and bonds * in @a this. * @param atoms Atoms to copy into @a this. * @param bonds Bonds to copy into @a this. * @return A PrimitiveList containing new atoms and bonds. * @note All atoms and bonds must belong to the same molecule. * @note All bonds in @bonds must be between atoms in @atoms. */ PrimitiveList copyAtomsAndBonds(const QList &atoms, const QList &bonds); /** * @overload * Copy the atoms and bonds in the argument lists into new atoms and bonds * in @a this. * @param atomsAndBonds Atoms and bonds to copy into @a this. * @return A PrimitiveList containing the new atoms and bonds. * @note All atoms and bonds must belong to the same molecule. * @note All bonds in the list must be between atoms in the list. * @note The QList overload of this function is faster. */ PrimitiveList copyAtomsAndBonds(const PrimitiveList &atomsAndBonds); /** @} */ protected: MoleculePrivate * const d_ptr; QString m_fileName; std::vector *m_atomPos; // Atom position vector /** Vector containing pointers to various conformers. **/ std::vector< std::vector* > m_atomConformers; mutable unsigned int m_currentConformer; mutable bool m_estimatedDipoleMoment; mutable Eigen::Vector3d *m_dipoleMoment; mutable bool m_invalidPartialCharges; mutable bool m_invalidAromaticity; Q_DECLARE_PRIVATE(Molecule) std::vector m_atoms; std::vector m_bonds; QList m_atomList; QList m_bondList; QReadWriteLock *m_lock; /** * Compute all the geometry information for the Molecule. This allows * several relatively expensive calculations to be cached by the Molecule * instead of being recalculated every time the Molecule is drawn. */ void computeGeomInfo() const; private: /** * Helper function for setting cached geometry information from the unit * unit cell. This is called as needed by Molecule::computeGeomInfo. */ void computeGeomInfoFromUnitCell() const; public Q_SLOTS: /** * Signal that the molecule has been changed in some large way, emits the * moleculeChanged and updated signals. This indicates that anything * listening to this signal should tear town its cache/model and rebuild it. */ void updateMolecule(); private Q_SLOTS: /** * Function which handles when a child primitive has been * updated. The response is to find the sender object * and then emit a signal passing the sender as a parameter. * @sa primitiveAdded * @sa primitiveUpdated * @sa primitiveRemoved */ void updatePrimitive(); /** * Slot that handles when an atom has been updated. * @sa atomAdded * @sa atomUpdated * @sa atomRemoved */ void updateAtom(); /** * Slot that handles when a bond has been updated. * @sa bondAdded * @sa bondUpdated * @sa bondRemoved */ void updateBond(); Q_SIGNALS: /** * Emitted when the Molecule changes in a big way, e.g. thousands of atoms * added/removed. Typically functions should respond by building up their * interpretation of the Molecule from the beginning. */ void moleculeChanged(); /** * Emitted when a child primitive is added. * @param primitive pointer to the primitive that was added */ void primitiveAdded(Primitive *primitive); /** * Emitted when a child primitive is updated. * @param primitive pointer to the primitive that was updated */ void primitiveUpdated(Primitive *primitive); /** * Emitted when a child primitive is removed. * @param primitive pointer to the primitive that was removed. */ void primitiveRemoved(Primitive *primitive); /** * Emitted when an Atom is added. * @param Atom pointer to the Atom that was added. */ void atomAdded(Atom *atom); /** * Emitted when an Atom is updated. * @param Atom pointer to the Atom that was updated. */ void atomUpdated(Atom *atom); /** * Emitted when an Atom is removed. * @param Atom pointer to the Atom that was removed. */ void atomRemoved(Atom *atom); /** * Emitted when a Bond is added. * @param Bond pointer to the bond that was added. */ void bondAdded(Bond *bond); /** * Emitted when a Bond is updated. * @param Bond pointer to the bond that was updated. */ void bondUpdated(Bond *bond); /** * Emitted when a Bond is removed. * @param Bond pointer to the Bond that was removed. */ void bondRemoved(Bond *bond); }; inline Atom * Molecule::atom(int index) const { if (index >= 0 && index < m_atomList.size()) return m_atomList[index]; else return 0; } inline Atom * Molecule::atomById(unsigned long id) const { if(id < m_atoms.size() && id != FALSE_ID) return m_atoms[id]; else return 0; } inline const Eigen::Vector3d * Molecule::atomPos(unsigned long id) const { if (id < m_atomPos->size() && id != FALSE_ID) return &(*m_atomPos)[id]; else return 0; } inline Bond * Molecule::bond(int index) const { if (index >= 0 && index < m_bondList.size()) return m_bondList[index]; else return 0; } inline Bond * Molecule::bondById(unsigned long id) const { if(id < m_bonds.size() && id != FALSE_ID) return m_bonds[id]; else return 0; } } // End namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/0000755000175000001440000000000012250371054016744 5ustar marcususersavogadro-1.1.1/libavogadro/src/tools/moveatomcommand.cpp0000644000175000001440000000515712250371054022646 0ustar marcususers/********************************************************************** MoveAtomCommand - Command class for moving atoms or fragments Copyright (C) 2007 by Marcus D. Hanwell Copyright (C) 2007,2011 by Geoffrey R. Hutchison Copyright (C) 2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "moveatomcommand.h" namespace Avogadro { MoveAtomCommand::MoveAtomCommand(Molecule *molecule, QUndoCommand *parent) : QUndoCommand(parent), m_molecule(0) { // Store the molecule - this call won't actually move an atom setText(QObject::tr("Manipulate Atom")); m_moleculeCopy = *molecule; m_molecule = molecule; undone = false; } MoveAtomCommand::MoveAtomCommand(Molecule *molecule, int type, QUndoCommand *parent) : QUndoCommand(parent), m_molecule(0) { // Store the original molecule before any modifications are made setText(QObject::tr("Manipulate Atom")); m_moleculeCopy = *molecule; m_molecule = molecule; m_type = type; undone = false; } void MoveAtomCommand::redo() { // Move the specified atom to the location given if (undone) { Molecule newMolecule = *m_molecule; *m_molecule = m_moleculeCopy; m_moleculeCopy = newMolecule; m_molecule->updateMolecule(); } QUndoCommand::redo(); } void MoveAtomCommand::undo() { // Restore our original molecule Molecule newMolecule = *m_molecule; *m_molecule = m_moleculeCopy; m_moleculeCopy = newMolecule; undone = true; m_molecule->updateMolecule(); } bool MoveAtomCommand::mergeWith (const QUndoCommand *) { // Just return true to repeated calls - we have stored the original molecule return true; } int MoveAtomCommand::id() const { return 26011980; } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/tools/zmatrixdialog.ui0000644000175000001440000000462512250371054022170 0ustar marcususers ZMatrixDialog 0 0 785 400 Z Matrix Editor Import Selected Atoms Qt::Horizontal 40 20 Add Atom Remove Atom Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() ZMatrixDialog accept() 248 254 157 274 buttonBox rejected() ZMatrixDialog reject() 316 260 286 274 avogadro-1.1.1/libavogadro/src/tools/align.png0000644000175000001440000000612112250371054020544 0ustar marcususersPNG  IHDR szz EiCCPICC ProfilexSgTS=BKKoR RBTi@숨"q"Ay((6T}7o9g}>F`DdJ<6.'w T @- m@n8P $ B2r22 t%[j;eOv$(S*@@&X`(ʑs`̔`)d` SGE3(xW\!Sd咔Tn!\]x87CP؄ ee3FvD9;:;8:|?E񋖴e /B_TBfgk+ m_ _׃  2r<[&q?.wL'bPGKĹi ˒$ IHk`~B[P. %w߂1w0hْ 4P6h>؀#;x̆P8XBHLC.,UP%BZF8-p<^0 o`A2DX6b"ֈ#Ef!~H0!H "ERd5R#U^9E.!==F~C>@٨jڡ\ Bh G h%ZBѳڋ>G03l0.Bx,c˱b6b#{";!0 $,",'̈́ Ba$nD>1B%+uc[!\H8Ri D:C!d6ٚA% ry;4:yBP)xR@\ RƩjTS5*.Qkmԫ8MfNEhhFyC+:nDw%JaEz=Ca1J~=+&ib3 z9c; _EBZY U| գWUGԨjfj<5rjjwY/i544D4i01VjYYlۜgK߱٣34545Ojr0qpns>Lћ=Ejkh4km8ndn4ר1͘klŸx$dI}S)4ti[3sf-fCZ||L OE57-I\t˝׬P+'Tj֨zu44ii50lmrlll9-/L6u}wϰ0ۡ7G+GcWLor ]3:B:;}rvq;7:$pesø܋DW'\߻9)܎n~}hLڙFY4xx>2yy z[zy~c#9[;vi{o?$L 10(pS_ȯvlvG#(2*IU<- 999-(yr`GryPGTԊ OR%y;mzh􉌘LJfbq4]ڑ#z-ںhT$Fg* Ki\˙S.7:hz4k]BX"\Ҿp骥}˼],OZ޾xEኁ+J_S}Ay1 W XPR$/}uuu맯߾sr}IERaofbC2]Ioot\<s--.zbFmmmMo*VOuw)y}׮zKv#swo}}9Fv~N~:],k@ Ç]FƽMpXy>t(h?8:V܌4/nmImmk9>x{{۱mDI͓eh OM?=vFvflŞ}> uzwq%K/s/\qu'u;w7_uzZ[̞S={M+=; wz˸~+?R{TXqϖ?7:zA?q)iŠ`Љak=x.{>>R/;^XW_FcG^_NVJ3^=~fm;wsw~08姶ANdNL` cHRMz%z%z%z%z%r2` pHYs  IDATXտKQ!%A!!@pLjD5ZJZ;8`41o9{M~ /*b/PD*-N66:"{:Bw RM̸]"-;羘4=]ed@@v-f0OW58oT~ZFQf/ihn&_C,gCWusHS;ڇfn,v Ax/H͝=Ctb_9Lk_"$c1ƾᦟRSN։g?BH1E< \>X8 bs ?9@'CUF>oCNxsd;fz\Dvb ;pgQMʘ +I"W|uYƚ7> g.`ܶK : x{pg?4@bwD ,][;r@\BXקw\y=x}muX&y9%Y[ׅCl ʨ|c PK}C {;w9M7QmVpy@QF?X_Dg9N"`nM4|0* (N"!R ۮ OT=4&?X@kuxrsݏLB_{70L!^AL+^ŠHW?2R|@ 1-\qw¾K CcrƦDqHZLBr铌DB߷+Y[BETYkʍ}y,xBD˟W "nD"Mb19Y75a/#IENDB`avogadro-1.1.1/libavogadro/src/tools/zmatrixmodel.h0000644000175000001440000000435512250371054021643 0ustar marcususers/********************************************************************** ZMatrixModel - ZMatrix Table Model Copyright (C) 2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ZMATRIXMODEL_H #define ZMATRIXMODEL_H #include #include namespace Avogadro { class ZMatrixModel : public QAbstractTableModel { Q_OBJECT public: ZMatrixModel(); ~ZMatrixModel(); void setZMatrix(ZMatrix *zmatrix); ZMatrix * zMatrix(); // Implementing virtual methods for the model int rowCount(const QModelIndex & parent = QModelIndex()) const; int columnCount(const QModelIndex & parent = QModelIndex()) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; Qt::ItemFlags flags(const QModelIndex &index) const; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()); bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()); private: ZMatrix *m_zMatrix; public Q_SLOTS: void addRow(int row); }; } // End namespace Avogadro #endif // ZMATRIXMODEL_H avogadro-1.1.1/libavogadro/src/tools/bondcentric.png0000644000175000001440000000127312250371054021747 0ustar marcususersPNG  IHDR szzbKGD pHYs  tIME:,olHIDATXOHTQ::Q. I8"D6BmZGg+]&ȕabElЦP5a0eVL3p9{љZ4|yn ^ T" L5` 4ᦀ ܼQ!`pJxF!*Ns~ [qSwə7H@8ypx-WM2Pof +N^ .ׁkf l1HElG:Q`d~a QpL< \}4SVL+ ZP Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef BONDCENTRICTOOL_H #define BONDCENTRICTOOL_H #include "skeletontree.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace Avogadro { /** * @class BondCentricTool * @brief Bond Centric Molecule Manipulation Tool * @author Shahzad Ali, Ross Braithwaite, James Bunt * * This class is a molecule manipulation system based on bond-centric * design as apposed to points in free space design. It is based off * the NavigationTool class by Marcus D. Hanwell. */ class BondCentricTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Bond Centric Manipulate", tr("Bond Centric Manipulate"), tr("Manipulation of bond lengths, angles, and torsions"), tr("Bond Centric Manipulate Settings")) public: //! Constructor BondCentricTool(QObject *parent = 0); //! Deconstructor virtual ~BondCentricTool(); //! \name Tool Methods //@{ //! \brief Callback methods for ui.actions on the canvas. virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *, QMouseEvent *) { return 0;} virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); //@} virtual int usefulness() const; virtual bool paint(GLWidget *widget); virtual QWidget *settingsWidget(); /** * Write the tool settings so that they can be saved between sessions. */ virtual void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the tool instance. */ virtual void readSettings(QSettings &settings); /** * Functnion to be called when the molecule is changed. * * @param previous The previous Molecule. * @param next The new Molecule. */ void setMolecule(Molecule* molecule); public Q_SLOTS: /** * Sets the snap-to angle to a given angle in degrees. * * @param newAngle The new value for the snap-to angle. */ void snapToAngleChanged(int newAngle); /** * Sets whether or not snap-to is enabled. * * @param state The state of the check box relating to whether or not * snap-to is enabled. * * Qt:Checked - enable snap-to. * Qt:Unchecked - disable snap-to. */ void snapToCheckBoxChanged(int state); /** * Sets whether or not to show angles. * * @param state The state of the check box relating to whether or not * to show angles. * * Qt:Checked - show angles. * Qt:Unchecked - don't show angles. */ void showAnglesChanged(int state); protected: Molecule * m_molecule; QWidget * m_settingsWidget; Atom * m_clickedAtom; Bond * m_clickedBond; Bond * m_selectedBond; SkeletonTree * m_skeleton; Eigen::Vector3d * m_referencePoint; Eigen::Vector3d * m_currentReference; Eigen::Vector3d * m_directionVector; bool m_snapped; ToolGroup * m_toolGroup; QUndoCommand * m_undo; // The current undo command bool m_leftButtonPressed; // rotation bool m_midButtonPressed; // scale / zoom bool m_rightButtonPressed; // translation bool m_movedSinceButtonPressed; bool m_showAngles; bool m_snapToEnabled; int m_snapToAngle; // In degrees QPoint m_lastDraggingPosition; QLabel * m_snapToAngleLabel; QLabel * m_spacer; QCheckBox * m_showAnglesBox; QCheckBox * m_snapToCheckBox; QSpinBox * m_snapToAngleBox; QGridLayout * m_layout; //! \name Construction Plane/Angles Methods //@{ //! \brief Methods used to construct and draw the angle-sectors, the construction plane, and the rotation-sphere /** * Checks whether a given atom is at either end of a given bond. * * @param atom The atom that is being examined for membership of the given bond. * @param bond The bond that is being examined to see if the given atom is * attached to it. * * @return True if the given atom is the begin or end atom of the given * bond, false otherwise, or if either of the pointers point to NULL. */ bool isAtomInBond(Atom *atom, Bond *bond); /** * Draws a sector that shows the angle between two lines from a given origin. * * @param widget The widget this angle-sector will be drawn on. * @param origin The origin around which this angle is being calculated. * @param direction1 A vector that defines the line from the given origin * through this point. * @param direction2 A vector that defines the line from the given origin * through this second point. */ void drawAngleSector(GLWidget *widget, Eigen::Vector3d origin, Eigen::Vector3d direction1, Eigen::Vector3d direction2, bool alternateAngle = false); /** * Draws sectors around a given atom representing the angles between neighbouring * atoms bonded with this atom. * * @param widget The widget the angle-sectors will be drawn on. * @param atom The atom whose angles are being drawn. */ void drawAtomAngles(GLWidget *widget, Atom *atom); /** * Draws sectors around a given atom representing the angles between neighbouring * atoms bonded with this atom and an atom bonded to this atom by a given bond. * * @param widget The widget the angle-sectors will be drawn on. * @param atom The atom whose angles are being drawn. * @param bond The bond attached to the given atom that will be used as a reference * point for all the angles. * * @pre The given atom must be either the begin or end atom of the given bond. */ void drawAngles(GLWidget *widget, Atom *atom, Bond *bond); /** * Draws sectors around the root Atom of a given SkeletonTree based on the root * Bond of the tree and whether or not adjacent Atoms form a part of the skeleton * or not. * * @param widget The widget the angle-sectors will be drawn on. * @param skeleton The SkeletonTree whose root Atom's angles are to be drawn. */ void drawSkeletonAngles(GLWidget *widget, SkeletonTree *skeleton); void drawDihedralAngle(GLWidget *widget, Atom *A, Atom *D, Bond *BC, bool alternateAngle = false); void drawDihedralAngles(GLWidget *widget, Atom *A, Bond *BC); void drawSingleDihedralAngles(GLWidget *widget, Atom *A, Bond *BC); /** * Calculates whether the manipulation plane is close enough to any atoms (that * are 1 bond away from either of the atoms attached to the given bond) to * 'snap-to' them. * * NOTE: Any atoms that lie along the same line as the bond are disregarded in * the calculations otherwise the plane would always try snap-to them as their * angle is 0. * * @param bond The bond through which the manipulation plane lies. * @param referencePoint The current reference point that defines the manipulation * plane. * @param maximumAngle The maximum angle between the current reference point * and any atom that determines whether or not the plane is * close enough to snap-to the atom. * * @return A vector representing the closest Atom to the manipulation plane, to * be used as the reference point for drawing the plane, if any atom is * close enough. If no atom is close enough to 'snap-to', NULL is * returned. */ Eigen::Vector3d* calculateSnapTo(Bond *bond, Eigen::Vector3d *referencePoint, double maximumAngle); /** * Draws a rectangle through a bond that can be used as a construction plane to * manipulate the bond itself, or the atoms at either end of the bond. * * @param widget The widget the rectangle will be drawn on. * @param bond The bond through which the rectangle will be drawn. * @param referencePoint A point orthagonal to the bond that defines the plane * the rectangle will be drawn on. * @param rgb An array of doubles representing the red/green/blue values of the * color for the rectangle. */ void drawManipulationRectangle(GLWidget *widget, Bond *bond, Eigen::Vector3d *referencePoint, double rgb[3]); void drawDihedralRectangle(GLWidget *widget, Bond *bond, Atom *atom, double rgb[3]); void drawDihedralRectanglesOfAtom(GLWidget *widget, Bond *bond, Atom *atom, double rgb[3]); /** * Draws a sphere of a given radius around a given vector. * * @param widget The widget the sphere will be drawn on. * @param center The center of the sphere. * @param radius The radius of the sphere. * @param alpha The alpha value that determines the opacity of the sphere. */ void drawSphere(GLWidget *widget, const Eigen::Vector3d ¢er, double radius, float alpha); //@} /** * Clears any data and frees up any memory that is used by the tool. This * procedure should be used when the tool is changed, the molecule cleared, * or the program exits etc. */ void clearData(); /** * Performs a rotation on a vector. * * @param angle The angle to rotate by in radians. * @param rotationVector The Vector3d to rotate around, must be a unit vector. * @param centerVector The Vector3d postion around which to rotate. * @param postionVector The Vector3d postion of the vector to rotate. * * @return A Vector3d with the final postion after the rotation is performed. * * @pre rotationVector must be a unit vector (of length 1). */ Eigen::Vector3d performRotation(double angle, Eigen::Vector3d rotationVector, Eigen::Vector3d centerVector, Eigen::Vector3d positionVector); private Q_SLOTS: /** * Function to be called when the tool is changed. * * @param tool True if our tool is selected. */ void toolChanged(bool checked); /** * Function to be called when a primitive is removed. * * @param primitive The primitive that was removed. */ void primitiveRemoved(Primitive* primitive); /** * Function to be called when the settings widget is destroyed. */ void settingsWidgetDestroyed(); }; /** * @class BondCentricMoveCommand * @brief An implementation of QUndoCommand used to undo bond centric manipulations. * @author Shahzad Ali, Ross Braithwaite, James Bunt * * This class is an implementation of QUndoCommand that can be used to allow * the two types of bond-centric manipulation to be undone. These two types * of manipulation are: * - Adjusting bond length. * - Adjusting bond angles. */ class BondCentricMoveCommand : public QUndoCommand { public: //!Constructor /** * Creates an undo command. * * @param molecule The molecule to store for undoing. * @param parent The parent undo command, or nothing. */ explicit BondCentricMoveCommand(Molecule *molecule, QUndoCommand *parent = 0); //!Constructor /** * Creates an undo command. * * @param molecule The molecule to store for undoing. * @param atom The atom that has been moved. * @param pos The new position of the atom. * @param parent The parent undo command or null. */ BondCentricMoveCommand(Molecule *molecule, Atom *atom, Eigen::Vector3d pos, QUndoCommand *parent = 0); /** * Redo move. */ void redo(); /** * Undo move */ void undo(); /** * returns if undo commands are merged together to one command. * * @param command undo command to merge * * @return false */ bool mergeWith(const QUndoCommand * command); /** * returns id of this undo command * * @return id of this undo command */ int id() const; private: Molecule m_moleculeCopy; Molecule *m_molecule; int m_atomIndex; Eigen::Vector3d m_pos; bool undone; }; class BondCentricToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(BondCentricTool) }; } // end namespace Avogadro #endif /*__BONDCENTRICTOOL_H*/ avogadro-1.1.1/libavogadro/src/tools/drawtool.h0000644000175000001440000001142412250371054020752 0ustar marcususers/********************************************************************** DrawTool - Tool for drawing molecules Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2007-2009 Marcus D. Hanwell Copyright (C) 2008 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef DRAWTOOL_H #define DRAWTOOL_H #include class QCheckBox; class QVBoxLayout; class QPushButton; class QComboBox; namespace OpenBabel { class OBForceField; } namespace Avogadro { class Atom; class Bond; class GLHit; class PeriodicTableView; class AddAtomCommand; class DrawTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Draw", tr("Draw"), tr("Draw and edit atoms and bonds"), tr("Draw Settings")) public: //! Constructor DrawTool(QObject *parent = 0); //! Deconstructor virtual ~DrawTool(); //! \name Tool Methods //@{ //! \brief Callback methods for ui.actions on the canvas. /*! Handle a mouse press (i.e., beginning of drawing) */ virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); /*! Handle a mouse release (i.e., the end of drawing) */ virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); /*! Handle a mouse move (perhaps drawing a bond) */ virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *, QMouseEvent *) { return 0; } /*! Handle a scroll wheel (i.e., zooming in and out of the canvas) */ virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual QUndoCommand* keyPressEvent(GLWidget *widget, QKeyEvent *event); //@} /** * Write the tool settings so that they can be saved between sessions. */ virtual void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the tool instance. */ virtual void readSettings(QSettings &settings); //! The priority of the tool in the toolbar virtual int usefulness() const; virtual QWidget *settingsWidget(); void setElement(int i); int element() const; int bondOrder() const; int addHydrogens() const; public Q_SLOTS: void setAddHydrogens( int state ); void elementChanged( int index ); void customElementChanged( int index ); void bondOrderChanged( int index ); void setBondOrder(int i); void clearKeyPressBuffer(); private: Qt::MouseButtons m_buttons; bool m_movedSinceButtonPressed; QPoint m_initialDraggingPosition; QPoint m_lastDraggingPosition; QString m_keyPressBuffer; bool m_beginAtomAdded; bool m_endAtomAdded; Atom *m_beginAtom; Atom *m_endAtom; int m_element; Bond *m_bond; int m_bondOrder; int m_prevAtomElement; Bond *m_prevBond; int m_prevBondOrder; bool m_addHydrogens; QUndoCommand *m_hydrogenCommand; QList m_hits; QComboBox *m_comboElements; QList m_elementsIndex; QComboBox *m_comboBondOrder; QCheckBox *m_addHydrogensCheck; QPushButton *m_tableButton; PeriodicTableView *m_periodicTable; QPushButton *m_fragmentButton; QVBoxLayout *m_layout; QWidget *m_settingsWidget; Atom *addAtom(GLWidget *widget, const QPoint& p); void moveAtom(GLWidget *widget, Atom *atom, const QPoint& p); Bond *addBond(Molecule *molecule, Atom *beginAtom, Atom *endAtom); OpenBabel::OBForceField *m_forceField; private Q_SLOTS: void settingsWidgetDestroyed(); }; class DrawToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(DrawTool) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/navigatetool.qrc0000644000175000001440000000014312250371054022145 0ustar marcususers navigate.png avogadro-1.1.1/libavogadro/src/tools/selectrotatetool.qrc0000644000175000001440000000013712250371054023050 0ustar marcususers select.png avogadro-1.1.1/libavogadro/src/tools/zmatrixdialog.cpp0000644000175000001440000000517712250371054022340 0ustar marcususers/********************************************************************** ZMatrixTool - ZMatrix Manipulation Tool for Avogadro Copyright (C) 2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "zmatrixdialog.h" #include "zmatrixmodel.h" #include #include namespace Avogadro { ZMatrixDialog::ZMatrixDialog(QWidget *parent, Qt::WindowFlags) : QDialog(parent), m_zMatrixModel(new ZMatrixModel), m_molecule(0) { setWindowFlags(Qt::Dialog | Qt::Tool); ui.setupUi(this); ui.tableView->setModel(m_zMatrixModel); QHeaderView *horizontal = ui.tableView->horizontalHeader(); horizontal->setResizeMode(QHeaderView::Stretch); QHeaderView *vertical = ui.tableView->verticalHeader(); vertical->setResizeMode(QHeaderView::Stretch); // Connect our signals and slots... connect(ui.addButton, SIGNAL(clicked()), this, SLOT(addAtom())); connect(ui.removeButton, SIGNAL(clicked()), this, SLOT(removeAtom())); } ZMatrixDialog::~ZMatrixDialog() { delete m_zMatrixModel; } void ZMatrixDialog::setMolecule(Molecule *molecule) { m_molecule = molecule; if (!m_molecule) return; if (m_molecule->zMatrix(0)) m_zMatrixModel->setZMatrix(m_molecule->zMatrix(0)); else { m_zMatrixModel->setZMatrix(m_molecule->addZMatrix()); } } void ZMatrixDialog::setGLWidget(GLWidget *widget) { m_glwidget = widget; } void ZMatrixDialog::addAtom() { m_zMatrixModel->insertRows(ui.tableView->currentIndex().row()+1, 1); } void ZMatrixDialog::removeAtom() { } void ZMatrixDialog::importSelectedAtoms() { // Only possible if we have a valid GLWidget to retrieve selected atoms from if (!m_glwidget) return; } } // End namespace Avogadro avogadro-1.1.1/libavogadro/src/tools/autorotatetool.qrc0000644000175000001440000000014712250371054022542 0ustar marcususers autorotate.png avogadro-1.1.1/libavogadro/src/tools/zmatrixmodel.cpp0000644000175000001440000001627212250371054022177 0ustar marcususers/********************************************************************** ZMatrixModel - ZMatrix Table Model Copyright (C) 2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "zmatrixmodel.h" #include #include #include namespace Avogadro { using OpenBabel::etab; ZMatrixModel::ZMatrixModel() : m_zMatrix(0) { } ZMatrixModel::~ZMatrixModel() { } void ZMatrixModel::setZMatrix(ZMatrix *zmatrix) { disconnect(m_zMatrix, 0, 0, 0); m_zMatrix = zmatrix; connect(m_zMatrix, SIGNAL(rowAdded(int)), this, SLOT(addRow(int))); qDebug() << "Set z matrix" << m_zMatrix; } ZMatrix * ZMatrixModel::zMatrix() { return m_zMatrix; } int ZMatrixModel::rowCount(const QModelIndex &) const { if (m_zMatrix) return m_zMatrix->rows(); else return 0; } int ZMatrixModel::columnCount(const QModelIndex &) const { return 7; } QVariant ZMatrixModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole) return QVariant(); if (orientation == Qt::Horizontal) { switch (section) { case 0: return QString(tr("Symbol")); break; case 1: case 3: case 5: return QVariant(); break; case 2: return QString(tr("Bond Length")); break; case 4: return QString(tr("Bond Angle")); break; case 6: return QString(tr("Dihedral Angle")); break; default: return QString(tr("Unknown")); } } else return QString::number(section + 1); } Qt::ItemFlags ZMatrixModel::flags(const QModelIndex &index) const { if (!index.isValid()) return Qt::ItemIsEnabled; if (index.row() == 0 && index.column() > 0) return Qt::NoItemFlags; else if (index.row() == 1 && index.column() > 2) return Qt::NoItemFlags; else if (index.row() == 2 && index.column() > 4) return Qt::NoItemFlags; return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } QVariant ZMatrixModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || !m_zMatrix) return QVariant(); // Disable editing in the cells that have no meaning if (!index.isValid()) return QVariant(); if (index.row() == 0 && index.column() > 0) return QVariant(); else if (index.row() == 1 && index.column() > 2) return QVariant(); else if (index.row() == 2 && index.column() > 4) return QVariant(); else if (index.row() >= m_zMatrix->rows() || index.column() >= 7) return QVariant(); if (role == Qt::DisplayRole) { // Main segment of the display - actually display the z matrix switch (index.column()) { case 0: // Element symbol return etab.GetSymbol(m_zMatrix->m_items[index.row()].atomicNumber); break; case 1: // Connectivity element 0 return m_zMatrix->m_items[index.row()].indices[0] + 1; break; case 2: // Bond length return m_zMatrix->m_items[index.row()].lengths[0]; break; case 3: // Connectivity element 1 return m_zMatrix->m_items[index.row()].indices[1] + 1; break; case 4: // Bond angle return m_zMatrix->m_items[index.row()].lengths[1]; break; case 5: // Connectivity element 2 return m_zMatrix->m_items[index.row()].indices[2] + 1; break; case 6: // Dihedral angle return m_zMatrix->m_items[index.row()].lengths[2]; break; default: // Should never happen! return QVariant(); } return QString("No worky!"); } else return QVariant(); } bool ZMatrixModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (!index.isValid() || !m_zMatrix) return false; if (index.row() >= m_zMatrix->rows() || index.column() > 6) return false; if (index.isValid() && role == Qt::EditRole) { int row = index.row(); // do stuff switch (index.column()) { case 0: {// Element symbol - take symbol and get number QByteArray element(value.toByteArray()); int aNum = etab.GetAtomicNum(element.data()); qDebug() << "Atomic num" << value << aNum; m_zMatrix->m_items[index.row()].atomicNumber = aNum; break; } case 1: {// Connectivity element 0 - bonding int connection = value.toInt() - 1; if (connection >= 0 && connection < row) m_zMatrix->setBond(index.row(), connection); break; } case 2: // Bond length if (value.toDouble() > 0.0) m_zMatrix->m_items[index.row()].lengths[0] = value.toDouble(); break; case 3: {// Connectivity element 1 int connection = value.toInt() - 1; if (connection >= 0 && connection < row) m_zMatrix->m_items[index.row()].indices[1] = connection; break; } case 4: // Bond angle m_zMatrix->m_items[index.row()].lengths[1] = value.toDouble(); break; case 5: {// Connectivity element 2 int connection = value.toInt() - 1; if (connection >= 0 && connection < row) m_zMatrix->m_items[index.row()].indices[2] = connection; break; } case 6: // Dihedral angle m_zMatrix->m_items[index.row()].lengths[2] = value.toDouble(); break; default: // Should never happen! return false; } m_zMatrix->update(); return true; } return false; } bool ZMatrixModel::insertRows(int position, int rows, const QModelIndex &index) { if (m_zMatrix) { for (int row = 0; row < rows; ++row) { // FIXME Currently just adding new rows to the end of the matrix m_zMatrix->addRow(); } return true; } return false; } bool ZMatrixModel::removeRows(int position, int rows, const QModelIndex &index) { return true; } void ZMatrixModel::addRow(int row) { beginInsertRows(QModelIndex(), row, row); endInsertRows(); } } // End namespace Avogadro avogadro-1.1.1/libavogadro/src/tools/clickmeasuretool.h0000644000175000001440000000645412250371054022473 0ustar marcususers/********************************************************************** ClickMeasureTool - ClickMeasureTool Tool for Avogadro Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef CLICKMEASURETOOL_H #define CLICKMEASURETOOL_H #include #include #include #include #include #include #include class QComboBox; class QVBoxLayout; namespace Avogadro { class ClickMeasureTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Measure", tr("Measure"), tr("Measure bond lengths, angles, and dihedrals"), tr("Measure Settings")) public: //! Constructor ClickMeasureTool(QObject *parent = 0); //! Destructor virtual ~ClickMeasureTool(); //! \name Tool Methods //@{ //! \brief Callback methods for ui.actions on the canvas. /*! */ virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *, QMouseEvent *) { return 0; } virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual bool paint(GLWidget *widget); private: /* * Calculates the relevant distances and angles and places them in member * variables. */ void calculateParameters(); Qt::MouseButtons m_buttons; bool m_movedSinceButtonPressed; QPoint m_initialDraggingPosition; QPoint m_lastDraggingPosition; QList > m_selectedAtoms; int m_numSelectedAtoms; QList m_hits; QComboBox *m_comboElements; QComboBox *m_comboBondOrder; QVBoxLayout *m_layout; Eigen::Vector3d m_vector[3]; double m_angle; double m_dihedral; // Need to store the previous values of all variables in order to only send // an event to the information pane once QVector m_lastMeasurement; }; class ClickMeasureToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(ClickMeasureTool) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/bondcentrictool.cpp0000644000175000001440000015120312250371054022642 0ustar marcususers/********************************************************************** BondCentricTool - Bond Centric Manipulation Tool for Avogadro Copyright (C) 2007 by Shahzad Ali Copyright (C) 2007 by Ross Braithwaite Copyright (C) 2007 by James Bunt Copyright (C) 2007,2008 by Marcus D. Hanwell Copyright (C) 2006,2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "bondcentrictool.h" #include #include #include #include #include #include #include #include #include #include using Eigen::Vector3d; namespace Avogadro { bool isNan(double x) { return x != x; } // ############################ BondCentricTool ################################ // ########## Constructor ########## BondCentricTool::BondCentricTool(QObject *parent) : Tool(parent), m_molecule(NULL), m_settingsWidget(NULL), m_clickedAtom(NULL), m_clickedBond(NULL), m_selectedBond(NULL), m_skeleton(NULL), m_referencePoint(NULL), m_currentReference(NULL), m_directionVector(NULL), m_snapped(false), m_toolGroup(NULL), m_leftButtonPressed(false), m_midButtonPressed(false), m_rightButtonPressed(false), m_movedSinceButtonPressed(false), m_showAngles(true), m_snapToEnabled(true), m_snapToAngle(10) { QAction *action = activateAction(); action->setIcon(QIcon(QString::fromUtf8(":/bondcentric/bondcentric.png"))); action->setToolTip(tr("Bond Centric Manipulation Tool\n\n" "Left Mouse: \tClick and drag to rotate the view.\n" "Middle Mouse: Click and drag to zoom in or out.\n" "Right Mouse: \tClick and drag to move the view.\n" "Double-Click: \tReset the view.\n\n" "Left Click & Drag on a Bond to set the Manipulation Plane:\n" "Left Click & Drag one of the Atoms in the Bond to change the angle\n" "Right Click & Drag one of the Atoms in the Bond to change the length")); //action->setShortcut(Qt::Key_F9); connect(action,SIGNAL(toggled(bool)),this,SLOT(toolChanged(bool))); } // ########## Destructor ########## BondCentricTool::~BondCentricTool() { delete m_referencePoint; m_referencePoint = NULL; delete m_currentReference; m_currentReference = NULL; delete m_directionVector; m_directionVector = NULL; if (m_settingsWidget) { m_snapToAngleLabel->deleteLater(); m_spacer->deleteLater(); m_showAnglesBox->deleteLater(); m_snapToCheckBox->deleteLater(); m_snapToAngleBox->deleteLater(); m_layout->deleteLater(); m_settingsWidget->deleteLater(); } } // ########## clearData ########## void BondCentricTool::clearData() { m_clickedAtom = NULL; m_clickedBond = NULL; m_selectedBond = NULL; delete m_referencePoint; m_referencePoint = NULL; delete m_currentReference; m_currentReference = NULL; delete m_directionVector; m_directionVector = NULL; m_toolGroup = NULL; m_leftButtonPressed = false; m_midButtonPressed = false; m_rightButtonPressed = false; m_movedSinceButtonPressed = false; m_snapped = false; } // ########## moleculeChanged ########## void BondCentricTool::setMolecule(Molecule* molecule) { if(m_molecule) { disconnect(m_molecule, 0 , this, 0); } if (molecule) { m_molecule = molecule; connect(molecule, SIGNAL(primitiveRemoved(Primitive*)), this, SLOT(primitiveRemoved(Primitive*))); } clearData(); } // ########## primitiveRemoved ########## void BondCentricTool::primitiveRemoved(Primitive *primitive) { if (primitive == m_clickedAtom || primitive == m_clickedBond || primitive == m_selectedBond) { clearData(); } } // ########## toolChanged ########## void BondCentricTool::toolChanged(bool checked) { if(!checked && m_molecule) { m_molecule->update(); clearData(); } } // ########## usefulness ########## int BondCentricTool::usefulness() const { return 2000000; } // ########## mousePress ########## QUndoCommand* BondCentricTool::mousePressEvent(GLWidget *widget, QMouseEvent *event) { m_undo = 0; event->accept(); Molecule *molecule = widget->molecule(); m_lastDraggingPosition = event->pos(); m_movedSinceButtonPressed = false; #ifdef Q_WS_MAC m_leftButtonPressed = (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::NoModifier); // On the Mac, either use a three-button mouse // or hold down the Shift key m_midButtonPressed = ((event->buttons() & Qt::MidButton) || (event->buttons() & Qt::LeftButton && event->modifiers() & Qt::ShiftModifier)); // Hold down the Command key (ControlModifier in Qt notation) for right button m_rightButtonPressed = ((event->buttons() & Qt::RightButton) || (event->buttons() & Qt::LeftButton && (event->modifiers() == Qt::ControlModifier || event->modifiers() == Qt::MetaModifier))); #else m_leftButtonPressed = (event->buttons() & Qt::LeftButton); m_midButtonPressed = (event->buttons() & Qt::MidButton); m_rightButtonPressed = (event->buttons() & Qt::RightButton); #endif m_clickedAtom = NULL; m_clickedBond = NULL; unsigned long oldName = m_selectedBond ? m_selectedBond->index() : FALSE_ID; // Check if the mouse clicked on any Atoms or Bonds. Primitive *clickedPrim = widget->computeClickedPrimitive(event->pos()); if (clickedPrim && clickedPrim->type() == Primitive::AtomType) { // Atom clicked on. m_clickedAtom = (Atom*)clickedPrim; if ((m_rightButtonPressed || m_leftButtonPressed) && isAtomInBond(m_clickedAtom, m_selectedBond)) { //Create an undo instance for this manipulation m_undo = new BondCentricMoveCommand(widget->molecule()); // Populate the skeleton in preparation to alter the angle or length of the bond. m_skeleton = new SkeletonTree(); m_skeleton->populate(m_clickedAtom, m_selectedBond, widget->molecule()); if (m_leftButtonPressed) { // If the bond is to be rotated, save off a vector used in the calculation. // If the vector is calculated every mouse movement it causes the molecule to // jitter, saving it now prevents this. Atom *otherAtom; if (m_clickedAtom == molecule->atomById(m_selectedBond->beginAtomId())) otherAtom = molecule->atomById(m_selectedBond->endAtomId()); else otherAtom = molecule->atomById(m_selectedBond->beginAtomId()); Vector3d centerProj = widget->camera()->project(*otherAtom->pos()); centerProj -= Vector3d(0,0,centerProj.z()); Vector3d clickedProj = widget->camera()->project(*m_clickedAtom->pos()); clickedProj -= Vector3d(0,0,clickedProj.z()); if ((clickedProj - centerProj).norm() == 0) { // Have no way of testing this as the chance of this happening is almost 0 m_directionVector = new Vector3d(1, 0, 0); } else { m_directionVector = new Vector3d(clickedProj - centerProj); *m_directionVector = m_directionVector->normalized(); } } } else if (m_selectedBond) { // Check if one of the atoms one bond away from the selected bond has // been clicked on in preparation to alter dihedral angles. Atom *dihedralRotCen = NULL; Bond *skeleBond = NULL; Atom *beginAtom = molecule->atomById(m_selectedBond->beginAtomId()); Atom *endAtom = molecule->atomById(m_selectedBond->endAtomId()); // Check which atom in the selected bond the atom being manipulated will // be rotated around to change its dihedral angle. if ((skeleBond = molecule->bond(m_clickedAtom, beginAtom))) dihedralRotCen = beginAtom; else if ((skeleBond = molecule->bond(m_clickedAtom, endAtom))) dihedralRotCen = endAtom; bool skeletonSet = false; if (m_rightButtonPressed && skeleBond) { //Create an undo instance for this manipulation m_undo = new BondCentricMoveCommand(widget->molecule()); // Populate the skeleton in preparation to alter the dihedral angle of the // clicked atom. m_skeleton = new SkeletonTree(); m_skeleton->populate(m_clickedAtom, skeleBond, widget->molecule()); skeletonSet = true; } else if (m_leftButtonPressed && dihedralRotCen) { //Create an undo instance for this manipulation m_undo = new BondCentricMoveCommand(widget->molecule()); // Populate the skeleton in preparation to alter the dihedral angle of all // the atoms bonded to this end of the bond (essentially twisting this end // of the bond). m_skeleton = new SkeletonTree(); m_skeleton->populate(dihedralRotCen, m_selectedBond, widget->molecule()); skeletonSet = true; } if (skeletonSet) { // If the dihedral angle is to be changed, save off a vector used in the // calculation. If the vector is calculated every mouse movement it causes // the molecule to jitter, saving it now prevents this. Vector3d centerProj = widget->camera()->project(*dihedralRotCen->pos()); centerProj -= Vector3d(0,0,centerProj.z()); Vector3d clickedProj = widget->camera()->project(*m_clickedAtom->pos()); clickedProj -= Vector3d(0,0,clickedProj.z()); if ((clickedProj - centerProj).norm() < 1.0e-5) { // Have no way of testing this as the chance of this happening is almost 0 m_directionVector = new Vector3d(1, 0, 0); } else { m_directionVector = new Vector3d(clickedProj - centerProj); *m_directionVector = m_directionVector->normalized(); } } } } else if (clickedPrim && clickedPrim->type() == Primitive::BondType) { // Bond clicked on. m_clickedBond = static_cast(clickedPrim); // If the Bond was clicked on with the left mouse button, set it as the // currently selected bond and reset the reference point (if the Bond has // changed). if (m_leftButtonPressed) { m_selectedBond = m_clickedBond; if (m_selectedBond->index() != oldName) { delete m_referencePoint; m_referencePoint = NULL; delete m_currentReference; m_currentReference = NULL; m_snapped = false; Atom *leftAtom = molecule->atomById(m_selectedBond->beginAtomId()); Atom *rightAtom = molecule->atomById(m_selectedBond->endAtomId()); Vector3d left = *leftAtom->pos(); Vector3d right = *rightAtom->pos(); Vector3d leftToRight = right - left; Vector3d x = Vector3d(1, 0, 0); Vector3d y = Vector3d(0, 1, 0); Vector3d A = leftToRight.cross(x); Vector3d B = leftToRight.cross(y); m_referencePoint = A.norm() >= B.norm() ? new Vector3d(A) : new Vector3d(B); *m_referencePoint = m_referencePoint->normalized(); Vector3d *reference = calculateSnapTo(m_selectedBond, m_referencePoint, m_snapToAngle); if (reference && m_snapToEnabled) { m_snapped = true; m_currentReference = reference; *m_currentReference = m_currentReference->normalized(); } else { m_currentReference = new Vector3d(*m_referencePoint); } } } } widget->update(); return 0; } // ########## mouseRelease ########## QUndoCommand* BondCentricTool::mouseReleaseEvent(GLWidget *widget, QMouseEvent *event) { event->accept(); delete m_directionVector; m_directionVector = NULL; if (!m_clickedAtom && !m_clickedBond && !m_movedSinceButtonPressed) { delete m_referencePoint; m_referencePoint = NULL; delete m_currentReference; m_currentReference = NULL; m_snapped = false; m_selectedBond = NULL; } else if (!m_movedSinceButtonPressed) { m_undo = 0; } if (m_skeleton) { delete m_skeleton; m_skeleton = NULL; } m_leftButtonPressed = false; m_midButtonPressed = false; m_rightButtonPressed = false; m_clickedAtom = NULL; m_clickedBond = NULL; widget->update(); return m_undo; } // ########## mouseMove ########## QUndoCommand* BondCentricTool::mouseMoveEvent(GLWidget *widget, QMouseEvent *event) { if (!m_molecule) { return 0; } event->accept(); Molecule *molecule = widget->molecule(); QPoint deltaDragging = event->pos() - m_lastDraggingPosition; if (deltaDragging.manhattanLength() > 2) { m_movedSinceButtonPressed = true; } // Mouse navigation has two modes - atom centred when an atom is clicked // and scene if no atom has been clicked. #ifdef Q_WS_MAC if (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::NoModifier) #else if (event->buttons() & Qt::LeftButton) #endif { if (m_clickedBond && m_selectedBond && m_referencePoint) { Atom *beginAtom = molecule->atomById(m_selectedBond->beginAtomId()); Atom *endAtom = molecule->atomById(m_selectedBond->endAtomId()); Vector3d rotationVector = *endAtom->pos() - *beginAtom->pos(); rotationVector = rotationVector / rotationVector.norm(); Vector3d begin = widget->camera()->project(*beginAtom->pos()); Vector3d end = widget->camera()->project(*endAtom->pos()); Vector3d zAxis = Vector3d(0, 0, 1); Vector3d beginToEnd = end - begin; beginToEnd -= Vector3d(0, 0, beginToEnd.z()); Vector3d direction = zAxis.cross(beginToEnd); direction = direction / direction.norm(); Vector3d mouseMoved = Vector3d(deltaDragging.x(), deltaDragging.y(), 0); double magnitude = mouseMoved.dot(direction) / direction.norm(); *m_referencePoint = performRotation(magnitude * (M_PI / 180.0), rotationVector, Vector3d(0, 0, 0), *m_referencePoint); Vector3d *reference = calculateSnapTo(m_selectedBond, m_referencePoint, m_snapToAngle); if (reference && m_snapToEnabled) { m_snapped = true; delete m_currentReference; m_currentReference = reference; *m_currentReference = m_currentReference->normalized(); } else { m_snapped = false; delete m_currentReference; m_currentReference = new Vector3d(*m_referencePoint); } } else if (isAtomInBond(m_clickedAtom, m_selectedBond)) { //Do atom rotation. Atom *otherAtom; if (m_clickedAtom == molecule->atomById(m_selectedBond->beginAtomId())) otherAtom = molecule->atomById(m_selectedBond->endAtomId()); else otherAtom = molecule->atomById(m_selectedBond->beginAtomId()); Vector3d center = *otherAtom->pos(); Vector3d clicked = *m_clickedAtom->pos(); Vector3d centerProj = widget->camera()->project(center); centerProj -= Vector3d(0,0,centerProj.z()); Vector3d referenceProj = widget->camera()->project(*m_currentReference + center); referenceProj -= Vector3d(0,0,referenceProj.z()); Vector3d referenceVector = referenceProj - centerProj; referenceVector = referenceVector.normalized(); Vector3d rotationVector = referenceVector.cross(*m_directionVector); rotationVector = rotationVector.normalized(); Vector3d currMouseVector = Vector3d(event->pos().x(), event->pos().y(), 0) - centerProj; if(currMouseVector.norm() > 5) { currMouseVector = currMouseVector.normalized(); double mouseAngle = acos(m_directionVector->dot(currMouseVector) / currMouseVector.squaredNorm()); if(mouseAngle > 0) { Vector3d tester; tester = performRotation(mouseAngle, rotationVector, Vector3d(0, 0, 0), *m_directionVector); double testAngle1 = acos(tester.dot(currMouseVector) / currMouseVector.squaredNorm()); tester = performRotation(-mouseAngle, rotationVector, Vector3d(0, 0, 0), *m_directionVector); double testAngle2 = acos(tester.dot(currMouseVector) / currMouseVector.squaredNorm()); if(testAngle1 > testAngle2 || isNan((double)testAngle2)) { mouseAngle = -mouseAngle; } Vector3d direction = clicked - center; if (m_skeleton) { Vector3d currCrossDir = m_currentReference->cross(direction).normalized(); m_skeleton->skeletonRotate(mouseAngle, currCrossDir, center); *m_referencePoint = performRotation(mouseAngle, currCrossDir, Vector3d(0, 0, 0), *m_referencePoint); *m_currentReference = performRotation(mouseAngle, currCrossDir, Vector3d(0, 0, 0), *m_currentReference); *m_directionVector = performRotation(mouseAngle, rotationVector, Vector3d(0, 0, 0), *m_directionVector); } } } } else if (m_selectedBond && m_clickedAtom && (molecule->bond(m_clickedAtom->id(), m_selectedBond->beginAtomId()) || molecule->bond(m_clickedAtom->id(), m_selectedBond->endAtomId()))) { // Do multiple dihedral rotation (twising of the bond). Atom *beginAtom = molecule->atomById(m_selectedBond->beginAtomId()); Atom *endAtom = molecule->atomById(m_selectedBond->endAtomId()); Vector3d center; Vector3d other; if (molecule->bond(m_clickedAtom, beginAtom)) { center = *beginAtom->pos(); other = *endAtom->pos(); } else { center = *endAtom->pos(); other = *beginAtom->pos(); } Vector3d clicked = *m_clickedAtom->pos(); Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other).z() >= (widget->camera()->modelview() * center).z() ? -1 : 1)); Vector3d centerProj = widget->camera()->project(center); centerProj -= Vector3d(0,0,centerProj.z()); Vector3d currMouseVector = Vector3d(event->pos().x(), event->pos().y(), 0) - centerProj; if(currMouseVector.norm() > 5) { currMouseVector = currMouseVector.normalized(); double mouseAngle = acos(m_directionVector->dot(currMouseVector) / currMouseVector.squaredNorm()); if(mouseAngle > 0) { Vector3d tester; tester = performRotation(mouseAngle, axis, Vector3d(0, 0, 0), *m_directionVector); double testAngle1 = acos(tester.dot(currMouseVector) / currMouseVector.squaredNorm()); tester = performRotation(-mouseAngle, axis, Vector3d(0, 0, 0), *m_directionVector); double testAngle2 = acos(tester.dot(currMouseVector) / currMouseVector.squaredNorm()); if(testAngle1 > testAngle2 || isNan((double)testAngle2)) { mouseAngle = -mouseAngle; } if (m_skeleton) { *m_directionVector = performRotation(mouseAngle, axis, Vector3d(0, 0, 0), *m_directionVector); axis = (other - center).normalized(); m_skeleton->skeletonRotate(mouseAngle, axis, center); } } } } } else if ((event->buttons() & Qt::RightButton) || (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::ControlModifier)) { if (isAtomInBond(m_clickedAtom, m_selectedBond)) { // Adjust the length of the bond following the mouse movement. Atom *otherAtom; if (m_clickedAtom == molecule->atomById(m_selectedBond->beginAtomId())) otherAtom = molecule->atomById(m_selectedBond->endAtomId()); else otherAtom = molecule->atomById(m_selectedBond->beginAtomId()); Vector3d clicked = *m_clickedAtom->pos(); Vector3d other = *otherAtom->pos(); Vector3d direction = clicked - other; Vector3d mouseLast = widget->camera()->unProject(m_lastDraggingPosition); Vector3d mouseCurr = widget->camera()->unProject(event->pos()); Vector3d mouseDir = mouseCurr - mouseLast; Vector3d component = mouseDir.dot(direction) / direction.squaredNorm() * direction; if (m_skeleton) { m_skeleton->skeletonTranslate(component); } } else if (m_selectedBond && m_clickedAtom && (molecule->bond(m_clickedAtom->id(), m_selectedBond->beginAtomId()) || molecule->bond(m_clickedAtom->id(), m_selectedBond->endAtomId()))) { // Do dihedral angle manipulation of the clicked atom. Atom *beginAtom = molecule->atomById(m_selectedBond->beginAtomId()); Atom *endAtom = molecule->atomById(m_selectedBond->endAtomId()); Vector3d center; Vector3d other; if (molecule->bond(m_clickedAtom, beginAtom)) { center = *beginAtom->pos(); other = *endAtom->pos(); } else { center = *endAtom->pos(); other = *beginAtom->pos(); } Vector3d clicked = *m_clickedAtom->pos(); Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other).z() >= (widget->camera()->modelview() * center).z() ? -1 : 1)); Vector3d centerProj = widget->camera()->project(center); centerProj -= Vector3d(0,0,centerProj.z()); Vector3d currMouseVector = Vector3d(event->pos().x(), event->pos().y(), 0) - centerProj; if(currMouseVector.norm() > 5) { currMouseVector = currMouseVector.normalized(); double mouseAngle = acos(m_directionVector->dot(currMouseVector) / currMouseVector.squaredNorm()); if(mouseAngle > 0) { Vector3d tester; tester = performRotation(mouseAngle, axis, Vector3d(0, 0, 0), *m_directionVector); double testAngle1 = acos(tester.dot(currMouseVector) / currMouseVector.squaredNorm()); tester = performRotation(-mouseAngle, axis, Vector3d(0, 0, 0), *m_directionVector); double testAngle2 = acos(tester.dot(currMouseVector) / currMouseVector.squaredNorm()); if(testAngle1 > testAngle2 || isNan((double)testAngle2)) { mouseAngle = -mouseAngle; } if (m_skeleton) { *m_directionVector = performRotation(mouseAngle, axis, Vector3d(0, 0, 0), *m_directionVector); axis = (other - center).normalized(); m_skeleton->skeletonRotate(mouseAngle, axis, center); } } } } } m_lastDraggingPosition = event->pos(); m_molecule->update(); return 0; } // ########## wheel ########## QUndoCommand* BondCentricTool::wheelEvent(GLWidget *widget, QWheelEvent *event) { Q_UNUSED(widget); Q_UNUSED(event); return 0; } // ########## paint ########## bool BondCentricTool::paint(GLWidget *widget) { if(widget->toolGroup()->activeTool() != this) { clearData(); } Molecule *molecule = widget->molecule(); bool dihedralAtomClicked = false; // Draw the dihedral angles and rectangles if they apply. if ((m_leftButtonPressed || m_rightButtonPressed) && m_clickedAtom && m_selectedBond && !isAtomInBond(m_clickedAtom, m_selectedBond)) { Atom *begin = molecule->atomById(m_selectedBond->beginAtomId()); Atom *end = molecule->atomById(m_selectedBond->endAtomId()); if (molecule->bond(m_clickedAtom, begin) || molecule->bond(m_clickedAtom, end)) { dihedralAtomClicked = true; if (m_rightButtonPressed) { drawSingleDihedralAngles(widget, m_clickedAtom, m_selectedBond); } else { drawDihedralAngles(widget, m_clickedAtom, m_selectedBond); } } } // The small yellow sphere that resembles the center of the molecule during rotation. if (!dihedralAtomClicked && ((m_leftButtonPressed && !m_clickedBond && !isAtomInBond(m_clickedAtom, m_selectedBond)) || (m_midButtonPressed && !m_clickedBond && !m_clickedAtom) || (m_rightButtonPressed && !isAtomInBond(m_clickedAtom, m_selectedBond)))) { drawSphere(widget, widget->center(), 0.10, 1.0); } // If a single atom was clicked on, display the angles around it. if (!dihedralAtomClicked && m_leftButtonPressed && m_clickedAtom && (!m_selectedBond || !isAtomInBond(m_clickedAtom, m_selectedBond))) { drawAtomAngles(widget, m_clickedAtom); } // Draw the manipulation rectangle and relative angles. if (m_selectedBond && !dihedralAtomClicked) { Atom *begin = molecule->atomById(m_selectedBond->beginAtomId()); Atom *end = molecule->atomById(m_selectedBond->endAtomId()); if (m_currentReference) { // Draw bond length text. QString length = tr("Bond Length: %L1", "%L1 is the length of the bond") .arg(m_selectedBond->length(), 0, 'f', 2) + QString::fromUtf8(" Å"); glColor4f(1.0, 1.0, 1.0, 1.0); widget->painter()->setColor(1.0, 1.0, 1.0, 1.0); widget->painter()->drawText(QPoint(5, widget->height() - 25), length); if (m_rightButtonPressed && (m_clickedAtom == begin || m_clickedAtom == end)) { drawSkeletonAngles(widget, m_skeleton); } else { if (m_showAngles && !dihedralAtomClicked) { // Draw the angles around the two atoms. if (!m_clickedAtom || m_rightButtonPressed || m_midButtonPressed || (m_leftButtonPressed && begin != m_clickedAtom)) { drawAngles(widget, begin, m_selectedBond); } if (!m_clickedAtom || m_rightButtonPressed || m_midButtonPressed || (m_leftButtonPressed && end != m_clickedAtom)) { drawAngles(widget, end, m_selectedBond); } } else { // Draw the angles around the two atoms. if (m_leftButtonPressed && end == m_clickedAtom) { drawAngles(widget, begin, m_selectedBond); } if (m_leftButtonPressed && begin == m_clickedAtom) { drawAngles(widget, end, m_selectedBond); } } if (m_clickedAtom && m_leftButtonPressed && isAtomInBond(m_clickedAtom, m_selectedBond)) { drawSkeletonAngles(widget, m_skeleton); } } // Draw the manipulation rectangle. if (m_snapped && m_snapToEnabled) { double rgb[3] = {1.0, 1.0, 0.2}; drawManipulationRectangle(widget, m_selectedBond, m_currentReference, rgb); } else { double rgb[3] = {0.0, 0.2, 0.8}; drawManipulationRectangle(widget, m_selectedBond, m_currentReference, rgb); } } } return true; } // ########## isAtomInBond ########## bool BondCentricTool::isAtomInBond(Atom *atom, Bond *bond) { if (!atom || !bond) { return false; } if (atom->id() == bond->beginAtomId() || atom->id() == bond->endAtomId()) return true; else return false; } // ########## drawAngleSector ########## void BondCentricTool::drawAngleSector(GLWidget *widget, Vector3d origin, Vector3d direction1, Vector3d direction2, bool alternateAngle) { // Get vectors representing the lines from centre to left and centre to right. Vector3d u = direction1 - origin; Vector3d v = direction2 - origin; // Calculate the length of the vectors (half the length of the shortest vector.) double radius = qMin(u.norm(), v.norm()) * 0.5; double lineWidth = 1.5; // Adjust the length of u and v to the length calculated above. u = (u / u.norm()) * radius; v = (v / v.norm()) * radius; // Angle between u and v. double uvAngle = acos(u.dot(v) / v.squaredNorm()) * 180.0 / M_PI; // If angle is less than 1 (will be approximated to 0), attempting to draw // will crash, so return. if (fabs(uvAngle) <= 1) { return; } if (alternateAngle) { uvAngle = 360.0 - (uvAngle > 0 ? uvAngle : -uvAngle); } // Vector perpindicular to both u and v. Vector3d n = u.cross(v); Vector3d x = Vector3d(1, 0, 0); Vector3d y = Vector3d(0, 1, 0); if (n.norm() < 1e-16) { Vector3d A = u.cross(x); Vector3d B = u.cross(y); n = A.norm() >= B.norm() ? A : B; } n = n / n.norm(); Vector3d point = performRotation((uvAngle / 2 * (M_PI / 180.0)), n, Vector3d(0, 0, 0), alternateAngle ? v : u); QString angle = QString("%L1").arg(uvAngle, 0, 'f', 1) + QString::fromUtf8("°"); glColor4f(1.0, 1.0, 1.0, 1.0); widget->painter()->setColor(1.0, 1.0, 1.0, 1.0); widget->painter()->drawText(point + origin, angle); glEnable(GL_BLEND); widget->painter()->setColor(0, 0.5, 0, 0.4); glDepthMask(GL_FALSE); widget->painter()->drawShadedSector(origin, direction1, direction2, radius, alternateAngle); glDepthMask(GL_TRUE); glDisable(GL_BLEND); widget->painter()->setColor(1.0, 1.0, 1.0, 1.0); widget->painter()->drawArc(origin, direction1, direction2, radius, lineWidth, alternateAngle); } // ########## drawAtomAngles ########## void BondCentricTool::drawAtomAngles(GLWidget *widget, Atom *atom) { if (!atom || !widget) { return; } QList neighbors = atom->neighbors(); if (neighbors.size() > 1) { Atom *u = 0; Atom *v = 0; foreach (unsigned long a, neighbors) { v = m_molecule->atomById(a); if (u) drawAngleSector(widget, *atom->pos(), *u->pos(), *v->pos()); u = v; } } } // ########## drawAngles ########## void BondCentricTool::drawAngles(GLWidget *widget, Atom *atom, Bond *bond) { if (!atom || !bond || !widget || !isAtomInBond(atom, bond)) { return; } Atom *ref = NULL; if (atom == bond->beginAtom()) ref = bond->endAtom(); else if (atom == bond->endAtom()) ref = bond->beginAtom(); else return; Atom *v = 0; QList neighbors = atom->neighbors(); foreach (unsigned long a, neighbors) { v = m_molecule->atomById(a); if (v == ref) continue; drawAngleSector(widget, *atom->pos(), *ref->pos(), *v->pos()); } } // ########## drawSkeletonAngles ########## void BondCentricTool::drawSkeletonAngles(GLWidget *widget, SkeletonTree *skeleton) { if (!skeleton || !widget) { return; } Atom *atom = skeleton->rootAtom(); Bond *bond = skeleton->rootBond(); drawAngles(widget, atom, bond); } // ########## drawDihedralAngle ########## // Dihedral angle between atoms A & D for the four atoms A-B-C-D void BondCentricTool::drawDihedralAngle(GLWidget *widget, Atom *A, Atom *D, Bond *BC, bool alternateAngle) { if (!A || !D || !BC || !widget) { return; } Atom *B = BC->beginAtom(); Atom *C = BC->endAtom(); if (!A->bond(B) || !D->bond(C)) { B = BC->endAtom(); C = BC->beginAtom(); if (!A->bond(B) || !D->bond(C)) { return; } } Vector3d BCVec = *C->pos() - *B->pos(); Vector3d BAVec = *A->pos() - *B->pos(); Vector3d CDVec = *D->pos() - *C->pos(); Vector3d tmp = BAVec.cross(BCVec); BAVec = BCVec.cross(tmp); tmp = CDVec.cross(BCVec); CDVec = BCVec.cross(tmp); Vector3d mid = *B->pos() + (BCVec.normalized() * (BCVec.norm() / 2)); BAVec = BAVec.normalized() * 1.5; CDVec = CDVec.normalized() * 1.5; Vector3d a = mid + BAVec; Vector3d d = mid + CDVec; //TODO: radius = qMin(BAVec.norm(), CDVec.norm()) * 0.5; // if (BAVec.norm() == CDVec.norm()) // radius = BAVec.norm() / 2; drawAngleSector(widget, mid, a, d, alternateAngle); } // ########## drawDihedralAngles ########## void BondCentricTool::drawDihedralAngles(GLWidget *widget, Atom *A, Bond *BC) { if (!widget || !A || !BC) { return; } Atom *B = BC->beginAtom(); Atom *C = BC->endAtom(); if (!A->bond(B)) { B = BC->endAtom(); C = BC->beginAtom(); if (!A->bond(B)) { return; } } double minTorsion = 0.0; double maxTorsion = 0.0; double minNegTorsion = 0.0; double maxNegTorsion = 0.0; Atom *minTorsAtom = NULL; Atom *maxTorsAtom = NULL; Atom *minNegTorsAtom = NULL; Atom *maxNegTorsAtom = NULL; QList neighbors = C->neighbors(); Atom *D = 0; foreach (unsigned long a, neighbors) { D = m_molecule->atomById(a); if (D == B) continue; /// FIXME Implement this for torsions... //double torsion = mol->GetTorsion(A, B, C, D); double torsion = 0.0; if (torsion == 0.0) continue; if (torsion < 0.0) { if (minNegTorsion == 0.0 || torsion > minNegTorsion) { minNegTorsion = torsion; minNegTorsAtom = D; } if (torsion < maxNegTorsion) { maxNegTorsion = torsion; maxNegTorsAtom = D; } } else { if (minTorsion == 0.0 || torsion < minTorsion) { minTorsion = torsion; minTorsAtom = D; } if (torsion > maxTorsion) { maxTorsion = torsion; maxTorsAtom = D; } } } double rgb[3] = {1.0, 1.0, 0.2}; drawDihedralRectangle(widget, BC, A, rgb); // One positive, one negative angle. if (minNegTorsion && minTorsion) { drawDihedralRectangle(widget, BC, minTorsAtom, rgb); drawDihedralRectangle(widget, BC, minNegTorsAtom, rgb); drawDihedralAngle(widget, A, minTorsAtom, BC); drawDihedralAngle(widget, A, minNegTorsAtom, BC); } // Only positive angle(s). else if (minTorsion) { drawDihedralRectangle(widget, BC, minTorsAtom, rgb); if (minTorsAtom != maxTorsAtom) { drawDihedralRectangle(widget, BC, maxTorsAtom, rgb); } drawDihedralAngle(widget, A, minTorsAtom, BC); drawDihedralAngle(widget, A, maxTorsAtom, BC, true); } // Only negative angle(s). else if (minNegTorsion) { drawDihedralRectangle(widget, BC, minNegTorsAtom, rgb); if (minNegTorsAtom != maxNegTorsAtom) { drawDihedralRectangle(widget, BC, maxNegTorsAtom, rgb); } drawDihedralAngle(widget, A, minNegTorsAtom, BC); drawDihedralAngle(widget, A, maxNegTorsAtom, BC, true); } } // ########## drawSingleDihedralAngles ########## void BondCentricTool::drawSingleDihedralAngles(GLWidget *widget, Atom *A, Bond *BC) { if (!widget || !A || !BC) { return; } Atom *B = BC->beginAtom(); Atom *C = BC->endAtom(); if (!A->bond(B)) { B = BC->endAtom(); C = BC->beginAtom(); if (!A->bond(B)) { return; } } double minTorsion = 0.0; double maxTorsion = 0.0; double minNegTorsion = 0.0; double maxNegTorsion = 0.0; Atom *minTorsAtom = NULL; Atom *maxTorsAtom = NULL; Atom *minNegTorsAtom = NULL; Atom *maxNegTorsAtom = NULL; QList neighbors = C->neighbors(); Atom *D = 0; foreach (unsigned long a, neighbors) { D = m_molecule->atomById(a); if (D == B) continue; /// FIXME Implement this to get the torsion... // double torsion = mol->GetTorsion(A, B, C, D); double torsion = 0.0; if (torsion == 0.0) continue; if (torsion < 0.0) { if (minNegTorsion == 0.0 || torsion > minNegTorsion) { minNegTorsion = torsion; minNegTorsAtom = D; } if (torsion < maxNegTorsion) { maxNegTorsion = torsion; maxNegTorsAtom = D; } } else { if (minTorsion == 0.0 || torsion < minTorsion) { minTorsion = torsion; minTorsAtom = D; } if (torsion > maxTorsion) { maxTorsion = torsion; maxTorsAtom = D; } } } double rgb[3] = {1.0, 1.0, 0.2}; drawDihedralRectangle(widget, BC, A, rgb); // One positive, one negative angle. if (minNegTorsion && minTorsion) { drawDihedralRectangle(widget, BC, minTorsAtom, rgb); drawDihedralRectangle(widget, BC, minNegTorsAtom, rgb); drawDihedralAngle(widget, A, minTorsAtom, BC); drawDihedralAngle(widget, A, minNegTorsAtom, BC); } // Only positive angle(s). else if (minTorsion) { drawDihedralRectangle(widget, BC, minTorsAtom, rgb); if (minTorsAtom != maxTorsAtom) { drawDihedralRectangle(widget, BC, maxTorsAtom, rgb); } drawDihedralAngle(widget, A, minTorsAtom, BC); drawDihedralAngle(widget, A, maxTorsAtom, BC, true); } // Only negative angle(s). else if (minNegTorsion) { drawDihedralRectangle(widget, BC, minNegTorsAtom, rgb); if (minNegTorsAtom != maxNegTorsAtom) { drawDihedralRectangle(widget, BC, maxNegTorsAtom, rgb); } drawDihedralAngle(widget, A, minNegTorsAtom, BC); drawDihedralAngle(widget, A, maxNegTorsAtom, BC, true); } neighbors = B->neighbors(); Atom *u = 0; Atom *v = 0; foreach (unsigned long a, neighbors) { v = m_molecule->atomById(a); if (v == C) continue; if (u) drawAngleSector(widget, *B->pos(), *u->pos(), *v->pos()); u = v; } } // ########## calcualteSnapTo ########## Vector3d* BondCentricTool::calculateSnapTo(Bond *bond, Vector3d *referencePoint, double maximumAngle) { if(!referencePoint || !bond ) { return NULL; } double angle = -1; Vector3d *smallestRef = NULL; Atom *b = bond->beginAtom(); Atom *e = bond->endAtom(); Atom *t = 0; Vector3d begin = *b->pos(); Vector3d end = *e->pos(); Vector3d target; QList neighbors = b->neighbors(); foreach (unsigned long a, neighbors) { t = m_molecule->atomById(a); if (t == e) continue; target = *t->pos(); Vector3d u = end - begin; Vector3d v = target - begin; double tAngle = acos(u.dot(v) / (v.norm() * u.norm())) * 180.0 / M_PI; if(!(tAngle > 1 && tAngle < 179)) { continue; } Vector3d orth1 = u.cross(v); Vector3d orth2 = referencePoint->cross(u); tAngle = acos(orth1.dot(orth2) / (orth1.norm() * orth2.norm())) * 180.0 / M_PI; tAngle = tAngle > 90 ? 180 - tAngle : tAngle; if(angle < 0) { angle = tAngle; smallestRef = new Vector3d(v); } else if(tAngle < angle) { angle = tAngle; delete smallestRef; smallestRef = new Vector3d(v); } } neighbors = e->neighbors(); foreach (unsigned long a, neighbors) { t = m_molecule->atomById(a); if (t == b) continue; target = *t->pos(); Vector3d u = begin - end; Vector3d v = target - end; double tAngle = acos(u.dot(v) / (v.norm() * u.norm())) * 180.0 / M_PI; if(!(tAngle > 1 && tAngle < 179)) { continue; } Vector3d orth1 = u.cross(v); Vector3d orth2 = referencePoint->cross(u); tAngle = acos(orth1.dot(orth2) / (orth1.norm() * orth2.norm())) * 180.0 / M_PI; tAngle = tAngle > 90 ? 180 - tAngle : tAngle; if(angle < 0) { angle = tAngle; smallestRef = new Vector3d(v); } else if(tAngle < angle) { angle = tAngle; delete smallestRef; smallestRef = new Vector3d(v); } } if (angle > maximumAngle) { if (smallestRef) { delete smallestRef; } return NULL; } return smallestRef; } // ########## drawManipulationRectangle ########## void BondCentricTool::drawManipulationRectangle(GLWidget *widget, Bond *bond, Vector3d *referencePoint, double rgb[3]) { if (!bond || !widget || !referencePoint) { return; } Atom *leftAtom = bond->beginAtom(); Atom *rightAtom = bond->endAtom(); Vector3d left = *leftAtom->pos(); Vector3d right = *rightAtom->pos(); Vector3d leftToRight = right - left; Vector3d vec = leftToRight.cross(*referencePoint); Vector3d planeVec = vec.cross(leftToRight); double length = 1; planeVec = length * (planeVec / planeVec.norm()); Vector3d topLeft = widget->camera()->modelview() * (left + planeVec); Vector3d topRight = widget->camera()->modelview() * (right + planeVec); Vector3d botRight = widget->camera()->modelview() * (right - planeVec); Vector3d botLeft = widget->camera()->modelview() * (left - planeVec); float alpha = 0.4; double lineWidth = 1.5; glEnable(GL_BLEND); widget->painter()->setColor(rgb[0], rgb[1], rgb[2], alpha); glDepthMask(GL_FALSE); widget->painter()->drawShadedQuadrilateral(topLeft, topRight, botRight, botLeft); glDepthMask(GL_TRUE); glDisable(GL_BLEND); widget->painter()->setColor(1.0, 1.0, 1.0, 1.0); widget->painter()->drawQuadrilateral(topLeft, topRight, botRight, botLeft, lineWidth); } // ########## drawDihedralRectangle ########## void BondCentricTool::drawDihedralRectangle(GLWidget *widget, Bond *bond, Atom *atom, double rgb[3]) { if (!bond || !widget || !atom) { return; } Atom *leftAtom = bond->beginAtom(); Atom *rightAtom = bond->endAtom(); if (!atom->bond(rightAtom)) { leftAtom = rightAtom; rightAtom = bond->beginAtom(); } Vector3d left = *leftAtom->pos(); Vector3d right = *rightAtom->pos(); Vector3d leftToRight = right - left; Vector3d A = left + (leftToRight.normalized() * (leftToRight.norm() / 2)); Vector3d rightToAtom = *atom->pos() - *rightAtom->pos(); Vector3d B = right + rightToAtom.dot(leftToRight) / leftToRight.norm() * leftToRight.normalized(); Vector3d C; Vector3d D; // Clicked atom is in front of the middle of the bond. if ((B-left).norm() < (A-left).norm()) { C = *atom->pos() + (right - B); B = right; D = C - (B - A); } // Clicked atom is in front of the end of the bond. else if ((B-A).norm() < (right-A).norm()) { C = *atom->pos() + (right - B); B = right; D = C - (B - A); } else { C = *atom->pos(); D = C - (B - A); } double minHeight = 2; double minWidth = 3; // Rectangle is too short. if ((C-B).norm() < minHeight) { C = B + ((C-B).normalized() * minHeight); D = A + ((D-A).normalized() * minHeight); } // Rectangle is too thin. if ((B-A).norm() < minWidth) { B = A + ((B-A).normalized() * minWidth); C = D + ((C-D).normalized() * minWidth); } Vector3d topLeft = widget->camera()->modelview() * D; Vector3d topRight = widget->camera()->modelview() * C; Vector3d botRight = widget->camera()->modelview() * B; Vector3d botLeft = widget->camera()->modelview() * A; float alpha = 0.4; double lineWidth = 1.5; glEnable(GL_BLEND); widget->painter()->setColor(rgb[0], rgb[1], rgb[2], alpha); glDepthMask(GL_FALSE); widget->painter()->drawShadedQuadrilateral(topLeft, topRight, botRight, botLeft); glDepthMask(GL_TRUE); glDisable(GL_BLEND); widget->painter()->setColor(1.0, 1.0, 1.0, 1.0); widget->painter()->drawQuadrilateral(topLeft, topRight, botRight, botLeft, lineWidth); } // ########## drawDihedralRectanglesOfAtom ########## void BondCentricTool::drawDihedralRectanglesOfAtom(GLWidget *widget, Bond *bond, Atom *atom, double rgb[3]) { if (!bond || !widget || !atom || !isAtomInBond(atom, bond)) { return; } Atom *other = NULL; if (atom == bond->beginAtom()) other = bond->endAtom(); else if (atom == bond->endAtom()) other = bond->beginAtom(); else return; foreach (unsigned long a, atom->neighbors()) { Atom *atom = m_molecule->atomById(a); if (atom == other) continue; drawDihedralRectangle(widget, bond, atom, rgb); } } // ########## drawSphere ########## void BondCentricTool::drawSphere(GLWidget *widget, const Vector3d &position, double radius, float alpha ) { glEnable(GL_BLEND); widget->painter()->setColor(1.0, 1.0, 0.3, alpha); widget->painter()->drawSphere(&position, radius); glDisable(GL_BLEND); } // ########## performRotation ########## Vector3d BondCentricTool::performRotation(double angle, Vector3d rotationVector, Vector3d centerVector, Vector3d positionVector) { //Rotate skeleton around a particular axis and center point Eigen::Transform3d rotation; rotation = Eigen::AngleAxisd(angle, rotationVector); rotation.pretranslate(centerVector); rotation.translate(-centerVector); return rotation*positionVector; } // ########## showAnglesChanged ########## void BondCentricTool::showAnglesChanged(int state) { m_showAngles = state == Qt::Checked ? true : false; if (m_molecule) { m_molecule->update(); } } // ########## snapToCheckBoxChanged ########## void BondCentricTool::snapToCheckBoxChanged(int state) { m_snapToEnabled = state == Qt::Checked ? true : false; m_snapToAngleBox->setEnabled(m_snapToEnabled); if(!m_selectedBond) { return; } Vector3d *reference = calculateSnapTo(m_selectedBond, m_referencePoint, m_snapToAngle); if (reference && m_snapToEnabled) { m_snapped = true; delete m_currentReference; m_currentReference = reference; *m_currentReference = m_currentReference->normalized(); } else { m_snapped = false; delete m_currentReference; m_currentReference = new Vector3d(*m_referencePoint); } if (m_molecule) { m_molecule->update(); } } // ########## snapToAngleChanged ########## void BondCentricTool::snapToAngleChanged(int newAngle) { m_snapToAngle = newAngle; if(!m_selectedBond) { return; } Vector3d *reference = calculateSnapTo(m_selectedBond, m_referencePoint, m_snapToAngle); if (reference && m_snapToEnabled) { m_snapped = true; delete m_currentReference; m_currentReference = reference; *m_currentReference = m_currentReference->normalized(); } else { m_snapped = false; delete m_currentReference; m_currentReference = new Vector3d(*m_referencePoint); } if (m_molecule) { m_molecule->update(); } } // ########## settingsWidget ########## QWidget *BondCentricTool::settingsWidget() { if (!m_settingsWidget) { m_settingsWidget = new QWidget; m_showAnglesBox = new QCheckBox(tr(" Show Angles"), m_settingsWidget); m_showAnglesBox->setCheckState(m_showAngles ? Qt::Checked : Qt::Unchecked); m_snapToCheckBox = new QCheckBox(tr(" Snap-to Bonds"), m_settingsWidget); m_snapToCheckBox->setCheckState(m_snapToEnabled ? Qt::Checked : Qt::Unchecked); m_snapToAngleLabel = new QLabel(tr("Snap-to Threshold: ")); m_snapToAngleLabel->setScaledContents(false); m_snapToAngleLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_snapToAngleLabel->setMaximumHeight(20); m_snapToAngleBox = new QSpinBox(m_settingsWidget); m_snapToAngleBox->setRange(0, 90); m_snapToAngleBox->setSingleStep(1); m_snapToAngleBox->setValue(m_snapToAngle); m_snapToAngleBox->setSuffix(QString::fromUtf8("°")); m_snapToAngleBox->setEnabled(m_snapToEnabled); m_layout = new QGridLayout(); m_layout->addWidget(m_showAnglesBox, 0, 0); m_layout->addWidget(m_snapToCheckBox, 1, 0); m_layout->addWidget(m_snapToAngleLabel, 2, 0); m_layout->addWidget(m_snapToAngleBox, 2, 1); QVBoxLayout* tmp = new QVBoxLayout; tmp->addLayout(m_layout); tmp->addStretch(1); connect(m_showAnglesBox, SIGNAL(stateChanged(int)), this, SLOT(showAnglesChanged(int))); connect(m_snapToCheckBox, SIGNAL(stateChanged(int)), this, SLOT(snapToCheckBoxChanged(int))); connect(m_snapToAngleBox, SIGNAL(valueChanged(int)), this, SLOT(snapToAngleChanged(int))); m_settingsWidget->setLayout(tmp); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); } return m_settingsWidget; } // ########## settingsWidgetDestroyed ########## void BondCentricTool::settingsWidgetDestroyed() { m_settingsWidget = 0; } // ######################### BondCentricMoveCommand ########################## // ########## Constructor ########## BondCentricMoveCommand::BondCentricMoveCommand(Molecule *molecule, QUndoCommand *parent) : QUndoCommand(parent), m_molecule(0) { // Store the molecule - this call won't actually move an atom setText(QObject::tr("Bond Centric Manipulation")); m_moleculeCopy = *molecule; m_molecule = molecule; m_atomIndex = 0; undone = false; } // ########## Constructor ########## BondCentricMoveCommand::BondCentricMoveCommand(Molecule *molecule, Atom *atom, Vector3d pos, QUndoCommand *parent) : QUndoCommand(parent), m_molecule(0) { // Store the original molecule before any modifications are made setText(QObject::tr("Bond Centric Manipulation")); m_moleculeCopy = *molecule; m_molecule = molecule; m_atomIndex = atom->index(); m_pos = pos; undone = false; } // ########## redo ########## void BondCentricMoveCommand::redo() { // Move the specified atom to the location given if (undone) { Molecule newMolecule = *m_molecule; *m_molecule = m_moleculeCopy; m_moleculeCopy = newMolecule; } else if (m_atomIndex) { Atom *atom = m_molecule->atom(m_atomIndex); atom->setPos(m_pos); atom->update(); } QUndoCommand::redo(); } // ########## undo ########## void BondCentricMoveCommand::undo() { // Restore our original molecule Molecule newMolecule = *m_molecule; *m_molecule = m_moleculeCopy; m_moleculeCopy = newMolecule; undone = true; } // ########## mergeWith ########## bool BondCentricMoveCommand::mergeWith (const QUndoCommand *) { return false; } // ########## id ########## int BondCentricMoveCommand::id() const { //changed from 26011980[manipulatetool] return 26011981; } void BondCentricTool::writeSettings(QSettings &settings) const { Tool::writeSettings(settings); settings.setValue("showAngles", m_showAnglesBox->checkState()); settings.setValue("snapTo", m_snapToCheckBox->checkState()); settings.setValue("snapToAngle", m_snapToAngleBox->value()); } void BondCentricTool::readSettings(QSettings &settings) { Tool::readSettings(settings); if(m_showAnglesBox) { m_showAnglesBox->setCheckState((Qt::CheckState)settings.value("showAngles", 2).toInt()); } if(m_snapToCheckBox) { m_snapToCheckBox->setCheckState((Qt::CheckState)settings.value("snapTo", 2).toInt()); } if(m_snapToAngleBox) { m_snapToAngleBox->setValue(settings.value("snapToAngle", 10).toInt()); } } } Q_EXPORT_PLUGIN2(bondcentrictool, Avogadro::BondCentricToolFactory) avogadro-1.1.1/libavogadro/src/tools/navigatetool.h0000644000175000001440000001162512250371054021616 0ustar marcususers/********************************************************************** NavigateTool - Navigation Tool for Avogadro Copyright (C) 2007-2009 by Marcus D. Hanwell Copyright (C) 2006,2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef NAVIGATETOOL_H #define NAVIGATETOOL_H #include #include #include #include namespace Avogadro { /** * @class NavigateTool * @brief Navigation tool for moving the camera around the molecule. * @author Marcus D. Hanwell * * This class implements navigation of the camera around the molecule being * displayed. It attempts to do this in the most intuitive way possible * offering both atom centric (if an atom has been clicked on) and scene * centric (if no atom has been clicked on) navigation. */ class Eyecandy; class NavigateSettingsWidget; class NavigateTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Navigate", tr("Navigate"), tr("Translate, rotate, and zoom around the current view"), tr("Navigate Settings")) public: /** * Constructor. */ NavigateTool(QObject *parent = 0); /** * Destructor. */ virtual ~NavigateTool(); /** * @return the settings widget for the tool. */ virtual QWidget* settingsWidget(); /** \name Tool Methods * @{ * @brief Callback methods for ui.actions on the canvas. */ virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual QUndoCommand* keyPressEvent(GLWidget *widget, QKeyEvent *event); virtual QUndoCommand* keyReleaseEvent(GLWidget *widget, QKeyEvent *event); //@} /** * @return the relative usefulness of the tool - affects the order in which * the tools are displayed. */ virtual int usefulness() const; /** * The paint method of the tool which is used to paint any tool specific * visuals to the GLWidget. */ virtual bool paint(GLWidget *widget); /** * Write the tool settings so that they can be saved between sessions. */ virtual void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the tool instance. */ virtual void readSettings(QSettings &settings); private slots: /** * Change whether eye candy/visual cues are displayed. */ void enableEyeCandy(int enable); protected: QPointer m_clickedAtom; Eigen::Vector3d m_referencePoint; // the reference point for movement // i.e the center of the clicked atom, // or of the visible part of the molecule bool m_leftButtonPressed; // rotation bool m_midButtonPressed; // scale / zoom bool m_rightButtonPressed; // translation bool m_eyeCandyEnabled; // Is eye candy enabled? bool m_drawEyeCandy; // Should eye candy be drawn? double m_yAngleEyecandy, m_xAngleEyecandy; QPoint m_lastDraggingPosition; bool m_draggingInitialized; // Has dragging been initialized? Eyecandy * m_eyecandy; NavigateSettingsWidget *m_settingsWidget; /** recomputes m_referencePoint. Uses the value of m_clickedAtom. */ void computeReferencePoint(GLWidget *widget); }; /** * @class NavigateToolFactory navigatetool.h * @brief Factory class to create instances of the NavigateTool class. */ class NavigateToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(NavigateTool) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/manipulate.png0000644000175000001440000000617212250371054021617 0ustar marcususersPNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڬ1n@Ep H'0-PGxAGXlRvv % @b|grĭCUYZ+ ֪^U]Ue!n[zWE17y_<Uku=3˲TcL:4Xk3Xki+8V*,RUUQ@Wm;NW`u46"]׍2ov]u](9\M)m"r)ps*Bc.v(zs~8Bt{j 5Ge>9́h4>1mL%u8fsinG{P|urIL9,˲9 }ZSo\e@Goի_z}+"-?xCwn9=]']J|O2$کaliuh-^Ie[ IW2m? ܖ5̮P3*W%dE9g)C\pX_nk2+з Ggk0˾FBMsw˫&Ds/f\0~3-|>i(ihokn&(,˖ܐwo/WMNFn>% j1.~wG 9lӮKxoh2 Jy<ؙ914;ˀ9ƪ҆=`=<'\S2|s{۩><5nQ锅b]U<9p8 v ;ЖSBr\4V ¿Y([z#'_lݙVwGqHJx>a8 ! # ]ДJ%xhݫV nمB~Gzr/D8ڷAz{">d2h2 yUOEjZ7>~, XɁRZKӕZ4ɁG4㝻^*4*kw&`:Y,\.H'ӧU_>yV&.?0 o;˗k.=3t1#2,MwV3OK:1=ٯhw.|=O^~ >ScD|z>QMU}Aϝ\Z7I ςz5DZ#wIENDB`avogadro-1.1.1/libavogadro/src/tools/drawtool.qrc0000644000175000001440000000013312250371054021303 0ustar marcususers draw.png avogadro-1.1.1/libavogadro/src/tools/zmatrix.png0000644000175000001440000000563612250371054021162 0ustar marcususersPNG  IHDR szz pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx;0DWa C0SH B!֍:IϨ;;Ǝ$f3suxp w!`IN2yTf/%[%# %Wnx k3lBCY-*d Pd(bG?@e|o= `t K?IENDB`avogadro-1.1.1/libavogadro/src/tools/manipulatetool.qrc0000644000175000001440000000014712250371054022512 0ustar marcususers manipulate.png avogadro-1.1.1/libavogadro/src/tools/autoopttool.h0000644000175000001440000001363612250371054021517 0ustar marcususers/********************************************************************** AutoOptTool - Automatic Optimization Tool for Avogadro Copyright (C) 2007,2008 by Marcus D. Hanwell Copyright (C) 2007 by Geoffrey R. Hutchison Copyright (C) 2007 by Benoit Jacob Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef AUTOOPTTOOL_H #define AUTOOPTTOOL_H #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Avogadro { class AutoOptThread : public QThread { Q_OBJECT public: AutoOptThread(QObject *parent=0); void setup(Molecule *molecule, OpenBabel::OBForceField* forceField, int algorithm, /* int convergence, */ int steps); void run(); void update(); Q_SIGNALS: void finished(bool calculated); void setupDone(); void setupFailed(); void setupSucces(); public Q_SLOTS: void stop(); private: Molecule *m_molecule; OpenBabel::OBForceField * m_forceField; bool m_velocities; int m_algorithm; //double m_convergence; int m_steps; bool m_stop; QMutex m_mutex; }; /** * @class AutoOptTool * @brief Automatic Optimization Tool * @author Marcus D. Hanwell * * This tool enables the manipulation of the position of * the selected atoms while the optimiser is running. */ class AutoOptTool : public Tool { Q_OBJECT AVOGADRO_TOOL("AutoOptimization", tr("AutoOptimization"), tr("Automatic optimization of molecular geometry"), tr("AutoOptimization Settings")) public: //! Constructor AutoOptTool(QObject *parent = 0); //! Deconstructor virtual ~AutoOptTool(); //! \name Tool Methods //@{ //! \brief Callback methods for ui.actions on the canvas. /*! */ virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual int usefulness() const; virtual bool paint(GLWidget *widget); virtual QWidget* settingsWidget(); /** * Write the tool settings so that they can be saved between sessions. */ virtual void writeSettings(QSettings &settings) const; /** * Read in the settings that have been saved for the tool instance. */ virtual void readSettings(QSettings &settings); public Q_SLOTS: void finished(bool calculated); void setupDone(); void setupFailed(); void setupSucces(); void toggle(); void enable(); void disable(); void abort(); protected: GLWidget * m_glwidget; Atom * m_clickedAtom; bool m_leftButtonPressed; // rotation bool m_midButtonPressed; // scale / zoom bool m_rightButtonPressed; // translation bool m_running; bool m_block; bool m_setupFailed; int m_timerId; ToolGroup * m_toolGroup; QWidget* m_settingsWidget; Eigen::Vector3d m_selectedPrimitivesCenter; // centroid of selected atoms OpenBabel::OBForceField* m_forceField; AutoOptThread * m_thread; std::vector m_forceFieldList; QComboBox* m_comboFF; QComboBox* m_comboAlgorithm; //QSpinBox* m_convergenceSpinBox; QSpinBox* m_stepsSpinBox; QPushButton* m_buttonStartStop; QCheckBox* m_fixedMovable; QCheckBox* m_ignoredMovable; QPoint m_lastDraggingPosition; double m_lastEnergy; void timerEvent(QTimerEvent* event); void translate(GLWidget *widget, const Eigen::Vector3d &what, const QPoint &from, const QPoint &to) const; private Q_SLOTS: void settingsWidgetDestroyed(); }; class AutoOptCommand : public QUndoCommand { public: AutoOptCommand(Molecule *molecule, AutoOptTool *tool, QUndoCommand *parent = 0); void redo(); void undo(); bool mergeWith ( const QUndoCommand * command ); int id() const; private: Molecule m_moleculeCopy; Molecule *m_molecule; AutoOptTool *m_tool; bool undone; }; class AutoOptToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(AutoOptTool) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/select.png0000644000175000001440000000040112250371054020724 0ustar marcususersPNG  IHDR ɨu pHYs  tRNS7X}#tEXtSoftwareGraphicConverter (PowerPC)srIDATx 4od2r4| ,**,D;/,I7Aԍ%@& ;?^TzB~mWWԡ֡7Z 2A{ IENDB`avogadro-1.1.1/libavogadro/src/tools/autoopttool.cpp0000644000175000001440000004554712250371054022060 0ustar marcususers/********************************************************************** AutoOptTool - Automatic Optimization Tool for Avogadro Copyright (C) 2007,2008 by Marcus D. Hanwell Copyright (C) 2007 by Geoffrey R. Hutchison Copyright (C) 2007 by Benoit Jacob Copyright (C) 2008 by Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "autoopttool.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; using namespace Eigen; namespace Avogadro { AutoOptTool::AutoOptTool(QObject *parent) : Tool(parent), m_clickedAtom(0), m_leftButtonPressed(false), m_midButtonPressed(false), m_rightButtonPressed(false), m_running(false), m_block(false), m_setupFailed(false), m_timerId(0) ,m_toolGroup(0), m_settingsWidget(0), m_thread(0), m_lastEnergy(0.0) { QAction *action = activateAction(); action->setIcon(QIcon(QString::fromUtf8(":/autoopttool/autoopttool.png"))); action->setToolTip(tr("Auto Optimization Tool\n\n" "Navigation Functions when clicking in empty space.\n" "Left Mouse: \tRotate Space\n" "Middle Mouse: Zoom Space\n" "Right Mouse: \tMove Space\n" "Double-Click: \t Reset View\n\n" "When running:\n" "Left Mouse: \tClick and drag atoms to move them.")); // An OBConverison object must be instantiated before the // FindForceField call will work. OBConversion conv; Q_UNUSED(conv); m_forceField = OBForceField::FindForceField( "UFF" ); // Check that the force field exists and was initialised OK if (!m_forceField) { // We can't do anything is the force field cannot be found - OB issue emit setupFailed(); return; } m_thread = new AutoOptThread; connect(m_thread, SIGNAL(finished(bool)), this, SLOT(finished(bool))); connect(m_thread, SIGNAL(setupDone()), this, SLOT(setupDone())); connect(m_thread, SIGNAL(setupFailed()), this, SLOT(setupFailed())); connect(m_thread, SIGNAL(setupSucces()), this, SLOT(setupSucces())); OBPlugin::ListAsVector("forcefields", "ids", m_forceFieldList); //action->setShortcut(Qt::Key_F10); } AutoOptTool::~AutoOptTool() { if (m_thread) { m_thread->exit(); m_thread->wait(); delete m_thread; m_thread = 0; } if (m_settingsWidget) m_settingsWidget->deleteLater(); } int AutoOptTool::usefulness() const { return 10; } void AutoOptTool::translate(GLWidget *widget, const Eigen::Vector3d &what, const QPoint &from, const QPoint &to) const { // Translate the selected atoms in the x and y sense of the view Vector3d fromPos = widget->camera()->unProject(from, what); Vector3d toPos = widget->camera()->unProject(to, what); Vector3d atomTranslation = toPos - fromPos; if (widget->selectedPrimitives().size()) { foreach(Primitive *p, widget->selectedPrimitives()) { if (p->type() == Primitive::AtomType) { Atom *a = static_cast(p); a->setPos(atomTranslation + *a->pos()); a->update(); } } } if (m_clickedAtom) { m_clickedAtom->setPos(atomTranslation + *m_clickedAtom->pos()); m_clickedAtom->update(); } } QUndoCommand* AutoOptTool::mousePressEvent(GLWidget *widget, QMouseEvent *event) { m_glwidget = widget; m_lastDraggingPosition = event->pos(); m_leftButtonPressed = (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::NoModifier); // On the Mac, either use a three-button mouse // or hold down the Shift key m_midButtonPressed = ((event->buttons() & Qt::MidButton) || (event->buttons() & Qt::LeftButton && event->modifiers() & Qt::ShiftModifier)); // Hold down the Command key (ControlModifier in Qt notation) for right button m_rightButtonPressed = ((event->buttons() & Qt::RightButton) || (event->buttons() & Qt::LeftButton && (event->modifiers() == Qt::ControlModifier || event->modifiers() == Qt::MetaModifier))); m_clickedAtom = widget->computeClickedAtom(event->pos()); if(m_clickedAtom != 0 && m_leftButtonPressed && m_running) { event->accept(); if (m_forceField->GetConstraints().IsIgnored(m_clickedAtom->index()+1) && !m_ignoredMovable->isChecked()) { m_clickedAtom = 0; } else if (m_forceField->GetConstraints().IsFixed(m_clickedAtom->index()+1) && !m_fixedMovable->isChecked()) { m_clickedAtom = 0; } if (m_clickedAtom) m_forceField->SetFixAtom(m_clickedAtom->index()+1); } widget->update(); return 0; } QUndoCommand* AutoOptTool::mouseReleaseEvent(GLWidget *widget, QMouseEvent *) { m_glwidget = widget; m_leftButtonPressed = false; m_midButtonPressed = false; m_rightButtonPressed = false; m_clickedAtom = 0; m_forceField->UnsetFixAtom(); widget->update(); return 0; } QUndoCommand* AutoOptTool::mouseMoveEvent(GLWidget *widget, QMouseEvent *event) { m_glwidget = widget; if(!widget->molecule()) return 0; // Get the currently selected atoms from the view PrimitiveList currentSelection = widget->selectedPrimitives(); // Manipulation can be performed in two ways - centred on an individual atom if (m_clickedAtom && m_running) { if (m_leftButtonPressed) { event->accept(); // translate the molecule following mouse movement Vector3d begin = widget->camera()->project(*m_clickedAtom->pos()); QPoint point = QPoint(begin.x(), begin.y()); translate(widget, *m_clickedAtom->pos(), point/*m_lastDraggingPosition*/, event->pos()); } } m_lastDraggingPosition = event->pos(); widget->update(); return 0; } QUndoCommand* AutoOptTool::mouseDoubleClickEvent(GLWidget*, QMouseEvent*) { return 0; } QUndoCommand* AutoOptTool::wheelEvent(GLWidget*, QWheelEvent*) { return 0; } bool AutoOptTool::paint(GLWidget *widget) { QPoint labelPos(10, 10); QPoint debugPos(10, 50); glColor3f(1.0,1.0,1.0); if (m_running) { if (m_setupFailed) { widget->painter()->drawText(labelPos, tr("AutoOpt: Could not setup force field....")); } else { double energy = m_forceField->Energy(false); if (m_forceField->GetUnit().find("kcal") != string::npos) energy *= KCAL_TO_KJ; widget->molecule()->setEnergy(energy); widget->painter()->drawText(labelPos, tr("AutoOpt: E = %1 %2 (dE = %3)").arg(energy). arg("kJ/mol"). arg( fabs(m_lastEnergy - energy) )); widget->painter()->drawText(debugPos, tr("Num Constraints: %1").arg(m_forceField->GetConstraints().Size())); m_lastEnergy = energy; } } m_glwidget = widget; if(m_leftButtonPressed) { if(m_running && m_clickedAtom) { // Don't highlight the atom on right mouse unless there is a selection double renderRadius = widget->radius(m_clickedAtom); renderRadius += 0.10; glEnable(GL_BLEND); widget->painter()->setColor(1.0, 0.3, 0.3, 0.7); widget->painter()->drawSphere(m_clickedAtom->pos(), renderRadius); glDisable(GL_BLEND); } } return true; } QWidget* AutoOptTool::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new QWidget; QLabel* labelFF = new QLabel(tr("Force Field:")); m_comboFF = new QComboBox(m_settingsWidget); for (unsigned int i = 0; i < m_forceFieldList.size(); ++i) m_comboFF->addItem(m_forceFieldList[i].c_str()); // find UFF for the default item int currentFF = m_comboFF->findText("UFF"); if (currentFF != -1) // couldn't find it, go for index 0 m_comboFF->setCurrentIndex(currentFF); QGridLayout* grid = new QGridLayout; grid->addWidget(labelFF, 0, 0, Qt::AlignRight); grid->addWidget(m_comboFF, 0, 1, Qt::AlignLeft); QLabel* labelSteps = new QLabel(tr("Steps per Update:")); labelSteps->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); m_stepsSpinBox = new QSpinBox(m_settingsWidget); m_stepsSpinBox->setMinimum(1); m_stepsSpinBox->setMaximum(100); m_stepsSpinBox->setValue(4); grid->addWidget(labelSteps, 1, 0, Qt::AlignRight); grid->addWidget(m_stepsSpinBox, 1, 1, Qt::AlignLeft); QLabel* labelAlg = new QLabel(tr("Algorithm:")); m_comboAlgorithm = new QComboBox(m_settingsWidget); m_comboAlgorithm->addItem(tr("Steepest Descent")); m_comboAlgorithm->addItem(tr("Conjugate Gradients")); m_comboAlgorithm->addItem(tr("Molecular Dynamics (300K)")); m_comboAlgorithm->addItem(tr("Molecular Dynamics (600K)")); m_comboAlgorithm->addItem(tr("Molecular Dynamics (900K)")); m_buttonStartStop = new QPushButton(tr("Start"), m_settingsWidget); m_fixedMovable = new QCheckBox(tr("Fixed atoms are movable"), m_settingsWidget); m_ignoredMovable = new QCheckBox(tr("Ignored atoms are movable"), m_settingsWidget); QVBoxLayout* layout = new QVBoxLayout(); layout->addLayout(grid); // force field, steps and labels layout->addWidget(labelAlg); layout->addWidget(m_comboAlgorithm); layout->addWidget(m_fixedMovable); layout->addWidget(m_ignoredMovable); layout->addWidget(m_buttonStartStop); layout->addStretch(1); m_settingsWidget->setLayout(layout); // Connect the start/stop button connect(m_buttonStartStop, SIGNAL(clicked()), this, SLOT(toggle())); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); // Check the force field is there, if not disable the start button if (!m_forceField) m_buttonStartStop->setEnabled(false); } return m_settingsWidget; } void AutoOptTool::settingsWidgetDestroyed() { m_settingsWidget = 0; } void AutoOptTool::toggle() { // Toggle the timer on and off if (m_running) disable(); else enable(); } void AutoOptTool::enable() { // If the force field is false we have nothing and so should return if (!m_forceField) return; if(!m_running) { connect(m_glwidget->molecule(), SIGNAL(destroyed()), this, SLOT(abort())); m_thread->setup(m_glwidget->molecule(), m_forceField, m_comboAlgorithm->currentIndex(), m_stepsSpinBox->value()); m_thread->start(); m_running = true; m_buttonStartStop->setText(tr("Stop")); QUndoStack *stack = m_glwidget->undoStack(); AutoOptCommand *cmd = new AutoOptCommand(m_glwidget->molecule(),this,0); if(stack && cmd) stack->push(cmd); else delete cmd; } } void AutoOptTool::abort() { killTimer(m_timerId); m_thread->quit(); m_running = false; } void AutoOptTool::disable() { if(m_running) { if(m_timerId) { killTimer(m_timerId); m_timerId = 0; } m_thread->quit(); m_running = false; m_setupFailed = false; m_buttonStartStop->setText(tr("Start")); m_glwidget->update(); // redraw AutoOpt label m_clickedAtom = 0; m_forceField->UnsetFixAtom(); m_leftButtonPressed = false; m_midButtonPressed = false; m_rightButtonPressed = false; } } void AutoOptTool::timerEvent(QTimerEvent*) { if(m_block || m_glwidget->molecule()->numAtoms() < 2) return; else m_block = true; m_forceField = OBForceField::FindForceField(m_forceFieldList[m_comboFF->currentIndex()]); // Check that we can find our force field - if not return if (!m_forceField) { emit setupFailed(); return; } m_thread->setup(m_glwidget->molecule(), m_forceField, m_comboAlgorithm->currentIndex(), m_stepsSpinBox->value()); m_thread->update(); } void AutoOptTool::finished(bool calculated) { if (m_running && calculated) { QList atoms = m_glwidget->molecule()->atoms(); OBMol mol = m_glwidget->molecule()->OBMol(); m_forceField->GetCoordinates( mol ); // forces if (mol.HasData(OBGenericDataType::ConformerData)) { OBConformerData *cd = (OBConformerData*) mol.GetData(OBGenericDataType::ConformerData); const vector > &allForces = cd->GetForces(); if (allForces.size()) { const vector &forces = allForces[0]; if (forces.size() == mol.NumAtoms()) { foreach(Atom* atom, atoms) { atom->setForceVector(Eigen::Vector3d(forces[atom->index()].AsArray())); } } } } // coordinates double *coordPtr = mol.GetCoordinates(); foreach(Atom* atom, atoms) { atom->setPos(Eigen::Vector3d(coordPtr)); coordPtr += 3; } if(m_clickedAtom && m_leftButtonPressed) { Vector3d begin = m_glwidget->camera()->project(*m_clickedAtom->pos()); QPoint point = QPoint(begin.x(), begin.y()); translate(m_glwidget, *m_clickedAtom->pos(), point, m_lastDraggingPosition); } } m_glwidget->molecule()->update(); m_glwidget->update(); m_block = false; } void AutoOptTool::setupDone() { if(!m_timerId) m_timerId = startTimer(50); } void AutoOptTool::setupFailed() { m_setupFailed = true; } void AutoOptTool::setupSucces() { m_setupFailed = false; } AutoOptThread::AutoOptThread(QObject*) { m_stop = false; m_velocities = false; } void AutoOptThread::setup(Molecule *molecule, OpenBabel::OBForceField* forceField, int algorithm, int steps) { m_mutex.lock(); m_molecule = molecule; m_forceField = forceField; m_algorithm = algorithm; m_steps = steps; m_stop = false; m_velocities = false; m_mutex.unlock(); emit setupDone(); } void AutoOptThread::run() { exec(); } void AutoOptThread::update() { // If the force field is false we have nothing and so should return if (!m_forceField) return; m_mutex.lock(); m_forceField->SetLogFile(NULL); m_forceField->SetLogLevel(OBFF_LOGLVL_NONE); OBMol mol = m_molecule->OBMol(); // Ignore all atoms with atomic # less than 1 foreach(const Atom *atom, m_molecule->atoms()) { if (atom->atomicNumber() < 1) m_forceField->GetConstraints().AddIgnore(atom->index() + 1); } if (!m_forceField->Setup(mol)) { m_stop = true; emit setupFailed(); emit finished(false); m_mutex.unlock(); return; } else emit setupSucces(); m_forceField->SetConformers(mol); switch(m_algorithm) { case 0: m_forceField->SteepestDescent(m_steps); break; case 1: m_forceField->ConjugateGradients(m_steps); break; case 2: m_forceField->MolecularDynamicsTakeNSteps(m_steps, 300, 0.001); break; case 3: m_forceField->MolecularDynamicsTakeNSteps(m_steps, 600, 0.001); break; case 4: m_forceField->MolecularDynamicsTakeNSteps(m_steps, 900, 0.001); break; } m_mutex.unlock(); emit finished(m_stop ? false : true); } void AutoOptThread::stop() { m_stop = true; } AutoOptCommand::AutoOptCommand(Molecule *molecule, AutoOptTool *tool, QUndoCommand *parent) : QUndoCommand(parent), m_molecule(0) { // Store the original molecule before any modifications are made setText(QObject::tr("AutoOpt Molecule")); m_moleculeCopy = *molecule; m_molecule = molecule; m_tool = tool; } void AutoOptCommand::redo() { m_moleculeCopy = *m_molecule; } void AutoOptCommand::undo() { if(m_tool) m_tool->disable(); *m_molecule = m_moleculeCopy; } bool AutoOptCommand::mergeWith (const QUndoCommand *) { // Just return true to repeated calls - we have stored the original molecule return true; } int AutoOptCommand::id() const { return 1311387; } void AutoOptTool::writeSettings(QSettings &settings) const { Tool::writeSettings(settings); settings.setValue("forceField", m_comboFF->currentIndex()); settings.setValue("algorithm", m_comboAlgorithm->currentIndex()); settings.setValue("steps", m_stepsSpinBox->value()); settings.setValue("fixedMovable", m_fixedMovable->checkState()); settings.setValue("ignoredMovable", m_ignoredMovable->checkState()); } void AutoOptTool::readSettings(QSettings &settings) { Tool::readSettings(settings); if (m_comboFF) { int currentFF = settings.value("forceField", -1).toInt(); if (currentFF == -1) { // haven't set a default // find UFF for default currentFF = m_comboFF->findText("UFF"); if (currentFF == -1) // couldn't find it, go for index 0 currentFF = 0; } m_comboFF->setCurrentIndex(currentFF); } if (m_comboAlgorithm) m_comboAlgorithm->setCurrentIndex(settings.value("algorithm", 0).toInt()); if (m_stepsSpinBox) m_stepsSpinBox->setValue(settings.value("steps", 4).toInt()); if (m_fixedMovable) { m_fixedMovable->setCheckState( static_cast(settings.value("fixedMovable", 2).toInt())); } if(m_ignoredMovable) { m_ignoredMovable->setCheckState( static_cast(settings.value("ignoredMovable", 2).toInt())); } } } Q_EXPORT_PLUGIN2(autoopttool, Avogadro::AutoOptToolFactory) avogadro-1.1.1/libavogadro/src/tools/drawcommand.cpp0000644000175000001440000007414012250371054021752 0ustar marcususers/********************************************************************** DrawCommand - Set of command classes for drawing. Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008,2009 Tim Vandermeersch Copyright (C) 2008 Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "drawcommand.h" #include #include #include #include #include // use this for creating drawcommand unit tests //#define DEBUG_COMMANDS 1 using namespace OpenBabel; namespace Avogadro { ///////////////////////////////////////////////////////////////////////////// // Adjust Hydrogens PreCommand ///////////////////////////////////////////////////////////////////////////// class AdjustHydrogensPreCommandPrivate { public: AdjustHydrogensPreCommandPrivate() : molecule(0) {}; Molecule *molecule; QList atomIds; QHash > hydrogenIds; QHash > bondIds; }; AdjustHydrogensPreCommand::AdjustHydrogensPreCommand(Molecule *molecule, const QList &atomIds) : d(new AdjustHydrogensPreCommandPrivate) { #ifdef DEBUG_COMMANDS QString ids = "[ "; foreach (unsigned long id, atomIds) ids += QString::number(id) + " "; ids += "]"; qDebug() << "AdjustHydrogensPreCommand(atomIds = " + ids + ")"; #endif d->molecule = molecule; d->atomIds = atomIds; constructor(); } AdjustHydrogensPreCommand::AdjustHydrogensPreCommand(Molecule *molecule, unsigned long atomId) : d(new AdjustHydrogensPreCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "AdjustHydrogensPreCommand(atomId = " << atomId << ")"; #endif d->molecule = molecule; d->atomIds.append(atomId); constructor(); } void AdjustHydrogensPreCommand::constructor() { foreach (unsigned long id, d->atomIds) { Atom *atom = d->molecule->atomById(id); Q_CHECK_PTR( atom ); if (atom) { if (atom->isHydrogen()) { qDebug() << "AdjustHydrogensPreCommand::constructor(): Error, request to add hydrogens on hydrogen atom"; continue; } foreach (unsigned long nbrId, atom->neighbors()) { Atom *nbr = d->molecule->atomById(nbrId); if (nbr) if (nbr->isHydrogen()) { d->hydrogenIds[id].append(nbrId); d->bondIds[id].append(d->molecule->bond(id, nbrId)->id()); } } } } } AdjustHydrogensPreCommand::~AdjustHydrogensPreCommand() { delete d; } void AdjustHydrogensPreCommand::undo() { #ifdef DEBUG_COMMANDS qDebug() << "AdjustHydrogensPreCommand::undo()"; #endif foreach (unsigned long id, d->atomIds) { Atom *atom = d->molecule->atomById(id); Q_CHECK_PTR( atom ); if (atom) { if (atom->isHydrogen()) { qDebug() << "AdjustHydrogensPreCommand::undo(): Error, request to add hydrogens on hydrogen atom"; continue; } d->molecule->addHydrogens(atom, d->hydrogenIds.value(atom->id()), d->bondIds.value(atom->id())); } } } void AdjustHydrogensPreCommand::redo() { #ifdef DEBUG_COMMANDS qDebug() << "AdjustHydrogensPreCommand::redo()"; #endif foreach (unsigned long id, d->atomIds) { Atom *atom = d->molecule->atomById(id); Q_CHECK_PTR( atom ); if (atom) { if (atom->isHydrogen()) { qDebug() << "AdjustHydrogensPreCommand::redo(): Error, request to add hydrogens on hydrogen atom"; continue; } d->molecule->removeHydrogens(atom); } } } ///////////////////////////////////////////////////////////////////////////// // Adjust Hydrogens PostCommand ///////////////////////////////////////////////////////////////////////////// class AdjustHydrogensPostCommandPrivate { public: AdjustHydrogensPostCommandPrivate() : molecule(0) {}; Molecule *molecule; QList atomIds; QHash > hydrogenIds; QHash > bondIds; }; AdjustHydrogensPostCommand::AdjustHydrogensPostCommand(Molecule *molecule, const QList &atomIds) : d(new AdjustHydrogensPostCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "AdjustHydrogensPostCommand()"; #endif d->molecule = molecule; d->atomIds = atomIds; } AdjustHydrogensPostCommand::AdjustHydrogensPostCommand(Molecule *molecule, unsigned long atomId) : d(new AdjustHydrogensPostCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "AdjustHydrogensPostCommand()"; #endif d->molecule = molecule; d->atomIds.append(atomId); } AdjustHydrogensPostCommand::~AdjustHydrogensPostCommand() { delete d; } void AdjustHydrogensPostCommand::undo() { #ifdef DEBUG_COMMANDS qDebug() << "AdjustHydrogensPostCommand::undo()"; #endif foreach (unsigned long id, d->atomIds) { Atom *atom = d->molecule->atomById(id); Q_CHECK_PTR( atom ); if (atom) { if (atom->isHydrogen()) { qDebug() << "AdjustHydrogensPostCommand::undo(): Error, request to add hydrogens on hydrogen atom"; continue; } d->molecule->removeHydrogens(atom); } } } void AdjustHydrogensPostCommand::redo() { #ifdef DEBUG_COMMANDS qDebug() << "AdjustHydrogensPostCommand::redo()"; #endif if (d->hydrogenIds.isEmpty()) { foreach (unsigned long id, d->atomIds) { Atom *atom = d->molecule->atomById(id); Q_CHECK_PTR( atom ); if (atom) { if (atom->isHydrogen()) { qDebug() << "AdjustHydrogensPostCommand::redo(): Error, request to add hydrogens on hydrogen atom"; continue; } d->molecule->addHydrogens(atom); // new ids... // save the new ids for reuse foreach (unsigned long nbrId, atom->neighbors()) { Atom *nbr = d->molecule->atomById(nbrId); if (nbr) if (nbr->isHydrogen()) { Bond *bond = d->molecule->bond(id, nbrId); if (!bond) { #ifdef DEBUG_COMMANDS qDebug() << "Error, AdjustHydrogensPostCommand::redo..."; #endif continue; } d->hydrogenIds[id].append(nbrId); d->bondIds[id].append(bond->id()); } } } } } else { // reuse ids from before foreach (unsigned long id, d->atomIds) { Atom *atom = d->molecule->atomById(id); Q_CHECK_PTR( atom ); if (atom) { if (atom->isHydrogen()) { qDebug() << "AdjustHydrogensPostCommand::redo(): Error, request to add hydrogens on hydrogen atom"; continue; } d->molecule->addHydrogens(atom, d->hydrogenIds.value(atom->id()), d->bondIds.value(atom->id())); } } } } ///////////////////////////////////////////////////////////////////////////// // Add Atom ///////////////////////////////////////////////////////////////////////////// class AddAtomDrawCommandPrivate { public: AddAtomDrawCommandPrivate() : molecule(0), atom(0), id(FALSE_ID), prevId(false), postCommand(0) {} Molecule *molecule; Atom *atom; Eigen::Vector3d pos; unsigned int element; unsigned long id; bool prevId; AdjustHydrogens::Options adjustHydrogens; QUndoCommand *postCommand; }; AddAtomDrawCommand::AddAtomDrawCommand(Molecule *molecule, const Eigen::Vector3d& pos, unsigned int element, AdjustHydrogens::Options adjustHydrogens) : d(new AddAtomDrawCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "AddAtomDrawCommand_ctor1(element = " << element << ", adj = " << adjustHydrogens << ")"; #endif setText(QObject::tr("Add Atom")); d->molecule = molecule; d->pos = pos; d->element = element; d->adjustHydrogens = adjustHydrogens; } AddAtomDrawCommand::AddAtomDrawCommand(Molecule *molecule, Atom *atom, AdjustHydrogens::Options adjustHydrogens) : d(new AddAtomDrawCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "AddAtomDrawCommand_ctor2(element = " << atom->atomicNumber() << ", adj = " << adjustHydrogens << ")"; #endif setText(QObject::tr("Add Atom")); d->molecule = molecule; d->pos = *atom->pos(); d->element = atom->atomicNumber(); d->atom = atom; d->id = atom->id(); d->adjustHydrogens = adjustHydrogens; } AddAtomDrawCommand::~AddAtomDrawCommand() { if (d->postCommand) { delete d->postCommand; d->postCommand = 0; } delete d; } void AddAtomDrawCommand::undo() { #ifdef DEBUG_COMMANDS qDebug() << "AddAtomDrawCommand::undo(id = " << d->id << ")"; #endif Atom *atom = d->molecule->atomById(d->id); Q_CHECK_PTR( atom ); if (atom) { // Remove the previously add hydrogens if needed if (d->adjustHydrogens & AdjustHydrogens::RemoveOnUndo && !atom->isHydrogen()) d->postCommand->undo(); d->molecule->removeAtom(atom); } d->molecule->update(); } void AddAtomDrawCommand::redo() { if (d->atom) { // initial creation if (d->adjustHydrogens != AdjustHydrogens::Never && !d->atom->isHydrogen()) { d->postCommand = new AdjustHydrogensPostCommand(d->molecule, d->id); if (d->adjustHydrogens & AdjustHydrogens::AddOnRedo) d->postCommand->redo(); } d->atom = 0; #ifdef DEBUG_COMMANDS qDebug() << "AddAtomDrawCommand::redo(id = " << d->id << ")"; #endif return; } Atom *atom = 0; if (d->id != FALSE_ID) { atom = d->molecule->addAtom(d->id); Q_CHECK_PTR( atom ); } else { atom = d->molecule->addAtom(); Q_CHECK_PTR( atom ); d->id = atom->id(); } atom->setPos(d->pos); atom->setAtomicNumber(d->element); if (d->adjustHydrogens != AdjustHydrogens::Never && !atom->isHydrogen()) { if (!d->postCommand) d->postCommand = new AdjustHydrogensPostCommand(d->molecule, d->id); if (d->adjustHydrogens & AdjustHydrogens::AddOnRedo) d->postCommand->redo(); } #ifdef DEBUG_COMMANDS qDebug() << "AddAtomDrawCommand::redo(id = " << d->id << ")"; #endif d->molecule->update(); } ///////////////////////////////////////////////////////////////////////////// // Delete Atom ///////////////////////////////////////////////////////////////////////////// class DeleteAtomDrawCommandPrivate { public: DeleteAtomDrawCommandPrivate() : id(FALSE_ID), preCommand(0), postCommand(0) {} Molecule *molecule; unsigned long id; QList bonds; QList bondOrders; QList neighbors; Eigen::Vector3d pos; unsigned int element; bool adjustHydrogens; QUndoCommand *preCommand; QUndoCommand *postCommand; }; DeleteAtomDrawCommand::DeleteAtomDrawCommand(Molecule *molecule, int index, bool adjustHydrogens) : d(new DeleteAtomDrawCommandPrivate) { setText(QObject::tr("Delete Atom")); d->molecule = molecule; Atom *atom = molecule->atom(index); d->id = atom->id(); #ifdef DEBUG_COMMANDS qDebug() << "DeleteAtomDrawCommand(id = " << d->id << ", adj = " << adjustHydrogens << ")"; #endif d->element = atom->atomicNumber(); d->pos = *(atom->pos()); d->adjustHydrogens = adjustHydrogens; } DeleteAtomDrawCommand::~DeleteAtomDrawCommand() { if (d->preCommand) { delete d->preCommand; d->preCommand = 0; } if (d->postCommand) { delete d->postCommand; d->postCommand = 0; } delete d; } void DeleteAtomDrawCommand::undo() { #ifdef DEBUG_COMMANDS qDebug() << "DeleteAtomDrawCommand::undo()"; #endif if (d->adjustHydrogens) d->postCommand->undo(); Atom *atom = d->molecule->addAtom(d->id); Q_CHECK_PTR( atom ); atom->setAtomicNumber(d->element); atom->setPos(d->pos); // Add the bonds again... foreach (unsigned long id, d->bonds) { int index = d->bonds.indexOf(id); Bond *bond = d->molecule->addBond(id); bond->setAtoms(d->id, d->neighbors.at(index), d->bondOrders.at(index)); } if (d->adjustHydrogens) d->preCommand->undo(); d->molecule->update(); } void DeleteAtomDrawCommand::redo() { #ifdef DEBUG_COMMANDS qDebug() << "DeleteAtomDrawCommand::redo()"; #endif Atom *atom = d->molecule->atomById(d->id); Q_CHECK_PTR( atom ); d->bonds.clear(); d->bondOrders.clear(); d->neighbors.clear(); foreach (unsigned long id, atom->neighbors()) { Atom *nbr = d->molecule->atomById(id); if (nbr->isHydrogen()) continue; Bond *bond = d->molecule->bond(id, atom->id()); d->neighbors.append(id); d->bonds.append(bond->id()); d->bondOrders.append(bond->order()); } if (atom) { QList neighbors; if (d->adjustHydrogens && !atom->isHydrogen()) { if (!d->preCommand) { QList ids; foreach (unsigned long id, atom->neighbors()) { if (!d->molecule->atomById(id)->isHydrogen()) { neighbors.append(id); ids.append(id); } } ids.append(atom->id()); // Delete all hydrogens on the to be deleted atom and its heavy atom neighbors // The hydrogen ids are saved along with thier bond ids d->preCommand = new AdjustHydrogensPreCommand(d->molecule, ids); } d->preCommand->redo(); } // Delete the atom, also deletes the bonds d->molecule->removeAtom(atom); if (d->adjustHydrogens && !atom->isHydrogen()) { if (!d->postCommand) // Add hydrogens to the heavy atom neighbors of the delted atom // Uses new ids the first time, reuses these on successive calls d->postCommand = new AdjustHydrogensPostCommand(d->molecule, neighbors); d->postCommand->redo(); } d->molecule->update(); } } ///////////////////////////////////////////////////////////////////////////// // Add Bond ///////////////////////////////////////////////////////////////////////////// class AddBondDrawCommandPrivate { public: AddBondDrawCommandPrivate() : molecule(0), bond(0), id(FALSE_ID), beginAtomId(FALSE_ID), endAtomId(FALSE_ID), prevId(false), preCommandBegin(0), postCommandBegin(0), preCommandEnd(0), postCommandEnd(0) {} Molecule *molecule; Bond *bond; unsigned long id; unsigned int beginAtomId; unsigned int endAtomId; bool prevId; Eigen::Vector3d pos; unsigned int order; AdjustHydrogens::Options adjustHydrogensBegin; AdjustHydrogens::Options adjustHydrogensEnd; QUndoCommand *preCommandBegin; QUndoCommand *postCommandBegin; QUndoCommand *preCommandEnd; QUndoCommand *postCommandEnd; }; AddBondDrawCommand::AddBondDrawCommand(Molecule *molecule, Atom *beginAtom, Atom *endAtom, unsigned int order, AdjustHydrogens::Options adjustHydrogensOnBeginAtom, AdjustHydrogens::Options adjustHydrogensOnEndAtom) : d(new AddBondDrawCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "AddBondDrawCommand_ctor1(begin = " << beginAtom->id() << ", end = " << endAtom->id() << ", order = " << order << ", adjBegin = " << adjustHydrogensOnBeginAtom << ", adjEnd = " << adjustHydrogensOnEndAtom << ")"; #endif setText(QObject::tr("Add Bond")); d->molecule = molecule; d->beginAtomId = beginAtom->id(); d->endAtomId = endAtom->id(); d->order = order; d->adjustHydrogensBegin = adjustHydrogensOnBeginAtom; d->adjustHydrogensEnd = adjustHydrogensOnEndAtom; } AddBondDrawCommand::AddBondDrawCommand(Molecule *molecule, Bond *bond, AdjustHydrogens::Options adjustHydrogensOnBeginAtom, AdjustHydrogens::Options adjustHydrogensOnEndAtom) : d(new AddBondDrawCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "AddBondDrawCommand_ctor2(begin = " << bond->beginAtomId() << ", end = " << bond->endAtomId() << ", order = " << bond->order() << ", adjBegin = " << adjustHydrogensOnBeginAtom << ", adjEnd = " << adjustHydrogensOnEndAtom << ")"; #endif setText(QObject::tr("Add Bond")); d->molecule = molecule; d->beginAtomId = bond->beginAtomId(); d->endAtomId = bond->endAtomId(); d->order = bond->order(); d->bond = bond; d->prevId = true; d->id = bond->id(); d->adjustHydrogensBegin = adjustHydrogensOnBeginAtom; d->adjustHydrogensEnd = adjustHydrogensOnEndAtom; } AddBondDrawCommand::~AddBondDrawCommand() { if (d->preCommandBegin) { delete d->preCommandBegin; d->preCommandBegin = 0; } if (d->postCommandBegin) { delete d->postCommandBegin; d->postCommandBegin = 0; } if (d->preCommandEnd) { delete d->preCommandEnd; d->preCommandEnd = 0; } if (d->postCommandEnd) { delete d->postCommandEnd; d->postCommandEnd = 0; } delete d; } void AddBondDrawCommand::undo() { #ifdef DEBUG_COMMANDS qDebug() << "AddBondDrawCommand::undo()"; #endif Bond *bond = d->molecule->bondById(d->id); Q_CHECK_PTR( bond ); if (bond) { // remove the hydrogens added after the bond was created if (d->adjustHydrogensBegin & AdjustHydrogens::RemoveOnUndo) d->postCommandBegin->undo(); if (d->adjustHydrogensEnd & AdjustHydrogens::RemoveOnUndo) d->postCommandEnd->undo(); // remove the bond d->molecule->removeBond(bond); // restore the hydrogens to the way they were before the bond was added if (d->adjustHydrogensBegin & AdjustHydrogens::AddOnUndo) d->preCommandBegin->undo(); if (d->adjustHydrogensEnd & AdjustHydrogens::AddOnUndo) d->preCommandEnd->undo(); d->molecule->update(); } } void AddBondDrawCommand::redo() { #ifdef DEBUG_COMMANDS qDebug() << "AddBondDrawCommand::redo()"; #endif if (d->bond) { // already created the bond // adjust hydrogens on begin atom if needed if (d->adjustHydrogensBegin != AdjustHydrogens::Never) { QList ids; ids.append(d->bond->beginAtomId()); d->preCommandBegin = new AdjustHydrogensPreCommand(d->molecule, d->bond->beginAtomId()); // remove hydrogens from begin and/or end atom if (d->adjustHydrogensBegin & AdjustHydrogens::RemoveOnRedo) d->preCommandBegin->redo(); d->postCommandBegin = new AdjustHydrogensPostCommand(d->molecule, d->bond->beginAtomId()); // add hydrogens again if (d->adjustHydrogensBegin & AdjustHydrogens::AddOnRedo) d->postCommandBegin->redo(); } // adjust hydrogens on end atom if needed if (d->adjustHydrogensEnd != AdjustHydrogens::Never) { d->preCommandEnd = new AdjustHydrogensPreCommand(d->molecule, d->bond->endAtomId()); // remove hydrogens from begin and/or end atom if (d->adjustHydrogensEnd & AdjustHydrogens::RemoveOnRedo) d->preCommandEnd->redo(); d->postCommandEnd = new AdjustHydrogensPostCommand(d->molecule, d->bond->endAtomId()); // add hydrogens again if (d->adjustHydrogensEnd & AdjustHydrogens::AddOnRedo) d->postCommandEnd->redo(); } d->bond = 0; d->molecule->update(); return; } // adjust hydrogens on begin atom if needed if (d->adjustHydrogensBegin != AdjustHydrogens::Never) { if (!d->preCommandBegin) d->preCommandBegin = new AdjustHydrogensPreCommand(d->molecule, d->beginAtomId); // remove hydrogens from begin and/or end atom if (d->adjustHydrogensBegin & AdjustHydrogens::RemoveOnRedo) d->preCommandBegin->redo(); } // adjust hydrogens on end atom if needed if (d->adjustHydrogensEnd != AdjustHydrogens::Never) { if (!d->preCommandEnd) d->preCommandEnd = new AdjustHydrogensPreCommand(d->molecule, d->endAtomId); // remove hydrogens from begin and/or end atom if (d->adjustHydrogensEnd & AdjustHydrogens::RemoveOnRedo) d->preCommandEnd->redo(); } Atom *beginAtom = d->molecule->atomById(d->beginAtomId); Q_CHECK_PTR( beginAtom ); Atom *endAtom = d->molecule->atomById(d->endAtomId); Q_CHECK_PTR( endAtom ); if (!beginAtom || !endAtom) { d->molecule->update(); return; } Bond *bond; if (d->id != FALSE_ID) { bond = d->molecule->addBond(d->id); Q_CHECK_PTR( bond ); } else { bond = d->molecule->addBond(); Q_CHECK_PTR( bond ); d->id = bond->id(); } bond->setOrder(d->order); bond->setBegin(beginAtom); bond->setEnd(endAtom); // adjust hydrogens on begin atom if needed if (d->adjustHydrogensBegin != AdjustHydrogens::Never) { if (!d->postCommandBegin) d->postCommandBegin = new AdjustHydrogensPostCommand(d->molecule, d->beginAtomId); // remove hydrogens from begin and/or end atom if (d->adjustHydrogensBegin & AdjustHydrogens::AddOnRedo) d->postCommandBegin->redo(); } // adjust hydrogens on end atom if needed if (d->adjustHydrogensEnd != AdjustHydrogens::Never) { if (!d->postCommandEnd) d->postCommandEnd = new AdjustHydrogensPostCommand(d->molecule, d->endAtomId); // remove hydrogens from begin and/or end atom if (d->adjustHydrogensEnd & AdjustHydrogens::AddOnRedo) d->postCommandEnd->redo(); } d->molecule->update(); } ///////////////////////////////////////////////////////////////////////////// // Delete Bond ///////////////////////////////////////////////////////////////////////////// class DeleteBondDrawCommandPrivate { public: DeleteBondDrawCommandPrivate() : id(FALSE_ID) {} Molecule *molecule; Molecule moleculeCopy; unsigned long id; bool adjustHydrogens; }; DeleteBondDrawCommand::DeleteBondDrawCommand(Molecule *molecule, int index, bool adjustHydrogens) : d(new DeleteBondDrawCommandPrivate) { setText(QObject::tr("Delete Bond")); d->molecule = molecule; d->moleculeCopy = (*(molecule)); d->id = molecule->bond(index)->id(); #ifdef DEBUG_COMMANDS qDebug() << "DeleteBondDrawCommand(id = " << d->id << ", adj = " << adjustHydrogens << ")"; #endif d->adjustHydrogens = adjustHydrogens; } DeleteBondDrawCommand::~DeleteBondDrawCommand() { delete d; } void DeleteBondDrawCommand::undo() { #ifdef DEBUG_COMMANDS qDebug() << "DeleteBondDrawCommand::undo()"; #endif *d->molecule = d->moleculeCopy; d->molecule->update(); } void DeleteBondDrawCommand::redo() { #ifdef DEBUG_COMMANDS qDebug() << "DeleteBondDrawCommand::redo()"; #endif Bond *bond = d->molecule->bondById(d->id); Q_CHECK_PTR( bond ); if(bond) { d->molecule->removeBond(bond); if (d->adjustHydrogens) { Atom *a1, *a2; a1 = d->molecule->atomById(bond->beginAtomId()); a2 = d->molecule->atomById(bond->endAtomId()); d->molecule->removeHydrogens(a1); d->molecule->removeHydrogens(a2); d->molecule->addHydrogens(a1); d->molecule->addHydrogens(a2); } d->molecule->update(); } } ///////////////////////////////////////////////////////////////////////////// // Change Element ///////////////////////////////////////////////////////////////////////////// class ChangeElementDrawCommandPrivate { public: ChangeElementDrawCommandPrivate() : molecule(0), id(FALSE_ID), preCommand(0), postCommand(0) {} Molecule *molecule; unsigned int newElement, oldElement; unsigned long id; bool adjustHydrogens; QUndoCommand *preCommand; QUndoCommand *postCommand; }; ChangeElementDrawCommand::ChangeElementDrawCommand(Molecule *molecule, Atom *atom, unsigned int oldElement, bool adjustHydrogens) : d(new ChangeElementDrawCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "ChangeElementDrawCommand(id = " << atom->id() << ", old = " << oldElement << ", new = " << atom->atomicNumber() << ", adj=" << adjustHydrogens << ")"; #endif setText(QObject::tr("Change Element")); d->molecule = molecule; d->newElement = atom->atomicNumber(); d->oldElement = oldElement; d->id = atom->id(); d->adjustHydrogens = adjustHydrogens; } void ChangeElementDrawCommand::setAdjustHydrogens(bool adjustHydrogens) { d->adjustHydrogens = adjustHydrogens; } ChangeElementDrawCommand::~ChangeElementDrawCommand() { if (d->preCommand) { delete d->preCommand; d->preCommand = 0; } if (d->postCommand) { delete d->postCommand; d->postCommand = 0; } delete d; } void ChangeElementDrawCommand::undo() { #ifdef DEBUG_COMMANDS qDebug() << "ChangeElementDrawCommand::undo()"; #endif Atom *atom = d->molecule->atomById(d->id); Q_CHECK_PTR( atom ); if (atom) { // Remove Hydrogens if needed if (d->adjustHydrogens) d->postCommand->undo(); // Make sure we call BeginModify / EndModify (e.g., PR#1720879) atom->setAtomicNumber(d->oldElement); // Remove Hydrogens if needed if (d->adjustHydrogens) d->preCommand->undo(); d->molecule->update(); } } void ChangeElementDrawCommand::redo() { #ifdef DEBUG_COMMANDS qDebug() << "ChangeElementDrawCommand::redo()"; #endif Atom *atom = d->molecule->atomById(d->id); Q_CHECK_PTR( atom ); if (atom) { // Remove Hydrogens if needed if (d->adjustHydrogens) { if (!atom->isHydrogen() && !d->preCommand) { QList ids; ids.append(d->id); d->preCommand = new AdjustHydrogensPreCommand(d->molecule, ids); } if (d->preCommand) d->preCommand->redo(); } // Make sure we call BeginModify / EndModify (e.g., PR#1720879) atom->setAtomicNumber(d->newElement); // Add hydrogens again if needed if (!atom->isHydrogen() && d->adjustHydrogens) { if (!d->postCommand) { QList ids; ids.append(d->id); d->postCommand = new AdjustHydrogensPostCommand(d->molecule, ids); } if (d->postCommand) d->postCommand->redo(); } d->molecule->update(); } } ///////////////////////////////////////////////////////////////////////////// // Change Bond Order ///////////////////////////////////////////////////////////////////////////// class ChangeBondOrderDrawCommandPrivate { public: ChangeBondOrderDrawCommandPrivate() : molecule(0), id(FALSE_ID), preCommand(0), postCommand(0) {} Molecule *molecule; unsigned long id; unsigned int addBondOrder, oldBondOrder; bool adjustHydrogens; QUndoCommand *preCommand; QUndoCommand *postCommand; }; ChangeBondOrderDrawCommand::ChangeBondOrderDrawCommand(Molecule *molecule, Bond *bond, unsigned int oldBondOrder, bool adjustHydrogens) : d(new ChangeBondOrderDrawCommandPrivate) { #ifdef DEBUG_COMMANDS qDebug() << "ChangeBondOrderDrawCommand(id = " << bond->id() << ", old = " << oldBondOrder << ", new = " << bond->order() << ", adj=" << adjustHydrogens << ")"; #endif setText(QObject::tr("Change Bond Order")); d->molecule = molecule; d->id = bond->id(); d->addBondOrder = bond->order(); d->oldBondOrder = oldBondOrder; d->adjustHydrogens = adjustHydrogens; } ChangeBondOrderDrawCommand::~ChangeBondOrderDrawCommand() { if (d->preCommand) { delete d->preCommand; d->preCommand = 0; } if (d->postCommand) { delete d->postCommand; d->postCommand = 0; } delete d; } void ChangeBondOrderDrawCommand::undo() { #ifdef DEBUG_COMMANDS qDebug() << "ChangeBondOrderDrawCommand::undo()"; #endif Bond *bond = d->molecule->bondById(d->id); Q_CHECK_PTR( bond ); if (bond) { // Remove Hydrogens if needed if (d->adjustHydrogens) d->postCommand->undo(); // Make sure we call BeginModify / EndModify (e.g., PR#1720879) bond->setOrder(d->oldBondOrder); // Add Hydrogens if needed if (d->adjustHydrogens) d->preCommand->undo(); d->molecule->update(); } } void ChangeBondOrderDrawCommand::redo() { #ifdef DEBUG_COMMANDS qDebug() << "ChangeBondOrderDrawCommand::redo()"; #endif Bond *bond = d->molecule->bondById(d->id); Q_CHECK_PTR( bond ); if (bond) { // Remove Hydrogens if needed if (d->adjustHydrogens) { if (!d->preCommand) { QList ids; ids.append(bond->beginAtomId()); ids.append(bond->endAtomId()); d->preCommand = new AdjustHydrogensPreCommand(d->molecule, ids); } d->preCommand->redo(); } // Make sure we call BeginModify / EndModify (e.g., PR#1720879) bond->setOrder(d->addBondOrder); // Add Hydrogens if needed if (d->adjustHydrogens) { if (!d->postCommand) { QList ids; ids.append(bond->beginAtomId()); ids.append(bond->endAtomId()); d->postCommand = new AdjustHydrogensPostCommand(d->molecule, ids); } d->postCommand->redo(); } d->molecule->update(); } } } // end namespace Avogadro avogadro-1.1.1/libavogadro/src/tools/clickmeasuretool.cpp0000644000175000001440000003030412250371054023015 0ustar marcususers/********************************************************************** ClickMeasureTool - ClickMeasureTool Tool for Avogadro Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "clickmeasuretool.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace OpenBabel; using namespace Eigen; namespace Avogadro { ClickMeasureTool::ClickMeasureTool(QObject *parent) : Tool(parent), m_selectedAtoms(), m_numSelectedAtoms(0) { QAction *action = activateAction(); action->setIcon(QIcon(QString::fromUtf8(":/measure/measure.png"))); action->setToolTip(tr("Click to Measure (F12)\n\n" "Left Mouse: \tSelect up to three Atoms.\n" "\tDistances are measured between 1-2 and 2-3\n" "\tAngle is measured between 1-3 using 2 as the common point\n" "Right Mouse: \tReset the measurements." "Double-Click: \tReset the view.")); action->setShortcut(Qt::Key_F12); m_lastMeasurement.resize(5); for (int i = 0; i < m_lastMeasurement.size(); ++i) m_lastMeasurement[i] = 0.0; } ClickMeasureTool::~ClickMeasureTool() { } QUndoCommand* ClickMeasureTool::mousePressEvent(GLWidget *widget, QMouseEvent *event) { Molecule *molecule = widget->molecule(); if(!molecule) { return 0; } //! List of hits from initial click m_hits = widget->hits(event->pos().x()-2, event->pos().y()-2, 5, 5); // If there's a left button (and no modifier keys) continue adding to the list if(m_hits.size() && (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::NoModifier)) { if(m_hits[0].type() != Primitive::AtomType) return 0; event->accept(); Atom *atom = molecule->atom(m_hits[0].name()); // First check if we've already selected this atom // Fixes PR# int indexOfAtom = m_selectedAtoms.indexOf(atom); if (indexOfAtom != -1) { // in the list m_numSelectedAtoms--; // update the count m_selectedAtoms.removeAt(indexOfAtom); } else { // new atom to add to list if(m_numSelectedAtoms < 4) { // Select another atom ++m_numSelectedAtoms; m_selectedAtoms.append(atom); } } widget->update(); } // Right button or Left Button + modifier (e.g., Mac) else { // Clear all atoms event->accept(); m_angle = 0; m_vector[0].setZero(); m_vector[1].setZero(); m_numSelectedAtoms = 0; m_selectedAtoms.clear(); widget->update(); } return 0; } QUndoCommand* ClickMeasureTool::mouseMoveEvent(GLWidget*, QMouseEvent *) { return 0; } QUndoCommand* ClickMeasureTool::mouseReleaseEvent(GLWidget*, QMouseEvent*) { return 0; } QUndoCommand* ClickMeasureTool::wheelEvent(GLWidget*, QWheelEvent*) { return 0; } void ClickMeasureTool::calculateParameters() { // Calculate all parameters and store them in member variables. if(m_numSelectedAtoms >= 2) { // Check the selected atoms still exist if (m_selectedAtoms[0].isNull() || m_selectedAtoms[1].isNull()) return; // Two atoms selected - distance measurement only m_vector[0] = *m_selectedAtoms[1]->pos() - *m_selectedAtoms[0]->pos(); QString distanceString = tr("Distance (1->2): %L1 %2", "%L1 is distance, %2 is Angstrom symbol") .arg(m_vector[0].norm()) .arg(QString::fromUtf8("Å")); // Check whether we have already sent this out... if (m_lastMeasurement.at(0) != m_vector[0].norm()) { emit message(distanceString); m_lastMeasurement[0] = m_vector[0].norm(); } } if(m_numSelectedAtoms >= 3) { // Check the selected atoms still exist if (m_selectedAtoms[2].isNull()) return; // Two distances and the angle between the three selected atoms m_vector[1] = *m_selectedAtoms[1]->pos() - *m_selectedAtoms[2]->pos(); QString distanceString = tr("Distance (2->3): %L1 %2", "%L1 is distance, %2 is Angstrom symbol") .arg(m_vector[1].norm()) .arg(QString::fromUtf8("Å")); // Calculate the angle between the atoms m_angle = acos(m_vector[0].normalized().dot(m_vector[1].normalized())); m_angle *= 180.0 / M_PI; // m_angle = vectorAngle(vector3(m_vector[0].x(), m_vector[0].y(), m_vector[0].z()), // vector3(m_vector[1].x(), m_vector[1].y(), m_vector[1].z())); QString angleString = tr("Angle: %L1 °").arg(m_angle); // Check whether we have already sent this out if (m_lastMeasurement.at(1) != m_vector[1].norm()) { emit message(distanceString); m_lastMeasurement[1] = m_vector[1].norm(); } if (m_lastMeasurement.at(3) != m_angle) { emit message(angleString); m_lastMeasurement[3] = m_angle; } } if(m_numSelectedAtoms >= 4) { // Check the selected atoms still exist if (m_selectedAtoms[3].isNull()) return; // Three distances, bond angle and dihedral angle m_vector[2] = *m_selectedAtoms[2]->pos() - *m_selectedAtoms[3]->pos(); QString distanceString = tr("Distance (3->4): %L1 %2", "%L1 is distance, %2 is Angstrom symbol") .arg(m_vector[2].norm()) .arg(QString::fromUtf8("Å")); m_dihedral = CalcTorsionAngle(vector3(m_selectedAtoms[0]->pos()->x(), m_selectedAtoms[0]->pos()->y(), m_selectedAtoms[0]->pos()->z()), vector3(m_selectedAtoms[1]->pos()->x(), m_selectedAtoms[1]->pos()->y(), m_selectedAtoms[1]->pos()->z()), vector3(m_selectedAtoms[2]->pos()->x(), m_selectedAtoms[2]->pos()->y(), m_selectedAtoms[2]->pos()->z()), vector3(m_selectedAtoms[3]->pos()->x(), m_selectedAtoms[3]->pos()->y(), m_selectedAtoms[3]->pos()->z())); QString dihedralString = tr("Dihedral Angle: %1 °").arg(m_dihedral); // Check whether these measurements have been sent already if (m_lastMeasurement.at(2) != m_vector[2].norm()) { emit message(distanceString); m_lastMeasurement[2] = m_vector[2].norm(); } if (m_lastMeasurement.at(4) != m_dihedral) { emit message(dihedralString); m_lastMeasurement[4] = m_dihedral; } } } bool ClickMeasureTool::paint(GLWidget *widget) { if(0 < m_numSelectedAtoms && m_selectedAtoms[0]) { calculateParameters(); // Try to put the labels in a reasonable place on the display QPoint labelPos(70, widget->height()-25); QPoint distancePos[3]; distancePos[0] = QPoint(180, widget->height()-25); distancePos[1] = QPoint(240, widget->height()-25); distancePos[2] = QPoint(300, widget->height()-25); QPoint angleLabelPos(70, widget->height()-45); QPoint anglePos(180, widget->height()-45); QPoint dihedralLabelPos(70, widget->height()-65); QPoint dihedralPos(180, widget->height()-65); glColor3f(1.0,0.0,0.0); const Vector3d *pos = m_selectedAtoms[0]->pos(); double radius = 0.18 + widget->radius(m_selectedAtoms[0]); // relative position of the text on the atom Vector3d textRelPos = radius * widget->camera()->backTransformedZAxis(); Vector3d textPos = *pos + textRelPos; widget->painter()->drawText(textPos, tr("*1", "*1 is a number. You most likely do not need to translate this" )); if(m_numSelectedAtoms >= 2 && m_selectedAtoms[1]) { glColor3f(0.0,1.0,0.0); pos = m_selectedAtoms[1]->pos(); Vector3d textPos = *pos + textRelPos; radius = 0.18 + widget->radius(m_selectedAtoms[1]); widget->painter()->drawText(textPos, tr("*2", "*2 is a number. You most likely do not need to translate this")); if(m_numSelectedAtoms >= 3 && m_selectedAtoms[2]) { // Display a label on the third atom pos = m_selectedAtoms[2]->pos(); radius = 0.18 + widget->radius(m_selectedAtoms[2]); textPos = *pos + textRelPos; glColor3f(0.0,0.0,1.0); widget->painter()->drawText(textPos, tr("*3", "*3 is a number. You most likely do not need to translate this")); } if(m_numSelectedAtoms >= 4 && m_selectedAtoms[3]) { // Display a label on the fourth atom pos = m_selectedAtoms[3]->pos(); radius = 0.18 + widget->radius(m_selectedAtoms[3]); textPos = *pos + textRelPos; glColor3f(0.0,1.0,1.0); widget->painter()->drawText(textPos, tr("*4", "*4 is a number. You most likely do not need to translate this")); } // glLoadIdentity(); glColor3f(1.0,1.0,1.0); widget->painter()->drawText(labelPos, tr("Distance(s):")); glColor3f(1.0,1.0,0.0); // For localized measurements, e.g. 1,02 in Europe. QString format("%L1"); widget->painter()->drawText(distancePos[0], format.arg(m_vector[0].norm(), 0, 'f', 3) + QString::fromUtf8(" Å")); if(m_numSelectedAtoms >= 3) { glColor3f(1.0,1.0,1.0); widget->painter()->drawText(angleLabelPos, QString(tr("Angle:"))); glColor3f(0.8, 0.8, 0.8); widget->painter()->drawText(anglePos, format.arg(m_angle, 0, 'f', 1) + QString::fromUtf8("°")); glColor3f(0.0,1.0,1.0); widget->painter()->drawText(distancePos[1], format.arg(m_vector[1].norm(), 0, 'f', 3) + QString::fromUtf8(" Å")); } if(m_numSelectedAtoms >= 4) { glColor3f(1.0, 1.0, 1.0); widget->painter()->drawText(dihedralLabelPos, QString(tr("Dihedral:"))); glColor3f(0.6, 0.6, 0.6); widget->painter()->drawText(dihedralPos, format.arg(m_dihedral, 0, 'f', 1) + QString::fromUtf8("°")); glColor3f(1.0, 1.0, 1.0); widget->painter()->drawText(distancePos[2], format.arg(m_vector[2].norm(), 0, 'f', 3) + QString::fromUtf8(" Å")); } // If there are three atoms selected, draw the angle in question if(m_numSelectedAtoms >= 3 && m_selectedAtoms[0] && m_selectedAtoms[1] && m_selectedAtoms[2]) { const Vector3d *origin = m_selectedAtoms[1]->pos(); glEnable(GL_BLEND); glDepthMask(GL_FALSE); widget->painter()->setColor(0, 1.0, 0, 0.3); widget->painter()->drawShadedSector(*origin, *m_selectedAtoms[0]->pos(), *m_selectedAtoms[2]->pos(), radius); glDepthMask(GL_TRUE); glDisable(GL_BLEND); widget->painter()->setColor(1.0, 1.0, 1.0, 1.0); widget->painter()->drawArc(*origin, *m_selectedAtoms[0]->pos(), *m_selectedAtoms[2]->pos(), radius, 1.0); } } } return true; } } Q_EXPORT_PLUGIN2(clickmeasuretool, Avogadro::ClickMeasureToolFactory) avogadro-1.1.1/libavogadro/src/tools/zmatrixdialog.h0000644000175000001440000000350012250371054021771 0ustar marcususers/********************************************************************** ZMatrixTool - ZMatrix Manipulation Tool for Avogadro Copyright (C) 2009 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ZMATRIXDIALOG_H #define ZMATRIXDIALOG_H #include #include #include #include "ui_zmatrixdialog.h" namespace Avogadro { class Molecule; class GLWidget; class ZMatrixModel; class ZMatrixDialog : public QDialog { Q_OBJECT public: explicit ZMatrixDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); ~ZMatrixDialog(); public slots: void setMolecule(Molecule *molecule); void setGLWidget(GLWidget *widget); private: Ui::ZMatrixDialog ui; ZMatrixModel *m_zMatrixModel; QPointer m_molecule; QPointer m_glwidget; private slots: void addAtom(); void removeAtom(); void importSelectedAtoms(); }; } // End namespace Avogadro #endif // ZMATRIXDIALOG_H avogadro-1.1.1/libavogadro/src/tools/navigatesettingswidget.ui0000644000175000001440000000224312250371054024067 0ustar marcususers NavigateSettingsWidget 0 0 400 300 Form Display visual cues true Qt::Vertical 20 262 avogadro-1.1.1/libavogadro/src/tools/autorotatetool.h0000644000175000001440000000714412250371054022210 0ustar marcususers/********************************************************************** AutoRotateTool - Auto Rotation Tool for Avogadro Copyright (C) 2007,2008 by Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef AUTOROTATETOOL_H #define AUTOROTATETOOL_H #include #include #include #include #include class QPushButton; class QSlider; namespace Avogadro { /** * @class AutoRotateTool * @brief Automatic molecule rotation * @author Marcus D. Hanwell * * This class handles the automatic rotation of the view * so that the molecule can be shown in more detail. */ class AutoRotateTool : public Tool { Q_OBJECT AVOGADRO_TOOL("AutoRotate", tr("AutoRotate"), tr("Automatic rotation of molecules"), tr("AutoRotate Settings")) public: //! Constructor AutoRotateTool(QObject *parent = 0); //! Destructor virtual ~AutoRotateTool(); //! \name Tool Methods //@{ //! \brief Callback methods for ui.actions on the canvas. /*! */ virtual QUndoCommand* mousePressEvent(GLWidget*, QMouseEvent*); virtual QUndoCommand* mouseReleaseEvent(GLWidget*, QMouseEvent*); virtual QUndoCommand* mouseMoveEvent(GLWidget*, QMouseEvent*); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget*, QMouseEvent*) { return 0; } virtual QUndoCommand* wheelEvent(GLWidget*, QWheelEvent*) { return 0; } virtual int usefulness() const; virtual bool paint(GLWidget *widget); virtual QWidget* settingsWidget(); public Q_SLOTS: void setXRotation(int i); void setYRotation(int i); void setZRotation(int i); void toggleTimer(); void resetRotations(); void enableTimer(); void disableTimer(); Q_SIGNALS: void resetRotation(int i); protected: GLWidget* m_glwidget; bool m_leftButtonPressed; // Rotation about x and y bool m_midButtonPressed; // Rotation about z QPoint m_startDraggingPosition; // Starting position of mouse QPoint m_currentDraggingPosition; // Current dragging position int m_timerId; int m_xRotation; int m_yRotation; int m_zRotation; int m_maxRotation; void rotate() const; void timerEvent(QTimerEvent* event); QWidget* m_settingsWidget; QPushButton* m_buttonStartStop; QSlider* m_sliderX; QSlider* m_sliderY; QSlider* m_sliderZ; private Q_SLOTS: void settingsWidgetDestroyed(); }; class AutoRotateToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(AutoRotateTool) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/autoopttool.qrc0000644000175000001440000000015112250371054022041 0ustar marcususers autoopttool.png avogadro-1.1.1/libavogadro/src/tools/measure.png0000644000175000001440000000623512250371054021121 0ustar marcususersPNG  IHDRa pHYs B(x OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxēMkSAܶ~i")"  ?pB*FDt#ōfp!.\Q1HR"Qsqls=3JD4Vu{l^wXQ4"<]Y)9!Ju<81Tu[O.3'_}vEѷϫ̳7_t+ez>x*RY3ݛ.v::\>W/g!*Źl*[t3iEi߃@m瓏ɜ8@OA$ @r7z#/$| /,ЕJϘV_TsR W*U?JܱfBDP@mm7~Zc^r1ݦd%A)Aeg 7[9IENDB`avogadro-1.1.1/libavogadro/src/tools/bondcentrictool.qrc0000644000175000001440000000015112250371054022640 0ustar marcususers bondcentric.png avogadro-1.1.1/libavogadro/src/tools/skeletontree.h0000644000175000001440000001627112250371054021630 0ustar marcususers/********************************************************************** BondCentricTool - Bond Centric Manipulation Tool for Avogadro Copyright (C) 2007 by Shahzad Ali Copyright (C) 2007 by Ross Braithwaite Copyright (C) 2007 by James Bunt Some portions Copyright (C) 2009 by Geoffrey Hutchison Revisions to use Eigen/Geometry directly, rather than home-grown Quaternions This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SKELETONTREE_H #define SKELETONTREE_H #include #include #include namespace Avogadro { class Atom; class Bond; class Molecule; /** * @class Node * @brief A node of a tree used to represent a molecule in a skeletal-like structure. * @author Shahzad Ali, Ross Braithwaite, James Bunt * * This class represents a node in a particular tree structure. It holds * an Atom and pointers to any number of child nodes. */ class Node : public QObject { Q_OBJECT protected: Atom* m_atom; QList m_nodes; public: //! Constructor /** * Constructs a new Node. * * @param atom The Atom contained within this new Node. */ Node(Atom *atom); //! Deconstructor virtual ~Node(); /** * Retrieves a pointer to the Atom stored in this Node. * * @return A pointer to the Atom stored in this Node. */ Atom *atom(); /** * Gets all of this Node's children. * * @return A QList of pointers to all the children Nodes of this Node. */ QList nodes(); /** * Determines whether or not this Node is a leaf in the SkeletonTree. * * @return True if this Node is a leaf in the tree, false otherwise. */ bool isLeaf(); /** * Determines whether or not this Node, or any of the Nodes in the (sub)tree * that this Node is the root of, contains the given Atom. * * @param atom The Atom being searched for in this Node's (sub)tree. * * @return True if the Atom was found in the (sub)tree, false otherwise. */ bool containsAtom(Atom* atom); /** * Adds the given Node as a child of this Node. * * @param node The Node being made a child of this Node. */ void addNode(Node* node); /** * Removes the given Node from this Node's children. * * @param node The Node being removed from this Node's children. */ void removeNode(Node* node); }; /** * @class SkeletonTree * @brief Skeletal representation and manipulation of a Molecule. * @author Shahzad Ali, Ross Braithwaite, James Bunt * * This class creates and provides methods to manipulate a Molecule * recursively (e.g., change a bond length or angle) */ class SkeletonTree : public QObject { Q_OBJECT public: //! Constructor SkeletonTree(); //! Destructor virtual ~SkeletonTree(); /** * Returns the root node Atom. * * @return The root node Atom at which the tree is made. */ Atom *rootAtom(); /** * Returns the Bond associated with the root Atom. * * @return The Bond associated with the root Atom. */ Bond *rootBond(); /** * Populates the tree from the Molecule, using the root node Atom. * * @param rootAtom The root node Atom. * @param rootBond The Bond at which the root node Atom is. * @param molecule The Molecule to make the tree. */ void populate(Atom *rootAtom, Bond *rootBond, Molecule* molecule); /** * Translates the Atoms attached to root node skeleton by the given amount * in the 3 standard directions (x, y, and z). * * @param translationVector The translation vector for the skeleton. */ void skeletonTranslate(const Eigen::Vector3d &translationVector); /** * Rotates the Atoms attached to root node skeleton, by the given angle. * * @param angle The angle the skeleton rotate in radians. * @param rotationAxis The axis of rotation for the skeleton * @param centerVector The position of the center of rotation for the * skeleton. */ void skeletonRotate(double angle, const Eigen::Vector3d &rotationAxis, const Eigen::Vector3d ¢erVector); /** * Recusively prints the children of this Node and child Nodes. * * @param n The root Node of the tree to print. */ void printSkeleton(Node* n); /** * Determines whether or not this SkeletonTree contains a Node with the * given Atom. * * @param atom The Atom being searched for in this SkeletonTree. * * @return True if the Atom was found in the tree, false otherwise. */ bool containsAtom(Atom *atom); protected: Node *m_rootNode; //The root node, tree Bond *m_rootBond; //The bond at which root node atom is attached Node *m_endNode; //A temporary tree. private: /** * Recursively populates the tree, where the Node node is the root * node to start from. * It makes sure not to form loops. * * @param mol The molecule to form the tree for. * @param node The root node to form the tree from. * @param bond The bond at which the root node atom exists. */ void recursivePopulate(Molecule* mol, Node* node, Bond* bond); /** * Recursively translates the Atoms attached to Node n in the skeleton by * the given location. * @param n The node atom and the atoms attached to it to translates. * @param x New x location * @param y New y location * @param z New z location */ void recursiveTranslate(Node* n, const Eigen::Vector3d &translationVector); /** * Recursivly rotates the Atoms attached to Node n in skeleton, * around the Vector centerVector. * * @param n Current node to rotate * @param rotationMatrix The rotation matrix for the transformation. * @param centerVector Center location to rotate around. */ void recursiveRotate(Node* n, const Eigen::Transform3d &rotationMatrix); }; } // End namespace Avogadro #endif /*__SKELETONTREE_H */ avogadro-1.1.1/libavogadro/src/tools/manipulatetool.h0000644000175000001440000000732212250371054022156 0ustar marcususers/********************************************************************** ManipulateTool - Manipulation Tool for Avogadro Copyright (C) 2007 by Marcus D. Hanwell Copyright (C) 2007 by Geoffrey R. Hutchison Copyright (C) 2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #ifndef MANIPULATETOOL_H #define MANIPULATETOOL_H #include #include #include #include #include #include #include #include #include class QAbstractButton; namespace Avogadro { /** * @class ManipulateTool * @brief Manipulate the position of atoms * @author Marcus D. Hanwell * * This tool enables the manipulation of the position of * the selected atoms. */ class Eyecandy; class ManipulateSettingsWidget; class ManipulateTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Manipulate", tr("Manipulate"), tr("Translate, rotate, and adjust atoms and fragments"), tr("Manipulate Settings")) public: //! Constructor ManipulateTool(QObject *parent = 0); //! Deconstructor virtual ~ManipulateTool(); virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *, QMouseEvent *) { return 0; } virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual int usefulness() const; virtual bool paint(GLWidget *widget); virtual QWidget* settingsWidget(); private slots: void buttonClicked(QAbstractButton *button); protected: Atom * m_clickedAtom; bool m_leftButtonPressed; // rotation bool m_midButtonPressed; // scale / zoom bool m_rightButtonPressed; // translation Eigen::Vector3d m_selectedPrimitivesCenter; // centroid of selected atoms QPoint m_lastDraggingPosition; Eyecandy *m_eyecandy; ManipulateSettingsWidget *m_settingsWidget; double m_yAngleEyecandy, m_xAngleEyecandy; void applyManualManipulation(); void zoom(GLWidget *widget, const Eigen::Vector3d *goal, double delta) const; void translate(GLWidget *widget, const Eigen::Vector3d *what, const QPoint &from, const QPoint &to) const; void rotate(GLWidget *widget, const Eigen::Vector3d *center, double deltaX, double deltaY) const; void tilt(GLWidget *widget, const Eigen::Vector3d *center, double delta) const; }; class ManipulateToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(ManipulateTool) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/aligntool.h0000644000175000001440000000542112250371054021107 0ustar marcususers/********************************************************************** AlignTool - AlignTool Tool for Avogadro Copyright (C) 2008 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ALIGNTOOL_H #define ALIGNTOOL_H #include #include #include namespace Avogadro { class Atom; class AlignTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Align", tr("Align"), tr("Align molecules to a Cartesian axis"), tr("Align Settings")) public: //! Constructor AlignTool(QObject *parent = 0); //! Destructor virtual ~AlignTool(); //! \name Tool Methods //@{ //! \brief Callback methods for ui.actions on the canvas. /*! */ virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual bool paint(GLWidget *widget); virtual QWidget *settingsWidget(); public Q_SLOTS: void axisChanged(int axis); void alignChanged(int align); void align(); private: // Guarded pointers, for storing pointers to things that might go poof... QPointer m_molecule; QVarLengthArray, 2> m_selectedAtoms; int m_numSelectedAtoms; int m_axis; int m_alignType; QWidget *m_settingsWidget; private Q_SLOTS: void settingsWidgetDestroyed(); }; class AlignToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(AlignTool); }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/zmatrixtool.qrc0000644000175000001440000000014112250371054022043 0ustar marcususers zmatrix.png avogadro-1.1.1/libavogadro/src/tools/manipulatetool.cpp0000644000175000001440000004060612250371054022513 0ustar marcususers/********************************************************************** ManipulateTool - Manipulation Tool for Avogadro Copyright (C) 2007 by Marcus D. Hanwell Copyright (C) 2007,2011 by Geoffrey R. Hutchison Copyright (C) 2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Some code is based on Open Babel For more information, see This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ***********************************************************************/ #include "manipulatetool.h" #include "eyecandy.h" #include "moveatomcommand.h" #include "ui_manipulatesettingswidget.h" #include #include #include #include #include #include #include #include #include using Eigen::Vector3d; using Eigen::Transform3d; using Eigen::AngleAxisd; namespace Avogadro { class ManipulateSettingsWidget : public QWidget, public Ui::ManipulateSettingsWidget { public: ManipulateSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; ManipulateTool::ManipulateTool(QObject *parent) : Tool(parent), m_clickedAtom(0), m_leftButtonPressed(false), m_midButtonPressed(false), m_rightButtonPressed(false), m_eyecandy(new Eyecandy), m_settingsWidget(0) { m_eyecandy->setColor(1.0, 0.0, 0.0, 1.0); QAction *action = activateAction(); action->setIcon(QIcon(QString::fromUtf8(":/manipulate/manipulate.png"))); action->setToolTip(tr("Manipulation Tool (F10)\n\n" "Left Mouse: \tClick and drag to move atoms\n" "Middle Mouse: Click and drag to move atoms further away or closer\n" "Right Mouse: \tClick and drag to rotate selected atoms.\n" "Double-Click: \tReset the view.")); action->setShortcut(Qt::Key_F10); } ManipulateTool::~ManipulateTool() { delete m_eyecandy; } int ManipulateTool::usefulness() const { return 600000; } QWidget* ManipulateTool::settingsWidget() { if (!m_settingsWidget) { m_settingsWidget = new ManipulateSettingsWidget(qobject_cast(parent())); // each time, we should reset to 0 values connect(m_settingsWidget->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(buttonClicked(QAbstractButton*))); } return m_settingsWidget; } void ManipulateTool::applyManualManipulation() { if (!m_settingsWidget) return; // Before doing anything, save an undo state // Get the current GLWidget for the manipulation GLWidget *widget = GLWidget::current(); QUndoStack *stack = widget->undoStack(); QUndoCommand* undo = new MoveAtomCommand(widget->molecule()); if(stack && undo) stack->push(undo); // Get translations and rotations double x = m_settingsWidget->xTranslateSpinBox->value(); double y = m_settingsWidget->yTranslateSpinBox->value(); double z = m_settingsWidget->zTranslateSpinBox->value(); Eigen::Vector3d translate(x, y, z); Eigen::Vector3d center(0.0, 0.0, 0.0); // Check if we're rotating around the origin or the centroid if (m_settingsWidget->rotateComboBox->currentIndex() == 1) { if (widget->selectedPrimitives().size()) { foreach(Primitive *p, widget->selectedPrimitives()) if (p->type() == Primitive::AtomType) { Atom *atom = static_cast(p); center += *(atom->pos()); } center /= widget->selectedPrimitives().size(); } else { center = widget->molecule()->center(); } } // Settings are in degrees #ifndef DEG_TO_RAD #define DEG_TO_RAD 0.0174532925 #endif double xRotate = m_settingsWidget->xRotateSpinBox->value() * DEG_TO_RAD; double yRotate = m_settingsWidget->yRotateSpinBox->value() * DEG_TO_RAD; double zRotate = m_settingsWidget->zRotateSpinBox->value() * DEG_TO_RAD; Eigen::Transform3d rotation; rotation.matrix().setIdentity(); rotation.translation() = center; rotation.rotate(AngleAxisd(xRotate, Vector3d::UnitX()) * AngleAxisd(yRotate, Vector3d::UnitY()) * AngleAxisd(zRotate, Vector3d::UnitZ())); rotation.translate(- center); Eigen::Vector3d tempPos; // from the translation if (widget->selectedPrimitives().size()) { foreach(Primitive *p, widget->selectedPrimitives()) if (p->type() == Primitive::AtomType) { Atom *atom = static_cast(p); tempPos = translate + *(atom->pos()); atom->setPos(rotation * tempPos); } } else { foreach(Atom *atom, widget->molecule()->atoms()) { tempPos = translate + *(atom->pos()); atom->setPos(rotation * tempPos); } } widget->molecule()->update(); } void ManipulateTool::buttonClicked(QAbstractButton *button) { if (!m_settingsWidget) return; if (m_settingsWidget->buttonBox->buttonRole(button) == QDialogButtonBox::ApplyRole) { applyManualManipulation(); } else { // reset values m_settingsWidget->xTranslateSpinBox->setValue(0.0); m_settingsWidget->yTranslateSpinBox->setValue(0.0); m_settingsWidget->zTranslateSpinBox->setValue(0.0); m_settingsWidget->xRotateSpinBox->setValue(0.0); m_settingsWidget->yRotateSpinBox->setValue(0.0); m_settingsWidget->zRotateSpinBox->setValue(0.0); } // clear focus from the boxes (they eat up keystrokes) m_settingsWidget->xTranslateSpinBox->clearFocus(); m_settingsWidget->yTranslateSpinBox->clearFocus(); m_settingsWidget->zTranslateSpinBox->clearFocus(); m_settingsWidget->xRotateSpinBox->clearFocus(); m_settingsWidget->yRotateSpinBox->clearFocus(); m_settingsWidget->zRotateSpinBox->clearFocus(); } void ManipulateTool::zoom(GLWidget *widget, const Vector3d *goal, double delta) const { // Set the cursor - this needs to be reset to Qt::ArrowCursor after widget->setCursor(Qt::SizeVerCursor); // Move the selected atom(s) in to or out of the screen Vector3d transformedGoal = widget->camera()->modelview() * *goal; double distanceToGoal = transformedGoal.norm(); double t = ZOOM_SPEED * delta; const double minDistanceToGoal = 2.0 * CAMERA_NEAR_DISTANCE; double u = minDistanceToGoal / distanceToGoal - 1.0; if( fabs(t) > fabs(u) ) { t = u; } Vector3d atomTranslation = widget->camera()->backTransformedZAxis() * t; if (widget->selectedPrimitives().size()) foreach(Primitive *p, widget->selectedPrimitives()) if (p->type() == Primitive::AtomType) static_cast(p)->setPos(atomTranslation + *static_cast(p)->pos()); if (m_clickedAtom && !widget->isSelected(m_clickedAtom)) m_clickedAtom->setPos(atomTranslation + *m_clickedAtom->pos()); widget->molecule()->update(); } void ManipulateTool::translate(GLWidget *widget, const Eigen::Vector3d *what, const QPoint &from, const QPoint &to) const { // Set the cursor - this needs to be reset to Qt::ArrowCursor after // Currently, there's a Qt/Mac bug -- SizeAllCursor looks like a spreadsheet cursor #ifdef Q_WS_MAC widget->setCursor(Qt::CrossCursor); #else widget->setCursor(Qt::SizeAllCursor); #endif // Translate the selected atoms in the x and y sense of the view Vector3d fromPos = widget->camera()->unProject(from, *what); Vector3d toPos = widget->camera()->unProject(to, *what); Vector3d atomTranslation = toPos - fromPos; if (widget->selectedPrimitives().size()) foreach(Primitive *p, widget->selectedPrimitives()) if (p->type() == Primitive::AtomType) static_cast(p)->setPos(atomTranslation + *static_cast(p)->pos()); if (m_clickedAtom && !widget->isSelected(m_clickedAtom)) m_clickedAtom->setPos(atomTranslation + *m_clickedAtom->pos()); widget->molecule()->update(); } void ManipulateTool::rotate(GLWidget *widget, const Eigen::Vector3d *center, double deltaX, double deltaY) const { // Set the cursor - this needs to be reset to Qt::ArrowCursor after widget->setCursor(Qt::ClosedHandCursor); // Rotate the selected atoms about the center // rotate only selected primitives Transform3d fragmentRotation; fragmentRotation.matrix().setIdentity(); fragmentRotation.translation() = *center; fragmentRotation.rotate( AngleAxisd(deltaY * ROTATION_SPEED, widget->camera()->backTransformedXAxis())); fragmentRotation.rotate( AngleAxisd(deltaX * ROTATION_SPEED, widget->camera()->backTransformedYAxis())); fragmentRotation.translate(- *center); foreach(Primitive *p, widget->selectedPrimitives()) if (p->type() == Primitive::AtomType) static_cast(p)->setPos(fragmentRotation * *static_cast(p)->pos()); widget->molecule()->update(); } void ManipulateTool::tilt(GLWidget *widget, const Eigen::Vector3d *center, double delta) const { // Tilt the selected atoms about the center Transform3d fragmentRotation; fragmentRotation.matrix().setIdentity(); fragmentRotation.translation() = *center; fragmentRotation.rotate(AngleAxisd(delta * ROTATION_SPEED, widget->camera()->backTransformedZAxis())); fragmentRotation.translate(- *center); foreach(Primitive *p, widget->selectedPrimitives()) if (p->type() == Primitive::AtomType) static_cast(p)->setPos(fragmentRotation * *static_cast(p)->pos()); widget->molecule()->update(); } QUndoCommand* ManipulateTool::mousePressEvent(GLWidget *widget, QMouseEvent *event) { event->accept(); m_lastDraggingPosition = event->pos(); // Make sure there aren't modifier keys clicked with the left button // If the user has a Mac and only a one-button mouse, everything // looks like a left button if (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::NoModifier) { m_leftButtonPressed = true; // Set the cursor - this needs to be reset to Qt::ArrowCursor after // Currently, there's a Qt/Mac bug -- SizeAllCursor looks like a spreadsheet cursor #ifdef Q_WS_MAC widget->setCursor(Qt::CrossCursor); #else widget->setCursor(Qt::SizeAllCursor); #endif } // On a Mac, click and hold the Shift key if (event->buttons() & Qt::MidButton || (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::ShiftModifier)) { m_midButtonPressed = true; // Set the cursor - this needs to be reset to Qt::ArrowCursor after widget->setCursor(Qt::SizeVerCursor); } // On a Mac, click and hold either the Command or Control Keys // (Control or Meta in Qt-speak) if (event->buttons() & Qt::RightButton || (event->buttons() & Qt::LeftButton && (event->modifiers() == Qt::ControlModifier || event->modifiers() == Qt::MetaModifier))) { m_rightButtonPressed = true; // Set the cursor - this needs to be reset to Qt::ArrowCursor after widget->setCursor(Qt::ClosedHandCursor); } m_clickedAtom = widget->computeClickedAtom(event->pos()); // update eyecandy angle m_xAngleEyecandy = 0; m_yAngleEyecandy = 0; widget->update(); QUndoCommand* undo = new MoveAtomCommand(widget->molecule()); return undo; } QUndoCommand* ManipulateTool::mouseReleaseEvent(GLWidget *widget, QMouseEvent *event) { Q_UNUSED(event); m_leftButtonPressed = false; m_midButtonPressed = false; m_rightButtonPressed = false; m_clickedAtom = 0; // Set the cursor back to the default cursor widget->setCursor(Qt::ArrowCursor); widget->update(); QUndoCommand* undo = new MoveAtomCommand(widget->molecule()); return undo; } QUndoCommand* ManipulateTool::mouseMoveEvent(GLWidget *widget, QMouseEvent *event) { if(!widget->molecule()) return 0; // Get the currently selected atoms from the view PrimitiveList currentSelection = widget->selectedPrimitives(); QPoint deltaDragging = event->pos() - m_lastDraggingPosition; // Manipulation can be performed in two ways - centred on an individual atom // update eyecandy angle m_xAngleEyecandy += deltaDragging.x() * ROTATION_SPEED; m_yAngleEyecandy += deltaDragging.y() * ROTATION_SPEED; if (m_clickedAtom) { event->accept(); if (m_leftButtonPressed) { // translate the molecule following mouse movement translate(widget, m_clickedAtom->pos(), m_lastDraggingPosition, event->pos()); } else if (m_midButtonPressed) { if (deltaDragging.y() == 0) // Perform the rotation tilt(widget, m_clickedAtom->pos(), deltaDragging.x()); else // Perform the zoom toward clicked atom zoom(widget, m_clickedAtom->pos(), deltaDragging.y()); } else if (m_rightButtonPressed) { // Atom centred rotation rotate(widget, m_clickedAtom->pos(), deltaDragging.x(), deltaDragging.y()); } } else if (currentSelection.size()) { event->accept(); // Some atoms are selected - work out where the center is m_selectedPrimitivesCenter.setZero(); int numPrimitives = 0; foreach(Primitive *hit, currentSelection) { if (hit->type() == Primitive::AtomType) { Atom *atom = static_cast(hit); m_selectedPrimitivesCenter += *atom->pos(); numPrimitives++; } } m_selectedPrimitivesCenter /= numPrimitives; if (m_leftButtonPressed) { // translate the molecule following mouse movement translate(widget, &m_selectedPrimitivesCenter, m_lastDraggingPosition, event->pos()); } else if (m_midButtonPressed) { // Perform the rotation tilt(widget, &m_selectedPrimitivesCenter, deltaDragging.x()); // Perform the zoom toward molecule center zoom(widget, &m_selectedPrimitivesCenter, deltaDragging.y()); } else if(m_rightButtonPressed) { // rotation around the center of the selected atoms rotate(widget, &m_selectedPrimitivesCenter, deltaDragging.x(), deltaDragging.y()); } } m_lastDraggingPosition = event->pos(); widget->update(); return 0; } QUndoCommand* ManipulateTool::wheelEvent(GLWidget*, QWheelEvent*) { return 0; } bool ManipulateTool::paint(GLWidget *widget) { int selectedSize = widget->selectedPrimitives().size(); if(m_clickedAtom) { if(m_leftButtonPressed) { m_eyecandy->drawTranslation(widget, m_clickedAtom, m_clickedAtom->pos()); } else if(m_midButtonPressed) { m_eyecandy->drawZoom(widget, m_clickedAtom, m_clickedAtom->pos()); } else if(m_rightButtonPressed && selectedSize) { m_eyecandy->drawRotation(widget, m_clickedAtom, m_xAngleEyecandy, m_yAngleEyecandy, m_clickedAtom->pos()); } } else if(selectedSize) { if(m_leftButtonPressed) { m_eyecandy->drawTranslation(widget, &m_selectedPrimitivesCenter, 1.5, 0.); } else if(m_midButtonPressed) { m_eyecandy->drawZoom(widget, &m_selectedPrimitivesCenter, 1.5); } else if(m_rightButtonPressed) { m_eyecandy->drawRotation(widget, &m_selectedPrimitivesCenter, 3., m_xAngleEyecandy, m_yAngleEyecandy); } } return true; } } // end namespace Avogadro Q_EXPORT_PLUGIN2(manipulatetool, Avogadro::ManipulateToolFactory) avogadro-1.1.1/libavogadro/src/tools/selectrotatetool.h0000644000175000001440000001016612250371054022515 0ustar marcususers/********************************************************************** SelectRotateTool - Selection and Rotation Tool for Avogadro Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2007,2008 by Marcus D. Hanwell Copyright (C) 2010 Konstantin Tokarev Copyright (C) 2011 Geoffrey R. Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef SELECTROTATETOOL_H #define SELECTROTATETOOL_H #include #include #include #include #include #include class QMouseEvent; class QWheelEvent; class QComboBox; class QVBoxLayout; namespace Avogadro { class Molecule; class SelectRotateTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Selection", tr("Selection"), tr("Select atoms, residues, and molecules"), tr("Selection Settings")) public: //! Constructor SelectRotateTool(QObject *parent = 0); //! Deconstructor virtual ~SelectRotateTool(); //! \name Tool Methods //@{ //! \brief Callback methods for ui.actions on the canvas. /*! */ virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual int usefulness() const; virtual QWidget *settingsWidget(); virtual bool paint(GLWidget *widget); void setSelectionMode(int i); int selectionMode() const; public Q_SLOTS: void selectionModeChanged( int index ); void defineCentroid(bool); void defineCenterOfMass(bool); void changeAtomColor(); void resetAtomColor(); void changeAtomLabel(); void resetAtomLabel(); void changeAtomRadius(); void resetAtomRadius(); protected: void selectionBox(float sx, float sy, float ex, float ey); bool m_leftButtonPressed; // rotation bool m_rightButtonPressed; bool m_movedSinceButtonPressed; bool m_doubleClick; //! Temporary var for adding selection box bool m_selectionBox; QPoint m_initialDraggingPosition; QPoint m_lastDraggingPosition; Eigen::Vector3d m_selectedPrimitivesCenter; // centroid of selected atoms GLWidget *m_widget; // for defining centroids int m_selectionMode; // atom, residue, molecule QList m_hits; QComboBox *m_comboSelectionMode; QVBoxLayout *m_layout; QWidget *m_settingsWidget; QMenu *m_atomMenu; QMenu *m_bondMenu; Primitive *m_currentPrimitive; private Q_SLOTS: void settingsWidgetDestroyed(); }; class SelectRotateToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(SelectRotateTool) }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/drawtool.cpp0000644000175000001440000007451112250371054021313 0ustar marcususers/********************************************************************** DrawTool - Tool for drawing molecules Copyright (C) 2007,2008 Donald Ephraim Curtis Copyright (C) 2007-2009 Marcus D. Hanwell Copyright (C) 2008 Tim Vandermeersch Some Portions Copyright (C) 2007-2008 Geoffrey Hutchison This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "drawtool.h" #include "drawcommand.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using Eigen::Vector3d; using OpenBabel::OBForceField; namespace Avogadro { DrawTool::DrawTool(QObject *parent) : Tool(parent), m_beginAtomAdded(false), m_endAtomAdded(false), m_beginAtom(0), m_endAtom(0), m_element(6), m_bond(0), m_bondOrder(1), m_prevAtomElement(0), m_prevBond(0), m_prevBondOrder(0), m_addHydrogens(true), m_hydrogenCommand(0), m_comboElements(0), m_addHydrogensCheck(0), m_periodicTable(0), m_settingsWidget(0) { QAction *action = activateAction(); action->setIcon(QIcon(QString::fromUtf8(":/draw/draw.png"))); action->setToolTip(tr("Draw Tool (F8)\n\n" "Left Mouse: \tClick and Drag to create Atoms and Bonds\n" "Right Mouse: \tDelete Atom")); action->setShortcut(Qt::Key_F8); m_forceField = OBForceField::FindForceField("MMFF94"); } DrawTool::~DrawTool() { if(m_settingsWidget) { m_settingsWidget->deleteLater(); } } int DrawTool::usefulness() const { return 5000000; } // Handle a user click QUndoCommand* DrawTool::mousePressEvent(GLWidget *widget, QMouseEvent *event) { // check if we are still doing a drag (prevents crash when clicking the right button while dragging) if (m_beginAtom || m_endAtom) { event->accept(); return 0; } Molecule *molecule = widget->molecule(); if(!molecule) return 0; QUndoCommand *undo = 0; m_buttons = event->buttons(); m_movedSinceButtonPressed = false; m_lastDraggingPosition = event->pos(); m_initialDraggingPosition = event->pos(); //! List of hits from a selection/pick m_hits = widget->hits(event->pos().x()-SEL_BOX_HALF_SIZE, event->pos().y()-SEL_BOX_HALF_SIZE, SEL_BOX_SIZE, SEL_BOX_SIZE); // The draw tool always accepts mouse presses event->accept(); if(m_buttons & Qt::LeftButton) { // Try to acquire a write lock in order to change the molecule - before // returning this lock must be unlocked if (!molecule->lock()->tryLockForWrite()) return 0; // The user clicked on an atom if(m_hits.size() && (m_hits[0].type() == Primitive::AtomType)) { // "alchemy" -- change this atom to a new element m_beginAtom = molecule->atom(m_hits[0].name()); if(m_beginAtom && (m_beginAtom->atomicNumber() != m_element)) { m_prevAtomElement = m_beginAtom->atomicNumber(); m_beginAtom->setAtomicNumber(m_element); } } else if(m_hits.size() && (m_hits[0].type() == Primitive::BondType)) { // "alchemy" -- change the bond order of this bond Bond *bond = molecule->bond(m_hits[0].name()); if (bond) { // if we can't find the bond, we can't do anything here // do not try to change X-H bond order when adjust hydrogens is on if(m_addHydrogens) { if (molecule->atomById(bond->beginAtomId())->isHydrogen() || molecule->atomById(bond->endAtomId())->isHydrogen()) { molecule->lock()->unlock(); return 0; } } unsigned int bondOrder, oldBondOrder; oldBondOrder = bond->order(); switch (oldBondOrder) { case 1: bondOrder = 2; break; case 2: bondOrder = 3; break; case 3: default: bondOrder = 1; } bond->setOrder(bondOrder); undo = new ChangeBondOrderDrawCommand(widget->molecule(), bond, oldBondOrder, m_addHydrogens); } } else { // a genuine click in new space == create a new atom m_beginAtom = addAtom(widget, event->pos()); m_beginAtomAdded = true; m_forceField->SetIgnoreAtom(m_beginAtom->index()); } // hits molecule->lock()->unlock(); } // left button return undo; } QUndoCommand* DrawTool::mouseMoveEvent(GLWidget *widget, QMouseEvent *event) { Molecule *molecule = widget->molecule(); if(!molecule) return 0; // The draw tool always accepts mouse presses event->accept(); if((m_buttons & Qt::LeftButton) && m_beginAtom) { // Acquire a write lock - must unlock before returning if (!molecule->lock()->tryLockForWrite()) return 0; m_hits = widget->hits(event->pos().x()-SEL_BOX_HALF_SIZE, event->pos().y()-SEL_BOX_HALF_SIZE, SEL_BOX_SIZE, SEL_BOX_SIZE); bool hitBeginAtom = false; Atom *existingAtom = 0; if(m_hits.size()) { // parse our hits. we want to know // if we hit another existing atom that is not // the m_endAtom which we created for(int i = 0; i < m_hits.size() && !hitBeginAtom; ++i) { if(m_hits[i].type() == Primitive::AtomType) { // hit the beginning atom: either moved here from somewhere else // or were already here. if(m_hits[i].name() == m_beginAtom->index()) hitBeginAtom = true; else if(!m_endAtom) { // we don't yet have an end atom but // hit another atom on screen -- bond to this existingAtom = molecule->atom(m_hits[i].name()); // if we're auto-adding hydrogens and we hit a hydrogen // look for another target // (unless we've selected hydrogen as our element of choice) if (m_addHydrogens && existingAtom->isHydrogen() && m_element != 1) { existingAtom = NULL; continue; } } else if(m_hits[i].name() != m_endAtom->index()) { // hit a new atom which isn't our end atom existingAtom = molecule->atom(m_hits[i].name()); if (m_addHydrogens && existingAtom->isHydrogen() && m_element != 1) { existingAtom = NULL; continue; } } } // end hits.type == AtomType } } // end parsing hits if(hitBeginAtom) { // we came back to our original atom -- undo the bond if(m_endAtom) { molecule->removeAtom(m_endAtom); // this also deletes bonds m_endAtomAdded = false; m_bond = 0; m_endAtom = 0; m_prevAtomElement = m_beginAtom->atomicNumber(); m_beginAtom->setAtomicNumber(m_element); m_forceField->UnsetIgnoreAtom(); } else if(m_bond) { // Atom *oldAtom = (Atom *)m_bond->GetEndAtom(); // oldAtom->DeleteBond(m_bond); molecule->removeBond(m_bond); m_bond=0; m_prevAtomElement = m_beginAtom->atomicNumber(); m_beginAtom->setAtomicNumber(m_element); } } else { if (m_prevAtomElement) { // special case, dragging from hydrogen when adjust hydrogens is enabled.... if (m_addHydrogens && (m_prevAtomElement == 1)) { // do not adjust hydrogens, the AddBond command will do this m_hydrogenCommand = new ChangeElementDrawCommand(widget->molecule(), m_beginAtom, m_prevAtomElement, 0); } else m_beginAtom->setAtomicNumber(m_prevAtomElement); m_prevAtomElement = 0; } // we hit an existing atom != m_endAtom if(existingAtom) { m_forceField->UnsetIgnoreAtom(); m_forceField->SetFixAtom(existingAtom->index()); Bond *existingBond = molecule->bond(m_beginAtom, existingAtom); if(!existingBond) { if(m_prevBond) { m_prevBond->setOrder(m_prevBondOrder); m_prevBond = 0; m_prevBondOrder = 0; } if(m_bond) { m_bond->setEnd(existingAtom); if(m_endAtom) { molecule->removeAtom(m_endAtom); m_endAtomAdded = false; m_endAtom = 0; } } else { m_bond = addBond(molecule, m_beginAtom, existingAtom); } } // end no existing bond else { if(m_prevBond && m_prevBond != existingBond) { m_prevBond->setOrder(m_prevBondOrder); m_prevBond = 0; m_prevBondOrder = 0; } if(!m_prevBond) { m_prevBond = existingBond; m_prevBondOrder = existingBond->order(); existingBond->setOrder(m_bondOrder); } if(m_bond && m_bond != existingBond) { if(m_endAtom) { // will delete bonds too (namely m_bond) qDebug() << "Deleting m_endAtom and bond" << m_endAtom->id() << m_bond->id(); molecule->removeAtom(m_endAtom); m_endAtomAdded = false; m_endAtom = 0; } else { molecule->removeBond(m_bond); } m_bond = 0; } } // existing bond } // end existing atom // (!existingAtom && !hitBeginAtom) else if(!m_endAtom) { if(m_prevBond) { m_prevBond->setOrder(m_prevBondOrder); m_prevBond = 0; m_prevBondOrder = 0; } m_endAtom = addAtom(widget, event->pos()); m_endAtomAdded = true; m_forceField->SetIgnoreAtom(m_endAtom->index()); if(!m_bond) m_bond = addBond(molecule, m_beginAtom, m_endAtom); else m_bond->setEnd(m_endAtom); } else // we're moving -- stretch a bond moveAtom(widget, m_endAtom, event->pos()); } molecule->lock()->unlock(); // If we have done stuff then trigger a redraw of the molecule molecule->update(); } return 0; } QUndoCommand* DrawTool::mouseReleaseEvent(GLWidget *widget, QMouseEvent *event) { QUndoCommand *undo = 0; Molecule *molecule = widget->molecule(); // The draw tool always accepts mouse presses event->accept(); // Acquire a write lock, before returning release the lock if (!molecule->lock()->tryLockForWrite()) return 0; if(m_buttons & Qt::LeftButton && (event->modifiers() == Qt::NoModifier)) { if(m_beginAtomAdded || m_bond) { // only add hydrogens to the atoms if it's the only thing // we've drawn. else addbonds will adjust hydrogens. AdjustHydrogens::Options atomAdjustHydrogens = AdjustHydrogens::Never; if(m_addHydrogens) { // if no bond then add on undo and redo if(!m_bond) { atomAdjustHydrogens = AdjustHydrogens::Always; } // if bond then only remove on undo, rest is handled by bond else { atomAdjustHydrogens = AdjustHydrogens::OnUndo; } } // we added At least the beginAtom or we created a bond to // an existing atom or to endAtom that we also created AddAtomDrawCommand *beginAtomDrawCommand = 0; if(m_beginAtomAdded) { beginAtomDrawCommand = new AddAtomDrawCommand(widget->molecule(), m_beginAtom, atomAdjustHydrogens); beginAtomDrawCommand->setText(tr("Draw Atom")); } AddAtomDrawCommand *endAtomDrawCommand = 0; if(m_endAtomAdded) { endAtomDrawCommand = new AddAtomDrawCommand(widget->molecule(), m_endAtom, atomAdjustHydrogens); endAtomDrawCommand->setText(tr("Draw Atom")); } AddBondDrawCommand *bondCommand = 0; if(m_bond) { AdjustHydrogens::Options adjBegin = AdjustHydrogens::Never; AdjustHydrogens::Options adjEnd = AdjustHydrogens::Never; if(m_addHydrogens) { if (m_hydrogenCommand) { // don't try to remove/add hydrogens to the hydrogen which will be changed // by the ChangeElement command... adjBegin = adjEnd = AdjustHydrogens::AddOnRedo | AdjustHydrogens::RemoveOnUndo; if (!m_endAtomAdded) { foreach (unsigned long id, m_bond->endAtom()->neighbors()) { Atom *nbr = widget->molecule()->atomById(id); if (nbr->isHydrogen()) adjEnd |= AdjustHydrogens::RemoveOnRedo | AdjustHydrogens::AddOnUndo; } } } else { adjBegin = adjEnd = AdjustHydrogens::AddOnRedo | AdjustHydrogens::RemoveOnUndo; // pre-existing atoms might need extra work if (!m_beginAtomAdded) { foreach (unsigned long id, m_bond->beginAtom()->neighbors()) { Atom *nbr = widget->molecule()->atomById(id); if (nbr->isHydrogen()) adjBegin |= AdjustHydrogens::RemoveOnRedo | AdjustHydrogens::AddOnUndo; } } if (!m_endAtomAdded) { foreach (unsigned long id, m_bond->endAtom()->neighbors()) { Atom *nbr = widget->molecule()->atomById(id); if (nbr->isHydrogen()) adjEnd |= AdjustHydrogens::RemoveOnRedo | AdjustHydrogens::AddOnUndo; } } } // if we're creating a bond to or from a hydrogen, do NOT adjust the hydrogens ever if (m_bond->beginAtom()->isHydrogen() || m_bond->endAtom()->isHydrogen()) { adjBegin = AdjustHydrogens::Never; adjEnd = AdjustHydrogens::Never; } } bondCommand = new AddBondDrawCommand(widget->molecule(), m_bond, adjBegin, adjEnd); bondCommand->setText(tr("Draw Bond")); } // Set the actual undo command -- combining sequence if possible // we can have a beginAtom w/out bond or endAtom // we can have bond w/out endAtom (i.e., to an existing atom) // we cannot have endAtom w/out bond if( endAtomDrawCommand || (bondCommand && (beginAtomDrawCommand || m_hydrogenCommand)) ) { UndoSequence *seq = new UndoSequence(); seq->setText(tr("Draw")); if(m_hydrogenCommand) { seq->append(m_hydrogenCommand); } if(beginAtomDrawCommand) { seq->append(beginAtomDrawCommand); } if(endAtomDrawCommand) { seq->append(endAtomDrawCommand); } seq->append(bondCommand); undo = seq; } else if(bondCommand) { undo = bondCommand; } else { undo = beginAtomDrawCommand; } } else if (m_prevBond) { // bug #1898118 // both beginAtom, endAtom and bond exist, but the bond order has changed if (m_prevBond->order() != m_prevBondOrder) { // do not try to change X-H bond order when adjust hydrogens is on if(m_addHydrogens) { if (molecule->atomById(m_prevBond->beginAtomId())->isHydrogen() || molecule->atomById(m_prevBond->endAtomId())->isHydrogen()) { m_prevBond->setOrder(1); // restore molecule->lock()->unlock(); return 0; } } undo = new ChangeBondOrderDrawCommand(widget->molecule(), m_prevBond, m_prevBondOrder, m_addHydrogens); undo->setText(tr("Change Bond Order")); } } else if (m_beginAtom) { if (m_hydrogenCommand) { ChangeElementDrawCommand* cmd = dynamic_cast(m_hydrogenCommand); if(cmd) cmd->setAdjustHydrogens(m_addHydrogens); undo = cmd; // beginAtom exists, but we have no bond, we change the element } else if (m_beginAtom->atomicNumber() != m_prevAtomElement) { undo = new ChangeElementDrawCommand(widget->molecule(), m_beginAtom, m_prevAtomElement, m_addHydrogens); } } } // Either use a three-button mouse // or hold down the Command key (ControlModifier in Qt notation) // or the Control key (MetaModifier in Qt notation) else if( (m_buttons & Qt::RightButton) || ((m_buttons & Qt::LeftButton) && (event->modifiers() == Qt::ControlModifier || event->modifiers() == Qt::MetaModifier)) ) { m_hits = widget->hits(event->pos().x()-SEL_BOX_HALF_SIZE, event->pos().y()-SEL_BOX_HALF_SIZE, SEL_BOX_SIZE, SEL_BOX_SIZE); if(m_hits.size()) { // We did a right-click on an atom or bond -- delete it! if(m_hits[0].type() == Primitive::AtomType) { // don't delete H-? atom when adjust hydrogens is on Atom *atom = widget->molecule()->atom(m_hits[0].name()); if (m_addHydrogens && atom->isHydrogen() && int(atom->valence())) { molecule->lock()->unlock(); return undo; } undo = new DeleteAtomDrawCommand(widget->molecule(), m_hits[0].name(), m_addHydrogens); } else if(m_hits[0].type() == Primitive::BondType) { // don't delete ?-H bonds when adjust hydrogens is on Bond *bond = widget->molecule()->bond(m_hits[0].name()); if (m_addHydrogens) { if (molecule->atomById(bond->beginAtomId())->isHydrogen() || molecule->atomById(bond->endAtomId())->isHydrogen()) { molecule->lock()->unlock(); return undo; } } undo = new DeleteBondDrawCommand(widget->molecule(), m_hits[0].name(), m_addHydrogens); } } } // clean up after drawing m_beginAtom=0; m_bond=0; m_endAtom=0; m_prevBond=0; m_prevBondOrder=0; m_prevAtomElement=0; m_beginAtomAdded=false; m_endAtomAdded=false; m_hydrogenCommand = 0; m_forceField->UnsetIgnoreAtom(); m_forceField->UnsetFixAtom(); molecule->lock()->unlock(); return undo; } // Zoom the camera QUndoCommand* DrawTool::wheelEvent(GLWidget*, QWheelEvent*) { return 0; } QUndoCommand* DrawTool::keyPressEvent(GLWidget *, QKeyEvent *event) { bool arrowKey = true; switch (event->key()) { case Qt::Key_Left: // Left arrow case Qt::Key_Right: // Right arrow case Qt::Key_Up: // Up arrow case Qt::Key_Down: // Down arrow break; default: arrowKey = false; // Maybe we can set this as an element symbol break; } if (arrowKey || event->text().isEmpty()) { event->ignore(); return 0; } // Check if it's a number key 1-4 int bondOrder = 0; switch (event->key()) { case Qt::Key_1: case Qt::Key_hyphen: // - case Qt::Key_AsciiTilde: // ~ bondOrder = 1; break; case Qt::Key_2: case Qt::Key_Equal: // = bondOrder = 2; break; case Qt::Key_3: case Qt::Key_NumberSign: // # bondOrder = 3; break; case Qt::Key_4: case Qt::Key_Dollar: // $ bondOrder = 4; break; default: break; } if (bondOrder) { setBondOrder(bondOrder); if (bondOrder < 4) m_comboBondOrder->setCurrentIndex(bondOrder - 1); event->accept(); return 0; } if (m_keyPressBuffer.isEmpty()) // this is the first character typed // wait for 2 seconds, then clear the buffer // this ensures we can get multi-character elements QTimer::singleShot(2000, this, SLOT(clearKeyPressBuffer())); m_keyPressBuffer.append(event->text()); // try setting an element symbol from this string int element = OpenBabel::etab.GetAtomicNum(m_keyPressBuffer.toAscii().data()); if (element == 0) { // Invalid element. If we've tried 2-character elements, start over. if (m_keyPressBuffer.length() > 3) { clearKeyPressBuffer(); } event->ignore(); return 0; } event->accept(); customElementChanged(element); return 0; } Atom *DrawTool::addAtom(GLWidget *widget, const QPoint& p) { Atom *atom = widget->molecule()->addAtom(); moveAtom(widget, atom, p); atom->setAtomicNumber(element()); return atom; } void DrawTool::moveAtom(GLWidget *widget, Atom *atom, const QPoint& p) { Vector3d refPoint; if(m_beginAtom) { refPoint = *m_beginAtom->pos(); } else { refPoint = widget->center(); } Eigen::Vector3d addAtomPos = widget->camera()->unProject(p, refPoint); atom->setPos(addAtomPos); } Bond *DrawTool::addBond(Molecule *molecule, Atom *beginAtom, Atom *endAtom) { Bond *bond = molecule->addBond(); bond->setOrder(bondOrder()); bond->setBegin(beginAtom); bond->setEnd(endAtom); return bond; } // // Settings widget // and associated signals/slots // void DrawTool::elementChanged( int index ) { // The popup menu returns this signal // First case: we pick a common element from the popup if (index < m_elementsIndex.size() - 1) { setElement(m_elementsIndex[index]); } // Second case: we have a custom element "Other..." // Bring up the periodic table widget else { if (!m_periodicTable) { // call the method, which will create the widget if needed m_periodicTable = new PeriodicTableView(settingsWidget()); connect(m_periodicTable, SIGNAL(elementChanged(int)), this, SLOT(customElementChanged(int))); } m_periodicTable->show(); m_periodicTable->setFocus(Qt::PopupFocusReason); // give it keyboard focus } } void DrawTool::customElementChanged( int index ) { // Set the element so we can draw with it setElement(index); // Check to see if we already have this in the comboBox list // If not, we get back -1 and need to create a new item int comboItem = m_elementsIndex.indexOf(index); if (comboItem != -1) { m_comboElements->setCurrentIndex(comboItem); return; // we found it in the list, so we're done } // Find where we should put the new entry // (i.e., in order by atomic number) int position = 0; foreach(int entry, m_elementsIndex) { // Two cases: entry > index -- insert the new element before this one // Or... we hit the "Other" menu choice -- also insert here if (entry > index || entry == 0) break; ++position; } // And now we set up a new entry into the combo list QString entryName(ElementTranslator::name(index)); // (e.g., "Hydrogen") entryName += " (" + QString::number(index) + ')'; m_elementsIndex.insert(position, index); m_comboElements->insertItem(position, entryName); m_comboElements->setCurrentIndex(position); } void DrawTool::setElement( int index ) { m_element = index; } int DrawTool::element() const { return m_element; } void DrawTool::bondOrderChanged( int index ) { setBondOrder(index + 1); } void DrawTool::setBondOrder( int index ) { m_bondOrder = index; } int DrawTool::bondOrder() const { return m_bondOrder; } void DrawTool::setAddHydrogens( int state ) { m_addHydrogens = (state == Qt::Checked); } int DrawTool::addHydrogens() const { return m_addHydrogens; } QWidget *DrawTool::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new QWidget; QLabel *labelElement = new QLabel(tr("Element:")); labelElement->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); labelElement->setMaximumHeight(15); // Small popup with 10 most common elements for organic chemistry // (and extra for "other" to bring up periodic table window) m_comboElements = new QComboBox(m_settingsWidget); m_comboElements->addItem(ElementTranslator::name(1) + " (1)"); m_elementsIndex.append(1); m_comboElements->addItem(ElementTranslator::name(5) + " (5)"); m_elementsIndex.append(5); m_comboElements->addItem(ElementTranslator::name(6) + " (6)"); m_elementsIndex.append(6); m_comboElements->addItem(ElementTranslator::name(7) + " (7)"); m_elementsIndex.append(7); m_comboElements->addItem(ElementTranslator::name(8) + " (8)"); m_elementsIndex.append(8); m_comboElements->addItem(ElementTranslator::name(9) + " (9)"); m_elementsIndex.append(9); m_comboElements->addItem(ElementTranslator::name(15) + " (15)"); m_elementsIndex.append(15); m_comboElements->addItem(ElementTranslator::name(16) + " (16)"); m_elementsIndex.append(16); m_comboElements->addItem(ElementTranslator::name(17) + " (17)"); m_elementsIndex.append(17); m_comboElements->addItem(ElementTranslator::name(35) + " (35)"); m_elementsIndex.append(35); m_comboElements->addItem(tr("Other...")); m_elementsIndex.append(0); m_comboElements->setCurrentIndex(2); QLabel *labelBO = new QLabel(tr("Bond Order:")); labelBO->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); labelBO->setMaximumHeight(15); m_comboBondOrder = new QComboBox(m_settingsWidget); m_comboBondOrder->addItem(tr("Single")); m_comboBondOrder->addItem(tr("Double")); m_comboBondOrder->addItem(tr("Triple")); // Improve the layout of the widgets QHBoxLayout* tmp = new QHBoxLayout; tmp->addWidget(m_comboElements); tmp->addStretch(1); QHBoxLayout* tmp2 = new QHBoxLayout; tmp2->addWidget(m_comboBondOrder); tmp2->addStretch(1); QGridLayout* grid = new QGridLayout; grid->addWidget(labelElement, 0, 0, Qt::AlignRight); grid->addLayout(tmp, 0, 1); grid->addWidget(labelBO, 1, 0, Qt::AlignRight); grid->addLayout(tmp2, 1, 1); m_addHydrogensCheck = new QCheckBox(tr("Adjust Hydrogens"), m_settingsWidget); m_addHydrogensCheck->setCheckState(m_addHydrogens ? Qt::Checked : Qt::Unchecked); m_layout = new QVBoxLayout(); m_layout->addLayout(grid); m_layout->addWidget(m_addHydrogensCheck); m_layout->addStretch(1); m_settingsWidget->setLayout(m_layout); connect(m_comboElements, SIGNAL(currentIndexChanged(int)), this, SLOT(elementChanged(int))); connect(m_comboBondOrder, SIGNAL(currentIndexChanged(int)), this, SLOT(bondOrderChanged(int))); connect(m_addHydrogensCheck, SIGNAL(stateChanged(int)), this, SLOT(setAddHydrogens(int))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); } return m_settingsWidget; } void DrawTool::settingsWidgetDestroyed() { m_settingsWidget = 0; } void DrawTool::clearKeyPressBuffer() { m_keyPressBuffer.clear(); } void DrawTool::writeSettings(QSettings &settings) const { Tool::writeSettings(settings); settings.setValue("currentElement", element()); settings.setValue("addHydrogens", m_addHydrogens); settings.setValue("bondOrder", m_bondOrder); } void DrawTool::readSettings(QSettings &settings) { Tool::readSettings(settings); m_addHydrogens = settings.value("addHydrogens", true).toBool(); setElement(settings.value("currentElement", 6).toInt()); setBondOrder(settings.value("bondOrder", 1).toInt()); if (m_comboElements) { int index = 0; for (int i = 0; i < m_elementsIndex.size() - 1; ++i) if (m_elementsIndex.at(i) == element()) index = i; m_comboElements->setCurrentIndex(index); } if(m_addHydrogensCheck) m_addHydrogensCheck->setCheckState(m_addHydrogens ? Qt::Checked : Qt::Unchecked); } } Q_EXPORT_PLUGIN2(drawtool, Avogadro::DrawToolFactory) avogadro-1.1.1/libavogadro/src/tools/pythonsettingswidget.ui0000644000175000001440000000210112250371054023603 0ustar marcususers PythonSettingsWidget 0 0 353 505 0 0 Python Settings Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop avogadro-1.1.1/libavogadro/src/tools/autoopttool.png0000644000175000001440000000613612250371054022051 0ustar marcususersPNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤM/QϝiS$I+M6;B ҕĆD$D]#ADGBGSԴw^Jl<^`78 Ϻ 6ܥX8~/r )qߍe16 b|FD 0<"FrS8q[|28RS[_x\]-(aUѳo\q[G@)[wP]^, xX@qhk)"- E{B8eD/ۍ | l ksqjIFҩnpt{ecOY㧛 Qpu:oTQvD3iMARDIENDB`avogadro-1.1.1/libavogadro/src/tools/zmatrixtool.h0000644000175000001440000000476312250371054021523 0ustar marcususers/********************************************************************** ZMatrixTool - Z Matrix Tool Copyright (C) 2009 Marcus D. Hanwell This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef ZMATRIXTOOL_H #define ZMATRIXTOOL_H #include #include namespace Avogadro { class ZMatrixDialog; class ZMatrixTool : public Tool { Q_OBJECT AVOGADRO_TOOL("Z-Matrix", tr("Z-Matrix"), tr("Create/edit a z-matrix"), tr("Z-Matrix Settings")) public: //! Constructor explicit ZMatrixTool(QObject *parent = 0); //! Destructor virtual ~ZMatrixTool(); virtual QUndoCommand* mousePressEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseReleaseEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseMoveEvent(GLWidget *widget, QMouseEvent *event); virtual QUndoCommand* mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event) { return 0; } virtual QUndoCommand* wheelEvent(GLWidget *widget, QWheelEvent *event); virtual bool paint(GLWidget *widget); virtual QWidget *settingsWidget(); private slots: void showZMatrixDialog(); private: // Guarded pointers, for storing pointers to things that might go poof... QPointer m_molecule; QPointer m_glwidget; QPointer m_settingsWidget; QPointer m_zMatrixDialog; }; class ZMatrixToolFactory : public QObject, public PluginFactory { Q_OBJECT Q_INTERFACES(Avogadro::PluginFactory) AVOGADRO_TOOL_FACTORY(ZMatrixTool); }; } // end namespace Avogadro #endif // ZMATRIXTOOL_H avogadro-1.1.1/libavogadro/src/tools/eyecandy.h0000644000175000001440000000504112250371054020716 0ustar marcususers/********************************************************************** Eyecandy - Draw arrows etc. inside the Avogadro scene Copyright (C) 2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef EYECANDY_H #define EYECANDY_H #include namespace Avogadro { class GLWidget; class Color; class Atom; class Eyecandy { public: Eyecandy(); ~Eyecandy(); void setColor(const double red, const double green, const double blue, const double alpha); Color *color(); void drawRotation(GLWidget *widget, const Eigen::Vector3d *center, double radius, double xAngle, double yAngle); void drawRotation(GLWidget *widget, Atom *clickedAtom, double xAngle, double yAngle, const Eigen::Vector3d *center); void drawTranslation(GLWidget *widget, const Eigen::Vector3d *center, double size, double shift); void drawTranslation(GLWidget *widget, Atom *clickedAtom, const Eigen::Vector3d *center); void drawZoom(GLWidget *widget, const Eigen::Vector3d *center, double radius); void drawZoom(GLWidget *widget, Atom *clickedAtom, const Eigen::Vector3d *center); private: void drawRotationHorizRibbon(); void drawRotationVertRibbon(); void drawRotationRightArrow(); void drawRotationLeftArrow(); void drawRotationUpArrow(); void drawRotationDownArrow(); double m_yAngleStart, m_yAngleEnd, m_xAngleStart, m_xAngleEnd; double m_radius; Eigen::Vector3d m_center, m_xAxis, m_yAxis, m_zAxis; Color *m_color; }; } #endif avogadro-1.1.1/libavogadro/src/tools/draw.png0000644000175000001440000000051612250371054020411 0ustar marcususersPNG  IHDRĴl; pHYs  d_IDATx10gXXx!4^Ach/VAxSeܝ>H^R$RJIEdYFYwaRy\C/Pk? aGP 8E_a,zA¾G v* _ZSU}{Jk1FDD1u$I"J)QJ GWb34+q48m׾K+"$I"]I]x Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "selectrotatetool.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef Q_WS_MAC # include #else # include #endif using namespace std; using namespace OpenBabel; using namespace Eigen; namespace Avogadro { SelectRotateTool::SelectRotateTool(QObject *parent) : Tool(parent), m_selectionBox(false), m_widget(0), m_selectionMode(0), m_settingsWidget(0) { QAction *action = activateAction(); action->setIcon(QIcon(QString::fromUtf8(":/select/select.png"))); action->setToolTip(tr("Selection Tool (F11)\n\n" "Left Mouse: \tClick to pick individual atoms, residues, or fragments\n" "\tDrag to select a range of atoms\n" "Right Mouse: \tClick outside the molecule to clear selection\n" "Use Ctrl to toggle the selection and shift to add to the selection.\n" "Double-Click: \tSelect an entire fragment.")); action->setShortcut(Qt::Key_F11); m_atomMenu = new QMenu; m_atomMenu->addAction("Change radius...", this, SLOT(changeAtomRadius())); m_atomMenu->addAction("Reset radius", this, SLOT(resetAtomRadius())); m_atomMenu->addSeparator(); m_atomMenu->addAction("Change label...", this, SLOT(changeAtomLabel())); m_atomMenu->addAction("Reset label", this, SLOT(resetAtomLabel())); m_atomMenu->addSeparator(); m_atomMenu->addAction("Change color...", this, SLOT(changeAtomColor())); m_atomMenu->addAction("Reset color", this, SLOT(resetAtomColor())); m_bondMenu = new QMenu; m_bondMenu->addAction("Change label...", this, SLOT(changeAtomLabel())); m_bondMenu->addAction("Reset label", this, SLOT(resetAtomLabel())); } SelectRotateTool::~SelectRotateTool() { if(m_settingsWidget) m_settingsWidget->deleteLater(); m_atomMenu->deleteLater(); m_bondMenu->deleteLater(); } int SelectRotateTool::usefulness() const { return 500000; } QUndoCommand* SelectRotateTool::mousePressEvent(GLWidget *widget, QMouseEvent *event) { m_movedSinceButtonPressed = false; m_doubleClick = false; // set true if we get a doubleClick event m_lastDraggingPosition = event->pos(); m_initialDraggingPosition = event->pos(); m_widget = widget; // save for defining centroids //! List of hits from a selection/pick m_hits = widget->hits(event->pos().x()-SEL_BOX_HALF_SIZE, event->pos().y()-SEL_BOX_HALF_SIZE, SEL_BOX_SIZE, SEL_BOX_SIZE); if (event->buttons() & Qt::LeftButton && !m_hits.size()) { m_leftButtonPressed = true; event->accept(); m_selectionBox = true; } else if (event->buttons() & Qt::LeftButton) { m_leftButtonPressed = true; } else m_leftButtonPressed = false; if (event->buttons() & Qt::RightButton) { m_rightButtonPressed = true; } else m_rightButtonPressed = false; if(!m_selectionBox) { widget->setCursor(Qt::CrossCursor); } return 0; } QUndoCommand* SelectRotateTool::mouseReleaseEvent(GLWidget *widget, QMouseEvent *event) { m_widget = widget; // save for defining centroids // Reset the cursor widget->setCursor(Qt::ArrowCursor); // Double clicks are handled in that event, not here if (m_doubleClick) { m_doubleClick = false; return 0; } Molecule *molecule = widget->molecule(); if(!molecule) return 0; if(!m_hits.size()) m_selectionBox = false; QList hitList; if (m_leftButtonPressed && !m_movedSinceButtonPressed && m_hits.size()) { event->accept(); // user didn't move the mouse -- regular picking, not selection box // we'll assemble separate "hit lists" of selected atoms and residues // (e.g., if we're in residue selection mode, picking an atom // will select the whole residue foreach (const GLHit& hit, m_hits) { if(hit.type() == Primitive::AtomType) // Atom selection { Atom *atom = molecule->atom(hit.name()); hitList.append(atom); break; } else if(hit.type() == Primitive::BondType) // Bond selection { Bond *bond = molecule->bond(hit.name()); hitList.append(bond); break; } // else if(hit.type() == Primitive::ResidueType) { // Residue *res = static_cast(molecule->GetResidue(hit.name())); // hitList.append(res); // break; } switch (m_selectionMode) { case 2: // residue foreach(Primitive *hit, hitList) { if (hit->type() == Primitive::AtomType) { Atom *atom = static_cast(hit); // If the atom is unselected, select the whole residue bool select = !widget->isSelected(atom); // Since the atom doesn't know to which residue it belongs, // we iterate over all residues and check if the atom is in // the current residue. foreach (Residue *residue, molecule->residues()) { QList atoms = residue->atoms(); if (atoms.contains(atom->id())) { QList neighborList; // add the atoms foreach (unsigned long id, atoms) neighborList.append(molecule->atomById(id)); // add the bonds foreach (unsigned long id, residue->bonds()) neighborList.append(molecule->bondById(id)); widget->setSelected(neighborList, select); } } // end for(residues) } else if (hit->type() == Primitive::BondType) { Bond *bond = static_cast(hit); // If the bond is unselected, select the whole residue bool select = !widget->isSelected(bond); // Since the bond doesn't know to which residue it belongs, // we iterate over all residues and check if the bond is in // the current residue. foreach (Residue *residue, molecule->residues()) { QList bonds = residue->bonds(); if (bonds.contains(bond->id())) { QList neighborList; // add the atoms foreach (unsigned long id, residue->atoms()) neighborList.append(molecule->atomById(id)); // add the bonds foreach (unsigned long id, bonds) neighborList.append(molecule->bondById(id)); widget->setSelected(neighborList, select); } } // end for(residues) } } // end for(hits) break; case 3: // molecule foreach(Primitive *hit, hitList) { if (hit->type() == Primitive::AtomType) { Atom *atom = static_cast(hit); // if this atom is unselected, select the whole fragment bool select = !widget->isSelected(atom); QList neighborList; // We really want the "connected fragment" since a Molecule can contain // multiple user-visible molecule fragments // we can use either BFS or DFS interators -- look for the connected fragment OpenBabel::OBMol mol = molecule->OBMol(); OpenBabel::OBMolAtomDFSIter iter(mol, atom->index() + 1); Atom *tmpNeighbor; do { tmpNeighbor = molecule->atom(iter->GetIdx() - 1); neighborList.append(tmpNeighbor); // we want to find all bonds on this site // (obviously all bonds will be in this fragment) FOR_BONDS_OF_ATOM(b, *iter) neighborList.append(molecule->bond(b->GetIdx())); } while ((iter++).next()); // this returns false when we've gone looped through the fragment widget->setSelected(neighborList, select); } else if (hit->type() == Primitive::BondType) { Bond *bond = static_cast(hit); // if this atom is unselected, select the whole fragment bool select = !widget->isSelected(bond); QList neighborList; // We really want the "connected fragment" since a Molecule can contain // multiple user-visible molecule fragments // we can use either BFS or DFS interators -- look for the connected fragment OpenBabel::OBMol mol = molecule->OBMol(); OpenBabel::OBMolAtomDFSIter iter(mol, molecule->atomById(bond->beginAtomId())->index() + 1); Atom *tmpNeighbor; do { tmpNeighbor = molecule->atom(iter->GetIdx() - 1); neighborList.append(tmpNeighbor); // we want to find all bonds on this site // (obviously all bonds will be in this fragment) FOR_BONDS_OF_ATOM(b, *iter) neighborList.append(molecule->bond(b->GetIdx())); } while ((iter++).next()); // this returns false when we've gone looped through the fragment widget->setSelected(neighborList, select); } // FIXME -- also need to handle other primitive hit types // (e.g., if we hit a residue, bond, etc.) } break; case 1: // atom/bond default: // If the Ctrl modifier is pressed toggle selection if(event->modifiers() & Qt::ControlModifier) widget->toggleSelected(hitList); else { // If the shift modifier key is not pressed clear previous selection if (!(event->modifiers() & Qt::ShiftModifier)) widget->clearSelected(); widget->setSelected(hitList, true); } break; } } else if(m_leftButtonPressed && m_movedSinceButtonPressed && !m_hits.size()) { // Selection box picking - need to figure out which atoms were in the box int sx = qMin(m_initialDraggingPosition.x(), m_lastDraggingPosition.x()); int ex = qMax(m_initialDraggingPosition.x(), m_lastDraggingPosition.x()); int sy = qMin(m_initialDraggingPosition.y(), m_lastDraggingPosition.y()); int ey = qMax(m_initialDraggingPosition.y(), m_lastDraggingPosition.y()); int w = ex-sx; int h = ey-sy; // (sx, sy) = Upper left most position. // (ex, ey) = Bottom right most position. QList hits = widget->hits(sx, sy, w, h); // Iterate over the hits foreach(const GLHit& hit, hits) { if(hit.type() == Primitive::AtomType) // Atom selection { Atom *atom = molecule->atom(hit.name()); if(!hitList.contains(atom)) hitList.append(atom); } if(hit.type() == Primitive::BondType) // Bond selection { Bond *bond = molecule->bond(hit.name()); if(!hitList.contains(bond)) hitList.append(bond); } } // If the modifier key is not pressed clear the previous selection if (!(event->modifiers() & Qt::ShiftModifier)) widget->clearSelected(); // Set the selection widget->setSelected(hitList, true); } else if(m_rightButtonPressed && !m_movedSinceButtonPressed) { if (m_hits.size() == 1 && m_hits.at(0).type() == Primitive::BondType) { // Bond selection Bond *bond = molecule->bond(m_hits.at(0).name()); hitList.append(bond); widget->clearSelected(); widget->toggleSelected(hitList); m_currentPrimitive = bond; m_bondMenu->exec(event->globalPos()); widget->clearSelected(); } else if (m_hits.size()) { foreach(const GLHit& hit, m_hits) { if(hit.type() == Primitive::AtomType) {// Atom selection Atom *atom = molecule->atom(hit.name()); hitList.append(atom); widget->toggleSelected(hitList); m_currentPrimitive = atom; m_atomMenu->exec(event->globalPos()); widget->clearSelected(); break; } } } else { widget->clearSelected(); } event->accept(); } widget->update(); return 0; } QUndoCommand* SelectRotateTool::mouseMoveEvent(GLWidget *widget, QMouseEvent *event) { if (m_leftButtonPressed && !m_hits.size()) { event->accept(); if( ( event->pos() - m_initialDraggingPosition ).manhattanLength() > 2 ) m_movedSinceButtonPressed = true; m_lastDraggingPosition = event->pos(); widget->update(); } else /*if (m_leftButtonPressed)*/ { if((event->pos() - m_initialDraggingPosition).manhattanLength() > 2) m_movedSinceButtonPressed = true; else event->accept(); } return 0; } QUndoCommand* SelectRotateTool::mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event) { m_doubleClick = true; // events are handled here, not in release event // Intuitively, select this connected component m_widget = widget; // save for defining centroids Molecule *molecule = widget->molecule(); if(!molecule) return 0; // List of hits from a selection/pick m_hits = widget->hits(event->pos().x()-SEL_BOX_HALF_SIZE, event->pos().y()-SEL_BOX_HALF_SIZE, SEL_BOX_SIZE, SEL_BOX_SIZE); if (!m_hits.size()) { event->ignore(); return 0; // ignore this } // OK, we have some hits event->accept(); QList hitList; foreach (const GLHit& hit, m_hits) { if(hit.type() == Primitive::AtomType) // Atom selection { Atom *atom = molecule->atom(hit.name()); hitList.append(atom); break; } else if(hit.type() == Primitive::BondType) // Bond selection { Bond *bond = molecule->bond(hit.name()); hitList.append(bond); break; } } // OK, now process the hitList to select the connected component foreach(Primitive *hit, hitList) { if (hit->type() == Primitive::AtomType) { Atom *atom = static_cast(hit); QList neighborList; // We really want the "connected fragment" since a Molecule can contain // multiple user-visible molecule fragments // we can use either BFS or DFS interators -- look for the connected fragment OpenBabel::OBMol mol = molecule->OBMol(); OpenBabel::OBMolAtomDFSIter iter(mol, atom->index() + 1); Atom *tmpNeighbor; do { tmpNeighbor = molecule->atom(iter->GetIdx() - 1); neighborList.append(tmpNeighbor); // we want to find all bonds on this site // (obviously all bonds will be in this fragment) FOR_BONDS_OF_ATOM(b, *iter) neighborList.append(molecule->bond(b->GetIdx())); } while ((iter++).next()); // this returns false when we've gone looped through the fragment widget->setSelected(neighborList, true); } else if (hit->type() == Primitive::BondType) { Bond *bond = static_cast(hit); QList neighborList; // We really want the "connected fragment" since a Molecule can contain // multiple user-visible molecule fragments // we can use either BFS or DFS interators -- look for the connected fragment OpenBabel::OBMol mol = molecule->OBMol(); OpenBabel::OBMolAtomDFSIter iter(mol, molecule->atomById(bond->beginAtomId())->index() + 1); Atom *tmpNeighbor; do { tmpNeighbor = molecule->atom(iter->GetIdx() - 1); neighborList.append(tmpNeighbor); // we want to find all bonds on this site // (obviously all bonds will be in this fragment) FOR_BONDS_OF_ATOM(b, *iter) neighborList.append(molecule->bond(b->GetIdx())); } while ((iter++).next()); // this returns false when we've gone looped through the fragment widget->setSelected(neighborList, true); } // end of handling bond primitives } // end of processing hits // Reset the cursor widget->setCursor(Qt::ArrowCursor); return 0; } QUndoCommand* SelectRotateTool::wheelEvent(GLWidget*, QWheelEvent*) { return 0; } void SelectRotateTool::selectionBox(float sx, float sy, float ex, float ey) { glPushMatrix(); glLoadIdentity(); GLdouble projection[16]; glGetDoublev(GL_PROJECTION_MATRIX,projection); GLdouble modelview[16]; glGetDoublev(GL_MODELVIEW_MATRIX,modelview); GLint viewport[4]; glGetIntegerv(GL_VIEWPORT,viewport); GLdouble startPos[3]; GLdouble endPos[3]; gluUnProject(float(sx), viewport[3] - float(sy), 0.1, modelview, projection, viewport, &startPos[0], &startPos[1], &startPos[2]); gluUnProject(float(ex), viewport[3] - float(ey), 0.1, modelview, projection, viewport, &endPos[0], &endPos[1], &endPos[2]); glPushAttrib(GL_ALL_ATTRIB_BITS); glPushMatrix(); glLoadIdentity(); glEnable(GL_BLEND); glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); glColor4f(1.0, 1.0, 1.0, 0.2); glBegin(GL_POLYGON); glVertex3f(startPos[0],startPos[1],startPos[2]); glVertex3f(startPos[0],endPos[1],startPos[2]); glVertex3f(endPos[0],endPos[1],startPos[2]); glVertex3f(endPos[0],startPos[1],startPos[2]); glEnd(); startPos[2] += 0.0001; glDisable(GL_BLEND); glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINE_LOOP); glVertex3f(startPos[0],startPos[1],startPos[2]); glVertex3f(startPos[0],endPos[1],startPos[2]); glVertex3f(endPos[0],endPos[1],startPos[2]); glVertex3f(endPos[0],startPos[1],startPos[2]); glEnd(); glPopMatrix(); glPopAttrib(); glPopMatrix(); } void SelectRotateTool::setSelectionMode(int i) { m_selectionMode = i; } int SelectRotateTool::selectionMode() const { return m_selectionMode; } void SelectRotateTool::selectionModeChanged( int index ) { setSelectionMode(index + 1); } void SelectRotateTool::defineCentroid(bool) { if (!m_widget) return; // Reset the center m_selectedPrimitivesCenter.setZero(); // loop through selected atoms QList selectedAtoms = m_widget->selectedPrimitives().subList(Primitive::AtomType); if (selectedAtoms.isEmpty()) { // no selected atoms, we want the global center m_selectedPrimitivesCenter = m_widget->center(); } else { // Calculate the centroid of the selection foreach(Primitive *item, selectedAtoms) { // Atom::pos() returns a pointer to the position m_selectedPrimitivesCenter += *(static_cast(item)->pos()); } m_selectedPrimitivesCenter /= static_cast(selectedAtoms.size()); } // OK, now create a dummy atom at that point if there isn't already one there. bool got=false; foreach(Atom* atom, m_widget->molecule()->atoms()) { if ( atom->atomicNumber() == 0 && m_selectedPrimitivesCenter.isApprox(*atom->pos(), 1.0E-08)) got=true; } if ( ! got ) { Atom *atom = m_widget->molecule()->addAtom(); atom->setAtomicNumber(0); atom->setPos(m_selectedPrimitivesCenter); m_widget->update(); } } void SelectRotateTool::defineCenterOfMass(bool) { if (!m_widget) return; // loop through selected atoms QList selectedAtoms = m_widget->selectedPrimitives().subList(Primitive::AtomType); if (selectedAtoms.isEmpty()) { // no selected atoms, we want the global center foreach(Atom *atom, m_widget->molecule()->atoms()) { selectedAtoms.append(atom); } } // Calculate the centroid of the selection Vector3d selectedCenter(0.0, 0.0, 0.0); double atomMass, totalMass = 0.0; Atom *atom; foreach(Primitive *item, selectedAtoms) { // Atom::pos() returns a pointer to the position atom = static_cast(item); atomMass = OpenBabel::etab.GetMass(atom->atomicNumber()); // TODO: Does not consider isotopes selectedCenter += *(static_cast(item)->pos()) * atomMass; totalMass += atomMass; } selectedCenter /= totalMass; // Create a dummy atom, but first check there isn't already one there bool got=false; foreach(Atom* atom, m_widget->molecule()->atoms()) { if ( atom->atomicNumber() == 0 && selectedCenter.isApprox(*atom->pos(), 1.0E-08)) got=true; } if (!got) { // OK, now create a dummy atom at that point atom = m_widget->molecule()->addAtom(); atom->setAtomicNumber(0); atom->setPos(selectedCenter); m_widget->update(); } } QWidget *SelectRotateTool::settingsWidget() { if(!m_settingsWidget) { m_settingsWidget = new QWidget; QLabel *labelMode = new QLabel(tr("Selection Mode:"), m_settingsWidget); labelMode->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); labelMode->setMaximumHeight(15); m_comboSelectionMode = new QComboBox(m_settingsWidget); m_comboSelectionMode->addItem(tr("Atom/Bond")); m_comboSelectionMode->addItem(tr("Residue")); m_comboSelectionMode->addItem(tr("Molecule")); QPushButton *centroidButton = new QPushButton(tr("Add Center of Atoms"), m_settingsWidget); QPushButton *centerOfMassButton = new QPushButton(tr("Add Center of Mass"), m_settingsWidget); QHBoxLayout* tmp = new QHBoxLayout; tmp->addWidget(labelMode); tmp->addWidget(m_comboSelectionMode); tmp->addStretch(1); m_layout = new QVBoxLayout(); m_layout->addLayout(tmp); m_layout->addWidget(centroidButton); m_layout->addWidget(centerOfMassButton); m_layout->addStretch(1); m_settingsWidget->setLayout(m_layout); connect(m_comboSelectionMode, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionModeChanged(int))); connect(centroidButton, SIGNAL(clicked(bool)), this, SLOT(defineCentroid(bool))); connect(centerOfMassButton, SIGNAL(clicked(bool)), this, SLOT(defineCenterOfMass(bool))); connect(m_settingsWidget, SIGNAL(destroyed()), this, SLOT(settingsWidgetDestroyed())); } return m_settingsWidget; } void SelectRotateTool::settingsWidgetDestroyed() { m_settingsWidget = 0; } bool SelectRotateTool::paint(GLWidget *) { if(m_selectionBox) { selectionBox(m_initialDraggingPosition.x(), m_initialDraggingPosition.y(), m_lastDraggingPosition.x(), m_lastDraggingPosition.y()); } return true; } void SelectRotateTool::changeAtomColor() { QColor color; QColor oldColor; if(m_currentPrimitive->type() == Primitive::AtomType) { Atom *a = static_cast(m_currentPrimitive); if (!a) return; oldColor.setNamedColor(a->customColorName()); if(!oldColor.isValid()) { Color *map = GLWidget::current()->colorMap(); // fall back to global color map map->setFromPrimitive(a); oldColor.setRgb(map->color().rgb()); } color = QColorDialog::getColor(oldColor, 0, tr("Change color of the atom")); if (color.isValid() && color != oldColor) a->setCustomColorName(color.name()); } } void SelectRotateTool::resetAtomColor() { if(m_currentPrimitive->type() == Primitive::AtomType) { Atom *a = static_cast(m_currentPrimitive); if (!a) return; a->setCustomColorName(""); } } void SelectRotateTool::changeAtomLabel() { bool ok; QString label; if(m_currentPrimitive->type() == Primitive::AtomType) { Atom *a = static_cast(m_currentPrimitive); if (!a) return; label = QInputDialog::getText(0, tr("Change label of the atom"), tr("New Label:"), QLineEdit::Normal,a->customLabel(), &ok); if (ok && !label.isEmpty()) a->setCustomLabel(label); } else if(m_currentPrimitive->type() == Primitive::BondType) { Bond *b = static_cast(m_currentPrimitive); if(!b) return; label = QInputDialog::getText(0, tr("Change label of the bond"), tr("New Label:"), QLineEdit::Normal,b->customLabel(), &ok); if (ok && !label.isEmpty()) b->setCustomLabel(label); } } void SelectRotateTool::resetAtomLabel() { if(m_currentPrimitive->type() == Primitive::AtomType) { Atom *a = static_cast(m_currentPrimitive); if (!a) return; a->setCustomLabel(""); } else if(m_currentPrimitive->type() == Primitive::BondType) { Bond *b = static_cast(m_currentPrimitive); if(!b) return; b->setCustomLabel(""); } } void SelectRotateTool::changeAtomRadius() { bool ok; QString radius_str; double radius; if(m_currentPrimitive->type() == Primitive::AtomType) { Atom *a = static_cast(m_currentPrimitive); if (!a) return; radius_str = QInputDialog::getText(0, tr("Change radius of the atom"), tr("New Radius, %1:", "in Angstrom").arg("(\xC5)"), QLineEdit::Normal,QString::number(a->customRadius()), &ok); if (!ok && radius_str.isEmpty()) return; radius = radius_str.toDouble(); if (radius) a->setCustomRadius(radius); } } void SelectRotateTool::resetAtomRadius() { if(m_currentPrimitive->type() == Primitive::AtomType) { Atom *a = static_cast(m_currentPrimitive); if (!a) return; a->setCustomRadius(0); } } } Q_EXPORT_PLUGIN2(selectrotatetool, Avogadro::SelectRotateToolFactory) avogadro-1.1.1/libavogadro/src/tools/CMakeLists.txt0000644000175000001440000000371412250371054021511 0ustar marcususersinclude(${QT_USE_FILE}) add_definitions(${QT_DEFINITIONS}) add_definitions(-DQT_PLUGIN) add_definitions(-DQT_SHARED) set(DESTINATION_DIR ${Avogadro_PLUGIN_INSTALL_DIR}/tools) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(LINK_LIBS avogadro) set(PLUGIN_LABEL tools) set(PLUGIN_TARGET tools) add_custom_target(tools COMMENT "Meta target to build all Avogadro tools.") ### drawtool set(drawtool_SRCS drawtool.cpp drawcommand.cpp) avogadro_plugin(drawtool "${drawtool_SRCS}" drawtool.qrc) option(ENABLE_ZMATRIX_TOOL "Enable the z-matrix tool (experimental)" OFF) if(ENABLE_ZMATRIX_TOOL) ### zmatrixtool set(zmatrixtool_SRCS zmatrixtool.cpp zmatrixdialog.cpp zmatrixmodel.cpp) avogadro_plugin(zmatrixtool "${zmatrixtool_SRCS}" zmatrixdialog.ui;zmatrixtool.qrc) endif(ENABLE_ZMATRIX_TOOL) ### bondcentrictool set(bondcentrictool_SRCS bondcentrictool.cpp skeletontree.cpp) avogadro_plugin(bondcentrictool "${bondcentrictool_SRCS}" bondcentrictool.qrc) ### clickmeasuretool avogadro_plugin(clickmeasuretool clickmeasuretool.cpp clickmeasuretool.qrc) ### selectrotatetool avogadro_plugin(selectrotatetool selectrotatetool.cpp selectrotatetool.qrc) ### autoopttool avogadro_plugin(autoopttool autoopttool.cpp autoopttool.qrc) if(${CMAKE_CXX_COMPILER_ID} MATCHES Intel AND UNIX) set_target_properties(autoopttool PROPERTIES COMPILE_FLAGS "-fvisibility=default") endif() ### navigatetool avogadro_plugin(navigatetool "navigatetool.cpp;eyecandy.cpp" "navigatesettingswidget.ui;navigatetool.qrc") ### manipulatetool avogadro_plugin(manipulatetool "manipulatetool.cpp;eyecandy.cpp;moveatomcommand.cpp" "manipulatesettingswidget.ui;manipulatetool.qrc") ### autorotatetool avogadro_plugin(autorotatetool autorotatetool.cpp autorotatetool.qrc) ### aligntool avogadro_plugin(aligntool aligntool.cpp aligntool.qrc) if(ALL_PYTHON_FOUND) file(GLOB python_SCRIPTS "python/*.py") install(FILES ${python_SCRIPTS} DESTINATION share/libavogadro/toolScripts) endif() avogadro-1.1.1/libavogadro/src/tools/moveatomcommand.h0000644000175000001440000000337112250371054022307 0ustar marcususers/********************************************************************** MoveAtomCommand - Command class for moving atoms or fragments Copyright (C) 2007 by Marcus D. Hanwell Copyright (C) 2007,2011 by Geoffrey R. Hutchison Copyright (C) 2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef MOVEATOMCOMMAND_H #define MOVEATOMCOMMAND_H #include #include namespace Avogadro { class MoveAtomCommand : public QUndoCommand { public: explicit MoveAtomCommand(Molecule *molecule, QUndoCommand *parent = 0); MoveAtomCommand(Molecule *molecule, int type, QUndoCommand *parent = 0); void redo(); void undo(); bool mergeWith ( const QUndoCommand * command ); int id() const; private: Molecule m_moleculeCopy; Molecule *m_molecule; int m_type; bool undone; }; } // end namespace Avogadro #endif avogadro-1.1.1/libavogadro/src/tools/aligntool.qrc0000644000175000001440000000013512250371054021442 0ustar marcususers align.png avogadro-1.1.1/libavogadro/src/tools/skeletontree.cpp0000644000175000001440000001552412250371054022163 0ustar marcususers/********************************************************************** BondCentricTool - Bond Centric Manipulation Tool for Avogadro Copyright (C) 2007 by Shahzad Ali Copyright (C) 2007 by Ross Braithwaite Copyright (C) 2007 by James Bunt This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "skeletontree.h" #include #include #include using namespace Eigen; using namespace std; namespace Avogadro { // ################################## Node ##################################### // ########## Constructor ########## Node::Node(Atom *atom) { m_atom = atom; } // ########## Destructor ########## Node::~Node() {} // ########## atom ########## Atom* Node::atom() { return m_atom; } // ########## nodes ########## QList Node::nodes() { return m_nodes; } // ########## isLeaf ########## bool Node::isLeaf() { return m_nodes.isEmpty(); } // ########## containsAtom ########## bool Node::containsAtom(Atom* atom) { //"atom" exist in the children and grandchildren... of this node.? bool exists = false; if (m_atom == atom) { return true; } foreach (Node *node, m_nodes) { if (node->containsAtom(atom)) { exists = true; break; } } return exists; } // ########## addNode ########## void Node::addNode(Node* node) { m_nodes.append(node); } // ########## removeNode ########## void Node::removeNode(Node* node) { int i = m_nodes.indexOf(node); if (i != -1) { m_nodes.removeAt(i); } } // ############################## SkeletonTree ################################# // ########## Constructor ########## SkeletonTree::SkeletonTree() : m_rootNode(0) {} // ########## Destructor ########## SkeletonTree::~SkeletonTree() { if (m_rootNode) delete m_rootNode; } // ########## rootAtom ########## Atom* SkeletonTree::rootAtom() { return m_rootNode->atom(); } // ########## rootBond ########## Bond* SkeletonTree::rootBond() { return m_rootBond; } // ########## populate ########## void SkeletonTree::populate(Atom *rootAtom, Bond *rootBond, Molecule* molecule) { if (m_rootNode) { delete m_rootNode; m_rootNode = 0; } m_rootNode = new Node(rootAtom); m_rootBond = rootBond; Atom* bAtom = m_rootBond->beginAtom(); Atom* eAtom = m_rootBond->endAtom(); if (bAtom != m_rootNode->atom() && eAtom != m_rootNode->atom()) { return; } Atom* diffAtom = (bAtom == m_rootNode->atom()) ? eAtom : bAtom; //A temproray tree to find loops m_endNode = new Node(diffAtom); //Recursively go through molecule and make a temproray tree. //starting from m_endNode recursivePopulate(molecule, m_endNode, m_rootBond); //Recursively go through molecule and make the tree. //starting from m_rootNode recursivePopulate(molecule, m_rootNode, m_rootBond); //delete the temporary tree delete m_endNode; //for debugging puposes //printSkeleton(m_rootNode); } // ########## recursivePopulate ########## void SkeletonTree::recursivePopulate(Molecule* mol, Node* node, Bond* bond) { Atom* atom = node->atom(); int found = 0; foreach (Bond *b, mol->bonds()) { Atom* bAtom = b->beginAtom(); Atom* eAtom = b->endAtom(); if ((b != bond) && ((bAtom == atom) || (eAtom == atom))) { Atom* diffAtom = (bAtom == atom) ? eAtom : bAtom; //Check if this atom already exists, so not to form loops if ((!m_endNode->containsAtom(diffAtom)) && (!m_rootNode->containsAtom(diffAtom))) { Node* newNode = new Node(diffAtom); node -> addNode(newNode); found++; recursivePopulate(mol, newNode, b); } } } } // ########## skeletonTranslate ########## void SkeletonTree::skeletonTranslate(const Eigen::Vector3d &translationVector) { if (m_rootNode) { //Translate skeleton recursiveTranslate(m_rootNode, translationVector); } } // ########## skeletonRotate ########## void SkeletonTree::skeletonRotate(double angle, const Eigen::Vector3d &rotationAxis, const Eigen::Vector3d ¢erVector) { if (m_rootNode) { //Rotate skeleton around a particular axis and center point Eigen::Transform3d rotation; rotation = Eigen::AngleAxisd(angle, rotationAxis); rotation.pretranslate(centerVector); rotation.translate(-centerVector); recursiveRotate(m_rootNode, rotation); } } // ########## recursiveTranslate ########## void SkeletonTree::recursiveTranslate(Node* n, const Eigen::Vector3d &translationVector) { // Translate the root node, and then update any children Atom* a = n->atom(); a->setPos(*(a->pos()) + translationVector); a->update(); foreach (Node* node, n->nodes()) recursiveTranslate(node, translationVector); } // ########## recursiveRotate ########## void SkeletonTree::recursiveRotate(Node* n, const Eigen::Transform3d &rotationMatrix) { // Update the root node with the new position Atom* a = n->atom(); a->setPos(rotationMatrix * (*a->pos())); a->update(); // Now update the children foreach (Node *node, n->nodes()) { recursiveRotate(node, rotationMatrix); } } // ########## printSkeleton ########## void SkeletonTree::printSkeleton(Node* n) { foreach (Node* node, n->nodes()) printSkeleton(node); Atom* a = n->atom(); cout << a->pos()->x() << "," << a->pos()->y()<< ","<pos()->z() << endl; if (!n->isLeaf()) { cout << "-------------" << endl; } } // ########## containsAtom ########## bool SkeletonTree::containsAtom(Atom *atom) { return m_rootNode ? m_rootNode->containsAtom(atom) : false; } } avogadro-1.1.1/libavogadro/src/tools/navigatetool.cpp0000644000175000001440000003221212250371054022144 0ustar marcususers/********************************************************************** NavigateTool - Navigation Tool for Avogadro Copyright (C) 2007-2009 by Marcus D. Hanwell Copyright (C) 2006,2007 by Benoit Jacob This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #include "navigatetool.h" #include "eyecandy.h" #include "ui_navigatesettingswidget.h" #include #include #include #include #include #include namespace Avogadro { using Eigen::Vector3d; class NavigateSettingsWidget : public QWidget, public Ui::NavigateSettingsWidget { public: NavigateSettingsWidget(QWidget *parent=0) : QWidget(parent) { setupUi(this); } }; NavigateTool::NavigateTool(QObject *parent) : Tool(parent), m_clickedAtom(0), m_leftButtonPressed(false), m_midButtonPressed(false), m_rightButtonPressed(false), m_eyeCandyEnabled(true), m_drawEyeCandy(false), m_draggingInitialized(false), m_eyecandy(new Eyecandy), m_settingsWidget(0) { QAction *action = activateAction(); action->setIcon(QIcon(QString::fromUtf8(":/navigate/navigate.png"))); action->setToolTip(tr("Navigation Tool (F9)\n\n" "Left Mouse: \tClick and drag to rotate the view.\n" "Middle Mouse: Click and drag to zoom in or out.\n" "Right Mouse: \tClick and drag to move the view.\n" "Double-Click: \tReset the view.")); action->setShortcut(Qt::Key_F9); } NavigateTool::~NavigateTool() { delete m_eyecandy; } int NavigateTool::usefulness() const { return 2500000; } void NavigateTool::computeReferencePoint(GLWidget *widget) { // Remember to account for the situation where no molecule is loaded or it is empty if(!widget->molecule()) m_referencePoint = Vector3d(0., 0., 0.); else if(!widget->molecule()->numAtoms()) // center will account for the unit cell as well as atoms m_referencePoint = widget->molecule()->center(); else if(m_clickedAtom) m_referencePoint = *m_clickedAtom->pos(); else { // let's set m_referencePoint to be the center of the visible // part of the molecule. Vector3d atomsBarycenter(0., 0., 0.); double sumOfWeights = 0.; QList atoms = widget->molecule()->atoms(); foreach (Atom *atom, atoms) { Vector3d transformedAtomPos = widget->camera()->modelview() * *atom->pos(); double atomDistance = transformedAtomPos.norm(); double dot = transformedAtomPos.z() / atomDistance; double weight = exp(-30. * (1. + dot)); sumOfWeights += weight; atomsBarycenter += weight * *atom->pos(); } atomsBarycenter /= sumOfWeights; m_referencePoint = atomsBarycenter; } } QWidget* NavigateTool::settingsWidget() { if (!m_settingsWidget) { m_settingsWidget = new NavigateSettingsWidget(qobject_cast(parent())); // Restore settings m_settingsWidget->eyeCandyCheckBox->setChecked(m_eyeCandyEnabled); // Connect some signals and slots connect(m_settingsWidget->eyeCandyCheckBox, SIGNAL(stateChanged(int)), this, SLOT(enableEyeCandy(int))); } return m_settingsWidget; } QUndoCommand* NavigateTool::mousePressEvent(GLWidget *widget, QMouseEvent *event) { event->accept(); m_drawEyeCandy = false; m_lastDraggingPosition = event->pos(); // Make sure there aren't modifier keys clicked with the left button // If the user has a Mac and only a one-button mouse, everything // looks like a left button if (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::NoModifier) { m_leftButtonPressed = true; // Set the cursor - this needs to be reset to Qt::ArrowCursor after widget->setCursor(Qt::ClosedHandCursor); } // On a Mac, click and hold the Shift key if (event->buttons() & Qt::MidButton || (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::ShiftModifier)) { m_midButtonPressed = true; // Set the cursor - this needs to be reset to Qt::ArrowCursor after widget->setCursor(Qt::SizeVerCursor); } // On a Mac, click and hold either the Command or Control Keys // (Control or Meta in Qt-speak) if (event->buttons() & Qt::RightButton || (event->buttons() & Qt::LeftButton && (event->modifiers() == Qt::ControlModifier || event->modifiers() == Qt::MetaModifier))) { m_rightButtonPressed = true; // Set the cursor - this needs to be reset to Qt::ArrowCursor after // Currently, there's a Qt/Mac bug -- SizeAllCursor looks like a spreadsheet cursor #ifdef Q_WS_MAC widget->setCursor(Qt::CrossCursor); #else widget->setCursor(Qt::SizeAllCursor); #endif } m_clickedAtom = widget->computeClickedAtom(event->pos()); computeReferencePoint(widget); // Initialise the angle variables on any new mouse press m_yAngleEyecandy = 0.; m_xAngleEyecandy = 0.; widget->update(); return 0; } QUndoCommand* NavigateTool::mouseReleaseEvent(GLWidget *widget, QMouseEvent *event) { event->accept(); m_leftButtonPressed = false; m_midButtonPressed = false; m_rightButtonPressed = false; m_drawEyeCandy = false; m_clickedAtom = 0; m_draggingInitialized = false; // Set the cursor back to the default cursor widget->setCursor(Qt::ArrowCursor); widget->update(); return 0; } QUndoCommand* NavigateTool::mouseDoubleClickEvent(GLWidget *widget, QMouseEvent *event) { event->accept(); m_leftButtonPressed = false; m_midButtonPressed = false; m_rightButtonPressed = false; m_drawEyeCandy = false; m_clickedAtom = 0; m_draggingInitialized = false; // Set the cursor back to the default cursor widget->setCursor(Qt::ArrowCursor); // reset the camera widget->camera()->initializeViewPoint(); widget->update(); return 0; } QUndoCommand* NavigateTool::mouseMoveEvent(GLWidget *widget, QMouseEvent *event) { if(!widget->molecule()) { return 0; } m_drawEyeCandy = true; event->accept(); QPoint deltaDragging; if (m_draggingInitialized) { deltaDragging = event->pos() - m_lastDraggingPosition; } else { m_lastDraggingPosition = event->pos(); m_draggingInitialized = true; } // Mouse navigation has two modes - atom centred when an atom is clicked // and scene if no atom has been clicked. However we don't need two codepaths // here because the m_referencePoint has already been computed in mousePress, // and that is the only difference between the two modes. // update eyecandy angle m_xAngleEyecandy += deltaDragging.x() * ROTATION_SPEED; m_yAngleEyecandy += deltaDragging.y() * ROTATION_SPEED; if (event->buttons() & Qt::LeftButton && event->modifiers() == Qt::NoModifier) { Navigate::rotate(widget, m_referencePoint, deltaDragging.x(), deltaDragging.y()); } // On the Mac, either use a three-button mouse // or hold down the Shift key else if ( (event->buttons() & Qt::MidButton) || (event->buttons() & Qt::LeftButton && event->modifiers() & Qt::ShiftModifier) ) { // Perform the rotation Navigate::tilt(widget, m_referencePoint, deltaDragging.x()); // Perform the zoom toward clicked atom Navigate::zoom(widget, m_referencePoint, deltaDragging.y()); } // On the Mac, either use a three-button mouse // or hold down the Command key (ControlModifier in Qt notation) else if ( (event->buttons() & Qt::RightButton) || (event->buttons() & Qt::LeftButton && (event->modifiers() == Qt::ControlModifier || event->modifiers() == Qt::MetaModifier) ) ) { // translate the molecule following mouse movement Navigate::translate(widget, m_referencePoint, m_lastDraggingPosition, event->pos()); } m_lastDraggingPosition = event->pos(); widget->update(); return 0; } QUndoCommand* NavigateTool::wheelEvent(GLWidget *widget, QWheelEvent *event ) { event->accept(); m_clickedAtom = 0; // no need for mouse wheel to detect exactly the atom, // the referencePoint will be accurate enough, and // on large molecules doing a gl selection on every // mousewheel event is too expensive. computeReferencePoint(widget); // needs m_clickedAtom to be set. Navigate::zoom(widget, m_referencePoint, - MOUSE_WHEEL_SPEED * event->delta()); widget->update(); return 0; } QUndoCommand* NavigateTool::keyPressEvent(GLWidget *widget, QKeyEvent *event) { computeReferencePoint(widget); switch (event->key()) { case Qt::Key_Left: // Left arrow case Qt::Key_H: // Vi style left case Qt::Key_A: // CS style left // On Mac OS X, the arrow keys are considered part of the keypad!? // http://doc.trolltech.com/4.4/qt.html#KeyboardModifier-enum if (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::KeypadModifier) Navigate::rotate(widget, m_referencePoint, -5, 0); else if (event->modifiers() & Qt::ShiftModifier) Navigate::tilt(widget, m_referencePoint, -5); else if (event->modifiers() & Qt::ControlModifier) Navigate::translate(widget, m_referencePoint, -5, 0); event->accept(); break; case Qt::Key_Right: // Right arrow case Qt::Key_L: // Vi style right case Qt::Key_D: // CS style right if (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::KeypadModifier) Navigate::rotate(widget, m_referencePoint, 5, 0); else if ((event->modifiers() & Qt::ShiftModifier)) Navigate::tilt(widget, m_referencePoint, 5); else if (event->modifiers() & Qt::ControlModifier) Navigate::translate(widget, m_referencePoint, 5, 0); event->accept(); break; case Qt::Key_Up: // Up arrow case Qt::Key_K: // Vi style up case Qt::Key_W: // CS style up if (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::KeypadModifier) Navigate::rotate(widget, m_referencePoint, 0, -5); else if (event->modifiers() & Qt::ShiftModifier) Navigate::zoom(widget, m_referencePoint, -2); else if (event->modifiers() & Qt::ControlModifier) Navigate::translate(widget, m_referencePoint, 0, -5); event->accept(); break; case Qt::Key_Down: // Down arrow case Qt::Key_J: // Vi style down case Qt::Key_S: // CS style down if (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::KeypadModifier) Navigate::rotate(widget, m_referencePoint, 0, 5); else if (event->modifiers() & Qt::ShiftModifier) Navigate::zoom(widget, m_referencePoint, 2); else if (event->modifiers() & Qt::ControlModifier) Navigate::translate(widget, m_referencePoint, 0, 5); event->accept(); break; default: return 0; } return 0; } QUndoCommand* NavigateTool::keyReleaseEvent(GLWidget *, QKeyEvent *) { return 0; } bool NavigateTool::paint(GLWidget *widget) { if (m_eyeCandyEnabled && m_drawEyeCandy) { if(m_leftButtonPressed) m_eyecandy->drawRotation(widget, m_clickedAtom, m_xAngleEyecandy, m_yAngleEyecandy, &m_referencePoint); else if(m_midButtonPressed) m_eyecandy->drawZoom(widget, m_clickedAtom, &m_referencePoint); else if(m_rightButtonPressed) m_eyecandy->drawTranslation(widget, m_clickedAtom, &m_referencePoint); } return true; } void NavigateTool::writeSettings(QSettings &settings) const { Tool::writeSettings(settings); settings.setValue("eyeCandyEnabled", m_eyeCandyEnabled); } void NavigateTool::readSettings(QSettings &settings) { Tool::readSettings(settings); m_eyeCandyEnabled = settings.value("eyeCandyEnabled", true).toBool(); if (m_settingsWidget) m_settingsWidget->eyeCandyCheckBox->setChecked(m_eyeCandyEnabled); } void NavigateTool::enableEyeCandy(int enable) { m_eyeCandyEnabled = enable == 2 ? true : false; } } Q_EXPORT_PLUGIN2(navigatetool, Avogadro::NavigateToolFactory) avogadro-1.1.1/libavogadro/src/tools/drawcommand.h0000644000175000001440000001562212250371054021417 0ustar marcususers/********************************************************************** DrawCommand - Set of command classes for drawing. Copyright (C) 2007 Donald Ephraim Curtis Copyright (C) 2008,2009 Tim Vandermeersch This file is part of the Avogadro molecular editor project. For more information, see Avogadro is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Avogadro is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **********************************************************************/ #ifndef DRAWCOMMAND_H #define DRAWCOMMAND_H #include #include namespace Avogadro { class Molecule; class Atom; class Bond; struct AdjustHydrogens { enum Option { NoOption = 0x0, RemoveOnRedo = 0x1, AddOnRedo = 0x2, RemoveOnUndo = 0x4, AddOnUndo = 0x8, Never = NoOption, Always = RemoveOnRedo | AddOnRedo | RemoveOnUndo | AddOnUndo, OnRedo = RemoveOnRedo | AddOnRedo, OnUndo = RemoveOnUndo | AddOnUndo }; // typedef QFlags

Idx.Kx ]y*D?NZ;)&&~#ц]7!ɨ҉&wʥvLizW waJF"@ )z*S#{))i"mAA)_'5^MScK!5%^ï><CT3ƹ.2oar-цk+PzIL>t ԍ:v' /CW)֠) &`h> >xM UH [CEm+ߎ!]w vܓks.36RT'ұ>ͷ20 Sx* )铪45LRAp$JCr/l4$:ԭ~X`n7s+։x+q[o7l.C55T~Kj' 8)jZOSn2/L&c2Yia2٘Ld2&Ӧa׎MƱ:6-cqlƱiӱñMEb؆/^/2L"Ȅ/ _d$ŋ$E&IMRHRl$E6IIR#IJ6RRL)BaSf)BB҂ xG Rj<يGۥv o#$ظ6“ l b9dJ `ȳ=1EVҚB "!60!)"QXQS$U,PT6Eۈ&F~m30jE| 3b׊ϼbP"Ǹ5XSye&SWrj:0*eߝl#8de$ɏ\ҨrVAA3b;٘L&16M&k2id086]&شlcӦcӇceUW t٥j̹:ywY>Q޿Fp/IfDtQ\Wv<(夝6%GIyvnwrBmXL3$x+\?sjPsA_ &UBۼN|,4*+ 9$]=c@w⫥V}{N4!ηHS?"sZqLKBKh}:zeZm&7) <' ži!VICd Rp::ud$|$ į9LѲ&%Ă9RP+^KL|;X@9͢n2-Lfc2Yya2٘d6&ӦlMfؼpl2ֱilcul2MMm/E6|"| _l&|f𵨾lbxU}$E&I?W}RM)B˖"dJ/5_}ѮcӢX9߯x7|}D8tc} wA;@oΤ>" "AdW?kHu&  7 [pNjWT0\=R(Kt!ÙGL/Y+0BSEnة窴5CoKH,y+rDX}oU\%iN)=eZ2S&sdO)))/wA]^.˴y./X "b" /j@Y;Eý"XApҢ^!C+ w/-} hE]%N&}ĊC,B&}z̊Ȼ&iIm2uqU>cvi8my̋"'M>{IhE^}}KhE^^g˼;E2[8;HERϻOyBhl(*W:hVSCʻ|9EjI3/F ,\A8b~VGl]iBشmg^L"!ZkZ)erq@;j.FU .MZŘ/ O!O7@QdFnBh!XS[7  $8`duF8QE? j4%? t[6psp?=ez;GO96sxR|=Ǘyq8_o(eb[{/BC`n1(N)GM1:C KHC3 (džę|#kS/^{Y%K[ST PVf2rՇʯDmQ#T*M$`V/Q:>@B+5OxO/I$ucEȗQ5N(%J[W~v˹M ҅'Ra 2Ha\MFvndZLd&d6&1lLMdشpl2ֱylcul2͛Mû<3/~NU+%Gڪs}g!#Pu@dbן0[ܤ%t ]_So褆{:e9h7\߃C~`mTH*P)c|ƄĤdAlo3kF4ޘARwQH_)LW(_ RYX"JwSҦT- tRM?mp4>" llosb"T_nL?IQ!H~UhٴԈ(=PHY5r?& =ɡKBNw# R +t(q}яNJqnVP\/3-'zlJԶtH$>1܁T]? .'?=4'Mc2ɚ ٘d&16Mc±86Ycql6ֱ86o:6}?6| _l-E&| _lo/kmb&)^$)6IMb$)LREAu)B![aS)EȖ"lJ,ER}]VG$\54bIM:L#f(^OS]HMy2PUߡc->.9k ~SF-P3&OB%dMg4:)PX]֊U| biYɾJ7hPt|@/~aCm9@opmVdJBAfTN֙/c͎l[}PVcQ{y<0x l[s?z)[Z} NSdk5B9^է7r9|>i8TXzPbԠ:^ l`5W#t(ѽ9iu 5\d1zw3F ,SѺd}g2gn]Ձíhd<:~wq/-A;ߚV} wgRc͙Al ZAl 2@q .}ǾiC[kZpz (95y[ֱn*U/9_]g6b$rAT<ߨ|JW),.7_+bC|+rY;C*#wsʼ8e6LiqdN)=e2̛Ll2-]^d2Lw?@w{ZDtY;E^^ h>vpVcY˶bEB8Dx@m"A+,q6Y'Ve|7YcVFp~'69HLݏ&S}B}9>6Viq+c.9wyEN|y_KhE^}}KhE^^o1_1/ϗywQpn[|wG0y5Rh>GO>hԥ)@ݿ.t  ]u}?RC[j߹Hz—-D;y:B:TKD?5ExȀVnT\.&(תxWbDp9!%GP;ѤUM_ Its0WOTyJՖBT p &s,.UMxS4-V묾2}L 8OcAUCVcKTujZj/Njn| 7 ]fc2/L&c2Yia2٘Ld6&ӦlM&شpl2ֱylcul2ֱ͛w9D 7F'M}t3.O)}4ݕW K2qIYҝ:b1[F1w/$#%^Dz-*Hږ]BgN3jxDݤAɤZTZpB >C0z3-ނҲZ{)`.@n): @ e̐ų0G3&1ɴ0dL&k2yd086/culZ86&dcӦcӇcEE&| __l6| _Ȇ/6IILbh$)2Il"x3IMR˔"dJ/J6Rm)BR>J9ꃜKRr]D'/}lVǑ) ag~%53I4bs" t8RRQ/KA\q!x^]ĩ. yk!!/'..xrPQ`vC}.`-6w8* Pe::B%vGZVh͐0%o"z (?LNg-mKI4 I5"ԡT6C0 KRX[W1QMI) (y o4J43ߙd5ɼi2Y٘L&5cqlul6ֱ͛86m:6Yw)&g|7C{;޴O;6_e\0#||V1rvpwoΘ7D8#p ]3) $=]U1umȎDH  .x)ӤjA\&ⳏ-j)JL>*IjPp9#HZۢsǨ~&>(ϓuUSg,G0YpQQ39V޼8WC MK $~FqptLlL&k2/L&c2ٚd4lMƱ:6-cqlƱyӱ:6EE&| __lE6| _ȆUe$ū&)6I˖"dJZU_aS?W}ɴ(8W&wmʱ~Ż룓 _ZAc[ 7qA9@Τ,D3AAd @dE8&BrMoYw%, P(3F'MRNMSV=1ibt @% wm$-H4i {k>6n%Q6 #C{$"΅YLJƂ/4LS&slOɜ2SfsʴylO]]^+P]&sy.]^xE^AE@^Հhw Gk5,D'/j Ļh@Ђ8A,KMĉ=vYÛ,1+B#r8-79ȻLݏNj>qY>cwi8my̋"'I>׼/%4"bV>%4"/VeZ|w_;ֿ?_ݑ:/L^|y.DT- }9vA]^ pBp_xQjEyC`?XK5DA>: Ѡbqy) \L3,0ڹYIR#KيbaR 7)P[V6lMlL&c2Y̛٘&5c±86Ycql6Mֱ86o:6[fx؄/Lb؆/26E&I"IIRl/$E&IMRlm&)IM)‹RM)¶E)B!S-EȔ"Y-ELBv:)phu 6NUS4 rf 7-i'cr73$ N r D&I"|:fNlfpM9Oa;WǞxY)YI+T>@>6ڊ 1s@cxJ.(}*U"BQX&vը&T2^xbh6#}/(t?+},!d|Jt$cm@Q)=™?%q&v>_\Gc#$Nb-wC 3ɼk¦lM&c2oL_cqlul6MMֱ86m:6}?~el˜H>Pb`y']>DUy( F"Etՙ%±$AIrv{RդL֗8u}:H }JDF;Sh9Bf+`Vog)"[N)Rwc ,:TdR`F 8uS.U]*ѻuV 770t)%e)Úi,qR'ed,řVcb>(G ;CSSYP }t͜rj_1dMlLfc2Yɘ̛&5c±86YǦcql6ֱ86m:6[q:| _l/E&| _lm/kU}$&IILRW՗-EȔ"U_k2/ Ε]E[r_}n˛k.oit9@Τ,ě3AAd @0ϡw&D[] +5*w5<"ߛ NmrE\ F{snؽ9}79&n#r =@p@ T>6XX';\cT' s\sʴ8e2LyqlN)=e6LLe^%Kue2w62ۻb.tϋ>v4˫gj >`.ɋ{p`.i D8S,q7Y8.chE1 B#r8-q69HL]KhM 4y|9>6Vyq+c.9wyEN|xȋ"4ׂGFZeZ|wϗyw W#?0_^} YT7S>uyq+P} ӂù߇Id4/ R p7>oJbS^!ݙU_̗l\=~4ւC]yhIcຊ`MwlA3tf嘻Ώ!c-vRCr/gxsTBȥ<GQ)χtn\3њ7@N(Fk nŋrWc)J,Uc TGР0uxv:5$rGS.sʏ{)OMMfc2L^96=ul~۱86-[M. A#-[lb_ɪg(ŏؗG)TYeW1]kt-P'ӑP55@HF@8 <x VXdYa^a씁HZSr(AۈctrIGJp !r#{fRP֨QB(}ɘ̻&1dZdwcS& }Mr_@Iy!ct?L^>37%!ު#O#|%V%=e8 *S(QBIxy.:/5*bc3(w~]dB05iQds<d|`Ԉ-> `I&ž.E 0).S.)8~I qHuy5q? P:C9xc99/Cb| ld~d2&cScұዞ/~;| _ _$EO~{OKz?-8W_ۊ^}}"&|n"W_86 wql6@s@G[a ޝV,*ݙ 9 b_l ZA"5gHZ/E}s/>3l=EH7 ˕'a+Hčc*z%iXKkmnϸ"GuOEW|%]9S\X&kk14\D.]Ӥ8<W$)%9eqSfsʼ`ܮ{"D8ApA,2,ea'NȰxE@E@dCh]'B#sƏiKи&]>6>6s|lzz)v>6?]c#6y_omvnⷫ>_x [ywfJ|Lo?_A 蟇} )ۧ>~ᤷ9pRM [S#Kie< i9Ǟn[kk[ AGcxEYKJ2KxoZ}*+e.S$VݪPǩ*}yMhvxT鐌*~5LSR aFon qTcZ9 }L7 CopQ{7zM5Ҭ]\avB6p(I(Q 9-@N9A040DRԱũC?oμ/(׃T/{uZъ*$y}[ĮqA ;hR#{~YoIEqV}OJ}0\j1NG-C>}+X(B씒 ^JFJuP0 %IKQ%϶V L2 QYg|6MZ>)X 6ՂgR*&ȟ0bV}VR2K 2qI,}.JKpMp&s#uCk_"M\~oy$RuǠP*pþ stI$ e86#8U#W5ʡ^BxN5lL+槎Mo;6Ǧc= _vbhVI&)z;IIRJRR"v)¦U):k be" ARd/ͣԳ> .ѧd!7_f L7rI^*@_(j>—It!c# QrHI|cV\ջo$q6E@ ޠR,ҥiTV񈪏R2;];Akf`-E"40I%Pt`-%c:SrԯU]SiQl#Ai~A d>~ C-GM,ܷ:ezz)@ݏS^q8)pO-ڷZ$K헻Ա?)cj M]B^_/0=oiVMJ )g-Gu;t= UI ,cy,#ތfd#I&wQQI^1?X%cW,.'`^JMɥz2`smYr뺒w~b Y6[%OSvVB@ \F;Dv 1Ǧma4^,(Ǧ^bWdžh|e%T&smzsUO]MN )LdLfk2/Lfc2ٚLd4L6M flMƱ86[&ؼ2 gDFmr)y6k.q4'-\m^U-qRmQ?{ 6 %q証,@+&  4nCa^ pJ\<]]_eEy苦ԫe[WEo}an ЩJ`*^11YNgeD$:k݂s7KA-G*cDncg3ڔ*BZ=IƱߠ/D-$mٌE]u|Z?(:$:W$)ck3"bG7h L?J/US ԷSRJdp&v$f4+-TdL]٘wMfc2Lul6ͻMƱcql^:f^VI.}оl~i^}oЬ>ImS~#u+o}j?6! x, c0L7" ;^]g!q8 :B>ݦ땳peYd}P h M"4NK<7x 9\{M ƨ@E0}:zSu-= }P)NqE EEـEDmdAjos6O娚x xSQьD@lUM:7p}N D˻ƁQ G^JQAEdH] ,e.>37BtIrE@OE`,V!>EYGgk@M&&1&/:6?lW- Ҏx;*M.,Y>xP~-O*4N'Ymc ?{|<^Rb+/]oq|)(eF7_}bU+WmRC{ex& NeLߦLA>j7BB< 8羂~G MTu2.Qe\Q:w:KJez=:"9/ǖzX{'S 09)NY;, ёeoC9NT)U=ؽ# !!WȞ =*7'R:|"da8v m&rQ-H>QIf~R+7gJ*Zq(QPC "J qݽ&ώIUFᑠJ=$pD`i6.hD(^^Bµea6Q-޵ϡpY ?9WxV[-ݫc#4P:gI$ 1!gs x2dk2=m2yi±cӎƱi؋Ew?؄/ZUINRl/](BOC2PWPD(ъ>SU?L@Fx̪.{U -=w#PJ*}FZ_=AKSΡv3IQ s&UW+E 3qݔ+􇶕jGGɕ%‡ c8R/*}='/ǖ F'P(;=rj8mg9j̰igaͽ*jEYR# X"')U/W^ Rҹ%gLVCd )h[W9CDxiSj2id2&lM&c2mo&&شd7cqltl~sl$jY n (eHh|Y4 ґf98!E7;t}&h+4K~l]5x2] W=O;IzJ8e@MZ"]EJno0T=֘+eˡ. E< &q#RSpV\ΜsqnɁ{QV XOTg}ѲS9T[ 2וO u%B,"1?%OqrŹ%Lv.i&z T/Oq',r銾4eM&&1V&:6=lV _t7|MUZ%)$E&I*I߅"4!EhEVN~pL~tYr췲Ln/LEoA|DY" ě<6؆D$Ad V%A|D[" D=)zI"AtbK!Al 2DA8%ua_/ܛzY6RtAKWx'w.&L[:&wsvNv%i=YYǶi).( |;.S{`hYur2˂s^ )Bd+)x]e.gwI&AcjVV%^g8x|S&sʴ<]w+R>!un#ثw2=W @_|}kՆ{G_ Mw16?W &C]"nAd 6Do2 aN Sdxs);C7cN")~"0twn4h$3ț3l 4݁F9Hv@#oN@Ǧts<6ylޜ&;:e{)VOyq]j8."6ݍt^ 4EU^y˫Fd/~}pV_eV2Vl[ua256yR3 w>I%AI%}ttY ǛtYou|S^識3 犺<^-l L4 ;߳,wp1Qm j ~_Wrڱe)[U |źU0rグ/HC^Ͻ9O٣*TkLT/lD}Q^p1|\ :#l[ɶRs@{Uf F]Fd+l ʤלn*Ս{E.aԐp;.Mu܁mD-7̝^Zeyb "m7Ǵd256ɴ4ytױi&- [?ԫl/arq*bh}Pls.\d]IX fE C^R L 榰giwNńOekV))EMճ22Ѧ腧j3vV>g\"|<E㨬ĐL㾦aU"%`ɴQLVY>߽0(1НI|B˗OYjZf!08}EQć &rF?,;w/qQ :t8%Ҕ2k ݈4Epx`7/q.0UMPz 9sD%r2GG?;z_]z8ոλ 9iH;Z][H]3חvM\rjGtAt^,]|{WT`VdYr=&cR2W=Qa|@CkpE(^ƯoӤ Iao2id2&]ɘLK7cӮcqllW}*eNI9Ю͆;Op}+<&u6Y,y2 L/ /DW\y$zѣ1U=VO<:v)a]1y-z½<7 gǑ֗8֡ԭs!NYQO@ >̫&*1DNVjGGQhÀ*58|Drs w+Yʫy#|l1~>D&DmVsz7yO ftHDMU E"Jɴ0dMlLfc2YɘL&5c±86[Ǧcql2ֱ86o:6[ǖ.{9$mUY,4UhDE{ (;Ԩ:k ku$pFsp/ ZeCSN0{aΡiM_k>}MRxfxqNҺg%%.ÜiŧFP@䓔0CDg "WKT Iiu~VPSǀ(ˇu^F/ȲfPH8eX3gq2=E5t楷"> % qdFu6ŅDgr6u+ -s$Ifu p(^s֖:fn{.H~k+L9 ,V_c44N/&d6&5&1lM&c2od2M &lƱ86[fش&|"| _l-E&| _lm/z _ e$E+e$P P }Ѯɴ+}ѮcX9ϣ/ _}fz} -D<AۭDmv+~ݞ%h'D" +" ĆN9{ ,Pl6{QΫwNa74l: b i-לë+%#XAt $nA{91 p)wԛb 5\&1*Y?v\k:"rzY?N9`LS&sdOɜ2S&sʼylO]]^+R]&sy.]^L.uO~v4˫OnkՆ{~`E.I b8VD2My"h58ASvp7X)cV;iysywR4_h\A޻?7ͻc8cp2-j8/c/xw{5};ȋh|~o_6/ת em2m6[L-uZj]"}Ihԥ)Hݟx 犺 tm7Kf_J=g%Z (qԽ@,+HgɁݩRp%4r7[:]dy|vskTUtE+cE*!oZjr=r&hrc_x5LR٢9m,koco ~"n|B/~Cn>-vo-:EQ6N~QYKtc2ɚ ɘd&16M7WI&dƱ86[fشث7[Q,QwNhs5p<﵇AxFɉ+6T*BDp&©}JȞq&Uyp2"5J+0@\+U9<̍W83U@,|`Temt(Job Wb:݇EO(]vrtE)c+%tr8>PK g.'~1ڪfGƾZbgu/)wKkP|}u pos9;Wզvq8nnFSm^N)$IRTWV(zXFwۨN /@y ,*:艈]MAl,AEj9 e';'g~qјLd&d6&1lLMɚ|186&شpl6Ʊ:6ǦMǦ76MbxȄ/6l"x3|'oИ$E&IMRHRl$E6IIR&"dY(B (B"l(BP,$Λ2jKlDR,i_Fܬ/ Yf<,e )l|pNO#N$YySK3͉s2"{h -f̾{PcI+OɣŞcsmh\JO54Q^:Wn)bSmdZ^d3]g,ʈ0VohBx 7&VQznSسZ3iėGK݈&~)k#k)$]%Ѫxح5[i2[ɘ̛&ӛk)=~tlƱyӱͱoA @A*b>L𜢖IT(i"T&8H,|Է^p<4)EJӇڠ)8/W3Ri S􏤮!"jB}GAN5H_2 Q V=~I5%g؅άV8UePηթxPCmUϤhFfpHO@Hԕ _xkj*M7eId@xCεq \tΉ`'RZd6&5&1lM&c2oLo&zRƱ86[cql6Mֱ86o:6Y&hȄ/Mb؆/27ʇ$&I }$E&I?,!Ex,aEC_k2/G_ؼ(+Vvf kA.&Dv+^V<Ļ=OfzR?O!A"Al Dj/JM~N^8<4HB"eZEOש_MM^h'WOH\eT%BGZٵIJ%uiq+R>ޥi1ù /TaqΟˀŀye,[eBHH[m޲\Tq U@G a2Є XB%j2H۵e;I@&@Tt=,Isoِ{p!q21nԎm5jy,bјĐWnchNj>{S~Y>fK rTvu!c_mTRB(ۋ/De< 2b0xk"DԒ`kQ낊+(9Ň^Ñ! 9EY !޺/=rKIP>"x |<,pU r: 6ΜP|֐%G]l@'GP) xd]b3|WBMNY\&Ep *)!~%]Z  :vh([jzO]@FQ6:ѹH_Rg|+͝pҞݜ+l؜!J=;AxePFܕZuV_qNSwf 5m7mpƥͶ[ "enΩ*Gh5QY! & X k\N(j:C5X2]fM;Z|dzd6&c]cʱW/z:| _$Ew?$)Z%P"lȲ\B_?`lH1KpS+$@J㢴O1DrSܒ~bpQNv sGM|B<"`hz᳨K%Q*J5-РpS*sBx:["xf%zIi 8BӿD=$ R&Pw7y CmD+P)l gM2N2Е^1q(1(RS+ šf2yd2&]ɘL+wcӮcqll}aFMRk+'v>tTsR!\0c#ed?w&cGD[py'{'XǛ x&j<_8ˈ<;%4h挻Jh_$~dk"t E<Ur-⹥릡*ݢBIfiͭa"j&z)Jʜ8UQ΋.?e_U+hʠ]B~CI4ӆ dz7~AŖn O|?A4Y⁩6\\.PҜTCp spŊ56ɴ2yIulzڱ86-{nE_ _JRt7II݅"4vEw'= 8}ݲ.+}&|nb'͆] dd V!#lO D=)2DsD" +" ĆOxl{+C\eJ@T\6玟M]DK-tdAĺ=qS[KEk"ҠK)t#ȥ*7$/Qt2KlRIf^ iو04$%UJmLO2S)wl2.uSt7/yۧ..ùi( D '">9E@fwL_؝" 3ESd'cf8 4 'F.Fڝ%3qs<6cǦn2?}>w2=}w#6=v2?6p苞F__V6Vmi?_&&7 2DAd >2t}l>>{);wg8mOg#_k;"0q<^dYqmsw1~T k^Yh ǐHY<;8^I*ïul7}Ep0IDUzj0aJT(BMVd_4opj x8VٷtUуRz\`_ Q8):D67[լPJI.fȯ"/Ǐ?NO${`r~]CpB]6I(UF**W}x0&KZE>_LwMMfc2-M^86ulzڱ86/9EN$hM Sb],Л_CAisa閤%]JxUt7f;yu^Gˊ GEOAUJ)E=((-*吰ƽk"zJ\D-LRGJ49_jG}BTVz?h:51P]ܚB^H棛-$ٞZ?4EС9آXvdnEu"TΥsSaLĨrւn{8D'!( K~'p5hy3uY1q\Ģ[X)r($,S":_ yNsˉ_5(QƞU:^N6PDHI%,41ꈠv=Hn/ Nd<#|hn"aƿr/7:!1bJKF7MKnWZiI\OWiP{psQQ1kP'p&NL&&1&/:6?d _|7|MeZ$)$&I2I-݅"4aExEyЂJן"Sխ ZœZ* D @W\|+vs m@@\"i4sS4Ivu{ƠNA0}L# 2"W S{RYtHG1CBbKhxZLĽB2QMMz/&Ȕ֓-w Tm&^阪OhR怷UGeZ_E;<(VJ5&Gފڭ@t̯Wppӥ68*nq%zyM&1wM&c25ɴ2yױ86:6滎Ʊi"ZP QfS iFUQTw!P"ުBstԭ:i>k]yU ]d_UTͷJ[ :.:;jxO]:c;l.Wd$Y{%OT82xp#zdTq@z[UCW)Kt'J|C{G\T^W4'1:Nyb-LlE_;hˈrwމ.̴xCf&i⚺)< 6XcÊ췸xy1.atlDF[;p$8]&RewpCP@24גEYN<_2iTYM^&ƴއSt)ӧyuʻ]2LKRwߎt)S|}k`4ަvN6D2d "hkN"?89EfwLٜ$3H3lhliwR@#yl2ش;fyl{)<6ݽ]O;ekkq;/yy{o iel%lf+f+sek2=m~y"C.Ć#C.G㻧LO}twܧ$Gș2nPia}&bkP$X/z_@ķv<_έG2*u uܻb* eѮ+`PS,cGLI?I!'xT/C Rи{Oefɪ`+_7e,׵I@%p\u E0ɗeWzָr n0%*WO|@r,HS0H-*&\yp27fʉ9U xsK5d! vϯ|. t>^, )ח`Ϫ $m6߫"]UiJI +Rϗs>u!mD-8|sM&&1V&:6=lV _t7|LUZ%)$&I*I߅"4!Ex E4z+RƤs_ϵ^Q|'wWObʂ"Ev?K?jTxII`ijU`S,pxM,7}'̹ MV>8VwcFi@|Xt=@C/iSO2S)wl2-IM~;bۧn^O]O)]sc{"e8Ap!')6S;E@f)ޝ" 3E@}ޥ}}|Svp3t-%O4^uC( hxYxir i" V\hZyLYe{nTVqn1>N9F}y ؛ŵ^cV*!cQT8K8tMψ舜|qHKН.l@Y$K]BKkVd,ʀQFR]2 ^7Rs0uGv"kT+]A pQUIE,Rd \r<U8eDQ|ૂ? j|*f8tY!bfIBzb7, lB.Ih?GtМ>HsL>Rz(1St=$:\|s+jLe|KmE.jyC:)߫s8 O1.c8ՠ.'ÙAN̻٘&16M&k2ydMƱiױ86o:6Yfؼd`ҁ«[+R丢mB _hT/t+E̒ԊgW!"rUHKЈp:hGzWp>"'Gӕ娎}׺%%/>iS,""(hDGsZj:K2.x`#0KDV(Z2gJ|)q5{:GЁR<>ODs(sIN,}*+Bfّ5Hk/sk[: jѣ 6QxJn=xfX+HUf2.O(e2j2/Lfc2Yia2٘Ld2&MƱ:6-cqlMƱiӱ:6EE&| __dE6| _ȆIMIL}Y(B }Y(?hd^Ε?xױiQV/x3| hǶDo?OnA٭y"w{R͞Al 2D 6D":tT1s9׻& F E$ˇ/ zjIV<$)YY} g=0_rYSЫ9a.ܜی @}af'oF/ϊFOgE@{,>+"dZeH"Nɞ2-N)9eLyٞ2̋$uiqW.ٻ.]添"]{E6hxW "6-ת 2+/P "vNK&w? N)'V1;E`cxs/,iw4 4hIݿ0иwnvViqʫ՟Ǧd^pث/hE^ 4t4"/tߢLm8^U˴lel|v[0yRhtoA?O]>%uiq+R>ڥi1ùݷ&1~_iDcȲkzZ_*·~ .„(' ƹW-V{|DB䨌]OY֛"ꛭ%)p_oy9CX5u[+mHSmxq.(H^srBڎ/ROy;uul3͒7e^dO~~Æ|*aVesq8u?ۿӍSJEzJSN J] ?a65W?L ɘdZLd2&5ɴi2Y86-culZ86flcӦc'h< 9$ݽ,!~~) Pw^r($TDVw$T-,g ^8+%qqڧBaƬ:k>Ko&q O_f? ٘Ld^Ld2&5ɼi2fձylc±86fd6ۄ/^/2mEbȄ/MEokl"hlbC_"B_"ϡ/5seϣ/ul^+yŻˢ/ _}- -ě<AۭDmv+~ݞ%x'D" D+" ĆOkJ`kP#ϣByslpAٰv},Dz:zq}[." /^.ya-:1ِ(G9g!?܍V R;Ccໟ&1iqlN)ɜ2Sf{lN6ONe^%ˋ"ue6w62ۻ"]{E6hxW "6/ת 2+y`E.i d8'V;E`'xs/ N,cxw1Fޝ9;kysR/ 41ylǦݱU^jlyw8wy5*"E @R LE Y9VUDR/j2-OYC,˔Mv_m5GUAO"k L`O5WUԬN?gK(|Ѻ UK@B.r6,N7GIkܥ4|'݈xynxB:+EO<ܠt)Ho)IIb ˆ>(EI#;#퇬TCDVKSzT1GGЕkjwYt@Oq>Η(Q"٪v/DӨh8C2]d3Pڋ}h76<Ɋ}OVox(;+'Qe^zS$80DPEYT}PvFE .FқRqn^Rm [UC2Bsr 8 Jk&]i٘+Wwvl6MK^/&|*|MRt"xVPBz""ЁqwEWIO~U9 Zip<7.2We4E@&]8?xnM r8D{4O ̏PD݌6x$DAzu\mB%,~ '[ZéP=ҽFwHV$sYRҴ7sN+cD4ȵ.EN4YhUI]4|27ɘ̻&1d^lvc]&ؼrcyl64+IGJ,:[C-*oKURd*ʫΜ@zg1_}hH3ˮJQ H mg^4ԊR"(i&4q g&y3Fp(`uS`'6CnAHE(t쒓6DVYDxk?zb;{ xDy[:_U> qFKmG+2)SO)wIOe6wVwyߎt)St}k{`4/Ɇ] Dڜ"`3ESlNN")6Scvg8 4 'F.Fޝ%3Hqs<6cn2?}>Mw2?}<@v#@v^tnn}˶JJV2V|dz_"AK!}K蟣)ӧtߝᤧg8>yȰ1:ȟM<K1}n̩4Woy?YM؆. x9?TW1\KK]]I/fT^ . ū[{vMES2@M`o'm,>R - +.[p'dS;~Z}"ggRR$DQJ+YXCx'M4ݷғ~cﻨL?l4GijT4|%Us䨊_Q䭊v#Dx^ЊU"ٲX9\r9e}wQZCɢxܬ#R>t^^J $,C2GoLKNjfL38wr+Y"Np緈#)L5AxZq=z!dk2?m2ii±cӎMƱy؋w?؄/^UINRl ](OC2PPDK 뤮0Y0AQ*AzHR 7]Gq{Y!sG }/TB9Xڤ}SLO}; 'ݝᤧg8W *]:_ ~6p{>qPuh #2bYOñ>Xvp̵E+[0p*A!%B]+K6Jqk<b>VY)͏99P*~DY6ATּD'yw2m8îU6ҧ/T6/T7iQusqxQ[C;iZe޽(#o.wYrr<<]IL@ <2/L&&1`:6?dV}`jHMyl"-Id'M U$ zCqvx^usLuAgɇ_Vg],QdJ:Ws| !Z2x&Rzyz(Ap*(2M/=YΖ:R(RNzyYL P*(xUvd}C JdCkpr?tӻ4SD3B\!.wYg_:"#RIl2HбFzn IvVO:5@wYkslr!哄TsS ' Uuu:6>m B4qʨⷓĀ9tQhosܦ푷+9:^[al뺠.ڥz_zn{e\h'W:nX.vL 岩܃@d@}˔knȀk&]iɘKMwvl6M_p?/E&|2|-MRtbhPB~""Oc7i;W4h:͸ƾT﫢U'עȇo XZՋzfI1Bpk:T:UBT`V,Z(zKy4YD8RZ4];Z3[1tJ>{REB i.,mH2SuF9wT:'' |Yַ}*\qϼNZ#ISf"+yU_4 |^xk)QގR `>N4I%AI%}|tY ǛtYou|S^識᤻3 犺 j2(t?BH/\}/"%V]EOKmdw=Vz-it..-Ug@4/eSErC/SSUiYVe9{.Cs+@!9׍ŭ^oX{qoS%b]压zWhP| .Q_E q16T\)%hHbz]Ty ܧ[:^MlLfk2-L&c2ɚLd4dMƱ:6/cqlMƱiӱͱ9W1@Tˈy%Ɠf럐dev+'r _xh_gWP"H`*t˓Bqzպ~ 9ݗǣQCxqfk-N)!09$EuJ֒Dj\MKW-3jD@IDEŲP E-RN:޻_Jr8 FT}< ɢQIWߛ''8NTف]sZPX R˵ˌR:,]gW}Tf|`K%d^Ld&d2&1lLMdؼpl6ֱydcul2ֱ͛Ʉ/^/6lEb؄/Lo$)Z$)6IlEb$)IL$oI@Z@6P,!E@P M(,hw.˂?ғO8r١_^%HSrunuyEzs /m8闟]ZT ߔUɯ˅EZ5xzSVD {EDP}VyrY];MOr_#ɘLdZd6&5ɼi2zy}plM &d^&شdME"؆/Z/2MzgELEowE_t}}}}HR-I(wD_l(›P-5y&6y8Mt%k۱Weśc%k;| _ _<D6ۭ͆XAtV!hխI- ImAIVD$LfC!Al DlEu*W'T%j⁉VVCcm),Y e.ntʶ|mIJHsćfEIU-Y篧LiqlN)͊9eıDҔS )^Tm ']W uڄ0=W']7ܬ&!ـ b/uZe'. ))ǀ˚//i)ˤb`]Sd/TyZMcj%`2/Lfc2Yia2٘Ld6&Ӧfql^86&شpl6Ʊ:6ǦMǦ7^e98HEʊ."?*{21YcfQtDGZϹK|BUBEsH<:!0*sQ?&<:?SH,z.C(^d#Ks9d4QwW&-T-%kSptW\3 P#Hۭ?[JYd6&ⲅ;hȢwYt8]}0Y2LRsr9޺$ѐ|<:B=>4:_QHMW'zֱ?G슛 pJUIDJgpqH§9ݿ|&EJ(%?ߋ]P>)+Rd$RF9}S[?9Lɞ2/N)9eiɞ$uiqW.ۻL.]OH?OR+hAËjhVm.I b8 Egob8'V;E`'xsx Nڜ"x~hE^^ 4Uq G j|wt?_ݖ:-L^ԟ/>%XM">KG./NyE<ǻ=-f8Wt^|i1u27Џԭ\RO+65F/KJZdY bVLK}gG4h]B) "Y+"j/o*hI MI|=0çDJC% w!@^[%u˻rS2N{X=\ȀBsP^-n;^}q*GN)@B%r%R.Y#Lvh >&#eT]#Y-ܛ*psvCrFuuȮh_g#clѕٖ)*'|TW0ÓrYgv M%Hp\I%'fY]^i6/8Um)F JRd6& 'yĊIDk|f@`u s$2=~|v$qbT*G{+ZV4օ9E;_ۈW *i])Y.#F#l"=yq3T3 uS2 />NS 8%oY_&Vu35t|NfC:8!>J@c=T%YX)E8}Uag(afs1ES`TZN}|dzd2&c]ǦcʱW/z:| _ _$Ew?$)Z%P"dȲ2&P;$eog}U{1Ij;N]}0E|-9Bkc!Kd8$70G?I>}.͒!B;K^.pl@k]WVc\Wts>Ж!VEf8'JISS/gQn9X vCgɿ*%=PW3|Iå \҄8@ $O.qé3I],YrCCe:'}hm!ρ-ɘ̻&1Ld^lwc]&شreyYiGu~ܤb=?MR(vaD8EK^3$+, ѥ1%^sxg"Ƞ/iwЄʊ(ȪU."yZu'N*<R\u=2«%pUtkr pZ"H Ǐ+$zopAԤTCr =p%IK p\td~d6&%wױi&ؼr%t7|LUZAw?}](OCoG_|pӀ-+ї _d/6:Ac!#eCn DƊ"v{Rd 爠7A",EN-O4[w‘aʔE]ƼR)f$|kcO:j5Hqˢ\g jBh#h5?̊jVZ^Ӂ,gE-bN/8E|?̊gD/\un5$:pk_/SO)wILOe6weSt7/yۧ..ùiM2l e8A)2S;E@f)ޝ" 3E@w2=}w#6?v2?vp苞F__~˦JV6V|dz&Ć]" <dž] GwO>o '?=ùO*lێ߽A<2/⟬m3܌otEN,yun/>"kDlE|Mګbm`p٥.@{twj8QDC^cȩڑ=U]EL*ːu_3G<ȪdZLd&d6&1dLMdشpl6ֱylcul2͛ojLjCC//,RnjJx ߕ US] +-Չ<:vh x$c펚k$Y<*ςx;$WUWN# 9U2(>T+SMK;Ezأ9oƑ%)*#DEmc&d q&enƫ|09)}fp`2rAN*_'9e KDKS_$Y!5.71z2ţ{]Qv\m# E%t^kQv+q @P57pOF"NM70$E%t( ōpCiHD\!ZFom7)$2E_"էS|b)Uez/%сXTKnK lL&k2-Lfc2ٚLd4ɫlcul^86&dccӛc/" _dŋE&| _lE"b$E&IMRHRl$E6IIR&P a ExE@2P-!Ex'PDdE^O[9{M8T4I\ p\2L7v>w̄ m <և̰htkȾ1 >^s(]Cu:!A N4ZJ@]Q2G iC<0wEUtD]P-Hs"QH(# ٽu' iIfkoEO0 qˈ%: H_S]|gp"ՙWEh1yʹ"\ dz7Y}<&~QKevyn*O;u J&35M9)TޜcWiũ!;v7,r_1raEVd6&5&1lM&c2oL/&lƱ86[fشl{Mb؆/Z/6M"Ȅ/ _l2b$&I }$E&I?,aEx,aEC_k2/G_ش(+Vv×E_G_K~~7y'h[Fov+~ݞ'mAl 2D 2D":dܗq%4oN$jOX#Um\_)3;)1;kenS1uEtse(?jǂijkwnG;VMFRUM^4UnJtc!A'_j?3ɜ2S)9e6Lٜ2m2S^96+R]fsy.'wA=-")m"/4??Em8ZU/Lʊ]{p`A.i d8'V;E`'xs/ Nw>hܚ" 1O'f8~v'u?ioM>?иwnvViqʫ՟dZp?0;ȋh|~k5G˫VGm}p?_f/f˴Rɫ%+K}ŠlA?O]>%uyq+R>ڥi1ùbͱ']0@(R)Ә J/0=u fx珲*:&*~ QkD*P ~pGGe#aϮ@ǡ/C/N:Cv*qG{),D0YFpc)Y Uu('G/*)k*.E/eY29e/l@GAcE3zsAi/I #Gi+rhCཨɼ0lMlL&c2Y38ٚLƱidc±86fd7cG@+2zf"p ?SD}U!(: >"/* ^h*Bhn"JRY~(nٕ>߻8e|QGηZ2u\q*A9^(Tç ^?* dnDYYm}Br*ft6-vٍBgWTżLm<,C&La-fM;?&dZL7lLMd6&ӦlMfؼpl2Mֱylcul2͛MֱɄ/Z/6ͱyȄ/dśmbx$)IIMzsl$)LRl(B (B""l(B" EBQ1*AaD$wJ#lZ/;D-w ާjg=(i'V U踻C0ID3C]qK$oS)HjR#"$Mhﲿ*>#OE~`lq3SNg<,@͵L8ǘcfy}6w4`.~QY&3Jx(C?*%oO&bGOڦMr6i% 1+D~vڣ*Y;VNYheLnQ57Mdm[k2iicqlul6wcʱ<#j>N} ŏIՏwye=宥Yn5IEs9QaA{$TcI*K\jթc׆hk+Xu!E_:.s)t>"@R. Ø;їȃBuXDx1>G.#F~(DP?+M&SNZ! ِ&ۈNuN.&ݟ锼sUt`2-L)L)+Gk>c2md6 )_^^cxcqltlM&|"| _d/vm"x3| _lE_|}MRdo&)~KR]E7Y(&a EvM^/M^w7{&vUYػk&_l-&$&c!xcov+D$d Bb'$&ݓbC'e KM",Ć"C!AdS0u@A/S֩p$03\;l*Ӟ~r|e%,:.\?9L[nܝgEP'klzʴ8e2l]2Sɜ2m2S%ue%ueK;I/6uff9E74Yf "Smzom2KnR cf8D$N2D)؞"`3E=E1Sd S[3ˁF9и=If3ˁF9и=fdy5;ǦcSlluk8y9M7籷Ww䭁ݜh\E>9ݷ=иomeop+ކl.|l%leu/vK}e{K}Z}t&A">6t]RwIMo];I/>ImS7^E,-kk ߬B4s `(dOqT[}-+\և!Fʇ=bzbbKce߄D-47 Zz=S59drhDpXGhV0'`j5YE:1h[&csUJ5‹Ec/^'*eW=)IDXdAFӘ,Qt`8Ee;@ 5dLo0cӎƱc_(UQxU?Q9n[$$q/8/9ɲYT{t;TS.xhn/ Qx](z&ZVmy͂(Jd1uGj<2!ä8 *Px_*FCPb+I G| jJq몢IRXkI:%)&Ο>_196AnIxfMvz=^?'(r*Genr]\X˧,N&{ %t~بFEکŨMñov*iTQsձ%RYT.nFUqjo!Uљ8jmךخgb72 rX $,V~z/ uAQ}!}1b56|从O;6滎Mw?Ȅ/n⧓$w݅"4aE.&ҝS)09ɛ'!:&KbV|O -tkV4Xcl~TȜ]t/l+׏,01[0K1y+&7^fDoYv/ N <ߙe수Jj\R K, w'SMI=ix f2id6&]-o0cqlul6wcmּ<զc=վrlrJNare YZHƨ:s(/&)¯/e/d8_\&|ߠ.4JM.,SFy@&5Tq7Tr__O^"19:{} [e(/O*i9NZ\*&_MMfc25:6=l/z:| _t7|$EO'oG_|P4vw zveEL}Y D<6"9"-b"vl ۓ"CnO ֆ3DЗNɆ Z{4[ X'Ɩ\7|?4[eHY:}ޭ(2ИZuDͮU6z0q~؟,UԽ9k1.\(3ttoVdS&ste~.t.ߍt)St}ۧ.1SdC.ISlhw{N"o< 4hN6 4Zfv'u 4?7 D0MdǦOcݻOo>w2=}/z}}{6[4[yJJ\LOe ĻD"y ǻt92?}NNzz}@B5t;v!dbS #ཨ*շ]RH%x+],D:^)Y/a92N-Ĺݸ;9`,y泅z@ جfkʹTQ"/TBh]S7i҃.XeASx̭cٗzV]%1~S%?;Im!o[ͻ} L!TWjS,KEOmnEM)^{4LOd^rlcql^:vi|k y =GˤX=k]jOC7*ͩ#v:/iZIIix$%`8~^Ҭ>֝߷V=k9@dD>9.bp^;4.BX8UΟV}1IbSGZE意ԴS==A+j 9CLZ,D*4vy~ P`D Ώ_Q+Ou,[C˟Kz Y9 NXR.q%O"\ҋ:lsPFo׷Q zwqsA#Om"L_nEPx1&`Kh?Wu|6-D+*P3J#\iOja256ɴ2ytױi&شtEዟ_l/"I$O')2IIjE.(BK(" `s|Uֆ.Sぢwxܱ ,pER{E딏*u䚀.J[VA*吻p]Vh"i?rVS.2?wMM&c2}?:6ul~ڱ86{n__LR|7IIMeZ@ Ei(B,'4\8e-+be _t}M6| _؆/6D%&Ė"C&͖"C]"oAd 6Dmv+Al KM",Ć͞[" Dw I%Al 6D"ވ|\K|9qtrm(Ʌ"}ݸQRUBѴU\"G.d湝{Fm,rt7>t)ӧ"uOy1wg8u6WaR. W>?,0@**g*]Es 7=ՆZuy_i` b~jU3Y>1v=͍-,HT:mYw}4񚢒r Ee۱S; iנ]4`R E%8%\t.0XoH J x  lR15"cWLd1ЦM'py^t>Ycѥ2lLlLfk2-L&c2ɚd4dMƱ:6/cqlƱiӱ:у`u!cSg0tYJk]~FlQ C<TZUgG @ nTBԥ;ᜀ=w.g?$r>?fB,׊QelįM+/9<R6zB)Ʀcúxz,d,Qq8/RJ[ uL4ޝ sTVC*OǠ=Yg)p|)e ʦPcBq(B!Gh 0-8WN#vH<:?'$j6ʊDj8{RȺ*C2z%viԫ#8 t6Y/(" آ©.T٫azӻK*8Qb?`I*#TB7kJ! =TP_E4)%%PfiF"yqPxppF>:ޱ ӸI@gu-&%NcSRŊ|E)G"Ӯ&d2&5&1dM&c2oLd6 &dƱ86[&ؼlLEb؆/^/2L"Ȅ/ _d$ŋ$&IMRHRd$E6IIR&)2PP a EhE@2P-aEh"GD] ", 0n̆eh%u+i,1^jGüѦK8)hHS?h 5wY Ӹ\F\/s8Ar߹+K,<}Rzԫ'gQ›qꐖKs<0am}hG)/N+>EhWt5)""aXEn\x@I B漻^W"S/1uk܅Ի] $#x$q'+I&V6$>#"(RR%LnK_od6&dL&1`cqlul6Mwcʱq^˒dB(Ͻǩ+_F87"٠7u@5A47kZmĊ_DkG 6H܈*W(j"Ze[k*5BG}_[Ҝn*g߫qL̕dբ‒F]/^܃c ٣G~Uшp`:Ag_#G"]$iZW:1?$K u}`_cgʬsBgRun!\tE~@li?\S\>!a]pwqU\lŨ^ iNGya2ٚ ɘd&16M&k2Ǧcql flcqltlzslh؄/Mb؆/27/.m"h3I[2P/B6P6Y(k}Mm p~fc/D_ێ*+{7|-D_Me䱗D$yl6D/ynŒDv nfOjIM"h'ņ/>A|DY" DbC!LYwYb[u9y{U'k,icIC>y#80qt)ύX$:u<nKD'q^sDCTHm"C)"]vr¬HNx?ewCLq>+RzMio|)ɜ2S)9e2Lٜ2o2S%ue%ueKgu"S*bFo5hS|s`A 6roNlV p.)Il3+}\Atf8Ad87|spb{rԂK>ey?scSp״蛼!E:@^A,gSW8yG9xZBӀ g&okp+| 8'-+|n&~)^2pu8/*z,̋4B{m7>2OꡪYOb"{h  iMV;> "zh@O%6OdZrlcqlcѪu3:V(g"j,uEդpbXA @ZT\g449S7eB8Eؤ54#|/@^b>jjjZjNSyMn]_JQ É8eM% P L|!w縌qVRBPX;B4j$,vQ XW5~aI/f4}])ֳtGc׌ڲ:v$MP>}̣>]ٵu%/1hGJs<lrT!M? X _UVRǮR*Y8T.;Eio2F c BShY? 8JOw͟r -^pAuxHT$;yG8! r;>hdU GVO&)"ՋPZ9pEQX)ĖO$sIH$:ӱ(TS7: 6N1,DozS%QZJ/ {`M&&1`:6?dW _t7|LeZ$)$&I*I݅"4aExEd yU*`Vq.ecEOP~P^vGAr2nՍJHMg<Sw)1TBV$ή$FWï.ND;A_Euh9TLPT-+Dȗcehpm7|E +q"OA`f.=q9L&=\d 2˓Ui?@z\V I7QrT 4OYޤ}SO}? 'ߝg8W tE%&/"Owy_J~N >Ph/S x [#.Ølj)ѫl}6QYC Ǧ+Thl2!'U#B9UNv77o|IAmrJ I;r~}=)y\1}$nQKub (Tz3^9,4T5*K`'%j &IkO +UbRʈ8DqKp3X^q[2`p#Cg̑Rjy~NT ytqZ%I!P{{ $1E7 -jWFlE~YD.=wn͏jE Y,UIg O/ PG104aq8r|ߵ~M .\Trd zNVh9:Wia2ɚ ٘Ld&16Mfk2ǦcqlM &dcqltḻLbh؄/6l"x3|[2IIMbh$)2Il"x3IMRl/(B"l[(&! Ed<ϻKEwT8ˈy/aS>"A:,KI%)g䡶Z~w]y_ЕBu0XfP11gJPُ[8tJYW3.sv2s|m9_sbӱEmruGok#YV G [UVq&! о uIf1 9) ܕԦ>.)UF|''*INyB3zP'|8d:#"/T*EN-*Q%qp%7ɘ̻&1dZlwc]fشtlppg>ԔhJ`Uh/>BbC);nBw-0bˋ2RuY`).TDPx_^z]*@uh:e}&^j2,Dm,y+/W,=g'1+)dy<B֍'1~&:9AB:Ht(R7hxd+\z4kf/gwE]MlL&k2-L&c2ɚLd4dMƱ:6-cqlMƱiӱ:6ŋE&| __lE6| _Ȇ/2I/&)2I7$]E7Y(B&7(i}Mm pKE7׶cʊw _KE7v"h6y%7m D+{[$&ݭ`C[ٓZA|I!xٓ2D%&ĖbC!Al DбVf* 84Qos9 ]Ӭ4 X_~G,HK:Q^ ֤fr~STMObjdPXY>\e'~4ѿ8+"8+" :b~hϣlȂϢ~ќ2/N)=eZ2S&slO)))od2풺l2%uWwݤSts`_Ew~A"S U^~olSts` B_mMsIM`\a D6Ɇ%ù9ESd軧1ts9ɫ6;иs_}{q9G7Wy}q /vnpenllnԗe_nL~ooAKn}D"DImS~#uw%G7m~5Ip ,nyE}w" ?]{\.YVh!CQH0g$" ^7Eq>1Lmg8 jj-UԮk*& DZ5r E_oc&F}UVj߇&>8\ΤL0<&U &fW!|D|8^BO$7Х)lw ?<.+Wu+ )x]X񳼘 J2^y=>8 /($!6ި=QXvҺյ|dzd2&c]cұ% "6Ov+]P z)yPD)X_U4|D>[_}a/gL`tU~y4XSXY0reg* yji?K:>1z5dL+滎MO;6c/ _t"hI&)~:IIRLR (Bw? E@ZA O]s󘥹<~RSqs /o.w%SX q.$Ft)8rU xY}PZUlHc֊P Wâ<"ˀK(P] 7PD;2Bՙ1@%}#|Ui?j-rD2+e0QD!z #>"HHVzL7su..SwztʹBك91I}$z1Ԏ5YE'˯C'"Wpi^M&c2Ld4lLMٚƱ&]&6cqltlM&IAVFzii7CMڝh ^'oO32pmzzx&)y,*/S;ܘUC=tm0ĸPTWowxy# ԗJ1VK"ˤhw誸ؽjݧ /Gf`t]cB?mfDګuB\zPaŖcΫͥaAFUzlݘGPajux>lu9pqcNMY` &BNJ#8 ci"ZW[ x8-'??cZN=|dk2?m2yi±cӎMƱyثEw=؄/ZEINRd/](BOC2PPd8.wtYrbc/؆/27m"nAl 6Dmle%&DbCf-ĆD$Ad I[OA|DY" Ć"C!:u|ZvǢ1({/jO$ $kAddXP4ջLmZF5NUIAJuݝe{)9eZ.ݻOvWFlz:bez:/4yyU)2ݽ]^ 'Eثt7/yy5Y^#苟F_6}҆le_&l%lf+fdk2?mΟ?A|t[" DDY" Gw>I}IVwO>~ʋN;Op DIrP"d/_yy?$QzJݽK]%^WD.of٢D.ewSTC[p %hҠ `*Zr3ku@8`ܣtI@>) !dڠZQ<YUȮɮ<J6[N߆7[1ҜH:)TA_hzέgZSPlq]; L~ ?H)@Fn%]?ڧ̄@(_Wt=AQ=]0r@K/D\.W+',h Гvӹ(X9u-nS4\Vf]&o8h\xpz1X'*4ڀ6rn_EU5VXQxQ95s›>煶/i\8,ϛ5&"8yx$mUjRĮ?=\ʴΛvBEW=#p e_ =O@^ROU}τӻq5 -2+ :OF ivk MȵS؅̋ɅL>d^.dv!]ȴ2%6-]bOl^$6&\bfbOlv]"_hQؕ/r|bWh|[rMM\"ߤhѤ5)vM}bפhIM(B (""9(" ECl2Ln8$<ě֫#"y ϭr*NvƠ(ERb@z-ʔ!>!U?Yoꖎ,*cb{kzX$SO{z,O&Db]r6P|mS[*SԞa tQ C AI0 pS!{Bf2.dz2ynbKlMlvO]b2pk:'f6Dg択[։LB9:ur2<%X˨"~hud=ʉg)X֕єmf@zd'vy#PScH/Ti)Oi RhL+gV^_/A9UF:Vy̫I݄/fafV4+) mEK +DfUP u|&\S&r~hEgZCVlʴ.PjCWg^>k<U* ,֤~! |ȼ]B&2y3d!KlZ$6&ؼHlv.'6Ħf/E|Ѣ|+_Ů|fb_5)z!bߤ5)lR;(O=D_;(BPߠfKEv+nb/=D_ۉ:V'fZ/zc/ ~Hm Zػӊ%i;"WӊݙԒDL˙#) D;"Ď"GDHT_N(! ӈr)((o]$^x)ˆ?f_ofjW.ҕ_D9P:-P3孨T?s17=!,rԊb)Ҋ Suڻ| #>Э2-V*_eZ2UfW**_]R^]R^j/REUbS4L_1RE@Uc/ù!Ep0csIC"hdGъU,P8" "߭"XczHmA ZAt9Vt.!ݷMVݤt?ƮiyLܷ‡R4mx/.ryDf ׯ'o]ȺW&iuYub^WJmk'xRȫu•6jDh:/_ԇ`[1Dž1t~9+B;BݾD^pLrpj+8iS M , Zc4FT&vb5dk֤BER"H 5ڸhCȼ]CEBf2مL!\b"%6EbKlvM>%6o&6%vd@_CmGSgU-@3fK{9UbnǹElBra|ۉ{\] -gΖ3`(VIaQunP3J^rrj:&)HqI;tŢ[ocj3±&hwfrKr!:8zErc 0=~}SLT!MZaPy̩ruU<6BV!#JKø=CTTy/g%ܣZ~yW"uzFv|YAXf\ ƣ)WbM5ڴ!IJ^ n 1A9 $9mO)xJF gPRaN@-#-*iqqB&%1ȗc-A?v/1Kr-BGAsޕdf^%i_Fbd !fAmÿ%"COV#ZoO9BB jMI{W60(lv[*ueDh{dl̤c㍰I0unB+OU T am6%k9xL|#uIT&.kx' O68 m6yDRț MA{8 c7qbVm zSN՗31{1!ꔏ-bƯ,R%] @S 9 '>Wг2lq` M*v@ TR@RoHYSI8K\<8]@ʘNya,ssN]I΍~~',$u*bBEBf2-Bf2ɇ.d }.'6/\bKlM.i3-]E"Wȗ/^/r\"_ؕ/,_V\/M]&žI"}CE" E lD_}mo!&}CثcWUE||mK"A<6;"Vӫ_7@;F&OMZO]@y*z3Qm@c;?A$߻_b?`h0 cU*[e̋U&V*[e\ez[MR^]R^槤j/RE@UbS4>-UPE=[/BEp.)zHl3+\Af8A sKENCĶ`)m;TΥ 5pn*uFz(hV4R?&{WcC=luo]qRM^J%h\k[и؏Ku=Tm W}+An9_1 }v2=/o[ [֭r#Uo#]"hICo"Gђ}vI%GmRwo.u!ݷMݯ4>8:O]r'7dQ 4ֻ/}ӥ\]I_..R7]\8׽X |.u)xFb؛.0 Lb]!?GovtxA]ӦWƦ^uo/vN,8HS9 ;C4 qZo3.D>oT]8S=O ",E1\Zr]}.@@Ēv} 564ѱ +074z!7֬iːiɅLWMO>V-Xq (#@F-&z}"\\Y<,oF$RFZEЖ vUuLRE.~8掠"v}ڽGA..ibI4šfbh q5զ)&_GsPp.ÎrwӴeULQ|3zٶ^;!w<yK=/',Q@9E TSZ*ӋhHl``"C{5E|jtVSMMe#L<6M'\|$mh]-VK%>l<^^v /3@3l!rq li8jR7eqq¹.~C.|AV=}(=r'uغ v^ *V'异:cll/#ohBֻHmrȬdpD9XRuM Q%EF2ZV 'M !W#_-pNs 2VMnb={54p*|: %S!Ӑ! W!&6:%6-{QiO/r勖kѤiO7)vMMjE)OCvPP[ O#Q,m]r0_3zN/*|c3&cڻOB`aDPt&%wmDuJ]e߰1Fu4Ygl,~b#&b&IQz>^@ iĖWY6о]UvJEF˰њr&Z/*U.} r+ TS'bINPOw4TL\ȼ y4Ӊ.EO|+_,_&O}IkRjR+(BO""+O'}pB~K鱂?}X%۱bI/zؗ/r7o]"A vDm쉠%%!Ğ"G洂<ĎD=$A ޜI'ADy"ĎbG#A;JIA3u{%%>~Onwx&wEEHOn~T1>EiflfkѨ*(7ul^'ݚ3dբWRN[x]mYv !/a zL;D+ק^haVQMﱐDOCߠ{qĵFFP5|S+"C*UO2U*2=齼"ubӊM+bO2}/4}yp>E_ibl4^1oDO ~H'Ap'ةp 'ثȩxSE@o "~(!"`"M}"AHOPH^NțN~p:A#?4CA#yA#;A#m*u AzlzzlzlrzlccV2zWU^e~{y%N~˫MO+6bo{՗i_O啠//?E_iý/7le~8_f?l%7la+ [!Ӑ!Fo!#)G>D;"6 t=}>ޤ}U槫L^_pS 'Zù5pƓΞ/_ԧ_in _XLvᡤӻuȉE"vJQQf?pT9@>26 gS0\iLj5_d[˽rW8檼n<*P+'%~#|>>jO4Grٸ*"SqF h'5Xy`d3.XPXu|} 1&srx#ȳp^\/>zxP޼lVs! |ȴ\Bf2i3dz %6/\bOl^$6f]bfb[b79wEM y4;zNM)o@<1Nd@ɗasj1{ij*5/ipxK9T5_z ]r' Iɪ/s5%X1:(K8Fdd4d`R0R-¦is./{<`FŘPeP+gl~B_U1ugu bAf6!_aT-\.nYBViy@Xv%SXrPUbR,yهPAZUYnE!4e$?3ͮ$ V<(S/+ pmj8 k_YJ";7YEQ#q֬LڱA8.}6!>/b O-ѶъmkbUP;>S\5 /XPNj57#KK*۱B^j2F? ,Ee i 9` ɞƞhaQS&3)%p y5$%:J-swpz>";@=yUu?LɅ>d^.dr!]ȴ2.'6/]bKlM.y3-]E"Wȗ/Z/v]b_ȕ/,_V\/M]&oMAz!bEAބ"E6C^/~C^ηw{!Nձ-w}C]ȕ/^]{IC"hfGъޝV, zHmO+AVlΤD?$gR ZͤAD{"D"G#A"êHl-tɸx LkIUH6_ 1/=@rޣUhvoEl{ݤ"WOraUg*y9mt6F4yIvh-"BfVH=Њ=8;hEhVHlj'ZʴXer~yV*_evLL~wI]v{vI]r{FRK=TlSFh*~"Ьfs TCnp "6ù؏%Dm+sWENCĶ~`)m9TΥ 5p*uFz(hV4R?fǦ{WcC=luo]qRM^~' /z4*cAR}ۂU_~4ne~8_í}62?/o[ [i5l/p=R_>R$t? rD}+o]}&uWNnRK}JF<^qTyy}l] K߯]l] V( ԋSI5)79˼Ilr7+:sjW9R2G}j3.PeȸO!^kw1CnDūbgft2dS?;5Fܻf. i@ŒLc$d1G$,Fj &*yh_UFqP^,@ԛ=" l9./_MR^wpb$yxX׷Oe =U e w*$),2? >2y*ib]b25D{Gj/6~fbXa,+d=dϫOO.UoDT1딏s8sbA q/&v ǨjVX*uAլ:dᝯեN9qNv lQgZ b(MA/tmUᙠ0Rg7N7DDB&r=Hڮ|q%WgreEoM&>9W7l1cFl_NJ,䉝ǴǕr?=:9!+QZQHl8ڐx^Y xdxQO;`xBZIe ,UQ\&OV1a6x^-%=*Sg4K]WZ js\>]BݐɅOC&2/CLlrM.ibKl^%$2NS}dY9ɿrX!sZzziחŵZmH,TD%rLv9TdE_͛_\UnڹXVUmz&SġUj+,Ja:|M,c%}"B? [xgФ 4ppS@Z^iEĝkE|Ԋ"2C޵ۥ6XҊׅ,x|H;Q5ߐB$u2zɭ2-WyLn/ӽLO+6}bv=U}׾`iOl2 e8A牠M9ȩo'TT" "?.p4Үs/0FU44niWNM9=6=]e*v=6?齼4nWlt} 2/ovp?~| 7la+a+4dtM"ĻD;"t9v>rt>~Ut=pҧ5t z}eaxC%6m&6^eP'}r$8isSq f)/^-t|HI\P_2 UD(Wb 4:hI`e8\^~}I2&A,JVot 5Ghf[q+ƹ_VSBM72o\3(Qi5 )%?48T>ԢrU b9MƏ5y+zYES% H\-_c7d9:LUQ@X6/ߐPU9,)2㫬`I̲'$=ت)ɅL! 7Cf2i3d!Klvͻ.y3'6f˽,^\XN}>Ȉ,_].[w-^R40Q~jӴ8/[9r>l8qM{RNSR E,A<uia6GG8ﮊ݂^n"WhbG4+"'TXѣ_D9m٤2u-`Ϡ#%ꡑ%g2"\o544dp`QI^'S4O0DIҦ .$dKnXҳ^*Rb ~.dv!! ]C&2o>*&.%6&ش{U}bWؗ/^/v\b_ȕ/,_תb&ŮI }&ŮI}y( }y(}nȴ>űb}n6A_wylO& ޝVx"7ݙ'hs& rD;"VD9"Dr!;%HFlkK xS\bwsdwA#6r%=<=cjݕ͚\gc)ςm6ۍjte8Dv5uPސzYv\0@9Nb^@=vmX/V=Vy2ɇ̋ɅL.d! 6Cf2ĦEbKlM&|bKlLl6-^{jgJ v Y2g9@> 8j\ pEУp;YRf8^vi۽fK87]CFǪˌ"Λj"d^bhWk9a2Qyƹ|Ec&B]PtQ,Q3w P凊]~V{/5UrU!Ȓ{zʐ U7/ d d&l !TLFᖂp{?B͛V`ȁ`YcMy y~Tՠ4KAb,[ Q&ȽfG7/ '`Vz8;`c6X=ioO!no&Q CƌM^Ob;ԍD堤183Z@EA0 شETǪ"^FE>39T]+~$" ݜny+nɥ` GV?/Ln ꤙtL/W9`+Sj4O5Th㏎v^ey+uZ%6m&6%O|Y>6AY:F<~a9I]ڕtI,?aos_oB!Pǐ^p4R=Yl5!a>tԱ:dr!fC&شHlr>i]bOlv͛M>^._ŋŮ|+_ś}Z/ߤ5)Z/ߤ5)ϡ/EAZ/EAϡ/ sG_ؼ8V/-_}f$>O>h*HݿO.uO 犺<2olA]NReu;@VmQjai&#ṵxHA%ML6rAQo:-pA>4EovK$qbW:; M)y׸^B+W'2M|e],'28pZwIz$E}!8v9_^fho _ׁ/CTB:!Ęf-ƪ!R!@K$?9^nLuǫ*:o[ȴ]CEBf2مL![.i|b"%6f6|b |ոyݴ8놨M 0FޔJP }WVlvPJ,ěJ_#U%*(4jESdMVf)U6 DKyܝBGF#` S󵼘?MonV.K:3/ziO{ z$D5"1՗j*hxcT5TIqp4Кe6մ\ymvA^pdV|[vq" 'Nxnz[L"cجhEj-qS̙lvAW"zq$)Uf RFH"OZ1[GX5CF ]1x`83^&`db/ZIeK6 _:=SQNPna' irȮJ+≁g:. cu5պEfaGϊ1[d)"@ƼWB;~! }ȴ]B&2i3dz %6/\bOlZ$6&]bfbOlv\b_hQؕ/r}"Wx|/_/&žIѢIkR&EIfbߤA^@vP=aEAPM(l\BA~/dXEbs=G>ĹxsC@yQ'i8X2G-FNUrT7+ibk"7y.LlA衫p;G 1(BA^&凳r"דkrO5x7*M$ĵzy HL3K,dDL}q@&IrC = pAS,ϩZSjQu{zXQ:ڸ{Ѻ\ޔR4F( dkeꗳho? ,(I%"fgWEFZI`t v!+GF_r_o#T] lP<4{ori!fR{|~ еƁJcPV$"ĭ[rhhSBf2-B&2߸/r!fy%6^%6~?/f/kɊŮ|"o/kZ/~޹/פxIoR=E_}"oBPd7%k;|y]/~{uxOD_}m/r勿QC%mK{b ~HmO+AVlΤD?$gR ^ΤvC^AzA vD;"<;l=^G(+:rCNq:J[ @9sj}LvUuե[yNR>CIƟ׊iEчu ZrL~yV*_ev̛~wI]r{vI]v{NRC6u.ݷRCf՗4tRE@Ucj /)zHl3+\Af8Ad87UK=Nlȩwz(VSREc/Pи$'h䕆s}Pи%'hR_N+=IjǦzmje걷ɫ.N,u_P-h\Uǂƥ&h^|Ηp+>˫2=/o[ [i5l݆"2?/oW!Է_Z}&A">vt7hVt=I*oЬ>~HmS+ u76FS&w/(wY @}F#>/eձyjmFõEq*2!]@~4)l+FVױG {+/je#WtB擊zZz9bK܃noM~YYQ3;ZZ9HnydP^i)}$bUMu8c=}9I}5U}mE6oo@r;X K^}]/8SP>;e$V*uXWv#/C!Cf2/C^$6=MltbKl^&6 lr{2^cڥ:j>%1nw -t{&2<[m;=M5ʙJ R0P5A8@9 QU;kT|0k늾4|qxIje*W ϣ5_MрPqďj>V$BWD?̞ 6)'m|sn4x'~OqxkF1x^E=TAa~rVQ!C y dYѭ,@i5ผ/TTNb1,aGQQ%&):Ij9K؀C!Cf2}#_&6=MltbKlZ&|ş._-עI&şnR-S(Ÿ"nHtB."ŒNqq=1bh:Y,xc"]!I[ӥd6L؝!cIu= Mp7@:[[rQ/TȌ]_S|}`Ҷ'%3Y`M|||4M(xG@^,0,:bDI2~m56cWaG&r:Nк'pjܳW:|P ە (Hh:'Xxq izjb5em!mqjIP}/c4![r^z0/ƙ~Kr?ĄT\">E1yB( \ȼ2i3d! 7C&2fش7}bKlLl~Kl럦Y@ rуS,!b03@5_:V΋=- H::,ŀr0أRxo|w+4)daJBH- u $*aMG X Ȧ tQ:|@jp^DH.L)%; aRv8s463/$4{ @h(ѫV8u|(9h eי1lF{I@pqԿDf O&ŢOTeE!Ӑ! /&6}:%6/{QiO/r勗kѤiO7)rMWMjE)OCrPPd8)OUsq bo r勞/~ȗ/r7ED?$A A zJC"<Ďi{"DO ~H'A9#) D;"D"G'WluLKdxh1!GWIC+:TE3oWD<7K{T=P#$Ϋ)uy\ n3(K7 U㪋tVߥwȔ}}v x6(mȐ%Tޤn[u;6tL^zH R*r*UO2U*2=齼"u RVlt^Qo{՗i_OՀ//?E_i}~)ƦOcD?$A d8ATT8UT"`" "~(a" "M{9A#=4CA#{A#;A#mj8  驠   iSK^HNMOP^NMzlz*UOJʋO2}z/{yQiOW애b/2=龼4?Vcw冭t쇭䆭9l%?l]LOCO zJC=DM"ވ GS}>rto}*UO}[商j8u *^4/o"?{\6ndF5J$<+W:uX $Bucb] {o˫բCpaEi`c52\+MvHX)X)ƚ^@͡ȝ7)rszu"$K/y\%c#,DB Az@qk<_ k2r )zUL (Pk׌L4Tۍ,ԫ>Gf_OCOL.dZHl~&شLl)Z!FVRC\ĎZ%Xғ fg]Q̭omaYK*'v{G37}fC.M6bI +.U~MdNG|$C:R硅}8%$>w<29*X!# <xUMHvjlE,w~q1*M;eq˯3hu68TMLyUMQU4e KVN@PM.n0t [-c,j"dz2:dv!*UbĦO'6Ub?-_E|7/?mR&ŮII-?"i(Ht5my1&֓Oz4 $eCqߒ/\ˮ#_{[(yUsAϛ^rO:zSFƶHD~8,e,6 |*)ⱦhAA}8VI2Z=?2$úGմمL! 7Cf2i3dz %6Ħ&ؼ]bfbOårS4Bl՜t4)ys?cFV$)QR~fiJ)k𯃵35;B9T䄶0gXR҃]6_\y[93`LS!;I47Y1' Ĝ5Xbí5[Sjg=N1W]Z8ZuaǨz6K(Է6n7)jFv:!PG,]l\ SƎb10FlYS)@AVE 􂍅*JuzTcQ=mqʥ Yb`ZcG= ц K*)DN= n!;V~n-e]'RP F8Iu(5eMjG)g]..t^2?]e*[e^b/ӽ̟+R}//*6=銽+/Ӿ̟˫{_^/zk5{C_+O16c7MD?$A d8ATT8UT"/?<cȫȩxSE@o'h䧂Fz(h$/h$'hM 'yA#;A#?4CA#yA#9A#o*u yS^ZezU^VWy^O8}//*6?銽4_ezڗ}y%h|+EO}p [|Η[ [ysJ~غ Ly5RAt{"DDy"GO>~H}IVOW?+R}NzOk8WSjLNsrDNrr]G+@|/\`G %{W,zS7d_~s g^F"o&I^A_VmU?$ڵWÛr[.6+=و}=W**GlMrE1t E>R'ur#4eԷkE'? I#oiR|܀G]` x:͐iɅ̫WMO? p+]E.MEg9(KϠa[5@>UsrRBȗaAMj9 /*Ee}D͟_).}f'S )7:nMI6+XXt"[̫pɝ7Gƞ4 )Qa@.I1Aw!#ky,!(iMHdnZv]e˽3=8hH]*ǀfU/Sl"Z'L{!Ӑ! V!&6}:%6-{QiO/r勖kѤiO7)vMѤ~ E)OCvPPDHs(b2ջ6ƚ'9*i LuEX9PQ`c+YTHMϿ8WE‚ԞQ+50j-DP]R6(6?t{#`Ӊ4J?O #6<+C K]m!ŞZ%h1c"nr{rurΈY5$ɋxzcʥ67VDlYk0A~nEC9+wC1h5K7 ]ߠ. $+!L5̅.d \ȴ2مL![.%6&6f6|b7*]@ڦQC Iw1X_\y10@Py3ѻpsՑ[b#jP¹dT'~ Ĩ^&I^ZjٳxV%k? h(i= W.BL+)nL2,]gR2\-\n]/BbMk/s7U]蜀M\I4mjs=@Ul@䅜V _C5̧b)&uC"~sQۿ^xpZM m[ ̟]ȴ y4ӉM.iثO|+_*_&O}IkR&K(BO""+O'}pB~c==VXC/]EoADy"ě<6y"DO ~H'A9`O#)D D;"6gR rD=%!DbG#A DБiPf,; ΓQ朦O XWjLAM(fzQ8U/}C hZVnsk+oT@]:1r>u%Hʩ&r jQXfN@˅%_e[:Uث]pak8ȭD ^ g1. w^IMV_ѧQ,AtӫnyʋO2}z/Hb+؋LO2/4__/~k5{G_ O16cN"D=$A d8 "=NC{;mM8TT1UT" "`'h䧂Fz(hd/h$'hM 'i8 7TMشf^2?]e*d﫼t/JVlt^ +/Ӿ̟+A[_^/zk5 }0lez8_&?le7la+a*d~2:H-drD=!GbG&ĞbGS}>vtm}*UO}_兆j8u\!T7Q>^^*X^na&A.-jSWn0\I׉VuBywřX t d~ 90V .w./NJ{x$d:#Mn3G^rn?\0,rMleu`oy;62K RZ`e3팽 ,NzI, Ez^HrYdr!fC&شHlrM>y\bOlvMM>ٕ/^/r|EbWؕ/]ž|kRhR&E&EIkR&EMޚ""y( (B";(BP=9 bC t Y_ފ }jԽ hD?~BxzbtZQdU#B1F=VB@NĺSX"z 2orY(p`Qcğ/9 G<>QGc6B1fRi5>q| ^LJA)5RcEmEcU!t{OEɣSj0;T8BDQU~Mo&cP!q+ets h!ePuDv&%#2{R2(%G݀M#5 T7#6Ԯk(&vF{ %rʼΓT_8㥡Wq5=d6sC1v"w㩓V]@ shw$=A+zNX۠n&H >t>[fngU#L#EA?+ "H!|Ȩ;%$ηz^FdՓ05^_P{Ƽ]L%hQ "2\5UK<StLh"`n 796%y$N Vcc˞ g]:w CʺQ.SbLsC#;MV11o!"dv!! ]C&2mo!EbKl͋&}bKlLlM|Ѣ|+_/Ů|/_o/z+_IS&EIf&=E_}"mBPd7%k;*^/~{uxKD_}m/r勖k^AA7K"A vD-3%D;"3)GS"A rD;"D7"*_sGr7ǥIː|Z)Ь~sgu OgXe, qE?fdQp|: ۆzZJԻ7EPM<ȱ%"BH-ҶݷjD_*OʴXerL~iV*_erL~wI]r{wI]r{_-~"*m~UߩREUU_~l*~"ín\R"f8W1ù$!p#xp ~(VSV,1P"`"`Sù4CA㶆MRHJ]rFZ*uؼcVzl~ޖV])N^{[_K?}m WqmA/ 7p2?/oV1ְu9_a+a+#|ΗG꫐鋐%Gm"D+"cG%ut?I*t6upS]>OhjR%,[_'6VlIزI17{"mK(kRqq4DF> MR˷R?^MתZƺ |5E*d؜G<$ͤu:X/hG==*ڪb0ن 2a+T{d[[RB[,׵w6n] GRZT@u{}z?<M.m|C~TW!BĹnn7ݲZ]zNM܈Hn̾ċ%ViɅ̫WMO?V-mNJQ3ٓ,F*s@FߚqY<<ū/ %V_ė'^K ũ$dZXTu$ypG.n;r3[++g4Uᬨѱb6]Hc=$%$D3iG^YE{9Bob ܟ|G%@j(5c< pԡ8֌SӹnTUjU;># qt=eAOg(4jYE jcU˽:?j&ݱr48^SK58^7EvnW۵wŒh.uy_c*,Eu_M;ysBD4r;Q4~g|E-Sb)]X[kE=Zĩ*t~?7M>,%mb5|ȁF!& b*My/qVSˑ 6E7-E_Y_e4dtBeȋ槉MNlrͫ^/zZ]eZ4)~ڤM\eZ@z EPD:b*zifG8 F/6mt76r/ \<8L8+>9n@VCz~F!FUZOGEmf5(z*&2b ; R&`Y&6,EAdp(-i杻ujvB9_Kq/·\Cى܂ݥ`kYk.(!?-8$Qhf1z1ب1^ZS܉w!ؔ0`䭘˜/@*.UA}DuJ㺒 ~(]A-Jc+,P`2ҁ ]ȼ2i3d! 7C&2&ش7}bKlLlG_4nϯZ]$7K(V MWAZ 9>l*R 5 zQW^^Ul~Z{EݿUU_}?ݗW@_}ѧj bl4^1_a ~JC"<ĎMN" ~( "`"M{9?Cy {;mMET/4?   iSoJ]Ǧzlz&fǦM=6{=j*ӧWy%[}[^{?W䷽bӧ+JUe_}>ݗWFBKEO}poݰΗ|ݰ7䇭iW#O>zH'AI'}t{Gt{otӫ"uWyNsEݿi8m`񠪎7[6aOA_E^3].~JFWzA^َMvm&qޝelpgY)+[ f0HP$6# @x/-_ELu~у=("3)@*C|xUh8hK鸃U];PЄ3llauD+b~њy%:2\oB ;')Գ4 UKkkz92{./ ^_LOCO.dZJl~fؼJl!WXTpR'NyLhYdC"X.N^M,"u.AnC{՛KV2Vhn "i:͐ᇰ6yt<:{QX4Tv68w5Ir|.ӌ=0x<<ƋV1Iq5*Yatk U$ Xx*E  {=zI61#L4:CM(k̯|{ hiA#&&>.?lc15.Bp2vC27!$Q.o@rFBۥ(4"iDZAHTKV/ lslWE/by8ŷ]DGiEV*E5k\ic7$~??(2CIjG#"b)Uh&X~.$(r `ܮ%TdM5 Č'x!6EbGħ|Ȯ% tZِQ$({!Ӑ! !/&6}:%6{UiO/rWkդiO7)vMMjE)OCvPWP)=\}ч%0Ytʒ:!z6Q cˌ^W l]ݧqO?TudyZz2qV@a*ElٔOG M4Xt}#{$Vkw` gߗfq6NXR1lKC*A aMHԓABKR-_:NУ.ҥ&_ '">M#vU>9m58e բ lƲO*Ơ=LV Jvn2SF0|X[9լ).Œ#Hһ2퇐ɅL! 7Cf2y3d!KlvMM.y3'6/\ԐKC jl ,I]LZ7-}FT1&V^`Fq-f^e +%41pM:|2,PCiH3{ D Iߥ8 xҞ"ީbOiEnJQ rs9o0TŮ_yk$>wF!F ҡP RfY2ЩZ PQ<ߦEJx kbA,5A!9W;V.aDF}ڷf`!S<1Vl4 >o9oZ^4dtBeȋĦ͟NlrM^/zZ\UZ5)~ڤM\UZA~ EP%YNz 8Ӏs;\+鱂?}X%۱]/\oADy"ě<6؎D=$A ޜV'AD{"D3)zI9"A"O#A rDAez *{l@( /jLIf\x"!f gf3rfؚǚt4>TbέOiZet~ֿz4.2A;?J$@l#fZ+rZSNP|DK"{PAFZiE4Vʿt/ӧ}˫MO+6b/ӧj@ޗ苟/4Z1/16=ib81#)D D;"6Nzc8 'p6UUTT1UT"74SA#?444Ҧ4NOP^HNțJ]z4:=6=cC=6{=6;=6mWLOW?+*/2?齼'U>]W/J_)O }2=/氕u2? ?j#)G>D;"6 D9}#OxcOV2}zW+ '?pҧ5+M7f1SΫ RNoK sk ׋ox4.Wk!2T y]S%ɢL5?HFu}g&J&9.o_|qpbe̫/T&(iߦ*TԴʁ=NVe s N- RēH qRCc6Ar^! /uV _|8ڀF]Vg_,hן.sK :( yz{ "IL9;:0ΤRHCT xZۿ,pÈ*VPZ$@F1G\JmƊ6_eυbl(wbFMbx3t&&R4W6NwJ󱬪̹Qn!^p0Rkk if:PqNt9ޔa2 {1zalG1/ FUBV@ Rm>䟄 ]bjŤl@ZMrVW*:C2*(.^bY`JTF%vM*BN 侔2ľ\ sC, 1t#1`<};i?& Ȩ~ xPQ+'(z*b#Zy;NΓ<"A@y(Œ܂&4LKx]J܉gA=Բ-pM쿋fBݐمOCf2BMlvͻ.ibKlZ%圾՗9q@+VQE_Eah6v>{yeIT/$Ŧ}sxp$Iyizj vF`0z4F+5<z-MXa`ev~m!!NؙsM#Eq_bn jk}L9o@Uh d}s7bD'I#ʕ} u\YG)Mm\K˅L>%Bf.d Bv:/KlM&|bKlLlM|Xr|E"WؕwVĕ/,_&O=D_&EMߚ"}CE" E lD_}mo!&}Cثc[b%k|+_,_<D6͎%9XAڞV#x5؝I- ~HmϤAI#)DbG#akް5Sа /j 񯇭(x{k]çB(1l$`mQJpP0T\V!?-3=T+R?ΈYŨz<14kE"nɯR+V*kE***o2풺2?%uW{ݥ*z"ئW[46-UPE=[1&ù!Ep0csIC"hdGъU,P8"`"߭"Xc.p=l%7lհuw/H}H}Z}&A$>vt]RwICo]K/>~HmS+ W=X(|Eܢ]j31˜qvr}H5/IfK3sNG@B^YB%]ń>T >A /s`]7]\ % 80fL%(@,x-Þ"obͫpGe5'tW^H[ysE;yxGPu+!wג.SZ ֎U:X[Uſk${Y_1S{KV l {_ZLCKJky445yYG^4dtBeȋ槉͟NlrMĖ'恗{;$&eZE瓮.I:JlQq}N#NVleTizQ6śѱ۫&)Bv!6D|ZV;ɹļ/+zނyJͧq|T[" 8~]ҠtRFڤo9$E)8Y,smQ,3j5Y}(O$L/"IЃN;c`'|_o%!1MI->@93+eqnjL#y/nTW"޵i,Kld^N)oMv! ޯέ1!Vuſti=~L[ծ]qS@vzIXefIӤ4]diUU_u}q I ]%vH!eSt1h3hQ.9qJݞiS8mȳ+edFNh\RQv9Wզ2= ?2i*ibӧ\b2募/tbWhUVM6)t"פhդVPB4!Eh Eq!),I(b&_3){"lxSH7Ծ ^(%*yVXA|SEŮ|f zJC"<DMxlGS"A vDoN+mZ ~JC"=Ď͙{"DO ~H'A vD;"=$g PGۈ]VP{滛smRph!Sf?F&S޻ґ{ rmXI Ťۥ671-BZDjU̟^er̫U^e~{yEUŦ?]W{^e~ڗ}y5y+EO}pok)ƦOcDO ~H'ApTT8UT"7SSy =ǰWSЦTNOPH^NțNFrF~*hFFrFT4cS=6=ccc{tӫb/ӽ̟+q^^TlzZ{%h|ثLO2/苟/4Zї2?/氕u2= ?j_̗ )G>D;"6 ~#GO>~H}IVLOW?+RmWN~Ok8WWN S[[cѐW~vS\c+6-ۨT@_sh8^L_/_[!;]-\*wٵ MD׭,iː rot"З! ~M*sTG22" mE:q.M Ezu}? r:dD5OP|YȪ wM1 g\dwO;,hO~l},woLOCOL.d~_'6=MltbKlz(hl[,%f-0[갃b4Q1\+.(-6"t"H087Ro\-2aKJ| 2$Eq8K]B;׀E *zn zrV/G|PŔ8C c=ٕZuBX3o|I眊>3|\![ч\пKؿ ITK [|wIr*6~qnXqD,>BoV祈j vO=%mۼI. Ɨ}:blf&}72t;HiNMQW)0W5ޏD<\fӐlӨ|I= ?2!t/?KltbKl~bt/?+_E|EOIkR&9(߇" YQmU.dd~NO?)_o!i¼ZEYW[%Wep@z_$0s'WKttjczSkBtlQR V9|D,s#_\")fϊgV$kY82h!7|}!Д|!E!~$C&2.d~v\bfIC}ͽ֗1Z,.}Y>p4! c<(G_kK.Vġ/j' "/BjUmP[Rﴪ,/GC zYbZceJ)LDƏ$ӿvCOL.d~;/o'6}:%6?MlzZ\=kIѧoG_oG_poG_XA>VvE\"1dG.M؎i;"sDI#xw&Ŏ6sD rD9""Կ7lӟ>G:d?lb [u]RlCNϡws&ŭrISG&_kEH%Ǘe&̤"(8J짫L^er_oػ{?e~Vlt*zڗ})O*1>Pߜ/;"vNvD " "];E7yl"]91%'h] ';A#}4ҮR{zlvzlccNMOW?ʿ]MO2z/?cs@[{L˿]O}}^vVnOCO`="DD9"t;v>rt>zUt?pҧ5tр_~n@bx-WydFg/X!ďXiʋ͔{+(55*%T2MC/ZfWe 5}3HaK r7/ؽ˼=<(Hyݐza=Q޻1ŤC}C=|)Jj.ͺ5GLf@g`)cY/'n8yd# !"dv!! ]C&2oo!EbKlMf|bKlLlzKl@ykOKӠ`q6 f<y>E-/n9zD>X{%\'R32Oc 0i @AS!rn&DU?Dh՞aC>0av!d8):_zϣN]U<=Zjt\>2r~Yカlr1Bg;\z*I% ! |ȴ\Bf2i3d~ %6/]bOlZ$6&\bfbCE"Wȗ/^/v]"_ȕ/,_E%M\M]PPݐi8W!}ŻMc*>mϣD<'xDN+<DӊOLA9D;"+"D?OU]rG9Ƚ_2@hl=%ċ\M9Т~g73Su2hLxCoZPmv@|4$\W>Z`}K\:ٖvȪaPѧJ>Э2-V*_eZ2UfW**_ev{{yIb/H]{^ͽ~/TKӢb" /j@U;Z>"XQpcS+"vNO&pvU^8A*? XchWE1"򘅠w5^țο/h]4ҦRؼ+[*d_ͻdZ8/4b@PѮ}y%h|vp@_1ߟ/ϗys˼;REȫ+w O&>~Jǻ.-VyE}v{^h8W>A'804RI*s* _ ,ɗSn@+Uif-{[55gkq{H@cVm~NFnꜚS^mxuQ} IEmEZyU4$.<'9WŶ ((H=%GG"'ȕȇYca/9e:{OZ 8܌m_ pJiàruǍfCcYº֨Z8,B!ӧC&2B^%6=MltbKlFb G8f1St`"hk_ Wk MgEC8wĔ4d,j̶Hȩ^o[ FɁ]KǍ{AI^ ; jRvNhuakwҫuŋXuQ78j󍒌è5&XnͨY q<7 &*4$$LjI4Rjٱ3.NVmǜcRДK:(1X"];W<(&v:1Dbmp\A|剑d~ƍ,+&(ؚI.fTJp 6K7qV@Cz$/q\jNrVb<L!up@Xz;b4>0̘E=e1 Ay<9&#Y80 ƛzF)J‡8W߁SYM.%FB!Cf2B^%6?MltbKl^&|ş._|I&EnR/S(Ÿ"1y7!&nYԾf(fcބ?`._@]dV6rOTlq=J7qGm*9"5E" SKfoR뾜dfjOC2W'KiIU\j%eB`5/XRq_5"sz. ը(7g"jMέU 5 m>]w&etXoa,|[_n;"( ,tfAzwlIE]X60@˵`g>= _#8 ?~y2:dv!*%4Ӊ.yثO}|+_&O}IvEOvEO'pvOcoG_|+_[ؕ/kfG.M ޝV#?G9"wgR A rD vD;"<rPޡ* :ڍLc5hjGZ%y&l`Z~0󥐔K~>j41+ P[LRiׅ}nF N/  v1'H'W9̻VW}5LޙB5&W]#Bb,0q-i6@*W*r7IL2.u]i_O߮"?U 6OcE0 e8Alj];ة 'vUT"`"!p4򮆓sF%'h].;A#qAvcUOocӽLz]AvOW}צq/ӧos ϗݰv䆭/Ӑ!ϗ7 rDA }>ڥ}*ӧW}Tɟp}?@N/޽jxj1}EB2sE -| 8aѧDK`QU>7໙^alTyl26Y\{L8 _+/?(׃a /*MƸ1f|5Bu5if 7'ƢaOr)$Qf:8&؋&-۽If_$G0YۊYHѭ(hם?w[:dr!! ]Cf2mL>䟚_$%6ĦEbKlrM>%6o&6^)Hn#3b* $ge܈c(F'9ߪ"j j(] -{8;t(h]}B$8_y}A#5sƓE.F,8LuniJ4].)/^fYeiau.ڸ4s6Qֽ辈τ KڮOi<2@3y~շovI]/V/zҚ7e%>$bSjS842Ψ]Lc  OfYd2 /teu/"Ԇ}7/,N&ήbՔxE1>[EfjrRG C9&4}?P d1I/È˕?mʌ%6o&6%e~SD豧ˑ Ū]C.3~׊򍾦'P Zc$/& ?DX=K`QH oN8=(_ :;P`*/( U&x-G'LMfUg9`ydGQc3c ؇Y/򶤌hCFok#at+ bHҘ䕖rdI!"ZgGTC<^SL)KfU@3~(3$SڝC&2i2م>dv!fC^pfM.%6&ؼ\E"Wؗ/Z/v\"_ؕ/,_E%M]M\PPݐi8W!}E͋c*>m?D؞MA;DmN+>Ļ3)OLA rD vD;"8@1h+Т>s4֬_,T?kZ1ft8,P^f.iGEMBK . Ї\q1O(_q8;hb.XۇߋX  z ǻUfWnɭ2UfʼʋKhԥ^^2̛{ ]{E}hxїW"1/j T wNZ`y`y. d8N 'xSEyn]Ц򘕠v5ooj8woyn*u?/h\"اzlcl}=6튓iW?^ٺ+hE^ ?ZxWȋ4~^ݷ/k5e2m[|vGy5RDnAt}KbWߧxsE#:y n?q(hB-iw\8K7m3>\˧y6~a-u}7U@1mX֤"zKqGp-[ar1B+Ems-ux]lvBOȸĩXU~kD1z0*r ޮCn9$n7בmD~7z` Iދ[~Ay7*l Qajܗ~trGkߓGp)1*B)$GнG"W'cruTEE4dtBUȫ槉MNlvHl9ڌ3@RyW[ &"Dk Xkj4j2W$R6<cMc!*C~L tP v{/%nƢb(J:Leėie9|)2TwqPHt%^(N#ă"[kS+:%hZ at,9%vIX^ФDj6EP\Ί믹˾E=sx Xjv]Ubd+{ hy} G5Tn7 ȳ! W!&6:%6-{QiO/r勿Q~٤iO7ߎ)OCߎ)Oߎ鱂?}˗/vv}m A#Ļ rD ?"GL9"ĎDbGџ'.;/A :0|%Vxl؛R;I' 3SZԈUyd Yk7D&d@>&uI %\o.H[W/Qݵek)ڔ@ހ~i8#ȵ k"{ūm/2}]^YtӫLniʻ^Oev{W{y߮U/oWSşF_*]sc1NvD2 DЦvUTDž*v*US_h8 iWN9AW4RqSNMzlrzl*ӧW^Om=qb+kWиݗ}y_ݷ9F_i~nJVrV͗i˛D;"v vD>vt}>}tӫ>~Ok8龄u^ogC8UnCp,bT7ߐQCY+Cד  `u6yc6J"DqӸ:QOZi)Yɹ`9R+ ],>PǮ.gY9EO‚)qa{̡%TUb4i1 LU;,'4hWa:=-YrxniYL:B} h;ȊU CWDM.NGڗ드 t-$~Z- =N9m5Ei@6&h8W) Zq;v$Oq>-03d*[b%f!ޤSq2|8szv8EHtF=zXkba ̬ץWٻ$TW2@i!&}7 Ԓ;qF٨5= .Y{LbFV }E Y(oZ+7V2dz2:dv!2EbĦO'6Ħeb/=-_Ů||=mR&EII="i(B c -U>lL(RiS^U~O\Ki yq8SlqZML5L,̚6@.yOUb04QK+BzK씐)8+v/]Jaj"~+gX=C%^t)*(8]]PN\r&".Il(/'1O-"^h`lxsʛ+K|.3*ҰDj:1m-,C(W.m ?|jzԔRb=iEnE(OuR;긽 mSTo+dv!nB! VbKlMlvMO]b2Q ^|}ߏk7Ƭ/֮w/yC^xH&S1)7yhhiT6ԢYuj|_W<j'@ I<}Uexk6GHI'@QIGYh푯[r3CZM6n/7Aoj'P,'}9ɟHWaY "̋(‹|pЁ!\U锻or:@V4'hOxn$7yAE$m)ϗ{0D昧nD_&bzS21)ɭ+Un/".7׋äWJaQkfn[kgبbl(_#C]:ӜRr-D,Ͱˑ M6,LRjkRb62/Bf2y2مL>dr!fKl^$6fؼHlvM.'6f؇ >63CK5uhۍO7@y!i4S&SYaC2&ҦU͔pJ :w8:vMi=rLUX-\=N8L5=o6 8Kg9L8!P}cMt`x^C"xF4:o"Gc $ƺKܡ=N27T,gjʂ@! -86GǶևeZUF^- 5R$S1W-g#4TwuN$W KE YzZ\7Bg!޷!EE=b{Ysp[8I0) 9m=3n¾r DcfFLF%@jv5bHrי1;&N#(~KDHmĞQ ~۪! eVxEVtBYlHz !"dr!! ]Cf2m_Cb"%6ĦEbKlr>%6m&6fWhQؕ/]"Wȗ/r7ŮIѢIkR-&ŮIoRm6)M!ECZ@rP!EAބ")1rQ[ c:vY~yiIiϞ"@׫< IE.ۤ&noxېk\죷>ckm\AX%dTՄ jy&pGQ:ahis<6{=4tqeʕ5jBthب(&HE&2By 2_\͗.&d88ni3Ը eNI ^.Mⱥ%HOE1vsq| qG4TtUpp,nh! vC&2o>dr!fKlvMM.y3'6ĦĦĖW4,2m)ȴծ5^L'r<(T#*(cQc0# U0A;IiYBza<UE('8BKvßaYh 4z15s.>K+ iu*}So7 VSU;k,)UZe9tI# gkU&H붽Ft}Xڒ6M?ߊ4IcDMWnGDUB׳^6ˁrzV ?v,фБj. 69'y2ه̋ɅL.d! 6C&2EbKl͋f|bKlLl~KlWxQؕ/\"Wȗ/r7M]M]PPݐi8W!}ŻMc*>o?D؞MA;DmN+>D3)OLA vD rD;"8$7'1j,(ukLQ^asM9[M]P̛9+~ŧL|Y"b,ZabWacKrTb Mk21ԮwkE%I̫=/"nyV*bɭ2UfV6WVe^%ˋ"uev{72兊v{^TuU;E_^ hvp@_1P,(e8yW )Ļ 'xDB8*/M+y <7U@4 ySFTA >cweXlyWL'^}񮠑{%h#_xWȋ4ub̻c8Zϗyw˼9le"H̗tAM"}9wI]^tRp?@zpu1@ <` _c< ȁSl^ Q~_+j/Y"P@o&v Q!Jn.̰KBh^@tg-@@KKu\ IPPC"$^k(-Hrw!&h'1T4>/YhTbK}lhTMRH"P5 K-Ye@ipO@# rfz:쌜;Fg(U6S((J,r2s'Nu%SBh鴋g(~jqKkף"u 0P,h?4g*XtYM@pc1 G[Q媢{߆b2 8c}g&6ϫEbN="$~[7^/%ey_HzG[!DI7tƒD.Вb(,%Di$R41+|Bz:0.蓅+qBK-hO~_)(#Yܑm^C$M0"1 ʵX`˦&] pfXPdzj2m2;ii±cێMα'_= _vbxVI&)z;IKRJRR"v)®(E&Zv39_elrW\XtG4~1*~yl B!*َGnW/:<n𼱟S0o4K<УV?cUPbI =NF9CtLl%d! [} Z nkgꧺ։)#xa6dMUJ*#*47C _zO^QeL/ ~(!?57(ua xв y,ѵLO% S>r`ZT6[6\biY4[3ɼk29LɻMαiױ96?ulvKC /YR]2P62Gi&)Gi|):%+P5:(St.YSbՀ )ml{dlC. hhC1z2P"(h!&n:QNּЁ.Pi iVõߦ"ehE4%X%ĹtۄV/zжF-JC7ڈ1lw,D6K&=,^D qUlT=֩[5o*"\DGڥډ"ffl:Șs|'d kϪqn?d~j2m29yeʱcێαiثO؅/^UINR⧥]ꋟv˫/zVm/|"h7| _&]D ڝVLĻ3)r@q@; + <Ԏx7Q";B`fEMVE"BE@!KD {)Ch) _>ie0{Jbܜ2>؀ ,rkgſj2nAOOMgSV^3x-W!t;A^奞yG2l(rlTqsQښU%7࡜y}S&wʴ6;>6cSO]>{и_x_[Lo}vnⷫ_>_VvV7_&&oϗw r@A >vp}>>zz)rr8m>wA|W#7ђ$/Y}`^h+Wpԋ=Kf|zƠQ*\YP>^-VIQ"f*fq*\f%Yz Mխ]c$XV,<بJ5C xiڐPM7P}ͤE墯CD.KO]|$Vt8Q9o.mpoUȠ #2詪*ҀPKd1{7dC}TP#%ZB$3~ޠFDI9lZ,vBm%HRϙLOMMfg2L^96?ulz۱96/[BGpC$UbNAMU,# Z,(qę6A ED% OxGDD˹,' 9M0 ]4.Bu6UtHTO6y^DY{[}84>Sp46HD&E:9e]` . XՄ"*0ћ)+gCZ p44cgܤ1DHv(aG.h\D͡0όFhYSj8C`:]"+5<"9U CV"vĭ**]^x$nH(mAeK<_LJx̬v Wq;V]$KE93ߨ),H RhpJ)LeV 8NU"T zo&SməKMOvlvM+^/~.|*|=MRv"x?-ER])RD%j"'wx'k3BCӿ=3AjOp1 0`xJC\I `Q2(zbU8ɱw&r"DlgrWe Jd6 F?Q Q"7%N $4НԐ"T2^g2K? iZ}= lTKĶQ4QmUIS>4}W [X2~ã߮j<8F[]_ASKĎ<&oMmیiɓb_9MYrUi-'K o%PqQnRPS`phE-FH}b6d>! N+^@ F9WoE9nL ;TobM@j-򏀼C'>G1TPmd.bƊ9D!㝞Ydzj2m2;yi±cێαi؋EO؅/ZUINR]ꋞv˫/zVm/|bh7| _.] ޝVLD3)r@q@9 + oKPq噬ʦ- Q}Z [qMf&vp:oisQ;:lގSopzSWπSB 1F{Hm~M٤yю.gy%i~e,*q<ѹ(ΝaC S7a\(K$R=fjHHP#~)ۧLiuʻ]2LKPwߎv,zY}&¹]c56DpxdA,v,ec'6YX"`"or8iI3uyˎHOhcc.8>6?=ez9e~.ow ގۼ]Bv^amᶫ/ze?le7la+a+qe~j2m|y".?c.G?Lo/)p}+_0dpoe~,q+w~C}1g ?^`z`HkZZ\+\O_9Rh:.G@\{?"ZVoȩ"eJ Ɋ+JAYd/$JCT2Ti@U{D \nT.j S-GGQ̇nWAGBݳh|Asޯ4FLLfo2/L&g29ɛLd4Mα;6-cslαiӱ;6ŋ.|__>| _؇/rII\"h%)vI}bh3IяԽE)®a_!W+Eȗ"J,Eؗ"hRJ JjE 7wib <ܧv"؆nf픚PGS;P,I%z33%FNٸ9"m"uwB&T~CB$%%2uU.RWpff3:)ñE,O!E~^,@#ʡԄ 9^3 ⧄,9gsVy:>IBvีlbC%aֿ>bh}8DٳȚEp'lNZc|hv9ZHiIH"}`mzH )wjOOLd5ɴi2yٙL&ӏL;69Ǧ]&ؼcӦcws$T?,ε$aɷ 58|)Y/ $k7d=rh݀6}q_Є|nB!nIդF*uOU3E4E"EbM4B֫)~r`6AѥpbƕQ#>X$WAEY7OUϳbxFmCxsP<0]>SA Wƭ(l,s ix r(m_~Pc t/sv:hf쾆G/7Tm*COg1Pv3&3ɼ0L&o29ydbsl^869fؼplrMα;6;M&/>|"| _E.|f"V՗OR/%)/_+ExU}R])\E&\/ulZ+/_}f_ ű=D8xwZ ڜV~ vgR͙A ZA r@?aZ5 _K:/W1oζ!L  ]/,xqu+"Y߸pxOF*N|}1_O#R ;8IjT -_21dE \ _cD["5gkv?eZ2S&ʴ8erٟ2SSf2-ԥ]^2Lw]^hE^AE^Հhw Gk5{EhEB8"W wN&-@п'xE"ĂC,OMw9HOh]'4&S}B}9>6Vyq+c.9wyEN~}.{EhׂǻF^}vj̻c8ZT_1/ϗys˼;Rɫ7̗pAM }9wA]Z pBpCLN>wdO5|~r?:q=k+e켽w>NJ`?(~Ռ~Q|&@R4[9]Ed4UBщO)*(FQRq<(E+VL2dI-]LD%-]7% Yjj{oq("`L ܻr jDY~IE3)LP.sL&&3~ulzcslZ:$?9?@zkgz$. E!4fc=uD_&쉒:uVv^ٚ!!th:.o &(hF f[,:Ҫ:vKUS@`YMi׆$b,IެZъVAdcB*Q5ԂL 8ԥEYLC,;/#eg O/MC\CtƷ~5=KRlnChG*3몸A1V|lMsJ9*J/>*U]1~EEx:~=S:M)NĖ<VG| ^t$&[(vf>Dw\t)]ÔnQ'@Ir%tI±<Rm= Q{? |1o(\sy=!QS=+rN/XH F -x0 !K G SJ/UBZ6JRn%Sʶ@JfM2WC.z ;4<ן3od^rlzcsl^9*|Eo/rVki$E$*Ei)o"J^"xKxjRFLB*Bm^hgqW"֮"'3#Uwg2rGUDDpm: ^+6J9iSiǧC(g7LuZcR|>%zKei"Mȹ 7\贶9Ki9Q "MuS)9⥦%鐫Ru]$ҪͬTz}'!mE*:)_MDSC2з="yl= $Մ ʤ-u J唛L]̛ٙ&7ɴi2969Ǧ]fؼcӦcǮBǹ|'PtmKPC򁼎d,)vɛ*[T>"zU6)ɔqnyl(nT&J XӮ(v#gO oP!g^@vCБ4AA3>\,mc!\TݲжPΠ EMV5dVӉ"Xgu}7I қ6ɔmA bTAdC}آ܇r4ABar{s!ˬ3l7Ez2^iCxEDsi ^:fp %۰ /md~dv&cScʱWዟ/z;| _ _$O%)^%U)OKz!WЪY ΕmVK[.|V_śዾT_@=A ı z C =DiV8 A"xs&bS A v@; "9dyC%ɳ(r'8l&i%_ARvp=@{[/++U,Ԭ f94yvxmvMCA1ֈKb?^c?B u# \Y|݈ۻQ.Wl:Ω[ޖs A3.qBBf#qED!;~)SO)wez.@ݯwyiĦ# ye~;/4_]}p_EOklz^!_jlv@=!"&I?@8" zH "`"M!N8?Cz y9o )iIȎHO HȎHL]Fv|lzǦ|l|lr|lccN2}+S^e~z"'˫MO#6WE4/yyEhW?k5R}2=/氕 [&SmW#7 }chb)>p;6>p)ۧuO96sp"gdK~ᅗy( [@%\/٬9bJrfȐ,,Eب `("HnP$KF?rʺGPuDk[1$&^z(Q)hYE mANJAFD㒬لd-{M6?58ƼZ1QuZdj1&FGE-Waܴ.MBV惖LLfo2/L&g29ɛLd4Mα;6/cslMαyӱcKj]`Y;Rڐ7U[|PGoo) U7D:APaPl6&k=%#b* rA߫3?YЎ$|T ZaRLJJ:ҤYU#C*Vd8i t DИj~/$,H5fkd{ TQ̶OՐ*bz / Q4m{nUDЂO[aOYFgNYD&cUZo&A3&3'vTw_ң AD'VUfRʱX-(UTRJH~jT~֧!vYL߫!Z]RBMtԪh\(4R kAr2qT "逦 =LLfo2/Lfg29ɛLd4`α;6/cslMαiӱ;6ŋ.|__>| _؇/vII\bx%)rI|"x3IORJZ"J/JrR|)®R})kt"`N1br7Q㮚<lQ*<)ÅZB5m0TI&SiFG4ǗQj % 2"N *OI,3t'~aF&""'*0 k5%^\2 N{6*1EQZ"^}ndv&L&3&Flؼ:69Ǧc$jC@ѫs-/T,oWh1PII!Կ2QL`& j)¬&o(IKܯD(6l&՗~`>/k+pJxDpDecFwYI v ¾)yi7+/ (v 'T}ᔅiVM:#5ټ_hYG1 JFEd&dr&3+LMٛ/slM &KLαyӱc".|__!x3|_ת\$E>I+Ei/R7KȮV_& ί&o:׶cڊ?k @6M{C h{ZAbs&!="O̤p+ A_LfA 鰵ܰUԦesEW.gѶl-? [% uQF:HQLaX+;\CZ͍|[G?sEqE)?%Wĝ2SvʼyOyvwvA]vw#Pw^!`_EA{8EYU^:ل,z"íc]W=U\AF8AB8wYK?$NlȱW~HfcЊE\!qɎ+.SwIhm.9B#/|lr|lZwiK>6?coVWKN^!{_ иdCv6qi2=/oVח1u9_a+a+-#|ΗG+w%Gm D+ c up?A)uw+}?q|`3/MJ;j o""tȶOm@j`!OS7au9?+Yjmv(x(Ex`5}tX'Ϣ*,-K/c|ŻDS$vLcPaR1XTqPm'^ §'T`F *‘z:l Zrby7HӲSdi>;V)pV@]QuhPʹ(űe<8!3ڧZ/Iv'CMd~dr&cSǦcʱD ki_PfUvK XgI6b}lLyfҥK*!C7>z2?Nm:F VL l6[%4/aϘyhGxdp)i-/)f.Ώ"ϧm)b:KqʋA@@zjEApIlܣo"E4/K2-p:lV4Oϩ8 䏮%u`+7m|i?fEm7JFʐ2 (1*~9CQeL$DE/[ M":pPo<0M+e-'}s~E+~QO',Vퟋ(P4.TQHd~dv&cScұዟ/z;| _ _$EO%)Z%U)BOK~!W*W_MPy-r3 "]A_~P"%a->a3|A (K R;,fkv{*W8݁ngO?WExaB\LL2m[*(%rHqh <:vI5"T,eLvO>\(>r Y5\>.DS?Z"tY8SgP(nOնrHKxOmrE.jpO[QNjG4"w:b-?eh`q:l$~~ 9̻ٙ&36Mfo29yd&slrMαyӱ;69M&rSo/ÕJ]L~ꂈfHCRSNўb$Qhy#%,L}c$><0רL:)[Ś$j}֡I6lA9$:o(Ep #]fl*'c5ܽ||G* '&5}ܚ# :M()?1o93BS/Ⱥj[eFJmI[S mV)^'WL 槎Mo;69c/= _v"hVI&)z;IKRLRR"v)Be)(8iIo+v[rm _.|f/A@{ ě86O zA9/ S A v@oΤLA@{ Db $t@YuMo39<5>6yGG _5Q /w-f6␇! S,IWسŮ Yd=[JGĆwI"Z]y9c5p_jSb #\|>o͗OuE'? ?!P+ur?HQYKD }Zv6XL]hEfWYӋjեO2}NW.wy~ˋO#6W4/yy5W=k5R}jlzZc5 Q7 AbhdcS=$Ngc&=c!==7YYH $OhdGhF~Hh$OhdGhM.!4:>6=cC>6{>69>6mWOO>m)/2?]^t5bӈoGk^ez"40/[EO/~ZV_nOp~nJV֕d~Hp?A  >z C=GM=ܷ:e~z)@/pS'\A_8vlT:_{&_)Ul_"Mጲ޳L)ν''/Kpd灚8t.G)ETy.r26U@L4Q0`N@@D5>qWRoEkt#N qZ)2k)XxUSVpH1͋)9v7IEм-:&yܑ%TՏI"F*6_F@t btBQf5^e%/RRyWf=>Ug\Dnl&ޫ훏?J81 7ȳ2& iCj2=56ɼ2yԱmfشtlYr/}{#,`F°V T@od B ff>+\x©FpwYl{'c*bf4ה^@0tqCV݋gCpKTjm2a͜!ww[wQzE[i!)ΑL5'/tF8 R!pzEmU;1oCzj~)"nX2 !DGMG{kӋ,&d%VtT~YOQ5P7v]K?5nmBtS>٪Ox.՗8L o5QJ!0: m~Eoeҵ\Hf#4K tCؠJ"0Ug.>2!9Bbd` zɷC>7ú;*Fy zP4痆WAcR&?\:$-z` oO]E䍢Y8fP@YqϙOMM&g2L^96?ul~۱96{iūJR4II\UZ"KvD)mPxioX#ݶB' %]zLu\L,BQhEBo<껷]&|٦K "H!^5V)WJ$o1&a#&<v`DDPLM"Evqu$hE'#xhr2+N` HR ŋ* 8%O(S6XP.7Ir?gzRb9H܎Y_KMOc_ΡVI~Z'yn9~vYn_*%81rΧ/.p*ڡH]tAmE~^t-ҰҐg!Z&~@و=C^"A5W@~sqq_bK Qt%O/nfD5SmٙL+WOvlrMK^/z.|2|-?MRv=-ERW_ _^}Ӷn+~yE]ﯾ6qlv@ ? gR ޝIA ZA r@?8vu8n (T{U2R˺Hc')Qt5I\!3H\ٰ1!ܖodES|E9okhG_(q9D#on|ȨSXgNjUl* .~ &7W~9D ڝ"žhΘB;H(QrEF>9?wSfwʼ:]Pw.w]]ޅ#69ez;/r=kEpnvl" E8A@&vYXĉ];رwc8$Gh?虺eGh'4ny͎M2}ʿMO2}ػMoGm.q;/yyݷ9ۮϗܰw䆭͗M D@9 xǻp982}ʿN~ù -ݢ%ۛe5\` \eү_` 781Jn yuyZ M9PM.ӳIH\K s42A(^|S8N(R4U=_ZȯOz&C3ZVJA(\.[Αj&u=h/?YW )><>xc7DzJ4=| E8B_. .#~rb\,P!xM-!%\O`8J֏ImkuhL%D|VF~-XE*gV_r0#|yd_ol=ѧinWFzwJmZO 3 tC/^CHRY`O̓s=|]/ f2-L&g2{ya2;ٙdv&Ӧdؼplvޱicwlr͛_ۅ/Z/r}Eb؅/]>|KRHR$ŋ$E.IKR$śI|bW!W/EhQ+Eȕ"Kvm"KCZuRupU[M Sܚ()`qDP(k#Ӈ|xP )w XE7Jd"cjou~"2|5>6$zޗh7kH-Dx>s1/4_Ͷ?S1bD)֛HS4GTz KS`K`[.2A &B^$T$~."jbԫ_Ht4m&JNK Y8xҟG/ːFr*dG SBI4-WCGH4t5kL]əL&7ɴi2{969Ǧ]fؼcӦcw9BRN9ҜUk/&_]dIqȍ44TQ - UIJ<4 Ƨ:;}XuF!w5X˵Hy # CN!sha1hCk@]qf]P!@ 6(PvYyܤc;N 3扬GYRB69\V퐊f4Ls|h 6cYTTזEp<9!iұcqHE}ɭJ`Wd {#+R M:War߆7ya2;ɛL əd&37Mfo29Ǧcsl fcsltl.|"| _-E.|_m/՗OR/%)/_+ExU}R])\E&Ӣ\/ul^+/_}fk. ı?D A;@oΤ~?" " [!/ޠ9y`Hn%kvC-p72ɳ!kJ1"YUZ@J=]G @}Z?3]o#Ʃ~@\FLS*b}z ? 6X&']Fy+r*?pE)ٝ2S);evɝ2m2Sfwyq.- %eڼE@=/" ,"/4E@c8ZT_1,D@'-j>Dx@m"A+łi-xLqx% H4%rң|H2#יTwys3#=G<3}&X-c$cdhGDȥcHhHQDBgz .H9H{+=v[ +pfi 0߆Lfo2/Lfg29ɛd4α;6-cslMαyӱc^B@U;N+#|iQ"G[Y!*ԑPo2K̩tc2u-g2;ɛL ٙd&37MfotMα;6/cslMαyӱc' _E.| _Eዾիa.IKR-$E.IORm&)Ij)JrRR])¾aWf)BY[Ef8T1FpASgw+D\XW >U,&2ۢxfmUSȁN24cg''&ᜇQAvu?AqB d:9Sv!>#'UxF~isjQ>E$h#ڍϹ|!1C5w'\%Q9CQ`1)qzA)>K6wĢk 7/C+?)kMfg2oL%9yױ7csltlmc VOw*o&zK:jSDLrG$ Nd|"| _E.|f/kuI\U$\Kv/_+EhdZ+Ż͋bؿ%~o_Rı?Dӊ/ooN+~?Ļ3̤~?b bہUVd51T$,?lrCua`^ɡ f|m u\YY0-ˢ^zk>+b +R)"wL܊_KH"+;evLiqN)?ev̛L_NyuyqW..]/ "b" /j@Y;Eý"XApҢ^!C+ v/M,.(&+y]ކb|=fb&i=MƟ?cvi8miL"' 7 yWy_K]B#->o5_1/ϗiwa/H&F0_^iA?R~?O>hԥ)@.t  OҲTGכ9/ (UScwLL,DRHEXM鴅Vh4Ymׂ9h^Fg.)  _fJG#6h#Zo#[CCWi§ڠKN^kMCs537oXS=N9{!:LXf5YHժM1j }0.O-E+dA8j T.4ps5]:IXh#H}FyS-gu`Zh#eC&ƐǮD2想4K!zu@* C>\_gy"Ƣ&iC)҄9?9EV\aa: ~3zE 0MLw( UaWh5e4tp)V BĔA:t@4!O~٦o?5)m-/(6Աp%F-!_S3|#ZKfE`M 5{OW1 )7e9i |BO'@T"|ޚ ]dO&)NECLd5dv&]&ؼ:6;cڧ(^ʭn;}ɼن /IV$[P j|?*)[?wǼ&R: r"MT.2QE ϴwϙOMMfg2L^OvlrM+^/zE.|2|-=MRv?-ERW_ष _^}Ӷn+~yŻ\ovqlr@ ? DgR ڝIA ^A r@?HrO@؀Mb8`RdVYl-O8T\lPd~`|EHuM(5|.ċ ~L5~)C?`lTۼ!y$Ey?kEAIxIvZSfwʴ_w޾|]Bv#>kиmW_v~nʻVrVd~&D] <]GOO>_S'܇֯ʎ)m)y8fÿe^E Y%pgqv2oj"5_wYS/ tY/Α:qڦJ[l UTWRT()iq٪Qt/ֲyk8MW(p~㊲"(6688jU.TN<8D\EdRT3kWE[rvQ Ǜn@Fo[4l<:zٵ,ĪN&,ϷVI=0TLNYp>֤O6(SߘRK¬ߡ hClN<}z*ЃJK“ !h3f/I5]ϰ|dSzS9`]ӶGQqIPi p R;'8JljJ4F:YڀwG"I_P !TW[/gx8ia29ɛ əd&37M/&;Ǧcsl &csltlM.|"| _/.|_o/\E"')Z$)vI\"%)LR%IRR|)BR])®a_+Ex/HuXz׊4 t5nj[IOƇ ;/`ޔV^.՛# j,:xAw z) -iZzCHQV(tn3\aW2pe:U''om1ahu5'BOȌr&l'u !]h4*.@LLI "W8:Rq݄pGU_jeUql4L,:#/#"܍nWGf!9UF"섏K&c. vv*Xb``n%}L7əL&36M&o2;idbslrͻαiӱ;6;M&؇ZLK9IRqKT8` v38D<6U/Gl< O $Ev3,o-7"IT%ym#~Ѵ՗2*#QW-#&=Z\$鬤]?AKV0Vnm"o>i/Z Ը=:jͤrz‘NIWs ԭ$:\/_tGVZSI6w3=ůG"\dh6t+XXZPD !UD6+$T S QA {]B#/" w +B7eZ~|w~L?_ݑ:-L^ԿaxpmAp} Whsݿs<$qa_唖J3 Asp34"'ڥAKX$MAc({hUӧ:4B?P~TŪgQQ$ Øk7r(¥xDҢ}fuo  _ ڇ!0LoLd^pl~csl^9*|Eo/rWki$E$(Ei)Bo"JZ"2LUi1 %$0"v=,@*#|0'.IE\8h(Q4^S38ְ# y*ӯPԚMFX.]%NTf20y=35{0,"22L4rW!'6PoT3fI6-"[І=*Œ/e2(^S&!O~^l݉4RuD%47՞nnNT "% Z4G" :t]Įй2+7ɴk2;Lɛαyױ96=ulvKFBJEZtJ&-T NQ5YutfJ^F._YV)H&%K-T 䪾dn|:_<7>7NƃXCf`9BqS QN8ٵr<S}uISQpQƐ3`s,*ϚE,@'^}wzE\Q͢ o4fΚFe\ 'rDx`SMP NCy i]N9(TTHY|[BNzO?g2?56&cScʱWዞ/~;| _ _$O~yEOK~=-8W_ۊ_^}.|n"۫]D869 8 O+A; 9 wgR v@; V@; QR7l% x܊V(9Z-t ِmmm`3M)*y?0JbC\~3!XՓ'OZBL7jG޽rE2~Q7R=f7${Q"[F{Cvu{wekE 6RG=#WyP?wS&wʼQϙ1IdK\` ?nqw2ʰ};v옶 "?J:ʛ7j&/:/r1A$z[r|,^:Y6rGhlzù‰.Jb"Sm3rLVNKe0呮!+KZ $GV >}gN9^o]-p7'1IΧ3dzdr&cSǦcO86:ZZ`G=䩕'@?⁾Ydu႔cj[©jB9Ƴ;5\]zE3VTS0edنDRox{^h0mՂVtҶtk+Z Sg\nTt,esy-xb7DAޝpI:ʺX4!biYk~@y8Z)Zth{J a߭bT]btnr(Iy5:_I %)UV4U&.]YREIz<LGZ9|Cw)L9;:Ayڪ%S!"[g^P֐X%IYA]!hU.$.G. ~4ӝ; `*;16SGADL+XQ. (NnZp[9AztEl.N.4qQM%E5;" .JF6YUP!Z^9ῚOMM&g2L^96=ul~۱96-{iūJR4II\UZ"KrJCMKKNĢ#\ օWвm/Ǣ5w!hN..EDXWq1ğ;e~z);e^&}L..oBߎؿEO29V_v"E8kl~އ6Nr@" ~ hE@E@,r,v.wYX]'9B#r8#4z.;B#2u |lv|lccǦLo/cӻLo}>&q;b{Ihv^fᶫ/ze?le7la+a+qe~j2m|y".?c.G?Lo/)p}(d`z:];WAݦIPtZ)Qj!~*g *Qdmɀ.O8@WK: 蛮yF3ʧnnNDRfy9K$k7ڥbn7DVnĹlmozDMKqbCR]%znIX |\UdC&TD6潖bx}Զ_r+P~(h*ThR!UDQ&?gۅsͷh"KVT)%ܔN:'{Դf2?56ɴ4yԱmfشtlF+! RmZڦ5BuH A,/ #fEb9 ks8dlz!;/J4T6~0 O3L{F%6 '8lRȬ7q,j5uH=JsW/! =jw.%HHM0#_ďo#w" O`-KC>S*0W D{*Zd%Y,7/3mѠC&E;D4{d=&.?N?ۭz%=Iq4c Li" >lLjG '5Ex_g̪6&ST6R\bX{x&p(Ři$]@Տ9f@UʲN锢P]ij(n4"#mUGՑͱ%jP|\T& x)Bx(MI)\%#:2.#~Mf-dzdr&cSǦcұዞ/z;| _ _$EO%)^&E)OKzaWemQCgz&hbR^Ak'O|1ƨӃ)5?j_)q>I8ZVS>pTn8vTFcX!GIh5( L U Ht!*~ejMa*XyWq\xb6~LpgCmVꗲp ̭)mUpy>_S@:+>f4R}VUllYm|n1BԺs9tE=1Cz$"߅ߠn_&`]>%ZsҕU9"a<ܲ7̻ٙ&3LdZvcS&ؼt, vbEB^J(3ʢnE7 *D{ mPaߨ Y8ʿMڧg& C~(irʆ tigD3]E+=L;u$%M^n| Zˆ{hOx6_Xé pE)/|}G1h[OO>ev?q[]2KPwߎv,zY"B8kl~ކvNr@" ~ hEE,r,~&vYXM';B#r8#4z.9B#2u |lv|lcc槧Lo/cӻo}>&q;b{Ihv^fᶫ/ze?l%7la+a+qe~j2m/oA A}>څ}}Sp?p}o*lw0GJji%P(͂ޮœ5v<7Z0p(OY,IM~)ܥފOD'*[eHpbV%Ze{KI&i6bP|k_z/"2Tђ8B6>{ B,RJfmRPRz ʆnH %5&]ktzdՐD:7I/TB%ѢirSG3QO ULYn[lC` "PPK˱p`4W?a2~]4~v8&=?DfYf-W튇Cvb]9'긻mՕ[&C%lR.?nQɲs?ū5h7գxU:1AeDygtQwq"MdRt | _؇/rII\bx%)rI|bx3IORJZ"J/JrR|)®R|)r"XR׋Qg&:Ќ)\ C||"ؓ#ORiMeh~LښMC10CP+V'~g.؅Я~xFmja%MT@C:m䞌~,3.ӃhGzpMBV9Cav-їjcYҵ4EhhSCAS4M *z8JrIRg>qdVr[+EÒlG[㳆)9p$^E y>(Xsc E9dv&LMٛLd4ccsltlαiӱ;{cTe}~(gR$CAP n6-ӣƛ#rhr6 l>6\XT)驈[!0h.h7 _ A !|ddTfUknpDQf6i*jwZg+u4&$%7=[DhDR]ڔgZb J ]ПxhD: 0ѤSy_}?k̈́#2tAbg::,7%e!v;e|3 /5;FOG&mF|gPx3&3ɴ0L&o29yd&sl^869fشplrMα;6;ǦM&/E>|"| _E.|f|bxU}$E.IW}R\)B˗"J/5_}ѮcӢX9ﯾh7|77T_ wql& ڝVx 7ݙhs& r@9 V@; ᙍk!cQn^h9,"q[kEt'g,Eg Jy0'3\rv}!FB m>孢2u,'{F3 yjp_͊!|Á~r? %yg\WsENbnl Y+yqN)ٝ2S&N7O)˼KPwy겿2mewy"]{~hhW"1-} "]5 |"XApz 7qwY8A,+z <=6YBWB#r8=69ȻL]OhMeMs|lޥW]r2->{]B#/" w +B7eZ~|v~L?_ݑ:-L^ߟ/><Ǜ@)Gsp킺8>ޅi\A}GC- 9݇<gזmV9 d0:r7Ut4Q.)^VĬDz8g~9"ɋ SJW3kQ7D0ƼuJM$Įz#)W3NK˲^ZM׮tQtq*yu2hb9K1fiCa{t#js9j)9( \ ق)bD Eފ?<ߠ"mbwt%)+cMHulZ!Zc&T9tZV26^B `ϸ5`PVjg#+@HC2"wbнhSIGzәeA'X/"y06 tZBĜ [yT5ΔY6[tx\'T%sM)ILivoɄah((gəLd5ɼi2{əL&7cw|tlMαiӱc$žosl^CӢK鞤$/1|4t%?ʡphQNAD &q6$&ŞH:Ro޾!C:N'^^5 %4EMņgˈAhyS {})sSVdfS8@?!"&_pU!Db洂<@?A ڜIA@{ b t|εcK^WgqdWqdx$"5T#]?.1=Nʮwy09 }`iIvp%ѩԿ[Jg+*j+fP-I"9!Ⱥ1Hbx"ɪ/8jqXq[woo#)yII"OLOO>evLS^ezzuUĦގ+߰y˫׼ioW_1ovB8@?A D8AX8YX" " "zH!"`"M}8B#?%4CB#{B#9B#mr8 )yKȎOM͎M|l|)SOyE[zʋO2}WwyiĦ#%b2?v^^UO/~ZV_nJOpL~nJV2l]OMM^#Ap{ ě@y GO>~} VLOO>Nzᤷ9++s#]U}N'2oĞƴ9O0!Ev%.hn@<'j4{)Q_\E{D(+J Pu o(]P_{/`$NXԼ5+&lvEe|QqT't'ź|^hH<,R{L Ef%hiCh9ҲL-ɴ0ML&g2yə̛&7c±96yǦcslvޱ96m:6}ql>G5J~w)F Q''hczCYyS@"j+c,]_F6LH0zF"sH# ȣH*&g5L}oIn`da&|,fIL:)F8a"BlhT|Y+#5^6|ԸC!x׏ ݊$c1"XX*C<>z!2țPD,i]T0&+PsgS6oSMG7EBlbSĮ>]rWs}xS.vW5;gߒES~v2bʷ(rdҠIT!-rVH #1^(&}~dr&L&3V&:6;]&Ա96/[%*=E3U]4DS|*$HKgZIXt5EHGqҔo#9$) j-:UkR*dk"~6fe٥dz…q) eKT⵭IUQr}wz#6rHig=e໢"]j]HEE9 茾 L|V g*E+D[*^끁>YD~TG YF}F:%~WPfkǂ4)u؊.T~~6^<8L[H^[)-pk&5qMO$u"`Quwya2;ٛ əd&37M&o29ǦcslM fcsltl.|"| _-E.|_m/\?')vI7$E?ȗ"J,EK)i׶ɫɻaثcoeE.|2|mK A869 W8b C h{Z⟘Vlͤ@=gR ^ΤDO ~A r@9 <t`]pes7\gW`<' i7"LY`~e}HD;[>ԙLj |?jBև{1CdLȲ:.AZ3lfaHYA r4A \2-N)?eZ2S&wO))?]P]]P].u7%U oh,~"Ь4[c%p"B8?U\AF8AD87YK=$NlرWzHfcЊE\!qIHK&SwIh䇄m.9B#|lv|l^wiK>6=coVWKN^!{_ɛ% иdCv6q7p2=/oVח1u9_a+a+/#|ΗG+w%Gm D+ c up?A)u7%m~/Fu"Äc hȀ; S`/*aLxvKGf*mCA;l0kyfBRe |(j&2SG"x,QF* 2bٚۂwŔ96JdH-rpi yh7zE$#%7)^WMGQY0.H^FΪ;ya29ɛL ٙd&36M&o29ǦcslM &csltl} I*ўΛb@`[(t}<`LPcälN 4y=-8| MGzʵ.H֒KGϢ+ yk'"H6iCTIpIy^2qpR?phiUE7Y$iV{)w9k?@hSk7-0Î,ْfYCHZe4P鿩OZR LhH 1h+[ E55*|W\=zXQ1jI*(uI Y^ofdEw<dzcD! t KXXe Zk@s8hOnf8z 勬&JTE4sT ˘"rڵXZ׆2uZ2Ӫ^ӈ"hY1QJ9uo>ެ_>pIGIt9+1Eƣ(|G/`ƀ @hdkz+N. зP*J'eLLfo2/L&g2;ɛLd4Mα;6/cslαiӱ;6ŋ.|__>| _KrII\bh%)vI|bh3Iї$JZ"J-JrR})BR})rp? Kllm~[MxC-$(Kb);ܧZ`<׮6:h&)3p?tErSM]1™7NoIKR')v?až!Wf)_JM=M^_LueEm^_{3|-/~X}m/r዗k^AƱA±wK A r@3%; 3)S A v@9 DA]jJ8m@VMyUJRϲ| \Y_uľRq%_)|NIz4e/բǍdB:e-F?W-x/d3)=|*/Nɟ2-N);eLiٟ....SPwuE@Y*b74K=dlhVyˀfw dCnU}}"KB~p. zm# Z!,%q'YXYKz ?lȱh"p. иdGh%s$4CB6SLy>69>6ػ%iSJ[$'/MN^e{и}C6q>z&42 /oe~8_ív2?/o[ [y9l/p=R_L?/oAK}@9 V@>Gܷ .>~mS nBK}?j;>?R?"T:q5:5 RP?*su5*tVQ˵vwg~i,Yc;jYw 5nZIv ?TT@ykZsgβ)}h~ry4p唄ʤ TRwYtc>pMnRUچT^DƯA9D6C˵&/x>b:u( Ԝ93PpvďTC)" j0$Z(Z)CBMd3y}Q?&?a2=56ɴ2yԱmfؼtla^ \㍜m,:BՇI iJxPuj]{ pl;[(b/Gs?%hE% Q*;B "Dv3_g d`zhNםo<␛Ju$kVpF&S%kFJ[M@ KYV@Km >2 %8VѪHI/'mel&2K}ðCLT5P^DYDjKY22AgrBIYJҮT8:llvDs7OϸCQC<+7H Pri!mS6Y$(] o8nw[4/)bTz.6Q%0az59,Rb)LL½޴qEV)ו?WD(3nn0GxQ Wp%M蹶0.ABm ?p@YhkWFNYdzdr&cScұዟ/~;| _ _$EO%)Z&E)OKz!WA/qO7ܔMwʏGMIQtZ1mPjW GFMA֋My$ǎ믽ށcLrC$gN RI7 &"z1&5^у.DOm*K\75[ГLK8|9:N^m >#2%UI#cS켩 GDž|0PT˽U bkM-tCE+vr T*"zr&JrЈ)>䙕- y!153ɼk2;id&37M&o29&_c:6}MR[ޱ96m:6yfwRCFHJm?l$%#!&&X2!1?~`_"oMUEVMPz@/¤>"8R=D_<;꿉o){i /OTHHEl7_9i>$u*HrzcM-8S:BG2(fT$"E-ӛܝϔcԕӂ Wԑ[mDkƛTwアd*j$Ο%6L KK-)7ʼnxtI\YϥME@ʥa4+SBtiBR5}sĭR)%W#6KVU (f+W5&hco&dv&7&3M&g2o?0o &Mα96yfؼű*Ti(&ΡD\4v>*)tTS՚"Ezr)4"Es4Ew /vO*Bn6hAIĴ ]_BBIggM. >d@zud2SzrFT=qY<א f"Ro}>/dS#y*.\S ܽU]P@mvSEe+ ТIČi^WI&vX|TB(*BH} XKeÃL.)JLut[Q{ΛбlwFQ*" QSw>{L5eqϐa7FQ=f<)h{[e)C,Y beQq_, MU[;o +>=)[9Ǎ3c2ia29ٛL əLd&36M&o2;csl &csltl.|"| _/.|_m/\E"')Z$)rI\b%)LRRR|)‹R\)Ba_+Ex/^g?SHMմмϐZibgšC03P*1Na`t}^Q)Ԣ"/&nr"4|+HCRe~/hDa3z 858fTI&+r`&0  6)I[@2l6E(^@ -p#yѩ*PPނ8`. t-7=kv>{5je 8D8Đ^n >u%0Pdl XO b'zto:<SU$L77̻ٙ&3LdZvcS&ؼr#s=)OPcEPJYO&kf(dZ|WSѶ2X8%[G/vr(\B0 Y5xࡊ6ya6+Ck{GZSf$o))[!SDTT<}*8 NKUdFK2_EUwr6KEQۈg9_9ޔ=`b2 Id,z @D)Z_o2eI¹q1kNY]˹ I惪'DiZDMR"bZ9LL&o2/L&g2;ٛLd4α;6/cslMαyӱcŋE.|__>| _KrIV_b%)LR%IRV_"_+Ex/ȦV_& /&:׶cڊ/=ūc/ zm Zػӊ%i; ӊ͙@Lī9 A"A r@{ Wuqֻb XmbWo\d[6EB,r4r?9{=tMe@ W6:flTKw.b;*6a֟Ȓ\Dh/yD$.~TK!TK2-N)?eZ2SfwO))?]P]]P].uw%Uh,z"Ьn",1ܪ:D8?U\AF8AB8wYK=$NlرW~HfcЊE\!qI+.SwIhm.;B#/|lv|lZwiK>6?coVWKN^!{Eh\!kи؏ Kv?dmWyGƭ1rcUe ;l]Η|y{JnʫaH}9_#M h Cob ߇}vA%mPwu_AM~ Co_q8@K7y}?8 ~^ZgSlEbK۹l\]t*??l!敚>S< nuקv9q}U3.kdMw3CpzYC⢡NQwI~᱋Wrzx#>XqY>DX_GJA}hFUĖ:%EXcV,L vO3CvS&dr&7&3M&g2oL_Lv fMα96yfؼ[hdKs"v~=Nn47r2pA4P(׊f/"psC8 ?U)`JA" t'de3}d7r-63DOk9h\w&aQ#TV[1ViC K6Y5#/ x$Z]`1SGhpTD=ǻ4}Ah%N^N) ><ϨQ> Lz٩yYQTrrM+fWU5].'\ŝ&wIAR='~ ,m+4qUHd>YWD_jG'fYIҽNm ٱp::CVv2ThIKR')r-JvRR])¾!Wf)B2 bA]WM:oh.:_ dGzٜUxL†0ݕIBӏgSY")Nvs3 ]/R¯EϥЯ|lpћC<=%Uw¤p:.i >&tҭDԐ熬f4>"J6Cĵ·\> UnE)JSzr=84>ц FIG~pFa[x:BBG\bvUJ7]v u(&ʚٮbm&%dr&ӮLMٛd4cӮcsltlMαiӱ; )*m?2ٔݚ`Pq<Pߩێt*鶓H5eR 6ӧ*ˠ@bA#ʡ(/㐅j׬>^ש]_bu4(*B8;o7 nC1lkz*;QEo 3.2v+uD-ETj7͗&J<m_@GmNr]9#tC]CL7G?EDL?xx| _KZT_>IKR|b|)®UKvq̋seﯾxױiVW_|śD8h@N+<ěӊLA9@; D+ DI;Z?Ϩ eSzs;HS㸪g'İb[PƧ ,C<4BvQ4"'T;;E_5,AYiNy*o]; P"A,{H:" ʝ2/N)?eZ2S&wO))?evwwy .@]w]ͻL.X "b" -j@Y;Eý"XAp^!C+ vN&>"N.'hE>qbE]&1 B#r8=69HL]OhMeMs|lڥW]r2/>{]B#-" w +B7eZ~|v~L?_ݑ:-L^ߟ/><Ǜ@)sp8>څi\A}R%kqhxB`Sv5 O.Q{J2+^؀*JQ QbQ5 vPvT$|O^5pqԧE$\jJ&kt3nbWn\ S?0PJ^9v-ՔN=QGVkůky:MrwcI>y~ZAYRS0.K]L'$cK~!FOQw,Hp5T3P<>qV+IM$ >f*ߊR)Td~j2m2;yeʱcێαit~e"QX nt]2S#ݫD܇.'PGijDP?!mwpFHR([&`" Ǯn"`@Z.`,w˂[ }(^f{*ˋJdV͒ߐFp#U:x j~wN.v9H""VUΊΤ"b~^ 8 T iLN*2P^~ۼ6%2vt)ih<{pM PQ~A~l\+qNI&@I!L(LպMߊ%IdQ>33oklW5c29!sNQlGxqPZ.cg8alM#v.&F"Z4jF~# Q>IW)~M'::Lj*U:agGjة#OxA5$sG̪0Lod^pl~cslZ:"|o/v዗ki$ū$*Ei)Bo"J^"]v}BR›rc ԩU rc6:iIC5-6UDpnѫuk/ Fk8͡Ժ\ég| [q9(dܡhVC@ˁfw&Yj]E lh/۪U%jSz/@@aw)" |8wpJyؠP\ :+uP rVb6E$;‰C 񒪩e9tEx1_)gJ%g)&(2F2`B.>g)F -e8M %v~ᤷ9pzS9JRRxyy,OAn'}?ɳ~-g9/zg>1ًn>*`'-Z9(0j?7BQ‰7ItK-W )aМ!޵\wTnب2lK#ዚrHdE,EI[**bU+ mIm¯鄼5z&2Dh$^Ҧ夨GW0Y@\QNdZd&dv&3LMٛαic±96;f685]gx^xU,292zԼ}*mé1tJF{z!펐j" Y`h_9mq˴c**\(ޯpӁj7tSE*k+CC+cjCR1 iQ>%롘Q xs_`=AltrWm'BQpF "AH qq n n3RԙAF$Z Cf$mq*xOnA ?'u"YVQJQ'_fO*>W[rʂ)G/|#w^poILLfo2/Lfg29ɛd4α;6-cslαyӱ;6ŋ.|__>| _ȇ/vII\"h%)vI}"x3Iї$J^"J/JrR|)®R"2OFK(Sl%ơ97ISoE{.9tHM *KY(b Awۄ>r㲖)H:vÿBeR.0}Σvʈ'&U>s"ŌpXOpfԚO%x̂4u`Mf)>Ldt{Mf#)G)t~>fg' E?@DAKOw WV+ԃ.AO*\+Җ&z$*c,n56n3ͮ9#gx 81_9kӛ&7ɼi2}196;]&شcӦcwlZ:J/Wq$fn%>\RySp2c ]FՀ!9I#z Tw0 mo-1ǸɨjߣH{,HtFa/J^TM>[c)S$e]SekGUxPKd/O|5.!,u&3l,grlJ\,~-]E5+9 YWȗ"ْxkǏ?ͪs?ѭE2N/&.9\8TR\Mz3&3ɼ0L&o29ydbslZ86;fؼplrMα;69Mf->|"| _E.|f"V՗OR/%)/_+ExU}R])B\Ż&\/ulZ+/_}f_ ű=D8hwZ ޜV~ vgR͙A ^A r@}?$t"W<6풓iqW+iWo}-}KhE^^eѢZ~|v~̛?_ݑ:/L^ԿaxpmAp} Whs'Dqco#ϋG5w@eֺU=UcayѴHu]hEM (Bhj)-Yq.?wSzrzfg<6QT[UZ< $j }ɧ) y(_,Ö /(>/ř .i!;ЯԇsH]J8B{nCr/BU@Y'Dh4M\U>CI^AI _`PThTDK^/ArTaRNΨˇQjTNh]Nxos"lWP䮺K9VFy*Bcİh-wQc QDJ' $O\Kx3D o⧢WHp <įkM7EPt%z(]yPG:dNhzs9F:rbUĖL]ٙOM&g2/MtlvͻMαcslZ:^~f(C"'8 T!פK" dzBt#n1䘬§ټAsÁ:ڰUmRqɬ|IZ'V<E4I:(*ME@ jdt,!6t" D#X3gtC@ˍ!w)Rti-k5V#49*XQE M>o$y%^ Ib~lR\ 2q1)fn9)lxFjrΏ:A@Q #b .u,Wd>fRzSfwʴ`ܮ{"E8Apہ]9رۉ,r,eccv9dGh?虺%Gho'4yMM2}ʿMO2}؛MoG˲udkpYbRW}URF aJh\v^^fᖫ/ze;l%3la+a+qe56y}xbxc)ۧ>peExů+XWCR|R|99ÈEN IﵽW7!*yK*WEF `Yp*|3з:X^\J|B[Yu瀈"#)Y.΃Q#t "꾀xW w f B6fpWR@.=?eӕ$0cbc Ei^AtxU*Y2 x;ܐ(Ġj4~9Dɳ J$?PP )dLU̻٘&1&/:6ǦU&ؼdO}UAoRe z?A27%X[VtF*t;4^"ҸΗ0]Gj /~(!@K7 4)9 v) WB4O*Jc),h-).|IR}}R, JY -*y2(Dv5*d".PPޝc:02 G^7)d7TgI6ݫCNPB T|ǁp&إQj^Kżw(Eɴk2m2yjıyױmf_V6V^7_]mˋ@ V 2@pW>6pqp2}ʿ]'\* NA R KhKA L,yȀHx11Mkvw^!vP( xVnD@B2ޱ]-*)I) )bw=8ԹĒ*5o˅\=d)~I"F!Ui䑕ѧH|Kz=}?ՉyGIz⩗{bB4s 딁> SDt=<UwmF~^w|cTΧTRVPNϗl4(8X-U[WT+YW=idzd2&ccێMƱi؇V-d'56Z?cUsy}\)Ǡ Tp?89 DSw=ZF<F{p졶D:tFC\3zeGJ'-K~."X%B @*0U4﫨F+]pVt< F {ڷ@Eid7t]nn|TJn%M">Dc,#Xp{tKlR+I¥HzFgUΰAŽhHX s>ڊ_s*2vI:-yGOg{F ϡ׍ɵ7E* i%T .l6tv;p P)nJP CޏSz@^ξ%=ukBt9D(LN[W)d|GC.c}HH jN>)ҟ.-SQ'rD=!/Q-1YawXDƠ&ӮlL]ǦcԱ'v؄/Y$Eo')2IfIjVn)o"dJ"htvO׭|^l@e)M T0 Wd;ie"!%})Q}!ދ䟇ފIEѯ }SGUhf ) P$:AyKi/]8h}k*B>%@8RS' 52c0] ?d^5ɼh2Y٘L&5cqlZul6͋Mֱ86/:6Y>T,=AOU:0WtJ%ttnHï C)TNDnS4 }*NIhU Ma$N%u6my͖=;e=e~gՏSe޽]?,bnĦ#'yv2gFv/~>/6Vޝ/|찕Ͱl3yd~Hd2@} Ad>څxc h# NwO>q3'r8m pB"Wg??IKٞy>M`TW)uʱ׆cw=`mpֽd{?}Dѓ_iG$Xx+,Ex(C] : )K"2 xV hޓEz~&eLWQ~SgsU?_=2qhlN8%XBpr*I4ʽqwwM a$S |-4=4٣6ʪ8*irT߀C$߇Q yb2ɚL٘d&1Mfk2cqlMfdcql^tl rT:K&{:N؀,+X![ucsH]2چHHC]\8 }[UB^zAh&CV[!(^~YwΫtCz&ZhijيIJz^p_㥜|qLyhU̵KWr 5yͧc3/.ȻYq{(@Sn+/!;m2ĭ JMNJtr֯S(ѪF3)7(t!(}Jr.Lfc2Ld5<3yձ86:6]f_I}~UBߝTH|b`C~lkj(yT>db ̤CU@D}4&ɓR~QpJa\IF5.u ' NqqJq塇1ήp׏L)xRK0wu@XYAXb +ƹT]12FjhJ W: 02j%6*:X<@ag6&d2&5'&1dM&c2/L&ǦcqlflcqlZtlplh؄/'M"؆/2E&Inś$E&Ibbؔ"[}fŶ!Sb)BȢ6egɫ=xZvY[؋kZ}fȄ/E{ &c[8´b &< tZ8A -ϤA4IhM ,DbAl Ix S.!\dU_-){ߋ/p?l/fE-[޼< csW8X)6&.VZ 9_4VK\S$릻5 H~~ S)9eLSfsdN)9eZp"M`M h$7%8ĉenÛeMY)7 N6Fr8SB#ol4cy^Nش^NHNiLNOr"qM2q Svm Ah\M˼9_^ͪ1u:_̰gՑtL䏑*4h[A<>6pUPw &ܷ N]po} [\E> cK WNFV2垻qR.q2c ,$ہ($'*Tr R:) /}7K̰Rϒ{谵Jåꩂy fP<1dMlL&c2Yɘ̋&5cı86[cql6ֱ86/:6Y&xȄ/&Lb؆/2&I$IIRdM$E&IMRl-&)IL)BRM)¶I)B!S-Eؔ"XG)PCZ~ |gCW@e4ܱԔ&?Rҥ@v3Jt(- O(ZJs@hN#e1=^!bt@'7FE>r#mB*YէqH\)4$ Μ#WGȁmc:2 C)!B?%qci t\T6὎Y#8yH>"fC< *4mG`!^Y!V06dD`tze?(JZ`Q/]t\Xd2&ӪlL]٘ScӪcqlul6M3>d掎 WtB^G8M`/@2q5C!F;$i5 T噗3ց,؅{Ct2eL%O)qTI Rm֒"`WRXBVۨ$d5 ң]9  +!VJEIO-ԿN^~CCUU, ]? n[ >SrimDHAnT|4K .8`MT%I~cH:!=T.!{fs=Z &y~0&&1<1lL&k2id&ql86&4ql6Ʊ:6E&lME6|$| _dE&|bb$)ڭx"$)ZLRL)BoV_dK6/"dKUoV_& O{Z}fسñW״k9| _< _8M hfwpiM hyZAbq&5hZIh6b.D@[ D"{iD4YC,~7l8F(Kt+sj;&^1:]4V*wD2ԓNoRa_NAZmBɏYxoI{CvDpp>e%1L(G^o%- cUE{S)9e̓SfsdN)9eZ*muǦM>2muv_VWS>6mɳAN^%4Ny_Z&4"6qMv2q? c|6cY9[N˼9_^tغ8RΗisڄA)Moq8 B\{'TC6RRKKC~S$v S::B5Oj_R@! v[@4K5*kPuE;)xȗаKS ș!!TM'^ʝegCA sOY&o. <0IKCPGR&[%1P6bW Kbxk/('ᤤ"qPƥ)8fruIboB=-@B1mB cz䟔=id~d6&ccێƱyҮJ4*cpEOU>aklEn/X [V ſSMgn~nOcAE[FZ#U@eJ͝½񢻜@P͸+>=#bc47.Y@VFV= mJ+Wcǂ{Xe>/Nj \jl TEsKck;>g鹓oM,>4$AnnݖGr@N \OG>qD[5v+ W=ABcVQB.dKCr B{I6x4N;-/(5}||rf }FFȐS9r%͎I3>]J|bid~d6&ccێƱyسE_d,In$$5)ExK6J>LאxF|nC&IzMqP>߃6p Ua?{-CJzߣ{u8[&[/UUu+^99@[9%b~wPerc_-QBrw߆ԡw%=QfV,+Iv+':Q2 0X1x򓞢t5M4Hc4iLJ_(M2d3n9pN~Ϩ}+O#HBG*kt\_SSIJ<9њa8V-iqj,S}R{d2&ӪlLEٚdZ4dccqlZtlƱiѱñ/J)ze'u֮˷CV|WUŧ萔NB#uN/(jyYN7R@~ZN=ijc5fNYsҭg׆jyIQϬuʱBg}6!oy;&ΕQ^?ax>tU5IDԤpi}7tۥ`rCP*Jܼ=URqX[*ȇ1?8KE*fN!W[,-%oBI>@S+JAYT1H# 'o|"W1j50?Θ5=>&`hd@\3vMMfc2MM86:6lg= _&|,|͒&)~;IIR!QR":٤->X.#siWrv.iDWD|7"}8H?=e=ezɜ2OOyry.wy~IĦ݈oGtgyv2gϼp>piSA>zC=7/$]Dt8 UA}&:o{Q=8rAP#8% wݍB6SNx >ip̜: 2 pdWǾzN$vIE;%7ҙSbZm!4?ޓ'Kծ.VAJ7Ѭs {IXqPi'QdTW*G#&BHu݃x FK=TݘV@MFU\G:tEŢ!9Ib4,u&Ot9-Kk ;' ]pΧFgklG n9hwZq|ҫQ8)Aql6iDwuvIWN ҄+K9g2odPST$$^fEfm& \'gIB;%5*2BXҫ.V]7@:+8`= ַ@mOAQoCPC9d"40\rksSql"_"kĆxCPrңOA4MA,BTS|}6CIt :[C,POYA{4 _bHb%7rJ&gyLdZ5ɼh2Y٘̋&&dWccul2M_9vH <ѡRݚ5Lvo%kZU:[jVCq.hE1q\=\S1 ݳ'^']O m-:6dT7"kf\)IY_8$qs7$A+dYQ@>!$Iqh%oJJ7Ju;vt݃ gRdž ~oꘝ#ޢxA1Pj[[T+Z*'7)v5݋!kxR#>Vlo`0X0DɏEֻFwI /?2@];o=e0.JxiqrrkD-c֜X櫓OPBﷂ$7^V"^]s-<))ۧLizʓ̻w߾3P."6Fl~;bϠ=˼<|YŻ]}p׬Ʀ߮ggm hb h/XKMY/8aXKMz Y/ȲyHFF2F^p%4!4.6 l dc.7dlؼfǞ22}3)2ez.wyy7b{Fh*b4/n^gV_v5}U}0l2mΗ[ [yqv:3wMM@} A} &#"G22}3P'Npt ,Od˻NJzg鹶ۗrFJ} ]Gn_)C[UF%F ]z((ڣ ' \O X\**WoZ蒒A6Qȑ_jKI}z~xP BK%]EON{NL鵒mU-AKH K1OՏkI5;>qlٖ@ n5Hv>+ǵi2MLfc2[yb2ɘLd6&dMfi>~z d(]a9}ElJ]1eprHH+^O :Ik"Kʪ*_)3NI{RSN*PTᦊf s+X!Zĩ0O Kݠ5FF*$)~쮃.#7Q!頱36J}^ y<RT9AB9lWfǛ\yt ׽h-#cF~> 4hG_e6)לzKLCEZSOERn4D(S8ݭ8Ėr,)V T{Rr kp(+$N -`x&d2&5'&1dM&c2/&ǦcqlflcqlZtlM&|$| _lOE&| _l//_&I$IIRdM$&IMRl-&)HRI)B![Ф!S)EȖ"dJ^,Eؖ"&\W-R}+qbɸJb/Lu\LWrkI.o/qEWx[wlX 2ɆR۟;3v%/пv<&*1T9FZr`霛5w`ͼDDȶ0*䍡.g/jw*zknv>b=M)+椐yT!O_W_!1N~oi- Du\xk!/~7° ̰/-s`+S?`_jH{\)zW1Eu*/`_dL&k2OLfc2?/c2/~cul86f2ǦE^DE؄/k&|m}uoV_$ŋImbSnERM)‹}"&O/ڬM&:kٱgmŧc6&|,|-GD@2M s 7i gӊՙM hy&Ljě@Їd 2@ D@A QBNG G$!f<*yR_`-Ix]ν*9tzBDu.X*YI;H=.9z cw0⹏Vơ)|r5Nmn/ڝJK!^X``;C9a+)qTX ܠvHQ "_?<}*gq:VP#sx}W_ޕ?e ,99ܱXcu@؈[w"^"ߋtƐ\Sidzd2&cӮcێƱyofwŞGꩠխ|^ݩIu>zLҀKGrKA<nzζ䚆t2\uJROHΌe#^o"ôBA~&wwCp;ɷE ^nt SրےGh];'8X KwM;.>Z*_z~hDMu,Q.KH*k^!]tRJNqЍK `;[!UK㔉Vп1iJd@UF @DK(ßH%౪CB,֩g{@Zuh@EV$OBYP᱘e48M:2"CJGiG[n0>(TE%,PIVڠ HN%u%A"(!Dګ硂ZqDw1C%S"t IH q@PmCP|4 A_k I 1> g`/{.PŪrxc{V.7$!]h (/.͗! 皾+@s=yTgP[tc_rxІ,kRCt9z'Œ@t<]˜BRtNUu%cvg2LoLd6y͖MM|l|))ۧ<~.]]i݈oG3bO2ez;/_V_[}l Y}a+ΗysvJfʋVNL]mg#O Dpo}d 2@/AGpo}l>2p-}d))ۧ<u PNpt<^woQa,*PH*vPzC~>a{qujTlL %Jq*i&e.~1a"n`Ktt,ɖ`ؓw~cqh>_{/GzɃMpKލp䑗NC6Xj%qHO9@iC֕>oFǖ4480Ѕ:ڏ5bCPh|Uq+"򻢕Jj|:(U*yyFZ:xzrepU8uɇoT;H'BUq3vMM&c2L96:6dgjJbwUi(h{lUd \Tg 2q(Kz,xq_0w*ivuLIgCs74 s,ZK.xn {{IOݗD LQ"r_-hѵ'K>Q"-oJ) Uw]2N9g%tl{QXcօD}sca"A_ޅqZIH X܇'6KcCRUL?q%tEKK)!**!В K!vx.%:)r xB.ãАKy|UF݅: GDĈ6%]$t1:DAիAB%p҇ZRO^*f,_g[1ujVJ1ayMJ6PxYccaxW_^jN ^+Q ^r6^͵>%N=id~d6&7LcӮcێƱyسŻ_d,In$$5)ExK6JcHVt*?4էcE,|?Wݏesj[XVChΦ$VKDj}o?|oA)%@~;jJm%w ; a[ ˭G|y:B|"g\yn tOkA;jh_E$]Q1 %i]5KSP%(1[]j9>T1^PsR!& bPfiwpqc?@R˘[muI~_T#E-L>Nwۘd2&ӪdLEٚLdZ40fؼdcqlZtl}op? ($6VybaQ]qwA + MeDB+yԔ+'N#z2?Aµ4YbOn >=6CIp"_0f4{|,?=e=ezɜ2Nyvi.wy~ui7b{O2e~;/4yyR}noW_1g5yƦkYc v Ad ^D8 'h8AEE,,6,ޥ&=- Y"0F%4&- 94F%4&- 5|lc&, dسSSOyF[8]ݻLo9."6Flz;b_Eev^?߮fc̰v˼9_&;l%3la+ad56y6R0 Dpm}d 6@-Aǻpm}l>2p/}l))ۧ<u PNptA4#}5,vH<|Ю7A! LC38l.б{Ηs8y3[8ҷ:1|1 4 .NZCQ D%(vvE.B`k'BT7)UC!S6qHSKUmD)_0"6ʤUi&߳IiGe4+$ }l(f <6%=+r\x;X|Zn؏5qC׻o6S=ydzd6&cӮcێƱ~{^ɉo<.8>U'rj>=k[_ˈC=[tCzPXUe]FS>U|{!RIT_;cQ4Ee4.x]G[]P,CౌGx~HuI҆n{%;\8^rTIi~ȷJN)zilaRax)9sUHčU]4&?~(fƠ)_`Q%